53 function TestWhip(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
53 function TestWhip(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
54 function TestKamikaze(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
54 function TestKamikaze(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
55 function TestAirAttack(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
55 function TestAirAttack(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
56 function TestDrillStrike(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
56 function TestDrillStrike(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
57 function TestMineStrike(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
57 function TestMineStrike(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
|
58 function TestPiano(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
58 function TestTeleport(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
59 function TestTeleport(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
59 function TestHammer(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
60 function TestHammer(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
60 function TestCake(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
61 function TestCake(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
61 function TestDynamite(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
62 function TestDynamite(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
62 function TestMine(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
63 function TestMine(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
111 (proc: @TestSniperRifle; flags: 0), // amSniperRifle |
112 (proc: @TestSniperRifle; flags: 0), // amSniperRifle |
112 (proc: nil; flags: 0), // amJetpack |
113 (proc: nil; flags: 0), // amJetpack |
113 (proc: @TestMolotov; flags: 0), // amMolotov |
114 (proc: @TestMolotov; flags: 0), // amMolotov |
114 (proc: nil; flags: 0), // amBirdy |
115 (proc: nil; flags: 0), // amBirdy |
115 (proc: nil; flags: 0), // amPortalGun |
116 (proc: nil; flags: 0), // amPortalGun |
116 (proc: nil; flags: 0), // amPiano |
117 (proc: @TestPiano; flags: amtest_Rare), // amPiano |
117 (proc: @TestGrenade; flags: amtest_NoTrackFall), // amGasBomb |
118 (proc: @TestGrenade; flags: amtest_NoTrackFall), // amGasBomb |
118 (proc: @TestShotgun; flags: 0), // amSineGun |
119 (proc: @TestShotgun; flags: 0), // amSineGun |
119 (proc: nil; flags: 0), // amFlamethrower |
120 (proc: nil; flags: 0), // amFlamethrower |
120 (proc: @TestGrenade; flags: 0), // amSMine |
121 (proc: @TestGrenade; flags: 0), // amSMine |
121 (proc: @TestHammer; flags: amtest_NoTarget), // amHammer |
122 (proc: @TestHammer; flags: amtest_NoTarget), // amHammer |
1522 if valueResult <= 0 then |
1523 if valueResult <= 0 then |
1523 valueResult:= BadTurn; |
1524 valueResult:= BadTurn; |
1524 TestMineStrike:= valueResult; |
1525 TestMineStrike:= valueResult; |
1525 end; |
1526 end; |
1526 |
1527 |
|
1528 function TestPiano(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
|
1529 const BOUNCES = 5; |
|
1530 var X, Y: real; |
|
1531 dmg: array[0..BOUNCES-1] of LongInt; |
|
1532 i, valueResult: LongInt; |
|
1533 begin |
|
1534 Flags:= Flags; // avoid compiler hint |
|
1535 ap.ExplR:= 0; |
|
1536 ap.Time:= 0; |
|
1537 if (cGravityf <= 0) then |
|
1538 exit(BadTurn); |
|
1539 |
|
1540 if (Level > 2) then |
|
1541 exit(BadTurn); |
|
1542 |
|
1543 ap.Angle:= 0; |
|
1544 ap.AttackPutX:= Targ.Point.X; |
|
1545 ap.AttackPutY:= Targ.Point.Y; |
|
1546 |
|
1547 X:= Targ.Point.X; |
|
1548 Y:= -128; |
|
1549 |
|
1550 for i:= 0 to BOUNCES-1 do |
|
1551 dmg[i]:= 0; |
|
1552 |
|
1553 i:= 1; |
|
1554 repeat |
|
1555 Y:= Y + 32; |
|
1556 if TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(X), trunc(Y), 32) then |
|
1557 begin |
|
1558 dmg[i]:= dmg[i] + RateExplosion(Me, trunc(X)-30, trunc(Y)+40, 161); |
|
1559 dmg[i]:= dmg[i] + RateExplosion(Me, trunc(X), trunc(Y)+40, 161); |
|
1560 dmg[i]:= dmg[i] + RateExplosion(Me, trunc(X)+30, trunc(Y)+40, 161); |
|
1561 inc(i); |
|
1562 Y:= Y + 48; |
|
1563 end; |
|
1564 until (i >= BOUNCES) or (Y > cWaterLine); |
|
1565 |
|
1566 if (i = 0) and (Y > cWaterLine) then |
|
1567 exit(BadTurn); |
|
1568 |
|
1569 valueResult:= 0; |
|
1570 for i:= 0 to BOUNCES do |
|
1571 if dmg[i] <> BadTurn then |
|
1572 inc(valueResult, dmg[i]); |
|
1573 ap.AttackPutX:= Targ.Point.X; |
|
1574 |
|
1575 valueResult:= valueResult - KillScore * friendlyfactor div 100 * 1024; |
|
1576 |
|
1577 if valueResult <= 0 then |
|
1578 valueResult:= BadTurn; |
|
1579 TestPiano:= valueResult; |
|
1580 end; |
|
1581 |
1527 function TestTeleport(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
1582 function TestTeleport(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
1528 var |
1583 var |
1529 i, failNum: longword; |
1584 i, failNum: longword; |
1530 maxTop: longword; |
1585 maxTop: longword; |
1531 begin |
1586 begin |