Need some help with scripting... new to AMNESIA'S scripting... - 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: Need some help with scripting... new to AMNESIA'S scripting... (/thread-17331.html) |
Need some help with scripting... new to AMNESIA'S scripting... - xResorx - 07-29-2012 Hello there, I need some help with a few scripts. NOTE: Amnesia was capitalized because I do play some other games that allow you to script. However those games use Lua. Quite honestly I can only do basic stuff within the constraints of that game, it has a limited version of the Lua language, but I would be extremely glad if you guys could help me out some. Okay so heres the situation, Ive just got through testing my custom story (FINALLY, stupid hidden file extensions....) and I have several scripted encounters already. I also have scripts for said encounters. Honestly I have no idea how theyre supposed to be placed in the .hps file. So I went looking in the .hps files of some of the main story maps(Usually how I learn script languages, editing). Perhaps Im not following the pattern right, or maybe my scripts are incorrect in their syntax. So if one of you more experienced coders could take a look and do two things for me Id be eternally grateful. Those two things are: 1.Help me with the correct syntax 2.Tell me how they should go in the .hps folder SORRY FOR NO SPOILERSSS! Im on a phone and its hard. So here they are: Script One- Blows out the lights when the player touches the correct area. void OnStart() { AddEntityCollideCallback("Player", "LightsOut", true); } void LightsOut(string &in asParent, string &in asChild, int alState) { [SetLampLit("outlamp_1", false, true); AddTimer("", 2, "Out2"); } ]--This bracketed line is repeated enough times to satisfy my lamp outtage needs. The following repetitions increase only the number behind "outlamp_" and "Out" after that comes voidOnEnter() { } voidOnLeave() { } Second script spawns a monster when the player grabs a specific Tenderbox voidOnStart() { SetEntityPlayerInteractCallback("monster_tinderbox", "function", true); } void function (string &in entity) { SetEntityActive("tinbox_prolwer", true); Third and final script Id like you guys to look at, slams a door in the players face when they touch an area void OnStart() { AddEntityCollideCallback("Player", "script_slam", true } void func_slam(string &in asParent, string %in asChild, int alState) { SetSwingDoorClosed("slamdoor1", true, true); PlaySoundAtEntity("", "react_breath_slow.snt", "Player", 0, false PlaySoundEntity("", "react_scare", "Player", 0, false); PlaySound GiveSanityDamage(5, 0f, true); } I do have some basic insight into what each part of the scripts do. Very basic but I can read down and give a pretty accurate guess as to what part of the script executes what action. Please help though. I still have HIGHLY limited knowledge on this. Thanks in advance guys! RE: Need some help with scripting... new to AMNESIA'S scripting... - Adny - 07-29-2012 Before posting I'd like to know if this is just 1 map, or 3 separate maps? Okay, under the assumption that this is 1 map, here's how it should look: void OnStart() { AddEntityCollideCallback("Player", "LightsOut", true); SetEntityPlayerInteractCallback("monster_tinderbox", "function", true); AddEntityCollideCallback("Player", "script_slam", "func_slam", true, 1); } void LightsOut(string &in asParent, string &in asChild, int alState) { [SetLampLit("outlamp_1", false, true); ///I don't know what "[]" do or what you're trying to accomplish with them, so I left them alone. AddTimer("", 2, "Out2"); } ] void function(string &in asEntity) { SetEntityActive("tinbox_prolwer", true); } void func_slam(string &in asParent, string &in asChild, int alState) { SetSwingDoorClosed("slamdoor1", true, true); PlaySoundAtEntity("", "react_breath_slow.snt", "Player", 0, false PlaySoundEntity("", "react_scare", "Player", 0, false); GiveSanityDamage(5, 0f, true); } void OnEnter() { } void OnLeave() { } RE: Need some help with scripting... new to AMNESIA'S scripting... - xResorx - 07-29-2012 Yes its one map. Those brackets were to show a repeated line of code. Because im on a phone and the script extended pretty far. (It was the same line, just different lamps) So I guess those dividers made out of "/" that the game makers used were just to organize? What if I go about adding in more stuff? Would it need to be positioned a certain way, or is it just slap it in after the other scripts? RE: Need some help with scripting... new to AMNESIA'S scripting... - Adny - 07-29-2012 (07-29-2012, 08:09 AM)xResorx Wrote: Yes its one map.The "//" (which has to be a minimum of two slashes, but there's no limit) makes the subsequent text (on that same line) "invisible", so to speak. If you're using notepad++ and set it to the C++ language, the text will turn green. It's ideal for organizing and keeping track of what functions do what. As far as adding more stuff goes, it's pretty straightforward; just make sure that you only have 1 OnStart, OnEnter, and OnLeave. If you have multiple callbacks, put them all under "void OnStart()" (there are a few exceptions as to when you would put callbacks under OnEnter, but it's so rare I won't go into that). RE: Need some help with scripting... new to AMNESIA'S scripting... - xResorx - 07-29-2012 error main(20,44) : EBR : Expected ")" or ";" It just changed o.o RE: Need some help with scripting... new to AMNESIA'S scripting... - Adny - 07-29-2012 My apologies; I don't usually let stuff like that slip through The 35 refers to the line and the 44 refers to the character. If you looked at the script, that would be the very last line; that means one of the lines wasn't written out correctly. I looked under "func_slam", and there are 2 problems: The first PlaySoundAtEntity was missing a ");" at the very end, and the second PlaySoundAtEntity was actually spelled as "PlaySoundEntity". Also, the GiveSanityDamage is only supposed to have 1 float (decimal) value, not 2. Here's the revised version of "func_slam": void func_slam(string &in asParent, string &in asChild, int alState) { SetSwingDoorClosed("slamdoor1", true, true); PlaySoundAtEntity("", "react_breath_slow.snt", "Player", 0, false): PlaySoundAtEntity("", "react_scare", "Player", 0, false); GiveSanityDamage(5.0f, true); } You can copy/paste in the script (without any of the arguments filled in) from here: http://wiki.frictionalgames.com/hpl2/amnesia/script_functions |