hedgewars/uGearsUtils.pas
author sheepluva
Wed, 25 Apr 2012 08:23:48 +0200
changeset 6928 9562ace15141
parent 6888 32a54322d262
child 6986 409dd3851309
permissions -rw-r--r--
nemo said I was boring for removing the "hello" randomizer on room join. That was actually an accident, fixed by this commit. Now find an actual reason to call me boring (there are many to choose from :P) nemo!
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6581
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
     1
(*
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
     2
 * Hedgewars, a free turn based strategy game
6700
e04da46ee43c the most important commit of the year
koda
parents: 6581
diff changeset
     3
 * Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com>
6581
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
     4
 *
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
     8
 *
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    12
 * GNU General Public License for more details.
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    13
 *
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    14
 * You should have received a copy of the GNU General Public License
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    15
 * along with this program; if not, write to the Free Software
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    17
 *)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    18
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    19
{$INCLUDE "options.inc"}
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    20
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    21
unit uGearsUtils;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    22
interface
6803
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
    23
uses uTypes, math;
6581
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    24
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    25
procedure doMakeExplosion(X, Y, Radius: LongInt; AttackingHog: PHedgehog; Mask: Longword; const Tint: LongWord = $FFFFFFFF); 
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    26
function  ModifyDamage(dmg: Longword; Gear: PGear): Longword;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    27
procedure ApplyDamage(Gear: PGear; AttackerHog: PHedgehog; Damage: Longword; Source: TDamageSource);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    28
procedure spawnHealthTagForHH(HHGear: PGear; dmg: Longword);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    29
procedure HHHurt(Hedgehog: PHedgehog; Source: TDamageSource);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    30
procedure CheckHHDamage(Gear: PGear);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    31
procedure CalcRotationDirAngle(Gear: PGear);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    32
procedure ResurrectHedgehog(gear: PGear);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    33
procedure FindPlace(var Gear: PGear; withFall: boolean; Left, Right: LongInt; skipProximity: boolean = false);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    34
function  CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    35
function  CheckGearDrowning(Gear: PGear): boolean;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    36
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    37
var doStepHandlers: array[TGearType] of TGearStepProcedure;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    38
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    39
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    40
implementation
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    41
uses uFloat, uSound, uCollisions, uUtils, uConsts, uVisualGears, uAIMisc,
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    42
    uVariables, uLandGraphics, uScript, uStats, uCaptions, uTeams, uStore,
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    43
    uLocale, uTextures, uRenderUtils, uRandom, SDLh, uDebug, uGears,
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    44
    uGearsList;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    45
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    46
procedure doMakeExplosion(X, Y, Radius: LongInt; AttackingHog: PHedgehog; Mask: Longword; const Tint: LongWord);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    47
var Gear: PGear;
6769
44ad49a3a126 Add drowning to grenade too, try some little optimisations
nemo
parents: 6765
diff changeset
    48
    dmg, dmgBase: LongInt;
6765
8fcd2508c49f bug #336
nemo
parents: 6700
diff changeset
    49
    fX, fY, tdX, tdY: hwFloat;
6581
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    50
    vg: PVisualGear;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    51
    i, cnt: LongInt;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    52
begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    53
if Radius > 4 then AddFileLog('Explosion: at (' + inttostr(x) + ',' + inttostr(y) + ')');
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    54
if Radius > 25 then KickFlakes(Radius, X, Y);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    55
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    56
if ((Mask and EXPLNoGfx) = 0) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    57
    begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    58
    vg:= nil;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    59
    if Radius > 50 then vg:= AddVisualGear(X, Y, vgtBigExplosion)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    60
    else if Radius > 10 then vg:= AddVisualGear(X, Y, vgtExplosion);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    61
    if vg <> nil then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    62
        vg^.Tint:= Tint;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    63
    end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    64
if (Mask and EXPLAutoSound) <> 0 then PlaySound(sndExplosion);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    65
6765
8fcd2508c49f bug #336
nemo
parents: 6700
diff changeset
    66
