diff -r 32213ae19ba9 -r b52344de23ae hedgewars/GSHandlers.inc --- a/hedgewars/GSHandlers.inc Mon Oct 12 00:14:42 2009 +0000 +++ b/hedgewars/GSHandlers.inc Mon Oct 12 13:44:34 2009 +0000 @@ -1231,7 +1231,7 @@ procedure doStepFlame(Gear: PGear); var i: Integer; begin -AllInactive:= false; + if (Gear^.State and gsttmpFlag) = 0 then AllInactive:= false; if not TestCollisionYwithGear(Gear, 1) then begin @@ -1254,21 +1254,35 @@ DeleteGear(Gear); exit end - end else begin - if Gear^.Timer > 0 then dec(Gear^.Timer) - else begin - Gear^.Radius:= 9; - AmmoShove(Gear, 4, 100); - Gear^.Radius:= 1; - doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 4, EXPLNoDamage); - dec(Gear^.Health); - Gear^.Timer:= 450 - Gear^.Tag * 8 - end - end; - -//if (((GameTicks div 8) mod 64) = Gear^.Tag) then -// AmmoFlameWork(Gear); - + end else begin + if (Gear^.State and gsttmpFlag) <> 0 then + begin + Gear^.Radius:= 9; + AmmoShove(Gear, 4, 100); + Gear^.Radius:= 1 + end; + if Gear^.Timer > 0 then dec(Gear^.Timer) + else begin +// Standard fire + if (Gear^.State and gsttmpFlag) = 0 then + begin + Gear^.Radius:= 9; + AmmoShove(Gear, 4, 100); + Gear^.Radius:= 1; + doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 4, EXPLNoDamage); + if Gear^.Health > 0 then dec(Gear^.Health); + Gear^.Timer:= 450 - Gear^.Tag * 8 + end + else begin +// Modified fire + if ((GameTicks and $1FF) = 0) and ((GameFlags and gfSolidLand) = 0) then + DrawExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 4); + // This one is interesting. I think I understand the purpose, but I wonder if a bit more fuzzy of kicking could be done with getrandom. + Gear^.Timer:= 100 - Gear^.Tag * 3; + if ((GameTicks and $FF) = 0) then Gear^.Health:= 0 + end + end + end; if Gear^.Health = 0 then DeleteGear(Gear) end;