From 2c3201b2fde3f64452d12eaffa7d93b5f9be3bce Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Tue, 25 Aug 2026 16:00:57 -0600 Subject: [PATCH] =?UTF-8?q?feat(decomp):=20ox=20wave=20eb=20overlays=20?= =?UTF-8?q?=E2=80=94=205=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_001/md_MAIN_001.c | 92 ++++++++++++++++++++++- src/md_MAIN_025/md_MAIN_025.c | 33 +++++++- src/md_MAIN_045/md_MAIN_045.c | 54 ++++++++++++- src/ov_SC05_008/ov_SC05_008_jr_8017AE2C.c | 12 ++- 4 files changed, 186 insertions(+), 5 deletions(-) diff --git a/src/md_MAIN_001/md_MAIN_001.c b/src/md_MAIN_001/md_MAIN_001.c index 35654ba2a..3bfeb2a51 100644 --- a/src/md_MAIN_001/md_MAIN_001.c +++ b/src/md_MAIN_001/md_MAIN_001.c @@ -211,6 +211,96 @@ void func_800CF180(void) } -INCLUDE_ASM("asm/md_MAIN_001/nonmatchings/md_MAIN_001", func_800CF290); +extern s32 D_800D3C10; + +void func_800CF290(void) { + extern u16 D_800B9A02; + extern u8 D_800D3AEC[]; + extern u8 D_800D3B1C[]; + extern u8 D_800D3C10_b __asm__("D_800D3C10"); + extern u8 D_800AA60C[]; + + register s32 n __asm__("$7") = D_800B9A02; + register u8 *p0 __asm__("$4"); + register u8 *p1 __asm__("$3"); + register u32 c5 __asm__("$6"); + register u32 c64 __asm__("$13"); + register u32 c7840 __asm__("$14"); + register u32 cm28 __asm__("$12"); + register u32 c38 __asm__("$11"); + register u32 c256 __asm__("$10"); + register u32 c60 __asm__("$9"); + u32 *q0; + u32 *q1; + u32 *ot; + u8 c; + s32 w; + u32 t; + + { + u32 e1a = 0xE100008A; + + w = n * 24; + p0 = D_800D3AEC + w; + q0 = (u32 *)(D_800D3AEC + w + 4); + c5 = 5; + p0[3] = c5; + *q0 = e1a; + } + c64 = 0x64; + p0[0xB] = c64; + *(s16 *)(p0 + 0xC) = -0x100; + c = D_800D3C10_b; + n <<= 14; + c7840 = 0x7840; + cm28 = -28; + *(s16 *)(p0 + 0x12) = c7840; + *(s16 *)(p0 + 0xE) = cm28; + c38 = 0x38; + c256 = 0x100; + p0[0x10] = 0; + p0[0x11] = c38; + *(s16 *)(p0 + 0x14) = c256; + c60 = 0x60; + *(s16 *)(p0 + 0x16) = c60; + p0[0xA] = c; + p0[9] = c; + p0[8] = c; + + p1 = D_800D3B1C + w; + q1 = (u32 *)(D_800D3B1C + w + 4); + { + register u32 e1b __asm__("$8") = 0xE100008C; + p1[3] = c5; + *q1 = e1b; + } + t = *(u32 *)p1; + p1[0xB] = c64; + c = D_800D3C10_b; + *(s16 *)(p1 + 0x12) = c7840; + *(s16 *)(p1 + 0xC) = 0; + *(s16 *)(p1 + 0xE) = cm28; + p1[0x10] = 0; + p1[0x11] = c38; + *(s16 *)(p1 + 0x14) = c256; + *(s16 *)(p1 + 0x16) = c60; + p1[0xA] = c; + p1[9] = c; + p1[8] = c; + + ot = (u32 *)(D_800AA60C + n); + { + register u32 m24 __asm__("$8"); + register u32 mFF __asm__("$5"); + + m24 = 0xFFFFFF; + mFF = 0xFF000000; + *(u32 *)p1 = (t & mFF) | (*ot & m24); + *ot = (*ot & mFF) | ((u32)p1 & m24); + *(u32 *)p0 = (*(u32 *)p0 & mFF) | (*ot & m24); + *ot = (*ot & mFF) | ((u32)p0 & m24); + } +} + INCLUDE_RODATA("asm/md_MAIN_001/nonmatchings/md_MAIN_001", D_800CEDF8); diff --git a/src/md_MAIN_025/md_MAIN_025.c b/src/md_MAIN_025/md_MAIN_025.c index 942cf4a89..ae390f35d 100644 --- a/src/md_MAIN_025/md_MAIN_025.c +++ b/src/md_MAIN_025/md_MAIN_025.c @@ -122,7 +122,38 @@ void func_800CB180(void) { } -INCLUDE_ASM("asm/md_MAIN_025/nonmatchings/md_MAIN_025", func_800CB1A0); +#include "common.h" + +extern u8 D_80078EC1; +extern void (*D_800CBEBC[])(void); +extern s32 func_800CB7B0(s32 a0); +extern void func_80147364(u16 a0, s32 a1); +extern void func_800CB6CC(void*); + +void func_800CB1A0(s32 a0) { + s32 pad[2]; + u16 index; + s16 value; + s32 self = a0; + + if (D_80078EC1 != 0xF) { + ((void (*)(s32))func_800CB6CC)(a0); + return; + } + index = *(u16 *)(self + 2); + ((void (*)(s32))D_800CBEBC[index])(self); + + if (*(u16 *)self != 0 && func_800CB7B0(self) != 0) { + func_80147364(4, 0x649); + } + + value = *(s16 *)(self + 0xA); + if (value < 0x401) { + return; + } + ((void (*)(s32))func_800CB6CC)(self); +} + void func_800CB23C(void *a0) { extern u8 D_800CBE98[]; diff --git a/src/md_MAIN_045/md_MAIN_045.c b/src/md_MAIN_045/md_MAIN_045.c index b3c2e3372..f9959cbca 100644 --- a/src/md_MAIN_045/md_MAIN_045.c +++ b/src/md_MAIN_045/md_MAIN_045.c @@ -133,7 +133,14 @@ void func_800CCF28(s32 a0) { } -INCLUDE_ASM("asm/md_MAIN_045/nonmatchings/md_MAIN_045", func_800CCF58); +void func_800CCF58(void *arg0) { + void *s0; + + s0 = arg0; + func_800CCF84(); + *(s16 *)((u8 *)s0 + 0x1C8) = 0; +} + extern void func_80147364(s32 a, s32 b); void func_800CCF84(void) { @@ -253,7 +260,50 @@ void func_800CD328(s32 param_1) } -INCLUDE_ASM("asm/md_MAIN_045/nonmatchings/md_MAIN_045", func_800CD390); +extern void func_80146578(void); +extern s32 func_8001CC3C(s32, s32, s32, s32); +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_80146CA0(void *a0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_800CD5BC(void); +extern u8 D_800CD66C; +extern s16 D_800CE050; + +void func_800CD390(s32 param_1) { + s32 s0; + s32 s2; + u16 temp; + s2 = *(s32 *)(param_1 + 0x4C); + s0 = ((s32 (*)(void))func_80146578)(); + *(s32 *)(param_1 + 0x20) = s0; + if (s0 != 0) { + ((s32 (*)(s32, void *, s32, s32))func_8001CC3C)(s0, ((u8 *)&D_800CD66C), 0x220, 0x168); + *(u8 *)(s0 + 0x27) = 0x24; + *(u8 *)(s0 + 0x24) = 0xFF; + *(u8 *)(s0 + 0x25) = 0x40; + *(u8 *)(s0 + 0x26) = 0x40; + *(u32 *)(s0 + 4) |= 0x50000000; + func_80149374(s2, param_1 + 4); + temp = *(u16 *)(*(s32 *)(s2 + 0x20) + 0x10); + *(s16 *)(s0 + 0x12) = D_800CE050; + *(u16 *)(s0 + 0x10) = temp; + *(u16 *)(s0 + 0x14) = *(u16 *)(*(s32 *)(s2 + 0x20) + 0x14); + *(u16 *)(param_1 + 0x60) = *(u16 *)(s2 + 0x100); + *(u16 *)(param_1 + 0x62) = *(u16 *)(s2 + 0x102); + *(u16 *)(param_1 + 0x64) = *(u16 *)(s2 + 0x104); + *(u16 *)(s0 + 0x1A) = 0x1000; + *(u16 *)(s0 + 0x18) = 0x1000; + func_80146DE8((s32 *)param_1, 0, 0, 0xFFE80000); + func_80146E90((s32 *)param_1, 8); + func_80146CA0((void *)param_1); + func_8014ACC0(s2, 1); + } else { + ((void (*)(s32))func_800CD5BC)(param_1); + } +} + extern s32 func_80146E98(s32 a0); extern void func_80146CA0(void *a0); 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 f94471b78..4841cd00f 100644 --- a/src/ov_SC05_008/ov_SC05_008_jr_8017AE2C.c +++ b/src/ov_SC05_008/ov_SC05_008_jr_8017AE2C.c @@ -4007,7 +4007,17 @@ void func_8017D2AC(s32 param_1) { } -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_8017D378); +void func_8017D378(s32 param_1) { + extern void func_800291A0(s32 a0, s32 a1); + extern void func_8016F288(void); + extern s32 func_80171990(u8 *a0); + extern s32 D_801A12E4; + func_800291A0(0xE1, 0); + func_8016F288(); + D_801A12E4 = 0; + func_80171990((u8 *)param_1); +} + void func_8017D3C0(void *a0) { extern s32 D_801151D4;