hedgewars/uGears.pas
author unc0rr
Mon, 29 Sep 2008 22:14:23 +0000
changeset 1301 c6fe8a4bfd34
parent 1298 18fdc25fe65d
child 1343 7a47a80b20ad
permissions -rw-r--r--
Fix a bug screwing team selection up in network game (REMOVETEAM message doesn't have teamID, and after removing the team QMap still contains old info, when add and remove team with the same name, total hedgehogs number will be decreased by first team hh number)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
     1
(*
1066
1f1b3686a2b0 Update copyright headers a bit
unc0rr
parents: 1064
diff changeset
     2
 * Hedgewars, a free turn based strategy game
883
07a568ba44e0 Update copyright info in source files headers
unc0rr
parents: 878
diff changeset
     3
 * Copyright (c) 2004-2008 Andrey Korotaev <unC0Rr@gmail.com>
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
     4
 *
183
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
     8
 *
183
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
    12
 * GNU General Public License for more details.
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    13
 *
183
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
    14
 * You should have received a copy of the GNU General Public License
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
    15
 * along with this program; if not, write to the Free Software
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    17
 *)
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    18
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    19
unit uGears;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    20
interface
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
    21
uses SDLh, uConsts, uFloat;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    22
{$INCLUDE options.inc}
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    23
const AllInactive: boolean = false;
868
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 867
diff changeset
    24
      PrvInactive: boolean = false;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    25
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    26
type PGear = ^TGear;
1259
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    27
	TGearStepProcedure = procedure (Gear: PGear);
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    28
	TGear = record
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    29
			NextGear, PrevGear: PGear;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    30
			Active: Boolean;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    31
			Ammo : PAmmo;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    32
			State : Longword;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    33
			X : hwFloat;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    34
			Y : hwFloat;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    35
			dX: hwFloat;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    36
			dY: hwFloat;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    37
			Kind: TGearType;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    38
			Pos: Longword;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    39
			doStep: TGearStepProcedure;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    40
			Radius: LongInt;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    41
			Angle, Power : Longword;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    42
			DirAngle: real;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    43
			Timer : LongWord;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    44
			Elasticity: hwFloat;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    45
			Friction  : hwFloat;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    46
			Message, MsgParam : Longword;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    47
			Hedgehog: pointer;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    48
			Health, Damage: LongInt;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    49
			CollisionIndex: LongInt;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    50
			Tag: LongInt;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    51
			Tex: PTexture;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    52
			Z: Longword;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    53
			IntersectGear: PGear;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    54
			TriggerId: Longword;
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    55
			end;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    56
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
    57
function  AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer: LongWord): PGear;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    58
procedure ProcessGears;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    59
procedure SetAllToActive;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    60
procedure SetAllHHToActive;
956
19003f7fc174 Get rid of unused Surface parameter
unc0rr
parents: 955
diff changeset
    61
procedure DrawGears;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    62
procedure FreeGearsList;
10
edf56dca1587 - Mine weapon
unc0rr
parents: 9
diff changeset
    63
procedure AddMiscGears;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    64
procedure AssignHHCoords;
294
92a7ccd67bb9 Current hedgehog is on top of others in Z-order
unc0rr
parents: 293
diff changeset
    65
procedure InsertGearToList(Gear: PGear);
92a7ccd67bb9 Current hedgehog is on top of others in Z-order
unc0rr
parents: 293
diff changeset
    66
procedure RemoveGearFromList(Gear: PGear);
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    67
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    68
var CurAmmoGear: PGear = nil;
68
cbb93eb90304 Collision-related stuff
unc0rr
parents: 64
diff changeset
    69
    GearsList: PGear = nil;
307
96b428ac11f2 More statistics
unc0rr
parents: 306
diff changeset
    70
    KilledHHs: Longword = 0;
70
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
    71
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    72
implementation
81
d74e0e914b50 More translations
unc0rr
parents: 80
diff changeset
    73
uses uWorld, uMisc, uStore, uConsole, uSound, uTeams, uRandom, uCollisions,
1259
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    74
	uLand, uIO, uLandGraphics, uAIMisc, uLocale, uAI, uAmmos, uTriggers, GL,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
    75
	uStats, uVisualGears;
789
3d976d2579eb - More accurate rope collision detection
unc0rr
parents: 785
diff changeset
    76
1207
ceaab010269e Some adjusting... it still doesn't solve problem fully
unc0rr
parents: 1200
diff changeset
    77
const MAXROPEPOINTS = 384;
68
cbb93eb90304 Collision-related stuff
unc0rr
parents: 64
diff changeset
    78
var RopePoints: record
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    79
                Count: Longword;
776
8fc7e59d9cb4 Convert the rest of rotated sprites to be rotated by OpenGL
unc0rr
parents: 775
diff changeset
    80
                HookAngle: GLfloat;
789
3d976d2579eb - More accurate rope collision detection
unc0rr
parents: 785
diff changeset
    81
                ar: array[0..MAXROPEPOINTS] of record
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
    82
                                  X, Y: hwFloat;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
    83
                                  dLen: hwFloat;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    84
                                  b: boolean;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    85
                                  end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    86
                 end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    87
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    88
procedure DeleteGear(Gear: PGear); forward;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
    89
procedure doMakeExplosion(X, Y, Radius: LongInt; Mask: LongWord); forward;
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
    90
procedure AmmoShove(Ammo: PGear; Damage, Power: LongInt); forward;
79
29b477319854 - New test map
unc0rr
parents: 78
diff changeset
    91
procedure AmmoFlameWork(Ammo: PGear); forward;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
    92
function  CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear; forward;
15
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
    93
procedure SpawnBoxOfSmth; forward;
32
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 24
diff changeset
    94
procedure AfterAttack; forward;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
    95
procedure FindPlace(Gear: PGear; withFall: boolean; Left, Right: LongInt); forward;
302
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
    96
procedure HedgehogStep(Gear: PGear); forward;
303
1659c4aad5ab Now blow torch angle can be changed during blowing :)
unc0rr
parents: 302
diff changeset
    97
procedure HedgehogChAngle(Gear: PGear); forward;
506
0889d833d47e - A good implementation of shotgun
unc0rr
parents: 505
diff changeset
    98
procedure ShotgunShot(Gear: PGear); forward;
522
ca089787f59d Tags with current damage
unc0rr
parents: 520
diff changeset
    99
procedure AddDamageTag(X, Y, Damage: LongWord; Gear: PGear); forward;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   100
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   101
{$INCLUDE GSHandlers.inc}
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   102
{$INCLUDE HHHandlers.inc}
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   103
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   104
const doStepHandlers: array[TGearType] of TGearStepProcedure = (
1259
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   105
			@doStepBomb,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   106
			@doStepHedgehog,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   107
			@doStepGrenade,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   108
			@doStepHealthTag,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   109
			@doStepGrave,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   110
			@doStepUFO,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   111
			@doStepShotgunShot,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   112
			@doStepPickHammer,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   113
			@doStepRope,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   114
			@doStepSmokeTrace,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   115
			@doStepExplosion,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   116
			@doStepMine,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   117
			@doStepCase,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   118
			@doStepDEagleShot,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   119
			@doStepDynamite,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   120
			@doStepTeamHealthSorter,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   121
			@doStepBomb,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   122
			@doStepCluster,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   123
			@doStepShover,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   124
			@doStepFlame,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   125
			@doStepFirePunch,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   126
			@doStepActionTimer,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   127
			@doStepActionTimer,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   128
			@doStepActionTimer,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   129
			@doStepParachute,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   130
			@doStepAirAttack,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   131
			@doStepAirBomb,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   132
			@doStepBlowTorch,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   133
			@doStepGirder,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   134
			@doStepTeleport,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   135
			@doStepHealthTag,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   136
			@doStepSwitcher,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   137
			@doStepCase,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   138
			@doStepMortar,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   139
			@doStepWhip,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   140
			@doStepKamikaze,
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   141
			@doStepCake,
1261
903058d382c7 Add watermelon weapon (without proper sprites yet)
unc0rr
parents: 1259
diff changeset
   142
			@doStepSeduction,
1279
33cae6d1635c Use new sounds
unc0rr
parents: 1270
diff changeset
   143
			@doStepWatermelon,
1263
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1262
diff changeset
   144
			@doStepCluster,
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1262
diff changeset
   145
			@doStepBomb,
1298
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   146
			@doStepSmokeTrace,
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   147
			@doStepWaterUp
1259
0c660c3d98a4 - Continue seduction implementation
unc0rr
parents: 1257
diff changeset
   148
			);
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   149
294
92a7ccd67bb9 Current hedgehog is on top of others in Z-order
unc0rr
parents: 293
diff changeset
   150
procedure InsertGearToList(Gear: PGear);
803
3f73901a350a - Use cloud as 'visual gear'
unc0rr
parents: 802
diff changeset
   151
var tmp, ptmp: PGear;
294
92a7ccd67bb9 Current hedgehog is on top of others in Z-order
unc0rr
parents: 293
diff changeset
   152
begin
92a7ccd67bb9 Current hedgehog is on top of others in Z-order
unc0rr
parents: 293
diff changeset
   153
if GearsList = nil then
92a7ccd67bb9 Current hedgehog is on top of others in Z-order
unc0rr
parents: 293
diff changeset
   154
   GearsList:= Gear
92a7ccd67bb9 Current hedgehog is on top of others in Z-order
unc0rr
parents: 293
diff changeset
   155
   else begin
92a7ccd67bb9 Current hedgehog is on top of others in Z-order
unc0rr
parents: 293
diff changeset
   156
   tmp:= GearsList;
803
3f73901a350a - Use cloud as 'visual gear'
unc0rr
parents: 802
diff changeset
   157
   ptmp:= GearsList;
3f73901a350a - Use cloud as 'visual gear'
unc0rr
parents: 802
diff changeset
   158
   while (tmp <> nil) and (tmp^.Z <= Gear^.Z) do
3f73901a350a - Use cloud as 'visual gear'
unc0rr
parents: 802
diff changeset
   159
          begin
3f73901a350a - Use cloud as 'visual gear'
unc0rr
parents: 802
diff changeset
   160
          ptmp:= tmp;
3f73901a350a - Use cloud as 'visual gear'
unc0rr
parents: 802
diff changeset
   161
          tmp:= tmp^.NextGear
3f73901a350a - Use cloud as 'visual gear'
unc0rr
parents: 802
diff changeset
   162
          end;
294
92a7ccd67bb9 Current hedgehog is on top of others in Z-order
unc0rr
parents: 293
diff changeset
   163
803
3f73901a350a - Use cloud as 'visual gear'
unc0rr
parents: 802
diff changeset
   164
   if ptmp <> nil then
3f73901a350a - Use cloud as 'visual gear'
unc0rr
parents: 802
diff changeset
   165
      begin
3f73901a350a - Use cloud as 'visual gear'
unc0rr
parents: 802
diff changeset
   166
      Gear^.NextGear:= ptmp^.NextGear;
3f73901a350a - Use cloud as 'visual gear'
unc0rr
parents: 802
diff changeset
   167
      Gear^.PrevGear:= ptmp;
3f73901a350a - Use cloud as 'visual gear'
unc0rr
parents: 802
diff changeset
   168
      if ptmp^.NextGear <> nil then ptmp^.NextGear^.PrevGear:= Gear;
3f73901a350a - Use cloud as 'visual gear'
unc0rr
parents: 802
diff changeset
   169
      ptmp^.NextGear:= Gear
3f73901a350a - Use cloud as 'visual gear'
unc0rr
parents: 802
diff changeset
   170
      end
3f73901a350a - Use cloud as 'visual gear'
unc0rr
parents: 802
diff changeset
   171
   else GearsList:= Gear
294
92a7ccd67bb9 Current hedgehog is on top of others in Z-order
unc0rr
parents: 293
diff changeset
   172
   end
92a7ccd67bb9 Current hedgehog is on top of others in Z-order
unc0rr
parents: 293
diff changeset
   173
end;
92a7ccd67bb9 Current hedgehog is on top of others in Z-order
unc0rr
parents: 293
diff changeset
   174
92a7ccd67bb9 Current hedgehog is on top of others in Z-order
unc0rr
parents: 293
diff changeset
   175
procedure RemoveGearFromList(Gear: PGear);
92a7ccd67bb9 Current hedgehog is on top of others in Z-order
unc0rr
parents: 293
diff changeset
   176
begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   177
if Gear^.NextGear <> nil then Gear^.NextGear^.PrevGear:= Gear^.PrevGear;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   178
if Gear^.PrevGear <> nil then Gear^.PrevGear^.NextGear:= Gear^.NextGear
809
b33c2def1576 Fix hedgehogs switching hang
unc0rr
parents: 803
diff changeset
   179
   else GearsList:= Gear^.NextGear
294
92a7ccd67bb9 Current hedgehog is on top of others in Z-order
unc0rr
parents: 293
diff changeset
   180
end;
92a7ccd67bb9 Current hedgehog is on top of others in Z-order
unc0rr
parents: 293
diff changeset
   181
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
   182
function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer: LongWord): PGear;
79
29b477319854 - New test map
unc0rr
parents: 78
diff changeset
   183
const Counter: Longword = 0;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   184
var Result: PGear;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   185
begin
79
29b477319854 - New test map
unc0rr
parents: 78
diff changeset
   186
inc(Counter);
108
08f1fe6f21f8 Small fixes for better FPC compatibility
unc0rr
parents: 107
diff changeset
   187
{$IFDEF DEBUGFILE}AddFileLog('AddGear: ('+inttostr(x)+','+inttostr(y)+'), d('+floattostr(dX)+','+floattostr(dY)+')');{$ENDIF}
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   188
New(Result);
357
165a040e4cfa - Fix Blow Torch and Air Attack
unc0rr
parents: 355
diff changeset
   189
{$IFDEF DEBUGFILE}AddFileLog('AddGear: type = ' + inttostr(ord(Kind)));{$ENDIF}
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   190
FillChar(Result^, sizeof(TGear), 0);
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 495
diff changeset
   191
Result^.X:= int2hwFloat(X);
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 495
diff changeset
   192
Result^.Y:= int2hwFloat(Y);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   193
Result^.Kind := Kind;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   194
Result^.State:= State;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   195
Result^.Active:= true;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   196
Result^.dX:= dX;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   197
Result^.dY:= dY;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   198
Result^.doStep:= doStepHandlers[Kind];
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 509
diff changeset
   199
Result^.CollisionIndex:= -1;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   200
Result^.Timer:= Timer;
1270
ee024c14c904 Draw smoke trail underneath of grenade
unc0rr
parents: 1263
diff changeset
   201
