diff -r 94d071054a23 -r 7663a5c614cb hedgewars/uGearsHandlersRope.pas --- a/hedgewars/uGearsHandlersRope.pas Sat Aug 25 21:35:25 2012 -0400 +++ b/hedgewars/uGearsHandlersRope.pas Sun Aug 26 10:15:28 2012 -0400 @@ -83,13 +83,17 @@ repeat begin inc(i); - stuck:= TestCollisionYwithGear(HHGear, i) <> 0 + stuck:= TestCollisionYwithGear(HHGear, 1) <> 0; + if stuck then HHGear^.Y:= HHGear^.Y-_1 end until (i = 8) or not stuck; - HHGear^.Y:= HHGear^.Y-int2hwFloat(pred(i)); // experiment in simulating something the shoppa players apparently expect if Gear^.Message and gmDown <> 0 then - HHGear^.dY:= HHGear^.dY / 8; + begin + //HHGear^.dY:= HHGear^.dY / 16; + HHGear^.dY:= _0; + HHGear^.dX:= HHGear^.dX * 2 + end; if Gear^.Message and gmRight <> 0 then HHGear^.dX.isNegative:= false else if Gear^.Message and gmLeft <> 0 then @@ -97,20 +101,24 @@ end else if (TestCollisionYwithGear(HHGear, -1) <> 0) and (TestCollisionYwithGear(HHGear, 1) = 0) then begin - i:= -1; + i:= 1; repeat begin - dec(i); - stuck:= TestCollisionYwithGear(HHGear, i) <> 0 + inc(i); + stuck:= TestCollisionYwithGear(HHGear, -1) <> 0; + if stuck then HHGear^.Y:= HHGear^.Y+_1 end - until (i = -8) or not stuck; - HHGear^.Y:= HHGear^.Y-int2hwFloat(succ(i)); + until (i = 8) or not stuck; if Gear^.Message and gmDown <> 0 then - HHGear^.dY:= HHGear^.dY / 8; + begin + //HHGear^.dY:= HHGear^.dY / 16; + HHGear^.dY.QWordValue:= 0; + HHGear^.dX:= HHGear^.dX * 2 + end; if Gear^.Message and gmRight <> 0 then + HHGear^.dX.isNegative:= true + else if Gear^.Message and gmLeft <> 0 then HHGear^.dX.isNegative:= false - else if Gear^.Message and gmLeft <> 0 then - HHGear^.dX.isNegative:= true end; if TestCollisionXwithGear(HHGear, 1) and not TestCollisionXwithGear(HHGear, -1) then begin @@ -118,25 +126,41 @@ repeat begin inc(i); - stuck:= TestCollisionXwithGear(HHGear, i) + stuck:= TestCollisionXwithGear(HHGear, 1); + if stuck then HHGear^.X:= HHGear^.X-_1 end until (i = 8) or not stuck; - HHGear^.X:= HHGear^.X-int2hwFloat(pred(i)); if Gear^.Message and gmDown <> 0 then - HHGear^.dX.QWordValue:= 0 + begin + //HHGear^.dX:= HHGear^.dX / 16; + HHGear^.dX.QWordValue:= 0; + HHGear^.dY:= HHGear^.dY * 2 + end; + if Gear^.Message and gmRight <> 0 then + HHGear^.dX.isNegative:= true + else if Gear^.Message and gmLeft <> 0 then + HHGear^.dX.isNegative:= false end else if TestCollisionXwithGear(HHGear, -1) and not TestCollisionXwithGear(HHGear, 1) then begin - i:= -1; + i:= 1; repeat begin - dec(i); - stuck:= TestCollisionXwithGear(HHGear, i) + inc(i); + stuck:= TestCollisionXwithGear(HHGear, -1); + if stuck then HHGear^.X:= HHGear^.X+_1 end - until (i = -8) or not stuck; - HHGear^.X:= HHGear^.X-int2hwFloat(succ(i)); + until (i = 8) or not stuck; if Gear^.Message and gmDown <> 0 then - HHGear^.dX.QWordValue:= 0 + begin + //HHGear^.dX:= HHGear^.dX / 16; + HHGear^.dX.QWordValue:= 0; + HHGear^.dY:= HHGear^.dY * 2 + end; + if Gear^.Message and gmRight <> 0 then + HHGear^.dX.isNegative:= false + else if Gear^.Message and gmLeft <> 0 then + HHGear^.dX.isNegative:= true end end;