29 procedure ApplyDamage(Gear: PGear; AttackerHog: PHedgehog; Damage: Longword; Source: TDamageSource); |
29 procedure ApplyDamage(Gear: PGear; AttackerHog: PHedgehog; Damage: Longword; Source: TDamageSource); |
30 procedure spawnHealthTagForHH(HHGear: PGear; dmg: Longword); |
30 procedure spawnHealthTagForHH(HHGear: PGear; dmg: Longword); |
31 procedure HHHurt(Hedgehog: PHedgehog; Source: TDamageSource); |
31 procedure HHHurt(Hedgehog: PHedgehog; Source: TDamageSource); |
32 procedure CheckHHDamage(Gear: PGear); |
32 procedure CheckHHDamage(Gear: PGear); |
33 procedure CalcRotationDirAngle(Gear: PGear); |
33 procedure CalcRotationDirAngle(Gear: PGear); |
34 procedure ResurrectHedgehog(gear: PGear); |
34 procedure ResurrectHedgehog(var gear: PGear); |
35 |
35 |
36 procedure FindPlace(var Gear: PGear; withFall: boolean; Left, Right: LongInt); inline; |
36 procedure FindPlace(var Gear: PGear; withFall: boolean; Left, Right: LongInt); inline; |
37 procedure FindPlace(var Gear: PGear; withFall: boolean; Left, Right: LongInt; skipProximity: boolean); |
37 procedure FindPlace(var Gear: PGear; withFall: boolean; Left, Right: LongInt; skipProximity: boolean); |
38 |
38 |
39 function CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear; |
39 function CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear; |
40 function CheckGearDrowning(Gear: PGear): boolean; |
40 function CheckGearDrowning(var Gear: PGear): boolean; |
41 procedure CheckCollision(Gear: PGear); inline; |
41 procedure CheckCollision(Gear: PGear); inline; |
42 procedure CheckCollisionWithLand(Gear: PGear); inline; |
42 procedure CheckCollisionWithLand(Gear: PGear); inline; |
43 |
43 |
44 function MakeHedgehogsStep(Gear: PGear) : boolean; |
44 function MakeHedgehogsStep(Gear: PGear) : boolean; |
45 |
45 |
335 Gear^.DirAngle := Gear^.DirAngle + 360 |
335 Gear^.DirAngle := Gear^.DirAngle + 360 |
336 else if 360 < Gear^.DirAngle then |
336 else if 360 < Gear^.DirAngle then |
337 Gear^.DirAngle := Gear^.DirAngle - 360 |
337 Gear^.DirAngle := Gear^.DirAngle - 360 |
338 end; |
338 end; |
339 |
339 |
340 function CheckGearDrowning(Gear: PGear): boolean; |
340 function CheckGearDrowning(var Gear: PGear): boolean; |
341 var |
341 var |
342 skipSpeed, skipAngle, skipDecay: hwFloat; |
342 skipSpeed, skipAngle, skipDecay: hwFloat; |
343 i, maxDrops, X, Y: LongInt; |
343 i, maxDrops, X, Y: LongInt; |
344 vdX, vdY: real; |
344 vdX, vdY: real; |
345 particle, splash: PVisualGear; |
345 particle, splash: PVisualGear; |
388 if (Gear^.Kind <> gtSniperRifleShot) and (Gear^.Kind <> gtShotgunShot) |
388 if (Gear^.Kind <> gtSniperRifleShot) and (Gear^.Kind <> gtShotgunShot) |
389 and (Gear^.Kind <> gtDEagleShot) and (Gear^.Kind <> gtSineGunShot) then |
389 and (Gear^.Kind <> gtDEagleShot) and (Gear^.Kind <> gtSineGunShot) then |
390 if Gear^.Kind = gtHedgehog then |
390 if Gear^.Kind = gtHedgehog then |
391 begin |
391 begin |
392 if Gear^.Hedgehog^.Effects[heResurrectable] <> 0 then |
392 if Gear^.Hedgehog^.Effects[heResurrectable] <> 0 then |
393 ResurrectHedgehog(Gear) |
393 begin |
|
394 // Gear could become nil after this, just exit to skip splashes |
|
395 ResurrectHedgehog(Gear); |
|
396 exit |
|
397 end |
394 else |
398 else |
395 begin |
399 begin |
396 Gear^.doStep := @doStepDrowningGear; |
400 Gear^.doStep := @doStepDrowningGear; |
397 Gear^.State := Gear^.State and (not gstHHDriven); |
401 Gear^.State := Gear^.State and (not gstHHDriven); |
398 AddCaption(Format(GetEventString(eidDrowned), Gear^.Hedgehog^.Name), cWhiteColor, capgrpMessage); |
402 AddCaption(Format(GetEventString(eidDrowned), Gear^.Hedgehog^.Name), cWhiteColor, capgrpMessage); |
505 AddVisualGear(hwRound(gear^.X), hwRound(gear^.Y), vgtExplosion); |
509 AddVisualGear(hwRound(gear^.X), hwRound(gear^.Y), vgtExplosion); |
506 PlaySound(sndWarp); |
510 PlaySound(sndWarp); |
507 RenderHealth(gear^.Hedgehog^); |
511 RenderHealth(gear^.Hedgehog^); |
508 ScriptCall('onGearResurrect', gear^.uid); |
512 ScriptCall('onGearResurrect', gear^.uid); |
509 gear^.State := gstWait; |
513 gear^.State := gstWait; |
510 end; |
514 end; |
511 RecountTeamHealth(tempTeam); |
515 RecountTeamHealth(tempTeam); |
512 end; |
516 end; |
513 |
517 |
514 function CountNonZeroz(x, y, r, c: LongInt; mask: LongWord): LongInt; |
518 function CountNonZeroz(x, y, r, c: LongInt; mask: LongWord): LongInt; |
515 var i: LongInt; |
519 var i: LongInt; |