mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-01 15:43:06 -04:00
feat(decomp): integration-resolver pass — 54 banked of 90 staged (zero model tokens)
Drafts the ledgers already recorded as byte-correct (closeness 0 / reloc shape MATCH), re-judged against today's tree by rtu_match + reloc_identity, staged, and gated on the whole-binary SHA. Ledger: .run/resolver/verdicts.jsonl
This commit is contained in:
+1
-1
@@ -4993,7 +4993,7 @@ ov_MAIN_012_ELF := $(ov_MAIN_012_OUT).elf
|
||||
ov_MAIN_012_MAPFILE := $(ov_MAIN_012_OUT).map
|
||||
ov_MAIN_012_LD_SCRIPT := $(ov_MAIN_012_OUT).ld
|
||||
ov_MAIN_012_SPLAT_YAML := config/splat.ov_MAIN_012.yaml
|
||||
ov_MAIN_012_JTBL_INTERLEAVE := --order tail.data.o,ov_MAIN_012.o,ov_MAIN_012_jr_80131340.o,tail2.data.o,ov_MAIN_012_jr_80135A4C.o,tail3.data.o,ov_MAIN_012_jr_80135EB0.o,tail4.data.o,ov_MAIN_012_jr_801380E0.o,ov_MAIN_012_o0c.o,tail5.data.o,ov_MAIN_012_jr_8013F350.o,tail6.data.o,ov_MAIN_012_jr_801549F8.o,ov_MAIN_012_jr_801555F4.o,tail7.data.o,ov_MAIN_012_jr_801594E8.o,ov_MAIN_012_jr_80159C84.o,tail8.data.o,ov_MAIN_012_jr_8015A3C8.o,tail9.data.o,ov_MAIN_012_jr_8016AB6C.o,ov_MAIN_012_jr_8016AE5C.o,tail10.data.o,ov_MAIN_012_jr_80171B4C.o,tail11.data.o,ov_MAIN_012_jr_801789AC.o,tail12.data.o,ov_MAIN_012_jr_8017C3BC.o,tail13.data.o,ov_MAIN_012_jr_8017CA18.o,tail14.data.o,ov_MAIN_012_jr_8017CF3C.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
ov_MAIN_012_JTBL_INTERLEAVE := --order tail.data.o,ov_MAIN_012.o,ov_MAIN_012_jr_80131340.o,tail2.data.o,ov_MAIN_012_jr_80135A4C.o,tail3.data.o,ov_MAIN_012_jr_80135EB0.o,tail4.data.o,ov_MAIN_012_jr_801380E0.o,ov_MAIN_012_o0c.o,tail5.data.o,ov_MAIN_012_jr_8013F350.o,tail6.data.o,ov_MAIN_012_jr_8015444C.o,tail7.data.o,ov_MAIN_012_jr_801549F8.o,ov_MAIN_012_jr_801555F4.o,tail8.data.o,ov_MAIN_012_jr_801594E8.o,ov_MAIN_012_jr_80159C84.o,tail9.data.o,ov_MAIN_012_jr_8015A3C8.o,tail10.data.o,ov_MAIN_012_jr_8016AB6C.o,ov_MAIN_012_jr_8016AE5C.o,tail11.data.o,ov_MAIN_012_jr_80171B4C.o,tail12.data.o,ov_MAIN_012_jr_801789AC.o,tail13.data.o,ov_MAIN_012_jr_8017C3BC.o,tail14.data.o,ov_MAIN_012_jr_8017CA18.o,tail15.data.o,ov_MAIN_012_jr_8017CF3C.o,tail16.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_MAIN_012/ov_MAIN_012.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0xdc
|
||||
build/src/ov_MAIN_012/ov_MAIN_012_jr_80131340.o: JTBL_PADS := 0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x2c
|
||||
build/src/ov_MAIN_012/ov_MAIN_012_jr_80135A4C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
|
||||
@@ -295,9 +295,369 @@ INCLUDE_RODATA("asm/md_SC03_076/nonmatchings/md_SC03_076", D_801EF468);
|
||||
|
||||
INCLUDE_RODATA("asm/md_SC03_076/nonmatchings/md_SC03_076", D_801EF540);
|
||||
|
||||
INCLUDE_ASM("asm/md_SC03_076/nonmatchings/md_SC03_076", func_801EFBB4);
|
||||
s32 func_801EFBB4(void) {
|
||||
extern s16 D_80115126;
|
||||
extern s16 D_8011512C;
|
||||
extern s16 D_801F9AB8;
|
||||
extern s16 D_801F9ABC;
|
||||
extern s16 D_801F9AC0;
|
||||
extern s16 func_8014168C(s16 a0);
|
||||
extern s32 D_801F3248;
|
||||
extern s32 D_801F32E0;
|
||||
extern s32 D_801F3380;
|
||||
extern s32 D_801F9DA0;
|
||||
extern s32 D_801F9DA4;
|
||||
extern s32 func_80014ED4(s32);
|
||||
extern s32 func_80015018(s32);
|
||||
extern void func_8002AF18(void);
|
||||
extern u16 D_8011511A;
|
||||
extern s16 D_80115118;
|
||||
extern s32 D_801F9AC4;
|
||||
extern u8 D_801F9DAB[];
|
||||
extern u8 D_801F9DB1;
|
||||
extern void func_8002AF70(void *, u32);
|
||||
extern s32 func_8002D4C8(s32, s32);
|
||||
extern void func_801F1710(void);
|
||||
extern void func_801F1738(s32);
|
||||
|
||||
s32 *p;
|
||||
s32 *p2;
|
||||
u16 *ph;
|
||||
s16 *q;
|
||||
s32 pad;
|
||||
s32 flag;
|
||||
s32 st;
|
||||
s32 t;
|
||||
s32 t2;
|
||||
s32 sv;
|
||||
s32 x;
|
||||
s32 r;
|
||||
s32 unused[4];
|
||||
|
||||
flag = 0;
|
||||
pad = func_80014ED4(0);
|
||||
func_80015018(0);
|
||||
func_8014168C(D_8011511A);
|
||||
|
||||
if (pad & 0x40) {
|
||||
st = D_8011512C;
|
||||
switch (st) {
|
||||
case 1:
|
||||
if (D_80115126 == 0) {
|
||||
if (D_801F9DAB[D_8011511A] == 1) {
|
||||
D_801F32E0 = 0x19;
|
||||
} else {
|
||||
func_8002D4C8(0x472, 0);
|
||||
return 0;
|
||||
}
|
||||
} else if (D_801F9DAB[D_8011511A] == 1) {
|
||||
D_801F32E0 = 0x16;
|
||||
} else {
|
||||
D_801F32E0 = 0x19;
|
||||
}
|
||||
D_8011512C = 2;
|
||||
func_8002D4C8(0x45D, 0);
|
||||
return 0;
|
||||
case 2:
|
||||
func_801F1710();
|
||||
if (D_80115126 == 0) {
|
||||
D_801F3380 = 0x14;
|
||||
D_801F9DA0 = 2;
|
||||
D_801F9DA4 = D_8011511A - 1;
|
||||
} else {
|
||||
D_801F9DA4 = D_8011511A - 1;
|
||||
func_801F1738(1);
|
||||
func_8002AF70(&D_801F9AC4, D_801F9DA4);
|
||||
D_801F3380 = 0xE;
|
||||
D_801F9DA0 = 1;
|
||||
}
|
||||
D_8011512C = 3;
|
||||
func_8002D4C8(0x45D, 0);
|
||||
return 0;
|
||||
case 4:
|
||||
case 7:
|
||||
Lcheck47:
|
||||
ph = (u16 *)&D_80115118;
|
||||
if (*ph < 0x47) {
|
||||
goto Lreset;
|
||||
}
|
||||
return 0;
|
||||
case 9:
|
||||
p = &D_801F32E0;
|
||||
if (*p == 0x1D || *p == 0x21) {
|
||||
goto Lmsg473ret1;
|
||||
}
|
||||
D_801F9AB8 = 0;
|
||||
D_801F9AC0 = 1;
|
||||
D_8011512C = 0;
|
||||
*p = D_801F3248;
|
||||
func_8002D4C8(0x45D, 0);
|
||||
return 0;
|
||||
case 5:
|
||||
goto Lload;
|
||||
case 0:
|
||||
case 3:
|
||||
case 6:
|
||||
case 8:
|
||||
case 10:
|
||||
case 11:
|
||||
case 12:
|
||||
break;
|
||||
default:
|
||||
goto Ltail;
|
||||
}
|
||||
return 0;
|
||||
} else if (pad & 0x10) {
|
||||
st = D_8011512C;
|
||||
switch (st) {
|
||||
case 0:
|
||||
if (D_801F32E0 != 0xB) {
|
||||
return 0;
|
||||
}
|
||||
/* fallthrough */
|
||||
case 1:
|
||||
Lmsg473:
|
||||
func_8002D4C8(0x473, 0);
|
||||
t = D_801F9ABC;
|
||||
sv = t;
|
||||
if (t == 0) {
|
||||
return 1;
|
||||
}
|
||||
x = (t == 1) ? 0x1D : 0x21;
|
||||
r = 0;
|
||||
t = 9;
|
||||
D_8011512C = t;
|
||||
D_801F32E0 = x;
|
||||
t = 0xFF;
|
||||
goto Lstore;
|
||||
case 2:
|
||||
if (D_80115126 == 0) {
|
||||
D_801F32E0 = 0xC;
|
||||
} else {
|
||||
D_801F32E0 = 0xD;
|
||||
}
|
||||
D_8011512C = 1;
|
||||
func_8002D4C8(0x473, 0);
|
||||
return 0;
|
||||
case 5:
|
||||
case 8:
|
||||
if (D_80115126 != 0) {
|
||||
goto Lmsg473;
|
||||
}
|
||||
Lmsg473ret1:
|
||||
func_8002D4C8(0x473, 0);
|
||||
return 1;
|
||||
case 9:
|
||||
p2 = &D_801F32E0;
|
||||
if (*p2 == 0x1D || *p2 == 0x21) {
|
||||
if (D_801F9AC0 == 0) {
|
||||
*p2 = 0x1A;
|
||||
func_8002D4C8(0x45D, 0);
|
||||
return 0;
|
||||
}
|
||||
D_801F9AB8 = 0;
|
||||
D_8011512C = 0;
|
||||
*p2 = D_801F3248;
|
||||
func_8002AF18();
|
||||
func_8002D4C8(0x45D, 0);
|
||||
return 0;
|
||||
}
|
||||
*p2 = (D_801F9ABC == 1) ? 0x1D : 0x21;
|
||||
func_8002D4C8(0x473, 0);
|
||||
return 0;
|
||||
case 4:
|
||||
case 7:
|
||||
goto Lcheck47;
|
||||
case 3:
|
||||
case 6:
|
||||
case 10:
|
||||
case 11:
|
||||
case 12:
|
||||
break;
|
||||
default:
|
||||
goto Ltail;
|
||||
}
|
||||
return 0;
|
||||
} else if (pad & 0x20) {
|
||||
st = D_8011512C;
|
||||
if (st == 5) {
|
||||
D_801F3380 = 0x17;
|
||||
D_8011512C = 6;
|
||||
func_8002D4C8(0x45D, 0);
|
||||
D_801F9DA0 = 3;
|
||||
return 0;
|
||||
}
|
||||
goto Ltail;
|
||||
}
|
||||
Lload:
|
||||
st = D_8011512C;
|
||||
Ltail:
|
||||
if (st == 4 || st == 7 || st >= 10) {
|
||||
ph = (u16 *)&D_80115118;
|
||||
if (*ph != 0) {
|
||||
*ph = *ph - 1;
|
||||
goto Lmid;
|
||||
}
|
||||
Lreset:
|
||||
D_80115118 = 0;
|
||||
if (D_80115126 == 0) {
|
||||
if (D_8011512C == 4) {
|
||||
return -1;
|
||||
}
|
||||
D_801F32E0 = 0xC;
|
||||
} else {
|
||||
t2 = D_801F9ABC;
|
||||
sv = t2;
|
||||
if (t2 != 0 && D_8011512C == 4) {
|
||||
t = (t2 == 1) ? 0x1D : 0x21;
|
||||
r = 0;
|
||||
D_801F32E0 = t;
|
||||
t = 9;
|
||||
D_8011512C = t;
|
||||
t = 0xFF;
|
||||
Lstore:
|
||||
D_801F9AB8 = sv;
|
||||
D_801F9DB1 = t;
|
||||
return r;
|
||||
}
|
||||
D_801F32E0 = 0xD;
|
||||
q = &D_8011512C;
|
||||
if (*q == 0xC) {
|
||||
*q = 1;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
D_8011512C = 1;
|
||||
return 0;
|
||||
}
|
||||
Lmid:
|
||||
if (D_8011512C != 1) {
|
||||
return 0;
|
||||
}
|
||||
if (pad & 0x1000) {
|
||||
t = D_8011511A;
|
||||
D_8011511A = t - 2;
|
||||
flag = 1;
|
||||
if (D_8011511A == 0 || D_8011511A >= 5) {
|
||||
D_8011511A = t + 2;
|
||||
}
|
||||
}
|
||||
if (pad & 0x4000) {
|
||||
ph = &D_8011511A;
|
||||
t2 = *ph;
|
||||
*ph = t2 + 2;
|
||||
flag = 1;
|
||||
if (*ph >= 5) {
|
||||
*ph = t2 - 2;
|
||||
}
|
||||
}
|
||||
if (pad & 0x8000) {
|
||||
ph = &D_8011511A;
|
||||
t2 = *ph;
|
||||
*ph = t2 + 1;
|
||||
flag = 1;
|
||||
if (*ph & 1) {
|
||||
*ph = t2 - 1;
|
||||
}
|
||||
}
|
||||
if (pad & 0x2000) {
|
||||
ph = &D_8011511A;
|
||||
t2 = *ph;
|
||||
*ph = t2 - 1;
|
||||
flag = 1;
|
||||
if (!(*ph & 1)) {
|
||||
*ph = t2 + 1;
|
||||
}
|
||||
}
|
||||
r = flag;
|
||||
if (r) {
|
||||
func_8002D4C8(0x45A, 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void func_801F0210(void) {
|
||||
typedef struct { u32 *ot; u32 pad[4]; } Env_801F1520; /* 0x14 stride */
|
||||
typedef struct { u16 f0; u16 f2; } Prim4_801F1520;
|
||||
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_801F1520 *f18; /* 0x18 */
|
||||
void *f1C; /* 0x1C */
|
||||
} Panel_801F1520; /* 0x20 stride */
|
||||
|
||||
extern Env_801F1520 D_800AE7BC[];
|
||||
extern s16 D_8011512C;
|
||||
extern Panel_801F1520 *D_80115134;
|
||||
extern s32 D_801151D0;
|
||||
extern s16 D_800B9A02;
|
||||
|
||||
extern s32 *func_801F1520(s32 *out);
|
||||
extern s32 func_801F03C0(s32 ot, u8 *s, s16 c);
|
||||
extern s32 func_8005A600(s32, s32, s32, s32, s32);
|
||||
|
||||
s32 ot;
|
||||
Panel_801F1520 *s2;
|
||||
s16 n;
|
||||
s16 i;
|
||||
|
||||
ot = D_801151D0;
|
||||
s2 = D_80115134;
|
||||
|
||||
if (D_8011512C == 1 || D_8011512C == 2) {
|
||||
ot = (s32)func_801F1520((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_801F03C0(ot, (u8 *)(s2 + 5), 0);
|
||||
break;
|
||||
}
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
ot = func_801F03C0(ot, (u8 *)s2, i);
|
||||
s2 += 1;
|
||||
}
|
||||
|
||||
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_SC03_076/nonmatchings/md_SC03_076", func_801F0210);
|
||||
|
||||
typedef struct { s8 c[8]; } Blk8_8012C890_8017C348_801F03C0;
|
||||
typedef struct { s16 m[3][3]; s32 t[3]; } MTX_C974_801F03C0;
|
||||
@@ -448,7 +808,135 @@ s32 func_801F06B0(s32 a0, s16 a1, s16 a2, s16 a3, s32 *p) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/md_SC03_076/nonmatchings/md_SC03_076", func_801F0734);
|
||||
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 void *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) {
|
||||
((s32 *)D_801F9DBC)[i] = func_8002AF48(i);
|
||||
} else {
|
||||
((s32 *)D_801F9DBC)[i] = 0;
|
||||
}
|
||||
}
|
||||
if (((s32 *)D_801F9DBC)[0] == 0 && ((s32 *)D_801F9DBC)[1] == 0 && ((s32 *)D_801F9DBC)[2] == 0 &&
|
||||
((s32 *)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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void func_801F0A9C(void) {
|
||||
extern s32 D_801F9DB8;
|
||||
|
||||
@@ -283,9 +283,352 @@ 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);
|
||||
s32 func_801E2D34(void) {
|
||||
extern s16 D_80115126;
|
||||
extern s16 D_8011512C;
|
||||
extern s16 D_801EA954;
|
||||
extern s16 D_801EA958;
|
||||
extern s16 D_801EA95C;
|
||||
extern s16 func_8014168C(s16 a0);
|
||||
extern s32 D_801E63B0;
|
||||
extern s32 D_801E6448;
|
||||
extern s32 D_801E64E8;
|
||||
extern s32 D_801EAC3C;
|
||||
extern u32 D_801EAC40;
|
||||
extern s32 func_80014ED4(s32);
|
||||
extern s32 func_80015018(s32);
|
||||
extern void func_8002AF18(void);
|
||||
extern u16 D_8011511A;
|
||||
extern unsigned short D_80115118;
|
||||
extern u8 D_801EA960[];
|
||||
extern u8 D_801EAC47[];
|
||||
extern u8 D_801EAC4D;
|
||||
extern void func_8002AF70(void *, s32);
|
||||
extern s32 func_8002D4C8(s32, s32);
|
||||
extern void func_801E4890(void);
|
||||
extern void func_801E48B8(s32);
|
||||
|
||||
s32 *p;
|
||||
s32 *p2;
|
||||
u16 *ph;
|
||||
s16 *q;
|
||||
s32 pad;
|
||||
s32 flag;
|
||||
s32 st;
|
||||
s32 t;
|
||||
s32 t2;
|
||||
s32 sv;
|
||||
s32 x;
|
||||
s32 r;
|
||||
s32 unused[4];
|
||||
|
||||
flag = 0;
|
||||
pad = func_80014ED4(0);
|
||||
func_80015018(0);
|
||||
func_8014168C(D_8011511A);
|
||||
|
||||
if (pad & 0x40) {
|
||||
st = D_8011512C;
|
||||
switch (st) {
|
||||
case 1:
|
||||
if (D_80115126 == 0) {
|
||||
if (D_801EAC47[D_8011511A] == 1) {
|
||||
D_801E6448 = 0x19;
|
||||
} else {
|
||||
func_8002D4C8(0x472, 0);
|
||||
return 0;
|
||||
}
|
||||
} else if (D_801EAC47[D_8011511A] == 1) {
|
||||
D_801E6448 = 0x16;
|
||||
} else {
|
||||
D_801E6448 = 0x19;
|
||||
}
|
||||
D_8011512C = 2;
|
||||
func_8002D4C8(0x45D, 0);
|
||||
return 0;
|
||||
case 2:
|
||||
func_801E4890();
|
||||
if (D_80115126 == 0) {
|
||||
D_801E64E8 = 0x14;
|
||||
D_801EAC3C = 2;
|
||||
D_801EAC40 = D_8011511A - 1;
|
||||
} else {
|
||||
D_801EAC40 = D_8011511A - 1;
|
||||
func_801E48B8(1);
|
||||
func_8002AF70(D_801EA960, D_801EAC40);
|
||||
D_801E64E8 = 0xE;
|
||||
D_801EAC3C = 1;
|
||||
}
|
||||
D_8011512C = 3;
|
||||
func_8002D4C8(0x45D, 0);
|
||||
return 0;
|
||||
case 4:
|
||||
case 7:
|
||||
Lcheck47:
|
||||
if (D_80115118 < 0x47) {
|
||||
goto Lreset;
|
||||
}
|
||||
return 0;
|
||||
case 9:
|
||||
p = &D_801E6448;
|
||||
if (*p == 0x1D || *p == 0x21) {
|
||||
goto Lmsg473ret1;
|
||||
}
|
||||
D_801EA954 = 0;
|
||||
D_801EA95C = 1;
|
||||
D_8011512C = 0;
|
||||
*p = D_801E63B0;
|
||||
func_8002D4C8(0x45D, 0);
|
||||
return 0;
|
||||
case 5:
|
||||
goto Lload;
|
||||
case 0:
|
||||
case 3:
|
||||
case 6:
|
||||
case 8:
|
||||
case 10:
|
||||
case 11:
|
||||
case 12:
|
||||
break;
|
||||
default:
|
||||
goto Ltail;
|
||||
}
|
||||
return 0;
|
||||
} else if (pad & 0x10) {
|
||||
st = D_8011512C;
|
||||
switch (st) {
|
||||
case 0:
|
||||
if (D_801E6448 != 0xB) {
|
||||
return 0;
|
||||
}
|
||||
/* fallthrough */
|
||||
case 1:
|
||||
Lmsg473:
|
||||
func_8002D4C8(0x473, 0);
|
||||
t = D_801EA958;
|
||||
sv = t;
|
||||
if (t == 0) {
|
||||
return 1;
|
||||
}
|
||||
x = (t == 1) ? 0x1D : 0x21;
|
||||
r = 0;
|
||||
t = 9;
|
||||
D_8011512C = t;
|
||||
D_801E6448 = x;
|
||||
t = 0xFF;
|
||||
goto Lstore;
|
||||
case 2:
|
||||
if (D_80115126 == 0) {
|
||||
D_801E6448 = 0xC;
|
||||
} else {
|
||||
D_801E6448 = 0xD;
|
||||
}
|
||||
D_8011512C = 1;
|
||||
func_8002D4C8(0x473, 0);
|
||||
return 0;
|
||||
case 5:
|
||||
case 8:
|
||||
if (D_80115126 != 0) {
|
||||
goto Lmsg473;
|
||||
}
|
||||
Lmsg473ret1:
|
||||
func_8002D4C8(0x473, 0);
|
||||
return 1;
|
||||
case 9:
|
||||
p2 = &D_801E6448;
|
||||
if (*p2 == 0x1D || *p2 == 0x21) {
|
||||
if (D_801EA95C == 0) {
|
||||
*p2 = 0x1A;
|
||||
func_8002D4C8(0x45D, 0);
|
||||
return 0;
|
||||
}
|
||||
D_801EA954 = 0;
|
||||
D_8011512C = 0;
|
||||
*p2 = D_801E63B0;
|
||||
func_8002AF18();
|
||||
func_8002D4C8(0x45D, 0);
|
||||
return 0;
|
||||
}
|
||||
*p2 = (D_801EA958 == 1) ? 0x1D : 0x21;
|
||||
func_8002D4C8(0x473, 0);
|
||||
return 0;
|
||||
case 4:
|
||||
case 7:
|
||||
goto Lcheck47;
|
||||
case 3:
|
||||
case 6:
|
||||
case 10:
|
||||
case 11:
|
||||
case 12:
|
||||
break;
|
||||
default:
|
||||
goto Ltail;
|
||||
}
|
||||
return 0;
|
||||
} else if (pad & 0x20) {
|
||||
st = D_8011512C;
|
||||
if (st == 5) {
|
||||
D_801E64E8 = 0x17;
|
||||
D_8011512C = 6;
|
||||
func_8002D4C8(0x45D, 0);
|
||||
D_801EAC3C = 3;
|
||||
return 0;
|
||||
}
|
||||
goto Ltail;
|
||||
}
|
||||
Lload:
|
||||
st = D_8011512C;
|
||||
Ltail:
|
||||
if (st == 4 || st == 7 || st >= 10) {
|
||||
ph = &D_80115118;
|
||||
if (*ph != 0) {
|
||||
*ph = *ph - 1;
|
||||
goto Lmid;
|
||||
}
|
||||
Lreset:
|
||||
D_80115118 = 0;
|
||||
if (D_80115126 == 0) {
|
||||
if (D_8011512C == 4) {
|
||||
return -1;
|
||||
}
|
||||
D_801E6448 = 0xC;
|
||||
} else {
|
||||
t2 = D_801EA958;
|
||||
sv = t2;
|
||||
if (t2 != 0 && D_8011512C == 4) {
|
||||
t = (t2 == 1) ? 0x1D : 0x21;
|
||||
r = 0;
|
||||
D_801E6448 = t;
|
||||
t = 9;
|
||||
D_8011512C = t;
|
||||
t = 0xFF;
|
||||
Lstore:
|
||||
D_801EA954 = sv;
|
||||
D_801EAC4D = t;
|
||||
return r;
|
||||
}
|
||||
D_801E6448 = 0xD;
|
||||
q = &D_8011512C;
|
||||
if (*q == 0xC) {
|
||||
*q = 1;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
D_8011512C = 1;
|
||||
return 0;
|
||||
}
|
||||
Lmid:
|
||||
if (D_8011512C != 1) {
|
||||
return 0;
|
||||
}
|
||||
if (pad & 0x1000) {
|
||||
t = D_8011511A;
|
||||
D_8011511A = t - 2;
|
||||
flag = 1;
|
||||
if (D_8011511A == 0 || D_8011511A >= 5) {
|
||||
D_8011511A = t + 2;
|
||||
}
|
||||
}
|
||||
if (pad & 0x4000) {
|
||||
ph = &D_8011511A;
|
||||
t2 = *ph;
|
||||
*ph = t2 + 2;
|
||||
flag = 1;
|
||||
if (*ph >= 5) {
|
||||
*ph = t2 - 2;
|
||||
}
|
||||
}
|
||||
if (pad & 0x8000) {
|
||||
ph = &D_8011511A;
|
||||
t2 = *ph;
|
||||
*ph = t2 + 1;
|
||||
flag = 1;
|
||||
if (*ph & 1) {
|
||||
*ph = t2 - 1;
|
||||
}
|
||||
}
|
||||
if (pad & 0x2000) {
|
||||
ph = &D_8011511A;
|
||||
t2 = *ph;
|
||||
*ph = t2 - 1;
|
||||
flag = 1;
|
||||
if (!(*ph & 1)) {
|
||||
*ph = t2 + 1;
|
||||
}
|
||||
}
|
||||
r = flag;
|
||||
if (r) {
|
||||
func_8002D4C8(0x45A, 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
@@ -438,9 +781,365 @@ s32 func_801E3830(s32 arg0, s16 arg1, s16 arg2, s16 arg3, s32 *arg4) {
|
||||
|
||||
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 "common.h"
|
||||
|
||||
/* func_801E3C1C — md_SC03_135, 291 ins, switch on D_801EAC45 via jtbl_801E27FC
|
||||
* (9 entries + §8a pad word, bound `sltiu $v0,$v1,0x9`, entry[0] -> merge label
|
||||
* => §161a case-0-break).
|
||||
*
|
||||
* BANKING NOTE (banker: read before gating):
|
||||
* jtbl_801E27FC sits at island file offset 0x214 (vram 0x801E27FC, base
|
||||
* D_801E25E8@0x0). Per cookbook §260-A the md_* leading island is a STACK:
|
||||
* only the END-ADJACENT table converts. This module's island-end member
|
||||
* func_801E5358 was already peeled by the gate (commit commit:2664). Island
|
||||
* stack census (verified against each .s): jtbl_801E272C @0x144 (owner is
|
||||
* func_801E2D34 or func_801E3390 — both still INCLUDE_ASM stubs, TU :286/
|
||||
* :288), jtbl_801E27D4 @0x1EC (func_801E38B4, stub @TU :439), THIS table
|
||||
* @0x214, jtbl_801E2824 @0x23C (func_801E40A8, stub @TU :443). Every
|
||||
* matched-C function above :443 was read line-by-line: no switches. So the
|
||||
* ONLY later-stack owner above this table is func_801E40A8 — and after the
|
||||
* sibling peel ITS table is the current island end, i.e. convertible NOW;
|
||||
* one peel later this table becomes end-adjacent and converts. Class:
|
||||
* island-blocked, depth 1 — "convert as peels land".
|
||||
* REMEDY: bank func_801E40A8 first (same lane), then run
|
||||
* tools/jtbl_lane.py --targets func_801E3C1C@md_SC03_135 --draft-dir <dir>
|
||||
* (gate-time _jtbl_prep_one isolates -> island-splits -> carves; §81 chain,
|
||||
* §88d order). Proof shapes: func_801F218C@md_SC03_076 commit commit:2663
|
||||
* (covered), func_801E5358@md_SC03_135 commit commit:2664 (island-end).
|
||||
* DO NOT substitute a hand-emitted table or computed-goto dispatch: the
|
||||
* gate's covered/no-op path requires cc1 itself to emit this switch's
|
||||
* table (plain switch only).
|
||||
*
|
||||
* Body levers that ARE load-bearing (do not "clean up"):
|
||||
* - K&R int() signature: caller func_801E2BE0 (TU :216) uses implicit-int;
|
||||
* no prototype exists anywhere in the TU (INCLUDE_ASM expands to bare
|
||||
* __asm__), so void(void) hard-errors conflicting-types at splice.
|
||||
* VERIFIED EXHAUSTIVELY: grep over all 943 TU lines shows func_801E3C1C
|
||||
* at exactly TWO sites — the :216 call and the :441 stub. No file-scope
|
||||
* decl, no prototype, no address-take => the §138 splice-conflict class
|
||||
* (which cost func_801856A8 21 rounds) is excluded for this function.
|
||||
* - bare `return;`: caller discards; `return 0;` adds move $v0,$zero.
|
||||
* - ret lives across the switch ($s3), zeroed at entry.
|
||||
* - case 3 COMPONENT_REF via struct hack (lh test vs 0xC);
|
||||
* case 6 lhu + sign-ext pair; case 8 lh tests vs 0xB/3/4.
|
||||
* - fresh block-scoped q per &D_8011512C site (three distinct lui/addiu).
|
||||
* - D_801E64E8 declared s32 (its stores are sw despite s16 fleet majority).
|
||||
* - D_801EAC44 tu-verbatim u16[] accessed via (u8*) cast (byte copy loop).
|
||||
*/
|
||||
int func_801E3C1C() {
|
||||
extern s32 D_801EAC54;
|
||||
extern u32 D_801EAC3C;
|
||||
extern u8 D_801EAC45;
|
||||
extern u8 D_801EAC4D;
|
||||
extern u16 D_801EAC44[];
|
||||
extern u8 D_801EAC4C[];
|
||||
extern u8 D_801EAC48[];
|
||||
extern void *D_801EAC58[];
|
||||
extern s32 D_801EAC5C;
|
||||
extern s32 D_801EAC60;
|
||||
extern s32 D_801EAC64;
|
||||
extern s32 D_801E6448;
|
||||
extern s32 D_801E64E8;
|
||||
extern s16 D_8011512C;
|
||||
extern s16 D_80115118;
|
||||
extern u16 D_8011511A;
|
||||
extern u16 D_801150D4;
|
||||
extern void func_80029774(s32 a0);
|
||||
extern s32 func_8002D4C8(s32 a0, s32 a1);
|
||||
extern s32 func_8002AF48(s32 a0);
|
||||
extern s32 func_8002AF60(void);
|
||||
extern void func_801E40A8(void);
|
||||
|
||||
s32 ret;
|
||||
s16 i;
|
||||
s16 *p;
|
||||
|
||||
ret = 0;
|
||||
if (D_801EAC54 != 0) {
|
||||
if (D_801EAC54 == 1) {
|
||||
p = &D_8011512C;
|
||||
if (*p == 3) {
|
||||
if (D_801EAC45 == 8) {
|
||||
func_80029774(0);
|
||||
*p = 4;
|
||||
D_80115118 = 0x4B;
|
||||
D_801150D4 = 0;
|
||||
D_801E64E8 = 0xF;
|
||||
func_8002D4C8(0xB3B, 0);
|
||||
} else {
|
||||
*p = 0;
|
||||
}
|
||||
} else {
|
||||
if (D_801EAC45 == 6) {
|
||||
*p = 7;
|
||||
D_80115118 = 0x4B;
|
||||
D_801E64E8 = 0x18;
|
||||
} else {
|
||||
*p = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ((D_801EAC3C & 3) == 1) {
|
||||
D_8011512C = 0xB;
|
||||
D_801E64E8 = 0x12;
|
||||
} else {
|
||||
D_8011512C = 0xC;
|
||||
D_801E64E8 = 0x1C;
|
||||
}
|
||||
D_80115118 = 0x4B;
|
||||
}
|
||||
D_801EAC3C = 0;
|
||||
D_801EAC4D = 0xFF;
|
||||
}
|
||||
|
||||
if (D_8011512C == 0xB || D_8011512C == 0xC) {
|
||||
return;
|
||||
}
|
||||
if (D_801EAC45 == D_801EAC4D) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
D_801EAC4C[i] = ((u8 *)D_801EAC44)[i];
|
||||
}
|
||||
|
||||
switch (D_801EAC45) {
|
||||
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: {
|
||||
s16 *q = &D_8011512C;
|
||||
D_801150D4 = 0;
|
||||
if (((struct { s16 h; } *)q)->h != 0xC) {
|
||||
ret = 0x11;
|
||||
*q = 5;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
D_801150D4 = 0;
|
||||
D_8011512C = 8;
|
||||
ret = 0xB;
|
||||
break;
|
||||
case 5:
|
||||
D_8011512C = 8;
|
||||
ret = 0x10;
|
||||
break;
|
||||
case 6: {
|
||||
s16 *q = &D_8011512C;
|
||||
D_801150D4 = 0;
|
||||
if ((*q != 6) && (*q != 7) && (*q != 0xB)) {
|
||||
ret = 0xD;
|
||||
*q = 1;
|
||||
}
|
||||
for (i = 0; i < 4; i++) {
|
||||
((s32 *)D_801EAC58)[i] = 0;
|
||||
}
|
||||
D_8011511A = 1;
|
||||
func_801E40A8();
|
||||
break;
|
||||
}
|
||||
case 7:
|
||||
ret = 0xA;
|
||||
break;
|
||||
case 8: {
|
||||
s16 *q;
|
||||
if ((D_8011512C != 0xB) && (D_8011512C != 3) && (D_8011512C != 4)) {
|
||||
ret = 0xD;
|
||||
}
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (D_801EAC48[i] == 1) {
|
||||
((s32 *)D_801EAC58)[i] = func_8002AF48(i);
|
||||
} else {
|
||||
((s32 *)D_801EAC58)[i] = 0;
|
||||
}
|
||||
}
|
||||
q = &D_8011512C;
|
||||
if (*q == 0) {
|
||||
*q = 1;
|
||||
if ((u32)(D_801150D4 - 1) < 4) {
|
||||
D_8011511A = D_801150D4;
|
||||
} else {
|
||||
D_8011511A = (func_8002AF60() & 3) + 1;
|
||||
}
|
||||
if ((((s32 *)D_801EAC58)[0] == 0) && (((s32 *)D_801EAC58)[1] == 0) && (((s32 *)D_801EAC58)[2] == 0) &&
|
||||
(((s32 *)D_801EAC58)[3] == 0)) {
|
||||
D_801150D4 = 0;
|
||||
D_8011511A = 1;
|
||||
}
|
||||
}
|
||||
func_801E40A8();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ret != 0) {
|
||||
D_801E6448 = ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
typedef struct {
|
||||
char c[3];
|
||||
} Blk3_801E40A8;
|
||||
|
||||
extern char *strcpy(char *, const char *);
|
||||
extern u32 func_801E45C0(s32 a0, s32 a1);
|
||||
extern void func_801E4628(val, n, dst, flag);
|
||||
|
||||
extern void *D_801EAC58[]; /* status ptr per slot */
|
||||
extern void *D_801E6424[]; /* HUD prim ptr array per slot */
|
||||
extern char *D_801E632C[]; /* label strings */
|
||||
extern s32 D_801E65B8[]; /* level thresholds */
|
||||
extern u16 *D_801E6390[]; /* icon tables */
|
||||
extern char *D_801E634C;
|
||||
extern Blk3_801E40A8 D_801E26C0;
|
||||
|
||||
void func_801E40A8(void) {
|
||||
s16 k;
|
||||
s16 i;
|
||||
s16 j;
|
||||
u8 *p;
|
||||
void **arr;
|
||||
u32 a;
|
||||
u32 b;
|
||||
s32 r;
|
||||
s32 n;
|
||||
u16 *ico;
|
||||
|
||||
for (k = 0; k < 4; k++) {
|
||||
p = (u8 *)D_801EAC58[k];
|
||||
arr = (void **)D_801E6424[k];
|
||||
if (p != NULL) {
|
||||
for (i = 0; i < 7; i++) {
|
||||
strcpy((char *)arr[i], D_801E632C[i]);
|
||||
switch (i) {
|
||||
case 0:
|
||||
for (j = 0; j < 5; j++) {
|
||||
if (*(s16 *)(p + 8) < D_801E65B8[j]) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (p[0x4E] != 0) {
|
||||
j = (*(s32 *)p == 0) ? 0x1A : 0x1C;
|
||||
}
|
||||
*(s32 *)arr = j + 4;
|
||||
break;
|
||||
case 1:
|
||||
a = p[7];
|
||||
if (a >= 100) {
|
||||
a = 99;
|
||||
}
|
||||
b = p[6];
|
||||
if (b >= 60) {
|
||||
b = 59;
|
||||
}
|
||||
((void (*)(unsigned int, short, unsigned short *, short))func_801E4628)((func_801E45C0((u16)a, 0x18) | 0xB00000) |
|
||||
func_801E45C0(b, 0xC),
|
||||
5, (u8 *)arr[1] + 0x12, 0);
|
||||
break;
|
||||
case 2:
|
||||
a = *(u16 *)(p + 0x34);
|
||||
if (a >= 1000) {
|
||||
a = 999;
|
||||
}
|
||||
((void (*)(unsigned int, short, unsigned short *, short))func_801E4628)(func_801E45C0((u16)a, 0x14), 3, (u8 *)arr[2] + 8, 1);
|
||||
n = p[0x42];
|
||||
if (n >= 7) {
|
||||
n = 6;
|
||||
}
|
||||
ico = D_801E6390[n];
|
||||
*(u16 *)((u8 *)arr[2] + 0x10) = *ico++;
|
||||
*(u16 *)((u8 *)arr[2] + 0x12) = ico[0];
|
||||
*(u16 *)((u8 *)arr[2] + 0x14) = ico[1];
|
||||
a = p[0x39];
|
||||
if (a >= 0x18) {
|
||||
a = 0x17;
|
||||
}
|
||||
b = p[0x38];
|
||||
if (b >= 0x3C) {
|
||||
b = 0x3B;
|
||||
}
|
||||
((void (*)(unsigned int, short, unsigned short *, short))func_801E4628)((func_801E45C0((u16)a, 0x18) | 0xB00000) |
|
||||
func_801E45C0(b, 0xC),
|
||||
5, (u8 *)arr[2] + 0x18, 0);
|
||||
break;
|
||||
case 3:
|
||||
a = *(u16 *)(p + 0x3C);
|
||||
if (a >= 1000) {
|
||||
a = 999;
|
||||
}
|
||||
b = *(u16 *)(p + 0x3A);
|
||||
if (b >= 1000) {
|
||||
b = 999;
|
||||
}
|
||||
r = func_801E45C0((u16)a, 0x14);
|
||||
if (r == 0) {
|
||||
r = 0xD00000;
|
||||
}
|
||||
((void (*)(unsigned int, short, unsigned short *, short))func_801E4628)(r | (func_801E45C0(b, 4) | 0xC0000), 7, (u8 *)arr[3] + 6, 1);
|
||||
break;
|
||||
case 4:
|
||||
a = *(u16 *)(p + 0x40);
|
||||
if (a >= 1000) {
|
||||
a = 999;
|
||||
}
|
||||
b = *(u16 *)(p + 0x3E);
|
||||
if (b >= 1000) {
|
||||
b = 999;
|
||||
}
|
||||
r = func_801E45C0((u16)a, 0x14);
|
||||
if (r == 0) {
|
||||
r = 0xD00000;
|
||||
}
|
||||
((void (*)(unsigned int, short, unsigned short *, short))func_801E4628)(r | (func_801E45C0(b, 4) | 0xC0000), 7, (u8 *)arr[4] + 6, 1);
|
||||
break;
|
||||
case 5:
|
||||
a = *(u32 *)(p + 0x14);
|
||||
if (a > 99999) {
|
||||
a = 99999;
|
||||
}
|
||||
((void (*)(unsigned int, short, unsigned short *, short))func_801E4628)(func_801E45C0(a, 0xC), 5, (u8 *)arr[5] + 2, 1);
|
||||
break;
|
||||
case 6:
|
||||
a = *(u16 *)(p + 0xC);
|
||||
if (a >= 0x24) {
|
||||
a = 0x23;
|
||||
}
|
||||
r = func_801E45C0((u16)a, 0x18);
|
||||
if (r == 0) {
|
||||
r = 0xD000000;
|
||||
}
|
||||
((void (*)(unsigned int, short, unsigned short *, short))func_801E4628)(r, 2, (u8 *)arr[6] + 0x10, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < 7; i++) {
|
||||
if (i == 0) {
|
||||
*(s32 *)arr = 4;
|
||||
} else if (i == 1) {
|
||||
strcpy((char *)arr[i], D_801E632C[i]);
|
||||
} else if (i == 4) {
|
||||
strcpy((char *)arr[i], D_801E634C);
|
||||
} else {
|
||||
*(Blk3_801E40A8 *)arr[i] = D_801E26C0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135", func_801E40A8);
|
||||
|
||||
u32 func_801E45C0(s32 a0, s32 a1) {
|
||||
s32 t0;
|
||||
|
||||
@@ -294,9 +294,351 @@ INCLUDE_RODATA("asm/md_SC04_027/nonmatchings/md_SC04_027", D_801E7B28);
|
||||
|
||||
INCLUDE_RODATA("asm/md_SC04_027/nonmatchings/md_SC04_027", D_801E7C00);
|
||||
|
||||
INCLUDE_ASM("asm/md_SC04_027/nonmatchings/md_SC04_027", func_801E8274);
|
||||
extern s16 D_80115126;
|
||||
extern s16 D_8011512C;
|
||||
extern s16 D_801F2188;
|
||||
extern s16 D_801F218C;
|
||||
extern s16 D_801F2190;
|
||||
extern s16 func_8014168C(s16);
|
||||
extern s32 D_801EB918;
|
||||
extern void *D_801EB9B0;
|
||||
extern s32 D_801EBA50;
|
||||
extern s32 D_801F2470;
|
||||
extern s32 D_801F2474;
|
||||
extern s32 func_80014ED4(s32);
|
||||
extern s32 func_80015018(s32);
|
||||
extern void func_8002AF18(void);
|
||||
extern u16 D_8011511A;
|
||||
extern s16 D_80115118;
|
||||
extern u8 D_801F247B[];
|
||||
extern u8 D_801F2481;
|
||||
extern void func_8002AF70(void *, s32);
|
||||
extern s32 func_8002D4C8(s32, s32);
|
||||
extern void func_801E9DD0(void);
|
||||
extern void func_801E9DF8(s32);
|
||||
extern s8 D_801F2194;
|
||||
|
||||
s32 func_801E8274(void) {
|
||||
s32 *p;
|
||||
s32 *p2;
|
||||
u16 *ph;
|
||||
s16 *q;
|
||||
s32 pad;
|
||||
s32 flag;
|
||||
s32 st;
|
||||
s32 t;
|
||||
s32 t2;
|
||||
s32 sv;
|
||||
s32 x;
|
||||
s32 r;
|
||||
s32 unused[4];
|
||||
|
||||
flag = 0;
|
||||
pad = func_80014ED4(0);
|
||||
func_80015018(0);
|
||||
func_8014168C(D_8011511A);
|
||||
|
||||
if (pad & 0x40) {
|
||||
st = D_8011512C;
|
||||
switch (st) {
|
||||
case 1:
|
||||
if (D_80115126 == 0) {
|
||||
if (D_801F247B[D_8011511A] == 1) {
|
||||
D_801EB9B0 = (void *)0x19;
|
||||
} else {
|
||||
func_8002D4C8(0x472, 0);
|
||||
return 0;
|
||||
}
|
||||
} else if (D_801F247B[D_8011511A] == 1) {
|
||||
D_801EB9B0 = (void *)0x16;
|
||||
} else {
|
||||
D_801EB9B0 = (void *)0x19;
|
||||
}
|
||||
D_8011512C = 2;
|
||||
func_8002D4C8(0x45D, 0);
|
||||
return 0;
|
||||
case 2:
|
||||
func_801E9DD0();
|
||||
if (D_80115126 == 0) {
|
||||
D_801EBA50 = 0x14;
|
||||
D_801F2470 = 2;
|
||||
D_801F2474 = D_8011511A - 1;
|
||||
} else {
|
||||
D_801F2474 = D_8011511A - 1;
|
||||
func_801E9DF8(1);
|
||||
func_8002AF70(&D_801F2194, D_801F2474);
|
||||
D_801EBA50 = 0xE;
|
||||
D_801F2470 = 1;
|
||||
}
|
||||
D_8011512C = 3;
|
||||
func_8002D4C8(0x45D, 0);
|
||||
return 0;
|
||||
case 4:
|
||||
case 7:
|
||||
Lcheck47:
|
||||
if (*(u16 *)&D_80115118 < 0x47) {
|
||||
goto Lreset;
|
||||
}
|
||||
return 0;
|
||||
case 9:
|
||||
p = (s32 *)&D_801EB9B0;
|
||||
if (*p == 0x1D || *p == 0x21) {
|
||||
goto Lmsg473ret1;
|
||||
}
|
||||
D_801F2188 = 0;
|
||||
D_801F2190 = 1;
|
||||
D_8011512C = 0;
|
||||
*p = D_801EB918;
|
||||
func_8002D4C8(0x45D, 0);
|
||||
return 0;
|
||||
case 5:
|
||||
goto Lload;
|
||||
case 0:
|
||||
case 3:
|
||||
case 6:
|
||||
case 8:
|
||||
case 10:
|
||||
case 11:
|
||||
case 12:
|
||||
break;
|
||||
default:
|
||||
goto Ltail;
|
||||
}
|
||||
return 0;
|
||||
} else if (pad & 0x10) {
|
||||
st = D_8011512C;
|
||||
switch (st) {
|
||||
case 0:
|
||||
if (D_801EB9B0 != (void *)0xB) {
|
||||
return 0;
|
||||
}
|
||||
/* fallthrough */
|
||||
case 1:
|
||||
Lmsg473:
|
||||
func_8002D4C8(0x473, 0);
|
||||
t = D_801F218C;
|
||||
sv = t;
|
||||
if (t == 0) {
|
||||
return 1;
|
||||
}
|
||||
x = (t == 1) ? 0x1D : 0x21;
|
||||
r = 0;
|
||||
t = 9;
|
||||
D_8011512C = t;
|
||||
D_801EB9B0 = (void *)x;
|
||||
t = 0xFF;
|
||||
goto Lstore;
|
||||
case 2:
|
||||
if (D_80115126 == 0) {
|
||||
D_801EB9B0 = (void *)0xC;
|
||||
} else {
|
||||
D_801EB9B0 = (void *)0xD;
|
||||
}
|
||||
D_8011512C = 1;
|
||||
func_8002D4C8(0x473, 0);
|
||||
return 0;
|
||||
case 5:
|
||||
case 8:
|
||||
if (D_80115126 != 0) {
|
||||
goto Lmsg473;
|
||||
}
|
||||
Lmsg473ret1:
|
||||
func_8002D4C8(0x473, 0);
|
||||
return 1;
|
||||
case 9:
|
||||
p2 = (s32 *)&D_801EB9B0;
|
||||
if (*p2 == 0x1D || *p2 == 0x21) {
|
||||
if (D_801F2190 == 0) {
|
||||
*p2 = 0x1A;
|
||||
func_8002D4C8(0x45D, 0);
|
||||
return 0;
|
||||
}
|
||||
D_801F2188 = 0;
|
||||
D_8011512C = 0;
|
||||
*p2 = D_801EB918;
|
||||
func_8002AF18();
|
||||
func_8002D4C8(0x45D, 0);
|
||||
return 0;
|
||||
}
|
||||
*p2 = (D_801F218C == 1) ? 0x1D : 0x21;
|
||||
func_8002D4C8(0x473, 0);
|
||||
return 0;
|
||||
case 4:
|
||||
case 7:
|
||||
goto Lcheck47;
|
||||
case 3:
|
||||
case 6:
|
||||
case 10:
|
||||
case 11:
|
||||
case 12:
|
||||
break;
|
||||
default:
|
||||
goto Ltail;
|
||||
}
|
||||
return 0;
|
||||
} else if (pad & 0x20) {
|
||||
st = D_8011512C;
|
||||
if (st == 5) {
|
||||
D_801EBA50 = 0x17;
|
||||
D_8011512C = 6;
|
||||
func_8002D4C8(0x45D, 0);
|
||||
D_801F2470 = 3;
|
||||
return 0;
|
||||
}
|
||||
goto Ltail;
|
||||
}
|
||||
Lload:
|
||||
st = D_8011512C;
|
||||
Ltail:
|
||||
if (st == 4 || st == 7 || st >= 10) {
|
||||
ph = (u16 *)&D_80115118;
|
||||
if (*ph != 0) {
|
||||
*ph = *ph - 1;
|
||||
goto Lmid;
|
||||
}
|
||||
Lreset:
|
||||
*(u16 *)&D_80115118 = 0;
|
||||
if (D_80115126 == 0) {
|
||||
if (D_8011512C == 4) {
|
||||
return -1;
|
||||
}
|
||||
D_801EB9B0 = (void *)0xC;
|
||||
} else {
|
||||
t2 = D_801F218C;
|
||||
sv = t2;
|
||||
if (t2 != 0 && D_8011512C == 4) {
|
||||
t = (t2 == 1) ? 0x1D : 0x21;
|
||||
r = 0;
|
||||
D_801EB9B0 = (void *)t;
|
||||
t = 9;
|
||||
D_8011512C = t;
|
||||
t = 0xFF;
|
||||
Lstore:
|
||||
D_801F2188 = sv;
|
||||
D_801F2481 = t;
|
||||
return r;
|
||||
}
|
||||
D_801EB9B0 = (void *)0xD;
|
||||
q = &D_8011512C;
|
||||
if (*q == 0xC) {
|
||||
*q = 1;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
D_8011512C = 1;
|
||||
return 0;
|
||||
}
|
||||
Lmid:
|
||||
if (D_8011512C != 1) {
|
||||
return 0;
|
||||
}
|
||||
if (pad & 0x1000) {
|
||||
t = D_8011511A;
|
||||
D_8011511A = t - 2;
|
||||
flag = 1;
|
||||
if (D_8011511A == 0 || D_8011511A >= 5) {
|
||||
D_8011511A = t + 2;
|
||||
}
|
||||
}
|
||||
if (pad & 0x4000) {
|
||||
ph = &D_8011511A;
|
||||
t2 = *ph;
|
||||
*ph = t2 + 2;
|
||||
flag = 1;
|
||||
if (*ph >= 5) {
|
||||
*ph = t2 - 2;
|
||||
}
|
||||
}
|
||||
if (pad & 0x8000) {
|
||||
ph = &D_8011511A;
|
||||
t2 = *ph;
|
||||
*ph = t2 + 1;
|
||||
flag = 1;
|
||||
if (*ph & 1) {
|
||||
*ph = t2 - 1;
|
||||
}
|
||||
}
|
||||
if (pad & 0x2000) {
|
||||
ph = &D_8011511A;
|
||||
t2 = *ph;
|
||||
*ph = t2 - 1;
|
||||
flag = 1;
|
||||
if (!(*ph & 1)) {
|
||||
*ph = t2 + 1;
|
||||
}
|
||||
}
|
||||
r = flag;
|
||||
if (r) {
|
||||
func_8002D4C8(0x45A, 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void func_801E88D0(void) {
|
||||
typedef struct { u32 *ot; u32 pad[4]; } Env_801E9BE0; /* 0x14 stride */
|
||||
extern s32 D_801151D0;
|
||||
extern s16 D_8011512C;
|
||||
extern s32 D_80115134;
|
||||
extern s16 D_800B9A02;
|
||||
extern Env_801E9BE0 D_800AE7BC[];
|
||||
extern s32 *func_801E9BE0(s32 *);
|
||||
extern s32 func_801E8A80(s32, u8 *, s16);
|
||||
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_801E9BE0((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_801E8A80(ot, s2 + 0xA0, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
ot = func_801E8A80(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_SC04_027/nonmatchings/md_SC04_027", func_801E88D0);
|
||||
|
||||
typedef struct { s8 c[8]; } Blk8_8012C890_8017C348_801E8A80;
|
||||
typedef struct { s16 m[3][3]; s32 t[3]; } MTX_C974_801E8A80;
|
||||
@@ -454,11 +796,458 @@ end:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/md_SC04_027/nonmatchings/md_SC04_027", func_801E8DF4);
|
||||
void func_801E8DF4(void) {
|
||||
extern s32 D_801F2488;
|
||||
extern s16 D_8011512C;
|
||||
extern u8 D_801F2479;
|
||||
extern void func_8002B00C(void *);
|
||||
extern void func_801E9DF8(s32);
|
||||
extern void func_80029774(s32);
|
||||
extern s16 D_80115118;
|
||||
extern s32 D_801EBA50;
|
||||
extern s16 D_801150D4;
|
||||
extern s32 func_8002D4C8(s32, s32);
|
||||
extern u16 D_8011511A;
|
||||
extern s32 D_801F2470;
|
||||
extern u8 D_801F2481;
|
||||
extern u8 D_801F2478[];
|
||||
extern u8 D_801F2480[];
|
||||
extern u8 D_801F247C[];
|
||||
extern u8 D_801F247D;
|
||||
extern u8 D_801F247E;
|
||||
extern u8 D_801F247F;
|
||||
extern s32 D_801F248C[];
|
||||
extern s32 D_801F2490;
|
||||
extern s32 D_801F2494;
|
||||
extern s32 D_801F2498;
|
||||
extern s32 func_8002AF48(s32);
|
||||
extern s32 func_8002AF60(void);
|
||||
extern void func_801E95E8(void);
|
||||
extern void *D_801EB9B0;
|
||||
extern s8 D_801F2194;
|
||||
|
||||
INCLUDE_ASM("asm/md_SC04_027/nonmatchings/md_SC04_027", func_801E915C);
|
||||
s32 ret;
|
||||
short i;
|
||||
|
||||
ret = 0;
|
||||
if (D_801F2488 != 0) {
|
||||
if (D_801F2488 == 1) {
|
||||
s16 *p = &D_8011512C;
|
||||
|
||||
if (*p == 3 && D_801F2479 == 8) {
|
||||
func_8002B00C(&D_801F2194);
|
||||
func_801E9DF8(0);
|
||||
func_80029774(0);
|
||||
*p = 4;
|
||||
D_80115118 = 0x4B;
|
||||
D_801EBA50 = 0x15;
|
||||
D_801150D4 = D_8011511A;
|
||||
func_8002D4C8(0xB3B, 0);
|
||||
} else {
|
||||
*p = 0;
|
||||
}
|
||||
} else {
|
||||
D_8011512C = 0xA;
|
||||
D_801EBA50 = 0x1B;
|
||||
D_80115118 = 0x4B;
|
||||
D_801F2470 = 0;
|
||||
return;
|
||||
}
|
||||
D_801F2470 = 0;
|
||||
D_801F2481 = 0xFF;
|
||||
}
|
||||
|
||||
if (D_8011512C == 4) {
|
||||
return;
|
||||
}
|
||||
__asm__ __volatile__("");
|
||||
if (D_8011512C == 0xA) {
|
||||
return;
|
||||
}
|
||||
if (D_801F2479 == D_801F2481) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
D_801F2480[i] = D_801F2478[i];
|
||||
}
|
||||
|
||||
switch (D_801F2479) {
|
||||
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_801F247C[0] | D_801F247D | D_801F247E | D_801F247F) == 0) {
|
||||
goto reset_state;
|
||||
}
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (D_801F247C[i] == 1) {
|
||||
D_801F248C[i] = func_8002AF48(i);
|
||||
} else {
|
||||
D_801F248C[i] = 0;
|
||||
}
|
||||
}
|
||||
if (D_801F248C[0] == 0 && D_801F248C[1] == 0 && D_801F248C[2] == 0 &&
|
||||
D_801F248C[3] == 0) {
|
||||
goto reset_state;
|
||||
}
|
||||
D_8011512C = 1;
|
||||
D_8011511A = (func_8002AF60() & 3) + 1;
|
||||
func_801E95E8();
|
||||
break;
|
||||
}
|
||||
|
||||
if (ret != 0) {
|
||||
D_801EB9B0 = (void *)ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void func_801E915C(void) {
|
||||
extern s32 D_801F2488;
|
||||
extern s32 D_801F2470;
|
||||
extern u8 D_801F2478[];
|
||||
extern u8 D_801F2479;
|
||||
extern u8 D_801F247C[];
|
||||
extern u8 D_801F2480[];
|
||||
extern u8 D_801F2481;
|
||||
extern s32 D_801F248C[];
|
||||
extern s32 D_801F2490;
|
||||
extern s32 D_801F2494;
|
||||
extern s32 D_801F2498;
|
||||
extern s16 D_8011512C;
|
||||
extern s16 D_80115118;
|
||||
extern u16 D_8011511A;
|
||||
extern u16 D_801150D4;
|
||||
extern s32 D_801EBA50;
|
||||
extern void *D_801EB9B0;
|
||||
extern void func_80029774(s32 a0);
|
||||
extern s32 func_8002D4C8(s32 a0, s32 a1);
|
||||
extern s32 func_8002AF48(s32 a0);
|
||||
extern s32 func_8002AF60(void);
|
||||
extern void func_801E95E8(void);
|
||||
|
||||
s32 ret;
|
||||
s16 i;
|
||||
s16 *p;
|
||||
|
||||
ret = 0;
|
||||
if (D_801F2488 != 0) {
|
||||
if (D_801F2488 == 1) {
|
||||
p = &D_8011512C;
|
||||
if (*p == 3) {
|
||||
if (D_801F2479 == 8) {
|
||||
func_80029774(0);
|
||||
*p = 4;
|
||||
D_80115118 = 0x4B;
|
||||
D_801150D4 = 0;
|
||||
D_801EBA50 = 0xF;
|
||||
func_8002D4C8(0xB3B, 0);
|
||||
} else {
|
||||
*p = 0;
|
||||
}
|
||||
} else {
|
||||
if (D_801F2479 == 6) {
|
||||
*p = 7;
|
||||
D_80115118 = 0x4B;
|
||||
D_801EBA50 = 0x18;
|
||||
} else {
|
||||
*p = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ((D_801F2470 & 3) == 1) {
|
||||
D_8011512C = 0xB;
|
||||
D_801EBA50 = 0x12;
|
||||
} else {
|
||||
D_8011512C = 0xC;
|
||||
D_801EBA50 = 0x1C;
|
||||
}
|
||||
D_80115118 = 0x4B;
|
||||
}
|
||||
D_801F2470 = 0;
|
||||
D_801F2481 = 0xFF;
|
||||
}
|
||||
|
||||
if (D_8011512C == 0xB || D_8011512C == 0xC) {
|
||||
return;
|
||||
}
|
||||
if (D_801F2479 == D_801F2481) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
D_801F2480[i] = D_801F2478[i];
|
||||
}
|
||||
|
||||
switch (D_801F2479) {
|
||||
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: {
|
||||
s16 *q = &D_8011512C;
|
||||
D_801150D4 = 0;
|
||||
if (((struct { s16 h; } *)q)->h != 0xC) {
|
||||
ret = 0x11;
|
||||
*q = 5;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
D_801150D4 = 0;
|
||||
D_8011512C = 8;
|
||||
ret = 0xB;
|
||||
break;
|
||||
case 5:
|
||||
D_8011512C = 8;
|
||||
ret = 0x10;
|
||||
break;
|
||||
case 6: {
|
||||
s16 *q = &D_8011512C;
|
||||
D_801150D4 = 0;
|
||||
if ((*q != 6) && (*q != 7) && (*q != 0xB)) {
|
||||
ret = 0xD;
|
||||
*q = 1;
|
||||
}
|
||||
for (i = 0; i < 4; i++) {
|
||||
D_801F248C[i] = 0;
|
||||
}
|
||||
D_8011511A = 1;
|
||||
func_801E95E8();
|
||||
break;
|
||||
}
|
||||
case 7:
|
||||
ret = 0xA;
|
||||
break;
|
||||
case 8: {
|
||||
s16 *q;
|
||||
if ((D_8011512C != 0xB) && (D_8011512C != 3) && (D_8011512C != 4)) {
|
||||
ret = 0xD;
|
||||
}
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (D_801F247C[i] == 1) {
|
||||
D_801F248C[i] = func_8002AF48(i);
|
||||
} else {
|
||||
D_801F248C[i] = 0;
|
||||
}
|
||||
}
|
||||
q = &D_8011512C;
|
||||
if (*q == 0) {
|
||||
*q = 1;
|
||||
if ((u32)(D_801150D4 - 1) < 4) {
|
||||
D_8011511A = D_801150D4;
|
||||
} else {
|
||||
D_8011511A = (func_8002AF60() & 3) + 1;
|
||||
}
|
||||
if ((D_801F248C[0] == 0) && (D_801F2490 == 0) && (D_801F2494 == 0) &&
|
||||
(D_801F2498 == 0)) {
|
||||
D_801150D4 = 0;
|
||||
D_8011511A = 1;
|
||||
}
|
||||
}
|
||||
func_801E95E8();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ret != 0) {
|
||||
D_801EB9B0 = (void *)ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
typedef struct {
|
||||
char c[3];
|
||||
} Blk3_801E95E8;
|
||||
|
||||
extern char *strcpy(char *, const char *);
|
||||
extern u32 func_801E9B00(s32 a0, s32 a1);
|
||||
extern void func_801E9B68(unsigned int val, short n, unsigned short *dst, short flag);
|
||||
|
||||
extern void *D_801F248C[]; /* status ptr per slot */
|
||||
extern void *D_801EB98C[]; /* HUD prim ptr array per slot */
|
||||
extern char *D_801EB894[]; /* label strings */
|
||||
extern s32 D_801EBB20[]; /* level thresholds */
|
||||
extern u16 *D_801EB8F8[]; /* icon tables */
|
||||
extern char *D_801EB8B4;
|
||||
extern Blk3_801E95E8 D_801E7C00;
|
||||
|
||||
void func_801E95E8(void) {
|
||||
s16 k;
|
||||
s16 i;
|
||||
s16 j;
|
||||
u8 *p;
|
||||
void **arr;
|
||||
u32 a;
|
||||
u32 b;
|
||||
s32 r;
|
||||
s32 n;
|
||||
u16 *ico;
|
||||
|
||||
for (k = 0; k < 4; k++) {
|
||||
p = (u8 *)D_801F248C[k];
|
||||
arr = (void **)D_801EB98C[k];
|
||||
if (p != NULL) {
|
||||
for (i = 0; i < 7; i++) {
|
||||
strcpy((char *)arr[i], D_801EB894[i]);
|
||||
switch (i) {
|
||||
case 0:
|
||||
for (j = 0; j < 5; j++) {
|
||||
if (*(s16 *)(p + 8) < D_801EBB20[j]) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (p[0x4E] != 0) {
|
||||
j = (*(s32 *)p == 0) ? 0x1A : 0x1C;
|
||||
}
|
||||
*(s32 *)arr = j + 4;
|
||||
break;
|
||||
case 1:
|
||||
a = p[7];
|
||||
if (a >= 100) {
|
||||
a = 99;
|
||||
}
|
||||
b = p[6];
|
||||
if (b >= 60) {
|
||||
b = 59;
|
||||
}
|
||||
func_801E9B68((func_801E9B00((u16)a, 0x18) | 0xB00000) |
|
||||
func_801E9B00(b, 0xC),
|
||||
5, (unsigned short *)((u8 *)arr[1] + 0x12), 0);
|
||||
break;
|
||||
case 2:
|
||||
a = *(u16 *)(p + 0x34);
|
||||
if (a >= 1000) {
|
||||
a = 999;
|
||||
}
|
||||
func_801E9B68(func_801E9B00((u16)a, 0x14), 3,
|
||||
(unsigned short *)((u8 *)arr[2] + 8), 1);
|
||||
n = p[0x42];
|
||||
if (n >= 7) {
|
||||
n = 6;
|
||||
}
|
||||
ico = D_801EB8F8[n];
|
||||
*(u16 *)((u8 *)arr[2] + 0x10) = *ico++;
|
||||
*(u16 *)((u8 *)arr[2] + 0x12) = ico[0];
|
||||
*(u16 *)((u8 *)arr[2] + 0x14) = ico[1];
|
||||
a = p[0x39];
|
||||
if (a >= 0x18) {
|
||||
a = 0x17;
|
||||
}
|
||||
b = p[0x38];
|
||||
if (b >= 0x3C) {
|
||||
b = 0x3B;
|
||||
}
|
||||
func_801E9B68((func_801E9B00((u16)a, 0x18) | 0xB00000) |
|
||||
func_801E9B00(b, 0xC),
|
||||
5, (unsigned short *)((u8 *)arr[2] + 0x18), 0);
|
||||
break;
|
||||
case 3:
|
||||
a = *(u16 *)(p + 0x3C);
|
||||
if (a >= 1000) {
|
||||
a = 999;
|
||||
}
|
||||
b = *(u16 *)(p + 0x3A);
|
||||
if (b >= 1000) {
|
||||
b = 999;
|
||||
}
|
||||
r = func_801E9B00((u16)a, 0x14);
|
||||
if (r == 0) {
|
||||
r = 0xD00000;
|
||||
}
|
||||
func_801E9B68(r | (func_801E9B00(b, 4) | 0xC0000), 7,
|
||||
(unsigned short *)((u8 *)arr[3] + 6), 1);
|
||||
break;
|
||||
case 4:
|
||||
a = *(u16 *)(p + 0x40);
|
||||
if (a >= 1000) {
|
||||
a = 999;
|
||||
}
|
||||
b = *(u16 *)(p + 0x3E);
|
||||
if (b >= 1000) {
|
||||
b = 999;
|
||||
}
|
||||
r = func_801E9B00((u16)a, 0x14);
|
||||
if (r == 0) {
|
||||
r = 0xD00000;
|
||||
}
|
||||
func_801E9B68(r | (func_801E9B00(b, 4) | 0xC0000), 7,
|
||||
(unsigned short *)((u8 *)arr[4] + 6), 1);
|
||||
break;
|
||||
case 5:
|
||||
a = *(u32 *)(p + 0x14);
|
||||
if (a > 99999) {
|
||||
a = 99999;
|
||||
}
|
||||
func_801E9B68(func_801E9B00(a, 0xC), 5,
|
||||
(unsigned short *)((u8 *)arr[5] + 2), 1);
|
||||
break;
|
||||
case 6:
|
||||
a = *(u16 *)(p + 0xC);
|
||||
if (a >= 0x24) {
|
||||
a = 0x23;
|
||||
}
|
||||
r = func_801E9B00((u16)a, 0x18);
|
||||
if (r == 0) {
|
||||
r = 0xD000000;
|
||||
}
|
||||
func_801E9B68(r, 2, (unsigned short *)((u8 *)arr[6] + 0x10), 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < 7; i++) {
|
||||
if (i == 0) {
|
||||
*(s32 *)arr = 4;
|
||||
} else if (i == 1) {
|
||||
strcpy((char *)arr[i], D_801EB894[i]);
|
||||
} else if (i == 4) {
|
||||
strcpy((char *)arr[i], D_801EB8B4);
|
||||
} else {
|
||||
*(Blk3_801E95E8 *)arr[i] = D_801E7C00;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/md_SC04_027/nonmatchings/md_SC04_027", func_801E95E8);
|
||||
|
||||
u32 func_801E9B00(s32 a0, s32 a1) {
|
||||
s32 t0;
|
||||
|
||||
@@ -300,7 +300,73 @@ INCLUDE_RODATA("asm/md_SC05_026/nonmatchings/md_SC05_026", D_801EDA60);
|
||||
|
||||
INCLUDE_ASM("asm/md_SC05_026/nonmatchings/md_SC05_026", func_801EE0D4);
|
||||
|
||||
INCLUDE_ASM("asm/md_SC05_026/nonmatchings/md_SC05_026", func_801EE730);
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
typedef struct { s8 c[8]; } Blk8_8012C890_8017C348_801EE8E0;
|
||||
typedef struct { s16 m[3][3]; s32 t[3]; } MTX_C974_801EE8E0;
|
||||
@@ -459,11 +525,406 @@ end:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/md_SC05_026/nonmatchings/md_SC05_026", func_801EEC54);
|
||||
s32 func_801EEC54(void)
|
||||
{
|
||||
extern s32 D_801F8310;
|
||||
extern s16 D_8011512C;
|
||||
extern u8 D_801F8301;
|
||||
extern u8 D_801F8300[];
|
||||
extern s16 D_80115118;
|
||||
extern u16 D_8011511A;
|
||||
extern s32 D_801F18D8;
|
||||
extern s16 D_801150D4;
|
||||
extern s32 D_801F82F8;
|
||||
extern u8 D_801F8309;
|
||||
extern u8 D_801F8308[];
|
||||
extern u8 D_801F8304[];
|
||||
extern u8 D_801F8305;
|
||||
extern u8 D_801F8306;
|
||||
extern u8 D_801F8307;
|
||||
extern s32 D_801F8314[];
|
||||
extern s32 D_801F1838;
|
||||
extern char D_801F801C;
|
||||
extern void func_8002B00C(void *);
|
||||
extern void func_801EFC58(s32);
|
||||
extern void func_80029774(s32);
|
||||
extern s32 func_8002D4C8(s32, s32);
|
||||
extern s32 func_8002AF48(s32);
|
||||
extern s32 func_8002AF60(void);
|
||||
extern void func_801EF448(void);
|
||||
|
||||
INCLUDE_ASM("asm/md_SC05_026/nonmatchings/md_SC05_026", func_801EEFBC);
|
||||
s32 ret;
|
||||
short i;
|
||||
|
||||
ret = 0;
|
||||
if (D_801F8310 != 0) {
|
||||
if (D_801F8310 == 1) {
|
||||
s16 *p = &D_8011512C;
|
||||
|
||||
if (*p == 3 && D_801F8301 == 8) {
|
||||
func_8002B00C(&D_801F801C);
|
||||
func_801EFC58(0);
|
||||
func_80029774(0);
|
||||
*p = 4;
|
||||
D_80115118 = 0x4B;
|
||||
D_801F18D8 = 0x15;
|
||||
D_801150D4 = D_8011511A;
|
||||
func_8002D4C8(0xB3B, 0);
|
||||
} else {
|
||||
*p = 0;
|
||||
}
|
||||
} else {
|
||||
D_8011512C = 0xA;
|
||||
D_801F18D8 = 0x1B;
|
||||
D_80115118 = 0x4B;
|
||||
D_801F82F8 = 0;
|
||||
return;
|
||||
}
|
||||
D_801F82F8 = 0;
|
||||
D_801F8309 = 0xFF;
|
||||
}
|
||||
|
||||
if (D_8011512C == 4 || D_8011512C == 0xA) {
|
||||
return;
|
||||
}
|
||||
if (D_801F8301 == D_801F8309) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
D_801F8308[i] = D_801F8300[i];
|
||||
}
|
||||
|
||||
switch (D_801F8301) {
|
||||
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_801F8304[0] | D_801F8305 | D_801F8306 | D_801F8307) == 0) {
|
||||
goto reset_state;
|
||||
}
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (D_801F8304[i] == 1) {
|
||||
D_801F8314[i] = func_8002AF48(i);
|
||||
} else {
|
||||
D_801F8314[i] = 0;
|
||||
}
|
||||
}
|
||||
if (D_801F8314[0] == 0 && D_801F8314[1] == 0 && D_801F8314[2] == 0 &&
|
||||
D_801F8314[3] == 0) {
|
||||
goto reset_state;
|
||||
}
|
||||
D_8011512C = 1;
|
||||
D_8011511A = (func_8002AF60() & 3) + 1;
|
||||
func_801EF448();
|
||||
break;
|
||||
}
|
||||
|
||||
if (ret != 0) {
|
||||
D_801F1838 = ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void func_801EEFBC(void) {
|
||||
extern s32 D_801F8310;
|
||||
extern s32 D_801F82F8;
|
||||
extern u8 D_801F8301;
|
||||
extern u8 D_801F8309;
|
||||
extern u8 D_801F8300[];
|
||||
extern u8 D_801F8308[];
|
||||
extern u8 D_801F8304[];
|
||||
extern s32 D_801F8314[];
|
||||
extern s32 D_801F8318;
|
||||
extern s32 D_801F831C;
|
||||
extern s32 D_801F8320;
|
||||
extern s16 D_8011512C;
|
||||
extern s16 D_80115118;
|
||||
extern u16 D_8011511A;
|
||||
extern u16 D_801150D4;
|
||||
extern s32 D_801F18D8;
|
||||
extern s32 D_801F1838;
|
||||
extern void func_80029774(s32 a0);
|
||||
extern s32 func_8002AF48(s32 a0);
|
||||
extern s32 func_8002AF60(void);
|
||||
extern s32 func_8002D4C8(s32 a0, s32 a1);
|
||||
extern void func_801EF448(void);
|
||||
|
||||
s32 ret;
|
||||
s16 i;
|
||||
s16 *p;
|
||||
|
||||
ret = 0;
|
||||
if (D_801F8310 != 0) {
|
||||
if (D_801F8310 == 1) {
|
||||
p = &D_8011512C;
|
||||
if (*p == 3) {
|
||||
if (D_801F8301 == 8) {
|
||||
func_80029774(0);
|
||||
*p = 4;
|
||||
D_80115118 = 0x4B;
|
||||
D_801150D4 = 0;
|
||||
D_801F18D8 = 0xF;
|
||||
func_8002D4C8(0xB3B, 0);
|
||||
} else {
|
||||
*p = 0;
|
||||
}
|
||||
} else {
|
||||
if (D_801F8301 == 6) {
|
||||
*p = 7;
|
||||
D_80115118 = 0x4B;
|
||||
D_801F18D8 = 0x18;
|
||||
} else {
|
||||
*p = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ((D_801F82F8 & 3) == 1) {
|
||||
D_8011512C = 0xB;
|
||||
D_801F18D8 = 0x12;
|
||||
} else {
|
||||
D_8011512C = 0xC;
|
||||
D_801F18D8 = 0x1C;
|
||||
}
|
||||
D_80115118 = 0x4B;
|
||||
}
|
||||
D_801F82F8 = 0;
|
||||
D_801F8309 = 0xFF;
|
||||
}
|
||||
|
||||
if (D_8011512C == 0xB || D_8011512C == 0xC) {
|
||||
return;
|
||||
}
|
||||
if (D_801F8301 == D_801F8309) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
D_801F8308[i] = D_801F8300[i];
|
||||
}
|
||||
|
||||
switch (D_801F8301) {
|
||||
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: {
|
||||
s16 *q = &D_8011512C;
|
||||
D_801150D4 = 0;
|
||||
if (((struct { s16 h; } *)q)->h != 0xC) {
|
||||
ret = 0x11;
|
||||
*q = 5;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
D_801150D4 = 0;
|
||||
D_8011512C = 8;
|
||||
ret = 0xB;
|
||||
break;
|
||||
case 5:
|
||||
D_8011512C = 8;
|
||||
ret = 0x10;
|
||||
break;
|
||||
case 6: {
|
||||
s16 *q = &D_8011512C;
|
||||
D_801150D4 = 0;
|
||||
if ((*q != 6) && (*q != 7) && (*q != 0xB)) {
|
||||
ret = 0xD;
|
||||
*q = 1;
|
||||
}
|
||||
for (i = 0; i < 4; i++) {
|
||||
D_801F8314[i] = 0;
|
||||
}
|
||||
D_8011511A = 1;
|
||||
func_801EF448();
|
||||
break;
|
||||
}
|
||||
case 7:
|
||||
ret = 0xA;
|
||||
break;
|
||||
case 8: {
|
||||
s16 *q;
|
||||
if ((D_8011512C != 0xB) && (D_8011512C != 3) && (D_8011512C != 4)) {
|
||||
ret = 0xD;
|
||||
}
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (D_801F8304[i] == 1) {
|
||||
D_801F8314[i] = func_8002AF48(i);
|
||||
} else {
|
||||
D_801F8314[i] = 0;
|
||||
}
|
||||
}
|
||||
q = &D_8011512C;
|
||||
if (*q == 0) {
|
||||
*q = 1;
|
||||
if ((u32)(D_801150D4 - 1) < 4) {
|
||||
D_8011511A = D_801150D4;
|
||||
} else {
|
||||
D_8011511A = (func_8002AF60() & 3) + 1;
|
||||
}
|
||||
if ((D_801F8314[0] == 0) && (D_801F8314[1] == 0) && (D_801F8314[2] == 0) &&
|
||||
(D_801F8314[3] == 0)) {
|
||||
D_801150D4 = 0;
|
||||
D_8011511A = 1;
|
||||
}
|
||||
}
|
||||
func_801EF448();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ret != 0) {
|
||||
D_801F1838 = ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
typedef struct { char c[3]; } Blk3_801EF448;
|
||||
|
||||
extern char *strcpy(char *, const char *);
|
||||
extern u32 func_801EF960(s32 a0, s32 a1);
|
||||
extern void func_801EF9C8();
|
||||
|
||||
extern void *D_801F8314[];
|
||||
extern void *D_801F1814[];
|
||||
extern char *D_801F171C[];
|
||||
extern s32 D_801F19A8[];
|
||||
extern u16 *D_801F1780[];
|
||||
extern char *D_801F173C;
|
||||
extern Blk3_801EF448 D_801EDA60;
|
||||
|
||||
void func_801EF448(void) {
|
||||
s16 k; s16 i; s16 j;
|
||||
u8 *p;
|
||||
void **arr;
|
||||
u32 a; u32 b;
|
||||
s32 r; s32 n;
|
||||
u16 *ico;
|
||||
|
||||
for (k = 0; k < 4; k++) {
|
||||
p = (u8 *)D_801F8314[k];
|
||||
arr = (void **)D_801F1814[k];
|
||||
if (p != NULL) {
|
||||
for (i = 0; i < 7; i++) {
|
||||
strcpy((char *)arr[i], D_801F171C[i]);
|
||||
switch (i) {
|
||||
case 0:
|
||||
for (j = 0; j < 5; j++) {
|
||||
if (*(s16 *)(p + 8) < D_801F19A8[j]) break;
|
||||
}
|
||||
if (p[0x4E] != 0) {
|
||||
j = (*(s32 *)p == 0) ? 0x1A : 0x1C;
|
||||
}
|
||||
*(s32 *)arr = j + 4;
|
||||
break;
|
||||
case 1:
|
||||
a = p[7];
|
||||
if (a >= 100) a = 99;
|
||||
b = p[6];
|
||||
if (b >= 60) b = 59;
|
||||
func_801EF9C8((func_801EF960((u16)a, 0x18) | 0xB00000) | func_801EF960(b, 0xC), 5, (u8 *)arr[1] + 0x12, 0);
|
||||
break;
|
||||
case 2:
|
||||
a = *(u16 *)(p + 0x34);
|
||||
if (a >= 1000) a = 999;
|
||||
func_801EF9C8(func_801EF960((u16)a, 0x14), 3, (u8 *)arr[2] + 8, 1);
|
||||
n = p[0x42];
|
||||
if (n >= 7) n = 6;
|
||||
ico = D_801F1780[n];
|
||||
*(u16 *)((u8 *)arr[2] + 0x10) = *ico++;
|
||||
*(u16 *)((u8 *)arr[2] + 0x12) = ico[0];
|
||||
*(u16 *)((u8 *)arr[2] + 0x14) = ico[1];
|
||||
a = p[0x39];
|
||||
if (a >= 0x18) a = 0x17;
|
||||
b = p[0x38];
|
||||
if (b >= 0x3C) b = 0x3B;
|
||||
func_801EF9C8((func_801EF960((u16)a, 0x18) | 0xB00000) | func_801EF960(b, 0xC), 5, (u8 *)arr[2] + 0x18, 0);
|
||||
break;
|
||||
case 3:
|
||||
a = *(u16 *)(p + 0x3C);
|
||||
if (a >= 1000) a = 999;
|
||||
b = *(u16 *)(p + 0x3A);
|
||||
if (b >= 1000) b = 999;
|
||||
r = func_801EF960((u16)a, 0x14);
|
||||
if (r == 0) r = 0xD00000;
|
||||
func_801EF9C8(r | (func_801EF960(b, 4) | 0xC0000), 7, (u8 *)arr[3] + 6, 1);
|
||||
break;
|
||||
case 4:
|
||||
a = *(u16 *)(p + 0x40);
|
||||
if (a >= 1000) a = 999;
|
||||
b = *(u16 *)(p + 0x3E);
|
||||
if (b >= 1000) b = 999;
|
||||
r = func_801EF960((u16)a, 0x14);
|
||||
if (r == 0) r = 0xD00000;
|
||||
func_801EF9C8(r | (func_801EF960(b, 4) | 0xC0000), 7, (u8 *)arr[4] + 6, 1);
|
||||
break;
|
||||
case 5:
|
||||
a = *(u32 *)(p + 0x14);
|
||||
if (a > 99999) a = 99999;
|
||||
func_801EF9C8(func_801EF960(a, 0xC), 5, (u8 *)arr[5] + 2, 1);
|
||||
break;
|
||||
case 6:
|
||||
a = *(u16 *)(p + 0xC);
|
||||
if (a >= 0x24) a = 0x23;
|
||||
r = func_801EF960((u16)a, 0x18);
|
||||
if (r == 0) r = 0xD000000;
|
||||
func_801EF9C8(r, 2, (u8 *)arr[6] + 0x10, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < 7; i++) {
|
||||
if (i == 0) {
|
||||
*(s32 *)arr = 4;
|
||||
} else if (i == 1) {
|
||||
strcpy((char *)arr[i], D_801F171C[i]);
|
||||
} else if (i == 4) {
|
||||
strcpy((char *)arr[i], D_801F173C);
|
||||
} else {
|
||||
*(Blk3_801EF448 *)arr[i] = D_801EDA60;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/md_SC05_026/nonmatchings/md_SC05_026", func_801EF448);
|
||||
|
||||
u32 func_801EF960(s32 a0, s32 a1) {
|
||||
s32 t0;
|
||||
|
||||
@@ -666,7 +666,75 @@ void func_801A16BC(s32 arg0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/md_SC07_003/nonmatchings/md_SC07_003", func_801A1724);
|
||||
#include "common.h"
|
||||
|
||||
extern s32 func_801A19C8(s32 a0);
|
||||
extern s32 func_80153BD8(s32 a0);
|
||||
extern void func_801A1924(s32 a0);
|
||||
extern void func_8012A828(s32 a0, void *a1);
|
||||
extern void func_8002D4C8(s32 a0, s32 a1);
|
||||
extern void func_80153C44(s32 a0, s32 a1, s16 a2);
|
||||
|
||||
extern u8 D_801F1340[];
|
||||
extern u8 D_801F1238[];
|
||||
|
||||
void func_801A1724(s32 arg0) {
|
||||
volatile s32 pad[10];
|
||||
|
||||
switch (*(u16 *)(arg0 + 0x34)) {
|
||||
case 0:
|
||||
if (func_801A19C8(arg0) == 1) {
|
||||
*(u16 *)(arg0 + 0x34) += 1;
|
||||
*(s32 *)(arg0 + 0xE0) |= 0x40;
|
||||
} else if (*(s16 *)(arg0 + 0x98) == 0) {
|
||||
func_8012A828(arg0, D_801F1238);
|
||||
*(u16 *)(arg0 + 0x34) = 4;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (func_80153BD8(arg0) != 0) {
|
||||
*(s32 *)(arg0 + 0xE0) |= 8;
|
||||
*(u16 *)(arg0 + 0x5C) &= ~0x800;
|
||||
} else {
|
||||
*(s32 *)(arg0 + 0xE0) &= ~0x40;
|
||||
}
|
||||
*(u16 *)(arg0 + 0x34) += 1;
|
||||
case 2:
|
||||
if ((*(s32 *)(arg0 + 0xE0) & 8) != 0) {
|
||||
func_801A1924(arg0);
|
||||
}
|
||||
if (*(s16 *)(arg0 + 0x98) == 0) {
|
||||
if ((*(s32 *)(arg0 + 0xE0) & 8) != 0) {
|
||||
func_8012A828(arg0, D_801F1340);
|
||||
*(u16 *)(arg0 + 0x34) = 3;
|
||||
} else {
|
||||
func_8012A828(arg0, D_801F1238);
|
||||
*(u16 *)(arg0 + 0x34) = 4;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (*(s32 *)(arg0 + 0x94) < 0x86) {
|
||||
func_801A1924(arg0);
|
||||
}
|
||||
if (*(s32 *)(arg0 + 0x94) == 0x3E) {
|
||||
func_8002D4C8(0xC18, 0);
|
||||
}
|
||||
if (*(s32 *)(arg0 + 0x94) == 0x86) {
|
||||
func_80153C44(1, 0x50, *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12));
|
||||
func_8002D4C8(0xC17, 0);
|
||||
func_8002D4C8(0xC7B, 0);
|
||||
}
|
||||
case 4:
|
||||
if (*(s16 *)(arg0 + 0x98) == 0) {
|
||||
*(u16 *)(arg0 + 2) = 3;
|
||||
*(u16 *)(arg0 + 0x5C) |= 0x800;
|
||||
*(s32 *)(arg0 + 0xE0) &= ~0x40;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
@@ -1621,7 +1689,72 @@ void func_801A3190(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/md_SC07_003/nonmatchings/md_SC07_003", func_801A31CC);
|
||||
void func_801A31CC(void *arg0) {
|
||||
s32 v0;
|
||||
u8 *a1;
|
||||
|
||||
extern u8 D_801A6D58[];
|
||||
extern s32 func_8012C1B8(void);
|
||||
extern void func_8012CAE4(void *a0);
|
||||
extern void func_8001C214(s32 a0, s32 a1);
|
||||
|
||||
*(s32 *)((u8 *)arg0 + 0x78) = (s32)D_801A6D58;
|
||||
v0 = func_8012C1B8();
|
||||
*(s32 *)((u8 *)arg0 + 0x20) = v0;
|
||||
if (v0 == 0) {
|
||||
func_8012CAE4(arg0);
|
||||
return;
|
||||
}
|
||||
func_8001C214(v0, 0);
|
||||
a1 = (u8 *)arg0 + 0xCC;
|
||||
*(s32 *)((u8 *)arg0 + 0x58) = (s32)a1 | 0x50000000;
|
||||
*(u8 *)((u8 *)arg0 + 0x75) = 2;
|
||||
*(s32 *)((u8 *)arg0 + 0xF8) = *(s16 *)(*(s32 *)((u8 *)arg0 + 0x64) + 0x36);
|
||||
switch (*(s16 *)((u8 *)arg0 + 0x70)) {
|
||||
case 0: {
|
||||
s32 link;
|
||||
link = (s32)(a1 + 0x10);
|
||||
*(s32 *)a1 = link;
|
||||
a1 = (u8 *)link;
|
||||
link = (s32)(a1 + 0x10);
|
||||
*(s32 *)a1 = link;
|
||||
__asm__ __volatile__("" : "=r"(link) : "0"(link));
|
||||
*(s32 *)link = 0;
|
||||
__asm__ __volatile__("" : : : "memory");
|
||||
*(u16 *)((u8 *)arg0 + 0x5C) = 0xC800;
|
||||
*(s16 *)((u8 *)arg0 + 0xAE) = -1;
|
||||
*(s16 *)((u8 *)arg0 + 0x2) = 1;
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
*(s16 *)((u8 *)arg0 + 0xAE) = -3;
|
||||
*(u16 *)((u8 *)arg0 + 0x5C) = 0x8800;
|
||||
*(s16 *)((u8 *)arg0 + 0x2) = 2;
|
||||
break;
|
||||
case 2:
|
||||
*(u16 *)((u8 *)arg0 + 0x5C) = 0x8800;
|
||||
*(s16 *)((u8 *)arg0 + 0xAE) = -0x10;
|
||||
*(s16 *)((u8 *)arg0 + 0x2) = 3;
|
||||
break;
|
||||
case 3:
|
||||
*(u16 *)((u8 *)arg0 + 0x5C) = 0xC000;
|
||||
*(s16 *)((u8 *)arg0 + 0xAE) = -1;
|
||||
*(s16 *)((u8 *)arg0 + 0x2) = 4;
|
||||
break;
|
||||
case 4:
|
||||
*(u16 *)((u8 *)arg0 + 0x5C) = 0x800;
|
||||
*(s16 *)((u8 *)arg0 + 0xAE) = -1;
|
||||
*(s16 *)((u8 *)arg0 + 0x2) = 5;
|
||||
*(s16 *)(a1 + 4) = -0x10;
|
||||
*(s16 *)(a1 + 6) = 0x10;
|
||||
*(s16 *)(a1 + 8) = -0x100;
|
||||
*(s16 *)(a1 + 0xA) = 0;
|
||||
*(s16 *)(a1 + 0xC) = -0x10;
|
||||
*(s16 *)(a1 + 0xE) = 0x10;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
||||
@@ -2862,7 +2862,14 @@ INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_o0d", func_801831D0);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_o0d", func_80183228);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_o0d", func_80183280);
|
||||
typedef struct { u8 unk0[2]; u16 unk2; } Ent_80183280;
|
||||
|
||||
extern void (*D_8018E14C[])(Ent_80183280 *);
|
||||
|
||||
void func_80183280(Ent_80183280 *arg) {
|
||||
D_8018E14C[arg->unk2](arg);
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_o0d", func_801832E0);
|
||||
|
||||
|
||||
@@ -2834,14 +2834,111 @@ INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_o0d", func_801831D0);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_o0d", func_80183228);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_o0d", func_80183280);
|
||||
typedef struct { u8 unk0[2]; u16 unk2; } Ent_80183280;
|
||||
|
||||
extern void (*D_8018E14C[])(Ent_80183280 *);
|
||||
|
||||
void func_80183280(Ent_80183280 *arg) {
|
||||
D_8018E14C[arg->unk2](arg);
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_o0d", func_801832E0);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_o0d", func_801833C4);
|
||||
void func_801833C4(s32 arg0)
|
||||
{
|
||||
extern u8 D_801D47E0[];
|
||||
extern u8 D_801B5D38[];
|
||||
extern u8 D_801B86B4[];
|
||||
extern s32 D_801270C8;
|
||||
|
||||
typedef struct {
|
||||
u8 pad0[2];
|
||||
union { s16 s; u16 u; } f02;
|
||||
u8 pad1[0xD8];
|
||||
union { s16 s; u16 u; } fDC;
|
||||
u8 pad2[4];
|
||||
s16 fE2;
|
||||
u8 pad3[2];
|
||||
s16 fE6;
|
||||
u8 pad4[4];
|
||||
u16 fEC;
|
||||
u16 fEE;
|
||||
} St;
|
||||
|
||||
#define P ((St *)arg0)
|
||||
|
||||
func_80180A64(D_801D47E0, D_801B5D38, P->fDC.s, P->fE2);
|
||||
func_80180A64(D_801D47E0, D_801B86B4, P->fDC.s, P->fE6);
|
||||
P->fDC.u = P->fDC.u + 8;
|
||||
if (D_801270C8 != 0) {
|
||||
func_8002D4C8(0x77B, 0);
|
||||
P->fEC = 1;
|
||||
P->fEE = 0x3C;
|
||||
P->f02.u++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_o0d", func_801834DC);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_o0d", func_80183634);
|
||||
extern s32 D_801D47E0;
|
||||
extern s32 D_801B5D38;
|
||||
extern s32 D_801B86B4;
|
||||
extern s32 D_801270C8;
|
||||
extern void func_8013373C(s32 a0);
|
||||
|
||||
typedef struct {
|
||||
u8 pad0[2];
|
||||
u16 f002;
|
||||
u8 pad1[0xD8];
|
||||
struct {
|
||||
s16 f0DC;
|
||||
u16 f0DE;
|
||||
union {
|
||||
struct { s32 f0E0; s32 f0E4; } l;
|
||||
struct { u8 p[2]; s16 f0E2; u8 q[2]; s16 f0E6; } h;
|
||||
} u;
|
||||
u16 f0E8;
|
||||
} f;
|
||||
} Work_80183634;
|
||||
|
||||
void func_80183634(Work_80183634 *work)
|
||||
{
|
||||
func_80180A64(&D_801D47E0, &D_801B5D38, work->f.f0DC, work->f.u.h.f0E2);
|
||||
func_80180A64(&D_801D47E0, &D_801B86B4, work->f.f0DC, work->f.u.h.f0E6);
|
||||
work->f.u.l.f0E0 = work->f.u.l.f0E0 + -0x252E5;
|
||||
work->f.u.l.f0E4 = work->f.u.l.f0E4 + 0x168D6;
|
||||
work->f.f0DC = work->f.f0DC + 0xC;
|
||||
if ((s16)(++work->f.f0E8) >= 0x6A) {
|
||||
func_8002D4C8(4, 0x77B);
|
||||
D_801270C8 = 2;
|
||||
func_8013373C(0);
|
||||
++work->f002;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void func_801837B0(s32 arg0)
|
||||
{
|
||||
typedef struct {
|
||||
u8 _[0xDC];
|
||||
s16 fDC;
|
||||
u8 _2[4];
|
||||
s16 fE2;
|
||||
} Args_801837B0;
|
||||
typedef struct {
|
||||
u8 _[0xDC];
|
||||
u16 fDC;
|
||||
} Rmw_801837B0;
|
||||
|
||||
extern s32 D_801D47E0;
|
||||
extern s32 D_801B5D38;
|
||||
extern void func_80180A64(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
|
||||
|
||||
func_80180A64(&D_801D47E0, &D_801B5D38,
|
||||
((Args_801837B0 *)arg0)->fDC,
|
||||
((Args_801837B0 *)arg0)->fE2);
|
||||
((Rmw_801837B0 *)arg0)->fDC += 7;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_o0d", func_801837B0);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user