Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MorsGames
GitHub Repository: MorsGames/sm64plus
Path: blob/master/src/game/behaviors/cannon_door.inc.c
7861 views
1
// cannon.c.inc
2
3
void bhv_cannon_closed_init(void) {
4
struct Object *cannon;
5
6
if (save_file_is_cannon_unlocked() == 1) {
7
// If the cannon is open, spawn a cannon and despawn the object.
8
cannon = spawn_object(o, MODEL_CANNON_BASE, bhvCannon);
9
cannon->oBehParams2ndByte = o->oBehParams2ndByte;
10
cannon->oPosX = o->oHomeX;
11
cannon->oPosY = o->oHomeY;
12
cannon->oPosZ = o->oHomeZ;
13
14
o->oAction = CANNON_TRAP_DOOR_ACT_OPEN;
15
o->activeFlags = ACTIVE_FLAG_DEACTIVATED;
16
}
17
}
18
19
void cannon_door_act_opening(void) {
20
if (o->oTimer == 0)
21
cur_obj_play_sound_2(SOUND_GENERAL_CANNON_UP);
22
23
if (o->oTimer < 30) {
24
o->oVelY = -0.5f;
25
o->oPosY += o->oVelY;
26
o->oVelX = 0;
27
} else {
28
if (o->oTimer == 80) {
29
bhv_cannon_closed_init();
30
return;
31
}
32
33
o->oVelX = 4.0f;
34
o->oVelY = 0;
35
o->oPosX += o->oVelX;
36
}
37
}
38
39
void bhv_cannon_closed_loop(void) {
40
switch (o->oAction) {
41
case CANNON_TRAP_DOOR_ACT_CLOSED:
42
o->oVelX = 0;
43
o->oVelY = 0;
44
o->oDrawingDistance = 4000.0f;
45
46
if (save_file_is_cannon_unlocked() == 1)
47
o->oAction = CANNON_TRAP_DOOR_ACT_CAM_ZOOM;
48
break;
49
50
case CANNON_TRAP_DOOR_ACT_CAM_ZOOM:
51
if (o->oTimer == 60)
52
o->oAction = CANNON_TRAP_DOOR_ACT_OPENING;
53
54
o->oDrawingDistance = 20000.0f;
55
break;
56
57
case CANNON_TRAP_DOOR_ACT_OPENING:
58
cannon_door_act_opening();
59
break;
60
}
61
}
62
63