feat(decomp): ox wave bj overlays — 19 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-24 15:56:26 -06:00
parent fd47c86f4f
commit 0de85bc8d2
9 changed files with 379 additions and 21 deletions
+31 -2
View File
@@ -3311,7 +3311,29 @@ void func_8017D500(void *a0) {
}
INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8017C294", func_8017D53C);
void func_8017D53C(s32 param_1) {
extern u16 D_80126940;
extern s16 D_80126942;
extern s16 D_80126944;
extern void func_8017D5C8(s32, s16 *);
s16 buf[3];
buf[0] = D_80126940;
if (D_80126942 < -0x570) {
buf[1] = -0x570;
} else if (!(D_80126942 < -0x3bf)) {
buf[1] = -0x3c0;
} else {
buf[1] = D_80126942;
}
if (D_80126944 < -0x60) {
buf[2] = -0x60;
} else {
buf[2] = D_80126944;
}
func_8017D5C8(param_1, buf);
}
/* Local address-suffixed clones of the PSX MATRIX/SVECTOR layouts (cookbook: match_one's isolated
@@ -3651,7 +3673,14 @@ extern void func_800D0F4C(s32 arg);
INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8017C294", func_8017EFB0);
INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8017C294", func_8017F014);
void func_8017F014(void) {
extern u16 D_80078EAC;
extern u8 D_80078EB0;
extern u8 D_80078EB1;
extern u8 D_80193528[];
*(s32 *)D_80193528 = D_80078EAC * 1440 + D_80078EB1 * 60 + D_80078EB0;
}
INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8017C294", func_8017F064);
+38 -2
View File
@@ -5237,7 +5237,18 @@ void func_8017F9A4(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8017BEBC", func_8017FABC);
extern void (*D_8019AD84[])();
extern s32 func_801659CC(void);
extern void func_8002D4C8(s32 a0, s32 a1);
void func_8017FABC(s32 a0) {
D_8019AD84[*(u16 *)(a0 + 2)]();
if (((a0 != 0) && (*(s16 *)(a0 + 0x70) == 3)) && (func_801659CC() != 0)) {
*(s16 *)(a0 + 0x70) = 0;
func_8002D4C8(0xB6B, 0);
}
}
extern u8 D_801A3AA0[];
extern u8 D_801A3BC0[];
@@ -5285,7 +5296,32 @@ void func_8017FC04(void *arg0) {
}
INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8017BEBC", func_8017FC70);
void func_8017FC70(s32 a0) {
extern u8 D_8019ACB8[];
extern u8 D_801A3560[];
extern u8 D_8019AD2C[];
extern u8 D_8019ACEC[];
extern s32 func_8012C354(s32 a0, s32 a1);
extern s32 func_80143970(s32 a0);
extern void func_8012A828(s32 a0, void *a1);
extern void func_8012B23C(s32 a0);
if (func_8012C354(a0, (s32)D_8019ACB8) != 0) {
*(u8 *)(a0 + 0xC0) = 1;
*(s32 *)(a0 + 0xB4) = -1;
func_80143970(a0);
func_8012A828(a0, D_801A3560);
*(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x2) + 1;
func_8012B23C(a0);
if (*(s16 *)(a0 + 0x70) == 3) {
*(s32 *)(a0 + 0xBC) = (s32)D_8019AD2C;
*(u16 *)(a0 + 0x76) = 0x280;
} else {
*(s32 *)(a0 + 0xBC) = (s32)D_8019ACEC;
}
}
}
INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8017BEBC", func_8017FD14);
+48 -5
View File
@@ -6751,7 +6751,29 @@ void func_80181418(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8017AE2C", func_80181454);
extern void func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
extern void func_8001C214(s32 a0, s32 a1);
extern void func_8012A828(s32 a0, void *a1);
extern void func_8012B23C(s32 a0);
extern u8 D_801BD274[];
extern u8 D_801BAE98[];
void func_80181454(s32 p) {
s32 v;
*(s32 *)(p + 0x20) = v = ((s32 (*)(void))func_8012C1B8)();
if (v == 0) {
func_8012CAE4((void *)p);
} else {
func_8001C214(v, (s32)D_801BD274);
func_8012A828(p, D_801BAE98);
*(u16 *)(p + 2) = 1;
*(s32 *)(*(s32 *)(p + 0x20) + 4) |= 0x80000000;
func_8012B23C(p);
}
}
INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8017AE2C", func_801814DC);
@@ -12539,7 +12561,28 @@ extern void func_8012A828(s32, void*);
}
INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8017AE2C", func_8018A4B4);
#include "common.h"
extern void func_8012A828(s32 a0, void *a1);
extern u8 D_801DFF34;
extern u8 D_801DFB14;
void func_8018A4B4(s32 param_1) {
*(s16 *)(param_1 + 0x2) = 3;
if (*(u16 *)(param_1 + 0x86) & 2) {
*(s16 *)(param_1 + 0x34) = 1;
*(s32 *)(param_1 + 0x1C) = 0x28;
func_8012A828(param_1, &D_801DFF34);
*(u16 *)(param_1 + 0xFE) = 0;
} else {
*(s16 *)(param_1 + 0x34) = 0;
func_8012A828(param_1, &D_801DFB14);
*(s32 *)(param_1 + 0x1C) = 0x19;
*(u16 *)(param_1 + 0x86) |= 2;
}
}
INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8017AE2C", func_8018A538);
@@ -12637,7 +12680,7 @@ extern s32 func_8012BEE8(s32 a0);
extern s32 func_8012C044(s32 a0);
extern s32 func_8018A698(s32 a0);
extern void func_8018A4B4(s16 *a0);
extern void func_8018A4B4();
extern void func_8018A5C4(s32 a0);
extern void func_8018A6F4(s32 a0);
extern void func_8018A484(short *a0);
@@ -12679,7 +12722,7 @@ void func_8018A96C(s32 a0)
extern s32 func_8018A698(s32 a0);
extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2);
extern void func_8018A4B4(s16 *a0);
extern void func_8018A4B4();
extern void func_8018A3D4(s32 a0);
void func_8018AA60(s32 param_1)
@@ -12723,7 +12766,7 @@ extern void func_8012AD80(s32 a0);
extern void func_8018A384(s16 *a0);
extern void func_8018A598(void *a0);
extern s32 func_8012BEE8(s32 a0);
extern void func_8018A4B4(s16 *a0);
extern void func_8018A4B4();
void func_8018AC60(s32 a0) {
func_8012AD80(a0);
+25 -2
View File
@@ -3343,7 +3343,16 @@ void func_801846BC(void) {
INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80183BF8", func_80184700);
INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80183BF8", func_801847E4);
extern u16 D_80126B62;
void func_801847E4(int param_1)
{
if (-0x90 <= (s16)D_80126B62) {
*(unsigned int *)(param_1 + 0x1c) = 0x5a;
*(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) + 1;
}
return;
}
INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80183BF8", func_80184814);
@@ -3397,7 +3406,21 @@ void func_80184A78(s32 a0)
}
INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80183BF8", func_80184B00);
extern void func_8012AD80(s32 a0);
extern void func_8012C218(void *);
void func_80184B00(s32 arg0) {
s32 v = *(s32 *)(arg0 + 0x1C) - 1;
*(s32 *)(arg0 + 0x1C) = v;
if (v == 0) {
((void (*)(void))func_8012C218)();
} else {
func_8012AD80(arg0);
*(u16 *)(*(s32 *)(arg0 + 0x20) + 0x18) += 0x80;
*(u16 *)(*(s32 *)(arg0 + 0x20) + 0x1A) += 0x80;
}
}
/* func_80184B80 — ov_SC02_027_jr_8017AE2C (76 ins)
+50 -3
View File
@@ -4813,7 +4813,21 @@ void func_80181308(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8017D898", func_801813E0);
extern void (*D_801A4680[])(void);
extern void func_80182000(s32 a0);
extern void func_8012F214(s32 a0, s32 a1, s32 a2);
extern s32 D_801A4620[];
void func_801813E0(s32 *arg0) {
D_801A4680[*(u16 *)((s32)arg0 + 2)]();
if (*(s32 *)((s32)arg0 + 0xE4) != 0) {
func_80182000((s32)arg0);
}
if ((*(u16 *)arg0 != 0) && (*(s32 *)((s32)arg0 + 0xD4) != 0)) {
func_8012F214((s32)arg0, (s32)D_801A4620, *(s32 *)((s32)arg0 + 0xD4) + 8);
}
}
#include "common.h"
@@ -4896,7 +4910,26 @@ void func_80181470(s32 a0) {
INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8017D898", func_801815FC);
INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8017D898", func_8018164C);
extern s32 rand(void);
extern s32 func_8004787C(s32 a0);
extern void func_80182124(s32 arg0);
void func_8018164C(s32 a0) {
s32 ent;
*(s16 *)(a0 + 0x100) = ((u32)func_8004787C(*(s32 *)(a0 + 0x1C) << 4) >> 5) & 0xFF;
*(s16 *)(a0 + 0xFE) = *(s16 *)(a0 + 0x100);
*(s16 *)(a0 + 0xFC) = *(s16 *)(a0 + 0xFE);
*(s32 *)(a0 + 0x1C) += 1;
if (*(s32 *)(a0 + 0x1C) >= 0x41) {
ent = *(s32 *)(a0 + 0x78);
*(s16 *)(a0 + 2) = 3;
*(s16 *)(a0 + 0x5C) = *(u16 *)(ent + 2);
*(s32 *)(a0 + 0x1C) = rand();
func_80182124(*(s32 *)(a0 + 0xD4));
}
}
void func_801816C8(void *a0) {
s32 r;
@@ -5227,7 +5260,21 @@ void func_80181DC0(void *arg0) {
INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8017D898", func_80181ED4);
INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8017D898", func_80181F88);
void func_80181F88(s32 param_1, s32 param_2) {
u8 sp10[0x20];
s32 sp30[3];
*(u16 *)(param_1 + 0x106) =
*(u16 *)(param_1 + 0x106) +
func_8012B608(*(s16 *)(param_1 + 0x106), func_8012B864(param_1),
*(s32 *)(param_1 + 0xE8));
sp30[1] = 0;
sp30[0] = 0;
sp30[2] = param_2;
func_80049CAC(param_1 + 0x104, sp10);
func_800484EC(sp10, sp30, param_1 + 0x10);
}
INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8017D898", func_80182000);
+28 -1
View File
@@ -5367,7 +5367,34 @@ void func_80180808(s32 param_1) {
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_801808D8);
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_801809A0);
void func_801809A0(s32 arg0) {
extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3);
extern s32 func_80143BDC(u16 *a0);
s32 i;
s32 v;
s32 hit;
u16 pos[3];
u32 buf[2];
unsigned int *p;
if (*(s16 *)(arg0 + 0xAA) <= 0) {
i = 0;
p = buf;
for (; i < 20; i++) {
func_8012B0B4(p, rand() % 4096, 0x40);
v = *(s32 *)buf;
pos[0] = *(u16 *)(arg0 + 0x6) + v;
pos[1] = *(u16 *)(arg0 + 0xA) - 0x60;
pos[2] = *(u16 *)(arg0 + 0xE) + (v >> 16);
hit = func_80143BDC(pos);
if (hit != 0) {
*(u8 *)(*(s32 *)(hit + 0xCC) + 0x27) = 0x5B;
}
}
func_8002D4C8(0x521, 0);
}
}
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_80180A78);
+66 -3
View File
@@ -4493,7 +4493,24 @@ void func_80181580(s32 arg0) {
INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8017AE2C", func_80181618);
INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8017AE2C", func_80181674);
void func_80181674(void *a0)
{
extern u8 D_80197B60[];
extern s32 func_8012BEE8(s32 a0);
extern void func_80181864(void *a0, void *a1);
s16 idx;
u8 *ptr;
idx = *(s16 *)((s32)a0 + 0x70);
ptr = &D_80197B60[idx * 64];
if (func_8012BEE8((s32)a0) != 0) {
func_8012AD50(a0);
} else {
func_80181864(a0, ptr);
}
}
void func_801816D8(void *a0)
{
@@ -4543,7 +4560,40 @@ INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8017AE2C", func_801819A
INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8017AE2C", func_801819F4);
INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8017AE2C", func_80181A5C);
extern s32 func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
extern void func_8001CA1C(s32 a0, s32 a1);
extern void func_8012A828(s32 a0, s32 a1);
extern u8 D_80186364[];
extern void (*D_80186424)(void);
extern s32 D_801864AC;
void func_80181A5C(s32 a0) {
s32 s0;
if ((func_80029178(0x11C) & 0xFF) != 0) {
func_8012CAE4((void *)a0);
return;
}
s0 = func_8012C1B8();
if (s0 == 0) {
func_8012CAE4((void *)a0);
return;
}
*(s32 *)(a0 + 0x20) = s0;
func_8001CA1C(s0, (s32)D_80186364);
*(u16 *)(s0 + 0x1C) = 0x4000;
*(u16 *)(s0 + 0x1A) = 0x4000;
*(u16 *)(s0 + 0x18) = 0x4000;
*(s32 *)(s0 + 0x4) |= 0x50000000;
*(u16 *)(s0 + 0x2C) |= 0x10;
*(s32 *)(a0 + 0x58) = (s32)&D_801864AC | 0x40000000 | 0x20000000;
*(u16 *)(a0 + 0x5C) = 0x8000;
*(u16 *)(a0 + 2) += 1;
func_8012A828(a0, (s32)&D_80186424);
*(s16 *)(a0 + 0xAE) = -9;
}
INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8017AE2C", func_80181B44);
@@ -4716,7 +4766,20 @@ s32 func_80182280(void) {
}
INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8017AE2C", func_801822A0);
void func_801822A0(void) {
extern void func_8013B6A0(s32 arg0, s32 arg1, s32 arg2);
extern s32 D_80197CC4;
extern u8 D_80186588[];
if (D_80197CC4 == 0) {
func_8013B6A0(0, (s32)&D_80186588[0], 0x2E0);
func_8013B6A0(1, (s32)&D_80186588[8], 0x2E0);
func_8013B6A0(2, (s32)&D_80186588[16], 0x2E0);
func_8013B6A0(3, (s32)&D_80186588[24], 0x2E0);
D_80197CC4 += 1;
}
}
extern void func_8013B7AC(void);
void func_8018232C(void) {
+19 -1
View File
@@ -3476,7 +3476,25 @@ s32 func_8017DCC0(s32 arg0)
}
INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8017C24C", func_8017DD88);
void func_8017DD88(s32 a0) {
extern void func_8012A828(s32 a0, void *a1);
extern s32 func_8012C354(s32 a0, void *a1);
extern void func_8001D0E8(s32 a0, s32 a1, s32 a2);
extern u8 D_801970C0[];
extern u8 D_80197100;
if (func_8012C354(a0, D_801970C0) != 0) {
func_8001D0E8(*(s32 *)(a0 + 0x20), 0xC8, 0x168);
*(u8 *)(a0 + 0xC0) = 1;
*(s32 *)(a0 + 0xB4) = -1;
*(s16 *)(a0 + 0xAE) = -1;
*(s16 *)(a0 + 2) = 1;
*(u8 *)(a0 + 0x75) = 0;
func_8012A828(a0, &D_80197100);
*(s32 *)(a0 + 0x1C) = 0xA;
}
}
extern s16 D_80197090;
+74 -2
View File
@@ -3997,7 +3997,23 @@ void func_8017EBC4(Obj8017EBC4 *a0) {
}
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_8017EDA8);
extern s32 func_8016F1AC(void);
extern void func_801746DC(void);
extern s32 func_80178B18(s32 param_1, s32 param_2);
extern void func_80016450(s32 a0, s32 a1);
extern void (*D_80190534[])(void);
void func_8017EDA8(s32 param_1) {
if (func_8016F1AC() == 0) {
func_801746DC();
func_80178B18(param_1, (s32)&D_80190534);
*(s16 *)(param_1 + 2) = 2;
*(s16 *)(param_1 + 0x34) = 0;
*(s32 *)(param_1 + 0x1C) = 3;
}
func_80016450(0xFF, 0);
}
void func_8017EE10(s32 param_1) {
extern void func_8012BEE8(void);
@@ -4160,7 +4176,63 @@ void func_8017FE58(void *fp, s32 count)
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_80180030);
#include "common.h"
extern void *func_80185C6C(); /* TU idiom: calls go through a (s32,s32) fn-ptr cast */
#define CALL_80185C6C ((void *(*)(s32, s32))func_80185C6C)
extern void func_8012F214(s32 a0, s32 a1, s32 a2);
extern s32 func_80013478(s32 a0, s32 a1);
extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2);
extern u8 D_80126B5C;
extern void (*D_80190218[])(void);
extern s32 D_801DDB2C[5];
/* §37/§124 asm-label alias: the TU's own caller decl at line 4100 says
* `extern void func_80180030(void *a0, s32 a1);` but the target PROVABLY returns
* a value (count==0 path `addu $v0,$zero,$zero` @80180100 + final
* `sltu $v0,$zero,$v0` @80180164). A void definition DCEs those (LENGTH-DRIFT -3,
* 87 ins — byte-tested). The alias defines under a different C identifier and binds
* the emitted symbol back to func_80180030; the caller discards the return, so it is
* byte-neutral for the caller (§30#2 / §136f-2 in-TU precedent aF8018B20C). */
s32 aF80180030(void *a0, s32 a1) __asm__("func_80180030");
s32 aF80180030(void *a0, s32 a1)
{
u8 idxArr[4];
s32 valArr[4];
s8 buf[8];
void *cur;
s32 ptr;
s32 count;
s32 i;
s32 val;
s32 bestVal;
s32 bestSlot;
count = 0;
cur = CALL_80185C6C(a1, 0);
ptr = D_801DDB2C[a1];
for (i = 0; i < 4; i++, cur = (void *)((u8 *)cur + 8)) {
if (!(*(u8 *)((u8 *)cur + 6) & 0x80)) {
func_8012F214(ptr, (s32)&D_80190218[(*(u8 *)((u8 *)cur + 6) & 0xF) * 2], (s32)buf);
valArr[count] = func_80013478((s32)&D_80126B5C, (s32)buf);
idxArr[count] = i;
count++;
}
}
if (count == 0) {
return 0;
}
bestVal = valArr[0];
bestSlot = 0;
for (i = 1; i < count; i++) {
if (valArr[i] < bestVal) {
bestVal = valArr[i];
bestSlot = i;
}
}
return func_8012C658(0x2EF, idxArr[bestSlot], D_801DDB2C[a1]) != 0;
}
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_80180198);