2665 Gear^.State:= Gear^.State or gsttmpFlag; |
2665 Gear^.State:= Gear^.State or gsttmpFlag; |
2666 dY:= dY - _0_2 |
2666 dY:= dY - _0_2 |
2667 end |
2667 end |
2668 end |
2668 end |
2669 end; |
2669 end; |
|
2670 |
|
2671 //////////////////////////////////////////////////////////////////////////////// |
|
2672 procedure doStepBirdyVanish(Gear: PGear); |
|
2673 begin |
|
2674 Gear^.Pos:= 0; |
|
2675 if Gear^.Timer < 500 then |
|
2676 inc(Gear^.Timer, 1) |
|
2677 else |
|
2678 DeleteGear(Gear); |
|
2679 end; |
|
2680 |
|
2681 //////////////////////////////////////////////////////////////////////////////// |
|
2682 procedure doStepBirdyFly(Gear: PGear); |
|
2683 var HHGear: PGear; |
|
2684 fuel: LongInt; |
|
2685 move: hwFloat; |
|
2686 begin |
|
2687 HHGear:=PHedgehog(Gear^.Hedgehog)^.Gear; |
|
2688 |
|
2689 move:= _0_1; |
|
2690 fuel:= 50; |
|
2691 |
|
2692 if Gear^.Pos > 0 then |
|
2693 dec(Gear^.Pos, 1) |
|
2694 else if (HHGear^.Message and (gm_Left or gm_Right or gm_Up)) <> 0 then |
|
2695 Gear^.Pos:= 500; |
|
2696 |
|
2697 if HHGear^.dX.isNegative then |
|
2698 Gear^.Tag:= -1 |
|
2699 else |
|
2700 Gear^.Tag:= 1; |
|
2701 |
|
2702 if (HHGear^.Message and gm_Up) <> 0 then |
|
2703 begin |
|
2704 if (not HHGear^.dY.isNegative) or (HHGear^.Y > -_256) then |
|
2705 HHGear^.dY:= HHGear^.dY - move; |
|
2706 HHGear^.dY:= HHGear^.dY - move; |
|
2707 dec(Gear^.Health, fuel); |
|
2708 Gear^.MsgParam:= Gear^.MsgParam or gm_Up; |
|
2709 end; |
|
2710 if (HHGear^.Message and gm_Left) <> 0 then move.isNegative:= true; |
|
2711 if (HHGear^.Message and (gm_Left or gm_Right)) <> 0 then |
|
2712 begin |
|
2713 HHGear^.dX:= HHGear^.dX + (move * _0_2); |
|
2714 dec(Gear^.Health, fuel div 5); |
|
2715 Gear^.MsgParam:= Gear^.MsgParam or (HHGear^.Message and (gm_Left or gm_Right)); |
|
2716 end; |
|
2717 |
|
2718 if Gear^.Health < 0 then Gear^.Health:= 0; |
|
2719 if (GameTicks and $3F) = 0 then |
|
2720 begin |
|
2721 if Gear^.Tex <> nil then FreeTexture(Gear^.Tex); |
|
2722 Gear^.Tex:= RenderStringTex(trmsg[sidFuel] + ': ' + inttostr(round(Gear^.Health / 20)) + '%', cWhiteColor, fntSmall) |
|
2723 end; |
|
2724 |
|
2725 if HHGear^.Message and (gm_Attack or gm_Up or gm_Precise or gm_Left or gm_Right) <> 0 then Gear^.State:= Gear^.State and not gsttmpFlag; |
|
2726 HHGear^.Message:= HHGear^.Message and not (gm_Up or gm_Precise or gm_Left or gm_Right); |
|
2727 HHGear^.State:= HHGear^.State or gstMoving; |
|
2728 |
|
2729 Gear^.X:= HHGear^.X; |
|
2730 Gear^.Y:= HHGear^.Y - int2hwFloat(32); |
|
2731 // For some reason I need to reapply followgear here, something else grabs it otherwise. |
|
2732 if not bShowAmmoMenu then FollowGear:= HHGear; |
|
2733 |
|
2734 if ((Gear^.State and gsttmpFlag) = 0) or (HHGear^.dY < _0) then doStepHedgehogMoving(HHGear); |
|
2735 |
|
2736 if (Gear^.Health = 0) |
|
2737 or (HHGear^.Damage <> 0) |
|
2738 or CheckGearDrowning(HHGear) |
|
2739 or (TurnTimeLeft = 0) |
|
2740 // allow brief ground touches - to be fair on this, might need another counter |
|
2741 or (((GameTicks and $1FF) = 0) and (not HHGear^.dY.isNegative) and TestCollisionYwithGear(HHGear, 1)) |
|
2742 or ((Gear^.Message and gm_Attack) <> 0) then |
|
2743 begin |
|
2744 with HHGear^ do |
|
2745 begin |
|
2746 Message:= 0; |
|
2747 Active:= true; |
|
2748 State:= State or gstMoving |
|
2749 end; |
|
2750 Gear^.doStep:= @doStepBirdyVanish; |
|
2751 isCursorVisible:= false; |
|
2752 end |
|
2753 end; |
|
2754 |
|
2755 //////////////////////////////////////////////////////////////////////////////// |
|
2756 procedure doStepBirdyDescend(Gear: PGear); |
|
2757 var HHGear: PGear; |
|
2758 begin |
|
2759 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear; |
|
2760 AllInactive:= false; |
|
2761 if Gear^.Timer > 0 then |
|
2762 dec(Gear^.Timer, 1) |
|
2763 else if CurrentHedgehog = nil then |
|
2764 begin |
|
2765 Gear^.doStep:= @doStepBirdyVanish; |
|
2766 end; |
|
2767 HHGear^.Message:= HHGear^.Message and not (gm_Up or gm_Precise or gm_Left or gm_Right); |
|
2768 if abs(hwRound(HHGear^.Y - Gear^.Y)) > 32 then |
|
2769 begin |
|
2770 if Gear^.Pos = 0 then |
|
2771 Gear^.Y:= Gear^.Y + _0_1 |
|
2772 end |
|
2773 else |
|
2774 begin |
|
2775 Gear^.doStep:= @doStepBirdyFly; |
|
2776 HHGear^.dY:= -_0_2 |
|
2777 end |
|
2778 end; |
|
2779 |
|
2780 //////////////////////////////////////////////////////////////////////////////// |
|
2781 procedure doStepBirdy(Gear: PGear); |
|
2782 var HHGear: PGear; |
|
2783 begin |
|
2784 Gear^.doStep:= @doStepBirdyDescend; |
|
2785 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear; |
|
2786 if HHGear^.dX.isNegative then |
|
2787 Gear^.Tag:= -1 |
|
2788 else |
|
2789 Gear^.Tag:= 1; |
|
2790 Gear^.Pos:= 0; |
|
2791 AllInactive:= false; |
|
2792 FollowGear:= HHGear; |
|
2793 OnUsedAmmo(PHedgehog(HHGear^.Hedgehog)^); |
|
2794 ApplyAmmoChanges(PHedgehog(HHGear^.Hedgehog)^); |
|
2795 with HHGear^ do |
|
2796 begin |
|
2797 State:= State and not gstAttacking; |
|
2798 Message:= Message and not (gm_Attack or gm_Up or gm_Precise or gm_Left or gm_Right) |
|
2799 end |
|
2800 end; |