Jump to content

.D .TRA and .TP2 files


killjoyparris

Recommended Posts

Hello.

 

I am trying learn how to make infinity engine mods.

 

I've decided to start with trying to understand dialog and conversation modifications, because the banters are usually my favorite part of the game.

 

This all seems pretty complicated. I'm having a little bit of a hard time understanding how all of these files interact with one another. Would anyone be able to recommend a good place to start or a good mod to look at for someone interested in understanding how the infinity engine handles dialog?

 

 

For example, after reading a few tutorials and the Weidu documentation, I decided to start with exploring the Baldur's Gate II Romantic Encounters mod REv11... since it is mostly a dialog oriented mod.

 

I am currently studying the following files from the package I mentioned above: "Setup-RE.tp2," "Setup-RE.tra," "B!Ada.d," and "B!Ada.tra."

 

More specifically, looking at the "B!Ada.d"

/* Romantic Encounter Entry: "Storms and Lightning" by berelinde, June X, 2007 */

/* WeatherMistress Ada Encounter 1 - Entry and "hook"  */

I_C_T ~TALMISS~ 0 WeatherMistressOver1
== ~TALMISS~ IF ~Global("RE_AdaSex","GLOBAL",1) Global("B!WeatherMistressDone","GLOBAL",0)~ THEN @0 DO ~SetGlobal("B!WeatherMistressDone","GLOBAL",1)~
END

I_C_T ~TALMISS~ 0 WeatherMistressOver2
== ~TALMISS~ IF ~Global("RE_AdaSex","GLOBAL",1) Global("B!WeatherMistressDone","GLOBAL",1)~ THEN @1 DO ~SetGlobal("B!WeatherMistressDone","GLOBAL",2)~
END

I_C_T ~TALMISS~ 0 WeatherMistressOver3
== ~TALMISS~ IF ~Global("RE_AdaSex","GLOBAL",1) Global("B!WeatherMistressDone","GLOBAL",2)~ THEN @2 DO ~SetGlobal("B!WeatherMistressDone","GLOBAL",3)~
END

1) I'm not sure what "I_C_T" is doing. If I had to take a wild guess, I'd assume it is a variable of some sort? But, I'm not sure if this is its declaration and initialization and am slightly confused about what it's really doing.

 

2) I'm not sure what the 0 after ~TALMISS~ is for? I'm pretty sure TALMISS is the identifier for some sort of creature maybe, but I am still digging around try to figure out the what it is connected to.

 

2) I'm not sure what to make of the keyword "WeatherMistressOver1"... Throughout the .d file I am seeing variations of that same phrase (i.e. WeatherMistressOver2, WeatherMistressOver3, B!WeathermistressDone, BeginWeathermistress1, BeginWeathermistress0.1) I don't understand what they are doing?

 

 

 

If anyone has any insight into what's going on in this snip-it I'd be greatly appreciative. Or, if anyone has any suggestion on my more newbie friendly dialogs I should be looking at, I'd also greatly appreciate that as well.

Link to comment

Everyone always says to look at the Branwen BG2 mod... I still haven't because I don't really mod NPCs or dialogues, but they say it's the best/easiest place to start.

 

The short answer to your title question is, a .d file is simply how you write out your dialogue in a text editor ... A .dlg file is that same dialogue, in a file that is created after you instruct Weidu to

"COMPILE ~my_mod/my_file.d~"
... And a .tp2 file is simply a text file with all of the installation instructions for the mod. (Like the COMPILE instruction.)
Link to comment

Modding can be a lot of fun, once you get the hang of it.

 

I_C_T stands for "INTERJECT_COPY_TRANS". It means, that your NPC (or whomever you want to) interjects into the dialogue as specified*, and afterwards, the original transitions for the original speaker will be carried out. This is important for compatibility reasons: with so many mods, any addition to dialogues has to link back to the original, or other mod added content wouldn't show.

 

