Little tweak to reduce noob fail. Delay drill rocket explosion by 250ms after spawn in Attack. Unless you drop it straight down w/ no power, it should not explode immediately in your face.
--- a/hedgewars/GSHandlers.inc Thu Dec 15 12:57:26 2011 -0500
+++ b/hedgewars/GSHandlers.inc Sat Dec 17 13:12:33 2011 -0500
@@ -3169,9 +3169,10 @@
end
end;
- t := CheckGearsCollision(Gear);
+ if GameTicks > Gear^.FlightTime then t := CheckGearsCollision(Gear)
+ else t := nil;
//fixes drill not exploding when touching HH bug
- if (Gear^.Timer = 0) or (t^.Count <> 0) or
+ if (Gear^.Timer = 0) or ((t <> nil) and (t^.Count <> 0)) or
( ((Gear^.State and gsttmpFlag) = 0) and
(TestCollisionYWithGear(Gear, hwSign(Gear^.dY)) = 0)
and (not TestCollisionXWithGear(Gear, hwSign(Gear^.dX))))
@@ -3222,16 +3223,17 @@
Gear^.dX := oldDx;
Gear^.dY := oldDy;
- t := CheckGearsCollision(Gear);
- if (t^.Count = 0) then
- begin
+ if GameTicks > Gear^.FlightTime then t := CheckGearsCollision(Gear)
+ else t := nil;
+ if (t = nil) or (t^.Count = 0) then
+ begin
//hit the ground not the HH
t2 := _0_5 / Distance(Gear^.dX, Gear^.dY);
Gear^.dX := Gear^.dX * t2;
Gear^.dY := Gear^.dY * t2;
- end
- else
- begin
+ end
+ else if (t <> nil) then
+ begin
//explode right on contact with HH
if (Gear^.State and gsttmpFlag) <> 0 then
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, Gear^.Hedgehog, EXPLAutoSound)
@@ -3239,7 +3241,7 @@
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, Gear^.Hedgehog, EXPLAutoSound);
DeleteGear(Gear);
exit;
- end;
+ end;
Gear^.SoundChannel := LoopSound(sndDrillRocket);
Gear^.doStep := @doStepDrillDrilling;
--- a/hedgewars/uGearsHedgehog.pas Thu Dec 15 12:57:26 2011 -0500
+++ b/hedgewars/uGearsHedgehog.pas Sat Dec 17 13:12:33 2011 -0500
@@ -367,7 +367,9 @@
amResurrector, amStructure,
amTardis, amPiano: CurAmmoGear:= newGear;
end;
- if (CurAmmoType = amMine) or (CurAmmoType = amSMine) and (GameFlags and gfInfAttack <> 0) then newGear^.FlightTime:= GameTicks + 1000;
+ if ((CurAmmoType = amMine) or (CurAmmoType = amSMine)) and (GameFlags and gfInfAttack <> 0) then
+ newGear^.FlightTime:= GameTicks + 1000
+ else if CurAmmoType = amDrill then newGear^.FlightTime:= GameTicks + 250;
if Ammoz[CurAmmoType].Ammo.Propz and ammoprop_NeedTarget <> 0 then
begin
newGear^.Target.X:= TargetPoint.X;