Jump to content

Something less important related to the "speculative script fixes" in the Fixpack


Roana

Recommended Posts

Hello ;),

 

By searching something related to spells, I stumbled accidently over something related to the "speculative script fixes" section of the fixpack, that might be interesting for you too:).

 

As I found a spell named "Lower Poison Resistance" (which I didn't have searched in this moment), I remembered, that I have read this in the TP2 of Fixpack Beta 4. A quick search in this file lead me to this:

 

// in between dragon fear and a wing buffet--per other dragon AI, should be lowering specific resistances to breath attack, but nothing to reduce poison resistance

COPY_EXISTING ~draggre2.bcs~ ~override~

~draggree.bcs~ ~override~

DECOMPILE_BCS_TO_BAF

REPLACE_TEXTUALLY ~ReallyForceSpell(NearestEnemyOf(Myself),0)~ ~~

COMPILE_BAF_TO_BCS

BUT_ONLY_IF_IT_CHANGES

 

Well, a spell, that lower the poison resistance exists, but was not listed in the Spell.IDS. It is the SPIN530.SPL :D.

 

I have added it in this way to my Spell.IDS:

 

3530 DRAGON_LOWER_POISON_RESISTANCE

(although you might prefer another name for this, because mine is very long)

 

and then corrected the two above mentioned scripts for the dragon.

 

Just wanted to inform you :D

 

Regards

 

Roana

Link to comment

Not really. The persistent effects break everything. I would have much preferred all poison damage, but I guess it doesn't have the appeal of 3 damage per second for 30 seconds OMGOMG! :D

 

I'm sure they would have changed the behavior if they felt it was worthwhile (but they were pretty good at avoiding resistable poison damage altogether, with only the ToB shield potentially affecting resistance in a negative fashion).

Link to comment

Someone should make a scimitar upgrade that does 1d8+4 +90 poison damage and see if that appears excessive to anyone.

 

Anyway, that reminds me: there are twenty-six items that grant immunity to the poison state and not the damage type, or vice versa, and Fixpack is only patching amul22.itm thus far (yes, I know the patsy ring isn't used ;) ) As people have the opportunity to sample and inflict both exciting flavors of poison, this ought to be corrected.

Link to comment

This might eve install ;)

COPY_EXISTING "amul22.itm"   "override" // Periapt of Proof Against Poison needs opcode 0xad
		  "barlfl.itm"   "override" // Flail (barl.cre) needs opcode 0xad
// (unused)   "bazpatrg.itm" "override" // (Ring) needs opcode 0xad
// (unneeded) "bhaalhp1.itm" "override" // (Belt for Abazigal, Sendai, Draconis) needs opcode 0xad
		  "bhaalimm.itm" "override" // (Belt for Balthazar) needs opcode 0xad
		  "demogorg.itm" "override" // (Demogorgon's Flail) needs opcode 0xad
		  "elemprin.itm" "override" // (Elemental Prince's Ring) needs opcode 0xad
		  "finmel01.itm" "override" // (Ammelyssan's Necklace) needs opcode 0xad
// (unneeded) "fsspir.itm"   "override" // (Helmite Ghost's Ring) needs opcode 0xad
// (notimmun) "helm31.itm"   "override" // Helm of the Rock needs opcode 0x65
// (notimmun) "helm32.itm"   "override" // Helm of the Rock (horny) needs opcode 0x65
		  "hgber01.itm"  "override" // (Berenn's Two-Handed Sword +1) needs opcode 0xad
// (unneeded) "imoenhp1.itm" "override" // Imoen's Belt needs opcode 0xad
		  "irongol.itm"  "override" // (Iron Golem's Ring) needs opcode 0xad
		  "mdog1.itm"	"override" // (Cerebus's/Aranthus's doggie ring) needs opcode 0xad
		  "mel01.itm"	"override" // (Ammelyssan's Imoen's Belt) needs opcode 0xad
// (unneeded) "minhp1.itm"   "override" // (Can't Die Necklace) needs opcode 0xad
		  "ravag03.itm"  "override" // (The Ravager's Necklace) needs opcode 0xad
		  "ring39.itm"   "override" // Ring of Gaxx needs opcode 0xad
// (unused)   "ring93.itm"   "override" // (Ring) needs opcode 0x65
// (unneeded) "sengua04.itm" "override" // (Slavemaster Necklace) needs opcode 0xad
		  "shararm.itm"  "override" // Darkmail +3 needs opcode 0xad (note: Poison Resistance is undocumented)
// (notimmun) "shld31.itm"   "override" // Darksteel Shield +4 needs opcode 0x65
// (unneeded) "surehp1.itm"  "override" // needs opcode 0xad
		  "sw1h34.itm"   "override" // Albruin +1 needs opcode 0xad
		  "tstatue.itm"  "override" // (Cutscene Statue Necklace) needs opcode 0xad
 PATCH_IF (%SOURCE_SIZE% > 0x71) THEN BEGIN
READ_LONG   0x64 "ho"
READ_SHORT  0x68 "hc"
READ_LONG   0x6a "eo"
READ_SHORT  0x70 "gc"
SET "poista" = 0x00
SET "poidam" = 0x00
FOR ("i1" = 0x00; "i1" < ("gc" * 0x30); "i1" += 0x30) BEGIN
  READ_SHORT  ("eo" + "i1" + 0x00) "op"
  READ_LONG   ("eo" + "i1" + 0x08) "p2"
  PATCH_IF (("op" = 0x65) AND ("p2" = 0x19)) THEN BEGIN
	SET "poista" = 0x01
	READ_ASCII ("eo" + "i1" + 0x00) "template" (0x30)
  END ELSE PATCH_IF ("op" = 0xad) THEN BEGIN
	SET "poidam" = 0x01
	READ_ASCII ("eo" + "i1" + 0x00) "template" (0x30)
  END
END
PATCH_IF		  (("poista" = 0x01) AND ("poidam" = 0x00)) THEN BEGIN
  WRITE_SHORT  0x70 ("gc" + 0x01)
  INSERT_BYTES  ("eo" + ("gc" * 0x30) + 0x00) 0x30
  WRITE_ASCIIE  ("eo" + ("gc" * 0x30) + 0x00) "%template%"
  WRITE_SHORT   ("eo" + ("gc" * 0x30) + 0x00) 0xad // poison resistance
  WRITE_LONG	("eo" + ("gc" * 0x30) + 0x04) 0x64 // modifier: +100%
  WRITE_LONG	("eo" + ("gc" * 0x30) + 0x08) 0x00 // type: cumulative
  FOR ("i2" = 0x00; "i2" < ("hc" * 0x38); "i2" += 0x38) BEGIN
	READ_SHORT  ("ho" + "i2" + 0x20) "ei"
	WRITE_SHORT ("ho" + "i2" + 0x20) ("ei" + 0x01)
  END
END ELSE PATCH_IF (("poista" = 0x00) AND ("poidam" = 0x01)) THEN BEGIN
WRITE_SHORT  0x70 ("gc" + 0x01)
  INSERT_BYTES  ("eo" + ("gc" * 0x30) + 0x00) 0x30
  WRITE_ASCIIE  ("eo" + ("gc" * 0x30) + 0x00) "%template%"
  WRITE_SHORT   ("eo" + ("gc" * 0x30) + 0x00) 0x65 // immunity to effect
  WRITE_LONG	("eo" + ("gc" * 0x30) + 0x04) 0x00 // unused
  WRITE_LONG	("eo" + ("gc" * 0x30) + 0x08) 0x19 // state: poison
  FOR ("i2" = 0x00; "i2" < ("hc" * 0x38); "i2" += 0x38) BEGIN
	READ_SHORT  ("ho" + "i2" + 0x20) "ei"
	WRITE_SHORT ("ho" + "i2" + 0x20) ("ei" + 0x01)
  END
END
 END
BUT_ONLY_IF_IT_CHANGES

Link to comment

I already made a list for this somewhere (use the search, people!). You don't need to patch minhp1 items or the bonus immunities given only to one minhp creature (you can't kill them, and they shouldn't have spurious damage immunities just because they can't die), and we need to figure out who actually deserves immunity to poison damage in addition to the poison immunity.

 

