Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MorsGames
GitHub Repository: MorsGames/sm64plus
Path: blob/master/src/game/behaviors/animated_floor_switch.inc.c
7861 views
1
// animated_floor_switch.inc.c
2
3
struct Struct80331A54 {
4
const void *unk00;
5
s16 unk04;
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 != 2) {
41
o->oFloorSwitchPressAnimationUnk100 = 0;
42
}
43
44
if (o->oFloorSwitchPressAnimationUnkFC != 0) {
45
o->oFloorSwitchPressAnimationUnkF4 = D_80331ACC[o->oBehParams2ndByte];
46
} else {
47
o->oFloorSwitchPressAnimationUnkF4 = 0;
48
}
49
} else if (o->parentObj->oAction == 2) {
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 += 1;
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->oBehParams2ndByte][o->oFloorSwitchPressAnimationUnkF8 / 2].unk00);
75
76
cur_obj_set_model(D_80331A54[o->oBehParams2ndByte][o->oFloorSwitchPressAnimationUnkF8 / 2].unk04);
77
}
78
79