Frictional Games Forum (read-only)
[SCRIPT] Acid Scare - Printable Version

+- Frictional Games Forum (read-only) (https://www.frictionalgames.com/forum)
+-- Forum: Amnesia: The Dark Descent (https://www.frictionalgames.com/forum/forum-6.html)
+--- Forum: Custom Stories, TCs & Mods - Development (https://www.frictionalgames.com/forum/forum-38.html)
+---- Forum: Development Support (https://www.frictionalgames.com/forum/forum-39.html)
+---- Thread: [SCRIPT] Acid Scare (/thread-23656.html)

Pages: 1 2


Acid Scare - T122002 - 10-21-2013

Hi everybody! I'm trying to figure out how to do a simple Acid Scare.
I originally wanted to make something kind of close, but at the same time, not close to the original game when you have to get the acid in the Northern Prison level.

I tried using my own stuff, like names, however nothing worked. So I copied the original games coding and now everything works fine. However, now that the player has the jar filled with acid, I want him/her to collide with a script area shortly after which will spawn a suitor nearby. Although, that little script function wont work at all. I've tried using if statements and timers, but nothing will spawn the suitor.

Here is my coding:

void OnStart()
/////ADD USE ITEM CALLBACK/////
AddUseItemCallback("bottleEcon", "glass_container_1", "acid_container_1", "UseBottle", true);

void UseBottle(string &in asItem, string &in asEntity)
{
if(asItem == "glass_container_1"){
PlaySoundAtEntity("fillbottle", "puzzle_acid_success", asEntity, 1.0f, false);

RemoveItem(asItem);
GiveItemFromFile("glass_container_filled", "glass_container_filled.ent");

SetMessage("Ch02Level15", "AcidInJar", 0);

GiveSanityBoostSmall();

CompleteQuest("15Acid", "15Acid");
}
else if(asItem == "glass_container_filled"){
SetMessage("Ch02Level15", "AcidAlreadyInJar", 0);
}
else SetMessage("Ch02Level15", "AcidWithItem", 0);
}


/////SET ENTITY CALLBACK FUNC/////
SetEntityCallbackFunc("glass_container_filled", "SuitorScare");

void SuitorScare(string &in asEntity, string &in type)
{
SetEntityActive("SpawnEnemy", true);
AddEntityCollideCallback("Player", "SpawnEnemy", "SpawnSatan", true, 1);
}

void SpawnSatan(string &in asParent, string &in asChild, int alState)
{
SetEntityActive("Enemy_1", true);
}


When I change the scripting on the SetEntityCallbackFunc from "glass_container_filled" to "glass_container_1" then the script box goes off before I even fill the container with acid. The script box to collide with to spawn the Suitor is called "SpawnEnemy" which is set to inactive. However, when I change the name of the container to "glass_container_1", the script goes off spawning the monster despite being inactive and with no acid.

Can anyone help me out here?


RE: Acid Scare - DnALANGE - 10-21-2013

Could you explane a bit moer of this part : now that the player has the jar filled with acid, I want him/her to collide with a script area shortly after which will spawn a suitor nearby

AND this part:
When I change the scripting on the SetEntityCallbackFunc from "glass_container_filled" to "glass_container_1" then the script box goes off before I even fill the container with acid
,
WHY do you have 2 glascontainers?


RE: Acid Scare - FlawlessHappiness - 10-21-2013

(10-21-2013, 01:35 PM)DnALANGE Wrote: Could you explane a bit moer of this part : now that the player has the jar filled with acid, I want him/her to collide with a script area shortly after which will spawn a suitor nearby

AND this part:
When I change the scripting on the SetEntityCallbackFunc from "glass_container_filled" to "glass_container_1" then the script box goes off before I even fill the container with acid
,
WHY do you have 2 glascontainers?

2 containers because: 1 is empty. 1 is filled.

He uses the empty container on the area.
Another area is set active.
You do this by SetEntityActive("AREANAME", true);

Then the collide function

void COLLIDEFUNCTION(string &in asParent, string &in asChild, int alState)
{
SetEntityActive("SUITORNAME", true);
}

You also might want to add some pathnodes. Do you know how to?


RE: Acid Scare - Wapez - 10-21-2013

SetEntityCallbackFunc("glass_container_filled", "SuitorScare");

Unless I'm completely mistaken this does not work with items in your inventory.


RE: Acid Scare - T122002 - 10-22-2013

(10-21-2013, 08:14 PM)FlawlessHair Wrote:
(10-21-2013, 01:35 PM)DnALANGE Wrote: Could you explane a bit moer of this part : now that the player has the jar filled with acid, I want him/her to collide with a script area shortly after which will spawn a suitor nearby

AND this part:
When I change the scripting on the SetEntityCallbackFunc from "glass_container_filled" to "glass_container_1" then the script box goes off before I even fill the container with acid
,
WHY do you have 2 glascontainers?

2 containers because: 1 is empty. 1 is filled.

He uses the empty container on the area.
Another area is set active.
You do this by SetEntityActive("AREANAME", true);

Then the collide function

void COLLIDEFUNCTION(string &in asParent, string &in asChild, int alState)
{
SetEntityActive("SUITORNAME", true);
}

You also might want to add some pathnodes. Do you know how to?

Yes, I know how to use Pathnodes.
I've tried the stuff you said. I put in a picture for you to see the level.

Within' the picture, there is the barrel of acid. There is a small script area above the pot of acid so when you interact with the barrel, you take damage. So don't worry about the little script area above the barrel of acid.
Anyways, when I use the "glass_container_1" on the acid barrel, the current "glass_container_1" disappears and becomes the "glass_container_filled".

At this point when you actually have the container filled with acid. I want the player to turn around and walk forward, except now the script area will now be active and the monster will spawn.
However, even though I already have the script to set so that the script area will be active, nothing happens.

The script area name is "SpawnEnemy", so in my code when I have this and the Suitor name is "Enemy_1". So my code looks just like this:

void OnStart()
SetEntityCallbackFunc("glass_container_filled", "SuitorScare");

void SuitorScare(string &in asEntity, string &in type)
{
SetEntityActive("SpawnEnemy", true);
AddEntityCollideCallback("Player", "SpawnEnemy", "SpawnSatan", true, 1);
}

void SpawnSatan(string &in asParent, string &in asChild, int alState)
{
SetEntityActive("Enemy_1", true);
}

But nothing happens at all.

But the weird thing is, is if I change the name on my SetEntityCallbackFunc from "glass_container_filled" to "glass_container_1", then the script area goes off without even getting the acid.


RE: Acid Scare - daortir - 10-22-2013

I think I would have put my SetEntityActive function (the one that activates the script area) in your UseBottle function. Wouldn't it be easier ?
I'm still pretty noob with the scripting, but I don't exactly see why you wouldn't use something as simple as that : ).


RE: Acid Scare - T122002 - 10-23-2013

(10-22-2013, 02:55 PM)daortir Wrote: I think I would have put my SetEntityActive function (the one that activates the script area) in your UseBottle function. Wouldn't it be easier ?
I'm still pretty noob with the scripting, but I don't exactly see why you wouldn't use something as simple as that : ).

I've tried that and nothing works. Sad I don't know why. I might be typing in everything wrong or putting things in the wrong place. But the script area doesn't work.


RE: Acid Scare - Wapez - 10-23-2013

The problem here for you is that the "glass_container_filled" does not trigger the script. You should check to be sure that there is no entity in the map with that name already, cause if it is, the glass_container_filled will instead be named "glass_container_filled_1".

To be even more sure, I suggest changing the name on the filled jar to something like "filled_acid_jar" and try to script with that, to make sure no Amnesia entities interact with the name.

Let me know if this worked when you tried it, and if it didn't I'll code the script for you and explain a few simple things in the meanwhile.


RE: Acid Scare - T122002 - 10-23-2013

(10-23-2013, 08:11 AM)Wapez Wrote: The problem here for you is that the "glass_container_filled" does not trigger the script. You should check to be sure that there is no entity in the map with that name already, cause if it is, the glass_container_filled will instead be named "glass_container_filled_1".

To be even more sure, I suggest changing the name on the filled jar to something like "filled_acid_jar" and try to script with that, to make sure no Amnesia entities interact with the name.

Let me know if this worked when you tried it, and if it didn't I'll code the script for you and explain a few simple things in the meanwhile.

I just tried exactly what you did by changing the names and I just checked and there are no entities with the same name on this map.


RE: Acid Scare - Wapez - 10-24-2013

(10-23-2013, 09:58 PM)T122002 Wrote: I just tried exactly what you did by changing the names and I just checked and there are no entities with the same name on this map.

I will post a new, working script with the same function for you later today.