Jump to content

Confusion immunity effects batch


Recommended Posts

Like the hold and level drain batches before it...

 

// adds supplementary protections to confusion immune creatures
COPY_EXISTING ~ammonk07.cre~ ~override~
             ~ammonk08.cre~ ~override~
             ~devaevil.cre~ ~override~
             ~devagood.cre~ ~override~
             ~devast01.cre~ ~override~
             ~devmon01.cre~ ~override~
             ~elearb11.cre~ ~override~
             ~fangel01.cre~ ~override~
             ~finsol01.cre~ ~override~
             ~finsol04.cre~ ~override~
             ~firlch01.cre~ ~override~
             ~helljon.cre~  ~override~
             ~helljon2.cre~ ~override~
             ~hllich.cre~   ~override~
             ~hlshade.cre~  ~override~
             ~lichel01.cre~ ~override~
             ~mage20.cre~   ~override~
             ~mage20b.cre~  ~override~
             ~mage20c.cre~  ~override~
             ~planet01.cre~ ~override~
             ~planevil.cre~ ~override~
             ~plangood.cre~ ~override~
             ~planwish.cre~ ~override~
             ~ppguy01.cre~  ~override~
             ~ppireni2.cre~ ~override~
             ~sendai7.cre~  ~override~
             ~sewyag04.cre~ ~override~
             ~solar.cre~    ~override~
             ~solar01.cre~  ~override~
             ~sujon.cre~    ~override~
             ~sujon2.cre~   ~override~
             ~suraam.cre~   ~override~
             ~susuneer.cre~ ~override~
             ~uddrow50.cre~ ~override~
             ~udsola01.cre~ ~override~
 READ_BYTE   0x33  "fx_type" ELSE 0
 PATCH_IF ("%fx_type%" = 1) BEGIN
   READ_LONG   0x2c4 "fx_off"
   READ_SHORT  0x2c8 "fx_num"
   SET "new_fx_1" = 0
   SET "new_fx_2" = 0
   SET "new_fx_3" = 0
   SET "new_fx_4" = 0
   SET "new_fx_5" = 0
   SET "new_fx_6" = 0
   SET "new_fx_7" = 0
   FOR (index = 0; index < fx_num; index = index + 1) BEGIN
     READ_LONG  ("%fx_off%" + 0x08 + ("%index%" * 0x108)) "opcode"
     READ_LONG  ("%fx_off%" + 0x14 + ("%index%" * 0x108)) "string"
     READ_LONG  ("%fx_off%" + 0x18 + ("%index%" * 0x108)) "immune"
     READ_ASCII ("%fx_off%" + 0x28 + ("%index%" * 0x108)) "anim"
     PATCH_IF (("%opcode%" = 101) AND ("%immune%" = 128)) BEGIN // confusion immunity
       SET "new_fx_1" = 1
       READ_ASCII ("%fx_off%" +        ("%index%" * 0x108)) "template" (0x108)
     END ELSE
     PATCH_IF (("%opcode%" = 169) AND ("%immune%" = 3)) BEGIN // prevent confusion icon
       SET "new_fx_2" = 1
     END ELSE
     PATCH_IF (("%opcode%" = 169) AND ("%immune%" = 47)) BEGIN // prevent chaos icon
       SET "new_fx_3" = 1
     END ELSE
     PATCH_IF (("%opcode%" = 296) AND ("%anim%" STRING_COMPARE_CASE "spconfus" = 0)) BEGIN // spmindat anim
       SET "new_fx_4" = 1
     END ELSE
     PATCH_IF (("%opcode%" = 267) AND ("%string%" = 14782)) BEGIN // strref, "Confused"
       SET "new_fx_5" = 1
     END ELSE
     PATCH_IF (("%opcode%" = 169) AND ("%immune%" = 2)) BEGIN // prevent rigid thinking portrait icon
       SET "new_fx_6" = 1
     END ELSE
     PATCH_IF (("%opcode%" = 267) AND ("%string%" = 14791)) BEGIN // disable string 14791, "Rigid Thinking"
       SET "new_fx_7" = 1
     END
   END
   PATCH_IF ("%new_fx_1%" = 1) BEGIN
     SET "new_fx" = 0
     PATCH_IF ("%new_fx_2%" = 0) BEGIN
       INSERT_BYTES            ("%fx_off%"       ) 0x108
         WRITE_EVALUATED_ASCII ("%fx_off%"       ) "%template%" // clones immunity effect
         WRITE_LONG            ("%fx_off%" + 0x08) 169          // prevent portrait icon
         WRITE_LONG            ("%fx_off%" + 0x18) 3            // confusion
       SET "new_fx" = ("%new_fx%" + 1)
     END
     PATCH_IF ("%new_fx_3%" = 0) BEGIN
       INSERT_BYTES            ("%fx_off%"       ) 0x108
         WRITE_EVALUATED_ASCII ("%fx_off%"       ) "%template%" // clones immunity effect
         WRITE_LONG            ("%fx_off%" + 0x08) 169          // prevent portrait icon
         WRITE_LONG            ("%fx_off%" + 0x18) 47           // chaos
       SET "new_fx" = ("%new_fx%" + 1)
     END
     PATCH_IF ("%new_fx_4%" = 0) BEGIN
       INSERT_BYTES            ("%fx_off%"       ) 0x108
         WRITE_EVALUATED_ASCII ("%fx_off%"       ) "%template%" // clones immunity effect
         WRITE_LONG            ("%fx_off%" + 0x08) 296          // immunity to specific animation
         WRITE_ASCII           ("%fx_off%" + 0x28) ~spconfus~   // mind flayer hold animation
       SET "new_fx" = ("%new_fx%" + 1)
     END
     PATCH_IF ("%new_fx_5%" = 0) BEGIN
       INSERT_BYTES            ("%fx_off%"       ) 0x108
         WRITE_EVALUATED_ASCII ("%fx_off%"       ) "%template%" // clones immunity effect
         WRITE_LONG            ("%fx_off%" + 0x08) 267          // immunity to specific animation
         WRITE_LONG            ("%fx_off%" + 0x14) 14782        // strref, confused
       SET "new_fx" = ("%new_fx%" + 1)
     END
     PATCH_IF ("%new_fx_6%" = 0) BEGIN
       INSERT_BYTES            ("%fx_off%"       ) 0x108
         WRITE_EVALUATED_ASCII ("%fx_off%"       ) "%template%" // clones immunity effect
         WRITE_LONG            ("%fx_off%" + 0x08) 169          // prevent portrait icon
         WRITE_LONG            ("%fx_off%" + 0x18) 2            // rigid thinking
       SET "new_fx" = ("%new_fx%" + 1)
     END
     PATCH_IF ("%new_fx_7%" = 0) BEGIN
       INSERT_BYTES            ("%fx_off%"       ) 0x108
         WRITE_EVALUATED_ASCII ("%fx_off%"       ) "%template%" // clones immunity effect
         WRITE_LONG            ("%fx_off%" + 0x08) 267          // immunity to specific animation
         WRITE_LONG            ("%fx_off%" + 0x14) 14791        // strref, rigid thinking
       SET "new_fx" = ("%new_fx%" + 1)
     END
     PATCH_IF ("%new_fx%" > 0) BEGIN
       PATCH_PRINT "              ~%SOURCE_FILE%~ ~override~"
       WRITE_LONG  0x2c8 ("%fx_num%" + "%new_fx%")
       READ_LONG   0x2a0 "known_off"
       READ_LONG   0x2a8 "meminfo_off"
       READ_LONG   0x2b0 "mem_off"
       READ_LONG   0x2b8 "slot_off"
       READ_LONG   0x2bc "itm_off"
       PATCH_IF ("%fx_off%" < "%known_off%") BEGIN
         WRITE_LONG 0x2a0 ("%known_off%" + (0x108 * "%new_fx%"))
       END
       PATCH_IF ("%fx_off%" < "%meminfo_off%") BEGIN
         WRITE_LONG 0x2a8 ("%meminfo_off%" + (0x108 * "%new_fx%"))
       END
       PATCH_IF ("%fx_off%" < "%mem_off%") BEGIN
         WRITE_LONG 0x2b0 ("%mem_off%" + (0x108 * "%new_fx%"))
       END
       PATCH_IF ("%fx_off%" < "%slot_off%") BEGIN
         WRITE_LONG 0x2b8 ("%slot_off%" + (0x108 * "%new_fx%"))
       END
       PATCH_IF ("%fx_off%" < "%itm_off%") BEGIN
         WRITE_LONG 0x2bc ("%itm_off%" + (0x108 * "%new_fx%"))
       END
     END
   END
 END
 BUT_ONLY_IF_IT_CHANGES
 
