80 lines
1.8 KiB
C
80 lines
1.8 KiB
C
// spindel.c.inc
|
|
|
|
void bhv_spindel_init(void) {
|
|
o->oHomeY = o->oPosY;
|
|
o->oSpindelUnkF4 = 0;
|
|
o->oSpindelUnkF8 = 0;
|
|
}
|
|
|
|
void bhv_spindel_loop(void) {
|
|
f32 sp1C;
|
|
s32 sp18;
|
|
|
|
if (o->oSpindelUnkF4 == -1) {
|
|
if (o->oTimer == 32) {
|
|
o->oSpindelUnkF4 = 0;
|
|
o->oTimer = 0;
|
|
} else {
|
|
o->oVelZ = 0.0f;
|
|
o->oAngleVelPitch = 0;
|
|
return;
|
|
}
|
|
}
|
|
|
|
sp18 = 10 - o->oSpindelUnkF4;
|
|
|
|
if (sp18 < 0)
|
|
sp18 *= -1;
|
|
|
|
sp18 -= 6;
|
|
if (sp18 < 0)
|
|
sp18 = 0;
|
|
|
|
if (o->oTimer == sp18 + 8) {
|
|
o->oTimer = 0;
|
|
o->oSpindelUnkF4++;
|
|
if (o->oSpindelUnkF4 == 20) {
|
|
if (o->oSpindelUnkF8 == 0) {
|
|
o->oSpindelUnkF8 = 1;
|
|
} else {
|
|
o->oSpindelUnkF8 = 0;
|
|
}
|
|
|
|
o->oSpindelUnkF4 = -1;
|
|
}
|
|
}
|
|
|
|
if (sp18 == 4 || sp18 == 3)
|
|
sp18 = 4;
|
|
else if (sp18 == 2 || sp18 == 1)
|
|
sp18 = 2;
|
|
else if (sp18 == 0)
|
|
sp18 = 1;
|
|
|
|
if (o->oTimer < sp18 * 8) {
|
|
if (o->oSpindelUnkF8 == 0) {
|
|
o->oVelZ = 20 / sp18;
|
|
o->oAngleVelPitch = 1024 / sp18;
|
|
} else {
|
|
o->oVelZ = -20 / sp18;
|
|
o->oAngleVelPitch = -1024 / sp18;
|
|
}
|
|
|
|
o->oPosZ += o->oVelZ;
|
|
o->oMoveAnglePitch += o->oAngleVelPitch;
|
|
|
|
if (absf_2(o->oMoveAnglePitch & 0x1fff) < 800.0f && o->oAngleVelPitch != 0) {
|
|
cur_obj_play_sound_2(SOUND_GENERAL2_SPINDEL_ROLL);
|
|
}
|
|
|
|
sp1C = sins(o->oMoveAnglePitch * 4) * 23.0;
|
|
if (sp1C < 0.0f)
|
|
sp1C *= -1.0f;
|
|
|
|
o->oPosY = o->oHomeY + sp1C;
|
|
|
|
if (o->oTimer + 1 == sp18 * 8)
|
|
set_camera_shake_from_point(SHAKE_POS_SMALL, o->oPosX, o->oPosY, o->oPosZ);
|
|
}
|
|
}
|