mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-27 22:45:39 -04:00
feat(decomp): family-remap-hnorm gate — +1 fns x0 propagated (fleet 98.9%)
This commit is contained in:
@@ -3957,7 +3957,96 @@ void func_8017CDF4(int a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8017AE2C", func_8017CE58);
|
||||
typedef struct { s16 vx, vy; } DVEC2_C59C;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
typedef struct { s16 vx, vy, vz, pad; } SVEC_BEBC;
|
||||
|
||||
extern s32 func_800491EC(void);
|
||||
extern void func_8017D230(u16 *a0, void *a1);
|
||||
extern int func_8017D2D4(short *param_1, short *param_2, short *param_3, int param_4);
|
||||
extern void func_8017D4CC(s32 a0, s32 a1);
|
||||
|
||||
void func_8017CE58(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_8017D230((u16 *)&org, &eye);
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
func_8017D230((u16 *)&corner[i], &view[i]);
|
||||
if (func_8017D2D4((short *)&eye, (short *)&view[i], (short *)&hit[i], a2)) {
|
||||
func_8017D4CC((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_8017D230((u16 *)&corner[i], &view[i]);
|
||||
func_8017D2D4((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;
|
||||
}
|
||||
|
||||
|
||||
extern void ReadRotMatrix(void *a0);
|
||||
extern void PushMatrix(void);
|
||||
|
||||
Reference in New Issue
Block a user