mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-27 22:45:39 -04:00
feat(decomp): parallel gate — 2 fns across 2 binaries (8 workers)
ov_SC02_003 func_8017F950 ov_SC06_011 func_8017EEEC
This commit is contained in:
@@ -1,3 +1,79 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8017F950", func_8017F950);
|
||||
|
||||
void func_8017F950(s32 arg0)
|
||||
{
|
||||
typedef struct { u32 w[4]; } St801D9204;
|
||||
extern void func_80019064(void *a0);
|
||||
extern void func_8012A828(s32 a0, void *a1);
|
||||
extern void func_8012B23C(s32 a0);
|
||||
extern void func_8012B2CC(s32 a0);
|
||||
extern void func_8012E9C0(s32 a0);
|
||||
extern s32 func_80143B6C(s32 a0, s32 a1);
|
||||
extern void func_8017FC9C(s32 a0);
|
||||
extern void func_8017FCB0(s32 a0);
|
||||
extern void func_8017FD2C(s32 a0);
|
||||
extern void func_8017FD44(s32 a0);
|
||||
extern void func_8017FD80(s32 a0);
|
||||
extern void func_8017FDE8(s32 a0);
|
||||
extern void func_8017FE68(s32 a0);
|
||||
extern void func_801801EC(s32 a0);
|
||||
extern void func_80180A64(s32 a0);
|
||||
extern u8 D_80062BDC;
|
||||
extern char D_801A681C[];
|
||||
extern St801D9204 D_801E6A00;
|
||||
St801D9204 local = D_801E6A00;
|
||||
|
||||
if (*(u8 *)(arg0 + 0x5E) == 5) {
|
||||
func_80019064(&D_80062BDC);
|
||||
}
|
||||
if (*(u16 *)(arg0 + 0x5E) == 0x1F) {
|
||||
func_80180A64(arg0);
|
||||
return;
|
||||
}
|
||||
*(u8 *)(arg0 + 0xC1) = 0;
|
||||
func_8012E9C0(arg0);
|
||||
*(u16 *)(arg0 + 0x76) = *(u16 *)(arg0 + 0x76) - *(u16 *)(arg0 + 0x60);
|
||||
*(u16 *)(arg0 + 0x5C) &= 0xFFFE;
|
||||
*(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12) = (*(u16 *)(arg0 + 0x62) + 0x800) & 0xFFF;
|
||||
func_8012B2CC(arg0);
|
||||
func_8012B23C(arg0);
|
||||
*(s16 *)(arg0 + 2) = 3;
|
||||
func_80143B6C(arg0, 0);
|
||||
switch (*(u8 *)(arg0 + 0x5E)) {
|
||||
case 13:
|
||||
func_8017FC9C(arg0);
|
||||
return;
|
||||
case 14:
|
||||
func_8017FCB0(arg0);
|
||||
return;
|
||||
case 10:
|
||||
func_8017FD44(arg0);
|
||||
return;
|
||||
case 9:
|
||||
func_8017FD80(arg0);
|
||||
return;
|
||||
case 17:
|
||||
func_8017FDE8(arg0);
|
||||
return;
|
||||
case 33:
|
||||
func_8017FD2C(arg0);
|
||||
return;
|
||||
case 15:
|
||||
if (*(s16 *)(arg0 + 0x76) > 0) {
|
||||
func_801801EC(arg0);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (*(s16 *)(arg0 + 0x76) > 0) {
|
||||
*(u16 *)(arg0 + 0x34) = 0;
|
||||
*(s32 *)(arg0 + 0x1C) = 0x10;
|
||||
func_8012A828(arg0, D_801A681C);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
func_8017FE68(arg0);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,72 @@
|
||||
#include "common.h"
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8017EEEC", func_8017EEEC);
|
||||
|
||||
|
||||
extern void func_8001C214(s32 a0, s32 a1);
|
||||
extern void func_8017F364(void);
|
||||
|
||||
void func_8017EEEC(void *a0) {
|
||||
extern u8 D_801202A0[];
|
||||
extern void *D_80126CC8;
|
||||
extern u8 D_8019FDD4[];
|
||||
extern s16 D_801A0774;
|
||||
u16 state = *(u16 *)((s32)a0 + 0x34);
|
||||
|
||||
switch (state) {
|
||||
case 4:
|
||||
{
|
||||
u8 *p = D_801202A0;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 0x60; i++, p += 0x10C) {
|
||||
if (*(u16 *)(p + 0) == 0x2E7 && *(u16 *)(p + 2) == 4) {
|
||||
func_8001C214(*(s32 *)((s32)a0 + 0x20), (s32)&D_801A0774);
|
||||
*(u16 *)((s32)a0 + 0x5C) = 0x8800;
|
||||
*(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400;
|
||||
*(s16 *)((s32)a0 + 0x34) = 3;
|
||||
}
|
||||
}
|
||||
/* fall through */
|
||||
}
|
||||
case 0:
|
||||
if (D_80126CC8 == a0) {
|
||||
u16 t0 = *(u16 *)((s32)a0 + 0x88);
|
||||
u16 t1 = *(u16 *)((s32)a0 + 0x8A);
|
||||
u16 t2 = *(u16 *)((s32)a0 + 0x8C);
|
||||
|
||||
*(s16 *)((s32)a0 + 0x34) = 1;
|
||||
*(s16 *)((s32)a0 + 0x5C) = 0;
|
||||
*(u16 *)((s32)a0 + 0x6) = t0;
|
||||
*(u16 *)((s32)a0 + 0xA) = t1;
|
||||
*(u16 *)((s32)a0 + 0xE) = t2;
|
||||
func_8017F364();
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
u8 *p = D_801202A0;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 0x60; i++, p += 0x10C) {
|
||||
if (*(u16 *)(p + 0) == 0x2E7 && *(u16 *)(p + 2) == 4) {
|
||||
func_8001C214(*(s32 *)((s32)a0 + 0x20), (s32)D_8019FDD4);
|
||||
*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x4) |= 0x60000040;
|
||||
*(u16 *)((s32)a0 + 0x5C) = 0x9000;
|
||||
*(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400;
|
||||
*(s16 *)((s32)a0 + 0x34) = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user