diff --git a/d1x-rebirth/main/laser.c b/d1x-rebirth/main/laser.c index fdbb2adf5..d510811b1 100644 --- a/d1x-rebirth/main/laser.c +++ b/d1x-rebirth/main/laser.c @@ -1048,6 +1048,16 @@ fix64 Last_laser_fired_time = 0; extern int Player_fired_laser_this_frame; +static inline int sufficient_energy(int energy_used, fix energy) +{ + return !energy_used || (energy >= energy_used); +} + +static inline int sufficient_ammo(int ammo_used, int uses_vulcan_ammo, ushort vulcan_ammo) +{ + return !ammo_used || (!uses_vulcan_ammo || vulcan_ammo >= ammo_used); +} + // -------------------------------------------------------------------------------------------------- // Assumption: This is only called by the actual console player, not for // network players @@ -1073,8 +1083,10 @@ int do_laser_firing_player(void) ammo_used = Weapon_info[weapon_index].ammo_usage; + int uses_vulcan_ammo = weapon_index_uses_vulcan_ammo(Primary_weapon); + while (Next_laser_fire_time <= GameTime64) { - if ((plp->energy >= energy_used) || (weapon_index_uses_vulcan_ammo(Primary_weapon) && (plp->vulcan_ammo >= ammo_used)) ) { + if (sufficient_energy(energy_used, plp->energy) && sufficient_ammo(ammo_used, uses_vulcan_ammo, plp->vulcan_ammo)) { int laser_level, flags, fire_frame_overhead = 0; if (GameTime64 - Next_laser_fire_time <= FrameTime) // if firing is prolonged by FrameTime overhead, let's try to fix that. diff --git a/d2x-rebirth/main/laser.c b/d2x-rebirth/main/laser.c index 74d7acba7..05be6f1f1 100644 --- a/d2x-rebirth/main/laser.c +++ b/d2x-rebirth/main/laser.c @@ -1500,6 +1500,16 @@ fix64 Last_laser_fired_time = 0; extern int Player_fired_laser_this_frame; +static inline int sufficient_energy(int energy_used, fix energy) +{ + return !energy_used || (energy >= energy_used); +} + +static inline int sufficient_ammo(int ammo_used, int uses_vulcan_ammo, ushort vulcan_ammo) +{ + return !ammo_used || (!uses_vulcan_ammo || vulcan_ammo >= ammo_used); +} + // -------------------------------------------------------------------------------------------------- // Assumption: This is only called by the actual console player, not for network players @@ -1507,7 +1517,7 @@ int do_laser_firing_player(void) { player *plp = &Players[Player_num]; fix energy_used; - int ammo_used,primary_ammo; + int ammo_used; int weapon_index; int rval = 0; int nfires = 1; @@ -1531,13 +1541,13 @@ int do_laser_firing_player(void) if (Game_mode & GM_MULTI) energy_used *= 2; - primary_ammo = (weapon_index_uses_vulcan_ammo(Primary_weapon))?(plp->vulcan_ammo):0; + int uses_vulcan_ammo = weapon_index_uses_vulcan_ammo(Primary_weapon); - if (!((plp->energy >= energy_used) && (primary_ammo >= ammo_used))) + if (!(sufficient_energy(energy_used, plp->energy) && sufficient_ammo(ammo_used, uses_vulcan_ammo, plp->vulcan_ammo))) auto_select_weapon(0); // Make sure the player can fire from this weapon. while (Next_laser_fire_time <= GameTime64) { - if ((plp->energy >= energy_used) && (primary_ammo >= ammo_used)) { + if (sufficient_energy(energy_used, plp->energy) && sufficient_ammo(ammo_used, uses_vulcan_ammo, plp->vulcan_ammo)) { int laser_level, flags, fire_frame_overhead = 0; if (GameTime64 - Next_laser_fire_time <= FrameTime) // if firing is prolonged by FrameTime overhead, let's try to fix that. @@ -1574,7 +1584,7 @@ int do_laser_firing_player(void) if (plp->energy < 0) plp->energy = 0; - if (weapon_index_uses_vulcan_ammo(Primary_weapon)) { + if (uses_vulcan_ammo) { if (ammo_used > plp->vulcan_ammo) plp->vulcan_ammo = 0; else