Jump to content

Trying to fix the "Slayer Form Kills You" bug in Ascension


JediMindTrix

Recommended Posts

I won't assume everyone is familiar with this bug so I'll describe it now: In the Ascension mod, if you turn into the slayer, you will begin to take damage after a set amount of time until it kills you outright. The intention was for this effect to stop when you switch back to Human form, however this does not occur. Instead, it'll kill you anyway. Ascension tried setting your magic damage resistance to 100% for a short duration but it doesn't appear to work as intended in either version (and is kind of sloppy anyway). This has persisted all the way since it's last release by Gaider way back in the early 2000's.

 

After determining there isn't a viable means to fix it in both EE and the original Bioware versions (There is an easy method in EE but it doesn't work the original), I determined that it'd be better to handle it by scripting. This was my general idea:

 

1) Remove damage effects from all .spls.

2) Introduce a variable jmt#slay into the mix. Using the 'End Slayer Form' (spin718 I believe) innate ability would set this 2. Slayer2, 3, 4 and spin823.spl's would set this to 1.

3) Introduce code into player1.dlg that waits 60 seconds, then checks to see if jmt#slay = 1. If =1, then kills player. Maybe add a few seconds to account for time player spends choosing between dialog options.

 

This is a vague idea of what I want to do:

IF ~Global("Slayer10","GLOBAL",1)
!Global("FinalFight","AR6200",4)
!Global("MelStillImmortal","AR6200",2)~ THEN BEGIN 27 // from:

  SAY #55324
  IF ~~ THEN REPLY #55326
  DO ~SetGlobal("Slayer10","GLOBAL",0)~ EXIT
  IF ~XPLT(Player1,2000001)~ THEN REPLY #61320
  DO ~IncrementGlobal("SlayerDeath","GLOBAL",1)
SetGlobal("Slayer10","GLOBAL",2)
SetGlobal("jmt#slay","GLOBAL",1)
SetGlobalTimer("TheSlayerTimer","GLOBAL",60)
ReputationInc(-1)

Wait(60)
   IF
    Global("jmt#slay","GLOBAL", 1)
   THEN
    Kill(Myself)

I am pretty sure however it won't necessarily work this way, or even install correctly in Weidu (The multiple IF's that I want to mean different things being a likely source of problems.)

As I don't really know all too much about IE scripting or .d Do's and Don'ts I was hoping for some guidance!

Link to comment

I dislike the proposed solution because it does not give the intuitive "you are in trouble" feedback that you get from a continuous gradual drain on health. I aIso dislike timers that don't ignore dialog time.

 

Is it possible to apply a spell effect that calls a script periodically, and in that script check if still in slayer form, and if yes, damage player and reapply effect, otherwise do nothing? Basically a self-perpetuating timer callback function?

Link to comment

agb1, your first concern could be easily be resolved by adding delayed onset 'display string' spell effects and adding a few new strings to the .tlk to alert the player when their time is almost up. Reviewing the .dlg file, I believe that the code would only trigger when you choose to become the slayer/ravager and not when the dialog actually opens, so it doesn't need to ignore anything as it only starts when the dialog exits out.

Sorry, but why can't it be fixed properly?

Because there is no way I could determine by going through the BGII Spell Effects on the IESDP to tell the damage effects to 'stop' from applying when you shift back to Human form. They're delayed onset, and will fire no matter what form you are in, and seems to pierce the damage resistance End Slayer Change applies to stop this from happening in the first place (which in itself is sloppy as it means you would be immune to the damage from things such as Horrid Wilting in the interrim). EE has the means to Remove Effects by Resource which effectively resolves this. Unfortunately, there is no such thing, that I was able to find in the IESDP or am otherwise aware of, in the original BG2/TOB engine. If you can find one that I missed, by all means, I'd be happy to go that route.

Link to comment

Because there is no way I could determine by going through the BGII Spell Effects on the IESDP to tell the damage effects to 'stop' from applying when you shift back to Human form. They're delayed onset, and will fire no matter what form you are in, and seems to pierce the damage resistance End Slayer Change applies to stop this from happening in the first place (which in itself is sloppy as it means you would be immune to the damage from things such as Horrid Wilting in the interrim). EE has the means to Remove Effects by Resource which effectively resolves this. Unfortunately, there is no such thing, that I was able to find in the IESDP or am otherwise aware of, in the original BG2/TOB engine. If you can find one that I missed, by all means, I'd be happy to go that route.

Opcode 220/221 - Remove Effects by School/Type, should work.

I don't know if the original game will allow you to specify new Spell Schools/Types, but you could always hijack the Divination Attack(5) type if it doesn't allow new ones.

Link to comment

Upon shifting back from slayer, you could apply an effect (206) granting immunity to the spell that applies the damage. If the damage is being applied by an effect, change the effect so it casts a spell that applies the damage.

Link to comment

Archived

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

×
×
  • Create New...