DEADSOFTWARE

fixed flawed "weapon switch key release" detection logic (flags should change after...
[d2df-sdl.git] / src / game / g_game.pas
index de729fae42e2b139d809d3e451dccd8c7afee1b2..f92af351077aaa34fee47dc16dbb0d6eb9a1056f 100644 (file)
@@ -1515,7 +1515,6 @@ var
   time: Word;
   strafeDir: Byte;
   i: Integer;
-  rwk: Boolean;
 begin
   if (plr = nil) then exit;
   if (p2hack) then time := 1000 else time := 1;
@@ -1554,41 +1553,24 @@ 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) 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(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(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 rwk then plr.QueueWeaponSwitch(i); // all choices are passed there, and god will take the best
+        if plr.isWeaponSwitchKeyReleased(i) then plr.QueueWeaponSwitch(i); // all choices are passed there, and god will take the best
       end
       else
       begin
@@ -1597,6 +1579,8 @@ begin
     end;
   end;
 
+  plr.weaponSwitchKeysShiftNewStates();
+
   // HACK: add dynlight here
   if gwin_k8_enable_light_experiments then
   begin