(*if (Mask and EXPLAllDamageInRadius) = 0 then
6581
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    67
    dmgRadius:= Radius shl 1
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    68
else
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    69
    dmgRadius:= Radius;
6765
8fcd2508c49f bug #336
nemo
parents: 6700
diff changeset
    70
dmgBase:= dmgRadius + cHHRadius div 2;*)
8fcd2508c49f bug #336
nemo
parents: 6700
diff changeset
    71
dmgBase:= Radius shl 1 + cHHRadius div 2;
6581
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    72
fX:= int2hwFloat(X);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    73
fY:= int2hwFloat(Y);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    74
Gear:= GearsList;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    75
while Gear <> nil do
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    76
    begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    77
    dmg:= 0;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    78
    //dmg:= dmgRadius  + cHHRadius div 2 - hwRound(Distance(Gear^.X - int2hwFloat(X), Gear^.Y - int2hwFloat(Y)));
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    79
    //if (dmg > 1) and
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    80
    if (Gear^.State and gstNoDamage) = 0 then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    81
        begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    82
        case Gear^.Kind of
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    83
            gtHedgehog,
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    84
                gtMine,
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    85
                gtBall,
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    86
                gtMelonPiece,
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    87
                gtGrenade,
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    88
                gtClusterBomb,
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    89
            //    gtCluster, too game breaking I think
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    90
                gtSMine,
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    91
                gtCase,
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    92
                gtTarget,
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    93
                gtFlame,
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    94
                gtExplosives,
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    95
                gtStructure: begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
    96
// Run the calcs only once we know we have a type that will need damage
6765
8fcd2508c49f bug #336
nemo
parents: 6700
diff changeset
    97
                        tdX:= Gear^.X-fX;
8fcd2508c49f bug #336
nemo
parents: 6700
diff changeset
    98
                        tdY:= Gear^.Y-fY;
8fcd2508c49f bug #336
nemo
parents: 6700
diff changeset
    99
                        if hwRound(hwAbs(tdX)+hwAbs(tdY)) < dmgBase then
8fcd2508c49f bug #336
nemo
parents: 6700
diff changeset
   100
                            dmg:= dmgBase - max(hwRound(Distance(tdX, tdY)),Gear^.Radius);
6581
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   101
                        if dmg > 1 then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   102
                            begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   103
                            dmg:= ModifyDamage(min(dmg div 2, Radius), Gear);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   104
                            //AddFileLog('Damage: ' + inttostr(dmg));
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   105
                            if (Mask and EXPLNoDamage) = 0 then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   106
                                begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   107
                                if not Gear^.Invulnerable then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   108
                                    ApplyDamage(Gear, AttackingHog, dmg, dsExplosion)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   109
                                else
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   110
                                    Gear^.State:= Gear^.State or gstWinner;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   111
                                end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   112
                            if ((Mask and EXPLDoNotTouchAny) = 0) and (((Mask and EXPLDoNotTouchHH) = 0) or (Gear^.Kind <> gtHedgehog)) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   113
                                begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   114
                                DeleteCI(Gear);
6765
8fcd2508c49f bug #336
nemo
parents: 6700
diff changeset
   115
                                Gear^.dX:= Gear^.dX + SignAs(_0_005 * dmg + cHHKick, tdX)/(Gear^.Density/_3);
8fcd2508c49f bug #336
nemo
parents: 6700
diff changeset
   116
                                Gear^.dY:= Gear^.dY + SignAs(_0_005 * dmg + cHHKick, tdY)/(Gear^.Density/_3);
6581
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   117
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   118
                                Gear^.State:= (Gear^.State or gstMoving) and (not gstLoser);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   119
                                if not Gear^.Invulnerable then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   120
                                    Gear^.State:= (Gear^.State or gstMoving) and (not gstWinner);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   121
                                Gear^.Active:= true;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   122
                                if Gear^.Kind <> gtFlame then FollowGear:= Gear
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   123
                                end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   124
                            if ((Mask and EXPLPoisoned) <> 0) and (Gear^.Kind = gtHedgehog) and (not Gear^.Invulnerable) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   125
                                Gear^.Hedgehog^.Effects[hePoisoned] := true;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   126
                            end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   127
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   128
                        end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   129
                gtGrave: begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   130