Result^.Z:= cUsualZ;
505
fcba7d7aea0d Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents: 503
diff changeset
   202
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   203
if CurrentTeam <> nil then
505
fcba7d7aea0d Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents: 503
diff changeset
   204
   begin
602
f7628ebfccde Add CurrentHedgehog variable which simplifies code
unc0rr
parents: 601
diff changeset
   205
   Result^.Hedgehog:= CurrentHedgehog;
f7628ebfccde Add CurrentHedgehog variable which simplifies code
unc0rr
parents: 601
diff changeset
   206
   Result^.IntersectGear:= CurrentHedgehog^.Gear
505
fcba7d7aea0d Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents: 503
diff changeset
   207
   end;
802
ed5450a89b96 Start implementing 'visual gears' - gears, that don't need to be synchronized (clouds and flakes)
unc0rr
parents: 789
diff changeset
   208
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   209
case Kind of
915
33040b7695c0 - Some changes in clusters initialization
unc0rr
parents: 910
diff changeset
   210
   gtAmmo_Bomb,
33040b7695c0 - Some changes in clusters initialization
unc0rr
parents: 910
diff changeset
   211
 gtClusterBomb: begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   212
                Result^.Radius:= 4;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   213
                Result^.Elasticity:= _0_6;
997
d828d1d1ecc4 Small grenade physics change
unc0rr
parents: 994
diff changeset
   214
                Result^.Friction:= _0_96;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   215
                end;
1261
903058d382c7 Add watermelon weapon (without proper sprites yet)
unc0rr
parents: 1259
diff changeset
   216
  gtWatermelon: begin
903058d382c7 Add watermelon weapon (without proper sprites yet)
unc0rr
parents: 1259
diff changeset
   217
                Result^.Radius:= 4;
903058d382c7 Add watermelon weapon (without proper sprites yet)
unc0rr
parents: 1259
diff changeset
   218
                Result^.Elasticity:= _0_8;
903058d382c7 Add watermelon weapon (without proper sprites yet)
unc0rr
parents: 1259
diff changeset
   219
                Result^.Friction:= _0_995;
903058d382c7 Add watermelon weapon (without proper sprites yet)
unc0rr
parents: 1259
diff changeset
   220
                end;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   221
    gtHedgehog: begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   222
                Result^.Radius:= cHHRadius;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   223
                Result^.Elasticity:= _0_35;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   224
                Result^.Friction:= _0_999;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   225
                Result^.Angle:= cMaxAngle div 2;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   226
                Result^.Z:= cHHZ;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   227
                end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   228
gtAmmo_Grenade: begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   229
                Result^.Radius:= 4;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   230
                end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   231
   gtHealthTag: begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   232
                Result^.Timer:= 1500;
522
ca089787f59d Tags with current damage
unc0rr
parents: 520
diff changeset
   233
                Result^.Z:= 2001;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   234
                end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   235
       gtGrave: begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   236
                Result^.Radius:= 10;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   237
                Result^.Elasticity:= _0_6;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   238
                end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   239
         gtUFO: begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   240
                Result^.Radius:= 5;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   241
                Result^.Timer:= 500;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   242
                Result^.Elasticity:= _0_9
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   243
                end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   244
 gtShotgunShot: begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   245
                Result^.Timer:= 900;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   246
                Result^.Radius:= 2
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   247
                end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   248
  gtPickHammer: begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   249
                Result^.Radius:= 10;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   250
                Result^.Timer:= 4000
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   251
                end;
1263
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1262
diff changeset
   252
  gtSmokeTrace,
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1262
diff changeset
   253
   gtEvilTrace: begin
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 495
diff changeset
   254
                Result^.X:= Result^.X - _16;
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 495
diff changeset
   255
                Result^.Y:= Result^.Y - _16;
1270
ee024c14c904 Draw smoke trail underneath of grenade
unc0rr
parents: 1263
diff changeset
   256
                Result^.State:= 8;
ee024c14c904 Draw smoke trail underneath of grenade
unc0rr
parents: 1263
diff changeset
   257
                Result^.Z:= cSmokeZ
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   258
                end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   259
        gtRope: begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   260
                Result^.Radius:= 3;
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 495
diff changeset
   261
                Result^.Friction:= _450;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   262
                RopePoints.Count:= 0;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   263
                end;
9
4cbf854ad095 - Show explosion
unc0rr
parents: 6
diff changeset
   264
   gtExplosion: begin
1012
36b5cc8264e8 Damaged hedgehog animation
unc0rr
parents: 1011
diff changeset
   265
                Result^.X:= Result^.X;
36b5cc8264e8 Damaged hedgehog animation
unc0rr
parents: 1011
diff changeset
   266
                Result^.Y:= Result^.Y;
9
4cbf854ad095 - Show explosion
unc0rr
parents: 6
diff changeset
   267
                end;
10
edf56dca1587 - Mine weapon
unc0rr
parents: 9
diff changeset
   268
        gtMine: begin
503
2cfdc4bfc2be Mines also collide
unc0rr
parents: 498
diff changeset
   269
                Result^.State:= Result^.State or gstMoving;
915
33040b7695c0 - Some changes in clusters initialization
unc0rr
parents: 910
diff changeset
   270
                Result^.Radius:= 2;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   271
                Result^.Elasticity:= _0_55;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   272
                Result^.Friction:= _0_995;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   273
                Result^.Timer:= 3000;
10
edf56dca1587 - Mine weapon
unc0rr
parents: 9
diff changeset
   274
                end;
14
81f125629b25 - Mine checks whether a hedgehog is near less frequently
unc0rr
parents: 10
diff changeset
   275
        gtCase: begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   276
                Result^.Radius:= 16;
601
78a68cc4d846 Special game mode allowing the only clan on map for training mode
unc0rr
parents: 595
diff changeset
   277
                Result^.Elasticity:= _0_3
14
81f125629b25 - Mine checks whether a hedgehog is near less frequently
unc0rr
parents: 10
diff changeset
   278
                end;
37
2b7f2a43b999 - Properly get seed in net game
unc0rr
parents: 35
diff changeset
   279
  gtDEagleShot: begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   280
                Result^.Radius:= 1;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   281
                Result^.Health:= 50
37
2b7f2a43b999 - Properly get seed in net game
unc0rr
parents: 35
diff changeset
   282
                end;
39
b78e7185ed13 - Increased FPS
unc0rr
parents: 38
diff changeset
   283
    gtDynamite: begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   284
                Result^.Radius:= 3;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   285
                Result^.Elasticity:= _0_55;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   286
                Result^.Friction:= _0_03;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   287
                Result^.Timer:= 5000;
39
b78e7185ed13 - Increased FPS
unc0rr
parents: 38
diff changeset
   288
                end;
910
8d5f3fef4ac2 Set radius for clusters of clusterbomb
unc0rr
parents: 883
diff changeset
   289
     gtCluster: Result^.Radius:= 2;
878
45bff6dadfce - Fix baseball bat
unc0rr
parents: 876
diff changeset
   290
      gtShover: Result^.Radius:= 20;
79
29b477319854 - New test map
unc0rr
parents: 78
diff changeset
   291
       gtFlame: begin
1295
27bec661581c Start flames rework
unc0rr
parents: 1294
diff changeset
   292
                Result^.Tag:= Counter mod 64;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   293
                Result^.Radius:= 1;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   294
                Result^.Health:= 2;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   295
                Result^.dY:= (getrandom - _0_8) * _0_03;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   296
                Result^.dX:= (getrandom - _0_5) * _0_4
79
29b477319854 - New test map
unc0rr
parents: 78
diff changeset
   297
                end;
82
2f4f3236cccc - New fort
unc0rr
parents: 81
diff changeset
   298
   gtFirePunch: begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   299
                Result^.Radius:= 15;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   300
                Result^.Tag:= Y
82
2f4f3236cccc - New fort
unc0rr
parents: 81
diff changeset
   301
                end;
302
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   302
     gtAirBomb: begin
543
465e2ec8f05f - Better randomness of placing hedgehogs on the land
unc0rr
parents: 542
diff changeset
   303
                Result^.Radius:= 5;
302
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   304
                end;
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   305
   gtBlowTorch: begin
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 509
diff changeset
   306
                Result^.Radius:= cHHRadius + cBlowTorchC;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   307
                Result^.Timer:= 7500;
302
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   308
                end;
522
ca089787f59d Tags with current damage
unc0rr
parents: 520
diff changeset
   309
 gtSmallDamage: begin
ca089787f59d Tags with current damage
unc0rr
parents: 520
diff changeset
   310
                Result^.Timer:= 1100;
ca089787f59d Tags with current damage
unc0rr
parents: 520
diff changeset
   311
                Result^.Z:= 2000;
ca089787f59d Tags with current damage
unc0rr
parents: 520
diff changeset
   312
                end;
540
b06c5aace2fa - Many fixes related to hh switcher
unc0rr
parents: 539
diff changeset
   313
    gtSwitcher: begin
b06c5aace2fa - Many fixes related to hh switcher
unc0rr
parents: 539
diff changeset
   314
                Result^.Z:= cCurrHHZ
b06c5aace2fa - Many fixes related to hh switcher
unc0rr
parents: 539
diff changeset
   315
                end;
593
1f5e66379a43 Triggers proof-of-concept
unc0rr
parents: 590
diff changeset
   316
      gtTarget: begin
601
78a68cc4d846 Special game mode allowing the only clan on map for training mode
unc0rr
parents: 595
diff changeset
   317
                Result^.Radius:= 16;
78a68cc4d846 Special game mode allowing the only clan on map for training mode
unc0rr
parents: 595
diff changeset
   318
                Result^.Elasticity:= _0_3
593
1f5e66379a43 Triggers proof-of-concept
unc0rr
parents: 590
diff changeset
   319
                end;
924
227f9fcdc2f4 Initial implementation of mortar
unc0rr
parents: 917
diff changeset
   320
      gtMortar: begin
994
ea415d03968c - Bots can use mortar
unc0rr
parents: 987
diff changeset
   321
                Result^.Radius:= 4;
924
227f9fcdc2f4 Initial implementation of mortar
unc0rr
parents: 917
diff changeset
   322
                Result^.Elasticity:= _0_2;
227f9fcdc2f4 Initial implementation of mortar
unc0rr
parents: 917
diff changeset
   323
                Result^.Friction:= _0_08
227f9fcdc2f4 Initial implementation of mortar
unc0rr
parents: 917
diff changeset
   324
                end;
925
c20156328529 Implement whip weapon
unc0rr
parents: 924
diff changeset
   325
        gtWhip: Result^.Radius:= 20;
984
dd5f16f69926 Kamikaze weapon
unc0rr
parents: 982
diff changeset
   326
    gtKamikaze: begin
dd5f16f69926 Kamikaze weapon
unc0rr
parents: 982
diff changeset
   327
                Result^.Health:= 2048;
dd5f16f69926 Kamikaze weapon
unc0rr
parents: 982
diff changeset
   328
                Result^.Radius:= 20
dd5f16f69926 Kamikaze weapon
unc0rr
parents: 982
diff changeset
   329
                end;
1089
24e9e1ca0394 First implementation of the Cake weapon
unc0rr
parents: 1088
diff changeset
   330
        gtCake: begin
1261
903058d382c7 Add watermelon weapon (without proper sprites yet)
unc0rr
parents: 1259
diff changeset
   331
                Result^.Health:= 2048;
1103
1ff3db3c12af Show cake rotated correct angle
unc0rr
parents: 1089
diff changeset
   332
                Result^.Radius:= 7;
1109
87c44c14fdd4 - Cake sits down before exploding
unc0rr
parents: 1108
diff changeset
   333
                Result^.Z:= cOnHHZ;
1089
24e9e1ca0394 First implementation of the Cake weapon
unc0rr
parents: 1088
diff changeset
   334
                if hwSign(dX) > 0 then Result^.Angle:= 1 else Result^.Angle:= 3
24e9e1ca0394 First implementation of the Cake weapon
unc0rr
parents: 1088
diff changeset
   335
                end;
1263
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1262
diff changeset
   336
 gtHellishBomb: begin
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1262
diff changeset
   337
                Result^.Radius:= 4;
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1262
diff changeset
   338
                Result^.Elasticity:= _0_5;
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1262
diff changeset
   339
                Result^.Friction:= _0_96;
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1262
diff changeset
   340
                end;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   341
     end;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   342
InsertGearToList(Result);
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   343
AddGear:= Result
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   344
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   345
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   346
procedure DeleteGear(Gear: PGear);
48
0f396d0c429d - New /skip command
unc0rr
parents: 47
diff changeset
   347
var team: PTeam;
307
96b428ac11f2 More statistics
unc0rr
parents: 306
diff changeset
   348
    t: Longword;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   349
begin
503
2cfdc4bfc2be Mines also collide
unc0rr
parents: 498
diff changeset
   350
DeleteCI(Gear);
762
5ecf042f6113 More sprites are visible
unc0rr
parents: 755
diff changeset
   351
5ecf042f6113 More sprites are visible
unc0rr
parents: 755
diff changeset
   352
if Gear^.Tex <> nil then
522
ca089787f59d Tags with current damage
unc0rr
parents: 520
diff changeset
   353
   begin
762
5ecf042f6113 More sprites are visible
unc0rr
parents: 755
diff changeset
   354
   FreeTexture(Gear^.Tex);
5ecf042f6113 More sprites are visible
unc0rr
parents: 755
diff changeset
   355
   Gear^.Tex:= nil
522
ca089787f59d Tags with current damage
unc0rr
parents: 520
diff changeset
   356
   end;
762
5ecf042f6113 More sprites are visible
unc0rr
parents: 755
diff changeset
   357
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   358
if Gear^.Kind = gtHedgehog then
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   359
   if CurAmmoGear <> nil then
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   360
      begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   361
      Gear^.Message:= gm_Destroy;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   362
      CurAmmoGear^.Message:= gm_Destroy;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   363
      exit
47
8daf1ee0b9a3 Show team health bars, without sorting yet
unc0rr
parents: 46
diff changeset
   364
      end else
8daf1ee0b9a3 Show team health bars, without sorting yet
unc0rr
parents: 46
diff changeset
   365
      begin
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 495
diff changeset
   366
      if not (hwRound(Gear^.Y) < cWaterLine) then
307
96b428ac11f2 More statistics
unc0rr
parents: 306
diff changeset
   367
         begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   368
         t:= max(Gear^.Damage, Gear^.Health);
867
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   369
         Gear^.Damage:= t;
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 495
diff changeset
   370
         AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtHealthTag, t, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog;
867
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   371
         uStats.HedgehogDamaged(Gear)
307
96b428ac11f2 More statistics
unc0rr
parents: 306
diff changeset
   372
         end;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   373
      team:= PHedgehog(Gear^.Hedgehog)^.Team;
