.float multijump_count;
void CheckPlayerJump()
{
- if (self.BUTTON_JUMP)
+ float was_flying = self.items & IT_USING_JETPACK;
+
+ if (self.cvar_cl_jetpack_jump < 2)
+ self.items &= ~IT_USING_JETPACK;
+
+ if (self.BUTTON_JUMP || self.BUTTON_JETPACK)
{
- if (!PlayerJump() || self.multijump_count > 0)
+ float air_jump = !PlayerJump() || self.multijump_count > 0; // PlayerJump() has important side effects
+ float activate = self.cvar_cl_jetpack_jump && air_jump && self.BUTTON_JUMP || self.BUTTON_JETPACK;
+ float has_fuel = !autocvar_g_jetpack_fuel || self.ammo_fuel || self.items & IT_UNLIMITED_WEAPON_AMMO;
+ if (!(self.items & IT_JETPACK)) { }
+ else if (self.jetpack_stopped) { }
+ else if (!has_fuel)
{
- if (!self.jetpack_stopped && (!autocvar_g_jetpack_fuel || self.ammo_fuel > 0 || self.items & IT_UNLIMITED_WEAPON_AMMO) && !self.frozen)
- {
- self.items |= IT_USING_JETPACK;
- }
- else
- {
- // we get here if we ran out of ammo
- if (!self.jetpack_stopped)
- sprint(self, "You don't have any fuel for the ^2Jetpack\n");
- self.jetpack_stopped = TRUE;
- self.items &= ~IT_USING_JETPACK;
- }
+ if (was_flying) // TODO: ran out of fuel message
+ Send_Notification(NOTIF_ONE, self, MSG_INFO, INFO_JETPACK_NOFUEL);
+ else if (activate)
+ Send_Notification(NOTIF_ONE, self, MSG_INFO, INFO_JETPACK_NOFUEL);
+ self.jetpack_stopped = TRUE;
+ self.items &= ~IT_USING_JETPACK;
}
+ else if (activate && !self.frozen)
+ self.items |= IT_USING_JETPACK;
}
else
{
- self.flags |= FL_JUMPRELEASED;
self.jetpack_stopped = FALSE;
self.items &= ~IT_USING_JETPACK;
}
+ if (!self.BUTTON_JUMP)
+ self.flags |= FL_JUMPRELEASED;
if (self.waterlevel == WATERLEVEL_SWIMMING)
CheckWaterJump ();
bot_think();
}
- self.items &= ~IT_USING_JETPACK;
-
if(IS_PLAYER(self))
{
if(self.race_penalty)
}
else if (self.flags & FL_ONGROUND)
{
+ // we get here if we ran out of ammo
+ if((self.items & IT_JETPACK) && self.BUTTON_HOOK && !(buttons_prev & 32) && self.ammo_fuel < 0.01)
+ Send_Notification(NOTIF_ONE, self, MSG_INFO, INFO_JETPACK_NOFUEL);
+
// walking
makevectors(self.v_angle_y * '0 1 0');
wishvel = v_forward * self.movement_x + v_right * self.movement_y;
else
{
float wishspeed0;
+ // we get here if we ran out of ammo
+ if((self.items & IT_JETPACK) && self.BUTTON_HOOK && !(buttons_prev & 32) && self.ammo_fuel < 0.01)
+ Send_Notification(NOTIF_ONE, self, MSG_INFO, INFO_JETPACK_NOFUEL);
if(maxspd_mod < 1)
{