sm64pc/src/game/behaviors/spindrift.inc.c

41 lines
1.2 KiB
C

// spindrift.c.inc
struct ObjectHitbox sSpindriftHitbox = {
/* interactType: */ INTERACT_BOUNCE_TOP,
/* downOffset: */ 0,
/* damageOrCoinValue: */ 2,
/* health: */ 1,
/* numLootCoins: */ 3,
/* radius: */ 90,
/* height: */ 80,
/* hurtboxRadius: */ 80,
/* hurtboxHeight: */ 70,
};
void bhv_spindrift_loop(void) {
o->activeFlags |= 0x400;
if (cur_obj_set_hitbox_and_die_if_attacked(&sSpindriftHitbox, SOUND_OBJ_DYING_ENEMY1, 0))
cur_obj_change_action(1);
cur_obj_update_floor_and_walls();
switch (o->oAction) {
case 0:
approach_forward_vel(&o->oForwardVel, 4.0f, 1.0f);
if (cur_obj_lateral_dist_from_mario_to_home() > 1000.0f)
o->oAngleToMario = cur_obj_angle_to_home();
else if (o->oDistanceToMario > 300.0f)
o->oAngleToMario = obj_angle_to_object(o, gMarioObject);
cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x400);
break;
case 1:
o->oFlags &= ~8;
o->oForwardVel = -10.0f;
if (o->oTimer > 20) {
o->oAction = 0;
o->oInteractStatus = 0;
o->oFlags |= 8;
}
break;
}
cur_obj_move_standard(-60);
}