DEADSOFTWARE

network code for weapon queue (and protocol version bump)
authorKetmar Dark <ketmar@ketmar.no-ip.org>
Sun, 6 Aug 2017 03:19:41 +0000 (06:19 +0300)
committerKetmar Dark <ketmar@ketmar.no-ip.org>
Sun, 6 Aug 2017 04:08:08 +0000 (07:08 +0300)
src/game/g_net.pas
src/game/g_netmsg.pas

index 1b7a5035da6e67c3db9279cedf4e95d3b2cb6901..e935fc98eb68556f60e92a4be559b0419abb86ce 100644 (file)
@@ -22,7 +22,7 @@ uses
   e_log, e_fixedbuffer, ENet, Classes;
 
 const
-  NET_PROTOCOL_VER = 168;
+  NET_PROTOCOL_VER = 169;
 
   NET_MAXCLIENTS = 24;
   NET_CHANS = 11;
index 6e8106fc61701e20d9b29c2eede43ff50d6cec16..839e6429bd16d83d15c2636337d3b7e6ee97f1d3 100644 (file)
@@ -430,7 +430,8 @@ end;
 
 function  MH_RECV_PlayerPos(C: pTNetClient; P: Pointer): Word;
 var
-  Dir, WeaponSelect: Byte;
+  Dir, i: Byte;
+  WeaponSelect: Word;
   PID: Word;
   kByte: Word;
   Pl: TPlayer;
@@ -452,7 +453,7 @@ begin
     NetTime := GT;
     kByte := e_Raw_Read_Word(P);
     Dir := e_Raw_Read_Byte(P);
-    WeaponSelect := e_Raw_Read_Byte(P);
+    WeaponSelect := e_Raw_Read_Word(P);
     if Direction <> TDirection(Dir) then
       JustTeleported := False;
 
@@ -475,8 +476,7 @@ begin
     if LongBool(kByte and NET_KEY_NW) then PressKey(KEY_NEXTWEAPON, 10000);
     if LongBool(kByte and NET_KEY_PW) then PressKey(KEY_PREVWEAPON, 10000);
 
-    if WeaponSelect <> 255 then
-      QueueWeaponSwitch(WeaponSelect);
+    for i := 0 to 15 do if (WeaponSelect and (1 shl i)) <> 0 then QueueWeaponSwitch(i);
   end;
 
   // MH_SEND_PlayerPos(False, PID, C^.ID);
@@ -2787,7 +2787,7 @@ var
   kByte: Word;
   Predict: Boolean;
   strafeDir: Byte;
-  WeaponSelect: Byte = 255;
+  WeaponSelect: Word = 0;
   I: Integer;
 begin
   if not gGameOn then Exit;
@@ -2855,7 +2855,7 @@ begin
       if isKeyPressed(KeyPrevWeapon, KeyPrevWeapon2) then kByte := kByte or NET_KEY_PW;
       for I := 0 to High(KeyWeapon) do
         if isKeyPressed(KeyWeapon[I], KeyWeapon2[I]) then
-          WeaponSelect := I;
+          WeaponSelect := WeaponSelect or Word(1 shl I);
     end;
     // fix movebutton state
     P1MoveButton := P1MoveButton or (strafeDir shl 4);