DEADSOFTWARE

buffer network messages (broke a lot of shit)
[d2df-sdl.git] / src / game / g_netmsg.pas
index f8ec00a801c09757c9ed897566a53ff116beba7e..b4612d3ec5cc8e7d676cc89ccac23d6f71d9066b 100644 (file)
@@ -13,7 +13,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *)
-{$MODE DELPHI}
+{$INCLUDE g_amodes.inc}
 unit g_netmsg;
 
 interface
@@ -1102,6 +1102,7 @@ begin
     e_Buffer_Write(@NetOut, Byte(FPhysics));
     e_Buffer_Write(@NetOut, Byte(FNoRespawn));
     e_Buffer_Write(@NetOut, Byte(FJetpack));
+    e_Buffer_Write(@NetOut, FFireTime);
   end;
 
   g_Net_Host_Send(ID, True, NET_CHAN_PLAYER);
@@ -1378,6 +1379,7 @@ begin
     e_Buffer_Write(@NetOut, MonsterAmmo);
     e_Buffer_Write(@NetOut, MonsterPain);
     e_Buffer_Write(@NetOut, Byte(AnimIsReverse));
+    e_Buffer_Write(@NetOut, FFireTime);
   end;
 
   g_Net_Host_Send(ID, True, NET_CHAN_MONSTER);
@@ -2182,6 +2184,7 @@ begin
     FNoRespawn := e_Raw_Read_Byte(P) <> 0;
     OldJet := FJetpack;
     FJetpack := e_Raw_Read_Byte(P) <> 0;
+    FFireTime := e_Raw_Read_LongInt(P);
     if OldJet and not FJetpack then
       JetpackOff
     else if not OldJet and FJetpack then
@@ -2668,6 +2671,7 @@ begin
     MonsterAmmo := e_Raw_Read_LongInt(P);
     MonsterPain := e_Raw_Read_LongInt(P);
     AnimRevert := e_Raw_Read_Byte(P) <> 0;
+    FFireTime := e_Raw_Read_LongInt(P);
     RevertAnim(AnimRevert);
 
     if MonsterState <> MState then
@@ -2773,6 +2777,7 @@ begin
   e_Buffer_Write(@NetOut, gPlayer1Settings.Team);
 
   g_Net_Client_Send(True, NET_CHAN_SERVICE);
+  g_Net_Flush(); // send immediately, there's no frames yet
 end;
 
 procedure MC_SEND_Chat(Txt: string; Mode: Byte);
@@ -2910,6 +2915,7 @@ begin
   e_Buffer_Write(@NetOut, Byte(NET_MSG_REQFST));
 
   g_Net_Client_Send(True, NET_CHAN_SERVICE);
+  g_Net_Flush(); // send immediately, because loading
 end;
 
 procedure MC_SEND_CheatRequest(Kind: Byte);
@@ -2982,9 +2988,11 @@ end;
 procedure ResDataMsgToBytes(var bytes: AByte; const ResData: TResDataMsg);
 var
   ResultStream: TMemoryStream;
+  dummy: Word = $FFFE;
 begin
   ResultStream := TMemoryStream.Create;
 
+  ResultStream.WriteBuffer(dummy, 2); //dummy length
   ResultStream.WriteBuffer(ResData.MsgId, SizeOf(ResData.MsgId)); //msgId
   ResultStream.WriteBuffer(ResData.FileSize, SizeOf(ResData.FileSize));  //file size
   ResultStream.WriteBuffer(ResData.FileData[0], ResData.FileSize);       //file data
@@ -3008,11 +3016,13 @@ procedure MapDataMsgToBytes(var bytes: AByte; const MapDataMsg: TMapDataMsg);
 var
   ResultStream: TMemoryStream;
   resCount: Integer;
+  dummy: Word = $FFFF;
 begin
   resCount := Length(MapDataMsg.ExternalResources);
 
   ResultStream := TMemoryStream.Create;
 
+  ResultStream.WriteBuffer(dummy, 2); //dummy length
   ResultStream.WriteBuffer(MapDataMsg.MsgId, SizeOf(MapDataMsg.MsgId)); //msgId
   ResultStream.WriteBuffer(MapDataMsg.FileSize, SizeOf(MapDataMsg.FileSize));  //file size
   ResultStream.WriteBuffer(MapDataMsg.FileData[0], MapDataMsg.FileSize);       //file data