sm64

A Super Mario 64 decompilation
Log | Files | Refs | README | LICENSE

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 }