From 8fcd05965e41c9619dac7ab02117b82fef266fc3 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Sun, 30 Aug 2026 14:48:21 -0600 Subject: [PATCH] =?UTF-8?q?feat(decomp):=20O1=20wave=20gate=20=E2=80=94=20?= =?UTF-8?q?16=20fns,=20clean-R22=20verified=20213/213?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit parallel_gate merged 17 drafts across 16 binaries then aborted on "check-all: 212 passed, 1 failed". The red was REAL: ov_SC06_022 still failed from a fully clean rebuild. Reverted that one file (func_80181664, back to the drafting queue); the remaining 16 verify green with make clean && make extract-all && make check-all. CORRECTION to what I claimed while diagnosing the earlier x1 abort: parallel_gate's R22 IS a proper clean rebuild — it calls sh(["make","clean"]) at tools/parallel_gate.py:257 before extract-all and check-all. I had grepped for the string "make clean", which cannot match the arg-list form, and wrongly concluded the tool was reading incrementally. The x1 red was real too; my revert of its two bad drafts is what made the fleet green. The genuinely stale read was MY OWN bare `make check-all` run after that revert, which still reported the old 211/213 from leftover objects and nearly led me to discard 21 good banks. R40 (exonerate the instrument) applies to the instrument's SOURCE, not just its output: read the code before blaming it. --- src/md_MAIN_016/md_MAIN_016.c | 36 ++++++++++- src/md_MAIN_026/md_MAIN_026.c | 13 +++- src/md_MAIN_040/md_MAIN_040.c | 13 +++- src/md_SC07_003/md_SC07_003.c | 75 ++++++++++++++++++++++- src/ov_SC01_084/ov_SC01_084_jr_8017F690.c | 28 ++++++++- src/ov_SC02_011/ov_SC02_011_jr_8017AE2C.c | 35 ++++++++++- src/ov_SC02_035/ov_SC02_035_jr_8017BEBC.c | 32 +++++++++- src/ov_SC03_024/ov_SC03_024_jr_8017DF84.c | 38 +++++++++++- src/ov_SC03_029/ov_SC03_029_jr_8017FF7C.c | 33 +++++++++- src/ov_SC03_030/ov_SC03_030_jr_8017AE2C.c | 26 +++++++- src/ov_SC03_098/ov_SC03_098_jr_8017D898.c | 28 ++++++++- src/ov_SC03_119/ov_SC03_119_jr_8017AE2C.c | 18 +++++- src/ov_SC04_002/ov_SC04_002_jr_8017BEBC.c | 44 ++++++++++++- src/ov_SC06_024/ov_SC06_024_jr_80181D34.c | 32 +++++++++- src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c | 26 +++++++- 15 files changed, 459 insertions(+), 18 deletions(-) diff --git a/src/md_MAIN_016/md_MAIN_016.c b/src/md_MAIN_016/md_MAIN_016.c index 10e289b89..9377f15fb 100644 --- a/src/md_MAIN_016/md_MAIN_016.c +++ b/src/md_MAIN_016/md_MAIN_016.c @@ -107,7 +107,41 @@ void func_800CB158(s32 arg0) { } -INCLUDE_ASM("asm/md_MAIN_016/nonmatchings/md_MAIN_016", func_800CB228); +typedef struct { + s32 a, b, c, d; +} Blk16; + +void func_800CB228(s32 arg0) { + register s32 ent __asm__("$7"); + register s32 oth __asm__("$5"); + s32 cnt; + s32 p; + u16 t0; + u16 t1; + + ent = arg0; + cnt = *(s32 *)(ent + 0x1C); + oth = *(s32 *)(ent + 0x34); + *(s32 *)(ent + 0x1C) = cnt + 1; + if (cnt < 10) { + *(u16 *)(ent + 0x28) = *(u16 *)(ent + 0x28) + 0x120; + } else { + t0 = *(u16 *)(ent + 2); + *(s16 *)(ent + 0x12) = (*(u16 *)(oth + 0x12) << 16) >> 17; + t1 = *(u16 *)(oth + 0x1A); + t0 += 1; + *(s32 *)(ent + 0x30) = 0x20; + *(s32 *)(ent + 0x1C) = -0xC0; + *(u16 *)(ent + 0x2A) = 0x500; + *(u16 *)(ent + 2) = t0; + *(s16 *)(ent + 0x1A) = (t1 << 16) >> 17; + } + p = *(s32 *)(oth + 0x20); + *(Blk16 *)(ent + 0x38) = *(Blk16 *)(p + 0x34); + *(Blk16 *)(ent + 0x48) = *(Blk16 *)(p + 0x44); + func_800CAF84(ent); +} + void func_800CB304(s32 arg0) { extern void func_800CAF84(); diff --git a/src/md_MAIN_026/md_MAIN_026.c b/src/md_MAIN_026/md_MAIN_026.c index 3eb360b1e..b51ebd548 100644 --- a/src/md_MAIN_026/md_MAIN_026.c +++ b/src/md_MAIN_026/md_MAIN_026.c @@ -29,7 +29,18 @@ void func_800CAE88(void *a0) { } -INCLUDE_ASM("asm/md_MAIN_026/nonmatchings/md_MAIN_026", func_800CAEC0); +void func_800CAEC0(void *arg0) { + extern s32 func_80165910(void); + extern void func_801655E4(s32 arg0); + extern void func_80147324(s32 arg0); + + if (func_80165910() == 0) { + func_801655E4((s32)arg0); + func_80147324(0x7B8); + } + *(u8 *)((s32)arg0 + 0x197) += 1; +} + extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); diff --git a/src/md_MAIN_040/md_MAIN_040.c b/src/md_MAIN_040/md_MAIN_040.c index dac69cf1b..40d72c524 100644 --- a/src/md_MAIN_040/md_MAIN_040.c +++ b/src/md_MAIN_040/md_MAIN_040.c @@ -1,6 +1,17 @@ #include "common.h" -INCLUDE_ASM("asm/md_MAIN_040/nonmatchings/md_MAIN_040", func_800CAE0C); +#include "common.h" + +extern void func_800183E0(s32 a0); + +void func_800CAE0C(void) { + extern s32 D_800CB9F4; + extern s32 D_800CB9B4; + + func_800183E0((s32)&D_800CB9F4); + func_800183E0((s32)&D_800CB9B4); +} + diff --git a/src/md_SC07_003/md_SC07_003.c b/src/md_SC07_003/md_SC07_003.c index 64fe83730..079b402c8 100644 --- a/src/md_SC07_003/md_SC07_003.c +++ b/src/md_SC07_003/md_SC07_003.c @@ -2478,7 +2478,49 @@ s32 func_801A419C(s32 arg0) { INCLUDE_ASM("asm/md_SC07_003/nonmatchings/md_SC07_003", func_801A4268); -INCLUDE_ASM("asm/md_SC07_003/nonmatchings/md_SC07_003", func_801A43E8); +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_801A43E8(void *a0) { + switch (*(u16 *)((s32)a0 + 0x5E)) { + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 35: + func_8002D4C8(0xC33, 0); + *(s32 *)(*(s32 *)((s32)a0 + 0x64) + 0xE8) += 0x2000; + break; + case 11: + case 12: + case 18: + case 19: + case 20: + case 21: + case 22: + case 23: + case 24: + case 25: + case 26: + func_8002D4C8(0xC33, 0); + *(s32 *)(*(s32 *)((s32)a0 + 0x64) + 0xE8) += 0x4000; + break; + case 36: + func_8002D4C8(0xC33, 0); + *(s32 *)(*(s32 *)((s32)a0 + 0x64) + 0xE8) += 0x4000; + break; + default: + *(s32 *)(*(s32 *)((s32)a0 + 0x64) + 0xE8) += 0x2000; + break; + } + if (*(s32 *)(*(s32 *)((s32)a0 + 0x64) + 0xE8) > 0x10000) { + *(s32 *)(*(s32 *)((s32)a0 + 0x64) + 0xE8) = 0x10000; + } +} + @@ -3504,7 +3546,36 @@ void func_801A5A9C(s32 a0) { } -INCLUDE_ASM("asm/md_SC07_003/nonmatchings/md_SC07_003", func_801A5AE0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *a0, u16 a1); + +extern u8 D_801F4444[]; +extern u8 D_801F4448[]; + +typedef struct { u8 d[4]; } Blk4; + +const Blk4 D_801A01CC = {{0x00, 0x00, 0x00, 0x00}}; +const Blk4 D_801A01D0 = {{0xFF, 0x80, 0x00, 0x00}}; + +void func_801A5AE0(void *a0) { + void *s1 = D_801F4444; + + func_8001CD50(*(s32 *)((s32)a0 + 0x20), (s32)s1); + + *(u16 *)((s32)a0 + 0xA) -= 0x100; + *(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x4) |= 0x50000000; + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x10) = 0x400; + + *(u16 *)((s32)a0 + 0x2C) = 0x10; + func_800233CC(s1, 0x10); + + *(Blk4 *)s1 = D_801A01CC; + *(Blk4 *)D_801F4448 = D_801A01D0; + + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x1E) = 0xC00; + *(u16 *)((s32)a0 + 0x2) += 1; +} + #include "common.h" diff --git a/src/ov_SC01_084/ov_SC01_084_jr_8017F690.c b/src/ov_SC01_084/ov_SC01_084_jr_8017F690.c index 953e9d72e..4261d70f2 100644 --- a/src/ov_SC01_084/ov_SC01_084_jr_8017F690.c +++ b/src/ov_SC01_084/ov_SC01_084_jr_8017F690.c @@ -5385,7 +5385,33 @@ void func_801847F8(void *a0) { } -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8017F690", func_80184834); +void func_80184834(s32 param_1) { + extern s32 func_80014C54(s32, s32, s32); + extern void func_8012A828(s32 a0, void *a1); + extern s32 D_8018A978[]; + s16 v; + u16 t; + s32 iVar3; + s32 base; + + v = func_80014C54(1, 0, 0x40); + if (v != 0) { + *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x12) += 0x200; + } + v = func_80014C54(1, 0, 0x20); + if (v != 0) { + t = *(u16 *)(param_1 + 0xFC) + 1; + *(u16 *)(param_1 + 0xFC) = t; + base = D_8018A978[*(s16 *)(param_1 + 0x70)]; + iVar3 = *(s32 *)(((t << 16) >> 14) + base); + if (iVar3 == 0) { + *(u16 *)(param_1 + 0xFC) = 0; + iVar3 = *(s32 *)D_8018A978[*(s16 *)(param_1 + 0x70)]; + } + func_8012A828(param_1, (void *)iVar3); + } +} + extern void func_8012C1B8(void); extern void func_8012CAE4(void *a0); diff --git a/src/ov_SC02_011/ov_SC02_011_jr_8017AE2C.c b/src/ov_SC02_011/ov_SC02_011_jr_8017AE2C.c index 780bf7aa9..3909ec607 100644 --- a/src/ov_SC02_011/ov_SC02_011_jr_8017AE2C.c +++ b/src/ov_SC02_011/ov_SC02_011_jr_8017AE2C.c @@ -9951,7 +9951,7 @@ extern void func_8013CABC(void); extern void func_80186728(void *a0); extern s32 func_8012BEE8(s32 a0); extern void func_80186070(s32 a0); -extern s32 func_80185FA0(s32 a0); +extern s32 func_80185FA0(); extern int func_80178970(void); extern s32 func_80188114(void); extern s32 D_801EB520; @@ -10001,7 +10001,38 @@ void func_80185E20(s32 a0) { } -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8017AE2C", func_80185FA0); +extern u16 D_800B99D8; +extern s32 func_80132EF4(s32 a0, s32 a1); + +s32 func_80185FA0(s32 param_1) +{ + s32 q; + s32 iVar5; + s32 iVar4; + s16 sVar1; + + iVar5 = 0; + do { + q = func_80132EF4(param_1, 0x22); + if (q != 0) { + iVar4 = iVar5 + (D_800B99D8 & 4) * 3 - 0x2A; + *(s16 *)(q + 6) = *(u16 *)(q + 6) + iVar4; + *(s16 *)(q + 0xA) = *(u16 *)(q + 0xA) - 0x20; + *(s16 *)(q + 0xE) = *(u16 *)(q + 0xE) - 0x28; + iVar4 = iVar4 << 16; + if ((iVar4 >> 16) >= 0) { + sVar1 = (s16)((iVar4 >> 16) << 7); + } else { + sVar1 = (s16)(-((iVar4 >> 16) << 7)); + } + *(s16 *)(q + 0x34) = sVar1 + 0x1000; + *(s32 *)(q + 0x14) = 0xFFFE0000; + *(s32 *)(q + 0x18) = 0xFFFD0000; + } + iVar5 += 0x18; + } while (iVar5 < 0x49); +} + extern void func_8001CA1C(s32 a0, s32 a1); diff --git a/src/ov_SC02_035/ov_SC02_035_jr_8017BEBC.c b/src/ov_SC02_035/ov_SC02_035_jr_8017BEBC.c index 3ce5cafa5..0770fe8a5 100644 --- a/src/ov_SC02_035/ov_SC02_035_jr_8017BEBC.c +++ b/src/ov_SC02_035/ov_SC02_035_jr_8017BEBC.c @@ -5605,7 +5605,37 @@ s32 func_801809E4(s32 a0, s32 a1, s32 a2) { } -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8017BEBC", func_80180B38); +typedef struct { s32 w[8]; } Blk20_80180B38; + +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern void RotMatrixY(s32 a0, void *a1); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern Blk20_80180B38 D_800AE620; + +s32 func_80180B38(s32 a0, s32 a1) +{ + s32 partner; + s32 pad[4]; + Blk20_80180B38 mat; + s32 ang; + s32 trailing[4]; + + partner = *(s32 *)(a0 + 0x2C); + if (*(u16 *)partner == 0) { + return 0; + } + + mat = D_800AE620; + ang = func_8012B6D4((s16 *)(a0 + 4), (s16 *)(partner + 4)); + RotMatrixY(ang, &mat); + + trailing[1] = 0; + trailing[0] = 0; + trailing[2] = a1; + func_800484EC((s32) &mat, (s32) trailing, a0 + 0x10); + return 1; +} + void func_80180C10(s32 param) { diff --git a/src/ov_SC03_024/ov_SC03_024_jr_8017DF84.c b/src/ov_SC03_024/ov_SC03_024_jr_8017DF84.c index 3110a970b..2d51cfb92 100644 --- a/src/ov_SC03_024/ov_SC03_024_jr_8017DF84.c +++ b/src/ov_SC03_024/ov_SC03_024_jr_8017DF84.c @@ -4329,7 +4329,43 @@ void func_8018046C(s32 a0) { } -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8017DF84", func_80180580); +extern void func_80183094(void); +extern void func_8014706C(void *arg0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8013C9C4(void *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern u8 *func_801290DC(s32 arg0, u8 *arg1); +extern void func_80147324(s32 arg0); +extern s32 func_80171990(u8 *a0); +extern s32 D_800D5904; +extern u8 D_8018B030[]; + +void func_80180580(s32 *a0) +{ + s16 buf[4]; + s32 i; + + if (*(s16 *)((s32)a0 + 0xA) > -0x83) { + i = 0; + func_80183094(); + *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0; + *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x10) = 0xC00; + func_8014706C(a0); + func_80154274(a0, (s32)&D_800D5904); + func_80154A74((s32)a0, 0x20); + func_8013C9C4(D_8018B030); + *(s32 *)((s32)a0 + 0x200) = 0x10; + func_80015978((s32)a0 + 4, (s32 *)buf); + buf[1] -= 0x20; + for (i = 0; i < 0x14; i++) { + func_801290DC(0x64, (u8 *)buf); + } + func_80147324(0x949); + func_80171990((u8 *)a0); + } +} + diff --git a/src/ov_SC03_029/ov_SC03_029_jr_8017FF7C.c b/src/ov_SC03_029/ov_SC03_029_jr_8017FF7C.c index 8ffce487e..8eadccdf7 100644 --- a/src/ov_SC03_029/ov_SC03_029_jr_8017FF7C.c +++ b/src/ov_SC03_029/ov_SC03_029_jr_8017FF7C.c @@ -3741,7 +3741,38 @@ void func_801816C8(s32 a0) { } -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8017FF7C", func_80181708); +void func_80181708(void *a0) { + extern s32 *D_80126B78; + extern s32 *D_8018B9A4[]; + extern u8 func_8014BF6C(void); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_8012B260(u8 *a0); + + typedef struct { s32 w[8]; } Blk32_80181708; + + Blk32_80181708 *dst; + Blk32_80181708 *src; + u8 result; + s16 field70; + u16 sp10[3]; + + dst = (Blk32_80181708 *)((u8 *)*(s32 **)((u8 *)a0 + 0x20) + 0x34); + src = (Blk32_80181708 *)((u8 *)D_80126B78 + 0x34); + *dst = *src; + + result = func_8014BF6C(); + field70 = *(s16 *)((u8 *)a0 + 0x70); + func_8012F214((s32)a0, + (s32)D_8018B9A4[result & 0xFF] + (field70 << 3), + (s32)sp10); + + *(s16 *)((u8 *)a0 + 0x6) = sp10[0]; + *(s16 *)((u8 *)a0 + 0xA) = sp10[1]; + *(s16 *)((u8 *)a0 + 0xE) = sp10[2]; + + func_8012B260((u8 *)a0); +} + void func_801817D8(u8 *a0, u8 *a1) { u16 sp0[3]; diff --git a/src/ov_SC03_030/ov_SC03_030_jr_8017AE2C.c b/src/ov_SC03_030/ov_SC03_030_jr_8017AE2C.c index dc2e7b813..65a23b3db 100644 --- a/src/ov_SC03_030/ov_SC03_030_jr_8017AE2C.c +++ b/src/ov_SC03_030/ov_SC03_030_jr_8017AE2C.c @@ -4998,7 +4998,31 @@ void func_8017EFD8(s32 a0) { } -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8017AE2C", func_8017F018); +extern s32 *D_80126B78; +extern u8 func_8014BF6C(void); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012B260(u8 *a0); +extern void *D_801859E8[]; + + + +void func_8017F018(s32 a0) { + s32 p; + u8 idx; + u16 out[4]; + + p = *(s32 *)(a0 + 0x20); + *(Blk32 *)(p + 0x34) = *(Blk32 *)((s32)D_80126B78 + 0x34); + + idx = func_8014BF6C(); + func_8012F214(a0, (s32)D_801859E8[idx] + (*(s16 *)(a0 + 0x70) << 3), (s32)out); + + *(s16 *)(a0 + 0x6) = out[0]; + *(s16 *)(a0 + 0xA) = out[1]; + *(s16 *)(a0 + 0xE) = out[2]; + func_8012B260((u8 *)a0); +} + extern u8 *func_801290DC(s32 a0, u8 *a1); diff --git a/src/ov_SC03_098/ov_SC03_098_jr_8017D898.c b/src/ov_SC03_098/ov_SC03_098_jr_8017D898.c index 457de98f8..9fdbd4b78 100644 --- a/src/ov_SC03_098/ov_SC03_098_jr_8017D898.c +++ b/src/ov_SC03_098/ov_SC03_098_jr_8017D898.c @@ -5742,7 +5742,33 @@ s32 func_80182574(s32 a0, s32 a1, s32 a2) { } -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8017D898", func_801826C8); + + +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void RotMatrixY(s32 a0, void *a1); +extern Blk20 D_800AE620; + +s32 func_801826C8(s32 arg0, s32 arg1) +{ + s32 pad[4]; + Blk20 mat; + s32 vec[4]; + s16 *ptr; + + ptr = *(s16 **)(arg0 + 0x2C); + if (*(u16 *)ptr == 0) { + return 0; + } + mat = D_800AE620; + RotMatrixY(func_8012B6D4((s16 *)(arg0 + 4), ptr + 2), &mat); + vec[1] = 0; + vec[0] = 0; + vec[2] = arg1; + func_800484EC((s32)&mat, (s32)vec, arg0 + 0x10); + return 1; +} + extern s32 func_8004787C(s32 a0); diff --git a/src/ov_SC03_119/ov_SC03_119_jr_8017AE2C.c b/src/ov_SC03_119/ov_SC03_119_jr_8017AE2C.c index d93eac1b7..ad18386c9 100644 --- a/src/ov_SC03_119/ov_SC03_119_jr_8017AE2C.c +++ b/src/ov_SC03_119/ov_SC03_119_jr_8017AE2C.c @@ -4600,7 +4600,23 @@ void func_8017D9C8(s32 a0) { } -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8017AE2C", func_8017DA98); +extern s16 D_80126B30; +extern s16 D_80126B3A; +extern s32 D_8012750C; +extern s16 D_8011F9C8; +extern void func_80174684(void *); +extern void func_8017DB00(void *); + +struct S8_8017DA98 { s16 m[4]; }; + +void func_8017DA98(s16 a0, void *a1, s32 a2) { + *(struct S8_8017DA98 *)&D_80126B30 = *(struct S8_8017DA98 *)a1; + D_80126B3A = a0; + D_8012750C = a2; + func_80174684((void *)func_8017DB00); + (*(s32 *)&D_8011F9C8) = 0; +} + extern void (*D_8018D620[])(void); diff --git a/src/ov_SC04_002/ov_SC04_002_jr_8017BEBC.c b/src/ov_SC04_002/ov_SC04_002_jr_8017BEBC.c index d4673c4df..19ca3c87f 100644 --- a/src/ov_SC04_002/ov_SC04_002_jr_8017BEBC.c +++ b/src/ov_SC04_002/ov_SC04_002_jr_8017BEBC.c @@ -9007,7 +9007,49 @@ void func_80184AA8(void *a0) { } -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8017BEBC", func_80184B30); +#include "common.h" + +extern void func_8012C1B8(void); +extern void func_8001C214(s32 a0, s32 a1); +extern void func_8012C194(void); +extern void func_8012CAE4(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80143994(s32 a0, s32 a1); +extern u8 D_801A960C[]; + +void func_80184B30(s32 param_1) { + s32 v0; + s32 s0; + u16 tmp; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4((void *)param_1); + return; + } + func_8001C214(v0, 0); + v0 = *(s32 *)(param_1 + 0x20); + *(s16 *)(v0 + 0x1A) = 0x1800; + *(s16 *)(v0 + 0x18) = 0x1800; + s0 = ((s32 (*)(void))func_8012C194)(); + if (s0 == 0) { + func_8012CAE4((void *)param_1); + return; + } + *(s32 *)(param_1 + 0xCC) = s0; + func_8001CB6C((u8 *)s0, D_801A960C, 0x2E0, 0x100); + *(u8 *)(s0 + 0x27) = 0x37; + *(u16 *)(s0 + 0x10) = 0x400; + *(s32 *)(s0 + 0x4) |= 0x50000000; + tmp = *(u16 *)(param_1 + 0xFC); + *(s16 *)(s0 + 0x1A) = 0x1800; + *(s16 *)(s0 + 0x18) = 0x1800; + *(u16 *)(s0 + 0x14) = tmp; + *(s16 *)(param_1 + 2) = 1; + func_80143994(param_1, 0x1000); +} + extern void func_8012B2CC(s32 a0); diff --git a/src/ov_SC06_024/ov_SC06_024_jr_80181D34.c b/src/ov_SC06_024/ov_SC06_024_jr_80181D34.c index ba6fc2a15..2ddd6a511 100644 --- a/src/ov_SC06_024/ov_SC06_024_jr_80181D34.c +++ b/src/ov_SC06_024/ov_SC06_024_jr_80181D34.c @@ -2899,7 +2899,37 @@ extern void func_8012AD44(s32 *a0, s16 a1); } -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80181D34", func_80181EF4); +extern void func_801825A4(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s16 D_801AC426[]; +extern u8 D_801AC45C[]; + +void func_80181EF4(s32 param_1) { + *(u16 *)(param_1 + 0xFE) = 0; + *(s32 *)(param_1 + 0x1C) = D_801AC426[*(s16 *)(param_1 + 0x70) * 4]; + if (*(s16 *)(param_1 + 0x70) == 0) { + if (*(s32 *)(param_1 + 0xCC) != 0) { + func_801825A4(*(s32 *)(param_1 + 0xCC)); + } + if (*(s32 *)(param_1 + 0xD0) != 0) { + func_801825A4(*(s32 *)(param_1 + 0xD0)); + } + if (*(s32 *)(param_1 + 0xD4) != 0) { + func_801825A4(*(s32 *)(param_1 + 0xD4)); + } + if (*(s32 *)(param_1 + 0xD8) != 0) { + func_801825A4(*(s32 *)(param_1 + 0xD8)); + } + *(s32 *)(param_1 + 0x58) = (s32)D_801AC45C; + *(u16 *)(param_1 + 0x5C) = 0x800; + *(u8 *)(param_1 + 0x75) = 8; + *(u16 *)(param_1 + 0x106) = 0; + func_8002D4C8(0x94F, 0); + } + ((void (*)(s32, s32))func_8012AD44)(param_1, 2); +} + void func_80181FD4(void *a0) { extern u8 D_8018FF4C; 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 cb0d4c3e5..d9fc20224 100644 --- a/src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c +++ b/src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c @@ -5911,7 +5911,29 @@ void func_8018247C(void) } -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80182538); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern s32 rand(void); + +void func_80182538(s32 param_1) +{ + s32 p; + s32 r; + s32 t; + s32 f; + + p = func_80132EF4(param_1, 0x72); + if (p != 0) { + r = 0x30; + t = *(u16 *)(p + 6) - r + rand() % 96; + f = *(u16 *)(p + 0xA); + *(u16 *)(p + 6) = t; + *(u16 *)(p + 0xA) = *(u16 *)(param_1 + 0x52) + (f + 0x80); + r = 0x30; + t = *(u16 *)(p + 0xE) - r + rand() % 96; + *(u16 *)(p + 0xE) = t; + } +} + extern void func_8012AD44(s32 *a0, s16 a1); extern u16 D_8018A464[]; @@ -6262,7 +6284,7 @@ void func_80182C68(s32 a0) 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_80182538(); extern void func_80181FE8(void *a0); extern u16 D_800B99DA; extern u16 D_8019FF8A;