Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MorsGames
GitHub Repository: MorsGames/sm64plus
Path: blob/master/src/game/behaviors/bullet_bill.inc.c
7861 views
1
// bullet_bill.inc.c
2
3
// bullet bill smoke
4
void bhv_white_puff_smoke_init(void) {
5
cur_obj_scale(random_float() * 2 + 2.0);
6
}
7
8
void bhv_bullet_bill_init(void) {
9
o->oBulletBillInitialMoveYaw = o->oMoveAngleYaw;
10
}
11
12
void bullet_bill_act_0(void) {
13
cur_obj_become_tangible();
14
o->oForwardVel = 0.0f;
15
o->oMoveAngleYaw = o->oBulletBillInitialMoveYaw;
16
o->oFaceAnglePitch = 0;
17
o->oFaceAngleRoll = 0;
18
o->oMoveFlags = 0;
19
cur_obj_set_pos_to_home();
20
o->oAction = 1;
21
}
22
23
void bullet_bill_act_1(void) {
24
s16 sp1E = abs_angle_diff(o->oAngleToMario, o->oMoveAngleYaw);
25
if (sp1E < 0x2000 && 400.0f < o->oDistanceToMario && o->oDistanceToMario < 1500.0f)
26
o->oAction = 2;
27
}
28
29
void bullet_bill_act_2(void) {
30
if (o->oTimer < 40)
31
o->oForwardVel = 3.0f;
32
else if (o->oTimer < 50) {
33
if (o->oTimer % 2)
34
o->oForwardVel = 3.0f;
35
else
36
o->oForwardVel = -3.0f;
37
} else {
38
if (o->oTimer > 70)
39
cur_obj_update_floor_and_walls();
40
spawn_object(o, MODEL_SMOKE, bhvWhitePuffSmoke);
41
o->oForwardVel = 30.0f;
42
if (o->oDistanceToMario > 300.0f)
43
cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x100);
44
if (o->oTimer == 50) {
45
cur_obj_play_sound_2(SOUND_OBJ_POUNDING_CANNON);
46
cur_obj_shake_screen(SHAKE_POS_SMALL);
47
}
48
if (o->oTimer > 150 || o->oMoveFlags & OBJ_MOVE_HIT_WALL) {
49
o->oAction = 3;
50
spawn_mist_particles();
51
}
52
}
53
}
54
55
void bullet_bill_act_3(void) {
56
o->oAction = 0;
57
}
58
59
void bullet_bill_act_4(void) {
60
if (o->oTimer == 0) {
61
o->oForwardVel = -30.0f;
62
cur_obj_become_intangible();
63
}
64
o->oFaceAnglePitch += 0x1000;
65
o->oFaceAngleRoll += 0x1000;
66
o->oPosY += 20.0f;
67
if (o->oTimer > 90)
68
o->oAction = 0;
69
}
70
71
void (*sBulletBillActions[])(void) = { bullet_bill_act_0, bullet_bill_act_1, bullet_bill_act_2,
72
bullet_bill_act_3, bullet_bill_act_4 };
73
74
void bhv_bullet_bill_loop(void) {
75
cur_obj_call_action_function(sBulletBillActions);
76
if (cur_obj_check_interacted())
77
o->oAction = 4;
78
}
79
80