AMUL22, BARLFL (hooray, Talona!), IRONGOL (if they also have acid immunity), and RING39 should be safe. Kish didn't have a problem with this patch in general, though, so it's not a big deal.

 

But I could have sworn Cam already coded these up.

Link to comment

Takes longer to use the search than it does to repopulate the list, but here it is. One of the things that slipped through the cracks it would appear, as there isn't any code in that post, nor in the fixpack, that addresses this.

Item, Immunity to poison, Reduced damage from poison
AMUL22.ITM, 1, 0 // update
BARLFL.ITM, 1, 0 // update, 'cause Barl's o-so-tough
BHAALHP1.ITM, 1, 0 // no update
BHAALIMM.ITM, 1, 0 // no update
DEMOGORG.ITM, 1, 0 // no update (has minhp1 anyway)
DRAKRING.ITM, 0, 1 // no update (DG tougher stuff)
ELEMPRIN.ITM, 1, 0 // update (I guess they're supposed to be immune to poison?)
FINMEL01.ITM, 1, 0 // no update (has minimum HP)
FSSPIR.ITM, 1, 0 // no update (has INVULNER)
HELM31.ITM, 0, 1 // no update (grants resistance only)
HELM32.ITM, 0, 1 // no update (grants resistance only)
HGBER01.ITM, 1, 0 // update (although, why he gets immunities, I have no idea)
IMOENHP1.ITM, 1, 0 // no update
IRONGOL.ITM, 1, 0 // probably update (have to check if they're naturally resistant to acid too)
MDOG1.ITM, 1, 0 // don't know, don't care
MEL01.ITM, 1, 0 // no update
MINHP1.ITM, 1, 0 // no update
RAVAG03.ITM, 1, 0 // no update (I don't think)?
RING39.ITM, 1, 0 // update
RING93.ITM, 0, 1 // no update (unused)
SCRL08.ITM, 1, 0 // update
SENGUA04.ITM, 1, 0 // no update (has minimum HP)
SHARARM.ITM, 1, 0 // no update (has ringdemn)
SHLD31.ITM, 0, 1 // no update (grants resistance only)
SUREHP1.ITM, 1, 0 // no update
SW1H34.ITM, 1, 0 // update (unused, but everybody restores)
TSTATUE.ITM, 1, 0// no update (has minimum HP)

 

