Jump to content

Spell Power issues


CamDawg

Recommended Posts

This patch list is preliminary; I'm reviewing.

 

// incorrect power fields in spells
COPY_EXISTING ~sppr102.spl~  ~override~ // command, target: self effects
             ~sppr104.spl~  ~override~ // detect evil, target: self effects
             ~sppr105.spl~  ~override~ // entangle, target: non-self effects
             ~sppr109.spl~  ~override~ // sanctuary, target: self effects
             ~sppr110.spl~  ~override~ // shillelagh, target: self effects
             ~sppr111.spl~  ~override~ // armor of faith, target: self effects
             ~sppr113.spl~  ~override~ // doom, target: non-self effects
             ~sppr205.spl~  ~override~ // find traps, target: self effects
             ~sppr205d.spl~ ~override~ // find traps, target: self effects
             ~sppr206.spl~  ~override~ // flame blade, target: self effects
             ~sppr207.spl~  ~override~ // good berries, target: self effects
             ~sppr210.spl~  ~override~ // resist fire/cold, target: non-self effects
             ~sppr213.spl~  ~override~ // spiritual hammer, target: self effects
             ~sppr214.spl~  ~override~ // draw upon holy might, target: self effects
             ~sppr301.spl~  ~override~ // animate dead, target: self effects
             ~sppr303.spl~  ~override~ // dispel magic, target: non-self effects
             ~sppr306.spl~  ~override~ // protection from fire, target: non-self effects
             ~sppr312.spl~  ~override~ // strength of one, target: self effects
             ~sppr315.spl~  ~override~ // cure medium wounds, target: non-self effects
             ~sppr318.spl~  ~override~ // zone of sweet air, target: self effects
             ~sppr401.spl~  ~override~ // cure serious wounds, target: non-self effects
             ~sppr402.spl~  ~override~ // animal summoning i, target: self effects
             ~sppr403.spl~  ~override~ // free action, target: self effects
             ~sppr404.spl~  ~override~ // neutralize poison, target: self effects
             ~sppr406.spl~  ~override~ // defensive harmony, target: self effects
             ~sppr408.spl~  ~override~ // protection from evil 10' radius, target: self effects
             ~sppr410.spl~  ~override~ // call woodland beings, target: self effects
             ~sppr412.spl~  ~override~ // holy power, target: self effects
             ~sppr415.spl~  ~override~ // farsight, target: self effects
             ~sppr416.spl~  ~override~ // cloak of fear, target: self effects
             ~sppr417.spl~  ~override~ // lesser restoration, target: self effects
             ~sppr501.spl~  ~override~ // animal summoning ii, target: self effects
             ~sppr502.spl~  ~override~ // cure critical wounds, target: non-self effects
             ~sppr503.spl~  ~override~ // flame strike, target: non-self effects
             ~sppr506.spl~  ~override~ // iron skins, target: self effects
             ~sppr507.spl~  ~override~ // champion's strength, target: self effects
             ~sppr511.spl~  ~override~ // slay living, target: self effects
             ~sppr512.spl~  ~override~ // greater command, target: self effects and non-self effects
             ~sppr513.spl~  ~override~ // righteous magic, target: self effects
             ~sppr514.spl~  ~override~ // mass cure, target: self effects
             ~sppr515.spl~  ~override~ // repulse undead, target: self effects
             ~sppr516.spl~  ~override~ // pixie dust, target: self effects
             ~sppr601.spl~  ~override~ // aerial servant, target: self effects
             ~sppr602.spl~  ~override~ // animal summoning iii, target: self effects
             ~sppr603.spl~  ~override~ // blade barrier, target: self effects
             ~sppr603d.spl~ ~override~ // blade barrier, target: non-self effects
             ~sppr604.spl~  ~override~ // conjure animals, target: self effects
             ~sppr605.spl~  ~override~ // conjure fire elemental, target: self effects
             ~sppr606.spl~  ~override~ // fire seeds, target: self effects
             ~sppr608.spl~  ~override~ // harm, target: self effects
             ~sppr609.spl~  ~override~ // false dawn, target: self effects
             ~sppr611.spl~  ~override~ // wondrous recall, target: self effects
             ~sppr613.spl~  ~override~ // physical mirror, target: self effects
             ~sppr614.spl~  ~override~ // sol's searing orb, target: self effects
             ~sppr701.spl~  ~override~ // shield of the archons, target: self effects
             ~sppr702.spl~  ~override~ // conjure earth elemental, target: self effects
             ~sppr703.spl~  ~override~ // gate, target: self effects
             ~sppr704.spl~  ~override~ // nature's beauty, target: self effects
             ~sppr707.spl~  ~override~ // sunray, target: self effects
             ~sppr710.spl~  ~override~ // holy word, target: self effects
             ~sppr712.spl~  ~override~ // resurrection, target: non-self effects
             ~sppr713.spl~  ~override~ // greater restoration, target: self effects
             ~sppr715.spl~  ~override~ // unholy word, target: self effects
             ~sppr720.spl~  ~override~ // earthquake, target: self effects
             ~sppr721.spl~  ~override~ // energy blades, target: self effects
             ~sppr722.spl~  ~override~ // storm of vengeance, target: self effects
             ~sppr723.spl~  ~override~ // elemental summoning, target: self effects
             ~sppr724.spl~  ~override~ // greater elemental summoning, target: self effects
             ~sppr725.spl~  ~override~ // globe of blades, target: self effects
             ~sppr725d.spl~ ~override~ // globe of blades, target: non-self effects
             ~sppr726.spl~  ~override~ // summon deva, target: self effects
             ~sppr727.spl~  ~override~ // summon fallen deva, target: self effects
             ~sppr728.spl~  ~override~ // implosion, target: non-self effects
             ~sppr729.spl~  ~override~ // mass raise dead, target: self effects
             ~sppr730.spl~  ~override~ // aura of flaming death, target: self effects
             ~sppr730d.spl~ ~override~ // aura of flaming death, target: non-self effects
             ~spwi102.spl~  ~override~ // armor, target: self effects
             ~spwi103.spl~  ~override~ // burning hands, target: self effects
             ~spwi105.spl~  ~override~ // color spray, target: self effects
             ~spwi106.spl~  ~override~ // blindness, target: non-self effects
             ~spwi107.spl~  ~override~ // friends, target: self effects
             ~spwi110.spl~  ~override~ // identify, target: self effects
             ~spwi111.spl~  ~override~ // infravision, target: non-self effects
             ~spwi112.spl~  ~override~ // magic missile, target: non-self effects
             ~spwi113.spl~  ~override~ // protection from evil, target: non-self effects
             ~spwi114.spl~  ~override~ // shield, target: self effects
             ~spwi115.spl~  ~override~ // shocking grasp, target: self effects
             ~spwi117.spl~  ~override~ // chill touch, target: self effects
             ~spwi118.spl~  ~override~ // chromatic orb, target: non-self effects
             ~spwi119.spl~  ~override~ // larloch's minor drain, target: self effects
             ~spwi119a.spl~ ~override~ // <invalid strref -1>, target: self effects
             ~spwi120.spl~  ~override~ // reflected image, target: self effects
             ~spwi123.spl~  ~override~ // find familiar, target: self effects
             ~spwi124.spl~  ~override~ // nahal's reckless dweomer, target: self effects
             ~spwi201.spl~  ~override~ // blur, target: self effects
             ~spwi202.spl~  ~override~ // detect evil, target: self effects
             ~spwi206.spl~  ~override~ // invisibility, target: self effects
             ~spwi207.spl~  ~override~ // knock, target: self effects
             ~spwi210.spl~  ~override~ // resist fear, target: non-self effects
             ~spwi212.spl~  ~override~ // mirror image, target: self effects
             ~spwi218.spl~  ~override~ // ghoul touch, target: self effects
             ~spwi219.spl~  ~override~ // vocalize, target: self effects
             ~spwi222.spl~  ~override~ // chaos shield*, target: self effects
             ~spwi223.spl~  ~override~ // deafness, target: non-self effects
             ~spwi224.spl~  ~override~ // glitterdust, target: non-self effects
             ~spwi301.spl~  ~override~ // clairvoyance, target: self effects
             ~spwi302.spl~  ~override~ // remove magic, target: non-self effects
             ~spwi304.spl~  ~override~ // fireball, target: self effects
             ~spwi307.spl~  ~override~ // invisibility 10' radius, target: self effects
             ~spwi309.spl~  ~override~ // monster summoning i, target: self effects
             ~spwi310.spl~  ~override~ // non detection, target: self effects
             ~spwi311.spl~  ~override~ // protection from normal missiles, target: self effects
             ~spwi314.spl~  ~override~ // vampiric touch, target: self effects and non-self effects
             ~spwi314a.spl~ ~override~ // <invalid strref -1>, target: self effects
             ~spwi317.spl~  ~override~ // ghost armor, target: self effects
             ~spwi318.spl~  ~override~ // minor spell deflection, target: self effects
             ~spwi319.spl~  ~override~ // protection from fire, target: non-self effects
             ~spwi320.spl~  ~override~ // protection from cold, target: non-self effects
             ~spwi321.spl~  ~override~ // spell thrust, target: non-self effects
             ~spwi322.spl~  ~override~ // detect illusion, target: non-self effects
             ~spwi325.spl~  ~override~ // melf's minute meteors, target: self effects
             ~spwi326.spl~  ~override~ // dispel magic, target: non-self effects
             ~spwi402.spl~  ~override~ // dimension door, target: self effects
             ~spwi403.spl~  ~override~ // fire shield (blue), target: self effects
             ~spwi403d.spl~ ~override~ // fire shield (blue), target: non-self effects
             ~spwi406.spl~  ~override~ // minor globe of invulneribility, target: self effects
             ~spwi407.spl~  ~override~ // monster summoning ii, target: self effects
             ~spwi408.spl~  ~override~ // stoneskin, target: self effects
             ~spwi410.spl~  ~override~ // remove curse, target: non-self effects
             ~spwi411.spl~  ~override~ // emotion, target: self effects
             ~spwi414.spl~  ~override~ // spirit armor, target: non-self effects and self effects
             ~spwi416.spl~  ~override~ // polymorph self, target: self effects
             ~spwi417.spl~  ~override~ // enchanted weapon, target: self effects
             ~spwi418.spl~  ~override~ // fire shield (red), target: self effects
             ~spwi420.spl~  ~override~ // minor sequencer, target: self effects
             ~spwi423.spl~  ~override~ // spider spawn, target: self effects
             ~spwi424.spl~  ~override~ // farsight, target: self effects
             ~spwi425.spl~  ~override~ // wizard eye, target: self effects
             ~spwi501.spl~  ~override~ // animate dead, target: self effects
             ~spwi504.spl~  ~override~ // monster summoning iii, target: self effects
             ~spwi505.spl~  ~override~ // shadow door, target: self effects
             ~spwi510.spl~  ~override~ // spell immunity, target: self effects
             ~spwi511.spl~  ~override~ // protection from normal weapons, target: self effects
             ~spwi516.spl~  ~override~ // conjure lesser fire elemental, target: self effects
             ~spwi518.spl~  ~override~ // phantom blade, target: self effects
             ~spwi519.spl~  ~override~ // spell shield, target: self effects
             ~spwi520.spl~  ~override~ // conjure lesser air elemental, target: self effects
             ~spwi521.spl~  ~override~ // conjure lesser earth elemental, target: self effects
             ~spwi522.spl~  ~override~ // minor spell turning, target: self effects
             ~spwi523.spl~  ~override~ // sunfire, target: self effects
             ~spwi601.spl~  ~override~ // invisible stalker, target: self effects
             ~spwi602.spl~  ~override~ // globe of invulnerability, target: self effects
             ~spwi603.spl~  ~override~ // tenser's transformation, target: self effects
             ~spwi605.spl~  ~override~ // death spell, target: self effects
             ~spwi607.spl~  ~override~ // mislead, target: self effects
             ~spwi611.spl~  ~override~ // protection from magical weapons, target: self effects
             ~spwi613.spl~  ~override~ // improved haste, target: non-self effects
             ~spwi614.spl~  ~override~ // death fog, target: non-self effects
             ~spwi617.spl~  ~override~ // contingency, target: self effects
             ~spwi618.spl~  ~override~ // spell deflection, target: self effects
             ~spwi619.spl~  ~override~ // wyvern call, target: self effects
             ~spwi620.spl~  ~override~ // conjure fire elemental, target: self effects
             ~spwi621.spl~  ~override~ // conjure air elemental, target: self effects
             ~spwi622.spl~  ~override~ // conjure earth elemental, target: self effects
             ~spwi623.spl~  ~override~ // carrion summons, target: self effects
             ~spwi624.spl~  ~override~ // summon nishruu, target: self effects
             ~spwi701.spl~  ~override~ // spell turning, target: self effects
             ~spwi702.spl~  ~override~ // protection from the elements, target: non-self effects
             ~spwi703.spl~  ~override~ // project image, target: self effects
             ~spwi707.spl~  ~override~ // cacofiend, target: self effects
             ~spwi708.spl~  ~override~ // mantle, target: self effects
             ~spwi710.spl~  ~override~ // spell sequencer, target: self effects
             ~spwi711.spl~  ~override~ // sphere of chaos, target: non-self effects
             ~spwi716.spl~  ~override~ // mordenkainen's sword, target: self effects
             ~spwi717.spl~  ~override~ // summon efreeti, target: self effects
             ~spwi718.spl~  ~override~ // summon djinni, target: self effects
             ~spwi719.spl~  ~override~ // summon hakeashar, target: self effects
             ~spwi721.spl~  ~override~ // mass invisibility, target: non-self effects
             ~spwi721.spl~  ~override~ // mass invisibility, target: self effects
             ~spwi723.spl~  ~override~ // improved chaos shield*, target: self effects
             ~spwi802.spl~  ~override~ // spell deflection, target: self effects
             ~spwi803.spl~  ~override~ // protection from energy, target: non-self effects
             ~spwi804.spl~  ~override~ // simulacrum, target: self effects
             ~spwi807.spl~  ~override~ // summon fiend, target: self effects
             ~spwi808.spl~  ~override~ // improved mantle, target: self effects
             ~spwi809.spl~  ~override~ // spell trigger, target: self effects
             ~spwi812.spl~  ~override~ // abi-dalzim's horrid wilting, target: non-self effects
             ~spwi818.spl~  ~override~ // bigby's clenched fist, target: non-self effects
             ~spwi902.spl~  ~override~ // spell trap, target: self effects
             ~spwi905.spl~  ~override~ // gate, target: self effects
             ~spwi907.spl~  ~override~ // absolute immunity, target: self effects
             ~spwi908.spl~  ~override~ // chain contingency, target: self effects
             ~spwi909.spl~  ~override~ // time stop, target: self effects
             ~spwi910.spl~  ~override~ // imprisonment, target: non-self effects
             ~spwi913.spl~  ~override~ // wail of the banshee, target: self effects
             ~spwi915.spl~  ~override~ // black blade of disaster, target: self effects
             ~spwi916.spl~  ~override~ // shapechange, target: self effects
             ~spwi917.spl~  ~override~ // freedom, target: self effects
             ~spwi918.spl~  ~override~ // bigby's crushing hand, target: non-self effects
             ~spwi920.spl~  ~override~ // energy blades, target: self effects
             ~spwi921.spl~  ~override~ // improved alacrity, target: self effects
             ~spwi922.spl~  ~override~ // dragon's breath, target: non-self effects
             ~spwi923.spl~  ~override~ // summon planetar, target: self effects
             ~spwi924.spl~  ~override~ // summon dark planetar, target: self effects
             ~spwi925.spl~  ~override~ // comet, target: non-self effects
             ~spwi926.spl~  ~override~ // dimension door, target: self effects
             ~spwi938.spl~  ~override~ // lightning, target: non-self effects
             ~spwi944.spl~  ~override~ // <invalid strref -1>, target: self effects
             ~spwi945.spl~  ~override~ // <invalid strref -1>, target: self effects
             ~spwi946.spl~  ~override~ // <invalid strref -1>, target: self effects
             ~spwi947.spl~  ~override~ // <invalid strref -1>, target: self effects
             ~spwi949.spl~  ~override~ // <invalid strref -1>, target: self effects
             ~spwish07.spl~ ~override~ // greater restoration, target: self effects
             ~spwish10.spl~ ~override~ // mass raise dead, target: self effects
             ~spwish17.spl~ ~override~ // time stop, target: self effects
             ~spwish19.spl~ ~override~ // energy drain, target: self effects
             ~spwish24.spl~ ~override~ // meteor swarm, target: self effects
             ~spwish25.spl~ ~override~ // slow, target: self effects
             ~spwish45.spl~ ~override~ // <invalid strref -1>, target: self effects
             ~spwish46.spl~ ~override~ // greater restoration, target: self effects
             ~spwm101.spl~  ~override~ // repulse undead, target: self effects
             ~spwm111.spl~  ~override~ // entangle, target: non-self effects
             ~spwm113.spl~  ~override~ // polymorph other, target: non-self effects
             ~spwm125.spl~  ~override~ // minor globe of invulneribility, target: non-self effects
             ~spwm136.spl~  ~override~ // good berries, target: self effects
             ~spwm140.spl~  ~override~ // good berries, target: non-self effects
             ~spwm141.spl~  ~override~ // good berries, target: non-self effects
             ~spwm145.spl~  ~override~ // polymorph other, target: non-self effects
             ~spwm154.spl~  ~override~ // cacofiend, target: self effects
             ~spwm157.spl~  ~override~ // cacofiend, target: non-self effects
             ~spwm159.spl~  ~override~ // cacofiend, target: non-self effects
             ~spwm162.spl~  ~override~ // charm person, target: non-self effects
             ~spwm178.spl~  ~override~ // blindness, target: non-self effects
             ~spwm186.spl~  ~override~ // charm person, target: non-self effects
             ~spwm188.spl~  ~override~ // summon cow, target: self effects and non-self effects
 READ_SHORT 0x1c "spelltype" ELSE 0
 PATCH_IF (("%spelltype%" = 1) OR ("%spelltype%" = 2)) BEGIN
   READ_LONG  0x34 "level"
   READ_LONG  0x64 "abil_off"
   READ_SHORT 0x68 "abil_num"
   READ_LONG  0x6a "fx_off"
   FOR (index = 0; index < abil_num; index = index + 1) BEGIN // fix existing effects
     READ_BYTE  ("%abil_off%" + 0x0c + (0x28 * "%index%")) "abil_target"
     READ_SHORT ("%abil_off%" + 0x10 + (0x28 * "%index%")) "min_level"
     READ_SHORT ("%abil_off%" + 0x1e + (0x28 * "%index%")) "abil_fx_num"
     READ_SHORT ("%abil_off%" + 0x20 + (0x28 * "%index%")) "abil_fx_idx"
     FOR (index2 = 0; index2 < abil_fx_num; index2 = index2 + 1) BEGIN
       READ_SHORT ("%fx_off%" +        (0x30 * ("%abil_fx_idx%" + "%index2%"))) "opcode"
       READ_BYTE ("%fx_off%" + 0x02 + (0x30 * ("%abil_fx_idx%" + "%index2%"))) "fx_target"
       READ_BYTE ("%fx_off%" + 0x03 + (0x30 * ("%abil_fx_idx%" + "%index2%"))) "power"
       PATCH_IF (("%power%" != 0) AND (("%abil_target%" = 5) OR ("%fx_target%" = 1) OR ("%fx_target%" = 3))) BEGIN
         WRITE_BYTE ("%fx_off%" + 0x03 + (0x30 * ("%abil_fx_idx%" + "%index2%"))) 0 // if target = self, power should be 0
       END ELSE
       PATCH_IF (("%power%" != "%level%") AND ("%abil_target%" != 5) AND ("%fx_target%" != 1) AND ("%fx_target%" != 3)) BEGIN
         WRITE_BYTE ("%fx_off%" + 0x03 + (0x30 * ("%abil_fx_idx%" + "%index2%"))) "%level%" // if target != self, power should be = level
       END
     END
   END
 END
 BUT_ONLY_IF_IT_CHANGES

