Jump to content

Dynaheir's Journal - Where's that Drow?


Guest TTL

Recommended Posts

Hello,

 

I'm starting a new topic for what is essentially an old problem. I did a clean install of both BG's, converted to EasyTutu and started a new game. When I made it back to Drizzt and the Journal quest, everything seemed to be in order: the good gnolls spawned as they should, but then - no Drizzt. I tried sleeping on the spot for ridiculous amounts of time as well as leaving the area and returning. Nothing. Looks like I can avoid this problem by dismissing him, but that still leaves me with a quest where two out of three options lead to a dead end... One possibility is that he spawns in an unexpected location and we walk around the are looking for each other in opposite directions, but that's unlikely if "Drizzt appears near where he disappears" as the readme says.

 

-TTL

Link to comment

Ooookay...I think my theory was right. When I loaded an earlier save and cleared the entire area of monsters, Drizzt finally decided to make his re-entry. Seems like there was a lone hobgoblin wandering around the direction he's supposed to come from - no idea if that was a factor here.

 

This, however, was not the end of my problems with the fellow. He claims to give me the journal, but I receive no item - I tested this three times and it happens every time. Now, I know from my earlier experiment that if you kill the evil gnolls yourself you get an actual journal item - I am supposed to recieve one this way too, right?

 

-TTL

Link to comment

Yep, you are supposed to -- let me go look:

 

OK, in _AR4200.bcs:

IF
 Globaltimerexpired("X#DztSearch","GLOBAL")
 Global("X#DynaJournal","GLOBAL",5)
 Global("X#DrzztReappears","FW4200",0)
THEN
 RESPONSE #100
Activate("drizzt")
ActionOverride("drizzt",Movetoobjectnointerrupt(Player1))
ActionOverride("drizzt",Startdialognoset(Player1))
Setglobal("X#DrzztReappears","FW4200",1)
Continue()
END

 

and

 

//---------------------------------------------------------//
//Encounter 3. Drizzt Searched on his own.  Scenario 1a	//
//---------------------------------------------------------//
APPEND ~_DRIZZT~
//Return to Drizzt, if Edwin is NOT in the Group
 IF WEIGHT #-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")
   GiveItemCreate("X#DYJOR2",Player1,1,1,0)
   ActionOverride("drizzt",EscapeArea())~ EXTERN ~_DYNAHJ~ X#DYQU31SOLVE
 END
END //end append Drizzt

 

or else

//---------------------------------------------------------//
//Return to Drizzt, if Edwin IS in the Group			   //
//---------------------------------------------------------//
CHAIN
IF WEIGHT #-2 ~Global("X#DynaJournal","GLOBAL",5)
Global("X#EdDyJorFight","GLOBAL",0)
PartyHasItem("X#DYJOR1")
!PartyHasItem("X#DYJOR2")
InParty("edwin")
InParty("dynaheir")
!Dead("edwin")
!Dead("dynaheir")~ THEN ~_DRIZZT~ X#DYQU31
@112
== ~_BEDWIN~ @113
DO ~SetGlobal("X#EdDyJorFight","GLOBAL",1)
SetGlobalTimer("X#DJRomanceAbduction","GLOBAL",TWO_DAYS)
SetGlobalTimer("X#DJTOED","GLOBAL",ONE_DAY)
SetGlobal("X#DynaJournal","GLOBAL",8)
TakePartyItem("X#DYJOR1")
DestroyItem("X#DYJOR1")
GiveItemCreate("X#DYJOR2",Player1,1,1,0)~
END
++ @114 EXTERN ~_BEDWIN~ X#DYQU311
++ @115 EXTERN ~_BEDWIN~ X#DYQU312
++ @116 EXTERN ~_BEDWIN~ X#DYQU314

 

Doublechecked the tp2, and the itm files; X#DYJOR1.ITM, X#DYJOR2.ITM

 

OK, let me think here... I playtested this and the playtesters hit this; something must be going wrong with something that we did not think of. First, both you and berelinde had to clear all of the spawn points to get Drizzt to reappear. Yet the only code left that deals with seeing an enemy is the actual interaction (which I will remove right now, as it is actually unnessesary).

