diff --git a/src/game/g_netmsg.pas b/src/game/g_netmsg.pas
index 90b25ff451db1fea4de035a82b96f1f353f1d19a..869da64bf5c6556f5f7ef047c8d0380d40183a18 100644 (file)
--- a/src/game/g_netmsg.pas
+++ b/src/game/g_netmsg.pas
+(* 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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}
unit g_netmsg;
uses g_net, g_triggers, Classes, SysUtils, md5;
const
- NET_PROTO_VERSION = 1;
-
NET_MSG_INFO = 100;
NET_MSG_CHAT = 101;
PID: Word;
Color: TRGB;
I: Integer;
- ProtoVer, Zero: Byte;
begin
- Zero := e_Raw_Read_Byte(P);
- ProtoVer := e_Raw_Read_Byte(P);
Ver := e_Raw_Read_String(P);
Pw := e_Raw_Read_String(P);
PName := e_Raw_Read_String(P);
B := e_Raw_Read_Byte(P);
T := e_Raw_Read_Byte(P);
- if (Ver <> GAME_VERSION) or (ProtoVer <> NET_PROTO_VERSION) or (Zero <> 0) then
+ if Ver <> GAME_VERSION then
begin
g_Console_Add(_lc[I_NET_MSG] + _lc[I_NET_MSG_HOST_REJECT] +
_lc[I_NET_DISC_VERSION]);
for I := Low(gRenderForegrounds) to High(gRenderForegrounds) do
if gRenderForegrounds[I] <> nil then
with gRenderForegrounds[I] do
+ begin
if (GetTextureCount > 1) then
MH_SEND_PanelTexture(PanelType, I, LastAnimLoop, ID);
+ if Moved then
+ MH_SEND_PanelState(PanelType, I, ID);
+ end;
if gRenderBackgrounds <> nil then
for I := Low(gRenderBackgrounds) to High(gRenderBackgrounds) do
if gRenderBackgrounds[I] <> nil then
with gRenderBackgrounds[I] do
- if GetTextureCount > 1 then
+ begin
+ if (GetTextureCount > 1) then
MH_SEND_PanelTexture(PanelType, I, LastAnimLoop, ID);
+ if Moved then
+ MH_SEND_PanelState(PanelType, I, ID);
+ end;
if gWater <> nil then
for I := Low(gWater) to High(gWater) do
if gWater[I] <> nil then
var
Map: string;
begin
- g_ProcessResourceStr(gMapInfo.Map, nil, nil, @Map);
+ Map := g_ExtractFileName(gMapInfo.Map);
e_Buffer_Clear(@NetOut);
TP := gWalls[PID];
PANEL_LIFTUP, PANEL_LIFTDOWN, PANEL_LIFTLEFT, PANEL_LIFTRIGHT:
TP := gLifts[PID];
+ PANEL_BACK:
+ begin
+ TP := gRenderBackgrounds[PID];
+ TP.Moved := True;
+ end;
+ PANEL_FORE:
+ begin
+ TP := gRenderForegrounds[PID];
+ TP.Moved := True;
+ end;
else
Exit;
end;
e_Buffer_Write(@NetOut, PID);
e_Buffer_Write(@NetOut, Byte(TP.Enabled));
e_Buffer_Write(@NetOut, TP.LiftType);
+ e_Buffer_Write(@NetOut, TP.X);
+ e_Buffer_Write(@NetOut, TP.Y);
g_Net_Host_Send(ID, True, NET_CHAN_LARGEDATA);
end;
E: Boolean;
Lift: Byte;
PType: Word;
+ X, Y: Integer;
begin
if not gGameOn then Exit;
PType := e_Raw_Read_Word(P);
ID := e_Raw_Read_LongWord(P);
E := (e_Raw_Read_Byte(P) <> 0);
Lift := e_Raw_Read_Byte(P);
+ X := e_Raw_Read_LongInt(P);
+ Y := e_Raw_Read_LongInt(P);
case PType of
PANEL_WALL, PANEL_OPENDOOR, PANEL_CLOSEDOOR:
PANEL_LIFTUP, PANEL_LIFTDOWN, PANEL_LIFTLEFT, PANEL_LIFTRIGHT:
g_Map_SetLift(ID, Lift);
+
+ PANEL_BACK:
+ begin
+ gRenderBackgrounds[ID].X := X;
+ gRenderBackgrounds[ID].Y := Y;
+ end;
+
+ PANEL_FORE:
+ begin
+ gRenderForegrounds[ID].X := X;
+ gRenderForegrounds[ID].Y := Y;
+ end;
end;
end;
e_Buffer_Clear(@NetOut);
e_Buffer_Write(@NetOut, Byte(NET_MSG_INFO));
- e_Buffer_Write(@NetOut, Byte(0)); // to kill old clients
- e_Buffer_Write(@NetOut, Byte(NET_PROTO_VERSION));
e_Buffer_Write(@NetOut, GAME_VERSION);
e_Buffer_Write(@NetOut, Password);
e_Buffer_Write(@NetOut, gPlayer1Settings.Name);