Jump to content

Anything we can do for Imprisonment and Romances?


Recommended Posts

I just had a thought.... I'm pretty sure that I've had romanced NPCs petrified before and kept the romance going. A stone-to-fleshed NPC has to be recruited back into the party, so can we steal how that works?

 

IIRC that also is known to kill romances. It's whatever part of the process that's stripping the local variables off the characters causing the grief. (ie. As if the character was chunked, not booted.) If it was just the character leaving the party then the 3 day grace period checked in the Baldur.bcs would cover an imprisioned/petrified leave-join scenario.

Link to comment
I just had a thought.... I'm pretty sure that I've had romanced NPCs petrified before and kept the romance going. A stone-to-fleshed NPC has to be recruited back into the party, so can we steal how that works?

 

IIRC that also is known to kill romances. It's whatever part of the process that's stripping the local variables off the characters causing the grief. (ie. As if the character was chunked, not booted.) If it was just the character leaving the party then the 3 day grace period checked in the Baldur.bcs would cover an imprisioned/petrified leave-join scenario.

 

It kills Jaheira's, but I've had the other two get stoned then immediately unstoned and rejoined and the romance was still active.

Link to comment

I don't know the issue, I've hacked intmod.2da so that 25 intelligence means really long imprisonment, Imprisonment is hacked to cast a spell which removes summons (since imprisoned/mazed summons count towards the cap), turns your intelligence to 25 and mazes you, protection from imprisonment is hacked to protect from said spell, and freedom is hacked to I-can't-recall-what.

 

This should prevent the various bugs: imprison/free/imprison/free for infinite XP, end of game when cast on Player1, end-of-romance when cast on romantic interest (although I don't recall this bug in the game, but so much time has passed since I last played)...

 

The problem with this fix is that if a party member is imprisoned in kangaxx' tomb without a scroll or the spell memorized, you aren't going to find a way to walk out of there - for this purpose, I added a script which, when activated by a CLUAConsoled variable, will cast Freedom if there are no enemies on screen and no attack ongoing.

 

Another problem is creatures with intelligence >= 24, who will be imprisoned forever if mazed (in the stock game, Mordenkainen swords - which means that if a Mordy gets mazed it'll count forever towards the summoning limit).

 

So, uh, this is clearly not a Baldurdash-level fix.

 

Galc's one adds an item giving you 1 int and mazes you over and over until freedom is cast. It also makes you leave the party (or end the game when casted on Player1 by having everybody leave), so it's mostly an hack to solve the infinite XP bug and the summons bug.

 

As for the Petrification fix, it uses similar ideas to my Impri fix: you are held, reduced to 1 HP, stunned, caster held (and maybe some other forms of blocking) using a spell which has a specific secondary type. Stone to Flesh will dispell all effects of said secondary type - however, it forgets to apply the stone to flesh effects for when you save branwen and co. in BG1 (thread).

It also forgets to turn you gray (this and the Branwen issues will be fixed soon enough), however the bigger problem is that if you're immune to stunning you'll still be held (there is no immunity to caster holding, AKA the one from Project Image), but scripts will still be running (unless I add also the Feeblemind effect, which unfortunately will prevent you from saving).

Link to comment

Hello,

 

I have an already untested suggestion to fix this:

 

COPY_EXISTING ~player1d.bcs~ ~override~

EXTEND_BOTTOM ~player1d.bcs~ ~romance_imprison_fix.baf~

 

And additional someone, who is more familar with WeiDU, as I am, should write a .D file for :) REPLACE_ACTION_TEXT :) or something like that, to Replace the Actions with:

~SetGlobal("XXXXXRomanceActive","GLOBAL",3)~ containing in it

with

~SetGlobal("XXXXXRomanceActive","GLOBAL",3)

SetGlobal("XXXXXImprison","GLOBAL",5)~

in the dialogue files:

 

for SoA:

 

AERIEJ.DLG

ANOMENP.DLG

BANOMEN.DLG

BJAHEIR.DLG

BVICONI.DLG

JAHEIRAJ.DLG

JAHEIRAP.DLG

VICONIJ.DLG

 

and for TOB:

 

AERIE25J.DLG

ANOME25J.DLG

BAERIE25.DLG

BANOME25.DLG

BJAHEI25.DLG

BVICON25.DLG

JAHEI25A.DLG

VICON25J.DLG

 

to avoid, that the following script will trigger on normal Romance ends by dialogue. A list with the full Actions can be get from a simple search with NI ;). Sorry that I not code the .DLG changes too, but it will take me much more time as for someone, who code in WeiDU every day, because I would have to read the WeiDU readme first for .DLG changes :).

 

