Guest Guest_Nythrun_* Posted January 10, 2007 Share Posted January 10, 2007 Ah, okay. I tested only with this - and the effects tally isn't ever large enough to be a real concern to me, so my objections are cheerfully rescinded. Of course, you may want to do this differently Didn't touch any scripts yet. COPY_EXISTING ~spwi590.spl~ ~override~ // Immunity: Abjuration PATCH_IF (SOURCE_SIZE > 0x71) THEN BEGIN READ_LONG 0x64 "ho" READ_SHORT 0x68 "hc" READ_LONG 0x6a "eo" READ_SHORT 0x6e "gi" READ_SHORT 0x70 "gc" SET "ni" = ("gi" + "gc") SET "ne" = 0x19 FOR ("i1" = "ho"; "i1" < ("ho" + (0x28 * "hc")); "i1" += 0x28) BEGIN READ_SHORT ("i1" + 0x1e) "ec" WRITE_SHORT ("i1" + 0x1e) ("ec" + "ne") WRITE_SHORT ("i1" + 0x20) "ni" FOR ("i2" = ("eo" + (0x30 * "ni")); "i2" < ("eo" + (0x30 * ("ni" + "ec"))); "i2" += 0x30) BEGIN READ_SHORT "i2" "op" PATCH_IF ("op" = 0xcc) THEN BEGIN READ_ASCII "i2" ~tm~ (0x30) SET "i2" = ("eo" + (0x30 * ("ni" + "ec"))) END END INNER_PATCH_SAVE ~tm~ ~%tm%~ BEGIN WRITE_SHORT 0x00 0xce WRITE_LONG 0x04 0xffffffff WRITE_LONG 0x08 0x0 WRITE_ASCIIT 0x14 ~~ END INSERT_BYTES ("eo" + (0x30 * ("ni" + "ec"))) (0x30 * ("ne" - 0x1)) FOR ("i3" = 0x0; "i3" < ("ne" - 0x1); "i3" += 0x1) BEGIN WRITE_ASCIIE ("eo" + (0x30 * ("ni" + "ec" + "i3"))) ~%tm%~ PATCH_IF ("i3" = 0x00) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi907~ // Absolute Immunity END ELSE PATCH_IF ("i3" = 0x01) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spcl721~ // Storm Shield END ELSE PATCH_IF ("i3" = 0x02) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr109~ // Sanctuary END ELSE PATCH_IF ("i3" = 0x03) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr111~ // Armor of Faith END ELSE PATCH_IF ("i3" = 0x04) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi902~ // Spell Trap END ELSE PATCH_IF ("i3" = 0x05) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr408~ // Protection From Evil 10' radius END ELSE PATCH_IF ("i3" = 0x06) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr515~ // Repulse Undead END ELSE PATCH_IF ("i3" = 0x07) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr701~ // Shield of the Archons END ELSE PATCH_IF ("i3" = 0x08) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spra302~ // Minor Spell Deflection END ELSE PATCH_IF ("i3" = 0x09) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi222~ // Chaos Shield* END ELSE PATCH_IF ("i3" = 0x0a) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi318~ // Minor Spell Deflection END ELSE PATCH_IF ("i3" = 0x0b) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi406~ // Minor Globe of Invulneribility END ELSE PATCH_IF ("i3" = 0x0c) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi510~ // Spell Immunity END ELSE PATCH_IF ("i3" = 0x0d) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi511~ // Protection From Normal Weapons END ELSE PATCH_IF ("i3" = 0x0e) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi519~ // Spell Shield END ELSE PATCH_IF ("i3" = 0x0f) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi522~ // Minor Spell Turning END ELSE PATCH_IF ("i3" = 0x10) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi602~ // Globe of Invulnerability END ELSE PATCH_IF ("i3" = 0x11) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi611~ // Protection From Magical Weapons END ELSE PATCH_IF ("i3" = 0x12) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi618~ // Spell Deflection END ELSE PATCH_IF ("i3" = 0x13) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi701~ // Spell Turning END ELSE PATCH_IF ("i3" = 0x14) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi708~ // Mantle END ELSE PATCH_IF ("i3" = 0x15) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi723~ // Improved Chaos Shield* END ELSE PATCH_IF ("i3" = 0x16) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi802~ // Spell Deflection END ELSE PATCH_IF ("i3" = 0x17) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi808~ // Improved Mantle END END INSERT_BYTES ("eo" + (0x30 * "ni") + 0x00) 0x30 WRITE_ASCIIE ("eo" + (0x30 * "ni") + 0x00) ~%tm%~ WRITE_SHORT ("eo" + (0x30 * "ni") + 0x00) 0xdc WRITE_LONG ("eo" + (0x30 * "ni") + 0x04) 0x9 WRITE_LONG ("eo" + (0x30 * "ni") + 0x08) 0x1 WRITE_BYTE ("eo" + (0x30 * "ni") + 0x0c) 0x1 WRITE_LONG ("eo" + (0x30 * "ni") + 0x0e) 0x0 SET "ni" = ("ni" + "ec" + "ne") END END COPY_EXISTING ~spwi591.spl~ ~override~ // Immunity: Conjuration PATCH_IF (SOURCE_SIZE > 0x71) THEN BEGIN READ_LONG 0x64 "ho" READ_SHORT 0x68 "hc" READ_LONG 0x6a "eo" READ_SHORT 0x6e "gi" READ_SHORT 0x70 "gc" SET "ni" = ("gi" + "gc") SET "ne" = 0x0c FOR ("i1" = "ho"; "i1" < ("ho" + (0x28 * "hc")); "i1" += 0x28) BEGIN READ_SHORT ("i1" + 0x1e) "ec" WRITE_SHORT ("i1" + 0x1e) ("ec" + "ne") WRITE_SHORT ("i1" + 0x20) "ni" FOR ("i2" = ("eo" + (0x30 * "ni")); "i2" < ("eo" + (0x30 * ("ni" + "ec"))); "i2" += 0x30) BEGIN READ_SHORT "i2" "op" PATCH_IF ("op" = 0xcc) THEN BEGIN READ_ASCII "i2" ~tm~ (0x30) SET "i2" = ("eo" + (0x30 * ("ni" + "ec"))) END END INNER_PATCH_SAVE ~tm~ ~%tm%~ BEGIN WRITE_SHORT 0x00 0xce WRITE_LONG 0x04 0xffffffff WRITE_LONG 0x08 0x0 WRITE_ASCIIT 0x14 ~~ END INSERT_BYTES ("eo" + (0x30 * ("ni" + "ec"))) (0x30 * ("ne" - 0x1)) FOR ("i3" = 0x0; "i3" < ("ne" - 0x1); "i3" += 0x1) BEGIN WRITE_ASCIIE ("eo" + (0x30 * ("ni" + "ec" + "i3"))) ~%tm%~ PATCH_IF ("i3" = 0x00) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spcl741~ // Boon of Lathander END ELSE PATCH_IF ("i3" = 0x01) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr710~ // Holy Word END ELSE PATCH_IF ("i3" = 0x02) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr715~ // Unholy Word END ELSE PATCH_IF ("i3" = 0x03) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi102~ // Armor END ELSE PATCH_IF ("i3" = 0x04) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi317~ // Ghost Armor END ELSE PATCH_IF ("i3" = 0x05) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr706~ // Symbol, Fear END ELSE PATCH_IF ("i3" = 0x06) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr718~ // Symbol, Stun END ELSE PATCH_IF ("i3" = 0x07) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr719~ // Symbol, Death END ELSE PATCH_IF ("i3" = 0x08) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi811~ // Symbol, Fear END ELSE PATCH_IF ("i3" = 0x09) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi816~ // Symbol, Stun END ELSE PATCH_IF ("i3" = 0x0a) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi817~ // Symbol, Death END END INSERT_BYTES ("eo" + (0x30 * "ni") + 0x00) 0x30 WRITE_ASCIIE ("eo" + (0x30 * "ni") + 0x00) ~%tm%~ WRITE_SHORT ("eo" + (0x30 * "ni") + 0x00) 0xdc WRITE_LONG ("eo" + (0x30 * "ni") + 0x04) 0x9 WRITE_LONG ("eo" + (0x30 * "ni") + 0x08) 0x2 WRITE_BYTE ("eo" + (0x30 * "ni") + 0x0c) 0x0 WRITE_LONG ("eo" + (0x30 * "ni") + 0x0e) 0x0 SET "ni" += ("ec" + "ne") END END COPY_EXISTING ~spwi592.spl~ ~override~ // Divination PATCH_IF (SOURCE_SIZE > 0x71) THEN BEGIN READ_LONG 0x64 "ho" READ_SHORT 0x68 "hc" READ_LONG 0x6a "eo" READ_SHORT 0x6e "gi" READ_SHORT 0x70 "gc" SET "ni" = ("gi" + "gc") SET "ne" = 0x07 FOR ("i1" = "ho"; "i1" < ("ho" + (0x28 * "hc")); "i1" += 0x28) BEGIN READ_SHORT ("i1" + 0x1e) "ec" WRITE_SHORT ("i1" + 0x1e) ("ec" + "ne") WRITE_SHORT ("i1" + 0x20) "ni" FOR ("i2" = ("eo" + (0x30 * "ni")); "i2" < ("eo" + (0x30 * ("ni" + "ec"))); "i2" += 0x30) BEGIN READ_SHORT "i2" "op" PATCH_IF ("op" = 0xcc) THEN BEGIN READ_ASCII "i2" ~tm~ (0x30) SET "i2" = ("eo" + (0x30 * ("ni" + "ec"))) END END INNER_PATCH_SAVE ~tm~ ~%tm%~ BEGIN WRITE_SHORT 0x00 0xce WRITE_LONG 0x04 0xffffffff WRITE_LONG 0x08 0x0 END INSERT_BYTES ("eo" + (0x30 * ("ni" + "ec"))) (0x30 * ("ne" - 0x1)) FOR ("i3" = 0x0; "i3" < ("ne" - 0x1); "i3" += 0x1) BEGIN WRITE_ASCIIE ("eo" + (0x30 * ("ni" + "ec" + "i3"))) ~%tm%~ PATCH_IF ("i3" = 0x00) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr415~ // Farsight END ELSE PATCH_IF ("i3" = 0x01) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr505~ // True Seeing END ELSE PATCH_IF ("i3" = 0x02) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi301~ // Clairvoyance END ELSE PATCH_IF ("i3" = 0x03) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi424~ // Farsight END ELSE PATCH_IF ("i3" = 0x04) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi515~ // Oracle END ELSE PATCH_IF ("i3" = 0x05) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi609~ // True Sight END END INSERT_BYTES ("eo" + (0x30 * "ni") + 0x00) 0x30 WRITE_ASCIIE ("eo" + (0x30 * "ni") + 0x00) ~%tm%~ WRITE_SHORT ("eo" + (0x30 * "ni") + 0x00) 0xdc WRITE_LONG ("eo" + (0x30 * "ni") + 0x04) 0x9 WRITE_LONG ("eo" + (0x30 * "ni") + 0x08) 0x3 WRITE_BYTE ("eo" + (0x30 * "ni") + 0x0c) 0x0 WRITE_LONG ("eo" + (0x30 * "ni") + 0x0e) 0x0 SET "ni" += ("ec" + "ne") END END COPY_EXISTING ~spwi593.spl~ ~override~ // Immunity: Enchantment PATCH_IF (SOURCE_SIZE > 0x71) THEN BEGIN READ_LONG 0x64 "ho" // extended header offset READ_SHORT 0x68 "hc" // extended header count READ_LONG 0x6a "eo" // effects offset READ_SHORT 0x6e "gi" // index to global effects (better be zero!) READ_SHORT 0x70 "gc" // count of global effects SET "ni" = ("gi" + "gc") // ni is new effects index for each header SET "ne" = 0x03 // ne is number of effects to be added FOR ("i1" = "ho"; "i1" < ("ho" + (0x28 * "hc")); "i1" += 0x28) BEGIN READ_SHORT ("i1" + 0x1e) "ec" // current count of effects this header WRITE_SHORT ("i1" + 0x1e) ("ec" + "ne") // correcting effect count for this header WRITE_SHORT ("i1" + 0x20) "ni" // correcting effect index for this header FOR ("i2" = ("eo" + (0x30 * "ni")); "i2" < ("eo" + (0x30 * ("ni" + "ec"))); "i2" += 0x30) BEGIN READ_SHORT "i2" "op" // look for spell school immunity opcode PATCH_IF ("op" = 0xcc) THEN BEGIN READ_ASCII "i2" ~tm~ (0x30) // read off the whole effect as a template SET "i2" = ("eo" + (0x30 * ("ni" + "ec"))) // end loop once it's found END // PATCH_IF opcode found END // FOR i2, opcode search INNER_PATCH_SAVE ~tm~ ~%tm%~ BEGIN // patch the template to use specific spell immunity WRITE_SHORT 0x00 0xce WRITE_LONG 0x04 0xffffffff WRITE_LONG 0x08 0x0 END // INNER_PATCH_SAVE, patching template INSERT_BYTES ("eo" + (0x30 * ("ni" + "ec"))) (0x30 * ("ne" - 0x1)) // insert space for new effects at the end of effects block FOR ("i3" = 0x0; "i3" < ("ne" - 0x1); "i3" += 0x1) BEGIN WRITE_ASCIIE ("eo" + (0x30 * ("ni" + "ec" + "i3"))) ~%tm%~ // write modified template PATCH_IF ("i3" = 0x00) THEN BEGIN // add resref for spell to which we're immune WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr406~ // Defensive Harmony END ELSE PATCH_IF ("i3" = 0x01) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi107~ // Friends END END // FOR i3, inserting specific spell immunities INSERT_BYTES ("eo" + (0x30 * "ni") + 0x00) 0x30 // adding one last effect at the beginning WRITE_ASCIIE ("eo" + (0x30 * "ni") + 0x00) ~%tm%~ WRITE_SHORT ("eo" + (0x30 * "ni") + 0x00) 0xdc // dispel by spell school (to remove already cast effects) WRITE_LONG ("eo" + (0x30 * "ni") + 0x04) 0x9 WRITE_LONG ("eo" + (0x30 * "ni") + 0x08) 0x4 WRITE_BYTE ("eo" + (0x30 * "ni") + 0x0c) 0x0 WRITE_LONG ("eo" + (0x30 * "ni") + 0x0e) 0x0 SET "ni" += ("ec" + "ne") // set effect index for next extended header END // FOR i1, extended header loop END // PATCH_IF filesize sanity check/NO_IF_EVAL_BUG emulator // skipping BUT_ONLY as it will never do anything here Link to comment
Guest Guest_Nythrun_* Posted January 10, 2007 Share Posted January 10, 2007 COPY_EXISTING ~spwi594.spl~ ~override~ // Immunity: Illusion PATCH_IF (SOURCE_SIZE > 0x71) THEN BEGIN READ_LONG 0x64 "ho" READ_SHORT 0x68 "hc" READ_LONG 0x6a "eo" READ_SHORT 0x6e "gi" READ_SHORT 0x70 "gc" SET "ni" = ("gi" + "gc") SET "ne" = 0x0b FOR ("i1" = "ho"; "i1" < ("ho" + (0x28 * "hc")); "i1" += 0x28) BEGIN READ_SHORT ("i1" + 0x1e) "ec" WRITE_SHORT ("i1" + 0x1e) ("ec" + "ne") WRITE_SHORT ("i1" + 0x20) "ni" FOR ("i2" = ("eo" + (0x30 * "ni")); "i2" < ("eo" + (0x30 * ("ni" + "ec"))); "i2" += 0x30) BEGIN READ_SHORT "i2" "op" PATCH_IF ("op" = 0xcc) THEN BEGIN READ_ASCII "i2" ~tm~ (0x30) SET "i2" = ("eo" + (0x30 * ("ni" + "ec"))) END END INNER_PATCH_SAVE ~tm~ ~%tm%~ BEGIN WRITE_SHORT 0x00 0xce WRITE_LONG 0x04 0xffffffff WRITE_LONG 0x08 0x0 END INSERT_BYTES ("eo" + (0x30 * ("ni" + "ec"))) (0x30 * ("ne" - 0x1)) FOR ("i3" = 0x0; "i3" < ("ne" - 0x1); "i3" += 0x1) BEGIN WRITE_ASCIIE ("eo" + (0x30 * ("ni" + "ec" + "i3"))) ~%tm%~ PATCH_IF ("i3" = 0x00) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr516~ // Pixie Dust END ELSE PATCH_IF ("i3" = 0x01) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr704~ // Nature's Beauty END ELSE PATCH_IF ("i3" = 0x02) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi120~ // Reflected Image END ELSE PATCH_IF ("i3" = 0x03) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi201~ // Blur END ELSE PATCH_IF ("i3" = 0x04) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi212~ // Mirror Image END ELSE PATCH_IF ("i3" = 0x05) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi307~ // Invisibility 10' Radius END ELSE PATCH_IF ("i3" = 0x06) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi505~ // Shadow Door END ELSE PATCH_IF ("i3" = 0x07) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi607~ // Mislead END ELSE PATCH_IF ("i3" = 0x08) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi703~ // Project Image END ELSE PATCH_IF ("i3" = 0x09) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi804~ // Simulacrum END END INSERT_BYTES ("eo" + (0x30 * "ni") + 0x00) 0x30 WRITE_ASCIIE ("eo" + (0x30 * "ni") + 0x00) ~%tm%~ WRITE_SHORT ("eo" + (0x30 * "ni") + 0x00) 0xdc WRITE_LONG ("eo" + (0x30 * "ni") + 0x04) 0x9 WRITE_LONG ("eo" + (0x30 * "ni") + 0x08) 0x5 WRITE_BYTE ("eo" + (0x30 * "ni") + 0x0c) 0x0 WRITE_LONG ("eo" + (0x30 * "ni") + 0x0e) 0x0 SET "ni" += ("ec" + "ne") END END COPY_EXISTING ~spwi595.spl~ ~override~ // Immunity: Evocation PATCH_IF (SOURCE_SIZE > 0x71) THEN BEGIN READ_LONG 0x64 "ho" READ_SHORT 0x68 "hc" READ_LONG 0x6a "eo" READ_SHORT 0x6e "gi" READ_SHORT 0x70 "gc" SET "ni" = ("gi" + "gc") SET "ne" = 0x17 FOR ("i1" = "ho"; "i1" < ("ho" + (0x28 * "hc")); "i1" += 0x28) BEGIN READ_SHORT ("i1" + 0x1e) "ec" WRITE_SHORT ("i1" + 0x1e) ("ec" + "ne") WRITE_SHORT ("i1" + 0x20) "ni" FOR ("i2" = ("eo" + (0x30 * "ni")); "i2" < ("eo" + (0x30 * ("ni" + "ec"))); "i2" += 0x30) BEGIN READ_SHORT "i2" "op" PATCH_IF ("op" = 0xcc) THEN BEGIN READ_ASCII "i2" ~tm~ (0x30) SET "i2" = ("eo" + (0x30 * ("ni" + "ec"))) END END INNER_PATCH_SAVE ~tm~ ~%tm%~ BEGIN WRITE_SHORT 0x00 0xce WRITE_LONG 0x04 0xffffffff WRITE_LONG 0x08 0x0 END INSERT_BYTES ("eo" + (0x30 * ("ni" + "ec"))) (0x30 * ("ne" - 0x1)) FOR ("i3" = 0x0; "i3" < ("ne" - 0x1); "i3" += 0x1) BEGIN WRITE_ASCIIE ("eo" + (0x30 * ("ni" + "ec" + "i3"))) ~%tm%~ PATCH_IF ("i3" = 0x00) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi911~ // Meteor Swarm END ELSE PATCH_IF ("i3" = 0x01) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi810~ // Incendiary Cloud END ELSE PATCH_IF ("i3" = 0x02) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi712~ // Delayed Blast Fireball END ELSE PATCH_IF ("i3" = 0x03) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi614~ // Death Fog END ELSE PATCH_IF ("i3" = 0x04) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr214~ // Draw Upon Holy Might END ELSE PATCH_IF ("i3" = 0x05) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr412~ // Holy Power END ELSE PATCH_IF ("i3" = 0x06) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr603~ // Blade Barrier END ELSE PATCH_IF ("i3" = 0x07) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi502~ // Cloud Kill END ELSE PATCH_IF ("i3" = 0x08) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr707~ // Sunray END ELSE PATCH_IF ("i3" = 0x09) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi114~ // Shield END ELSE PATCH_IF ("i3" = 0x0a) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi325~ // Melf's Minute Meteors END ELSE PATCH_IF ("i3" = 0x0b) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi403~ // Fire Shield (Blue) END ELSE PATCH_IF ("i3" = 0x0c) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi418~ // Fire Shield (Red) END ELSE PATCH_IF ("i3" = 0x0d) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi420~ // Minor Sequencer END ELSE PATCH_IF ("i3" = 0x0e) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi215~ // Stinking Cloud END ELSE PATCH_IF ("i3" = 0x0f) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi523~ // Sunfire END ELSE PATCH_IF ("i3" = 0x10) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi710~ // Spell Sequencer END ELSE PATCH_IF ("i3" = 0x11) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi213~ // Web END ELSE PATCH_IF ("i3" = 0x12) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi809~ // Spell Trigger END ELSE PATCH_IF ("i3" = 0x13) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi915~ // Black Blade of Disaster END ELSE PATCH_IF ("i3" = 0x14) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr603d~ // Blade Barrier END ELSE PATCH_IF ("i3" = 0x15) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr705~ // Fire Storm END END INSERT_BYTES ("eo" + (0x30 * "ni") + 0x00) 0x30 WRITE_ASCIIE ("eo" + (0x30 * "ni") + 0x00) ~%tm%~ WRITE_SHORT ("eo" + (0x30 * "ni") + 0x00) 0xdc WRITE_LONG ("eo" + (0x30 * "ni") + 0x04) 0x9 WRITE_LONG ("eo" + (0x30 * "ni") + 0x08) 0x6 WRITE_BYTE ("eo" + (0x30 * "ni") + 0x0c) 0x0 WRITE_LONG ("eo" + (0x30 * "ni") + 0x0e) 0x0 SET "ni" += ("ec" + "ne") END END COPY_EXISTING ~spwi596.spl~ ~override~ // Immunity: Necromancy PATCH_IF (SOURCE_SIZE > 0x71) THEN BEGIN READ_LONG 0x64 "ho" READ_SHORT 0x68 "hc" READ_LONG 0x6a "eo" READ_SHORT 0x6e "gi" READ_SHORT 0x70 "gc" SET "ni" = ("gi" + "gc") SET "ne" = 0x06 FOR ("i1" = "ho"; "i1" < ("ho" + (0x28 * "hc")); "i1" += 0x28) BEGIN READ_SHORT ("i1" + 0x1e) "ec" WRITE_SHORT ("i1" + 0x1e) ("ec" + "ne") WRITE_SHORT ("i1" + 0x20) "ni" FOR ("i2" = ("eo" + (0x30 * "ni")); "i2" < ("eo" + (0x30 * ("ni" + "ec"))); "i2" += 0x30) BEGIN READ_SHORT "i2" "op" PATCH_IF ("op" = 0xcc) THEN BEGIN READ_ASCII "i2" ~tm~ (0x30) SET "i2" = ("eo" + (0x30 * ("ni" + "ec"))) END END INNER_PATCH_SAVE ~tm~ ~%tm%~ BEGIN WRITE_SHORT 0x00 0xce WRITE_LONG 0x04 0xffffffff WRITE_LONG 0x08 0x0 END INSERT_BYTES ("eo" + (0x30 * ("ni" + "ec"))) (0x30 * ("ne" - 0x1)) FOR ("i3" = 0x0; "i3" < ("ne" - 0x1); "i3" += 0x1) BEGIN WRITE_ASCIIE ("eo" + (0x30 * ("ni" + "ec" + "i3"))) ~%tm%~ PATCH_IF ("i3" = 0x00) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr313~ // Holy Smite END ELSE PATCH_IF ("i3" = 0x01) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr314~ // Unholy Blight END ELSE PATCH_IF ("i3" = 0x02) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr514~ // Mass Cure END ELSE PATCH_IF ("i3" = 0x03) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr713~ // Greater Restoration END ELSE PATCH_IF ("i3" = 0x04) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi313~ // Skull Trap END END INSERT_BYTES ("eo" + (0x30 * "ni") + 0x00) 0x30 WRITE_ASCIIE ("eo" + (0x30 * "ni") + 0x00) ~%tm%~ WRITE_SHORT ("eo" + (0x30 * "ni") + 0x00) 0xdc WRITE_LONG ("eo" + (0x30 * "ni") + 0x04) 0x9 WRITE_LONG ("eo" + (0x30 * "ni") + 0x08) 0x7 WRITE_BYTE ("eo" + (0x30 * "ni") + 0x0c) 0x0 WRITE_LONG ("eo" + (0x30 * "ni") + 0x0e) 0x0 SET "ni" += ("ec" + "ne") END END COPY_EXISTING ~spwi597.spl~ ~override~ // Immunity: Alteration PATCH_IF (SOURCE_SIZE > 0x71) THEN BEGIN READ_LONG 0x64 "ho" READ_SHORT 0x68 "hc" READ_LONG 0x6a "eo" READ_SHORT 0x6e "gi" READ_SHORT 0x70 "gc" SET "ni" = ("gi" + "gc") SET "ne" = 0x0f FOR ("i1" = "ho"; "i1" < ("ho" + (0x28 * "hc")); "i1" += 0x28) BEGIN READ_SHORT ("i1" + 0x1e) "ec" WRITE_SHORT ("i1" + 0x1e) ("ec" + "ne") WRITE_SHORT ("i1" + 0x20) "ni" FOR ("i2" = ("eo" + (0x30 * "ni")); "i2" < ("eo" + (0x30 * ("ni" + "ec"))); "i2" += 0x30) BEGIN READ_SHORT "i2" "op" PATCH_IF ("op" = 0xcc) THEN BEGIN READ_ASCII "i2" ~tm~ (0x30) SET "i2" = ("eo" + (0x30 * ("ni" + "ec"))) END END INNER_PATCH_SAVE ~tm~ ~%tm%~ BEGIN WRITE_SHORT 0x00 0xce WRITE_LONG 0x04 0xffffffff WRITE_LONG 0x08 0x0 END INSERT_BYTES ("eo" + (0x30 * ("ni" + "ec"))) (0x30 * ("ne" - 0x1)) FOR ("i3" = 0x0; "i3" < ("ne" - 0x1); "i3" += 0x1) BEGIN WRITE_ASCIIE ("eo" + (0x30 * ("ni" + "ec" + "i3"))) ~%tm%~ PATCH_IF ("i3" = 0x00) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr312~ // Strength of One END ELSE PATCH_IF ("i3" = 0x01) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr506~ // Iron Skins END ELSE PATCH_IF ("i3" = 0x02) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr513~ // Righteous Magic END ELSE PATCH_IF ("i3" = 0x03) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr611~ // Wondrous Recall END ELSE PATCH_IF ("i3" = 0x04) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr613~ // Physical Mirror END ELSE PATCH_IF ("i3" = 0x05) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi219~ // Vocalize END ELSE PATCH_IF ("i3" = 0x06) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi408~ // Stoneskin END ELSE PATCH_IF ("i3" = 0x07) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi416~ // Polymorph Self END ELSE PATCH_IF ("i3" = 0x08) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi603~ // Tenser's Transformation END ELSE PATCH_IF ("i3" = 0x09) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~spwi916~ // Shapechange END ELSE PATCH_IF ("i3" = 0x0a) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr105~ // Entangle END ELSE PATCH_IF ("i3" = 0x0b) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr211~ // Silence 15' Radius END ELSE PATCH_IF ("i3" = 0x0c) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr302~ // Call Lightning END ELSE PATCH_IF ("i3" = 0x0d) THEN BEGIN WRITE_ASCIIT ("eo" + (0x30 * ("ni" + "ec" + "i3")) + 0x14) ~sppr304~ // Glyph of Warding END END INSERT_BYTES ("eo" + (0x30 * "ni") + 0x00) 0x30 WRITE_ASCIIE ("eo" + (0x30 * "ni") + 0x00) ~%tm%~ WRITE_SHORT ("eo" + (0x30 * "ni") + 0x00) 0xdc WRITE_LONG ("eo" + (0x30 * "ni") + 0x04) 0x9 WRITE_LONG ("eo" + (0x30 * "ni") + 0x08) 0x8 WRITE_BYTE ("eo" + (0x30 * "ni") + 0x0c) 0x0 WRITE_LONG ("eo" + (0x30 * "ni") + 0x0e) 0x0 SET "ni" += ("ec" + "ne") END END Link to comment
Recommended Posts
Archived
This topic is now archived and is closed to further replies.