CamDawg Posted May 7, 2005 Share Posted May 7, 2005 Inspired by the IMoD discussion, I finally went through items looking for level drain immunities and whether they were missing their complementary 'disable string effects' opcodes. // disables "level drained" strings from showing in items with level drain immunity // disables "level drained" strings from showing in items with level drain immunity COPY_EXISTING ~ABAZRING.ITM~ ~override~ ~BAZPATRG.ITM~ ~override~ ~BHAALHP1.ITM~ ~override~ ~BHAALIMM.ITM~ ~override~ ~CHALSLAY.ITM~ ~override~ ~CHWRAITH.ITM~ ~override~ ~DEMOGORG.ITM~ ~override~ ~DEVA.ITM~ ~override~ ~FINMEL01.ITM~ ~override~ ~FSSPIR.ITM~ ~override~ ~GORCHR.ITM~ ~override~ ~GORFIRG.ITM~ ~override~ ~GORJELFU.ITM~ ~override~ ~GORJELGR.ITM~ ~override~ ~GORMISTI.ITM~ ~override~ ~HAMM10.ITM~ ~override~ ~HAMM11.ITM~ ~override~ ~HOLDRING.ITM~ ~override~ ~HSLAYWPN.ITM~ ~override~ ~IMMCLOUD.ITM~ ~override~ ~IMOENHP1.ITM~ ~override~ ~INNOC.ITM~ ~override~ ~INVULNER.ITM~ ~override~ ~JONHP1.ITM~ ~override~ ~JWSUPER.ITM~ ~override~ ~KILLSW01.ITM~ ~override~ ~MEL01.ITM~ ~override~ ~MINHP1.ITM~ ~override~ ~OBJRING.ITM~ ~override~ ~PALRING.ITM~ ~override~ ~RAVAG03.ITM~ ~override~ ~RING94.ITM~ ~override~ ~RING95.ITM~ ~override~ ~RING97.ITM~ ~override~ ~RING98.ITM~ ~override~ ~RING99.ITM~ ~override~ ~ROSSRING.ITM~ ~override~ ~SENGUA04.ITM~ ~override~ ~SHALT01.ITM~ ~override~ ~SLAYERWP.ITM~ ~override~ ~STALKER.ITM~ ~override~ ~SUREHP1.ITM~ ~override~ ~SW1H61.ITM~ ~override~ ~SW1H69.ITM~ ~override~ ~TELSLAV2.ITM~ ~override~ ~TSTATUE.ITM~ ~override~ ~VAMPREG.ITM~ ~override~ ~VAMPREG1.ITM~ ~override~ ~VAMPREG2.ITM~ ~override~ PATCH_IF (SOURCE_SIZE > 0x71) THEN BEGIN // protects against invalid files READ_LONG 0x64 "abil_off" READ_SHORT 0x68 "abil_num" READ_LONG 0x6a "fx_off" READ_SHORT 0x70 "fx_num" SET "new_fx" = 0 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 SET "trigger" = 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" PATCH_IF (("%opcode%" = 101) AND ("%immune%" = 216)) BEGIN // level drain immunity SET "trigger" = 1 READ_ASCII ("%fx_off%" + ("%index%" * 0x30)) "template" (0x30) END ELSE PATCH_IF (("%opcode%" = 267) AND ("%string%" = 41495)) BEGIN // disable string 41495 SET "new_fx_1" = 1 END ELSE PATCH_IF (("%opcode%" = 267) AND ("%string%" = 40968)) BEGIN // disable string 40968 SET "new_fx_2" = 1 END ELSE PATCH_IF (("%opcode%" = 267) AND ("%string%" = 40969)) BEGIN // disable string 40969 SET "new_fx_3" = 1 END ELSE PATCH_IF (("%opcode%" = 267) AND ("%string%" = 40979)) BEGIN // disable string 40979 SET "new_fx_4" = 1 END ELSE PATCH_IF (("%opcode%" = 267) AND ("%string%" = 41616)) BEGIN // disable string 41616 SET "new_fx_5" = 1 END ELSE PATCH_IF (("%opcode%" = 169) AND ("%immune%" = 59)) BEGIN // prevent level drain icon SET "new_fx_6" = 1 END PATCH_IF (("%opcode%" = 142) AND ("%immune%" = 90)) BEGIN // display NPP icon SET "new_fx_7" = 1 END END PATCH_IF ("%trigger%" = 1) BEGIN PATCH_IF ("%new_fx_1%" = 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) 41495 // strref SET "new_fx" = ("%new_fx%" + 1) END 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%" ) 267 // disable string WRITE_LONG ("%fx_off%" + 0x04) 40968 // strref 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%" ) 267 // disable string WRITE_LONG ("%fx_off%" + 0x04) 40969 // strref 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%" ) 267 // disable string WRITE_LONG ("%fx_off%" + 0x04) 40979 // strref 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) 41616 // strref 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) 53 // level drain 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%" ) 142 // display portrait icon WRITE_LONG ("%fx_off%" + 0x08) 90 // NPP SET "new_fx" = ("%new_fx%" + 1) END WHILE (("%abil_num%" > 0) AND ("%new_fx%" > 0)) BEGIN // if abilities are present, need to adjust their effects index SET "abil_num" = ("%abil_num%" - 1) 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 WRITE_SHORT 0x70 ("%fx_num%" + "%new_fx%") END END BUT_ONLY_IF_IT_CHANGES I ran it first through a ~^.+\.itm$~ regexp to generate the smaller list of files that actually need a'patchin'. As you can see, I wrote it in a generalized fashion so I could turn to the next project: doing the same for other immunities. What effects should always be present with a Hold immunity? Confusion? Charm? Etc., etc. Link to comment
CamDawg Posted May 7, 2005 Author Share Posted May 7, 2005 Fixed a few bugs in the code and expanded the list a shade. Link to comment
CamDawg Posted May 7, 2005 Author Share Posted May 7, 2005 And the creature version. COPY_EXISTING ~DEVAEVIL.CRE~ ~override~ ~DEVAGOOD.CRE~ ~override~ ~DEVAST01.CRE~ ~override~ ~DEVMON01.CRE~ ~override~ ~FAMCAT25.CRE~ ~override~ ~FAMDUS25.CRE~ ~override~ ~FAMFAI25.CRE~ ~override~ ~FAMFER25.CRE~ ~override~ ~FAMIMP25.CRE~ ~override~ ~FAMPSD25.CRE~ ~override~ ~FAMQUA25.CRE~ ~override~ ~FAMRAB25.CRE~ ~override~ ~FANGEL01.CRE~ ~override~ ~FINSOL01.CRE~ ~override~ ~FINSOL04.CRE~ ~override~ ~PLANET01.CRE~ ~override~ ~PLANEVIL.CRE~ ~override~ ~PLANGOOD.CRE~ ~override~ ~PLANWISH.CRE~ ~override~ ~PPGUY01.CRE~ ~override~ ~SOLAR.CRE~ ~override~ ~SOLAR01.CRE~ ~override~ ~VVARKAN.CRE~ ~override~ ~VVCAT.CRE~ ~override~ ~VVRYOKOI.CRE~ ~override~ PATCH_IF (SOURCE_SIZE > 0x2d3) THEN BEGIN // protects against invalid files READ_BYTE 0x33 "fx_type" 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" READ_LONG 0x2c4 "fx_off" READ_SHORT 0x2c8 "fx_num" SET "new_fx" = 0 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 SET "trigger" = 0 PATCH_IF ("%fx_type%" = 1) BEGIN 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" PATCH_IF (("%opcode%" = 101) AND ("%immune%" = 216)) BEGIN // level drain immunity SET "trigger" = 1 READ_ASCII ("%fx_off%" + ("%index%" * 0x108)) "template" (0x108) END ELSE PATCH_IF (("%opcode%" = 267) AND ("%string%" = 41495)) BEGIN // disable string 41495 SET "new_fx_1" = 1 END ELSE PATCH_IF (("%opcode%" = 267) AND ("%string%" = 40968)) BEGIN // disable string 40968 SET "new_fx_2" = 1 END ELSE PATCH_IF (("%opcode%" = 267) AND ("%string%" = 40969)) BEGIN // disable string 40969 SET "new_fx_3" = 1 END ELSE PATCH_IF (("%opcode%" = 267) AND ("%string%" = 40979)) BEGIN // disable string 40979 SET "new_fx_4" = 1 END ELSE PATCH_IF (("%opcode%" = 267) AND ("%string%" = 41616)) BEGIN // disable string 41616 SET "new_fx_5" = 1 END ELSE PATCH_IF (("%opcode%" = 169) AND ("%immune%" = 59)) BEGIN // prevent level drain icon SET "new_fx_6" = 1 END PATCH_IF (("%opcode%" = 142) AND ("%immune%" = 90)) BEGIN // display NPP icon SET "new_fx_7" = 1 END END PATCH_IF ("%trigger%" = 1) BEGIN PATCH_IF ("%new_fx_1%" = 0) BEGIN INSERT_BYTES ("%fx_off%" ) 0x108 WRITE_EVALUATED_ASCII ("%fx_off%" ) "%template%" // clones immunity effect WRITE_LONG ("%fx_off%" + 0x08) 267 // disable string WRITE_LONG ("%fx_off%" + 0x14) 41495 // strref SET "new_fx" = ("%new_fx%" + 1) END 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) 267 // disable string WRITE_LONG ("%fx_off%" + 0x14) 40968 // strref 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) 267 // disable string WRITE_LONG ("%fx_off%" + 0x14) 40969 // strref 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) 267 // disable string WRITE_LONG ("%fx_off%" + 0x14) 40979 // strref 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 // disable string WRITE_LONG ("%fx_off%" + 0x14) 41616 // strref 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 // disable portrait icon WRITE_LONG ("%fx_off%" + 0x18) 53 // level drain 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) 142 // display icon WRITE_LONG ("%fx_off%" + 0x18) 90 // NPP SET "new_fx" = ("%new_fx%" + 1) END WRITE_LONG 0x2c8 ("%fx_num%" + "%new_fx%") 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 Link to comment
Recommended Posts
Archived
This topic is now archived and is closed to further replies.