Adding Splstates
Grammarsalad opened this issue · 0 comments
Grammarsalad commented
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