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

32 lines
934 B
C

/**
* Behavior for bhvDecorativePendulum.
* This controls the pendulum that lies underneath the Tick Tock Clock painting.
*/
void bhv_decorative_pendulum_init(void) {
o->oAngleVelRoll = 0x100;
bhv_init_room();
}
/**
* Smoothly swing the decorative pendulum back and forth using constant angular
* acceleration.
*/
void bhv_decorative_pendulum_loop(void) {
if (o->oFaceAngleRoll > 0)
o->oAngleVelRoll -= 0x08;
else
o->oAngleVelRoll += 0x08;
o->oFaceAngleRoll += o->oAngleVelRoll;
/**
* This if-statement is true twice in the span of 5 frames when
* oAngleVelRoll takes values in {0x10, 0x08, 0x00, -0x08, -0x10}.
* This means the sound we hear when the pendulum hits its upswing is
* actually one sound played twice in rapid succession.
*/
if (o->oAngleVelRoll == 0x10 || o->oAngleVelRoll == -0x10)
cur_obj_play_sound_2(SOUND_GENERAL_BIG_CLOCK);
}