mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-30 23:37:39 -04:00
feat(decomp): parallel gate — 5 fns across 5 binaries (12 workers)
md_MAIN_028 func_800CB8A0 md_MAIN_003 func_800D24D0 ov_SC01_006 func_8017F9F8 ov_SC07_000 func_8017F69C ov_SC07_002 func_8017FCA8
This commit is contained in:
@@ -346,7 +346,79 @@ void func_800D2454(s32 a0, s32 a1, s32 *a2) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003_jr_800D1E18", func_800D24D0);
|
||||
#include "common.h"
|
||||
extern s32 D_800EC9DC;
|
||||
extern s32 D_800A5F1C;
|
||||
extern void StCdInterrupt(void);
|
||||
extern s32 D_800EC9B0[];
|
||||
extern s32 D_800EC9A4[];
|
||||
extern s32 D_800EC9B8;
|
||||
extern s16 D_800EC9BC[];
|
||||
extern s16 D_800EC9BE[];
|
||||
extern s16 D_800EC9C0[];
|
||||
extern s32 D_800EC9CC;
|
||||
extern s16 D_800EC9D0;
|
||||
extern s16 D_800EC9D2;
|
||||
extern s16 D_800EC9D4;
|
||||
extern s16 D_800EC9D6;
|
||||
extern s32 D_800EC9D8;
|
||||
extern s32 D_800EC9F0;
|
||||
extern u16 aD_800EC9BC[] __asm__("D_800EC9BC");
|
||||
extern void func_800D2C88();
|
||||
extern void func_800599B8(u16 *, u16 *);
|
||||
typedef struct { u16 x, y, w, h; } D24D0_Rect;
|
||||
|
||||
void func_800D24D0(void) {
|
||||
D24D0_Rect sp10[2];
|
||||
s32 s0;
|
||||
s32 idx;
|
||||
s32 r;
|
||||
s16 *p;
|
||||
s32 n;
|
||||
|
||||
if (D_800EC9DC != 0) {
|
||||
if (D_800A5F1C != 0) {
|
||||
StCdInterrupt();
|
||||
D_800A5F1C = 0;
|
||||
}
|
||||
}
|
||||
sp10[0] = *(D24D0_Rect *)&D_800EC9D0;
|
||||
{
|
||||
s32 *pb = &D_800EC9B8;
|
||||
s0 = *pb;
|
||||
__asm__ __volatile__("" ::: "memory");
|
||||
*pb = (*pb == 0);
|
||||
}
|
||||
if (D_800EC9F0 != 0) {
|
||||
r = D_800EC9C0[D_800EC9CC * 4] % D_800EC9D4;
|
||||
if (r != 0) {
|
||||
D_800EC9F0 = 0;
|
||||
D_800EC9D0 = D_800EC9D0 + r;
|
||||
goto join;
|
||||
}
|
||||
}
|
||||
{
|
||||
s16 *px = &D_800EC9D0;
|
||||
*px = *px + D_800EC9D4;
|
||||
}
|
||||
join:
|
||||
p = (s16 *)((u8 *)D_800EC9A4 + 0x2C);
|
||||
idx = D_800EC9CC;
|
||||
if (*p < D_800EC9BC[idx * 4] + D_800EC9C0[idx * 4]) {
|
||||
__asm__ __volatile__("");
|
||||
((void (*)()) func_800D2C88)((&D_800EC9A4[3])[D_800EC9B8],
|
||||
((D_800EC9D4 << 4) * ((D_800EC9D6 - 1) / 16 + 1)) >> 1);
|
||||
} else {
|
||||
D_800EC9D8 = 1;
|
||||
n = (idx == 0);
|
||||
D_800EC9CC = n;
|
||||
*p = *(u16 *)((u8 *)aD_800EC9BC + n * 8);
|
||||
D_800EC9F0 = 1;
|
||||
D_800EC9D2 = D_800EC9BE[n * 4];
|
||||
}
|
||||
func_800599B8((u16 *)sp10, (u16 *)D_800EC9B0[s0]);
|
||||
}
|
||||
|
||||
|
||||
extern s32 func_800D27A0();
|
||||
extern void func_800D3234(s32 a0, s32 a1);
|
||||
|
||||
@@ -302,7 +302,86 @@ s32 func_800CB6D4(s32 a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/md_MAIN_028/nonmatchings/md_MAIN_028", func_800CB8A0);
|
||||
void func_800CB8A0(void *a0) {
|
||||
extern s32 func_80017DC4(void *a0, void *a1);
|
||||
extern void func_8012F14C(s32 a0, s32 a1, s32 a2);
|
||||
extern void func_800D20C0(void *a0, void *a1, s32 a2);
|
||||
extern void func_800D23D0(void *a0);
|
||||
extern void func_80017E68(void *a0, void *a1);
|
||||
extern void RotMatrixYXZ(void *a0, void *a1);
|
||||
extern void func_80048D9C(void *a0, void *a1);
|
||||
extern s32 func_80017758(void *a0, void *a1);
|
||||
extern u8 D_800CBECC[];
|
||||
|
||||
s16 vecA[4];
|
||||
s16 rot[4];
|
||||
u8 info[0x38];
|
||||
u8 s2vec[0x20];
|
||||
s16 mtx[16];
|
||||
u16 fld;
|
||||
u16 fld2;
|
||||
s16 ang;
|
||||
u8 *tbl;
|
||||
s8 last;
|
||||
s16 i;
|
||||
|
||||
fld = *(u16 *)((s32)a0 + 0x28);
|
||||
vecA[2] = fld;
|
||||
vecA[1] = fld;
|
||||
vecA[0] = fld;
|
||||
func_80017DC4(vecA, s2vec);
|
||||
|
||||
vecA[2] = 0;
|
||||
vecA[0] = 0;
|
||||
vecA[1] = -0x2C;
|
||||
func_8012F14C((s32)a0 + 0x38, (s32)vecA, (s32)vecA);
|
||||
|
||||
func_800D20C0(vecA, rot, 5);
|
||||
func_800D23D0(rot);
|
||||
|
||||
*(s16 *)(info + 0x0C) = 0;
|
||||
*(s16 *)(info + 0x0A) = 0;
|
||||
*(s16 *)(info + 0x08) = 0;
|
||||
*(s16 *)(info + 0x1C) = 0;
|
||||
*(s16 *)(info + 0x14) = 0;
|
||||
*(s16 *)(info + 0x04) = 0;
|
||||
|
||||
fld2 = *(u16 *)((s32)a0 + 0x28);
|
||||
|
||||
*(u8 *)(info + 0x26) = 0;
|
||||
*(u8 *)(info + 0x22) = 0;
|
||||
*(u8 *)(info + 0x21) = 0;
|
||||
*(u8 *)(info + 0x20) = 0;
|
||||
*(u8 *)(info + 0x2A) = 0;
|
||||
*(u8 *)(info + 0x29) = 0;
|
||||
*(u8 *)(info + 0x28) = 0;
|
||||
*(u8 *)(info + 0x2E) = 0;
|
||||
*(u8 *)(info + 0x2D) = 0;
|
||||
*(u8 *)(info + 0x2C) = 0;
|
||||
*(u32 *)(info + 0x30) = 0x50000000;
|
||||
|
||||
ang = (s16)fld2 >> 6;
|
||||
ang = ang + 0x60;
|
||||
*(s8 *)(info + 0x25) = (s8)ang;
|
||||
*(s8 *)(info + 0x24) = (s8)ang;
|
||||
func_80017E68(vecA, s2vec);
|
||||
|
||||
RotMatrixYXZ(rot, mtx);
|
||||
func_80048D9C(s2vec, mtx);
|
||||
|
||||
tbl = D_800CBECC;
|
||||
for (i = 0; i < 4; i++) {
|
||||
*(s16 *)(info + 0x00) = (s8)*tbl; tbl++;
|
||||
*(s16 *)(info + 0x02) = (s8)*tbl; tbl++;
|
||||
*(s16 *)(info + 0x10) = (s8)*tbl; tbl++;
|
||||
*(s16 *)(info + 0x12) = (s8)*tbl; tbl++;
|
||||
*(s16 *)(info + 0x18) = (s8)*tbl; tbl++;
|
||||
last = (s8)*tbl; tbl--;
|
||||
*(s16 *)(info + 0x1A) = last;
|
||||
func_80017758(info, s2vec);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern u8 D_80078EC1;
|
||||
extern void (*D_800CBEE0[])();
|
||||
@@ -321,7 +400,7 @@ void func_800CBA74(int param_1)
|
||||
typedef struct { s32 w[4]; } Blk_800CBAD0;
|
||||
|
||||
void func_800CBAD0(s32 a0) {
|
||||
extern void func_800CB8A0(s32 a0);
|
||||
extern void func_800CB8A0();
|
||||
|
||||
s32 s;
|
||||
s32 v;
|
||||
@@ -349,7 +428,7 @@ L_inc:
|
||||
|
||||
void func_800CBBA0(void *a0) {
|
||||
typedef struct { s32 w[4]; } S16;
|
||||
extern void func_800CB8A0(s32 a0);
|
||||
extern void func_800CB8A0();
|
||||
s32 a1;
|
||||
s32 n;
|
||||
s32 m;
|
||||
@@ -428,7 +507,7 @@ void func_800CBD78(s32 param_1) {
|
||||
|
||||
typedef struct { s32 w[4]; } Struct16;
|
||||
|
||||
extern void func_800CB8A0(s32 a0);
|
||||
extern void func_800CB8A0();
|
||||
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
|
||||
|
||||
void func_800CBDD0(s32 a0) {
|
||||
|
||||
@@ -3088,7 +3088,58 @@ L874:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8017F9F8);
|
||||
|
||||
extern B16 D_800A5E88, D_800A5E98, D_800A5EA8;
|
||||
extern B16 D_801CE030, D_801CE040, D_801CE050;
|
||||
|
||||
s32 func_8017F9F8(s32 a0in) {
|
||||
extern s32 func_8017D9A0(void *);
|
||||
extern void func_8013C964(void);
|
||||
extern s32 func_800291B4(s32);
|
||||
extern s32 func_8001AAA0();
|
||||
extern s32 func_8001B710();
|
||||
extern void func_80028620(s32, void *);
|
||||
register s32 a0 __asm__("$18");
|
||||
B16 *d;
|
||||
|
||||
a0 = a0in;
|
||||
*(s16 *)(*(s32 *)(a0 + 0xD4) + 0xFC) = 0;
|
||||
if (*(s16 *)(a0 + 0xFE) == 0 && func_8017D9A0((void *)a0) != 0) {
|
||||
*(s16 *)(a0 + 0xFE) = 1;
|
||||
}
|
||||
if (*(s16 *)(a0 + 0x10A) >= 0x31) {
|
||||
u16 n = *(u16 *)(a0 + 0x106) + 0x10;
|
||||
*(s16 *)(a0 + 0x106) = n;
|
||||
*(s16 *)(a0 + 0x108) = n;
|
||||
if ((s16)n >= 0x100) {
|
||||
*(s16 *)(a0 + 0x106) = 0xFF;
|
||||
*(s16 *)(a0 + 0x108) = 0xFF;
|
||||
}
|
||||
*(s16 *)(a0 + 0x10A) -= 3;
|
||||
return 0;
|
||||
}
|
||||
if (*(s16 *)(a0 + 0xFE) == 0) {
|
||||
return 0;
|
||||
}
|
||||
func_8013C964();
|
||||
d = &D_800A5E88;
|
||||
*(s16 *)(*(s32 *)(a0 + 0xD4) + 0x108) = 2;
|
||||
d[0] = D_801CE030;
|
||||
d[1] = D_801CE040;
|
||||
d[2] = D_801CE050;
|
||||
func_80028620(0, d);
|
||||
func_80028620(1, d + 1);
|
||||
func_80028620(2, d + 2);
|
||||
if (*(s16 *)(a0 + 0x100) != 0x1C) {
|
||||
return 1;
|
||||
}
|
||||
if (func_800291B4(0x7E) & 0x20) {
|
||||
((s32 (*)(s32))func_8001AAA0)(0x3D);
|
||||
func_8001B710();
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8017FBCC);
|
||||
|
||||
|
||||
@@ -4774,7 +4774,62 @@ void func_8017F59C(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8017BEBC", func_8017F69C);
|
||||
extern s16 D_801D0B7C;
|
||||
extern void func_8017F888();
|
||||
extern u8 D_80186584[];
|
||||
extern void func_8012AD80();
|
||||
extern s32 func_8012BEE8();
|
||||
extern void func_8012B200(u8 *a0);
|
||||
extern s32 func_80132EF4();
|
||||
extern void func_8012A828();
|
||||
extern void func_8012AD44();
|
||||
extern void func_8002D4C8(s32 a0, s32 a1);
|
||||
extern u8 D_801CCFA8[];
|
||||
|
||||
void func_8017F69C(s32 s0) {
|
||||
s32 v0;
|
||||
register s32 obj;
|
||||
register s32 y;
|
||||
|
||||
switch (*(u16 *)(s0 + 0x34)) {
|
||||
case 0:
|
||||
func_8012AD80(s0);
|
||||
if (func_8012BEE8(s0) == 0) {
|
||||
return;
|
||||
}
|
||||
func_8012B200((u8 *)s0);
|
||||
goto inc;
|
||||
case 1:
|
||||
if ((u16)D_801D0B7C != 7) {
|
||||
return;
|
||||
}
|
||||
func_8017F888((s32 *)s0, (s32 *)&D_80186584);
|
||||
inc:
|
||||
v0 = *(u16 *)(s0 + 0x34);
|
||||
*(u16 *)(s0 + 0x34) = v0 + 1;
|
||||
break;
|
||||
case 2:
|
||||
if ((u16)D_801D0B7C != 6) {
|
||||
return;
|
||||
}
|
||||
*(s32 *)(s0 + 0x10) = (*(s32 *)(*(s32 *)(s0 + 0x64) + 4) - *(s32 *)(s0 + 4)) >> 4;
|
||||
y = *(s32 *)(s0 + 8) + 0x1400000;
|
||||
*(s32 *)(s0 + 0x14) = (*(s32 *)(*(s32 *)(s0 + 0x64) + 8) - y) >> 4;
|
||||
*(s32 *)(s0 + 0x18) = (*(s32 *)(*(s32 *)(s0 + 0x64) + 0xC) - *(s32 *)(s0 + 0xC) + 0x200000) >> 4;
|
||||
*(s32 *)(s0 + 0x1C) = 0x10;
|
||||
obj = func_80132EF4(s0, 0x77);
|
||||
if (obj != 0) {
|
||||
*(s32 *)(obj + 4) += *(s32 *)(s0 + 0x10) * 4;
|
||||
*(s32 *)(obj + 8) += -0x300000 + (*(s32 *)(s0 + 0x14) * 4);
|
||||
*(s32 *)(obj + 0xC) += *(s32 *)(s0 + 0x18) * 4;
|
||||
}
|
||||
func_8012A828(s0, D_801CCFA8);
|
||||
func_8012AD44((s32 *)s0, 3);
|
||||
func_8002D4C8(0xC1A, 0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern void (*D_8018658C[])(void);
|
||||
|
||||
@@ -4970,7 +4970,55 @@ void func_8017FBD0(s32 s0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_8017FCA8);
|
||||
void func_8017FCA8(s32 a0)
|
||||
{
|
||||
typedef struct { s16 m0, m1, m2, m3; } PosFCA8;
|
||||
extern s16 D_80126940[4];
|
||||
extern s32 func_8012E544(s32 a0);
|
||||
extern void func_80015978(s32 a0, s32 *a1);
|
||||
extern s32 func_80013294(void *a0, void *a1);
|
||||
extern s32 ratan2(s32 dx, s32 dy);
|
||||
extern void func_80181394();
|
||||
|
||||
PosFCA8 cur;
|
||||
PosFCA8 target;
|
||||
s32 ret;
|
||||
s32 dist;
|
||||
s16 clamped;
|
||||
register s16 va __asm__("$6");
|
||||
register s16 vb __asm__("$5");
|
||||
register s32 sc __asm__("$2");
|
||||
|
||||
cur = *(PosFCA8 *) D_80126940;
|
||||
ret = func_8012E544(0x306);
|
||||
if (ret != 0) {
|
||||
func_80015978(ret + 4, (s32 *) &target);
|
||||
if (cur.m1 > -0x200) {
|
||||
cur.m1 = -0x200;
|
||||
}
|
||||
func_80015978(ret + 4, (s32 *) &target);
|
||||
target.m1 = cur.m1;
|
||||
dist = func_80013294(&cur, &target) - 0x100;
|
||||
clamped = dist;
|
||||
if (clamped < 0) {
|
||||
clamped = 0;
|
||||
}
|
||||
if (clamped > 0x300) {
|
||||
clamped = 0x300;
|
||||
}
|
||||
va = ((clamped * 512) / 0x300) + 0x38;
|
||||
*(s16 *) (a0 + 0x20) = va;
|
||||
vb = ((clamped * 111) / 0x300) - 0x70;
|
||||
*(s16 *) (a0 + 0x30) = vb;
|
||||
sc = ((clamped * 800) / 0x300) + 0x190;
|
||||
*(s32 *) (a0 + 0x14) = (s16) sc;
|
||||
} else {
|
||||
target = *(PosFCA8 *) D_80126940;
|
||||
}
|
||||
|
||||
func_80181394(a0, &cur, ratan2(cur.m0 - target.m0, cur.m2 - target.m2) & 0xfff);
|
||||
}
|
||||
|
||||
|
||||
extern s32 func_80029504(void);
|
||||
extern void func_8017FEC4(s32 a0);
|
||||
|
||||
Reference in New Issue
Block a user