drawbridge.inc.c (1867B)
1 // drawbridge.inc.c 2 3 void bhv_lll_drawbridge_spawner_loop(void) { 4 struct Object *drawbridge1, *drawbridge2; 5 6 drawbridge1 = spawn_object(o, MODEL_LLL_DRAWBRIDGE_PART, bhvLLLDrawbridge); 7 drawbridge1->oMoveAngleYaw = o->oMoveAngleYaw; 8 drawbridge1->oPosX += coss(o->oMoveAngleYaw) * 640.0f; 9 drawbridge1->oPosZ += sins(o->oMoveAngleYaw) * 640.0f; 10 11 drawbridge2 = spawn_object(o, MODEL_LLL_DRAWBRIDGE_PART, bhvLLLDrawbridge); 12 drawbridge2->oMoveAngleYaw = o->oMoveAngleYaw + 0x8000; 13 drawbridge2->oPosX += coss(o->oMoveAngleYaw) * -640.0f; 14 drawbridge2->oPosZ += sins(o->oMoveAngleYaw) * -640.0f; 15 16 o->activeFlags = ACTIVE_FLAG_DEACTIVATED; 17 } 18 19 void bhv_lll_drawbridge_loop(void) { 20 s32 globalTimer = gGlobalTimer; 21 22 switch (o->oAction) { 23 case LLL_DRAWBRIDGE_ACT_LOWER: 24 o->oFaceAngleRoll += 0x100; 25 break; 26 27 case LLL_DRAWBRIDGE_ACT_RAISE: 28 o->oFaceAngleRoll -= 0x100; 29 break; 30 } 31 32 if ((s16) o->oFaceAngleRoll < -0x1FFD) { 33 o->oFaceAngleRoll = 0xDFFF; 34 35 //! Because the global timer increments when the game is paused, pausing and unpausing 36 // the game at regular intervals can leave the drawbridge raised indefinitely. 37 if (o->oTimer > 50 && (globalTimer % 8) == 0) { 38 o->oAction = LLL_DRAWBRIDGE_ACT_LOWER; 39 cur_obj_play_sound_2(SOUND_GENERAL_BOAT_TILT1); 40 } 41 } 42 43 if ((s16) o->oFaceAngleRoll >= 0) { 44 o->oFaceAngleRoll = 0; 45 46 //! Because the global timer increments when the game is paused, pausing and unpausing 47 // the game at regular intervals can leave the drawbridge lowered indefinitely. 48 if (o->oTimer > 50 && (globalTimer % 8) == 0) { 49 o->oAction = LLL_DRAWBRIDGE_ACT_RAISE; 50 cur_obj_play_sound_2(SOUND_GENERAL_BOAT_TILT2); 51 } 52 } 53 }