The BAF would be this script:

 

IF

InParty("Jaheira")

!Dead("Jaheira")

Global("JaheiraRomanceActive","GLOBAL",1)

Global("JaheiraImprison","GLOBAL",0)

THEN

RESPONSE #100

SetGlobal("JaheiraImprison","GLOBAL",1) // make sure, there is a Romance in Phase 1

END

 

IF

InParty("Jaheira")

!Dead("Jaheira")

Global("JaheiraRomanceActive","GLOBAL",2)

OR(2)

Global("JaheiraImprison","GLOBAL",0)

Global("JaheiraImprison","GLOBAL",1)

THEN

RESPONSE #100

SetGlobal("JaheiraImprison","GLOBAL",2) // make sure, there is a Romance in Phase 2

END

 

IF

Global("JaheiraImprison","GLOBAL",1)

!InPartyAllowDead("Jaheira")

Dead("Jaheira")

THEN

RESPONSE #100

SetGlobal("JaheiraImprison","GLOBAL",3)

END

 

IF

Global("JaheiraImprison","GLOBAL",2)

!InPartyAllowDead("Jaheira")

Dead("Jaheira")

THEN

RESPONSE #100

SetGlobal("JaheiraImprison","GLOBAL",4)

END

 

IF

Global("JaheiraImprison","GLOBAL",3)

Global("JaheiraRomanceActive","GLOBAL",3)

InParty("Jaheira")

!Dead("Jaheira")

THEN

RESPONSE #100

SetGlobal("JaheiraRomanceActive","GLOBAL",1) // Set Romance to the pre-imprisoned/petrified Global

SetGlobal("JaheiraImprison","GLOBAL",1)

END

 

IF

Global("JaheiraImprison","GLOBAL",4)

Global("JaheiraRomanceActive","GLOBAL",3)

InParty("Jaheira")

!Dead("Jaheira")

THEN

RESPONSE #100

SetGlobal("JaheiraRomanceActive","GLOBAL",2) // Set Romance to the pre-imprisoned/petrified Global

SetGlobal("JaheiraImprison","GLOBAL",2)

END

 

IF

InParty("Aerie")

!Dead("Aerie")

Global("AerieRomanceActive","GLOBAL",1)

Global("AerieImprison","GLOBAL",0)

THEN

RESPONSE #100

SetGlobal("AerieImprison","GLOBAL",1) // make sure, there is a Romance in Phase 1

END

 

IF

InParty("Aerie")

!Dead("Aerie")

Global("AerieRomanceActive","GLOBAL",2)

OR(2)

Global("AerieImprison","GLOBAL",0)

Global("AerieImprison","GLOBAL",1)

THEN

RESPONSE #100

SetGlobal("AerieImprison","GLOBAL",2) // make sure, there is a Romance in Phase 2

END

 

IF

Global("AerieImprison","GLOBAL",1)

!InPartyAllowDead("Aerie")

Dead("Aerie")

THEN

RESPONSE #100

SetGlobal("AerieImprison","GLOBAL",3)

END

 

IF

Global("AerieImprison","GLOBAL",2)

!InPartyAllowDead("Aerie")

Dead("Aerie")

THEN

RESPONSE #100

SetGlobal("AerieImprison","GLOBAL",4)

END

 

IF

Global("AerieImprison","GLOBAL",3)

Global("AerieRomanceActive","GLOBAL",3)

InParty("Aerie")

!Dead("Aerie")

THEN

RESPONSE #100

SetGlobal("AerieRomanceActive","GLOBAL",1) // Set Romance to the pre-imprisoned/petrified Global

SetGlobal("AerieImprison","GLOBAL",1)

END

 

IF

Global("AerieImprison","GLOBAL",4)

Global("AerieRomanceActive","GLOBAL",3)

InParty("Aerie")

!Dead("Aerie")

THEN

RESPONSE #100

SetGlobal("AerieRomanceActive","GLOBAL",2) // Set Romance to the pre-imprisoned/petrified Global

SetGlobal("AerieImprison","GLOBAL",2)

END

 

IF

InParty("Viconia")

!Dead("Viconia")

Global("ViconiaRomanceActive","GLOBAL",1)

Global("ViconiaImprison","GLOBAL",0)

THEN

RESPONSE #100

SetGlobal("ViconiaImprison","GLOBAL",1) // make sure, there is a Romance in Phase 1

END

 

IF

InParty("Viconia")

!Dead("Viconia")

Global("ViconiaRomanceActive","GLOBAL",2)

