# HG changeset patch # User unc0rr # Date 1218570076 0 # Node ID b92323ccce45cca1ea780bc6f8463efb97569372 # Parent 543d1268847b4a45e80752080297fdf5991739a3 Fix pickhammer and kamikaze diff -r 543d1268847b -r b92323ccce45 hedgewars/GSHandlers.inc --- a/hedgewars/GSHandlers.inc Tue Aug 12 12:57:07 2008 +0000 +++ b/hedgewars/GSHandlers.inc Tue Aug 12 19:41:16 2008 +0000 @@ -426,40 +426,44 @@ HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear; dec(Gear^.Timer); if (Gear^.Timer = 0)or((Gear^.Message and gm_Destroy) <> 0)or((HHGear^.State and gstHHDriven) = 0) then - begin - StopSound(sndPickhammer); - DeleteGear(Gear); - AfterAttack; - exit - end; + begin + StopSound(sndPickhammer); + DeleteGear(Gear); + AfterAttack; + exit + end; if (Gear^.Timer mod 33) = 0 then - doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y) + 6, 6, EXPLDontDraw); + begin + HHGear^.State:= HHGear^.State or gstNoDamage; + doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y) + 7, 6, EXPLDontDraw); + HHGear^.State:= HHGear^.State and not gstNoDamage + end; if (Gear^.Timer mod 47) = 0 then - begin - i:= hwRound(Gear^.X) - Gear^.Radius - LongInt(GetRandom(2)); - ei:= hwRound(Gear^.X) + Gear^.Radius + LongInt(GetRandom(2)); - while i <= ei do - begin - DrawExplosion(i, hwRound(Gear^.Y) + 3, 3); - inc(i, 1) - end; - Gear^.X:= Gear^.X + Gear^.dX; - Gear^.Y:= Gear^.Y + _1_9; - SetAllHHToActive; - end; + begin + i:= hwRound(Gear^.X) - Gear^.Radius - LongInt(GetRandom(2)); + ei:= hwRound(Gear^.X) + Gear^.Radius + LongInt(GetRandom(2)); + while i <= ei do + begin + DrawExplosion(i, hwRound(Gear^.Y) + 3, 3); + inc(i, 1) + end; + Gear^.X:= Gear^.X + Gear^.dX; + Gear^.Y:= Gear^.Y + _1_9; + SetAllHHToActive; + end; if TestCollisionYwithGear(Gear, 1) then - begin - Gear^.dY:= _0; - SetLittle(HHGear^.dX); - HHGear^.dY:= _0; - end else - begin - Gear^.dY:= Gear^.dY + cGravity; - Gear^.Y:= Gear^.Y + Gear^.dY; - if Gear^.Y > _1024 then Gear^.Timer:= 1 - end; + begin + Gear^.dY:= _0; + SetLittle(HHGear^.dX); + HHGear^.dY:= _0; + end else + begin + Gear^.dY:= Gear^.dY + cGravity; + Gear^.Y:= Gear^.Y + Gear^.dY; + if Gear^.Y > _1024 then Gear^.Timer:= 1 + end; Gear^.X:= Gear^.X + HHGear^.dX; HHGear^.X:= Gear^.X; @@ -1435,8 +1439,8 @@ inc(Gear^.Damage, 2); - if TestCollisionXwithGear(HHGear, hwSign(Gear^.dX)) - or TestCollisionYwithGear(HHGear, hwSign(Gear^.dY)) then inc(Gear^.Damage, 3); +// if TestCollisionXwithGear(HHGear, hwSign(Gear^.dX)) +// or TestCollisionYwithGear(HHGear, hwSign(Gear^.dY)) then inc(Gear^.Damage, 3); dec(i) until (i = 0) or (Gear^.Damage > Gear^.Health); @@ -1449,11 +1453,11 @@ AmmoShove(Gear, 30, 40); DrawTunnel(HHGear^.X - HHGear^.dX * 10, - HHGear^.Y - _3 - HHGear^.dY * 10 + hwAbs(HHGear^.dY) * 5, + HHGear^.Y - _2 - HHGear^.dY * 10 + hwAbs(HHGear^.dY) * 2, HHGear^.dX, HHGear^.dY, 20 + cHHRadius * 2, - cHHRadius * 2 + 4); + cHHRadius * 2 + 6); upd:= 0 end; diff -r 543d1268847b -r b92323ccce45 hedgewars/uGears.pas --- a/hedgewars/uGears.pas Tue Aug 12 12:57:07 2008 +0000 +++ b/hedgewars/uGears.pas Tue Aug 12 19:41:16 2008 +0000 @@ -1078,45 +1078,47 @@ else dmgRadius:= Radius; Gear:= GearsList; while Gear <> nil do - begin - dmg:= dmgRadius + cHHRadius div 2 - hwRound(Distance(Gear^.X - int2hwFloat(X), Gear^.Y - int2hwFloat(Y))); - if (dmg > 1) and - ((Gear^.State and gstNoDamage) = 0) then - begin - dmg:= min(dmg div 2, Radius); - case Gear^.Kind of - gtHedgehog, - gtMine, - gtCase, - gtTarget, - gtFlame: begin - {$IFDEF DEBUGFILE}AddFileLog('Damage: ' + inttostr(dmg));{$ENDIF} - if (Mask and EXPLNoDamage) = 0 then - begin - inc(Gear^.Damage, dmg); - if Gear^.Kind = gtHedgehog then - AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), dmg, Gear) - end; - if ((Mask and EXPLDoNotTouchHH) = 0) or (Gear^.Kind <> gtHedgehog) then - begin - DeleteCI(Gear); - Gear^.dX:= Gear^.dX + SignAs(_0_005 * dmg + cHHKick, Gear^.X - int2hwFloat(X)); - Gear^.dY:= Gear^.dY + SignAs(_0_005 * dmg + cHHKick, Gear^.Y - int2hwFloat(Y)); - Gear^.State:= (Gear^.State or gstMoving) and (not gstWinner); - Gear^.Active:= true; - FollowGear:= Gear - end; - end; - gtGrave: begin - Gear^.dY:= - _0_004 * dmg; - Gear^.Active:= true; - end; - end; - end; - Gear:= Gear^.NextGear - end; + begin + dmg:= dmgRadius + cHHRadius div 2 - hwRound(Distance(Gear^.X - int2hwFloat(X), Gear^.Y - int2hwFloat(Y))); + if (dmg > 1) and + ((Gear^.State and gstNoDamage) = 0) then + begin + dmg:= min(dmg div 2, Radius); + case Gear^.Kind of + gtHedgehog, + gtMine, + gtCase, + gtTarget, + gtFlame: begin + {$IFDEF DEBUGFILE}AddFileLog('Damage: ' + inttostr(dmg));{$ENDIF} + if (Mask and EXPLNoDamage) = 0 then + begin + inc(Gear^.Damage, dmg); + if Gear^.Kind = gtHedgehog then + AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), dmg, Gear) + end; + if ((Mask and EXPLDoNotTouchHH) = 0) or (Gear^.Kind <> gtHedgehog) then + begin + DeleteCI(Gear); + Gear^.dX:= Gear^.dX + SignAs(_0_005 * dmg + cHHKick, Gear^.X - int2hwFloat(X)); + Gear^.dY:= Gear^.dY + SignAs(_0_005 * dmg + cHHKick, Gear^.Y - int2hwFloat(Y)); + Gear^.State:= (Gear^.State or gstMoving) and (not gstWinner); + Gear^.Active:= true; + FollowGear:= Gear + end; + end; + gtGrave: begin + Gear^.dY:= - _0_004 * dmg; + Gear^.Active:= true; + end; + end; + end; + Gear:= Gear^.NextGear + end; + if (Mask and EXPLDontDraw) = 0 then - if (GameFlags and gfSolidLand) = 0 then DrawExplosion(X, Y, Radius); + if (GameFlags and gfSolidLand) = 0 then DrawExplosion(X, Y, Radius); + uAIMisc.AwareOfExplosion(0, 0, 0) end;