2611 procedure doStepSwitcherWork(Gear: PGear); |
2611 procedure doStepSwitcherWork(Gear: PGear); |
2612 var |
2612 var |
2613 HHGear: PGear; |
2613 HHGear: PGear; |
2614 hedgehog: PHedgehog; |
2614 hedgehog: PHedgehog; |
2615 State: Longword; |
2615 State: Longword; |
|
2616 switchDir: LongInt; |
2616 begin |
2617 begin |
2617 AllInactive := false; |
2618 AllInactive := false; |
2618 |
2619 |
2619 if ((Gear^.Message and (not gmSwitch)) <> 0) or (TurnTimeLeft = 0) then |
2620 if ((Gear^.Message and (not (gmSwitch or gmPrecise))) <> 0) or (TurnTimeLeft = 0) then |
2620 begin |
2621 begin |
2621 hedgehog := Gear^.Hedgehog; |
2622 hedgehog := Gear^.Hedgehog; |
2622 //Msg := Gear^.Message and (not gmSwitch); |
2623 //Msg := Gear^.Message and (not gmSwitch); |
2623 DeleteGear(Gear); |
2624 DeleteGear(Gear); |
2624 ApplyAmmoChanges(hedgehog^); |
2625 ApplyAmmoChanges(hedgehog^); |
2632 if (Gear^.Message and gmSwitch) <> 0 then |
2633 if (Gear^.Message and gmSwitch) <> 0 then |
2633 begin |
2634 begin |
2634 HHGear := CurrentHedgehog^.Gear; |
2635 HHGear := CurrentHedgehog^.Gear; |
2635 HHGear^.Message := HHGear^.Message and (not gmSwitch); |
2636 HHGear^.Message := HHGear^.Message and (not gmSwitch); |
2636 Gear^.Message := Gear^.Message and (not gmSwitch); |
2637 Gear^.Message := Gear^.Message and (not gmSwitch); |
|
2638 |
|
2639 // switching in reverse direction |
|
2640 if (Gear^.Message and gmPrecise) <> 0 then |
|
2641 begin |
|
2642 HHGear^.Message := HHGear^.Message and (not gmPrecise); |
|
2643 switchDir:= CurrentTeam^.HedgehogsNumber - 1; |
|
2644 end |
|
2645 else |
|
2646 switchDir:= 1; |
|
2647 |
2637 State := HHGear^.State; |
2648 State := HHGear^.State; |
2638 HHGear^.State := 0; |
2649 HHGear^.State := 0; |
2639 HHGear^.Z := cHHZ; |
2650 HHGear^.Z := cHHZ; |
2640 HHGear^.Active := false; |
2651 HHGear^.Active := false; |
2641 HHGear^.Message:= HHGear^.Message or gmRemoveFromList or gmAddToList; |
2652 HHGear^.Message:= HHGear^.Message or gmRemoveFromList or gmAddToList; |
2642 |
2653 |
2643 PlaySound(sndSwitchHog); |
2654 PlaySound(sndSwitchHog); |
2644 |
2655 |
2645 repeat |
2656 repeat |
2646 CurrentTeam^.CurrHedgehog := Succ(CurrentTeam^.CurrHedgehog) mod (CurrentTeam^.HedgehogsNumber); |
2657 CurrentTeam^.CurrHedgehog := (CurrentTeam^.CurrHedgehog + switchDir) mod (CurrentTeam^.HedgehogsNumber); |
2647 until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) and |
2658 until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) and |
2648 (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear^.Damage = 0) and |
2659 (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear^.Damage = 0) and |
2649 (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Effects[heFrozen]=0); |
2660 (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Effects[heFrozen]=0); |
2650 |
2661 |
2651 SwitchCurrentHedgehog(@CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog]); |
2662 SwitchCurrentHedgehog(@CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog]); |
2654 HHGear := CurrentHedgehog^.Gear; |
2665 HHGear := CurrentHedgehog^.Gear; |
2655 HHGear^.State := State; |
2666 HHGear^.State := State; |
2656 HHGear^.Active := true; |
2667 HHGear^.Active := true; |
2657 FollowGear := HHGear; |
2668 FollowGear := HHGear; |
2658 HHGear^.Z := cCurrHHZ; |
2669 HHGear^.Z := cCurrHHZ; |
|
2670 // restore precise key |
|
2671 if (switchDir <> 1) then |
|
2672 HHGear^.Message:= HHGear^.Message or gmPrecise; |
2659 HHGear^.Message:= HHGear^.Message or gmRemoveFromList or gmAddToList; |
2673 HHGear^.Message:= HHGear^.Message or gmRemoveFromList or gmAddToList; |
2660 Gear^.X := HHGear^.X; |
2674 Gear^.X := HHGear^.X; |
2661 Gear^.Y := HHGear^.Y |
2675 Gear^.Y := HHGear^.Y |
2662 end; |
2676 end; |
2663 end; |
2677 end; |