hedgewars/GSHandlers.inc
branch0.9.14
changeset 4251 4b7d3507d175
parent 4233 b4ad20bfe310
child 4253 160f987a5d9f
equal deleted inserted replaced
4249:f6d0b8445cac 4251:4b7d3507d175
  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;