Modding Tutorial Part 2: Make Your NPC Comment and Move Along at the End of SoD

Version 9, by jastey

Contents

  1. The Set-Up: Make Biff comment on what happened
  2. NPCs leave the group after The Incident
  3. Biff visits the PC in Prison
  4. Make Biff wait at the Prison Exit
  5. Biff should say something to the PC after the escape
  6. Biff should appear in the last area (abduction scene, bd6100.are)[DEPRECATED]
  7. Biff should move with group in the last area (abduction scene, bd6100.are)[DEPRECATED]
  8. If Biff should NOT be present after the PC escapes the prison
  9. Credits, Used Tools, and Helpful Links
  10. Version History

This tutorial deals with how to integrate your NPC into the events and cutscenes at the end of SoD. Biff the Understudy will be the example NPC in this guide. Note: I gave up on integrating the NPC at the end cutscene, so this tutorial is not helpful if you want to have your NPC walk alongseide the PC in the abduction scene. The former chapters regarding this are still in for reference, though.

Note: This tutorial contains heavy SoD spoilers.

Some nomenclature:

xx used as a modding prefix in this tutorial. If you don't have a prefix, check the IE Community Filename Prefix Reservations List and register one at Black Wyrm Lair Forums.
xxBiff Biff's scriptname (death variable)
xxBiffs.bcs Biff's SoD override script
xxBiffsP.dlg Biff's kickout (post) dialogue

1. The Set-Up: Make Biff comment on what happened

After the PC dealt with the main foe and returned from literally hell, the game is basically over except for the PC's "fall". As soon as the player let the PC talk to Sergeant Dazzo on the stairs in bd4300.are to go to rest after the celebrations, the PC's fall is initialized which consists of several cutscenes with a few dialogues in between.

In case your NPC will not accompany the PC into Irenicus Dungeon in BGII (story wise), and you want to save your NPC from the emotional and moral dilemma of witnessing the PC's murder accusations and then just wave "bye" and disappear, you could also make them say good-bye and actually leave the moment the group retreats for rest. This could be done by I_C_T into BDDAZZO.dlg states 2 and 3.

The first of the cutscenes leading to Skie's death and the accusations towards the PC is the cutscene where the Hooded Man makes the PC believe they killed Skie. At the end of this scene, when the Flaming Fist accuses the PC of being a murderer, all NPCs come into the room and some of them comment on what happened. Up to that point, all NPC of the group are handled by the cutscenes directly (bdcut60a.bcs and bdcut60b.bcs) and no further patching is needed, unless you want your NPC to participate even if they are not in the group.

We look at Biff being part of the group now. As already said, some NPCs give a comment on the murder scene. Actually, all of the NPCs have a comment, but it is scripted so there is a 50% chance of each whether they comment or not.

Also, there is two different possible comments with regard to whether the NPCs believe in the PC's guilt or innocence, depending on the PC's reputation. Of course, for your own NPC, you could trigger positive or negative reactions depending on what you like (romance / friendship status, custom count of good deeds, etc.) if you do not want to restrict it to reputation alone.

The comments are handled in bd4100.bcs where we add the following bd4100_patch.baf for Biff:

/* bd4100_patch.baf. CHARNAME is accused of murder. Biff comments */

/* first script block: Biff makes a comment in case of lower reputation */
IF
	Global("bd_plot","global",591)
	!GlobalTimerNotExpired("bd_mdd1352_ot_timer","bd4100") //this is SoD's own timer and makes sure all comments fire before the next scripted event kicks in 
	Global("xxBiff_SoDMurderAccusations","bd4100",0)
	ReputationLT(Player1,10) //checks for low reputation. Replace this with whatever you want the NPC's reaction to be dependent on 
	IsValidForPartyDialogue("xxBiff")  
