mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-27 22:45:39 -04:00
feat(decomp): family-remap gate — +9 fns x0 propagated (fleet 98.8%)
This commit is contained in:
@@ -3331,7 +3331,20 @@ void func_8017BEC4(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017AE2C", func_8017BF00);
|
||||
|
||||
|
||||
void func_8017BF00(s32 *a0) {
|
||||
func_8014706C(a0);
|
||||
func_801553A8(a0);
|
||||
func_80155440(a0);
|
||||
func_80154150((s32)a0, 0x26);
|
||||
func_80154A74((s32)a0, 0x1E);
|
||||
*(s16 *)((u8 *)(*(s32 **)((u8 *)a0 + 0x20)) + 0x10) = 0xFE9;
|
||||
*(s32 *)((u8 *)a0 + 0x208) = 0;
|
||||
func_80171A1C((u8 *)a0);
|
||||
func_8017BF70(a0);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8017BF70() /* dedup: shared engine-core @0x8017BF70 (src/shared) */
|
||||
|
||||
@@ -3397,7 +3410,23 @@ void aF8017C150(void *a0)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017AE2C", func_8017C18C);
|
||||
|
||||
extern u8 D_80185D9C[];
|
||||
extern void func_8014706C(void *a0);
|
||||
extern void func_80154274(s32 *a0, s32 a1);
|
||||
extern void func_80171A1C(u8 *a0);
|
||||
extern void func_80147324(s32 arg0);
|
||||
extern void func_8017C1E8(void *a0);
|
||||
|
||||
void func_8017C18C(s32 *a0) {
|
||||
func_8014706C(a0);
|
||||
func_80154274(a0, (s32)D_80185D9C);
|
||||
*(s16 *)((u8 *)(*(s32 **)((u8 *)a0 + 0x20)) + 0x10) = 0xC00;
|
||||
func_80147324(0xA05);
|
||||
func_80171A1C((u8 *)a0);
|
||||
func_8017C1E8(a0);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8017C1E8() /* dedup: shared engine-core @0x8017C1E8 (src/shared) */
|
||||
|
||||
|
||||
@@ -3853,7 +3853,60 @@ void func_8017E108(void)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017C340", func_8017E258);
|
||||
|
||||
|
||||
void func_8017E258(void) {
|
||||
extern short D_800B9A02;
|
||||
extern u32 D_801CD9A8;
|
||||
extern u32 D_801CD9AC;
|
||||
extern s32 D_801151C8[];
|
||||
extern s32 D_801151D0;
|
||||
extern u16 D_8011511A;
|
||||
extern u8 D_80115138[];
|
||||
extern s16 D_801CD870;
|
||||
extern u16 D_80115112;
|
||||
extern u8 D_800B9A15;
|
||||
extern s32 func_801399F0(s32);
|
||||
extern s32 func_80014ED4(s32);
|
||||
extern s16 func_8014168C(s16);
|
||||
extern s32 func_8017F2D4(s32, s32);
|
||||
extern void func_80139954(void);
|
||||
extern void func_8002D4C8(s32, s32);
|
||||
extern void func_8017E6BC(void);
|
||||
extern void func_80137B80(void);
|
||||
|
||||
s32 flags;
|
||||
s32 pad[2];
|
||||
|
||||
D_801151D0 = D_801151C8[*(u16 *)&D_800B9A02];
|
||||
|
||||
if (D_801CD9A8 != 0) {
|
||||
if (func_801399F0(D_801CD9AC) != 0) {
|
||||
D_801CD9A8 = 0;
|
||||
}
|
||||
} else {
|
||||
flags = func_80014ED4(0);
|
||||
if ((flags & 0x50) != 0) {
|
||||
u16 t;
|
||||
t = D_8011511A;
|
||||
if (D_80115138[t] == 8) {
|
||||
func_8017F2D4(0xF, func_8014168C(t));
|
||||
}
|
||||
if (D_801CD870 != 0) {
|
||||
func_80139954();
|
||||
D_800B9A15 = 0;
|
||||
func_8002D4C8(0x474, 0);
|
||||
D_80115112++;
|
||||
} else {
|
||||
D_80115112--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func_8017E6BC();
|
||||
func_80137B80();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -3092,7 +3092,76 @@ INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8017F9F
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8017FBCC);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8017FD50);
|
||||
|
||||
typedef struct { u32 addr : 24; u32 len : 8; } PTag_8017FD50;
|
||||
typedef struct { u32 *ot; u32 pad[4]; } Env_8017FD50;
|
||||
typedef struct {
|
||||
u32 tag;
|
||||
u8 r0, g0, b0, code;
|
||||
s16 x0, y0;
|
||||
u8 r1, g1, b1, p1;
|
||||
s16 x1, y1;
|
||||
u8 r2, g2, b2, p2;
|
||||
s16 x2, y2;
|
||||
u8 r3, g3, b3, p3;
|
||||
s16 x3, y3;
|
||||
} PG4_8017FD50;
|
||||
|
||||
extern void *func_80010A08(s32);
|
||||
extern s16 D_800B9A02;
|
||||
extern Env_8017FD50 D_800AE7BC[];
|
||||
|
||||
void func_8017FD50(s32 param_1) {
|
||||
volatile u16 *pbh;
|
||||
u32 *p;
|
||||
u32 *r;
|
||||
u8 c1, c2;
|
||||
|
||||
pbh = (volatile u16 *)&D_800B9A02;
|
||||
p = (u32 *)func_80010A08(0x34);
|
||||
|
||||
((PTag_8017FD50 *)p)->len = 1;
|
||||
p[1] = 0xE1000015;
|
||||
((PTag_8017FD50 *)p)->addr = ((PTag_8017FD50 *)D_800AE7BC[*pbh].ot)->addr;
|
||||
((PTag_8017FD50 *)D_800AE7BC[*pbh].ot)->addr = (u32)p;
|
||||
|
||||
p += 2;
|
||||
((PG4_8017FD50 *)p)->tag = 0x08000000;
|
||||
((PG4_8017FD50 *)p)->code = 0x3A;
|
||||
c1 = *(u8 *)(param_1 + 0x108);
|
||||
((PG4_8017FD50 *)p)->b1 = c1;
|
||||
((PG4_8017FD50 *)p)->b0 = c1;
|
||||
((PG4_8017FD50 *)p)->g1 = c1;
|
||||
((PG4_8017FD50 *)p)->g0 = c1;
|
||||
((PG4_8017FD50 *)p)->r1 = c1;
|
||||
((PG4_8017FD50 *)p)->r0 = c1;
|
||||
c2 = *(u8 *)(param_1 + 0x106);
|
||||
((PG4_8017FD50 *)p)->x2 = -160;
|
||||
((PG4_8017FD50 *)p)->x0 = -160;
|
||||
((PG4_8017FD50 *)p)->x3 = 160;
|
||||
((PG4_8017FD50 *)p)->x1 = 160;
|
||||
((PG4_8017FD50 *)p)->y1 = -120;
|
||||
((PG4_8017FD50 *)p)->y0 = -120;
|
||||
((PG4_8017FD50 *)p)->b3 = c2;
|
||||
((PG4_8017FD50 *)p)->b2 = c2;
|
||||
((PG4_8017FD50 *)p)->g3 = c2;
|
||||
((PG4_8017FD50 *)p)->g2 = c2;
|
||||
((PG4_8017FD50 *)p)->r3 = c2;
|
||||
((PG4_8017FD50 *)p)->r2 = c2;
|
||||
((PG4_8017FD50 *)p)->y3 = 120;
|
||||
((PG4_8017FD50 *)p)->y2 = 120;
|
||||
|
||||
((PTag_8017FD50 *)p)->addr = ((PTag_8017FD50 *)D_800AE7BC[*pbh].ot)->addr;
|
||||
((PTag_8017FD50 *)D_800AE7BC[*pbh].ot)->addr = (u32)p;
|
||||
|
||||
r = p + 9;
|
||||
p = r;
|
||||
((PTag_8017FD50 *)r)->len = 1;
|
||||
r[1] = 0xE1000240;
|
||||
((PTag_8017FD50 *)r)->addr = ((PTag_8017FD50 *)D_800AE7BC[*pbh].ot)->addr;
|
||||
((PTag_8017FD50 *)D_800AE7BC[*pbh].ot)->addr = (u32)r;
|
||||
}
|
||||
|
||||
|
||||
void func_8017FF74(s32 a0)
|
||||
{
|
||||
@@ -3296,7 +3365,16 @@ void func_801803AC(s32 arg0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_801803F0);
|
||||
|
||||
|
||||
extern s32 *D_80126B78;
|
||||
|
||||
void func_801803F0(s32 arg0) {
|
||||
if ((*(s32 *)(arg0 + 0x1c) += 1) == 0x8e) {
|
||||
*(u16 *)(D_80126B78 + 4) = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void func_8018041C(param_1)
|
||||
s32 param_1;
|
||||
@@ -4171,7 +4249,49 @@ void func_801812B0(s32 a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8018165C);
|
||||
|
||||
|
||||
extern s32 D_801C37D4[];
|
||||
|
||||
void func_8018165C(s32 a0) {
|
||||
s32 trig;
|
||||
s32 held;
|
||||
|
||||
if (*(s16 *)(a0 + 0xFC) == 0) {
|
||||
trig = 0;
|
||||
} else {
|
||||
trig = func_800149E0(0);
|
||||
held = func_80014B10(0);
|
||||
}
|
||||
func_80181B00(a0);
|
||||
func_801820F8(a0);
|
||||
if (*(s16 *)(a0 + 0x108) == 0) {
|
||||
if (*(s32 *)(a0 + 0xB0) == 0) {
|
||||
if (trig & 0x10) {
|
||||
*(s16 *)(*(s32 *)(a0 + 0x64) + 0x104) = 1;
|
||||
} else if (trig & 0x20) {
|
||||
*(s32 *)(a0 + 0xB0) = func_8013767C(D_801C37D4[*(s16 *)(a0 + 0x70)]);
|
||||
}
|
||||
} else if (func_801399F0(*(s32 *)(a0 + 0xB0)) != 0) {
|
||||
func_80139914(*(s32 *)(a0 + 0xB0));
|
||||
*(s32 *)(a0 + 0xB0) = 0;
|
||||
}
|
||||
}
|
||||
switch (*(s16 *)(a0 + 0x108)) {
|
||||
case 1:
|
||||
held = *(s32 *)(a0 + 0xB0);
|
||||
*(s16 *)(a0 + 0x108) = 0;
|
||||
if (held != 0) {
|
||||
func_80139914(held);
|
||||
}
|
||||
*(s16 *)(a0 + 0x2) = 2;
|
||||
break;
|
||||
case 2:
|
||||
*(s16 *)(a0 + 0x2) = 5;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern void func_80181B00(s32 a0);
|
||||
extern void func_801820F8(s32 a0);
|
||||
@@ -4236,7 +4356,88 @@ skip2:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80181894);
|
||||
|
||||
|
||||
|
||||
extern void func_801820F8(s32 a0);
|
||||
extern s32 func_800291B4(s32 arg);
|
||||
extern void func_800291A0(s32 a0, s32 a1);
|
||||
extern void func_800D0C48(s32 a0);
|
||||
extern void func_8018203C(s32 a0, s32 a1);
|
||||
extern void func_8012A828(s32 a0, void *a1);
|
||||
extern void func_80181B00(s32 a0);
|
||||
extern void func_8002D4C8(s32 a0, s32 a1);
|
||||
extern void func_80016450(s32 a0, s32 a1);
|
||||
extern u8 D_801CDA10[];
|
||||
extern u16 D_801C3930[];
|
||||
extern u16 D_801C3988[];
|
||||
|
||||
void func_80181894(s32 a0) {
|
||||
s32 p1;
|
||||
s32 p2;
|
||||
s32 n;
|
||||
register s32 v __asm__("$2");
|
||||
|
||||
p1 = *(s32 *)(a0 + 0xD0);
|
||||
p2 = *(s32 *)(a0 + 0xD4);
|
||||
func_801820F8(a0);
|
||||
n = *(s32 *)(a0 + 0x1C) - 1;
|
||||
*(s32 *)(a0 + 0x1C) = n;
|
||||
if (n != 0) {
|
||||
if (n == 0x40) {
|
||||
func_8002D4C8(0xC86, 0);
|
||||
}
|
||||
if (*(s32 *)(a0 + 0x1C) < 0x40) {
|
||||
*(u16 *)(p1 + 8) += 0xC;
|
||||
*(u16 *)(p1 + 0xC) -= 0x10;
|
||||
*(u16 *)(p1 + 0x12) += 0x60;
|
||||
*(u16 *)(p1 + 0x10) += 0x20;
|
||||
if (*(s32 *)(a0 + 0x1C) < 0x30) {
|
||||
*(u16 *)(p2 + 8) -= 0x18;
|
||||
*(u16 *)(p1 + 0xC) += 0x18;
|
||||
*(u16 *)(p2 + 0x14) += 0x80;
|
||||
if (*(s32 *)(a0 + 0x1C) < 0x20) {
|
||||
v = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x18) + 0x80;
|
||||
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x18) = v;
|
||||
if ((s16)v >= 0x1801) {
|
||||
v = 0x1800;
|
||||
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x18) = v;
|
||||
}
|
||||
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x1A) =
|
||||
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x1C) =
|
||||
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x18);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
*(u16 *)p1 = 0;
|
||||
*(u16 *)p2 = 0;
|
||||
func_800291A0(*(s16 *)(a0 + 0x70) + 0x63,
|
||||
(func_800291B4(*(s16 *)(a0 + 0x70) + 0x63) | 0x20) & 0xFF);
|
||||
if (*(s16 *)(a0 + 0x70) == 0x1B) {
|
||||
func_800D0C48(1);
|
||||
}
|
||||
func_8018203C(a0, 1);
|
||||
func_8012A828(a0, D_801CDA10);
|
||||
func_801820F8(a0);
|
||||
*(u16 *)(a0 + 0x10A) = 1;
|
||||
*(u16 *)(a0 + 0x102) = D_801C3930[*(s16 *)(a0 + 0x70)];
|
||||
*(u16 *)(a0 + 0xFA) = D_801C3988[*(s16 *)(a0 + 0x70)];
|
||||
func_80181B00(a0);
|
||||
*(u32 *)(*(s32 *)(a0 + 0xD8) + 4) &= 0x7FFFFFFF;
|
||||
*(u16 *)(a0 + 2) += 1;
|
||||
}
|
||||
if (*(s32 *)(a0 + 0x1C) < 0x14) {
|
||||
register s32 p __asm__("$4");
|
||||
v = 0x13 - *(s32 *)(a0 + 0x1C);
|
||||
p = v * 16;
|
||||
if ((s16)(v * 16) >= 0x100) {
|
||||
p = 0xFF;
|
||||
}
|
||||
func_80016450((u8)p, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern s32 func_800149E0(s32 a0);
|
||||
@@ -4429,9 +4630,56 @@ s32 a0;
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80182240);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_801822B0);
|
||||
|
||||
|
||||
extern void func_80016450(s32 a0, s32 a1);
|
||||
|
||||
void func_80182240(s32 a0) {
|
||||
register s32 v __asm__("$2");
|
||||
s32 t;
|
||||
|
||||
v = *(s32 *)(a0 + 0x1C);
|
||||
t = v + 1;
|
||||
*(s32 *)(a0 + 0x1C) = t;
|
||||
if (t < 0x13) {
|
||||
register s32 p __asm__("$4");
|
||||
|
||||
v = 0x13 - t;
|
||||
p = v * 16;
|
||||
if ((s16)(v * 16) >= 0x100) {
|
||||
p = 0xFF;
|
||||
}
|
||||
func_80016450((u8)p, 0);
|
||||
} else {
|
||||
*(u16 *)(a0 + 2) = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void func_801822B0(void *a0) {
|
||||
extern void func_80139914(s32 a0);
|
||||
extern void func_8012C218(void *a0);
|
||||
u16 *p0 = *(u16 **)((s32)a0 + 0xD0);
|
||||
u16 *p1 = *(u16 **)((s32)a0 + 0xD4);
|
||||
u16 *p2 = *(u16 **)((s32)a0 + 0xD8);
|
||||
if (p0 != 0) {
|
||||
*p0 = 0;
|
||||
}
|
||||
if (p1 != 0) {
|
||||
*p1 = 0;
|
||||
}
|
||||
if (p2 != 0) {
|
||||
*p2 = 0;
|
||||
}
|
||||
if (*(s32 *)((s32)a0 + 0xB0) != 0) {
|
||||
func_80139914(*(s32 *)((s32)a0 + 0xB0));
|
||||
}
|
||||
func_8012C218(a0);
|
||||
}
|
||||
|
||||
|
||||
extern s32 D_80126B58;
|
||||
extern s16 D_80126B30;
|
||||
|
||||
Reference in New Issue
Block a user