"amul22.itm" agreed on update.

"barlfl.itm" agreed on update

"bazpatrg.itm" agreed on no update

"bhaalhp1.itm" agreed on no update

"elemprin.itm" agreed on update

"fsspir.itm" agreed no update

"helm31.itm" agreed no update

"helm32.itm" agreed no update

"hgber01.itm" agreed update

"imoenhp1.itm" agreed no update

"irongol.itm" agreed update

"minhp1.itm" agreed no update

"ring39.itm" agreed update

"ring93.itm" agreed no update

"sengua04.itm" agreed no update

"shld31.itm" agreed no update

"surehp1.itm" agreed no update

"sw1h34.itm" agreed update

"tstatue.itm" agreed no update, I'd written that this was cutscene only anyway and forgot the double slash

 

Leaves disagreements on the following:

 

"bhaalimm.itm" Balthazar is monk without immunity to poison damage, I say change it.

"demogorg.itm" I think demogor2.cre is meant to be immune to poison and the flail isn't the minhp item anyway

"finmel01.itm" finmel01.cre, debateable whether or not a demigoddess gets ill from lukewarm pork.

"mdog1.itm" I say update, devSin says doesn't care.

"mel01.itm" mel01.cre, I'm okay with skipping this one, patching it accomplishes nothing.