*This is your other two questions."TALMISS" is the dlg this interjection goes to, it's the one from the Weather Mistress Ada. "0" stands for the dialogue state block, "0" being the first one (almost everything in IE modding starts countinf at "0"), so it's probably her greeting line. And the "WeatherMistressOver1" will be a check variable the I_C_T syntax will set to prevent the interjection to happen twice.

 

Look at the WeiDU readme how I_C_T works. It's basically a very easy way to make a combatible interjection into an existing dialogue with adding of a custom check variable to prevent the interjection to happen indefinietly (as it might happen if something goes wrong upon installation/deinstallation).

 

EDIT: In the example above, another line is added for Wether Mistress Ada, that's what the == ~TALMISS~ stands for.

Link to comment
2) I'm not sure what to make of the keyword "WeatherMistressOver1"... Throughout the .d file I am seeing variations of that same phrase (i.e. WeatherMistressOver2, WeatherMistressOver3, B!WeathermistressDone, BeginWeathermistress1, BeginWeathermistress0.1) I don't understand what they are doing?

The example here is indeed a bit confusing as this I_C_T sets extra Globals that are redundant

e.g "WeatherMistressOver1" sets a Global("WeatherMistressOver1","Global",1) which is equal to Global("B!WeatherMistressDone","GLOBAL",1), i.e that second one is superfluos since the first one is mandatory for interjects and can be used instead of creating the second one.

Consequently

I_C_T ~TALMISS~ 0 WeatherMistressOver2

== ~TALMISS~ IF ~Global("RE_AdaSex","GLOBAL",1) Global("B!WeatherMistressDone","GLOBAL",1) Global("WeatherMistressOver1","Global",1)~ THEN @1 DO ~SetGlobal("B!WeatherMistressDone","GLOBAL",2)~

END

does the same (it also sets Global("WeatherMistressOver2","Global",1) instead of incrementing the other one.

 

And just as a hint

Since these inteject names automatically create globals for the whole game make sure you name them adequately to avoid incompatibility - like here WeatherMistressOver2 should have been named B!WeatherMistressOver2 (the B! being the authors unique signature).

Link to comment

And just as a hint

Since these inteject names automatically create globals for the whole game make sure you name them adequately to avoid incompatibility - like here WeatherMistressOver2 should have been named B!WeatherMistressOver2 (the B! being the authors unique signature).

Indeed, this can't be stressed enough. Best you register a prefix - the sooner, the better. Because, if you get into modding it will be a pain in the *** to add a prefix to everything you already wrote.
Link to comment

I was lucky in this regard - I started modding with a prefix, but I registered (discovered such a thing as a prefix list, to be precise) well after the beta version. Luckily for me, the prefix I chose wasn't taken then... Well, that was 13 years ago. :crazyeyes: (Sorry for the OT)

Link to comment

Thank you all for your very helpful replies. I feel like I have soOo much to learn and there is a lot of information for me to sift through. My apologies on the slow reply, I've been trying read as much as possible, in a sense trying to avoid saying something stupid with my follow up questions...

 

Also,thank you for the collective suggestion. I will register a prefix as soon as I get the basics down, and have decided upon a first project. Ideally, I'd like to create something that's worth sharing with other people, one day. For now, my short term goal is to be able to: 1) create a custom .cre file, 2) edit area scripts to spawn my .cre, and 3) have the .cre engage in dialog with the PC.

 

 

@subtledoctor Thank you for suggesting I take a look at Branwen. That mod is extremely well documented, and has been a gold mine of information. While, it doesn't really explain a lot in depth, it is extremely useful to have as a base and has served as my primary source of direction lately.

 

 

I think that I have a basic understanding of .D, .TRA and .TP2 files now. I have also read a few technique involving banter and interjections. Moving forward I would like to learn more about writing scripts (.BAF files). Does anyone have any suggestion on where to look for more information on that?

 

For example taking a look at O#BranS.baf from the package Branwen_v3.

