feat(decomp): ox wave cl overlays — 3 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 05:18:22 -06:00
parent c10171e8d9
commit 9b40d20aa9
6 changed files with 4970 additions and 1643 deletions
+1 -1
View File
@@ -321,7 +321,7 @@ ov_SC03_002_ELF := $(ov_SC03_002_OUT).elf
ov_SC03_002_MAPFILE := $(ov_SC03_002_OUT).map
ov_SC03_002_LD_SCRIPT := $(ov_SC03_002_OUT).ld
ov_SC03_002_SPLAT_YAML := config/splat.ov_SC03_002.yaml
ov_SC03_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_002.o,ov_SC03_002_jr_8012ACE0.o,tail2.data.o,ov_SC03_002_jr_80135888.o,tail3.data.o,ov_SC03_002_jr_80135A4C.o,tail4.data.o,ov_SC03_002_jr_80135D20.o,tail5.data.o,ov_SC03_002_jr_801380E0.o,ov_SC03_002_o0c.o,tail6.data.o,ov_SC03_002_jr_8013F350.o,tail7.data.o,ov_SC03_002_jr_8013FFD8.o,tail8.data.o,ov_SC03_002_jr_80140608.o,tail9.data.o,ov_SC03_002_jr_8015444C.o,ov_SC03_002_jr_80154C24.o,ov_SC03_002_jr_801588CC.o,ov_SC03_002_jr_80159C84.o,tail10.data.o,ov_SC03_002_jr_8015A3C8.o,tail11.data.o,ov_SC03_002_jr_8015AE2C.o,tail12.data.o,ov_SC03_002_jr_8015C32C.o,tail13.data.o,ov_SC03_002_jr_8016AB6C.o,tail14.data.o,ov_SC03_002_jr_80171B4C.o,ov_SC03_002_jr_801734BC.o,tail15.data.o,ov_SC03_002_jr_801789AC.o,ov_SC03_002_jr_80178D40.o,tail16.data.o,ov_SC03_002_jr_8017A4AC.o,tail17.data.o,ov_SC03_002_jr_8017AE2C.o,ov_SC03_002_jr_8017D604.o,tail18.data.o,ov_SC03_002_jr_8018431C.o,tail19.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
ov_SC03_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_002.o,ov_SC03_002_jr_8012ACE0.o,tail2.data.o,ov_SC03_002_jr_80135888.o,tail3.data.o,ov_SC03_002_jr_80135A4C.o,tail4.data.o,ov_SC03_002_jr_80135D20.o,tail5.data.o,ov_SC03_002_jr_801380E0.o,ov_SC03_002_o0c.o,tail6.data.o,ov_SC03_002_jr_8013F350.o,tail7.data.o,ov_SC03_002_jr_8013FFD8.o,tail8.data.o,ov_SC03_002_jr_80140608.o,tail9.data.o,ov_SC03_002_jr_8015444C.o,ov_SC03_002_jr_80154C24.o,ov_SC03_002_jr_801588CC.o,ov_SC03_002_jr_80159C84.o,tail10.data.o,ov_SC03_002_jr_8015A3C8.o,tail11.data.o,ov_SC03_002_jr_8015AE2C.o,tail12.data.o,ov_SC03_002_jr_8015C32C.o,tail13.data.o,ov_SC03_002_jr_8016AB6C.o,tail14.data.o,ov_SC03_002_jr_80171B4C.o,ov_SC03_002_jr_801734BC.o,tail15.data.o,ov_SC03_002_jr_801789AC.o,ov_SC03_002_jr_80178D40.o,tail16.data.o,ov_SC03_002_jr_8017A4AC.o,tail17.data.o,ov_SC03_002_jr_8017AE2C.o,ov_SC03_002_jr_8017D604.o,tail18.data.o,ov_SC03_002_jr_80181D78.o,ov_SC03_002_jr_8018431C.o,tail19.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
build/src/ov_SC03_002/ov_SC03_002.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC03_002/ov_SC03_002_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0
build/src/ov_SC03_002/ov_SC03_002_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
+2
View File
@@ -121,6 +121,7 @@ segments:
- [0x52354, c, ov_SC03_002_jr_8017A4AC]
- [0x52cd4, c, ov_SC03_002_jr_8017AE2C]
- [0x554ac, c, ov_SC03_002_jr_8017D604]
- [0x59c20, c, ov_SC03_002_jr_80181D78]
- [0x5c1c4, c, ov_SC03_002_jr_8018431C]
- [0x5d358, data, tail]
- [0xa1078, .rodata, ov_SC03_002] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
@@ -165,6 +166,7 @@ segments:
- [0xa2198, .rodata, ov_SC03_002_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xa21ac, .rodata, ov_SC03_002_jr_8017D604] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xa21cc, data, tail18]
- [0xa2210, .rodata, ov_SC03_002_jr_80181D78] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xa2234, .rodata, ov_SC03_002_jr_8018431C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xa2268, data, tail19]
- [0xA39F4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+281 -1
View File
@@ -3531,7 +3531,287 @@ extern s32 D_801A6B40;
INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8017BEBC", func_8017DF8C);
INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8017BEBC", func_8017E26C);
void func_8017E26C() {
__asm__ __volatile__(".set\tnoreorder\n"
"addiu $sp, $sp, -88\n"
"lui $a0, %hi(D_801AC280)\n"
"addiu $a0, $a0, %lo(D_801AC280)\n"
"sw $ra, 80($sp)\n"
"jal func_800547D8\n"
" addiu $a1, $sp, 16\n"
"jal func_80052E38\n"
" addiu $a0, $sp, 16\n"
"addiu $t9, $sp, 48\n"
"addiu $t3, $sp, 56\n"
"addiu $t8, $sp, 68\n"
"addiu $t6, $zero, 32\n"
"lui $t2, 255\n"
"ori $t2, $t2, 65535\n"
"lui $t5, 65280\n"
"lui $t1, %hi(D_801A6B40)\n"
"addiu $t1, $t1, %lo(D_801A6B40)\n"
"addu $a2, $zero, $zero\n"
"lui $v1, %hi(D_800A6610)\n"
"addiu $v1, $v1, %lo(D_800A6610)\n"
"lui $v0, %hi(D_800B9A02)\n"
"lhu $v0, %lo(D_800B9A02)($v0)\n"
"lui $t0, %hi(D_800A5E60)\n"
"lw $t0, %lo(D_800A5E60)($t0)\n"
"sll $v0, $v0, 14\n"
"addu $t7, $v0, $v1\n"
"addiu $a3, $t0, 18\n"
".L8017E2D8:\n"
"lw $v0, 0($t1)\n"
"nop\n"
"beqz $v0, .L8017E670\n"
" nop\n"
"lui $at, %hi(D_801A6B4A)\n"
"addu $at, $at, $a2\n"
"lhu $v0, %lo(D_801A6B4A)($at)\n"
"nop\n"
"sh $v0, 48($sp)\n"
"lui $at, %hi(D_801A6B4E)\n"
"addu $at, $at, $a2\n"
"lhu $v0, %lo(D_801A6B4E)($at)\n"
"nop\n"
"sh $v0, 50($sp)\n"
"lui $at, %hi(D_801A6B52)\n"
"addu $at, $at, $a2\n"
"lhu $v0, %lo(D_801A6B52)($at)\n"
"nop\n"
"sh $v0, 52($sp)\n"
"lui $at, %hi(D_801A6B6E)\n"
"addu $at, $at, $a2\n"
"lhu $v0, %lo(D_801A6B6E)($at)\n"
"nop\n"
"sh $v0, 56($sp)\n"
"lui $at, %hi(D_801A6B72)\n"
"addu $at, $at, $a2\n"
"lhu $v0, %lo(D_801A6B72)($at)\n"
"nop\n"
"sh $v0, 58($sp)\n"
"lui $at, %hi(D_801A6B76)\n"
"addu $at, $at, $a2\n"
"lhu $v0, %lo(D_801A6B76)($at)\n"
"nop\n"
"sh $v0, 60($sp)\n"
"lui $at, %hi(D_801A6B48)\n"
"addu $at, $at, $a2\n"
"lw $v0, %lo(D_801A6B48)($at)\n"
"lui $at, %hi(D_801A6B78)\n"
"addu $at, $at, $a2\n"
"lw $a0, %lo(D_801A6B78)($at)\n"
"lui $at, %hi(D_801A6B4C)\n"
"addu $at, $at, $a2\n"
"lw $v1, %lo(D_801A6B4C)($at)\n"
"lui $at, %hi(D_801A6B7C)\n"
"addu $at, $at, $a2\n"
"lw $a1, %lo(D_801A6B7C)($at)\n"
"addu $v0, $v0, $a0\n"
"lui $at, %hi(D_801A6B48)\n"
"addu $at, $at, $a2\n"
"sw $v0, %lo(D_801A6B48)($at)\n"
"lui $at, %hi(D_801A6B50)\n"
"addu $at, $at, $a2\n"
"lw $v0, %lo(D_801A6B50)($at)\n"
"addu $v1, $v1, $a1\n"
"lui $at, %hi(D_801A6B4C)\n"
"addu $at, $at, $a2\n"
"sw $v1, %lo(D_801A6B4C)($at)\n"
"lui $at, %hi(D_801A6B80)\n"
"addu $at, $at, $a2\n"
"lw $v1, %lo(D_801A6B80)($at)\n"
"lui $at, %hi(D_801A6B44)\n"
"addu $at, $at, $a2\n"
"lw $a0, %lo(D_801A6B44)($at)\n"
"addu $v0, $v0, $v1\n"
"lui $at, %hi(D_801A6B50)\n"
"addu $at, $at, $a2\n"
"sw $v0, %lo(D_801A6B50)($at)\n"
"bnez $a0, .L8017E46C\n"
" addiu $v0, $a0, -1\n"
"lui $at, %hi(D_801A6B6C)\n"
"addu $at, $at, $a2\n"
"lw $v0, %lo(D_801A6B6C)($at)\n"
"lui $at, %hi(D_801A6B78)\n"
"addu $at, $at, $a2\n"
"lw $v1, %lo(D_801A6B78)($at)\n"
"lui $at, %hi(D_801A6B7C)\n"
"addu $at, $at, $a2\n"
"lw $a0, %lo(D_801A6B7C)($at)\n"
"lui $at, %hi(D_801A6B80)\n"
"addu $at, $at, $a2\n"
"lw $a1, %lo(D_801A6B80)($at)\n"
"addu $v0, $v0, $v1\n"
"lui $at, %hi(D_801A6B6C)\n"
"addu $at, $at, $a2\n"
"sw $v0, %lo(D_801A6B6C)($at)\n"
"lui $at, %hi(D_801A6B70)\n"
"addu $at, $at, $a2\n"
"lw $v0, %lo(D_801A6B70)($at)\n"
"lui $at, %hi(D_801A6B74)\n"
"addu $at, $at, $a2\n"
"lw $v1, %lo(D_801A6B74)($at)\n"
"addu $v0, $v0, $a0\n"
"addu $v1, $v1, $a1\n"
"lui $at, %hi(D_801A6B70)\n"
"addu $at, $at, $a2\n"
"sw $v0, %lo(D_801A6B70)($at)\n"
"lui $at, %hi(D_801A6B74)\n"
"addu $at, $at, $a2\n"
"sw $v1, %lo(D_801A6B74)($at)\n"
"j .L8017E478\n"
" nop\n"
".L8017E46C:\n"
"lui $at, %hi(D_801A6B44)\n"
"addu $at, $at, $a2\n"
"sw $v0, %lo(D_801A6B44)($at)\n"
".L8017E478:\n"
"lui $at, %hi(D_801A6B78)\n"
"addu $at, $at, $a2\n"
"lw $v0, %lo(D_801A6B78)($at)\n"
"lui $at, %hi(D_801A6B84)\n"
"addu $at, $at, $a2\n"
"lw $a0, %lo(D_801A6B84)($at)\n"
"lui $at, %hi(D_801A6B7C)\n"
"addu $at, $at, $a2\n"
"lw $v1, %lo(D_801A6B7C)($at)\n"
"lui $at, %hi(D_801A6B88)\n"
"addu $at, $at, $a2\n"
"lw $a1, %lo(D_801A6B88)($at)\n"
"addu $v0, $v0, $a0\n"
"lui $at, %hi(D_801A6B78)\n"
"addu $at, $at, $a2\n"
"sw $v0, %lo(D_801A6B78)($at)\n"
"lui $at, %hi(D_801A6B80)\n"
"addu $at, $at, $a2\n"
"lw $v0, %lo(D_801A6B80)($at)\n"
"addu $v1, $v1, $a1\n"
"lui $at, %hi(D_801A6B7C)\n"
"addu $at, $at, $a2\n"
"sw $v1, %lo(D_801A6B7C)($at)\n"
"lui $at, %hi(D_801A6B8C)\n"
"addu $at, $at, $a2\n"
"lw $v1, %lo(D_801A6B8C)($at)\n"
"lui $at, %hi(D_801A6B78)\n"
"addu $at, $at, $a2\n"
"lw $a0, %lo(D_801A6B78)($at)\n"
"addu $v0, $v0, $v1\n"
"lui $at, %hi(D_801A6B80)\n"
"addu $at, $at, $a2\n"
"sw $v0, %lo(D_801A6B80)($at)\n"
"blez $a0, .L8017E524\n"
" nop\n"
"lui $at, %hi(D_801A6B48)\n"
"addu $at, $at, $a2\n"
"lw $v1, %lo(D_801A6B48)($at)\n"
"lui $at, %hi(D_801A6B54)\n"
"addu $at, $at, $a2\n"
"lw $v0, %lo(D_801A6B54)($at)\n"
"j .L8017E544\n"
" slt $v0, $v0, $v1\n"
".L8017E524:\n"
"lui $at, %hi(D_801A6B48)\n"
"addu $at, $at, $a2\n"
"lw $v0, %lo(D_801A6B48)($at)\n"
"lui $at, %hi(D_801A6B54)\n"
"addu $at, $at, $a2\n"
"lw $v1, %lo(D_801A6B54)($at)\n"
"nop\n"
"slt $v0, $v0, $v1\n"
".L8017E544:\n"
"beqz $v0, .L8017E558\n"
" nop\n"
"lui $at, %hi(D_801A6B40)\n"
"addu $at, $at, $a2\n"
"sw $zero, %lo(D_801A6B40)($at)\n"
".L8017E558:\n"
"lw $v0, 0($t1)\n"
"nop\n"
"beqz $v0, .L8017E670\n"
" nop\n"
"lwc2 $0, 0($t9)\n"
"lwc2 $1, 4($t9)\n"
"lwc2 $2, 0($t3)\n"
"lwc2 $3, 4($t3)\n"
"lwc2 $4, 0($t3)\n"
"lwc2 $5, 4($t3)\n"
"nop\n"
"nop\n"
"rtpt\n"
"addiu $v0, $sp, 64\n"
"cfc2 $t4, $31\n"
"nop\n"
"sw $t4, 0($v0)\n"
"lui $v1, 32645\n"
"lw $v0, 64($sp)\n"
"ori $v1, $v1, 57344\n"
"and $v0, $v0, $v1\n"
"bnez $v0, .L8017E670\n"
" addiu $v1, $t0, 12\n"
"addiu $v0, $t0, 20\n"
"swc2 $12, 0($v1)\n"
"swc2 $13, 0($v0)\n"
"addiu $v1, $sp, 72\n"
"addiu $v0, $sp, 76\n"
"swc2 $17, 0($t8)\n"
"swc2 $18, 0($v1)\n"
"swc2 $19, 0($v0)\n"
"lw $v1, 68($sp)\n"
"lw $v0, 72($sp)\n"
"nop\n"
"addu $a1, $v1, $v0\n"
"bgez $a1, .L8017E5F0\n"
" lui $v1, 57600\n"
"addiu $a1, $a1, 7\n"
".L8017E5F0:\n"
"ori $v1, $v1, 32\n"
"addiu $v0, $zero, 5\n"
"sb $v0, -15($a3)\n"
"addiu $v0, $zero, 82\n"
"sb $v0, -7($a3)\n"
"addiu $v0, $zero, 224\n"
"sb $v0, -9($a3)\n"
"addiu $v0, $zero, 128\n"
"sb $v0, -8($a3)\n"
"addiu $v0, $zero, 8\n"
"sb $v0, -2($a3)\n"
"addiu $v0, $zero, 64\n"
"sw $v1, -14($a3)\n"
"sb $t6, -10($a3)\n"
"sb $v0, -1($a3)\n"
"sb $t6, 0($a3)\n"
"addiu $a3, $a3, 24\n"
"sra $v1, $a1, 3\n"
"sll $v1, $v1, 2\n"
"addu $v1, $v1, $t7\n"
"lw $a0, 0($t0)\n"
"lw $v0, 0($v1)\n"
"and $a0, $a0, $t5\n"
"and $v0, $v0, $t2\n"
"or $a0, $a0, $v0\n"
"sw $a0, 0($t0)\n"
"and $a0, $t0, $t2\n"
"lw $v0, 0($v1)\n"
"addiu $t0, $t0, 24\n"
"and $v0, $v0, $t5\n"
"or $v0, $v0, $a0\n"
"sw $v0, 0($v1)\n"
".L8017E670:\n"
"addiu $t1, $t1, 80\n"
"lui $v0, %hi(D_801ABB40)\n"
"addiu $v0, $v0, %lo(D_801ABB40)\n"
"slt $v0, $t1, $v0\n"
"bnez $v0, .L8017E2D8\n"
" addiu $a2, $a2, 80\n"
"lui $at, %hi(D_800A5E60)\n"
"sw $t0, %lo(D_800A5E60)($at)\n"
"lw $ra, 80($sp)\n"
"addiu $sp, $sp, 88\n"
".set\treorder\n"
);
}
INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8017BEBC", func_8017E6A0);
+65 -1
View File
@@ -4346,7 +4346,71 @@ void func_801805E0(void)
INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8017D604", func_80180644);
INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8017D604", func_8018069C);
typedef struct {
u8 pad0[0x18];
u16 f18;
u16 f1A;
u16 f1C;
u8 pad1[0xE];
u16 f2C;
} Act_8018069C;
void func_8018069C(s32 a0) {
extern s32 D_801E6748;
extern s32 D_801AA594;
extern u16 D_8018A960[];
extern s32 D_801B3DC4;
extern s32 D_801BBAB8[];
extern s32 D_801C29C4[];
extern void func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
extern void func_8001C214(s32, s32);
extern void func_8001D0E8(s32, s32, s32);
extern void func_801812FC(void);
s32 s1;
s32 t;
u16 v;
s1 = func_80029504();
if ((u32)(s1 - 0x44C) >= 0x46) {
goto FAIL;
}
t = ((s32 (*)(void))func_8012C1B8)();
*(s32 *)(a0 + 0x20) = t;
if (t == 0) {
FAIL:
func_8012CAE4((void *)a0);
return;
}
func_8001C214(*(s32 *)(a0 + 0x20), (s32)&D_801AA594);
func_8001D0E8(*(s32 *)(a0 + 0x20), 0x7FFF, 0x7FFF);
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) =
(v = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C), D_801E6748 = 0, v | 0x10);
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x18) =
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x1A) =
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x1C) = 0x3000;
*(u16 *)(*(s32 *)(a0 + 0x68) + 0xC) = 0x7FFF;
if (s1 == 0x488) {
*(u16 *)(a0 + 2) = 2;
func_8012E8E0(a0, (s32)D_8018A960);
((void (*)(s32, s32))func_801812FC)(a0, (s32)&D_801B3DC4);
*(s32 *)(a0 + 0x1C) = 0;
*(u16 *)(a0 + 0x34) = 0;
return;
}
*(u16 *)(a0 + 2) = 1;
func_8012E8E0(a0, (s32)D_8018A960);
v = *(u16 *)(a0 + 0xFC) ^ 1;
*(u16 *)(a0 + 0xFC) = v;
if (v != 0) {
((void (*)(s32, s32))func_801812FC)(a0, (s32)D_801BBAB8);
} else {
((void (*)(s32, s32))func_801812FC)(a0, (s32)D_801C29C4);
}
*(s32 *)(a0 + 0x1C) = 0;
}
void func_801807E8(void *arg0) {
extern void (*D_8018A97C[])(void);