mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-26 13:33:34 -04:00
feat(decomp): parallel gate — 3 fns across 3 binaries (8 workers)
md_MAIN_025 func_800CB300 ov_SC03_028 func_80181EBC ov_SC07_010 func_80180138
This commit is contained in:
+1
-1
@@ -4950,7 +4950,7 @@ build/src/ov_SC07_010/ov_SC07_010_jr_8015A3C8.o: JTBL_PADS := 0,4 # §8e pads (
|
||||
build/src/ov_SC07_010/ov_SC07_010_jr_80171B4C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
|
||||
build/src/ov_SC07_010/ov_SC07_010_jr_801789AC.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
build/src/ov_SC07_010/ov_SC07_010_jr_80179B74.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x90
|
||||
build/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x34
|
||||
build/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.o: JTBL_PADS := 0,0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x34,+0x4c
|
||||
build/src/ov_SC07_010/ov_SC07_010_o0.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
|
||||
ov_SC07_010_CHECK_SHA := config/check.ov_SC07_010.sha
|
||||
ov_SC07_010_SYMBOLS := config/symbols.ov_SC07_010.txt
|
||||
|
||||
@@ -158,7 +158,7 @@ segments:
|
||||
- [0x7e6dc, .rodata, ov_SC07_010_jr_80179B74] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x7e7f8, data, tail16]
|
||||
- [0x7e7fc, .rodata, ov_SC07_010_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x7e844, data, tail17]
|
||||
- [0x7e85c, data, tail17]
|
||||
- [0x813EC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
|
||||
- [0x813EF] # EOF marker = the 0.4.dec byte length
|
||||
# @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes
|
||||
|
||||
@@ -206,7 +206,139 @@ void func_800CB23C(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/md_MAIN_025/nonmatchings/md_MAIN_025", func_800CB300);
|
||||
void func_800CB300(s32 arg0) {
|
||||
typedef struct { u8 b[8]; } W8;
|
||||
typedef struct { s32 w[4]; } M16;
|
||||
|
||||
extern u8 D_800CAE0C[];
|
||||
extern s16 D_800CBEA0;
|
||||
extern u16 D_800B99DA;
|
||||
extern s16 D_800CBEA2;
|
||||
extern u8 D_800CBEB0[];
|
||||
extern u8 D_80114EB0[];
|
||||
extern s16 D_80126B18;
|
||||
extern s16 D_80126B1A;
|
||||
extern s16 D_80126B1C;
|
||||
extern u8 D_80114EC8[];
|
||||
extern s32 D_801151D8;
|
||||
|
||||
extern s32 func_80146E98(s32 a0);
|
||||
extern void func_80013F3C(void *a0);
|
||||
extern void func_800126C4(s32 a0, s32 a1);
|
||||
extern void func_800123F0(s32 a0, s32 a1);
|
||||
extern void func_80012558(s32 a0, s32 a1);
|
||||
extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4);
|
||||
extern void func_80162FC0(s32 *a0);
|
||||
extern s32 func_80163950(s32 a0);
|
||||
extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4);
|
||||
extern void func_80163328(s32 a0);
|
||||
extern u32 func_801633A8(s32 a0);
|
||||
extern void func_80019064(void *a0);
|
||||
extern void func_80013E94(void *a0, void *a1);
|
||||
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
|
||||
extern s32 func_801632E0(s32 a0);
|
||||
extern s32 func_800CB7B0(s32 a0);
|
||||
extern void func_800CB760(void *a0, s16 a1);
|
||||
extern s32 func_8016380C(s32 a0, s32 a1);
|
||||
extern void func_80146E90(s32 *a0, s16 a1);
|
||||
extern void func_80147364(u16 a0, s32 a1);
|
||||
extern void func_80147324(s32 arg0);
|
||||
extern void func_80146CA0(void *a0);
|
||||
|
||||
s32 mat[8];
|
||||
W8 work[3];
|
||||
s32 s1;
|
||||
s32 s2;
|
||||
s32 s0;
|
||||
s32 hv;
|
||||
s32 bit;
|
||||
s32 flags;
|
||||
s32 st;
|
||||
|
||||
s1 = arg0;
|
||||
s0 = *(s32 *)(s1 + 0x20);
|
||||
work[0] = *(W8 *)D_800CAE0C;
|
||||
s2 = (s32)&work;
|
||||
if (func_80146E98(s1) != 0) {
|
||||
goto L6A8;
|
||||
}
|
||||
func_80013F3C(&mat);
|
||||
func_800126C4((s32)&mat, *(s16 *)(s0 + 0x10));
|
||||
func_800123F0((s32)&mat, *(s16 *)(s0 + 0x14));
|
||||
func_80012558((s32)&mat, *(s16 *)(s0 + 0x12));
|
||||
*(M16 *)(s0 + 0x34) = *(M16 *)&mat[0];
|
||||
*(M16 *)(s0 + 0x44) = *(M16 *)&mat[4];
|
||||
*(u16 *)(s0 + 0x2C) = *(u16 *)(s0 + 0x2C) | 1;
|
||||
func_80163194(s1, -(((*(s32 *)(s1 + 0x50) - 0x28) << 14) / 40), 0, 0, (s32)&mat);
|
||||
func_80162FC0((s32 *)s1);
|
||||
func_80163950(s1);
|
||||
hv = *(u16 *)(s0 + 0x1A) + 0x200;
|
||||
*(u16 *)(s0 + 0x18) = *(u16 *)(s0 + 0x1A) = hv;
|
||||
if ((s16)hv > 0x2000) {
|
||||
*(u16 *)(s0 + 0x1A) = 0x2000;
|
||||
*(u16 *)(s0 + 0x18) = 0x2000;
|
||||
}
|
||||
bit = D_800B99DA & 1;
|
||||
D_800CBEA0 = bit - 0x10;
|
||||
D_800CBEA2 = -0x20 - bit;
|
||||
func_8016345C(s1, 0x26, 0, 0x8000, s2);
|
||||
func_80163328(s1);
|
||||
switch (func_801633A8(s1)) {
|
||||
case 1:
|
||||
func_80019064(D_800CBEB0);
|
||||
func_80013E94(D_80114EB0, &work[2]);
|
||||
*(s32 *)&work[2] |= 0x80000000;
|
||||
func_80146A6C(0x1F, (void *)s1, D_80126B18, D_80126B1A, D_80126B1C,
|
||||
*(s32 *)&work[2], 0);
|
||||
s0 = func_801632E0(s1);
|
||||
if (s0 != 0) {
|
||||
if (func_800CB7B0(s1) == 0) {
|
||||
if (*(u16 *)s0 == 0x151) {
|
||||
func_800CB760((void *)s1, 0x7B3);
|
||||
} else {
|
||||
func_800CB760((void *)s1, 0x648);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
func_80013E94(D_80114EC8, &work[2]);
|
||||
*(s32 *)&work[2] |= 0x80000000;
|
||||
func_80146A6C(7, (void *)s1, D_80126B18, D_80126B1A, D_80126B1C,
|
||||
*(s32 *)&work[2], 0);
|
||||
goto L6A8;
|
||||
case 2:
|
||||
break;
|
||||
}
|
||||
flags = func_8016380C(s1, (s32)&work[1]);
|
||||
if (flags & 0x8000) {
|
||||
goto L6A8;
|
||||
}
|
||||
if (!(flags & 0x2000)) {
|
||||
return;
|
||||
}
|
||||
st = work[1].b[6];
|
||||
if (st == 0x19) {
|
||||
if (D_801151D8 != 0) {
|
||||
if (func_800CB7B0(s1) == 0) {
|
||||
func_800CB760((void *)s1, 0x6DE);
|
||||
}
|
||||
}
|
||||
goto L6A8;
|
||||
}
|
||||
if (st != 2) {
|
||||
return;
|
||||
}
|
||||
func_80146A6C(0x10, (void *)s1, *(s16 *)(s1 + 6), *(s16 *)(s1 + 0xA),
|
||||
*(s16 *)(s1 + 0xE), 0, 0);
|
||||
func_80146E90((s32 *)s1, 0x1E);
|
||||
func_80147364(4, 0x649);
|
||||
func_80147324(0x441);
|
||||
func_80146CA0((void *)s1);
|
||||
L6A8:
|
||||
func_80146CA0((void *)s1);
|
||||
}
|
||||
|
||||
|
||||
extern void func_8016634C(void *a0);
|
||||
extern void func_80147364(u16 a0, s32 a1);
|
||||
|
||||
@@ -4792,7 +4792,147 @@ void func_80181D4C(s32 a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_80181EBC);
|
||||
#include "common.h"
|
||||
|
||||
extern s32 func_8012DE2C(s32 a0);
|
||||
extern s32 func_8012DDA4(void);
|
||||
extern void func_8004914C(void *a0);
|
||||
extern void func_800491AC(void *a0);
|
||||
extern void RotTransSV(void *a0, void *a1, void *a2);
|
||||
extern s32 func_800133E4(s16 *a0, s16 *a1);
|
||||
extern u8 D_8018F9A0[];
|
||||
extern u8 D_800AF648;
|
||||
|
||||
#define gte_SetRotMatrix(r0) __asm__ volatile ( \
|
||||
"lw $12, 0( %0 );" \
|
||||
"lw $13, 4( %0 );" \
|
||||
"ctc2 $12, $0;" \
|
||||
"ctc2 $13, $1;" \
|
||||
"lw $12, 8( %0 );" \
|
||||
"lw $13, 12( %0 );" \
|
||||
"lw $14, 16( %0 );" \
|
||||
"ctc2 $12, $2;" \
|
||||
"ctc2 $13, $3;" \
|
||||
"ctc2 $14, $4" \
|
||||
: \
|
||||
: "r"( r0 ) \
|
||||
: "$12", "$13", "$14" )
|
||||
#define gte_SetTransMatrix(r0) __asm__ volatile ( \
|
||||
"lw $12, 20( %0 );" \
|
||||
"lw $13, 24( %0 );" \
|
||||
"ctc2 $12, $5;" \
|
||||
"lw $14, 28( %0 );" \
|
||||
"ctc2 $13, $6;" \
|
||||
"ctc2 $14, $7" \
|
||||
: \
|
||||
: "r"( r0 ) \
|
||||
: "$12", "$13", "$14" )
|
||||
|
||||
extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2);
|
||||
extern u8 D_8018F990[];
|
||||
extern u8 D_8018F998[];
|
||||
extern void (*D_8018F9CC)(void *);
|
||||
extern u8 D_801AE824[];
|
||||
extern s32 D_801AE99C[];
|
||||
extern u8 D_80126B5C;
|
||||
extern s32 D_80126B64;
|
||||
extern u8 D_8018F8E4[];
|
||||
extern void func_8012A828(s32 a0, void *a1);
|
||||
extern void func_8012B2CC(s32 a0);
|
||||
extern void func_8012B1B4(s32 a0, s32 a1);
|
||||
extern void func_8012B23C(s32 a0);
|
||||
extern s32 func_8014CB2C(void);
|
||||
extern s32 ratan2(s32 dx, s32 dy);
|
||||
|
||||
void func_80181EBC(s32 a0)
|
||||
{
|
||||
s16 sv[4];
|
||||
s32 flag;
|
||||
s32 type;
|
||||
s32 ang;
|
||||
s32 e;
|
||||
register s32 pv __asm__("$3");
|
||||
register s32 id __asm__("$18");
|
||||
s32 r;
|
||||
|
||||
if (*(s32 *)(a0 + 0x94) == 4) {
|
||||
func_8012DEB8(a0, (s32)D_8018F990, (s32)D_8018F998);
|
||||
type = 0xA;
|
||||
ang = *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) + 0x800;
|
||||
e = func_8012DE2C(a0);
|
||||
id = 0x1D;
|
||||
if (e != 0) {
|
||||
gte_SetRotMatrix(*(s32 *)(a0 + 0x20) + 0x34);
|
||||
gte_SetTransMatrix(*(s32 *)(a0 + 0x20) + 0x34);
|
||||
RotTransSV(D_8018F9A0, sv, &flag);
|
||||
{
|
||||
u8 *q = &D_800AF648;
|
||||
func_8004914C(q);
|
||||
__asm__ __volatile__("" : "=r"(q));
|
||||
}
|
||||
func_800491AC(&D_800AF648);
|
||||
do {
|
||||
if ((*(u16 *)(e + 0x5C) & 0x8000) && *(u16 *)(e + 0x5E) != id) {
|
||||
if (func_800133E4(sv, (s16 *)(e + 4)) < 0x1E40) {
|
||||
*(u16 *)(e + 0x60) = type;
|
||||
*(u16 *)(e + 0x62) = ang;
|
||||
*(u16 *)(e + 0x5E) = id;
|
||||
*(u16 *)(e + 0x5C) |= 1;
|
||||
}
|
||||
}
|
||||
e = func_8012DDA4();
|
||||
} while (e != 0);
|
||||
}
|
||||
}
|
||||
|
||||
if (*(s16 *)(a0 + 0x98) == 0) {
|
||||
volatile s32 z1;
|
||||
if (*(s16 *)(a0 + 0xFE) == 0) {
|
||||
register s32 w __asm__("$16");
|
||||
*(s16 *)(a0 + 0xFE) += 1;
|
||||
pv = *(s32 *)(a0 + 0x20);
|
||||
w = *(u16 *)(pv + 0x12);
|
||||
r = w & 0xFFF;
|
||||
__asm__("addu %0, %1, $zero" : "=r"(w) : "r"(r));
|
||||
if (r >= 0x801) {
|
||||
r = ratan2(*(s16 *)(a0 + 0xE) - 0x3F0, -0x178 - *(s16 *)(a0 + 6));
|
||||
} else {
|
||||
r = ratan2(*(s16 *)(a0 + 0xE) - 0x390, 0x178 - *(s16 *)(a0 + 6));
|
||||
}
|
||||
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = (r - 0x400) & 0xFFF;
|
||||
__asm__ __volatile__("");
|
||||
func_8012B2CC(a0);
|
||||
func_8012B1B4(a0, (s32)&D_8018F9CC);
|
||||
*(s16 *)(a0 + 0x16) = -0x10;
|
||||
*(u16 *)(a0 + 0xFC) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12);
|
||||
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = w;
|
||||
func_8012B2CC(a0);
|
||||
*(s16 *)(a0 + 2) = 0x14;
|
||||
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x1C) = 0x1000;
|
||||
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) |= 0x10;
|
||||
*(s32 *)(a0 + 0x1C) = 0x1000;
|
||||
} else {
|
||||
*(s16 *)(a0 + 2) = 0x16;
|
||||
func_8012A828(a0, D_801AE824);
|
||||
func_8012B23C(a0);
|
||||
*(s16 *)(a0 + 0x16) = -0x10;
|
||||
*(s32 *)(a0 + 0x10) = (*(s32 *)&D_80126B5C - *(s32 *)(a0 + 4)) >> 5;
|
||||
*(s32 *)(a0 + 0x18) = (D_80126B64 - *(s32 *)(a0 + 0xC)) >> 5;
|
||||
*(s32 *)(a0 + 0x58) = (s32)D_8018F8E4 | 0x40000000 | 0x20000000;
|
||||
}
|
||||
}
|
||||
|
||||
if ((func_8014CB2C() & 0x7FFFFFFF) == 2) {
|
||||
func_8012A828(a0, D_801AE99C);
|
||||
*(s16 *)(a0 + 2) = 0x1B;
|
||||
*(s32 *)(a0 + 0x1C) = 0;
|
||||
*(s16 *)(a0 + 0x12) = -*(s16 *)(a0 + 6) >> 6;
|
||||
*(s16 *)(a0 + 0x16) = -0x10;
|
||||
*(s16 *)(a0 + 0x1A) = (0x3C0 - *(s16 *)(a0 + 0xE)) >> 6;
|
||||
*(s16 *)(a0 + 0xFC) = (-*(s16 *)(a0 + 0xA) - 0x40) / 5;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
||||
@@ -5858,7 +5858,55 @@ void func_8017FFB4(void *a0, void *a1, SVECTOR_80182800 *a2, s32 *a3, SVECTOR_80
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_80180138);
|
||||
extern s32 func_80029178(s32 a0);
|
||||
extern s32 func_8002AE60(void);
|
||||
extern s32 func_80014C54(s32 a0, s32 a1, s32 a2);
|
||||
extern s32 func_800CF8B4();
|
||||
extern void func_800D1724(s32 a0);
|
||||
extern void func_8012B2CC(s32 a0);
|
||||
|
||||
void func_80180138(short *a0) {
|
||||
|
||||
extern void (*D_801859D0)(void *);
|
||||
extern void (*D_80185ED8[])(void *);
|
||||
extern void (*D_80185EFC[])(void *);
|
||||
extern void (*D_80185F10[])(void *);
|
||||
extern void (*D_80185F28[])(void *);
|
||||
extern void (*D_80185F34[])(void *);
|
||||
|
||||
switch (*(s16 *)(a0 + 0x38)) {
|
||||
case 0:
|
||||
D_80185ED8[*(u16 *)(a0 + 1)](a0);
|
||||
break;
|
||||
case 1:
|
||||
D_80185EFC[*(u16 *)(a0 + 1)](a0);
|
||||
break;
|
||||
case 2:
|
||||
if (func_80029178(0x123) & 0xFF) {
|
||||
if (((short (*)(void))func_8002AE60)() << 16 == 0) {
|
||||
if ((func_80014C54(0, 0, 0x800) << 16 != 0) ||
|
||||
(func_80014C54(0, 0, 0x40) << 16 != 0)) {
|
||||
if (func_800CF8B4() != 0) {
|
||||
func_800D1724((s32)&D_801859D0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
D_80185F10[*(u16 *)(a0 + 1)](a0);
|
||||
break;
|
||||
case 3:
|
||||
D_80185F28[*(u16 *)(a0 + 1)](a0);
|
||||
break;
|
||||
case 4:
|
||||
D_80185F34[*(u16 *)(a0 + 1)](a0);
|
||||
break;
|
||||
}
|
||||
|
||||
if ((*(u16 *)a0 != 0) && (*(s32 *)(a0 + 0x10) != 0)) {
|
||||
func_8012B2CC((s32)a0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern void func_8012C1B8(void);
|
||||
extern void func_8012CAE4(void *a0);
|
||||
|
||||
Reference in New Issue
Block a user