diff -r 20ff80421736 -r e4e366013e9a hedgewars/uGearsList.pas --- a/hedgewars/uGearsList.pas Sun Jun 16 00:46:11 2013 +0400 +++ b/hedgewars/uGearsList.pas Mon Jun 17 16:56:58 2013 +0200 @@ -267,7 +267,7 @@ end; State:= State or gstInvisible; Health:= random(vobFrameTicks); - Timer:= random(vobFramesCount); + if gear^.Timer = 0 then Timer:= random(vobFramesCount); Damage:= (random(2) * 2 - 1) * (vobVelocity + random(vobVelocity)) * 8; end end; @@ -279,7 +279,7 @@ end; gtBee: begin gear^.Radius:= 5; - gear^.Timer:= 500; + if gear^.Timer = 0 then gear^.Timer:= 500; gear^.RenderTimer:= true; gear^.Elasticity:= _0_9; gear^.Tag:= 0; @@ -288,16 +288,16 @@ gear^.Radius:= 250; end; gtShotgunShot: begin - gear^.Timer:= 900; + if gear^.Timer = 0 then gear^.Timer:= 900; gear^.Radius:= 2 end; gtPickHammer: begin gear^.Radius:= 10; - gear^.Timer:= 4000 + if gear^.Timer = 0 then gear^.Timer:= 4000 end; gtHammerHit: begin gear^.Radius:= 8; - gear^.Timer:= 125 + if gear^.Timer = 0 then gear^.Timer:= 125 end; gtRope: begin gear^.Radius:= 3; @@ -313,10 +313,13 @@ gear^.Elasticity:= _0_55; gear^.Friction:= _0_995; gear^.Density:= _1; - if cMinesTime < 0 then - gear^.Timer:= getrandom(51)*100 - else - gear^.Timer:= cMinesTime; + if gear^.Timer = 0 then + begin + if cMinesTime < 0 then + gear^.Timer:= getrandom(51)*100 + else + gear^.Timer:= cMinesTime + end end; gtSMine: begin gear^.Health:= 10; @@ -325,7 +328,7 @@ gear^.Elasticity:= _0_55; gear^.Friction:= _0_995; gear^.Density:= _1_6; - gear^.Timer:= 500; + if gear^.Timer = 0 then gear^.Timer:= 500; end; gtKnife: begin gear^.Density:= _4; @@ -336,7 +339,7 @@ gear^.nImpactSounds:= 1; gear^.Radius:= 16; gear^.Elasticity:= _0_3; - gear^.Timer:= 500 + if gear^.Timer = 0 then gear^.Timer:= 500 end; gtExplosives: begin gear^.ImpactSound:= sndGrenadeImpact; @@ -361,7 +364,7 @@ gear^.Elasticity:= _0_55; gear^.Friction:= _0_03; gear^.Density:= _2; - gear^.Timer:= 5000; + if gear^.Timer = 0 then gear^.Timer:= 5000; end; gtCluster: begin gear^.Radius:= 2; @@ -391,7 +394,7 @@ end; gtBlowTorch: begin gear^.Radius:= cHHRadius + cBlowTorchC; - gear^.Timer:= 7500 + if gear^.Timer = 0 then gear^.Timer:= 7500 end; gtSwitcher: begin gear^.Z:= cCurrHHZ @@ -401,10 +404,8 @@ gear^.nImpactSounds:= 1; gear^.Radius:= 10; gear^.Elasticity:= _0_3; - gear^.Timer:= 0 end; gtTardis: begin - gear^.Timer:= 0; gear^.Pos:= 1; gear^.Z:= cCurrHHZ+1; end; @@ -440,7 +441,7 @@ gear^.Friction:= _0_96; gear^.Density:= _1_5; gear^.RenderTimer:= true; - gear^.Timer:= 5000 + if gear^.Timer = 0 then gear^.Timer:= 5000 end; gtDrill: begin if gear^.Timer = 0 then @@ -456,23 +457,23 @@ gear^.AdvBounce:= 1; gear^.Radius:= 5; gear^.Tag:= random(8); - gear^.Timer:= 5000; + if gear^.Timer = 0 then gear^.Timer:= 5000; gear^.Elasticity:= _0_7; gear^.Friction:= _0_995; gear^.Density:= _1_5; end; gtBallgun: begin - gear^.Timer:= 5001; + if gear^.Timer = 0 then gear^.Timer:= 5001; end; gtRCPlane: begin - gear^.Timer:= 15000; + if gear^.Timer = 0 then gear^.Timer:= 15000; gear^.Health:= 3; gear^.Radius:= 8 end; gtJetpack: begin gear^.Health:= 2000; gear^.Damage:= 100; - gear^.State:= gstSubmersible + gear^.State:= Gear^.State or gstSubmersible end; gtMolotov: begin gear^.Radius:= 6; @@ -480,7 +481,6 @@ end; gtBirdy: begin gear^.Radius:= 16; // todo: check - gear^.Timer:= 0; gear^.Health := 2000; gear^.FlightTime := 2; end; @@ -513,18 +513,18 @@ end; gtFlamethrower: begin gear^.Tag:= 10; - gear^.Timer:= 10; + if gear^.Timer = 0 then gear^.Timer:= 10; gear^.Health:= 500; gear^.Damage:= 100; end; gtLandGun: begin gear^.Tag:= 10; - gear^.Timer:= 10; + if gear^.Timer = 0 then gear^.Timer:= 10; gear^.Health:= 1000; gear^.Damage:= 100; end; gtPoisonCloud: begin - gear^.Timer:= 5000; + if gear^.Timer = 0 then gear^.Timer:= 5000; gear^.dY:= int2hwfloat(-4 + longint(getRandom(8))) / 1000; end; gtResurrector: begin @@ -535,7 +535,7 @@ gear^.Tag := 47; end; gtNapalmBomb: begin - gear^.Timer:= 1000; + if gear^.Timer = 0 then gear^.Timer:= 1000; gear^.Radius:= 5; gear^.Density:= _1_5; end;