// adds supplementary protections to confusion immune items
COPY_EXISTING ~abazring.itm~ ~override~
             ~chalcy3.itm~  ~override~
             ~chalslay.itm~ ~override~
             ~chwraith.itm~ ~override~
             ~demogorg.itm~ ~override~
             ~finmel01.itm~ ~override~
             ~gorfirg.itm~  ~override~
             ~gorjelfu.itm~ ~override~
             ~gorjelgr.itm~ ~override~
             ~gormisti.itm~ ~override~
             ~innoc.itm~    ~override~
             ~ipsion.itm~   ~override~
             ~killsw01.itm~ ~override~
             ~leat20.itm~   ~override~
             ~maharper.itm~ ~override~
             ~mane01.itm~   ~override~
             ~mdk2gun.itm~  ~override~
             ~mdk2ring.itm~ ~override~
             ~objring.itm~  ~override~
             ~palring.itm~  ~override~
             ~ravag03.itm~  ~override~
             ~ring94.itm~   ~override~
             ~ring95.itm~   ~override~
             ~ring98.itm~   ~override~
             ~ring99.itm~   ~override~
             ~ringdemn.itm~ ~override~
             ~ringkora.itm~ ~override~
             ~sengua04.itm~ ~override~
             ~shalt01.itm~  ~override~
             ~shararm.itm~  ~override~
             ~shld25.itm~   ~override~
             ~stalker.itm~  ~override~
             ~sw1h54.itm~   ~override~
             ~sw2h14.itm~   ~override~
             ~sw2h21.itm~   ~override~
             ~telslav2.itm~ ~override~
             ~trollimm.itm~ ~override~
             ~tstatue.itm~  ~override~
             ~umber01.itm~  ~override~
             ~umber02.itm~  ~override~
 PATCH_IF (SOURCE_SIZE > 0x71) THEN BEGIN // protects against invalid files
   READ_LONG   0x6a "fx_off"
   READ_SHORT  0x70 "fx_num"
   SET "new_fx_1" = 0
   SET "new_fx_2" = 0
   SET "new_fx_3" = 0
   SET "new_fx_4" = 0
   SET "new_fx_5" = 0
   SET "new_fx_6" = 0
   SET "new_fx_7" = 0
   FOR (index = 0; index < fx_num; index = index + 1) BEGIN
     READ_SHORT ("%fx_off%" +        ("%index%" * 0x30)) "opcode"
     READ_LONG  ("%fx_off%" + 0x04 + ("%index%" * 0x30)) "string"
     READ_LONG  ("%fx_off%" + 0x08 + ("%index%" * 0x30)) "immune"
     READ_ASCII ("%fx_off%" + 0x14 + ("%index%" * 0x30)) "anim"
     PATCH_IF (("%opcode%" = 101) AND ("%immune%" = 128)) BEGIN // confusion immunity
       SET "new_fx_1" = 1
       READ_ASCII ("%fx_off%" +        ("%index%" * 0x30)) "template" (0x30)
     END ELSE
     PATCH_IF (("%opcode%" = 169) AND ("%immune%" = 3)) BEGIN // prevent confused portrait icon
       SET "new_fx_2" = 1
     END ELSE
     PATCH_IF (("%opcode%" = 169) AND ("%immune%" = 47)) BEGIN // prevent chaos portrait icon
       SET "new_fx_3" = 1
     END ELSE
     PATCH_IF (("%opcode%" = 296) AND ("%anim%" STRING_COMPARE_CASE "spconfus" = 0)) BEGIN // spconfus anim
       SET "new_fx_4" = 1
     END ELSE
     PATCH_IF (("%opcode%" = 267) AND ("%string%" = 14782)) BEGIN // disable string 14102, "Confused"
       SET "new_fx_5" = 1
     END ELSE
     PATCH_IF (("%opcode%" = 169) AND ("%immune%" = 2)) BEGIN // prevent rigid thinking portrait icon
       SET "new_fx_6" = 1
     END ELSE
     PATCH_IF (("%opcode%" = 267) AND ("%string%" = 14791)) BEGIN // disable string 14791, "Rigid Thinking"
       SET "new_fx_7" = 1
     END
   END
   PATCH_IF ("%new_fx_1%" = 1) BEGIN
     SET "new_fx" = 0
     PATCH_IF ("%new_fx_2%" = 0) BEGIN
       INSERT_BYTES            ("%fx_off%"       ) 0x30
         WRITE_EVALUATED_ASCII ("%fx_off%"       ) "%template%" // clones immunity effect
         WRITE_SHORT           ("%fx_off%"       ) 169          // prevent portrait icon
         WRITE_LONG            ("%fx_off%" + 0x08) 3            // confused
       SET "new_fx" = ("%new_fx%" + 1)
     END
     PATCH_IF ("%new_fx_3%" = 0) BEGIN
       INSERT_BYTES            ("%fx_off%"       ) 0x30
         WRITE_EVALUATED_ASCII ("%fx_off%"       ) "%template%" // clones immunity effect
         WRITE_SHORT           ("%fx_off%"       ) 169          // prevent portrait icon
         WRITE_LONG            ("%fx_off%" + 0x08) 47           // chaos
       SET "new_fx" = ("%new_fx%" + 1)
     END
     PATCH_IF ("%new_fx_4%" = 0) BEGIN
       INSERT_BYTES            ("%fx_off%"       ) 0x30
         WRITE_EVALUATED_ASCII ("%fx_off%"       ) "%template%" // clones immunity effect
         WRITE_SHORT           ("%fx_off%"       ) 296          // prevent specific animation
         WRITE_ASCII           ("%fx_off%" + 0x14) ~spconfus~   // mind flayer confusion
       SET "new_fx" = ("%new_fx%" + 1)
     END
     PATCH_IF ("%new_fx_5%" = 0) BEGIN
       INSERT_BYTES            ("%fx_off%"       ) 0x30
         WRITE_EVALUATED_ASCII ("%fx_off%"       ) "%template%" // clones immunity effect
         WRITE_SHORT           ("%fx_off%"       ) 267          // disable string
         WRITE_LONG            ("%fx_off%" + 0x04) 14782        // strref, "confused"
       SET "new_fx" = ("%new_fx%" + 1)
     END
     PATCH_IF ("%new_fx_6%" = 0) BEGIN
       INSERT_BYTES            ("%fx_off%"       ) 0x30
         WRITE_EVALUATED_ASCII ("%fx_off%"       ) "%template%" // clones immunity effect
         WRITE_SHORT           ("%fx_off%"       ) 169          // prevent portrait icon
         WRITE_LONG            ("%fx_off%" + 0x08) 2            // rigid thinking
       SET "new_fx" = ("%new_fx%" + 1)
     END
     PATCH_IF ("%new_fx_7%" = 0) BEGIN
       INSERT_BYTES            ("%fx_off%"       ) 0x30
         WRITE_EVALUATED_ASCII ("%fx_off%"       ) "%template%" // clones immunity effect
         WRITE_SHORT           ("%fx_off%"       ) 267          // disable string
         WRITE_LONG            ("%fx_off%" + 0x04) 14791        // strref, "rigid thinking"
       SET "new_fx" = ("%new_fx%" + 1)
     END
     PATCH_IF ("%new_fx%" > 0) BEGIN
       PATCH_PRINT "              ~%SOURCE_FILE%~ ~override~"
       WRITE_SHORT  0x70 ("%fx_num%" + "%new_fx%")
       READ_LONG   0x64 "abil_off"
       READ_SHORT  0x68 "abil_num"
       FOR (index2 = 0; index2 < abil_num; index2 = index2 + 1) BEGIN
         READ_SHORT  ("%abil_off%" + 0x20 + ("%abil_num%" * 0x38)) "abil_fx_idx"
         WRITE_SHORT ("%abil_off%" + 0x20 + ("%abil_num%" * 0x38)) ("%abil_fx_idx%" + "%new_fx%")
       END
     END
   END
 END
 BUT_ONLY_IF_IT_CHANGES

Link to comment

Archived

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

×
×
  • Create New...