7352 |
7352 |
7353 CreateShellForGear(Sentry, Sentry^.WDTimer and 1); |
7353 CreateShellForGear(Sentry, Sentry^.WDTimer and 1); |
7354 PlaySound(sndGun); |
7354 PlaySound(sndGun); |
7355 end; |
7355 end; |
7356 |
7356 |
|
7357 function GetSentryTarget(): PGear; |
|
7358 var HHGear: PGear; |
|
7359 begin |
|
7360 GetSentryTarget := nil; |
|
7361 if (CurrentHedgehog <> nil) then |
|
7362 begin |
|
7363 HHGear := CurrentHedgehog^.Gear; |
|
7364 if HHGear <> nil then |
|
7365 begin |
|
7366 if ((HHGear^.State and gstHHDriven) <> 0) |
|
7367 and (HHGear^.CollisionIndex < 0) then |
|
7368 GetSentryTarget := HHGear; |
|
7369 end |
|
7370 end |
|
7371 end; |
|
7372 |
7357 procedure doStepSentryLand(Gear: PGear); |
7373 procedure doStepSentryLand(Gear: PGear); |
7358 var HHGear: PGear; |
7374 var HHGear: PGear; |
7359 const sentry_Idle = 0; |
7375 const sentry_Idle = 0; |
7360 sentry_Walking = 1; |
7376 sentry_Walking = 1; |
7361 sentry_Aiming = 2; |
7377 sentry_Aiming = 2; |
7466 |
7482 |
7467 if ((GameTicks and $1F) = 0) and (Gear^.Tag = sentry_Aiming) then |
7483 if ((GameTicks and $1F) = 0) and (Gear^.Tag = sentry_Aiming) then |
7468 AimSentry(Gear); |
7484 AimSentry(Gear); |
7469 |
7485 |
7470 if ((GameTicks and $FF) = 0) |
7486 if ((GameTicks and $FF) = 0) |
7471 and (Gear^.Tag in [sentry_Idle, sentry_Walking]) |
7487 and (Gear^.Tag in [sentry_Idle, sentry_Walking]) then |
7472 and (CurrentHedgehog <> nil) |
|
7473 and (CurrentHedgehog^.Gear <> nil) |
|
7474 and ((CurrentHedgehog^.Gear^.State and (gstMoving or gstHHDriven)) = (gstMoving or gstHHDriven)) then |
|
7475 begin |
7488 begin |
7476 HHGear := CurrentHedgehog^.Gear; |
7489 HHGear := GetSentryTarget(); |
7477 if CheckSentryAttackRange(Gear, HHGear^.X, HHGear^.Y) then |
7490 if HHGear <> nil then |
7478 begin |
7491 if CheckSentryAttackRange(Gear, HHGear^.X, HHGear^.Y) then |
7479 Gear^.Target.X := hwRound(HHGear^.X); |
7492 begin |
7480 Gear^.Target.Y := hwRound(HHGear^.Y); |
7493 Gear^.Target.X := hwRound(HHGear^.X); |
7481 Gear^.Karma := GameTicks; |
7494 Gear^.Target.Y := hwRound(HHGear^.Y); |
7482 Gear^.Tag := sentry_Aiming; |
7495 Gear^.Karma := GameTicks; |
7483 Gear^.Timer := 1800 + GetRandom(400); |
7496 Gear^.Tag := sentry_Aiming; |
7484 end |
7497 Gear^.Timer := 1800 + GetRandom(400); |
|
7498 end |
7485 end |
7499 end |
7486 end; |
7500 end; |
7487 |
7501 |
7488 procedure doStepSentryWater(Gear: PGear); |
7502 procedure doStepSentryWater(Gear: PGear); |
7489 var HHGear: PGear; |
7503 var HHGear: PGear; |
7566 |
7580 |
7567 if ((GameTicks and $1F) = 0) and (Gear^.Tag = sentry_Aiming) then |
7581 if ((GameTicks and $1F) = 0) and (Gear^.Tag = sentry_Aiming) then |
7568 AimSentry(Gear); |
7582 AimSentry(Gear); |
7569 |
7583 |
7570 if ((GameTicks and $FF) = 0) |
7584 if ((GameTicks and $FF) = 0) |
7571 and (Gear^.Tag in [sentry_Idle, sentry_Walking]) |
7585 and (Gear^.Tag in [sentry_Idle, sentry_Walking]) then |
7572 and (CurrentHedgehog <> nil) |
|
7573 and (CurrentHedgehog^.Gear <> nil) |
|
7574 and ((CurrentHedgehog^.Gear^.State and (gstMoving or gstHHDriven)) = (gstMoving or gstHHDriven)) then |
|
7575 begin |
7586 begin |
7576 HHGear := CurrentHedgehog^.Gear; |
7587 HHGear := GetSentryTarget(); |
7577 if CheckSentryAttackRange(Gear, HHGear^.X, HHGear^.Y) then |
7588 if HHGear <> nil then |
7578 begin |
7589 if CheckSentryAttackRange(Gear, HHGear^.X, HHGear^.Y) then |
7579 Gear^.Target.X := hwRound(HHGear^.X); |
7590 begin |
7580 Gear^.Target.Y := hwRound(HHGear^.Y); |
7591 Gear^.Target.X := hwRound(HHGear^.X); |
7581 Gear^.Karma := GameTicks; |
7592 Gear^.Target.Y := hwRound(HHGear^.Y); |
7582 Gear^.Tag := sentry_Aiming; |
7593 Gear^.Karma := GameTicks; |
7583 Gear^.Timer := 1800 + GetRandom(400); |
7594 Gear^.Tag := sentry_Aiming; |
7584 end |
7595 Gear^.Timer := 1800 + GetRandom(400); |
|
7596 end |
7585 end |
7597 end |
7586 end; |
7598 end; |
7587 |
7599 |
7588 procedure doStepSentryDeploy(Gear: PGear); |
7600 procedure doStepSentryDeploy(Gear: PGear); |
7589 begin |
7601 begin |