feat(decomp): ox wave du overlays — 3 banked

Committed before the main batch: gate_main reverts on failure and would take these with it.
This commit is contained in:
Drew T
2026-08-25 15:23:00 -06:00
parent 3b90d2db39
commit 9d6a748387
3 changed files with 209 additions and 3 deletions
+65 -1
View File
@@ -124,7 +124,71 @@ void func_800CB09C(s32 a0) {
}
INCLUDE_ASM("asm/md_MAIN_037/nonmatchings/md_MAIN_037", func_800CB150);
extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3);
extern void func_80162FC0(void *a0);
extern s32 func_80146E98(s32 a0);
extern s32 func_80163950(s32 a0);
extern s32 func_8016380C(void *a0, s32 a1);
extern void func_80016714(s8 *a0, s32 a1);
extern void func_80146578(void);
extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3);
extern void func_80146E90(s32 *a0, s32 a1);
extern void func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_80147324(s32 a0);
extern void func_80146CA0(void *a0);
extern s32 func_80163408(s32 a0, s32 a1, s32 a2, s32 a3);
extern void func_80163328(void *a0);
extern void func_800CB358(void);
extern u8 D_800CB628[];
void func_800CB150(void *a0) {
s32 sp20;
s32 flags;
s32 sh;
s32 t;
func_80162FF4((s32)a0, 0, 0x40000, 0);
func_80162FC0(a0);
if (func_80146E98((s32)a0) != 0) {
func_80146CA0(a0);
return;
}
flags = func_80163950((s32)a0) != 0;
sh = flags << 13;
t = sh | func_8016380C(a0, (s32)&sp20);
if (t == 0) {
goto tail;
}
if (t != 0x8000) {
goto alloc;
}
*(s32 *)((s32)a0 + 0x2C) = 0;
*(s32 *)((s32)a0 + 0x24) = 0;
goto tail;
alloc:
func_80016714(*(s8 **)((s32)a0 + 0x20), 0x84);
*(s32 *)((s32)a0 + 0x20) = 0;
t = ((s32 (*)(void))func_80146578)();
*(s32 *)((s32)a0 + 0x20) = t;
if (t != 0) {
func_8001CB6C((u8 *)t, (s32)D_800CB628, 0x1A0, 0x100);
*(u8 *)((s32)t + 0x27) = 0x1B;
*(u16 *)((s32)t + 0x10) = 0x400;
func_80146E90((s32 *)a0, 0x20);
for (t = 0; t < 4; t++) {
func_80146A6C(0x45, a0, *(s16 *)((s32)a0 + 6), *(s16 *)((s32)a0 + 0xA),
*(s16 *)((s32)a0 + 0xE), t, 0);
}
func_80147324(0x913);
func_80146CA0(a0);
return;
}
((void (*)(s32))func_800CB358)(a0);
tail:
func_80163408((s32)a0, 0x27, 0, 0x80);
((void (*)(s32))func_80163328)(a0);
}
INCLUDE_ASM("asm/md_MAIN_037/nonmatchings/md_MAIN_037", func_800CB2A8);
+58 -1
View File
@@ -3444,7 +3444,64 @@ INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8017BEBC", func_8017E21
INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8017BEBC", func_8017E3A0);
INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8017BEBC", func_8017E4A0);
void func_8017E4A0(void)
{
register u8 *p __asm__("$3");
register u32 u __asm__("$2");
register u32 w __asm__("$4");
register u32 mlo __asm__("$5");
register u32 mhi __asm__("$6");
register u32 ent __asm__("$4");
register u32 c64 __asm__("$2");
s32 frame_pad[2];
extern u8 *D_800A5E60;
extern s16 D_800B9A02;
extern u8 D_800A6614[];
(void)&frame_pad;
w = 0xE100001E;
mlo = 0xFFFFFF;
__asm__ __volatile__("":::"memory");
p = D_800A5E60;
mhi = 0xFF000000;
*(s8 *)(p + 3) = 5;
__asm__ __volatile__("");
__asm__ __volatile__("li\t%0,0x64\n\tsw\t%1,4(%2)"
: "=&r"(c64)
: "r"(w), "r"(p)
: "memory");
*(s8 *)(p + 0xB) = c64;
w = 0x80;
*(s16 *)(p + 0xC) = -0x40;
*(s16 *)(p + 0xE) = 0x50;
*(s16 *)(p + 0x12) = 0x40D7;
*(s16 *)(p + 0x14) = 0xA0;
*(s16 *)(p + 0x16) = 0x20;
*(s16 *)(p + 0x14) = 0x80;
*(s8 *)(p + 0xA) = w;
*(s8 *)(p + 0x9) = w;
*(s8 *)(p + 0x8) = w;
*(s8 *)(p + 0x10) = 0;
*(s8 *)(p + 0x11) = w;
*(s16 *)(p + 0x16) = 0x10;
u = D_800B9A02 & 0xFFFF;
w = *(u32 *)p;
u = *(u32 *)(D_800A6614 + (u << 14));
w = (w & mhi) | (u & mlo);
*(u32 *)p = w;
u = (u32)D_800A6614;
ent = (u32 *)(u + ((D_800B9A02 & 0xFFFF) << 14));
mlo = (u32)p & mlo;
u = *(u32 *)ent;
p += 0x18;
D_800A5E60 = p;
u = (u & mhi) | mlo;
*(u32 *)ent = u;
}
INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8017BEBC", func_8017E594);
+86 -1
View File
@@ -3499,7 +3499,92 @@ void func_80184B80(s32 param_1, s32 param_2)
}
INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80183BF8", func_80184CB0);
typedef struct { u8 b[0x6C]; } Blk6C_80184CB0;
extern s32 func_8012C354(s32 a0, s32 a1);
extern void func_8001C810(s32 a0, s32 a1);
extern void func_8012A828(s32 a0, void *a1);
extern void func_8012B2CC(s32 a0);
extern void func_8001D074(s32 a0, s32 a1);
extern void func_8001CD50(s32 a0, s32 a1);
extern void func_800233CC(void *a0, unsigned short a1);
extern void func_800D20C0(void *a0, void *a1, s32 a2);
extern void func_800D23D0(void *a0);
extern void RotMatrixYXZ(void *a0, void *a1);
extern u8 D_8018B7A4[];
extern u8 D_801BBF94[];
extern u8 D_8018B7D8[];
extern u8 D_801C13A8[];
extern u8 D_80126B5C;
extern s32 D_80126B60;
extern s32 D_80126B64;
extern u8 D_801C1458[];
extern u8 D_801C1418;
extern u8 D_801C1419;
extern u8 D_801C141A;
extern u8 D_801C141C;
extern u8 D_801C141D;
extern u8 D_801C141E;
extern s32 D_801C14D8[];
void func_80184CB0(s32 a0) {
extern u8 D_801BBFBC[];
u8 *p;
s16 sp[8];
s32 s3;
if (*(s32 *)(a0 + 0x20) == 0) {
if (func_8012C354(a0, (s32)&D_8018B7A4) == 0) {
return;
}
func_8001C810(*(s32 *)(a0 + 0x20), (s32)&D_801BBF94);
func_8012A828(a0, (void *)&D_8018B7D8);
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) |= 0x20;
*(s32 *)(*(s32 *)(a0 + 0x20) + 0x80) = (s32)&D_801C13A8;
*(s32 *)(*(s32 *)(a0 + 0x20) + 4) |= 0x40000000;
*(s16 *)(a0 + 0xAE) = -3;
*(s32 *)(*(s32 *)(a0 + 0x20) + 4) |= 0x80000000;
}
*(s32 *)(a0 + 4) = *(s32 *)&D_80126B5C;
*(s32 *)(a0 + 8) = D_80126B60;
*(s32 *)(a0 + 0xC) = D_80126B64;
func_8012B2CC(a0);
*(Blk6C_80184CB0 *)D_801C1458 = *(Blk6C_80184CB0 *)D_801BBFBC;
*(s32 *)(a0 + 0xD8) = (s32)&D_801C1458;
s3 = ((s32 (*)(s32, s32))func_8001D074)(0x7E, 0x100);
if (s3 == 0) {
return;
}
p = &D_801C1418;
*(s32 *)(a0 + 0xD0) = s3;
func_8001CD50(s3, (s32)p);
D_801C1419 = 0xFF;
D_801C141A = 0xFF;
*p = 0xFF;
D_801C141E = 0;
D_801C141D = 0;
D_801C141C = 0;
func_800233CC(p, 0x100);
sp[0] = *(u16 *)(a0 + 6);
sp[1] = (u16)(*(u16 *)(a0 + 0xA) - 0x38);
sp[2] = *(u16 *)(a0 + 0xE);
func_800D20C0(&sp[0], &sp[4], 5);
D_801C14D8[0] = sp[0];
D_801C14D8[1] = sp[1];
D_801C14D8[2] = sp[2];
func_800D23D0(&sp[4]);
RotMatrixYXZ(&sp[4], &D_801C14D8[-5]);
*(s32 *)(s3 + 0x34) = (s32)&D_801C14D8[-5];
*(s16 *)(s3 + 0x1A) = 0;
*(s16 *)(s3 + 0x18) = 0;
*(s32 *)(s3 + 4) |= 0x50000000;
*(u16 *)(a0 + 2) = 0xB;
}
#include "common.h"