Jump to content

Holy Smite


Recommended Posts

Holy Smite has some issues at levels 6 and 7--blind is permanent and without duration, and hitinvwa had incorrect timing. It has the additional issue of missing its level 20 ability header (and necessary eff).

 

// new eff needed for level 20 holy smite
COPY_EXISTING ~SP313L19.EFF~ ~override/SP313L20.EFF~
 WRITE_LONG 0x38 20

// holy smite missing level 20 abilities, a few effects mistargeted and/or wrong duration at lev 6, 7
COPY_EXISTING ~sppr313.spl~ ~override~
 READ_LONG  0x64 "abil_off"
 READ_SHORT 0x68 "abil_num"
 READ_LONG  0x6a "fx_off"
 SET "delta" = 0
 SET "loops" = 0
 SET "min_lev" = 0
 WHILE ("%abil_num%" > 0) BEGIN // grabs last ability (lev 19) and does patching for lev 6, 7 abilities
   SET "abil_num" = ("%abil_num%" - 1)
   READ_SHORT ("%abil_off%" + 0x10 + (0x28 * "%abil_num%")) "level"
   PATCH_IF ("%min_lev%" = 0) BEGIN
     SET "min_lev" = "%level%" // sets min_lev to use last ability
   END
   PATCH_IF (("%level%" = 6) OR ("%level%" = 7)) BEGIN
     READ_SHORT ("%abil_off%" + 0x1e + (0x28 * "%abil_num%")) "abil_fx_num"
     READ_SHORT ("%abil_off%" + 0x20 + (0x28 * "%abil_num%")) "abil_fx_idx"
     WHILE ("%abil_fx_num%" > 0) BEGIN
       SET "abil_fx_num" = ("%abil_fx_num%" - 1)
       READ_ASCII ("%fx_off%" + 0x14 + (0x30 * ("%abil_fx_idx%" + "%abil_fx_num%"))) "eff_file"
       PATCH_IF ("%eff_file%" STRING_COMPARE_CASE "hitinvwa" = 0) BEGIN
         WRITE_BYTE ("%fx_off%" + 0x0c + (0x30 * ("%abil_fx_idx%" + "%abil_fx_num%"))) 1 // instant/permanent
       END ELSE
       PATCH_IF ("%eff_file%" STRING_COMPARE_CASE "blind" = 0) BEGIN
         WRITE_BYTE ("%fx_off%" + 0x0c + (0x30 * ("%abil_fx_idx%" + "%abil_fx_num%"))) 0 // instant/limited
         WRITE_LONG ("%fx_off%" + 0x0e + (0x30 * ("%abil_fx_idx%" + "%abil_fx_num%"))) 6 // duration
       END
     END
   END
 END
 PATCH_IF ("%min_lev%" < 20) BEGIN
   INSERT_BYTES "%fx_off%" 0x28
   SET "delta" = 1
   READ_LONG  (("%fx_off%" - 0x28)       ) "abil_clone1"
   READ_LONG  (("%fx_off%" - 0x28) + 0x04) "abil_clone2"
   READ_LONG  (("%fx_off%" - 0x28) + 0x08) "abil_clone3"
   READ_LONG  (("%fx_off%" - 0x28) + 0x0c) "abil_clone4"
   READ_LONG  (("%fx_off%" - 0x28) + 0x12) "abil_clone5"
   READ_LONG  (("%fx_off%" - 0x28) + 0x16) "abil_clone6"
   READ_LONG  (("%fx_off%" - 0x28) + 0x1a) "abil_clone7"
   READ_SHORT (("%fx_off%" - 0x28) + 0x1e) "abil_fx_num"
   READ_SHORT (("%fx_off%" - 0x28) + 0x20) "abil_fx_idx"
   READ_LONG  (("%fx_off%" - 0x28) + 0x22) "abil_clone8"
   READ_SHORT (("%fx_off%" - 0x28) + 0x26) "abil_clone9"
 END
 WHILE ("%delta%" > "%loops%") BEGIN // this clones the lev 19 abilities to the lev 20 one
   WRITE_LONG  (("%fx_off%" + (0x28 * "%loops%"))       ) "%abil_clone1%"
   WRITE_LONG  (("%fx_off%" + (0x28 * "%loops%")) + 0x04) "%abil_clone2%"
   WRITE_LONG  (("%fx_off%" + (0x28 * "%loops%")) + 0x08) "%abil_clone3%"
   WRITE_LONG  (("%fx_off%" + (0x28 * "%loops%")) + 0x0c) "%abil_clone4%"
   WRITE_SHORT (("%fx_off%" + (0x28 * "%loops%")) + 0x10) ("%min_lev%" + 1 + "%loops%")
   WRITE_LONG  (("%fx_off%" + (0x28 * "%loops%")) + 0x12) "%abil_clone5%"
   WRITE_LONG  (("%fx_off%" + (0x28 * "%loops%")) + 0x16) "%abil_clone6%"
   WRITE_LONG  (("%fx_off%" + (0x28 * "%loops%")) + 0x1a) "%abil_clone7%"
   WRITE_SHORT (("%fx_off%" + (0x28 * "%loops%")) + 0x1e) "%abil_fx_num%"
   WRITE_SHORT (("%fx_off%" + (0x28 * "%loops%")) + 0x20) ("%abil_fx_idx%" + (("%loops%" + 1) * "%abil_fx_num%"))
   WRITE_LONG  (("%fx_off%" + (0x28 * "%loops%")) + 0x22) "%abil_clone8%"
   WRITE_SHORT (("%fx_off%" + (0x28 * "%loops%")) + 0x26) "%abil_clone9%"
   SET "loops" = ("%loops%" + 1)
 END
 WRITE_SHORT 0x68 ("%abil_num%" + "%delta%")
 SET "fx_off" = ("%fx_off%" + (0x28 * "%delta%"))
 WRITE_LONG  0x6a "%fx_off%"
 INSERT_BYTES ("%fx_off%" + (0x30 * ("%abil_fx_num%" + "%abil_fx_idx%"))) (0x30 * ("%delta%" * "%abil_fx_num%"))
 WHILE ("%delta%" > 0) BEGIN
   SET "loops" = "%abil_fx_num%"
   WHILE ("%loops%" > 0) BEGIN
     SET "loops" = ("%loops%" - 1)
     READ_LONG   ("%fx_off%" + 0x00 + (0x30 * ("%loops%" + "%abil_fx_idx%"))) "clone"
     WRITE_LONG  ("%fx_off%" + 0x00 + (0x30 * ("%loops%" + "%abil_fx_idx%")) + ("%delta%" * (0x30 * "%abil_fx_num%"))) "%clone%"
     READ_LONG   ("%fx_off%" + 0x04 + (0x30 * ("%loops%" + "%abil_fx_idx%"))) "clone"
     WRITE_LONG  ("%fx_off%" + 0x04 + (0x30 * ("%loops%" + "%abil_fx_idx%")) + ("%delta%" * (0x30 * "%abil_fx_num%"))) "%clone%"
     READ_LONG   ("%fx_off%" + 0x08 + (0x30 * ("%loops%" + "%abil_fx_idx%"))) "clone"
     WRITE_LONG  ("%fx_off%" + 0x08 + (0x30 * ("%loops%" + "%abil_fx_idx%")) + ("%delta%" * (0x30 * "%abil_fx_num%"))) "%clone%"
     READ_LONG   ("%fx_off%" + 0x0c + (0x30 * ("%loops%" + "%abil_fx_idx%"))) "clone"
     WRITE_LONG  ("%fx_off%" + 0x0c + (0x30 * ("%loops%" + "%abil_fx_idx%")) + ("%delta%" * (0x30 * "%abil_fx_num%"))) "%clone%"
     READ_LONG   ("%fx_off%" + 0x10 + (0x30 * ("%loops%" + "%abil_fx_idx%"))) "clone"
     WRITE_LONG  ("%fx_off%" + 0x10 + (0x30 * ("%loops%" + "%abil_fx_idx%")) + ("%delta%" * (0x30 * "%abil_fx_num%"))) "%clone%"
     READ_ASCII  ("%fx_off%" + 0x14 + (0x30 * ("%loops%" + "%abil_fx_idx%"))) "eff_again"
     PATCH_IF ("%eff_again%" STRING_COMPARE_CASE "sp313l19" = 0) BEGIN
       WRITE_ASCII ("%fx_off%" + 0x14 + (0x30 * ("%loops%" + "%abil_fx_idx%")) + ("%delta%" * (0x30 * "%abil_fx_num%"))) ~sp313l20~
     END ELSE BEGIN
       WRITE_EVALUATED_ASCII ("%fx_off%" + 0x14 + (0x30 * ("%loops%" + "%abil_fx_idx%")) + ("%delta%" * (0x30 * "%abil_fx_num%"))) "%eff_again%"
     END
     READ_LONG   ("%fx_off%" + 0x1c + (0x30 * ("%loops%" + "%abil_fx_idx%"))) "clone"
     WRITE_LONG  ("%fx_off%" + 0x1c + (0x30 * ("%loops%" + "%abil_fx_idx%")) + ("%delta%" * (0x30 * "%abil_fx_num%"))) "%clone%"
     READ_LONG   ("%fx_off%" + 0x20 + (0x30 * ("%loops%" + "%abil_fx_idx%"))) "clone"
     WRITE_LONG  ("%fx_off%" + 0x20 + (0x30 * ("%loops%" + "%abil_fx_idx%")) + ("%delta%" * (0x30 * "%abil_fx_num%"))) "%clone%"
     READ_LONG   ("%fx_off%" + 0x24 + (0x30 * ("%loops%" + "%abil_fx_idx%"))) "clone"
     WRITE_LONG  ("%fx_off%" + 0x24 + (0x30 * ("%loops%" + "%abil_fx_idx%")) + ("%delta%" * (0x30 * "%abil_fx_num%"))) "%clone%"
     READ_LONG   ("%fx_off%" + 0x28 + (0x30 * ("%loops%" + "%abil_fx_idx%"))) "clone"
     WRITE_LONG  ("%fx_off%" + 0x28 + (0x30 * ("%loops%" + "%abil_fx_idx%")) + ("%delta%" * (0x30 * "%abil_fx_num%"))) "%clone%"
     READ_LONG   ("%fx_off%" + 0x2c + (0x30 * ("%loops%" + "%abil_fx_idx%"))) "clone"
     WRITE_LONG  ("%fx_off%" + 0x2c + (0x30 * ("%loops%" + "%abil_fx_idx%")) + ("%delta%" * (0x30 * "%abil_fx_num%"))) "%clone%"
   END
   SET "delta" = ("%delta%" - 1)
 END
 BUT_ONLY_IF_IT_CHANGES

Link to comment

Archived

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

×
×
  • Create New...