feat(decomp): ox wave cm overlays — 30 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 04:24:00 -06:00
parent 235cac48e6
commit 69d2611903
16 changed files with 5178 additions and 1424 deletions
+1 -1
View File
@@ -3922,7 +3922,7 @@ ov_SC05_017_ELF := $(ov_SC05_017_OUT).elf
ov_SC05_017_MAPFILE := $(ov_SC05_017_OUT).map
ov_SC05_017_LD_SCRIPT := $(ov_SC05_017_OUT).ld
ov_SC05_017_SPLAT_YAML := config/splat.ov_SC05_017.yaml
ov_SC05_017_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_017.o,ov_SC05_017_jr_8012ACE0.o,tail2.data.o,ov_SC05_017_jr_80135888.o,tail3.data.o,ov_SC05_017_jr_80135A4C.o,tail4.data.o,ov_SC05_017_jr_80135D20.o,tail5.data.o,ov_SC05_017_jr_801380E0.o,ov_SC05_017_o0c.o,tail6.data.o,ov_SC05_017_jr_8013F350.o,tail7.data.o,ov_SC05_017_jr_8013FFD8.o,tail8.data.o,ov_SC05_017_jr_80140608.o,tail9.data.o,ov_SC05_017_jr_8015444C.o,ov_SC05_017_jr_80154C24.o,ov_SC05_017_jr_801588CC.o,ov_SC05_017_jr_80159C84.o,tail10.data.o,ov_SC05_017_jr_8015A3C8.o,tail11.data.o,ov_SC05_017_jr_8015AE2C.o,tail12.data.o,ov_SC05_017_jr_8015C32C.o,tail13.data.o,ov_SC05_017_jr_8016AB6C.o,tail14.data.o,ov_SC05_017_jr_80171B4C.o,ov_SC05_017_jr_801734BC.o,tail15.data.o,ov_SC05_017_jr_801789AC.o,ov_SC05_017_jr_80178D40.o,tail16.data.o,ov_SC05_017_jr_8017A4AC.o,tail17.data.o,ov_SC05_017_jr_8017AE2C.o,tail18.data.o,ov_SC05_017_jr_801828EC.o,tail19.data.o,ov_SC05_017_jr_80182A74.o,ov_SC05_017_jr_80185A70.o,tail20.data.o,ov_SC05_017_jr_80186270.o,tail21.data.o,ov_SC05_017_jr_801875E8.o,ov_SC05_017_jr_80188B1C.o,tail22.data.o,ov_SC05_017_jr_8018C694.o,tail23.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
ov_SC05_017_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_017.o,ov_SC05_017_jr_8012ACE0.o,tail2.data.o,ov_SC05_017_jr_80135888.o,tail3.data.o,ov_SC05_017_jr_80135A4C.o,tail4.data.o,ov_SC05_017_jr_80135D20.o,tail5.data.o,ov_SC05_017_jr_801380E0.o,ov_SC05_017_o0c.o,tail6.data.o,ov_SC05_017_jr_8013F350.o,tail7.data.o,ov_SC05_017_jr_8013FFD8.o,tail8.data.o,ov_SC05_017_jr_80140608.o,tail9.data.o,ov_SC05_017_jr_8015444C.o,ov_SC05_017_jr_80154C24.o,ov_SC05_017_jr_801588CC.o,ov_SC05_017_jr_80159C84.o,tail10.data.o,ov_SC05_017_jr_8015A3C8.o,tail11.data.o,ov_SC05_017_jr_8015AE2C.o,tail12.data.o,ov_SC05_017_jr_8015C32C.o,tail13.data.o,ov_SC05_017_jr_8016AB6C.o,tail14.data.o,ov_SC05_017_jr_80171B4C.o,ov_SC05_017_jr_801734BC.o,tail15.data.o,ov_SC05_017_jr_801789AC.o,ov_SC05_017_jr_80178D40.o,tail16.data.o,ov_SC05_017_jr_8017A4AC.o,tail17.data.o,ov_SC05_017_jr_8017AE2C.o,tail18.data.o,ov_SC05_017_jr_801808D4.o,ov_SC05_017_jr_801828EC.o,tail19.data.o,ov_SC05_017_jr_80182A74.o,ov_SC05_017_jr_80185A70.o,tail20.data.o,ov_SC05_017_jr_80186270.o,tail21.data.o,ov_SC05_017_jr_801875E8.o,ov_SC05_017_jr_80188B1C.o,tail22.data.o,ov_SC05_017_jr_8018C694.o,tail23.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
build/src/ov_SC05_017/ov_SC05_017.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC05_017/ov_SC05_017_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0
build/src/ov_SC05_017/ov_SC05_017_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
+2
View File
@@ -120,6 +120,7 @@ segments:
- [0x50be8, c, ov_SC05_017_jr_80178D40]
- [0x52354, c, ov_SC05_017_jr_8017A4AC]
- [0x52cd4, c, ov_SC05_017_jr_8017AE2C]
- [0x5877c, c, ov_SC05_017_jr_801808D4]
- [0x5a794, c, ov_SC05_017_jr_801828EC]
- [0x5a91c, c, ov_SC05_017_jr_80182A74]
- [0x5d918, c, ov_SC05_017_jr_80185A70]
@@ -169,6 +170,7 @@ segments:
- [0xc3240, data, tail17]
- [0xc3244, .rodata, ov_SC05_017_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xc3278, data, tail18]
- [0xc3290, .rodata, ov_SC05_017_jr_801808D4] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xc32a4, .rodata, ov_SC05_017_jr_801828EC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xc32b8, data, tail19]
- [0xc32bc, .rodata, ov_SC05_017_jr_80182A74] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
+270 -2
View File
@@ -17,7 +17,134 @@ INCLUDE_RODATA("asm/md_MAIN_034/nonmatchings/md_MAIN_034", D_800CAE08);
INCLUDE_ASM("asm/md_MAIN_034/nonmatchings/md_MAIN_034", func_800CB00C);
INCLUDE_ASM("asm/md_MAIN_034/nonmatchings/md_MAIN_034", func_800CB1F8);
#include "common.h"
/* ---- PsyQ inline GTE macros (same spellings as the matched siblings
* func_800CBA18 / func_800CBC2C in this TU) ---- */
#define gte_ldv0(r0) __asm__ volatile ( \
"lwc2 $0, 0( %0 );" \
"lwc2 $1, 4( %0 )" \
: \
: "r"( r0 ) )
#define gte_ldv3(r0, r1, r2) __asm__ volatile ( \
"lwc2 $0, 0( %0 );" \
"lwc2 $1, 4( %0 );" \
"lwc2 $2, 0( %1 );" \
"lwc2 $3, 4( %1 );" \
"lwc2 $4, 0( %2 );" \
"lwc2 $5, 4( %2 )" \
: \
: "r"( r0 ), "r"( r1 ), "r"( r2 ) )
#define gte_ldrgb(r0) __asm__ volatile ( \
"lwc2 $6, 0( %0 )" \
: \
: "r"( r0 ) )
#define gte_rtpt() __asm__ volatile ("nop;nop;rtpt")
#define gte_nclip() __asm__ volatile ("nop;nop;nclip")
#define gte_avsz3() __asm__ volatile ("nop;nop;avsz3")
#define gte_nccs() __asm__ volatile ("nop;nop;nccs")
#define gte_stflg(r0) __asm__ volatile ( \
"cfc2 $12, $31;" \
"nop;" \
"sw $12, 0( %0 )" \
: \
: "r"( r0 ) \
: "$12", "memory" )
#define gte_stopz(r0) __asm__ volatile ( \
"swc2 $24, 0( %0 )" \
: \
: "r"( r0 ) \
: "memory" )
#define gte_stotz(r0) __asm__ volatile ( \
"swc2 $7, 0( %0 )" \
: \
: "r"( r0 ) \
: "memory" )
#define gte_stsxy3_f3(r0) __asm__ volatile ( \
"swc2 $12, 8( %0 );" \
"swc2 $13, 12( %0 );" \
"swc2 $14, 16( %0 )" \
: \
: "r"( r0 ) \
: "memory" )
#define gte_strgb(r0) __asm__ volatile ( \
"swc2 $22, 0( %0 )" \
: \
: "r"( r0 ) \
: "memory" )
/* ---- types ------------------------------------------------------------- */
typedef struct { s16 vx, vy, vz, pad; } SVEC8_800CB1F8; /* 0x08 */
/* face record, 0x10 bytes; word 1 is the face base colour */
typedef struct {
/* 0x00 */ u32 unk00;
/* 0x04 */ u32 rgb;
/* 0x08 */ u16 n0;
/* 0x0A */ u16 v0;
/* 0x0C */ u16 v1;
/* 0x0E */ u16 v2;
} Face10_800CB1F8; /* 0x10 */
typedef struct { /* flat tri packet, 0x14 bytes */
/* 0x00 */ u32 tag;
/* 0x04 */ u32 rgb0;
/* 0x08 */ u32 xy0;
/* 0x0C */ u32 xy1;
/* 0x10 */ u32 xy2;
} F3P_800CB1F8; /* 0x14 */
extern s16 D_800C7C74; /* double-buffer parity index */
extern u32 D_800CC9F8; /* flat colour used when func_800CC0A0() says so */
extern s32 func_800CC0A0(void *prim);
extern void func_800CC110(s32 ot, s32 otz, s32 shift, void *prim, u32 code);
F3P_800CB1F8 *func_800CB1F8(Face10_800CB1F8 *f, SVEC8_800CB1F8 *verts,
SVEC8_800CB1F8 *norms, F3P_800CB1F8 *prims,
s32 count, s32 shift, s32 ot)
{
struct { s32 flag, opz; } g;
F3P_800CB1F8 *prim;
prim = &prims[D_800C7C74];
for (; count != 0; count--, f++, prim += 2) {
gte_ldv3(&verts[f->v0], &verts[f->v1], &verts[f->v2]);
gte_rtpt();
gte_stflg(&g.flag);
if (!(g.flag & ~0x1000)) {
gte_nclip();
gte_stopz(&g.opz);
if (g.opz > 0) {
gte_stsxy3_f3(prim);
gte_avsz3();
gte_stotz(&g.opz);
if (func_800CC0A0(prim) != 0) {
prim->rgb0 = D_800CC9F8;
} else {
gte_ldrgb(&f->rgb);
gte_ldv0(&norms[f->n0]);
gte_nccs();
gte_strgb(&prim->rgb0);
}
func_800CC110(ot, g.opz, shift, prim, 0x4000000);
}
}
}
return prim;
}
INCLUDE_ASM("asm/md_MAIN_034/nonmatchings/md_MAIN_034", func_800CB3C0);
@@ -154,7 +281,148 @@ Prim1C_800CB5D0 *func_800CB5D0(Face14_800CB5D0 *f, SVEC8_800CB5D0 *verts,
}
INCLUDE_ASM("asm/md_MAIN_034/nonmatchings/md_MAIN_034", func_800CB7BC);
#define gte_ldv0(r0) __asm__ volatile ( \
"lwc2 $0, 0( %0 );" \
"lwc2 $1, 4( %0 )" \
: \
: "r"( r0 ) )
#define gte_ldrgb(r0) __asm__ volatile ( \
"lwc2 $6, 0( %0 )" \
: \
: "r"( r0 ) )
#define gte_ldv3(r0, r1, r2) __asm__ volatile ( \
"lwc2 $0, 0( %0 );" \
"lwc2 $1, 4( %0 );" \
"lwc2 $2, 0( %1 );" \
"lwc2 $3, 4( %1 );" \
"lwc2 $4, 0( %2 );" \
"lwc2 $5, 4( %2 )" \
: \
: "r"( r0 ), "r"( r1 ), "r"( r2 ) )
#define gte_rtps() __asm__ volatile ("nop;nop;rtps")
#define gte_rtpt() __asm__ volatile ("nop;nop;rtpt")
#define gte_nclip() __asm__ volatile ("nop;nop;nclip")
#define gte_avsz4() __asm__ volatile ("nop;nop;avsz4")
#define gte_ncct() __asm__ volatile ("nop;nop;ncct")
#define gte_nccs() __asm__ volatile ("nop;nop;nccs")
#define gte_stflg(r0) __asm__ volatile ( \
"cfc2 $12, $31;" \
"nop;" \
"sw $12, 0( %0 )" \
: \
: "r"( r0 ) \
: "$12", "memory" )
#define gte_stopz(r0) __asm__ volatile ( \
"swc2 $24, 0( %0 )" \
: \
: "r"( r0 ) \
: "memory" )
#define gte_stotz(r0) __asm__ volatile ( \
"swc2 $7, 0( %0 )" \
: \
: "r"( r0 ) \
: "memory" )
#define gte_stsxy(r0) __asm__ volatile ( \
"swc2 $14, 0( %0 )" \
: \
: "r"( r0 ) \
: "memory" )
#define gte_stsxy3_gt4(r0) __asm__ volatile ( \
"swc2 $12, 8( %0 );" \
"swc2 $13, 16( %0 );" \
"swc2 $14, 24( %0 )" \
: \
: "r"( r0 ) \
: "memory" )
#define gte_strgb(r0) __asm__ volatile ( \
"swc2 $22, 0( %0 )" \
: \
: "r"( r0 ) \
: "memory" )
#define gte_strgb3_gt4(r0) __asm__ volatile ( \
"swc2 $20, 4( %0 );" \
"swc2 $21, 12( %0 );" \
"swc2 $22, 20( %0 )" \
: \
: "r"( r0 ) \
: "memory" )
typedef struct { s16 vx, vy, vz, pad; } SVEC8_800CB7BC; /* 0x08 */
typedef struct { u32 unk00; u32 rgb; u16 n0, v0; u16 n1, v1; u16 n2, v2; u16 n3, v3; } FaceGT4_800CB7BC; /* 0x18 */
typedef struct {
u32 tag;
u32 rgb0, xy0;
u32 rgb1, xy1;
u32 rgb2, xy2;
u32 rgb3, xy3;
} PktGT4_800CB7BC; /* 0x24 */
extern s16 D_800C7C74;
extern u32 D_800CCA0C;
extern s32 func_800CC0A0(void *prim);
extern void func_800CC110(s32 ot, s32 otz, s32 shift, void *prim, u32 code);
PktGT4_800CB7BC *func_800CB7BC(FaceGT4_800CB7BC *face, SVEC8_800CB7BC *vtx,
SVEC8_800CB7BC *nrm, PktGT4_800CB7BC *prims,
s32 count, s32 shift, s32 ot)
{
struct { s32 flag, opz; } g;
PktGT4_800CB7BC *pkt;
pkt = &prims[D_800C7C74];
for (; count != 0; count--, face++, pkt += 2) {
gte_ldv3(&vtx[face->v0], &vtx[face->v1], &vtx[face->v2]);
gte_rtpt();
gte_stflg(&g.flag);
if (!(g.flag & ~0x1000)) {
gte_nclip();
gte_stopz(&g.opz);
if (g.opz > 0) {
gte_stsxy3_gt4(pkt);
gte_ldv0(&vtx[face->v3]);
gte_rtps();
gte_stflg(&g.flag);
if (!(g.flag & ~0x1000)) {
gte_stsxy(&pkt->xy3);
gte_avsz4();
gte_stotz(&g.opz);
if (func_800CC0A0(pkt) != 0) {
pkt->rgb0 = D_800CCA0C;
pkt->rgb1 = D_800CCA0C;
pkt->rgb2 = D_800CCA0C;
pkt->rgb3 = D_800CCA0C;
} else {
gte_ldrgb(&face->rgb);
gte_ldv3(&nrm[face->n0], &nrm[face->n0], &nrm[face->n0]);
gte_ncct();
gte_strgb3_gt4(pkt);
gte_ldv0(&nrm[face->n0]);
gte_nccs();
gte_strgb(&pkt->rgb3);
}
func_800CC110(ot, g.opz, shift, pkt, 0x08000000);
}
}
}
}
return pkt;
}
#include "common.h"
+33 -1
View File
@@ -531,4 +531,36 @@ void func_800CBCBC(void *a0)
}
INCLUDE_ASM("asm/md_MAIN_039/nonmatchings/md_MAIN_039", func_800CBD90);
extern void func_80146C3C(void);
extern s32 func_80128ED8(s32 param_1, s32 *param_2);
void func_800CBD90(void *arg0) {
s32 q;
u8 a;
u8 b;
u16 h;
q = *(s32 *)((s32)arg0 + 0x20);
a = *(u8 *)(q + 0x24) - 0x20;
*(u8 *)(q + 0x24) = a;
if (a < 0x80) {
*(u8 *)(q + 0x24) = 0x80;
}
b = *(u8 *)(q + 0x25) + 0x20;
*(u8 *)(q + 0x25) = b;
if (b > 0x80) {
*(u8 *)(q + 0x25) = 0x80;
}
h = *(u16 *)(q + 0x1A) + 0x400;
*(u8 *)(q + 0x26) = *(u8 *)(q + 0x25);
*(u16 *)(q + 0x1A) = h;
*(u16 *)(q + 0x18) = h;
if (func_80128ED8(q, (s32 *)((s32)arg0 + 0x24)) != 0) {
((void (*)(void *))func_80146C3C)(arg0);
}
}
+11 -1
View File
@@ -1470,7 +1470,17 @@ void func_801A5470(void *a0) {
}
INCLUDE_ASM("asm/md_SC07_004/nonmatchings/md_SC07_004", func_801A54AC);
void func_801A54AC(s32 param_1) {
extern u16 D_80126B96;
extern s16 D_80126B98;
extern s32 func_801A54F0();
if (func_801A54F0(param_1, 0x40)) {
D_80126B98 = 0x78;
D_80126B96 |= 0x4000;
}
}
#include "common.h"
+17 -1
View File
@@ -3104,7 +3104,23 @@ s32 *func_8017E804(s32 *ot, void *a1p, s32 idx, void *a3p, s32 tag) {
INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8017E5B8", func_8017EB30);
INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8017E5B8", func_8017EF8C);
s16 func_8017EF8C(void) {
extern u8 D_801802E4[];
extern u8 D_801802EA;
s32 result;
s16 idx;
if ((func_800291B4(D_801802EA) & 0xFF) == 0) {
result = 0;
goto end;
}
idx = func_8014168C(1);
result = (func_800291B4(D_801802E4[idx]) & 0xFF) == 0;
end:
return result;
}
extern void (*D_8018C2EC[])(void);
+18 -1
View File
@@ -4541,7 +4541,24 @@ s32 func_801801DC(void *a0) {
}
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8017CF90", func_80180234);
void func_80180234(void *arg0) {
typedef struct { u8 b[8]; } Blk8;
extern Blk8 D_801E2DF0;
extern s32 func_80171D78(s32 a0, s32 a1);
extern s32 func_8013767C(s32 a0);
extern s32 D_801975C8;
extern s16 D_80126974;
extern s16 D_8012697A;
Blk8 buffer;
buffer = D_801E2DF0;
if (func_80171D78((s32)arg0, (s32)&buffer)) {
D_80126974 = D_8012697A = D_8012697A;
*(s32 *)((s32)arg0 + 0x198) = func_8013767C((s32)&D_801975C8);
*(u8 *)((s32)arg0 + 0x214) += 1;
}
}
extern s32 func_801399F0(s32 a0);
extern void func_80139914(s32 a0);
+76 -1
View File
@@ -4166,7 +4166,82 @@ void func_8018102C(void *a0)
}
INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8017D898", func_801810A0);
typedef struct {
u8 pad0[0x20];
s32 f20;
u8 pad24[0x10];
u16 f34;
u8 pad36[0xC6];
s16 fFC;
s16 fFE;
} W_801810A0;
extern s32 func_8012BDBC(s32 a0, s32 a1);
extern s32 func_8018152C(s32 a0, s16 a1);
extern s32 func_8012B8E4(s32 a0, s32 a1);
extern void func_8002D4C8(s32 a0, s32 a1);
extern s32 func_8012C51C(s32 a0, s32 a1);
void func_801810A0(W_801810A0 *w) {
extern u64 D_8018F298[];
struct {
s16 f0, f1, f2, f3, f4, f5, f6;
u16 timer;
s32 tbl;
s32 pad[5];
} L;
register s32 t asm("v0");
s32 f;
register s32 u asm("a0");
if (func_8012BDBC((s32)w, 0x380)) {
__asm__ __volatile__("" ::: "memory");
if (!func_8018152C((s32)w, 0x380)) {
goto el;
}
__asm__ __volatile__("" ::: "memory");
*(s16 *)(w->f20 + 0x12) += func_8012B8E4((s32)w, 0x14);
if (w->f34 == 0) {
if (w->fFE == 0) {
func_8002D4C8(0x68B, 0);
w->fFE = 1;
}
if (w->fFC >= 0xA) {
w->fFC = 0xA;
w->f34 += 1;
}
L.tbl = (s32)&D_8018F298[*(s16 *)&w->fFC];
L.f3 = 0x175;
L.f6 = 0x7FFF;
L.f2 = 0;
L.f1 = 0;
L.f0 = 0;
L.f5 = 0;
L.f4 = 0;
L.timer = w->fFC;
if (func_8012C51C((s32)&L, (s32)w)) {
w->fFC += 1;
}
}
} else {
el:
t = w->fFC;
if (t != 0) {
f = w->fFE;
u = t;
__asm__ __volatile__("" : "=r"(u) : "0"(u));
__asm__ __volatile__("" : : "r"(t));
t = u - 1;
w->fFC = t;
w->f34 = 0;
if (f != 0) {
w->fFE = 0;
func_8002D4C8(4, 0x68B);
}
}
}
}
void func_80181200(s32 a0)
{
+98 -5
View File
@@ -3122,9 +3122,45 @@ void func_80184278(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80183AE0", func_801842B4);
extern u8 *func_8012913C(s32 a0);
extern void func_8001CD50(s32 a0, s32 a1);
void func_801842B4(s32 a0)
{
extern u8 D_801ACEA0[];
u8 pad[16];
u8 *result;
result = func_8012913C(0x7C);
if (result != 0) {
*(u16 *)(result + 0x6) = *(u16 *)(a0 + 0x6);
*(u16 *)(result + 0xA) = *(u16 *)(a0 + 0xA);
*(u16 *)(result + 0xE) = *(u16 *)(a0 + 0xE);
func_8001CD50(*(s32 *)(result + 0x20), (s32)D_801ACEA0);
}
}
void func_80184318(void *a0) {
extern s32 D_801151D4;
extern void (*D_801A8BFC[])(void *);
extern s32 func_8012B77C(s32 a0, s32 a1, s32 a2);
s16 arrA[8];
s32 bufB[2];
s32 base;
s32 t;
base = D_801151D4;
arrA[1] = *(s32 *)(base + 0x5C);
arrA[3] = *(s32 *)(base + 0x60);
arrA[5] = *(s32 *)(base + 0x64);
func_8012B77C((s32)bufB, (s32)a0 + 4, (s32)arrA);
t = bufB[0];
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = t;
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = t >> 16;
D_801A8BFC[*(u16 *)((s32)a0 + 2)](a0);
}
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80183AE0", func_80184318);
extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2);
@@ -3244,7 +3280,26 @@ void func_80184538(s32 a0)
}
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80183AE0", func_80184624);
extern s32 func_8004787C(s32 a0);
extern void func_8012E688(s32 arg0, s32 arg1, s32 arg2);
void func_80184624(s32 a0)
{
s16 t;
*(u16 *)(a0 + 0xFC) = *(u16 *)(a0 + 0xFC) + 0x20;
*(u16 *)(a0 + 0xA) = *(u16 *)(a0 + 0x100);
*(s32 *)(a0 + 0x8) -= func_8004787C(*(s16 *)(a0 + 0xFC)) << 10;
if (*(s16 *)(a0 + 0xFC) < 0x400) {
return;
}
*(s16 *)(a0 + 0x2) = 5;
*(s16 *)(a0 + 0xFE) = 4;
func_8012E688(a0, 0x98F, 0);
}
extern s32 D_801A8B4C;
extern s32 D_801A8B54;
@@ -3331,7 +3386,21 @@ void func_80184900(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80183AE0", func_80184990);
extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2);
extern void func_8002D4C8(s32 a0, s32 a1);
void func_80184990(s32 a0)
{
if (--*(s16 *)(a0 + 0xFC) == 0) {
*(s16 *)(a0 + 0x2) = 0xB;
}
if (*(s16 *)(a0 + 0xFC) == 6) {
func_8012C658(0x1EA, 0xE, a0);
func_8002D4C8(0xC5D, 0);
}
func_80184194(a0);
}
void func_80184A04(s32 a0) {
s16 w;
@@ -3379,7 +3448,31 @@ void func_80184A54(s32 param_1) {
}
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80183AE0", func_80184AD4);
extern void func_8012BE54(s32 a0);
void func_80184AD4(void *a0)
{
s32 s0;
s32 p;
s32 v0;
s0 = (s32)a0;
if (((s32 (*)(s32))func_8012BE54)(s0) <= 0x23FFFF) {
v0 = *(s32 *)(s0 + 0x1C);
v0 = v0 - 1;
*(s32 *)(s0 + 0x1C) = v0;
if (v0 == 0) {
p = func_8012C658(0x1EA, 0xF, s0);
v0 = rand() & 0x1F;
v0 = v0 + 0x2D;
*(s32 *)(s0 + 0x1C) = v0;
if (*(s16 *)(s0 + 0x70) == 0x18 && p != 0) {
*(u16 *)(*(s32 *)(p + 0x20) + 0x12) = 0x400;
}
}
}
}
extern int func_8012C658(int arg0, int arg1, int arg2);
+16 -1
View File
@@ -4566,7 +4566,22 @@ void func_8017DF90(void *a0) {
}
INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8017AE2C", func_8017DFCC);
void func_8017DFCC(int param_1)
{
int iVar1;
int iVar2;
int iVar3;
extern s32 D_801C9364;
iVar1 = (int)*(short *)(*(int *)(param_1 + 0x20) + 0x12) + 0x100;
iVar2 = D_801C9364;
for (iVar3 = 0; iVar3 < 0x10; iVar3++) {
*(int *)(iVar2 + iVar3 * 0x10 + 4) = iVar1;
iVar1 = iVar1 + 0x100;
}
}
+164 -7
View File
@@ -3615,7 +3615,39 @@ INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801820DC", func_80182DB
INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801820DC", func_80182E1C);
INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801820DC", func_80182E70);
extern void func_80182F2C(u16 *a0, s32 a1);
void func_80182E70(u16 *a0, s32 a1)
{
extern u16 D_800B99DA;
extern u8 D_801C4470[];
u8 col[4];
s32 n;
s32 x;
s32 h;
if (D_801C4470[D_800B99DA & 0xF] == 0) {
n = 0x60;
} else {
n = 0x50;
}
x = n * ++a1;
n = x / 32;
h = n / 2;
col[0] = n;
col[1] = n;
col[2] = h;
col[3] = 0;
if ((s16)a0[3] != -1) {
do {
func_80182F2C(a0, *(s32 *)col);
a0 += 4;
} while ((s16)a0[3] != -1);
}
}
/* func_80182F2C (ov_SC04_018, ov_SC04_018_jr_8017AE2C) — MATCH (250 ins)
@@ -4096,7 +4128,26 @@ void func_801839F0(void) {
}
INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801820DC", func_80183A24);
extern s32 D_801C4288;
extern s32 D_801C9238;
extern s32 func_80029504(void);
extern s32 func_80182DB4_call(s32 arg0, s32 arg1) __asm__("func_80182DB4");
s32 func_80183A24(void) {
s32 r;
D_801C9238 = &D_801C4288;
r = func_80182DB4_call(0x168, 0x1A4);
if (r == -1) {
r = func_80182DB4_call(0x474, 0x4EC);
}
if ((u32)(func_80029504() - 0xC8) < 0xDC) {
return -1;
}
return r;
}
extern s32 D_801C42C8;
extern s32 D_801C9238;
@@ -4193,7 +4244,30 @@ s32 func_80183C34(void) {
}
INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801820DC", func_80183C3C);
extern u8 D_80078EB0;
extern u8 D_80078EB1;
extern s32 D_801C923C;
extern s32 D_801C9254;
extern s32 D_801C90A0[];
extern void func_80182E1C(void *a0);
void func_80183C3C(void)
{
s32 i;
D_801C923C = (((D_80078EB1 << 4) - D_80078EB1) << 2) + D_80078EB0;
for (i = 0; i < 6; i++) {
*(s32 *)(D_801C90A0[i] + 4) |= 0x80000000;
}
for (i = 2; i < 18; i++) {
func_80182E1C((void *)i);
}
func_801837C4();
if (D_801C9254 != 0) {
D_801C9254 -= 1;
}
}
extern void func_8001C214(s32, s32);
extern void func_8012C1B8(void);
@@ -4308,7 +4382,29 @@ void func_80183DE8(u8 *arg0)
}
INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801820DC", func_80183F04);
extern void func_8012AD80(s32 a0);
extern s32 func_80128ED8(s32 param_1, s32 *param_2);
extern void func_80016714(void *a0, s32 a1);
extern void func_8012C218(void *a0);
extern s32 func_8012BEE8(s32 a0);
void func_80183F04(u8 *a0) {
u8 *s1 = *(u8 **)(a0 + 0xCC);
u8 *v1;
func_8012AD80((s32)a0);
v1 = *(u8 **)(a0 + 0xCC);
*(u16 *)(v1 + 8) = *(u16 *)(a0 + 6);
*(u16 *)(v1 + 0xA) = *(u16 *)(a0 + 0xA);
*(u16 *)(v1 + 0xC) = *(u16 *)(a0 + 0xE);
if ((*(u32 *)(a0 + 0x1C) & 7) == 0) {
func_80128ED8(s1, a0 + 0xD0);
}
if (func_8012BEE8((s32)a0)) {
func_80016714(s1, 0x38);
func_8012C218(a0);
}
}
extern void func_8012B414(int a0);
@@ -4341,11 +4437,72 @@ extern void func_8012B414(int a0);
}
INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801820DC", func_8018404C);
void func_8018404C(void *a0)
{
extern u16 D_800B99DA;
u16 var;
s32 ret;
INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801820DC", func_80184094);
var = D_800B99DA;
ret = func_8004787C(((s32)var * 3) << 4);
*(u16 *)(*(s32 *)((char *)a0 + 0x20) + 0x10) = (u16)((u32)ret >> 5);
}
extern void func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
extern void func_8001C810(s32 a0, s32 a1);
extern void func_8001D0E8(s32 a0, s32 a1, s32 a2);
extern void func_8012E8E0(s32 a0, s32 a1);
extern s32 func_80029504(void);
extern s32 D_801ACF90[];
extern s32 D_801C44CC[];
void func_80184094(s32 a0) {
s32 v0;
if ((u32)(func_80029504() - 0x181) < 0x55) {
func_8012CAE4((void *)a0);
return;
}
*(s32 *)(a0 + 0x20) = v0 = ((s32 (*)(void))func_8012C1B8)();
if (v0 == 0) {
func_8012CAE4((void *)a0);
return;
}
func_8001C810(v0, (s32)D_801ACF90);
*(s32 *)(*(s32 *)(a0 + 0x20) + 4) |= 0x8000;
func_8001D0E8(*(s32 *)(a0 + 0x20), 0x7FFF, 0x7FFF);
func_8012E8E0(a0, (s32)D_801C44CC);
*(s16 *)(a0 + 0x2) = 1;
return;
}
void func_80184138(s32 arg0) {
extern void func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
extern void func_8001C214(s32 a0, s32 a1);
extern void func_8012E8E0(s32 a0, s32 a1);
extern s32 D_801AD490[];
extern s32 D_801C44DC[];
s32 v0;
v0 = ((s32 (*)(void))func_8012C1B8)();
*(s32 *)(arg0 + 0x20) = v0;
if (v0 == 0) {
func_8012CAE4((void *)arg0);
return;
}
func_8001C214(v0, (s32)D_801AD490);
func_8012E8E0(arg0, (s32)D_801C44DC);
*(u16 *)(arg0 + 2) = 1;
*(u16 *)(arg0 + 0x34) = 0;
*(s32 *)(arg0 + 0xDC) = 0;
*(s32 *)(arg0 + 0xE0) = 0;
*(s32 *)(arg0 + 0xE4) = 0;
}
INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801820DC", func_80184138);
extern void (*D_801C5F0C[])(void);
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+36 -1
View File
@@ -4119,7 +4119,42 @@ void func_8017E7EC(void *arg0) {
}
INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8017BEBC", func_8017E8CC);
#include "common.h"
extern u8 D_801202A0[];
extern s32 func_80013328(s32 a0, s32 a1);
extern s32 D_80194888;
extern void func_80015978(s32 a0, s32 *a1);
extern void func_8012F2E8(s32 a0, s32 a1, s32 a2);
extern void func_8002D4C8(s32 a0, s32 a1);
void func_8017E8CC(void *arg0) {
void *s3;
s32 best;
s32 k;
u8 *s0;
s32 sp10[2];
s3 = arg0;
best = 0x7FFFFFFF;
D_80194888 = NULL;
for (k = 0; k < 0x60; k++) {
s0 = (u8 *)D_801202A0 + k * 0x10C;
if (*(u16 *)s0 == 0x26E) {
s16 ret = func_80013328((s32)s3 + 4, (s32)s0 + 4);
if (ret < best) {
best = ret;
D_80194888 = (s32)s0;
}
}
}
*(u16 *)((s32)s3 + 0x208) = 0;
func_80015978((s32)s3 + 4, sp10);
func_8012F2E8(D_80194888, (s32)sp10, (s32)s3 + 0x20C);
*(s32 *)((s32)s3 + 0x204) = D_80194888;
func_8002D4C8(0x8B0, 0);
}
extern void func_8012F14C(s32 a0, s32 a1, s32 a2);
extern void func_80015954(s32 a0, s32 a1);
+76 -5
View File
@@ -3393,7 +3393,24 @@ void func_8017D6F0(void *a0) {
}
INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8017C24C", func_8017D72C);
extern s32 rand(void);
extern s32 func_8012AD50(void *a0);
void func_8017D72C(s32 a0) {
u16 h0;
u16 h1;
h0 = *(u16 *)(a0 + 0xFC);
h1 = *(u16 *)(a0 + 0x70);
*(s32 *)(a0 + 0xDC) = 0;
*(s32 *)(a0 + 0xE0) = 0;
*(s32 *)(a0 + 0xE4) = 0;
*(u16 *)(a0 + 0x100) = h0;
*(u16 *)(a0 + 0x102) = h1;
*(u16 *)(a0 + 0xFE) = (rand() & 0x1F) + (rand() & 0x1F) + 0x3C;
func_8012AD50((void *)a0);
}
INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8017C24C", func_8017D79C);
@@ -3694,7 +3711,20 @@ INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8017C24C", func_8017E24
INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8017C24C", func_8017E27C);
INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8017C24C", func_8017E304);
extern void func_8012A828(s32 a0, void *a1);
void func_8017E304(s32 param_1)
{
extern u8 D_801B5AC0[];
s32 *s0 = (s32 *)param_1;
s32 temp;
func_8012A828(param_1, D_801B5AC0);
temp = *(s32 *)(param_1 + 0xE0);
*(s16 *)(param_1 + 2) = 9;
*(s32 *)(param_1 + 0xE0) = (temp | 2) & ~0x10;
}
extern s32 func_801812A0(s32 a0, s32 a1);
@@ -3759,7 +3789,17 @@ set_and_return:
}
INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8017C24C", func_8017E48C);
extern void func_8012A828(s32 a0, void *a1);
extern u8 D_801B63D8[];
void func_8017E48C(s32 p) {
func_8012A828(p, D_801B63D8);
*(u16 *)(p + 2) = 0xB;
*(u16 *)(p + 0x34) = 0;
*(s32 *)(p + 0x10) *= 2;
*(s32 *)(p + 0x18) *= 2;
}
extern s32 func_801812A0(s32 a0, s32 a1);
@@ -3824,7 +3864,22 @@ void *arg0;
}
INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8017C24C", func_8017E670);
void func_8017E670(s32 p) {
extern void func_8012F214(s32, s32, s32);
extern s32 func_801833F4(void *a0, s32 a1, s32 a2);
extern s32 func_8012BEE8();
extern u8 D_8019E994[];
extern s32 D_80126B9C;
s32 buf10[2];
((void (*)(s32, void *, void *))func_8012F214)(p, D_8019E994, buf10);
if (func_8012BEE8(p) != 0 && (D_80126B9C & 2) == 0) {
*(u16 *)(p + 2) = 4;
} else if (func_801833F4(buf10, *(s16 *)(*(s32 *)(p + 0x20) + 0x12), 0x400) == 0) {
*(u16 *)(p + 2) = 4;
}
}
extern void func_8012C218(void *a0);
@@ -4079,7 +4134,23 @@ void func_8017EC6C(s32 p)
}
INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8017C24C", func_8017ED7C);
extern void func_8012A828(s32 a0, void *a1);
void func_8017ED7C(s32 a0)
{
extern u8 D_801B5D60[];
*(s16 *)(a0 + 2) = 0x16;
if ((*(u32 *)(a0 + 0xE0) & 0x400) == 0) {
func_8012A828(a0, D_801B5D60);
*(s16 *)(a0 + 0x34) = 4;
*(s32 *)(a0 + 0x1C) = 0xF;
} else {
*(s32 *)(a0 + 0x1C) = 0x1E;
*(s16 *)(a0 + 0x34) = 0;
}
}
#include "common.h"
+12 -1
View File
@@ -7306,7 +7306,18 @@ void func_80186C14(void) {
}
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_80186C3C);
extern void func_8012AD80(s32 a0);
extern s32 D_801DFF78;
s32 func_80186C3C(s32 param_1)
{
s16 v;
func_8012AD80(D_801DFF78);
v = *(u16 *)(param_1 + 0x10A) - 1;
*(u16 *)(param_1 + 0x10A) = v;
return v == 0;
}
extern s32 D_801DFF78;