602
f7628ebfccde Add CurrentHedgehog variable which simplifies code
unc0rr
parents: 601
diff changeset
   374
      if CurrentHedgehog^.Gear = Gear then
145
e593d5266e01 - Fix crash in AI
unc0rr
parents: 126
diff changeset
   375
         FreeActionsList; // to avoid ThinkThread on drawned gear
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   376
      PHedgehog(Gear^.Hedgehog)^.Gear:= nil;
307
96b428ac11f2 More statistics
unc0rr
parents: 306
diff changeset
   377
      inc(KilledHHs);
48
0f396d0c429d - New /skip command
unc0rr
parents: 47
diff changeset
   378
      RecountTeamHealth(team);
47
8daf1ee0b9a3 Show team health bars, without sorting yet
unc0rr
parents: 46
diff changeset
   379
      end;
357
165a040e4cfa - Fix Blow Torch and Air Attack
unc0rr
parents: 355
diff changeset
   380
{$IFDEF DEBUGFILE}AddFileLog('DeleteGear');{$ENDIF}
595
5ee863f2f568 Triggers PoC: targets are spawned right after the previous damaged
unc0rr
parents: 593
diff changeset
   381
if Gear^.TriggerId <> 0 then TickTrigger(Gear^.TriggerId);
82
2f4f3236cccc - New fort
unc0rr
parents: 81
diff changeset
   382
if CurAmmoGear = Gear then CurAmmoGear:= nil;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   383
if FollowGear = Gear then FollowGear:= nil;
294
92a7ccd67bb9 Current hedgehog is on top of others in Z-order
unc0rr
parents: 293
diff changeset
   384
RemoveGearFromList(Gear);
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   385
Dispose(Gear)
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   386
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   387
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   388
function CheckNoDamage: boolean; // returns TRUE in case of no damaged hhs
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   389
var Gear: PGear;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   390
begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   391
CheckNoDamage:= true;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   392
Gear:= GearsList;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   393
while Gear <> nil do
867
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   394
	begin
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   395
	if Gear^.Kind = gtHedgehog then
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   396
		if Gear^.Damage <> 0 then
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   397
		begin
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   398
		CheckNoDamage:= false;
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   399
		uStats.HedgehogDamaged(Gear);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   400
