diff -r 313b2ecc4441 -r 000e4543f204 hedgewars/uTeams.pas --- a/hedgewars/uTeams.pas Tue Jun 12 17:20:27 2012 +0400 +++ b/hedgewars/uTeams.pas Sun Jun 24 20:31:26 2012 +0400 @@ -35,6 +35,7 @@ procedure RestoreTeamsFromSave; function CheckForWin: boolean; procedure TeamGoneEffect(var Team: TTeam); +procedure SwitchCurrentHedgehog(newHog: PHedgehog); implementation uses uLocale, uAmmos, uChat, uVariables, uUtils, uIO, uCaptions, uCommands, uDebug, uScript, @@ -184,7 +185,7 @@ end until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil); -CurrentHedgehog:= @(CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog]); +SwitchCurrentHedgehog(@(CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog])); {$IFDEF USE_TOUCH_INTERFACE} if (Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NoCrosshair) = 0 then begin @@ -488,7 +489,7 @@ with CurrentTeam^ do begin SplitBySpace(id, s); - CurrentHedgehog:= @Hedgehogs[HedgehogsNumber]; + SwitchCurrentHedgehog(@Hedgehogs[HedgehogsNumber]); val(id, CurrentHedgehog^.BotLevel, c); Gear:= AddGear(0, 0, gtHedgehog, 0, _0, _0, 0); SplitBySpace(s, id); @@ -618,6 +619,21 @@ RecountAllTeamsHealth(); end; +procedure SwitchCurrentHedgehog(newHog: PHedgehog); +var oldCI, newCI: boolean; + oldHH: PHedgehog; +begin + oldCI:= (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) and (CurrentHedgehog^.Gear^.CollisionIndex >= 0); + newCI:= (newHog^.Gear <> nil) and (newHog^.Gear^.CollisionIndex >= 0); + if oldCI then DeleteCI(CurrentHedgehog^.Gear); + if newCI then DeleteCI(newHog^.Gear); + oldHH:= CurrentHedgehog; + CurrentHedgehog:= newHog; + if oldCI then AddGearCI(oldHH^.Gear); + if newCI then AddGearCI(newHog^.Gear) +end; + + procedure initModule; begin RegisterVariable('addhh', @chAddHH, false);