// Run the calcs only once we know we have a type that will need damage
6765
8fcd2508c49f bug #336
nemo
parents: 6700
diff changeset
   131
                        tdX:= Gear^.X-fX;
8fcd2508c49f bug #336
nemo
parents: 6700
diff changeset
   132
                        tdY:= Gear^.Y-fY;
8fcd2508c49f bug #336
nemo
parents: 6700
diff changeset
   133
                        if hwRound(hwAbs(tdX)+hwAbs(tdY)) < dmgBase then
8fcd2508c49f bug #336
nemo
parents: 6700
diff changeset
   134
                            dmg:= dmgBase - hwRound(Distance(tdX, tdY));
6581
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   135
                        if dmg > 1 then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   136
                            begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   137
                            dmg:= ModifyDamage(min(dmg div 2, Radius), Gear);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   138
                            Gear^.dY:= - _0_004 * dmg;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   139
                            Gear^.Active:= true
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   140
                            end
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   141
                        end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   142
            end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   143
        end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   144
    Gear:= Gear^.NextGear
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   145
    end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   146
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   147
if (Mask and EXPLDontDraw) = 0 then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   148
    if (GameFlags and gfSolidLand) = 0 then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   149
        begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   150
        cnt:= DrawExplosion(X, Y, Radius) div 1608; // approx 2 16x16 circles to erase per chunk
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   151
        if (cnt > 0) and (SpritesData[sprChunk].Texture <> nil) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   152
            for i:= 0 to cnt do
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   153
                AddVisualGear(X, Y, vgtChunk)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   154
        end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   155
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   156
uAIMisc.AwareOfExplosion(0, 0, 0)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   157
end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   158
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   159
function ModifyDamage(dmg: Longword; Gear: PGear): Longword;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   160
var i: hwFloat;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   161
begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   162
(* Invulnerability cannot be placed in here due to still needing kicks
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   163
   Not without a new damage machine.
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   164
   King check should be in here instead of ApplyDamage since Tiy wants them kicked less
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   165
*)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   166
i:= _1;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   167
if (CurrentHedgehog <> nil) and CurrentHedgehog^.King then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   168
    i:= _1_5;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   169
if (Gear^.Hedgehog <> nil) and (Gear^.Hedgehog^.King) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   170
    ModifyDamage:= hwRound(_0_01 * cDamageModifier * dmg * i * cDamagePercent * _0_5)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   171
else
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   172
    ModifyDamage:= hwRound(_0_01 * cDamageModifier * dmg * i * cDamagePercent)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   173
end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   174
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   175
procedure ApplyDamage(Gear: PGear; AttackerHog: PHedgehog; Damage: Longword; Source: TDamageSource);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   176
var s: shortstring;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   177
    vampDmg, tmpDmg, i: Longword;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   178
    vg: PVisualGear;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   179
begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   180
    if Damage = 0 then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   181
        exit; // nothing to apply
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   182
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   183
    if (Gear^.Kind = gtHedgehog) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   184
        begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   185
        Gear^.LastDamage := AttackerHog;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   186
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   187
        Gear^.Hedgehog^.Team^.Clan^.Flawless:= false;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   188
        HHHurt(Gear^.Hedgehog, Source);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   189
        AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), Damage, Gear^.Hedgehog^.Team^.Clan^.Color);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   190
        tmpDmg:= min(Damage, max(0,Gear^.Health-Gear^.Damage));
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   191
        if (Gear <> CurrentHedgehog^.Gear) and (CurrentHedgehog^.Gear <> nil) and (tmpDmg >= 1) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   192
            begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   193
            if cVampiric then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   194
                begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   195
                vampDmg:= hwRound(int2hwFloat(tmpDmg)*_0_8);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   196
                if vampDmg >= 1 then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   197
                    begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   198
                    // was considering pulsing on attack, Tiy thinks it should be permanent while in play
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   199
                    //CurrentHedgehog^.Gear^.State:= CurrentHedgehog^.Gear^.State or gstVampiric;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   200
                    inc(CurrentHedgehog^.Gear^.Health,vampDmg);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   201
                    str(vampDmg, s);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   202
                    s:= '+' + s;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   203
                    AddCaption(s, CurrentHedgehog^.Team^.Clan^.Color, capgrpAmmoinfo);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   204
                    RenderHealth(CurrentHedgehog^);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   205
                    RecountTeamHealth(CurrentHedgehog^.Team);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   206
                    i:= 0;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   207
                    while i < vampDmg do
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   208
                        begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   209
                        vg:= AddVisualGear(hwRound(CurrentHedgehog^.Gear^.X), hwRound(CurrentHedgehog^.Gear^.Y), vgtStraightShot);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   210
                        if vg <> nil then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   211
                            with vg^ do
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   212
                                begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   213
                                Tint:= $FF0000FF;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   214
                                State:= ord(sprHealth)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   215
                                end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   216
                        inc(i, 5);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   217
                        end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   218
                    end
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   219
                end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   220
        if ((GameFlags and gfKarma) <> 0) and 
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   221
        ((GameFlags and gfInvulnerable) = 0)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   222
        and (not CurrentHedgehog^.Gear^.Invulnerable) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   223
            begin // this cannot just use Damage or it interrupts shotgun and gets you called stupid
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   224
            inc(CurrentHedgehog^.Gear^.Karma, tmpDmg);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   225
            CurrentHedgehog^.Gear^.LastDamage := CurrentHedgehog;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   226
            spawnHealthTagForHH(CurrentHedgehog^.Gear, tmpDmg);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   227
            end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   228
        uStats.HedgehogDamaged(Gear, AttackerHog, Damage, false);    
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   229
        end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   230
    end
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   231
    else if Gear^.Kind <> gtStructure then // not gtHedgehog nor gtStructure
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   232
        begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   233
        Gear^.Hedgehog:= AttackerHog;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   234
        end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   235
    inc(Gear^.Damage, Damage);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   236
    
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   237
    ScriptCall('onGearDamage', Gear^.UID, Damage);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   238
end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   239
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   240
procedure spawnHealthTagForHH(HHGear: PGear; dmg: Longword);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   241
var tag: PVisualGear;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   242
begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   243
tag:= AddVisualGear(hwRound(HHGear^.X), hwRound(HHGear^.Y), vgtHealthTag, dmg);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   244
if (tag <> nil) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   245
    tag^.Hedgehog:= HHGear^.Hedgehog; // the tag needs the tag to determine the text color
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   246
AllInactive:= false;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   247
HHGear^.Active:= true;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   248
end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   249
    
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   250
procedure HHHurt(Hedgehog: PHedgehog; Source: TDamageSource);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   251
begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   252
if (Source = dsFall) or (Source = dsExplosion) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   253
    case random(3) of
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   254
        0: PlaySound(sndOoff1, Hedgehog^.Team^.voicepack);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   255
        1: PlaySound(sndOoff2, Hedgehog^.Team^.voicepack);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   256
        2: PlaySound(sndOoff3, Hedgehog^.Team^.voicepack);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   257
    end
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   258
else if (Source = dsPoison) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   259
    case random(2) of
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   260
        0: PlaySound(sndPoisonCough, Hedgehog^.Team^.voicepack);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   261
        1: PlaySound(sndPoisonMoan, Hedgehog^.Team^.voicepack);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   262
    end
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   263
else
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   264
    case random(4) of
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   265
        0: PlaySound(sndOw1, Hedgehog^.Team^.voicepack);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   266
        1: PlaySound(sndOw2, Hedgehog^.Team^.voicepack);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   267
        2: PlaySound(sndOw3, Hedgehog^.Team^.voicepack);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   268
        3: PlaySound(sndOw4, Hedgehog^.Team^.voicepack);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   269
    end
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   270
end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   271
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   272
procedure CheckHHDamage(Gear: PGear);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   273
var 
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   274
    dmg: Longword;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   275
    i: LongInt;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   276
    particle: PVisualGear;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   277
begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   278
    if _0_4 < Gear^.dY then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   279
        begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   280
        dmg := ModifyDamage(1 + hwRound((hwAbs(Gear^.dY) - _0_4) * 70), Gear);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   281
        PlaySound(sndBump);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   282
        if dmg < 1 then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   283
            exit;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   284
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   285
        for i:= min(12, (3 + dmg div 10)) downto 0 do
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   286
            begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   287
            particle := AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   288
            if particle <> nil then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   289
                particle^.dX := particle^.dX + (Gear^.dX.QWordValue / 21474836480);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   290
            end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   291
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   292
        if (Gear^.Invulnerable) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   293
            exit;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   294
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   295
        //if _0_6 < Gear^.dY then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   296
        //    PlaySound(sndOw4, Gear^.Hedgehog^.Team^.voicepack)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   297
        //else
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   298
        //    PlaySound(sndOw1, Gear^.Hedgehog^.Team^.voicepack);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   299
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   300
        if Gear^.LastDamage <> nil then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   301
            ApplyDamage(Gear, Gear^.LastDamage, dmg, dsFall)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   302
        else
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   303
            ApplyDamage(Gear, CurrentHedgehog, dmg, dsFall);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   304
    end
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   305
end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   306
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   307
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   308
procedure CalcRotationDirAngle(Gear: PGear);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   309
var 
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   310
    dAngle: real;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   311
begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   312
    dAngle := (Gear^.dX.QWordValue + Gear^.dY.QWordValue) / $80000000;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   313
    if not Gear^.dX.isNegative then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   314
        Gear^.DirAngle := Gear^.DirAngle + dAngle
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   315
    else
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   316
        Gear^.DirAngle := Gear^.DirAngle - dAngle;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   317
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   318
    if Gear^.DirAngle < 0 then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   319
        Gear^.DirAngle := Gear^.DirAngle + 360
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   320
    else if 360 < Gear^.DirAngle then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   321
        Gear^.DirAngle := Gear^.DirAngle - 360
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   322
end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   323
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   324
function CheckGearDrowning(Gear: PGear): boolean;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   325
var 
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   326
    skipSpeed, skipAngle, skipDecay: hwFloat;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   327
    i, maxDrops, X, Y: LongInt;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   328
    vdX, vdY: real;
6803
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   329
    particle, splash: PVisualGear;
6581
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   330
    isSubmersible: boolean;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   331
begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   332
    // probably needs tweaking. might need to be in a case statement based upon gear type
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   333
    Y:= hwRound(Gear^.Y);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   334
    if cWaterLine < Y + Gear^.Radius then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   335
        begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   336
        isSubmersible:= (Gear = CurrentHedgehog^.Gear) and (CurAmmoGear <> nil) and (CurAmmoGear^.AmmoType = amJetpack);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   337
        skipSpeed := _0_25;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   338
        skipAngle := _1_9;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   339
        skipDecay := _0_87;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   340
        X:= hwRound(Gear^.X);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   341
        vdX:= hwFloat2Float(Gear^.dX);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   342
        vdY:= hwFloat2Float(Gear^.dY);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   343
        // this could perhaps be a tiny bit higher.
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   344
        if  (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) > skipSpeed)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   345
        and (hwAbs(Gear^.dX) > skipAngle * hwAbs(Gear^.dY)) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   346
            begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   347
            Gear^.dY.isNegative := true;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   348
            Gear^.dY := Gear^.dY * skipDecay;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   349
            Gear^.dX := Gear^.dX * skipDecay;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   350
            CheckGearDrowning := false;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   351
            PlaySound(sndSkip)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   352
            end
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   353
        else
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   354
            begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   355
            if not isSubmersible then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   356
                begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   357
                CheckGearDrowning := true;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   358
                Gear^.State := gstDrowning;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   359
                Gear^.RenderTimer := false;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   360
                if (Gear^.Kind <> gtSniperRifleShot) and (Gear^.Kind <> gtShotgunShot)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   361
                and (Gear^.Kind <> gtDEagleShot) and (Gear^.Kind <> gtSineGunShot) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   362
                    if Gear^.Kind = gtHedgehog then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   363
                        begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   364
                        if Gear^.Hedgehog^.Effects[heResurrectable] then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   365
                            ResurrectHedgehog(Gear)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   366
                        else
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   367
                            begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   368
                            Gear^.doStep := @doStepDrowningGear;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   369
                            Gear^.State := Gear^.State and (not gstHHDriven);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   370
                            AddCaption(Format(GetEventString(eidDrowned), Gear^.Hedgehog^.Name), cWhiteColor, capgrpMessage);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   371
                            end
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   372
                        end
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   373
                    else
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   374
                        Gear^.doStep := @doStepDrowningGear;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   375
                        if Gear^.Kind = gtFlake then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   376
                            exit // skip splashes 
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   377
                end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   378
            if ((not isSubmersible) and (Y < cWaterLine + 64 + Gear^.Radius))
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   379
            or (isSubmersible and (Y < cWaterLine + 2 + Gear^.Radius) and ((CurAmmoGear^.Pos = 0)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   380
            and (CurAmmoGear^.dY < _0_01))) then
