feat(decomp): family-remap-hnorm gate — +2 fns x0 propagated (fleet 98.9%)

This commit is contained in:
Drew T
2026-08-29 18:25:50 -06:00
parent f6b36fc2f0
commit aa03070e6d
+113 -2
View File
@@ -3436,7 +3436,96 @@ void func_8017C18C(s32 a0) {
DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */
INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8017AE2C", func_8017C294);
typedef struct { s16 vx, vy; } DVEC2_C59C;
typedef struct { s16 vx, vy, vz, pad; } SVEC_BEBC;
extern s32 func_800491EC(void);
extern void func_8017C66C(u16 *a0, void *a1);
extern int func_8017C710(short *param_1, short *param_2, short *param_3, int param_4);
extern void func_8017C908(s32 a0, s32 a1);
void func_8017C294(void *a0, void *a1, s32 a2)
{
SVEC_BEBC corner[4];
SVEC_BEBC view[4];
SVEC_BEBC hit[4];
SVEC_BEBC org;
SVEC_BEBC eye;
s16 *rect = (s16 *)a0;
s32 i;
s32 x0, y0, x1, y1;
s16 m;
s32 d;
s32 z;
s16 u, v;
s32 mnx, mnz, mxx, mxz;
x0 = rect[0];
y0 = rect[1];
x1 = x0 + rect[2];
y1 = y0 + rect[3];
m = (rect[2] < rect[3]) ? rect[3] : rect[2];
d = (s16)(m / 20);
z = func_800491EC();
corner[0].vx = x0; corner[0].vy = y0; corner[0].vz = z;
corner[1].vx = x1; corner[1].vy = y0; corner[1].vz = z;
corner[2].vx = x0; corner[2].vy = y1; corner[2].vz = z;
corner[3].vx = x1; corner[3].vy = y1; corner[3].vz = z;
org.vx = 0;
org.vy = 0;
org.vz = 0;
func_8017C66C((u16 *)&org, &eye);
for (i = 0; i < 4; i++) {
func_8017C66C((u16 *)&corner[i], &view[i]);
if (func_8017C710((short *)&eye, (short *)&view[i], (short *)&hit[i], a2)) {
func_8017C908((s32)&hit[i], (s32)&corner[i]);
corner[i].vx = (corner[i].vx < x0 - d) ? (x0 - d)
: ((corner[i].vx > x1 + d) ? (x1 + d) : corner[i].vx);
corner[i].vy = (corner[i].vy < y0 - d) ? (y0 - d)
: ((corner[i].vy > y1 + d) ? (y1 + d) : corner[i].vy);
func_8017C66C((u16 *)&corner[i], &view[i]);
func_8017C710((short *)&eye, (short *)&view[i], (short *)&hit[i], a2);
}
}
v = (hit[2].vx > hit[3].vx) ? hit[3].vx : hit[2].vx;
u = (hit[0].vx > hit[1].vx) ? hit[1].vx : hit[0].vx;
if (u > v) u = v;
mnx = u;
if (eye.vx < mnx) mnx = eye.vx;
v = (hit[2].vz > hit[3].vz) ? hit[3].vz : hit[2].vz;
u = (hit[0].vz > hit[1].vz) ? hit[1].vz : hit[0].vz;
if (u > v) u = v;
mnz = u;
if (eye.vz < mnz) mnz = eye.vz;
v = (hit[2].vx < hit[3].vx) ? hit[3].vx : hit[2].vx;
u = (hit[0].vx < hit[1].vx) ? hit[1].vx : hit[0].vx;
if (u < v) u = v;
mxx = u;
if (mxx < eye.vx) mxx = eye.vx;
v = (hit[2].vz < hit[3].vz) ? hit[3].vz : hit[2].vz;
u = (hit[0].vz < hit[1].vz) ? hit[1].vz : hit[0].vz;
if (u < v) u = v;
mxz = u;
if (mxz < eye.vz) mxz = eye.vz;
((s16 *)a1)[0] = mnx;
((s16 *)a1)[1] = mnz;
((s16 *)a1)[2] = mxx - mnx;
((s16 *)a1)[3] = mxz - mnz;
}
DEFINE_func_8017C66C() /* dedup: shared engine-core @0x8017C66C (src/shared) */
@@ -4781,7 +4870,29 @@ void func_8017ED30(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8017AE2C", func_8017ED6C);
extern void func_8012C1B8(void);
extern void func_8001C214(s32 a0, s32 a1);
extern void func_8017F018(s32);
extern s32 func_8012AD50(void *a0);
extern s32 D_801DF018;
extern s32 D_8118596C;
void func_8017ED6C(s32 a0)
{
s32 s1 = a0;
s32 s0;
if ((*(s32 *)(s1 + 0x20) = s0 = ((s32 (*)(void))func_8012C1B8)()) == 0) goto L_end;
func_8001C214(s0, (s32)&D_801DF018);
*(s32 *)(s0 + 0x20) = (s32)&D_8118596C;
((void (*)(u8 *))func_8017F018)((u8 *)s1);
func_8012AD50((void *)s1);
L_end:
return;
}
#include "common.h"