867
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   401
		if Gear^.Health < Gear^.Damage then
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   402
			Gear^.Health:= 0
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   403
		else
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   404
			dec(Gear^.Health, Gear^.Damage);
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   405
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   406
		AddGear(hwRound(Gear^.X), hwRound(Gear^.Y) - cHHRadius - 12,
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   407
				gtHealthTag, Gear^.Damage, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog;
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   408
		RenderHealth(PHedgehog(Gear^.Hedgehog)^);
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   409
		RecountTeamHealth(PHedgehog(Gear^.Hedgehog)^.Team);
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   410
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   411
		Gear^.Damage:= 0
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   412
		end;
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   413
	Gear:= Gear^.NextGear
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
   414
	end;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   415
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   416
1054
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   417
procedure HealthMachine;
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   418
var Gear: PGear;
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   419
begin
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   420
Gear:= GearsList;
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   421
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   422
while Gear <> nil do
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   423
	begin
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   424
	if Gear^.Kind = gtHedgehog then
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   425
		Gear^.Damage:= min(cHealthDecrease, Gear^.Health - 1);
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   426
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   427
	Gear:= Gear^.NextGear
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   428
	end;
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   429
end;
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   430
522
ca089787f59d Tags with current damage
unc0rr
parents: 520
diff changeset
   431
procedure AddDamageTag(X, Y, Damage: LongWord; Gear: PGear);
ca089787f59d Tags with current damage
unc0rr
parents: 520
diff changeset
   432
begin
529
812682c1ab62 Option for alternative damage tags
unc0rr
parents: 522
diff changeset
   433
if cAltDamage then
812682c1ab62 Option for alternative damage tags
unc0rr
parents: 522
diff changeset
   434
   AddGear(X, Y, gtSmallDamage, Damage, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog;
522
ca089787f59d Tags with current damage
unc0rr
parents: 520
diff changeset
   435
end;
ca089787f59d Tags with current damage
unc0rr
parents: 520
diff changeset
   436
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   437
procedure ProcessGears;
614
0e04504bc140 - Fix some warnings
unc0rr
parents: 604
diff changeset
   438
const delay: LongWord = 0;
869
daddcd31ef34 - New statistics
unc0rr
parents: 868
diff changeset
   439
      step: (stDelay, stChDmg, stTurnReact,
1298
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   440
             stAfterDelay, stChWin, stWater, stChWin2, stHealth,
1055
9af540b23409 Water rises after 25 mins of round, health is decreased after 20 mins
unc0rr
parents: 1054
diff changeset
   441
             stSpawn, stNTurn) = stDelay;
1054
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   442
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   443
var Gear, t: PGear;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   444
begin
868
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 867
diff changeset
   445
PrvInactive:= AllInactive;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   446
AllInactive:= true;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   447
t:= GearsList;
1054
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   448
while t <> nil do
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   449
      begin
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   450
      Gear:= t;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   451
      t:= Gear^.NextGear;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   452
      if Gear^.Active then Gear^.doStep(Gear);
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   453
      end;
89
f9db56409a86 - Fix various bugs
unc0rr
parents: 83
diff changeset
   454
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   455
if AllInactive then
15
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
   456
   case step of
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
   457
        stDelay: begin
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
   458
                 if delay = 0 then
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
   459
                    delay:= cInactDelay
614
0e04504bc140 - Fix some warnings
unc0rr
parents: 604
diff changeset
   460
                 else
0e04504bc140 - Fix some warnings
unc0rr
parents: 604
diff changeset
   461
                    dec(delay);
0e04504bc140 - Fix some warnings
unc0rr
parents: 604
diff changeset
   462
0e04504bc140 - Fix some warnings
unc0rr
parents: 604
diff changeset
   463
                 if delay = 0 then
0e04504bc140 - Fix some warnings
unc0rr
parents: 604
diff changeset
   464
                    inc(step)
15
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
   465
                 end;
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
   466
        stChDmg: if CheckNoDamage then inc(step) else step:= stDelay;
814
7fb4417b7bc1 Start implementing better statistics implementation (does nothing yet)
unc0rr
parents: 809
diff changeset
   467
    stTurnReact: begin
1054
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   468
                 if (not bBetweenTurns) and (not isInMultiShoot) then
855
8842c71d16bf - Fix too long delay between shotgun and deagle shots
unc0rr
parents: 854
diff changeset
   469
                    begin
8842c71d16bf - Fix too long delay between shotgun and deagle shots
unc0rr
parents: 854
diff changeset
   470
                    uStats.TurnReaction;
8842c71d16bf - Fix too long delay between shotgun and deagle shots
unc0rr
parents: 854
diff changeset
   471
                    inc(step)
8842c71d16bf - Fix too long delay between shotgun and deagle shots
unc0rr
parents: 854
diff changeset
   472
                    end else
8842c71d16bf - Fix too long delay between shotgun and deagle shots
unc0rr
parents: 854
diff changeset
   473
                    inc(step, 2);
814
7fb4417b7bc1 Start implementing better statistics implementation (does nothing yet)
unc0rr
parents: 809
diff changeset
   474
                 end;
815
82ff416301bd Use sounds 'stupid' and 'missed'
unc0rr
parents: 814
diff changeset
   475
   stAfterDelay: begin
82ff416301bd Use sounds 'stupid' and 'missed'
unc0rr
parents: 814
diff changeset
   476
                 if delay = 0 then
82ff416301bd Use sounds 'stupid' and 'missed'
unc0rr
parents: 814
diff changeset
   477
                    delay:= cInactDelay
82ff416301bd Use sounds 'stupid' and 'missed'
unc0rr
parents: 814
diff changeset
   478
                 else
82ff416301bd Use sounds 'stupid' and 'missed'
unc0rr
parents: 814
diff changeset
   479
                    dec(delay);
82ff416301bd Use sounds 'stupid' and 'missed'
unc0rr
parents: 814
diff changeset
   480
82ff416301bd Use sounds 'stupid' and 'missed'
unc0rr
parents: 814
diff changeset
   481
                 if delay = 0 then
82ff416301bd Use sounds 'stupid' and 'missed'
unc0rr
parents: 814
diff changeset
   482
                    inc(step)
82ff416301bd Use sounds 'stupid' and 'missed'
unc0rr
parents: 814
diff changeset
   483
                 end;
1298
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   484
        stChWin: begin
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   485
                 CheckForWin;
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   486
                 inc(step)
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   487
                 end;
1055
9af540b23409 Water rises after 25 mins of round, health is decreased after 20 mins
unc0rr
parents: 1054
diff changeset
   488
        stWater: begin
1058
c53c5c4e7b48 - Proper turns counting, split SwitchHedgehog into two functions
unc0rr
parents: 1056
diff changeset
   489
                 if TotalRounds = 17 then bWaterRising:= true;
1055
9af540b23409 Water rises after 25 mins of round, health is decreased after 20 mins
unc0rr
parents: 1054
diff changeset
   490
1298
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   491
                 if bWaterRising then
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   492
                    AddGear(0, 0, gtWaterUp, 0, _0, _0, 0);
1055
9af540b23409 Water rises after 25 mins of round, health is decreased after 20 mins
unc0rr
parents: 1054
diff changeset
   493
1298
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   494
                 inc(step)
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   495
                 end;
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   496
       stChWin2: begin
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   497
                 CheckForWin;
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   498
                 inc(step)
1055
9af540b23409 Water rises after 25 mins of round, health is decreased after 20 mins
unc0rr
parents: 1054
diff changeset
   499
                 end;
9af540b23409 Water rises after 25 mins of round, health is decreased after 20 mins
unc0rr
parents: 1054
diff changeset
   500
       stHealth: begin
1063
a86328091611 Add message for sudden death
unc0rr
parents: 1061
diff changeset
   501
                 if (TotalRounds = 15) and (cHealthDecrease = 0) then
a86328091611 Add message for sudden death
unc0rr
parents: 1061
diff changeset
   502
                    begin
a86328091611 Add message for sudden death
unc0rr
parents: 1061
diff changeset
   503
                    cHealthDecrease:= 5;
a86328091611 Add message for sudden death
unc0rr
parents: 1061
diff changeset
   504
                    AddCaption(trmsg[sidSuddenDeath], $FFFFFF, capgrpGameState)
a86328091611 Add message for sudden death
unc0rr
parents: 1061
diff changeset
   505
                    end;
1055
9af540b23409 Water rises after 25 mins of round, health is decreased after 20 mins
unc0rr
parents: 1054
diff changeset
   506
9af540b23409 Water rises after 25 mins of round, health is decreased after 20 mins
unc0rr
parents: 1054
diff changeset
   507
                 if (cHealthDecrease = 0)
1054
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   508
                   or bBetweenTurns
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   509
                   or isInMultiShoot
1058
c53c5c4e7b48 - Proper turns counting, split SwitchHedgehog into two functions
unc0rr
parents: 1056
diff changeset
   510
                   or (TotalRounds = 0) then inc(step)
1054
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   511
                    else begin
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   512
                    bBetweenTurns:= true;
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   513
                    HealthMachine;
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   514
                    step:= stChDmg
1055
9af540b23409 Water rises after 25 mins of round, health is decreased after 20 mins
unc0rr
parents: 1054
diff changeset
   515
                    end
9af540b23409 Water rises after 25 mins of round, health is decreased after 20 mins
unc0rr
parents: 1054
diff changeset
   516
                 end;
15
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
   517
        stSpawn: begin
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
   518
                 if not isInMultiShoot then SpawnBoxOfSmth;
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
   519
                 inc(step)
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
   520
                 end;
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
   521
        stNTurn: begin
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
   522
                 if isInMultiShoot then isInMultiShoot:= false
307
96b428ac11f2 More statistics
unc0rr
parents: 306
diff changeset
   523
                    else begin
1298
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   524
                    ParseCommand('/nextturn', true);
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   525
                    SwitchHedgehog;
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   526
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   527
                    inc(step);
18fdc25fe65d - Fix water rise
unc0rr
parents: 1295
diff changeset
   528
1058
c53c5c4e7b48 - Proper turns counting, split SwitchHedgehog into two functions
unc0rr
parents: 1056
diff changeset
   529
                    AfterSwitchHedgehog;
1054
80225c6af656 - Prepare for sudden death implementation
unc0rr
parents: 1049
diff changeset
   530
                    bBetweenTurns:= false
307
96b428ac11f2 More statistics
unc0rr
parents: 306
diff changeset
   531
                    end;
15
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
   532
                 step:= Low(step)
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
   533
                 end;
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
   534
        end;
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
   535
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   536
if TurnTimeLeft > 0 then
870
dd418d9c18c5 Use more sounds
unc0rr
parents: 869
diff changeset
   537
		if CurrentHedgehog^.Gear <> nil then
dd418d9c18c5 Use more sounds
unc0rr
parents: 869
diff changeset
   538
			if ((CurrentHedgehog^.Gear^.State and gstAttacking) = 0)
dd418d9c18c5 Use more sounds
unc0rr
parents: 869
diff changeset
   539
				and not isInMultiShoot then
dd418d9c18c5 Use more sounds
unc0rr
parents: 869
diff changeset
   540
				begin
dd418d9c18c5 Use more sounds
unc0rr
parents: 869
diff changeset
   541
				if (TurnTimeLeft = 5000)
dd418d9c18c5 Use more sounds
unc0rr
parents: 869
diff changeset
   542
					and (CurrentHedgehog^.Gear <> nil)
dd418d9c18c5 Use more sounds
unc0rr
parents: 869
diff changeset
   543
					and ((CurrentHedgehog^.Gear^.State and gstAttacked) = 0) then PlaySound(sndHurry, false);
dd418d9c18c5 Use more sounds
unc0rr
parents: 869
diff changeset
   544
				dec(TurnTimeLeft)
dd418d9c18c5 Use more sounds
unc0rr
parents: 869
diff changeset
   545
				end;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   546
651
3710058bbd53 Don't spam traffic in network game
unc0rr
parents: 649
diff changeset
   547
if (not CurrentTeam^.ExtDriven) and
917
e59614bffc3f Fix handling '/skip' command during net game
unc0rr
parents: 915
diff changeset
   548
	((GameTicks and $FFFF) = $FFFF) then
e59614bffc3f Fix handling '/skip' command during net game
unc0rr
parents: 915
diff changeset
   549
	begin
e59614bffc3f Fix handling '/skip' command during net game
unc0rr
parents: 915
diff changeset
   550
	SendIPCTimeInc;
e59614bffc3f Fix handling '/skip' command during net game
unc0rr
parents: 915
diff changeset
   551
	inc(hiTicks) // we do not recieve a message for this
e59614bffc3f Fix handling '/skip' command during net game
unc0rr
parents: 915
diff changeset
   552
	end;
656
6d6d9d7b1054 Fix network game bug caused by recent protocol changes
unc0rr
parents: 651
diff changeset
   553
515
270f10276d2e - Remove deprecated code
unc0rr
parents: 511
diff changeset
   554
inc(GameTicks)
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   555
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   556
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   557
procedure SetAllToActive;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   558
var t: PGear;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   559
begin
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   560
AllInactive:= false;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   561
t:= GearsList;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   562
while t <> nil do
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   563
      begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   564
      t^.Active:= true;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   565
      t:= t^.NextGear
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   566
      end
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   567
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   568
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   569
procedure SetAllHHToActive;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   570
var t: PGear;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   571
begin
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   572
AllInactive:= false;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   573
t:= GearsList;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   574
while t <> nil do
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   575
      begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   576
      if t^.Kind = gtHedgehog then t^.Active:= true;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   577
      t:= t^.NextGear
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   578
      end
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   579
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   580
841
0700e3d3474d Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents: 840
diff changeset
   581
procedure DrawHH(Gear: PGear);
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
   582
var t: LongInt;
822
2ae8fd8ef804 Use 'rope gun' sprite
unc0rr
parents: 821
diff changeset
   583
	amt: TAmmoType;
862
7c82903753a4 Fix hedgehog-on-rope animation
unc0rr
parents: 861
diff changeset
   584
	hx, hy, m: LongInt;
7c82903753a4 Fix hedgehog-on-rope animation
unc0rr
parents: 861
diff changeset
   585
	aAngle, dAngle: real;
1253
79f47495b346 Draw hat when hedgehog is aiming
unc0rr
parents: 1251
diff changeset
   586
	defaultPos, HatVisible: boolean;
292
0ca921ca7557 Hedgehogs names are drawn where the hedgehogs are
unc0rr
parents: 283
diff changeset
   587
begin
868
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 867
diff changeset
   588
if (Gear^.State and gstHHDeath) <> 0 then
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 867
diff changeset
   589
	begin
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 867
diff changeset
   590
	DrawSprite(sprHHDeath, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 26 + WorldDy, Gear^.Pos);
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 867
diff changeset
   591
	exit
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 867
diff changeset
   592
	end;
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   593
824
e632cc7caf3a - Use hedgehog jumping sprite
unc0rr
parents: 823
diff changeset
   594
defaultPos:= true;
1253
79f47495b346 Draw hat when hedgehog is aiming
unc0rr
parents: 1251
diff changeset
   595
HatVisible:= false;
847
66970c0ed3aa Use blowtorch sprites
unc0rr
parents: 845
diff changeset
   596
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   597
if (Gear^.State and gstDrowning) <> 0 then
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   598
	begin
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   599
	DrawHedgehog(hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   600
			hwSign(Gear^.dX),
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   601
			1,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   602
			7,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   603
			0);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   604
	defaultPos:= false
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   605
	end else
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   606
1011
4fe2c4c57d10 Winners clan hedgehogs smiling with big smile
unc0rr
parents: 1010
diff changeset
   607
if (Gear^.State and gstWinner) <> 0 then
4fe2c4c57d10 Winners clan hedgehogs smiling with big smile
unc0rr
parents: 1010
diff changeset
   608
	begin
4fe2c4c57d10 Winners clan hedgehogs smiling with big smile
unc0rr
parents: 1010
diff changeset
   609
	DrawHedgehog(hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy,
4fe2c4c57d10 Winners clan hedgehogs smiling with big smile
unc0rr
parents: 1010
diff changeset
   610
			hwSign(Gear^.dX),
4fe2c4c57d10 Winners clan hedgehogs smiling with big smile
unc0rr
parents: 1010
diff changeset
   611
			2,
4fe2c4c57d10 Winners clan hedgehogs smiling with big smile
unc0rr
parents: 1010
diff changeset
   612
			0,
4fe2c4c57d10 Winners clan hedgehogs smiling with big smile
unc0rr
parents: 1010
diff changeset
   613
			0);
4fe2c4c57d10 Winners clan hedgehogs smiling with big smile
unc0rr
parents: 1010
diff changeset
   614
	defaultPos:= false
4fe2c4c57d10 Winners clan hedgehogs smiling with big smile
unc0rr
parents: 1010
diff changeset
   615
	end else
4fe2c4c57d10 Winners clan hedgehogs smiling with big smile
unc0rr
parents: 1010
diff changeset
   616
821
e6c0408b54ed Use 'regular standing' and 'rope swing' hedgehog sprites
unc0rr
parents: 815
diff changeset
   617
if (Gear^.State and gstHHDriven) <> 0 then
966
664ae90b5b0c Fix hedgehog jump animation after turn end
unc0rr
parents: 959
diff changeset
   618
	begin
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   619
	hx:= hwRound(Gear^.X) + 1 + 8 * hwSign(Gear^.dX) + WorldDx;
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   620
	hy:= hwRound(Gear^.Y) - 2 + WorldDy;
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   621
	aangle:= Gear^.Angle * 180 / cMaxAngle - 90;
874
964c0d5b3604 - Fix warning
unc0rr
parents: 870
diff changeset
   622
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   623
	if CurAmmoGear <> nil then
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   624
	begin
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   625
		case CurAmmoGear^.Kind of
1294
50198e5c7f02 - Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents: 1286
diff changeset
   626
			gtShotgunShot: begin
50198e5c7f02 - Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents: 1286
diff changeset
   627
					if (CurAmmoGear^.State and gstAnimation <> 0) then
50198e5c7f02 - Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents: 1286
diff changeset
   628
						DrawRotated(sprShotgun, hx, hy, hwSign(Gear^.dX), aangle)
50198e5c7f02 - Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents: 1286
diff changeset
   629
					else
50198e5c7f02 - Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents: 1286
diff changeset
   630
						DrawRotated(sprHandShotgun, hx, hy, hwSign(Gear^.dX), aangle);
50198e5c7f02 - Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents: 1286
diff changeset
   631
					HatVisible:= true
50198e5c7f02 - Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents: 1286
diff changeset
   632
				end;
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   633
			gtDEagleShot: DrawRotated(sprDEagle, hx, hy, hwSign(Gear^.dX), aangle);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   634
			gtRope: begin
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   635
				if Gear^.X < CurAmmoGear^.X then
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   636
					begin
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   637
					dAngle:= 0;
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   638
					m:= 1
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   639
					end else
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   640
					begin
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   641
					dAngle:= 180;
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   642
					m:= -1
966
664ae90b5b0c Fix hedgehog jump animation after turn end
unc0rr
parents: 959
diff changeset
   643
					end;
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   644
				DrawHedgehog(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   645
						m,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   646
						1,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   647
						0,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   648
						DxDy2Angle(CurAmmoGear^.dY, CurAmmoGear^.dX) + dAngle);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   649
				defaultPos:= false
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   650
				end;
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   651
			gtBlowTorch: begin
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   652
				DrawRotated(sprBlowTorch, hx, hy, hwSign(Gear^.dX), aangle);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   653
				DrawHedgehog(hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   654
						hwSign(Gear^.dX),
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   655
						3,
1113
d63a3567a6fe Fix hedgehog animation when use blowtorch
unc0rr
parents: 1110
diff changeset
   656
						PHedgehog(Gear^.Hedgehog)^.visStepPos div 2,
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   657
						0);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   658
				defaultPos:= false
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   659
				end;
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   660
			gtShover: DrawRotated(sprHandBaseball, hx, hy, hwSign(Gear^.dX), aangle + 180);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   661
			gtFirePunch: begin
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   662
				DrawHedgehog(hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   663
						hwSign(Gear^.dX),
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   664
						1,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   665
						4,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   666
						0);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   667
				defaultPos:= false
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   668
				end;
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   669
			gtPickHammer,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   670
			gtTeleport: defaultPos:= false;
1010
583667e81d21 Whip animation
unc0rr
parents: 1009
diff changeset
   671
			gtWhip: begin
583667e81d21 Whip animation
unc0rr
parents: 1009
diff changeset
   672
				DrawRotatedF(sprWhip,
583667e81d21 Whip animation
unc0rr
parents: 1009
diff changeset
   673
						hwRound(Gear^.X) + 1 + WorldDx,
583667e81d21 Whip animation
unc0rr
parents: 1009
diff changeset
   674
						hwRound(Gear^.Y) - 3 + WorldDy,
583667e81d21 Whip animation
unc0rr
parents: 1009
diff changeset
   675
						1,
583667e81d21 Whip animation
unc0rr
parents: 1009
diff changeset
   676
						hwSign(Gear^.dX),
583667e81d21 Whip animation
unc0rr
parents: 1009
diff changeset
   677
						0);
583667e81d21 Whip animation
unc0rr
parents: 1009
diff changeset
   678
				defaultPos:= false
583667e81d21 Whip animation
unc0rr
parents: 1009
diff changeset
   679
				end;
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   680
			gtKamikaze: begin
1286
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   681
				if CurAmmoGear^.Pos = 0 then
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   682
					DrawHedgehog(hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy,
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   683
							hwSign(Gear^.dX),
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   684
							1,
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   685
							6,
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   686
							0)
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   687
				else
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   688
					DrawRotatedF(sprKamikaze,
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   689
							hwRound(Gear^.X) + WorldDx,
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   690
							hwRound(Gear^.Y) + WorldDy,
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   691
							CurAmmoGear^.Pos - 1,
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   692
							1,
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   693
							DxDy2Angle(Gear^.dY, Gear^.dX));
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   694
1286
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   695
				defaultPos:= false
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   696
				end;
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   697
			gtSeduction: begin
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   698
				if CurAmmoGear^.Pos >= 6 then
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   699
					DrawHedgehog(hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy,
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   700
							hwSign(Gear^.dX),
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   701
							2,
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   702
							2,
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   703
							0)
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   704
				else
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   705
					begin
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   706
					DrawRotatedF(sprDress,
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   707
							hwRound(Gear^.X) + WorldDx,
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   708
							hwRound(Gear^.Y) + WorldDy,
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   709
							CurAmmoGear^.Pos,
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   710
							hwSign(Gear^.dX),
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   711
							0);
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   712
					DrawSprite(sprCensored, hwRound(Gear^.X) - 32 + WorldDx, hwRound(Gear^.Y) - 20 + WorldDy, 0)
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   713
					end;
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   714
				defaultPos:= false
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   715
				end;
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   716
		end;
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   717
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   718
		case CurAmmoGear^.Kind of
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   719
			gtShotgunShot,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   720
			gtDEagleShot,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   721
			gtShover: begin
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   722
				DrawHedgehog(hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   723
						hwSign(Gear^.dX),
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   724
						0,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   725
						4,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   726
						0);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   727
				defaultPos:= false
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   728
			end
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   729
		end
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   730
	end else
876
d5b6e0ae5755 Desert Eagle and Shotgun shot animations
unc0rr
parents: 874
diff changeset
   731
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   732
	if ((Gear^.State and gstHHJumping) <> 0) then
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   733
	begin
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   734
	if ((Gear^.State and gstHHHJump) <> 0) then
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   735
		DrawHedgehog(hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   736
			- hwSign(Gear^.dX),
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   737
			1,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   738
			1,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   739
			0)
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   740
		else
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   741
		DrawHedgehog(hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   742
			hwSign(Gear^.dX),
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   743
			1,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   744
			1,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   745
			0);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   746
	defaultPos:= false
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   747
	end else
874
964c0d5b3604 - Fix warning
unc0rr
parents: 870
diff changeset
   748
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   749
	if (Gear^.Message and (gm_Left or gm_Right) <> 0) then
824
e632cc7caf3a - Use hedgehog jumping sprite
unc0rr
parents: 823
diff changeset
   750
		begin
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   751
		DrawHedgehog(hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   752
			hwSign(Gear^.dX),
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   753
			0,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   754
			PHedgehog(Gear^.Hedgehog)^.visStepPos div 2,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   755
			0);
1257
40d37fefdbb4 Hedgehog doesn't take off the hat when walking
unc0rr
parents: 1255
diff changeset
   756
		defaultPos:= false;
40d37fefdbb4 Hedgehog doesn't take off the hat when walking
unc0rr
parents: 1255
diff changeset
   757
		HatVisible:= true
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   758
		end
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   759
	else
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   760
1033
622c5de38d72 Start implementing waves
unc0rr
parents: 1020
diff changeset
   761
	if ((Gear^.State and gstAnimation) <> 0) then
622c5de38d72 Start implementing waves
unc0rr
parents: 1020
diff changeset
   762
		begin
1034
05f003ad3caa Further work on taunts
unc0rr
parents: 1033
diff changeset
   763
		DrawRotatedF(Wavez[TWave(Gear^.Tag)].Sprite,
1033
622c5de38d72 Start implementing waves
unc0rr
parents: 1020
diff changeset
   764
				hwRound(Gear^.X) + 1 + WorldDx,
622c5de38d72 Start implementing waves
unc0rr
parents: 1020
diff changeset
   765
				hwRound(Gear^.Y) - 3 + WorldDy,
622c5de38d72 Start implementing waves
unc0rr
parents: 1020
diff changeset
   766
				Gear^.Pos,
622c5de38d72 Start implementing waves
unc0rr
parents: 1020
diff changeset
   767
				hwSign(Gear^.dX),
622c5de38d72 Start implementing waves
unc0rr
parents: 1020
diff changeset
   768
				0.0);
622c5de38d72 Start implementing waves
unc0rr
parents: 1020
diff changeset
   769
		defaultPos:= false
622c5de38d72 Start implementing waves
unc0rr
parents: 1020
diff changeset
   770
		end
622c5de38d72 Start implementing waves
unc0rr
parents: 1020
diff changeset
   771
	else
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   772
	if ((Gear^.State and gstAttacked) = 0) then
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   773
	begin
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   774
		amt:= CurrentHedgehog^.Ammo^[CurrentHedgehog^.CurSlot, CurrentHedgehog^.CurAmmo].AmmoType;
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   775
		case amt of
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   776
			amBazooka,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   777
			amMortar: DrawRotated(sprHandBazooka, hx, hy, hwSign(Gear^.dX), aangle);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   778
			amRope: DrawRotated(sprHandRope, hx, hy, hwSign(Gear^.dX), aangle);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   779
			amShotgun: DrawRotated(sprHandShotgun, hx, hy, hwSign(Gear^.dX), aangle);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   780
			amDEagle: DrawRotated(sprHandDEagle, hx, hy, hwSign(Gear^.dX), aangle);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   781
			amBlowTorch: DrawRotated(sprHandBlowTorch, hx, hy, hwSign(Gear^.dX), aangle);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   782
		end;
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   783
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   784
		case amt of
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   785
			amAirAttack,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   786
			amMineStrike: DrawRotated(sprHandAirAttack, hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) + WorldDy, hwSign(Gear^.dX), 0);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   787
			amPickHammer: DrawHedgehog(hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   788
						hwSign(Gear^.dX),
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   789
						1,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   790
						2,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   791
						0);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   792
			amBlowTorch: DrawHedgehog(hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   793
						hwSign(Gear^.dX),
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   794
						1,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   795
						3,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   796
						0);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   797
			amTeleport: DrawRotatedF(sprTeleport, hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy, 0, hwSign(Gear^.dX), 0);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   798
			amKamikaze: DrawHedgehog(hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   799
						hwSign(Gear^.dX),
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   800
						1,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   801
						5,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   802
						0);
1221
51e3f3cfdca5 Start seduction weapon implementation
unc0rr
parents: 1207
diff changeset
   803
			amWhip: DrawRotatedF(sprWhip,
1010
583667e81d21 Whip animation
unc0rr
parents: 1009
diff changeset
   804
						hwRound(Gear^.X) + 1 + WorldDx,
583667e81d21 Whip animation
unc0rr
parents: 1009
diff changeset
   805
						hwRound(Gear^.Y) - 3 + WorldDy,
583667e81d21 Whip animation
unc0rr
parents: 1009
diff changeset
   806
						0,
583667e81d21 Whip animation
unc0rr
parents: 1009
diff changeset
   807
						hwSign(Gear^.dX),
583667e81d21 Whip animation
unc0rr
parents: 1009
diff changeset
   808
						0);
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   809
		else
822
2ae8fd8ef804 Use 'rope gun' sprite
unc0rr
parents: 821
diff changeset
   810
			DrawHedgehog(hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy,
2ae8fd8ef804 Use 'rope gun' sprite
unc0rr
parents: 821
diff changeset
   811
				hwSign(Gear^.dX),
2ae8fd8ef804 Use 'rope gun' sprite
unc0rr
parents: 821
diff changeset
   812
				0,
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   813
				4,
822
2ae8fd8ef804 Use 'rope gun' sprite
unc0rr
parents: 821
diff changeset
   814
				0);
1253
79f47495b346 Draw hat when hedgehog is aiming
unc0rr
parents: 1251
diff changeset
   815
			
79f47495b346 Draw hat when hedgehog is aiming
unc0rr
parents: 1251
diff changeset
   816
			HatVisible:= true;
79f47495b346 Draw hat when hedgehog is aiming
unc0rr
parents: 1251
diff changeset
   817
			with PHedgehog(Gear^.Hedgehog)^ do
1294
50198e5c7f02 - Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents: 1286
diff changeset
   818
				if (HatTex <> nil)
50198e5c7f02 - Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents: 1286
diff changeset
   819
				and (HatVisibility > 0) then
1253
79f47495b346 Draw hat when hedgehog is aiming
unc0rr
parents: 1251
diff changeset
   820
					DrawTextureF(HatTex,
79f47495b346 Draw hat when hedgehog is aiming
unc0rr
parents: 1251
diff changeset
   821
						HatVisibility,
79f47495b346 Draw hat when hedgehog is aiming
unc0rr
parents: 1251
diff changeset
   822
						hwRound(Gear^.X) + 1 + WorldDx,
79f47495b346 Draw hat when hedgehog is aiming
unc0rr
parents: 1251
diff changeset
   823
						hwRound(Gear^.Y) - 8 + WorldDy,
79f47495b346 Draw hat when hedgehog is aiming
unc0rr
parents: 1251
diff changeset
   824
						0,
79f47495b346 Draw hat when hedgehog is aiming
unc0rr
parents: 1251
diff changeset
   825
						hwSign(Gear^.dX),
79f47495b346 Draw hat when hedgehog is aiming
unc0rr
parents: 1251
diff changeset
   826
						32);
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   827
		end;
966
664ae90b5b0c Fix hedgehog jump animation after turn end
unc0rr
parents: 959
diff changeset
   828
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   829
		case amt of
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   830
			amBaseballBat: DrawRotated(sprHandBaseball,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   831
					hwRound(Gear^.X) + 1 - 4 * hwSign(Gear^.dX) + WorldDx,
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   832
					hwRound(Gear^.Y) + 6 + WorldDy, hwSign(Gear^.dX), aangle);
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   833
		end;
966
664ae90b5b0c Fix hedgehog jump animation after turn end
unc0rr
parents: 959
diff changeset
   834
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   835
		defaultPos:= false
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   836
	end
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 1000
diff changeset
   837
end else // not gstHHDriven
1012
36b5cc8264e8 Damaged hedgehog animation
unc0rr
parents: 1011
diff changeset
   838
	begin
1014
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   839
	if (Gear^.Damage > 0)
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   840
	and (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) > _0_003) then
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   841
		begin