6804
06bedc419d04 Try different splash sounds too
nemo
parents: 6803
diff changeset
   381
                if Gear^.Density * Gear^.dY > _1 then
06bedc419d04 Try different splash sounds too
nemo
parents: 6803
diff changeset
   382
                    PlaySound(sndSplash)
06bedc419d04 Try different splash sounds too
nemo
parents: 6803
diff changeset
   383
                else if Gear^.Density * Gear^.dY > _0_5 then 
06bedc419d04 Try different splash sounds too
nemo
parents: 6803
diff changeset
   384
                    PlaySound(sndSkip)
06bedc419d04 Try different splash sounds too
nemo
parents: 6803
diff changeset
   385
                else
06bedc419d04 Try different splash sounds too
nemo
parents: 6803
diff changeset
   386
                    PlaySound(sndDroplet2);
6581
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   387
            end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   388
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   389
        if ((cReducedQuality and rqPlainSplash) = 0)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   390
        and (((not isSubmersible) and (Y < cWaterLine + 64 + Gear^.Radius))
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   391
        or (isSubmersible and (Y < cWaterLine + 2 + Gear^.Radius) and ((CurAmmoGear^.Pos = 0)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   392
        and (CurAmmoGear^.dY < _0_01)))) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   393
            begin
6803
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   394
            splash:= AddVisualGear(X, cWaterLine, vgtSplash);
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   395
            if splash <> nil then 
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   396
                begin
6804
06bedc419d04 Try different splash sounds too
nemo
parents: 6803
diff changeset
   397
                splash^.Scale:= hwFloat2Float(Gear^.Density / _3 * Gear^.dY);
6803
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   398
                if splash^.Scale > 1 then splash^.Scale:= power(splash^.Scale,0.3333)
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   399
                else splash^.Scale:= splash^.Scale + ((1-splash^.Scale) / 2);
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   400
                end;
6581
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   401
6803
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   402
            maxDrops := (hwRound(Gear^.Density) * 3) div 2 + round(vdX * hwRound(Gear^.Density) * 6) + round(vdY * hwRound(Gear^.Density) * 6);
6581
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   403
            for i:= max(maxDrops div 3, min(32, Random(maxDrops))) downto 0 do
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   404
                begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   405
                particle := AddVisualGear(X - 3 + Random(6), cWaterLine, vgtDroplet);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   406
                if particle <> nil then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   407
                    begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   408
                    particle^.dX := particle^.dX - vdX / 10;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   409
                    particle^.dY := particle^.dY - vdY / 5;
