Mutant: Don't reduce mutant health in ready phase. Play poison hurt sound as health warning
(* * Hedgewars, a free turn based strategy game * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *){$INCLUDE "options.inc"}unit uGearsHandlers;interfaceuses uTypes;function cakeStep(Gear: PGear): boolean;implementationuses SDLh, uFloat, uCollisions, uVariables, uGearsUtils;const dirs: array[0..3] of TPoint = ((x: 0; y: -1), (x: 1; y: 0), (x: 0; y: 1), (x: -1; y: 0));procedure PrevAngle(Gear: PGear; dA: LongInt); inline;begin inc(Gear^.WDTimer); Gear^.Angle := (LongInt(Gear^.Angle) - dA) and 3end;procedure NextAngle(Gear: PGear; dA: LongInt); inline;begin inc(Gear^.WDTimer); Gear^.Angle := (LongInt(Gear^.Angle) + dA) and 3end;function cakeStep(Gear: PGear): boolean;var xx, yy, xxn, yyn: LongInt; dA: LongInt;begin dA := hwSign(Gear^.dX); xx := dirs[Gear^.Angle].x; yy := dirs[Gear^.Angle].y; xxn := dirs[(LongInt(Gear^.Angle) + dA) and 3].x; yyn := dirs[(LongInt(Gear^.Angle) + dA) and 3].y; if (xx = 0) then if TestCollisionYwithGear(Gear, yy) <> 0 then PrevAngle(Gear, dA) else begin Gear^.Tag := 0; if TestCollisionXwithGear(Gear, xxn) <> 0 then Gear^.WDTimer:= 0; Gear^.Y := Gear^.Y + int2hwFloat(yy); if TestCollisionXwithGear(Gear, xxn) = 0 then begin Gear^.X := Gear^.X + int2hwFloat(xxn); NextAngle(Gear, dA) end end; if (yy = 0) then if TestCollisionXwithGear(Gear, xx) <> 0 then PrevAngle(Gear, dA) else begin Gear^.Tag := 0; if TestCollisionYwithGear(Gear, yyn) <> 0 then Gear^.WDTimer:= 0; Gear^.X := Gear^.X + int2hwFloat(xx); if TestCollisionYwithGear(Gear, yyn) = 0 then begin Gear^.Y := Gear^.Y + int2hwFloat(yyn); NextAngle(Gear, dA) end end; // Handle world wrap and bounce edge manually if (WorldEdge = weWrap) and ((hwRound(Gear^.X) < leftX) or (hwRound(Gear^.X) > rightX)) then begin LeftImpactTimer:= 150; RightImpactTimer:= 150; Gear^.WDTimer:= 0; Gear^.Karma:= 1; end else if (WorldEdge = weBounce) and (((hwRound(Gear^.X) - Gear^.Radius) < leftX) or ((hwRound(Gear^.X) + Gear^.Radius) > rightX)) then begin if (hwRound(Gear^.X) - Gear^.Radius < leftX) then LeftImpactTimer:= 333 else RightImpactTimer:= 333; Gear^.Karma:= 2; Gear^.WDTimer:= 0; if (Gear^.Radius > 2) and (Gear^.dX.QWordValue > _0_001.QWordValue) then AddBounceEffectForGear(Gear); end; cakeStep:= Gear^.WDTimer < 4end;end.