animated_floor_switch.inc.c (2982B)
1 // animated_floor_switch.inc.c 2 3 struct Struct80331A54 { 4 const Collision *collision; 5 s16 model; 6 }; 7 8 struct Struct80331A54 D_80331A54[][5] = { 9 { 10 { bits_seg7_collision_0701B734, MODEL_BITS_STAIRCASE_FRAME4 }, 11 { bits_seg7_collision_0701B59C, MODEL_BITS_STAIRCASE_FRAME3 }, 12 { bits_seg7_collision_0701B404, MODEL_BITS_STAIRCASE_FRAME2 }, 13 { bits_seg7_collision_0701B26C, MODEL_BITS_STAIRCASE_FRAME1 }, 14 { bits_seg7_collision_0701B0D4, MODEL_BITS_STAIRCASE }, 15 }, 16 { 17 { bitdw_seg7_collision_0700FD9C, MODEL_BITDW_STAIRCASE }, 18 { bitdw_seg7_collision_0700FC7C, MODEL_BITDW_STAIRCASE_FRAME1 }, 19 { bitdw_seg7_collision_0700FB5C, MODEL_BITDW_STAIRCASE_FRAME2 }, 20 { bitdw_seg7_collision_0700FA3C, MODEL_BITDW_STAIRCASE_FRAME3 }, 21 { bitdw_seg7_collision_0700F91C, MODEL_BITDW_STAIRCASE_FRAME4 }, 22 }, 23 { 24 { rr_seg7_collision_0702A6B4, MODEL_RR_TRICKY_TRIANGLES_FRAME4 }, 25 { rr_seg7_collision_0702A32C, MODEL_RR_TRICKY_TRIANGLES_FRAME3 }, 26 { rr_seg7_collision_07029FA4, MODEL_RR_TRICKY_TRIANGLES_FRAME2 }, 27 { rr_seg7_collision_07029C1C, MODEL_RR_TRICKY_TRIANGLES_FRAME1 }, 28 { rr_seg7_collision_07029924, MODEL_RR_TRICKY_TRIANGLES }, 29 }, 30 }; 31 32 s16 D_80331ACC[] = { 250, 200, 200 }; 33 34 void bhv_animates_on_floor_switch_press_init(void) { 35 o->parentObj = cur_obj_nearest_object_with_behavior(bhvFloorSwitchAnimatesObject); 36 } 37 38 void bhv_animates_on_floor_switch_press_loop(void) { 39 if (o->oFloorSwitchPressAnimationUnk100 != 0) { 40 if (o->parentObj->oAction != PURPLE_SWITCH_ACT_TICKING) { 41 o->oFloorSwitchPressAnimationUnk100 = 0; 42 } 43 44 if (o->oFloorSwitchPressAnimationUnkFC != 0) { 45 o->oFloorSwitchPressAnimationUnkF4 = D_80331ACC[o->oBhvParams2ndByte]; 46 } else { 47 o->oFloorSwitchPressAnimationUnkF4 = 0; 48 } 49 } else if (o->parentObj->oAction == PURPLE_SWITCH_ACT_TICKING) { 50 o->oFloorSwitchPressAnimationUnkFC ^= 1; 51 o->oFloorSwitchPressAnimationUnk100 = 1; 52 } 53 54 if (o->oFloorSwitchPressAnimationUnkF4 != 0) { 55 if (o->oFloorSwitchPressAnimationUnkF4 < 60) { 56 cur_obj_play_sound_1(SOUND_GENERAL2_SWITCH_TICK_SLOW); 57 } else { 58 cur_obj_play_sound_1(SOUND_GENERAL2_SWITCH_TICK_FAST); 59 } 60 61 if (--o->oFloorSwitchPressAnimationUnkF4 == 0) { 62 o->oFloorSwitchPressAnimationUnkFC = 0; 63 } 64 65 if (o->oFloorSwitchPressAnimationUnkF8 < 9) { 66 o->oFloorSwitchPressAnimationUnkF8++; 67 } 68 } else if ((o->oFloorSwitchPressAnimationUnkF8 -= 2) < 0) { 69 o->oFloorSwitchPressAnimationUnkF8 = 0; 70 o->oFloorSwitchPressAnimationUnkFC = 1; 71 } 72 73 o->collisionData = segmented_to_virtual( 74 D_80331A54[o->oBhvParams2ndByte][o->oFloorSwitchPressAnimationUnkF8 / 2].collision); 75 76 cur_obj_set_model(D_80331A54[o->oBhvParams2ndByte][o->oFloorSwitchPressAnimationUnkF8 / 2].model); 77 }