DEADSOFTWARE

Revert "Revert "Revert "fixed flawed "weapon switch key release" detection logic...
[d2df-sdl.git] / src / game / g_player.pas
index 0921b782382a41844be44dc52372e869798b36ac..137ab818e6c4d7bbee6ec089ca7abb7c72c12dd5 100644 (file)
@@ -201,7 +201,7 @@ type
     mEDamageType: Integer;
 
     // client-side only
-    weaponSwitchKeyReleased: array[0..16] of Byte; // bit 0: was released on prev frame; bit 1: new status
+    weaponSwitchKeyReleased: array[0..16] of Boolean; // true: was release
 
 
     function CollideLevel(XInc, YInc: Integer): Boolean;
@@ -340,7 +340,6 @@ type
     procedure releaseAllWeaponSwitchKeys ();
     procedure weaponSwitchKeysStateChange (index: Integer; pressed: Boolean);
     function isWeaponSwitchKeyReleased (index: Integer): Boolean;
-    procedure weaponSwitchKeysShiftNewStates ();
 
   public
     property    Vel: TPoint2i read FObj.Vel;
@@ -2146,15 +2145,14 @@ procedure TPlayer.releaseAllWeaponSwitchKeys ();
 var
   f: Integer;
 begin
-  for f := 0 to High(weaponSwitchKeyReleased) do weaponSwitchKeyReleased[f] := $03;
+  for f := 0 to High(weaponSwitchKeyReleased) do weaponSwitchKeyReleased[f] := true;
 end;
 
 procedure TPlayer.weaponSwitchKeysStateChange (index: Integer; pressed: Boolean);
 begin
   Inc(index, 2); // -2: prev; -1: next
   if (index < 0) or (index > High(weaponSwitchKeyReleased)) then exit;
-  weaponSwitchKeyReleased[index] := weaponSwitchKeyReleased[index] or $02;
-  if (pressed) then weaponSwitchKeyReleased[index] := weaponSwitchKeyReleased[index] xor $02;
+  weaponSwitchKeyReleased[index] := not pressed;
 end;
 
 function TPlayer.isWeaponSwitchKeyReleased (index: Integer): Boolean;
@@ -2166,20 +2164,7 @@ begin
   end
   else
   begin
-    result := (weaponSwitchKeyReleased[index] and $01) <> 0;
-  end;
-end;
-
-procedure TPlayer.weaponSwitchKeysShiftNewStates ();
-var
-  f: Integer;
-begin
-  // copy bit 1 to bit 0
-  for f := 0 to High(weaponSwitchKeyReleased) do
-  begin
-    weaponSwitchKeyReleased[f] :=
-      (weaponSwitchKeyReleased[f] and $02) or
-      ((weaponSwitchKeyReleased[f] shr 1) and $01);
+    result := weaponSwitchKeyReleased[index];
   end;
 end;