1012
36b5cc8264e8 Damaged hedgehog animation
unc0rr
parents: 1011
diff changeset
   842
		DrawHedgehog(hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy,
36b5cc8264e8 Damaged hedgehog animation
unc0rr
parents: 1011
diff changeset
   843
			hwSign(Gear^.dX),
1014
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   844
			2,
1012
36b5cc8264e8 Damaged hedgehog animation
unc0rr
parents: 1011
diff changeset
   845
			1,
1014
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   846
			Gear^.DirAngle);
1012
36b5cc8264e8 Damaged hedgehog animation
unc0rr
parents: 1011
diff changeset
   847
		defaultPos:= false
1020
2cbffbc0dc70 Fix bad sprite when you jump and get hit
unc0rr
parents: 1014
diff changeset
   848
		end else
1014
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   849
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   850
	if ((Gear^.State and gstHHJumping) <> 0) then
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   851
		begin
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   852
		if ((Gear^.State and gstHHHJump) <> 0) then
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   853
			DrawHedgehog(hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy,
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   854
				- hwSign(Gear^.dX),
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   855
				1,
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   856
				1,
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   857
				0)
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   858
			else
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   859
			DrawHedgehog(hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy,
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   860
				hwSign(Gear^.dX),
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   861
				1,
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   862
				1,
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   863
				0);
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   864
			defaultPos:= false
3c7d4e7ccdff - Fix firepunch sprite direction when use in high jump
unc0rr
parents: 1013
diff changeset
   865
		end;
1012
36b5cc8264e8 Damaged hedgehog animation
unc0rr
parents: 1011
diff changeset
   866
	end;
834
5687fa57a6c1 - Use baseball-in-hand sprite
unc0rr
parents: 831
diff changeset
   867
1251
1f545d9a10ca Hat 'wearing' animation
unc0rr
parents: 1242
diff changeset
   868
with PHedgehog(Gear^.Hedgehog)^ do
970
1bd9a4eafbc3 - Quick hack for hats
unc0rr
parents: 966
diff changeset
   869
	begin
1251
1f545d9a10ca Hat 'wearing' animation
unc0rr
parents: 1242
diff changeset
   870
	if defaultPos then
1f545d9a10ca Hat 'wearing' animation
unc0rr
parents: 1242
diff changeset
   871
		begin
1f545d9a10ca Hat 'wearing' animation
unc0rr
parents: 1242
diff changeset
   872
		DrawRotatedF(sprHHIdle,
1f545d9a10ca Hat 'wearing' animation
unc0rr
parents: 1242
diff changeset
   873
			hwRound(Gear^.X) + 1 + WorldDx,
1f545d9a10ca Hat 'wearing' animation
unc0rr
parents: 1242
diff changeset
   874
			hwRound(Gear^.Y) - 3 + WorldDy,
1f545d9a10ca Hat 'wearing' animation
unc0rr
parents: 1242
diff changeset
   875
			(RealTicks div 128 + Gear^.Pos) mod 19,
1f545d9a10ca Hat 'wearing' animation
unc0rr
parents: 1242
diff changeset
   876
			hwSign(Gear^.dX),
1f545d9a10ca Hat 'wearing' animation
unc0rr
parents: 1242
diff changeset
   877
			0);
1253
79f47495b346 Draw hat when hedgehog is aiming
unc0rr
parents: 1251
diff changeset
   878
		HatVisible:= true;
79f47495b346 Draw hat when hedgehog is aiming
unc0rr
parents: 1251
diff changeset
   879
		end;
79f47495b346 Draw hat when hedgehog is aiming
unc0rr
parents: 1251
diff changeset
   880
79f47495b346 Draw hat when hedgehog is aiming
unc0rr
parents: 1251
diff changeset
   881
	if HatVisible then
1251
1f545d9a10ca Hat 'wearing' animation
unc0rr
parents: 1242
diff changeset
   882
		if HatVisibility < 1.0 then
1254
3ffaf75572dd Speed up hat
unc0rr
parents: 1253
diff changeset
   883
			HatVisibility:= HatVisibility + 0.2
1253
79f47495b346 Draw hat when hedgehog is aiming
unc0rr
parents: 1251
diff changeset
   884
		else
1251
1f545d9a10ca Hat 'wearing' animation
unc0rr
parents: 1242
diff changeset
   885
	else
1f545d9a10ca Hat 'wearing' animation
unc0rr
parents: 1242
diff changeset
   886
		if HatVisibility > 0.0 then
1254
3ffaf75572dd Speed up hat
unc0rr
parents: 1253
diff changeset
   887
			HatVisibility:= HatVisibility - 0.2;
1253
79f47495b346 Draw hat when hedgehog is aiming
unc0rr
parents: 1251
diff changeset
   888
	
1294
50198e5c7f02 - Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents: 1286
diff changeset
   889
	if (HatTex <> nil)
50198e5c7f02 - Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents: 1286
diff changeset
   890
	and (HatVisibility > 0) then
1255
unc0rr
parents: 1254
diff changeset
   891
		if DefaultPos then
unc0rr
parents: 1254
diff changeset
   892
			DrawTextureF(HatTex,
unc0rr
parents: 1254
diff changeset
   893
				HatVisibility,
unc0rr
parents: 1254
diff changeset
   894
				hwRound(Gear^.X) + 1 + WorldDx,
unc0rr
parents: 1254
diff changeset
   895
				hwRound(Gear^.Y) - 8 + WorldDy,
unc0rr
parents: 1254
diff changeset
   896
				(RealTicks div 128 + Gear^.Pos) mod 19,
unc0rr
parents: 1254
diff changeset
   897
				hwSign(Gear^.dX),
unc0rr
parents: 1254
diff changeset
   898
				32)
unc0rr
parents: 1254
diff changeset
   899
		else
unc0rr
parents: 1254
diff changeset
   900
			DrawTextureF(HatTex,
unc0rr
parents: 1254
diff changeset
   901
				HatVisibility,
unc0rr
parents: 1254
diff changeset
   902
				hwRound(Gear^.X) + 1 + WorldDx,
unc0rr
parents: 1254
diff changeset
   903
				hwRound(Gear^.Y) - 8 + WorldDy,
unc0rr
parents: 1254
diff changeset
   904
				0,
unc0rr
parents: 1254
diff changeset
   905
				hwSign(Gear^.dX),
unc0rr
parents: 1254
diff changeset
   906
				32);
970
1bd9a4eafbc3 - Quick hack for hats
unc0rr
parents: 966
diff changeset
   907
	end;
292
0ca921ca7557 Hedgehogs names are drawn where the hedgehogs are
unc0rr
parents: 283
diff changeset
   908
1251
1f545d9a10ca Hat 'wearing' animation
unc0rr
parents: 1242
diff changeset
   909
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   910
with PHedgehog(Gear^.Hedgehog)^ do
994
ea415d03968c - Bots can use mortar
unc0rr
parents: 987
diff changeset
   911
	begin
1011
4fe2c4c57d10 Winners clan hedgehogs smiling with big smile
unc0rr
parents: 1010
diff changeset
   912
	if ((Gear^.State and not gstWinner) = 0)
994
ea415d03968c - Bots can use mortar
unc0rr
parents: 987
diff changeset
   913
		or (bShowFinger and ((Gear^.State and gstHHDriven) <> 0)) then
958
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   914
	begin
976
368a8926632b Draw tags a bit higher due to hats introduction
unc0rr
parents: 970
diff changeset
   915
	t:= hwRound(Gear^.Y) - cHHRadius - 12 + WorldDy;
958
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   916
	if (cTagsMask and 1) <> 0 then
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   917
		begin
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   918
		dec(t, HealthTagTex^.h + 2);
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   919
		DrawCentered(hwRound(Gear^.X) + WorldDx, t, HealthTagTex)
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   920
		end;
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   921
	if (cTagsMask and 2) <> 0 then
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   922
		begin
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   923
		dec(t, NameTagTex^.h + 2);
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   924
		DrawCentered(hwRound(Gear^.X) + WorldDx, t, NameTagTex)
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   925
		end;
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   926
	if (cTagsMask and 4) <> 0 then
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   927
		begin
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   928
		dec(t, Team^.NameTagTex^.h + 2);
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   929
		DrawCentered(hwRound(Gear^.X) + WorldDx, t, Team^.NameTagTex)
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   930
		end
994
ea415d03968c - Bots can use mortar
unc0rr
parents: 987
diff changeset
   931
	end;
ea415d03968c - Bots can use mortar
unc0rr
parents: 987
diff changeset
   932
	if (Gear^.State and gstHHDriven) <> 0 then // Current hedgehog
958
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   933
		begin
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   934
		if bShowFinger and ((Gear^.State and gstHHDriven) <> 0) then
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   935
			DrawSprite(sprFinger, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 64 + WorldDy,
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   936
						GameTicks div 32 mod 16);
821
e6c0408b54ed Use 'regular standing' and 'rope swing' hedgehog sprites
unc0rr
parents: 815
diff changeset
   937
958
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   938
		if (Gear^.State and gstDrowning) = 0 then
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   939
			if (Gear^.State and gstHHThinking) <> 0 then
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   940
				DrawSprite(sprQuestion, hwRound(Gear^.X) - 10 + WorldDx, hwRound(Gear^.Y) - cHHRadius - 34 + WorldDy, 0)
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   941
				else
1033
622c5de38d72 Start implementing waves
unc0rr
parents: 1020
diff changeset
   942
				if ShowCrosshair and ((Gear^.State and (gstAttacked or gstAnimation)) = 0) then