IF 
InParty(Myself)
Global("O#BranShutUp","GLOBAL",0)	 // O#BranShutUp is used in player-initiated dialogue. Look it up.
Global("O#BranTalk","GLOBAL",0)
THEN
RESPONSE #100
RealSetGlobalTimer("O#BranTimer","GLOBAL",3600)
SetGlobal("O#BranTalk","GLOBAL",1)       // Each block must run only once, which is also why we set O#BranTalk to 1 - it means the same set of conditions will never be repeated again
END

1) Looking at the variable "O#BranShutUp." In the comment Kulyok says to look up O#BranShutUp. Does anyone know what she meant by this, or where I could find more information on this?

 

2) I'm slight confused about a few of the commands "RESPONSE #100" seems to be used in every single block of code in this file. And, I'm not sure what it means. I'm also not clear on a lot of the commands which are used for example Global(), RealSetGlobalTimer(), and SetGlobal() to name a few. What are the differences between using the keyword "Global" and "Local" in a command? What does the value of 3600 represent in RealSetGlobalTimer? What is the difference between "Global()" and "SetGlobal()"? Ect. Ect. Ect. Does anyone have suggestions on what I should do to find out? Is there a tutorial that I have overlooked, or is this documented somewhere?

 

3) Lastly, I seem to be missing how .BAF scripts are linked. For instance, looking the the following tutorial for .d files: "http://forums.pocketplane.net/index.php/topic,53.0.html " This explains how the names of certain dialog files are written as entries into the .2da file Pdialog.2da. Then during game play the infinity engine launches certain dialog files based on external conditions, such as an NPC leaving or joining the party. Does something similar occur with .BAF files. How are the .BAF scripts linked to an NPC and the game?

Link to comment

Thank you all for your very helpful replies. I feel like I have soOo much to learn and there is a lot of information for me to sift through. My apologies on the slow reply, I've been trying read as much as possible, in a sense trying to avoid saying something stupid with my follow up questions...

 

Also,thank you for the collective suggestion. I will register a prefix as soon as I get the basics down, and have decided upon a first project. Ideally, I'd like to create something that's worth sharing with other people, one day. For now, my short term goal is to be able to: 1) create a custom .cre file, 2) edit area scripts to spawn my .cre, and 3) have the .cre engage in dialog with the PC.

 

 

@subtledoctor Thank you for suggesting I take a look at Branwen. That mod is extremely well documented, and has been a gold mine of information. While, it doesn't really explain a lot in depth, it is extremely useful to have as a base and has served as my primary source of direction lately.

 

 

I think that I have a basic understanding of .D, .TRA and .TP2 files now. I have also read a few technique involving banter and interjections. Moving forward I would like to learn more about writing scripts (.BAF files). Does anyone have any suggestion on where to look for more information on that?

 

For example taking a look at O#BranS.baf from the package Branwen_v3.

IF 
InParty(Myself)
Global("O#BranShutUp","GLOBAL",0)	 // O#BranShutUp is used in player-initiated dialogue. Look it up.
Global("O#BranTalk","GLOBAL",0)
THEN
RESPONSE #100
RealSetGlobalTimer("O#BranTimer","GLOBAL",3600)
SetGlobal("O#BranTalk","GLOBAL",1)       // Each block must run only once, which is also why we set O#BranTalk to 1 - it means the same set of conditions will never be repeated again
END

1) Looking at the variable "O#BranShutUp." In the comment Kulyok says to look up O#BranShutUp. Does anyone know what she meant by this, or where I could find more information on this?

 

2) I'm slight confused about a few of the commands "RESPONSE #100" seems to be used in every single block of code in this file. And, I'm not sure what it means. I'm also not clear on a lot of the commands which are used for example Global(), RealSetGlobalTimer(), and SetGlobal() to name a few. What are the differences between using the keyword "Global" and "Local" in a command? What does the value of 3600 represent in RealSetGlobalTimer? What is the difference between "Global()" and "SetGlobal()"? Ect. Ect. Ect. Does anyone have suggestions on what I should do to find out? Is there a tutorial that I have overlooked, or is this documented somewhere?

 

