241 case JumpType of |
241 case JumpType of |
242 jmpNone: exit; |
242 jmpNone: exit; |
243 jmpHJump: if not TestCollisionYwithGear(Gear, -1) then |
243 jmpHJump: if not TestCollisionYwithGear(Gear, -1) then |
244 begin |
244 begin |
245 Gear.dY:= -0.20; |
245 Gear.dY:= -0.20; |
246 Gear.dX:= 0.0000001 * Sign(Gear.dX); |
246 Gear.dX:= 0.0000001 * hwSign(Gear.dX); |
247 Gear.X:= Gear.X - Sign(Gear.dX)*0.00008; // shift compensation |
247 Gear.X:= Gear.X - hwSign(Gear.dX)*0.00008; // shift compensation |
248 Gear.State:= Gear.State or gstFalling or gstHHJumping; |
248 Gear.State:= Gear.State or gstFalling or gstHHJumping; |
249 end else exit; |
249 end else exit; |
250 jmpLJump: begin |
250 jmpLJump: begin |
251 if not TestCollisionYwithGear(Gear, -1) then |
251 if not TestCollisionYwithGear(Gear, -1) then |
252 if not TestCollisionXwithXYShift(Gear, 0, -2, Sign(Gear.dX)) then Gear.Y:= Gear.Y - 2 else |
252 if not TestCollisionXwithXYShift(Gear, 0, -2, hwSign(Gear.dX)) then Gear.Y:= Gear.Y - 2 else |
253 if not TestCollisionXwithXYShift(Gear, 0, -1, Sign(Gear.dX)) then Gear.Y:= Gear.Y - 1; |
253 if not TestCollisionXwithXYShift(Gear, 0, -1, hwSign(Gear.dX)) then Gear.Y:= Gear.Y - 1; |
254 if not (TestCollisionXwithGear(Gear, Sign(Gear.dX)) |
254 if not (TestCollisionXwithGear(Gear, hwSign(Gear.dX)) |
255 or TestCollisionYwithGear(Gear, -1)) then |
255 or TestCollisionYwithGear(Gear, -1)) then |
256 begin |
256 begin |
257 Gear.dY:= -0.15; |
257 Gear.dY:= -0.15; |
258 Gear.dX:= Sign(Gear.dX) * 0.15; |
258 Gear.dX:= hwSign(Gear.dX) * 0.15; |
259 Gear.State:= Gear.State or gstFalling or gstHHJumping |
259 Gear.State:= Gear.State or gstFalling or gstHHJumping |
260 end else exit |
260 end else exit |
261 end |
261 end |
262 end; |
262 end; |
263 |
263 |
267 begin |
267 begin |
268 if (GoInfo.Ticks = 350) then |
268 if (GoInfo.Ticks = 350) then |
269 if (abs(Gear.dX) < 0.0000002) and (Gear.dY < -0.02) then |
269 if (abs(Gear.dX) < 0.0000002) and (Gear.dY < -0.02) then |
270 begin |
270 begin |
271 Gear.dY:= -0.25; |
271 Gear.dY:= -0.25; |
272 Gear.dX:= Sign(Gear.dX) * 0.02 |
272 Gear.dX:= hwSign(Gear.dX) * 0.02 |
273 end; |
273 end; |
274 if TestCollisionXwithGear(Gear, Sign(Gear.dX)) then Gear.dX:= 0.0000001 * Sign(Gear.dX); |
274 if TestCollisionXwithGear(Gear, hwSign(Gear.dX)) then Gear.dX:= 0.0000001 * hwSign(Gear.dX); |
275 Gear.X:= Gear.X + Gear.dX; |
275 Gear.X:= Gear.X + Gear.dX; |
276 inc(GoInfo.Ticks); |
276 inc(GoInfo.Ticks); |
277 Gear.dY:= Gear.dY + cGravity; |
277 Gear.dY:= Gear.dY + cGravity; |
278 if Gear.dY > 0.40 then exit; |
278 if Gear.dY > 0.40 then exit; |
279 if (Gear.dY < 0)and TestCollisionYwithGear(Gear, -1) then Gear.dY:= 0; |
279 if (Gear.dY < 0)and TestCollisionYwithGear(Gear, -1) then Gear.dY:= 0; |
338 end; |
338 end; |
339 continue |
339 continue |
340 end; |
340 end; |
341 if (Gear.Message and gm_Left )<>0 then Gear.dX:= -1.0 else |
341 if (Gear.Message and gm_Left )<>0 then Gear.dX:= -1.0 else |
342 if (Gear.Message and gm_Right )<>0 then Gear.dX:= 1.0 else exit; |
342 if (Gear.Message and gm_Right )<>0 then Gear.dX:= 1.0 else exit; |
343 if TestCollisionXwithGear(Gear, Sign(Gear.dX)) then |
343 if TestCollisionXwithGear(Gear, hwSign(Gear.dX)) then |
344 begin |
344 begin |
345 if not (TestCollisionXwithXYShift(Gear, 0, -6, Sign(Gear.dX)) |
345 if not (TestCollisionXwithXYShift(Gear, 0, -6, hwSign(Gear.dX)) |
346 or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1; |
346 or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1; |
347 if not (TestCollisionXwithXYShift(Gear, 0, -5, Sign(Gear.dX)) |
347 if not (TestCollisionXwithXYShift(Gear, 0, -5, hwSign(Gear.dX)) |
348 or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1; |
348 or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1; |
349 if not (TestCollisionXwithXYShift(Gear, 0, -4, Sign(Gear.dX)) |
349 if not (TestCollisionXwithXYShift(Gear, 0, -4, hwSign(Gear.dX)) |
350 or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1; |
350 or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1; |
351 if not (TestCollisionXwithXYShift(Gear, 0, -3, Sign(Gear.dX)) |
351 if not (TestCollisionXwithXYShift(Gear, 0, -3, hwSign(Gear.dX)) |
352 or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1; |
352 or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1; |
353 if not (TestCollisionXwithXYShift(Gear, 0, -2, Sign(Gear.dX)) |
353 if not (TestCollisionXwithXYShift(Gear, 0, -2, hwSign(Gear.dX)) |
354 or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1; |
354 or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1; |
355 if not (TestCollisionXwithXYShift(Gear, 0, -1, Sign(Gear.dX)) |
355 if not (TestCollisionXwithXYShift(Gear, 0, -1, hwSign(Gear.dX)) |
356 or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1; |
356 or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1; |
357 end; |
357 end; |
358 |
358 |
359 if not TestCollisionXwithGear(Gear, Sign(Gear.dX)) then |
359 if not TestCollisionXwithGear(Gear, hwSign(Gear.dX)) then |
360 begin |
360 begin |
361 Gear.X:= Gear.X + Gear.dX; |
361 Gear.X:= Gear.X + Gear.dX; |
362 inc(GoInfo.Ticks, cHHStepTicks) |
362 inc(GoInfo.Ticks, cHHStepTicks) |
363 end; |
363 end; |
364 if not TestCollisionYwithGear(Gear, 1) then |
364 if not TestCollisionYwithGear(Gear, 1) then |