"ravag03.itm" Why immune to the state and not the damage type? No minhp effect here.

"shararm.itm" gorwom06.cre (Xei Win Toh) Darkmail mark two. Again, no minhp effects.

Link to comment

tstatue.itm -> actually, the statues have it forevarz once you've saved Trademeet. Oh, yes, heroes, most excellent work.

 

balthazar -> fine

demogorg -> minhp1

finmel01 -> minhp1

mdog1 -> go, moon dog! whatever

mel01 -> you don't ever kill her

ravag03 -> I don't remember

shararm -> I don't remember

 

I traditionally say what's wrong and then let Cam do the actual work. Also, my data files are significantly different than the default files, so it's often the case where my list will be incomplete (simply because I've already changed mine).

Link to comment

I do apologize if I'm monkeywrenching a system that's (obviously) been working well for some time now.

 

Thanks for recommending the thread anyway, portrait icons needed a bit of sorting ;)

 

I don't think scrl08 needs changing, but spells should probably get the once-over too.

 

COPY_EXISTING ~amul22.itm~   ~override~ // Periapt of Proof Against Poison
		  ~barlfl.itm~   ~override~ // Flail (barl.cre)
// (unused)   ~bazpatrg.itm~ ~override~ // (Ring)
// (unneeded) ~bhaalhp1.itm~ ~override~ // (Belt for Abazigal, Sendai, Draconis)
		  ~bhaalimm.itm~ ~override~ // (Belt for Balthazar)
		  ~demogorg.itm~ ~override~ // (Demogorgon's Flail)
		  ~elemprin.itm~ ~override~ // (Elemental Prince's Ring)
		  ~finmel01.itm~ ~override~ // (Ammelyssan's Necklace)
// (unneeded) ~fsspir.itm~   ~override~ // (Helmite Ghost's Ring)
		  ~helm30.itm~   ~override~ // Thieves' Hood
// (notimmun) ~helm31.itm~   ~override~ // Helm of the Rock
// (notimmun) ~helm32.itm~   ~override~ // Helm of the Rock (horny)
		  ~hgber01.itm~  ~override~ // (Berenn's Two-Handed Sword +1)
// (unneeded) ~imoenhp1.itm~ ~override~ // Imoen's Belt
		  ~irongol.itm~  ~override~ // (Iron Golem's Ring)
		  ~mdog1.itm~	~override~ // (Cerebus's/Aranthus's doggie ring)
// (unneeded) ~mel01.itm~	~override~ // (Melissan's Imoen's Belt)
// (unneeded) ~minhp1.itm~   ~override~ // (Can't Die Necklace)
		  ~ravag03.itm~  ~override~ // (The Ravager's Necklace)
		  ~ring39.itm~   ~override~ // Ring of Gaxx
		  ~ring46.itm~   ~override~ // Ring of Anti-Venom
// (unused)   ~ring93.itm~   ~override~ // (Ring)
		  ~scrl08.itm~   ~override~ // Protection from Poison (Scroll)
// (unneeded) ~sengua04.itm~ ~override~ // (Slavemaster Necklace)
		  ~shararm.itm~  ~override~ // Darkmail +3 (Xei Win Toh)
// (notimmun) ~shld31.itm~   ~override~ // Darksteel Shield +4
// (unneeded) ~surehp1.itm~  ~override~ // (Ring for Yaga-Shura)
		  ~sw1h34.itm~   ~override~ // Albruin
// (unneeded) ~tstatue.itm~  ~override~ // (Cutscene Statue Necklace)
 PATCH_IF (%SOURCE_SIZE% > 0x71) THEN BEGIN
READ_LONG   0x64 "ho"
READ_SHORT  0x68 "hc"
READ_LONG   0x6a "eo"
FOR ("i1" = 0x00; "i1" < (("hc" + 0x01) * 0x38); "i1" += 0x38) BEGIN
  SET "poista" = 0x00
  SET "poidam" = 0x00
  SET "poiico" = 0x00
  SET "bleico" = 0x00
  PATCH_IF		  ("i1" < ("hc" * 0x38)) THEN BEGIN
	READ_SHORT ("ho" + "i1" + 0x1e) "ec"
	READ_SHORT ("ho" + "i1" + 0x20) "ei"
  END ELSE PATCH_IF ("i1" = ("hc" * 0x38)) THEN BEGIN
	READ_SHORT 0x6e "ei"
	READ_SHORT 0x70 "ec"
  END
  FOR ("i2" = ("ei" * 0x30); "i2" < (("ei" + "ec") * 0x30); "i2" += 0x30) BEGIN
	READ_SHORT  ("eo" + "i2" + 0x00) "op"
	READ_LONG   ("eo" + "i2" + 0x04) "p1"
	READ_LONG   ("eo" + "i2" + 0x08) "p2"
	PATCH_IF		  (("op" = 0x65) AND ("p2" = 0x19)) THEN BEGIN
	  SET "poista" = 0x01
	  READ_ASCII ("eo" + "i2" + 0x00) "template" (0x30)
	END ELSE PATCH_IF (("op" = 0xad) AND ("p1" = 0x64)) THEN BEGIN
	  SET "poidam" = 0x01
	  READ_ASCII ("eo" + "i2" + 0x00) "template" (0x30)
	END ELSE PATCH_IF (("op" = 0xa9) AND ("p2" = 0x06)) THEN BEGIN
	  SET "poiico" = 0x01
	END ELSE PATCH_IF (("op" = 0xa9) AND ("p2" = 0x89)) THEN BEGIN
	  SET "bleico" = 0x01
	END
  END
  PATCH_IF (("poista" = 0x01) AND ("poidam" = 0x00)) THEN BEGIN
	INSERT_BYTES  ("eo" + "i2" + 0x00) 0x30
	WRITE_ASCIIE  ("eo" + "i2" + 0x00) "%template%"
	WRITE_SHORT   ("eo" + "i2" + 0x00) 0xad // poison resistance
	WRITE_LONG	("eo" + "i2" + 0x04) 0x64 // modifier: +100%
	WRITE_LONG	("eo" + "i2" + 0x08) 0x00 // type: cumulative
	PATCH_IF	  ("i1" < ("hc" * 0x38)) THEN BEGIN
	  READ_SHORT  ("ho" + "i1" + 0x1e) "ec"
	  WRITE_SHORT ("ho" + "i1" + 0x1e) ("ec" + 0x01)
	  FOR ("i3" = ("i1" + 0x38); "i3" < ("hc" * 0x38); "i3" += 0x38) BEGIN
		READ_SHORT  ("ho" + "i3" + 0x20) "ei"
		WRITE_SHORT ("ho" + "i3" + 0x20) ("ei" + 0x01)
	  END
	END ELSE PATCH_IF ("i1" = ("hc" * 0x38)) THEN BEGIN
	  READ_SHORT  0x70 "ec"
	  WRITE_SHORT 0x70 ("ec" + 0x01)
	  FOR ("i3" = 0x00; "i3" < ("hc" * 0x38); "i3" += 0x38) BEGIN
		READ_SHORT  ("ho" + "i3" + 0x20) "ei"
		WRITE_SHORT ("ho" + "i3" + 0x20) ("ei" + 0x01)
	  END
	END
  END
  PATCH_IF (("poista" = 0x00) AND ("poidam" = 0x01)) THEN BEGIN
	INSERT_BYTES  ("eo" + ("gc" * 0x30) + 0x00) 0x30
	WRITE_ASCIIE  ("eo" + ("gc" * 0x30) + 0x00) "%template%"
	WRITE_SHORT   ("eo" + ("gc" * 0x30) + 0x00) 0x65 // immunity to effect
	WRITE_LONG	("eo" + ("gc" * 0x30) + 0x04) 0x00 // unused
	WRITE_LONG	("eo" + ("gc" * 0x30) + 0x08) 0x19 // state: poison
	PATCH_IF	  ("i1" < ("hc" * 0x38)) THEN BEGIN
	  READ_SHORT  ("ho" + "i1" + 0x1e) "ec"
	  WRITE_SHORT ("ho" + "i1" + 0x1e) ("ec" + 0x01)
	  FOR ("i3" = ("i1" + 0x38); "i3" < ("hc" * 0x38); "i3" += 0x38) BEGIN
		READ_SHORT  ("ho" + "i3" + 0x20) "ei"
		WRITE_SHORT ("ho" + "i3" + 0x20) ("ei" + 0x01)
	  END
	END ELSE PATCH_IF ("i1" = ("hc" * 0x38)) THEN BEGIN
	  READ_SHORT  0x70 "gc"
	  WRITE_SHORT 0x70 ("ec" + 0x01)
	  FOR ("i3" = 0x00; "i3" < ("hc" * 0x38); "i3" += 0x38) BEGIN
		READ_SHORT  ("ho" + "i3" + 0x20) "ei"
		WRITE_SHORT ("ho" + "i3" + 0x20) ("ei" + 0x01)
	  END
	END
  END
  PATCH_IF ((("poista" = 0x01) OR ("poidam" = 0x01))	   AND
			 ("poiico" = 0x00)							 AND
			(("%SOURCE_RES%" STRING_EQUAL_CASE "amul22")   OR
			 ("%SOURCE_RES%" STRING_EQUAL_CASE "helm30")   OR
			 ("%SOURCE_RES%" STRING_EQUAL_CASE "irongol")  OR
			 ("%SOURCE_RES%" STRING_EQUAL_CASE "ring39")   OR
			 ("%SOURCE_RES%" STRING_EQUAL_CASE "ring46")   OR
			 ("%SOURCE_RES%" STRING_EQUAL_CASE "scrl08")   OR
			 ("%SOURCE_RES%" STRING_EQUAL_CASE "sw1h34"))) THEN BEGIN
	INSERT_BYTES  ("eo" + ("ec" * 0x30) + 0x00) 0x30
	WRITE_ASCIIE  ("eo" + ("ec" * 0x30) + 0x00) "%template%"
	WRITE_SHORT   ("eo" + ("ec" * 0x30) + 0x00) 0xa9 // immunity to portrait icon
	WRITE_LONG	("eo" + ("ec" * 0x30) + 0x04) 0x00 // unused
	WRITE_LONG	("eo" + ("ec" * 0x30) + 0x08) 0x06 // icon: poisoned
	PATCH_IF	  ("i1" < ("hc" * 0x38)) THEN BEGIN
	  READ_SHORT  ("ho" + "i1" + 0x1e) "ec"
	  WRITE_SHORT ("ho" + "i1" + 0x1e) ("ec" + 0x01)
	  FOR ("i3" = ("i1" + 0x38); "i3" < ("hc" * 0x38); "i3" += 0x38) BEGIN
		READ_SHORT  ("ho" + "i3" + 0x20) "ei"
		WRITE_SHORT ("ho" + "i3" + 0x20) ("ei" + 0x01)
	  END
	END ELSE PATCH_IF ("i1" = ("hc" * 0x38)) THEN BEGIN
	  READ_SHORT  0x70 "ec"
	  WRITE_SHORT 0x70 ("ec" + 0x01)
	  FOR ("i3" = 0x00; "i3" < ("hc" * 0x38); "i3" += 0x38) BEGIN
		READ_SHORT  ("ho" + "i3" + 0x20) "ei"
		WRITE_SHORT ("ho" + "i3" + 0x20) ("ei" + 0x01)
	  END
	END
  END
  PATCH_IF ((("poista" = 0x01) OR ("poidam" = 0x01))	   AND
			 ("bleico" = 0x00)							 AND
			(("%SOURCE_RES%" STRING_EQUAL_CASE "amul22")   OR
			 ("%SOURCE_RES%" STRING_EQUAL_CASE "helm30")   OR
			 ("%SOURCE_RES%" STRING_EQUAL_CASE "irongol")  OR
			 ("%SOURCE_RES%" STRING_EQUAL_CASE "ring39")   OR
			 ("%SOURCE_RES%" STRING_EQUAL_CASE "ring46")   OR
			 ("%SOURCE_RES%" STRING_EQUAL_CASE "scrl08")   OR
			 ("%SOURCE_RES%" STRING_EQUAL_CASE "sw1h34"))) THEN BEGIN
	INSERT_BYTES  ("eo" + ("ec" * 0x30) + 0x00) 0x30
	WRITE_ASCIIE  ("eo" + ("ec" * 0x30) + 0x00) "%template%"
	WRITE_SHORT   ("eo" + ("ec" * 0x30) + 0x00) 0xa9 // immunity to portrait icon
	WRITE_LONG	("eo" + ("ec" * 0x30) + 0x04) 0x00 // unused
	WRITE_LONG	("eo" + ("ec" * 0x30) + 0x08) 0x89 // icon: bleeding
	PATCH_IF	  ("i1" < ("hc" * 0x38)) THEN BEGIN
	  READ_SHORT  ("ho" + "i1" + 0x1e) "ec"
	  WRITE_SHORT ("ho" + "i1" + 0x1e) ("ec" + 0x01)
	  FOR ("i3" = ("i1" + 0x38); "i3" < ("hc" * 0x38); "i3" += 0x38) BEGIN
		READ_SHORT  ("ho" + "i3" + 0x20) "ei"
		WRITE_SHORT ("ho" + "i3" + 0x20) ("ei" + 0x01)
	  END
	END ELSE PATCH_IF ("i1" = ("hc" * 0x38)) THEN BEGIN
	  READ_SHORT  0x70 "ec"
	  WRITE_SHORT 0x70 ("ec" + 0x01)
	  FOR ("i3" = 0x00; "i3" < ("hc" * 0x38); "i3" += 0x38) BEGIN
		READ_SHORT  ("ho" + "i3" + 0x20) "ei"
		WRITE_SHORT ("ho" + "i3" + 0x20) ("ei" + 0x01)
	  END
	END
  END
