Grammarsalad/Proficiencies

Adding Splstates

Grammarsalad opened this issue · 0 comments

Kjeron's code:

DEFINE_ACTION_FUNCTION ADD_SPLSTATE STR_VAR label = ~~ RET new_ids BEGIN
OUTER_SET new_ids = ~-1~
ACTION_IF FILE_CONTAINS_EVALUATED (~SPLSTATE.IDS~ ~^.+[ %TAB%]%label%\b~) BEGIN
  COPY_EXISTING ~SPLSTATE.IDS~ override
  COUNT_2DA_ROWS 2 rows
  FOR (i = 0; i < rows; ++i) BEGIN
      READ_2DA_ENTRY i 1 2 state_label
          PATCH_IF ~%state_label%~ STRING_EQUAL_CASE ~%label%~ BEGIN
              READ_2DA_ENTRY i 0 2 state_id
              SET new_ids = state_id
           END //state_label
  END //For Loop
  BUT_ONLY
END ELSE BEGIN
        OUTER_FOR (i = 0; i < 256; ++i) BEGIN
            OUTER_SET $occupied_spell_state(~%i%~) = 0
        END //outer_for
    ACTION_IF (~%label%~ STRING_EQUAL ~~) BEGIN FAIL ~Missing Spell State label~ END ELSE BEGIN
    ACTION_IF ((~%label%~ STRING_CONTAINS_REGEXP ~ ~) = 0) BEGIN FAIL ~Spell State label cannot have spaces~ END ELSE BEGIN
        COPY_EXISTING ~SPLSTATE.IDS~ override
            COUNT_2DA_ROWS 2 rows
            FOR (i = 0; i < rows; ++i) BEGIN
                READ_2DA_ENTRY i 0 2 state_id
                SET $occupied_spell_state(~%state_id%~) = 1
            END //for
            FOR (i = 0; i < 256; ++i) BEGIN
                PATCH_IF $occupied_spell_state(~%i%~) = 0 BEGIN
                SET new_ids = i
                SET i = 256
                    PATCH_IF new_ids <= rows BEGIN
                        INSERT_2DA_ROW new_ids 2 ~%new_ids% %label%~
                    END ELSE BEGIN
                        INSERT_2DA_ROW new_ids 2 ~%new_ids% %label%~
                    END
                 END //occupied spell state
            END //for
PATCH_IF (new_ids = ~-1~) BEGIN PATCH_FAIL ~No available Spell States~ END
BUT_ONLY
END
END
END
END //end function


LAF ADD_SPLSTATE STR_VAR label = ~CUSTOM_STATE~ RET new_ids END