DEADSOFTWARE

more grid code uglification -- should be a little faster now
[d2df-sdl.git] / src / game / g_triggers.pas
index 4fefb5d34b612cda301c2ed28f1734235b8e8867..e39b8c66a3dfdd7b6a2491f85087cae51e119ddb 100644 (file)
@@ -211,13 +211,10 @@ var
   a, b, c: Integer;
   wx, wy, wh, ww: Integer;
 
-  function monsDamage (monidx: Integer; mon: TMonster): Boolean;
+  function monsDamage (mon: TMonster): Boolean;
   begin
     result := false; // don't stop
-    if (mon <> nil) and mon.Live and g_Obj_Collide(wx, wy, ww, wh, @mon.Obj) then
-    begin
-      mon.Damage(TRAP_DAMAGE, 0, 0, 0, HIT_TRAP);
-    end;
+    if g_Obj_Collide(wx, wy, ww, wh, @mon.Obj) then mon.Damage(TRAP_DAMAGE, 0, 0, 0, HIT_TRAP);
   end;
 
 begin
@@ -248,7 +245,8 @@ begin
               gPlayers[a].Collide(X, Y, Width, Height) then
             gPlayers[a].Damage(TRAP_DAMAGE, 0, 0, 0, HIT_TRAP);
 
-      g_Mons_ForEach(monsDamage);
+      //g_Mons_ForEach(monsDamage);
+      g_Mons_ForEachAliveAt(wx, wy, ww, wh, monsDamage);
 
       if not Enabled then g_Map_EnableWall(PanelID);
     end;
@@ -304,7 +302,8 @@ begin
             gPlayers[a].Collide(X, Y, Width, Height) then
               gPlayers[a].Damage(TRAP_DAMAGE, 0, 0, 0, HIT_TRAP);
 
-        g_Mons_ForEach(monsDamage);
+        //g_Mons_ForEach(monsDamage);
+        g_Mons_ForEachAliveAt(wx, wy, ww, wh, monsDamage);
         (*
         if gMonsters <> nil then
           for a := 0 to High(gMonsters) do
@@ -648,7 +647,7 @@ begin
 
       dx := dx + Random(Data.ShotAccuracy) - Random(Data.ShotAccuracy);
       dy := dy + Random(Data.ShotAccuracy) - Random(Data.ShotAccuracy);
-      
+
       tr_SpawnShot(Data.ShotType, wx, wy, dx, dy, Data.ShotSound, TargetUID);
     end
     else
@@ -755,7 +754,7 @@ begin
 
     UID_MONSTER:
       begin
-        m := g_Monsters_Get(ActivateUID);
+        m := g_Monsters_ByUID(ActivateUID);
         if m = nil then
           Exit;
 
@@ -801,7 +800,7 @@ begin
 
     UID_MONSTER:
       begin
-        m := g_Monsters_Get(ActivateUID);
+        m := g_Monsters_ByUID(ActivateUID);
         if m = nil then
           Exit;
 
@@ -986,10 +985,10 @@ var
   it: PItem;
   mon: TMonster;
 
-  function monsShotTarget (monidx: Integer; mon: TMonster): Boolean;
+  function monsShotTarget (mon: TMonster): Boolean;
   begin
     result := false; // don't stop
-    if (mon <> nil) and mon.Live and tr_ShotAimCheck(Trigger, @(mon.Obj)) then
+    if mon.Live and tr_ShotAimCheck(Trigger, @(mon.Obj)) then
     begin
       xd := mon.GameX + mon.Obj.Rect.Width div 2;
       yd := mon.GameY + mon.Obj.Rect.Height div 2;
@@ -998,10 +997,10 @@ var
     end;
   end;
 
-  function monsShotTargetMonPlr (monidx: Integer; mon: TMonster): Boolean;
+  function monsShotTargetMonPlr (mon: TMonster): Boolean;
   begin
     result := false; // don't stop
-    if (mon <> nil) and mon.Live and tr_ShotAimCheck(Trigger, @(mon.Obj)) then
+    if mon.Live and tr_ShotAimCheck(Trigger, @(mon.Obj)) then
     begin
       xd := mon.GameX + mon.Obj.Rect.Width div 2;
       yd := mon.GameY + mon.Obj.Rect.Height div 2;
@@ -1010,10 +1009,10 @@ var
     end;
   end;
 
-  function monShotTargetPlrMon (monidx: Integer; mon: TMonster): Boolean;
+  function monShotTargetPlrMon (mon: TMonster): Boolean;
   begin
     result := false; // don't stop
-    if (mon <> nil) and mon.Live and tr_ShotAimCheck(Trigger, @(mon.Obj)) then
+    if mon.Live and tr_ShotAimCheck(Trigger, @(mon.Obj)) then
     begin
       xd := mon.GameX + mon.Obj.Rect.Width div 2;
       yd := mon.GameY + mon.Obj.Rect.Height div 2;
@@ -1880,7 +1879,7 @@ begin
 
                 UID_MONSTER:
                   begin
-                    m := g_Monsters_Get(ActivateUID);
+                    m := g_Monsters_ByUID(ActivateUID);
                     if m = nil then
                       Exit;
 
@@ -1930,7 +1929,8 @@ begin
 
           case Data.ShotTarget of
             TRIGGER_SHOT_TARGET_MON: // monsters
-              g_Mons_ForEach(monsShotTarget);
+              //TODO: accelerate this!
+              g_Mons_ForEachAlive(monsShotTarget);
 
             TRIGGER_SHOT_TARGET_PLR: // players
               if gPlayers <> nil then
@@ -1972,7 +1972,8 @@ begin
 
             TRIGGER_SHOT_TARGET_MONPLR: // monsters then players
             begin
-              g_Mons_ForEach(monsShotTargetMonPlr);
+              //TODO: accelerate this!
+              g_Mons_ForEachAlive(monsShotTargetMonPlr);
 
               if (TargetUID = 0) and (gPlayers <> nil) then
                 for idx := Low(gPlayers) to High(gPlayers) do
@@ -1998,7 +1999,11 @@ begin
                     TargetUID := gPlayers[idx].UID;
                     break;
                   end;
-              if TargetUID = 0 then g_Mons_ForEach(monShotTargetPlrMon);
+              if TargetUID = 0 then
+              begin
+                //TODO: accelerate this!
+                g_Mons_ForEachAlive(monShotTargetPlrMon);
+              end;
             end;
 
             else begin
@@ -2196,7 +2201,7 @@ var
   a, b, i: Integer;
   Affected: array of Integer;
 
-  {function monsNear (monidx: Integer; mon: TMonster): Boolean;
+  {function monsNear (mon: TMonster): Boolean;
   begin
     result := false; // don't stop
     if mon.Collide(gTriggers[a].X, gTriggers[a].Y, gTriggers[a].Width, gTriggers[a].Height) then
@@ -2206,7 +2211,7 @@ var
     end;
   end;}
 
-  function monsNear (monidx: Integer; mon: TMonster): Boolean;
+  function monsNear (mon: TMonster): Boolean;
   begin
     result := false; // don't stop
     gTriggers[a].ActivateUID := mon.UID;
@@ -2448,6 +2453,7 @@ begin
              (TimeOut = 0) and (Keys = 0) then // Åñëè íå íóæíû êëþ÷è
           begin
             //g_Mons_ForEach(monsNear);
+            //Alive?!
             g_Mons_ForEachAt(gTriggers[a].X, gTriggers[a].Y, gTriggers[a].Width, gTriggers[a].Height, monsNear);
           end;