Grammarsalad Posted June 15, 2019 Share Posted June 15, 2019 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 Quote Link to comment
subtledoctor Posted June 16, 2019 Share Posted June 16, 2019 If ALTER_EFFECT/CLONE_EFFECT don't get the job done, then you generally need to get into GET_OFFSET_ARRAY and GET_OFFSET_ARRAY2. Quote Link to comment
Grammarsalad Posted June 16, 2019 Author Share Posted June 16, 2019 Oh yeah, that looks perfect. Thanks Quote Link to comment
Recommended Posts
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.