ref: 45b03b36c7b64f5dc884b53e44d899cf18ad5bec
parent: f44bd7da56922c48b42561d39ddf5bd2d81b421e
author: Simon Howard <fraggle@gmail.com>
date: Sat Sep 24 20:36:30 EDT 2011
Fix Strife weapon-cycling rules. Subversion-branch: /branches/v2-branch Subversion-revision: 2402
--- a/src/strife/g_game.c
+++ b/src/strife/g_game.c
@@ -191,15 +191,15 @@
weapontype_t weapon_num;
} weapon_order_table[] = {
{ wp_fist, wp_fist },
- { wp_elecbow, wp_elecbow },
{ wp_poisonbow, wp_elecbow },
+ { wp_elecbow, wp_elecbow },
{ wp_rifle, wp_rifle },
{ wp_missile, wp_missile },
- { wp_hegrenade, wp_hegrenade },
{ wp_wpgrenade, wp_hegrenade },
+ { wp_hegrenade, wp_hegrenade },
{ wp_flame, wp_flame },
- { wp_mauler, wp_mauler },
{ wp_torpedo, wp_mauler },
+ { wp_mauler, wp_mauler },
{ wp_sigil, wp_sigil },
};
@@ -258,14 +258,37 @@
static boolean WeaponSelectable(weapontype_t weapon)
{
+ player_t *player;
+
+ player = &players[consoleplayer];
+
// Can't select a weapon if we don't own it.
- if (!players[consoleplayer].weaponowned[weapon])
+ if (!player->weaponowned[weapon])
{
return false;
}
- // STRIFE-TODO: Special weapon cycling rules?
+ // Can't use registered-only weapons in demo mode:
+
+ if (isdemoversion && !weaponinfo[weapon].availabledemo)
+ {
+ return false;
+ }
+
+ // Special rules for switching to alternate versions of weapons.
+ // These must match the weapon-switching rules in P_PlayerThink()
+
+ if (weapon == wp_torpedo
+ && player->ammo[weaponinfo[am_cell].ammo] < 30)
+ {
+ return false;
+ }
+
+ if (player->ammo[weaponinfo[weapon].ammo] == 0)
+ {
+ return false;
+ }
return true;
}