Jump to content

Component Dialog Help Needed


grogerson

Recommended Posts

I have the basic Bardic Reputation working, without banters. I have encountered two problems on the two smallest banter elements.

 

[size="2"]+ ~OR(2) InParty("garrick") InParty("eldoth")~ + @3 EXTERN ~X#LP1REP~ X#Troubador1OwnBard[/size]

BG1 does not recognize OR(). The example linked to in the tutorial doesn't make sense to me, so any replacement suggestions are welcome.

 

[size="2"][trigger list near line 171, column 82 of tb#_compile_eval_buffer/BG1Tweaks/dlg/X#LP1REP.D] PARSE WARNING at line 171 column 1-59
Near Text: )
[StateCheck] argument [CD_STATE_NOTVALID] not found in [State.IDS][/size]

BG1 and BG2 have the same State.IDS. It doesn't kill the install, but I'm wondering if there might be problems later. As it is, I had to remove all InMyArea calls, since BG1 does not have it in the Trigger.IDS.

 

I'd like to include the banters, but I need to know if these problems could stop that.

Link to comment

You would need 3 lines to replace the OR() statement:

+ ~InParty("garrick") !InParty("eldoth")~ + etc

+ ~!InParty("garrick") InParty("eldoth")~ + etc

+~InParty("garrick") InParty("eldoth")~ + etc

 

As for the second, you can patch in CD_STATE_NOTVALID by putting this in the tp2 near the top:

 

APPEND ~STATE.IDS~

~0x80101FEF CD_STATE_NOTVALID~

UNLESS ~CD_STATE_NOTVALID~

 

Rather tha InMyArea(), you could try See(). The idea is to make sure that the NPC isn't trying to talk when he isn't even there.

Link to comment
I have the basic Bardic Reputation working, without banters. I have encountered two problems on the two smallest banter elements.

 

+ ~OR(2) InParty("garrick") InParty("eldoth")~ + @3 EXTERN ~X#LP1REP~ X#Troubador1OwnBard

BG1 does not recognize OR(). The example linked to in the tutorial doesn't make sense to me, so any replacement suggestions are welcome.

In place of this single response using an OR check in its condition, we can use multiple responses all going to the same state, with conditions that collectively cover the same cases as the original. The trick is to make sure that only one of the additional responses' conditions will be true at a time, so that players won't see the same response more than once.

 

To determine what conditions we should use for the new responses, let's start by describing exactly what cases are covered by the original condition.

 

"if garrick or eldoth are in the party" will be true in 3 separate cases:

 

"if garrick and eldoth are in the party"

"if garrick is in the party but eldoth is not"

"if eldoth is in the party but garrick is not"

 

So, the easiest thing to do is use 3 different responses to cover these scenarios in place of the 1 response using OR():

 

+ ~InParty("garrick") InParty("eldoth")~ + @3 EXTERN ~X#LP1REP~ X#Troubador1OwnBard
+ ~InParty("garrick") !InParty("eldoth")~ + @3 EXTERN ~X#LP1REP~ X#Troubador1OwnBard
+ ~!InParty("garrick") InParty("eldoth")~ + @3 EXTERN ~X#LP1REP~ X#Troubador1OwnBard

 

However, we can simplify this further by combining "if garrick and eldoth are in the party" with one of the other two statements. Let's combine it with "if garrick is in the party but eldoth is not" and see if we can get the number of responses we need down to 2.

 

The common factor with both of these statements is that garrick is in the party. If that condition is met, you'll see that one of the statements will be true when eldoth is in the party and one of them will be true when eldoth is not in the party. This means that regardless of whether eldoth is in the party or not, one of these responses will be displayed, so there's really no point in checking if he's in the party. We can remove that part and we end up with the statement "if garrick is in the party" covering the same cases as the two separate statements. So, replacing those two responses with our new one, we've shortened what we need down to:

 

+ ~InParty("garrick")~ + @3 EXTERN ~X#LP1REP~ X#Troubador1OwnBard
+ ~!InParty("garrick") InParty("eldoth")~ + @3 EXTERN ~X#LP1REP~ X#Troubador1OwnBard

Link to comment

Thank you both. I'll check it out tonight. If it works it will leave only one thing remaining - BIMOEN.DLG. She's the only one without it. What's the best way get her one? Copy & rename of another empty .dlg doesn't work - tried last night...

Link to comment
For interjection stuff like we used in Bardic Reputation Adjustment, you can use her J dialogue file.

Sounds nice, but it seems BG1/TotSC doesn't have an imoenj file either, though Imoen2 seems to have the requisite kickout dialogs. I presume this is the file I should direct it to?

Link to comment

Thanks for the help you've given so far, berelinde!

 

Everything installs now, with the exception of Ajantis' complaint. Seems there's two commands in x#lprcajr.baf that BG1 doesn't have - CombatCounter() (TRIGGER.IDS) and StartDialogNoSet() (ACTION.IDS). It's not necessary, but it does add some color...

 

Maybe jastey'll drop by with this last bit of help. In the meantime, I'll begin testing this component properly.

Link to comment

For StartDialogueNoSet(), you have a number of options. You can use Dialogue(object) or StartDialogue(object,file), but the NPC might start talking while the PC is still some distance away.

 

Not sure how to get around the CombatCounter() one. You could try !See([ENEMY]), I guess. The point here is to make sure that the dialogue doesn't happen while the PC is engaged in combat, so !See([ENEMY]) would probably work.

Link to comment

!See([ENEMY]) is already in the file, so I'll just comment out CombatCounter() for now. I'll use StartDialog("ajantj",[PC]), unless there's a problem with the command as stated. It installs, but I've no idea if it'll work.

 

As for the complaint itself, I can't seem to track it by the x#lprcad files. Have I missed something? Or does it somehow connect to the bajant.dlg file?

 

I've also been looking over some of the other files. Wow! That's a lotta work you guys have done! This might get interesting later... (restrains self - one step at a time)

Link to comment
Everything installs now, with the exception of Ajantis' complaint. Seems there's two commands in x#lprcajr.baf that BG1 doesn't have - CombatCounter() (TRIGGER.IDS) and StartDialogNoSet() (ACTION.IDS). It's not necessary, but it does add some color...

 

StartDialogNoSet() exists in BG1 very well, but it's named StartDialogueNoSet(). See in IESDP list.

!See([ENEMY]) could be enough good, if you accept, that dialog will start immediately after the last enemy is dead. Another way is to use CombatCounter() emulation for BG1. Jastey's "Ajantis BG1 Expansion" already use this method.

Link to comment

Revived because of a question from Zed Nocear, who's supervising the Polish translation of BG1 Tweaks.

 

There's a chunk of code in Alora's section of Move NPC's from Baldur's Gate.

	/* Trying to prevent Alora's CTD */
 COPY_EXISTING ~AR0130.bcs~ ~override~
DECOMPILE_BCS_TO_BAF
REPLACE_TEXTUALLY
  ~!InParty("alora")~
  ~!InParty("alora") Global("X#AloraDontBeDifficult","GLOBAL",1)~
COMPILE_BAF_TO_BCS
BUT_ONLY_IF_IT_CHANGES

What was the problem the produced this code, and is it limited to TUTU/BGT or will it also happen in vanilla BG1? If it isn't needed for vanilla, I'll remove it.

Link to comment

Archived

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

×
×
  • Create New...