958
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   943
					begin
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   944
					if ((Gear^.State and gstHHHJump) <> 0) then m:= -1 else m:= 1;
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   945
					DrawRotatedTex(Team^.CrosshairTex,
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   946
							12, 12,
1283
a1e99d1e4fd3 Enable back the ability to see chosen team color in team widget
unc0rr
parents: 1279
diff changeset
   947
							Round(hwRound(Gear^.X) + hwSign(Gear^.dX) * m * Sin(Gear^.Angle*pi/cMaxAngle) * 80) + WorldDx,
a1e99d1e4fd3 Enable back the ability to see chosen team color in team widget
unc0rr
parents: 1279
diff changeset
   948
							Round(hwRound(Gear^.Y) - Cos(Gear^.Angle*pi/cMaxAngle) * 80) + WorldDy, 0,
958
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   949
							hwSign(Gear^.dX) * (Gear^.Angle * 180.0) / cMaxAngle)
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
   950
					end
994
ea415d03968c - Bots can use mortar
unc0rr
parents: 987
diff changeset
   951
			end
ea415d03968c - Bots can use mortar
unc0rr
parents: 987
diff changeset
   952
	end
292
0ca921ca7557 Hedgehogs names are drawn where the hedgehogs are
unc0rr
parents: 283
diff changeset
   953
end;
0ca921ca7557 Hedgehogs names are drawn where the hedgehogs are
unc0rr
parents: 283
diff changeset
   954
956
19003f7fc174 Get rid of unused Surface parameter
unc0rr
parents: 955
diff changeset
   955
procedure DrawGears;
853
0b4a23795530 Teleport animation
unc0rr
parents: 848
diff changeset
   956
var Gear, HHGear: PGear;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   957
    i: Longword;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
   958
    roplen: LongInt;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   959
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
   960
    procedure DrawRopeLine(X1, Y1, X2, Y2: LongInt);
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
   961
    var  eX, eY, dX, dY: LongInt;
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
   962
         i, sX, sY, x, y, d: LongInt;
366
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   963
         b: boolean;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   964
    begin
37
2b7f2a43b999 - Properly get seed in net game
unc0rr
parents: 35
diff changeset
   965
    if (X1 = X2) and (Y1 = Y2) then
2b7f2a43b999 - Properly get seed in net game
unc0rr
parents: 35
diff changeset
   966
       begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
   967
       OutError('WARNING: zero length rope line!', false);
37
2b7f2a43b999 - Properly get seed in net game
unc0rr
parents: 35
diff changeset
   968
       exit
2b7f2a43b999 - Properly get seed in net game
unc0rr
parents: 35
diff changeset
   969
       end;
366
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   970
    eX:= 0;
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   971
    eY:= 0;
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   972
    dX:= X2 - X1;
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   973
    dY:= Y2 - Y1;
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   974
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   975
    if (dX > 0) then sX:= 1
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   976
    else
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   977
      if (dX < 0) then
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   978
         begin
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   979
         sX:= -1;
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   980
         dX:= -dX
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   981
         end else sX:= dX;
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   982
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   983
    if (dY > 0) then sY:= 1
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   984
       else
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   985
    if (dY < 0) then
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   986
       begin
366
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   987
       sY:= -1;
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   988
       dY:= -dY
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   989
       end else sY:= dY;
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   990
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   991
    if (dX > dY) then d:= dX
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   992
                 else d:= dY;
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   993
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   994
    x:= X1;
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   995
    y:= Y1;
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   996
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   997
    for i:= 0 to d do
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   998
        begin
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
   999
        inc(eX, dX);
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
  1000
        inc(eY, dY);
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
  1001
        b:= false;
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
  1002
        if (eX > d) then
35
9367f246fb5f - New rope
unc0rr
parents: 32
diff changeset
  1003
           begin
366
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
  1004
           dec(eX, d);
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
  1005
           inc(x, sX);
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
  1006
           b:= true
35
9367f246fb5f - New rope
unc0rr
parents: 32
diff changeset
  1007
           end;
366
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
  1008
        if (eY > d) then
35
9367f246fb5f - New rope
unc0rr
parents: 32
diff changeset
  1009
           begin
366
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
  1010
           dec(eY, d);
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
  1011
           inc(y, sY);
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
  1012
           b:= true
35
9367f246fb5f - New rope
unc0rr
parents: 32
diff changeset
  1013
           end;
366
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
  1014
        if b then
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
  1015
           begin
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
  1016
           inc(roplen);
841
0700e3d3474d Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents: 840
diff changeset
  1017
           if (roplen mod 4) = 0 then DrawSprite(sprRopeNode, x - 2, y - 2, 0)
366
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
  1018
           end
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1019
       end
366
dc50b7933390 Show rope
unc0rr
parents: 364
diff changeset
  1020
    end;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1021
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1022
begin
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1023
Gear:= GearsList;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1024
while Gear<>nil do
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1025
      begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1026
      case Gear^.Kind of
822
2ae8fd8ef804 Use 'rope gun' sprite
unc0rr
parents: 821
diff changeset
  1027
       gtAmmo_Bomb: DrawRotated(sprBomb, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, Gear^.DirAngle);
841
0700e3d3474d Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents: 840
diff changeset
  1028
        gtHedgehog: DrawHH(Gear);
822
2ae8fd8ef804 Use 'rope gun' sprite
unc0rr
parents: 821
diff changeset
  1029
    gtAmmo_Grenade: DrawRotated(sprGrenade, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, DxDy2Angle(Gear^.dY, Gear^.dX));
522
ca089787f59d Tags with current damage
unc0rr
parents: 520
diff changeset
  1030
       gtHealthTag,
762
5ecf042f6113 More sprites are visible
unc0rr
parents: 755
diff changeset
  1031
     gtSmallDamage: if Gear^.Tex <> nil then DrawCentered(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, Gear^.Tex);
841
0700e3d3474d Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents: 840
diff changeset
  1032
           gtGrave: DrawSurfSprite(hwRound(Gear^.X) + WorldDx - 16, hwRound(Gear^.Y) + WorldDy - 16, 32, (GameTicks shr 7) and 7, PHedgehog(Gear^.Hedgehog)^.Team^.GraveTex);
0700e3d3474d Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents: 840
diff changeset
  1033
             gtUFO: DrawSprite(sprUFO, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 16 + WorldDy, (GameTicks shr 7) mod 4);
848
b31b72756927 Fix a warning
unc0rr
parents: 847
diff changeset
  1034
      gtPickHammer: DrawSprite(sprPHammer, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 50 + LongInt(((GameTicks shr 5) and 1) * 2) + WorldDy, 0);
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1035
            gtRope: begin
35
9367f246fb5f - New rope
unc0rr
parents: 32
diff changeset
  1036
                    roplen:= 0;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1037
                    if RopePoints.Count > 0 then
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1038
                       begin
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1039
                       i:= 0;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1040
                       while i < Pred(RopePoints.Count) do
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1041
                             begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1042
                             DrawRopeLine(hwRound(RopePoints.ar[i].X) + WorldDx, hwRound(RopePoints.ar[i].Y) + WorldDy,
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1043
                                          hwRound(RopePoints.ar[Succ(i)].X) + WorldDx, hwRound(RopePoints.ar[Succ(i)].Y) + WorldDy);
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1044
                             inc(i)
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1045
                             end;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1046
                       DrawRopeLine(hwRound(RopePoints.ar[i].X) + WorldDx, hwRound(RopePoints.ar[i].Y) + WorldDy,
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1047
                                    hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy);
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1048
                       DrawRopeLine(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy,
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1049
                                    hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.X) + WorldDx, hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.Y) + WorldDy);
822
2ae8fd8ef804 Use 'rope gun' sprite
unc0rr
parents: 821
diff changeset
  1050
                       DrawRotated(sprRopeHook, hwRound(RopePoints.ar[0].X) + WorldDx, hwRound(RopePoints.ar[0].Y) + WorldDy, 1, RopePoints.HookAngle)
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1051
                       end else
35
9367f246fb5f - New rope
unc0rr
parents: 32
diff changeset
  1052
                       begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1053
                       DrawRopeLine(hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy,
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1054
                                    hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.X) + WorldDx, hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.Y) + WorldDy);
822
2ae8fd8ef804 Use 'rope gun' sprite
unc0rr
parents: 821
diff changeset
  1055
                       DrawRotated(sprRopeHook, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, DxDy2Angle(Gear^.dY, Gear^.dX));
35
9367f246fb5f - New rope
unc0rr
parents: 32
diff changeset
  1056
                       end;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1057
                    end;
841
0700e3d3474d Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents: 840
diff changeset
  1058
      gtSmokeTrace: if Gear^.State < 8 then DrawSprite(sprSmokeTrace, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, Gear^.State);
1012
36b5cc8264e8 Damaged hedgehog animation
unc0rr
parents: 1011
diff changeset
  1059
       gtExplosion: DrawSprite(sprExplosion50, hwRound(Gear^.X) - 32 + WorldDx, hwRound(Gear^.Y) - 32 + WorldDy, Gear^.State);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1060
            gtMine: if ((Gear^.State and gstAttacking) = 0)or((Gear^.Timer and $3FF) < 420)
822
2ae8fd8ef804 Use 'rope gun' sprite
unc0rr
parents: 821
diff changeset
  1061
                       then DrawRotated(sprMineOff, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, Gear^.DirAngle)
2ae8fd8ef804 Use 'rope gun' sprite
unc0rr
parents: 821
diff changeset
  1062
                       else DrawRotated(sprMineOn, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, Gear^.DirAngle);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1063
            gtCase: case Gear^.Pos of
841
0700e3d3474d Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents: 840
diff changeset
  1064
                         posCaseAmmo  : DrawSprite(sprCase, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 16 + WorldDy, 0);
1009
b1f335aed35a Update first aid animation
unc0rr
parents: 1008
diff changeset
  1065
                         posCaseHealth: begin
b1f335aed35a Update first aid animation
unc0rr
parents: 1008
diff changeset
  1066
                                        i:= (GameTicks shr 6) mod 64;
b1f335aed35a Update first aid animation
unc0rr
parents: 1008
diff changeset
  1067
                                        if i > 12 then i:= 0;
b1f335aed35a Update first aid animation
unc0rr
parents: 1008
diff changeset
  1068
                                        DrawSprite(sprFAid, hwRound(Gear^.X) - 24 + WorldDx, hwRound(Gear^.Y) - 24 + WorldDy, i);
b1f335aed35a Update first aid animation
unc0rr
parents: 1008
diff changeset
  1069
                                        end;
42
72ffe21f027c - Fixed console behavior
unc0rr
parents: 39
diff changeset
  1070
                         end;
841
0700e3d3474d Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents: 840
diff changeset
  1071
        gtDynamite: DrawSprite2(sprDynamite, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 25 + WorldDy, Gear^.Tag and 1, Gear^.Tag shr 1);
822
2ae8fd8ef804 Use 'rope gun' sprite
unc0rr
parents: 821
diff changeset
  1072
     gtClusterBomb: DrawRotated(sprClusterBomb, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, Gear^.DirAngle);
841
0700e3d3474d Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents: 840
diff changeset
  1073
         gtCluster: DrawSprite(sprClusterParticle, hwRound(Gear^.X) - 8 + WorldDx, hwRound(Gear^.Y) - 8 + WorldDy, 0);
0700e3d3474d Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents: 840
diff changeset
  1074
           gtFlame: DrawSprite(sprFlame, hwRound(Gear^.X) - 8 + WorldDx, hwRound(Gear^.Y) - 8 + WorldDy,(GameTicks div 128 + Gear^.Angle) mod 8);
0700e3d3474d Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents: 840
diff changeset
  1075
       gtParachute: DrawSprite(sprParachute, hwRound(Gear^.X) - 24 + WorldDx, hwRound(Gear^.Y) - 48 + WorldDy, 0);
0700e3d3474d Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents: 840
diff changeset
  1076
       gtAirAttack: if Gear^.Tag > 0 then DrawSprite(sprAirplane, hwRound(Gear^.X) - 60 + WorldDx, hwRound(Gear^.Y) - 25 + WorldDy, 0)
0700e3d3474d Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents: 840
diff changeset
  1077
                                     else DrawSprite(sprAirplane, hwRound(Gear^.X) - 60 + WorldDx, hwRound(Gear^.Y) - 25 + WorldDy, 1);
822
2ae8fd8ef804 Use 'rope gun' sprite
unc0rr
parents: 821
diff changeset
  1078
         gtAirBomb: DrawRotated(sprAirBomb, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, DxDy2Angle(Gear^.dY, Gear^.dX));
853
0b4a23795530 Teleport animation
unc0rr
parents: 848
diff changeset
  1079
        gtTeleport: begin
0b4a23795530 Teleport animation
unc0rr
parents: 848
diff changeset
  1080
                    HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
0b4a23795530 Teleport animation
unc0rr
parents: 848
diff changeset
  1081
                    DrawRotatedF(sprTeleport, hwRound(Gear^.X) + 1 + WorldDx, hwRound(Gear^.Y) - 3 + WorldDy, Gear^.Pos, hwSign(HHGear^.dX), 0);
0b4a23795530 Teleport animation
unc0rr
parents: 848
diff changeset
  1082
                    DrawRotatedF(sprTeleport, hwRound(HHGear^.X) + 1 + WorldDx, hwRound(HHGear^.Y) - 3 + WorldDy, 11 - Gear^.Pos, hwSign(HHGear^.dX), 0);
0b4a23795530 Teleport animation
unc0rr
parents: 848
diff changeset
  1083
                    end;
841
0700e3d3474d Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents: 840
diff changeset
  1084
        gtSwitcher: DrawSprite(sprSwitch, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 56 + WorldDy, (GameTicks shr 6) mod 12);
0700e3d3474d Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents: 840
diff changeset
  1085
          gtTarget: DrawSprite(sprTarget, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 16 + WorldDy, 0);
959
18b05fc2d0a6 Mortar sprite
unc0rr
parents: 958
diff changeset
  1086
          gtMortar: DrawRotated(sprMortar, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, DxDy2Angle(Gear^.dY, Gear^.dX));
1108
c77267d982ee Animate falling and waking up cake
unc0rr
parents: 1106
diff changeset
  1087
          gtCake: if Gear^.Pos = 6 then
c77267d982ee Animate falling and waking up cake
unc0rr
parents: 1106
diff changeset
  1088
                     DrawRotatedf(sprCakeWalk, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, (GameTicks div 40) mod 6, hwSign(Gear^.dX), Gear^.DirAngle + hwSign(Gear^.dX) * 90)
c77267d982ee Animate falling and waking up cake
unc0rr
parents: 1106
diff changeset
  1089
                  else
1262
e9191c693e44 Add watermelon sprite
unc0rr
parents: 1261
diff changeset
  1090
                     DrawRotatedf(sprCakeDown, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 5 - Gear^.Pos, hwSign(Gear^.dX), 0);
