--- a/hedgewars/uGearsList.pas Thu Jul 26 11:01:32 2012 +0200
+++ b/hedgewars/uGearsList.pas Thu Jul 26 11:10:56 2012 +0200
@@ -27,11 +27,13 @@
procedure InsertGearToList(Gear: PGear);
procedure RemoveGearFromList(Gear: PGear);
+var curHandledGear: PGear;
+
implementation
uses uRandom, uUtils, uConsts, uVariables, uAmmos, uTeams, uStats,
uTextures, uScript, uRenderUtils, uAI, uCollisions,
- uGearsRender, uGearsUtils;
+ uGearsRender, uGearsUtils, uDebug;
var GCounter: LongWord = 0; // this does not get re-initialized, but should be harmless
@@ -40,7 +42,7 @@
begin
tmp:= GearsList;
ptmp:= GearsList;
- while (tmp <> nil) and (tmp^.Z <= Gear^.Z) do
+ while (tmp <> nil) and (tmp^.Z < Gear^.Z) do
begin
ptmp:= tmp;
tmp:= tmp^.NextGear
@@ -63,8 +65,11 @@
end;
end;
+
procedure RemoveGearFromList(Gear: PGear);
begin
+TryDo((curHandledGear = nil) or (Gear = curHandledGear), 'You''re doing it wrong', true);
+
if Gear^.NextGear <> nil then
Gear^.NextGear^.PrevGear:= Gear^.PrevGear;
if Gear^.PrevGear <> nil then
@@ -72,7 +77,8 @@
else
GearsList:= Gear^.NextGear
end;
-
+
+
function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer: LongWord): PGear;
var gear: PGear;
begin
@@ -92,11 +98,9 @@
gear^.doStep:= doStepHandlers[Kind];
gear^.CollisionIndex:= -1;
gear^.Timer:= Timer;
-gear^.FlightTime:= 0;
gear^.uid:= GCounter;
gear^.SoundChannel:= -1;
gear^.ImpactSound:= sndNone;
-gear^.nImpactSounds:= 0;
gear^.Density:= _1;
// Define ammo association, if any.
gear^.AmmoType:= GearKindAmmoTypeMap[Kind];
@@ -104,7 +108,7 @@
if CurrentHedgehog <> nil then gear^.Hedgehog:= CurrentHedgehog;
-if Ammoz[Gear^.AmmoType].Ammo.Propz and ammoprop_NeedTarget <> 0 then
+if (Ammoz[Gear^.AmmoType].Ammo.Propz and ammoprop_NeedTarget <> 0) then
gear^.Z:= cHHZ+1
else gear^.Z:= cUsualZ;
@@ -294,6 +298,7 @@
gear^.Radius:= 15;
gear^.Tag:= Y
end;
+ gtAirAttack: gear^.Z:= cHHZ+2;
gtAirBomb: begin
gear^.Radius:= 5;
gear^.Density:= _2;
@@ -458,6 +463,13 @@
gear^.Pos:= 1;
end;
gtIceGun: gear^.Health:= 1000;
+gtGenericFaller:begin
+ gear^.AdvBounce:= 1;
+ gear^.Radius:= 1;
+ gear^.Elasticity:= _0_9;
+ gear^.Friction:= _0_995;
+ gear^.Density:= _1;
+ end;
end;
InsertGearToList(gear);
@@ -555,8 +567,10 @@
end
end;
with Gear^ do
+ begin
AddFileLog('Delete: #' + inttostr(uid) + ' (' + inttostr(hwRound(x)) + ',' + inttostr(hwRound(y)) + '), d(' + floattostr(dX) + ',' + floattostr(dY) + ') type = ' + EnumToStr(Kind));
-
+ AddRandomness(X.round xor X.frac xor dX.round xor dX.frac xor Y.round xor Y.frac xor dY.round xor dY.frac)
+ end;
if CurAmmoGear = Gear then
CurAmmoGear:= nil;
if FollowGear = Gear then