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

40 lines
1.3 KiB
C

// wind.c.inc
void spawn_wind_particles(s16 pitch, s16 yaw) {
s32 i;
for (i = 0; i < 3; i++) {
struct Object *wind = spawn_object(o, MODEL_MIST, bhvWind);
wind->oMoveAngleYaw = yaw;
wind->oMoveAnglePitch = pitch;
}
}
void bhv_wind_loop(void) {
s16 sp2E = 500;
f32 sp28 = 1.0f;
if (o->oTimer == 0) {
o->oOpacity = 100;
if (o->oMoveAnglePitch == 0) {
obj_translate_xz_random(o, 900.0f);
o->oPosX += sins(o->oMoveAngleYaw + 0x8000) * sp2E; // NOP as Pitch is 0
o->oPosY += 80.0f + random_f32_around_zero(200.0f);
o->oPosZ += coss(o->oMoveAngleYaw + 0x8000) * sp2E; // -coss(a) * sp2E
o->oMoveAngleYaw += random_f32_around_zero(4000.0f);
o->oForwardVel = random_float() * 70.0f + 50.0f;
} else {
obj_translate_xz_random(o, 600.0f);
o->oPosY -= sp2E - 200; // 300
o->oVelY = random_float() * 30.0f + 50.0f;
o->oMoveAngleYaw = random_u16();
o->oForwardVel = 10.0f;
}
obj_set_billboard(o);
cur_obj_scale(sp28);
}
if (o->oTimer > 8)
obj_mark_for_deletion(o);
o->oFaceAnglePitch += 4000.0f + 2000.0f * random_float();
o->oFaceAngleYaw += 4000.0f + 2000.0f * random_float();
cur_obj_move_using_fvel_and_gravity();
}