Link to comment

Note that, for the most part, you don't really need to change the power for effects that target: self (and they probably shouldn't be set to 0). These effects usually bypass the globes already.

 

I'm unrolling my patches to set the power to 0 for spells that create item, and to set power 4 for potions (I never bothered to test; it appears that they also bypass the globes). Now, it's only the summoning spells that allow you to target "any point in range" but use an EFF file with target: self. Setting the power to 0 is the only way I've been able to get these spells to work with the globe on (well, spells less than level 5, at least).

 

For posterity, saving throws from spell effects and EFF files are cumulative. If Monster Summoning I has a saving throw vs. death, and the EFF file has a saving throw vs. wand, Imoen first gets to save vs. death (avoiding the EFF entirely), and then save vs. wand (to avoid the actual effect, but only if she failed the first saving throw).

Link to comment

This had led to a number of interestig discoveries--some of these are being flagged because they have mistargeted effects or we've patched them incorrectly. Doom (sppr113), Zone of Sweet Air (sppr113), Free Action (sppr403), Neutralize Poison (sppr404), Larlocks's Minor Drain (spwi119), Vampiric Touch (spwi314), Protection from Fire (spwi319) and Protection from Cold (spwi320) have been dropped from the patch list, as they were issues from either our own patches or don't need to be patched. Free Action had an immunity to hold effect wath a bad target (self instead of preset target) that was causing it's spurious flagging; Neutralize Poison has the same issue with a cure disease opcode.

 

Continuing the review from sppr406...

Link to comment

Archived

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

×
×
  • Create New...