DEADSOFTWARE

correctly freeing dynrecords; as a consequence, no more memory leaks in custom game...
[d2df-sdl.git] / src / game / g_triggers.pas
index 437d1f6462c98f8c1c9973dfd3c099c5a4d906cf..1c8a586126ee9f15517ffba8d288b0245aa7254b 100644 (file)
@@ -89,20 +89,6 @@ procedure g_Triggers_Free();
 procedure g_Triggers_SaveState(var Mem: TBinMemoryWriter);
 procedure g_Triggers_LoadState(var Mem: TBinMemoryReader);
 
-function tr_Message(MKind: Integer; MText: string; MSendTo: Integer; MTime: Integer; ActivateUID: Integer): Boolean;
-
-{
-function tr_CloseDoor (PanelGUID: Integer; NoSound: Boolean; d2d: Boolean): Boolean;
-function tr_OpenDoor (PanelGUID: Integer; NoSound: Boolean; d2d: Boolean): Boolean;
-procedure tr_CloseTrap (PanelGUID: Integer; NoSound: Boolean; d2d: Boolean);
-function tr_SetLift (PanelGUID: Integer; d: Integer; NoSound: Boolean; d2d: Boolean): Boolean;
-
-function tr_Teleport (ActivateUID: Integer; TX, TY: Integer; TDir: Integer; Silent: Boolean; D2D: Boolean): Boolean;
-function tr_Push (ActivateUID: Integer; VX, VY: Integer; ResetVel: Boolean): Boolean;
-
-procedure tr_MakeEffect (X, Y, VX, VY: Integer; T, ST, CR, CG, CB: Byte; Silent, Send: Boolean);
-function tr_SpawnShot (ShotType: Integer; wx, wy, dx, dy: Integer; ShotSound: Boolean; ShotTarget: Word): Integer;
-}
 
 var
   gTriggerClientID: Integer = 0;
@@ -110,6 +96,7 @@ var
   gSecretsCount: Integer = 0;
   gMonstersSpawned: array of LongInt = nil;
 
+
 implementation
 
 uses
@@ -251,6 +238,16 @@ var
 
 begin
   pan := g_Map_PanelByGUID(PanelGUID);
+  {
+  if (pan = nil) then
+  begin
+    e_LogWritefln('tr_CloseTrap: pguid=%s; NO PANEL!', [PanelGUID], MSG_WARNING);
+  end
+  else
+  begin
+    e_LogWritefln('tr_CloseTrap: pguid=%s; isGWall=%s; arrIdx=%s', [PanelGUID, pan.isGWall, pan.arrIdx]);
+  end;
+  }
   if (pan = nil) or not pan.isGWall then exit; //!FIXME!TRIGANY!
   PanelID := pan.arrIdx;
 
@@ -2131,7 +2128,7 @@ begin
   Trigger.mapIndex := mapidx;
   if (Trigger.trigData.trigRec <> nil) then
   begin
-    Trigger.trigData := Trigger.trigData.trigRec.clone();
+    Trigger.trigData := Trigger.trigData.trigRec.clone({Trigger.trigData.headerRec}nil);
   end
   else
   begin
@@ -2468,9 +2465,17 @@ begin
             end;
           end;
 
+          //HACK!
           // if we have panelid, assume that it will switch the moving platform
-          if (trigPanelGUID >= 0) then
+          pan := g_Map_PanelByGUID(trigPanelGUID);
+          if (pan <> nil) then
           begin
+            case TriggerType of
+              TRIGGER_PRESS: pan.movingActive := true; // what to do here?
+              TRIGGER_ON: pan.movingActive := true;
+              TRIGGER_OFF: pan.movingActive := false;
+              TRIGGER_ONOFF: pan.movingActive := not pan.movingActive;
+            end;
           end;
 
           // Âûáèðàåì îäèí èç òðèããåðîâ äëÿ ðàñøèðèòåëÿ, åñëè âêëþ÷åí ðàíäîì: