Jump to content

Summon Insects, Insect Plague, and Creeping Doom


Recommended Posts

All of these spells have a miscast magic effect, but are lacking the miscast magic icon.

 

If it's decided that this is intended behaviour and Not A Bug , then the black dragon's Summon Insect ability (which incidentally is actually a duplicate of Creeping Doom :() *does* have the miscast magic icon, and it should therefore be removed for consistency..

Link to comment
All of these spells have a miscast magic effect, but are lacking the miscast magic icon.

 

If it's decided that this is intended behaviour and Not A Bug , then the black dragon's Summon Insect ability (which incidentally is actually a duplicate of Creeping Doom :() *does* have the miscast magic icon, and it should therefore be removed for consistency..

We should probably add the icon to Insect Swarm and Creeping Doom, then.

Link to comment

An incredible number of spells have miscast effects but no icons--including the Miscast Magic spell itself. At first I thought it might be hardcoded to the effect, but it really is missing.

 

// miscast effects not accompanied by miscast icon
COPY_EXISTING ~spcl132.spl~  ~override~
		  ~spin531.spl~  ~override~
		  ~spin550.spl~  ~override~
		  ~spin646.spl~  ~override~
		  ~spin689.spl~  ~override~
		  ~spin712.spl~  ~override~
		  ~spin731.spl~  ~override~
		  ~spin779.spl~  ~override~
		  ~spin992.spl~  ~override~
		  ~sppr310.spl~  ~override~
		  ~sppr319.spl~  ~override~
		  ~sppr517.spl~  ~override~
		  ~sppr717.spl~  ~override~
		  ~sppr986.spl~  ~override~
		  ~spwish30.spl~ ~override~
		  ~spwm128.spl~  ~override~
 READ_LONG  0x64 "abil_off" ELSE 0
 READ_SHORT 0x68 "abil_num" ELSE 0
 READ_LONG  0x6a "fx_off"   ELSE 0
 SET "new_fx_1" = 0
 SET "new_fx_2" = 0
 SET "delta" = 0
 FOR (index = 0; index < abil_num; index = index + 1) BEGIN
READ_SHORT ("%abil_off%" + 0x1e + (0x28 * "%index%")) "abil_fx_num"
READ_SHORT ("%abil_off%" + 0x20 + (0x28 * "%index%")) "abil_fx_idx"
SET "abil_fx_idx" = ("%delta%" + "%abil_fx_idx%")
WRITE_SHORT ("%abil_off%" + 0x20 + (0x28 * "%index%")) "%abil_fx_idx%"
FOR (index2 = 0; index2 < abil_fx_num; index2 = index2 + 1) BEGIN
  READ_SHORT ("%fx_off%" +		(0x30 * ("%abil_fx_idx%" + "%index2%"))) "opcode"
  READ_LONG  ("%fx_off%" + 0x08 + (0x30 * ("%abil_fx_idx%" + "%index2%"))) "icon"
  PATCH_IF ("%opcode%" = 60) BEGIN // entangle overlay
	READ_ASCII ("%fx_off%" +		(0x30 * ("%abil_fx_idx%" + "%index2%"))) "clone" (48)
	SET "new_fx_1" = 1
  END ELSE
  PATCH_IF (("%opcode%" = 142) AND ("%icon%" = 150)) BEGIN // display miscast icon
	SET "new_fx_2" = 1
  END
END
PATCH_IF (("%new_fx_1%" = 1) AND ("%new_fx_2%" = 0)) BEGIN // if miscast effect but no icon
  PATCH_PRINT "			  ~%SOURCE_FILE%~ ~override~"
  INSERT_BYTES			("%fx_off%" +		(0x30 * "%abil_fx_idx%")) 0x30		  // new effect
	WRITE_EVALUATED_ASCII ("%fx_off%" +		(0x30 * "%abil_fx_idx%")) "%clone%" #48 // clones miscast effect
	WRITE_SHORT		   ("%fx_off%" +		(0x30 * "%abil_fx_idx%")) 142		   // display portrait icon:
	WRITE_LONG			("%fx_off%" + 0x08 + (0x30 * "%abil_fx_idx%")) 105		   // entangled
  SET "delta" = "%delta%" + 1
  SET "abil_fx_num" = "%abil_fx_num%" + 1
END
WRITE_SHORT ("%abil_off%" + 0x1e + (0x28 * "%index%")) "%abil_fx_num%"
 END
 BUT_ONLY_IF_IT_CHANGES

Link to comment

Ah, beloved consistency. Of the 26 items and spells that cause miscast effects, a net total of four cause icons.

  • The black dragon's Summon Insects (spin689) is the only Miscast Magic icon; it causes a 100% miscast rate.
  • Two apparently unused spells (spcl132 and spcl801) and the Anti-Magic Zone of sahuagin priestesses (spin779) all cause Spell Failure icons and have respective miscast rates of 25%, 10%, and 100%.

So, the only two used spells with miscast effects both set them to 100% and use different icons.

Link to comment

OK, so Spell Failure is now being used when the miscast effect is 100%; otherwise it's the Miscast Magic icon. Seven items that cause miscast effects are not patched: boot10.itm (like armor, disables spellcasting so no icon), brac11.itm (already has cursed icon), clck04.itm (polymorph), ring04.itm (cursed icon), scrl07.itm (protection from magic), scrl12.itm (already has feeblemind icon), and wand09.itm (polymorph).

 

// miscast effects not accompanied by miscast icon
COPY_EXISTING ~ax1h07.itm~   ~override~ // 80% on hit, no icon
		  ~spcl132.spl~  ~override~ // 25%, spell failure icon
		  ~spin531.spl~  ~override~ // 90%, abazigal's shockwave
		  ~sppr310.spl~  ~override~ // 80%, no icon
		  ~sppr319.spl~  ~override~ // 50%, no icon
		  ~sppr986.spl~  ~override~ // 80%, no icon
		  ~spwish30.spl~ ~override~ // 80%, no icon
 PATCH_IF ("%SOURCE_FILE%" STRING_COMPARE_REGEXP "^.+\.spl$" = 0) BEGIN
SET "abil_length" = 0x28
READ_LONG  0x64 "abil_off" ELSE 0
READ_SHORT 0x68 "abil_num" ELSE 0
READ_LONG  0x6a "fx_off"   ELSE 0
READ_SHORT 0x70 "fx_num"   ELSE 0
SET "fx_type" = 0
 END ELSE
 PATCH_IF ("%SOURCE_FILE%" STRING_COMPARE_REGEXP "^.+\.itm$" = 0) BEGIN
SET "abil_length" = 0x38
READ_LONG  0x64 "abil_off" ELSE 0
READ_SHORT 0x68 "abil_num" ELSE 0
READ_LONG  0x6a "fx_off"   ELSE 0
READ_SHORT 0x70 "fx_num"   ELSE 0
SET "fx_type" = 0
 END ELSE
 PATCH_IF ("%SOURCE_FILE%" STRING_COMPARE_REGEXP "^.+\.cre$" = 0) BEGIN
SET "abil_length" = 0
SET "abil_off" = 0
SET "abil_num" = 0
READ_LONG  0x2c4 "fx_off"   ELSE 0
READ_LONG  0x2c8 "fx_num"   ELSE 0
READ_BYTE  0x33  "fx_type"
 END
 SET "new_fx_1" = 0
 SET "new_fx_2" = 0
 SET "delta" = 0
 FOR (index3 = 0; index3 < fx_num; index3 = index3 + 1) BEGIN
READ_SHORT ("%fx_off%" + ("%fx_type%" * 0x08) +		(0x30 * "%index3%")) "opcode"
READ_LONG  ("%fx_off%" + ("%fx_type%" * 0x10) + 0x08 + (0x30 * "%index3%")) "icon"
PATCH_IF ("%opcode%" = 60) BEGIN // miscast effect
  READ_ASCII ("%fx_off%" + ("%fx_type%" * 0x08) +		(0x30 * "%index3%")) "clone" (48 + (216 * "%fx_type%"))
  SET "new_fx_1" = 1
END ELSE
PATCH_IF (("%opcode%" = 142) AND ("%icon%" = 105)) BEGIN // display miscast icon
  SET "new_fx_2" = 1
END ELSE
PATCH_IF (("%opcode%" = 142) AND ("%icon%" = 83)) BEGIN // display spell failure icon
  WRITE_BYTE ("%fx_off%" + ("%fx_type%" * 0x08) + 0x12 + (0x30 * "%index3%")) 0 // 0% probability
END
 END
 PATCH_IF (("%new_fx_1%" = 1) AND ("%new_fx_2%" = 0)) BEGIN // if miscast effect but no icon
INSERT_BYTES			("%fx_off%") (0x30 + ("%fx_type%" * 0xa8))		 // new effect
  WRITE_EVALUATED_ASCII ("%fx_off%") "%clone%" // clones miscast effect
  WRITE_SHORT		   ("%fx_off%" + ("%fx_type%" * 0x08)	   ) 142	   // display portrait icon:
  WRITE_LONG			("%fx_off%" + ("%fx_type%" * 0x10) + 0x08) 105	   // miscast magic
SET "delta" = "%delta%" + 1
SET "fx_num" = "%fx_num%" + 1
 END
 WRITE_SHORT 0x70 "%fx_num%"
 FOR (index = 0; index < abil_num; index = index + 1) BEGIN
SET "new_fx_1" = 0 // reset for each loop through abilities
SET "new_fx_2" = 0 // reset for each loop through abilities
READ_SHORT ("%abil_off%" + 0x1e + ("%abil_length%" * "%index%")) "abil_fx_num"
READ_SHORT ("%abil_off%" + 0x20 + ("%abil_length%" * "%index%")) "abil_fx_idx"
SET "abil_fx_idx" = ("%delta%" + "%abil_fx_idx%")
WRITE_SHORT ("%abil_off%" + 0x20 + ("%abil_length%" * "%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_LONG  ("%fx_off%" + 0x08 + (0x30 * ("%abil_fx_idx%" + "%index2%"))) "icon"
  PATCH_IF ("%opcode%" = 60) BEGIN // miscast magic
	READ_ASCII ("%fx_off%" +		(0x30 * ("%abil_fx_idx%" + "%index2%"))) "clone" (48)
	SET "new_fx_1" = 1
  END ELSE
  PATCH_IF (("%opcode%" = 142) AND ("%icon%" = 105)) BEGIN // display miscast icon
	SET "new_fx_2" = 1
  END ELSE
  PATCH_IF (("%opcode%" = 142) AND ("%icon%" = 83)) BEGIN // display spell failure icon
	WRITE_BYTE ("%fx_off%" + 0x12 + (0x30 * ("%abil_fx_idx%" + "%index2%"))) 0 // 0% probability
  END
END
PATCH_IF (("%new_fx_1%" = 1) AND ("%new_fx_2%" = 0)) BEGIN // if miscast effect but no icon
  INSERT_BYTES			("%fx_off%" +		(0x30 * "%abil_fx_idx%")) 0x30		  // new effect
	WRITE_EVALUATED_ASCII ("%fx_off%" +		(0x30 * "%abil_fx_idx%")) "%clone%" #48 // clones miscast effect
	WRITE_SHORT		   ("%fx_off%" +		(0x30 * "%abil_fx_idx%")) 142		   // display portrait icon:
	WRITE_LONG			("%fx_off%" + 0x08 + (0x30 * "%abil_fx_idx%")) 105		   // miscast magic
  SET "delta" = "%delta%" + 1
  SET "abil_fx_num" = "%abil_fx_num%" + 1
END
WRITE_SHORT ("%abil_off%" + 0x1e + ("%abil_length%" * "%index%")) "%abil_fx_num%"
 END
 BUT_ONLY_IF_IT_CHANGES

// spell failure effects not accompanied by spell failure icon
COPY_EXISTING ~scrl11.itm~   ~override~ // 100%, cursed scroll
		  ~spin550.spl~  ~override~ // 100%, need to fix divine, includes innates
		  ~spin646.spl~  ~override~ // 100%, anti-magic zone type
		  ~spin689.spl~  ~override~ // 100%, has miscast
		  ~spin712.spl~  ~override~ // 100%, sets attacks to 0
		  ~spin731.spl~  ~override~ // 100%, party-wide
		  ~spin779.spl~  ~override~ // 100%, already has spell failure icon
		  ~spin992.spl~  ~override~ // 100%, no icon
		  ~sppr517.spl~  ~override~ // 100%, no icon
		  ~sppr717.spl~  ~override~ // 100%, no icon
		  ~spwm128.spl~  ~override~ // 100%, no icon
 PATCH_IF ("%SOURCE_FILE%" STRING_COMPARE_REGEXP "^.+\.spl$" = 0) BEGIN
SET "abil_length" = 0x28
READ_LONG  0x64 "abil_off" ELSE 0
READ_SHORT 0x68 "abil_num" ELSE 0
READ_LONG  0x6a "fx_off"   ELSE 0
READ_SHORT 0x70 "fx_num"   ELSE 0
SET "fx_type" = 0
 END ELSE
 PATCH_IF ("%SOURCE_FILE%" STRING_COMPARE_REGEXP "^.+\.itm$" = 0) BEGIN
SET "abil_length" = 0x38
READ_LONG  0x64 "abil_off" ELSE 0
READ_SHORT 0x68 "abil_num" ELSE 0
READ_LONG  0x6a "fx_off"   ELSE 0
READ_SHORT 0x70 "fx_num"   ELSE 0
SET "fx_type" = 0
 END ELSE
 PATCH_IF ("%SOURCE_FILE%" STRING_COMPARE_REGEXP "^.+\.cre$" = 0) BEGIN
SET "abil_length" = 0
SET "abil_off" = 0
SET "abil_num" = 0
READ_LONG  0x2c4 "fx_off"   ELSE 0
READ_LONG  0x2c8 "fx_num"   ELSE 0
READ_BYTE  0x33  "fx_type"
 END
 SET "new_fx_1" = 0
 SET "new_fx_2" = 0
 SET "delta" = 0
 FOR (index3 = 0; index3 < fx_num; index3 = index3 + 1) BEGIN
READ_SHORT ("%fx_off%" + ("%fx_type%" * 0x08) +		(0x30 * "%index3%")) "opcode"
READ_LONG  ("%fx_off%" + ("%fx_type%" * 0x10) + 0x08 + (0x30 * "%index3%")) "icon"
PATCH_IF ("%opcode%" = 60) BEGIN // entangle overlay
  READ_ASCII ("%fx_off%" + ("%fx_type%" * 0x08) +		(0x30 * "%index3%")) "clone" (48 + (216 * "%fx_type%"))
  SET "new_fx_1" = 1
END ELSE
PATCH_IF (("%opcode%" = 142) AND ("%icon%" = 83)) BEGIN // display spell failure icon
  SET "new_fx_2" = 1
END ELSE
PATCH_IF (("%opcode%" = 142) AND ("%icon%" = 105)) BEGIN // display miscast icon
  WRITE_BYTE ("%fx_off%" + ("%fx_type%" * 0x08) + 0x12 + (0x30 * "%index3%")) 0 // 0% probability
END
 END
 PATCH_IF (("%new_fx_1%" = 1) AND ("%new_fx_2%" = 0)) BEGIN // if spell failure effect but no icon
INSERT_BYTES			("%fx_off%") (0x30 + ("%fx_type%" * 0xa8))		 // new effect
  WRITE_EVALUATED_ASCII ("%fx_off%") "%clone%" // clones miscast effect
  WRITE_SHORT		   ("%fx_off%" + ("%fx_type%" * 0x08)	   ) 142	   // display portrait icon:
  WRITE_LONG			("%fx_off%" + ("%fx_type%" * 0x10) + 0x08) 83		// spell failure
SET "delta" = "%delta%" + 1
SET "fx_num" = "%fx_num%" + 1
 END
 WRITE_SHORT 0x70 "%fx_num%"
 FOR (index = 0; index < abil_num; index = index + 1) BEGIN
SET "new_fx_1" = 0 // reset for each loop through abilities
SET "new_fx_2" = 0 // reset for each loop through abilities
READ_SHORT ("%abil_off%" + 0x1e + ("%abil_length%" * "%index%")) "abil_fx_num"
READ_SHORT ("%abil_off%" + 0x20 + ("%abil_length%" * "%index%")) "abil_fx_idx"
SET "abil_fx_idx" = ("%delta%" + "%abil_fx_idx%")
WRITE_SHORT ("%abil_off%" + 0x20 + ("%abil_length%" * "%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_LONG  ("%fx_off%" + 0x08 + (0x30 * ("%abil_fx_idx%" + "%index2%"))) "icon"
  PATCH_IF ("%opcode%" = 60) BEGIN // miscast effects
	READ_ASCII ("%fx_off%" +		(0x30 * ("%abil_fx_idx%" + "%index2%"))) "clone" (48)
	SET "new_fx_1" = 1
  END ELSE
  PATCH_IF (("%opcode%" = 142) AND ("%icon%" = 83)) BEGIN // display spell failure icon
	SET "new_fx_2" = 1
  END ELSE
  PATCH_IF (("%opcode%" = 142) AND ("%icon%" = 105)) BEGIN // display miscast icon
	WRITE_BYTE ("%fx_off%" + 0x12 + (0x30 * ("%abil_fx_idx%" + "%index2%"))) 0 // 0% probability
  END
END
PATCH_IF (("%new_fx_1%" = 1) AND ("%new_fx_2%" = 0)) BEGIN // if miscast effect but no icon
  INSERT_BYTES			("%fx_off%" +		(0x30 * "%abil_fx_idx%")) 0x30		  // new effect
	WRITE_EVALUATED_ASCII ("%fx_off%" +		(0x30 * "%abil_fx_idx%")) "%clone%" #48 // clones miscast effect
	WRITE_SHORT		   ("%fx_off%" +		(0x30 * "%abil_fx_idx%")) 142		   // display portrait icon:
	WRITE_LONG			("%fx_off%" + 0x08 + (0x30 * "%abil_fx_idx%")) 83			// spell failure
  SET "delta" = "%delta%" + 1
  SET "abil_fx_num" = "%abil_fx_num%" + 1
END
WRITE_SHORT ("%abil_off%" + 0x1e + ("%abil_length%" * "%index%")) "%abil_fx_num%"
 END
 BUT_ONLY_IF_IT_CHANGES

Link to comment
Personally I would make them all use the miscast magic icon, and replace the spell failure icon with something else :mad:.

 

Beyond the realms of a fixpack, of course...

 

I'm a bit baffled... apparently, especially after reading the replies posted after this surprisingly self-restrained one (including one from Nightmare that seems to do a 180 from this one), not much is beyond the realms of a fixpack in actuality. ;)

Link to comment

I'm also baffled... as to how explaining why the miscast magic icon issue is a bug is a complete 180 from saying what I would do with a *different* icon were this not a Fixpack.

 

Anyway, do you honestly think that the developers went to the trouble of creating not one but two icon and then *deliberately* didn't include either of them in several spells that they clearly apply to? Are you suggesting that, if one of two spells which are otherwise virtually identical has an icon and the other does not, this is consistent and logical behaviour? That the very spell called "Miscast Magic" should not, in fact, display the miscast magic icon?

 

I'm afraid I'm going to have to disagree with all of those assessments, as I have come to the rather more logical conclusion that either the developers simply forgot about the icons when creating the relevant .spl files, or the icons were created after the .spls and they forgot to go back and change them.

Link to comment

Archived

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

×
×
  • Create New...