THEN
//	RESPONSE #100 //We want Biff to comment always, so we leave these two lines out. Take these in if you want a 50% chance of your NPC not commenting on the murder accusations. 
//		SetGlobal("xxBiff_SoDMurderAccusations","bd4100",1)
	RESPONSE #100
		SetGlobal("xxBiff_SoDMurderAccusations","bd4100",1)
		SetGlobalTimer("bd_mdd1352_ot_timer","bd4100",ONE_ROUND) //set the timer according to how long the comment is. ONE_ROUND equals ONE_MINUTE = 6 seconds realtime. You can put in the amount of realtime seconds as a number directly.
		DisplayStringHead("xxBiff",~Well, <CHARNAME> might have not been the friendliest, but I know the script so... Nope, I don't think <PRO_HESHE> did it.~)   
		Continue()
END

/* second script block: Biff makes a comment in case of higher reputation */
IF
	Global("bd_plot","global",591)
	!GlobalTimerNotExpired("bd_mdd1352_ot_timer","bd4100")
	Global("xxBiff_SoDMurderAccusations","bd4100",0)
	!ReputationLT(Player1,10) //checks for high reputation. If you used something else above, here goes the direct opposite of the trigger you used above.
	IsValidForPartyDialogue("xxBiff")  
THEN
//	RESPONSE #100 //uncomment these 2 lines for the original SoD 50% chance
//		SetGlobal("xxBiff_SoDMurderAccusations","bd4100",1)
	RESPONSE #100
		SetGlobal("xxBiff_SoDMurderAccusations","bd4100",1)
		SetGlobalTimer("bd_mdd1352_ot_timer","bd4100",ONE_ROUND)
		DisplayStringHead("xxBiff",~Whoa, <CHARNAME>'s such a nice fellow. (And I know the script so... Nope, I don't think <PRO_HESHE> did it.)~)   
		Continue()
END

In the tp2, this line specifies the patching to bd4100.bcs (note the EXTEND_TOP):

/* Biff comments on murder accusation */
EXTEND_TOP ~bd4100.bcs~ ~%MOD_FOLDER%/baf/bd4100_patch.baf~
EVALUATE_BUFFER

2. NPCs leave the group after The Incident

After the scene with the murder accusation is through, the NPCs leave the group and the PC finds themselves alone in prison.

If we do nothing here, the NPC will be treated like a multiplayer NPC and just be with the PC inside the prison.

The leaving of the NPCs is handled by bdcut61.bcs. There is the following to be noted for how this is handled:

  1. Is your NPC supposed to appear after the PC leaves the prison, either to say good-bye or because his story places him into Irenicus Dungeon? If not, you do not need to set the variable in the example below.
  2. Is your NPC a continuous NPC that can be met in BGII again? Then you might want to add any "NPC left the group" or "romance no longer open" variables you need to set, either because your NPC makes a reappearance in BGII and you want to make them continuous, or to account for the game being continued in BGII and you don't want the player to start the game with any misleading variables etc.

We add the following for Biff (bdcut61_patch.baf):

/*bdcut61_patch.baf: Biff leaves the group after the murder accusations */
IF
	InParty("xxBiff")  
THEN
	RESPONSE #100
		CutSceneId(Player1)
		SetGlobal("xxBiff_SoDparty_epilogue","GLOBAL",1) //This will make Biff appear after the PC was released from prison.
		SetGlobal("xxBiff_Kickout","GLOBAL",1) //this is for inner mod detection, for example if the game's a continuous EET game. Put here whatever you need for your own mod.
		ActionOverride("xxBiff",LeaveParty())
		ActionOverride("xxBiff",DestroyAllFragileEquipment(ADAMANTINE)) //this destroys all drow equipment, just in case the NPC had any.
END

And to patch bdcut61.bcs with our bdcut61_patch.baf, we need this line in the tp2 (note the EXTEND_TOP):

/* after PC gets arrested for murder: Biff leaves party */
EXTEND_TOP ~bdcut61.bcs~ ~%MOD_FOLDER%/baf/bdcut61_patch.baf~
  EVALUATE_BUFFER

3. Biff visits the PC in Prison

While in prison, the PC gets some visits depending on romance status of NPCs. The order of visits is the following: First Corwin who will come always, if Corwin is no romance interest then the romance interest will come to visit next, then the "Hooded Man", and finally whoever lets the PC escape (depending on which ending the player gets).

The example below will show how to let Biff visit the PC in prison for two cases:

  1. As the first NPC, in case your NPC should come in addition to all other visitors.
  2. As the PC's love interest (after Corwin so the original order is preserved). This is coded so it should work for more than one love interest in case of a "multi romance" tweak.

The area in question is bd0104.are and the script triggering the visits is bd0104.bcs. This is what we patch to bd0104.bcs:

/* bd0104_patch.baf : Biff visits the PC in prison */

