diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/script_extractor.py | 54 | ||||
-rw-r--r-- | tools/tcgdisasm.py | 3 |
2 files changed, 31 insertions, 26 deletions
diff --git a/tools/script_extractor.py b/tools/script_extractor.py index a4e933e..c55b8cd 100644 --- a/tools/script_extractor.py +++ b/tools/script_extractor.py @@ -89,20 +89,21 @@ def main(): game_data = file.read() auto = not args.noauto - end = False + end = DO_NOT_QUIT ignore_broken = not args.error - while (len(branchList) > 0): + while (len(branchList) > 0 and end != QUIT_DEBUG): branchList.sort() # export parts in order somewhat loc = branchList.pop(0) + 0x8000 - printScript(game_data, loc, auto, end, ignore_broken, scriptList,\ + end = printScript(game_data, loc, auto, ignore_broken, scriptList,\ branchList, exploredList) -def printScript(game_data, loc, auto, end, ignore_broken, scriptList, \ +def printScript(game_data, loc, auto, ignore_broken, scriptList, \ branchList, exploredList): if loc in exploredList: return exploredList.append(loc) script = "" + end = DO_NOT_QUIT if game_data[loc] != 0xe7: #print("Error: first byte was not start_script") print(".ows_" + format(loc,"04x")) @@ -124,28 +125,33 @@ def printScript(game_data, loc, auto, end, ignore_broken, scriptList, \ warning = "" if end == QUIT_CONTINUE_CODE: warning = " WARNING: There is probably regular assembly here" - #elif end == QUIT_SPECIAL: - # warning = "\nWARNING: This will return to the place that began this Sequence" + print("; " + hex(loc) + warning) + # if the next byte is a ret, print it for the continue_code case + if game_data[loc] == 0xc9: + print("\tret") + + return end + def createList(): # this is a func just so all this can go at the bottom # name, arg list, is an ender return [ ("OWScript_EndScriptLoop1", "", QUIT_CONTINUE_CODE), ("OWScript_CloseAdvancedTextBox", "", DO_NOT_QUIT), ("OWScript_PrintTextString", "t", DO_NOT_QUIT), - ("Func_ccdc", "bb", DO_NOT_QUIT), + ("Func_ccdc", "t", DO_NOT_QUIT), ("OWScript_AskQuestionJump", "tj", DO_NOT_QUIT), # more complex behavior too (jumping) ("OWScript_StartBattle", "bbb", DO_NOT_QUIT), ("OWScript_PrintVariableText", "tt", DO_NOT_QUIT), ("Func_cda8", "bbbb", DO_NOT_QUIT), - ("OWScript_PrintTextCloseBox", "t", QUIT_CONTINUE_CODE), + ("OWScript_PrintTextQuitFully", "t", QUIT_SPECIAL), ("Func_cdcb", "", DO_NOT_QUIT), ("Func_ce26", "bb", DO_NOT_QUIT), ("OWScript_CloseTextBox", "", DO_NOT_QUIT), ("OWScript_GiveBoosterPacks", "bbb", DO_NOT_QUIT), - ("Func_cf0c", "bbb", DO_NOT_QUIT), # more complex behavior too (jumping) - ("Func_cf12", "bbb", DO_NOT_QUIT), + ("Func_cf0c", "bj", DO_NOT_QUIT), # more complex behavior too (jumping) + ("Func_cf12", "bj", DO_NOT_QUIT), ("OWScript_GiveCard", "b", DO_NOT_QUIT), ("OWScript_TakeCard", "b", DO_NOT_QUIT), ("Func_cf53", "w", DO_NOT_QUIT), # more complex behavior too (jumping) @@ -159,12 +165,12 @@ def createList(): # this is a func just so all this can go at the bottom ("Func_d032", "w", DO_NOT_QUIT), # see above ("Func_d03f", "", DO_NOT_QUIT), ("OWScript_Jump", "j", QUIT_JUMP), # jumps to d - ("Func_d04f", "", DO_NOT_QUIT), + ("OWScript_TryGiveMedalPCPacks", "", DO_NOT_QUIT), ("OWScript_SetPlayerDirection", "d", DO_NOT_QUIT), ("OWScript_MovePlayer", "db", DO_NOT_QUIT), ("OWScript_ShowCardReceivedScreen", "b", DO_NOT_QUIT), ("OWScript_SetDialogName", "b", DO_NOT_QUIT), - ("OWScript_SetNextNPCandOWSequence", "bj", DO_NOT_QUIT), + ("OWScript_SetNextNPCandOWSequence", "bw", DO_NOT_QUIT), ("Func_d095", "bbb", DO_NOT_QUIT), ("Func_d0be", "bb", DO_NOT_QUIT), ("OWScript_DoFrames", "b", DO_NOT_QUIT), @@ -184,31 +190,31 @@ def createList(): # this is a func just so all this can go at the bottom ("Func_d195", "q", DO_NOT_QUIT), ("Func_d1ad", "", DO_NOT_QUIT), ("Func_d1b3", "q", DO_NOT_QUIT), - ("OWScript_QuitScriptFully", "", QUIT_SPECIAL), # it calls inc twice but it ends anyway? + ("OWScript_QuitScriptFully", "", QUIT_SPECIAL), ("Func_d244", "q", DO_NOT_QUIT), ("Func_d24c", "q", DO_NOT_QUIT), - ("OWScript_OpenDeckMachine", "q", DO_NOT_QUIT), + ("OWScript_OpenDeckMachine", "b", DO_NOT_QUIT), ("Func_d271", "q", DO_NOT_QUIT), ("OWScript_EnterMap", "bbood", DO_NOT_QUIT), - ("Func_ce6f", "bbb", DO_NOT_QUIT), + ("Func_ce6f", "bd", DO_NOT_QUIT), ("Func_d209", "q", DO_NOT_QUIT), ("Func_d38f", "q", DO_NOT_QUIT), - ("Func_d396", "q", DO_NOT_QUIT), - ("Func_cd76", "q", DO_NOT_QUIT), - ("Func_d39d", "q", DO_NOT_QUIT), + ("Func_d396", "b", DO_NOT_QUIT), + ("Func_cd76", "", DO_NOT_QUIT), + ("Func_d39d", "b", DO_NOT_QUIT), ("Func_d3b9", "q", DO_NOT_QUIT), - ("OWScript_GivePCPack", "b", DO_NOT_QUIT), + ("OWScript_TryGivePCPack", "b", DO_NOT_QUIT), ("OWScript_nop", "", DO_NOT_QUIT), ("Func_d3d4", "q", DO_NOT_QUIT), ("Func_d3e0", "", DO_NOT_QUIT), ("Func_d3fe", "q", DO_NOT_QUIT), ("Func_d408", "b", DO_NOT_QUIT), ("Func_d40f", "q", DO_NOT_QUIT), - ("Func_d416", "q", DO_NOT_QUIT), - ("Func_d423", "q", DO_NOT_QUIT), - ("Func_d429", "q", DO_NOT_QUIT), + ("OWScript_PlaySFX", "b", DO_NOT_QUIT), + ("OWScript_PauseSong", "q", DO_NOT_QUIT), + ("OWScript_ResumeSong", "q", DO_NOT_QUIT), ("Func_d41d", "", DO_NOT_QUIT), - ("Func_d42f", "q", DO_NOT_QUIT), + ("OWScript_WaitForSongToFinish", "q", DO_NOT_QUIT), ("Func_d435", "b", DO_NOT_QUIT), ("OWScript_AskQuestionJumpDefaultYes", "tj", DO_NOT_QUIT), ("Func_d2f6", "q", DO_NOT_QUIT), @@ -227,7 +233,7 @@ def createList(): # this is a func just so all this can go at the bottom ("OWScript_JumpIfFlagNotLessThan", "fbj", DO_NOT_QUIT), ("OWScript_JumpIfFlagLessThan", "fbj", DO_NOT_QUIT), ("OWScript_MaxOutFlagValue", "f", DO_NOT_QUIT), - ("OWScript_ZeroOutFlagValue", "q", DO_NOT_QUIT), + ("OWScript_ZeroOutFlagValue", "f", DO_NOT_QUIT), ("OWScript_JumpIfFlagNonzero2", "fj", DO_NOT_QUIT), ("OWScript_JumpIfFlagZero2", "fj", DO_NOT_QUIT), ("OWScript_IncrementFlagValue", "f", DO_NOT_QUIT), diff --git a/tools/tcgdisasm.py b/tools/tcgdisasm.py index 1ca622a..edc5df4 100644 --- a/tools/tcgdisasm.py +++ b/tools/tcgdisasm.py @@ -304,7 +304,7 @@ bit_ops_table = [ "set 7, b", "set 7, c", "set 7, d", "set 7, e", "set 7, h", "set 7, l", "set 7, [hl]", "set 7, a" # $f8 - $ff ] -unconditional_returns = [0xc9, 0xd9] +unconditional_returns = [0xc9, 0xd9, 0xe7] # e7 begins a script, which is not handled by tcgdisasm absolute_jumps = [0xc3, 0xc2, 0xca, 0xd2, 0xda] call_commands = [0xcd, 0xc4, 0xcc, 0xd4, 0xdc, 0xdf, 0xef] relative_jumps = [0x18, 0x20, 0x28, 0x30, 0x38] @@ -765,7 +765,6 @@ class Disassembler(object): found_flag_macro = False for flag_macro in flag_macros: if flag_macro[0] == target_offset: - print "hi" found_flag_macro = True current_flag_macro = flag_macro event_flag = "EVENT_FLAG_" + format(opcode_arg_3, "02X") |