DEADSOFTWARE

Revert "fixed flawed "weapon switch key release" detection logic (flags should change...
[d2df-sdl.git] / src / game / g_game.pas
index f92af351077aaa34fee47dc16dbb0d6eb9a1056f..de729fae42e2b139d809d3e451dccd8c7afee1b2 100644 (file)
@@ -1515,6 +1515,7 @@ var
   time: Word;
   strafeDir: Byte;
   i: Integer;
+  rwk: Boolean;
 begin
   if (plr = nil) then exit;
   if (p2hack) then time := 1000 else time := 1;
@@ -1553,24 +1554,41 @@ begin
     // fix movebutton state
     MoveButton := MoveButton or (strafeDir shl 4);
 
-    plr.weaponSwitchKeysStateChange(-1, isKeyPressed(KeyNextWeapon, KeyNextWeapon2));
-    plr.weaponSwitchKeysStateChange(-2, isKeyPressed(KeyPrevWeapon, KeyPrevWeapon2));
-
     // Îñòàëüíûå êëàâèøè:
     if isKeyPressed(KeyJump, KeyJump2) then plr.PressKey(KEY_JUMP, time);
     if isKeyPressed(KeyUp, KeyUp2) then plr.PressKey(KEY_UP, time);
     if isKeyPressed(KeyDown, KeyDown2) then plr.PressKey(KEY_DOWN, time);
     if isKeyPressed(KeyFire, KeyFire2) then plr.PressKey(KEY_FIRE);
-    if isKeyPressed(KeyNextWeapon, KeyNextWeapon2) and plr.isWeaponSwitchKeyReleased(-1) then plr.PressKey(KEY_NEXTWEAPON);
-    if isKeyPressed(KeyPrevWeapon, KeyPrevWeapon2) and plr.isWeaponSwitchKeyReleased(-2) then plr.PressKey(KEY_PREVWEAPON);
+    if isKeyPressed(KeyNextWeapon, KeyNextWeapon2) then
+    begin
+      rwk := plr.isWeaponSwitchKeyReleased(-1);
+      if rwk then plr.PressKey(KEY_NEXTWEAPON);
+      plr.weaponSwitchKeysStateChange(-1, true);
+    end
+    else
+    begin
+      plr.weaponSwitchKeysStateChange(-1, false);
+    end;
+    if isKeyPressed(KeyPrevWeapon, KeyPrevWeapon2) then
+    begin
+      rwk := plr.isWeaponSwitchKeyReleased(-2);
+      if rwk then plr.PressKey(KEY_PREVWEAPON);
+      plr.weaponSwitchKeysStateChange(-2, true);
+    end
+    else
+    begin
+      plr.weaponSwitchKeysStateChange(-2, false);
+    end;
     if isKeyPressed(KeyOpen, KeyOpen2) then plr.PressKey(KEY_OPEN);
 
     for i := 0 to High(KeyWeapon) do
     begin
       if isKeyPressed(KeyWeapon[i], KeyWeapon2[i]) then
       begin
+        rwk := plr.isWeaponSwitchKeyReleased(i);
+        //writeln('rwk:', rwk);
         plr.weaponSwitchKeysStateChange(i, true);
-        if plr.isWeaponSwitchKeyReleased(i) then plr.QueueWeaponSwitch(i); // all choices are passed there, and god will take the best
+        if rwk then plr.QueueWeaponSwitch(i); // all choices are passed there, and god will take the best
       end
       else
       begin
@@ -1579,8 +1597,6 @@ begin
     end;
   end;
 
-  plr.weaponSwitchKeysShiftNewStates();
-
   // HACK: add dynlight here
   if gwin_k8_enable_light_experiments then
   begin