author | sheepluva |
Mon, 25 May 2015 22:50:38 +0200 | |
changeset 10962 | 91d256bbd840 |
parent 10952 | 8ad21fe5d062 |
child 10964 | 493bd837dc2e |
permissions | -rw-r--r-- |
4 | 1 |
(* |
1066 | 2 |
* Hedgewars, a free turn based strategy game |
9998 | 3 |
* Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com> |
4 | 4 |
* |
183 | 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 |
|
4 | 8 |
* |
183 | 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. |
|
4 | 13 |
* |
183 | 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 |
4 | 17 |
*) |
18 |
||
5121
2d34ec60992c
added some comments in order to confuse the GSoC students as much as possible ;D
sheepluva
parents:
5076
diff
changeset
|
19 |
(* |
2d34ec60992c
added some comments in order to confuse the GSoC students as much as possible ;D
sheepluva
parents:
5076
diff
changeset
|
20 |
* This file contains the step handlers for gears. |
2d34ec60992c
added some comments in order to confuse the GSoC students as much as possible ;D
sheepluva
parents:
5076
diff
changeset
|
21 |
* |
2d34ec60992c
added some comments in order to confuse the GSoC students as much as possible ;D
sheepluva
parents:
5076
diff
changeset
|
22 |
* Important: Since gears change the course of the game, calculations that |
2d34ec60992c
added some comments in order to confuse the GSoC students as much as possible ;D
sheepluva
parents:
5076
diff
changeset
|
23 |
* lead to different results for different clients/players/machines |
2d34ec60992c
added some comments in order to confuse the GSoC students as much as possible ;D
sheepluva
parents:
5076
diff
changeset
|
24 |
* should NOT occur! |
2d34ec60992c
added some comments in order to confuse the GSoC students as much as possible ;D
sheepluva
parents:
5076
diff
changeset
|
25 |
* Use safe functions and data types! (e.g. GetRandom() and hwFloat) |
2d34ec60992c
added some comments in order to confuse the GSoC students as much as possible ;D
sheepluva
parents:
5076
diff
changeset
|
26 |
*) |
10015 | 27 |
|
9285 | 28 |
{$INCLUDE "options.inc"} |
29 |
||
30 |
unit uGearsHandlersMess; |
|
31 |
interface |
|
32 |
uses uTypes, uFloat; |
|
33 |
||
34 |
procedure doStepPerPixel(Gear: PGear; step: TGearStepProcedure; onlyCheckIfChanged: boolean); |
|
35 |
procedure makeHogsWorry(x, y: hwFloat; r: LongInt); |
|
36 |
procedure HideHog(HH: PHedgehog); |
|
37 |
procedure doStepDrowningGear(Gear: PGear); |
|
38 |
procedure doStepFallingGear(Gear: PGear); |
|
39 |
procedure doStepBomb(Gear: PGear); |
|
40 |
procedure doStepMolotov(Gear: PGear); |
|
41 |
procedure doStepCluster(Gear: PGear); |
|
42 |
procedure doStepShell(Gear: PGear); |
|
43 |
procedure doStepSnowball(Gear: PGear); |
|
44 |
procedure doStepSnowflake(Gear: PGear); |
|
45 |
procedure doStepGrave(Gear: PGear); |
|
46 |
procedure doStepBeeWork(Gear: PGear); |
|
47 |
procedure doStepBee(Gear: PGear); |
|
48 |
procedure doStepShotIdle(Gear: PGear); |
|
49 |
procedure doStepShotgunShot(Gear: PGear); |
|
50 |
procedure spawnBulletTrail(Bullet: PGear); |
|
51 |
procedure doStepBulletWork(Gear: PGear); |
|
52 |
procedure doStepDEagleShot(Gear: PGear); |
|
53 |
procedure doStepSniperRifleShot(Gear: PGear); |
|
54 |
procedure doStepActionTimer(Gear: PGear); |
|
55 |
procedure doStepPickHammerWork(Gear: PGear); |
|
56 |
procedure doStepPickHammer(Gear: PGear); |
|
57 |
procedure doStepBlowTorchWork(Gear: PGear); |
|
58 |
procedure doStepBlowTorch(Gear: PGear); |
|
59 |
procedure doStepMine(Gear: PGear); |
|
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:
10736
diff
changeset
|
60 |
procedure doStepAirMine(Gear: PGear); |
9285 | 61 |
procedure doStepSMine(Gear: PGear); |
62 |
procedure doStepDynamite(Gear: PGear); |
|
63 |
procedure doStepRollingBarrel(Gear: PGear); |
|
64 |
procedure doStepCase(Gear: PGear); |
|
65 |
procedure doStepTarget(Gear: PGear); |
|
66 |
procedure doStepIdle(Gear: PGear); |
|
67 |
procedure doStepShover(Gear: PGear); |
|
68 |
procedure doStepWhip(Gear: PGear); |
|
69 |
procedure doStepFlame(Gear: PGear); |
|
70 |
procedure doStepFirePunchWork(Gear: PGear); |
|
71 |
procedure doStepFirePunch(Gear: PGear); |
|
72 |
procedure doStepParachuteWork(Gear: PGear); |
|
73 |
procedure doStepParachute(Gear: PGear); |
|
74 |
procedure doStepAirAttackWork(Gear: PGear); |
|
75 |
procedure doStepAirAttack(Gear: PGear); |
|
76 |
procedure doStepAirBomb(Gear: PGear); |
|
77 |
procedure doStepGirder(Gear: PGear); |
|
78 |
procedure doStepTeleportAfter(Gear: PGear); |
|
79 |
procedure doStepTeleportAnim(Gear: PGear); |
|
80 |
procedure doStepTeleport(Gear: PGear); |
|
81 |
procedure doStepSwitcherWork(Gear: PGear); |
|
82 |
procedure doStepSwitcher(Gear: PGear); |
|
83 |
procedure doStepMortar(Gear: PGear); |
|
84 |
procedure doStepKamikazeWork(Gear: PGear); |
|
85 |
procedure doStepKamikazeIdle(Gear: PGear); |
|
86 |
procedure doStepKamikaze(Gear: PGear); |
|
87 |
procedure doStepCakeExpl(Gear: PGear); |
|
88 |
procedure doStepCakeDown(Gear: PGear); |
|
89 |
procedure doStepCakeWork(Gear: PGear); |
|
90 |
procedure doStepCakeUp(Gear: PGear); |
|
91 |
procedure doStepCakeFall(Gear: PGear); |
|
92 |
procedure doStepCake(Gear: PGear); |
|
93 |
procedure doStepSeductionWork(Gear: PGear); |
|
94 |
procedure doStepSeductionWear(Gear: PGear); |
|
95 |
procedure doStepSeduction(Gear: PGear); |
|
96 |
procedure doStepWaterUp(Gear: PGear); |
|
97 |
procedure doStepDrillDrilling(Gear: PGear); |
|
98 |
procedure doStepDrill(Gear: PGear); |
|
99 |
procedure doStepBallgunWork(Gear: PGear); |
|
100 |
procedure doStepBallgun(Gear: PGear); |
|
101 |
procedure doStepRCPlaneWork(Gear: PGear); |
|
102 |
procedure doStepRCPlane(Gear: PGear); |
|
103 |
procedure doStepJetpackWork(Gear: PGear); |
|
104 |
procedure doStepJetpack(Gear: PGear); |
|
105 |
procedure doStepBirdyDisappear(Gear: PGear); |
|
106 |
procedure doStepBirdyFly(Gear: PGear); |
|
107 |
procedure doStepBirdyDescend(Gear: PGear); |
|
108 |
procedure doStepBirdyAppear(Gear: PGear); |
|
109 |
procedure doStepBirdy(Gear: PGear); |
|
110 |
procedure doStepEggWork(Gear: PGear); |
|
111 |
procedure doPortalColorSwitch(); |
|
112 |
procedure doStepPortal(Gear: PGear); |
|
113 |
procedure loadNewPortalBall(oldPortal: PGear; destroyGear: Boolean); |
|
114 |
procedure doStepMovingPortal_real(Gear: PGear); |
|
115 |
procedure doStepMovingPortal(Gear: PGear); |
|
116 |
procedure doStepPortalShot(newPortal: PGear); |
|
117 |
procedure doStepPiano(Gear: PGear); |
|
118 |
procedure doStepSineGunShotWork(Gear: PGear); |
|
119 |
procedure doStepSineGunShot(Gear: PGear); |
|
120 |
procedure doStepFlamethrowerWork(Gear: PGear); |
|
121 |
procedure doStepFlamethrower(Gear: PGear); |
|
122 |
procedure doStepLandGunWork(Gear: PGear); |
|
123 |
procedure doStepLandGun(Gear: PGear); |
|
124 |
procedure doStepPoisonCloud(Gear: PGear); |
|
125 |
procedure doStepHammer(Gear: PGear); |
|
126 |
procedure doStepHammerHitWork(Gear: PGear); |
|
127 |
procedure doStepHammerHit(Gear: PGear); |
|
128 |
procedure doStepResurrectorWork(Gear: PGear); |
|
129 |
procedure doStepResurrector(Gear: PGear); |
|
130 |
procedure doStepNapalmBomb(Gear: PGear); |
|
131 |
procedure doStepStructure(Gear: PGear); |
|
132 |
procedure doStepTardisWarp(Gear: PGear); |
|
133 |
procedure doStepTardis(Gear: PGear); |
|
134 |
procedure updateFuel(Gear: PGear); |
|
135 |
procedure updateTarget(Gear:PGear; newX, newY:HWFloat); |
|
136 |
procedure doStepIceGun(Gear: PGear); |
|
137 |
procedure doStepAddAmmo(Gear: PGear); |
|
138 |
procedure doStepGenericFaller(Gear: PGear); |
|
139 |
procedure doStepCreeper(Gear: PGear); |
|
140 |
procedure doStepKnife(Gear: PGear); |
|
141 |
||
142 |
var |
|
143 |
upd: Longword; |
|
144 |
snowLeft,snowRight: LongInt; |
|
145 |
||
146 |
implementation |
|
147 |
uses uConsts, uVariables, uVisualGearsList, uRandom, uCollisions, uGearsList, uUtils, uSound |
|
148 |
, SDLh, uScript, uGearsHedgehog, uGearsUtils, uIO, uCaptions, uLandGraphics |
|
149 |
, uGearsHandlers, uTextures, uRenderUtils, uAmmos, uTeams, uLandTexture, uCommands |
|
150 |
, uStore, uAI, uStats; |
|
5121
2d34ec60992c
added some comments in order to confuse the GSoC students as much as possible ;D
sheepluva
parents:
5076
diff
changeset
|
151 |
|
3569 | 152 |
procedure doStepPerPixel(Gear: PGear; step: TGearStepProcedure; onlyCheckIfChanged: boolean); |
153 |
var |
|
154 |
dX, dY, sX, sY: hwFloat; |
|
155 |
i, steps: LongWord; |
|
156 |
caller: TGearStepProcedure; |
|
157 |
begin |
|
158 |
dX:= Gear^.dX; |
|
159 |
dY:= Gear^.dY; |
|
160 |
steps:= max(abs(hwRound(Gear^.X+dX)-hwRound(Gear^.X)), abs(hwRound(Gear^.Y+dY)-hwRound(Gear^.Y))); |
|
161 |
||
162 |
// Gear is still on the same Pixel it was before |
|
163 |
if steps < 1 then |
|
4578 | 164 |
begin |
3569 | 165 |
if onlyCheckIfChanged then |
4578 | 166 |
begin |
3569 | 167 |
Gear^.X := Gear^.X + dX; |
168 |
Gear^.Y := Gear^.Y + dY; |
|
169 |
EXIT; |
|
4578 | 170 |
end |
3569 | 171 |
else |
172 |
steps := 1; |
|
4578 | 173 |
end; |
3569 | 174 |
|
175 |
if steps > 1 then |
|
4578 | 176 |
begin |
3569 | 177 |
sX:= dX / steps; |
178 |
sY:= dY / steps; |
|
4578 | 179 |
end |
8795 | 180 |
|
3569 | 181 |
else |
4578 | 182 |
begin |
3569 | 183 |
sX:= dX; |
184 |
sY:= dY; |
|
4578 | 185 |
end; |
3569 | 186 |
|
187 |
caller:= Gear^.doStep; |
|
188 |
||
189 |
for i:= 1 to steps do |
|
4578 | 190 |
begin |
3569 | 191 |
Gear^.X := Gear^.X + sX; |
192 |
Gear^.Y := Gear^.Y + sY; |
|
193 |
step(Gear); |
|
194 |
if (Gear^.doStep <> caller) |
|
195 |
or ((Gear^.State and gstCollision) <> 0) |
|
196 |
or ((Gear^.State and gstMoving) = 0) then |
|
197 |
break; |
|
4578 | 198 |
end; |
3569 | 199 |
end; |
200 |
||
2647 | 201 |
procedure makeHogsWorry(x, y: hwFloat; r: LongInt); |
8795 | 202 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
203 |
gi: PGear; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
204 |
d: LongInt; |
2647 | 205 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
206 |
gi := GearsList; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
207 |
while gi <> nil do |
4578 | 208 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
209 |
if (gi^.Kind = gtHedgehog) then |
4578 | 210 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
211 |
d := r - hwRound(Distance(gi^.X - x, gi^.Y - y)); |
10011
ead5e4b21671
Add check for gear kind of hedgehog on invulnerability effect. This probably fixes bug #766, is similar to change in previous r2a1483d91977 and was introduced by r7d925e82e572
nemo
parents:
9998
diff
changeset
|
212 |
if (d > 1) and (gi^.Hedgehog^.Effects[heInvulnerable] = 0) and (GetRandom(2) = 0) then |
4578 | 213 |
begin |
3143 | 214 |
if (CurrentHedgehog^.Gear = gi) then |
7053 | 215 |
PlaySoundV(sndOops, gi^.Hedgehog^.Team^.voicepack) |
8795 | 216 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
217 |
else |
4578 | 218 |
begin |
8632
b5ed76d2a1f9
Make hogs thaw only on enemy turns, make timebox counter decrement only on your turn, adjust knock for frozen hogs, increase damage on frozen hogs, make freezer fuel only reduce when not adjusting angle.
nemo
parents:
8628
diff
changeset
|
219 |
if ((gi^.State and gstMoving) = 0) and (gi^.Hedgehog^.Effects[heFrozen] = 0) then |
7829
c1dc7839d7b9
Set minimums on a few values to avoid camera zooming out past them. partly Issue #430. Might be worth defining a new constant for this.
nemo
parents:
7784
diff
changeset
|
220 |
begin |
c1dc7839d7b9
Set minimums on a few values to avoid camera zooming out past them. partly Issue #430. Might be worth defining a new constant for this.
nemo
parents:
7784
diff
changeset
|
221 |
gi^.dX.isNegative:= X<gi^.X; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
222 |
gi^.State := gi^.State or gstLoser; |
7829
c1dc7839d7b9
Set minimums on a few values to avoid camera zooming out past them. partly Issue #430. Might be worth defining a new constant for this.
nemo
parents:
7784
diff
changeset
|
223 |
end; |
8795 | 224 |
|
3143 | 225 |
if d > r div 2 then |
8795 | 226 |
PlaySoundV(sndNooo, gi^.Hedgehog^.Team^.voicepack) |
3143 | 227 |
else |
7053 | 228 |
PlaySoundV(sndUhOh, gi^.Hedgehog^.Team^.voicepack); |
4578 | 229 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
230 |
end; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
231 |
end; |
8795 | 232 |
|
4578 | 233 |
gi := gi^.NextGear |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
234 |
end; |
2647 | 235 |
end; |
5313
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
236 |
|
5807
5c8fe58dead5
Define 2 script callbacks to notify of hog vanishment
nemo
parents:
5806
diff
changeset
|
237 |
procedure HideHog(HH: PHedgehog); |
5c8fe58dead5
Define 2 script callbacks to notify of hog vanishment
nemo
parents:
5806
diff
changeset
|
238 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
239 |
ScriptCall('onHogHide', HH^.Gear^.Uid); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
240 |
DeleteCI(HH^.Gear); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
241 |
if FollowGear = HH^.Gear then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
242 |
FollowGear:= nil; |
8795 | 243 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
244 |
if lastGearByUID = HH^.Gear then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
245 |
lastGearByUID := nil; |
8795 | 246 |
|
7400
09427dbec1d8
Fix TARDIS, make switcher work w/ the new more stringent check.
nemo
parents:
7399
diff
changeset
|
247 |
HH^.Gear^.Message:= HH^.Gear^.Message or gmRemoveFromList; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
248 |
with HH^.Gear^ do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
249 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
250 |
Z := cHHZ; |
7400
09427dbec1d8
Fix TARDIS, make switcher work w/ the new more stringent check.
nemo
parents:
7399
diff
changeset
|
251 |
HH^.Gear^.Active:= false; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
252 |
State:= State and (not (gstHHDriven or gstAttacking or gstAttacked)); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
253 |
Message := Message and (not gmAttack); |
5807
5c8fe58dead5
Define 2 script callbacks to notify of hog vanishment
nemo
parents:
5806
diff
changeset
|
254 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
255 |
HH^.GearHidden:= HH^.Gear; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
256 |
HH^.Gear:= nil |
5807
5c8fe58dead5
Define 2 script callbacks to notify of hog vanishment
nemo
parents:
5806
diff
changeset
|
257 |
end; |
5c8fe58dead5
Define 2 script callbacks to notify of hog vanishment
nemo
parents:
5806
diff
changeset
|
258 |
|
4 | 259 |
|
260 |
//////////////////////////////////////////////////////////////////////////////// |
|
261 |
procedure doStepDrowningGear(Gear: PGear); |
|
10364
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
262 |
var i, d: LongInt; |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
263 |
bubble: PVisualGear; |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
264 |
begin |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
265 |
if Gear^.Timer = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
266 |
begin |
10364
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
267 |
d:= 2 * Gear^.Radius; |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
268 |
for i:= (Gear^.Radius * Gear^.Radius) div 4 downto 0 do |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
269 |
begin |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
270 |
bubble := AddVisualGear(hwRound(Gear^.X) - Gear^.Radius + random(d), hwRound(Gear^.Y) - Gear^.Radius + random(d), vgtBubble); |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
271 |
if bubble <> nil then |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
272 |
bubble^.dY:= 0.1 + random(20)/10; |
10354 | 273 |
end; |
10364
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
274 |
DeleteGear(Gear); |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
275 |
exit; |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
276 |
end; |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
277 |
|
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
278 |
AllInactive := false; |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
279 |
dec(Gear^.Timer); |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
280 |
|
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
281 |
Gear^.Y := Gear^.Y + cDrownSpeed; |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
282 |
|
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
283 |
if cWaterLine > hwRound(Gear^.Y) + Gear^.Radius then |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
284 |
begin |
10494 | 285 |
if LongInt(leftX) + Gear^.Radius > hwRound(Gear^.X) then |
10364
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
286 |
Gear^.X := Gear^.X - cDrownSpeed |
10354 | 287 |
else |
10364
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
288 |
Gear^.X := Gear^.X + cDrownSpeed; |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
289 |
end |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
290 |
else |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
291 |
Gear^.X := Gear^.X + Gear^.dX * cDrownSpeed; |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
292 |
|
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
293 |
// Create some bubbles (0.5% might be better but causes too few bubbles sometimes) |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
294 |
if ((not SuddenDeathDmg and (WaterOpacity < $FF)) |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
295 |
or (SuddenDeathDmg and (SDWaterOpacity < $FF))) and ((GameTicks and $1F) = 0) then |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
296 |
if (Gear^.Kind = gtHedgehog) and (Random(4) = 0) then |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
297 |
AddVisualGear(hwRound(Gear^.X) - Gear^.Radius, hwRound(Gear^.Y) - Gear^.Radius, vgtBubble) |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
298 |
else if Random(12) = 0 then |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
299 |
AddVisualGear(hwRound(Gear^.X) - Gear^.Radius, hwRound(Gear^.Y) - Gear^.Radius, vgtBubble); |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
300 |
if (not SuddenDeathDmg and (WaterOpacity > $FE)) |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
301 |
or (SuddenDeathDmg and (SDWaterOpacity > $FE)) |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
302 |
or (hwRound(Gear^.Y) > Gear^.Radius + cWaterLine + cVisibleWater) then |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
303 |
DeleteGear(Gear); |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
304 |
end; |
4 | 305 |
|
306 |
//////////////////////////////////////////////////////////////////////////////// |
|
307 |
procedure doStepFallingGear(Gear: PGear); |
|
8795 | 308 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
309 |
isFalling: boolean; |
3020 | 310 |
//tmp: QWord; |
9526 | 311 |
tX, tdX, tdY: hwFloat; |
9769
5814e0c47c99
Experiment in adding a "boing" graphic for bouncing. It has no text right now (was thinking l10n) and colour is fixed.
nemo
parents:
9768
diff
changeset
|
312 |
collV, collH, gX, gY: LongInt; |
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
313 |
land, xland: word; |
4 | 314 |
begin |
9526 | 315 |
tX:= Gear^.X; |
9769
5814e0c47c99
Experiment in adding a "boing" graphic for bouncing. It has no text right now (was thinking l10n) and colour is fixed.
nemo
parents:
9768
diff
changeset
|
316 |
gX:= hwRound(Gear^.X); |
5814e0c47c99
Experiment in adding a "boing" graphic for bouncing. It has no text right now (was thinking l10n) and colour is fixed.
nemo
parents:
9768
diff
changeset
|
317 |
gY:= hwRound(Gear^.Y); |
9557 | 318 |
if (Gear^.Kind <> gtGenericFaller) and WorldWrap(Gear) and (WorldEdge = weWrap) and (Gear^.AdvBounce <> 0) and |
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
319 |
((TestCollisionXwithGear(Gear, 1) <> 0) or (TestCollisionXwithGear(Gear, -1) <> 0)) then |
9526 | 320 |
begin |
321 |
Gear^.X:= tX; |
|
9809 | 322 |
Gear^.dX.isNegative:= (gX > LongInt(leftX) + Gear^.Radius*2) |
9526 | 323 |
end; |
9473
a51a69094c24
partial implementation of non-infinite world (edge wrap/warp/bounce)
nemo
parents:
9470
diff
changeset
|
324 |
|
7627 | 325 |
// clip velocity at 2 - over 1 per pixel, but really shouldn't cause many actual problems. |
9967
40750e72514b
keep velocity from fluttering between 2 and 3px / ms when falling...
nemo
parents:
9885
diff
changeset
|
326 |
if Gear^.dX.Round > 1 then |
7627 | 327 |
Gear^.dX.QWordValue:= 8589934592; |
9967
40750e72514b
keep velocity from fluttering between 2 and 3px / ms when falling...
nemo
parents:
9885
diff
changeset
|
328 |
if Gear^.dY.Round > 1 then |
7627 | 329 |
Gear^.dY.QWordValue:= 8589934592; |
8838
aa2ffd427f6a
strip PAS2C, old WEB symbols and outdated pas2c sources from default branch, all c-related development is done on the webgl branch
koda
parents:
8822
diff
changeset
|
330 |
|
10354 | 331 |
if (Gear^.State and gstSubmersible <> 0) and CheckCoordInWater(gX, gY) then |
8992
5b0be812dcdb
Rename submersible state, increase getaway time for attack underwater, slow down gear dx/dy underwater to simulate water resistance
nemo
parents:
8990
diff
changeset
|
332 |
begin |
5b0be812dcdb
Rename submersible state, increase getaway time for attack underwater, slow down gear dx/dy underwater to simulate water resistance
nemo
parents:
8990
diff
changeset
|
333 |
Gear^.dX:= Gear^.dX * _0_999; |
5b0be812dcdb
Rename submersible state, increase getaway time for attack underwater, slow down gear dx/dy underwater to simulate water resistance
nemo
parents:
8990
diff
changeset
|
334 |
Gear^.dY:= Gear^.dY * _0_999 |
5b0be812dcdb
Rename submersible state, increase getaway time for attack underwater, slow down gear dx/dy underwater to simulate water resistance
nemo
parents:
8990
diff
changeset
|
335 |
end; |
5b0be812dcdb
Rename submersible state, increase getaway time for attack underwater, slow down gear dx/dy underwater to simulate water resistance
nemo
parents:
8990
diff
changeset
|
336 |
|
6450 | 337 |
Gear^.State := Gear^.State and (not gstCollision); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
338 |
collV := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
339 |
collH := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
340 |
tdX := Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
341 |
tdY := Gear^.dY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
342 |
|
3359 | 343 |
// might need some testing/adjustments - just to avoid projectiles to fly forever (accelerated by wind/skips) |
9769
5814e0c47c99
Experiment in adding a "boing" graphic for bouncing. It has no text right now (was thinking l10n) and colour is fixed.
nemo
parents:
9768
diff
changeset
|
344 |
if (gX < min(LAND_WIDTH div -2, -2048)) |
5814e0c47c99
Experiment in adding a "boing" graphic for bouncing. It has no text right now (was thinking l10n) and colour is fixed.
nemo
parents:
9768
diff
changeset
|
345 |
or (gX > max(LAND_WIDTH * 3 div 2, 6144)) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
346 |
Gear^.State := Gear^.State or gstCollision; |
3359 | 347 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
348 |
if Gear^.dY.isNegative then |
4578 | 349 |
begin |
6081
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
350 |
land:= TestCollisionYwithGear(Gear, -1); |
9820 | 351 |
isFalling := land = 0; |
6081
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
352 |
if land <> 0 then |
4578 | 353 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
354 |
collV := -1; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
355 |
if land and lfIce <> 0 then |
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
356 |
Gear^.dX := Gear^.dX * (_0_9 + Gear^.Friction * _0_1) |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
357 |
else Gear^.dX := Gear^.dX * Gear^.Friction; |
9731
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9724
diff
changeset
|
358 |
if (Gear^.AdvBounce = 0) or (land and lfBouncy = 0) then |
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
359 |
begin |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
360 |
Gear^.dY := - Gear^.dY * Gear^.Elasticity; |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
361 |
Gear^.State := Gear^.State or gstCollision |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
362 |
end |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
363 |
else Gear^.dY := - Gear^.dY * cElastic |
4578 | 364 |
end |
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
365 |
else if Gear^.AdvBounce = 1 then |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
366 |
begin |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
367 |
land:= TestCollisionYwithGear(Gear, 1); |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
368 |
if land <> 0 then collV := 1 |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
369 |
end |
4578 | 370 |
end |
8795 | 371 |
else |
6498 | 372 |
begin // Gear^.dY.isNegative is false |
6081
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
373 |
land:= TestCollisionYwithGear(Gear, 1); |
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
374 |
if land <> 0 then |
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
375 |
begin |
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
376 |
collV := 1; |
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
377 |
isFalling := false; |
8795 | 378 |
if land and lfIce <> 0 then |
6498 | 379 |
Gear^.dX := Gear^.dX * (_0_9 + Gear^.Friction * _0_1) |
8795 | 380 |
else |
6498 | 381 |
Gear^.dX := Gear^.dX * Gear^.Friction; |
6081
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
382 |
|
9731
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9724
diff
changeset
|
383 |
if (Gear^.AdvBounce = 0) or (land and lfBouncy = 0) then |
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
384 |
begin |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
385 |
Gear^.dY := - Gear^.dY * Gear^.Elasticity; |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
386 |
Gear^.State := Gear^.State or gstCollision |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
387 |
end |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
388 |
else Gear^.dY := - Gear^.dY * cElastic |
6081
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
389 |
end |
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
390 |
else |
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
391 |
begin |
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
392 |
isFalling := true; |
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
393 |
if Gear^.AdvBounce = 1 then |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
394 |
begin |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
395 |
land:= TestCollisionYwithGear(Gear, -1); |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
396 |
if land <> 0 then collV := -1 |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
397 |
end |
6081
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
398 |
end |
4578 | 399 |
end; |
503 | 400 |
|
2989
b49d87499398
Add back sheepluva's 45° patch for some weapons. Rescale Tiy's latest icons to his specifications.
nemo
parents:
2983
diff
changeset
|
401 |
|
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
402 |
xland:= TestCollisionXwithGear(Gear, hwSign(Gear^.dX)); |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
403 |
if xland <> 0 then |
4578 | 404 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
405 |
collH := hwSign(Gear^.dX); |
9731
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9724
diff
changeset
|
406 |
if (Gear^.AdvBounce = 0) or (xland and lfBouncy = 0) then |
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
407 |
begin |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
408 |
Gear^.dX := - Gear^.dX * Gear^.Elasticity; |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
409 |
Gear^.dY := Gear^.dY * Gear^.Elasticity; |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
410 |
Gear^.State := Gear^.State or gstCollision |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
411 |
end |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
412 |
else |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
413 |
begin |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
414 |
Gear^.dX := - Gear^.dX * cElastic; |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
415 |
Gear^.dY := Gear^.dY * cElastic |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
416 |
end |
4578 | 417 |
end |
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
418 |
else if Gear^.AdvBounce = 1 then |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
419 |
begin |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
420 |
xland:= TestCollisionXwithGear(Gear, -hwSign(Gear^.dX)); |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
421 |
if xland <> 0 then collH := -hwSign(Gear^.dX) |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
422 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
423 |
//if Gear^.AdvBounce and (collV <>0) and (collH <> 0) and (hwSqr(tdX) + hwSqr(tdY) > _0_08) then |
10015 | 424 |
if (collV <> 0) and (collH <> 0) and |
9731
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9724
diff
changeset
|
425 |
(((Gear^.AdvBounce=1) and ((collV=-1) or ((tdX.QWordValue + tdY.QWordValue) > _0_2.QWordValue)))) then |
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9724
diff
changeset
|
426 |
//or ((xland or land) and lfBouncy <> 0)) then |
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
427 |
begin |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
428 |
if (xland or land) and lfBouncy = 0 then |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
429 |
begin |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
430 |
Gear^.dX := tdY*Gear^.Elasticity*Gear^.Friction; |
9767 | 431 |
Gear^.dY := tdX*Gear^.Elasticity; |
432 |
Gear^.State := Gear^.State or gstCollision |
|
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
433 |
end |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
434 |
else |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
435 |
begin |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
436 |
Gear^.dX := tdY*cElastic*Gear^.Friction; |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
437 |
Gear^.dY := tdX*cElastic |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
438 |
end; |
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
439 |
|
10895
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
440 |
Gear^.dX.isNegative:= tdX.isNegative; |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
441 |
Gear^.dY.isNegative:= tdY.isNegative; |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
442 |
if (collV > 0) and (collH > 0) and (not tdX.isNegative) and (not tdY.isNegative) then |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
443 |
begin |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
444 |
Gear^.dX.isNegative := true; |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
445 |
Gear^.dY.isNegative := true |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
446 |
end |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
447 |
else if (collV > 0) and (collH < 0) and (tdX.isNegative or tdY.isNegative) then |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
448 |
begin |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
449 |
Gear^.dY.isNegative := not tdY.isNegative; |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
450 |
if not tdY.isNegative then Gear^.dX.isNegative := false |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
451 |
end |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
452 |
else if (collV < 0) and (collH > 0) and (not tdX.isNegative) then |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
453 |
begin |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
454 |
Gear^.dX.isNegative := true; |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
455 |
Gear^.dY.isNegative := false |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
456 |
end |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
457 |
else if (collV < 0) and (collH < 0) and tdX.isNegative and tdY.isNegative then |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
458 |
Gear^.dX.isNegative := false; |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
459 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
460 |
isFalling := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
461 |
Gear^.AdvBounce := 10; |
4578 | 462 |
end; |
503 | 463 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
464 |
if Gear^.AdvBounce > 1 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
465 |
dec(Gear^.AdvBounce); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
466 |
|
6131 | 467 |
if isFalling then |
4299 | 468 |
begin |
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:
10736
diff
changeset
|
469 |
if Gear^.State and gstNoGravity = 0 then |
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:
10736
diff
changeset
|
470 |
Gear^.dY := Gear^.dY + cGravity; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
471 |
if (GameFlags and gfMoreWind) <> 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
472 |
Gear^.dX := Gear^.dX + cWindSpeed / Gear^.Density |
9820 | 473 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
474 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
475 |
Gear^.X := Gear^.X + Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
476 |
Gear^.Y := Gear^.Y + Gear^.dY; |
9479
167dea42d7d7
move border back a bit from left/right bounds, bee tweak
nemo
parents:
9477
diff
changeset
|
477 |
CheckGearDrowning(Gear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
478 |
//if (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) < _0_0002) and |
6498 | 479 |
if (not isFalling) and ((Gear^.dX.QWordValue + Gear^.dY.QWordValue) < _0_02.QWordValue) then |
6450 | 480 |
Gear^.State := Gear^.State and (not gstMoving) |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
481 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
482 |
Gear^.State := Gear^.State or gstMoving; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
483 |
|
9731
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9724
diff
changeset
|
484 |
if ((xland or land) and lfBouncy <> 0) and (Gear^.dX.QWordValue < _0_15.QWordValue) and (Gear^.dY.QWordValue < _0_15.QWordValue) then |
10895
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
485 |
begin |
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
486 |
Gear^.State := Gear^.State or gstCollision; |
10895
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
487 |
AddFileLog('no more bounce for you!'); |
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
488 |
end; |
10015 | 489 |
|
9769
5814e0c47c99
Experiment in adding a "boing" graphic for bouncing. It has no text right now (was thinking l10n) and colour is fixed.
nemo
parents:
9768
diff
changeset
|
490 |
if ((xland or land) and lfBouncy <> 0) and (Gear^.Radius >= 3) and |
5814e0c47c99
Experiment in adding a "boing" graphic for bouncing. It has no text right now (was thinking l10n) and colour is fixed.
nemo
parents:
9768
diff
changeset
|
491 |
((Gear^.dX.QWordValue > _0_15.QWordValue) or (Gear^.dY.QWordValue > _0_15.QWordValue)) then |
5814e0c47c99
Experiment in adding a "boing" graphic for bouncing. It has no text right now (was thinking l10n) and colour is fixed.
nemo
parents:
9768
diff
changeset
|
492 |
begin |
10508 | 493 |
AddBounceEffectForGear(Gear); |
9769
5814e0c47c99
Experiment in adding a "boing" graphic for bouncing. It has no text right now (was thinking l10n) and colour is fixed.
nemo
parents:
9768
diff
changeset
|
494 |
end |
9721
1833dadcebf0
Initial pass at bounciness. To try it out, or lfBouncy on girder in uLandGraphics (search for the word graphically)
nemo
parents:
9706
diff
changeset
|
495 |
else if (Gear^.nImpactSounds > 0) and |
7777 | 496 |
(Gear^.State and gstCollision <> 0) and |
497 |
(((Gear^.Kind <> gtMine) and (Gear^.Damage <> 0)) or (Gear^.State and gstMoving <> 0)) and |
|
498 |
(((Gear^.Radius < 3) and (Gear^.dY < -_0_1)) or |
|
8795 | 499 |
((Gear^.Radius >= 3) and |
7777 | 500 |
((Gear^.dX.QWordValue > _0_1.QWordValue) or (Gear^.dY.QWordValue > _0_1.QWordValue)))) then |
5461 | 501 |
PlaySound(TSound(ord(Gear^.ImpactSound) + LongInt(GetRandom(Gear^.nImpactSounds))), true); |
4 | 502 |
end; |
503 |
||
504 |
//////////////////////////////////////////////////////////////////////////////// |
|
505 |
procedure doStepBomb(Gear: PGear); |
|
8795 | 506 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
507 |
i, x, y: LongInt; |
8413
454191defee6
restore former cluster behaviour (makes the most diff for the bomb)
nemo
parents:
8370
diff
changeset
|
508 |
dX, dY, gdX: hwFloat; |
3475 | 509 |
vg: PVisualGear; |
4 | 510 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
511 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
512 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
513 |
doStepFallingGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
514 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
515 |
dec(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
516 |
if Gear^.Timer = 1000 then // might need adjustments |
8795 | 517 |
case Gear^.Kind of |
5139
090a8b8d1083
grenade back to old damage, but from now on explosions assume they are not closer to a gear's center than the gear's radius
sheepluva
parents:
5137
diff
changeset
|
518 |
gtGrenade: makeHogsWorry(Gear^.X, Gear^.Y, 50); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
519 |
gtClusterBomb: makeHogsWorry(Gear^.X, Gear^.Y, 20); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
520 |
gtWatermelon: makeHogsWorry(Gear^.X, Gear^.Y, 75); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
521 |
gtHellishBomb: makeHogsWorry(Gear^.X, Gear^.Y, 90); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
522 |
gtGasBomb: makeHogsWorry(Gear^.X, Gear^.Y, 50); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
523 |
end; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
524 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
525 |
if (Gear^.Kind = gtBall) and ((Gear^.State and gstTmpFlag) <> 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
526 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
527 |
CheckCollision(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
528 |
if (Gear^.State and gstCollision) <> 0 then |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
529 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 20, Gear^.Hedgehog, EXPLDontDraw or EXPLNoGfx); |
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
|
530 |
end; |
3004 | 531 |
|
3475 | 532 |
if (Gear^.Kind = gtGasBomb) and ((GameTicks mod 200) = 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
533 |
begin |
3475 | 534 |
vg:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeWhite); |
535 |
if vg <> nil then |
|
536 |
vg^.Tint:= $FFC0C000; |
|
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
|
537 |
end; |
3475 | 538 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
539 |
if Gear^.Timer = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
540 |
begin |
8795 | 541 |
case Gear^.Kind of |
5139
090a8b8d1083
grenade back to old damage, but from now on explosions assume they are not closer to a gear's center than the gear's radius
sheepluva
parents:
5137
diff
changeset
|
542 |
gtGrenade: doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, Gear^.Hedgehog, EXPLAutoSound); |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
543 |
gtBall: doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 40, Gear^.Hedgehog, EXPLAutoSound); |
8795 | 544 |
gtClusterBomb: |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
545 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
546 |
x := hwRound(Gear^.X); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
547 |
y := hwRound(Gear^.Y); |
8413
454191defee6
restore former cluster behaviour (makes the most diff for the bomb)
nemo
parents:
8370
diff
changeset
|
548 |
gdX:= Gear^.dX; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
549 |
doMakeExplosion(x, y, 20, Gear^.Hedgehog, EXPLAutoSound); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
550 |
for i:= 0 to 4 do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
551 |
begin |
8413
454191defee6
restore former cluster behaviour (makes the most diff for the bomb)
nemo
parents:
8370
diff
changeset
|
552 |
dX := rndSign(GetRandomf * _0_1) + gdX / 5; |
7001 | 553 |
dY := (GetRandomf - _3) * _0_08; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
554 |
FollowGear := AddGear(x, y, gtCluster, 0, dX, dY, 25) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
555 |
end |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
556 |
end; |
8795 | 557 |
gtWatermelon: |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
558 |
begin |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
559 |
x := hwRound(Gear^.X); |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
560 |
y := hwRound(Gear^.Y); |
8413
454191defee6
restore former cluster behaviour (makes the most diff for the bomb)
nemo
parents:
8370
diff
changeset
|
561 |
gdX:= Gear^.dX; |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
562 |
doMakeExplosion(x, y, 75, Gear^.Hedgehog, EXPLAutoSound); |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
563 |
for i:= 0 to 5 do |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
564 |
begin |
8413
454191defee6
restore former cluster behaviour (makes the most diff for the bomb)
nemo
parents:
8370
diff
changeset
|
565 |
dX := rndSign(GetRandomf * _0_1) + gdX / 5; |
7001 | 566 |
dY := (GetRandomf - _1_5) * _0_3; |
6120 | 567 |
FollowGear:= AddGear(x, y, gtMelonPiece, 0, dX, dY, 75); |
568 |
FollowGear^.DirAngle := i * 60 |
|
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
569 |
end |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
570 |
end; |
8795 | 571 |
gtHellishBomb: |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
572 |
begin |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
573 |
x := hwRound(Gear^.X); |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
574 |
y := hwRound(Gear^.Y); |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
575 |
doMakeExplosion(x, y, 90, Gear^.Hedgehog, EXPLAutoSound); |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
576 |
|
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
577 |
for i:= 0 to 127 do |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
578 |
begin |
7001 | 579 |
dX := AngleCos(i * 16) * _0_5 * (GetRandomf + _1); |
580 |
dY := AngleSin(i * 16) * _0_5 * (GetRandomf + _1); |
|
6131 | 581 |
if i mod 2 = 0 then |
6126
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
582 |
begin |
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
583 |
AddGear(x, y, gtFlame, gstTmpFlag, dX, dY, 0); |
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
584 |
AddGear(x, y, gtFlame, 0, dX, -dY, 0) |
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
585 |
end |
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
586 |
else |
8795 | 587 |
begin |
6126
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
588 |
AddGear(x, y, gtFlame, 0, dX, dY, 0); |
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
589 |
AddGear(x, y, gtFlame, gstTmpFlag, dX, -dY, 0) |
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
590 |
end; |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
591 |
end |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
592 |
end; |
3712 | 593 |
gtGasBomb: |
594 |
begin |
|
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
595 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 20, Gear^.Hedgehog, EXPLAutoSound); |
3712 | 596 |
for i:= 0 to 2 do |
4160
043c17a8b3ca
Don't call getrandom() from parameters to a function. The order of calls is undefined, so desyncs are probable.
unc0rr
parents:
4155
diff
changeset
|
597 |
begin |
043c17a8b3ca
Don't call getrandom() from parameters to a function. The order of calls is undefined, so desyncs are probable.
unc0rr
parents:
4155
diff
changeset
|
598 |
x:= GetRandom(60); |
043c17a8b3ca
Don't call getrandom() from parameters to a function. The order of calls is undefined, so desyncs are probable.
unc0rr
parents:
4155
diff
changeset
|
599 |
y:= GetRandom(40); |
6120 | 600 |
FollowGear:= AddGear(hwRound(Gear^.X) - 30 + x, hwRound(Gear^.Y) - 20 + y, gtPoisonCloud, 0, _0, _0, 0); |
4160
043c17a8b3ca
Don't call getrandom() from parameters to a function. The order of calls is undefined, so desyncs are probable.
unc0rr
parents:
4155
diff
changeset
|
601 |
end |
3712 | 602 |
end; |
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
|
603 |
end; |
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
|
604 |
DeleteGear(Gear); |
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
|
605 |
exit |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
606 |
end; |
6498 | 607 |
|
608 |
CalcRotationDirAngle(Gear); |
|
609 |
||
610 |
if Gear^.Kind = gtHellishBomb then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
611 |
begin |
6498 | 612 |
|
613 |
if Gear^.Timer = 3000 then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
614 |
begin |
6498 | 615 |
Gear^.nImpactSounds := 0; |
616 |
PlaySound(sndHellish); |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
617 |
end; |
6498 | 618 |
|
619 |
if (GameTicks and $3F) = 0 then |
|
620 |
if (Gear^.State and gstCollision) = 0 then |
|
621 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtEvilTrace); |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
622 |
end; |
4 | 623 |
end; |
5313
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
624 |
|
2457
ecf0c7e7995b
Initial molotov cocktail. Still needs graphics, tweaking of fire behaviour. Also changed probabilities for default weapon sets
nemo
parents:
2455
diff
changeset
|
625 |
//////////////////////////////////////////////////////////////////////////////// |
ecf0c7e7995b
Initial molotov cocktail. Still needs graphics, tweaking of fire behaviour. Also changed probabilities for default weapon sets
nemo
parents:
2455
diff
changeset
|
626 |
procedure doStepMolotov(Gear: PGear); |
8795 | 627 |
var |
6472 | 628 |
s: Longword; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
629 |
i, gX, gY: LongInt; |
2457
ecf0c7e7995b
Initial molotov cocktail. Still needs graphics, tweaking of fire behaviour. Also changed probabilities for default weapon sets
nemo
parents:
2455
diff
changeset
|
630 |
dX, dY: hwFloat; |
5874
5cd329cf2460
nemo's molotov burst effect; with a slight color modification added
sheepluva
parents:
5873
diff
changeset
|
631 |
smoke, glass: PVisualGear; |
2457
ecf0c7e7995b
Initial molotov cocktail. Still needs graphics, tweaking of fire behaviour. Also changed probabilities for default weapon sets
nemo
parents:
2455
diff
changeset
|
632 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
633 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
634 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
635 |
doStepFallingGear(Gear); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
636 |
CalcRotationDirAngle(Gear); |
2457
ecf0c7e7995b
Initial molotov cocktail. Still needs graphics, tweaking of fire behaviour. Also changed probabilities for default weapon sets
nemo
parents:
2455
diff
changeset
|
637 |
|
5870 | 638 |
// let's add some smoke depending on speed |
8906
82756a90a343
I see no reason why a visual effect needs Distance. IMO square should look just fine. Untested. Oh. Also reduced flake count at Randi's request.
nemo
parents:
8838
diff
changeset
|
639 |
s:= max(32,152 - round((abs(hwFloat2FLoat(Gear^.dX))+abs(hwFloat2Float(Gear^.dY)))*120))+random(10); |
6011
519f8a58c021
Fix a bunch of warnings (also improves speed a bit in 32 bit code)
unC0Rr
parents:
6002
diff
changeset
|
640 |
if (GameTicks mod s) = 0 then |
5871
09daa06191d7
Since we are tweaking molotov. make the flame flickery and add a drowning frame
nemo
parents:
5870
diff
changeset
|
641 |
begin |
5873 | 642 |
// adjust angle to match the texture |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
643 |
if Gear^.dX.isNegative then |
8906
82756a90a343
I see no reason why a visual effect needs Distance. IMO square should look just fine. Untested. Oh. Also reduced flake count at Randi's request.
nemo
parents:
8838
diff
changeset
|
644 |
i:= 130 |
82756a90a343
I see no reason why a visual effect needs Distance. IMO square should look just fine. Untested. Oh. Also reduced flake count at Randi's request.
nemo
parents:
8838
diff
changeset
|
645 |
else i:= 50; |
8795 | 646 |
|
5873 | 647 |
smoke:= AddVisualGear(hwRound(Gear^.X)-round(cos((Gear^.DirAngle+i) * pi / 180)*20), hwRound(Gear^.Y)-round(sin((Gear^.DirAngle+i) * pi / 180)*20), vgtSmoke); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
648 |
if smoke <> nil then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
649 |
smoke^.Scale:= 0.75; |
5871
09daa06191d7
Since we are tweaking molotov. make the flame flickery and add a drowning frame
nemo
parents:
5870
diff
changeset
|
650 |
end; |
5870 | 651 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
652 |
if (Gear^.State and gstCollision) <> 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
653 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
654 |
PlaySound(sndMolotov); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
655 |
gX := hwRound(Gear^.X); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
656 |
gY := hwRound(Gear^.Y); |
5924
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
657 |
for i:= 0 to 4 do |
5874
5cd329cf2460
nemo's molotov burst effect; with a slight color modification added
sheepluva
parents:
5873
diff
changeset
|
658 |
begin |
5924
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
659 |
(*glass:= AddVisualGear(gx+random(7)-3, gy+random(5)-2, vgtEgg); |
5874
5cd329cf2460
nemo's molotov burst effect; with a slight color modification added
sheepluva
parents:
5873
diff
changeset
|
660 |
if glass <> nil then |
5cd329cf2460
nemo's molotov burst effect; with a slight color modification added
sheepluva
parents:
5873
diff
changeset
|
661 |
begin |
5cd329cf2460
nemo's molotov burst effect; with a slight color modification added
sheepluva
parents:
5873
diff
changeset
|
662 |
glass^.Frame:= 2; |
5cd329cf2460
nemo's molotov burst effect; with a slight color modification added
sheepluva
parents:
5873
diff
changeset
|
663 |
glass^.Tint:= $41B83ED0 - i * $10081000; |
5cd329cf2460
nemo's molotov burst effect; with a slight color modification added
sheepluva
parents:
5873
diff
changeset
|
664 |
glass^.dX:= 1/(10*(random(11)-5)); |
5cd329cf2460
nemo's molotov burst effect; with a slight color modification added
sheepluva
parents:
5873
diff
changeset
|
665 |
glass^.dY:= -1/(random(4)+5); |
5924
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
666 |
end;*) |
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
667 |
glass:= AddVisualGear(gx+random(7)-3, gy+random(7)-3, vgtStraightShot); |
6131 | 668 |
if glass <> nil then |
5924
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
669 |
with glass^ do |
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
670 |
begin |
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
671 |
Frame:= 2; |
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
672 |
Tint:= $41B83ED0 - i * $10081000; |
7066
12cc2bd84b0b
Make pas2c even more happier with uGears.c, allow assigning arrays in some cases
unc0rr
parents:
7062
diff
changeset
|
673 |
Angle:= random(360); |
5924
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
674 |
dx:= 0.0000001; |
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
675 |
dy:= 0; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
676 |
if random(2) = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
677 |
dx := -dx; |
5924
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
678 |
FrameTicks:= 750; |
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
679 |
State:= ord(sprEgg) |
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
680 |
end; |
5874
5cd329cf2460
nemo's molotov burst effect; with a slight color modification added
sheepluva
parents:
5873
diff
changeset
|
681 |
end; |
5415
94e26612e2ec
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
nemo
parents:
5413
diff
changeset
|
682 |
for i:= 0 to 24 do |
6126
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
683 |
begin |
7001 | 684 |
dX := AngleCos(i * 2) * ((_0_15*(i div 5))) * (GetRandomf + _1); |
685 |
dY := AngleSin(i * 8) * _0_5 * (GetRandomf + _1); |
|
6126
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
686 |
AddGear(gX, gY, gtFlame, gstTmpFlag, dX, dY, 0); |
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
687 |
AddGear(gX, gY, gtFlame, gstTmpFlag, dX,-dY, 0); |
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
688 |
AddGear(gX, gY, gtFlame, gstTmpFlag,-dX, dY, 0); |
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
689 |
AddGear(gX, gY, gtFlame, gstTmpFlag,-dX,-dY, 0); |
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
690 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
691 |
DeleteGear(Gear); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
692 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
693 |
end; |
2457
ecf0c7e7995b
Initial molotov cocktail. Still needs graphics, tweaking of fire behaviour. Also changed probabilities for default weapon sets
nemo
parents:
2455
diff
changeset
|
694 |
end; |
4 | 695 |
|
5313
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
696 |
//////////////////////////////////////////////////////////////////////////////// |
1279 | 697 |
|
78 | 698 |
procedure doStepCluster(Gear: PGear); |
699 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
700 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
701 |
doStepFallingGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
702 |
if (Gear^.State and gstCollision) <> 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
703 |
begin |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
704 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Timer, Gear^.Hedgehog, EXPLAutoSound); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
705 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
706 |
exit |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
707 |
end; |
1262 | 708 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
709 |
if (Gear^.Kind = gtMelonPiece) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
710 |
or (Gear^.Kind = gtBall) then |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
711 |
CalcRotationDirAngle(Gear) |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
712 |
else if (GameTicks and $1F) = 0 then |
10352 | 713 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace); |
78 | 714 |
end; |
715 |
||
4 | 716 |
//////////////////////////////////////////////////////////////////////////////// |
4168 | 717 |
procedure doStepShell(Gear: PGear); |
4 | 718 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
719 |
AllInactive := false; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
720 |
if (GameFlags and gfMoreWind) = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
721 |
Gear^.dX := Gear^.dX + cWindSpeed; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
722 |
doStepFallingGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
723 |
if (Gear^.State and gstCollision) <> 0 then |
4578 | 724 |
begin |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
725 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, Gear^.Hedgehog, EXPLAutoSound); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
726 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
727 |
exit |
4578 | 728 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
729 |
if (GameTicks and $3F) = 0 then |
10352 | 730 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace); |
95 | 731 |
end; |
732 |
||
4 | 733 |
//////////////////////////////////////////////////////////////////////////////// |
4578 | 734 |
procedure doStepSnowball(Gear: PGear); |
735 |
var kick, i: LongInt; |
|
736 |
particle: PVisualGear; |
|
8945
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
737 |
gdX, gdY: hwFloat; |
4578 | 738 |
begin |
739 |
AllInactive := false; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
740 |
if (GameFlags and gfMoreWind) = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
741 |
Gear^.dX := Gear^.dX + cWindSpeed; |
8945
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
742 |
gdX := Gear^.dX; |
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
743 |
gdY := Gear^.dY; |
4578 | 744 |
doStepFallingGear(Gear); |
745 |
CalcRotationDirAngle(Gear); |
|
746 |
if (Gear^.State and gstCollision) <> 0 then |
|
747 |
begin |
|
8945
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
748 |
kick:= hwRound((hwAbs(gdX)+hwAbs(gdY)) * _20); |
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
749 |
Gear^.dX:= gdX; |
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
750 |
Gear^.dY:= gdY; |
7621 | 751 |
AmmoShove(Gear, 0, kick); |
4578 | 752 |
for i:= 15 + kick div 10 downto 0 do |
753 |
begin |
|
754 |
particle := AddVisualGear(hwRound(Gear^.X) + Random(25), hwRound(Gear^.Y) + Random(25), vgtDust); |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
755 |
if particle <> nil then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
756 |
particle^.dX := particle^.dX + (Gear^.dX.QWordValue / 21474836480) |
4578 | 757 |
end; |
758 |
DeleteGear(Gear); |
|
759 |
exit |
|
760 |
end; |
|
761 |
if ((GameTicks and $1F) = 0) and (Random(3) = 0) then |
|
762 |
begin |
|
4582 | 763 |
particle:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtDust); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
764 |
if particle <> nil then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
765 |
particle^.dX := particle^.dX + (Gear^.dX.QWordValue / 21474836480) |
4578 | 766 |
end |
767 |
end; |
|
768 |
||
5313
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
769 |
//////////////////////////////////////////////////////////////////////////////// |
4611 | 770 |
procedure doStepSnowflake(Gear: PGear); |
6419
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
771 |
var xx, yy, px, py, rx, ry, lx, ly: LongInt; |
5025
ac1691d35cf2
Land sprayer tweaks, make land spray and mudball not end turn
nemo
parents:
5024
diff
changeset
|
772 |
move, draw, allpx, gun: Boolean; |
4611 | 773 |
s: PSDL_Surface; |
774 |
p: PLongwordArray; |
|
5693 | 775 |
lf: LongWord; |
4611 | 776 |
begin |
5695 | 777 |
inc(Gear^.Pos); |
5025
ac1691d35cf2
Land sprayer tweaks, make land spray and mudball not end turn
nemo
parents:
5024
diff
changeset
|
778 |
gun:= (Gear^.State and gstTmpFlag) <> 0; |
5024 | 779 |
move:= false; |
780 |
draw:= false; |
|
5025
ac1691d35cf2
Land sprayer tweaks, make land spray and mudball not end turn
nemo
parents:
5024
diff
changeset
|
781 |
if gun then |
5024 | 782 |
begin |
6450 | 783 |
Gear^.State:= Gear^.State and (not gstInvisible); |
5024 | 784 |
doStepFallingGear(Gear); |
785 |
CheckCollision(Gear); |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
786 |
if ((Gear^.State and gstCollision) <> 0) or ((Gear^.State and gstMoving) = 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
787 |
draw:= true; |
5024 | 788 |
xx:= hwRound(Gear^.X); |
789 |
yy:= hwRound(Gear^.Y); |
|
9809 | 790 |
if draw and (WorldEdge = weWrap) and ((xx < LongInt(leftX) + 3) or (xx > LongInt(rightX) - 3)) then |
791 |
begin |
|
10015 | 792 |
if xx < LongInt(leftX) + 3 then |
9563 | 793 |
xx:= rightX-3 |
794 |
else xx:= leftX+3; |
|
795 |
Gear^.X:= int2hwFloat(xx) |
|
796 |
end |
|
5024 | 797 |
end |
798 |
else if GameTicks and $7 = 0 then |
|
4611 | 799 |
begin |
800 |
with Gear^ do |
|
801 |
begin |
|
6450 | 802 |
State:= State and (not gstInvisible); |
5355 | 803 |
X:= X + cWindSpeed * 3200 + dX; |
4611 | 804 |
Y:= Y + dY + cGravity * vobFallSpeed * 8; // using same value as flakes to try and get similar results |
805 |
xx:= hwRound(X); |
|
806 |
yy:= hwRound(Y); |
|
807 |
if vobVelocity <> 0 then |
|
808 |
begin |
|
7649 | 809 |
DirAngle := DirAngle + (Damage / 1000); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
810 |
if DirAngle < 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
811 |
DirAngle := DirAngle + 360 |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
812 |
else if 360 < DirAngle then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
813 |
DirAngle := DirAngle - 360; |
4611 | 814 |
end; |
7649 | 815 |
(* |
816 |
We aren't using frametick right now, so just a waste of cycles. |
|
4611 | 817 |
inc(Health, 8); |
5186 | 818 |
if longword(Health) > vobFrameTicks then |
4611 | 819 |
begin |
820 |
dec(Health, vobFrameTicks); |
|
821 |
inc(Timer); |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
822 |
if Timer = vobFramesCount then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
823 |
Timer:= 0 |
4611 | 824 |
end; |
7649 | 825 |
*) |
4611 | 826 |
// move back to cloud layer |
10354 | 827 |
if CheckCoordInWater(xx, yy) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
828 |
move:= true |
7477
26706bf32ecf
First pass at variable land size. For playing a small map (forced on rqLowRes), this should save 42MiB of RAM.
nemo
parents:
7468
diff
changeset
|
829 |
else if (xx > snowRight) or (xx < snowLeft) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
830 |
move:=true |
10736
5b7cf9fcb47e
Try to handle negative gravity w/ snow. Still needs to look nicer. Currently causes banding.
nemo
parents:
10679
diff
changeset
|
831 |
else if (cGravity < _0) and (yy < LAND_HEIGHT-1200) then |
5b7cf9fcb47e
Try to handle negative gravity w/ snow. Still needs to look nicer. Currently causes banding.
nemo
parents:
10679
diff
changeset
|
832 |
move:=true |
4791 | 833 |
// Solid pixel encountered |
7477
26706bf32ecf
First pass at variable land size. For playing a small map (forced on rqLowRes), this should save 42MiB of RAM.
nemo
parents:
7468
diff
changeset
|
834 |
else if ((yy and LAND_HEIGHT_MASK) = 0) and ((xx and LAND_WIDTH_MASK) = 0) and (Land[yy, xx] <> 0) then |
4611 | 835 |
begin |
7128
574b385ce7df
Minor freezer changes, allow snow to accumulate on indestructible terrain too.
nemo
parents:
7101
diff
changeset
|
836 |
lf:= Land[yy, xx] and (lfObject or lfBasic or lfIndestructible); |
8602 | 837 |
if lf = 0 then lf:= lfObject; |
4791 | 838 |
// If there's room below keep falling |
839 |
if (((yy-1) and LAND_HEIGHT_MASK) = 0) and (Land[yy-1, xx] = 0) then |
|
840 |
begin |
|
841 |
X:= X - cWindSpeed * 1600 - dX; |
|
842 |
end |
|
843 |
// If there's room below, on the sides, fill the gaps |
|
844 |
else if (((yy-1) and LAND_HEIGHT_MASK) = 0) and (((xx-(1*hwSign(cWindSpeed))) and LAND_WIDTH_MASK) = 0) and (Land[yy-1, (xx-(1*hwSign(cWindSpeed)))] = 0) then |
|
845 |
begin |
|
846 |
X:= X - _0_8 * hwSign(cWindSpeed); |
|
847 |
Y:= Y - dY - cGravity * vobFallSpeed * 8; |
|
848 |
end |
|
849 |
else if (((yy-1) and LAND_HEIGHT_MASK) = 0) and (((xx-(2*hwSign(cWindSpeed))) and LAND_WIDTH_MASK) = 0) and (Land[yy-1, (xx-(2*hwSign(cWindSpeed)))] = 0) then |
|
850 |
begin |
|
851 |
X:= X - _0_8 * 2 * hwSign(cWindSpeed); |
|
852 |
Y:= Y - dY - cGravity * vobFallSpeed * 8; |
|
853 |
end |
|
854 |
else if (((yy-1) and LAND_HEIGHT_MASK) = 0) and (((xx+(1*hwSign(cWindSpeed))) and LAND_WIDTH_MASK) = 0) and (Land[yy-1, (xx+(1*hwSign(cWindSpeed)))] = 0) then |
|
855 |
begin |
|
856 |
X:= X + _0_8 * hwSign(cWindSpeed); |
|
857 |
Y:= Y - dY - cGravity * vobFallSpeed * 8; |
|
858 |
end |
|
859 |
else if (((yy-1) and LAND_HEIGHT_MASK) = 0) and (((xx+(2*hwSign(cWindSpeed))) and LAND_WIDTH_MASK) = 0) and (Land[yy-1, (xx+(2*hwSign(cWindSpeed)))] = 0) then |
|
860 |
begin |
|
861 |
X:= X + _0_8 * 2 * hwSign(cWindSpeed); |
|
862 |
Y:= Y - dY - cGravity * vobFallSpeed * 8; |
|
863 |
end |
|
4805
01332828b568
Fancier detection of hogs/objects. Hogs wont get buried even by the worst of storms.
Palewolf
parents:
4803
diff
changeset
|
864 |
// if there's an hog/object below do nothing |
01332828b568
Fancier detection of hogs/objects. Hogs wont get buried even by the worst of storms.
Palewolf
parents:
4803
diff
changeset
|
865 |
else if ((((yy+1) and LAND_HEIGHT_MASK) = 0) and ((Land[yy+1, xx] and $FF) <> 0)) |
01332828b568
Fancier detection of hogs/objects. Hogs wont get buried even by the worst of storms.
Palewolf
parents:
4803
diff
changeset
|
866 |
then move:=true |
5024 | 867 |
else draw:= true |
868 |
end |
|
869 |
end |
|
870 |
end; |
|
6131 | 871 |
if draw then |
5024 | 872 |
with Gear^ do |
873 |
begin |
|
874 |
// we've collided with land. draw some stuff and get back into the clouds |
|
875 |
move:= true; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
876 |
if (Pos > 20) and ((CurAmmoGear = nil) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
877 |
or (CurAmmoGear^.Kind <> gtRope)) then |
5024 | 878 |
begin |
879 |
////////////////////////////////// TODO - ASK UNC0RR FOR A GOOD HOME FOR THIS //////////////////////////////////// |
|
5025
ac1691d35cf2
Land sprayer tweaks, make land spray and mudball not end turn
nemo
parents:
5024
diff
changeset
|
880 |
if not gun then |
5024 | 881 |
begin |
882 |
dec(yy,3); |
|
883 |
dec(xx,1) |
|
884 |
end; |
|
885 |
s:= SpritesData[sprSnow].Surface; |
|
886 |
p:= s^.pixels; |
|
887 |
allpx:= true; |
|
888 |
for py:= 0 to Pred(s^.h) do |
|
889 |
begin |
|
890 |
for px:= 0 to Pred(s^.w) do |
|
6419
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
891 |
begin |
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
892 |
lx:=xx + px; ly:=yy + py; |
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
893 |
if (ly and LAND_HEIGHT_MASK = 0) and (lx and LAND_WIDTH_MASK = 0) and (Land[ly, lx] and $FF = 0) then |
5024 | 894 |
begin |
6419
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
895 |
rx:= lx; |
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
896 |
ry:= ly; |
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
897 |
if cReducedQuality and rqBlurryLand <> 0 then |
5025
ac1691d35cf2
Land sprayer tweaks, make land spray and mudball not end turn
nemo
parents:
5024
diff
changeset
|
898 |
begin |
6419
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
899 |
rx:= rx div 2;ry:= ry div 2; |
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
900 |
end; |
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
|
901 |
if Land[yy + py, xx + px] <= lfAllObjMask then |
5025
ac1691d35cf2
Land sprayer tweaks, make land spray and mudball not end turn
nemo
parents:
5024
diff
changeset
|
902 |
if gun then |
6419
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
903 |
begin |
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
904 |
LandDirty[yy div 32, xx div 32]:= 1; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
905 |
if LandPixels[ry, rx] = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
906 |
Land[ly, lx]:= lfDamaged or lfObject |
6419
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
907 |
else Land[ly, lx]:= lfDamaged or lfBasic |
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
908 |
end |
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
909 |
else Land[ly, lx]:= lf; |
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
910 |
if gun 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:
10642
diff
changeset
|
911 |
LandPixels[ry, rx]:= (Gear^.Tint shr 24 shl RShift) 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:
10642
diff
changeset
|
912 |
(Gear^.Tint shr 16 and $FF shl GShift) 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:
10642
diff
changeset
|
913 |
(Gear^.Tint shr 8 and $FF shl BShift) 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:
10642
diff
changeset
|
914 |
(p^[px] and AMask) |
6419
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
915 |
else LandPixels[ry, rx]:= addBgColor(LandPixels[ry, rx], p^[px]); |
5024 | 916 |
end |
6419
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
917 |
else allpx:= false |
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
918 |
end; |
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10125
diff
changeset
|
919 |
p:= PLongWordArray(@(p^[s^.pitch shr 2])) |
5024 | 920 |
end; |
8795 | 921 |
|
922 |
// Why is this here. For one thing, there's no test on +1 being safe. |
|
6419
6a464d0a5c13
Tidy up flake land generation, to avoid ragged holes in landbacktex. Remove of one odd Land[] change forces a PROTO bump. Well, had to happen eventually.
nemo
parents:
6389
diff
changeset
|
923 |
//Land[py, px+1]:= lfBasic; |
8795 | 924 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
925 |
if allpx then |
7170
84ac6c6d2d8e
Only create textures for non-empty LandPixel chunks. This should save a fair amount of memory, especially on smaller maps, and eliminate a number of draws
nemo
parents:
7168
diff
changeset
|
926 |
UpdateLandTexture(xx, Pred(s^.h), yy, Pred(s^.w), true) |
4791 | 927 |
else |
4611 | 928 |
begin |
5024 | 929 |
UpdateLandTexture( |
930 |
max(0, min(LAND_WIDTH, xx)), |
|
931 |
min(LAND_WIDTH - xx, Pred(s^.w)), |
|
932 |
max(0, min(LAND_WIDTH, yy)), |
|
7170
84ac6c6d2d8e
Only create textures for non-empty LandPixel chunks. This should save a fair amount of memory, especially on smaller maps, and eliminate a number of draws
nemo
parents:
7168
diff
changeset
|
933 |
min(LAND_HEIGHT - yy, Pred(s^.h)), false // could this be true without unnecessarily creating blanks? |
5024 | 934 |
); |
4791 | 935 |
end; |
5024 | 936 |
////////////////////////////////// TODO - ASK UNC0RR FOR A GOOD HOME FOR THIS //////////////////////////////////// |
4611 | 937 |
end |
5024 | 938 |
end; |
939 |
||
940 |
if move then |
|
941 |
begin |
|
5025
ac1691d35cf2
Land sprayer tweaks, make land spray and mudball not end turn
nemo
parents:
5024
diff
changeset
|
942 |
if gun then |
5024 | 943 |
begin |
944 |
DeleteGear(Gear); |
|
945 |
exit |
|
946 |
end; |
|
5695 | 947 |
Gear^.Pos:= 0; |
7721 | 948 |
Gear^.X:= int2hwFloat(LongInt(GetRandom(snowRight - snowLeft)) + snowLeft); |
10736
5b7cf9fcb47e
Try to handle negative gravity w/ snow. Still needs to look nicer. Currently causes banding.
nemo
parents:
10679
diff
changeset
|
949 |
if (cGravity < _0) and (yy < LAND_HEIGHT-1200) then |
5b7cf9fcb47e
Try to handle negative gravity w/ snow. Still needs to look nicer. Currently causes banding.
nemo
parents:
10679
diff
changeset
|
950 |
Gear^.Y:= int2hwFloat(LAND_HEIGHT - 50 - LongInt(GetRandom(50))) |
5b7cf9fcb47e
Try to handle negative gravity w/ snow. Still needs to look nicer. Currently causes banding.
nemo
parents:
10679
diff
changeset
|
951 |
else Gear^.Y:= int2hwFloat(LAND_HEIGHT + LongInt(GetRandom(50)) - 1250); |
5413 | 952 |
Gear^.State:= Gear^.State or gstInvisible; |
4611 | 953 |
end |
954 |
end; |
|
955 |
||
4578 | 956 |
//////////////////////////////////////////////////////////////////////////////// |
4 | 957 |
procedure doStepGrave(Gear: PGear); |
958 |
begin |
|
7394 | 959 |
if (Gear^.Message and gmDestroy) <> 0 then |
7393
3f203c62353b
Fix bug in resurrector deleting graves (exists in stable too), remove some unnecessary assignments due to the fillchar 0
nemo
parents:
7391
diff
changeset
|
960 |
begin |
3f203c62353b
Fix bug in resurrector deleting graves (exists in stable too), remove some unnecessary assignments due to the fillchar 0
nemo
parents:
7391
diff
changeset
|
961 |
DeleteGear(Gear); |
3f203c62353b
Fix bug in resurrector deleting graves (exists in stable too), remove some unnecessary assignments due to the fillchar 0
nemo
parents:
7391
diff
changeset
|
962 |
exit |
3f203c62353b
Fix bug in resurrector deleting graves (exists in stable too), remove some unnecessary assignments due to the fillchar 0
nemo
parents:
7391
diff
changeset
|
963 |
end; |
7394 | 964 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
965 |
AllInactive := false; |
7394 | 966 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
967 |
if Gear^.dY.isNegative then |
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
968 |
if TestCollisionY(Gear, -1) <> 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
969 |
Gear^.dY := _0; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
970 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
971 |
if not Gear^.dY.isNegative then |
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
972 |
if TestCollisionY(Gear, 1) <> 0 then |
9820 | 973 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
974 |
Gear^.dY := - Gear^.dY * Gear^.Elasticity; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
975 |
if Gear^.dY > - _1div1024 then |
9820 | 976 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
977 |
Gear^.Active := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
978 |
exit |
9820 | 979 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
980 |
else if Gear^.dY < - _0_03 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
981 |
PlaySound(Gear^.ImpactSound) |
9820 | 982 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
983 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
984 |
Gear^.Y := Gear^.Y + Gear^.dY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
985 |
CheckGearDrowning(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
986 |
Gear^.dY := Gear^.dY + cGravity |
4 | 987 |
end; |
988 |
||
989 |
//////////////////////////////////////////////////////////////////////////////// |
|
3080 | 990 |
procedure doStepBeeWork(Gear: PGear); |
8795 | 991 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
992 |
t: hwFloat; |
5748
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
993 |
gX,gY,i: LongInt; |
6251 | 994 |
uw, nuw: boolean; |
5748
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
995 |
flower: PVisualGear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
996 |
|
4 | 997 |
begin |
9473
a51a69094c24
partial implementation of non-infinite world (edge wrap/warp/bounce)
nemo
parents:
9470
diff
changeset
|
998 |
WorldWrap(Gear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
999 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1000 |
gX := hwRound(Gear^.X); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1001 |
gY := hwRound(Gear^.Y); |
6251 | 1002 |
uw := (Gear^.Tag <> 0); // was bee underwater last tick? |
10354 | 1003 |
nuw := CheckCoordInWater(gx, gy + Gear^.Radius); // is bee underwater now? |
6251 | 1004 |
|
1005 |
// if water entered or left |
|
1006 |
if nuw <> uw then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1007 |
begin |
10363 | 1008 |
if Gear^.Timer <> 5000 then |
1009 |
AddSplashForGear(Gear, false); |
|
7053 | 1010 |
StopSoundChan(Gear^.SoundChannel); |
6251 | 1011 |
if nuw then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1012 |
begin |
6251 | 1013 |
Gear^.SoundChannel := LoopSound(sndBeeWater); |
1014 |
Gear^.Tag := 1; |
|
1015 |
end |
|
1016 |
else |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1017 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1018 |
Gear^.SoundChannel := LoopSound(sndBee); |
6251 | 1019 |
Gear^.Tag := 0; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1020 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1021 |
end; |
6251 | 1022 |
|
1023 |
||
1024 |
if Gear^.Timer = 0 then |
|
9766
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1025 |
begin |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1026 |
// no "fuel"? just fall |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1027 |
doStepFallingGear(Gear); |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1028 |
// if drowning, stop bee sound |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1029 |
if (Gear^.State and gstDrowning) <> 0 then |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1030 |
StopSoundChan(Gear^.SoundChannel); |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1031 |
end |
6251 | 1032 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1033 |
begin |
6251 | 1034 |
if (GameTicks and $F) = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1035 |
begin |
6251 | 1036 |
if (GameTicks and $30) = 0 then |
10352 | 1037 |
AddVisualGear(gX, gY, vgtBeeTrace); |
1038 |
||
6251 | 1039 |
Gear^.dX := Gear^.Elasticity * (Gear^.dX + _0_000064 * (Gear^.Target.X - gX)); |
1040 |
Gear^.dY := Gear^.Elasticity * (Gear^.dY + _0_000064 * (Gear^.Target.Y - gY)); |
|
1041 |
// make sure new speed isn't higher than original one (which we stored in Friction variable) |
|
1042 |
t := Gear^.Friction / Distance(Gear^.dX, Gear^.dY); |
|
1043 |
Gear^.dX := Gear^.dX * t; |
|
1044 |
Gear^.dY := Gear^.dY * t; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1045 |
end; |
6251 | 1046 |
|
1047 |
Gear^.X := Gear^.X + Gear^.dX; |
|
1048 |
Gear^.Y := Gear^.Y + Gear^.dY; |
|
1049 |
||
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1050 |
end; |
3591 | 1051 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1052 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1053 |
CheckCollision(Gear); |
6251 | 1054 |
if ((Gear^.State and gstCollision) <> 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1055 |
begin |
7053 | 1056 |
StopSoundChan(Gear^.SoundChannel); |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
1057 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, Gear^.Hedgehog, EXPLAutoSound); |
5748
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1058 |
for i:= 0 to 31 do |
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1059 |
begin |
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1060 |
flower:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtStraightShot); |
6131 | 1061 |
if flower <> nil then |
5748
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1062 |
with flower^ do |
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1063 |
begin |
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1064 |
Scale:= 0.75; |
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1065 |
dx:= 0.001 * (random(200)); |
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1066 |
dy:= 0.001 * (random(200)); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1067 |
if random(2) = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1068 |
dx := -dx; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1069 |
if random(2) = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1070 |
dy := -dy; |
5748
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1071 |
FrameTicks:= random(250) + 250; |
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1072 |
State:= ord(sprTargetBee); |
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1073 |
end; |
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1074 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1075 |
DeleteGear(Gear); |
10135 | 1076 |
exit; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1077 |
end; |
6251 | 1078 |
|
1079 |
if (Gear^.Timer > 0) then |
|
9766
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1080 |
begin |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1081 |
dec(Gear^.Timer); |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1082 |
if Gear^.Timer = 0 then |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1083 |
begin |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1084 |
// no need to display remaining time anymore |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1085 |
Gear^.RenderTimer:= false; |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1086 |
// bee can drown when timer reached 0 |
9954 | 1087 |
Gear^.State:= Gear^.State and (not gstSubmersible); |
9766
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1088 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1089 |
end; |
4 | 1090 |
end; |
1091 |
||
3080 | 1092 |
procedure doStepBee(Gear: PGear); |
4 | 1093 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1094 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1095 |
Gear^.X := Gear^.X + Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1096 |
Gear^.Y := Gear^.Y + Gear^.dY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1097 |
Gear^.dY := Gear^.dY + cGravity; |
10363 | 1098 |
CheckGearDrowning(Gear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1099 |
CheckCollision(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1100 |
if (Gear^.State and gstCollision) <> 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1101 |
begin |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
1102 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, Gear^.Hedgehog, EXPLAutoSound); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1103 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1104 |
exit |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1105 |
end; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1106 |
dec(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1107 |
if Gear^.Timer = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1108 |
begin |
6450 | 1109 |
Gear^.Hedgehog^.Gear^.Message:= Gear^.Hedgehog^.Gear^.Message and (not gmAttack); |
1110 |
Gear^.Hedgehog^.Gear^.State:= Gear^.Hedgehog^.Gear^.State and (not gstAttacking); |
|
4135
5be798ecafdc
This should make bee and other targetted things behave more reliably in infinite attack mode. Blocks switching of weps if a target point is active.
nemo
parents:
4104
diff
changeset
|
1111 |
AttackBar:= 0; |
8795 | 1112 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1113 |
Gear^.SoundChannel := LoopSound(sndBee); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1114 |
Gear^.Timer := 5000; |
3591 | 1115 |
// save initial speed in otherwise unused Friction variable |
1116 |
Gear^.Friction := Distance(Gear^.dX, Gear^.dY); |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1117 |
Gear^.doStep := @doStepBeeWork |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1118 |
end; |
4 | 1119 |
end; |
1120 |
||
1121 |
//////////////////////////////////////////////////////////////////////////////// |
|
876 | 1122 |
procedure doStepShotIdle(Gear: PGear); |
1123 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1124 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1125 |
inc(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1126 |
if Gear^.Timer > 75 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1127 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1128 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1129 |
AfterAttack |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1130 |
end |
876 | 1131 |
end; |
1132 |
||
4 | 1133 |
procedure doStepShotgunShot(Gear: PGear); |
8795 | 1134 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1135 |
i: LongWord; |
2828 | 1136 |
shell: PVisualGear; |
4 | 1137 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1138 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1139 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1140 |
if ((Gear^.State and gstAnimation) = 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1141 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1142 |
dec(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1143 |
if Gear^.Timer = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1144 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1145 |
PlaySound(sndShotgunFire); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1146 |
shell := AddVisualGear(hwRound(Gear^.x), hwRound(Gear^.y), vgtShell); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1147 |
if shell <> nil then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1148 |
begin |
3593
ae50f63e4fa9
Remove hwFloat from VisualGears - they don't need the precision for syncing purposes, and it saves a whole lot of operations.
nemo
parents:
3591
diff
changeset
|
1149 |
shell^.dX := gear^.dX.QWordValue / -17179869184; |
ae50f63e4fa9
Remove hwFloat from VisualGears - they don't need the precision for syncing purposes, and it saves a whole lot of operations.
nemo
parents:
3591
diff
changeset
|
1150 |
shell^.dY := gear^.dY.QWordValue / -17179869184; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1151 |
shell^.Frame := 0 |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1152 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1153 |
Gear^.State := Gear^.State or gstAnimation |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1154 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1155 |
exit |
7564
651d56a6e568
Cancel shotgun shot if hedgehog is moved moved (by explosion)
unc0rr
parents:
7539
diff
changeset
|
1156 |
end else |
651d56a6e568
Cancel shotgun shot if hedgehog is moved moved (by explosion)
unc0rr
parents:
7539
diff
changeset
|
1157 |
if(Gear^.Hedgehog^.Gear = nil) or ((Gear^.Hedgehog^.Gear^.State and gstMoving) <> 0) then |
651d56a6e568
Cancel shotgun shot if hedgehog is moved moved (by explosion)
unc0rr
parents:
7539
diff
changeset
|
1158 |
begin |
651d56a6e568
Cancel shotgun shot if hedgehog is moved moved (by explosion)
unc0rr
parents:
7539
diff
changeset
|
1159 |
DeleteGear(Gear); |
651d56a6e568
Cancel shotgun shot if hedgehog is moved moved (by explosion)
unc0rr
parents:
7539
diff
changeset
|
1160 |
AfterAttack; |
651d56a6e568
Cancel shotgun shot if hedgehog is moved moved (by explosion)
unc0rr
parents:
7539
diff
changeset
|
1161 |
exit |
651d56a6e568
Cancel shotgun shot if hedgehog is moved moved (by explosion)
unc0rr
parents:
7539
diff
changeset
|
1162 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1163 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1164 |
inc(Gear^.Timer); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1165 |
|
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1166 |
i := 200; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1167 |
repeat |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1168 |
Gear^.X := Gear^.X + Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1169 |
Gear^.Y := Gear^.Y + Gear^.dY; |
9485
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1170 |
WorldWrap(Gear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1171 |
CheckCollision(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1172 |
if (Gear^.State and gstCollision) <> 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1173 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1174 |
Gear^.X := Gear^.X + Gear^.dX * 8; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1175 |
Gear^.Y := Gear^.Y + Gear^.dY * 8; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1176 |
ShotgunShot(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1177 |
Gear^.doStep := @doStepShotIdle; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1178 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1179 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1180 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1181 |
CheckGearDrowning(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1182 |
if (Gear^.State and gstDrowning) <> 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1183 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1184 |
Gear^.doStep := @doStepShotIdle; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1185 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1186 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1187 |
dec(i) |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1188 |
until i = 0; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1189 |
if (hwRound(Gear^.X) and LAND_WIDTH_MASK <> 0) or (hwRound(Gear^.Y) and LAND_HEIGHT_MASK <> 0) then |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1190 |
Gear^.doStep := @doStepShotIdle |
4 | 1191 |
end; |
1192 |
||
1193 |
//////////////////////////////////////////////////////////////////////////////// |
|
5841 | 1194 |
procedure spawnBulletTrail(Bullet: PGear); |
1195 |
var oX, oY: hwFloat; |
|
1196 |
VGear: PVisualGear; |
|
1197 |
begin |
|
1198 |
if Bullet^.PortalCounter = 0 then |
|
1199 |
begin |
|
1200 |
ox:= CurrentHedgehog^.Gear^.X + Int2hwFloat(GetLaunchX(CurrentHedgehog^.CurAmmoType, hwSign(CurrentHedgehog^.Gear^.dX), CurrentHedgehog^.Gear^.Angle)); |
|
1201 |
oy:= CurrentHedgehog^.Gear^.Y + Int2hwFloat(GetLaunchY(CurrentHedgehog^.CurAmmoType, CurrentHedgehog^.Gear^.Angle)); |
|
1202 |
end |
|
1203 |
else |
|
1204 |
begin |
|
1205 |
ox:= Bullet^.Elasticity; |
|
1206 |
oy:= Bullet^.Friction; |
|
1207 |
end; |
|
1208 |
||
1209 |
// Bullet trail |
|
1210 |
VGear := AddVisualGear(hwRound(ox), hwRound(oy), vgtLineTrail); |
|
8795 | 1211 |
|
5841 | 1212 |
if VGear <> nil then |
1213 |
begin |
|
1214 |
VGear^.X:= hwFloat2Float(ox); |
|
1215 |
VGear^.Y:= hwFloat2Float(oy); |
|
1216 |
VGear^.dX:= hwFloat2Float(Bullet^.X); |
|
1217 |
VGear^.dY:= hwFloat2Float(Bullet^.Y); |
|
1218 |
||
1219 |
// reached edge of land. assume infinite beam. Extend it way out past camera |
|
1220 |
if (hwRound(Bullet^.X) and LAND_WIDTH_MASK <> 0) |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1221 |
or (hwRound(Bullet^.Y) and LAND_HEIGHT_MASK <> 0) then |
5841 | 1222 |
// only extend if not under water |
10354 | 1223 |
if not CheckCoordInWater(hwRound(Bullet^.X), hwRound(Bullet^.Y)) then |
5841 | 1224 |
begin |
7829
c1dc7839d7b9
Set minimums on a few values to avoid camera zooming out past them. partly Issue #430. Might be worth defining a new constant for this.
nemo
parents:
7784
diff
changeset
|
1225 |
VGear^.dX := VGear^.dX + max(LAND_WIDTH,4096) * (VGear^.dX - VGear^.X); |
c1dc7839d7b9
Set minimums on a few values to avoid camera zooming out past them. partly Issue #430. Might be worth defining a new constant for this.
nemo
parents:
7784
diff
changeset
|
1226 |
VGear^.dY := VGear^.dY + max(LAND_WIDTH,4096) * (VGear^.dY - VGear^.Y); |
5841 | 1227 |
end; |
1228 |
||
1229 |
VGear^.Timer := 200; |
|
1230 |
end; |
|
1231 |
end; |
|
1232 |
||
2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2017
diff
changeset
|
1233 |
procedure doStepBulletWork(Gear: PGear); |
8795 | 1234 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1235 |
i, x, y: LongWord; |
9485
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1236 |
oX, oY, tX, tY, cX, cY: hwFloat; |
4327 | 1237 |
VGear: PVisualGear; |
38 | 1238 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1239 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1240 |
inc(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1241 |
i := 80; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1242 |
oX := Gear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1243 |
oY := Gear^.Y; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1244 |
repeat |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1245 |
Gear^.X := Gear^.X + Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1246 |
Gear^.Y := Gear^.Y + Gear^.dY; |
9485
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1247 |
tX:= Gear^.X; |
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1248 |
tY:= Gear^.Y; |
9565 | 1249 |
if (Gear^.PortalCounter < 30) and WorldWrap(Gear) then |
9485
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1250 |
begin |
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1251 |
cX:= Gear^.X; |
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1252 |
cY:= Gear^.Y; |
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1253 |
Gear^.X:= tX; |
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1254 |
Gear^.Y:= tY; |
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1255 |
SpawnBulletTrail(Gear); |
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1256 |
Gear^.X:= cX; |
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1257 |
Gear^.Y:= cY; |
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1258 |
inc(Gear^.PortalCounter); |
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1259 |
Gear^.Elasticity:= Gear^.X; |
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1260 |
Gear^.Friction:= Gear^.Y; |
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1261 |
SpawnBulletTrail(Gear); |
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1262 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1263 |
x := hwRound(Gear^.X); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1264 |
y := hwRound(Gear^.Y); |
8795 | 1265 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1266 |
if ((y and LAND_HEIGHT_MASK) = 0) and ((x and LAND_WIDTH_MASK) = 0) and (Land[y, x] <> 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1267 |
inc(Gear^.Damage); |
5841 | 1268 |
// let's interrupt before a collision to give portals a chance to catch the bullet |
9954 | 1269 |
if (Gear^.Damage = 1) and (Gear^.Tag = 0) and (not CheckLandValue(x, y, lfLandMask)) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1270 |
begin |
5841 | 1271 |
Gear^.Tag := 1; |
1272 |
Gear^.Damage := 0; |
|
1273 |
Gear^.X := Gear^.X - Gear^.dX; |
|
1274 |
Gear^.Y := Gear^.Y - Gear^.dY; |
|
1275 |
CheckGearDrowning(Gear); |
|
1276 |
break; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1277 |
end |
5841 | 1278 |
else |
1279 |
Gear^.Tag := 0; |
|
1280 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1281 |
if Gear^.Damage > 5 then |
10125 | 1282 |
begin |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3821
diff
changeset
|
1283 |
if Gear^.AmmoType = amDEagle then |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1284 |
AmmoShove(Gear, 7, 20) |
10125 | 1285 |
else |
1286 |
AmmoShove(Gear, Gear^.Timer, 20); |
|
1287 |
end; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1288 |
CheckGearDrowning(Gear); |
8795 | 1289 |
dec(i) |
7204
522f165cd2e7
- Fix damage calculation in TestSniperRifle, aim a bit lower to compensate initial angle shift in sniper rifle. As a result, AI seems to never fail sniper rifle shots.
unc0rr
parents:
7195
diff
changeset
|
1290 |
until (i = 0) or (Gear^.Damage > Gear^.Health) or ((Gear^.State and gstDrowning) <> 0); |
522f165cd2e7
- Fix damage calculation in TestSniperRifle, aim a bit lower to compensate initial angle shift in sniper rifle. As a result, AI seems to never fail sniper rifle shots.
unc0rr
parents:
7195
diff
changeset
|
1291 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1292 |
if Gear^.Damage > 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1293 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1294 |
DrawTunnel(oX, oY, Gear^.dX, Gear^.dY, 82 - i, 1); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1295 |
dec(Gear^.Health, Gear^.Damage); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1296 |
Gear^.Damage := 0 |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1297 |
end; |
10650
7f23971bd9db
fix some old code that assumes that a bullet under water is always outside land array - which is wrong (e.g. during sudden-death in previous releases, also weSea now)
sheepluva
parents:
10645
diff
changeset
|
1298 |
|
7f23971bd9db
fix some old code that assumes that a bullet under water is always outside land array - which is wrong (e.g. during sudden-death in previous releases, also weSea now)
sheepluva
parents:
10645
diff
changeset
|
1299 |
if ((Gear^.State and gstDrowning) <> 0) and (Gear^.Health > 0) then |
7f23971bd9db
fix some old code that assumes that a bullet under water is always outside land array - which is wrong (e.g. during sudden-death in previous releases, also weSea now)
sheepluva
parents:
10645
diff
changeset
|
1300 |
begin |
7f23971bd9db
fix some old code that assumes that a bullet under water is always outside land array - which is wrong (e.g. during sudden-death in previous releases, also weSea now)
sheepluva
parents:
10645
diff
changeset
|
1301 |
// draw bubbles |
7f23971bd9db
fix some old code that assumes that a bullet under water is always outside land array - which is wrong (e.g. during sudden-death in previous releases, also weSea now)
sheepluva
parents:
10645
diff
changeset
|
1302 |
if (not SuddenDeathDmg and (WaterOpacity < $FF)) or (SuddenDeathDmg and (SDWaterOpacity < $FF)) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1303 |
begin |
10650
7f23971bd9db
fix some old code that assumes that a bullet under water is always outside land array - which is wrong (e.g. during sudden-death in previous releases, also weSea now)
sheepluva
parents:
10645
diff
changeset
|
1304 |
for i:=(Gear^.Health * 4) downto 0 do |
7f23971bd9db
fix some old code that assumes that a bullet under water is always outside land array - which is wrong (e.g. during sudden-death in previous releases, also weSea now)
sheepluva
parents:
10645
diff
changeset
|
1305 |
begin |
7f23971bd9db
fix some old code that assumes that a bullet under water is always outside land array - which is wrong (e.g. during sudden-death in previous releases, also weSea now)
sheepluva
parents:
10645
diff
changeset
|
1306 |
if Random(6) = 0 then |
7f23971bd9db
fix some old code that assumes that a bullet under water is always outside land array - which is wrong (e.g. during sudden-death in previous releases, also weSea now)
sheepluva
parents:
10645
diff
changeset
|
1307 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtBubble); |
7f23971bd9db
fix some old code that assumes that a bullet under water is always outside land array - which is wrong (e.g. during sudden-death in previous releases, also weSea now)
sheepluva
parents:
10645
diff
changeset
|
1308 |
Gear^.X := Gear^.X + Gear^.dX; |
7f23971bd9db
fix some old code that assumes that a bullet under water is always outside land array - which is wrong (e.g. during sudden-death in previous releases, also weSea now)
sheepluva
parents:
10645
diff
changeset
|
1309 |
Gear^.Y := Gear^.Y + Gear^.dY; |
7f23971bd9db
fix some old code that assumes that a bullet under water is always outside land array - which is wrong (e.g. during sudden-death in previous releases, also weSea now)
sheepluva
parents:
10645
diff
changeset
|
1310 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1311 |
end; |
10650
7f23971bd9db
fix some old code that assumes that a bullet under water is always outside land array - which is wrong (e.g. during sudden-death in previous releases, also weSea now)
sheepluva
parents:
10645
diff
changeset
|
1312 |
// bullet dies underwater |
7f23971bd9db
fix some old code that assumes that a bullet under water is always outside land array - which is wrong (e.g. during sudden-death in previous releases, also weSea now)
sheepluva
parents:
10645
diff
changeset
|
1313 |
Gear^.Health:= 0; |
2994
7ae3067546f2
Palewolf adds bubbles and splashes when firing bullets into the water
nemo
parents:
2989
diff
changeset
|
1314 |
end; |
1760 | 1315 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1316 |
if (Gear^.Health <= 0) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1317 |
or (hwRound(Gear^.X) and LAND_WIDTH_MASK <> 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1318 |
or (hwRound(Gear^.Y) and LAND_HEIGHT_MASK <> 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1319 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1320 |
if (Gear^.Kind = gtSniperRifleShot) and ((GameFlags and gfLaserSight) = 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1321 |
cLaserSighting := false; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1322 |
if (Ammoz[Gear^.AmmoType].Ammo.NumPerTurn <= CurrentHedgehog^.MultiShootAttacks) and ((GameFlags and gfArtillery) = 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1323 |
cArtillery := false; |
8795 | 1324 |
|
4327 | 1325 |
// Bullet Hit |
10650
7f23971bd9db
fix some old code that assumes that a bullet under water is always outside land array - which is wrong (e.g. during sudden-death in previous releases, also weSea now)
sheepluva
parents:
10645
diff
changeset
|
1326 |
if ((Gear^.State and gstDrowning) = 0) and (hwRound(Gear^.X) and LAND_WIDTH_MASK = 0) and (hwRound(Gear^.Y) and LAND_HEIGHT_MASK = 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1327 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1328 |
VGear := AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtBulletHit); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1329 |
if VGear <> nil then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1330 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1331 |
VGear^.Angle := DxDy2Angle(-Gear^.dX, Gear^.dY); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1332 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1333 |
end; |
8795 | 1334 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1335 |
spawnBulletTrail(Gear); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1336 |
Gear^.doStep := @doStepShotIdle |
4327 | 1337 |
end; |
37 | 1338 |
end; |
1339 |
||
559 | 1340 |
procedure doStepDEagleShot(Gear: PGear); |
1341 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1342 |
PlaySound(sndGun); |
5926
09bbc7b88714
2 extra steps was still occasionally causing problems w/ edge cases. hopefully 3 should do the trick
nemo
parents:
5924
diff
changeset
|
1343 |
// add 3 initial steps to avoid problem with ammoshove related to calculation of radius + 1 radius as gear widths, and also just plain old weird angles |
09bbc7b88714
2 extra steps was still occasionally causing problems w/ edge cases. hopefully 3 should do the trick
nemo
parents:
5924
diff
changeset
|
1344 |
Gear^.X := Gear^.X + Gear^.dX * 3; |
09bbc7b88714
2 extra steps was still occasionally causing problems w/ edge cases. hopefully 3 should do the trick
nemo
parents:
5924
diff
changeset
|
1345 |
Gear^.Y := Gear^.Y + Gear^.dY * 3; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1346 |
Gear^.doStep := @doStepBulletWork |
2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2017
diff
changeset
|
1347 |
end; |
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2017
diff
changeset
|
1348 |
|
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2017
diff
changeset
|
1349 |
procedure doStepSniperRifleShot(Gear: PGear); |
8795 | 1350 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1351 |
HHGear: PGear; |
2828 | 1352 |
shell: PVisualGear; |
2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2017
diff
changeset
|
1353 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1354 |
cArtillery := true; |
4365 | 1355 |
HHGear := Gear^.Hedgehog^.Gear; |
10174 | 1356 |
|
1357 |
if HHGear = nil then |
|
1358 |
begin |
|
1359 |
DeleteGear(gear); |
|
1360 |
exit |
|
1361 |
end; |
|
1362 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1363 |
HHGear^.State := HHGear^.State or gstNotKickable; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1364 |
HedgehogChAngle(HHGear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1365 |
if not cLaserSighting then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1366 |
// game does not have default laser sight. turn it on and give them a chance to aim |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1367 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1368 |
cLaserSighting := true; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1369 |
HHGear^.Message := 0; |
7066
12cc2bd84b0b
Make pas2c even more happier with uGears.c, allow assigning arrays in some cases
unc0rr
parents:
7062
diff
changeset
|
1370 |
if (HHGear^.Angle >= 32) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1371 |
dec(HHGear^.Angle,32) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1372 |
end; |
2031
b6f3e56fb100
david_ac's game scheme options for mine delay/quantity, tweaks to sniper rifle
nemo
parents:
2029
diff
changeset
|
1373 |
|
3894 | 1374 |
if (HHGear^.Message and gmAttack) <> 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1375 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1376 |
shell := AddVisualGear(hwRound(Gear^.x), hwRound(Gear^.y), vgtShell); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1377 |
if shell <> nil then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1378 |
begin |
3593
ae50f63e4fa9
Remove hwFloat from VisualGears - they don't need the precision for syncing purposes, and it saves a whole lot of operations.
nemo
parents:
3591
diff
changeset
|
1379 |
shell^.dX := gear^.dX.QWordValue / -8589934592; |
ae50f63e4fa9
Remove hwFloat from VisualGears - they don't need the precision for syncing purposes, and it saves a whole lot of operations.
nemo
parents:
3591
diff
changeset
|
1380 |
shell^.dY := gear^.dY.QWordValue / -8589934592; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1381 |
shell^.Frame := 1 |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1382 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1383 |
Gear^.State := Gear^.State or gstAnimation; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1384 |
Gear^.dX := SignAs(AngleSin(HHGear^.Angle), HHGear^.dX) * _0_5; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1385 |
Gear^.dY := -AngleCos(HHGear^.Angle) * _0_5; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1386 |
PlaySound(sndGun); |
5926
09bbc7b88714
2 extra steps was still occasionally causing problems w/ edge cases. hopefully 3 should do the trick
nemo
parents:
5924
diff
changeset
|
1387 |
// add 3 initial steps to avoid problem with ammoshove related to calculation of radius + 1 radius as gear widths, and also just weird angles |
8795 | 1388 |
Gear^.X := Gear^.X + Gear^.dX * 3; |
5926
09bbc7b88714
2 extra steps was still occasionally causing problems w/ edge cases. hopefully 3 should do the trick
nemo
parents:
5924
diff
changeset
|
1389 |
Gear^.Y := Gear^.Y + Gear^.dY * 3; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1390 |
Gear^.doStep := @doStepBulletWork; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1391 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1392 |
else |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1393 |
if (GameTicks mod 32) = 0 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1394 |
if (GameTicks mod 4096) < 2048 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1395 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1396 |
if (HHGear^.Angle + 1 <= cMaxAngle) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1397 |
inc(HHGear^.Angle) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1398 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1399 |
else |
7066
12cc2bd84b0b
Make pas2c even more happier with uGears.c, allow assigning arrays in some cases
unc0rr
parents:
7062
diff
changeset
|
1400 |
if (HHGear^.Angle >= 1) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1401 |
dec(HHGear^.Angle); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1402 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1403 |
if (TurnTimeLeft > 0) then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1404 |
dec(TurnTimeLeft) |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1405 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1406 |
begin |
10831
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
1407 |
HHGear^.State := HHGear^.State and (not gstNotKickable); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1408 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1409 |
AfterAttack |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1410 |
end; |
559 | 1411 |
end; |
1412 |
||
37 | 1413 |
//////////////////////////////////////////////////////////////////////////////// |
4 | 1414 |
procedure doStepActionTimer(Gear: PGear); |
1415 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1416 |
dec(Gear^.Timer); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1417 |
case Gear^.Kind of |
8795 | 1418 |
gtATStartGame: |
8679 | 1419 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1420 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1421 |
if Gear^.Timer = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1422 |
begin |
5354 | 1423 |
AddCaption(trmsg[sidStartFight], cWhiteColor, capgrpGameState); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1424 |
end |
8679 | 1425 |
end; |
8795 | 1426 |
gtATFinishGame: |
8679 | 1427 |
begin |
5368
a66d5141a3ba
fix build. seems like a indentation-related merge-oopsy dragged deleted code back in.
sheepluva
parents:
5366
diff
changeset
|
1428 |
AllInactive := false; |
a66d5141a3ba
fix build. seems like a indentation-related merge-oopsy dragged deleted code back in.
sheepluva
parents:
5366
diff
changeset
|
1429 |
if Gear^.Timer = 1000 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1430 |
begin |
5368
a66d5141a3ba
fix build. seems like a indentation-related merge-oopsy dragged deleted code back in.
sheepluva
parents:
5366
diff
changeset
|
1431 |
ScreenFade := sfToBlack; |
a66d5141a3ba
fix build. seems like a indentation-related merge-oopsy dragged deleted code back in.
sheepluva
parents:
5366
diff
changeset
|
1432 |
ScreenFadeValue := 0; |
a66d5141a3ba
fix build. seems like a indentation-related merge-oopsy dragged deleted code back in.
sheepluva
parents:
5366
diff
changeset
|
1433 |
ScreenFadeSpeed := 1; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1434 |
end; |
5368
a66d5141a3ba
fix build. seems like a indentation-related merge-oopsy dragged deleted code back in.
sheepluva
parents:
5366
diff
changeset
|
1435 |
if Gear^.Timer = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1436 |
begin |
7068 | 1437 |
SendIPC(_S'N'); |
1438 |
SendIPC(_S'q'); |
|
5368
a66d5141a3ba
fix build. seems like a indentation-related merge-oopsy dragged deleted code back in.
sheepluva
parents:
5366
diff
changeset
|
1439 |
GameState := gsExit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1440 |
end |
8679 | 1441 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1442 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1443 |
if Gear^.Timer = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1444 |
DeleteGear(Gear) |
4 | 1445 |
end; |
1446 |
||
1447 |
//////////////////////////////////////////////////////////////////////////////// |
|
1448 |
procedure doStepPickHammerWork(Gear: PGear); |
|
8795 | 1449 |
var |
4578 | 1450 |
i, ei, x, y: LongInt; |
4 | 1451 |
HHGear: PGear; |
1452 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1453 |
AllInactive := false; |
9487
fbe203c1d11e
couple more wrap calls. freezer still doesn't propagate properly. mostly due to
nemo
parents:
9485
diff
changeset
|
1454 |
WorldWrap(Gear); |
4365 | 1455 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1456 |
dec(Gear^.Timer); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1457 |
if ((GameFlags and gfInfAttack) <> 0) and (TurnTimeLeft > 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1458 |
dec(TurnTimeLeft); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1459 |
if (TurnTimeLeft = 0) or (Gear^.Timer = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1460 |
or((Gear^.Message and gmDestroy) <> 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1461 |
or((HHGear^.State and gstHHDriven) =0) then |
4578 | 1462 |
begin |
7053 | 1463 |
StopSoundChan(Gear^.SoundChannel); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1464 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1465 |
AfterAttack; |
3954
ae3583ad6ea9
Hopefully fix the last of the more obvious weapon bugs w/ infinite attack mode, add a depixeling sweep every 5s too.
nemo
parents:
3953
diff
changeset
|
1466 |
doStepHedgehogMoving(HHGear); // for gfInfAttack |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1467 |
exit |
4578 | 1468 |
end; |
1469 |
||
1470 |
x:= hwRound(Gear^.X); |
|
1471 |
y:= hwRound(Gear^.Y); |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1472 |
if (Gear^.Timer mod 33) = 0 then |
4578 | 1473 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1474 |
HHGear^.State := HHGear^.State or gstNoDamage; |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
1475 |
doMakeExplosion(x, y + 7, 6, Gear^.Hedgehog, EXPLDontDraw); |
6450 | 1476 |
HHGear^.State := HHGear^.State and (not gstNoDamage) |
4578 | 1477 |
end; |
422 | 1478 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1479 |
if (Gear^.Timer mod 47) = 0 then |
4578 | 1480 |
begin |
1481 |
// ok. this was an attempt to turn off dust if not actually drilling land. I have no idea why it isn't working as expected |
|
6131 | 1482 |
if (( (y + 12) and LAND_HEIGHT_MASK) = 0) and ((x and LAND_WIDTH_MASK) = 0) and (Land[y + 12, x] > 255) then |
4578 | 1483 |
for i:= 0 to 1 do |
1484 |
AddVisualGear(x - 5 + Random(10), y + 12, vgtDust); |
|
1485 |
||
1486 |
i := x - Gear^.Radius - LongInt(GetRandom(2)); |
|
1487 |
ei := x + Gear^.Radius + LongInt(GetRandom(2)); |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1488 |
while i <= ei do |
4578 | 1489 |
begin |
1490 |
DrawExplosion(i, y + 3, 3); |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1491 |
inc(i, 1) |
4578 | 1492 |
end; |
2331
e4941a7986d6
Another try at keeping blowtorch/firepunch/jackhammer from going through indestructible stuff. Shame these routines don't use hedgehog movement
nemo
parents:
2329
diff
changeset
|
1493 |
|
6314 | 1494 |
if CheckLandValue(hwRound(Gear^.X + Gear^.dX + SignAs(_6,Gear^.dX)), hwRound(Gear^.Y + _1_9), lfIndestructible) then |
4578 | 1495 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1496 |
Gear^.X := Gear^.X + Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1497 |
Gear^.Y := Gear^.Y + _1_9; |
4578 | 1498 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1499 |
SetAllHHToActive; |
4578 | 1500 |
end; |
6081
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
1501 |
if TestCollisionYwithGear(Gear, 1) <> 0 then |
4578 | 1502 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1503 |
Gear^.dY := _0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1504 |
SetLittle(HHGear^.dX); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1505 |
HHGear^.dY := _0; |
4578 | 1506 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1507 |
else |
4578 | 1508 |
begin |
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
|
1509 |
if CheckLandValue(hwRound(Gear^.X), hwRound(Gear^.Y + Gear^.dY + cGravity), lfLandMask) then |
6314 | 1510 |
begin |
1511 |
Gear^.dY := Gear^.dY + cGravity; |
|
1512 |
Gear^.Y := Gear^.Y + Gear^.dY |
|
1513 |
end; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1514 |
if hwRound(Gear^.Y) > cWaterLine then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1515 |
Gear^.Timer := 1 |
4578 | 1516 |
end; |
4 | 1517 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1518 |
Gear^.X := Gear^.X + HHGear^.dX; |
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
|
1519 |
if CheckLandValue(hwRound(Gear^.X), hwRound(Gear^.Y)-cHHRadius, lfLandMask) then |
6314 | 1520 |
begin |
1521 |
HHGear^.X := Gear^.X; |
|
1522 |
HHGear^.Y := Gear^.Y - int2hwFloat(cHHRadius) |
|
1523 |
end; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1524 |
|
3894 | 1525 |
if (Gear^.Message and gmAttack) <> 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1526 |
if (Gear^.State and gsttmpFlag) <> 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1527 |
Gear^.Timer := 1 |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1528 |
else //there would be a mistake. |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1529 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1530 |
if (Gear^.State and gsttmpFlag) = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1531 |
Gear^.State := Gear^.State or gsttmpFlag; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1532 |
if ((Gear^.Message and gmLeft) <> 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1533 |
Gear^.dX := - _0_3 |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1534 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1535 |
if ((Gear^.Message and gmRight) <> 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1536 |
Gear^.dX := _0_3 |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1537 |
else Gear^.dX := _0; |
4 | 1538 |
end; |
1539 |
||
1540 |
procedure doStepPickHammer(Gear: PGear); |
|
8795 | 1541 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1542 |
i, y: LongInt; |
4 | 1543 |
ar: TRangeArray; |
911
b709fe13ed69
Fix issue with hedgehog on top of the hedgehog with pickhammer
unc0rr
parents:
883
diff
changeset
|
1544 |
HHGear: PGear; |
4 | 1545 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1546 |
i := 0; |
4365 | 1547 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1548 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1549 |
y := hwRound(Gear^.Y) - cHHRadius * 2; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1550 |
while y < hwRound(Gear^.Y) do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1551 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1552 |
ar[i].Left := hwRound(Gear^.X) - Gear^.Radius - LongInt(GetRandom(2)); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1553 |
ar[i].Right := hwRound(Gear^.X) + Gear^.Radius + LongInt(GetRandom(2)); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1554 |
inc(y, 2); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1555 |
inc(i) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1556 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1557 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1558 |
DrawHLinesExplosions(@ar, 3, hwRound(Gear^.Y) - cHHRadius * 2, 2, Pred(i)); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1559 |
Gear^.dY := HHGear^.dY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1560 |
DeleteCI(HHGear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1561 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1562 |
Gear^.SoundChannel := LoopSound(sndPickhammer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1563 |
doStepPickHammerWork(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1564 |
Gear^.doStep := @doStepPickHammerWork |
4 | 1565 |
end; |
1566 |
||
1567 |
//////////////////////////////////////////////////////////////////////////////// |
|
8795 | 1568 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1569 |
BTPrevAngle, BTSteps: LongInt; |
302 | 1570 |
|
303
1659c4aad5ab
Now blow torch angle can be changed during blowing :)
unc0rr
parents:
302
diff
changeset
|
1571 |
procedure doStepBlowTorchWork(Gear: PGear); |
8795 | 1572 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1573 |
HHGear: PGear; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
1574 |
b: boolean; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
1575 |
prevX: LongInt; |
302 | 1576 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1577 |
AllInactive := false; |
9487
fbe203c1d11e
couple more wrap calls. freezer still doesn't propagate properly. mostly due to
nemo
parents:
9485
diff
changeset
|
1578 |
WorldWrap(Gear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1579 |
dec(Gear^.Timer); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1580 |
if ((GameFlags and gfInfAttack) <> 0) and (TurnTimeLeft > 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1581 |
dec(TurnTimeLeft); |
8795 | 1582 |
|
9385 | 1583 |
if Gear^.Hedgehog^.Gear = nil then |
1584 |
begin |
|
1585 |
DeleteGear(Gear); |
|
1586 |
AfterAttack; |
|
1587 |
exit |
|
1588 |
end; |
|
1589 |
||
4365 | 1590 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1591 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1592 |
HedgehogChAngle(HHGear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1593 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1594 |
b := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1595 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1596 |
if abs(LongInt(HHGear^.Angle) - BTPrevAngle) > 7 then |
5706 | 1597 |
begin |
5722
3b7f2bfc8632
Keep blowtorch direction (doesn't actually fix the bug with hedgehog turning opposite direction)
unc0rr
parents:
5716
diff
changeset
|
1598 |
Gear^.dX := SignAs(AngleSin(HHGear^.Angle) * _0_5, Gear^.dX); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1599 |
Gear^.dY := AngleCos(HHGear^.Angle) * ( - _0_5); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1600 |
BTPrevAngle := HHGear^.Angle; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1601 |
b := true |
5706 | 1602 |
end; |
1528 | 1603 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1604 |
if ((HHGear^.State and gstMoving) <> 0) then |
5706 | 1605 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1606 |
doStepHedgehogMoving(HHGear); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1607 |
if (HHGear^.State and gstHHDriven) = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1608 |
Gear^.Timer := 0 |
5706 | 1609 |
end; |
305 | 1610 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1611 |
if Gear^.Timer mod cHHStepTicks = 0 then |
5706 | 1612 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1613 |
b := true; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1614 |
if Gear^.dX.isNegative then |
3894 | 1615 |
HHGear^.Message := (HHGear^.Message and (gmAttack or gmUp or gmDown)) or gmLeft |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1616 |
else |
3894 | 1617 |
HHGear^.Message := (HHGear^.Message and (gmAttack or gmUp or gmDown)) or gmRight; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1618 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1619 |
if ((HHGear^.State and gstMoving) = 0) then |
5706 | 1620 |
begin |
6450 | 1621 |
HHGear^.State := HHGear^.State and (not gstAttacking); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1622 |
prevX := hwRound(HHGear^.X); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1623 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1624 |
// why the call to HedgehogStep then a further increment of X? |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1625 |
if (prevX = hwRound(HHGear^.X)) and |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1626 |
CheckLandValue(hwRound(HHGear^.X + SignAs(_6, HHGear^.dX)), hwRound(HHGear^.Y), |
3519 | 1627 |
lfIndestructible) then HedgehogStep(HHGear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1628 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1629 |
if (prevX = hwRound(HHGear^.X)) and |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1630 |
CheckLandValue(hwRound(HHGear^.X + SignAs(_6, HHGear^.dX)), hwRound(HHGear^.Y), |
3519 | 1631 |
lfIndestructible) then HHGear^.X := HHGear^.X + SignAs(_1, HHGear^.dX); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1632 |
HHGear^.State := HHGear^.State or gstAttacking |
5706 | 1633 |
end; |
305 | 1634 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1635 |
inc(BTSteps); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1636 |
if BTSteps = 7 then |
5706 | 1637 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1638 |
BTSteps := 0; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1639 |
if CheckLandValue(hwRound(HHGear^.X + Gear^.dX * (cHHRadius + cBlowTorchC) + SignAs(_6,Gear^.dX)), hwRound(HHGear^.Y + Gear^.dY * (cHHRadius + cBlowTorchC)),lfIndestructible) then |
5706 | 1640 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1641 |
Gear^.X := HHGear^.X + Gear^.dX * (cHHRadius + cBlowTorchC); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1642 |
Gear^.Y := HHGear^.Y + Gear^.dY * (cHHRadius + cBlowTorchC); |
5706 | 1643 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1644 |
HHGear^.State := HHGear^.State or gstNoDamage; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1645 |
AmmoShove(Gear, 2, 15); |
6450 | 1646 |
HHGear^.State := HHGear^.State and (not gstNoDamage) |
5706 | 1647 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
1648 |
end; |
305 | 1649 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1650 |
if b then |
9385 | 1651 |
begin |
6278
654eed7c6b97
tweak DrawTunnel call of blowtorch. should fix issues with blowtorch going horizontal when it shouldn't
sheepluva
parents:
6251
diff
changeset
|
1652 |
DrawTunnel(HHGear^.X + Gear^.dX * cHHRadius, |
654eed7c6b97
tweak DrawTunnel call of blowtorch. should fix issues with blowtorch going horizontal when it shouldn't
sheepluva
parents:
6251
diff
changeset
|
1653 |
HHGear^.Y + Gear^.dY * cHHRadius - _1 - |
654eed7c6b97
tweak DrawTunnel call of blowtorch. should fix issues with blowtorch going horizontal when it shouldn't
sheepluva
parents:
6251
diff
changeset
|
1654 |
((hwAbs(Gear^.dX) / (hwAbs(Gear^.dX) + hwAbs(Gear^.dY))) * _0_5 * 7), |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1655 |
Gear^.dX, Gear^.dY, |
6278
654eed7c6b97
tweak DrawTunnel call of blowtorch. should fix issues with blowtorch going horizontal when it shouldn't
sheepluva
parents:
6251
diff
changeset
|
1656 |
cHHStepTicks, cHHRadius * 2 + 7); |
9385 | 1657 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1658 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1659 |
if (TurnTimeLeft = 0) or (Gear^.Timer = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1660 |
or ((HHGear^.Message and gmAttack) <> 0) then |
5706 | 1661 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1662 |
HHGear^.Message := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1663 |
HHGear^.State := HHGear^.State and (not gstNotKickable); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1664 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1665 |
AfterAttack |
5706 | 1666 |
end |
302 | 1667 |
end; |
1668 |
||
303
1659c4aad5ab
Now blow torch angle can be changed during blowing :)
unc0rr
parents:
302
diff
changeset
|
1669 |
procedure doStepBlowTorch(Gear: PGear); |
8795 | 1670 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1671 |
HHGear: PGear; |
303
1659c4aad5ab
Now blow torch angle can be changed during blowing :)
unc0rr
parents:
302
diff
changeset
|
1672 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1673 |
BTPrevAngle := High(LongInt); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1674 |
BTSteps := 0; |
4365 | 1675 |
HHGear := Gear^.Hedgehog^.Gear; |
8617
e7bea88096d2
So. A while ago, while trying to prevent hogs blowtorching getting turned around, unc0rr altered the old range of blowtorch from 1/8th of 180° up or down, to a 4° gain in upwards and a -4° loss in downwards. He also made it so that starting tunnels could fail to erase sufficient terrain, trapping hogs. Here are a couple of workarounds to more closely approximate old behaviour (do some initial erasure, adjust min/max angles)
nemo
parents:
8612
diff
changeset
|
1676 |
HedgehogChAngle(HHGear); |
e7bea88096d2
So. A while ago, while trying to prevent hogs blowtorching getting turned around, unc0rr altered the old range of blowtorch from 1/8th of 180° up or down, to a 4° gain in upwards and a -4° loss in downwards. He also made it so that starting tunnels could fail to erase sufficient terrain, trapping hogs. Here are a couple of workarounds to more closely approximate old behaviour (do some initial erasure, adjust min/max angles)
nemo
parents:
8612
diff
changeset
|
1677 |
Gear^.dX := SignAs(AngleSin(HHGear^.Angle) * _0_5, Gear^.dX); |
e7bea88096d2
So. A while ago, while trying to prevent hogs blowtorching getting turned around, unc0rr altered the old range of blowtorch from 1/8th of 180° up or down, to a 4° gain in upwards and a -4° loss in downwards. He also made it so that starting tunnels could fail to erase sufficient terrain, trapping hogs. Here are a couple of workarounds to more closely approximate old behaviour (do some initial erasure, adjust min/max angles)
nemo
parents:
8612
diff
changeset
|
1678 |
Gear^.dY := AngleCos(HHGear^.Angle) * ( - _0_5); |
e7bea88096d2
So. A while ago, while trying to prevent hogs blowtorching getting turned around, unc0rr altered the old range of blowtorch from 1/8th of 180° up or down, to a 4° gain in upwards and a -4° loss in downwards. He also made it so that starting tunnels could fail to erase sufficient terrain, trapping hogs. Here are a couple of workarounds to more closely approximate old behaviour (do some initial erasure, adjust min/max angles)
nemo
parents:
8612
diff
changeset
|
1679 |
DrawTunnel(HHGear^.X, |
e7bea88096d2
So. A while ago, while trying to prevent hogs blowtorching getting turned around, unc0rr altered the old range of blowtorch from 1/8th of 180° up or down, to a 4° gain in upwards and a -4° loss in downwards. He also made it so that starting tunnels could fail to erase sufficient terrain, trapping hogs. Here are a couple of workarounds to more closely approximate old behaviour (do some initial erasure, adjust min/max angles)
nemo
parents:
8612
diff
changeset
|
1680 |
HHGear^.Y + Gear^.dY * cHHRadius - _1 - |
e7bea88096d2
So. A while ago, while trying to prevent hogs blowtorching getting turned around, unc0rr altered the old range of blowtorch from 1/8th of 180° up or down, to a 4° gain in upwards and a -4° loss in downwards. He also made it so that starting tunnels could fail to erase sufficient terrain, trapping hogs. Here are a couple of workarounds to more closely approximate old behaviour (do some initial erasure, adjust min/max angles)
nemo
parents:
8612
diff
changeset
|
1681 |
((hwAbs(Gear^.dX) / (hwAbs(Gear^.dX) + hwAbs(Gear^.dY))) * _0_5 * 7), |
e7bea88096d2
So. A while ago, while trying to prevent hogs blowtorching getting turned around, unc0rr altered the old range of blowtorch from 1/8th of 180° up or down, to a 4° gain in upwards and a -4° loss in downwards. He also made it so that starting tunnels could fail to erase sufficient terrain, trapping hogs. Here are a couple of workarounds to more closely approximate old behaviour (do some initial erasure, adjust min/max angles)
nemo
parents:
8612
diff
changeset
|
1682 |
Gear^.dX, Gear^.dY, |
e7bea88096d2
So. A while ago, while trying to prevent hogs blowtorching getting turned around, unc0rr altered the old range of blowtorch from 1/8th of 180° up or down, to a 4° gain in upwards and a -4° loss in downwards. He also made it so that starting tunnels could fail to erase sufficient terrain, trapping hogs. Here are a couple of workarounds to more closely approximate old behaviour (do some initial erasure, adjust min/max angles)
nemo
parents:
8612
diff
changeset
|
1683 |
cHHStepTicks, cHHRadius * 2 + 7); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1684 |
HHGear^.Message := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1685 |
HHGear^.State := HHGear^.State or gstNotKickable; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1686 |
Gear^.doStep := @doStepBlowTorchWork |
303
1659c4aad5ab
Now blow torch angle can be changed during blowing :)
unc0rr
parents:
302
diff
changeset
|
1687 |
end; |
1659c4aad5ab
Now blow torch angle can be changed during blowing :)
unc0rr
parents:
302
diff
changeset
|
1688 |
|
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:
10736
diff
changeset
|
1689 |
|
302 | 1690 |
//////////////////////////////////////////////////////////////////////////////// |
10 | 1691 |
procedure doStepMine(Gear: PGear); |
5690
f6e0c5bd8020
Allow vgtSmoke to scale. Scale it down 50% for mines, so smoke doesn't seem so oversized
nemo
parents:
5688
diff
changeset
|
1692 |
var vg: PVisualGear; |
8958
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8952
diff
changeset
|
1693 |
dxdy: hwFloat; |
10679
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
1694 |
dmg: LongWord; |
10 | 1695 |
begin |
9043 | 1696 |
if Gear^.Health = 0 then dxdy:= hwAbs(Gear^.dX)+hwAbs(Gear^.dY); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1697 |
if (Gear^.State and gstMoving) <> 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1698 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1699 |
DeleteCI(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1700 |
doStepFallingGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1701 |
if (Gear^.State and gstMoving) = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1702 |
begin |
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9289
diff
changeset
|
1703 |
AddCI(Gear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1704 |
Gear^.dX := _0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1705 |
Gear^.dY := _0 |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1706 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1707 |
CalcRotationDirAngle(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1708 |
AllInactive := false |
7754 | 1709 |
end |
1710 |
else if (GameTicks and $3F) = 25 then |
|
1711 |
doStepFallingGear(Gear); |
|
4966
fa612a614317
make defective mines explode if they take enough damage, add missing interface line for koda's new uSound fade
nemo
parents:
4956
diff
changeset
|
1712 |
if (Gear^.Health = 0) then |
fa612a614317
make defective mines explode if they take enough damage, add missing interface line for koda's new uSound fade
nemo
parents:
4956
diff
changeset
|
1713 |
begin |
8971
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
1714 |
if (dxdy > _0_4) and (Gear^.State and gstCollision <> 0) then |
10679
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
1715 |
begin |
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
1716 |
dmg:= hwRound(dxdy * _50); |
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
1717 |
inc(Gear^.Damage, dmg); |
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
1718 |
ScriptCall('onGearDamage', Gear^.UID, dmg) |
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
1719 |
end; |
8795 | 1720 |
|
6498 | 1721 |
if ((GameTicks and $FF) = 0) and (Gear^.Damage > random(30)) then |
7754 | 1722 |
begin |
1723 |
vg:= AddVisualGear(hwRound(Gear^.X) - 4 + Random(8), hwRound(Gear^.Y) - 4 - Random(4), vgtSmoke); |
|
1724 |
if vg <> nil then |
|
1725 |
vg^.Scale:= 0.5 |
|
1726 |
end; |
|
4966
fa612a614317
make defective mines explode if they take enough damage, add missing interface line for koda's new uSound fade
nemo
parents:
4956
diff
changeset
|
1727 |
|
fa612a614317
make defective mines explode if they take enough damage, add missing interface line for koda's new uSound fade
nemo
parents:
4956
diff
changeset
|
1728 |
if (Gear^.Damage > 35) then |
fa612a614317
make defective mines explode if they take enough damage, add missing interface line for koda's new uSound fade
nemo
parents:
4956
diff
changeset
|
1729 |
begin |
fa612a614317
make defective mines explode if they take enough damage, add missing interface line for koda's new uSound fade
nemo
parents:
4956
diff
changeset
|
1730 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, Gear^.Hedgehog, EXPLAutoSound); |
fa612a614317
make defective mines explode if they take enough damage, add missing interface line for koda's new uSound fade
nemo
parents:
4956
diff
changeset
|
1731 |
DeleteGear(Gear); |
fa612a614317
make defective mines explode if they take enough damage, add missing interface line for koda's new uSound fade
nemo
parents:
4956
diff
changeset
|
1732 |
exit |
fa612a614317
make defective mines explode if they take enough damage, add missing interface line for koda's new uSound fade
nemo
parents:
4956
diff
changeset
|
1733 |
end |
fa612a614317
make defective mines explode if they take enough damage, add missing interface line for koda's new uSound fade
nemo
parents:
4956
diff
changeset
|
1734 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1735 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1736 |
if ((Gear^.State and gsttmpFlag) <> 0) and (Gear^.Health <> 0) then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1737 |
if ((Gear^.State and gstAttacking) = 0) then |
4224
99c6d87df131
No point in leaving hogs at 0, since shotgun triggers death anyway. Also, add some audio cues to extra damage / time
nemo
parents:
4187
diff
changeset
|
1738 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1739 |
if ((GameTicks and $1F) = 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1740 |
if CheckGearNear(Gear, gtHedgehog, 46, 32) <> nil then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1741 |
Gear^.State := Gear^.State or gstAttacking |
4224
99c6d87df131
No point in leaving hogs at 0, since shotgun triggers death anyway. Also, add some audio cues to extra damage / time
nemo
parents:
4187
diff
changeset
|
1742 |
end |
99c6d87df131
No point in leaving hogs at 0, since shotgun triggers death anyway. Also, add some audio cues to extra damage / time
nemo
parents:
4187
diff
changeset
|
1743 |
else // gstAttacking <> 0 |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1744 |
begin |
4224
99c6d87df131
No point in leaving hogs at 0, since shotgun triggers death anyway. Also, add some audio cues to extra damage / time
nemo
parents:
4187
diff
changeset
|
1745 |
AllInactive := false; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1746 |
if (Gear^.Timer and $FF) = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1747 |
PlaySound(sndMineTick); |
4224
99c6d87df131
No point in leaving hogs at 0, since shotgun triggers death anyway. Also, add some audio cues to extra damage / time
nemo
parents:
4187
diff
changeset
|
1748 |
if Gear^.Timer = 0 then |
99c6d87df131
No point in leaving hogs at 0, since shotgun triggers death anyway. Also, add some audio cues to extra damage / time
nemo
parents:
4187
diff
changeset
|
1749 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1750 |
if ((Gear^.State and gstWait) <> 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1751 |
or (cMineDudPercent = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1752 |
or (getRandom(100) > cMineDudPercent) then |
4224
99c6d87df131
No point in leaving hogs at 0, since shotgun triggers death anyway. Also, add some audio cues to extra damage / time
nemo
parents:
4187
diff
changeset
|
1753 |
begin |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
1754 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, Gear^.Hedgehog, EXPLAutoSound); |
4224
99c6d87df131
No point in leaving hogs at 0, since shotgun triggers death anyway. Also, add some audio cues to extra damage / time
nemo
parents:
4187
diff
changeset
|
1755 |
DeleteGear(Gear) |
99c6d87df131
No point in leaving hogs at 0, since shotgun triggers death anyway. Also, add some audio cues to extra damage / time
nemo
parents:
4187
diff
changeset
|
1756 |
end |
99c6d87df131
No point in leaving hogs at 0, since shotgun triggers death anyway. Also, add some audio cues to extra damage / time
nemo
parents:
4187
diff
changeset
|
1757 |
else |
99c6d87df131
No point in leaving hogs at 0, since shotgun triggers death anyway. Also, add some audio cues to extra damage / time
nemo
parents:
4187
diff
changeset
|
1758 |
begin |
5690
f6e0c5bd8020
Allow vgtSmoke to scale. Scale it down 50% for mines, so smoke doesn't seem so oversized
nemo
parents:
5688
diff
changeset
|
1759 |
vg:= AddVisualGear(hwRound(Gear^.X) - 4 + Random(8), hwRound(Gear^.Y) - 4 - Random(4), vgtSmoke); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1760 |
if vg <> nil then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1761 |
vg^.Scale:= 0.5; |
4224
99c6d87df131
No point in leaving hogs at 0, since shotgun triggers death anyway. Also, add some audio cues to extra damage / time
nemo
parents:
4187
diff
changeset
|
1762 |
PlaySound(sndVaporize); |
99c6d87df131
No point in leaving hogs at 0, since shotgun triggers death anyway. Also, add some audio cues to extra damage / time
nemo
parents:
4187
diff
changeset
|
1763 |
Gear^.Health := 0; |
4966
fa612a614317
make defective mines explode if they take enough damage, add missing interface line for koda's new uSound fade
nemo
parents:
4956
diff
changeset
|
1764 |
Gear^.Damage := 0; |
6450 | 1765 |
Gear^.State := Gear^.State and (not gstAttacking) |
4224
99c6d87df131
No point in leaving hogs at 0, since shotgun triggers death anyway. Also, add some audio cues to extra damage / time
nemo
parents:
4187
diff
changeset
|
1766 |
end; |
99c6d87df131
No point in leaving hogs at 0, since shotgun triggers death anyway. Also, add some audio cues to extra damage / time
nemo
parents:
4187
diff
changeset
|
1767 |
exit |
99c6d87df131
No point in leaving hogs at 0, since shotgun triggers death anyway. Also, add some audio cues to extra damage / time
nemo
parents:
4187
diff
changeset
|
1768 |
end; |
99c6d87df131
No point in leaving hogs at 0, since shotgun triggers death anyway. Also, add some audio cues to extra damage / time
nemo
parents:
4187
diff
changeset
|
1769 |
dec(Gear^.Timer); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1770 |
end |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1771 |
else // gsttmpFlag = 0 |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1772 |
if (TurnTimeLeft = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1773 |
or ((GameFlags and gfInfAttack <> 0) and (GameTicks > Gear^.FlightTime)) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1774 |
or (Gear^.Hedgehog^.Gear = nil) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1775 |
Gear^.State := Gear^.State or gsttmpFlag; |
10 | 1776 |
end; |
57 | 1777 |
|
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:
10736
diff
changeset
|
1778 |
(* |
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:
10736
diff
changeset
|
1779 |
Just keeping track for my own benefit. |
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:
10736
diff
changeset
|
1780 |
Every second, locate new target. Clear if target radius has been set to 0 or no target in range. |
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:
10736
diff
changeset
|
1781 |
Every... 16 milliseconds? Update vector to target. |
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:
10736
diff
changeset
|
1782 |
*) |
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:
10736
diff
changeset
|
1783 |
|
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:
10736
diff
changeset
|
1784 |
procedure doStepAirMine(Gear: PGear); |
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:
10736
diff
changeset
|
1785 |
var i,t,targDist,tmpDist: LongWord; |
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:
10736
diff
changeset
|
1786 |
targ, tmpG: PGear; |
10800 | 1787 |
trackSpeed, airFriction, tX, tY: hwFloat; |
10827 | 1788 |
isUnderwater: Boolean; |
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:
10736
diff
changeset
|
1789 |
begin |
10827 | 1790 |
isUnderwater:= CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y) + Gear^.Radius); |
10800 | 1791 |
if Gear^.Pos > 0 then |
1792 |
begin |
|
1793 |
airFriction:= _1; |
|
10827 | 1794 |
if isUnderwater then |
1795 |
dec(airFriction.QWordValue,Gear^.Pos*2) |
|
1796 |
else |
|
1797 |
dec(airFriction.QWordValue,Gear^.Pos); |
|
10800 | 1798 |
Gear^.dX:= Gear^.dX*airFriction; |
1799 |
Gear^.dY:= Gear^.dY*airFriction |
|
1800 |
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:
10736
diff
changeset
|
1801 |
doStepFallingGear(Gear); |
10806 | 1802 |
if (TurnTimeLeft = 0) and ((Gear^.dX.QWordValue + Gear^.dY.QWordValue) > _0_02.QWordValue) then |
1803 |
AllInactive := false; |
|
1804 |
||
1805 |
if (TurnTimeLeft = 0) or (Gear^.Angle = 0) or (Gear^.Hedgehog = nil) or (Gear^.Hedgehog^.Gear = nil) then |
|
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:
10736
diff
changeset
|
1806 |
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:
10736
diff
changeset
|
1807 |
Gear^.Hedgehog:= nil; |
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:
10736
diff
changeset
|
1808 |
targ:= nil; |
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:
10736
diff
changeset
|
1809 |
end |
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:
10736
diff
changeset
|
1810 |
else if Gear^.Hedgehog <> nil then |
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:
10736
diff
changeset
|
1811 |
targ:= Gear^.Hedgehog^.Gear; |
10800 | 1812 |
if targ <> nil then |
1813 |
begin |
|
1814 |
tX:=Gear^.X-targ^.X; |
|
1815 |
tY:=Gear^.Y-targ^.Y; |
|
1816 |
// allow escaping - should maybe flag this too |
|
10802
089e43d01f74
Use the larger scaled airmine sprite originally intended, add some antidickery measures.
nemo
parents:
10800
diff
changeset
|
1817 |
if (GameTicks > Gear^.FlightTime+10000) or |
089e43d01f74
Use the larger scaled airmine sprite originally intended, add some antidickery measures.
nemo
parents:
10800
diff
changeset
|
1818 |
((tX.Round+tY.Round > Gear^.Angle*6) and |
089e43d01f74
Use the larger scaled airmine sprite originally intended, add some antidickery measures.
nemo
parents:
10800
diff
changeset
|
1819 |
(hwRound(hwSqr(tX) + hwSqr(tY)) > sqr(Gear^.Angle*6))) then |
10800 | 1820 |
targ:= nil |
1821 |
end; |
|
1822 |
||
10807
66cde98f8cbe
Make the various mine states a bit clearer (inactive, active but not in seek mode, seek mode, chasing target)
nemo
parents:
10806
diff
changeset
|
1823 |
// If in ready timer, or after turn, or in first 5 seconds of turn (really a window due to extra time utility) |
66cde98f8cbe
Make the various mine states a bit clearer (inactive, active but not in seek mode, seek mode, chasing target)
nemo
parents:
10806
diff
changeset
|
1824 |
// or mine is inactive due to lack of gsttmpflag or hunting is disabled due to seek radius of 0 |
66cde98f8cbe
Make the various mine states a bit clearer (inactive, active but not in seek mode, seek mode, chasing target)
nemo
parents:
10806
diff
changeset
|
1825 |
// then we aren't hunting |
66cde98f8cbe
Make the various mine states a bit clearer (inactive, active but not in seek mode, seek mode, chasing target)
nemo
parents:
10806
diff
changeset
|
1826 |
if (ReadyTimeLeft > 0) or (TurnTimeLeft = 0) or |
66cde98f8cbe
Make the various mine states a bit clearer (inactive, active but not in seek mode, seek mode, chasing target)
nemo
parents:
10806
diff
changeset
|
1827 |
((TurnTimeLeft < cHedgehogTurnTime) and (cHedgehogTurnTime-TurnTimeLeft < 5000)) or |
66cde98f8cbe
Make the various mine states a bit clearer (inactive, active but not in seek mode, seek mode, chasing target)
nemo
parents:
10806
diff
changeset
|
1828 |
(Gear^.State and gsttmpFlag = 0) or |
66cde98f8cbe
Make the various mine states a bit clearer (inactive, active but not in seek mode, seek mode, chasing target)
nemo
parents:
10806
diff
changeset
|
1829 |
(Gear^.Angle = 0) then |
10818
f642a28cab0c
Add placement of airmines in engine outside of hog proximity. Has a bug, only protecting 1st team. Also fix a spelling error and rename gstHHChooseTarget to gstChooseTarget
nemo
parents:
10815
diff
changeset
|
1830 |
gear^.State:= gear^.State and (not gstChooseTarget) |
10807
66cde98f8cbe
Make the various mine states a bit clearer (inactive, active but not in seek mode, seek mode, chasing target)
nemo
parents:
10806
diff
changeset
|
1831 |
else if |
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:
10736
diff
changeset
|
1832 |
// todo, allow not finding new target, set timeout on target retention |
10807
66cde98f8cbe
Make the various mine states a bit clearer (inactive, active but not in seek mode, seek mode, chasing target)
nemo
parents:
10806
diff
changeset
|
1833 |
(Gear^.State and gstAttacking = 0) and |
66cde98f8cbe
Make the various mine states a bit clearer (inactive, active but not in seek mode, seek mode, chasing target)
nemo
parents:
10806
diff
changeset
|
1834 |
((GameTicks and $FF) = 17) and |
66cde98f8cbe
Make the various mine states a bit clearer (inactive, active but not in seek mode, seek mode, chasing target)
nemo
parents:
10806
diff
changeset
|
1835 |
(GameTicks > Gear^.FlightTime) then // recheck hunted hog |
66cde98f8cbe
Make the various mine states a bit clearer (inactive, active but not in seek mode, seek mode, chasing target)
nemo
parents:
10806
diff
changeset
|
1836 |
begin |
10818
f642a28cab0c
Add placement of airmines in engine outside of hog proximity. Has a bug, only protecting 1st team. Also fix a spelling error and rename gstHHChooseTarget to gstChooseTarget
nemo
parents:
10815
diff
changeset
|
1837 |
gear^.State:= gear^.State or gstChooseTarget; |
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:
10736
diff
changeset
|
1838 |
if targ <> nil then |
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:
10736
diff
changeset
|
1839 |
targDist:= Distance(Gear^.X-targ^.X,Gear^.Y-targ^.Y).Round |
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:
10736
diff
changeset
|
1840 |
else targDist:= 0; |
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:
10736
diff
changeset
|
1841 |
for t:= 0 to Pred(TeamsCount) do |
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:
10736
diff
changeset
|
1842 |
with TeamsArray[t]^ do |
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:
10736
diff
changeset
|
1843 |
for i:= 0 to cMaxHHIndex do |
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:
10736
diff
changeset
|
1844 |
if Hedgehogs[i].Gear <> nil then |
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:
10736
diff
changeset
|
1845 |
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:
10736
diff
changeset
|
1846 |
tmpG:= Hedgehogs[i].Gear; |
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:
10736
diff
changeset
|
1847 |
tX:=Gear^.X-tmpG^.X; |
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:
10736
diff
changeset
|
1848 |
tY:=Gear^.Y-tmpG^.Y; |
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:
10736
diff
changeset
|
1849 |
if (Gear^.Angle = $FFFFFFFF) or |
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:
10736
diff
changeset
|
1850 |
((tX.Round+tY.Round < Gear^.Angle) and |
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:
10736
diff
changeset
|
1851 |
(hwRound(hwSqr(tX) + hwSqr(tY)) < sqr(Gear^.Angle))) then |
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:
10736
diff
changeset
|
1852 |
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:
10736
diff
changeset
|
1853 |
if targ <> nil then tmpDist:= Distance(tX,tY).Round; |
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:
10736
diff
changeset
|
1854 |
if (targ = nil) or (tmpDist < targDist) then |
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:
10736
diff
changeset
|
1855 |
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:
10736
diff
changeset
|
1856 |
if targ = nil then targDist:= Distance(tX,tY).Round |
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:
10736
diff
changeset
|
1857 |
else targDist:= tmpDist; |
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:
10736
diff
changeset
|
1858 |
Gear^.Hedgehog:= @Hedgehogs[i]; |
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:
10736
diff
changeset
|
1859 |
targ:= tmpG; |
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:
10736
diff
changeset
|
1860 |
end |
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:
10736
diff
changeset
|
1861 |
end |
10791
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1862 |
end; |
10802
089e43d01f74
Use the larger scaled airmine sprite originally intended, add some antidickery measures.
nemo
parents:
10800
diff
changeset
|
1863 |
if targ <> nil then Gear^.FlightTime:= GameTicks + 5000 |
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:
10736
diff
changeset
|
1864 |
end; |
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:
10736
diff
changeset
|
1865 |
if targ <> nil then |
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:
10736
diff
changeset
|
1866 |
begin |
10799
658794118fd8
initialise trackSpeed, add nil check before resetting seek timer
nemo
parents:
10798
diff
changeset
|
1867 |
trackSpeed:= _0; |
10827 | 1868 |
if isUnderwater then |
1869 |
trackSpeed.QWordValue:= Gear^.Power div 2 |
|
1870 |
else |
|
1871 |
trackSpeed.QWordValue:= Gear^.Power; |
|
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:
10736
diff
changeset
|
1872 |
if (Gear^.X < targ^.X) and (Gear^.dX < _0_1) then |
10822 | 1873 |
Gear^.dX:= Gear^.dX+trackSpeed // please leave as an add. I like the effect |
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:
10736
diff
changeset
|
1874 |
else if (Gear^.X > targ^.X) and (Gear^.dX > -_0_1) then |
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:
10736
diff
changeset
|
1875 |
Gear^.dX:= Gear^.dX-trackSpeed; |
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:
10736
diff
changeset
|
1876 |
if (Gear^.Y < targ^.Y) and (Gear^.dY < _0_1) then |
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:
10736
diff
changeset
|
1877 |
Gear^.dY:= Gear^.dY+trackSpeed |
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:
10736
diff
changeset
|
1878 |
else if (Gear^.Y > targ^.Y) and (Gear^.dY > -_0_1) then |
10802
089e43d01f74
Use the larger scaled airmine sprite originally intended, add some antidickery measures.
nemo
parents:
10800
diff
changeset
|
1879 |
Gear^.dY:= Gear^.dY-trackSpeed |
10800 | 1880 |
end |
1881 |
else Gear^.Hedgehog:= nil; |
|
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:
10736
diff
changeset
|
1882 |
|
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:
10736
diff
changeset
|
1883 |
if ((Gear^.State and gsttmpFlag) <> 0) and (Gear^.Health <> 0) then |
10797 | 1884 |
begin |
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:
10736
diff
changeset
|
1885 |
if ((Gear^.State and gstAttacking) = 0) then |
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:
10736
diff
changeset
|
1886 |
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:
10736
diff
changeset
|
1887 |
if ((GameTicks and $1F) = 0) then |
10794
ace862eda192
radius and sprite drawing tweaks to match the still temporary sprite. also a begin/end sheepluva suggested
nemo
parents:
10791
diff
changeset
|
1888 |
begin |
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:
10736
diff
changeset
|
1889 |
if targ <> nil then |
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:
10736
diff
changeset
|
1890 |
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:
10736
diff
changeset
|
1891 |
tX:=Gear^.X-targ^.X; |
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:
10736
diff
changeset
|
1892 |
tY:=Gear^.Y-targ^.Y; |
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:
10736
diff
changeset
|
1893 |
if (tX.Round+tY.Round < Gear^.Karma) and |
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:
10736
diff
changeset
|
1894 |
(hwRound(hwSqr(tX) + hwSqr(tY)) < sqr(Gear^.Karma)) then |
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:
10736
diff
changeset
|
1895 |
Gear^.State := Gear^.State or gstAttacking |
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:
10736
diff
changeset
|
1896 |
end |
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:
10736
diff
changeset
|
1897 |
else if (Gear^.Angle > 0) and (CheckGearNear(Gear, gtHedgehog, Gear^.Karma, Gear^.Karma) <> nil) then |
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:
10736
diff
changeset
|
1898 |
Gear^.State := Gear^.State or gstAttacking |
10794
ace862eda192
radius and sprite drawing tweaks to match the still temporary sprite. also a begin/end sheepluva suggested
nemo
parents:
10791
diff
changeset
|
1899 |
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:
10736
diff
changeset
|
1900 |
end |
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:
10736
diff
changeset
|
1901 |
else // gstAttacking <> 0 |
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:
10736
diff
changeset
|
1902 |
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:
10736
diff
changeset
|
1903 |
AllInactive := false; |
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:
10736
diff
changeset
|
1904 |
if (Gear^.Timer and $FF) = 0 then |
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:
10736
diff
changeset
|
1905 |
PlaySound(sndMineTick); |
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:
10736
diff
changeset
|
1906 |
if Gear^.Timer = 0 then |
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:
10736
diff
changeset
|
1907 |
begin |
10791
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1908 |
// recheck |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1909 |
if targ <> nil then |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1910 |
begin |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1911 |
tX:=Gear^.X-targ^.X; |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1912 |
tY:=Gear^.Y-targ^.Y; |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1913 |
if (tX.Round+tY.Round < Gear^.Karma) and |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1914 |
(hwRound(hwSqr(tX) + hwSqr(tY)) < sqr(Gear^.Karma)) then |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1915 |
begin |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1916 |
Gear^.Hedgehog:= CurrentHedgehog; |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1917 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Karma, Gear^.Hedgehog, EXPLAutoSound); |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1918 |
DeleteGear(Gear); |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1919 |
exit |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1920 |
end |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1921 |
end |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1922 |
else if (Gear^.Angle > 0) and (CheckGearNear(Gear, gtHedgehog, Gear^.Karma, Gear^.Karma) <> nil) then |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1923 |
begin |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1924 |
Gear^.Hedgehog:= CurrentHedgehog; |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1925 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Karma, Gear^.Hedgehog, EXPLAutoSound); |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1926 |
DeleteGear(Gear); |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1927 |
exit |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1928 |
end; |
10795
5672d43e8d88
fix pas2c (airbomb code: "not" statement in boolean expression was without parentheses)
sheepluva
parents:
10791
diff
changeset
|
1929 |
Gear^.State:= Gear^.State and (not gstAttacking); |
10791
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1930 |
Gear^.Timer:= Gear^.WDTimer |
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:
10736
diff
changeset
|
1931 |
end; |
10952 | 1932 |
if Gear^.Timer > 0 then |
1933 |
dec(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:
10736
diff
changeset
|
1934 |
end |
10797 | 1935 |
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:
10736
diff
changeset
|
1936 |
else // gsttmpFlag = 0 |
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:
10736
diff
changeset
|
1937 |
if (TurnTimeLeft = 0) |
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:
10736
diff
changeset
|
1938 |
or ((GameFlags and gfInfAttack <> 0) and (GameTicks > Gear^.FlightTime)) |
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:
10736
diff
changeset
|
1939 |
or (CurrentHedgehog^.Gear = nil) then |
10791
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1940 |
begin |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1941 |
Gear^.FlightTime:= GameTicks; |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1942 |
Gear^.State := Gear^.State or gsttmpFlag |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
1943 |
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:
10736
diff
changeset
|
1944 |
end; |
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:
10736
diff
changeset
|
1945 |
|
39 | 1946 |
//////////////////////////////////////////////////////////////////////////////// |
3714 | 1947 |
procedure doStepSMine(Gear: PGear); |
9731
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9724
diff
changeset
|
1948 |
var land: Word; |
3710 | 1949 |
begin |
3714 | 1950 |
// TODO: do real calculation? |
9731
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9724
diff
changeset
|
1951 |
land:= TestCollisionXwithGear(Gear, 2); |
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9724
diff
changeset
|
1952 |
if land = 0 then land:= TestCollisionYwithGear(Gear,-2); |
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9724
diff
changeset
|
1953 |
if land = 0 then land:= TestCollisionXwithGear(Gear,-2); |
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9724
diff
changeset
|
1954 |
if land = 0 then land:= TestCollisionYwithGear(Gear, 2); |
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9724
diff
changeset
|
1955 |
if (land <> 0) and (land and lfBouncy = 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1956 |
begin |
7623
addc5b262617
isZero appears to be never used. Use it in a few obvious cases and add web variant.
nemo
parents:
7621
diff
changeset
|
1957 |
if (not isZero(Gear^.dX)) or (not isZero(Gear^.dY)) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1958 |
begin |
3717 | 1959 |
PlaySound(sndRopeAttach); |
4880
07e9849c6a70
bugfix: fixing sticky mines calling AddGearCI when they shouldn't (allows jumping on them in midair)
sheepluva
parents:
4874
diff
changeset
|
1960 |
Gear^.dX:= _0; |
07e9849c6a70
bugfix: fixing sticky mines calling AddGearCI when they shouldn't (allows jumping on them in midair)
sheepluva
parents:
4874
diff
changeset
|
1961 |
Gear^.dY:= _0; |
10164
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10145
diff
changeset
|
1962 |
Gear^.State:= Gear^.State and (not gstMoving); |
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9289
diff
changeset
|
1963 |
AddCI(Gear); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1964 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1965 |
end |
3714 | 1966 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1967 |
begin |
10164
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10145
diff
changeset
|
1968 |
Gear^.State:= Gear^.State or gstMoving; |
4880
07e9849c6a70
bugfix: fixing sticky mines calling AddGearCI when they shouldn't (allows jumping on them in midair)
sheepluva
parents:
4874
diff
changeset
|
1969 |
DeleteCI(Gear); |
3714 | 1970 |
doStepFallingGear(Gear); |
1971 |
AllInactive := false; |
|
1972 |
CalcRotationDirAngle(Gear); |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1973 |
end; |
3714 | 1974 |
|
3710 | 1975 |
if ((Gear^.State and gsttmpFlag) <> 0) and (Gear^.Health <> 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1976 |
begin |
3710 | 1977 |
if ((Gear^.State and gstAttacking) = 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1978 |
begin |
3710 | 1979 |
if ((GameTicks and $1F) = 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1980 |
if CheckGearNear(Gear, gtHedgehog, 46, 32) <> nil then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1981 |
Gear^.State := Gear^.State or gstAttacking |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1982 |
end |
4880
07e9849c6a70
bugfix: fixing sticky mines calling AddGearCI when they shouldn't (allows jumping on them in midair)
sheepluva
parents:
4874
diff
changeset
|
1983 |
else // gstAttacking <> 0 |
9742
419e5c651870
Remove turntimeleft/hog gear check from smine if infinite attack is enabled. just use the flightime for that.
nemo
parents:
9731
diff
changeset
|
1984 |
begin |
4880
07e9849c6a70
bugfix: fixing sticky mines calling AddGearCI when they shouldn't (allows jumping on them in midair)
sheepluva
parents:
4874
diff
changeset
|
1985 |
AllInactive := false; |
07e9849c6a70
bugfix: fixing sticky mines calling AddGearCI when they shouldn't (allows jumping on them in midair)
sheepluva
parents:
4874
diff
changeset
|
1986 |
if Gear^.Timer = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1987 |
begin |
4880
07e9849c6a70
bugfix: fixing sticky mines calling AddGearCI when they shouldn't (allows jumping on them in midair)
sheepluva
parents:
4874
diff
changeset
|
1988 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, Gear^.Hedgehog, EXPLAutoSound); |
07e9849c6a70
bugfix: fixing sticky mines calling AddGearCI when they shouldn't (allows jumping on them in midair)
sheepluva
parents:
4874
diff
changeset
|
1989 |
DeleteGear(Gear); |
07e9849c6a70
bugfix: fixing sticky mines calling AddGearCI when they shouldn't (allows jumping on them in midair)
sheepluva
parents:
4874
diff
changeset
|
1990 |
exit |
9742
419e5c651870
Remove turntimeleft/hog gear check from smine if infinite attack is enabled. just use the flightime for that.
nemo
parents:
9731
diff
changeset
|
1991 |
end |
419e5c651870
Remove turntimeleft/hog gear check from smine if infinite attack is enabled. just use the flightime for that.
nemo
parents:
9731
diff
changeset
|
1992 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1993 |
if (Gear^.Timer and $FF) = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1994 |
PlaySound(sndMineTick); |
9742
419e5c651870
Remove turntimeleft/hog gear check from smine if infinite attack is enabled. just use the flightime for that.
nemo
parents:
9731
diff
changeset
|
1995 |
dec(Gear^.Timer); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1996 |
end |
9742
419e5c651870
Remove turntimeleft/hog gear check from smine if infinite attack is enabled. just use the flightime for that.
nemo
parents:
9731
diff
changeset
|
1997 |
end |
3710 | 1998 |
else // gsttmpFlag = 0 |
10015 | 1999 |
if ((GameFlags and gfInfAttack = 0) and ((TurnTimeLeft = 0) or (Gear^.Hedgehog^.Gear = nil))) |
9742
419e5c651870
Remove turntimeleft/hog gear check from smine if infinite attack is enabled. just use the flightime for that.
nemo
parents:
9731
diff
changeset
|
2000 |
or ((GameFlags and gfInfAttack <> 0) and (GameTicks > Gear^.FlightTime)) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2001 |
Gear^.State := Gear^.State or gsttmpFlag; |
3710 | 2002 |
end; |
2003 |
||
2004 |
//////////////////////////////////////////////////////////////////////////////// |
|
39 | 2005 |
procedure doStepDynamite(Gear: PGear); |
2006 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2007 |
doStepFallingGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2008 |
AllInactive := false; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2009 |
if Gear^.Timer mod 166 = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2010 |
inc(Gear^.Tag); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2011 |
if Gear^.Timer = 1000 then // might need better timing |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2012 |
makeHogsWorry(Gear^.X, Gear^.Y, 75); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2013 |
if Gear^.Timer = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2014 |
begin |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
2015 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 75, Gear^.Hedgehog, EXPLAutoSound); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2016 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2017 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2018 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2019 |
dec(Gear^.Timer); |
39 | 2020 |
end; |
14
81f125629b25
- Mine checks whether a hedgehog is near less frequently
unc0rr
parents:
13
diff
changeset
|
2021 |
|
351 | 2022 |
/////////////////////////////////////////////////////////////////////////////// |
2941
566f967ec22f
White/Black smoke, break out rolling barrel into its own routine, adjust rolling barrel impact damage. NEEDS TESTING
nemo
parents:
2939
diff
changeset
|
2023 |
|
566f967ec22f
White/Black smoke, break out rolling barrel into its own routine, adjust rolling barrel impact damage. NEEDS TESTING
nemo
parents:
2939
diff
changeset
|
2024 |
procedure doStepRollingBarrel(Gear: PGear); |
8795 | 2025 |
var |
10679
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
2026 |
i, dmg: LongInt; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
2027 |
particle: PVisualGear; |
8958
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8952
diff
changeset
|
2028 |
dxdy: hwFloat; |
2941
566f967ec22f
White/Black smoke, break out rolling barrel into its own routine, adjust rolling barrel impact damage. NEEDS TESTING
nemo
parents:
2939
diff
changeset
|
2029 |
begin |
10490 | 2030 |
if (Gear^.dX.QWordValue = 0) and (Gear^.dY.QWordValue = 0) and (TestCollisionYwithGear(Gear, 1) = 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2031 |
SetLittle(Gear^.dY); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2032 |
Gear^.State := Gear^.State or gstAnimation; |
9954 | 2033 |
if Gear^.Health < cBarrelHealth then Gear^.State:= Gear^.State and (not gstFrozen); |
8795 | 2034 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2035 |
if ((Gear^.dX.QWordValue <> 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2036 |
or (Gear^.dY.QWordValue <> 0)) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2037 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2038 |
DeleteCI(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2039 |
AllInactive := false; |
8958
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8952
diff
changeset
|
2040 |
dxdy:= hwAbs(Gear^.dX)+hwAbs(Gear^.dY); |
8971
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2041 |
doStepFallingGear(Gear); |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2042 |
if (Gear^.State and gstCollision <> 0) and(dxdy > _0_4) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2043 |
begin |
8958
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8952
diff
changeset
|
2044 |
if (TestCollisionYwithGear(Gear, 1) <> 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2045 |
begin |
8958
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8952
diff
changeset
|
2046 |
Gear^.State := Gear^.State or gsttmpFlag; |
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8952
diff
changeset
|
2047 |
for i:= min(12, hwRound(dxdy*_10)) downto 0 do |
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8952
diff
changeset
|
2048 |
begin |
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8952
diff
changeset
|
2049 |
particle := AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12,vgtDust); |
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8952
diff
changeset
|
2050 |
if particle <> nil then |
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8952
diff
changeset
|
2051 |
particle^.dX := particle^.dX + (Gear^.dX.QWordValue / 21474836480) |
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8952
diff
changeset
|
2052 |
end |
8971
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2053 |
end; |
10679
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
2054 |
dmg:= hwRound(dxdy * _50); |
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
2055 |
inc(Gear^.Damage, dmg); |
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
2056 |
ScriptCall('onGearDamage', Gear^.UID, dmg) |
8958
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8952
diff
changeset
|
2057 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2058 |
CalcRotationDirAngle(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2059 |
//CheckGearDrowning(Gear) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2060 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2061 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2062 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2063 |
Gear^.State := Gear^.State or gsttmpFlag; |
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9289
diff
changeset
|
2064 |
AddCI(Gear) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2065 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2066 |
|
2944
e8a891bf6660
Adjust fall damage again, zero out X/Y to avoid sinking/shivering barrels.
nemo
parents:
2941
diff
changeset
|
2067 |
(* |
e8a891bf6660
Adjust fall damage again, zero out X/Y to avoid sinking/shivering barrels.
nemo
parents:
2941
diff
changeset
|
2068 |
Attempt to make a barrel knock itself over an edge. Would need more checks to avoid issues like burn damage |
e8a891bf6660
Adjust fall damage again, zero out X/Y to avoid sinking/shivering barrels.
nemo
parents:
2941
diff
changeset
|
2069 |
begin |
e8a891bf6660
Adjust fall damage again, zero out X/Y to avoid sinking/shivering barrels.
nemo
parents:
2941
diff
changeset
|
2070 |
x:= hwRound(Gear^.X); |
e8a891bf6660
Adjust fall damage again, zero out X/Y to avoid sinking/shivering barrels.
nemo
parents:
2941
diff
changeset
|
2071 |
y:= hwRound(Gear^.Y); |
e8a891bf6660
Adjust fall damage again, zero out X/Y to avoid sinking/shivering barrels.
nemo
parents:
2941
diff
changeset
|
2072 |
if (((y+1) and LAND_HEIGHT_MASK) = 0) and ((x and LAND_WIDTH_MASK) = 0) then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
2073 |
if (Land[y+1, x] = 0) then |
2944
e8a891bf6660
Adjust fall damage again, zero out X/Y to avoid sinking/shivering barrels.
nemo
parents:
2941
diff
changeset
|
2074 |
begin |
e8a891bf6660
Adjust fall damage again, zero out X/Y to avoid sinking/shivering barrels.
nemo
parents:
2941
diff
changeset
|
2075 |
if (((y+1) and LAND_HEIGHT_MASK) = 0) and (((x+Gear^.Radius-2) and LAND_WIDTH_MASK) = 0) and (Land[y+1, x+Gear^.Radius-2] = 0) then |
e8a891bf6660
Adjust fall damage again, zero out X/Y to avoid sinking/shivering barrels.
nemo
parents:
2941
diff
changeset
|
2076 |
Gear^.dX:= -_0_08 |
e8a891bf6660
Adjust fall damage again, zero out X/Y to avoid sinking/shivering barrels.
nemo
parents:
2941
diff
changeset
|
2077 |
else if (((y+1 and LAND_HEIGHT_MASK)) = 0) and (((x-(Gear^.Radius-2)) and LAND_WIDTH_MASK) = 0) and (Land[y+1, x-(Gear^.Radius-2)] = 0) then |
e8a891bf6660
Adjust fall damage again, zero out X/Y to avoid sinking/shivering barrels.
nemo
parents:
2941
diff
changeset
|
2078 |
Gear^.dX:= _0_08; |
e8a891bf6660
Adjust fall damage again, zero out X/Y to avoid sinking/shivering barrels.
nemo
parents:
2941
diff
changeset
|
2079 |
end; |
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9289
diff
changeset
|
2080 |
if Gear^.dX.QWordValue = 0 then AddCI(Gear) |
2944
e8a891bf6660
Adjust fall damage again, zero out X/Y to avoid sinking/shivering barrels.
nemo
parents:
2941
diff
changeset
|
2081 |
end; *) |
e8a891bf6660
Adjust fall damage again, zero out X/Y to avoid sinking/shivering barrels.
nemo
parents:
2941
diff
changeset
|
2082 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2083 |
if not Gear^.dY.isNegative and (Gear^.dY < _0_001) and (TestCollisionYwithGear(Gear, 1) <> 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2084 |
Gear^.dY := _0; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2085 |
if hwAbs(Gear^.dX) < _0_001 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2086 |
Gear^.dX := _0; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2087 |
|
5128
3c65326bb713
Check for 0 health to avoid div by 0. spotted by mikade.
nemo
parents:
5121
diff
changeset
|
2088 |
if (Gear^.Health > 0) and ((Gear^.Health * 100 div cBarrelHealth) < random(90)) and ((GameTicks and $FF) = 0) then |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2089 |
if (cBarrelHealth div Gear^.Health) > 2 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2090 |
AddVisualGear(hwRound(Gear^.X) - 16 + Random(32), hwRound(Gear^.Y) - 2, vgtSmoke) |
2941
566f967ec22f
White/Black smoke, break out rolling barrel into its own routine, adjust rolling barrel impact damage. NEEDS TESTING
nemo
parents:
2939
diff
changeset
|
2091 |
else |
566f967ec22f
White/Black smoke, break out rolling barrel into its own routine, adjust rolling barrel impact damage. NEEDS TESTING
nemo
parents:
2939
diff
changeset
|
2092 |
AddVisualGear(hwRound(Gear^.X) - 16 + Random(32), hwRound(Gear^.Y) - 2, vgtSmokeWhite); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2093 |
dec(Gear^.Health, Gear^.Damage); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2094 |
Gear^.Damage := 0; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2095 |
if Gear^.Health <= 0 then |
8971
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2096 |
doStepCase(Gear); |
2941
566f967ec22f
White/Black smoke, break out rolling barrel into its own routine, adjust rolling barrel impact damage. NEEDS TESTING
nemo
parents:
2939
diff
changeset
|
2097 |
end; |
566f967ec22f
White/Black smoke, break out rolling barrel into its own routine, adjust rolling barrel impact damage. NEEDS TESTING
nemo
parents:
2939
diff
changeset
|
2098 |
|
14
81f125629b25
- Mine checks whether a hedgehog is near less frequently
unc0rr
parents:
13
diff
changeset
|
2099 |
procedure doStepCase(Gear: PGear); |
8795 | 2100 |
var |
7406
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
2101 |
i, x, y: LongInt; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
2102 |
k: TGearType; |
7406
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
2103 |
dX, dY: HWFloat; |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
2104 |
hog: PHedgehog; |
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:
7128
diff
changeset
|
2105 |
sparkles: PVisualGear; |
7406
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
2106 |
gi: PGear; |
14
81f125629b25
- Mine checks whether a hedgehog is near less frequently
unc0rr
parents:
13
diff
changeset
|
2107 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2108 |
k := Gear^.Kind; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2109 |
|
3894 | 2110 |
if (Gear^.Message and gmDestroy) > 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2111 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2112 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2113 |
FreeActionsList; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2114 |
SetAllToActive; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2115 |
// something (hh, mine, etc...) could be on top of the case |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2116 |
with CurrentHedgehog^ do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2117 |
if Gear <> nil then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2118 |
Gear^.Message := Gear^.Message and (not (gmLJump or gmHJump)); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2119 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2120 |
end; |
9954 | 2121 |
if (k = gtExplosives) and (Gear^.Health < cBarrelHealth) then Gear^.State:= Gear^.State and (not gstFrozen); |
15 | 2122 |
|
8973 | 2123 |
if ((k <> gtExplosives) and (Gear^.Damage > 0)) or ((k = gtExplosives) and (Gear^.Health<=0)) then |
8971
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2124 |
begin |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2125 |
x := hwRound(Gear^.X); |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2126 |
y := hwRound(Gear^.Y); |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2127 |
hog:= Gear^.Hedgehog; |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2128 |
|
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2129 |
DeleteGear(Gear); |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2130 |
// <-- delete gear! |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2131 |
|
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2132 |
if k = gtCase then |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2133 |
begin |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2134 |
doMakeExplosion(x, y, 25, hog, EXPLAutoSound); |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2135 |
for i:= 0 to 63 do |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2136 |
AddGear(x, y, gtFlame, 0, _0, _0, 0); |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2137 |
end |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2138 |
else if k = gtExplosives then |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2139 |
begin |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2140 |
doMakeExplosion(x, y, 75, hog, EXPLAutoSound); |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2141 |
for i:= 0 to 31 do |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2142 |
begin |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2143 |
dX := AngleCos(i * 64) * _0_5 * (getrandomf + _1); |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2144 |
dY := AngleSin(i * 64) * _0_5 * (getrandomf + _1); |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2145 |
AddGear(x, y, gtFlame, 0, dX, dY, 0); |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2146 |
AddGear(x, y, gtFlame, gstTmpFlag, -dX, -dY, 0); |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2147 |
end |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2148 |
end; |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2149 |
exit |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2150 |
end; |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2151 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2152 |
if k = gtExplosives then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2153 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2154 |
//if V > _0_03 then Gear^.State:= Gear^.State or gstAnimation; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2155 |
if (hwAbs(Gear^.dX) > _0_15) or ((hwAbs(Gear^.dY) > _0_15) and (hwAbs(Gear^.dX) > _0_02)) then |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8958
diff
changeset
|
2156 |
begin |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8958
diff
changeset
|
2157 |
Gear^.doStep := @doStepRollingBarrel; |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8958
diff
changeset
|
2158 |
exit; |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8958
diff
changeset
|
2159 |
end |
8958
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8952
diff
changeset
|
2160 |
else Gear^.dX:= _0; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2161 |
|
8971
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2162 |
if ((Gear^.Health * 100 div cBarrelHealth) < random(90)) and ((GameTicks and $FF) = 0) then |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2163 |
if (cBarrelHealth div Gear^.Health) > 2 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2164 |
AddVisualGear(hwRound(Gear^.X) - 16 + Random(32), hwRound(Gear^.Y) - 2, vgtSmoke) |
8971
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2165 |
else |
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8962
diff
changeset
|
2166 |
AddVisualGear(hwRound(Gear^.X) - 16 + Random(32), hwRound(Gear^.Y) - 2, vgtSmokeWhite); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2167 |
dec(Gear^.Health, Gear^.Damage); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2168 |
Gear^.Damage := 0; |
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:
7128
diff
changeset
|
2169 |
end |
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:
7128
diff
changeset
|
2170 |
else |
8795 | 2171 |
begin |
8030
165aeaaaf445
Call fallers less often. Should hopefully still be about as effective at the intended purpose. Should help loads quite a bit.
nemo
parents:
8003
diff
changeset
|
2172 |
if (Gear^.Pos <> posCaseHealth) and (GameTicks and $1FFF = 0) then // stir 'em up periodically |
7396 | 2173 |
begin |
7406
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
2174 |
gi := GearsList; |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
2175 |
while gi <> nil do |
7396 | 2176 |
begin |
7406
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
2177 |
if gi^.Kind = gtGenericFaller then |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
2178 |
begin |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
2179 |
gi^.Active:= true; |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
2180 |
gi^.X:= int2hwFloat(GetRandom(rightX-leftX)+leftX); |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
2181 |
gi^.Y:= int2hwFloat(GetRandom(LAND_HEIGHT-topY)+topY); |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
2182 |
gi^.dX:= _90-(GetRandomf*_360); |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
2183 |
gi^.dY:= _90-(GetRandomf*_360) |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
2184 |
end; |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
2185 |
gi := gi^.NextGear |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
2186 |
end |
7396 | 2187 |
end; |
2188 |
||
7276 | 2189 |
if Gear^.Timer = 500 then |
2190 |
begin |
|
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:
7128
diff
changeset
|
2191 |
(* Can't make sparkles team coloured without working out what the next team is going to be. This should be solved, really, since it also screws up |
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:
7128
diff
changeset
|
2192 |
voices. Reinforcements voices is heard for active team, not team-to-be. Either that or change crate spawn from end of turn to start, although that |
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:
7128
diff
changeset
|
2193 |
has its own complexities. *) |
7276 | 2194 |
// Abuse a couple of gear values to track origin |
7339 | 2195 |
Gear^.Angle:= hwRound(Gear^.Y); |
7276 | 2196 |
Gear^.Tag:= random(2); |
2197 |
inc(Gear^.Timer) |
|
2198 |
end; |
|
2199 |
if Gear^.Timer < 1833 then inc(Gear^.Timer); |
|
2200 |
if Gear^.Timer = 1000 then |
|
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:
7128
diff
changeset
|
2201 |
begin |
7339 | 2202 |
sparkles:= AddVisualGear(hwRound(Gear^.X), Gear^.Angle, vgtDust, 1); |
7276 | 2203 |
if sparkles <> nil then |
2204 |
begin |
|
2205 |
sparkles^.dX:= 0; |
|
2206 |
sparkles^.dY:= 0; |
|
2207 |
sparkles^.Angle:= 270; |
|
8795 | 2208 |
if Gear^.Tag = 1 then |
7276 | 2209 |
sparkles^.Tint:= $3744D7FF |
2210 |
else sparkles^.Tint:= $FAB22CFF |
|
2211 |
end; |
|
2212 |
end; |
|
8795 | 2213 |
if Gear^.Timer < 1000 then |
7283 | 2214 |
begin |
2215 |
AllInactive:= false; |
|
2216 |
exit |
|
2217 |
end |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2218 |
end; |
2911 | 2219 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2220 |
|
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2221 |
if (Gear^.dY.QWordValue <> 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2222 |
or (TestCollisionYwithGear(Gear, 1) = 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2223 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2224 |
AllInactive := false; |
7661
3046ad5b361e
fix for issue 376 (embedding barrels in ceiling)
sheepluva
parents:
7659
diff
changeset
|
2225 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2226 |
Gear^.dY := Gear^.dY + cGravity; |
7661
3046ad5b361e
fix for issue 376 (embedding barrels in ceiling)
sheepluva
parents:
7659
diff
changeset
|
2227 |
|
9820 | 2228 |
if ((not Gear^.dY.isNegative) and (TestCollisionYwithGear(Gear, 1) <> 0)) or |
2229 |
(Gear^.dY.isNegative and (TestCollisionYwithGear(Gear, -1) <> 0)) then |
|
2230 |
Gear^.dY := _0 |
|
2231 |
else Gear^.Y := Gear^.Y + Gear^.dY; |
|
7661
3046ad5b361e
fix for issue 376 (embedding barrels in ceiling)
sheepluva
parents:
7659
diff
changeset
|
2232 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2233 |
if (not Gear^.dY.isNegative) and (Gear^.dY > _0_001) then |
8579
d18bc19d780a
graphics tweak. flag a couple more overeager setall HH
nemo
parents:
8578
diff
changeset
|
2234 |
SetAllHHToActive(false); |
7661
3046ad5b361e
fix for issue 376 (embedding barrels in ceiling)
sheepluva
parents:
7659
diff
changeset
|
2235 |
|
6081
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
2236 |
if (not Gear^.dY.isNegative) and (TestCollisionYwithGear(Gear, 1) <> 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2237 |
begin |
3473
f80431269806
Increase minimum threshold for barrel damage to reduce likelihood of blowing one up on jumping out, increase damage to compensate (may need tweaking). Only apply dX for collision w/ kick if barrel is rolling.
nemo
parents:
3471
diff
changeset
|
2238 |
if (Gear^.dY > _0_2) and (k = gtExplosives) then |
f80431269806
Increase minimum threshold for barrel damage to reduce likelihood of blowing one up on jumping out, increase damage to compensate (may need tweaking). Only apply dX for collision w/ kick if barrel is rolling.
nemo
parents:
3471
diff
changeset
|
2239 |
inc(Gear^.Damage, hwRound(Gear^.dY * _70)); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2240 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2241 |
if Gear^.dY > _0_2 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2242 |
for i:= min(12, hwRound(Gear^.dY*_10)) downto 0 do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2243 |
AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust); |
8795 | 2244 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2245 |
Gear^.dY := - Gear^.dY * Gear^.Elasticity; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2246 |
if Gear^.dY > - _0_001 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2247 |
Gear^.dY := _0 |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2248 |
else if Gear^.dY < - _0_03 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2249 |
PlaySound(Gear^.ImpactSound); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2250 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2251 |
//if Gear^.dY > - _0_001 then Gear^.dY:= _0 |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2252 |
CheckGearDrowning(Gear); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2253 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2254 |
|
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2255 |
if (Gear^.dY.QWordValue = 0) then |
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9289
diff
changeset
|
2256 |
AddCI(Gear) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2257 |
else if (Gear^.dY.QWordValue <> 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2258 |
DeleteCI(Gear) |
14
81f125629b25
- Mine checks whether a hedgehog is near less frequently
unc0rr
parents:
13
diff
changeset
|
2259 |
end; |
49 | 2260 |
|
2261 |
//////////////////////////////////////////////////////////////////////////////// |
|
2460 | 2262 |
|
2263 |
procedure doStepTarget(Gear: PGear); |
|
2264 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2265 |
if (Gear^.Timer = 0) and (Gear^.Tag = 0) then |
9724
b3fefde4cff7
fixing position of spawning sparkles of target gears by applying a filthy workaround for a filthy bug in the filthy filthy doStepCase handler.
sheepluva
parents:
9723
diff
changeset
|
2266 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2267 |
PlaySound(sndWarp); |
9724
b3fefde4cff7
fixing position of spawning sparkles of target gears by applying a filthy workaround for a filthy bug in the filthy filthy doStepCase handler.
sheepluva
parents:
9723
diff
changeset
|
2268 |
// workaround: save spawn Y for doStepCase (which is a mess atm) |
b3fefde4cff7
fixing position of spawning sparkles of target gears by applying a filthy workaround for a filthy bug in the filthy filthy doStepCase handler.
sheepluva
parents:
9723
diff
changeset
|
2269 |
Gear^.Angle:= hwRound(Gear^.Y); |
b3fefde4cff7
fixing position of spawning sparkles of target gears by applying a filthy workaround for a filthy bug in the filthy filthy doStepCase handler.
sheepluva
parents:
9723
diff
changeset
|
2270 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2271 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2272 |
if (Gear^.Tag = 0) and (Gear^.Timer < 1000) then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2273 |
inc(Gear^.Timer) |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2274 |
else if Gear^.Tag = 1 then |
4808 | 2275 |
Gear^.Tag := 2 |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2276 |
else if Gear^.Tag = 2 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2277 |
if Gear^.Timer > 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2278 |
dec(Gear^.Timer) |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
2279 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2280 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2281 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2282 |
exit; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2283 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2284 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2285 |
doStepCase(Gear) |
2460 | 2286 |
end; |
2287 |
||
2288 |
//////////////////////////////////////////////////////////////////////////////// |
|
854 | 2289 |
procedure doStepIdle(Gear: PGear); |
2290 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2291 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2292 |
dec(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2293 |
if Gear^.Timer = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2294 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2295 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2296 |
AfterAttack |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2297 |
end |
854 | 2298 |
end; |
2299 |
||
5313
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
2300 |
//////////////////////////////////////////////////////////////////////////////// |
79 | 2301 |
procedure doStepShover(Gear: PGear); |
8795 | 2302 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2303 |
HHGear: PGear; |
79 | 2304 |
begin |
4365 | 2305 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2306 |
HHGear^.State := HHGear^.State or gstNoDamage; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2307 |
DeleteCI(HHGear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2308 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2309 |
AmmoShove(Gear, 30, 115); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2310 |
|
4182 | 2311 |
HHGear^.State := (HHGear^.State and (not gstNoDamage)) or gstMoving; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2312 |
Gear^.Timer := 250; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2313 |
Gear^.doStep := @doStepIdle |
79 | 2314 |
end; |
2315 |
||
2316 |
//////////////////////////////////////////////////////////////////////////////// |
|
925 | 2317 |
procedure doStepWhip(Gear: PGear); |
8795 | 2318 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2319 |
HHGear: PGear; |
925 | 2320 |
i: LongInt; |
2321 |
begin |
|
4365 | 2322 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2323 |
HHGear^.State := HHGear^.State or gstNoDamage; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2324 |
DeleteCI(HHGear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2325 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2326 |
for i:= 0 to 3 do |
4578 | 2327 |
begin |
9723
31d10d684e90
whip: visual enhancements (hat'n'dust) as suggested by nemo
sheepluva
parents:
9721
diff
changeset
|
2328 |
AddVisualGear(hwRound(Gear^.X) + hwSign(Gear^.dX) * (10 + 6 * i), hwRound(Gear^.Y) + 12 + Random(6), vgtDust); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2329 |
AmmoShove(Gear, 30, 25); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2330 |
Gear^.X := Gear^.X + Gear^.dX * 5 |
4578 | 2331 |
end; |
925 | 2332 |
|
4182 | 2333 |
HHGear^.State := (HHGear^.State and (not gstNoDamage)) or gstMoving; |
2334 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2335 |
Gear^.Timer := 250; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2336 |
Gear^.doStep := @doStepIdle |
925 | 2337 |
end; |
2338 |
||
2339 |
//////////////////////////////////////////////////////////////////////////////// |
|
79 | 2340 |
procedure doStepFlame(Gear: PGear); |
8795 | 2341 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2342 |
gX,gY,i: LongInt; |
3609
bc63ed514b70
Minor fire tweak for readability and lethalness, remove exit condition that was hanging game (identified by jaylittle)
nemo
parents:
3603
diff
changeset
|
2343 |
sticky: Boolean; |
3751 | 2344 |
vgt: PVisualGear; |
10591 | 2345 |
tdX,tdY, f: HWFloat; |
9362
c9fdf8a3baf0
crude ice check that probably works well enough in most cases (so far there's just one ucollisions that returns a land pixel - might want to extend that)
nemo
parents:
9356
diff
changeset
|
2346 |
landPixel: Word; |
79 | 2347 |
begin |
9477 | 2348 |
WorldWrap(Gear); |
10586
dbb77726f0c6
add a half-second flighttime delay to flamethrower flames so they can leave the "barrel" of the flamethrower without burning the hog
nemo
parents:
10582
diff
changeset
|
2349 |
if Gear^.FlightTime > 0 then dec(Gear^.FlightTime); |
3609
bc63ed514b70
Minor fire tweak for readability and lethalness, remove exit condition that was hanging game (identified by jaylittle)
nemo
parents:
3603
diff
changeset
|
2350 |
sticky:= (Gear^.State and gsttmpFlag) <> 0; |
bc63ed514b70
Minor fire tweak for readability and lethalness, remove exit condition that was hanging game (identified by jaylittle)
nemo
parents:
3603
diff
changeset
|
2351 |
if not sticky then AllInactive := false; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2352 |
|
9362
c9fdf8a3baf0
crude ice check that probably works well enough in most cases (so far there's just one ucollisions that returns a land pixel - might want to extend that)
nemo
parents:
9356
diff
changeset
|
2353 |
landPixel:= TestCollisionYwithGear(Gear, 1); |
c9fdf8a3baf0
crude ice check that probably works well enough in most cases (so far there's just one ucollisions that returns a land pixel - might want to extend that)
nemo
parents:
9356
diff
changeset
|
2354 |
if landPixel = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2355 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2356 |
AllInactive := false; |
3751 | 2357 |
|
10586
dbb77726f0c6
add a half-second flighttime delay to flamethrower flames so they can leave the "barrel" of the flamethrower without burning the hog
nemo
parents:
10582
diff
changeset
|
2358 |
if (GameTicks and $F = 0) and (Gear^.FlightTime = 0) then |
10578
814acf1511be
duplicate the ammoshove block into the falling fire area - this will make falling flames take out hogs in saucers, on rope, etc. no more dodging your own napalm strike by taking to the skies...
nemo
parents:
10547
diff
changeset
|
2359 |
begin |
814acf1511be
duplicate the ammoshove block into the falling fire area - this will make falling flames take out hogs in saucers, on rope, etc. no more dodging your own napalm strike by taking to the skies...
nemo
parents:
10547
diff
changeset
|
2360 |
Gear^.Radius := 7; |
814acf1511be
duplicate the ammoshove block into the falling fire area - this will make falling flames take out hogs in saucers, on rope, etc. no more dodging your own napalm strike by taking to the skies...
nemo
parents:
10547
diff
changeset
|
2361 |
tdX:= Gear^.dX; |
814acf1511be
duplicate the ammoshove block into the falling fire area - this will make falling flames take out hogs in saucers, on rope, etc. no more dodging your own napalm strike by taking to the skies...
nemo
parents:
10547
diff
changeset
|
2362 |
tdY:= Gear^.dY; |
814acf1511be
duplicate the ammoshove block into the falling fire area - this will make falling flames take out hogs in saucers, on rope, etc. no more dodging your own napalm strike by taking to the skies...
nemo
parents:
10547
diff
changeset
|
2363 |
Gear^.dX.QWordValue:= 120000000; |
814acf1511be
duplicate the ammoshove block into the falling fire area - this will make falling flames take out hogs in saucers, on rope, etc. no more dodging your own napalm strike by taking to the skies...
nemo
parents:
10547
diff
changeset
|
2364 |
Gear^.dY.QWordValue:= 429496730; |
814acf1511be
duplicate the ammoshove block into the falling fire area - this will make falling flames take out hogs in saucers, on rope, etc. no more dodging your own napalm strike by taking to the skies...
nemo
parents:
10547
diff
changeset
|
2365 |
Gear^.dX.isNegative:= getrandom(2)<>1; |
814acf1511be
duplicate the ammoshove block into the falling fire area - this will make falling flames take out hogs in saucers, on rope, etc. no more dodging your own napalm strike by taking to the skies...
nemo
parents:
10547
diff
changeset
|
2366 |
Gear^.dY.isNegative:= true; |
814acf1511be
duplicate the ammoshove block into the falling fire area - this will make falling flames take out hogs in saucers, on rope, etc. no more dodging your own napalm strike by taking to the skies...
nemo
parents:
10547
diff
changeset
|
2367 |
AmmoShove(Gear, 2, 125); |
814acf1511be
duplicate the ammoshove block into the falling fire area - this will make falling flames take out hogs in saucers, on rope, etc. no more dodging your own napalm strike by taking to the skies...
nemo
parents:
10547
diff
changeset
|
2368 |
Gear^.dX:= tdX; |
814acf1511be
duplicate the ammoshove block into the falling fire area - this will make falling flames take out hogs in saucers, on rope, etc. no more dodging your own napalm strike by taking to the skies...
nemo
parents:
10547
diff
changeset
|
2369 |
Gear^.dY:= tdY; |
814acf1511be
duplicate the ammoshove block into the falling fire area - this will make falling flames take out hogs in saucers, on rope, etc. no more dodging your own napalm strike by taking to the skies...
nemo
parents:
10547
diff
changeset
|
2370 |
Gear^.Radius := 1 |
814acf1511be
duplicate the ammoshove block into the falling fire area - this will make falling flames take out hogs in saucers, on rope, etc. no more dodging your own napalm strike by taking to the skies...
nemo
parents:
10547
diff
changeset
|
2371 |
end; |
814acf1511be
duplicate the ammoshove block into the falling fire area - this will make falling flames take out hogs in saucers, on rope, etc. no more dodging your own napalm strike by taking to the skies...
nemo
parents:
10547
diff
changeset
|
2372 |
|
3751 | 2373 |
if ((GameTicks mod 100) = 0) then |
2374 |
begin |
|
4443
d393b9ccd328
Add an extra pass in FindPlace for AI resurrection mode to try to make it unwinnable, add DeleteGear, DeleteVisualGear, AddVisualGear, GetVisualGearValues, SetVisualGearValues to Lua
nemo
parents:
4405
diff
changeset
|
2375 |
vgt:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtFire, gstTmpFlag); |
3751 | 2376 |
if vgt <> nil then |
2377 |
begin |
|
2378 |
vgt^.dx:= 0; |
|
2379 |
vgt^.dy:= 0; |
|
2380 |
vgt^.FrameTicks:= 1800 div (Gear^.Tag mod 3 + 2); |
|
2381 |
end; |
|
2382 |
end; |
|
2383 |
||
10591 | 2384 |
if (Gear^.dX.QWordValue > _2.QWordValue) |
2385 |
or (Gear^.dY.QWordValue > _2.QWordValue) |
|
2386 |
then |
|
2387 |
begin |
|
2388 |
// norm speed vector to length of 2 for fire particles to keep flying in the same direction |
|
10642
8fdfa2b77d83
Normalize to length of _1_9 to avoid endless normalization leading to fire particles floating midair indefinitely
unc0rr
parents:
10634
diff
changeset
|
2389 |
f:= _1_9 / Distance(Gear^.dX, Gear^.dY); |
10591 | 2390 |
Gear^.dX:= Gear^.dX * f; |
2391 |
Gear^.dY:= Gear^.dY * f; |
|
2392 |
end |
|
2393 |
else begin |
|
2394 |
if Gear^.dX.QWordValue > _0_01.QWordValue then |
|
2395 |
Gear^.dX := Gear^.dX * _0_995; |
|
2396 |
||
2397 |
Gear^.dY := Gear^.dY + cGravity; |
|
2398 |
// if sticky then Gear^.dY := Gear^.dY + cGravity; |
|
2399 |
||
2400 |
if Gear^.dY.QWordValue > _0_2.QWordValue then |
|
2401 |
Gear^.dY := Gear^.dY * _0_995; |
|
2402 |
||
2403 |
//if sticky then Gear^.X := Gear^.X + Gear^.dX else |
|
2404 |
Gear^.X := Gear^.X + Gear^.dX + cWindSpeed * 640; |
|
2405 |
Gear^.Y := Gear^.Y + Gear^.dY; |
|
2406 |
end; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2407 |
|
10354 | 2408 |
gX := hwRound(Gear^.X); |
2409 |
gY := hwRound(Gear^.Y); |
|
2410 |
||
2411 |
if CheckCoordInWater(gX, gY) then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2412 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2413 |
for i:= 0 to 3 do |
10354 | 2414 |
AddVisualGear(gX - 8 + Random(16), gY - 8 + Random(16), vgtSteam); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2415 |
PlaySound(sndVaporize); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2416 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2417 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2418 |
end |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
2419 |
end |
10015 | 2420 |
else |
9362
c9fdf8a3baf0
crude ice check that probably works well enough in most cases (so far there's just one ucollisions that returns a land pixel - might want to extend that)
nemo
parents:
9356
diff
changeset
|
2421 |
begin |
c9fdf8a3baf0
crude ice check that probably works well enough in most cases (so far there's just one ucollisions that returns a land pixel - might want to extend that)
nemo
parents:
9356
diff
changeset
|
2422 |
if (Gear^.Timer = 1) and (GameTicks and $3 = 0) then |
c9fdf8a3baf0
crude ice check that probably works well enough in most cases (so far there's just one ucollisions that returns a land pixel - might want to extend that)
nemo
parents:
9356
diff
changeset
|
2423 |
begin |
c9fdf8a3baf0
crude ice check that probably works well enough in most cases (so far there's just one ucollisions that returns a land pixel - might want to extend that)
nemo
parents:
9356
diff
changeset
|
2424 |
Gear^.Y:= Gear^.Y+_6; |
c9fdf8a3baf0
crude ice check that probably works well enough in most cases (so far there's just one ucollisions that returns a land pixel - might want to extend that)
nemo
parents:
9356
diff
changeset
|
2425 |
if (landPixel and lfIce <> 0) or (TestCollisionYwithGear(Gear, 1) and lfIce <> 0) then |
c9fdf8a3baf0
crude ice check that probably works well enough in most cases (so far there's just one ucollisions that returns a land pixel - might want to extend that)
nemo
parents:
9356
diff
changeset
|
2426 |
begin |
10379
caa5b40e405b
I a recent commit I caused flames to use uninitialized values. that lead to fire burning slow and desyncs. this commit fixes/reverts this
sheepluva
parents:
10372
diff
changeset
|
2427 |
gX := hwRound(Gear^.X); |
caa5b40e405b
I a recent commit I caused flames to use uninitialized values. that lead to fire burning slow and desyncs. this commit fixes/reverts this
sheepluva
parents:
10372
diff
changeset
|
2428 |
gY := hwRound(Gear^.Y) - 6; |
9362
c9fdf8a3baf0
crude ice check that probably works well enough in most cases (so far there's just one ucollisions that returns a land pixel - might want to extend that)
nemo
parents:
9356
diff
changeset
|
2429 |
DrawExplosion(gX, gY, 4); |
c9fdf8a3baf0
crude ice check that probably works well enough in most cases (so far there's just one ucollisions that returns a land pixel - might want to extend that)
nemo
parents:
9356
diff
changeset
|
2430 |
PlaySound(sndVaporize); |
c9fdf8a3baf0
crude ice check that probably works well enough in most cases (so far there's just one ucollisions that returns a land pixel - might want to extend that)
nemo
parents:
9356
diff
changeset
|
2431 |
AddVisualGear(gX - 3 + Random(6), gY - 2, vgtSteam); |
c9fdf8a3baf0
crude ice check that probably works well enough in most cases (so far there's just one ucollisions that returns a land pixel - might want to extend that)
nemo
parents:
9356
diff
changeset
|
2432 |
DeleteGear(Gear); |
c9fdf8a3baf0
crude ice check that probably works well enough in most cases (so far there's just one ucollisions that returns a land pixel - might want to extend that)
nemo
parents:
9356
diff
changeset
|
2433 |
exit |
c9fdf8a3baf0
crude ice check that probably works well enough in most cases (so far there's just one ucollisions that returns a land pixel - might want to extend that)
nemo
parents:
9356
diff
changeset
|
2434 |
end; |
c9fdf8a3baf0
crude ice check that probably works well enough in most cases (so far there's just one ucollisions that returns a land pixel - might want to extend that)
nemo
parents:
9356
diff
changeset
|
2435 |
Gear^.Y:= Gear^.Y-_6 |
c9fdf8a3baf0
crude ice check that probably works well enough in most cases (so far there's just one ucollisions that returns a land pixel - might want to extend that)
nemo
parents:
9356
diff
changeset
|
2436 |
end; |
9277
ad1ec7212ac7
reduce shove frequency (perf). reduce dX so that less time is spent sliding.
nemo
parents:
9251
diff
changeset
|
2437 |
if sticky and (GameTicks and $F = 0) then |
5024 | 2438 |
begin |
3603
b6b1989744ef
Grid the landscape, and shortcircuit checks on the collision array if there are no nearby checked in collisions to be collided with. This is a big win for fire's ammoshove in particular. Also add a +2 that seemed missing in the check, and update fire accordingly.
nemo
parents:
3594
diff
changeset
|
2439 |
Gear^.Radius := 7; |
5415
94e26612e2ec
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
nemo
parents:
5413
diff
changeset
|
2440 |
tdX:= Gear^.dX; |
94e26612e2ec
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
nemo
parents:
5413
diff
changeset
|
2441 |
tdY:= Gear^.dY; |
9277
ad1ec7212ac7
reduce shove frequency (perf). reduce dX so that less time is spent sliding.
nemo
parents:
9251
diff
changeset
|
2442 |
Gear^.dX.QWordValue:= 120000000; |
5415
94e26612e2ec
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
nemo
parents:
5413
diff
changeset
|
2443 |
Gear^.dY.QWordValue:= 429496730; |
94e26612e2ec
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
nemo
parents:
5413
diff
changeset
|
2444 |
Gear^.dX.isNegative:= getrandom(2)<>1; |
94e26612e2ec
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
nemo
parents:
5413
diff
changeset
|
2445 |
Gear^.dY.isNegative:= true; |
94e26612e2ec
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
nemo
parents:
5413
diff
changeset
|
2446 |
AmmoShove(Gear, 2, 125); |
94e26612e2ec
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
nemo
parents:
5413
diff
changeset
|
2447 |
Gear^.dX:= tdX; |
94e26612e2ec
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
nemo
parents:
5413
diff
changeset
|
2448 |
Gear^.dY:= tdY; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2449 |
Gear^.Radius := 1 |
5024 | 2450 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
2451 |
if Gear^.Timer > 0 then |
5024 | 2452 |
begin |
2475 | 2453 |
dec(Gear^.Timer); |
2454 |
inc(Gear^.Damage) |
|
5024 | 2455 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2456 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2457 |
begin |
10379
caa5b40e405b
I a recent commit I caused flames to use uninitialized values. that lead to fire burning slow and desyncs. this commit fixes/reverts this
sheepluva
parents:
10372
diff
changeset
|
2458 |
gX := hwRound(Gear^.X); |
caa5b40e405b
I a recent commit I caused flames to use uninitialized values. that lead to fire burning slow and desyncs. this commit fixes/reverts this
sheepluva
parents:
10372
diff
changeset
|
2459 |
gY := hwRound(Gear^.Y); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2460 |
// Standard fire |
3609
bc63ed514b70
Minor fire tweak for readability and lethalness, remove exit condition that was hanging game (identified by jaylittle)
nemo
parents:
3603
diff
changeset
|
2461 |
if not sticky then |
5024 | 2462 |
begin |
3640
54676a34b9ad
Reduce calls to expensive operations in fire. Slightly alters fire behaviour, but should still be reasonable
nemo
parents:
3609
diff
changeset
|
2463 |
if ((GameTicks and $1) = 0) then |
54676a34b9ad
Reduce calls to expensive operations in fire. Slightly alters fire behaviour, but should still be reasonable
nemo
parents:
3609
diff
changeset
|
2464 |
begin |
54676a34b9ad
Reduce calls to expensive operations in fire. Slightly alters fire behaviour, but should still be reasonable
nemo
parents:
3609
diff
changeset
|
2465 |
Gear^.Radius := 7; |
5415
94e26612e2ec
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
nemo
parents:
5413
diff
changeset
|
2466 |
tdX:= Gear^.dX; |
94e26612e2ec
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
nemo
parents:
5413
diff
changeset
|
2467 |
tdY:= Gear^.dY; |
94e26612e2ec
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
nemo
parents:
5413
diff
changeset
|
2468 |
Gear^.dX.QWordValue:= 214748365; |
94e26612e2ec
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
nemo
parents:
5413
diff
changeset
|
2469 |
Gear^.dY.QWordValue:= 429496730; |
94e26612e2ec
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
nemo
parents:
5413
diff
changeset
|
2470 |
Gear^.dX.isNegative:= getrandom(2)<>1; |
94e26612e2ec
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
nemo
parents:
5413
diff
changeset
|
2471 |
Gear^.dY.isNegative:= true; |
94e26612e2ec
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
nemo
parents:
5413
diff
changeset
|
2472 |
AmmoShove(Gear, 6, 100); |
94e26612e2ec
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
nemo
parents:
5413
diff
changeset
|
2473 |
Gear^.dX:= tdX; |
94e26612e2ec
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
nemo
parents:
5413
diff
changeset
|
2474 |
Gear^.dY:= tdY; |
3640
54676a34b9ad
Reduce calls to expensive operations in fire. Slightly alters fire behaviour, but should still be reasonable
nemo
parents:
3609
diff
changeset
|
2475 |
Gear^.Radius := 1; |
54676a34b9ad
Reduce calls to expensive operations in fire. Slightly alters fire behaviour, but should still be reasonable
nemo
parents:
3609
diff
changeset
|
2476 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2477 |
else if ((GameTicks and $3) = 3) then |
8795 | 2478 |
doMakeExplosion(gX, gY, 8, Gear^.Hedgehog, 0);//, EXPLNoDamage); |
3609
bc63ed514b70
Minor fire tweak for readability and lethalness, remove exit condition that was hanging game (identified by jaylittle)
nemo
parents:
3603
diff
changeset
|
2479 |
//DrawExplosion(gX, gY, 4); |
8795 | 2480 |
|
3096
9330eead14fa
Remove Distance from flake kick, reduce calls to Random() in flame replacing w/ checks on game tick and a little randomness.
nemo
parents:
3094
diff
changeset
|
2481 |
if ((GameTicks and $7) = 0) and (Random(2) = 0) then |
7426
55b49cc1f33a
Changes for the benefit of pas2c. Use downto in for loops to avoid repeated calls of Random/GetRandom. Wrap nots.
nemo
parents:
7416
diff
changeset
|
2482 |
for i:= Random(2) downto 0 do |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2483 |
AddVisualGear(gX - 3 + Random(6), gY - 2, vgtSmoke); |
8795 | 2484 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2485 |
if Gear^.Health > 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2486 |
dec(Gear^.Health); |
9809 | 2487 |
Gear^.Timer := 450 - Gear^.Tag * 8 + LongInt(GetRandom(2)) |
5024 | 2488 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2489 |
else |
5024 | 2490 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2491 |
// Modified fire |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2492 |
if ((GameTicks and $7FF) = 0) and ((GameFlags and gfSolidLand) = 0) then |
5024 | 2493 |
begin |
3143 | 2494 |
DrawExplosion(gX, gY, 4); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2495 |
|
7426
55b49cc1f33a
Changes for the benefit of pas2c. Use downto in for loops to avoid repeated calls of Random/GetRandom. Wrap nots.
nemo
parents:
7416
diff
changeset
|
2496 |
for i:= Random(3) downto 0 do |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2497 |
AddVisualGear(gX - 3 + Random(6), gY - 2, vgtSmoke); |
5024 | 2498 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2499 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2500 |
// This one is interesting. I think I understand the purpose, but I wonder if a bit more fuzzy of kicking could be done with getrandom. |
9809 | 2501 |
Gear^.Timer := 100 - Gear^.Tag * 3 + LongInt(GetRandom(2)); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2502 |
if (Gear^.Damage > 3000+Gear^.Tag*1500) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2503 |
Gear^.Health := 0 |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2504 |
end |
2424
b52344de23ae
In progress, trying to make a fire for molotov cocktail. Normal fire should still work fairly normally.
nemo
parents:
2376
diff
changeset
|
2505 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2506 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2507 |
if Gear^.Health = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2508 |
begin |
10379
caa5b40e405b
I a recent commit I caused flames to use uninitialized values. that lead to fire burning slow and desyncs. this commit fixes/reverts this
sheepluva
parents:
10372
diff
changeset
|
2509 |
gX := hwRound(Gear^.X); |
caa5b40e405b
I a recent commit I caused flames to use uninitialized values. that lead to fire burning slow and desyncs. this commit fixes/reverts this
sheepluva
parents:
10372
diff
changeset
|
2510 |
gY := hwRound(Gear^.Y); |
3609
bc63ed514b70
Minor fire tweak for readability and lethalness, remove exit condition that was hanging game (identified by jaylittle)
nemo
parents:
3603
diff
changeset
|
2511 |
if not sticky then |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2512 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2513 |
if ((GameTicks and $3) = 0) and (Random(1) = 0) then |
7426
55b49cc1f33a
Changes for the benefit of pas2c. Use downto in for loops to avoid repeated calls of Random/GetRandom. Wrap nots.
nemo
parents:
7416
diff
changeset
|
2514 |
for i:= Random(2) downto 0 do |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2515 |
AddVisualGear(gX - 3 + Random(6), gY - 2, vgtSmoke); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2516 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2517 |
else |
7426
55b49cc1f33a
Changes for the benefit of pas2c. Use downto in for loops to avoid repeated calls of Random/GetRandom. Wrap nots.
nemo
parents:
7416
diff
changeset
|
2518 |
for i:= Random(3) downto 0 do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2519 |
AddVisualGear(gX - 3 + Random(6), gY - 2, vgtSmoke); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2520 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2521 |
DeleteGear(Gear) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2522 |
end; |
79 | 2523 |
end; |
82 | 2524 |
|
2525 |
//////////////////////////////////////////////////////////////////////////////// |
|
2526 |
procedure doStepFirePunchWork(Gear: PGear); |
|
8795 | 2527 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2528 |
HHGear: PGear; |
82 | 2529 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2530 |
AllInactive := false; |
3894 | 2531 |
if ((Gear^.Message and gmDestroy) <> 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2532 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2533 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2534 |
AfterAttack; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2535 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2536 |
end; |
82 | 2537 |
|
4365 | 2538 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2539 |
if hwRound(HHGear^.Y) <= Gear^.Tag - 2 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2540 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2541 |
Gear^.Tag := hwRound(HHGear^.Y); |
10887 | 2542 |
DrawTunnel(HHGear^.X - int2hwFloat(cHHRadius), HHGear^.Y - _1, _0_5, _0, cHHRadius * 4+2, 2); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2543 |
HHGear^.State := HHGear^.State or gstNoDamage; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2544 |
Gear^.Y := HHGear^.Y; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2545 |
AmmoShove(Gear, 30, 40); |
6450 | 2546 |
HHGear^.State := HHGear^.State and (not gstNoDamage) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2547 |
end; |
351 | 2548 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2549 |
HHGear^.dY := HHGear^.dY + cGravity; |
9824 | 2550 |
if Gear^.Timer > 0 then dec(Gear^.Timer); |
2551 |
if not (HHGear^.dY.isNegative) or (Gear^.Timer = 0) then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2552 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2553 |
HHGear^.State := HHGear^.State or gstMoving; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2554 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2555 |
AfterAttack; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2556 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2557 |
end; |
2089 | 2558 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2559 |
if CheckLandValue(hwRound(HHGear^.X), hwRound(HHGear^.Y + HHGear^.dY + SignAs(_6,Gear^.dY)), |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2560 |
lfIndestructible) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2561 |
HHGear^.Y := HHGear^.Y + HHGear^.dY |
82 | 2562 |
end; |
2563 |
||
2564 |
procedure doStepFirePunch(Gear: PGear); |
|
8795 | 2565 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2566 |
HHGear: PGear; |
82 | 2567 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2568 |
AllInactive := false; |
4365 | 2569 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2570 |
DeleteCI(HHGear); |
6156 | 2571 |
//HHGear^.X := int2hwFloat(hwRound(HHGear^.X)) - _0_5; WTF? |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2572 |
HHGear^.dX := SignAs(cLittle, Gear^.dX); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2573 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2574 |
HHGear^.dY := - _0_3; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2575 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2576 |
Gear^.X := HHGear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2577 |
Gear^.dX := SignAs(_0_45, Gear^.dX); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2578 |
Gear^.dY := - _0_9; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2579 |
Gear^.doStep := @doStepFirePunchWork; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2580 |
DrawTunnel(HHGear^.X - int2hwFloat(cHHRadius), HHGear^.Y + _1, _0_5, _0, cHHRadius * 4, 5); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2581 |
|
7053 | 2582 |
PlaySoundV(TSound(ord(sndFirePunch1) + GetRandom(6)), HHGear^.Hedgehog^.Team^.voicepack) |
82 | 2583 |
end; |
2584 |
||
263 | 2585 |
//////////////////////////////////////////////////////////////////////////////// |
2586 |
||
929
9456e1e77369
- Continue preparation for implementing attack from rope and parachute
unc0rr
parents:
928
diff
changeset
|
2587 |
procedure doStepParachuteWork(Gear: PGear); |
8795 | 2588 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2589 |
HHGear: PGear; |
211 | 2590 |
begin |
4365 | 2591 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2592 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2593 |
inc(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2594 |
|
6081
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
2595 |
if (TestCollisionYwithGear(HHGear, 1) <> 0) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2596 |
or ((HHGear^.State and gstHHDriven) = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2597 |
or CheckGearDrowning(HHGear) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2598 |
or ((Gear^.Message and gmAttack) <> 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2599 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2600 |
with HHGear^ do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2601 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2602 |
Message := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2603 |
SetLittle(dX); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2604 |
dY := _0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2605 |
State := State or gstMoving; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2606 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2607 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2608 |
isCursorVisible := false; |
4372 | 2609 |
ApplyAmmoChanges(HHGear^.Hedgehog^); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2610 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2611 |
end; |
211 | 2612 |
|
4774 | 2613 |
HHGear^.X := HHGear^.X + cWindSpeed * 200; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2614 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2615 |
if (Gear^.Message and gmLeft) <> 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2616 |
HHGear^.X := HHGear^.X - cMaxWindSpeed * 80 |
8795 | 2617 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2618 |
else if (Gear^.Message and gmRight) <> 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2619 |
HHGear^.X := HHGear^.X + cMaxWindSpeed * 80; |
8795 | 2620 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2621 |
if (Gear^.Message and gmUp) <> 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2622 |
HHGear^.Y := HHGear^.Y - cGravity * 40 |
8795 | 2623 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2624 |
else if (Gear^.Message and gmDown) <> 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2625 |
HHGear^.Y := HHGear^.Y + cGravity * 40; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2626 |
|
4774 | 2627 |
// don't drift into obstacles |
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
2628 |
if TestCollisionXwithGear(HHGear, hwSign(HHGear^.dX)) <> 0 then |
4774 | 2629 |
HHGear^.X := HHGear^.X - int2hwFloat(hwSign(HHGear^.dX)); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2630 |
HHGear^.Y := HHGear^.Y + cGravity * 100; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2631 |
Gear^.X := HHGear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2632 |
Gear^.Y := HHGear^.Y |
263 | 2633 |
end; |
211 | 2634 |
|
929
9456e1e77369
- Continue preparation for implementing attack from rope and parachute
unc0rr
parents:
928
diff
changeset
|
2635 |
procedure doStepParachute(Gear: PGear); |
8795 | 2636 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2637 |
HHGear: PGear; |
929
9456e1e77369
- Continue preparation for implementing attack from rope and parachute
unc0rr
parents:
928
diff
changeset
|
2638 |
begin |
4365 | 2639 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2640 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2641 |
DeleteCI(HHGear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2642 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2643 |
AfterAttack; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2644 |
|
6450 | 2645 |
HHGear^.State := HHGear^.State and (not (gstAttacking or gstAttacked or gstMoving)); |
2646 |
HHGear^.Message := HHGear^.Message and (not gmAttack); |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2647 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2648 |
Gear^.doStep := @doStepParachuteWork; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2649 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2650 |
Gear^.Message := HHGear^.Message; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2651 |
doStepParachuteWork(Gear) |
929
9456e1e77369
- Continue preparation for implementing attack from rope and parachute
unc0rr
parents:
928
diff
changeset
|
2652 |
end; |
9456e1e77369
- Continue preparation for implementing attack from rope and parachute
unc0rr
parents:
928
diff
changeset
|
2653 |
|
263 | 2654 |
//////////////////////////////////////////////////////////////////////////////// |
2655 |
procedure doStepAirAttackWork(Gear: PGear); |
|
2656 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2657 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2658 |
Gear^.X := Gear^.X + cAirPlaneSpeed * Gear^.Tag; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2659 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2660 |
if (Gear^.Health > 0)and(not (Gear^.X < Gear^.dX))and(Gear^.X < Gear^.dX + cAirPlaneSpeed) then |
5612
2638dec1b323
This really should have been a TPoint for consistency
nemo
parents:
5606
diff
changeset
|
2661 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2662 |
dec(Gear^.Health); |
8795 | 2663 |
case Gear^.State of |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2664 |
0: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, cBombsSpeed * Gear^.Tag, _0, 0); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2665 |
1: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtMine, 0, cBombsSpeed * Gear^.Tag, _0, 0); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2666 |
2: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtNapalmBomb, 0, cBombsSpeed * Gear^.Tag, _0, 0); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2667 |
3: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtDrill, gsttmpFlag, cBombsSpeed * Gear^.Tag, _0, Gear^.Timer + 1); |
4246
e5cb885492df
drillstrike! might require the drill patch to improve behavior
koda
parents:
4233
diff
changeset
|
2668 |
//4: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtWaterMelon, 0, cBombsSpeed * |
e5cb885492df
drillstrike! might require the drill patch to improve behavior
koda
parents:
4233
diff
changeset
|
2669 |
// Gear^.Tag, _0, 5000); |
5612
2638dec1b323
This really should have been a TPoint for consistency
nemo
parents:
5606
diff
changeset
|
2670 |
end; |
4956
48e1f9a04c28
usound: added function for loops with fade in and out
koda
parents:
4886
diff
changeset
|
2671 |
Gear^.dX := Gear^.dX + int2hwFloat(30 * Gear^.Tag); |
10512
25021aac078e
fix underwater-skipping bug and make air-strike missiles submersible when fired from within weSea
sheepluva
parents:
10510
diff
changeset
|
2672 |
if CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y)) then |
25021aac078e
fix underwater-skipping bug and make air-strike missiles submersible when fired from within weSea
sheepluva
parents:
10510
diff
changeset
|
2673 |
FollowGear^.State:= FollowGear^.State or gstSubmersible; |
7053 | 2674 |
StopSoundChan(Gear^.SoundChannel, 4000); |
5612
2638dec1b323
This really should have been a TPoint for consistency
nemo
parents:
5606
diff
changeset
|
2675 |
end; |
1124 | 2676 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2677 |
if (GameTicks and $3F) = 0 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2678 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2679 |
|
7829
c1dc7839d7b9
Set minimums on a few values to avoid camera zooming out past them. partly Issue #430. Might be worth defining a new constant for this.
nemo
parents:
7784
diff
changeset
|
2680 |
if (hwRound(Gear^.X) > (max(LAND_WIDTH,4096)+2048)) or (hwRound(Gear^.X) < -2048) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2681 |
begin |
4956
48e1f9a04c28
usound: added function for loops with fade in and out
koda
parents:
4886
diff
changeset
|
2682 |
// avoid to play forever (is this necessary?) |
7053 | 2683 |
StopSoundChan(Gear^.SoundChannel); |
4956
48e1f9a04c28
usound: added function for loops with fade in and out
koda
parents:
4886
diff
changeset
|
2684 |
DeleteGear(Gear) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2685 |
end; |
263 | 2686 |
end; |
2687 |
||
2688 |
procedure doStepAirAttack(Gear: PGear); |
|
2689 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2690 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2691 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2692 |
if Gear^.X.QWordValue = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2693 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2694 |
Gear^.Tag := 1; |
5067
57101536cf86
fix for Issue 207: To far left for Napalm (and other weapons)
sheepluva
parents:
5063
diff
changeset
|
2695 |
Gear^.X := -_2048; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2696 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2697 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2698 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2699 |
Gear^.Tag := -1; |
7829
c1dc7839d7b9
Set minimums on a few values to avoid camera zooming out past them. partly Issue #430. Might be worth defining a new constant for this.
nemo
parents:
7784
diff
changeset
|
2700 |
Gear^.X := int2hwFloat(max(LAND_WIDTH,4096) + 2048); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2701 |
end; |
1507 | 2702 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2703 |
Gear^.Y := int2hwFloat(topY-300); |
5612
2638dec1b323
This really should have been a TPoint for consistency
nemo
parents:
5606
diff
changeset
|
2704 |
Gear^.dX := int2hwFloat(Gear^.Target.X - 5 * Gear^.Tag * 15); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2705 |
|
4778
1565a553d200
have napalm strike bombs explode right over the target
sheepluva
parents:
4774
diff
changeset
|
2706 |
// calcs for Napalm Strike, so that it will hit the target (without wind at least :P) |
1565a553d200
have napalm strike bombs explode right over the target
sheepluva
parents:
4774
diff
changeset
|
2707 |
if (Gear^.State = 2) then |
8795 | 2708 |
Gear^.dX := Gear^.dX - cBombsSpeed * Gear^.Tag * 900 |
4778
1565a553d200
have napalm strike bombs explode right over the target
sheepluva
parents:
4774
diff
changeset
|
2709 |
// calcs for regular falling gears |
5612
2638dec1b323
This really should have been a TPoint for consistency
nemo
parents:
5606
diff
changeset
|
2710 |
else if (int2hwFloat(Gear^.Target.Y) - Gear^.Y > _0) then |
2638dec1b323
This really should have been a TPoint for consistency
nemo
parents:
5606
diff
changeset
|
2711 |
Gear^.dX := Gear^.dX - cBombsSpeed * hwSqrt((int2hwFloat(Gear^.Target.Y) - Gear^.Y) * 2 / |
4778
1565a553d200
have napalm strike bombs explode right over the target
sheepluva
parents:
4774
diff
changeset
|
2712 |
cGravity) * Gear^.Tag; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2713 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2714 |
Gear^.Health := 6; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2715 |
Gear^.doStep := @doStepAirAttackWork; |
4956
48e1f9a04c28
usound: added function for loops with fade in and out
koda
parents:
4886
diff
changeset
|
2716 |
Gear^.SoundChannel := LoopSound(sndPlane, 4000); |
48e1f9a04c28
usound: added function for loops with fade in and out
koda
parents:
4886
diff
changeset
|
2717 |
|
263 | 2718 |
end; |
2719 |
||
2720 |
//////////////////////////////////////////////////////////////////////////////// |
|
2721 |
||
2722 |
procedure doStepAirBomb(Gear: PGear); |
|
2723 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2724 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2725 |
doStepFallingGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2726 |
if (Gear^.State and gstCollision) <> 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2727 |
begin |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
2728 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, Gear^.Hedgehog, EXPLAutoSound); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2729 |
DeleteGear(Gear); |
9954 | 2730 |
{$IFNDEF PAS2C} |
8204 | 2731 |
with mobileRecord do |
2732 |
if (performRumble <> nil) and (not fastUntilLag) then |
|
2733 |
performRumble(kSystemSoundID_Vibrate); |
|
9954 | 2734 |
{$ENDIF} |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2735 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2736 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2737 |
if (GameTicks and $3F) = 0 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2738 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace) |
211 | 2739 |
end; |
409 | 2740 |
|
2741 |
//////////////////////////////////////////////////////////////////////////////// |
|
2742 |
||
2743 |
procedure doStepGirder(Gear: PGear); |
|
8795 | 2744 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2745 |
HHGear: PGear; |
1915 | 2746 |
x, y, tx, ty: hwFloat; |
9505
56e0cca99e20
Allow girder construction to wrap. Makes wrapping w/ large bodies of water a bit more interesting.
nemo
parents:
9487
diff
changeset
|
2747 |
rx: LongInt; |
9768
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9767
diff
changeset
|
2748 |
LandFlags: Word; |
10251
a3b42e81803c
collision indicator on failed girder placement (especially useful with rubberband I guess). still needs some tweaks but I am going to bed now :P
sheepluva
parents:
10234
diff
changeset
|
2749 |
warn: PVisualGear; |
a3b42e81803c
collision indicator on failed girder placement (especially useful with rubberband I guess). still needs some tweaks but I am going to bed now :P
sheepluva
parents:
10234
diff
changeset
|
2750 |
distFail: boolean; |
409 | 2751 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2752 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2753 |
|
4365 | 2754 |
HHGear := Gear^.Hedgehog^.Gear; |
5612
2638dec1b323
This really should have been a TPoint for consistency
nemo
parents:
5606
diff
changeset
|
2755 |
tx := int2hwFloat(Gear^.Target.X); |
2638dec1b323
This really should have been a TPoint for consistency
nemo
parents:
5606
diff
changeset
|
2756 |
ty := int2hwFloat(Gear^.Target.Y); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2757 |
x := HHGear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2758 |
y := HHGear^.Y; |
9505
56e0cca99e20
Allow girder construction to wrap. Makes wrapping w/ large bodies of water a bit more interesting.
nemo
parents:
9487
diff
changeset
|
2759 |
rx:= hwRound(x); |
56e0cca99e20
Allow girder construction to wrap. Makes wrapping w/ large bodies of water a bit more interesting.
nemo
parents:
9487
diff
changeset
|
2760 |
|
9768
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9767
diff
changeset
|
2761 |
LandFlags:= 0; |
9811
66a7959869f0
make rubber bouncy even in winter. was considering icy as well but, one, evil, two, would prob want ice sprite like girder
nemo
parents:
9809
diff
changeset
|
2762 |
if Gear^.AmmoType = amRubber then LandFlags:= lfBouncy |
66a7959869f0
make rubber bouncy even in winter. was considering icy as well but, one, evil, two, would prob want ice sprite like girder
nemo
parents:
9809
diff
changeset
|
2763 |
else if cIce then LandFlags:= lfIce; |
9768
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9767
diff
changeset
|
2764 |
|
10251
a3b42e81803c
collision indicator on failed girder placement (especially useful with rubberband I guess). still needs some tweaks but I am going to bed now :P
sheepluva
parents:
10234
diff
changeset
|
2765 |
distFail:= ((Distance(tx - x, ty - y) > _256) and ((WorldEdge <> weWrap) or |
9505
56e0cca99e20
Allow girder construction to wrap. Makes wrapping w/ large bodies of water a bit more interesting.
nemo
parents:
9487
diff
changeset
|
2766 |
( |
56e0cca99e20
Allow girder construction to wrap. Makes wrapping w/ large bodies of water a bit more interesting.
nemo
parents:
9487
diff
changeset
|
2767 |
(Distance(tx - int2hwFloat(rightX+(rx-leftX)), ty - y) > _256) and |
56e0cca99e20
Allow girder construction to wrap. Makes wrapping w/ large bodies of water a bit more interesting.
nemo
parents:
9487
diff
changeset
|
2768 |
(Distance(tx - int2hwFloat(leftX-(rightX-rx)), ty - y) > _256) |
10251
a3b42e81803c
collision indicator on failed girder placement (especially useful with rubberband I guess). still needs some tweaks but I am going to bed now :P
sheepluva
parents:
10234
diff
changeset
|
2769 |
))); |
a3b42e81803c
collision indicator on failed girder placement (especially useful with rubberband I guess). still needs some tweaks but I am going to bed now :P
sheepluva
parents:
10234
diff
changeset
|
2770 |
if distFail |
10286
1940e937fc08
fix TryPlaceOnLand's ambiguity/messup wrt to making terrain indestructible (had boolean parameter for indestructible AND landflags parameters that could contain lfIndestructibly)
sheepluva
parents:
10253
diff
changeset
|
2771 |
or (not TryPlaceOnLand(Gear^.Target.X - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Width div 2, Gear^.Target.Y - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Height div 2, Ammoz[Gear^.AmmoType].PosSprite, Gear^.State, true, LandFlags)) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2772 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2773 |
PlaySound(sndDenied); |
10251
a3b42e81803c
collision indicator on failed girder placement (especially useful with rubberband I guess). still needs some tweaks but I am going to bed now :P
sheepluva
parents:
10234
diff
changeset
|
2774 |
if not distFail then |
a3b42e81803c
collision indicator on failed girder placement (especially useful with rubberband I guess). still needs some tweaks but I am going to bed now :P
sheepluva
parents:
10234
diff
changeset
|
2775 |
begin |
10298
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2776 |
warn:= AddVisualGear(Gear^.Target.X, Gear^.Target.Y, vgtNoPlaceWarn, 0, true); |
10251
a3b42e81803c
collision indicator on failed girder placement (especially useful with rubberband I guess). still needs some tweaks but I am going to bed now :P
sheepluva
parents:
10234
diff
changeset
|
2777 |
if warn <> nil then |
a3b42e81803c
collision indicator on failed girder placement (especially useful with rubberband I guess). still needs some tweaks but I am going to bed now :P
sheepluva
parents:
10234
diff
changeset
|
2778 |
warn^.Tex := GetPlaceCollisionTex(Gear^.Target.X - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Width div 2, Gear^.Target.Y - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Height div 2, Ammoz[Gear^.AmmoType].PosSprite, Gear^.State); |
a3b42e81803c
collision indicator on failed girder placement (especially useful with rubberband I guess). still needs some tweaks but I am going to bed now :P
sheepluva
parents:
10234
diff
changeset
|
2779 |
end; |
6450 | 2780 |
HHGear^.Message := HHGear^.Message and (not gmAttack); |
2781 |
HHGear^.State := HHGear^.State and (not gstAttacking); |
|
10818
f642a28cab0c
Add placement of airmines in engine outside of hog proximity. Has a bug, only protecting 1st team. Also fix a spelling error and rename gstHHChooseTarget to gstChooseTarget
nemo
parents:
10815
diff
changeset
|
2782 |
HHGear^.State := HHGear^.State or gstChooseTarget; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2783 |
isCursorVisible := true; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2784 |
DeleteGear(Gear) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2785 |
end |
8795 | 2786 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2787 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2788 |
PlaySound(sndPlaced); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2789 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2790 |
AfterAttack; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2791 |
end; |
1914 | 2792 |
|
6450 | 2793 |
HHGear^.State := HHGear^.State and (not (gstAttacking or gstAttacked)); |
2794 |
HHGear^.Message := HHGear^.Message and (not gmAttack); |
|
409 | 2795 |
end; |
520 | 2796 |
|
2797 |
//////////////////////////////////////////////////////////////////////////////// |
|
525 | 2798 |
procedure doStepTeleportAfter(Gear: PGear); |
8795 | 2799 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2800 |
HHGear: PGear; |
912 | 2801 |
begin |
4365 | 2802 |
HHGear := Gear^.Hedgehog^.Gear; |
7659 | 2803 |
doStepHedgehogMoving(HHGear); |
2804 |
// if not infattack mode wait for hedgehog finish falling to collect cases |
|
2805 |
if ((GameFlags and gfInfAttack) <> 0) |
|
2806 |
or ((HHGear^.State and gstMoving) = 0) |
|
2807 |
or (Gear^.Hedgehog^.Gear^.Damage > 0) |
|
2808 |
or ((HHGear^.State and gstDrowning) = 1) then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2809 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2810 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2811 |
AfterAttack |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2812 |
end |
912 | 2813 |
end; |
2814 |
||
2815 |
procedure doStepTeleportAnim(Gear: PGear); |
|
525 | 2816 |
begin |
7659 | 2817 |
if (Gear^.Hedgehog^.Gear^.Damage > 0) then |
2818 |
begin |
|
2819 |
DeleteGear(Gear); |
|
2820 |
AfterAttack; |
|
2821 |
end; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2822 |
inc(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2823 |
if Gear^.Timer = 65 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2824 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2825 |
Gear^.Timer := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2826 |
inc(Gear^.Pos); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2827 |
if Gear^.Pos = 11 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2828 |
Gear^.doStep := @doStepTeleportAfter |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2829 |
end; |
525 | 2830 |
end; |
520 | 2831 |
|
2832 |
procedure doStepTeleport(Gear: PGear); |
|
8795 | 2833 |
var |
10298
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2834 |
lx, ty, y, oy: LongInt; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2835 |
HHGear : PGear; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2836 |
valid : Boolean; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2837 |
warn : PVisualGear; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2838 |
const |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2839 |
ytol = cHHRadius; |
520 | 2840 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2841 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2842 |
|
4365 | 2843 |
HHGear := Gear^.Hedgehog^.Gear; |
10298
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2844 |
|
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2845 |
valid:= false; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2846 |
|
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2847 |
lx:= Gear^.Target.X - SpritesData[sprHHTelepMask].Width div 2; // left |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2848 |
ty:= Gear^.Target.Y - SpritesData[sprHHTelepMask].Height div 2; // top |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2849 |
|
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2850 |
// remember original target location |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2851 |
oy:= Gear^.Target.Y; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2852 |
|
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2853 |
for y:= ty downto ty - ytol do |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2854 |
begin |
10897
8ea636ce120a
Add options to set colouring, behind existing land, and horizontal/vertical flipping to PlaceSprite
nemo
parents:
10895
diff
changeset
|
2855 |
if TryPlaceOnLand(lx, y, sprHHTelepMask, 0, false, not hasBorder, false, false, false, false, 0, $FFFFFFFF) then |
10298
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2856 |
begin |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2857 |
valid:= true; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2858 |
break; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2859 |
end; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2860 |
dec(Gear^.Target.Y); |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2861 |
end; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2862 |
|
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2863 |
if not valid then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2864 |
begin |
6450 | 2865 |
HHGear^.Message := HHGear^.Message and (not gmAttack); |
2866 |
HHGear^.State := HHGear^.State and (not gstAttacking); |
|
10818
f642a28cab0c
Add placement of airmines in engine outside of hog proximity. Has a bug, only protecting 1st team. Also fix a spelling error and rename gstHHChooseTarget to gstChooseTarget
nemo
parents:
10815
diff
changeset
|
2867 |
HHGear^.State := HHGear^.State or gstChooseTarget; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2868 |
isCursorVisible := true; |
10298
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2869 |
warn:= AddVisualGear(Gear^.Target.X, oy, vgtNoPlaceWarn, 0, true); |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2870 |
if warn <> nil then |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
2871 |
warn^.Tex := GetPlaceCollisionTex(lx, ty, sprHHTelepMask, 0); |
10676
7111b4a46b5c
fix for Issue 855: Failure to teleport rarely makes engine crash
sheepluva
parents:
10663
diff
changeset
|
2872 |
DeleteGear(Gear); |
7111b4a46b5c
fix for Issue 855: Failure to teleport rarely makes engine crash
sheepluva
parents:
10663
diff
changeset
|
2873 |
PlaySound(sndDenied); |
7111b4a46b5c
fix for Issue 855: Failure to teleport rarely makes engine crash
sheepluva
parents:
10663
diff
changeset
|
2874 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2875 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2876 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2877 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
2878 |
DeleteCI(HHGear); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
2879 |
SetAllHHToActive; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2880 |
Gear^.doStep := @doStepTeleportAnim; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2881 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2882 |
// copy old HH position and direction to Gear (because we need them for drawing the vanishing hog) |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2883 |
Gear^.dX := HHGear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2884 |
// retrieve the cursor direction (it was previously copied to X so it doesn't get lost) |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2885 |
HHGear^.dX.isNegative := (Gear^.X.QWordValue <> 0); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2886 |
Gear^.X := HHGear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2887 |
Gear^.Y := HHGear^.Y; |
5612
2638dec1b323
This really should have been a TPoint for consistency
nemo
parents:
5606
diff
changeset
|
2888 |
HHGear^.X := int2hwFloat(Gear^.Target.X); |
2638dec1b323
This really should have been a TPoint for consistency
nemo
parents:
5606
diff
changeset
|
2889 |
HHGear^.Y := int2hwFloat(Gear^.Target.Y); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2890 |
HHGear^.State := HHGear^.State or gstMoving; |
10547
cc439790ebae
fix for Issue 828: Manual placement animation is drawn twice
sheepluva
parents:
10545
diff
changeset
|
2891 |
if not Gear^.Hedgehog^.Unplaced then |
cc439790ebae
fix for Issue 828: Manual placement animation is drawn twice
sheepluva
parents:
10545
diff
changeset
|
2892 |
Gear^.State:= Gear^.State or gstAnimation; |
7659 | 2893 |
Gear^.Hedgehog^.Unplaced := false; |
2894 |
isCursorVisible := false; |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
2895 |
playSound(sndWarp) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2896 |
end; |
5612
2638dec1b323
This really should have been a TPoint for consistency
nemo
parents:
5606
diff
changeset
|
2897 |
Gear^.Target.X:= NoPointX |
520 | 2898 |
end; |
534 | 2899 |
|
2900 |
//////////////////////////////////////////////////////////////////////////////// |
|
2901 |
procedure doStepSwitcherWork(Gear: PGear); |
|
8795 | 2902 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2903 |
HHGear: PGear; |
7341
d70478d265ec
Fix crash when hedgehog dies while switching from it
unc0rr
parents:
7339
diff
changeset
|
2904 |
hedgehog: PHedgehog; |
6992 | 2905 |
State: Longword; |
10494 | 2906 |
switchDir: Longword; |
534 | 2907 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2908 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2909 |
|
10145
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
2910 |
if ((Gear^.Message and (not (gmSwitch or gmPrecise))) <> 0) or (TurnTimeLeft = 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2911 |
begin |
7341
d70478d265ec
Fix crash when hedgehog dies while switching from it
unc0rr
parents:
7339
diff
changeset
|
2912 |
hedgehog := Gear^.Hedgehog; |
6535
51a7e71ad317
It seems there's no need to copy gear's msg. Fixes bots getting stuck after hog switch.
unc0rr
parents:
6532
diff
changeset
|
2913 |
//Msg := Gear^.Message and (not gmSwitch); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2914 |
DeleteGear(Gear); |
7341
d70478d265ec
Fix crash when hedgehog dies while switching from it
unc0rr
parents:
7339
diff
changeset
|
2915 |
ApplyAmmoChanges(hedgehog^); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2916 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2917 |
HHGear := CurrentHedgehog^.Gear; |
4372 | 2918 |
ApplyAmmoChanges(HHGear^.Hedgehog^); |
6535
51a7e71ad317
It seems there's no need to copy gear's msg. Fixes bots getting stuck after hog switch.
unc0rr
parents:
6532
diff
changeset
|
2919 |
//HHGear^.Message := Msg; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2920 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2921 |
end; |
534 | 2922 |
|
3894 | 2923 |
if (Gear^.Message and gmSwitch) <> 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2924 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2925 |
HHGear := CurrentHedgehog^.Gear; |
6450 | 2926 |
HHGear^.Message := HHGear^.Message and (not gmSwitch); |
2927 |
Gear^.Message := Gear^.Message and (not gmSwitch); |
|
10145
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
2928 |
|
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
2929 |
// switching in reverse direction |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
2930 |
if (Gear^.Message and gmPrecise) <> 0 then |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
2931 |
begin |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
2932 |
HHGear^.Message := HHGear^.Message and (not gmPrecise); |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
2933 |
switchDir:= CurrentTeam^.HedgehogsNumber - 1; |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
2934 |
end |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
2935 |
else |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
2936 |
switchDir:= 1; |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
2937 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2938 |
State := HHGear^.State; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2939 |
HHGear^.State := 0; |
7400
09427dbec1d8
Fix TARDIS, make switcher work w/ the new more stringent check.
nemo
parents:
7399
diff
changeset
|
2940 |
HHGear^.Z := cHHZ; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2941 |
HHGear^.Active := false; |
7400
09427dbec1d8
Fix TARDIS, make switcher work w/ the new more stringent check.
nemo
parents:
7399
diff
changeset
|
2942 |
HHGear^.Message:= HHGear^.Message or gmRemoveFromList or gmAddToList; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2943 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2944 |
PlaySound(sndSwitchHog); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2945 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2946 |
repeat |
10494 | 2947 |
CurrentTeam^.CurrHedgehog := (CurrentTeam^.CurrHedgehog + switchDir) mod CurrentTeam^.HedgehogsNumber; |
8795 | 2948 |
until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) and |
2949 |
(CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear^.Damage = 0) and |
|
8563
4d9d8287e601
Trying to improve rendering, sliding and thawing. Messing around w/ making fire thaw faster.
nemo
parents:
8560
diff
changeset
|
2950 |
(CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Effects[heFrozen]=0); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2951 |
|
7270
93e92e82d5c8
Step 1. Add current hedgehog as top bit of bottom byte.
nemo
parents:
7268
diff
changeset
|
2952 |
SwitchCurrentHedgehog(@CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog]); |
8795 | 2953 |
AmmoMenuInvalidated:= true; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2954 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2955 |
HHGear := CurrentHedgehog^.Gear; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2956 |
HHGear^.State := State; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2957 |
HHGear^.Active := true; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2958 |
FollowGear := HHGear; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2959 |
HHGear^.Z := cCurrHHZ; |
10145
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
2960 |
// restore precise key |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
2961 |
if (switchDir <> 1) then |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
2962 |
HHGear^.Message:= HHGear^.Message or gmPrecise; |
7400
09427dbec1d8
Fix TARDIS, make switcher work w/ the new more stringent check.
nemo
parents:
7399
diff
changeset
|
2963 |
HHGear^.Message:= HHGear^.Message or gmRemoveFromList or gmAddToList; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2964 |
Gear^.X := HHGear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2965 |
Gear^.Y := HHGear^.Y |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2966 |
end; |
534 | 2967 |
end; |
2968 |
||
2969 |
procedure doStepSwitcher(Gear: PGear); |
|
8795 | 2970 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2971 |
HHGear: PGear; |
534 | 2972 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2973 |
Gear^.doStep := @doStepSwitcherWork; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2974 |
|
4365 | 2975 |
HHGear := Gear^.Hedgehog^.Gear; |
5358 | 2976 |
OnUsedAmmo(HHGear^.Hedgehog^); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2977 |
with HHGear^ do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2978 |
begin |
6450 | 2979 |
State := State and (not gstAttacking); |
2980 |
Message := Message and (not gmAttack) |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2981 |
end |
534 | 2982 |
end; |
924 | 2983 |
|
2984 |
//////////////////////////////////////////////////////////////////////////////// |
|
2985 |
procedure doStepMortar(Gear: PGear); |
|
8795 | 2986 |
var |
8413
454191defee6
restore former cluster behaviour (makes the most diff for the bomb)
nemo
parents:
8370
diff
changeset
|
2987 |
dX, dY, gdX, gdY: hwFloat; |
924 | 2988 |
i: LongInt; |
2989 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2990 |
AllInactive := false; |
8945
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
2991 |
gdX := Gear^.dX; |
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
2992 |
gdY := Gear^.dY; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2993 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2994 |
doStepFallingGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2995 |
if (Gear^.State and gstCollision) <> 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2996 |
begin |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
2997 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 20, Gear^.Hedgehog, EXPLAutoSound); |
8945
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
2998 |
gdX.isNegative := not gdX.isNegative; |
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
2999 |
gdY.isNegative := not gdY.isNegative; |
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
3000 |
gdX:= gdX*_0_2; |
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
3001 |
gdY:= gdY*_0_2; |
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
3002 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3003 |
for i:= 0 to 4 do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3004 |
begin |
8945
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
3005 |
dX := gdX + rndSign(GetRandomf) * _0_03; |
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
3006 |
dY := gdY + rndSign(GetRandomf) * _0_03; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3007 |
AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtCluster, 0, dX, dY, 25); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3008 |
end; |
2376 | 3009 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3010 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3011 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3012 |
end; |
963 | 3013 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3014 |
if (GameTicks and $3F) = 0 then |
10352 | 3015 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace); |
924 | 3016 |
end; |
984 | 3017 |
|
3018 |
//////////////////////////////////////////////////////////////////////////////// |
|
3019 |
procedure doStepKamikazeWork(Gear: PGear); |
|
8795 | 3020 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3021 |
i: LongWord; |
984 | 3022 |
HHGear: PGear; |
5866
9017a0ff4201
aaaallways, I want to beeee with you, and make belieeeeve with you
nemo
parents:
5841
diff
changeset
|
3023 |
sparkles: PVisualGear; |
5913 | 3024 |
hasWishes: boolean; |
984 | 3025 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3026 |
AllInactive := false; |
5913 | 3027 |
hasWishes:= ((Gear^.Message and (gmPrecise or gmSwitch)) = (gmPrecise or gmSwitch)); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3028 |
if hasWishes then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3029 |
Gear^.AdvBounce:= 1; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3030 |
|
4365 | 3031 |
HHGear := Gear^.Hedgehog^.Gear; |
7958 | 3032 |
if HHGear = nil then |
3033 |
begin |
|
3034 |
DeleteGear(Gear); |
|
3035 |
exit |
|
3036 |
end; |
|
3037 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3038 |
HHGear^.State := HHGear^.State or gstNoDamage; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3039 |
DeleteCI(HHGear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3040 |
|
3852 | 3041 |
Gear^.X := HHGear^.X; |
3042 |
Gear^.Y := HHGear^.Y; |
|
5913 | 3043 |
if (GameTicks mod 2 = 0) and hasWishes then |
5866
9017a0ff4201
aaaallways, I want to beeee with you, and make belieeeeve with you
nemo
parents:
5841
diff
changeset
|
3044 |
begin |
9017a0ff4201
aaaallways, I want to beeee with you, and make belieeeeve with you
nemo
parents:
5841
diff
changeset
|
3045 |
sparkles:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtDust, 1); |
6131 | 3046 |
if sparkles <> nil then |
5924
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
3047 |
begin |
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
3048 |
sparkles^.Tint:= ((random(210)+45) shl 24) or ((random(210)+45) shl 16) or ((random(210)+45) shl 8) or $FF; |
7066
12cc2bd84b0b
Make pas2c even more happier with uGears.c, allow assigning arrays in some cases
unc0rr
parents:
7062
diff
changeset
|
3049 |
sparkles^.Angle:= random(360); |
5924
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
3050 |
end |
5866
9017a0ff4201
aaaallways, I want to beeee with you, and make belieeeeve with you
nemo
parents:
5841
diff
changeset
|
3051 |
end; |
3852 | 3052 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3053 |
i := 2; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3054 |
repeat |
8795 | 3055 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3056 |
Gear^.X := Gear^.X + HHGear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3057 |
Gear^.Y := Gear^.Y + HHGear^.dY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3058 |
HHGear^.X := Gear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3059 |
HHGear^.Y := Gear^.Y; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3060 |
|
10354 | 3061 |
// check for drowning |
3062 |
if CheckGearDrowning(HHGear) then |
|
3063 |
begin |
|
3064 |
AfterAttack; |
|
3065 |
DeleteGear(Gear); |
|
3066 |
exit; |
|
3067 |
end; |
|
3068 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3069 |
inc(Gear^.Damage, 2); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3070 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3071 |
// if TestCollisionXwithGear(HHGear, hwSign(Gear^.dX)) |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3072 |
// or TestCollisionYwithGear(HHGear, hwSign(Gear^.dY)) then inc(Gear^.Damage, 3); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3073 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3074 |
dec(i) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3075 |
until (i = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3076 |
or (Gear^.Damage > Gear^.Health); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3077 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3078 |
inc(upd); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3079 |
if upd > 3 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3080 |
begin |
5913 | 3081 |
if Gear^.Health < 1500 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3082 |
begin |
5913 | 3083 |
if Gear^.AdvBounce <> 0 then |
3084 |
Gear^.Pos := 3 |
|
3085 |
else |
|
3086 |
Gear^.Pos := 2; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3087 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3088 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3089 |
AmmoShove(Gear, 30, 40); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3090 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3091 |
DrawTunnel(HHGear^.X - HHGear^.dX * 10, |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3092 |
HHGear^.Y - _2 - HHGear^.dY * 10 + hwAbs(HHGear^.dY) * 2, |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3093 |
HHGear^.dX, |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3094 |
HHGear^.dY, |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3095 |
20 + cHHRadius * 2, |
6130 | 3096 |
cHHRadius * 2 + 7); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3097 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3098 |
upd := 0 |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3099 |
end; |
984 | 3100 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3101 |
if Gear^.Health < Gear^.Damage then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3102 |
begin |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
3103 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, Gear^.Hedgehog, EXPLAutoSound); |
6112
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3104 |
if hasWishes then |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3105 |
for i:= 0 to 31 do |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3106 |
begin |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3107 |
sparkles:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtStraightShot); |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3108 |
if sparkles <> nil then |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3109 |
with sparkles^ do |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3110 |
begin |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3111 |
Tint:= ((random(210)+45) shl 24) or ((random(210)+45) shl 16) or ((random(210)+45) shl 8) or $FF; |
7066
12cc2bd84b0b
Make pas2c even more happier with uGears.c, allow assigning arrays in some cases
unc0rr
parents:
7062
diff
changeset
|
3112 |
Angle:= random(360); |
6112
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3113 |
dx:= 0.001 * (random(200)); |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3114 |
dy:= 0.001 * (random(200)); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3115 |
if random(2) = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3116 |
dx := -dx; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3117 |
if random(2) = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3118 |
dy := -dy; |
6112
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3119 |
FrameTicks:= random(400) + 250 |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3120 |
end |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3121 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3122 |
AfterAttack; |
7395 | 3123 |
HHGear^.Message:= HHGear^.Message or gmDestroy; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3124 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3125 |
end |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3126 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3127 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3128 |
dec(Gear^.Health, Gear^.Damage); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3129 |
Gear^.Damage := 0 |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3130 |
end |
984 | 3131 |
end; |
3132 |
||
987 | 3133 |
procedure doStepKamikazeIdle(Gear: PGear); |
3134 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3135 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3136 |
dec(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3137 |
if Gear^.Timer = 0 then |
5922 | 3138 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3139 |
Gear^.Pos := 1; |
7053 | 3140 |
PlaySoundV(sndKamikaze, Gear^.Hedgehog^.Team^.voicepack); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3141 |
Gear^.doStep := @doStepKamikazeWork |
5922 | 3142 |
end |
987 | 3143 |
end; |
3144 |
||
984 | 3145 |
procedure doStepKamikaze(Gear: PGear); |
8795 | 3146 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3147 |
HHGear: PGear; |
984 | 3148 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3149 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3150 |
|
4365 | 3151 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3152 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3153 |
HHGear^.dX := Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3154 |
HHGear^.dY := Gear^.dY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3155 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3156 |
Gear^.dX := SignAs(_0_45, Gear^.dX); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3157 |
Gear^.dY := - _0_9; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3158 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3159 |
Gear^.Timer := 550; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3160 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3161 |
Gear^.doStep := @doStepKamikazeIdle |
984 | 3162 |
end; |
3163 |
||
1103 | 3164 |
//////////////////////////////////////////////////////////////////////////////// |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3165 |
|
1110 | 3166 |
procedure doStepCakeExpl(Gear: PGear); |
3167 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3168 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3169 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3170 |
inc(Gear^.Tag); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3171 |
if Gear^.Tag < 2250 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3172 |
exit; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3173 |
|
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
3174 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), cakeDmg, Gear^.Hedgehog, EXPLAutoSound); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3175 |
AfterAttack; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3176 |
DeleteGear(Gear) |
1110 | 3177 |
end; |
3178 |
||
1109 | 3179 |
procedure doStepCakeDown(Gear: PGear); |
8795 | 3180 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3181 |
gi: PGear; |
6765 | 3182 |
dmg, dmgBase: LongInt; |
3183 |
fX, fY, tdX, tdY: hwFloat; |
|
1109 | 3184 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3185 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3186 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3187 |
inc(Gear^.Tag); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3188 |
if Gear^.Tag < 100 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3189 |
exit; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3190 |
Gear^.Tag := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3191 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3192 |
if Gear^.Pos = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3193 |
begin |
6765 | 3194 |
///////////// adapted from doMakeExplosion /////////////////////////// |
3195 |
//fX:= Gear^.X; |
|
3196 |
//fY:= Gear^.Y; |
|
3197 |
//fX.QWordValue:= fX.QWordValue and $FFFFFFFF00000000; |
|
3198 |
//fY.QWordValue:= fY.QWordValue and $FFFFFFFF00000000; |
|
3199 |
fX:= int2hwFloat(hwRound(Gear^.X)); |
|
3200 |
fY:= int2hwFloat(hwRound(Gear^.Y)); |
|
3201 |
dmgBase:= cakeDmg shl 1 + cHHRadius div 2; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3202 |
gi := GearsList; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3203 |
while gi <> nil do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3204 |
begin |
6765 | 3205 |
if gi^.Kind = gtHedgehog then |
3206 |
begin |
|
3207 |
dmg:= 0; |
|
3208 |
tdX:= gi^.X-fX; |
|
3209 |
tdY:= gi^.Y-fY; |
|
3210 |
if hwRound(hwAbs(tdX)+hwAbs(tdY)) < dmgBase then |
|
3211 |
dmg:= dmgBase - max(hwRound(Distance(tdX, tdY)),gi^.Radius); |
|
3212 |
if (dmg > 1) then dmg:= ModifyDamage(min(dmg div 2, cakeDmg), gi); |
|
3213 |
if (dmg > 1) then |
|
10011
ead5e4b21671
Add check for gear kind of hedgehog on invulnerability effect. This probably fixes bug #766, is similar to change in previous r2a1483d91977 and was introduced by r7d925e82e572
nemo
parents:
9998
diff
changeset
|
3214 |
if (CurrentHedgehog^.Gear = gi) and (gi^.Hedgehog^.Effects[heInvulnerable] = 0) then |
6765 | 3215 |
gi^.State := gi^.State or gstLoser |
3216 |
else |
|
3217 |
gi^.State := gi^.State or gstWinner; |
|
3218 |
end; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3219 |
gi := gi^.NextGear |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3220 |
end; |
6765 | 3221 |
////////////////////////////////////////////////////////////////////// |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3222 |
Gear^.doStep := @doStepCakeExpl; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3223 |
PlaySound(sndCake) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3224 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3225 |
else dec(Gear^.Pos) |
1109 | 3226 |
end; |
3227 |
||
3228 |
||
1089 | 3229 |
procedure doStepCakeWork(Gear: PGear); |
7370
d50b874e7ee8
Introduce uGearsHandlers.pas, for now only part of cake handlers is moved there
unc0rr
parents:
7341
diff
changeset
|
3230 |
var |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3231 |
tdx, tdy: hwFloat; |
10874
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3232 |
cakeData: PCakeData; |
1088 | 3233 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3234 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3235 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3236 |
inc(Gear^.Tag); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3237 |
if Gear^.Tag < 7 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3238 |
exit; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3239 |
|
7416
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7408
diff
changeset
|
3240 |
dec(Gear^.Health); |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7408
diff
changeset
|
3241 |
Gear^.Timer := Gear^.Health*10; |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7408
diff
changeset
|
3242 |
if Gear^.Health mod 100 = 0 then |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7408
diff
changeset
|
3243 |
Gear^.PortalCounter:= 0; |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7408
diff
changeset
|
3244 |
// This is not seconds, but at least it is *some* feedback |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7408
diff
changeset
|
3245 |
if (Gear^.Health = 0) or ((Gear^.Message and gmAttack) <> 0) then |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7408
diff
changeset
|
3246 |
begin |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7408
diff
changeset
|
3247 |
FollowGear := Gear; |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7408
diff
changeset
|
3248 |
Gear^.RenderTimer := false; |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7408
diff
changeset
|
3249 |
Gear^.doStep := @doStepCakeDown; |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7408
diff
changeset
|
3250 |
exit |
10875 | 3251 |
end |
3252 |
else if Gear^.Timer < 6000 then |
|
3253 |
Gear^.RenderTimer:= true; |
|
7416
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7408
diff
changeset
|
3254 |
|
9969 | 3255 |
if not cakeStep(Gear) then Gear^.doStep:= @doStepCakeFall; |
1103 | 3256 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3257 |
if Gear^.Tag = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3258 |
begin |
10874
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3259 |
cakeData:= PCakeData(Gear^.Data); |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3260 |
with cakeData^ do |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3261 |
begin |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3262 |
CakeI := (CakeI + 1) mod cakeh; |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3263 |
tdx := CakePoints[CakeI].x - Gear^.X; |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3264 |
tdy := - CakePoints[CakeI].y + Gear^.Y; |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3265 |
CakePoints[CakeI].x := Gear^.X; |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3266 |
CakePoints[CakeI].y := Gear^.Y; |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3267 |
Gear^.DirAngle := DxDy2Angle(tdx, tdy); |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3268 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3269 |
end; |
1088 | 3270 |
end; |
1089 | 3271 |
|
1103 | 3272 |
procedure doStepCakeUp(Gear: PGear); |
8795 | 3273 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3274 |
i: Longword; |
10874
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3275 |
cakeData: PCakeData; |
1103 | 3276 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3277 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3278 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3279 |
inc(Gear^.Tag); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3280 |
if Gear^.Tag < 100 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3281 |
exit; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3282 |
Gear^.Tag := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3283 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3284 |
if Gear^.Pos = 6 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3285 |
begin |
10874
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3286 |
cakeData:= PCakeData(Gear^.Data); |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3287 |
with cakeData^ do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3288 |
begin |
10874
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3289 |
for i:= 0 to Pred(cakeh) do |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3290 |
begin |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3291 |
CakePoints[i].x := Gear^.X; |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3292 |
CakePoints[i].y := Gear^.Y |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3293 |
end; |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3294 |
CakeI := 0; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3295 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3296 |
Gear^.doStep := @doStepCakeWork |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3297 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3298 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3299 |
inc(Gear^.Pos) |
1103 | 3300 |
end; |
3301 |
||
1089 | 3302 |
procedure doStepCakeFall(Gear: PGear); |
3303 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3304 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3305 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3306 |
Gear^.dY := Gear^.dY + cGravity; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3307 |
if TestCollisionYwithGear(Gear, 1) <> 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3308 |
Gear^.doStep := @doStepCakeUp |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3309 |
else |
6081
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
3310 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3311 |
Gear^.Y := Gear^.Y + Gear^.dY; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3312 |
if CheckGearDrowning(Gear) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3313 |
AfterAttack |
6081
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
3314 |
end |
1089 | 3315 |
end; |
3316 |
||
3317 |
procedure doStepCake(Gear: PGear); |
|
3318 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3319 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3320 |
|
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
|
3321 |
Gear^.CollisionMask:= lfNotCurrentMask; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3322 |
|
10038
0a5e651d494c
Fix uGearsHandlersMess.pas changes lost in merge r1c02143bfe9c.
sheepluva
parents:
10011
diff
changeset
|
3323 |
Gear^.dY:= cMaxWindSpeed * 100; |
0a5e651d494c
Fix uGearsHandlersMess.pas changes lost in merge r1c02143bfe9c.
sheepluva
parents:
10011
diff
changeset
|
3324 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3325 |
Gear^.doStep := @doStepCakeFall |
1089 | 3326 |
end; |
3327 |
||
1259 | 3328 |
//////////////////////////////////////////////////////////////////////////////// |
1284 | 3329 |
procedure doStepSeductionWork(Gear: PGear); |
5706 | 3330 |
var i: LongInt; |
7335 | 3331 |
hogs: PGearArrayS; |
1259 | 3332 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3333 |
AllInactive := false; |
5525 | 3334 |
hogs := GearsNear(Gear^.X, Gear^.Y, gtHedgehog, Gear^.Radius); |
7335 | 3335 |
if hogs.size > 0 then |
3336 |
begin |
|
3337 |
for i:= 0 to hogs.size - 1 do |
|
3338 |
with hogs.ar^[i]^ do |
|
10544 | 3339 |
if (hogs.ar^[i] <> CurrentHedgehog^.Gear) and (Hedgehog^.Effects[heFrozen] = 0) then |
7335 | 3340 |
begin |
3341 |
dX:= _50 * cGravity * (Gear^.X - X) / _25; |
|
3342 |
dY:= -_450 * cGravity; |
|
3343 |
Active:= true; |
|
3344 |
end |
|
10545 | 3345 |
else if Hedgehog^.Effects[heFrozen] > 255 then |
3346 |
Hedgehog^.Effects[heFrozen]:= 255 |
|
5525 | 3347 |
end ; |
3348 |
AfterAttack; |
|
3349 |
DeleteGear(Gear); |
|
3350 |
(* |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3351 |
Gear^.X := Gear^.X + Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3352 |
Gear^.Y := Gear^.Y + Gear^.dY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3353 |
x := hwRound(Gear^.X); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3354 |
y := hwRound(Gear^.Y); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3355 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3356 |
if ((y and LAND_HEIGHT_MASK) = 0) and ((x and LAND_WIDTH_MASK) = 0) then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3357 |
if (Land[y, x] <> 0) then |
4578 | 3358 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3359 |
Gear^.dX.isNegative := not Gear^.dX.isNegative; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3360 |
Gear^.dY.isNegative := not Gear^.dY.isNegative; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3361 |
Gear^.dX := Gear^.dX * _1_5; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3362 |
Gear^.dY := Gear^.dY * _1_5 - _0_3; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3363 |
AmmoShove(Gear, 0, 40); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3364 |
AfterAttack; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3365 |
DeleteGear(Gear) |
4578 | 3366 |
end |
3367 |
else |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3368 |
else |
4578 | 3369 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3370 |
AfterAttack; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3371 |
DeleteGear(Gear) |
5525 | 3372 |
end*) |
1286 | 3373 |
end; |
3374 |
||
3375 |
procedure doStepSeductionWear(Gear: PGear); |
|
5562 | 3376 |
var heart: PVisualGear; |
1286 | 3377 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3378 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3379 |
inc(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3380 |
if Gear^.Timer > 250 then |
5562 | 3381 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3382 |
Gear^.Timer := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3383 |
inc(Gear^.Pos); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3384 |
if Gear^.Pos = 5 then |
7053 | 3385 |
PlaySoundV(sndYoohoo, Gear^.Hedgehog^.Team^.voicepack) |
5562 | 3386 |
end; |
3387 |
||
6131 | 3388 |
if (Gear^.Pos = 14) and (RealTicks and $3 = 0) then |
5562 | 3389 |
begin |
3390 |
heart:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtStraightShot); |
|
6131 | 3391 |
if heart <> nil then |
5564
4f42009237df
For mikade's sake, use old dx/dy/frametick as default, so health crosses move the same
nemo
parents:
5563
diff
changeset
|
3392 |
with heart^ do |
4f42009237df
For mikade's sake, use old dx/dy/frametick as default, so health crosses move the same
nemo
parents:
5563
diff
changeset
|
3393 |
begin |
4f42009237df
For mikade's sake, use old dx/dy/frametick as default, so health crosses move the same
nemo
parents:
5563
diff
changeset
|
3394 |
dx:= 0.001 * (random(200)); |
4f42009237df
For mikade's sake, use old dx/dy/frametick as default, so health crosses move the same
nemo
parents:
5563
diff
changeset
|
3395 |
dy:= 0.001 * (random(200)); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3396 |
if random(2) = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3397 |
dx := -dx; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3398 |
if random(2) = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3399 |
dy := -dy; |
5564
4f42009237df
For mikade's sake, use old dx/dy/frametick as default, so health crosses move the same
nemo
parents:
5563
diff
changeset
|
3400 |
FrameTicks:= random(750) + 1000; |
5748
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
3401 |
State:= ord(sprSeduction) |
5564
4f42009237df
For mikade's sake, use old dx/dy/frametick as default, so health crosses move the same
nemo
parents:
5563
diff
changeset
|
3402 |
end; |
5562 | 3403 |
end; |
3404 |
||
3405 |
if Gear^.Pos = 15 then |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3406 |
Gear^.doStep := @doStepSeductionWork |
1259 | 3407 |
end; |
1284 | 3408 |
|
3409 |
procedure doStepSeduction(Gear: PGear); |
|
3410 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3411 |
AllInactive := false; |
5525 | 3412 |
//DeleteCI(Gear^.Hedgehog^.Gear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3413 |
Gear^.doStep := @doStepSeductionWear |
1284 | 3414 |
end; |
1298 | 3415 |
|
3416 |
//////////////////////////////////////////////////////////////////////////////// |
|
3417 |
procedure doStepWaterUp(Gear: PGear); |
|
8795 | 3418 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3419 |
i: LongWord; |
1298 | 3420 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3421 |
if (Gear^.Tag = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3422 |
or (cWaterLine = 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3423 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3424 |
DeleteGear(Gear); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3425 |
exit |
4153
6bd94e4c5d65
2 more variables to control water rise and health loss during sudden death.
henek
parents:
4135
diff
changeset
|
3426 |
end; |
6bd94e4c5d65
2 more variables to control water rise and health loss during sudden death.
henek
parents:
4135
diff
changeset
|
3427 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3428 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3429 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3430 |
inc(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3431 |
if Gear^.Timer = 17 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3432 |
Gear^.Timer := 0 |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3433 |
else |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3434 |
exit; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3435 |
|
10359 | 3436 |
if (WorldEdge = weSea) and (playWidth > cMinPlayWidth) then |
10354 | 3437 |
begin |
3438 |
inc(leftX); |
|
3439 |
dec(rightX); |
|
3440 |
dec(playWidth, 2); |
|
3441 |
for i:= 0 to LAND_HEIGHT - 1 do |
|
3442 |
begin |
|
3443 |
Land[i, leftX] := 0; |
|
3444 |
Land[i, rightX] := 0; |
|
3445 |
end; |
|
3446 |
end; |
|
3447 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3448 |
if cWaterLine > 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3449 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3450 |
dec(cWaterLine); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3451 |
for i:= 0 to LAND_WIDTH - 1 do |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3452 |
Land[cWaterLine, i] := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3453 |
SetAllToActive |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3454 |
end; |
1298 | 3455 |
|
4153
6bd94e4c5d65
2 more variables to control water rise and health loss during sudden death.
henek
parents:
4135
diff
changeset
|
3456 |
dec(Gear^.Tag); |
1298 | 3457 |
end; |
1573 | 3458 |
|
3459 |
//////////////////////////////////////////////////////////////////////////////// |
|
1590 | 3460 |
procedure doStepDrillDrilling(Gear: PGear); |
8795 | 3461 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3462 |
t: PGearArray; |
8795 | 3463 |
tempColl: Word; |
1573 | 3464 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3465 |
AllInactive := false; |
8822
fc9877ff7f1a
Don't reward digging close w/ drill rocket. Doesn't offer much benefit. Reduce final bonus slightly to avoid using drill like bazooka. Better would be AI doing this for all weps based on count. Make main drill loop a little more efficient.
nemo
parents:
8814
diff
changeset
|
3466 |
if (Gear^.Timer > 0) and (Gear^.Timer mod 10 <> 0) then |
fc9877ff7f1a
Don't reward digging close w/ drill rocket. Doesn't offer much benefit. Reduce final bonus slightly to avoid using drill like bazooka. Better would be AI doing this for all weps based on count. Make main drill loop a little more efficient.
nemo
parents:
8814
diff
changeset
|
3467 |
begin |
fc9877ff7f1a
Don't reward digging close w/ drill rocket. Doesn't offer much benefit. Reduce final bonus slightly to avoid using drill like bazooka. Better would be AI doing this for all weps based on count. Make main drill loop a little more efficient.
nemo
parents:
8814
diff
changeset
|
3468 |
dec(Gear^.Timer); |
fc9877ff7f1a
Don't reward digging close w/ drill rocket. Doesn't offer much benefit. Reduce final bonus slightly to avoid using drill like bazooka. Better would be AI doing this for all weps based on count. Make main drill loop a little more efficient.
nemo
parents:
8814
diff
changeset
|
3469 |
exit; |
fc9877ff7f1a
Don't reward digging close w/ drill rocket. Doesn't offer much benefit. Reduce final bonus slightly to avoid using drill like bazooka. Better would be AI doing this for all weps based on count. Make main drill loop a little more efficient.
nemo
parents:
8814
diff
changeset
|
3470 |
end; |
fc9877ff7f1a
Don't reward digging close w/ drill rocket. Doesn't offer much benefit. Reduce final bonus slightly to avoid using drill like bazooka. Better would be AI doing this for all weps based on count. Make main drill loop a little more efficient.
nemo
parents:
8814
diff
changeset
|
3471 |
|
fc9877ff7f1a
Don't reward digging close w/ drill rocket. Doesn't offer much benefit. Reduce final bonus slightly to avoid using drill like bazooka. Better would be AI doing this for all weps based on count. Make main drill loop a little more efficient.
nemo
parents:
8814
diff
changeset
|
3472 |
DrawTunnel(Gear^.X, Gear^.Y, Gear^.dX, Gear^.dY, 2, 6); |
fc9877ff7f1a
Don't reward digging close w/ drill rocket. Doesn't offer much benefit. Reduce final bonus slightly to avoid using drill like bazooka. Better would be AI doing this for all weps based on count. Make main drill loop a little more efficient.
nemo
parents:
8814
diff
changeset
|
3473 |
Gear^.X := Gear^.X + Gear^.dX; |
fc9877ff7f1a
Don't reward digging close w/ drill rocket. Doesn't offer much benefit. Reduce final bonus slightly to avoid using drill like bazooka. Better would be AI doing this for all weps based on count. Make main drill loop a little more efficient.
nemo
parents:
8814
diff
changeset
|
3474 |
Gear^.Y := Gear^.Y + Gear^.dY; |
fc9877ff7f1a
Don't reward digging close w/ drill rocket. Doesn't offer much benefit. Reduce final bonus slightly to avoid using drill like bazooka. Better would be AI doing this for all weps based on count. Make main drill loop a little more efficient.
nemo
parents:
8814
diff
changeset
|
3475 |
if (Gear^.Timer mod 30) = 0 then |
fc9877ff7f1a
Don't reward digging close w/ drill rocket. Doesn't offer much benefit. Reduce final bonus slightly to avoid using drill like bazooka. Better would be AI doing this for all weps based on count. Make main drill loop a little more efficient.
nemo
parents:
8814
diff
changeset
|
3476 |
AddVisualGear(hwRound(Gear^.X + _20 * Gear^.dX), hwRound(Gear^.Y + _20 * Gear^.dY), vgtDust); |
fc9877ff7f1a
Don't reward digging close w/ drill rocket. Doesn't offer much benefit. Reduce final bonus slightly to avoid using drill like bazooka. Better would be AI doing this for all weps based on count. Make main drill loop a little more efficient.
nemo
parents:
8814
diff
changeset
|
3477 |
if (CheckGearDrowning(Gear)) then |
fc9877ff7f1a
Don't reward digging close w/ drill rocket. Doesn't offer much benefit. Reduce final bonus slightly to avoid using drill like bazooka. Better would be AI doing this for all weps based on count. Make main drill loop a little more efficient.
nemo
parents:
8814
diff
changeset
|
3478 |
begin |
fc9877ff7f1a
Don't reward digging close w/ drill rocket. Doesn't offer much benefit. Reduce final bonus slightly to avoid using drill like bazooka. Better would be AI doing this for all weps based on count. Make main drill loop a little more efficient.
nemo
parents:
8814
diff
changeset
|
3479 |
StopSoundChan(Gear^.SoundChannel); |
fc9877ff7f1a
Don't reward digging close w/ drill rocket. Doesn't offer much benefit. Reduce final bonus slightly to avoid using drill like bazooka. Better would be AI doing this for all weps based on count. Make main drill loop a little more efficient.
nemo
parents:
8814
diff
changeset
|
3480 |
exit |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3481 |
end; |
8822
fc9877ff7f1a
Don't reward digging close w/ drill rocket. Doesn't offer much benefit. Reduce final bonus slightly to avoid using drill like bazooka. Better would be AI doing this for all weps based on count. Make main drill loop a little more efficient.
nemo
parents:
8814
diff
changeset
|
3482 |
|
8564 | 3483 |
tempColl:= Gear^.CollisionMask; |
3484 |
Gear^.CollisionMask:= $007F; |
|
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
3485 |
if (TestCollisionYWithGear(Gear, hwSign(Gear^.dY)) <> 0) or (TestCollisionXWithGear(Gear, hwSign(Gear^.dX)) <> 0) or (GameTicks > Gear^.FlightTime) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3486 |
t := CheckGearsCollision(Gear) |
6532
76d63e00002f
Little tweak to reduce noob fail. Delay drill rocket explosion by 250ms after spawn in Attack. Unless you drop it straight down w/ no power, it should not explode immediately in your face.
nemo
parents:
6507
diff
changeset
|
3487 |
else t := nil; |
8564 | 3488 |
Gear^.CollisionMask:= tempColl; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3489 |
//fixes drill not exploding when touching HH bug |
8795 | 3490 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3491 |
if (Gear^.Timer = 0) or ((t <> nil) and (t^.Count <> 0)) |
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
3492 |
or ( ((Gear^.State and gsttmpFlag) = 0) and (TestCollisionYWithGear(Gear, hwSign(Gear^.dY)) = 0) and (TestCollisionXWithGear(Gear, hwSign(Gear^.dX)) = 0)) |
3509
d72c2219595d
Make land types flagged (to allow stacking future attributes such as indestructible ice, but also for a damaged flag)
nemo
parents:
3505
diff
changeset
|
3493 |
// CheckLandValue returns true if the type isn't matched |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3494 |
or (not CheckLandValue(hwRound(Gear^.X), hwRound(Gear^.Y), lfIndestructible)) then |
4758
73aef6a577ba
drill strike falling instead of exploding when exiting ground
Henek
parents:
4708
diff
changeset
|
3495 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3496 |
//out of time or exited ground |
7053 | 3497 |
StopSoundChan(Gear^.SoundChannel); |
4293
d79ffcdd77df
makes drill attack drills weaker and not affected by wind
Henek
parents:
4282
diff
changeset
|
3498 |
if (Gear^.State and gsttmpFlag) <> 0 then |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
3499 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, Gear^.Hedgehog, EXPLAutoSound) |
4293
d79ffcdd77df
makes drill attack drills weaker and not affected by wind
Henek
parents:
4282
diff
changeset
|
3500 |
else |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
3501 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, Gear^.Hedgehog, EXPLAutoSound); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3502 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3503 |
exit |
4758
73aef6a577ba
drill strike falling instead of exploding when exiting ground
Henek
parents:
4708
diff
changeset
|
3504 |
end |
8795 | 3505 |
|
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
3506 |
else if (TestCollisionYWithGear(Gear, hwSign(Gear^.dY)) = 0) and (TestCollisionXWithGear(Gear, hwSign(Gear^.dX)) = 0) then |
4758
73aef6a577ba
drill strike falling instead of exploding when exiting ground
Henek
parents:
4708
diff
changeset
|
3507 |
begin |
7053 | 3508 |
StopSoundChan(Gear^.SoundChannel); |
4867
e604ee83e34f
let players set timer of drill strike. yes. drill strike :3 the timer starts to tick on first impact
sheepluva
parents:
4837
diff
changeset
|
3509 |
Gear^.Tag := 1; |
10895
bce67defd804
Make bouncing a bit less wtf for various gears tested (hog, 'zooka, saucer hog, drill strike). Less hacky is another matter.
nemo
parents:
10887
diff
changeset
|
3510 |
Gear^.AdvBounce:= 50; |
4758
73aef6a577ba
drill strike falling instead of exploding when exiting ground
Henek
parents:
4708
diff
changeset
|
3511 |
Gear^.doStep := @doStepDrill |
73aef6a577ba
drill strike falling instead of exploding when exiting ground
Henek
parents:
4708
diff
changeset
|
3512 |
end; |
1590 | 3513 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3514 |
dec(Gear^.Timer); |
1573 | 3515 |
end; |
3516 |
||
3517 |
procedure doStepDrill(Gear: PGear); |
|
8795 | 3518 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3519 |
t: PGearArray; |
10038
0a5e651d494c
Fix uGearsHandlersMess.pas changes lost in merge r1c02143bfe9c.
sheepluva
parents:
10011
diff
changeset
|
3520 |
oldX, oldY, oldDx, oldDy: hwFloat; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3521 |
t2: hwFloat; |
1573 | 3522 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3523 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3524 |
|
4293
d79ffcdd77df
makes drill attack drills weaker and not affected by wind
Henek
parents:
4282
diff
changeset
|
3525 |
if (Gear^.State and gsttmpFlag) = 0 then |
d79ffcdd77df
makes drill attack drills weaker and not affected by wind
Henek
parents:
4282
diff
changeset
|
3526 |
Gear^.dX := Gear^.dX + cWindSpeed; |
d79ffcdd77df
makes drill attack drills weaker and not affected by wind
Henek
parents:
4282
diff
changeset
|
3527 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3528 |
oldDx := Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3529 |
oldDy := Gear^.dY; |
10038
0a5e651d494c
Fix uGearsHandlersMess.pas changes lost in merge r1c02143bfe9c.
sheepluva
parents:
10011
diff
changeset
|
3530 |
oldX := Gear^.X; |
0a5e651d494c
Fix uGearsHandlersMess.pas changes lost in merge r1c02143bfe9c.
sheepluva
parents:
10011
diff
changeset
|
3531 |
oldY := Gear^.Y; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3532 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3533 |
doStepFallingGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3534 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3535 |
if (GameTicks and $3F) = 0 then |
10352 | 3536 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3537 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3538 |
if ((Gear^.State and gstCollision) <> 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3539 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3540 |
//hit |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3541 |
Gear^.dX := oldDx; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3542 |
Gear^.dY := oldDy; |
10038
0a5e651d494c
Fix uGearsHandlersMess.pas changes lost in merge r1c02143bfe9c.
sheepluva
parents:
10011
diff
changeset
|
3543 |
Gear^.X := oldX; |
0a5e651d494c
Fix uGearsHandlersMess.pas changes lost in merge r1c02143bfe9c.
sheepluva
parents:
10011
diff
changeset
|
3544 |
Gear^.Y := oldY; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3545 |
|
8795 | 3546 |
if GameTicks > Gear^.FlightTime then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3547 |
t := CheckGearsCollision(Gear) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3548 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3549 |
t := nil; |
6532
76d63e00002f
Little tweak to reduce noob fail. Delay drill rocket explosion by 250ms after spawn in Attack. Unless you drop it straight down w/ no power, it should not explode immediately in your face.
nemo
parents:
6507
diff
changeset
|
3550 |
if (t = nil) or (t^.Count = 0) then |
76d63e00002f
Little tweak to reduce noob fail. Delay drill rocket explosion by 250ms after spawn in Attack. Unless you drop it straight down w/ no power, it should not explode immediately in your face.
nemo
parents:
6507
diff
changeset
|
3551 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3552 |
//hit the ground not the HH |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3553 |
t2 := _0_5 / Distance(Gear^.dX, Gear^.dY); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3554 |
Gear^.dX := Gear^.dX * t2; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3555 |
Gear^.dY := Gear^.dY * t2; |
6532
76d63e00002f
Little tweak to reduce noob fail. Delay drill rocket explosion by 250ms after spawn in Attack. Unless you drop it straight down w/ no power, it should not explode immediately in your face.
nemo
parents:
6507
diff
changeset
|
3556 |
end |
8795 | 3557 |
|
6532
76d63e00002f
Little tweak to reduce noob fail. Delay drill rocket explosion by 250ms after spawn in Attack. Unless you drop it straight down w/ no power, it should not explode immediately in your face.
nemo
parents:
6507
diff
changeset
|
3558 |
else if (t <> nil) then |
76d63e00002f
Little tweak to reduce noob fail. Delay drill rocket explosion by 250ms after spawn in Attack. Unless you drop it straight down w/ no power, it should not explode immediately in your face.
nemo
parents:
6507
diff
changeset
|
3559 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3560 |
//explode right on contact with HH |
4293
d79ffcdd77df
makes drill attack drills weaker and not affected by wind
Henek
parents:
4282
diff
changeset
|
3561 |
if (Gear^.State and gsttmpFlag) <> 0 then |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
3562 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, Gear^.Hedgehog, EXPLAutoSound) |
4293
d79ffcdd77df
makes drill attack drills weaker and not affected by wind
Henek
parents:
4282
diff
changeset
|
3563 |
else |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
3564 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, Gear^.Hedgehog, EXPLAutoSound); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3565 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3566 |
exit; |
6532
76d63e00002f
Little tweak to reduce noob fail. Delay drill rocket explosion by 250ms after spawn in Attack. Unless you drop it straight down w/ no power, it should not explode immediately in your face.
nemo
parents:
6507
diff
changeset
|
3567 |
end; |
2376 | 3568 |
|
10038
0a5e651d494c
Fix uGearsHandlersMess.pas changes lost in merge r1c02143bfe9c.
sheepluva
parents:
10011
diff
changeset
|
3569 |
Gear^.X:= Gear^.X+Gear^.dX*4; |
0a5e651d494c
Fix uGearsHandlersMess.pas changes lost in merge r1c02143bfe9c.
sheepluva
parents:
10011
diff
changeset
|
3570 |
Gear^.Y:= Gear^.Y+Gear^.dY*4; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3571 |
Gear^.SoundChannel := LoopSound(sndDrillRocket); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3572 |
Gear^.doStep := @doStepDrillDrilling; |
8795 | 3573 |
|
4867
e604ee83e34f
let players set timer of drill strike. yes. drill strike :3 the timer starts to tick on first impact
sheepluva
parents:
4837
diff
changeset
|
3574 |
if (Gear^.State and gsttmpFlag) <> 0 then |
e604ee83e34f
let players set timer of drill strike. yes. drill strike :3 the timer starts to tick on first impact
sheepluva
parents:
4837
diff
changeset
|
3575 |
gear^.RenderTimer:= true; |
6761 | 3576 |
if Gear^.Timer > 0 then dec(Gear^.Timer) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3577 |
end |
6761 | 3578 |
else if ((Gear^.State and gsttmpFlag) <> 0) and (Gear^.Tag <> 0) then |
3579 |
begin |
|
8795 | 3580 |
if Gear^.Timer > 0 then |
7325 | 3581 |
dec(Gear^.Timer) |
3582 |
else |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3583 |
begin |
6761 | 3584 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, Gear^.Hedgehog, EXPLAutoSound); |
3585 |
DeleteGear(Gear); |
|
3586 |
end |
|
3587 |
end; |
|
1590 | 3588 |
end; |
1601 | 3589 |
|
1633 | 3590 |
//////////////////////////////////////////////////////////////////////////////// |
1601 | 3591 |
procedure doStepBallgunWork(Gear: PGear); |
8795 | 3592 |
var |
7296 | 3593 |
HHGear, ball: PGear; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3594 |
rx, ry: hwFloat; |
3143 | 3595 |
gX, gY: LongInt; |
1601 | 3596 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3597 |
AllInactive := false; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3598 |
dec(Gear^.Timer); |
4365 | 3599 |
HHGear := Gear^.Hedgehog^.Gear; |
10831
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
3600 |
if HHGear = nil then |
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
3601 |
begin |
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
3602 |
DeleteGear(gear); |
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
3603 |
exit |
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
3604 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3605 |
HedgehogChAngle(HHGear); |
3484 | 3606 |
gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle); |
3607 |
gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle); |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3608 |
if (Gear^.Timer mod 100) = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3609 |
begin |
7001 | 3610 |
rx := rndSign(getRandomf * _0_1); |
3611 |
ry := rndSign(getRandomf * _0_1); |
|
2376 | 3612 |
|
7296 | 3613 |
ball:= AddGear(gx, gy, gtBall, 0, SignAs(AngleSin(HHGear^.Angle) * _0_8, HHGear^.dX) + rx, AngleCos(HHGear^.Angle) * ( - _0_8) + ry, 0); |
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
|
3614 |
ball^.CollisionMask:= lfNotCurrentMask; |
2376 | 3615 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3616 |
PlaySound(sndGun); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3617 |
end; |
1601 | 3618 |
|
7195
9e6e8e5a4c2e
Check for gstHHDriven instead of damage check, so ballgun stops when turn ends in multiattack mode
unc0rr
parents:
7170
diff
changeset
|
3619 |
if (Gear^.Timer = 0) or ((HHGear^.State and gstHHDriven) = 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3620 |
begin |
10831
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
3621 |
HHGear^.State := HHGear^.State and (not gstNotKickable); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3622 |
DeleteGear(Gear); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3623 |
AfterAttack |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3624 |
end |
1601 | 3625 |
end; |
3626 |
||
3627 |
procedure doStepBallgun(Gear: PGear); |
|
8795 | 3628 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3629 |
HHGear: PGear; |
1601 | 3630 |
begin |
4365 | 3631 |
HHGear := Gear^.Hedgehog^.Gear; |
6450 | 3632 |
HHGear^.Message := HHGear^.Message and (not (gmUp or gmDown)); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3633 |
HHGear^.State := HHGear^.State or gstNotKickable; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3634 |
Gear^.doStep := @doStepBallgunWork |
1633 | 3635 |
end; |
1689 | 3636 |
|
1696 | 3637 |
//////////////////////////////////////////////////////////////////////////////// |
1689 | 3638 |
procedure doStepRCPlaneWork(Gear: PGear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3639 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3640 |
const cAngleSpeed = 3; |
8795 | 3641 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3642 |
HHGear: PGear; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3643 |
i: LongInt; |
10110
a7aed2eea727
simplify rc-plane's angle-adjustment-after-wrap code
sheepluva
parents:
10108
diff
changeset
|
3644 |
dX, dY : hwFloat; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3645 |
fChanged: boolean; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3646 |
trueAngle: Longword; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3647 |
t: PGear; |
1689 | 3648 |
begin |
10110
a7aed2eea727
simplify rc-plane's angle-adjustment-after-wrap code
sheepluva
parents:
10108
diff
changeset
|
3649 |
if WorldWrap(Gear) then |
a7aed2eea727
simplify rc-plane's angle-adjustment-after-wrap code
sheepluva
parents:
10108
diff
changeset
|
3650 |
begin |
10112
275ad81e4718
fix indentation of previous commit and simplify rc-plane's angle-fix after portal code
sheepluva
parents:
10110
diff
changeset
|
3651 |
if (WorldEdge = weBounce) then // mirror |
275ad81e4718
fix indentation of previous commit and simplify rc-plane's angle-fix after portal code
sheepluva
parents:
10110
diff
changeset
|
3652 |
Gear^.Angle:= 4096 - Gear^.Angle |
275ad81e4718
fix indentation of previous commit and simplify rc-plane's angle-fix after portal code
sheepluva
parents:
10110
diff
changeset
|
3653 |
else if (WorldEdge = weSea) then // rotate 90 degree |
275ad81e4718
fix indentation of previous commit and simplify rc-plane's angle-fix after portal code
sheepluva
parents:
10110
diff
changeset
|
3654 |
begin |
275ad81e4718
fix indentation of previous commit and simplify rc-plane's angle-fix after portal code
sheepluva
parents:
10110
diff
changeset
|
3655 |
// sea-wrapped gears move upwards, so let's mirror angle if needed |
275ad81e4718
fix indentation of previous commit and simplify rc-plane's angle-fix after portal code
sheepluva
parents:
10110
diff
changeset
|
3656 |
if Gear^.Angle < 2048 then |
275ad81e4718
fix indentation of previous commit and simplify rc-plane's angle-fix after portal code
sheepluva
parents:
10110
diff
changeset
|
3657 |
Gear^.Angle:= 4096 - Gear^.Angle; |
275ad81e4718
fix indentation of previous commit and simplify rc-plane's angle-fix after portal code
sheepluva
parents:
10110
diff
changeset
|
3658 |
Gear^.Angle:= (Gear^.Angle + 1024) mod 4096; |
275ad81e4718
fix indentation of previous commit and simplify rc-plane's angle-fix after portal code
sheepluva
parents:
10110
diff
changeset
|
3659 |
end; |
9477 | 3660 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3661 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3662 |
|
4365 | 3663 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3664 |
FollowGear := Gear; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3665 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3666 |
if Gear^.Timer > 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3667 |
dec(Gear^.Timer); |
4886 | 3668 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3669 |
fChanged := false; |
9559 | 3670 |
if (HHGear = nil) or ((HHGear^.State and gstHHDriven) = 0) or (Gear^.Timer = 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3671 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3672 |
fChanged := true; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3673 |
if Gear^.Angle > 2048 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3674 |
dec(Gear^.Angle) |
6785 | 3675 |
else if Gear^.Angle < 2048 then |
3676 |
inc(Gear^.Angle) |
|
3677 |
else fChanged := false |
|
10831
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
3678 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3679 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3680 |
begin |
3894 | 3681 |
if ((Gear^.Message and gmLeft) <> 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3682 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3683 |
fChanged := true; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3684 |
Gear^.Angle := (Gear^.Angle + (4096 - cAngleSpeed)) mod 4096 |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3685 |
end; |
1689 | 3686 |
|
3894 | 3687 |
if ((Gear^.Message and gmRight) <> 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3688 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3689 |
fChanged := true; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3690 |
Gear^.Angle := (Gear^.Angle + cAngleSpeed) mod 4096 |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3691 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3692 |
end; |
1689 | 3693 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3694 |
if fChanged then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3695 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3696 |
Gear^.dX.isNegative := (Gear^.Angle > 2048); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3697 |
if Gear^.dX.isNegative then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3698 |
trueAngle := 4096 - Gear^.Angle |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3699 |
else |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3700 |
trueAngle := Gear^.Angle; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3701 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3702 |
Gear^.dX := SignAs(AngleSin(trueAngle), Gear^.dX) * _0_25; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3703 |
Gear^.dY := AngleCos(trueAngle) * -_0_25; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3704 |
end; |
1689 | 3705 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3706 |
Gear^.X := Gear^.X + Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3707 |
Gear^.Y := Gear^.Y + Gear^.dY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3708 |
|
4808 | 3709 |
if (GameTicks and $FF) = 0 then |
3710 |
if Gear^.Timer < 3500 then |
|
3711 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtEvilTrace) |
|
3712 |
else |
|
3713 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace); |
|
3714 |
||
9559 | 3715 |
if (HHGear <> nil) and ((HHGear^.Message and gmAttack) <> 0) and (Gear^.Health <> 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3716 |
begin |
6450 | 3717 |
HHGear^.Message := HHGear^.Message and (not gmAttack); |
4808 | 3718 |
AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, Gear^.dX * _0_5, Gear^.dY * |
3719 |
_0_5, 0); |
|
3720 |
dec(Gear^.Health) |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3721 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3722 |
|
9559 | 3723 |
if (HHGear <> nil) and ((HHGear^.Message and gmLJump) <> 0) and ((Gear^.State and gsttmpFlag) = 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3724 |
begin |
4808 | 3725 |
Gear^.State := Gear^.State or gsttmpFlag; |
3726 |
PauseMusic; |
|
3727 |
playSound(sndRideOfTheValkyries); |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3728 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3729 |
|
4808 | 3730 |
// pickup bonuses |
3731 |
t := CheckGearNear(Gear, gtCase, 36, 36); |
|
10234 | 3732 |
if (t <> nil) and (HHGear <> nil) then |
4808 | 3733 |
PickUp(HHGear, t); |
3734 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3735 |
CheckCollision(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3736 |
|
4808 | 3737 |
if ((Gear^.State and gstCollision) <> 0) or CheckGearDrowning(Gear) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3738 |
begin |
7053 | 3739 |
StopSoundChan(Gear^.SoundChannel); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3740 |
StopSound(sndRideOfTheValkyries); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3741 |
ResumeMusic; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3742 |
|
4808 | 3743 |
if ((Gear^.State and gstCollision) <> 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3744 |
begin |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
3745 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 25, Gear^.Hedgehog, EXPLAutoSound); |
5228 | 3746 |
for i:= 0 to 15 do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3747 |
begin |
7001 | 3748 |
dX := AngleCos(i * 64) * _0_5 * (GetRandomf + _1); |
3749 |
dY := AngleSin(i * 64) * _0_5 * (GetRandomf + _1); |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3750 |
AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, dX, dY, 0); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3751 |
AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtFlame, 0, dX, -dY, 0); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3752 |
end; |
10831
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
3753 |
if HHGear <> nil then HHGear^.State := HHGear^.State and (not gstNotKickable); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3754 |
DeleteGear(Gear) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3755 |
end; |
1713 | 3756 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3757 |
AfterAttack; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3758 |
CurAmmoGear := nil; |
5016
9347d82a26cc
added game mode Tag Team, mostly untested, please test :)
Henek
parents:
5013
diff
changeset
|
3759 |
if (GameFlags and gfInfAttack) = 0 then |
9347d82a26cc
added game mode Tag Team, mostly untested, please test :)
Henek
parents:
5013
diff
changeset
|
3760 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3761 |
if TagTurnTimeLeft = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3762 |
TagTurnTimeLeft:= TurnTimeLeft; |
8795 | 3763 |
|
5016
9347d82a26cc
added game mode Tag Team, mostly untested, please test :)
Henek
parents:
5013
diff
changeset
|
3764 |
TurnTimeLeft:= 14 * 125; |
9347d82a26cc
added game mode Tag Team, mostly untested, please test :)
Henek
parents:
5013
diff
changeset
|
3765 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3766 |
|
10510 | 3767 |
if HHGear <> nil then |
10234 | 3768 |
HHGear^.Message := 0; |
6450 | 3769 |
ParseCommand('/taunt ' + #1, true) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3770 |
end |
1689 | 3771 |
end; |
3772 |
||
3773 |
procedure doStepRCPlane(Gear: PGear); |
|
8795 | 3774 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3775 |
HHGear: PGear; |
1689 | 3776 |
begin |
4365 | 3777 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3778 |
HHGear^.Message := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3779 |
HHGear^.State := HHGear^.State or gstNotKickable; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3780 |
Gear^.Angle := HHGear^.Angle; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3781 |
Gear^.Tag := hwSign(HHGear^.dX); |
8795 | 3782 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3783 |
if HHGear^.dX.isNegative then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3784 |
Gear^.Angle := 4096 - Gear^.Angle; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3785 |
Gear^.doStep := @doStepRCPlaneWork |
1712 | 3786 |
end; |
2177
c045698e044f
Initial attempt at jetpack. Pluses, more like lunar lander (takes fall damage). Minuses, can't seem to cancel it or use alt weapon
nemo
parents:
2143
diff
changeset
|
3787 |
|
5313
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
3788 |
//////////////////////////////////////////////////////////////////////////////// |
2177
c045698e044f
Initial attempt at jetpack. Pluses, more like lunar lander (takes fall damage). Minuses, can't seem to cancel it or use alt weapon
nemo
parents:
2143
diff
changeset
|
3789 |
procedure doStepJetpackWork(Gear: PGear); |
8795 | 3790 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3791 |
HHGear: PGear; |
3909
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3792 |
fuel, i: LongInt; |
2177
c045698e044f
Initial attempt at jetpack. Pluses, more like lunar lander (takes fall damage). Minuses, can't seem to cancel it or use alt weapon
nemo
parents:
2143
diff
changeset
|
3793 |
move: hwFloat; |
3909
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3794 |
isUnderwater: Boolean; |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3795 |
bubble: PVisualGear; |
2177
c045698e044f
Initial attempt at jetpack. Pluses, more like lunar lander (takes fall damage). Minuses, can't seem to cancel it or use alt weapon
nemo
parents:
2143
diff
changeset
|
3796 |
begin |
10354 | 3797 |
isUnderwater:= CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y) + Gear^.Radius); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3798 |
if Gear^.Pos > 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3799 |
dec(Gear^.Pos); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3800 |
AllInactive := false; |
4365 | 3801 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3802 |
//dec(Gear^.Timer); |
3907
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3803 |
move := _0_2; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3804 |
fuel := 50; |
3894 | 3805 |
(*if (HHGear^.Message and gmPrecise) <> 0 then |
2177
c045698e044f
Initial attempt at jetpack. Pluses, more like lunar lander (takes fall damage). Minuses, can't seem to cancel it or use alt weapon
nemo
parents:
2143
diff
changeset
|
3806 |
begin |
c045698e044f
Initial attempt at jetpack. Pluses, more like lunar lander (takes fall damage). Minuses, can't seem to cancel it or use alt weapon
nemo
parents:
2143
diff
changeset
|
3807 |
move:= _0_02; |
c045698e044f
Initial attempt at jetpack. Pluses, more like lunar lander (takes fall damage). Minuses, can't seem to cancel it or use alt weapon
nemo
parents:
2143
diff
changeset
|
3808 |
fuel:= 5; |
2182
ed7e7eb3f9ed
Ugly graphic for jetpack - jetpack should be essentially functional.
nemo
parents:
2181
diff
changeset
|
3809 |
end;*) |
8987
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8973
diff
changeset
|
3810 |
if HHGear^.Message and gmPrecise <> 0 then |
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8973
diff
changeset
|
3811 |
HedgehogChAngle(HHGear) |
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8973
diff
changeset
|
3812 |
else if Gear^.Health > 0 then |
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8973
diff
changeset
|
3813 |
begin |
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8973
diff
changeset
|
3814 |
if HHGear^.Message and gmUp <> 0 then |
3907
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3815 |
begin |
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3816 |
if (not HHGear^.dY.isNegative) or (HHGear^.Y > -_256) then |
3909
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3817 |
begin |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3818 |
if isUnderwater then |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3819 |
begin |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3820 |
HHGear^.dY := HHGear^.dY - (move * _0_7); |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3821 |
for i:= random(10)+10 downto 0 do |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3822 |
begin |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3823 |
bubble := AddVisualGear(hwRound(HHGear^.X) - 8 + random(16), hwRound(HHGear^.Y) + 16 + random(8), vgtBubble); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3824 |
if bubble <> nil then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3825 |
bubble^.dY:= random(20)/10+0.1; |
3909
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3826 |
end |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3827 |
end |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3828 |
else HHGear^.dY := HHGear^.dY - move; |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3829 |
end; |
3907
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3830 |
dec(Gear^.Health, fuel); |
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3831 |
Gear^.MsgParam := Gear^.MsgParam or gmUp; |
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3832 |
Gear^.Timer := GameTicks |
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3833 |
end; |
3909
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3834 |
move.isNegative := (HHGear^.Message and gmLeft) <> 0; |
3907
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3835 |
if (HHGear^.Message and (gmLeft or gmRight)) <> 0 then |
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3836 |
begin |
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3837 |
HHGear^.dX := HHGear^.dX + (move * _0_1); |
3909
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3838 |
if isUnderwater then |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3839 |
begin |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3840 |
for i:= random(5)+5 downto 0 do |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3841 |
begin |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3842 |
bubble := AddVisualGear(hwRound(HHGear^.X)+random(8), hwRound(HHGear^.Y) - 8 + random(16), vgtBubble); |
6131 | 3843 |
if bubble <> nil then |
3909
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3844 |
begin |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3845 |
bubble^.dX:= (random(10)/10 + 0.02) * -1; |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3846 |
if (move.isNegative) then |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3847 |
begin |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3848 |
bubble^.X := bubble^.X + 28; |
4187 | 3849 |
bubble^.dX:= bubble^.dX * (-1) |
3909
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3850 |
end |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3851 |
else bubble^.X := bubble^.X - 28; |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3852 |
end; |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3853 |
end |
4ba25a3d15af
remove windspeed from bubbles, remove initial dY from bubbles, apply dY/dX to bubbles, correct offsets on flying saucer flame graphics, add bubbles when flying saucer thrusts underwater, make flying saucer sink more slowly underwater
nemo
parents:
3907
diff
changeset
|
3854 |
end; |
3907
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3855 |
dec(Gear^.Health, fuel div 5); |
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3856 |
Gear^.MsgParam := Gear^.MsgParam or (HHGear^.Message and (gmLeft or gmRight)); |
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3857 |
Gear^.Timer := GameTicks |
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3858 |
end |
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3859 |
end; |
2182
ed7e7eb3f9ed
Ugly graphic for jetpack - jetpack should be essentially functional.
nemo
parents:
2181
diff
changeset
|
3860 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3861 |
// erases them all at once :-/ |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3862 |
if (Gear^.Timer <> 0) and (GameTicks - Gear^.Timer > 250) then |
4262
154253f77b03
ok... combine a tick check with texture percentage check. this should be a lot less frequent
nemo
parents:
4260
diff
changeset
|
3863 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3864 |
Gear^.Timer := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3865 |
Gear^.MsgParam := 0 |
4262
154253f77b03
ok... combine a tick check with texture percentage check. this should be a lot less frequent
nemo
parents:
4260
diff
changeset
|
3866 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3867 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3868 |
if Gear^.Health < 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3869 |
Gear^.Health := 0; |
8795 | 3870 |
|
4260
472fd2fc1f31
Also switch saucer from updating every N ticks to updating as-needed.
nemo
parents:
4258
diff
changeset
|
3871 |
i:= Gear^.Health div 20; |
8795 | 3872 |
|
4262
154253f77b03
ok... combine a tick check with texture percentage check. this should be a lot less frequent
nemo
parents:
4260
diff
changeset
|
3873 |
if (i <> Gear^.Damage) and ((GameTicks and $3F) = 0) then |
3907
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3874 |
begin |
4260
472fd2fc1f31
Also switch saucer from updating every N ticks to updating as-needed.
nemo
parents:
4258
diff
changeset
|
3875 |
Gear^.Damage:= i; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3876 |
//AddCaption('Fuel: '+inttostr(round(Gear^.Health/20))+'%', cWhiteColor, capgrpAmmostate); |
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:
10597
diff
changeset
|
3877 |
FreeAndNilTexture(Gear^.Tex); |
10123 | 3878 |
Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ansistring(': ' + inttostr(i) + '%'), cWhiteColor, fntSmall) |
3907
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3879 |
end; |
2182
ed7e7eb3f9ed
Ugly graphic for jetpack - jetpack should be essentially functional.
nemo
parents:
2181
diff
changeset
|
3880 |
|
8987
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8973
diff
changeset
|
3881 |
if (HHGear^.Message and (gmAttack or gmUp or gmLeft or gmRight) <> 0) and |
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8973
diff
changeset
|
3882 |
(HHGear^.Message and gmPrecise = 0) then |
6450 | 3883 |
Gear^.State := Gear^.State and (not gsttmpFlag); |
8795 | 3884 |
|
8987
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8973
diff
changeset
|
3885 |
if HHGear^.Message and gmPrecise = 0 then |
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8973
diff
changeset
|
3886 |
HHGear^.Message := HHGear^.Message and (not (gmUp or gmLeft or gmRight)); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3887 |
HHGear^.State := HHGear^.State or gstMoving; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3888 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3889 |
Gear^.X := HHGear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3890 |
Gear^.Y := HHGear^.Y; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3891 |
|
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3892 |
if not isUnderWater and hasBorder and ((HHGear^.X < _0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3893 |
or (hwRound(HHGear^.X) > LAND_WIDTH)) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3894 |
HHGear^.dY.isNegative:= false; |
8795 | 3895 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3896 |
if ((Gear^.State and gsttmpFlag) = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3897 |
or (HHGear^.dY < _0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3898 |
doStepHedgehogMoving(HHGear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3899 |
|
3907
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3900 |
if // (Gear^.Health = 0) |
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3901 |
(HHGear^.Damage <> 0) |
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3902 |
//or CheckGearDrowning(HHGear) |
10354 | 3903 |
// drown if too deep under water |
8990 | 3904 |
or (cWaterLine + cVisibleWater * 4 < hwRound(HHGear^.Y)) |
3907
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3905 |
or (TurnTimeLeft = 0) |
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3906 |
// allow brief ground touches - to be fair on this, might need another counter |
6081
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
3907 |
or (((GameTicks and $1FF) = 0) and (not HHGear^.dY.isNegative) and (TestCollisionYwithGear(HHGear, 1) <> 0)) |
3907
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3908 |
or ((Gear^.Message and gmAttack) <> 0) then |
4233
b4ad20bfe310
make weapons on rope/parachute/UFO inherit momentum of the hog. needs testing of course
nemo
parents:
4224
diff
changeset
|
3909 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3910 |
with HHGear^ do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3911 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3912 |
Message := 0; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3913 |
Active := true; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3914 |
State := State or gstMoving |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3915 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3916 |
DeleteGear(Gear); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3917 |
isCursorVisible := false; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3918 |
ApplyAmmoChanges(HHGear^.Hedgehog^); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3919 |
// if Gear^.Tex <> nil then FreeTexture(Gear^.Tex); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3920 |
|
2619 | 3921 |
// Gear^.Tex:= RenderStringTex(trmsg[sidFuel] + ': ' + inttostr(round(Gear^.Health / 20)) + '%', cWhiteColor, fntSmall) |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3922 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3923 |
//AddCaption(trmsg[sidFuel]+': '+inttostr(round(Gear^.Health/20))+'%', cWhiteColor, capgrpAmmostate); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3924 |
end |
2177
c045698e044f
Initial attempt at jetpack. Pluses, more like lunar lander (takes fall damage). Minuses, can't seem to cancel it or use alt weapon
nemo
parents:
2143
diff
changeset
|
3925 |
end; |
c045698e044f
Initial attempt at jetpack. Pluses, more like lunar lander (takes fall damage). Minuses, can't seem to cancel it or use alt weapon
nemo
parents:
2143
diff
changeset
|
3926 |
|
c045698e044f
Initial attempt at jetpack. Pluses, more like lunar lander (takes fall damage). Minuses, can't seem to cancel it or use alt weapon
nemo
parents:
2143
diff
changeset
|
3927 |
procedure doStepJetpack(Gear: PGear); |
8795 | 3928 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3929 |
HHGear: PGear; |
2177
c045698e044f
Initial attempt at jetpack. Pluses, more like lunar lander (takes fall damage). Minuses, can't seem to cancel it or use alt weapon
nemo
parents:
2143
diff
changeset
|
3930 |
begin |
3907
5b516f0d9957
Allow UFO to go underwater. Keep UFO active if it runs out of fuel in the air/water, just disable controls.
nemo
parents:
3894
diff
changeset
|
3931 |
Gear^.Pos:= 0; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3932 |
Gear^.doStep := @doStepJetpackWork; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3933 |
|
4365 | 3934 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3935 |
FollowGear := HHGear; |
3965
09eea558ba83
Call OnUsedAmmo *after* doing the normal CurAmmoType stuff so CurAmmoType actually points to the right bloody weapon
nemo
parents:
3963
diff
changeset
|
3936 |
AfterAttack; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3937 |
with HHGear^ do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3938 |
begin |
6450 | 3939 |
State := State and (not gstAttacking); |
3940 |
Message := Message and (not (gmAttack or gmUp or gmPrecise or gmLeft or gmRight)); |
|
8795 | 3941 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3942 |
if (dY < _0_1) and (dY > -_0_1) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3943 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3944 |
Gear^.State := Gear^.State or gsttmpFlag; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3945 |
dY := dY - _0_2 |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3946 |
end |
2301 | 3947 |
end |
2177
c045698e044f
Initial attempt at jetpack. Pluses, more like lunar lander (takes fall damage). Minuses, can't seem to cancel it or use alt weapon
nemo
parents:
2143
diff
changeset
|
3948 |
end; |
2983 | 3949 |
|
3950 |
//////////////////////////////////////////////////////////////////////////////// |
|
3149 | 3951 |
procedure doStepBirdyDisappear(Gear: PGear); |
2983 | 3952 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3953 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3954 |
Gear^.Pos := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3955 |
if Gear^.Timer < 2000 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3956 |
inc(Gear^.Timer, 1) |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3957 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3958 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3959 |
DeleteGear(Gear); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3960 |
end; |
2983 | 3961 |
end; |
3962 |
||
3963 |
procedure doStepBirdyFly(Gear: PGear); |
|
8795 | 3964 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3965 |
HHGear: PGear; |
3161 | 3966 |
fuel, i: LongInt; |
2983 | 3967 |
move: hwFloat; |
3968 |
begin |
|
6154 | 3969 |
HHGear := Gear^.Hedgehog^.Gear; |
8795 | 3970 |
if HHGear = nil then |
6154 | 3971 |
begin |
9698 | 3972 |
Gear^.Timer := 0; |
3973 |
Gear^.State := Gear^.State or gstAnimation or gstTmpFlag; |
|
3974 |
Gear^.Timer := 0; |
|
3975 |
Gear^.doStep := @doStepBirdyDisappear; |
|
3976 |
CurAmmoGear := nil; |
|
3977 |
isCursorVisible := false; |
|
3978 |
AfterAttack; |
|
6154 | 3979 |
exit |
3980 |
end; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3981 |
|
3915
c05855146440
Correct bug in flight ceiling for birdy as well, increase clip on velocity to 1.9 (shouldn't cause problems with most collision checks still), apply clip to both + and -
nemo
parents:
3909
diff
changeset
|
3982 |
move := _0_2; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3983 |
fuel := 50; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3984 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3985 |
if Gear^.Pos > 0 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3986 |
dec(Gear^.Pos, 1) |
3894 | 3987 |
else if (HHGear^.Message and (gmLeft or gmRight or gmUp)) <> 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3988 |
Gear^.Pos := 500; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3989 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3990 |
if HHGear^.dX.isNegative then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3991 |
Gear^.Tag := -1 |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3992 |
else |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3993 |
Gear^.Tag := 1; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3994 |
|
3894 | 3995 |
if (HHGear^.Message and gmUp) <> 0 then |
4272
cf18de7ea3d4
engine side of a more wind patch. no frontend hook. just want to check it in to pull it from another machine
nemo
parents:
4265
diff
changeset
|
3996 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3997 |
if (not HHGear^.dY.isNegative) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3998 |
or (HHGear^.Y > -_256) then |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3999 |
HHGear^.dY := HHGear^.dY - move; |
8795 | 4000 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4001 |
dec(Gear^.Health, fuel); |
3894 | 4002 |
Gear^.MsgParam := Gear^.MsgParam or gmUp; |
4272
cf18de7ea3d4
engine side of a more wind patch. no frontend hook. just want to check it in to pull it from another machine
nemo
parents:
4265
diff
changeset
|
4003 |
end; |
8795 | 4004 |
|
3894 | 4005 |
if (HHGear^.Message and gmLeft) <> 0 then move.isNegative := true; |
4006 |
if (HHGear^.Message and (gmLeft or gmRight)) <> 0 then |
|
4272
cf18de7ea3d4
engine side of a more wind patch. no frontend hook. just want to check it in to pull it from another machine
nemo
parents:
4265
diff
changeset
|
4007 |
begin |
3915
c05855146440
Correct bug in flight ceiling for birdy as well, increase clip on velocity to 1.9 (shouldn't cause problems with most collision checks still), apply clip to both + and -
nemo
parents:
3909
diff
changeset
|
4008 |
HHGear^.dX := HHGear^.dX + (move * _0_1); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4009 |
dec(Gear^.Health, fuel div 5); |
3894 | 4010 |
Gear^.MsgParam := Gear^.MsgParam or (HHGear^.Message and (gmLeft or gmRight)); |
4272
cf18de7ea3d4
engine side of a more wind patch. no frontend hook. just want to check it in to pull it from another machine
nemo
parents:
4265
diff
changeset
|
4011 |
end; |
2983 | 4012 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4013 |
if Gear^.Health < 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4014 |
Gear^.Health := 0; |
8795 | 4015 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4016 |
if ((GameTicks and $FF) = 0) and (Gear^.Health < 500) then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4017 |
for i:= ((500-Gear^.Health) div 250) downto 0 do |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4018 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtFeather); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4019 |
|
3894 | 4020 |
if (HHGear^.Message and gmAttack <> 0) then |
4272
cf18de7ea3d4
engine side of a more wind patch. no frontend hook. just want to check it in to pull it from another machine
nemo
parents:
4265
diff
changeset
|
4021 |
begin |
6450 | 4022 |
HHGear^.Message := HHGear^.Message and (not gmAttack); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4023 |
if Gear^.FlightTime > 0 then |
4272
cf18de7ea3d4
engine side of a more wind patch. no frontend hook. just want to check it in to pull it from another machine
nemo
parents:
4265
diff
changeset
|
4024 |
begin |
cf18de7ea3d4
engine side of a more wind patch. no frontend hook. just want to check it in to pull it from another machine
nemo
parents:
4265
diff
changeset
|
4025 |
AddGear(hwRound(Gear^.X), hwRound(Gear^.Y) + 32, gtEgg, 0, Gear^.dX * _0_5, Gear^.dY, 0); |
3123 | 4026 |
PlaySound(sndBirdyLay); |
3115 | 4027 |
dec(Gear^.FlightTime) |
4272
cf18de7ea3d4
engine side of a more wind patch. no frontend hook. just want to check it in to pull it from another machine
nemo
parents:
4265
diff
changeset
|
4028 |
end; |
3115 | 4029 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4030 |
|
6131 | 4031 |
if HHGear^.Message and (gmUp or gmPrecise or gmLeft or gmRight) <> 0 then |
6450 | 4032 |
Gear^.State := Gear^.State and (not gsttmpFlag); |
8795 | 4033 |
|
6450 | 4034 |
HHGear^.Message := HHGear^.Message and (not (gmUp or gmPrecise or gmLeft or gmRight)); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4035 |
HHGear^.State := HHGear^.State or gstMoving; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4036 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4037 |
Gear^.X := HHGear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4038 |
Gear^.Y := HHGear^.Y - int2hwFloat(32); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4039 |
// For some reason I need to reapply followgear here, something else grabs it otherwise. |
6325
cdd3d8c723ec
Update changelog, comment on possibly redundant lines in GSHandlers
nemo
parents:
6314
diff
changeset
|
4040 |
// this is probably not needed anymore |
cdd3d8c723ec
Update changelog, comment on possibly redundant lines in GSHandlers
nemo
parents:
6314
diff
changeset
|
4041 |
if not CurrentTeam^.ExtDriven then FollowGear := HHGear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4042 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4043 |
if ((Gear^.State and gsttmpFlag) = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4044 |
or (HHGear^.dY < _0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4045 |
doStepHedgehogMoving(HHGear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4046 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4047 |
if (Gear^.Health = 0) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4048 |
or (HHGear^.Damage <> 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4049 |
or CheckGearDrowning(HHGear) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4050 |
or (TurnTimeLeft = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4051 |
// allow brief ground touches - to be fair on this, might need another counter |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4052 |
or (((GameTicks and $1FF) = 0) and (not HHGear^.dY.isNegative) and (TestCollisionYwithGear(HHGear, 1) <> 0)) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4053 |
or ((Gear^.Message and gmAttack) <> 0) then |
4272
cf18de7ea3d4
engine side of a more wind patch. no frontend hook. just want to check it in to pull it from another machine
nemo
parents:
4265
diff
changeset
|
4054 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4055 |
with HHGear^ do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4056 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4057 |
Message := 0; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4058 |
Active := true; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4059 |
State := State or gstMoving |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4060 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4061 |
Gear^.State := Gear^.State or gstAnimation or gstTmpFlag; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4062 |
if HHGear^.dY < _0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4063 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4064 |
Gear^.dX := HHGear^.dX; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4065 |
Gear^.dY := HHGear^.dY; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4066 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4067 |
Gear^.Timer := 0; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4068 |
Gear^.doStep := @doStepBirdyDisappear; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4069 |
CurAmmoGear := nil; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4070 |
isCursorVisible := false; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4071 |
AfterAttack; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4072 |
end |
2983 | 4073 |
end; |
4074 |
||
4075 |
procedure doStepBirdyDescend(Gear: PGear); |
|
8795 | 4076 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4077 |
HHGear: PGear; |
2983 | 4078 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4079 |
if Gear^.Timer > 0 then |
9698 | 4080 |
dec(Gear^.Timer, 1); |
4081 |
||
4082 |
HHGear := Gear^.Hedgehog^.Gear; |
|
4083 |
if HHGear = nil then |
|
4084 |
begin |
|
4085 |
Gear^.Timer := 0; |
|
4086 |
Gear^.State := Gear^.State or gstAnimation or gstTmpFlag; |
|
4087 |
Gear^.Timer := 0; |
|
4088 |
Gear^.doStep := @doStepBirdyDisappear; |
|
4089 |
CurAmmoGear := nil; |
|
4090 |
isCursorVisible := false; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4091 |
AfterAttack; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4092 |
exit |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4093 |
end; |
9698 | 4094 |
|
6450 | 4095 |
HHGear^.Message := HHGear^.Message and (not (gmUp or gmPrecise or gmLeft or gmRight)); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4096 |
if abs(hwRound(HHGear^.Y - Gear^.Y)) > 32 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4097 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4098 |
if Gear^.Timer = 0 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4099 |
Gear^.Y := Gear^.Y + _0_1 |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4100 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4101 |
else if Gear^.Timer = 0 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4102 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4103 |
Gear^.doStep := @doStepBirdyFly; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4104 |
HHGear^.dY := -_0_2 |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4105 |
end |
2983 | 4106 |
end; |
4107 |
||
3149 | 4108 |
procedure doStepBirdyAppear(Gear: PGear); |
4109 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4110 |
Gear^.Pos := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4111 |
if Gear^.Timer < 2000 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4112 |
inc(Gear^.Timer, 1) |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4113 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4114 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4115 |
Gear^.Timer := 500; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4116 |
Gear^.dX := _0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4117 |
Gear^.dY := _0; |
6450 | 4118 |
Gear^.State := Gear^.State and (not gstAnimation); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4119 |
Gear^.doStep := @doStepBirdyDescend; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4120 |
end |
3149 | 4121 |
end; |
4122 |
||
2983 | 4123 |
procedure doStepBirdy(Gear: PGear); |
8795 | 4124 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4125 |
HHGear: PGear; |
2983 | 4126 |
begin |
6450 | 4127 |
gear^.State := gear^.State or gstAnimation and (not gstTmpFlag); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4128 |
Gear^.doStep := @doStepBirdyAppear; |
8795 | 4129 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4130 |
if CurrentHedgehog = nil then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4131 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4132 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4133 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4134 |
end; |
2995 | 4135 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4136 |
HHGear := CurrentHedgehog^.Gear; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4137 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4138 |
if HHGear^.dX.isNegative then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4139 |
Gear^.Tag := -1 |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4140 |
else |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4141 |
Gear^.Tag := 1; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4142 |
Gear^.Pos := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4143 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4144 |
FollowGear := HHGear; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4145 |
with HHGear^ do |
5706 | 4146 |
begin |
6450 | 4147 |
State := State and (not gstAttacking); |
4148 |
Message := Message and (not (gmAttack or gmUp or gmPrecise or gmLeft or gmRight)) |
|
5706 | 4149 |
end |
2983 | 4150 |
end; |
3032 | 4151 |
|
4152 |
//////////////////////////////////////////////////////////////////////////////// |
|
3065 | 4153 |
procedure doStepEggWork(Gear: PGear); |
8795 | 4154 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4155 |
vg: PVisualGear; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4156 |
i: LongInt; |
3065 | 4157 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4158 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4159 |
Gear^.dX := Gear^.dX; |
3115 | 4160 |
doStepFallingGear(Gear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4161 |
// CheckGearDrowning(Gear); // already checked for in doStepFallingGear |
3115 | 4162 |
CalcRotationDirAngle(Gear); |
4163 |
||
4164 |
if (Gear^.State and gstCollision) <> 0 then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4165 |
begin |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
4166 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 10, Gear^.Hedgehog, EXPLPoisoned, $C0E0FFE0); |
3115 | 4167 |
PlaySound(sndEggBreak); |
4168 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtEgg); |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4169 |
vg := AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtEgg); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4170 |
if vg <> nil then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4171 |
vg^.Frame := 2; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4172 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4173 |
for i:= 10 downto 0 do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4174 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4175 |
vg := AddVisualGear(hwRound(Gear^.X) - 3 + Random(6), hwRound(Gear^.Y) - 3 + Random(6), |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4176 |
vgtDust); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4177 |
if vg <> nil then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4178 |
vg^.dX := vg^.dX + (Gear^.dX.QWordValue / 21474836480); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4179 |
end; |
3115 | 4180 |
|
4181 |
DeleteGear(Gear); |
|
4182 |
exit |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4183 |
end; |
3065 | 4184 |
end; |
3342
b4f01613dcd7
Some initial stubs for portal just so Tiy will quit nagging. Also let folks know what approximation of physics I plan to try, here.
nemo
parents:
3320
diff
changeset
|
4185 |
|
3401
d5d31d16eccc
add a part of my landslide vector collision and use if for the portal gun DirAngle, not flawless yet
sheepluva
parents:
3399
diff
changeset
|
4186 |
//////////////////////////////////////////////////////////////////////////////// |
3428 | 4187 |
procedure doPortalColorSwitch(); |
4790 | 4188 |
var CurWeapon: PAmmo; |
3428 | 4189 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4190 |
if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) and ((CurrentHedgehog^.Gear^.Message and gmSwitch) <> 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4191 |
with CurrentHedgehog^ do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4192 |
if (CurAmmoType = amPortalGun) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4193 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4194 |
CurrentHedgehog^.Gear^.Message := CurrentHedgehog^.Gear^.Message and (not gmSwitch); |
8795 | 4195 |
|
6924 | 4196 |
CurWeapon:= GetCurAmmoEntry(CurrentHedgehog^); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4197 |
if CurWeapon^.Pos <> 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4198 |
CurWeapon^.Pos := 0 |
8795 | 4199 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4200 |
else |
4790 | 4201 |
CurWeapon^.Pos := 1; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4202 |
end; |
3428 | 4203 |
end; |
4204 |
||
3342
b4f01613dcd7
Some initial stubs for portal just so Tiy will quit nagging. Also let folks know what approximation of physics I plan to try, here.
nemo
parents:
3320
diff
changeset
|
4205 |
procedure doStepPortal(Gear: PGear); |
8795 | 4206 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4207 |
iterator, conPortal: PGear; |
5594 | 4208 |
s, r, nx, ny, ox, oy, poffs, noffs, pspeed, nspeed, |
4209 |
resetx, resety, resetdx, resetdy: hwFloat; |
|
4210 |
sx, sy, rh, resetr: LongInt; |
|
4211 |
hasdxy, isbullet, iscake, isCollision: Boolean; |
|
3342
b4f01613dcd7
Some initial stubs for portal just so Tiy will quit nagging. Also let folks know what approximation of physics I plan to try, here.
nemo
parents:
3320
diff
changeset
|
4212 |
begin |
3428 | 4213 |
doPortalColorSwitch(); |
4214 |
||
3422
41ae3c48faa0
* some changes/cleanups to portal, still much to do :/ * reverted nemo's temporary loop fix * notice: small loops possible again, so take care :P, bigger onces should be interrupted
sheepluva
parents:
3419
diff
changeset
|
4215 |
// destroy portal if ground it was attached too is gone |
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
|
4216 |
if (Land[hwRound(Gear^.Y), hwRound(Gear^.X)] <= lfAllObjMask) |
10905 | 4217 |
or (Land[hwRound(Gear^.Y), hwRound(Gear^.X)] and lfBouncy <> 0) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4218 |
or (Gear^.Timer < 1) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4219 |
or (Gear^.Hedgehog^.Team <> CurrentHedgehog^.Team) |
10354 | 4220 |
or CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y)) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4221 |
begin |
3428 | 4222 |
deleteGear(Gear); |
4223 |
EXIT; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4224 |
end; |
3428 | 4225 |
|
4226 |
if (TurnTimeLeft < 1) |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4227 |
or (Gear^.Health < 1) then |
3428 | 4228 |
dec(Gear^.Timer); |
4229 |
||
4230 |
if Gear^.Timer < 10000 then |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4231 |
gear^.RenderTimer := true; |
3422
41ae3c48faa0
* some changes/cleanups to portal, still much to do :/ * reverted nemo's temporary loop fix * notice: small loops possible again, so take care :P, bigger onces should be interrupted
sheepluva
parents:
3419
diff
changeset
|
4232 |
|
41ae3c48faa0
* some changes/cleanups to portal, still much to do :/ * reverted nemo's temporary loop fix * notice: small loops possible again, so take care :P, bigger onces should be interrupted
sheepluva
parents:
3419
diff
changeset
|
4233 |
// abort if there is no other portal connected to this one |
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7270
diff
changeset
|
4234 |
if (Gear^.LinkedGear = nil) then |
3428 | 4235 |
exit; |
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7270
diff
changeset
|
4236 |
if ((Gear^.LinkedGear^.Tag and 1) = 0) then // or if it's still moving; |
3422
41ae3c48faa0
* some changes/cleanups to portal, still much to do :/ * reverted nemo's temporary loop fix * notice: small loops possible again, so take care :P, bigger onces should be interrupted
sheepluva
parents:
3419
diff
changeset
|
4237 |
exit; |
41ae3c48faa0
* some changes/cleanups to portal, still much to do :/ * reverted nemo's temporary loop fix * notice: small loops possible again, so take care :P, bigger onces should be interrupted
sheepluva
parents:
3419
diff
changeset
|
4238 |
|
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7270
diff
changeset
|
4239 |
conPortal := Gear^.LinkedGear; |
3422
41ae3c48faa0
* some changes/cleanups to portal, still much to do :/ * reverted nemo's temporary loop fix * notice: small loops possible again, so take care :P, bigger onces should be interrupted
sheepluva
parents:
3419
diff
changeset
|
4240 |
|
41ae3c48faa0
* some changes/cleanups to portal, still much to do :/ * reverted nemo's temporary loop fix * notice: small loops possible again, so take care :P, bigger onces should be interrupted
sheepluva
parents:
3419
diff
changeset
|
4241 |
// check all gears for stuff to port through |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4242 |
iterator := nil; |
3422
41ae3c48faa0
* some changes/cleanups to portal, still much to do :/ * reverted nemo's temporary loop fix * notice: small loops possible again, so take care :P, bigger onces should be interrupted
sheepluva
parents:
3419
diff
changeset
|
4243 |
while true do |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4244 |
begin |
3422
41ae3c48faa0
* some changes/cleanups to portal, still much to do :/ * reverted nemo's temporary loop fix * notice: small loops possible again, so take care :P, bigger onces should be interrupted
sheepluva
parents:
3419
diff
changeset
|
4245 |
|
3571 | 4246 |
// iterate through GearsList |
3422
41ae3c48faa0
* some changes/cleanups to portal, still much to do :/ * reverted nemo's temporary loop fix * notice: small loops possible again, so take care :P, bigger onces should be interrupted
sheepluva
parents:
3419
diff
changeset
|
4247 |
if iterator = nil then |
3571 | 4248 |
iterator := GearsList |
3422
41ae3c48faa0
* some changes/cleanups to portal, still much to do :/ * reverted nemo's temporary loop fix * notice: small loops possible again, so take care :P, bigger onces should be interrupted
sheepluva
parents:
3419
diff
changeset
|
4249 |
else |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4250 |
iterator := iterator^.NextGear; |
3571 | 4251 |
|
4252 |
// end of list? |
|
3422
41ae3c48faa0
* some changes/cleanups to portal, still much to do :/ * reverted nemo's temporary loop fix * notice: small loops possible again, so take care :P, bigger onces should be interrupted
sheepluva
parents:
3419
diff
changeset
|
4253 |
if iterator = nil then |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4254 |
break; |
3422
41ae3c48faa0
* some changes/cleanups to portal, still much to do :/ * reverted nemo's temporary loop fix * notice: small loops possible again, so take care :P, bigger onces should be interrupted
sheepluva
parents:
3419
diff
changeset
|
4255 |
|
41ae3c48faa0
* some changes/cleanups to portal, still much to do :/ * reverted nemo's temporary loop fix * notice: small loops possible again, so take care :P, bigger onces should be interrupted
sheepluva
parents:
3419
diff
changeset
|
4256 |
// don't port portals or other gear that wouldn't make sense |
8634
5dcb1dc9e01b
fix portal/hammer interaction, ban freezer from portal
nemo
parents:
8632
diff
changeset
|
4257 |
if (iterator^.Kind in [gtPortal, gtRope, gtAirAttack, gtIceGun]) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4258 |
or (iterator^.PortalCounter > 32) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4259 |
continue; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4260 |
|
3428 | 4261 |
// don't port hogs on rope |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4262 |
// TODO: this will also prevent hogs while falling after rope use from |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4263 |
// falling through portals... fix that! |
3422
41ae3c48faa0
* some changes/cleanups to portal, still much to do :/ * reverted nemo's temporary loop fix * notice: small loops possible again, so take care :P, bigger onces should be interrupted
sheepluva
parents:
3419
diff
changeset
|
4264 |
|
3571 | 4265 |
// check if gear fits through portal |
3422
41ae3c48faa0
* some changes/cleanups to portal, still much to do :/ * reverted nemo's temporary loop fix * notice: small loops possible again, so take care :P, bigger onces should be interrupted
sheepluva
parents:
3419
diff
changeset
|
4266 |
if (iterator^.Radius > Gear^.Radius) then |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4267 |
continue; |
3571 | 4268 |
|
4269 |
// this is the max range we accept incoming gears in |
|
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4270 |
r := Int2hwFloat(iterator^.Radius+Gear^.Radius); |
3422
41ae3c48faa0
* some changes/cleanups to portal, still much to do :/ * reverted nemo's temporary loop fix * notice: small loops possible again, so take care :P, bigger onces should be interrupted
sheepluva
parents:
3419
diff
changeset
|
4271 |
|
3571 | 4272 |
// too far away? |
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4273 |
if (iterator^.X < Gear^.X - r) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4274 |
or (iterator^.X > Gear^.X + r) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4275 |
or (iterator^.Y < Gear^.Y - r) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4276 |
or (iterator^.Y > Gear^.Y + r) then |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4277 |
continue; |
5044 | 4278 |
|
10490 | 4279 |
hasdxy := (((iterator^.dX.QWordValue <> 0) or (iterator^.dY.QWordValue <> 0)) or ((iterator^.State and gstMoving) = 0)); |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4280 |
|
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4281 |
// in case the object is not moving, let's asume it's falling towards the portal |
4038
8972dd38bbad
potential fix for Issue #86: 'Objects behind a portal will sometimes go through the portal.' please test
sheepluva
parents:
4036
diff
changeset
|
4282 |
if not hasdxy then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4283 |
begin |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4284 |
if Gear^.Y < iterator^.Y then |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4285 |
continue; |
4038
8972dd38bbad
potential fix for Issue #86: 'Objects behind a portal will sometimes go through the portal.' please test
sheepluva
parents:
4036
diff
changeset
|
4286 |
ox:= Gear^.X - iterator^.X; |
8972dd38bbad
potential fix for Issue #86: 'Objects behind a portal will sometimes go through the portal.' please test
sheepluva
parents:
4036
diff
changeset
|
4287 |
oy:= Gear^.Y - iterator^.Y; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4288 |
end |
4038
8972dd38bbad
potential fix for Issue #86: 'Objects behind a portal will sometimes go through the portal.' please test
sheepluva
parents:
4036
diff
changeset
|
4289 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4290 |
begin |
4038
8972dd38bbad
potential fix for Issue #86: 'Objects behind a portal will sometimes go through the portal.' please test
sheepluva
parents:
4036
diff
changeset
|
4291 |
ox:= iterator^.dX; |
8972dd38bbad
potential fix for Issue #86: 'Objects behind a portal will sometimes go through the portal.' please test
sheepluva
parents:
4036
diff
changeset
|
4292 |
oy:= iterator^.dY; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4293 |
end; |
4038
8972dd38bbad
potential fix for Issue #86: 'Objects behind a portal will sometimes go through the portal.' please test
sheepluva
parents:
4036
diff
changeset
|
4294 |
|
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4295 |
// cake will need extra treatment... it's so delicious and moist! |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4296 |
iscake:= (iterator^.Kind = gtCake); |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4297 |
|
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4298 |
// won't port stuff that does not move towards the front/portal entrance |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4299 |
if iscake then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4300 |
begin |
6452 | 4301 |
if not (((iterator^.X - Gear^.X)*ox + (iterator^.Y - Gear^.Y)*oy).isNegative) then |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4302 |
continue; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4303 |
end |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4304 |
else |
6453
11c578d30bd3
Countless imporvements to the parser and countless help to the parser in sources.
unc0rr
parents:
6452
diff
changeset
|
4305 |
if not ((Gear^.dX*ox + Gear^.dY*oy).isNegative) then |
3571 | 4306 |
continue; |
4307 |
||
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4308 |
isbullet:= (iterator^.Kind in [gtShotgunShot, gtDEagleShot, gtSniperRifleShot, gtSineGunShot]); |
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4309 |
|
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4310 |
r:= int2hwFloat(iterator^.Radius); |
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4311 |
|
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4312 |
if not (isbullet or iscake) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4313 |
begin |
3571 | 4314 |
// wow! good candidate there, let's see if the distance and direction is okay! |
4315 |
if hasdxy then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4316 |
begin |
8900
b77fd3c2eec5
whoops, unbreak build. how come that cmake doesn't stop anymore on engine build error?
sheepluva
parents:
8898
diff
changeset
|
4317 |
s := Distance(iterator^.dX, iterator^.dY); |
8898 | 4318 |
// if the resulting distance is 0 skip this gear |
4319 |
if s.QWordValue = 0 then |
|
4320 |
continue; |
|
8900
b77fd3c2eec5
whoops, unbreak build. how come that cmake doesn't stop anymore on engine build error?
sheepluva
parents:
8898
diff
changeset
|
4321 |
s := r / s; |
3571 | 4322 |
ox:= iterator^.X + s * iterator^.dX; |
4323 |
oy:= iterator^.Y + s * iterator^.dY; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4324 |
end |
3571 | 4325 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4326 |
begin |
3571 | 4327 |
ox:= iterator^.X; |
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4328 |
oy:= iterator^.Y + r; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4329 |
end; |
3571 | 4330 |
|
3578 | 4331 |
if (hwRound(Distance(Gear^.X-ox,Gear^.Y-oy)) > Gear^.Radius + 1 ) then |
3571 | 4332 |
continue; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4333 |
end; |
3571 | 4334 |
|
5841 | 4335 |
// draw bullet trail |
4336 |
if isbullet then |
|
4337 |
spawnBulletTrail(iterator); |
|
4338 |
||
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4339 |
// calc gear offset in portal vector direction |
3571 | 4340 |
ox := (iterator^.X - Gear^.X); |
4341 |
oy := (iterator^.Y - Gear^.Y); |
|
4342 |
poffs:= (Gear^.dX * ox + Gear^.dY * oy); |
|
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4343 |
|
5841 | 4344 |
if not isBullet and poffs.isNegative then |
4345 |
continue; |
|
4346 |
||
4347 |
// only port bullets close to the portal |
|
6450 | 4348 |
if isBullet and (not (hwAbs(poffs) < _3)) then |
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4349 |
continue; |
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4350 |
|
4076 | 4351 |
// |
4352 |
// gears that make it till here will definately be ported |
|
4353 |
// |
|
5594 | 4354 |
// (but old position/movement vector might be restored in case there's |
4355 |
// not enough space on the other side) |
|
4356 |
// |
|
4357 |
||
4358 |
resetr := iterator^.Radius; |
|
4359 |
resetx := iterator^.X; |
|
4360 |
resety := iterator^.Y; |
|
4361 |
resetdx := iterator^.dX; |
|
4362 |
resetdy := iterator^.dY; |
|
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4363 |
|
3578 | 4364 |
// create a normal of the portal vector, but ... |
4365 |
nx := Gear^.dY; |
|
3570 | 4366 |
ny := Gear^.dX; |
3578 | 4367 |
// ... decide where the top is based on the hog's direction when firing the portal |
4368 |
if Gear^.Elasticity.isNegative then |
|
6453
11c578d30bd3
Countless imporvements to the parser and countless help to the parser in sources.
unc0rr
parents:
6452
diff
changeset
|
4369 |
nx.isNegative := (not nx.isNegative) |
3578 | 4370 |
else |
3570 | 4371 |
ny.isNegative := not ny.isNegative; |
3578 | 4372 |
|
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4373 |
// calc gear offset in portal normal vector direction |
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4374 |
noffs:= (nx * ox + ny * oy); |
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4375 |
|
7721 | 4376 |
if isBullet and (noffs.Round >= Longword(Gear^.Radius)) then |
5841 | 4377 |
continue; |
4378 |
||
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4379 |
// avoid gravity related loops of not really moving gear |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4380 |
if not (iscake or isbullet) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4381 |
and (Gear^.dY.isNegative) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4382 |
and (conPortal^.dY.isNegative) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4383 |
and ((iterator^.dX.QWordValue + iterator^.dY.QWordValue) < _0_08.QWordValue) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4384 |
and (iterator^.PortalCounter > 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4385 |
continue; |
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4386 |
|
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4387 |
// calc gear speed along to the vector and the normal vector of the portal |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4388 |
if hasdxy then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4389 |
begin |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4390 |
pspeed:= (Gear^.dX * iterator^.dX + Gear^.dY * iterator^.dY); |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4391 |
nspeed:= (nx * iterator^.dX + ny * iterator^.dY); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4392 |
end |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4393 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4394 |
begin |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4395 |
pspeed:= hwAbs(cGravity * oy); |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4396 |
nspeed:= _0; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4397 |
end; |
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4398 |
|
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4399 |
// creating normal vector of connected (exit) portal |
3578 | 4400 |
nx := conPortal^.dY; |
3570 | 4401 |
ny := conPortal^.dX; |
3578 | 4402 |
if conPortal^.Elasticity.isNegative then |
6453
11c578d30bd3
Countless imporvements to the parser and countless help to the parser in sources.
unc0rr
parents:
6452
diff
changeset
|
4403 |
nx.isNegative := (not nx.isNegative) |
3578 | 4404 |
else |
3570 | 4405 |
ny.isNegative := not ny.isNegative; |
3578 | 4406 |
|
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4407 |
// inverse cake's normal movement direction, |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4408 |
// as if it just walked through a hole |
5750
6bbf7aee2cdf
Reenable a bunch of old portal play stuff, like dropping grenade into portal on hog, jumping through portal w/ hog on other end, collecting crate w/ portal etc. Also add cooldown to cake/portal interaction. It may still not do what you expect, but it probably shouldn't spin in place.
nemo
parents:
5748
diff
changeset
|
4409 |
//if iscake then nspeed.isNegative:= not nspeed.isNegative; |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4410 |
|
3571 | 4411 |
//AddFileLog('poffs:'+cstr(poffs)+' noffs:'+cstr(noffs)+' pspeed:'+cstr(pspeed)+' nspeed:'+cstr(nspeed)); |
3578 | 4412 |
iterator^.dX := -pspeed * conPortal^.dX + nspeed * nx; |
4413 |
iterator^.dY := -pspeed * conPortal^.dY + nspeed * ny; |
|
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4414 |
|
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4415 |
// make the gear's exit position close to the portal while |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4416 |
// still respecting the movement direction |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4417 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4418 |
// determine the distance (in exit vector direction) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4419 |
// that we want the gear at |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4420 |
if iscake then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4421 |
ox:= (r - _0_7) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4422 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4423 |
ox:= (r * _1_5); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4424 |
s:= ox / poffs; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4425 |
poffs:= ox; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4426 |
if (nspeed.QWordValue <> 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4427 |
and (pspeed > _0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4428 |
noffs:= noffs * s * (nspeed / pspeed); |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4429 |
|
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4430 |
// move stuff with high normal offset closer to the portal's center |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4431 |
if not isbullet then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4432 |
begin |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4433 |
s := hwAbs(noffs) + r - int2hwFloat(Gear^.Radius); |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4434 |
if s > _0 then |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4435 |
noffs:= noffs - SignAs(s,noffs) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4436 |
end; |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4437 |
|
3571 | 4438 |
iterator^.X := conPortal^.X + poffs * conPortal^.dX + noffs * nx; |
4439 |
iterator^.Y := conPortal^.Y + poffs * conPortal^.dY + noffs * ny; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4440 |
|
6450 | 4441 |
if not hasdxy and (not (conPortal^.dY.isNegative)) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4442 |
begin |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4443 |
iterator^.dY:= iterator^.dY + hwAbs(cGravity * (iterator^.Y - conPortal^.Y)) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4444 |
end; |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
4445 |
|
5594 | 4446 |
// see if the space on the exit side actually is enough |
4447 |
||
4448 |
if not (isBullet or isCake) then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4449 |
begin |
5594 | 4450 |
// TestCollisionXwithXYShift requires a hwFloat for xShift |
4451 |
ox.QWordValue := _1.QWordValue; |
|
4452 |
ox.isNegative := not iterator^.dX.isNegative; |
|
4453 |
||
4454 |
sx := hwSign(iterator^.dX); |
|
4455 |
sy := hwSign(iterator^.dY); |
|
4456 |
||
4457 |
if iterator^.Radius > 1 then |
|
4458 |
iterator^.Radius := iterator^.Radius - 1; |
|
4459 |
||
4460 |
// check front |
|
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
4461 |
isCollision := (TestCollisionY(iterator, sy) <> 0) or (TestCollisionX(iterator, sx) <> 0); |
5594 | 4462 |
|
4463 |
if not isCollision then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4464 |
begin |
5594 | 4465 |
// check center area (with half the radius so that the |
4466 |
// the square check won't check more pixels than we want to) |
|
4467 |
iterator^.Radius := 1 + resetr div 2; |
|
4468 |
rh := resetr div 4; |
|
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
4469 |
isCollision := (TestCollisionYwithXYShift(iterator, 0, -sy * rh, sy, false) <> 0) |
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
4470 |
or (TestCollisionXwithXYShift(iterator, ox * rh, 0, sx, false) <> 0); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4471 |
end; |
5594 | 4472 |
|
4473 |
iterator^.Radius := resetr; |
|
4474 |
||
4475 |
if isCollision then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4476 |
begin |
5594 | 4477 |
// collision! oh crap! go back! |
4478 |
iterator^.X := resetx; |
|
4479 |
iterator^.Y := resety; |
|
4480 |
iterator^.dX := resetdx; |
|
4481 |
iterator^.dY := resetdy; |
|
4482 |
continue; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4483 |
end; |
5594 | 4484 |
end; |
4485 |
||
4486 |
// |
|
4487 |
// You're now officially portaled! |
|
4488 |
// |
|
4489 |
||
4490 |
// Until loops are reliably broken |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4491 |
if iscake then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4492 |
iterator^.PortalCounter:= 33 |
5940 | 4493 |
else |
4494 |
begin |
|
4495 |
inc(iterator^.PortalCounter); |
|
7658 | 4496 |
iterator^.Active:= true; |
7992 | 4497 |
iterator^.State:= iterator^.State and (not gstHHHJump) or gstMoving; |
5940 | 4498 |
end; |
5594 | 4499 |
|
6785 | 4500 |
// is it worth adding an arcsin table? Just how often would we end up doing something like this? |
6787 | 4501 |
// SYNCED ANGLE UPDATE |
6785 | 4502 |
if iterator^.Kind = gtRCPlane then |
10112
275ad81e4718
fix indentation of previous commit and simplify rc-plane's angle-fix after portal code
sheepluva
parents:
10110
diff
changeset
|
4503 |
iterator^.Angle:= (1024 + vector2Angle(iterator^.dX, iterator^.dY) mod 4096) |
6787 | 4504 |
// VISUAL USE OF ANGLE ONLY |
4505 |
else if (CurAmmoGear <> nil) and (CurAmmoGear^.Kind = gtKamikaze) and (CurAmmoGear^.Hedgehog = iterator^.Hedgehog) then |
|
4506 |
begin |
|
4507 |
iterator^.Angle:= DxDy2AttackAngle(iterator^.dX, iterator^.dY); |
|
4508 |
iterator^.Angle:= 2048-iterator^.Angle; |
|
6786 | 4509 |
if iterator^.dX.isNegative then iterator^.Angle:= 4096-iterator^.Angle; |
6785 | 4510 |
end; |
4511 |
||
6555 | 4512 |
if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4513 |
and (iterator = CurrentHedgehog^.Gear) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4514 |
and (CurAmmoGear <> nil) |
9539 | 4515 |
and (CurAmmoGear^.Kind = gtRope) |
4516 |
and (CurAmmoGear^.Elasticity <> _0) then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4517 |
CurAmmoGear^.PortalCounter:= 1; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4518 |
|
8795 | 4519 |
if not isbullet and (iterator^.State and gstInvisible = 0) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4520 |
and (iterator^.Kind <> gtFlake) then |
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
4521 |
FollowGear := iterator; |
5594 | 4522 |
|
5841 | 4523 |
// store X/Y values of exit for net bullet trail |
4524 |
if isbullet then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4525 |
begin |
5841 | 4526 |
iterator^.Elasticity:= iterator^.X; |
4527 |
iterator^.Friction := iterator^.Y; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4528 |
end; |
5841 | 4529 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4530 |
if Gear^.Health > 1 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4531 |
dec(Gear^.Health); |
3571 | 4532 |
end; |
3342
b4f01613dcd7
Some initial stubs for portal just so Tiy will quit nagging. Also let folks know what approximation of physics I plan to try, here.
nemo
parents:
3320
diff
changeset
|
4533 |
end; |
3350 | 4534 |
|
6490 | 4535 |
|
3428 | 4536 |
|
4537 |
procedure loadNewPortalBall(oldPortal: PGear; destroyGear: Boolean); |
|
4790 | 4538 |
var |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3821
diff
changeset
|
4539 |
CurWeapon: PAmmo; |
3388
ab9352a4ddcc
Fix portal graphic name, continuing work on portal movement
nemo
parents:
3384
diff
changeset
|
4540 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4541 |
if CurrentHedgehog <> nil then |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3821
diff
changeset
|
4542 |
with CurrentHedgehog^ do |
3428 | 4543 |
begin |
6924 | 4544 |
CurWeapon:= GetCurAmmoEntry(CurrentHedgehog^); |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3821
diff
changeset
|
4545 |
if (CurAmmoType = amPortalGun) then |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3821
diff
changeset
|
4546 |
begin |
4790 | 4547 |
if not destroyGear then |
4548 |
begin |
|
4549 |
// switch color of ball to opposite of oldPortal |
|
4550 |
if (oldPortal^.Tag and 2) = 0 then |
|
4551 |
CurWeapon^.Pos:= 1 |
|
4552 |
else |
|
4553 |
CurWeapon^.Pos:= 0; |
|
4554 |
end; |
|
4555 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4556 |
// make the ball visible |
4790 | 4557 |
CurWeapon^.Timer := 0; |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3821
diff
changeset
|
4558 |
end |
3428 | 4559 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4560 |
if destroyGear then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4561 |
oldPortal^.Timer:= 0; |
3428 | 4562 |
end; |
4563 |
||
6490 | 4564 |
procedure doStepMovingPortal_real(Gear: PGear); |
8795 | 4565 |
var |
6490 | 4566 |
x, y, tx, ty: LongInt; |
4567 |
s: hwFloat; |
|
3428 | 4568 |
begin |
9477 | 4569 |
WorldWrap(Gear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4570 |
x := hwRound(Gear^.X); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4571 |
y := hwRound(Gear^.Y); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4572 |
tx := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4573 |
ty := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4574 |
// avoid compiler hints |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4575 |
|
7309 | 4576 |
if ((y and LAND_HEIGHT_MASK) = 0) and ((x and LAND_WIDTH_MASK) = 0) and (Land[y, x] > 255) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4577 |
begin |
3569 | 4578 |
Gear^.State := Gear^.State or gstCollision; |
6450 | 4579 |
Gear^.State := Gear^.State and (not gstMoving); |
8795 | 4580 |
|
7310 | 4581 |
if (Land[y, x] and lfBouncy <> 0) |
7426
55b49cc1f33a
Changes for the benefit of pas2c. Use downto in for loops to avoid repeated calls of Random/GetRandom. Wrap nots.
nemo
parents:
7416
diff
changeset
|
4582 |
or (not CalcSlopeTangent(Gear, x, y, tx, ty, 255)) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4583 |
or (DistanceI(tx,ty) < _12) then // reject shots at too irregular terrain |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4584 |
begin |
3428 | 4585 |
loadNewPortalBall(Gear, true); |
4586 |
EXIT; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4587 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4588 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4589 |
// making a normalized normal vector |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4590 |
s := _1/DistanceI(tx,ty); |
3562 | 4591 |
Gear^.dX := s * ty; |
4592 |
Gear^.dY := -s * tx; |
|
4593 |
||
4594 |
Gear^.DirAngle := DxDy2Angle(-Gear^.dY,Gear^.dX); |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4595 |
if not Gear^.dX.isNegative then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4596 |
Gear^.DirAngle := 180-Gear^.DirAngle; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4597 |
|
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7270
diff
changeset
|
4598 |
if ((Gear^.LinkedGear = nil) |
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7270
diff
changeset
|
4599 |
or (hwRound(Distance(Gear^.X - Gear^.LinkedGear^.X,Gear^.Y-Gear^.LinkedGear^.Y)) >=Gear^.Radius*2)) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4600 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4601 |
loadNewPortalBall(Gear, false); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4602 |
inc(Gear^.Tag); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4603 |
Gear^.doStep := @doStepPortal; |
3396
e5b3e5f2818e
More portal changes. Allows for a multishoot utility. Hopefully not breaking anything.
nemo
parents:
3391
diff
changeset
|
4604 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4605 |
else |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4606 |
loadNewPortalBall(Gear, true); |
3388
ab9352a4ddcc
Fix portal graphic name, continuing work on portal movement
nemo
parents:
3384
diff
changeset
|
4607 |
end |
8795 | 4608 |
|
10354 | 4609 |
else if CheckCoordInWater(x, y) |
7829
c1dc7839d7b9
Set minimums on a few values to avoid camera zooming out past them. partly Issue #430. Might be worth defining a new constant for this.
nemo
parents:
7784
diff
changeset
|
4610 |
or (y < -max(LAND_WIDTH,4096)) |
c1dc7839d7b9
Set minimums on a few values to avoid camera zooming out past them. partly Issue #430. Might be worth defining a new constant for this.
nemo
parents:
7784
diff
changeset
|
4611 |
or (x > 2*max(LAND_WIDTH,4096)) |
c1dc7839d7b9
Set minimums on a few values to avoid camera zooming out past them. partly Issue #430. Might be worth defining a new constant for this.
nemo
parents:
7784
diff
changeset
|
4612 |
or (x < -max(LAND_WIDTH,4096)) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4613 |
loadNewPortalBall(Gear, true); |
3428 | 4614 |
end; |
4615 |
||
3569 | 4616 |
procedure doStepMovingPortal(Gear: PGear); |
4617 |
begin |
|
4618 |
doPortalColorSwitch(); |
|
4619 |
doStepPerPixel(Gear, @doStepMovingPortal_real, true); |
|
8795 | 4620 |
if (Gear^.Timer < 1) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4621 |
or (Gear^.Hedgehog^.Team <> CurrentHedgehog^.Team) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4622 |
deleteGear(Gear); |
3569 | 4623 |
end; |
4624 |
||
3428 | 4625 |
procedure doStepPortalShot(newPortal: PGear); |
8795 | 4626 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4627 |
iterator: PGear; |
3560
3e51dad04026
portal: make shot 2 times faster, add hog movement speed to shot speed (only the part in shot direction, so that aiming is not messed up)
sheepluva
parents:
3552
diff
changeset
|
4628 |
s: hwFloat; |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3821
diff
changeset
|
4629 |
CurWeapon: PAmmo; |
3428 | 4630 |
begin |
3560
3e51dad04026
portal: make shot 2 times faster, add hog movement speed to shot speed (only the part in shot direction, so that aiming is not messed up)
sheepluva
parents:
3552
diff
changeset
|
4631 |
s:= Distance (newPortal^.dX, newPortal^.dY); |
3e51dad04026
portal: make shot 2 times faster, add hog movement speed to shot speed (only the part in shot direction, so that aiming is not messed up)
sheepluva
parents:
3552
diff
changeset
|
4632 |
|
3e51dad04026
portal: make shot 2 times faster, add hog movement speed to shot speed (only the part in shot direction, so that aiming is not messed up)
sheepluva
parents:
3552
diff
changeset
|
4633 |
// Adds the hog speed (only that part in/directly against shot direction) |
3e51dad04026
portal: make shot 2 times faster, add hog movement speed to shot speed (only the part in shot direction, so that aiming is not messed up)
sheepluva
parents:
3552
diff
changeset
|
4634 |
// to the shot speed (which we triple previously btw) |
3e51dad04026
portal: make shot 2 times faster, add hog movement speed to shot speed (only the part in shot direction, so that aiming is not messed up)
sheepluva
parents:
3552
diff
changeset
|
4635 |
// (This is done my projecting the hog movement vector onto the shot movement vector and then adding the resulting length |
3e51dad04026
portal: make shot 2 times faster, add hog movement speed to shot speed (only the part in shot direction, so that aiming is not messed up)
sheepluva
parents:
3552
diff
changeset
|
4636 |
// to the scaler) |
3562 | 4637 |
s := (_2 * s + (newPortal^.dX * CurrentHedgehog^.Gear^.dX + newPortal^.dY * CurrentHedgehog^.Gear^.dY ) / s) / s; |
3560
3e51dad04026
portal: make shot 2 times faster, add hog movement speed to shot speed (only the part in shot direction, so that aiming is not messed up)
sheepluva
parents:
3552
diff
changeset
|
4638 |
newPortal^.dX := newPortal^.dX * s; |
3e51dad04026
portal: make shot 2 times faster, add hog movement speed to shot speed (only the part in shot direction, so that aiming is not messed up)
sheepluva
parents:
3552
diff
changeset
|
4639 |
newPortal^.dY := newPortal^.dY * s; |
3e51dad04026
portal: make shot 2 times faster, add hog movement speed to shot speed (only the part in shot direction, so that aiming is not messed up)
sheepluva
parents:
3552
diff
changeset
|
4640 |
|
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7270
diff
changeset
|
4641 |
newPortal^.LinkedGear := nil; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4642 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4643 |
if CurrentHedgehog <> nil then |
6453
11c578d30bd3
Countless imporvements to the parser and countless help to the parser in sources.
unc0rr
parents:
6452
diff
changeset
|
4644 |
with CurrentHedgehog^ do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4645 |
begin |
6924 | 4646 |
CurWeapon:= GetCurAmmoEntry(CurrentHedgehog^); |
3578 | 4647 |
// let's save the HH's dX's direction so we can decide where the "top" of the portal hole |
4648 |
newPortal^.Elasticity.isNegative := CurrentHedgehog^.Gear^.dX.isNegative; |
|
4649 |
// when doing a backjump the dx is the opposite of the facing direction |
|
6450 | 4650 |
if ((Gear^.State and gstHHHJump) <> 0) and (not cArtillery) then |
3578 | 4651 |
newPortal^.Elasticity.isNegative := not newPortal^.Elasticity.isNegative; |
4652 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4653 |
// make portal gun look unloaded |
4790 | 4654 |
if (CurWeapon <> nil) and (CurAmmoType = amPortalGun) then |
4655 |
CurWeapon^.Timer := CurWeapon^.Timer or 2; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4656 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4657 |
iterator := GearsList; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4658 |
while iterator <> nil do |
7581
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4659 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4660 |
if (iterator^.Kind = gtPortal) then |
6556
faa47a7e614a
Allow multiple portals, so long as the team hasn't changed...
nemo
parents:
6555
diff
changeset
|
4661 |
if (iterator <> newPortal) and (iterator^.Timer > 0) and (iterator^.Hedgehog = CurrentHedgehog) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4662 |
begin |
6556
faa47a7e614a
Allow multiple portals, so long as the team hasn't changed...
nemo
parents:
6555
diff
changeset
|
4663 |
if ((iterator^.Tag and 2) = (newPortal^.Tag and 2)) then |
faa47a7e614a
Allow multiple portals, so long as the team hasn't changed...
nemo
parents:
6555
diff
changeset
|
4664 |
begin |
3468
c7b80bdbc384
* make portals delete each other only indirectly (by setting timer to 0)
sheepluva
parents:
3462
diff
changeset
|
4665 |
iterator^.Timer:= 0; |
6556
faa47a7e614a
Allow multiple portals, so long as the team hasn't changed...
nemo
parents:
6555
diff
changeset
|
4666 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4667 |
else |
6556
faa47a7e614a
Allow multiple portals, so long as the team hasn't changed...
nemo
parents:
6555
diff
changeset
|
4668 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4669 |
// link portals with each other |
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7270
diff
changeset
|
4670 |
newPortal^.LinkedGear := iterator; |
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7270
diff
changeset
|
4671 |
iterator^.LinkedGear := newPortal; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4672 |
iterator^.Health := newPortal^.Health; |
6556
faa47a7e614a
Allow multiple portals, so long as the team hasn't changed...
nemo
parents:
6555
diff
changeset
|
4673 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4674 |
end; |
3480
c4c3f3512404
Prevent all portal loops the guaranteed way, at least until sheepluva's tests yield something reliable.
nemo
parents:
3476
diff
changeset
|
4675 |
iterator^.PortalCounter:= 0; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4676 |
iterator := iterator^.NextGear |
7581
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4677 |
end; |
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4678 |
|
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4679 |
if newPortal^.LinkedGear <> nil then |
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4680 |
begin |
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4681 |
// This jiggles gears, to ensure a portal connection just placed under a gear takes effect. |
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4682 |
iterator:= GearsList; |
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4683 |
while iterator <> nil do |
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4684 |
begin |
7784
cf6261f7fdb5
Disable jiggling of cleavers 'cause it just looks odd. Adding a constraint based on proximity to portal is an option too, this was just easier.
nemo
parents:
7777
diff
changeset
|
4685 |
if not (iterator^.Kind in [gtPortal, gtAirAttack, gtKnife]) and ((iterator^.Hedgehog <> CurrentHedgehog) |
7581
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4686 |
or ((iterator^.Message and gmAllStoppable) = 0)) then |
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4687 |
begin |
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4688 |
iterator^.Active:= true; |
7992 | 4689 |
if iterator^.dY.QWordValue = 0 then |
7581
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4690 |
iterator^.dY.isNegative:= false; |
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4691 |
iterator^.State:= iterator^.State or gstMoving; |
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4692 |
DeleteCI(iterator); |
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4693 |
//inc(iterator^.dY.QWordValue,10); |
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4694 |
end; |
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4695 |
iterator:= iterator^.NextGear |
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4696 |
end |
ea509b70e03d
move this section back to the connection code, and add an exclusion for air attack. probably should play a few portal games just in case
nemo
parents:
7564
diff
changeset
|
4697 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4698 |
end; |
6450 | 4699 |
newPortal^.State := newPortal^.State and (not gstCollision); |
3569 | 4700 |
newPortal^.State := newPortal^.State or gstMoving; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4701 |
newPortal^.doStep := @doStepMovingPortal; |
3388
ab9352a4ddcc
Fix portal graphic name, continuing work on portal movement
nemo
parents:
3384
diff
changeset
|
4702 |
end; |
ab9352a4ddcc
Fix portal graphic name, continuing work on portal movement
nemo
parents:
3384
diff
changeset
|
4703 |
|
5313
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
4704 |
//////////////////////////////////////////////////////////////////////////////// |
3350 | 4705 |
procedure doStepPiano(Gear: PGear); |
8795 | 4706 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4707 |
r0, r1: LongInt; |
3728 | 4708 |
odY: hwFloat; |
3350 | 4709 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4710 |
AllInactive := false; |
8795 | 4711 |
if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) and |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4712 |
((CurrentHedgehog^.Gear^.Message and gmSlot) <> 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4713 |
begin |
8795 | 4714 |
case CurrentHedgehog^.Gear^.MsgParam of |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4715 |
0: PlaySound(sndPiano0); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4716 |
1: PlaySound(sndPiano1); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4717 |
2: PlaySound(sndPiano2); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4718 |
3: PlaySound(sndPiano3); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4719 |
4: PlaySound(sndPiano4); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4720 |
5: PlaySound(sndPiano5); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4721 |
6: PlaySound(sndPiano6); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4722 |
7: PlaySound(sndPiano7); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4723 |
else PlaySound(sndPiano8); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4724 |
end; |
3704 | 4725 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtNote); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4726 |
CurrentHedgehog^.Gear^.MsgParam := 0; |
6450 | 4727 |
CurrentHedgehog^.Gear^.Message := CurrentHedgehog^.Gear^.Message and (not gmSlot); |
6304
3036c242b19d
Set CurrentAmmoGear on piano (should fix notes again). Also disable focus on current hog if unplaced.
nemo
parents:
6278
diff
changeset
|
4728 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4729 |
|
3728 | 4730 |
if (*((Gear^.Pos = 3) and ((GameFlags and gfSolidLand) <> 0)) or*) (Gear^.Pos = 5) then |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4731 |
begin |
3728 | 4732 |
Gear^.dY := Gear^.dY + cGravity * 2; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4733 |
Gear^.Y := Gear^.Y + Gear^.dY; |
6803
0e70f3ea3bf8
bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents:
6792
diff
changeset
|
4734 |
if CheckGearDrowning(Gear) then |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4735 |
begin |
6803
0e70f3ea3bf8
bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents:
6792
diff
changeset
|
4736 |
Gear^.Y:= Gear^.Y + _50; |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4737 |
OnUsedAmmo(CurrentHedgehog^); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4738 |
if CurrentHedgehog^.Gear <> nil then |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4739 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4740 |
// Drown the hedgehog. Could also just delete it, but hey, this gets a caption |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4741 |
CurrentHedgehog^.Gear^.Active := true; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4742 |
CurrentHedgehog^.Gear^.X := Gear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4743 |
CurrentHedgehog^.Gear^.Y := int2hwFloat(cWaterLine+cVisibleWater)+_128; |
3954
ae3583ad6ea9
Hopefully fix the last of the more obvious weapon bugs w/ infinite attack mode, add a depixeling sweep every 5s too.
nemo
parents:
3953
diff
changeset
|
4744 |
CurrentHedgehog^.Unplaced := false; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4745 |
if TagTurnTimeLeft = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4746 |
TagTurnTimeLeft:= TurnTimeLeft; |
3954
ae3583ad6ea9
Hopefully fix the last of the more obvious weapon bugs w/ infinite attack mode, add a depixeling sweep every 5s too.
nemo
parents:
3953
diff
changeset
|
4747 |
TurnTimeLeft:= 0 |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4748 |
end; |
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4749 |
ResumeMusic |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4750 |
end; |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4751 |
exit |
3351 | 4752 |
end; |
4753 |
||
3728 | 4754 |
odY:= Gear^.dY; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4755 |
doStepFallingGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4756 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4757 |
if (Gear^.State and gstDrowning) <> 0 then |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4758 |
begin |
6803
0e70f3ea3bf8
bit of an experiment in variable splash sizes based on object/speed. not sure if it looks good yet. need to drown more stuff.
nemo
parents:
6792
diff
changeset
|
4759 |
Gear^.Y:= Gear^.Y + _50; |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4760 |
OnUsedAmmo(CurrentHedgehog^); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4761 |
if CurrentHedgehog^.Gear <> nil then |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4762 |
begin |
3419
b66a1b597f88
Add drown-the-playing-hog check for case of piano falling off the landscape.
nemo
parents:
3417
diff
changeset
|
4763 |
// Drown the hedgehog. Could also just delete it, but hey, this gets a caption |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4764 |
CurrentHedgehog^.Gear^.Active := true; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4765 |
CurrentHedgehog^.Gear^.X := Gear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4766 |
CurrentHedgehog^.Gear^.Y := int2hwFloat(cWaterLine+cVisibleWater)+_128; |
3954
ae3583ad6ea9
Hopefully fix the last of the more obvious weapon bugs w/ infinite attack mode, add a depixeling sweep every 5s too.
nemo
parents:
3953
diff
changeset
|
4767 |
CurrentHedgehog^.Unplaced := false; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4768 |
if TagTurnTimeLeft = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4769 |
TagTurnTimeLeft:= TurnTimeLeft; |
3954
ae3583ad6ea9
Hopefully fix the last of the more obvious weapon bugs w/ infinite attack mode, add a depixeling sweep every 5s too.
nemo
parents:
3953
diff
changeset
|
4770 |
TurnTimeLeft:= 0 |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4771 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4772 |
ResumeMusic |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4773 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4774 |
else if (Gear^.State and gstCollision) <> 0 then |
3399 | 4775 |
begin |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4776 |
r0 := GetRandom(21); |
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4777 |
r1 := GetRandom(21); |
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4778 |
doMakeExplosion(hwRound(Gear^.X) - 30 - r0, hwRound(Gear^.Y) + 40, 40 + r1, Gear^.Hedgehog, 0); |
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4779 |
doMakeExplosion(hwRound(Gear^.X) + 30 + r1, hwRound(Gear^.Y) + 40, 40 + r0, Gear^.Hedgehog, 0); |
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4780 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 80 + r0, Gear^.Hedgehog, EXPLAutoSound); |
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4781 |
for r0:= 0 to 4 do |
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4782 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtNote); |
7066
12cc2bd84b0b
Make pas2c even more happier with uGears.c, allow assigning arrays in some cases
unc0rr
parents:
7062
diff
changeset
|
4783 |
Gear^.dY := cGravity * 2 - odY; |
6305
5f7480c2a08d
Set default water colours in greyscale mode in case the theme does not define them, decrement piano weapon on use
nemo
parents:
6304
diff
changeset
|
4784 |
Gear^.Pos := Gear^.Pos + 1; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4785 |
end |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4786 |
else |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4787 |
Gear^.dY := Gear^.dY + cGravity * 2; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4788 |
// let it fall faster so itdoesn't take too long for the whole attack |
3382 | 4789 |
end; |
3384 | 4790 |
|
4791 |
||
4792 |
//////////////////////////////////////////////////////////////////////////////// |
|
4793 |
procedure doStepSineGunShotWork(Gear: PGear); |
|
8795 | 4794 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4795 |
x, y, rX, rY, t, tmp, initHealth: LongInt; |
3384 | 4796 |
oX, oY, ldX, ldY, sdX, sdY, sine, lx, ly, amp: hwFloat; |
10657 | 4797 |
justCollided, justBounced: boolean; |
3384 | 4798 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4799 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4800 |
initHealth := Gear^.Health; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4801 |
lX := Gear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4802 |
lY := Gear^.Y; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4803 |
ldX := Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4804 |
ldY := Gear^.dY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4805 |
sdy := _0_5/Distance(Gear^.dX,Gear^.dY); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4806 |
ldX := ldX * sdy; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4807 |
ldY := ldY * sdy; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4808 |
sdY := hwAbs(ldX) + hwAbs(ldY); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4809 |
sdX := _1 - hwAbs(ldX/sdY); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4810 |
sdY := _1 - hwAbs(ldY/sdY); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4811 |
if (ldX.isNegative = ldY.isNegative) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4812 |
sdY := -sdY; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4813 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4814 |
// initial angle depends on current GameTicks |
7745 | 4815 |
t := getRandom(4096); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4816 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4817 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4818 |
// used for a work-around detection of area that is within land array, but outside borders |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4819 |
justCollided := false; |
10657 | 4820 |
// this variable is just to ensure we don't run in infinite loop due to precision errors |
4821 |
justBounced:= false; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4822 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4823 |
repeat |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4824 |
lX := lX + ldX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4825 |
lY := lY + ldY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4826 |
oX := Gear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4827 |
oY := Gear^.Y; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4828 |
rX := hwRound(oX); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4829 |
rY := hwRound(oY); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4830 |
tmp := t mod 4096; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4831 |
amp := _128 * (_1 - hwSqr(int2hwFloat(Gear^.Health)/initHealth)); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4832 |
sine := amp * AngleSin(tmp mod 2048); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4833 |
sine.isNegative := (tmp < 2048); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4834 |
Gear^.X := lX + (sine * sdX); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4835 |
Gear^.Y := ly + (sine * sdY); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4836 |
Gear^.dX := Gear^.X - oX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4837 |
Gear^.dY := Gear^.Y - oY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4838 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4839 |
x := hwRound(Gear^.X); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4840 |
y := hwRound(Gear^.Y); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4841 |
|
10652 | 4842 |
if WorldEdge = weWrap then |
4843 |
begin |
|
4844 |
if x > LongInt(rightX) then |
|
10659 | 4845 |
repeat |
4846 |
dec(x, playWidth); |
|
4847 |
dec(rx, playWidth); |
|
10652 | 4848 |
until x <= LongInt(rightX) |
4849 |
else if x < LongInt(leftX) then |
|
10659 | 4850 |
repeat |
4851 |
inc(x, playWidth); |
|
4852 |
inc(rx, playWidth); |
|
10652 | 4853 |
until x >= LongInt(leftX); |
10657 | 4854 |
end |
4855 |
else if (WorldEdge = weBounce) then |
|
4856 |
begin |
|
4857 |
if (not justBounced) and ((x > LongInt(rightX)) or (x < LongInt(leftX))) then |
|
4858 |
begin |
|
4859 |
// reflect |
|
4860 |
lX:= lX - ldX + ((oX - lX) * 2); |
|
4861 |
lY:= lY - ldY; |
|
4862 |
Gear^.X:= oX; |
|
4863 |
Gear^.Y:= oY; |
|
4864 |
ldX.isNegative:= (not ldX.isNegative); |
|
4865 |
sdX.isNegative:= (not sdX.isNegative); |
|
4866 |
justBounced:= true; |
|
4867 |
continue; |
|
4868 |
end |
|
4869 |
else |
|
4870 |
justBounced:= false; |
|
10652 | 4871 |
end; |
4872 |
||
10657 | 4873 |
|
4874 |
inc(t,Gear^.Health div 313); |
|
4875 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4876 |
// if borders are on, stop outside land array |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4877 |
if hasBorder and (((x and LAND_WIDTH_MASK) <> 0) or ((y and LAND_HEIGHT_MASK) <> 0)) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4878 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4879 |
Gear^.Damage := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4880 |
Gear^.Health := 0; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4881 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4882 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4883 |
begin |
10372 | 4884 |
if (not CheckCoordInWater(rX, rY)) or (not CheckCoordInWater(x, y)) then |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4885 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4886 |
if ((y and LAND_HEIGHT_MASK) = 0) and ((x and LAND_WIDTH_MASK) = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4887 |
and (Land[y, x] <> 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4888 |
begin |
10118 | 4889 |
if ((GameFlags and gfSolidLand) <> 0) and (Land[y, x] > 255) then |
4890 |
Gear^.Damage := initHealth |
|
4891 |
else if justCollided then |
|
4892 |
begin |
|
4893 |
Gear^.Damage := initHealth; |
|
4894 |
end |
|
4895 |
else |
|
4896 |
begin |
|
4897 |
inc(Gear^.Damage,3); |
|
4898 |
justCollided := true; |
|
4899 |
end; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4900 |
end |
3384 | 4901 |
else |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4902 |
justCollided := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4903 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4904 |
// kick nearby hogs, dig tunnel and add some fire |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4905 |
// if at least 5 collisions occured |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4906 |
if Gear^.Damage > 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4907 |
begin |
10118 | 4908 |
if ((GameFlags and gfSolidLand) = 0) then |
4909 |
begin |
|
4910 |
DrawExplosion(rX,rY,Gear^.Radius); |
|
4911 |
end; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4912 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4913 |
// kick nearby hogs |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4914 |
AmmoShove(Gear, 35, 50); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4915 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4916 |
dec(Gear^.Health, Gear^.Damage); |
10118 | 4917 |
|
4918 |
// explode when impacting on solid land/borders |
|
4919 |
if Gear^.Damage >= initHealth then |
|
4920 |
begin |
|
4921 |
// add some random offset to angles |
|
4922 |
tmp := getRandom(256); |
|
4923 |
// spawn some flames |
|
4924 |
for t:= 0 to 3 do |
|
4925 |
begin |
|
4926 |
if not isZero(Gear^.dX) then rX := rx - hwSign(Gear^.dX); |
|
4927 |
if not isZero(Gear^.dY) then rY := ry - hwSign(Gear^.dY); |
|
4928 |
lX := AngleCos(tmp + t * 512) * _0_25 * (GetRandomf + _1); |
|
4929 |
lY := AngleSin(tmp + t * 512) * _0_25 * (GetRandomf + _1); |
|
4930 |
AddGear(rX, rY, gtFlame, 0, lX, lY, 0); |
|
4931 |
AddGear(rX, rY, gtFlame, 0, lX, -lY, 0); |
|
4932 |
end; |
|
4933 |
end |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4934 |
// add some fire to the tunnel |
10118 | 4935 |
else if getRandom(6) = 0 then |
7391
588eabb4b384
Apparently order of multiple getrandom in params is undefined. Also remove broken and pointless getrandom call.
nemo
parents:
7389
diff
changeset
|
4936 |
begin |
588eabb4b384
Apparently order of multiple getrandom in params is undefined. Also remove broken and pointless getrandom call.
nemo
parents:
7389
diff
changeset
|
4937 |
tmp:= GetRandom(2 * Gear^.Radius); |
588eabb4b384
Apparently order of multiple getrandom in params is undefined. Also remove broken and pointless getrandom call.
nemo
parents:
7389
diff
changeset
|
4938 |
AddGear(x - Gear^.Radius + tmp, y - GetRandom(Gear^.Radius + 1), gtFlame, gsttmpFlag, _0, _0, 0) |
10118 | 4939 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4940 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4941 |
|
10118 | 4942 |
Gear^.Damage := 0; |
4943 |
||
7391
588eabb4b384
Apparently order of multiple getrandom in params is undefined. Also remove broken and pointless getrandom call.
nemo
parents:
7389
diff
changeset
|
4944 |
if random(100) = 0 then |
8795 | 4945 |
AddVisualGear(x, y, vgtSmokeTrace); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4946 |
end |
10118 | 4947 |
else dec(Gear^.Health, 5); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4948 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4949 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4950 |
dec(Gear^.Health); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4951 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4952 |
// decrease bullet size towards the end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4953 |
if (Gear^.Radius > 4) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4954 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4955 |
if (Gear^.Health <= (initHealth div 3)) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4956 |
dec(Gear^.Radius) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4957 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4958 |
else if (Gear^.Radius > 3) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4959 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4960 |
if (Gear^.Health <= (initHealth div 4)) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4961 |
dec(Gear^.Radius) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4962 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4963 |
else if (Gear^.Radius > 2) then begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4964 |
if (Gear^.Health <= (initHealth div 5)) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4965 |
dec(Gear^.Radius) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4966 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4967 |
else if (Gear^.Radius > 1) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4968 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4969 |
if (Gear^.Health <= (initHealth div 6)) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4970 |
dec(Gear^.Radius) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4971 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4972 |
until (Gear^.Health <= 0); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4973 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4974 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4975 |
AfterAttack; |
3384 | 4976 |
end; |
4977 |
||
4978 |
procedure doStepSineGunShot(Gear: PGear); |
|
7745 | 4979 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4980 |
HHGear: PGear; |
3384 | 4981 |
begin |
8795 | 4982 |
PlaySound(sndSineGun); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4983 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4984 |
// push the shooting Hedgehog back |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4985 |
HHGear := CurrentHedgehog^.Gear; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4986 |
Gear^.dX.isNegative := not Gear^.dX.isNegative; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4987 |
Gear^.dY.isNegative := not Gear^.dY.isNegative; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4988 |
HHGear^.dX := Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4989 |
HHGear^.dY := Gear^.dY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4990 |
AmmoShove(Gear, 0, 80); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4991 |
Gear^.dX.isNegative := not Gear^.dX.isNegative; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4992 |
Gear^.dY.isNegative := not Gear^.dY.isNegative; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4993 |
|
4034
634a8c8682de
add some phone rumbling to big explosions, airbomb and sinegun
koda
parents:
4026
diff
changeset
|
4994 |
Gear^.doStep := @doStepSineGunShotWork; |
9954 | 4995 |
{$IFNDEF PAS2C} |
8204 | 4996 |
with mobileRecord do |
4997 |
if (performRumble <> nil) and (not fastUntilLag) then |
|
4998 |
performRumble(kSystemSoundID_Vibrate); |
|
9954 | 4999 |
{$ENDIF} |
3384 | 5000 |
end; |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5001 |
|
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5002 |
//////////////////////////////////////////////////////////////////////////////// |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5003 |
procedure doStepFlamethrowerWork(Gear: PGear); |
8795 | 5004 |
var |
7281 | 5005 |
HHGear, flame: PGear; |
3485 | 5006 |
rx, ry, speed: hwFloat; |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5007 |
i, gX, gY: LongInt; |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5008 |
begin |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5009 |
AllInactive := false; |
4365 | 5010 |
HHGear := Gear^.Hedgehog^.Gear; |
10831
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
5011 |
if HHGear = nil then |
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
5012 |
begin |
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
5013 |
DeleteGear(gear); |
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
5014 |
exit |
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
5015 |
end; |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5016 |
HedgehogChAngle(HHGear); |
3484 | 5017 |
gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle); |
5018 |
gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle); |
|
8795 | 5019 |
|
3485 | 5020 |
if (GameTicks and $FF) = 0 then |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5021 |
begin |
3894 | 5022 |
if (HHGear^.Message and gmRight) <> 0 then |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5023 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5024 |
if HHGear^.dX.isNegative and (Gear^.Tag < 20) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5025 |
inc(Gear^.Tag) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5026 |
else if Gear^.Tag > 5 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5027 |
dec(Gear^.Tag); |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5028 |
end |
3894 | 5029 |
else if (HHGear^.Message and gmLeft) <> 0 then |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5030 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5031 |
if HHGear^.dX.isNegative and (Gear^.Tag > 5) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5032 |
dec(Gear^.Tag) |
8795 | 5033 |
else if Gear^.Tag < 20 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5034 |
inc(Gear^.Tag); |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5035 |
end |
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5036 |
end; |
8795 | 5037 |
|
3485 | 5038 |
dec(Gear^.Timer); |
5039 |
if Gear^.Timer = 0 then |
|
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5040 |
begin |
3485 | 5041 |
dec(Gear^.Health); |
5417
c56a6be662bf
try to tweak flamethrower a bit to do more damage with fire changes. An optimal firepit test dealt 68.
nemo
parents:
5415
diff
changeset
|
5042 |
if (Gear^.Health mod 5) = 0 then |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5043 |
begin |
7001 | 5044 |
rx := rndSign(getRandomf * _0_1); |
5045 |
ry := rndSign(getRandomf * _0_1); |
|
5417
c56a6be662bf
try to tweak flamethrower a bit to do more damage with fire changes. An optimal firepit test dealt 68.
nemo
parents:
5415
diff
changeset
|
5046 |
speed := _0_5 * (_10 / Gear^.Tag); |
8795 | 5047 |
|
7281 | 5048 |
flame:= AddGear(gx, gy, gtFlame, gstTmpFlag, |
6126
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
5049 |
SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx, |
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
5050 |
AngleCos(HHGear^.Angle) * ( - speed) + ry, 0); |
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
|
5051 |
flame^.CollisionMask:= lfNotCurrentMask; |
10589
98ea597e5cd9
expose FlightTime to lua, disable in-air flame harming moving hogs ☹ aaaand override that in ClimbHome ☺
nemo
parents:
10586
diff
changeset
|
5052 |
//flame^.FlightTime:= 500; use the default huge value to avoid sticky flame suddenly being damaging as opposed to other flames |
8795 | 5053 |
|
6131 | 5054 |
if (Gear^.Health mod 30) = 0 then |
7281 | 5055 |
begin |
5056 |
flame:= AddGear(gx, gy, gtFlame, 0, |
|
6126
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
5057 |
SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx, |
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
5058 |
AngleCos(HHGear^.Angle) * ( - speed) + ry, 0); |
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
|
5059 |
flame^.CollisionMask:= lfNotCurrentMask; |
10589
98ea597e5cd9
expose FlightTime to lua, disable in-air flame harming moving hogs ☹ aaaand override that in ClimbHome ☺
nemo
parents:
10586
diff
changeset
|
5060 |
//flame^.FlightTime:= 500; |
7281 | 5061 |
end |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5062 |
end; |
3485 | 5063 |
Gear^.Timer:= Gear^.Tag |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5064 |
end; |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5065 |
|
7539 | 5066 |
if (Gear^.Health = 0) or ((HHGear^.State and gstHHDriven) = 0) then |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5067 |
begin |
10831
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
5068 |
HHGear^.State := HHGear^.State and (not gstNotKickable); |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5069 |
DeleteGear(Gear); |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5070 |
AfterAttack |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5071 |
end |
3485 | 5072 |
else |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5073 |
begin |
4256 | 5074 |
i:= Gear^.Health div 5; |
4262
154253f77b03
ok... combine a tick check with texture percentage check. this should be a lot less frequent
nemo
parents:
4260
diff
changeset
|
5075 |
if (i <> Gear^.Damage) and ((GameTicks and $3F) = 0) then |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5076 |
begin |
4258 | 5077 |
Gear^.Damage:= i; |
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:
10597
diff
changeset
|
5078 |
FreeAndNilTexture(Gear^.Tex); |
10123 | 5079 |
Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ansistring(': ' + inttostr(i) + |
5080 |
'%'), cWhiteColor, fntSmall) |
|
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5081 |
end |
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5082 |
end |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5083 |
end; |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5084 |
|
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5085 |
procedure doStepFlamethrower(Gear: PGear); |
8795 | 5086 |
var |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5087 |
HHGear: PGear; |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5088 |
begin |
4365 | 5089 |
HHGear := Gear^.Hedgehog^.Gear; |
6450 | 5090 |
HHGear^.Message := HHGear^.Message and (not (gmUp or gmDown or gmLeft or gmRight)); |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5091 |
HHGear^.State := HHGear^.State or gstNotKickable; |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5092 |
Gear^.doStep := @doStepFlamethrowerWork |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5093 |
end; |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5094 |
|
5313
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
5095 |
//////////////////////////////////////////////////////////////////////////////// |
5024 | 5096 |
procedure doStepLandGunWork(Gear: PGear); |
8795 | 5097 |
var |
7281 | 5098 |
HHGear, land: PGear; |
5024 | 5099 |
rx, ry, speed: hwFloat; |
5100 |
i, gX, gY: LongInt; |
|
5101 |
begin |
|
5102 |
AllInactive := false; |
|
5103 |
HHGear := Gear^.Hedgehog^.Gear; |
|
10831
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
5104 |
if HHGear = nil then |
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
5105 |
begin |
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
5106 |
DeleteGear(gear); |
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
5107 |
exit |
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
5108 |
end; |
5024 | 5109 |
HedgehogChAngle(HHGear); |
5110 |
gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle); |
|
5111 |
gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle); |
|
8795 | 5112 |
|
5024 | 5113 |
if (GameTicks and $FF) = 0 then |
5114 |
begin |
|
5115 |
if (HHGear^.Message and gmRight) <> 0 then |
|
5116 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5117 |
if HHGear^.dX.isNegative and (Gear^.Tag < 20) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5118 |
inc(Gear^.Tag) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5119 |
else if Gear^.Tag > 5 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5120 |
dec(Gear^.Tag); |
5024 | 5121 |
end |
5122 |
else if (HHGear^.Message and gmLeft) <> 0 then |
|
5123 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5124 |
if HHGear^.dX.isNegative and (Gear^.Tag > 5) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5125 |
dec(Gear^.Tag) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5126 |
else if Gear^.Tag < 20 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5127 |
inc(Gear^.Tag); |
5024 | 5128 |
end |
5129 |
end; |
|
8795 | 5130 |
|
5024 | 5131 |
dec(Gear^.Timer); |
5132 |
if Gear^.Timer = 0 then |
|
5133 |
begin |
|
5134 |
dec(Gear^.Health); |
|
5480 | 5135 |
|
7001 | 5136 |
rx := rndSign(getRandomf * _0_1); |
5137 |
ry := rndSign(getRandomf * _0_1); |
|
5480 | 5138 |
speed := (_3 / Gear^.Tag); |
5139 |
||
8795 | 5140 |
land:= AddGear(gx, gy, gtFlake, gstTmpFlag, |
5141 |
SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx, |
|
6126
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
5142 |
AngleCos(HHGear^.Angle) * ( - speed) + ry, 0); |
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
|
5143 |
land^.CollisionMask:= lfNotCurrentMask; |
8795 | 5144 |
|
5024 | 5145 |
Gear^.Timer:= Gear^.Tag |
5146 |
end; |
|
5147 |
||
7539 | 5148 |
if (Gear^.Health = 0) or ((HHGear^.State and gstHHDriven) = 0) or ((HHGear^.Message and gmAttack) <> 0) then |
5024 | 5149 |
begin |
6450 | 5150 |
HHGear^.Message:= HHGear^.Message and (not gmAttack); |
10831
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
5151 |
HHGear^.State := HHGear^.State and (not gstNotKickable); |
5024 | 5152 |
DeleteGear(Gear); |
5153 |
AfterAttack |
|
5154 |
end |
|
5155 |
else |
|
5156 |
begin |
|
5157 |
i:= Gear^.Health div 10; |
|
5158 |
if (i <> Gear^.Damage) and ((GameTicks and $3F) = 0) then |
|
5159 |
begin |
|
5160 |
Gear^.Damage:= i; |
|
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:
10597
diff
changeset
|
5161 |
FreeAndNilTexture(Gear^.Tex); |
10123 | 5162 |
Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ansistring(': ' + inttostr(i) + |
5163 |
'%'), cWhiteColor, fntSmall) |
|
5024 | 5164 |
end |
5165 |
end |
|
5166 |
end; |
|
5167 |
||
5168 |
procedure doStepLandGun(Gear: PGear); |
|
8795 | 5169 |
var |
5024 | 5170 |
HHGear: PGear; |
5171 |
begin |
|
5172 |
HHGear := Gear^.Hedgehog^.Gear; |
|
6450 | 5173 |
HHGear^.Message := HHGear^.Message and (not (gmUp or gmDown or gmLeft or gmRight or gmAttack)); |
5024 | 5174 |
HHGear^.State := HHGear^.State or gstNotKickable; |
5175 |
Gear^.doStep := @doStepLandGunWork |
|
5176 |
end; |
|
5177 |
||
5313
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
5178 |
//////////////////////////////////////////////////////////////////////////////// |
3712 | 5179 |
procedure doStepPoisonCloud(Gear: PGear); |
5180 |
begin |
|
9473
a51a69094c24
partial implementation of non-infinite world (edge wrap/warp/bounce)
nemo
parents:
9470
diff
changeset
|
5181 |
WorldWrap(Gear); |
3712 | 5182 |
if Gear^.Timer = 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5183 |
begin |
3712 | 5184 |
DeleteGear(Gear); |
5185 |
exit |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5186 |
end; |
3712 | 5187 |
dec(Gear^.Timer); |
5188 |
Gear^.X:= Gear^.X + Gear^.dX; |
|
5189 |
Gear^.Y:= Gear^.Y + Gear^.dY; |
|
3713 | 5190 |
Gear^.dX := Gear^.dX + cWindSpeed / 4; |
3712 | 5191 |
Gear^.dY := Gear^.dY + cGravity / 100; |
5340
6963e37f2dd2
- Allow snow to drop a bit outside the map, where it already is allowed to spawn
unc0rr
parents:
5336
diff
changeset
|
5192 |
if (GameTicks and $FF) = 0 then |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
5193 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 20, Gear^.Hedgehog, EXPLDontDraw or EXPLNoGfx or EXPLNoDamage or EXPLDoNotTouchAny or EXPLPoisoned); |
9817 | 5194 |
if Gear^.State and gstTmpFlag = 0 then |
5195 |
AllInactive:= false; |
|
3717 | 5196 |
end; |
5197 |
||
5198 |
//////////////////////////////////////////////////////////////////////////////// |
|
5199 |
procedure doStepHammer(Gear: PGear); |
|
3720 | 5200 |
var HHGear, tmp, tmp2: PGear; |
3717 | 5201 |
t: PGearArray; |
5202 |
i: LongInt; |
|
5203 |
begin |
|
4365 | 5204 |
HHGear:= Gear^.Hedgehog^.Gear; |
3717 | 5205 |
HHGear^.State:= HHGear^.State or gstNoDamage; |
5206 |
DeleteCI(HHGear); |
|
5207 |
||
5208 |
t:= CheckGearsCollision(Gear); |
|
3720 | 5209 |
|
5210 |
for i:= 5 downto 0 do |
|
5211 |
AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust); |
|
5212 |
||
3717 | 5213 |
i:= t^.Count; |
5214 |
while i > 0 do |
|
5215 |
begin |
|
5216 |
dec(i); |
|
5217 |
tmp:= t^.ar[i]; |
|
5218 |
if (tmp^.State and gstNoDamage) = 0 then |
|
5624
b6f70f6335ee
Allow hammer to bash mines/barrels too, increase escape time to 3s
nemo
parents:
5612
diff
changeset
|
5219 |
if (tmp^.Kind = gtHedgehog) or (tmp^.Kind = gtMine) or (tmp^.Kind = gtExplosives) then |
3717 | 5220 |
begin |
5221 |
//tmp^.State:= tmp^.State or gstFlatened; |
|
10011
ead5e4b21671
Add check for gear kind of hedgehog on invulnerability effect. This probably fixes bug #766, is similar to change in previous r2a1483d91977 and was introduced by r7d925e82e572
nemo
parents:
9998
diff
changeset
|
5222 |
if (tmp^.Kind <> gtHedgehog) or (tmp^.Hedgehog^.Effects[heInvulnerable] = 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5223 |
ApplyDamage(tmp, CurrentHedgehog, tmp^.Health div 3, dsUnknown); |
3720 | 5224 |
//DrawTunnel(tmp^.X, tmp^.Y - _1, _0, _0_5, cHHRadius * 6, cHHRadius * 3); |
5225 |
tmp2:= AddGear(hwRound(tmp^.X), hwRound(tmp^.Y), gtHammerHit, 0, _0, _0, 0); |
|
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7270
diff
changeset
|
5226 |
tmp2^.LinkedGear:= tmp; |
3717 | 5227 |
SetAllToActive |
5228 |
end |
|
5229 |
else |
|
5230 |
begin |
|
5231 |
end |
|
5232 |
end; |
|
5233 |
||
6450 | 5234 |
HHGear^.State:= HHGear^.State and (not gstNoDamage); |
3717 | 5235 |
Gear^.Timer:= 250; |
5236 |
Gear^.doStep:= @doStepIdle |
|
5237 |
end; |
|
3720 | 5238 |
|
5239 |
procedure doStepHammerHitWork(Gear: PGear); |
|
8795 | 5240 |
var |
5628 | 5241 |
i, j, ei: LongInt; |
5624
b6f70f6335ee
Allow hammer to bash mines/barrels too, increase escape time to 3s
nemo
parents:
5612
diff
changeset
|
5242 |
HitGear: PGear; |
3720 | 5243 |
begin |
5244 |
AllInactive := false; |
|
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7270
diff
changeset
|
5245 |
HitGear := Gear^.LinkedGear; |
3720 | 5246 |
dec(Gear^.Timer); |
5624
b6f70f6335ee
Allow hammer to bash mines/barrels too, increase escape time to 3s
nemo
parents:
5612
diff
changeset
|
5247 |
if (HitGear = nil) or (Gear^.Timer = 0) or ((Gear^.Message and gmDestroy) <> 0) then |
5628 | 5248 |
begin |
3720 | 5249 |
DeleteGear(Gear); |
5250 |
exit |
|
5628 | 5251 |
end; |
3720 | 5252 |
|
5253 |
if (Gear^.Timer mod 5) = 0 then |
|
5628 | 5254 |
begin |
3720 | 5255 |
AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust); |
5256 |
||
5628 | 5257 |
i := hwRound(Gear^.X) - HitGear^.Radius + 2; |
5258 |
ei := hwRound(Gear^.X) + HitGear^.Radius - 2; |
|
5259 |
for j := 1 to 4 do DrawExplosion(i - GetRandom(5), hwRound(Gear^.Y) + 6*j, 3); |
|
6011
519f8a58c021
Fix a bunch of warnings (also improves speed a bit in 32 bit code)
unC0Rr
parents:
6002
diff
changeset
|
5260 |
for j := 1 to 4 do DrawExplosion(ei + LongInt(GetRandom(5)), hwRound(Gear^.Y) + 6*j, 3); |
3720 | 5261 |
while i <= ei do |
5628 | 5262 |
begin |
5263 |
for j := 1 to 11 do DrawExplosion(i, hwRound(Gear^.Y) + 3*j, 3); |
|
3720 | 5264 |
inc(i, 1) |
5628 | 5265 |
end; |
3720 | 5266 |
|
5267 |
if CheckLandValue(hwRound(Gear^.X + Gear^.dX + SignAs(_6,Gear^.dX)), hwRound(Gear^.Y + _1_9) |
|
5268 |
, lfIndestructible) then |
|
5628 | 5269 |
begin |
8634
5dcb1dc9e01b
fix portal/hammer interaction, ban freezer from portal
nemo
parents:
8632
diff
changeset
|
5270 |
//Gear^.X := Gear^.X + Gear^.dX; |
5dcb1dc9e01b
fix portal/hammer interaction, ban freezer from portal
nemo
parents:
8632
diff
changeset
|
5271 |
Gear^.Y := Gear^.Y + _1_9 |
5628 | 5272 |
end; |
3720 | 5273 |
end; |
6081
537bbd5c1a62
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects.
nemo
parents:
6011
diff
changeset
|
5274 |
if TestCollisionYwithGear(Gear, 1) <> 0 then |
5628 | 5275 |
begin |
3720 | 5276 |
Gear^.dY := _0; |
5624
b6f70f6335ee
Allow hammer to bash mines/barrels too, increase escape time to 3s
nemo
parents:
5612
diff
changeset
|
5277 |
SetLittle(HitGear^.dX); |
b6f70f6335ee
Allow hammer to bash mines/barrels too, increase escape time to 3s
nemo
parents:
5612
diff
changeset
|
5278 |
HitGear^.dY := _0; |
5628 | 5279 |
end |
3720 | 5280 |
else |
5628 | 5281 |
begin |
8634
5dcb1dc9e01b
fix portal/hammer interaction, ban freezer from portal
nemo
parents:
8632
diff
changeset
|
5282 |
//Gear^.dY := Gear^.dY + cGravity; |
5dcb1dc9e01b
fix portal/hammer interaction, ban freezer from portal
nemo
parents:
8632
diff
changeset
|
5283 |
//Gear^.Y := Gear^.Y + Gear^.dY; |
10354 | 5284 |
if CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y)) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5285 |
Gear^.Timer := 1 |
5628 | 5286 |
end; |
3720 | 5287 |
|
8634
5dcb1dc9e01b
fix portal/hammer interaction, ban freezer from portal
nemo
parents:
8632
diff
changeset
|
5288 |
//Gear^.X := Gear^.X + HitGear^.dX; |
5624
b6f70f6335ee
Allow hammer to bash mines/barrels too, increase escape time to 3s
nemo
parents:
5612
diff
changeset
|
5289 |
HitGear^.X := Gear^.X; |
8634
5dcb1dc9e01b
fix portal/hammer interaction, ban freezer from portal
nemo
parents:
8632
diff
changeset
|
5290 |
HitGear^.Y := Gear^.Y; |
5628 | 5291 |
SetLittle(HitGear^.dY); |
5292 |
HitGear^.Active:= true; |
|
3720 | 5293 |
end; |
5294 |
||
5295 |
procedure doStepHammerHit(Gear: PGear); |
|
8795 | 5296 |
var |
3720 | 5297 |
i, y: LongInt; |
5298 |
ar: TRangeArray; |
|
5299 |
HHGear: PGear; |
|
5300 |
begin |
|
5301 |
i := 0; |
|
4365 | 5302 |
HHGear := Gear^.Hedgehog^.Gear; |
3720 | 5303 |
|
5304 |
y := hwRound(Gear^.Y) - cHHRadius * 2; |
|
5305 |
while y < hwRound(Gear^.Y) do |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5306 |
begin |
3720 | 5307 |
ar[i].Left := hwRound(Gear^.X) - Gear^.Radius - LongInt(GetRandom(2)); |
5308 |
ar[i].Right := hwRound(Gear^.X) + Gear^.Radius + LongInt(GetRandom(2)); |
|
5309 |
inc(y, 2); |
|
5310 |
inc(i) |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5311 |
end; |
3720 | 5312 |
|
5313 |
DrawHLinesExplosions(@ar, 3, hwRound(Gear^.Y) - cHHRadius * 2, 2, Pred(i)); |
|
5314 |
Gear^.dY := HHGear^.dY; |
|
5315 |
DeleteCI(HHGear); |
|
5316 |
||
5317 |
doStepHammerHitWork(Gear); |
|
3821 | 5318 |
Gear^.doStep := @doStepHammerHitWork |
3720 | 5319 |
end; |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5320 |
|
4293
d79ffcdd77df
makes drill attack drills weaker and not affected by wind
Henek
parents:
4282
diff
changeset
|
5321 |
//////////////////////////////////////////////////////////////////////////////// |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5322 |
procedure doStepResurrectorWork(Gear: PGear); |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5323 |
var |
7335 | 5324 |
graves: PGearArrayS; |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5325 |
resgear: PGear; |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5326 |
hh: PHedgehog; |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5327 |
i: LongInt; |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5328 |
begin |
4184
bc2b88eea8c4
fix stray offset in resurrector, make resurrector use time
nemo
parents:
4182
diff
changeset
|
5329 |
if (TurnTimeLeft > 0) then |
bc2b88eea8c4
fix stray offset in resurrector, make resurrector use time
nemo
parents:
4182
diff
changeset
|
5330 |
dec(TurnTimeLeft); |
bc2b88eea8c4
fix stray offset in resurrector, make resurrector use time
nemo
parents:
4182
diff
changeset
|
5331 |
|
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5332 |
AllInactive := false; |
4365 | 5333 |
hh := Gear^.Hedgehog; |
4387 | 5334 |
|
5335 |
// no, you can't do that here |
|
5336 |
{DrawCentered(hwRound(hh^.Gear^.X) + WorldDx, hwRound(hh^.Gear^.Y) + WorldDy - |
|
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5337 |
cHHRadius - 14 - hh^.HealthTagTex^.h, hh^.HealthTagTex); |
4387 | 5338 |
} |
4018
7f2c71638466
burp can always remove this if he doesn't like it. just making it a bit more interesting.
nemo
parents:
4017
diff
changeset
|
5339 |
(*DrawCircle(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Radius, 1.5, 0, 0, $FF, |
7f2c71638466
burp can always remove this if he doesn't like it. just making it a bit more interesting.
nemo
parents:
4017
diff
changeset
|
5340 |
$FF);*) |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5341 |
|
6131 | 5342 |
if ((Gear^.Message and gmUp) <> 0) then |
4017
048bcb8c72ae
Kill off hog immediately on using up health, use more common formatting, call render less often
nemo
parents:
4005
diff
changeset
|
5343 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5344 |
if (GameTicks and $F) <> 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5345 |
exit; |
8795 | 5346 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5347 |
else if (GameTicks and $1FF) <> 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5348 |
exit; |
4017
048bcb8c72ae
Kill off hog immediately on using up health, use more common formatting, call render less often
nemo
parents:
4005
diff
changeset
|
5349 |
|
6131 | 5350 |
if Gear^.Power < 45 then |
4044
de7170e51cc6
Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation
nemo
parents:
4038
diff
changeset
|
5351 |
begin |
4023
8de77872ef21
Resurrector: Levitate hog + show cross
Tobias Neumann <mail@tobias-neumann.eu>
parents:
4021
diff
changeset
|
5352 |
inc(Gear^.Power); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5353 |
if TestCollisionYwithGear(hh^.Gear, -1) = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5354 |
hh^.Gear^.Y := hh^.Gear^.Y - _1; |
4044
de7170e51cc6
Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation
nemo
parents:
4038
diff
changeset
|
5355 |
end; |
de7170e51cc6
Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation
nemo
parents:
4038
diff
changeset
|
5356 |
|
4184
bc2b88eea8c4
fix stray offset in resurrector, make resurrector use time
nemo
parents:
4182
diff
changeset
|
5357 |
graves := GearsNear(Gear^.X, Gear^.Y, gtGrave, Gear^.Radius); |
4024
1ffb84b3823d
Resurrector: respect modified Gear position for resurrection range circle
Tobias Neumann <mail@tobias-neumann.eu>
parents:
4023
diff
changeset
|
5358 |
|
7335 | 5359 |
if graves.size = 0 then |
4044
de7170e51cc6
Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation
nemo
parents:
4038
diff
changeset
|
5360 |
begin |
7053 | 5361 |
StopSoundChan(Gear^.SoundChannel); |
3975
3f605cca9215
Resurrector weapon: do not make it end turn, add description,
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3971
diff
changeset
|
5362 |
Gear^.Timer := 250; |
3f605cca9215
Resurrector weapon: do not make it end turn, add description,
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3971
diff
changeset
|
5363 |
Gear^.doStep := @doStepIdle; |
3f605cca9215
Resurrector weapon: do not make it end turn, add description,
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3971
diff
changeset
|
5364 |
exit; |
4044
de7170e51cc6
Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation
nemo
parents:
4038
diff
changeset
|
5365 |
end; |
de7170e51cc6
Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation
nemo
parents:
4038
diff
changeset
|
5366 |
|
6131 | 5367 |
if ((Gear^.Message and gmAttack) <> 0) and (hh^.Gear^.Health > 0) and (TurnTimeLeft > 0) then |
4044
de7170e51cc6
Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation
nemo
parents:
4038
diff
changeset
|
5368 |
begin |
7721 | 5369 |
if LongInt(graves.size) <= Gear^.Tag then Gear^.Tag:= 0; |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5370 |
dec(hh^.Gear^.Health); |
4017
048bcb8c72ae
Kill off hog immediately on using up health, use more common formatting, call render less often
nemo
parents:
4005
diff
changeset
|
5371 |
if (hh^.Gear^.Health = 0) and (hh^.Gear^.Damage = 0) then |
048bcb8c72ae
Kill off hog immediately on using up health, use more common formatting, call render less often
nemo
parents:
4005
diff
changeset
|
5372 |
hh^.Gear^.Damage:= 1; |
048bcb8c72ae
Kill off hog immediately on using up health, use more common formatting, call render less often
nemo
parents:
4005
diff
changeset
|
5373 |
RenderHealth(hh^); |
7399 | 5374 |
RecountTeamHealth(hh^.Team); |
7335 | 5375 |
inc(graves.ar^[Gear^.Tag]^.Health); |
4265
039b08012887
distribute health evenly amongst graves instead of randomly - avoid situation where a grave stays dead
nemo
parents:
4262
diff
changeset
|
5376 |
inc(Gear^.Tag) |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5377 |
{-for i:= 0 to High(graves) do begin |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5378 |
if hh^.Gear^.Health > 0 then begin |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5379 |
dec(hh^.Gear^.Health); |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5380 |
inc(graves[i]^.Health); |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5381 |
end; |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5382 |
end; -} |
8795 | 5383 |
end |
5384 |
else |
|
4044
de7170e51cc6
Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation
nemo
parents:
4038
diff
changeset
|
5385 |
begin |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5386 |
// now really resurrect the hogs with the hp saved in the graves |
7335 | 5387 |
for i:= 0 to graves.size - 1 do |
5388 |
if graves.ar^[i]^.Health > 0 then |
|
4044
de7170e51cc6
Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation
nemo
parents:
4038
diff
changeset
|
5389 |
begin |
7335 | 5390 |
resgear := AddGear(hwRound(graves.ar^[i]^.X), hwRound(graves.ar^[i]^.Y), gtHedgehog, gstWait, _0, _0, 0); |
5391 |
resgear^.Hedgehog := graves.ar^[i]^.Hedgehog; |
|
5392 |
resgear^.Health := graves.ar^[i]^.Health; |
|
5393 |
PHedgehog(graves.ar^[i]^.Hedgehog)^.Gear := resgear; |
|
7394 | 5394 |
graves.ar^[i]^.Message:= graves.ar^[i]^.Message or gmDestroy; |
7399 | 5395 |
graves.ar^[i]^.Active:= true; |
4372 | 5396 |
RenderHealth(resgear^.Hedgehog^); |
5397 |
RecountTeamHealth(resgear^.Hedgehog^.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:
7007
diff
changeset
|
5398 |
resgear^.Hedgehog^.Effects[heResurrected]:= 1; |
4874 | 5399 |
// only make hat-less hedgehogs look like zombies, preserve existing hats |
7394 | 5400 |
|
4372 | 5401 |
if resgear^.Hedgehog^.Hat = 'NoHat' then |
7754 | 5402 |
LoadHedgehogHat(resgear^.Hedgehog^, 'Reserved/Zombie'); |
4044
de7170e51cc6
Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation
nemo
parents:
4038
diff
changeset
|
5403 |
end; |
4023
8de77872ef21
Resurrector: Levitate hog + show cross
Tobias Neumann <mail@tobias-neumann.eu>
parents:
4021
diff
changeset
|
5404 |
|
8de77872ef21
Resurrector: Levitate hog + show cross
Tobias Neumann <mail@tobias-neumann.eu>
parents:
4021
diff
changeset
|
5405 |
hh^.Gear^.dY := _0; |
4045 | 5406 |
hh^.Gear^.dX := _0; |
4044
de7170e51cc6
Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation
nemo
parents:
4038
diff
changeset
|
5407 |
doStepHedgehogMoving(hh^.Gear); |
7053 | 5408 |
StopSoundChan(Gear^.SoundChannel); |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5409 |
Gear^.Timer := 250; |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5410 |
Gear^.doStep := @doStepIdle; |
4044
de7170e51cc6
Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation
nemo
parents:
4038
diff
changeset
|
5411 |
end |
4017
048bcb8c72ae
Kill off hog immediately on using up health, use more common formatting, call render less often
nemo
parents:
4005
diff
changeset
|
5412 |
//if hh^.Gear^.Health = 0 then doStepHedgehogFree(hh^.Gear); |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5413 |
end; |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5414 |
|
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5415 |
procedure doStepResurrector(Gear: PGear); |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5416 |
var |
7335 | 5417 |
graves: PGearArrayS; |
8730
b39f433f8ab4
at vatten's request. make resurrection always resurrect at least 1 hp out of kindness to noobs who can't be bothered to read tooltips
nemo
parents:
8727
diff
changeset
|
5418 |
hh: PHedgehog; |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5419 |
i: LongInt; |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5420 |
begin |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5421 |
AllInactive := false; |
4044
de7170e51cc6
Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation
nemo
parents:
4038
diff
changeset
|
5422 |
graves := GearsNear(Gear^.X, Gear^.Y, gtGrave, Gear^.Radius); |
de7170e51cc6
Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation
nemo
parents:
4038
diff
changeset
|
5423 |
|
7335 | 5424 |
if graves.size > 0 then |
5425 |
begin |
|
8730
b39f433f8ab4
at vatten's request. make resurrection always resurrect at least 1 hp out of kindness to noobs who can't be bothered to read tooltips
nemo
parents:
8727
diff
changeset
|
5426 |
hh := Gear^.Hedgehog; |
7335 | 5427 |
for i:= 0 to graves.size - 1 do |
4044
de7170e51cc6
Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation
nemo
parents:
4038
diff
changeset
|
5428 |
begin |
7335 | 5429 |
PHedgehog(graves.ar^[i]^.Hedgehog)^.Gear := nil; |
5430 |
graves.ar^[i]^.Health := 0; |
|
4044
de7170e51cc6
Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation
nemo
parents:
4038
diff
changeset
|
5431 |
end; |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5432 |
Gear^.doStep := @doStepResurrectorWork; |
8730
b39f433f8ab4
at vatten's request. make resurrection always resurrect at least 1 hp out of kindness to noobs who can't be bothered to read tooltips
nemo
parents:
8727
diff
changeset
|
5433 |
if ((Gear^.Message and gmAttack) <> 0) and (hh^.Gear^.Health > 0) and (TurnTimeLeft > 0) then |
b39f433f8ab4
at vatten's request. make resurrection always resurrect at least 1 hp out of kindness to noobs who can't be bothered to read tooltips
nemo
parents:
8727
diff
changeset
|
5434 |
begin |
b39f433f8ab4
at vatten's request. make resurrection always resurrect at least 1 hp out of kindness to noobs who can't be bothered to read tooltips
nemo
parents:
8727
diff
changeset
|
5435 |
if LongInt(graves.size) <= Gear^.Tag then Gear^.Tag:= 0; |
b39f433f8ab4
at vatten's request. make resurrection always resurrect at least 1 hp out of kindness to noobs who can't be bothered to read tooltips
nemo
parents:
8727
diff
changeset
|
5436 |
dec(hh^.Gear^.Health); |
b39f433f8ab4
at vatten's request. make resurrection always resurrect at least 1 hp out of kindness to noobs who can't be bothered to read tooltips
nemo
parents:
8727
diff
changeset
|
5437 |
if (hh^.Gear^.Health = 0) and (hh^.Gear^.Damage = 0) then |
b39f433f8ab4
at vatten's request. make resurrection always resurrect at least 1 hp out of kindness to noobs who can't be bothered to read tooltips
nemo
parents:
8727
diff
changeset
|
5438 |
hh^.Gear^.Damage:= 1; |
b39f433f8ab4
at vatten's request. make resurrection always resurrect at least 1 hp out of kindness to noobs who can't be bothered to read tooltips
nemo
parents:
8727
diff
changeset
|
5439 |
RenderHealth(hh^); |
b39f433f8ab4
at vatten's request. make resurrection always resurrect at least 1 hp out of kindness to noobs who can't be bothered to read tooltips
nemo
parents:
8727
diff
changeset
|
5440 |
RecountTeamHealth(hh^.Team); |
b39f433f8ab4
at vatten's request. make resurrection always resurrect at least 1 hp out of kindness to noobs who can't be bothered to read tooltips
nemo
parents:
8727
diff
changeset
|
5441 |
inc(graves.ar^[Gear^.Tag]^.Health); |
b39f433f8ab4
at vatten's request. make resurrection always resurrect at least 1 hp out of kindness to noobs who can't be bothered to read tooltips
nemo
parents:
8727
diff
changeset
|
5442 |
inc(Gear^.Tag) |
8795 | 5443 |
end |
5444 |
end |
|
5445 |
else |
|
4044
de7170e51cc6
Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation
nemo
parents:
4038
diff
changeset
|
5446 |
begin |
7053 | 5447 |
StopSoundChan(Gear^.SoundChannel); |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5448 |
Gear^.Timer := 250; |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5449 |
Gear^.doStep := @doStepIdle; |
4044
de7170e51cc6
Check for collision with surfaces above when levitating hog, use more typical drawing syntax for the resurrector wep, restore typical indentation
nemo
parents:
4038
diff
changeset
|
5450 |
end |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5451 |
end; |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
5452 |
|
4293
d79ffcdd77df
makes drill attack drills weaker and not affected by wind
Henek
parents:
4282
diff
changeset
|
5453 |
//////////////////////////////////////////////////////////////////////////////// |
4313
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5454 |
procedure doStepNapalmBomb(Gear: PGear); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5455 |
var |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5456 |
i, gX, gY: LongInt; |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5457 |
dX, dY: hwFloat; |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5458 |
begin |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5459 |
AllInactive := false; |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5460 |
doStepFallingGear(Gear); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5461 |
if (Gear^.Timer > 0) and ((Gear^.State and gstCollision) <> 0) then |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5462 |
begin |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
5463 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 10, Gear^.Hedgehog, EXPLAutoSound); |
4313
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5464 |
gX := hwRound(Gear^.X); |
8795 | 5465 |
gY := hwRound(Gear^.Y); |
4313
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5466 |
for i:= 0 to 10 do |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5467 |
begin |
7001 | 5468 |
dX := AngleCos(i * 2) * ((_0_1*(i div 5))) * (GetRandomf + _1); |
5469 |
dY := AngleSin(i * 8) * _0_5 * (GetRandomf + _1); |
|
4313
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5470 |
AddGear(gX, gY, gtFlame, 0, dX, dY, 0); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5471 |
AddGear(gX, gY, gtFlame, 0, dX, -dY, 0); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5472 |
AddGear(gX, gY, gtFlame, 0, -dX, dY, 0); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5473 |
AddGear(gX, gY, gtFlame, 0, -dX, -dY, 0); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5474 |
end; |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5475 |
DeleteGear(Gear); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5476 |
exit |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5477 |
end; |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5478 |
if (Gear^.Timer = 0) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5479 |
begin |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
5480 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 10, Gear^.Hedgehog, EXPLAutoSound); |
4313
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5481 |
for i:= -19 to 19 do |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5482 |
FollowGear := AddGear(hwRound(Gear^.X) + i div 3, hwRound(Gear^.Y), gtFlame, 0, _0_001 * i, _0, 0); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5483 |
DeleteGear(Gear); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5484 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5485 |
end; |
4313
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5486 |
if (GameTicks and $3F) = 0 then |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5487 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5488 |
dec(Gear^.Timer) |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5489 |
end; |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5490 |
|
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
5491 |
//////////////////////////////////////////////////////////////////////////////// |
4881
35e6269227b6
still in developement take on adding structures, working hiding of hogs and ejecting them later.
Henek
parents:
4880
diff
changeset
|
5492 |
procedure doStepStructure(Gear: PGear); |
8795 | 5493 |
var |
6491 | 5494 |
x, y: LongInt; |
6472 | 5495 |
HH: PHedgehog; |
5496 |
t: PGear; |
|
4881
35e6269227b6
still in developement take on adding structures, working hiding of hogs and ejecting them later.
Henek
parents:
4880
diff
changeset
|
5497 |
begin |
6472 | 5498 |
HH:= Gear^.Hedgehog; |
5499 |
||
5313
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
5500 |
if (Gear^.State and gstMoving) <> 0 then |
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
5501 |
begin |
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9289
diff
changeset
|
5502 |
AddCI(Gear); |
5313
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
5503 |
Gear^.dX:= _0; |
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
5504 |
Gear^.dY:= _0; |
6450 | 5505 |
Gear^.State:= Gear^.State and (not gstMoving); |
5313
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
5506 |
end; |
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
5507 |
|
6472 | 5508 |
dec(Gear^.Health, Gear^.Damage); |
5509 |
Gear^.Damage:= 0; |
|
8795 | 5510 |
|
6472 | 5511 |
if Gear^.Pos = 1 then |
4881
35e6269227b6
still in developement take on adding structures, working hiding of hogs and ejecting them later.
Henek
parents:
4880
diff
changeset
|
5512 |
begin |
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9289
diff
changeset
|
5513 |
AddCI(Gear); |
6472 | 5514 |
AfterAttack; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5515 |
if Gear = CurAmmoGear then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5516 |
CurAmmoGear:= nil; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5517 |
if HH^.Gear <> nil then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5518 |
HideHog(HH); |
6472 | 5519 |
Gear^.Pos:= 2 |
5520 |
end; |
|
8795 | 5521 |
|
6472 | 5522 |
if Gear^.Pos = 2 then |
5523 |
begin |
|
5524 |
if ((GameTicks mod 100) = 0) and (Gear^.Timer < 1000) then |
|
5279 | 5525 |
begin |
6472 | 5526 |
if (Gear^.Timer mod 10) = 0 then |
5527 |
begin |
|
5528 |
DeleteCI(Gear); |
|
5529 |
Gear^.Y:= Gear^.Y - _0_5; |
|
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9289
diff
changeset
|
5530 |
AddCI(Gear); |
6472 | 5531 |
end; |
5532 |
inc(Gear^.Timer); |
|
5279 | 5533 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5534 |
if Gear^.Tag <= TotalRounds then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5535 |
Gear^.Pos:= 3; |
4881
35e6269227b6
still in developement take on adding structures, working hiding of hogs and ejecting them later.
Henek
parents:
4880
diff
changeset
|
5536 |
end; |
8795 | 5537 |
|
6472 | 5538 |
if Gear^.Pos = 3 then |
5539 |
if Gear^.Timer < 1000 then |
|
5540 |
begin |
|
5541 |
if (Gear^.Timer mod 10) = 0 then |
|
5542 |
begin |
|
5543 |
DeleteCI(Gear); |
|
5544 |
Gear^.Y:= Gear^.Y - _0_5; |
|
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9289
diff
changeset
|
5545 |
AddCI(Gear); |
6472 | 5546 |
end; |
5547 |
inc(Gear^.Timer); |
|
5548 |
end |
|
5549 |
else |
|
5279 | 5550 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5551 |
if HH^.GearHidden <> nil then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5552 |
RestoreHog(HH); |
6472 | 5553 |
Gear^.Pos:= 4; |
5279 | 5554 |
end; |
8795 | 5555 |
|
6472 | 5556 |
if Gear^.Pos = 4 then |
6473 | 5557 |
if ((GameTicks mod 1000) = 0) and ((GameFlags and gfInvulnerable) = 0) then |
6472 | 5558 |
begin |
5559 |
t:= GearsList; |
|
5560 |
while t <> nil do |
|
5561 |
begin |
|
5562 |
if (t^.Kind = gtHedgehog) and (t^.Hedgehog^.Team^.Clan = HH^.Team^.Clan) then |
|
9685
7d925e82e572
Tweak trophyrace to work better w/ skip (probably, needs testing), drop Invulnerable in favour of effects - heInvulnerable is already in effects,
nemo
parents:
9565
diff
changeset
|
5563 |
t^.Hedgehog^.Effects[heInvulnerable]:= 1; |
6472 | 5564 |
t:= t^.NextGear; |
5565 |
end; |
|
5566 |
end; |
|
8795 | 5567 |
|
5279 | 5568 |
if Gear^.Health <= 0 then |
5569 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5570 |
if HH^.GearHidden <> nil then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5571 |
RestoreHog(HH); |
8795 | 5572 |
|
4881
35e6269227b6
still in developement take on adding structures, working hiding of hogs and ejecting them later.
Henek
parents:
4880
diff
changeset
|
5573 |
x := hwRound(Gear^.X); |
35e6269227b6
still in developement take on adding structures, working hiding of hogs and ejecting them later.
Henek
parents:
4880
diff
changeset
|
5574 |
y := hwRound(Gear^.Y); |
35e6269227b6
still in developement take on adding structures, working hiding of hogs and ejecting them later.
Henek
parents:
4880
diff
changeset
|
5575 |
|
5279 | 5576 |
DeleteCI(Gear); |
4881
35e6269227b6
still in developement take on adding structures, working hiding of hogs and ejecting them later.
Henek
parents:
4880
diff
changeset
|
5577 |
DeleteGear(Gear); |
35e6269227b6
still in developement take on adding structures, working hiding of hogs and ejecting them later.
Henek
parents:
4880
diff
changeset
|
5578 |
|
35e6269227b6
still in developement take on adding structures, working hiding of hogs and ejecting them later.
Henek
parents:
4880
diff
changeset
|
5579 |
doMakeExplosion(x, y, 50, CurrentHedgehog, EXPLAutoSound); |
5197
9fa96377a69c
Basic TARDIS implementation. Still needs proper animation, and probably a check to force reappearance on death of last team mate
nemo
parents:
5186
diff
changeset
|
5580 |
end; |
5013 | 5581 |
end; |
5582 |
||
5313
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
5583 |
//////////////////////////////////////////////////////////////////////////////// |
5706 | 5584 |
(* |
8795 | 5585 |
TARDIS needs |
5706 | 5586 |
Warp in. Pos = 1 |
5587 |
Pause. Pos = 2 |
|
5588 |
Hide gear (TARDIS hedgehog was nil) |
|
5589 |
Warp out. Pos = 3 |
|
5590 |
... idle active for some time period ... Pos = 4 |
|
5591 |
Warp in. Pos = 1 |
|
5592 |
Pause. Pos = 2 |
|
5593 |
Restore gear (TARDIS hedgehog was not nil) |
|
5594 |
Warp out. Pos = 3 |
|
5595 |
*) |
|
5596 |
||
5597 |
procedure doStepTardisWarp(Gear: PGear); |
|
5598 |
var HH: PHedgehog; |
|
5599 |
i,j,cnt: LongWord; |
|
5197
9fa96377a69c
Basic TARDIS implementation. Still needs proper animation, and probably a check to force reappearance on death of last team mate
nemo
parents:
5186
diff
changeset
|
5600 |
begin |
5706 | 5601 |
HH:= Gear^.Hedgehog; |
5602 |
if Gear^.Pos = 2 then |
|
5603 |
begin |
|
7053 | 5604 |
StopSoundChan(Gear^.SoundChannel); |
5706 | 5605 |
if (Gear^.Timer = 0) then |
5197
9fa96377a69c
Basic TARDIS implementation. Still needs proper animation, and probably a check to force reappearance on death of last team mate
nemo
parents:
5186
diff
changeset
|
5606 |
begin |
5715
59a8dd33f274
Restore gear ASAP, add denied sound for illegal activation without wasting ammo.
nemo
parents:
5710
diff
changeset
|
5607 |
if (HH^.Gear <> nil) and (HH^.Gear^.State and gstInvisible = 0) then |
5197
9fa96377a69c
Basic TARDIS implementation. Still needs proper animation, and probably a check to force reappearance on death of last team mate
nemo
parents:
5186
diff
changeset
|
5608 |
begin |
5935 | 5609 |
AfterAttack; |
5706 | 5610 |
if Gear = CurAmmoGear then CurAmmoGear := nil; |
8795 | 5611 |
if (HH^.Gear^.Damage = 0) and (HH^.Gear^.Health > 0) and |
5977
0b1bfdd95310
Disable a bit of code from revision 4 that I'm pretty sure is not hit anymore, or we'd end up with plenty of doubled graves at a minimum. Also, clear gstWinner/gstLoser along with gstWait - still need to figure out why exactly those aren't rendering anymore though.
nemo
parents:
5972
diff
changeset
|
5612 |
((Gear^.State and (gstMoving or gstHHDeath or gstHHGone)) = 0) then |
0b1bfdd95310
Disable a bit of code from revision 4 that I'm pretty sure is not hit anymore, or we'd end up with plenty of doubled graves at a minimum. Also, clear gstWinner/gstLoser along with gstWait - still need to figure out why exactly those aren't rendering anymore though.
nemo
parents:
5972
diff
changeset
|
5613 |
HideHog(HH) |
5706 | 5614 |
end |
5738 | 5615 |
//else if (HH^.Gear <> nil) and (HH^.Gear^.State and gstInvisible <> 0) then |
5616 |
else if (HH^.GearHidden <> nil) then// and (HH^.Gear^.State and gstInvisible <> 0) then |
|
5807
5c8fe58dead5
Define 2 script callbacks to notify of hog vanishment
nemo
parents:
5806
diff
changeset
|
5617 |
RestoreHog(HH) |
5706 | 5618 |
end; |
5619 |
||
5971 | 5620 |
inc(Gear^.Timer); |
5706 | 5621 |
if (Gear^.Timer > 2000) and ((GameTicks mod 2000) = 1000) then |
5622 |
begin |
|
5728 | 5623 |
Gear^.SoundChannel := LoopSound(sndTardis); |
5624 |
Gear^.Pos:= 3 |
|
5625 |
end |
|
5706 | 5626 |
end; |
5627 |
||
6131 | 5628 |
if (Gear^.Pos = 1) and (GameTicks and $1F = 0) and (Gear^.Power < 255) then |
5935 | 5629 |
begin |
5630 |
inc(Gear^.Power); |
|
8795 | 5631 |
if (Gear^.Power = 172) and (HH^.Gear <> nil) and |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5632 |
(HH^.Gear^.Damage = 0) and (HH^.Gear^.Health > 0) and |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5633 |
((HH^.Gear^.State and (gstMoving or gstHHDeath or gstHHGone)) = 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5634 |
with HH^.Gear^ do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5635 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5636 |
State:= State or gstAnimation; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5637 |
Tag:= 2; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5638 |
Timer:= 0; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5639 |
Pos:= 0 |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5640 |
end |
5935 | 5641 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5642 |
if (Gear^.Pos = 3) and (GameTicks and $1F = 0) and (Gear^.Power > 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5643 |
dec(Gear^.Power); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5644 |
if (Gear^.Pos = 1) and (Gear^.Power = 255) and ((GameTicks mod 2000) = 1000) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5645 |
Gear^.Pos:= 2; |
5706 | 5646 |
if (Gear^.Pos = 3) and (Gear^.Power = 0) then |
5647 |
begin |
|
7053 | 5648 |
StopSoundChan(Gear^.SoundChannel); |
5710 | 5649 |
if HH^.GearHidden = nil then |
5650 |
begin |
|
5651 |
DeleteGear(Gear); |
|
5652 |
exit |
|
5653 |
end; |
|
5706 | 5654 |
Gear^.Pos:= 4; |
5655 |
// This condition might need tweaking |
|
8632
b5ed76d2a1f9
Make hogs thaw only on enemy turns, make timebox counter decrement only on your turn, adjust knock for frozen hogs, increase damage on frozen hogs, make freezer fuel only reduce when not adjusting angle.
nemo
parents:
8628
diff
changeset
|
5656 |
Gear^.Timer:= GetRandom(cHedgehogTurnTime*TeamsCount)+cHedgehogTurnTime |
5706 | 5657 |
end; |
5658 |
||
5659 |
if (Gear^.Pos = 4) then |
|
5660 |
begin |
|
5661 |
cnt:= 0; |
|
5662 |
for j:= 0 to Pred(HH^.Team^.Clan^.TeamsNumber) do |
|
9470 | 5663 |
with HH^.Team^.Clan^.Teams[j]^ do |
5664 |
for i:= 0 to Pred(HedgehogsNumber) do |
|
5665 |
if (Hedgehogs[i].Gear <> nil) |
|
5666 |
and ((Hedgehogs[i].Gear^.State and gstDrowning) = 0) |
|
5667 |
and (Hedgehogs[i].Gear^.Health > Hedgehogs[i].Gear^.Damage) then |
|
5668 |
inc(cnt); |
|
5706 | 5669 |
if (cnt = 0) or SuddenDeathDmg or (Gear^.Timer = 0) then |
5197
9fa96377a69c
Basic TARDIS implementation. Still needs proper animation, and probably a check to force reappearance on death of last team mate
nemo
parents:
5186
diff
changeset
|
5670 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5671 |
if HH^.GearHidden <> nil then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5672 |
FindPlace(HH^.GearHidden, false, 0, LAND_WIDTH,true); |
8795 | 5673 |
|
6131 | 5674 |
if HH^.GearHidden <> nil then |
5197
9fa96377a69c
Basic TARDIS implementation. Still needs proper animation, and probably a check to force reappearance on death of last team mate
nemo
parents:
5186
diff
changeset
|
5675 |
begin |
5738 | 5676 |
Gear^.X:= HH^.GearHidden^.X; |
5677 |
Gear^.Y:= HH^.GearHidden^.Y; |
|
7092
c9ca770fd7fc
Add an emergency return to the timebox in the case of death of rest of team. Also add a small visual effect to AI survival
nemo
parents:
7068
diff
changeset
|
5678 |
end; |
c9ca770fd7fc
Add an emergency return to the timebox in the case of death of rest of team. Also add a small visual effect to AI survival
nemo
parents:
7068
diff
changeset
|
5679 |
Gear^.Timer:= 0; |
c9ca770fd7fc
Add an emergency return to the timebox in the case of death of rest of team. Also add a small visual effect to AI survival
nemo
parents:
7068
diff
changeset
|
5680 |
|
c9ca770fd7fc
Add an emergency return to the timebox in the case of death of rest of team. Also add a small visual effect to AI survival
nemo
parents:
7068
diff
changeset
|
5681 |
if (HH^.GearHidden <> nil) and (cnt = 0) then // do an emergency jump back in this case. the team needs you! |
c9ca770fd7fc
Add an emergency return to the timebox in the case of death of rest of team. Also add a small visual effect to AI survival
nemo
parents:
7068
diff
changeset
|
5682 |
begin |
c9ca770fd7fc
Add an emergency return to the timebox in the case of death of rest of team. Also add a small visual effect to AI survival
nemo
parents:
7068
diff
changeset
|
5683 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtExplosion); |
c9ca770fd7fc
Add an emergency return to the timebox in the case of death of rest of team. Also add a small visual effect to AI survival
nemo
parents:
7068
diff
changeset
|
5684 |
Gear^.Pos:= 2; |
c9ca770fd7fc
Add an emergency return to the timebox in the case of death of rest of team. Also add a small visual effect to AI survival
nemo
parents:
7068
diff
changeset
|
5685 |
Gear^.Power:= 255; |
c9ca770fd7fc
Add an emergency return to the timebox in the case of death of rest of team. Also add a small visual effect to AI survival
nemo
parents:
7068
diff
changeset
|
5686 |
end |
c9ca770fd7fc
Add an emergency return to the timebox in the case of death of rest of team. Also add a small visual effect to AI survival
nemo
parents:
7068
diff
changeset
|
5687 |
else begin |
c9ca770fd7fc
Add an emergency return to the timebox in the case of death of rest of team. Also add a small visual effect to AI survival
nemo
parents:
7068
diff
changeset
|
5688 |
Gear^.SoundChannel := LoopSound(sndTardis); |
c9ca770fd7fc
Add an emergency return to the timebox in the case of death of rest of team. Also add a small visual effect to AI survival
nemo
parents:
7068
diff
changeset
|
5689 |
Gear^.Pos:= 1; |
c9ca770fd7fc
Add an emergency return to the timebox in the case of death of rest of team. Also add a small visual effect to AI survival
nemo
parents:
7068
diff
changeset
|
5690 |
Gear^.Power:= 0; |
5706 | 5691 |
end |
5197
9fa96377a69c
Basic TARDIS implementation. Still needs proper animation, and probably a check to force reappearance on death of last team mate
nemo
parents:
5186
diff
changeset
|
5692 |
end |
8632
b5ed76d2a1f9
Make hogs thaw only on enemy turns, make timebox counter decrement only on your turn, adjust knock for frozen hogs, increase damage on frozen hogs, make freezer fuel only reduce when not adjusting angle.
nemo
parents:
8628
diff
changeset
|
5693 |
else if (CurrentHedgehog^.Team^.Clan = Gear^.Hedgehog^.Team^.Clan) then dec(Gear^.Timer) |
5706 | 5694 |
end; |
5695 |
||
5696 |
end; |
|
5697 |
||
5698 |
procedure doStepTardis(Gear: PGear); |
|
5699 |
var i,j,cnt: LongWord; |
|
5700 |
HH: PHedgehog; |
|
5701 |
begin |
|
5702 |
(* |
|
5703 |
Conditions for not activating. |
|
5704 |
1. Hog is last of his clan |
|
5705 |
2. Sudden Death is in play |
|
5706 |
3. Hog is a king |
|
5707 |
*) |
|
5708 |
HH:= Gear^.Hedgehog; |
|
6131 | 5709 |
if HH^.Gear <> nil then |
5706 | 5710 |
if (HH^.Gear = nil) or (HH^.King) or (SuddenDeathDmg) then |
5711 |
begin |
|
6131 | 5712 |
if HH^.Gear <> nil then |
5977
0b1bfdd95310
Disable a bit of code from revision 4 that I'm pretty sure is not hit anymore, or we'd end up with plenty of doubled graves at a minimum. Also, clear gstWinner/gstLoser along with gstWait - still need to figure out why exactly those aren't rendering anymore though.
nemo
parents:
5972
diff
changeset
|
5713 |
begin |
6450 | 5714 |
HH^.Gear^.Message := HH^.Gear^.Message and (not gmAttack); |
5715 |
HH^.Gear^.State:= HH^.Gear^.State and (not gstAttacking); |
|
5977
0b1bfdd95310
Disable a bit of code from revision 4 that I'm pretty sure is not hit anymore, or we'd end up with plenty of doubled graves at a minimum. Also, clear gstWinner/gstLoser along with gstWait - still need to figure out why exactly those aren't rendering anymore though.
nemo
parents:
5972
diff
changeset
|
5716 |
end; |
5715
59a8dd33f274
Restore gear ASAP, add denied sound for illegal activation without wasting ammo.
nemo
parents:
5710
diff
changeset
|
5717 |
PlaySound(sndDenied); |
5706 | 5718 |
DeleteGear(gear); |
5719 |
exit |
|
5720 |
end; |
|
5721 |
cnt:= 0; |
|
5722 |
for j:= 0 to Pred(HH^.Team^.Clan^.TeamsNumber) do |
|
5723 |
for i:= 0 to Pred(HH^.Team^.Clan^.Teams[j]^.HedgehogsNumber) do |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5724 |
if (HH^.Team^.Clan^.Teams[j]^.Hedgehogs[i].Gear <> nil) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5725 |
and ((HH^.Team^.Clan^.Teams[j]^.Hedgehogs[i].Gear^.State and gstDrowning) = 0) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5726 |
and (HH^.Team^.Clan^.Teams[j]^.Hedgehogs[i].Gear^.Health > HH^.Team^.Clan^.Teams[j]^.Hedgehogs[i].Gear^.Damage) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5727 |
inc(cnt); |
5706 | 5728 |
if cnt < 2 then |
5729 |
begin |
|
6131 | 5730 |
if HH^.Gear <> nil then |
5977
0b1bfdd95310
Disable a bit of code from revision 4 that I'm pretty sure is not hit anymore, or we'd end up with plenty of doubled graves at a minimum. Also, clear gstWinner/gstLoser along with gstWait - still need to figure out why exactly those aren't rendering anymore though.
nemo
parents:
5972
diff
changeset
|
5731 |
begin |
6450 | 5732 |
HH^.Gear^.Message := HH^.Gear^.Message and (not gmAttack); |
5733 |
HH^.Gear^.State:= HH^.Gear^.State and (not gstAttacking); |
|
5977
0b1bfdd95310
Disable a bit of code from revision 4 that I'm pretty sure is not hit anymore, or we'd end up with plenty of doubled graves at a minimum. Also, clear gstWinner/gstLoser along with gstWait - still need to figure out why exactly those aren't rendering anymore though.
nemo
parents:
5972
diff
changeset
|
5734 |
end; |
0b1bfdd95310
Disable a bit of code from revision 4 that I'm pretty sure is not hit anymore, or we'd end up with plenty of doubled graves at a minimum. Also, clear gstWinner/gstLoser along with gstWait - still need to figure out why exactly those aren't rendering anymore though.
nemo
parents:
5972
diff
changeset
|
5735 |
PlaySound(sndDenied); |
0b1bfdd95310
Disable a bit of code from revision 4 that I'm pretty sure is not hit anymore, or we'd end up with plenty of doubled graves at a minimum. Also, clear gstWinner/gstLoser along with gstWait - still need to figure out why exactly those aren't rendering anymore though.
nemo
parents:
5972
diff
changeset
|
5736 |
DeleteGear(gear); |
0b1bfdd95310
Disable a bit of code from revision 4 that I'm pretty sure is not hit anymore, or we'd end up with plenty of doubled graves at a minimum. Also, clear gstWinner/gstLoser along with gstWait - still need to figure out why exactly those aren't rendering anymore though.
nemo
parents:
5972
diff
changeset
|
5737 |
exit |
5706 | 5738 |
end; |
5728 | 5739 |
Gear^.SoundChannel := LoopSound(sndTardis); |
5706 | 5740 |
Gear^.doStep:= @doStepTardisWarp |
5197
9fa96377a69c
Basic TARDIS implementation. Still needs proper animation, and probably a check to force reappearance on death of last team mate
nemo
parents:
5186
diff
changeset
|
5741 |
end; |
5313
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
5742 |
|
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
5743 |
//////////////////////////////////////////////////////////////////////////////// |
5e18eaef65d0
now scripts can create unique crates: dummy (empty) crates and booby traps. scripts can also set health crate values
Henek
parents:
5298
diff
changeset
|
5744 |
|
7007 | 5745 |
(* |
5746 |
WIP. The ice gun will have the following effects. It has been proposed by sheepluva that it take the appearance of a large freezer |
|
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:
7007
diff
changeset
|
5747 |
spewing ice cubes. The cubes will be visual gears only. The scatter from them and the impact snow dust should help hide imprecisions in things like the GearsNear effect. |
7007 | 5748 |
For now we assume a "ray" like a deagle projected out from the gun. |
8795 | 5749 |
All these effects assume the ray's angle is not changed and that the target type was unchanged over a number of ticks. This is a simplifying assumption for "gun was applying freezing effect to the same target". |
7007 | 5750 |
* When fired at water a layer of ice textured land is added above the water. |
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
|
5751 |
* When fired at non-ice land (land and lfLandMask and not lfIce) the land is overlaid with a thin layer of ice textured land around that point (say, 1 or 2px into land, 1px above). For attractiveness, a slope would probably be needed. |
7007 | 5752 |
* When fired at a hog (land and $00FF <> 0), while the hog is targetted, the hog's state is set to frozen. As long as the gun is on the hog, a frozen hog sprite creeps up from the feet to the head. If the effect is interrupted before reaching the top, the freezing state is cleared. |
5753 |
A frozen hog will animate differently. To be decided, but possibly in a similar fashion to a grave when it comes to explosions. The hog might (possibly) not be damaged by explosions. This might make freezing potentially useful for friendlies in a bad position. It might be better to allow damage though. |
|
5754 |
A frozen hog stays frozen for a certain number of turns. Each turn the frozen overlay becomes fainter, until it fades and the hog animates normally again. |
|
5755 |
*) |
|
8548 | 5756 |
|
5757 |
||
5758 |
procedure updateFuel(Gear: PGear); |
|
8795 | 5759 |
var |
8548 | 5760 |
t:LongInt; |
5761 |
begin |
|
5762 |
t:= Gear^.Health div 10; |
|
5763 |
if (t <> Gear^.Damage) and ((GameTicks and $3F) = 0) then |
|
5764 |
begin |
|
5765 |
Gear^.Damage:= t; |
|
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:
10597
diff
changeset
|
5766 |
FreeAndNilTexture(Gear^.Tex); |
10123 | 5767 |
Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ansistring(': ' + inttostr(t) + |
5768 |
'%'), cWhiteColor, fntSmall) |
|
8548 | 5769 |
end; |
8934
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5770 |
if Gear^.Message and (gmUp or gmDown) <> 0 then |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5771 |
begin |
9072 | 5772 |
StopSoundChan(Gear^.SoundChannel); |
5773 |
Gear^.SoundChannel:= -1; |
|
8934
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5774 |
if GameTicks mod 40 = 0 then dec(Gear^.Health) |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5775 |
end |
10015 | 5776 |
else |
9072 | 5777 |
begin |
5778 |
if Gear^.SoundChannel = -1 then |
|
5779 |
Gear^.SoundChannel := LoopSound(sndIceBeam); |
|
5780 |
if GameTicks mod 10 = 0 then dec(Gear^.Health) |
|
5781 |
end |
|
8548 | 5782 |
end; |
5783 |
||
5784 |
||
5785 |
procedure updateTarget(Gear:PGear; newX, newY:HWFloat); |
|
8773 | 5786 |
// var |
5787 |
// iter:PGear; |
|
8548 | 5788 |
begin |
5789 |
with Gear^ do |
|
5790 |
begin |
|
5791 |
dX:= newX; |
|
5792 |
dY:= newY; |
|
5793 |
Pos:= 0; |
|
5794 |
Target.X:= NoPointX; |
|
5795 |
LastDamage:= nil; |
|
5796 |
X:= Hedgehog^.Gear^.X; |
|
5797 |
Y:= Hedgehog^.Gear^.Y; |
|
5798 |
end; |
|
5799 |
end; |
|
5800 |
||
7007 | 5801 |
procedure doStepIceGun(Gear: PGear); |
9145 | 5802 |
const iceWaitCollision = 0; |
5803 |
const iceCollideWithGround = 1; |
|
8773 | 5804 |
//const iceWaitNextTarget:Longint = 2; |
5805 |
//const iceCollideWithHog:Longint = 4; |
|
9145 | 5806 |
const iceCollideWithWater = 5; |
8773 | 5807 |
//const waterFreezingTime:Longint = 500; |
9145 | 5808 |
const groundFreezingTime = 1000; |
8601
7668f92734b8
Make refactoring. Remove DrawIce function
Urbertar@gmail.com
parents:
8599
diff
changeset
|
5809 |
const iceRadius = 32; |
8602 | 5810 |
const iceHeight = 40; |
7716 | 5811 |
var |
9026
f6074540bab2
Add gstFrozen state to mines/gears in range on frozen land creation, and set the mines to dud state. gstFrozen does nothing yet. Visually or otherwise.
nemo
parents:
8993
diff
changeset
|
5812 |
HHGear, iter: PGear; |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
5813 |
landRect: TSDL_Rect; |
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:
7007
diff
changeset
|
5814 |
ndX, ndY: hwFloat; |
9137
d987230b85ed
fixed all engine compilation hints and notes (that I could see)
sheepluva
parents:
9080
diff
changeset
|
5815 |
i, t, gX, gY: LongInt; |
7335 | 5816 |
hogs: PGearArrayS; |
8934
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5817 |
vg: PVisualGear; |
7007 | 5818 |
begin |
7093 | 5819 |
HHGear := Gear^.Hedgehog^.Gear; |
9356 | 5820 |
if (Gear^.Message and gmAttack <> 0) or (Gear^.Health = 0) or (HHGear = nil) or ((HHGear^.State and gstHHDriven) = 0) or (HHGear^.dX.QWordValue > 4294967) then |
7093 | 5821 |
begin |
9072 | 5822 |
StopSoundChan(Gear^.SoundChannel); |
7093 | 5823 |
DeleteGear(Gear); |
5824 |
AfterAttack; |
|
5825 |
exit |
|
8934
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5826 |
end; |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5827 |
updateFuel(Gear); |
8548 | 5828 |
|
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:
7007
diff
changeset
|
5829 |
with Gear^ do |
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:
7007
diff
changeset
|
5830 |
begin |
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:
7007
diff
changeset
|
5831 |
HedgehogChAngle(HHGear); |
7093 | 5832 |
ndX:= SignAs(AngleSin(HHGear^.Angle), HHGear^.dX) * _4; |
5833 |
ndY:= -AngleCos(HHGear^.Angle) * _4; |
|
8795 | 5834 |
if (ndX <> dX) or (ndY <> dY) or |
5835 |
((Target.X <> NoPointX) and (Target.X and LAND_WIDTH_MASK = 0) and |
|
10582 | 5836 |
(Target.Y and LAND_HEIGHT_MASK = 0) and ((Land[Target.Y, Target.X] = 0)) and |
5837 |
(not CheckCoordInWater(Target.X, Target.Y))) then |
|
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:
7007
diff
changeset
|
5838 |
begin |
8812
fdac638c6f9a
oups. reused same variable twice. my bad. You know, maybe somewhere in uVariables or uGearsList should define what we use Gear variables for in each gear
nemo
parents:
8795
diff
changeset
|
5839 |
updateTarget(Gear, ndX, ndY); |
fdac638c6f9a
oups. reused same variable twice. my bad. You know, maybe somewhere in uVariables or uGearsList should define what we use Gear variables for in each gear
nemo
parents:
8795
diff
changeset
|
5840 |
Timer := iceWaitCollision; |
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:
7007
diff
changeset
|
5841 |
end |
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:
7007
diff
changeset
|
5842 |
else |
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:
7007
diff
changeset
|
5843 |
begin |
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:
7007
diff
changeset
|
5844 |
X:= X + dX; |
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:
7007
diff
changeset
|
5845 |
Y:= Y + dY; |
7093 | 5846 |
gX:= hwRound(X); |
8795 | 5847 |
gY:= hwRound(Y); |
8812
fdac638c6f9a
oups. reused same variable twice. my bad. You know, maybe somewhere in uVariables or uGearsList should define what we use Gear variables for in each gear
nemo
parents:
8795
diff
changeset
|
5848 |
if Target.X = NoPointX then t:= hwRound(hwSqr(X-HHGear^.X)+hwSqr(Y-HHGear^.Y)); |
8548 | 5849 |
|
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:
7007
diff
changeset
|
5850 |
if Target.X <> NoPointX then |
8812
fdac638c6f9a
oups. reused same variable twice. my bad. You know, maybe somewhere in uVariables or uGearsList should define what we use Gear variables for in each gear
nemo
parents:
8795
diff
changeset
|
5851 |
begin |
9041
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5852 |
CheckCollision(Gear); |
8548 | 5853 |
if (State and gstCollision) <> 0 then |
5854 |
begin |
|
8812
fdac638c6f9a
oups. reused same variable twice. my bad. You know, maybe somewhere in uVariables or uGearsList should define what we use Gear variables for in each gear
nemo
parents:
8795
diff
changeset
|
5855 |
if Timer = iceWaitCollision then |
fdac638c6f9a
oups. reused same variable twice. my bad. You know, maybe somewhere in uVariables or uGearsList should define what we use Gear variables for in each gear
nemo
parents:
8795
diff
changeset
|
5856 |
begin |
fdac638c6f9a
oups. reused same variable twice. my bad. You know, maybe somewhere in uVariables or uGearsList should define what we use Gear variables for in each gear
nemo
parents:
8795
diff
changeset
|
5857 |
Timer := iceCollideWithGround; |
fdac638c6f9a
oups. reused same variable twice. my bad. You know, maybe somewhere in uVariables or uGearsList should define what we use Gear variables for in each gear
nemo
parents:
8795
diff
changeset
|
5858 |
Power := GameTicks; |
fdac638c6f9a
oups. reused same variable twice. my bad. You know, maybe somewhere in uVariables or uGearsList should define what we use Gear variables for in each gear
nemo
parents:
8795
diff
changeset
|
5859 |
end |
8795 | 5860 |
end |
10582 | 5861 |
else if CheckCoordInWater(Target.X, Target.Y) or |
5862 |
((Target.X and LAND_WIDTH_MASK = 0) and |
|
5863 |
(Target.Y and LAND_HEIGHT_MASK = 0) and |
|
5864 |
(Land[Target.Y, Target.X] = lfIce) and |
|
5865 |
((Target.Y+iceHeight+5 > cWaterLine) or |
|
5866 |
((WorldEdge = weSea) and |
|
5867 |
((Target.X+iceHeight+5 > LongInt(rightX)) or |
|
5868 |
(Target.X-iceHeight-5 < LongInt(leftX))))) |
|
5869 |
) then |
|
8602 | 5870 |
begin |
8812
fdac638c6f9a
oups. reused same variable twice. my bad. You know, maybe somewhere in uVariables or uGearsList should define what we use Gear variables for in each gear
nemo
parents:
8795
diff
changeset
|
5871 |
if Timer = iceWaitCollision then |
8602 | 5872 |
begin |
8812
fdac638c6f9a
oups. reused same variable twice. my bad. You know, maybe somewhere in uVariables or uGearsList should define what we use Gear variables for in each gear
nemo
parents:
8795
diff
changeset
|
5873 |
Timer := iceCollideWithWater; |
8795 | 5874 |
Power := GameTicks; |
8602 | 5875 |
end; |
8548 | 5876 |
end; |
5877 |
||
7098
f8c453ade379
Minor tweaks to freezer, mostly to simplify current state to laptop
nemo
parents:
7093
diff
changeset
|
5878 |
if (abs(gX-Target.X) < 2) and (abs(gY-Target.Y) < 2) then |
8602 | 5879 |
begin |
7098
f8c453ade379
Minor tweaks to freezer, mostly to simplify current state to laptop
nemo
parents:
7093
diff
changeset
|
5880 |
X:= HHGear^.X; |
f8c453ade379
Minor tweaks to freezer, mostly to simplify current state to laptop
nemo
parents:
7093
diff
changeset
|
5881 |
Y:= HHGear^.Y |
8602 | 5882 |
end; |
8548 | 5883 |
|
8812
fdac638c6f9a
oups. reused same variable twice. my bad. You know, maybe somewhere in uVariables or uGearsList should define what we use Gear variables for in each gear
nemo
parents:
8795
diff
changeset
|
5884 |
if (Timer = iceCollideWithGround) and ((GameTicks - Power) > groundFreezingTime) then |
8795 | 5885 |
begin |
9885
34e8880f1f0a
missed this in the merge. rejected the uGearsHandlersMess changes thinking they were all desyncing, but there was the function rename from uLandGraphics
nemo
parents:
9881
diff
changeset
|
5886 |
FillRoundInLandFT(target.x, target.y, iceRadius, icePixel); |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
5887 |
landRect.x := min(max(target.x - iceRadius, 0), LAND_WIDTH - 1); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
5888 |
landRect.y := min(max(target.y - iceRadius, 0), LAND_HEIGHT - 1); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
5889 |
landRect.w := min(2*iceRadius, LAND_WIDTH - landRect.x - 1); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
5890 |
landRect.h := min(2*iceRadius, LAND_HEIGHT - landRect.y - 1); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
5891 |
UpdateLandTexture(landRect.x, landRect.w, landRect.y, landRect.h, true); |
10015 | 5892 |
|
9026
f6074540bab2
Add gstFrozen state to mines/gears in range on frozen land creation, and set the mines to dud state. gstFrozen does nothing yet. Visually or otherwise.
nemo
parents:
8993
diff
changeset
|
5893 |
// Freeze nearby mines/explosives/cases too |
f6074540bab2
Add gstFrozen state to mines/gears in range on frozen land creation, and set the mines to dud state. gstFrozen does nothing yet. Visually or otherwise.
nemo
parents:
8993
diff
changeset
|
5894 |
iter := GearsList; |
f6074540bab2
Add gstFrozen state to mines/gears in range on frozen land creation, and set the mines to dud state. gstFrozen does nothing yet. Visually or otherwise.
nemo
parents:
8993
diff
changeset
|
5895 |
while iter <> nil do |
f6074540bab2
Add gstFrozen state to mines/gears in range on frozen land creation, and set the mines to dud state. gstFrozen does nothing yet. Visually or otherwise.
nemo
parents:
8993
diff
changeset
|
5896 |
begin |
9041
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5897 |
if (iter^.State and gstFrozen = 0) and |
10015 | 5898 |
((iter^.Kind = gtExplosives) or (iter^.Kind = gtCase) or (iter^.Kind = gtMine)) and |
5899 |
(abs(LongInt(iter^.X.Round) - target.x) + abs(LongInt(iter^.Y.Round) - target.y) + 2 < 2 * iceRadius) |
|
9954 | 5900 |
and (Distance(iter^.X - int2hwFloat(target.x), iter^.Y - int2hwFloat(target.y)) < int2hwFloat(iceRadius * 2)) then |
9026
f6074540bab2
Add gstFrozen state to mines/gears in range on frozen land creation, and set the mines to dud state. gstFrozen does nothing yet. Visually or otherwise.
nemo
parents:
8993
diff
changeset
|
5901 |
begin |
9041
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5902 |
for t:= 0 to 5 do |
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5903 |
begin |
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5904 |
vg:= AddVisualGear(hwRound(iter^.X)+random(4)-8, hwRound(iter^.Y)+random(8), vgtDust, 1); |
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5905 |
if vg <> nil then |
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5906 |
begin |
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5907 |
i:= random(100) + 155; |
9145 | 5908 |
vg^.Tint:= (i shl 24) or (i shl 16) or ($FF shl 8) or (random(200) + 55); |
9041
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5909 |
vg^.Angle:= random(360); |
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5910 |
vg^.dx:= 0.001 * random(80); |
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5911 |
vg^.dy:= 0.001 * random(80) |
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5912 |
end |
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5913 |
end; |
9077
e8d9d94c122f
Waddaya think. Add it for iced up water and mines/cases/explosives
nemo
parents:
9076
diff
changeset
|
5914 |
PlaySound(sndHogFreeze); |
9026
f6074540bab2
Add gstFrozen state to mines/gears in range on frozen land creation, and set the mines to dud state. gstFrozen does nothing yet. Visually or otherwise.
nemo
parents:
8993
diff
changeset
|
5915 |
if iter^.Kind = gtMine then // dud mine block |
f6074540bab2
Add gstFrozen state to mines/gears in range on frozen land creation, and set the mines to dud state. gstFrozen does nothing yet. Visually or otherwise.
nemo
parents:
8993
diff
changeset
|
5916 |
begin |
9251 | 5917 |
iter^.State:= iter^.State or gstFrozen; |
9041
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5918 |
vg:= AddVisualGear(hwRound(iter^.X) - 4 + Random(8), hwRound(iter^.Y) - 4 - Random(4), vgtSmoke); |
9026
f6074540bab2
Add gstFrozen state to mines/gears in range on frozen land creation, and set the mines to dud state. gstFrozen does nothing yet. Visually or otherwise.
nemo
parents:
8993
diff
changeset
|
5919 |
if vg <> nil then |
f6074540bab2
Add gstFrozen state to mines/gears in range on frozen land creation, and set the mines to dud state. gstFrozen does nothing yet. Visually or otherwise.
nemo
parents:
8993
diff
changeset
|
5920 |
vg^.Scale:= 0.5; |
f6074540bab2
Add gstFrozen state to mines/gears in range on frozen land creation, and set the mines to dud state. gstFrozen does nothing yet. Visually or otherwise.
nemo
parents:
8993
diff
changeset
|
5921 |
PlaySound(sndVaporize); |
9041
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5922 |
iter^.Health := 0; |
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5923 |
iter^.Damage := 0; |
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5924 |
iter^.State := iter^.State and (not gstAttacking) |
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5925 |
end |
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5926 |
else if iter^.Kind = gtCase then |
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5927 |
begin |
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
9026
diff
changeset
|
5928 |
DeleteCI(iter); |
9251 | 5929 |
iter^.State:= iter^.State or gstFrozen; |
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9289
diff
changeset
|
5930 |
AddCI(iter) |
9026
f6074540bab2
Add gstFrozen state to mines/gears in range on frozen land creation, and set the mines to dud state. gstFrozen does nothing yet. Visually or otherwise.
nemo
parents:
8993
diff
changeset
|
5931 |
end |
9045
6561c42399d3
sheepluva suggestion for frozen barrel behaviour. untested.
nemo
parents:
9043
diff
changeset
|
5932 |
else // gtExplosives |
9251 | 5933 |
begin |
5934 |
iter^.State:= iter^.State or gstFrozen; |
|
9045
6561c42399d3
sheepluva suggestion for frozen barrel behaviour. untested.
nemo
parents:
9043
diff
changeset
|
5935 |
iter^.Health:= iter^.Health + cBarrelHealth |
9251 | 5936 |
end |
9026
f6074540bab2
Add gstFrozen state to mines/gears in range on frozen land creation, and set the mines to dud state. gstFrozen does nothing yet. Visually or otherwise.
nemo
parents:
8993
diff
changeset
|
5937 |
end; |
f6074540bab2
Add gstFrozen state to mines/gears in range on frozen land creation, and set the mines to dud state. gstFrozen does nothing yet. Visually or otherwise.
nemo
parents:
8993
diff
changeset
|
5938 |
iter:= iter^.NextGear |
f6074540bab2
Add gstFrozen state to mines/gears in range on frozen land creation, and set the mines to dud state. gstFrozen does nothing yet. Visually or otherwise.
nemo
parents:
8993
diff
changeset
|
5939 |
end; |
8795 | 5940 |
|
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
5941 |
// FillRoundInLandWithIce(Target.X, Target.Y, iceRadius); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
5942 |
SetAllHHToActive; |
8812
fdac638c6f9a
oups. reused same variable twice. my bad. You know, maybe somewhere in uVariables or uGearsList should define what we use Gear variables for in each gear
nemo
parents:
8795
diff
changeset
|
5943 |
Timer := iceWaitCollision; |
8602 | 5944 |
end; |
5945 |
||
10411 | 5946 |
if (Timer = iceCollideWithWater) and ((GameTicks - Power) > groundFreezingTime div 2) then |
8795 | 5947 |
begin |
9077
e8d9d94c122f
Waddaya think. Add it for iced up water and mines/cases/explosives
nemo
parents:
9076
diff
changeset
|
5948 |
PlaySound(sndHogFreeze); |
10582 | 5949 |
if CheckCoordInWater(Target.X, Target.Y) then |
5950 |
DrawIceBreak(Target.X, Target.Y, iceRadius, iceHeight) |
|
5951 |
else if Target.Y+iceHeight+5 > cWaterLine then |
|
5952 |
DrawIceBreak(Target.X, Target.Y+iceHeight+5, iceRadius, iceHeight) |
|
5953 |
else if Target.X+iceHeight+5 > LongInt(rightX) then |
|
5954 |
DrawIceBreak(Target.X+iceHeight+5, Target.Y, iceRadius, iceHeight) |
|
5955 |
else |
|
5956 |
DrawIceBreak(Target.X-iceHeight-5, Target.Y, iceRadius, iceHeight); |
|
8795 | 5957 |
SetAllHHToActive; |
8812
fdac638c6f9a
oups. reused same variable twice. my bad. You know, maybe somewhere in uVariables or uGearsList should define what we use Gear variables for in each gear
nemo
parents:
8795
diff
changeset
|
5958 |
Timer := iceWaitCollision; |
8602 | 5959 |
end; |
8934
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5960 |
(* |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5961 |
Any ideas for something that would look good here? |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5962 |
if (Target.X <> NoPointX) and ((Timer = iceCollideWithGround) or (Timer = iceCollideWithWater)) and (GameTicks mod max((groundFreezingTime-((GameTicks - Power)*2)),2) = 0) then //and CheckLandValue(Target.X, Target.Y, lfIce) then |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5963 |
begin |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5964 |
vg:= AddVisualGear(Target.X+random(20)-10, Target.Y+random(40)-10, vgtDust, 1); |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5965 |
if vg <> nil then |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5966 |
begin |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5967 |
i:= random(100) + 155; |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5968 |
vg^.Tint:= IceColor or $FF; |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5969 |
vg^.Angle:= random(360); |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5970 |
vg^.dx:= 0.001 * random(80); |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5971 |
vg^.dy:= 0.001 * random(80) |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5972 |
end |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5973 |
end; |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
5974 |
*) |
8548 | 5975 |
|
7128
574b385ce7df
Minor freezer changes, allow snow to accumulate on indestructible terrain too.
nemo
parents:
7101
diff
changeset
|
5976 |
// freeze nearby hogs |
8560 | 5977 |
hogs := GearsNear(int2hwFloat(Target.X), int2hwFloat(Target.Y), gtHedgehog, Gear^.Radius*2); |
7335 | 5978 |
if hogs.size > 0 then |
5979 |
for i:= 0 to hogs.size - 1 do |
|
5980 |
if hogs.ar^[i] <> HHGear then |
|
8795 | 5981 |
if GameTicks mod 5 = 0 then |
8563
4d9d8287e601
Trying to improve rendering, sliding and thawing. Messing around w/ making fire thaw faster.
nemo
parents:
8560
diff
changeset
|
5982 |
begin |
8565 | 5983 |
hogs.ar^[i]^.Active:= true; |
5984 |
if hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] < 256 then |
|
5985 |
hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] := hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] + 1 |
|
5986 |
else if hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] = 256 then |
|
9073 | 5987 |
begin |
9059 | 5988 |
hogs.ar^[i]^.Hedgehog^.Effects[heFrozen]:= 200000-1;//cHedgehogTurnTime + cReadyDelay |
9073 | 5989 |
PlaySound(sndHogFreeze); |
5990 |
end; |
|
8563
4d9d8287e601
Trying to improve rendering, sliding and thawing. Messing around w/ making fire thaw faster.
nemo
parents:
8560
diff
changeset
|
5991 |
end; |
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:
7007
diff
changeset
|
5992 |
inc(Pos) |
8812
fdac638c6f9a
oups. reused same variable twice. my bad. You know, maybe somewhere in uVariables or uGearsList should define what we use Gear variables for in each gear
nemo
parents:
8795
diff
changeset
|
5993 |
end |
10582 | 5994 |
else if (t > 400) and (CheckCoordInWater(gX, gY) or |
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:
7007
diff
changeset
|
5995 |
(((gX and LAND_WIDTH_MASK = 0) and (gY and LAND_HEIGHT_MASK = 0)) |
7128
574b385ce7df
Minor freezer changes, allow snow to accumulate on indestructible terrain too.
nemo
parents:
7101
diff
changeset
|
5996 |
and (Land[gY, gX] <> 0))) then |
8812
fdac638c6f9a
oups. reused same variable twice. my bad. You know, maybe somewhere in uVariables or uGearsList should define what we use Gear variables for in each gear
nemo
parents:
8795
diff
changeset
|
5997 |
begin |
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:
7007
diff
changeset
|
5998 |
Target.X:= gX; |
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:
7007
diff
changeset
|
5999 |
Target.Y:= gY; |
7093 | 6000 |
X:= HHGear^.X; |
6001 |
Y:= HHGear^.Y |
|
8812
fdac638c6f9a
oups. reused same variable twice. my bad. You know, maybe somewhere in uVariables or uGearsList should define what we use Gear variables for in each gear
nemo
parents:
8795
diff
changeset
|
6002 |
end; |
8934
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
6003 |
if (gX > max(LAND_WIDTH,4096)*2) or |
7829
c1dc7839d7b9
Set minimums on a few values to avoid camera zooming out past them. partly Issue #430. Might be worth defining a new constant for this.
nemo
parents:
7784
diff
changeset
|
6004 |
(gX < -max(LAND_WIDTH,4096)) or |
c1dc7839d7b9
Set minimums on a few values to avoid camera zooming out past them. partly Issue #430. Might be worth defining a new constant for this.
nemo
parents:
7784
diff
changeset
|
6005 |
(gY < -max(LAND_HEIGHT,4096)) or |
c1dc7839d7b9
Set minimums on a few values to avoid camera zooming out past them. partly Issue #430. Might be worth defining a new constant for this.
nemo
parents:
7784
diff
changeset
|
6006 |
(gY > max(LAND_HEIGHT,4096)+512) then |
8934
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
6007 |
begin |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
6008 |
//X:= HHGear^.X; |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
6009 |
//Y:= HHGear^.Y |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
6010 |
Target.X:= gX; |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
6011 |
Target.Y:= gY; |
a4ec39eac0be
So. This should fix ammo delays being off on a team that is resurrected later in the game, even up freezing delays a bit, prevent an infinite loop in freezing, and reduces fuel burn when adjusting freezer to one-fourth.
nemo
parents:
8924
diff
changeset
|
6012 |
end |
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:
7007
diff
changeset
|
6013 |
end |
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:
7007
diff
changeset
|
6014 |
end; |
7007 | 6015 |
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:
7370
diff
changeset
|
6016 |
|
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:
7370
diff
changeset
|
6017 |
procedure doStepAddAmmo(Gear: PGear); |
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:
7370
diff
changeset
|
6018 |
var a: TAmmoType; |
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:
7370
diff
changeset
|
6019 |
gi: PGear; |
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:
7370
diff
changeset
|
6020 |
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:
7370
diff
changeset
|
6021 |
if Gear^.Timer > 0 then dec(Gear^.Timer) |
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:
7370
diff
changeset
|
6022 |
else |
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:
7370
diff
changeset
|
6023 |
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:
7370
diff
changeset
|
6024 |
if Gear^.Pos = posCaseUtility then |
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:
7370
diff
changeset
|
6025 |
a:= GetUtility(Gear^.Hedgehog) |
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:
7370
diff
changeset
|
6026 |
else |
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:
7370
diff
changeset
|
6027 |
a:= GetAmmo(Gear^.Hedgehog); |
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:
7370
diff
changeset
|
6028 |
CheckSum:= CheckSum xor GameTicks; |
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:
7370
diff
changeset
|
6029 |
gi := GearsList; |
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:
7370
diff
changeset
|
6030 |
while gi <> nil do |
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:
7370
diff
changeset
|
6031 |
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:
7370
diff
changeset
|
6032 |
with gi^ do CheckSum:= CheckSum xor 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:
7370
diff
changeset
|
6033 |
AddRandomness(CheckSum); |
9954 | 6034 |
if gi^.Kind = gtGenericFaller then gi^.State:= gi^.State and (not gstTmpFlag); |
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:
7370
diff
changeset
|
6035 |
gi := gi^.NextGear |
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:
7370
diff
changeset
|
6036 |
end; |
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:
7370
diff
changeset
|
6037 |
AddPickup(Gear^.Hedgehog^, a, Gear^.Power, hwRound(Gear^.X), hwRound(Gear^.Y)); |
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:
7370
diff
changeset
|
6038 |
DeleteGear(Gear) |
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:
7370
diff
changeset
|
6039 |
end; |
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:
7370
diff
changeset
|
6040 |
end; |
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:
7370
diff
changeset
|
6041 |
|
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:
7370
diff
changeset
|
6042 |
procedure doStepGenericFaller(Gear: PGear); |
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:
7370
diff
changeset
|
6043 |
begin |
7406
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
6044 |
if Gear^.Timer < $FFFFFFFF then |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
6045 |
if Gear^.Timer > 0 then |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
6046 |
dec(Gear^.Timer) |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
6047 |
else |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
6048 |
begin |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
6049 |
DeleteGear(Gear); |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
6050 |
exit |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
6051 |
end; |
8030
165aeaaaf445
Call fallers less often. Should hopefully still be about as effective at the intended purpose. Should help loads quite a bit.
nemo
parents:
8003
diff
changeset
|
6052 |
if (Gear^.State and gstTmpFlag <> 0) or (GameTicks and $7 = 0) then |
165aeaaaf445
Call fallers less often. Should hopefully still be about as effective at the intended purpose. Should help loads quite a bit.
nemo
parents:
8003
diff
changeset
|
6053 |
begin |
165aeaaaf445
Call fallers less often. Should hopefully still be about as effective at the intended purpose. Should help loads quite a bit.
nemo
parents:
8003
diff
changeset
|
6054 |
doStepFallingGear(Gear); |
8370 | 6055 |
if (Gear^.State and gstInvisible <> 0) and (GameTicks and $FF = 0) and (hwRound(Gear^.X) < LongInt(leftX)) or (hwRound(Gear^.X) > LongInt(rightX)) or (hwRound(Gear^.Y) < LongInt(topY)) then |
8030
165aeaaaf445
Call fallers less often. Should hopefully still be about as effective at the intended purpose. Should help loads quite a bit.
nemo
parents:
8003
diff
changeset
|
6056 |
begin |
165aeaaaf445
Call fallers less often. Should hopefully still be about as effective at the intended purpose. Should help loads quite a bit.
nemo
parents:
8003
diff
changeset
|
6057 |
Gear^.X:= int2hwFloat(GetRandom(rightX-leftX)+leftX); |
165aeaaaf445
Call fallers less often. Should hopefully still be about as effective at the intended purpose. Should help loads quite a bit.
nemo
parents:
8003
diff
changeset
|
6058 |
Gear^.Y:= int2hwFloat(GetRandom(LAND_HEIGHT-topY)+topY); |
165aeaaaf445
Call fallers less often. Should hopefully still be about as effective at the intended purpose. Should help loads quite a bit.
nemo
parents:
8003
diff
changeset
|
6059 |
Gear^.dX:= _90-(GetRandomf*_360); |
165aeaaaf445
Call fallers less often. Should hopefully still be about as effective at the intended purpose. Should help loads quite a bit.
nemo
parents:
8003
diff
changeset
|
6060 |
Gear^.dY:= _90-(GetRandomf*_360) |
165aeaaaf445
Call fallers less often. Should hopefully still be about as effective at the intended purpose. Should help loads quite a bit.
nemo
parents:
8003
diff
changeset
|
6061 |
end; |
165aeaaaf445
Call fallers less often. Should hopefully still be about as effective at the intended purpose. Should help loads quite a bit.
nemo
parents:
8003
diff
changeset
|
6062 |
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:
7370
diff
changeset
|
6063 |
end; |
7627 | 6064 |
|
6065 |
procedure doStepCreeper(Gear: PGear); |
|
6066 |
var hogs: PGearArrayS; |
|
6067 |
HHGear: PGear; |
|
6068 |
tdX: hwFloat; |
|
6069 |
dir: LongInt; |
|
6070 |
begin |
|
6071 |
doStepFallingGear(Gear); |
|
6072 |
if Gear^.Timer > 0 then dec(Gear^.Timer); |
|
6073 |
// creeper sleep phase |
|
6074 |
if (Gear^.Hedgehog = nil) and (Gear^.Timer > 0) then exit; |
|
6075 |
||
6076 |
if Gear^.Hedgehog <> nil then HHGear:= Gear^.Hedgehog^.Gear |
|
6077 |
else HHGear:= nil; |
|
6078 |
||
6079 |
// creeper boom phase |
|
6080 |
if (Gear^.State and gstTmpFlag <> 0) then |
|
6081 |
begin |
|
6082 |
if (Gear^.Timer = 0) then |
|
6083 |
begin |
|
6084 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 300, CurrentHedgehog, EXPLAutoSound); |
|
6085 |
DeleteGear(Gear) |
|
6086 |
end; |
|
6087 |
// ssssss he essssscaped |
|
8795 | 6088 |
if (Gear^.Timer > 250) and ((HHGear = nil) or |
7627 | 6089 |
(((abs(HHGear^.X.Round-Gear^.X.Round) + abs(HHGear^.Y.Round-Gear^.Y.Round) + 2) > 180) and |
6090 |
(Distance(HHGear^.X-Gear^.X,HHGear^.Y-Gear^.Y) > _180))) then |
|
6091 |
begin |
|
6092 |
Gear^.State:= Gear^.State and (not gstTmpFlag); |
|
6093 |
Gear^.Timer:= 0 |
|
6094 |
end; |
|
6095 |
exit |
|
6096 |
end; |
|
6097 |
||
7730
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7729
diff
changeset
|
6098 |
// Search out a new target, as target seek time has expired, target is dead, target is out of range, or we did not have a target |
8795 | 6099 |
if (HHGear = nil) or (Gear^.Timer = 0) or |
7627 | 6100 |
(((abs(HHGear^.X.Round-Gear^.X.Round) + abs(HHGear^.Y.Round-Gear^.Y.Round) + 2) > Gear^.Angle) and |
6101 |
(Distance(HHGear^.X-Gear^.X,HHGear^.Y-Gear^.Y) > int2hwFloat(Gear^.Angle))) |
|
6102 |
then |
|
6103 |
begin |
|
6104 |
hogs := GearsNear(Gear^.X, Gear^.Y, gtHedgehog, Gear^.Angle); |
|
6105 |
if hogs.size > 1 then |
|
6106 |
Gear^.Hedgehog:= hogs.ar^[GetRandom(hogs.size)]^.Hedgehog |
|
6107 |
else if hogs.size = 1 then Gear^.Hedgehog:= hogs.ar^[0]^.Hedgehog |
|
6108 |
else Gear^.Hedgehog:= nil; |
|
6109 |
if Gear^.Hedgehog <> nil then Gear^.Timer:= 5000; |
|
6110 |
exit |
|
6111 |
end; |
|
6112 |
||
6113 |
// we have a target. move the creeper. |
|
6114 |
if HHGear <> nil then |
|
6115 |
begin |
|
6116 |
// GOTCHA |
|
6117 |
if ((abs(HHGear^.X.Round-Gear^.X.Round) + abs(HHGear^.Y.Round-Gear^.Y.Round) + 2) < 50) and |
|
6118 |
(Distance(HHGear^.X-Gear^.X,HHGear^.Y-Gear^.Y) < _50) then |
|
6119 |
begin |
|
6120 |
// hisssssssssss |
|
6121 |
Gear^.State:= Gear^.State or gstTmpFlag; |
|
6122 |
Gear^.Timer:= 1500; |
|
6123 |
exit |
|
6124 |
end; |
|
6125 |
if (Gear^.State and gstMoving <> 0) then |
|
6126 |
begin |
|
6127 |
Gear^.dY:= _0; |
|
6128 |
Gear^.dX:= _0; |
|
6129 |
end |
|
6130 |
else if (GameTicks and $FF = 0) then |
|
6131 |
begin |
|
6132 |
tdX:= HHGear^.X-Gear^.X; |
|
6133 |
dir:= hwSign(tdX); |
|
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
6134 |
if TestCollisionX(Gear, dir) = 0 then |
7627 | 6135 |
Gear^.X:= Gear^.X + signAs(_1,tdX); |
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
6136 |
if TestCollisionXwithXYShift(Gear, signAs(_10,tdX), 0, dir) <> 0 then |
7627 | 6137 |
begin |
6138 |
Gear^.dX:= SignAs(_0_15, tdX); |
|
6139 |
Gear^.dY:= -_0_3; |
|
6140 |
Gear^.State:= Gear^.State or gstMoving |
|
6141 |
end |
|
6142 |
end; |
|
6143 |
end; |
|
6144 |
end; |
|
7729
c374746bb56e
Data for copying throwing knife to Land once it hits.
nemo
parents:
7726
diff
changeset
|
6145 |
|
7730
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7729
diff
changeset
|
6146 |
//////////////////////////////////////////////////////////////////////////////// |
7754 | 6147 |
procedure doStepKnife(Gear: PGear); |
8370 | 6148 |
//var ox, oy: LongInt; |
6149 |
// la: hwFloat; |
|
6150 |
var a: real; |
|
7754 | 6151 |
begin |
6152 |
// Gear is shrunk so it can actually escape the hog without carving into the terrain |
|
8494
53b91a602955
Cleaver tweaks based on feedback. Nerf damage, shrink radius. This means cleaver will embed into ground quite a bit further.
nemo
parents:
8413
diff
changeset
|
6153 |
if (Gear^.Radius = 4) and (Gear^.CollisionMask = $FFFF) then Gear^.Radius:= 7; |
7872
ab6db9e07c4d
Allow cleavers to be knocked loose by explosions. Probabilities might need tweaking.
nemo
parents:
7864
diff
changeset
|
6154 |
if Gear^.Damage > 100 then Gear^.CollisionMask:= 0 |
7874
c8aba48f38dc
Arbitrarily tweaked to not firepunch loose, and to increase chance of bazooka doing it to about 20%
nemo
parents:
7872
diff
changeset
|
6155 |
else if Gear^.Damage > 30 then |
c8aba48f38dc
Arbitrarily tweaked to not firepunch loose, and to increase chance of bazooka doing it to about 20%
nemo
parents:
7872
diff
changeset
|
6156 |
if GetRandom(max(4,18-Gear^.Damage div 10)) < 3 then Gear^.CollisionMask:= 0; |
7872
ab6db9e07c4d
Allow cleavers to be knocked loose by explosions. Probabilities might need tweaking.
nemo
parents:
7864
diff
changeset
|
6157 |
Gear^.Damage:= 0; |
7759 | 6158 |
if Gear^.Timer > 0 then dec(Gear^.Timer); |
7754 | 6159 |
if (Gear^.State and gstMoving <> 0) and (Gear^.State and gstCollision = 0) then |
6160 |
begin |
|
6161 |
DeleteCI(Gear); |
|
8494
53b91a602955
Cleaver tweaks based on feedback. Nerf damage, shrink radius. This means cleaver will embed into ground quite a bit further.
nemo
parents:
8413
diff
changeset
|
6162 |
Gear^.Radius:= 7; |
7754 | 6163 |
// used for damage and impact calc. needs balancing I think |
8501
9f70e6f7fb63
restore prior modifier. I think the damage dealt is appropriate to intended uses
nemo
parents:
8494
diff
changeset
|
6164 |
Gear^.Health:= hwRound(hwSqr((hwAbs(Gear^.dY)+hwAbs(Gear^.dX))*_4)); |
7754 | 6165 |
doStepFallingGear(Gear); |
6166 |
AllInactive := false; |
|
7864
667b7583c389
double cleaver rotation speed, also make spin direction dX dependent.
nemo
parents:
7829
diff
changeset
|
6167 |
a:= Gear^.DirAngle; |
667b7583c389
double cleaver rotation speed, also make spin direction dX dependent.
nemo
parents:
7829
diff
changeset
|
6168 |
CalcRotationDirAngle(Gear); |
667b7583c389
double cleaver rotation speed, also make spin direction dX dependent.
nemo
parents:
7829
diff
changeset
|
6169 |
Gear^.DirAngle:= a+(Gear^.DirAngle-a)*2*hwSign(Gear^.dX) // double rotation |
7754 | 6170 |
end |
7759 | 6171 |
else if (Gear^.CollisionIndex = -1) and (Gear^.Timer = 0) then |
7754 | 6172 |
begin |
8370 | 6173 |
(*ox:= 0; oy:= 0; |
7758
a225cc45513e
Remove slot overcrowding, disable angle detection which isn't doing what I want.
nemo
parents:
7754
diff
changeset
|
6174 |
if TestCollisionYwithGear(Gear, -1) <> 0 then oy:= -1; |
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
6175 |
if TestCollisionXwithGear(Gear, 1) <> 0 then ox:= 1; |
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
6176 |
if TestCollisionXwithGear(Gear, -1) <> 0 then ox:= -1; |
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
6177 |
if TestCollisionYwithGear(Gear, 1) <> 0 then oy:= 1; |
7754 | 6178 |
if Gear^.Health > 0 then |
6179 |
PlaySound(sndRopeAttach); |
|
8370 | 6180 |
|
7758
a225cc45513e
Remove slot overcrowding, disable angle detection which isn't doing what I want.
nemo
parents:
7754
diff
changeset
|
6181 |
la:= _10000; |
7754 | 6182 |
if (ox <> 0) or (oy <> 0) then |
6183 |
la:= CalcSlopeNearGear(Gear, ox, oy); |
|
7758
a225cc45513e
Remove slot overcrowding, disable angle detection which isn't doing what I want.
nemo
parents:
7754
diff
changeset
|
6184 |
if la = _10000 then |
7754 | 6185 |
begin |
6186 |
// debug for when we couldn't get an angle |
|
6187 |
//AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeWhite); |
|
7758
a225cc45513e
Remove slot overcrowding, disable angle detection which isn't doing what I want.
nemo
parents:
7754
diff
changeset
|
6188 |
*) |
7784
cf6261f7fdb5
Disable jiggling of cleavers 'cause it just looks odd. Adding a constraint based on proximity to portal is an option too, this was just easier.
nemo
parents:
7777
diff
changeset
|
6189 |
Gear^.DirAngle:= DxDy2Angle(Gear^.dX, Gear^.dY) + (random(30)-15); |
7758
a225cc45513e
Remove slot overcrowding, disable angle detection which isn't doing what I want.
nemo
parents:
7754
diff
changeset
|
6190 |
if (Gear^.dX.isNegative and Gear^.dY.isNegative) or |
a225cc45513e
Remove slot overcrowding, disable angle detection which isn't doing what I want.
nemo
parents:
7754
diff
changeset
|
6191 |
((not Gear^.dX.isNegative) and (not Gear^.dY.isNegative)) then Gear^.DirAngle:= Gear^.DirAngle-90; |
a225cc45513e
Remove slot overcrowding, disable angle detection which isn't doing what I want.
nemo
parents:
7754
diff
changeset
|
6192 |
// end |
a225cc45513e
Remove slot overcrowding, disable angle detection which isn't doing what I want.
nemo
parents:
7754
diff
changeset
|
6193 |
// else Gear^.DirAngle:= hwFloat2Float(la)*90; // sheepluva's comment claims 45deg = 0.5 - yet orientation doesn't seem consistent? |
a225cc45513e
Remove slot overcrowding, disable angle detection which isn't doing what I want.
nemo
parents:
7754
diff
changeset
|
6194 |
// AddFileLog('la: '+floattostr(la)+' DirAngle: '+inttostr(round(Gear^.DirAngle))); |
7754 | 6195 |
Gear^.dX:= _0; |
6196 |
Gear^.dY:= _0; |
|
6197 |
Gear^.State:= Gear^.State and (not gstMoving) or gstCollision; |
|
8494
53b91a602955
Cleaver tweaks based on feedback. Nerf damage, shrink radius. This means cleaver will embed into ground quite a bit further.
nemo
parents:
8413
diff
changeset
|
6198 |
Gear^.Radius:= 16; |
7754 | 6199 |
if Gear^.Health > 0 then AmmoShove(Gear, Gear^.Health, 0); |
6200 |
Gear^.Health:= 0; |
|
7759 | 6201 |
Gear^.Timer:= 500; |
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9289
diff
changeset
|
6202 |
AddCI(Gear) |
7754 | 6203 |
end |
6204 |
else if GameTicks and $3F = 0 then |
|
6205 |
begin |
|
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
6206 |
if (TestCollisionYwithGear(Gear,-1) = 0) |
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
6207 |
and (TestCollisionXwithGear(Gear, 1) = 0) |
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
6208 |
and (TestCollisionXwithGear(Gear,-1) = 0) |
7754 | 6209 |
and (TestCollisionYwithGear(Gear, 1) = 0) then Gear^.State:= Gear^.State and (not gstCollision) or gstMoving; |
6210 |
end |
|
6211 |
end; |
|
6212 |
(* |
|
6213 |
This didn't end up getting used, but, who knows, might be reasonable for javellin or something |
|
7730
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7729
diff
changeset
|
6214 |
// Make the knife initial angle based on the hog attack angle, or is that too hard? |
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7729
diff
changeset
|
6215 |
procedure doStepKnife(Gear: PGear); |
8795 | 6216 |
var t, |
7733 | 6217 |
gx, gy, ga, // gear x,y,angle |
6218 |
lx, ly, la, // land x,y,angle |
|
6219 |
ox, oy, // x,y offset |
|
6220 |
w, h, // wXh of clip area |
|
6221 |
tx, ty // tip position in sprite |
|
6222 |
: LongInt; |
|
6223 |
surf: PSDL_Surface; |
|
6224 |
s: hwFloat; |
|
6225 |
||
7730
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7729
diff
changeset
|
6226 |
begin |
7733 | 6227 |
Gear^.dY := Gear^.dY + cGravity; |
6228 |
if (GameFlags and gfMoreWind) <> 0 then |
|
6229 |
Gear^.dX := Gear^.dX + cWindSpeed / Gear^.Density; |
|
6230 |
Gear^.X := Gear^.X + Gear^.dX; |
|
6231 |
Gear^.Y := Gear^.Y + Gear^.dY; |
|
6232 |
CheckGearDrowning(Gear); |
|
6233 |
gx:= hwRound(Gear^.X); |
|
6234 |
gy:= hwRound(Gear^.Y); |
|
6235 |
if Gear^.State and gstDrowning <> 0 then exit; |
|
7730
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7729
diff
changeset
|
6236 |
with Gear^ do |
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7729
diff
changeset
|
6237 |
begin |
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
|
6238 |
if CheckLandValue(gx, gy, lfLandMask) then |
7733 | 6239 |
begin |
8795 | 6240 |
t:= Angle + hwRound((hwAbs(dX)+hwAbs(dY)) * _10); |
7733 | 6241 |
|
6242 |
if t < 0 then inc(t, 4096) |
|
6243 |
else if 4095 < t then dec(t, 4096); |
|
6244 |
Angle:= t; |
|
6245 |
||
6246 |
DirAngle:= Angle / 4096 * 360 |
|
6247 |
end |
|
6248 |
else |
|
7730
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7729
diff
changeset
|
6249 |
begin |
7733 | 6250 |
//This is the set of postions for the knife. |
6251 |
//Using FlipSurface and copyToXY the knife can be written to the LandPixels at 32 positions, and an appropriate line drawn in Land. |
|
6252 |
t:= Angle mod 1024; |
|
6253 |
case t div 128 of |
|
6254 |
0: begin |
|
6255 |
ox:= 2; oy:= 5; |
|
6256 |
w := 25; h:= 5; |
|
6257 |
tx:= 0; ty:= 2 |
|
6258 |
end; |
|
6259 |
1: begin |
|
6260 |
ox:= 2; oy:= 15; |
|
6261 |
w:= 24; h:= 8; |
|
6262 |
tx:= 0; ty:= 7 |
|
6263 |
end; |
|
6264 |
2: begin |
|
6265 |
ox:= 2; oy:= 27; |
|
6266 |
w:= 23; h:= 12; |
|
6267 |
tx:= -12; ty:= -5 |
|
6268 |
end; |
|
6269 |
3: begin |
|
6270 |
ox:= 2; oy:= 43; |
|
6271 |
w:= 21; h:= 15; |
|
6272 |
tx:= 0; ty:= 14 |
|
6273 |
end; |
|
6274 |
4: begin |
|
6275 |
ox:= 29; oy:= 8; |
|
6276 |
w:= 19; h:= 19; |
|
8795 | 6277 |
tx:= 0; ty:= 17 |
7733 | 6278 |
end; |
6279 |
5: begin |
|
6280 |
ox:= 29; oy:= 32; |
|
6281 |
w:= 15; h:= 21; |
|
6282 |
tx:= 0; ty:= 20 |
|
6283 |
end; |
|
6284 |
6: begin |
|
6285 |
ox:= 51; oy:= 3; |
|
6286 |
w:= 11; h:= 23; |
|
8795 | 6287 |
tx:= 0; ty:= 22 |
7733 | 6288 |
end; |
6289 |
7: begin |
|
6290 |
ox:= 51; oy:= 34; |
|
6291 |
w:= 7; h:= 24; |
|
6292 |
tx:= 0; ty:= 23 |
|
6293 |
end |
|
6294 |
end; |
|
8795 | 6295 |
|
7733 | 6296 |
surf:= SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, 32, RMask, GMask, BMask, AMask); |
6297 |
copyToXYFromRect(SpritesData[sprKnife].Surface, surf, ox, oy, w, h, 0, 0); |
|
6298 |
// try to make the knife hit point first |
|
6299 |
lx := 0; |
|
6300 |
ly := 0; |
|
6301 |
if CalcSlopeTangent(Gear, gx, gy, lx, ly, 255) then |
|
6302 |
begin |
|
6303 |
la:= vector2Angle(int2hwFloat(lx), int2hwFloat(ly)); |
|
6304 |
ga:= vector2Angle(dX, dY); |
|
7734 | 6305 |
AddFileLog('la: '+inttostr(la)+' ga: '+inttostr(ga)+' Angle: '+inttostr(Angle)); |
7733 | 6306 |
// change to 0 to 4096 forced by LongWord in Gear |
6307 |
if la < 0 then la:= 4096+la; |
|
6308 |
if ga < 0 then ga:= 4096+ga; |
|
7734 | 6309 |
if ((Angle > ga) and (Angle < la)) or ((Angle < ga) and (Angle > la)) then |
7733 | 6310 |
begin |
6311 |
if Angle >= 2048 then dec(Angle, 2048) |
|
6312 |
else if Angle < 2048 then inc(Angle, 2048) |
|
7734 | 6313 |
end; |
6314 |
AddFileLog('la: '+inttostr(la)+' ga: '+inttostr(ga)+' Angle: '+inttostr(Angle)) |
|
7733 | 6315 |
end; |
6316 |
case Angle div 1024 of |
|
8795 | 6317 |
0: begin |
7733 | 6318 |
flipSurface(surf, true); |
6319 |
flipSurface(surf, true); |
|
7739 | 6320 |
BlitImageAndGenerateCollisionInfo(gx-(w-tx), gy-(h-ty), w, surf) |
7733 | 6321 |
end; |
6322 |
1: begin |
|
6323 |
flipSurface(surf, false); |
|
7734 | 6324 |
BlitImageAndGenerateCollisionInfo(gx-(w-tx), gy-ty, w, surf) |
7733 | 6325 |
end; |
6326 |
2: begin // knife was actually drawn facing this way... |
|
7734 | 6327 |
BlitImageAndGenerateCollisionInfo(gx-tx, gy-ty, w, surf) |
7733 | 6328 |
end; |
6329 |
3: begin |
|
6330 |
flipSurface(surf, true); |
|
7739 | 6331 |
BlitImageAndGenerateCollisionInfo(gx-tx, gy-(h-ty), w, surf) |
7733 | 6332 |
end |
6333 |
end; |
|
6334 |
SDL_FreeSurface(surf); |
|
6335 |
// this needs to calculate actual width/height + land clipping since update texture doesn't. |
|
6336 |
// i.e. this will crash if you fire near sides of map, but until I get the blit right, not going to put real values |
|
6337 |
UpdateLandTexture(hwRound(X)-32, 64, hwRound(Y)-32, 64, true); |
|
7730
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7729
diff
changeset
|
6338 |
DeleteGear(Gear); |
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7729
diff
changeset
|
6339 |
exit |
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7729
diff
changeset
|
6340 |
end |
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7729
diff
changeset
|
6341 |
end; |
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7729
diff
changeset
|
6342 |
end; |
7754 | 6343 |
*) |
9285 | 6344 |
|
6345 |
end. |