From 5304b4759f200759c0cdddec4eb0aaa6ae1b9aaa Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 7 Mar 2021 01:50:27 +0100 Subject: [PATCH] Detect CallWithArg that pass a pointer to a script as an argument --- data/scripts/script_0800A0FC.inc | 2 +- data/scripts/script_0800A160.inc | 2 +- data/scripts/script_0800A310.inc | 2 +- data/scripts/script_0800A3D8.inc | 4 ++-- data/scripts/script_0800A500.inc | 2 +- data/scripts/script_0800A590.inc | 2 +- data/scripts/script_0800AD54.inc | 2 +- data/scripts/script_080100C8.inc | 2 +- data/scripts/script_080116A8.inc | 4 ++-- data/scripts/script_080133F8.inc | 2 +- data/scripts/script_080134DC.inc | 18 +++++++------- data/scripts/script_08013720.inc | 20 ++++++++-------- data/scripts/script_080138B4.inc | 24 +++++++++---------- data/scripts/script_08013BA8.inc | 2 +- data/scripts/script_08015684.inc | 2 +- tools/script_disassembler/definitions.py | 16 +++++++++---- .../script_disassembler/split_script_data.py | 5 ++-- 17 files changed, 59 insertions(+), 52 deletions(-) diff --git a/data/scripts/script_0800A0FC.inc b/data/scripts/script_0800A0FC.inc index 774a075d..46bd1328 100644 --- a/data/scripts/script_0800A0FC.inc +++ b/data/scripts/script_0800A0FC.inc @@ -12,7 +12,7 @@ script_0800A0FE: Call sub_0807F844 _0807E8E4_3 CallWithArg sub_0807F75C, 0x00d00060 - CallWithArg sub_08094AE8, 0x0800a160 + CallWithArg sub_08094AE8, script_0800A160 SoundReq 0x00f7 _0807E778 0x0002 DoFade6 diff --git a/data/scripts/script_0800A160.inc b/data/scripts/script_0800A160.inc index 6dda1842..28d242c0 100644 --- a/data/scripts/script_0800A160.inc +++ b/data/scripts/script_0800A160.inc @@ -6,7 +6,7 @@ SCRIPT_START script_0800A160 _0807E930 0x0002 SetEntityPositionRelative 0x00b0, 0x0080 CallWithArg sub_0807F98C, 0xff800000 - CallWithArg sub_080960C4, 0x0800a1b4 + CallWithArg sub_080960C4, script_0800A1B4 EndBlock SoundReq 0x0142 _0807EF3C 0xff80, 0x0000 diff --git a/data/scripts/script_0800A310.inc b/data/scripts/script_0800A310.inc index 3ddd8246..e8d67562 100644 --- a/data/scripts/script_0800A310.inc +++ b/data/scripts/script_0800A310.inc @@ -37,7 +37,7 @@ SCRIPT_START script_0800A310 Call sub_0807F2D4 _0807E5F8 0x00000040 WaitForSomething2 0x00000002 - CallWithArg sub_080960C4, 0x0800a680 + CallWithArg sub_080960C4, script_0800A680 _0807E5F8 0x00000040 SCRIPT_END .short 0x0000 diff --git a/data/scripts/script_0800A3D8.inc b/data/scripts/script_0800A3D8.inc index 4e69732f..bd3a9564 100644 --- a/data/scripts/script_0800A3D8.inc +++ b/data/scripts/script_0800A3D8.inc @@ -28,7 +28,7 @@ SCRIPT_START script_0800A3D8 _0807EB44 0x0004 _0807EF80 0x0000 SoundReq 0x0142 - CallWithArg sub_080960C4, 0x0800a638 + CallWithArg sub_080960C4, script_0800A638 _0807E5F8 0x00000080 WaitForSomething2 0x00000004 SoundReq 0x0143 @@ -39,7 +39,7 @@ SCRIPT_START script_0800A3D8 _0807E5F8 0x00000080 WaitForSomething2 0x00000004 SoundReq 0x0142 - CallWithArg sub_080960C4, 0x0800a680 + CallWithArg sub_080960C4, script_0800A680 Wait 0x0078 SoundReq 0x0153 CallWithArg sub_0807FADC, 0x00000003 diff --git a/data/scripts/script_0800A500.inc b/data/scripts/script_0800A500.inc index 4503d7b4..5f94f54f 100644 --- a/data/scripts/script_0800A500.inc +++ b/data/scripts/script_0800A500.inc @@ -9,7 +9,7 @@ SCRIPT_START script_0800A500 WaitForSomething2 0x00000008 SoundReq 0x0142 _0807E610 0x00000800 - CallWithArg sub_080960C4, 0x0800a65c + CallWithArg sub_080960C4, script_0800A65C _0807E930 0x0002 Call sub_08094B0C _0807EDD4 0x0068, 0x0088 diff --git a/data/scripts/script_0800A590.inc b/data/scripts/script_0800A590.inc index d55b6cad..fa9442e2 100644 --- a/data/scripts/script_0800A590.inc +++ b/data/scripts/script_0800A590.inc @@ -14,7 +14,7 @@ SCRIPT_START script_0800A590 _0807EF80 0x0007 SoundReq 0x0142 _0807E610 0x00000800 - CallWithArg sub_080960C4, 0x0800a65c + CallWithArg sub_080960C4, script_0800A65C Wait 0x003c _0807EDD4 0x0088, 0x0068 Wait 0x0078 diff --git a/data/scripts/script_0800AD54.inc b/data/scripts/script_0800AD54.inc index c999af5c..584626aa 100644 --- a/data/scripts/script_0800AD54.inc +++ b/data/scripts/script_0800AD54.inc @@ -40,7 +40,7 @@ SCRIPT_START script_0800AD54 Call sub_0807F2D4 _0807E5F8 0x00000004 WaitForSomething2 0x00000002 - CallWithArg sub_080960C4, 0x0800af18 + CallWithArg sub_080960C4, script_0800AF18 _0807E930 0x0012 Call sub_0807F2D4 Wait 0x001e diff --git a/data/scripts/script_080100C8.inc b/data/scripts/script_080100C8.inc index 9c1b8c94..f226288c 100644 --- a/data/scripts/script_080100C8.inc +++ b/data/scripts/script_080100C8.inc @@ -59,7 +59,7 @@ script_0801015A: Call sub_080A1608 _0807EA94 _0807E878 - CallWithArg sub_080A1550, 0x080101ac + CallWithArg sub_080A1550, script_080101AC JumpIfNot script_0801015A SoundReq2 0x0015 SetRoomFlag 0x0001 diff --git a/data/scripts/script_080116A8.inc b/data/scripts/script_080116A8.inc index dbfb12e9..f0cee9c2 100644 --- a/data/scripts/script_080116A8.inc +++ b/data/scripts/script_080116A8.inc @@ -33,7 +33,7 @@ SCRIPT_START script_080116A8 _0807EB44 0x0000 _0807EF80 0x0014 SoundReq 0x0120 - CallWithArg sub_08095420, 0x08011890 + CallWithArg sub_08095420, script_08011890 Wait 0x00f0 _0807EF80 0x0016 SoundReq 0x01cb @@ -50,7 +50,7 @@ SCRIPT_START script_080116A8 WaitForSomething2 0x00000100 _0807EF80 0x0014 SoundReq 0x01c4 - CallWithArg sub_0809545C, 0x080118d4 + CallWithArg sub_0809545C, script_080118D4 _0807E5F8 0x00000200 WaitForSomething2 0x00000100 Wait 0x003c diff --git a/data/scripts/script_080133F8.inc b/data/scripts/script_080133F8.inc index ca760b2d..2eafd8d1 100644 --- a/data/scripts/script_080133F8.inc +++ b/data/scripts/script_080133F8.inc @@ -15,7 +15,7 @@ SCRIPT_START script_080133F8 Wait 0x003c _0807EF80 0x0014 SoundReq 0x0120 - CallWithArg sub_08095420, 0x08013494 + CallWithArg sub_08095420, script_08013494 Wait 0x005a _0807EF80 0x0016 WaitForSomething2 0x00000080 diff --git a/data/scripts/script_080134DC.inc b/data/scripts/script_080134DC.inc index 38000013..293a7179 100644 --- a/data/scripts/script_080134DC.inc +++ b/data/scripts/script_080134DC.inc @@ -13,33 +13,33 @@ script_080134F8: Call sub_0807DF28 StartPlayerScript script_080136D8 WaitForSomething2 0x00000001 - CallWithArg sub_08095A1C, 0x08013f04 + CallWithArg sub_08095A1C, script_08013F04 SoundReq 0x01cd Wait 0x005a BeginBlock SoundReq 0x01ce - CallWithArg sub_08095D54, 0x08013e04 - CallWithArg sub_08095D54, 0x08013e28 + CallWithArg sub_08095D54, script_08013E04 + CallWithArg sub_08095D54, script_08013E28 EndBlock WaitForSomething2 0x18000000 BeginBlock SoundReq 0x01cf - CallWithArg sub_08095D8C, 0x08014054 - CallWithArg sub_08095D8C, 0x08014074 + CallWithArg sub_08095D8C, script_08014054 + CallWithArg sub_08095D8C, script_08014074 EndBlock Wait 0x001e BeginBlock SoundReq 0x01d0 - CallWithArg sub_08095D8C, 0x080140dc - CallWithArg sub_08095D8C, 0x08014118 + CallWithArg sub_08095D8C, script_080140DC + CallWithArg sub_08095D8C, script_08014118 EndBlock Wait 0x003c CallWithArg sub_0805DDEC, 0x00000000 _0807E5F8 0x00000200 WaitForSomething2 0x00002000 SoundReq 0x01d2 - CallWithArg sub_08095D8C, 0x080141dc - CallWithArg sub_08095D8C, 0x08014210 + CallWithArg sub_08095D8C, script_080141DC + CallWithArg sub_08095D8C, script_08014210 _0807E5F8 0x00000400 WaitForSomething2 0x00004000 Wait 0x0078 diff --git a/data/scripts/script_08013720.inc b/data/scripts/script_08013720.inc index 9de5c1f6..05a00285 100644 --- a/data/scripts/script_08013720.inc +++ b/data/scripts/script_08013720.inc @@ -13,34 +13,34 @@ script_0801373C: Call sub_0807DF28 StartPlayerScript script_080136D8 WaitForSomething2 0x00000001 - CallWithArg sub_08095A1C, 0x08013f34 + CallWithArg sub_08095A1C, script_08013F34 SoundReq 0x01cd Wait 0x005a BeginBlock SoundReq 0x01ce - CallWithArg sub_08095D54, 0x08013e4c + CallWithArg sub_08095D54, script_08013E4C EndBlock WaitForSomething2 0x20000000 BeginBlock SoundReq 0x01cf - CallWithArg sub_08095D8C, 0x08014054 - CallWithArg sub_08095D8C, 0x08014074 - CallWithArg sub_08095D8C, 0x08014094 + CallWithArg sub_08095D8C, script_08014054 + CallWithArg sub_08095D8C, script_08014074 + CallWithArg sub_08095D8C, script_08014094 EndBlock Wait 0x001e BeginBlock SoundReq 0x01d0 - CallWithArg sub_08095D8C, 0x080140dc - CallWithArg sub_08095D8C, 0x08014118 - CallWithArg sub_08095D8C, 0x08014154 + CallWithArg sub_08095D8C, script_080140DC + CallWithArg sub_08095D8C, script_08014118 + CallWithArg sub_08095D8C, script_08014154 EndBlock Wait 0x003c CallWithArg sub_0805DDEC, 0x00000000 _0807E5F8 0x00000200 WaitForSomething2 0x00002000 SoundReq 0x01d2 - CallWithArg sub_08095D8C, 0x080141dc - CallWithArg sub_08095D8C, 0x08014210 + CallWithArg sub_08095D8C, script_080141DC + CallWithArg sub_08095D8C, script_08014210 _0807E5F8 0x00000400 WaitForSomething2 0x00004000 _0807E5F8 0x00000800 diff --git a/data/scripts/script_080138B4.inc b/data/scripts/script_080138B4.inc index f3521f49..9b260191 100644 --- a/data/scripts/script_080138B4.inc +++ b/data/scripts/script_080138B4.inc @@ -13,36 +13,36 @@ script_080138D0: Call sub_0807DF28 StartPlayerScript script_080136D8 WaitForSomething2 0x00000001 - CallWithArg sub_08095A1C, 0x08013f64 + CallWithArg sub_08095A1C, script_08013F64 SoundReq 0x01cd Wait 0x005a BeginBlock SoundReq 0x01ce - CallWithArg sub_08095D54, 0x08013e70 + CallWithArg sub_08095D54, script_08013E70 EndBlock WaitForSomething2 0x40000000 BeginBlock SoundReq 0x01cf - CallWithArg sub_08095D8C, 0x08014054 - CallWithArg sub_08095D8C, 0x08014074 - CallWithArg sub_08095D8C, 0x08014094 - CallWithArg sub_08095D8C, 0x080140b8 + CallWithArg sub_08095D8C, script_08014054 + CallWithArg sub_08095D8C, script_08014074 + CallWithArg sub_08095D8C, script_08014094 + CallWithArg sub_08095D8C, script_080140B8 EndBlock Wait 0x001e BeginBlock SoundReq 0x01d0 - CallWithArg sub_08095D8C, 0x080140dc - CallWithArg sub_08095D8C, 0x08014118 - CallWithArg sub_08095D8C, 0x08014154 - CallWithArg sub_08095D8C, 0x08014198 + CallWithArg sub_08095D8C, script_080140DC + CallWithArg sub_08095D8C, script_08014118 + CallWithArg sub_08095D8C, script_08014154 + CallWithArg sub_08095D8C, script_08014198 EndBlock Wait 0x003c CallWithArg sub_0805DDEC, 0x00000000 _0807E5F8 0x00000200 WaitForSomething2 0x00002000 SoundReq 0x01d2 - CallWithArg sub_08095D8C, 0x080141dc - CallWithArg sub_08095D8C, 0x08014210 + CallWithArg sub_08095D8C, script_080141DC + CallWithArg sub_08095D8C, script_08014210 _0807E5F8 0x00000400 WaitForSomething2 0x00004000 _0807E5F8 0x00000800 diff --git a/data/scripts/script_08013BA8.inc b/data/scripts/script_08013BA8.inc index 42a8b552..d171c4fb 100644 --- a/data/scripts/script_08013BA8.inc +++ b/data/scripts/script_08013BA8.inc @@ -1,5 +1,5 @@ SCRIPT_START script_08013BA8 - CallWithArg sub_08095E7C, 0x08014248 + CallWithArg sub_08095E7C, script_08014248 SoundReq 0x01d3 CallWithArg sub_0807F238, 0x000008e3 Call sub_08096028 diff --git a/data/scripts/script_08015684.inc b/data/scripts/script_08015684.inc index bb16a0f1..6c040c2e 100644 --- a/data/scripts/script_08015684.inc +++ b/data/scripts/script_08015684.inc @@ -29,7 +29,7 @@ SCRIPT_START script_08015684 WaitForSomething2 0x00000800 _0807EB44 0x0004 _0807EF80 0x0014 - CallWithArg sub_0809545C, 0x08015754 + CallWithArg sub_0809545C, script_08015754 SoundReq 0x01c4 Wait 0x0078 _0807EF80 0x0016 diff --git a/tools/script_disassembler/definitions.py b/tools/script_disassembler/definitions.py index fac5ce83..8ec704a4 100644 --- a/tools/script_disassembler/definitions.py +++ b/tools/script_disassembler/definitions.py @@ -1,6 +1,10 @@ from utils import barray_to_u16_hex, barray_to_u32_hex, barray_to_s16 import struct +ROM_OFFSET = 0x08000000 +SCRIPTS_START = 0x08008B5C +SCRIPTS_END = 0x08016984 + # A list of all the commands, their correspondingScriptCommand_ functions and what kind of parameters they take commands = [ {'fun': 'ScriptCommandNop', 'params': ''}, @@ -15,7 +19,7 @@ commands = [ {'fun': 'ScriptCommand_JumpAbsoluteIfNot', 'params': 'x'}, {'fun': 'ScriptCommand_JumpAbsoluteSwitch', 'params': 'xx'}, {'fun': 'ScriptCommand_Call', 'params': 'p'}, - {'fun': 'ScriptCommand_CallWithArg', 'params': ['pw', 'p']}, + {'fun': 'ScriptCommand_CallWithArg', 'params': ['px', 'p']}, {'fun': 'ScriptCommand_LoadRoomEntityList', 'params': 'd'}, {'fun': 'ScriptCommand_TestBit', 'params': 'w'}, {'fun': 'ScriptCommand_CheckInventory1', 'params': 's'}, @@ -181,7 +185,11 @@ def get_data_pointer(barray): def get_script_pointer(barray): integers = struct.unpack('I', barray) - return 'script_' + (struct.pack('>I', integers[0]).hex()).upper() + val = integers[0] + if val >= SCRIPTS_START and val <= SCRIPTS_END: + return 'script_' + (struct.pack('>I', val).hex()).upper() + else: + return '0x'+struct.pack('>I', val).hex() def get_script_label(u32): @@ -285,11 +293,11 @@ parameters = { 'read': lambda ctx: get_pointer(ctx.data[ctx.ptr + 2:ctx.ptr + 6]) }, - 'pw': { + 'px': { 'length': 4, 'param': 'a,b', 'expr': ' .word \\a\n .word \\b', - 'read': lambda ctx: get_pointer(ctx.data[ctx.ptr + 2:ctx.ptr + 6]) + ', ' + barray_to_u32_hex(ctx.data[ctx.ptr + 6:ctx.ptr + 14])[0] + 'read': lambda ctx: get_pointer(ctx.data[ctx.ptr + 2:ctx.ptr + 6]) + ', ' + get_script_pointer(ctx.data[ctx.ptr + 6:ctx.ptr + 10]) }, 'd': { # Data pointer 'length': 2, diff --git a/tools/script_disassembler/split_script_data.py b/tools/script_disassembler/split_script_data.py index 58ffa5a0..8d99df3b 100644 --- a/tools/script_disassembler/split_script_data.py +++ b/tools/script_disassembler/split_script_data.py @@ -1,3 +1,4 @@ +from definitions import ROM_OFFSET, SCRIPTS_END, SCRIPTS_START from script_disassembler import disassemble_script, generate_macros import sys @@ -6,9 +7,7 @@ import sys TMC_FOLDER = '../..' -ROM_OFFSET = 0x08000000 -SCRIPTS_START = 0x08008B5C -SCRIPTS_END = 0x08016984 + # Create labels for these additional script instructions # Currently done by splitting the script at that point