OR(2)

Global("ViconiaImprison","GLOBAL",0)

Global("ViconiaImprison","GLOBAL",1)

THEN

RESPONSE #100

SetGlobal("ViconiaImprison","GLOBAL",2) // make sure, there is a Romance in Phase 2

END

 

IF

Global("ViconiaImprison","GLOBAL",1)

!InPartyAllowDead("Viconia")

Dead("Viconia")

THEN

RESPONSE #100

SetGlobal("ViconiaImprison","GLOBAL",3)

END

 

IF

Global("ViconiaImprison","GLOBAL",2)

!InPartyAllowDead("Viconia")

Dead("Viconia")

THEN

RESPONSE #100

SetGlobal("ViconiaImprison","GLOBAL",4)

END

 

IF

Global("ViconiaImprison","GLOBAL",3)

Global("ViconiaRomanceActive","GLOBAL",3)

InParty("Viconia")

!Dead("Viconia")

THEN

RESPONSE #100

SetGlobal("ViconiaRomanceActive","GLOBAL",1) // Set Romance to the pre-imprisoned/petrified Global

SetGlobal("ViconiaImprison","GLOBAL",1)

END

 

IF

Global("ViconiaImprison","GLOBAL",4)

Global("ViconiaRomanceActive","GLOBAL",3)

InParty("Viconia")

!Dead("Viconia")

THEN

RESPONSE #100

SetGlobal("ViconiaRomanceActive","GLOBAL",2) // Set Romance to the pre-imprisoned/petrified Global

SetGlobal("ViconiaImprison","GLOBAL",2)

END

 

IF

InParty("Anomen")

!Dead("Anomen")

Global("AnomenRomanceActive","GLOBAL",1)

Global("AnomenImprison","GLOBAL",0)

THEN

RESPONSE #100

SetGlobal("AnomenImprison","GLOBAL",1) // make sure, there is a Romance in Phase 1

END

 

IF

InParty("Anomen")

!Dead("Anomen")

Global("AnomenRomanceActive","GLOBAL",2)

OR(2)

Global("AnomenImprison","GLOBAL",0)

Global("AnomenImprison","GLOBAL",1)

THEN

RESPONSE #100

SetGlobal("AnomenImprison","GLOBAL",2) // make sure, there is a Romance in Phase 2

END

 

IF

Global("AnomenImprison","GLOBAL",1)

!InPartyAllowDead("Anomen")

Dead("Anomen")

THEN

RESPONSE #100

SetGlobal("AnomenImprison","GLOBAL",3)

END

 

IF

Global("AnomenImprison","GLOBAL",2)

!InPartyAllowDead("Anomen")

Dead("Anomen")

THEN

RESPONSE #100

SetGlobal("AnomenImprison","GLOBAL",4)

END

 

IF

Global("AnomenImprison","GLOBAL",3)

Global("AnomenRomanceActive","GLOBAL",3)

InParty("Anomen")

!Dead("Anomen")

THEN

RESPONSE #100

SetGlobal("AnomenRomanceActive","GLOBAL",1) // Set Romance to the pre-imprisoned/petrified Global

SetGlobal("AnomenImprison","GLOBAL",1)

END

 

IF

Global("AnomenImprison","GLOBAL",4)

Global("AnomenRomanceActive","GLOBAL",3)

InParty("Anomen")

!Dead("Anomen")

THEN

RESPONSE #100

SetGlobal("AnomenRomanceActive","GLOBAL",2) // Set Romance to the pre-imprisoned/petrified Global

SetGlobal("AnomenImprison","GLOBAL",2)

END

 

 

May be, this would work, but someone should test it, because I have no running game in BG2 at the moment. (I'm dealing with the Fixpack.TP2 at the moment, to remove remaining bugs in my installed, patched, modded and partiently already debugged game, before starting a new one :) )

 

_If_ this solution is tested and work, you can discuss to implement Haer'Dalis Romance here too....

 

Regards

 

Roana

Link to comment
It's not the dialogues in this case that's causing the romances to end, sadly, it's those blocks of baldur.bcs that I quoted above, which say "If dead and not in the party, end the romance" :) You'd need to adjust those also.

 

I'm just lazy and busy and fond of the simple things in life, so if it's repairable by altering one file only, that's what I suggest :)

 

Hello,

 

right, it is the baldur.bcs, that causes romances to end in case they are not in the party and dead.

 

What I want to do with my suggestion is to reenable the romance after casting "freedom" or "stone to flesh" on a NPC upon the actions, the baldur.bcs takes.

 

Thats the reason, why I would control this by the player1d.bcs and not by the baldur.bcs; and need the dialogue-changes in addition.

 

The whole reason:

 

A player can also just dump a dead NPC from the party, if he decide just in this moment that he/she don't want/need the romance and the NPC anymore.

 

In this case its right set from baldur.bcs to end the romance - and in this case you cannot get the NPC back with any above mentioned spell.

 

So in my opinion a correct and with all future mods working fix will need a seperate control of its own. Thats what I have tried to do above :)

 

