mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-28 06:49:47 -04:00
chore(decomp): commit in-tree banked work before the serial lane
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user