3) Lastly, I seem to be missing how .BAF scripts are linked. For instance, looking the the following tutorial for .d files: "http://forums.pocketplane.net/index.php/topic,53.0.html " This explains how the names of certain dialog files are written as entries into the .2da file Pdialog.2da. Then during game play the infinity engine launches certain dialog files based on external conditions, such as an NPC leaving or joining the party. Does something similar occur with .BAF files. How are the .BAF scripts linked to an NPC and the game?

To 1) In her PID dialogues (found in her joined J file, some large dialoge block starting with IsGabber(Player1) ) there will be an option saying you do not like her banters which will SetGlobal("O#BranShutUp","GLOBAL",1). In this case all those banters will be stopped. Only if the global is not set or set 0 (which is the same condition) the banters are triggered. Remark - InParty(Myself) as the first condition in a block should be avoided,

IF

Global("O#BranShutUp","GLOBAL",0)

InParty(Myself)

Global("O#BranTalk","GLOBAL",0)

is avoiding strange situations and possible bugs.

To 2) RESPONSE #100 means that the actions stated thereafter will ALWAYS (100%) happen. You may use a different value e.g. RESPONSE #50 and then another block RESPONSE #50 with conditions for the other ~50% - or three blocks RESPONSE #33 - or whatever you like if you want to code some random behaviour. In the majority of code blocks you will use RESPONSE #100 to get the actions always happen if the conditions are fulfilled.

Global means that the conditions can be evaluated by all scripts of all areas, dialogues, creatures, etc in the game. Local means that only files associated with the respective creature can evaluate these conditions. (Another type of *Locals" are area scripts which contain the area reference e.g. Global("PartyEntered","ar0602",1) this global is only checked if the party is in ar0602 (Irenicus Dungeon)

Examples: Global("Chapter";"Global",2) every script, creature, etc can evaluate that we are in Chapter 2 of the game.

Global("IWasKickedOut";"Locals",1) can be used multiple times, once for any NPC who checks if he/she is kicked out from the party. A special case for Locals that you find frequently is NumTimesTalkedTo (to check if the player had already talked to a person or not) Of course the value is Local for each NPC.

To 3) When you compile BAF files (via your TP2) they end up as BCS files in the game. When you create your creature, you assign 1 (or more) scripts to that cre (override, class, race, general, default). I will not go into detail about their hierachy (this is a whole tutorial by itself) - but if you plan a joinable NPC you will most likely be content with one script which is Override and you define it at offset 248 of your cre file. The game will automatically read all commands for the NPC from this file. When the NPC joins, it automatically gets assigned some files in some of the other slots (but let us forget this for the moment).

The dialogues associated with your creature are defined Pdialog.2da (joined J and kicked-out P files) and interdia.2da (banter B....).

Link to comment

Do you already work with the IESDP?

 

Your question concerning Global(), SetGlobal(), and "GLOBAL" and "LOCALS" would be explained there, maybe some others, too.

Take your time and don't be afraid to ask.

 

 

Thank you so much! This is exactly what I was looking for! I'm not sure how I overlooked the IESDP, but I did... Now I just need to spend some time familiarizing myself with this resource.

 

 

 

To 1) In her PID dialogues (found in her joined J file, some large dialoge block starting with IsGabber(Player1) ) there will be an option saying you do not like her banters which will SetGlobal("O#BranShutUp","GLOBAL",1). In this case all those banters will be stopped. Only if the global is not set or set 0 (which is the same condition) the banters are triggered. Remark - InParty(Myself) as the first condition in a block should be avoided,

 

IF

Global("O#BranShutUp","GLOBAL",0)

InParty(Myself)

Global("O#BranTalk","GLOBAL",0)

is avoiding strange situations and possible bugs.

 