1286
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1091
       gtSeduction: if Gear^.Pos >= 6 then DrawSprite(sprSeduction, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 16 + WorldDy, 0);
1262
e9191c693e44 Add watermelon sprite
unc0rr
parents: 1261
diff changeset
  1092
      gtWatermelon: DrawRotatedf(sprWatermelon, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, 0, Gear^.DirAngle);
e9191c693e44 Add watermelon sprite
unc0rr
parents: 1261
diff changeset
  1093
      gtMelonPiece: DrawRotatedf(sprWatermelon, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 1, 0, Gear^.DirAngle);
1263
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1262
diff changeset
  1094
     gtHellishBomb: DrawRotated(sprHellishBomb, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, Gear^.DirAngle);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1262
diff changeset
  1095
      gtEvilTrace: if Gear^.State < 8 then DrawSprite(sprEvilTrace, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, Gear^.State);
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1262
diff changeset
  1096
         end;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1097
      Gear:= Gear^.NextGear
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1098
      end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1099
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1100
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1101
procedure FreeGearsList;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1102
var t, tt: PGear;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1103
begin
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1104
tt:= GearsList;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1105
GearsList:= nil;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1106
while tt<>nil do
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1107
      begin
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1108
      t:= tt;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1109
      tt:= tt^.NextGear;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1110
      Dispose(t)
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1111
      end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1112
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1113
10
edf56dca1587 - Mine weapon
unc0rr
parents: 9
diff changeset
  1114
procedure AddMiscGears;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
  1115
var i: LongInt;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1116
begin
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 495
diff changeset
  1117
AddGear(0, 0, gtATStartGame, 0, _0, _0, 2000);
22
517be8dc5b76 - Fixed spawning boxes under water
unc0rr
parents: 17
diff changeset
  1118
if (GameFlags and gfForts) = 0 then
622
cedd47d956ec - New training (not finished yet)
unc0rr
parents: 621
diff changeset
  1119
   for i:= 0 to Pred(cLandAdditions) do
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 495
diff changeset
  1120
       FindPlace(AddGear(0, 0, gtMine, 0, _0, _0, 0), false, 0, 2048);
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1121
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1122
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
  1123
procedure doMakeExplosion(X, Y, Radius: LongInt; Mask: LongWord);
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1124
var Gear: PGear;
506
0889d833d47e - A good implementation of shotgun
unc0rr
parents: 505
diff changeset
  1125
    dmg, dmgRadius: LongInt;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1126
begin
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1127
TargetPoint.X:= NoPointX;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1128
{$IFDEF DEBUGFILE}if Radius > 3 then AddFileLog('Explosion: at (' + inttostr(x) + ',' + inttostr(y) + ')');{$ENDIF}
1049
741513156331 Draw explosions for every kind of explosion
unc0rr
parents: 1045
diff changeset
  1129
if (Radius > 10) then AddGear(X, Y, gtExplosion, 0, _0, _0, 0);
355
40c68869899e Small fixes to bring engine to life
unc0rr
parents: 351
diff changeset
  1130
if (Mask and EXPLAutoSound) <> 0 then PlaySound(sndExplosion, false);
506
0889d833d47e - A good implementation of shotgun
unc0rr
parents: 505
diff changeset
  1131
if (Mask and EXPLAllDamageInRadius)=0 then dmgRadius:= Radius shl 1
0889d833d47e - A good implementation of shotgun
unc0rr
parents: 505
diff changeset
  1132
                                      else dmgRadius:= Radius;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1133
Gear:= GearsList;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1134
while Gear <> nil do
1200
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1135
	begin
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1136
	dmg:= dmgRadius  + cHHRadius div 2 - hwRound(Distance(Gear^.X - int2hwFloat(X), Gear^.Y - int2hwFloat(Y)));
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1137
	if (dmg > 1) and
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1138
		((Gear^.State and gstNoDamage) = 0) then
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1139
		begin
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1140
		dmg:= min(dmg div 2, Radius);
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1141
		case Gear^.Kind of
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1142
			gtHedgehog,
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1143
				gtMine,
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1144
				gtCase,
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1145
				gtTarget,
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1146
				gtFlame: begin
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1147
						{$IFDEF DEBUGFILE}AddFileLog('Damage: ' + inttostr(dmg));{$ENDIF}
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1148
						if (Mask and EXPLNoDamage) = 0 then
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1149
							begin
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1150
							inc(Gear^.Damage, dmg);
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1151
							if Gear^.Kind = gtHedgehog then
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1152
								AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), dmg, Gear)
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1153
							end;
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1154
						if ((Mask and EXPLDoNotTouchHH) = 0) or (Gear^.Kind <> gtHedgehog) then
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1155
							begin
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1156
							DeleteCI(Gear);
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1157
							Gear^.dX:= Gear^.dX + SignAs(_0_005 * dmg + cHHKick, Gear^.X - int2hwFloat(X));
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1158
							Gear^.dY:= Gear^.dY + SignAs(_0_005 * dmg + cHHKick, Gear^.Y - int2hwFloat(Y));
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1159
							Gear^.State:= (Gear^.State or gstMoving) and (not gstWinner);
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1160
							Gear^.Active:= true;
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1161
							FollowGear:= Gear
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1162
							end;
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1163
						end;
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1164
				gtGrave: begin
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1165
						Gear^.dY:= - _0_004 * dmg;
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1166
						Gear^.Active:= true;
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1167
						end;
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1168
			end;
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1169
		end;
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1170
	Gear:= Gear^.NextGear
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1171
	end;
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1172
621
8bdbc240f50f New game flag for non-destroyable land
unc0rr
parents: 614
diff changeset
  1173
if (Mask and EXPLDontDraw) = 0 then
1200
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1174
	if (GameFlags and gfSolidLand) = 0 then DrawExplosion(X, Y, Radius);
b92323ccce45 Fix pickhammer and kamikaze
unc0rr
parents: 1141
diff changeset
  1175
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 495
diff changeset
  1176
uAIMisc.AwareOfExplosion(0, 0, 0)
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1177
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1178
506
0889d833d47e - A good implementation of shotgun
unc0rr
parents: 505
diff changeset
  1179
procedure ShotgunShot(Gear: PGear);
0889d833d47e - A good implementation of shotgun
unc0rr
parents: 505
diff changeset
  1180
var t: PGear;
955
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1181
    dmg: LongInt;
506
0889d833d47e - A good implementation of shotgun
unc0rr
parents: 505
diff changeset
  1182
begin
509
fd58135a4407 Bots know shotgun behavior better
unc0rr
parents: 506
diff changeset
  1183
Gear^.Radius:= cShotgunRadius;
506
0889d833d47e - A good implementation of shotgun
unc0rr
parents: 505
diff changeset
  1184
t:= GearsList;
0889d833d47e - A good implementation of shotgun
unc0rr
parents: 505
diff changeset
  1185
while t <> nil do
1286
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1186
	begin
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1187
	dmg:= min(Gear^.Radius + t^.Radius - hwRound(Distance(Gear^.X - t^.X, Gear^.Y - t^.Y)), 25);
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1188
	if dmg > 0 then
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1189
	case t^.Kind of
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1190
		gtHedgehog,
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1191
			gtMine,
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1192
			gtCase,
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1193
			gtTarget: begin
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1194
					inc(t^.Damage, dmg);
867
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
  1195
1286
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1196
					if t^.Kind = gtHedgehog then
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1197
							AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), dmg, t);
867
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
  1198
1286
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1199
					DeleteCI(t);
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1200
					t^.dX:= t^.dX + Gear^.dX * dmg * _0_01 + SignAs(cHHKick, Gear^.dX);
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1201
					t^.dY:= t^.dY + Gear^.dY * dmg * _0_01;
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1202
					t^.State:= t^.State or gstMoving;
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1203
					t^.Active:= true;
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1204
					FollowGear:= t
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1205
					end;
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1206
			gtGrave: begin
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1207
					t^.dY:= - _0_1;
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1208
					t^.Active:= true
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1209
					end;
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1210
		end;
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1211
	t:= t^.NextGear
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
  1212
	end;
621
8bdbc240f50f New game flag for non-destroyable land
unc0rr
parents: 614
diff changeset
  1213
if (GameFlags and gfSolidLand) = 0 then DrawExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), cShotgunRadius)
506
0889d833d47e - A good implementation of shotgun
unc0rr
parents: 505
diff changeset
  1214
end;
0889d833d47e - A good implementation of shotgun
unc0rr
parents: 505
diff changeset
  1215
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
  1216
procedure AmmoShove(Ammo: PGear; Damage, Power: LongInt);
53
0e27949850e3 - Fixed bubble theme object
unc0rr
parents: 51
diff changeset
  1217
var t: PGearArray;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
  1218
    i: LongInt;
38
c1ec4b15d70e Better Desert Eagle and Shotgun
unc0rr
parents: 37
diff changeset
  1219
begin
53
0e27949850e3 - Fixed bubble theme object
unc0rr
parents: 51
diff changeset
  1220
t:= CheckGearsCollision(Ammo);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1221
i:= t^.Count;
53
0e27949850e3 - Fixed bubble theme object
unc0rr
parents: 51
diff changeset
  1222
while i > 0 do
981
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1223
	begin
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1224
	dec(i);
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1225
	if (t^.ar[i]^.State and gstNoDamage) = 0 then
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1226
		case t^.ar[i]^.Kind of
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1227
			gtHedgehog,
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1228
			gtMine,
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1229
			gtTarget,
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1230
			gtCase: begin
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1231
					inc(t^.ar[i]^.Damage, Damage);
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1232
1284
21916b5de218 - Update Italian translation
unc0rr
parents: 1283
diff changeset
  1233
					if (t^.ar[i]^.Kind = gtHedgehog) and (Damage > 0) then
981
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1234
						AddDamageTag(hwRound(t^.ar[i]^.X), hwRound(t^.ar[i]^.Y), Damage, t^.ar[i]);
867
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
  1235
981
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1236
					DeleteCI(t^.ar[i]);
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1237
					t^.ar[i]^.dX:= Ammo^.dX * Power * _0_01;
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1238
					t^.ar[i]^.dY:= Ammo^.dY * Power * _0_01;
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1239
					t^.ar[i]^.Active:= true;
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1240
					t^.ar[i]^.State:= t^.ar[i]^.State or gstMoving;
867
dc7901b1120e - Use more sounds
unc0rr
parents: 865
diff changeset
  1241
982
bbf382a5fe73 Ooops, actual fix
unc0rr
parents: 981
diff changeset
  1242
					if TestCollisionXwithGear(t^.ar[i], hwSign(t^.ar[i]^.dX)) then
981
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1243
						begin
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1244
						if not (TestCollisionXwithXYShift(t^.ar[i], _0, -3, hwSign(t^.ar[i]^.dX))
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1245
							or TestCollisionYwithGear(t^.ar[i], -1)) then t^.ar[i]^.Y:= t^.ar[i]^.Y - _1;
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1246
						if not (TestCollisionXwithXYShift(t^.ar[i], _0, -2, hwSign(t^.ar[i]^.dX))
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1247
							or TestCollisionYwithGear(t^.ar[i], -1)) then t^.ar[i]^.Y:= t^.ar[i]^.Y - _1;
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1248
						if not (TestCollisionXwithXYShift(t^.ar[i], _0, -1, hwSign(t^.ar[i]^.dX))
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1249
							or TestCollisionYwithGear(t^.ar[i], -1)) then t^.ar[i]^.Y:= t^.ar[i]^.Y - _1;
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1250
						end;
982
bbf382a5fe73 Ooops, actual fix
unc0rr
parents: 981
diff changeset
  1251
					
981
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1252
					FollowGear:= t^.ar[i]
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1253
					end;
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1254
		end
e883baf3a458 Fix Baseball, whip, firepunch attacking on slope
unc0rr
parents: 976
diff changeset
  1255
	end;
126
93df479aa1b9 - Now really fix unicode issues
unc0rr
parents: 108
diff changeset
  1256
SetAllToActive
38
c1ec4b15d70e Better Desert Eagle and Shotgun
unc0rr
parents: 37
diff changeset
  1257
end;
c1ec4b15d70e Better Desert Eagle and Shotgun
unc0rr
parents: 37
diff changeset
  1258
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1259
procedure AssignHHCoords;
955
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1260
var i, t, p, j: LongInt;
543
465e2ec8f05f - Better randomness of placing hedgehogs on the land
unc0rr
parents: 542
diff changeset
  1261
    ar: array[0..Pred(cMaxHHs)] of PGear;
465e2ec8f05f - Better randomness of placing hedgehogs on the land
unc0rr
parents: 542
diff changeset
  1262
    Count: Longword;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1263
begin
543
465e2ec8f05f - Better randomness of placing hedgehogs on the land
unc0rr
parents: 542
diff changeset
  1264
if (GameFlags and gfForts) <> 0 then
955
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1265
	begin
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1266
	t:= 0;
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1267
	for p:= 0 to 1 do
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1268
		begin
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1269
		with ClansArray[p]^ do
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1270
			for j:= 0 to Pred(TeamsNumber) do
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1271
				with Teams[j]^ do
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1272
					for i:= 0 to cMaxHHIndex do
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1273
						with Hedgehogs[i] do
958
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
  1274
							if (Gear <> nil) and (Gear^.X.QWordValue = 0) then
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
  1275
								begin
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
  1276
								FindPlace(Gear, false, t, t + 1024);
999
8dcf263c9e8f In forts mode, hedgehogs on the left look at the right, and vice-versa
unc0rr
parents: 997
diff changeset
  1277
								Gear^.Pos:= GetRandom(19);
8dcf263c9e8f In forts mode, hedgehogs on the left look at the right, and vice-versa
unc0rr
parents: 997
diff changeset
  1278
								Gear^.dX.isNegative:= p = 1;
958
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 957
diff changeset
  1279
								end;
955
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1280
		inc(t, 1024)
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1281
		end
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1282
	end else // mix hedgehogs
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1283
	begin
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1284
	Count:= 0;
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1285
	for p:= 0 to Pred(TeamsCount) do
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1286
		with TeamsArray[p]^ do
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1287
		begin
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1288
		for i:= 0 to cMaxHHIndex do
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1289
			with Hedgehogs[i] do
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1290
				if (Gear <> nil) and (Gear^.X.QWordValue = 0) then
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1291
					begin
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1292
					ar[Count]:= Gear;
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1293
					inc(Count)
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1294
					end;
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1295
		end;
543
465e2ec8f05f - Better randomness of placing hedgehogs on the land
unc0rr
parents: 542
diff changeset
  1296
955
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1297
	while (Count > 0) do
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1298
		begin
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1299
		i:= GetRandom(Count);
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1300
		FindPlace(ar[i], false, 0, 2048);