But don't worry: I will test it by myself, when I start a new game after going through that damn looooong Fixpack.TP2 ;)

 

Regards

 

Roana

Link to comment
It'll alter Bioware Four only, right? Because in Xan's case, for example, imprisonment and/or petrification ends the romance deliberately - there're even two additional pieces of dialogue for this very occasion.

 

Hello,

 

right, this would alter only the Bioware four. But if you add the right triggers for example for you Xan's Romance (I don't know, if you have there also 2 Phases or not), you can expand the script with only a new GLOBAL named ("XanImprisoned,Global,xy") or such. Additional don't forget his dialogue actions, when he would end the romance in a normal way... :)

 

That was one reason too, that I have used the player1d.bcs, as it is asigned to the Mainchar, will only run on rest (not during the whole game), and the Mainchar will never leave the group :)

 

So feel free to try, alter, or dump (if it will not work as it is supposed to) my script and dialogue suggestions, to fix this bug...

 

But as this script contains already all essential dreams: please... EXTEND_BOTTOM - NOT _TOP in WeiDU !! It might cause problems running these dreams, if the game has to read too long, before reaching these original blocks after the "rest" command ingame... !!

 

Oh, and: please don't use the variable Global("Imprisoned",Global,1) for the Fixpack, as this one is in use in the Redemption mod for the final fight and would cause compatibility problems, I guess... It's the one, that have brought me to my idea for this scirpt ;)

 

Additional, I like to keep my baldur.bcs as clean as possible: I have also moved in my original game some unnessecary entries from here to Area-scripts and have also done this with my Tutu-Installation or other mods.

 

I have seen here around the forums one baldur.bcs (hm... here or at spellhound...? I don't remember...) with a huge of Areachecks... - if I ever install the responsible mod for this, I have to alter this mod, as I like to play my BG-games as smoothly as possible... :)

 

But this is another thing - out of this topic...

 

Regards

 

Roana

Link to comment

Xan already does something like that. I add a "Back from the dead" variable to the block where RomanceActive sets to 3 if he is dead. Then "Back from the dead" is checked in the character's dialogue file(once he is released, that is), and the romance is either resumed, or the dialogue "Romance is over" pops up.

 

I do not believe there's any need to use Player1d, however. After all, all these blocks are in baldur.bcs from the beginning, so they are there to stay.

Link to comment

Hello,

 

Xan already does something like that. I add a "Back from the dead" variable to the block where RomanceActive sets to 3 if he is dead. Then "Back from the dead" is checked in the character's dialogue file(once he is released, that is), and the romance is either resumed, or the dialogue "Romance is over" pops up.

 

Well done, I didn't know this :)

 

I do not believe there's any need to use Player1d, however. After all, all these blocks are in baldur.bcs from the beginning, so they are there to stay.

 

I don't have touched the blocks in the baldur.bcs. As I have explained above: I have written a really new script, that correct the unwanted ending of the romances through the baldur.bcs after it has ended the romances and reenable the romances in the right phase and asigned my new blocks at the player1d.bcs, instead at the baldur.bcs, because its not needed to be checked all the time you are playing - it only needs to be checked from time to time - and this is, what the player1d.bcs does :)

 

I know, that all modders like to append on the baldur.bcs, but I don't. This is the one of a very few scripts that are running all time through gaming. Every few seconds it runs from beginning - and the longer it will be, the longer time it will take to load areas, savegames, it can cause unexpected crashes, etc... As the baldur.bcs, will ever be checked, regardless, where you are and if its nesscary or not, there should really only be conditions for gamewhide quests (such as for example the Delon spawn for the ranger-quests, that can be bearly bounded to one area).

 

But many things can be better done by area-scripts or char-scripts: char-scripts are only running, if they are in your group (or your area, or your sightrange), and area-scripts only, if you are right in this area (and how many areas are you visiting only once or twice...).

 

But.... - well, its only, my humble opinion - and I am only a pc-gamer... - so don't worry ;)

 

Regards

 

Roana

Link to comment

Archived

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

×
×
  • Create New...