DEADSOFTWARE

net: sync moving items and flags
[d2df-sdl.git] / src / game / g_map.pas
index e99d47b19186dd65974751d9a2dd3e90539e3439..39a6692f2b228df76f4274e25abc139397a58b8a 100644 (file)
@@ -54,6 +54,7 @@ type
     CaptureTime: LongWord;
     Animation:   TAnimation;
     Direction:   TDirection;
+    NeedSend:    Boolean;
   end;
 
 function  g_Map_Load(Res: String): Boolean;
@@ -89,6 +90,7 @@ function  g_Map_IsSpecialTexture(Texture: String): Boolean;
 
 function  g_Map_GetPoint(PointType: Byte; var RespawnPoint: TRespawnPoint): Boolean;
 function  g_Map_GetPointCount(PointType: Byte): Word;
+function  g_Map_GetRandomPointType(): Byte;
 
 function  g_Map_HaveFlagPoints(): Boolean;
 
@@ -2566,8 +2568,13 @@ begin
         begin
           if gFlags[a].Animation <> nil then gFlags[a].Animation.Update();
 
+          Obj.oldX := Obj.X;
+          Obj.oldY := Obj.Y;
+
           m := g_Obj_Move(@Obj, True, True);
 
+          NeedSend := NeedSend or (Obj.X <> Obj.oldX) or (Obj.Y <> Obj.oldY);
+
           if gTime mod (GAME_TICK*2) <> 0 then Continue;
 
           // Ñîïðîòèâëåíèå âîçäóõà
@@ -3122,6 +3129,14 @@ begin
       Result := Result + 1;
 end;
 
+function g_Map_GetRandomPointType(): Byte;
+begin
+  if RespawnPoints = nil then
+    Result := 255
+  else
+    Result := RespawnPoints[Random(Length(RespawnPoints))].PointType;
+end;
+
 function g_Map_HaveFlagPoints(): Boolean;
 begin
   Result := (FlagPoints[FLAG_RED] <> nil) and (FlagPoints[FLAG_BLUE] <> nil);
@@ -3144,6 +3159,9 @@ begin
       Direction := FlagPoints[Flag]^.Direction;
       State := FLAG_STATE_NORMAL;
     end;
+    Obj.oldX := Obj.X;
+    Obj.oldY := Obj.Y;
+    NeedSend := False; // the event will take care of this
     Count := -1;
   end;
 end;