diff -r 818134c33f54 -r 083733ec7941 hedgewars/uGearsHandlersMess.pas --- a/hedgewars/uGearsHandlersMess.pas Wed Aug 01 23:12:37 2018 +0200 +++ b/hedgewars/uGearsHandlersMess.pas Thu Aug 02 01:24:40 2018 +0200 @@ -1030,7 +1030,7 @@ if Gear^.Timer = 0 then begin - // no "fuel"? just fall + // no energy? just fall doStepFallingGear(Gear); // if drowning, stop bee sound if (Gear^.State and gstDrowning) <> 0 then @@ -4170,7 +4170,7 @@ end;*) if HHGear^.Message and gmPrecise <> 0 then HedgehogChAngle(HHGear) - else if Gear^.Health > 0 then + else if (Gear^.Health > 0) or (Gear^.Health = JETPACK_FUEL_INFINITE) then begin if HHGear^.Message and gmUp <> 0 then begin @@ -4192,7 +4192,8 @@ HHGear^.dY := HHGear^.dY - move; end end; - dec(Gear^.Health, fuel); + if Gear^.Health <> JETPACK_FUEL_INFINITE then + dec(Gear^.Health, fuel); Gear^.MsgParam := Gear^.MsgParam or gmUp; Gear^.Timer := GameTicks end; @@ -4218,7 +4219,8 @@ end end else PlaySound(sndJetpackBoost); - dec(Gear^.Health, fuel div 5); + if Gear^.Health <> JETPACK_FUEL_INFINITE then + dec(Gear^.Health, fuel div 5); Gear^.MsgParam := Gear^.MsgParam or (HHGear^.Message and (gmLeft or gmRight)); Gear^.Timer := GameTicks end @@ -4231,7 +4233,7 @@ Gear^.MsgParam := 0 end; - if Gear^.Health < 0 then + if (Gear^.Health < 0) and (Gear^.Health <> JETPACK_FUEL_INFINITE) then Gear^.Health := 0; i:= Gear^.Health div 20; @@ -4239,9 +4241,9 @@ if (i <> Gear^.Damage) and ((GameTicks and $3F) = 0) then begin Gear^.Damage:= i; - //AddCaption('Fuel: '+inttostr(round(Gear^.Health/20))+'%', cWhiteColor, capgrpAmmostate); FreeAndNilTexture(Gear^.Tex); - Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ansistring(': ' + inttostr(i) + '%'), cWhiteColor, fntSmall) + if Gear^.Health <> JETPACK_FUEL_INFINITE then + Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ansistring(': ' + inttostr(i) + '%'), cWhiteColor, fntSmall) end; if (HHGear^.Message and (gmAttack or gmUp or gmLeft or gmRight) <> 0) and @@ -4334,7 +4336,7 @@ procedure doStepBirdyFly(Gear: PGear); var HHGear: PGear; - fuel, i: LongInt; + energy, i: LongInt; move: hwFloat; s: ansistring; begin @@ -4352,7 +4354,7 @@ end; move := _0_2; - fuel := 50; + energy:= 50; if Gear^.Pos > 0 then dec(Gear^.Pos, 1) @@ -4370,7 +4372,8 @@ or (HHGear^.Y > -_256) then HHGear^.dY := HHGear^.dY - move; - dec(Gear^.Health, fuel); + if (Gear^.Health <> BIRDY_ENERGY_INFINITE) then + dec(Gear^.Health, energy); Gear^.MsgParam := Gear^.MsgParam or gmUp; end; @@ -4378,14 +4381,15 @@ if (HHGear^.Message and (gmLeft or gmRight)) <> 0 then begin HHGear^.dX := HHGear^.dX + (move * _0_1); - dec(Gear^.Health, fuel div 5); + if (Gear^.Health <> BIRDY_ENERGY_INFINITE) then + dec(Gear^.Health, energy div 5); Gear^.MsgParam := Gear^.MsgParam or (HHGear^.Message and (gmLeft or gmRight)); end; - if Gear^.Health < 0 then + if (Gear^.Health < 0) and (Gear^.Health <> BIRDY_ENERGY_INFINITE) then Gear^.Health := 0; - if ((GameTicks and $FF) = 0) and (Gear^.Health < 500) then + if ((GameTicks and $FF) = 0) and (Gear^.Health < 500) and (Gear^.Health <> BIRDY_ENERGY_INFINITE) then for i:= ((500-Gear^.Health) div 250) downto 0 do AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtFeather);