feat(decomp): worker gate — +1 fns x0 propagated (fleet 95.2%)

This commit is contained in:
Drew T
2026-08-13 11:03:52 -06:00
parent 4292f9c1fa
commit 6f44549693
+50 -1
View File
@@ -3488,7 +3488,56 @@ extern s32 func_8012AD50(void *a0);
INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8017BE9C", func_8017E07C);
INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8017BE9C", func_8017E158);
#include "common.h"
/* identical layout to SVECTOR_8016E7C8 (src/shared/engine_types.h);
own tag so this draft compiles standalone via match_one (no shared TU). */
typedef struct { short vx, vy, vz, pad; } SVEC_8017E158;
void func_8017E158(SVEC_8017E158 *p0, SVEC_8017E158 *p1) {
/* conform to the sibling TU's canon (`extern void func_8012EF70(s32, s32);`)
and read the GTE flag through a cast at the call. */
extern void func_8012EF70(s32 a0, s32 a1);
extern void func_8017E3E0(void *a0, void *a1, void *a2, void *a3);
SVEC_8017E158 prev;
SVEC_8017E158 cur;
SVEC_8017E158 lo0;
SVEC_8017E158 lo1;
SVEC_8017E158 sv0;
SVEC_8017E158 sv1;
SVEC_8017E158 sv2;
SVEC_8017E158 sv3;
s32 more;
more = 1;
cur = *p0;
do {
prev = cur;
cur.vz += 0x40;
cur.vy = p0->vy + (p1->vy - p0->vy) * (cur.vz - p0->vz) / (p1->vz - p0->vz);
if (cur.vz >= p1->vz) {
cur.vz = p1->vz;
more = 0;
}
lo0 = prev;
lo0.vy -= 4;
lo1 = cur;
lo1.vy -= 4;
if ((((s32 (*)(void *, void *))func_8012EF70)(&lo0, &sv0) & ~0x1000) == 0 &&
(((s32 (*)(void *, void *))func_8012EF70)(&lo1, &sv1) & ~0x1000) == 0) {
lo0 = prev;
lo0.vy += 4;
lo1 = cur;
lo1.vy += 4;
if ((((s32 (*)(void *, void *))func_8012EF70)(&lo0, &sv2) & ~0x1000) == 0 &&
(((s32 (*)(void *, void *))func_8012EF70)(&lo1, &sv3) & ~0x1000) == 0) {
func_8017E3E0(&sv0, &sv1, &sv2, &sv3);
}
}
} while (more);
}