END
 END
BUT_ONLY_IF_IT_CHANGES

Link to comment

The decaying icon in Dolorous Decay doesn't allow a save, so it's probably intended to be part of the no-save slow.

COPY_EXISTING ~spcl221.spl~  ~override~ // Cavalier kit abilites
 //		  ~spcl415.spl~  ~override~ // Otiluke's Singularity Snare which still needs patching
		  ~spcl818.spl~  ~override~ // Monk Poison Immunity
		  ~spcl924.spl~  ~override~ // Druid Poison Immunity
 // (unused) ~spin853.spl~  ~override~ // (FORCE_SPHERE) Otiluke's Singularity Dupe
 //		   ~spwi413.spl~  ~override~ // Otiluke's Singularity which still needs patching
 // (unused) ~spwi853.spl~  ~override~ // Otiluke's Singularity Dupe
 PATCH_IF (%SOURCE_SIZE% > 0x71) THEN BEGIN
READ_LONG   0x64 "ho"
READ_SHORT  0x68 "hc"
READ_LONG   0x6a "eo"
READ_SHORT  0x70 "gc"
SET "poista" = 0x00
SET "poidam" = 0x00
SET "bleico" = 0x00
FOR ("i1" = 0x00; "i1" < ("hc" * 0x28); "i1" += 0x28) BEGIN
  READ_SHORT ("ho" + "i1" + 0x1e) "ec" ELSE 0
  READ_SHORT ("ho" + "i1" + 0x20) "ei" ELSE 0
  FOR ("i2" = ("ei" * 0x30); "i2" < (("ei" + "ec") * 0x30); "i2" += 0x30) BEGIN
	READ_SHORT   ("eo" + "i2" + 0x00) "op" ELSE 0
	READ_LONG	("eo" + "i2" + 0x08) "p1" ELSE 0
	READ_LONG	("eo" + "i2" + 0x08) "p2" ELSE 0
	PATCH_IF		  (("op" = 0x65) AND ("p2" = 0x19)) THEN BEGIN
	  SET "poista" = 0x01
	  READ_ASCII ("eo" + "i2" + 0x00) "template" (0x30)
	END ELSE PATCH_IF (("op" = 0xad) AND ("p1" = 0x64)) THEN BEGIN
	  SET "poidam" = 0x01
	END ELSE PATCH_IF (("op" = 0xa9) AND ("p2" = 0x89)) THEN BEGIN
	  SET "bleico" = 0x01
	END
	PATCH_IF (((("i2" + 0x30) = ("ei" + "ec") * 0x30)) AND (("poista" = 0x01) AND ("poidam" = 0x00)) THEN BEGIN
	  INSERT_BYTES  ("eo" + "i2" + 0x30) 0x30
	  WRITE_ASCIIE  ("eo" + "i2" + 0x30) "%template%"
	  WRITE_SHORT   ("eo" + "i2" + 0x00) 0xad // poison resistance
	  WRITE_LONG	("eo" + "i2" + 0x04) 0x64 // modifier: +100%
	  WRITE_LONG	("eo" + "i2" + 0x08) 0x00 // type: cumulative
	  FOR ("i3" = ("i1" + 0x28); "i3" < ("hc" * 0x28); "i3" += 0x28) BEGIN
		READ_SHORT  ("ho" + "i3" + 0x20) "ci"
		WRITE_SHORT ("ho" + "i3" + 0x20) ("ci" + 0x01)
	  END
	  SET "ec" += 0x01
	  WRITE_SHORT   ("ho" + "i1" + 0x1e) "ec"
	END
	PATCH_IF (((("i2" + 0x30) = ("ei" + "ec") * 0x30)) AND (("poista" = 0x01) AND ("bleico" = 0x00)) THEN BEGIN
	  INSERT_BYTES  ("eo" + "i2" + 0x30) 0x30
	  WRITE_ASCIIE  ("eo" + "i2" + 0x30) "%template%"
	  WRITE_SHORT   ("eo" + "i2" + 0x00) 0xa9 // immunity to portrait icon
	  WRITE_LONG	("eo" + "i2" + 0x04) 0x00 // unused
	  WRITE_LONG	("eo" + "i2" + 0x08) 0x89 // icon: bleeding
	  FOR ("i3" = ("i1" + 0x28); "i3" < ("hc" * 0x28); "i3" += 0x28) BEGIN
		READ_SHORT  ("ho" + "i3" + 0x20) "ci"
		WRITE_SHORT ("ho" + "i3" + 0x20) ("ci" + 0x01)
	  END
	  SET "ec" += 0x01
	  WRITE_SHORT   ("ho" + "i1" + 0x1e) "ec"
	END
  END
END
 END
BUT_ONLY_IF_IT_CHANGES

 

This thread is seriously hijacked.

Link to comment

So does poison.

 

And while the poison state and poison icon in sppr610 allow a save versus poison at -2, the slow, the slow icon, the vvc, the sound effects, and the decaying icon don't allow a save at all, which indicates to me that the decaying icon is part of a different effect bundle than the slow.

 

Unless you're arguing for specific spell protection here, of course - but I didn't think you were.

Link to comment

IIRC, the slow icon is implicit (it's hard-coded to the effect, which is what I meant by "its own icon"). I had a reason for having poison immunity protect from the decaying icon, but I don't remember what it is, and I don't want to look through the spell to see why. Sorry! :D

Link to comment

Archived

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

×
×
  • Create New...