sm64pc/src/game/behaviors/lll_tilting_platform.inc.c

95 lines
2.5 KiB
C

// lll_tilting_platform.c.inc
void func_802BC544(Mat4 a0, f32 a1, f32 a2, f32 a3) {
Vec3f sp24;
Vec3f sp18;
sp18[0] = o->oPosX;
sp18[1] = o->oPosY;
sp18[2] = o->oPosZ;
sp24[0] = a1;
sp24[1] = a2;
sp24[2] = a3;
mtxf_align_terrain_normal(a0, sp24, sp18, 0);
}
void bhv_tilting_platform_init(void) {
Mat4 *sp1C = &o->transform;
o->oTiltingPlatformUnkF4 = 0.0f;
o->oTiltingPlatformUnkF8 = 1.0f;
o->oTiltingPlatformUnkFC = 0.0f;
func_802BC544(*sp1C, 0.0f, 1.0f, 0.0f);
}
f32 func_802BC66C(f32 a0, f32 a1, f32 a2) {
f32 sp4;
if (a1 <= a0) {
if (a0 - a1 < a2)
sp4 = a0;
else
sp4 = a1 + a2;
} else if (a0 - a1 > -a2)
sp4 = a0;
else
sp4 = a1 - a2;
return sp4;
}
void bhv_tilting_platform_loop(void) {
f32 dx;
f32 dy;
f32 dz;
f32 d;
Vec3f dist;
Vec3f sp58;
Vec3f sp4C;
f32 mx;
f32 my;
f32 mz;
s32 sp3C = 0;
UNUSED s32 unused;
Mat4 *sp34 = &o->transform;
UNUSED s32 unused2[7];
if (gMarioObject->platform == o) {
get_mario_pos(&mx, &my, &mz);
dist[0] = gMarioObject->oPosX - o->oPosX;
dist[1] = gMarioObject->oPosY - o->oPosY;
dist[2] = gMarioObject->oPosZ - o->oPosZ;
linear_mtxf_mul_vec3f(*sp34, sp58, dist);
dx = gMarioObject->oPosX - o->oPosX;
dy = 500.0f;
dz = gMarioObject->oPosZ - o->oPosZ;
d = sqrtf(dx * dx + dy * dy + dz * dz);
if (d != 0.0f) // Normalizing
{
d = 1.0 / d;
dx *= d;
dy *= d;
dz *= d;
} else {
dx = 0.0f;
dy = 1.0f;
dz = 0.0f;
}
if (o->oTiltingPlatformUnk10C == 1)
sp3C++;
o->oTiltingPlatformUnk10C = 1;
} else {
dx = 0.0f;
dy = 1.0f;
dz = 0.0f;
o->oTiltingPlatformUnk10C = 0;
}
o->oTiltingPlatformUnkF4 = func_802BC66C(dx, o->oTiltingPlatformUnkF4, 0.01f);
o->oTiltingPlatformUnkF8 = func_802BC66C(dy, o->oTiltingPlatformUnkF8, 0.01f);
o->oTiltingPlatformUnkFC = func_802BC66C(dz, o->oTiltingPlatformUnkFC, 0.01f);
func_802BC544(*sp34, o->oTiltingPlatformUnkF4, o->oTiltingPlatformUnkF8, o->oTiltingPlatformUnkFC);
if (sp3C != 0) {
linear_mtxf_mul_vec3f(*sp34, sp4C, dist);
mx += sp4C[0] - sp58[0];
my += sp4C[1] - sp58[1];
mz += sp4C[2] - sp58[2];
set_mario_pos(mx, my, mz);
}
o->header.gfx.throwMatrix = sp34;
}