# HG changeset patch # User unc0rr # Date 1217167517 0 # Node ID 3660bbfc1cbaeddace6170321cce6332431f9109 # Parent 87c44c14fdd4ea1c028532ae5d8a5ae3fbc48b96 Finish cake implementation diff -r 87c44c14fdd4 -r 3660bbfc1cba hedgewars/GSHandlers.inc --- a/hedgewars/GSHandlers.inc Sun Jul 27 13:44:04 2008 +0000 +++ b/hedgewars/GSHandlers.inc Sun Jul 27 14:05:17 2008 +0000 @@ -1483,11 +1483,24 @@ //////////////////////////////////////////////////////////////////////////////// const cakeh = 27; + cakeDmg = 75; var CakePoints: array[0..Pred(cakeh)] of record x, y: hwFloat; end; CakeI: Longword; +procedure doStepCakeExpl(Gear: PGear); +begin +inc(Gear^.Tag); +if Gear^.Tag < 2250 then exit; + +doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), cakeDmg, EXPLAutoSound); +AfterAttack; +DeleteGear(Gear) +end; + procedure doStepCakeDown(Gear: PGear); var i: Longword; + gi: PGear; + dmg: LongInt; begin AllInactive:= false; @@ -1497,9 +1510,15 @@ if Gear^.Pos = 0 then begin - doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 75, EXPLAutoSound); - AfterAttack; - DeleteGear(Gear) + gi:= GearsList; + while gi <> nil do + begin + dmg:= cakeDmg * 2 - hwRound(Distance(gi^.X - Gear^.X, gi^.Y - Gear^.Y)); + if (dmg > 1) and (gi^.Kind = gtHedgehog) then + gi^.State:= gi^.State or gstWinner; + gi:= gi^.NextGear + end; + Gear^.doStep:= @doStepCakeExpl; end else dec(Gear^.Pos) end; diff -r 87c44c14fdd4 -r 3660bbfc1cba hedgewars/uGears.pas --- a/hedgewars/uGears.pas Sun Jul 27 13:44:04 2008 +0000 +++ b/hedgewars/uGears.pas Sun Jul 27 14:05:17 2008 +0000 @@ -1102,7 +1102,7 @@ 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; + Gear^.State:= (Gear^.State or gstMoving) and (not gstWinner); Gear^.Active:= true; FollowGear:= Gear end;