From d9ca0efe35fd9b4bb8430cbd5ca348fd459955c7 Mon Sep 17 00:00:00 2001 From: DeaDDooMER Date: Fri, 4 Jan 2019 22:58:38 +0300 Subject: [PATCH] Revert "fixed weapon selector: forgot to add rocket launcher to priority list; also, weapon selector used logical weapon numbers to check real arrays" This reverts commit b2a3a1d36f49c0bfe00eb3ead99abc98b388431b. --- src/game/g_player.pas | 61 +++++++++++++++---------------------------- 1 file changed, 21 insertions(+), 40 deletions(-) diff --git a/src/game/g_player.pas b/src/game/g_player.pas index fd525e1..980842c 100644 --- a/src/game/g_player.pas +++ b/src/game/g_player.pas @@ -3588,9 +3588,9 @@ function TPlayer.getNextWeaponIndex (): Byte; var i: Word; wantThisWeapon: array[0..64] of Boolean; - weaponOrder: array[0..16] of Integer; // value: index in `FWeapon` - wwc: Integer; - f, dir, cwi, rwidx, curlidx: Integer; + weaponOrder: array[0..64] of Integer; // value: index in `FWeapon` + wwc: Integer = 0; //HACK! + dir, cwi, rwidx, curlidx: Integer; function real2log (ridx: Integer): Integer; var @@ -3598,7 +3598,7 @@ var begin if (ridx >= 0) then begin - for f := 0 to High(weaponOrder) do if (weaponOrder[f] = ridx) then begin result := f; exit; end; + for f := 0 to 10 do if (weaponOrder[f] = ridx) then begin result := f; exit; end; end; result := -1; end; @@ -3613,39 +3613,22 @@ begin FNextWeapDelay := 0; end; - for f := 0 to High(weaponOrder) do weaponOrder[f] := -1; - // build weapon order (k8: i know, i know, learn how to do constants and such... gtfo, please!) - // two knuckles are for "normal" and "berserk" (see `if` below -- it removes the one that is not needed) // priorities: - // bfg, launcher, plasma, flamethrower, ssg, minigun, sg, pistol, berserk, chainsaw, fist + // bfg, plasma, flamethrower, ssg, minigun, sg, pistol, berserk, chainsaw, fist weaponOrder[0] := WEAPON_BFG; - weaponOrder[1] := WEAPON_ROCKETLAUNCHER; - weaponOrder[2] := WEAPON_PLASMA; - weaponOrder[3] := WEAPON_FLAMETHROWER; - weaponOrder[4] := WEAPON_SHOTGUN2; - weaponOrder[5] := WEAPON_CHAINGUN; - weaponOrder[6] := WEAPON_SHOTGUN1; - weaponOrder[7] := WEAPON_PISTOL; - weaponOrder[8] := WEAPON_KASTET; // normal fist - weaponOrder[9] := WEAPON_SAW; - weaponOrder[10] := WEAPON_KASTET+666; // berserk fist - weaponOrder[11] := WEAPON_SUPERPULEMET; - - for f := 0 to High(weaponOrder) do - begin - if (weaponOrder[f] = WEAPON_KASTET) then - begin - // normal fist: remove if we have a berserk pack - if (R_BERSERK in FRulez) then weaponOrder[f] := -1; - end - else - if (weaponOrder[f] = WEAPON_KASTET+666) then - begin - // berserk fist: remove if we don't have a berserk pack - if (R_BERSERK in FRulez) then weaponOrder[f] := WEAPON_KASTET else weaponOrder[f] := -1; - end; - end; + weaponOrder[1] := WEAPON_PLASMA; + weaponOrder[2] := WEAPON_FLAMETHROWER; + weaponOrder[3] := WEAPON_SHOTGUN2; + weaponOrder[4] := WEAPON_CHAINGUN; + weaponOrder[5] := WEAPON_SHOTGUN1; + weaponOrder[6] := WEAPON_PISTOL; + weaponOrder[7] := WEAPON_KASTET; + weaponOrder[8] := WEAPON_SAW; + weaponOrder[9] := WEAPON_KASTET; + weaponOrder[10] := WEAPON_SUPERPULEMET; + + if (R_BERSERK in FRulez) then weaponOrder[9] := -1 else weaponOrder[7] := -1; (* WEAPON_KASTET = 0; @@ -3690,7 +3673,6 @@ begin // no cycling for i := 0 to High(wantThisWeapon) do wantThisWeapon[i] := false; - wwc := 0; for i := 0 to High(FWeapon) do begin if (FNextWeap and (1 shl i)) <> 0 then @@ -3704,10 +3686,10 @@ begin // slow down alterations a little if (wwc > 1) then begin + //e_WriteLog(Format(' FNextWeap=%x; delay=%d', [FNextWeap, FNextWeapDelay]), MSG_WARNING); // more than one weapon requested, assume "alteration", and check alteration delay if FNextWeapDelay > 0 then begin - //e_WriteLog(Format(' FNextWeap=%x; delay=%d', [FNextWeap, FNextWeapDelay]), TMsgType.Warning); FNextWeap := 0; exit; end; // yeah @@ -3720,10 +3702,10 @@ begin resetWeaponQueue(); exit; end; + //e_WriteLog(Format('wwc=%d', [wwc]), TMsgType.Warning); // exclude currently selected weapon from the set curlidx := real2log(FCurrWeap); - //e_WriteLog(Format('*** wwc=%d; currweap=%d; logweap=%d', [wwc, FCurrWeap, curlidx]), TMsgType.Warning); //e_WriteLog(Format('FCurrWeap=%d; curlidx=%d', [FCurrWeap, curlidx]), TMsgType.Warning); //if (curlidx >= 0) then wantThisWeapon[curlidx] := false; //if (wwc = 2) then begin Dec(wwc); end; // easy case: switch between two weapons @@ -3738,9 +3720,8 @@ begin rwidx := weaponOrder[cwi]; if (rwidx < 0) then continue; //e_WriteLog(Format(' trying logical %d (real %d)', [cwi, rwidx]), TMsgType.Warning); - if FWeapon[rwidx] and ((wwc = 1) or hasAmmoForWeapon(rwidx)) then + if FWeapon[cwi] and ((wwc = 1) or hasAmmoForWeapon(cwi)) then begin - //e_WriteLog(' I FOUND HER!', TMsgType.Warning); // i found her! result := Byte(rwidx); resetWeaponQueue(); @@ -3788,7 +3769,7 @@ begin if nw > High(FWeapon) then begin // don't forget to reset queue here! - //e_WriteLog(Format(' RealizeCurrentWeapon: WUTAFUUUU?! (%d)', [nw]), TMsgType.Warning); + //e_WriteLog(' RealizeCurrentWeapon: WUTAFUUUU', MSG_WARNING); resetWeaponQueue(); exit; end; -- 2.29.2