To 2) RESPONSE #100 means that the actions stated thereafter will ALWAYS (100%) happen. You may use a different value e.g. RESPONSE #50 and then another block RESPONSE #50 with conditions for the other ~50% - or three blocks RESPONSE #33 - or whatever you like if you want to code some random behaviour. In the majority of code blocks you will use RESPONSE #100 to get the actions always happen if the conditions are fulfilled.

Global means that the conditions can be evaluated by all scripts of all areas, dialogues, creatures, etc in the game. Local means that only files associated with the respective creature can evaluate these conditions. (Another type of *Locals" are area scripts which contain the area reference e.g. Global("PartyEntered","ar0602",1) this global is only checked if the party is in ar0602 (Irenicus Dungeon)

Examples: Global("Chapter";"Global",2) every script, creature, etc can evaluate that we are in Chapter 2 of the game.

Global("IWasKickedOut";"Locals",1) can be used multiple times, once for any NPC who checks if he/she is kicked out from the party. A special case for Locals that you find frequently is NumTimesTalkedTo (to check if the player had already talked to a person or not) Of course the value is Local for each NPC.

 

To 3) When you compile BAF files (via your TP2) they end up as BCS files in the game. When you create your creature, you assign 1 (or more) scripts to that cre (override, class, race, general, default). I will not go into detail about their hierachy (this is a whole tutorial by itself) - but if you plan a joinable NPC you will most likely be content with one script which is Override and you define it at offset 248 of your cre file. The game will automatically read all commands for the NPC from this file. When the NPC joins, it automatically gets assigned some files in some of the other slots (but let us forget this for the moment).

The dialogues associated with your creature are defined Pdialog.2da (joined J and kicked-out P files) and interdia.2da (banter B....).

 

 

I think I'm starting to get the gist of writing .BAF scripts,... or the very basics of it all at least. Thank you for you explanations.

 

For all of the test scripts I've been putting together, I've mostly been using the following tutorial: "http://www.pocketplane.net/tutorials/simscript.html" You mentioned that the sequential order in which scripts are executed is internally set hierarchically by the Infinity Engine. And, after reading the above tutorial, it looks like official execution order for all seven types of scripts is this: Override, Area, Specifics, Class, Race, General and Default.

 

The following diagram helped me understand what you were talking about.

 

flow2.jpg

 

I think everything about script execution order makes sense to me. However after reading a few tutorials, I'm not quite sure what a "Specifics" script is though. The pocketplane tutorial I mention, listed it as number 3 in terms of priority during the script execution hierarchy? Do you, bychance, have examples of what "Specifics" script are or possibly know where I might run across one?

 

 

Next, I also have a small question about how how Baldur's Gate official NPC's are spawned. For instance, looking back at the starting area for Baldur's Gate II, Irenacus's Dungeon (AR0602.ARE).... I'm not seeing Minsc, Jaheira, Imoen, or Yoshimo listed as actors for the area with Near Infinity. Also, while looking at the Area script ( AR0602.BCS ) I'm not seeing any of the official NPC's being created. This has me slightly confused because, the only other NPC I've really looked at in depth is Branwen... Upon installing the Branwen_v3 mod, the package extends the area script, AR0500.BCS, allowing her to be introduced into Baldulr's Gate II. The code for Branwen is as follows:

IF
Global("O#BranSpawn","GLOBAL",0)
THEN
RESPONSE #100
CreateCreature("O#Bran",[4053.255],13)  // To choose your own coordinates, choose a spot in the game and press CTRL-X
SetGlobal("O#BranSpawn","GLOBAL",1)
Continue()
END

Are official NPC's created in-game using something different than the CreateCreature() function? Or am I possible overlooking something?

Link to comment

Loads of information and questions - so maybe it is better to narrow it down to what you need for your purpose.

 

Script hierachy etc is good to know BUT if you want to create an NPC (joinable?) with mostly dialogues, those are not relevant for you BECAUSE a joined NPC gets all the scripts automatically reassigned

