From ca6d47f2ace91a1f74d1ea5cffee5e58c589291b Mon Sep 17 00:00:00 2001 From: Flawed <33593723+ff14wed@users.noreply.github.com> Date: Tue, 17 Jan 2023 09:56:33 -0800 Subject: [PATCH] Add script to generate ACT formatted opcodes --- generate_act_format.py | 61 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 generate_act_format.py diff --git a/generate_act_format.py b/generate_act_format.py new file mode 100644 index 0000000..538286f --- /dev/null +++ b/generate_act_format.py @@ -0,0 +1,61 @@ +import re +import click + +# Convert opcodes to the ACT expected format +desired_names = { + "StatusEffectList": None, + "StatusEffectList2": None, + "StatusEffectList3": None, + "BossStatusEffectList": None, + "Effect": "Ability1", + "AoeEffect8": "Ability8", + "AoeEffect16": "Ability16", + "AoeEffect24": "Ability24", + "AoeEffect32": "Ability32", + "ActorCast": None, + "EffectResult": None, + "EffectResultBasic": None, + "ActorControl": None, + "ActorControlSelf": None, + "ActorControlTarget": None, + "UpdateHpMpTp": None, + "PlayerSpawn": None, + "NpcSpawn": None, + "NpcSpawn2": None, + "ActorMove": None, + "ActorSetPos": None, + "ActorGauge": None, + "PlaceFieldMarkerPreset": "PresetWaymark", + "PlaceFieldMarker": "Waymark", + "SystemLogMessage": None +} + +@click.command() +@click.argument("opcodes_file", type=click.File('r')) +def generate_act_format(opcodes_file): + opcode_mapping = dict() + + for line in opcodes_file.readlines(): + match_groups = re.findall(r'^\s*([^\/].*)= (.*),\s*\/\/.*$', line) + if len(match_groups) != 1: + continue + + opcode_name = match_groups[0][0].strip() + opcode_val = match_groups[0][1] + if " or " in opcode_val: + opcodes = [int(v, 16) for v in opcode_val.split(" or ")] + else: + opcodes = [int(opcode_val, 16)] + opcode_mapping[opcode_name] = opcodes + + for name, desired in desired_names.items(): + if desired == None: + desired = name + opcodes = opcode_mapping[name] + if len(opcodes) == 1: + print(f'{desired}|{opcodes[0]:x}') + elif len(opcodes) > 1: + print(f'{desired}|{[f"{opcode:x}" for opcode in opcodes]}') + +if __name__ == "__main__": + generate_act_format() \ No newline at end of file