feat(decomp): ox wave cd overlays — 18 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 23:00:38 -06:00
parent 88da1eb03b
commit 488e009bd1
12 changed files with 373 additions and 22 deletions
+21 -1
View File
@@ -3351,7 +3351,27 @@ void func_8017D2F8(void *a0, s32 a1) {
}
INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8017BE9C", func_8017D364);
extern void func_800139C8(s32 a0, void *a1, void *a2);
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 u16 D_800B99DA;
extern u8 D_801821C8[];
void func_8017D364(int param_1)
{
u64 vec;
u32 out;
func_800139C8(*(s16 *)(*(s32 *)(param_1 + 0x20) + 0x12), D_801821C8, &vec);
func_80013E94(&vec, &out);
out |= 0x80000000;
if ((D_800B99DA & 3) == 0) {
func_80146A6C(6, (void *)param_1, *(s16 *)(param_1 + 6),
(s16)(*(u16 *)(param_1 + 0xA) - 0x40),
*(s16 *)(param_1 + 0xE), out, 0);
}
}
extern void func_8016EE40(s32 a0, s32 a1, s32 a2);
void func_8017D3FC(void) {
+117 -2
View File
@@ -4249,7 +4249,90 @@ DEFINE_func_801863E8() /* dedup: shared engine-core @0x801863E8 (src/shared) */
DEFINE_func_80186424() /* dedup: shared engine-core @0x80186424 (src/shared) */
INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8018173C", func_80186530);
void func_80186530(s32 self)
{
extern void func_80186424(s32 a0);
extern void func_8002D4C8(s32 a0, s32 a1);
extern s32 func_8012BD14(s32 a0);
extern void func_8016EDEC(s32 a0, s32 a1, s32 a2);
extern void func_8005C2C8(s32 a0, s32 a1);
extern void func_8012C218(void *a0);
extern void func_801827C0(void *a0);
extern s32 D_8018F314;
extern s32 D_8018F318;
extern s32 D_801270C8;
extern s32 D_801270D4;
s32 v1;
s32 v0;
s32 *a0;
s32 t;
s32 a1;
func_80186424(self);
v1 = *(s32 *)(self + 0x20);
*(u16 *)(v1 + 0x12) += 0x10;
a1 = *(s32 *)(self + 0xCC);
*(u16 *)(a1 + 8) = *(u16 *)(self + 6);
*(u16 *)(a1 + 10) = *(u16 *)(self + 10);
t = *(u16 *)(self + 0xE);
*(u16 *)(a1 + 0x2C) |= 0x10;
*(u16 *)(a1 + 0xC) = t;
v1 = D_8018F318 * *(s16 *)(self + 0xFC);
if (v1 < 0) {
v1 += 15;
}
v1 = (v1 >> 4) + D_8018F314;
*(s16 *)(a1 + 0x1C) = v1;
*(s16 *)(a1 + 0x1A) = v1;
*(s16 *)(a1 + 0x18) = v1;
a0 = &D_801270C8;
if (*(s32 *)(self + 0xDC) != *a0) {
*(s32 *)(self + 0xDC) = *a0;
*(s32 *)(self + 0xE0) = 8;
}
v0 = *(s32 *)(self + 0xE0);
if (v0 != 0) {
*(s32 *)(self + 0xE0) = v0 - 1;
} else if (*a0 != 0) {
if (*(s16 *)(self + 0xFE) == 0) {
func_8002D4C8(0x4C6, 0);
func_8002D4C8(0x4CE, 0);
}
*(s16 *)(self + 0xFE) = 1;
*(s32 *)(*(s32 *)(self + 0x20) + 4) |= 0x80000000;
*(s16 *)(self + 0x5C) = 0;
if (func_8012BD14(self) < 0x901) {
((void (*)(void *, s32))func_8016EDEC)(func_801827C0, 0x1000000);
D_801270D4 = 1;
func_8005C2C8(*(s32 *)(self + 0xCC), 0x84);
func_8012C218((void *)self);
return;
}
} else {
if (*(s16 *)(self + 0xFE) == 1) {
func_8002D4C8(0x4C7, 0);
}
*(s16 *)(self + 0xFE) = 0;
*(s16 *)(self + 0x5C) = 0x800;
*(s32 *)(*(s32 *)(self + 0x20) + 4) &= 0x7FFFFFFF;
}
v0 = *(s32 *)(*(s32 *)(self + 0x20) + 4);
if (v0 < 0) {
v0 = *(u16 *)(self + 0xFC) - 1;
*(s16 *)(self + 0xFC) = v0;
if ((s16)v0 < 0) {
*(s16 *)(self + 0xFC) = 0;
}
} else {
v0 = *(u16 *)(self + 0xFC) + 1;
*(s16 *)(self + 0xFC) = v0;
if ((s16)v0 >= 0x11) {
*(s16 *)(self + 0xFC) = 0x10;
}
}
}
DEFINE_func_80186764() /* dedup: shared engine-core @0x80186764 (src/shared) */
@@ -5206,7 +5289,39 @@ void func_80189A00(void *param_1) {
}
INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8018173C", func_80189A70);
typedef struct {
s16 start;
s16 end;
} Range_80189A70;
extern u8 D_8018F71C[];
extern s16 D_8018F71E;
extern void *func_80189DB8();
void func_80189A70(s32 *a0)
{
s32 v;
s32 t;
s32 c;
Range_80189A70 range;
v = (s16)(*(u16 *)((s32)a0 + 0x100) -= 0x10);
if (v < 0) {
D_8018F71E = 1;
func_8012AD44(a0, 0);
return;
}
t = v << 8;
if (v >= 0x20) {
c = v | 0x202000;
} else {
c = v | ((v << 16) | t);
}
range.start = 0;
range.end = 0x50;
func_80189B1C(a0, &range, D_8018F71C, func_80189DB8(a0, c));
}
INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8018173C", func_80189B1C);
+19 -1
View File
@@ -7951,7 +7951,25 @@ void func_80189234(void) {
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_8018923C);
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_801892E0);
void func_801892E0(s32 arg0) {
s16 var;
s16 t;
s16 idx;
s32 s0;
extern s32 D_80190748[];
s0 = arg0;
var = *(u16 *)(s0 + 0xFC);
t = var >> 1;
idx = t % 6;
func_800183E0(D_80190748[idx]);
*(u16 *)(s0 + 6) -= 8;
if (--*(s32 *)(s0 + 0x1C) == 0) {
*(u16 *)(s0 + 2) = 2;
}
}
extern void func_800183E0(s32 a0);
extern s32 func_8012C588(s32 a0, s32 a1);
+23 -1
View File
@@ -4999,7 +4999,29 @@ void func_8017FCBC(void) {
INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8017AE2C", func_80180054);
INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8017AE2C", func_801801E8);
extern s16 D_80126CB4;
s32 func_801801E8(void *arg0, s32 arg1) {
void *p;
s32 best;
s32 lim;
s32 w;
s32 val;
best = 0xFFFF;
p = arg0;
while (*(s16 *)((u8 *)p + 6) == 0) {
lim = (s16)arg1;
w = func_80013294(&D_80126CB4, p);
val = w & 0xFFFF;
if (val < lim && (u32)val < (u32)(u16)best) {
best = w;
}
p = (u8 *)p + 8;
}
return best & 0xFFFF;
}
extern void (*D_80186884[])(void);
+42 -1
View File
@@ -5374,7 +5374,48 @@ s32 func_80182208(s32 a0, s16 a1) {
INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8017D898", func_80182288);
INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8017D898", func_8018232C);
extern void func_801292C8(u8 *a0);
void func_8018232C(int param_1) {
s32 s1;
s32 r;
s16 rs;
u32 prod;
u32 t;
u8 b;
s1 = *(s32 *)(param_1 + 0x20);
if (*(u16 *)(param_1 + 2) == 0) {
r = func_8004787C(*(s32 *)(param_1 + 0x1C) << 6);
t = r * 3;
t += t >> 31;
t >>= 1;
*(s16 *)(s1 + 0x18) = t;
*(s16 *)(s1 + 0x1A) = t;
*(s32 *)(param_1 + 0x1C) += 1;
if (*(s32 *)(param_1 + 0x1C) >= 0x10) {
*(u16 *)(param_1 + 2) += 1;
*(s32 *)(param_1 + 0x1C) = *(s32 *)(param_1 + 0x1C) * 2 - 1;
}
} else {
rs = func_8004787C(*(s32 *)(param_1 + 0x1C) << 5);
prod = *(s32 *)(param_1 + 0x2C) * rs;
t = rs * 3;
t += t >> 31;
t >>= 1;
*(s16 *)(s1 + 0x18) = t;
*(s16 *)(s1 + 0x1A) = t;
b = prod >> 12;
*(s8 *)(s1 + 0x24) = b;
*(s8 *)(s1 + 0x25) = b;
*(s8 *)(s1 + 0x26) = b;
*(s32 *)(param_1 + 0x1C) -= 1;
if (*(s32 *)(param_1 + 0x1C) == 0) {
func_801292C8((u8 *)param_1);
}
}
}
/* func_80182434 — "spawn a paired effect entity above/below the actor" template
+46 -2
View File
@@ -6053,7 +6053,33 @@ void func_8017D5C4(void *a0) {
void func_8017D690(void) {
}
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_801789AC", func_8017D698);
#include "common.h"
extern void func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
extern void func_8001C2C4(s32 a0);
extern u8 D_801860C8[];
void func_8017D698(s32 a0) {
s32 r;
s32 v1;
if (*(u16 *)(a0 + 0x2) == 0) {
r = ((s32 (*)(void))func_8012C1B8)();
*(s32 *)(a0 + 0x20) = r;
if (r == 0) {
func_8012CAE4((void *)a0);
return;
}
((void (*)(s32))func_8001C2C4)(r);
*(s16 *)(a0 + 0x5C) = 0x40;
*(u8 *)(a0 + 0x75) = 0x4;
*(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x2) + 1;
v1 = *(s16 *)(a0 + 0x70) << 4;
*(s32 *)(a0 + 0x58) = (s32)&D_801860C8 + v1;
}
}
s32 func_8017D728(void) {
@@ -8091,7 +8117,25 @@ void func_801805BC(void *a0) {
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_801789AC", func_801805F8);
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_801789AC", func_8018065C);
void func_8018065C(void *a0) {
extern s32 D_801151D4;
extern void (*D_80197554[])(void *);
s16 in[8];
s32 out[2];
s32 s0 = (s32)a0;
s32 v1 = D_801151D4;
s32 t;
in[1] = *(s32 *)(v1 + 0x5C);
in[3] = *(s32 *)(v1 + 0x60);
in[5] = *(s32 *)(v1 + 0x64);
func_8012B77C((s32)out, s0 + 4, (s32)in);
t = out[0];
*(s16 *)(*(s32 *)(s0 + 0x20) + 0x10) = t;
*(s16 *)(*(s32 *)(s0 + 0x20) + 0x12) = t >> 16;
D_80197554[*(u16 *)(s0 + 2)](a0);
}
extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2);
+1 -1
View File
@@ -4621,7 +4621,7 @@ extern void func_800D0C48(s32 a0); /* TU:1469 */
extern s32 func_8014CB2C(void); /* TU:560 */
extern void func_8012A018(s32 a, s32 b); /* TU:2412 */
extern void func_801842DC(s32 a0); /* TU:4023 INCLUDE_ASM (no decl) */
extern s32 func_80183830(void); /* TU:3930 INCLUDE_ASM (no decl) */
extern s32 func_80183830(); /* TU:3930 INCLUDE_ASM (no decl) */
extern void func_80029124(s32, s32); /* TU:50 */
extern s32 func_8016F0AC(); /* TU:1945 */
extern void func_8012C588(s32 a0, s32 a1); /* not in TU */
+1 -1
View File
@@ -4632,7 +4632,7 @@ extern void func_800D0C48(s32 a0); /* TU:1469 */
extern s32 func_8014CB2C(void); /* TU:560 */
extern void func_8012A018(s32 a, s32 b); /* TU:2412 */
extern void func_801842DC(s32 a0); /* TU:4023 INCLUDE_ASM (no decl) */
extern s32 func_80183830(void); /* TU:3930 INCLUDE_ASM (no decl) */
extern s32 func_80183830(); /* TU:3930 INCLUDE_ASM (no decl) */
extern void func_80029124(s32, s32); /* TU:50 */
extern s32 func_8016F0AC(); /* TU:1945 */
extern void func_8012C588(s32 a0, s32 a1); /* not in TU */
+6 -1
View File
@@ -8318,7 +8318,12 @@ default_case:
void func_801873D0(void) {
}
INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_801873D8);
extern void func_8012AD44(s32 *a0, s16 a1);
void func_801873D8(s32 arg0) {
func_8012AD44((s32 *)arg0, 3);
}
#include "common.h"
+82 -3
View File
@@ -5107,7 +5107,23 @@ extern s32 func_80029178(s32 arg);
INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8017AE2C", func_8017EE10);
INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8017AE2C", func_8017EEC8);
extern s32 func_801848AC(s32 arg0, s32 arg1);
extern s16 func_80184B44(void);
void func_8017EEC8(void *a0) {
s32 ok;
if (((s32 (*)(void))func_80184B44)() == 1) {
ok = 0;
} else {
ok = func_801848AC(9, 0x11) != 0;
}
if (ok != 0) {
func_8017E7EC(a0);
}
}
INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8017AE2C", func_8017EF20);
@@ -6865,7 +6881,52 @@ void func_801818A0(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8017AE2C", func_8018193C);
extern void func_8012A828(s32, s32);
extern void func_801849B8(s32*, s32);
void func_8018193C(void *a0) {
/* [T51] shadow: file-scope `extern s16 ((s32 (*)(void))func_80184B44)(void)` (this TU, near
func_8017FA58) is in scope at this point and would sign-extend $v0 with
an sll after the jal; the target has none. Block-scope int-return decl
restores the implicit-int call shape (cf. func_80181364's cast). */
extern s16 func_80184B44(void);
extern s16 D_801918BC;
extern s16 D_801918B4;
extern short D_801C0CFC;
extern short D_801918AC;
extern s32 D_801D5AFC;
extern s32 D_801D2C58;
extern s32 D_801ECE80;
extern s32 func_80181A4C(void*);
void *v1;
if (((s32 (*)(void))func_80184B44)() != 0) {
func_8012CAE4(a0);
return;
}
if (func_801844BC(a0, &D_801918BC) == 0) {
return;
}
func_8001C97C((s32)&D_801D5AFC);
D_801ECE80 = D_801D2C58;
D_801D2C58 = D_801D5AFC;
if (func_801848AC(7, 0xE) != 0) {
*(s16 *)((char *)a0 + 0x2) = 3;
func_8012E8E0((s32)a0, (s32)&D_801918B4);
func_8012E88C((s32)a0);
((void (*)(s32 *, s32))func_8012A828)((s32 *)a0, (s32)&D_801C0CFC);
func_80184990((s32)a0);
} else {
*(s16 *)((char *)a0 + 0x2) = 1;
((void (*)(s32, s32))func_801849B8)((int)a0, (int)&D_801918AC);
}
v1 = *(void **)((char *)a0 + 0x68);
*(s16 *)((char *)v1 + 0xC) = 0x7FFF;
*(s32 *)((char *)a0 + 0xD4) = func_801788B8((s32)a0, (s32)&func_80181A4C);
}
extern s32 func_8012BD14(s32 a0);
extern s32 func_8012E544(s32 a0);
@@ -7223,7 +7284,25 @@ void func_80182410(int param_1)
}
INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8017AE2C", func_80182448);
extern void func_80184BD4(s32, s32, s32, s32);
extern s32 func_801848AC(s32 arg0, s32 arg1);
extern s32 func_80184CA4(s32);
void func_80182448(s32 a0) {
extern s32 D_801B6578;
extern void func_80181F60(s32);
if (func_80184CA4(a0) == 0) {
return;
}
if (func_801848AC(9, 0x11) == 0) {
((void (*)(void *))func_80181F60)((void *)a0);
} else {
func_80184BD4(a0, (s32)&D_801B6578, 0, 0x40);
}
}
extern int func_80178970(void);
extern s32 D_801B9C0C;
+9 -2
View File
@@ -3356,7 +3356,14 @@ void func_8017BF58(void *a0) {
DEFINE_func_8017BF98() /* dedup: shared engine-core @0x8017BF98 (src/shared) */
INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8017AE2C", func_8017BFA0);
extern void func_80174684(void *);
extern void func_8017BFC8(void *);
s32 func_8017BFA0(void)
{
func_80174684((void *)func_8017BFC8);
}
extern void (*D_8018BC80[])(void);
@@ -8358,7 +8365,7 @@ extern void func_8017BEBC(void);
}
extern s32 func_8017BFA0(void);
extern s32 func_8017BFA0();
void func_801849C8(void) {
func_8017BFA0();
}
+6 -6
View File
@@ -3238,7 +3238,7 @@
}
#define DEFINE_func_801890D8() \
extern void func_8017BFA0(void); \
extern void func_8017BFA0(); \
void func_801890D8(void) { \
func_8017BFA0(); \
}
@@ -50947,7 +50947,7 @@
}
#define DEFINE_func_801828C4() \
extern void func_8017BFA0(void); \
extern void func_8017BFA0(); \
void func_801828C4(void) { \
func_8017BFA0(); \
}
@@ -56458,7 +56458,7 @@
extern void func_80182704(void *a0); \
extern void func_8017BEBC(void); \
extern void func_801828A4(void); \
extern void func_8017BFA0(void); \
extern void func_8017BFA0(); \
extern void func_801828C4(void); \
extern void func_800D0C48(s32 arg); \
extern void func_801828E4(void); \
@@ -98636,7 +98636,7 @@
}
#define DEFINE_func_801890D8() \
extern void func_8017BFA0(void); \
extern void func_8017BFA0(); \
void func_801890D8(void) { \
func_8017BFA0(); \
}
@@ -146345,7 +146345,7 @@
}
#define DEFINE_func_801828C4() \
extern void func_8017BFA0(void); \
extern void func_8017BFA0(); \
void func_801828C4(void) { \
func_8017BFA0(); \
}
@@ -151856,7 +151856,7 @@
extern void func_80182704(void *a0); \
extern void func_8017BEBC(void); \
extern void func_801828A4(void); \
extern void func_8017BFA0(void); \
extern void func_8017BFA0(); \
extern void func_801828C4(void); \
extern void func_800D0C48(s32 arg); \
extern void func_801828E4(void); \