Jump to content

v12b Dynaheir endgame (spoilers)


Gorilym

Recommended Posts

I can't figure out how to do this, as I can't be sure of the right coordinates... I see the ids entry WIZARD_GATE, but can't figure out how to make this work with the summoning. I did change the above code to DimensionDoor (CreateCreatureObjectDoor), but can't seem to find a similar call to use the gate animation...

ReallyForceSpell WIZARD_GATE

 

Oh well, I had a feeling that might get more complex than it's worth - it is after all only a cosmetic matter.

 

I like the way you reordered and altered Aravaata's dialogue - definitely an improvement. :mad:

 

edit: oh, and you've probably caught this one already, but X#TANRRI.BAT should be X#TANRRI.BAF, right?

Link to comment

Missed it: thanks for the pointing out! I will see if I can get this rebuilt tonight and tomorrow morning. You still have access to the internal link, right? If not, please PM me -- I will post an internal version "chevalier4.rar" Monday mid-day which moves some of the items into C_E blocks to try to avoid BAM problems or items not showing up correctly, plus all of these changes to Dynaheir's romance for testing (the end cutscene changes, etc.). It will be a straight .rar of the windows version, but you are the right person to repack it for Mac install (don't actually build the whole package, though, as I am expecting at least two more internal fixes for BGT before sending everything to CamDawg for the full open release. Tricksy stuff, those MegaMods - glad to be a Tutu dude, m'self! :mad:).

 

We do still need to get someone to create the Amulet, though. I am not qualified. The best option would be to use COPY_EXISTING and patch via tp2, since it seems some items have troubles porting between versions and platforms...

Link to comment
You still have access to the internal link, right?

 

That I do, I've been doing some testing with the 'Chevalier3' build and the upcoming MacEasyTutu. :mad:

 

We do still need to get someone to create the Amulet, though. I am not qualified. The best option would be to use COPY_EXISTING and patch via tp2, since it seems some items have troubles porting between versions and platforms...

 

I've had a look at some in-game amulets that could be used as a basis. The Periapt of Proof Against Poison (AMUL17.itm IIRC) might be suitable, the main changes (apart from the description and title ;) ) would be to the associated once-per-day spell and removing the immunity to poison. Hopefully we can recruit someone to do it; I've made a few items in this manner, but that was back in the pre-WeiDU days.

Link to comment

Mostly implemented all of this, trying to tie the last of it down now...

 

Tanar'ri's override script now reads as the following, since we strip out the others (default is _TASIGHT.BCS)

 

IF
 NumTimesTalkedTo(0)
 Global("X#TanarriTalks","LOCALS",0)
THEN RESPONSE #100
 SetGlobal("X#TanarriTalks","LOCALS",1)
 StartDialogueNoSet(Myself)
END

IF 
 Global("X#DynaJournal","GLOBAL",10) 
 Global("X#TanarriKillsWinski","LOCALS",0) 
THEN RESPONSE #100
 SetGlobal("X#TanarriKillsWinski","LOCALS",1)
 SetGlobal("X#DynaJournal","GLOBAL",11)
 ReallyForceSpell("winski",WIZARD_FINGER_OF_DEATH_IGNORE_RESISTANCE)
 Kill("winski")
 Enemy()
END

IF
 See(NearestEnemyOf(Myself))
 !StateCheck(LastSeenBy(Myself),STATE_STUNNED)
 !StateCheck(LastSeenBy(Myself),STATE_HELPLESS)
 !Range(LastSeenBy(Myself),10)
 GlobalLT("symbol","LOCALS",4)
THEN
 RESPONSE #100
IncrementGlobal("symbol","LOCALS",1)
ReallyForceSpell(NearestEnemyOf(Myself),WIZARD_NPC_SYMBOL_STUN)
Continue()
END

IF
 See(NearestEnemyOf(Myself))
 !StateCheck(LastSeenBy(Myself),STATE_HELPLESS)
 GlobalLT("TANARIPARALYZE","LOCALS",5)
THEN
 RESPONSE #100
