From 8fe391868207f707d460d2bc68416e8ee13004b7 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Sun, 23 Aug 2026 13:45:26 -0600 Subject: [PATCH] =?UTF-8?q?feat(decomp):=20ox=20wave=20aj=20overlays=20?= =?UTF-8?q?=E2=80=94=2061=20banked?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Committed before the main batch: gate_main reverts on failure and would take these with it. --- src/md_MAIN_003/md_MAIN_003.c | 65 ++++- src/ov_SC01_080/ov_SC01_080_jr_8017AE2C.c | 17 +- src/ov_SC02_026/ov_SC02_026_jr_8017C180.c | 314 ++++++++++++++++++++-- src/ov_SC02_026/ov_SC02_026_jr_80185440.c | 2 +- src/ov_SC03_105/ov_SC03_105_jr_8017C8D0.c | 234 ++++++++++++++-- src/ov_SC05_001/ov_SC05_001_jr_8017BEBC.c | 21 +- src/ov_SC05_010/ov_SC05_010_jr_80181CDC.c | 249 ++++++++++++++++- src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c | 182 ++++++++++++- 8 files changed, 1019 insertions(+), 65 deletions(-) diff --git a/src/md_MAIN_003/md_MAIN_003.c b/src/md_MAIN_003/md_MAIN_003.c index ef54a482ae..37f4f5a30e 100644 --- a/src/md_MAIN_003/md_MAIN_003.c +++ b/src/md_MAIN_003/md_MAIN_003.c @@ -105,7 +105,13 @@ INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800D298C); INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800D2A24); -INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800D2AA0); +void func_800D2AA0(u8 *a0) { + if (a0 == 0) { + ResetCallback(); + } + func_800D2D68(a0); +} + INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800D2AD8); @@ -116,7 +122,22 @@ u16 func_800D2C00(s32 *a0) { } -INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800D2C0C); +extern void func_800D2E64(); + +void func_800D2C0C(s32 *a0, s32 a1) { + if (a1 & 1) { + *a0 &= 0xF7FFFFFF; + } else { + *a0 |= 0x8000000; + } + if (a1 & 2) { + *a0 |= 0x2000000; + } else { + *a0 &= 0xFDFFFFFF; + } + func_800D2E64(a0, *(u16 *)a0); +} + extern void func_800D2EF8(void); void func_800D2C88(void) { @@ -126,7 +147,17 @@ void func_800D2C88(void) { INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800D2CA8); -INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800D2CE4); +extern u32 func_800D3020(void); +extern s32 func_800D30B8(void); + +s32 func_800D2CE4(s32 *a0) { + if (a0 != 0) { + return (((u32 (*)(void))func_800D30B8)() >> 24) & 1; + } else { + return func_800D3020(); + } +} + INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800D2D20); @@ -136,7 +167,27 @@ INCLUDE_RODATA("asm/md_MAIN_003/nonmatchings/md_MAIN_003", D_800CEDF8); INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800D2D68); -INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800D2E64); +extern s32 *D_800DB674; +extern s32 *D_800DB63C; +extern s32 *D_800DB640; +extern s32 *D_800DB66C; +extern s32 *D_800DB644; +extern void func_800D2F88(s32 a0, s32 a1); + +void func_800D2E64(s32 a0, s32 a1) { + u32 s0; + s32 s1; + s1 = a0; + s0 = (u32)a1; + func_800D2F88(a0, a1); + s0 = (s0 >> 5) << 16; + *D_800DB674 |= 0x88; + *D_800DB63C = s1 + 4; + *D_800DB640 = s0 | 0x20; + *D_800DB66C = *(s32 *)s1; + *D_800DB644 = 0x1000201; +} + INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800D2EF8); @@ -144,7 +195,11 @@ INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800D2F88); INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800D3020); -INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800D30B8); +extern s32 *D_800DB670; +s32 func_800D30B8(void) { + return *D_800DB670; +} + INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800D30D0); 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 450d15594d..abefacdc85 100644 --- a/src/ov_SC01_080/ov_SC01_080_jr_8017AE2C.c +++ b/src/ov_SC01_080/ov_SC01_080_jr_8017AE2C.c @@ -4355,7 +4355,22 @@ void func_8017E578(void *a0) { } -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8017AE2C", func_8017E5B4); +void func_8017E5B4(s32 a0) { + extern u16 D_80126B5E; + extern u16 D_80126B62; + extern u16 D_80126B66; + s16 arr[3]; + s32 v0; + s32 s0 = a0; + v0 = ratan2(*(s16 *)&D_80126B5E, *(s16 *)&D_80126B66); + *(s16 *)(s0 + 0x22) = (s16)(v0 & 0xFFF); + arr[0] = D_80126B5E; + arr[1] = D_80126B62; + arr[2] = D_80126B66; + func_8017E8A0(s0, arr); + func_8017EA68(s0); +} + extern s32 D_80189464; extern s16 D_80126ADA; diff --git a/src/ov_SC02_026/ov_SC02_026_jr_8017C180.c b/src/ov_SC02_026/ov_SC02_026_jr_8017C180.c index 1ff4512123..82c13ceca4 100644 --- a/src/ov_SC02_026/ov_SC02_026_jr_8017C180.c +++ b/src/ov_SC02_026/ov_SC02_026_jr_8017C180.c @@ -3561,7 +3561,7 @@ tail: extern code_fn D_801A42AC[]; -extern s32 func_8017DD84(s32 a0); +extern s32 func_8017DD84(); void func_8017DC3C(int param_1) { @@ -3571,11 +3571,58 @@ void func_8017DC3C(int param_1) } -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017DC8C); +extern void func_8001C924(void *a0, s32 *a1); +extern void func_8017DD0C(); -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017DD0C); +void func_8017DC8C(void *a0) +{ + s32 s0 = (s32)a0; + s32 a1; + + extern u16 D_801A429C[]; + + *(u8 *)(s0 + 0xC1) = 0; + *(u16 *)(s0 + 0x5E) = 0; + *(u16 *)(s0 + 0x5C) = 0; + func_80029124((s32)D_801A429C[*(s16 *)(s0 + 0x70)], 1); + + a1 = *(s32 *)(s0 + 0xDC); + if (a1 != 0) { + a1 = *(s32 *)(a1 + 4); + if (a1 != 0) { + func_8001C924((void *)*(s32 *)(s0 + 0x20), (s32 *)a1); + } + } + + func_8017DD0C((void *)s0); +} + + +extern s32 D_801A4264; + +void func_8017DD0C(s32 a0) { + s32 saved; + s32 i; + saved = *(s32 *)(*(s32 **)(a0 + 0x20) + 8); + *(s32 *)(*(s32 **)(a0 + 0x20) + 8) = D_801A4264; + for (i = 0; i < 5; i++) { + func_8012C658(0x150, i, a0); + } + *(s32 *)(*(s32 **)(a0 + 0x20) + 8) = saved; +} + + +s32 func_8017DD84(s32 a0) +{ + s32 v0 = *(s32 *)(a0 + 0xDC); + if (v0) { + v0 = *(s32 *)(v0 + 0xC); + if (v0) { + ((void (*)(s32, s32))v0)(a0, a0 + 0x24); + } + } +} -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017DD84); #include "common.h" @@ -3921,7 +3968,19 @@ void func_8017E72C(void *a0) { INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017E8D4); -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017E980); +extern s32 D_801A4FE0; + +void func_8017E980(int param_1) +{ + *(s32 *)(param_1 + 0x1C) = 0x78; + *(u16 *)(param_1 + 0x5C) &= 0xFFFE; + func_80143CD4(param_1); + func_8002D4C8(0x47B, 0); + func_8002D4C8(0x478, 0); + func_800CB0E8(param_1); + *(s32 *)(param_1 + 0xCC) = (s32)&D_801A4FE0; +} + INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017E9E8); @@ -3988,9 +4047,43 @@ void func_8017EA88(s32 arg0_) INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017EBB8); -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017EC18); +#include "common.h" + +extern s32 func_8012BEE8(s32 a0); /* TU:4993/5216/7272, verbatim */ +extern void func_8002AC00(s32 arg0); /* TU fn-scope decl form (line 5085) */ +extern void func_80130D48(s32 a0); +extern void func_8017EC78(); + +void func_8017EC18(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0x20) + 4) ^= 0x80000000; + if (func_8012BEE8((s32)a0) != 0) { + func_8002AC00(0xF); + func_80130D48((s32)a0); + func_8017EC78((s32)a0); + } +} + + +void func_8017EC78(void *arg0) { + func_8002A04C((s32)arg0); + + if ((*(s16 *)((char *)arg0 + 0x70) & 0xC000) != 0) { + func_8012C098(arg0); + } else { + s32 a0 = *(s32 *)((char *)arg0 + 0x20); + *(s16 *)((char *)arg0 + 0x2) = 5; + *(s8 *)((char *)arg0 + 0xC1) = 0; + *(s32 *)((char *)arg0 + 0x1C) = 0x78; + *(s16 *)((char *)arg0 + 0x5E) = 0; + *(s16 *)((char *)arg0 + 0x5C) = 0; + *(s32 *)((char *)a0 + 0x4) |= 0x80000000; + *(s16 *)((char *)arg0 + 0xAA) = 0; + *(s16 *)((char *)arg0 + 0x6) = *(u16 *)((char *)arg0 + 0x88); + *(s16 *)((char *)arg0 + 0xA) = *(u16 *)((char *)arg0 + 0x8A); + *(s16 *)((char *)arg0 + 0xE) = *(u16 *)((char *)arg0 + 0x8C); + } +} -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017EC78); INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017ED0C); @@ -4022,7 +4115,34 @@ void func_8017EEB0(void *a0) { } -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017EEEC); +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8012E8A8(u8 *a0); + +void func_8017EEEC(void *a0) { + + extern u8 D_801A513C[]; + s32 ptr; + unsigned short v1; + unsigned short v0; + + if (func_8012C354((s32)a0, (s32)D_801A513C) == 0) { + return; + } + + ptr = *(s32 *)((s32)a0 + 0x64); + v1 = *(unsigned short *)(ptr + 0x36); + v0 = *(unsigned short *)((s32)a0 + 0x70); + *(unsigned short *)((s32)a0 + 0xFC) = v1; + + if (!(v0 & 1)) { + func_8012E8A8((u8 *)a0); + } + + v1 = *(unsigned short *)(*(s32 *)((s32)a0 + 0x64) + 0xFC); + *(unsigned short *)((s32)a0 + 0x2) = 1; + *(unsigned short *)((s32)a0 + 0x104) = v1; +} + INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017EF64); @@ -4034,9 +4154,44 @@ extern s32 D_801A5170; } -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017F098); +void func_8017F098(s32 a0) { + s16 sp10[3]; + s32 obj; + s32 p; + + obj = *(s32 *)(a0 + 0x64); + p = *(s32 *)(a0 + 0xCC); + func_8012F14C(*(s32 *)(obj + 0x20) + 0x34, p, (s32)sp10); + *(u16 *)(a0 + 6) = sp10[0]; + *(u16 *)(a0 + 0xA) = sp10[1]; + *(u16 *)(a0 + 0xE) = sp10[2]; + p += 8; + if (*(s16 *)(p + 6) == 0x7FFF) { + *(s16 *)(a0 + 2) = 1; + *(u16 *)(a0 + 0x70) |= 1; + } else { + *(s32 *)(a0 + 0xCC) = p; + } +} + + +extern s32 D_801A52F8; + +void func_8017F12C(s32 arg0) { + s32 a1; + s32 v1; + a1 = *(s32 *)(arg0 + 0x64); + v1 = *(s16 *)(arg0 + 0xFC); + *(s16 *)(arg0 + 0x2) = 0x5; + *(s32 *)(arg0 + 0xCC) = &D_801A52F8; + *(s32 *)(arg0 + 0x1C) = 0; + *(s16 *)(arg0 + 0x34) = 0; + *(s16 *)(arg0 + 0x100) = 0; + if (v1 == *(s16 *)(a1 + 0x36)) { + *(s32 *)(a1 + 0xE0) |= 1; + } +} -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017F12C); #include "common.h" @@ -4126,11 +4281,59 @@ void func_8017F17C(s32 a0) { INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017F390); -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017F400); +extern void func_8017F440(); -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017F440); +/* func_8017F400 -- ov_SC02_026, subseg ov_SC02_026_jr_8017C180 (16 ins). */ + +s32 func_8017F400(s32 a0) { + s32 *v0 = *(s32 **)(a0 + 0x64); + s16 v1 = *(s16 *)((s32)v0 + 0x36); + s16 v2 = *(s16 *)(a0 + 0xFC); + + if (v1 == v2) { + return 0; + } + ((s32 (*)(void))func_8017F440)(); + return 1; +} + + +void func_8017F440(s32 arg0) { + func_8002D59C(4, 0x64E, *(u16 *)(arg0 + 0x104)); + func_8012C218(arg0); +} + + +void func_8017F47C(s32 a0) { + s32 *s1 = (s32 *)a0; + s32 *s0 = *(s32 **)((u8 *)s1 + 0x64); + s32 *v1; + + func_8002D59C(4, 0x64E, *(u16 *)((u8 *)s1 + 0x104)); + + *(s32 *)((u8 *)s1 + 0x4) = *(s32 *)((u8 *)s0 + 0x4); + *(s32 *)((u8 *)s1 + 0x8) = *(s32 *)((u8 *)s0 + 0x8) + 0xFFDA0000; + *(s32 *)((u8 *)s1 + 0xC) = *(s32 *)((u8 *)s0 + 0xC); + *(u16 *)((u8 *)s1 + 0x70) = 1; + + v1 = *(s32 **)((u8 *)s1 + 0x20); + + if (*(u16 *)((u8 *)s0 + 0x70) & 1) { + *(u16 *)((u8 *)v1 + 0x14) = 0; + *(u16 *)((u8 *)v1 + 0x12) = 0; + *(u16 *)((u8 *)v1 + 0x10) = 0; + *(u16 *)((u8 *)v1 + 0x1C) = 1; + *(u16 *)((u8 *)v1 + 0x1A) = 1; + *(u16 *)((u8 *)v1 + 0x18) = 1; + } else { + *(u16 *)((u8 *)v1 + 0x2C) = *(u16 *)((u8 *)v1 + 0x2C) & 0xFFEF; + *(u16 *)((u8 *)v1 + 0x14) = 0; + *(u16 *)((u8 *)v1 + 0x12) = 0; + *(u16 *)((u8 *)v1 + 0x10) = 0; + } + *(u16 *)((u8 *)s1 + 0x2) = 1; +} -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017F47C); INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017F538); @@ -5331,7 +5534,16 @@ void func_801814D8(s32 a0) { } -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_80181644); +void func_80181644(void *a0) +{ + func_8012B23C(a0); + *(s32 *)((s32)a0 + 0x1C) = 0x40; + *(u16 *)((s32)a0 + 0x2) = 2; + *(u16 *)((s32)a0 + 0x34) = 0; + *(s32 *)((s32)a0 + 0xE4) = 0; + *(s32 *)((s32)a0 + 0xE8) = 0x40; +} + #include "common.h" @@ -5551,7 +5763,20 @@ extern s32 func_8012B030(u8 *a0); INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_80181A4C); -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_80181AC4); +void func_80181AC4(s32 a0) { + s32 v1; + + if (func_8012BEE8(a0) != 0) { + *(s16 *)(a0 + 2) = 6; + v1 = *(s32 *)(a0 + 0x20); + *(u16 *)(a0 + 0x34) = 0; + *(u16 *)(v1 + 0x1C) = 0x400; + *(u16 *)(v1 + 0x18) = 0x400; + v1 = *(s32 *)(a0 + 0x20); + *(u16 *)(v1 + 0x1A) = 0x3000; + } +} + #include "common.h" @@ -5857,7 +6082,24 @@ void func_801823E8(s32 a0) { } -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_80182550); +extern u8 D_801202A0[]; + +s32 func_80182550(void) { + s32 count = 0; + s32 i = 0; + u8 *p = D_801202A0; + + do { + if (*(u16 *)p == 0x17F && (*(u16 *)(p + 0x70) & 0xF) == 0) { + count++; + } + i++; + p += 0x10C; + } while (i < 0x60); + + return count < 0xB; +} + extern u8 *func_801290DC(s32 a0, u8 *a1); extern void func_80049CAC(s32 a0, s32 a1); @@ -5947,7 +6189,18 @@ void func_801827A8(void *a0) { INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_801827E4); -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_801828C8); +extern void func_80182DBC(s32 a0); + +void func_801828C8(s32 arg0) { + func_80182DBC(arg0); + if (*(s32 *)(arg0 + 0x30) == 0) { + *(s16 *)(arg0 + 2) = 6; + *(s32 *)(arg0 + 0x1C) = 0; + } else { + *(s32 *)(arg0 + 0x1C) += 1; + } +} + #include "common.h" #include "/home/musashi/bfm-decomp/src/shared/engine_core.h" /* match_one-only: gives SV3_8012CC88; the real TU (ov_SC02_026_jr_8017C180.c) already includes "../shared/engine_core.h" at file top */ @@ -6009,7 +6262,17 @@ extern void func_801292C8(u8 *a0); INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_80182A5C); -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_80182A9C); +extern void func_801292C8(u8 *a0); +extern void func_80182DBC(s32 a0); + +void func_80182A9C(s32 arg0) { + func_80182DBC(arg0); + if (*(u16 *)(*(s32 *)(arg0 + 0x2c)) == 0) { + func_801292C8((u8 *)arg0); + } + *(s32 *)(arg0 + 0x1c) += 1; +} + INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_80182AF4); @@ -6061,7 +6324,20 @@ s32 func_80182B90(s32 a0, s32 a1, s32 a2) { INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_80182CE4); -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_80182DBC); +extern s32 func_8004787C(s32 a0); + +void func_80182DBC(s32 a0) { + s32 t; + s32 w; + s32 sub; + + t = func_8004787C((*(s32 *)(a0 + 0x1C) << 7) & 0x780); + w = *(s32 *)(a0 + 0x34) - ((*(s32 *)(a0 + 0x34) >> 2) * t >> 12); + sub = *(s32 *)(a0 + 0x20); + *(s16 *)(sub + 0x1A) = w; + *(s16 *)(sub + 0x18) = w; +} + extern void (*D_801AC394[])(void); diff --git a/src/ov_SC02_026/ov_SC02_026_jr_80185440.c b/src/ov_SC02_026/ov_SC02_026_jr_80185440.c index e72a4924ae..1d3b78ec0e 100644 --- a/src/ov_SC02_026/ov_SC02_026_jr_80185440.c +++ b/src/ov_SC02_026/ov_SC02_026_jr_80185440.c @@ -2688,7 +2688,7 @@ extern void func_8017D6D0(s32 a0); extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); extern void func_8013B7F4(void *a0, int a1); extern code_fn D_801A42AC[]; -extern s32 func_8017DD84(s32 a0); +extern s32 func_8017DD84(); extern void func_8017DC3C(int param_1); extern void (*D_801A4308[])(void); extern void func_8017DFE0(void *a0); 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 7101fd94af..6d9a8d1a20 100644 --- a/src/ov_SC03_105/ov_SC03_105_jr_8017C8D0.c +++ b/src/ov_SC03_105/ov_SC03_105_jr_8017C8D0.c @@ -3404,7 +3404,29 @@ s32 func_8017DF00(s32 a0) { } -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_8017DF40); +extern void func_8001BFD0(void); +extern void func_800D1E28(void); + +s32 func_8017DF40(s32 a0) { + s32 t; + s32 r = func_80029504(); + + t = *(s32 *)(a0 + 0x28) - 1; + *(s32 *)(a0 + 0x28) = t; + if (t == -1) { + if (r == 0x258 && !(func_80029178(0x132) & 0xFF)) { + func_80029124(0x132, 1); + func_800D0C48(1); + } + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + extern void func_800D1EBC(void); void func_8017DFEC(void) { @@ -3436,7 +3458,36 @@ void func_8017E05C(s32 a0) { } -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_8017E08C); +void func_8017E08C(void) { + extern s32 D_80126954; + extern s32 D_80126950; + extern s32 D_8012695C; + extern s16 D_8012696A; + extern s16 D_80126968; + extern s16 D_8012696C; + extern s16 D_80126976; + extern s16 D_80126978; + extern s16 D_8012697A; + extern s32 D_801BA588; + extern u8 D_80126948[]; + extern void func_8012A018(s32 a, s32 b); + extern void func_8012A094(s32 a); + extern void func_8017E134(void *a0); + D_80126954 = 0x190; + D_80126950 = 0x190; + D_8012695C = 0x320; + D_8012696A = 0x800; + D_801BA588 = 0; + D_80126968 = 0; + D_8012696C = 0; + D_80126976 = 0; + D_80126978 = -0xB0; + D_8012697A = 0; + func_8012A018((s32)func_8017E134, 0); + func_8012A094((s32)D_80126948); + func_8017E134(D_80126948); +} + extern void (*D_8018DE58[])(void); @@ -3564,7 +3615,14 @@ void func_8017E758(void *a0) { } -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_8017E794); +void func_8017E794(void *a0) { + extern s32 func_8017EBA8(void *a0); + extern void (*D_8018E048[])(void *); + if (func_8017EBA8(a0) == 0) { + D_8018E048[*(u16 *)((s32)a0 + 0x2)](a0); + } +} + #include "common.h" @@ -3776,7 +3834,29 @@ void func_8017EE34(s32 a0) { } -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_8017EF94); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +void func_8017EF94(s32 a0) +{ + s32 v1; + u16 v0; + + if (*(u16 *)(a0 + 0x34) == 0) { + v1 = *(s32 *)(a0 + 0x20); + v0 = *(u16 *)(v1 + 0x1A); + *(u16 *)(v1 + 0x1A) = v0 + 0x300; + if (func_8012BEE8(a0) != 0) { + *(s32 *)(a0 + 0x1C) = 0x10; + *(u16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1; + } + } else { + if (func_8012BEE8(a0) != 0) { + func_8012C218((void *)a0); + } + } +} + INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_8017F018); @@ -3802,7 +3882,22 @@ void func_8017F864(void) { void func_8017F86C(void) { } -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_8017F874); +extern s32 func_8012BEE8(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_8017F874(s32 a0) { + s32 s0 = a0; + + if (*(u16 *)(s0 + 0x34) != 0) { + if (func_8012BEE8(s0) != 0) { + *(u16 *)(s0 + 2) = 5; + *(s32 *)(s0 + 0x48) = 0x2000; + *(s32 *)(s0 + 0x1C) = 0x40; + func_8002D4C8(0x770, 0); + } + } +} + #include "common.h" @@ -4028,7 +4123,12 @@ void func_80180100(void *a0) INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_801801F8); -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_801802B0); +extern void func_801824CC(s32, s32, s32, s32, s32); + +void func_801802B0(s32 a0) { + func_801824CC(a0, 0x1000, 0, -0x20, 0x800000); +} + INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_801802E0); @@ -4124,7 +4224,16 @@ INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_801834A INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_8018364C); -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_8018373C); +void func_8018373C(void *a0, s32 a1) +{ + s32 arg[3]; + + arg[2] = a1; + arg[1] = 0; + arg[0] = 0; + func_8018383C(a0, arg); +} + void func_80183768(void *a0, s32 a1, s32 a2) { @@ -4142,7 +4251,16 @@ void func_80183768(void *a0, s32 a1, s32 a2) } -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_8018383C); +extern s32 D_801BA5A0; + +void func_8018383C(s32 a0, s32 a1) +{ + s32 buf[8]; + + func_80049CAC((s32)&D_801BA5A0, (s32)&buf); + func_800484EC((s32)&buf, a1, a0 + 0x10); +} + #include "common.h" @@ -4459,7 +4577,23 @@ INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_8018445 INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_80184500); -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_80184604); +extern u8 D_8018E680[]; +extern s32 D_801BA6A8; +extern s32 D_801BA6AC; + +void func_80184604(s32 arg0) { + s32 idx; + + if (arg0 != -1) { + idx = arg0 * 24; + D_801BA6A8 = (s32)&D_8018E680[idx]; + D_801BA6AC = (s32)&D_8018E680[idx + 24]; + } else { + D_801BA6A8 = 0; + D_801BA6AC = 0; + } +} + extern void (*D_8018E8DC[])(void); @@ -4469,7 +4603,21 @@ void func_8018465C(void *a0) { } -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_80184698); + + +extern void func_80016714(void *a0, s32 a1); +extern u8 D_801BA734[]; +extern MATRIX_80188114 D_800AE620; +extern MATRIX_80188114 D_801BC9B4; +extern u16 D_801BC9C4; + +void func_80184698(s32 *a0) { + func_80016714(&D_801BA734, 0x2280); + D_801BC9B4 = D_800AE620; + D_801BC9C4 = 0x1000; + *(u16 *)((u8 *)a0 + 2) += 1; +} + INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_80184738); @@ -4735,7 +4883,7 @@ void func_80184B50(u8 *param_1) #include "common.h" extern s32 rand(void); -extern s32 func_80185628(s32 a0, s32 a1); +extern s32 func_80185628(); extern void func_80185810(s32 a0); extern s32 func_80185680(void *a0, void *a1); extern s32 func_8017E5C8(s32 a0); @@ -4989,7 +5137,16 @@ INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_8018538 INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_80185480); -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_80185628); +extern s32 ratan2(s32 a0, s32 a1); + +s32 func_80185628(s16 *a0, s16 *a1) { + s16 ax = a0[1]; + s16 bx = a1[1]; + s16 by = a1[0]; + s16 ay = a0[0]; + return (ratan2(bx - ax, by - ay) + 0x400) & 0xFFF; +} + void func_80185660(s32 *a0, s32 *a1, s32 a2) { *(s32 *)((s32)a1 + 0x0) = a2; @@ -5141,7 +5298,17 @@ extern s32 func_8012C588(s32 a0, s32 a1); } -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_801870B4); +extern u16 D_8018EE0C[]; +extern s16 D_8018EDFE; +extern s16 D_8018EDFC; +extern s32 D_801BCBBC; + +void func_801870B4(void) { + u16 v = D_8018EE0C[D_801BCBBC]; + D_8018EDFE = v; + D_8018EDFC = v; +} + INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_801870E8); @@ -5199,7 +5366,23 @@ INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_801873C INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_80187434); -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_801874D0); +extern void (*D_8018F140)(void *); + +void func_801874D0(void *a0) +{ + s32 buf[8]; + u16 out[4]; + s32 v1; + + func_8012EC04((s32)a0, 6, buf); + func_8012F14C((s32)buf, (s32)&D_8018F140, (s32)out); + + v1 = *(s32 *)((s32)a0 + 0xCC); + *(u16 *)(v1 + 0x6) = out[0]; + *(u16 *)(v1 + 0xA) = out[1] + 0x10; + *(u16 *)(v1 + 0xE) = out[2]; +} + extern s32 func_80187540(void *a0); @@ -5270,7 +5453,28 @@ void func_80187788(void *a0) { } -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_801877C4); +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(int, int); +extern void func_8001D0E8(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012A828(s32 a0, void *a1); +extern s32 D_801B44A0; +extern s32 D_8018EA94; + +void func_801877C4(s32 a0) { + s32 v0; + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(a0 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4((void *)a0); + return; + } + func_8001C214(v0, (s32)&D_801B44A0); + func_8001D0E8(*(s32 *)(a0 + 0x20), 0x7FFF, 0x7FFF); + func_8012A828(a0, &D_8018EA94); + *(u16 *)(a0 + 0x2) += 1; +} + void func_80187844(void) { } diff --git a/src/ov_SC05_001/ov_SC05_001_jr_8017BEBC.c b/src/ov_SC05_001/ov_SC05_001_jr_8017BEBC.c index 6266979495..201a8cee4a 100644 --- a/src/ov_SC05_001/ov_SC05_001_jr_8017BEBC.c +++ b/src/ov_SC05_001/ov_SC05_001_jr_8017BEBC.c @@ -6012,7 +6012,16 @@ void func_80182364(s32 param_1) { } -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_8018244C); +extern void func_8012A828(s32*, s32); +void func_8018244C(s32 a0) { + extern u8 D_801AC580; + extern u8 D_801AE1E4; + *(s32 *)(a0 + 0x1C) = 0x37; + func_8001C924(*(s32 *)(a0 + 0x20), &D_801AC580); + ((void (*)(s32, void *))func_8012A828)(a0, &D_801AE1E4); + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = *(u16 *)(a0 + 0x62); +} + INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_801824A8); @@ -6400,7 +6409,15 @@ void func_80182E0C(s32 a0) { } -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_80182F68); +void func_80182F68(s32 param_1) +{ + func_8012B23C(param_1); + func_8012B178(param_1, 0xFFFD8000); + *(u16 *)(param_1 + 2) = 2; + *(u16 *)(param_1 + 0x34) = 0; + *(s32 *)(param_1 + 0xE4) = 0x20; +} + extern s32 func_8004787C(s32 a0); diff --git a/src/ov_SC05_010/ov_SC05_010_jr_80181CDC.c b/src/ov_SC05_010/ov_SC05_010_jr_80181CDC.c index 1a5a4182fe..518669095e 100644 --- a/src/ov_SC05_010/ov_SC05_010_jr_80181CDC.c +++ b/src/ov_SC05_010/ov_SC05_010_jr_80181CDC.c @@ -3137,7 +3137,26 @@ void func_80182E78(s32 a0) { } -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80182FD4); +void func_80182FD4(void *a0) { + extern void (*D_80192AEC[])(void); + extern u16 D_80126B96; + extern s16 D_80126B98; + extern s32 func_8012D624(void *a0, s32 a1, s32 a2); + extern void func_8012C218(void *a0); + + D_80192AEC[*(u16 *)((s32)a0 + 0x2)](); + if (*(u16 *)((s32)a0 + 0x0) != 0 && *(s16 *)((s32)a0 + 0x70) < 2) { + *(s16 *)((s32)a0 + 0xa) = *(u16 *)((s32)a0 + 0xa) - 0x40; + if (func_8012D624(a0, 0x30, 0x18) == 1) { + D_80126B96 = 0x4014; + D_80126B98 = 0x18; + func_8012C218(a0); + } else { + *(s16 *)((s32)a0 + 0xa) = *(u16 *)((s32)a0 + 0xa) + 0x40; + } + } +} + INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80183098); @@ -3709,11 +3728,45 @@ INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80185C8 void func_80185CF8(void) { } -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80185D00); +void func_80185D00(s32 a0) { + extern s32 func_8012C354(s32 a0, s32 a1); + extern void func_8012A828(s32 a0, void *a1); + extern M2C_UNK D_80192778; + extern void (*D_80188CCC)(void); + extern u16 D_801927AC[]; + s32 s0 = a0; + if (func_8012C354(a0, (s32)&D_80192778)) { + *(u16 *)(s0 + 2) = 1; + ((void (*)(s32 *, void *))func_8012A828)((s32 *)s0, (s32)&D_80188CCC); + *(u8 *)(s0 + 0xC0) = 1; + *(u16 *)(s0 + 0xFE) = 0xF; + *(u16 *)((s32)*(void **)(s0 + 0x20) + 0x2C) |= 0x10; + *(u16 *)(s0 + 0xA) += D_801927AC[*(u16 *)(s0 + 0x70) & 0xF]; + } +} + INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80185D98); -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80185EA0); +extern void func_8012B200(u8 *a0); +extern void func_8012C218(void *a0); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern s32 rand(void); + +void func_80185EA0(s32 a0) { + s32 r; + + if ((rand() & 7) == 0) { + r = func_8012C658(0x27B, 0, a0); + if (r != 0) { + func_8012B200((u8 *)r); + *(s16 *)(r + 0xE) = 0; + } + } + + ((void (*)(s32))func_8012C218)(a0); +} + extern void func_8017ECE4(void); void func_80185F08(s32 arg0) { @@ -3735,13 +3788,50 @@ INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_8018612 INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_801861D0); -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_8018624C); +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern u16 D_80126B96; +extern s16 D_80126B98; +extern s32 D_80127078; +extern u8 D_80192980[]; +extern u8 D_80192988; + +void func_8018624C(s32 arg0) { + s16 temp; + + if (*(s16 *)(*(s32 *)(arg0 + 0x64) + 0x10A) == 3) { + temp = *(s16 *)(arg0 + 0x10A); + if (temp == 1 && func_8012DEB8(arg0, D_80192980, &D_80192988) == temp) { + D_80126B96 = 0x400F; + D_80126B98 = 0; + D_80127078 = arg0; + } + } +} + INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_801862D8); INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80186384); -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_801863E0); +void func_801863E0(s32 a0) { + extern s32 func_8012C354(s32 a0, s32 a1); + extern void func_8012A828(s32 a0, void *a1); + extern void func_8001D0E8(s32 a0, s32 a1, s32 a2); + extern u8 D_801929F4; + extern u8 D_801AB180[]; + s32 s0 = a0; + + if (func_8012C354(a0, (s32)&D_801929F4)) { + *(u16 *)(s0 + 2) = 1; + func_8012A828((s32)s0, D_801AB180); + *(u8 *)(s0 + 0x75) = 3; + *(u8 *)(s0 + 0xC0) = 1; + *(s32 *)(s0 + 0xB4) = -1; + *(s16 *)(s0 + 0xAE) = -1; + func_8001D0E8(*(s32 *)(s0 + 0x20), 0x400, 0x400); + } +} + INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_8018645C); @@ -3770,7 +3860,27 @@ INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80186AA INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80186AF4); -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80186BD8); +extern s32 D_801C7E30; +extern s32 D_801C7E34[]; + +void func_80186BD8(void *a0) +{ + s32 v0; + s32 v1; + + v0 = *(s32 *)(a0 + 0x1C); + if (v0 != 0) { + *(s32 *)(a0 + 0x1C) = v0 - 1; + *(s16 *)(a0 + 0x6) = *(s16 *)(a0 + 0x6) - 6; + *(s16 *)(a0 + 0xA) = *(s16 *)(a0 + 0xA) + 8; + } else { + v1 = D_801C7E30; + D_801C7E34[0] = 0; + *(u16 *)(v1 + 0x34) = *(u16 *)(v1 + 0x34) + 1; + func_8012C218(a0); + } +} + INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80186C44); @@ -3811,7 +3921,24 @@ void func_80186D40(s32 param_1) } -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80186E1C); +extern u8 D_801C7E80; + +void func_80186E1C(void *param_1) +{ + s16 v0; + s16 v1; + + v0 = *(s16 *)((s32)param_1 + 0x2C); + v1 = v0; + if (v0 < 0x700) { + *(s16 *)((s32)param_1 + 0x2C) = v1 + 0x30; + func_80184100((u8 *)&D_801C7E80, -4); + func_800233CC((void *)((s32)&D_801C7E80 - 4), *(u16 *)((s32)param_1 + 0x2C)); + } else { + func_801292C8((u8 *)param_1); + } +} + INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80186E94); @@ -3857,7 +3984,17 @@ void func_80186F7C(s32 param_1) INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80187074); -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80187144); +void func_80187144(u8 *a0) +{ + s32 v = a0[0xFC] - 3; + a0[0xFC] = (u8)v; + if ((u32)(v & 0xFF) >= 9) { + func_80016450(v & 0xFF, 0); + } else { + func_8012C218((void *)a0); + } +} + #include "common.h" @@ -3922,7 +4059,29 @@ INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_8018764 INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_801876EC); -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_801877A8); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern s32 rand(void); +extern u8 D_801942C0[]; + +void func_801877A8(s32 arg0) +{ + u8 *work; + s32 q; + s32 r; + + func_8001CB6C(*(u8 **)(arg0 + 0x20), D_801942C0, 0x234, 0x1C0); + *(u8 *)(*(u32 *)(arg0 + 0x20) + 0x27) = 0x26; + *(u16 *)(arg0 + 0x30) = rand() & 0x1FF; + *(u16 *)(arg0 + 0x32) = rand() & 0x1F; + *(u16 *)(arg0 + 0x34) = rand() & 0x7F; + q = rand(); + work = *(u8 **)(arg0 + 0x20); + r = q % 0x1000 + 0x800; + *(u16 *)(work + 0x1A) = r; + *(u16 *)(work + 0x18) = r; + *(u16 *)(arg0 + 2) = *(u16 *)(arg0 + 2) + 1; +} + extern void func_8013373C(s32 arg0); void func_80187854(void) { @@ -4105,7 +4264,28 @@ void func_80187C2C(s32 a0) { INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80187C74); -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80187D00); +extern void func_80149020(s32 *a0); +extern void func_80147A84(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_801470B4(s32 a0); +extern void func_80146CA0(void *a0); +void func_80187D00(s32 *a0) { + u8 v1; + func_80149020(a0); + func_80147A84((s32)a0); + func_801473EC(a0); + func_80148038((s32)a0, 0x4000); + func_80147460((s32)a0); + v1 = *((u8 *)a0 + 0xDE); + *((u8 *)a0 + 0xDE) = v1 + 0xFF; + if (v1 == 0) { + func_801470B4((s32)a0); + func_80146CA0(a0); + } +} + INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80187D70); @@ -4134,7 +4314,21 @@ INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80187F4 INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80187FCC); -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_801880FC); +extern s32 func_80146E98(s32 a0); +extern s32 func_80188168(); +extern void func_80159B3C(void *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80165718(s32 a0); + +void func_801880FC(s32 arg0) { + if (func_80146E98(arg0) != 0) { + func_80188168(arg0); + func_80159B3C((void *)arg0); + func_80146A6C(2, arg0, 0, 0, 0, 1, 0); + func_80165718(arg0); + } +} + INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80188168); @@ -4190,7 +4384,29 @@ void func_801884E4(s32 a0) { INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_8018852C); -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80188680); +#include "common.h" + +extern void func_801886F4(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80159B3C(void *a0); +extern M2C_UNK D_800D5880; +extern void func_801542DC(s32 *a0, s32 a1); +extern u8 D_800D46E4[]; +extern void func_80165718(s32 a0); + +void func_80188680(s32 *arg0) +{ + func_80149020(arg0); + if (*(u16 *)((s32)arg0 + 0xB8) == 0x8000) { + func_801886F4(arg0); + func_80159B3C(arg0); + if (*(s32 *)((s32)arg0 + 0xB4) == (s32)&D_800D5880) { + ((void (*)(s32 *, s32, s32))func_801542DC)(arg0, (s32)D_800D46E4, 0xE); + } + func_80165718(arg0); + } +} + INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_801886F4); @@ -4206,7 +4422,14 @@ INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_8018877 INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80188848); -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_8018890C); +void func_8018890C(s32 a0) { + func_80149374(*(s32 *)((char *)a0 + 0x34), (s32)((char *)a0 + 0x4)); + if (*(s32 *)((char *)a0 + 0x2C) != 0) { + return; + } + func_800D1FC8(a0, 5); +} + diff --git a/src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c b/src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c index 8df409bf59..013c39d79b 100644 --- a/src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c +++ b/src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c @@ -3531,7 +3531,35 @@ void func_8017F004(void) } -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_8017F048); +extern void func_801817E0(s32 a0); +extern void func_8012A018(s32 a, s32 b); +extern void func_8012A094(s32 a0); +extern void func_8017FB48(void *a0); +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[]; + +void func_8017F048(void) { + func_801817E0(0); + D_80126954 = 0x190; + D_8012695C = 0x320; + D_80126968 = 0x38; + D_8012696A = 0; + D_8012696C = 0; + D_80126976 = 0; + D_80126978 = -0x80; + D_8012697A = 0; + func_8012A018((s32)func_8017FB48, 0); + func_8012A094((s32)D_80126948); + func_8017FB48(D_80126948); +} + INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_8017F0E8); @@ -3864,9 +3892,40 @@ void func_80181E9C(void *a0) { } -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80181ED8); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 D_81196E5C; + +void func_80181ED8(s32 a0) { + s32 s0; + s32 s1; + + *(s32 *)(*(s32 *)(a0 + 0x20) + 0x20) = (s32)&D_81196E5C; + *(s32 *)(*(s32 *)(a0 + 0x20) + 0x24) = 0; + for (s1 = 0; s1 < 5; s1++) { + s0 = func_8012C658(0x4B, s1 + 0x100, a0); + if (s0 != 0) { + *(s16 *)(s0 + 6) = 0; + *(s16 *)(s0 + 0xA) = 0; + *(s16 *)(s0 + 0xE) = 0; + func_80132784(s0, a0, (u16)s1); + *(s16 *)(s0 + 6) = *(s32 *)(*(s32 *)(s0 + 0x20) + 0x48); + *(s16 *)(s0 + 0xA) = *(s32 *)(*(s32 *)(s0 + 0x20) + 0x4C); + *(s16 *)(s0 + 0xE) = *(s32 *)(*(s32 *)(s0 + 0x20) + 0x50); + *(s32 *)(s0 + 0x64) = 0; + } + } +} + + +void func_80181F98(s32 *a0, s32 *a1) { + *(u16 *)((s32)a0 + 0x6) = *(u16 *)((s32)a1 + 0x0); + *(u16 *)((s32)a0 + 0xA) = *(u16 *)((s32)a1 + 0x2); + *(u16 *)((s32)a0 + 0xE) = *(u16 *)((s32)a1 + 0x4); + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x10) = *(u16 *)((s32)a1 + 0x6); + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = *(u16 *)((s32)a1 + 0x8); + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x14) = *(u16 *)((s32)a1 + 0xA); +} -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80181F98); INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80181FE8); @@ -3951,7 +4010,30 @@ INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80182C1 INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80182C68); -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80182D50); +extern void func_8018247C(void); +extern void func_80182270(void *a0); +extern void func_8018241C(void *a0); +extern void func_80182538(void *a0); +extern void func_80181FE8(void *a0); +extern u16 D_800B99DA; +extern u16 D_8019FF8A; + +void func_80182D50(void *a0) { + u8 *p = *(u8 **)((s32)a0 + 0x20); + *(u16 *)(p + 0x12) = *(u16 *)(p + 0x12) - 0x20; + func_8018247C(); + if (*(s16 *)((s32)a0 + 0x70) == 0) { + func_80182270(a0); + } + func_8018241C(a0); + if ((D_800B99DA & 3) == 0) { + func_80182538(a0); + } + if (D_8019FF8A & 0x4000) { + func_80181FE8(a0); + } +} + INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80182DF0); @@ -3961,7 +4043,29 @@ INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80182F2 INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80182F94); -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80182FE4); +void func_80182FE4(s32 param_1) { + extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); + extern s32 rand(void); + extern void (*D_8018A494[])(void); + s32 q; + s32 t; + + func_8001CC3C(*(s32 *)(param_1 + 0x20), (s32)D_8018A494, 0x240, 0xE0); + + *(u32 *)(*(s32 *)(param_1 + 0x20) + 4) = *(u32 *)(*(s32 *)(param_1 + 0x20) + 4) | 0x58000000; + + t = (rand() & 0x3F0) + 0x600; + q = *(s32 *)(param_1 + 0x20); + *(u16 *)(q + 0x1a) = t; + *(u16 *)(q + 0x18) = t; + + *(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x79; + + *(s32 *)(param_1 + 0x14) = 0x80000; + *(s32 *)(param_1 + 0x1C) = 0xC; + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80183078); @@ -5583,7 +5687,7 @@ void func_80185B94(void *a0) { } -extern s32 func_80185C00(s32 arg); +extern s32 func_80185C00(); extern void func_80146CA0(void *a0); void func_80185BD0(s32 arg0) { @@ -5592,7 +5696,26 @@ void func_80185BD0(s32 arg0) { } -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80185C00); +s32 func_80185C00(s32 a0) +{ + extern s32 D_80062C14; + extern s32 D_80198784; + extern s32 D_80198808; + s32 *s0 = (s32 *)a0; + s32 buf[4]; + + func_80019064(&D_80062C14); + func_801511E0((int)s0); + func_80154274(s0, (s32)&D_80198784); + func_80146E90(s0, 0x20); + func_8001382C(*(s16 *)((s32)s0 + 0x42), (void *)&D_80198808, (void *)buf); + func_80146DB8(s0, buf); + func_801477E8(s0, 0xFFF00000); + func_80149020(s0); + func_80147324(0x451); + func_80146CA0(s0); +} + INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80185C9C); @@ -5643,7 +5766,20 @@ join: } -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80185E48); +extern void func_8014BC44(s32 a0, s32 a1); +extern void func_80151664(void); + +void func_80185E48(s32 a0) +{ + s32 s0 = a0; + s32 v0; + func_8014BC44(s0, *(s16 *)(s0 + 0xF2)); + v0 = *(s32 *)(s0 + 0x20); + *(s16 *)(v0 + 0x10) = 0; + *(u8 *)(s0 + 0xA8) = 0x20; + ((void (*)(s32))func_80151664)(s0); +} + INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80185E90); @@ -5667,7 +5803,35 @@ INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80185FB INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80186090); -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_801861EC); +extern void func_80149020(s32 *a0); +extern void func_80147F50(s32 a0); +extern void func_801473EC(s32 *a0); +extern u16 D_800B99DA; +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_801535F4(void *arg0); +extern s32 func_80146E98(s32 a0); +extern void func_8018637C(); +extern void func_80159B3C(void *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80165718(s32 a0); + +void func_801861EC(s32 param_1) { + func_80149020((s32 *)param_1); + func_80147F50(param_1); + func_801473EC((s32 *)param_1); + if (!(D_800B99DA & 1)) { + func_8014C010(param_1, 2); + } + func_801535F4((void *)param_1); + if (func_80146E98(param_1) == 0) { + return; + } + func_8018637C(param_1); + func_80159B3C((void *)param_1); + func_80146A6C(2, (void *)param_1, 0, 0, 0, 1, 0); + func_80165718(param_1); +} + INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80186298);