/* As the first NPC, in case your NPC should come in addition to all other visitors. */
IF
	Global("chapter","global",13)
	!GlobalTimerNotExpired("bd_jail_visitors_timer","bd0104")
	!GlobalTimerNotExpired("bd_jail_visitors2_timer","bd0104")
	Global("bd_jail_visitors","bd0104",0) //first visit
	Global("xxBiff_jail_visitors","bd0104",0) //check variable for this script block
	Global("xxBiff_SoDparty_epilogue","GLOBAL",1) //some variable that determines whether Biff will appear. For Biff, we take the variable that determines whether he will wait outside the prison
	!Dead("xxBiff")  
THEN
	RESPONSE #100
		SetGlobal("xxBiff_jail_visitors","bd0104",1) //trigger variable for Bifff's dialogue
		SetGlobalTimer("bd_jail_visitors_timer","bd0104",FIVE_ROUNDS) //timer  needed so some other stuff will wait
		SetGlobalTimer("bd_jail_visitors2_timer","bd0104",TEN_ROUNDS) //timer  needed so some other stuff will wait
		MoveGlobal("bd0104","xxBiff",[720.620])  //coordinates true for all visiting NPCs
		ActionOverride("xxBiff",ChangeAIScript("bdvisit",OVERRIDE)) //this script will handle the "NPC walks up to the PC's prison door and initiates dialogue"
		Continue()
END

/* ## -- commented out - Biff doesn't have a romance. Enable this as appropriate
/* As the PC's love interest (after Corwin so the original order is preserved). */
IF
	Global("chapter","global",13)
	GlobalTimerExpired("bd_jail_visitors_timer","bd0104")  // Flaming Fist HQ
	Global("bd_jail_visitors","bd0104",4)  //This calls romance interests if there are any
	Global("xxBiff_sod_romanceactive","global",2) //your NPC's romance variable
	!Dead("xxBiff")  
THEN
	RESPONSE #100
		SetGlobal("xxBiff_jail_visitors","bd0104",1) //trigger variable for Bifff's dialogue
		SetGlobal("bd_jail_visitors","bd0104",5)  // Flaming Fist HQ
		SetGlobalTimer("bd_jail_visitors2_timer","bd0104",TEN_ROUNDS)  //timer  needed so some other stuff will wait
		MoveGlobal("bd0104","xxBiff",[720.620])  //coordinates true for all visiting NPCs
		ActionOverride("xxBiff",ChangeAIScript("bdvisit",OVERRIDE)) //this script will handle the "NPC walks up to the PC's prison door and initiates dialogue"
		Continue()
END
## */
	  

To patch bd0104_patch.baf to bd0104.bcs, we need this line in the tp2 (note the EXTEND_TOP):

/* Biff visits PC in Prison */
EXTEND_TOP ~bd0104.bcs~ ~%MOD_FOLDER%/baf/bd0104_patch.baf~
  EVALUATE_BUFFER

Biff is not in the group, so we use his kickout dialogue xxBiffsP.dlg. The variable structure will work for either case (Biff being additional first visitor or love interest). The dialogue goes into a .d-file (in the tutorial mod package I put it into a general "sod_event_comments.d" which also contains other content from the other Tutorial Parts but you can put it in any other d-file as well):

/* (T2) Biff visits PC in prison */
APPEND xxBiffsP 
IF WEIGHT #-1 //we make this higher weighted so it triggers instead of his valid kickout dialogue
~Global("xxBiff_jail_visitors","bd0104",1)~ THEN prison_visit
SAY ~Hey there, <CHARNAME>. I know it sounds weird, but... you'll be fine, so hang in there, alright?~
/* non-romance case */
IF ~~ THEN DO ~SetGlobal("xxBiff_jail_visitors","bd0104",2) 
SetGlobal("bd_visit_player","locals",1) //this will let Biff EscapeArea() via bdvisit.bcs
~ EXIT
/* romance case: */
IF ~Global("bd_jail_visitors","bd0104",5)~ THEN DO ~SetGlobal("xxBiff_jail_visitors","bd0104",2) 
SetGlobal("bd_jail_visitors","bd0104",4) //for romance case, we reset the variable to "4" so other romance interests can show - if present. If none is present, the script bd0104.bcs will move on.
SetGlobal("bd_visit_player","locals",1) //this will let Biff EscapeArea() via bdvisit.bcs
~ EXIT
END
END //APPEND

4. Make Biff wait at the Prison Exit

After the PC's escape from the prison Imoen and the other NPCs of the "BGII canon" party will be waiting outside in the wilderness: Jaheira and Khalid, and Dynaheir and Minsc. The area is bd6200.are. If your NPC is not supposed to be captured by Irenicus, then you are practically done, because any NPC appearing now will be dragged into the abduction scene and will find themselves inside Irenicus Dungeon (or be killed) - unless you make your NPC leave after Imoen brought the PC to the waiting group outside of the exit. Biff should be here, so we need to add him to bd6200.bcs.

We add two script blocks to the script:

  1. The first one will put Biff to the meeting place outside the prison.
  2. The second one lets him move with the group when they start walking after the greetings.

The according bd6200_patch.baf looks like this:

/* End of SoD. Biff will be at the meeting place */
IF
	Global("chapter","global",13)
	Global("xxBiff_SoDEndMove","bd6200",0)
	!Dead("xxBiff")  
	!InPartyAllowDead("xxBiff")
	Global("xxBiff_SoDparty_epilogue","GLOBAL",1) //this is the variable that was set in the bdcut61_patch.baf
THEN
	RESPONSE #100
		SetGlobal("xxBiff_SoDEndMove","bd6200",1)
		SetGlobal("bd_meet_canon_party","bd6200",1) //tells Imoen that there is someone waiting at the clearing (used in her greetings dialogue at the sewer exit)
		MoveGlobal("bd6200","xxBiff",[xxx.yyy]) //chose coordinates near the meeting place: the clearing at the southeast. For example: Minsc is waiting at [1660.1120]
		ActionOverride("xxBiff",SetSequence(SEQ_READY)) //from IESDP: This action instructs the active creature to perform the specified animation sequence. Values are from seq.ids.
		ActionOverride("xxBiff",Face(NW)) //depending on where the NPC stands, they should face the north east
		ActionOverride("xxBiff",SetGlobal("bd_joined","locals",0)) //we remember these from Tutorial Part 1
		ActionOverride("xxBiff",SetGlobal("bd_retreat","locals",0))
		ActionOverride("xxBiff",SaveObjectLocation("LOCALS","bd_default_loc",Myself))
		ReallyForceSpellDeadRES("bdrejuve","xxBiff")  // heals and removes spell effects
		ChangeEnemyAlly("xxBiff",NEUTRAL)  
		ChangeSpecifics("xxBiff",ALLIES)  
		ActionOverride("xxBiff",ChangeAIScript("xxBiffs",OVERRIDE))
		ActionOverride("xxBiff",ChangeAIScript("",CLASS))
		ActionOverride("xxBiff",ChangeAIScript("SHOUT",RACE))
		ActionOverride("xxBiff",ChangeAIScript("BDFIGH01",GENERAL)) //Biff gets the fighter script. Have a look at bdparty.bcs to see what other scripts are available for the different classes.
		ActionOverride("xxBiff",ChangeAIScript("",DEFAULT))
		ActionOverride("xxBiff",SetDialog("xxBiffsP")) //we need the dialogue because all present NPCs comment on the PC's escape
		Continue()
END

/* Biff moves across area with the others */
IF
	Global("bd_plot","global",670)
	Global("xxBiff_SodMovesbd6200","bd6200",0)
	InMyArea("xxBiff")  
THEN
	RESPONSE #100
		SetGlobal("xxBiff_SodMovesbd6200","bd6200",1)
		ActionOverride("xxBiff",MoveToPoint([1410.1410])) //all NPCs move towards this point, no need for other coordinates
		Continue()
END

And for the tp2 (note the EXTEND_TOP):

/* Biff waits in front of the prison exit */
EXTEND_TOP ~bd6200.bcs~ ~%MOD_FOLDER%/baf/bd6200_patch.baf~
  EVALUATE_BUFFER

5. Biff should say something to the PC after the escape

After the escape from the prison and meeting with the canon NPC party, Imoen initiates dialogue and every NPC present says something to the recent events. We want Biff to say something here, too, so we need to I_C_T into bdimoen.dlg state 99. And since Biff isn't in the party at that point, this interjection needs to go into his kickout dialogue xxBiffsP.dlg.

The following is what we put into a .d file for compilation. The first part is for the "assassin ending" (Global("bd_player_exiled","global",0)): the PC didn't convince the Dukes of their innocence and had to flee from the prison with the help of an unknown assassin. The second one is for the ending where the Dukes set the PC free and the PC is guided to the exit by an FF soldier (for !Global("bd_player_exiled","global",0)). Note: I_C_T3 means that there are several interjections with different triggers, but all of them should trigger if the conditions are met (and not the first one determines whether any of them shows, as it is for I_C_T):

