Jump to content

EFF chores


devSin

Recommended Posts

I decided to try actually contributing some of the stuff I regularly find. Tonight's topic was EFFs, brought on by Cam's power patch. It's possible there may be additional complexities where I'd already partially patched a bug last year and forgot to finish it, so you may want to check the related spells and items (this also won't be a complete list, since I probably already fix most everything else).

 

Monk's Quivering Palm allows saving throw, but lighting effects are also used for Deathblow and Greater Deathblow, which do not. Additionally, they're supposed to be capped at hit dice 10 and 12 respectively, but the visuals will run for anybody who fails a save (and won't run for creatures under the level limit who get killed anyway). Needs two new EFFs, and the spell needs to be updated to use the new EFFs instead of QUIVVIS:

COPY_EXISTING QUIVVIS.EFF "OVERRIDE/SPCL902A.EFF"
WRITE_LONG 0x40 0x0   // no save
WRITE_SHORT 0x58 0xa  // max HD 10

COPY_EXISTING QUIVVIS.EFF "OVERRIDE/SPCL903A.EFF"
WRITE_LONG 0x40 0x0   // no save
WRITE_SHORT 0x58 0xc  // max HD 12

 

Sol's Searing Orb is supposed to deal an extra 6d6 damage to undead, but is allowing a saving throw for the extra damage. Additionally, two other undead-related EFFs allow saving throws, but they're used by multiple spells which already have the saving throws set for the effects.

COPY_EXISTING UDEAD66.EFF OVERRIDE   // Sol's +6d6 deep-fry
UNDCHSTR.EFF OVERRIDE  // "Controlled" str
UNDCHVIS.EFF OVERRIDE  // SPNWCHRM for hold spells? L A Z Y
WRITE_LONG 0x40 0x0

 

Assassin's Poison Weapon EFFs look to be broken in mysterious ways. The main EFF has every single bit in the saving throw field on (I have no idea what, if any effect this has in-game). Additionally, the poison should be +3 for the first six seconds, but the second EFF only deals one. The initial EFF should have a save vs. death, and the second EFF should deal +2 damage for the first six seconds (conveniently, this provides the mandatory 12 damage with successful save). Be warned that I've never been able to get the poison effect to work in a way that's even remotely close to the IESDP/NI descriptions.

COPY_EXISTING SPCL422.EFF OVERRIDE
WRITE_LONG 0x40 0x4 // saving throw vs. death ONLY

COPY_EXISTING SPCL422A.EFF OVERRIDE
WRITE_LONG 0x1c 0x2 // +2 damage, not 1

 

Three EFFs do display string with Instant/Limited. Likely has no effect in-game, but whatever.

COPY_EXISTING SPCL906B.EFF OVERRIDE
SPIN935D.EFF OVERRIDE
STUNSTRG.EFF OVERRIDE
WRITE_LONG 0x24 0x1 // Instant/Permanent

 

The greater earth elemental for the cleric spell is being brought in hostile, whereas it should be set to match the summoner's allegiance.

COPY_EXISTING SPEART3P.EFF OVERRIDE
WRITE_LONG 0x20 0x0 // set to Match target

 

The Power Attack HLA (SPCL906) isn't giving the display string hit effect for ranged attacks (it is only assigning the EFF for melee attacks).

 

 

For the curious, FLAGS 128 is actually a "bug" in BG2 dialogues. In almost all cases, in addition to having no effect in-game, there's a journal entry for the same state that should actually be an unsolved entry. Somebody must have checked the wrong box.

Link to comment
The main EFF has every single bit in the saving throw field on (I have no idea what, if any effect this has in-game).

 

Assuming this is the saving throw type field, IIRC the effect is that the targets best saving throw is used.

Link to comment
// power attack not displaying string on ranged attacks
COPY_EXISTING ~spcl906.spl~ ~override~
 READ_LONG  0x64 "abil_off"
 READ_SHORT 0x68 "abil_num"
 READ_LONG  0x6a "fx_off"
 SET "delta" = 0
 FOR (index = 0; index < abil_num; index = index + 1) BEGIN
   READ_SHORT ("%abil_off%" + 0x1e + (0x28 * "%index%")) "abil_fx_num"
   READ_SHORT ("%abil_off%" + 0x20 + (0x28 * "%index%")) "abil_fx_idx"
   SET "abil_fx_idx" = ("%abil_fx_idx%" + "%delta%")
   WRITE_SHORT ("%abil_off%" + 0x20 + (0x28 * "%index%")) "%abil_fx_idx%"
   FOR (index2 = 0; index2 < abil_fx_num; index2 = index2 + 1) BEGIN
     READ_SHORT ("%fx_off%" +        (("%abil_fx_idx%" + "%index2%") * 0x30)) "opcode"
     READ_ASCII ("%fx_off%" + 0x14 + (("%abil_fx_idx%" + "%index2%") * 0x30)) "eff_file"
     PATCH_IF (("%opcode%" = 248) AND ("%eff_file%" STRING_COMPARE_CASE "spcl906b" = 0)) BEGIN // melee display string
       READ_ASCII ("%fx_off%" +        (("%abil_fx_idx%" + "%index2%") * 0x30)) "clone_fx" (0x30)
       SET "index2"= "%abil_fx_num%" // kills loop
       INSERT_BYTES            ("%fx_off%" +        ("%abil_fx_idx%" * 0x30)) 0x30             // new effect
         WRITE_EVALUATED_ASCII ("%fx_off%" +        ("%abil_fx_idx%" * 0x30)) "%clone_fx%"     // cloned effect
         WRITE_SHORT           ("%fx_off%" +        ("%abil_fx_idx%" * 0x30)) 249              // opcode
       SET "delta" = "%delta%" + 1
       WRITE_SHORT ("%abil_off%" + 0x1e + (0x28 * "%index%")) ("%abil_fx_num%" + 1)
     END
   END
 END
 BUT_ONLY_IF_IT_CHANGES

Link to comment

Archived

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

×
×
  • Create New...