You get the page form Drizzt, which uses the exact same code as this interaction (GiveItemCreate("X#DYJOR1",Player1,1,1,0) and GiveItemCreate("X#DYJOR2",Player1,1,1,0) ). All of the cres and items are named correctly and present (check your override folder, but X#DYJOR2.ITM will be there, I am sure).

 

I put a copy of the journal on each of the lead gnolls (the Good one and the Bad one) so that if someone breaks the quest by killing the good gnolls they will still get a resolution of sorts...

 

The more I look at this, the more I think we need a cutscene. It stinks, but there we have closer control of the conditions. This still doesn't address why this code is not working in your install though. I will get some help here, and report back.

Link to comment

OK, this probably should be in the workroom, but I'm having a day/night... I'll put it out here for anyone to comment on and help. I need to get this fix wrapped up within 24 hours (plus sleep and do my regular work) so this is an open international call for code-ripping and rebuilding! TTL's difficulty on a fresh install just really worries me... I can't find an error in the code, but I know cutscenes suspend scripts while running, so they may be more robust than "regular" code.

 

Instaed of dealing with area scripts at all, we could move to cutscenes. The first part is simple:

In Dynaheir's .BCS, add two blocks, #1 calling the good gnolls, #2 calling the bad gnolls if indicated.

IF
Global("X#DQGoodGnolls","FW4200",0)
Global("X#DynaJournal","GLOBAL",3)
THEN
RESPONSE #100
SetGlobal("X#DynaJournal","GLOBAL",4)
SetGlobal("X#DQGoodGnolls","FW4200",1)
StartCutSceneMode()
StartCutScene("X#DGCUT")
END

IF
Global("X#DyQuPartyAlone","GLOBAL",1)
Global("X#DynaJournal","GLOBAL",5)
Global("X#DQBadGnolls","FW4200",0)
THEN
RESPONSE #100
SetGlobal("X#DQBadGnolls","FW4200",1)
StartCutSceneMode()
StartCutScene("X#DEGCUT")
END

 

Create two cutscenes, good gnolls and bad gnolls:

X#DGGCUT.BAF (compiled in Phase2)

IF
 True()
THEN
 RESPONSE #100
CutSceneId(Player1)
ClearAllActions()
MoveViewObject(Player1,INSTANT)
SmallWait(3)
CreateCreatureOffscreen("X#DGNLG1",0)
CreateCreatureOffscreen("X#DGNLG2",0)
CreateCreatureOffscreen("X#DGNLG3",0)
CreateCreatureOffscreen("X#DGNLG4",0)
ActionOverride("X#DGNLG1",MoveToObject(Player1))
ActionOverride("X#DGNLG2",MoveToObject(Player1))
ActionOverride("X#DGNLG3",MoveToObject(Player1))
ActionOverride("X#DGNLG4",MoveToObject(Player1))
ActionOverride("X#DGNLG1",Dialogue(Player1))
EndCutSceneMode()
END

 

X#DEGCUT.BAF (compiled in Phase2)

IF
 True()
THEN
 RESPONSE #100
CutSceneId(Player1)
ClearAllActions()
MoveViewObject(Player1,INSTANT)
Wait(5)
CreateCreatureOffscreen("X#DGNLE1",0)
CreateCreatureOffscreen("X#DGNLE2",0)
CreateCreatureOffscreen("X#DGNLE3",0)
CreateCreatureOffscreen("X#DGNLE4",0)
ActionOverride("X#DGNLE1",MoveToObject(Player1))
ActionOverride("X#DGNLE2",MoveToObject(Player1))
ActionOverride("X#DGNLE3",MoveToObject(Player1))
ActionOverride("X#DGNLE4",MoveToObject(Player1))
ActionOverride("X#DGNLE1",Dialogue(Player1))
EndCutSceneMode()
END

 

Now comes the awkward part (though I would appreciate everyone rechecking the above for boneheaded moves... ) The current code has Drizzt deactivating himself at the end of dialoge; all variations of this is working:

 

/* (Drizzt leaves/ Journal 1b//Scenario 1b (Drizzt helps party search) X#DztSearch=ONE_DAY */X#DynaJournal=3 // Party has encounter with Good Gnolls next.
 IF ~~ X#DQDZ25
 SAY @35
 IF ~~ DO ~SetGlobalTimer("X#DztSearch","GLOBAL",ONE_DAY) SetGlobal("X#DynaJournal","GLOBAL",3) MoveToOffset([50.50]) Deactivate("drizzt")~ JOURNAL @36 EXIT
 END  
/* X#DztSearch=ONE_DAY X#DynaJournal=3 AddJournalEntry MoveToOffset([50.50]) Deactivated "drizzt" */

 

Then he reactivates himself on a timer in area script. I don't see what is wrong, but this is not working on TTL's install until all spawn pints are completely cleared:

IF
 GlobalTimerExpired("X#DztSearch","GLOBAL")
 Global("X#DynaJournal","GLOBAL",5)
 Global("X#DrzztReappears","FW4200",0)
THEN
 RESPONSE #100
Activate("drizzt")
ActionOverride("drizzt",Movetoobjectnointerrupt(Player1))
ActionOverride("drizzt",Startdialognoset(Player1))
Setglobal("X#DrzztReappears","FW4200",1)
Continue()
END

 

I can't see a way around this. We want Drizzt left alone, saved in the area, so that he is not created anew.

 

And finally, ideas on why this is not working: dialogue is firing, but the GiveItemCreate isn't working:

APPEND ~_DRIZZT~
//Return to Drizzt, if Edwin is NOT in the Group
 IF WEIGHT #-2 ~Global("X#DynaJournal","GLOBAL",5)
 PartyHasItem("X#DYJOR1")
 !PartyHasItem("X#DYJOR2")
 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)
   TakePartyItem("X#DYJOR1")
   DestroyItem("X#DYJOR1")
   GiveItemCreate("X#DYJOR2",Player1,1,1,0)
   ActionOverride("drizzt",EscapeArea())~ <<<<removing this, it is duplicated at the end of X#DYQU31SOLVE
