chore(decomp): commit in-tree banked work before the serial lane

This commit is contained in:
Drew T
2026-08-25 22:23:04 -06:00
parent 376e6cc238
commit a768949df7
14 changed files with 4501 additions and 6902 deletions
File diff suppressed because it is too large Load Diff
-1
View File
@@ -96,7 +96,6 @@ segments:
- [0x0, .rodata, md_SC03_135] # module-id header (+jtbl/ptr table) — §154-A
- [0x268, .rodata, md_SC03_135_jr_801E5358] # §154-A island split (jtbl_carve --island-split)
- [0x27c, c, md_SC03_135]
- [0xda8, c, md_SC03_135_jr_801E3390]
- [0x2d70, c, md_SC03_135_jr_801E5358]
- [0x3594, data, tail] # data tail: pointer tables + packed data (split iterated)
- [0x880C] # EOF marker = the 0.4.dec byte length
+1
View File
@@ -118,6 +118,7 @@ segments:
- [0x50854, c, ov_SC07_010_jr_801789AC]
- [0x51a1c, c, ov_SC07_010_jr_80179B74]
- [0x52cd4, c, ov_SC07_010_jr_8017AE2C]
- [0x57fe0, c, ov_SC07_010_jr_80180138]
- [0x59e1c, data, tail]
- [0x7d6dc, .rodata, ov_SC07_010] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x7d884, .rodata, ov_SC07_010_jr_80131340] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
+1 -26
View File
@@ -822,32 +822,7 @@ void func_800D298C(St *a0) {
}
extern u8 D_800EC9E8[4];
extern s32 func_800435CC(s32 mode, void *buf, void *param);
extern s32 CdRead2(s32 count);
s32 func_800D2A24(s32 a0) {
u8 *p;
s32 r;
retry:
p = D_800EC9E8;
for (;;) {
r = func_800435CC(2, (void *)a0, p);
if (*p & 0x10) {
return 1;
}
if (r != 0) {
break;
}
}
if (CdRead2(0x1C0) == 0) {
goto retry;
}
return 0;
}
INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800D2A24);
void func_800D2AA0(u8 *a0) {
if (a0 == 0) {
+1 -129
View File
@@ -448,135 +448,7 @@ s32 func_801F06B0(s32 a0, s16 a1, s16 a2, s16 a3, s32 *p) {
}
s32 func_801F0734(void) {
extern s32 D_801F9DB8;
extern s16 D_8011512C;
extern u8 D_801F9DA9;
extern void func_8002B00C(void *);
extern void func_801F1738(s32);
extern void func_80029774(s32);
extern s16 D_80115118;
extern u16 D_8011511A;
extern s32 D_801F3380;
extern s16 D_801150D4;
extern s32 func_8002D4C8(s32, s32);
extern s32 D_801F9DA0;
extern u8 D_801F9DB1;
extern u8 D_801F9DA8[];
extern u8 D_801F9DB0[];
extern s32 D_801F32E0;
extern s32 D_801F9AC4;
extern u8 D_801F9DAC[];
extern u8 D_801F9DAD;
extern u8 D_801F9DAE;
extern u8 D_801F9DAF;
extern s32 func_8002AF48(s32);
extern s32 D_801F9DBC[];
extern s32 D_801F9DC0;
extern s32 D_801F9DC4;
extern s32 D_801F9DC8;
extern s32 func_8002AF60(void);
extern void func_801F0F28(void);
s32 ret;
short i;
ret = 0;
if (D_801F9DB8 != 0) {
if (D_801F9DB8 == 1) {
s16 *p = &D_8011512C;
if (*p == 3 && D_801F9DA9 == 8) {
func_8002B00C(&D_801F9AC4);
func_801F1738(0);
func_80029774(0);
*p = 4;
D_80115118 = 0x4B;
D_801F3380 = 0x15;
D_801150D4 = D_8011511A;
func_8002D4C8(0xB3B, 0);
} else {
*p = 0;
}
} else {
D_8011512C = 0xA;
D_801F3380 = 0x1B;
D_80115118 = 0x4B;
D_801F9DA0 = 0;
return;
}
D_801F9DA0 = 0;
D_801F9DB1 = 0xFF;
}
if (D_8011512C == 4 || D_8011512C == 0xA) {
return;
}
if (D_801F9DA9 == D_801F9DB1) {
return;
}
for (i = 0; i < 8; i++) {
D_801F9DB0[i] = D_801F9DA8[i];
}
switch (D_801F9DA9) {
case 0:
break;
case 1:
ret = 0xA;
D_8011512C = 0;
D_8011511A = 0;
break;
case 2:
ret = 0xB;
D_801150D4 = 0;
D_8011512C = 0;
D_8011511A = 0;
break;
case 3:
ret = 0x1F;
D_801150D4 = 0;
D_8011512C = 8;
break;
case 4:
case 5:
case 6:
reset_state:
ret = 0x13;
D_801150D4 = 0;
D_8011512C = 8;
break;
case 7:
ret = 0xA;
break;
case 8:
ret = 0xC;
if ((D_801F9DAC[0] | D_801F9DAD | D_801F9DAE | D_801F9DAF) == 0) {
goto reset_state;
}
for (i = 0; i < 4; i++) {
if (D_801F9DAC[i] == 1) {
D_801F9DBC[i] = func_8002AF48(i);
} else {
D_801F9DBC[i] = 0;
}
}
if (D_801F9DBC[0] == 0 && D_801F9DBC[1] == 0 && D_801F9DBC[2] == 0 &&
D_801F9DBC[3] == 0) {
goto reset_state;
}
D_8011512C = 1;
D_8011511A = (func_8002AF60() & 3) + 1;
func_801F0F28();
break;
}
if (ret != 0) {
D_801F32E0 = ret;
}
}
INCLUDE_ASM("asm/md_SC03_076/nonmatchings/md_SC03_076", func_801F0734);
INCLUDE_ASM("asm/md_SC03_076/nonmatchings/md_SC03_076", func_801F0A9C);
+657
View File
@@ -284,3 +284,660 @@ INCLUDE_RODATA("asm/md_SC03_135/nonmatchings/md_SC03_135", D_801E25E8);
INCLUDE_RODATA("asm/md_SC03_135/nonmatchings/md_SC03_135", D_801E26C0);
INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135", func_801E2D34);
INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135", func_801E3390);
typedef struct { s8 c[8]; } Blk8_8012C890_8017C348_801E3540;
typedef struct { s16 m[3][3]; s32 t[3]; } MTX_C974_801E3540;
/* func_801E3540 (ov_MAIN_012 / jr_801789AC) — 188 ins, byte-exact vs
* asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_801789AC/func_801E3540.s
*
* Sprite/quad draw dispatcher: builds an OT chain for one "part list" entry.
*
* Idioms that were load-bearing here (feed these back into the cookbook):
* 1) `dim`/`dim2`/`dim3` are DELIBERATE copies of `flag`. The target keeps
* `flag` in $s7 and copies it into $s6 in each loop preheader and into $s0
* for the tail. A plain `x = flag;` written in the same basic block as its
* use is killed by cse; it survives only when a multi-pred label separates
* def from use. So: the loop-1 copy is written at the END of the outer
* body (loop.c hoists it into the preheader), the loop-2 copy is written in
* the preheader itself, and the tail copy needs a hard-register pin
* (`register s32 dim3 __asm__("$16")`) because nothing separates it from
* its uses. Same shape as the matched sibling func_8013FAF8 (ov_SC06_008),
* which also needed a pin for exactly this call pair.
* 2) `bp = sp18;` exists only to fix the ORDER of the two loop-1 preheader
* insns. loop.c emits hoisted invariants in body order; writing the
* sp18-relative store address as an explicit pointer makes `addiu $s5,$sp,0x18`
* the FIRST movable, so the `dim` copy lands after it (as in the target).
* 3) The `do { } while (0)` around the loop-1 call is a REGISTER-ALLOCATION
* lever, not dead syntax. flow.c weights REG_N_REFS by loop_depth; the
* extra (never-iterating) loop note gives `ot` 18 weighted refs instead of
* 16, which raises its global-alloc priority above `s` (21 refs / 159 insns)
* and lands the a0/a1 params in $s2/$s3 exactly as the target does.
* `mode` is hoisted out of the wrapper so `dim` does NOT get the same +1
* (that would swap $s5/$s6 between `bp` and `dim`).
* 4) Low half of sp60[0] uses `& 0xFFFF`, NOT a (u16) cast: the mask keeps the
* operands in SImode so both halves load with `lh`; a (u16) cast makes
* gcc-2.7.2 emit `lhu`.
*/
extern s32 func_80024054(u8 *, u8 *);
extern s32 func_800D2650(s32, u8 *, s16, s16, s32, s32);
extern s32 func_800D27DC(s32, s32, void *, s16, s32);
extern s32 func_800D29F8(s32, s32, void *, s16, s32);
extern s32 func_801E3830(s32, s16, s16, s16, s32 *);
s32 func_801E3540(s32 ot, u8 *s, s16 c) {
extern u16 D_8011511A;
extern u8 D_801E6584[];
extern s32 *D_801E64FC[];
u8 sp18[72];
s32 sp60[5];
s32 sp78[8];
s32 flag;
s32 dim;
s32 dim2;
register s32 dim3 __asm__("$16");
s32 t;
s16 i;
s16 k;
s32 *p;
u8 *bp;
s16 *q;
s32 r;
s32 mode;
if (c == 0) {
flag = 0;
} else {
flag = -(D_8011511A != c) & 0xFF;
}
t = *(s32 *)(s + 0x14);
if (t < 0) {
func_80024054((u8 *)t, sp18);
ot = func_800D2650(ot, sp18, *(s16 *)(s + 0x10), *(s16 *)(s + 0x12), 1,
flag ? 0x585858 : 0x808080);
} else {
p = D_801E64FC[t];
for (k = 0; k < D_801E6584[*(s32 *)(s + 0x14)]; k++) {
bp = sp18;
dim = flag;
for (i = 0; i < 5; i++) {
if (i == 0) {
sp60[0] = (((s16 *)p)[0] + *(s16 *)(s + 0x10)) & 0xFFFF |
((((s16 *)p)[1] + *(s16 *)(s + 0x12)) << 16);
} else {
*(s32 *)(bp + 0x48 + i * 4) = p[i];
}
}
mode = dim ? 3 : 2;
do {
ot = func_800D27DC(mode, ot, sp60, 1, 0);
} while (0);
p += 5;
}
}
i = 0;
q = *(s16 **)(s + 0x18);
dim2 = flag;
for (;;) {
r = func_801E3830(*(s32 *)(s + 0x1C), *(s16 *)s, c, i++, sp78);
if (r == 0) {
break;
}
if (r < 0) {
func_80024054((u8 *)r, sp18);
if (dim2 != 0) {
sp78[0] = 0x585858;
}
ot = func_800D2650(ot, sp18, q[0], q[1], 1, sp78[0]);
} else {
p = D_801E64FC[r];
*p = (u16)q[0] | (q[1] << 16);
ot = func_800D27DC(dim2 ? 3 : 2, ot, p, 1, 0);
}
q += 2;
}
dim3 = flag;
return func_800D29F8(dim3,
func_800D27DC(dim3 != 0, ot, (void *)*(s32 *)(s + 4),
*(s16 *)(s + 0xC), 0),
(void *)*(s32 *)(s + 8), *(s16 *)(s + 0xE), 0);
}
s32 func_801E3830(s32 arg0, s16 arg1, s16 arg2, s16 arg3, s32 *arg4) {
extern u8 D_80115158[];
s32 t0 = 0;
*arg4 = 0x808080;
arg2 = D_80115158[(s16)arg2 * 2];
if (arg1 < 5) {
if (arg1 > 0) {
if ((s16)arg3 < arg2) {
t0 = *(s32 *)(arg0 + arg3 * 4);
}
} else if (arg1 != 0) {
if ((s16)arg3 < arg2) {
t0 = *(s32 *)(arg0 + arg3 * 4);
}
}
} else if (arg1 != 5) {
if ((s16)arg3 < arg2) {
t0 = *(s32 *)(arg0 + arg3 * 4);
}
}
return t0;
}
INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135", func_801E38B4);
INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135", func_801E3C1C);
INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135", func_801E40A8);
u32 func_801E45C0(s32 a0, s32 a1) {
s32 t0;
s32 a2;
s32 a3;
t0 = 0;
a2 = a0;
a3 = 0;
while (a2 >= 10) {
a0 = a0 / 10;
t0 = t0 | ((a2 - (a0 * 2 + a0 * 8)) << a3);
a2 = a0;
a3 += 4;
}
t0 = t0 | (a2 << a3);
return t0 << a1;
}
void func_801E4628(val, n, dst, flag)
unsigned int val;
short n;
unsigned short *dst;
short flag;
{
extern unsigned short *D_801E6350[];
short i;
int idx;
register unsigned int d __asm__("$3");
for (i = 0; i < n; i++) {
d = val >> 28;
idx = d;
if ((flag << 16) != 0) {
if (d != 0) {
flag = 0;
} else {
idx = 10;
}
}
val <<= 4;
*dst = *D_801E6350[idx];
dst++;
}
}
s32 *func_801E46A0(s32 *out) {
typedef struct { u32 addr : 24; u32 len : 8; } PTag_801E46A0;
typedef struct { u32 *ot; u32 pad[4]; } Env_801E46A0; /* 0x14 stride */
typedef struct { u16 f0; u16 f2; } Prim4_801E46A0;
typedef struct {
s16 f0; /* 0x00 */
s16 f2; /* 0x02 */
void *f4; /* 0x04 */
void *f8; /* 0x08 */
s16 fC; /* 0x0C */
s16 fE; /* 0x0E */
s16 f10; /* 0x10 */
s16 f12; /* 0x12 */
void *f14; /* 0x14 */
Prim4_801E46A0 *f18; /* 0x18 */
void *f1C; /* 0x1C */
} Panel_801E46A0; /* 0x20 stride */
extern Env_801E46A0 D_800AE7BC[];
extern short D_800B9A02;
extern s32 D_80115134;
extern u16 D_8011511A;
extern s16 D_8011512C;
extern u16 D_80115116;
extern u16 D_801E65A8[];
extern s32 func_8005A600(s32, s32, s32, s32, s32);
Prim4_801E46A0 *q;
volatile u16 *pb;
s32 n;
s32 d;
q = ((Panel_801E46A0 *)D_80115134)[*(s16 *)&D_8011511A].f18;
if (D_8011512C == 1) {
n = D_801E65A8[D_80115116 & 7];
} else {
n = 0;
}
out[0] = 0x04000000;
*((u8 *)out + 0xC) = 0x70;
*((u8 *)out + 0xD) = 0x10;
out[1] = 0x64808080;
pb = (volatile u16 *)&D_800B9A02;
*(u16 *)((u8 *)out + 0xE) = 0x4056;
d = n - 0x60; /* [L2] */
*(s16 *)((u8 *)out + 0x8) = q->f0 + d;
*(s16 *)((u8 *)out + 0xA) = q->f2 - 2;
*(s16 *)((u8 *)out + 0x12) = 0x10;
*(s16 *)((u8 *)out + 0x10) = 0x10;
((PTag_801E46A0 *)out)->addr =
((PTag_801E46A0 *)(D_800AE7BC[*pb].ot + 2))->addr;
((PTag_801E46A0 *)(D_800AE7BC[*pb].ot + 2))->addr = (u32)out;
out += 5; /* [L1] */
func_8005A600((s32)out, 0, 0, 0x15, 0);
((PTag_801E46A0 *)out)->addr =
((PTag_801E46A0 *)(D_800AE7BC[*pb].ot + 2))->addr;
{
u32 *op;
register u32 v __asm__("$2"); /* [L3] */
op = D_800AE7BC[*pb].ot;
v = op[2];
v = (v & 0xFF000000) | (((u32)out) & 0xFFFFFF);
op[2] = v;
}
return out + 2;
}
void func_801E4890(void) {
extern void func_80016714(s8 *a0, s32 a1);
extern s8 D_801EA960;
func_80016714(&D_801EA960, 0x2DC);
}
/* 152-byte engine block, copied whole (struct assignment -> 9x16B block move + 8B tail).
* Uniquely suffixed: the host TU already sees `Blk152` from engine_types.h, and a C89
* re-typedef of a visible name is a redefinition error. Same layout, same codegen. */
typedef struct { u32 w[38]; } Blk152_8017DF40_801E48B8;
/* ALIGN-1 4-byte element => lwl/lwr + swl/swr (cookbook §160a); a u32[] loop is wrong. */
typedef struct { u8 b[4]; } Blk4_8017DF40_801E48B8;
/* Param is declared s32 by the host TU's file-scope prototype (:3695); the true test is
* 16-bit (`sll $a0,$a0,16 ; bnez`, no sra), so the truncation lives in the test instead. */
void func_801E48B8(s32 arg0) {
extern u8 D_80078E78[]; /* live: 152-byte block (host TU declares this identically) */
extern u16 D_800A6588[]; /* live: u16[64] */
extern u8 D_800AE648[]; /* live: u8[64] */
extern u8 D_800BA1B8[]; /* live: u8[256] */
extern u8 D_800BA2B8[]; /* live: 4-byte struct[24], align 1 */
extern u8 D_801EA984[]; /* shadow: +0x000 */
extern u16 D_801EAA1C[]; /* shadow: +0x098 */
extern u8 D_801EAA9C[]; /* shadow: +0x118 */
extern u8 D_801EAADC[]; /* shadow: +0x158 */
extern u8 D_801EABDC[]; /* shadow: +0x258 */
s16 i;
if ((s16)arg0 == 0) {
*(Blk152_8017DF40_801E48B8 *)D_80078E78 = *(Blk152_8017DF40_801E48B8 *)D_801EA984;
for (i = 0; i < 64; i++) {
D_800A6588[i] = D_801EAA1C[i];
}
for (i = 0; i < 64; i++) {
D_800AE648[i] = D_801EAA9C[i];
}
for (i = 0; i < 256; i++) {
D_800BA1B8[i] = D_801EAADC[i];
}
for (i = 0; i < 24; i++) {
((Blk4_8017DF40_801E48B8 *)D_800BA2B8)[i] = ((Blk4_8017DF40_801E48B8 *)D_801EABDC)[i];
}
} else {
*(Blk152_8017DF40_801E48B8 *)D_801EA984 = *(Blk152_8017DF40_801E48B8 *)D_80078E78;
for (i = 0; i < 64; i++) {
D_801EAA1C[i] = D_800A6588[i];
}
for (i = 0; i < 64; i++) {
D_801EAA9C[i] = D_800AE648[i];
}
for (i = 0; i < 256; i++) {
D_801EAADC[i] = D_800BA1B8[i];
}
for (i = 0; i < 24; i++) {
((Blk4_8017DF40_801E48B8 *)D_801EABDC)[i] = ((Blk4_8017DF40_801E48B8 *)D_800BA2B8)[i];
}
}
}
extern void func_8014B00C(void);
extern void func_80029344(void);
void func_801E4BA4(void) {
func_8014B00C();
func_80029344();
}
extern u8 *D_80126B10;
extern u8 D_801E6644[];
extern void func_80175414(s32 _arg0);
void func_800167B8(int);
int func_801E4BCC(u8 *arg) {
extern u8 *D_80126B10;
D_80126B10 = D_801E6644;
func_800167B8(0);
((void (*)(void))func_80175414)();
arg[0x15]++;
return 0;
}
extern s32 func_800167F0(s32 a0);
s32 func_801E4C24(void) {
return (func_800167F0(0) & 0xffff) != 0;
}
extern void func_8016EDEC(s32 a0, s32 a1, s32 a2);
extern void func_801E4F30(void *a0);
s32 func_801E4C48(s32 param_1) {
extern s32 D_801EAC68;
D_801EAC68 = 0;
((void (*)(void *, s32))func_8016EDEC)((void *)func_801E4F30, 0x1000000);
*(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1;
*(s32 *)(param_1 + 0x28) = 0x10;
return 0;
}
extern s32 func_800D1E28(void);
extern s32 func_8002D4C8(s32, s32);
extern s32 func_8001BFD0(void);
extern s32 func_800291B4(s32);
extern s32 func_80029524(void);
extern s32 func_800D0C48(s32);
s32 func_801E4C9C(s32 param_1) {
if ((*(s32 *)(param_1 + 0x28) = *(s32 *)(param_1 + 0x28) - 1) == -1) {
func_800D1E28();
func_8002D4C8(0x1C, 0);
func_8001BFD0();
if ((func_800291B4(0xCE) & 0xFF) == 0 && func_80029524() == 0) {
func_8002D4C8(0x1D, 0);
func_800D0C48(1);
}
*(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1;
}
return 0;
}
extern void func_800D1EBC(void);
void func_801E4D3C(void) {
func_800D1EBC();
}
void func_801E4D5C(void *a0) {
extern void (*D_801E65E8[])(void);
D_801E65E8[*(u8 *)((s32)a0 + 0x15)]();
}
s32 func_801E4D98(void *a0) {
extern void (*D_801E65F0[])(void);
extern void func_801E5324(void);
extern s32 D_801EAC68;
s32 v0;
v0 = ((s32 (*)(void))D_801E65F0[*(u8 *)((s32)a0 + 0x15)])();
if (v0 != 0 && D_801EAC68 != 0) {
return 1;
}
D_801EAC68 = ((s32 (*)(void))func_801E5324)();
return 0;
}
void func_801E4E04(void *a0) {
extern void (*D_801E6674[])(void);
D_801E6674[*(u8 *)((s32)a0 + 0x214)]();
}
extern void func_80171A1C(void*);
extern void func_80175414(s32 _arg0);
void func_801E4E40(void) {
((void (*)(void))func_80171A1C)();
((void (*)(void))func_80175414)();
}
typedef struct { u8 c[8]; } Blk8;
const Blk8 D_801E2840 = {{0x00, 0x00, 0x7E, 0xFF, 0xB0, 0x00, 0x00, 0x00}};
extern s32 func_80171D78(u32, void *);
extern void func_80171A1C(void*);
void func_801E4E68(u32 arg0) {
Blk8 buffer;
buffer = D_801E2840;
if (func_80171D78(arg0, &buffer)) {
((void (*)(u32))func_80171A1C)(arg0);
}
}
extern s32 func_80014C54(s32, s32, s32);
extern void func_800D1724(void *);
extern void func_80171A1C(void *);
void func_801E4ED0(void *arg0) {
extern u8 D_801E6644[];
s32 result;
result = func_80014C54(0, 0, 0x80);
if ((result << 16) != 0) {
func_800D1724(&(*(int *)D_801E6644));
func_80171A1C(arg0);
}
}
void func_801E4F28(void) {
}
void func_801E4F30(void *a0) {
extern void (*D_801E6684[])(void);
D_801E6684[*(u8 *)((s32)a0 + 0x214)]();
}
extern void func_80171A1C(void*);
void func_801E4F6C(void) {
((void (*)(void))func_80171A1C)();
}
const Blk8 D_801E2848 = {{0xD5, 0xFF, 0x7E, 0xFF, 0xF5, 0xFE, 0x00, 0x00}};
extern s32 func_80171D78(u32, void *);
extern void func_80171A1C(void*);
void func_801E4F8C(u32 arg0) {
Blk8 buffer;
buffer = D_801E2848;
if (func_80171D78(arg0, &buffer)) {
((void (*)(u32))func_80171A1C)(arg0);
}
}
void func_801E4FF4(void) {
}
extern void func_8012A018(s32 a0, s32 a1);
extern void func_8012A094(s32 a0);
extern void func_801E50C0(void *a0);
void func_801E4FFC(void) {
extern s32 D_80126950;
extern s32 D_80126954;
extern s32 D_8012695C;
extern s16 D_80126968;
extern s16 D_8012696A;
extern s16 D_8012696C;
extern s16 D_80126976;
extern s16 D_80126978;
extern s16 D_8012697A;
extern u8 D_80126948[];
extern s16 D_801274E8;
extern s16 D_801274EA;
extern s16 D_801274EC;
D_80126954 = 0x190;
D_80126950 = 0x190;
D_8012695C = 0x82;
D_80126968 = 0xFB1;
D_8012696A = 0x7C7;
D_8012696C = 0;
D_80126976 = 0;
D_80126978 = -0x36;
D_8012697A = 0;
func_8012A018((s32)func_801E50C0, 0);
func_801E50C0(D_80126948);
func_8012A094((s32)D_80126948);
D_801274EA = -0x82;
D_801274E8 = 0;
D_801274EC = -0x1B0;
}
void func_801E50C0(void *a0) {
extern void (*D_801E6690[])(void);
D_801E6690[*(u8 *)((s32)a0 + 0x4)]();
}
extern void func_801E5124(s32 param_1, s16 *param_2);
void func_801E50FC(s32 param_1) {
extern s16 D_801274E8;
func_801E5124(param_1, &D_801274E8);
}
/* MATRIX 0x20: short m[3][3] @0x00 (18B) + 2B pad, long t[3] @0x14 (PsyQ layout) */
typedef struct { short m[3][3]; long t[3]; } MATRIX_801EDED4_801E5124;
typedef struct { short vx, vy, vz, pad; } SVECTOR_801EDED4_801E5124;
extern u16 func_80148800(s32 *a0);
extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2);
extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2);
extern void func_80049CAC(s32 a0, s32 a1);
extern void func_8012F14C(s32 a0, s32 a1, s32 a2);
void func_801E5124(s32 param_1, s16 *param_2) {
extern s32 D_80126B58;
extern s16 D_801E6694[];
extern u16 D_801E6698[];
MATRIX_801EDED4_801E5124 m1;
SVECTOR_801EDED4_801E5124 svec_in;
SVECTOR_801EDED4_801E5124 svec_out;
u8 t;
if (func_80148800(&D_80126B58) & 3) {
t = (*(u8 *)(param_1 + 5) + 1) & 1;
*(u8 *)(param_1 + 5) = t;
*(s32 *)(param_1 + 0xC) = D_801E6694[t];
*(s16 *)(param_1 + 0x2E) = D_801E6698[*(u8 *)(param_1 + 5)];
}
*(s32 *)(param_1 + 0x8) = (s16)func_80012C6C((s32)*(s16 *)(param_1 + 0x8), (s32)*(s16 *)(param_1 + 0xC), 0xA);
*(s32 *)(param_1 + 0x10) = (s16)func_80012C6C((s32)*(s16 *)(param_1 + 0x10), (s32)*(s16 *)(param_1 + 0x14), 0xA);
*(s16 *)(param_1 + 0x18) = func_80012ABC((s32)*(s16 *)(param_1 + 0x18), (s32)*(s16 *)(param_1 + 0x20), 0xA);
*(s16 *)(param_1 + 0x1A) = func_80012ABC((s32)*(s16 *)(param_1 + 0x1A), (s32)*(s16 *)(param_1 + 0x22), 0xA);
*(s16 *)(param_1 + 0x1C) = func_80012ABC((s32)*(s16 *)(param_1 + 0x1C), (s32)*(s16 *)(param_1 + 0x24), 0xA);
*(s16 *)(param_1 + 0x28) = func_80012C6C((s32)*(s16 *)(param_1 + 0x28), (s32)*(s16 *)(param_1 + 0x2E), 0xA);
*(s16 *)(param_1 + 0x2A) = func_80012C6C((s32)*(s16 *)(param_1 + 0x2A), (s32)*(s16 *)(param_1 + 0x30), 0xA);
*(s16 *)(param_1 + 0x2C) = func_80012C6C((s32)*(s16 *)(param_1 + 0x2C), (s32)*(s16 *)(param_1 + 0x32), 0xA);
*(s32 *)(param_1 + 0x48) = (s32)*(s16 *)(param_1 + 0x28) + (s32)param_2[0];
*(s32 *)(param_1 + 0x4C) = (s32)*(s16 *)(param_1 + 0x2A) + (s32)param_2[1];
*(s32 *)(param_1 + 0x50) = (s32)*(s16 *)(param_1 + 0x2C) + (s32)param_2[2];
func_80049CAC(param_1 + 0x18, (s32)&m1);
m1.t[0] = *(s16 *)(param_1 + 0x28) + param_2[0];
m1.t[1] = *(s16 *)(param_1 + 0x2A) + param_2[1];
m1.t[2] = *(s16 *)(param_1 + 0x2C) + param_2[2];
svec_in.vx = 0;
svec_in.vy = 0;
svec_in.vz = *(s32 *)(param_1 + 0x10);
((void (*)(s32, s32, s32))func_8012F14C)((s32)&m1, (s32)&svec_in, (s32)&svec_out);
*(s32 *)(param_1 + 0x3C) = (s32)svec_out.vx;
*(s32 *)(param_1 + 0x40) = (s32)svec_out.vy;
*(s32 *)(param_1 + 0x44) = (s32)svec_out.vz;
}
s32 func_801E531C(void) {
return 39;
}
extern void func_8001ABBC(u32, u32, void *, u32, u32);
void func_801E5324(void) {
extern u8 D_800AF040[];
func_8001ABBC(0, 0, D_800AF040, 0, 0);
}
-749
View File
@@ -1,749 +0,0 @@
#include "common.h"
/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) ===================
* The file-scope decl environment from earlier code regions of this object —
* file-local types, col-0 decls, DEFINE_func macro externs, and each earlier
* definition's implied prototype (types first, then decls in original order).
* Decls emit no code => byte-neutral. See cookbook §8c. */
extern void func_801E2864(void);
extern s32 func_801E288C(void);
extern s32 func_80029504(void);
extern void func_801E2980(s32 arg0, s32 arg1);
extern void func_801E28D0(void);
extern void func_801E295C(void);
extern s16 func_801E2970(void);
extern u16 D_80115116;
extern unsigned short D_80115112;
extern void (*D_801E65D0[])(void);
extern void func_80141C04(void);
extern void func_801E29F8(void);
extern void func_801E2A54(void);
extern void func_801E2A98(void);
extern void func_801E2BC4(void);
extern void func_801E2BE0(void);
extern void func_801E2CC0(void);
extern void func_800D2624(void);
extern void func_801E2CDC(void);
/* ==== end §8b carried decl layer ==== */
s32 func_801E3390(void) {
typedef struct { u32 *ot; u32 pad[4]; } Env_801E46A0;
extern s32 *func_801E46A0(s32 *);
extern s32 func_801E3540(s32, u8 *, s16);
extern s32 func_8005A600(s32, s32, s32, s32, s32);
extern s32 D_801151D0;
extern s16 D_8011512C;
extern s32 D_80115134;
extern s16 D_800B9A02;
extern Env_801E46A0 D_800AE7BC[];
s32 ot;
u8 *s2;
s16 n;
s16 i;
ot = D_801151D0;
s2 = D_80115134;
if (D_8011512C == 1 || D_8011512C == 2) {
ot = (s32)func_801E46A0((s32 *)ot);
}
switch (D_8011512C) {
case 0:
case 5:
case 8:
case 9:
n = 1;
break;
case 1:
case 2:
n = 5;
break;
case 3:
case 4:
case 10:
case 11:
n = 5;
goto CALL;
case 6:
case 7:
case 12:
n = 1;
CALL:
ot = func_801E3540(ot, s2 + 0xA0, 0);
break;
}
for (i = 0; i < n; i++) {
ot = func_801E3540(ot, s2, i);
s2 += 0x20;
}
func_8005A600(ot, 0, 0, 0x15, 0);
*(s32 *)ot = 0x02000000;
*(s32 *)ot = (D_800AE7BC[*(u16 *)&D_800B9A02].ot[2] & 0xFFFFFF) | 0x02000000;
D_800AE7BC[*(u16 *)&D_800B9A02].ot[2] =
(D_800AE7BC[*(u16 *)&D_800B9A02].ot[2] & 0xFF000000) | ((u32)ot & 0xFFFFFF);
ot += 0x28;
((struct { s32 f; } *)&D_801151D0)->f = ot;
}
typedef struct { s8 c[8]; } Blk8_8012C890_8017C348_801E3540;
typedef struct { s16 m[3][3]; s32 t[3]; } MTX_C974_801E3540;
/* func_801E3540 (ov_MAIN_012 / jr_801789AC) — 188 ins, byte-exact vs
* asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_801789AC/func_801E3540.s
*
* Sprite/quad draw dispatcher: builds an OT chain for one "part list" entry.
*
* Idioms that were load-bearing here (feed these back into the cookbook):
* 1) `dim`/`dim2`/`dim3` are DELIBERATE copies of `flag`. The target keeps
* `flag` in $s7 and copies it into $s6 in each loop preheader and into $s0
* for the tail. A plain `x = flag;` written in the same basic block as its
* use is killed by cse; it survives only when a multi-pred label separates
* def from use. So: the loop-1 copy is written at the END of the outer
* body (loop.c hoists it into the preheader), the loop-2 copy is written in
* the preheader itself, and the tail copy needs a hard-register pin
* (`register s32 dim3 __asm__("$16")`) because nothing separates it from
* its uses. Same shape as the matched sibling func_8013FAF8 (ov_SC06_008),
* which also needed a pin for exactly this call pair.
* 2) `bp = sp18;` exists only to fix the ORDER of the two loop-1 preheader
* insns. loop.c emits hoisted invariants in body order; writing the
* sp18-relative store address as an explicit pointer makes `addiu $s5,$sp,0x18`
* the FIRST movable, so the `dim` copy lands after it (as in the target).
* 3) The `do { } while (0)` around the loop-1 call is a REGISTER-ALLOCATION
* lever, not dead syntax. flow.c weights REG_N_REFS by loop_depth; the
* extra (never-iterating) loop note gives `ot` 18 weighted refs instead of
* 16, which raises its global-alloc priority above `s` (21 refs / 159 insns)
* and lands the a0/a1 params in $s2/$s3 exactly as the target does.
* `mode` is hoisted out of the wrapper so `dim` does NOT get the same +1
* (that would swap $s5/$s6 between `bp` and `dim`).
* 4) Low half of sp60[0] uses `& 0xFFFF`, NOT a (u16) cast: the mask keeps the
* operands in SImode so both halves load with `lh`; a (u16) cast makes
* gcc-2.7.2 emit `lhu`.
*/
extern s32 func_80024054(u8 *, u8 *);
extern s32 func_800D2650(s32, u8 *, s16, s16, s32, s32);
extern s32 func_800D27DC(s32, s32, void *, s16, s32);
extern s32 func_800D29F8(s32, s32, void *, s16, s32);
extern s32 func_801E3830(s32, s16, s16, s16, s32 *);
s32 func_801E3540(s32 ot, u8 *s, s16 c) {
extern u16 D_8011511A;
extern u8 D_801E6584[];
extern s32 *D_801E64FC[];
u8 sp18[72];
s32 sp60[5];
s32 sp78[8];
s32 flag;
s32 dim;
s32 dim2;
register s32 dim3 __asm__("$16");
s32 t;
s16 i;
s16 k;
s32 *p;
u8 *bp;
s16 *q;
s32 r;
s32 mode;
if (c == 0) {
flag = 0;
} else {
flag = -(D_8011511A != c) & 0xFF;
}
t = *(s32 *)(s + 0x14);
if (t < 0) {
func_80024054((u8 *)t, sp18);
ot = func_800D2650(ot, sp18, *(s16 *)(s + 0x10), *(s16 *)(s + 0x12), 1,
flag ? 0x585858 : 0x808080);
} else {
p = D_801E64FC[t];
for (k = 0; k < D_801E6584[*(s32 *)(s + 0x14)]; k++) {
bp = sp18;
dim = flag;
for (i = 0; i < 5; i++) {
if (i == 0) {
sp60[0] = (((s16 *)p)[0] + *(s16 *)(s + 0x10)) & 0xFFFF |
((((s16 *)p)[1] + *(s16 *)(s + 0x12)) << 16);
} else {
*(s32 *)(bp + 0x48 + i * 4) = p[i];
}
}
mode = dim ? 3 : 2;
do {
ot = func_800D27DC(mode, ot, sp60, 1, 0);
} while (0);
p += 5;
}
}
i = 0;
q = *(s16 **)(s + 0x18);
dim2 = flag;
for (;;) {
r = func_801E3830(*(s32 *)(s + 0x1C), *(s16 *)s, c, i++, sp78);
if (r == 0) {
break;
}
if (r < 0) {
func_80024054((u8 *)r, sp18);
if (dim2 != 0) {
sp78[0] = 0x585858;
}
ot = func_800D2650(ot, sp18, q[0], q[1], 1, sp78[0]);
} else {
p = D_801E64FC[r];
*p = (u16)q[0] | (q[1] << 16);
ot = func_800D27DC(dim2 ? 3 : 2, ot, p, 1, 0);
}
q += 2;
}
dim3 = flag;
return func_800D29F8(dim3,
func_800D27DC(dim3 != 0, ot, (void *)*(s32 *)(s + 4),
*(s16 *)(s + 0xC), 0),
(void *)*(s32 *)(s + 8), *(s16 *)(s + 0xE), 0);
}
s32 func_801E3830(s32 arg0, s16 arg1, s16 arg2, s16 arg3, s32 *arg4) {
extern u8 D_80115158[];
s32 t0 = 0;
*arg4 = 0x808080;
arg2 = D_80115158[(s16)arg2 * 2];
if (arg1 < 5) {
if (arg1 > 0) {
if ((s16)arg3 < arg2) {
t0 = *(s32 *)(arg0 + arg3 * 4);
}
} else if (arg1 != 0) {
if ((s16)arg3 < arg2) {
t0 = *(s32 *)(arg0 + arg3 * 4);
}
}
} else if (arg1 != 5) {
if ((s16)arg3 < arg2) {
t0 = *(s32 *)(arg0 + arg3 * 4);
}
}
return t0;
}
INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135_jr_801E3390", func_801E38B4);
INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135_jr_801E3390", func_801E3C1C);
INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135_jr_801E3390", func_801E40A8);
u32 func_801E45C0(s32 a0, s32 a1) {
s32 t0;
s32 a2;
s32 a3;
t0 = 0;
a2 = a0;
a3 = 0;
while (a2 >= 10) {
a0 = a0 / 10;
t0 = t0 | ((a2 - (a0 * 2 + a0 * 8)) << a3);
a2 = a0;
a3 += 4;
}
t0 = t0 | (a2 << a3);
return t0 << a1;
}
void func_801E4628(val, n, dst, flag)
unsigned int val;
short n;
unsigned short *dst;
short flag;
{
extern unsigned short *D_801E6350[];
short i;
int idx;
register unsigned int d __asm__("$3");
for (i = 0; i < n; i++) {
d = val >> 28;
idx = d;
if ((flag << 16) != 0) {
if (d != 0) {
flag = 0;
} else {
idx = 10;
}
}
val <<= 4;
*dst = *D_801E6350[idx];
dst++;
}
}
s32 *func_801E46A0(s32 *out) {
typedef struct { u32 addr : 24; u32 len : 8; } PTag_801E46A0;
typedef struct { u32 *ot; u32 pad[4]; } Env_801E46A0; /* 0x14 stride */
typedef struct { u16 f0; u16 f2; } Prim4_801E46A0;
typedef struct {
s16 f0; /* 0x00 */
s16 f2; /* 0x02 */
void *f4; /* 0x04 */
void *f8; /* 0x08 */
s16 fC; /* 0x0C */
s16 fE; /* 0x0E */
s16 f10; /* 0x10 */
s16 f12; /* 0x12 */
void *f14; /* 0x14 */
Prim4_801E46A0 *f18; /* 0x18 */
void *f1C; /* 0x1C */
} Panel_801E46A0; /* 0x20 stride */
extern Env_801E46A0 D_800AE7BC[];
extern short D_800B9A02;
extern s32 D_80115134;
extern u16 D_8011511A;
extern s16 D_8011512C;
extern u16 D_80115116;
extern u16 D_801E65A8[];
extern s32 func_8005A600(s32, s32, s32, s32, s32);
Prim4_801E46A0 *q;
volatile u16 *pb;
s32 n;
s32 d;
q = ((Panel_801E46A0 *)D_80115134)[*(s16 *)&D_8011511A].f18;
if (D_8011512C == 1) {
n = D_801E65A8[D_80115116 & 7];
} else {
n = 0;
}
out[0] = 0x04000000;
*((u8 *)out + 0xC) = 0x70;
*((u8 *)out + 0xD) = 0x10;
out[1] = 0x64808080;
pb = (volatile u16 *)&D_800B9A02;
*(u16 *)((u8 *)out + 0xE) = 0x4056;
d = n - 0x60; /* [L2] */
*(s16 *)((u8 *)out + 0x8) = q->f0 + d;
*(s16 *)((u8 *)out + 0xA) = q->f2 - 2;
*(s16 *)((u8 *)out + 0x12) = 0x10;
*(s16 *)((u8 *)out + 0x10) = 0x10;
((PTag_801E46A0 *)out)->addr =
((PTag_801E46A0 *)(D_800AE7BC[*pb].ot + 2))->addr;
((PTag_801E46A0 *)(D_800AE7BC[*pb].ot + 2))->addr = (u32)out;
out += 5; /* [L1] */
func_8005A600((s32)out, 0, 0, 0x15, 0);
((PTag_801E46A0 *)out)->addr =
((PTag_801E46A0 *)(D_800AE7BC[*pb].ot + 2))->addr;
{
u32 *op;
register u32 v __asm__("$2"); /* [L3] */
op = D_800AE7BC[*pb].ot;
v = op[2];
v = (v & 0xFF000000) | (((u32)out) & 0xFFFFFF);
op[2] = v;
}
return out + 2;
}
void func_801E4890(void) {
extern void func_80016714(s8 *a0, s32 a1);
extern s8 D_801EA960;
func_80016714(&D_801EA960, 0x2DC);
}
/* 152-byte engine block, copied whole (struct assignment -> 9x16B block move + 8B tail).
* Uniquely suffixed: the host TU already sees `Blk152` from engine_types.h, and a C89
* re-typedef of a visible name is a redefinition error. Same layout, same codegen. */
typedef struct { u32 w[38]; } Blk152_8017DF40_801E48B8;
/* ALIGN-1 4-byte element => lwl/lwr + swl/swr (cookbook §160a); a u32[] loop is wrong. */
typedef struct { u8 b[4]; } Blk4_8017DF40_801E48B8;
/* Param is declared s32 by the host TU's file-scope prototype (:3695); the true test is
* 16-bit (`sll $a0,$a0,16 ; bnez`, no sra), so the truncation lives in the test instead. */
void func_801E48B8(s32 arg0) {
extern u8 D_80078E78[]; /* live: 152-byte block (host TU declares this identically) */
extern u16 D_800A6588[]; /* live: u16[64] */
extern u8 D_800AE648[]; /* live: u8[64] */
extern u8 D_800BA1B8[]; /* live: u8[256] */
extern u8 D_800BA2B8[]; /* live: 4-byte struct[24], align 1 */
extern u8 D_801EA984[]; /* shadow: +0x000 */
extern u16 D_801EAA1C[]; /* shadow: +0x098 */
extern u8 D_801EAA9C[]; /* shadow: +0x118 */
extern u8 D_801EAADC[]; /* shadow: +0x158 */
extern u8 D_801EABDC[]; /* shadow: +0x258 */
s16 i;
if ((s16)arg0 == 0) {
*(Blk152_8017DF40_801E48B8 *)D_80078E78 = *(Blk152_8017DF40_801E48B8 *)D_801EA984;
for (i = 0; i < 64; i++) {
D_800A6588[i] = D_801EAA1C[i];
}
for (i = 0; i < 64; i++) {
D_800AE648[i] = D_801EAA9C[i];
}
for (i = 0; i < 256; i++) {
D_800BA1B8[i] = D_801EAADC[i];
}
for (i = 0; i < 24; i++) {
((Blk4_8017DF40_801E48B8 *)D_800BA2B8)[i] = ((Blk4_8017DF40_801E48B8 *)D_801EABDC)[i];
}
} else {
*(Blk152_8017DF40_801E48B8 *)D_801EA984 = *(Blk152_8017DF40_801E48B8 *)D_80078E78;
for (i = 0; i < 64; i++) {
D_801EAA1C[i] = D_800A6588[i];
}
for (i = 0; i < 64; i++) {
D_801EAA9C[i] = D_800AE648[i];
}
for (i = 0; i < 256; i++) {
D_801EAADC[i] = D_800BA1B8[i];
}
for (i = 0; i < 24; i++) {
((Blk4_8017DF40_801E48B8 *)D_801EABDC)[i] = ((Blk4_8017DF40_801E48B8 *)D_800BA2B8)[i];
}
}
}
extern void func_8014B00C(void);
extern void func_80029344(void);
void func_801E4BA4(void) {
func_8014B00C();
func_80029344();
}
extern u8 *D_80126B10;
extern u8 D_801E6644[];
extern void func_80175414(s32 _arg0);
void func_800167B8(int);
int func_801E4BCC(u8 *arg) {
extern u8 *D_80126B10;
D_80126B10 = D_801E6644;
func_800167B8(0);
((void (*)(void))func_80175414)();
arg[0x15]++;
return 0;
}
extern s32 func_800167F0(s32 a0);
s32 func_801E4C24(void) {
return (func_800167F0(0) & 0xffff) != 0;
}
extern void func_8016EDEC(s32 a0, s32 a1, s32 a2);
extern void func_801E4F30(void *a0);
s32 func_801E4C48(s32 param_1) {
extern s32 D_801EAC68;
D_801EAC68 = 0;
((void (*)(void *, s32))func_8016EDEC)((void *)func_801E4F30, 0x1000000);
*(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1;
*(s32 *)(param_1 + 0x28) = 0x10;
return 0;
}
extern s32 func_800D1E28(void);
extern s32 func_8002D4C8(s32, s32);
extern s32 func_8001BFD0(void);
extern s32 func_800291B4(s32);
extern s32 func_80029524(void);
extern s32 func_800D0C48(s32);
s32 func_801E4C9C(s32 param_1) {
if ((*(s32 *)(param_1 + 0x28) = *(s32 *)(param_1 + 0x28) - 1) == -1) {
func_800D1E28();
func_8002D4C8(0x1C, 0);
func_8001BFD0();
if ((func_800291B4(0xCE) & 0xFF) == 0 && func_80029524() == 0) {
func_8002D4C8(0x1D, 0);
func_800D0C48(1);
}
*(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1;
}
return 0;
}
extern void func_800D1EBC(void);
void func_801E4D3C(void) {
func_800D1EBC();
}
void func_801E4D5C(void *a0) {
extern void (*D_801E65E8[])(void);
D_801E65E8[*(u8 *)((s32)a0 + 0x15)]();
}
s32 func_801E4D98(void *a0) {
extern void (*D_801E65F0[])(void);
extern void func_801E5324(void);
extern s32 D_801EAC68;
s32 v0;
v0 = ((s32 (*)(void))D_801E65F0[*(u8 *)((s32)a0 + 0x15)])();
if (v0 != 0 && D_801EAC68 != 0) {
return 1;
}
D_801EAC68 = ((s32 (*)(void))func_801E5324)();
return 0;
}
void func_801E4E04(void *a0) {
extern void (*D_801E6674[])(void);
D_801E6674[*(u8 *)((s32)a0 + 0x214)]();
}
extern void func_80171A1C(void*);
extern void func_80175414(s32 _arg0);
void func_801E4E40(void) {
((void (*)(void))func_80171A1C)();
((void (*)(void))func_80175414)();
}
typedef struct { u8 c[8]; } Blk8;
const Blk8 D_801E2840 = {{0x00, 0x00, 0x7E, 0xFF, 0xB0, 0x00, 0x00, 0x00}};
extern s32 func_80171D78(u32, void *);
extern void func_80171A1C(void*);
void func_801E4E68(u32 arg0) {
Blk8 buffer;
buffer = D_801E2840;
if (func_80171D78(arg0, &buffer)) {
((void (*)(u32))func_80171A1C)(arg0);
}
}
extern s32 func_80014C54(s32, s32, s32);
extern void func_800D1724(void *);
extern void func_80171A1C(void *);
void func_801E4ED0(void *arg0) {
extern u8 D_801E6644[];
s32 result;
result = func_80014C54(0, 0, 0x80);
if ((result << 16) != 0) {
func_800D1724(&(*(int *)D_801E6644));
func_80171A1C(arg0);
}
}
void func_801E4F28(void) {
}
void func_801E4F30(void *a0) {
extern void (*D_801E6684[])(void);
D_801E6684[*(u8 *)((s32)a0 + 0x214)]();
}
extern void func_80171A1C(void*);
void func_801E4F6C(void) {
((void (*)(void))func_80171A1C)();
}
const Blk8 D_801E2848 = {{0xD5, 0xFF, 0x7E, 0xFF, 0xF5, 0xFE, 0x00, 0x00}};
extern s32 func_80171D78(u32, void *);
extern void func_80171A1C(void*);
void func_801E4F8C(u32 arg0) {
Blk8 buffer;
buffer = D_801E2848;
if (func_80171D78(arg0, &buffer)) {
((void (*)(u32))func_80171A1C)(arg0);
}
}
void func_801E4FF4(void) {
}
extern void func_8012A018(s32 a0, s32 a1);
extern void func_8012A094(s32 a0);
extern void func_801E50C0(void *a0);
void func_801E4FFC(void) {
extern s32 D_80126950;
extern s32 D_80126954;
extern s32 D_8012695C;
extern s16 D_80126968;
extern s16 D_8012696A;
extern s16 D_8012696C;
extern s16 D_80126976;
extern s16 D_80126978;
extern s16 D_8012697A;
extern u8 D_80126948[];
extern s16 D_801274E8;
extern s16 D_801274EA;
extern s16 D_801274EC;
D_80126954 = 0x190;
D_80126950 = 0x190;
D_8012695C = 0x82;
D_80126968 = 0xFB1;
D_8012696A = 0x7C7;
D_8012696C = 0;
D_80126976 = 0;
D_80126978 = -0x36;
D_8012697A = 0;
func_8012A018((s32)func_801E50C0, 0);
func_801E50C0(D_80126948);
func_8012A094((s32)D_80126948);
D_801274EA = -0x82;
D_801274E8 = 0;
D_801274EC = -0x1B0;
}
void func_801E50C0(void *a0) {
extern void (*D_801E6690[])(void);
D_801E6690[*(u8 *)((s32)a0 + 0x4)]();
}
extern void func_801E5124(s32 param_1, s16 *param_2);
void func_801E50FC(s32 param_1) {
extern s16 D_801274E8;
func_801E5124(param_1, &D_801274E8);
}
/* MATRIX 0x20: short m[3][3] @0x00 (18B) + 2B pad, long t[3] @0x14 (PsyQ layout) */
typedef struct { short m[3][3]; long t[3]; } MATRIX_801EDED4_801E5124;
typedef struct { short vx, vy, vz, pad; } SVECTOR_801EDED4_801E5124;
extern u16 func_80148800(s32 *a0);
extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2);
extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2);
extern void func_80049CAC(s32 a0, s32 a1);
extern void func_8012F14C(s32 a0, s32 a1, s32 a2);
void func_801E5124(s32 param_1, s16 *param_2) {
extern s32 D_80126B58;
extern s16 D_801E6694[];
extern u16 D_801E6698[];
MATRIX_801EDED4_801E5124 m1;
SVECTOR_801EDED4_801E5124 svec_in;
SVECTOR_801EDED4_801E5124 svec_out;
u8 t;
if (func_80148800(&D_80126B58) & 3) {
t = (*(u8 *)(param_1 + 5) + 1) & 1;
*(u8 *)(param_1 + 5) = t;
*(s32 *)(param_1 + 0xC) = D_801E6694[t];
*(s16 *)(param_1 + 0x2E) = D_801E6698[*(u8 *)(param_1 + 5)];
}
*(s32 *)(param_1 + 0x8) = (s16)func_80012C6C((s32)*(s16 *)(param_1 + 0x8), (s32)*(s16 *)(param_1 + 0xC), 0xA);
*(s32 *)(param_1 + 0x10) = (s16)func_80012C6C((s32)*(s16 *)(param_1 + 0x10), (s32)*(s16 *)(param_1 + 0x14), 0xA);
*(s16 *)(param_1 + 0x18) = func_80012ABC((s32)*(s16 *)(param_1 + 0x18), (s32)*(s16 *)(param_1 + 0x20), 0xA);
*(s16 *)(param_1 + 0x1A) = func_80012ABC((s32)*(s16 *)(param_1 + 0x1A), (s32)*(s16 *)(param_1 + 0x22), 0xA);
*(s16 *)(param_1 + 0x1C) = func_80012ABC((s32)*(s16 *)(param_1 + 0x1C), (s32)*(s16 *)(param_1 + 0x24), 0xA);
*(s16 *)(param_1 + 0x28) = func_80012C6C((s32)*(s16 *)(param_1 + 0x28), (s32)*(s16 *)(param_1 + 0x2E), 0xA);
*(s16 *)(param_1 + 0x2A) = func_80012C6C((s32)*(s16 *)(param_1 + 0x2A), (s32)*(s16 *)(param_1 + 0x30), 0xA);
*(s16 *)(param_1 + 0x2C) = func_80012C6C((s32)*(s16 *)(param_1 + 0x2C), (s32)*(s16 *)(param_1 + 0x32), 0xA);
*(s32 *)(param_1 + 0x48) = (s32)*(s16 *)(param_1 + 0x28) + (s32)param_2[0];
*(s32 *)(param_1 + 0x4C) = (s32)*(s16 *)(param_1 + 0x2A) + (s32)param_2[1];
*(s32 *)(param_1 + 0x50) = (s32)*(s16 *)(param_1 + 0x2C) + (s32)param_2[2];
func_80049CAC(param_1 + 0x18, (s32)&m1);
m1.t[0] = *(s16 *)(param_1 + 0x28) + param_2[0];
m1.t[1] = *(s16 *)(param_1 + 0x2A) + param_2[1];
m1.t[2] = *(s16 *)(param_1 + 0x2C) + param_2[2];
svec_in.vx = 0;
svec_in.vy = 0;
svec_in.vz = *(s32 *)(param_1 + 0x10);
((void (*)(s32, s32, s32))func_8012F14C)((s32)&m1, (s32)&svec_in, (s32)&svec_out);
*(s32 *)(param_1 + 0x3C) = (s32)svec_out.vx;
*(s32 *)(param_1 + 0x40) = (s32)svec_out.vy;
*(s32 *)(param_1 + 0x44) = (s32)svec_out.vz;
}
s32 func_801E531C(void) {
return 39;
}
extern void func_8001ABBC(u32, u32, void *, u32, u32);
void func_801E5324(void) {
extern u8 D_800AF040[];
func_8001ABBC(0, 0, D_800AF040, 0, 0);
}
+1 -16
View File
@@ -480,22 +480,7 @@ void func_801EAFE4(void) {
}
void func_801EB014(void) {
extern s32 D_801F2624;
extern u32 D_801F24A4;
s32 n;
s32 i;
u32 *p;
u32 *next;
p = &D_801F24A4;
n = D_801F2624 - 1;
for (i = 0; i < n; i++) {
next = p + 4;
*p = (u32)next;
p = next;
}
}
INCLUDE_ASM("asm/md_SC04_027/nonmatchings/md_SC04_027_jr_801EA8C0", func_801EB014);
extern s32 func_80029504(void);
extern void func_80029124(s32 a0, s32 a1);
+1 -67
View File
@@ -300,73 +300,7 @@ INCLUDE_RODATA("asm/md_SC05_026/nonmatchings/md_SC05_026", D_801EDA60);
INCLUDE_ASM("asm/md_SC05_026/nonmatchings/md_SC05_026", func_801EE0D4);
void func_801EE730(void) {
typedef struct { u32 *ot; u32 pad[4]; } Env_801EFA40; /* 0x14 stride */
extern s32 D_801151D0;
extern s16 D_8011512C;
extern s32 D_80115134;
extern s16 D_800B9A02;
extern Env_801EFA40 D_800AE7BC[];
extern s32 *func_801EFA40(s32 *out);
extern s32 func_801EE8E0(s32 ot, u8 *s, s16 c);
extern s32 func_8005A600(s32, s32, s32, s32, s32);
s32 ot;
u8 *s2;
s16 n;
s16 i;
ot = D_801151D0;
s2 = (u8 *)D_80115134;
if (D_8011512C == 1 || D_8011512C == 2) {
ot = (s32)func_801EFA40((s32 *)ot);
}
switch (D_8011512C) {
case 0:
case 5:
case 8:
case 9:
n = 1;
break;
case 1:
case 2:
n = 5;
break;
case 3:
case 4:
case 10:
case 11:
n = 5;
goto CALL;
case 6:
case 7:
case 12:
n = 1;
CALL:
ot = func_801EE8E0(ot, s2 + 0xA0, 0);
break;
}
for (i = 0; i < n; i++) {
ot = func_801EE8E0(ot, s2, i);
s2 += 0x20;
}
func_8005A600(ot, 0, 0, 0x15, 0);
*(s32 *)ot = 0x02000000;
*(s32 *)ot = (D_800AE7BC[*(u16 *)&D_800B9A02].ot[2] & 0xFFFFFF) | 0x02000000;
D_800AE7BC[*(u16 *)&D_800B9A02].ot[2] =
(D_800AE7BC[*(u16 *)&D_800B9A02].ot[2] & 0xFF000000) | ((u32)ot & 0xFFFFFF);
ot += 0x28;
((struct { s32 f; } *)&D_801151D0)->f = ot;
}
INCLUDE_ASM("asm/md_SC05_026/nonmatchings/md_SC05_026", func_801EE730);
typedef struct { s8 c[8]; } Blk8_8012C890_8017C348_801EE8E0;
typedef struct { s16 m[3][3]; s32 t[3]; } MTX_C974_801EE8E0;
+1 -12
View File
@@ -7097,18 +7097,7 @@ void func_801AD9D4(void *a0) {
}
extern M4_801AE734 D_801B0838[];
void func_801ADA10(s32 a0) {
s32 m;
m = (s16)(*(u16 *)(a0 + 0x2E) + 1) % 6;
*(u16 *)(a0 + 0x2E) = *(u16 *)(a0 + 0x2E) + 1;
a0 = *(s32 *)(a0 + 0x34);
*(M4_801AE734 *)(a0 + 0x14) = D_801B0838[(s16)(m * 2)];
*(M4_801AE734 *)(a0 + 0x18) = D_801B0838[(s16)(m * 2) + 1];
}
INCLUDE_ASM("asm/md_SC07_004/nonmatchings/md_SC07_004", func_801ADA10);
#include "common.h"
+51 -1
View File
@@ -6875,7 +6875,57 @@ void func_8018A244(int param_1)
}
INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8018173C", func_8018A2A0);
extern u16 D_800AF7BC;
extern u16 D_800AF7BE;
extern u8 D_801E8830[];
extern s16 D_801E8832;
extern u8 D_801E8844[];
void func_8018A2A0(void) {
s32 i;
s32 flag;
u16 x;
s16 y;
s32 h;
s16 hv;
s32 p0;
s32 p1;
u32 w;
s32 *pw;
s16 *ph;
flag = 0;
y = D_801E8832;
x = *(u16 *)D_801E8830;
if ((y > -((D_800AF7BE >> 1) + 0x10)) && (y < (D_800AF7BE >> 1) + 0x10)) {
if ((-((D_800AF7BC >> 1) + 0x10) < (s16)x)) {
flag = (s16)x < ((D_800AF7BC >> 1) + 0x10);
}
}
pw = ((s32 *)D_801E8844);
ph = (s16 *)((s32 *)D_801E8844) - 8;
for (i = 0; i < 8; i++) {
h = pw[i];
if (h != 0) {
if (flag) {
hv = ph[i];
p0 = (s16)x * hv;
p1 = y * hv;
w = *(u32 *)(h + 4);
*(u32 *)(h + 4) = w & 0x7FFFFFFF;
*(s16 *)(h + 8) = p0 >> 12;
*(s16 *)(h + 0xA) = p1 >> 12;
} else {
w = *(u32 *)(h + 4);
*(u32 *)(h + 4) = w | 0x80000000;
}
}
}
}
void func_8018A3C8(void *arg0) {
s32 i;
+41 -1
View File
@@ -4300,7 +4300,47 @@ void func_8017EC78(void *arg0) {
}
INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017ED0C);
void func_8017ED0C(s32 a0) {
register s32 a3 __asm__("$7");
s32 e;
s32 e2;
u16 L2;
u16 L3;
u16 L1;
u16 a2b;
u16 f;
s16 t;
a3 = a0;
*(s16 *)(a3 + 0x2) = 1;
__asm__ __volatile__("" ::: "memory");
e = *(s32 *)(a3 + 0x78);
__asm__ __volatile__("" : "=r"(L2));
__asm__ __volatile__("" : "=r"(L3));
__asm__ __volatile__("" : "=r"(L1));
__asm__ __volatile__("" : "=r"(a2b));
L1 = *(u16 *)(a3 + 0x88);
L2 = *(u16 *)(a3 + 0x8A);
L3 = *(u16 *)(a3 + 0x8C);
a2b = *(u16 *)(e + 0x2);
f = *(u16 *)(a3 + 0x70);
*(s16 *)(a3 + 0x6) = L1;
*(s16 *)(a3 + 0xA) = L2;
*(s16 *)(a3 + 0xE) = L3;
*(s16 *)(a3 + 0x5C) = a2b;
if ((f & 1) != 0) {
e2 = *(s32 *)(a3 + 0x20);
*(u16 *)(e2 + 0x2C) = *(u16 *)(e2 + 0x2C) | 0x10;
__asm__ __volatile__("" ::: "memory");
e2 = *(s32 *)(a3 + 0x20);
t = 0x1666;
*(s16 *)(e2 + 0x1C) = t;
*(s16 *)(e2 + 0x1A) = t;
*(s16 *)(e2 + 0x18) = t;
*(s16 *)(a3 + 0x100) = t;
}
}
extern void (*D_801A5124[])(void);
-815
View File
@@ -5514,818 +5514,3 @@ void func_8017FF68(s32 a0, void *a1) {
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_8017FFB4);
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_80180138);
extern void func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
extern void func_8001C214(s32 a0, s32 a1);
extern void func_8001D0E8(s32 a0, s32 a1, s32 a2);
extern s32 func_8012AD50(void *a0);
extern s16 D_801A52E4;
extern s16 D_801A924C;
void func_801802CC(s32 a0) {
s32 v0;
s32 s0;
v0 = ((s32 (*)(void))func_8012C1B8)();
s0 = v0;
*(s32 *)(a0 + 0x20) = v0;
if (v0 == 0) {
func_8012CAE4((void *)a0);
} else {
func_8001C214(s0, (s32)&D_801A52E4);
func_8001D0E8(s0, 0x7FFF, 0x7FFF);
*(s32 *)(s0 + 0x80) = (s32)&D_801A924C;
*(s16 *)(s0 + 0x1C) = 0x600;
*(s16 *)(s0 + 0x1A) = 0x600;
*(s16 *)(s0 + 0x18) = 0x600;
*(s32 *)(s0 + 0x04) |= 0x80000000;
*(u16 *)(s0 + 0x2C) |= 0x90;
func_8012AD50((void *)a0);
}
}
extern void func_80180674(s32, s16);
void func_80180378(void *a0) {
s32 *s0 = *(s32 **)((s32)a0 + 0x20);
if (func_8017DCC8() == 6) {
*(u16 *)((s32)s0 + 0x12) = 0x400;
*(s32 *)((s32)s0 + 4) &= 0x7FFFFFFF;
((void (*)(void *, s32))func_80180674)(a0, 0x80);
func_8012AD50(a0);
}
}
void func_801803E8(s32 *a0) {
if (func_8017DCC8() == 7) {
func_8012BF4C(a0, 30);
func_8012AD50(a0);
}
}
void func_8018042C(s32 a0) {
extern s32 D_801151D4;
extern s32 func_8012BEE8(s32 a0);
extern s32 func_8012AD50(void *a0);
s32 p;
s32 v0;
p = D_801151D4;
v0 = *(s32 *)(p + 0x10);
v0 -= 3;
*(s32 *)(p + 0x10) = v0;
*(s32 *)(p + 0x14) = v0;
if (func_8012BEE8(a0) != 0) {
func_8012AD50((void *)a0);
}
}
void func_80180480(s32 a0) {
extern s16 D_800B9AAC[];
extern s16 D_800B9B00;
extern s32 D_801151D4;
extern s32 func_8012E544(s32 a0);
extern void func_8012C098(void *a0);
extern void func_8012BF4C(s32 *a0, s32 a1);
extern s32 func_8013D13C(void);
extern s32 func_8012AD50(void *a0);
register s32 p __asm__("$3");
s32 v0;
p = D_801151D4;
v0 = *(s32 *)(p + 0x10);
v0 = v0 - 3;
*(s32 *)(p + 0x10) = v0;
*(s32 *)(p + 0x14) = v0;
if (((s32 (*)(s32))func_8013D13C)(10) == 0) {
(*(s16 *)&D_800B9AAC) = 0x7FFF;
D_800B9B00 = 0x7FFF;
func_8013C938();
v0 = func_8012E544(0x397);
if (v0 != 0) {
func_8012C098((void *)v0);
}
v0 = func_8012E544(0x395);
if (v0 != 0) {
func_8012C098((void *)v0);
}
v0 = func_8012E544(0x396);
if (v0 != 0) {
func_8012C098((void *)v0);
}
v0 = func_8012E544(0x398);
if (v0 != 0) {
func_8012C098((void *)v0);
}
func_8012BF4C((s32 *)a0, 0x1E);
func_8012AD50((void *)a0);
}
}
extern s32 func_8012AD50(void * arg0);
extern s32 func_8012BEE8(s32 a0);
extern void func_8017DCB8(s32 a0);
void func_80180558(s32 a0) {
if (func_8012BEE8(a0) != 0) {
func_8017DCB8(0x8);
((void (*)(s32))func_8012AD50)(a0);
}
}
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_80180598);
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_801805E4);
extern void func_80180694(s32 a0);
extern s32 func_80180A98(s32 a0);
extern void func_8017DCB8(s32 a0);
extern void func_8012C098(void *a0);
void func_8018062C(s32 a0) {
func_80180694(a0);
if (func_80180A98(a0) != 0) {
func_8017DCB8(0xA);
func_8012C098((void *)a0);
}
}
extern s16 D_801A9250;
extern s16 D_801A924E;
extern s16 D_801A924C;
void func_80180674(s32 a0, s16 a1) {
D_801A9250 = a1;
D_801A924E = a1;
D_801A924C = a1;
}
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_80180694);
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 s32 func_8012AD50(void *a0);
extern s32 D_8019D52C;
extern s32 D_801A9254;
void func_801806E0(void *a0) {
s32 s1;
s32 s0;
s32 v0;
v0 = ((s32 (*)(void))func_8012C1B8)();
s0 = v0;
s1 = (s32)a0;
*(s32 *)((s8 *)s1 + 0x20) = v0;
if (v0 == 0) {
func_8012CAE4((void *)s1);
} else {
__asm__ __volatile__("");
func_8001C810(s0, (s32)&D_8019D52C);
func_8001D0E8(s0, 0x7FFF, 0x7FFF);
*(u16 *)((s8 *)s0 + 0x18) = *(u16 *)((s8 *)s0 + 0x1A) = *(u16 *)((s8 *)s0 + 0x1C) = 0x600;
*(s32 *)((s8 *)s0 + 0x80) = (s32)&D_801A9254;
*(s32 *)((s8 *)s0 + 0x4) |= 0xC0000000;
*(u16 *)((s8 *)s0 + 0x2C) |= 0x30;
func_8012AD50((void *)s1);
}
}
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_8018078C);
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_80180834);
void func_80180894(s32 arg0) {
register s32 s0 __asm__("$16") = arg0;
s32 v0, v1;
func_80180944(arg0);
v1 = *(s32 *)(s0 + 0x20);
v0 = *(u16 *)(v1 + 0x12);
v0 += 0x10;
*(u16 *)(v1 + 0x12) = v0;
v0 = func_8012BEE8(s0);
if (v0 != 0) {
func_80180A50(s0);
func_8012AD50((void *)s0);
}
}
extern s32 func_80180A98(s32 a0);
extern void func_8012C098(void *a0);
void func_801808F0(s32 arg0) {
extern s32 func_80180944(s32 a0);
register s32 s0 __asm__("$16") = arg0;
s32 v1;
func_80180944(s0);
v1 = *(s32 *)(s0 + 0x20);
*(u16 *)(v1 + 0x12) += 0x10;
if (func_80180A98(s0) != 0) {
func_8012C098((void *)s0);
}
}
void func_80180944(s32 param_1)
{
extern s32 rand(void);
extern s32 D_801A9254;
extern s32 D_801A9258;
extern s32 D_801A925C;
extern s32 D_801A9264;
extern s32 D_801A9268;
extern s32 D_801A926C;
extern s32 D_801A9274;
extern s32 D_801A9278;
extern s32 D_801A927C;
SV4_L_8017C294 vec; /* sp+0x10 */
MTX_L_8017C294 mtx; /* sp+0x18 */
s32 prim;
s32 mode;
s32 code;
s32 hi;
s32 val;
if ((rand() & 0xF) != 0) {
mode = 0x40000000;
} else {
mode = 0x50000000;
}
prim = *(s32 *)(param_1 + 0x20);
code = *(s32 *)(prim + 4) & 0xCFFFFFFF;
hi = 0x40000000;
*(s32 *)(prim + 4) = code | (mode | hi);
val = *(u16 *)(param_1 + 0x108) + 0x80;
*(u16 *)(param_1 + 0x108) = val;
vec.a = val;
val = *(u16 *)(param_1 + 0x10A) + 0x100;
*(u16 *)(param_1 + 0x10A) = val;
vec.b = val;
vec.c = 0;
RotMatrixYXZ(&vec, &mtx);
vec.b = 0;
vec.a = 0;
vec.c = 0x200;
ApplyMatrixSV(&mtx, &vec, &vec);
D_801A9274 = vec.a;
D_801A9264 = vec.a;
D_801A9254 = vec.a;
D_801A9278 = vec.b;
D_801A9268 = vec.b;
D_801A9258 = vec.b;
D_801A927C = vec.c;
D_801A926C = vec.c;
D_801A925C = vec.c;
}
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_80180A50);
extern s16 D_80185F50;
extern s16 D_80185F52;
extern s16 D_80185F54;
extern s16 D_80185F56;
s32 func_80180A98(s32 param_1)
{
int iVar1;
int iVar3;
short sVar2;
iVar1 = *(int *)(param_1 + 0x1c);
iVar3 = *(int *)(param_1 + 0x20);
if (iVar1 < 0x3c) {
*(short *)(param_1 + 6) =
*(short *)(param_1 + 0x12) +
(short)((((int)D_80185F50 - (int)*(short *)(param_1 + 0x12)) * iVar1) / 0x3c);
*(short *)(param_1 + 10) =
*(short *)(param_1 + 0x16) +
(short)((((int)D_80185F52 - (int)*(short *)(param_1 + 0x16)) * *(int *)(param_1 + 0x1c)) / 0x3c);
*(short *)(param_1 + 0xe) =
*(short *)(param_1 + 0x1a) +
(short)((((int)D_80185F54 - (int)*(short *)(param_1 + 0x1a)) * *(int *)(param_1 + 0x1c)) / 0x3c);
sVar2 = *(short *)(param_1 + 0x100) +
(short)((((int)D_80185F56 - (int)*(short *)(param_1 + 0x100)) * *(int *)(param_1 + 0x1c)) / 0x3c);
*(short *)(iVar3 + 0x1c) = sVar2;
*(short *)(iVar3 + 0x1a) = sVar2;
*(short *)(iVar3 + 0x18) = sVar2;
*(int *)(param_1 + 0x1c) = *(int *)(param_1 + 0x1c) + 1;
return 0;
}
return 1;
}
extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4);
extern void func_8001D0E8(s32 a0, s32 a1, s32 a2);
extern u8 D_8019F5EC;
extern u8 D_8019F8F4;
extern u8 D_8019FBF4;
extern u8 D_8019F8EC;
extern void (*D_80185F58[])(void);
extern u16 D_80185F88;
extern u16 D_80185F8A;
extern u16 D_80185F8C;
extern void func_8012C1B8(void);
void func_80180BEC(void *param_1) {
s32 v0;
s32 s0;
func_801325B8((s32)&D_8019F5EC, (s32)&D_8019F8F4, (s32)&D_8019FBF4, 0, 0);
v0 = ((s32 (*)(void))func_8012C1B8)();
s0 = v0;
*(s32 *)((s8 *)param_1 + 0x20) = v0;
if (v0 == 0) {
func_8012CAE4(param_1);
} else {
func_8001C214(s0, (s32)&D_8019F8EC);
func_8001D0E8(s0, 0x7FFF, 0x7FFF);
*(s32 *)((s8 *)s0 + 0x80) = (s32)&D_80185F58;
*(s32 *)((s8 *)s0 + 0x04) |= 0xD0000000;
*(u16 *)((s8 *)s0 + 0x2C) |= 0xB0;
D_80185F8C = 0;
D_80185F8A = 0;
D_80185F88 = 0;
*(s16 *)((s8 *)s0 + 0x1C) = 0;
*(s16 *)((s8 *)s0 + 0x1A) = 0;
*(s16 *)((s8 *)s0 + 0x18) = 0;
func_8012AD50(param_1);
}
}
extern s32 func_8017DCC8(void);
extern s32 func_8012AD50(void *a0);
void func_80180CD4(void *a0) {
s32 *s0 = *(s32 **)((s32)a0 + 0x20);
if (func_8017DCC8() == 8) {
*(s32 *)((s32)s0 + 4) &= 0x7FFFFFFF;
func_8012AD50(a0);
}
}
extern void func_80181204(A801593E4 *a0);
extern void func_80181224(void);
extern void func_801811C8(s32 a0);
extern void func_8012BF4C(s32 *a0, s32 a1);
extern s32 func_8012AD50(void *a0);
void func_80180D30(A801593E4 *a0) {
u8 *s1;
u16 w;
s1 = *(u8 **)((u8 *)a0 + 0x20);
func_80181204(a0);
((void (*)(A801593E4 *))func_80181224)(a0);
w = *(u16 *)(s1 + 0x1A);
w = w + 0x10;
*(u16 *)(s1 + 0x1A) = w;
if ((s16)w >= 0x24A) {
*(u16 *)(s1 + 0x1A) = 0x249;
}
func_801811C8((s32)a0);
if (*(s16 *)(s1 + 0x1A) == 0x249) {
*(u16 *)((u8 *)a0 + 0xFC) = 0;
func_8012BF4C((s32 *)a0, 0x5A);
func_8012AD50((void *)a0);
}
}
extern void func_80181204(A801593E4 *a0);
extern void func_80181224(void);
extern s32 func_8012BEE8(s32 a0);
extern s32 func_8012AD50(void *a0);
void func_80180DC4(A801593E4 *a0) {
void *s1 = *(void **)((u8 *)a0 + 0x20);
func_80181204(a0);
((void (*)(A801593E4 *))func_80181224)(a0);
if (func_8012BEE8((s32)a0) != 0) {
if (*(s16 *)((u8 *)a0 + 0xFC) != 0) {
if (*(s16 *)((u8 *)s1 + 0x12) >= 0x400) {
*(s16 *)((u8 *)s1 + 0x12) = 0x400;
*(s16 *)((u8 *)a0 + 0xFC) = 0;
func_8012AD50((void *)a0);
}
} else {
if (*(s16 *)((u8 *)s1 + 0x12) < 0x400) {
*(s16 *)((u8 *)a0 + 0xFC) = 1;
}
}
}
}
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_80180E68);
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_801810F8);
void func_801811C8(s32 arg0) {
u16 temp;
arg0 = *(s32 *)(arg0 + 0x20);
temp = *(u16 *)(arg0 + 0x1A);
*(s16 *)(arg0 + 0x1C) = temp;
*(s16 *)(arg0 + 0x18) = (((s32)(s16)temp << 7) / 94);
}
void func_80181204(A801593E4 *a0) {
S801593E4 *v1 = a0->p20;
v1->field12 = (v1->field12 + 0x44) & 0xFFF;
}
extern u16 D_80185F88;
extern u16 D_80185F8A;
extern u16 D_80185F8C;
void func_80181224(void) {
u16 *p = &D_80185F88;
*p += 4;
if ((s16)*p >= 0x100) {
*p = 0xFF;
}
D_80185F8C = *p;
D_80185F8A = *p;
}
extern s32 func_8017DCC8(void);
extern void func_8002D4C8(s32 a0, s32 a1);
extern void func_801813F8(void *a0, void *a1, void *a2);
extern s32 func_8012AD50(void *a0);
extern void (*D_80185FC0[])(void *);
extern u32 D_80185F90[];
void func_80181270(void *a0) {
if (func_8017DCC8() == 0xA) {
func_8002D4C8(0xC16, 0);
func_801813F8(a0, &D_80185F90[0], &D_80185FC0[0]);
func_801813F8(a0, &D_80185F90[2], &D_80185FC0[1]);
func_801813F8(a0, &D_80185F90[4], &D_80185FC0[2]);
func_8012AD50(a0);
}
}
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_80181304);
extern s32 func_8017DCC8(void);
extern void func_8012C098(void *a0);
void func_80181394(void *a0) {
if (((s32 (*)(s32))func_8017DCC8)((s32)a0) == 12) {
((void (*)(s32))func_8012C098)((s32)a0);
}
}
extern s32 func_8001739C(s32 *a0);
void func_801813D0(void) {
extern s32 D_80185FA8;
func_8001739C(&D_80185FA8);
}
void func_801813F8(void *a0, void *a1, void *a2) {
u16 var;
var = *(u16 *)((s32)a1 + 6);
*(u16 *)((s32)a1 + 0) = 0;
*(u16 *)((s32)a1 + 2) = var;
*(s32 *)((s32)a2 + 0) = 0;
}
extern void (*D_80185FC0[])(void *);
extern u32 D_80185F90[];
s32 func_8018140C(void)
{
s32 done;
s32 i;
s32 c;
u16 *p;
u8 *q;
done = 0;
for (i = 0; i < 3; i++) {
p = (u16 *)((u32 *)D_80185F90 + i * 2);
q = (u8 *)(D_80185FC0 + i);
switch ((s16)p[0]) {
case 0:
p[1] -= 1;
if ((s16)p[1] == -1) {
p[0] = p[0] + 1;
}
break;
case 1:
c = *q;
c += 0x10;
if (c >= 0x100) {
c = 0xFF;
p[0] = p[0] + 1;
}
c = (c << 0x10) | (c << 8) | c;
*(u32 *)q = c;
break;
case 2:
c = *q;
c -= 0x10;
if (c < 0) {
c = 0;
p[0] = p[0] + 1;
}
c = (c << 0x10) | (c << 8) | c;
*(u32 *)q = c;
break;
case 3:
done += 1;
break;
}
}
return done == 3;
}
extern s32 func_8017DCC8(void);
extern void func_800167B8(s32 a0);
extern s32 func_8012AD50(void *a0);
void func_80181534(void *a0) {
if (func_8017DCC8() == 11) {
func_800167B8(4);
func_8012AD50(a0);
}
}
extern u16 D_800AF7CE;
extern u8 D_800B9A11;
extern s32 D_800B9A18;
void func_80181578(void *arg0) {
u16 v0;
v0 = D_800AF7CE;
D_800AF7CE = v0 + 4;
if ((u16)(v0 + 4) < 0xFF) {
} else {
D_800AF7CE = 0xFF;
}
func_80016224((u8)D_800AF7CE, 0);
if (D_800AF7CE == 0xFF) {
func_8017DCB8(0xC);
func_800167B8(0);
D_800B9A11 = 1;
func_800146B0(7);
D_800B9A18 = 0;
func_8012AD50(arg0);
}
}
void func_80181620(void *a0) {
extern s32 func_8012AD50(void *a0);
if (func_80181F40() != 0) {
*(u16 *)((s32)a0 + 0xFC) = 0;
func_8012AD50(a0);
}
}
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_8018165C);
extern s32 func_80014D94();
extern s32 func_8012AD50(void *a0);
extern void func_801817D0();
extern s16 D_800B9A02;
void func_801816D4(void *a0) {
if ((func_80014D94(0) & 0xF0) != 0) {
func_8012AD50(a0);
}
func_801817D0(*(u16 *)&D_800B9A02, *(s16 *)((s32)a0 + 0xFC));
}
void func_80181728(void *a0) {
extern void func_801817D0();
extern void func_800146B0(s32 a0);
extern void func_800D1724(s32 a0);
extern s32 func_8012AD50(void *a0);
extern short D_800B9A02;
extern s32 D_800B9A18;
extern u8 D_80078E78[];
extern void (*D_801859D0)(void *);
u16 v;
v = *(u16 *)((s32)a0 + 0xFC) - 4;
*(u16 *)((s32)a0 + 0xFC) = v;
if ((s16)v < 0) {
*(u16 *)((s32)a0 + 0xFC) = 0;
}
func_801817D0(*(u16 *)&D_800B9A02, *(s16 *)((s32)a0 + 0xFC));
if (*(s16 *)((s32)a0 + 0xFC) == 0) {
func_800146B0(1);
D_800B9A18 = 2;
*(u32 *)&D_80078E78 = 1;
func_800D1724((s32)&D_801859D0);
func_8012AD50(a0);
}
}
void func_801817C8(void) {
}
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_801817D0);
void func_80181B2C(void *a0) {
extern void (*D_80186070[])(void);
switch (*(s32 *)((s32)a0 + 0x34)) {
case 0:
D_80186070[*(u16 *)((s32)a0 + 0x2)]();
break;
case 1:
func_80181E20(a0);
break;
}
}
extern s32 func_8001CC3C(s32, s32, s32, s32);
extern void func_80128EA8(s32 a0, s32 a1, s32 a2);
extern u8 D_800D387C[];
extern void (*D_80185FD0)(void);
void func_80181B98(s32 param_1)
{
s32 work;
s32 val;
s32 res;
work = *(s32 *)(param_1 + 0x20);
((void (*)(s32, s32, s32, s32))func_8001CC3C)(work, D_800D387C, 0, 0);
*(u8 *)(work + 0x27) = 0x9C;
*(s32 *)(work + 4) = *(s32 *)(work + 4) | 0x50000000;
val = *(s32 *)(param_1 + 0x2C);
*(u8 *)(work + 0x24) = 0xC0;
*(u8 *)(work + 0x25) = 0x40;
*(u8 *)(work + 0x26) = 0x20;
res = ((8 - val) * 3) << 9;
*(u16 *)(work + 0x1A) = res;
*(u16 *)(work + 0x18) = res;
func_80128EA8(work, param_1 + 0x24, &D_80185FD0);
*(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
}
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_80181C54);
void func_80181CDC(void *a0) {
extern void func_8012931C(void *a0);
u16 t;
if ((*(s32 *)((s32)a0 + 0x1C))-- == 0) {
*(s32 *)((s32)a0 + 0x10) >>= 1;
*(s32 *)((s32)a0 + 0x14) >>= 1;
*(s32 *)((s32)a0 + 0x18) >>= 1;
t = *(u16 *)((s32)a0 + 2) + 1;
*(u16 *)((s32)a0 + 2) = t;
} else {
func_8012931C(a0);
}
}
void func_80181D48(s32 a0) {
u8 *s0;
u8 v1;
s16 v0;
s0 = *(u8 **)(a0 + 0x20);
func_8012931C();
v0 = *(u8 *)(s0 + 0x24);
v0 = v0 - 4;
*(u8 *)(s0 + 0x24) = v0;
if ((u8)v0 > 0xC0) {
*(u8 *)(s0 + 0x24) = 0;
}
v1 = *(u8 *)(s0 + 0x24);
if (v1 < *(u8 *)(s0 + 0x25)) {
*(u8 *)(s0 + 0x25) = v1;
v1 = *(u8 *)(s0 + 0x24);
}
if (v1 < *(u8 *)(s0 + 0x26)) {
*(u8 *)(s0 + 0x26) = v1;
}
v0 = *(u16 *)(s0 + 0x18) + 0x100;
*(u16 *)(s0 + 0x18) = v0;
if ((s16)v0 >= 0x4001) {
*(u16 *)(s0 + 0x18) = 0x4000;
}
*(u16 *)(s0 + 0x1A) = *(u16 *)(s0 + 0x18);
if (*(u8 *)(s0 + 0x24) == 0) {
func_801292C8(a0);
}
}
void func_80181E20(void *a0) {
extern void (*D_80186090[])(void);
D_80186090[*(u16 *)((s32)a0 + 0x2)]();
}
extern s32 func_8001CC3C(s32, s32, s32, s32);
extern void func_80128EA8(s32 a0, s32 a1, s32 a2);
extern u8 D_800D387C[];
extern u8 D_80186020[];
void func_80181E5C(s32 param_1)
{
s32 work;
work = *(s32 *)(param_1 + 0x20);
((void (*)(s32, s32, s32, s32))func_8001CC3C)(work, D_800D387C, 0, 0);
*(u8 *)(work + 0x27) = 0x9C;
*(u16 *)(work + 0x1A) = 0x3000;
*(u16 *)(work + 0x18) = 0x3000;
*(u32 *)(work + 4) = *(u32 *)(work + 4) | 0x50000000;
func_80128EA8(work, param_1 + 0x24, D_80186020);
*(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
}
extern s32 func_80128ED8(s32 param_1, s32 *param_2);
extern void func_801292C8(u8 *a0);
void func_80181EEC(int param_1)
{
int base;
unsigned short *p;
unsigned short val;
base = *(int *)(param_1 + 0x20);
p = (unsigned short *)(base + 0x1A);
val = *p - 0x100;
p[0] = val;
p[-1] = val;
if (func_80128ED8(base, (s32 *)(param_1 + 0x24)) != 0) {
func_801292C8((u8 *)param_1);
}
}
extern void func_8001ABBC(u32, u32, void *, u32, u32);
void func_80181F40(void) {
extern u8 D_800AF608[];
func_8001ABBC(0, 0, D_800AF608, 0, 0);
}
File diff suppressed because it is too large Load Diff