diff --git a/config/overlays.mk b/config/overlays.mk index 1387fd82b..1e5b80c5a 100644 --- a/config/overlays.mk +++ b/config/overlays.mk @@ -4146,6 +4146,7 @@ build/src/ov_SC06_011/ov_SC06_011_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads ( build/src/ov_SC06_011/ov_SC06_011_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_011/ov_SC06_011_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_011/ov_SC06_011_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178 +build/src/ov_SC06_011/ov_SC06_011_jr_8017BEBC.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC06_011/ov_SC06_011_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118 ov_SC06_011_CHECK_SHA := config/check.ov_SC06_011.sha ov_SC06_011_SYMBOLS := config/symbols.ov_SC06_011.txt diff --git a/config/splat.ov_SC06_011.yaml b/config/splat.ov_SC06_011.yaml index 5233a1faa..ba761b831 100644 --- a/config/splat.ov_SC06_011.yaml +++ b/config/splat.ov_SC06_011.yaml @@ -163,7 +163,7 @@ segments: - [0x826d4, data, tail17] - [0x826d8, .rodata, ov_SC06_011_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x826ec, .rodata, ov_SC06_011_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8270c, data, tail18] + - [0x82728, data, tail18] - [0x83BFC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x83BFF] # 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/ov_SC06_011/ov_SC06_011_jr_8017BEBC.c b/src/ov_SC06_011/ov_SC06_011_jr_8017BEBC.c index d46f313bf..4bd04defc 100644 --- a/src/ov_SC06_011/ov_SC06_011_jr_8017BEBC.c +++ b/src/ov_SC06_011/ov_SC06_011_jr_8017BEBC.c @@ -3191,7 +3191,23 @@ INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8017BEBC", func_8017CDE INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8017BEBC", func_8017CE2C); -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8017BEBC", func_8017CE74); +extern void func_8002931C(s32); +extern s32 D_801ABBF4; +extern u8 *D_801274C8; +extern void *D_801274CC; +extern u8 D_80184664; +extern void (*D_801846B4[])(void); +extern int func_8017DA88(int); + +void func_8017CE74(void) +{ + func_8002931C(0x1A40000); + D_801274C8 = (u8 *)&D_80184664; + D_801ABBF4 = 0; + D_801274CC = (void *)&D_801846B4; + func_8017DA88(3); +} + extern void func_8002931C(s32); extern s32 D_801ABBF4; @@ -3353,7 +3369,33 @@ void func_8017D274(void) { } -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8017BEBC", func_8017D29C); +void func_8017D29C(void) { + extern s32 D_80126954; + extern s32 D_8012695C; + extern s16 D_80126968; + extern s16 D_8012696A; + extern s16 D_8012696C; + extern s16 D_80126976; + extern s16 D_80126978; + extern s16 D_8012697A; + extern u8 D_80126948[]; + extern void func_8012A018(s32, s32); + extern void func_8012A094(s32); + extern void func_8017D594(void *); + + D_80126954 = 0x190; + D_8012695C = 0x384; + D_8012696A = 0x400; + D_80126968 = 0; + D_8012696C = 0; + D_80126976 = 0; + D_80126978 = -0x90; + D_8012697A = 0; + func_8012A018((s32)func_8017D594, 0); + func_8012A094((s32)D_80126948); + func_8017D594((void *)D_80126948); +} + INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8017BEBC", func_8017D334); @@ -3679,7 +3721,72 @@ void func_8017DDD8(void *a0) { INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8017BEBC", func_8017DE14); -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8017BEBC", func_8017DF7C); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_8017DE14(s32 a0); +extern void func_8012C218(void *a0); +extern s32 D_80126B64; + +void func_8017DF7C(s32 param_1) +{ + s32 s0 = param_1; + s32 t; + + switch (*(u16 *)(s0 + 2)) { + case 0: + *(s32 *)(s0 + 0x1C) = 0xF; + *(u16 *)(s0 + 2) = *(u16 *)(s0 + 2) + 1; + if (*(s16 *)(s0 + 0x70) == 1) { + *(u16 *)(s0 + 2) = 5; + } + break; + case 1: + t = *(s32 *)(s0 + 0x1C) - 1; + *(s32 *)(s0 + 0x1C) = t; + if (t == 0) { + if (D_80126B64 - *(s32 *)(s0 + 0xC) < 0) { + *(u16 *)(s0 + 2) = 2; + } else { + *(u16 *)(s0 + 2) = 3; + } + *(s32 *)(s0 + 0x1C) = 0x7F; + } + break; + case 2: + if (D_80126B64 - *(s32 *)(s0 + 0xC) > 0) { + *(u16 *)(s0 + 2) = 4; + func_8002D4C8(0xC46, 0); + } + break; + case 3: + if (D_80126B64 - *(s32 *)(s0 + 0xC) < 0) { + *(u16 *)(s0 + 2) = 4; + func_8002D4C8(0xC46, 0); + } + break; + case 4: + func_8017DE14(s0); + t = *(s32 *)(s0 + 0x1C) - 8; + *(s32 *)(s0 + 0x1C) = t; + if (t <= 0) { + func_8012C218(s0); + } + break; + case 5: + t = *(s32 *)(s0 + 0x1C) - 1; + *(s32 *)(s0 + 0x1C) = t; + if (t == 0) { + *(u16 *)(s0 + 2) = 6; + *(s32 *)(s0 + 0x1C) = 0x7F; + } + break; + case 6: + if (D_80126B64 - *(s32 *)(s0 + 0xC) > 0) { + *(u16 *)(s0 + 2) = 3; + } + break; + } +} + void func_8017E0FC(s32 a0) { extern s32 func_8012C354(s32 a0, s32 a1); @@ -4593,7 +4700,68 @@ void func_8017FAB4(s32 a0) INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8017BEBC", func_8017FC7C); -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8017BEBC", func_8017FCC0); +extern u8 D_801A0848[]; +extern s32 D_801A88F8; +extern s32 D_801A8DB0; +extern s16 D_801A89A0; +extern s32 func_8012B8E4(s32 a0, s32 a1); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012A828(s32 *a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); + +void func_8017FCC0(s32 s0) { + u16 st; + s32 v0; + s32 a0; + + st = *(u16 *)(s0 + 0x34); + switch (st) { + case 0: + if (*(s32 *)(s0 + 0x1C) == 7) { + func_8012D5E4(s0, (s32)D_801A0848, (s32)(D_801A0848 + 8), 0xB); + } + break; + case 1: + v0 = func_8012B8E4(s0, 6); + a0 = *(s32 *)(s0 + 0x20); + *(u16 *)((s32)a0 + 0x12) = *(u16 *)((s32)a0 + 0x12) + v0; + break; + case 2: + if (*(s32 *)(s0 + 0x1C) == 10) { + func_8012D5E4(s0, (s32)D_801A0848, (s32)(D_801A0848 + 8), 0xB); + } + break; + } + + if (func_8012BEE8(s0) != 0) { + st = *(u16 *)(s0 + 0x34); + switch (st) { + case 0: + if (func_8012BD3C(s0, 0x400, 0x4000) != 0) { + *(s16 *)(s0 + 0x34) = 1; + func_8012A828((s32 *)s0, (s32)&D_801A88F8); + *(s32 *)(s0 + 0x1C) = 0xA; + } else { + *(u16 *)(s0 + 2) = 2; + *(s16 *)(s0 + 0x34) = 0; + func_8012A828((s32 *)s0, (s32)&D_801A89A0); + } + break; + case 1: + *(s16 *)(s0 + 0x34) = 2; + *(s32 *)(s0 + 0x1C) = 0x18; + func_8012A828((s32 *)s0, (s32)&D_801A8DB0); + break; + case 2: + *(u16 *)(s0 + 2) = 2; + *(s16 *)(s0 + 0x34) = 0; + func_8012A828((s32 *)s0, (s32)&D_801A89A0); + break; + } + } +} + extern s32 D_801A085C[]; extern void func_8012A828(s32 *a0, s32 a1); diff --git a/src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c b/src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c index 77f72b006..d5df4fd17 100644 --- a/src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c +++ b/src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c @@ -3408,7 +3408,50 @@ void func_8017D59C(void *a0) { } -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8017BEBC", func_8017D5D8); +typedef struct { + s16 v[4]; +} Blk8_80126940_8017D5D8; + +void func_8017D5D8(s32 a0) { + extern s32 D_80126B58; + extern s16 D_80190E30[]; + extern Blk8_80126940_8017D5D8 D_80126940; + Blk8_80126940_8017D5D8 sp10; + u8 t; + s16 v0, v1; + + if (func_80148800(&D_80126B58) & 3) { + t = (*(u8 *)(a0 + 5) + 1) & 1; + *(u8 *)(a0 + 5) = t; + *(s32 *)(a0 + 0x14) = D_80190E30[t]; + } + sp10 = D_80126940; + + v1 = sp10.v[0]; + if (v1 < -0xFC) { + sp10.v[0] = -0xFC; + } else if (v1 < 0xFD) { + ; + } else { + sp10.v[0] = 0xFC; + } + + v0 = sp10.v[1]; + if (v0 < -0x402) { + sp10.v[1] = -0x402; + } + + v1 = sp10.v[2]; + if (v1 < -0x19E0) { + sp10.v[2] = -0x19E0; + } else if (v1 >= -0x8FF) { + sp10.v[2] = -0x900; + } + + func_8017D9C0(a0, sp10.v); + func_8017DB58(a0); +} + INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8017BEBC", func_8017D6E0); @@ -4063,7 +4106,48 @@ void func_8017EFE0(s32 arg0) { } -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8017BEBC", func_8017F0D4); +extern u16 D_80126B66; +extern u16 D_80126B96; +extern s16 D_80126B98; +extern void func_8017F1C0(s32 a0); +extern s32 func_8017F30C(s32 a0); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_80129374(s32 arg0, s32 arg1); + +s32 func_8017F0D4(param_1) + s32 param_1; +{ + s16 diff; + s32 ptr; + s32 prim; + u16 *flg; + + (*(s32 *)(param_1 + 0x1C))++; + if (*(s16 *)(param_1 + 0x70) == 0) { + func_8017F1C0(param_1); + } + diff = D_80126B66 - *(u16 *)(param_1 + 0xE); + if (diff < 0) { + diff = -diff; + } + if (diff < 0x401) { + if ((*(s32 *)(param_1 + 0x1C) & 1) != 0) { + ptr = func_80132EF4(param_1, 0x22); + if (ptr != 0) { + func_80129374(ptr, param_1); + prim = *(s32 *)(ptr + 0x20); + *(u16 *)(prim + 0x1A) = 0x4000; + *(u16 *)(prim + 0x18) = 0x4000; + } + } + if (func_8017F30C(param_1) != 0) { + D_80126B98 = 0xC; + flg = &D_80126B96; + *flg |= 0x4000; + } + } +} + void func_8017F1C0(s32 a0) { @@ -4201,7 +4285,7 @@ void func_8017F414(s32 param_1) } -extern s32 func_8017F0D4(void); +extern s32 func_8017F0D4(); void func_8017F4B0(void) { func_8017F0D4(); } diff --git a/src/ov_SC06_022/ov_SC06_022_jr_80182D08.c b/src/ov_SC06_022/ov_SC06_022_jr_80182D08.c index a8c65efbc..3b6cc1413 100644 --- a/src/ov_SC06_022/ov_SC06_022_jr_80182D08.c +++ b/src/ov_SC06_022/ov_SC06_022_jr_80182D08.c @@ -2695,7 +2695,7 @@ extern void func_8017E40C(void *a0); extern void func_8017EFD8(void); extern void (*D_80191058[])(void); extern void func_8017F2D0(void *a0); -extern s32 func_8017F0D4(void); +extern s32 func_8017F0D4(); extern void func_8017F4B0(void); extern void (*D_80191070[])(void); extern void func_8017F4D0(void *a0); diff --git a/src/ov_SC06_022/ov_SC06_022_jr_80184304.c b/src/ov_SC06_022/ov_SC06_022_jr_80184304.c index c65c7ca36..de237e929 100644 --- a/src/ov_SC06_022/ov_SC06_022_jr_80184304.c +++ b/src/ov_SC06_022/ov_SC06_022_jr_80184304.c @@ -2694,7 +2694,7 @@ extern void func_8017E40C(void *a0); extern void func_8017EFD8(void); extern void (*D_80191058[])(void); extern void func_8017F2D0(void *a0); -extern s32 func_8017F0D4(void); +extern s32 func_8017F0D4(); extern void func_8017F4B0(void); extern void (*D_80191070[])(void); extern void func_8017F4D0(void *a0); diff --git a/src/ov_SC06_022/ov_SC06_022_jr_80184A28.c b/src/ov_SC06_022/ov_SC06_022_jr_80184A28.c index fac3d0acb..017ca33b7 100644 --- a/src/ov_SC06_022/ov_SC06_022_jr_80184A28.c +++ b/src/ov_SC06_022/ov_SC06_022_jr_80184A28.c @@ -2692,7 +2692,7 @@ extern void func_8017E40C(void *a0); extern void func_8017EFD8(void); extern void (*D_80191058[])(void); extern void func_8017F2D0(void *a0); -extern s32 func_8017F0D4(void); +extern s32 func_8017F0D4(); extern void func_8017F4B0(void); extern void (*D_80191070[])(void); extern void func_8017F4D0(void *a0); diff --git a/src/ov_SC07_007/ov_SC07_007_jr_8017BEBC.c b/src/ov_SC07_007/ov_SC07_007_jr_8017BEBC.c index be9e1bff9..66ea7897d 100644 --- a/src/ov_SC07_007/ov_SC07_007_jr_8017BEBC.c +++ b/src/ov_SC07_007/ov_SC07_007_jr_8017BEBC.c @@ -3900,7 +3900,41 @@ void func_8017D1F0(void) { INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8017BEBC", func_8017D288); -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8017BEBC", func_8017D350); +#include "common.h" + +extern void func_8012A018(s32 a0, s32 a1); +extern void func_8012A094(s32 a0); +extern void func_8017D648(void *a0); + +void func_8017D350(void) { + typedef struct { s16 x0, x1, x2, x3; } BlkT; + extern u8 D_80126948[]; + extern s32 D_80126954; + extern s32 D_8012695C; + extern s16 D_80126968; + extern s16 D_8012696A; + extern s16 D_8012696C; + extern s16 D_80126976; + extern s16 D_80126978; + extern s16 D_8012697A; + extern u8 D_801274E8[]; + extern u8 D_801869C8; + + D_80126954 = 0x190; + D_8012695C = 0x15E; + D_80126968 = -0x38; + D_8012696A = 0x800; + D_8012696C = 0; + D_80126976 = 0; + D_80126978 = -0x60; + D_8012697A = 0; + + func_8012A018((s32)func_8017D648, 4); + *(BlkT *)&D_801274E8 = *(BlkT *)&D_801869C8; + func_8012A094((s32)D_80126948); + func_8017D648(D_80126948); +} + INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8017BEBC", func_8017D41C);