hedgewars/uGearsUtils.pas
changeset 8947 e906ebd59612
parent 8763 988901d27abf
child 8966 5ab59d79bc9a
equal deleted inserted replaced
8946:3e07b8ff2ae1 8947:e906ebd59612
    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);
   463     else
   467     else
   464         CheckGearDrowning := false;
   468         CheckGearDrowning := false;
   465 end;
   469 end;
   466 
   470 
   467 
   471 
   468 procedure ResurrectHedgehog(gear: PGear);
   472 procedure ResurrectHedgehog(var gear: PGear);
   469 var tempTeam : PTeam;
   473 var tempTeam : PTeam;
   470     sparkles: PVisualGear;
   474     sparkles: PVisualGear;
   471     gX, gY: LongInt;
   475     gX, gY: LongInt;
   472 begin
   476 begin
   473     if (Gear^.LastDamage <> nil) then
   477     if (Gear^.LastDamage <> nil) then
   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;