Jump to content

Hold Monster


devSin

Recommended Posts

The SPMINDAT vvc is playing for 1 second; it should play for the duration.

 

Since the spell targets everyone, may as well add an icon (0 difference; the spell is never cast by an enemy in default AI).

// hold monster swirly graphic craps out early; should also set icon and display 'held' string
COPY_EXISTING ~spwi507.spl~ ~override~
 READ_LONG  0x64 "abil_off"
 READ_SHORT 0x68 "abil_num"
 READ_LONG  0x6a "fx_off"
 SET "fx_delta" = 0
 FOR (index = 0; index < abil_num; index = index + 1 ) BEGIN // cycle thru abilities
READ_SHORT  ("%abil_off%" + 0x10 + (0x28 * "%index%")) "min_lev"
PATCH_IF ("%min_lev%" = 1) THEN BEGIN
  SET "min_lev" = 9
END
READ_SHORT  ("%abil_off%" + 0x1e + (0x28 * "%index%")) "abil_fx_num"
WRITE_SHORT ("%abil_off%" + 0x1e + (0x28 * "%index%")) ("%abil_fx_num%" + 2)
READ_SHORT  ("%abil_off%" + 0x20 + (0x28 * "%index%")) "abil_fx_idx"
SET "abil_fx_idx" = ("%abil_fx_idx%" + "%fx_delta%")
WRITE_SHORT ("%abil_off%" + 0x20 + (0x28 * "%index%")) "%abil_fx_idx%"
SET "fx_delta" = ("%fx_delta%" + 2)
// fix duration for swirly graphic while we're here, then clone the effect
FOR (index2 = 0; index2 < abil_fx_num; index2 = index2 + 1) BEGIN
  READ_SHORT ("%fx_off%" +		(0x30 * ("%index2%" + "%abil_fx_idx%"))) "opcode"
  PATCH_IF ("%opcode%" = 215) BEGIN
	WRITE_LONG  ("%fx_off%" + 0x0e + (0x30 * ("%index2%" + "%abil_fx_idx%"))) (6 * "%min_lev%")
	READ_ASCII  ("%fx_off%" +		(0x30 * ("%index2%" + "%abil_fx_idx%"))) "clone" (48)
  END
END
INSERT_BYTES   ("%fx_off%" +		(0x30 * "%abil_fx_idx%"))	  0x30 // new effect
  WRITE_ASCIIE ("%fx_off%" +		(0x30 * "%abil_fx_idx%")) "%clone%" // use 215 effect as base
  WRITE_SHORT  ("%fx_off%" +		(0x30 * "%abil_fx_idx%"))	   142 // display portrait icon
  WRITE_LONG   ("%fx_off%" + 0x08 + (0x30 * "%abil_fx_idx%"))		13 // icon: held
INSERT_BYTES   ("%fx_off%" +		(0x30 * "%abil_fx_idx%"))	  0x30 // new effect
  WRITE_ASCIIE ("%fx_off%" +		(0x30 * "%abil_fx_idx%")) "%clone%" // use 215 effect as base
  WRITE_SHORT  ("%fx_off%" +		(0x30 * "%abil_fx_idx%"))	   139 // display string
  WRITE_LONG   ("%fx_off%" + 0x04 + (0x30 * "%abil_fx_idx%"))	 14102 // string: held
  WRITE_BYTE   ("%fx_off%" + 0x0c + (0x30 * "%abil_fx_idx%"))		 1 // instant/permanent
  WRITE_BYTE   ("%fx_off%" + 0x0e + (0x30 * "%abil_fx_idx%"))		 0 // duration
 END
 BUT_ONLY_IF_IT_CHANGES

Link to comment

Archived

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

×
×
  • Create New...