Jump to content

Drizzt, and dynaheir's journal, problems


Guest Draco

Recommended Posts

I am currently playing Bg1 Npc project (V12beta3) on A bp-bgt game, and have found two bugs concerning Drizzt and Dynaheir's journal.

 

1. After the original Gnoll routine Drizzt's dialogue calls for him to "Escapeareadestroy(90)". This destroys the deactivate/activate scripting you guys made for him, as he will not reactivate after the "X#DztSearch" timer runs out.

Omitted this in my game with clua, but should probably be fixed in your scripts either by removing "escapeareadestroy(90)" as appropriate, or by using respawning instead of activate/deactivate.

 

2. When you meet up with Drizzt again after hunting with him his dialogue calls for him to give the party dynaheir's journal by "ActionOverride("drizzt",GiveItemCreate("X#DYJOR2",Player1,1,1,0))". This command never launches, as Drizzt is given a new command "ActionOverride("drizzt",EscapeArea())" before the dialogue is over.

I fixed this by moving the first ActionOverride in the same "action" as the other.

 

Thanks for enhancing this great game!

 

Draco

Link to comment
2. When you meet up with Drizzt again after hunting with him his dialogue calls for him to give the party dynaheir's journal by "ActionOverride("drizzt",GiveItemCreate("X#DYJOR2",Player1,1,1,0))". This command never launches, as Drizzt is given a new command "ActionOverride("drizzt",EscapeArea())" before the dialogue is over.

I fixed this by moving the first ActionOverride in the same "action" as the other.

Yes, there are quite a few places like this in many dialogs. Action removing current actor should always come last in the action queue.

Link to comment

Thank you both:

 

@1. I need to do a check, because I don't recognise this:

 escapeareadestroy(90)

.. we don't have that in Tutu (did I miss this in your work, pro5?)

 

And

 

@2. Got it. Just to make sure/clear, the repair that needs to be made to (numerous) sections of both Tutu and BGT files is making sure that the BAF or DLG actions using EscapeArea(), EscapeAreaDestroy(), LUAesc. etc. etc. (basically anything that is removing the primary actor running the script or doing the action) to last place. So for Drizzt;

 

APPEND ~_DRIZZT~
/* Return to Drizzt, if Edwin is NOT in the Group */
 IF WEIGHT #-2 ~Global("X#DynaJournal","GLOBAL",5)
 PartyHasItem("X#DYJOR1")
 InParty("dynaheir")
 InMyArea("dynaheir")
 !Dead("dynaheir")
 !InParty("edwin")
 See(Player1)~
 THEN BEGIN X#DYQU30
   SAY @107
   = @108
   = @109
   IF ~~ THEN DO ~SetGlobal("X#DynaJournal","GLOBAL",8)
   SetGlobalTimer("X#DJRomanceAbduction","GLOBAL",TWO_DAYS)
   SetGlobalTimer("X#DJTOED","GLOBAL",ONE_DAY)
   ActionOverride("drizzt",GiveItemCreate("X#DYJOR2",Player1,1,1,0))
   TakePartyItem("X#DYJOR1")
   DestroyItem("X#DYJOR1")~ EXTERN ~_DYNAHJ~ X#DYQU31SOLVE
 END
END

CHAIN ~_DYNAHJ~ X#DYQU31SOLVE
@110
== ~_DRIZZT~ @111 DO ~SetGlobal("X#DynaJournal","GLOBAL",8) ActionOverride("drizzt",EscapeArea())~ EXIT //Player 1 has X#DynaJournal=8, X#DYJOR2.ITM, X#DJRomanceAbduction=TWO_DAYS

 

becomes

 

 

 

 

Hold on -- I *don't* got it... this looks like it should be evaluated last already. I must be misunderstanding the way this parses. I know scripts work top down, dialogue reply states are evaluated bottom up - but it looks like a number of coders on this project (myself included) have operated as if CHAIN (and regular) actions are processed in the same order as states are presented to the player, with ActionOverride() being used to move other actors. The actions all are evaluated at the end of the dialogue...

 

can someone please review the correct syntax for keeping an action last in queue for me?

Link to comment

DRIZZT.DLG has EscapeArea() in states 10,11,12 and 13 (also 15 but it's irrelevant). It's possible that weidu or NI decomile EscapeArea() as EscapeAreaDestroy(90).

 

Here's how the same state looks in BGT file:

APPEND ~DRIZZT~
//Return to Drizzt, if Edwin is NOT in the Group
 IF  WEIGHT #-2 ~!Global("endofbg1","GLOBAL",2)
Global("X#DynaJournal","GLOBAL",5)
 PartyHasItem("X#DYJOR1")
 !PartyHasItem("X#DYJOR2")
 InParty("dynaheir")
 InMyArea("dynaheir")
 !Dead("dynaheir")
 !InParty("edwin")
 CombatCounter(0)
 !See([ENEMY])
 See(Player1)~
 THEN BEGIN X#DYQU30
   SAY @107
   = @108
   = @109
   IF ~~ THEN DO ~SetGlobal("X#DynaJournal","GLOBAL",8)
   SetGlobalTimer("X#DJRomanceAbduction","GLOBAL",TWO_DAYS)
   SetGlobalTimer("X#DJTOED","GLOBAL",ONE_DAY)
   TakePartyItem("X#DYJOR1")
   DestroyItem("X#DYJOR1")
   ActionOverride("drizzt",GiveItemCreate("X#DYJOR2",Player1,1,1,0))~ EXTERN ~DYNAJ~ X#DYQU31SOLVE
 END
END //end append Drizzt
//---------------------------------------------------------
CHAIN ~DYNAJ~ X#DYQU31SOLVE
@110
== ~DRIZZT~ @111 DO ~ActionOverride("drizzt",EscapeArea())~ EXIT

 

I'm not sure what happens here to prevent / interrupt ActionOverride("drizzt",GiveItemCreate("X#DYJOR2",Player1,1,1,0)). Maybe the second ActionOverride in DYNAJ is performed at the same time as the first one in DRIZZT and thus overrides it. It's possible because these two actions get assigned to 2 different actors. If it was the same actor, they'de be executed one after another.

Link to comment
ActionOverride("drizzt",GiveItemCreate("X#DYJOR2",Player1,1,1,0))
D it really have to be "ActionOverride"? Maybe a plain "GiveItemCreate("X#DYJOR2",Player1,1,1,0)" would suffice.

I know this is not the problem here, but in my cutscenes, actions that were meant to be performed by the Cutscene ID using "ActionOverride" were not performed (a direct command was needed).

 

Maybe the second ActionOverride in DYNAJ is performed at the same time as the first one in DRIZZT and thus overrides it. It's possible because these two actions get assigned to 2 different actors. If it was the same actor, they'de be executed one after another.
The problem could be avoided by setting a variable instead of the EscapeArea() in the dialogue, and move it into the drizzt script instead.
Link to comment
I'm not sure what happens here to prevent / interrupt ActionOverride("drizzt",GiveItemCreate("X#DYJOR2",Player1,1,1,0)). Maybe the second ActionOverride in DYNAJ is performed at the same time as the first one in DRIZZT and thus overrides it. It's possible because these two actions get assigned to 2 different actors. If it was the same actor, they'de be executed one after another.

 

The exact thing I did was move the "ActionOverride("drizzt",GiveItemCreate("X#DYJOR2",Player1,1,1,0))" from node #91 to node #92, just before "ActionOverride("drizzt",EscapeArea())", in the drizzt dialog. Apparently "ActionOverride("drizzt",GiveItemCreate("X#DYJOR2",Player1,1,1,0))" never had a chance to run before Drizzt got the Escape order. The two stacks just fine if they are in the same action node. I might be wrong on this, but doesn't "ActionOverride" call for drizzt to make an action outside of dialog, which he is unable to execute while still in dialog mode?

Link to comment

Could be... I am still learning how things really parse. I can see it and follow the rules, but not really "grok" an be able to *think* in the code - still a translation proces for me. Give me a few years and some programming classes, and I might just get there!

Changing both BGT and Tutu sides to

CHAIN ~DYNAJ~ X#DYQU31SOLVE
@110
== ~DRIZZT~ @111 DO ~ActionOverride("drizzt",GiveItemCreate("X#DYJOR2",Player1,1,1,0)) ActionOverride("drizzt",EscapeArea())~ EXIT

Link to comment
I am currently playing Bg1 Npc project (V12beta3) on A bp-bgt game, and have found two bugs concerning Drizzt and Dynaheir's journal.

 

1. After the original Gnoll routine Drizzt's dialogue calls for him to "Escapeareadestroy(90)". This destroys the deactivate/activate scripting you guys made for him, as he will not reactivate after the "X#DztSearch" timer runs out.

Omitted this in my game with clua, but should probably be fixed in your scripts either by removing "escapeareadestroy(90)" as appropriate, or by using respawning instead of activate/deactivate.

 

2. When you meet up with Drizzt again after hunting with him his dialogue calls for him to give the party dynaheir's journal by "ActionOverride("drizzt",GiveItemCreate("X#DYJOR2",Player1,1,1,0))". This command never launches, as Drizzt is given a new command "ActionOverride("drizzt",EscapeArea())" before the dialogue is over.

I fixed this by moving the first ActionOverride in the same "action" as the other.

 

Thanks for enhancing this great game!

 

Draco

 

I found another problem with the Dyaheir subquest. When Winski shows up and summons his imps the dialog calls for him to "ReallyForceSpell("winski",DRYAD_TELEPORT)".

This should be "ReallyForceSpell("x#winski",DRYAD_TELEPORT)".

 

Oh, and Setta doesn't leave if you don't buy a ribbon...

Link to comment

cool - blast it all to heck.

 

Changing code to match the rejiggered DVs Gorilym and I worked out - X#WINSKI is the name of the creature, the dialogue file, and the dv for convenience.

Edit: repaired all instances in X#DYQST.D in working Beta4, both Tutu & BGT, and rechecked all code for correct use of winski2 or X#WINSKI as dvs for sleeping man anim vs walking anim Winski. Will need to clean up BGT formatting and prettify file - I was young, silly, and stuck thinking BASIC when I wrote it, so it has alot of cruft.

 

I will explore the code and make sure that if you don't buy a ribbon, the other dialogue choices or a script does an EscapeAreaDestroy()

 

Thank you!

Link to comment

Another error...

 

X#jaclub had "_IBLUN01" and "_GBLUN01" for bams, which should obviously be simply "IBLUN01" and "GBLUN01".

 

Isn't that a weidu error btw?

Link to comment

Nope, not a WeiDU error, a cmorgan/BGT conversion error. The BGT files went to Ascension64 early, before he tweaked his new tool - as a test case, some of the materials didn't get completely vetted. Pro5 has a solid list for me to fix, including a few BAM, script, and weapon assignments that I missed patching from Tutu resources to BGT resources. I am working stuff up integrating pro5's fixes, but if you would like to tweak your own install, check for the thread about checking forums for errors - pro5 was damned impressive, proposing fixes as well as reporting the bugs, so most of the work is done (just needs integrating into the files).

 

 

 

The bams ae fixed in the internal Beta - if you register or tell me an SHS, PPG, BWL, or G3 address (or CoM, for that matter!) I can send you the internal link as soon as i get a repaired version up!

Link to comment
The bams ae fixed in the internal Beta - if you register or tell me an SHS, PPG, BWL, or G3 address (or CoM, for that matter!) I can send you the internal link as soon as i get a repaired version up!

No need, I'm fixing things with dltc as I go. Just thought I should mention the errors I discover in case no one else has noticed them yet.

Link to comment

Archived

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

×
×
  • Create New...