ForceSpell(NearestEnemyOf(Myself),TANARI_PARALYZE)
IncrementGlobal("TANARIPARALYZE","LOCALS",1)
Continue()
END

IF
 See(NearestEnemyOf(Myself))
 StateCheck(LastSeenBy,STATE_HELPLESS)
THEN
 RESPONSE #100
AttackOneRound(NearestEnemyOf(Myself))
AttackOneRound(NearestEnemyOf(Myself))
Continue()
END

IF
 See(NearestEnemyOf(Myself))
 !StateCheck(LastSeenBy(Myself),STATE_CONFUSED)
 Global("Prep","LOCALS",1)
THEN
 RESPONSE #100
SetGlobal("Prep","LOCALS",2)
SpellNoDec(NearestEnemyOf(Myself),WIZARD_CONFUSION)
Continue()
END

IF
 See(NearestEnemyOf(Myself))
 !StateCheck(LastSeenBy(Myself),STATE_CONFUSED)
 !StateCheck(LastSeenBy(Myself),STATE_HELPLESS)
 Global("Prep","LOCALS",2)
THEN
 RESPONSE #100
SetGlobal("Prep","LOCALS",3)
SpellNoDec(NearestEnemyOf(Myself),WIZARD_EMOTION_HOPELESSNESS)
Continue()
END

IF
 See(NearestEnemyOf(Myself))
 !StateCheck(LastSeenBy(Myself),STATE_HELPLESS)
 GlobalLT("TANARIPARALYZE","LOCALS",7)
THEN
 RESPONSE #100
IncrementGlobal("TANARIPARALYZE","LOCALS",1)
ForceSpell(NearestEnemyOf(Myself),TANARI_PARALYZE)
Continue()
END

IF
 !See([GOODCUTOFF])
 Allegiance(Myself,ENEMY)
THEN
 RESPONSE #100
MoveToObject(Player1)
END

IF
 See(NearestEnemyOf(Myself))
 GlobalGT("Prep","LOCALS",2)
 GlobalGT("TANARIPARALYZE","LOCALS",2)
 OR(2)
Range(LastSeenBy(Myself),10)
HPPercentLT(Myself,50)
THEN
 RESPONSE #100
AttackReevaluate(NearestEnemyOf(Myself),15)
Continue()
END

Link to comment

Cleaned up alot of this, integrated, and now it is put up on the internal site as build "chevalier4". I installed it on both Tutu and BGT, and had no errors; the big check points are that Winski dialogue before death (summoning, etc.) and the end of the Romance Dynaheir cutscene. This is all still tied up with area scripts rather than moving into Dy's BCS, because I think this should do it -- if not, then the final attempt would be to try to move all of this into Dynaheir's script completely.

 

DynaQuest scrolls are now built out of C_E for less potential error, SharTeel Unkillable in Duel component is included, and the BGT errors getting a BIMOEN2 banter file logged as the correct one for Imoen2 is repaired (Thanks, Cam:) ).

 

Some changes to D files and BAFs in Dynaheir Romance and Dynaheir Quest (main install component). Extended the related TRA -- blast. In a minute I will have extended both related TRAs (forgot the "yo, end of BG1 if the script doesn't play the end credits" DisplayStringHead for Tutu - will update right now.)

 

All we need are tests and an item to ADD_CRE_ITEM onto Winski.

 

Final cutscene code

[/code]

IF

True()

THEN RESPONSE #100

CutSceneId(Player1)

ClearAllActions()

SmallWait(3)

DisplayStringHead("X#JONI",@0)

ActionOverride("X#JONI",ReallyForceSpell(Player1,WIZARD_TIME_STOP))

