62 function TestMineStrike(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
62 function TestMineStrike(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
63 function TestSMine(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
63 function TestSMine(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
64 function TestPiano(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
64 function TestPiano(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
65 function TestTeleport(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
65 function TestTeleport(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
66 function TestHammer(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
66 function TestHammer(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
|
67 function TestResurrector(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
67 function TestCake(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
68 function TestCake(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
68 function TestSeduction(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
69 function TestSeduction(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
69 function TestDynamite(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
70 function TestDynamite(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
70 function TestMine(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
71 function TestMine(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
71 function TestKnife(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
72 function TestKnife(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
128 (proc: @TestGrenade; flags: amtest_NoTrackFall), // amGasBomb |
129 (proc: @TestGrenade; flags: amtest_NoTrackFall), // amGasBomb |
129 (proc: @TestShotgun; flags: 0), // amSineGun |
130 (proc: @TestShotgun; flags: 0), // amSineGun |
130 (proc: nil; flags: 0), // amFlamethrower |
131 (proc: nil; flags: 0), // amFlamethrower |
131 (proc: @TestSMine; flags: 0), // amSMine |
132 (proc: @TestSMine; flags: 0), // amSMine |
132 (proc: @TestHammer; flags: amtest_NoTarget or amtest_NoInvulnerable), // amHammer |
133 (proc: @TestHammer; flags: amtest_NoTarget or amtest_NoInvulnerable), // amHammer |
133 (proc: nil; flags: 0), // amResurrector |
134 (proc: @TestResurrector; flags: amtest_NoTarget or amtest_NoInvulnerable or amtest_NoVampiric), // amResurrector |
134 (proc: @TestDrillStrike; flags: amtest_Rare), // amDrillStrike |
135 (proc: @TestDrillStrike; flags: amtest_Rare), // amDrillStrike |
135 (proc: nil; flags: 0), // amSnowball |
136 (proc: nil; flags: 0), // amSnowball |
136 (proc: nil; flags: 0), // amTardis |
137 (proc: nil; flags: 0), // amTardis |
137 (proc: nil; flags: 0), // amLandGun |
138 (proc: nil; flags: 0), // amLandGun |
138 (proc: nil; flags: 0), // amIceGun |
139 (proc: nil; flags: 0), // amIceGun |
1485 if valueResult <= 0 then |
1486 if valueResult <= 0 then |
1486 valueResult:= BadTurn; |
1487 valueResult:= BadTurn; |
1487 TestAirAttack:= valueResult; |
1488 TestAirAttack:= valueResult; |
1488 end; |
1489 end; |
1489 |
1490 |
|
1491 function TestResurrector(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
|
1492 var rate, heal: LongInt; |
|
1493 begin |
|
1494 Flags:= Flags; // avoid compiler hint |
|
1495 Targ:= Targ; |
|
1496 |
|
1497 if (Level = 5) then |
|
1498 exit(BadTurn); |
|
1499 |
|
1500 if (Me^.Health <= 1) then |
|
1501 exit(BadTurn); |
|
1502 |
|
1503 if (Level <= 2) and (Me^.Hedgehog^.Effects[hePoisoned] > 0) then |
|
1504 // Sacrifice almost all health if poisoned |
|
1505 heal:= Me^.Health - 1 |
|
1506 else |
|
1507 // Sacrifice up to 10% of own health |
|
1508 heal:= (Me^.Health div 10); |
|
1509 |
|
1510 ap.ExplR:= 0; |
|
1511 ap.Time:= 0; |
|
1512 if (GameFlags and gfInfAttack) = 0 then |
|
1513 ap.Power:= max(min(500 * heal - 500, 10000), 10) |
|
1514 else |
|
1515 // Shorter attack duration in inf attack because the clock is ticking! |
|
1516 ap.Power:= max(min(500 * heal - 500, 3000), 10); |
|
1517 ap.Angle:= 0; |
|
1518 |
|
1519 rate:= RateResurrector(Me); |
|
1520 if rate <= 0 then |
|
1521 rate:= BadTurn; |
|
1522 TestResurrector:= rate; |
|
1523 end; |
|
1524 |
1490 function TestDrillStrike(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
1525 function TestDrillStrike(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
1491 const cShift = 4; |
1526 const cShift = 4; |
1492 Density : real = 1.0; |
1527 Density : real = 1.0; |
1493 var bombsSpeed, X, Y, dX, dY, drillX, drillY: real; |
1528 var bombsSpeed, X, Y, dX, dY, drillX, drillY: real; |
1494 t2: real; |
1529 t2: real; |