diff --git a/src/game/g_netmsg.pas b/src/game/g_netmsg.pas
index 936141adbc58ee1d33acae7c7708b42ef064dcfe..53ab6a501b063c2cae51a19a9edcf326df2840a4 100644 (file)
--- a/src/game/g_netmsg.pas
+++ b/src/game/g_netmsg.pas
NET_MSG_MSHOT = 134;
NET_MSG_MDEL = 135;
NET_MSG_MSHOT = 134;
NET_MSG_MDEL = 135;
- NET_MSG_PSTATE = 141;
- NET_MSG_PTEX = 142;
+ NET_MSG_PSTATE = 141;
+ NET_MSG_PTEX = 142;
NET_MSG_TSOUND = 151;
NET_MSG_TMUSIC = 152;
NET_MSG_TSOUND = 151;
NET_MSG_TMUSIC = 152;
@@ -168,8 +168,8 @@ procedure MH_SEND_PlayerSettings(PID: Word; Mdl: string = ''; ID: Integer = NET_
procedure MH_SEND_ItemSpawn(Quiet: Boolean; IID: Word; ID: Integer = NET_EVERYONE);
procedure MH_SEND_ItemDestroy(Quiet: Boolean; IID: Word; ID: Integer = NET_EVERYONE);
// PANEL
procedure MH_SEND_ItemSpawn(Quiet: Boolean; IID: Word; ID: Integer = NET_EVERYONE);
procedure MH_SEND_ItemDestroy(Quiet: Boolean; IID: Word; ID: Integer = NET_EVERYONE);
// PANEL
-procedure MH_SEND_PanelTexture(PType: Word; PID: LongWord; AnimLoop: Byte; ID: Integer = NET_EVERYONE);
-procedure MH_SEND_PanelState(PType: Word; PID: LongWord; ID: Integer = NET_EVERYONE);
+procedure MH_SEND_PanelTexture(PType: Word; PGUID: Integer; AnimLoop: Byte; ID: Integer = NET_EVERYONE);
+procedure MH_SEND_PanelState(PType: Word; PGUID: Integer; ID: Integer = NET_EVERYONE);
// MONSTER
procedure MH_SEND_MonsterSpawn(UID: Word; ID: Integer = NET_EVERYONE);
procedure MH_SEND_MonsterPos(UID: Word; ID: Integer = NET_EVERYONE);
// MONSTER
procedure MH_SEND_MonsterSpawn(UID: Word; ID: Integer = NET_EVERYONE);
procedure MH_SEND_MonsterPos(UID: Word; ID: Integer = NET_EVERYONE);
// PANEL
// PANEL
-procedure MH_SEND_PanelTexture(PType: Word; PID: LongWord; AnimLoop: Byte; ID: Integer = NET_EVERYONE);
+procedure MH_SEND_PanelTexture(PType: Word; PGUID: Integer; AnimLoop: Byte; ID: Integer = NET_EVERYONE);
var
TP: TPanel;
begin
var
TP: TPanel;
begin
+ TP := g_Map_PanelByGUID(PGUID);
+ if (TP = nil) then exit;
+ {
case PType of
PANEL_WALL, PANEL_OPENDOOR, PANEL_CLOSEDOOR:
TP := gWalls[PID];
case PType of
PANEL_WALL, PANEL_OPENDOOR, PANEL_CLOSEDOOR:
TP := gWalls[PID];
else
Exit;
end;
else
Exit;
end;
+ }
with TP do
begin
NetOut.Write(Byte(NET_MSG_PTEX));
NetOut.Write(PType);
with TP do
begin
NetOut.Write(Byte(NET_MSG_PTEX));
NetOut.Write(PType);
- NetOut.Write(PID);
+ NetOut.Write(LongWord(PGUID));
NetOut.Write(FCurTexture);
NetOut.Write(FCurFrame);
NetOut.Write(FCurFrameCount);
NetOut.Write(FCurTexture);
NetOut.Write(FCurFrame);
NetOut.Write(FCurFrameCount);
g_Net_Host_Send(ID, True, NET_CHAN_LARGEDATA);
end;
g_Net_Host_Send(ID, True, NET_CHAN_LARGEDATA);
end;
-procedure MH_SEND_PanelState(PType: Word; PID: LongWord; ID: Integer = NET_EVERYONE);
+procedure MH_SEND_PanelState(PType: Word; PGUID: Integer; ID: Integer = NET_EVERYONE);
var
TP: TPanel;
begin
var
TP: TPanel;
begin
+ TP := g_Map_PanelByGUID(PGUID);
+ if (TP = nil) then exit;
case PType of
case PType of
- PANEL_WALL, PANEL_OPENDOOR, PANEL_CLOSEDOOR:
- TP := gWalls[PID];
- PANEL_LIFTUP, PANEL_LIFTDOWN, PANEL_LIFTLEFT, PANEL_LIFTRIGHT:
- TP := gLifts[PID];
+ {
+ PANEL_WALL, PANEL_OPENDOOR, PANEL_CLOSEDOOR: TP := gWalls[PID];
+ PANEL_LIFTUP, PANEL_LIFTDOWN, PANEL_LIFTLEFT, PANEL_LIFTRIGHT: TP := gLifts[PID];
+ }
PANEL_BACK:
begin
PANEL_BACK:
begin
- TP := gRenderBackgrounds[PID];
+ //TP := gRenderBackgrounds[PID];
TP.Moved := True;
end;
PANEL_FORE:
begin
TP.Moved := True;
end;
PANEL_FORE:
begin
- TP := gRenderForegrounds[PID];
+ //TP := gRenderForegrounds[PID];
TP.Moved := True;
end;
TP.Moved := True;
end;
+ {
else
Exit;
else
Exit;
+ }
end;
NetOut.Write(Byte(NET_MSG_PSTATE));
NetOut.Write(PType);
end;
NetOut.Write(Byte(NET_MSG_PSTATE));
NetOut.Write(PType);
- NetOut.Write(PID);
+ NetOut.Write(LongWord(PGUID));
NetOut.Write(Byte(TP.Enabled));
NetOut.Write(TP.LiftType);
NetOut.Write(TP.X);
NetOut.Write(Byte(TP.Enabled));
NetOut.Write(TP.LiftType);
NetOut.Write(TP.X);
procedure MC_RECV_PanelTexture(var M: TMsg);
var
TP: TPanel;
procedure MC_RECV_PanelTexture(var M: TMsg);
var
TP: TPanel;
- PType: Word;
- ID: LongWord;
+ //PType: Word;
+ PGUID: Integer;
Tex, Fr: Integer;
Loop, Cnt: Byte;
begin
if not gGameOn then Exit;
Tex, Fr: Integer;
Loop, Cnt: Byte;
begin
if not gGameOn then Exit;
- PType := M.ReadWord();
- ID := M.ReadLongWord();
+ {PType :=} M.ReadWord();
+ PGUID := Integer(M.ReadLongWord());
Tex := M.ReadLongInt();
Fr := M.ReadLongInt();
Cnt := M.ReadByte();
Loop := M.ReadByte();
Tex := M.ReadLongInt();
Fr := M.ReadLongInt();
Cnt := M.ReadByte();
Loop := M.ReadByte();
- TP := nil;
+ TP := g_Map_PanelByGUID(PGUID);
+ {
case PType of
case PType of
- PANEL_WALL, PANEL_OPENDOOR, PANEL_CLOSEDOOR:
- if gWalls <> nil then
- TP := gWalls[ID];
- PANEL_FORE:
- if gRenderForegrounds <> nil then
- TP := gRenderForegrounds[ID];
- PANEL_BACK:
- if gRenderBackgrounds <> nil then
- TP := gRenderBackgrounds[ID];
- PANEL_WATER:
- if gWater <> nil then
- TP := gWater[ID];
- PANEL_ACID1:
- if gAcid1 <> nil then
- TP := gAcid1[ID];
- PANEL_ACID2:
- if gAcid2 <> nil then
- TP := gAcid2[ID];
- PANEL_STEP:
- if gSteps <> nil then
- TP := gSteps[ID];
- else
- Exit;
+ PANEL_WALL, PANEL_OPENDOOR, PANEL_CLOSEDOOR: if gWalls <> nil then TP := gWalls[ID];
+ PANEL_FORE: if gRenderForegrounds <> nil then TP := gRenderForegrounds[ID];
+ PANEL_BACK: if gRenderBackgrounds <> nil then TP := gRenderBackgrounds[ID];
+ PANEL_WATER: if gWater <> nil then TP := gWater[ID];
+ PANEL_ACID1: if gAcid1 <> nil then TP := gAcid1[ID];
+ PANEL_ACID2: if gAcid2 <> nil then TP := gAcid2[ID];
+ PANEL_STEP: if gSteps <> nil then TP := gSteps[ID];
+ else Exit;
end;
end;
+ }
if TP <> nil then
if TP <> nil then
+ begin
if Loop = 0 then
if Loop = 0 then
- begin // switch texture
+ begin
+ // switch texture
TP.SetTexture(Tex, Loop);
TP.SetFrame(Fr, Cnt);
TP.SetTexture(Tex, Loop);
TP.SetFrame(Fr, Cnt);
- end else // looped or non-looped animation
+ end
+ else
+ begin
+ // looped or non-looped animation
TP.NextTexture(Loop);
TP.NextTexture(Loop);
+ end;
+ end;
end;
procedure MC_RECV_PanelState(var M: TMsg);
var
end;
procedure MC_RECV_PanelState(var M: TMsg);
var
- ID: LongWord;
+ PGUID: Integer;
E: Boolean;
Lift: Byte;
PType: Word;
X, Y: Integer;
E: Boolean;
Lift: Byte;
PType: Word;
X, Y: Integer;
+ TP: TPanel;
begin
if not gGameOn then Exit;
PType := M.ReadWord();
begin
if not gGameOn then Exit;
PType := M.ReadWord();
- ID := M.ReadLongWord();
+ PGUID := Integer(M.ReadLongWord());
E := (M.ReadByte() <> 0);
Lift := M.ReadByte();
X := M.ReadLongInt();
E := (M.ReadByte() <> 0);
Lift := M.ReadByte();
X := M.ReadLongInt();
case PType of
PANEL_WALL, PANEL_OPENDOOR, PANEL_CLOSEDOOR:
case PType of
PANEL_WALL, PANEL_OPENDOOR, PANEL_CLOSEDOOR:
- if E then
- g_Map_EnableWall(ID)
- else
- g_Map_DisableWall(ID);
+ if E then g_Map_EnableWallGUID(PGUID) else g_Map_DisableWallGUID(PGUID);
PANEL_LIFTUP, PANEL_LIFTDOWN, PANEL_LIFTLEFT, PANEL_LIFTRIGHT:
PANEL_LIFTUP, PANEL_LIFTDOWN, PANEL_LIFTLEFT, PANEL_LIFTRIGHT:
- g_Map_SetLift(ID, Lift);
+ g_Map_SetLiftGUID(PGUID, Lift);
- PANEL_BACK:
+ {PANEL_BACK,
+ PANEL_FORE:}
+ else
begin
begin
- gRenderBackgrounds[ID].X := X;
- gRenderBackgrounds[ID].Y := Y;
+ TP := g_Map_PanelByGUID(PGUID);
+ if (TP <> nil) then
+ begin
+ TP.X := X;
+ TP.Y := Y;
+ TP.positionChanged();
+ end;
+ //gRenderBackgrounds[ID].X := X;
+ //gRenderBackgrounds[ID].Y := Y;
end;
end;
+ {
PANEL_FORE:
begin
gRenderForegrounds[ID].X := X;
gRenderForegrounds[ID].Y := Y;
PANEL_FORE:
begin
gRenderForegrounds[ID].X := X;
gRenderForegrounds[ID].Y := Y;
- end;
+ end;
+ }
end;
end;
end;
end;
begin
if SPlaying then
begin
begin
if SPlaying then
begin
- if Data.Local then
- Sound.PlayVolumeAt(X+(Width div 2), Y+(Height div 2), Data.Volume/255.0)
+ if trigData.trigLocal then
+ Sound.PlayVolumeAt(X+(Width div 2), Y+(Height div 2), trigData.trigVolume/255.0)
else
else
- Sound.PlayPanVolume((Data.Pan-127.0)/128.0, Data.Volume/255.0);
+ Sound.PlayPanVolume((trigData.trigPan-127.0)/128.0, trigData.trigVolume/255.0);
Sound.SetPosition(SPos);
end
else
Sound.SetPosition(SPos);
end
else