Jump to content

Hardiness


Recommended Posts

My Hardiness only has two abilities (identical, no less). The desc says 1 round / 2 levels (max 15 rounds at L30). I can't decide which is the bug, and I don't know if it's been fixed here.

 

The Wish version almost makes it, but stops at L28. I guess the solution is somewhere in-between.

Link to comment

I hate missing spell headers.

 

// hardiness missing high level headers
COPY_EXISTING ~spcl907.spl~  ~override~ // hardiness hla
             ~spwish12.spl~ ~override~ // hardiness via wish
 READ_LONG  0x64 "abil_off"
 READ_SHORT 0x68 "abil_num"
 READ_LONG  0x6a "fx_off"
 READ_LONG ("%abil_off%" + 0x10 + (("%abil_num%" - 1) * 0x28)) "min_level" // min level of last ability header
 FOR (index = min_level + 2; index < 31; index = index + 2) BEGIN
   READ_ASCII ("%abil_off%" +        (("%abil_num%" - 1) * 0x28)) "abil_clone" (0x28) // reads last ability as block
   READ_SHORT ("%abil_off%" + 0x1e + (("%abil_num%" - 1) * 0x28)) "abil_fx_num" // reads number of fx from last ability
   READ_SHORT ("%abil_off%" + 0x20 + (("%abil_num%" - 1) * 0x28)) "abil_fx_idx" // reads index of last effects from last ability
   // create effects for next level based off previous level effects
   FOR (index2 = 0; index2 < abil_fx_num; index2 = index2 + 1) BEGIN
     READ_ASCII ("%fx_off%" +        (("%abil_fx_idx%" + "%index2%") * 0x30)) "clone_fx" (0x30) // reads entire effect
     READ_LONG  ("%fx_off%" + 0x0e + (("%abil_fx_idx%" + "%index2%") * 0x30)) "duration"        // duration
     INSERT_BYTES ("%fx_off%" +        (("%abil_fx_idx%" + "%abil_fx_num%" + "%index2%") * 0x30)) 0x30
       WRITE_EVALUATED_ASCII ("%fx_off%" +        (("%abil_fx_idx%" + "%abil_fx_num%" + "%index2%") * 0x30)) "%clone_fx%" // clones effect
       PATCH_IF ("%duration%" > 5) BEGIN // if more than one round
         WRITE_LONG  ("%fx_off%" + 0x0e + (("%abil_fx_idx%" + "%abil_fx_num%" + "%index2%") * 0x30)) ("%duration%" + 6) // duration + round
       END
   END
   // effects created, now add new ability
   INSERT_BYTES            ("%abil_off%" +        ("%abil_num%" * 0x28)) 0x28
     WRITE_EVALUATED_ASCII ("%abil_off%" +        ("%abil_num%" * 0x28)) "%abil_clone%" // clones last ability
     WRITE_LONG            ("%abil_off%" + 0x10 + ("%abil_num%" * 0x28)) "%index%"      // min level
     WRITE_SHORT           ("%abil_off%" + 0x20 + ("%abil_num%" * 0x28)) ("%abil_fx_num%" + "%abil_fx_idx%") // corrects fx index
   SET "fx_off" = ("%fx_off%" + 0x28)  
   SET "abil_num" = "%abil_num%" + 1
 END
 WRITE_SHORT 0x68 "%abil_num%"
 WRITE_LONG  0x6a "%fx_off%"
 BUT_ONLY_IF_IT_CHANGES

 

This gives both a full suite of level 20 - level 30 headers. Where are you getting the level 30 cap info? I don't see it in the description.

Link to comment

Archived

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

×
×
  • Create New...