Jump to content

'Spell Immunity: Evocation' is broken?


cameltoe

Recommended Posts

Guest Guest_Nythrun_*

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_*
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

Archived

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

×
×
  • Create New...