diff --git a/src/pilot.c b/src/pilot.c index 1b3ee03..55ce25f 100644 --- a/src/pilot.c +++ b/src/pilot.c @@ -476,15 +476,17 @@ static void pilot_update(Pilot* pilot, const double dt) { return; } /* We are still alive. */ - else if(pilot->armour < pilot->armour_max) { + else if(pilot->armour < pilot->armour_max) /* Regen armour. */ pilot->armour += pilot->armour_regen*dt; - pilot->energy += pilot->energy_regen*dt; - } else { + else /* And shields. */ pilot->shield += pilot->shield_regen*dt; - pilot->energy += pilot->energy_regen*dt; - } + + /* Update energy. */ + if((pilot->energy < 1.) && pilot_isFlag(pilot, PILOT_AFTERBURNER)) + pilot_rmFlag(pilot, PILOT_AFTERBURNER); /* Break afterburner. */ + pilot->energy += pilot->energy_regen * dt; /* Check limits. */ if(pilot->armour > pilot->armour_max) pilot->armour = pilot->armour_max; diff --git a/src/player.c b/src/player.c index c9f068e..7012477 100644 --- a/src/player.c +++ b/src/player.c @@ -1215,11 +1215,15 @@ void player_think(Pilot* pplayer) { if(player_isFlag(PLAYER_SECONDARY)) /* Needs a target. */ pilot_shoot(pplayer, player_target, 1); - if(player_isFlag(PLAYER_AFTERBURNER)) - vect_pset(&pplayer->solid->force, - pplayer->thrust * pplayer->afterburner->outfit->u.afb.thrust_perc + - pplayer->afterburner->outfit->u.afb.thrust_abs, pplayer->solid->dir); - else + /* Afterburn! */ + if(player_isFlag(PLAYER_AFTERBURNER)) { + if(pilot_isFlag(player, PILOT_AFTERBURNER)) + vect_pset(&pplayer->solid->force, + pplayer->thrust * pplayer->afterburner->outfit->u.afb.thrust_perc + + pplayer->afterburner->outfit->u.afb.thrust_abs, pplayer->solid->dir); + else /* Ran out of energy. */ + player_afterburnOver(); + } else vect_pset(&pplayer->solid->force, pplayer->thrust * player_acc, pplayer->solid->dir);