mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-06 01:04:13 -04:00
feat(phase-26): h_seq family sweep — 26 member-matches banked via remap_hseq
This commit is contained in:
@@ -2186,7 +2186,14 @@ DEFINE_func_80130AF0() /* dedup: shared engine-core @0x80130af0 (src/shared) */
|
||||
DEFINE_func_80130C08() /* dedup: shared engine-core @0x80130c08 (src/shared) */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012", func_80130D0C);
|
||||
|
||||
|
||||
void func_80130D0C(void *a0) {
|
||||
|
||||
extern void (*D_8017E710[])(void);
|
||||
D_8017E710[*(u8 *)((s32)a0 + 0xC1)]();
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012", func_80130D48);
|
||||
|
||||
|
||||
@@ -2403,7 +2403,70 @@ block_14:
|
||||
DEFINE_func_80134FB8() /* dedup: shared engine-core @0x80134fb8 (src/shared) */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_80131340", func_80135004);
|
||||
typedef struct { s8 c[8]; } Blk8_80135004;
|
||||
|
||||
// @class: plumbing
|
||||
// @stuck: MATCH (89 ins). To BANK: retype aD8017E914_80135004 + aD8017E910_80135004 (u8 -> s16*) in sibling func_80135168's externs (src/ov_SC01_077/ov_SC01_077_a.c ~L1879); they hold pointers double-referenced across a call, so only a 4-byte/pointer decl folds %lo (u8 &-cast CSE's the address into a saved reg). Retype is byte-NEUTRAL for the sibling (verified: identical objdump bytes u8 vs s16*).
|
||||
|
||||
|
||||
|
||||
|
||||
s32 func_80135004(s32 arg0, s32 p1, s32 p2)
|
||||
{
|
||||
|
||||
extern s32 D_80184120;
|
||||
extern int func_80134A74(int, s16, s16, int);
|
||||
extern s16 * aD8017E914_80135004 __asm__("D_8017E914");
|
||||
extern s16 * aD8017E910_80135004 __asm__("D_8017E910");
|
||||
extern u8 D_8017E91C;
|
||||
extern s16 *D_8017E918;
|
||||
extern u16 D_80184130;
|
||||
|
||||
register s16 *pb0 __asm__("$9"); /* aD8017E914_80135004 -> $t1 */
|
||||
register s16 *pac __asm__("$6"); /* aD8017E910_80135004 -> $a2 */
|
||||
register s16 *pb8 __asm__("$8"); /* D_8017E91C -> $t0 */
|
||||
u16 *pb4;
|
||||
u16 a, b;
|
||||
int id;
|
||||
int a1v, a2v, d94;
|
||||
|
||||
pb0 = aD8017E914_80135004;
|
||||
__asm__ __volatile__("" : : "r"(pb0));
|
||||
|
||||
a = ((u16 *)p2)[0]; pac = aD8017E910_80135004; pb0[0] = a; b = ((u16 *)p1)[0]; pb8 = (*(s16 * *)&D_8017E91C); pac[0] = b; pb8[0] = a - b;
|
||||
a = ((u16 *)p2)[1]; pb0[1] = a; b = ((u16 *)p1)[1]; pac[1] = b; pb8[1] = a - b;
|
||||
a = ((u16 *)p2)[2]; pb0[2] = a; b = ((u16 *)p1)[2]; pac[2] = b; pb8[2] = a - b;
|
||||
|
||||
id = ((int)arg0) & 0xFFFF;
|
||||
a1v = pac[0]; a2v = pac[2]; d94 = D_80184120;
|
||||
__asm__ __volatile__("" ::: "memory");
|
||||
D_80184130 = 0;
|
||||
|
||||
if (func_80134A74(id, a1v, a2v, d94)) {
|
||||
found:
|
||||
pb4 = (*(u16 * *)&D_8017E918);
|
||||
((u16 *)p2)[0] = pb4[0];
|
||||
((u16 *)p2)[1] = pb4[1];
|
||||
((u16 *)p2)[2] = pb4[2];
|
||||
((u16 *)p2)[3] = D_80184130;
|
||||
return 1;
|
||||
}
|
||||
{
|
||||
register u16 *qb __asm__("$4"); /* aD8017E910_80135004 -> $a0 (reloaded) */
|
||||
register int qa0 __asm__("$5"); /* aD8017E914_80135004[0], kept in $a1 for the 2nd-call arg */
|
||||
register u16 *qa __asm__("$6"); /* aD8017E914_80135004 -> $a2 (reloaded) */
|
||||
qb = (u16 *)aD8017E910_80135004;
|
||||
qa = (u16 *)aD8017E914_80135004;
|
||||
qa0 = qa[0];
|
||||
if (((qb[0] & 0xFF80) == (qa0 & 0xFF80)) &&
|
||||
((qb[2] & 0xFF80) == (qa[2] & 0xFF80)))
|
||||
return 0;
|
||||
if (func_80134A74(id, (s16)qa0, (s16)qa[2], D_80184120))
|
||||
goto found;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -169,7 +169,7 @@ extern s32 D_80126F04[];
|
||||
extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
extern s32 D_80126FA8[];
|
||||
extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */
|
||||
extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
/* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
extern s32 D_800AE688[];
|
||||
extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */
|
||||
extern void func_8012A018(s32 a, s32 b);
|
||||
@@ -631,7 +631,6 @@ extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out);
|
||||
extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine");
|
||||
extern void aF80137030(s32 x, s32 y) __asm__("func_80137030");
|
||||
extern void func_80137178(s32 x, s32 y);
|
||||
extern u8 D_800AF630[];
|
||||
extern u16 aD800B9A02 __asm__("D_800B9A02");
|
||||
extern void func_801372B0(void);
|
||||
extern void func_80137614(s32 a0, s32 a1, s32 a2);
|
||||
@@ -1659,7 +1658,23 @@ void func_8013C98C(void) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_801380E0", func_8013C9C4);
|
||||
extern void func_80019064(void *a0);
|
||||
|
||||
void func_8013C9C4(void * arg0)
|
||||
{
|
||||
|
||||
extern M2C_UNK D_80062BC0;
|
||||
extern s32 D_80184198;
|
||||
extern s8 D_8018419C;
|
||||
extern s8 D_8018419D;
|
||||
D_80184198 = arg0;
|
||||
D_8018419C = 0;
|
||||
D_8018419D = 0;
|
||||
if (func_80019198() == 0) {
|
||||
func_80019064(&D_80062BC0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void func_8013CA14(void)
|
||||
|
||||
@@ -115,7 +115,6 @@ extern s32 func_80128ED8(s32 param_1, s32 *param_2);
|
||||
extern void func_80128FAC(u16 *arg0);
|
||||
extern s16 D_8011DB2C;
|
||||
extern s16 D_8011DB30;
|
||||
extern s32 D_80126AEC;
|
||||
extern u8 *func_8012913C(s32 a0);
|
||||
extern u8 * func_801290DC(s32 a0, u8 *a1);
|
||||
extern void func_8001D074(s32 a, s32 b);
|
||||
@@ -130,12 +129,9 @@ extern void func_8012927C(void);
|
||||
extern void func_8012931C(struct vec *a0);
|
||||
extern void func_80129350(s32 a0, s32 a1);
|
||||
extern void func_80129374(s32 a0, s32 a1);
|
||||
extern s16 D_800B9AAC[];
|
||||
extern s16 D_800B9AAE[];
|
||||
extern s16 D_800B9AB0[];
|
||||
extern s16 D_800B9AB2[];
|
||||
extern s16 D_800B9AB4[];
|
||||
extern s16 D_800B9AB6[];
|
||||
extern s16 D_800B9AB8[];
|
||||
extern s16 D_800B9ABA[];
|
||||
extern void func_80129398(void);
|
||||
@@ -152,7 +148,6 @@ extern void GsSortBg(s32 *, void *, u16, s32 *);
|
||||
extern void GsSortFastBg(s32 *, void *, u16, s32 *);
|
||||
extern unsigned short D_800B99F0;
|
||||
extern struct BigCopy D_80126DB8;
|
||||
extern u8 D_80126948[];
|
||||
extern struct BigCopy D_80114EE8;
|
||||
extern s32 D_80126E60[];
|
||||
extern s8 D_801150D6;
|
||||
@@ -166,12 +161,12 @@ extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (
|
||||
extern void GsSetRefView2L(void *);
|
||||
extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */
|
||||
extern s32 D_80126F04[];
|
||||
extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
/* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
extern s32 D_80126FA8[];
|
||||
extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */
|
||||
extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
/* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
extern s32 D_800AE688[];
|
||||
extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */
|
||||
/* canonical (10 siblings): scalar s32 — store (s32)ptr */
|
||||
extern void func_8012A018(s32 a, s32 b);
|
||||
extern void func_80129FF4(void);
|
||||
extern void func_8012A048(void *a0, s32 a1, u8 a2);
|
||||
@@ -212,7 +207,6 @@ extern s16 D_80127080;
|
||||
extern s16 D_801152C2;
|
||||
extern void func_8012A304(s32 a0, s32 a1);
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
extern s32 D_801151D4;
|
||||
extern void func_8012A418(void);
|
||||
extern Vec8 D_80114F24;
|
||||
extern void func_8012A464(void);
|
||||
@@ -249,9 +243,6 @@ extern void func_8012AD64(s32 *a0, s16 a1);
|
||||
extern void func_8012AD6C(void *a0);
|
||||
extern void func_8012AD80(s32 a0);
|
||||
extern void func_8012ADE4(u8 *a0);
|
||||
extern s32 *D_80126B78;
|
||||
extern s32 *D_80126B90;
|
||||
extern s32 D_80126B58;
|
||||
extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
extern s32 func_80013478(s32 a0, s32 a1);
|
||||
extern s32 func_8012AE00(s32 a0);
|
||||
@@ -318,7 +309,6 @@ extern s32 func_8012BF7C(s16 *a0);
|
||||
extern s16 D_80126CAC;
|
||||
extern short D_80126CAE;
|
||||
extern int func_8012BFA8(short *a0);
|
||||
extern s32 D_801274D4;
|
||||
extern s32 D_801274E0;
|
||||
extern s32 func_8012C044(s32 a0);
|
||||
extern void func_8012C218(void *a0);
|
||||
@@ -631,7 +621,6 @@ extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out);
|
||||
extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine");
|
||||
extern void aF80137030(s32 x, s32 y) __asm__("func_80137030");
|
||||
extern void func_80137178(s32 x, s32 y);
|
||||
extern u8 D_800AF630[];
|
||||
extern u16 aD800B9A02 __asm__("D_800B9A02");
|
||||
extern void func_801372B0(void);
|
||||
extern void func_80137614(s32 a0, s32 a1, s32 a2);
|
||||
@@ -714,7 +703,6 @@ extern s32 *D_80126A30;
|
||||
extern void func_80139954(void);
|
||||
extern s32 D_80126A3C;
|
||||
extern s32 func_801399F0(s32 a0);
|
||||
extern s32 D_80127520;
|
||||
extern void func_80139A34(s32 a0);
|
||||
extern s32 D_80127530[4];
|
||||
extern void func_80139A44(s32 a0, u16 a1);
|
||||
@@ -818,8 +806,6 @@ extern void func_8013F244(void);
|
||||
extern void func_8013FAF8(s16 a0, s16 a1);
|
||||
extern void func_8013E958(void);
|
||||
extern u8 D_801151C8[];
|
||||
extern s32 D_801151D0;
|
||||
extern u16 D_8011511A;
|
||||
extern u16 D_8011511E;
|
||||
extern s32 D_80115130;
|
||||
extern s16 D_8011514C;
|
||||
@@ -882,7 +868,6 @@ extern void func_80141C0C(s32);
|
||||
// callers already cast (`((short (*)(void))func_8013F350)()`) -> def-side reconcile.
|
||||
|
||||
extern u16 D_80115110;
|
||||
extern u16 D_8011511A;
|
||||
extern u16 D_8011511C;
|
||||
extern u16 D_8011511E;
|
||||
extern u16 D_80115120;
|
||||
@@ -912,6 +897,10 @@ extern void func_801407F4(void);
|
||||
extern s32 func_801416D4(s16); /* macro-canonical redecl (§8e) */
|
||||
|
||||
s32 func_8013F350(void) {
|
||||
/* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every
|
||||
LATER function in this TU, which blocks a byte-true decl of a different type.
|
||||
Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */
|
||||
extern u16 D_8011511A;
|
||||
register u16 *pd __asm__("$5") = &D_8011511C;
|
||||
u16 *ps;
|
||||
u16 *pf;
|
||||
@@ -1151,7 +1140,136 @@ s32 func_8013F350(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8013F350", func_8013FAF8);
|
||||
|
||||
|
||||
// @class: regalloc-order
|
||||
// @stuck: none — MATCH (312/312, relocation-masked)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern void func_80140E6C(void);
|
||||
extern void func_80140F00(void);
|
||||
extern s32 *func_80140958();
|
||||
extern int func_80141100(int);
|
||||
extern s16 func_8014168C(s16);
|
||||
extern s32 func_8013FFD8(s16, s32, s32 *);
|
||||
extern void func_80024054(void *a0, void *a1);
|
||||
extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32);
|
||||
extern s32 func_8005A600(s32, s32, s32, s32, s32);
|
||||
extern s32 func_800D27DC(s32, s32 *, void *, s32, s32);
|
||||
extern s32 *func_800D29F8(s32, s32, void *, s32, s32);
|
||||
extern int func_80137D08(int arg0, int arg1, short arg2);
|
||||
extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
|
||||
|
||||
void func_8013FAF8(s16 arg0, s16 arg1) {
|
||||
|
||||
extern s32 D_801151D0;
|
||||
extern u16 D_8011511A;
|
||||
extern Hw4 D_8011516A[];
|
||||
extern u8 D_80078EC0;
|
||||
extern Rec20 D_800AE7B8[];
|
||||
extern Blk60 D_8017ED80[];
|
||||
extern Blk20 D_8017F080[];
|
||||
extern Prim4 D_8017F180[];
|
||||
extern Prim4 D_8017F1F0[];
|
||||
extern Prim4 *D_8017F2E4[];
|
||||
extern s32 D_8017F304[];
|
||||
extern u8 D_8017F324;
|
||||
extern s16 D_8017F6F8;
|
||||
extern s16 D_8017F6FA;
|
||||
u8 sp18[72];
|
||||
s32 sp60[2];
|
||||
s32 *ot;
|
||||
s16 i;
|
||||
s16 j;
|
||||
s32 flag;
|
||||
s32 addr;
|
||||
Prim4 *p;
|
||||
s32 r;
|
||||
s32 t;
|
||||
s16 *pp;
|
||||
s32 flag2;
|
||||
register s32 flag3 __asm__("$18");
|
||||
|
||||
func_80140E6C();
|
||||
func_80140F00();
|
||||
ot = func_80140958((s32 *)D_801151D0, arg0, arg1);
|
||||
if (D_8011511A < 6) {
|
||||
ot = (s32 *)func_80141100((int)ot);
|
||||
}
|
||||
for (i = arg0; i < arg1; i++) {
|
||||
if (i == D_8011511A || i == 2 || i == 4) {
|
||||
flag = 0;
|
||||
} else {
|
||||
flag = 0xFF;
|
||||
}
|
||||
p = &D_8017F180[i];
|
||||
if (i != 5) {
|
||||
if (i == 2) {
|
||||
addr = ((s32 *)&D_8017F324)[*(s16 *)&D_80115128];
|
||||
} else {
|
||||
addr = D_8017F304[i];
|
||||
}
|
||||
} else {
|
||||
addr = func_8013FFD8(2, func_8014168C(2), sp60);
|
||||
}
|
||||
func_80024054(addr, sp18);
|
||||
ot = func_800D2650(ot, sp18, (s16)(p->f0 + (u16)D_8011516A[i].x), p->f2, 1,
|
||||
flag != 0 ? 0x585858 : 0x808080);
|
||||
p = D_8017F2E4[i];
|
||||
j = 0;
|
||||
if (p != 0) {
|
||||
if (i == 2 && *(s16 *)&D_80115128 != 0) {
|
||||
p = D_8017F1F0;
|
||||
}
|
||||
flag2 = flag;
|
||||
for (;;) {
|
||||
r = func_8013FFD8(i, j++, sp60);
|
||||
if (r == 0) {
|
||||
break;
|
||||
}
|
||||
if (r < 0) {
|
||||
func_80024054(r, sp18);
|
||||
t = 1;
|
||||
if (i == 0 && (D_80078EC0 & 0x7F) == j) {
|
||||
t = 0xB6;
|
||||
}
|
||||
if (flag2 != 0) {
|
||||
sp60[0] += -0x282828;
|
||||
}
|
||||
ot = func_800D2650(ot, sp18, (s16)(p->f0 + (u16)D_8011516A[i].x), p->f2, t, sp60[0]);
|
||||
}
|
||||
p++;
|
||||
}
|
||||
}
|
||||
func_8005A600((s32)ot, 0, 0, 0x15, 0);
|
||||
flag3 = flag;
|
||||
*ot = 0x2000000;
|
||||
*ot = (D_800AE7B8[*(u16 *)&D_800B9A02].f4[2] & 0xFFFFFF) | 0x2000000;
|
||||
D_800AE7B8[*(u16 *)&D_800B9A02].f4[2] =
|
||||
(D_800AE7B8[*(u16 *)&D_800B9A02].f4[2] & 0xFF000000) | ((u32)ot & 0xFFFFFF);
|
||||
ot = func_800D29F8(flag3,
|
||||
func_800D27DC(flag3 != 0, ot + 10, &D_8017ED80[i], 8, D_8011516A[i].x),
|
||||
&D_8017F080[i], 2, D_8011516A[i].x);
|
||||
}
|
||||
pp = &D_8017F6F8;
|
||||
if (*pp == 0xE) {
|
||||
ot = func_80137D08(ot, &D_800AE7B8[*(u16 *)&D_800B9A02], 2);
|
||||
}
|
||||
if (*pp != 0 && D_8017F6FA != 0) {
|
||||
ot = func_8013AB54(ot, D_800AE7B8[*(u16 *)&D_800B9A02].f4 + 2, (s32)(pp - 2), 0x8000);
|
||||
}
|
||||
D_801151D0 = (s32)ot;
|
||||
}
|
||||
|
||||
|
||||
extern u8 D_8017F434[];
|
||||
|
||||
@@ -4133,7 +4251,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8013F350", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_8017FEF8) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_8017FEF8[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_8017FEF8[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */
|
||||
|
||||
|
||||
@@ -1082,7 +1082,6 @@ extern s32 func_80013294(void *a0, void *a1);
|
||||
extern int func_80144B14(int param_s0);
|
||||
extern void func_801458E0(void);
|
||||
extern s32 D_800AE6AC;
|
||||
extern s32 D_800AE6B0;
|
||||
extern s16 D_800B9A0A;
|
||||
extern u8 D_80078E50;
|
||||
extern void func_800D185C(u8 *a0);
|
||||
@@ -1385,7 +1384,6 @@ extern u8 D_80078EBF;
|
||||
extern s32 func_80149744(struct S_80149744 *a0);
|
||||
extern void func_8015F7A0();
|
||||
extern void func_80149788(void);
|
||||
extern u8 D_80078E78[];
|
||||
extern u8 D_80078EC1;
|
||||
extern s32 func_8014CB7C(void);
|
||||
extern s32 func_8014C088(s32 a0, s32 a1);
|
||||
@@ -2015,7 +2013,6 @@ extern void func_8015BDD0(s32 *a0); /* defined */
|
||||
extern void func_801575E4(void *a0); /* defined */
|
||||
extern void func_80157580(s32 arg0);
|
||||
extern u8 D_800D4F14[];
|
||||
extern s32 D_8011F730;
|
||||
extern void func_801576A8(void *arg0);
|
||||
extern s32 func_8015773C(u8 *a0);
|
||||
extern s32 func_8015771C(u8 *a0);
|
||||
@@ -2218,6 +2215,10 @@ extern void func_801483E8(unsigned char*);
|
||||
s32 func_8015A3C8(arg0)
|
||||
s32 arg0;
|
||||
{
|
||||
/* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every
|
||||
LATER function in this TU, which blocks a byte-true decl of a different type.
|
||||
Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */
|
||||
extern u8 D_80078E78[];
|
||||
|
||||
extern void (*D_80180A1C[])(void *);
|
||||
|
||||
@@ -2546,8 +2547,6 @@ extern s32 func_8014A69C(s32 *a0);
|
||||
extern void func_8014E6A0(void);
|
||||
extern void func_8015CF8C(s32 *a0);
|
||||
extern s32 func_801725A4(u8 *a0);
|
||||
extern s16 D_801152A0;
|
||||
extern u8 D_800D4BE0[];
|
||||
extern s32 D_800D4E94;
|
||||
extern s32 D_800D4ED4;
|
||||
extern u8 D_800D4F8C[];
|
||||
@@ -2557,6 +2556,14 @@ extern s32 D_800D4B48;
|
||||
s32 func_8015AE2C(arg0)
|
||||
s32 arg0;
|
||||
{
|
||||
/* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every
|
||||
LATER function in this TU, which blocks a byte-true decl of a different type.
|
||||
Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */
|
||||
extern u8 D_800D4BE0[];
|
||||
/* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every
|
||||
LATER function in this TU, which blocks a byte-true decl of a different type.
|
||||
Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */
|
||||
extern s16 D_801152A0;
|
||||
s32 flag;
|
||||
s32 r;
|
||||
s32 lim;
|
||||
@@ -3196,7 +3203,6 @@ s32 func_8015C128(s32 param_1) {
|
||||
|
||||
|
||||
|
||||
extern void (*D_80180A1C[])(void *);
|
||||
extern u16 D_800B99DA;
|
||||
|
||||
extern s32 func_80149FB0(s32 a0);
|
||||
@@ -3229,6 +3235,10 @@ extern void func_8015C0C4(s32 a0);
|
||||
extern void func_8015C6E0(s32*);
|
||||
|
||||
void func_8015C32C(s32 arg0) {
|
||||
/* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every
|
||||
LATER function in this TU, which blocks a byte-true decl of a different type.
|
||||
Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */
|
||||
extern void (*D_80180A1C[])(void *);
|
||||
s32 iVar2;
|
||||
u32 uVar4;
|
||||
s32 vin[4];
|
||||
@@ -3921,7 +3931,104 @@ void func_8015D5E8(int param_1)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8015A3C8", func_8015D738);
|
||||
|
||||
extern int func_80148AFC(void*);
|
||||
extern s32 func_80161B18(void *);
|
||||
extern s32 func_80161B84(void *);
|
||||
extern u16 func_80148800(s32*);
|
||||
extern u8 func_8014BEF8(void);
|
||||
extern s32 func_80165624(s32);
|
||||
extern s32 func_801488A8(u8*);
|
||||
extern void func_8014D738(void);
|
||||
extern s32 func_80161208();
|
||||
extern void func_80154A74(s32, s32);
|
||||
extern void func_8015DAC4(s32*);
|
||||
extern void func_8015DE24(s32*);
|
||||
extern void func_8015DA5C(s32);
|
||||
extern void func_8015F948(s32*);
|
||||
extern void func_800CAF14(void *);
|
||||
extern void func_80154150(s32, s32);
|
||||
extern void func_80146DB8(s32*, s32*);
|
||||
extern void func_80147A84(s32);
|
||||
extern void func_801473EC(s32*);
|
||||
extern void func_80149374(s32, s32);
|
||||
extern void func_80147078(s32*, s16);
|
||||
extern void func_80159B70(void *);
|
||||
extern void func_8015C714(void *);
|
||||
extern void func_801483E8(unsigned char*);
|
||||
|
||||
|
||||
void func_8015D738(void *arg0) {
|
||||
|
||||
extern u8 D_80078E78[];
|
||||
extern u8 D_80180C60[];
|
||||
|
||||
extern u8 D_801809E0[];
|
||||
extern u8 D_801809F0[];
|
||||
u8 *p = D_80078E78;
|
||||
s32 s1;
|
||||
((void (*)(void))func_80148AFC)();
|
||||
if (func_80161B18(arg0) != 0) return;
|
||||
if (func_80161B84(arg0) != 0) return;
|
||||
s1 = *(s32 *)((char *)arg0 + 0x178);
|
||||
if (s1 != 0) {
|
||||
if (*(u16 *)s1 == 0x360) goto block_808;
|
||||
}
|
||||
__asm__ __volatile__("");
|
||||
if (s1 != 0) {
|
||||
if (*(u16 *)s1 != 0) goto block_7F4;
|
||||
}
|
||||
D_80180A1C[*(u16 *)arg0](arg0);
|
||||
((void (*)(void *, s32))func_80147078)(arg0, 0);
|
||||
func_80159B70(arg0);
|
||||
return;
|
||||
block_7F4:
|
||||
if (((s32 (*)(void *))func_80148800)(arg0) & 0x80) {
|
||||
block_808:
|
||||
((void (*)(void *, s32))func_80154A74)(arg0, 0x11);
|
||||
((void (*)(void *))func_8015DAC4)(arg0);
|
||||
return;
|
||||
}
|
||||
if ((((s32 (*)(void *))func_80148800)(arg0) & 0x10) && ((s32 (*)(void *))func_8014BEF8)(arg0) != 0) {
|
||||
((void (*)(void *, s32))func_80154A74)(arg0, 0x11);
|
||||
((void (*)(void *))func_8015DE24)(arg0);
|
||||
return;
|
||||
}
|
||||
if ((((s32 (*)(void *))func_80148800)(arg0) & 0x20) && p[0x49] == 0xA) {
|
||||
if (((s32 (*)(void *))func_80165624)(arg0) != 0) {
|
||||
((void (*)(void *))func_8015DA5C)(arg0);
|
||||
((void (*)(void *))func_8015F948)(arg0);
|
||||
return;
|
||||
}
|
||||
((void (*)(void *, s32))func_80154A74)(arg0, 0x11);
|
||||
func_800CAF14(arg0);
|
||||
return;
|
||||
}
|
||||
if (((s32 (*)(void *))func_801488A8)(arg0) != 0 && *(u16 *)(*(s32 *)((char *)arg0 + 0x178)) != 0x82) {
|
||||
((void (*)(void *, s32))func_80154150)(arg0, 0x1B);
|
||||
((void (*)(void *, void *))func_80146DB8)(arg0, &D_801809E0);
|
||||
} else {
|
||||
((void (*)(void *, s32))func_80154150)(arg0, 0x1A);
|
||||
((void (*)(void *, void *))func_80146DB8)(arg0, &D_801809F0);
|
||||
}
|
||||
((void (*)(void *))func_80147A84)(arg0);
|
||||
((void (*)(void *))func_801473EC)(arg0);
|
||||
s1 = *(s32 *)((char *)arg0 + 0x178);
|
||||
*(s16 *)(s1 + 6) = (s16)((s8)D_80180C60[*(s32 *)((char *)arg0 + 0x234)] + *(u16 *)(*(s32 *)(s1 + 0x78) + 0xc));
|
||||
*(s16 *)(s1 + 0xa) = (s16)((s8)D_80180C60[*(s32 *)((char *)arg0 + 0x234) + 1] + *(u16 *)(*(s32 *)(s1 + 0x78) + 0xe));
|
||||
*(s16 *)(s1 + 0xe) = (s16)((s8)D_80180C60[*(s32 *)((char *)arg0 + 0x234) + 2] + *(u16 *)(*(s32 *)(s1 + 0x78) + 0x10));
|
||||
((void (*)(void *, void *))func_80149374)(arg0, (void *)(s1 + 4));
|
||||
*(s16 *)(*(s32 *)(s1 + 0x20) + 0x12) = (*(u16 *)(*(s32 *)((char *)arg0 + 0x20) + 0x12) + 0x800) & 0xFFF;
|
||||
if (((s32 (*)(void *))func_8014D738)(arg0) != 0) {
|
||||
D_80180A1C[*(u16 *)arg0](arg0);
|
||||
((void (*)(void *, s32))func_80147078)(arg0, 9);
|
||||
func_8015C714(arg0);
|
||||
return;
|
||||
}
|
||||
if (func_80161208(arg0) != 0) return;
|
||||
((void (*)(void *))func_801483E8)(arg0);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8015DA5C() /* dedup: shared engine-core @0x8015da5c (src/shared) */
|
||||
|
||||
|
||||
@@ -270,7 +270,6 @@ extern void func_8012AD80(s32 a0);
|
||||
extern void func_8012ADE4(u8 *a0);
|
||||
extern s32 *D_80126B78;
|
||||
extern s32 *D_80126B90;
|
||||
extern s32 D_80126B58;
|
||||
extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
extern s32 func_80013478(s32 a0, s32 a1);
|
||||
extern s32 func_8012AE00(s32 a0);
|
||||
@@ -4622,7 +4621,15 @@ DEFINE_func_8016EFC8() /* dedup: shared engine-core @0x8016efc8 (src/shared) */
|
||||
DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016f094 (src/shared) */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8016AE5C", func_8016F0AC);
|
||||
extern void func_8016F0E4(void);
|
||||
extern void func_80165770(void);
|
||||
void func_8016F0AC(void) {
|
||||
|
||||
extern u8 aD80126B58_8016F0AC __asm__("D_80126B58");
|
||||
((void (*)(void *))func_8016F0E4)(&aD80126B58_8016F0AC);
|
||||
((void (*)(void *))func_80165770)(&aD80126B58_8016F0AC);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* RECONCILE NOTE (uc3) — the body is byte-unchanged from uc2; only the declaration
|
||||
|
||||
@@ -423,7 +423,24 @@ s32 func_80128C98(s32 arg0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037", func_80128CFC);
|
||||
|
||||
|
||||
extern CdFileLoc cdFileLocTable[];
|
||||
extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 a4);
|
||||
|
||||
s32 func_80128CFC(s32 arg0) {
|
||||
|
||||
extern s16 D_80183ECC[];
|
||||
extern s32 aD801C7200_80128CFC __asm__("D_801C7200");
|
||||
s16 idx = D_80183ECC[arg0];
|
||||
|
||||
if (idx >= 0) {
|
||||
func_8001ABBC(0, 0, (u8 *)&cdFileLocTable[idx], aD801C7200_80128CFC, 0);
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80128D60() /* dedup: shared engine-core @0x80128d60 (src/shared) */
|
||||
|
||||
@@ -2169,7 +2186,14 @@ DEFINE_func_80130AF0() /* dedup: shared engine-core @0x80130af0 (src/shared) */
|
||||
DEFINE_func_80130C08() /* dedup: shared engine-core @0x80130c08 (src/shared) */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037", func_80130D0C);
|
||||
|
||||
|
||||
void func_80130D0C(void *a0) {
|
||||
|
||||
extern void (*D_80183F9C[])(void);
|
||||
D_80183F9C[*(u8 *)((s32)a0 + 0xC1)]();
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037", func_80130D48);
|
||||
|
||||
|
||||
@@ -2404,7 +2404,70 @@ block_14:
|
||||
DEFINE_func_80134FB8() /* dedup: shared engine-core @0x80134fb8 (src/shared) */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_80131340", func_80135004);
|
||||
typedef struct { s8 c[8]; } Blk8_80135004;
|
||||
|
||||
// @class: plumbing
|
||||
// @stuck: MATCH (89 ins). To BANK: retype aD801841A0_80135004 + aD8018419C_80135004 (u8 -> s16*) in sibling func_80135168's externs (src/ov_SC01_077/ov_SC01_077_a.c ~L1879); they hold pointers double-referenced across a call, so only a 4-byte/pointer decl folds %lo (u8 &-cast CSE's the address into a saved reg). Retype is byte-NEUTRAL for the sibling (verified: identical objdump bytes u8 vs s16*).
|
||||
|
||||
|
||||
|
||||
|
||||
s32 func_80135004(s32 arg0, s32 p1, s32 p2)
|
||||
{
|
||||
|
||||
extern s32 D_801C8418;
|
||||
extern int func_80134A74(int, s16, s16, int);
|
||||
extern s16 * aD801841A0_80135004 __asm__("D_801841A0");
|
||||
extern s16 * aD8018419C_80135004 __asm__("D_8018419C");
|
||||
extern u8 D_801841A8;
|
||||
extern s16 *D_801841A4;
|
||||
extern u16 D_801C8428;
|
||||
|
||||
register s16 *pb0 __asm__("$9"); /* aD801841A0_80135004 -> $t1 */
|
||||
register s16 *pac __asm__("$6"); /* aD8018419C_80135004 -> $a2 */
|
||||
register s16 *pb8 __asm__("$8"); /* D_801841A8 -> $t0 */
|
||||
u16 *pb4;
|
||||
u16 a, b;
|
||||
int id;
|
||||
int a1v, a2v, d94;
|
||||
|
||||
pb0 = aD801841A0_80135004;
|
||||
__asm__ __volatile__("" : : "r"(pb0));
|
||||
|
||||
a = ((u16 *)p2)[0]; pac = aD8018419C_80135004; pb0[0] = a; b = ((u16 *)p1)[0]; pb8 = (*(s16 * *)&D_801841A8); pac[0] = b; pb8[0] = a - b;
|
||||
a = ((u16 *)p2)[1]; pb0[1] = a; b = ((u16 *)p1)[1]; pac[1] = b; pb8[1] = a - b;
|
||||
a = ((u16 *)p2)[2]; pb0[2] = a; b = ((u16 *)p1)[2]; pac[2] = b; pb8[2] = a - b;
|
||||
|
||||
id = ((int)arg0) & 0xFFFF;
|
||||
a1v = pac[0]; a2v = pac[2]; d94 = D_801C8418;
|
||||
__asm__ __volatile__("" ::: "memory");
|
||||
D_801C8428 = 0;
|
||||
|
||||
if (func_80134A74(id, a1v, a2v, d94)) {
|
||||
found:
|
||||
pb4 = (*(u16 * *)&D_801841A4);
|
||||
((u16 *)p2)[0] = pb4[0];
|
||||
((u16 *)p2)[1] = pb4[1];
|
||||
((u16 *)p2)[2] = pb4[2];
|
||||
((u16 *)p2)[3] = D_801C8428;
|
||||
return 1;
|
||||
}
|
||||
{
|
||||
register u16 *qb __asm__("$4"); /* aD8018419C_80135004 -> $a0 (reloaded) */
|
||||
register int qa0 __asm__("$5"); /* aD801841A0_80135004[0], kept in $a1 for the 2nd-call arg */
|
||||
register u16 *qa __asm__("$6"); /* aD801841A0_80135004 -> $a2 (reloaded) */
|
||||
qb = (u16 *)aD8018419C_80135004;
|
||||
qa = (u16 *)aD801841A0_80135004;
|
||||
qa0 = qa[0];
|
||||
if (((qb[0] & 0xFF80) == (qa0 & 0xFF80)) &&
|
||||
((qb[2] & 0xFF80) == (qa[2] & 0xFF80)))
|
||||
return 0;
|
||||
if (func_80134A74(id, (s16)qa0, (s16)qa[2], D_801C8418))
|
||||
goto found;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -168,7 +168,7 @@ extern s32 D_80126F04[];
|
||||
extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
extern s32 D_80126FA8[];
|
||||
extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */
|
||||
extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
/* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
extern s32 D_800AE688[];
|
||||
extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */
|
||||
extern void func_8012A018(s32 a, s32 b);
|
||||
@@ -631,7 +631,6 @@ extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out);
|
||||
extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine");
|
||||
extern void aF80137030(s32 x, s32 y) __asm__("func_80137030");
|
||||
extern void func_80137178(s32 x, s32 y);
|
||||
extern u8 D_800AF630[];
|
||||
extern u16 aD800B9A02 __asm__("D_800B9A02");
|
||||
extern void func_801372B0(void);
|
||||
extern void func_80137614(s32 a0, s32 a1, s32 a2);
|
||||
@@ -1659,7 +1658,23 @@ void func_8013C98C(void) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_801380E0", func_8013C9C4);
|
||||
extern void func_80019064(void *a0);
|
||||
|
||||
void func_8013C9C4(void * arg0)
|
||||
{
|
||||
|
||||
extern M2C_UNK D_80062BC0;
|
||||
extern s32 D_801C8490;
|
||||
extern s8 D_801C8494;
|
||||
extern s8 D_801C8495;
|
||||
D_801C8490 = arg0;
|
||||
D_801C8494 = 0;
|
||||
D_801C8495 = 0;
|
||||
if (func_80019198() == 0) {
|
||||
func_80019064(&D_80062BC0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void func_8013CA14(void)
|
||||
|
||||
@@ -114,7 +114,6 @@ extern s32 func_80128ED8(s32 param_1, s32 *param_2);
|
||||
extern void func_80128FAC(u16 *arg0);
|
||||
extern s16 D_8011DB2C;
|
||||
extern s16 D_8011DB30;
|
||||
extern s32 D_80126AEC;
|
||||
extern u8 *func_8012913C(s32 a0);
|
||||
extern u8 * func_801290DC(s32 a0, u8 *a1);
|
||||
extern void func_8001D074(s32 a, s32 b);
|
||||
@@ -129,12 +128,9 @@ extern void func_8012927C(void);
|
||||
extern void func_8012931C(struct vec *a0);
|
||||
extern void func_80129350(s32 a0, s32 a1);
|
||||
extern void func_80129374(s32 a0, s32 a1);
|
||||
extern s16 D_800B9AAC[];
|
||||
extern s16 D_800B9AAE[];
|
||||
extern s16 D_800B9AB0[];
|
||||
extern s16 D_800B9AB2[];
|
||||
extern s16 D_800B9AB4[];
|
||||
extern s16 D_800B9AB6[];
|
||||
extern s16 D_800B9AB8[];
|
||||
extern s16 D_800B9ABA[];
|
||||
extern void func_80129398(void);
|
||||
@@ -151,7 +147,6 @@ extern void GsSortBg(s32 *, void *, u16, s32 *);
|
||||
extern void GsSortFastBg(s32 *, void *, u16, s32 *);
|
||||
extern unsigned short D_800B99F0;
|
||||
extern struct BigCopy D_80126DB8;
|
||||
extern u8 D_80126948[];
|
||||
extern struct BigCopy D_80114EE8;
|
||||
extern s32 D_80126E60[];
|
||||
extern s8 D_801150D6;
|
||||
@@ -165,12 +160,12 @@ extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (
|
||||
extern void GsSetRefView2L(void *);
|
||||
extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */
|
||||
extern s32 D_80126F04[];
|
||||
extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
/* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
extern s32 D_80126FA8[];
|
||||
extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */
|
||||
extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
/* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
extern s32 D_800AE688[];
|
||||
extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */
|
||||
/* canonical (10 siblings): scalar s32 — store (s32)ptr */
|
||||
extern void func_8012A018(s32 a, s32 b);
|
||||
extern void func_80129FF4(void);
|
||||
extern void func_8012A048(void *a0, s32 a1, u8 a2);
|
||||
@@ -211,7 +206,6 @@ extern s16 D_80127080;
|
||||
extern s16 D_801152C2;
|
||||
extern void func_8012A304(s32 a0, s32 a1);
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
extern s32 D_801151D4;
|
||||
extern void func_8012A418(void);
|
||||
extern Vec8 D_80114F24;
|
||||
extern void func_8012A464(void);
|
||||
@@ -248,9 +242,6 @@ extern void func_8012AD64(s32 *a0, s16 a1);
|
||||
extern void func_8012AD6C(void *a0);
|
||||
extern void func_8012AD80(s32 a0);
|
||||
extern void func_8012ADE4(u8 *a0);
|
||||
extern s32 *D_80126B78;
|
||||
extern s32 *D_80126B90;
|
||||
extern s32 D_80126B58;
|
||||
extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
extern s32 func_80013478(s32 a0, s32 a1);
|
||||
extern s32 func_8012AE00(s32 a0);
|
||||
@@ -317,7 +308,6 @@ extern s32 func_8012BF7C(s16 *a0);
|
||||
extern s16 D_80126CAC;
|
||||
extern short D_80126CAE;
|
||||
extern int func_8012BFA8(short *a0);
|
||||
extern s32 D_801274D4;
|
||||
extern s32 D_801274E0;
|
||||
extern s32 func_8012C044(s32 a0);
|
||||
extern void func_8012C218(void *a0);
|
||||
@@ -631,7 +621,6 @@ extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out);
|
||||
extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine");
|
||||
extern void aF80137030(s32 x, s32 y) __asm__("func_80137030");
|
||||
extern void func_80137178(s32 x, s32 y);
|
||||
extern u8 D_800AF630[];
|
||||
extern u16 aD800B9A02 __asm__("D_800B9A02");
|
||||
extern void func_801372B0(void);
|
||||
extern void func_80137614(s32 a0, s32 a1, s32 a2);
|
||||
@@ -714,7 +703,6 @@ extern s32 *D_80126A30;
|
||||
extern void func_80139954(void);
|
||||
extern s32 D_80126A3C;
|
||||
extern s32 func_801399F0(s32 a0);
|
||||
extern s32 D_80127520;
|
||||
extern void func_80139A34(s32 a0);
|
||||
extern s32 D_80127530[4];
|
||||
extern void func_80139A44(s32 a0, u16 a1);
|
||||
@@ -818,8 +806,6 @@ extern void func_8013F244(void);
|
||||
extern void func_8013FAF8(s16 a0, s16 a1);
|
||||
extern void func_8013E958(void);
|
||||
extern u8 D_801151C8[];
|
||||
extern s32 D_801151D0;
|
||||
extern u16 D_8011511A;
|
||||
extern u16 D_8011511E;
|
||||
extern s32 D_80115130;
|
||||
extern s16 D_8011514C;
|
||||
@@ -882,7 +868,6 @@ extern void func_80141C0C(s32);
|
||||
// callers already cast (`((short (*)(void))func_8013F350)()`) -> def-side reconcile.
|
||||
|
||||
extern u16 D_80115110;
|
||||
extern u16 D_8011511A;
|
||||
extern u16 D_8011511C;
|
||||
extern u16 D_8011511E;
|
||||
extern u16 D_80115120;
|
||||
@@ -912,6 +897,10 @@ extern void func_801407F4(void);
|
||||
extern s32 func_801416D4(s16); /* macro-canonical redecl (§8e) */
|
||||
|
||||
s32 func_8013F350(void) {
|
||||
/* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every
|
||||
LATER function in this TU, which blocks a byte-true decl of a different type.
|
||||
Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */
|
||||
extern u16 D_8011511A;
|
||||
register u16 *pd __asm__("$5") = &D_8011511C;
|
||||
u16 *ps;
|
||||
u16 *pf;
|
||||
@@ -1151,7 +1140,136 @@ s32 func_8013F350(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_8013F350", func_8013FAF8);
|
||||
|
||||
|
||||
// @class: regalloc-order
|
||||
// @stuck: none — MATCH (312/312, relocation-masked)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern void func_80140E6C(void);
|
||||
extern void func_80140F00(void);
|
||||
extern s32 *func_80140958();
|
||||
extern int func_80141100(int);
|
||||
extern s16 func_8014168C(s16);
|
||||
extern s32 func_8013FFD8(s16, s32, s32 *);
|
||||
extern void func_80024054(void *a0, void *a1);
|
||||
extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32);
|
||||
extern s32 func_8005A600(s32, s32, s32, s32, s32);
|
||||
extern s32 func_800D27DC(s32, s32 *, void *, s32, s32);
|
||||
extern s32 *func_800D29F8(s32, s32, void *, s32, s32);
|
||||
extern int func_80137D08(int arg0, int arg1, short arg2);
|
||||
extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
|
||||
|
||||
void func_8013FAF8(s16 arg0, s16 arg1) {
|
||||
|
||||
extern s32 D_801151D0;
|
||||
extern u16 D_8011511A;
|
||||
extern Hw4 D_8011516A[];
|
||||
extern u8 D_80078EC0;
|
||||
extern Rec20 D_800AE7B8[];
|
||||
extern Blk60 D_8018460C[];
|
||||
extern Blk20 D_8018490C[];
|
||||
extern Prim4 D_80184A0C[];
|
||||
extern Prim4 D_80184A7C[];
|
||||
extern Prim4 *D_80184B70[];
|
||||
extern s32 D_80184B90[];
|
||||
extern u8 D_80184BB0;
|
||||
extern s16 D_80184F84;
|
||||
extern s16 D_80184F86;
|
||||
u8 sp18[72];
|
||||
s32 sp60[2];
|
||||
s32 *ot;
|
||||
s16 i;
|
||||
s16 j;
|
||||
s32 flag;
|
||||
s32 addr;
|
||||
Prim4 *p;
|
||||
s32 r;
|
||||
s32 t;
|
||||
s16 *pp;
|
||||
s32 flag2;
|
||||
register s32 flag3 __asm__("$18");
|
||||
|
||||
func_80140E6C();
|
||||
func_80140F00();
|
||||
ot = func_80140958((s32 *)D_801151D0, arg0, arg1);
|
||||
if (D_8011511A < 6) {
|
||||
ot = (s32 *)func_80141100((int)ot);
|
||||
}
|
||||
for (i = arg0; i < arg1; i++) {
|
||||
if (i == D_8011511A || i == 2 || i == 4) {
|
||||
flag = 0;
|
||||
} else {
|
||||
flag = 0xFF;
|
||||
}
|
||||
p = &D_80184A0C[i];
|
||||
if (i != 5) {
|
||||
if (i == 2) {
|
||||
addr = ((s32 *)&D_80184BB0)[*(s16 *)&D_80115128];
|
||||
} else {
|
||||
addr = D_80184B90[i];
|
||||
}
|
||||
} else {
|
||||
addr = func_8013FFD8(2, func_8014168C(2), sp60);
|
||||
}
|
||||
func_80024054(addr, sp18);
|
||||
ot = func_800D2650(ot, sp18, (s16)(p->f0 + (u16)D_8011516A[i].x), p->f2, 1,
|
||||
flag != 0 ? 0x585858 : 0x808080);
|
||||
p = D_80184B70[i];
|
||||
j = 0;
|
||||
if (p != 0) {
|
||||
if (i == 2 && *(s16 *)&D_80115128 != 0) {
|
||||
p = D_80184A7C;
|
||||
}
|
||||
flag2 = flag;
|
||||
for (;;) {
|
||||
r = func_8013FFD8(i, j++, sp60);
|
||||
if (r == 0) {
|
||||
break;
|
||||
}
|
||||
if (r < 0) {
|
||||
func_80024054(r, sp18);
|
||||
t = 1;
|
||||
if (i == 0 && (D_80078EC0 & 0x7F) == j) {
|
||||
t = 0xB6;
|
||||
}
|
||||
if (flag2 != 0) {
|
||||
sp60[0] += -0x282828;
|
||||
}
|
||||
ot = func_800D2650(ot, sp18, (s16)(p->f0 + (u16)D_8011516A[i].x), p->f2, t, sp60[0]);
|
||||
}
|
||||
p++;
|
||||
}
|
||||
}
|
||||
func_8005A600((s32)ot, 0, 0, 0x15, 0);
|
||||
flag3 = flag;
|
||||
*ot = 0x2000000;
|
||||
*ot = (D_800AE7B8[*(u16 *)&D_800B9A02].f4[2] & 0xFFFFFF) | 0x2000000;
|
||||
D_800AE7B8[*(u16 *)&D_800B9A02].f4[2] =
|
||||
(D_800AE7B8[*(u16 *)&D_800B9A02].f4[2] & 0xFF000000) | ((u32)ot & 0xFFFFFF);
|
||||
ot = func_800D29F8(flag3,
|
||||
func_800D27DC(flag3 != 0, ot + 10, &D_8018460C[i], 8, D_8011516A[i].x),
|
||||
&D_8018490C[i], 2, D_8011516A[i].x);
|
||||
}
|
||||
pp = &D_80184F84;
|
||||
if (*pp == 0xE) {
|
||||
ot = func_80137D08(ot, &D_800AE7B8[*(u16 *)&D_800B9A02], 2);
|
||||
}
|
||||
if (*pp != 0 && D_80184F86 != 0) {
|
||||
ot = func_8013AB54(ot, D_800AE7B8[*(u16 *)&D_800B9A02].f4 + 2, (s32)(pp - 2), 0x8000);
|
||||
}
|
||||
D_801151D0 = (s32)ot;
|
||||
}
|
||||
|
||||
|
||||
extern u8 D_80184CC0[];
|
||||
|
||||
@@ -4135,7 +4253,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_8013F350", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80185784) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80185784[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80185784[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */
|
||||
|
||||
|
||||
@@ -1099,7 +1099,6 @@ extern s32 func_80013294(void *a0, void *a1);
|
||||
extern int func_80144B14(int param_s0);
|
||||
extern void func_801458E0(void);
|
||||
extern s32 D_800AE6AC;
|
||||
extern s32 D_800AE6B0;
|
||||
extern s16 D_800B9A0A;
|
||||
extern u8 D_80078E50;
|
||||
extern void func_800D185C(u8 *a0);
|
||||
@@ -1403,7 +1402,6 @@ extern u8 D_80078EBF;
|
||||
extern s32 func_80149744(struct S_80149744 *a0);
|
||||
extern void func_8015F7A0();
|
||||
extern void func_80149788(void);
|
||||
extern u8 D_80078E78[];
|
||||
extern u8 D_80078EC1;
|
||||
extern s32 func_8014CB7C(void);
|
||||
extern s32 func_8014C088(s32 a0, s32 a1);
|
||||
@@ -2035,7 +2033,6 @@ extern void func_8015BDD0(s32 *a0); /* defined */
|
||||
extern void func_801575E4(void *a0); /* defined */
|
||||
extern void func_80157580(s32 arg0);
|
||||
extern u8 D_800D4F14[];
|
||||
extern s32 D_8011F730;
|
||||
extern void func_801576A8(void *arg0);
|
||||
extern s32 func_8015773C(u8 *a0);
|
||||
extern s32 func_8015771C(u8 *a0);
|
||||
@@ -2569,8 +2566,6 @@ extern s32 func_8014A69C(s32 *a0);
|
||||
extern void func_8014E6A0(void);
|
||||
extern void func_8015CF8C(s32 *a0);
|
||||
extern s32 func_801725A4(u8 *a0);
|
||||
extern s16 D_801152A0;
|
||||
extern u8 D_800D4BE0[];
|
||||
extern s32 D_800D4E94;
|
||||
extern s32 D_800D4ED4;
|
||||
extern u8 D_800D4F8C[];
|
||||
@@ -2580,6 +2575,14 @@ extern s32 D_800D4B48;
|
||||
s32 func_8015AE2C(arg0)
|
||||
s32 arg0;
|
||||
{
|
||||
/* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every
|
||||
LATER function in this TU, which blocks a byte-true decl of a different type.
|
||||
Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */
|
||||
extern u8 D_800D4BE0[];
|
||||
/* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every
|
||||
LATER function in this TU, which blocks a byte-true decl of a different type.
|
||||
Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */
|
||||
extern s16 D_801152A0;
|
||||
s32 flag;
|
||||
s32 r;
|
||||
s32 lim;
|
||||
@@ -3217,7 +3220,6 @@ s32 func_8015C128(s32 param_1) {
|
||||
|
||||
|
||||
|
||||
extern void (*D_801862A8[])(void *);
|
||||
extern u16 D_800B99DA;
|
||||
|
||||
extern s32 func_80149FB0(s32 a0);
|
||||
@@ -3250,6 +3252,10 @@ extern void func_8015C0C4(s32 a0);
|
||||
extern void func_8015C6E0(s32*);
|
||||
|
||||
void func_8015C32C(s32 arg0) {
|
||||
/* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every
|
||||
LATER function in this TU, which blocks a byte-true decl of a different type.
|
||||
Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */
|
||||
extern void (*D_801862A8[])(void *);
|
||||
s32 iVar2;
|
||||
u32 uVar4;
|
||||
s32 vin[4];
|
||||
@@ -3942,7 +3948,104 @@ void func_8015D5E8(int param_1)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_8015A3C8", func_8015D738);
|
||||
|
||||
extern int func_80148AFC(void*);
|
||||
extern s32 func_80161B18(void *);
|
||||
extern s32 func_80161B84(void *);
|
||||
extern u16 func_80148800(s32*);
|
||||
extern u8 func_8014BEF8(void);
|
||||
extern s32 func_80165624(s32);
|
||||
extern s32 func_801488A8(u8*);
|
||||
extern void func_8014D738(void);
|
||||
extern s32 func_80161208();
|
||||
extern void func_80154A74(s32, s32);
|
||||
extern void func_8015DAC4(s32*);
|
||||
extern void func_8015DE24(s32*);
|
||||
extern void func_8015DA5C(s32);
|
||||
extern void func_8015F948(s32*);
|
||||
extern void func_800CAF14(void *);
|
||||
extern void func_80154150(s32, s32);
|
||||
extern void func_80146DB8(s32*, s32*);
|
||||
extern void func_80147A84(s32);
|
||||
extern void func_801473EC(s32*);
|
||||
extern void func_80149374(s32, s32);
|
||||
extern void func_80147078(s32*, s16);
|
||||
extern void func_80159B70(void *);
|
||||
extern void func_8015C714(void *);
|
||||
extern void func_801483E8(unsigned char*);
|
||||
|
||||
|
||||
void func_8015D738(void *arg0) {
|
||||
|
||||
extern u8 D_80078E78[];
|
||||
extern u8 D_801864EC[];
|
||||
|
||||
extern u8 D_8018626C[];
|
||||
extern u8 D_8018627C[];
|
||||
u8 *p = D_80078E78;
|
||||
s32 s1;
|
||||
((void (*)(void))func_80148AFC)();
|
||||
if (func_80161B18(arg0) != 0) return;
|
||||
if (func_80161B84(arg0) != 0) return;
|
||||
s1 = *(s32 *)((char *)arg0 + 0x178);
|
||||
if (s1 != 0) {
|
||||
if (*(u16 *)s1 == 0x360) goto block_808;
|
||||
}
|
||||
__asm__ __volatile__("");
|
||||
if (s1 != 0) {
|
||||
if (*(u16 *)s1 != 0) goto block_7F4;
|
||||
}
|
||||
D_801862A8[*(u16 *)arg0](arg0);
|
||||
((void (*)(void *, s32))func_80147078)(arg0, 0);
|
||||
func_80159B70(arg0);
|
||||
return;
|
||||
block_7F4:
|
||||
if (((s32 (*)(void *))func_80148800)(arg0) & 0x80) {
|
||||
block_808:
|
||||
((void (*)(void *, s32))func_80154A74)(arg0, 0x11);
|
||||
((void (*)(void *))func_8015DAC4)(arg0);
|
||||
return;
|
||||
}
|
||||
if ((((s32 (*)(void *))func_80148800)(arg0) & 0x10) && ((s32 (*)(void *))func_8014BEF8)(arg0) != 0) {
|
||||
((void (*)(void *, s32))func_80154A74)(arg0, 0x11);
|
||||
((void (*)(void *))func_8015DE24)(arg0);
|
||||
return;
|
||||
}
|
||||
if ((((s32 (*)(void *))func_80148800)(arg0) & 0x20) && p[0x49] == 0xA) {
|
||||
if (((s32 (*)(void *))func_80165624)(arg0) != 0) {
|
||||
((void (*)(void *))func_8015DA5C)(arg0);
|
||||
((void (*)(void *))func_8015F948)(arg0);
|
||||
return;
|
||||
}
|
||||
((void (*)(void *, s32))func_80154A74)(arg0, 0x11);
|
||||
func_800CAF14(arg0);
|
||||
return;
|
||||
}
|
||||
if (((s32 (*)(void *))func_801488A8)(arg0) != 0 && *(u16 *)(*(s32 *)((char *)arg0 + 0x178)) != 0x82) {
|
||||
((void (*)(void *, s32))func_80154150)(arg0, 0x1B);
|
||||
((void (*)(void *, void *))func_80146DB8)(arg0, &D_8018626C);
|
||||
} else {
|
||||
((void (*)(void *, s32))func_80154150)(arg0, 0x1A);
|
||||
((void (*)(void *, void *))func_80146DB8)(arg0, &D_8018627C);
|
||||
}
|
||||
((void (*)(void *))func_80147A84)(arg0);
|
||||
((void (*)(void *))func_801473EC)(arg0);
|
||||
s1 = *(s32 *)((char *)arg0 + 0x178);
|
||||
*(s16 *)(s1 + 6) = (s16)((s8)D_801864EC[*(s32 *)((char *)arg0 + 0x234)] + *(u16 *)(*(s32 *)(s1 + 0x78) + 0xc));
|
||||
*(s16 *)(s1 + 0xa) = (s16)((s8)D_801864EC[*(s32 *)((char *)arg0 + 0x234) + 1] + *(u16 *)(*(s32 *)(s1 + 0x78) + 0xe));
|
||||
*(s16 *)(s1 + 0xe) = (s16)((s8)D_801864EC[*(s32 *)((char *)arg0 + 0x234) + 2] + *(u16 *)(*(s32 *)(s1 + 0x78) + 0x10));
|
||||
((void (*)(void *, void *))func_80149374)(arg0, (void *)(s1 + 4));
|
||||
*(s16 *)(*(s32 *)(s1 + 0x20) + 0x12) = (*(u16 *)(*(s32 *)((char *)arg0 + 0x20) + 0x12) + 0x800) & 0xFFF;
|
||||
if (((s32 (*)(void *))func_8014D738)(arg0) != 0) {
|
||||
D_801862A8[*(u16 *)arg0](arg0);
|
||||
((void (*)(void *, s32))func_80147078)(arg0, 9);
|
||||
func_8015C714(arg0);
|
||||
return;
|
||||
}
|
||||
if (func_80161208(arg0) != 0) return;
|
||||
((void (*)(void *))func_801483E8)(arg0);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8015DA5C() /* dedup: shared engine-core @0x8015da5c (src/shared) */
|
||||
|
||||
|
||||
@@ -283,7 +283,6 @@ extern void func_8012AD80(s32 a0);
|
||||
extern void func_8012ADE4(u8 *a0);
|
||||
extern s32 *D_80126B78;
|
||||
extern s32 *D_80126B90;
|
||||
extern s32 D_80126B58;
|
||||
extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
extern s32 func_80013478(s32 a0, s32 a1);
|
||||
extern s32 func_8012AE00(s32 a0);
|
||||
@@ -4715,7 +4714,15 @@ DEFINE_func_8016EFC8() /* dedup: shared engine-core @0x8016efc8 (src/shared) */
|
||||
DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016f094 (src/shared) */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_8016AE5C", func_8016F0AC);
|
||||
extern void func_8016F0E4(void);
|
||||
extern void func_80165770(void);
|
||||
void func_8016F0AC(void) {
|
||||
|
||||
extern u8 aD80126B58_8016F0AC __asm__("D_80126B58");
|
||||
((void (*)(void *))func_8016F0E4)(&aD80126B58_8016F0AC);
|
||||
((void (*)(void *))func_80165770)(&aD80126B58_8016F0AC);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* RECONCILE NOTE (uc3) — the body is byte-unchanged from uc2; only the declaration
|
||||
|
||||
@@ -2185,7 +2185,14 @@ DEFINE_func_80130AF0() /* dedup: shared engine-core @0x80130af0 (src/shared) */
|
||||
DEFINE_func_80130C08() /* dedup: shared engine-core @0x80130c08 (src/shared) */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107", func_80130D0C);
|
||||
|
||||
|
||||
void func_80130D0C(void *a0) {
|
||||
|
||||
extern void (*D_80182838[])(void);
|
||||
D_80182838[*(u8 *)((s32)a0 + 0xC1)]();
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107", func_80130D48);
|
||||
|
||||
|
||||
@@ -2405,7 +2405,70 @@ block_14:
|
||||
DEFINE_func_80134FB8() /* dedup: shared engine-core @0x80134fb8 (src/shared) */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_80131340", func_80135004);
|
||||
typedef struct { s8 c[8]; } Blk8_80135004;
|
||||
|
||||
// @class: plumbing
|
||||
// @stuck: MATCH (89 ins). To BANK: retype aD80182A3C_80135004 + aD80182A38_80135004 (u8 -> s16*) in sibling func_80135168's externs (src/ov_SC01_077/ov_SC01_077_a.c ~L1879); they hold pointers double-referenced across a call, so only a 4-byte/pointer decl folds %lo (u8 &-cast CSE's the address into a saved reg). Retype is byte-NEUTRAL for the sibling (verified: identical objdump bytes u8 vs s16*).
|
||||
|
||||
|
||||
|
||||
|
||||
s32 func_80135004(s32 arg0, s32 p1, s32 p2)
|
||||
{
|
||||
|
||||
extern s32 D_8019A778;
|
||||
extern int func_80134A74(int, s16, s16, int);
|
||||
extern s16 * aD80182A3C_80135004 __asm__("D_80182A3C");
|
||||
extern s16 * aD80182A38_80135004 __asm__("D_80182A38");
|
||||
extern u8 D_80182A44;
|
||||
extern s16 *D_80182A40;
|
||||
extern u16 D_8019A788;
|
||||
|
||||
register s16 *pb0 __asm__("$9"); /* aD80182A3C_80135004 -> $t1 */
|
||||
register s16 *pac __asm__("$6"); /* aD80182A38_80135004 -> $a2 */
|
||||
register s16 *pb8 __asm__("$8"); /* D_80182A44 -> $t0 */
|
||||
u16 *pb4;
|
||||
u16 a, b;
|
||||
int id;
|
||||
int a1v, a2v, d94;
|
||||
|
||||
pb0 = aD80182A3C_80135004;
|
||||
__asm__ __volatile__("" : : "r"(pb0));
|
||||
|
||||
a = ((u16 *)p2)[0]; pac = aD80182A38_80135004; pb0[0] = a; b = ((u16 *)p1)[0]; pb8 = (*(s16 * *)&D_80182A44); pac[0] = b; pb8[0] = a - b;
|
||||
a = ((u16 *)p2)[1]; pb0[1] = a; b = ((u16 *)p1)[1]; pac[1] = b; pb8[1] = a - b;
|
||||
a = ((u16 *)p2)[2]; pb0[2] = a; b = ((u16 *)p1)[2]; pac[2] = b; pb8[2] = a - b;
|
||||
|
||||
id = ((int)arg0) & 0xFFFF;
|
||||
a1v = pac[0]; a2v = pac[2]; d94 = D_8019A778;
|
||||
__asm__ __volatile__("" ::: "memory");
|
||||
D_8019A788 = 0;
|
||||
|
||||
if (func_80134A74(id, a1v, a2v, d94)) {
|
||||
found:
|
||||
pb4 = (*(u16 * *)&D_80182A40);
|
||||
((u16 *)p2)[0] = pb4[0];
|
||||
((u16 *)p2)[1] = pb4[1];
|
||||
((u16 *)p2)[2] = pb4[2];
|
||||
((u16 *)p2)[3] = D_8019A788;
|
||||
return 1;
|
||||
}
|
||||
{
|
||||
register u16 *qb __asm__("$4"); /* aD80182A38_80135004 -> $a0 (reloaded) */
|
||||
register int qa0 __asm__("$5"); /* aD80182A3C_80135004[0], kept in $a1 for the 2nd-call arg */
|
||||
register u16 *qa __asm__("$6"); /* aD80182A3C_80135004 -> $a2 (reloaded) */
|
||||
qb = (u16 *)aD80182A38_80135004;
|
||||
qa = (u16 *)aD80182A3C_80135004;
|
||||
qa0 = qa[0];
|
||||
if (((qb[0] & 0xFF80) == (qa0 & 0xFF80)) &&
|
||||
((qb[2] & 0xFF80) == (qa[2] & 0xFF80)))
|
||||
return 0;
|
||||
if (func_80134A74(id, (s16)qa0, (s16)qa[2], D_8019A778))
|
||||
goto found;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -169,7 +169,7 @@ extern s32 D_80126F04[];
|
||||
extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
extern s32 D_80126FA8[];
|
||||
extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */
|
||||
extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
/* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
extern s32 D_800AE688[];
|
||||
extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */
|
||||
extern void func_8012A018(s32 a, s32 b);
|
||||
@@ -632,7 +632,6 @@ extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out);
|
||||
extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine");
|
||||
extern void aF80137030(s32 x, s32 y) __asm__("func_80137030");
|
||||
extern void func_80137178(s32 x, s32 y);
|
||||
extern u8 D_800AF630[];
|
||||
extern u16 aD800B9A02 __asm__("D_800B9A02");
|
||||
extern void func_801372B0(void);
|
||||
extern void func_80137614(s32 a0, s32 a1, s32 a2);
|
||||
@@ -1660,7 +1659,23 @@ void func_8013C98C(void) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_801380E0", func_8013C9C4);
|
||||
extern void func_80019064(void *a0);
|
||||
|
||||
void func_8013C9C4(void * arg0)
|
||||
{
|
||||
|
||||
extern M2C_UNK D_80062BC0;
|
||||
extern s32 D_8019A7F0;
|
||||
extern s8 D_8019A7F4;
|
||||
extern s8 D_8019A7F5;
|
||||
D_8019A7F0 = arg0;
|
||||
D_8019A7F4 = 0;
|
||||
D_8019A7F5 = 0;
|
||||
if (func_80019198() == 0) {
|
||||
func_80019064(&D_80062BC0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void func_8013CA14(void)
|
||||
|
||||
@@ -115,7 +115,6 @@ extern s32 func_80128ED8(s32 param_1, s32 *param_2);
|
||||
extern void func_80128FAC(u16 *arg0);
|
||||
extern s16 D_8011DB2C;
|
||||
extern s16 D_8011DB30;
|
||||
extern s32 D_80126AEC;
|
||||
extern u8 *func_8012913C(s32 a0);
|
||||
extern u8 * func_801290DC(s32 a0, u8 *a1);
|
||||
extern void func_8001D074(s32 a, s32 b);
|
||||
@@ -130,12 +129,9 @@ extern void func_8012927C(void);
|
||||
extern void func_8012931C(struct vec *a0);
|
||||
extern void func_80129350(s32 a0, s32 a1);
|
||||
extern void func_80129374(s32 a0, s32 a1);
|
||||
extern s16 D_800B9AAC[];
|
||||
extern s16 D_800B9AAE[];
|
||||
extern s16 D_800B9AB0[];
|
||||
extern s16 D_800B9AB2[];
|
||||
extern s16 D_800B9AB4[];
|
||||
extern s16 D_800B9AB6[];
|
||||
extern s16 D_800B9AB8[];
|
||||
extern s16 D_800B9ABA[];
|
||||
extern void func_80129398(void);
|
||||
@@ -152,7 +148,6 @@ extern void GsSortBg(s32 *, void *, u16, s32 *);
|
||||
extern void GsSortFastBg(s32 *, void *, u16, s32 *);
|
||||
extern unsigned short D_800B99F0;
|
||||
extern struct BigCopy D_80126DB8;
|
||||
extern u8 D_80126948[];
|
||||
extern struct BigCopy D_80114EE8;
|
||||
extern s32 D_80126E60[];
|
||||
extern s8 D_801150D6;
|
||||
@@ -166,12 +161,12 @@ extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (
|
||||
extern void GsSetRefView2L(void *);
|
||||
extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */
|
||||
extern s32 D_80126F04[];
|
||||
extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
/* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
extern s32 D_80126FA8[];
|
||||
extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */
|
||||
extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
/* canonical (sibling): u8[] — cast (s32*) at use */
|
||||
extern s32 D_800AE688[];
|
||||
extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */
|
||||
/* canonical (10 siblings): scalar s32 — store (s32)ptr */
|
||||
extern void func_8012A018(s32 a, s32 b);
|
||||
extern void func_80129FF4(void);
|
||||
extern void func_8012A048(void *a0, s32 a1, u8 a2);
|
||||
@@ -212,7 +207,6 @@ extern s16 D_80127080;
|
||||
extern s16 D_801152C2;
|
||||
extern void func_8012A304(s32 a0, s32 a1);
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
extern s32 D_801151D4;
|
||||
extern void func_8012A418(void);
|
||||
extern Vec8 D_80114F24;
|
||||
extern void func_8012A464(void);
|
||||
@@ -249,9 +243,6 @@ extern void func_8012AD64(s32 *a0, s16 a1);
|
||||
extern void func_8012AD6C(void *a0);
|
||||
extern void func_8012AD80(s32 a0);
|
||||
extern void func_8012ADE4(u8 *a0);
|
||||
extern s32 *D_80126B78;
|
||||
extern s32 *D_80126B90;
|
||||
extern s32 D_80126B58;
|
||||
extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
extern s32 func_80013478(s32 a0, s32 a1);
|
||||
extern s32 func_8012AE00(s32 a0);
|
||||
@@ -318,7 +309,6 @@ extern s32 func_8012BF7C(s16 *a0);
|
||||
extern s16 D_80126CAC;
|
||||
extern short D_80126CAE;
|
||||
extern int func_8012BFA8(short *a0);
|
||||
extern s32 D_801274D4;
|
||||
extern s32 D_801274E0;
|
||||
extern s32 func_8012C044(s32 a0);
|
||||
extern void func_8012C218(void *a0);
|
||||
@@ -632,7 +622,6 @@ extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out);
|
||||
extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine");
|
||||
extern void aF80137030(s32 x, s32 y) __asm__("func_80137030");
|
||||
extern void func_80137178(s32 x, s32 y);
|
||||
extern u8 D_800AF630[];
|
||||
extern u16 aD800B9A02 __asm__("D_800B9A02");
|
||||
extern void func_801372B0(void);
|
||||
extern void func_80137614(s32 a0, s32 a1, s32 a2);
|
||||
@@ -715,7 +704,6 @@ extern s32 *D_80126A30;
|
||||
extern void func_80139954(void);
|
||||
extern s32 D_80126A3C;
|
||||
extern s32 func_801399F0(s32 a0);
|
||||
extern s32 D_80127520;
|
||||
extern void func_80139A34(s32 a0);
|
||||
extern s32 D_80127530[4];
|
||||
extern void func_80139A44(s32 a0, u16 a1);
|
||||
@@ -819,8 +807,6 @@ extern void func_8013F244(void);
|
||||
extern void func_8013FAF8(s16 a0, s16 a1);
|
||||
extern void func_8013E958(void);
|
||||
extern u8 D_801151C8[];
|
||||
extern s32 D_801151D0;
|
||||
extern u16 D_8011511A;
|
||||
extern u16 D_8011511E;
|
||||
extern s32 D_80115130;
|
||||
extern s16 D_8011514C;
|
||||
@@ -883,7 +869,6 @@ extern void func_80141C0C(s32);
|
||||
// callers already cast (`((short (*)(void))func_8013F350)()`) -> def-side reconcile.
|
||||
|
||||
extern u16 D_80115110;
|
||||
extern u16 D_8011511A;
|
||||
extern u16 D_8011511C;
|
||||
extern u16 D_8011511E;
|
||||
extern u16 D_80115120;
|
||||
@@ -913,6 +898,10 @@ extern void func_801407F4(void);
|
||||
extern s32 func_801416D4(s16); /* macro-canonical redecl (§8e) */
|
||||
|
||||
s32 func_8013F350(void) {
|
||||
/* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every
|
||||
LATER function in this TU, which blocks a byte-true decl of a different type.
|
||||
Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */
|
||||
extern u16 D_8011511A;
|
||||
register u16 *pd __asm__("$5") = &D_8011511C;
|
||||
u16 *ps;
|
||||
u16 *pf;
|
||||
@@ -1152,7 +1141,136 @@ s32 func_8013F350(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_8013F350", func_8013FAF8);
|
||||
|
||||
|
||||
// @class: regalloc-order
|
||||
// @stuck: none — MATCH (312/312, relocation-masked)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern void func_80140E6C(void);
|
||||
extern void func_80140F00(void);
|
||||
extern s32 *func_80140958();
|
||||
extern int func_80141100(int);
|
||||
extern s16 func_8014168C(s16);
|
||||
extern s32 func_8013FFD8(s16, s32, s32 *);
|
||||
extern void func_80024054(void *a0, void *a1);
|
||||
extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32);
|
||||
extern s32 func_8005A600(s32, s32, s32, s32, s32);
|
||||
extern s32 func_800D27DC(s32, s32 *, void *, s32, s32);
|
||||
extern s32 *func_800D29F8(s32, s32, void *, s32, s32);
|
||||
extern int func_80137D08(int arg0, int arg1, short arg2);
|
||||
extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
|
||||
|
||||
void func_8013FAF8(s16 arg0, s16 arg1) {
|
||||
|
||||
extern s32 D_801151D0;
|
||||
extern u16 D_8011511A;
|
||||
extern Hw4 D_8011516A[];
|
||||
extern u8 D_80078EC0;
|
||||
extern Rec20 D_800AE7B8[];
|
||||
extern Blk60 D_80182EA8[];
|
||||
extern Blk20 D_801831A8[];
|
||||
extern Prim4 D_801832A8[];
|
||||
extern Prim4 D_80183318[];
|
||||
extern Prim4 *D_8018340C[];
|
||||
extern s32 D_8018342C[];
|
||||
extern u8 D_8018344C;
|
||||
extern s16 D_80183820;
|
||||
extern s16 D_80183822;
|
||||
u8 sp18[72];
|
||||
s32 sp60[2];
|
||||
s32 *ot;
|
||||
s16 i;
|
||||
s16 j;
|
||||
s32 flag;
|
||||
s32 addr;
|
||||
Prim4 *p;
|
||||
s32 r;
|
||||
s32 t;
|
||||
s16 *pp;
|
||||
s32 flag2;
|
||||
register s32 flag3 __asm__("$18");
|
||||
|
||||
func_80140E6C();
|
||||
func_80140F00();
|
||||
ot = func_80140958((s32 *)D_801151D0, arg0, arg1);
|
||||
if (D_8011511A < 6) {
|
||||
ot = (s32 *)func_80141100((int)ot);
|
||||
}
|
||||
for (i = arg0; i < arg1; i++) {
|
||||
if (i == D_8011511A || i == 2 || i == 4) {
|
||||
flag = 0;
|
||||
} else {
|
||||
flag = 0xFF;
|
||||
}
|
||||
p = &D_801832A8[i];
|
||||
if (i != 5) {
|
||||
if (i == 2) {
|
||||
addr = ((s32 *)&D_8018344C)[*(s16 *)&D_80115128];
|
||||
} else {
|
||||
addr = D_8018342C[i];
|
||||
}
|
||||
} else {
|
||||
addr = func_8013FFD8(2, func_8014168C(2), sp60);
|
||||
}
|
||||
func_80024054(addr, sp18);
|
||||
ot = func_800D2650(ot, sp18, (s16)(p->f0 + (u16)D_8011516A[i].x), p->f2, 1,
|
||||
flag != 0 ? 0x585858 : 0x808080);
|
||||
p = D_8018340C[i];
|
||||
j = 0;
|
||||
if (p != 0) {
|
||||
if (i == 2 && *(s16 *)&D_80115128 != 0) {
|
||||
p = D_80183318;
|
||||
}
|
||||
flag2 = flag;
|
||||
for (;;) {
|
||||
r = func_8013FFD8(i, j++, sp60);
|
||||
if (r == 0) {
|
||||
break;
|
||||
}
|
||||
if (r < 0) {
|
||||
func_80024054(r, sp18);
|
||||
t = 1;
|
||||
if (i == 0 && (D_80078EC0 & 0x7F) == j) {
|
||||
t = 0xB6;
|
||||
}
|
||||
if (flag2 != 0) {
|
||||
sp60[0] += -0x282828;
|
||||
}
|
||||
ot = func_800D2650(ot, sp18, (s16)(p->f0 + (u16)D_8011516A[i].x), p->f2, t, sp60[0]);
|
||||
}
|
||||
p++;
|
||||
}
|
||||
}
|
||||
func_8005A600((s32)ot, 0, 0, 0x15, 0);
|
||||
flag3 = flag;
|
||||
*ot = 0x2000000;
|
||||
*ot = (D_800AE7B8[*(u16 *)&D_800B9A02].f4[2] & 0xFFFFFF) | 0x2000000;
|
||||
D_800AE7B8[*(u16 *)&D_800B9A02].f4[2] =
|
||||
(D_800AE7B8[*(u16 *)&D_800B9A02].f4[2] & 0xFF000000) | ((u32)ot & 0xFFFFFF);
|
||||
ot = func_800D29F8(flag3,
|
||||
func_800D27DC(flag3 != 0, ot + 10, &D_80182EA8[i], 8, D_8011516A[i].x),
|
||||
&D_801831A8[i], 2, D_8011516A[i].x);
|
||||
}
|
||||
pp = &D_80183820;
|
||||
if (*pp == 0xE) {
|
||||
ot = func_80137D08(ot, &D_800AE7B8[*(u16 *)&D_800B9A02], 2);
|
||||
}
|
||||
if (*pp != 0 && D_80183822 != 0) {
|
||||
ot = func_8013AB54(ot, D_800AE7B8[*(u16 *)&D_800B9A02].f4 + 2, (s32)(pp - 2), 0x8000);
|
||||
}
|
||||
D_801151D0 = (s32)ot;
|
||||
}
|
||||
|
||||
|
||||
extern u8 D_8018355C[];
|
||||
|
||||
@@ -4137,7 +4255,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_8013F350", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80184020) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80184020[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80184020[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148f60 (src/shared) */
|
||||
|
||||
|
||||
@@ -1083,7 +1083,6 @@ extern s32 func_80013294(void *a0, void *a1);
|
||||
extern int func_80144B14(int param_s0);
|
||||
extern void func_801458E0(void);
|
||||
extern s32 D_800AE6AC;
|
||||
extern s32 D_800AE6B0;
|
||||
extern s16 D_800B9A0A;
|
||||
extern u8 D_80078E50;
|
||||
extern void func_800D185C(u8 *a0);
|
||||
@@ -1389,7 +1388,6 @@ extern u8 D_80078EBF;
|
||||
extern s32 func_80149744(struct S_80149744 *a0);
|
||||
extern void func_8015F7A0();
|
||||
extern void func_80149788(void);
|
||||
extern u8 D_80078E78[];
|
||||
extern u8 D_80078EC1;
|
||||
extern s32 func_8014CB7C(void);
|
||||
extern s32 func_8014C088(s32 a0, s32 a1);
|
||||
@@ -2019,7 +2017,6 @@ extern void func_8015BDD0(s32 *a0); /* defined */
|
||||
extern void func_801575E4(void *a0); /* defined */
|
||||
extern void func_80157580(s32 arg0);
|
||||
extern u8 D_800D4F14[];
|
||||
extern s32 D_8011F730;
|
||||
extern void func_801576A8(void *arg0);
|
||||
extern s32 func_8015773C(u8 *a0);
|
||||
extern s32 func_8015771C(u8 *a0);
|
||||
@@ -2222,6 +2219,10 @@ extern void func_801483E8(unsigned char*);
|
||||
s32 func_8015A3C8(arg0)
|
||||
s32 arg0;
|
||||
{
|
||||
/* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every
|
||||
LATER function in this TU, which blocks a byte-true decl of a different type.
|
||||
Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */
|
||||
extern u8 D_80078E78[];
|
||||
|
||||
extern void (*D_80184B44[])(void *);
|
||||
|
||||
@@ -2549,8 +2550,6 @@ extern s32 func_8014A69C(s32 *a0);
|
||||
extern void func_8014E6A0(void);
|
||||
extern void func_8015CF8C(s32 *a0);
|
||||
extern s32 func_801725A4(u8 *a0);
|
||||
extern s16 D_801152A0;
|
||||
extern u8 D_800D4BE0[];
|
||||
extern s32 D_800D4E94;
|
||||
extern s32 D_800D4ED4;
|
||||
extern u8 D_800D4F8C[];
|
||||
@@ -2560,6 +2559,14 @@ extern s32 D_800D4B48;
|
||||
s32 func_8015AE2C(arg0)
|
||||
s32 arg0;
|
||||
{
|
||||
/* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every
|
||||
LATER function in this TU, which blocks a byte-true decl of a different type.
|
||||
Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */
|
||||
extern u8 D_800D4BE0[];
|
||||
/* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every
|
||||
LATER function in this TU, which blocks a byte-true decl of a different type.
|
||||
Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */
|
||||
extern s16 D_801152A0;
|
||||
s32 flag;
|
||||
s32 r;
|
||||
s32 lim;
|
||||
@@ -3197,7 +3204,6 @@ s32 func_8015C128(s32 param_1) {
|
||||
|
||||
|
||||
|
||||
extern void (*D_80184B44[])(void *);
|
||||
extern u16 D_800B99DA;
|
||||
|
||||
extern s32 func_80149FB0(s32 a0);
|
||||
@@ -3230,6 +3236,10 @@ extern void func_8015C0C4(s32 a0);
|
||||
extern void func_8015C6E0(s32*);
|
||||
|
||||
void func_8015C32C(s32 arg0) {
|
||||
/* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every
|
||||
LATER function in this TU, which blocks a byte-true decl of a different type.
|
||||
Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */
|
||||
extern void (*D_80184B44[])(void *);
|
||||
s32 iVar2;
|
||||
u32 uVar4;
|
||||
s32 vin[4];
|
||||
@@ -3922,7 +3932,104 @@ void func_8015D5E8(int param_1)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_8015A3C8", func_8015D738);
|
||||
|
||||
extern int func_80148AFC(void*);
|
||||
extern s32 func_80161B18(void *);
|
||||
extern s32 func_80161B84(void *);
|
||||
extern u16 func_80148800(s32*);
|
||||
extern u8 func_8014BEF8(void);
|
||||
extern s32 func_80165624(s32);
|
||||
extern s32 func_801488A8(u8*);
|
||||
extern void func_8014D738(void);
|
||||
extern s32 func_80161208();
|
||||
extern void func_80154A74(s32, s32);
|
||||
extern void func_8015DAC4(s32*);
|
||||
extern void func_8015DE24(s32*);
|
||||
extern void func_8015DA5C(s32);
|
||||
extern void func_8015F948(s32*);
|
||||
extern void func_800CAF14(void *);
|
||||
extern void func_80154150(s32, s32);
|
||||
extern void func_80146DB8(s32*, s32*);
|
||||
extern void func_80147A84(s32);
|
||||
extern void func_801473EC(s32*);
|
||||
extern void func_80149374(s32, s32);
|
||||
extern void func_80147078(s32*, s16);
|
||||
extern void func_80159B70(void *);
|
||||
extern void func_8015C714(void *);
|
||||
extern void func_801483E8(unsigned char*);
|
||||
|
||||
|
||||
void func_8015D738(void *arg0) {
|
||||
|
||||
extern u8 D_80078E78[];
|
||||
extern u8 D_80184D88[];
|
||||
|
||||
extern u8 D_80184B08[];
|
||||
extern u8 D_80184B18[];
|
||||
u8 *p = D_80078E78;
|
||||
s32 s1;
|
||||
((void (*)(void))func_80148AFC)();
|
||||
if (func_80161B18(arg0) != 0) return;
|
||||
if (func_80161B84(arg0) != 0) return;
|
||||
s1 = *(s32 *)((char *)arg0 + 0x178);
|
||||
if (s1 != 0) {
|
||||
if (*(u16 *)s1 == 0x360) goto block_808;
|
||||
}
|
||||
__asm__ __volatile__("");
|
||||
if (s1 != 0) {
|
||||
if (*(u16 *)s1 != 0) goto block_7F4;
|
||||
}
|
||||
D_80184B44[*(u16 *)arg0](arg0);
|
||||
((void (*)(void *, s32))func_80147078)(arg0, 0);
|
||||
func_80159B70(arg0);
|
||||
return;
|
||||
block_7F4:
|
||||
if (((s32 (*)(void *))func_80148800)(arg0) & 0x80) {
|
||||
block_808:
|
||||
((void (*)(void *, s32))func_80154A74)(arg0, 0x11);
|
||||
((void (*)(void *))func_8015DAC4)(arg0);
|
||||
return;
|
||||
}
|
||||
if ((((s32 (*)(void *))func_80148800)(arg0) & 0x10) && ((s32 (*)(void *))func_8014BEF8)(arg0) != 0) {
|
||||
((void (*)(void *, s32))func_80154A74)(arg0, 0x11);
|
||||
((void (*)(void *))func_8015DE24)(arg0);
|
||||
return;
|
||||
}
|
||||
if ((((s32 (*)(void *))func_80148800)(arg0) & 0x20) && p[0x49] == 0xA) {
|
||||
if (((s32 (*)(void *))func_80165624)(arg0) != 0) {
|
||||
((void (*)(void *))func_8015DA5C)(arg0);
|
||||
((void (*)(void *))func_8015F948)(arg0);
|
||||
return;
|
||||
}
|
||||
((void (*)(void *, s32))func_80154A74)(arg0, 0x11);
|
||||
func_800CAF14(arg0);
|
||||
return;
|
||||
}
|
||||
if (((s32 (*)(void *))func_801488A8)(arg0) != 0 && *(u16 *)(*(s32 *)((char *)arg0 + 0x178)) != 0x82) {
|
||||
((void (*)(void *, s32))func_80154150)(arg0, 0x1B);
|
||||
((void (*)(void *, void *))func_80146DB8)(arg0, &D_80184B08);
|
||||
} else {
|
||||
((void (*)(void *, s32))func_80154150)(arg0, 0x1A);
|
||||
((void (*)(void *, void *))func_80146DB8)(arg0, &D_80184B18);
|
||||
}
|
||||
((void (*)(void *))func_80147A84)(arg0);
|
||||
((void (*)(void *))func_801473EC)(arg0);
|
||||
s1 = *(s32 *)((char *)arg0 + 0x178);
|
||||
*(s16 *)(s1 + 6) = (s16)((s8)D_80184D88[*(s32 *)((char *)arg0 + 0x234)] + *(u16 *)(*(s32 *)(s1 + 0x78) + 0xc));
|
||||
*(s16 *)(s1 + 0xa) = (s16)((s8)D_80184D88[*(s32 *)((char *)arg0 + 0x234) + 1] + *(u16 *)(*(s32 *)(s1 + 0x78) + 0xe));
|
||||
*(s16 *)(s1 + 0xe) = (s16)((s8)D_80184D88[*(s32 *)((char *)arg0 + 0x234) + 2] + *(u16 *)(*(s32 *)(s1 + 0x78) + 0x10));
|
||||
((void (*)(void *, void *))func_80149374)(arg0, (void *)(s1 + 4));
|
||||
*(s16 *)(*(s32 *)(s1 + 0x20) + 0x12) = (*(u16 *)(*(s32 *)((char *)arg0 + 0x20) + 0x12) + 0x800) & 0xFFF;
|
||||
if (((s32 (*)(void *))func_8014D738)(arg0) != 0) {
|
||||
D_80184B44[*(u16 *)arg0](arg0);
|
||||
((void (*)(void *, s32))func_80147078)(arg0, 9);
|
||||
func_8015C714(arg0);
|
||||
return;
|
||||
}
|
||||
if (func_80161208(arg0) != 0) return;
|
||||
((void (*)(void *))func_801483E8)(arg0);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8015DA5C() /* dedup: shared engine-core @0x8015da5c (src/shared) */
|
||||
|
||||
|
||||
@@ -270,7 +270,6 @@ extern void func_8012AD80(s32 a0);
|
||||
extern void func_8012ADE4(u8 *a0);
|
||||
extern s32 *D_80126B78;
|
||||
extern s32 *D_80126B90;
|
||||
extern s32 D_80126B58;
|
||||
extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
extern s32 func_80013478(s32 a0, s32 a1);
|
||||
extern s32 func_8012AE00(s32 a0);
|
||||
@@ -4630,7 +4629,15 @@ DEFINE_func_8016EFC8() /* dedup: shared engine-core @0x8016efc8 (src/shared) */
|
||||
DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016f094 (src/shared) */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_8016AE5C", func_8016F0AC);
|
||||
extern void func_8016F0E4(void);
|
||||
extern void func_80165770(void);
|
||||
void func_8016F0AC(void) {
|
||||
|
||||
extern u8 aD80126B58_8016F0AC __asm__("D_80126B58");
|
||||
((void (*)(void *))func_8016F0E4)(&aD80126B58_8016F0AC);
|
||||
((void (*)(void *))func_80165770)(&aD80126B58_8016F0AC);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* RECONCILE NOTE (uc3) — the body is byte-unchanged from uc2; only the declaration
|
||||
|
||||
@@ -3325,7 +3325,93 @@ void func_80181A94(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80180B04", func_80181AD0);
|
||||
|
||||
/*
|
||||
* func_80181AD0 — "spawn init" state handler.
|
||||
*
|
||||
* Sibling-search hit (cookbook §160g): func_8018523C
|
||||
* (src/ov_SC03_119/ov_SC03_119_jr_8017FB84.c) shares the exact opening
|
||||
* idiom — func_8012C1B8() -> store result to a0+0x20 -> if zero,
|
||||
* ((void (*)(s32))func_8012CAE4)(a0); return; else func_8001C214(v0, TABLE[idx]) — and the
|
||||
* same shared-engine-core template also lives at
|
||||
* src/shared/engine_core.h:10060 DEFINE_func_80144A98(). Both establish the
|
||||
* house style used here: `extern void func_8012C1B8(void);` called through
|
||||
* a `(s32 (*)(void))` cast (the canonical decl elsewhere is void-returning;
|
||||
* §161c — cast at the call site rather than fighting it), and
|
||||
* func_8012CAE4/func_8001C214 declared exactly as they already appear
|
||||
* in this TU (grep hits at src/ov_SC06_018/ov_SC06_018_jr_80186270.c
|
||||
* lines 2783/2790/2849/2895/2896).
|
||||
*
|
||||
* D_8119EC14 is stored by ADDRESS only (lui/addiu, no lw) — §160f array
|
||||
* declaration to force the address-only store.
|
||||
*
|
||||
* The three `lhu ...,0x70($s1); andi ...,0xF` sequences are NOT cached in
|
||||
* a local — the target re-loads/re-masks independently at the array index,
|
||||
* the ==4 compare, and the ==5 compare (three separate `lhu+andi` pairs in
|
||||
* the .s), so the raw expression is repeated at each site rather than
|
||||
* hoisted into one named temp.
|
||||
*/
|
||||
|
||||
void func_80181AD0(void *a0) {
|
||||
extern void func_8012C1B8(void);
|
||||
extern void func_8012CAE4(void*);
|
||||
extern void func_8001C214(s32 a0, s32 a1);
|
||||
extern void func_80049CAC(s32 a0, s32 a1);
|
||||
extern void func_800484EC(s32 a0, s32 a1, s32 a2);
|
||||
extern s32 rand(void);
|
||||
extern s32 D_8019EBFC[];
|
||||
extern u8 D_8119EC14[];
|
||||
|
||||
s16 buf[16]; /* sp+0x10 — output of func_80049CAC / input to func_800484EC */
|
||||
s16 rv[3]; /* sp+0x30 — random SVECTOR-ish {x,y,z} */
|
||||
s32 w[3]; /* sp+0x38 — {0, 0, 0xFFE80000} scratch handed to func_800484EC */
|
||||
s32 v0;
|
||||
s32 m;
|
||||
|
||||
v0 = ((s32 (*)(void))func_8012C1B8)();
|
||||
*(s32 *)((s32)a0 + 0x20) = v0;
|
||||
if (v0 == 0) {
|
||||
((void (*)(s32))func_8012CAE4)((s32)a0);
|
||||
return;
|
||||
}
|
||||
|
||||
func_8001C214(v0, D_8019EBFC[*(u16 *)((s32)a0 + 0x70) & 0xF]);
|
||||
|
||||
*(u16 *)((s32)a0 + 0x10A) = *(u16 *)(*(s32 *)((s32)a0 + 0x64) + 0x36);
|
||||
|
||||
if ((*(u16 *)((s32)a0 + 0x70) & 0xF) == 4) {
|
||||
*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x20) = (s32)D_8119EC14;
|
||||
}
|
||||
|
||||
if ((*(u16 *)((s32)a0 + 0x70) & 0xF) == 5) {
|
||||
*(s16 *)((s32)a0 + 0x2) = 2;
|
||||
return;
|
||||
}
|
||||
|
||||
w[1] = 0;
|
||||
w[0] = 0;
|
||||
w[2] = -0x180000;
|
||||
m = rand() % 0x80;
|
||||
if ((rand() & 1) == 0) {
|
||||
rv[0] = m - 0x380;
|
||||
} else {
|
||||
rv[0] = -0x380 - m;
|
||||
}
|
||||
|
||||
rv[1] = *(u16 *)(*(s32 *)(*(s32 *)((s32)a0 + 0x64) + 0x20) + 0x12) + 0x800;
|
||||
rv[2] = 0;
|
||||
func_80049CAC((s32)rv, (s32)buf);
|
||||
|
||||
func_800484EC((s32)buf, (s32)w, (s32)a0 + 0x10);
|
||||
|
||||
*(s32 *)((s32)a0 + 0x48) = 0x18000;
|
||||
*(u16 *)((s32)a0 + 0xFC) = rand() & 0xF0;
|
||||
*(u16 *)((s32)a0 + 0xFE) = rand() & 0x7F;
|
||||
*(u16 *)((s32)a0 + 0x100) = rand() & 0x30;
|
||||
*(s32 *)((s32)a0 + 0x1C) = 0;
|
||||
*(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ov_SC06_018 :: func_80181C5C — actor state machine, jump-table switch on the
|
||||
|
||||
@@ -3357,7 +3357,93 @@ void func_801859B8(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80184A28", func_801859F4);
|
||||
|
||||
/*
|
||||
* func_801859F4 — "spawn init" state handler.
|
||||
*
|
||||
* Sibling-search hit (cookbook §160g): func_8018523C
|
||||
* (src/ov_SC03_119/ov_SC03_119_jr_8017FB84.c) shares the exact opening
|
||||
* idiom — func_8012C1B8() -> store result to a0+0x20 -> if zero,
|
||||
* ((void (*)(s32))func_8012CAE4)(a0); return; else func_8001C214(v0, TABLE[idx]) — and the
|
||||
* same shared-engine-core template also lives at
|
||||
* src/shared/engine_core.h:10060 DEFINE_func_80144A98(). Both establish the
|
||||
* house style used here: `extern void func_8012C1B8(void);` called through
|
||||
* a `(s32 (*)(void))` cast (the canonical decl elsewhere is void-returning;
|
||||
* §161c — cast at the call site rather than fighting it), and
|
||||
* func_8012CAE4/func_8001C214 declared exactly as they already appear
|
||||
* in this TU (grep hits at src/ov_SC06_018/ov_SC06_018_jr_80186270.c
|
||||
* lines 2783/2790/2849/2895/2896).
|
||||
*
|
||||
* D_811BD33C is stored by ADDRESS only (lui/addiu, no lw) — §160f array
|
||||
* declaration to force the address-only store.
|
||||
*
|
||||
* The three `lhu ...,0x70($s1); andi ...,0xF` sequences are NOT cached in
|
||||
* a local — the target re-loads/re-masks independently at the array index,
|
||||
* the ==4 compare, and the ==5 compare (three separate `lhu+andi` pairs in
|
||||
* the .s), so the raw expression is repeated at each site rather than
|
||||
* hoisted into one named temp.
|
||||
*/
|
||||
|
||||
void func_801859F4(void *a0) {
|
||||
extern void func_8012C1B8(void);
|
||||
extern void func_8012CAE4(void*);
|
||||
extern void func_8001C214(s32 a0, s32 a1);
|
||||
extern void func_80049CAC(s32 a0, s32 a1);
|
||||
extern void func_800484EC(s32 a0, s32 a1, s32 a2);
|
||||
extern s32 rand(void);
|
||||
extern s32 D_801BD324[];
|
||||
extern u8 D_811BD33C[];
|
||||
|
||||
s16 buf[16]; /* sp+0x10 — output of func_80049CAC / input to func_800484EC */
|
||||
s16 rv[3]; /* sp+0x30 — random SVECTOR-ish {x,y,z} */
|
||||
s32 w[3]; /* sp+0x38 — {0, 0, 0xFFE80000} scratch handed to func_800484EC */
|
||||
s32 v0;
|
||||
s32 m;
|
||||
|
||||
v0 = ((s32 (*)(void))func_8012C1B8)();
|
||||
*(s32 *)((s32)a0 + 0x20) = v0;
|
||||
if (v0 == 0) {
|
||||
((void (*)(s32))func_8012CAE4)((s32)a0);
|
||||
return;
|
||||
}
|
||||
|
||||
func_8001C214(v0, D_801BD324[*(u16 *)((s32)a0 + 0x70) & 0xF]);
|
||||
|
||||
*(u16 *)((s32)a0 + 0x10A) = *(u16 *)(*(s32 *)((s32)a0 + 0x64) + 0x36);
|
||||
|
||||
if ((*(u16 *)((s32)a0 + 0x70) & 0xF) == 4) {
|
||||
*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x20) = (s32)D_811BD33C;
|
||||
}
|
||||
|
||||
if ((*(u16 *)((s32)a0 + 0x70) & 0xF) == 5) {
|
||||
*(s16 *)((s32)a0 + 0x2) = 2;
|
||||
return;
|
||||
}
|
||||
|
||||
w[1] = 0;
|
||||
w[0] = 0;
|
||||
w[2] = -0x180000;
|
||||
m = rand() % 0x80;
|
||||
if ((rand() & 1) == 0) {
|
||||
rv[0] = m - 0x380;
|
||||
} else {
|
||||
rv[0] = -0x380 - m;
|
||||
}
|
||||
|
||||
rv[1] = *(u16 *)(*(s32 *)(*(s32 *)((s32)a0 + 0x64) + 0x20) + 0x12) + 0x800;
|
||||
rv[2] = 0;
|
||||
func_80049CAC((s32)rv, (s32)buf);
|
||||
|
||||
func_800484EC((s32)buf, (s32)w, (s32)a0 + 0x10);
|
||||
|
||||
*(s32 *)((s32)a0 + 0x48) = 0x18000;
|
||||
*(u16 *)((s32)a0 + 0xFC) = rand() & 0xF0;
|
||||
*(u16 *)((s32)a0 + 0xFE) = rand() & 0x7F;
|
||||
*(u16 *)((s32)a0 + 0x100) = rand() & 0x30;
|
||||
*(s32 *)((s32)a0 + 0x1C) = 0;
|
||||
*(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1;
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80184A28", func_80185B80);
|
||||
|
||||
|
||||
@@ -3391,7 +3391,93 @@ void func_80187E90(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80186F00", func_80187ECC);
|
||||
|
||||
/*
|
||||
* func_80187ECC — "spawn init" state handler.
|
||||
*
|
||||
* Sibling-search hit (cookbook §160g): func_8018523C
|
||||
* (src/ov_SC03_119/ov_SC03_119_jr_8017FB84.c) shares the exact opening
|
||||
* idiom — func_8012C1B8() -> store result to a0+0x20 -> if zero,
|
||||
* func_8012CAE4(a0); return; else func_8001C214(v0, TABLE[idx]) — and the
|
||||
* same shared-engine-core template also lives at
|
||||
* src/shared/engine_core.h:10060 DEFINE_func_80144A98(). Both establish the
|
||||
* house style used here: `extern void func_8012C1B8(void);` called through
|
||||
* a `(s32 (*)(void))` cast (the canonical decl elsewhere is void-returning;
|
||||
* §161c — cast at the call site rather than fighting it), and
|
||||
* func_8012CAE4/func_8001C214 declared exactly as they already appear
|
||||
* in this TU (grep hits at src/ov_SC06_018/ov_SC06_018_jr_80186270.c
|
||||
* lines 2783/2790/2849/2895/2896).
|
||||
*
|
||||
* D_811BC480 is stored by ADDRESS only (lui/addiu, no lw) — §160f array
|
||||
* declaration to force the address-only store.
|
||||
*
|
||||
* The three `lhu ...,0x70($s1); andi ...,0xF` sequences are NOT cached in
|
||||
* a local — the target re-loads/re-masks independently at the array index,
|
||||
* the ==4 compare, and the ==5 compare (three separate `lhu+andi` pairs in
|
||||
* the .s), so the raw expression is repeated at each site rather than
|
||||
* hoisted into one named temp.
|
||||
*/
|
||||
|
||||
void func_80187ECC(void *a0) {
|
||||
extern void func_8012C1B8(void);
|
||||
extern void func_8012CAE4(s32 a0);
|
||||
extern void func_8001C214(s32 a0, s32 a1);
|
||||
extern void func_80049CAC(s32 a0, s32 a1);
|
||||
extern void func_800484EC(s32 a0, s32 a1, s32 a2);
|
||||
extern s32 rand(void);
|
||||
extern s32 D_801BC468[];
|
||||
extern u8 D_811BC480[];
|
||||
|
||||
s16 buf[16]; /* sp+0x10 — output of func_80049CAC / input to func_800484EC */
|
||||
s16 rv[3]; /* sp+0x30 — random SVECTOR-ish {x,y,z} */
|
||||
s32 w[3]; /* sp+0x38 — {0, 0, 0xFFE80000} scratch handed to func_800484EC */
|
||||
s32 v0;
|
||||
s32 m;
|
||||
|
||||
v0 = ((s32 (*)(void))func_8012C1B8)();
|
||||
*(s32 *)((s32)a0 + 0x20) = v0;
|
||||
if (v0 == 0) {
|
||||
func_8012CAE4((s32)a0);
|
||||
return;
|
||||
}
|
||||
|
||||
func_8001C214(v0, D_801BC468[*(u16 *)((s32)a0 + 0x70) & 0xF]);
|
||||
|
||||
*(u16 *)((s32)a0 + 0x10A) = *(u16 *)(*(s32 *)((s32)a0 + 0x64) + 0x36);
|
||||
|
||||
if ((*(u16 *)((s32)a0 + 0x70) & 0xF) == 4) {
|
||||
*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x20) = (s32)D_811BC480;
|
||||
}
|
||||
|
||||
if ((*(u16 *)((s32)a0 + 0x70) & 0xF) == 5) {
|
||||
*(s16 *)((s32)a0 + 0x2) = 2;
|
||||
return;
|
||||
}
|
||||
|
||||
w[1] = 0;
|
||||
w[0] = 0;
|
||||
w[2] = -0x180000;
|
||||
m = rand() % 0x80;
|
||||
if ((rand() & 1) == 0) {
|
||||
rv[0] = m - 0x380;
|
||||
} else {
|
||||
rv[0] = -0x380 - m;
|
||||
}
|
||||
|
||||
rv[1] = *(u16 *)(*(s32 *)(*(s32 *)((s32)a0 + 0x64) + 0x20) + 0x12) + 0x800;
|
||||
rv[2] = 0;
|
||||
func_80049CAC((s32)rv, (s32)buf);
|
||||
|
||||
func_800484EC((s32)buf, (s32)w, (s32)a0 + 0x10);
|
||||
|
||||
*(s32 *)((s32)a0 + 0x48) = 0x18000;
|
||||
*(u16 *)((s32)a0 + 0xFC) = rand() & 0xF0;
|
||||
*(u16 *)((s32)a0 + 0xFE) = rand() & 0x7F;
|
||||
*(u16 *)((s32)a0 + 0x100) = rand() & 0x30;
|
||||
*(s32 *)((s32)a0 + 0x1C) = 0;
|
||||
*(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ov_SC06_018 :: func_80188058 — actor state machine, jump-table switch on the
|
||||
|
||||
@@ -3478,4 +3478,90 @@ void func_801863AC(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80184CF8", func_801863E8);
|
||||
|
||||
/*
|
||||
* func_801863E8 — "spawn init" state handler.
|
||||
*
|
||||
* Sibling-search hit (cookbook §160g): func_8018523C
|
||||
* (src/ov_SC03_119/ov_SC03_119_jr_8017FB84.c) shares the exact opening
|
||||
* idiom — func_8012C1B8() -> store result to a0+0x20 -> if zero,
|
||||
* func_8012CAE4(a0); return; else func_8001C214(v0, TABLE[idx]) — and the
|
||||
* same shared-engine-core template also lives at
|
||||
* src/shared/engine_core.h:10060 DEFINE_func_80144A98(). Both establish the
|
||||
* house style used here: `extern void func_8012C1B8(void);` called through
|
||||
* a `(s32 (*)(void))` cast (the canonical decl elsewhere is void-returning;
|
||||
* §161c — cast at the call site rather than fighting it), and
|
||||
* func_8012CAE4/func_8001C214 declared exactly as they already appear
|
||||
* in this TU (grep hits at src/ov_SC06_018/ov_SC06_018_jr_80186270.c
|
||||
* lines 2783/2790/2849/2895/2896).
|
||||
*
|
||||
* D_811AFC08 is stored by ADDRESS only (lui/addiu, no lw) — §160f array
|
||||
* declaration to force the address-only store.
|
||||
*
|
||||
* The three `lhu ...,0x70($s1); andi ...,0xF` sequences are NOT cached in
|
||||
* a local — the target re-loads/re-masks independently at the array index,
|
||||
* the ==4 compare, and the ==5 compare (three separate `lhu+andi` pairs in
|
||||
* the .s), so the raw expression is repeated at each site rather than
|
||||
* hoisted into one named temp.
|
||||
*/
|
||||
|
||||
void func_801863E8(void *a0) {
|
||||
extern void func_8012C1B8(void);
|
||||
extern void func_8012CAE4(s32 a0);
|
||||
extern void func_8001C214(s32 a0, s32 a1);
|
||||
extern void func_80049CAC(s32 a0, s32 a1);
|
||||
extern void func_800484EC(s32 a0, s32 a1, s32 a2);
|
||||
extern s32 rand(void);
|
||||
extern s32 D_801AFBF0[];
|
||||
extern u8 D_811AFC08[];
|
||||
|
||||
s16 buf[16]; /* sp+0x10 — output of func_80049CAC / input to func_800484EC */
|
||||
s16 rv[3]; /* sp+0x30 — random SVECTOR-ish {x,y,z} */
|
||||
s32 w[3]; /* sp+0x38 — {0, 0, 0xFFE80000} scratch handed to func_800484EC */
|
||||
s32 v0;
|
||||
s32 m;
|
||||
|
||||
v0 = ((s32 (*)(void))func_8012C1B8)();
|
||||
*(s32 *)((s32)a0 + 0x20) = v0;
|
||||
if (v0 == 0) {
|
||||
func_8012CAE4((s32)a0);
|
||||
return;
|
||||
}
|
||||
|
||||
func_8001C214(v0, D_801AFBF0[*(u16 *)((s32)a0 + 0x70) & 0xF]);
|
||||
|
||||
*(u16 *)((s32)a0 + 0x10A) = *(u16 *)(*(s32 *)((s32)a0 + 0x64) + 0x36);
|
||||
|
||||
if ((*(u16 *)((s32)a0 + 0x70) & 0xF) == 4) {
|
||||
*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x20) = (s32)D_811AFC08;
|
||||
}
|
||||
|
||||
if ((*(u16 *)((s32)a0 + 0x70) & 0xF) == 5) {
|
||||
*(s16 *)((s32)a0 + 0x2) = 2;
|
||||
return;
|
||||
}
|
||||
|
||||
w[1] = 0;
|
||||
w[0] = 0;
|
||||
w[2] = -0x180000;
|
||||
m = rand() % 0x80;
|
||||
if ((rand() & 1) == 0) {
|
||||
rv[0] = m - 0x380;
|
||||
} else {
|
||||
rv[0] = -0x380 - m;
|
||||
}
|
||||
|
||||
rv[1] = *(u16 *)(*(s32 *)(*(s32 *)((s32)a0 + 0x64) + 0x20) + 0x12) + 0x800;
|
||||
rv[2] = 0;
|
||||
func_80049CAC((s32)rv, (s32)buf);
|
||||
|
||||
func_800484EC((s32)buf, (s32)w, (s32)a0 + 0x10);
|
||||
|
||||
*(s32 *)((s32)a0 + 0x48) = 0x18000;
|
||||
*(u16 *)((s32)a0 + 0xFC) = rand() & 0xF0;
|
||||
*(u16 *)((s32)a0 + 0xFE) = rand() & 0x7F;
|
||||
*(u16 *)((s32)a0 + 0x100) = rand() & 0x30;
|
||||
*(s32 *)((s32)a0 + 0x1C) = 0;
|
||||
*(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user