2019-08-25 00:46:40 -04:00
|
|
|
// bullet_bill.c.inc
|
|
|
|
|
|
|
|
// bullet bill smoke
|
|
|
|
void bhv_white_puff_smoke_init(void) {
|
|
|
|
obj_scale(RandomFloat() * 2 + 2.0);
|
|
|
|
}
|
|
|
|
|
|
|
|
void bhv_bullet_bill_init(void) {
|
|
|
|
o->oBulletBillUnkF8 = o->oMoveAngleYaw;
|
|
|
|
}
|
|
|
|
|
|
|
|
void ActionBulletBill0(void) {
|
|
|
|
obj_become_tangible();
|
|
|
|
o->oForwardVel = 0.0f;
|
|
|
|
o->oMoveAngleYaw = o->oBulletBillUnkF8;
|
|
|
|
o->oFaceAnglePitch = 0;
|
|
|
|
o->oFaceAngleRoll = 0;
|
|
|
|
o->oMoveFlags = 0;
|
|
|
|
obj_set_pos_to_home();
|
|
|
|
o->oAction = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
void ActionBulletBill1(void) {
|
|
|
|
s16 sp1E = abs_angle_diff(o->oAngleToMario, o->oMoveAngleYaw);
|
|
|
|
if (sp1E < 0x2000 && 400.0f < o->oDistanceToMario && o->oDistanceToMario < 1500.0f)
|
|
|
|
o->oAction = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
void ActionBulletBill2(void) {
|
|
|
|
if (o->oTimer < 40)
|
|
|
|
o->oForwardVel = 3.0f;
|
|
|
|
else if (o->oTimer < 50) {
|
|
|
|
if (o->oTimer % 2)
|
|
|
|
o->oForwardVel = 3.0f;
|
|
|
|
else
|
|
|
|
o->oForwardVel = -3.0f;
|
|
|
|
} else {
|
|
|
|
if (o->oTimer > 70)
|
|
|
|
obj_update_floor_and_walls();
|
|
|
|
spawn_object(o, MODEL_SMOKE, bhvWhitePuffSmoke);
|
|
|
|
o->oForwardVel = 30.0f;
|
|
|
|
if (o->oDistanceToMario > 300.0f)
|
|
|
|
obj_rotate_yaw_toward(o->oAngleToMario, 0x100);
|
|
|
|
if (o->oTimer == 50) {
|
2019-10-05 15:08:05 -04:00
|
|
|
PlaySound2(SOUND_OBJ_POUNDING_CANNON);
|
2020-01-03 10:38:57 -05:00
|
|
|
ShakeScreen(SHAKE_POS_SMALL);
|
2019-08-25 00:46:40 -04:00
|
|
|
}
|
|
|
|
if (o->oTimer > 150 || o->oMoveFlags & 0x200) {
|
|
|
|
o->oAction = 3;
|
|
|
|
func_802A3004();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void ActionBulletBill3(void) {
|
|
|
|
o->oAction = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void ActionBulletBill4(void) {
|
|
|
|
if (o->oTimer == 0) {
|
|
|
|
o->oForwardVel = -30.0f;
|
|
|
|
obj_become_intangible();
|
|
|
|
}
|
|
|
|
o->oFaceAnglePitch += 0x1000;
|
|
|
|
o->oFaceAngleRoll += 0x1000;
|
|
|
|
o->oPosY += 20.0f;
|
|
|
|
if (o->oTimer > 90)
|
|
|
|
o->oAction = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void (*sBulletBillActions[])(void) = { ActionBulletBill0, ActionBulletBill1, ActionBulletBill2,
|
|
|
|
ActionBulletBill3, ActionBulletBill4 };
|
|
|
|
|
|
|
|
void bhv_bullet_bill_loop(void) {
|
|
|
|
obj_call_action_function(sBulletBillActions);
|
|
|
|
if (obj_check_interacted())
|
|
|
|
o->oAction = 4;
|
|
|
|
}
|