>>> at the moment an NPC joins

  1. The dialogue file changes from the default (set in the cre-file) to the joined-file (as defined in pdialog.2da)
  2. All scripts are removed EXCEPT override
  3. Dplayer2.bcs is assigned as default script
  4. The player has the option to assign a class script (from a number of pre-defined scripts) to the NPC via the character screen (as a modder you cannot influence that)
  5. The NPC is added to Baldur.gam

This means as a NPC modder you are generally using either override or the actions in your dialogues for scripting (unless you want to mod enemy behaviour, AI or such). Do NOT use DPlayer2, as this is used by all joined NPCs and contains general instructions (like how to react to bad/good REP, what to do when kicked out and how to die when poisoned...). You can also use mini-scripts aka Cutscenes that are triggered from dialogues or override for specific situations. And you can put things into area scripts if they are supposed to happen at fixed locations,

 

Are official NPC's created in-game using something different than the CreateCreature() function?

Yes, they are original contents of the baldur.gam mentioned in point 5 above. DO NOT mod this file directly but use either CreateCreature() or add your NPC with Weidu to an are-file (http://www.weidu.org/~thebigg/README-WeiDU.html#hevea_default444).

Once your NPC is created and joined (or you made him a Global by script), the next save adds it to Baldur.gam and you can use e.g. functions like MoveGlobal etc.

Link to comment

This means as a NPC modder you are generally using either override or the actions in your dialogues for scripting (unless you want to mod enemy behaviour, AI or such). Do NOT use DPlayer2, as this is used by all joined NPCs and contains general instructions (like how to react to bad/good REP, what to do when kicked out and how to die when poisoned...). You can also use mini-scripts aka Cutscenes that are triggered from dialogues or override for specific situations. And you can put things into area scripts if they are supposed to happen at fixed locations,

 

Are official NPC's created in-game using something different than the CreateCreature() function?

Yes, they are original contents of the baldur.gam mentioned in point 5 above. DO NOT mod this file directly but use either CreateCreature() or add your NPC with Weidu to an are-file (http://www.weidu.org/~thebigg/README-WeiDU.html#hevea_default444).

Once your NPC is created and joined (or you made him a Global by script), the next save adds it to Baldur.gam and you can use e.g. functions like MoveGlobal etc.

 

Once again, I tip my hat to you Roxanne. :laugh2:

 

I've been poking around some of the objects in Near Infinity, but I definitely never would have thought to look at the BALDUR.GAM file. You have saved me many hours of head-scratching and confusion.

 

 

Now, to answer your question... What is my purpose?

 

To be perfectly honest, I'm not trying to create a joinable NPC right now. I don't think that I currently possess the necessary skills to create a worth-while NPC when there are already so many great characters in-game roaming the lands vying for a spot in the main player's party. Ideally, once I have a better handle of things, I would like to start changing/improving already existing game content. For instance, I would very much enjoy doing something like extend the content of infamous Baldur's Gate I NPCs (such as Finch or Eldoth) into Baldur's Gate II. Because, I always though it a shame we never got to see them pop in throughout the rest of the Bhaal Saga. But, before I start mucking around with fan-favorites, I should probably establish that I can at least accomplish something basic.

 

So,... currently I am trying to extend the Baldur's Gate I quest, "Landrin's Possessions."

 

In a vanilla game, Landrin can be found on the top floor of the Friendly Arm Inn. As the players find her, her home in Beregost has been overrun with huge spiders and she asks the PC to slay the spiders as well as grab a few things from her house, and bring them to her at the Friendly Arm Inn.

 

Essentially, in my mod, I would like to place a check at the beginning of chapter 2. If the player has completed "Landrin's Possessions," I would like to change Landrin's location from the Friendly Arm Inn, to her house in Beregost. Under these circumstances, should the PC's choose to revisit Beregost anytime during or after chapter 2, they will be greeted by Landrin. She will thank them for allowing her to move back home. ...There will be another encounter with a few huge spiders, and an optional scene at the Burning Wizard closing the adventure...

 

More-or-less, I'm aiming to start with a project which is small and manageable. Right now, I am playing around with trying to move Landrin from her starting location at the Friendly Arm Inn to Beregost, using scripting. I am thinking about using MoveBetweenAreas(S:Area*,P:Location,I:Face*).

  1. The description for MoveBetweenAreas() in the IESDP reads: "This action will move the active creature to the specified point in the indicated area, facing the appropriate direction." How do I ensure that the NPC I want to move is the "active creature" in my script?
  2. After reading this post: "http://www.shsforums.net/topic/29014-a-movebetweenareas-question/" It looks like MoveBetweenAreas() wont work if you're currently in the area at the time of the move? I was asking about script execution order, because I am unsure which script would be best to edit? Do you have any suggestions?
Link to comment

Good idea for a little *Unfinished Business" mod.

Generally there would be three (yes, there are more...) options for your purpose.

1. Move Landrin by her own script

2. Move Landrin by area script

3. Move Landrin by dialogue option

 

Now - in this specific situation, we have Landrin.cre, she has neither a script name nor her own script (we will not touch stuff like shout.bcs or mage1.bcs). She has dialogue Landri,dlg.

 

A) So either it is option 3 - or we do something with her cre file to give her (at least a script name that any script can use.)

In your tp2

COPY_EXISTING ~Landri.cre~ ~override~
WRITE_ASCII 0x280 ~Landri~

 

This gives her script name Landri which we can use e.g. in area script to move her.

 

B) After she has received all items from her quest, we have this

