X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_netmsg.pas;h=58b008f1d0edd09769d4a06c69d8c27d49c0a39e;hb=3349a0b38bc1fae71b758cb1686d4f6d0bf4f926;hp=9b0614dd1dede069f2297c84a61919fe5fbe3bc0;hpb=af3c404e11867c6794975f1d45dd98932d804ede;p=d2df-sdl.git diff --git a/src/game/g_netmsg.pas b/src/game/g_netmsg.pas index 9b0614d..58b008f 100644 --- a/src/game/g_netmsg.pas +++ b/src/game/g_netmsg.pas @@ -1,3 +1,18 @@ +(* 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 . + *) {$MODE DELPHI} unit g_netmsg; @@ -131,7 +146,7 @@ procedure MH_SEND_Everything(CreatePlayers: Boolean = False; ID: Integer = NET_E procedure MH_SEND_Info(ID: Byte); procedure MH_SEND_Chat(Txt: string; Mode: Byte; ID: Integer = NET_EVERYONE); procedure MH_SEND_Effect(X, Y: Integer; Ang: SmallInt; Kind: Byte; ID: Integer = NET_EVERYONE); -procedure MH_SEND_Sound(X, Y: Integer; Name: string; ID: Integer = NET_EVERYONE); +procedure MH_SEND_Sound(X, Y: Integer; Name: string; Pos: Boolean = True; ID: Integer = NET_EVERYONE); procedure MH_SEND_CreateShot(Proj: LongInt; ID: Integer = NET_EVERYONE); procedure MH_SEND_UpdateShot(Proj: LongInt; ID: Integer = NET_EVERYONE); procedure MH_SEND_DeleteShot(Proj: LongInt; X, Y: LongInt; Loud: Boolean = True; ID: Integer = NET_EVERYONE); @@ -648,14 +663,22 @@ begin 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 @@ -815,12 +838,18 @@ begin g_Net_Host_Send(ID, False, NET_CHAN_GAME); end; -procedure MH_SEND_Sound(X, Y: Integer; Name: string; ID: Integer = NET_EVERYONE); +procedure MH_SEND_Sound(X, Y: Integer; Name: string; Pos: Boolean = True; ID: Integer = NET_EVERYONE); begin e_Buffer_Write(@NetOut, Byte(NET_MSG_SND)); e_Buffer_Write(@NetOut, Name); - e_Buffer_Write(@NetOut, X); - e_Buffer_Write(@NetOut, Y); + if Pos then + begin + e_Buffer_Write(@NetOut, Byte(1)); + e_Buffer_Write(@NetOut, X); + e_Buffer_Write(@NetOut, Y); + end + else + e_Buffer_Write(@NetOut, Byte(0)); g_Net_Host_Send(ID, False, NET_CHAN_GAME); end; @@ -1208,6 +1237,16 @@ begin 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; @@ -1217,6 +1256,8 @@ begin 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; @@ -1520,11 +1561,18 @@ procedure MC_RECV_Sound(P: Pointer); var Name: string; X, Y: Integer; + Pos: Boolean; begin Name := e_Raw_Read_String(P); - X := e_Raw_Read_LongInt(P); - Y := e_Raw_Read_LongInt(P); - g_Sound_PlayExAt(Name, X, Y); + Pos := e_Raw_Read_Byte(P) <> 0; + if Pos then + begin + X := e_Raw_Read_LongInt(P); + Y := e_Raw_Read_LongInt(P); + g_Sound_PlayExAt(Name, X, Y); + end + else + g_Sound_PlayEx(Name); end; procedure MC_RECV_CreateShot(P: Pointer); @@ -2412,12 +2460,15 @@ var 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: @@ -2428,6 +2479,18 @@ begin 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;