From 0cfc942cc84341eee688f3a58dfccba509632ed5 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Tue, 25 Aug 2026 05:54:17 -0600 Subject: [PATCH] =?UTF-8?q?feat(decomp):=20ox=20wave=20cp=20overlays=20?= =?UTF-8?q?=E2=80=94=204=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_SC07_004/md_SC07_004.c | 15 ++++++++- src/ov_SC03_097/ov_SC03_097_jr_8017D898.c | 31 +++++++++++++++++- src/ov_SC04_011/ov_SC04_011_jr_8017D494.c | 16 +++++++++- src/ov_SC05_001/ov_SC05_001_jr_8017BEBC.c | 38 ++++++++++++++++++++++- 4 files changed, 96 insertions(+), 4 deletions(-) diff --git a/src/md_SC07_004/md_SC07_004.c b/src/md_SC07_004/md_SC07_004.c index 82d2a43d79..50ad51409b 100644 --- a/src/md_SC07_004/md_SC07_004.c +++ b/src/md_SC07_004/md_SC07_004.c @@ -5782,7 +5782,20 @@ void func_801AC150(void *a0) { } -INCLUDE_ASM("asm/md_SC07_004/nonmatchings/md_SC07_004", func_801AC234); +extern s32 func_80128ED8(s32 a0, s32 *a1); + +void func_801AC234(void *a0) +{ + extern void func_801292C8(u8 *a0); + extern void func_8012931C(struct vec *a0); + + func_8012931C((struct vec *)a0); + if (func_80128ED8(*(s32 *)((char *)a0 + 0x20), (s32 *)((char *)a0 + 0x24)) != 0 || + (*(s16 *)((char *)a0 + 0x2C) != 2 && *(s16 *)((char *)a0 + 0xA) >= -0x200)) { + func_801292C8((u8 *)a0); + } +} + #include "common.h" diff --git a/src/ov_SC03_097/ov_SC03_097_jr_8017D898.c b/src/ov_SC03_097/ov_SC03_097_jr_8017D898.c index 86b093c2e3..a30a9f3414 100644 --- a/src/ov_SC03_097/ov_SC03_097_jr_8017D898.c +++ b/src/ov_SC03_097/ov_SC03_097_jr_8017D898.c @@ -4682,7 +4682,36 @@ void func_80180C68(void *a0) } -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8017D898", func_80180D54); +extern void Square0(s32 *a0, s32 *a1); +extern u16 D_80126B5E; +extern u16 D_80126B66; +extern u16 D_80126B62; + +s32 func_80180D54(void *a0, s32 a1) { + s32 in[3]; + s32 out[3]; + s32 d; + s16 e; + register s32 ret __asm__("$2"); + + in[0] = *(s16 *)((s32)a0 + 6) - *(s16 *)&D_80126B5E; + in[1] = 0; + in[2] = *(s16 *)((s32)a0 + 0xE) - *(s16 *)&D_80126B66; + Square0(in, out); + + d = D_80126B62 - *(u16 *)((s32)a0 + 0xA); + e = d; + if ((s16)d < 0) { + e = -d; + } + + ret = 0; + if (out[0] + out[2] < (u16)a1 * (u16)a1) { + ret = (s16)e < 4; + } + return ret; +} + void func_80180E14(void) { 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 e4e3bc65ed..27eacfa932 100644 --- a/src/ov_SC04_011/ov_SC04_011_jr_8017D494.c +++ b/src/ov_SC04_011/ov_SC04_011_jr_8017D494.c @@ -7978,7 +7978,21 @@ s32 func_80186710(void) { } -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_80186798); +#include "common.h" + +void func_80186798(s32 a0, void *a1) { + extern u8 D_80194724[]; + extern s32 aFC4C[] __asm__("D_801EFC4C"); + extern void func_801868A0(); + u32 i; + + for (i = 0; i < (u32)a0; i++) { + if (D_80194724[i] == 0) { + func_801868A0((void *)aFC4C[i], a1); + } + } +} + extern s32 aFC4C[] __asm__("D_801EFC4C"); extern u8 D_80194724[]; 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 2a3c8c4ee9..dbf1d78dd1 100644 --- a/src/ov_SC05_001/ov_SC05_001_jr_8017BEBC.c +++ b/src/ov_SC05_001/ov_SC05_001_jr_8017BEBC.c @@ -6238,7 +6238,43 @@ extern s32 func_8012BEE8(s32 arg); } -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_80181A1C); +extern void func_8012A828(s32*, s32); +extern void func_8012B23C(s32 a0); +extern u8 D_80078E78[]; +extern s32 rand(void); + +/* func_80181A1C — entity state-kick #0xA (head-crack entry). */ +void func_80181A1C(void *a0) { + + extern u8 D_801ADDEC[]; + volatile s32 pad[4]; + u8 *p; + s32 t; + s32 r; + s32 h; + s32 v; + + t = rand(); + p = D_80078E78; + r = t % 1024; + h = *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12); + if (rand() & 1) { + v = h + r; + } else { + v = h - r; + } + *(s32 *)((s32)a0 + 0xE0) = v; + func_8012B23C((s32)a0); + ((void (*)(s32, void *))func_8012A828)((s32)a0, D_801ADDEC); + *(s32 *)((s32)a0 + 0x1C) = 150; + *(s32 *)((s32)a0 + 0xE4) = 0; + if (p[0x36] != 0) { + *(s16 *)((s32)a0 + 2) = 6; + } else { + *(s16 *)((s32)a0 + 2) = 7; + } +} + extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); extern s32 func_8012B8E4(s32 a0, s32 a1);