Global("HelpLandrin","GLOBAL",3)

This can be used by your mod to extend her plot just by dialogue.

 

So here is a starter for that

APPEND Landri
IF WEIGHT #-1~Global("HelpLandrin","GLOBAL",3) AreaCheck("ar2303")~ THEN BEGIN GoHome
SAY~I have decided to take the risk of the roads and move back home. Come and visit me for a cup of tea if you like, dear.~
IF~~THEN DO~SetGlobal("HelpLandrin","GLOBAL",4) MoveToPoint([482.818])
MoveBetweenAreas("ar3315",[334.283],0)~
EXIT
END

 

IF WEIGHT #-1~Global("HelpLandrin","GLOBAL",4) AreaCheck("ar3315")~ THEN BEGIN AtHome
SAY~Oh, my dear rescuers! Would you have a cup of tea with me?~
IF~~THEN REPLY~It would be a pleasure, Landrin.~DO~ActionOverride(Player1,ForceSpell(Myself,CLERIC_CURE_LIGHT_WOUNDS)) ActionOverride(Player2,ForceSpell(Myself,CLERIC_CURE_LIGHT_WOUNDS)) ActionOverride(Player3,ForceSpell(Myself,CLERIC_CURE_LIGHT_WOUNDS)) ActionOverride(Player4,ForceSpell(Myself,CLERIC_CURE_LIGHT_WOUNDS))

ActionOverride(Player5,ForceSpell(Myself,CLERIC_CURE_LIGHT_WOUNDS)) ActionOverride(Player6,ForceSpell(Myself,CLERIC_CURE_LIGHT_WOUNDS)) ~EXIT
IF~~THEN REPLY~Get lost, old hag. The spiders may digest you.~EXIT
END

END

 

So why WEIGHT #-1? State 12 of the original dialogue has condition True(). This means it will always trigger after the vanilla quest has been done and since your appends will go behind that *blocking* condition, they would never trigger. Weight moves them up in the order.

(Just a skelleton to flesh out) Also check the area references for your game.

At the end of this, you have Landrin in Beregost and Global("HelpLandrin","GLOBAL",4) - so you can continue from there.

Link to comment

Like your mod idea. But I would advise to leave Landrin in FAI until she met the PC the first time. Then move her to her house for the follow ups. This will save you (and the community) numerous player questions à la "Help, can't find Landrin in FAI!!!1!" - just a thought.

Link to comment

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...