6803
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   410
                    if splash <> nil then
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   411
                        begin
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   412
                        if splash^.Scale > 1 then 
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   413
                            begin
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   414
                            particle^.dX:= particle^.dX * power(splash^.Scale,0.3333); // tone down the droplet height further
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   415
                            particle^.dY:= particle^.dY * power(splash^.Scale, 0.3333)
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   416
                            end
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   417
                        else 
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   418
                            begin
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   419
                            particle^.dX:= particle^.dX * splash^.Scale;
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   420
                            particle^.dY:= particle^.dY * splash^.Scale
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   421
                            end
0e70f3ea3bf8 bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents: 6769
diff changeset
   422
                        end
6581
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   423
                    end
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   424
                end
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   425
            end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   426
        if isSubmersible and (CurAmmoGear^.Pos = 0) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   427
            CurAmmoGear^.Pos := 1000
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   428
        end
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   429
    else
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   430
        CheckGearDrowning := false;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   431
end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   432
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   433
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   434
procedure ResurrectHedgehog(gear: PGear);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   435
var tempTeam : PTeam;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   436
begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   437
    AttackBar:= 0;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   438
    gear^.dX := _0;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   439
    gear^.dY := _0;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   440
    gear^.Damage := 0;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   441
    gear^.Health := gear^.Hedgehog^.InitialHealth;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   442
    gear^.Hedgehog^.Effects[hePoisoned] := false;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   443
    if not CurrentHedgehog^.Effects[heResurrectable] then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   444
        with CurrentHedgehog^ do 
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   445
            begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   446
            inc(Team^.stats.AIKills);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   447
            FreeTexture(Team^.AIKillsTex);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   448
            Team^.AIKillsTex := RenderStringTex(inttostr(Team^.stats.AIKills), Team^.Clan^.Color, fnt16);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   449
            end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   450
    tempTeam := gear^.Hedgehog^.Team;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   451
    DeleteCI(gear);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   452
    FindPlace(gear, false, 0, LAND_WIDTH, true); 
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   453
    if gear <> nil then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   454
        begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   455
        RenderHealth(gear^.Hedgehog^);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   456
        ScriptCall('onGearResurrect', gear^.uid);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   457
        gear^.State := gstWait;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   458
    end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   459
    RecountTeamHealth(tempTeam);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   460
end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   461
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   462
function CountNonZeroz(x, y, r, c: LongInt): LongInt;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   463
var i: LongInt;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   464
    count: LongInt = 0;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   465
begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   466
if (y and LAND_HEIGHT_MASK) = 0 then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   467
    for i:= max(x - r, 0) to min(x + r, LAND_WIDTH - 4) do
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   468
        if Land[y, i] <> 0 then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   469
            begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   470
            inc(count);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   471
            if count = c then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   472
                exit(count)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   473
            end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   474
CountNonZeroz:= count;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   475
end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   476
6888
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   477
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   478
function NoGearsToAvoid(mX, mY: LongInt; rX, rY: LongInt): boolean;
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   479
var t: PGear;
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   480
begin
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   481
t:= GearsList;
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   482
rX:= sqr(rX);
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   483
rY:= sqr(rY);
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   484
while t <> nil do
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   485
    begin
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   486
    if t^.Kind <= gtExplosives then
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   487
        if not (hwSqr(int2hwFloat(mX) - t^.X) / rX + hwSqr(int2hwFloat(mY) - t^.Y) / rY > _1) then
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   488
            exit(false);
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   489
    t:= t^.NextGear
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   490
    end;
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   491
NoGearsToAvoid:= true
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   492
end;
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   493
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   494
6581
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   495
procedure FindPlace(var Gear: PGear; withFall: boolean; Left, Right: LongInt; skipProximity: boolean);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   496
var x: LongInt;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   497
    y, sy: LongInt;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   498
    ar: array[0..511] of TPoint;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   499
    ar2: array[0..1023] of TPoint;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   500
    cnt, cnt2: Longword;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   501
    delta: LongInt;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   502
    reallySkip, tryAgain: boolean;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   503
begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   504
reallySkip:= false; // try not skipping proximity at first
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   505
tryAgain:= true;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   506
while tryAgain do
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   507
    begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   508
    delta:= 250;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   509
    cnt2:= 0;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   510
    repeat
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   511
        x:= Left + LongInt(GetRandom(Delta));
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   512
        repeat
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   513
            inc(x, Delta);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   514
            cnt:= 0;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   515
            y:= min(1024, topY) - 2 * Gear^.Radius;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   516
            while y < cWaterLine do
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   517
                begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   518
                repeat
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   519
                    inc(y, 2);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   520
                until (y >= cWaterLine) or (CountNonZeroz(x, y, Gear^.Radius - 1, 1) = 0);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   521
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   522
                sy:= y;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   523
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   524
                repeat
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   525
                    inc(y);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   526
                until (y >= cWaterLine) or (CountNonZeroz(x, y, Gear^.Radius - 1, 1) <> 0);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   527
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   528
                if (y - sy > Gear^.Radius * 2)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   529
                    and (((Gear^.Kind = gtExplosives)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   530
                    and (y < cWaterLine)
6888
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   531
                    and (reallySkip or NoGearsToAvoid(x, y - Gear^.Radius, 60, 60))
6581
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   532
                    and (CountNonZeroz(x, y+1, Gear^.Radius - 1, Gear^.Radius+1) > Gear^.Radius))
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   533
                or
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   534
                    ((Gear^.Kind <> gtExplosives)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   535
                    and (y < cWaterLine)
6888
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   536
                    and (reallySkip or NoGearsToAvoid(x, y - Gear^.Radius, 110, 110))
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   537
                    )) then
32a54322d262 Get rid of TGearsType to simplify pas2c
unc0rr
parents: 6804
diff changeset
   538
                    begin
6581
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   539
                    ar[cnt].X:= x;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   540
                    if withFall then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   541
                        ar[cnt].Y:= sy + Gear^.Radius
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   542
                    else
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   543
                        ar[cnt].Y:= y - Gear^.Radius;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   544
                    inc(cnt)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   545
                    end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   546
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   547
                inc(y, 45)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   548
                end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   549
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   550
            if cnt > 0 then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   551
                with ar[GetRandom(cnt)] do
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   552
                    begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   553
                    ar2[cnt2].x:= x;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   554
                    ar2[cnt2].y:= y;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   555
                    inc(cnt2)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   556
                    end
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   557
        until (x + Delta > Right);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   558
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   559
        dec(Delta, 60)
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   560
    until (cnt2 > 0) or (Delta < 70);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   561
    if (cnt2 = 0) and skipProximity and (not reallySkip) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   562
        tryAgain:= true
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   563
    else tryAgain:= false;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   564
    reallySkip:= true;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   565
    end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   566
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   567
if cnt2 > 0 then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   568
    with ar2[GetRandom(cnt2)] do
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   569
        begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   570
        Gear^.X:= int2hwFloat(x);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   571
        Gear^.Y:= int2hwFloat(y);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   572
        AddFileLog('Assigned Gear coordinates (' + inttostr(x) + ',' + inttostr(y) + ')');
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   573
        end
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   574
    else
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   575
    begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   576
    OutError('Can''t find place for Gear', false);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   577
    if Gear^.Kind = gtHedgehog then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   578
        Gear^.Hedgehog^.Effects[heResurrectable] := false;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   579
    DeleteGear(Gear);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   580
    Gear:= nil
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   581
    end
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   582
end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   583
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   584
function CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   585
var t: PGear;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   586
begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   587
t:= GearsList;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   588
rX:= sqr(rX);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   589
rY:= sqr(rY);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   590
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   591
while t <> nil do
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   592
    begin
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   593
    if (t <> Gear) and (t^.Kind = Kind) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   594
        if not((hwSqr(Gear^.X - t^.X) / rX + hwSqr(Gear^.Y - t^.Y) / rY) > _1) then
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   595
        exit(t);
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   596
    t:= t^.NextGear
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   597
    end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   598
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   599
CheckGearNear:= nil
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   600
end;
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   601
e510d1245bd7 fix line endings
nemo
parents: 6580
diff changeset
   602
end.