author | koda |
Wed, 08 Jan 2014 18:57:23 +0100 | |
changeset 9957 | 7a62f31895ac |
parent 9825 | de0da12b7d0e |
child 9950 | 2759212a27de |
child 9998 | 736015b847e3 |
permissions | -rw-r--r-- |
6581 | 1 |
(* |
2 |
* Hedgewars, a free turn based strategy game |
|
9080 | 3 |
* Copyright (c) 2004-2013 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 |
|
16 |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA |
|
17 |
*) |
|
18 |
||
19 |
{$INCLUDE "options.inc"} |
|
20 |
unit uGearsList; |
|
21 |
||
22 |
interface |
|
23 |
uses uFloat, uTypes; |
|
24 |
||
25 |
function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer: LongWord): PGear; |
|
26 |
procedure DeleteGear(Gear: PGear); |
|
27 |
procedure InsertGearToList(Gear: PGear); |
|
28 |
procedure RemoveGearFromList(Gear: PGear); |
|
29 |
||
7395 | 30 |
var curHandledGear: PGear; |
31 |
||
6581 | 32 |
implementation |
33 |
||
34 |
uses uRandom, uUtils, uConsts, uVariables, uAmmos, uTeams, uStats, |
|
35 |
uTextures, uScript, uRenderUtils, uAI, uCollisions, |
|
7395 | 36 |
uGearsRender, uGearsUtils, uDebug; |
6581 | 37 |
|
8145
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
38 |
const |
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
39 |
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
|
40 |
(* gtFlame *) amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
41 |
(* gtHedgehog *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
42 |
(* gtMine *) , amMine |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
43 |
(* gtCase *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
44 |
(* gtExplosives *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
45 |
(* gtGrenade *) , amGrenade |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
46 |
(* gtShell *) , amBazooka |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
47 |
(* gtGrave *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
48 |
(* gtBee *) , amBee |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
49 |
(* gtShotgunShot *) , amShotgun |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
50 |
(* gtPickHammer *) , amPickHammer |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
51 |
(* gtRope *) , amRope |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
52 |
(* gtDEagleShot *) , amDEagle |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
53 |
(* gtDynamite *) , amDynamite |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
54 |
(* gtClusterBomb *) , amClusterBomb |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
55 |
(* gtCluster *) , amClusterBomb |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
56 |
(* 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
|
57 |
(* gtFirePunch *) , amFirePunch |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
58 |
(* gtATStartGame *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
59 |
(* gtATFinishGame *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
60 |
(* gtParachute *) , amParachute |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
61 |
(* gtAirAttack *) , amAirAttack |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
62 |
(* gtAirBomb *) , amAirAttack |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
63 |
(* gtBlowTorch *) , amBlowTorch |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
64 |
(* gtGirder *) , amGirder |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
65 |
(* gtTeleport *) , amTeleport |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
66 |
(* gtSwitcher *) , amSwitch |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
67 |
(* gtTarget *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
68 |
(* gtMortar *) , amMortar |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
69 |
(* gtWhip *) , amWhip |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
70 |
(* gtKamikaze *) , amKamikaze |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
71 |
(* gtCake *) , amCake |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
72 |
(* gtSeduction *) , amSeduction |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
73 |
(* gtWatermelon *) , amWatermelon |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
74 |
(* gtMelonPiece *) , amWatermelon |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
75 |
(* gtHellishBomb *) , amHellishBomb |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
76 |
(* gtWaterUp *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
77 |
(* gtDrill *) , amDrill |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
78 |
(* gtBallGun *) , amBallgun |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
79 |
(* gtBall *) , amBallgun |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
80 |
(* gtRCPlane *) , amRCPlane |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
81 |
(*gtSniperRifleShot *) , amSniperRifle |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
82 |
(* gtJetpack *) , amJetpack |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
83 |
(* gtMolotov *) , amMolotov |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
84 |
(* gtBirdy *) , amBirdy |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
85 |
(* gtEgg *) , amBirdy |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
86 |
(* gtPortal *) , amPortalGun |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
87 |
(* gtPiano *) , amPiano |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
88 |
(* gtGasBomb *) , amGasBomb |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
89 |
(* gtSineGunShot *) , amSineGun |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
90 |
(* gtFlamethrower *) , amFlamethrower |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
91 |
(* gtSMine *) , amSMine |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
92 |
(* gtPoisonCloud *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
93 |
(* gtHammer *) , amHammer |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
94 |
(* gtHammerHit *) , amHammer |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
95 |
(* gtResurrector *) , amResurrector |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
96 |
(* gtPoisonCloud *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
97 |
(* gtSnowball *) , amSnowball |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
98 |
(* gtFlake *) , amNothing |
8161 | 99 |
//(* 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
|
100 |
(* gtLandGun *) , amLandGun |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
101 |
(* gtTardis *) , amTardis |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
102 |
(* gtIceGun *) , amIceGun |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
103 |
(* gtAddAmmo *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
104 |
(* gtGenericFaller *) , amNothing |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
105 |
(* gtKnife *) , amKnife |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
106 |
); |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
107 |
|
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
108 |
|
7093 | 109 |
var GCounter: LongWord = 0; // this does not get re-initialized, but should be harmless |
7028 | 110 |
|
8145
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
111 |
const |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
112 |
cUsualZ = 500; |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
113 |
cOnHHZ = 2000; |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
7754
diff
changeset
|
114 |
|
6581 | 115 |
procedure InsertGearToList(Gear: PGear); |
116 |
var tmp, ptmp: PGear; |
|
117 |
begin |
|
118 |
tmp:= GearsList; |
|
119 |
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
|
120 |
while (tmp <> nil) and (tmp^.Z < Gear^.Z) do |
6581 | 121 |
begin |
122 |
ptmp:= tmp; |
|
123 |
tmp:= tmp^.NextGear |
|
124 |
end; |
|
125 |
||
126 |
if ptmp <> tmp then |
|
127 |
begin |
|
128 |
Gear^.NextGear:= ptmp^.NextGear; |
|
129 |
Gear^.PrevGear:= ptmp; |
|
130 |
if ptmp^.NextGear <> nil then |
|
131 |
ptmp^.NextGear^.PrevGear:= Gear; |
|
132 |
ptmp^.NextGear:= Gear |
|
133 |
end |
|
134 |
else |
|
135 |
begin |
|
136 |
Gear^.NextGear:= GearsList; |
|
137 |
if Gear^.NextGear <> nil then |
|
138 |
Gear^.NextGear^.PrevGear:= Gear; |
|
139 |
GearsList:= Gear; |
|
140 |
end; |
|
141 |
end; |
|
142 |
||
7395 | 143 |
|
6581 | 144 |
procedure RemoveGearFromList(Gear: PGear); |
145 |
begin |
|
7395 | 146 |
TryDo((curHandledGear = nil) or (Gear = curHandledGear), 'You''re doing it wrong', true); |
147 |
||
6581 | 148 |
if Gear^.NextGear <> nil then |
149 |
Gear^.NextGear^.PrevGear:= Gear^.PrevGear; |
|
150 |
if Gear^.PrevGear <> nil then |
|
151 |
Gear^.PrevGear^.NextGear:= Gear^.NextGear |
|
152 |
else |
|
153 |
GearsList:= Gear^.NextGear |
|
154 |
end; |
|
7395 | 155 |
|
156 |
||
6581 | 157 |
function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer: LongWord): PGear; |
158 |
var gear: PGear; |
|
159 |
begin |
|
7028 | 160 |
inc(GCounter); |
161 |
AddFileLog('AddGear: #' + inttostr(GCounter) + ' (' + inttostr(x) + ',' + inttostr(y) + '), d(' + floattostr(dX) + ',' + floattostr(dY) + ') type = ' + EnumToStr(Kind)); |
|
6581 | 162 |
|
163 |
New(gear); |
|
164 |
FillChar(gear^, sizeof(TGear), 0); |
|
165 |
gear^.X:= int2hwFloat(X); |
|
166 |
gear^.Y:= int2hwFloat(Y); |
|
167 |
gear^.Target.X:= NoPointX; |
|
168 |
gear^.Kind := Kind; |
|
169 |
gear^.State:= State; |
|
170 |
gear^.Active:= true; |
|
171 |
gear^.dX:= dX; |
|
172 |
gear^.dY:= dY; |
|
173 |
gear^.doStep:= doStepHandlers[Kind]; |
|
174 |
gear^.CollisionIndex:= -1; |
|
175 |
gear^.Timer:= Timer; |
|
7028 | 176 |
gear^.uid:= GCounter; |
6581 | 177 |
gear^.SoundChannel:= -1; |
178 |
gear^.ImpactSound:= sndNone; |
|
179 |
gear^.Density:= _1; |
|
180 |
// Define ammo association, if any. |
|
181 |
gear^.AmmoType:= GearKindAmmoTypeMap[Kind]; |
|
7730
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7726
diff
changeset
|
182 |
gear^.CollisionMask:= $FFFF; |
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7176
diff
changeset
|
183 |
|
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
184 |
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
|
185 |
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
|
186 |
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
|
187 |
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
|
188 |
gear^.CollisionMask:= lfNotCurrentMask |
7730
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7726
diff
changeset
|
189 |
end; |
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7176
diff
changeset
|
190 |
|
7364 | 191 |
if (Ammoz[Gear^.AmmoType].Ammo.Propz and ammoprop_NeedTarget <> 0) then |
6581 | 192 |
gear^.Z:= cHHZ+1 |
193 |
else gear^.Z:= cUsualZ; |
|
194 |
||
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
195 |
|
6581 | 196 |
case Kind of |
197 |
gtGrenade, |
|
198 |
gtClusterBomb, |
|
199 |
gtGasBomb: begin |
|
200 |
gear^.ImpactSound:= sndGrenadeImpact; |
|
201 |
gear^.nImpactSounds:= 1; |
|
202 |
gear^.AdvBounce:= 1; |
|
203 |
gear^.Radius:= 5; |
|
204 |
gear^.Elasticity:= _0_8; |
|
205 |
gear^.Friction:= _0_8; |
|
206 |
gear^.Density:= _1_5; |
|
207 |
gear^.RenderTimer:= true; |
|
208 |
if gear^.Timer = 0 then |
|
209 |
gear^.Timer:= 3000 |
|
210 |
end; |
|
211 |
gtWatermelon: begin |
|
212 |
gear^.ImpactSound:= sndMelonImpact; |
|
213 |
gear^.nImpactSounds:= 1; |
|
214 |
gear^.AdvBounce:= 1; |
|
215 |
gear^.Radius:= 6; |
|
216 |
gear^.Elasticity:= _0_8; |
|
217 |
gear^.Friction:= _0_995; |
|
218 |
gear^.Density:= _2; |
|
219 |
gear^.RenderTimer:= true; |
|
220 |
if gear^.Timer = 0 then |
|
221 |
gear^.Timer:= 3000 |
|
222 |
end; |
|
223 |
gtMelonPiece: begin |
|
9825 | 224 |
gear^.AdvBounce:= 1; |
225 |
gear^.Density:= _2 |
|
6581 | 226 |
end; |
227 |
gtHedgehog: begin |
|
228 |
gear^.AdvBounce:= 1; |
|
229 |
gear^.Radius:= cHHRadius; |
|
230 |
gear^.Elasticity:= _0_35; |
|
231 |
gear^.Friction:= _0_999; |
|
232 |
gear^.Angle:= cMaxAngle div 2; |
|
233 |
gear^.Density:= _3; |
|
234 |
gear^.Z:= cHHZ; |
|
235 |
if (GameFlags and gfAISurvival) <> 0 then |
|
236 |
if gear^.Hedgehog^.BotLevel > 0 then |
|
7077 | 237 |
gear^.Hedgehog^.Effects[heResurrectable] := 1; |
6581 | 238 |
end; |
239 |
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
|
240 |
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
|
241 |
gear^.Friction:= _0_8; |
6581 | 242 |
gear^.Radius:= 4; |
243 |
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
|
244 |
gear^.AdvBounce:= 1; |
6581 | 245 |
end; |
246 |
gtSnowball: begin |
|
247 |
gear^.ImpactSound:= sndMudballImpact; |
|
248 |
gear^.nImpactSounds:= 1; |
|
249 |
gear^.Radius:= 4; |
|
250 |
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
|
251 |
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
|
252 |
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
|
253 |
gear^.Friction:= _0_8; |
6581 | 254 |
end; |
255 |
||
256 |
gtFlake: begin |
|
257 |
with Gear^ do |
|
258 |
begin |
|
259 |
Pos:= 0; |
|
260 |
Radius:= 1; |
|
7069 | 261 |
DirAngle:= random(360); |
6581 | 262 |
if State and gstTmpFlag = 0 then |
263 |
begin |
|
264 |
dx.isNegative:= GetRandom(2) = 0; |
|
9809 | 265 |
dx.QWordValue:= QWord($40DA) * GetRandom(10000) * 8; |
6581 | 266 |
dy.isNegative:= false; |
9809 | 267 |
dy.QWordValue:= QWord($3AD3) * GetRandom(7000) * 8; |
6581 | 268 |
if GetRandom(2) = 0 then |
269 |
dx := -dx |
|
270 |
end; |
|
271 |
State:= State or gstInvisible; |
|
272 |
Health:= random(vobFrameTicks); |
|
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
|
273 |
if gear^.Timer = 0 then Timer:= random(vobFramesCount); |
7649 | 274 |
Damage:= (random(2) * 2 - 1) * (vobVelocity + random(vobVelocity)) * 8; |
6581 | 275 |
end |
276 |
end; |
|
277 |
gtGrave: begin |
|
278 |
gear^.ImpactSound:= sndGraveImpact; |
|
279 |
gear^.nImpactSounds:= 1; |
|
280 |
gear^.Radius:= 10; |
|
281 |
gear^.Elasticity:= _0_6; |
|
282 |
end; |
|
283 |
gtBee: begin |
|
284 |
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
|
285 |
if gear^.Timer = 0 then gear^.Timer:= 500; |
6581 | 286 |
gear^.RenderTimer:= true; |
287 |
gear^.Elasticity:= _0_9; |
|
288 |
gear^.Tag:= 0; |
|
9479
167dea42d7d7
move border back a bit from left/right bounds, bee tweak
nemo
parents:
9195
diff
changeset
|
289 |
gear^.State:= Gear^.State or gstSubmersible |
6581 | 290 |
end; |
291 |
gtSeduction: begin |
|
292 |
gear^.Radius:= 250; |
|
293 |
end; |
|
294 |
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
|
295 |
if gear^.Timer = 0 then gear^.Timer:= 900; |
6581 | 296 |
gear^.Radius:= 2 |
297 |
end; |
|
298 |
gtPickHammer: begin |
|
299 |
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
|
300 |
if gear^.Timer = 0 then gear^.Timer:= 4000 |
6581 | 301 |
end; |
302 |
gtHammerHit: begin |
|
303 |
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
|
304 |
if gear^.Timer = 0 then gear^.Timer:= 125 |
6581 | 305 |
end; |
306 |
gtRope: begin |
|
307 |
gear^.Radius:= 3; |
|
308 |
gear^.Friction:= _450 * _0_01 * cRopePercent; |
|
309 |
RopePoints.Count:= 0; |
|
310 |
end; |
|
311 |
gtMine: begin |
|
312 |
gear^.ImpactSound:= sndMineImpact; |
|
313 |
gear^.nImpactSounds:= 1; |
|
314 |
gear^.Health:= 10; |
|
315 |
gear^.State:= gear^.State or gstMoving; |
|
316 |
gear^.Radius:= 2; |
|
317 |
gear^.Elasticity:= _0_55; |
|
318 |
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
|
319 |
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
|
320 |
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
|
321 |
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
|
322 |
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
|
323 |
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
|
324 |
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
|
325 |
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
|
326 |
end |
6581 | 327 |
end; |
328 |
gtSMine: begin |
|
329 |
gear^.Health:= 10; |
|
330 |
gear^.State:= gear^.State or gstMoving; |
|
331 |
gear^.Radius:= 2; |
|
332 |
gear^.Elasticity:= _0_55; |
|
333 |
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
|
334 |
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
|
335 |
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
|
336 |
if gear^.Timer = 0 then gear^.Timer:= 500; |
6581 | 337 |
end; |
7733 | 338 |
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
|
339 |
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
|
340 |
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
|
341 |
gear^.Friction:= _0_8; |
7754 | 342 |
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
|
343 |
gear^.Radius:= 7 |
7733 | 344 |
end; |
6581 | 345 |
gtCase: begin |
346 |
gear^.ImpactSound:= sndGraveImpact; |
|
347 |
gear^.nImpactSounds:= 1; |
|
348 |
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
|
349 |
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
|
350 |
if gear^.Timer = 0 then gear^.Timer:= 500 |
6581 | 351 |
end; |
352 |
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
|
353 |
gear^.AdvBounce:= 1; |
6581 | 354 |
gear^.ImpactSound:= sndGrenadeImpact; |
355 |
gear^.nImpactSounds:= 1; |
|
356 |
gear^.Radius:= 16; |
|
357 |
gear^.Elasticity:= _0_4; |
|
358 |
gear^.Friction:= _0_995; |
|
359 |
gear^.Density:= _6; |
|
360 |
gear^.Health:= cBarrelHealth; |
|
361 |
gear^.Z:= cHHZ-1 |
|
362 |
end; |
|
363 |
gtDEagleShot: begin |
|
364 |
gear^.Radius:= 1; |
|
365 |
gear^.Health:= 50 |
|
366 |
end; |
|
367 |
gtSniperRifleShot: begin |
|
368 |
gear^.Radius:= 1; |
|
369 |
gear^.Health:= 50 |
|
370 |
end; |
|
371 |
gtDynamite: begin |
|
372 |
gear^.Radius:= 3; |
|
373 |
gear^.Elasticity:= _0_55; |
|
374 |
gear^.Friction:= _0_03; |
|
375 |
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
|
376 |
if gear^.Timer = 0 then gear^.Timer:= 5000; |
6581 | 377 |
end; |
378 |
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
|
379 |
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
|
380 |
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
|
381 |
gear^.Friction:= _0_8; |
6581 | 382 |
gear^.Radius:= 2; |
383 |
gear^.Density:= _1_5; |
|
384 |
gear^.RenderTimer:= true |
|
385 |
end; |
|
386 |
gtShover: gear^.Radius:= 20; |
|
387 |
gtFlame: begin |
|
388 |
gear^.Tag:= GetRandom(32); |
|
389 |
gear^.Radius:= 1; |
|
390 |
gear^.Health:= 5; |
|
391 |
gear^.Density:= _1; |
|
392 |
if (gear^.dY.QWordValue = 0) and (gear^.dX.QWordValue = 0) then |
|
393 |
begin |
|
7001 | 394 |
gear^.dY:= (getrandomf - _0_8) * _0_03; |
395 |
gear^.dX:= (getrandomf - _0_5) * _0_4 |
|
6581 | 396 |
end |
397 |
end; |
|
398 |
gtFirePunch: begin |
|
9824 | 399 |
if gear^.Timer = 0 then gear^.Timer:= 3000; |
6581 | 400 |
gear^.Radius:= 15; |
401 |
gear^.Tag:= Y |
|
402 |
end; |
|
7364 | 403 |
gtAirAttack: gear^.Z:= cHHZ+2; |
6581 | 404 |
gtAirBomb: begin |
405 |
gear^.Radius:= 5; |
|
406 |
gear^.Density:= _2; |
|
407 |
end; |
|
408 |
gtBlowTorch: begin |
|
409 |
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
|
410 |
if gear^.Timer = 0 then gear^.Timer:= 7500 |
6581 | 411 |
end; |
412 |
gtSwitcher: begin |
|
413 |
gear^.Z:= cCurrHHZ |
|
414 |
end; |
|
415 |
gtTarget: begin |
|
416 |
gear^.ImpactSound:= sndGrenadeImpact; |
|
417 |
gear^.nImpactSounds:= 1; |
|
418 |
gear^.Radius:= 10; |
|
419 |
gear^.Elasticity:= _0_3; |
|
420 |
end; |
|
421 |
gtTardis: begin |
|
422 |
gear^.Pos:= 1; |
|
423 |
gear^.Z:= cCurrHHZ+1; |
|
424 |
end; |
|
425 |
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
|
426 |
gear^.AdvBounce:= 1; |
6581 | 427 |
gear^.Radius:= 4; |
428 |
gear^.Elasticity:= _0_2; |
|
429 |
gear^.Friction:= _0_08; |
|
430 |
gear^.Density:= _1; |
|
431 |
end; |
|
432 |
gtWhip: gear^.Radius:= 20; |
|
433 |
gtHammer: gear^.Radius:= 20; |
|
434 |
gtKamikaze: begin |
|
435 |
gear^.Health:= 2048; |
|
436 |
gear^.Radius:= 20 |
|
437 |
end; |
|
438 |
gtCake: begin |
|
439 |
gear^.Health:= 2048; |
|
440 |
gear^.Radius:= 7; |
|
441 |
gear^.Z:= cOnHHZ; |
|
442 |
gear^.RenderTimer:= true; |
|
443 |
gear^.DirAngle:= -90 * hwSign(Gear^.dX); |
|
444 |
if not dX.isNegative then |
|
445 |
gear^.Angle:= 1 |
|
446 |
else |
|
447 |
gear^.Angle:= 3 |
|
448 |
end; |
|
449 |
gtHellishBomb: begin |
|
450 |
gear^.ImpactSound:= sndHellishImpact1; |
|
451 |
gear^.nImpactSounds:= 4; |
|
452 |
gear^.AdvBounce:= 1; |
|
453 |
gear^.Radius:= 4; |
|
454 |
gear^.Elasticity:= _0_5; |
|
455 |
gear^.Friction:= _0_96; |
|
456 |
gear^.Density:= _1_5; |
|
457 |
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
|
458 |
if gear^.Timer = 0 then gear^.Timer:= 5000 |
6581 | 459 |
end; |
460 |
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
|
461 |
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
|
462 |
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
|
463 |
gear^.Friction:= _0_8; |
6581 | 464 |
if gear^.Timer = 0 then |
465 |
gear^.Timer:= 5000; |
|
466 |
// Tag for drill strike. if 1 then first impact occured already |
|
467 |
gear^.Tag := 0; |
|
468 |
gear^.Radius:= 4; |
|
469 |
gear^.Density:= _1; |
|
470 |
end; |
|
471 |
gtBall: begin |
|
472 |
gear^.ImpactSound:= sndGrenadeImpact; |
|
473 |
gear^.nImpactSounds:= 1; |
|
474 |
gear^.AdvBounce:= 1; |
|
475 |
gear^.Radius:= 5; |
|
476 |
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
|
477 |
if gear^.Timer = 0 then gear^.Timer:= 5000; |
6581 | 478 |
gear^.Elasticity:= _0_7; |
479 |
gear^.Friction:= _0_995; |
|
480 |
gear^.Density:= _1_5; |
|
481 |
end; |
|
482 |
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
|
483 |
if gear^.Timer = 0 then gear^.Timer:= 5001; |
6581 | 484 |
end; |
485 |
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
|
486 |
if gear^.Timer = 0 then gear^.Timer:= 15000; |
6581 | 487 |
gear^.Health:= 3; |
488 |
gear^.Radius:= 8 |
|
489 |
end; |
|
490 |
gtJetpack: begin |
|
491 |
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
|
492 |
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
|
493 |
gear^.State:= Gear^.State or gstSubmersible |
6581 | 494 |
end; |
495 |
gtMolotov: begin |
|
9825 | 496 |
gear^.AdvBounce:= 1; |
6581 | 497 |
gear^.Radius:= 6; |
9825 | 498 |
gear^.Density:= _2 |
6581 | 499 |
end; |
500 |
gtBirdy: begin |
|
501 |
gear^.Radius:= 16; // todo: check |
|
502 |
gear^.Health := 2000; |
|
9825 | 503 |
gear^.FlightTime := 2 |
6581 | 504 |
end; |
505 |
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
|
506 |
gear^.AdvBounce:= 1; |
6581 | 507 |
gear^.Radius:= 4; |
508 |
gear^.Elasticity:= _0_6; |
|
509 |
gear^.Friction:= _0_96; |
|
510 |
gear^.Density:= _1; |
|
511 |
if gear^.Timer = 0 then |
|
512 |
gear^.Timer:= 3000 |
|
513 |
end; |
|
514 |
gtPortal: begin |
|
515 |
gear^.ImpactSound:= sndMelonImpact; |
|
516 |
gear^.nImpactSounds:= 1; |
|
517 |
gear^.Radius:= 17; |
|
518 |
// set color |
|
519 |
gear^.Tag:= 2 * gear^.Timer; |
|
520 |
gear^.Timer:= 15000; |
|
521 |
gear^.RenderTimer:= false; |
|
522 |
gear^.Health:= 100; |
|
523 |
end; |
|
524 |
gtPiano: begin |
|
525 |
gear^.Radius:= 32; |
|
526 |
gear^.Density:= _50; |
|
527 |
end; |
|
528 |
gtSineGunShot: begin |
|
529 |
gear^.Radius:= 5; |
|
530 |
gear^.Health:= 6000; |
|
531 |
end; |
|
532 |
gtFlamethrower: begin |
|
533 |
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
|
534 |
if gear^.Timer = 0 then gear^.Timer:= 10; |
6581 | 535 |
gear^.Health:= 500; |
536 |
gear^.Damage:= 100; |
|
537 |
end; |
|
538 |
gtLandGun: begin |
|
539 |
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
|
540 |
if gear^.Timer = 0 then gear^.Timer:= 10; |
6581 | 541 |
gear^.Health:= 1000; |
542 |
gear^.Damage:= 100; |
|
543 |
end; |
|
544 |
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
|
545 |
if gear^.Timer = 0 then gear^.Timer:= 5000; |
6581 | 546 |
gear^.dY:= int2hwfloat(-4 + longint(getRandom(8))) / 1000; |
547 |
end; |
|
548 |
gtResurrector: begin |
|
549 |
gear^.Radius := 100; |
|
550 |
gear^.Tag := 0 |
|
551 |
end; |
|
552 |
gtWaterUp: begin |
|
553 |
gear^.Tag := 47; |
|
554 |
end; |
|
555 |
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
|
556 |
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
|
557 |
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
|
558 |
if gear^.Timer = 0 then gear^.Timer:= 1000; |
6581 | 559 |
gear^.Radius:= 5; |
560 |
gear^.Density:= _1_5; |
|
561 |
end; |
|
8161 | 562 |
{ |
6581 | 563 |
gtStructure: begin |
564 |
gear^.Elasticity:= _0_55; |
|
565 |
gear^.Friction:= _0_995; |
|
566 |
gear^.Density:= _0_9; |
|
567 |
gear^.Radius:= 13; |
|
568 |
gear^.Health:= 200; |
|
569 |
gear^.Timer:= 0; |
|
570 |
gear^.Tag:= TotalRounds + 3; |
|
571 |
gear^.Pos:= 1; |
|
572 |
end; |
|
8161 | 573 |
} |
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
|
574 |
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
|
575 |
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
|
576 |
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
|
577 |
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
|
578 |
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
|
579 |
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
|
580 |
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
|
581 |
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
|
582 |
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
|
583 |
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
|
584 |
end; |
6581 | 585 |
end; |
586 |
||
587 |
InsertGearToList(gear); |
|
588 |
AddGear:= gear; |
|
589 |
||
590 |
ScriptCall('onGearAdd', gear^.uid); |
|
591 |
end; |
|
592 |
||
593 |
procedure DeleteGear(Gear: PGear); |
|
594 |
var team: PTeam; |
|
595 |
t,i: Longword; |
|
596 |
k: boolean; |
|
597 |
begin |
|
598 |
||
599 |
ScriptCall('onGearDelete', gear^.uid); |
|
600 |
||
601 |
DeleteCI(Gear); |
|
602 |
||
603 |
FreeTexture(Gear^.Tex); |
|
604 |
Gear^.Tex:= nil; |
|
605 |
||
606 |
// make sure that portals have their link removed before deletion |
|
607 |
if (Gear^.Kind = gtPortal) then |
|
608 |
begin |
|
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7176
diff
changeset
|
609 |
if (Gear^.LinkedGear <> nil) then |
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7176
diff
changeset
|
610 |
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
|
611 |
Gear^.LinkedGear^.LinkedGear:= nil; |
6581 | 612 |
end |
613 |
else if Gear^.Kind = gtHedgehog then |
|
614 |
(* |
|
615 |
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 |
|
616 |
if (CurAmmoGear <> nil) and (CurrentHedgehog^.Gear = Gear) then |
|
617 |
begin |
|
618 |
AttackBar:= 0; |
|
619 |
Gear^.Message:= gmDestroy; |
|
620 |
CurAmmoGear^.Message:= gmDestroy; |
|
621 |
exit |
|
622 |
end |
|
623 |
else*) |
|
624 |
begin |
|
6792
f72c8b5d421c
Ensure flawless is false if any hog is lost, unless it was lost doing a kamikaze
nemo
parents:
6700
diff
changeset
|
625 |
if (Gear <> CurrentHedgehog^.Gear) or (CurAmmoGear = nil) or (CurAmmoGear^.Kind <> gtKamikaze) then |
f72c8b5d421c
Ensure flawless is false if any hog is lost, unless it was lost doing a kamikaze
nemo
parents:
6700
diff
changeset
|
626 |
Gear^.Hedgehog^.Team^.Clan^.Flawless:= false; |
6581 | 627 |
if (hwRound(Gear^.Y) >= cWaterLine) then |
628 |
begin |
|
629 |
t:= max(Gear^.Damage, Gear^.Health); |
|
630 |
Gear^.Damage:= t; |
|
6982 | 631 |
if ((not SuddenDeathDmg and (WaterOpacity < $FF)) or (SuddenDeathDmg and (WaterOpacity < $FF))) |
6581 | 632 |
and (hwRound(Gear^.Y) < cWaterLine + 256) then |
633 |
spawnHealthTagForHH(Gear, t); |
|
634 |
end; |
|
635 |
||
636 |
team:= Gear^.Hedgehog^.Team; |
|
637 |
if CurrentHedgehog^.Gear = Gear then |
|
638 |
begin |
|
639 |
AttackBar:= 0; |
|
640 |
FreeActionsList; // to avoid ThinkThread on drawned gear |
|
641 |
if ((Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NoRoundEnd) <> 0) |
|
642 |
and (CurrentHedgehog^.MultiShootAttacks > 0) then |
|
643 |
OnUsedAmmo(CurrentHedgehog^); |
|
644 |
end; |
|
645 |
||
646 |
Gear^.Hedgehog^.Gear:= nil; |
|
647 |
if Gear^.Hedgehog^.King then |
|
648 |
begin |
|
649 |
// are there any other kings left? Just doing nil check. Presumably a mortally wounded king will get reaped soon enough |
|
650 |
k:= false; |
|
651 |
for i:= 0 to Pred(team^.Clan^.TeamsNumber) do |
|
652 |
if (team^.Clan^.Teams[i]^.Hedgehogs[0].Gear <> nil) then |
|
653 |
k:= true; |
|
654 |
if not k then |
|
655 |
for i:= 0 to Pred(team^.Clan^.TeamsNumber) do |
|
656 |
begin |
|
657 |
team^.Clan^.Teams[i]^.hasGone:= true; |
|
658 |
TeamGoneEffect(team^.Clan^.Teams[i]^) |
|
659 |
end |
|
660 |
end; |
|
661 |
||
662 |
// should be not CurrentHedgehog, but hedgehog of the last gear which caused damage to this hog |
|
663 |
// same stand for CheckHHDamage |
|
664 |
if (Gear^.LastDamage <> nil) then |
|
665 |
uStats.HedgehogDamaged(Gear, Gear^.LastDamage, 0, true) |
|
666 |
else |
|
667 |
uStats.HedgehogDamaged(Gear, CurrentHedgehog, 0, true); |
|
668 |
||
669 |
inc(KilledHHs); |
|
670 |
RecountTeamHealth(team); |
|
7010
10a0a31804f3
Switch effects to longint for convenience of tracking ice states. I could add a new Hedgehog value, but since we have this effects list being all useless as booleans anyway...
nemo
parents:
7001
diff
changeset
|
671 |
if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Effects[heResurrectable] <> 0) and |
7176
fb4b0c6dfdbd
Make watching AI v AI on ai survival a bit more entertaining
nemo
parents:
7168
diff
changeset
|
672 |
//(Gear^.Hedgehog^.Effects[heResurrectable] = 0) then |
fb4b0c6dfdbd
Make watching AI v AI on ai survival a bit more entertaining
nemo
parents:
7168
diff
changeset
|
673 |
(Gear^.Hedgehog^.Team^.Clan <> CurrentHedgehog^.Team^.Clan) then |
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
674 |
with CurrentHedgehog^ do |
6581 | 675 |
begin |
676 |
inc(Team^.stats.AIKills); |
|
677 |
FreeTexture(Team^.AIKillsTex); |
|
678 |
Team^.AIKillsTex := RenderStringTex(inttostr(Team^.stats.AIKills), Team^.Clan^.Color, fnt16); |
|
679 |
end |
|
680 |
end; |
|
681 |
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
|
682 |
begin |
6581 | 683 |
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
|
684 |
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
|
685 |
end; |
6581 | 686 |
if CurAmmoGear = Gear then |
687 |
CurAmmoGear:= nil; |
|
688 |
if FollowGear = Gear then |
|
689 |
FollowGear:= nil; |
|
690 |
if lastGearByUID = Gear then |
|
691 |
lastGearByUID := nil; |
|
692 |
RemoveGearFromList(Gear); |
|
693 |
Dispose(Gear) |
|
694 |
end; |
|
695 |
||
696 |
end. |