diff --git a/config/splat.md_SC04_027.yaml b/config/splat.md_SC04_027.yaml index d62e4ae35f..2320c1db28 100644 --- a/config/splat.md_SC04_027.yaml +++ b/config/splat.md_SC04_027.yaml @@ -94,7 +94,9 @@ segments: # 0x801E7B28 ahead of the code, a 1-word analogue of main's rodata-island (no ld_interleave). # - [0x0, rodata, head] - [0x0, .rodata, md_SC04_027] # module-id header (+jtbl/ptr table) — §154-A - - [0x27C, c, md_SC04_027] + - [0x268, .rodata, md_SC04_027_jr_801EA8C0] # §154-A island split (jtbl_carve --island-split) + - [0x27c, c, md_SC04_027] + - [0x2d98, c, md_SC04_027_jr_801EA8C0] - [0x35BC, data, tail] # data tail: pointer tables + packed data (split iterated) - [0xAB00] # 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_MAIN_001/md_MAIN_001.c b/src/md_MAIN_001/md_MAIN_001.c index 7adab14d59..a6b8a57f6c 100644 --- a/src/md_MAIN_001/md_MAIN_001.c +++ b/src/md_MAIN_001/md_MAIN_001.c @@ -14,21 +14,141 @@ void func_800CEDFC(void) { } -INCLUDE_ASM("asm/md_MAIN_001/nonmatchings/md_MAIN_001", func_800CEE40); +#include "common.h" + +extern u8 D_800B9A11; +extern s32 D_800B9A18; +extern u16 D_800B99E8; +extern s32 D_800D3ABC; +extern s32 D_800D3C0C; +extern s32 D_800D3C10; + +extern void func_8001C044(void); +extern void func_80015310(void); +extern void func_800146B0(s32 a0); +extern void func_80059658(s32 a0); +extern s32 VSync(s32 a0); +extern void func_800167B8(s32 a0); +extern void func_800183E0(s32 *a0); +extern void func_800116E0(void); +extern s32 func_8001BFE8(void); +extern void func_80011928(s32 a0); +extern void func_8001BFF8(void); +extern void func_800118AC(void); + +void func_800CEE40(void) { + D_800B9A11 = 1; + func_8001C044(); + func_80015310(); + func_800146B0(7); + func_80059658(0); + VSync(0); + func_80059658(1); + D_800B9A18 = 0; + func_800167B8(0); + func_800183E0(&D_800D3ABC); + D_800D3C0C = 0; + D_800D3C10 = 0; + func_800116E0(); + D_800B99E8 = 0; + if (func_8001BFE8() != 0) { + func_80011928(3); + } else { + func_8001BFF8(); + func_800118AC(); + } +} + INCLUDE_ASM("asm/md_MAIN_001/nonmatchings/md_MAIN_001", func_800CEF04); INCLUDE_ASM("asm/md_MAIN_001/nonmatchings/md_MAIN_001", func_800CEF54); -INCLUDE_ASM("asm/md_MAIN_001/nonmatchings/md_MAIN_001", func_800CEFA8); +extern s32 D_800D3C10; +extern void func_800118AC(void); +extern void func_800CF290(void); -INCLUDE_ASM("asm/md_MAIN_001/nonmatchings/md_MAIN_001", func_800CEFF4); +void func_800CEFA8(void) { + D_800D3C10 -= 4; + if (D_800D3C10 <= 0) { + D_800D3C10 = 0; + func_800118AC(); + } + func_800CF290(); +} -INCLUDE_ASM("asm/md_MAIN_001/nonmatchings/md_MAIN_001", func_800CF038); -INCLUDE_ASM("asm/md_MAIN_001/nonmatchings/md_MAIN_001", func_800CF0C4); +void func_800CEFF4(void) { + extern void func_800CF180(void); + extern void func_800CF114(void); + extern s32 func_800167F0(s32 arg0); + extern void func_800118AC(void); + + func_800CF180(); + func_800CF114(); + if (func_800167F0(0) & 0xFFFF) { + func_800118AC(); + } +} + + +void func_800CF038(void) { + extern void func_800CF180(void); + extern void func_800CF114(void); + extern u16 D_800B99E8; + extern s32 func_800149E0(s32 a0); + extern s32 D_800D3C0C; + extern void func_800167B8(s32 a0); + extern void func_800118AC(void); + s32 temp; + + func_800CF180(); + func_800CF114(); + D_800B99E8 = D_800B99E8 + 1; + temp = func_800149E0(0); + if (D_800D3C0C != 0) { + if ((s16)D_800B99E8 >= 0x81 || (temp & 0x840)) { + func_800167B8(4); + func_800118AC(); + } + } +} + + +void func_800CF0C4(void) { + extern void func_800CF180(void); + extern s32 func_800167F0(s32 arg); + extern void func_800146B0(s32 arg); + extern u16 D_800B99E6; + extern s32 D_800B9A18; + + func_800CF180(); + if (func_800167F0(4) & 0xFFFF) { + D_800B99E6 = 1; + func_800146B0(1); + D_800B9A18 = 2; + } +} + + +extern s32 func_8001ABBC(s32 arg0, s32 arg1, void *arg2, s32 arg3, s32 *arg4); +extern s32 D_800D3C0C; +extern s32 D_800C7C60; +extern s32 *D_800C7C64; +extern s32 D_800A2E20; +extern u8 D_800AE840[]; + +void func_800CF114(void) { + if (D_800D3C0C == 0) { + s32 *p = &D_800C7C60; + *p = 0; + D_800C7C64 = &D_800A2E20; + if (func_8001ABBC(0, 0, D_800AE840, 0, p) != 0) { + D_800D3C0C = 1; + } + } +} -INCLUDE_ASM("asm/md_MAIN_001/nonmatchings/md_MAIN_001", func_800CF114); INCLUDE_ASM("asm/md_MAIN_001/nonmatchings/md_MAIN_001", func_800CF180); diff --git a/src/md_MAIN_026/md_MAIN_026.c b/src/md_MAIN_026/md_MAIN_026.c index 2f5ff2f947..d68a6b691a 100644 --- a/src/md_MAIN_026/md_MAIN_026.c +++ b/src/md_MAIN_026/md_MAIN_026.c @@ -21,9 +21,34 @@ void func_800CAE88(void *a0) { INCLUDE_ASM("asm/md_MAIN_026/nonmatchings/md_MAIN_026", func_800CAEC0); -INCLUDE_ASM("asm/md_MAIN_026/nonmatchings/md_MAIN_026", func_800CAF10); +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); + +void func_800CAF10(void *arg0) { + func_801466F0(0xB, (s32)arg0, 0, 0, 0, 0, 0, 0); + *(u8 *)((s32)arg0 + 0xBE) = 0; + *(u8 *)((s32)arg0 + 0x197) += 1; +} + + +void func_800CAF68(void *arg0) { + extern u8 D_80078E78[]; + extern s32 func_8014C088(s32 a0, s32 a1); + extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); + extern void func_80147324(s32 arg0); + extern void func_800CB098(void *a0); + register u8 *p __asm__("$17") = D_80078E78; + + if (func_8014C088((s32)arg0, 0xB) == 0 || *(u8 *)((s32)arg0 + 0xBE) != 0) { + func_800CB098(arg0); + } + if (*(s32 *)(p + 0x50) == 0) { + func_801466F0(0xB, (s32)arg0, 0, 0, 0, 1, 0, 0); + func_80147324(0x7DE); + *(u8 *)((s32)arg0 + 0xBE) = 0; + *(u8 *)((s32)arg0 + 0x197) += 1; + } +} -INCLUDE_ASM("asm/md_MAIN_026/nonmatchings/md_MAIN_026", func_800CAF68); INCLUDE_ASM("asm/md_MAIN_026/nonmatchings/md_MAIN_026", func_800CB010); @@ -33,7 +58,26 @@ void func_800CB078(void) { } -INCLUDE_ASM("asm/md_MAIN_026/nonmatchings/md_MAIN_026", func_800CB098); +#include "common.h" + +extern s32 func_8014C168(s32 *arg0, s32 arg1); +extern s32 func_8014C088(s32 arg0, s32 arg1); + +void func_800CB098(s32 a0) { + s32 s0; + s32 v1; + + s0 = func_8014C168((s32 *)a0, 0x15C); + if (s0 != 0) { + v1 = func_8014C088(a0, 1); + if (v1 != 0 && *(u16 *)((s32)v1 + 2) != 0) { + *(s32 *)((s32)s0 + 0xCC) = v1; + } else { + *(s32 *)((s32)s0 + 0xCC) = a0; + } + } +} + INCLUDE_ASM("asm/md_MAIN_026/nonmatchings/md_MAIN_026", func_800CB108); @@ -173,7 +217,27 @@ void func_800CB62C(void *arg0) { } -INCLUDE_ASM("asm/md_MAIN_026/nonmatchings/md_MAIN_026", func_800CB688); +extern void func_80146CA0(void *arg0); + +void func_800CB688(void *a0) { + s32 v1 = -0x100; + *(u16 *)((s32)a0 + 0x12) = v1; + *(u16 *)((s32)a0 + 0x16) = v1; + v1 = *(s32 *)((s32)a0 + 0x50); + *(u16 *)((s32)a0 + 0x14) = 8; + *(u16 *)((s32)a0 + 0x10) = 0; + *(u8 *)((s32)a0 + 0x58) = 0xFF; + *(u8 *)((s32)a0 + 0x59) = 0xFF; + *(u8 *)((s32)a0 + 0x5A) = 0xFF; + *(u8 *)((s32)a0 + 0x5B) = 0; + *(u8 *)((s32)a0 + 0x5C) = 0; + *(u8 *)((s32)a0 + 0x5D) = 0; + *(u8 *)((s32)a0 + 0x5E) = 0xFF; + *(u8 *)((s32)a0 + 0x5F) = 0; + *(u16 *)((s32)a0 + 0x18) = v1; + func_80146CA0(a0); +} + extern void func_80146CA0(void *a0); extern void func_800CB8C4(void *a0, void *a1); @@ -197,7 +261,32 @@ void func_800CB6E8(void *arg0) { } -INCLUDE_ASM("asm/md_MAIN_026/nonmatchings/md_MAIN_026", func_800CB77C); +void func_800CB77C(void *arg0) { + extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); + extern void func_80146CA0(void *a0); + extern void func_800CB8C4(void *a0, void *a1); + extern void func_800CB900(void *a0, void *a1, void *a2, void *a3, void *a4, void *a5, void *a6); + s16 w; + s32 pad[2]; + + w = *(u16 *)((u8 *)arg0 + 0x14) + 8; + *(u16 *)((u8 *)arg0 + 0x14) = w; + *(u8 *)((u8 *)arg0 + 0x58) = func_80012F74(*(u8 *)((u8 *)arg0 + 0x58), 0, 10, 1); + *(u8 *)((u8 *)arg0 + 0x59) = func_80012F74(*(u8 *)((u8 *)arg0 + 0x59), 0, 10, 1); + *(u8 *)((u8 *)arg0 + 0x5A) = func_80012F74(*(u8 *)((u8 *)arg0 + 0x5A), 0, 10, 1); + *(u8 *)((u8 *)arg0 + 0x5C) = func_80012F74(*(u8 *)((u8 *)arg0 + 0x5C), 0, 10, 1); + *(u8 *)((u8 *)arg0 + 0x5D) = func_80012F74(*(u8 *)((u8 *)arg0 + 0x5D), 0, 10, 1); + *(u8 *)((u8 *)arg0 + 0x5E) = func_80012F74(*(u8 *)((u8 *)arg0 + 0x5E), 0, 10, 1); + if (*(s32 *)((u8 *)arg0 + 0x58) == 0 && *(s32 *)((u8 *)arg0 + 0x5C) == 0) { + func_80146CA0(arg0); + } + w = *(u16 *)((u8 *)arg0 + 0x18) + 0x2D; + *(u16 *)((u8 *)arg0 + 0x18) = w; + func_800CB8C4(arg0, pad); + func_800CB900(arg0, pad, (u8 *)arg0 + 0x10, (u8 *)arg0 + 0x14, + (u8 *)arg0 + 0x58, (u8 *)arg0 + 0x5C, (u8 *)arg0 + 0x18); +} + extern void func_80162CCC(void); void func_800CB8A4(void) { @@ -205,6 +294,13 @@ void func_800CB8A4(void) { } -INCLUDE_ASM("asm/md_MAIN_026/nonmatchings/md_MAIN_026", func_800CB8C4); +extern void func_80015978(s32 a0, s32 *a1); +extern void func_8012EFB8(); + +void func_800CB8C4(void *a0, void *a1) { + func_80015978(*(s32 *)((s32)a0 + 0x4C) + 4, (s32 *)a1); + func_8012EFB8(a1, a1); +} + INCLUDE_ASM("asm/md_MAIN_026/nonmatchings/md_MAIN_026", func_800CB900); diff --git a/src/md_MAIN_040/md_MAIN_040.c b/src/md_MAIN_040/md_MAIN_040.c index 57b45522f2..e17b633e08 100644 --- a/src/md_MAIN_040/md_MAIN_040.c +++ b/src/md_MAIN_040/md_MAIN_040.c @@ -80,7 +80,35 @@ void func_800CAFC4(s32 a0) { } -INCLUDE_ASM("asm/md_MAIN_040/nonmatchings/md_MAIN_040", func_800CB038); +void func_800CB038(void *a0) { + extern s32 D_800CBD74; + extern void func_8014659C(void); + extern void func_8001C214(s32 a0, s32 a1); + extern void func_80149374(s32 a0, s32 a1); + extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); + extern void func_80146E90(s32 *a0, s32 a1); + extern void func_80147324(s32 a0); + extern void func_80146CA0(void *a0); + extern void func_800CB3BC(void); + + void *s2 = *(void **)((s32)a0 + 0x4C); + s32 s1 = ((s32 (*)(void))func_8014659C)(); + *(s32 *)((s32)a0 + 0x20) = s1; + if (s1 != 0) { + func_8001C214(s1, (s32)&D_800CBD74); + *(u16 *)(s1 + 0x12) = *(u16 *)(*(s32 *)(s2 + 0x20) + 0x12); + func_80149374((s32)s2, (s32)a0 + 4); + func_80146DE8((s32 *)a0, 0, -0xC0000, -0x100000); + func_80146E90((s32 *)a0, 100); + memcpy((void *)((s32)a0 + 0x58), (void *)(s1 + 0x10), 8); + *(u16 *)((s32)a0 + 0x60) = 2; + func_80147324(0x8F3); + func_80146CA0(a0); + } else { + ((void (*)(s32))func_800CB3BC)(a0); + } +} + INCLUDE_ASM("asm/md_MAIN_040/nonmatchings/md_MAIN_040", func_800CB114); diff --git a/src/md_SC04_027/md_SC04_027.c b/src/md_SC04_027/md_SC04_027.c index 69594dee33..4d6c6e062a 100644 --- a/src/md_SC04_027/md_SC04_027.c +++ b/src/md_SC04_027/md_SC04_027.c @@ -411,7 +411,36 @@ s32 func_801E8A80(s32 ot, u8 *s, s16 c) { } -INCLUDE_ASM("asm/md_SC04_027/nonmatchings/md_SC04_027", func_801E8D70); +extern u8 D_80115158[]; + +s32 func_801E8D70(s32 arg0, s16 arg1, s16 arg2, s16 arg3, s32 *arg4) { + s32 ret; + s16 var; + u8 thr; + + *arg4 = 0x808080; + ret = 0; + thr = D_80115158[arg2 * 2]; + if (arg1 < 5) { + if (arg1 > 0) { + var = arg3; + } else if (arg1 == 0) { + goto end; + } else { + var = arg3; + } + } else if (arg1 == 5) { + goto end; + } else { + var = arg3; + } + if (var < thr) { + ret = *(s32 *)(arg0 + var * 4); + } +end: + return ret; +} + INCLUDE_ASM("asm/md_SC04_027/nonmatchings/md_SC04_027", func_801E8DF4); @@ -836,284 +865,3 @@ void func_801EA88C(void) { extern u8 D_800AF040[]; func_8001ABBC(0, 0, D_800AF040, 0, 0); } - - -INCLUDE_ASM("asm/md_SC04_027/nonmatchings/md_SC04_027", func_801EA8C0); - - - -void func_801EAA0C(void *a0) { - - extern void (*D_801EBD48[])(void); - D_801EBD48[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/md_SC04_027/nonmatchings/md_SC04_027", func_801EAA48); - - - -void func_801EAA58(void) { - - extern s32 D_801F24A0; - D_801F24A0 = 1; -} - - - - -s32 func_801EAA6C(void) { - - extern s32 D_801F24A0; - return D_801F24A0; -} - - -INCLUDE_ASM("asm/md_SC04_027/nonmatchings/md_SC04_027", func_801EAA7C); - -INCLUDE_ASM("asm/md_SC04_027/nonmatchings/md_SC04_027", func_801EAB04); - -extern s32 func_80029504(void); -extern s32 func_80029178(s32 arg); -extern void func_80029124(s32, s32); - -s32 func_801EAB8C(void) { - s32 val = func_80029504(); - s32 flag; - - if ((u32)(val - 200) >= 100) { - if (val < 300 || !(func_80029178(250) & 0xFF)) { - flag = 1; - } else { - flag = 0; - } - } else { - flag = 0; - } - - if (flag == 0) { - return 0; - } - if (func_80029178(276) & 0xFF) { - return 0; - } - func_80029124(276, 1); - return 1; -} - - -extern s32 func_80029504(void); -extern s32 func_80029178(s32); -extern s32 func_80184D00(void); -extern s32 func_80184DD0(void); -extern s32 func_80184E44(void); -extern void func_80184EA0(void); -extern s32 D_801EBCBC[]; -extern s32 D_801EBCD0[]; -extern s32 D_801EBCEC[]; -extern s32 D_801EC35C; -extern s32 D_801EC3A8; - -void func_801EAC10(s32 a0) { - s32 v0, v1 = func_80029504(); - if (v1 < 0x258) { - v1 = func_80029504(); - if ((u32)(v1 - 0xC8) < 0x64) { - v0 = 0; - } else if (v1 < 0x12C) { - v0 = 1; - } else { - v0 = func_80029178(0xFA) & 0xFF; - if (v0 != 0) { - v0 = 0; - } else { - v0 = 1; - } - } - if (v0 != 0) { - *(s32 *)(a0 + 0xE4) = D_801EBCBC[func_80184D00()]; - } else if ((u32)func_80029504() < 0x12C) { - *(s32 *)(a0 + 0xE4) = (s32)&D_801EC35C; - } else { - *(s32 *)(a0 + 0xE4) = (s32)&D_801EC3A8; - } - } else if (v1 < 0x384) { - *(s32 *)(a0 + 0xE4) = D_801EBCD0[func_80184DD0()]; - } else { - *(s32 *)(a0 + 0xE4) = D_801EBCEC[func_80184E44()]; - func_80184EA0(); - } -} - - - -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_801EAD2C(void *a0) { - extern s32 D_801F1D5C; - extern s32 D_801B9A50; - extern s32 D_801EBC04; - extern s32 D_801EBC34; - 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_801F1D5C); - ptr = *(s32 *)((s32)a0 + 0x68); - *(s16 *)(ptr + 0xC) = 0x7FFF; - *(s16 *)((s32)a0 + 0x2) = 1; - func_8012A828((s32)a0, (s32)&D_801B9A50); - func_8012E8E0((s32)a0, (s32)&D_801EBC04); - *(s16 *)((s32)a0 + 0x34) = 0; - func_80178B18((s32)a0, (s32)&D_801EBC34); - } -} - - -extern void func_801EAFE4(void); -extern s32 func_80029504(void); -extern s32 func_801EAF84(s32, s32, s32); -extern void func_801EAF9C(s32, s32, s32); -extern void func_80029124(s32, s32); -extern void func_801EB064(void); -extern void func_801EB0A4(void); -extern void func_801EB014(void); - -s32 func_801EADC4(void) { - - extern u8 D_80078EB1; - extern u8 D_80078E78[]; - extern u8 D_801EC1D0[]; - extern u8 D_801EC2F4[]; - extern s32 D_801F2624; - extern s32 D_801F24A4; - - u8 *p; - s32 var; - - func_801EAFE4(); - p = D_80078E78; - var = func_80029504(); - - if (var < 200) - goto L; - if (var >= 600) - goto L; - - if (func_801EAF84(D_80078EB1, 13, 24) && (u32)(var - 0x136) < 0x46) { - ((void (*)(s32, void *, void *))func_801EAF9C)(10, D_801EC1D0, func_801EB064); - func_80029124(0x112, 1); - } else { - ((void (*)(s32, void *, void *))func_801EAF9C)(10, 0, 0); - } - - if (func_801EAF84(p[0x39], 13, 24) && (u32)(var - 0x136) < 0x46) { - ((void (*)(s32, void *, void *))func_801EAF9C)(11, D_801EC2F4, func_801EB0A4); - } else { - ((void (*)(s32, void *, void *))func_801EAF9C)(11, 0, 0); - } - goto M; - -L: - ((void (*)(s32, void *, void *))func_801EAF9C)(10, 0, 0); - ((void (*)(s32, void *, void *))func_801EAF9C)(11, 0, 0); - -M: - func_801EB014(); - if (!D_801F2624) { - return 0; - } - return (s32)((u8 *)&D_801F24A4); -} - - -extern s32 D_801F24AC[]; -extern s32 D_801F24A8[]; -extern s32 D_801F2624; -extern s32 func_801EADC4(); - -s32 func_801EAF00(void *a0) { - s32 n; - s32 i; - s32 end; - - func_801EADC4(); - n = D_801F2624; - if (n > 0) { - i = 0; - end = n * 16; - do { - if (*(s32 *)((char *)D_801F24AC + i) == (s32)a0) { - return *(s32 *)((char *)D_801F24A8 + i); - } - i += 16; - } while (i < end); - } - return 0; -} - - -s32 func_801EAF84(s32 arg0, s32 arg1, s32 arg2) { - return (arg1 <= arg0) && (arg0 < arg2); -} - - -void func_801EAF9C(s32 arg0, s32 arg1, s32 arg2) { - extern s32 D_801F2624; - extern s32 D_801F24AC[]; - extern s32 D_801F24A8[]; - extern s32 D_801F24B0[]; - s32 i; - - i = D_801F2624; - D_801F24AC[i * 4] = arg0; - D_801F24A8[i * 4] = arg1; - D_801F24B0[i * 4] = arg2; - D_801F2624 = i + 1; -} - - -extern s32 D_801F24A4; -extern s32 D_801F2624; -extern void func_80016714(s8*, s32); - -void func_801EAFE4(void) { - ((void (*)(void *, s32))func_80016714)(&D_801F24A4, 0x180); - D_801F2624 = 0; -} - - -INCLUDE_ASM("asm/md_SC04_027/nonmatchings/md_SC04_027", func_801EB014); - -extern s32 func_80029504(void); -extern void func_80029124(s32 a0, s32 a1); -extern void func_80029514(s32 arg0); - -void func_801EB064(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_801EB0A4(void) { - func_80029124(0xFE, 0x1); - if (((s32 (*)(void))func_80029504)() == 0x136) { - ((void (*)(s32))func_80029514)(0x140); - } -} - diff --git a/src/md_SC04_027/md_SC04_027_jr_801EA8C0.c b/src/md_SC04_027/md_SC04_027_jr_801EA8C0.c new file mode 100644 index 0000000000..00c817689d --- /dev/null +++ b/src/md_SC04_027/md_SC04_027_jr_801EA8C0.c @@ -0,0 +1,469 @@ +#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_801E8A80; +typedef struct { u32 w[38]; } Blk152_8017DF40_801E9DF8; +typedef struct { u8 b[4]; } Blk4_8017DF40_801E9DF8; +typedef struct { u8 c[8]; } Blk8; +typedef struct { short m[3][3]; long t[3]; } MATRIX_801EDED4_801EA664; +typedef struct { short vx, vy, vz, pad; } SVECTOR_801EDED4_801EA664; +extern void func_801E7DA4(void); +extern s32 func_801E7DCC(void); +extern s32 func_80029504(void); +extern void func_801E7E10(void); +extern void func_801E7E9C(void); +extern s16 func_801E7EB0(void); +extern void func_801E7EC0(s32 a0, s32 a1); +extern u16 D_80115116; +extern unsigned short D_80115112; +extern void (*D_801EBB38[])(void); +extern void func_80141C04(void); +extern void func_801E7F38(void); +extern void func_801E7FD8(void); +extern void func_801E8104(void); +extern s32 D_801151D0; +extern u8 D_801151C8[]; +extern u8 D_800B9A15; +extern s16 D_80115126; +extern s16 D_800B9A02; +extern s16 D_801F2184; +extern s16 D_801F2188; +extern s32 D_801F2470; +extern s32 D_801F2474; +extern u8 D_801F2478[]; +extern s32 D_801F2488; +extern s32 func_8002B0B4(s32, s32, void *); +extern void func_801E8DF4(void); +extern void func_801E915C(void); +extern s32 func_801E8274(void); +extern void func_801E88D0(void); +extern void func_801E8120(void); +extern void func_801E8200(void); +extern void func_800D2624(void); +extern void func_801E821C(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_801E8D70(s32, s16, s16, s16, s32 *); +extern s32 func_801E8A80(s32 ot, u8 *s, s16 c); +extern u8 D_80115158[]; +extern s32 func_801E8D70(s32 arg0, s16 arg1, s16 arg2, s16 arg3, s32 *arg4); +extern u32 func_801E9B00(s32 a0, s32 a1); +extern void func_801E9B68(unsigned int val, short n, unsigned short *dst, short flag); +extern void func_80016714(s8 *a0, s32 a1); +extern s8 D_801F2194; +extern void func_801E9DD0(void); +extern void func_801E9DF8(s32 arg0); +extern void func_8014B00C(void); +extern void func_80029344(void); +extern void func_801EA0E4(void); +extern u8 D_801EBBAC[]; +void func_800167B8(int); +void func_80175414(s32 _arg0); +extern int func_801EA10C(u8 *arg); +extern s32 func_800167F0(s32 a0); +extern s32 func_801EA164(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_801EA1DC(s32 param_1); +extern void func_800D1EBC(void); +extern void func_801EA27C(void); +extern void func_801EA29C(void *a0); +extern s32 func_801EA2D8(void *a0); +extern void func_801EA344(void *a0); +extern void func_80171A1C(void*); +extern void func_80175414(s32 _arg0); +extern void func_801EA380(void); +extern s32 func_80171D78(u32, void *); +extern void func_801EA3A8(u32 arg0); +extern s32 func_80014C54(s32, s32, s32); +extern void func_800D1724(void *); +extern void func_80171A1C(void *); +extern void func_801EA410(void *arg0); +extern void func_801EA468(void); +extern void func_801EA470(void *a0); +extern void func_801EA4AC(void); +extern void func_801EA4CC(u32 arg0); +extern void func_801EA534(void); +extern void func_8012A018(s32 a0, s32 a1); +extern void func_8012A094(s32 a0); +extern void func_801EA600(void *a0); +extern void func_801EA53C(void); +extern void func_801EA63C(s32 arg0); +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 void func_801EA664(s32 param_1, s16 *param_2); +extern u8 func_801EA85C(u32 a0); +extern void func_8001ABBC(u32, u32, void *, u32, u32); +extern void func_801EA88C(void); +/* ==== end §8b carried decl layer ==== */ + + +#include "common.h" + +extern s32 func_801789AC(s32 a0); +extern void func_80178CBC(s32 a0, s32 a1); +extern void func_80174438(s32 a0); +extern u8 *D_80126B10; +extern s16 func_80186450(void); +extern void func_80186460(s32 a0); + +void func_801EA8C0(void *param_1) { + + extern s32 D_801EBD00; + extern s32 D_801EBD18; + extern s32 D_801EBC94; + + switch (*(u16 *)((s32)param_1 + 0x34)) { + case 0: { + s32 v0 = func_801789AC((s32)param_1); + switch (v0) { + case 1: + *(u16 *)((s32)param_1 + 0x34) = 2; + func_80186460(4); + break; + case 2: + func_80178CBC((s32)param_1, (s32)&D_801EBD00); + *(u16 *)((s32)param_1 + 0x34) = 0; + break; + case 3: + func_80178CBC((s32)param_1, (s32)&D_801EBD18); + *(u16 *)((s32)param_1 + 0x34) = 3; + break; + } + break; + } + case 1: + break; + case 2: + if (func_80186450() != 0) { + func_801E7DA4(); + *(u16 *)((s32)param_1 + 0x34) = 4; + } else { + func_80178CBC((s32)param_1, (s32)&D_801EBC94); + *(u16 *)((s32)param_1 + 0x34) = 0; + } + break; + case 3: + if (func_801789AC((s32)param_1) != 0) { + func_80174438((s32)D_80126B10); + *(u16 *)((s32)param_1 + 0x34) = 1; + } + break; + case 4: + if ((func_801E7DCC() << 16) != 0) { + *(u16 *)((s32)param_1 + 0x34) = 2; + func_80186460(4); + } + break; + } +} + + + + +void func_801EAA0C(void *a0) { + + extern void (*D_801EBD48[])(void); + D_801EBD48[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/md_SC04_027/nonmatchings/md_SC04_027_jr_801EA8C0", func_801EAA48); + + + +void func_801EAA58(void) { + + extern s32 D_801F24A0; + D_801F24A0 = 1; +} + + + + +s32 func_801EAA6C(void) { + + extern s32 D_801F24A0; + return D_801F24A0; +} + + +INCLUDE_ASM("asm/md_SC04_027/nonmatchings/md_SC04_027_jr_801EA8C0", func_801EAA7C); + +void func_801EAB04(void) { + extern s32 D_801E7AAC; + extern s32 D_801EBE24; + extern s32 D_801EBE58; + s32 r; + s32 v; + + r = func_80029504(); + v = ((u32)(r - 0xC8) < 0x64) ? 0 : + ((r < 0x12C) ? 1 : + (((func_80029178(0xFA) & 0xFF) == 0) ? ({ __asm__ __volatile__("" ::: "memory"); 1; }) : 0)); + if (v) { + *(s32 *)(D_801E7AAC + 4) = (s32)&D_801EBE24; + } else { + *(s32 *)(D_801E7AAC + 4) = (s32)&D_801EBE58; + } +} + + +extern s32 func_80029504(void); +extern s32 func_80029178(s32 arg); +extern void func_80029124(s32, s32); + +s32 func_801EAB8C(void) { + s32 val = func_80029504(); + s32 flag; + + if ((u32)(val - 200) >= 100) { + if (val < 300 || !(func_80029178(250) & 0xFF)) { + flag = 1; + } else { + flag = 0; + } + } else { + flag = 0; + } + + if (flag == 0) { + return 0; + } + if (func_80029178(276) & 0xFF) { + return 0; + } + func_80029124(276, 1); + return 1; +} + + +extern s32 func_80029504(void); +extern s32 func_80029178(s32); +extern s32 func_80184D00(void); +extern s32 func_80184DD0(void); +extern s32 func_80184E44(void); +extern void func_80184EA0(void); +extern s32 D_801EBCBC[]; +extern s32 D_801EBCD0[]; +extern s32 D_801EBCEC[]; +extern s32 D_801EC35C; +extern s32 D_801EC3A8; + +void func_801EAC10(s32 a0) { + s32 v0, v1 = func_80029504(); + if (v1 < 0x258) { + v1 = func_80029504(); + if ((u32)(v1 - 0xC8) < 0x64) { + v0 = 0; + } else if (v1 < 0x12C) { + v0 = 1; + } else { + v0 = func_80029178(0xFA) & 0xFF; + if (v0 != 0) { + v0 = 0; + } else { + v0 = 1; + } + } + if (v0 != 0) { + *(s32 *)(a0 + 0xE4) = D_801EBCBC[func_80184D00()]; + } else if ((u32)func_80029504() < 0x12C) { + *(s32 *)(a0 + 0xE4) = (s32)&D_801EC35C; + } else { + *(s32 *)(a0 + 0xE4) = (s32)&D_801EC3A8; + } + } else if (v1 < 0x384) { + *(s32 *)(a0 + 0xE4) = D_801EBCD0[func_80184DD0()]; + } else { + *(s32 *)(a0 + 0xE4) = D_801EBCEC[func_80184E44()]; + func_80184EA0(); + } +} + + + +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_801EAD2C(void *a0) { + extern s32 D_801F1D5C; + extern s32 D_801B9A50; + extern s32 D_801EBC04; + extern s32 D_801EBC34; + 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_801F1D5C); + ptr = *(s32 *)((s32)a0 + 0x68); + *(s16 *)(ptr + 0xC) = 0x7FFF; + *(s16 *)((s32)a0 + 0x2) = 1; + func_8012A828((s32)a0, (s32)&D_801B9A50); + func_8012E8E0((s32)a0, (s32)&D_801EBC04); + *(s16 *)((s32)a0 + 0x34) = 0; + func_80178B18((s32)a0, (s32)&D_801EBC34); + } +} + + +extern void func_801EAFE4(void); +extern s32 func_80029504(void); +extern s32 func_801EAF84(s32, s32, s32); +extern void func_801EAF9C(s32, s32, s32); +extern void func_80029124(s32, s32); +extern void func_801EB064(void); +extern void func_801EB0A4(void); +extern void func_801EB014(void); + +s32 func_801EADC4(void) { + + extern u8 D_80078EB1; + extern u8 D_80078E78[]; + extern u8 D_801EC1D0[]; + extern u8 D_801EC2F4[]; + extern s32 D_801F2624; + extern s32 D_801F24A4; + + u8 *p; + s32 var; + + func_801EAFE4(); + p = D_80078E78; + var = func_80029504(); + + if (var < 200) + goto L; + if (var >= 600) + goto L; + + if (func_801EAF84(D_80078EB1, 13, 24) && (u32)(var - 0x136) < 0x46) { + ((void (*)(s32, void *, void *))func_801EAF9C)(10, D_801EC1D0, func_801EB064); + func_80029124(0x112, 1); + } else { + ((void (*)(s32, void *, void *))func_801EAF9C)(10, 0, 0); + } + + if (func_801EAF84(p[0x39], 13, 24) && (u32)(var - 0x136) < 0x46) { + ((void (*)(s32, void *, void *))func_801EAF9C)(11, D_801EC2F4, func_801EB0A4); + } else { + ((void (*)(s32, void *, void *))func_801EAF9C)(11, 0, 0); + } + goto M; + +L: + ((void (*)(s32, void *, void *))func_801EAF9C)(10, 0, 0); + ((void (*)(s32, void *, void *))func_801EAF9C)(11, 0, 0); + +M: + func_801EB014(); + if (!D_801F2624) { + return 0; + } + return (s32)((u8 *)&D_801F24A4); +} + + +extern s32 D_801F24AC[]; +extern s32 D_801F24A8[]; +extern s32 D_801F2624; +extern s32 func_801EADC4(); + +s32 func_801EAF00(void *a0) { + s32 n; + s32 i; + s32 end; + + func_801EADC4(); + n = D_801F2624; + if (n > 0) { + i = 0; + end = n * 16; + do { + if (*(s32 *)((char *)D_801F24AC + i) == (s32)a0) { + return *(s32 *)((char *)D_801F24A8 + i); + } + i += 16; + } while (i < end); + } + return 0; +} + + +s32 func_801EAF84(s32 arg0, s32 arg1, s32 arg2) { + return (arg1 <= arg0) && (arg0 < arg2); +} + + +void func_801EAF9C(s32 arg0, s32 arg1, s32 arg2) { + extern s32 D_801F2624; + extern s32 D_801F24AC[]; + extern s32 D_801F24A8[]; + extern s32 D_801F24B0[]; + s32 i; + + i = D_801F2624; + D_801F24AC[i * 4] = arg0; + D_801F24A8[i * 4] = arg1; + D_801F24B0[i * 4] = arg2; + D_801F2624 = i + 1; +} + + +extern s32 D_801F24A4; +extern s32 D_801F2624; +extern void func_80016714(s8*, s32); + +void func_801EAFE4(void) { + ((void (*)(void *, s32))func_80016714)(&D_801F24A4, 0x180); + D_801F2624 = 0; +} + + +INCLUDE_ASM("asm/md_SC04_027/nonmatchings/md_SC04_027_jr_801EA8C0", func_801EB014); + +extern s32 func_80029504(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_80029514(s32 arg0); + +void func_801EB064(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_801EB0A4(void) { + func_80029124(0xFE, 0x1); + if (((s32 (*)(void))func_80029504)() == 0x136) { + ((void (*)(s32))func_80029514)(0x140); + } +} + + diff --git a/src/ov_SC01_001/ov_SC01_001_jr_8017D2DC.c b/src/ov_SC01_001/ov_SC01_001_jr_8017D2DC.c index 50a9cfd2c6..7e78869251 100644 --- a/src/ov_SC01_001/ov_SC01_001_jr_8017D2DC.c +++ b/src/ov_SC01_001/ov_SC01_001_jr_8017D2DC.c @@ -4705,7 +4705,291 @@ extern s32 D_801EDA44; INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8017D2DC", func_80181A4C); -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8017D2DC", func_80181E04); +__asm__(".text\n.align 2\n.globl func_80181E04\n.ent\tfunc_80181E04\n" +"func_80181E04:\n.frame $sp,88,$31\n.mask 0x80000000,-8\n.fmask 0,0\n" +".set\tnoreorder\n" +".set noat\n" +"addiu $sp, $sp, -88\n" +"lui $a0, %hi(D_801F3168)\n" +"addiu $a0, $a0, %lo(D_801F3168)\n" +"sw $ra, 80($sp)\n" +"jal func_800547D8\n" +"addiu $a1, $sp, 16\n" +"jal func_80052E38\n" +"addiu $a0, $sp, 16\n" +"addiu $t8, $sp, 48\n" +"addiu $t3, $sp, 56\n" +"addiu $t7, $sp, 68\n" +"lui $t2, 255\n" +"ori $t2, $t2, 65535\n" +"lui $t5, 65280\n" +"lui $t1, %hi(D_801EDA44)\n" +"addiu $t1, $t1, %lo(D_801EDA44)\n" +"addu $a2, $zero, $zero\n" +"lui $v1, %hi(D_800A6610)\n" +"addiu $v1, $v1, %lo(D_800A6610)\n" +"lui $v0, %hi(D_800B9A02)\n" +"lhu $v0, %lo(D_800B9A02)($v0)\n" +"lui $t0, %hi(D_800A5E60)\n" +"lw $t0, %lo(D_800A5E60)($t0)\n" +"sll $v0, $v0, 14\n" +"addu $t6, $v0, $v1\n" +"addiu $a3, $t0, 18\n" +".L80181E6C:\n" +"lw $v0, 0($t1)\n" +"nop\n" +"beqz $v0, .L80182208\n" +"nop\n" +"lui $at, %hi(D_801EDA4E)\n" +"addu $at, $at, $a2\n" +"lhu $v0, %lo(D_801EDA4E)($at)\n" +"nop\n" +"sh $v0, 48($sp)\n" +"lui $at, %hi(D_801EDA52)\n" +"addu $at, $at, $a2\n" +"lhu $v0, %lo(D_801EDA52)($at)\n" +"nop\n" +"sh $v0, 50($sp)\n" +"lui $at, %hi(D_801EDA56)\n" +"addu $at, $at, $a2\n" +"lhu $v0, %lo(D_801EDA56)($at)\n" +"nop\n" +"sh $v0, 52($sp)\n" +"lui $at, %hi(D_801EDA72)\n" +"addu $at, $at, $a2\n" +"lhu $v0, %lo(D_801EDA72)($at)\n" +"nop\n" +"sh $v0, 56($sp)\n" +"lui $at, %hi(D_801EDA76)\n" +"addu $at, $at, $a2\n" +"lhu $v0, %lo(D_801EDA76)($at)\n" +"nop\n" +"sh $v0, 58($sp)\n" +"lui $at, %hi(D_801EDA7A)\n" +"addu $at, $at, $a2\n" +"lhu $v0, %lo(D_801EDA7A)($at)\n" +"nop\n" +"sh $v0, 60($sp)\n" +"lui $at, %hi(D_801EDA4C)\n" +"addu $at, $at, $a2\n" +"lw $v0, %lo(D_801EDA4C)($at)\n" +"lui $at, %hi(D_801EDA7C)\n" +"addu $at, $at, $a2\n" +"lw $a0, %lo(D_801EDA7C)($at)\n" +"lui $at, %hi(D_801EDA50)\n" +"addu $at, $at, $a2\n" +"lw $v1, %lo(D_801EDA50)($at)\n" +"lui $at, %hi(D_801EDA80)\n" +"addu $at, $at, $a2\n" +"lw $a1, %lo(D_801EDA80)($at)\n" +"addu $v0, $v0, $a0\n" +"lui $at, %hi(D_801EDA4C)\n" +"addu $at, $at, $a2\n" +"sw $v0, %lo(D_801EDA4C)($at)\n" +"lui $at, %hi(D_801EDA54)\n" +"addu $at, $at, $a2\n" +"lw $v0, %lo(D_801EDA54)($at)\n" +"addu $v1, $v1, $a1\n" +"lui $at, %hi(D_801EDA50)\n" +"addu $at, $at, $a2\n" +"sw $v1, %lo(D_801EDA50)($at)\n" +"lui $at, %hi(D_801EDA84)\n" +"addu $at, $at, $a2\n" +"lw $v1, %lo(D_801EDA84)($at)\n" +"lui $at, %hi(D_801EDA48)\n" +"addu $at, $at, $a2\n" +"lw $a0, %lo(D_801EDA48)($at)\n" +"addu $v0, $v0, $v1\n" +"lui $at, %hi(D_801EDA54)\n" +"addu $at, $at, $a2\n" +"sw $v0, %lo(D_801EDA54)($at)\n" +"bnez $a0, .L80182000\n" +"addiu $v0, $a0, -1\n" +"lui $at, %hi(D_801EDA70)\n" +"addu $at, $at, $a2\n" +"lw $v0, %lo(D_801EDA70)($at)\n" +"lui $at, %hi(D_801EDA7C)\n" +"addu $at, $at, $a2\n" +"lw $v1, %lo(D_801EDA7C)($at)\n" +"lui $at, %hi(D_801EDA80)\n" +"addu $at, $at, $a2\n" +"lw $a0, %lo(D_801EDA80)($at)\n" +"lui $at, %hi(D_801EDA84)\n" +"addu $at, $at, $a2\n" +"lw $a1, %lo(D_801EDA84)($at)\n" +"addu $v0, $v0, $v1\n" +"lui $at, %hi(D_801EDA70)\n" +"addu $at, $at, $a2\n" +"sw $v0, %lo(D_801EDA70)($at)\n" +"lui $at, %hi(D_801EDA74)\n" +"addu $at, $at, $a2\n" +"lw $v0, %lo(D_801EDA74)($at)\n" +"lui $at, %hi(D_801EDA78)\n" +"addu $at, $at, $a2\n" +"lw $v1, %lo(D_801EDA78)($at)\n" +"addu $v0, $v0, $a0\n" +"addu $v1, $v1, $a1\n" +"lui $at, %hi(D_801EDA74)\n" +"addu $at, $at, $a2\n" +"sw $v0, %lo(D_801EDA74)($at)\n" +"lui $at, %hi(D_801EDA78)\n" +"addu $at, $at, $a2\n" +"sw $v1, %lo(D_801EDA78)($at)\n" +"j .L8018200C\n" +"nop\n" +".L80182000:\n" +"lui $at, %hi(D_801EDA48)\n" +"addu $at, $at, $a2\n" +"sw $v0, %lo(D_801EDA48)($at)\n" +".L8018200C:\n" +"lui $at, %hi(D_801EDA7C)\n" +"addu $at, $at, $a2\n" +"lw $v0, %lo(D_801EDA7C)($at)\n" +"lui $at, %hi(D_801EDA88)\n" +"addu $at, $at, $a2\n" +"lw $a0, %lo(D_801EDA88)($at)\n" +"lui $at, %hi(D_801EDA80)\n" +"addu $at, $at, $a2\n" +"lw $v1, %lo(D_801EDA80)($at)\n" +"lui $at, %hi(D_801EDA8C)\n" +"addu $at, $at, $a2\n" +"lw $a1, %lo(D_801EDA8C)($at)\n" +"addu $v0, $v0, $a0\n" +"lui $at, %hi(D_801EDA7C)\n" +"addu $at, $at, $a2\n" +"sw $v0, %lo(D_801EDA7C)($at)\n" +"lui $at, %hi(D_801EDA84)\n" +"addu $at, $at, $a2\n" +"lw $v0, %lo(D_801EDA84)($at)\n" +"addu $v1, $v1, $a1\n" +"lui $at, %hi(D_801EDA80)\n" +"addu $at, $at, $a2\n" +"sw $v1, %lo(D_801EDA80)($at)\n" +"lui $at, %hi(D_801EDA90)\n" +"addu $at, $at, $a2\n" +"lw $v1, %lo(D_801EDA90)($at)\n" +"lui $at, %hi(D_801EDA7C)\n" +"addu $at, $at, $a2\n" +"lw $a0, %lo(D_801EDA7C)($at)\n" +"addu $v0, $v0, $v1\n" +"lui $at, %hi(D_801EDA84)\n" +"addu $at, $at, $a2\n" +"sw $v0, %lo(D_801EDA84)($at)\n" +"blez $a0, .L801820B8\n" +"nop\n" +"lui $at, %hi(D_801EDA4C)\n" +"addu $at, $at, $a2\n" +"lw $v1, %lo(D_801EDA4C)($at)\n" +"lui $at, %hi(D_801EDA58)\n" +"addu $at, $at, $a2\n" +"lw $v0, %lo(D_801EDA58)($at)\n" +"j .L801820D8\n" +"slt $v0, $v0, $v1\n" +".L801820B8:\n" +"lui $at, %hi(D_801EDA4C)\n" +"addu $at, $at, $a2\n" +"lw $v0, %lo(D_801EDA4C)($at)\n" +"lui $at, %hi(D_801EDA58)\n" +"addu $at, $at, $a2\n" +"lw $v1, %lo(D_801EDA58)($at)\n" +"nop\n" +"slt $v0, $v0, $v1\n" +".L801820D8:\n" +"beqz $v0, .L801820EC\n" +"nop\n" +"lui $at, %hi(D_801EDA44)\n" +"addu $at, $at, $a2\n" +"sw $zero, %lo(D_801EDA44)($at)\n" +".L801820EC:\n" +"lw $v0, 0($t1)\n" +"nop\n" +"beqz $v0, .L80182208\n" +"nop\n" +"lwc2 $0, 0($t8)\n" +"lwc2 $1, 4($t8)\n" +"lwc2 $2, 0($t3)\n" +"lwc2 $3, 4($t3)\n" +"lwc2 $4, 0($t3)\n" +"lwc2 $5, 4($t3)\n" +"nop\n" +"nop\n" +"rtpt\n" +"addiu $v0, $sp, 64\n" +".word 0x484cf800\n" +"nop\n" +"sw $t4, 0($v0)\n" +"lui $v1, 32645\n" +"lw $v0, 64($sp)\n" +"ori $v1, $v1, 57344\n" +"and $v0, $v0, $v1\n" +"bnez $v0, .L80182208\n" +"addiu $v1, $t0, 12\n" +"addiu $v0, $t0, 20\n" +"swc2 $12, 0($v1)\n" +"swc2 $13, 0($v0)\n" +"addiu $v1, $sp, 72\n" +"addiu $v0, $sp, 76\n" +"swc2 $17, 0($t7)\n" +"swc2 $18, 0($v1)\n" +"swc2 $19, 0($v0)\n" +"lw $v1, 68($sp)\n" +"lw $v0, 72($sp)\n" +"nop\n" +"addu $a1, $v1, $v0\n" +"bgez $a1, .L80182184\n" +"lui $v1, 57600\n" +"addiu $a1, $a1, 7\n" +".L80182184:\n" +"ori $v1, $v1, 32\n" +"addiu $v0, $zero, 5\n" +"sb $v0, -15($a3)\n" +"addiu $v0, $zero, 82\n" +"sb $v0, -7($a3)\n" +"addiu $v0, $zero, 224\n" +"sb $v0, -9($a3)\n" +"addiu $v0, $zero, 136\n" +"sb $v0, -8($a3)\n" +"addiu $v0, $zero, 64\n" +"sb $v0, -2($a3)\n" +"addiu $v0, $zero, 96\n" +"sb $v0, -1($a3)\n" +"addiu $v0, $zero, 16\n" +"sw $v1, -14($a3)\n" +"sb $zero, -10($a3)\n" +"sb $v0, 0($a3)\n" +"addiu $a3, $a3, 24\n" +"sra $v1, $a1, 3\n" +"sll $v1, $v1, 2\n" +"addu $v1, $v1, $t6\n" +"lw $a0, 0($t0)\n" +"lw $v0, 0($v1)\n" +"and $a0, $a0, $t5\n" +"and $v0, $v0, $t2\n" +"or $a0, $a0, $v0\n" +"sw $a0, 0($t0)\n" +"and $a0, $t0, $t2\n" +"lw $v0, 0($v1)\n" +"addiu $t0, $t0, 24\n" +"and $v0, $v0, $t5\n" +"or $v0, $v0, $a0\n" +"sw $v0, 0($v1)\n" +".L80182208:\n" +"addiu $t1, $t1, 80\n" +"lui $v0, %hi(D_801F2A44)\n" +"addiu $v0, $v0, %lo(D_801F2A44)\n" +"slt $v0, $t1, $v0\n" +"bnez $v0, .L80181E6C\n" +"addiu $a2, $a2, 80\n" +"lui $at, %hi(D_800A5E60)\n" +"sw $t0, %lo(D_800A5E60)($at)\n" +"lw $ra, 80($sp)\n" +"addiu $sp, $sp, 88\n" +"jr $ra\n" +"nop\n" +".set at\n" +".set reorder\n" +".end\tfunc_80181E04\n"); + extern u8 D_801F2A44[]; extern u8 D_801F2A48[]; diff --git a/src/ov_SC01_005/ov_SC01_005_jr_8017C340.c b/src/ov_SC01_005/ov_SC01_005_jr_8017C340.c index 86d066c993..2ea411c33f 100644 --- a/src/ov_SC01_005/ov_SC01_005_jr_8017C340.c +++ b/src/ov_SC01_005/ov_SC01_005_jr_8017C340.c @@ -3357,7 +3357,32 @@ DEFINE_func_8017D808() /* dedup: shared engine-core @0x8017D808 (src/shared) */ INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017C340", func_8017D9A0); -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017C340", func_8017D9F4); +s32 func_8017D9F4(s32 arg0) { + extern struct { s32 word0; s32 word4; } cdFileLocTable[]; + extern s32 D_800C7C60; + extern s32 *D_800C7C64; + extern s32 D_800A2E20; + extern s32 D_801CAE4C; + extern s32 func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4); + extern u16 D_80185EFC[]; + extern s16 D_80185EFE[]; + s32 *p; + u16 t; + s32 w; + s32 x; + + t = *(u16 *)((s8 *)D_80185EFC + arg0 * 4); + w = *(s16 *)((s8 *)D_80185EFE + arg0 * 4); + D_800C7C64 = &D_800A2E20; + p = &D_800C7C60; + *p = w; + x = (s16)t; + if (x <= 0) { + return 1; + } + return func_8001ABBC(0, 0, (u8 *)&cdFileLocTable[x], D_801CAE4C, p); +} + DEFINE_func_8017DA84() /* dedup: shared engine-core @0x8017DA84 (src/shared) */ diff --git a/src/ov_SC01_009/ov_SC01_009_jr_8018057C.c b/src/ov_SC01_009/ov_SC01_009_jr_8018057C.c index 1abe413f9e..0214529e41 100644 --- a/src/ov_SC01_009/ov_SC01_009_jr_8018057C.c +++ b/src/ov_SC01_009/ov_SC01_009_jr_8018057C.c @@ -3256,7 +3256,17 @@ void func_80181600(void) } -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8018057C", func_80181688); +extern void func_80029514(s32); +extern s16 func_801816FC(s32); + +void func_80181688(void) +{ + if (func_801816FC(0xC) >= 3 && func_801816FC(0x18) >= 3 && func_801816FC(0x1F) >= 3) { + func_80029514(0x2EE); + } + return; +} + INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8018057C", func_801816FC); diff --git a/src/ov_SC01_080/ov_SC01_080_jr_8017AE2C.c b/src/ov_SC01_080/ov_SC01_080_jr_8017AE2C.c index 8d3a7ec85a..8c16045a93 100644 --- a/src/ov_SC01_080/ov_SC01_080_jr_8017AE2C.c +++ b/src/ov_SC01_080/ov_SC01_080_jr_8017AE2C.c @@ -5733,7 +5733,26 @@ INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8017AE2C", func_8018185 INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8017AE2C", func_80181918); -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8017AE2C", func_801819D0); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_800D23D0(void *a0); + +typedef struct { u8 b[8]; } Copy8; + +void func_801819D0(s32 a0) { + u16 sp10[3]; + u16 sp18[4]; + + sp10[0] = *(u16 *)(a0 + 6); + sp10[1] = *(u16 *)(a0 + 0xA); + sp10[2] = *(u16 *)(a0 + 0xE); + func_800D20C0(sp10, sp18, 1); + func_800D23D0(sp18); + sp18[2] = sp18[1] << 2; + if (*(s32 *)(a0 + 0x34) != 0) { + *(Copy8 *)(*(s32 *)(a0 + 0x34) + 0x10) = *(Copy8 *)sp18; + } +} + void func_80181A70(void *a0) { diff --git a/src/ov_SC03_001/ov_SC03_001_jr_8017AE2C.c b/src/ov_SC03_001/ov_SC03_001_jr_8017AE2C.c index c079015f99..32ceeeb090 100644 --- a/src/ov_SC03_001/ov_SC03_001_jr_8017AE2C.c +++ b/src/ov_SC03_001/ov_SC03_001_jr_8017AE2C.c @@ -8497,7 +8497,7 @@ extern void func_80187994(s32, s32, s32, s32); extern void func_80187778(s32 *a0, s32 a1); extern s32 func_801788B8(s32 arg0, s32 arg1); extern void func_80184350(void *a0); -extern void func_801843DC(void *a0); +extern s32 func_801843DC(); void func_801840E4(void *a0) { diff --git a/src/ov_SC03_089/ov_SC03_089_jr_8017CA80.c b/src/ov_SC03_089/ov_SC03_089_jr_8017CA80.c index 52a1db741d..87b1bfbfed 100644 --- a/src/ov_SC03_089/ov_SC03_089_jr_8017CA80.c +++ b/src/ov_SC03_089/ov_SC03_089_jr_8017CA80.c @@ -4160,7 +4160,14 @@ void func_80181340(s32 a0) { void func_80181388(void) { } -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8017CA80", func_80181390); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80171990(u8 *a0); + +void func_80181390(s32 arg0) { + func_80146994(0x1A, arg0, 0x6E706E8, 0); + func_80171990((u8 *)arg0); +} + extern s32 func_8014C050(s32 arg0, s32 arg1); @@ -4274,7 +4281,33 @@ void func_801815D4(void) { } -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8017CA80", func_8018166C); +extern void func_8012A018(s32 a0, s32 a1); +extern void func_8012A094(s32 a0); +extern void func_801817A4(void *a0); +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; + +void func_8018166C(void) { + D_80126954 = 0x190; + D_8012695C = 0x3E8; + D_80126968 = 0xA6; + D_8012696A = 0x800; + D_8012696C = 0; + D_80126976 = 0; + D_80126978 = -0x41; + D_8012697A = 0; + func_8012A018(func_801817A4, 2); + func_8012A094(D_80126948); + func_801817A4(D_80126948); +} + INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8017CA80", func_80181708); @@ -5833,7 +5866,16 @@ void func_80184330(s32 arg0) { } -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8017CA80", func_80184384); +extern void func_8012BE54(s32 a0); +extern s16 D_80126CBA; +extern s32 func_80184D28(); + +void func_80184384(s32 param_1) { + if (((s32 (*)(s32))func_8012BE54)(param_1) <= 0x40000 && D_80126CBA == 0 && func_80184D28(param_1) == 0) { + *(s16 *)(param_1 + 2) = 5; + } +} + INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8017CA80", func_801843E4); diff --git a/src/ov_SC03_094/ov_SC03_094_jr_8017BEBC.c b/src/ov_SC03_094/ov_SC03_094_jr_8017BEBC.c index 52835d94da..e9205ab18c 100644 --- a/src/ov_SC03_094/ov_SC03_094_jr_8017BEBC.c +++ b/src/ov_SC03_094/ov_SC03_094_jr_8017BEBC.c @@ -4047,7 +4047,20 @@ void func_8017E9D4(s32 a0) { } -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8017BEBC", func_8017EA74); +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_8017EA74(void *a0) { + if (*(s16 *)((s32)a0 + 0xFC) == 0) { + *(u16 *)((s32)a0 + 0xA) -= 4; + *(u16 *)((s32)a0 + 0xFE) += 4; + if (*(s16 *)((s32)a0 + 0xFE) >= 0xC0) { + *(s16 *)((s32)a0 + 0x2) = 2; + func_8002D4C8(0x746, 0); + func_8002D4C8(4, 0x745); + } + } +} + void func_8017EAE4(void) { } diff --git a/src/ov_SC03_104/ov_SC03_104_jr_8017CA80.c b/src/ov_SC03_104/ov_SC03_104_jr_8017CA80.c index c8592a3c9a..ad6f493dc7 100644 --- a/src/ov_SC03_104/ov_SC03_104_jr_8017CA80.c +++ b/src/ov_SC03_104/ov_SC03_104_jr_8017CA80.c @@ -3882,7 +3882,19 @@ void func_80180D88(void) { } -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8017CA80", func_80180DC8); +void func_80180DC8(void) { + + extern u8 D_8018EB90[]; + extern u8 D_8018EC1C; + extern u8 *D_801274C8; + extern void *D_801274CC; + extern s32 D_8012704C; + D_801274C8 = D_8018EB90; + D_801274CC = (void *)&D_8018EC1C; + func_80181774(1); + D_8012704C = 1; +} + extern void (*D_8018E7A4[])(void); @@ -4072,9 +4084,30 @@ void func_801811D8(void *a0) { } -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8017CA80", func_80181214); +extern void func_8018125C(); + +void func_80181214(int param_1) +{ + s32 s0; + + s0 = param_1; + func_80171990((u8 *)param_1); + func_80146994(0x19, s0, 0x6920693, 0); + func_8018125C(s0); +} + + +extern s32 func_8014C050(s32 a0, s32 a1); +extern void func_80171928(void *a0); +extern u8 D_800AE6BD; + +void func_8018125C(void *a0) { + if (func_8014C050((s32)a0, 0x19) == 0) { + D_800AE6BD = D_800AE6BD + 1; + func_80171928(a0); + } +} -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8017CA80", func_8018125C); extern void func_8016EE40(s32 a0, s32 a1, s32 a2); extern s32 D_8018E7DC; @@ -4123,7 +4156,33 @@ void func_801812D8(void) { } -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8017CA80", func_8018136C); +void func_8018136C(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_80181404(void *); + extern void func_8012A018(s32, s32); + extern void func_8012A094(s32); + + D_80126954 = 0x190; + D_8012695C = 0x3E8; + D_80126968 = 0x35; + D_8012696A = 0; + D_8012696C = 0; + D_80126976 = 0; + D_80126978 = -0x73; + D_8012697A = 0; + func_8012A018((s32)func_80181404, 1); + func_8012A094((s32)D_80126948); + func_80181404((void *)D_80126948); +} + extern void (*D_8018E7EC[])(void); @@ -4350,7 +4409,18 @@ L_E78: INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8017CA80", func_80181A2C); -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8017CA80", func_80181A84); +extern void func_80181AD0(s32 a0, s32 a1); +extern void func_80181B14(void); + +void func_80181A84(s32 a0, s32 a1) { + u16 v = *(u16 *)a0; + if (v != 0x178 && v != 0x1E8) { + func_80181AD0(a0 + 4, a1); + } else { + ((void (*)(s32, s32, s32))func_80181B14)(a0 + 4, a1, 0xC0); + } +} + INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8017CA80", func_80181AD0); @@ -4375,7 +4445,32 @@ void func_80181B60(void *a0) { } -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8017CA80", func_80181BDC); +void func_80181BDC(void *arg0) +{ + extern void func_8012C354(s32 a0, void *a1); + extern void func_8012A828(s32 a0, void *a1); + extern s32 func_8012C658(s32 a0, s32 a1, s32 a2); + extern s32 D_80199DD8; + extern s32 D_80199E1C; + extern u8 D_8019C84C[]; + + if (((s32 (*)(s32, void *))func_8012C354)((s32)arg0, &D_80199DD8)) { + *(u8 *)((char *)arg0 + 0xC0) = 1; + *(s32 *)((char *)arg0 + 0xB4) = -1; + *(u32 *)((char *)arg0 + 0xC4) |= 1; + *(s32 **)((char *)arg0 + 0xBC) = &D_80199E1C; + *(s32 *)((char *)arg0 + 0xE0) = -((rand() % 8 + 8) << 16); + func_8012A828((s32)arg0, D_8019C84C); + *(s32 *)((char *)arg0 + 0xCC) = + func_8012C658(0x178, *(s16 *)((char *)arg0 + 0x70), (s32)arg0); + if (*(u16 *)((char *)arg0 + 0x70) & 1) { + *(s16 *)((char *)arg0 + 0x2) = 1; + } else { + *(s16 *)((char *)arg0 + 0x2) = 4; + } + } +} + INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8017CA80", func_80181CA8); diff --git a/src/ov_SC03_105/ov_SC03_105_jr_8017C8D0.c b/src/ov_SC03_105/ov_SC03_105_jr_8017C8D0.c index a7d707f374..a2d168e133 100644 --- a/src/ov_SC03_105/ov_SC03_105_jr_8017C8D0.c +++ b/src/ov_SC03_105/ov_SC03_105_jr_8017C8D0.c @@ -6554,7 +6554,41 @@ void func_80187928(void *a0) { INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_80187A30); -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_80187F7C); +extern u16 D_800B99DA; +extern u16 D_8018F154[]; +extern s16 D_801BC9E8[]; +extern s32 D_8018F174; +extern void func_800183E0(s32 a0); + +void func_80187F7C(void) { + u16 *src; + s16 *dst; + s32 i; + s32 m; + s32 w; + s32 v; + s32 pad[2]; + + src = D_8018F154; + i = 0; + m = D_800B99DA & 0xF; + dst = &D_801BC9E8[0xF - m]; + for (; i <= m; i++) { + w = *src++; + *dst++ = w | -0x8000; + } + dst = D_801BC9E8; + if (15 - m > 0) { + i = 0; + do { + v = *src++; + *dst++ = v | -0x8000; + i++; + } while (i < 15 - m); + } + func_800183E0(&D_8018F174); +} + extern void (*D_8018F19C[])(void); diff --git a/src/ov_SC03_110/ov_SC03_110_jr_8017D898.c b/src/ov_SC03_110/ov_SC03_110_jr_8017D898.c index 0330cb118f..4ca24b9dc2 100644 --- a/src/ov_SC03_110/ov_SC03_110_jr_8017D898.c +++ b/src/ov_SC03_110/ov_SC03_110_jr_8017D898.c @@ -3584,7 +3584,7 @@ s32 func_8017F434(void) { extern s32 func_8012C044(void *); extern void (*D_8019C0AC[])(void); extern void func_80180CF4(void *); -extern void func_80180D2C(void *); +extern void func_80180D2C(); void func_8017F43C(void *a0) { diff --git a/src/ov_SC03_110/ov_SC03_110_jr_8017FBC8.c b/src/ov_SC03_110/ov_SC03_110_jr_8017FBC8.c index c8df50657e..7663dec650 100644 --- a/src/ov_SC03_110/ov_SC03_110_jr_8017FBC8.c +++ b/src/ov_SC03_110/ov_SC03_110_jr_8017FBC8.c @@ -2894,7 +2894,21 @@ INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_8017FF6 INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_8017FFC8); -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_80180094); +extern void func_8012BE54(s32 a0); +extern void func_8012B21C(void *a0); +extern void func_8012E88C(s32 a0); +extern void func_80143994(s32 *a0, s32 a1); + +void func_80180094(void *arg0) { + if (((s32 (*)(s32))func_8012BE54)((s32)arg0) <= 0x40000) { + *(s16 *)((char *)arg0 + 0x2) = 9; + func_8012B21C(arg0); + func_8012E88C((s32)arg0); + *(s32 *)((char *)arg0 + 0xCC) = + ((s32 (*)(s32 *, s32))func_80143994)(arg0, 0x1000); + } +} + INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_801800F0); @@ -2903,7 +2917,7 @@ INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_8018027 INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_8018035C); extern s32 D_8019BFAC; -extern void func_80180D2C(void); +extern void func_80180D2C(); extern void func_8002D4C8(s32 a0, s32 a1); extern void func_8012A828(s32*, s32); extern void func_80180AF0(void); @@ -2917,19 +2931,41 @@ void func_8018066C(s32 *a0) { extern void func_80180AF0(void); -extern void func_80180D2C(void); +extern void func_80180D2C(); void func_801806B8(s32 a0) { func_80180AF0(); ((void (*)(s32))func_80180D2C)(a0); } -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_801806E8); +extern void func_8012B14C(s32 a0, s32 a1); +extern s32 D_8019C104; +extern s32 D_8019C114; +extern s32 D_8019BFAC; +extern void func_8012A828(s32 *a0, s32 a1); +extern void func_80180D2C(); +extern void func_80180AF0(void); + +void func_801806E8(s32 param_1) { + *(u8 *)(param_1 + 0xC2) = 0; + *(u8 *)(param_1 + 0xC3) = 0; + func_80180AF0(); + + if (*(u16 *)(param_1 + 0x5E) == 9 || *(u16 *)(param_1 + 0x5E) == 0x1C) { + func_8012B14C(param_1, (s32)&D_8019C104); + } else { + func_8012B14C(param_1, (s32)&D_8019C114); + } + + ((void (*)(s32, void *))func_8012A828)((s32)param_1, &D_8019BFAC); + ((void (*)(s32))func_80180D2C)(param_1); +} + void func_8018076C(s32 param_1) { extern void func_80180C40(s32); - extern void func_80180D2C(void); + extern void func_80180D2C(); extern void func_8012DBD0(s32 a0, s32 a1, s32 a2, s32 a3); extern s32 func_8012CC64(s32 a0, void *a1); extern s32 func_8012CC1C(s32 a0, void *a1); @@ -3088,7 +3124,17 @@ LAB_80180740: INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_80180AF0); -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_80180B54); +extern void func_8012A828(s32 *a0, s32 a1); +extern s32 func_8012B030(u8 *a0); +extern void (*D_80182098[])(void); + +void func_80180B54(void *arg0) { + *(s16 *)((char *)arg0 + 0x2) = 1; + *(s16 *)((char *)arg0 + 0x5c) = *(u16 *)(*(s32 *)((char *)arg0 + 0x78) + 0x2); + func_8012A828(arg0, D_80182098); + func_8012B030(arg0); +} + void func_80180BA0(void *a0) { @@ -3126,7 +3172,39 @@ extern void func_80180E10(s32 arg0); } -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_80180C40); +void func_80180C40(s32 a0) +{ + extern void func_8012E8A8(u8 *a0); + extern void func_80180CF4(s32); + extern void func_801439C0(u8 *a0); + + u16 flags = *(u16 *)(a0 + 0x70); + + if ((flags & 2) != 0) { + if ((flags & 0x10) != 0) { + *(s16 *)(a0 + 0x2) = 8; + *(s8 *)(a0 + 0xC1) = 0; + *(s16 *)(a0 + 0x5E) = 0; + *(s16 *)(a0 + 0x5C) = *(u16 *)(*(s32 *)(a0 + 0x78) + 0x2); + func_8012E8A8((u8 *)a0); + *(s16 *)(a0 + 0x6) = *(u16 *)(a0 + 0x88); + *(s16 *)(a0 + 0xA) = *(u16 *)(a0 + 0x8A); + *(s16 *)(a0 + 0xE) = *(u16 *)(a0 + 0x8C); + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = 0; + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = 0; + func_8012B2CC(a0); + { + s32 temp = *(s32 *)(a0 + 0xCC); + if (temp != 0) { + func_801439C0((u8 *)temp); + } + } + return; + } + } + func_80180CF4(a0); +} + extern void func_80016714(void *a0, s32 a1); extern void func_8012C098(void); @@ -3138,9 +3216,84 @@ extern void func_80016714(void *a0, s32 a1); } -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_80180D2C); +typedef struct { s16 a, b, c, d; } V8x_80180D2C; + +extern u8 D_800AF630[]; +extern s32 D_8019BFFC; +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern s32 func_8004787C(s32 a0); + +void func_80180D2C(void *arg0) { + register s32 v0 __asm__("$2"); + register s32 s0 __asm__("$16"); + register s32 s1 __asm__("$17") = (s32)arg0; + register u8 *s2 __asm__("$18") = (u8 *)D_800AF630; + s32 sp10[4]; + + v0 = *(s32 *)(s1 + 0xD0); + if (v0 != 0) { + s0 = v0; + func_8012F214((s32)arg0, (s32)&D_8019BFFC, (s32)sp10); + *(V8x_80180D2C *)(s0 + 8) = *(V8x_80180D2C *)sp10; + + if (*(s32 *)(*(s32 *)(s1 + 0x20) + 4) < 0) { + *(s32 *)(s0 + 4) |= (s32)0x80000000; + } else { + __asm__ __volatile__(""); + *(s32 *)(s0 + 4) &= 0x7FFFFFFF; + } + + { + u16 x = *(u16 *)(s2 + 0xA3AA); + s16 r = (func_8004787C(((x * 7) << 3) & 0x7F8) >> 4) + 0x455; + *(s16 *)(s0 + 0x1A) = r; + *(s16 *)(s0 + 0x18) = r; + } + } +} + + +typedef struct { + s16 f00; + s16 f02; + s16 f04; + s16 f06; + s16 f08; + s16 f0A; + s16 f0C; + s16 f0E; + s32 f10; +} Loc_80180E10; + +extern s32 rand(void); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern s32 func_8012C51C(void *a0, s32 a1); + +void func_80180E10(s32 arg0) { + Loc_80180E10 loc; + u32 buf[2]; + s32 i; + register u32 *bp __asm__("$19"); + + i = 0; + bp = buf; + loc.f06 = 0x33; + loc.f0A = 0; + loc.f08 = 0; + loc.f10 = 0; + loc.f0E = 0; + loc.f0C = 0x7FFF; + + while (i < 5) { + func_8012B0B4(bp, rand() % 4096, rand() % 64); + loc.f00 = *(u16 *)(arg0 + 6) + *(s32 *)buf; + loc.f02 = *(u16 *)(arg0 + 0xA) - 0x60; + loc.f04 = *(u16 *)(arg0 + 0xE) + (*(s32 *)buf >> 16); + func_8012C51C(&loc, arg0); + i++; + } +} -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_80180E10); INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_80180F08); diff --git a/src/ov_SC04_011/ov_SC04_011_jr_8017D494.c b/src/ov_SC04_011/ov_SC04_011_jr_8017D494.c index 8c4f20dc02..20f0e13123 100644 --- a/src/ov_SC04_011/ov_SC04_011_jr_8017D494.c +++ b/src/ov_SC04_011/ov_SC04_011_jr_8017D494.c @@ -7467,7 +7467,26 @@ void func_80185C5C(u16 id) } -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_80185D04); +extern s32 D_801EFC64[]; +void func_80185D9C(void *a0); + +void func_80185D04(s32 a0) +{ + s32 i = 6; + s32 h = 0x1000; + s32 *p = D_801EFC64; + + for (; i < 0x15; i++, p++) { + s32 rec = *p; + *(u16 *)(*(s32 *)(rec + 0x20) + 0x18) = h; + *(u16 *)(*(s32 *)(rec + 0x20) + 0x1A) = h; + *(u16 *)(rec + 0x86) &= ~1; + if (a0 != 0) { + func_80185D9C((void *)rec); + } + } +} + void func_80185D9C(void *a0) { @@ -10034,7 +10053,17 @@ void func_80189EAC(s32 arg0) { } -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_80189EFC); +extern void func_80189F6C(); + +void func_80189EFC(s32 arg0) { + u16 arr[3]; + + arr[0] = *(u16 *)(arg0 + 6) + (rand() & 0x3F) - 0x20; + arr[1] = *(u16 *)(arg0 + 0xA) - 0x40; + arr[2] = *(u16 *)(arg0 + 0xE) + (rand() & 0xFF) - 0x80; + func_80189F6C(arg0, arr); +} + #include "common.h" diff --git a/src/ov_SC05_008/ov_SC05_008_jr_8017AE2C.c b/src/ov_SC05_008/ov_SC05_008_jr_8017AE2C.c index aaba54cd25..6be6092db8 100644 --- a/src/ov_SC05_008/ov_SC05_008_jr_8017AE2C.c +++ b/src/ov_SC05_008/ov_SC05_008_jr_8017AE2C.c @@ -4805,7 +4805,19 @@ extern s32 func_8012AD50(void *a0); } -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_8017FBCC); +extern void func_8012C1B8(void); +extern s32 func_8012AD50(void *a0); +extern s32 D_80199608; + +void func_8017FBCC(void *a0) { + s32 v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)a0 + 0x20) = v0; + if (v0 != 0) { + func_8018227C(a0, &D_80199608); + func_8012AD50(a0); + } +} + INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_8017FC14); diff --git a/src/ov_SC05_017/ov_SC05_017_jr_80182A74.c b/src/ov_SC05_017/ov_SC05_017_jr_80182A74.c index d478e63c70..61d216ca56 100644 --- a/src/ov_SC05_017/ov_SC05_017_jr_80182A74.c +++ b/src/ov_SC05_017/ov_SC05_017_jr_80182A74.c @@ -3118,7 +3118,44 @@ INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80182A74", func_80182FA INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80182A74", func_80183004); -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80182A74", func_8018305C); +extern s32 func_801844BC(void *a0, void *a1); +extern void func_80183100(); +extern short D_80191C54; +extern short D_80191C44; +extern s32 func_801848AC(s32 arg0, s32 arg1); +extern void func_801849B8(s32 *a0, s32 a1); +extern s32 func_801788B8(s32 arg0, s32 arg1); + +void func_8018305C(void *arg0) { + s32 v; + void *v1; + + if (func_801844BC(arg0, &D_80191C54) != 0) { + v = func_801848AC(6, 7); + if (v == 0) { + v = func_801848AC(7, 0x10); + if (v == 0) { + v = func_801848AC(0x10, 0x14); + if (v == 0) { + v = 1; + } else { + v = 0xC; + } + } else { + v = 6; + } + } else { + v = 5; + } + *(s16 *)((char *)arg0 + 0x2) = v; + __asm__ __volatile__(""); + func_801849B8((s32 *)arg0, (s32)&D_80191C44); + v1 = *(void **)((char *)arg0 + 0x68); + *(s16 *)((char *)v1 + 0xC) = 0x7FFF; + func_801788B8((s32)arg0, (s32)&func_80183100); + } +} + INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80182A74", func_80183100); diff --git a/src/ov_SC06_014/ov_SC06_014_jr_8017BEBC.c b/src/ov_SC06_014/ov_SC06_014_jr_8017BEBC.c index 3f3042778e..76c3522c07 100644 --- a/src/ov_SC06_014/ov_SC06_014_jr_8017BEBC.c +++ b/src/ov_SC06_014/ov_SC06_014_jr_8017BEBC.c @@ -4736,7 +4736,47 @@ next: } -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8017BEBC", func_8017FD74); +extern u8 D_801202A0[]; +extern s32 D_801A14A8; +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80015978(s32 a0, s32 *a1); +extern s32 func_80013328(s32 a0, s32 a1); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); + +void func_8017FD74(s32 arg0) +{ + s16 v; + s32 i; + s32 best; + unsigned short *p; + s32 buf[2]; + + best = 0x7FFFFFFF; + i = 0; + p = (unsigned short *)D_801202A0; + D_801A14A8 = 0; +loop: + if (*p == 0x26E) { + v = (s16)func_80013328(arg0 + 4, (s32)(p + 2)); + if (v < best) { + best = v; + D_801A14A8 = (s32)p; + } + } + __asm__("" :: + "r"(best)); + i++; + p += 0x86; + if (i < 0x60) { + goto loop; + } + *(s16 *)(arg0 + 0x208) = 0; + func_80015978(arg0 + 4, buf); + func_8012F2E8(D_801A14A8, (s32)buf, arg0 + 0x20C); + *(s32 *)(arg0 + 0x204) = D_801A14A8; + func_8002D4C8(0x8B0, 0); +} + extern void func_80015954(s32 a0, s32 a1); extern void func_8012F14C(s32 a0, s32 a1, s32 a2); diff --git a/src/ov_SC06_015/ov_SC06_015_jr_8017BEBC.c b/src/ov_SC06_015/ov_SC06_015_jr_8017BEBC.c index 224fb0cf33..6a7b3e3e47 100644 --- a/src/ov_SC06_015/ov_SC06_015_jr_8017BEBC.c +++ b/src/ov_SC06_015/ov_SC06_015_jr_8017BEBC.c @@ -4038,7 +4038,7 @@ void func_8017E57C(u8 *a0) { INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8017BEBC", func_8017E5B8); -extern s32 func_8017E9A8(void); +extern s32 func_8017E9A8(); extern void func_8002D4C8(s32 a0, s32 a1); extern void func_80171928(void *a0); @@ -4072,7 +4072,7 @@ void func_8017E668(void *a0) { INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8017BEBC", func_8017E6A4); -extern s32 func_8017E9A8(void); +extern s32 func_8017E9A8(); extern void func_8002D4C8(s32 a0, s32 a1); extern s32 func_80171990(u8*); @@ -4121,7 +4121,27 @@ void func_8017E7EC(void *arg0) { INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8017BEBC", func_8017E8CC); -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8017BEBC", func_8017E9A8); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8017E9A8(s32 param_1) { + s32 sp10[2]; + u16 w; + s32 t; + s32 e; + + t = *(s32 *)(param_1 + 0x204); + e = *(s32 *)(t + 0x20); + if (t != 0) { + *(u16 *)(e + 0x12) += 0x80; + func_8012F14C(e + 0x34, (s32)param_1 + 0x20C, (s32)sp10); + func_80015954((s32)sp10, (s32)param_1 + 4); + } + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) + 0x80; + *(u16 *)(param_1 + 0x208) = w = *(u16 *)(param_1 + 0x208) + 0x80; + return (s16)w == 0x800; +} + diff --git a/src/ov_SC06_029/ov_SC06_029_jr_8017C954.c b/src/ov_SC06_029/ov_SC06_029_jr_8017C954.c index cc6e202387..f932ae9c9d 100644 --- a/src/ov_SC06_029/ov_SC06_029_jr_8017C954.c +++ b/src/ov_SC06_029/ov_SC06_029_jr_8017C954.c @@ -4792,7 +4792,20 @@ void func_80181C04(s32 param_1) } -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_80181D40); +extern void func_8012C218(void *a0); + +void func_80181D40(s32 param_1) +{ + s32 iVar1; + + func_80181964(param_1); + iVar1 = *(s32 *)(param_1 + 8) + *(s32 *)(*(s32 *)(param_1 + 0x64) + 0x14); + *(s32 *)(param_1 + 8) = iVar1; + if (0xFFFFFF < iVar1) { + func_8012C218((void *)param_1); + } +} + extern void (*D_80190238[])(void); extern void *func_80185C6C(); diff --git a/src/shared/engine_core.h b/src/shared/engine_core.h index 34561aec66..24d568d5a1 100644 --- a/src/shared/engine_core.h +++ b/src/shared/engine_core.h @@ -3532,7 +3532,7 @@ extern void func_8012956C(void); \ extern void func_8016E95C(void); \ extern void func_801754A8(void); \ - extern void func_8013BC7C(void *arg0); \ + extern void func_8013BC7C(); \ extern void func_8013BCDC(void); \ extern void func_801379FC(void); \ extern void func_8001212C(void); \ @@ -4357,7 +4357,7 @@ extern void func_8012956C(void); \ extern void func_8016E95C(void); \ extern void func_801754A8(void); \ - extern void func_8013BC7C(void); \ + extern void func_8013BC7C(); \ extern void func_8013BCDC(void); \ extern void func_801379FC(void); \ extern void func_8001212C(void); \ @@ -7320,7 +7320,7 @@ extern void func_8012956C(void); \ extern void func_8016E95C(void); \ extern void func_801754A8(void); \ - extern void func_8013BC7C(void); \ + extern void func_8013BC7C(); \ extern void func_8013BCDC(void); \ extern void func_801379FC(void); \ extern void func_8001212C(void); \ @@ -13343,7 +13343,7 @@ extern void func_8012956C(void); \ extern void func_8016E95C(void); \ extern void func_801754A8(void); \ - extern void func_8013BC7C(void); \ + extern void func_8013BC7C(); \ extern void func_8013BCDC(void); \ extern void func_801379FC(void); \ extern void func_8001212C(void); \ @@ -21163,7 +21163,7 @@ extern void func_8012956C(void); \ extern void func_8016E95C(void); \ extern void func_801754A8(void); \ - extern void func_8013BC7C(void); \ + extern void func_8013BC7C(); \ extern void func_8013BCDC(void); \ extern void func_801379FC(void); \ extern void func_8001212C(void); \ @@ -22397,7 +22397,7 @@ extern void func_8012956C(void); \ extern void func_8016E95C(void); \ extern void func_801754A8(void); \ - extern void func_8013BC7C(void); \ + extern void func_8013BC7C(); \ extern void func_8013BCDC(void); \ extern void func_801379FC(void); \ extern void func_8001212C(void); \ @@ -32726,7 +32726,7 @@ extern void func_8012956C(void); \ extern void func_8016E95C(void); \ extern void func_801754A8(void); \ - extern void func_8013BC7C(void); \ + extern void func_8013BC7C(); \ extern void func_8013BCDC(void); \ extern void func_801379FC(void); \ extern void func_8001212C(void); \ @@ -40056,7 +40056,7 @@ extern void func_8012956C(void); \ extern void func_8016E95C(void); \ extern void func_801754A8(void); \ - extern void func_8013BC7C(void); \ + extern void func_8013BC7C(); \ extern void func_8013BCDC(void); \ extern void func_801379FC(void); \ extern void func_8001212C(void); \ @@ -40983,7 +40983,7 @@ extern void func_8012956C(void); \ extern void func_8016E95C(void); \ extern void func_801754A8(void); \ - extern void func_8013BC7C(void); \ + extern void func_8013BC7C(); \ extern void func_8013BCDC(void); \ extern void func_801379FC(void); \ extern void func_8001212C(void); \ @@ -98930,7 +98930,7 @@ extern void func_8012956C(void); \ extern void func_8016E95C(void); \ extern void func_801754A8(void); \ - extern void func_8013BC7C(void *arg0); \ + extern void func_8013BC7C(); \ extern void func_8013BCDC(void); \ extern void func_801379FC(void); \ extern void func_8001212C(void); \ @@ -99755,7 +99755,7 @@ extern void func_8012956C(void); \ extern void func_8016E95C(void); \ extern void func_801754A8(void); \ - extern void func_8013BC7C(void); \ + extern void func_8013BC7C(); \ extern void func_8013BCDC(void); \ extern void func_801379FC(void); \ extern void func_8001212C(void); \ @@ -102718,7 +102718,7 @@ extern void func_8012956C(void); \ extern void func_8016E95C(void); \ extern void func_801754A8(void); \ - extern void func_8013BC7C(void); \ + extern void func_8013BC7C(); \ extern void func_8013BCDC(void); \ extern void func_801379FC(void); \ extern void func_8001212C(void); \ @@ -108741,7 +108741,7 @@ extern void func_8012956C(void); \ extern void func_8016E95C(void); \ extern void func_801754A8(void); \ - extern void func_8013BC7C(void); \ + extern void func_8013BC7C(); \ extern void func_8013BCDC(void); \ extern void func_801379FC(void); \ extern void func_8001212C(void); \ @@ -116561,7 +116561,7 @@ extern void func_8012956C(void); \ extern void func_8016E95C(void); \ extern void func_801754A8(void); \ - extern void func_8013BC7C(void); \ + extern void func_8013BC7C(); \ extern void func_8013BCDC(void); \ extern void func_801379FC(void); \ extern void func_8001212C(void); \ @@ -117795,7 +117795,7 @@ extern void func_8012956C(void); \ extern void func_8016E95C(void); \ extern void func_801754A8(void); \ - extern void func_8013BC7C(void); \ + extern void func_8013BC7C(); \ extern void func_8013BCDC(void); \ extern void func_801379FC(void); \ extern void func_8001212C(void); \ @@ -128124,7 +128124,7 @@ extern void func_8012956C(void); \ extern void func_8016E95C(void); \ extern void func_801754A8(void); \ - extern void func_8013BC7C(void); \ + extern void func_8013BC7C(); \ extern void func_8013BCDC(void); \ extern void func_801379FC(void); \ extern void func_8001212C(void); \ @@ -135454,7 +135454,7 @@ extern void func_8012956C(void); \ extern void func_8016E95C(void); \ extern void func_801754A8(void); \ - extern void func_8013BC7C(void); \ + extern void func_8013BC7C(); \ extern void func_8013BCDC(void); \ extern void func_801379FC(void); \ extern void func_8001212C(void); \ @@ -136381,7 +136381,7 @@ extern void func_8012956C(void); \ extern void func_8016E95C(void); \ extern void func_801754A8(void); \ - extern void func_8013BC7C(void); \ + extern void func_8013BC7C(); \ extern void func_8013BCDC(void); \ extern void func_801379FC(void); \ extern void func_8001212C(void); \