3629 |
3629 |
3630 //////////////////////////////////////////////////////////////////////////////// |
3630 //////////////////////////////////////////////////////////////////////////////// |
3631 procedure doStepFlamethrowerWork(Gear: PGear); |
3631 procedure doStepFlamethrowerWork(Gear: PGear); |
3632 var |
3632 var |
3633 HHGear: PGear; |
3633 HHGear: PGear; |
3634 rx, ry: hwFloat; |
3634 rx, ry, speed: hwFloat; |
3635 gX, gY: LongInt; |
3635 gX, gY: LongInt; |
3636 Fire: PGear; |
3636 Fire: PGear; |
3637 begin |
3637 begin |
3638 AllInactive := false; |
3638 AllInactive := false; |
3639 dec(Gear^.Timer); |
|
3640 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
3639 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
3641 HedgehogChAngle(HHGear); |
3640 HedgehogChAngle(HHGear); |
3642 gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle); |
3641 gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle); |
3643 gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle); |
3642 gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle); |
3644 if (Gear^.Timer mod 100) = 0 then |
3643 |
3645 begin |
3644 if (GameTicks and $FF) = 0 then |
3646 rx := rndSign(getRandom * _0_1); |
3645 begin |
3647 ry := rndSign(getRandom * _0_1); |
3646 if (HHGear^.Message and gm_Right) <> 0 then |
3648 |
3647 begin |
3649 Fire := AddGear(gx, gy, gtFlame, 0, |
3648 if HHGear^.dX.isNegative and (Gear^.Tag < 20) then inc(Gear^.Tag) |
3650 SignAs(AngleSin(HHGear^.Angle) * _0_8, HHGear^.dX) + rx, |
3649 else if Gear^.Tag > 5 then dec(Gear^.Tag); |
3651 AngleCos(HHGear^.Angle) * ( - _0_8) + ry, 0); |
3650 end |
3652 Fire^.State := Fire^.State or gsttmpFlag; |
3651 else if (HHGear^.Message and gm_Left) <> 0 then |
3653 |
3652 begin |
3654 if (Gear^.Timer mod 200) = 0 then |
3653 if HHGear^.dX.isNegative and (Gear^.Tag > 5) then dec(Gear^.Tag) |
|
3654 else if Gear^.Tag < 20 then inc(Gear^.Tag); |
|
3655 end |
|
3656 end; |
|
3657 |
|
3658 dec(Gear^.Timer); |
|
3659 if Gear^.Timer = 0 then |
|
3660 begin |
|
3661 dec(Gear^.Health); |
|
3662 if (Gear^.Health mod 10) = 0 then |
|
3663 begin |
|
3664 rx := rndSign(getRandom * _0_1); |
|
3665 ry := rndSign(getRandom * _0_1); |
|
3666 speed := _0_8 * (_10 / Gear^.Tag); |
|
3667 |
3655 Fire := AddGear(gx, gy, gtFlame, 0, |
3668 Fire := AddGear(gx, gy, gtFlame, 0, |
3656 SignAs(AngleSin(HHGear^.Angle) * _0_8, HHGear^.dX) + rx, |
3669 SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx, |
3657 AngleCos(HHGear^.Angle) * ( - _0_8) + ry, 0); |
3670 AngleCos(HHGear^.Angle) * ( - speed) + ry, 0); |
3658 end; |
3671 Fire^.State := Fire^.State or gsttmpFlag; |
3659 |
3672 |
3660 if (Gear^.Timer = 0) or (HHGear^.Damage <> 0) then |
3673 if (Gear^.Health mod 20) = 0 then |
|
3674 Fire := AddGear(gx, gy, gtFlame, 0, |
|
3675 SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx, |
|
3676 AngleCos(HHGear^.Angle) * ( - speed) + ry, 0); |
|
3677 end; |
|
3678 Gear^.Timer:= Gear^.Tag |
|
3679 end; |
|
3680 |
|
3681 if (Gear^.Health = 0) or (HHGear^.Damage <> 0) then |
3661 begin |
3682 begin |
3662 DeleteGear(Gear); |
3683 DeleteGear(Gear); |
3663 AfterAttack |
3684 AfterAttack |
3664 end |
3685 end |
|
3686 else |
|
3687 begin |
|
3688 if Gear^.Tex <> nil then FreeTexture(Gear^.Tex); |
|
3689 Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ': ' + inttostr(round(Gear^.Health / 5)) + |
|
3690 '%', cWhiteColor, fntSmall) |
|
3691 end |
3665 end; |
3692 end; |
3666 |
3693 |
3667 procedure doStepFlamethrower(Gear: PGear); |
3694 procedure doStepFlamethrower(Gear: PGear); |
3668 var |
3695 var |
3669 HHGear: PGear; |
3696 HHGear: PGear; |
3670 begin |
3697 begin |
3671 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
3698 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
3672 HHGear^.Message := HHGear^.Message and not (gm_Up or gm_Down); |
3699 HHGear^.Message := HHGear^.Message and not (gm_Up or gm_Down or gm_Left or gm_Right); |
3673 HHGear^.State := HHGear^.State or gstNotKickable; |
3700 HHGear^.State := HHGear^.State or gstNotKickable; |
3674 Gear^.doStep := @doStepFlamethrowerWork |
3701 Gear^.doStep := @doStepFlamethrowerWork |
3675 end; |
3702 end; |
3676 |
3703 |
3677 |
3704 |