/* PC escaped from the prison. All NPCs say a greeting */
I_C_T3 BDIMOEN 99 xxBiff_SoDMurderComment 
/* PC is believed to be the murderer */
== xxBiffsP IF ~Global("bd_player_exiled","global",0)
!Dead("xxBiff")
InMyArea("xxBiff")
!InParty("xxBiff")~ THEN ~Good you made it out. Sorry about all the blood.~
/* PC is believed to be innocent */
== xxBiffsP IF ~!Global("bd_player_exiled","global",0)
!Dead("xxBiff")
InMyArea("xxBiff")
!InParty("xxBiff")~ THEN ~Good to see you. I like this ending way better!~
END

6. Biff should appear in the last area (abduction scene, bd6100.are)[DEPRECATED]

This section is deprecated. I'll leave it in so anyone interested can try to make this work without having to search for the involved scripts anew. I do not recommend using this the way it is described here. Problems arising for my NPC were: the NPC does not walk across the clearing in bd6100.are but remains standing under the bushes; the NPC does not appear in Irenicus' Dungeon although the script block for their creation run; the NPC appears but still has all protection effects of the last kidnapping scene on them. One possibility to circumvent the last two issues could be to work with a "dummy NPC" that walks alongside the group. I decided to not let my NPC appear in the last kidnapping scene because I lost motivation to work with this scene any more. Also note: if your NPC takes a place of one of the 5 canon party members, it can happen that the problems described above might apply to Imoen, Jaheira, or Minsc after transition to Irenicus' Dungeon in EET.

After the PC and all present NPCs start moving and the scene fades to black, the cutscene bdcut64x.bcs handles the rejoining of the canon NPCs (Imoen - first time she joins in original SoD!, Minsc, Dynaheir, Jaheira, Khalid) before calling bdcut65.bcs which transfers and moves the group onto bd6100.are, the final abduction area. This takes into consideration whether there is enough empty slots for the NPCs (for e.g. multiplayer game with more than one protagonist), and also whether the canon NPCs are actually still alive and present.

