DEADSOFTWARE

Revert "fixed weapon switching over the network; bumped protocol version"
[d2df-sdl.git] / src / game / g_netmsg.pas
index 822ae9bec9edd7f83cd947bcd02f5865e786773e..a7ff31a9639fe68fdf2efdae7e308b54a1683a5d 100644 (file)
@@ -1,4 +1,4 @@
-(* Copyright (C)  DooM 2D:Forever Developers
+(* Copyright (C)  Doom 2D: Forever Developers
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -384,7 +384,7 @@ begin
 
   g_Console_Add(Format(_lc[I_PLAYER_JOIN], [PName]), True);
   e_WriteLog('NET: Client ' + PName + ' [' + IntToStr(C^.ID) +
-             '] connected. Assigned player #' + IntToStr(PID) + '.', MSG_NOTIFY);
+             '] connected. Assigned player #' + IntToStr(PID) + '.', TMsgType.Notify);
 
   MH_SEND_Info(C^.ID);
 
@@ -644,7 +644,7 @@ procedure MH_SEND_Everything(CreatePlayers: Boolean = False; ID: Integer = NET_E
   begin
     result := false; // don't stop
     MH_SEND_PanelState(pan.guid, ID); // anyway, to sync mplats
-    if (pan.GetTextureCount > 1) then MH_SEND_PanelTexture(pan.guid, pan.LastAnimLoop, ID);
+    if (pan.CanChangeTexture) then MH_SEND_PanelTexture(pan.guid, pan.LastAnimLoop, ID);
   end;
 
 var
@@ -777,8 +777,8 @@ begin
     if Mode = NET_CHAT_PLAYER then
     begin
       g_Console_Add(Txt, True);
-      e_WriteLog('[Chat] ' + b_Text_Unformat(Txt), MSG_NOTIFY);
-      g_Sound_PlayEx('SOUND_GAME_RADIO');
+      e_WriteLog('[Chat] ' + b_Text_Unformat(Txt), TMsgType.Notify);
+      g_Game_ChatSound(b_Text_Unformat(Txt));
     end
     else
     if Mode = NET_CHAT_TEAM then
@@ -787,14 +787,14 @@ begin
         if (gPlayer1.Team = TEAM_RED) and (Team = TEAM_RED) then
         begin
           g_Console_Add(#18'[Team] '#2 + Txt, True);
-          e_WriteLog('[Team Chat] ' + b_Text_Unformat(Txt), MSG_NOTIFY);
-          g_Sound_PlayEx('SOUND_GAME_RADIO');
+          e_WriteLog('[Team Chat] ' + b_Text_Unformat(Txt), TMsgType.Notify);
+          g_Game_ChatSound(b_Text_Unformat(Txt));
         end
         else if (gPlayer1.Team = TEAM_BLUE) and (Team = TEAM_BLUE) then
         begin
           g_Console_Add(#20'[Team] '#2 + Txt, True);
-          e_WriteLog('[Team Chat] ' + b_Text_Unformat(Txt), MSG_NOTIFY);
-          g_Sound_PlayEx('SOUND_GAME_RADIO');
+          e_WriteLog('[Team Chat] ' + b_Text_Unformat(Txt), TMsgType.Notify);
+          g_Game_ChatSound(b_Text_Unformat(Txt));
         end;
       end;
   end
@@ -802,8 +802,8 @@ begin
   begin
     Name := g_Net_ClientName_ByID(ID);
     g_Console_Add('-> ' + Name + ': ' + Txt, True);
-    e_WriteLog('[Tell ' + Name + '] ' + b_Text_Unformat(Txt), MSG_NOTIFY);
-    g_Sound_PlayEx('SOUND_GAME_RADIO');
+    e_WriteLog('[Tell ' + Name + '] ' + b_Text_Unformat(Txt), TMsgType.Notify);
+    g_Game_ChatSound(b_Text_Unformat(Txt), False);
   end;
 end;
 
@@ -1007,7 +1007,7 @@ begin
     end;
 
     NetOut.Write(kByte);
-    if Direction = D_LEFT then NetOut.Write(Byte(0)) else NetOut.Write(Byte(1));
+    if Direction = TDirection.D_LEFT then NetOut.Write(Byte(0)) else NetOut.Write(Byte(1));
     NetOut.Write(GameX);
     NetOut.Write(GameY);
     NetOut.Write(GameVelX);
@@ -1148,13 +1148,16 @@ end;
 procedure MH_SEND_ItemSpawn(Quiet: Boolean; IID: Word; ID: Integer = NET_EVERYONE);
 var
   it: PItem;
+  tt: Byte;
 begin
   it := g_Items_ByIdx(IID);
 
   NetOut.Write(Byte(NET_MSG_ISPAWN));
   NetOut.Write(IID);
   NetOut.Write(Byte(Quiet));
-  NetOut.Write(it.ItemType);
+  tt := it.ItemType;
+  if it.dropped then tt := tt or $80;
+  NetOut.Write(tt);
   NetOut.Write(Byte(it.Fall));
   NetOut.Write(Byte(it.Respawnable));
   NetOut.Write(it.Obj.X);
@@ -1406,8 +1409,8 @@ begin
     if Mode = NET_CHAT_PLAYER then
     begin
       g_Console_Add(Txt, True);
-      e_WriteLog('[Chat] ' + b_Text_Unformat(Txt), MSG_NOTIFY);
-      g_Sound_PlayEx('SOUND_GAME_RADIO');
+      e_WriteLog('[Chat] ' + b_Text_Unformat(Txt), TMsgType.Notify);
+      g_Game_ChatSound(b_Text_Unformat(Txt));
     end else
     if (Mode = NET_CHAT_TEAM) and (gPlayer1 <> nil) then
     begin
@@ -1415,8 +1418,8 @@ begin
         g_Console_Add(b_Text_Format('\r[Team] ') + Txt, True);
       if gPlayer1.Team = TEAM_BLUE then
         g_Console_Add(b_Text_Format('\b[Team] ') + Txt, True);
-      e_WriteLog('[Team Chat] ' + b_Text_Unformat(Txt), MSG_NOTIFY);
-      g_Sound_PlayEx('SOUND_GAME_RADIO');
+      e_WriteLog('[Team Chat] ' + b_Text_Unformat(Txt), TMsgType.Notify);
+      g_Game_ChatSound(b_Text_Unformat(Txt));
     end;
   end else
     g_Console_Add(Txt, True);
@@ -1993,7 +1996,7 @@ begin
   end;
 
   g_Console_Add(Format(_lc[I_PLAYER_JOIN], [PName]), True);
-  e_WriteLog('NET: Player ' + PName + ' [' + IntToStr(PID) + '] added.', MSG_NOTIFY);
+  e_WriteLog('NET: Player ' + PName + ' [' + IntToStr(PID) + '] added.', TMsgType.Notify);
   Result := PID;
 end;
 
@@ -2211,7 +2214,7 @@ begin
   if Pl = nil then Exit;
 
   g_Console_Add(Format(_lc[I_PLAYER_LEAVE], [Pl.Name]), True);
-  e_WriteLog('NET: Player ' + Pl.Name + ' [' + IntToStr(PID) + '] removed.', MSG_NOTIFY);
+  e_WriteLog('NET: Player ' + Pl.Name + ' [' + IntToStr(PID) + '] removed.', TMsgType.Notify);
 
   g_Player_Remove(PID);
 
@@ -2306,7 +2309,8 @@ begin
   VX := M.ReadLongInt();
   VY := M.ReadLongInt();
 
-  g_Items_Create(X, Y, T, Fall, False, False, ID);
+  g_Items_Create(X, Y, T and $7F, Fall, False, False, ID);
+  if ((T and $80) <> 0) then g_Items_SetDrop(ID);
 
   it := g_Items_ByIdx(ID);
   it.Obj.Vel.X := VX;
@@ -2360,17 +2364,9 @@ begin
   TP := g_Map_PanelByGUID(PGUID);
   if (TP <> nil) then
   begin
-    if Loop = 0 then
-    begin
-      // switch texture
-      TP.SetTexture(Tex, Loop);
-      TP.SetFrame(Fr, Cnt);
-    end
-    else
-    begin
-      // looped or non-looped animation
-      TP.NextTexture(Loop);
-    end;
+    // switch texture
+    TP.SetTexture(Tex, Loop);
+    TP.SetFrame(Fr, Cnt);
   end;
 end;
 
@@ -2460,16 +2456,19 @@ begin
       if gTriggers[I].ClientID = SID then
         with gTriggers[I] do
         begin
-          if SPlaying then
+          if Sound <> nil then
           begin
-            if trigData.trigLocal then
-              Sound.PlayVolumeAt(X+(Width div 2), Y+(Height div 2), trigData.trigVolume/255.0)
+            if SPlaying then
+            begin
+              if tgcLocal then
+                Sound.PlayVolumeAt(X+(Width div 2), Y+(Height div 2), tgcVolume/255.0)
+              else
+                Sound.PlayPanVolume((tgcPan-127.0)/128.0, tgcVolume/255.0);
+              Sound.SetPosition(SPos);
+            end
             else
-              Sound.PlayPanVolume((trigData.trigPan-127.0)/128.0, trigData.trigVolume/255.0);
-            Sound.SetPosition(SPos);
-          end
-          else
-            if Sound.IsPlaying then Sound.Stop;
+              if Sound.IsPlaying then Sound.Stop;
+          end;
 
           SoundPlayCount := SCount;
         end;
@@ -2749,13 +2748,13 @@ begin
         // new strafe mechanics
         if (strafeDir = 0) then strafeDir := P1MoveButton; // start strafing
         // now set direction according to strafe (reversed)
-             if (strafeDir = 2) then gPlayer1.SetDirection(D_LEFT)
-        else if (strafeDir = 1) then gPlayer1.SetDirection(D_RIGHT);
+             if (strafeDir = 2) then gPlayer1.SetDirection(TDirection.D_LEFT)
+        else if (strafeDir = 1) then gPlayer1.SetDirection(TDirection.D_RIGHT);
       end
       else
       begin
-             if (P1MoveButton = 2) and isKeyPressed(KeyLeft, KeyLeft2) then gPlayer1.SetDirection(D_LEFT)
-        else if (P1MoveButton = 1) and isKeyPressed(KeyRight, KeyRight2) then gPlayer1.SetDirection(D_RIGHT)
+             if (P1MoveButton = 2) and isKeyPressed(KeyLeft, KeyLeft2) then gPlayer1.SetDirection(TDirection.D_LEFT)
+        else if (P1MoveButton = 1) and isKeyPressed(KeyRight, KeyRight2) then gPlayer1.SetDirection(TDirection.D_RIGHT)
         else if P1MoveButton <> 0 then gPlayer1.SetDirection(TDirection(P1MoveButton-1));
       end;
 
@@ -2868,15 +2867,15 @@ var
   FileStream : TStream;
   fname: string;
 begin
-  e_WriteLog(Format('NETWORK: looking for file "%s"', [FileName]), MSG_NOTIFY);
+  e_WriteLog(Format('NETWORK: looking for file "%s"', [FileName]), TMsgType.Notify);
   fname := findDiskWad(FileName);
   if length(fname) = 0 then
   begin
-    e_WriteLog(Format('NETWORK: file "%s" not found!', [FileName]), MSG_FATALERROR);
+    e_WriteLog(Format('NETWORK: file "%s" not found!', [FileName]), TMsgType.Fatal);
     SetLength(Result, 0);
     exit;
   end;
-  e_WriteLog(Format('NETWORK: found file "%s"', [fname]), MSG_NOTIFY);
+  e_WriteLog(Format('NETWORK: found file "%s"', [fname]), TMsgType.Notify);
   Result := nil;
   FileStream := openDiskFileRO(fname);
   try
@@ -3015,10 +3014,10 @@ var
   mapDataMsg: TMapDataMsg;
 begin
   e_WriteLog('NET: Received map request from ' +
-             DecodeIPV4(C.Peer.address.host), MSG_NOTIFY);
+             DecodeIPV4(C^.Peer.address.host), TMsgType.Notify);
 
   mapDataMsg := CreateMapDataMsg(MapsDir + gGameSettings.WAD, gExternalResources);
-  peer := NetClients[C.ID].Peer;
+  peer := NetClients[C^.ID].Peer;
 
   MapDataMsgToBytes(payload, mapDataMsg);
   g_Net_SendData(payload, peer, True, NET_CHAN_DOWNLOAD);
@@ -3037,15 +3036,15 @@ var
 begin
   FileName := ExtractFileName(M.ReadString());
   e_WriteLog('NET: Received res request: ' + FileName +
-             ' from ' + DecodeIPV4(C.Peer.address.host), MSG_NOTIFY);
+             ' from ' + DecodeIPV4(C^.Peer.address.host), TMsgType.Notify);
 
   if not IsValidFilePath(FileName) then
   begin
-    e_WriteLog('Invalid filename: ' + FileName, MSG_WARNING);
+    e_WriteLog('Invalid filename: ' + FileName, TMsgType.Warning);
     exit;
   end;
 
-  peer := NetClients[C.ID].Peer;
+  peer := NetClients[C^.ID].Peer;
 
   if gExternalResources.IndexOf(FileName) > -1 then
   begin