X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_netmsg.pas;h=21046a048064e930129811bc684715206448f37c;hb=768ae6d7aaa02bd5076a5034dd08fc8f425ad604;hp=936141adbc58ee1d33acae7c7708b42ef064dcfe;hpb=91547a4c32733ddebebd278c42f290489daffa4e;p=d2df-sdl.git diff --git a/src/game/g_netmsg.pas b/src/game/g_netmsg.pas index 936141a..21046a0 100644 --- a/src/game/g_netmsg.pas +++ b/src/game/g_netmsg.pas @@ -52,8 +52,8 @@ const 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; @@ -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_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); @@ -1073,7 +1073,7 @@ begin with P do begin - NetOut.Write(Byte(Live)); + NetOut.Write(Byte(alive)); NetOut.Write(Byte(GodMode)); NetOut.Write(Health); NetOut.Write(Armor); @@ -1217,10 +1217,13 @@ end; // 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 + TP := g_Map_PanelByGUID(PGUID); + if (TP = nil) then exit; + { case PType of PANEL_WALL, PANEL_OPENDOOR, PANEL_CLOSEDOOR: TP := gWalls[PID]; @@ -1239,12 +1242,13 @@ begin else Exit; end; + } 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); @@ -1254,32 +1258,36 @@ begin 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 + TP := g_Map_PanelByGUID(PGUID); + if (TP = nil) then exit; 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 - TP := gRenderBackgrounds[PID]; + //TP := gRenderBackgrounds[PID]; TP.Moved := True; end; PANEL_FORE: begin - TP := gRenderForegrounds[PID]; + //TP := gRenderForegrounds[PID]; TP.Moved := True; end; + { else Exit; + } 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); @@ -2132,7 +2140,7 @@ begin with Pl do begin - Live := (M.ReadByte() <> 0); + alive := (M.ReadByte() <> 0); GodMode := (M.ReadByte() <> 0); Health := M.ReadLongInt(); Armor := M.ReadLongInt(); @@ -2298,7 +2306,7 @@ begin SHID := M.ReadLongInt(); with Pl do - if Live then NetFire(Weap, X, Y, AX, AY, SHID); + if alive then NetFire(Weap, X, Y, AX, AY, SHID); end; procedure MC_RECV_PlayerSettings(var M: TMsg); @@ -2403,67 +2411,62 @@ end; 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; - 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(); - TP := nil; + TP := g_Map_PanelByGUID(PGUID); + { 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; + } if TP <> nil then + begin if Loop = 0 then - begin // switch texture + begin + // switch texture 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); + end; + end; end; procedure MC_RECV_PanelState(var M: TMsg); var - ID: LongWord; + PGUID: Integer; E: Boolean; Lift: Byte; PType: Word; X, Y: Integer; + TP: TPanel; 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(); @@ -2471,25 +2474,33 @@ begin 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: - g_Map_SetLift(ID, Lift); + g_Map_SetLiftGUID(PGUID, Lift); - PANEL_BACK: + {PANEL_BACK, + PANEL_FORE:} + else 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; + { PANEL_FORE: begin gRenderForegrounds[ID].X := X; gRenderForegrounds[ID].Y := Y; - end; + end; + } end; end; @@ -2517,10 +2528,10 @@ 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 - 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 @@ -2593,10 +2604,6 @@ begin with Mon do begin - GameX := X; - GameY := Y; - GameVelX := VX; - GameVelY := VY; MonsterAnim := MAnim; MonsterTargetUID := MTarg; @@ -2608,7 +2615,10 @@ begin SetState(MState); - positionChanged(); // this updates spatial accelerators + setPosition(X, Y); // this will call positionChanged(); + GameVelX := VX; + GameVelY := VY; + //positionChanged(); // this updates spatial accelerators end; end; @@ -2616,6 +2626,7 @@ procedure MC_RECV_MonsterPos(var M: TMsg); var Mon: TMonster; ID: Word; + X, Y: Integer; begin ID := M.ReadWord(); Mon := g_Monsters_ByUID(ID); @@ -2624,12 +2635,13 @@ begin with Mon do begin - GameX := M.ReadLongInt(); - GameY := M.ReadLongInt(); + X := M.ReadLongInt(); + Y := M.ReadLongInt(); + Mon.setPosition(X, Y); // this will call `positionChanged()` GameVelX := M.ReadLongInt(); GameVelY := M.ReadLongInt(); GameDirection := TDirection(M.ReadByte()); - positionChanged(); // this updates spatial accelerators + //positionChanged(); // this updates spatial accelerators end; end;