EXTERN ~_DYNAHJ~ X#DYQU31SOLVE
 END
END //end append Drizzt

I could do something like Imoen's cutscene with the Tarnesh spellbook:

in Dynaheir's .bcs,

IF
Global("X#DynaJournal","GLOBAL",8)
Global("X#DynaJournalGiven","GLOBAL",0)
THEN
RESPONSE #100
SetGlobal("X#DynaJournalGiven","GLOBAL",1)
StartCutSceneMode()
StartCutScene("X#DZTJOR")
END

 

in X#DZTJOR

IF
True()
THEN
RESPONSE #100
CutSceneId("dynaheir")
TakePartyItem("X#DYJOR1")
DestroyItem("X#DYJOR1")
SmallWait(1)
GiveItemCreate("X#DYJOR2","dynaheir",1,1,0)
Wait(1)
EndCutSceneMode()
END

 

Does this hold up? Any ideas on Drizzt reappearing? If I could have him reliably teleport onto the party when reactivated, perhaps?

Link to comment

Try ActionOverriding Drizzt for the GiveItemCreate, or changing the parameter to LastTalkedToBy instead of Player1. It looks fine, but then again the Infinity Engine's not always the same in execution as in theory. :blush:

 

Putting stuff in Dynaheir's script is a decent solution if the area script's giving problems.

Link to comment

Hi. I just thought you might want to look at the Gnoll conversation with the PC too. It appears to hit some kind of cycle and only one option leads me out of it. Something like, "leave the area or else" blather, blather, blather. Everything else leads to the same thing that tells you nothing about the Old One or getting the book or anything. Is that supposed to be like that?

Link to comment

Eeek! (Sorry for the double post)

 

It appears that I too have the Drizzt "gives" you the journal, but there is nothing there. There was a mention of my party losing an item, I do not know if that has something to do with it.

 

Is there a way to spawn the item?

Link to comment

Absolutely; the line

GiveItemCreate("X#DYJOR2",Player1,1,1,0)

 

gives you the info!

 

CLUAConsole:CreateItem("X#DYJOR2")

 

should work, unless somehow I messed up the item name... if it works, please let me know because it means that the bug is definitely in my scripting and not in my item creation routine!

Link to comment

Hi and thanks for the speedy reply!

 

After I posted, (ready, fire, aim), I thought "Duh! The command is in this thread!!" Anyway, it is not X#DYJOR2. That spawned nothing. X#DYJOR1 however did spawn a scroll with the description of being torn from a journal.

 

Now, I too did a clean install of everything. After the Drizzt encounter, he said he was going west and went east. I meandered about killing everything until the area was clear and none of the gnolls had anything. Is that right? I then went back to the area where I met Drizzt, rested 3 times and then moved a bit east and found him. I am assuming that perhaps the x,y coordinates are a bit off from where you meet him with the gnolls to where you meet him again.

 

I hope this helps with sorting out any bugs. :)

Link to comment

Yes, it helps immensely. It means that somehow I messed up getting the item X#DYJOR2.ITM copied from the installation folder and into your override directory.

 

If you could, I would greatly appreciate your help. In BG1NPC\Phase2\ITM there should be a file X#DYJOR2.ITM. Try manually copying that file to your override directory. Perhaps I messed up and renamed it X#DYJOUR2.ITM? If so, find it in override and adjust the spelling! Then go back to a save from before encountering Drizzt, and try the encounter again. If he gives you the item, then it is something I am doing wrong in the tp2; I will get this as top piority and get a fix out asap.

Link to comment

I checked the Phase 2/ITM file and both are in there, and both are spelled correctly. Additionally, they are in the Override file.

 

I am going to play it through again, but it will take me a bit. Stupid me moved on and did not save that portion. :)

Link to comment
I am still stuck on how CreateItem could get the X#DYJOR1 but not the X#DYJOR2. Thank you for taking the time to help troubleshoot! I will go ask around and see if I can find what could cause this hassle.

More like thank you for taking the time to fix the problem! (And answer my questions) I will let you know what I find within the next few hours.

Link to comment

OK, confirmation that on my EasyTutu_TOB install, everything works as advertised and I can CLUA in both items.

 

Confirmation that the dialogue does indeed loop, and that is not great but ok; I apparently set it up so that there was no way out of the dialogue loop other than either goading the gnolls into combat or sending them on their way, which is ok, but in doing so inadvertently opened the possibility of having a conversation loop for folks following the "good" option.

 

Confirmation that you did indeed do everything right with Drizzt, waiting and then finding him... the direction he walks off is to the southeast, so we need to change the dialogue to reflect this (we can't have him walk west into a spawn point, or he may never reappear).

 

I have another suspicion -- if you have NI or DLTCEP, try opening up X#DYJOR2.ITM. I think the original item file is based on a TOSC item. Perhaps the item is being created, but is referencing non-existant BAMs. If so , the fix is for me to change the item base and toss another version up here for you to drop in override before you go trying the quest again!

Link to comment

Archived

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

×
×
  • Create New...