ActionOverride("X#JONI",ReallyForceSpell("dynaheir",WIZARD_POWER_WORD_KILL)

ActionOverride("X#JONI",Kill("dynaheir"))

ActionOverride("X#BODHI",ForceSpell(Player1,VAMPIRE_DOMINATION))

SetGlobal("X#DynaDeath","GLOBAL",6)

SetGlobal("D0FinalSave","GLOBAL",1)

SmallWait(2)

ActionOverride("X#BODHI",ReallyForceSpell("X#BODHI",DRYAD_TELEPORT))

ActionOverride("X#JONI",ReallyForceSpell("X#JONI",DRYAD_TELEPORT))

ActionOverride("X#LASSA",ReallyForceSpell("X#LASSA",DRYAD_TELEPORT))

ActionOverride("X#TANOV",ReallyForceSpell("X#TANOV",DRYAD_TELEPORT))

ActionOverride("X#VALEN",ReallyForceSpell("X#VALEN",DRYAD_TELEPORT))

ActionOverride("X#ULVAR",ReallyForceSpell("X#ULVAR",DRYAD_TELEPORT))

ActionOverride("X#CUTVAM",ReallyForceSpell("X#CUTVAM",DRYAD_TELEPORT))

ActionOverride("dynaheir",DestroySelf())

DisplayStringHead(Player1,@1) /* @1 = ~You have been abducted! Your story continues in Baldur's Gate II, Shadows of Amn. Import your character from your final save into BG2.~ */

EndCutSceneMode()

END

[/code]

 

Upload is happening right nowm, so it should be available in about 5 minutes.

Link to comment

I got in some testing with the Chevalier4 build yesterday, and unfortunately there are still some kinks that need to be straightened out.

 

- "Winski just won't die":

Neither 'ReallyForceSpell("winski",WIZARD_FINGER_OF_DEATH_IGNORE_RESISTANCE)' nor 'Kill("winski")' fire - Aravaata just goes hostile. Interestingly enough, SetGlobal("X#DynaJournal","GLOBAL") is incremented to 11. Initiating dialogue with Dynaheir after the fight starts the 'Tell Rashemen of Winski' conversation. I'm thinking the use of ActionOverride may be necessary for the casting and / or killing Winski (ie ActionOverride("winski",DestroySelf()) )

 

- "Aravaata dies too easily":

After having tested the fight with Aravaata half a dozen times, I think the nerfing may have been excessive - he's currently too easy to kill. Unless his Symbol Stun somehow manages to stun the entire party he's toast within two or three rounds. Raising his HP by say 40 and lowering his THAC0 by say 4 would help without making him unmanageable - (I've tested it.) and also make him more credible as a 'mature nabassu'. In any case, he should DEFINITELY give XP when killed - as the original Pit Fiend implementation gave 9000 XP (as a level 9 summons, I guess), ca. 7000 XP would be appropriate for Aravaata (a level 7 summons).

 

I have notes on the abduction sequence too, but I can't find them right now - will post again when I do. In short - it's working better, but no joy just yet.

Link to comment

OK, now to the post-Sarevok sequence. The 'rumours of your heritage spreads' and 'you've been abducted' "headstrings" display, which is nice - especially as the end credits still don't roll. :mad: Irenicus now casts Power Word Kill on Dynaheir, but she doesn't perma-die. (He still casts a no-duration Time Stop on Charname first, which to me is weird but I suppose unimportant.) Irenicus, Bodhi and their minions Dimension Door out as they should, but they leave at least three very pale wandering "rogues" behind.

Link to comment

To the first post,

 

Well, that also means that the BAF extension to Dynaheir's BCS is not working, because a SDNS(Myself) is called for by cript to initiate that conversation.

 

I will recheck...

 

and change the following, definitely:

 

IF
 Global("X#DynaJournal","GLOBAL",10)
 Global("X#TanarriKillsWinski","LOCALS",0)
THEN RESPONSE #100
 SetGlobal("X#TanarriKillsWinski","LOCALS",1)
 SetGlobal("X#DynaJournal","GLOBAL",11)
ActionOverride("aravaata",ReallyForceSpell("winski",WIZARD_FINGER_OF_DEATH_IGNORE_RESISTANCE))
 ActionOverride("winski",DestroySelf())
 ActionOverride("aravaata",Enemy())
END

The animation for the finger of death does not play, right?

I will also check the dv, etc. for the version of winski called for in that corridor, to make sure we are working with the correct name! The BG1 NPC one is X#WINSKI.cre with DV "winski", but there are two regular ones (one walking and one body version) and we are working with the body one. Perhaps they have different DVs?

 

Let's drop the false Timestop, and just go with the straightforward spellcasting. And I will take a look at using COPY_EXISTING for creating the .cres as well, dropping these unneeded files. Since no real combat takes place, we can make it work without lots of extra stuff. I will try a lesser spell. Perhaps irenicus' cre is not listed as high enough level to cast it - I noticed that IESDP says that with RFS the spell does not have to be memorized or even be able to be cast by the .cre, but the .cre level has to be high enough.

 

To the second post --

 

OK, the cutscene vampire leftovers can be handled by giving them a unique DV and actions. Most of all, did Dynaheir's body disappear? If we can't get the game to end, we can at least make it very obvious that everything is done, and then make sure her body disappears. I guess if the final save is made, perhaps we can simply kill Player1 and swap in a text screen explaining what to do next in place of the Death Hand animation, but talk about using the nuclear option....

 

I created a silliness here, too - it now sets "endofBG1" to 2, which is fine for BGT but not for the backup ending script I wrote nor for regular Tutu expectations. I will put up a fixed version by Friday PM. I appreciate your testing :mad:

 

The final blasted end credits not playing is driving me nuts. I am going to IESDP to research; I thought copying the regular end-of-game stuff would work.

Link to comment
To the first post,

The animation for the finger of death does not play, right?

No casting message, no animation.

 

Let's drop the false Timestop, and just go with the straightforward spellcasting. And I will take a look at using COPY_EXISTING for creating the .cres as well, dropping these unneeded files. Since no real combat takes place, we can make it work without lots of extra stuff. I will try a lesser spell. Perhaps irenicus' cre is not listed as high enough level to cast it - I noticed that IESDP says that with RFS the spell does not have to be memorized or even be able to be cast by the .cre, but the .cre level has to be high enough.

Well, I don't think his level is an issue - he DOES cast Power Word Kill and Dynaheir dies, just not permanently. Oh wait, I just thought of something - maybe Aravaata's level isn't high enough for Finger Of Death? He's currently set to level 10, try setting it to level 15 maybe?

 

To the second post --

 

OK, the cutscene vampire leftovers can be handled by giving them a unique DV and actions. Most of all, did Dynaheir's body disappear? If we can't get the game to end, we can at least make it very obvious that everything is done, and then make sure her body disappears. I guess if the final save is made, perhaps we can simply kill Player1 and swap in a text screen explaining what to do next in place of the Death Hand animation, but talk about using the nuclear option....

 

Her body disappears, but only in the "usual" sense - the way a dead-but-resurrectable party member does. Hmm... Isn't there some kind of 'LeaveParty' command that can be used?

 

Don't forget to assign some XP to Aravaata! :mad:

Link to comment

note to self - no changes to BGT side of cutscenes, as they are all commented out for compatability with BGT end of BG1 cutscene transition. I should probably remove the commented files from the BGT subdirectory until the final wrapup version next anniversary if we can reinstate a version of it.

 

OK, Gorilym, next try at changes: take a look (anyone please comment if they see silliness in the code, please :mad: )

 

in tp2, changes to X#TANARI.CRE

COPY_EXISTING ~DEMNABSU.CRE~ ~override/X#TANARI.CRE~
 SAY NAME1 @291
 SAY NAME2 @291
 WRITE_ASCII 0x248 ~X#DYTANR~ #8 // override script 
 WRITE_EVALUATED_ASCII 0x2CC ~%DEST_RES%~ #8 // dialog
 WRITE_SHORT 0x24 ~126~ //Current HP (orig = 76)
 WRITE_SHORT 0x26 ~125~ //Maximum HP (orig = 76)
 WRITE_LONG 0x14 ~7000~ //XP Value to party if killed
 WRITE_BYTE 0x0052 ~9~ //THAC0. (orig = 13)  <<<<is this right?
 WRITE_BYTE 0x0234 ~15~ //Level = 15  (orig = 10)   <<<< is this right?
 WRITE_BYTE 0x0270 ~128~ //Allegiance = Neutral
 WRITE_ASCII 0x280 ~aravaata~ #32 // death variable

 

In final cutscene

IF
True()
THEN RESPONSE #100
CutSceneId(Player1)
ClearAllActions()
SmallWait(3)
DisplayStringHead("X#JONI",@0)
ActionOverride("X#JONI",ReallyForceSpell("dynaheir",WIZARD_POWER_WORD_KILL))
ActionOverride("X#JONI",Kill("dynaheir"))
ActionOverride("dynaheir",LeaveParty())
ActionOverride("dynaheir",DestroySelf())
ActionOverride("X#BODHI",ForceSpell(Player1,VAMPIRE_DOMINATION))
SmallWait(2)
ActionOverride("X#BODHI",ReallyForceSpell("X#BODHI",DRYAD_TELEPORT))
ActionOverride("X#JONI",ReallyForceSpell("X#JONI",DRYAD_TELEPORT))
ActionOverride("X#LASSA",ReallyForceSpell("X#LASSA",DRYAD_TELEPORT))
ActionOverride("X#TANOV",ReallyForceSpell("X#TANOV",DRYAD_TELEPORT))
ActionOverride("X#VALEN",ReallyForceSpell("X#VALEN",DRYAD_TELEPORT))
ActionOverride("X#ULVAR",ReallyForceSpell("X#ULVAR",DRYAD_TELEPORT))
ActionOverride("X#CUTVA1",ReallyForceSpell("X#CUTVA1",DRYAD_TELEPORT))
ActionOverride("X#CUTVA2",ReallyForceSpell("X#CUTVA2",DRYAD_TELEPORT))
ActionOverride("X#CUTVA3",ReallyForceSpell("X#CUTVA3",DRYAD_TELEPORT))
ActionOverride("X#CUTVA4",ReallyForceSpell("X#CUTVA4",DRYAD_TELEPORT))
DisplayStringHead(Player1,@1) /* @1	= ~You have been abducted! Your story continues in Baldur's Gate II, Shadows of Amn. Import your character from your final save into BG2.~ */
SetGlobal("X#DynaDeath","GLOBAL",6)
SetGlobal("endofBG1","GLOBAL",2)
EndCutSceneMode()
END

 

in area appended script

/* End DyDead Cutscene, End Game */
IF
OR(2)
Global("X#DynaDeath","GLOBAL",6)
Global("endofbg1","GLOBAL",2)
THEN
RESPONSE #100
SetGlobal("endofBG1","GLOBAL",3)
StartMovie("_NDCRDIT")
EndCredits()
END

 

Found the problem with Winski;

he has no DV assigned (just the sleeping body and the dialogue file).

 

First thing to add tomorrow morning...

patch _WINSKI2.CRE Winski Perorate with DV, check dialogue, and try to create an appropriate amulet.

 

ETA for test version for you, probably noon CST Saturday.

Link to comment
in tp2, changes to X#TANARI.CRE

COPY_EXISTING ~DEMNABSU.CRE~ ~override/X#TANARI.CRE~
 SAY NAME1 @291
 SAY NAME2 @291
 WRITE_ASCII 0x248 ~X#DYTANR~ #8 // override script 
 WRITE_EVALUATED_ASCII 0x2CC ~%DEST_RES%~ #8 // dialog
 WRITE_SHORT 0x24 ~126~ //Current HP (orig = 76)
 WRITE_SHORT 0x26 ~125~ //Maximum HP (orig = 76)
 WRITE_LONG 0x14 ~7000~ //XP Value to party if killed
 WRITE_BYTE 0x0052 ~9~ //THAC0. (orig = 13)  <<<<is this right?
 WRITE_BYTE 0x0234 ~15~ //Level = 15  (orig = 10)   <<<< is this right?
 WRITE_BYTE 0x0270 ~128~ //Allegiance = Neutral
 WRITE_ASCII 0x280 ~aravaata~ #32 // death variable

 

His current XP probably shouldn't be higher than his Max HP, everything else looks right. :mad:

Link to comment

oooooops :mad:

 

I am trying out some .tph action for the BGT side of things, but will stop what I am doing and put the new version up for you in a few minutes ("chevalier5")

 

changes:

COPY_EXISTING ~DEMNABSU.CRE~ ~override/X#TANARI.CRE~
 SAY NAME1 @291
 SAY NAME2 @291
 WRITE_ASCII 0x248 ~X#DYTANR~ #8 // override script
 WRITE_SHORT 0x24 ~126~ //Current HP (orig = 76)
 WRITE_SHORT 0x26 ~126~ //Maximum HP (orig = 76)
 WRITE_LONG 0x14 ~7000~ //XP Value
 WRITE_BYTE 0x52 ~9~ //THAC0. (orig = 13)
 WRITE_BYTE 0x234 ~15~ //Level = 15  (orig = 10)
 WRITE_BYTE 0x270 ~128~ //Allegiance = Neutral
 WRITE_EVALUATED_ASCII 0x2CC ~%DEST_RES%~ #8 // dialog
 WRITE_ASCII 0x280 ~aravaata~ #32 // death variable

/* Dying Winski Assignment DLG rebuild */
ACTION_IF FILE_EXISTS_IN_GAME ~FW0100.are~ THEN BEGIN
 COPY_EXISTING ~_WINSKI2.CRE~ ~override~
WRITE_ASCII 0x2cc ~_WINSKI~ #8//Dialogue file
WRITE_ASCII 0x280 ~winski~ #32 // death variable
END ELSE BEGIN
 COPY_EXISTING ~WINSKI2.CRE~ ~override~
WRITE_ASCII 0x2cc ~WINSKI~ #8//Dialogue file
WRITE_ASCII 0x280 ~winski~ #32 // death variable
END

 

I'm test installing it nowto make sure I haven't messed up something silly.

 

hey, what happens if you do a DRYAD_TELEPORT on Player1 - 6? Would that kill the player as well as the game, or just force the player to quit?

Link to comment

Sorry for the delay... I've run into an error where the lexer keeps thinking I have an unterminated comment in the tp2. I haven't been able to track it down yet. I will try installing on Tutu, and then go back and see if I can find out what I did wrong. Probably something with the new INCLUDE nd LAUNCH_PATCH_MACRO stuff

 

Edit: almost there ... I am having to go line by line reintroducing to a clean copy and figure out what went wrong. I just figured out that .tph code severely dislikes BUT_ONLY_IF_IT_CHANGES.

Link to comment

OK, for those keping track (and especially for you Gorilym), chevalier5 is at the regular place. It installs cleanly over BGT and Tutu, uses some simple tph/INCLUDE stuff for the BGT side (and some of the Tutu side, too, bit very little) plus has tthe above fixes albeit in a slighly different form.

 

Give it a shot!

Link to comment

First, a few minor tidbits I noticed during the installation of chev 5:

 

"Eldoth Starts on the Coastal Way" should read "Eldoth Starts on the Coast Way"

 

"Quayle Starts at the Wyvern's Crossing" should read "Quayle Starts at the Wyrm's Crossing"

 

On to the Dyna matters:

 

Maze: Still no finger of death casting by Aravaata, still no dead Winski. I tried an alternate version of X#DYTANR.bcs in which I'd removed the spellcasting to see if that line was messing things up, but Kill("winski") still wouldn't fire. I then tried changing the two recalcitrant lines to operate with ActionOverride (ActionOverride("aravaata",ReallyForceSpell("winski",WIZARD_FINGER_OF_DEATH_IGNORE _RESISTANCE)) etc) - still no joy. This is getting frustrating. :mad: With the boosts Aravaata lasts a little longer at least. ;)

 

Post-Sarevok: No rolling of end credits, no perma-dead Dyna (ie she's still "InParty" and resurrectable). One idea would be to move Dyna's LeaveParty and DestroySelf commands up to before the PowerWordKill and the Kill("dynaheir"), as I think her being already dead might be stopping her from leaving the party - I might try this later myself. On the upside, all the vamp cutscene actors D-Door out now, leaving a clean area.

Link to comment

Archived

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

×
×
  • Create New...