feat(decomp): ox wave ec overlays — 10 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 16:18:25 -06:00
parent 274932d209
commit 2b3a2674cf
13 changed files with 253 additions and 19 deletions
+22 -3
View File
@@ -5359,7 +5359,7 @@ typedef struct {
extern s32 func_8012BEE8(s32 a0);
extern s32 func_8012AD50(void *a0);
extern void *func_80189DB8(void *a0, s32 color);
extern u32 func_80189DB8();
extern void func_80189B1C(void *a0, Range_80189B1C *a1, void *a2, void *a3);
extern u8 D_8018F71C[];
@@ -5384,7 +5384,7 @@ typedef struct {
extern u8 D_8018F71C[];
extern s16 D_8018F71E;
extern void *func_80189DB8();
extern u32 func_80189DB8();
void func_80189A70(s32 *a0)
{
@@ -5417,7 +5417,26 @@ INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8018173C", func_80189C6
INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8018173C", func_80189D10);
INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8018173C", func_80189DB8);
extern u16 D_800B99DA;
u32 func_80189DB8(param_1, param_2)
u32 param_1;
u32 param_2;
{
if (D_800B99DA & 1) {
u8 b[4];
*(u32*)b = param_2;
b[0] = (u8)(b[0] - 8);
if (b[0] >= 0xF8) b[0] = 0;
b[1] = (u8)(b[1] - 8);
if (b[1] >= 0xF8) b[1] = 0;
b[2] = (u8)(b[2] - 8);
if (b[2] >= 0xF8) b[2] = 0;
param_2 = *(u32*)b;
}
return param_2;
}
// @class: struct
+18 -2
View File
@@ -8904,7 +8904,23 @@ void func_8018838C(void *a0) {
}
INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8017DF34", func_801883A0);
extern void D_801E9CCC;
extern void func_8012A828(s32 a0, void *a1);
s32 func_801883A0(a0)
void *a0;
{
u16 v;
*(u16 *)((s32)a0 + 2) = 3;
func_8012A828((s32)a0, &D_801E9CCC);
v = *(u16 *)(*(s32 *)((s32)a0 + 0x78) + 2);
*(u16 *)((s32)a0 + 0x5E) = 0;
*(u16 *)((s32)a0 + 0xDC) = 0;
*(s32 *)((s32)a0 + 0x1C) = 0x3C;
*(u16 *)((s32)a0 + 0xFE) = 0;
*(u16 *)((s32)a0 + 0x5C) = v;
}
extern s32 (*D_801E2130[])(void);
extern s32 func_8012C044(s32 a0);
@@ -9047,7 +9063,7 @@ void func_8018875C(s32 a0) {
extern s32 func_8012BEE8(s32 arg);
extern void func_801883A0(s32 *a0);
extern s32 func_801883A0();
void func_801887C8(s32 *a0) {
if (func_8012BEE8((s32)a0)) {
func_801883A0(a0);
+11 -1
View File
@@ -5032,7 +5032,17 @@ extern void func_8012AD44(s32 *a0, s16 a1);
}
INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8017D898", func_801825D8);
extern void func_8002D4C8(s32 a0, s32 a1);
extern void func_8012AD44(s32 *a0, s16 a1);
s32 func_801825D8(arg0)
void *arg0;
{
*(s32 *)((char *)arg0 + 0x10) = 0x18000;
func_8012AD44(arg0, 2);
func_8002D4C8(0x675, 0);
}
extern void (*D_8018B99C)(void *);
+1 -1
View File
@@ -4678,7 +4678,7 @@ extern void func_8012E8E0(s32, s32);
extern void func_8012E8A8(u8 *a0);
extern s32 func_80183158(s32 arg0, s32 arg1);
extern s32 func_801788B8(s32 arg0, s32 arg1);
extern void func_8018118C();
extern s32 func_8018118C();
void func_80180F1C(void *a0) {
+17 -1
View File
@@ -3407,7 +3407,23 @@ void func_8017EBF4(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8017D5C0", func_8017EC64);
extern s32 D_801151D4;
s32 func_8017EC64(arg0)
s32 arg0;
{
s32 *ptr = (s32 *) D_801151D4;
*(s32 *) (arg0 + 0x204) += 0x30000;
ptr[4] -= *(s16 *) (arg0 + 0x206);
ptr[5] = ptr[4];
if (ptr[4] < 0x12C) {
ptr[4] = 0x12C;
ptr[5] = 0x12C;
}
return ptr[4];
}
extern void (*D_80182FB4[])(void);
+17 -1
View File
@@ -13542,7 +13542,23 @@ void func_8018B210(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8017AE2C", func_8018B224);
extern void D_801E7D24;
extern void func_8012A828(s32 a0, void *a1);
s32 func_8018B224(a0)
void *a0;
{
u16 v;
*(u16 *)((s32)a0 + 2) = 3;
func_8012A828((s32)a0, &D_801E7D24);
v = *(u16 *)(*(s32 *)((s32)a0 + 0x78) + 2);
*(u16 *)((s32)a0 + 0x5E) = 0;
*(u16 *)((s32)a0 + 0xDC) = 0;
*(s32 *)((s32)a0 + 0x1C) = 0x3C;
*(u16 *)((s32)a0 + 0xFE) = 0;
*(u16 *)((s32)a0 + 0x5C) = v;
}
extern s32 (*D_801E0188[])(void);
extern s32 func_8012C044(s32 a0);
+15 -1
View File
@@ -4345,7 +4345,21 @@ extern s32 func_80012DBC(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
}
INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8017AE2C", func_8017E240);
void func_8017E240(void* a0)
{
s32 temp;
if (func_801489E8(a0) != 0) {
temp = *(u16 *)(a0 + 0x132) + 0x71;
} else {
if (func_80148A48(a0) == 0) {
return;
}
temp = *(u16 *)(a0 + 0x132) - 0x71;
}
*(u16 *)(a0 + 0x132) = temp & 0xFFF;
}
extern void func_8016EE40(s32 a0, s32 a1, s32 a2);
extern M2C_UNK D_8018592C;
+25 -2
View File
@@ -7088,7 +7088,7 @@ void func_80183084(void *a0) {
}
extern u16 func_8018330C(void *a0);
extern s32 func_8018330C();
void func_80183284(s32 a0)
{
@@ -7106,7 +7106,30 @@ void func_80183284(s32 a0)
}
INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8017CA80", func_8018330C);
extern void func_80015978(s32 a0, s32 *a1);
extern void func_8012EFB8(s32 a0);
s32 func_8018330C(a0)
s32 a0;
{
extern void func_8012EFB8(s32 a0);
s32 sp10;
s32 v1;
func_80015978(a0 + 4, &sp10);
if ((((s32 (*)(s32, s32))func_8012EFB8)((s32)&sp10, (s32)&sp10) & 0xFFFFEFFF) != 0) {
v1 = 1;
} else {
v1 = (*(s16 *)&sp10 * 64) / 160 + 0x40;
}
if (v1 <= 0) {
v1 = 1;
} else if (v1 >= 0x80) {
v1 = 0x7F;
}
return v1;
}
extern void (*D_8019B2AC[])(void);
+24 -1
View File
@@ -7601,7 +7601,30 @@ void func_80183AEC(s32 a0)
}
INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8017C294", func_80183B74);
extern void func_80015978(s32 a0, s32 *a1);
extern void func_8012EFB8(s32 a0);
s32 func_80183B74(a0)
s32 a0;
{
extern void func_8012EFB8(s32 a0);
s32 sp10;
s32 v1;
func_80015978(a0 + 4, &sp10);
if ((((s32 (*)(s32, s32))func_8012EFB8)((s32)&sp10, (s32)&sp10) & 0xFFFFEFFF) != 0) {
v1 = 1;
} else {
v1 = (*(s16 *)&sp10 * 64) / 160 + 0x40;
}
if (v1 <= 0) {
v1 = 1;
} else if (v1 >= 0x80) {
v1 = 0x7F;
}
return v1;
}
extern void (*D_801C20DC[])(void);
+1 -1
View File
@@ -4793,7 +4793,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(); /* TU:3930 INCLUDE_ASM (no decl) */
extern s32 func_80183830(void); /* 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 */
+33 -2
View File
@@ -3712,7 +3712,7 @@ extern void func_8012CAE4(void *a0);
extern void func_8012E88C(s32 a0);
extern void func_8012E8A8(u8 *a0);
extern void func_8012E8E0(s32 a0, s32 a1);
extern void func_8017F68C();
extern s32 func_8017F68C();
void func_8017F41C(a0)
void *a0;
@@ -3790,7 +3790,38 @@ void func_8017F62C(void *arg0) {
}
INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8017D604", func_8017F68C);
extern s32 func_8012BD14(s32 a0);
extern s32 func_80178BF8();
extern void func_80172710(void);
s32 func_8017F68C(a0)
void *a0;
{
s32 ptr;
u16 st;
ptr = *(s32 *)((s32)a0 + 0x64);
st = *(u16 *)((s32)ptr + 0x2);
if (st != 2) {
return 0;
}
if (func_8012BD14((s32)a0) >= 0x4000) {
return 0;
}
{
s32 p;
u16 st2;
p = *(s32 *)((s32)a0 + 0x64);
st2 = *(u16 *)((s32)p + 0x2);
st2++;
*(u16 *)((s32)p + 0x2) = st2;
}
func_80178BF8();
return (s32)func_80172710;
}
/* func_8017F700 — guarded dispatch: ask func_801819DC(9, 0x12); if it answers
+33 -2
View File
@@ -4321,7 +4321,7 @@ void func_8018067C(void *arg0) {
extern void func_8012CAE4(void *a0);
extern void func_80180978(void);
extern s32 func_80180978();
void func_80180708(void *a0) {
@@ -4424,7 +4424,38 @@ void func_80180918(void *arg0) {
}
INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8017D604", func_80180978);
extern s32 func_8012BD14(s32 a0);
extern s32 func_80178BF8();
extern void func_80172710(void);
s32 func_80180978(a0)
void *a0;
{
s32 ptr;
u16 st;
ptr = *(s32 *)((s32)a0 + 0x64);
st = *(u16 *)((s32)ptr + 0x2);
if (st != 2) {
return 0;
}
if (func_8012BD14((s32)a0) >= 0x4000) {
return 0;
}
{
s32 p;
u16 st2;
p = *(s32 *)((s32)a0 + 0x64);
st2 = *(u16 *)((s32)p + 0x2);
st2++;
*(u16 *)((s32)p + 0x2) = st2;
}
func_80178BF8();
return (s32)func_80172710;
}
/* func_801809EC — guarded dispatch: ask func_80181388(9, 0x12); if it answers
+36 -1
View File
@@ -5016,7 +5016,42 @@ extern void func_8017EB8C(s32 arg0);
}
INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8017C24C", func_8017FD80);
#include "common.h"
/* func_8017FD80 (ov_SC06_018_jr_8017C24C) — card twin ov_SC06_008:func_8017FF74 (banked),
* mirrored spelling: block-scope externs, direct BEE8 test, bare & 0x2000, cast idiom.
* Tail callee is func_8017EB8C in THIS binary (twin's func_8017ED80 == same source fn,
* cf. this TU's aF8017ED80 __asm__("func_8017EB8C") alias); kept (s32)-proto for
* compatibility with this TU's earlier decls.
*/
void func_8017FD80(s32 a0)
{
extern void func_801319E0(s32 a0);
extern s32 func_8012BEE8(s32 a0);
extern void func_8012CBF4(s32 a0);
extern void func_80131C78(s32 a0);
extern void func_80131E00(int a0, int a1);
extern void func_8017EB8C(s32 a0);
s16 field_a;
s32 result;
field_a = *(s16 *)(a0 + 0xA);
if (field_a >= 0x10) {
func_801319E0(a0);
} else {
if (func_8012BEE8(a0) != 0) {
func_80131E00(a0, 6);
} else {
result = ((s32 (*)(s32))func_8012CBF4)(a0);
if (result & 0x2000) {
func_80131C78(a0);
}
((void (*)(s32))func_8017EB8C)(a0);
}
}
}
void func_8017FE0C(s32 a0) {