This means, that with all canon NPCs alive (Imoen will be alive no matter what, but the other four might not be alive any more and won't be present then), the group is full with 6 people, and there is no "room" for your NPC. If there is less, then there would be room, in principle. But for easier handling of our mod NPC, we will only move Biff to teh last area and let him walk at the PC's side. This way, we only have to consider one case.

This is what we add to bdcut64x.bcs for Biff:

/* bdcut64x_patch.baf
Biff will not join after PC escaped from prison (simplifies scripting and prevents bugs for the default NPC crew in EET) */
IF
	Global("xxBiff_SoDEndMove","bd6200",1) //same as in bd6200.bcs 
	InMyArea("xxBiff")
	!Dead("xxBiff")  
	!InParty("xxBiff")  
THEN
	RESPONSE #100
		CutSceneId(Player1)
		SetGlobal("xxBiff_SoDEndMove","bd6200",2)
		ActionOverride("xxBiff",LeaveAreaLUA("bd6100","",[xxx.yyy],SE)) //chose some coordinates beneath the trees northeast of the clearing 
		SmallWait(10)
		Continue()
END


And for the tp2:

/* (T2) Biff should appear in the last area (abduction scene, bd6100.are) */
EXTEND_TOP ~bdcut64x.bcs~ ~%MOD_FOLDER%/baf/bdcut64x_patch.baf~
  EVALUATE_BUFFER

7. Biff should move with the group in the last area (abduction scene, bd6100.are)[DEPRECATED]

This section is deprecated. I'll leave it in so anyone interested can try to make this work without having to search for the involved scripts anew. I do not recommend using this the way it is described here. Problems arising for my NPC were: the NPC does not walk across the clearing in bd6100.are but remains standing under the bushes; the NPC does not appear in Irenicus' Dungeon although the script block for their creation run; the NPC appears but still has all protection effects of the last kidnapping scene on them. One possibility to circumvent the last two issues could be to work with a "dummy NPC" that walks alongside the group. I decided to not let my NPC appear in the last kidnapping scene because I lost motivation to work with this scene any more. Also note: if your NPC takes a place of one of the 5 canon party members, it can happen that the problems described above might apply to Imoen, Jaheira, or Minsc after transition to Irenicus' Dungeon in EET.

In the last SoD area bd6100.are, the group emerges from beneath the trees and moves out into the clearing before the abduction happens. Biff should move, too, so we need to patch the cutscene bdcut65.bcs.

This is what we add to the tp2 into the ALWAYS block:

	  
//put this into the ALWAYS block of cour tp2  
INCLUDE ~%MOD_FOLDER%/lib/extra_regexp_vars.tph~ //this makes sure REPLACE_TEXTUALLY finds the right match to patch
OUTER_SPRINT newline ~%WNL%%LNL%%MNL%%TAB% ~

This is what we add to the tp2 to patch bdcut65.bcs:

/* Biff should move with the group in the last area (abduction scene, bd6100.are) */
COPY_EXISTING ~bdcut65.bcs~ ~override~
  DECOMPILE_AND_PATCH BEGIN

		SPRINT textToReplace ~\(SetAreaScript("",OVERRIDE)\)[%newline%]*\(END\)~
		COUNT_REGEXP_INSTANCES ~%textToReplace%~ num_matches
		PATCH_IF (num_matches > 0) BEGIN
			REPLACE_TEXTUALLY ~%textToReplace%~ ~\1 
\2 

IF
	Global("xxBiff_SoDEndMove","bd6100",0) 
	InMyArea("xxBiff")
	!Dead("xxBiff")  
	!InParty("xxBiff")  
THEN
	RESPONSE #100
		CutSceneId(Player1)
		SetGlobal("xxBiff_SoDEndMove","bd6100",1) 
		ActionOverride("xxBiff",MoveToPoint([930.795])) //you can leave these coordinates for your NPC, too
END
~
			PATCH_PRINT ~Patching: %num_matches% matches found in %SOURCE_FILESPEC% for REPLACE_TEXTUALLY: %textToReplace%~
		END ELSE BEGIN
			PATCH_WARN ~WARNING: could not find %textToReplace% in %SOURCE_FILESPEC%~
		END
	END
BUT_ONLY_IF_IT_CHANGES

And in a folder %MOD_FOLDER%/lib/ you need this as a file called "extra_regexp_vars.tph":

OUTER_INNER_PATCH ~12~ BEGIN
  WRITE_BYTE 1 0x09
  READ_ASCII 1 tab (1)  // 0x09, tab
  WRITE_BYTE 1 0x0a
  READ_ASCII 1 lnl (1)  // 0x0a, Linux
  WRITE_BYTE 0 0x0d
  READ_ASCII 0 mnl (1)  // 0x0d, Mac
  READ_ASCII 0 wnl (2)  // 0x0d0a, Windows

END

8. If Biff should NOT be present after the PC escapes the prison

In case your NPC is BG/SoD only, they'd not be present at the sewer exit when the PC escaped the prison. In this case, nothing after patching bdcut61.bcs to make them leave the group would be necessary technical wise (see above in "2. NPCs leave the group after The Incident").

However, when greeting the PC at the sewer exit, Imoen has reply options where the PC can ask about one of the missing group members that were with them upon the arrest. This is triggered by the variable "Global("xxBiff_SoDparty_epilogue","GLOBAL",1)" that we set for Biff upon his leaving in bdcut61.bcs.

To add a reply about Biff to Imoen's dialogue, we patch it to the states bdimoen 104 (for the "not guilty" ending i.e. Global("bd_player_exiled","global",1)), and bdimoen 109 (for the "guilty" ending i.e. Global("bd_player_exiled","global",0)).

We put this inside a d-file:

/* PC can ask Imoen about Biff in last meeting if Biff will not come along */
EXTEND_BOTTOM bdimoen 104
  + ~Global("xxBiff_SoDparty_epilogue","GLOBAL",1)~ + ~I was expecting to see Biff amongst you.~ + ask_about_biff
END
EXTEND_BOTTOM bdimoen 109
  + ~Global("xxBiff_SoDparty_epilogue","GLOBAL",1)~ + ~I was expecting to see Biff amongst you.~ + ask_about_biff
END
APPEND bdimoen
IF ~~ THEN ask_about_biff
  SAY ~Biff? Ah, he said something about having to rehearse for BGII and went off, sorry.~
  IF ~~ THEN GOTO 119
END
  

9. Credits, Used Tools, and Helpful Links

Thank you to Argent77 for the html template!

Used Tools:

Near Infinity

IESDP

grepWin

Notepad++

Links:

BeamDog Forums

The Gibberlings 3

Kerzenburgforum

Spellhold Studios

Pocket PLane Group

Prefix Reservation at Black Wyrm Lair Forums

10. Version History

Version 9:

Version 8:

Version 7:

Version 6:

Version 5:

Version 4:

Version 3:

Version 2:

Version 1: