From 7673bba50d3cbf3e7d5c3c581b8362c7b15725e5 Mon Sep 17 00:00:00 2001 From: Kp Date: Sat, 19 Sep 2015 23:04:36 +0000 Subject: [PATCH] Factor out special handling of super laser --- similar/main/weapon.cpp | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/similar/main/weapon.cpp b/similar/main/weapon.cpp index 66bc4a122..ee99eeb96 100644 --- a/similar/main/weapon.cpp +++ b/similar/main/weapon.cpp @@ -126,6 +126,15 @@ array Primary_last_was_super; array Secondary_last_was_super; #endif +static unsigned get_mapped_weapon_index(unsigned weapon_index = Primary_weapon) +{ +#if defined(DXX_BUILD_DESCENT_II) + if (weapon_index == LASER_INDEX && get_local_player().laser_level > MAX_LASER_LEVEL) + return SUPER_LASER_INDEX; +#endif + return weapon_index; +} + // ; (0) Laser Level 1 // ; (1) Laser Level 2 // ; (2) Laser Level 3 @@ -241,16 +250,10 @@ void InitWeaponOrdering () void CyclePrimary () { - int cur_order_slot, desired_weapon = Primary_weapon, loop=0; + int desired_weapon = Primary_weapon, loop=0; const int autoselect_order_slot = POrderList(255); -#if defined(DXX_BUILD_DESCENT_II) - // some remapping for SUPER LASER which is not an actual weapon type at all - if (Primary_weapon == LASER_INDEX && get_local_player().laser_level > MAX_LASER_LEVEL) - cur_order_slot = POrderList(SUPER_LASER_INDEX); - else -#endif - cur_order_slot = POrderList(Primary_weapon); + auto cur_order_slot = POrderList(get_mapped_weapon_index()); const int use_restricted_autoselect = (cur_order_slot < autoselect_order_slot) && (1 < autoselect_order_slot) && (PlayerCfg.CycleAutoselectOnly); while (loop<(MAX_PRIMARY_WEAPONS+1)) @@ -794,7 +797,7 @@ int pick_up_primary(int weapon_index) { //ushort old_flags = Players[Player_num].primary_weapon_flags; ushort flag = HAS_PRIMARY_FLAG(weapon_index); - int cutpoint, supposed_weapon=Primary_weapon; + int cutpoint; if (weapon_index!=LASER_INDEX && get_local_player().primary_weapon_flags & flag) { //already have HUD_init_message(HM_DEFAULT|HM_REDUNDANT|HM_MAYDUPL, "%s %s!", TXT_ALREADY_HAVE_THE, PRIMARY_WEAPON_NAMES(weapon_index)); @@ -805,11 +808,7 @@ int pick_up_primary(int weapon_index) cutpoint=POrderList (255); -#if defined(DXX_BUILD_DESCENT_II) - if (Primary_weapon==LASER_INDEX && get_local_player().laser_level>=4) - supposed_weapon=SUPER_LASER_INDEX; // allotment for stupid way of doing super laser -#endif - + const auto supposed_weapon = get_mapped_weapon_index(); if (((Controls.state.fire_primary && PlayerCfg.NoFireAutoselect)?0:1) && POrderList(weapon_index) < cutpoint && POrderList(weapon_index)= LASER_LEVEL_5 - ? SUPER_LASER_INDEX // allotment for stupid way of doing super laser - : -#endif - primary_weapon; + const auto supposed_weapon = get_mapped_weapon_index(primary_weapon); const auto weapon_index = primary_weapon_index_t::VULCAN_INDEX; const auto powi = POrderList(weapon_index); if (powi < cutpoint &&