wdw_water_level.inc.c (2875B)
1 // wdw_water_level.inc.c 2 3 // called when WDW is loaded. 4 void bhv_init_changing_water_level_loop(void) { 5 if (o->oAction == 0) { 6 if (gEnvironmentRegions != NULL) { 7 o->oAction++; 8 } 9 } else if (o->oTimer < 10) { 10 gEnvironmentLevels[0] = gEnvironmentRegions[6]; 11 } else { 12 gEnvironmentRegions[6] = gEnvironmentLevels[0] + sins(o->oWaterLevelTriggerUnkF4) * 20.0f; 13 o->oWaterLevelTriggerUnkF4 += 0x200; 14 } 15 } 16 17 void bhv_water_level_diamond_loop(void) { 18 if (gEnvironmentRegions != NULL) { 19 switch (o->oAction) { 20 case WATER_LEVEL_DIAMOND_ACT_INIT: 21 o->oFaceAngleYaw = 0; 22 o->oWaterLevelTriggerTargetWaterLevel = (s32) o->oPosY; 23 if (o->oTimer > 10) { 24 o->oAction++; // Sets to WATER_LEVEL_DIAMOND_ACT_IDLE 25 } 26 break; 27 28 case WATER_LEVEL_DIAMOND_ACT_IDLE: 29 if (obj_check_if_collided_with_object(o, gMarioObject) && !gWDWWaterLevelChanging) { 30 o->oAction++; // Sets to WATER_LEVEL_DIAMOND_ACT_CHANGE_WATER_LEVEL 31 gWDWWaterLevelChanging = TRUE; 32 } 33 break; 34 35 case WATER_LEVEL_DIAMOND_ACT_CHANGE_WATER_LEVEL: 36 o->oAngleVelYaw = 0; 37 gEnvironmentLevels[0] = (s32) approach_f32_symmetric( 38 (f32) gEnvironmentLevels[0], (f32) o->oWaterLevelTriggerTargetWaterLevel, 10.0f); 39 if (gEnvironmentLevels[0] == o->oWaterLevelTriggerTargetWaterLevel) { 40 if ((s16) o->oFaceAngleYaw == 0) { 41 o->oAction++; // Sets to WATER_LEVEL_DIAMOND_ACT_IDLE_SPINNING 42 } else { 43 o->oAngleVelYaw = 0x800; 44 } 45 } else { 46 if (o->oTimer == 0) { 47 cur_obj_play_sound_2(SOUND_GENERAL_WATER_LEVEL_TRIG); 48 } else { 49 if (gEnvironmentLevels[0] > o->oWaterLevelTriggerTargetWaterLevel) { 50 cur_obj_play_sound_1(SOUND_ENV_WATER_DRAIN); 51 } else { 52 cur_obj_play_sound_1(SOUND_ENV_WATER_DRAIN); // same as above 53 } 54 } 55 o->oAngleVelYaw = 0x800; 56 #if ENABLE_RUMBLE 57 reset_rumble_timers_2(2); 58 #endif 59 } 60 break; 61 62 case WATER_LEVEL_DIAMOND_ACT_IDLE_SPINNING: 63 if (!obj_check_if_collided_with_object(o, gMarioObject)) { 64 gWDWWaterLevelChanging = FALSE; 65 o->oAction = WATER_LEVEL_DIAMOND_ACT_IDLE; 66 o->oAngleVelYaw = 0; 67 } 68 break; 69 } 70 71 o->oFaceAngleYaw += o->oAngleVelYaw; 72 } 73 }