index 8fb459082acf0a7267aadf2e46efa42c02775478..e39b8c66a3dfdd7b6a2491f85087cae51e119ddb 100644 (file)
--- a/src/game/g_triggers.pas
+++ b/src/game/g_triggers.pas
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
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;
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
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;
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;
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;
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
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
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
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
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;
(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;