From: travi$ Date: Sun, 27 Mar 2022 08:57:34 +0000 (+0300) Subject: Fix BFG and SSG empty switching X-Git-Url: http://deadsoftware.ru/gitweb?a=commitdiff_plain;h=1faa4ed48a2107743f3f77c9ee966eb4c29c18e0;p=d2df-sdl.git Fix BFG and SSG empty switching --- diff --git a/src/game/g_player.pas b/src/game/g_player.pas index f80d721..f1a38c9 100644 --- a/src/game/g_player.pas +++ b/src/game/g_player.pas @@ -240,6 +240,7 @@ type function getNextWeaponIndex (): Byte; // return 255 for "no switch" procedure resetWeaponQueue (); function hasAmmoForWeapon (weapon: Byte): Boolean; + function hasAmmoForShooting (weapon: Byte): Boolean; function shouldSwitch (weapon: Byte; hadWeapon: Boolean) : Boolean; procedure doDamage (v: Integer); @@ -2047,7 +2048,7 @@ begin if (FSkipFist = 1) and (not (R_BERSERK in FRulez)) then result := false; end - else if (FSwitchToEmpty = 0) and (not hasAmmoForWeapon(Weapon)) then + else if (FSwitchToEmpty = 0) and (not hasAmmoForShooting(Weapon)) then result := false end; @@ -3780,6 +3781,22 @@ begin end; end; +function TPlayer.hasAmmoForShooting (weapon: Byte): Boolean; +begin + result := false; + case weapon of + WEAPON_KASTET, WEAPON_SAW: result := true; + WEAPON_SHOTGUN1, WEAPON_SUPERPULEMET: result := (FAmmo[A_SHELLS] > 0); + WEAPON_SHOTGUN2: result := (FAmmo[A_SHELLS] > 1); + WEAPON_PISTOL, WEAPON_CHAINGUN: result := (FAmmo[A_BULLETS] > 0); + WEAPON_ROCKETLAUNCHER: result := (FAmmo[A_ROCKETS] > 0); + WEAPON_PLASMA: result := (FAmmo[A_CELLS] > 0); + WEAPON_BFG: result := (FAmmo[A_CELLS] >= 40); + WEAPON_FLAMETHROWER: result := (FAmmo[A_FUEL] > 0); + else result := (weapon < length(FWeapon)); + end; +end; + function TPlayer.shouldSwitch (weapon: Byte; hadWeapon: Boolean): Boolean; begin result := false;