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

38 lines
1.1 KiB
C

// white_puff_explode.c.inc
void bhv_white_puff_exploding_loop(void) {
f32 sp24;
if (o->oTimer == 0) {
cur_obj_compute_vel_xz();
o->oWhitePuffUnkF4 = o->header.gfx.scale[0];
switch (o->oBehParams2ndByte) {
case 2:
o->oOpacity = 254;
o->oWhitePuffUnkF8 = -21;
o->oWhitePuffUnkFC = 0;
break;
case 3:
o->oOpacity = 254;
o->oWhitePuffUnkF8 = -13;
o->oWhitePuffUnkFC = 1;
break;
}
}
cur_obj_move_using_vel_and_gravity();
cur_obj_apply_drag_xz(o->oDragStrength);
if (o->oVelY > 100.0f)
o->oVelY = 100.0f;
if (o->oTimer > 20)
obj_mark_for_deletion(o);
if (o->oOpacity) {
o->oOpacity += o->oWhitePuffUnkF8;
if (o->oOpacity < 2)
obj_mark_for_deletion(o);
if (o->oWhitePuffUnkFC)
sp24 = o->oWhitePuffUnkF4 * ((254 - o->oOpacity) / 254.0);
else
sp24 = o->oWhitePuffUnkF4 * (o->oOpacity / 254.0);
cur_obj_scale(sp24);
}
}