feat(decomp): ox wave cy overlays — 6 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 09:31:44 -06:00
parent 67bd99aa3f
commit 5f23d5bacf
7 changed files with 435 additions and 7 deletions
+1
View File
@@ -4446,6 +4446,7 @@ build/src/ov_SC06_024/ov_SC06_024_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (
build/src/ov_SC06_024/ov_SC06_024_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC06_024/ov_SC06_024_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC06_024/ov_SC06_024_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178
build/src/ov_SC06_024/ov_SC06_024_jr_8017BEBC.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC06_024/ov_SC06_024_jr_801851E0.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
build/src/ov_SC06_024/ov_SC06_024_jr_80186F00.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
build/src/ov_SC06_024/ov_SC06_024_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
+1 -1
View File
@@ -166,7 +166,7 @@ segments:
- [0xb7a8c, data, tail17]
- [0xb7a90, .rodata, ov_SC06_024_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb7aa4, .rodata, ov_SC06_024_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb7ac4, data, tail18]
- [0xb7aec, data, tail18]
- [0xb7b58, .rodata, ov_SC06_024_jr_801851E0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb7c38, .rodata, ov_SC06_024_jr_801867DC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb7c50, .rodata, ov_SC06_024_jr_80186F00] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
+45 -1
View File
@@ -3575,7 +3575,51 @@ extern void func_8017F630(void);
INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8017DC70", func_8017F630);
INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8017DC70", func_8017F6A4);
extern void func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
extern void func_8001C214(s32 a0, s32 a1);
extern void func_8012A8B0(u8 *a0, s32 a1);
extern s32 func_80132EF4(s32 a0, s32 a1);
extern void func_8017F190(s32 a0);
extern void func_8017F11C(s32 a0);
void func_8017F6A4(s32 param_1) {
extern u8 D_801A2D40;
extern u8 D_801A2EC4;
s32 v0;
s32 inst;
s32 v1;
s32 t;
v0 = ((s32 (*)(void))func_8012C1B8)();
inst = v0;
*(s32 *)(param_1 + 0x20) = v0;
if (v0 == 0) {
((void (*)(s32))func_8012CAE4)(param_1);
return;
}
((void (*)(s32, void *))func_8001C214)(inst, &D_801A2D40);
*(s16 *)(inst + 0x1C) = 0x800;
*(s16 *)(inst + 0x1A) = 0x800;
*(s16 *)(inst + 0x18) = 0x800;
*(s16 *)(inst + 0x2C) |= 0x10;
((void (*)(u8 *, s32))func_8012A8B0)((u8 *)param_1, (s32)&D_801A2EC4);
*(s16 *)(param_1 + 0x84) = 0;
v1 = func_80132EF4(param_1, 0x2A);
*(s32 *)(param_1 + 0xCC) = v1;
if (v1 != 0) {
*(u16 *)(v1 + 0x2C) = *(u8 *)(param_1 + 0x70);
t = *(u16 *)(param_1 + 0x36);
*(s32 *)(v1 + 0x30) = param_1;
*(u16 *)(v1 + 0x2E) = t;
}
if (*(s16 *)(param_1 + 0x70) & 0x8000) {
((void (*)(s32))func_8017F190)(param_1);
} else {
((void (*)(s32))func_8017F11C)(param_1);
}
}
INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8017DC70", func_8017F78C);
+14 -1
View File
@@ -3610,7 +3610,20 @@ void func_8017D8C8(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8017BEBC", func_8017D948);
void func_8017D948(s32 s0) {
extern void func_80178D18(void);
if (func_80178970() == 0) {
return;
}
((void (*)(s32))func_80178D18)(s0);
*(s16 *)(s0 + 2) = 1;
if (*(s16 *)(s0 + 0x70) == 0) {
*(s32 *)(*(s32 *)(s0 + 0x20) + 4) |= 0x80000000;
} else {
*(s32 *)(*(s32 *)(s0 + 0x20) + 4) &= 0x7FFFFFFF;
}
}
INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8017BEBC", func_8017D9C4);
+92 -1
View File
@@ -3272,7 +3272,98 @@ void func_80183C84(void *a0) {
}
INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80183D5C);
typedef struct { s16 vx, vy, vz, pad; } SV83;
void func_80183D5C(s32 arg0)
{
extern void func_8004914C(void *);
extern void func_800491AC(void *);
extern s32 func_8004787C(s32);
extern s32 func_80047948(s32);
extern s32 RotTransPers3(void *, void *, void *, s32 *, s32 *, s32 *, s32 *, s32 *);
extern void *func_80010A08(s32);
extern s32 GetTPage(s32, s32, s32, s32);
extern s32 func_8005A600(s32, s32, s32, s32, s32);
extern s32 AddPrim(s32, void *);
extern u8 D_800AF648;
extern s32 D_800A651C[];
extern s16 D_800B9A02;
register u8 *db __asm__("$16");
register s32 obj __asm__("$17");
void *q;
SV83 v[3];
s32 scr[6];
s32 ret;
s32 tp;
s32 i;
u16 *e;
u8 *r;
s32 ot;
obj = arg0;
db = &D_800AF648;
func_8004914C(db);
func_800491AC(db);
v[0].vx = *(u16 *)((char *)obj + 6);
v[0].vy = *(u16 *)((char *)obj + 0xA);
v[0].vz = *(u16 *)((char *)obj + 0xE);
ret = func_8004787C(*(s16 *)((char *)obj + 0xFC) + 0x40);
v[1].vx = *(u16 *)((char *)obj + 6) - (ret * *(s16 *)((char *)obj + 0x100) >> 7);
v[1].vy = *(u16 *)((char *)obj + 0xA) - (*(u16 *)((char *)obj + 0x100) << 5);
ret = func_80047948(*(s16 *)((char *)obj + 0xFC) + 0x40);
v[1].vz = *(u16 *)((char *)obj + 0xE) - (ret * *(s16 *)((char *)obj + 0x100) >> 7);
ret = func_8004787C(*(s16 *)((char *)obj + 0xFC) - 0x40);
v[2].vx = *(u16 *)((char *)obj + 6) - (ret * *(s16 *)((char *)obj + 0x100) >> 7);
v[2].vy = *(u16 *)((char *)obj + 0xA) - (*(u16 *)((char *)obj + 0x100) << 5);
ret = func_80047948(*(s16 *)((char *)obj + 0xFC) - 0x40);
v[2].vz = *(u16 *)((char *)obj + 0xE) - (ret * *(s16 *)((char *)obj + 0x100) >> 7);
ret = RotTransPers3(&v[0], &v[1], &v[2], &scr[0], &scr[1], &scr[2], &scr[4], &scr[5]);
if (ret <= 0 || scr[5] < 0) {
*(u16 *)((char *)obj + 0x102) = 0;
*(u16 *)((char *)obj + 0x100) = *(u16 *)((char *)obj + 0x100) - 1;
return;
}
ret -= 0x10;
ot = D_800A651C[*(u16 *)&D_800B9A02 * 5] + (ret << 2);
q = func_80010A08(0x30);
if (q == 0) {
return;
}
tp = GetTPage(0, 1, 0, 0);
func_8005A600((s32)q, 0, 0, (u16)tp, 0);
r = (u8 *)q + 0xC;
for (i = 0, e = (u16 *)scr; i < 3; i++) {
if (!((u16)(e[0] + 0xA0) < 0x141 && (u16)(e[1] + 0x78) < 0xF1)) {
*(u16 *)((char *)obj + 0x102) = 0;
}
e += 2;
}
r[0x1C] = r[0x14] = r[0xC] = r[4] = 0xFF;
r[0x1D] = r[0x15] = r[0xD] = r[5] = 0xFF;
r[0x1E] = r[0x16] = r[0xE] = r[6] = 0xFF;
r[3] = 8;
r[7] = 0x3A;
*(u16 *)(r + 8) = *(volatile u16 *)&scr[0];
*(u16 *)(r + 0x10) = *(volatile u16 *)&scr[0];
*(u16 *)(r + 0x18) = *(volatile u16 *)&scr[1];
*(u16 *)(r + 0x20) = *(volatile u16 *)&scr[2];
*(u16 *)(r + 0xA) = *(volatile u16 *)((u16 *)&scr[0] + 1);
*(u16 *)(r + 0x12) = *(volatile u16 *)((u16 *)&scr[0] + 1);
*(u16 *)(r + 0x1A) = *(volatile u16 *)((u16 *)&scr[1] + 1);
*(u16 *)(r + 0x22) = *(volatile u16 *)((u16 *)&scr[2] + 1);
AddPrim(ot, r);
AddPrim(ot, q);
}
INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80184084);
+48 -2
View File
@@ -5344,7 +5344,22 @@ void func_80181840(void *s0) {
}
INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8017C8D0", func_8018191C);
extern void func_8012F568();
extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3);
void func_8018191C(s32 a0, void *a1, void *a2, s32 a3)
{
extern s32 *D_80126B78;
extern s32 *D_80126B90;
extern s16 D_80126B9A;
extern u8 D_801152A8[];
if (func_80135888((s32)D_80126B78, (s32)D_80126B90, (s32)a1, (s32)a2) != 0) {
func_8012F568(1, 0x4201, a3, 0x5A, a2, D_801152A8);
D_80126B9A = a3;
}
}
#include "common.h"
@@ -5637,7 +5652,38 @@ void func_8018205C(void *a0) {
}
INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8017C8D0", func_801820E0);
extern int func_80178970(void);
extern void func_80178D18(void);
extern int func_800D0CE0(void);
extern void func_8017C068(void);
extern s16 D_8019F71C;
void func_801820E0(s32 a0) {
u16 var = *(u16 *)(a0 + 0x34);
switch (var) {
case 0:
*(u16 *)(a0 + 0x34) = var + 1;
break;
case 1:
if (((s32 (*)(s32))func_80178970)(a0) != 0) {
((void (*)(s32))func_80178D18)(a0);
*(s32 *)(a0 + 0xDC) = 0;
*(u16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1;
}
break;
case 2:
if (func_800D0CE0() == 1) {
*(u16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1;
}
break;
case 3:
func_8017C068();
D_8019F71C = 1;
break;
}
}
extern u16 D_80188BB4;
+234 -1
View File
@@ -3648,7 +3648,240 @@ void func_8017DAE0(s32 param_1)
}
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8017BEBC", func_8017DBFC);
extern void func_8012EC04(s32, s32, s32 *);
extern void func_8012F14C(s32, s32, s32);
extern s32 func_80132EF4(s32, s32);
extern s32 func_80128DB4(s32, s32*);
extern s32 func_8012BE54(s32);
extern void func_8017EC4C(s32);
extern void func_8017EADC(s32);
extern s32 func_8012BEE8(s32);
extern s32 func_8012BA10(s32, s32);
extern s32 func_8012BDBC(s32, s32);
extern void func_8002D4C8(s32, s32);
extern void func_80128D60(s32, s32 *, s32 *);
extern u8 D_80193470;
extern u8 D_80193471;
extern u8 D_80193472;
extern u16 D_80193378[];
extern u16 D_801933B8[];
extern void (*D_80193438)(void);
extern u16 D_80193440[];
extern u16 D_80193442;
extern u16 D_80193444;
extern s32 D_80126B58;
extern s32 D_801E1118;
extern s32 D_801E1120[];
extern s32 D_801E1158;
void func_8017DBFC(s32 arg0)
{
register s32 s0 __asm__("$16");
s32 s1;
u16 buf[16];
u16 vec[8];
s0 = arg0;
switch (*(u16 *)(s0 + 0x34)) {
case 0:
*(u16 *)(s0 + 0x34) = *(u16 *)(s0 + 0x34) + 1;
*(s32 *)(s0 + 0xE4) = *(s32 *)(s0 + 0xE4) & ~4;
*(u16 *)(s0 + 0x100) = 0;
*(u16 *)(s0 + 0x102) = 0;
*(s32 *)(s0 + 0x1C) = 0;
break;
case 1:
if (func_8012BEE8(s0) != 0) {
*(u16 *)(s0 + 0x34) = *(u16 *)(s0 + 0x34) + 1;
}
break;
case 2:
{
s32 v0;
s32 v1;
v0 = func_8012BA10(s0, 8);
v1 = *(s32 *)(s0 + 0x20);
*(s16 *)(v1 + 0x12) = *(s16 *)(v1 + 0x12) + v0;
if (func_8012BDBC(s0, 0x100) != 0) {
*(s32 *)(s0 + 0x1C) = 0x1E;
*(u16 *)(s0 + 0x34) = *(u16 *)(s0 + 0x34) + 1;
func_8002D4C8(0x95A, 0);
}
break;
}
case 3:
{
s32 v0;
s32 v1;
v0 = func_8012BA10(s0, 8);
v1 = *(s32 *)(s0 + 0x20);
*(s16 *)(v1 + 0x12) = *(s16 *)(v1 + 0x12) + v0;
if (func_8012BEE8(s0) != 0) {
*(s32 *)(s0 + 0x1C) = 7;
*(u16 *)(s0 + 0x34) = *(u16 *)(s0 + 0x34) + 1;
func_8002D4C8(4, 0x95A);
}
*(u16 *)(s0 + 0x102) = *(u16 *)(s0 + 0x102) + 0x10;
func_8017EADC(s0);
break;
}
case 4:
{
s32 v0;
s32 v1;
s1 = func_80132EF4(&D_80126B58, 0x5B);
if (s1 != 0) {
v0 = *(s32 *)(s0 + 0x1C);
v1 = *(s32 *)(s1 + 0x20);
*(s16 *)(v1 + 0x1A) = v0 << 12;
*(s16 *)(v1 + 0x18) = v0 << 12;
*(u16 *)(s1 + 0xA) = *(u16 *)(s1 + 0xA) - 0x30;
if (*(s32 *)(s0 + 0x1C) == 7) {
func_8002D4C8(0x95B, 0);
}
}
if (func_8012BEE8(s0) != 0) {
*(u16 *)(s0 + 0x102) = 0;
*(s32 *)(s0 + 0x1C) = 0x1E;
*(u16 *)(s0 + 0x34) = *(u16 *)(s0 + 0x34) + 1;
func_80128D60(0, D_801E1120, D_80193378);
*(s32 *)(*(s32 *)(s0 + 0xD4) + 4) &= 0x7FFFFFFF;
D_80193470 = 0x20;
D_80193471 = 0x20;
D_80193472 = 0x20;
}
break;
}
case 5:
{
u8 *p = &D_80193470;
*p = *p + 7;
D_80193471 = D_80193471 + 7;
D_80193472 = D_80193472 + 7;
if (func_8012BEE8(s0) != 0) {
func_80128D60(0, D_801E1120, D_801933B8);
*(u16 *)(s0 + 0x34) = *(u16 *)(s0 + 0x34) + 1;
func_8002D4C8(0x95C, 0);
}
break;
}
case 6:
*(u16 *)(s0 + 0x102) = *(u16 *)(s0 + 0x102) + 0x18;
if ((*(s32 *)(s0 + 0xE4) & 4) != 0) {
*(s32 *)(s0 + 0x1C) = 0x20;
*(u16 *)(s0 + 0x34) = *(u16 *)(s0 + 0x34) + 1;
}
func_8017EC4C(s0);
break;
case 7:
{
s32 v1;
*(u16 *)(s0 + 0x102) = *(u16 *)(s0 + 0x102) + 0x18;
if (func_8012BEE8(s0) != 0) {
*(s32 *)(s0 + 0x1C) = 0x60;
*(u16 *)(s0 + 0x34) = *(u16 *)(s0 + 0x34) + 1;
v1 = *(s32 *)(s0 + 0x20);
if ((u32)((*(u16 *)(v1 + 0x12) & 0xFFF) - 0x501) < 0x800) {
func_8002D4C8(0x963, 0);
D_801E1118 = 0;
} else {
func_8002D4C8(0x962, 0);
D_801E1118 = 1;
}
}
func_8017EC4C(s0);
break;
}
case 8:
{
s32 v0;
s32 v1;
*(u16 *)(s0 + 0x102) = *(u16 *)(s0 + 0x102) + 0x18;
v1 = *(s32 *)(s0 + 0x20);
*(s16 *)(v1 + 0x12) = *(s16 *)(v1 + 0x12) + 0x80;
v0 = *(u16 *)(*(s32 *)(s0 + 0x20) + 0x12) & 0xFFF;
if (D_801E1118 != 0) {
if ((u32)(v0 - 0x501) < 0x800) {
func_8002D4C8(0x963, 0);
D_801E1118 = 0;
}
} else {
if ((u32)(v0 - 0x501) >= 0x800) {
func_8002D4C8(0x962, 0);
D_801E1118 = 1;
}
}
if (func_8012BEE8(s0) != 0) {
*(s32 *)(s0 + 0x1C) = 0xA;
*(u16 *)(s0 + 0x34) = *(u16 *)(s0 + 0x34) + 1;
}
if ((*(s32 *)(s0 + 0xE4) & 4) != 0) {
s1 = func_80132EF4(s0, 0x22);
if (s1 != 0) {
func_8012EC04(s0, D_801E1158, buf);
vec[0] = D_80193440[0];
vec[1] = D_80193442;
vec[2] = D_80193444 - 0xD0;
func_8012F14C(buf, vec, &vec[4]);
*(u16 *)(s1 + 0x34) = 0x3000;
*(u16 *)(s1 + 6) = vec[4];
*(u16 *)(s1 + 0xA) = vec[5];
*(u16 *)(s1 + 0xE) = vec[6];
}
}
func_8017EC4C(s0);
break;
}
case 9:
{
s32 v0;
s32 v1;
u8 *p;
*(u16 *)(s0 + 0x100) = *(u16 *)(s0 + 0x100) + 0x18;
if ((*(s32 *)(s0 + 0xE4) & 4) == 0) {
*(u16 *)(s0 + 0x102) = *(u16 *)(s0 + 0x102) + 0x18;
}
if (func_8012BEE8(s0) == 0) {
p = &D_80193470;
*p = *p - 0x18;
D_80193471 = D_80193471 - 0x18;
D_80193472 = D_80193472 - 0x18;
}
v0 = *(s16 *)(s0 + 0x100) - *(s16 *)(s0 + 0x102);
if (v0 >= 0) {
if (v0 < 0x20) {
goto Ljoin9;
}
goto Lexit9;
}
if (*(s16 *)(s0 + 0x102) - *(s16 *)(s0 + 0x100) >= 0x20) {
goto Lexit9;
}
Ljoin9:
*(u16 *)(s0 + 0x100) = *(u16 *)(s0 + 0x102);
v1 = func_8012BE54(s0);
if (0x2FFFF < v1) {
func_80128D60(0, D_801E1120, ((u16 *)&D_80193438));
*(u16 *)(s0 + 2) = 1;
} else {
*(u16 *)(s0 + 2) = 3;
}
*(u16 *)(s0 + 0x34) = 0;
*(s32 *)(*(s32 *)(s0 + 0xD4) + 4) |= 0x80000000;
*(s32 *)(*(s32 *)(s0 + 0xD8) + 4) |= 0x80000000;
func_8002D4C8(4, 0x95C);
break;
Lexit9:
func_8017EC4C(s0);
break;
}
default:
break;
}
((void (*)(s32, s32 *))func_80128DB4)(0, D_801E1120);
}
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8017BEBC", func_8017E1F0);