diff --git a/config/splat.md_SC03_135.yaml b/config/splat.md_SC03_135.yaml index a87880747..fa690288a 100644 --- a/config/splat.md_SC03_135.yaml +++ b/config/splat.md_SC03_135.yaml @@ -94,7 +94,9 @@ segments: # 0x801E25E8 ahead of the code, a 1-word analogue of main's rodata-island (no ld_interleave). # - [0x0, rodata, head] - [0x0, .rodata, md_SC03_135] # module-id header (+jtbl/ptr table) — §154-A - - [0x27C, c, md_SC03_135] + - [0x268, .rodata, md_SC03_135_jr_801E5358] # §154-A island split (jtbl_carve --island-split) + - [0x27c, c, md_SC03_135] + - [0x2d70, c, md_SC03_135_jr_801E5358] - [0x3594, data, tail] # data tail: pointer tables + packed data (split iterated) - [0x880C] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/src/md_SC03_135/md_SC03_135.c b/src/md_SC03_135/md_SC03_135.c index b13119ae9..8fdcd6a61 100644 --- a/src/md_SC03_135/md_SC03_135.c +++ b/src/md_SC03_135/md_SC03_135.c @@ -751,215 +751,3 @@ void func_801E5324(void) { extern u8 D_800AF040[]; func_8001ABBC(0, 0, D_800AF040, 0, 0); } - - -INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135", func_801E5358); - - - -void func_801E54A4(void *a0) { - - extern void (*D_801E67E0[])(void); - D_801E67E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135", func_801E54E0); - - - -void func_801E54F0(void) { - - extern s32 D_801EAC6C; - D_801EAC6C = 1; -} - - - - -s32 func_801E5504(void) { - - extern s32 D_801EAC6C; - return D_801EAC6C; -} - - -INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135", func_801E5514); - -INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135", func_801E559C); - -INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135", func_801E5624); - -INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135", func_801E56A8); - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, s32 a1); -extern void func_8012E8E0(s32 a0, s32 a1); -extern s32 func_80178B18(s32 a0, s32 a1); - -void func_801E57C4(void *a0) { - extern s32 D_801CEA24; - extern s32 D_801BEAF8; - extern s32 D_801E669C; - extern s32 D_801E66CC; - s32 v0; - s32 ptr; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)a0 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(a0); - } else { - func_8001C214(v0, (s32)&D_801CEA24); - ptr = *(s32 *)((s32)a0 + 0x68); - *(s16 *)(ptr + 0xC) = 0x7FFF; - *(s16 *)((s32)a0 + 0x2) = 1; - func_8012A828((s32)a0, (s32)&D_801BEAF8); - func_8012E8E0((s32)a0, (s32)&D_801E669C); - *(s16 *)((s32)a0 + 0x34) = 0; - func_80178B18((s32)a0, (s32)&D_801E66CC); - } -} - - -void *func_801E585C(void) { - typedef struct { s32 x, y, z; } SV4; - extern u8 D_80078EB1; - extern u8 D_80078E78[]; - extern u32 D_801E6C68; - extern u32 D_801E6D8C; - extern s32 D_801EADF0; - extern void func_801E5A7C(void); - extern s32 func_80029504(void); - extern s32 func_801E5A1C(s32, s32, s32); - extern void func_801E5A34(s32, s32, s32); - extern void func_80029124(s32 a0, s32 a1); - extern void func_801E5AAC(void); - extern void func_801E5AFC(void); - extern void func_801E5B3C(void); - extern SV4 D_801EAC70; - s32 v; - u8 *p; - - p = D_80078E78; - func_801E5A7C(); - v = func_80029504(); - - if (v >= 0xC8) { - if (v < 0x258) { - if (func_801E5A1C(D_80078EB1, 0xD, 0x18)) { - if ((u32)(v - 0x136) < 0x46) { - func_801E5A34(0xA, (s32)&D_801E6C68, (s32)func_801E5AFC); - func_80029124(0x112, 1); - } else { - func_801E5A34(0xA, 0, 0); - } - } else { - func_801E5A34(0xA, 0, 0); - } - if (func_801E5A1C(p[0x39], 0xD, 0x18)) { - if ((u32)(v - 0x136) < 0x46) { - func_801E5A34(0xB, (s32)&D_801E6D8C, (s32)func_801E5B3C); - } else { - func_801E5A34(0xB, 0, 0); - } - } else { - func_801E5A34(0xB, 0, 0); - } - } else { - func_801E5A34(0xA, 0, 0); - func_801E5A34(0xB, 0, 0); - } - } else { - func_801E5A34(0xA, 0, 0); - func_801E5A34(0xB, 0, 0); - } - func_801E5AAC(); - if (D_801EADF0 == 0) { - return 0; - } - return &D_801EAC70; -} - - -s32 func_801E5998(s32 a0) { - extern s32 D_801EADF0; - extern s32 D_801EAC78; - extern s32 D_801EAC74; - s32 s0; - s32 v0; - s32 v1; - s32 limit; - func_801E585C(); - s0 = a0; - v0 = D_801EADF0; - if (v0 > 0) { - v1 = 0; - limit = v0 * 16; - do { - if (*(s32 *)((s32)&D_801EAC78 + v1) == s0) { - return *(s32 *)((s32)&D_801EAC74 + v1); - } - v1 += 16; - } while (v1 < limit); - } - return 0; -} - - -s32 func_801E5A1C(s32 a0, s32 a1, s32 a2) { - return (a0 >= a1) && (a0 < a2); -} - - -void func_801E5A34(s32 a0, s32 a1, s32 a2) { - extern s32 D_801EADF0; - extern s32 D_801EAC74[][4]; - extern s32 D_801EAC78[][4]; - extern s32 D_801EAC7C[][4]; - s32 n = D_801EADF0; - D_801EAC78[n][0] = a0; - D_801EAC74[n][0] = a1; - D_801EAC7C[n][0] = a2; - D_801EADF0 = n + 1; -} - - -extern s32 D_801EAC70; -extern s32 D_801EADF0; -extern void func_80016714(void *a0, s32 a1); - -void func_801E5A7C(void) { - func_80016714(&D_801EAC70, 0x180); - D_801EADF0 = 0; -} - - -INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135", func_801E5AAC); - -extern s32 func_80029504(void); -extern void func_80029124(s32 a0, s32 a1); -extern void func_80029514(s32 arg0); - -void func_801E5AFC(void) { - func_80029124(0xFD, 0x1); - if (((s32 (*)(void))func_80029504)() == 0x136) { - ((void (*)(s32))func_80029514)(0x140); - } -} - - -extern s32 func_80029504(void); -extern void func_80029124(s32 a0, s32 a1); -extern void func_80029514(s32 arg0); - -void func_801E5B3C(void) { - func_80029124(0xFE, 0x1); - if (((s32 (*)(void))func_80029504)() == 0x136) { - ((void (*)(s32))func_80029514)(0x140); - } -} - diff --git a/src/md_SC03_135/md_SC03_135_jr_801E5358.c b/src/md_SC03_135/md_SC03_135_jr_801E5358.c new file mode 100644 index 000000000..9ba87c4ab --- /dev/null +++ b/src/md_SC03_135/md_SC03_135_jr_801E5358.c @@ -0,0 +1,361 @@ +#include "common.h" + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +typedef struct { s16 m[3][3]; s32 t[3]; } MTX_C974_801E3540; +typedef struct { u32 w[38]; } Blk152_8017DF40_801E48B8; +typedef struct { u8 b[4]; } Blk4_8017DF40_801E48B8; +typedef struct { u8 c[8]; } Blk8; +typedef struct { short m[3][3]; long t[3]; } MATRIX_801EDED4_801E5124; +typedef struct { short vx, vy, vz, pad; } SVECTOR_801EDED4_801E5124; +extern s32 func_801E288C(void); +extern s32 func_80029504(void); +extern void func_801E2980(s32 arg0, s32 arg1); +extern void func_801E28D0(void); +extern void func_801E295C(void); +extern s16 func_801E2970(void); +extern u16 D_80115116; +extern unsigned short D_80115112; +extern void (*D_801E65D0[])(void); +extern void func_80141C04(void); +extern void func_801E29F8(void); +extern void func_801E2BC4(void); +extern void func_801E2BE0(void); +extern void func_801E2CC0(void); +extern void func_800D2624(void); +extern void func_801E2CDC(void); +extern s32 func_80024054(u8 *, u8 *); +extern s32 func_800D2650(s32, u8 *, s16, s16, s32, s32); +extern s32 func_800D27DC(s32, s32, void *, s16, s32); +extern s32 func_800D29F8(s32, s32, void *, s16, s32); +extern s32 func_801E3830(s32, s16, s16, s16, s32 *); +extern s32 func_801E3540(s32 ot, u8 *s, s16 c); +extern u32 func_801E45C0(s32 a0, s32 a1); +extern void func_801E4890(void); +extern void func_801E48B8(s32 arg0); +extern void func_8014B00C(void); +extern void func_80029344(void); +extern void func_801E4BA4(void); +extern u8 *D_80126B10; +extern u8 D_801E6644[]; +extern void func_80175414(s32 _arg0); +void func_800167B8(int); +extern int func_801E4BCC(u8 *arg); +extern s32 func_800167F0(s32 a0); +extern s32 func_801E4C24(void); +extern s32 func_800D1E28(void); +extern s32 func_8002D4C8(s32, s32); +extern s32 func_8001BFD0(void); +extern s32 func_800291B4(s32); +extern s32 func_80029524(void); +extern s32 func_800D0C48(s32); +extern s32 func_801E4C9C(s32 param_1); +extern void func_800D1EBC(void); +extern void func_801E4D3C(void); +extern void func_801E4D5C(void *a0); +extern s32 func_801E4D98(void *a0); +extern void func_801E4E04(void *a0); +extern void func_80171A1C(void*); +extern void func_801E4E40(void); +extern s32 func_80171D78(u32, void *); +extern void func_801E4E68(u32 arg0); +extern s32 func_80014C54(s32, s32, s32); +extern void func_800D1724(void *); +extern void func_80171A1C(void *); +extern void func_801E4ED0(void *arg0); +extern void func_801E4F28(void); +extern void func_801E4F30(void *a0); +extern void func_801E4F6C(void); +extern void func_801E4F8C(u32 arg0); +extern void func_801E4FF4(void); +extern void func_8012A018(s32 a0, s32 a1); +extern void func_8012A094(s32 a0); +extern void func_801E50C0(void *a0); +extern void func_801E4FFC(void); +extern void func_801E5124(s32 param_1, s16 *param_2); +extern void func_801E50FC(s32 param_1); +extern u16 func_80148800(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern s32 func_801E531C(void); +extern void func_8001ABBC(u32, u32, void *, u32, u32); +extern void func_801E5324(void); +/* ==== end §8b carried decl layer ==== */ + + + + + + + +extern u8 *D_80126B10; +extern u8 D_801E672C[]; +extern u8 D_801E6798[]; +extern u8 D_801E67B0[]; +extern s32 func_801789AC(u8 *a0); +extern void func_80178CBC(u8 *a0, u8 *a1); +extern s16 func_80185B78(void); +extern void func_80185B88(s32 a0); +extern void func_80174438(s32 a0); +extern void func_801E2864(void); +extern s32 func_801E288C(void); + +void func_801E5358(u8 *a0) { + switch (*(u16 *)(a0 + 0x34)) { + case 0: + switch (func_801789AC(a0)) { + case 2: + func_80178CBC(a0, D_801E6798); + *(u16 *)(a0 + 0x34) = 0; + break; + case 1: + *(u16 *)(a0 + 0x34) = 2; + func_80185B88(4); + break; + case 3: + func_80178CBC(a0, D_801E67B0); + *(u16 *)(a0 + 0x34) = 3; + break; + } + break; + case 1: + break; + case 2: + if (func_80185B78() != 0) { + func_801E2864(); + *(u16 *)(a0 + 0x34) = 4; + } else { + func_80178CBC(a0, D_801E672C); + *(u16 *)(a0 + 0x34) = 0; + } + break; + case 3: + if (func_801789AC(a0) != 0) { + func_80174438((*(s32 *)&D_80126B10)); + *(u16 *)(a0 + 0x34) = 1; + } + break; + case 4: + if (((s16 (*)(void))func_801E288C)() != 0) { + *(u16 *)(a0 + 0x34) = 2; + func_80185B88(4); + } + break; + } +} + + + + +void func_801E54A4(void *a0) { + + extern void (*D_801E67E0[])(void); + D_801E67E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135_jr_801E5358", func_801E54E0); + + + +void func_801E54F0(void) { + + extern s32 D_801EAC6C; + D_801EAC6C = 1; +} + + + + +s32 func_801E5504(void) { + + extern s32 D_801EAC6C; + return D_801EAC6C; +} + + +INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135_jr_801E5358", func_801E5514); + +INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135_jr_801E5358", func_801E559C); + +INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135_jr_801E5358", func_801E5624); + +INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135_jr_801E5358", func_801E56A8); + + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, s32 a1); +extern void func_8012E8E0(s32 a0, s32 a1); +extern s32 func_80178B18(s32 a0, s32 a1); + +void func_801E57C4(void *a0) { + extern s32 D_801CEA24; + extern s32 D_801BEAF8; + extern s32 D_801E669C; + extern s32 D_801E66CC; + s32 v0; + s32 ptr; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)a0 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(a0); + } else { + func_8001C214(v0, (s32)&D_801CEA24); + ptr = *(s32 *)((s32)a0 + 0x68); + *(s16 *)(ptr + 0xC) = 0x7FFF; + *(s16 *)((s32)a0 + 0x2) = 1; + func_8012A828((s32)a0, (s32)&D_801BEAF8); + func_8012E8E0((s32)a0, (s32)&D_801E669C); + *(s16 *)((s32)a0 + 0x34) = 0; + func_80178B18((s32)a0, (s32)&D_801E66CC); + } +} + + +void *func_801E585C(void) { + typedef struct { s32 x, y, z; } SV4; + extern u8 D_80078EB1; + extern u8 D_80078E78[]; + extern u32 D_801E6C68; + extern u32 D_801E6D8C; + extern s32 D_801EADF0; + extern void func_801E5A7C(void); + extern s32 func_80029504(void); + extern s32 func_801E5A1C(s32, s32, s32); + extern void func_801E5A34(s32, s32, s32); + extern void func_80029124(s32 a0, s32 a1); + extern void func_801E5AAC(void); + extern void func_801E5AFC(void); + extern void func_801E5B3C(void); + extern SV4 D_801EAC70; + s32 v; + u8 *p; + + p = D_80078E78; + func_801E5A7C(); + v = func_80029504(); + + if (v >= 0xC8) { + if (v < 0x258) { + if (func_801E5A1C(D_80078EB1, 0xD, 0x18)) { + if ((u32)(v - 0x136) < 0x46) { + func_801E5A34(0xA, (s32)&D_801E6C68, (s32)func_801E5AFC); + func_80029124(0x112, 1); + } else { + func_801E5A34(0xA, 0, 0); + } + } else { + func_801E5A34(0xA, 0, 0); + } + if (func_801E5A1C(p[0x39], 0xD, 0x18)) { + if ((u32)(v - 0x136) < 0x46) { + func_801E5A34(0xB, (s32)&D_801E6D8C, (s32)func_801E5B3C); + } else { + func_801E5A34(0xB, 0, 0); + } + } else { + func_801E5A34(0xB, 0, 0); + } + } else { + func_801E5A34(0xA, 0, 0); + func_801E5A34(0xB, 0, 0); + } + } else { + func_801E5A34(0xA, 0, 0); + func_801E5A34(0xB, 0, 0); + } + func_801E5AAC(); + if (D_801EADF0 == 0) { + return 0; + } + return &D_801EAC70; +} + + +s32 func_801E5998(s32 a0) { + extern s32 D_801EADF0; + extern s32 D_801EAC78; + extern s32 D_801EAC74; + s32 s0; + s32 v0; + s32 v1; + s32 limit; + func_801E585C(); + s0 = a0; + v0 = D_801EADF0; + if (v0 > 0) { + v1 = 0; + limit = v0 * 16; + do { + if (*(s32 *)((s32)&D_801EAC78 + v1) == s0) { + return *(s32 *)((s32)&D_801EAC74 + v1); + } + v1 += 16; + } while (v1 < limit); + } + return 0; +} + + +s32 func_801E5A1C(s32 a0, s32 a1, s32 a2) { + return (a0 >= a1) && (a0 < a2); +} + + +void func_801E5A34(s32 a0, s32 a1, s32 a2) { + extern s32 D_801EADF0; + extern s32 D_801EAC74[][4]; + extern s32 D_801EAC78[][4]; + extern s32 D_801EAC7C[][4]; + s32 n = D_801EADF0; + D_801EAC78[n][0] = a0; + D_801EAC74[n][0] = a1; + D_801EAC7C[n][0] = a2; + D_801EADF0 = n + 1; +} + + +extern s32 D_801EAC70; +extern s32 D_801EADF0; +extern void func_80016714(void *a0, s32 a1); + +void func_801E5A7C(void) { + func_80016714(&D_801EAC70, 0x180); + D_801EADF0 = 0; +} + + +INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135_jr_801E5358", func_801E5AAC); + +extern s32 func_80029504(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_80029514(s32 arg0); + +void func_801E5AFC(void) { + func_80029124(0xFD, 0x1); + if (((s32 (*)(void))func_80029504)() == 0x136) { + ((void (*)(s32))func_80029514)(0x140); + } +} + + +extern s32 func_80029504(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_80029514(s32 arg0); + +void func_801E5B3C(void) { + func_80029124(0xFE, 0x1); + if (((s32 (*)(void))func_80029504)() == 0x136) { + ((void (*)(s32))func_80029514)(0x140); + } +} + +