Jump to content

COPY_EXISTING_REGEXP GLOB checking for specific opcodes?


Recommended Posts

Is there a simple way to check if a spl makes use of a particular opcode via PATCH_IF?  I have to admit that I have not even tried as I have no idea how I would do such a thing, tbh.  I have code that does basically what I want it to, but it's...wasteful, so to speak.  That is, is applies INNER_ACTION much more often that it needs to.  I can give the code snippet in case it'll help:

The problem is those darn INNER_ACTIONs...

Spoiler



 COPY_EXISTING_REGEXP GLOB ~.[^abcde]*\.SPL~ ~override~
     PATCH_IF (~%SOURCE_SIZE%~ > ~0x71~) BEGIN
      READ_BYTE 0x001C type //Spell type
       PATCH_IF type = 1 BEGIN   //wiz spells
            READ_BYTE 0x0025 school //school type
         PATCH_IF school = 6   BEGIN //If invoker school (I think)
         READ_STRREF 0x50 ~sv_des~  //save description
               PATCH_IF ("%sv_des%" STRING_CONTAINS_REGEXP "Saving Throw: None" != 0)  BEGIN   //if spell text does NOT contain this phrase:  Saving Throw: None
                READ_LONG  0x0034 level //spell level
             READ_LONG 0x0008 name //spell name
            READ_LONG 0x0050 desc //description
            READ_SHORT 0x007E target //Target-check
            READ_SHORT 0x0080 range //range-check
                READ_LONG  0x64 abil_off ELSE 0
                READ_SHORT 0x68 abil_num ELSE 0
         INNER_PATCH_SAVE cus0 ~%SOURCE_RES%~ BEGIN
         END
         INNER_PATCH_SAVE cus1 ~%cus0%~ BEGIN
          REPLACE_TEXTUALLY CASE_INSENSITIVE EXACT_MATCH ~SPWI~ ~B_S~
         END
         INNER_PATCH_SAVE cus2 ~%cus1%~ BEGIN
          REPLACE_TEXTUALLY CASE_INSENSITIVE EXACT_MATCH ~SPWM~ ~B_S~
         END
             LPF cd_apply_batch STR_VAR array_name = b_dex_evoc_arrays_sr END  //dex apply spl
             LPF ALTER_EFFECT INT_VAR  multi_match = 1 parameter1 = 15 parameter2 = %dex_ls% probability1 = 100 probability2 = 0 STR_VAR match_resource = ~ls_15~ resource = EVAL ~%cus2%A~  END     // spl dex less than 15
             LPF ALTER_EFFECT INT_VAR  multi_match = 1 parameter1 = 15 parameter2 = %dex_eq% probability1 = 100 probability2 = 0 STR_VAR match_resource = ~is_15~ resource = EVAL ~%cus2%B~   END   // spl dex = 15
             LPF ALTER_EFFECT INT_VAR  multi_match = 1 parameter1 = 16 parameter2 = %dex_eq% probability1 = 100 probability2 = 0 STR_VAR match_resource = ~is_16~ resource = EVAL ~%cus2%C~   END   // spl dex = 15
             LPF ALTER_EFFECT INT_VAR  multi_match = 1 parameter1 = 17 parameter2 = %dex_eq% probability1 = 100 probability2 = 0 STR_VAR match_resource = ~is_17~ resource = EVAL ~%cus2%D~   END   // spl dex = 15
             LPF ALTER_EFFECT INT_VAR  multi_match = 1 parameter1 = 18 parameter2 = %dex_eq% probability1 = 100 probability2 = 0 STR_VAR match_resource = ~is_18~ resource = EVAL ~%cus2%E~   END   // spl dex = 15
             LPF ALTER_EFFECT INT_VAR  multi_match = 1 parameter1 = 18 parameter2 = %dex_gr% probability1 = 100 probability2 = 0 STR_VAR match_resource = ~gr_18~ resource = EVAL ~%cus2%F~   END   // spl dex = 15
    PATCH_IF !FILE_EXISTS_IN_GAME ~%cus2%A.SPL~ BEGIN  //
           INNER_ACTION BEGIN
           COPY_EXISTING ~%cus0%.SPL~ ~override/%cus2%A.SPL~
             WRITE_LONG 0x0008 ~%name%~
             WRITE_LONG 0x0034 level //spell level
             WRITE_LONG 0x000c ~%name%~
             WRITE_LONG 0x0054 ~%desc%~
             WRITE_SHORT 0x007E target //Target-check
             WRITE_SHORT 0x0080 range //range-check
           END
        END
    PATCH_IF !FILE_EXISTS_IN_GAME ~%cus2%B.SPL~ BEGIN  //
           INNER_ACTION BEGIN
           COPY_EXISTING ~%cus0%.SPL~ ~override/%cus2%B.SPL~
             WRITE_LONG 0x0008 ~%name%~
             WRITE_LONG 0x0034 level //spell level
             WRITE_LONG 0x000c ~%name%~
             WRITE_LONG 0x0054 ~%desc%~
             WRITE_SHORT 0x007E target //Target-check
             WRITE_SHORT 0x0080 range //range-check
             LPF ALTER_EFFECT_ADD
               INT_VAR savebonus_add = 1          //
             END      //
           END
        END ELSE
        BEGIN
          INNER_ACTION BEGIN
           COPY_EXISTING ~%cus2%B.SPL~ ~override~
             LPF ALTER_EFFECT_ADD
               INT_VAR savebonus_add = 1          //
             END      //
          END
        END
    PATCH_IF !FILE_EXISTS_IN_GAME ~%cus2%C.SPL~ BEGIN  //
           INNER_ACTION BEGIN
           COPY_EXISTING ~%cus0%.SPL~ ~override/%cus2%C.SPL~
             WRITE_LONG 0x0008 ~%name%~
             WRITE_LONG 0x0034 level //spell level
             WRITE_LONG 0x000c ~%name%~
             WRITE_LONG 0x0054 ~%desc%~
             WRITE_SHORT 0x007E target //Target-check
             WRITE_SHORT 0x0080 range //range-check
             LPF ALTER_EFFECT_ADD
               INT_VAR savebonus_add =  2          //
             END      //
           END
        END ELSE
        BEGIN
          INNER_ACTION BEGIN
           COPY_EXISTING ~%cus2%C.SPL~ ~override~
             LPF ALTER_EFFECT_ADD
               INT_VAR savebonus_add = 2          //
             END      //
          END
        END
        PATCH_IF !FILE_EXISTS_IN_GAME ~%cus2%D.SPL~ BEGIN  //
           INNER_ACTION BEGIN
           COPY_EXISTING ~%cus0%.SPL~ ~override/%cus2%D.SPL~
             WRITE_LONG 0x0008 ~%name%~
             WRITE_LONG 0x0034 level //spell level
             WRITE_LONG 0x000c ~%name%~
             WRITE_LONG 0x0054 ~%desc%~
             WRITE_SHORT 0x007E target //Target-check
             WRITE_SHORT 0x0080 range //range-check
             LPF ALTER_EFFECT_ADD
               INT_VAR savebonus_add = 3          //
             END      //
           END
         END ELSE
        BEGIN
          INNER_ACTION BEGIN
           COPY_EXISTING ~%cus2%D.SPL~ ~override~
             LPF ALTER_EFFECT_ADD
               INT_VAR savebonus_add = 3          //
             END      //
          END
        END
         PATCH_IF !FILE_EXISTS_IN_GAME ~%cus2%E.SPL~ BEGIN  //
           INNER_ACTION BEGIN
           COPY_EXISTING ~%cus0%.SPL~ ~override/%cus2%E.SPL~
             WRITE_LONG 0x0008 ~%name%~
             WRITE_LONG 0x0034 level //spell level
             WRITE_LONG 0x000c ~%name%~
             WRITE_LONG 0x0054 ~%desc%~
             WRITE_SHORT 0x007E target //Target-check
             WRITE_SHORT 0x0080 range //range-check
             LPF ALTER_EFFECT_ADD
               INT_VAR savebonus_add = 4          //
             END      //
           END
         END ELSE
        BEGIN
          INNER_ACTION BEGIN
           COPY_EXISTING ~%cus2%E.SPL~ ~override~
             LPF ALTER_EFFECT_ADD
               INT_VAR savebonus_add = 4          //
             END      //
          END
        END
      PATCH_IF !FILE_EXISTS_IN_GAME ~%cus2%F.SPL~ BEGIN  //
           INNER_ACTION BEGIN
           COPY_EXISTING ~%cus0%.SPL~ ~override/%cus2%F.SPL~
             WRITE_LONG 0x0008 ~%name%~
             WRITE_LONG 0x0034 level //spell level
             WRITE_LONG 0x000c ~%name%~
             WRITE_LONG 0x0054 ~%desc%~
             WRITE_SHORT 0x007E target //Target-check
             WRITE_SHORT 0x0080 range //range-check
             LPF ALTER_EFFECT_ADD
               INT_VAR savebonus_add = 5          //
             END      //
           END
         END ELSE
        BEGIN
          INNER_ACTION BEGIN
           COPY_EXISTING ~%cus2%F.SPL~ ~override~
             LPF ALTER_EFFECT_ADD
               INT_VAR savebonus_add = 5          //
             END      //
          END
        END
            END //evoc school
           END  //not no save(?)
        END  //wiz spells
      END   //source size
    BUT_ONLY


 


 

Link to comment

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...