equal
deleted
inserted
replaced
286 |
286 |
287 TestMortar:= Result |
287 TestMortar:= Result |
288 end; |
288 end; |
289 |
289 |
290 function TestShotgun(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt; |
290 function TestShotgun(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt; |
|
291 const |
|
292 MIN_RANGE = 80; |
|
293 MAX_RANGE = 400; |
291 var Vx, Vy, x, y: hwFloat; |
294 var Vx, Vy, x, y: hwFloat; |
292 rx, ry, Result: LongInt; |
295 rx, ry, Result: LongInt; |
|
296 range: integer; |
293 begin |
297 begin |
294 ap.ExplR:= 0; |
298 ap.ExplR:= 0; |
295 ap.Time:= 0; |
299 ap.Time:= 0; |
296 ap.Power:= 1; |
300 ap.Power:= 1; |
297 if Metric(hwRound(Me^.X), hwRound(Me^.Y), Targ.X, Targ.Y) < 80 then |
301 range:= Metric(hwRound(Me^.X), hwRound(Me^.Y), Targ.X, Targ.Y); |
298 exit(BadTurn); |
302 if ( range < MIN_RANGE ) or ( range > MAX_RANGE ) then exit(BadTurn); |
299 Vx:= (int2hwFloat(Targ.X) - Me^.X) * _1div1024; |
303 Vx:= (int2hwFloat(Targ.X) - Me^.X) * _1div1024; |
300 Vy:= (int2hwFloat(Targ.Y) - Me^.Y) * _1div1024; |
304 Vy:= (int2hwFloat(Targ.Y) - Me^.Y) * _1div1024; |
301 x:= Me^.X; |
305 x:= Me^.X; |
302 y:= Me^.Y; |
306 y:= Me^.Y; |
303 ap.Angle:= DxDy2AttackAngle(Vx, -Vy); |
307 ap.Angle:= DxDy2AttackAngle(Vx, -Vy); |
313 Result:= RateShotgun(Me, rx, ry) * 2; |
317 Result:= RateShotgun(Me, rx, ry) * 2; |
314 if Result = 0 then Result:= - Metric(Targ.X, Targ.Y, rx, ry) div 64 |
318 if Result = 0 then Result:= - Metric(Targ.X, Targ.Y, rx, ry) div 64 |
315 else dec(Result, Level * 4000); |
319 else dec(Result, Level * 4000); |
316 exit(Result) |
320 exit(Result) |
317 end |
321 end |
318 until (Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 4) or (x < _0) or (y < _0) or (x > _2048) or (y > _1024); |
322 until (Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 4) or (x.isNegative) or (y.isNegative) or (x.Round > LAND_WIDTH) or (y.Round > LAND_HEIGHT); |
319 TestShotgun:= BadTurn |
323 TestShotgun:= BadTurn |
320 end; |
324 end; |
321 |
325 |
322 function TestDesertEagle(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt; |
326 function TestDesertEagle(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt; |
323 var Vx, Vy, x, y, t: hwFloat; |
327 var Vx, Vy, x, y, t: hwFloat; |
334 Vy:= (int2hwFloat(Targ.Y) - Me^.Y) * t; |
338 Vy:= (int2hwFloat(Targ.Y) - Me^.Y) * t; |
335 x:= Me^.X; |
339 x:= Me^.X; |
336 y:= Me^.Y; |
340 y:= Me^.Y; |
337 ap.Angle:= DxDy2AttackAngle(Vx, -Vy); |
341 ap.Angle:= DxDy2AttackAngle(Vx, -Vy); |
338 d:= 0; |
342 d:= 0; |
|
343 |
339 repeat |
344 repeat |
340 x:= x + vX; |
345 x:= x + vX; |
341 y:= y + vY; |
346 y:= y + vY; |
342 if ((hwRound(x) and LAND_WIDTH_MASK) = 0)and((hwRound(y) and LAND_HEIGHT_MASK) = 0) |
347 if ((hwRound(x) and LAND_WIDTH_MASK) = 0)and((hwRound(y) and LAND_HEIGHT_MASK) = 0) |
343 and (Land[hwRound(y), hwRound(x)] <> 0) then inc(d); |
348 and (Land[hwRound(y), hwRound(x)] <> 0) then inc(d); |
344 until (Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 4) or (x < _0) or (y < _0) or (x > _2048) or (y > _1024) or (d > 200); |
349 until (Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 4) or (x.isNegative) or (y.isNegative) or (x.Round > LAND_WIDTH) or (y.Round > LAND_HEIGHT) or (d > 200); |
|
350 |
345 if Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 3 then Result:= max(0, (4 - d div 50) * 7 * 1024) |
351 if Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 3 then Result:= max(0, (4 - d div 50) * 7 * 1024) |
346 else Result:= BadTurn; |
352 else Result:= BadTurn; |
347 TestDesertEagle:= Result |
353 TestDesertEagle:= Result |
348 end; |
354 end; |
349 |
355 |