feat(decomp): ox wave db overlays — 8 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 10:42:32 -06:00
parent 06e5daba0a
commit 1372b151f7
6 changed files with 350 additions and 8 deletions
+61 -1
View File
@@ -92,7 +92,67 @@ void func_800CB1C0(void *arg0) {
INCLUDE_ASM("asm/md_MAIN_015/nonmatchings/md_MAIN_015", func_800CB21C);
INCLUDE_ASM("asm/md_MAIN_015/nonmatchings/md_MAIN_015", func_800CB2E0);
void func_800CB2E0(void *arg0) {
extern s32 func_80146E98(s32 a0);
extern void func_80013F3C(void *a0);
extern void func_800126C4(s32 a0, s32 a1);
extern void func_800123F0(s32 a0, s32 a1);
extern void func_80012558(s32 a0, s32 a1);
extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4);
extern void func_80162FC0(s32 *a0);
extern s32 func_80163408(s32 a0, s32 a1, s32 a2, s32 a3);
extern void func_80163328();
extern s32 func_801632F0();
extern void func_80013E94(void *a0, void *a1);
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_80146CA0(void *a0);
extern s16 D_80126B18[];
extern s16 D_80126B1A[];
extern s16 D_80126B1C;
extern s32 D_80114EB0;
extern s32 D_80114EC8;
register void *a0v __asm__("$17");
register void *fp __asm__("$18");
u8 buf[0x40];
s32 sp60;
s32 cmd;
a0v = arg0;
fp = *(void **)((u8 *)a0v + 0x20);
if (func_80146E98((s32)a0v)) {
func_80146A6C(3, a0v, *(s16 *)((u8 *)a0v + 6), *(s16 *)((u8 *)a0v + 0xA), *(s16 *)((u8 *)a0v + 0xE), 0, 0x80001C00);
} else {
register u8 *bp __asm__("$16");
bp = buf + 0x20;
func_80013F3C(bp);
func_800126C4((s32)bp, *(s16 *)((u8 *)fp + 0x10));
func_800123F0((s32)bp, *(s16 *)((u8 *)fp + 0x14));
func_80012558((s32)bp, *(s16 *)((u8 *)fp + 0x12));
func_80163194((s32)a0v, 0, 0, 0, (s32)bp);
func_80162FC0((s32 *)a0v);
func_80163408((s32)a0v, 0x10, 0x80, 0x200);
func_80163328(a0v);
switch ((u32)func_801632F0(a0v)) {
case 1:
func_80013E94(&D_80114EB0, &sp60);
cmd = 0x1F;
break;
case 2:
case 4:
func_80013E94(&D_80114EC8, &sp60);
cmd = 7;
break;
default:
return;
}
sp60 |= 0x80000000;
func_80146A6C(cmd, a0v, D_80126B18[0], D_80126B1A[0], D_80126B1C, sp60, 0);
}
func_80146CA0(a0v);
}
extern void func_80162CCC(void);
void func_800CB474(void) {
+154 -2
View File
@@ -7283,7 +7283,21 @@ void func_801859C4(s32 arg0) {
}
INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8017DF34", func_80185AF0);
extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3);
extern char D_801D0DA8;
s32 aF80185AF0(s32 arg0) __asm__("func_80185AF0");
s32 aF80185AF0(s32 arg0) {
if (*(s32 *)(arg0 + 0xDC) & 1) {
return 0;
}
if (func_8012D5E4(arg0, (s32)&D_801D0DA8, (s32)&D_801D0DA8 + 8, 0xB) != 1) {
return 0;
}
*(s32 *)(arg0 + 0xDC) |= 1;
return 1;
}
#include "common.h"
@@ -7599,7 +7613,145 @@ void func_801866C8(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8017DF34", func_80186770);
#include "common.h"
extern s32 func_8012B8E4(s32 a0, s32 a1);
extern s32 func_8012BEE8(s32 a0);
extern void func_8012A828(s32 a0, void *a1);
extern void func_80142414(s32 a0, s16 a1);
extern void func_8002D4C8(s32 a0, s32 a1);
extern void func_8012B178(s32 a0, s32 a1);
extern void func_8012CBA4(s32);
extern void func_80131E00(s32 a0, s32 a1);
extern void func_80185F88(s32 a0);
extern s32 func_80143B6C(s32 a0, s32 a1);
extern void func_80186C38(s32 a0, s32 a1);
extern void Square0(s32 *a0, s32 *a1);
extern s32 func_8012BCCC(s32 a0);
extern s32 rand(void);
extern s32 func_8012B744(void *a0, void *a1);
extern void func_8012ADE4(u8 *a0);
extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2);
extern void func_80186B08(void);
extern void func_80186B34(s32 a0);
extern void func_80186B7C(s32 a0);
extern s32 D_801D619C;
extern s16 D_801E1264;
extern s16 D_801E11DC;
extern s16 D_801E1AFC;
extern short D_801E1134;
void func_80186770(s32 param_1)
{
struct { s32 vx, vy, vz, pad; } vec;
s32 v;
s32 d;
s32 b178arg;
void *target;
switch (*(u16 *)(param_1 + 0x34)) {
case 0:
v = func_8012B8E4(param_1, 4);
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) += v;
if (*(s32 *)(param_1 + 0x1C) == 0xF) {
func_80142414(param_1, -0x78);
func_8002D4C8(0x6A9, 0);
}
if (func_8012BEE8(param_1) != 0) {
*(s16 *)(param_1 + 0x2) = 3;
if ((*(u16 *)(param_1 + 0x86) & 2) != 0) {
*(s16 *)(param_1 + 0x34) = 1;
*(s32 *)(param_1 + 0x1C) = 0x28;
if ((*(u16 *)(param_1 + 0x70) & 0x200) != 0) {
func_8012A828(param_1, &D_801E1AFC);
} else {
func_8012A828(param_1, &D_801E11DC);
}
*(u16 *)(param_1 + 0xFE) = 0;
} else {
*(s16 *)(param_1 + 0x34) = 0;
func_8012A828(param_1, &D_801E1264);
*(s32 *)(param_1 + 0x1C) = 0x19;
*(u16 *)(param_1 + 0x86) |= 2;
}
}
break;
case 1:
v = func_8012B8E4(param_1, 6);
b178arg = D_801D619C;
{
register u16 *pp __asm__("$3");
register s32 nv __asm__("$6");
pp = (u16 *)(*(s32 *)(param_1 + 0x20) + 0x12);
nv = *pp + v;
*pp = nv;
}
func_8012B178(param_1, b178arg);
d = ((s32 (*)(s32))func_8012CBA4)(param_1);
if ((d & 0x1000) != 0) {
func_80131E00(param_1, 0x12);
} else if (d != 0x2000) {
func_8012ADE4((u8 *)param_1);
}
func_80185F88(param_1);
v = *(u16 *)(param_1 + 0xFE) - 1;
*(u16 *)(param_1 + 0xFE) = v;
if ((v << 16) <= 0) {
func_80143B6C(param_1, 0);
*(u16 *)(param_1 + 0xFE) = 8;
}
if ((*(u16 *)(param_1 + 0x70) & 0x200) != 0) {
func_80186C38(param_1, 0x11);
}
target = (void *)(param_1 + 0x88);
vec.vx = *(s16 *)(param_1 + 6) - *(s16 *)(param_1 + 0x88);
vec.vy = 0;
vec.vz = *(s16 *)(param_1 + 0xE) - *(s16 *)(param_1 + 0x8C);
Square0(&vec.vx, &vec.vx);
if (vec.vx + vec.vz > 0x8FFFF || (d = func_8012BCCC(param_1), d > 0x24000)) {
*(s16 *)(param_1 + 0x2) = 1;
*(s16 *)(param_1 + 0x34) = 0;
*(u16 *)(param_1 + 0x5C) = 0xAA10;
*(s32 *)(param_1 + 0x1C) = (rand() & 0x1F) + 0x28;
vec.vx = *(s16 *)(param_1 + 6) - *(s16 *)(param_1 + 0x88);
vec.vy = 0;
vec.vz = *(s16 *)(param_1 + 0xE) - *(s16 *)(param_1 + 0x8C);
Square0(&vec.vx, &vec.vx);
if (vec.vx + vec.vz > 0x8FFFF) {
*(u16 *)(param_1 + 0xFC) = func_8012B744((void *)(param_1 + 4), target);
} else {
register s32 t __asm__("$2") = rand() & 0x3FF;
s32 off = t - 0x200;
if (off < 0) {
off = t - 0x500;
} else {
off = t + 0x100;
}
*(u16 *)(param_1 + 0xFC) =
(*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) + off) & 0xFFF;
}
func_8012A828(param_1, &D_801E1134);
}
if ((*(u16 *)(param_1 + 0x70) & 0x100) == 0) {
if (func_8012BD3C(param_1, 0x400, 0x1000) != 0) {
if ((*(u16 *)(param_1 + 0x70) & 0xF00) == 0) {
((void (*)(s32))func_80186B08)(param_1);
} else {
func_80186B34(param_1);
}
}
} else {
if (func_8012BD3C(param_1, 0x400, 0x40000) != 0) {
func_80186B7C(param_1);
}
}
break;
}
}
+32 -1
View File
@@ -7928,7 +7928,38 @@ void func_80188EC0(void *arg0) {
}
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_80188F4C);
extern void func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
extern void func_8001CA1C(s32 a0, s32 a1);
extern void func_8012A828(s32 a0, void *a1);
void func_80188F4C(void *a0)
{
register void *s0 __asm__("$16");
s32 v0;
s0 = a0;
v0 = ((s32 (*)(void))func_8012C1B8)();
*(s32 *)((s32)s0 + 0x20) = v0;
if (v0 == 0) {
func_8012CAE4(s0);
} else {
extern u8 D_801905E4[];
extern u8 D_801905F0[];
func_8001CA1C(v0, (s32)&D_801905E4);
func_8012A828((s32)s0, &D_801905F0);
*(s16 *)((s32)s0 + 0x2) = 1;
*(s16 *)(*(s32 *)((s32)s0 + 0x20) + 0x18) = 0x2800;
*(s16 *)(*(s32 *)((s32)s0 + 0x20) + 0x1A) = 0x2800;
*(s16 *)(*(s32 *)((s32)s0 + 0x20) + 0x1C) = 0x2800;
*(u16 *)(*(s32 *)((s32)s0 + 0x20) + 0x2C) |= 0x10;
}
}
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_80188FF0);
+31 -1
View File
@@ -4779,7 +4779,37 @@ void func_8018A8DC(void *a0)
}
INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80188274", func_8018A9C8);
extern void Square0(s32 *a0, s32 *a1);
s32 func_8018A9C8(void *a0, s32 a1) {
extern u16 D_80126B62;
extern u16 D_80126B5E;
extern u16 D_80126B66;
s32 sp10[3];
s32 sp20[3];
s32 m;
s16 e;
register s32 ret __asm__("$2");
sp10[0] = *(s16 *)((s32)a0 + 6) - *(s16 *)&D_80126B5E;
sp10[1] = 0;
sp10[2] = *(s16 *)((s32)a0 + 0xE) - *(s16 *)&D_80126B66;
Square0(sp10, sp20);
m = D_80126B62 - *(u16 *)((s32)a0 + 0xA);
e = m;
if ((s16)m < 0) {
e = -m;
}
ret = 0;
if (sp20[0] + sp20[2] < (u16)a1 * (u16)a1) {
ret = (s16)e < 4;
}
return ret;
}
INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80188274", func_8018AA88);
+15 -1
View File
@@ -6343,7 +6343,21 @@ void aF80183E20(void *a0) {
}
INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_80183EA8);
extern s32 rand(void);
extern s32 D_801EFC54;
extern void func_8018B0B0(void *a0, void *a1, void *a2, u32 a3);
void func_80183EA8(void) {
s16 svec[4];
s32 obj;
obj = D_801EFC54;
svec[0] = (rand() & 0x3F) - 0x20;
svec[1] = 0x80;
svec[2] = (rand() & 0x3F) - 0x20;
func_8018B0B0((void *)obj, svec, (void *)0, 8);
}
#include "common.h"
+57 -2
View File
@@ -3581,7 +3581,39 @@ void func_8017DF44(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8017C24C", func_8017DFE8);
extern s32 func_8004787C(s32);
extern s32 func_80047948(s32);
extern void func_8017E0E4();
void func_8017DFE8(s32 arg0, s32 arg1, s32 arg2)
{
register s32 s2 __asm__("$18") = arg0;
register s32 s3 __asm__("$19") = arg1;
register s32 s4 __asm__("$20") = arg2;
register s32 r1;
register s32 r2;
s32 w;
r1 = func_8004787C(*(s16 *)((u8 *)s2 + 0x100));
if (r1 < 0) {
r1 += 0x7F;
}
r1 >>= 7;
w = (*(u16 *)((u8 *)s2 + 0x100)) + (*(u16 *)((u8 *)s2 + 0x102));
*(u16 *)((u8 *)s2 + 0x100) = w;
r2 = func_80047948((s16)w);
if (r2 < 0) {
r2 += 0x7F;
}
r2 >>= 7;
*(s32 *)((u8 *)s2 + 0xE4) += 4;
if (*(s32 *)((u8 *)s2 + 0xE4) >= 0x40) {
*(s32 *)((u8 *)s2 + 0xE4) = 0;
}
func_8017E0E4(s2, 0, (s16)r1, (s16)r2, s3, s4);
func_8017E0E4(s2, 1, (s16)r1, (s16)r2, s3, s4);
}
INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8017C24C", func_8017E0E4);
@@ -3653,7 +3685,30 @@ void func_8017E7DC(s32 a0)
}
INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8017C24C", func_8017E82C);
extern s16 currentLocationId;
extern u8 D_801953A4[];
extern void func_80147324(s32 a0);
extern int func_801511E0(int arg);
extern void func_80154274(s32 *a0, s32 a1);
extern void func_80149020(s32 *a0);
extern void func_8017EA60(void);
extern void func_80146CA0(void *a0);
void func_8017E82C(s32 p)
{
if (currentLocationId == 0x3083) {
*(u16 *)(p + 0xA) -= 8;
}
func_80147324(0x451);
((void (*)(s32))func_801511E0)(p);
((void (*)(s32, s32))func_80154274)(p, (s32)D_801953A4);
((void (*)(s32))func_80149020)(p);
*(u8 *)(p + 0xDE) = 0xA;
*(u8 *)(p + 0xDF) = 0;
func_8017EA60();
((void (*)(s32))func_80146CA0)((void *)p);
}
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern s32 func_8017EA84(void);