author | koda |
Sat, 14 Nov 2015 02:57:00 +0100 | |
branch | sdl2transition |
changeset 11375 | 7d0511a3cff8 |
parent 11203 | 2f4d0a387a02 |
child 11468 | 2f6f8baa2a97 |
permissions | -rw-r--r-- |
6581 | 1 |
(* |
2 |
* Hedgewars, a free turn based strategy game |
|
11046 | 3 |
* Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com> |
6581 | 4 |
* |
5 |
* This program is free software; you can redistribute it and/or modify |
|
6 |
* it under the terms of the GNU General Public License as published by |
|
7 |
* the Free Software Foundation; version 2 of the License |
|
8 |
* |
|
9 |
* This program is distributed in the hope that it will be useful, |
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
12 |
* GNU General Public License for more details. |
|
13 |
* |
|
14 |
* You should have received a copy of the GNU General Public License |
|
15 |
* along with this program; if not, write to the Free Software |
|
10108
c68cf030eded
update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents:
10040
diff
changeset
|
16 |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
6581 | 17 |
*) |
18 |
||
19 |
{$INCLUDE "options.inc"} |
|
20 |
unit uGearsList; |
|
21 |
||
22 |
interface |
|
10032
db65298717da
This adds idle hog tinting. Active hog tinting still needed.
nemo
parents:
9998
diff
changeset
|
23 |
uses uFloat, uTypes, SDLh; |
6581 | 24 |
|
25 |
function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer: LongWord): PGear; |
|
11203 | 26 |
function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer, newUid: LongWord): PGear; |
10646
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
27 |
procedure DeleteGear(Gear: PGear); |
6581 | 28 |
procedure InsertGearToList(Gear: PGear); |
29 |
procedure RemoveGearFromList(Gear: PGear); |
|
30 |
||
7395 | 31 |
var curHandledGear: PGear; |
32 |
||
6581 | 33 |
implementation |
34 |
||
35 |
uses uRandom, uUtils, uConsts, uVariables, uAmmos, uTeams, uStats, |
|
36 |
uTextures, uScript, uRenderUtils, uAI, uCollisions, |
|
7395 | 37 |
uGearsRender, uGearsUtils, uDebug; |
6581 | 38 |
|
8145
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
39 |
const |
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
40 |
GearKindAmmoTypeMap : array [TGearType] of TAmmoType = ( |
8145
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
41 |
(* gtFlame *) amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
42 |
(* gtHedgehog *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
43 |
(* gtMine *) , amMine |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
44 |
(* gtCase *) , amNothing |
10829 | 45 |
(* gtAirMine *) , amAirMine |
8145
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
46 |
(* gtExplosives *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
47 |
(* gtGrenade *) , amGrenade |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
48 |
(* gtShell *) , amBazooka |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
49 |
(* gtGrave *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
50 |
(* gtBee *) , amBee |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
51 |
(* gtShotgunShot *) , amShotgun |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
52 |
(* gtPickHammer *) , amPickHammer |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
53 |
(* gtRope *) , amRope |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
54 |
(* gtDEagleShot *) , amDEagle |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
55 |
(* gtDynamite *) , amDynamite |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
56 |
(* gtClusterBomb *) , amClusterBomb |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
57 |
(* gtCluster *) , amClusterBomb |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
58 |
(* gtShover *) , amBaseballBat // Shover is only used for baseball bat right now |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
59 |
(* gtFirePunch *) , amFirePunch |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
60 |
(* gtATStartGame *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
61 |
(* gtATFinishGame *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
62 |
(* gtParachute *) , amParachute |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
63 |
(* gtAirAttack *) , amAirAttack |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
64 |
(* gtAirBomb *) , amAirAttack |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
65 |
(* gtBlowTorch *) , amBlowTorch |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
66 |
(* gtGirder *) , amGirder |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
67 |
(* gtTeleport *) , amTeleport |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
68 |
(* gtSwitcher *) , amSwitch |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
69 |
(* gtTarget *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
70 |
(* gtMortar *) , amMortar |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
71 |
(* gtWhip *) , amWhip |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
72 |
(* gtKamikaze *) , amKamikaze |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
73 |
(* gtCake *) , amCake |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
74 |
(* gtSeduction *) , amSeduction |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
75 |
(* gtWatermelon *) , amWatermelon |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
76 |
(* gtMelonPiece *) , amWatermelon |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
77 |
(* gtHellishBomb *) , amHellishBomb |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
78 |
(* gtWaterUp *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
79 |
(* gtDrill *) , amDrill |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
80 |
(* gtBallGun *) , amBallgun |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
81 |
(* gtBall *) , amBallgun |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
82 |
(* gtRCPlane *) , amRCPlane |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
83 |
(*gtSniperRifleShot *) , amSniperRifle |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
84 |
(* gtJetpack *) , amJetpack |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
85 |
(* gtMolotov *) , amMolotov |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
86 |
(* gtBirdy *) , amBirdy |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
87 |
(* gtEgg *) , amBirdy |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
88 |
(* gtPortal *) , amPortalGun |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
89 |
(* gtPiano *) , amPiano |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
90 |
(* gtGasBomb *) , amGasBomb |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
91 |
(* gtSineGunShot *) , amSineGun |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
92 |
(* gtFlamethrower *) , amFlamethrower |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
93 |
(* gtSMine *) , amSMine |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
94 |
(* gtPoisonCloud *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
95 |
(* gtHammer *) , amHammer |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
96 |
(* gtHammerHit *) , amHammer |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
97 |
(* gtResurrector *) , amResurrector |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
98 |
(* gtPoisonCloud *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
99 |
(* gtSnowball *) , amSnowball |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
100 |
(* gtFlake *) , amNothing |
8161 | 101 |
//(* gtStructure *) , amStructure // TODO - This will undoubtedly change once there is more than one structure |
8145
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
102 |
(* gtLandGun *) , amLandGun |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
103 |
(* gtTardis *) , amTardis |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
104 |
(* gtIceGun *) , amIceGun |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
105 |
(* gtAddAmmo *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
106 |
(* gtGenericFaller *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
107 |
(* gtKnife *) , amKnife |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
108 |
); |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
109 |
|
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
110 |
|
7093 | 111 |
var GCounter: LongWord = 0; // this does not get re-initialized, but should be harmless |
7028 | 112 |
|
8145
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
113 |
const |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
114 |
cUsualZ = 500; |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
115 |
cOnHHZ = 2000; |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
116 |
|
6581 | 117 |
procedure InsertGearToList(Gear: PGear); |
118 |
var tmp, ptmp: PGear; |
|
119 |
begin |
|
120 |
tmp:= GearsList; |
|
121 |
ptmp:= GearsList; |
|
7366
e5a0856708dc
Insert at front of same Z, not end. Saves a little time on insertion and lua lookup of recent adds.
nemo
parents:
7364
diff
changeset
|
122 |
while (tmp <> nil) and (tmp^.Z < Gear^.Z) do |
6581 | 123 |
begin |
124 |
ptmp:= tmp; |
|
125 |
tmp:= tmp^.NextGear |
|
126 |
end; |
|
127 |
||
128 |
if ptmp <> tmp then |
|
129 |
begin |
|
130 |
Gear^.NextGear:= ptmp^.NextGear; |
|
131 |
Gear^.PrevGear:= ptmp; |
|
132 |
if ptmp^.NextGear <> nil then |
|
133 |
ptmp^.NextGear^.PrevGear:= Gear; |
|
134 |
ptmp^.NextGear:= Gear |
|
135 |
end |
|
136 |
else |
|
137 |
begin |
|
138 |
Gear^.NextGear:= GearsList; |
|
139 |
if Gear^.NextGear <> nil then |
|
140 |
Gear^.NextGear^.PrevGear:= Gear; |
|
141 |
GearsList:= Gear; |
|
142 |
end; |
|
143 |
end; |
|
144 |
||
7395 | 145 |
|
6581 | 146 |
procedure RemoveGearFromList(Gear: PGear); |
147 |
begin |
|
10634
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10625
diff
changeset
|
148 |
if (Gear <> GearsList) and (Gear <> nil) and (Gear^.NextGear = nil) and (Gear^.PrevGear = nil) then |
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10625
diff
changeset
|
149 |
begin |
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10625
diff
changeset
|
150 |
AddFileLog('Attempted to remove Gear #'+inttostr(Gear^.uid)+' from the list twice.'); |
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10625
diff
changeset
|
151 |
exit |
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10625
diff
changeset
|
152 |
end; |
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10625
diff
changeset
|
153 |
TryDo((Gear = nil) or (curHandledGear = nil) or (Gear = curHandledGear), 'You''re doing it wrong', true); |
7395 | 154 |
|
6581 | 155 |
if Gear^.NextGear <> nil then |
156 |
Gear^.NextGear^.PrevGear:= Gear^.PrevGear; |
|
157 |
if Gear^.PrevGear <> nil then |
|
158 |
Gear^.PrevGear^.NextGear:= Gear^.NextGear |
|
11043
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
159 |
else |
10634
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10625
diff
changeset
|
160 |
GearsList:= Gear^.NextGear; |
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10625
diff
changeset
|
161 |
|
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10625
diff
changeset
|
162 |
Gear^.NextGear:= nil; |
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10625
diff
changeset
|
163 |
Gear^.PrevGear:= nil |
6581 | 164 |
end; |
7395 | 165 |
|
166 |
||
6581 | 167 |
function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer: LongWord): PGear; |
11203 | 168 |
begin |
169 |
AddGear:= AddGear(X, Y, Kind, State, dX, dY, Timer, 0); |
|
170 |
end; |
|
171 |
function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer, newUid: LongWord): PGear; |
|
6581 | 172 |
var gear: PGear; |
10518
dbbe2f6c0a96
make gear ability to speak somewhat less ironic
sheepluva
parents:
10495
diff
changeset
|
173 |
//c: byte; |
10874
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10848
diff
changeset
|
174 |
cakeData: PCakeData; |
6581 | 175 |
begin |
11203 | 176 |
if newUid = 0 then |
177 |
inc(GCounter); |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7754
diff
changeset
|
178 |
|
7028 | 179 |
AddFileLog('AddGear: #' + inttostr(GCounter) + ' (' + inttostr(x) + ',' + inttostr(y) + '), d(' + floattostr(dX) + ',' + floattostr(dY) + ') type = ' + EnumToStr(Kind)); |
6581 | 180 |
|
8330 | 181 |
|
6581 | 182 |
New(gear); |
183 |
FillChar(gear^, sizeof(TGear), 0); |
|
184 |
gear^.X:= int2hwFloat(X); |
|
185 |
gear^.Y:= int2hwFloat(Y); |
|
186 |
gear^.Target.X:= NoPointX; |
|
187 |
gear^.Kind := Kind; |
|
188 |
gear^.State:= State; |
|
189 |
gear^.Active:= true; |
|
190 |
gear^.dX:= dX; |
|
191 |
gear^.dY:= dY; |
|
192 |
gear^.doStep:= doStepHandlers[Kind]; |
|
193 |
gear^.CollisionIndex:= -1; |
|
194 |
gear^.Timer:= Timer; |
|
11203 | 195 |
if newUid = 0 then |
196 |
gear^.uid:= GCounter |
|
197 |
else gear^.uid:= newUid; |
|
6581 | 198 |
gear^.SoundChannel:= -1; |
199 |
gear^.ImpactSound:= sndNone; |
|
200 |
gear^.Density:= _1; |
|
201 |
// Define ammo association, if any. |
|
202 |
gear^.AmmoType:= GearKindAmmoTypeMap[Kind]; |
|
7730
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7726
diff
changeset
|
203 |
gear^.CollisionMask:= $FFFF; |
10032
db65298717da
This adds idle hog tinting. Active hog tinting still needed.
nemo
parents:
9998
diff
changeset
|
204 |
gear^.Tint:= $FFFFFFFF; |
10874
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10848
diff
changeset
|
205 |
gear^.Data:= nil; |
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7176
diff
changeset
|
206 |
|
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
207 |
if CurrentHedgehog <> nil then |
7726
1137406bce12
Set default collision mask for gears at currenthedgehog X/Y to FF7F, expose mask to scripting as well. This should resolve the collision part of bug #420
nemo
parents:
7721
diff
changeset
|
208 |
begin |
1137406bce12
Set default collision mask for gears at currenthedgehog X/Y to FF7F, expose mask to scripting as well. This should resolve the collision part of bug #420
nemo
parents:
7721
diff
changeset
|
209 |
gear^.Hedgehog:= CurrentHedgehog; |
1137406bce12
Set default collision mask for gears at currenthedgehog X/Y to FF7F, expose mask to scripting as well. This should resolve the collision part of bug #420
nemo
parents:
7721
diff
changeset
|
210 |
if (CurrentHedgehog^.Gear <> nil) and (hwRound(CurrentHedgehog^.Gear^.X) = X) and (hwRound(CurrentHedgehog^.Gear^.Y) = Y) then |
8751
4609823efc94
More flagging of Land values. Also use less than for tests of non-terrain, instead of "and $FF00 = 0". Saves a couple of ops, which actually matters a small amount in a few places.
nemo
parents:
8744
diff
changeset
|
211 |
gear^.CollisionMask:= lfNotCurrentMask |
7730
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7726
diff
changeset
|
212 |
end; |
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7176
diff
changeset
|
213 |
|
7364 | 214 |
if (Ammoz[Gear^.AmmoType].Ammo.Propz and ammoprop_NeedTarget <> 0) then |
6581 | 215 |
gear^.Z:= cHHZ+1 |
216 |
else gear^.Z:= cUsualZ; |
|
217 |
||
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
218 |
|
6581 | 219 |
case Kind of |
220 |
gtGrenade, |
|
221 |
gtClusterBomb, |
|
222 |
gtGasBomb: begin |
|
223 |
gear^.ImpactSound:= sndGrenadeImpact; |
|
224 |
gear^.nImpactSounds:= 1; |
|
225 |
gear^.AdvBounce:= 1; |
|
226 |
gear^.Radius:= 5; |
|
227 |
gear^.Elasticity:= _0_8; |
|
228 |
gear^.Friction:= _0_8; |
|
229 |
gear^.Density:= _1_5; |
|
230 |
gear^.RenderTimer:= true; |
|
231 |
if gear^.Timer = 0 then |
|
232 |
gear^.Timer:= 3000 |
|
233 |
end; |
|
234 |
gtWatermelon: begin |
|
235 |
gear^.ImpactSound:= sndMelonImpact; |
|
236 |
gear^.nImpactSounds:= 1; |
|
237 |
gear^.AdvBounce:= 1; |
|
238 |
gear^.Radius:= 6; |
|
239 |
gear^.Elasticity:= _0_8; |
|
240 |
gear^.Friction:= _0_995; |
|
241 |
gear^.Density:= _2; |
|
242 |
gear^.RenderTimer:= true; |
|
243 |
if gear^.Timer = 0 then |
|
244 |
gear^.Timer:= 3000 |
|
245 |
end; |
|
246 |
gtMelonPiece: begin |
|
9825 | 247 |
gear^.AdvBounce:= 1; |
10889
f7200e614295
give melon pieces a radius. is why they weren't bouncing.
nemo
parents:
10875
diff
changeset
|
248 |
gear^.Density:= _2; |
11036
6e866be63b1d
oops. melon pieces need friction and elasticity to bounce right.
nemo
parents:
11002
diff
changeset
|
249 |
gear^.Elasticity:= _0_8; |
6e866be63b1d
oops. melon pieces need friction and elasticity to bounce right.
nemo
parents:
11002
diff
changeset
|
250 |
gear^.Friction:= _0_995; |
10889
f7200e614295
give melon pieces a radius. is why they weren't bouncing.
nemo
parents:
10875
diff
changeset
|
251 |
gear^.Radius:= 4 |
6581 | 252 |
end; |
253 |
gtHedgehog: begin |
|
254 |
gear^.AdvBounce:= 1; |
|
255 |
gear^.Radius:= cHHRadius; |
|
256 |
gear^.Elasticity:= _0_35; |
|
257 |
gear^.Friction:= _0_999; |
|
258 |
gear^.Angle:= cMaxAngle div 2; |
|
259 |
gear^.Density:= _3; |
|
260 |
gear^.Z:= cHHZ; |
|
261 |
if (GameFlags and gfAISurvival) <> 0 then |
|
262 |
if gear^.Hedgehog^.BotLevel > 0 then |
|
7077 | 263 |
gear^.Hedgehog^.Effects[heResurrectable] := 1; |
10032
db65298717da
This adds idle hog tinting. Active hog tinting still needed.
nemo
parents:
9998
diff
changeset
|
264 |
// this would presumably be set in the frontend |
db65298717da
This adds idle hog tinting. Active hog tinting still needed.
nemo
parents:
9998
diff
changeset
|
265 |
// if we weren't going to do that yet, would need to reinit GetRandom |
10040 | 266 |
// oh, and, randomising slightly R and B might be nice too. |
10032
db65298717da
This adds idle hog tinting. Active hog tinting still needed.
nemo
parents:
9998
diff
changeset
|
267 |
//gear^.Tint:= $fa00efff or ((random(80)+128) shl 16) |
db65298717da
This adds idle hog tinting. Active hog tinting still needed.
nemo
parents:
9998
diff
changeset
|
268 |
//gear^.Tint:= $faa4efff |
10040 | 269 |
//gear^.Tint:= (($e0+random(32)) shl 24) or |
10032
db65298717da
This adds idle hog tinting. Active hog tinting still needed.
nemo
parents:
9998
diff
changeset
|
270 |
// ((random(80)+128) shl 16) or |
db65298717da
This adds idle hog tinting. Active hog tinting still needed.
nemo
parents:
9998
diff
changeset
|
271 |
// (($d5+random(32)) shl 8) or $ff |
10495
6d61b44a5652
- Comment out getrandom in addgear for hedgehog, causes preview-game desync
unc0rr
parents:
10494
diff
changeset
|
272 |
{c:= GetRandom(32); |
10040 | 273 |
gear^.Tint:= (($e0+c) shl 24) or |
10494 | 274 |
((GetRandom(90)+128) shl 16) or |
10495
6d61b44a5652
- Comment out getrandom in addgear for hedgehog, causes preview-game desync
unc0rr
parents:
10494
diff
changeset
|
275 |
(($d5+c) shl 8) or $ff} |
6581 | 276 |
end; |
277 |
gtShell: begin |
|
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
278 |
gear^.Elasticity:= _0_8; |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
279 |
gear^.Friction:= _0_8; |
6581 | 280 |
gear^.Radius:= 4; |
281 |
gear^.Density:= _1; |
|
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
282 |
gear^.AdvBounce:= 1; |
6581 | 283 |
end; |
284 |
gtSnowball: begin |
|
285 |
gear^.ImpactSound:= sndMudballImpact; |
|
286 |
gear^.nImpactSounds:= 1; |
|
287 |
gear^.Radius:= 4; |
|
288 |
gear^.Density:= _0_5; |
|
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
289 |
gear^.AdvBounce:= 1; |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
290 |
gear^.Elasticity:= _0_8; |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
291 |
gear^.Friction:= _0_8; |
6581 | 292 |
end; |
293 |
||
294 |
gtFlake: begin |
|
295 |
with Gear^ do |
|
296 |
begin |
|
297 |
Pos:= 0; |
|
298 |
Radius:= 1; |
|
7069 | 299 |
DirAngle:= random(360); |
6581 | 300 |
if State and gstTmpFlag = 0 then |
301 |
begin |
|
302 |
dx.isNegative:= GetRandom(2) = 0; |
|
9809 | 303 |
dx.QWordValue:= QWord($40DA) * GetRandom(10000) * 8; |
6581 | 304 |
dy.isNegative:= false; |
9809 | 305 |
dy.QWordValue:= QWord($3AD3) * GetRandom(7000) * 8; |
6581 | 306 |
if GetRandom(2) = 0 then |
10645
b8c73bacb31e
Fix in-flight colouring of land spray, make it use tint when added to land too (lua might find that handy), tweak climbhome cake delay slightly
nemo
parents:
10643
diff
changeset
|
307 |
dx := -dx; |
b8c73bacb31e
Fix in-flight colouring of land spray, make it use tint when added to land too (lua might find that handy), tweak climbhome cake delay slightly
nemo
parents:
10643
diff
changeset
|
308 |
Tint:= $FFFFFFFF |
b8c73bacb31e
Fix in-flight colouring of land spray, make it use tint when added to land too (lua might find that handy), tweak climbhome cake delay slightly
nemo
parents:
10643
diff
changeset
|
309 |
end |
b8c73bacb31e
Fix in-flight colouring of land spray, make it use tint when added to land too (lua might find that handy), tweak climbhome cake delay slightly
nemo
parents:
10643
diff
changeset
|
310 |
else |
b8c73bacb31e
Fix in-flight colouring of land spray, make it use tint when added to land too (lua might find that handy), tweak climbhome cake delay slightly
nemo
parents:
10643
diff
changeset
|
311 |
Tint:= (ExplosionBorderColor shr RShift and $FF shl 24) or |
b8c73bacb31e
Fix in-flight colouring of land spray, make it use tint when added to land too (lua might find that handy), tweak climbhome cake delay slightly
nemo
parents:
10643
diff
changeset
|
312 |
(ExplosionBorderColor shr GShift and $FF shl 16) or |
b8c73bacb31e
Fix in-flight colouring of land spray, make it use tint when added to land too (lua might find that handy), tweak climbhome cake delay slightly
nemo
parents:
10643
diff
changeset
|
313 |
(ExplosionBorderColor shr BShift and $FF shl 8) or $FF; |
6581 | 314 |
State:= State or gstInvisible; |
10625
125e120165aa
flake FrameTicks value of 0 now indicades that the frame should not be changed
sheepluva
parents:
10589
diff
changeset
|
315 |
// use health field to store current frameticks |
125e120165aa
flake FrameTicks value of 0 now indicades that the frame should not be changed
sheepluva
parents:
10589
diff
changeset
|
316 |
if vobFrameTicks > 0 then |
125e120165aa
flake FrameTicks value of 0 now indicades that the frame should not be changed
sheepluva
parents:
10589
diff
changeset
|
317 |
Health:= random(vobFrameTicks) |
125e120165aa
flake FrameTicks value of 0 now indicades that the frame should not be changed
sheepluva
parents:
10589
diff
changeset
|
318 |
else |
125e120165aa
flake FrameTicks value of 0 now indicades that the frame should not be changed
sheepluva
parents:
10589
diff
changeset
|
319 |
Health:= 0; |
125e120165aa
flake FrameTicks value of 0 now indicades that the frame should not be changed
sheepluva
parents:
10589
diff
changeset
|
320 |
// use timer to store currently displayed frame index |
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
321 |
if gear^.Timer = 0 then Timer:= random(vobFramesCount); |
10645
b8c73bacb31e
Fix in-flight colouring of land spray, make it use tint when added to land too (lua might find that handy), tweak climbhome cake delay slightly
nemo
parents:
10643
diff
changeset
|
322 |
Damage:= (random(2) * 2 - 1) * (vobVelocity + random(vobVelocity)) * 8 |
6581 | 323 |
end |
324 |
end; |
|
325 |
gtGrave: begin |
|
326 |
gear^.ImpactSound:= sndGraveImpact; |
|
327 |
gear^.nImpactSounds:= 1; |
|
328 |
gear^.Radius:= 10; |
|
329 |
gear^.Elasticity:= _0_6; |
|
330 |
end; |
|
331 |
gtBee: begin |
|
332 |
gear^.Radius:= 5; |
|
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
333 |
if gear^.Timer = 0 then gear^.Timer:= 500; |
6581 | 334 |
gear^.RenderTimer:= true; |
335 |
gear^.Elasticity:= _0_9; |
|
336 |
gear^.Tag:= 0; |
|
9479
167dea42d7d7
move border back a bit from left/right bounds, bee tweak
nemo
parents:
9195
diff
changeset
|
337 |
gear^.State:= Gear^.State or gstSubmersible |
6581 | 338 |
end; |
339 |
gtSeduction: begin |
|
340 |
gear^.Radius:= 250; |
|
341 |
end; |
|
342 |
gtShotgunShot: begin |
|
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
343 |
if gear^.Timer = 0 then gear^.Timer:= 900; |
6581 | 344 |
gear^.Radius:= 2 |
345 |
end; |
|
346 |
gtPickHammer: begin |
|
347 |
gear^.Radius:= 10; |
|
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
348 |
if gear^.Timer = 0 then gear^.Timer:= 4000 |
6581 | 349 |
end; |
350 |
gtHammerHit: begin |
|
351 |
gear^.Radius:= 8; |
|
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
352 |
if gear^.Timer = 0 then gear^.Timer:= 125 |
6581 | 353 |
end; |
354 |
gtRope: begin |
|
355 |
gear^.Radius:= 3; |
|
356 |
gear^.Friction:= _450 * _0_01 * cRopePercent; |
|
357 |
RopePoints.Count:= 0; |
|
10848 | 358 |
gear^.Tint:= $D8D8D8FF; |
359 |
gear^.Tag:= 0; // normal rope render |
|
6581 | 360 |
end; |
361 |
gtMine: begin |
|
362 |
gear^.ImpactSound:= sndMineImpact; |
|
363 |
gear^.nImpactSounds:= 1; |
|
364 |
gear^.Health:= 10; |
|
365 |
gear^.State:= gear^.State or gstMoving; |
|
366 |
gear^.Radius:= 2; |
|
367 |
gear^.Elasticity:= _0_55; |
|
368 |
gear^.Friction:= _0_995; |
|
7602
a620319d377e
Fix throwing things off rope, also make throwing things a bit more generic and gear density dependent (so you can throw mines further, and also throw dynamite a little).
nemo
parents:
7395
diff
changeset
|
369 |
gear^.Density:= _1; |
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
370 |
if gear^.Timer = 0 then |
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
371 |
begin |
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
372 |
if cMinesTime < 0 then |
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
373 |
gear^.Timer:= getrandom(51)*100 |
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
374 |
else |
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
375 |
gear^.Timer:= cMinesTime |
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
376 |
end |
6581 | 377 |
end; |
10789
acbf69e2e5cf
experiment with air mines. thought they could make shoppa... interesting. ToDo: Allow mines to give up, tweak distances, real graphics, toggle for whether they can acquire a new target while they haven't given up.
nemo
parents:
10663
diff
changeset
|
378 |
gtAirMine: begin |
acbf69e2e5cf
experiment with air mines. thought they could make shoppa... interesting. ToDo: Allow mines to give up, tweak distances, real graphics, toggle for whether they can acquire a new target while they haven't given up.
nemo
parents:
10663
diff
changeset
|
379 |
gear^.ImpactSound:= sndDenied; |
acbf69e2e5cf
experiment with air mines. thought they could make shoppa... interesting. ToDo: Allow mines to give up, tweak distances, real graphics, toggle for whether they can acquire a new target while they haven't given up.
nemo
parents:
10663
diff
changeset
|
380 |
gear^.nImpactSounds:= 1; |
acbf69e2e5cf
experiment with air mines. thought they could make shoppa... interesting. ToDo: Allow mines to give up, tweak distances, real graphics, toggle for whether they can acquire a new target while they haven't given up.
nemo
parents:
10663
diff
changeset
|
381 |
gear^.Health:= 30; |
10827 | 382 |
gear^.State:= gear^.State or gstMoving or gstNoGravity or gstSubmersible; |
10802
089e43d01f74
Use the larger scaled airmine sprite originally intended, add some antidickery measures.
nemo
parents:
10800
diff
changeset
|
383 |
gear^.Radius:= 8; |
10789
acbf69e2e5cf
experiment with air mines. thought they could make shoppa... interesting. ToDo: Allow mines to give up, tweak distances, real graphics, toggle for whether they can acquire a new target while they haven't given up.
nemo
parents:
10663
diff
changeset
|
384 |
gear^.Elasticity:= _0_55; |
acbf69e2e5cf
experiment with air mines. thought they could make shoppa... interesting. ToDo: Allow mines to give up, tweak distances, real graphics, toggle for whether they can acquire a new target while they haven't given up.
nemo
parents:
10663
diff
changeset
|
385 |
gear^.Friction:= _0_995; |
acbf69e2e5cf
experiment with air mines. thought they could make shoppa... interesting. ToDo: Allow mines to give up, tweak distances, real graphics, toggle for whether they can acquire a new target while they haven't given up.
nemo
parents:
10663
diff
changeset
|
386 |
gear^.Density:= _1; |
10791
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
387 |
gear^.Angle:= 175; // Radius at which air bombs will start "seeking". $FFFFFFFF = unlimited. check is skipped. |
10800 | 388 |
gear^.Power:= cMaxWindSpeed.QWordValue div 2; // hwFloat converted. 1/2 g default. defines the "seek" speed when a gear is in range. |
10828
9867dd60a66a
bit more friction. remove gstSubmersible clearing. was for the old "sea" thing that is totally gone now. As a general attribute, better to let other stuff clear it as needed.
nemo
parents:
10827
diff
changeset
|
389 |
gear^.Pos:= cMaxWindSpeed.QWordValue * 3 div 2; // air friction. slows it down when not hitting stuff |
10789
acbf69e2e5cf
experiment with air mines. thought they could make shoppa... interesting. ToDo: Allow mines to give up, tweak distances, real graphics, toggle for whether they can acquire a new target while they haven't given up.
nemo
parents:
10663
diff
changeset
|
390 |
gear^.Karma:= 30; // damage |
10805 | 391 |
if gear^.Timer = 0 then |
392 |
begin |
|
393 |
if cMinesTime < 0 then |
|
394 |
gear^.Timer:= getrandom(13)*100 |
|
395 |
else |
|
396 |
gear^.Timer:= cMinesTime div 4 |
|
397 |
end; |
|
398 |
gear^.WDTimer:= gear^.Timer |
|
10789
acbf69e2e5cf
experiment with air mines. thought they could make shoppa... interesting. ToDo: Allow mines to give up, tweak distances, real graphics, toggle for whether they can acquire a new target while they haven't given up.
nemo
parents:
10663
diff
changeset
|
399 |
end; |
6581 | 400 |
gtSMine: begin |
401 |
gear^.Health:= 10; |
|
402 |
gear^.State:= gear^.State or gstMoving; |
|
403 |
gear^.Radius:= 2; |
|
404 |
gear^.Elasticity:= _0_55; |
|
405 |
gear^.Friction:= _0_995; |
|
7602
a620319d377e
Fix throwing things off rope, also make throwing things a bit more generic and gear density dependent (so you can throw mines further, and also throw dynamite a little).
nemo
parents:
7395
diff
changeset
|
406 |
gear^.Density:= _1_6; |
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
407 |
gear^.AdvBounce:= 1; |
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
408 |
if gear^.Timer = 0 then gear^.Timer:= 500; |
6581 | 409 |
end; |
7733 | 410 |
gtKnife: begin |
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
411 |
gear^.AdvBounce:= 1; |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
412 |
gear^.Elasticity:= _0_8; |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
413 |
gear^.Friction:= _0_8; |
7754 | 414 |
gear^.Density:= _4; |
8494
53b91a602955
Cleaver tweaks based on feedback. Nerf damage, shrink radius. This means cleaver will embed into ground quite a bit further.
nemo
parents:
8161
diff
changeset
|
415 |
gear^.Radius:= 7 |
7733 | 416 |
end; |
6581 | 417 |
gtCase: begin |
418 |
gear^.ImpactSound:= sndGraveImpact; |
|
419 |
gear^.nImpactSounds:= 1; |
|
420 |
gear^.Radius:= 16; |
|
7168
8defaabce92e
warp sound when AI survival hog respawns. attempt at a bit of a crate spawn animation (moar sparkles and a quick fadein)
nemo
parents:
7093
diff
changeset
|
421 |
gear^.Elasticity:= _0_3; |
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
422 |
if gear^.Timer = 0 then gear^.Timer:= 500 |
6581 | 423 |
end; |
424 |
gtExplosives: begin |
|
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
425 |
gear^.AdvBounce:= 1; |
6581 | 426 |
gear^.ImpactSound:= sndGrenadeImpact; |
427 |
gear^.nImpactSounds:= 1; |
|
428 |
gear^.Radius:= 16; |
|
429 |
gear^.Elasticity:= _0_4; |
|
430 |
gear^.Friction:= _0_995; |
|
431 |
gear^.Density:= _6; |
|
432 |
gear^.Health:= cBarrelHealth; |
|
433 |
gear^.Z:= cHHZ-1 |
|
434 |
end; |
|
435 |
gtDEagleShot: begin |
|
436 |
gear^.Radius:= 1; |
|
437 |
gear^.Health:= 50 |
|
438 |
end; |
|
439 |
gtSniperRifleShot: begin |
|
440 |
gear^.Radius:= 1; |
|
441 |
gear^.Health:= 50 |
|
442 |
end; |
|
443 |
gtDynamite: begin |
|
444 |
gear^.Radius:= 3; |
|
445 |
gear^.Elasticity:= _0_55; |
|
446 |
gear^.Friction:= _0_03; |
|
447 |
gear^.Density:= _2; |
|
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
448 |
if gear^.Timer = 0 then gear^.Timer:= 5000; |
6581 | 449 |
end; |
450 |
gtCluster: begin |
|
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
451 |
gear^.AdvBounce:= 1; |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
452 |
gear^.Elasticity:= _0_8; |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
453 |
gear^.Friction:= _0_8; |
6581 | 454 |
gear^.Radius:= 2; |
455 |
gear^.Density:= _1_5; |
|
456 |
gear^.RenderTimer:= true |
|
457 |
end; |
|
458 |
gtShover: gear^.Radius:= 20; |
|
459 |
gtFlame: begin |
|
460 |
gear^.Tag:= GetRandom(32); |
|
461 |
gear^.Radius:= 1; |
|
462 |
gear^.Health:= 5; |
|
463 |
gear^.Density:= _1; |
|
10589
98ea597e5cd9
expose FlightTime to lua, disable in-air flame harming moving hogs ☹ aaaand override that in ClimbHome ☺
nemo
parents:
10518
diff
changeset
|
464 |
gear^.FlightTime:= 9999999; // determines whether in-air flames do damage. disabled by default |
6581 | 465 |
if (gear^.dY.QWordValue = 0) and (gear^.dX.QWordValue = 0) then |
466 |
begin |
|
7001 | 467 |
gear^.dY:= (getrandomf - _0_8) * _0_03; |
468 |
gear^.dX:= (getrandomf - _0_5) * _0_4 |
|
6581 | 469 |
end |
470 |
end; |
|
471 |
gtFirePunch: begin |
|
9824 | 472 |
if gear^.Timer = 0 then gear^.Timer:= 3000; |
6581 | 473 |
gear^.Radius:= 15; |
474 |
gear^.Tag:= Y |
|
475 |
end; |
|
10032
db65298717da
This adds idle hog tinting. Active hog tinting still needed.
nemo
parents:
9998
diff
changeset
|
476 |
gtAirAttack: begin |
11171 | 477 |
gear^.Health:= 6; |
11170
22d8835beb4d
Allow for arbitrary number of airstrike bombs and spacing.
nemo
parents:
11169
diff
changeset
|
478 |
gear^.Damage:= 30; |
10032
db65298717da
This adds idle hog tinting. Active hog tinting still needed.
nemo
parents:
9998
diff
changeset
|
479 |
gear^.Z:= cHHZ+2; |
db65298717da
This adds idle hog tinting. Active hog tinting still needed.
nemo
parents:
9998
diff
changeset
|
480 |
gear^.Tint:= gear^.Hedgehog^.Team^.Clan^.Color shl 8 or $FF |
db65298717da
This adds idle hog tinting. Active hog tinting still needed.
nemo
parents:
9998
diff
changeset
|
481 |
end; |
6581 | 482 |
gtAirBomb: begin |
10891
a4c454ef80a6
enable bounce on rubber for air bombs. give them the missing elasticity they needed for the code there to work properly.
nemo
parents:
10889
diff
changeset
|
483 |
gear^.AdvBounce:= 1; |
6581 | 484 |
gear^.Radius:= 5; |
485 |
gear^.Density:= _2; |
|
10891
a4c454ef80a6
enable bounce on rubber for air bombs. give them the missing elasticity they needed for the code there to work properly.
nemo
parents:
10889
diff
changeset
|
486 |
gear^.Elasticity:= _0_55; |
a4c454ef80a6
enable bounce on rubber for air bombs. give them the missing elasticity they needed for the code there to work properly.
nemo
parents:
10889
diff
changeset
|
487 |
gear^.Friction:= _0_995 |
6581 | 488 |
end; |
489 |
gtBlowTorch: begin |
|
490 |
gear^.Radius:= cHHRadius + cBlowTorchC; |
|
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
491 |
if gear^.Timer = 0 then gear^.Timer:= 7500 |
6581 | 492 |
end; |
493 |
gtSwitcher: begin |
|
494 |
gear^.Z:= cCurrHHZ |
|
495 |
end; |
|
496 |
gtTarget: begin |
|
497 |
gear^.ImpactSound:= sndGrenadeImpact; |
|
498 |
gear^.nImpactSounds:= 1; |
|
499 |
gear^.Radius:= 10; |
|
500 |
gear^.Elasticity:= _0_3; |
|
501 |
end; |
|
502 |
gtTardis: begin |
|
503 |
gear^.Pos:= 1; |
|
504 |
gear^.Z:= cCurrHHZ+1; |
|
505 |
end; |
|
506 |
gtMortar: begin |
|
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
507 |
gear^.AdvBounce:= 1; |
6581 | 508 |
gear^.Radius:= 4; |
509 |
gear^.Elasticity:= _0_2; |
|
510 |
gear^.Friction:= _0_08; |
|
511 |
gear^.Density:= _1; |
|
512 |
end; |
|
513 |
gtWhip: gear^.Radius:= 20; |
|
514 |
gtHammer: gear^.Radius:= 20; |
|
515 |
gtKamikaze: begin |
|
516 |
gear^.Health:= 2048; |
|
517 |
gear^.Radius:= 20 |
|
518 |
end; |
|
519 |
gtCake: begin |
|
520 |
gear^.Health:= 2048; |
|
521 |
gear^.Radius:= 7; |
|
522 |
gear^.Z:= cOnHHZ; |
|
10875 | 523 |
gear^.RenderTimer:= false; |
6581 | 524 |
gear^.DirAngle:= -90 * hwSign(Gear^.dX); |
525 |
if not dX.isNegative then |
|
526 |
gear^.Angle:= 1 |
|
527 |
else |
|
10874
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10848
diff
changeset
|
528 |
gear^.Angle:= 3; |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10848
diff
changeset
|
529 |
New(cakeData); |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10848
diff
changeset
|
530 |
gear^.Data:= Pointer(cakeData); |
6581 | 531 |
end; |
532 |
gtHellishBomb: begin |
|
533 |
gear^.ImpactSound:= sndHellishImpact1; |
|
534 |
gear^.nImpactSounds:= 4; |
|
535 |
gear^.AdvBounce:= 1; |
|
536 |
gear^.Radius:= 4; |
|
537 |
gear^.Elasticity:= _0_5; |
|
538 |
gear^.Friction:= _0_96; |
|
539 |
gear^.Density:= _1_5; |
|
540 |
gear^.RenderTimer:= true; |
|
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
541 |
if gear^.Timer = 0 then gear^.Timer:= 5000 |
6581 | 542 |
end; |
543 |
gtDrill: begin |
|
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
544 |
gear^.AdvBounce:= 1; |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
545 |
gear^.Elasticity:= _0_8; |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
546 |
gear^.Friction:= _0_8; |
6581 | 547 |
if gear^.Timer = 0 then |
548 |
gear^.Timer:= 5000; |
|
549 |
// Tag for drill strike. if 1 then first impact occured already |
|
550 |
gear^.Tag := 0; |
|
551 |
gear^.Radius:= 4; |
|
552 |
gear^.Density:= _1; |
|
553 |
end; |
|
554 |
gtBall: begin |
|
555 |
gear^.ImpactSound:= sndGrenadeImpact; |
|
556 |
gear^.nImpactSounds:= 1; |
|
557 |
gear^.AdvBounce:= 1; |
|
558 |
gear^.Radius:= 5; |
|
559 |
gear^.Tag:= random(8); |
|
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
560 |
if gear^.Timer = 0 then gear^.Timer:= 5000; |
6581 | 561 |
gear^.Elasticity:= _0_7; |
562 |
gear^.Friction:= _0_995; |
|
563 |
gear^.Density:= _1_5; |
|
564 |
end; |
|
565 |
gtBallgun: begin |
|
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
566 |
if gear^.Timer = 0 then gear^.Timer:= 5001; |
6581 | 567 |
end; |
568 |
gtRCPlane: begin |
|
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
569 |
if gear^.Timer = 0 then gear^.Timer:= 15000; |
6581 | 570 |
gear^.Health:= 3; |
10032
db65298717da
This adds idle hog tinting. Active hog tinting still needed.
nemo
parents:
9998
diff
changeset
|
571 |
gear^.Radius:= 8; |
db65298717da
This adds idle hog tinting. Active hog tinting still needed.
nemo
parents:
9998
diff
changeset
|
572 |
gear^.Tint:= gear^.Hedgehog^.Team^.Clan^.Color shl 8 or $FF |
6581 | 573 |
end; |
574 |
gtJetpack: begin |
|
575 |
gear^.Health:= 2000; |
|
8987
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8795
diff
changeset
|
576 |
gear^.Damage:= 100; |
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
577 |
gear^.State:= Gear^.State or gstSubmersible |
6581 | 578 |
end; |
579 |
gtMolotov: begin |
|
9825 | 580 |
gear^.AdvBounce:= 1; |
6581 | 581 |
gear^.Radius:= 6; |
9825 | 582 |
gear^.Density:= _2 |
6581 | 583 |
end; |
584 |
gtBirdy: begin |
|
585 |
gear^.Radius:= 16; // todo: check |
|
586 |
gear^.Health := 2000; |
|
9825 | 587 |
gear^.FlightTime := 2 |
6581 | 588 |
end; |
589 |
gtEgg: begin |
|
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
590 |
gear^.AdvBounce:= 1; |
6581 | 591 |
gear^.Radius:= 4; |
592 |
gear^.Elasticity:= _0_6; |
|
593 |
gear^.Friction:= _0_96; |
|
594 |
gear^.Density:= _1; |
|
595 |
if gear^.Timer = 0 then |
|
596 |
gear^.Timer:= 3000 |
|
597 |
end; |
|
598 |
gtPortal: begin |
|
599 |
gear^.ImpactSound:= sndMelonImpact; |
|
600 |
gear^.nImpactSounds:= 1; |
|
601 |
gear^.Radius:= 17; |
|
602 |
// set color |
|
603 |
gear^.Tag:= 2 * gear^.Timer; |
|
604 |
gear^.Timer:= 15000; |
|
605 |
gear^.RenderTimer:= false; |
|
606 |
gear^.Health:= 100; |
|
607 |
end; |
|
608 |
gtPiano: begin |
|
609 |
gear^.Radius:= 32; |
|
610 |
gear^.Density:= _50; |
|
611 |
end; |
|
612 |
gtSineGunShot: begin |
|
613 |
gear^.Radius:= 5; |
|
614 |
gear^.Health:= 6000; |
|
615 |
end; |
|
616 |
gtFlamethrower: begin |
|
617 |
gear^.Tag:= 10; |
|
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
618 |
if gear^.Timer = 0 then gear^.Timer:= 10; |
6581 | 619 |
gear^.Health:= 500; |
620 |
gear^.Damage:= 100; |
|
621 |
end; |
|
622 |
gtLandGun: begin |
|
623 |
gear^.Tag:= 10; |
|
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
624 |
if gear^.Timer = 0 then gear^.Timer:= 10; |
6581 | 625 |
gear^.Health:= 1000; |
626 |
gear^.Damage:= 100; |
|
627 |
end; |
|
628 |
gtPoisonCloud: begin |
|
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
629 |
if gear^.Timer = 0 then gear^.Timer:= 5000; |
6581 | 630 |
gear^.dY:= int2hwfloat(-4 + longint(getRandom(8))) / 1000; |
10032
db65298717da
This adds idle hog tinting. Active hog tinting still needed.
nemo
parents:
9998
diff
changeset
|
631 |
gear^.Tint:= $C0C000C0 |
6581 | 632 |
end; |
633 |
gtResurrector: begin |
|
634 |
gear^.Radius := 100; |
|
10032
db65298717da
This adds idle hog tinting. Active hog tinting still needed.
nemo
parents:
9998
diff
changeset
|
635 |
gear^.Tag := 0; |
db65298717da
This adds idle hog tinting. Active hog tinting still needed.
nemo
parents:
9998
diff
changeset
|
636 |
gear^.Tint:= $F5DB35FF |
6581 | 637 |
end; |
638 |
gtWaterUp: begin |
|
639 |
gear^.Tag := 47; |
|
640 |
end; |
|
641 |
gtNapalmBomb: begin |
|
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
642 |
gear^.Elasticity:= _0_8; |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9479
diff
changeset
|
643 |
gear^.Friction:= _0_8; |
9195
e653e96b0ec3
Many of the gears treat non-0 timer as overridden. Added that check in more places so that lua could use this a tiny bit more consistently. Also preserve state for jetpack.
nemo
parents:
9080
diff
changeset
|
644 |
if gear^.Timer = 0 then gear^.Timer:= 1000; |
6581 | 645 |
gear^.Radius:= 5; |
646 |
gear^.Density:= _1_5; |
|
647 |
end; |
|
8161 | 648 |
{ |
6581 | 649 |
gtStructure: begin |
650 |
gear^.Elasticity:= _0_55; |
|
651 |
gear^.Friction:= _0_995; |
|
652 |
gear^.Density:= _0_9; |
|
653 |
gear^.Radius:= 13; |
|
654 |
gear^.Health:= 200; |
|
655 |
gear^.Timer:= 0; |
|
656 |
gear^.Tag:= TotalRounds + 3; |
|
657 |
gear^.Pos:= 1; |
|
658 |
end; |
|
8161 | 659 |
} |
8774
39754516eee6
Try to document TGear a bit, so people know what is commonly overridden, and what stuff is used for. Remove gtIceGun-specific values from TGear and abuse a couple of commonly abused members instead.
nemo
parents:
8751
diff
changeset
|
660 |
gtIceGun: begin |
39754516eee6
Try to document TGear a bit, so people know what is commonly overridden, and what stuff is used for. Remove gtIceGun-specific values from TGear and abuse a couple of commonly abused members instead.
nemo
parents:
8751
diff
changeset
|
661 |
gear^.Health:= 1000; |
39754516eee6
Try to document TGear a bit, so people know what is commonly overridden, and what stuff is used for. Remove gtIceGun-specific values from TGear and abuse a couple of commonly abused members instead.
nemo
parents:
8751
diff
changeset
|
662 |
gear^.Radius:= 8; |
39754516eee6
Try to document TGear a bit, so people know what is commonly overridden, and what stuff is used for. Remove gtIceGun-specific values from TGear and abuse a couple of commonly abused members instead.
nemo
parents:
8751
diff
changeset
|
663 |
end; |
7389
15c3fb4882df
Sorry about the slight delay in pickup. You can blame a few lame cheaters. This is to make their cheating a bit harder.
nemo
parents:
7366
diff
changeset
|
664 |
gtGenericFaller:begin |
15c3fb4882df
Sorry about the slight delay in pickup. You can blame a few lame cheaters. This is to make their cheating a bit harder.
nemo
parents:
7366
diff
changeset
|
665 |
gear^.AdvBounce:= 1; |
15c3fb4882df
Sorry about the slight delay in pickup. You can blame a few lame cheaters. This is to make their cheating a bit harder.
nemo
parents:
7366
diff
changeset
|
666 |
gear^.Radius:= 1; |
15c3fb4882df
Sorry about the slight delay in pickup. You can blame a few lame cheaters. This is to make their cheating a bit harder.
nemo
parents:
7366
diff
changeset
|
667 |
gear^.Elasticity:= _0_9; |
15c3fb4882df
Sorry about the slight delay in pickup. You can blame a few lame cheaters. This is to make their cheating a bit harder.
nemo
parents:
7366
diff
changeset
|
668 |
gear^.Friction:= _0_995; |
15c3fb4882df
Sorry about the slight delay in pickup. You can blame a few lame cheaters. This is to make their cheating a bit harder.
nemo
parents:
7366
diff
changeset
|
669 |
gear^.Density:= _1; |
15c3fb4882df
Sorry about the slight delay in pickup. You can blame a few lame cheaters. This is to make their cheating a bit harder.
nemo
parents:
7366
diff
changeset
|
670 |
end; |
6581 | 671 |
end; |
672 |
||
673 |
InsertGearToList(gear); |
|
674 |
AddGear:= gear; |
|
675 |
||
676 |
ScriptCall('onGearAdd', gear^.uid); |
|
677 |
end; |
|
678 |
||
10646
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
679 |
procedure DeleteGear(Gear: PGear); |
6581 | 680 |
var team: PTeam; |
681 |
t,i: Longword; |
|
682 |
k: boolean; |
|
10874
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10848
diff
changeset
|
683 |
cakeData: PCakeData; |
11043
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
684 |
iterator: PGear; |
6581 | 685 |
begin |
686 |
||
687 |
ScriptCall('onGearDelete', gear^.uid); |
|
688 |
||
689 |
DeleteCI(Gear); |
|
690 |
||
10634
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10625
diff
changeset
|
691 |
FreeAndNilTexture(Gear^.Tex); |
6581 | 692 |
|
11043
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
693 |
// remove potential links to this gear |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
694 |
// currently relevant to: gears linked by hammer |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
695 |
if (Gear^.Kind = gtHedgehog) or (Gear^.Kind = gtMine) or (Gear^.Kind = gtExplosives) then |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
696 |
begin |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
697 |
// check all gears for stuff to port through |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
698 |
iterator := nil; |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
699 |
while true do |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
700 |
begin |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
701 |
|
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
702 |
// iterate through GearsList |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
703 |
if iterator = nil then |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
704 |
iterator := GearsList |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
705 |
else |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
706 |
iterator := iterator^.NextGear; |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
707 |
|
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
708 |
// end of list? |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
709 |
if iterator = nil then |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
710 |
break; |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
711 |
|
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
712 |
if iterator^.LinkedGear = Gear then |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
713 |
iterator^.LinkedGear:= nil; |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
714 |
end; |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
715 |
|
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
716 |
end; |
79a77bef4c61
Hammer had been accessing dangling pointers under particular circumstances (e.g. when hitting a mine/barrel right when it exploded)
sheepluva
parents:
11036
diff
changeset
|
717 |
|
6581 | 718 |
// make sure that portals have their link removed before deletion |
719 |
if (Gear^.Kind = gtPortal) then |
|
720 |
begin |
|
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7176
diff
changeset
|
721 |
if (Gear^.LinkedGear <> nil) then |
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7176
diff
changeset
|
722 |
if (Gear^.LinkedGear^.LinkedGear = Gear) then |
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7176
diff
changeset
|
723 |
Gear^.LinkedGear^.LinkedGear:= nil; |
6581 | 724 |
end |
10874
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10848
diff
changeset
|
725 |
else if Gear^.Kind = gtCake then |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10848
diff
changeset
|
726 |
begin |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10848
diff
changeset
|
727 |
cakeData:= PCakeData(Gear^.Data); |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10848
diff
changeset
|
728 |
Dispose(cakeData); |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10848
diff
changeset
|
729 |
cakeData:= nil; |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10848
diff
changeset
|
730 |
end |
6581 | 731 |
else if Gear^.Kind = gtHedgehog then |
732 |
(* |
|
733 |
This behaviour dates back to revision 4, and I accidentally encountered it with TARDIS. I don't think it must apply to any modern weapon, since if it was actually hit, the best the gear could do would be to destroy itself immediately, and you'd still end up with two graves. I believe it should be removed |
|
734 |
if (CurAmmoGear <> nil) and (CurrentHedgehog^.Gear = Gear) then |
|
735 |
begin |
|
736 |
AttackBar:= 0; |
|
737 |
Gear^.Message:= gmDestroy; |
|
738 |
CurAmmoGear^.Message:= gmDestroy; |
|
739 |
exit |
|
740 |
end |
|
741 |
else*) |
|
742 |
begin |
|
10646
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
743 |
if ((CurrentHedgehog = nil) or (Gear <> CurrentHedgehog^.Gear)) or (CurAmmoGear = nil) or (CurAmmoGear^.Kind <> gtKamikaze) then |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
744 |
Gear^.Hedgehog^.Team^.Clan^.Flawless:= false; |
10663
9bbb29d2bd68
remove a not that somehow magically appeared in a prior commit.
nemo
parents:
10646
diff
changeset
|
745 |
if CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y)) then |
6581 | 746 |
begin |
10646
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
747 |
t:= max(Gear^.Damage, Gear^.Health); |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
748 |
Gear^.Damage:= t; |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
749 |
if (((not SuddenDeathDmg) and (WaterOpacity < $FF)) or (SuddenDeathDmg and (SDWaterOpacity < $FF))) then |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
750 |
spawnHealthTagForHH(Gear, t); |
6581 | 751 |
end; |
752 |
||
10646
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
753 |
team:= Gear^.Hedgehog^.Team; |
10636
aba9ae27ead0
meh. will persevere. DeleteGear can't call that much stuff...
nemo
parents:
10634
diff
changeset
|
754 |
if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear = Gear) then |
6581 | 755 |
begin |
756 |
AttackBar:= 0; |
|
757 |
FreeActionsList; // to avoid ThinkThread on drawned gear |
|
758 |
if ((Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NoRoundEnd) <> 0) |
|
759 |
and (CurrentHedgehog^.MultiShootAttacks > 0) then |
|
760 |
OnUsedAmmo(CurrentHedgehog^); |
|
761 |
end; |
|
762 |
||
763 |
Gear^.Hedgehog^.Gear:= nil; |
|
10646
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
764 |
|
6581 | 765 |
if Gear^.Hedgehog^.King then |
766 |
begin |
|
767 |
// are there any other kings left? Just doing nil check. Presumably a mortally wounded king will get reaped soon enough |
|
768 |
k:= false; |
|
769 |
for i:= 0 to Pred(team^.Clan^.TeamsNumber) do |
|
770 |
if (team^.Clan^.Teams[i]^.Hedgehogs[0].Gear <> nil) then |
|
771 |
k:= true; |
|
772 |
if not k then |
|
773 |
for i:= 0 to Pred(team^.Clan^.TeamsNumber) do |
|
11002
01c8e95d2265
remove teamgone. desyncs now. less interesting without the animation, perhaps something should be flagged to replace it
nemo
parents:
10891
diff
changeset
|
774 |
with team^.Clan^.Teams[i]^ do |
01c8e95d2265
remove teamgone. desyncs now. less interesting without the animation, perhaps something should be flagged to replace it
nemo
parents:
10891
diff
changeset
|
775 |
for t:= 0 to cMaxHHIndex do |
01c8e95d2265
remove teamgone. desyncs now. less interesting without the animation, perhaps something should be flagged to replace it
nemo
parents:
10891
diff
changeset
|
776 |
if Hedgehogs[t].Gear <> nil then |
01c8e95d2265
remove teamgone. desyncs now. less interesting without the animation, perhaps something should be flagged to replace it
nemo
parents:
10891
diff
changeset
|
777 |
Hedgehogs[t].Gear^.Health:= 0 |
01c8e95d2265
remove teamgone. desyncs now. less interesting without the animation, perhaps something should be flagged to replace it
nemo
parents:
10891
diff
changeset
|
778 |
else if (Hedgehogs[t].GearHidden <> nil) then |
01c8e95d2265
remove teamgone. desyncs now. less interesting without the animation, perhaps something should be flagged to replace it
nemo
parents:
10891
diff
changeset
|
779 |
Hedgehogs[t].GearHidden^.Health:= 0 // hog is still hidden. if tardis should return though, lua, eh... |
6581 | 780 |
end; |
10646
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
781 |
|
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
782 |
// should be not CurrentHedgehog, but hedgehog of the last gear which caused damage to this hog |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
783 |
// same stand for CheckHHDamage |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
784 |
if (Gear^.LastDamage <> nil) and (CurrentHedgehog <> nil) then |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
785 |
uStats.HedgehogDamaged(Gear, Gear^.LastDamage, 0, true) |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
786 |
else if CurrentHedgehog <> nil then |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
787 |
uStats.HedgehogDamaged(Gear, CurrentHedgehog, 0, true); |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
788 |
|
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
789 |
inc(KilledHHs); |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
790 |
RecountTeamHealth(team); |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
791 |
if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Effects[heResurrectable] <> 0) and |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
792 |
//(Gear^.Hedgehog^.Effects[heResurrectable] = 0) then |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
793 |
(Gear^.Hedgehog^.Team^.Clan <> CurrentHedgehog^.Team^.Clan) then |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
794 |
with CurrentHedgehog^ do |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
795 |
begin |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
796 |
inc(Team^.stats.AIKills); |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
797 |
FreeAndNilTexture(Team^.AIKillsTex); |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
798 |
Team^.AIKillsTex := RenderStringTex(ansistring(inttostr(Team^.stats.AIKills)), Team^.Clan^.Color, fnt16); |
0be6442946b1
put back the old uteams cleanup, leaks and all, to worry about post-release since my attempt to use DeleteGear was running into the fact that that procedure does way more than just delete a gear. might need an explicit cleanup routine for both to call.
nemo
parents:
10645
diff
changeset
|
799 |
end |
6581 | 800 |
end; |
801 |
with Gear^ do |
|
7389
15c3fb4882df
Sorry about the slight delay in pickup. You can blame a few lame cheaters. This is to make their cheating a bit harder.
nemo
parents:
7366
diff
changeset
|
802 |
begin |
6581 | 803 |
AddFileLog('Delete: #' + inttostr(uid) + ' (' + inttostr(hwRound(x)) + ',' + inttostr(hwRound(y)) + '), d(' + floattostr(dX) + ',' + floattostr(dY) + ') type = ' + EnumToStr(Kind)); |
7389
15c3fb4882df
Sorry about the slight delay in pickup. You can blame a few lame cheaters. This is to make their cheating a bit harder.
nemo
parents:
7366
diff
changeset
|
804 |
AddRandomness(X.round xor X.frac xor dX.round xor dX.frac xor Y.round xor Y.frac xor dY.round xor dY.frac) |
15c3fb4882df
Sorry about the slight delay in pickup. You can blame a few lame cheaters. This is to make their cheating a bit harder.
nemo
parents:
7366
diff
changeset
|
805 |
end; |
6581 | 806 |
if CurAmmoGear = Gear then |
807 |
CurAmmoGear:= nil; |
|
808 |
if FollowGear = Gear then |
|
809 |
FollowGear:= nil; |
|
810 |
if lastGearByUID = Gear then |
|
811 |
lastGearByUID := nil; |
|
10638 | 812 |
if (Gear^.Hedgehog = nil) or (Gear^.Hedgehog^.GearHidden <> Gear) then // hidden hedgehogs shouldn't be in the list |
10639 | 813 |
RemoveGearFromList(Gear) |
814 |
else Gear^.Hedgehog^.GearHidden:= nil; |
|
10638 | 815 |
|
6581 | 816 |
Dispose(Gear) |
817 |
end; |
|
818 |
||
819 |
end. |