feat(decomp): ox wave dw overlays — 33 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 15:04:19 -06:00
parent 849020a536
commit 317d31d18a
31 changed files with 816 additions and 155 deletions
+1 -1
View File
@@ -147,7 +147,7 @@ build/src/ov_SC03_001/ov_SC03_001_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (
build/src/ov_SC03_001/ov_SC03_001_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC03_001/ov_SC03_001_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC03_001/ov_SC03_001_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178
build/src/ov_SC03_001/ov_SC03_001_jr_8017AE2C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC03_001/ov_SC03_001_jr_8017AE2C.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x34
build/src/ov_SC03_001/ov_SC03_001_jr_80184F64.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC03_001/ov_SC03_001_jr_8018A3A8.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38
build/src/ov_SC03_001/ov_SC03_001_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
+1 -1
View File
@@ -168,7 +168,7 @@ segments:
- [0xc4bac, .rodata, ov_SC03_001_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xc4c38, data, tail17]
- [0xc4c3c, .rodata, ov_SC03_001_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xc4c70, data, tail18]
- [0xc4c84, data, tail18]
- [0xc4c9c, .rodata, ov_SC03_001_jr_80184DDC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xc4cb0, data, tail19]
- [0xc4cb4, .rodata, ov_SC03_001_jr_80184F64] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
+4 -1
View File
@@ -59,7 +59,10 @@ void func_800CB018(s32 a0) {
}
INCLUDE_ASM("asm/md_MAIN_013/nonmatchings/md_MAIN_013", func_800CB054);
void func_800CB054(void *a0) {
*(s32 *)((s32)a0 + 0xC0) = 0;
}
INCLUDE_ASM("asm/md_MAIN_013/nonmatchings/md_MAIN_013", func_800CB05C);
+32 -1
View File
@@ -90,7 +90,38 @@ void func_800CB1C0(void *arg0) {
}
INCLUDE_ASM("asm/md_MAIN_015/nonmatchings/md_MAIN_015", func_800CB21C);
extern void func_8014659C(void);
void func_800CB21C(s32 a0) {
typedef void (*Fn)(s32);
s32 iVar1;
s32 iVar2;
extern void func_8001C2C4(s32 a0);
extern void func_80149374(s32 a0, s32 a1);
extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3);
extern void func_80146E90(s32 *a0, s32 a1);
extern void func_80146CA0(void *a0);
extern void func_80162CCC(void);
iVar1 = *(s32 *)(a0 + 0x4C);
iVar2 = ((s32 (*)(void))func_8014659C)();
*(s32 *)(a0 + 0x20) = iVar2;
if (iVar2 != 0) {
func_8001C2C4(iVar2);
*(u32 *)(iVar2 + 4) |= 0x80000000;
func_80149374(iVar1, a0 + 4);
*(u16 *)(iVar2 + 0x10) = *(u16 *)(iVar1 + 0x100);
*(u16 *)(iVar2 + 0x14) = *(u16 *)(iVar1 + 0x104);
*(u16 *)(iVar2 + 0x12) = *(u16 *)(*(s32 *)(iVar1 + 0x20) + 0x12);
func_80146DE8((s32 *)a0, 0, 0, (s32)0xFFC00000);
func_80146E90((s32 *)a0, 0x10);
func_80146CA0((void *)a0);
} else {
((Fn)func_80162CCC)(a0);
}
}
void func_800CB2E0(void *arg0) {
extern s32 func_80146E98(s32 a0);
+5 -1
View File
@@ -129,7 +129,11 @@ void func_800CCE24(void *a0) {
}
INCLUDE_ASM("asm/md_MAIN_043/nonmatchings/md_MAIN_043", func_800CCEA0);
s32 func_800CCEA0(void *a0) {
*(s32 *)((s32)a0 + 0x234) = 150;
return 150;
}
INCLUDE_ASM("asm/md_MAIN_043/nonmatchings/md_MAIN_043", func_800CCEAC);
+4 -1
View File
@@ -465,7 +465,10 @@ void func_800CDA14(s32 a0) {
}
INCLUDE_ASM("asm/md_MAIN_046/nonmatchings/md_MAIN_046", func_800CDA44);
void func_800CDA44(s32 *a0) {
*(s16 *)((s32)a0 + 0x1C8) = 0;
}
extern s32 func_80161A30(s32 a0);
extern void (*D_800CE0AC[])(void);
+6 -1
View File
@@ -371,7 +371,12 @@ void func_801EE278(void *a0) {
}
INCLUDE_ASM("asm/md_SC05_029/nonmatchings/md_SC05_029", func_801EE2B4);
void func_801EE2B4(void) {
extern s32 D_801F7368;
D_801F7368 = 0;
}
+17 -1
View File
@@ -2601,7 +2601,23 @@ void func_801A4A78(s32 arg0) {
}
INCLUDE_ASM("asm/md_SC07_003/nonmatchings/md_SC07_003", func_801A4CF4);
extern void func_8012C218(void *a0);
extern void func_8012B260(u8 *a0);
void func_801A4CF4(s32 a0) {
s32 a1 = *(s32 *)(a0 + 0x64);
if (*(s16 *)(a1 + 0x36) != *(s16 *)(a0 + 0x10A)) {
func_8012C218((void *)a0);
return;
}
*(s32 *)(a0 + 0x4) = *(s32 *)(a1 + 0x38);
*(s32 *)(a0 + 0x8) = *(s32 *)(a1 + 0x3C);
*(s32 *)(a0 + 0xC) = *(s32 *)(a1 + 0x40);
func_8012B260((u8 *)a0);
}
typedef struct { s16 m[3][3]; s32 t[3]; } Mtx32_801A4D58;
+21 -1
View File
@@ -3433,7 +3433,27 @@ void func_8017D440(s32 a0, s32 a1) {
}
INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8017BE9C", func_8017D494);
void func_8017D494(s32 a0) {
extern u8 D_800B9A15;
extern unsigned char D_800B9A13;
extern u16 D_80115110;
extern u16 D_80115112;
extern s16 D_80115126;
extern s16 D_801A3328;
extern void *D_8011DB24;
extern void func_8013E5E8(void);
void *func_ptr;
D_800B9A15 = 1;
D_80115112 = 7;
D_800B9A13 = 1;
func_ptr = func_8013E5E8;
D_80115110 = 0;
D_80115126 = (s16)a0;
D_801A3328 = 0;
D_8011DB24 = func_ptr;
}
extern void func_80029444(void);
+4 -1
View File
@@ -3282,7 +3282,10 @@ void func_80180650(s32 a0, s32 out) {
}
INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8017F690", func_80180720);
s32 func_80180720(s32 a0) {
return -a0 & 0xFFF;
}
extern s32 func_80047948(s32 a0);
extern s32 func_8004787C(s32 a0);
+21 -1
View File
@@ -8266,7 +8266,27 @@ s32 func_8018AD20(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_8018AD8C);
#include "common.h"
extern void func_8012AD44(s32 *a0, s16 a1);
extern void func_8018A4C4(s32 a0);
extern s32 D_801E4A58[];
void func_8018AD8C(s32 arg0, s32 arg1)
{
s32 s0 = D_801E4A58[arg0];
if (s0 != 0) {
*(s16 *)(s0 + 0xFE) = arg1;
*(s32 *)(s0 + 0xC) = 0;
*(s32 *)(s0 + 8) = 0;
*(s32 *)(s0 + 4) = 0;
*(s16 *)(s0 + 0xFC) = 1;
func_8012AD44((s32 *)s0, 2);
func_8018A4C4(s0);
}
}
#include "common.h"
+8 -1
View File
@@ -5860,7 +5860,14 @@ void func_801839C8(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8017D898", func_80183A40);
void func_80183A40(s32 arg0) {
void **fp = *(void ***)(*(s32 *)((s32)arg0 + 0x64) + 0xDC);
if (fp != NULL && *fp != NULL) {
(*(void (*)(void)) * fp)();
}
}
INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8017D898", func_80183A88);
+78 -3
View File
@@ -6704,7 +6704,19 @@ void func_80180ECC(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_80180FA0);
extern void func_80188A14(void *a0, s32 a1, s32 a2);
extern s32 func_801886A0(s32 arg0);
extern s32 func_80187A64(s32 a0);
void func_80180FA0(void *arg0) {
func_80188A14(arg0, 0xC, 1);
if (func_801886A0(0xC)) {
if (func_80187A64((s32)arg0)) {
func_80180B1C((s32)arg0);
}
}
}
#include "common.h"
@@ -7613,9 +7625,72 @@ extern void func_80187778(s32*, s32);
}
INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_801826B8);
extern void func_8012E88C(s32);
extern void func_8012A828(s32, s32);
extern void func_80187750(s32);
void func_801826B8(void *arg0) {
extern s16 D_801C36E8;
*(short *)((char *)arg0 + 0x2) = 0xA;
func_8012E88C((s32)arg0);
func_8012A828((s32 *)arg0, (s32)&D_801C36E8);
func_80187750((s32)arg0);
*(short *)((char *)arg0 + 0x34) = 0;
}
extern s32 func_80187A64(s32 a0);
extern s32 func_801886A0(s32 a0);
extern short D_80191D6C;
extern u8 D_801B9360[];
extern u8 D_801B93A4[];
extern u8 D_801B93F4[];
extern void func_80187778(s32*, s32);
extern void func_80187994(s32, s32, s32, s32);
void func_80182704(void *a0)
{
switch (*(u16 *)((s32)a0 + 0x34)) {
case 0:
if (func_801886A0(0xD) == 0) {
return;
}
*(u16 *)((s32)a0 + 0x34) = 1;
func_80187994((s32)a0, (s32)D_801B93F4, 1, 0x80);
return;
case 1:
func_801886A0(0xD);
if (((s32 (*)(s32))func_80187A64)((s32)a0) == 0) {
return;
}
*(u16 *)((s32)a0 + 0x34) = 2;
func_80187994((s32)a0, (s32)D_801B93A4, 1, 0x80);
return;
case 2:
if (((s32 (*)(s32))func_80187A64)((s32)a0) == 0) {
return;
}
*(u16 *)((s32)a0 + 0x34) = 3;
*(s32 *)((s32)a0 + 0x1C) = 0x20;
return;
case 3:
if (func_801886A0(3) == 0) {
return;
}
*(u16 *)((s32)a0 + 0x34) = 4;
func_80187994((s32)a0, (s32)D_801B9360, 1, 0x80);
return;
case 4:
func_801886A0(3);
if (((s32 (*)(s32))func_80187A64)((s32)a0) == 0) {
return;
}
*(u16 *)((s32)a0 + 0x2) = 1;
func_80187778((s32 *)a0, (s32)&D_80191D6C);
return;
}
}
INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_80182704);
extern void (*D_80191E0C[])(void);
+63 -1
View File
@@ -3732,4 +3732,66 @@ void func_801898E4(void)
}
INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80189030", func_8018A270);
void func_8018A270(void) {
extern s32 D_801151D0;
extern s32 D_801151C8[];
extern u16 xf02 __asm__("D_800B9A02");
extern s16 xa __asm__("D_8011511A");
extern u16 xb __asm__("D_8011511A");
extern s32 func_8014168C(s32 a0);
extern u8 D_80115138[];
extern s32 D_801EF1E0;
extern s32 D_80115130;
extern void func_80139954(void);
extern s32 func_801376E8(s32 a0, s32 a1);
extern s32 D_801C17F0;
extern s32 D_801EF1E4;
extern void func_80137B80(void);
extern s32 func_8018AEE8(void);
extern void func_8018B238(void);
extern s32 func_8018B8DC(s32 a0, s32 a1);
extern u8 D_800B9A15;
extern s16 D_801EEB10;
extern u16 D_80115112;
s32 pad[2];
s32 v;
s32 r2;
s32 ret;
s16 rn;
s32 b;
s32 *p30;
u16 *p12;
D_801151D0 = ((s32 *)D_801151C8)[xf02];
ret = func_8018AEE8();
func_8018B238();
r2 = func_8014168C(xa);
b = D_80115138[xb];
if (D_801EF1E0 == 0) {
v = func_8018B8DC(b, (s16)r2);
} else {
v = D_801EF1E0;
}
if (v != 0) {
p30 = &D_80115130;
if (v != *p30) {
*p30 = v;
func_80139954();
D_801EF1E4 = func_801376E8(v, &D_801C17F0);
}
}
func_80137B80();
rn = ret;
if (rn < 0) {
func_80139954();
D_800B9A15 = 0;
if (D_801EEB10 == 0) {
func_8002D4C8(0x474, 0);
}
p12 = &D_80115112;
*p12 += 2;
}
}
+10 -1
View File
@@ -4961,7 +4961,16 @@ s32 aF80181990(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8017D604", func_80181A10);
void func_80181A10(void *a0)
{
s32 v0;
*(s32 *)(*(s32 *)((s32)a0 + 0xCC) + 0xB0) = 2;
v0 = func_8018317C(5, 0, 5, 0x1E);
if (v0 != 0) {
func_80181548(a0);
}
}
extern s32 func_80029504(void);
extern int func_80178970(void);
+71 -2
View File
@@ -7502,7 +7502,30 @@ extern s32 func_8012BEE8(s32 arg);
}
INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8017AE2C", func_80182AFC);
extern s32 func_8012BEE8(s32 a0);
extern s32 func_8012BCCC(s32 a0);
extern void func_8012A828(s32 a0, void *a1);
extern u8 D_801CAF38[];
void func_80182AFC(s32 param_1) {
s32 ret;
s32 cnt;
if (func_8012BEE8(param_1) == 1) {
ret = func_8012BCCC(param_1);
if (ret < 0x9001) {
func_801824FC(param_1);
} else {
cnt = *(u16 *)(param_1 + 0xDC) + 1;
*(u16 *)(param_1 + 0xDC) = cnt;
if (((s16)cnt >= 0x79) && (ret > 0x24000)) {
*(u16 *)(param_1 + 2) = 1;
func_8012A828(param_1, D_801CAF38);
}
}
}
}
// @class: plumbing
@@ -7602,7 +7625,53 @@ void func_80182D04(int param_1)
}
INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8017AE2C", func_80182D88);
extern void func_8012ADE4(u8 *a0);
extern s32 func_8012BC60(void *a0, void *a1);
extern s32 func_8012B6D4(s16 *a0, s16 *a1);
extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3);
extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2);
void func_80182D88(s32 arg0) {
extern u8 D_801202A0[];
u8 *p;
s32 i;
s16 *self4;
unsigned int *sc;
s16 v10[4]; /* sp+0x10 */
s16 v18[4]; /* sp+0x18 */
s32 sp20[2]; /* sp+0x20 */
p = D_801202A0;
i = 0;
self4 = (s16 *)(arg0 + 4);
sc = (unsigned int *)sp20;
do {
if (*(u16 *)p != 0 && *(s32 *)(p + 0x58) != 0 && (u8 *)arg0 != p) {
if (func_8012BC60((void *)self4, (void *)(p + 4)) < 0x1000) {
func_8012B0B4(sc, func_8012B6D4(self4, (s16 *)(p + 4)), 0x41);
v18[0] = *(u16 *)(p + 6);
v18[1] = *(u16 *)(p + 0xA);
v18[2] = *(u16 *)(p + 0xE);
v18[0] += sp20[0];
v18[2] += sp20[0] >> 16;
v10[0] = *(u16 *)(arg0 + 0x3A);
v10[1] = *(u16 *)(arg0 + 0x3E);
v10[2] = *(u16 *)(arg0 + 0x42);
if ((func_8012CEB0((s32)v10, (s32)v18, 0) & 0x2000) == 0) {
func_8012ADE4((u8 *)arg0);
return;
}
*(u16 *)(arg0 + 6) = v18[0];
*(u16 *)(arg0 + 0xA) = v18[1];
*(u16 *)(arg0 + 0xE) = v18[2];
return;
}
}
i++;
p += 0x10C;
} while (i < 0x60);
}
extern void func_8002D4C8(s32 arg0, s32 arg1);
void func_80182F00(void) {
+9 -1
View File
@@ -4789,7 +4789,15 @@ void func_80180228(void *a0) {
void func_80180324(void) {
}
INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8017C730", func_8018032C);
extern s32 func_8012E544(s32 a0);
extern s32 func_80178BF8();
void func_8018032C(void) {
s32 v0 = func_8012E544(0x106);
*(s16 *) (v0 + 2) = 2;
func_80178BF8();
}
void func_80180358(void *a0) {
*(short *)((char *)a0 + 0x2) = 0x4;
+45 -1
View File
@@ -5342,7 +5342,51 @@ void func_80181F7C(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8017DF84", func_80182108);
extern s32 func_80132EF4(s32 a0, s32 a1);
void func_80182108(s32 arg0)
{
s32 s0;
for (s0 = 0; s0 < 0x49; s0 += 0x18) {
s32 a1 = func_80132EF4(arg0, 0x22);
if (a1 == 0)
continue;
{
register s32 v0 __asm__("v0");
register s32 v1 __asm__("v1");
register s32 a0 __asm__("a0");
v0 = *(u16 *)(arg0 + 0x84);
a0 = *(u16 *)(a1 + 0xE);
v0 &= 0x4;
v1 = v0 * 2;
__asm__("":"=r"(v1):"0"(v1));
v1 = v1 + v0;
v1 = s0 + v1;
v1 = v1 - 0x2A;
v0 = *(u16 *)(a1 + 0x6);
a0 += 0x28;
*(u16 *)(a1 + 0xE) = a0;
v0 -= v1;
*(u16 *)(a1 + 0x6) = v0;
v0 = *(u16 *)(a1 + 0xA);
v1 = v1 << 16;
v0 -= 0x20;
*(u16 *)(a1 + 0xA) = v0;
v0 = v1 >> 16;
if (v0 >= 0) {
v0 = v0 << 7;
} else {
v0 = v0 << 7;
v0 = -v0;
}
v0 += 0x1000;
*(u16 *)(a1 + 0x34) = v0;
*(s32 *)(a1 + 0x14) = 0xFFFE0000;
*(s32 *)(a1 + 0x18) = 0x30000;
}
}
}
#include "common.h"
+63 -1
View File
@@ -2914,7 +2914,69 @@ void func_801828B8(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80182268", func_80182968);
/* 8 bytes, align 2 -> lwl/lwr/swl/swr copy (cookbook §48-C2) */
extern u16 func_80148800(s32 *a0);
extern void func_80182B48(s32 param_1, s16 *param_2);
extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3);
void func_80182968(s32 a0) {
extern s32 D_80126B58;
extern s16 D_8019071C[];
extern Blk8_80126940_8017D6D0_80182A98 D_80126940;
Blk8_80126940_8017D6D0_80182A98 sp10;
u8 t;
s16 v1;
register s16 c __asm__("$4"); /* clamp store value — target stores every bound from $a0 */
if (func_80148800(&D_80126B58) & 3) {
t = (*(u8 *)(a0 + 5) + 1) & 1;
*(u8 *)(a0 + 5) = t;
*(s32 *)(a0 + 0x14) = D_8019071C[t];
}
sp10 = D_80126940;
v1 = sp10.v[0];
if (v1 >= 0x440) {
if (v1 < 0x500) {
*(s16 *)(a0 + 0x2E) = 0x500 - v1;
} else {
*(s16 *)(a0 + 0x2E) = 0;
}
} else {
*(s16 *)(a0 + 0x2E) = 0;
}
*(s16 *)(a0 + 0x28) = (s16)func_80012F74(*(s16 *)(a0 + 0x28), *(s16 *)(a0 + 0x2E), 4, 1);
{
s16 lo = 0x380;
if (sp10.v[0] < lo) {
c = lo;
sp10.v[0] = c;
}
}
{
s16 lim = 0x580;
if (lim < sp10.v[0]) {
c = lim;
sp10.v[0] = c;
}
}
{
s16 lo2 = 0xC0;
if (sp10.v[2] < lo2) {
c = lo2;
sp10.v[2] = c;
}
}
func_80182B48(a0, sp10.v);
}
/* 8 bytes, align 2 -> lwl/lwr/swl/swr copy (cookbook §48-C2) */
+42 -1
View File
@@ -3488,7 +3488,48 @@ void func_8017D3B8(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8017BEBC", func_8017D458);
typedef struct { s16 v[4]; } Blk8_80126940_8017D458;
void func_8017D458(s32 a0) {
extern s32 D_80126B58;
extern s16 D_8018B48C[];
extern Blk8_80126940_8017D458 D_80126940;
Blk8_80126940_8017D458 sp10;
u8 t;
s16 v0, v1, lim;
if (func_80148800(&D_80126B58) & 3) {
t = (*(u8 *)(a0 + 5) + 1) & 1;
*(u8 *)(a0 + 5) = t;
*(s32 *)(a0 + 0x14) = D_8018B48C[t];
}
sp10 = D_80126940;
/* Clamp sp10.v[0] */
lim = -0x5C0;
v0 = sp10.v[0];
if (v0 < lim) {
sp10.v[0] = lim;
}
/* Clamp sp10.v[0] */
v1 = sp10.v[0];
lim = -0x5C0;
if (lim < v1) {
sp10.v[0] = lim;
}
/* Clamp sp10.v[2] */
v1 = sp10.v[2];
lim = 0x1340;
if (lim < v1) {
sp10.v[2] = lim;
}
func_8017D6D0(a0, sp10.v);
}
INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8017BEBC", func_8017D544);
+6 -1
View File
@@ -5154,7 +5154,12 @@ void func_80181778(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8017D898", func_801819DC);
void func_801819DC(s32 a0)
{
*(u16 *)(a0 + 0x2) = 1;
*(u16 *)(a0 + 0x5C) = 0xA810;
}
extern s32 rand(void);
+13 -1
View File
@@ -6030,7 +6030,19 @@ extern void func_80178CBC(s32 *a0, s32 a1);
}
INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8017AE2C", func_80180BB0);
extern int func_80178970(void);
extern void func_80178D18(void);
void func_80180BB0(void *a0) {
extern u32 D_8018FE2C;
if (func_80178970() != 0) {
((void (*)(s32))func_80178D18)((s32)a0);
*(short *)((char *)a0 + 0x2) = 1;
*(s32 *)((char *)a0 + 0x58) = (s32)&D_8018FE2C | 0x40000000;
*(short *)((char *)a0 + 0x5C) = 0x800;
}
}
extern s32 func_80029504(void);
extern void func_8012C1B8(void);
+16 -1
View File
@@ -3010,7 +3010,22 @@ void func_80181EC4(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80181B44", func_80181F2C);
extern s32 func_801842D4(s32 arg0, s32 arg1);
extern u8 D_80078EBA;
void func_80181F2C(void *a0) {
s32 v0;
*(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2;
if (D_80078EBA == 3) {
v0 = 0;
} else {
v0 = func_801842D4(7, 0x13) != 0;
}
if (v0 != 0) {
*(s16 *)((s32)a0 + 2) = 1;
}
}
extern s32 func_8012E57C(s32 a0, s32 a1);
extern s32 func_801842D4(s32 arg0, s32 arg1);
+22 -1
View File
@@ -3904,7 +3904,28 @@ extern s32 func_8012AD50(void *a0);
}
INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8017D604", func_8017FD98);
extern void func_8017FE60();
void func_8017FD98(void *a0) {
typedef struct { short vx, vy, vz, pad; } SVFD98;
extern SVFD98 D_801C2D6C;
extern SVFD98 D_801C2D74;
extern void func_80015978(s32 a0, s32 *a1);
SVFD98 buf10;
SVFD98 buf18;
SVFD98 buf20;
buf10 = D_801C2D6C;
buf18 = D_801C2D74;
if (*(s16 *)((s32)a0 + 0xFC) == 0) {
func_8017FE60(&buf10, &buf18);
} else {
func_80015978((s32)a0 + 4, (s32 *)&buf20);
func_8017FE60(&buf10, &buf20);
func_8017FE60(&buf20, &buf18);
}
}
/* identical layout to SVECTOR_8016E7C8 (src/shared/engine_types.h) */
+7 -1
View File
@@ -4941,7 +4941,13 @@ void func_8017F470(s32 param_1) {
INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8017BEBC", func_8017F4EC);
INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8017BEBC", func_8017F534);
extern void func_8017F55C(s32 a0, s32 a1);
extern u8 D_8018C054[];
void func_8017F534(s32 arg0) {
func_8017F55C(arg0, D_8018C054);
}
typedef struct { s16 m[3][3]; s32 t[3]; } MTX_8017F55C; /* 0x20 bytes, align 4 */
+1 -120
View File
@@ -5488,126 +5488,7 @@ void func_801826E4(s32 param_1)
}
void func_801827DC(s32 param_1)
{
extern void func_80186C1C(void);
extern void func_80183F10(void);
extern void func_8018BA9C(void);
extern void func_80183EA8(void);
extern void func_8018BAC4(void);
extern void func_80182D34(s32 a0);
extern void func_8018AC00(void *a0);
extern void func_8012BEE8(u8 *a0);
extern void func_8013C9C4(void *a0);
extern void func_8018637C(s32 arg0, s32 arg1);
extern void func_8002D4C8(s32 a0, s32 a1);
extern void func_8018B9D4();
extern void func_80182AF8();
extern void *D_80194500[][3];
extern s32 aFC4C[] __asm__("D_801EFC4C");
extern s32 D_801EFC54;
extern s32 D_801EFC5C;
extern s32 D_801EFC60;
extern s32 D_801EFC64[];
extern s32 D_801EFC68;
extern s32 D_801EFD28;
extern u16 D_801EFD40;
extern u8 D_80190B88[];
s32 r;
s32 obj;
u16 t;
u16 f;
switch (*(u16 *)(param_1 + 0x34)) {
case 0:
case 1:
if (*(s16 *)(param_1 + 0x98) == 0) {
func_8018637C(param_1, (s32)D_80194500[*(s16 *)(param_1 + 0xE2)][*(u16 *)(param_1 + 0x34) + 1]);
goto incr;
}
goto draw;
case 2:
if (*(s32 *)(param_1 + 0x94) != 0xB) {
goto draw;
}
func_80186C1C();
*(s16 *)(param_1 + 0x76) = 0x64;
*(s32 *)(param_1 + 0x1C) = 0x80;
*(s16 *)(param_1 + 0xF2) = 1;
*(s16 *)(param_1 + 0xE2) = (s16)*(u16 *)(param_1 + 0xE2) >> 1;
func_8013C9C4(D_80190B88);
func_8018AC00((void *)aFC4C[0]);
func_8018AC00((void *)D_801EFC54);
func_8018AC00((void *)D_801EFC5C);
func_8018AC00((void *)D_801EFC60);
func_8018AC00((void *)D_801EFC64[0]);
func_8018AC00((void *)D_801EFC68);
func_8002D4C8(0x907, 0);
incr:
*(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1;
draw:
func_8018B9D4(D_801EFC54, *(s32 *)(param_1 + 0xD0));
return;
case 3:
if (*(s16 *)(param_1 + 0x76) == 0) {
t = *(u16 *)(param_1 + 0xF6) - 1;
*(u16 *)(param_1 + 0xF6) = t;
*(s16 *)&D_801EFD28 = (s16)t * 100;
func_80183F10();
obj = *(s32 *)(param_1 + 0xD0);
if (obj != 0) {
*(u16 *)(obj + 0x1A) = 0x800;
*(u16 *)(obj + 0x18) = 0x800;
}
func_8018BA9C();
*(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1;
if (*(s16 *)(param_1 + 0xF6) == 0) {
f = D_801EFD40;
*(s32 *)(param_1 + 0x1C) = 8;
D_801EFD40 = f | 0x100;
return;
}
*(s32 *)(param_1 + 0x1C) = 0x10;
return;
}
r = ((s32 (*)(s32))func_8012BEE8)((s32)param_1);
if (r == 0) {
if (((*(s32 *)(param_1 + 0x1C) & 0xF) == 0) && (*(s16 *)(param_1 + 0xF2) != 0)) {
*(s16 *)(param_1 + 0xF2) = *(s16 *)(param_1 + 0xF2) - 1;
func_8013C9C4(D_80190B88);
}
func_8018B9D4(D_801EFC54, *(s32 *)(param_1 + 0xD0));
if ((*(s32 *)(param_1 + 0x1C) & 1) != 0) {
return;
}
func_80183EA8();
return;
}
goto L_af8;
case 4:
r = ((s32 (*)(s32))func_8012BEE8)((s32)param_1);
if (r != 0) {
if (*(s16 *)(param_1 + 0xF6) == 0) {
func_80182D34(param_1);
return;
}
L_af8:
func_80182AF8(param_1);
return;
}
obj = *(s32 *)(param_1 + 0xD0);
if (obj != 0) {
t = *(u16 *)(obj + 0x18) + 0x600;
*(u16 *)(obj + 0x18) = t;
*(u16 *)(obj + 0x1A) = t;
}
func_8018BAC4();
return;
default:
return;
}
}
INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_801827DC);
INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_80182AF8);
+64 -2
View File
@@ -3399,7 +3399,27 @@ void func_801835FC(void *a0) {
}
INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80182A74", func_801836A4);
extern s32 func_801848D0(u8 a0, u8 a1, u8 a2, u8 a3);
extern void func_8012E88C(s32);
extern void func_8012A828(s32, s32);
extern void func_80184990(s32);
extern void func_80184BD4(s32, s32, s32, s32);
extern u8 D_801B680C[];
void func_801836A4(void *arg0) {
extern short D_801B9964;
if (func_801848D0(0xB, 0, 0xE, 0xF) != 0) {
return;
}
*(short *)((char *)arg0 + 0x2) = 0xB;
*(short *)((char *)arg0 + 0x34) = 0;
func_8012E88C((s32)arg0);
((void (*)(s32 *, s32))func_8012A828)((s32 *)arg0, (s32)&D_801B9964);
func_80184990((s32)arg0);
func_80184BD4((s32)arg0, (s32)D_801B680C, 1, 0x60);
}
extern int func_80178970(void);
@@ -3478,7 +3498,49 @@ void func_80183830(void *a0) {
}
INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80182A74", func_801838A0);
extern s32 func_801831C8(void *a0);
void func_801838A0(void *a0) {
s32 v0;
void *v1;
extern s32 func_801844BC(void *a0, void *a1);
extern s32 func_801848D0(u8 a0, u8 a1, u8 a2, u8 a3);
extern void func_8012E8E0(s32 a0, s32 a1);
extern void func_8012E88C(s32 a0);
extern void func_8012A828(s32, s32);
extern void func_80184990(s32 a0);
extern void func_801849B8(s32 *a0, s32 a1);
extern s32 func_801788B8(s32 arg0, s32 arg1);
extern u16 D_80191ED0;
extern s16 D_80191EC0;
extern s16 D_80191EC8;
extern s16 D_801B990C;
if (func_801844BC(a0, &D_80191ED0) != 0) {
v0 = func_801848D0(0xB, 0, 0xE, 0xF);
if (v0 != 0) {
*(s16 *)((char *)a0 + 0x2) = 8;
func_8012E8E0((s32)a0, (s32)&D_80191EC8);
func_8012E88C((s32)a0);
func_8012A828((s32)a0, (s32)&D_801B990C);
func_80184990((s32)a0);
} else {
v0 = func_801848D0(0xE, 0xF, 0x17, 0);
if (v0 != 0) {
v0 = 2;
} else {
v0 = 1;
}
*(s16 *)((char *)a0 + 0x2) = v0;
func_801849B8((s32 *)a0, (s32)&D_80191EC0);
}
v1 = *(void **)((char *)a0 + 0x68);
*(s16 *)((char *)v1 + 0xC) = 0x7FFF;
*(s32 *)((char *)a0 + 0xD4) = func_801788B8((s32)a0, (s32)&func_801831C8);
}
}
extern void func_801849B8(s32*, s32);
+29 -1
View File
@@ -3546,7 +3546,35 @@ void func_801862B0(u8 *a0) {
}
INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80185754", func_801862F8);
void func_801862F8(s32 arg0) {
extern s32 func_80029504(void);
extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2);
extern void func_8012C218(void *a0);
s32 flag;
s32 r;
r = func_80029504();
flag = 0;
switch (*(s16 *)((s32)arg0 + 0x70)) {
case 0:
if ((u32)(r - 0x64) < 0x1E) {
flag = 1;
}
break;
case 1:
if ((u32)(r - 0x3B6) < 0x32) {
flag = 1;
}
break;
}
if (flag != 0) {
func_8012C658(0x21, 1 - *(u16 *)((s32)arg0 + 2), arg0);
func_8012C218((void *)arg0);
} else if (*(u16 *)((s32)arg0 + 2) == 0) {
*(u16 *)((s32)arg0 + 2) = *(u16 *)((s32)arg0 + 2) + 1;
}
}
+24 -1
View File
@@ -3504,7 +3504,30 @@ void func_8017DC18(void) {
INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8017C24C", func_8017DC30);
INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8017C24C", func_8017DCC4);
extern s16 D_80126CB0;
extern s16 D_80126CAC;
int func_8017DCC4(s16 *a0) {
int data[3];
data[0] = D_80126CAC - a0[3];
data[1] = 0;
data[2] = D_80126CB0 - a0[7];
__asm__ __volatile__(
"lwc2 $9, 0($sp)\n"
"lwc2 $10, 4($sp)\n"
"lwc2 $11, 8($sp)\n"
"nop\n"
"nop\n"
"sqr 0\n"
: : : "$9", "$10", "$11", "memory");
__asm__ __volatile__(
"swc2 $25, 0($sp)\n"
"swc2 $26, 4($sp)\n"
"swc2 $27, 8($sp)\n"
: : : "memory");
return 0xC3FFF < data[0] + data[1] + data[2];
}
void func_8017DD48(void) {
extern u8 D_801202A0[];
+125 -2
View File
@@ -3558,7 +3558,93 @@ void func_80187588(s32 p) {
}
INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80186574", func_80187624);
#define gte_SetRotMatrix(r0) __asm__ volatile ( \
"lw $12, 0( %0 );" \
"lw $13, 4( %0 );" \
"ctc2 $12, $0;" \
"ctc2 $13, $1;" \
"lw $12, 8( %0 );" \
"lw $13, 12( %0 );" \
"lw $14, 16( %0 );" \
"ctc2 $12, $2;" \
"ctc2 $13, $3;" \
"ctc2 $14, $4" \
: \
: "r"( r0 ) \
: "$12", "$13", "$14" )
#define gte_SetTransMatrix(r0) __asm__ volatile ( \
"lw $12, 20( %0 );" \
"lw $13, 24( %0 );" \
"ctc2 $12, $5;" \
"lw $14, 28( %0 );" \
"ctc2 $13, $6;" \
"ctc2 $14, $7" \
: \
: "r"( r0 ) \
: "$12", "$13", "$14" )
void func_80187624(s32 param_1)
{
extern s32 *D_80126B78;
extern s32 *D_80126B90;
extern u8 D_801152A8[];
extern u8 D_801AFCF8[];
extern void func_80049CAC(s32 a0, s32 a1);
extern void RotTransSV(void *a0, void *a1, void *a2);
extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3);
extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5);
extern s32 func_8012CBF4(s32 a0);
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern s32 func_80132EF4(s32 a0, s32 a1);
extern s32 func_8012BEE8(s32 a0);
extern void func_8012C218(void *a0);
MATRIX mat;
SVECTOR sv;
SVECTOR b;
SVECTOR c;
SVECTOR flag;
s32 iVar;
sv.vx = *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10);
sv.vy = *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12);
sv.vz = 0;
func_80049CAC((s32)&sv, (s32)&mat);
gte_SetRotMatrix(&mat);
gte_SetTransMatrix(*(s32 *)(param_1 + 0x20) + 0x34);
RotTransSV(&D_801AFCF8[0], &b, &flag);
RotTransSV(&D_801AFCF8[8], &c, &flag);
if (func_80135888((s32)D_80126B78, (s32)D_80126B90, (s32)&b, (s32)&c) != 0) {
s16 sVar1 = *(s16 *)(param_1 + 0xFE);
func_8012F568(1, 1, sVar1, 0x50, (s32)&c, (s32)D_801152A8);
} else {
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x14) =
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x14) - 0x100;
iVar = func_8012CBF4(param_1);
if (iVar != 0) {
s16 sVar1 = *(s16 *)(param_1 + 6);
s16 sVar2 = *(s16 *)(param_1 + 0xA);
s16 sVar3 = *(s16 *)(param_1 + 0xE);
func_80146A6C(6, (void *)param_1, sVar1, sVar2, sVar3, 0, 0);
iVar = func_80132EF4(param_1, 0x22);
if (iVar != 0) {
*(u16 *)(iVar + 0x34) = 0x2000;
}
} else {
iVar = func_8012BEE8(param_1);
if (iVar == 0) {
return;
}
}
}
func_8012C218((void *)param_1);
}
@@ -3821,7 +3907,44 @@ void func_80187A88(s32 a0, s32 a1) {
INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80186574", func_80187D0C);
INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80186574", func_80187DA4);
extern s32 func_8012C51C(void *a0, s32 a1);
typedef struct {
u16 f10; /* 0x10 */
u16 f12; /* 0x12 */
u16 f14; /* 0x14 */
s16 f16; /* 0x16 */
s16 f18; /* 0x18 */
s16 f1a; /* 0x1A */
s16 f1c; /* 0x1C */
u16 f1e; /* 0x1E */
s32 f20; /* 0x20 */
} buf_80187DA4;
void func_80187DA4(a0, a1, a2, a3, a4, a5)
s32 a0;
void *a1;
s32 a2;
s32 a3;
u16 a4;
s32 a5;
{
buf_80187DA4 sp;
u16 t;
sp.f10 = *(u16 *)a1;
sp.f12 = *(u16 *)(2 + (char *)a1);
t = *(u16 *)(4 + (char *)a1);
sp.f16 = a2;
sp.f18 = a3;
sp.f1a = 0;
sp.f1e = a4;
sp.f20 = a5;
sp.f1c = 0x7FFF;
sp.f14 = t;
func_8012C51C(&sp, a0);
}
INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80186574", func_80187E08);
+4 -1
View File
@@ -5043,7 +5043,10 @@ void func_801817E0(s32 arg0)
}
INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80181834);
s32 func_80181834(s32 arg0) {
return -(arg0 < 0x640) & 0x98;
}
void func_80181844(void) {
}