435 Gear^.State := Gear^.State or gstCollision; |
435 Gear^.State := Gear^.State or gstCollision; |
436 |
436 |
437 if ((xland or land) and lfBouncy <> 0) and |
437 if ((xland or land) and lfBouncy <> 0) and |
438 (((Gear^.Radius < 3) and (Gear^.dY < -_0_1)) or |
438 (((Gear^.Radius < 3) and (Gear^.dY < -_0_1)) or |
439 ((Gear^.Radius >= 3) and |
439 ((Gear^.Radius >= 3) and |
440 ((Gear^.dX.QWordValue > _0_1.QWordValue) or (Gear^.dY.QWordValue > _0_1.QWordValue)))) then |
440 ((Gear^.dX.QWordValue > _0_15.QWordValue) or (Gear^.dY.QWordValue > _0_15.QWordValue)))) then |
441 PlaySound(sndMelonImpact, true) |
441 PlaySound(sndMelonImpact, true) |
442 else if (Gear^.nImpactSounds > 0) and |
442 else if (Gear^.nImpactSounds > 0) and |
443 (Gear^.State and gstCollision <> 0) and |
443 (Gear^.State and gstCollision <> 0) and |
444 (((Gear^.Kind <> gtMine) and (Gear^.Damage <> 0)) or (Gear^.State and gstMoving <> 0)) and |
444 (((Gear^.Kind <> gtMine) and (Gear^.Damage <> 0)) or (Gear^.State and gstMoving <> 0)) and |
445 (((Gear^.Radius < 3) and (Gear^.dY < -_0_1)) or |
445 (((Gear^.Radius < 3) and (Gear^.dY < -_0_1)) or |
2468 procedure doStepGirder(Gear: PGear); |
2468 procedure doStepGirder(Gear: PGear); |
2469 var |
2469 var |
2470 HHGear: PGear; |
2470 HHGear: PGear; |
2471 x, y, tx, ty: hwFloat; |
2471 x, y, tx, ty: hwFloat; |
2472 rx: LongInt; |
2472 rx: LongInt; |
|
2473 LandFlags: Word; |
2473 begin |
2474 begin |
2474 AllInactive := false; |
2475 AllInactive := false; |
2475 |
2476 |
2476 HHGear := Gear^.Hedgehog^.Gear; |
2477 HHGear := Gear^.Hedgehog^.Gear; |
2477 tx := int2hwFloat(Gear^.Target.X); |
2478 tx := int2hwFloat(Gear^.Target.X); |
2478 ty := int2hwFloat(Gear^.Target.Y); |
2479 ty := int2hwFloat(Gear^.Target.Y); |
2479 x := HHGear^.X; |
2480 x := HHGear^.X; |
2480 y := HHGear^.Y; |
2481 y := HHGear^.Y; |
2481 rx:= hwRound(x); |
2482 rx:= hwRound(x); |
2482 |
2483 |
|
2484 LandFlags:= 0; |
|
2485 if cIce then LandFlags:= lfIce |
|
2486 else if Gear^.AmmoType = amRubber then LandFlags:= lfBouncy; |
|
2487 |
2483 if ((Distance(tx - x, ty - y) > _256) and ((WorldEdge <> weWrap) or |
2488 if ((Distance(tx - x, ty - y) > _256) and ((WorldEdge <> weWrap) or |
2484 ( |
2489 ( |
2485 (Distance(tx - int2hwFloat(rightX+(rx-leftX)), ty - y) > _256) and |
2490 (Distance(tx - int2hwFloat(rightX+(rx-leftX)), ty - y) > _256) and |
2486 (Distance(tx - int2hwFloat(leftX-(rightX-rx)), ty - y) > _256) |
2491 (Distance(tx - int2hwFloat(leftX-(rightX-rx)), ty - y) > _256) |
2487 ))) |
2492 ))) |
2488 or (not TryPlaceOnLand(Gear^.Target.X - SpritesData[sprAmGirder].Width div 2, Gear^.Target.Y - SpritesData[sprAmGirder].Height div 2, sprAmGirder, Gear^.State, true, false)) then |
2493 or (not TryPlaceOnLand(Gear^.Target.X - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Width div 2, Gear^.Target.Y - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Height div 2, Ammoz[Gear^.AmmoType].PosSprite, Gear^.State, true, false, LandFlags)) then |
2489 begin |
2494 begin |
2490 PlaySound(sndDenied); |
2495 PlaySound(sndDenied); |
2491 HHGear^.Message := HHGear^.Message and (not gmAttack); |
2496 HHGear^.Message := HHGear^.Message and (not gmAttack); |
2492 HHGear^.State := HHGear^.State and (not gstAttacking); |
2497 HHGear^.State := HHGear^.State and (not gstAttacking); |
2493 HHGear^.State := HHGear^.State or gstHHChooseTarget; |
2498 HHGear^.State := HHGear^.State or gstHHChooseTarget; |