3047 end |
3047 end |
3048 end; |
3048 end; |
3049 |
3049 |
3050 // erases them all at once :-/ |
3050 // erases them all at once :-/ |
3051 if (Gear^.Timer <> 0) and (GameTicks - Gear^.Timer > 250) then |
3051 if (Gear^.Timer <> 0) and (GameTicks - Gear^.Timer > 250) then |
3052 begin |
3052 begin |
3053 Gear^.Timer := 0; |
3053 Gear^.Timer := 0; |
3054 Gear^.MsgParam := 0 |
3054 Gear^.MsgParam := 0 |
3055 end; |
3055 end; |
3056 |
3056 |
3057 if Gear^.Health < 0 then Gear^.Health := 0; |
3057 if Gear^.Health < 0 then Gear^.Health := 0; |
3058 if (GameTicks and $3F) = 0 then |
3058 i:= Gear^.Health div 20; |
3059 begin |
3059 if (i <> Gear^.Damage) and ((GameTicks and $3F) = 0) then |
|
3060 begin |
|
3061 Gear^.Damage:= i; |
3060 //AddCaption('Fuel: '+inttostr(round(Gear^.Health/20))+'%', cWhiteColor, capgrpAmmostate); |
3062 //AddCaption('Fuel: '+inttostr(round(Gear^.Health/20))+'%', cWhiteColor, capgrpAmmostate); |
3061 if Gear^.Tex <> nil then FreeTexture(Gear^.Tex); |
3063 if Gear^.Tex <> nil then FreeTexture(Gear^.Tex); |
3062 Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ': ' + inttostr(round(Gear^.Health / 20)) + |
3064 Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ': ' + inttostr(i) + |
3063 '%', cWhiteColor, fntSmall) |
3065 '%', cWhiteColor, fntSmall) |
3064 end; |
3066 end; |
3065 |
3067 |
3066 if HHGear^.Message and (gmAttack or gmUp or gmPrecise or gmLeft or gmRight) <> 0 then Gear^ |
3068 if HHGear^.Message and (gmAttack or gmUp or gmPrecise or gmLeft or gmRight) <> 0 then Gear^ |
3067 .State := Gear^.State and not gsttmpFlag; |
3069 .State := Gear^.State and not gsttmpFlag; |
3984 //////////////////////////////////////////////////////////////////////////////// |
3986 //////////////////////////////////////////////////////////////////////////////// |
3985 procedure doStepFlamethrowerWork(Gear: PGear); |
3987 procedure doStepFlamethrowerWork(Gear: PGear); |
3986 var |
3988 var |
3987 HHGear: PGear; |
3989 HHGear: PGear; |
3988 rx, ry, speed: hwFloat; |
3990 rx, ry, speed: hwFloat; |
3989 gX, gY: LongInt; |
3991 i, gX, gY: LongInt; |
3990 Fire: PGear; |
3992 Fire: PGear; |
3991 begin |
3993 begin |
3992 AllInactive := false; |
3994 AllInactive := false; |
3993 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
3995 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
3994 HedgehogChAngle(HHGear); |
3996 HedgehogChAngle(HHGear); |
3995 gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle); |
3997 gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle); |
3996 gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle); |
3998 gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle); |
3997 |
3999 |
3998 if (GameTicks and $FF) = 0 then |
4000 if (GameTicks and $FF) = 0 then |
3999 begin |
4001 begin |
4000 if (HHGear^.Message and gmRight) <> 0 then |
4002 if (HHGear^.Message and gmRight) <> 0 then |
4001 begin |
4003 begin |
4002 if HHGear^.dX.isNegative and (Gear^.Tag < 20) then inc(Gear^.Tag) |
4004 if HHGear^.dX.isNegative and (Gear^.Tag < 20) then inc(Gear^.Tag) |
4003 else if Gear^.Tag > 5 then dec(Gear^.Tag); |
4005 else if Gear^.Tag > 5 then dec(Gear^.Tag); |
4004 end |
4006 end |
4005 else if (HHGear^.Message and gmLeft) <> 0 then |
4007 else if (HHGear^.Message and gmLeft) <> 0 then |
4006 begin |
4008 begin |
4007 if HHGear^.dX.isNegative and (Gear^.Tag > 5) then dec(Gear^.Tag) |
4009 if HHGear^.dX.isNegative and (Gear^.Tag > 5) then dec(Gear^.Tag) |
4008 else if Gear^.Tag < 20 then inc(Gear^.Tag); |
4010 else if Gear^.Tag < 20 then inc(Gear^.Tag); |
4009 end |
4011 end |
4010 end; |
4012 end; |
4011 |
4013 |
4012 dec(Gear^.Timer); |
4014 dec(Gear^.Timer); |
4013 if Gear^.Timer = 0 then |
4015 if Gear^.Timer = 0 then |
4014 begin |
4016 begin |
4015 dec(Gear^.Health); |
4017 dec(Gear^.Health); |
4016 if (Gear^.Health mod 10) = 0 then |
4018 if (Gear^.Health mod 10) = 0 then |
4017 begin |
4019 begin |
4018 rx := rndSign(getRandom * _0_1); |
4020 rx := rndSign(getRandom * _0_1); |
4019 ry := rndSign(getRandom * _0_1); |
4021 ry := rndSign(getRandom * _0_1); |
4020 speed := _0_8 * (_10 / Gear^.Tag); |
4022 speed := _0_8 * (_10 / Gear^.Tag); |
4021 |
4023 |
4022 Fire := AddGear(gx, gy, gtFlame, 0, |
4024 Fire := AddGear(gx, gy, gtFlame, 0, |
4026 |
4028 |
4027 if (Gear^.Health mod 20) = 0 then |
4029 if (Gear^.Health mod 20) = 0 then |
4028 Fire := AddGear(gx, gy, gtFlame, 0, |
4030 Fire := AddGear(gx, gy, gtFlame, 0, |
4029 SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx, |
4031 SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx, |
4030 AngleCos(HHGear^.Angle) * ( - speed) + ry, 0); |
4032 AngleCos(HHGear^.Angle) * ( - speed) + ry, 0); |
4031 end; |
4033 end; |
4032 Gear^.Timer:= Gear^.Tag |
4034 Gear^.Timer:= Gear^.Tag |
4033 end; |
4035 end; |
4034 |
4036 |
4035 if (Gear^.Health = 0) or (HHGear^.Damage <> 0) then |
4037 if (Gear^.Health = 0) or (HHGear^.Damage <> 0) then |
4036 begin |
4038 begin |
4037 DeleteGear(Gear); |
4039 DeleteGear(Gear); |
4038 AfterAttack |
4040 AfterAttack |
4039 end |
4041 end |
4040 else |
4042 else |
4041 begin |
4043 begin |
4042 if Gear^.Tex <> nil then FreeTexture(Gear^.Tex); |
4044 i:= Gear^.Health div 5; |
4043 Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ': ' + inttostr(round(Gear^.Health / 5)) + |
4045 if (i <> Gear^.Damage) and ((GameTicks and $3F) = 0) then |
4044 '%', cWhiteColor, fntSmall) |
4046 begin |
4045 end |
4047 Gear^.Damage:= i; |
|
4048 if Gear^.Tex <> nil then FreeTexture(Gear^.Tex); |
|
4049 Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ': ' + inttostr(i) + |
|
4050 '%', cWhiteColor, fntSmall) |
|
4051 end |
|
4052 end |
4046 end; |
4053 end; |
4047 |
4054 |
4048 procedure doStepFlamethrower(Gear: PGear); |
4055 procedure doStepFlamethrower(Gear: PGear); |
4049 var |
4056 var |
4050 HHGear: PGear; |
4057 HHGear: PGear; |