--- a/hedgewars/GSHandlers.inc Sat Mar 06 10:54:24 2010 +0000
+++ b/hedgewars/GSHandlers.inc Sat Mar 06 10:59:20 2010 +0000
@@ -20,26 +20,26 @@
var gi: PGear;
d: LongInt;
begin
- gi:= GearsList;
- while gi <> nil do
- begin
- d:= r - hwRound(Distance(gi^.X - x, gi^.Y - y));
- if (d > 1) and (gi^.Kind = gtHedgehog) and not gi^.Invulnerable and (GetRandom(2) = 0) then
- begin
- if (CurrentHedgehog^.Gear = gi) then
- PlaySound(sndOops, PHedgehog(gi^.Hedgehog)^.Team^.voicepack)
- else
- begin
- if (gi^.State and gstMoving) = 0 then
- gi^.State:= gi^.State or gstLoser;
- if d > r div 2 then
- PlaySound(sndNooo, PHedgehog(gi^.Hedgehog)^.Team^.voicepack)
- else
- PlaySound(sndUhOh, PHedgehog(gi^.Hedgehog)^.Team^.voicepack);
- end;
- end;
- gi:= gi^.NextGear
- end;
+ gi:= GearsList;
+ while gi <> nil do
+ begin
+ d:= r - hwRound(Distance(gi^.X - x, gi^.Y - y));
+ if (d > 1) and (gi^.Kind = gtHedgehog) and not gi^.Invulnerable and (GetRandom(2) = 0) then
+ begin
+ if (CurrentHedgehog^.Gear = gi) then
+ PlaySound(sndOops, PHedgehog(gi^.Hedgehog)^.Team^.voicepack)
+ else
+ begin
+ if (gi^.State and gstMoving) = 0 then
+ gi^.State:= gi^.State or gstLoser;
+ if d > r div 2 then
+ PlaySound(sndNooo, PHedgehog(gi^.Hedgehog)^.Team^.voicepack)
+ else
+ PlaySound(sndUhOh, PHedgehog(gi^.Hedgehog)^.Team^.voicepack);
+ end;
+ end;
+ gi:= gi^.NextGear
+ end;
end;
////////////////////////////////////////////////////////////////////////////////
procedure doStepDrowningGear(Gear: PGear); forward;
@@ -68,50 +68,50 @@
Gear^.State:= gstDrowning;
Gear^.RenderTimer:= false;
Gear^.doStep:= @doStepDrowningGear;
- if Gear^.Kind = gtHedgehog then
- begin
- Gear^.State:= Gear^.State and (not gstHHDriven);
- AddCaption(Format(GetEventString(eidDrowned), PHedgehog(Gear^.Hedgehog)^.Name), cWhiteColor, capgrpMessage);
- end
+ if Gear^.Kind = gtHedgehog then
+ begin
+ Gear^.State:= Gear^.State and (not gstHHDriven);
+ AddCaption(Format(GetEventString(eidDrowned), PHedgehog(Gear^.Hedgehog)^.Name), cWhiteColor, capgrpMessage);
+ end
end;
PlaySound(sndSplash)
end
else
- CheckGearDrowning:= false
+ CheckGearDrowning:= false
end;
procedure CheckCollision(Gear: PGear);
begin
if TestCollisionXwithGear(Gear, hwSign(Gear^.X)) or TestCollisionYwithGear(Gear, hwSign(Gear^.Y))
- then Gear^.State:= Gear^.State or gstCollision
- else Gear^.State:= Gear^.State and not gstCollision
+ then Gear^.State:= Gear^.State or gstCollision
+ else Gear^.State:= Gear^.State and not gstCollision
end;
procedure CheckHHDamage(Gear: PGear);
var
- dmg: Longword;
- i: LongInt;
- particle: PVisualGear;
+ dmg: Longword;
+ i: LongInt;
+ particle: PVisualGear;
begin
if _0_4 < Gear^.dY then
- begin
- dmg:= ModifyDamage(1 + hwRound((hwAbs(Gear^.dY) - _0_4) * 70), Gear);
+ begin
+ dmg:= ModifyDamage(1 + hwRound((hwAbs(Gear^.dY) - _0_4) * 70), Gear);
if dmg < 1 then exit;
- for i:= min(12, (3 + dmg div 10)) downto 0 do begin
- particle := AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust);
+ for i:= min(12, (3 + dmg div 10)) downto 0 do begin
+ particle := AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust);
if particle <> nil then particle^.dX := particle^.dX + (Gear^.dX / 5);
- end;
+ end;
if(Gear^.Invulnerable) then exit;
- if _0_6 < Gear^.dY then
- PlaySound(sndOw4, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack)
- else
- PlaySound(sndOw1, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack);
+ if _0_6 < Gear^.dY then
+ PlaySound(sndOw4, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack)
+ else
+ PlaySound(sndOw1, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack);
ApplyDamage(Gear, dmg);
- end
+ end
end;
////////////////////////////////////////////////////////////////////////////////
@@ -121,9 +121,9 @@
begin
dAngle:= (hwAbs(Gear^.dX) + hwAbs(Gear^.dY)).QWordValue / $80000000;
if not Gear^.dX.isNegative then
- Gear^.DirAngle:= Gear^.DirAngle + dAngle
+ Gear^.DirAngle:= Gear^.DirAngle + dAngle
else
- Gear^.DirAngle:= Gear^.DirAngle - dAngle;
+ Gear^.DirAngle:= Gear^.DirAngle - dAngle;
if Gear^.DirAngle < 0 then Gear^.DirAngle:= Gear^.DirAngle + 360
else if 360 < Gear^.DirAngle then Gear^.DirAngle:= Gear^.DirAngle - 360
@@ -151,29 +151,29 @@
Gear^.State:= Gear^.State and not gstCollision;
if Gear^.dY.isNegative then
- begin
- isFalling:= true;
- if TestCollisionYwithGear(Gear, -1) then
- begin
- Gear^.dX:= Gear^.dX * Gear^.Friction;
- Gear^.dY:= - Gear^.dY * Gear^.Elasticity;
- Gear^.State:= Gear^.State or gstCollision
- end
- end else
- if TestCollisionYwithGear(Gear, 1) then
- begin
- isFalling:= false;
- Gear^.dX:= Gear^.dX * Gear^.Friction;
- Gear^.dY:= - Gear^.dY * Gear^.Elasticity;
- Gear^.State:= Gear^.State or gstCollision
- end else isFalling:= true;
+ begin
+ isFalling:= true;
+ if TestCollisionYwithGear(Gear, -1) then
+ begin
+ Gear^.dX:= Gear^.dX * Gear^.Friction;
+ Gear^.dY:= - Gear^.dY * Gear^.Elasticity;
+ Gear^.State:= Gear^.State or gstCollision
+ end
+ end else
+ if TestCollisionYwithGear(Gear, 1) then
+ begin
+ isFalling:= false;
+ Gear^.dX:= Gear^.dX * Gear^.Friction;
+ Gear^.dY:= - Gear^.dY * Gear^.Elasticity;
+ Gear^.State:= Gear^.State or gstCollision
+ end else isFalling:= true;
if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then
- begin
- Gear^.dX:= - Gear^.dX * Gear^.Elasticity;
- Gear^.dY:= Gear^.dY * Gear^.Elasticity;
- Gear^.State:= Gear^.State or gstCollision
- end;
+ begin
+ Gear^.dX:= - Gear^.dX * Gear^.Elasticity;
+ Gear^.dY:= Gear^.dY * Gear^.Elasticity;
+ Gear^.State:= Gear^.State or gstCollision
+ end;
if isFalling then Gear^.dY:= Gear^.dY + cGravity;
@@ -181,10 +181,10 @@
Gear^.Y:= Gear^.Y + Gear^.dY;
CheckGearDrowning(Gear);
if (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) < _0_0002) and
- (not isFalling) then
- Gear^.State:= Gear^.State and not gstMoving
+ (not isFalling) then
+ Gear^.State:= Gear^.State and not gstMoving
else
- Gear^.State:= Gear^.State or gstMoving
+ Gear^.State:= Gear^.State or gstMoving
end;
////////////////////////////////////////////////////////////////////////////////
@@ -199,97 +199,97 @@
dec(Gear^.Timer);
if Gear^.Timer = 1000 then // might need adjustments
- case Gear^.Kind of
- gtAmmo_Bomb: makeHogsWorry(Gear^.X, Gear^.Y, 50);
- gtClusterBomb: makeHogsWorry(Gear^.X, Gear^.Y, 20);
- gtWatermelon: makeHogsWorry(Gear^.X, Gear^.Y, 75);
- gtHellishBomb: makeHogsWorry(Gear^.X, Gear^.Y, 90);
- end;
+ case Gear^.Kind of
+ gtAmmo_Bomb: makeHogsWorry(Gear^.X, Gear^.Y, 50);
+ gtClusterBomb: makeHogsWorry(Gear^.X, Gear^.Y, 20);
+ gtWatermelon: makeHogsWorry(Gear^.X, Gear^.Y, 75);
+ gtHellishBomb: makeHogsWorry(Gear^.X, Gear^.Y, 90);
+ end;
if Gear^.Timer = 0 then
- begin
- case Gear^.Kind of
- gtAmmo_Bomb: doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, EXPLAutoSound);
- gtBall: doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 40, EXPLAutoSound);
- gtClusterBomb: begin
- doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 20, EXPLAutoSound);
- for i:= 0 to 4 do
- begin
- dX:= rndSign(GetRandom * _0_1);
- dY:= (GetRandom - _3) * _0_08;
- AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtCluster, 0, dX, dY, 25);
- end
- end;
- gtWatermelon: begin
- doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 75, EXPLAutoSound);
- for i:= 0 to 5 do
- begin
- dX:= rndSign(GetRandom * _0_1);
- dY:= (GetRandom - _1_5) * _0_3;
- AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtMelonPiece, 0, dX, dY, 75)^.DirAngle:= i * 60;
- end
- end;
- gtHellishBomb: begin
- doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 90, EXPLAutoSound);
- for i:= 0 to 127 do
- begin
- dX:= AngleCos(i * 16) * _0_5 * (GetRandom + _1);
- dY:= AngleSin(i * 16) * _0_5 * (GetRandom + _1);
+ begin
+ case Gear^.Kind of
+ gtAmmo_Bomb: doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, EXPLAutoSound);
+ gtBall: doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 40, EXPLAutoSound);
+ gtClusterBomb: begin
+ doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 20, EXPLAutoSound);
+ for i:= 0 to 4 do
+ begin
+ dX:= rndSign(GetRandom * _0_1);
+ dY:= (GetRandom - _3) * _0_08;
+ AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtCluster, 0, dX, dY, 25);
+ end
+ end;
+ gtWatermelon: begin
+ doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 75, EXPLAutoSound);
+ for i:= 0 to 5 do
+ begin
+ dX:= rndSign(GetRandom * _0_1);
+ dY:= (GetRandom - _1_5) * _0_3;
+ AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtMelonPiece, 0, dX, dY, 75)^.DirAngle:= i * 60;
+ end
+ end;
+ gtHellishBomb: begin
+ doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 90, EXPLAutoSound);
+ for i:= 0 to 127 do
+ begin
+ dX:= AngleCos(i * 16) * _0_5 * (GetRandom + _1);
+ dY:= AngleSin(i * 16) * _0_5 * (GetRandom + _1);
Fire:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, dX, dY, 0);
if i mod 2 = 0 then Fire^.State:= Fire^.State or gsttmpFlag;
Fire:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, dX, -dY, 0);
if i mod 2 <> 0 then Fire^.State:= Fire^.State or gsttmpFlag;
- end
- end;
- end;
- DeleteGear(Gear);
- exit
- end;
+ end
+ end;
+ end;
+ DeleteGear(Gear);
+ exit
+ end;
CalcRotationDirAngle(Gear);
if Gear^.Kind = gtHellishBomb then
- begin
- if Gear^.Timer = 3000 then PlaySound(sndHellish);
+ begin
+ if Gear^.Timer = 3000 then PlaySound(sndHellish);
- if (GameTicks and $3F) = 0 then
- if (Gear^.State and gstCollision) = 0 then
- AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtEvilTrace, 0, _0, _0, 0);
- end;
+ if (GameTicks and $3F) = 0 then
+ if (Gear^.State and gstCollision) = 0 then
+ AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtEvilTrace, 0, _0, _0, 0);
+ end;
if (Gear^.State and (gstCollision or gstMoving)) = (gstCollision or gstMoving) then
- if (hwAbs(Gear^.dX) > _0_1) or
- (hwAbs(Gear^.dY) > _0_1) then
- PlaySound(sndGrenadeImpact)
+ if (hwAbs(Gear^.dX) > _0_1) or
+ (hwAbs(Gear^.dY) > _0_1) then
+ PlaySound(sndGrenadeImpact)
end;
////////////////////////////////////////////////////////////////////////////////
procedure doStepMolotov(Gear: PGear);
var i: LongInt;
dX, dY: hwFloat;
- Fire: PGear;
+ Fire: PGear;
begin
- AllInactive:= false;
-
- doStepFallingGear(Gear);
- CalcRotationDirAngle(Gear);
+ AllInactive:= false;
+
+ doStepFallingGear(Gear);
+ CalcRotationDirAngle(Gear);
- if (Gear^.State and gstCollision) <> 0 then begin
- PlaySound(sndMolotov);
- //doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 5, EXPLAutoSound);
- for i:= 0 to 20 do begin
- dX:= AngleCos(i * 2) * ((_0_1*(i div 5))) * (GetRandom + _1);
- dY:= AngleSin(i * 8) * _0_5 * (GetRandom + _1);
- Fire:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, dX, dY, 0);
- Fire^.State:= Fire^.State or gsttmpFlag;
- Fire:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, dX, -dY, 0);
- Fire^.State:= Fire^.State or gsttmpFlag;
- Fire:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, -dX, dY, 0);
- Fire^.State:= Fire^.State or gsttmpFlag;
- Fire:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, -dX, -dY, 0);
- Fire^.State:= Fire^.State or gsttmpFlag;
- end;
- DeleteGear(Gear);
- exit
- end;
+ if (Gear^.State and gstCollision) <> 0 then begin
+ PlaySound(sndMolotov);
+ //doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 5, EXPLAutoSound);
+ for i:= 0 to 20 do begin
+ dX:= AngleCos(i * 2) * ((_0_1*(i div 5))) * (GetRandom + _1);
+ dY:= AngleSin(i * 8) * _0_5 * (GetRandom + _1);
+ Fire:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, dX, dY, 0);
+ Fire^.State:= Fire^.State or gsttmpFlag;
+ Fire:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, dX, -dY, 0);
+ Fire^.State:= Fire^.State or gsttmpFlag;
+ Fire:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, -dX, dY, 0);
+ Fire^.State:= Fire^.State or gsttmpFlag;
+ Fire:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, -dX, -dY, 0);
+ Fire^.State:= Fire^.State or gsttmpFlag;
+ end;
+ DeleteGear(Gear);
+ exit
+ end;
end;
procedure doStepWatermelon(Gear: PGear);
@@ -303,17 +303,17 @@
AllInactive:= false;
doStepFallingGear(Gear);
if (Gear^.State and gstCollision) <> 0 then
- begin
- doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Timer, EXPLAutoSound);
- DeleteGear(Gear);
- exit
- end;
+ begin
+ doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Timer, EXPLAutoSound);
+ DeleteGear(Gear);
+ exit
+ end;
if Gear^.Kind = gtMelonPiece then
- CalcRotationDirAngle(Gear)
+ CalcRotationDirAngle(Gear)
else
- if (GameTicks and $1F) = 0 then
- AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0)
+ if (GameTicks and $1F) = 0 then
+ AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0)
end;
////////////////////////////////////////////////////////////////////////////////
@@ -323,30 +323,30 @@
Gear^.dX:= Gear^.dX + cWindSpeed;
doStepFallingGear(Gear);
if (Gear^.State and gstCollision) <> 0 then
- begin
- doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, EXPLAutoSound);
- DeleteGear(Gear);
- exit
- end;
+ begin
+ doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, EXPLAutoSound);
+ DeleteGear(Gear);
+ exit
+ end;
if (GameTicks and $3F) = 0 then
- AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0)
+ AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0)
end;
////////////////////////////////////////////////////////////////////////////////
procedure doStepHealthTagWork(Gear: PGear);
begin
if Gear^.Kind = gtHealthTag then
- AllInactive:= false;
+ AllInactive:= false;
dec(Gear^.Timer);
Gear^.Y:= Gear^.Y + Gear^.dY;
if Gear^.Timer = 0 then
- begin
- if (Gear^.Kind = gtHealthTag) and (PHedgehog(Gear^.Hedgehog)^.Gear <> nil) then
- PHedgehog(Gear^.Hedgehog)^.Gear^.Active:= true; // to let current hh die
- DeleteGear(Gear)
- end
+ begin
+ if (Gear^.Kind = gtHealthTag) and (PHedgehog(Gear^.Hedgehog)^.Gear <> nil) then
+ PHedgehog(Gear^.Hedgehog)^.Gear^.Active:= true; // to let current hh die
+ DeleteGear(Gear)
+ end
end;
procedure doStepHealthTagWorkUnderWater(Gear: PGear);
@@ -356,7 +356,7 @@
Gear^.Y:= Gear^.Y - _0_08;
if hwRound(Gear^.Y) < cWaterLine + 10 then
- DeleteGear(Gear)
+ DeleteGear(Gear)
end;
procedure doStepHealthTag(Gear: PGear);
@@ -369,9 +369,9 @@
Gear^.Tex:= RenderStringTex(s, PHedgehog(Gear^.Hedgehog)^.Team^.Clan^.Color, fnt16);
if hwRound(Gear^.Y) < cWaterLine then
- Gear^.doStep:= @doStepHealthTagWork
+ Gear^.doStep:= @doStepHealthTagWork
else
- Gear^.doStep:= @doStepHealthTagWorkUnderWater;
+ Gear^.doStep:= @doStepHealthTagWorkUnderWater;
Gear^.Y:= Gear^.Y - int2hwFloat(Gear^.Tex^.h)
end;
@@ -459,10 +459,10 @@
AllInactive:= false;
inc(Gear^.Timer);
if Gear^.Timer > 75 then
- begin
- DeleteGear(Gear);
- AfterAttack
- end
+ begin
+ DeleteGear(Gear);
+ AfterAttack
+ end
end;
procedure doStepShotgunShot(Gear: PGear);
@@ -472,23 +472,23 @@
AllInactive:= false;
if ((Gear^.State and gstAnimation) = 0) then
- begin
- dec(Gear^.Timer);
- if Gear^.Timer = 0 then
- begin
- PlaySound(sndShotgunFire);
- shell:= AddVisualGear(hwRound(Gear^.x), hwRound(Gear^.y), vgtShell);
+ begin
+ dec(Gear^.Timer);
+ if Gear^.Timer = 0 then
+ begin
+ PlaySound(sndShotgunFire);
+ shell:= AddVisualGear(hwRound(Gear^.x), hwRound(Gear^.y), vgtShell);
if shell <> nil then
begin
shell^.dX:= gear^.dX / -4;
shell^.dY:= gear^.dY / -4;
shell^.Frame:= 0
end;
- Gear^.State:= Gear^.State or gstAnimation
- end;
- exit
- end
- else inc(Gear^.Timer);
+ Gear^.State:= Gear^.State or gstAnimation
+ end;
+ exit
+ end
+ else inc(Gear^.Timer);
i:= 200;
repeat
@@ -496,17 +496,17 @@
Gear^.Y:= Gear^.Y + Gear^.dY;
CheckCollision(Gear);
if (Gear^.State and gstCollision) <> 0 then
- begin
- Gear^.X:= Gear^.X + Gear^.dX * 8;
- Gear^.Y:= Gear^.Y + Gear^.dY * 8;
- ShotgunShot(Gear);
- Gear^.doStep:= @doStepShotIdle;
- exit
- end;
+ begin
+ Gear^.X:= Gear^.X + Gear^.dX * 8;
+ Gear^.Y:= Gear^.Y + Gear^.dY * 8;
+ ShotgunShot(Gear);
+ Gear^.doStep:= @doStepShotIdle;
+ exit
+ end;
dec(i)
until i = 0;
if (hwRound(Gear^.X) and LAND_WIDTH_MASK <> 0) or (hwRound(Gear^.Y) and LAND_HEIGHT_MASK <> 0) then
- Gear^.doStep:= @doStepShotIdle
+ Gear^.doStep:= @doStepShotIdle
end;
////////////////////////////////////////////////////////////////////////////////
@@ -541,13 +541,13 @@
end;
if (Gear^.Health <= 0)
- or (hwRound(Gear^.X) and LAND_WIDTH_MASK <> 0)
- or (hwRound(Gear^.Y) and LAND_HEIGHT_MASK <> 0) then
+ or (hwRound(Gear^.X) and LAND_WIDTH_MASK <> 0)
+ or (hwRound(Gear^.Y) and LAND_HEIGHT_MASK <> 0) then
begin
if (Gear^.Kind = gtSniperRifleShot) and ((GameFlags and gfLaserSight) = 0) then cLaserSighting:= false;
if (Gear^.Ammo^.NumPerTurn <= CurrentHedgehog^.MultiShootAttacks) and
((GameFlags and gfArtillery) = 0) then cArtillery:= false;
- Gear^.doStep:= @doStepShotIdle
+ Gear^.doStep:= @doStepShotIdle
end;
end;
@@ -600,8 +600,8 @@
dec(TurnTimeLeft)
else
begin
- DeleteGear(Gear);
- AfterAttack
+ DeleteGear(Gear);
+ AfterAttack
end;
end;
@@ -645,48 +645,48 @@
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(Gear^.SoundChannel);
- DeleteGear(Gear);
- AfterAttack;
- exit
- end;
+ begin
+ StopSound(Gear^.SoundChannel);
+ DeleteGear(Gear);
+ AfterAttack;
+ exit
+ end;
if (Gear^.Timer mod 33) = 0 then
- 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;
+ 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;
+ 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;
if CheckLandValue(hwRound(Gear^.X + Gear^.dX + SignAs(_6,Gear^.dX)), hwRound(Gear^.Y + _1_9), COLOR_INDESTRUCTIBLE) then
begin
Gear^.X:= Gear^.X + Gear^.dX;
Gear^.Y:= Gear^.Y + _1_9;
end;
- SetAllHHToActive;
- end;
+ 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 hwRound(Gear^.Y) > cWaterLine 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 hwRound(Gear^.Y) > cWaterLine then Gear^.Timer:= 1
+ end;
Gear^.X:= Gear^.X + HHGear^.dX;
HHGear^.X:= Gear^.X;
@@ -731,8 +731,8 @@
procedure doStepBlowTorchWork(Gear: PGear);
var HHGear: PGear;
- b: boolean;
- prevX: LongInt;
+ b: boolean;
+ prevX: LongInt;
begin
AllInactive:= false;
dec(Gear^.Timer);
@@ -743,31 +743,31 @@
b:= false;
if abs(LongInt(HHGear^.Angle) - BTPrevAngle) > 7 then
- begin
- Gear^.dX:= SignAs(AngleSin(HHGear^.Angle) * _0_5, HHGear^.dX);
- Gear^.dY:= AngleCos(HHGear^.Angle) * ( - _0_5);
- BTPrevAngle:= HHGear^.Angle;
- b:= true
- end;
+ begin
+ Gear^.dX:= SignAs(AngleSin(HHGear^.Angle) * _0_5, HHGear^.dX);
+ Gear^.dY:= AngleCos(HHGear^.Angle) * ( - _0_5);
+ BTPrevAngle:= HHGear^.Angle;
+ b:= true
+ end;
if ((HHGear^.State and gstMoving) <> 0) then
- begin
- doStepHedgehogMoving(HHGear);
- if (HHGear^.State and gstHHDriven) = 0 then Gear^.Timer:= 0
- end;
+ begin
+ doStepHedgehogMoving(HHGear);
+ if (HHGear^.State and gstHHDriven) = 0 then Gear^.Timer:= 0
+ end;
if Gear^.Timer mod cHHStepTicks = 0 then
- begin
- b:= true;
- if Gear^.dX.isNegative then
- HHGear^.Message:= (HHGear^.Message and (gm_Attack or gm_Up or gm_Down)) or gm_Left
- else
- HHGear^.Message:= (HHGear^.Message and (gm_Attack or gm_Up or gm_Down)) or gm_Right;
+ begin
+ b:= true;
+ if Gear^.dX.isNegative then
+ HHGear^.Message:= (HHGear^.Message and (gm_Attack or gm_Up or gm_Down)) or gm_Left
+ else
+ HHGear^.Message:= (HHGear^.Message and (gm_Attack or gm_Up or gm_Down)) or gm_Right;
- if ((HHGear^.State and gstMoving) = 0) then
- begin
- HHGear^.State:= HHGear^.State and not gstAttacking;
- prevX:= hwRound(HHGear^.X);
+ if ((HHGear^.State and gstMoving) = 0) then
+ begin
+ HHGear^.State:= HHGear^.State and not gstAttacking;
+ prevX:= hwRound(HHGear^.X);
// why the call to HedgehogStep then a further increment of X?
if (prevX = hwRound(HHGear^.X)) and
@@ -775,23 +775,23 @@
if (prevX = hwRound(HHGear^.X)) and
CheckLandValue(hwRound(HHGear^.X + SignAs(_6, HHGear^.dX)), hwRound(HHGear^.Y), COLOR_INDESTRUCTIBLE) then HHGear^.X:= HHGear^.X + SignAs(_1, HHGear^.dX);
- HHGear^.State:= HHGear^.State or gstAttacking
- end;
+ HHGear^.State:= HHGear^.State or gstAttacking
+ end;
- inc(BTSteps);
- if BTSteps = 7 then
- begin
- BTSteps:= 0;
+ inc(BTSteps);
+ if BTSteps = 7 then
+ begin
+ BTSteps:= 0;
if CheckLandValue(hwRound(HHGear^.X + Gear^.dX * (cHHRadius + cBlowTorchC) + SignAs(_6,Gear^.dX)), hwRound(HHGear^.Y + Gear^.dY * (cHHRadius + cBlowTorchC)), COLOR_INDESTRUCTIBLE) then
begin
- Gear^.X:= HHGear^.X + Gear^.dX * (cHHRadius + cBlowTorchC);
- Gear^.Y:= HHGear^.Y + Gear^.dY * (cHHRadius + cBlowTorchC);
+ Gear^.X:= HHGear^.X + Gear^.dX * (cHHRadius + cBlowTorchC);
+ Gear^.Y:= HHGear^.Y + Gear^.dY * (cHHRadius + cBlowTorchC);
end;
- HHGear^.State:= HHGear^.State or gstNoDamage;
- AmmoShove(Gear, 2, 15);
- HHGear^.State:= HHGear^.State and not gstNoDamage
- end;
- end;
+ HHGear^.State:= HHGear^.State or gstNoDamage;
+ AmmoShove(Gear, 2, 15);
+ HHGear^.State:= HHGear^.State and not gstNoDamage
+ end;
+ end;
if b then
DrawTunnel(HHGear^.X - Gear^.dX * cHHRadius, HHGear^.Y - _4 - Gear^.dY * cHHRadius + hwAbs(Gear^.dY) * 7,
@@ -799,12 +799,12 @@
cHHRadius * 5, cHHRadius * 2 + 7);
if (Gear^.Timer = 0) or ((HHGear^.Message and gm_Attack) <> 0) then
- begin
- HHGear^.Message:= 0;
- HHGear^.State:= HHGear^.State and (not gstNotKickable);
- DeleteGear(Gear);
- AfterAttack
- end
+ begin
+ HHGear^.Message:= 0;
+ HHGear^.State:= HHGear^.State and (not gstNotKickable);
+ DeleteGear(Gear);
+ AfterAttack
+ end
end;
procedure doStepBlowTorch(Gear: PGear);
@@ -827,13 +827,13 @@
begin
HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
if ((HHGear^.State and gstHHDriven) = 0)
- or (CheckGearDrowning(HHGear))
- or TestCollisionYwithGear(HHGear, 1) then
- begin
- DeleteGear(Gear);
- isCursorVisible:= false;
- exit
- end;
+ or (CheckGearDrowning(HHGear))
+ or TestCollisionYwithGear(HHGear, 1) then
+ begin
+ DeleteGear(Gear);
+ isCursorVisible:= false;
+ exit
+ end;
HedgehogChAngle(HHGear);
@@ -845,59 +845,59 @@
HHGear^.dY:= HHGear^.dY + cGravity;
if (Gear^.Message and gm_Attack) <> 0 then
- begin
- Gear^.X:= HHGear^.X;
- Gear^.Y:= HHGear^.Y;
+ begin
+ Gear^.X:= HHGear^.X;
+ Gear^.Y:= HHGear^.Y;
- ApplyAngleBounds(PHedgehog(Gear^.Hedgehog)^, amRope);
+ ApplyAngleBounds(PHedgehog(Gear^.Hedgehog)^, amRope);
- Gear^.dX:= SignAs(AngleSin(HHGear^.Angle), HHGear^.dX);
- Gear^.dY:= -AngleCos(HHGear^.Angle);
- Gear^.Friction:= _450;
- Gear^.Elasticity:= _0;
- Gear^.State:= Gear^.State and not gsttmpflag;
- Gear^.doStep:= @doStepRope
- end
+ Gear^.dX:= SignAs(AngleSin(HHGear^.Angle), HHGear^.dX);
+ Gear^.dY:= -AngleCos(HHGear^.Angle);
+ Gear^.Friction:= _450;
+ Gear^.Elasticity:= _0;
+ Gear^.State:= Gear^.State and not gsttmpflag;
+ Gear^.doStep:= @doStepRope
+ end
end;
procedure doStepRopeWork(Gear: PGear);
var HHGear: PGear;
- len, tx, ty, nx, ny, ropeDx, ropeDy, mdX, mdY: hwFloat;
- lx, ly: LongInt;
- haveCollision,
- haveDivided: boolean;
+ len, tx, ty, nx, ny, ropeDx, ropeDy, mdX, mdY: hwFloat;
+ lx, ly: LongInt;
+ haveCollision,
+ haveDivided: boolean;
- procedure DeleteMe;
- begin
- with HHGear^ do
- begin
- Message:= Message and not gm_Attack;
- State:= (State or gstMoving) and not gstWinner;
- end;
- DeleteGear(Gear)
- end;
+ procedure DeleteMe;
+ begin
+ with HHGear^ do
+ begin
+ Message:= Message and not gm_Attack;
+ State:= (State or gstMoving) and not gstWinner;
+ end;
+ DeleteGear(Gear)
+ end;
- procedure WaitCollision;
- begin
- with HHGear^ do
- begin
- Message:= Message and not gm_Attack;
- State:= State or gstMoving;
- end;
- RopePoints.Count:= 0;
- Gear^.Elasticity:= _0;
- Gear^.doStep:= @doStepRopeAfterAttack
- end;
+ procedure WaitCollision;
+ begin
+ with HHGear^ do
+ begin
+ Message:= Message and not gm_Attack;
+ State:= State or gstMoving;
+ end;
+ RopePoints.Count:= 0;
+ Gear^.Elasticity:= _0;
+ Gear^.doStep:= @doStepRopeAfterAttack
+ end;
begin
HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
if ((HHGear^.State and gstHHDriven) = 0)
- or (CheckGearDrowning(HHGear)) then
- begin
- DeleteMe;
- exit
- end;
+ or (CheckGearDrowning(HHGear)) then
+ begin
+ DeleteMe;
+ exit
+ end;
if (Gear^.Message and gm_Left <> 0) then HHGear^.dX:= HHGear^.dX - _0_0002 else
if (Gear^.Message and gm_Right <> 0) then HHGear^.dX:= HHGear^.dX + _0_0002;
@@ -917,135 +917,135 @@
Gear^.dY:= mdY;
/////
- tx:= HHGear^.X;
- ty:= HHGear^.Y;
+ tx:= HHGear^.X;
+ ty:= HHGear^.Y;
- if ((Gear^.Message and gm_Down) <> 0) and (Gear^.Elasticity < Gear^.Friction) then
- if not (TestCollisionXwithGear(HHGear, hwSign(ropeDx))
- or TestCollisionYwithGear(HHGear, hwSign(ropeDy))) then
- Gear^.Elasticity:= Gear^.Elasticity + _0_3;
+ if ((Gear^.Message and gm_Down) <> 0) and (Gear^.Elasticity < Gear^.Friction) then
+ if not (TestCollisionXwithGear(HHGear, hwSign(ropeDx))
+ or TestCollisionYwithGear(HHGear, hwSign(ropeDy))) then
+ Gear^.Elasticity:= Gear^.Elasticity + _0_3;
- if ((Gear^.Message and gm_Up) <> 0) and (Gear^.Elasticity > _30) then
- if not (TestCollisionXwithGear(HHGear, -hwSign(ropeDx))
- or TestCollisionYwithGear(HHGear, -hwSign(ropeDy))) then
- Gear^.Elasticity:= Gear^.Elasticity - _0_3;
+ if ((Gear^.Message and gm_Up) <> 0) and (Gear^.Elasticity > _30) then
+ if not (TestCollisionXwithGear(HHGear, -hwSign(ropeDx))
+ or TestCollisionYwithGear(HHGear, -hwSign(ropeDy))) then
+ Gear^.Elasticity:= Gear^.Elasticity - _0_3;
- HHGear^.X:= Gear^.X + mdX * Gear^.Elasticity;
- HHGear^.Y:= Gear^.Y + mdY * Gear^.Elasticity;
+ HHGear^.X:= Gear^.X + mdX * Gear^.Elasticity;
+ HHGear^.Y:= Gear^.Y + mdY * Gear^.Elasticity;
- HHGear^.dX:= HHGear^.X - tx;
- HHGear^.dY:= HHGear^.Y - ty;
+ HHGear^.dX:= HHGear^.X - tx;
+ HHGear^.dY:= HHGear^.Y - ty;
////
- haveDivided:= false;
- // check whether rope needs dividing
- len:= _1 / Distance(ropeDx, ropeDy); // old rope pos
- nx:= ropeDx * len;
- ny:= ropeDy * len;
+ haveDivided:= false;
+ // check whether rope needs dividing
+ len:= _1 / Distance(ropeDx, ropeDy); // old rope pos
+ nx:= ropeDx * len;
+ ny:= ropeDy * len;
- len:= Gear^.Elasticity - _0_3x70;
- while len > _3 do
- begin
- lx:= hwRound(Gear^.X + mdX * len);
- ly:= hwRound(Gear^.Y + mdY * len);
- if ((ly and LAND_HEIGHT_MASK) = 0) and ((lx and LAND_WIDTH_MASK) = 0) and (Land[ly, lx] <> 0) then
- begin
- with RopePoints.ar[RopePoints.Count] do
- begin
- X:= Gear^.X;
- Y:= Gear^.Y;
- if RopePoints.Count = 0 then RopePoints.HookAngle:= DxDy2Angle(Gear^.dY, Gear^.dX);
- b:= (nx * HHGear^.dY) > (ny * HHGear^.dX);
- dLen:= len
- end;
- with RopePoints.rounded[RopePoints.Count] do
- begin
- X:= hwRound(Gear^.X);
- Y:= hwRound(Gear^.Y);
- end;
+ len:= Gear^.Elasticity - _0_3x70;
+ while len > _3 do
+ begin
+ lx:= hwRound(Gear^.X + mdX * len);
+ ly:= hwRound(Gear^.Y + mdY * len);
+ if ((ly and LAND_HEIGHT_MASK) = 0) and ((lx and LAND_WIDTH_MASK) = 0) and (Land[ly, lx] <> 0) then
+ begin
+ with RopePoints.ar[RopePoints.Count] do
+ begin
+ X:= Gear^.X;
+ Y:= Gear^.Y;
+ if RopePoints.Count = 0 then RopePoints.HookAngle:= DxDy2Angle(Gear^.dY, Gear^.dX);
+ b:= (nx * HHGear^.dY) > (ny * HHGear^.dX);
+ dLen:= len
+ end;
+ with RopePoints.rounded[RopePoints.Count] do
+ begin
+ X:= hwRound(Gear^.X);
+ Y:= hwRound(Gear^.Y);
+ end;
- Gear^.X:= Gear^.X + nx * len;
- Gear^.Y:= Gear^.Y + ny * len;
- inc(RopePoints.Count);
- TryDo(RopePoints.Count <= MAXROPEPOINTS, 'Rope points overflow', true);
- Gear^.Elasticity:= Gear^.Elasticity - len;
- Gear^.Friction:= Gear^.Friction - len;
- haveDivided:= true;
- break
- end;
- len:= len - _0_3 // should be the same as increase step
- end;
+ Gear^.X:= Gear^.X + nx * len;
+ Gear^.Y:= Gear^.Y + ny * len;
+ inc(RopePoints.Count);
+ TryDo(RopePoints.Count <= MAXROPEPOINTS, 'Rope points overflow', true);
+ Gear^.Elasticity:= Gear^.Elasticity - len;
+ Gear^.Friction:= Gear^.Friction - len;
+ haveDivided:= true;
+ break
+ end;
+ len:= len - _0_3 // should be the same as increase step
+ end;
if not haveDivided then
- if RopePoints.Count > 0 then // check whether the last dividing point could be removed
- begin
- tx:= RopePoints.ar[Pred(RopePoints.Count)].X;
- ty:= RopePoints.ar[Pred(RopePoints.Count)].Y;
- if RopePoints.ar[Pred(RopePoints.Count)].b xor ((tx - Gear^.X) * (ty - HHGear^.Y) > (tx - HHGear^.X) * (ty - Gear^.Y)) then
- begin
- dec(RopePoints.Count);
- Gear^.X:= RopePoints.ar[RopePoints.Count].X;
- Gear^.Y:= RopePoints.ar[RopePoints.Count].Y;
- Gear^.Elasticity:= Gear^.Elasticity + RopePoints.ar[RopePoints.Count].dLen;
- Gear^.Friction:= Gear^.Friction + RopePoints.ar[RopePoints.Count].dLen
- end
- end;
+ if RopePoints.Count > 0 then // check whether the last dividing point could be removed
+ begin
+ tx:= RopePoints.ar[Pred(RopePoints.Count)].X;
+ ty:= RopePoints.ar[Pred(RopePoints.Count)].Y;
+ if RopePoints.ar[Pred(RopePoints.Count)].b xor ((tx - Gear^.X) * (ty - HHGear^.Y) > (tx - HHGear^.X) * (ty - Gear^.Y)) then
+ begin
+ dec(RopePoints.Count);
+ Gear^.X:= RopePoints.ar[RopePoints.Count].X;
+ Gear^.Y:= RopePoints.ar[RopePoints.Count].Y;
+ Gear^.Elasticity:= Gear^.Elasticity + RopePoints.ar[RopePoints.Count].dLen;
+ Gear^.Friction:= Gear^.Friction + RopePoints.ar[RopePoints.Count].dLen
+ end
+ end;
haveCollision:= false;
if TestCollisionXwithGear(HHGear, hwSign(HHGear^.dX)) then
- begin
- HHGear^.dX:= -_0_6 * HHGear^.dX;
- haveCollision:= true
- end;
+ begin
+ HHGear^.dX:= -_0_6 * HHGear^.dX;
+ haveCollision:= true
+ end;
if TestCollisionYwithGear(HHGear, hwSign(HHGear^.dY)) then
- begin
- HHGear^.dY:= -_0_6 * HHGear^.dY;
- haveCollision:= true
- end;
+ begin
+ HHGear^.dY:= -_0_6 * HHGear^.dY;
+ haveCollision:= true
+ end;
if haveCollision
- and (Gear^.Message and (gm_Left or gm_Right) <> 0)
- and (Gear^.Message and (gm_Up or gm_Down) <> 0) then
- begin
- HHGear^.dX:= SignAs(hwAbs(HHGear^.dX) + _0_2, HHGear^.dX);
- HHGear^.dY:= SignAs(hwAbs(HHGear^.dY) + _0_2, HHGear^.dY)
- end;
+ and (Gear^.Message and (gm_Left or gm_Right) <> 0)
+ and (Gear^.Message and (gm_Up or gm_Down) <> 0) then
+ begin
+ HHGear^.dX:= SignAs(hwAbs(HHGear^.dX) + _0_2, HHGear^.dX);
+ HHGear^.dY:= SignAs(hwAbs(HHGear^.dY) + _0_2, HHGear^.dY)
+ end;
len:= Distance(HHGear^.dX, HHGear^.dY);
if len > _0_8 then
- begin
- len:= _0_8 / len;
- HHGear^.dX:= HHGear^.dX * len;
- HHGear^.dY:= HHGear^.dY * len;
- end;
+ begin
+ len:= _0_8 / len;
+ HHGear^.dX:= HHGear^.dX * len;
+ HHGear^.dY:= HHGear^.dY * len;
+ end;
if (Gear^.Message and gm_Attack) <> 0 then
- if (Gear^.State and gsttmpFlag) <> 0 then
- with PHedgehog(Gear^.Hedgehog)^ do
- if Ammo^[CurSlot, CurAmmo].AmmoType <> amParachute then
- WaitCollision
- else
- DeleteMe
- else
+ if (Gear^.State and gsttmpFlag) <> 0 then
+ with PHedgehog(Gear^.Hedgehog)^ do
+ if Ammo^[CurSlot, CurAmmo].AmmoType <> amParachute then
+ WaitCollision
+ else
+ DeleteMe
+ else
else
- if (Gear^.State and gsttmpFlag) = 0 then
- Gear^.State:= Gear^.State or gsttmpFlag;
+ if (Gear^.State and gsttmpFlag) = 0 then
+ Gear^.State:= Gear^.State or gsttmpFlag;
end;
procedure doStepRopeAttach(Gear: PGear);
var HHGear: PGear;
- tx, ty, tt: hwFloat;
+ tx, ty, tt: hwFloat;
- procedure RemoveFromAmmo;
- begin
- if (Gear^.State and gstAttacked) = 0 then
- begin
- OnUsedAmmo(PHedgehog(HHGear^.Hedgehog)^);
- Gear^.State:= Gear^.State or gstAttacked
- end;
- ApplyAmmoChanges(PHedgehog(HHGear^.Hedgehog)^)
- end;
+ procedure RemoveFromAmmo;
+ begin
+ if (Gear^.State and gstAttacked) = 0 then
+ begin
+ OnUsedAmmo(PHedgehog(HHGear^.Hedgehog)^);
+ Gear^.State:= Gear^.State or gstAttacked
+ end;
+ ApplyAmmoChanges(PHedgehog(HHGear^.Hedgehog)^)
+ end;
begin
Gear^.X:= Gear^.X - Gear^.dX;
@@ -1056,77 +1056,77 @@
DeleteCI(HHGear);
if (HHGear^.State and gstMoving) <> 0 then
- begin
- if TestCollisionXwithGear(HHGear, hwSign(HHGear^.dX)) then SetLittle(HHGear^.dX);
- if HHGear^.dY.isNegative and TestCollisionYwithGear(HHGear, -1) then HHGear^.dY:= _0;
+ begin
+ if TestCollisionXwithGear(HHGear, hwSign(HHGear^.dX)) then SetLittle(HHGear^.dX);
+ if HHGear^.dY.isNegative and TestCollisionYwithGear(HHGear, -1) then HHGear^.dY:= _0;
- HHGear^.X:= HHGear^.X + HHGear^.dX;
- Gear^.X:= Gear^.X + HHGear^.dX;
+ HHGear^.X:= HHGear^.X + HHGear^.dX;
+ Gear^.X:= Gear^.X + HHGear^.dX;
- if TestCollisionYwithGear(HHGear, 1) then
- begin
- CheckHHDamage(HHGear);
- HHGear^.dY:= _0;
- //HHGear^.State:= HHGear^.State and not (gstHHJumping or gstHHHJump);
- end else
- begin
- HHGear^.Y:= HHGear^.Y + HHGear^.dY;
- Gear^.Y:= Gear^.Y + HHGear^.dY;
- HHGear^.dY:= HHGear^.dY + cGravity;
- end;
-
- tt:= Gear^.Elasticity;
- tx:= _0;
- ty:= _0;
- while tt > _20 do
- begin
- if TestCollisionXwithXYShift(Gear, tx, hwRound(ty), -hwSign(Gear^.dX))
- or TestCollisionYwithXYShift(Gear, hwRound(tx), hwRound(ty), -hwSign(Gear^.dY)) then
- begin
- Gear^.X:= Gear^.X + tx;
- Gear^.Y:= Gear^.Y + ty;
- Gear^.Elasticity:= tt;
- Gear^.doStep:= @doStepRopeWork;
- with HHGear^ do State:= State and not (gstAttacking or gstHHJumping or gstHHHJump);
+ if TestCollisionYwithGear(HHGear, 1) then
+ begin
+ CheckHHDamage(HHGear);
+ HHGear^.dY:= _0;
+ //HHGear^.State:= HHGear^.State and not (gstHHJumping or gstHHHJump);
+ end else
+ begin
+ HHGear^.Y:= HHGear^.Y + HHGear^.dY;
+ Gear^.Y:= Gear^.Y + HHGear^.dY;
+ HHGear^.dY:= HHGear^.dY + cGravity;
+ end;
+
+ tt:= Gear^.Elasticity;
+ tx:= _0;
+ ty:= _0;
+ while tt > _20 do
+ begin
+ if TestCollisionXwithXYShift(Gear, tx, hwRound(ty), -hwSign(Gear^.dX))
+ or TestCollisionYwithXYShift(Gear, hwRound(tx), hwRound(ty), -hwSign(Gear^.dY)) then
+ begin
+ Gear^.X:= Gear^.X + tx;
+ Gear^.Y:= Gear^.Y + ty;
+ Gear^.Elasticity:= tt;
+ Gear^.doStep:= @doStepRopeWork;
+ with HHGear^ do State:= State and not (gstAttacking or gstHHJumping or gstHHHJump);
- RemoveFromAmmo;
+ RemoveFromAmmo;
- tt:= _0;
- exit
- end;
- tx:= tx + Gear^.dX + Gear^.dX;
- ty:= ty + Gear^.dY + Gear^.dY;
- tt:= tt - _2;
- end;
- end;
+ tt:= _0;
+ exit
+ end;
+ tx:= tx + Gear^.dX + Gear^.dX;
+ ty:= ty + Gear^.dY + Gear^.dY;
+ tt:= tt - _2;
+ end;
+ end;
CheckCollision(Gear);
if (Gear^.State and gstCollision) <> 0 then
- if Gear^.Elasticity < _10 then
- Gear^.Elasticity:= _10000
- else
- begin
- Gear^.doStep:= @doStepRopeWork;
- with HHGear^ do State:= State and not (gstAttacking or gstHHJumping or gstHHHJump);
+ if Gear^.Elasticity < _10 then
+ Gear^.Elasticity:= _10000
+ else
+ begin
+ Gear^.doStep:= @doStepRopeWork;
+ with HHGear^ do State:= State and not (gstAttacking or gstHHJumping or gstHHHJump);
- RemoveFromAmmo;
+ RemoveFromAmmo;
- exit
- end;
+ exit
+ end;
if (Gear^.Elasticity > Gear^.Friction)
or ((Gear^.Message and gm_Attack) = 0)
or ((HHGear^.State and gstHHDriven) = 0)
or (HHGear^.Damage > 0) then
- begin
- with PHedgehog(Gear^.Hedgehog)^.Gear^ do
- begin
- State:= State and not gstAttacking;
- Message:= Message and not gm_Attack
- end;
- DeleteGear(Gear)
- end
+ begin
+ with PHedgehog(Gear^.Hedgehog)^.Gear^ do
+ begin
+ State:= State and not gstAttacking;
+ Message:= Message and not gm_Attack
+ end;
+ DeleteGear(Gear)
+ end
end;
procedure doStepRope(Gear: PGear);
@@ -1141,10 +1141,10 @@
begin
inc(Gear^.Timer);
if Gear^.Timer > 64 then
- begin
- Gear^.Timer:= 0;
- dec(Gear^.State)
- end;
+ begin
+ Gear^.Timer:= 0;
+ dec(Gear^.State)
+ end;
Gear^.dX:= Gear^.dX + cWindSpeed;
Gear^.X:= Gear^.X + Gear^.dX;
if Gear^.State = 0 then DeleteGear(Gear)
@@ -1155,11 +1155,11 @@
begin
inc(Gear^.Timer);
if Gear^.Timer > 75 then
- begin
- inc(Gear^.State);
- Gear^.Timer:= 0;
- if Gear^.State > 5 then DeleteGear(Gear)
- end;
+ begin
+ inc(Gear^.State);
+ Gear^.Timer:= 0;
+ if Gear^.State > 5 then DeleteGear(Gear)
+ end;
end;
procedure doStepExplosion(Gear: PGear);
@@ -1175,50 +1175,50 @@
procedure doStepMine(Gear: PGear);
begin
if (Gear^.State and gstMoving) <> 0 then
- begin
- DeleteCI(Gear);
- doStepFallingGear(Gear);
- if (Gear^.State and gstMoving) = 0 then
- begin
- AddGearCI(Gear);
- Gear^.dX:= _0;
- Gear^.dY:= _0
- end;
- CalcRotationDirAngle(Gear);
- AllInactive:= false
- end else
- if ((GameTicks and $3F) = 25) then
- doStepFallingGear(Gear);
+ begin
+ DeleteCI(Gear);
+ doStepFallingGear(Gear);
+ if (Gear^.State and gstMoving) = 0 then
+ begin
+ AddGearCI(Gear);
+ Gear^.dX:= _0;
+ Gear^.dY:= _0
+ end;
+ CalcRotationDirAngle(Gear);
+ AllInactive:= false
+ end else
+ if ((GameTicks and $3F) = 25) then
+ doStepFallingGear(Gear);
if ((Gear^.State and gsttmpFlag) <> 0) and (Gear^.Health <> 0) then
- if ((Gear^.State and gstAttacking) = 0) then
- begin
- if ((GameTicks and $1F) = 0) then
- if CheckGearNear(Gear, gtHedgehog, 46, 32) <> nil then Gear^.State:= Gear^.State or gstAttacking
- end else // gstAttacking <> 0
- begin
- AllInactive:= false;
- if (Gear^.Timer and $FF) = 0 then PlaySound(sndMineTick);
- if Gear^.Timer = 0 then
- begin
+ if ((Gear^.State and gstAttacking) = 0) then
+ begin
+ if ((GameTicks and $1F) = 0) then
+ if CheckGearNear(Gear, gtHedgehog, 46, 32) <> nil then Gear^.State:= Gear^.State or gstAttacking
+ end else // gstAttacking <> 0
+ begin
+ AllInactive:= false;
+ if (Gear^.Timer and $FF) = 0 then PlaySound(sndMineTick);
+ if Gear^.Timer = 0 then
+ begin
if ((Gear^.State and gstWait) <> 0) or
(cMineDudPercent = 0) or
- (getRandom(100) > cMineDudPercent) then
+ (getRandom(100) > cMineDudPercent) then
begin
- doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, EXPLAutoSound);
- DeleteGear(Gear)
+ doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, EXPLAutoSound);
+ DeleteGear(Gear)
end
else
begin
- AddVisualGear(hwRound(Gear^.X) - 4 + Random(8), hwRound(Gear^.Y) - 4 - Random(4), vgtSmoke);
- PlaySound(sndVaporize);
+ AddVisualGear(hwRound(Gear^.X) - 4 + Random(8), hwRound(Gear^.Y) - 4 - Random(4), vgtSmoke);
+ PlaySound(sndVaporize);
Gear^.Health:= 0;
end;
- exit
- end;
- dec(Gear^.Timer);
- end else // gsttmpFlag = 0
- if TurnTimeLeft = 0 then Gear^.State:= Gear^.State or gsttmpFlag;
+ exit
+ end;
+ dec(Gear^.Timer);
+ end else // gsttmpFlag = 0
+ if TurnTimeLeft = 0 then Gear^.State:= Gear^.State or gsttmpFlag;
end;
////////////////////////////////////////////////////////////////////////////////
@@ -1228,13 +1228,13 @@
AllInactive:= false;
if Gear^.Timer mod 166 = 0 then inc(Gear^.Tag);
if Gear^.Timer = 1000 then // might need better timing
- makeHogsWorry(Gear^.X, Gear^.Y, 75);
+ makeHogsWorry(Gear^.X, Gear^.Y, 75);
if Gear^.Timer = 0 then
- begin
- doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 75, EXPLAutoSound);
- DeleteGear(Gear);
- exit
- end;
+ begin
+ doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 75, EXPLAutoSound);
+ DeleteGear(Gear);
+ exit
+ end;
dec(Gear^.Timer);
end;
@@ -1247,7 +1247,7 @@
*)
procedure doStepRollingBarrel(Gear: PGear);
var i: LongInt;
- particle: PVisualGear;
+ particle: PVisualGear;
begin
Gear^.State:= Gear^.State or gstAnimation;
if ((Gear^.dX.QWordValue <> 0) or (Gear^.dY.QWordValue <> 0)) then
@@ -1257,9 +1257,9 @@
if not Gear^.dY.isNegative and (Gear^.dY > _0_03) and TestCollisionYwithGear(Gear, 1) then
begin
inc(Gear^.Damage, hwRound(Gear^.dY * _30));
- for i:= min(12, hwRound(Gear^.dY*_10)) downto 0 do
+ for i:= min(12, hwRound(Gear^.dY*_10)) downto 0 do
begin
- particle:= AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust);
+ particle:= AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust);
if particle <> nil then particle^.dX := particle^.dX + (Gear^.dX / 5)
end
end
@@ -1272,7 +1272,7 @@
if Gear^.Damage <> 0 then PlaySound(sndGraveImpact);
doStepFallingGear(Gear);
CalcRotationDirAngle(Gear);
- CheckGearDrowning(Gear)
+ CheckGearDrowning(Gear)
end
else AddGearCI(Gear);
(*
@@ -1281,7 +1281,7 @@
x:= hwRound(Gear^.X);
y:= hwRound(Gear^.Y);
if (((y+1) and LAND_HEIGHT_MASK) = 0) and ((x and LAND_WIDTH_MASK) = 0) then
- if (Land[y+1, x] = 0) then
+ if (Land[y+1, x] = 0) then
begin
if (((y+1) and LAND_HEIGHT_MASK) = 0) and (((x+Gear^.Radius-2) and LAND_WIDTH_MASK) = 0) and (Land[y+1, x+Gear^.Radius-2] = 0) then
Gear^.dX:= -_0_08
@@ -1307,25 +1307,25 @@
procedure doStepCase(Gear: PGear);
var i, x, y: LongInt;
- k: TGearType;
- exBoom: boolean;
- dX, dY: HWFloat;
+ k: TGearType;
+ exBoom: boolean;
+ dX, dY: HWFloat;
begin
k:= Gear^.Kind;
exBoom:= false;
if (Gear^.Message and gm_Destroy) > 0 then
- begin
- DeleteGear(Gear);
- FreeActionsList;
- SetAllToActive; // something (hh, mine, etc...) could be on top of the case
- with CurrentHedgehog^ do
- if Gear <> nil then Gear^.Message:= Gear^.Message and not (gm_LJump or gm_HJump);
- exit
- end;
+ begin
+ DeleteGear(Gear);
+ FreeActionsList;
+ SetAllToActive; // something (hh, mine, etc...) could be on top of the case
+ with CurrentHedgehog^ do
+ if Gear <> nil then Gear^.Message:= Gear^.Message and not (gm_LJump or gm_HJump);
+ exit
+ end;
if k = gtExplosives then
- begin
+ begin
//if V > _0_03 then Gear^.State:= Gear^.State or gstAnimation;
if hwAbs(Gear^.dX) > _0_15 then Gear^.doStep:= @doStepRollingBarrel;
@@ -1334,60 +1334,60 @@
AddVisualGear(hwRound(Gear^.X) - 16 + Random(32), hwRound(Gear^.Y) - 2, vgtSmoke)
else
AddVisualGear(hwRound(Gear^.X) - 16 + Random(32), hwRound(Gear^.Y) - 2, vgtSmokeWhite);
- dec(Gear^.Health, Gear^.Damage);
- Gear^.Damage:= 0;
- if Gear^.Health <= 0 then
- exBoom:= true;
- end;
+ dec(Gear^.Health, Gear^.Damage);
+ Gear^.Damage:= 0;
+ if Gear^.Health <= 0 then
+ exBoom:= true;
+ end;
if (Gear^.Damage > 0) or exBoom then
- begin
- x:= hwRound(Gear^.X);
- y:= hwRound(Gear^.Y);
- DeleteGear(Gear); // <-- delete gear!
+ begin
+ x:= hwRound(Gear^.X);
+ y:= hwRound(Gear^.Y);
+ DeleteGear(Gear); // <-- delete gear!
- if k = gtCase then
- begin
- doMakeExplosion(x, y, 25, EXPLAutoSound);
- for i:= 0 to 63 do
- AddGear(x, y, gtFlame, 0, _0, _0, 0);
- end
- else if k = gtExplosives then
- begin
- doMakeExplosion(x, y, 75, EXPLAutoSound);
- for i:= 0 to 31 do
- begin
- dX:= AngleCos(i * 64) * _0_5 * (getrandom + _1);
- dY:= AngleSin(i * 64) * _0_5 * (getrandom + _1);
- AddGear(x, y, gtFlame, 0, dX, dY, 0);
- AddGear(x, y, gtFlame, 0, -dX, -dY, 0)^.State:= gsttmpFlag;
- end
- end;
- exit
- end;
+ if k = gtCase then
+ begin
+ doMakeExplosion(x, y, 25, EXPLAutoSound);
+ for i:= 0 to 63 do
+ AddGear(x, y, gtFlame, 0, _0, _0, 0);
+ end
+ else if k = gtExplosives then
+ begin
+ doMakeExplosion(x, y, 75, EXPLAutoSound);
+ for i:= 0 to 31 do
+ begin
+ dX:= AngleCos(i * 64) * _0_5 * (getrandom + _1);
+ dY:= AngleSin(i * 64) * _0_5 * (getrandom + _1);
+ AddGear(x, y, gtFlame, 0, dX, dY, 0);
+ AddGear(x, y, gtFlame, 0, -dX, -dY, 0)^.State:= gsttmpFlag;
+ end
+ end;
+ exit
+ end;
if (Gear^.dY.QWordValue <> 0) or (not TestCollisionYwithGear(Gear, 1)) then
- begin
- AllInactive:= false;
+ begin
+ AllInactive:= false;
Gear^.dY:= Gear^.dY + cGravity;
Gear^.Y:= Gear^.Y + Gear^.dY;
if (not Gear^.dY.isNegative) and (Gear^.dY > _0_001) then SetAllHHToActive;
- if (Gear^.dY.isNegative) and TestCollisionYwithGear(Gear, -1) then Gear^.dY:= _0;
- if (not Gear^.dY.isNegative) and TestCollisionYwithGear(Gear, 1) then
- begin
+ if (Gear^.dY.isNegative) and TestCollisionYwithGear(Gear, -1) then Gear^.dY:= _0;
+ if (not Gear^.dY.isNegative) and TestCollisionYwithGear(Gear, 1) then
+ begin
if (Gear^.dY > _0_02) and (k = gtExplosives) then
inc(Gear^.Damage, hwRound(Gear^.dY * _30));
- if Gear^.dY > _0_2 then
- for i:= min(12, hwRound(Gear^.dY*_10)) downto 0 do
- AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust);
- Gear^.dY:= - Gear^.dY * Gear^.Elasticity;
- if Gear^.dY > - _0_001 then Gear^.dY:= _0
- else if Gear^.dY < - _0_03 then PlaySound(sndGraveImpact)
- end;
- //if Gear^.dY > - _0_001 then Gear^.dY:= _0
- CheckGearDrowning(Gear);
- end;
+ if Gear^.dY > _0_2 then
+ for i:= min(12, hwRound(Gear^.dY*_10)) downto 0 do
+ AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust);
+ Gear^.dY:= - Gear^.dY * Gear^.Elasticity;
+ if Gear^.dY > - _0_001 then Gear^.dY:= _0
+ else if Gear^.dY < - _0_03 then PlaySound(sndGraveImpact)
+ end;
+ //if Gear^.dY > - _0_001 then Gear^.dY:= _0
+ CheckGearDrowning(Gear);
+ end;
if (Gear^.dY.QWordValue = 0) then AddGearCI(Gear)
else if (Gear^.dY.QWordValue <> 0) then DeleteCI(Gear)
@@ -1398,36 +1398,36 @@
procedure doStepTarget(Gear: PGear);
begin
if (Gear^.Timer = 0) and (Gear^.Tag = 0) then
- PlaySound(sndWarp);
+ PlaySound(sndWarp);
if (Gear^.Tag = 0) and (Gear^.Timer < 1000) then
- inc(Gear^.Timer)
+ inc(Gear^.Timer)
else if Gear^.Tag = 1 then
- begin
- Gear^.Tag:= 2;
- if (TrainingFlags and tfTimeTrial) <> 0 then
- begin
- inc(TurnTimeLeft, TrainingTimeInc);
-
- if TrainingTimeInc > TrainingTimeInM then
- dec(TrainingTimeInc, TrainingTimeInD);
- if TurnTimeLeft > TrainingTimeMax then
- TurnTimeLeft:= TrainingTimeMax;
- end;
- end
+ begin
+ Gear^.Tag:= 2;
+ if (TrainingFlags and tfTimeTrial) <> 0 then
+ begin
+ inc(TurnTimeLeft, TrainingTimeInc);
+
+ if TrainingTimeInc > TrainingTimeInM then
+ dec(TrainingTimeInc, TrainingTimeInD);
+ if TurnTimeLeft > TrainingTimeMax then
+ TurnTimeLeft:= TrainingTimeMax;
+ end;
+ end
else if Gear^.Tag = 2 then
- if Gear^.Timer > 0 then
- dec(Gear^.Timer)
- else
- begin
- if (TrainingFlags and tfTargetRespawn) <> 0 then
- begin
- TrainingTargetGear:= AddGear(0, 0, gtTarget, 0, _0, _0, 0);
- FindPlace(TrainingTargetGear, false, 0, LAND_WIDTH);
- end;
- DeleteGear(Gear);
- exit;
- end;
+ if Gear^.Timer > 0 then
+ dec(Gear^.Timer)
+ else
+ begin
+ if (TrainingFlags and tfTargetRespawn) <> 0 then
+ begin
+ TrainingTargetGear:= AddGear(0, 0, gtTarget, 0, _0, _0, 0);
+ FindPlace(TrainingTargetGear, false, 0, LAND_WIDTH);
+ end;
+ DeleteGear(Gear);
+ exit;
+ end;
doStepCase(Gear)
end;
@@ -1438,10 +1438,10 @@
AllInactive:= false;
dec(Gear^.Timer);
if Gear^.Timer = 0 then
- begin
- DeleteGear(Gear);
- AfterAttack
- end
+ begin
+ DeleteGear(Gear);
+ AfterAttack
+ end
end;
procedure doStepShover(Gear: PGear);
@@ -1468,10 +1468,10 @@
DeleteCI(HHGear);
for i:= 0 to 3 do
- begin
- AmmoShove(Gear, 30, 25);
- Gear^.X:= Gear^.X + Gear^.dX * 5
- end;
+ begin
+ AmmoShove(Gear, 30, 25);
+ Gear^.X:= Gear^.X + Gear^.dX * 5
+ end;
HHGear^.State:= HHGear^.State and not gstNoDamage;
Gear^.Timer:= 250;
@@ -1485,26 +1485,26 @@
if (Gear^.State and gsttmpFlag) = 0 then AllInactive:= false;
if not TestCollisionYwithGear(Gear, 1) then
- begin
+ begin
AllInactive:= false;
- if hwAbs(Gear^.dX) > _0_01 then
- Gear^.dX:= Gear^.dX * _0_995;
- if (Gear^.State and gsttmpFlag) <> 0 then Gear^.dY:= Gear^.dY + _2*cGravity else
- Gear^.dY:= Gear^.dY + cGravity;
- if hwAbs(Gear^.dY) > _0_2 then Gear^.dY:= Gear^.dY * _0_995;
+ if hwAbs(Gear^.dX) > _0_01 then
+ Gear^.dX:= Gear^.dX * _0_995;
+ if (Gear^.State and gsttmpFlag) <> 0 then Gear^.dY:= Gear^.dY + _2*cGravity else
+ Gear^.dY:= Gear^.dY + cGravity;
+ if hwAbs(Gear^.dY) > _0_2 then Gear^.dY:= Gear^.dY * _0_995;
- if (Gear^.State and gsttmpFlag) <> 0 then Gear^.X:= Gear^.X + Gear^.dX else
- Gear^.X:= Gear^.X + Gear^.dX + cWindSpeed * 640;
- Gear^.Y:= Gear^.Y + Gear^.dY;
+ if (Gear^.State and gsttmpFlag) <> 0 then Gear^.X:= Gear^.X + Gear^.dX else
+ Gear^.X:= Gear^.X + Gear^.dX + cWindSpeed * 640;
+ Gear^.Y:= Gear^.Y + Gear^.dY;
- if (hwRound(Gear^.Y) > cWaterLine) then
- begin
- for i:= 0 to 3 do
- AddVisualGear(hwRound(Gear^.X) - 16 + Random(32), hwRound(Gear^.Y) - 16 + Random(16), vgtSteam);
- PlaySound(sndVaporize);
- DeleteGear(Gear);
- exit
- end
+ if (hwRound(Gear^.Y) > cWaterLine) then
+ begin
+ for i:= 0 to 3 do
+ AddVisualGear(hwRound(Gear^.X) - 16 + Random(32), hwRound(Gear^.Y) - 16 + Random(16), vgtSteam);
+ PlaySound(sndVaporize);
+ DeleteGear(Gear);
+ exit
+ end
end else begin
if (Gear^.State and gsttmpFlag) <> 0 then
begin
@@ -1512,7 +1512,7 @@
AmmoShove(Gear, 2, 30);
Gear^.Radius:= 1
end;
- if Gear^.Timer > 0 then
+ if Gear^.Timer > 0 then
begin
dec(Gear^.Timer);
inc(Gear^.Damage)
@@ -1540,7 +1540,7 @@
AddVisualGear(hwRound(Gear^.X) - 3 + Random(6), hwRound(Gear^.Y) - 2, vgtSmoke);
end;
// 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;
+ Gear^.Timer:= 100 - Gear^.Tag * 3;
if (Gear^.Damage > 3000+Gear^.Tag*1500) then Gear^.Health:= 0
end
end
@@ -1568,31 +1568,31 @@
begin
AllInactive:= false;
if ((Gear^.Message and gm_Destroy) <> 0) then
- begin
- DeleteGear(Gear);
- AfterAttack;
- exit
- end;
+ begin
+ DeleteGear(Gear);
+ AfterAttack;
+ exit
+ end;
HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
if hwRound(HHGear^.Y) <= Gear^.Tag - 2 then
- begin
- Gear^.Tag:= hwRound(HHGear^.Y);
- DrawTunnel(HHGear^.X - int2hwFloat(cHHRadius), HHGear^.Y - _1, _0_5, _0, cHHRadius * 4, 2);
- HHGear^.State:= HHGear^.State or gstNoDamage;
- Gear^.Y:= HHGear^.Y;
- AmmoShove(Gear, 30, 40);
- HHGear^.State:= HHGear^.State and not gstNoDamage
- end;
+ begin
+ Gear^.Tag:= hwRound(HHGear^.Y);
+ DrawTunnel(HHGear^.X - int2hwFloat(cHHRadius), HHGear^.Y - _1, _0_5, _0, cHHRadius * 4, 2);
+ HHGear^.State:= HHGear^.State or gstNoDamage;
+ Gear^.Y:= HHGear^.Y;
+ AmmoShove(Gear, 30, 40);
+ HHGear^.State:= HHGear^.State and not gstNoDamage
+ end;
HHGear^.dY:= HHGear^.dY + cGravity;
if not (HHGear^.dY.isNegative) then
- begin
- HHGear^.State:= HHGear^.State or gstMoving;
- DeleteGear(Gear);
- AfterAttack;
- exit
- end;
+ begin
+ HHGear^.State:= HHGear^.State or gstMoving;
+ DeleteGear(Gear);
+ AfterAttack;
+ exit
+ end;
if CheckLandValue(hwRound(HHGear^.X), hwRound(HHGear^.Y + HHGear^.dY + SignAs(_6,Gear^.dY)), COLOR_INDESTRUCTIBLE) then
HHGear^.Y:= HHGear^.Y + HHGear^.dY
@@ -1628,24 +1628,24 @@
inc(Gear^.Timer);
if TestCollisionYwithGear(HHGear, 1)
- or ((HHGear^.State and gstHHDriven) = 0)
- or CheckGearDrowning(HHGear)
- or ((Gear^.Message and gm_Attack) <> 0) then
- begin
- with HHGear^ do
- begin
- Message:= 0;
- SetLittle(dX);
- dY:= _0;
- State:= State or gstMoving;
- end;
- DeleteGear(Gear);
- isCursorVisible:= false;
- exit
- end;
+ or ((HHGear^.State and gstHHDriven) = 0)
+ or CheckGearDrowning(HHGear)
+ or ((Gear^.Message and gm_Attack) <> 0) then
+ begin
+ with HHGear^ do
+ begin
+ Message:= 0;
+ SetLittle(dX);
+ dY:= _0;
+ State:= State or gstMoving;
+ end;
+ DeleteGear(Gear);
+ isCursorVisible:= false;
+ exit
+ end;
if not TestCollisionXwithGear(HHGear, hwSign(HHGear^.dX)) then
- HHGear^.X:= HHGear^.X + cWindSpeed * 200;
+ HHGear^.X:= HHGear^.X + cWindSpeed * 200;
if (Gear^.Message and gm_Left) <> 0 then HHGear^.X:= HHGear^.X - cMaxWindSpeed * 40
else if (Gear^.Message and gm_Right) <> 0 then HHGear^.X:= HHGear^.X + cMaxWindSpeed * 40;
@@ -1684,19 +1684,19 @@
Gear^.X:= Gear^.X + cAirPlaneSpeed * Gear^.Tag;
if (Gear^.Health > 0)and(not (Gear^.X < Gear^.dX))and(Gear^.X < Gear^.dX + cAirPlaneSpeed) then
- begin
- dec(Gear^.Health);
- case Gear^.State of
- 0: FollowGear:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, cBombsSpeed * Gear^.Tag, _0, 0);
- 1: FollowGear:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtMine, 0, cBombsSpeed * Gear^.Tag, _0, 0);
- 2: for i:= -19 to 19 do
- FollowGear:= AddGear(hwRound(Gear^.X) + i div 3, hwRound(Gear^.Y), gtFlame, 0, _0_001 * i, _0, 0);
- end;
- Gear^.dX:= Gear^.dX + int2hwFloat(30 * Gear^.Tag)
- end;
+ begin
+ dec(Gear^.Health);
+ case Gear^.State of
+ 0: FollowGear:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, cBombsSpeed * Gear^.Tag, _0, 0);
+ 1: FollowGear:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtMine, 0, cBombsSpeed * Gear^.Tag, _0, 0);
+ 2: for i:= -19 to 19 do
+ FollowGear:= AddGear(hwRound(Gear^.X) + i div 3, hwRound(Gear^.Y), gtFlame, 0, _0_001 * i, _0, 0);
+ end;
+ Gear^.dX:= Gear^.dX + int2hwFloat(30 * Gear^.Tag)
+ end;
if (GameTicks and $3F) = 0 then
- AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0);
+ AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0);
if (hwRound(Gear^.X) > (LAND_WIDTH+1024)) or (hwRound(Gear^.X) < -1024) then DeleteGear(Gear)
end;
@@ -1706,21 +1706,21 @@
AllInactive:= false;
if Gear^.X.QWordValue = 0 then
- begin
- Gear^.Tag:= 1;
- Gear^.X:= -_1024;
- end
+ begin
+ Gear^.Tag:= 1;
+ Gear^.X:= -_1024;
+ end
else
- begin
- Gear^.Tag:= -1;
- Gear^.X:= int2hwFloat(LAND_WIDTH + 1024);
- end;
+ begin
+ Gear^.Tag:= -1;
+ Gear^.X:= int2hwFloat(LAND_WIDTH + 1024);
+ end;
Gear^.Y:= int2hwFloat(topY-300);
Gear^.dX:= int2hwFloat(TargetPoint.X - 5 * Gear^.Tag * 15);
if (int2hwFloat(TargetPoint.Y) - Gear^.Y > _0) and (Gear^.State <> 2) then
- Gear^.dX:= Gear^.dX - cBombsSpeed * hwSqrt((int2hwFloat(TargetPoint.Y) - Gear^.Y) * 2 / cGravity) * Gear^.Tag;
+ Gear^.dX:= Gear^.dX - cBombsSpeed * hwSqrt((int2hwFloat(TargetPoint.Y) - Gear^.Y) * 2 / cGravity) * Gear^.Tag;
Gear^.Health:= 6;
Gear^.doStep:= @doStepAirAttackWork;
@@ -1733,13 +1733,13 @@
AllInactive:= false;
doStepFallingGear(Gear);
if (Gear^.State and gstCollision) <> 0 then
- begin
- doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, EXPLAutoSound);
- DeleteGear(Gear);
- exit
- end;
+ begin
+ doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, EXPLAutoSound);
+ DeleteGear(Gear);
+ exit
+ end;
if (GameTicks and $3F) = 0 then
- AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0)
+ AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0)
end;
////////////////////////////////////////////////////////////////////////////////
@@ -1760,20 +1760,20 @@
not TryPlaceOnLand(TargetPoint.X - SpritesData[sprAmGirder].Width div 2,
TargetPoint.Y - SpritesData[sprAmGirder].Height div 2,
sprAmGirder, Gear^.State, true) then
- begin
+ begin
PlaySound(sndDenied);
- HHGear^.Message:= HHGear^.Message and not gm_Attack;
- HHGear^.State:= HHGear^.State and not gstAttacking;
- HHGear^.State:= HHGear^.State or gstHHChooseTarget;
- isCursorVisible:= true;
- DeleteGear(Gear)
- end
+ HHGear^.Message:= HHGear^.Message and not gm_Attack;
+ HHGear^.State:= HHGear^.State and not gstAttacking;
+ HHGear^.State:= HHGear^.State or gstHHChooseTarget;
+ isCursorVisible:= true;
+ DeleteGear(Gear)
+ end
else begin
PlaySound(sndPlaced);
- DeleteGear(Gear);
+ DeleteGear(Gear);
OnUsedAmmo(PHedgehog(HHGear^.Hedgehog)^);
ApplyAmmoChanges(PHedgehog(HHGear^.Hedgehog)^)
- end;
+ end;
HHGear^.State:= HHGear^.State and not (gstAttacking or gstAttacked);
HHGear^.Message:= HHGear^.Message and not gm_Attack;
@@ -1789,23 +1789,23 @@
HHGear^.Y:= HHGear^.Y + HHGear^.dY; // hedgehog falling to collect cases
HHGear^.dY:= HHGear^.dY + cGravity;
if TestCollisionYwithGear(HHGear, 1)
- or CheckGearDrowning(HHGear) then
- begin
- DeleteGear(Gear);
- AfterAttack
- end
+ or CheckGearDrowning(HHGear) then
+ begin
+ DeleteGear(Gear);
+ AfterAttack
+ end
end;
procedure doStepTeleportAnim(Gear: PGear);
begin
inc(Gear^.Timer);
if Gear^.Timer = 65 then
- begin
- Gear^.Timer:= 0;
- inc(Gear^.Pos);
- if Gear^.Pos = 11 then
- Gear^.doStep:= @doStepTeleportAfter
- end;
+ begin
+ Gear^.Timer:= 0;
+ inc(Gear^.Pos);
+ if Gear^.Pos = 11 then
+ Gear^.doStep:= @doStepTeleportAfter
+ end;
end;
procedure doStepTeleport(Gear: PGear);
@@ -1817,25 +1817,25 @@
if not TryPlaceOnLand(TargetPoint.X - SpritesData[sprHHTelepMask].Width div 2,
TargetPoint.Y - SpritesData[sprHHTelepMask].Height div 2,
sprHHTelepMask, 0, false) then
- begin
- HHGear^.Message:= HHGear^.Message and not gm_Attack;
- HHGear^.State:= HHGear^.State and not gstAttacking;
- HHGear^.State:= HHGear^.State or gstHHChooseTarget;
- DeleteGear(Gear);
- isCursorVisible:= true;
- PlaySound(sndDenied)
- end
- else begin
- DeleteCI(HHGear);
- SetAllHHToActive;
- Gear^.doStep:= @doStepTeleportAnim;
- Gear^.X:= HHGear^.X;
- Gear^.Y:= HHGear^.Y;
- HHGear^.X:= int2hwFloat(TargetPoint.X);
- HHGear^.Y:= int2hwFloat(TargetPoint.Y);
- HHGear^.State:= HHGear^.State or gstMoving;
- playSound(sndWarp)
- end;
+ begin
+ HHGear^.Message:= HHGear^.Message and not gm_Attack;
+ HHGear^.State:= HHGear^.State and not gstAttacking;
+ HHGear^.State:= HHGear^.State or gstHHChooseTarget;
+ DeleteGear(Gear);
+ isCursorVisible:= true;
+ PlaySound(sndDenied)
+ end
+ else begin
+ DeleteCI(HHGear);
+ SetAllHHToActive;
+ Gear^.doStep:= @doStepTeleportAnim;
+ Gear^.X:= HHGear^.X;
+ Gear^.Y:= HHGear^.Y;
+ HHGear^.X:= int2hwFloat(TargetPoint.X);
+ HHGear^.Y:= int2hwFloat(TargetPoint.Y);
+ HHGear^.State:= HHGear^.State or gstMoving;
+ playSound(sndWarp)
+ end;
TargetPoint.X:= NoPointX;
end;
@@ -1848,49 +1848,49 @@
AllInactive:= false;
if ((Gear^.Message and not gm_Switch) <> 0) or (TurnTimeLeft = 0) then
- begin
- HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
- Msg:= Gear^.Message and not gm_Switch;
- DeleteGear(Gear);
- OnUsedAmmo(PHedgehog(HHGear^.Hedgehog)^);
- ApplyAmmoChanges(PHedgehog(HHGear^.Hedgehog)^);
+ begin
+ HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
+ Msg:= Gear^.Message and not gm_Switch;
+ DeleteGear(Gear);
+ OnUsedAmmo(PHedgehog(HHGear^.Hedgehog)^);
+ ApplyAmmoChanges(PHedgehog(HHGear^.Hedgehog)^);
- HHGear:= CurrentHedgehog^.Gear;
- ApplyAmmoChanges(PHedgehog(HHGear^.Hedgehog)^);
- HHGear^.Message:= Msg;
- exit
- end;
+ HHGear:= CurrentHedgehog^.Gear;
+ ApplyAmmoChanges(PHedgehog(HHGear^.Hedgehog)^);
+ HHGear^.Message:= Msg;
+ exit
+ end;
if (Gear^.Message and gm_Switch) <> 0 then
- begin
- HHGear:= CurrentHedgehog^.Gear;
- HHGear^.Message:= HHGear^.Message and not gm_Switch;
- Gear^.Message:= Gear^.Message and not gm_Switch;
- State:= HHGear^.State;
- HHGear^.State:= 0;
- HHGear^.Active:= false;
- HHGear^.Z:= cHHZ;
- RemoveGearFromList(HHGear);
- InsertGearToList(HHGear);
+ begin
+ HHGear:= CurrentHedgehog^.Gear;
+ HHGear^.Message:= HHGear^.Message and not gm_Switch;
+ Gear^.Message:= Gear^.Message and not gm_Switch;
+ State:= HHGear^.State;
+ HHGear^.State:= 0;
+ HHGear^.Active:= false;
+ HHGear^.Z:= cHHZ;
+ RemoveGearFromList(HHGear);
+ InsertGearToList(HHGear);
- PlaySound(sndSwitchHog);
-
- repeat
- CurrentTeam^.CurrHedgehog:= Succ(CurrentTeam^.CurrHedgehog) mod (CurrentTeam^.HedgehogsNumber);
- until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil);
+ PlaySound(sndSwitchHog);
+
+ repeat
+ CurrentTeam^.CurrHedgehog:= Succ(CurrentTeam^.CurrHedgehog) mod (CurrentTeam^.HedgehogsNumber);
+ until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil);
- CurrentHedgehog:= @CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog];
+ CurrentHedgehog:= @CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog];
- HHGear:= CurrentHedgehog^.Gear;
- HHGear^.State:= State;
- HHGear^.Active:= true;
- FollowGear:= HHGear;
- HHGear^.Z:= cCurrHHZ;
- RemoveGearFromList(HHGear);
- InsertGearToList(HHGear);
- Gear^.X:= HHGear^.X;
- Gear^.Y:= HHGear^.Y
- end;
+ HHGear:= CurrentHedgehog^.Gear;
+ HHGear^.State:= State;
+ HHGear^.Active:= true;
+ FollowGear:= HHGear;
+ HHGear^.Z:= cCurrHHZ;
+ RemoveGearFromList(HHGear);
+ InsertGearToList(HHGear);
+ Gear^.X:= HHGear^.X;
+ Gear^.Y:= HHGear^.Y
+ end;
end;
procedure doStepSwitcher(Gear: PGear);
@@ -1900,10 +1900,10 @@
HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
with HHGear^ do
- begin
- State:= State and not gstAttacking;
- Message:= Message and not gm_Attack
- end
+ begin
+ State:= State and not gstAttacking;
+ Message:= Message and not gm_Attack
+ end
end;
////////////////////////////////////////////////////////////////////////////////
@@ -1918,24 +1918,24 @@
doStepFallingGear(Gear);
if (Gear^.State and gstCollision) <> 0 then
- begin
- doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 20, EXPLAutoSound);
+ begin
+ doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 20, EXPLAutoSound);
- Gear^.dX.isNegative:= not dxn;
- Gear^.dY.isNegative:= not dyn;
- for i:= 0 to 4 do
- begin
- dX:= Gear^.dX + (GetRandom - _0_5) * _0_03;
- dY:= Gear^.dY + (GetRandom - _0_5) * _0_03;
- AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtCluster, 0, dX, dY, 25);
- end;
+ Gear^.dX.isNegative:= not dxn;
+ Gear^.dY.isNegative:= not dyn;
+ for i:= 0 to 4 do
+ begin
+ dX:= Gear^.dX + (GetRandom - _0_5) * _0_03;
+ dY:= Gear^.dY + (GetRandom - _0_5) * _0_03;
+ AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtCluster, 0, dX, dY, 25);
+ end;
- DeleteGear(Gear);
- exit
- end;
+ DeleteGear(Gear);
+ exit
+ end;
if (GameTicks and $3F) = 0 then
- AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0)
+ AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0)
end;
////////////////////////////////////////////////////////////////////////////////
@@ -1952,47 +1952,47 @@
i:= 2;
repeat
- Gear^.X:= Gear^.X + HHGear^.dX;
- Gear^.Y:= Gear^.Y + HHGear^.dY;
- HHGear^.X:= Gear^.X;
- HHGear^.Y:= Gear^.Y;
+ Gear^.X:= Gear^.X + HHGear^.dX;
+ Gear^.Y:= Gear^.Y + HHGear^.dY;
+ HHGear^.X:= Gear^.X;
+ HHGear^.Y:= Gear^.Y;
- inc(Gear^.Damage, 2);
+ 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)
+ dec(i)
until (i = 0) or (Gear^.Damage > Gear^.Health);
inc(upd);
if upd > 3 then
- begin
- if Gear^.Health < 1500 then Gear^.Pos:= 2;
+ begin
+ if Gear^.Health < 1500 then Gear^.Pos:= 2;
- AmmoShove(Gear, 30, 40);
+ AmmoShove(Gear, 30, 40);
- DrawTunnel(HHGear^.X - HHGear^.dX * 10,
- HHGear^.Y - _2 - HHGear^.dY * 10 + hwAbs(HHGear^.dY) * 2,
- HHGear^.dX,
- HHGear^.dY,
- 20 + cHHRadius * 2,
- cHHRadius * 2 + 6);
+ DrawTunnel(HHGear^.X - HHGear^.dX * 10,
+ HHGear^.Y - _2 - HHGear^.dY * 10 + hwAbs(HHGear^.dY) * 2,
+ HHGear^.dX,
+ HHGear^.dY,
+ 20 + cHHRadius * 2,
+ cHHRadius * 2 + 6);
- upd:= 0
- end;
+ upd:= 0
+ end;
if Gear^.Health < Gear^.Damage then
- begin
- doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, EXPLAutoSound);
- AfterAttack;
- DeleteGear(Gear);
- DeleteGear(HHGear);
- end else
- begin
- dec(Gear^.Health, Gear^.Damage);
- Gear^.Damage:= 0
- end
+ begin
+ doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, EXPLAutoSound);
+ AfterAttack;
+ DeleteGear(Gear);
+ DeleteGear(HHGear);
+ end else
+ begin
+ dec(Gear^.Health, Gear^.Damage);
+ Gear^.Damage:= 0
+ end
end;
procedure doStepKamikazeIdle(Gear: PGear);
@@ -2000,11 +2000,11 @@
AllInactive:= false;
dec(Gear^.Timer);
if Gear^.Timer = 0 then
- begin
- Gear^.Pos:= 1;
- PlaySound(sndKamikaze, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack);
- Gear^.doStep:= @doStepKamikazeWork
- end
+ begin
+ Gear^.Pos:= 1;
+ PlaySound(sndKamikaze, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack);
+ Gear^.doStep:= @doStepKamikazeWork
+ end
end;
procedure doStepKamikaze(Gear: PGear);
@@ -2029,7 +2029,7 @@
const cakeh = 27;
cakeDmg = 75;
var CakePoints: array[0..Pred(cakeh)] of record x, y: hwFloat; end;
- CakeI: Longword;
+ CakeI: Longword;
procedure doStepCakeExpl(Gear: PGear);
begin
@@ -2045,7 +2045,7 @@
procedure doStepCakeDown(Gear: PGear);
var gi: PGear;
- dmg: LongInt;
+ dmg: LongInt;
begin
AllInactive:= false;
@@ -2054,39 +2054,39 @@
Gear^.Tag:= 0;
if Gear^.Pos = 0 then
- begin
- 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
+ begin
+ 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
if (CurrentHedgehog^.Gear = gi) and (not gi^.Invulnerable) then
- gi^.State:= gi^.State or gstLoser
+ gi^.State:= gi^.State or gstLoser
else
- gi^.State:= gi^.State or gstWinner;
- gi:= gi^.NextGear
- end;
- Gear^.doStep:= @doStepCakeExpl;
- PlaySound(sndCake)
- end else dec(Gear^.Pos)
+ gi^.State:= gi^.State or gstWinner;
+ gi:= gi^.NextGear
+ end;
+ Gear^.doStep:= @doStepCakeExpl;
+ PlaySound(sndCake)
+ end else dec(Gear^.Pos)
end;
procedure doStepCakeWork(Gear: PGear);
const dirs: array[0..3] of TPoint = ((x: 0; y: -1), (x: 1; y: 0),(x: 0; y: 1),(x: -1; y: 0));
var xx, yy, xxn, yyn: LongInt;
- da: LongInt;
- tdx, tdy: hwFloat;
+ da: LongInt;
+ tdx, tdy: hwFloat;
- procedure PrevAngle;
- begin
- Gear^.Angle:= (LongInt(Gear^.Angle) + 4 - dA) mod 4
- end;
+ procedure PrevAngle;
+ begin
+ Gear^.Angle:= (LongInt(Gear^.Angle) + 4 - dA) mod 4
+ end;
- procedure NextAngle;
- begin
- Gear^.Angle:= (LongInt(Gear^.Angle) + 4 + dA) mod 4
- end;
+ procedure NextAngle;
+ begin
+ Gear^.Angle:= (LongInt(Gear^.Angle) + 4 + dA) mod 4
+ end;
begin
AllInactive:= false;
@@ -2101,49 +2101,49 @@
yyn:= dirs[(LongInt(Gear^.Angle) + 4 + dA) mod 4].y;
if (xx = 0) then
- if TestCollisionYwithGear(Gear, yy) then
- PrevAngle
- else begin
- Gear^.Tag:= 0;
- Gear^.Y:= Gear^.Y + int2hwFloat(yy);
- if not TestCollisionXwithGear(Gear, xxn) then
- begin
- Gear^.X:= Gear^.X + int2hwFloat(xxn);
- NextAngle
- end;
- end;
+ if TestCollisionYwithGear(Gear, yy) then
+ PrevAngle
+ else begin
+ Gear^.Tag:= 0;
+ Gear^.Y:= Gear^.Y + int2hwFloat(yy);
+ if not TestCollisionXwithGear(Gear, xxn) then
+ begin
+ Gear^.X:= Gear^.X + int2hwFloat(xxn);
+ NextAngle
+ end;
+ end;
if (yy = 0) then
- if TestCollisionXwithGear(Gear, xx) then
- PrevAngle
- else begin
- Gear^.Tag:= 0;
- Gear^.X:= Gear^.X + int2hwFloat(xx);
- if not TestCollisionYwithGear(Gear, yyn) then
- begin
- Gear^.Y:= Gear^.Y + int2hwFloat(yyn);
- NextAngle
- end;
- end;
+ if TestCollisionXwithGear(Gear, xx) then
+ PrevAngle
+ else begin
+ Gear^.Tag:= 0;
+ Gear^.X:= Gear^.X + int2hwFloat(xx);
+ if not TestCollisionYwithGear(Gear, yyn) then
+ begin
+ Gear^.Y:= Gear^.Y + int2hwFloat(yyn);
+ NextAngle
+ end;
+ end;
if Gear^.Tag = 0 then
- begin
- CakeI:= (CakeI + 1) mod cakeh;
- tdx:= CakePoints[CakeI].x - Gear^.X;
- tdy:= - CakePoints[CakeI].y + Gear^.Y;
- CakePoints[CakeI].x:= Gear^.X;
- CakePoints[CakeI].y:= Gear^.Y;
- Gear^.DirAngle:= DxDy2Angle(tdx, tdy);
- end;
+ begin
+ CakeI:= (CakeI + 1) mod cakeh;
+ tdx:= CakePoints[CakeI].x - Gear^.X;
+ tdy:= - CakePoints[CakeI].y + Gear^.Y;
+ CakePoints[CakeI].x:= Gear^.X;
+ CakePoints[CakeI].y:= Gear^.Y;
+ Gear^.DirAngle:= DxDy2Angle(tdx, tdy);
+ end;
dec(Gear^.Health);
Gear^.Timer:= Gear^.Health*10; // This is not seconds, but at least it is *some* feedback
if (Gear^.Health = 0) or ((Gear^.Message and gm_Attack) <> 0) then
- begin
- FollowGear:= Gear;
+ begin
+ FollowGear:= Gear;
Gear^.RenderTimer:= false;
- Gear^.doStep:= @doStepCakeDown
- end
+ Gear^.doStep:= @doStepCakeDown
+ end
end;
procedure doStepCakeUp(Gear: PGear);
@@ -2156,15 +2156,15 @@
Gear^.Tag:= 0;
if Gear^.Pos = 6 then
- begin
- for i:= 0 to Pred(cakeh) do
- begin
- CakePoints[i].x:= Gear^.X;
- CakePoints[i].y:= Gear^.Y
- end;
- CakeI:= 0;
- Gear^.doStep:= @doStepCakeWork
- end else inc(Gear^.Pos)
+ begin
+ for i:= 0 to Pred(cakeh) do
+ begin
+ CakePoints[i].x:= Gear^.X;
+ CakePoints[i].y:= Gear^.Y
+ end;
+ CakeI:= 0;
+ Gear^.doStep:= @doStepCakeWork
+ end else inc(Gear^.Pos)
end;
procedure doStepCakeFall(Gear: PGear);
@@ -2173,12 +2173,12 @@
Gear^.dY:= Gear^.dY + cGravity;
if TestCollisionYwithGear(Gear, 1) then
- Gear^.doStep:= @doStepCakeUp
+ Gear^.doStep:= @doStepCakeUp
else
- begin
- Gear^.Y:= Gear^.Y + Gear^.dY;
- if CheckGearDrowning(Gear) then AfterAttack
- end
+ begin
+ Gear^.Y:= Gear^.Y + Gear^.dY;
+ if CheckGearDrowning(Gear) then AfterAttack
+ end
end;
procedure doStepCake(Gear: PGear);
@@ -2207,22 +2207,22 @@
y:= hwRound(Gear^.Y);
if ((y and LAND_HEIGHT_MASK) = 0) and ((x and LAND_WIDTH_MASK) = 0) then
- if (Land[y, x] <> 0) then
- begin
- Gear^.dX.isNegative:= not Gear^.dX.isNegative;
- Gear^.dY.isNegative:= not Gear^.dY.isNegative;
- Gear^.dX:= Gear^.dX * _1_5;
- Gear^.dY:= Gear^.dY * _1_5 - _0_3;
- AmmoShove(Gear, 0, 40);
- AfterAttack;
- DeleteGear(Gear)
- end
- else
+ if (Land[y, x] <> 0) then
+ begin
+ Gear^.dX.isNegative:= not Gear^.dX.isNegative;
+ Gear^.dY.isNegative:= not Gear^.dY.isNegative;
+ Gear^.dX:= Gear^.dX * _1_5;
+ Gear^.dY:= Gear^.dY * _1_5 - _0_3;
+ AmmoShove(Gear, 0, 40);
+ AfterAttack;
+ DeleteGear(Gear)
+ end
+ else
else
- begin
- AfterAttack;
- DeleteGear(Gear)
- end
+ begin
+ AfterAttack;
+ DeleteGear(Gear)
+ end
end;
procedure doStepSeductionWear(Gear: PGear);
@@ -2230,15 +2230,15 @@
AllInactive:= false;
inc(Gear^.Timer);
if Gear^.Timer > 250 then
- begin
- Gear^.Timer:= 0;
- inc(Gear^.Pos);
- if Gear^.Pos = 5 then
- PlaySound(sndYoohoo, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack)
- end;
+ begin
+ Gear^.Timer:= 0;
+ inc(Gear^.Pos);
+ if Gear^.Pos = 5 then
+ PlaySound(sndYoohoo, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack)
+ end;
if Gear^.Pos = 14 then
- Gear^.doStep:= @doStepSeductionWork
+ Gear^.doStep:= @doStepSeductionWork
end;
procedure doStepSeduction(Gear: PGear);
@@ -2256,43 +2256,43 @@
inc(Gear^.Timer);
if Gear^.Timer = 17 then
- Gear^.Timer:= 0
+ Gear^.Timer:= 0
else
- exit;
+ exit;
if cWaterLine > 0 then
- begin
- dec(cWaterLine);
- for i:= 0 to LAND_WIDTH - 1 do
- Land[cWaterLine, i]:= 0;
- SetAllToActive
- end;
+ begin
+ dec(cWaterLine);
+ for i:= 0 to LAND_WIDTH - 1 do
+ Land[cWaterLine, i]:= 0;
+ SetAllToActive
+ end;
inc(Gear^.Tag);
if (Gear^.Tag = 47) or (cWaterLine = 0) then
- DeleteGear(Gear)
+ DeleteGear(Gear)
end;
////////////////////////////////////////////////////////////////////////////////
procedure doStepDrillDrilling(Gear: PGear);
var t: PGearArray;
- ox, oy: hwFloat;
+ ox, oy: hwFloat;
begin
AllInactive:= false;
if (Gear^.Timer > 0) and ((Gear^.Timer mod 10) = 0) then
- begin
- ox:= Gear^.X;
- oy:= Gear^.Y;
- Gear^.X:= Gear^.X + Gear^.dX;
- Gear^.Y:= Gear^.Y + Gear^.dY;
- DrawTunnel(oX, oY, Gear^.dX, Gear^.dY, 2, 6);
+ begin
+ ox:= Gear^.X;
+ oy:= Gear^.Y;
+ Gear^.X:= Gear^.X + Gear^.dX;
+ Gear^.Y:= Gear^.Y + Gear^.dY;
+ DrawTunnel(oX, oY, Gear^.dX, Gear^.dY, 2, 6);
if(CheckGearDrowning(Gear)) then
begin
StopSound(Gear^.SoundChannel);
- exit
+ exit
end
- end;
+ end;
t:= CheckGearsCollision(Gear); //fixes drill not exploding when touching HH bug
if (Gear^.Timer = 0)
@@ -2300,20 +2300,20 @@
or (not TestCollisionYWithGear(Gear, hwSign(Gear^.dY))
and not TestCollisionXWithGear(Gear, hwSign(Gear^.dX)))
or (Land[hwRound(Gear^.Y), hwRound(Gear^.X)] = COLOR_INDESTRUCTIBLE) then
- begin //out of time or exited ground
+ begin //out of time or exited ground
StopSound(Gear^.SoundChannel);
- doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, EXPLAutoSound);
- DeleteGear(Gear);
- exit
- end;
+ doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, EXPLAutoSound);
+ DeleteGear(Gear);
+ exit
+ end;
dec(Gear^.Timer);
end;
procedure doStepDrill(Gear: PGear);
var t: PGearArray;
- oldDx, oldDy: hwFloat;
- t2: hwFloat;
+ oldDx, oldDy: hwFloat;
+ t2: hwFloat;
begin
AllInactive:= false;
@@ -2324,56 +2324,56 @@
doStepFallingGear(Gear);
if (GameTicks and $3F) = 0 then
- AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0);
+ AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0);
if ((Gear^.State and gstCollision) <> 0) then begin //hit
- Gear^.dX:= oldDx;
- Gear^.dY:= oldDy;
+ Gear^.dX:= oldDx;
+ Gear^.dY:= oldDy;
- t:= CheckGearsCollision(Gear);
- if (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 //explode right on contact with HH
- doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, EXPLAutoSound);
- DeleteGear(Gear);
- exit;
- end;
+ t:= CheckGearsCollision(Gear);
+ if (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 //explode right on contact with HH
+ doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, EXPLAutoSound);
+ DeleteGear(Gear);
+ exit;
+ end;
Gear^.SoundChannel:= LoopSound(sndPickhammer);
- Gear^.doStep:= @doStepDrillDrilling;
- dec(Gear^.Timer)
- end
+ Gear^.doStep:= @doStepDrillDrilling;
+ dec(Gear^.Timer)
+ end
end;
////////////////////////////////////////////////////////////////////////////////
procedure doStepBallgunWork(Gear: PGear);
var HHGear: PGear;
- rx, ry: hwFloat;
+ rx, ry: hwFloat;
begin
- AllInactive:= false;
- dec(Gear^.Timer);
- HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
- HedgehogChAngle(HHGear);
- if (Gear^.Timer mod 100) = 0 then
- begin
- rx:= rndSign(getRandom * _0_1);
- ry:= rndSign(getRandom * _0_1);
+ AllInactive:= false;
+ dec(Gear^.Timer);
+ HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
+ HedgehogChAngle(HHGear);
+ if (Gear^.Timer mod 100) = 0 then
+ begin
+ rx:= rndSign(getRandom * _0_1);
+ ry:= rndSign(getRandom * _0_1);
- AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtBall, 0,
- SignAs(AngleSin(HHGear^.Angle) * _0_8, HHGear^.dX) + rx,
- AngleCos(HHGear^.Angle) * ( - _0_8) + ry,
- 0);
+ AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtBall, 0,
+ SignAs(AngleSin(HHGear^.Angle) * _0_8, HHGear^.dX) + rx,
+ AngleCos(HHGear^.Angle) * ( - _0_8) + ry,
+ 0);
- PlaySound(sndGun);
- end;
+ PlaySound(sndGun);
+ end;
- if (Gear^.Timer = 0) or (HHGear^.Damage <> 0) then
- begin
- DeleteGear(Gear);
- AfterAttack
- end
+ if (Gear^.Timer = 0) or (HHGear^.Damage <> 0) then
+ begin
+ DeleteGear(Gear);
+ AfterAttack
+ end
end;
procedure doStepBallgun(Gear: PGear);
@@ -2389,11 +2389,11 @@
procedure doStepRCPlaneWork(Gear: PGear);
const cAngleSpeed = 3;
var HHGear: PGear;
- i: LongInt;
- dX, dY: hwFloat;
- fChanged: boolean;
- trueAngle: Longword;
- t: PGear;
+ i: LongInt;
+ dX, dY: hwFloat;
+ fChanged: boolean;
+ trueAngle: Longword;
+ t: PGear;
begin
AllInactive:= false;
@@ -2406,123 +2406,123 @@
fChanged:= false;
if ((HHGear^.State and gstHHDriven) = 0) or (Gear^.Timer = 0) then
- begin
- fChanged:= true;
- if Gear^.Angle > 2048 then dec(Gear^.Angle) else
- if Gear^.Angle < 2048 then inc(Gear^.Angle) else fChanged:= false
- end
+ begin
+ fChanged:= true;
+ if Gear^.Angle > 2048 then dec(Gear^.Angle) else
+ if Gear^.Angle < 2048 then inc(Gear^.Angle) else fChanged:= false
+ end
else
- begin
- if ((Gear^.Message and gm_Left) <> 0) then
- begin
- fChanged:= true;
- Gear^.Angle:= (Gear^.Angle + (4096 - cAngleSpeed)) mod 4096
- end;
+ begin
+ if ((Gear^.Message and gm_Left) <> 0) then
+ begin
+ fChanged:= true;
+ Gear^.Angle:= (Gear^.Angle + (4096 - cAngleSpeed)) mod 4096
+ end;
- if ((Gear^.Message and gm_Right) <> 0) then
- begin
- fChanged:= true;
- Gear^.Angle:= (Gear^.Angle + cAngleSpeed) mod 4096
- end
- end;
+ if ((Gear^.Message and gm_Right) <> 0) then
+ begin
+ fChanged:= true;
+ Gear^.Angle:= (Gear^.Angle + cAngleSpeed) mod 4096
+ end
+ end;
if fChanged then
- begin
- Gear^.dX.isNegative:= (Gear^.Angle > 2048);
- if Gear^.dX.isNegative then
- trueAngle:= 4096 - Gear^.Angle
- else
- trueAngle:= Gear^.Angle;
+ begin
+ Gear^.dX.isNegative:= (Gear^.Angle > 2048);
+ if Gear^.dX.isNegative then
+ trueAngle:= 4096 - Gear^.Angle
+ else
+ trueAngle:= Gear^.Angle;
- Gear^.dX:= SignAs(AngleSin(trueAngle), Gear^.dX) * _0_25;
- Gear^.dY:= AngleCos(trueAngle) * -_0_25;
- end;
+ Gear^.dX:= SignAs(AngleSin(trueAngle), Gear^.dX) * _0_25;
+ Gear^.dY:= AngleCos(trueAngle) * -_0_25;
+ end;
Gear^.X:= Gear^.X + Gear^.dX;
Gear^.Y:= Gear^.Y + Gear^.dY;
if (TrainingFlags and tfRCPlane) = 0 then
- begin
- if (GameTicks and $FF) = 0 then
- if Gear^.Timer < 3500 then
- AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtEvilTrace, 0, _0, _0, 0)
- else
- AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0);
+ begin
+ if (GameTicks and $FF) = 0 then
+ if Gear^.Timer < 3500 then
+ AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtEvilTrace, 0, _0, _0, 0)
+ else
+ AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0);
- if ((HHGear^.Message and gm_Attack) <> 0) and (Gear^.Health <> 0) then
- begin
- HHGear^.Message := HHGear^.Message and not gm_Attack;
- AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, Gear^.dX * _0_5, Gear^.dY * _0_5, 0);
- dec(Gear^.Health)
- end;
+ if ((HHGear^.Message and gm_Attack) <> 0) and (Gear^.Health <> 0) then
+ begin
+ HHGear^.Message := HHGear^.Message and not gm_Attack;
+ AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, Gear^.dX * _0_5, Gear^.dY * _0_5, 0);
+ dec(Gear^.Health)
+ end;
- if ((HHGear^.Message and gm_LJump) <> 0)
- and ((Gear^.State and gsttmpFlag) = 0) then
- begin
- Gear^.State:= Gear^.State or gsttmpFlag;
- PauseMusic;
- playSound(sndRideOfTheValkyries);
- end;
+ if ((HHGear^.Message and gm_LJump) <> 0)
+ and ((Gear^.State and gsttmpFlag) = 0) then
+ begin
+ Gear^.State:= Gear^.State or gsttmpFlag;
+ PauseMusic;
+ playSound(sndRideOfTheValkyries);
+ end;
- // pickup bonuses
- t:= CheckGearNear(Gear, gtCase, 36, 36);
- if t <> nil then
- PickUp(HHGear, t);
- end
+ // pickup bonuses
+ t:= CheckGearNear(Gear, gtCase, 36, 36);
+ if t <> nil then
+ PickUp(HHGear, t);
+ end
else
- begin
- if (GameTicks and $FF) = 0 then
- AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0);
+ begin
+ if (GameTicks and $FF) = 0 then
+ AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0);
- // pickup targets
- t:= CheckGearNear(Gear, gtTarget, 36, 36);
- if t <> nil then
- begin
- if t^.Tag <> 0 then // collect it only once
- exit;
- PlaySound(sndShotgunReload);
- t^.Tag:= 1;
- TrainingTargetGear:= nil; // remove target cursor
- exit;
- end;
+ // pickup targets
+ t:= CheckGearNear(Gear, gtTarget, 36, 36);
+ if t <> nil then
+ begin
+ if t^.Tag <> 0 then // collect it only once
+ exit;
+ PlaySound(sndShotgunReload);
+ t^.Tag:= 1;
+ TrainingTargetGear:= nil; // remove target cursor
+ exit;
+ end;
- if (TurnTimeLeft > 0) then
- dec(TurnTimeLeft)
- end;
-
+ if (TurnTimeLeft > 0) then
+ dec(TurnTimeLeft)
+ end;
+
CheckCollision(Gear);
if ((Gear^.State and gstCollision) <> 0) or (((TrainingFlags and tfRCPlane) <> 0) and (TurnTimeLeft = 0))
- or CheckGearDrowning(Gear) then
- begin
- if ((TrainingFlags and tfRCPlane) <> 0) and ((TrainingFlags and tfTimeTrial) <> 0 ) and (TimeTrialStopTime = 0) then TimeTrialStopTime:= RealTicks;
- StopSound(Gear^.SoundChannel);
- StopSound(sndRideOfTheValkyries);
- ResumeMusic;
+ or CheckGearDrowning(Gear) then
+ begin
+ if ((TrainingFlags and tfRCPlane) <> 0) and ((TrainingFlags and tfTimeTrial) <> 0 ) and (TimeTrialStopTime = 0) then TimeTrialStopTime:= RealTicks;
+ StopSound(Gear^.SoundChannel);
+ StopSound(sndRideOfTheValkyries);
+ ResumeMusic;
- if ((Gear^.State and gstCollision) <> 0) or (((TrainingFlags and tfRCPlane) <> 0) and (TurnTimeLeft = 0)) then
- begin
- doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 25, EXPLAutoSound);
- for i:= 0 to 32 do
- begin
- dX:= AngleCos(i * 64) * _0_5 * (GetRandom + _1);
- dY:= AngleSin(i * 64) * _0_5 * (GetRandom + _1);
- AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, dX, dY, 0);
- AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, dX, -dY, 0);
- end;
- DeleteGear(Gear)
- end;
+ if ((Gear^.State and gstCollision) <> 0) or (((TrainingFlags and tfRCPlane) <> 0) and (TurnTimeLeft = 0)) then
+ begin
+ doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 25, EXPLAutoSound);
+ for i:= 0 to 32 do
+ begin
+ dX:= AngleCos(i * 64) * _0_5 * (GetRandom + _1);
+ dY:= AngleSin(i * 64) * _0_5 * (GetRandom + _1);
+ AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, dX, dY, 0);
+ AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, dX, -dY, 0);
+ end;
+ DeleteGear(Gear)
+ end;
- AfterAttack;
- CurAmmoGear:= nil;
- TurnTimeLeft:= 14 * 125;
-
- if (TrainingFlags and tfRCPlane) <> 0 then
- TurnTimeLeft:= 0; // HACK: RCPlane training allows unlimited plane starts in last 2 seconds
+ AfterAttack;
+ CurAmmoGear:= nil;
+ TurnTimeLeft:= 14 * 125;
+
+ if (TrainingFlags and tfRCPlane) <> 0 then
+ TurnTimeLeft:= 0; // HACK: RCPlane training allows unlimited plane starts in last 2 seconds
- HHGear^.Message:= 0;
- ParseCommand('/taunt '#1, true)
- end
+ HHGear^.Message:= 0;
+ ParseCommand('/taunt '#1, true)
+ end
end;
procedure doStepRCPlane(Gear: PGear);
@@ -2599,24 +2599,24 @@
if (Gear^.Health = 0)
or (HHGear^.Damage <> 0)
- or CheckGearDrowning(HHGear)
+ or CheckGearDrowning(HHGear)
or (TurnTimeLeft = 0)
// allow brief ground touches - to be fair on this, might need another counter
or (((GameTicks and $1FF) = 0) and (not HHGear^.dY.isNegative) and TestCollisionYwithGear(HHGear, 1))
- or ((Gear^.Message and gm_Attack) <> 0) then
- begin
- with HHGear^ do
- begin
- Message:= 0;
+ or ((Gear^.Message and gm_Attack) <> 0) then
+ begin
+ with HHGear^ do
+ begin
+ Message:= 0;
Active:= true;
- State:= State or gstMoving
- end;
- DeleteGear(Gear);
- isCursorVisible:= false;
+ State:= State or gstMoving
+ end;
+ DeleteGear(Gear);
+ isCursorVisible:= false;
// if Gear^.Tex <> nil then FreeTexture(Gear^.Tex);
// Gear^.Tex:= RenderStringTex(trmsg[sidFuel] + ': ' + inttostr(round(Gear^.Health / 20)) + '%', cWhiteColor, fntSmall)
//AddCaption(trmsg[sidFuel]+': '+inttostr(round(Gear^.Health/20))+'%', cWhiteColor, capgrpAmmostate);
- end
+ end
end;
////////////////////////////////////////////////////////////////////////////////
@@ -2630,13 +2630,13 @@
OnUsedAmmo(PHedgehog(HHGear^.Hedgehog)^);
ApplyAmmoChanges(PHedgehog(HHGear^.Hedgehog)^);
with HHGear^ do
- begin
- State:= State and not gstAttacking;
- Message:= Message and not (gm_Attack or gm_Up or gm_Precise or gm_Left or gm_Right);
+ begin
+ State:= State and not gstAttacking;
+ Message:= Message and not (gm_Attack or gm_Up or gm_Precise or gm_Left or gm_Right);
if (dY < _0_1) and (dY > -_0_1) then
begin
Gear^.State:= Gear^.State or gsttmpFlag;
dY:= dY - _0_2
end
- end
+ end
end;