# HG changeset patch # User nemo # Date 1342733658 14400 # Node ID 09427dbec1d8334a26fe7a0150e70f38a80282fa # Parent e7ce559d8c94899caa5d409620a0ab562a7b977c Fix TARDIS, make switcher work w/ the new more stringent check. diff -r e7ce559d8c94 -r 09427dbec1d8 hedgewars/GSHandlers.inc --- a/hedgewars/GSHandlers.inc Thu Jul 19 17:14:02 2012 -0400 +++ b/hedgewars/GSHandlers.inc Thu Jul 19 17:34:18 2012 -0400 @@ -116,12 +116,12 @@ if lastGearByUID = HH^.Gear then lastGearByUID := nil; - - RemoveGearFromList(HH^.Gear); + + HH^.Gear^.Message:= HH^.Gear^.Message or gmRemoveFromList; with HH^.Gear^ do begin Z := cHHZ; - Active := false; + HH^.Gear^.Active:= false; State:= State and (not (gstHHDriven or gstAttacking or gstAttacked)); Message := Message and (not gmAttack); end; @@ -2794,10 +2794,9 @@ Gear^.Message := Gear^.Message and (not gmSwitch); State := HHGear^.State; HHGear^.State := 0; + HHGear^.Z := cHHZ; HHGear^.Active := false; - HHGear^.Z := cHHZ; - RemoveGearFromList(HHGear); - InsertGearToList(HHGear); + HHGear^.Message:= HHGear^.Message or gmRemoveFromList or gmAddToList; PlaySound(sndSwitchHog); @@ -2813,8 +2812,7 @@ HHGear^.Active := true; FollowGear := HHGear; HHGear^.Z := cCurrHHZ; - RemoveGearFromList(HHGear); - InsertGearToList(HHGear); + HHGear^.Message:= HHGear^.Message or gmRemoveFromList or gmAddToList; Gear^.X := HHGear^.X; Gear^.Y := HHGear^.Y end; diff -r e7ce559d8c94 -r 09427dbec1d8 hedgewars/uConsts.pas --- a/hedgewars/uConsts.pas Thu Jul 19 17:14:02 2012 -0400 +++ b/hedgewars/uConsts.pas Thu Jul 19 17:34:18 2012 -0400 @@ -227,20 +227,23 @@ gstHHGone = $00100000; gstInvisible = $00200000; - gmLeft = $00000001; - gmRight = $00000002; - gmUp = $00000004; - gmDown = $00000008; - gmSwitch = $00000010; - gmAttack = $00000020; - gmLJump = $00000040; - gmHJump = $00000080; - gmDestroy= $00000100; - gmSlot = $00000200; // with param - gmWeapon = $00000400; // with param - gmTimer = $00000800; // with param - gmAnimate= $00001000; // with param - gmPrecise= $00002000; + gmLeft = $00000001; + gmRight = $00000002; + gmUp = $00000004; + gmDown = $00000008; + gmSwitch = $00000010; + gmAttack = $00000020; + gmLJump = $00000040; + gmHJump = $00000080; + gmDestroy = $00000100; + gmSlot = $00000200; // with param + gmWeapon = $00000400; // with param + gmTimer = $00000800; // with param + gmAnimate = $00001000; // with param + gmPrecise = $00002000; + + gmRemoveFromList = $00004000; + gmAddToList = $00008000; gmAllStoppable = gmLeft or gmRight or gmUp or gmDown or gmAttack or gmPrecise; cMaxSlotIndex = 9; diff -r e7ce559d8c94 -r 09427dbec1d8 hedgewars/uGears.pas --- a/hedgewars/uGears.pas Thu Jul 19 17:14:02 2012 -0400 +++ b/hedgewars/uGears.pas Thu Jul 19 17:34:18 2012 -0400 @@ -206,6 +206,13 @@ curHandledGear:= t; t:= curHandledGear^.NextGear; + if curHandledGear^.Message and gmRemoveFromList <> 0 then + begin + RemoveGearFromList(curHandledGear); + // since I can't think of any good reason this would ever be separate from a remove from list, going to keep it inside this block + if curHandledGear^.Message and gmAddToList <> 0 then InsertGearToList(curHandledGear); + curHandledGear^.Message:= curHandledGear^.Message and not (gmRemoveFromList or gmAddToList) + end; if curHandledGear^.Active then begin if curHandledGear^.RenderTimer and (curHandledGear^.Timer > 500) and ((curHandledGear^.Timer mod 1000) = 0) then