1000
e7b204880318 Hedgehogs on the left side of the map look to the right and vice-versa
unc0rr
parents: 999
diff changeset
  1301
		ar[i]^.dX.isNegative:= ar[i]^.X > _1024;
959
18b05fc2d0a6 Mortar sprite
unc0rr
parents: 958
diff changeset
  1302
		ar[i]^.Pos:= GetRandom(19);
955
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1303
		ar[i]:= ar[Count - 1];
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1304
		dec(Count)
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1305
		end
474afaab0365 Fix forts mode to take in account clans, not teams
unc0rr
parents: 954
diff changeset
  1306
	end
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1307
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1308
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
  1309
function CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear;
10
edf56dca1587 - Mine weapon
unc0rr
parents: 9
diff changeset
  1310
var t: PGear;
edf56dca1587 - Mine weapon
unc0rr
parents: 9
diff changeset
  1311
begin
edf56dca1587 - Mine weapon
unc0rr
parents: 9
diff changeset
  1312
t:= GearsList;
edf56dca1587 - Mine weapon
unc0rr
parents: 9
diff changeset
  1313
rX:= sqr(rX);
edf56dca1587 - Mine weapon
unc0rr
parents: 9
diff changeset
  1314
rY:= sqr(rY);
edf56dca1587 - Mine weapon
unc0rr
parents: 9
diff changeset
  1315
while t <> nil do
edf56dca1587 - Mine weapon
unc0rr
parents: 9
diff changeset
  1316
      begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1317
      if (t <> Gear) and (t^.Kind = Kind) then
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 495
diff changeset
  1318
         if not((hwSqr(Gear^.X - t^.X) / rX + hwSqr(Gear^.Y - t^.Y) / rY) > _1) then
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1319
            exit(t);
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1320
      t:= t^.NextGear
10
edf56dca1587 - Mine weapon
unc0rr
parents: 9
diff changeset
  1321
      end;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1322
CheckGearNear:= nil
15
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
  1323
end;
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
  1324
79
29b477319854 - New test map
unc0rr
parents: 78
diff changeset
  1325
procedure AmmoFlameWork(Ammo: PGear);
29b477319854 - New test map
unc0rr
parents: 78
diff changeset
  1326
var t: PGear;
29b477319854 - New test map
unc0rr
parents: 78
diff changeset
  1327
begin
29b477319854 - New test map
unc0rr
parents: 78
diff changeset
  1328
t:= GearsList;
29b477319854 - New test map
unc0rr
parents: 78
diff changeset
  1329
while t <> nil do
1295
27bec661581c Start flames rework
unc0rr
parents: 1294
diff changeset
  1330
	begin
27bec661581c Start flames rework
unc0rr
parents: 1294
diff changeset
  1331
	if (t^.Kind = gtHedgehog) and (t^.Y < Ammo^.Y) then
27bec661581c Start flames rework
unc0rr
parents: 1294
diff changeset
  1332
		if not (hwSqr(Ammo^.X - t^.X) + hwSqr(Ammo^.Y - t^.Y - int2hwFloat(cHHRadius)) * 2 > _2) then
27bec661581c Start flames rework
unc0rr
parents: 1294
diff changeset
  1333
			begin
27bec661581c Start flames rework
unc0rr
parents: 1294
diff changeset
  1334
			inc(t^.Damage, 5);
27bec661581c Start flames rework
unc0rr
parents: 1294
diff changeset
  1335
			t^.dX:= t^.dX + (t^.X - Ammo^.X) * _0_02;
27bec661581c Start flames rework
unc0rr
parents: 1294
diff changeset
  1336
			t^.dY:= - _0_25;
27bec661581c Start flames rework
unc0rr
parents: 1294
diff changeset
  1337
			t^.Active:= true;
27bec661581c Start flames rework
unc0rr
parents: 1294
diff changeset
  1338
			DeleteCI(t);
27bec661581c Start flames rework
unc0rr
parents: 1294
diff changeset
  1339
			FollowGear:= t
27bec661581c Start flames rework
unc0rr
parents: 1294
diff changeset
  1340
			end;
27bec661581c Start flames rework
unc0rr
parents: 1294
diff changeset
  1341
	t:= t^.NextGear
27bec661581c Start flames rework
unc0rr
parents: 1294
diff changeset
  1342
	end;
79
29b477319854 - New test map
unc0rr
parents: 78
diff changeset
  1343
end;
29b477319854 - New test map
unc0rr
parents: 78
diff changeset
  1344
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
  1345
function CheckGearsNear(mX, mY: LongInt; Kind: TGearsType; rX, rY: LongInt): PGear;
16
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1346
var t: PGear;
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1347
begin
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1348
t:= GearsList;
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1349
rX:= sqr(rX);
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1350
rY:= sqr(rY);
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1351
while t <> nil do
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1352
      begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1353
      if t^.Kind in Kind then
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 495
diff changeset
  1354
         if not (hwSqr(int2hwFloat(mX) - t^.X) / rX + hwSqr(int2hwFloat(mY) - t^.Y) / rY > _1) then
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1355
            exit(t);
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1356
      t:= t^.NextGear
16
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1357
      end;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1358
CheckGearsNear:= nil
16
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1359
end;
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1360
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1361
function CountGears(Kind: TGearType): Longword;
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1362
var t: PGear;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1363
    Result: Longword;
16
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1364
begin
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1365
Result:= 0;
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1366
t:= GearsList;
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1367
while t <> nil do
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1368
      begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1369
      if t^.Kind = Kind then inc(Result);
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1370
      t:= t^.NextGear
16
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1371
      end;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1372
CountGears:= Result
16
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1373
end;
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1374
15
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
  1375
procedure SpawnBoxOfSmth;
394
4c017ae1226a - Implement hack to let ammo stores work without needed assistance of frontend
unc0rr
parents: 393
diff changeset
  1376
var t: LongInt;
4c017ae1226a - Implement hack to let ammo stores work without needed assistance of frontend
unc0rr
parents: 393
diff changeset
  1377
    i: TAmmoType;
15
6200cca92480 - Minor code simplifying
unc0rr
parents: 14
diff changeset
  1378
begin
614
0e04504bc140 - Fix some warnings
unc0rr
parents: 604
diff changeset
  1379
if (cCaseFactor = 0) or
0e04504bc140 - Fix some warnings
unc0rr
parents: 604
diff changeset
  1380
   (CountGears(gtCase) >= 5) or
0e04504bc140 - Fix some warnings
unc0rr
parents: 604
diff changeset
  1381
   (getrandom(cCaseFactor) <> 0) then exit;
1295
27bec661581c Start flames rework
unc0rr
parents: 1294
diff changeset
  1382
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 495
diff changeset
  1383
FollowGear:= AddGear(0, 0, gtCase, 0, _0, _0, 0);
295
8834f3cb620e - Implement ammo cases
unc0rr
parents: 294
diff changeset
  1384
case getrandom(2) of
8834f3cb620e - Implement ammo cases
unc0rr
parents: 294
diff changeset
  1385
     0: begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1386
        FollowGear^.Health:= 25;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1387
        FollowGear^.Pos:= posCaseHealth
295
8834f3cb620e - Implement ammo cases
unc0rr
parents: 294
diff changeset
  1388
        end;
8834f3cb620e - Implement ammo cases
unc0rr
parents: 294
diff changeset
  1389
     1: begin
394
4c017ae1226a - Implement hack to let ammo stores work without needed assistance of frontend
unc0rr
parents: 393
diff changeset
  1390
        t:= 0;
4c017ae1226a - Implement hack to let ammo stores work without needed assistance of frontend
unc0rr
parents: 393
diff changeset
  1391
        for i:= Low(TAmmoType) to High(TAmmoType) do
4c017ae1226a - Implement hack to let ammo stores work without needed assistance of frontend
unc0rr
parents: 393
diff changeset
  1392
            inc(t, Ammoz[i].Probability);
4c017ae1226a - Implement hack to let ammo stores work without needed assistance of frontend
unc0rr
parents: 393
diff changeset
  1393
        t:= GetRandom(t);
4c017ae1226a - Implement hack to let ammo stores work without needed assistance of frontend
unc0rr
parents: 393
diff changeset
  1394
        i:= Low(TAmmoType);
4c017ae1226a - Implement hack to let ammo stores work without needed assistance of frontend
unc0rr
parents: 393
diff changeset
  1395
        dec(t, Ammoz[i].Probability);
4c017ae1226a - Implement hack to let ammo stores work without needed assistance of frontend
unc0rr
parents: 393
diff changeset
  1396
        while t >= 0 do
4c017ae1226a - Implement hack to let ammo stores work without needed assistance of frontend
unc0rr
parents: 393
diff changeset
  1397
          begin
4c017ae1226a - Implement hack to let ammo stores work without needed assistance of frontend
unc0rr
parents: 393
diff changeset
  1398
          inc(i);
4c017ae1226a - Implement hack to let ammo stores work without needed assistance of frontend
unc0rr
parents: 393
diff changeset
  1399
          dec(t, Ammoz[i].Probability)
4c017ae1226a - Implement hack to let ammo stores work without needed assistance of frontend
unc0rr
parents: 393
diff changeset
  1400
          end;
865
a4a5ec6c61d4 - Fix introduced bug with hh physics
unc0rr
parents: 862
diff changeset
  1401
        PlaySound(sndReinforce, false);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1402
        FollowGear^.Pos:= posCaseAmmo;
394
4c017ae1226a - Implement hack to let ammo stores work without needed assistance of frontend
unc0rr
parents: 393
diff changeset
  1403
        FollowGear^.State:= Longword(i)
295
8834f3cb620e - Implement ammo cases
unc0rr
parents: 294
diff changeset
  1404
        end;
8834f3cb620e - Implement ammo cases
unc0rr
parents: 294
diff changeset
  1405
     end;
70
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1406
FindPlace(FollowGear, true, 0, 2048)
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1407
end;
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1408
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
  1409
procedure FindPlace(Gear: PGear; withFall: boolean; Left, Right: LongInt);
70
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1410
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
  1411
    function CountNonZeroz(x, y, r: LongInt): LongInt;
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
  1412
    var i: LongInt;
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
  1413
        Result: LongInt;
70
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1414
    begin
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1415
    Result:= 0;
701
8841f71b5e79 - Fix undefinite function result
unc0rr
parents: 700
diff changeset
  1416
    if (y and $FFFFFC00) = 0 then
8841f71b5e79 - Fix undefinite function result
unc0rr
parents: 700
diff changeset
  1417
      for i:= max(x - r, 0) to min(x + r, 2043) do
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1418
        if Land[y, i] <> 0 then inc(Result);
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1419
    CountNonZeroz:= Result
70
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1420
    end;
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1421
495
62c1c2b4414c - Fix most of the warnings in hwengine
unc0rr
parents: 409
diff changeset
  1422
var x: LongInt;
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 370
diff changeset
  1423
    y, sy: LongInt;
386
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1424
    ar: array[0..511] of TPoint;
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1425
    ar2: array[0..1023] of TPoint;
392
25be13ae29da - Fix getting negative coordinates of cursor
unc0rr
parents: 386
diff changeset
  1426
    cnt, cnt2: Longword;
25be13ae29da - Fix getting negative coordinates of cursor
unc0rr
parents: 386
diff changeset
  1427
    delta: LongInt;
70
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1428
begin
386
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1429
delta:= 250;
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1430
cnt2:= 0;
16
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1431
repeat
392
25be13ae29da - Fix getting negative coordinates of cursor
unc0rr
parents: 386
diff changeset
  1432
  x:= Left + LongInt(GetRandom(Delta));
70
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1433
  repeat
386
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1434
     inc(x, Delta);
70
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1435
     cnt:= 0;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1436
     y:= -Gear^.Radius * 2;
70
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1437
     while y < 1023 do
16
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1438
        begin
70
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1439
        repeat
701
8841f71b5e79 - Fix undefinite function result
unc0rr
parents: 700
diff changeset
  1440
         inc(y, 2);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1441
        until (y > 1023) or (CountNonZeroz(x, y, Gear^.Radius - 1) = 0);
70
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1442
        sy:= y;
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1443
        repeat
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1444
          inc(y);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1445
        until (y > 1023) or (CountNonZeroz(x, y, Gear^.Radius - 1) <> 0);
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1446
        if (y - sy > Gear^.Radius * 2)
70
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1447
        and (y < 1023)
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1448
        and (CheckGearsNear(x, y - Gear^.Radius, [gtHedgehog, gtMine, gtCase], 110, 110) = nil) then
70
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1449
           begin
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1450
           ar[cnt].X:= x;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1451
           if withFall then ar[cnt].Y:= sy + Gear^.Radius
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 307
diff changeset
  1452
                       else ar[cnt].Y:= y - Gear^.Radius;
70
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1453
           inc(cnt)
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1454
           end;
386
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1455
        inc(y, 45)
16
b6f4b413dd41 - Various fixes for ammo cases
unc0rr
parents: 15
diff changeset
  1456
        end;
70
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1457
     if cnt > 0 then
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1458
        with ar[GetRandom(cnt)] do
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1459
          begin
386
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1460
          ar2[cnt2].x:= x;
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1461
          ar2[cnt2].y:= y;
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1462
          inc(cnt2)
70
82d93eeecebe - Many AI improvements
unc0rr
parents: 68
diff changeset
  1463
          end
386
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1464
  until (x + Delta > Right);
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1465
dec(Delta, 60)
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1466
until (cnt2 > 0) or (Delta < 70);
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1467
if cnt2 > 0 then
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1468
   with ar2[GetRandom(cnt2)] do
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1469
      begin
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 495
diff changeset
  1470
      Gear^.X:= int2hwFloat(x);
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 495
diff changeset
  1471
      Gear^.Y:= int2hwFloat(y);
386
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1472
      {$IFDEF DEBUGFILE}
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1473
      AddFileLog('Assigned Gear coordinates (' + inttostr(x) + ',' + inttostr(y) + ')');
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1474
      {$ENDIF}
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1475
      end
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1476
   else
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1477
   begin
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1478
   OutError('Can''t find place for Gear', false);
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1479
   DeleteGear(Gear)
21eeb5ac0486 - Better gears placing
unc0rr
parents: 371
diff changeset
  1480
   end
10
edf56dca1587 - Mine weapon
unc0rr
parents: 9
diff changeset
  1481
end;
edf56dca1587 - Mine weapon
unc0rr
parents: 9
diff changeset
  1482
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1483
initialization
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1484
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1485
finalization
95
1ef5e2c41115 - Fixed compilation
unc0rr
parents: 92
diff changeset
  1486
FreeGearsList;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1487
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
  1488
end.