author | unC0Rr |
Tue, 17 Dec 2024 15:44:21 +0100 | |
branch | transitional_engine |
changeset 16078 | db18f1a30b0c |
parent 16004 | 2146cb7be36f |
permissions | -rw-r--r-- |
4 | 1 |
(* |
1066 | 2 |
* Hedgewars, a free turn based strategy game |
11046 | 3 |
* Copyright (c) 2004-2015 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); |
|
14032
3c40754f6cfe
Add Grenade taunt when grenade close to hog is about to blow up
Wuzzy <Wuzzy2@mail.ru>
parents:
14030
diff
changeset
|
35 |
procedure makeHogsWorry(x, y: hwFloat; r: LongInt; gearType: TGearType); |
9285 | 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); |
|
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
50 |
procedure spawnBulletTrail(Bullet: PGear; bulletX, bulletY: hwFloat; fadeIn: Boolean); |
9285 | 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); |
|
11531 | 89 |
procedure doStepCakeWalk(Gear: PGear); |
9285 | 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); |
|
14587
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
118 |
procedure doStepPianoWork(Gear: PGear); |
9285 | 119 |
procedure doStepSineGunShotWork(Gear: PGear); |
120 |
procedure doStepSineGunShot(Gear: PGear); |
|
121 |
procedure doStepFlamethrowerWork(Gear: PGear); |
|
122 |
procedure doStepFlamethrower(Gear: PGear); |
|
123 |
procedure doStepLandGunWork(Gear: PGear); |
|
124 |
procedure doStepLandGun(Gear: PGear); |
|
125 |
procedure doStepPoisonCloud(Gear: PGear); |
|
126 |
procedure doStepHammer(Gear: PGear); |
|
127 |
procedure doStepHammerHitWork(Gear: PGear); |
|
128 |
procedure doStepHammerHit(Gear: PGear); |
|
129 |
procedure doStepResurrectorWork(Gear: PGear); |
|
130 |
procedure doStepResurrector(Gear: PGear); |
|
131 |
procedure doStepNapalmBomb(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); |
|
13605
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
139 |
procedure doStepCreeper(Gear: PGear); |
9285 | 140 |
procedure doStepKnife(Gear: PGear); |
12898 | 141 |
procedure doStepMinigunWork(Gear: PGear); |
142 |
procedure doStepMinigun(Gear: PGear); |
|
143 |
procedure doStepMinigunBullet(Gear: PGear); |
|
15847 | 144 |
procedure ResetSentryState(Gear: PGear; state, timer: LongInt); |
15737 | 145 |
procedure doStepSentryDeploy(Gear: PGear); |
9285 | 146 |
|
147 |
var |
|
148 |
upd: Longword; |
|
149 |
snowLeft,snowRight: LongInt; |
|
150 |
||
151 |
implementation |
|
152 |
uses uConsts, uVariables, uVisualGearsList, uRandom, uCollisions, uGearsList, uUtils, uSound |
|
153 |
, SDLh, uScript, uGearsHedgehog, uGearsUtils, uIO, uCaptions, uLandGraphics |
|
15242
bf11546c1920
Remove excessive console output of gtAirAttack
Wuzzy <Wuzzy2@mail.ru>
parents:
15225
diff
changeset
|
154 |
, uGearsHandlers, uTextures, uRenderUtils, uAmmos, uTeams, uLandTexture |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
155 |
, uStore, uAI, uStats, uLocale, uLandUtils; |
5121
2d34ec60992c
added some comments in order to confuse the GSoC students as much as possible ;D
sheepluva
parents:
5076
diff
changeset
|
156 |
|
3569 | 157 |
procedure doStepPerPixel(Gear: PGear; step: TGearStepProcedure; onlyCheckIfChanged: boolean); |
158 |
var |
|
159 |
dX, dY, sX, sY: hwFloat; |
|
160 |
i, steps: LongWord; |
|
161 |
caller: TGearStepProcedure; |
|
162 |
begin |
|
163 |
dX:= Gear^.dX; |
|
164 |
dY:= Gear^.dY; |
|
165 |
steps:= max(abs(hwRound(Gear^.X+dX)-hwRound(Gear^.X)), abs(hwRound(Gear^.Y+dY)-hwRound(Gear^.Y))); |
|
166 |
||
167 |
// Gear is still on the same Pixel it was before |
|
168 |
if steps < 1 then |
|
4578 | 169 |
begin |
3569 | 170 |
if onlyCheckIfChanged then |
4578 | 171 |
begin |
3569 | 172 |
Gear^.X := Gear^.X + dX; |
173 |
Gear^.Y := Gear^.Y + dY; |
|
174 |
EXIT; |
|
4578 | 175 |
end |
3569 | 176 |
else |
177 |
steps := 1; |
|
4578 | 178 |
end; |
3569 | 179 |
|
180 |
if steps > 1 then |
|
4578 | 181 |
begin |
3569 | 182 |
sX:= dX / steps; |
183 |
sY:= dY / steps; |
|
4578 | 184 |
end |
8795 | 185 |
|
3569 | 186 |
else |
4578 | 187 |
begin |
3569 | 188 |
sX:= dX; |
189 |
sY:= dY; |
|
4578 | 190 |
end; |
3569 | 191 |
|
192 |
caller:= Gear^.doStep; |
|
193 |
||
194 |
for i:= 1 to steps do |
|
4578 | 195 |
begin |
3569 | 196 |
Gear^.X := Gear^.X + sX; |
197 |
Gear^.Y := Gear^.Y + sY; |
|
198 |
step(Gear); |
|
199 |
if (Gear^.doStep <> caller) |
|
200 |
or ((Gear^.State and gstCollision) <> 0) |
|
201 |
or ((Gear^.State and gstMoving) = 0) then |
|
202 |
break; |
|
4578 | 203 |
end; |
3569 | 204 |
end; |
205 |
||
14032
3c40754f6cfe
Add Grenade taunt when grenade close to hog is about to blow up
Wuzzy <Wuzzy2@mail.ru>
parents:
14030
diff
changeset
|
206 |
procedure makeHogsWorry(x, y: hwFloat; r: LongInt; gearType: TGearType); |
8795 | 207 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
208 |
gi: PGear; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
209 |
d: LongInt; |
14032
3c40754f6cfe
Add Grenade taunt when grenade close to hog is about to blow up
Wuzzy <Wuzzy2@mail.ru>
parents:
14030
diff
changeset
|
210 |
grenadeTaunt: boolean; |
2647 | 211 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
212 |
gi := GearsList; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
213 |
while gi <> nil do |
4578 | 214 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
215 |
if (gi^.Kind = gtHedgehog) then |
4578 | 216 |
begin |
12805 | 217 |
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
|
218 |
if (d > 1) and (gi^.Hedgehog^.Effects[heInvulnerable] = 0) and (GetRandom(2) = 0) then |
4578 | 219 |
begin |
3143 | 220 |
if (CurrentHedgehog^.Gear = gi) then |
14040
1effb8b72b11
New taunt: Runaway, when something is about to blow up near current hog
Wuzzy <Wuzzy2@mail.ru>
parents:
14035
diff
changeset
|
221 |
if (CurrentHedgehog^.Gear^.FlightTime = 0) then |
1effb8b72b11
New taunt: Runaway, when something is about to blow up near current hog
Wuzzy <Wuzzy2@mail.ru>
parents:
14035
diff
changeset
|
222 |
case random(4) of |
1effb8b72b11
New taunt: Runaway, when something is about to blow up near current hog
Wuzzy <Wuzzy2@mail.ru>
parents:
14035
diff
changeset
|
223 |
0: PlaySoundV(sndWhatThe, gi^.Hedgehog^.Team^.voicepack); |
1effb8b72b11
New taunt: Runaway, when something is about to blow up near current hog
Wuzzy <Wuzzy2@mail.ru>
parents:
14035
diff
changeset
|
224 |
1: PlaySoundV(sndOops, gi^.Hedgehog^.Team^.voicepack); |
1effb8b72b11
New taunt: Runaway, when something is about to blow up near current hog
Wuzzy <Wuzzy2@mail.ru>
parents:
14035
diff
changeset
|
225 |
2: PlaySoundV(sndRunAway, gi^.Hedgehog^.Team^.voicepack); |
1effb8b72b11
New taunt: Runaway, when something is about to blow up near current hog
Wuzzy <Wuzzy2@mail.ru>
parents:
14035
diff
changeset
|
226 |
3: PlaySoundV(sndRunAway, gi^.Hedgehog^.Team^.voicepack); |
1effb8b72b11
New taunt: Runaway, when something is about to blow up near current hog
Wuzzy <Wuzzy2@mail.ru>
parents:
14035
diff
changeset
|
227 |
end |
14035 | 228 |
else |
14040
1effb8b72b11
New taunt: Runaway, when something is about to blow up near current hog
Wuzzy <Wuzzy2@mail.ru>
parents:
14035
diff
changeset
|
229 |
if random(4) = 0 then |
1effb8b72b11
New taunt: Runaway, when something is about to blow up near current hog
Wuzzy <Wuzzy2@mail.ru>
parents:
14035
diff
changeset
|
230 |
PlaySoundV(sndWhatThe, gi^.Hedgehog^.Team^.voicepack) |
1effb8b72b11
New taunt: Runaway, when something is about to blow up near current hog
Wuzzy <Wuzzy2@mail.ru>
parents:
14035
diff
changeset
|
231 |
else |
1effb8b72b11
New taunt: Runaway, when something is about to blow up near current hog
Wuzzy <Wuzzy2@mail.ru>
parents:
14035
diff
changeset
|
232 |
PlaySoundV(sndOops, gi^.Hedgehog^.Team^.voicepack) |
8795 | 233 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
234 |
else |
4578 | 235 |
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
|
236 |
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
|
237 |
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
|
238 |
gi^.dX.isNegative:= X<gi^.X; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
239 |
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
|
240 |
end; |
8795 | 241 |
|
14032
3c40754f6cfe
Add Grenade taunt when grenade close to hog is about to blow up
Wuzzy <Wuzzy2@mail.ru>
parents:
14030
diff
changeset
|
242 |
grenadeTaunt:= false; |
3c40754f6cfe
Add Grenade taunt when grenade close to hog is about to blow up
Wuzzy <Wuzzy2@mail.ru>
parents:
14030
diff
changeset
|
243 |
if (gearType = gtGrenade) then |
3c40754f6cfe
Add Grenade taunt when grenade close to hog is about to blow up
Wuzzy <Wuzzy2@mail.ru>
parents:
14030
diff
changeset
|
244 |
grenadeTaunt:= random(2) = 0; |
3c40754f6cfe
Add Grenade taunt when grenade close to hog is about to blow up
Wuzzy <Wuzzy2@mail.ru>
parents:
14030
diff
changeset
|
245 |
|
3c40754f6cfe
Add Grenade taunt when grenade close to hog is about to blow up
Wuzzy <Wuzzy2@mail.ru>
parents:
14030
diff
changeset
|
246 |
if grenadeTaunt then |
3c40754f6cfe
Add Grenade taunt when grenade close to hog is about to blow up
Wuzzy <Wuzzy2@mail.ru>
parents:
14030
diff
changeset
|
247 |
PlaySoundV(sndGrenade, gi^.Hedgehog^.Team^.voicepack) |
3143 | 248 |
else |
14032
3c40754f6cfe
Add Grenade taunt when grenade close to hog is about to blow up
Wuzzy <Wuzzy2@mail.ru>
parents:
14030
diff
changeset
|
249 |
if d > r div 2 then |
14035 | 250 |
if random(3) = 0 then |
251 |
PlaySoundV(sndWhatThe, gi^.Hedgehog^.Team^.voicepack) |
|
252 |
else |
|
253 |
PlaySoundV(sndNooo, gi^.Hedgehog^.Team^.voicepack) |
|
14032
3c40754f6cfe
Add Grenade taunt when grenade close to hog is about to blow up
Wuzzy <Wuzzy2@mail.ru>
parents:
14030
diff
changeset
|
254 |
else |
3c40754f6cfe
Add Grenade taunt when grenade close to hog is about to blow up
Wuzzy <Wuzzy2@mail.ru>
parents:
14030
diff
changeset
|
255 |
PlaySoundV(sndUhOh, gi^.Hedgehog^.Team^.voicepack); |
3c40754f6cfe
Add Grenade taunt when grenade close to hog is about to blow up
Wuzzy <Wuzzy2@mail.ru>
parents:
14030
diff
changeset
|
256 |
|
4578 | 257 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
258 |
end; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
259 |
end; |
8795 | 260 |
|
4578 | 261 |
gi := gi^.NextGear |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
262 |
end; |
2647 | 263 |
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
|
264 |
|
5807
5c8fe58dead5
Define 2 script callbacks to notify of hog vanishment
nemo
parents:
5806
diff
changeset
|
265 |
procedure HideHog(HH: PHedgehog); |
5c8fe58dead5
Define 2 script callbacks to notify of hog vanishment
nemo
parents:
5806
diff
changeset
|
266 |
begin |
15937 | 267 |
if HH^.Gear = nil then exit; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
268 |
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
|
269 |
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
|
270 |
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
|
271 |
FollowGear:= nil; |
8795 | 272 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
273 |
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
|
274 |
lastGearByUID := nil; |
8795 | 275 |
|
7400
09427dbec1d8
Fix TARDIS, make switcher work w/ the new more stringent check.
nemo
parents:
7399
diff
changeset
|
276 |
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
|
277 |
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
|
278 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
279 |
Z := cHHZ; |
7400
09427dbec1d8
Fix TARDIS, make switcher work w/ the new more stringent check.
nemo
parents:
7399
diff
changeset
|
280 |
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
|
281 |
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
|
282 |
Message := Message and (not gmAttack); |
5807
5c8fe58dead5
Define 2 script callbacks to notify of hog vanishment
nemo
parents:
5806
diff
changeset
|
283 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
284 |
HH^.GearHidden:= HH^.Gear; |
13140
e330feceb662
Hide team bar if all hedgehogs in it are hidden or dead
Wuzzy <Wuzzy2@mail.ru>
parents:
13096
diff
changeset
|
285 |
HH^.Gear:= nil; |
e330feceb662
Hide team bar if all hedgehogs in it are hidden or dead
Wuzzy <Wuzzy2@mail.ru>
parents:
13096
diff
changeset
|
286 |
AddVisualGear(0, 0, vgtTeamHealthSorter); |
5807
5c8fe58dead5
Define 2 script callbacks to notify of hog vanishment
nemo
parents:
5806
diff
changeset
|
287 |
end; |
5c8fe58dead5
Define 2 script callbacks to notify of hog vanishment
nemo
parents:
5806
diff
changeset
|
288 |
|
4 | 289 |
|
290 |
//////////////////////////////////////////////////////////////////////////////// |
|
291 |
procedure doStepDrowningGear(Gear: PGear); |
|
12714
5a57acce9cae
Fix bubbles drawn on the wrong side when hog drowns and faces right
Wuzzy <almikes@aol.com>
parents:
12712
diff
changeset
|
292 |
var i, d, bubbleX, bubbleY: LongInt; |
10364
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
293 |
bubble: PVisualGear; |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
294 |
begin |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
295 |
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
|
296 |
begin |
10364
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
297 |
d:= 2 * Gear^.Radius; |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
298 |
for i:= (Gear^.Radius * Gear^.Radius) div 4 downto 0 do |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
299 |
begin |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
300 |
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
|
301 |
if bubble <> nil then |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
302 |
bubble^.dY:= 0.1 + random(20)/10; |
10354 | 303 |
end; |
10364
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
304 |
DeleteGear(Gear); |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
305 |
exit; |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
306 |
end; |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
307 |
|
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
308 |
AllInactive := false; |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
309 |
dec(Gear^.Timer); |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
310 |
|
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
311 |
Gear^.Y := Gear^.Y + cDrownSpeed; |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
312 |
|
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
313 |
if cWaterLine > hwRound(Gear^.Y) + Gear^.Radius then |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
314 |
begin |
14303
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
14225
diff
changeset
|
315 |
if leftX + Gear^.Radius > hwRound(Gear^.X) then |
10364
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
316 |
Gear^.X := Gear^.X - cDrownSpeed |
10354 | 317 |
else |
10364
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
318 |
Gear^.X := Gear^.X + cDrownSpeed; |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
319 |
end |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
320 |
else |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
321 |
Gear^.X := Gear^.X + Gear^.dX * cDrownSpeed; |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
322 |
|
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
323 |
// Create some bubbles (0.5% might be better but causes too few bubbles sometimes) |
12714
5a57acce9cae
Fix bubbles drawn on the wrong side when hog drowns and faces right
Wuzzy <almikes@aol.com>
parents:
12712
diff
changeset
|
324 |
if (Gear^.Kind = gtHedgehog) and (Gear^.dX.isNegative) then |
5a57acce9cae
Fix bubbles drawn on the wrong side when hog drowns and faces right
Wuzzy <almikes@aol.com>
parents:
12712
diff
changeset
|
325 |
bubbleX:= hwRound(Gear^.X) - Gear^.Radius |
5a57acce9cae
Fix bubbles drawn on the wrong side when hog drowns and faces right
Wuzzy <almikes@aol.com>
parents:
12712
diff
changeset
|
326 |
else |
5a57acce9cae
Fix bubbles drawn on the wrong side when hog drowns and faces right
Wuzzy <almikes@aol.com>
parents:
12712
diff
changeset
|
327 |
bubbleX:= hwRound(Gear^.X) + Gear^.Radius; |
5a57acce9cae
Fix bubbles drawn on the wrong side when hog drowns and faces right
Wuzzy <almikes@aol.com>
parents:
12712
diff
changeset
|
328 |
bubbleY:= hwRound(Gear^.Y) - Gear^.Radius; |
10364
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
329 |
if ((not SuddenDeathDmg and (WaterOpacity < $FF)) |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
330 |
or (SuddenDeathDmg and (SDWaterOpacity < $FF))) and ((GameTicks and $1F) = 0) then |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
331 |
if (Gear^.Kind = gtHedgehog) and (Random(4) = 0) then |
12714
5a57acce9cae
Fix bubbles drawn on the wrong side when hog drowns and faces right
Wuzzy <almikes@aol.com>
parents:
12712
diff
changeset
|
332 |
AddVisualGear(bubbleX, bubbleY, vgtBubble) |
10364
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
333 |
else if Random(12) = 0 then |
12714
5a57acce9cae
Fix bubbles drawn on the wrong side when hog drowns and faces right
Wuzzy <almikes@aol.com>
parents:
12712
diff
changeset
|
334 |
AddVisualGear(bubbleX, bubbleY, vgtBubble); |
13739
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
335 |
// Insta-delete gear and skip drowning animation if water is 100% opaque |
10364
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
336 |
if (not SuddenDeathDmg and (WaterOpacity > $FE)) |
13739
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
337 |
or (SuddenDeathDmg and (SDWaterOpacity > $FE)) then |
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
338 |
begin |
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
339 |
// Teleport gear to a suitable position for the damage tag in the water |
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
340 |
if (WorldEdge = weSea) and (hwRound(Gear^.X) - Gear^.Radius < leftX) then |
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
341 |
begin |
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
342 |
if (hwRound(Gear^.X) - Gear^.Radius > leftX - 90) then |
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
343 |
Gear^.X := Gear^.X - _90 |
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
344 |
end |
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
345 |
else if (WorldEdge = weSea) and (hwRound(Gear^.X) + Gear^.Radius > rightX) then |
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
346 |
begin |
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
347 |
if (hwRound(Gear^.X) - Gear^.Radius < rightX + 90) then |
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
348 |
Gear^.X := Gear^.X + _90 |
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
349 |
end |
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
350 |
else |
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
351 |
Gear^.Y := int2hwFloat(Gear^.Radius + cWaterLine + cVisibleWater); |
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
352 |
DeleteGear(Gear); |
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
353 |
exit; |
bbea77a8dff9
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
Wuzzy <Wuzzy2@mail.ru>
parents:
13651
diff
changeset
|
354 |
end; |
15265
44533b2e4fb1
Drowning gears: Delete big gears when they're *completely* out of visible area
Wuzzy <Wuzzy2@mail.ru>
parents:
15264
diff
changeset
|
355 |
// Delete gear normally if it is outside of visible range. |
44533b2e4fb1
Drowning gears: Delete big gears when they're *completely* out of visible area
Wuzzy <Wuzzy2@mail.ru>
parents:
15264
diff
changeset
|
356 |
// But first determine size tolerance for big gears to make sure the gear is REALLY out of range. |
44533b2e4fb1
Drowning gears: Delete big gears when they're *completely* out of visible area
Wuzzy <Wuzzy2@mail.ru>
parents:
15264
diff
changeset
|
357 |
if Gear^.Kind = gtPiano then |
44533b2e4fb1
Drowning gears: Delete big gears when they're *completely* out of visible area
Wuzzy <Wuzzy2@mail.ru>
parents:
15264
diff
changeset
|
358 |
d:= SpritesData[sprPiano].height |
44533b2e4fb1
Drowning gears: Delete big gears when they're *completely* out of visible area
Wuzzy <Wuzzy2@mail.ru>
parents:
15264
diff
changeset
|
359 |
else if Gear^.Kind = gtRCPlane then |
44533b2e4fb1
Drowning gears: Delete big gears when they're *completely* out of visible area
Wuzzy <Wuzzy2@mail.ru>
parents:
15264
diff
changeset
|
360 |
d:= SpritesData[sprPlane].width |
44533b2e4fb1
Drowning gears: Delete big gears when they're *completely* out of visible area
Wuzzy <Wuzzy2@mail.ru>
parents:
15264
diff
changeset
|
361 |
else if Gear^.Kind = gtKnife then |
44533b2e4fb1
Drowning gears: Delete big gears when they're *completely* out of visible area
Wuzzy <Wuzzy2@mail.ru>
parents:
15264
diff
changeset
|
362 |
d:= SpritesData[sprKnife].height |
44533b2e4fb1
Drowning gears: Delete big gears when they're *completely* out of visible area
Wuzzy <Wuzzy2@mail.ru>
parents:
15264
diff
changeset
|
363 |
else if Gear^.Kind = gtDynamite then |
44533b2e4fb1
Drowning gears: Delete big gears when they're *completely* out of visible area
Wuzzy <Wuzzy2@mail.ru>
parents:
15264
diff
changeset
|
364 |
d:= SpritesData[sprDynamite].height |
44533b2e4fb1
Drowning gears: Delete big gears when they're *completely* out of visible area
Wuzzy <Wuzzy2@mail.ru>
parents:
15264
diff
changeset
|
365 |
else if Gear^.Kind = gtSnowball then |
44533b2e4fb1
Drowning gears: Delete big gears when they're *completely* out of visible area
Wuzzy <Wuzzy2@mail.ru>
parents:
15264
diff
changeset
|
366 |
d:= SpritesData[sprSnowball].height |
44533b2e4fb1
Drowning gears: Delete big gears when they're *completely* out of visible area
Wuzzy <Wuzzy2@mail.ru>
parents:
15264
diff
changeset
|
367 |
else |
44533b2e4fb1
Drowning gears: Delete big gears when they're *completely* out of visible area
Wuzzy <Wuzzy2@mail.ru>
parents:
15264
diff
changeset
|
368 |
d:= Gear^.Radius * 2; |
44533b2e4fb1
Drowning gears: Delete big gears when they're *completely* out of visible area
Wuzzy <Wuzzy2@mail.ru>
parents:
15264
diff
changeset
|
369 |
if (hwRound(Gear^.Y) > d + cWaterLine + cVisibleWater) then |
10364
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
370 |
DeleteGear(Gear); |
9f7be3da1245
burst drowning gears into bubbles after timeout
sheepluva
parents:
10363
diff
changeset
|
371 |
end; |
4 | 372 |
|
373 |
//////////////////////////////////////////////////////////////////////////////// |
|
374 |
procedure doStepFallingGear(Gear: PGear); |
|
8795 | 375 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
376 |
isFalling: boolean; |
9526 | 377 |
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
|
378 |
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
|
379 |
land, xland: word; |
4 | 380 |
begin |
9526 | 381 |
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
|
382 |
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
|
383 |
gY:= hwRound(Gear^.Y); |
13610
f1b6070a6e14
Fix projectiles reacing incorrectly with land just behind the wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13609
diff
changeset
|
384 |
Gear^.State := Gear^.State and (not gstCollision); |
f1b6070a6e14
Fix projectiles reacing incorrectly with land just behind the wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13609
diff
changeset
|
385 |
|
f1b6070a6e14
Fix projectiles reacing incorrectly with land just behind the wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13609
diff
changeset
|
386 |
// World wrap |
f1b6070a6e14
Fix projectiles reacing incorrectly with land just behind the wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13609
diff
changeset
|
387 |
if (Gear^.Kind <> gtGenericFaller) and WorldWrap(Gear) and (WorldEdge = weWrap) and |
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
388 |
((TestCollisionXwithGear(Gear, 1) <> 0) or (TestCollisionXwithGear(Gear, -1) <> 0)) then |
9526 | 389 |
begin |
13610
f1b6070a6e14
Fix projectiles reacing incorrectly with land just behind the wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13609
diff
changeset
|
390 |
// Collision with land that *just* behind the other side of the world wrap edge |
f1b6070a6e14
Fix projectiles reacing incorrectly with land just behind the wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13609
diff
changeset
|
391 |
if (not Gear^.Sticky) then |
f1b6070a6e14
Fix projectiles reacing incorrectly with land just behind the wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13609
diff
changeset
|
392 |
begin |
f1b6070a6e14
Fix projectiles reacing incorrectly with land just behind the wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13609
diff
changeset
|
393 |
Gear^.X:= tX; |
14303
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
14225
diff
changeset
|
394 |
Gear^.dX.isNegative:= (gX > leftX + Gear^.Radius*2); |
13610
f1b6070a6e14
Fix projectiles reacing incorrectly with land just behind the wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13609
diff
changeset
|
395 |
Gear^.dX := Gear^.dX * Gear^.Friction; |
f1b6070a6e14
Fix projectiles reacing incorrectly with land just behind the wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13609
diff
changeset
|
396 |
end; |
f1b6070a6e14
Fix projectiles reacing incorrectly with land just behind the wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13609
diff
changeset
|
397 |
Gear^.State := Gear^.State or gstCollision; |
9526 | 398 |
end; |
9473
a51a69094c24
partial implementation of non-infinite world (edge wrap/warp/bounce)
nemo
parents:
9470
diff
changeset
|
399 |
|
7627 | 400 |
// clip velocity at 2 - over 1 per pixel, but really shouldn't cause many actual problems. |
15825 | 401 |
if Gear^.dX.QWordValue > 8160437862 then |
402 |
Gear^.dX.QWordValue:= 8160437862; |
|
403 |
if Gear^.dY.QWordValue > 8160437862 then |
|
404 |
Gear^.dY.QWordValue:= 8160437862; |
|
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
|
405 |
|
10354 | 406 |
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
|
407 |
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
|
408 |
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
|
409 |
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
|
410 |
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
|
411 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
412 |
collV := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
413 |
collH := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
414 |
tdX := Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
415 |
tdY := Gear^.dY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
416 |
|
3359 | 417 |
// 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
|
418 |
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
|
419 |
or (gX > max(LAND_WIDTH * 3 div 2, 6144)) then |
11389
c93f204a5a00
Set gears that go off map to gmDestroy instead of collision, disable morewind for no-gravity gears, restrict application of wind to gears that are already moving and not colliding.
nemo
parents:
11342
diff
changeset
|
420 |
Gear^.Message := Gear^.Message or gmDestroy; |
3359 | 421 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
422 |
if Gear^.dY.isNegative then |
4578 | 423 |
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
|
424 |
land:= TestCollisionYwithGear(Gear, -1); |
9820 | 425 |
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
|
426 |
if land <> 0 then |
4578 | 427 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
428 |
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
|
429 |
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
|
430 |
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
|
431 |
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
|
432 |
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
|
433 |
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
|
434 |
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
|
435 |
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
|
436 |
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
|
437 |
else Gear^.dY := - Gear^.dY * cElastic |
4578 | 438 |
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
|
439 |
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
|
440 |
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
|
441 |
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
|
442 |
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
|
443 |
end |
4578 | 444 |
end |
8795 | 445 |
else |
6498 | 446 |
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
|
447 |
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
|
448 |
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
|
449 |
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
|
450 |
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
|
451 |
isFalling := false; |
8795 | 452 |
if land and lfIce <> 0 then |
6498 | 453 |
Gear^.dX := Gear^.dX * (_0_9 + Gear^.Friction * _0_1) |
8795 | 454 |
else |
6498 | 455 |
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
|
456 |
|
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
|
457 |
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
|
458 |
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
|
459 |
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
|
460 |
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
|
461 |
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
|
462 |
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
|
463 |
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
|
464 |
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
|
465 |
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
|
466 |
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
|
467 |
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
|
468 |
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
|
469 |
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
|
470 |
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
|
471 |
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
|
472 |
end |
4578 | 473 |
end; |
503 | 474 |
|
2989
b49d87499398
Add back sheepluva's 45° patch for some weapons. Rescale Tiy's latest icons to his specifications.
nemo
parents:
2983
diff
changeset
|
475 |
|
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
|
476 |
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
|
477 |
if xland <> 0 then |
4578 | 478 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
479 |
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
|
480 |
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
|
481 |
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
|
482 |
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
|
483 |
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
|
484 |
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
|
485 |
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
|
486 |
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
|
487 |
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
|
488 |
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
|
489 |
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
|
490 |
end |
4578 | 491 |
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
|
492 |
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
|
493 |
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
|
494 |
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
|
495 |
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
|
496 |
end; |
10015 | 497 |
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
|
498 |
(((Gear^.AdvBounce=1) and ((collV=-1) or ((tdX.QWordValue + tdY.QWordValue) > _0_2.QWordValue)))) 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
|
499 |
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
|
500 |
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
|
501 |
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
|
502 |
Gear^.dX := tdY*Gear^.Elasticity*Gear^.Friction; |
9767 | 503 |
Gear^.dY := tdX*Gear^.Elasticity; |
504 |
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
|
505 |
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
|
506 |
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
|
507 |
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
|
508 |
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
|
509 |
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
|
510 |
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
|
511 |
|
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
|
512 |
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
|
513 |
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
|
514 |
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
|
515 |
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
|
516 |
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
|
517 |
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
|
518 |
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
|
519 |
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
|
520 |
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
|
521 |
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
|
522 |
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
|
523 |
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
|
524 |
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
|
525 |
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
|
526 |
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
|
527 |
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
|
528 |
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
|
529 |
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
|
530 |
Gear^.dX.isNegative := false; |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
531 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
532 |
isFalling := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
533 |
Gear^.AdvBounce := 10; |
4578 | 534 |
end; |
503 | 535 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
536 |
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
|
537 |
dec(Gear^.AdvBounce); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
538 |
|
11389
c93f204a5a00
Set gears that go off map to gmDestroy instead of collision, disable morewind for no-gravity gears, restrict application of wind to gears that are already moving and not colliding.
nemo
parents:
11342
diff
changeset
|
539 |
if isFalling and (Gear^.State and gstNoGravity = 0) then |
c93f204a5a00
Set gears that go off map to gmDestroy instead of collision, disable morewind for no-gravity gears, restrict application of wind to gears that are already moving and not colliding.
nemo
parents:
11342
diff
changeset
|
540 |
begin |
15619
3409433a236a
Fix many gears not being affected by gfMoreWind on turn end
Wuzzy <Wuzzy2@mail.ru>
parents:
15609
diff
changeset
|
541 |
// Apply gravity and wind |
11389
c93f204a5a00
Set gears that go off map to gmDestroy instead of collision, disable morewind for no-gravity gears, restrict application of wind to gears that are already moving and not colliding.
nemo
parents:
11342
diff
changeset
|
542 |
Gear^.dY := Gear^.dY + cGravity; |
15619
3409433a236a
Fix many gears not being affected by gfMoreWind on turn end
Wuzzy <Wuzzy2@mail.ru>
parents:
15609
diff
changeset
|
543 |
if ((GameFlags and gfMoreWind) <> 0) and |
3409433a236a
Fix many gears not being affected by gfMoreWind on turn end
Wuzzy <Wuzzy2@mail.ru>
parents:
15609
diff
changeset
|
544 |
// Disable gfMoreWind for land objects on turn end to prevent bouncing them forever |
15620
6e72bd61002e
Disable gfMoreWind for land objects on turn end only after a fixed-time delay
Wuzzy <Wuzzy2@mail.ru>
parents:
15619
diff
changeset
|
545 |
// This solution is rather ugly, in that it will occassionally suddenly wind physics |
6e72bd61002e
Disable gfMoreWind for land objects on turn end only after a fixed-time delay
Wuzzy <Wuzzy2@mail.ru>
parents:
15619
diff
changeset
|
546 |
// while a gear is moving, this can be rather confusing. |
6e72bd61002e
Disable gfMoreWind for land objects on turn end only after a fixed-time delay
Wuzzy <Wuzzy2@mail.ru>
parents:
15619
diff
changeset
|
547 |
// TODO: Find a way to make gfMoreWind-affected land objects settle more reliably |
6e72bd61002e
Disable gfMoreWind for land objects on turn end only after a fixed-time delay
Wuzzy <Wuzzy2@mail.ru>
parents:
15619
diff
changeset
|
548 |
// and quickler without touching wind itselvs |
15662 | 549 |
((not (Gear^.Kind in [gtMine, gtAirMine, gtSMine, gtKnife, gtExplosives, gtSentry])) or (TimeNotInTurn < MaxMoreWindTime)) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
550 |
Gear^.dX := Gear^.dX + cWindSpeed / Gear^.Density |
9820 | 551 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
552 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
553 |
Gear^.X := Gear^.X + Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
554 |
Gear^.Y := Gear^.Y + Gear^.dY; |
9479
167dea42d7d7
move border back a bit from left/right bounds, bee tweak
nemo
parents:
9477
diff
changeset
|
555 |
CheckGearDrowning(Gear); |
6498 | 556 |
if (not isFalling) and ((Gear^.dX.QWordValue + Gear^.dY.QWordValue) < _0_02.QWordValue) then |
6450 | 557 |
Gear^.State := Gear^.State and (not gstMoving) |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
558 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
559 |
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
|
560 |
|
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
|
561 |
if ((xland or land) and lfBouncy <> 0) and (Gear^.dX.QWordValue < _0_15.QWordValue) and (Gear^.dY.QWordValue < _0_15.QWordValue) 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
|
562 |
Gear^.State := Gear^.State or gstCollision; |
10015 | 563 |
|
14595
6e5cda26f676
Tweak bounce effects of some gears
Wuzzy <Wuzzy2@mail.ru>
parents:
14593
diff
changeset
|
564 |
if ((xland or land) and lfBouncy <> 0) and |
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
|
565 |
((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
|
566 |
begin |
10508 | 567 |
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
|
568 |
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
|
569 |
else if (Gear^.nImpactSounds > 0) and |
7777 | 570 |
(Gear^.State and gstCollision <> 0) and |
571 |
(((Gear^.Kind <> gtMine) and (Gear^.Damage <> 0)) or (Gear^.State and gstMoving <> 0)) and |
|
572 |
(((Gear^.Radius < 3) and (Gear^.dY < -_0_1)) or |
|
8795 | 573 |
((Gear^.Radius >= 3) and |
7777 | 574 |
((Gear^.dX.QWordValue > _0_1.QWordValue) or (Gear^.dY.QWordValue > _0_1.QWordValue)))) then |
15609 | 575 |
PlaySound(TSound(ord(Gear^.ImpactSound) + LongInt(GetRandom(Gear^.nImpactSounds))), Gear^.Kind <> gtDynamite); |
4 | 576 |
end; |
577 |
||
578 |
//////////////////////////////////////////////////////////////////////////////// |
|
579 |
procedure doStepBomb(Gear: PGear); |
|
8795 | 580 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
581 |
i, x, y: LongInt; |
8413
454191defee6
restore former cluster behaviour (makes the most diff for the bomb)
nemo
parents:
8370
diff
changeset
|
582 |
dX, dY, gdX: hwFloat; |
3475 | 583 |
vg: PVisualGear; |
4 | 584 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
585 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
586 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
587 |
doStepFallingGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
588 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
589 |
dec(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
590 |
if Gear^.Timer = 1000 then // might need adjustments |
8795 | 591 |
case Gear^.Kind of |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
592 |
gtGrenade, |
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
593 |
gtClusterBomb, |
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
594 |
gtWatermelon, |
14032
3c40754f6cfe
Add Grenade taunt when grenade close to hog is about to blow up
Wuzzy <Wuzzy2@mail.ru>
parents:
14030
diff
changeset
|
595 |
gtHellishBomb: makeHogsWorry(Gear^.X, Gear^.Y, Gear^.Boom, Gear^.Kind); |
3c40754f6cfe
Add Grenade taunt when grenade close to hog is about to blow up
Wuzzy <Wuzzy2@mail.ru>
parents:
14030
diff
changeset
|
596 |
gtGasBomb: makeHogsWorry(Gear^.X, Gear^.Y, 50, Gear^.Kind); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
597 |
end; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
598 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
599 |
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
|
600 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
601 |
CheckCollision(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
602 |
if (Gear^.State and gstCollision) <> 0 then |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
603 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, 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
|
604 |
end; |
3004 | 605 |
|
3475 | 606 |
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
|
607 |
begin |
3475 | 608 |
vg:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeWhite); |
609 |
if vg <> nil then |
|
610 |
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
|
611 |
end; |
3475 | 612 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
613 |
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
|
614 |
begin |
8795 | 615 |
case Gear^.Kind of |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
616 |
gtGrenade: doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
617 |
gtBall: doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
8795 | 618 |
gtClusterBomb: |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
619 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
620 |
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
|
621 |
y := hwRound(Gear^.Y); |
8413
454191defee6
restore former cluster behaviour (makes the most diff for the bomb)
nemo
parents:
8370
diff
changeset
|
622 |
gdX:= Gear^.dX; |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
623 |
doMakeExplosion(x, y, Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
624 |
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
|
625 |
begin |
8413
454191defee6
restore former cluster behaviour (makes the most diff for the bomb)
nemo
parents:
8370
diff
changeset
|
626 |
dX := rndSign(GetRandomf * _0_1) + gdX / 5; |
7001 | 627 |
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
|
628 |
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
|
629 |
end |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
630 |
end; |
8795 | 631 |
gtWatermelon: |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
632 |
begin |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
633 |
x := hwRound(Gear^.X); |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
634 |
y := hwRound(Gear^.Y); |
8413
454191defee6
restore former cluster behaviour (makes the most diff for the bomb)
nemo
parents:
8370
diff
changeset
|
635 |
gdX:= Gear^.dX; |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
636 |
doMakeExplosion(x, y, Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
637 |
for i:= 0 to 5 do |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
638 |
begin |
8413
454191defee6
restore former cluster behaviour (makes the most diff for the bomb)
nemo
parents:
8370
diff
changeset
|
639 |
dX := rndSign(GetRandomf * _0_1) + gdX / 5; |
7001 | 640 |
dY := (GetRandomf - _1_5) * _0_3; |
6120 | 641 |
FollowGear:= AddGear(x, y, gtMelonPiece, 0, dX, dY, 75); |
642 |
FollowGear^.DirAngle := i * 60 |
|
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
643 |
end |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
644 |
end; |
8795 | 645 |
gtHellishBomb: |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
646 |
begin |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
647 |
x := hwRound(Gear^.X); |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
648 |
y := hwRound(Gear^.Y); |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
649 |
doMakeExplosion(x, y, Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
650 |
|
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
651 |
for i:= 0 to 127 do |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
652 |
begin |
7001 | 653 |
dX := AngleCos(i * 16) * _0_5 * (GetRandomf + _1); |
654 |
dY := AngleSin(i * 16) * _0_5 * (GetRandomf + _1); |
|
6131 | 655 |
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
|
656 |
begin |
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
657 |
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
|
658 |
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
|
659 |
end |
61c1161ee32f
Remove unnecessary assignments post-creation. Simplifies Lua manipulation of these adds as well as just being tidier.
nemo
parents:
6122
diff
changeset
|
660 |
else |
8795 | 661 |
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
|
662 |
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
|
663 |
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
|
664 |
end; |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
665 |
end |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
666 |
end; |
3712 | 667 |
gtGasBomb: |
668 |
begin |
|
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
669 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
3712 | 670 |
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
|
671 |
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
|
672 |
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
|
673 |
y:= GetRandom(40); |
6120 | 674 |
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
|
675 |
end |
3712 | 676 |
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
|
677 |
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
|
678 |
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
|
679 |
exit |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
680 |
end; |
6498 | 681 |
|
682 |
CalcRotationDirAngle(Gear); |
|
683 |
||
684 |
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
|
685 |
begin |
6498 | 686 |
|
687 |
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
|
688 |
begin |
6498 | 689 |
Gear^.nImpactSounds := 0; |
690 |
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
|
691 |
end; |
6498 | 692 |
|
693 |
if (GameTicks and $3F) = 0 then |
|
694 |
if (Gear^.State and gstCollision) = 0 then |
|
695 |
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
|
696 |
end; |
4 | 697 |
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
|
698 |
|
2457
ecf0c7e7995b
Initial molotov cocktail. Still needs graphics, tweaking of fire behaviour. Also changed probabilities for default weapon sets
nemo
parents:
2455
diff
changeset
|
699 |
//////////////////////////////////////////////////////////////////////////////// |
ecf0c7e7995b
Initial molotov cocktail. Still needs graphics, tweaking of fire behaviour. Also changed probabilities for default weapon sets
nemo
parents:
2455
diff
changeset
|
700 |
procedure doStepMolotov(Gear: PGear); |
8795 | 701 |
var |
6472 | 702 |
s: Longword; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
703 |
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
|
704 |
dX, dY: hwFloat; |
5874
5cd329cf2460
nemo's molotov burst effect; with a slight color modification added
sheepluva
parents:
5873
diff
changeset
|
705 |
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
|
706 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
707 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
708 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
709 |
doStepFallingGear(Gear); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
710 |
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
|
711 |
|
5870 | 712 |
// 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
|
713 |
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
|
714 |
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
|
715 |
begin |
5873 | 716 |
// 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
|
717 |
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
|
718 |
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
|
719 |
else i:= 50; |
8795 | 720 |
|
5873 | 721 |
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
|
722 |
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
|
723 |
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
|
724 |
end; |
5870 | 725 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
726 |
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
|
727 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
728 |
PlaySound(sndMolotov); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
729 |
gX := hwRound(Gear^.X); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
730 |
gY := hwRound(Gear^.Y); |
5924
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
731 |
for i:= 0 to 4 do |
5874
5cd329cf2460
nemo's molotov burst effect; with a slight color modification added
sheepluva
parents:
5873
diff
changeset
|
732 |
begin |
15072 | 733 |
glass:= AddVisualGear(gx+random(7)-3, gy+random(7)-3, vgtEgg); |
6131 | 734 |
if glass <> nil then |
5924
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
735 |
with glass^ do |
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
736 |
begin |
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
737 |
Frame:= 2; |
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
738 |
Tint:= $41B83ED0 - i * $10081000; |
15072 | 739 |
dX:= dX + hwFloat2Float(Gear^.dX) / 2; |
7066
12cc2bd84b0b
Make pas2c even more happier with uGears.c, allow assigning arrays in some cases
unc0rr
parents:
7062
diff
changeset
|
740 |
Angle:= random(360); |
5924
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
741 |
FrameTicks:= 750; |
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
742 |
State:= ord(sprEgg) |
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
743 |
end; |
5874
5cd329cf2460
nemo's molotov burst effect; with a slight color modification added
sheepluva
parents:
5873
diff
changeset
|
744 |
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
|
745 |
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
|
746 |
begin |
7001 | 747 |
dX := AngleCos(i * 2) * ((_0_15*(i div 5))) * (GetRandomf + _1); |
748 |
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
|
749 |
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
|
750 |
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
|
751 |
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
|
752 |
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
|
753 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
754 |
DeleteGear(Gear); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
755 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
756 |
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
|
757 |
end; |
4 | 758 |
|
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
|
759 |
//////////////////////////////////////////////////////////////////////////////// |
1279 | 760 |
|
78 | 761 |
procedure doStepCluster(Gear: PGear); |
762 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
763 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
764 |
doStepFallingGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
765 |
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
|
766 |
begin |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
767 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
768 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
769 |
exit |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
770 |
end; |
1262 | 771 |
|
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
772 |
if (Gear^.Kind = gtMelonPiece) then |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
773 |
CalcRotationDirAngle(Gear) |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
774 |
else if (GameTicks and $1F) = 0 then |
10352 | 775 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace); |
78 | 776 |
end; |
777 |
||
4 | 778 |
//////////////////////////////////////////////////////////////////////////////// |
4168 | 779 |
procedure doStepShell(Gear: PGear); |
4 | 780 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
781 |
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
|
782 |
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
|
783 |
Gear^.dX := Gear^.dX + cWindSpeed; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
784 |
doStepFallingGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
785 |
if (Gear^.State and gstCollision) <> 0 then |
4578 | 786 |
begin |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
787 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
788 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
789 |
exit |
4578 | 790 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
791 |
if (GameTicks and $3F) = 0 then |
10352 | 792 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace); |
95 | 793 |
end; |
794 |
||
4 | 795 |
//////////////////////////////////////////////////////////////////////////////// |
4578 | 796 |
procedure doStepSnowball(Gear: PGear); |
797 |
var kick, i: LongInt; |
|
798 |
particle: PVisualGear; |
|
8945
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
799 |
gdX, gdY: hwFloat; |
4578 | 800 |
begin |
801 |
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
|
802 |
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
|
803 |
Gear^.dX := Gear^.dX + cWindSpeed; |
8945
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
804 |
gdX := Gear^.dX; |
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
805 |
gdY := Gear^.dY; |
4578 | 806 |
doStepFallingGear(Gear); |
807 |
CalcRotationDirAngle(Gear); |
|
808 |
if (Gear^.State and gstCollision) <> 0 then |
|
809 |
begin |
|
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
810 |
kick:= hwRound((hwAbs(gdX)+hwAbs(gdY)) * Gear^.Boom / 10000); |
8945
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
811 |
Gear^.dX:= gdX; |
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
812 |
Gear^.dY:= gdY; |
7621 | 813 |
AmmoShove(Gear, 0, kick); |
4578 | 814 |
for i:= 15 + kick div 10 downto 0 do |
815 |
begin |
|
816 |
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
|
817 |
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
|
818 |
particle^.dX := particle^.dX + (Gear^.dX.QWordValue / 21474836480) |
4578 | 819 |
end; |
820 |
DeleteGear(Gear); |
|
821 |
exit |
|
822 |
end; |
|
823 |
if ((GameTicks and $1F) = 0) and (Random(3) = 0) then |
|
824 |
begin |
|
4582 | 825 |
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
|
826 |
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
|
827 |
particle^.dX := particle^.dX + (Gear^.dX.QWordValue / 21474836480) |
4578 | 828 |
end |
829 |
end; |
|
830 |
||
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
|
831 |
//////////////////////////////////////////////////////////////////////////////// |
4611 | 832 |
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
|
833 |
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
|
834 |
move, draw, allpx, gun: Boolean; |
4611 | 835 |
s: PSDL_Surface; |
836 |
p: PLongwordArray; |
|
5693 | 837 |
lf: LongWord; |
15927
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
838 |
oldY: hwFloat; |
4611 | 839 |
begin |
5025
ac1691d35cf2
Land sprayer tweaks, make land spray and mudball not end turn
nemo
parents:
5024
diff
changeset
|
840 |
gun:= (Gear^.State and gstTmpFlag) <> 0; |
5024 | 841 |
move:= false; |
842 |
draw:= false; |
|
5025
ac1691d35cf2
Land sprayer tweaks, make land spray and mudball not end turn
nemo
parents:
5024
diff
changeset
|
843 |
if gun then |
5024 | 844 |
begin |
15927
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
845 |
inc(Gear^.Pos); |
6450 | 846 |
Gear^.State:= Gear^.State and (not gstInvisible); |
5024 | 847 |
doStepFallingGear(Gear); |
848 |
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
|
849 |
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
|
850 |
draw:= true; |
5024 | 851 |
xx:= hwRound(Gear^.X); |
852 |
yy:= hwRound(Gear^.Y); |
|
14303
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
14225
diff
changeset
|
853 |
if draw and (WorldEdge = weWrap) and ((xx < leftX + 3) or (xx > rightX - 3)) then |
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
14225
diff
changeset
|
854 |
begin |
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
14225
diff
changeset
|
855 |
if xx < leftX + 3 then |
9563 | 856 |
xx:= rightX-3 |
857 |
else xx:= leftX+3; |
|
858 |
Gear^.X:= int2hwFloat(xx) |
|
859 |
end |
|
5024 | 860 |
end |
861 |
else if GameTicks and $7 = 0 then |
|
4611 | 862 |
with Gear^ do |
863 |
begin |
|
15927
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
864 |
inc(Pos, 8); |
6450 | 865 |
State:= State and (not gstInvisible); |
15927
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
866 |
oldY:= Y; |
5355 | 867 |
X:= X + cWindSpeed * 3200 + dX; |
15927
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
868 |
Y:= Y + dY + cGravity * (vobFallSpeed * 8); // using same value as flakes to try and get similar results |
4611 | 869 |
xx:= hwRound(X); |
870 |
yy:= hwRound(Y); |
|
871 |
if vobVelocity <> 0 then |
|
872 |
begin |
|
7649 | 873 |
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
|
874 |
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
|
875 |
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
|
876 |
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
|
877 |
DirAngle := DirAngle - 360; |
4611 | 878 |
end; |
879 |
// move back to cloud layer |
|
10354 | 880 |
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
|
881 |
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
|
882 |
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
|
883 |
move:=true |
15927
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
884 |
else if (cGravity.isNegative) and (yy < LAND_HEIGHT-1200) then |
10736
5b7cf9fcb47e
Try to handle negative gravity w/ snow. Still needs to look nicer. Currently causes banding.
nemo
parents:
10679
diff
changeset
|
885 |
move:=true |
4791 | 886 |
// Solid pixel encountered |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
887 |
else if ((yy and LAND_HEIGHT_MASK) = 0) and ((xx and LAND_WIDTH_MASK) = 0) and (LandGet(yy, xx) <> 0) then |
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
888 |
begin |
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
889 |
lf:= LandGet(yy, xx) and (lfObject or lfBasic or lfIndestructible); |
8602 | 890 |
if lf = 0 then lf:= lfObject; |
4791 | 891 |
// If there's room below keep falling |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
892 |
if (((yy-1) and LAND_HEIGHT_MASK) = 0) and (LandGet(yy-1, xx) = 0) then |
4791 | 893 |
begin |
894 |
X:= X - cWindSpeed * 1600 - dX; |
|
895 |
end |
|
896 |
// If there's room below, on the sides, fill the gaps |
|
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
897 |
else if (((yy-1) and LAND_HEIGHT_MASK) = 0) then |
15927
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
898 |
begin |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
899 |
if (((xx - 1) and LAND_WIDTH_MASK) = 0) and (LandGet(yy - 1, (xx - 1)) = 0) then |
15927
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
900 |
begin |
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
901 |
X:= X - _0_8; |
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
902 |
Y:= oldY; |
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
903 |
end |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
904 |
else if (((xx - 2) and LAND_WIDTH_MASK) = 0) and (LandGet(yy - 1, (xx - 2)) = 0) then |
15927
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
905 |
begin |
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
906 |
X:= X - _1_6; |
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
907 |
Y:= oldY; |
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
908 |
end |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
909 |
else if (((xx + 1) and LAND_WIDTH_MASK) = 0) and (LandGet(yy - 1, (xx + 1)) = 0) then |
15927
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
910 |
begin |
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
911 |
X:= X + _0_8; |
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
912 |
Y:= oldY; |
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
913 |
end |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
914 |
else if (((xx + 2) and LAND_WIDTH_MASK) = 0) and (LandGet(yy - 1, (xx + 2)) = 0) then |
15927
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
915 |
begin |
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
916 |
X:= X + _1_6; |
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
917 |
Y:= oldY; |
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
918 |
end else |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
919 |
if ((((yy+1) and LAND_HEIGHT_MASK) = 0) and ((LandGet(yy + 1, xx) and $FF) <> 0)) then |
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
920 |
move:=true |
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
921 |
else |
15927
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
922 |
draw:= true |
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
923 |
end |
4805
01332828b568
Fancier detection of hogs/objects. Hogs wont get buried even by the worst of storms.
Palewolf
parents:
4803
diff
changeset
|
924 |
// if there's an hog/object below do nothing |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
925 |
else if ((((yy+1) and LAND_HEIGHT_MASK) = 0) and ((LandGet(yy+1, xx) and $FF) <> 0)) |
4805
01332828b568
Fancier detection of hogs/objects. Hogs wont get buried even by the worst of storms.
Palewolf
parents:
4803
diff
changeset
|
926 |
then move:=true |
5024 | 927 |
else draw:= true |
928 |
end |
|
15927
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
929 |
end; |
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
930 |
|
6131 | 931 |
if draw then |
5024 | 932 |
with Gear^ do |
933 |
begin |
|
934 |
// we've collided with land. draw some stuff and get back into the clouds |
|
935 |
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
|
936 |
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
|
937 |
or (CurAmmoGear^.Kind <> gtRope)) then |
5024 | 938 |
begin |
5025
ac1691d35cf2
Land sprayer tweaks, make land spray and mudball not end turn
nemo
parents:
5024
diff
changeset
|
939 |
if not gun then |
5024 | 940 |
begin |
941 |
dec(yy,3); |
|
942 |
dec(xx,1) |
|
943 |
end; |
|
944 |
s:= SpritesData[sprSnow].Surface; |
|
945 |
p:= s^.pixels; |
|
946 |
allpx:= true; |
|
947 |
for py:= 0 to Pred(s^.h) do |
|
948 |
begin |
|
949 |
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
|
950 |
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
|
951 |
lx:=xx + px; ly:=yy + py; |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
952 |
if (ly and LAND_HEIGHT_MASK = 0) and (lx and LAND_WIDTH_MASK = 0) and (LandGet(ly, lx) and $FF = 0) then |
5024 | 953 |
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
|
954 |
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
|
955 |
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
|
956 |
if cReducedQuality and rqBlurryLand <> 0 then |
5025
ac1691d35cf2
Land sprayer tweaks, make land spray and mudball not end turn
nemo
parents:
5024
diff
changeset
|
957 |
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
|
958 |
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
|
959 |
end; |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
960 |
if LandGet(yy + py, xx + px) <= lfAllObjMask then |
5025
ac1691d35cf2
Land sprayer tweaks, make land spray and mudball not end turn
nemo
parents:
5024
diff
changeset
|
961 |
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
|
962 |
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
|
963 |
LandDirty[yy div 32, xx div 32]:= 1; |
15930
f39f0f614dbf
Use LandPixels array allocate in hwengine-future library
unC0Rr
parents:
15929
diff
changeset
|
964 |
if LandPixelGet(ry, rx) = 0 then |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
965 |
LandSet(ly, lx, lfDamaged or lfObject) |
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
966 |
else LandSet(ly, lx, lfDamaged or lfBasic) |
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
|
967 |
end |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
968 |
else LandSet(ly, lx, lf); |
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
|
969 |
if gun then |
15930
f39f0f614dbf
Use LandPixels array allocate in hwengine-future library
unC0Rr
parents:
15929
diff
changeset
|
970 |
LandPixelSet(ry, rx, (Gear^.Tint shr 24 shl RShift) or |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
971 |
(Gear^.Tint shr 16 and $FF shl GShift) or |
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
972 |
(Gear^.Tint shr 8 and $FF shl BShift) or |
15930
f39f0f614dbf
Use LandPixels array allocate in hwengine-future library
unC0Rr
parents:
15929
diff
changeset
|
973 |
(p^[px] and AMask)) |
f39f0f614dbf
Use LandPixels array allocate in hwengine-future library
unC0Rr
parents:
15929
diff
changeset
|
974 |
else LandPixelSet(ry, rx, addBgColor(LandPixelGet(ry, rx), p^[px])); |
5024 | 975 |
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
|
976 |
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
|
977 |
end; |
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10125
diff
changeset
|
978 |
p:= PLongWordArray(@(p^[s^.pitch shr 2])) |
5024 | 979 |
end; |
8795 | 980 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
981 |
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
|
982 |
UpdateLandTexture(xx, Pred(s^.h), yy, Pred(s^.w), true) |
4791 | 983 |
else |
4611 | 984 |
begin |
5024 | 985 |
UpdateLandTexture( |
986 |
max(0, min(LAND_WIDTH, xx)), |
|
987 |
min(LAND_WIDTH - xx, Pred(s^.w)), |
|
988 |
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
|
989 |
min(LAND_HEIGHT - yy, Pred(s^.h)), false // could this be true without unnecessarily creating blanks? |
5024 | 990 |
); |
4791 | 991 |
end; |
4611 | 992 |
end |
5024 | 993 |
end; |
994 |
||
995 |
if move then |
|
996 |
begin |
|
5025
ac1691d35cf2
Land sprayer tweaks, make land spray and mudball not end turn
nemo
parents:
5024
diff
changeset
|
997 |
if gun then |
5024 | 998 |
begin |
999 |
DeleteGear(Gear); |
|
1000 |
exit |
|
1001 |
end; |
|
5695 | 1002 |
Gear^.Pos:= 0; |
7721 | 1003 |
Gear^.X:= int2hwFloat(LongInt(GetRandom(snowRight - snowLeft)) + snowLeft); |
15927
046182f1080b
Optimize doStepSnowflake a bit, losing backwards compatibility
unC0Rr
parents:
15873
diff
changeset
|
1004 |
if (cGravity.isNegative) and (yy < LAND_HEIGHT-1200) then |
10736
5b7cf9fcb47e
Try to handle negative gravity w/ snow. Still needs to look nicer. Currently causes banding.
nemo
parents:
10679
diff
changeset
|
1005 |
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
|
1006 |
else Gear^.Y:= int2hwFloat(LAND_HEIGHT + LongInt(GetRandom(50)) - 1250); |
5413 | 1007 |
Gear^.State:= Gear^.State or gstInvisible; |
4611 | 1008 |
end |
1009 |
end; |
|
1010 |
||
4578 | 1011 |
//////////////////////////////////////////////////////////////////////////////// |
4 | 1012 |
procedure doStepGrave(Gear: PGear); |
1013 |
begin |
|
7394 | 1014 |
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
|
1015 |
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
|
1016 |
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
|
1017 |
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
|
1018 |
end; |
7394 | 1019 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1020 |
AllInactive := false; |
7394 | 1021 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1022 |
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
|
1023 |
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
|
1024 |
Gear^.dY := _0; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1025 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1026 |
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
|
1027 |
if TestCollisionY(Gear, 1) <> 0 then |
9820 | 1028 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1029 |
Gear^.dY := - Gear^.dY * Gear^.Elasticity; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1030 |
if Gear^.dY > - _1div1024 then |
9820 | 1031 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1032 |
Gear^.Active := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1033 |
exit |
9820 | 1034 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1035 |
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
|
1036 |
PlaySound(Gear^.ImpactSound) |
9820 | 1037 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1038 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1039 |
Gear^.Y := Gear^.Y + Gear^.dY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1040 |
CheckGearDrowning(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1041 |
Gear^.dY := Gear^.dY + cGravity |
4 | 1042 |
end; |
1043 |
||
1044 |
//////////////////////////////////////////////////////////////////////////////// |
|
3080 | 1045 |
procedure doStepBeeWork(Gear: PGear); |
8795 | 1046 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1047 |
t: hwFloat; |
5748
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1048 |
gX,gY,i: LongInt; |
14535
5ac181cb2396
Fix bee targeting fail across wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14419
diff
changeset
|
1049 |
uw, nuw, wrapped: boolean; |
5748
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1050 |
flower: PVisualGear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1051 |
|
4 | 1052 |
begin |
14535
5ac181cb2396
Fix bee targeting fail across wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14419
diff
changeset
|
1053 |
wrapped:= WorldWrap(Gear); |
5ac181cb2396
Fix bee targeting fail across wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14419
diff
changeset
|
1054 |
if wrapped then |
5ac181cb2396
Fix bee targeting fail across wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14419
diff
changeset
|
1055 |
HomingWrap(Gear); |
5ac181cb2396
Fix bee targeting fail across wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14419
diff
changeset
|
1056 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1057 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1058 |
gX := hwRound(Gear^.X); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1059 |
gY := hwRound(Gear^.Y); |
6251 | 1060 |
uw := (Gear^.Tag <> 0); // was bee underwater last tick? |
10354 | 1061 |
nuw := CheckCoordInWater(gx, gy + Gear^.Radius); // is bee underwater now? |
6251 | 1062 |
|
1063 |
// if water entered or left |
|
1064 |
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
|
1065 |
begin |
10363 | 1066 |
if Gear^.Timer <> 5000 then |
1067 |
AddSplashForGear(Gear, false); |
|
7053 | 1068 |
StopSoundChan(Gear^.SoundChannel); |
6251 | 1069 |
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
|
1070 |
begin |
6251 | 1071 |
Gear^.SoundChannel := LoopSound(sndBeeWater); |
1072 |
Gear^.Tag := 1; |
|
1073 |
end |
|
1074 |
else |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1075 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1076 |
Gear^.SoundChannel := LoopSound(sndBee); |
6251 | 1077 |
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
|
1078 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1079 |
end; |
6251 | 1080 |
|
1081 |
||
1082 |
if Gear^.Timer = 0 then |
|
9766
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1083 |
begin |
13593
083733ec7941
Add support for infinite fly time of jetpack and Birdy
Wuzzy <Wuzzy2@mail.ru>
parents:
13572
diff
changeset
|
1084 |
// no energy? just fall |
9766
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1085 |
doStepFallingGear(Gear); |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1086 |
// if drowning, stop bee sound |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1087 |
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
|
1088 |
StopSoundChan(Gear^.SoundChannel); |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1089 |
end |
6251 | 1090 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1091 |
begin |
11475 | 1092 |
if (Gear^.Timer 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
|
1093 |
begin |
11475 | 1094 |
if (Gear^.Timer and $3F) = 0 then |
10352 | 1095 |
AddVisualGear(gX, gY, vgtBeeTrace); |
1096 |
||
11475 | 1097 |
Gear^.dX := Gear^.dX + _0_000064 * (Gear^.Target.X - gX); |
1098 |
Gear^.dY := Gear^.dY + _0_000064 * (Gear^.Target.Y - gY); |
|
6251 | 1099 |
// make sure new speed isn't higher than original one (which we stored in Friction variable) |
1100 |
t := Gear^.Friction / Distance(Gear^.dX, Gear^.dY); |
|
1101 |
Gear^.dX := Gear^.dX * t; |
|
1102 |
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
|
1103 |
end; |
6251 | 1104 |
|
1105 |
Gear^.X := Gear^.X + Gear^.dX; |
|
1106 |
Gear^.Y := Gear^.Y + Gear^.dY; |
|
1107 |
||
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1108 |
end; |
3591 | 1109 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1110 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1111 |
CheckCollision(Gear); |
6251 | 1112 |
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
|
1113 |
begin |
7053 | 1114 |
StopSoundChan(Gear^.SoundChannel); |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
1115 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
5748
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1116 |
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
|
1117 |
begin |
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1118 |
flower:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtStraightShot); |
6131 | 1119 |
if flower <> nil then |
5748
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1120 |
with flower^ do |
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1121 |
begin |
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1122 |
Scale:= 0.75; |
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1123 |
dx:= 0.001 * (random(200)); |
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1124 |
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
|
1125 |
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
|
1126 |
dx := -dx; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1127 |
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
|
1128 |
dy := -dy; |
5748
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1129 |
FrameTicks:= random(250) + 250; |
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1130 |
State:= ord(sprTargetBee); |
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1131 |
end; |
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
1132 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1133 |
DeleteGear(Gear); |
10135 | 1134 |
exit; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1135 |
end; |
6251 | 1136 |
|
1137 |
if (Gear^.Timer > 0) then |
|
9766
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1138 |
begin |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1139 |
dec(Gear^.Timer); |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1140 |
if Gear^.Timer = 0 then |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1141 |
begin |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1142 |
// 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
|
1143 |
Gear^.RenderTimer:= false; |
62c49992b049
fix Issue #724: Bee sound never stops (underwater when timer is 0)
sheepluva
parents:
9742
diff
changeset
|
1144 |
// bee can drown when timer reached 0 |
9954 | 1145 |
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
|
1146 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1147 |
end; |
4 | 1148 |
end; |
1149 |
||
3080 | 1150 |
procedure doStepBee(Gear: PGear); |
15225
f55c1c895797
Bee: Call HomingWrap in pre-homing phase, too
Wuzzy <Wuzzy2@mail.ru>
parents:
15217
diff
changeset
|
1151 |
var wrapped: boolean; |
4 | 1152 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1153 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1154 |
Gear^.X := Gear^.X + Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1155 |
Gear^.Y := Gear^.Y + Gear^.dY; |
15225
f55c1c895797
Bee: Call HomingWrap in pre-homing phase, too
Wuzzy <Wuzzy2@mail.ru>
parents:
15217
diff
changeset
|
1156 |
wrapped:= WorldWrap(Gear); |
f55c1c895797
Bee: Call HomingWrap in pre-homing phase, too
Wuzzy <Wuzzy2@mail.ru>
parents:
15217
diff
changeset
|
1157 |
if wrapped then |
f55c1c895797
Bee: Call HomingWrap in pre-homing phase, too
Wuzzy <Wuzzy2@mail.ru>
parents:
15217
diff
changeset
|
1158 |
HomingWrap(Gear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1159 |
Gear^.dY := Gear^.dY + cGravity; |
10363 | 1160 |
CheckGearDrowning(Gear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1161 |
CheckCollision(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1162 |
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
|
1163 |
begin |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
1164 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1165 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1166 |
exit |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1167 |
end; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1168 |
dec(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1169 |
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
|
1170 |
begin |
6450 | 1171 |
Gear^.Hedgehog^.Gear^.Message:= Gear^.Hedgehog^.Gear^.Message and (not gmAttack); |
1172 |
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
|
1173 |
AttackBar:= 0; |
8795 | 1174 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1175 |
Gear^.SoundChannel := LoopSound(sndBee); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1176 |
Gear^.Timer := 5000; |
3591 | 1177 |
// save initial speed in otherwise unused Friction variable |
1178 |
Gear^.Friction := Distance(Gear^.dX, Gear^.dY); |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1179 |
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
|
1180 |
end; |
4 | 1181 |
end; |
1182 |
||
1183 |
//////////////////////////////////////////////////////////////////////////////// |
|
876 | 1184 |
procedure doStepShotIdle(Gear: PGear); |
1185 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1186 |
AllInactive := false; |
13152 | 1187 |
if (Gear^.Kind <> gtMinigunBullet) then |
1188 |
begin |
|
1189 |
inc(Gear^.Timer); |
|
1190 |
if Gear^.Timer > 75 then |
|
1191 |
begin |
|
1192 |
DeleteGear(Gear); |
|
1193 |
AfterAttack |
|
1194 |
end |
|
1195 |
end |
|
1196 |
else |
|
14577 | 1197 |
DeleteGear(Gear); |
876 | 1198 |
end; |
1199 |
||
13147
7040506c831f
Fix direction of dispensed bullet shells from shotgun/sniper/minigun
alfadur
parents:
13140
diff
changeset
|
1200 |
procedure CreateShellForGear(Gear: PGear; startFrame: Longword); |
7040506c831f
Fix direction of dispensed bullet shells from shotgun/sniper/minigun
alfadur
parents:
13140
diff
changeset
|
1201 |
var |
7040506c831f
Fix direction of dispensed bullet shells from shotgun/sniper/minigun
alfadur
parents:
13140
diff
changeset
|
1202 |
shell: PVisualGear; |
7040506c831f
Fix direction of dispensed bullet shells from shotgun/sniper/minigun
alfadur
parents:
13140
diff
changeset
|
1203 |
begin |
7040506c831f
Fix direction of dispensed bullet shells from shotgun/sniper/minigun
alfadur
parents:
13140
diff
changeset
|
1204 |
shell := AddVisualGear(hwRound(Gear^.x), hwRound(Gear^.y), vgtShell); |
7040506c831f
Fix direction of dispensed bullet shells from shotgun/sniper/minigun
alfadur
parents:
13140
diff
changeset
|
1205 |
if shell <> nil then |
7040506c831f
Fix direction of dispensed bullet shells from shotgun/sniper/minigun
alfadur
parents:
13140
diff
changeset
|
1206 |
begin |
7040506c831f
Fix direction of dispensed bullet shells from shotgun/sniper/minigun
alfadur
parents:
13140
diff
changeset
|
1207 |
shell^.dX := gear^.dX.QWordValue / -17179869184; |
7040506c831f
Fix direction of dispensed bullet shells from shotgun/sniper/minigun
alfadur
parents:
13140
diff
changeset
|
1208 |
if (gear^.dX.isNegative) then |
7040506c831f
Fix direction of dispensed bullet shells from shotgun/sniper/minigun
alfadur
parents:
13140
diff
changeset
|
1209 |
shell^.dX := -shell^.dX; |
7040506c831f
Fix direction of dispensed bullet shells from shotgun/sniper/minigun
alfadur
parents:
13140
diff
changeset
|
1210 |
shell^.dY := gear^.dY.QWordValue / -17179869184; |
7040506c831f
Fix direction of dispensed bullet shells from shotgun/sniper/minigun
alfadur
parents:
13140
diff
changeset
|
1211 |
shell^.Frame := startFrame; |
7040506c831f
Fix direction of dispensed bullet shells from shotgun/sniper/minigun
alfadur
parents:
13140
diff
changeset
|
1212 |
end; |
7040506c831f
Fix direction of dispensed bullet shells from shotgun/sniper/minigun
alfadur
parents:
13140
diff
changeset
|
1213 |
end; |
7040506c831f
Fix direction of dispensed bullet shells from shotgun/sniper/minigun
alfadur
parents:
13140
diff
changeset
|
1214 |
|
13407
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1215 |
function ShotgunLineHitHelp(Gear: PGear; oX, oY, tX, tY: hwFloat): Boolean; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1216 |
var i: LongInt; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1217 |
Collisions: PGearArray; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1218 |
begin |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1219 |
ShotgunLineHitHelp := false; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1220 |
Collisions := CheckAllGearsLineCollision(Gear, oX, oY, tX, tY); |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1221 |
i := Collisions^.Count; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1222 |
while i > 0 do |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1223 |
begin |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1224 |
dec(i); |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1225 |
if Collisions^.ar[i]^.Kind in |
15732 | 1226 |
[gtMine, gtSMine, gtAirMine, gtKnife, gtCase, gtTarget, gtExplosives, gtSentry] then |
13407
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1227 |
begin |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1228 |
Gear^.X := Collisions^.ar[i]^.X; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1229 |
Gear^.Y := Collisions^.ar[i]^.Y; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1230 |
ShotgunShot(Gear); |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1231 |
Gear^.doStep := @doStepShotIdle; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1232 |
ShotgunLineHitHelp := true; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1233 |
exit; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1234 |
end; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1235 |
end; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1236 |
end; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1237 |
|
4 | 1238 |
procedure doStepShotgunShot(Gear: PGear); |
8795 | 1239 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1240 |
i: LongWord; |
13407
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1241 |
oX, oY, tmpX, tmpY: hwFloat; |
4 | 1242 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1243 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1244 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1245 |
if ((Gear^.State and gstAnimation) = 0) then |
15745 | 1246 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1247 |
dec(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1248 |
if Gear^.Timer = 0 then |
15745 | 1249 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1250 |
PlaySound(sndShotgunFire); |
13147
7040506c831f
Fix direction of dispensed bullet shells from shotgun/sniper/minigun
alfadur
parents:
13140
diff
changeset
|
1251 |
CreateShellForGear(Gear, 0); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1252 |
Gear^.State := Gear^.State or gstAnimation |
15745 | 1253 |
end |
1254 |
else if (Gear^.Hedgehog^.Gear = nil) |
|
1255 |
or ((Gear^.Hedgehog^.Gear^.State and (gstMoving or gstHHDriven)) = gstMoving) then |
|
1256 |
begin |
|
7564
651d56a6e568
Cancel shotgun shot if hedgehog is moved moved (by explosion)
unc0rr
parents:
7539
diff
changeset
|
1257 |
DeleteGear(Gear); |
651d56a6e568
Cancel shotgun shot if hedgehog is moved moved (by explosion)
unc0rr
parents:
7539
diff
changeset
|
1258 |
AfterAttack; |
15745 | 1259 |
end; |
1260 |
exit |
|
1261 |
end |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1262 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1263 |
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
|
1264 |
|
13407
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1265 |
i := 100; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1266 |
oX := Gear^.X; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1267 |
oY := Gear^.Y; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1268 |
repeat |
13407
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1269 |
if Gear^.Tag = 0 then |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1270 |
begin |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1271 |
Gear^.X := Gear^.X + Gear^.dX; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1272 |
Gear^.Y := Gear^.Y + Gear^.dY; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1273 |
end; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1274 |
|
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1275 |
tmpX := Gear^.X; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1276 |
tmpY := Gear^.Y; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1277 |
if (Gear^.PortalCounter < 30) and WorldWrap(Gear) then |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1278 |
begin |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1279 |
inc(Gear^.PortalCounter); |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1280 |
if ShotgunLineHitHelp(Gear, oX, oY, tmpX, tmpY) then |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1281 |
exit; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1282 |
oX := Gear^.X; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1283 |
oY := Gear^.Y; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1284 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1285 |
CheckCollision(Gear); |
13407
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1286 |
|
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1287 |
if ((Gear^.State and gstCollision) <> 0) then |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1288 |
begin |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1289 |
if Gear^.Tag = 0 then |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1290 |
begin |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1291 |
//Try to align the shot with the land to give portals a chance to catch it |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1292 |
Gear^.X := Gear^.X + Gear^.dX * 2; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1293 |
Gear^.Y := Gear^.Y + Gear^.dY * 2; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1294 |
Gear^.Tag := 1 |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1295 |
end |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1296 |
else |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1297 |
begin |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1298 |
Gear^.X := Gear^.X + Gear^.dX * 6; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1299 |
Gear^.Y := Gear^.Y + Gear^.dY * 6; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1300 |
ShotgunShot(Gear); |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1301 |
Gear^.doStep := @doStepShotIdle; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1302 |
end; |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1303 |
exit |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1304 |
end |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1305 |
else |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1306 |
Gear^.Tag := 0; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1307 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1308 |
CheckGearDrowning(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1309 |
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
|
1310 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1311 |
Gear^.doStep := @doStepShotIdle; |
13407
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1312 |
break; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1313 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1314 |
dec(i) |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1315 |
until i = 0; |
13407
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1316 |
|
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1317 |
ShotgunLineHitHelp(Gear, oX, oY, Gear^.X, Gear^.Y); |
06792533ef91
ensure shotgun works with portals and make it hit airmines
alfadur
parents:
13406
diff
changeset
|
1318 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1319 |
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
|
1320 |
Gear^.doStep := @doStepShotIdle |
4 | 1321 |
end; |
1322 |
||
1323 |
//////////////////////////////////////////////////////////////////////////////// |
|
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1324 |
procedure spawnBulletTrail(Bullet: PGear; bulletX, bulletY: hwFloat; fadeIn: Boolean); |
5841 | 1325 |
var oX, oY: hwFloat; |
13341
0c3f612edc19
Partial fix of Pas2C parsing problems (part 1: uGearsHandlersMess)
Wuzzy <Wuzzy2@mail.ru>
parents:
13323
diff
changeset
|
1326 |
fromX, fromY, toX, toY, dX, dY, bLength, stepLength: real; |
5841 | 1327 |
VGear: PVisualGear; |
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1328 |
i, steps: LongWord; |
5841 | 1329 |
begin |
15873
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
1330 |
if CurrentHedgehog^.Gear = nil then |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
1331 |
begin |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
1332 |
DeleteGear(Bullet); |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
1333 |
exit |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
1334 |
end; |
5841 | 1335 |
if Bullet^.PortalCounter = 0 then |
1336 |
begin |
|
1337 |
ox:= CurrentHedgehog^.Gear^.X + Int2hwFloat(GetLaunchX(CurrentHedgehog^.CurAmmoType, hwSign(CurrentHedgehog^.Gear^.dX), CurrentHedgehog^.Gear^.Angle)); |
|
1338 |
oy:= CurrentHedgehog^.Gear^.Y + Int2hwFloat(GetLaunchY(CurrentHedgehog^.CurAmmoType, CurrentHedgehog^.Gear^.Angle)); |
|
1339 |
end |
|
1340 |
else |
|
1341 |
begin |
|
1342 |
ox:= Bullet^.Elasticity; |
|
1343 |
oy:= Bullet^.Friction; |
|
1344 |
end; |
|
1345 |
||
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1346 |
fromX:= hwFloat2Float(ox); |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1347 |
fromY:= hwFloat2Float(oy); |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1348 |
toX:= hwFloat2Float(bulletX); |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1349 |
toY:= hwFloat2Float(bulletY); |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1350 |
|
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1351 |
dX:= toX - fromX; |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1352 |
dY:= toY - fromY; |
13341
0c3f612edc19
Partial fix of Pas2C parsing problems (part 1: uGearsHandlersMess)
Wuzzy <Wuzzy2@mail.ru>
parents:
13323
diff
changeset
|
1353 |
bLength:= sqrt(dX * dX + dY * dY); |
0c3f612edc19
Partial fix of Pas2C parsing problems (part 1: uGearsHandlersMess)
Wuzzy <Wuzzy2@mail.ru>
parents:
13323
diff
changeset
|
1354 |
dX:= dX / bLength; |
0c3f612edc19
Partial fix of Pas2C parsing problems (part 1: uGearsHandlersMess)
Wuzzy <Wuzzy2@mail.ru>
parents:
13323
diff
changeset
|
1355 |
dY:= dY / bLength; |
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1356 |
|
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1357 |
if fadeIn then |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1358 |
begin |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1359 |
steps:= 10; |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1360 |
stepLength:= 12; |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1361 |
fromX:= fromX + dX * 45; |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1362 |
fromY:= fromY + dY * 45; |
13341
0c3f612edc19
Partial fix of Pas2C parsing problems (part 1: uGearsHandlersMess)
Wuzzy <Wuzzy2@mail.ru>
parents:
13323
diff
changeset
|
1363 |
bLength:= bLength - 45; |
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1364 |
end |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1365 |
else steps:= 1; |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1366 |
|
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1367 |
for i:= 0 to steps - 1 do |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1368 |
begin |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1369 |
if i < steps - 1 then |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1370 |
begin |
13341
0c3f612edc19
Partial fix of Pas2C parsing problems (part 1: uGearsHandlersMess)
Wuzzy <Wuzzy2@mail.ru>
parents:
13323
diff
changeset
|
1371 |
toX:= fromX + dX * minD(stepLength, bLength); |
0c3f612edc19
Partial fix of Pas2C parsing problems (part 1: uGearsHandlersMess)
Wuzzy <Wuzzy2@mail.ru>
parents:
13323
diff
changeset
|
1372 |
toY:= fromY + dY * minD(stepLength, bLength); |
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1373 |
end |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1374 |
else if steps > 1 then |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1375 |
begin |
13341
0c3f612edc19
Partial fix of Pas2C parsing problems (part 1: uGearsHandlersMess)
Wuzzy <Wuzzy2@mail.ru>
parents:
13323
diff
changeset
|
1376 |
toX:= fromX + dX * bLength; |
0c3f612edc19
Partial fix of Pas2C parsing problems (part 1: uGearsHandlersMess)
Wuzzy <Wuzzy2@mail.ru>
parents:
13323
diff
changeset
|
1377 |
toY:= fromY + dY * bLength; |
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1378 |
end; |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1379 |
|
13341
0c3f612edc19
Partial fix of Pas2C parsing problems (part 1: uGearsHandlersMess)
Wuzzy <Wuzzy2@mail.ru>
parents:
13323
diff
changeset
|
1380 |
if bLength > 0 then |
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1381 |
begin |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1382 |
VGear := AddVisualGear(round(fromX), round(fromY), vgtLineTrail); |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1383 |
if VGear <> nil then |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1384 |
begin |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1385 |
VGear^.X:= fromX; |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1386 |
VGear^.Y:= fromY; |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1387 |
VGear^.dX:= toX; |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1388 |
VGear^.dY:= toY; |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1389 |
VGear^.Tint:= $FFFFFF00 or ($FF * (i + 1) div (steps)); |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1390 |
|
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1391 |
// reached edge of land. assume infinite beam. Extend it way out past camera |
13321
23ade5604f8d
Fix bullet trails overlapping when the pass through wrap or bounce world edge
alfadur
parents:
13318
diff
changeset
|
1392 |
if ((round(toX) and LAND_WIDTH_MASK <> 0) and (not (WorldEdge in [weBounce, weWrap]))) |
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1393 |
or (round(toY) and LAND_HEIGHT_MASK <> 0) then |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1394 |
// only extend if not under water |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1395 |
if not CheckCoordInWater(round(toX), round(toY)) then |
5841 | 1396 |
begin |
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1397 |
VGear^.dX := VGear^.dX + max(LAND_WIDTH,4096) * (VGear^.dX - VGear^.X); |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1398 |
VGear^.dY := VGear^.dY + max(LAND_WIDTH,4096) * (VGear^.dY - VGear^.Y); |
5841 | 1399 |
end; |
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1400 |
VGear^.Timer := 200; |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1401 |
end; |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1402 |
end; |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1403 |
|
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1404 |
if i < steps - 1 then |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1405 |
begin |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1406 |
fromX:= toX; |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1407 |
fromY:= toY; |
13341
0c3f612edc19
Partial fix of Pas2C parsing problems (part 1: uGearsHandlersMess)
Wuzzy <Wuzzy2@mail.ru>
parents:
13323
diff
changeset
|
1408 |
bLength:= bLength - stepLength; |
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1409 |
end |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1410 |
end; |
5841 | 1411 |
end; |
1412 |
||
12898 | 1413 |
procedure LineShoveHelp(Gear: PGear; oX, oY, tX, tY, dX, dY: hwFloat; count: LongWord); |
1414 |
var dmg,power: LongInt; |
|
1415 |
begin |
|
13403
9c9d29be9e00
make all bullets function similar to machinegun bullets (can hit/shove objects without checkin)
nemo
parents:
13402
diff
changeset
|
1416 |
if hwSqr(tX - oX) + hwSqr(tY - oY) > _0_25 then |
12898 | 1417 |
begin |
1418 |
if (Gear^.AmmoType = amDEagle) or (Gear^.AmmoType = amMinigun) then |
|
1419 |
dmg:= Gear^.Boom |
|
1420 |
else |
|
1421 |
dmg:= Gear^.Timer * Gear^.Boom div 100000; |
|
1422 |
if (Gear^.AmmoType = amMinigun) then |
|
1423 |
power:= 10 |
|
1424 |
else |
|
1425 |
power:= 20; |
|
1426 |
AmmoShoveLine(Gear, dmg, power, oX, oY, tX, tY); |
|
1427 |
end; |
|
1428 |
if Gear^.Damage > 0 then |
|
1429 |
begin |
|
1430 |
DrawTunnel(oX, oY, dX, dY, count, 1); |
|
1431 |
dec(Gear^.Health, Gear^.Damage); |
|
1432 |
Gear^.Damage := 0 |
|
1433 |
end; |
|
1434 |
end; |
|
1435 |
||
13381 | 1436 |
procedure CheckBulletDrowningHelp(Bullet: PGear); |
1437 |
var dX, dY: hwFloat; |
|
1438 |
begin |
|
1439 |
dX := Bullet^.dX; |
|
1440 |
dY := Bullet^.dY; |
|
1441 |
CheckGearDrowning(Bullet); |
|
1442 |
if (dX <> Bullet^.dX) or (dY <> Bullet^.dY) then |
|
1443 |
begin |
|
1444 |
SpawnBulletTrail(Bullet, Bullet^.X, Bullet^.Y, Bullet^.FlightTime = 0); |
|
1445 |
Bullet^.Elasticity := Bullet^.X; |
|
1446 |
Bullet^.Friction := Bullet^.Y; |
|
1447 |
Inc(Bullet^.PortalCounter); |
|
1448 |
Bullet^.FlightTime:= 1; |
|
1449 |
end; |
|
1450 |
end; |
|
1451 |
||
13408 | 1452 |
procedure CreateBubblesForBullet(Gear: PGear); |
1453 |
var i, iInit: LongWord; |
|
1454 |
begin |
|
14305 | 1455 |
iInit:= 0; |
13408 | 1456 |
if ((Gear^.State and gstDrowning) <> 0) and (Gear^.Health > 0) then |
1457 |
begin |
|
1458 |
// draw bubbles |
|
1459 |
if (not SuddenDeathDmg and (WaterOpacity < $FF)) or (SuddenDeathDmg and (SDWaterOpacity < $FF)) then |
|
1460 |
begin |
|
1461 |
case Gear^.Kind of |
|
1462 |
gtMinigunBullet: iInit:= Gear^.Health * 100; |
|
1463 |
gtDEagleShot, gtSniperRifleShot: iInit:= Gear^.Health * 4 |
|
1464 |
end; |
|
1465 |
for i:=iInit downto 0 do |
|
1466 |
begin |
|
1467 |
if Random(6) = 0 then |
|
1468 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtBubble); |
|
1469 |
Gear^.X := Gear^.X + Gear^.dX; |
|
1470 |
Gear^.Y := Gear^.Y + Gear^.dY; |
|
1471 |
end; |
|
1472 |
end; |
|
1473 |
// bullet dies underwater |
|
1474 |
Gear^.Health:= 0; |
|
1475 |
end; |
|
1476 |
end; |
|
1477 |
||
2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2017
diff
changeset
|
1478 |
procedure doStepBulletWork(Gear: PGear); |
8795 | 1479 |
var |
12377
efa13b925cd8
Fix bullets being reflected too early on bouncy world edge border while digging land
alfadur
parents:
12306
diff
changeset
|
1480 |
i, x, y, iInit: LongWord; |
efa13b925cd8
Fix bullets being reflected too early on bouncy world edge border while digging land
alfadur
parents:
12306
diff
changeset
|
1481 |
oX, oY, tX, tY, tDx, tDy: hwFloat; |
4327 | 1482 |
VGear: PVisualGear; |
12898 | 1483 |
LandFlags: Word; |
1484 |
isDigging: Boolean; |
|
1485 |
isDead: Boolean; |
|
38 | 1486 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1487 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1488 |
inc(Gear^.Timer); |
12898 | 1489 |
iInit := 100; |
12377
efa13b925cd8
Fix bullets being reflected too early on bouncy world edge border while digging land
alfadur
parents:
12306
diff
changeset
|
1490 |
i := iInit; |
12898 | 1491 |
isDigging := false; |
1492 |
isDead := false; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1493 |
oX := Gear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1494 |
oY := Gear^.Y; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1495 |
repeat |
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 + Gear^.dY; |
9485
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1498 |
tX:= Gear^.X; |
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1499 |
tY:= Gear^.Y; |
12377
efa13b925cd8
Fix bullets being reflected too early on bouncy world edge border while digging land
alfadur
parents:
12306
diff
changeset
|
1500 |
tDx:= Gear^.dX; |
efa13b925cd8
Fix bullets being reflected too early on bouncy world edge border while digging land
alfadur
parents:
12306
diff
changeset
|
1501 |
tDy:= Gear^.dY; |
9565 | 1502 |
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
|
1503 |
begin |
12898 | 1504 |
LineShoveHelp(Gear, oX, oY, tX, tY, tDx, tDy, iInit + 2 - i); |
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1505 |
SpawnBulletTrail(Gear, tX, tY, Gear^.FlightTime = 0); |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1506 |
Gear^.FlightTime:= 1; |
12377
efa13b925cd8
Fix bullets being reflected too early on bouncy world edge border while digging land
alfadur
parents:
12306
diff
changeset
|
1507 |
iInit:= i; |
efa13b925cd8
Fix bullets being reflected too early on bouncy world edge border while digging land
alfadur
parents:
12306
diff
changeset
|
1508 |
oX:= Gear^.X; |
efa13b925cd8
Fix bullets being reflected too early on bouncy world edge border while digging land
alfadur
parents:
12306
diff
changeset
|
1509 |
oY:= Gear^.Y; |
9485
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1510 |
inc(Gear^.PortalCounter); |
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1511 |
Gear^.Elasticity:= Gear^.X; |
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1512 |
Gear^.Friction:= Gear^.Y; |
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1513 |
SpawnBulletTrail(Gear, Gear^.X, Gear^.Y, false); |
13318
9071600f7b22
Fix minigun bullets hitting shooter when it hits hog on other side of world wrap
alfadur
parents:
13285
diff
changeset
|
1514 |
|
9071600f7b22
Fix minigun bullets hitting shooter when it hits hog on other side of world wrap
alfadur
parents:
13285
diff
changeset
|
1515 |
// bullets can now hurt the hog that fired them |
9071600f7b22
Fix minigun bullets hitting shooter when it hits hog on other side of world wrap
alfadur
parents:
13285
diff
changeset
|
1516 |
if WorldEdge <> weSea then Gear^.Data:= nil; |
9485
3dee8a3b0406
add shotgun wrap, revert 100px offset. Problematic w/ things that rely on Land.
nemo
parents:
9479
diff
changeset
|
1517 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1518 |
x := hwRound(Gear^.X); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1519 |
y := hwRound(Gear^.Y); |
8795 | 1520 |
|
12898 | 1521 |
if ((y and LAND_HEIGHT_MASK) = 0) and ((x and LAND_WIDTH_MASK) = 0) then |
1522 |
begin |
|
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
1523 |
LandFlags:= LandGet(y, x); |
12898 | 1524 |
if LandFlags <> 0 then inc(Gear^.Damage); |
1525 |
isDigging:= (LandFlags and lfLandMask) <> 0; |
|
1526 |
end; |
|
1527 |
// let's interrupt before a collision with land to give portals a chance to catch the bullet |
|
1528 |
if isDigging and (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
|
1529 |
begin |
5841 | 1530 |
Gear^.Tag := 1; |
12898 | 1531 |
dec(Gear^.Damage); |
5841 | 1532 |
Gear^.X := Gear^.X - Gear^.dX; |
1533 |
Gear^.Y := Gear^.Y - Gear^.dY; |
|
13381 | 1534 |
CheckBulletDrowningHelp(Gear); |
5841 | 1535 |
break; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1536 |
end |
12898 | 1537 |
else if (not isDigging) then |
5841 | 1538 |
Gear^.Tag := 0; |
1539 |
||
12898 | 1540 |
//Shove static gears to remove the mask and stop damaging the bullet |
1541 |
if (not isDigging) and (Gear^.Damage > 5) and (Gear^.Kind <> gtMinigunBullet) then |
|
1542 |
begin |
|
1543 |
LineShoveHelp(Gear, oX, oY, tX, tY, tDx, tDy, iInit + 2 - i); |
|
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1544 |
SpawnBulletTrail(Gear, tX, tY, Gear^.FlightTime = 0); |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1545 |
Gear^.FlightTime:= 1; |
12898 | 1546 |
iInit:= i; |
1547 |
oX:= Gear^.X; |
|
1548 |
oY:= Gear^.Y; |
|
10125 | 1549 |
end; |
12898 | 1550 |
|
13381 | 1551 |
CheckBulletDrowningHelp(Gear); |
12898 | 1552 |
case Gear^.Kind of |
13357
030b085b182f
real droplet fix - default density is fine - also add back in the underwater bullet trails
nemo
parents:
13341
diff
changeset
|
1553 |
gtMinigunBullet: isDead:= isDigging or ((Gear^.State and gstDrowning) <> 0); |
030b085b182f
real droplet fix - default density is fine - also add back in the underwater bullet trails
nemo
parents:
13341
diff
changeset
|
1554 |
gtDEagleShot, gtSniperRifleShot: isDead:= (Gear^.Damage >= Gear^.Health) or ((Gear^.State and gstDrowning) <> 0) |
12898 | 1555 |
end; |
8795 | 1556 |
dec(i) |
13357
030b085b182f
real droplet fix - default density is fine - also add back in the underwater bullet trails
nemo
parents:
13341
diff
changeset
|
1557 |
until (i = 0) or (isDead); |
12898 | 1558 |
|
1559 |
LineShoveHelp(Gear, oX, oY, Gear^.X, Gear^.Y, |
|
1560 |
Gear^.dX, Gear^.dY, iInit + 2 - i); |
|
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
|
1561 |
|
13408 | 1562 |
CreateBubblesForBullet(Gear); |
1563 |
||
1564 |
x := hwRound(Gear^.X); |
|
1565 |
y := hwRound(Gear^.Y); |
|
1566 |
if (isDead) or (x and LAND_WIDTH_MASK <> 0) or (y and LAND_HEIGHT_MASK <> 0) then |
|
1567 |
begin |
|
1568 |
if (Gear^.Kind = gtSniperRifleShot) then |
|
1569 |
cLaserSightingSniper := false; |
|
1570 |
if (Ammoz[Gear^.AmmoType].Ammo.NumPerTurn <= CurrentHedgehog^.MultiShootAttacks) and (CurrentHedgehog^.Effects[heArtillery] = 2) then |
|
1571 |
CurrentHedgehog^.Effects[heArtillery]:= 0; |
|
1572 |
||
1573 |
// Bullet Hit |
|
1574 |
if ((Gear^.State and gstDrowning) = 0) and (x and LAND_WIDTH_MASK = 0) and (y and LAND_HEIGHT_MASK = 0) then |
|
1575 |
begin |
|
1576 |
if Gear^.Kind = gtMinigunBullet then |
|
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
|
1577 |
begin |
15678 | 1578 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Karma, |
14076
82956b3ba2ab
prevent minigun bullet land impacts from pushing hedgehogs
alfadur
parents:
14061
diff
changeset
|
1579 |
Gear^.Hedgehog, (EXPLNoDamage or EXPLDoNotTouchHH){ or EXPLDontDraw or EXPLNoGfx}); |
13408 | 1580 |
VGear := AddVisualGear(hwRound(Gear^.X + Gear^.dX * 5), hwRound(Gear^.Y + Gear^.dY * 5), vgtBulletHit); |
1581 |
end |
|
1582 |
else |
|
1583 |
VGear := AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtBulletHit); |
|
1584 |
||
1585 |
if VGear <> nil then |
|
1586 |
begin |
|
1587 |
VGear^.Angle := DxDy2Angle(-Gear^.dX, Gear^.dY); |
|
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
|
1588 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1589 |
end; |
13408 | 1590 |
|
1591 |
spawnBulletTrail(Gear, Gear^.X, Gear^.Y, Gear^.FlightTime = 0); |
|
1592 |
Gear^.FlightTime:= 1; |
|
1593 |
if Gear^.Kind = gtMinigunBullet then |
|
1594 |
ClearHitOrderLeq(Gear^.Tag); |
|
1595 |
||
1596 |
if (worldEdge = weSea) and (Gear^.Kind = gtMinigunBullet) |
|
1597 |
and Gear^.Y.isNegative and Gear^.dY.isNegative |
|
1598 |
and (Gear^.Health > 0) and (not isZero(Gear^.dX)) then |
|
1599 |
begin |
|
1600 |
if Gear^.dX.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
|
1601 |
begin |
13408 | 1602 |
|
1603 |
Gear^.X:= int2hwFloat(-1); |
|
1604 |
iInit:= x - leftX; |
|
1605 |
end |
|
1606 |
else |
|
1607 |
begin |
|
1608 |
Gear^.X:= int2hwFloat(LAND_WIDTH); |
|
1609 |
iInit:= rightX - x - 1; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1610 |
end; |
13408 | 1611 |
Gear^.Y:= Gear^.Y + Gear^.dY * hwAbs(int2hwFloat(iInit) / Gear^.dX); |
1612 |
CheckGearDrowning(Gear); |
|
1613 |
CreateBubblesForBullet(Gear); |
|
1614 |
end; |
|
1615 |
Gear^.doStep := @doStepShotIdle |
|
1616 |
end; |
|
37 | 1617 |
end; |
1618 |
||
559 | 1619 |
procedure doStepDEagleShot(Gear: PGear); |
1620 |
begin |
|
15663 | 1621 |
if Gear^.Data = nil then |
1622 |
// remember who fired this |
|
1623 |
if (Gear^.Hedgehog <> nil) and (Gear^.Hedgehog^.Gear <> nil) then |
|
1624 |
Gear^.Data:= Pointer(Gear^.Hedgehog^.Gear); |
|
11550
881231c1ba46
disallow bullets to hit the hedgehog that fired them (unless bounced/wrapped/portal'd)
sheepluva
parents:
11540
diff
changeset
|
1625 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1626 |
PlaySound(sndGun); |
13403
9c9d29be9e00
make all bullets function similar to machinegun bullets (can hit/shove objects without checkin)
nemo
parents:
13402
diff
changeset
|
1627 |
ClearHitOrder(); |
11553 | 1628 |
// add 2 initial steps to avoid problem with ammoshove related to calculation of radius + 1 radius as gear widths, and also just plain old weird angles |
11552 | 1629 |
Gear^.X := Gear^.X + Gear^.dX * 2; |
1630 |
Gear^.Y := Gear^.Y + Gear^.dY * 2; |
|
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1631 |
Gear^.FlightTime := 0; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1632 |
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
|
1633 |
end; |
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2017
diff
changeset
|
1634 |
|
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2017
diff
changeset
|
1635 |
procedure doStepSniperRifleShot(Gear: PGear); |
12898 | 1636 |
var HHGear: PGear; |
2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2017
diff
changeset
|
1637 |
begin |
11550
881231c1ba46
disallow bullets to hit the hedgehog that fired them (unless bounced/wrapped/portal'd)
sheepluva
parents:
11540
diff
changeset
|
1638 |
|
4365 | 1639 |
HHGear := Gear^.Hedgehog^.Gear; |
13096
d78e65c66573
Add hedgehog effect heArtillery, allows to set per-hedgehog artillery mode
Wuzzy <Wuzzy2@mail.ru>
parents:
13058
diff
changeset
|
1640 |
if (Gear^.Hedgehog^.Effects[heArtillery] <> 1) then |
d78e65c66573
Add hedgehog effect heArtillery, allows to set per-hedgehog artillery mode
Wuzzy <Wuzzy2@mail.ru>
parents:
13058
diff
changeset
|
1641 |
Gear^.Hedgehog^.Effects[heArtillery]:= 2; |
10174 | 1642 |
|
1643 |
if HHGear = nil then |
|
1644 |
begin |
|
1645 |
DeleteGear(gear); |
|
1646 |
exit |
|
1647 |
end; |
|
1648 |
||
11550
881231c1ba46
disallow bullets to hit the hedgehog that fired them (unless bounced/wrapped/portal'd)
sheepluva
parents:
11540
diff
changeset
|
1649 |
// remember who fired this |
881231c1ba46
disallow bullets to hit the hedgehog that fired them (unless bounced/wrapped/portal'd)
sheepluva
parents:
11540
diff
changeset
|
1650 |
Gear^.Data:= Pointer(Gear^.Hedgehog^.Gear); |
881231c1ba46
disallow bullets to hit the hedgehog that fired them (unless bounced/wrapped/portal'd)
sheepluva
parents:
11540
diff
changeset
|
1651 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1652 |
HHGear^.State := HHGear^.State or gstNotKickable; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1653 |
HedgehogChAngle(HHGear); |
12306
cdd884397760
Fix sniper rifle disabling laser sight utility after shooting
Wuzzy <almikes@aol.com>
parents:
12300
diff
changeset
|
1654 |
if cLaserSightingSniper = false then |
cdd884397760
Fix sniper rifle disabling laser sight utility after shooting
Wuzzy <almikes@aol.com>
parents:
12300
diff
changeset
|
1655 |
// Turn sniper's laser sight on and give it a chance to aim |
cdd884397760
Fix sniper rifle disabling laser sight utility after shooting
Wuzzy <almikes@aol.com>
parents:
12300
diff
changeset
|
1656 |
begin |
cdd884397760
Fix sniper rifle disabling laser sight utility after shooting
Wuzzy <almikes@aol.com>
parents:
12300
diff
changeset
|
1657 |
cLaserSightingSniper := true; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1658 |
HHGear^.Message := 0; |
7066
12cc2bd84b0b
Make pas2c even more happier with uGears.c, allow assigning arrays in some cases
unc0rr
parents:
7062
diff
changeset
|
1659 |
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
|
1660 |
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
|
1661 |
end; |
2031
b6f3e56fb100
david_ac's game scheme options for mine delay/quantity, tweaks to sniper rifle
nemo
parents:
2029
diff
changeset
|
1662 |
|
3894 | 1663 |
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
|
1664 |
begin |
13147
7040506c831f
Fix direction of dispensed bullet shells from shotgun/sniper/minigun
alfadur
parents:
13140
diff
changeset
|
1665 |
CreateShellForGear(Gear, 1); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1666 |
Gear^.State := Gear^.State or gstAnimation; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1667 |
Gear^.dX := SignAs(AngleSin(HHGear^.Angle), HHGear^.dX) * _0_5; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1668 |
Gear^.dY := -AngleCos(HHGear^.Angle) * _0_5; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1669 |
PlaySound(sndGun); |
13403
9c9d29be9e00
make all bullets function similar to machinegun bullets (can hit/shove objects without checkin)
nemo
parents:
13402
diff
changeset
|
1670 |
ClearHitOrder(); |
11553 | 1671 |
// add 2 initial steps to avoid problem with ammoshove related to calculation of radius + 1 radius as gear widths, and also just weird angles |
1672 |
Gear^.X := Gear^.X + Gear^.dX * 2; |
|
1673 |
Gear^.Y := Gear^.Y + Gear^.dY * 2; |
|
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
1674 |
Gear^.FlightTime := 0; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1675 |
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
|
1676 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1677 |
else |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1678 |
if (GameTicks mod 32) = 0 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1679 |
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
|
1680 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1681 |
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
|
1682 |
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
|
1683 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1684 |
else |
7066
12cc2bd84b0b
Make pas2c even more happier with uGears.c, allow assigning arrays in some cases
unc0rr
parents:
7062
diff
changeset
|
1685 |
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
|
1686 |
dec(HHGear^.Angle); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1687 |
|
11918
9da78300c5d0
Fix sniper rifle making timer gray all the time
Wuzzy <almikes@aol.com>
parents:
11915
diff
changeset
|
1688 |
if (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
|
1689 |
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
|
1690 |
HHGear^.State := HHGear^.State and (not gstNotKickable); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1691 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1692 |
AfterAttack |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1693 |
end; |
559 | 1694 |
end; |
1695 |
||
37 | 1696 |
//////////////////////////////////////////////////////////////////////////////// |
4 | 1697 |
procedure doStepActionTimer(Gear: PGear); |
1698 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1699 |
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
|
1700 |
case Gear^.Kind of |
8795 | 1701 |
gtATStartGame: |
8679 | 1702 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1703 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1704 |
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
|
1705 |
begin |
13642
3d14950641a4
Refactor text color variable names, export 2 color values to Lua
Wuzzy <Wuzzy2@mail.ru>
parents:
13640
diff
changeset
|
1706 |
AddCaption(GetEventString(eidRoundStart), capcolDefault, capgrpGameState); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1707 |
end |
8679 | 1708 |
end; |
8795 | 1709 |
gtATFinishGame: |
8679 | 1710 |
begin |
5368
a66d5141a3ba
fix build. seems like a indentation-related merge-oopsy dragged deleted code back in.
sheepluva
parents:
5366
diff
changeset
|
1711 |
AllInactive := false; |
a66d5141a3ba
fix build. seems like a indentation-related merge-oopsy dragged deleted code back in.
sheepluva
parents:
5366
diff
changeset
|
1712 |
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
|
1713 |
begin |
5368
a66d5141a3ba
fix build. seems like a indentation-related merge-oopsy dragged deleted code back in.
sheepluva
parents:
5366
diff
changeset
|
1714 |
ScreenFade := sfToBlack; |
a66d5141a3ba
fix build. seems like a indentation-related merge-oopsy dragged deleted code back in.
sheepluva
parents:
5366
diff
changeset
|
1715 |
ScreenFadeValue := 0; |
a66d5141a3ba
fix build. seems like a indentation-related merge-oopsy dragged deleted code back in.
sheepluva
parents:
5366
diff
changeset
|
1716 |
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
|
1717 |
end; |
5368
a66d5141a3ba
fix build. seems like a indentation-related merge-oopsy dragged deleted code back in.
sheepluva
parents:
5366
diff
changeset
|
1718 |
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
|
1719 |
begin |
7068 | 1720 |
SendIPC(_S'N'); |
15299
16f389fcd462
Prevent saving of demo after /lua command was used
Wuzzy <Wuzzy2@mail.ru>
parents:
15274
diff
changeset
|
1721 |
if (luaCmdUsed) then |
16f389fcd462
Prevent saving of demo after /lua command was used
Wuzzy <Wuzzy2@mail.ru>
parents:
15274
diff
changeset
|
1722 |
SendIPC(_S'm'); |
7068 | 1723 |
SendIPC(_S'q'); |
5368
a66d5141a3ba
fix build. seems like a indentation-related merge-oopsy dragged deleted code back in.
sheepluva
parents:
5366
diff
changeset
|
1724 |
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
|
1725 |
end |
8679 | 1726 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1727 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1728 |
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
|
1729 |
DeleteGear(Gear) |
4 | 1730 |
end; |
1731 |
||
1732 |
//////////////////////////////////////////////////////////////////////////////// |
|
1733 |
procedure doStepPickHammerWork(Gear: PGear); |
|
8795 | 1734 |
var |
4578 | 1735 |
i, ei, x, y: LongInt; |
4 | 1736 |
HHGear: PGear; |
1737 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1738 |
AllInactive := false; |
9487
fbe203c1d11e
couple more wrap calls. freezer still doesn't propagate properly. mostly due to
nemo
parents:
9485
diff
changeset
|
1739 |
WorldWrap(Gear); |
4365 | 1740 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1741 |
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
|
1742 |
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
|
1743 |
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
|
1744 |
or((HHGear^.State and gstHHDriven) =0) then |
4578 | 1745 |
begin |
7053 | 1746 |
StopSoundChan(Gear^.SoundChannel); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1747 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1748 |
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
|
1749 |
doStepHedgehogMoving(HHGear); // for gfInfAttack |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1750 |
exit |
4578 | 1751 |
end; |
1752 |
||
1753 |
x:= hwRound(Gear^.X); |
|
1754 |
y:= hwRound(Gear^.Y); |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1755 |
if (Gear^.Timer mod 33) = 0 then |
4578 | 1756 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1757 |
HHGear^.State := HHGear^.State or gstNoDamage; |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
1758 |
doMakeExplosion(x, y + 7, Gear^.Boom, Gear^.Hedgehog, EXPLDontDraw); |
6450 | 1759 |
HHGear^.State := HHGear^.State and (not gstNoDamage) |
4578 | 1760 |
end; |
422 | 1761 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1762 |
if (Gear^.Timer mod 47) = 0 then |
4578 | 1763 |
begin |
1764 |
// 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 |
|
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
1765 |
if (( (y + 12) and LAND_HEIGHT_MASK) = 0) and ((x and LAND_WIDTH_MASK) = 0) and (LandGet(y + 12, x) > 255) then |
4578 | 1766 |
for i:= 0 to 1 do |
1767 |
AddVisualGear(x - 5 + Random(10), y + 12, vgtDust); |
|
1768 |
||
1769 |
i := x - Gear^.Radius - LongInt(GetRandom(2)); |
|
1770 |
ei := x + Gear^.Radius + LongInt(GetRandom(2)); |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1771 |
while i <= ei do |
4578 | 1772 |
begin |
13604
73b096e1d895
Fix hammer/pickhammer not digging land with gfSolidLand on
Wuzzy <Wuzzy2@mail.ru>
parents:
13603
diff
changeset
|
1773 |
doMakeExplosion(i, y + 3, 3, Gear^.Hedgehog, EXPLNoDamage or EXPLDoNotTouchAny or EXPLNoGfx or EXPLForceDraw); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1774 |
inc(i, 1) |
4578 | 1775 |
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
|
1776 |
|
6314 | 1777 |
if CheckLandValue(hwRound(Gear^.X + Gear^.dX + SignAs(_6,Gear^.dX)), hwRound(Gear^.Y + _1_9), lfIndestructible) then |
4578 | 1778 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1779 |
Gear^.X := Gear^.X + Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1780 |
Gear^.Y := Gear^.Y + _1_9; |
4578 | 1781 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1782 |
SetAllHHToActive; |
4578 | 1783 |
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
|
1784 |
if TestCollisionYwithGear(Gear, 1) <> 0 then |
4578 | 1785 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1786 |
Gear^.dY := _0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1787 |
SetLittle(HHGear^.dX); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1788 |
HHGear^.dY := _0; |
4578 | 1789 |
end |
11020
2aa09da8f3ef
fix pickhammer collision when moving upwards, thanks to MK for reporting
sheepluva
parents:
10993
diff
changeset
|
1790 |
else if Gear^.dY.isNegative and (TestCollisionYwithGear(HHGear, -1) <> 0) then |
2aa09da8f3ef
fix pickhammer collision when moving upwards, thanks to MK for reporting
sheepluva
parents:
10993
diff
changeset
|
1791 |
begin |
2aa09da8f3ef
fix pickhammer collision when moving upwards, thanks to MK for reporting
sheepluva
parents:
10993
diff
changeset
|
1792 |
Gear^.dY := cGravity; |
2aa09da8f3ef
fix pickhammer collision when moving upwards, thanks to MK for reporting
sheepluva
parents:
10993
diff
changeset
|
1793 |
HHGear^.dY := cGravity; |
2aa09da8f3ef
fix pickhammer collision when moving upwards, thanks to MK for reporting
sheepluva
parents:
10993
diff
changeset
|
1794 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1795 |
else |
4578 | 1796 |
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
|
1797 |
if CheckLandValue(hwRound(Gear^.X), hwRound(Gear^.Y + Gear^.dY + cGravity), lfLandMask) then |
6314 | 1798 |
begin |
1799 |
Gear^.dY := Gear^.dY + cGravity; |
|
1800 |
Gear^.Y := Gear^.Y + Gear^.dY |
|
1801 |
end; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1802 |
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
|
1803 |
Gear^.Timer := 1 |
4578 | 1804 |
end; |
4 | 1805 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1806 |
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
|
1807 |
if CheckLandValue(hwRound(Gear^.X), hwRound(Gear^.Y)-cHHRadius, lfLandMask) then |
6314 | 1808 |
begin |
1809 |
HHGear^.X := Gear^.X; |
|
1810 |
HHGear^.Y := Gear^.Y - int2hwFloat(cHHRadius) |
|
1811 |
end; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1812 |
|
3894 | 1813 |
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
|
1814 |
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
|
1815 |
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
|
1816 |
else //there would be a mistake. |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1817 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1818 |
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
|
1819 |
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
|
1820 |
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
|
1821 |
Gear^.dX := - _0_3 |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1822 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1823 |
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
|
1824 |
Gear^.dX := _0_3 |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1825 |
else Gear^.dX := _0; |
4 | 1826 |
end; |
1827 |
||
1828 |
procedure doStepPickHammer(Gear: PGear); |
|
8795 | 1829 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1830 |
i, y: LongInt; |
4 | 1831 |
ar: TRangeArray; |
911
b709fe13ed69
Fix issue with hedgehog on top of the hedgehog with pickhammer
unc0rr
parents:
883
diff
changeset
|
1832 |
HHGear: PGear; |
4 | 1833 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1834 |
i := 0; |
4365 | 1835 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1836 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1837 |
y := hwRound(Gear^.Y) - cHHRadius * 2; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1838 |
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
|
1839 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1840 |
ar[i].Left := hwRound(Gear^.X) - Gear^.Radius - LongInt(GetRandom(2)); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1841 |
ar[i].Right := hwRound(Gear^.X) + Gear^.Radius + LongInt(GetRandom(2)); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1842 |
inc(y, 2); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1843 |
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
|
1844 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1845 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1846 |
DrawHLinesExplosions(@ar, 3, hwRound(Gear^.Y) - cHHRadius * 2, 2, Pred(i)); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1847 |
Gear^.dY := HHGear^.dY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1848 |
DeleteCI(HHGear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1849 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1850 |
Gear^.SoundChannel := LoopSound(sndPickhammer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1851 |
doStepPickHammerWork(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1852 |
Gear^.doStep := @doStepPickHammerWork |
4 | 1853 |
end; |
1854 |
||
1855 |
//////////////////////////////////////////////////////////////////////////////// |
|
8795 | 1856 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1857 |
BTPrevAngle, BTSteps: LongInt; |
302 | 1858 |
|
303
1659c4aad5ab
Now blow torch angle can be changed during blowing :)
unc0rr
parents:
302
diff
changeset
|
1859 |
procedure doStepBlowTorchWork(Gear: PGear); |
8795 | 1860 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1861 |
HHGear: PGear; |
15618 | 1862 |
dig, hit: boolean; |
15841 | 1863 |
newX, newY: hwFloat; |
302 | 1864 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1865 |
AllInactive := false; |
14358 | 1866 |
WorldWrap(Gear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1867 |
dec(Gear^.Timer); |
8795 | 1868 |
|
9385 | 1869 |
if Gear^.Hedgehog^.Gear = nil then |
1870 |
begin |
|
15618 | 1871 |
ClearProximityCache(); |
11911
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11860
diff
changeset
|
1872 |
StopSoundChan(Gear^.SoundChannel); |
9385 | 1873 |
DeleteGear(Gear); |
1874 |
AfterAttack; |
|
1875 |
exit |
|
1876 |
end; |
|
1877 |
||
4365 | 1878 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1879 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1880 |
HedgehogChAngle(HHGear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1881 |
|
15617 | 1882 |
dig := false; |
15618 | 1883 |
hit := false; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1884 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1885 |
if abs(LongInt(HHGear^.Angle) - BTPrevAngle) > 7 then |
5706 | 1886 |
begin |
5722
3b7f2bfc8632
Keep blowtorch direction (doesn't actually fix the bug with hedgehog turning opposite direction)
unc0rr
parents:
5716
diff
changeset
|
1887 |
Gear^.dX := SignAs(AngleSin(HHGear^.Angle) * _0_5, Gear^.dX); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1888 |
Gear^.dY := AngleCos(HHGear^.Angle) * ( - _0_5); |
15643 | 1889 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1890 |
BTPrevAngle := HHGear^.Angle; |
15617 | 1891 |
dig := true |
5706 | 1892 |
end; |
1528 | 1893 |
|
15841 | 1894 |
if (HHGear^.State and gstMoving) <> 0 then |
5706 | 1895 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1896 |
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
|
1897 |
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
|
1898 |
Gear^.Timer := 0 |
5706 | 1899 |
end; |
305 | 1900 |
|
15618 | 1901 |
if Gear^.Timer mod 1500 = 0 then |
1902 |
RefillProximityCache(Gear, 200); |
|
1903 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1904 |
if Gear^.Timer mod cHHStepTicks = 0 then |
5706 | 1905 |
begin |
15617 | 1906 |
dig := true; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1907 |
if Gear^.dX.isNegative then |
3894 | 1908 |
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
|
1909 |
else |
3894 | 1910 |
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
|
1911 |
|
15841 | 1912 |
if (HHGear^.State and gstMoving) = 0 then |
5706 | 1913 |
begin |
6450 | 1914 |
HHGear^.State := HHGear^.State and (not gstAttacking); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1915 |
|
15841 | 1916 |
if CheckLandValue(hwRound(HHGear^.X + SignAs(_6, HHGear^.dX)), hwRound(HHGear^.Y), lfIndestructible) then |
15617 | 1917 |
HedgehogStep(HHGear); |
1918 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1919 |
HHGear^.State := HHGear^.State or gstAttacking |
5706 | 1920 |
end; |
305 | 1921 |
|
15841 | 1922 |
newX := HHGear^.X + Gear^.dX * (cHHRadius + cBlowTorchC); |
1923 |
newY := HHGear^.Y + Gear^.dY * (cHHRadius + cBlowTorchC); |
|
1924 |
if CheckLandValue(hwRound(newX + SignAs(_6, Gear^.dX)), hwRound(newY), lfIndestructible) then |
|
1925 |
begin |
|
1926 |
Gear^.X := newX; |
|
1927 |
Gear^.Y := newY; |
|
1928 |
end; |
|
1929 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1930 |
inc(BTSteps); |
15866 | 1931 |
if BTSteps = 11 then |
5706 | 1932 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1933 |
BTSteps := 0; |
15618 | 1934 |
hit := true |
5706 | 1935 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
1936 |
end; |
305 | 1937 |
|
15617 | 1938 |
if dig then |
9385 | 1939 |
begin |
6278
654eed7c6b97
tweak DrawTunnel call of blowtorch. should fix issues with blowtorch going horizontal when it shouldn't
sheepluva
parents:
6251
diff
changeset
|
1940 |
DrawTunnel(HHGear^.X + Gear^.dX * cHHRadius, |
15618 | 1941 |
HHGear^.Y + Gear^.dY * cHHRadius - _1 - |
1942 |
((hwAbs(Gear^.dX) / (hwAbs(Gear^.dX) + hwAbs(Gear^.dY))) * _0_5 * 7), |
|
1943 |
Gear^.dX, Gear^.dY, |
|
1944 |
cHHStepTicks, cHHRadius * 2 + 7); |
|
1945 |
||
1946 |
HHGear^.State := HHGear^.State or gstNoDamage; |
|
1947 |
if hit then |
|
1948 |
AmmoShoveCache(Gear, Gear^.Boom, 15) |
|
1949 |
else |
|
1950 |
AmmoShoveCache(Gear, 0, 15); |
|
1951 |
HHGear^.State := HHGear^.State and (not gstNoDamage); |
|
9385 | 1952 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1953 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
1954 |
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
|
1955 |
or ((HHGear^.Message and gmAttack) <> 0) then |
5706 | 1956 |
begin |
15618 | 1957 |
ClearProximityCache(); |
11911
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11860
diff
changeset
|
1958 |
StopSoundChan(Gear^.SoundChannel); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1959 |
HHGear^.Message := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1960 |
HHGear^.State := HHGear^.State and (not gstNotKickable); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1961 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1962 |
AfterAttack |
5706 | 1963 |
end |
302 | 1964 |
end; |
1965 |
||
303
1659c4aad5ab
Now blow torch angle can be changed during blowing :)
unc0rr
parents:
302
diff
changeset
|
1966 |
procedure doStepBlowTorch(Gear: PGear); |
8795 | 1967 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1968 |
HHGear: PGear; |
303
1659c4aad5ab
Now blow torch angle can be changed during blowing :)
unc0rr
parents:
302
diff
changeset
|
1969 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1970 |
BTPrevAngle := High(LongInt); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1971 |
BTSteps := 0; |
4365 | 1972 |
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
|
1973 |
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
|
1974 |
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
|
1975 |
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
|
1976 |
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
|
1977 |
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
|
1978 |
((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
|
1979 |
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
|
1980 |
cHHStepTicks, cHHRadius * 2 + 7); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1981 |
HHGear^.Message := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1982 |
HHGear^.State := HHGear^.State or gstNotKickable; |
15618 | 1983 |
RefillProximityCache(Gear, 200); |
15643 | 1984 |
|
11911
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11860
diff
changeset
|
1985 |
Gear^.SoundChannel := LoopSound(sndBlowTorch); |
14358 | 1986 |
Gear^.doStep := @doStepBlowTorchWork |
303
1659c4aad5ab
Now blow torch angle can be changed during blowing :)
unc0rr
parents:
302
diff
changeset
|
1987 |
end; |
1659c4aad5ab
Now blow torch angle can be changed during blowing :)
unc0rr
parents:
302
diff
changeset
|
1988 |
|
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
|
1989 |
|
302 | 1990 |
//////////////////////////////////////////////////////////////////////////////// |
10 | 1991 |
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
|
1992 |
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
|
1993 |
dxdy: hwFloat; |
10679
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
1994 |
dmg: LongWord; |
10 | 1995 |
begin |
9043 | 1996 |
if Gear^.Health = 0 then dxdy:= hwAbs(Gear^.dX)+hwAbs(Gear^.dY); |
14771
ab7bf5036314
Render mine timer if gear info is active
Wuzzy <Wuzzy2@mail.ru>
parents:
14770
diff
changeset
|
1997 |
Gear^.RenderTimer:= ((Gear^.State and gstFrozen) = 0) and ((Gear^.State and gstAttacking) = 0) and (Gear^.Health <> 0); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
1998 |
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
|
1999 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2000 |
DeleteCI(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2001 |
doStepFallingGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2002 |
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
|
2003 |
begin |
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9289
diff
changeset
|
2004 |
AddCI(Gear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2005 |
Gear^.dX := _0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2006 |
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
|
2007 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2008 |
CalcRotationDirAngle(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2009 |
AllInactive := false |
7754 | 2010 |
end |
2011 |
else if (GameTicks and $3F) = 25 then |
|
2012 |
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
|
2013 |
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
|
2014 |
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
|
2015 |
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
|
2016 |
begin |
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
2017 |
dmg:= hwRound(dxdy * _50); |
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
2018 |
inc(Gear^.Damage, dmg); |
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
2019 |
ScriptCall('onGearDamage', Gear^.UID, dmg) |
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
2020 |
end; |
8795 | 2021 |
|
6498 | 2022 |
if ((GameTicks and $FF) = 0) and (Gear^.Damage > random(30)) then |
7754 | 2023 |
begin |
2024 |
vg:= AddVisualGear(hwRound(Gear^.X) - 4 + Random(8), hwRound(Gear^.Y) - 4 - Random(4), vgtSmoke); |
|
2025 |
if vg <> nil then |
|
2026 |
vg^.Scale:= 0.5 |
|
2027 |
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
|
2028 |
|
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
|
2029 |
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
|
2030 |
begin |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
2031 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
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
|
2032 |
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
|
2033 |
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
|
2034 |
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
|
2035 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2036 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2037 |
if ((Gear^.State and gsttmpFlag) <> 0) and (Gear^.Health <> 0) then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2038 |
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
|
2039 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2040 |
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
|
2041 |
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
|
2042 |
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
|
2043 |
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
|
2044 |
else // gstAttacking <> 0 |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2045 |
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
|
2046 |
AllInactive := false; |
12171
115867d77982
Add back accidental removal of random mines
Wuzzy <almikes@aol.com>
parents:
12169
diff
changeset
|
2047 |
// tag of 1 means this mine has a random timer |
115867d77982
Add back accidental removal of random mines
Wuzzy <almikes@aol.com>
parents:
12169
diff
changeset
|
2048 |
if (Gear^.Tag = 1) and (Gear^.Timer = 0) then |
115867d77982
Add back accidental removal of random mines
Wuzzy <almikes@aol.com>
parents:
12169
diff
changeset
|
2049 |
begin |
115867d77982
Add back accidental removal of random mines
Wuzzy <almikes@aol.com>
parents:
12169
diff
changeset
|
2050 |
if (GameTicks mod 2 = 0) then GetRandom(2); |
115867d77982
Add back accidental removal of random mines
Wuzzy <almikes@aol.com>
parents:
12169
diff
changeset
|
2051 |
if (GameTicks mod 3 = 0) then GetRandom(2); |
115867d77982
Add back accidental removal of random mines
Wuzzy <almikes@aol.com>
parents:
12169
diff
changeset
|
2052 |
Gear^.Timer:= GetRandom(51) * 100; |
115867d77982
Add back accidental removal of random mines
Wuzzy <almikes@aol.com>
parents:
12169
diff
changeset
|
2053 |
Gear^.Tag:= 0; |
115867d77982
Add back accidental removal of random mines
Wuzzy <almikes@aol.com>
parents:
12169
diff
changeset
|
2054 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2055 |
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
|
2056 |
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
|
2057 |
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
|
2058 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2059 |
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
|
2060 |
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
|
2061 |
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
|
2062 |
begin |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
2063 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
14575 | 2064 |
DeleteGear(Gear); |
14577 | 2065 |
exit // redundant but we've had too many delete gear bugs |
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
|
2066 |
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
|
2067 |
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
|
2068 |
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
|
2069 |
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
|
2070 |
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
|
2071 |
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
|
2072 |
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
|
2073 |
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
|
2074 |
Gear^.Damage := 0; |
6450 | 2075 |
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
|
2076 |
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
|
2077 |
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
|
2078 |
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
|
2079 |
dec(Gear^.Timer); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2080 |
end |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2081 |
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
|
2082 |
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
|
2083 |
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
|
2084 |
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
|
2085 |
Gear^.State := Gear^.State or gsttmpFlag; |
10 | 2086 |
end; |
57 | 2087 |
|
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
|
2088 |
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
|
2089 |
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
|
2090 |
targ, tmpG: PGear; |
12805 | 2091 |
trackSpeed, airFriction, tX, tY: hwFloat; |
10827 | 2092 |
isUnderwater: Boolean; |
14223 | 2093 |
sparkle: PVisualGear; |
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
|
2094 |
begin |
14362
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
2095 |
targ:= nil; |
14771
ab7bf5036314
Render mine timer if gear info is active
Wuzzy <Wuzzy2@mail.ru>
parents:
14770
diff
changeset
|
2096 |
Gear^.RenderTimer:= ((Gear^.State and gstFrozen) = 0) and ((Gear^.State and gstAttacking) = 0); |
14362
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
2097 |
if (Gear^.State and gstFrozen) <> 0 then |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
2098 |
begin |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
2099 |
if Gear^.Damage > 0 then |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
2100 |
begin |
14364
2221c418026a
Pixel-perfect removal of exploding frozen air mines
Wuzzy <Wuzzy2@mail.ru>
parents:
14363
diff
changeset
|
2101 |
// Normal, damaging explosion |
2221c418026a
Pixel-perfect removal of exploding frozen air mines
Wuzzy <Wuzzy2@mail.ru>
parents:
14363
diff
changeset
|
2102 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
14365
e3e06b216e00
Frozen air mines: Don't erase land if gstNoGravity state is off
Wuzzy <Wuzzy2@mail.ru>
parents:
14364
diff
changeset
|
2103 |
if ((Gear^.State and gstNoGravity) <> 0) then |
e3e06b216e00
Frozen air mines: Don't erase land if gstNoGravity state is off
Wuzzy <Wuzzy2@mail.ru>
parents:
14364
diff
changeset
|
2104 |
// Remove land created by frozen air mine sprite pixel-perfectly |
e3e06b216e00
Frozen air mines: Don't erase land if gstNoGravity state is off
Wuzzy <Wuzzy2@mail.ru>
parents:
14364
diff
changeset
|
2105 |
EraseLand( |
e3e06b216e00
Frozen air mines: Don't erase land if gstNoGravity state is off
Wuzzy <Wuzzy2@mail.ru>
parents:
14364
diff
changeset
|
2106 |
hwRound(Gear^.X) - SpritesData[sprFrozenAirMine].Width div 2, |
e3e06b216e00
Frozen air mines: Don't erase land if gstNoGravity state is off
Wuzzy <Wuzzy2@mail.ru>
parents:
14364
diff
changeset
|
2107 |
hwRound(Gear^.Y) - SpritesData[sprFrozenAirMine].Height div 2, |
e3e06b216e00
Frozen air mines: Don't erase land if gstNoGravity state is off
Wuzzy <Wuzzy2@mail.ru>
parents:
14364
diff
changeset
|
2108 |
sprFrozenAirMine, 0, 0, false, false, false, false); |
14575 | 2109 |
DeleteGear(Gear); |
14577 | 2110 |
exit |
14362
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
2111 |
end; |
15202 | 2112 |
if ((Gear^.dX.QWordValue + Gear^.dY.QWordValue) > _0_02.QWordValue) or ((GameTicks and $3F) = 15) then |
2113 |
doStepFallingGear(Gear); |
|
14362
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
2114 |
exit |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
2115 |
end; |
10827 | 2116 |
isUnderwater:= CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y) + Gear^.Radius); |
10800 | 2117 |
if Gear^.Pos > 0 then |
2118 |
begin |
|
2119 |
airFriction:= _1; |
|
10827 | 2120 |
if isUnderwater then |
2121 |
dec(airFriction.QWordValue,Gear^.Pos*2) |
|
2122 |
else |
|
2123 |
dec(airFriction.QWordValue,Gear^.Pos); |
|
10800 | 2124 |
Gear^.dX:= Gear^.dX*airFriction; |
2125 |
Gear^.dY:= Gear^.dY*airFriction |
|
2126 |
end; |
|
15202 | 2127 |
if ((Gear^.dX.QWordValue + Gear^.dY.QWordValue) > _0_02.QWordValue) or ((GameTicks and $3F) = 15) then |
2128 |
doStepFallingGear(Gear); |
|
10806 | 2129 |
if (TurnTimeLeft = 0) and ((Gear^.dX.QWordValue + Gear^.dY.QWordValue) > _0_02.QWordValue) then |
2130 |
AllInactive := false; |
|
2131 |
||
14769
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2132 |
// Disable targeting if airmine is not active yet |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2133 |
if ((Gear^.State and gsttmpFlag) = 0) then |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2134 |
begin |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2135 |
if (TurnTimeLeft = 0) |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2136 |
or ((GameFlags and gfInfAttack <> 0) and (GameTicks > Gear^.FlightTime)) |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2137 |
or (CurrentHedgehog^.Gear = nil) then |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2138 |
begin |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2139 |
Gear^.FlightTime:= GameTicks; |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2140 |
Gear^.State := Gear^.State or gsttmpFlag; |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2141 |
Gear^.Hedgehog := nil; |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2142 |
end; |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2143 |
exit; |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2144 |
end; |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2145 |
|
14221 | 2146 |
//Disable targeting while the airmine is stunned |
2147 |
if Gear^.Tag <> 0 then |
|
2148 |
begin |
|
14223 | 2149 |
if ((Gear^.FlightTime and $FF) = 0) then |
15247
eb61cf77b365
Spawn bubbles instead of sparkles when air mine is stunned underwater
Wuzzy <Wuzzy2@mail.ru>
parents:
15246
diff
changeset
|
2150 |
// spawn lots of particles when stunned (sparkles or bubbles) |
eb61cf77b365
Spawn bubbles instead of sparkles when air mine is stunned underwater
Wuzzy <Wuzzy2@mail.ru>
parents:
15246
diff
changeset
|
2151 |
if CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y)) = false then |
14223 | 2152 |
begin |
15247
eb61cf77b365
Spawn bubbles instead of sparkles when air mine is stunned underwater
Wuzzy <Wuzzy2@mail.ru>
parents:
15246
diff
changeset
|
2153 |
sparkle:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtDust, 1); |
eb61cf77b365
Spawn bubbles instead of sparkles when air mine is stunned underwater
Wuzzy <Wuzzy2@mail.ru>
parents:
15246
diff
changeset
|
2154 |
if sparkle <> nil then |
eb61cf77b365
Spawn bubbles instead of sparkles when air mine is stunned underwater
Wuzzy <Wuzzy2@mail.ru>
parents:
15246
diff
changeset
|
2155 |
begin |
eb61cf77b365
Spawn bubbles instead of sparkles when air mine is stunned underwater
Wuzzy <Wuzzy2@mail.ru>
parents:
15246
diff
changeset
|
2156 |
sparkle^.dX:= 0.004 * (random(100) - 50); |
eb61cf77b365
Spawn bubbles instead of sparkles when air mine is stunned underwater
Wuzzy <Wuzzy2@mail.ru>
parents:
15246
diff
changeset
|
2157 |
sparkle^.dY:= -0.05 + 0.004 * (random(100) - 50); |
eb61cf77b365
Spawn bubbles instead of sparkles when air mine is stunned underwater
Wuzzy <Wuzzy2@mail.ru>
parents:
15246
diff
changeset
|
2158 |
sparkle^.Tint:= $D5CD8CFF; |
eb61cf77b365
Spawn bubbles instead of sparkles when air mine is stunned underwater
Wuzzy <Wuzzy2@mail.ru>
parents:
15246
diff
changeset
|
2159 |
sparkle^.Angle:= random(360); |
eb61cf77b365
Spawn bubbles instead of sparkles when air mine is stunned underwater
Wuzzy <Wuzzy2@mail.ru>
parents:
15246
diff
changeset
|
2160 |
end; |
eb61cf77b365
Spawn bubbles instead of sparkles when air mine is stunned underwater
Wuzzy <Wuzzy2@mail.ru>
parents:
15246
diff
changeset
|
2161 |
end |
eb61cf77b365
Spawn bubbles instead of sparkles when air mine is stunned underwater
Wuzzy <Wuzzy2@mail.ru>
parents:
15246
diff
changeset
|
2162 |
else |
eb61cf77b365
Spawn bubbles instead of sparkles when air mine is stunned underwater
Wuzzy <Wuzzy2@mail.ru>
parents:
15246
diff
changeset
|
2163 |
AddVisualGear(hwRound(Gear^.X) - 8 + random(16), hwRound(Gear^.Y) + 16 + random(8), vgtBubble); |
14223 | 2164 |
|
14221 | 2165 |
dec(Gear^.FlightTime); |
2166 |
if Gear^.FlightTime = 0 then |
|
14225 | 2167 |
begin |
14221 | 2168 |
Gear^.Tag:= 0; |
14225 | 2169 |
Gear^.Hedgehog:= nil; |
2170 |
Gear^.State:= Gear^.State and (not gstAttacking); |
|
2171 |
Gear^.Timer:= Gear^.WDTimer |
|
2172 |
end; |
|
14221 | 2173 |
exit |
2174 |
end; |
|
2175 |
||
10806 | 2176 |
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
|
2177 |
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
|
2178 |
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
|
2179 |
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
|
2180 |
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
|
2181 |
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
|
2182 |
targ:= Gear^.Hedgehog^.Gear; |
10800 | 2183 |
if targ <> nil then |
2184 |
begin |
|
12805 | 2185 |
tX:=Gear^.X-targ^.X; |
2186 |
tY:=Gear^.Y-targ^.Y; |
|
10800 | 2187 |
// allow escaping - should maybe flag this too |
14086 | 2188 |
if (GameTicks > Gear^.FlightTime + 10000) or |
14100 | 2189 |
(not ((tX.Round + tY.Round < Gear^.Angle * 9) and |
14086 | 2190 |
(hwRound(hwSqr(tX) + hwSqr(tY)) < sqr(Gear^.Angle * 6)))) |
2191 |
then |
|
10800 | 2192 |
targ:= nil |
2193 |
end; |
|
2194 |
||
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
|
2195 |
// If in ready timer, or after turn, or in first 5 seconds of turn (really a window due to extra time utility) |
14769
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2196 |
// or hunting is disabled due to seek radius of 0 then we aren't hunting |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
2197 |
if (ReadyTimeLeft > 0) or (TurnTimeLeft = 0) or |
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
|
2198 |
((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
|
2199 |
(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
|
2200 |
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
|
2201 |
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
|
2202 |
// 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
|
2203 |
(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
|
2204 |
((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
|
2205 |
(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
|
2206 |
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
|
2207 |
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
|
2208 |
if targ <> nil then |
12805 | 2209 |
targDist:= Distance(Gear^.X-targ^.X,Gear^.Y-targ^.Y).Round |
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
|
2210 |
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
|
2211 |
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
|
2212 |
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
|
2213 |
for i:= 0 to cMaxHHIndex do |
15863 | 2214 |
if (not Hedgehogs[i].Unplaced) and (Hedgehogs[i].Gear <> nil) and (Hedgehogs[i].Effects[heFrozen] = 0) and ((Hedgehogs[i].Gear^.State and gstInvisible) = 0) 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
|
2215 |
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
|
2216 |
tmpG:= Hedgehogs[i].Gear; |
12805 | 2217 |
tX:=Gear^.X-tmpG^.X; |
2218 |
tY:=Gear^.Y-tmpG^.Y; |
|
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
|
2219 |
if (Gear^.Angle = $FFFFFFFF) or |
12805 | 2220 |
((tX.Round+tY.Round < Gear^.Angle) and |
2221 |
(hwRound(hwSqr(tX) + hwSqr(tY)) < sqr(Gear^.Angle))) 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
|
2222 |
begin |
12805 | 2223 |
if targ <> nil then tmpDist:= Distance(tX,tY).Round; |
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
|
2224 |
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
|
2225 |
begin |
12805 | 2226 |
if targ = nil then targDist:= Distance(tX,tY).Round |
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
|
2227 |
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
|
2228 |
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
|
2229 |
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
|
2230 |
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
|
2231 |
end |
10791
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
2232 |
end; |
10802
089e43d01f74
Use the larger scaled airmine sprite originally intended, add some antidickery measures.
nemo
parents:
10800
diff
changeset
|
2233 |
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
|
2234 |
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
|
2235 |
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
|
2236 |
begin |
10799
658794118fd8
initialise trackSpeed, add nil check before resetting seek timer
nemo
parents:
10798
diff
changeset
|
2237 |
trackSpeed:= _0; |
10827 | 2238 |
if isUnderwater then |
2239 |
trackSpeed.QWordValue:= Gear^.Power div 2 |
|
2240 |
else |
|
2241 |
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
|
2242 |
if (Gear^.X < targ^.X) and (Gear^.dX < _0_1) then |
12806 | 2243 |
if (WorldEdge = weWrap) and ((targ^.X - Gear^.X) > ((Gear^.X - int2hwFloat(LeftX)) + (int2hwFloat(RightX) - targ^.X))) then |
2244 |
Gear^.dX:= Gear^.dX-trackSpeed |
|
2245 |
else |
|
2246 |
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
|
2247 |
else if (Gear^.X > targ^.X) and (Gear^.dX > -_0_1) then |
12806 | 2248 |
if (WorldEdge = weWrap) and ((Gear^.X - targ^.X) > ((targ^.X - int2hwFloat(LeftX)) + (int2hwFloat(RightX) - Gear^.X))) then |
2249 |
Gear^.dX:= Gear^.dX+trackSpeed |
|
2250 |
else |
|
2251 |
Gear^.dX:= Gear^.dX-trackSpeed; |
|
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
|
2252 |
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
|
2253 |
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
|
2254 |
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
|
2255 |
Gear^.dY:= Gear^.dY-trackSpeed |
10800 | 2256 |
end |
2257 |
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
|
2258 |
|
14769
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2259 |
if ((Gear^.State and gstAttacking) = 0) then |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2260 |
begin |
15202 | 2261 |
if (((GameTicks+Gear^.Uid) and $1F) = 0) then |
14769
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2262 |
begin |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2263 |
if targ <> nil 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
|
2264 |
begin |
14769
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2265 |
tX:=Gear^.X-targ^.X; |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2266 |
tY:=Gear^.Y-targ^.Y; |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2267 |
if (tX.Round+tY.Round < Gear^.Boom) and |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2268 |
(hwRound(hwSqr(tX) + hwSqr(tY)) < sqr(Gear^.Boom)) then |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2269 |
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
|
2270 |
end |
14769
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2271 |
else if (Gear^.Angle > 0) and (CheckGearNear(Gear, gtHedgehog, Gear^.Boom, Gear^.Boom) <> nil) then |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2272 |
Gear^.State := Gear^.State or gstAttacking |
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
|
2273 |
end |
14769
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2274 |
end |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2275 |
else // gstAttacking <> 0 |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2276 |
begin |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2277 |
AllInactive := false; |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2278 |
if (Gear^.Timer and $FF) = 0 then |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2279 |
PlaySound(sndMineTick); |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2280 |
if Gear^.Timer = 0 then |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2281 |
begin |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2282 |
// recheck |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2283 |
if targ <> 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
|
2284 |
begin |
14769
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2285 |
tX:=Gear^.X-targ^.X; |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2286 |
tY:=Gear^.Y-targ^.Y; |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2287 |
if (tX.Round+tY.Round < Gear^.Boom) and |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2288 |
(hwRound(hwSqr(tX) + hwSqr(tY)) < sqr(Gear^.Boom)) then |
10791
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
2289 |
begin |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
2290 |
Gear^.Hedgehog:= CurrentHedgehog; |
14769
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2291 |
tmpG:= FollowGear; |
13399 | 2292 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
14769
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2293 |
FollowGear:= tmpG; |
10791
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
2294 |
DeleteGear(Gear); |
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
2295 |
exit |
14769
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2296 |
end |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2297 |
end |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2298 |
else if (Gear^.Angle > 0) and (CheckGearNear(Gear, gtHedgehog, Gear^.Boom, Gear^.Boom) <> nil) then |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2299 |
begin |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2300 |
Gear^.Hedgehog:= CurrentHedgehog; |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2301 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2302 |
DeleteGear(Gear); |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2303 |
exit |
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
|
2304 |
end; |
14769
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2305 |
Gear^.State:= Gear^.State and (not gstAttacking); |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2306 |
Gear^.Timer:= Gear^.WDTimer |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2307 |
end; |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2308 |
if Gear^.Timer > 0 then |
2ad6f0555e61
Fix air mine not colliding with crates initially (bug 679)
Wuzzy <Wuzzy2@mail.ru>
parents:
14763
diff
changeset
|
2309 |
dec(Gear^.Timer); |
10791
0311c9fa7498
tweak a few params. still something wtf going on when on rope
nemo
parents:
10789
diff
changeset
|
2310 |
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
|
2311 |
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
|
2312 |
|
39 | 2313 |
//////////////////////////////////////////////////////////////////////////////// |
3714 | 2314 |
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
|
2315 |
var land: Word; |
3710 | 2316 |
begin |
3714 | 2317 |
// 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
|
2318 |
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
|
2319 |
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
|
2320 |
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
|
2321 |
if land = 0 then land:= TestCollisionYwithGear(Gear, 2); |
11305
a20f416c91ec
fix bug reported by S.D.: throwing a sticking mine into a bouncy pit never ends turn. see also http://hedgewars.org/node/6350
sheepluva
parents:
11286
diff
changeset
|
2322 |
if (land <> 0) and ((land and lfBouncy = 0) or ((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
|
2323 |
begin |
10964 | 2324 |
if ((Gear^.State and gstMoving) <> 0) or (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
|
2325 |
begin |
3717 | 2326 |
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
|
2327 |
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
|
2328 |
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
|
2329 |
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
|
2330 |
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
|
2331 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2332 |
end |
3714 | 2333 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2334 |
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
|
2335 |
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
|
2336 |
DeleteCI(Gear); |
3714 | 2337 |
doStepFallingGear(Gear); |
2338 |
AllInactive := false; |
|
2339 |
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
|
2340 |
end; |
3714 | 2341 |
|
14779
bc0e86b0347b
Don't show SMine timer if drowning
Wuzzy <Wuzzy2@mail.ru>
parents:
14771
diff
changeset
|
2342 |
Gear^.RenderTimer:= (Gear^.State and (gstFrozen or gstAttacking or gstDrowning) = 0); |
3710 | 2343 |
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
|
2344 |
begin |
12299
6b25d117a904
Freezer allows to freeze sticky mines (currently only disables them)
Wuzzy <almikes@aol.com>
parents:
12292
diff
changeset
|
2345 |
if ((Gear^.State and gstAttacking) = 0) and ((Gear^.State and gstFrozen) = 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
|
2346 |
begin |
3710 | 2347 |
if ((GameTicks and $1F) = 0) then |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
2348 |
// FIXME - values taken from mine. use a gear val and set both to same |
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
2349 |
if CheckGearNear(Gear, gtHedgehog, 46, 32) <> 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
|
2350 |
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
|
2351 |
end |
12299
6b25d117a904
Freezer allows to freeze sticky mines (currently only disables them)
Wuzzy <almikes@aol.com>
parents:
12292
diff
changeset
|
2352 |
else if (Gear^.State and gstFrozen) = 0 then // 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
|
2353 |
begin |
4880
07e9849c6a70
bugfix: fixing sticky mines calling AddGearCI when they shouldn't (allows jumping on them in midair)
sheepluva
parents:
4874
diff
changeset
|
2354 |
AllInactive := false; |
07e9849c6a70
bugfix: fixing sticky mines calling AddGearCI when they shouldn't (allows jumping on them in midair)
sheepluva
parents:
4874
diff
changeset
|
2355 |
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
|
2356 |
begin |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
2357 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
4880
07e9849c6a70
bugfix: fixing sticky mines calling AddGearCI when they shouldn't (allows jumping on them in midair)
sheepluva
parents:
4874
diff
changeset
|
2358 |
DeleteGear(Gear); |
07e9849c6a70
bugfix: fixing sticky mines calling AddGearCI when they shouldn't (allows jumping on them in midair)
sheepluva
parents:
4874
diff
changeset
|
2359 |
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
|
2360 |
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
|
2361 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2362 |
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
|
2363 |
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
|
2364 |
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
|
2365 |
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
|
2366 |
end |
3710 | 2367 |
else // gsttmpFlag = 0 |
10015 | 2368 |
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
|
2369 |
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
|
2370 |
Gear^.State := Gear^.State or gsttmpFlag; |
3710 | 2371 |
end; |
2372 |
||
2373 |
//////////////////////////////////////////////////////////////////////////////// |
|
39 | 2374 |
procedure doStepDynamite(Gear: PGear); |
2375 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2376 |
doStepFallingGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2377 |
AllInactive := false; |
11527
44e646598e6a
sparkles for dynamite at sheepy's request. he can tweak values if he wishes
nemo
parents:
11523
diff
changeset
|
2378 |
|
15498 | 2379 |
if (Gear^.SoundChannel <> -1) and ((Gear^.State and gstDrowning) <> 0) then |
2380 |
begin |
|
2381 |
StopSoundChan(Gear^.SoundChannel); |
|
2382 |
Gear^.SoundChannel:= -1; |
|
2383 |
end |
|
2384 |
else if Gear^.SoundChannel = -1 then |
|
2385 |
Gear^.SoundChannel := LoopSound(sndDynamiteFuse); |
|
15494
1e3761ecfc13
Fix incorrect dynamite drown check
Wuzzy <Wuzzy2@mail.ru>
parents:
15493
diff
changeset
|
2386 |
if (Gear^.State and gstDrowning) <> 0 then |
15492
e1467bced64d
Dynamite handler: Exit early when drowning
Wuzzy <Wuzzy2@mail.ru>
parents:
15381
diff
changeset
|
2387 |
exit; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2388 |
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
|
2389 |
inc(Gear^.Tag); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2390 |
if Gear^.Timer = 1000 then // might need better timing |
14032
3c40754f6cfe
Add Grenade taunt when grenade close to hog is about to blow up
Wuzzy <Wuzzy2@mail.ru>
parents:
14030
diff
changeset
|
2391 |
makeHogsWorry(Gear^.X, Gear^.Y, 75, Gear^.Kind); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2392 |
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
|
2393 |
begin |
15498 | 2394 |
StopSoundChan(Gear^.SoundChannel); |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
2395 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2396 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2397 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2398 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2399 |
dec(Gear^.Timer); |
39 | 2400 |
end; |
14
81f125629b25
- Mine checks whether a hedgehog is near less frequently
unc0rr
parents:
13
diff
changeset
|
2401 |
|
351 | 2402 |
/////////////////////////////////////////////////////////////////////////////// |
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
|
2403 |
|
566f967ec22f
White/Black smoke, break out rolling barrel into its own routine, adjust rolling barrel impact damage. NEEDS TESTING
nemo
parents:
2939
diff
changeset
|
2404 |
procedure doStepRollingBarrel(Gear: PGear); |
8795 | 2405 |
var |
10679
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
2406 |
i, dmg: LongInt; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
2407 |
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
|
2408 |
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
|
2409 |
begin |
10490 | 2410 |
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
|
2411 |
SetLittle(Gear^.dY); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2412 |
Gear^.State := Gear^.State or gstAnimation; |
9954 | 2413 |
if Gear^.Health < cBarrelHealth then Gear^.State:= Gear^.State and (not gstFrozen); |
8795 | 2414 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2415 |
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
|
2416 |
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
|
2417 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2418 |
DeleteCI(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2419 |
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
|
2420 |
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
|
2421 |
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
|
2422 |
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
|
2423 |
begin |
8958
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8952
diff
changeset
|
2424 |
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
|
2425 |
begin |
8958
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8952
diff
changeset
|
2426 |
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
|
2427 |
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
|
2428 |
begin |
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8952
diff
changeset
|
2429 |
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
|
2430 |
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
|
2431 |
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
|
2432 |
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
|
2433 |
end; |
10679
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
2434 |
dmg:= hwRound(dxdy * _50); |
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
2435 |
inc(Gear^.Damage, dmg); |
5989c293955a
add a couple of onGearDamage callbacks to mine/barrel fall damage
nemo
parents:
10676
diff
changeset
|
2436 |
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
|
2437 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2438 |
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
|
2439 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2440 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2441 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2442 |
Gear^.State := Gear^.State or gsttmpFlag; |
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9289
diff
changeset
|
2443 |
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
|
2444 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2445 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2446 |
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
|
2447 |
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
|
2448 |
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
|
2449 |
Gear^.dX := _0; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2450 |
|
5128
3c65326bb713
Check for 0 health to avoid div by 0. spotted by mikade.
nemo
parents:
5121
diff
changeset
|
2451 |
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
|
2452 |
if (cBarrelHealth div Gear^.Health) > 2 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2453 |
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
|
2454 |
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
|
2455 |
AddVisualGear(hwRound(Gear^.X) - 16 + Random(32), hwRound(Gear^.Y) - 2, vgtSmokeWhite); |
14976
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2456 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2457 |
dec(Gear^.Health, Gear^.Damage); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2458 |
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
|
2459 |
if Gear^.Health <= 0 then |
14976
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2460 |
doStepCase(Gear) |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2461 |
else |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2462 |
// health texture (FlightTime = health when the last texture was generated) |
15381
c117e17b90bc
flag some of the renderstringtex which are taking up a ton of processing time with --stats-only and pas2c
nemo
parents:
15354
diff
changeset
|
2463 |
if (not cOnlyStats) and ((Gear^.Health <> Gear^.FlightTime) or (Gear^.Tex = nil)) then |
14976
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2464 |
begin |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2465 |
Gear^.FlightTime:= Gear^.Health; |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2466 |
FreeAndNilTexture(Gear^.Tex); |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2467 |
Gear^.Tex := RenderStringTex(ansistring(inttostr(Gear^.Health)), $ff808080, fnt16); |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2468 |
end; |
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
|
2469 |
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
|
2470 |
|
14
81f125629b25
- Mine checks whether a hedgehog is near less frequently
unc0rr
parents:
13
diff
changeset
|
2471 |
procedure doStepCase(Gear: PGear); |
8795 | 2472 |
var |
7406
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
2473 |
i, x, y: LongInt; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
2474 |
k: TGearType; |
7406
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
2475 |
dX, dY: HWFloat; |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
2476 |
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
|
2477 |
sparkles: PVisualGear; |
14
81f125629b25
- Mine checks whether a hedgehog is near less frequently
unc0rr
parents:
13
diff
changeset
|
2478 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2479 |
k := Gear^.Kind; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2480 |
|
3894 | 2481 |
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
|
2482 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2483 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2484 |
FreeActionsList; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2485 |
SetAllToActive; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2486 |
// something (hh, mine, etc...) could be on top of the case |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2487 |
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
|
2488 |
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
|
2489 |
Gear^.Message := Gear^.Message and (not (gmLJump or gmHJump)); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2490 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2491 |
end; |
9954 | 2492 |
if (k = gtExplosives) and (Gear^.Health < cBarrelHealth) then Gear^.State:= Gear^.State and (not gstFrozen); |
15 | 2493 |
|
8973 | 2494 |
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
|
2495 |
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
|
2496 |
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
|
2497 |
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
|
2498 |
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
|
2499 |
|
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
|
2500 |
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
|
2501 |
begin |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
2502 |
doMakeExplosion(x, y, Gear^.Boom, hog, EXPLAutoSound); |
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
|
2503 |
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
|
2504 |
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
|
2505 |
end |
12568
494d3e1c4810
Don't play “missed” taunt if a target has been hit
Wuzzy <almikes@aol.com>
parents:
12377
diff
changeset
|
2506 |
else if k = gtTarget then |
494d3e1c4810
Don't play “missed” taunt if a target has been hit
Wuzzy <almikes@aol.com>
parents:
12377
diff
changeset
|
2507 |
uStats.TargetHit() |
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
|
2508 |
else if k = gtExplosives then |
14577 | 2509 |
begin |
2510 |
doMakeExplosion(x, y, Gear^.Boom, hog, EXPLAutoSound); |
|
2511 |
for i:= 0 to 31 do |
|
2512 |
begin |
|
2513 |
dX := AngleCos(i * 64) * _0_5 * (getrandomf + _1); |
|
2514 |
dY := AngleSin(i * 64) * _0_5 * (getrandomf + _1); |
|
2515 |
AddGear(x, y, gtFlame, 0, dX, dY, 0); |
|
2516 |
AddGear(x, y, gtFlame, gstTmpFlag, -dX, -dY, 0); |
|
2517 |
end |
|
2518 |
end; |
|
14575 | 2519 |
DeleteGear(Gear); |
14577 | 2520 |
exit |
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
|
2521 |
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
|
2522 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2523 |
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
|
2524 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2525 |
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
|
2526 |
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
|
2527 |
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
|
2528 |
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
|
2529 |
end |
8958
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8952
diff
changeset
|
2530 |
else Gear^.dX:= _0; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2531 |
|
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
|
2532 |
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
|
2533 |
if (cBarrelHealth div Gear^.Health) > 2 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2534 |
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
|
2535 |
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
|
2536 |
AddVisualGear(hwRound(Gear^.X) - 16 + Random(32), hwRound(Gear^.Y) - 2, vgtSmokeWhite); |
14976
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2537 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2538 |
dec(Gear^.Health, Gear^.Damage); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2539 |
Gear^.Damage := 0; |
14976
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2540 |
// health texture (FlightTime = health when the last texture was generated) |
15381
c117e17b90bc
flag some of the renderstringtex which are taking up a ton of processing time with --stats-only and pas2c
nemo
parents:
15354
diff
changeset
|
2541 |
if (not cOnlyStats) and ((Gear^.Health <> Gear^.FlightTime) or (Gear^.Tex = nil)) then |
14976
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2542 |
begin |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2543 |
Gear^.FlightTime:= Gear^.Health; |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2544 |
FreeAndNilTexture(Gear^.Tex); |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2545 |
Gear^.Tex := RenderStringTex(ansistring(inttostr(Gear^.Health)), $ff808080, fnt16); |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2546 |
end; |
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
|
2547 |
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
|
2548 |
else |
8795 | 2549 |
begin |
14770
533ac9774279
Add key to display extra gear info tags
Wuzzy <Wuzzy2@mail.ru>
parents:
14769
diff
changeset
|
2550 |
// health texture for health crate |
14976
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2551 |
if (k = gtCase) and ((Gear^.Pos and posCaseHealth) <> 0) then |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2552 |
begin |
14770
533ac9774279
Add key to display extra gear info tags
Wuzzy <Wuzzy2@mail.ru>
parents:
14769
diff
changeset
|
2553 |
if ((Gear^.State and gstFrozen) = 0) then |
14782
1b82538970ca
Fix health crate health display not respecting Karma value properly
Wuzzy <Wuzzy2@mail.ru>
parents:
14780
diff
changeset
|
2554 |
begin |
14780 | 2555 |
// Karma=2: Always hide health |
2556 |
if (Gear^.Karma = 2) then |
|
14782
1b82538970ca
Fix health crate health display not respecting Karma value properly
Wuzzy <Wuzzy2@mail.ru>
parents:
14780
diff
changeset
|
2557 |
i:= 0 |
14780 | 2558 |
// Karma=1: Hide health in game, but show in demo |
14782
1b82538970ca
Fix health crate health display not respecting Karma value properly
Wuzzy <Wuzzy2@mail.ru>
parents:
14780
diff
changeset
|
2559 |
else if (Gear^.Karma = 1) then |
1b82538970ca
Fix health crate health display not respecting Karma value properly
Wuzzy <Wuzzy2@mail.ru>
parents:
14780
diff
changeset
|
2560 |
if (GameType in [gmtDemo, gmtRecord]) then |
1b82538970ca
Fix health crate health display not respecting Karma value properly
Wuzzy <Wuzzy2@mail.ru>
parents:
14780
diff
changeset
|
2561 |
i:= 1 |
1b82538970ca
Fix health crate health display not respecting Karma value properly
Wuzzy <Wuzzy2@mail.ru>
parents:
14780
diff
changeset
|
2562 |
else |
1b82538970ca
Fix health crate health display not respecting Karma value properly
Wuzzy <Wuzzy2@mail.ru>
parents:
14780
diff
changeset
|
2563 |
i:= 0 |
15381
c117e17b90bc
flag some of the renderstringtex which are taking up a ton of processing time with --stats-only and pas2c
nemo
parents:
15354
diff
changeset
|
2564 |
else if cOnlyStats then |
c117e17b90bc
flag some of the renderstringtex which are taking up a ton of processing time with --stats-only and pas2c
nemo
parents:
15354
diff
changeset
|
2565 |
i:= 0 |
14780 | 2566 |
// Always show health (default) |
2567 |
else |
|
14782
1b82538970ca
Fix health crate health display not respecting Karma value properly
Wuzzy <Wuzzy2@mail.ru>
parents:
14780
diff
changeset
|
2568 |
i:= 1; |
1b82538970ca
Fix health crate health display not respecting Karma value properly
Wuzzy <Wuzzy2@mail.ru>
parents:
14780
diff
changeset
|
2569 |
if i = 1 then |
14976
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2570 |
begin |
15381
c117e17b90bc
flag some of the renderstringtex which are taking up a ton of processing time with --stats-only and pas2c
nemo
parents:
15354
diff
changeset
|
2571 |
if (not cOnlyStats) and ((Gear^.Health <> Gear^.FlightTime) or (Gear^.Tex = nil)) then |
14976
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2572 |
begin |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2573 |
Gear^.FlightTime:= Gear^.Health; |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2574 |
FreeAndNilTexture(Gear^.Tex); |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2575 |
Gear^.Tex := RenderStringTex(ansistring(inttostr(Gear^.Health)), $ff80ff80, fnt16) |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2576 |
end |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2577 |
end |
14782
1b82538970ca
Fix health crate health display not respecting Karma value properly
Wuzzy <Wuzzy2@mail.ru>
parents:
14780
diff
changeset
|
2578 |
else |
14976
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2579 |
begin |
15381
c117e17b90bc
flag some of the renderstringtex which are taking up a ton of processing time with --stats-only and pas2c
nemo
parents:
15354
diff
changeset
|
2580 |
if (not cOnlyStats) and ((Gear^.FlightTime <> $ffffffff) or (Gear^.Tex = nil)) then |
14976
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2581 |
begin |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2582 |
Gear^.FlightTime:= $ffffffff; |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2583 |
FreeAndNilTexture(Gear^.Tex); |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2584 |
Gear^.Tex := RenderStringTex(trmsg[sidUnknownGearValue], $ff80ff80, fnt16) |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2585 |
end |
088c1d319612
if at all possible, don't regenerate arbitrary number of health textures each tick
alfadur
parents:
14958
diff
changeset
|
2586 |
end |
14782
1b82538970ca
Fix health crate health display not respecting Karma value properly
Wuzzy <Wuzzy2@mail.ru>
parents:
14780
diff
changeset
|
2587 |
end; |
14770
533ac9774279
Add key to display extra gear info tags
Wuzzy <Wuzzy2@mail.ru>
parents:
14769
diff
changeset
|
2588 |
end; |
7276 | 2589 |
if Gear^.Timer = 500 then |
2590 |
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
|
2591 |
(* 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
|
2592 |
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
|
2593 |
has its own complexities. *) |
7276 | 2594 |
// Abuse a couple of gear values to track origin |
7339 | 2595 |
Gear^.Angle:= hwRound(Gear^.Y); |
7276 | 2596 |
Gear^.Tag:= random(2); |
2597 |
inc(Gear^.Timer) |
|
2598 |
end; |
|
2599 |
if Gear^.Timer < 1833 then inc(Gear^.Timer); |
|
2600 |
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
|
2601 |
begin |
7339 | 2602 |
sparkles:= AddVisualGear(hwRound(Gear^.X), Gear^.Angle, vgtDust, 1); |
7276 | 2603 |
if sparkles <> nil then |
2604 |
begin |
|
2605 |
sparkles^.dX:= 0; |
|
2606 |
sparkles^.dY:= 0; |
|
2607 |
sparkles^.Angle:= 270; |
|
8795 | 2608 |
if Gear^.Tag = 1 then |
7276 | 2609 |
sparkles^.Tint:= $3744D7FF |
2610 |
else sparkles^.Tint:= $FAB22CFF |
|
2611 |
end; |
|
2612 |
end; |
|
8795 | 2613 |
if Gear^.Timer < 1000 then |
7283 | 2614 |
begin |
2615 |
AllInactive:= false; |
|
2616 |
exit |
|
2617 |
end |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2618 |
end; |
2911 | 2619 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2620 |
|
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^.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
|
2622 |
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
|
2623 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2624 |
AllInactive := false; |
7661
3046ad5b361e
fix for issue 376 (embedding barrels in ceiling)
sheepluva
parents:
7659
diff
changeset
|
2625 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2626 |
Gear^.dY := Gear^.dY + cGravity; |
7661
3046ad5b361e
fix for issue 376 (embedding barrels in ceiling)
sheepluva
parents:
7659
diff
changeset
|
2627 |
|
9820 | 2628 |
if ((not Gear^.dY.isNegative) and (TestCollisionYwithGear(Gear, 1) <> 0)) or |
2629 |
(Gear^.dY.isNegative and (TestCollisionYwithGear(Gear, -1) <> 0)) then |
|
2630 |
Gear^.dY := _0 |
|
2631 |
else Gear^.Y := Gear^.Y + Gear^.dY; |
|
7661
3046ad5b361e
fix for issue 376 (embedding barrels in ceiling)
sheepluva
parents:
7659
diff
changeset
|
2632 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2633 |
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
|
2634 |
SetAllHHToActive(false); |
7661
3046ad5b361e
fix for issue 376 (embedding barrels in ceiling)
sheepluva
parents:
7659
diff
changeset
|
2635 |
|
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
|
2636 |
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
|
2637 |
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
|
2638 |
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
|
2639 |
inc(Gear^.Damage, hwRound(Gear^.dY * _70)); |
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 |
if Gear^.dY > _0_2 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2642 |
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
|
2643 |
AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust); |
8795 | 2644 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2645 |
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
|
2646 |
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
|
2647 |
Gear^.dY := _0 |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2648 |
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
|
2649 |
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
|
2650 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2651 |
CheckGearDrowning(Gear); |
14958
896707084562
Don't render health crate and barrel health when drowning
Wuzzy <Wuzzy2@mail.ru>
parents:
14957
diff
changeset
|
2652 |
if ((Gear^.State and gstDrowning) <> 0) then |
896707084562
Don't render health crate and barrel health when drowning
Wuzzy <Wuzzy2@mail.ru>
parents:
14957
diff
changeset
|
2653 |
Gear^.RenderHealth:= false; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2654 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2655 |
|
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2656 |
if (Gear^.dY.QWordValue = 0) then |
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9289
diff
changeset
|
2657 |
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
|
2658 |
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
|
2659 |
DeleteCI(Gear) |
14
81f125629b25
- Mine checks whether a hedgehog is near less frequently
unc0rr
parents:
13
diff
changeset
|
2660 |
end; |
49 | 2661 |
|
2662 |
//////////////////////////////////////////////////////////////////////////////// |
|
2460 | 2663 |
|
2664 |
procedure doStepTarget(Gear: PGear); |
|
2665 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2666 |
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
|
2667 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2668 |
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
|
2669 |
// 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
|
2670 |
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
|
2671 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2672 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2673 |
if (Gear^.Tag = 0) and (Gear^.Timer < 1000) then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2674 |
inc(Gear^.Timer) |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2675 |
else if Gear^.Tag = 1 then |
4808 | 2676 |
Gear^.Tag := 2 |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2677 |
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
|
2678 |
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
|
2679 |
dec(Gear^.Timer) |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
2680 |
else |
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 |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2682 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2683 |
exit; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2684 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2685 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2686 |
doStepCase(Gear) |
2460 | 2687 |
end; |
2688 |
||
2689 |
//////////////////////////////////////////////////////////////////////////////// |
|
854 | 2690 |
procedure doStepIdle(Gear: PGear); |
2691 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2692 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2693 |
dec(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2694 |
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
|
2695 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2696 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2697 |
AfterAttack |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2698 |
end |
854 | 2699 |
end; |
2700 |
||
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
|
2701 |
//////////////////////////////////////////////////////////////////////////////// |
79 | 2702 |
procedure doStepShover(Gear: PGear); |
8795 | 2703 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2704 |
HHGear: PGear; |
79 | 2705 |
begin |
12119 | 2706 |
dec(Gear^.Timer); |
2707 |
if Gear^.Timer = 0 then |
|
2708 |
begin |
|
2709 |
inc(Gear^.Tag); |
|
14030
d203bb36225f
and finally make the bat hit moving gears for completeness
alfadur
parents:
14029
diff
changeset
|
2710 |
Gear^.Timer := 50; |
d203bb36225f
and finally make the bat hit moving gears for completeness
alfadur
parents:
14029
diff
changeset
|
2711 |
if Gear^.Tag = 3 then |
d203bb36225f
and finally make the bat hit moving gears for completeness
alfadur
parents:
14029
diff
changeset
|
2712 |
begin |
d203bb36225f
and finally make the bat hit moving gears for completeness
alfadur
parents:
14029
diff
changeset
|
2713 |
ClearHitOrder(); |
d203bb36225f
and finally make the bat hit moving gears for completeness
alfadur
parents:
14029
diff
changeset
|
2714 |
RefillProximityCache(Gear, 100); |
d203bb36225f
and finally make the bat hit moving gears for completeness
alfadur
parents:
14029
diff
changeset
|
2715 |
end; |
12828 | 2716 |
end; |
2717 |
||
2718 |
if Gear^.Tag = 3 then |
|
12119 | 2719 |
begin |
2720 |
HHGear := Gear^.Hedgehog^.Gear; |
|
2721 |
HHGear^.State := HHGear^.State or gstNoDamage; |
|
2722 |
DeleteCI(HHGear); |
|
2723 |
||
14030
d203bb36225f
and finally make the bat hit moving gears for completeness
alfadur
parents:
14029
diff
changeset
|
2724 |
AmmoShoveCache(Gear, Gear^.Boom, 115); |
12119 | 2725 |
|
2726 |
HHGear^.State := (HHGear^.State and (not gstNoDamage)) or gstMoving; |
|
12828 | 2727 |
end |
2728 |
else if Gear^.Tag = 4 then |
|
2729 |
begin |
|
14030
d203bb36225f
and finally make the bat hit moving gears for completeness
alfadur
parents:
14029
diff
changeset
|
2730 |
ClearHitOrder(); |
d203bb36225f
and finally make the bat hit moving gears for completeness
alfadur
parents:
14029
diff
changeset
|
2731 |
ClearProximityCache(); |
12119 | 2732 |
Gear^.Timer := 250; |
2733 |
Gear^.doStep := @doStepIdle |
|
2734 |
end |
|
79 | 2735 |
end; |
2736 |
||
2737 |
//////////////////////////////////////////////////////////////////////////////// |
|
925 | 2738 |
procedure doStepWhip(Gear: PGear); |
8795 | 2739 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2740 |
HHGear: PGear; |
925 | 2741 |
i: LongInt; |
2742 |
begin |
|
4365 | 2743 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2744 |
HHGear^.State := HHGear^.State or gstNoDamage; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2745 |
DeleteCI(HHGear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2746 |
|
14029 | 2747 |
ClearHitOrder(); |
2748 |
RefillProximityCache(Gear, 100); |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2749 |
for i:= 0 to 3 do |
4578 | 2750 |
begin |
9723
31d10d684e90
whip: visual enhancements (hat'n'dust) as suggested by nemo
sheepluva
parents:
9721
diff
changeset
|
2751 |
AddVisualGear(hwRound(Gear^.X) + hwSign(Gear^.dX) * (10 + 6 * i), hwRound(Gear^.Y) + 12 + Random(6), vgtDust); |
14029 | 2752 |
AmmoShoveCache(Gear, Gear^.Boom, 25); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2753 |
Gear^.X := Gear^.X + Gear^.dX * 5 |
4578 | 2754 |
end; |
925 | 2755 |
|
14029 | 2756 |
ClearHitOrder(); |
2757 |
ClearProximityCache(); |
|
4182 | 2758 |
HHGear^.State := (HHGear^.State and (not gstNoDamage)) or gstMoving; |
2759 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2760 |
Gear^.Timer := 250; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2761 |
Gear^.doStep := @doStepIdle |
925 | 2762 |
end; |
2763 |
||
2764 |
//////////////////////////////////////////////////////////////////////////////// |
|
79 | 2765 |
procedure doStepFlame(Gear: PGear); |
8795 | 2766 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2767 |
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
|
2768 |
sticky: Boolean; |
3751 | 2769 |
vgt: PVisualGear; |
10591 | 2770 |
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
|
2771 |
landPixel: Word; |
79 | 2772 |
begin |
15246
ebbc2f04b863
Make flames collide with bounce world edge again, properly this time
Wuzzy <Wuzzy2@mail.ru>
parents:
15245
diff
changeset
|
2773 |
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
|
2774 |
if Gear^.FlightTime > 0 then dec(Gear^.FlightTime); |
15014 | 2775 |
// There are 2 flame types: normal and sticky |
3609
bc63ed514b70
Minor fire tweak for readability and lethalness, remove exit condition that was hanging game (identified by jaylittle)
nemo
parents:
3603
diff
changeset
|
2776 |
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
|
2777 |
if not sticky then AllInactive := false; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2778 |
|
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
|
2779 |
landPixel:= TestCollisionYwithGear(Gear, 1); |
15014 | 2780 |
// Flame is in mid-air |
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
|
2781 |
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
|
2782 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2783 |
AllInactive := false; |
3751 | 2784 |
|
15014 | 2785 |
// Deals damage in mid-air if FlightTime = 0. |
2786 |
// Otherwise, flame is harmless in mid-air. |
|
2787 |
// Intended for use with scripts. |
|
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
|
2788 |
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
|
2789 |
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
|
2790 |
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
|
2791 |
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
|
2792 |
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
|
2793 |
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
|
2794 |
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
|
2795 |
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
|
2796 |
Gear^.dY.isNegative:= true; |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
2797 |
AmmoShove(Gear, Gear^.Boom, 125); |
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
|
2798 |
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
|
2799 |
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
|
2800 |
Gear^.Radius := 1 |
14362
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
2801 |
end; |
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
|
2802 |
|
3751 | 2803 |
if ((GameTicks mod 100) = 0) then |
2804 |
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
|
2805 |
vgt:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtFire, gstTmpFlag); |
3751 | 2806 |
if vgt <> nil then |
2807 |
begin |
|
2808 |
vgt^.dx:= 0; |
|
2809 |
vgt^.dy:= 0; |
|
2810 |
vgt^.FrameTicks:= 1800 div (Gear^.Tag mod 3 + 2); |
|
2811 |
end; |
|
2812 |
end; |
|
2813 |
||
10591 | 2814 |
if (Gear^.dX.QWordValue > _2.QWordValue) |
2815 |
or (Gear^.dY.QWordValue > _2.QWordValue) |
|
2816 |
then |
|
2817 |
begin |
|
2818 |
// 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
|
2819 |
f:= _1_9 / Distance(Gear^.dX, Gear^.dY); |
10591 | 2820 |
Gear^.dX:= Gear^.dX * f; |
2821 |
Gear^.dY:= Gear^.dY * f; |
|
2822 |
end |
|
2823 |
else begin |
|
15014 | 2824 |
// Gravity and wind |
10591 | 2825 |
if Gear^.dX.QWordValue > _0_01.QWordValue then |
2826 |
Gear^.dX := Gear^.dX * _0_995; |
|
2827 |
||
2828 |
Gear^.dY := Gear^.dY + cGravity; |
|
2829 |
||
2830 |
if Gear^.dY.QWordValue > _0_2.QWordValue then |
|
2831 |
Gear^.dY := Gear^.dY * _0_995; |
|
2832 |
||
15246
ebbc2f04b863
Make flames collide with bounce world edge again, properly this time
Wuzzy <Wuzzy2@mail.ru>
parents:
15245
diff
changeset
|
2833 |
// Apply speed changes |
ebbc2f04b863
Make flames collide with bounce world edge again, properly this time
Wuzzy <Wuzzy2@mail.ru>
parents:
15245
diff
changeset
|
2834 |
|
ebbc2f04b863
Make flames collide with bounce world edge again, properly this time
Wuzzy <Wuzzy2@mail.ru>
parents:
15245
diff
changeset
|
2835 |
tdX:= Gear^.dX + cWindSpeed * 640; |
ebbc2f04b863
Make flames collide with bounce world edge again, properly this time
Wuzzy <Wuzzy2@mail.ru>
parents:
15245
diff
changeset
|
2836 |
// Don't apply wind speed if moving against bounce world edge |
ebbc2f04b863
Make flames collide with bounce world edge again, properly this time
Wuzzy <Wuzzy2@mail.ru>
parents:
15245
diff
changeset
|
2837 |
if (WorldEdge = weBounce) and |
ebbc2f04b863
Make flames collide with bounce world edge again, properly this time
Wuzzy <Wuzzy2@mail.ru>
parents:
15245
diff
changeset
|
2838 |
(((hwRound(Gear^.X + tdX) - Gear^.Radius < leftX) and (hwSign(tdX) = -1)) or |
ebbc2f04b863
Make flames collide with bounce world edge again, properly this time
Wuzzy <Wuzzy2@mail.ru>
parents:
15245
diff
changeset
|
2839 |
((hwRound(Gear^.X + tdX) + Gear^.Radius > rightX) and (hwSign(tdX) = 1))) then |
ebbc2f04b863
Make flames collide with bounce world edge again, properly this time
Wuzzy <Wuzzy2@mail.ru>
parents:
15245
diff
changeset
|
2840 |
Gear^.X := Gear^.X + Gear^.dX |
ebbc2f04b863
Make flames collide with bounce world edge again, properly this time
Wuzzy <Wuzzy2@mail.ru>
parents:
15245
diff
changeset
|
2841 |
else |
ebbc2f04b863
Make flames collide with bounce world edge again, properly this time
Wuzzy <Wuzzy2@mail.ru>
parents:
15245
diff
changeset
|
2842 |
// Apply dX and wind speed |
ebbc2f04b863
Make flames collide with bounce world edge again, properly this time
Wuzzy <Wuzzy2@mail.ru>
parents:
15245
diff
changeset
|
2843 |
Gear^.X := Gear^.X + tdX; |
ebbc2f04b863
Make flames collide with bounce world edge again, properly this time
Wuzzy <Wuzzy2@mail.ru>
parents:
15245
diff
changeset
|
2844 |
|
10591 | 2845 |
Gear^.Y := Gear^.Y + Gear^.dY; |
2846 |
end; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2847 |
|
10354 | 2848 |
gX := hwRound(Gear^.X); |
2849 |
gY := hwRound(Gear^.Y); |
|
2850 |
||
15014 | 2851 |
// Extinguish in water |
10354 | 2852 |
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
|
2853 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2854 |
for i:= 0 to 3 do |
10354 | 2855 |
AddVisualGear(gX - 8 + Random(16), gY - 8 + Random(16), vgtSteam); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2856 |
PlaySound(sndVaporize); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2857 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2858 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2859 |
end |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
2860 |
end |
15014 | 2861 |
// Flame is on terrain |
10015 | 2862 |
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
|
2863 |
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
|
2864 |
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
|
2865 |
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
|
2866 |
Gear^.Y:= Gear^.Y+_6; |
15014 | 2867 |
// Extinguish on ice |
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
|
2868 |
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
|
2869 |
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
|
2870 |
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
|
2871 |
gY := hwRound(Gear^.Y) - 6; |
13566
acc69f506914
Use wrap-aware doMakeExplosion instead of DrawExplosion in uHandlersMess
Wuzzy <Wuzzy2@mail.ru>
parents:
13470
diff
changeset
|
2872 |
doMakeExplosion(gX, gY, 4, Gear^.Hedgehog, EXPLNoDamage or EXPLDoNotTouchAny or EXPLNoGfx); |
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
|
2873 |
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
|
2874 |
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
|
2875 |
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
|
2876 |
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
|
2877 |
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
|
2878 |
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
|
2879 |
end; |
15014 | 2880 |
// Sticky flame damage |
9277
ad1ec7212ac7
reduce shove frequency (perf). reduce dX so that less time is spent sliding.
nemo
parents:
9251
diff
changeset
|
2881 |
if sticky and (GameTicks and $F = 0) then |
5024 | 2882 |
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
|
2883 |
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
|
2884 |
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
|
2885 |
tdY:= Gear^.dY; |
9277
ad1ec7212ac7
reduce shove frequency (perf). reduce dX so that less time is spent sliding.
nemo
parents:
9251
diff
changeset
|
2886 |
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
|
2887 |
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
|
2888 |
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
|
2889 |
Gear^.dY.isNegative:= true; |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
2890 |
AmmoShove(Gear, Gear^.Boom, 125); |
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
|
2891 |
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
|
2892 |
Gear^.dY:= tdY; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2893 |
Gear^.Radius := 1 |
5024 | 2894 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
2895 |
if Gear^.Timer > 0 then |
5024 | 2896 |
begin |
2475 | 2897 |
dec(Gear^.Timer); |
2898 |
inc(Gear^.Damage) |
|
5024 | 2899 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2900 |
else |
15014 | 2901 |
// Flame burn-down handling |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2902 |
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
|
2903 |
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
|
2904 |
gY := hwRound(Gear^.Y); |
15014 | 2905 |
// Normal flame: Burns down quickly and must be destroyed before the turn ends |
3609
bc63ed514b70
Minor fire tweak for readability and lethalness, remove exit condition that was hanging game (identified by jaylittle)
nemo
parents:
3603
diff
changeset
|
2906 |
if not sticky then |
5024 | 2907 |
begin |
15014 | 2908 |
// Deal damage |
3640
54676a34b9ad
Reduce calls to expensive operations in fire. Slightly alters fire behaviour, but should still be reasonable
nemo
parents:
3609
diff
changeset
|
2909 |
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
|
2910 |
begin |
54676a34b9ad
Reduce calls to expensive operations in fire. Slightly alters fire behaviour, but should still be reasonable
nemo
parents:
3609
diff
changeset
|
2911 |
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
|
2912 |
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
|
2913 |
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
|
2914 |
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
|
2915 |
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
|
2916 |
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
|
2917 |
Gear^.dY.isNegative:= true; |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
2918 |
AmmoShove(Gear, Gear^.Boom * 3, 100); |
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
|
2919 |
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
|
2920 |
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
|
2921 |
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
|
2922 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2923 |
else if ((GameTicks and $3) = 3) then |
14593
34e810295d08
Remove a bunch of dead out-commented code
Wuzzy <Wuzzy2@mail.ru>
parents:
14591
diff
changeset
|
2924 |
doMakeExplosion(gX, gY, Gear^.Boom * 4, Gear^.Hedgehog, 0); |
8795 | 2925 |
|
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
|
2926 |
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
|
2927 |
for i:= Random(2) downto 0 do |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2928 |
AddVisualGear(gX - 3 + Random(6), gY - 2, vgtSmoke); |
8795 | 2929 |
|
15014 | 2930 |
// Flame burn-out due to time |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2931 |
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
|
2932 |
dec(Gear^.Health); |
15014 | 2933 |
|
2934 |
// Calculate time for next flame update with a bit of random jitter |
|
9809 | 2935 |
Gear^.Timer := 450 - Gear^.Tag * 8 + LongInt(GetRandom(2)) |
5024 | 2936 |
end |
15014 | 2937 |
// Sticky flame: Burns down slowly and persists between turns |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2938 |
else |
5024 | 2939 |
begin |
15014 | 2940 |
// Destroy land very slowly (low chance this gets called) |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2941 |
if ((GameTicks and $7FF) = 0) and ((GameFlags and gfSolidLand) = 0) then |
5024 | 2942 |
begin |
13566
acc69f506914
Use wrap-aware doMakeExplosion instead of DrawExplosion in uHandlersMess
Wuzzy <Wuzzy2@mail.ru>
parents:
13470
diff
changeset
|
2943 |
doMakeExplosion(gX, gY, 4, Gear^.Hedgehog, EXPLNoDamage or EXPLDoNotTouchAny or EXPLNoGfx); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2944 |
|
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
|
2945 |
for i:= Random(3) downto 0 do |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2946 |
AddVisualGear(gX - 3 + Random(6), gY - 2, vgtSmoke); |
5024 | 2947 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2948 |
|
15014 | 2949 |
// Calculate time for next flame update with a bit of random jitter |
9809 | 2950 |
Gear^.Timer := 100 - Gear^.Tag * 3 + LongInt(GetRandom(2)); |
15014 | 2951 |
|
2952 |
// Flame burn-out due to time |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2953 |
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
|
2954 |
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
|
2955 |
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
|
2956 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2957 |
end; |
15014 | 2958 |
// This kills the flame |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2959 |
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
|
2960 |
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
|
2961 |
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
|
2962 |
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
|
2963 |
if not sticky then |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2964 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2965 |
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
|
2966 |
for i:= Random(2) downto 0 do |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2967 |
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
|
2968 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2969 |
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
|
2970 |
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
|
2971 |
AddVisualGear(gX - 3 + Random(6), gY - 2, vgtSmoke); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2972 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2973 |
DeleteGear(Gear) |
14575 | 2974 |
end |
79 | 2975 |
end; |
82 | 2976 |
|
2977 |
//////////////////////////////////////////////////////////////////////////////// |
|
2978 |
procedure doStepFirePunchWork(Gear: PGear); |
|
8795 | 2979 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2980 |
HHGear: PGear; |
82 | 2981 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2982 |
AllInactive := false; |
3894 | 2983 |
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
|
2984 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2985 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2986 |
AfterAttack; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2987 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
2988 |
end; |
82 | 2989 |
|
4365 | 2990 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2991 |
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
|
2992 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2993 |
Gear^.Tag := hwRound(HHGear^.Y); |
10887 | 2994 |
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
|
2995 |
HHGear^.State := HHGear^.State or gstNoDamage; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
2996 |
Gear^.Y := HHGear^.Y; |
14027
105793e575d6
make firepunch hit moving gears (airmines are not amused)
alfadur
parents:
14026
diff
changeset
|
2997 |
AmmoShoveCache(Gear, Gear^.Boom, 40); |
6450 | 2998 |
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
|
2999 |
end; |
351 | 3000 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3001 |
HHGear^.dY := HHGear^.dY + cGravity; |
9824 | 3002 |
if Gear^.Timer > 0 then dec(Gear^.Timer); |
3003 |
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
|
3004 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3005 |
HHGear^.State := HHGear^.State or gstMoving; |
14026
31bdb759d98b
prevent firepunch from hitting the same gear multiple times
alfadur
parents:
14019
diff
changeset
|
3006 |
ClearHitOrder(); |
14027
105793e575d6
make firepunch hit moving gears (airmines are not amused)
alfadur
parents:
14026
diff
changeset
|
3007 |
ClearProximityCache(); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3008 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3009 |
AfterAttack; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3010 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3011 |
end; |
2089 | 3012 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3013 |
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
|
3014 |
lfIndestructible) then |
14027
105793e575d6
make firepunch hit moving gears (airmines are not amused)
alfadur
parents:
14026
diff
changeset
|
3015 |
HHGear^.Y := HHGear^.Y + HHGear^.dY; |
105793e575d6
make firepunch hit moving gears (airmines are not amused)
alfadur
parents:
14026
diff
changeset
|
3016 |
|
105793e575d6
make firepunch hit moving gears (airmines are not amused)
alfadur
parents:
14026
diff
changeset
|
3017 |
if (Gear^.Timer mod 200) = 0 then |
105793e575d6
make firepunch hit moving gears (airmines are not amused)
alfadur
parents:
14026
diff
changeset
|
3018 |
RefillProximityCache(Gear, 300); |
82 | 3019 |
end; |
3020 |
||
3021 |
procedure doStepFirePunch(Gear: PGear); |
|
8795 | 3022 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3023 |
HHGear: PGear; |
82 | 3024 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3025 |
AllInactive := false; |
4365 | 3026 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3027 |
DeleteCI(HHGear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3028 |
HHGear^.dX := SignAs(cLittle, Gear^.dX); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3029 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3030 |
HHGear^.dY := - _0_3; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3031 |
|
14026
31bdb759d98b
prevent firepunch from hitting the same gear multiple times
alfadur
parents:
14019
diff
changeset
|
3032 |
ClearHitOrder(); |
14027
105793e575d6
make firepunch hit moving gears (airmines are not amused)
alfadur
parents:
14026
diff
changeset
|
3033 |
RefillProximityCache(Gear, 300); |
14026
31bdb759d98b
prevent firepunch from hitting the same gear multiple times
alfadur
parents:
14019
diff
changeset
|
3034 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3035 |
Gear^.X := HHGear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3036 |
Gear^.dX := SignAs(_0_45, Gear^.dX); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3037 |
Gear^.dY := - _0_9; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3038 |
Gear^.doStep := @doStepFirePunchWork; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3039 |
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
|
3040 |
|
7053 | 3041 |
PlaySoundV(TSound(ord(sndFirePunch1) + GetRandom(6)), HHGear^.Hedgehog^.Team^.voicepack) |
82 | 3042 |
end; |
3043 |
||
263 | 3044 |
//////////////////////////////////////////////////////////////////////////////// |
3045 |
||
929
9456e1e77369
- Continue preparation for implementing attack from rope and parachute
unc0rr
parents:
928
diff
changeset
|
3046 |
procedure doStepParachuteWork(Gear: PGear); |
8795 | 3047 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3048 |
HHGear: PGear; |
15166
d47122a0e4b4
Properly set dx/dy of hedgehog on parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15155
diff
changeset
|
3049 |
deltaX, deltaY: hwFloat; |
211 | 3050 |
begin |
4365 | 3051 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3052 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3053 |
inc(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3054 |
|
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
|
3055 |
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
|
3056 |
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
|
3057 |
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
|
3058 |
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
|
3059 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3060 |
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
|
3061 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3062 |
Message := 0; |
15169
95b72e81a866
Fix hog facing direction when landing with parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15166
diff
changeset
|
3063 |
if Gear^.Tag = 1 then |
95b72e81a866
Fix hog facing direction when landing with parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15166
diff
changeset
|
3064 |
dX := _1 |
95b72e81a866
Fix hog facing direction when landing with parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15166
diff
changeset
|
3065 |
else |
95b72e81a866
Fix hog facing direction when landing with parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15166
diff
changeset
|
3066 |
dX := - _1; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3067 |
SetLittle(dX); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3068 |
dY := _0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3069 |
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
|
3070 |
end; |
13977
2568fa516733
Fix hog can drop more than 2 s. mines if first one was dropped from utility, then stop using that utility
Wuzzy <Wuzzy2@mail.ru>
parents:
13898
diff
changeset
|
3071 |
if (GetAmmoEntry(HHGear^.Hedgehog^, amParachute)^.Count >= 1) and ((Ammoz[HHGear^.Hedgehog^.CurAmmoType].Ammo.Propz and ammoprop_AltUse) <> 0) and (HHGear^.Hedgehog^.MultiShootAttacks = 0) then |
12820
4c1c468725ff
Fix desync when dropping weapon from parachute or jetpack
Wuzzy <Wuzzy2@mail.ru>
parents:
12815
diff
changeset
|
3072 |
HHGear^.Hedgehog^.CurAmmoType:= amParachute; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3073 |
isCursorVisible := false; |
4372 | 3074 |
ApplyAmmoChanges(HHGear^.Hedgehog^); |
14575 | 3075 |
DeleteGear(Gear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3076 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3077 |
end; |
211 | 3078 |
|
14957
d6a8ef85cf53
Fix parachute moving hog very fast or making it stuck when bumping into wall while facing the opposite direction (bug 742)
Wuzzy <Wuzzy2@mail.ru>
parents:
14899
diff
changeset
|
3079 |
deltaX:= _0; |
d6a8ef85cf53
Fix parachute moving hog very fast or making it stuck when bumping into wall while facing the opposite direction (bug 742)
Wuzzy <Wuzzy2@mail.ru>
parents:
14899
diff
changeset
|
3080 |
deltaX:= deltaX + cWindSpeed * 200; |
15166
d47122a0e4b4
Properly set dx/dy of hedgehog on parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15155
diff
changeset
|
3081 |
deltaY:= _0; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3082 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3083 |
if (Gear^.Message and gmLeft) <> 0 then |
14957
d6a8ef85cf53
Fix parachute moving hog very fast or making it stuck when bumping into wall while facing the opposite direction (bug 742)
Wuzzy <Wuzzy2@mail.ru>
parents:
14899
diff
changeset
|
3084 |
deltaX := deltaX - cMaxWindSpeed * 80 |
8795 | 3085 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3086 |
else if (Gear^.Message and gmRight) <> 0 then |
14957
d6a8ef85cf53
Fix parachute moving hog very fast or making it stuck when bumping into wall while facing the opposite direction (bug 742)
Wuzzy <Wuzzy2@mail.ru>
parents:
14899
diff
changeset
|
3087 |
deltaX := deltaX + cMaxWindSpeed * 80; |
8795 | 3088 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3089 |
if (Gear^.Message and gmUp) <> 0 then |
15166
d47122a0e4b4
Properly set dx/dy of hedgehog on parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15155
diff
changeset
|
3090 |
deltaY := deltaY - cGravity * 40 |
8795 | 3091 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3092 |
else if (Gear^.Message and gmDown) <> 0 then |
15166
d47122a0e4b4
Properly set dx/dy of hedgehog on parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15155
diff
changeset
|
3093 |
deltaY := deltaY + cGravity * 40; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3094 |
|
14957
d6a8ef85cf53
Fix parachute moving hog very fast or making it stuck when bumping into wall while facing the opposite direction (bug 742)
Wuzzy <Wuzzy2@mail.ru>
parents:
14899
diff
changeset
|
3095 |
HHGear^.X := HHGear^.X + deltaX; |
4774 | 3096 |
// don't drift into obstacles |
14957
d6a8ef85cf53
Fix parachute moving hog very fast or making it stuck when bumping into wall while facing the opposite direction (bug 742)
Wuzzy <Wuzzy2@mail.ru>
parents:
14899
diff
changeset
|
3097 |
if TestCollisionXwithGear(HHGear, hwSign(deltaX)) <> 0 then |
15166
d47122a0e4b4
Properly set dx/dy of hedgehog on parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15155
diff
changeset
|
3098 |
begin |
14957
d6a8ef85cf53
Fix parachute moving hog very fast or making it stuck when bumping into wall while facing the opposite direction (bug 742)
Wuzzy <Wuzzy2@mail.ru>
parents:
14899
diff
changeset
|
3099 |
HHGear^.X := HHGear^.X - int2hwFloat(hwSign(deltaX)); |
15166
d47122a0e4b4
Properly set dx/dy of hedgehog on parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15155
diff
changeset
|
3100 |
deltaX:= _0; |
d47122a0e4b4
Properly set dx/dy of hedgehog on parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15155
diff
changeset
|
3101 |
end; |
d47122a0e4b4
Properly set dx/dy of hedgehog on parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15155
diff
changeset
|
3102 |
deltaY := deltaY + cGravity * 100; |
d47122a0e4b4
Properly set dx/dy of hedgehog on parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15155
diff
changeset
|
3103 |
HHGear^.Y := HHGear^.Y + deltaY; |
d47122a0e4b4
Properly set dx/dy of hedgehog on parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15155
diff
changeset
|
3104 |
|
d47122a0e4b4
Properly set dx/dy of hedgehog on parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15155
diff
changeset
|
3105 |
HHGear^.dX := deltaX; |
d47122a0e4b4
Properly set dx/dy of hedgehog on parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15155
diff
changeset
|
3106 |
HHGear^.dY := deltaY; |
d47122a0e4b4
Properly set dx/dy of hedgehog on parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15155
diff
changeset
|
3107 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3108 |
Gear^.X := HHGear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3109 |
Gear^.Y := HHGear^.Y |
263 | 3110 |
end; |
211 | 3111 |
|
929
9456e1e77369
- Continue preparation for implementing attack from rope and parachute
unc0rr
parents:
928
diff
changeset
|
3112 |
procedure doStepParachute(Gear: PGear); |
8795 | 3113 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3114 |
HHGear: PGear; |
929
9456e1e77369
- Continue preparation for implementing attack from rope and parachute
unc0rr
parents:
928
diff
changeset
|
3115 |
begin |
4365 | 3116 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3117 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3118 |
DeleteCI(HHGear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3119 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3120 |
AfterAttack; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3121 |
|
15531
6ddfde71ba6a
Remove parachute early if hog is inside land
Wuzzy <Wuzzy2@mail.ru>
parents:
15498
diff
changeset
|
3122 |
// Delete parachute early if hog already collides |
6ddfde71ba6a
Remove parachute early if hog is inside land
Wuzzy <Wuzzy2@mail.ru>
parents:
15498
diff
changeset
|
3123 |
if (TestCollisionXwithGear(HHGear, -1) <> 0) and (TestCollisionXwithGear(HHGear, 1) <> 0) then |
6ddfde71ba6a
Remove parachute early if hog is inside land
Wuzzy <Wuzzy2@mail.ru>
parents:
15498
diff
changeset
|
3124 |
begin |
6ddfde71ba6a
Remove parachute early if hog is inside land
Wuzzy <Wuzzy2@mail.ru>
parents:
15498
diff
changeset
|
3125 |
HHGear^.dY := cGravity * 100; |
6ddfde71ba6a
Remove parachute early if hog is inside land
Wuzzy <Wuzzy2@mail.ru>
parents:
15498
diff
changeset
|
3126 |
isCursorVisible:= false; |
6ddfde71ba6a
Remove parachute early if hog is inside land
Wuzzy <Wuzzy2@mail.ru>
parents:
15498
diff
changeset
|
3127 |
ApplyAmmoChanges(HHGear^.Hedgehog^); |
6ddfde71ba6a
Remove parachute early if hog is inside land
Wuzzy <Wuzzy2@mail.ru>
parents:
15498
diff
changeset
|
3128 |
DeleteGear(Gear); |
6ddfde71ba6a
Remove parachute early if hog is inside land
Wuzzy <Wuzzy2@mail.ru>
parents:
15498
diff
changeset
|
3129 |
exit; |
6ddfde71ba6a
Remove parachute early if hog is inside land
Wuzzy <Wuzzy2@mail.ru>
parents:
15498
diff
changeset
|
3130 |
end; |
6ddfde71ba6a
Remove parachute early if hog is inside land
Wuzzy <Wuzzy2@mail.ru>
parents:
15498
diff
changeset
|
3131 |
|
11342
aa3f886c6298
fix hedgehog on parachute facing in wrong direction if parachute opens during double-jump
sheepluva
parents:
11305
diff
changeset
|
3132 |
// make sure hog doesn't end up facing in wrong direction due to high jump |
aa3f886c6298
fix hedgehog on parachute facing in wrong direction if parachute opens during double-jump
sheepluva
parents:
11305
diff
changeset
|
3133 |
if (HHGear^.State and gstHHHJump) <> 0 then |
aa3f886c6298
fix hedgehog on parachute facing in wrong direction if parachute opens during double-jump
sheepluva
parents:
11305
diff
changeset
|
3134 |
HHGear^.dX.isNegative := (not HHGear^.dX.isNegative); |
aa3f886c6298
fix hedgehog on parachute facing in wrong direction if parachute opens during double-jump
sheepluva
parents:
11305
diff
changeset
|
3135 |
|
aa3f886c6298
fix hedgehog on parachute facing in wrong direction if parachute opens during double-jump
sheepluva
parents:
11305
diff
changeset
|
3136 |
HHGear^.State := HHGear^.State and (not (gstAttacking or gstAttacked or gstMoving or gstHHJumping or gstHHHJump)); |
6450 | 3137 |
HHGear^.Message := HHGear^.Message and (not gmAttack); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3138 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3139 |
Gear^.doStep := @doStepParachuteWork; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3140 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3141 |
Gear^.Message := HHGear^.Message; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3142 |
doStepParachuteWork(Gear) |
929
9456e1e77369
- Continue preparation for implementing attack from rope and parachute
unc0rr
parents:
928
diff
changeset
|
3143 |
end; |
9456e1e77369
- Continue preparation for implementing attack from rope and parachute
unc0rr
parents:
928
diff
changeset
|
3144 |
|
263 | 3145 |
//////////////////////////////////////////////////////////////////////////////// |
3146 |
procedure doStepAirAttackWork(Gear: PGear); |
|
15251
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3147 |
var uw, nuw: boolean; |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3148 |
tmpFloat: hwFloat; |
15258
5c91c5191085
Give snorkel to air plane pilot in weSea
Wuzzy <Wuzzy2@mail.ru>
parents:
15256
diff
changeset
|
3149 |
i: LongInt; |
263 | 3150 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3151 |
AllInactive := false; |
15254
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3152 |
if (WorldEdge = weWrap) then |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3153 |
if (WorldWrap(Gear)) then |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3154 |
inc(Gear^.Power); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3155 |
Gear^.X := Gear^.X + cAirPlaneSpeed * Gear^.Tag; |
15254
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3156 |
if (Gear^.Health > 0) and (Gear^.Power >= Gear^.WDTimer) and (((Gear^.Tag = 1) and (not (Gear^.X < Gear^.dX))) or ((Gear^.Tag = -1) and (not (Gear^.X > Gear^.dX)))) then |
5612
2638dec1b323
This really should have been a TPoint for consistency
nemo
parents:
5606
diff
changeset
|
3157 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3158 |
dec(Gear^.Health); |
15254
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3159 |
Gear^.FlightTime:= 0; |
15245
f16376e9374f
Remove all placement restrictions of air attack and friends
Wuzzy <Wuzzy2@mail.ru>
parents:
15243
diff
changeset
|
3160 |
// Spawn missile |
f16376e9374f
Remove all placement restrictions of air attack and friends
Wuzzy <Wuzzy2@mail.ru>
parents:
15243
diff
changeset
|
3161 |
case Gear^.State of |
f16376e9374f
Remove all placement restrictions of air attack and friends
Wuzzy <Wuzzy2@mail.ru>
parents:
15243
diff
changeset
|
3162 |
0: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, cBombsSpeed * Gear^.Tag, _0, 0); |
f16376e9374f
Remove all placement restrictions of air attack and friends
Wuzzy <Wuzzy2@mail.ru>
parents:
15243
diff
changeset
|
3163 |
1: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtMine, 0, cBombsSpeed * Gear^.Tag, _0, 0); |
f16376e9374f
Remove all placement restrictions of air attack and friends
Wuzzy <Wuzzy2@mail.ru>
parents:
15243
diff
changeset
|
3164 |
2: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtNapalmBomb, 0, cBombsSpeed * Gear^.Tag, _0, 0); |
f16376e9374f
Remove all placement restrictions of air attack and friends
Wuzzy <Wuzzy2@mail.ru>
parents:
15243
diff
changeset
|
3165 |
3: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtDrill, gsttmpFlag, cBombsSpeed * Gear^.Tag, _0, Gear^.Timer + 1); |
f16376e9374f
Remove all placement restrictions of air attack and friends
Wuzzy <Wuzzy2@mail.ru>
parents:
15243
diff
changeset
|
3166 |
end; |
15254
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3167 |
Gear^.dX := Gear^.X + int2hwFloat(Gear^.Damage * Gear^.Tag); |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3168 |
if (WorldEdge = weWrap) then |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3169 |
begin |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3170 |
Gear^.dX := int2hwFloat(CalcWorldWrap(hwRound(Gear^.dX), 0)); |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3171 |
if (((Gear^.Tag = 1) and (not (Gear^.X < Gear^.dX))) or ((Gear^.Tag = -1) and (not (Gear^.X > Gear^.dX)))) then |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3172 |
inc(Gear^.WDTimer); |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3173 |
end; |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3174 |
|
15245
f16376e9374f
Remove all placement restrictions of air attack and friends
Wuzzy <Wuzzy2@mail.ru>
parents:
15243
diff
changeset
|
3175 |
if CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y)) then |
f16376e9374f
Remove all placement restrictions of air attack and friends
Wuzzy <Wuzzy2@mail.ru>
parents:
15243
diff
changeset
|
3176 |
FollowGear^.State:= FollowGear^.State or gstSubmersible; |
15250
b96868956514
Air attack: Fix some issues with sound channel
Wuzzy <Wuzzy2@mail.ru>
parents:
15249
diff
changeset
|
3177 |
end; |
b96868956514
Air attack: Fix some issues with sound channel
Wuzzy <Wuzzy2@mail.ru>
parents:
15249
diff
changeset
|
3178 |
|
15254
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3179 |
if (Gear^.Health = 0) then |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3180 |
inc(Gear^.FlightTime); |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3181 |
|
15256
66dcb7728e01
Air attack: Fix infintie sound when target is at extreme X pos
Wuzzy <Wuzzy2@mail.ru>
parents:
15255
diff
changeset
|
3182 |
if (Gear^.SoundChannel <> -1) and (WorldEdge <> weSea) and (Gear^.FlightTime > 20) then |
66dcb7728e01
Air attack: Fix infintie sound when target is at extreme X pos
Wuzzy <Wuzzy2@mail.ru>
parents:
15255
diff
changeset
|
3183 |
begin |
66dcb7728e01
Air attack: Fix infintie sound when target is at extreme X pos
Wuzzy <Wuzzy2@mail.ru>
parents:
15255
diff
changeset
|
3184 |
StopSoundChan(Gear^.SoundChannel, 4000); |
66dcb7728e01
Air attack: Fix infintie sound when target is at extreme X pos
Wuzzy <Wuzzy2@mail.ru>
parents:
15255
diff
changeset
|
3185 |
Gear^.SoundChannel := -1; |
66dcb7728e01
Air attack: Fix infintie sound when target is at extreme X pos
Wuzzy <Wuzzy2@mail.ru>
parents:
15255
diff
changeset
|
3186 |
end; |
66dcb7728e01
Air attack: Fix infintie sound when target is at extreme X pos
Wuzzy <Wuzzy2@mail.ru>
parents:
15255
diff
changeset
|
3187 |
|
15250
b96868956514
Air attack: Fix some issues with sound channel
Wuzzy <Wuzzy2@mail.ru>
parents:
15249
diff
changeset
|
3188 |
// Particles |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3189 |
if (GameTicks and $3F) = 0 then |
15249
1dd99fc2a0e8
Air attack: Replace smoke with bubbles when underwater
Wuzzy <Wuzzy2@mail.ru>
parents:
15247
diff
changeset
|
3190 |
if CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y)) then |
15258
5c91c5191085
Give snorkel to air plane pilot in weSea
Wuzzy <Wuzzy2@mail.ru>
parents:
15256
diff
changeset
|
3191 |
begin |
5c91c5191085
Give snorkel to air plane pilot in weSea
Wuzzy <Wuzzy2@mail.ru>
parents:
15256
diff
changeset
|
3192 |
// air plane bubbles |
5c91c5191085
Give snorkel to air plane pilot in weSea
Wuzzy <Wuzzy2@mail.ru>
parents:
15256
diff
changeset
|
3193 |
for i:=1 to 3 do |
5c91c5191085
Give snorkel to air plane pilot in weSea
Wuzzy <Wuzzy2@mail.ru>
parents:
15256
diff
changeset
|
3194 |
AddVisualGear(hwRound(Gear^.X) - 8 + Random(16), hwRound(Gear^.Y) - 8 + Random(16), vgtBubble); |
5c91c5191085
Give snorkel to air plane pilot in weSea
Wuzzy <Wuzzy2@mail.ru>
parents:
15256
diff
changeset
|
3195 |
// pilot's snorkel bubbles |
5c91c5191085
Give snorkel to air plane pilot in weSea
Wuzzy <Wuzzy2@mail.ru>
parents:
15256
diff
changeset
|
3196 |
if random(2) = 0 then |
5c91c5191085
Give snorkel to air plane pilot in weSea
Wuzzy <Wuzzy2@mail.ru>
parents:
15256
diff
changeset
|
3197 |
AddVisualGear(hwRound(Gear^.X) + 10, hwRound(Gear^.Y) - 50, vgtBubble); |
5c91c5191085
Give snorkel to air plane pilot in weSea
Wuzzy <Wuzzy2@mail.ru>
parents:
15256
diff
changeset
|
3198 |
end |
15249
1dd99fc2a0e8
Air attack: Replace smoke with bubbles when underwater
Wuzzy <Wuzzy2@mail.ru>
parents:
15247
diff
changeset
|
3199 |
else |
15258
5c91c5191085
Give snorkel to air plane pilot in weSea
Wuzzy <Wuzzy2@mail.ru>
parents:
15256
diff
changeset
|
3200 |
// smoke |
15249
1dd99fc2a0e8
Air attack: Replace smoke with bubbles when underwater
Wuzzy <Wuzzy2@mail.ru>
parents:
15247
diff
changeset
|
3201 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3202 |
|
15250
b96868956514
Air attack: Fix some issues with sound channel
Wuzzy <Wuzzy2@mail.ru>
parents:
15249
diff
changeset
|
3203 |
// Get rid of gear and cleanup |
15254
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3204 |
if ((WorldEdge = weWrap) and (Gear^.FlightTime >= 4000)) or |
15674
3d8c2ab2b98b
Tweak airplane spawn point to avoid appear out of nowhere
Wuzzy <Wuzzy2@mail.ru>
parents:
15670
diff
changeset
|
3205 |
((WorldEdge <> weWrap) and (((hwRound(Gear^.X) - Gear^.Radius > (LAND_WIDTH+2048)) or (hwRound(Gear^.X) + Gear^.Radius < -2048) or ((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
|
3206 |
begin |
15250
b96868956514
Air attack: Fix some issues with sound channel
Wuzzy <Wuzzy2@mail.ru>
parents:
15249
diff
changeset
|
3207 |
// fail-safe: instanly stop sound if it wasn't disabled before |
b96868956514
Air attack: Fix some issues with sound channel
Wuzzy <Wuzzy2@mail.ru>
parents:
15249
diff
changeset
|
3208 |
if (Gear^.SoundChannel <> -1) then |
b96868956514
Air attack: Fix some issues with sound channel
Wuzzy <Wuzzy2@mail.ru>
parents:
15249
diff
changeset
|
3209 |
begin |
b96868956514
Air attack: Fix some issues with sound channel
Wuzzy <Wuzzy2@mail.ru>
parents:
15249
diff
changeset
|
3210 |
StopSoundChan(Gear^.SoundChannel); |
b96868956514
Air attack: Fix some issues with sound channel
Wuzzy <Wuzzy2@mail.ru>
parents:
15249
diff
changeset
|
3211 |
Gear^.SoundChannel := -1; |
b96868956514
Air attack: Fix some issues with sound channel
Wuzzy <Wuzzy2@mail.ru>
parents:
15249
diff
changeset
|
3212 |
end; |
15253
a9a1f5824076
Air attack: Add simple appear/disappear effect in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15251
diff
changeset
|
3213 |
if (WorldEdge = weWrap) then |
a9a1f5824076
Air attack: Add simple appear/disappear effect in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15251
diff
changeset
|
3214 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtBigExplosion); |
15251
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3215 |
DeleteGear(Gear); |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3216 |
exit; |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3217 |
end; |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3218 |
|
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3219 |
uw := (Gear^.Karma <> 0); // Was plane underwater last tick? |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3220 |
nuw := CheckCoordInWater(hwRound(Gear^.X) + Gear^.Radius * Gear^.Tag, hwRound(Gear^.Y)); // Is plane underwater now? |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3221 |
|
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3222 |
// if water entered or left |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3223 |
if nuw <> uw then |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3224 |
begin |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3225 |
tmpFloat:= Gear^.dX; |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3226 |
Gear^.dX := cAirPlaneSpeed * Gear^.Tag; |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3227 |
AddSplashForGear(Gear, false); |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3228 |
Gear^.dX := tmpFloat; |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3229 |
StopSoundChan(Gear^.SoundChannel); |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3230 |
if nuw then |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3231 |
begin |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3232 |
Gear^.SoundChannel := LoopSound(sndPlaneWater); |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3233 |
StopSoundChan(Gear^.SoundChannel, 4000); |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3234 |
Gear^.SoundChannel := -1; |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3235 |
Gear^.Karma := 1; |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3236 |
end |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3237 |
else |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3238 |
begin |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3239 |
Gear^.SoundChannel := LoopSound(sndPlane); |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3240 |
Gear^.Karma := 0; |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3241 |
end; |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3242 |
end; |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3243 |
|
263 | 3244 |
end; |
3245 |
||
3246 |
procedure doStepAirAttack(Gear: PGear); |
|
15245
f16376e9374f
Remove all placement restrictions of air attack and friends
Wuzzy <Wuzzy2@mail.ru>
parents:
15243
diff
changeset
|
3247 |
var HHGear: PGear; |
263 | 3248 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3249 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3250 |
|
15775 | 3251 |
HHGear:= nil; |
3252 |
||
14586
833ab5b359e5
Deny air attack in bounce world edge if target is in "impossible" position
Wuzzy <Wuzzy2@mail.ru>
parents:
14581
diff
changeset
|
3253 |
if (Gear^.Hedgehog <> nil) and (Gear^.Hedgehog^.Gear <> nil) then |
833ab5b359e5
Deny air attack in bounce world edge if target is in "impossible" position
Wuzzy <Wuzzy2@mail.ru>
parents:
14581
diff
changeset
|
3254 |
HHGear:= Gear^.Hedgehog^.Gear; |
833ab5b359e5
Deny air attack in bounce world edge if target is in "impossible" position
Wuzzy <Wuzzy2@mail.ru>
parents:
14581
diff
changeset
|
3255 |
|
833ab5b359e5
Deny air attack in bounce world edge if target is in "impossible" position
Wuzzy <Wuzzy2@mail.ru>
parents:
14581
diff
changeset
|
3256 |
if (HHGear <> nil) then |
833ab5b359e5
Deny air attack in bounce world edge if target is in "impossible" position
Wuzzy <Wuzzy2@mail.ru>
parents:
14581
diff
changeset
|
3257 |
PlaySoundV(sndIncoming, Gear^.Hedgehog^.Team^.voicepack); |
14756
2d859d34e6f6
Fix turn end if placing air attack in bouncy world edge map was denied
Wuzzy <Wuzzy2@mail.ru>
parents:
14753
diff
changeset
|
3258 |
AfterAttack; |
2d859d34e6f6
Fix turn end if placing air attack in bouncy world edge map was denied
Wuzzy <Wuzzy2@mail.ru>
parents:
14753
diff
changeset
|
3259 |
CurAmmoGear := nil; |
14586
833ab5b359e5
Deny air attack in bounce world edge if target is in "impossible" position
Wuzzy <Wuzzy2@mail.ru>
parents:
14581
diff
changeset
|
3260 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3261 |
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
|
3262 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3263 |
Gear^.Tag := 1; |
15254
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3264 |
if (WorldEdge = weWrap) then |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3265 |
Gear^.X := int2hwFloat(CalcWorldWrap(Gear^.Target.X + max(384, LAND_WIDTH shr 2), 0)) |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3266 |
else |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3267 |
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
|
3268 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3269 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3270 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3271 |
Gear^.Tag := -1; |
15254
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3272 |
if (WorldEdge = weWrap) then |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3273 |
Gear^.X := int2hwFloat(CalcWorldWrap(Gear^.Target.X - max(384, LAND_WIDTH shr 2), 0)) |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3274 |
else |
15674
3d8c2ab2b98b
Tweak airplane spawn point to avoid appear out of nowhere
Wuzzy <Wuzzy2@mail.ru>
parents:
15670
diff
changeset
|
3275 |
Gear^.X := int2hwFloat(LAND_WIDTH + 2048); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3276 |
end; |
1507 | 3277 |
|
14588
5de4d470dafe
Tweak height limit of air attack in bounce edge maps
Wuzzy <Wuzzy2@mail.ru>
parents:
14587
diff
changeset
|
3278 |
Gear^.Y := int2hwFloat(topY - 300); |
15253
a9a1f5824076
Air attack: Add simple appear/disappear effect in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15251
diff
changeset
|
3279 |
|
a9a1f5824076
Air attack: Add simple appear/disappear effect in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15251
diff
changeset
|
3280 |
// Appear out of nowhere in wrap |
a9a1f5824076
Air attack: Add simple appear/disappear effect in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15251
diff
changeset
|
3281 |
if (WorldEdge = weWrap) then |
a9a1f5824076
Air attack: Add simple appear/disappear effect in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15251
diff
changeset
|
3282 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtBigExplosion); |
a9a1f5824076
Air attack: Add simple appear/disappear effect in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15251
diff
changeset
|
3283 |
|
11540 | 3284 |
Gear^.dX := int2hwFloat(Gear^.Target.X) - int2hwFloat(Gear^.Tag * (Gear^.Health-1) * Gear^.Damage) / 2; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3285 |
|
4778
1565a553d200
have napalm strike bombs explode right over the target
sheepluva
parents:
4774
diff
changeset
|
3286 |
// 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
|
3287 |
if (Gear^.State = 2) then |
8795 | 3288 |
Gear^.dX := Gear^.dX - cBombsSpeed * Gear^.Tag * 900 |
4778
1565a553d200
have napalm strike bombs explode right over the target
sheepluva
parents:
4774
diff
changeset
|
3289 |
// calcs for regular falling gears |
5612
2638dec1b323
This really should have been a TPoint for consistency
nemo
parents:
5606
diff
changeset
|
3290 |
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
|
3291 |
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
|
3292 |
cGravity) * Gear^.Tag; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3293 |
|
15254
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3294 |
if (WorldEdge = weWrap) then |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3295 |
begin |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3296 |
Gear^.dX := int2hwFloat(CalcWorldWrap(hwRound(Gear^.dX), 0)); |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3297 |
if (((Gear^.Tag = 1) and (not (Gear^.X < Gear^.dX))) or ((Gear^.Tag = -1) and (not (Gear^.X > Gear^.dX)))) then |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3298 |
Gear^.WDTimer:= 1; |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3299 |
end; |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3300 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3301 |
Gear^.doStep := @doStepAirAttackWork; |
15251
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3302 |
|
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3303 |
if (WorldEdge = weSea) then |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3304 |
begin |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3305 |
Gear^.SoundChannel := LoopSound(sndPlaneWater, 4000); |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3306 |
Gear^.Karma := 1; |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3307 |
end |
15254
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3308 |
else if (WorldEdge = weWrap) then |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3309 |
begin |
15264
c70de34686ac
Add small plane sound fade-in in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15258
diff
changeset
|
3310 |
Gear^.SoundChannel := LoopSound(sndPlane, 500); |
15254
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3311 |
Gear^.Karma := 0; |
b189d6a2ecda
Cleanup gtAirAttack behaviour in weWrap
Wuzzy <Wuzzy2@mail.ru>
parents:
15253
diff
changeset
|
3312 |
end |
15251
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3313 |
else |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3314 |
begin |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3315 |
Gear^.SoundChannel := LoopSound(sndPlane, 4000); |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3316 |
Gear^.Karma := 0; |
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3317 |
end; |
4956
48e1f9a04c28
usound: added function for loops with fade in and out
koda
parents:
4886
diff
changeset
|
3318 |
|
15699 | 3319 |
if (GameFlags and gfInfAttack) = 0 then |
3320 |
FollowGear:= Gear; |
|
3321 |
||
263 | 3322 |
end; |
3323 |
||
3324 |
//////////////////////////////////////////////////////////////////////////////// |
|
3325 |
||
3326 |
procedure doStepAirBomb(Gear: PGear); |
|
3327 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3328 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3329 |
doStepFallingGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3330 |
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
|
3331 |
begin |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
3332 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
9954 | 3333 |
{$IFNDEF PAS2C} |
8204 | 3334 |
with mobileRecord do |
3335 |
if (performRumble <> nil) and (not fastUntilLag) then |
|
3336 |
performRumble(kSystemSoundID_Vibrate); |
|
9954 | 3337 |
{$ENDIF} |
14575 | 3338 |
DeleteGear(Gear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3339 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3340 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3341 |
if (GameTicks and $3F) = 0 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3342 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace) |
211 | 3343 |
end; |
409 | 3344 |
|
3345 |
//////////////////////////////////////////////////////////////////////////////// |
|
3346 |
||
3347 |
procedure doStepGirder(Gear: PGear); |
|
8795 | 3348 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3349 |
HHGear: PGear; |
1915 | 3350 |
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
|
3351 |
rx: LongInt; |
9768
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9767
diff
changeset
|
3352 |
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
|
3353 |
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
|
3354 |
distFail: boolean; |
409 | 3355 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3356 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3357 |
|
4365 | 3358 |
HHGear := Gear^.Hedgehog^.Gear; |
5612
2638dec1b323
This really should have been a TPoint for consistency
nemo
parents:
5606
diff
changeset
|
3359 |
tx := int2hwFloat(Gear^.Target.X); |
2638dec1b323
This really should have been a TPoint for consistency
nemo
parents:
5606
diff
changeset
|
3360 |
ty := int2hwFloat(Gear^.Target.Y); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3361 |
x := HHGear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3362 |
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
|
3363 |
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
|
3364 |
|
9768
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9767
diff
changeset
|
3365 |
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
|
3366 |
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
|
3367 |
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
|
3368 |
|
11057
adb5ef54da54
global variable for defining construction distance limit. value smaller 1 means no limit (wip)
sheepluva
parents:
11046
diff
changeset
|
3369 |
distFail:= (cBuildMaxDist > 0) and ((hwRound(Distance(tx - x, ty - y)) > cBuildMaxDist) 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
|
3370 |
( |
11057
adb5ef54da54
global variable for defining construction distance limit. value smaller 1 means no limit (wip)
sheepluva
parents:
11046
diff
changeset
|
3371 |
(hwRound(Distance(tx - int2hwFloat(rightX+(rx-leftX)), ty - y)) > cBuildMaxDist) and |
adb5ef54da54
global variable for defining construction distance limit. value smaller 1 means no limit (wip)
sheepluva
parents:
11046
diff
changeset
|
3372 |
(hwRound(Distance(tx - int2hwFloat(leftX-(rightX-rx)), ty - y)) > cBuildMaxDist) |
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
|
3373 |
))); |
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
|
3374 |
if distFail |
15323
9299f43ba0ec
disallow placing girders over airmines and moving hogs
alfadur
parents:
15318
diff
changeset
|
3375 |
or CheckGearsUnderSprite(Ammoz[Gear^.AmmoType].PosSprite, Gear^.Target.X - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Width div 2, Gear^.Target.Y - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Height div 2, Gear^.State) |
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
|
3376 |
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
|
3377 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3378 |
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
|
3379 |
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
|
3380 |
begin |
10298
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3381 |
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
|
3382 |
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
|
3383 |
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
|
3384 |
end; |
6450 | 3385 |
HHGear^.Message := HHGear^.Message and (not gmAttack); |
3386 |
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
|
3387 |
HHGear^.State := HHGear^.State or gstChooseTarget; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3388 |
isCursorVisible := true; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3389 |
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
|
3390 |
end |
8795 | 3391 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3392 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3393 |
PlaySound(sndPlaced); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3394 |
DeleteGear(Gear); |
14575 | 3395 |
AfterAttack |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3396 |
end; |
1914 | 3397 |
|
6450 | 3398 |
HHGear^.State := HHGear^.State and (not (gstAttacking or gstAttacked)); |
3399 |
HHGear^.Message := HHGear^.Message and (not gmAttack); |
|
409 | 3400 |
end; |
520 | 3401 |
|
3402 |
//////////////////////////////////////////////////////////////////////////////// |
|
525 | 3403 |
procedure doStepTeleportAfter(Gear: PGear); |
8795 | 3404 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3405 |
HHGear: PGear; |
912 | 3406 |
begin |
4365 | 3407 |
HHGear := Gear^.Hedgehog^.Gear; |
11070
f9a03078dd4f
Add some HHGear nil checks to teleport. google bug #974
nemo
parents:
11057
diff
changeset
|
3408 |
if HHGear <> nil then doStepHedgehogMoving(HHGear); |
7659 | 3409 |
// if not infattack mode wait for hedgehog finish falling to collect cases |
3410 |
if ((GameFlags and gfInfAttack) <> 0) |
|
11070
f9a03078dd4f
Add some HHGear nil checks to teleport. google bug #974
nemo
parents:
11057
diff
changeset
|
3411 |
or (HHGear = nil) |
7659 | 3412 |
or ((HHGear^.State and gstMoving) = 0) |
11070
f9a03078dd4f
Add some HHGear nil checks to teleport. google bug #974
nemo
parents:
11057
diff
changeset
|
3413 |
or (HHGear^.Damage > 0) |
15267
4aa19b21707d
Fix cursor not being disabled when teleporting hog into water
Wuzzy <Wuzzy2@mail.ru>
parents:
15265
diff
changeset
|
3414 |
or ((HHGear^.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
|
3415 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3416 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3417 |
AfterAttack |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3418 |
end |
912 | 3419 |
end; |
3420 |
||
3421 |
procedure doStepTeleportAnim(Gear: PGear); |
|
525 | 3422 |
begin |
11070
f9a03078dd4f
Add some HHGear nil checks to teleport. google bug #974
nemo
parents:
11057
diff
changeset
|
3423 |
if (Gear^.Hedgehog^.Gear = nil) or (Gear^.Hedgehog^.Gear^.Damage > 0) then |
7659 | 3424 |
begin |
3425 |
DeleteGear(Gear); |
|
3426 |
AfterAttack; |
|
14577 | 3427 |
exit |
7659 | 3428 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3429 |
inc(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3430 |
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
|
3431 |
begin |
3454
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 |
inc(Gear^.Pos); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3434 |
if Gear^.Pos = 11 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3435 |
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
|
3436 |
end; |
525 | 3437 |
end; |
520 | 3438 |
|
3439 |
procedure doStepTeleport(Gear: PGear); |
|
8795 | 3440 |
var |
10298
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3441 |
lx, ty, y, oy: LongInt; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3442 |
HHGear : PGear; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3443 |
valid : Boolean; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3444 |
warn : PVisualGear; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3445 |
const |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3446 |
ytol = cHHRadius; |
520 | 3447 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3448 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3449 |
|
4365 | 3450 |
HHGear := Gear^.Hedgehog^.Gear; |
11070
f9a03078dd4f
Add some HHGear nil checks to teleport. google bug #974
nemo
parents:
11057
diff
changeset
|
3451 |
if HHGear = nil then |
f9a03078dd4f
Add some HHGear nil checks to teleport. google bug #974
nemo
parents:
11057
diff
changeset
|
3452 |
begin |
f9a03078dd4f
Add some HHGear nil checks to teleport. google bug #974
nemo
parents:
11057
diff
changeset
|
3453 |
DeleteGear(Gear); |
f9a03078dd4f
Add some HHGear nil checks to teleport. google bug #974
nemo
parents:
11057
diff
changeset
|
3454 |
exit |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
3455 |
end; |
10298
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3456 |
|
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3457 |
valid:= false; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3458 |
|
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3459 |
lx:= Gear^.Target.X - SpritesData[sprHHTelepMask].Width div 2; // left |
12789
28782e03b8f0
Fix CheckWorldWrap not correctly checking for bounce edge. Also fix teleport @ bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12764
diff
changeset
|
3460 |
if WorldEdge <> weBounce then |
28782e03b8f0
Fix CheckWorldWrap not correctly checking for bounce edge. Also fix teleport @ bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12764
diff
changeset
|
3461 |
lx:= CalcWorldWrap(lx, SpritesData[sprHHTelepMask].Width div 2); // Take world edge into account |
10298
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3462 |
ty:= Gear^.Target.Y - SpritesData[sprHHTelepMask].Height div 2; // top |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3463 |
|
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3464 |
// remember original target location |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3465 |
oy:= Gear^.Target.Y; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3466 |
|
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3467 |
for y:= ty downto ty - ytol do |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3468 |
begin |
10897
8ea636ce120a
Add options to set colouring, behind existing land, and horizontal/vertical flipping to PlaceSprite
nemo
parents:
10895
diff
changeset
|
3469 |
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
|
3470 |
begin |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3471 |
valid:= true; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3472 |
break; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3473 |
end; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3474 |
dec(Gear^.Target.Y); |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3475 |
end; |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3476 |
|
12789
28782e03b8f0
Fix CheckWorldWrap not correctly checking for bounce edge. Also fix teleport @ bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12764
diff
changeset
|
3477 |
if (WorldEdge = weBounce) and ((Gear^.Target.X < LeftX) or (Gear^.Target.X > RightX)) then |
28782e03b8f0
Fix CheckWorldWrap not correctly checking for bounce edge. Also fix teleport @ bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12764
diff
changeset
|
3478 |
valid:= false; |
28782e03b8f0
Fix CheckWorldWrap not correctly checking for bounce edge. Also fix teleport @ bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12764
diff
changeset
|
3479 |
|
10298
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3480 |
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
|
3481 |
begin |
6450 | 3482 |
HHGear^.Message := HHGear^.Message and (not gmAttack); |
3483 |
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
|
3484 |
HHGear^.State := HHGear^.State or gstChooseTarget; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3485 |
isCursorVisible := true; |
10298
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3486 |
warn:= AddVisualGear(Gear^.Target.X, oy, vgtNoPlaceWarn, 0, true); |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3487 |
if warn <> nil then |
7d5d93f9a515
make using the teleporter a bit less challenging
sheepluva
parents:
10286
diff
changeset
|
3488 |
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
|
3489 |
DeleteGear(Gear); |
7111b4a46b5c
fix for Issue 855: Failure to teleport rarely makes engine crash
sheepluva
parents:
10663
diff
changeset
|
3490 |
PlaySound(sndDenied); |
7111b4a46b5c
fix for Issue 855: Failure to teleport rarely makes engine crash
sheepluva
parents:
10663
diff
changeset
|
3491 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3492 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3493 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3494 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3495 |
DeleteCI(HHGear); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3496 |
SetAllHHToActive; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3497 |
Gear^.doStep := @doStepTeleportAnim; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3498 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3499 |
// 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
|
3500 |
Gear^.dX := HHGear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3501 |
// 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
|
3502 |
HHGear^.dX.isNegative := (Gear^.X.QWordValue <> 0); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3503 |
Gear^.X := HHGear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3504 |
Gear^.Y := HHGear^.Y; |
5612
2638dec1b323
This really should have been a TPoint for consistency
nemo
parents:
5606
diff
changeset
|
3505 |
HHGear^.X := int2hwFloat(Gear^.Target.X); |
2638dec1b323
This really should have been a TPoint for consistency
nemo
parents:
5606
diff
changeset
|
3506 |
HHGear^.Y := int2hwFloat(Gear^.Target.Y); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3507 |
HHGear^.State := HHGear^.State or gstMoving; |
10547
cc439790ebae
fix for Issue 828: Manual placement animation is drawn twice
sheepluva
parents:
10545
diff
changeset
|
3508 |
if not Gear^.Hedgehog^.Unplaced then |
cc439790ebae
fix for Issue 828: Manual placement animation is drawn twice
sheepluva
parents:
10545
diff
changeset
|
3509 |
Gear^.State:= Gear^.State or gstAnimation; |
7659 | 3510 |
Gear^.Hedgehog^.Unplaced := false; |
3511 |
isCursorVisible := false; |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3512 |
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
|
3513 |
end; |
5612
2638dec1b323
This really should have been a TPoint for consistency
nemo
parents:
5606
diff
changeset
|
3514 |
Gear^.Target.X:= NoPointX |
520 | 3515 |
end; |
534 | 3516 |
|
3517 |
//////////////////////////////////////////////////////////////////////////////// |
|
3518 |
procedure doStepSwitcherWork(Gear: PGear); |
|
8795 | 3519 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3520 |
HHGear: PGear; |
7341
d70478d265ec
Fix crash when hedgehog dies while switching from it
unc0rr
parents:
7339
diff
changeset
|
3521 |
hedgehog: PHedgehog; |
6992 | 3522 |
State: Longword; |
10494 | 3523 |
switchDir: Longword; |
14997 | 3524 |
oldUid: Longword; |
534 | 3525 |
begin |
15873
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
3526 |
if CurrentHedgehog^.Gear = nil then |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
3527 |
begin |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
3528 |
DeleteGear(Gear); |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
3529 |
exit |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
3530 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3531 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3532 |
|
10145
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
3533 |
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
|
3534 |
begin |
7341
d70478d265ec
Fix crash when hedgehog dies while switching from it
unc0rr
parents:
7339
diff
changeset
|
3535 |
hedgehog := Gear^.Hedgehog; |
d70478d265ec
Fix crash when hedgehog dies while switching from it
unc0rr
parents:
7339
diff
changeset
|
3536 |
ApplyAmmoChanges(hedgehog^); |
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 |
HHGear := CurrentHedgehog^.Gear; |
4372 | 3539 |
ApplyAmmoChanges(HHGear^.Hedgehog^); |
14575 | 3540 |
DeleteGear(Gear); |
15348
2196aa902d2d
Fix switching arrows overlapping with hog tags of own hog (while finger is active)
Wuzzy <Wuzzy2@mail.ru>
parents:
15323
diff
changeset
|
3541 |
bShowSwitcher:= false; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3542 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3543 |
end; |
534 | 3544 |
|
15155
0e0b5fc1674e
Fix floating hog when switching to moving hog
Wuzzy <Wuzzy2@mail.ru>
parents:
15072
diff
changeset
|
3545 |
HHGear := CurrentHedgehog^.Gear; |
3894 | 3546 |
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
|
3547 |
begin |
14997 | 3548 |
oldUid:= HHGear^.uid; |
6450 | 3549 |
HHGear^.Message := HHGear^.Message and (not gmSwitch); |
3550 |
Gear^.Message := Gear^.Message and (not gmSwitch); |
|
10145
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
3551 |
|
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
3552 |
// switching in reverse direction |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
3553 |
if (Gear^.Message and gmPrecise) <> 0 then |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
3554 |
begin |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
3555 |
HHGear^.Message := HHGear^.Message and (not gmPrecise); |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
3556 |
switchDir:= CurrentTeam^.HedgehogsNumber - 1; |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
3557 |
end |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
3558 |
else |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
3559 |
switchDir:= 1; |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
3560 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3561 |
State := HHGear^.State; |
15155
0e0b5fc1674e
Fix floating hog when switching to moving hog
Wuzzy <Wuzzy2@mail.ru>
parents:
15072
diff
changeset
|
3562 |
if (HHGear^.State and gstMoving) = 0 then |
0e0b5fc1674e
Fix floating hog when switching to moving hog
Wuzzy <Wuzzy2@mail.ru>
parents:
15072
diff
changeset
|
3563 |
HHGear^.Active := false; |
0e0b5fc1674e
Fix floating hog when switching to moving hog
Wuzzy <Wuzzy2@mail.ru>
parents:
15072
diff
changeset
|
3564 |
HHGear^.State := HHGear^.State and gstMoving; |
7400
09427dbec1d8
Fix TARDIS, make switcher work w/ the new more stringent check.
nemo
parents:
7399
diff
changeset
|
3565 |
HHGear^.Z := cHHZ; |
09427dbec1d8
Fix TARDIS, make switcher work w/ the new more stringent check.
nemo
parents:
7399
diff
changeset
|
3566 |
HHGear^.Message:= HHGear^.Message or gmRemoveFromList or gmAddToList; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3567 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3568 |
PlaySound(sndSwitchHog); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3569 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3570 |
repeat |
10494 | 3571 |
CurrentTeam^.CurrHedgehog := (CurrentTeam^.CurrHedgehog + switchDir) mod CurrentTeam^.HedgehogsNumber; |
8795 | 3572 |
until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) and |
3573 |
(CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear^.Damage = 0) and |
|
12679
6f05a02d43b2
Fix player being able to switch to dying hog
Wuzzy <almikes@aol.com>
parents:
12676
diff
changeset
|
3574 |
(CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear^.Health > 0) and |
6f05a02d43b2
Fix player being able to switch to dying hog
Wuzzy <almikes@aol.com>
parents:
12676
diff
changeset
|
3575 |
((CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear^.State and gstHHDeath) = 0) and |
8563
4d9d8287e601
Trying to improve rendering, sliding and thawing. Messing around w/ making fire thaw faster.
nemo
parents:
8560
diff
changeset
|
3576 |
(CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Effects[heFrozen]=0); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3577 |
|
7270
93e92e82d5c8
Step 1. Add current hedgehog as top bit of bottom byte.
nemo
parents:
7268
diff
changeset
|
3578 |
SwitchCurrentHedgehog(@CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog]); |
8795 | 3579 |
AmmoMenuInvalidated:= true; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3580 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3581 |
HHGear := CurrentHedgehog^.Gear; |
14997 | 3582 |
ScriptCall('onHogSwitch', oldUid); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3583 |
HHGear^.State := State; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3584 |
HHGear^.Active := true; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3585 |
FollowGear := HHGear; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3586 |
HHGear^.Z := cCurrHHZ; |
10145
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
3587 |
// restore precise key |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
3588 |
if (switchDir <> 1) then |
67b255f839db
allow switching through hogs in reverse order with PRECISE+HOGSWITCH
sheepluva
parents:
10135
diff
changeset
|
3589 |
HHGear^.Message:= HHGear^.Message or gmPrecise; |
7400
09427dbec1d8
Fix TARDIS, make switcher work w/ the new more stringent check.
nemo
parents:
7399
diff
changeset
|
3590 |
HHGear^.Message:= HHGear^.Message or gmRemoveFromList or gmAddToList; |
15155
0e0b5fc1674e
Fix floating hog when switching to moving hog
Wuzzy <Wuzzy2@mail.ru>
parents:
15072
diff
changeset
|
3591 |
end; |
0e0b5fc1674e
Fix floating hog when switching to moving hog
Wuzzy <Wuzzy2@mail.ru>
parents:
15072
diff
changeset
|
3592 |
doStepHedgehogMoving(HHGear); |
0e0b5fc1674e
Fix floating hog when switching to moving hog
Wuzzy <Wuzzy2@mail.ru>
parents:
15072
diff
changeset
|
3593 |
Gear^.X := HHGear^.X; |
0e0b5fc1674e
Fix floating hog when switching to moving hog
Wuzzy <Wuzzy2@mail.ru>
parents:
15072
diff
changeset
|
3594 |
Gear^.Y := HHGear^.Y |
534 | 3595 |
end; |
3596 |
||
3597 |
procedure doStepSwitcher(Gear: PGear); |
|
8795 | 3598 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3599 |
HHGear: PGear; |
534 | 3600 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3601 |
Gear^.doStep := @doStepSwitcherWork; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3602 |
|
15348
2196aa902d2d
Fix switching arrows overlapping with hog tags of own hog (while finger is active)
Wuzzy <Wuzzy2@mail.ru>
parents:
15323
diff
changeset
|
3603 |
// Note: The game assumes there's at most only one gtSwitcher gear in the game. |
2196aa902d2d
Fix switching arrows overlapping with hog tags of own hog (while finger is active)
Wuzzy <Wuzzy2@mail.ru>
parents:
15323
diff
changeset
|
3604 |
bShowSwitcher:= true; |
2196aa902d2d
Fix switching arrows overlapping with hog tags of own hog (while finger is active)
Wuzzy <Wuzzy2@mail.ru>
parents:
15323
diff
changeset
|
3605 |
|
4365 | 3606 |
HHGear := Gear^.Hedgehog^.Gear; |
5358 | 3607 |
OnUsedAmmo(HHGear^.Hedgehog^); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3608 |
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
|
3609 |
begin |
6450 | 3610 |
State := State and (not gstAttacking); |
13825
096cc009e0b8
Clear gmSwitch before activating switcher
Wuzzy <Wuzzy2@mail.ru>
parents:
13806
diff
changeset
|
3611 |
Message := Message and (not (gmAttack 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
|
3612 |
end |
534 | 3613 |
end; |
924 | 3614 |
|
3615 |
//////////////////////////////////////////////////////////////////////////////// |
|
3616 |
procedure doStepMortar(Gear: PGear); |
|
8795 | 3617 |
var |
8413
454191defee6
restore former cluster behaviour (makes the most diff for the bomb)
nemo
parents:
8370
diff
changeset
|
3618 |
dX, dY, gdX, gdY: hwFloat; |
924 | 3619 |
i: LongInt; |
3620 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3621 |
AllInactive := false; |
8945
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
3622 |
gdX := Gear^.dX; |
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
3623 |
gdY := Gear^.dY; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3624 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3625 |
doStepFallingGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3626 |
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
|
3627 |
begin |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
3628 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
8945
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
3629 |
gdX.isNegative := not gdX.isNegative; |
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
3630 |
gdY.isNegative := not gdY.isNegative; |
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
3631 |
gdX:= gdX*_0_2; |
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
3632 |
gdY:= gdY*_0_2; |
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
3633 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3634 |
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
|
3635 |
begin |
8945
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
3636 |
dX := gdX + rndSign(GetRandomf) * _0_03; |
145bf64a9579
this should improve consistency of mortar cluster spread and snowball knocks
nemo
parents:
8934
diff
changeset
|
3637 |
dY := gdY + rndSign(GetRandomf) * _0_03; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3638 |
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
|
3639 |
end; |
2376 | 3640 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3641 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3642 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3643 |
end; |
963 | 3644 |
|
15251
4576e41c0692
Add air plane underwater sound and add water splashes
Wuzzy <Wuzzy2@mail.ru>
parents:
15250
diff
changeset
|
3645 |
// particles |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3646 |
if (GameTicks and $3F) = 0 then |
10352 | 3647 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace); |
924 | 3648 |
end; |
984 | 3649 |
|
3650 |
//////////////////////////////////////////////////////////////////////////////// |
|
3651 |
procedure doStepKamikazeWork(Gear: PGear); |
|
8795 | 3652 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3653 |
i: LongWord; |
984 | 3654 |
HHGear: PGear; |
5866
9017a0ff4201
aaaallways, I want to beeee with you, and make belieeeeve with you
nemo
parents:
5841
diff
changeset
|
3655 |
sparkles: PVisualGear; |
5913 | 3656 |
hasWishes: boolean; |
12169
869cf5f34700
More ticker messages: Sick, king died, resurrect, time box return, timeout, kamikaze
Wuzzy <almikes@aol.com>
parents:
12120
diff
changeset
|
3657 |
s: ansistring; |
984 | 3658 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3659 |
AllInactive := false; |
5913 | 3660 |
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
|
3661 |
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
|
3662 |
Gear^.AdvBounce:= 1; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3663 |
|
4365 | 3664 |
HHGear := Gear^.Hedgehog^.Gear; |
7958 | 3665 |
if HHGear = nil then |
3666 |
begin |
|
14028 | 3667 |
ClearHitOrder(); |
3668 |
ClearProximityCache(); |
|
7958 | 3669 |
DeleteGear(Gear); |
3670 |
exit |
|
3671 |
end; |
|
3672 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3673 |
HHGear^.State := HHGear^.State or gstNoDamage; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3674 |
DeleteCI(HHGear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3675 |
|
3852 | 3676 |
Gear^.X := HHGear^.X; |
3677 |
Gear^.Y := HHGear^.Y; |
|
5913 | 3678 |
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
|
3679 |
begin |
9017a0ff4201
aaaallways, I want to beeee with you, and make belieeeeve with you
nemo
parents:
5841
diff
changeset
|
3680 |
sparkles:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtDust, 1); |
6131 | 3681 |
if sparkles <> nil then |
5924
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
3682 |
begin |
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
3683 |
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
|
3684 |
sparkles^.Angle:= random(360); |
5924
82fc26c53d2a
Tweak sparkles, glass. Left glass commented out in case he prefers old behaviour.
nemo
parents:
5922
diff
changeset
|
3685 |
end |
5866
9017a0ff4201
aaaallways, I want to beeee with you, and make belieeeeve with you
nemo
parents:
5841
diff
changeset
|
3686 |
end; |
3852 | 3687 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3688 |
i := 2; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3689 |
repeat |
8795 | 3690 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3691 |
Gear^.X := Gear^.X + HHGear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3692 |
Gear^.Y := Gear^.Y + HHGear^.dY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3693 |
HHGear^.X := Gear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3694 |
HHGear^.Y := Gear^.Y; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3695 |
|
10354 | 3696 |
// check for drowning |
3697 |
if CheckGearDrowning(HHGear) then |
|
3698 |
begin |
|
3699 |
AfterAttack; |
|
14028 | 3700 |
ClearHitOrder(); |
3701 |
ClearProximityCache(); |
|
10354 | 3702 |
DeleteGear(Gear); |
3703 |
exit; |
|
3704 |
end; |
|
3705 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3706 |
inc(Gear^.Damage, 2); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3707 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3708 |
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
|
3709 |
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
|
3710 |
or (Gear^.Damage > Gear^.Health); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3711 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3712 |
inc(upd); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3713 |
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
|
3714 |
begin |
5913 | 3715 |
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
|
3716 |
begin |
5913 | 3717 |
if Gear^.AdvBounce <> 0 then |
3718 |
Gear^.Pos := 3 |
|
3719 |
else |
|
3720 |
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
|
3721 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3722 |
|
14028 | 3723 |
AmmoShoveCache(Gear, Gear^.Boom, 40); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3724 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3725 |
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
|
3726 |
HHGear^.Y - _2 - HHGear^.dY * 10 + hwAbs(HHGear^.dY) * 2, |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3727 |
HHGear^.dX, |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3728 |
HHGear^.dY, |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3729 |
20 + cHHRadius * 2, |
6130 | 3730 |
cHHRadius * 2 + 7); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3731 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3732 |
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
|
3733 |
end; |
984 | 3734 |
|
14028 | 3735 |
inc(Gear^.Timer); |
3736 |
if (Gear^.Timer mod 100) = 0 then |
|
3737 |
RefillProximityCache(Gear, 300); |
|
3738 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3739 |
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
|
3740 |
begin |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
3741 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
6112
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3742 |
if hasWishes then |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3743 |
for i:= 0 to 31 do |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3744 |
begin |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3745 |
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
|
3746 |
if sparkles <> nil then |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3747 |
with sparkles^ do |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3748 |
begin |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3749 |
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
|
3750 |
Angle:= random(360); |
6112
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3751 |
dx:= 0.001 * (random(200)); |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3752 |
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
|
3753 |
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
|
3754 |
dx := -dx; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3755 |
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
|
3756 |
dy := -dy; |
6112
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3757 |
FrameTicks:= random(400) + 250 |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3758 |
end |
7839a2ae90ae
Restrict slipperiness to girders and bridges. Make girders more obviously ice.
nemo
parents:
6092
diff
changeset
|
3759 |
end; |
12169
869cf5f34700
More ticker messages: Sick, king died, resurrect, time box return, timeout, kamikaze
Wuzzy <almikes@aol.com>
parents:
12120
diff
changeset
|
3760 |
s:= ansistring(Gear^.Hedgehog^.Name); |
13642
3d14950641a4
Refactor text color variable names, export 2 color values to Lua
Wuzzy <Wuzzy2@mail.ru>
parents:
13640
diff
changeset
|
3761 |
AddCaption(FormatA(GetEventString(eidKamikaze), s), capcolDefault, capgrpMessage); |
12292
93434ab299a0
Take sacrifices into account for the “Stupid” taunt
Wuzzy <almikes@aol.com>
parents:
12277
diff
changeset
|
3762 |
uStats.HedgehogSacrificed(Gear^.Hedgehog); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3763 |
AfterAttack; |
7395 | 3764 |
HHGear^.Message:= HHGear^.Message or gmDestroy; |
14028 | 3765 |
ClearHitOrder(); |
3766 |
ClearProximityCache(); |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3767 |
DeleteGear(Gear); |
12837 | 3768 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3769 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
3770 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3771 |
dec(Gear^.Health, Gear^.Damage); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3772 |
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
|
3773 |
end |
984 | 3774 |
end; |
3775 |
||
987 | 3776 |
procedure doStepKamikazeIdle(Gear: PGear); |
15217
a0bb57d3d272
Fix buggy kamikaze when hog took damage during short waiting phase at start
Wuzzy <Wuzzy2@mail.ru>
parents:
15202
diff
changeset
|
3777 |
var HHGear: PGear; |
987 | 3778 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3779 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3780 |
dec(Gear^.Timer); |
15217
a0bb57d3d272
Fix buggy kamikaze when hog took damage during short waiting phase at start
Wuzzy <Wuzzy2@mail.ru>
parents:
15202
diff
changeset
|
3781 |
HHGear := Gear^.Hedgehog^.Gear; |
a0bb57d3d272
Fix buggy kamikaze when hog took damage during short waiting phase at start
Wuzzy <Wuzzy2@mail.ru>
parents:
15202
diff
changeset
|
3782 |
if (HHGear = nil) or (HHGear^.Damage <> 0) then |
a0bb57d3d272
Fix buggy kamikaze when hog took damage during short waiting phase at start
Wuzzy <Wuzzy2@mail.ru>
parents:
15202
diff
changeset
|
3783 |
begin |
a0bb57d3d272
Fix buggy kamikaze when hog took damage during short waiting phase at start
Wuzzy <Wuzzy2@mail.ru>
parents:
15202
diff
changeset
|
3784 |
if (HHGear <> nil) then |
a0bb57d3d272
Fix buggy kamikaze when hog took damage during short waiting phase at start
Wuzzy <Wuzzy2@mail.ru>
parents:
15202
diff
changeset
|
3785 |
AfterAttack; |
a0bb57d3d272
Fix buggy kamikaze when hog took damage during short waiting phase at start
Wuzzy <Wuzzy2@mail.ru>
parents:
15202
diff
changeset
|
3786 |
ClearHitOrder(); |
a0bb57d3d272
Fix buggy kamikaze when hog took damage during short waiting phase at start
Wuzzy <Wuzzy2@mail.ru>
parents:
15202
diff
changeset
|
3787 |
ClearProximityCache(); |
a0bb57d3d272
Fix buggy kamikaze when hog took damage during short waiting phase at start
Wuzzy <Wuzzy2@mail.ru>
parents:
15202
diff
changeset
|
3788 |
DeleteGear(Gear); |
a0bb57d3d272
Fix buggy kamikaze when hog took damage during short waiting phase at start
Wuzzy <Wuzzy2@mail.ru>
parents:
15202
diff
changeset
|
3789 |
exit; |
a0bb57d3d272
Fix buggy kamikaze when hog took damage during short waiting phase at start
Wuzzy <Wuzzy2@mail.ru>
parents:
15202
diff
changeset
|
3790 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3791 |
if Gear^.Timer = 0 then |
5922 | 3792 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3793 |
Gear^.Pos := 1; |
7053 | 3794 |
PlaySoundV(sndKamikaze, Gear^.Hedgehog^.Team^.voicepack); |
14028 | 3795 |
ClearHitOrder(); |
3796 |
RefillProximityCache(Gear, 300); |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3797 |
Gear^.doStep := @doStepKamikazeWork |
5922 | 3798 |
end |
987 | 3799 |
end; |
3800 |
||
984 | 3801 |
procedure doStepKamikaze(Gear: PGear); |
8795 | 3802 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3803 |
HHGear: PGear; |
984 | 3804 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3805 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3806 |
|
4365 | 3807 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3808 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3809 |
HHGear^.dX := Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3810 |
HHGear^.dY := Gear^.dY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3811 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3812 |
Gear^.dX := SignAs(_0_45, Gear^.dX); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3813 |
Gear^.dY := - _0_9; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3814 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3815 |
Gear^.Timer := 550; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3816 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3817 |
Gear^.doStep := @doStepKamikazeIdle |
984 | 3818 |
end; |
3819 |
||
1103 | 3820 |
//////////////////////////////////////////////////////////////////////////////// |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3821 |
|
1110 | 3822 |
procedure doStepCakeExpl(Gear: PGear); |
12745
c162995831d8
Fix cake party face not working across wrap world border
Wuzzy <Wuzzy2@mail.ru>
parents:
12744
diff
changeset
|
3823 |
var gi: PGear; |
1110 | 3824 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3825 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3826 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3827 |
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
|
3828 |
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
|
3829 |
exit; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3830 |
|
11523 | 3831 |
InCinematicMode:= false; |
12745
c162995831d8
Fix cake party face not working across wrap world border
Wuzzy <Wuzzy2@mail.ru>
parents:
12744
diff
changeset
|
3832 |
gi := GearsList; |
c162995831d8
Fix cake party face not working across wrap world border
Wuzzy <Wuzzy2@mail.ru>
parents:
12744
diff
changeset
|
3833 |
while gi <> nil do |
c162995831d8
Fix cake party face not working across wrap world border
Wuzzy <Wuzzy2@mail.ru>
parents:
12744
diff
changeset
|
3834 |
begin |
c162995831d8
Fix cake party face not working across wrap world border
Wuzzy <Wuzzy2@mail.ru>
parents:
12744
diff
changeset
|
3835 |
if gi^.Kind = gtHedgehog then |
c162995831d8
Fix cake party face not working across wrap world border
Wuzzy <Wuzzy2@mail.ru>
parents:
12744
diff
changeset
|
3836 |
gi^.State := gi^.State and (not gstLoser); |
c162995831d8
Fix cake party face not working across wrap world border
Wuzzy <Wuzzy2@mail.ru>
parents:
12744
diff
changeset
|
3837 |
gi:= gi^.NextGear; |
c162995831d8
Fix cake party face not working across wrap world border
Wuzzy <Wuzzy2@mail.ru>
parents:
12744
diff
changeset
|
3838 |
end; |
c162995831d8
Fix cake party face not working across wrap world border
Wuzzy <Wuzzy2@mail.ru>
parents:
12744
diff
changeset
|
3839 |
|
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
3840 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3841 |
AfterAttack; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3842 |
DeleteGear(Gear) |
1110 | 3843 |
end; |
3844 |
||
1109 | 3845 |
procedure doStepCakeDown(Gear: PGear); |
8795 | 3846 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3847 |
gi: PGear; |
11523 | 3848 |
dmg, dmgBase, partyEpicness, i: LongInt; |
12806 | 3849 |
fX, fY, tdX, tdY: hwFloat; |
11523 | 3850 |
sparkles: PVisualGear; |
1109 | 3851 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3852 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3853 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3854 |
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
|
3855 |
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
|
3856 |
exit; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3857 |
Gear^.Tag := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3858 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3859 |
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
|
3860 |
begin |
6765 | 3861 |
///////////// adapted from doMakeExplosion /////////////////////////// |
3862 |
fX:= int2hwFloat(hwRound(Gear^.X)); |
|
3863 |
fY:= int2hwFloat(hwRound(Gear^.Y)); |
|
12746
e1395ba033e8
Use Gear^.Boom to calculate cake party faces
Wuzzy <Wuzzy2@mail.ru>
parents:
12745
diff
changeset
|
3864 |
dmgBase:= Gear^.Boom shl 1 + cHHRadius div 2; |
11523 | 3865 |
partyEpicness:= 0; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3866 |
gi := GearsList; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3867 |
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
|
3868 |
begin |
6765 | 3869 |
if gi^.Kind = gtHedgehog then |
3870 |
begin |
|
3871 |
dmg:= 0; |
|
12806 | 3872 |
tdX:= gi^.X-fX; |
3873 |
tdY:= gi^.Y-fY; |
|
3874 |
if hwRound(hwAbs(tdX)+hwAbs(tdY)) < dmgBase then |
|
3875 |
dmg:= dmgBase - max(hwRound(Distance(tdX, tdY)),gi^.Radius); |
|
12746
e1395ba033e8
Use Gear^.Boom to calculate cake party faces
Wuzzy <Wuzzy2@mail.ru>
parents:
12745
diff
changeset
|
3876 |
if (dmg > 1) then dmg:= ModifyDamage(min(dmg div 2, Gear^.Boom), gi); |
6765 | 3877 |
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
|
3878 |
if (CurrentHedgehog^.Gear = gi) and (gi^.Hedgehog^.Effects[heInvulnerable] = 0) then |
11523 | 3879 |
begin |
3880 |
gi^.State := gi^.State or gstLoser; |
|
3881 |
// probably not too epic if hitting self too... |
|
3882 |
dec(partyEpicness, 45); |
|
3883 |
end |
|
6765 | 3884 |
else |
11523 | 3885 |
begin |
6765 | 3886 |
gi^.State := gi^.State or gstWinner; |
11523 | 3887 |
if CurrentHedgehog^.Gear = gi then |
3888 |
dec(partyEpicness, 45) |
|
3889 |
else |
|
3890 |
inc(partyEpicness); |
|
3891 |
end; |
|
6765 | 3892 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3893 |
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
|
3894 |
end; |
6765 | 3895 |
////////////////////////////////////////////////////////////////////// |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3896 |
Gear^.doStep := @doStepCakeExpl; |
11530 | 3897 |
if (partyEpicness > 6) and (abs(90 - abs(trunc(Gear^.DirAngle))) < 20) then |
11523 | 3898 |
begin |
3899 |
for i := 0 to (2 * partyEpicness) do |
|
3900 |
begin |
|
3901 |
sparkles:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtEgg, 1); |
|
3902 |
if sparkles <> nil then |
|
3903 |
begin |
|
3904 |
sparkles^.dX:= 0.008 * (random(100) - 50); |
|
3905 |
sparkles^.dY:= -0.3 + 0.002 * (random(100) - 50); |
|
3906 |
sparkles^.Tint:= ((random(210)+45) shl 24) or ((random(210)+45) shl 16) or ((random(210)+45) shl 8) or $FF; |
|
3907 |
sparkles^.Angle:= random(360); |
|
3908 |
end |
|
3909 |
end; |
|
3910 |
InCinematicMode:= true; |
|
3911 |
end; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3912 |
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
|
3913 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3914 |
else dec(Gear^.Pos) |
1109 | 3915 |
end; |
3916 |
||
3917 |
||
11531 | 3918 |
procedure doStepCakeWalk(Gear: PGear); |
7370
d50b874e7ee8
Introduce uGearsHandlers.pas, for now only part of cake handlers is moved there
unc0rr
parents:
7341
diff
changeset
|
3919 |
var |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
3920 |
tdx, tdy: hwFloat; |
10874
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
3921 |
cakeData: PCakeData; |
13608
92b87845beeb
Fix cake rotation angle after bounce from bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13607
diff
changeset
|
3922 |
i: Longword; |
1088 | 3923 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3924 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3925 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3926 |
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
|
3927 |
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
|
3928 |
exit; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
3929 |
|
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
|
3930 |
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
|
3931 |
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
|
3932 |
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
|
3933 |
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
|
3934 |
// This is not seconds, but at least it is *some* feedback |
12641
f30b70976577
Fix cake taking >200s to explode when it's completely stuck and can't move (bug 194)
Wuzzy <almikes@aol.com>
parents:
12621
diff
changeset
|
3935 |
if (Gear^.Health <= 0) or ((Gear^.Message and gmAttack) <> 0) then |
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
|
3936 |
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
|
3937 |
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
|
3938 |
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
|
3939 |
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
|
3940 |
exit |
10875 | 3941 |
end |
3942 |
else if Gear^.Timer < 6000 then |
|
3943 |
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
|
3944 |
|
9969 | 3945 |
if not cakeStep(Gear) then Gear^.doStep:= @doStepCakeFall; |
1103 | 3946 |
|
13614
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3947 |
// Cake passed world edge. |
13607
212036414957
Make cake bounce off bounce edge, stop cake at wrap edge to prevent other bug
Wuzzy <Wuzzy2@mail.ru>
parents:
13605
diff
changeset
|
3948 |
if (Gear^.Karma = 1) then |
13614
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3949 |
(* This code is not ideal, but at least not horribly broken. |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3950 |
The cake tries to reach the other side and continue to walk, |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3951 |
but there are some exceptions. |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3952 |
This code is called *after* the X coordinate have been wrapped. |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3953 |
Depending on terrain on the other side, the cake does this: |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3954 |
* Cake collides horizontally (even by 1 pixel): Turn around |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3955 |
* Cake does not see walkable ground above or below: Fall |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3956 |
* Otherwise: Walk normally |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3957 |
*) |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3958 |
begin |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3959 |
// Update coordinates |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3960 |
tdx:=Gear^.X; |
14303
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
14225
diff
changeset
|
3961 |
if (hwRound(Gear^.X) < leftX) then |
13614
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3962 |
Gear^.X:= Gear^.X + int2hwfloat(rightX - leftX) |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3963 |
else Gear^.X:= Gear^.X - int2hwfloat(rightX - leftX); |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3964 |
|
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3965 |
Gear^.Tag:= 0; |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3966 |
if ((TestCollisionXwithGear(Gear, 1) <> 0) or (TestCollisionXwithGear(Gear, -1) <> 0)) then |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3967 |
// Cake collided horizontally, turn around. Prevents cake from being stuck in infinite loop. |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3968 |
// This can also happen if the terrain is just a slight slope. :-( |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3969 |
begin |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3970 |
Gear^.X := tdx; |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3971 |
Gear^.Karma := 3; |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3972 |
end |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3973 |
else |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3974 |
begin |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3975 |
// Check if cake has something to walk on the other side. If not, make it drop. |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3976 |
// There is nothing for the cake to stand on. |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3977 |
if (TestCollisionYwithGear(Gear, 1) = 0) and (TestCollisionYwithGear(Gear, -1) = 0) then |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3978 |
Gear^.doStep:= @doStepCakeFall; |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3979 |
Gear^.Karma := 4; |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3980 |
end; |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3981 |
end; |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3982 |
// Cake bounced! |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3983 |
if (Gear^.Karma = 2) or (Gear^.Karma = 3) then |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3984 |
begin |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3985 |
// Turn cake around |
13607
212036414957
Make cake bounce off bounce edge, stop cake at wrap edge to prevent other bug
Wuzzy <Wuzzy2@mail.ru>
parents:
13605
diff
changeset
|
3986 |
Gear^.dX.isNegative := (not Gear^.dX.isNegative); |
212036414957
Make cake bounce off bounce edge, stop cake at wrap edge to prevent other bug
Wuzzy <Wuzzy2@mail.ru>
parents:
13605
diff
changeset
|
3987 |
Gear^.WDTimer := 0; |
212036414957
Make cake bounce off bounce edge, stop cake at wrap edge to prevent other bug
Wuzzy <Wuzzy2@mail.ru>
parents:
13605
diff
changeset
|
3988 |
Gear^.Angle := (LongInt(Gear^.Angle) + 2) and 3; |
13608
92b87845beeb
Fix cake rotation angle after bounce from bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13607
diff
changeset
|
3989 |
|
13609
13f68f3e7153
Add bounce effect to cake when it touches bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13608
diff
changeset
|
3990 |
// Bounce effect |
14595
6e5cda26f676
Tweak bounce effects of some gears
Wuzzy <Wuzzy2@mail.ru>
parents:
14593
diff
changeset
|
3991 |
if (Gear^.Karma = 2) then |
13609
13f68f3e7153
Add bounce effect to cake when it touches bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13608
diff
changeset
|
3992 |
AddBounceEffectForGear(Gear, 0.55); |
13f68f3e7153
Add bounce effect to cake when it touches bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13608
diff
changeset
|
3993 |
|
13614
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3994 |
Gear^.Tag:= 0; |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3995 |
Gear^.Karma := 4; |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3996 |
end; |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3997 |
if (Gear^.Karma = 4) then |
c9642782778b
Fix cake walking through land when reaching wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13613
diff
changeset
|
3998 |
begin |
13608
92b87845beeb
Fix cake rotation angle after bounce from bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13607
diff
changeset
|
3999 |
// Reset CakePoints to fix cake angle |
92b87845beeb
Fix cake rotation angle after bounce from bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13607
diff
changeset
|
4000 |
cakeData:= PCakeData(Gear^.Data); |
92b87845beeb
Fix cake rotation angle after bounce from bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13607
diff
changeset
|
4001 |
with cakeData^ do |
92b87845beeb
Fix cake rotation angle after bounce from bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13607
diff
changeset
|
4002 |
begin |
92b87845beeb
Fix cake rotation angle after bounce from bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13607
diff
changeset
|
4003 |
for i:= 0 to Pred(cakeh) do |
92b87845beeb
Fix cake rotation angle after bounce from bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13607
diff
changeset
|
4004 |
begin |
92b87845beeb
Fix cake rotation angle after bounce from bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13607
diff
changeset
|
4005 |
CakePoints[i].x := Gear^.X; |
92b87845beeb
Fix cake rotation angle after bounce from bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13607
diff
changeset
|
4006 |
CakePoints[i].y := Gear^.Y; |
92b87845beeb
Fix cake rotation angle after bounce from bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13607
diff
changeset
|
4007 |
end; |
92b87845beeb
Fix cake rotation angle after bounce from bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13607
diff
changeset
|
4008 |
CakeI:= 0; |
92b87845beeb
Fix cake rotation angle after bounce from bounce edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13607
diff
changeset
|
4009 |
end; |
13607
212036414957
Make cake bounce off bounce edge, stop cake at wrap edge to prevent other bug
Wuzzy <Wuzzy2@mail.ru>
parents:
13605
diff
changeset
|
4010 |
Gear^.Karma := 0; |
212036414957
Make cake bounce off bounce edge, stop cake at wrap edge to prevent other bug
Wuzzy <Wuzzy2@mail.ru>
parents:
13605
diff
changeset
|
4011 |
end; |
212036414957
Make cake bounce off bounce edge, stop cake at wrap edge to prevent other bug
Wuzzy <Wuzzy2@mail.ru>
parents:
13605
diff
changeset
|
4012 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4013 |
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
|
4014 |
begin |
10874
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
4015 |
cakeData:= PCakeData(Gear^.Data); |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
4016 |
with cakeData^ do |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
4017 |
begin |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
4018 |
CakeI := (CakeI + 1) mod cakeh; |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
4019 |
tdx := CakePoints[CakeI].x - Gear^.X; |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
4020 |
tdy := - CakePoints[CakeI].y + Gear^.Y; |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
4021 |
CakePoints[CakeI].x := Gear^.X; |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
4022 |
CakePoints[CakeI].y := Gear^.Y; |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
4023 |
Gear^.DirAngle := DxDy2Angle(tdx, tdy); |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
4024 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4025 |
end; |
1088 | 4026 |
end; |
1089 | 4027 |
|
1103 | 4028 |
procedure doStepCakeUp(Gear: PGear); |
8795 | 4029 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4030 |
i: Longword; |
10874
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
4031 |
cakeData: PCakeData; |
1103 | 4032 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4033 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4034 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4035 |
inc(Gear^.Tag); |
12641
f30b70976577
Fix cake taking >200s to explode when it's completely stuck and can't move (bug 194)
Wuzzy <almikes@aol.com>
parents:
12621
diff
changeset
|
4036 |
// Animation delay. Skipped if cake only dropped a very short distance. |
f30b70976577
Fix cake taking >200s to explode when it's completely stuck and can't move (bug 194)
Wuzzy <almikes@aol.com>
parents:
12621
diff
changeset
|
4037 |
if (Gear^.Tag < 100) and (Gear^.FlightTime > 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
|
4038 |
exit; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4039 |
Gear^.Tag := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4040 |
|
12641
f30b70976577
Fix cake taking >200s to explode when it's completely stuck and can't move (bug 194)
Wuzzy <almikes@aol.com>
parents:
12621
diff
changeset
|
4041 |
if (Gear^.Pos = 6) or (Gear^.FlightTime <= 1) then |
f30b70976577
Fix cake taking >200s to explode when it's completely stuck and can't move (bug 194)
Wuzzy <almikes@aol.com>
parents:
12621
diff
changeset
|
4042 |
begin |
f30b70976577
Fix cake taking >200s to explode when it's completely stuck and can't move (bug 194)
Wuzzy <almikes@aol.com>
parents:
12621
diff
changeset
|
4043 |
Gear^.Pos := 6; |
10874
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
4044 |
cakeData:= PCakeData(Gear^.Data); |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
4045 |
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
|
4046 |
begin |
10874
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
4047 |
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
|
4048 |
begin |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
4049 |
CakePoints[i].x := Gear^.X; |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
4050 |
CakePoints[i].y := Gear^.Y |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
4051 |
end; |
059a6492176e
allow gear specific data (with gear type specific type). applied to cake
sheepluva
parents:
10831
diff
changeset
|
4052 |
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
|
4053 |
end; |
12641
f30b70976577
Fix cake taking >200s to explode when it's completely stuck and can't move (bug 194)
Wuzzy <almikes@aol.com>
parents:
12621
diff
changeset
|
4054 |
(* This is called frequently if the cake is completely stuck. |
f30b70976577
Fix cake taking >200s to explode when it's completely stuck and can't move (bug 194)
Wuzzy <almikes@aol.com>
parents:
12621
diff
changeset
|
4055 |
With this a stuck cake takes equally long to explode then |
f30b70976577
Fix cake taking >200s to explode when it's completely stuck and can't move (bug 194)
Wuzzy <almikes@aol.com>
parents:
12621
diff
changeset
|
4056 |
a normal cake. Removing this code just makes the cake walking |
f30b70976577
Fix cake taking >200s to explode when it's completely stuck and can't move (bug 194)
Wuzzy <almikes@aol.com>
parents:
12621
diff
changeset
|
4057 |
for a few seconds longer. *) |
f30b70976577
Fix cake taking >200s to explode when it's completely stuck and can't move (bug 194)
Wuzzy <almikes@aol.com>
parents:
12621
diff
changeset
|
4058 |
if (Gear^.FlightTime <= 1) and (Gear^.Health > 2) then |
f30b70976577
Fix cake taking >200s to explode when it's completely stuck and can't move (bug 194)
Wuzzy <almikes@aol.com>
parents:
12621
diff
changeset
|
4059 |
dec(Gear^.Health); |
f30b70976577
Fix cake taking >200s to explode when it's completely stuck and can't move (bug 194)
Wuzzy <almikes@aol.com>
parents:
12621
diff
changeset
|
4060 |
Gear^.FlightTime := 0; |
11531 | 4061 |
Gear^.doStep := @doStepCakeWalk |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4062 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4063 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4064 |
inc(Gear^.Pos) |
1103 | 4065 |
end; |
4066 |
||
1089 | 4067 |
procedure doStepCakeFall(Gear: PGear); |
4068 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4069 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4070 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4071 |
Gear^.dY := Gear^.dY + cGravity; |
12641
f30b70976577
Fix cake taking >200s to explode when it's completely stuck and can't move (bug 194)
Wuzzy <almikes@aol.com>
parents:
12621
diff
changeset
|
4072 |
// FlightTime remembers the drop time |
f30b70976577
Fix cake taking >200s to explode when it's completely stuck and can't move (bug 194)
Wuzzy <almikes@aol.com>
parents:
12621
diff
changeset
|
4073 |
inc(Gear^.FlightTime); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4074 |
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
|
4075 |
Gear^.doStep := @doStepCakeUp |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4076 |
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
|
4077 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4078 |
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
|
4079 |
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
|
4080 |
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
|
4081 |
end |
1089 | 4082 |
end; |
4083 |
||
4084 |
procedure doStepCake(Gear: PGear); |
|
4085 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4086 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4087 |
|
13469
f1d349a52bc7
Refactor: lfCurrentHog→lfCurHogCrate, lfNotCurrentMask→lfNotCurHogCrate
Wuzzy <Wuzzy2@mail.ru>
parents:
13408
diff
changeset
|
4088 |
Gear^.CollisionMask:= lfNotCurHogCrate; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4089 |
|
10038
0a5e651d494c
Fix uGearsHandlersMess.pas changes lost in merge r1c02143bfe9c.
sheepluva
parents:
10011
diff
changeset
|
4090 |
Gear^.dY:= cMaxWindSpeed * 100; |
0a5e651d494c
Fix uGearsHandlersMess.pas changes lost in merge r1c02143bfe9c.
sheepluva
parents:
10011
diff
changeset
|
4091 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4092 |
Gear^.doStep := @doStepCakeFall |
1089 | 4093 |
end; |
4094 |
||
1259 | 4095 |
//////////////////////////////////////////////////////////////////////////////// |
1284 | 4096 |
procedure doStepSeductionWork(Gear: PGear); |
5706 | 4097 |
var i: LongInt; |
15847 | 4098 |
hits: PGearArrayS; |
14015
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4099 |
HHGear: PGear; |
1259 | 4100 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4101 |
AllInactive := false; |
14015
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4102 |
|
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4103 |
HHGear := Gear^.Hedgehog^.Gear; |
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4104 |
if (HHGear <> nil) and ((HHGear^.State and gstHHDriven) = 0) then |
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4105 |
begin |
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4106 |
StopSound(sndYoohoo); |
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4107 |
AfterAttack; |
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4108 |
DeleteGear(Gear); |
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4109 |
exit; |
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4110 |
end; |
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4111 |
|
15847 | 4112 |
hits := GearsNear(Gear^.X, Gear^.Y, gtHedgehog, Gear^.Radius); |
4113 |
if hits.size > 0 then |
|
4114 |
begin |
|
4115 |
for i:= 0 to hits.size - 1 do |
|
4116 |
with hits.ar^[i]^ do |
|
4117 |
if (hits.ar^[i] <> CurrentHedgehog^.Gear) and (Hedgehog^.Effects[heFrozen] = 0) then |
|
7335 | 4118 |
begin |
12743
f45ffb4cf1e1
Make GearsNear and CheckGearNear check gears across wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12737
diff
changeset
|
4119 |
if (WorldEdge <> weWrap) or (not (hwAbs(Gear^.X - X) > int2hwFloat(Gear^.Radius))) then |
f45ffb4cf1e1
Make GearsNear and CheckGearNear check gears across wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12737
diff
changeset
|
4120 |
dX:= _50 * cGravity * (Gear^.X - X) / _25 |
f45ffb4cf1e1
Make GearsNear and CheckGearNear check gears across wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12737
diff
changeset
|
4121 |
else if (not (hwAbs(Gear^.X + int2hwFloat(RightX-LeftX) - X) > int2hwFloat(Gear^.Radius))) then |
f45ffb4cf1e1
Make GearsNear and CheckGearNear check gears across wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12737
diff
changeset
|
4122 |
dX:= _50 * cGravity * ((Gear^.X + int2hwFloat(RightX-LeftX)) - X) / _25 |
f45ffb4cf1e1
Make GearsNear and CheckGearNear check gears across wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12737
diff
changeset
|
4123 |
else |
f45ffb4cf1e1
Make GearsNear and CheckGearNear check gears across wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
12737
diff
changeset
|
4124 |
dX:= _50 * cGravity * ((Gear^.X - int2hwFloat(RightX-LeftX)) - X) / _25; |
13058
004f4f7dc9d4
Enemy hogs should at least try to get to you in low gravity
nemo
parents:
12989
diff
changeset
|
4125 |
dY:= -_450 * cMaxWindSpeed * 2; |
7335 | 4126 |
Active:= true; |
4127 |
end |
|
10545 | 4128 |
else if Hedgehog^.Effects[heFrozen] > 255 then |
4129 |
Hedgehog^.Effects[heFrozen]:= 255 |
|
5525 | 4130 |
end ; |
15847 | 4131 |
|
4132 |
hits := GearsNear(Gear^.X, Gear^.Y, gtSentry, Gear^.Radius); |
|
4133 |
if hits.size > 0 then |
|
4134 |
for i:= 0 to hits.size - 1 do |
|
4135 |
with hits.ar^[i]^ do |
|
4136 |
if (Gear^.Hedgehog <> nil) and (Hedgehog <> Gear^.Hedgehog) then |
|
4137 |
begin |
|
4138 |
dX := SignAs(_0, dX); |
|
4139 |
dY := -_0_15; |
|
4140 |
Hedgehog := Gear^.Hedgehog; |
|
4141 |
ResetSentryState(hits.ar^[i], 0, 10000); |
|
4142 |
end; |
|
4143 |
||
14015
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4144 |
AfterAttack; |
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4145 |
DeleteGear(Gear); |
1286 | 4146 |
end; |
4147 |
||
4148 |
procedure doStepSeductionWear(Gear: PGear); |
|
5562 | 4149 |
var heart: PVisualGear; |
14015
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4150 |
HHGear: PGear; |
1286 | 4151 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4152 |
AllInactive := false; |
14015
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4153 |
|
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4154 |
HHGear := Gear^.Hedgehog^.Gear; |
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4155 |
if (HHGear <> nil) and ((HHGear^.State and gstHHDriven) = 0) then |
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4156 |
begin |
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4157 |
StopSound(sndYoohoo); |
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4158 |
AfterAttack; |
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4159 |
DeleteGear(Gear); |
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4160 |
exit; |
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4161 |
end; |
996ef4c5d064
Fix seduction not stopping if hog took damage before attack was complete
Wuzzy <Wuzzy2@mail.ru>
parents:
14006
diff
changeset
|
4162 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4163 |
inc(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4164 |
if Gear^.Timer > 250 then |
5562 | 4165 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4166 |
Gear^.Timer := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4167 |
inc(Gear^.Pos); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4168 |
if Gear^.Pos = 5 then |
11698
e86feecadced
Fix issue 12: “Yoohoo” sound for seduction is missing
sheepluva
parents:
11553
diff
changeset
|
4169 |
PlaySound(sndYoohoo); |
14841
183677a07c8d
Separate Yoohoo.ogg into "Yoohoo" voice and kiss sound
Wuzzy <Wuzzy2@mail.ru>
parents:
14782
diff
changeset
|
4170 |
if Gear^.Pos = 14 then |
183677a07c8d
Separate Yoohoo.ogg into "Yoohoo" voice and kiss sound
Wuzzy <Wuzzy2@mail.ru>
parents:
14782
diff
changeset
|
4171 |
PlaySound(sndKiss); |
5562 | 4172 |
end; |
4173 |
||
11858 | 4174 |
|
4175 |
// note: use GameTicks, not RealTicks, otherwise amount can vary greatly |
|
11860
0abbe6f1e4f2
increase heart count in seduction effect. FPS are overrated anyway
sheepluva
parents:
11858
diff
changeset
|
4176 |
if (Gear^.Pos = 14) and (GameTicks and $1 = 0) then |
5562 | 4177 |
begin |
4178 |
heart:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtStraightShot); |
|
6131 | 4179 |
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
|
4180 |
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
|
4181 |
begin |
11858 | 4182 |
|
4183 |
// randomize speed in both directions |
|
4184 |
dx:= 0.001 * (random(201)); |
|
4185 |
dy:= 0.001 * (random(201)); |
|
4186 |
||
4187 |
// half of hearts go down |
|
4188 |
if random(2) = 0 then |
|
4189 |
begin |
|
4190 |
// create a pointy shape |
|
4191 |
if 0.2 < dx + dy then |
|
4192 |
begin |
|
4193 |
dy:= 0.2 - dy; |
|
4194 |
dx:= 0.2 - dx; |
|
4195 |
end; |
|
4196 |
// sin bulge it out a little to avoid corners on the side |
|
4197 |
dx:= dx + (dx/0.2) * ((0.2 * sin(pi * ((0.2 - dy) / 0.4))) - (0.2 - dy)); |
|
4198 |
// change sign |
|
4199 |
dy:= -dy; |
|
4200 |
end |
|
4201 |
else // shape hearts on top into 2 arcs |
|
4202 |
dy:= dy * (0.3 + 0.7 * sin(pi * dx / 0.2)); |
|
4203 |
||
4204 |
// half of the hearts go left |
|
4205 |
if random(2) = 0 then |
|
4206 |
dx := -dx; |
|
5564
4f42009237df
For mikade's sake, use old dx/dy/frametick as default, so health crosses move the same
nemo
parents:
5563
diff
changeset
|
4207 |
FrameTicks:= random(750) + 1000; |
5748
70d7f8e40f53
Just for fun. Flowers! Also, use a less blatant image in ammo menu.
nemo
parents:
5738
diff
changeset
|
4208 |
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
|
4209 |
end; |
5562 | 4210 |
end; |
4211 |
||
4212 |
if Gear^.Pos = 15 then |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4213 |
Gear^.doStep := @doStepSeductionWork |
1259 | 4214 |
end; |
1284 | 4215 |
|
4216 |
procedure doStepSeduction(Gear: PGear); |
|
4217 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4218 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4219 |
Gear^.doStep := @doStepSeductionWear |
1284 | 4220 |
end; |
1298 | 4221 |
|
4222 |
//////////////////////////////////////////////////////////////////////////////// |
|
4223 |
procedure doStepWaterUp(Gear: PGear); |
|
8795 | 4224 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4225 |
i: LongWord; |
1298 | 4226 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4227 |
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
|
4228 |
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
|
4229 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4230 |
DeleteGear(Gear); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4231 |
exit |
4153
6bd94e4c5d65
2 more variables to control water rise and health loss during sudden death.
henek
parents:
4135
diff
changeset
|
4232 |
end; |
6bd94e4c5d65
2 more variables to control water rise and health loss during sudden death.
henek
parents:
4135
diff
changeset
|
4233 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4234 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4235 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4236 |
inc(Gear^.Timer); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4237 |
if Gear^.Timer = 17 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4238 |
Gear^.Timer := 0 |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4239 |
else |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4240 |
exit; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4241 |
|
10359 | 4242 |
if (WorldEdge = weSea) and (playWidth > cMinPlayWidth) then |
10354 | 4243 |
begin |
4244 |
inc(leftX); |
|
4245 |
dec(rightX); |
|
4246 |
dec(playWidth, 2); |
|
4247 |
for i:= 0 to LAND_HEIGHT - 1 do |
|
4248 |
begin |
|
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
4249 |
LandSet(i, leftX, 0); |
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
4250 |
LandSet(i, rightX, 0); |
10354 | 4251 |
end; |
4252 |
end; |
|
4253 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4254 |
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
|
4255 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4256 |
dec(cWaterLine); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4257 |
for i:= 0 to LAND_WIDTH - 1 do |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
4258 |
LandSet(cWaterLine, i, 0); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4259 |
SetAllToActive |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4260 |
end; |
1298 | 4261 |
|
4153
6bd94e4c5d65
2 more variables to control water rise and health loss during sudden death.
henek
parents:
4135
diff
changeset
|
4262 |
dec(Gear^.Tag); |
1298 | 4263 |
end; |
1573 | 4264 |
|
4265 |
//////////////////////////////////////////////////////////////////////////////// |
|
1590 | 4266 |
procedure doStepDrillDrilling(Gear: PGear); |
8795 | 4267 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4268 |
t: PGearArray; |
8795 | 4269 |
tempColl: Word; |
1573 | 4270 |
begin |
13624
6a06904c7bb8
Fix drill rocket exploding when digging at bounce/wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13614
diff
changeset
|
4271 |
WorldWrap(Gear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4272 |
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
|
4273 |
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
|
4274 |
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
|
4275 |
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
|
4276 |
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
|
4277 |
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
|
4278 |
|
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
|
4279 |
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
|
4280 |
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
|
4281 |
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
|
4282 |
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
|
4283 |
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
|
4284 |
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
|
4285 |
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
|
4286 |
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
|
4287 |
exit |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
4288 |
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
|
4289 |
|
8564 | 4290 |
tempColl:= Gear^.CollisionMask; |
13470
7b4643ff60ea
Refactor collision mask checks, remove hardcoded numbers
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
4291 |
Gear^.CollisionMask:= lfObjMask; |
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
4292 |
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
|
4293 |
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
|
4294 |
else t := nil; |
8564 | 4295 |
Gear^.CollisionMask:= tempColl; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4296 |
//fixes drill not exploding when touching HH bug |
8795 | 4297 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4298 |
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
|
4299 |
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
|
4300 |
// 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
|
4301 |
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
|
4302 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4303 |
//out of time or exited ground |
7053 | 4304 |
StopSoundChan(Gear^.SoundChannel); |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
4305 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4306 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4307 |
exit |
4758
73aef6a577ba
drill strike falling instead of exploding when exiting ground
Henek
parents:
4708
diff
changeset
|
4308 |
end |
8795 | 4309 |
|
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
4310 |
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
|
4311 |
begin |
7053 | 4312 |
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
|
4313 |
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
|
4314 |
Gear^.AdvBounce:= 50; |
4758
73aef6a577ba
drill strike falling instead of exploding when exiting ground
Henek
parents:
4708
diff
changeset
|
4315 |
Gear^.doStep := @doStepDrill |
73aef6a577ba
drill strike falling instead of exploding when exiting ground
Henek
parents:
4708
diff
changeset
|
4316 |
end; |
1590 | 4317 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4318 |
dec(Gear^.Timer); |
1573 | 4319 |
end; |
4320 |
||
4321 |
procedure doStepDrill(Gear: PGear); |
|
8795 | 4322 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4323 |
t: PGearArray; |
10038
0a5e651d494c
Fix uGearsHandlersMess.pas changes lost in merge r1c02143bfe9c.
sheepluva
parents:
10011
diff
changeset
|
4324 |
oldX, oldY, oldDx, oldDy: hwFloat; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
4325 |
t2: hwFloat; |
1573 | 4326 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4327 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4328 |
|
11391 | 4329 |
if (Gear^.State and gsttmpFlag = 0) and (GameFlags and gfMoreWind = 0) then |
4293
d79ffcdd77df
makes drill attack drills weaker and not affected by wind
Henek
parents:
4282
diff
changeset
|
4330 |
Gear^.dX := Gear^.dX + cWindSpeed; |
d79ffcdd77df
makes drill attack drills weaker and not affected by wind
Henek
parents:
4282
diff
changeset
|
4331 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4332 |
oldDx := Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4333 |
oldDy := Gear^.dY; |
10038
0a5e651d494c
Fix uGearsHandlersMess.pas changes lost in merge r1c02143bfe9c.
sheepluva
parents:
10011
diff
changeset
|
4334 |
oldX := Gear^.X; |
0a5e651d494c
Fix uGearsHandlersMess.pas changes lost in merge r1c02143bfe9c.
sheepluva
parents:
10011
diff
changeset
|
4335 |
oldY := Gear^.Y; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4336 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4337 |
doStepFallingGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4338 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4339 |
if (GameTicks and $3F) = 0 then |
10352 | 4340 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4341 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4342 |
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
|
4343 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4344 |
//hit |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4345 |
Gear^.dX := oldDx; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4346 |
Gear^.dY := oldDy; |
10038
0a5e651d494c
Fix uGearsHandlersMess.pas changes lost in merge r1c02143bfe9c.
sheepluva
parents:
10011
diff
changeset
|
4347 |
Gear^.X := oldX; |
0a5e651d494c
Fix uGearsHandlersMess.pas changes lost in merge r1c02143bfe9c.
sheepluva
parents:
10011
diff
changeset
|
4348 |
Gear^.Y := oldY; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4349 |
|
8795 | 4350 |
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
|
4351 |
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
|
4352 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4353 |
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
|
4354 |
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
|
4355 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4356 |
//hit the ground not the HH |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4357 |
t2 := _0_5 / Distance(Gear^.dX, Gear^.dY); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4358 |
Gear^.dX := Gear^.dX * t2; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4359 |
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
|
4360 |
end |
8795 | 4361 |
|
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
|
4362 |
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
|
4363 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4364 |
//explode right on contact with HH |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
4365 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4366 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4367 |
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
|
4368 |
end; |
2376 | 4369 |
|
10038
0a5e651d494c
Fix uGearsHandlersMess.pas changes lost in merge r1c02143bfe9c.
sheepluva
parents:
10011
diff
changeset
|
4370 |
Gear^.X:= Gear^.X+Gear^.dX*4; |
0a5e651d494c
Fix uGearsHandlersMess.pas changes lost in merge r1c02143bfe9c.
sheepluva
parents:
10011
diff
changeset
|
4371 |
Gear^.Y:= Gear^.Y+Gear^.dY*4; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4372 |
Gear^.SoundChannel := LoopSound(sndDrillRocket); |
15059 | 4373 |
Gear^.Pos:= 1; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4374 |
Gear^.doStep := @doStepDrillDrilling; |
8795 | 4375 |
|
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
|
4376 |
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
|
4377 |
gear^.RenderTimer:= true; |
6761 | 4378 |
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
|
4379 |
end |
6761 | 4380 |
else if ((Gear^.State and gsttmpFlag) <> 0) and (Gear^.Tag <> 0) then |
4381 |
begin |
|
8795 | 4382 |
if Gear^.Timer > 0 then |
7325 | 4383 |
dec(Gear^.Timer) |
4384 |
else |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4385 |
begin |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
4386 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
6761 | 4387 |
DeleteGear(Gear); |
4388 |
end |
|
4389 |
end; |
|
1590 | 4390 |
end; |
1601 | 4391 |
|
1633 | 4392 |
//////////////////////////////////////////////////////////////////////////////// |
1601 | 4393 |
procedure doStepBallgunWork(Gear: PGear); |
8795 | 4394 |
var |
7296 | 4395 |
HHGear, ball: PGear; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
4396 |
rx, ry: hwFloat; |
3143 | 4397 |
gX, gY: LongInt; |
1601 | 4398 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4399 |
AllInactive := false; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
4400 |
dec(Gear^.Timer); |
4365 | 4401 |
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
|
4402 |
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
|
4403 |
begin |
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
4404 |
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
|
4405 |
exit |
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
4406 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
4407 |
HedgehogChAngle(HHGear); |
3484 | 4408 |
gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle); |
4409 |
gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle); |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
4410 |
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
|
4411 |
begin |
7001 | 4412 |
rx := rndSign(getRandomf * _0_1); |
4413 |
ry := rndSign(getRandomf * _0_1); |
|
2376 | 4414 |
|
7296 | 4415 |
ball:= AddGear(gx, gy, gtBall, 0, SignAs(AngleSin(HHGear^.Angle) * _0_8, HHGear^.dX) + rx, AngleCos(HHGear^.Angle) * ( - _0_8) + ry, 0); |
13469
f1d349a52bc7
Refactor: lfCurrentHog→lfCurHogCrate, lfNotCurrentMask→lfNotCurHogCrate
Wuzzy <Wuzzy2@mail.ru>
parents:
13408
diff
changeset
|
4416 |
ball^.CollisionMask:= lfNotCurHogCrate; |
2376 | 4417 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
4418 |
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
|
4419 |
end; |
1601 | 4420 |
|
7195
9e6e8e5a4c2e
Check for gstHHDriven instead of damage check, so ballgun stops when turn ends in multiattack mode
unc0rr
parents:
7170
diff
changeset
|
4421 |
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
|
4422 |
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
|
4423 |
HHGear^.State := HHGear^.State and (not gstNotKickable); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
4424 |
DeleteGear(Gear); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
4425 |
AfterAttack |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4426 |
end |
1601 | 4427 |
end; |
4428 |
||
4429 |
procedure doStepBallgun(Gear: PGear); |
|
8795 | 4430 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4431 |
HHGear: PGear; |
1601 | 4432 |
begin |
4365 | 4433 |
HHGear := Gear^.Hedgehog^.Gear; |
6450 | 4434 |
HHGear^.Message := HHGear^.Message and (not (gmUp or gmDown)); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4435 |
HHGear^.State := HHGear^.State or gstNotKickable; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4436 |
Gear^.doStep := @doStepBallgunWork |
1633 | 4437 |
end; |
1689 | 4438 |
|
1696 | 4439 |
//////////////////////////////////////////////////////////////////////////////// |
1689 | 4440 |
procedure doStepRCPlaneWork(Gear: PGear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4441 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4442 |
const cAngleSpeed = 3; |
8795 | 4443 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4444 |
HHGear: PGear; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
4445 |
i: LongInt; |
12989
c08c53624c0f
Show remaining ammo when using Birdy egg or RC Plane bomb
Wuzzy <Wuzzy2@mail.ru>
parents:
12914
diff
changeset
|
4446 |
s: ansistring; |
10110
a7aed2eea727
simplify rc-plane's angle-adjustment-after-wrap code
sheepluva
parents:
10108
diff
changeset
|
4447 |
dX, dY : hwFloat; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
4448 |
fChanged: boolean; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
4449 |
trueAngle: Longword; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2944
diff
changeset
|
4450 |
t: PGear; |
1689 | 4451 |
begin |
10110
a7aed2eea727
simplify rc-plane's angle-adjustment-after-wrap code
sheepluva
parents:
10108
diff
changeset
|
4452 |
if WorldWrap(Gear) then |
a7aed2eea727
simplify rc-plane's angle-adjustment-after-wrap code
sheepluva
parents:
10108
diff
changeset
|
4453 |
begin |
10112
275ad81e4718
fix indentation of previous commit and simplify rc-plane's angle-fix after portal code
sheepluva
parents:
10110
diff
changeset
|
4454 |
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
|
4455 |
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
|
4456 |
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
|
4457 |
begin |
275ad81e4718
fix indentation of previous commit and simplify rc-plane's angle-fix after portal code
sheepluva
parents:
10110
diff
changeset
|
4458 |
// 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
|
4459 |
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
|
4460 |
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
|
4461 |
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
|
4462 |
end; |
9477 | 4463 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4464 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4465 |
|
4365 | 4466 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4467 |
FollowGear := Gear; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4468 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4469 |
if Gear^.Timer > 0 then |
11152
3ac7f6d43200
stop rc plane prop/engine sound when out of fuel
sheepluva
parents:
11070
diff
changeset
|
4470 |
begin |
3ac7f6d43200
stop rc plane prop/engine sound when out of fuel
sheepluva
parents:
11070
diff
changeset
|
4471 |
if Gear^.Timer = 1 then |
3ac7f6d43200
stop rc plane prop/engine sound when out of fuel
sheepluva
parents:
11070
diff
changeset
|
4472 |
begin |
3ac7f6d43200
stop rc plane prop/engine sound when out of fuel
sheepluva
parents:
11070
diff
changeset
|
4473 |
StopSoundChan(Gear^.SoundChannel); |
3ac7f6d43200
stop rc plane prop/engine sound when out of fuel
sheepluva
parents:
11070
diff
changeset
|
4474 |
Gear^.SoundChannel:= -1; |
3ac7f6d43200
stop rc plane prop/engine sound when out of fuel
sheepluva
parents:
11070
diff
changeset
|
4475 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4476 |
dec(Gear^.Timer); |
11152
3ac7f6d43200
stop rc plane prop/engine sound when out of fuel
sheepluva
parents:
11070
diff
changeset
|
4477 |
end; |
4886 | 4478 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4479 |
fChanged := false; |
9559 | 4480 |
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
|
4481 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4482 |
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
|
4483 |
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
|
4484 |
dec(Gear^.Angle) |
6785 | 4485 |
else if Gear^.Angle < 2048 then |
4486 |
inc(Gear^.Angle) |
|
4487 |
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
|
4488 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4489 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4490 |
begin |
3894 | 4491 |
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
|
4492 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4493 |
fChanged := true; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4494 |
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
|
4495 |
end; |
1689 | 4496 |
|
3894 | 4497 |
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
|
4498 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4499 |
fChanged := true; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4500 |
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
|
4501 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4502 |
end; |
1689 | 4503 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4504 |
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
|
4505 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4506 |
Gear^.dX.isNegative := (Gear^.Angle > 2048); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4507 |
if Gear^.dX.isNegative then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4508 |
trueAngle := 4096 - Gear^.Angle |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4509 |
else |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4510 |
trueAngle := Gear^.Angle; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4511 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4512 |
Gear^.dX := SignAs(AngleSin(trueAngle), Gear^.dX) * _0_25; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4513 |
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
|
4514 |
end; |
1689 | 4515 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4516 |
Gear^.X := Gear^.X + Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4517 |
Gear^.Y := Gear^.Y + Gear^.dY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4518 |
|
4808 | 4519 |
if (GameTicks and $FF) = 0 then |
4520 |
if Gear^.Timer < 3500 then |
|
4521 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtEvilTrace) |
|
4522 |
else |
|
4523 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace); |
|
4524 |
||
12989
c08c53624c0f
Show remaining ammo when using Birdy egg or RC Plane bomb
Wuzzy <Wuzzy2@mail.ru>
parents:
12914
diff
changeset
|
4525 |
if (HHGear <> nil) and ((HHGear^.Message and gmAttack) <> 0) then |
c08c53624c0f
Show remaining ammo when using Birdy egg or RC Plane bomb
Wuzzy <Wuzzy2@mail.ru>
parents:
12914
diff
changeset
|
4526 |
begin |
c08c53624c0f
Show remaining ammo when using Birdy egg or RC Plane bomb
Wuzzy <Wuzzy2@mail.ru>
parents:
12914
diff
changeset
|
4527 |
if (Gear^.Health) <> 0 then |
c08c53624c0f
Show remaining ammo when using Birdy egg or RC Plane bomb
Wuzzy <Wuzzy2@mail.ru>
parents:
12914
diff
changeset
|
4528 |
begin |
c08c53624c0f
Show remaining ammo when using Birdy egg or RC Plane bomb
Wuzzy <Wuzzy2@mail.ru>
parents:
12914
diff
changeset
|
4529 |
HHGear^.Message := HHGear^.Message and (not gmAttack); |
c08c53624c0f
Show remaining ammo when using Birdy egg or RC Plane bomb
Wuzzy <Wuzzy2@mail.ru>
parents:
12914
diff
changeset
|
4530 |
AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, Gear^.dX * _0_5, Gear^.dY * |
c08c53624c0f
Show remaining ammo when using Birdy egg or RC Plane bomb
Wuzzy <Wuzzy2@mail.ru>
parents:
12914
diff
changeset
|
4531 |
_0_5, 0); |
c08c53624c0f
Show remaining ammo when using Birdy egg or RC Plane bomb
Wuzzy <Wuzzy2@mail.ru>
parents:
12914
diff
changeset
|
4532 |
dec(Gear^.Health) |
c08c53624c0f
Show remaining ammo when using Birdy egg or RC Plane bomb
Wuzzy <Wuzzy2@mail.ru>
parents:
12914
diff
changeset
|
4533 |
end; |
c08c53624c0f
Show remaining ammo when using Birdy egg or RC Plane bomb
Wuzzy <Wuzzy2@mail.ru>
parents:
12914
diff
changeset
|
4534 |
s:= ansistring(inttostr(Gear^.Health)); |
13642
3d14950641a4
Refactor text color variable names, export 2 color values to Lua
Wuzzy <Wuzzy2@mail.ru>
parents:
13640
diff
changeset
|
4535 |
AddCaption(formatA(trmsg[sidRemaining], s), capcolDefault, capgrpAmmostate); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4536 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4537 |
|
9559 | 4538 |
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
|
4539 |
begin |
4808 | 4540 |
Gear^.State := Gear^.State or gsttmpFlag; |
13996
350adfa0e896
Refactor usage of sndRideOfTheValkyries, now can play if music is on and sound is off
Wuzzy <Wuzzy2@mail.ru>
parents:
13995
diff
changeset
|
4541 |
PlayMusicSound(sndRideOfTheValkyries); |
11519
aab4767d9a50
adding a "cinematic mode" - currently: black bars on bottom/top. triggered by rcplane when pressing enter
sheepluva
parents:
11475
diff
changeset
|
4542 |
inCinematicMode:= true; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4543 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4544 |
|
4808 | 4545 |
// pickup bonuses |
4546 |
t := CheckGearNear(Gear, gtCase, 36, 36); |
|
10234 | 4547 |
if (t <> nil) and (HHGear <> nil) then |
4808 | 4548 |
PickUp(HHGear, t); |
4549 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4550 |
CheckCollision(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4551 |
|
4808 | 4552 |
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
|
4553 |
begin |
11519
aab4767d9a50
adding a "cinematic mode" - currently: black bars on bottom/top. triggered by rcplane when pressing enter
sheepluva
parents:
11475
diff
changeset
|
4554 |
inCinematicMode:= false; |
7053 | 4555 |
StopSoundChan(Gear^.SoundChannel); |
13996
350adfa0e896
Refactor usage of sndRideOfTheValkyries, now can play if music is on and sound is off
Wuzzy <Wuzzy2@mail.ru>
parents:
13995
diff
changeset
|
4556 |
StopMusicSound(sndRideOfTheValkyries); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4557 |
|
4808 | 4558 |
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
|
4559 |
begin |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
4560 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
5228 | 4561 |
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
|
4562 |
begin |
7001 | 4563 |
dX := AngleCos(i * 64) * _0_5 * (GetRandomf + _1); |
4564 |
dY := AngleSin(i * 64) * _0_5 * (GetRandomf + _1); |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4565 |
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
|
4566 |
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
|
4567 |
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
|
4568 |
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
|
4569 |
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
|
4570 |
end; |
1713 | 4571 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4572 |
AfterAttack; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4573 |
CurAmmoGear := nil; |
5016
9347d82a26cc
added game mode Tag Team, mostly untested, please test :)
Henek
parents:
5013
diff
changeset
|
4574 |
if (GameFlags and gfInfAttack) = 0 then |
9347d82a26cc
added game mode Tag Team, mostly untested, please test :)
Henek
parents:
5013
diff
changeset
|
4575 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4576 |
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
|
4577 |
TagTurnTimeLeft:= TurnTimeLeft; |
8795 | 4578 |
|
5016
9347d82a26cc
added game mode Tag Team, mostly untested, please test :)
Henek
parents:
5013
diff
changeset
|
4579 |
TurnTimeLeft:= 14 * 125; |
9347d82a26cc
added game mode Tag Team, mostly untested, please test :)
Henek
parents:
5013
diff
changeset
|
4580 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4581 |
|
10510 | 4582 |
if HHGear <> nil then |
12815
92218a06c9ff
Don't send taunt message for automatically happening taunt animation
unc0rr
parents:
12806
diff
changeset
|
4583 |
begin |
10234 | 4584 |
HHGear^.Message := 0; |
12815
92218a06c9ff
Don't send taunt message for automatically happening taunt animation
unc0rr
parents:
12806
diff
changeset
|
4585 |
PlayTaunt(1) |
92218a06c9ff
Don't send taunt message for automatically happening taunt animation
unc0rr
parents:
12806
diff
changeset
|
4586 |
end |
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 |
1689 | 4588 |
end; |
4589 |
||
4590 |
procedure doStepRCPlane(Gear: PGear); |
|
8795 | 4591 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4592 |
HHGear: PGear; |
1689 | 4593 |
begin |
4365 | 4594 |
HHGear := Gear^.Hedgehog^.Gear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4595 |
HHGear^.Message := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4596 |
HHGear^.State := HHGear^.State or gstNotKickable; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4597 |
Gear^.Angle := HHGear^.Angle; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4598 |
Gear^.Tag := hwSign(HHGear^.dX); |
8795 | 4599 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4600 |
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
|
4601 |
Gear^.Angle := 4096 - Gear^.Angle; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4602 |
Gear^.doStep := @doStepRCPlaneWork |
1712 | 4603 |
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
|
4604 |
|
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
|
4605 |
//////////////////////////////////////////////////////////////////////////////// |
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
|
4606 |
procedure doStepJetpackWork(Gear: PGear); |
8795 | 4607 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4608 |
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
|
4609 |
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
|
4610 |
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
|
4611 |
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
|
4612 |
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
|
4613 |
begin |
10354 | 4614 |
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
|
4615 |
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
|
4616 |
dec(Gear^.Pos); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4617 |
AllInactive := false; |
4365 | 4618 |
HHGear := Gear^.Hedgehog^.Gear; |
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
|
4619 |
move := _0_2; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4620 |
fuel := 50; |
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
|
4621 |
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
|
4622 |
HedgehogChAngle(HHGear) |
13593
083733ec7941
Add support for infinite fly time of jetpack and Birdy
Wuzzy <Wuzzy2@mail.ru>
parents:
13572
diff
changeset
|
4623 |
else if (Gear^.Health > 0) or (Gear^.Health = JETPACK_FUEL_INFINITE) then |
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
|
4624 |
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
|
4625 |
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
|
4626 |
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
|
4627 |
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
|
4628 |
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
|
4629 |
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
|
4630 |
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
|
4631 |
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
|
4632 |
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
|
4633 |
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
|
4634 |
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
|
4635 |
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
|
4636 |
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
|
4637 |
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
|
4638 |
end |
11911
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11860
diff
changeset
|
4639 |
else |
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11860
diff
changeset
|
4640 |
begin |
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11860
diff
changeset
|
4641 |
PlaySound(sndJetpackBoost); |
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11860
diff
changeset
|
4642 |
HHGear^.dY := HHGear^.dY - move; |
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11860
diff
changeset
|
4643 |
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
|
4644 |
end; |
13593
083733ec7941
Add support for infinite fly time of jetpack and Birdy
Wuzzy <Wuzzy2@mail.ru>
parents:
13572
diff
changeset
|
4645 |
if Gear^.Health <> JETPACK_FUEL_INFINITE then |
083733ec7941
Add support for infinite fly time of jetpack and Birdy
Wuzzy <Wuzzy2@mail.ru>
parents:
13572
diff
changeset
|
4646 |
dec(Gear^.Health, fuel); |
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
|
4647 |
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
|
4648 |
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
|
4649 |
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
|
4650 |
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
|
4651 |
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
|
4652 |
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
|
4653 |
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
|
4654 |
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
|
4655 |
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
|
4656 |
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
|
4657 |
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
|
4658 |
bubble := AddVisualGear(hwRound(HHGear^.X)+random(8), hwRound(HHGear^.Y) - 8 + random(16), vgtBubble); |
6131 | 4659 |
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
|
4660 |
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
|
4661 |
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
|
4662 |
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
|
4663 |
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
|
4664 |
bubble^.X := bubble^.X + 28; |
4187 | 4665 |
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
|
4666 |
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
|
4667 |
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
|
4668 |
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
|
4669 |
end |
11911
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11860
diff
changeset
|
4670 |
end |
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11860
diff
changeset
|
4671 |
else PlaySound(sndJetpackBoost); |
13593
083733ec7941
Add support for infinite fly time of jetpack and Birdy
Wuzzy <Wuzzy2@mail.ru>
parents:
13572
diff
changeset
|
4672 |
if Gear^.Health <> JETPACK_FUEL_INFINITE then |
083733ec7941
Add support for infinite fly time of jetpack and Birdy
Wuzzy <Wuzzy2@mail.ru>
parents:
13572
diff
changeset
|
4673 |
dec(Gear^.Health, fuel div 5); |
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
|
4674 |
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
|
4675 |
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
|
4676 |
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
|
4677 |
end; |
2182
ed7e7eb3f9ed
Ugly graphic for jetpack - jetpack should be essentially functional.
nemo
parents:
2181
diff
changeset
|
4678 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4679 |
// erases them all at once :-/ |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4680 |
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
|
4681 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4682 |
Gear^.Timer := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4683 |
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
|
4684 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4685 |
|
13593
083733ec7941
Add support for infinite fly time of jetpack and Birdy
Wuzzy <Wuzzy2@mail.ru>
parents:
13572
diff
changeset
|
4686 |
if (Gear^.Health < 0) and (Gear^.Health <> JETPACK_FUEL_INFINITE) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4687 |
Gear^.Health := 0; |
8795 | 4688 |
|
4260
472fd2fc1f31
Also switch saucer from updating every N ticks to updating as-needed.
nemo
parents:
4258
diff
changeset
|
4689 |
i:= Gear^.Health div 20; |
8795 | 4690 |
|
15381
c117e17b90bc
flag some of the renderstringtex which are taking up a ton of processing time with --stats-only and pas2c
nemo
parents:
15354
diff
changeset
|
4691 |
if (not cOnlyStats) and (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
|
4692 |
begin |
4260
472fd2fc1f31
Also switch saucer from updating every N ticks to updating as-needed.
nemo
parents:
4258
diff
changeset
|
4693 |
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
|
4694 |
FreeAndNilTexture(Gear^.Tex); |
13593
083733ec7941
Add support for infinite fly time of jetpack and Birdy
Wuzzy <Wuzzy2@mail.ru>
parents:
13572
diff
changeset
|
4695 |
if Gear^.Health <> JETPACK_FUEL_INFINITE then |
13898 | 4696 |
Gear^.Tex := RenderStringTex(FormatA(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
|
4697 |
end; |
2182
ed7e7eb3f9ed
Ugly graphic for jetpack - jetpack should be essentially functional.
nemo
parents:
2181
diff
changeset
|
4698 |
|
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
|
4699 |
if (HHGear^.Message and (gmAttack or gmUp or gmLeft or gmRight) <> 0) and |
15318
6afce21e60c3
Saucer: Restore dX after "freeze" state
Wuzzy <Wuzzy2@mail.ru>
parents:
15317
diff
changeset
|
4700 |
(HHGear^.Message and gmPrecise = 0) and |
6afce21e60c3
Saucer: Restore dX after "freeze" state
Wuzzy <Wuzzy2@mail.ru>
parents:
15317
diff
changeset
|
4701 |
((Gear^.State and gsttmpFlag) <> 0) then |
6afce21e60c3
Saucer: Restore dX after "freeze" state
Wuzzy <Wuzzy2@mail.ru>
parents:
15317
diff
changeset
|
4702 |
begin |
6450 | 4703 |
Gear^.State := Gear^.State and (not gsttmpFlag); |
15318
6afce21e60c3
Saucer: Restore dX after "freeze" state
Wuzzy <Wuzzy2@mail.ru>
parents:
15317
diff
changeset
|
4704 |
HHGear^.dX := Gear^.dX; |
6afce21e60c3
Saucer: Restore dX after "freeze" state
Wuzzy <Wuzzy2@mail.ru>
parents:
15317
diff
changeset
|
4705 |
end; |
8795 | 4706 |
|
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
|
4707 |
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
|
4708 |
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
|
4709 |
HHGear^.State := HHGear^.State or gstMoving; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4710 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4711 |
Gear^.X := HHGear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4712 |
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
|
4713 |
|
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4714 |
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
|
4715 |
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
|
4716 |
HHGear^.dY.isNegative:= false; |
8795 | 4717 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4718 |
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
|
4719 |
or (HHGear^.dY < _0) then |
15317
b5171e6c94a4
Fix movement stopping when activating saucer after longjump
Wuzzy <Wuzzy2@mail.ru>
parents:
15299
diff
changeset
|
4720 |
doStepHedgehogMoving(HHGear) |
b5171e6c94a4
Fix movement stopping when activating saucer after longjump
Wuzzy <Wuzzy2@mail.ru>
parents:
15299
diff
changeset
|
4721 |
else |
b5171e6c94a4
Fix movement stopping when activating saucer after longjump
Wuzzy <Wuzzy2@mail.ru>
parents:
15299
diff
changeset
|
4722 |
HHGear^.dX:= SignAs(_0, HHGear^.dX); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4723 |
|
14593
34e810295d08
Remove a bunch of dead out-commented code
Wuzzy <Wuzzy2@mail.ru>
parents:
14591
diff
changeset
|
4724 |
if |
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
|
4725 |
(HHGear^.Damage <> 0) |
10354 | 4726 |
// drown if too deep under water |
8990 | 4727 |
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
|
4728 |
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
|
4729 |
// 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
|
4730 |
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
|
4731 |
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
|
4732 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4733 |
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
|
4734 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4735 |
Message := 0; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4736 |
Active := true; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4737 |
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
|
4738 |
end; |
13977
2568fa516733
Fix hog can drop more than 2 s. mines if first one was dropped from utility, then stop using that utility
Wuzzy <Wuzzy2@mail.ru>
parents:
13898
diff
changeset
|
4739 |
if (GetAmmoEntry(HHGear^.Hedgehog^, amJetpack)^.Count >= 1) and ((Ammoz[HHGear^.Hedgehog^.CurAmmoType].Ammo.Propz and ammoprop_AltUse) <> 0) and (HHGear^.Hedgehog^.MultiShootAttacks = 0) then |
12820
4c1c468725ff
Fix desync when dropping weapon from parachute or jetpack
Wuzzy <Wuzzy2@mail.ru>
parents:
12815
diff
changeset
|
4740 |
HHGear^.Hedgehog^.CurAmmoType:= amJetpack; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4741 |
isCursorVisible := false; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4742 |
ApplyAmmoChanges(HHGear^.Hedgehog^); |
14575 | 4743 |
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
|
4744 |
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
|
4745 |
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
|
4746 |
|
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
|
4747 |
procedure doStepJetpack(Gear: PGear); |
8795 | 4748 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4749 |
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
|
4750 |
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
|
4751 |
Gear^.Pos:= 0; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4752 |
Gear^.doStep := @doStepJetpackWork; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4753 |
|
4365 | 4754 |
HHGear := Gear^.Hedgehog^.Gear; |
11911
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11860
diff
changeset
|
4755 |
|
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11860
diff
changeset
|
4756 |
PlaySound(sndJetpackLaunch); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4757 |
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
|
4758 |
AfterAttack; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4759 |
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
|
4760 |
begin |
6450 | 4761 |
State := State and (not gstAttacking); |
4762 |
Message := Message and (not (gmAttack or gmUp or gmPrecise or gmLeft or gmRight)); |
|
8795 | 4763 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4764 |
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
|
4765 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4766 |
Gear^.State := Gear^.State or gsttmpFlag; |
15318
6afce21e60c3
Saucer: Restore dX after "freeze" state
Wuzzy <Wuzzy2@mail.ru>
parents:
15317
diff
changeset
|
4767 |
dY := dY - _0_2; |
6afce21e60c3
Saucer: Restore dX after "freeze" state
Wuzzy <Wuzzy2@mail.ru>
parents:
15317
diff
changeset
|
4768 |
Gear^.dX:= dX; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4769 |
end |
2301 | 4770 |
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
|
4771 |
end; |
2983 | 4772 |
|
4773 |
//////////////////////////////////////////////////////////////////////////////// |
|
3149 | 4774 |
procedure doStepBirdyDisappear(Gear: PGear); |
2983 | 4775 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4776 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4777 |
Gear^.Pos := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4778 |
if Gear^.Timer < 2000 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4779 |
inc(Gear^.Timer, 1) |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4780 |
else |
14575 | 4781 |
DeleteGear(Gear) |
2983 | 4782 |
end; |
4783 |
||
4784 |
procedure doStepBirdyFly(Gear: PGear); |
|
8795 | 4785 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4786 |
HHGear: PGear; |
13593
083733ec7941
Add support for infinite fly time of jetpack and Birdy
Wuzzy <Wuzzy2@mail.ru>
parents:
13572
diff
changeset
|
4787 |
energy, i: LongInt; |
2983 | 4788 |
move: hwFloat; |
12989
c08c53624c0f
Show remaining ammo when using Birdy egg or RC Plane bomb
Wuzzy <Wuzzy2@mail.ru>
parents:
12914
diff
changeset
|
4789 |
s: ansistring; |
2983 | 4790 |
begin |
6154 | 4791 |
HHGear := Gear^.Hedgehog^.Gear; |
8795 | 4792 |
if HHGear = nil then |
6154 | 4793 |
begin |
9698 | 4794 |
Gear^.Timer := 0; |
4795 |
Gear^.State := Gear^.State or gstAnimation or gstTmpFlag; |
|
4796 |
Gear^.Timer := 0; |
|
4797 |
Gear^.doStep := @doStepBirdyDisappear; |
|
4798 |
CurAmmoGear := nil; |
|
4799 |
isCursorVisible := false; |
|
4800 |
AfterAttack; |
|
6154 | 4801 |
exit |
4802 |
end; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4803 |
|
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
|
4804 |
move := _0_2; |
13593
083733ec7941
Add support for infinite fly time of jetpack and Birdy
Wuzzy <Wuzzy2@mail.ru>
parents:
13572
diff
changeset
|
4805 |
energy:= 50; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4806 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4807 |
if Gear^.Pos > 0 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4808 |
dec(Gear^.Pos, 1) |
3894 | 4809 |
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
|
4810 |
Gear^.Pos := 500; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4811 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4812 |
if HHGear^.dX.isNegative then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4813 |
Gear^.Tag := -1 |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4814 |
else |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4815 |
Gear^.Tag := 1; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4816 |
|
3894 | 4817 |
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
|
4818 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4819 |
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
|
4820 |
or (HHGear^.Y > -_256) then |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4821 |
HHGear^.dY := HHGear^.dY - move; |
8795 | 4822 |
|
13593
083733ec7941
Add support for infinite fly time of jetpack and Birdy
Wuzzy <Wuzzy2@mail.ru>
parents:
13572
diff
changeset
|
4823 |
if (Gear^.Health <> BIRDY_ENERGY_INFINITE) then |
083733ec7941
Add support for infinite fly time of jetpack and Birdy
Wuzzy <Wuzzy2@mail.ru>
parents:
13572
diff
changeset
|
4824 |
dec(Gear^.Health, energy); |
3894 | 4825 |
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
|
4826 |
end; |
8795 | 4827 |
|
3894 | 4828 |
if (HHGear^.Message and gmLeft) <> 0 then move.isNegative := true; |
4829 |
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
|
4830 |
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
|
4831 |
HHGear^.dX := HHGear^.dX + (move * _0_1); |
13593
083733ec7941
Add support for infinite fly time of jetpack and Birdy
Wuzzy <Wuzzy2@mail.ru>
parents:
13572
diff
changeset
|
4832 |
if (Gear^.Health <> BIRDY_ENERGY_INFINITE) then |
083733ec7941
Add support for infinite fly time of jetpack and Birdy
Wuzzy <Wuzzy2@mail.ru>
parents:
13572
diff
changeset
|
4833 |
dec(Gear^.Health, energy div 5); |
3894 | 4834 |
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
|
4835 |
end; |
2983 | 4836 |
|
13593
083733ec7941
Add support for infinite fly time of jetpack and Birdy
Wuzzy <Wuzzy2@mail.ru>
parents:
13572
diff
changeset
|
4837 |
if (Gear^.Health < 0) and (Gear^.Health <> BIRDY_ENERGY_INFINITE) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4838 |
Gear^.Health := 0; |
8795 | 4839 |
|
13593
083733ec7941
Add support for infinite fly time of jetpack and Birdy
Wuzzy <Wuzzy2@mail.ru>
parents:
13572
diff
changeset
|
4840 |
if ((GameTicks and $FF) = 0) and (Gear^.Health < 500) and (Gear^.Health <> BIRDY_ENERGY_INFINITE) then |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4841 |
for i:= ((500-Gear^.Health) div 250) downto 0 do |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4842 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtFeather); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4843 |
|
3894 | 4844 |
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
|
4845 |
begin |
6450 | 4846 |
HHGear^.Message := HHGear^.Message and (not gmAttack); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4847 |
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
|
4848 |
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
|
4849 |
AddGear(hwRound(Gear^.X), hwRound(Gear^.Y) + 32, gtEgg, 0, Gear^.dX * _0_5, Gear^.dY, 0); |
3123 | 4850 |
PlaySound(sndBirdyLay); |
3115 | 4851 |
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
|
4852 |
end; |
12989
c08c53624c0f
Show remaining ammo when using Birdy egg or RC Plane bomb
Wuzzy <Wuzzy2@mail.ru>
parents:
12914
diff
changeset
|
4853 |
s:= ansistring(inttostr(Gear^.FlightTime)); |
13642
3d14950641a4
Refactor text color variable names, export 2 color values to Lua
Wuzzy <Wuzzy2@mail.ru>
parents:
13640
diff
changeset
|
4854 |
AddCaption(formatA(trmsg[sidRemaining], s), capcolDefault, capgrpAmmostate); |
3115 | 4855 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4856 |
|
6131 | 4857 |
if HHGear^.Message and (gmUp or gmPrecise or gmLeft or gmRight) <> 0 then |
6450 | 4858 |
Gear^.State := Gear^.State and (not gsttmpFlag); |
8795 | 4859 |
|
6450 | 4860 |
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
|
4861 |
HHGear^.State := HHGear^.State or gstMoving; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4862 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4863 |
Gear^.X := HHGear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4864 |
Gear^.Y := HHGear^.Y - int2hwFloat(32); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4865 |
// 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
|
4866 |
// this is probably not needed anymore |
cdd3d8c723ec
Update changelog, comment on possibly redundant lines in GSHandlers
nemo
parents:
6314
diff
changeset
|
4867 |
if not CurrentTeam^.ExtDriven then FollowGear := HHGear; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4868 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4869 |
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
|
4870 |
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
|
4871 |
doStepHedgehogMoving(HHGear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4872 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4873 |
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
|
4874 |
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
|
4875 |
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
|
4876 |
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
|
4877 |
// 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
|
4878 |
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
|
4879 |
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
|
4880 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4881 |
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
|
4882 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4883 |
Message := 0; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4884 |
Active := true; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4885 |
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
|
4886 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4887 |
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
|
4888 |
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
|
4889 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4890 |
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
|
4891 |
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
|
4892 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4893 |
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
|
4894 |
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
|
4895 |
CurAmmoGear := nil; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4896 |
isCursorVisible := false; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4897 |
AfterAttack; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4898 |
end |
2983 | 4899 |
end; |
4900 |
||
4901 |
procedure doStepBirdyDescend(Gear: PGear); |
|
8795 | 4902 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4903 |
HHGear: PGear; |
2983 | 4904 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4905 |
if Gear^.Timer > 0 then |
9698 | 4906 |
dec(Gear^.Timer, 1); |
4907 |
||
4908 |
HHGear := Gear^.Hedgehog^.Gear; |
|
12644
59b46e6f36ff
Fix Birdy descending into water if hog took damage before it got picked up (bug 160)
Wuzzy <almikes@aol.com>
parents:
12641
diff
changeset
|
4909 |
if (HHGear = nil) or ((HHGear^.State and gstHHDriven) = 0) then |
59b46e6f36ff
Fix Birdy descending into water if hog took damage before it got picked up (bug 160)
Wuzzy <almikes@aol.com>
parents:
12641
diff
changeset
|
4910 |
begin |
59b46e6f36ff
Fix Birdy descending into water if hog took damage before it got picked up (bug 160)
Wuzzy <almikes@aol.com>
parents:
12641
diff
changeset
|
4911 |
Gear^.Hedgehog := nil; |
9698 | 4912 |
Gear^.Timer := 0; |
4913 |
Gear^.State := Gear^.State or gstAnimation or gstTmpFlag; |
|
4914 |
Gear^.doStep := @doStepBirdyDisappear; |
|
4915 |
CurAmmoGear := nil; |
|
4916 |
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
|
4917 |
AfterAttack; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4918 |
exit |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4919 |
end; |
9698 | 4920 |
|
6450 | 4921 |
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
|
4922 |
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
|
4923 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4924 |
if Gear^.Timer = 0 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4925 |
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
|
4926 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4927 |
else if Gear^.Timer = 0 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4928 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4929 |
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
|
4930 |
HHGear^.dY := -_0_2 |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4931 |
end |
2983 | 4932 |
end; |
4933 |
||
3149 | 4934 |
procedure doStepBirdyAppear(Gear: PGear); |
4935 |
begin |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4936 |
Gear^.Pos := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4937 |
if Gear^.Timer < 2000 then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4938 |
inc(Gear^.Timer, 1) |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4939 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4940 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4941 |
Gear^.Timer := 500; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4942 |
Gear^.dX := _0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4943 |
Gear^.dY := _0; |
6450 | 4944 |
Gear^.State := Gear^.State and (not gstAnimation); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4945 |
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
|
4946 |
end |
3149 | 4947 |
end; |
4948 |
||
2983 | 4949 |
procedure doStepBirdy(Gear: PGear); |
8795 | 4950 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4951 |
HHGear: PGear; |
2983 | 4952 |
begin |
6450 | 4953 |
gear^.State := gear^.State or gstAnimation and (not gstTmpFlag); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4954 |
Gear^.doStep := @doStepBirdyAppear; |
8795 | 4955 |
|
15873
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
4956 |
if CurrentHedgehog^.Gear = 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
|
4957 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4958 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4959 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
4960 |
end; |
2995 | 4961 |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4962 |
HHGear := CurrentHedgehog^.Gear; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4963 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4964 |
if HHGear^.dX.isNegative then |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4965 |
Gear^.Tag := -1 |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4966 |
else |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4967 |
Gear^.Tag := 1; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4968 |
Gear^.Pos := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4969 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4970 |
FollowGear := HHGear; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4971 |
with HHGear^ do |
5706 | 4972 |
begin |
6450 | 4973 |
State := State and (not gstAttacking); |
4974 |
Message := Message and (not (gmAttack or gmUp or gmPrecise or gmLeft or gmRight)) |
|
5706 | 4975 |
end |
2983 | 4976 |
end; |
3032 | 4977 |
|
4978 |
//////////////////////////////////////////////////////////////////////////////// |
|
3065 | 4979 |
procedure doStepEggWork(Gear: PGear); |
8795 | 4980 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4981 |
vg: PVisualGear; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4982 |
i: LongInt; |
3065 | 4983 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4984 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4985 |
Gear^.dX := Gear^.dX; |
3115 | 4986 |
doStepFallingGear(Gear); |
4987 |
CalcRotationDirAngle(Gear); |
|
4988 |
||
4989 |
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
|
4990 |
begin |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
4991 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLPoisoned, $C0E0FFE0); |
3115 | 4992 |
PlaySound(sndEggBreak); |
4993 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtEgg); |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4994 |
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
|
4995 |
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
|
4996 |
vg^.Frame := 2; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4997 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
4998 |
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
|
4999 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5000 |
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
|
5001 |
vgtDust); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5002 |
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
|
5003 |
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
|
5004 |
end; |
3115 | 5005 |
|
5006 |
DeleteGear(Gear); |
|
5007 |
exit |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5008 |
end; |
3065 | 5009 |
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
|
5010 |
|
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
|
5011 |
//////////////////////////////////////////////////////////////////////////////// |
3428 | 5012 |
procedure doPortalColorSwitch(); |
4790 | 5013 |
var CurWeapon: PAmmo; |
3428 | 5014 |
begin |
15873
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5015 |
if (CurrentHedgehog^.Gear <> nil) and ((CurrentHedgehog^.Gear^.State and gstHHDriven) <> 0) and ((CurrentHedgehog^.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
|
5016 |
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
|
5017 |
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
|
5018 |
begin |
11911
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11860
diff
changeset
|
5019 |
PlaySound(sndPortalSwitch); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5020 |
CurrentHedgehog^.Gear^.Message := CurrentHedgehog^.Gear^.Message and (not gmSwitch); |
8795 | 5021 |
|
6924 | 5022 |
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
|
5023 |
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
|
5024 |
CurWeapon^.Pos := 0 |
8795 | 5025 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5026 |
else |
4790 | 5027 |
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
|
5028 |
end; |
3428 | 5029 |
end; |
5030 |
||
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
|
5031 |
procedure doStepPortal(Gear: PGear); |
8795 | 5032 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5033 |
iterator, conPortal: PGear; |
5594 | 5034 |
s, r, nx, ny, ox, oy, poffs, noffs, pspeed, nspeed, |
5035 |
resetx, resety, resetdx, resetdy: hwFloat; |
|
5036 |
sx, sy, rh, resetr: LongInt; |
|
5037 |
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
|
5038 |
begin |
3428 | 5039 |
doPortalColorSwitch(); |
5040 |
||
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
|
5041 |
// destroy portal if ground it was attached too is gone |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
5042 |
if (LandGet(hwRound(Gear^.Y), hwRound(Gear^.X)) <= lfAllObjMask) |
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
5043 |
or (LandGet(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
|
5044 |
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
|
5045 |
or (Gear^.Hedgehog^.Team <> CurrentHedgehog^.Team) |
10354 | 5046 |
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
|
5047 |
begin |
3428 | 5048 |
deleteGear(Gear); |
5049 |
EXIT; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5050 |
end; |
3428 | 5051 |
|
5052 |
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
|
5053 |
or (Gear^.Health < 1) then |
3428 | 5054 |
dec(Gear^.Timer); |
5055 |
||
5056 |
if Gear^.Timer < 10000 then |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5057 |
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
|
5058 |
|
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
|
5059 |
// 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
|
5060 |
if (Gear^.LinkedGear = nil) then |
3428 | 5061 |
exit; |
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7270
diff
changeset
|
5062 |
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
|
5063 |
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
|
5064 |
|
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7270
diff
changeset
|
5065 |
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
|
5066 |
|
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
|
5067 |
// check all gears for stuff to port through |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5068 |
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
|
5069 |
while true do |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5070 |
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
|
5071 |
|
3571 | 5072 |
// 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
|
5073 |
if iterator = nil then |
3571 | 5074 |
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
|
5075 |
else |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5076 |
iterator := iterator^.NextGear; |
3571 | 5077 |
|
5078 |
// 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
|
5079 |
if iterator = nil then |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5080 |
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
|
5081 |
|
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
|
5082 |
// 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
|
5083 |
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
|
5084 |
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
|
5085 |
continue; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5086 |
|
3428 | 5087 |
// don't port hogs on rope |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5088 |
// 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
|
5089 |
// 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
|
5090 |
|
3571 | 5091 |
// 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
|
5092 |
if (iterator^.Radius > Gear^.Radius) then |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5093 |
continue; |
3571 | 5094 |
|
5095 |
// 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
|
5096 |
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
|
5097 |
|
3571 | 5098 |
// too far away? |
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
5099 |
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
|
5100 |
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
|
5101 |
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
|
5102 |
or (iterator^.Y > Gear^.Y + r) then |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5103 |
continue; |
5044 | 5104 |
|
10490 | 5105 |
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
|
5106 |
|
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5107 |
// 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
|
5108 |
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
|
5109 |
begin |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5110 |
if Gear^.Y < iterator^.Y then |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5111 |
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
|
5112 |
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
|
5113 |
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
|
5114 |
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
|
5115 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5116 |
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
|
5117 |
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
|
5118 |
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
|
5119 |
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
|
5120 |
|
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5121 |
// 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
|
5122 |
iscake:= (iterator^.Kind = gtCake); |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5123 |
|
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
5124 |
// 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
|
5125 |
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
|
5126 |
begin |
6452 | 5127 |
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
|
5128 |
continue; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5129 |
end |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5130 |
else |
6453
11c578d30bd3
Countless imporvements to the parser and countless help to the parser in sources.
unc0rr
parents:
6452
diff
changeset
|
5131 |
if not ((Gear^.dX*ox + Gear^.dY*oy).isNegative) then |
3571 | 5132 |
continue; |
5133 |
||
12898 | 5134 |
isbullet:= (iterator^.Kind in [gtShotgunShot, gtDEagleShot, gtSniperRifleShot, gtSineGunShot, gtMinigunBullet]); |
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
5135 |
|
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
5136 |
r:= int2hwFloat(iterator^.Radius); |
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
5137 |
|
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5138 |
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
|
5139 |
begin |
3571 | 5140 |
// wow! good candidate there, let's see if the distance and direction is okay! |
5141 |
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
|
5142 |
begin |
8900
b77fd3c2eec5
whoops, unbreak build. how come that cmake doesn't stop anymore on engine build error?
sheepluva
parents:
8898
diff
changeset
|
5143 |
s := Distance(iterator^.dX, iterator^.dY); |
8898 | 5144 |
// if the resulting distance is 0 skip this gear |
5145 |
if s.QWordValue = 0 then |
|
5146 |
continue; |
|
8900
b77fd3c2eec5
whoops, unbreak build. how come that cmake doesn't stop anymore on engine build error?
sheepluva
parents:
8898
diff
changeset
|
5147 |
s := r / s; |
3571 | 5148 |
ox:= iterator^.X + s * iterator^.dX; |
5149 |
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
|
5150 |
end |
3571 | 5151 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5152 |
begin |
3571 | 5153 |
ox:= iterator^.X; |
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
5154 |
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
|
5155 |
end; |
3571 | 5156 |
|
3578 | 5157 |
if (hwRound(Distance(Gear^.X-ox,Gear^.Y-oy)) > Gear^.Radius + 1 ) then |
3571 | 5158 |
continue; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5159 |
end; |
3571 | 5160 |
|
12898 | 5161 |
if (iterator^.Kind in [gtDEagleShot, gtSniperRifleShot, gtMinigunBullet]) then |
11550
881231c1ba46
disallow bullets to hit the hedgehog that fired them (unless bounced/wrapped/portal'd)
sheepluva
parents:
11540
diff
changeset
|
5162 |
begin |
881231c1ba46
disallow bullets to hit the hedgehog that fired them (unless bounced/wrapped/portal'd)
sheepluva
parents:
11540
diff
changeset
|
5163 |
// draw bullet trail |
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
5164 |
spawnBulletTrail(iterator, iterator^.X, iterator^.Y, iterator^.FlightTime = 0); |
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
5165 |
iterator^.FlightTime := 1; |
11550
881231c1ba46
disallow bullets to hit the hedgehog that fired them (unless bounced/wrapped/portal'd)
sheepluva
parents:
11540
diff
changeset
|
5166 |
// the bullet can now hurt the hog that fired it |
881231c1ba46
disallow bullets to hit the hedgehog that fired them (unless bounced/wrapped/portal'd)
sheepluva
parents:
11540
diff
changeset
|
5167 |
iterator^.Data:= nil; |
881231c1ba46
disallow bullets to hit the hedgehog that fired them (unless bounced/wrapped/portal'd)
sheepluva
parents:
11540
diff
changeset
|
5168 |
end; |
5841 | 5169 |
|
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
5170 |
// calc gear offset in portal vector direction |
3571 | 5171 |
ox := (iterator^.X - Gear^.X); |
5172 |
oy := (iterator^.Y - Gear^.Y); |
|
5173 |
poffs:= (Gear^.dX * ox + Gear^.dY * oy); |
|
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
5174 |
|
5841 | 5175 |
if not isBullet and poffs.isNegative then |
5176 |
continue; |
|
5177 |
||
5178 |
// only port bullets close to the portal |
|
6450 | 5179 |
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
|
5180 |
continue; |
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
5181 |
|
4076 | 5182 |
// |
5183 |
// gears that make it till here will definately be ported |
|
5184 |
// |
|
5594 | 5185 |
// (but old position/movement vector might be restored in case there's |
5186 |
// not enough space on the other side) |
|
5187 |
// |
|
5188 |
||
5189 |
resetr := iterator^.Radius; |
|
5190 |
resetx := iterator^.X; |
|
5191 |
resety := iterator^.Y; |
|
5192 |
resetdx := iterator^.dX; |
|
5193 |
resetdy := iterator^.dY; |
|
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
5194 |
|
3578 | 5195 |
// create a normal of the portal vector, but ... |
5196 |
nx := Gear^.dY; |
|
3570 | 5197 |
ny := Gear^.dX; |
3578 | 5198 |
// ... decide where the top is based on the hog's direction when firing the portal |
5199 |
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
|
5200 |
nx.isNegative := (not nx.isNegative) |
3578 | 5201 |
else |
3570 | 5202 |
ny.isNegative := not ny.isNegative; |
3578 | 5203 |
|
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
5204 |
// calc gear offset in portal normal vector direction |
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
5205 |
noffs:= (nx * ox + ny * oy); |
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
5206 |
|
7721 | 5207 |
if isBullet and (noffs.Round >= Longword(Gear^.Radius)) then |
5841 | 5208 |
continue; |
5209 |
||
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5210 |
// 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
|
5211 |
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
|
5212 |
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
|
5213 |
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
|
5214 |
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
|
5215 |
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
|
5216 |
continue; |
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
5217 |
|
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
5218 |
// 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
|
5219 |
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
|
5220 |
begin |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5221 |
pspeed:= (Gear^.dX * iterator^.dX + Gear^.dY * iterator^.dY); |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5222 |
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
|
5223 |
end |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5224 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5225 |
begin |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5226 |
pspeed:= hwAbs(cGravity * oy); |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5227 |
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
|
5228 |
end; |
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
5229 |
|
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
5230 |
// creating normal vector of connected (exit) portal |
3578 | 5231 |
nx := conPortal^.dY; |
3570 | 5232 |
ny := conPortal^.dX; |
3578 | 5233 |
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
|
5234 |
nx.isNegative := (not nx.isNegative) |
3578 | 5235 |
else |
3570 | 5236 |
ny.isNegative := not ny.isNegative; |
3578 | 5237 |
|
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5238 |
// inverse cake's normal movement direction, |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5239 |
// 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
|
5240 |
//if iscake then nspeed.isNegative:= not nspeed.isNegative; |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5241 |
|
3571 | 5242 |
//AddFileLog('poffs:'+cstr(poffs)+' noffs:'+cstr(noffs)+' pspeed:'+cstr(pspeed)+' nspeed:'+cstr(nspeed)); |
3578 | 5243 |
iterator^.dX := -pspeed * conPortal^.dX + nspeed * nx; |
5244 |
iterator^.dY := -pspeed * conPortal^.dY + nspeed * ny; |
|
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5245 |
|
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5246 |
// 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
|
5247 |
// still respecting the movement direction |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5248 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5249 |
// 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
|
5250 |
// 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
|
5251 |
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
|
5252 |
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
|
5253 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5254 |
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
|
5255 |
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
|
5256 |
poffs:= ox; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5257 |
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
|
5258 |
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
|
5259 |
noffs:= noffs * s * (nspeed / pspeed); |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5260 |
|
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5261 |
// 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
|
5262 |
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
|
5263 |
begin |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5264 |
s := hwAbs(noffs) + r - int2hwFloat(Gear^.Radius); |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5265 |
if s > _0 then |
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5266 |
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
|
5267 |
end; |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5268 |
|
3571 | 5269 |
iterator^.X := conPortal^.X + poffs * conPortal^.dX + noffs * nx; |
5270 |
iterator^.Y := conPortal^.Y + poffs * conPortal^.dY + noffs * ny; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5271 |
|
6450 | 5272 |
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
|
5273 |
begin |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5274 |
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
|
5275 |
end; |
4092
bf13068194b3
more portal tweaks (closer exit position, cake stuff, etc)
sheepluva
parents:
4076
diff
changeset
|
5276 |
|
5594 | 5277 |
// see if the space on the exit side actually is enough |
5278 |
||
5279 |
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
|
5280 |
begin |
5594 | 5281 |
// TestCollisionXwithXYShift requires a hwFloat for xShift |
5282 |
ox.QWordValue := _1.QWordValue; |
|
5283 |
ox.isNegative := not iterator^.dX.isNegative; |
|
5284 |
||
5285 |
sx := hwSign(iterator^.dX); |
|
5286 |
sy := hwSign(iterator^.dY); |
|
5287 |
||
5288 |
if iterator^.Radius > 1 then |
|
5289 |
iterator^.Radius := iterator^.Radius - 1; |
|
5290 |
||
5291 |
// 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
|
5292 |
isCollision := (TestCollisionY(iterator, sy) <> 0) or (TestCollisionX(iterator, sx) <> 0); |
5594 | 5293 |
|
5294 |
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
|
5295 |
begin |
5594 | 5296 |
// check center area (with half the radius so that the |
5297 |
// the square check won't check more pixels than we want to) |
|
5298 |
iterator^.Radius := 1 + resetr div 2; |
|
5299 |
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
|
5300 |
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
|
5301 |
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
|
5302 |
end; |
5594 | 5303 |
|
5304 |
iterator^.Radius := resetr; |
|
5305 |
||
5306 |
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
|
5307 |
begin |
5594 | 5308 |
// collision! oh crap! go back! |
5309 |
iterator^.X := resetx; |
|
5310 |
iterator^.Y := resety; |
|
5311 |
iterator^.dX := resetdx; |
|
5312 |
iterator^.dY := resetdy; |
|
5313 |
continue; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5314 |
end; |
5594 | 5315 |
end; |
5316 |
||
14222 | 5317 |
if iterator^.Kind = gtKamikaze then |
5318 |
RefillProximityCache(iterator, 300); |
|
5319 |
||
5594 | 5320 |
// |
5321 |
// You're now officially portaled! |
|
5322 |
// |
|
5323 |
||
5324 |
// 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
|
5325 |
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
|
5326 |
iterator^.PortalCounter:= 33 |
5940 | 5327 |
else |
5328 |
begin |
|
5329 |
inc(iterator^.PortalCounter); |
|
7658 | 5330 |
iterator^.Active:= true; |
7992 | 5331 |
iterator^.State:= iterator^.State and (not gstHHHJump) or gstMoving; |
5940 | 5332 |
end; |
5594 | 5333 |
|
6785 | 5334 |
// is it worth adding an arcsin table? Just how often would we end up doing something like this? |
6787 | 5335 |
// SYNCED ANGLE UPDATE |
6785 | 5336 |
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
|
5337 |
iterator^.Angle:= (1024 + vector2Angle(iterator^.dX, iterator^.dY) mod 4096) |
6787 | 5338 |
// VISUAL USE OF ANGLE ONLY |
5339 |
else if (CurAmmoGear <> nil) and (CurAmmoGear^.Kind = gtKamikaze) and (CurAmmoGear^.Hedgehog = iterator^.Hedgehog) then |
|
5340 |
begin |
|
5341 |
iterator^.Angle:= DxDy2AttackAngle(iterator^.dX, iterator^.dY); |
|
5342 |
iterator^.Angle:= 2048-iterator^.Angle; |
|
6786 | 5343 |
if iterator^.dX.isNegative then iterator^.Angle:= 4096-iterator^.Angle; |
6785 | 5344 |
end; |
5345 |
||
15873
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5346 |
if (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
|
5347 |
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
|
5348 |
and (CurAmmoGear <> nil) |
9539 | 5349 |
and (CurAmmoGear^.Kind = gtRope) |
5350 |
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
|
5351 |
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
|
5352 |
|
8795 | 5353 |
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
|
5354 |
and (iterator^.Kind <> gtFlake) then |
4050
8e4f4b72c132
various portal tweaks, also: nemo's gear jiggling is back
sheepluva
parents:
4047
diff
changeset
|
5355 |
FollowGear := iterator; |
5594 | 5356 |
|
5841 | 5357 |
// store X/Y values of exit for net bullet trail |
5358 |
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
|
5359 |
begin |
5841 | 5360 |
iterator^.Elasticity:= iterator^.X; |
5361 |
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
|
5362 |
end; |
5841 | 5363 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5364 |
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
|
5365 |
dec(Gear^.Health); |
3571 | 5366 |
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
|
5367 |
end; |
3350 | 5368 |
|
6490 | 5369 |
|
3428 | 5370 |
|
5371 |
procedure loadNewPortalBall(oldPortal: PGear; destroyGear: Boolean); |
|
4790 | 5372 |
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
|
5373 |
CurWeapon: PAmmo; |
3388
ab9352a4ddcc
Fix portal graphic name, continuing work on portal movement
nemo
parents:
3384
diff
changeset
|
5374 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5375 |
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
|
5376 |
with CurrentHedgehog^ do |
3428 | 5377 |
begin |
6924 | 5378 |
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
|
5379 |
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
|
5380 |
begin |
4790 | 5381 |
if not destroyGear then |
5382 |
begin |
|
5383 |
// switch color of ball to opposite of oldPortal |
|
5384 |
if (oldPortal^.Tag and 2) = 0 then |
|
5385 |
CurWeapon^.Pos:= 1 |
|
5386 |
else |
|
5387 |
CurWeapon^.Pos:= 0; |
|
5388 |
end; |
|
5389 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5390 |
// make the ball visible |
4790 | 5391 |
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
|
5392 |
end |
3428 | 5393 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5394 |
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
|
5395 |
oldPortal^.Timer:= 0; |
3428 | 5396 |
end; |
5397 |
||
6490 | 5398 |
procedure doStepMovingPortal_real(Gear: PGear); |
8795 | 5399 |
var |
6490 | 5400 |
x, y, tx, ty: LongInt; |
5401 |
s: hwFloat; |
|
3428 | 5402 |
begin |
9477 | 5403 |
WorldWrap(Gear); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5404 |
x := hwRound(Gear^.X); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5405 |
y := hwRound(Gear^.Y); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5406 |
tx := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5407 |
ty := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5408 |
// avoid compiler hints |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5409 |
|
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
5410 |
if ((y and LAND_HEIGHT_MASK) = 0) and ((x and LAND_WIDTH_MASK) = 0) and (LandGet(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
|
5411 |
begin |
3569 | 5412 |
Gear^.State := Gear^.State or gstCollision; |
6450 | 5413 |
Gear^.State := Gear^.State and (not gstMoving); |
8795 | 5414 |
|
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
5415 |
if (LandGet(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
|
5416 |
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
|
5417 |
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
|
5418 |
begin |
3428 | 5419 |
loadNewPortalBall(Gear, true); |
5420 |
EXIT; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5421 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5422 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5423 |
// making a normalized normal vector |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5424 |
s := _1/DistanceI(tx,ty); |
3562 | 5425 |
Gear^.dX := s * ty; |
5426 |
Gear^.dY := -s * tx; |
|
5427 |
||
5428 |
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
|
5429 |
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
|
5430 |
Gear^.DirAngle := 180-Gear^.DirAngle; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5431 |
|
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7270
diff
changeset
|
5432 |
if ((Gear^.LinkedGear = nil) |
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7270
diff
changeset
|
5433 |
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
|
5434 |
begin |
11911
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11860
diff
changeset
|
5435 |
PlaySound(sndPortalOpen); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5436 |
loadNewPortalBall(Gear, false); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5437 |
inc(Gear^.Tag); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5438 |
Gear^.doStep := @doStepPortal; |
3396
e5b3e5f2818e
More portal changes. Allows for a multishoot utility. Hopefully not breaking anything.
nemo
parents:
3391
diff
changeset
|
5439 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5440 |
else |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5441 |
loadNewPortalBall(Gear, true); |
3388
ab9352a4ddcc
Fix portal graphic name, continuing work on portal movement
nemo
parents:
3384
diff
changeset
|
5442 |
end |
8795 | 5443 |
|
10354 | 5444 |
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
|
5445 |
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
|
5446 |
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
|
5447 |
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
|
5448 |
loadNewPortalBall(Gear, true); |
3428 | 5449 |
end; |
5450 |
||
3569 | 5451 |
procedure doStepMovingPortal(Gear: PGear); |
5452 |
begin |
|
5453 |
doPortalColorSwitch(); |
|
5454 |
doStepPerPixel(Gear, @doStepMovingPortal_real, true); |
|
8795 | 5455 |
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
|
5456 |
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
|
5457 |
deleteGear(Gear); |
3569 | 5458 |
end; |
5459 |
||
3428 | 5460 |
procedure doStepPortalShot(newPortal: PGear); |
8795 | 5461 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5462 |
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
|
5463 |
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
|
5464 |
CurWeapon: PAmmo; |
3428 | 5465 |
begin |
15873
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5466 |
if CurrentHedgehog^.Gear = nil then |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5467 |
begin |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5468 |
DeleteGear(newPortal); |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5469 |
exit |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5470 |
end; |
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
|
5471 |
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
|
5472 |
|
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
|
5473 |
// 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
|
5474 |
// 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
|
5475 |
// (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
|
5476 |
// to the scaler) |
3562 | 5477 |
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
|
5478 |
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
|
5479 |
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
|
5480 |
|
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7270
diff
changeset
|
5481 |
newPortal^.LinkedGear := nil; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5482 |
|
11911
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11860
diff
changeset
|
5483 |
PlaySound(sndPortalShot); |
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11860
diff
changeset
|
5484 |
|
15873
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5485 |
with CurrentHedgehog^ do |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5486 |
begin |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5487 |
CurWeapon:= GetCurAmmoEntry(CurrentHedgehog^); |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5488 |
// let's save the HH's dX's direction so we can decide where the "top" of the portal hole |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5489 |
newPortal^.Elasticity.isNegative := CurrentHedgehog^.Gear^.dX.isNegative; |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5490 |
// when doing a backjump the dx is the opposite of the facing direction |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5491 |
if ((Gear^.State and gstHHHJump) <> 0) and (Effects[heArtillery] = 0) then |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5492 |
newPortal^.Elasticity.isNegative := not newPortal^.Elasticity.isNegative; |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5493 |
|
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5494 |
// make portal gun look unloaded |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5495 |
if (CurWeapon <> nil) and (CurAmmoType = amPortalGun) then |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5496 |
CurWeapon^.Timer := CurWeapon^.Timer or 2; |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5497 |
|
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5498 |
iterator := GearsList; |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5499 |
while iterator <> nil do |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5500 |
begin |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5501 |
if (iterator^.Kind = gtPortal) then |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5502 |
if (iterator <> newPortal) and (iterator^.Timer > 0) and (iterator^.Hedgehog = CurrentHedgehog) then |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5503 |
begin |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5504 |
if ((iterator^.Tag and 2) = (newPortal^.Tag and 2)) then |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5505 |
begin |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5506 |
iterator^.Timer:= 0; |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5507 |
end |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5508 |
else |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5509 |
begin |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5510 |
// link portals with each other |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5511 |
newPortal^.LinkedGear := iterator; |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5512 |
iterator^.LinkedGear := newPortal; |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5513 |
iterator^.Health := newPortal^.Health; |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5514 |
end; |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5515 |
end; |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5516 |
iterator^.PortalCounter:= 0; |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5517 |
iterator := iterator^.NextGear |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5518 |
end; |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5519 |
|
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5520 |
if newPortal^.LinkedGear <> nil then |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5521 |
begin |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5522 |
// This jiggles gears, to ensure a portal connection just placed under a gear takes effect. |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5523 |
iterator:= GearsList; |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5524 |
while iterator <> nil do |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5525 |
begin |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5526 |
if not (iterator^.Kind in [gtPortal, gtAirAttack, gtKnife, gtSMine]) and ((iterator^.Hedgehog <> CurrentHedgehog) |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5527 |
or ((iterator^.Message and gmAllStoppable) = 0)) then |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5528 |
begin |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5529 |
iterator^.Active:= true; |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5530 |
if iterator^.dY.QWordValue = 0 then |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5531 |
iterator^.dY.isNegative:= false; |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5532 |
iterator^.State:= iterator^.State or gstMoving; |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5533 |
DeleteCI(iterator); |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5534 |
//inc(iterator^.dY.QWordValue,10); |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5535 |
end; |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5536 |
iterator:= iterator^.NextGear |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5537 |
end |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5538 |
end |
9bb85e43e492
add more checks on nil current hedgehog gear, remove checks on nil current hedgehog which should never happen.
nemo
parents:
15869
diff
changeset
|
5539 |
end; |
6450 | 5540 |
newPortal^.State := newPortal^.State and (not gstCollision); |
3569 | 5541 |
newPortal^.State := newPortal^.State or gstMoving; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5542 |
newPortal^.doStep := @doStepMovingPortal; |
3388
ab9352a4ddcc
Fix portal graphic name, continuing work on portal movement
nemo
parents:
3384
diff
changeset
|
5543 |
end; |
ab9352a4ddcc
Fix portal graphic name, continuing work on portal movement
nemo
parents:
3384
diff
changeset
|
5544 |
|
14587
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5545 |
procedure doStepPiano(Gear: PGear); |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5546 |
var valid: boolean; |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5547 |
HHGear: PGear; |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5548 |
begin |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5549 |
AllInactive := false; |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5550 |
valid := true; |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5551 |
|
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5552 |
if (Gear^.Hedgehog <> nil) and (Gear^.Hedgehog^.Gear <> nil) then |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5553 |
HHGear := Gear^.Hedgehog^.Gear; |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5554 |
|
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5555 |
if (WorldEdge = weBounce) then |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5556 |
if (hwRound(Gear^.X) - Gear^.Radius < leftX) then |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5557 |
valid := false |
14753
52916435d9b1
Fix right limit of piano placement in bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14719
diff
changeset
|
5558 |
else if (hwRound(Gear^.X) + Gear^.Radius > rightX) then |
14587
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5559 |
valid := false; |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5560 |
|
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5561 |
if (not valid) then |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5562 |
begin |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5563 |
if (HHGear <> nil) then |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5564 |
begin |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5565 |
HHGear^.Message := HHGear^.Message and (not gmAttack); |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5566 |
HHGear^.State := HHGear^.State and (not gstAttacking); |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5567 |
HHGear^.State := HHGear^.State or gstChooseTarget; |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5568 |
isCursorVisible := true; |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5569 |
end; |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5570 |
DeleteGear(Gear); |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5571 |
PlaySound(sndDenied); |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5572 |
exit; |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5573 |
end; |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5574 |
|
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5575 |
isCursorVisible := false; |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5576 |
if (HHGear <> nil) then |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5577 |
begin |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5578 |
PlaySoundV(sndIncoming, Gear^.Hedgehog^.Team^.voicepack); |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5579 |
// Tuck the hedgehog away until the piano attack is completed |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5580 |
Gear^.Hedgehog^.Unplaced:= true; |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5581 |
HHGear^.X:= _0; |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5582 |
HHGear^.Y:= _0; |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5583 |
end; |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5584 |
|
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5585 |
PauseMusic; |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5586 |
Gear^.doStep:= @doStepPianoWork; |
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5587 |
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
|
5588 |
//////////////////////////////////////////////////////////////////////////////// |
14587
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14586
diff
changeset
|
5589 |
procedure doStepPianoWork(Gear: PGear); |
8795 | 5590 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5591 |
r0, r1: LongInt; |
3728 | 5592 |
odY: hwFloat; |
3350 | 5593 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5594 |
AllInactive := false; |
13999
3ae88a9f9dca
If u play Piano, you can now hear the notes if sound effects OR music is enabled
Wuzzy <Wuzzy2@mail.ru>
parents:
13996
diff
changeset
|
5595 |
// Play piano notes with slot keys |
8795 | 5596 |
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
|
5597 |
((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
|
5598 |
begin |
13999
3ae88a9f9dca
If u play Piano, you can now hear the notes if sound effects OR music is enabled
Wuzzy <Wuzzy2@mail.ru>
parents:
13996
diff
changeset
|
5599 |
// Piano notes are played if sound OR music (or both) is enabled |
8795 | 5600 |
case CurrentHedgehog^.Gear^.MsgParam of |
13999
3ae88a9f9dca
If u play Piano, you can now hear the notes if sound effects OR music is enabled
Wuzzy <Wuzzy2@mail.ru>
parents:
13996
diff
changeset
|
5601 |
0: PlaySound(sndPiano0, false, false, true); |
3ae88a9f9dca
If u play Piano, you can now hear the notes if sound effects OR music is enabled
Wuzzy <Wuzzy2@mail.ru>
parents:
13996
diff
changeset
|
5602 |
1: PlaySound(sndPiano1, false, false, true); |
3ae88a9f9dca
If u play Piano, you can now hear the notes if sound effects OR music is enabled
Wuzzy <Wuzzy2@mail.ru>
parents:
13996
diff
changeset
|
5603 |
2: PlaySound(sndPiano2, false, false, true); |
3ae88a9f9dca
If u play Piano, you can now hear the notes if sound effects OR music is enabled
Wuzzy <Wuzzy2@mail.ru>
parents:
13996
diff
changeset
|
5604 |
3: PlaySound(sndPiano3, false, false, true); |
3ae88a9f9dca
If u play Piano, you can now hear the notes if sound effects OR music is enabled
Wuzzy <Wuzzy2@mail.ru>
parents:
13996
diff
changeset
|
5605 |
4: PlaySound(sndPiano4, false, false, true); |
3ae88a9f9dca
If u play Piano, you can now hear the notes if sound effects OR music is enabled
Wuzzy <Wuzzy2@mail.ru>
parents:
13996
diff
changeset
|
5606 |
5: PlaySound(sndPiano5, false, false, true); |
3ae88a9f9dca
If u play Piano, you can now hear the notes if sound effects OR music is enabled
Wuzzy <Wuzzy2@mail.ru>
parents:
13996
diff
changeset
|
5607 |
6: PlaySound(sndPiano6, false, false, true); |
3ae88a9f9dca
If u play Piano, you can now hear the notes if sound effects OR music is enabled
Wuzzy <Wuzzy2@mail.ru>
parents:
13996
diff
changeset
|
5608 |
7: PlaySound(sndPiano7, false, false, true); |
3ae88a9f9dca
If u play Piano, you can now hear the notes if sound effects OR music is enabled
Wuzzy <Wuzzy2@mail.ru>
parents:
13996
diff
changeset
|
5609 |
8: PlaySound(sndPiano8, false, false, true); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5610 |
end; |
15753
26247a74d823
Fix piano spawning vgtNote if slot key without sound was pressed
Wuzzy <Wuzzy2@mail.ru>
parents:
15746
diff
changeset
|
5611 |
if CurrentHedgehog^.Gear^.MsgParam <= 8 then |
26247a74d823
Fix piano spawning vgtNote if slot key without sound was pressed
Wuzzy <Wuzzy2@mail.ru>
parents:
15746
diff
changeset
|
5612 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtNote); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5613 |
CurrentHedgehog^.Gear^.MsgParam := 0; |
6450 | 5614 |
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
|
5615 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5616 |
|
14593
34e810295d08
Remove a bunch of dead out-commented code
Wuzzy <Wuzzy2@mail.ru>
parents:
14591
diff
changeset
|
5617 |
if (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
|
5618 |
begin |
3728 | 5619 |
Gear^.dY := Gear^.dY + cGravity * 2; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5620 |
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
|
5621 |
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
|
5622 |
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
|
5623 |
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
|
5624 |
OnUsedAmmo(CurrentHedgehog^); |
12292
93434ab299a0
Take sacrifices into account for the “Stupid” taunt
Wuzzy <almikes@aol.com>
parents:
12277
diff
changeset
|
5625 |
uStats.HedgehogSacrificed(CurrentHedgehog); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5626 |
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
|
5627 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5628 |
// 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
|
5629 |
CurrentHedgehog^.Gear^.Active := true; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5630 |
CurrentHedgehog^.Gear^.X := Gear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5631 |
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
|
5632 |
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
|
5633 |
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
|
5634 |
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
|
5635 |
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
|
5636 |
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
|
5637 |
ResumeMusic |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5638 |
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
|
5639 |
exit |
3351 | 5640 |
end; |
5641 |
||
3728 | 5642 |
odY:= Gear^.dY; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5643 |
doStepFallingGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5644 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5645 |
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
|
5646 |
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
|
5647 |
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
|
5648 |
OnUsedAmmo(CurrentHedgehog^); |
12292
93434ab299a0
Take sacrifices into account for the “Stupid” taunt
Wuzzy <almikes@aol.com>
parents:
12277
diff
changeset
|
5649 |
uStats.HedgehogSacrificed(CurrentHedgehog); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5650 |
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
|
5651 |
begin |
3419
b66a1b597f88
Add drown-the-playing-hog check for case of piano falling off the landscape.
nemo
parents:
3417
diff
changeset
|
5652 |
// 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
|
5653 |
CurrentHedgehog^.Gear^.Active := true; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5654 |
CurrentHedgehog^.Gear^.X := Gear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5655 |
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
|
5656 |
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
|
5657 |
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
|
5658 |
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
|
5659 |
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
|
5660 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5661 |
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
|
5662 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5663 |
else if (Gear^.State and gstCollision) <> 0 then |
3399 | 5664 |
begin |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
5665 |
r0 := GetRandom(Gear^.Boom div 4 + 1); |
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
5666 |
r1 := GetRandom(Gear^.Boom div 4 + 1); |
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
5667 |
doMakeExplosion(hwRound(Gear^.X) - 30 - r0, hwRound(Gear^.Y) + 40, Gear^.Boom div 2 + r1, Gear^.Hedgehog, 0); |
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
5668 |
doMakeExplosion(hwRound(Gear^.X) + 30 + r1, hwRound(Gear^.Y) + 40, Gear^.Boom div 2 + r0, Gear^.Hedgehog, 0); |
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
5669 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom + r0, Gear^.Hedgehog, EXPLAutoSound); |
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
|
5670 |
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
|
5671 |
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
|
5672 |
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
|
5673 |
Gear^.Pos := Gear^.Pos + 1; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5674 |
end |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5675 |
else |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5676 |
Gear^.dY := Gear^.dY + cGravity * 2; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5677 |
// let it fall faster so itdoesn't take too long for the whole attack |
3382 | 5678 |
end; |
3384 | 5679 |
|
5680 |
||
5681 |
//////////////////////////////////////////////////////////////////////////////// |
|
5682 |
procedure doStepSineGunShotWork(Gear: PGear); |
|
8795 | 5683 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5684 |
x, y, rX, rY, t, tmp, initHealth: LongInt; |
3384 | 5685 |
oX, oY, ldX, ldY, sdX, sdY, sine, lx, ly, amp: hwFloat; |
10657 | 5686 |
justCollided, justBounced: boolean; |
3384 | 5687 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5688 |
AllInactive := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5689 |
initHealth := Gear^.Health; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5690 |
lX := Gear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5691 |
lY := Gear^.Y; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5692 |
ldX := Gear^.dX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5693 |
ldY := Gear^.dY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5694 |
sdy := _0_5/Distance(Gear^.dX,Gear^.dY); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5695 |
ldX := ldX * sdy; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5696 |
ldY := ldY * sdy; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5697 |
sdY := hwAbs(ldX) + hwAbs(ldY); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5698 |
sdX := _1 - hwAbs(ldX/sdY); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5699 |
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
|
5700 |
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
|
5701 |
sdY := -sdY; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5702 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5703 |
// initial angle depends on current GameTicks |
7745 | 5704 |
t := getRandom(4096); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5705 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5706 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5707 |
// 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
|
5708 |
justCollided := false; |
10657 | 5709 |
// this variable is just to ensure we don't run in infinite loop due to precision errors |
5710 |
justBounced:= false; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5711 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5712 |
repeat |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5713 |
lX := lX + ldX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5714 |
lY := lY + ldY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5715 |
oX := Gear^.X; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5716 |
oY := Gear^.Y; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5717 |
rX := hwRound(oX); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5718 |
rY := hwRound(oY); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5719 |
tmp := t mod 4096; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5720 |
amp := _128 * (_1 - hwSqr(int2hwFloat(Gear^.Health)/initHealth)); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5721 |
sine := amp * AngleSin(tmp mod 2048); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5722 |
sine.isNegative := (tmp < 2048); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5723 |
Gear^.X := lX + (sine * sdX); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5724 |
Gear^.Y := ly + (sine * sdY); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5725 |
Gear^.dX := Gear^.X - oX; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5726 |
Gear^.dY := Gear^.Y - oY; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5727 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5728 |
x := hwRound(Gear^.X); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5729 |
y := hwRound(Gear^.Y); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5730 |
|
10652 | 5731 |
if WorldEdge = weWrap then |
5732 |
begin |
|
14303
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
14225
diff
changeset
|
5733 |
if x > rightX then |
10659 | 5734 |
repeat |
5735 |
dec(x, playWidth); |
|
5736 |
dec(rx, playWidth); |
|
14303
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
14225
diff
changeset
|
5737 |
until x <= rightX |
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
14225
diff
changeset
|
5738 |
else if x < leftX then |
10659 | 5739 |
repeat |
5740 |
inc(x, playWidth); |
|
5741 |
inc(rx, playWidth); |
|
14303
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
14225
diff
changeset
|
5742 |
until x >= leftX; |
10657 | 5743 |
end |
5744 |
else if (WorldEdge = weBounce) then |
|
5745 |
begin |
|
14303
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
14225
diff
changeset
|
5746 |
if (not justBounced) and ((x > rightX) or (x < leftX)) then |
10657 | 5747 |
begin |
5748 |
// reflect |
|
5749 |
lX:= lX - ldX + ((oX - lX) * 2); |
|
5750 |
lY:= lY - ldY; |
|
5751 |
Gear^.X:= oX; |
|
5752 |
Gear^.Y:= oY; |
|
5753 |
ldX.isNegative:= (not ldX.isNegative); |
|
5754 |
sdX.isNegative:= (not sdX.isNegative); |
|
5755 |
justBounced:= true; |
|
5756 |
continue; |
|
5757 |
end |
|
5758 |
else |
|
5759 |
justBounced:= false; |
|
10652 | 5760 |
end; |
5761 |
||
10657 | 5762 |
|
5763 |
inc(t,Gear^.Health div 313); |
|
5764 |
||
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5765 |
// if borders are on, stop outside land array |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5766 |
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
|
5767 |
begin |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5768 |
Gear^.Damage := 0; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5769 |
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
|
5770 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5771 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5772 |
begin |
10372 | 5773 |
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
|
5774 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5775 |
if ((y and LAND_HEIGHT_MASK) = 0) and ((x and LAND_WIDTH_MASK) = 0) |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
5776 |
and (LandGet(y, x) <> 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
|
5777 |
begin |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
5778 |
if ((GameFlags and gfSolidLand) <> 0) and (LandGet(y, x) > 255) then |
10118 | 5779 |
Gear^.Damage := initHealth |
5780 |
else if justCollided then |
|
5781 |
begin |
|
5782 |
Gear^.Damage := initHealth; |
|
5783 |
end |
|
5784 |
else |
|
5785 |
begin |
|
5786 |
inc(Gear^.Damage,3); |
|
5787 |
justCollided := true; |
|
5788 |
end; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5789 |
end |
3384 | 5790 |
else |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5791 |
justCollided := false; |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5792 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5793 |
// kick nearby hogs, dig tunnel and add some fire |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5794 |
// if at least 5 collisions occured |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5795 |
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
|
5796 |
begin |
10118 | 5797 |
if ((GameFlags and gfSolidLand) = 0) then |
5798 |
begin |
|
13566
acc69f506914
Use wrap-aware doMakeExplosion instead of DrawExplosion in uHandlersMess
Wuzzy <Wuzzy2@mail.ru>
parents:
13470
diff
changeset
|
5799 |
doMakeExplosion(rX,rY,Gear^.Radius, Gear^.Hedgehog, EXPLNoDamage or EXPLDoNotTouchAny or EXPLNoGfx); |
10118 | 5800 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5801 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5802 |
// kick nearby hogs |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
5803 |
AmmoShove(Gear, Gear^.Boom, 50); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5804 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5805 |
dec(Gear^.Health, Gear^.Damage); |
10118 | 5806 |
|
5807 |
// explode when impacting on solid land/borders |
|
5808 |
if Gear^.Damage >= initHealth then |
|
5809 |
begin |
|
5810 |
// add some random offset to angles |
|
5811 |
tmp := getRandom(256); |
|
5812 |
// spawn some flames |
|
5813 |
for t:= 0 to 3 do |
|
5814 |
begin |
|
5815 |
if not isZero(Gear^.dX) then rX := rx - hwSign(Gear^.dX); |
|
5816 |
if not isZero(Gear^.dY) then rY := ry - hwSign(Gear^.dY); |
|
5817 |
lX := AngleCos(tmp + t * 512) * _0_25 * (GetRandomf + _1); |
|
5818 |
lY := AngleSin(tmp + t * 512) * _0_25 * (GetRandomf + _1); |
|
5819 |
AddGear(rX, rY, gtFlame, 0, lX, lY, 0); |
|
5820 |
AddGear(rX, rY, gtFlame, 0, lX, -lY, 0); |
|
5821 |
end; |
|
5822 |
end |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5823 |
// add some fire to the tunnel |
10118 | 5824 |
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
|
5825 |
begin |
588eabb4b384
Apparently order of multiple getrandom in params is undefined. Also remove broken and pointless getrandom call.
nemo
parents:
7389
diff
changeset
|
5826 |
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
|
5827 |
AddGear(x - Gear^.Radius + tmp, y - GetRandom(Gear^.Radius + 1), gtFlame, gsttmpFlag, _0, _0, 0) |
10118 | 5828 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5829 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5830 |
|
10118 | 5831 |
Gear^.Damage := 0; |
5832 |
||
7391
588eabb4b384
Apparently order of multiple getrandom in params is undefined. Also remove broken and pointless getrandom call.
nemo
parents:
7389
diff
changeset
|
5833 |
if random(100) = 0 then |
8795 | 5834 |
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
|
5835 |
end |
10118 | 5836 |
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
|
5837 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5838 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5839 |
dec(Gear^.Health); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5840 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5841 |
// 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
|
5842 |
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
|
5843 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5844 |
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
|
5845 |
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
|
5846 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5847 |
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
|
5848 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5849 |
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
|
5850 |
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
|
5851 |
end |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5852 |
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
|
5853 |
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
|
5854 |
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
|
5855 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5856 |
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
|
5857 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5858 |
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
|
5859 |
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
|
5860 |
end; |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5861 |
until (Gear^.Health <= 0); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5862 |
|
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5863 |
DeleteGear(Gear); |
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5864 |
AfterAttack; |
3384 | 5865 |
end; |
5866 |
||
5867 |
procedure doStepSineGunShot(Gear: PGear); |
|
7745 | 5868 |
var |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5869 |
HHGear: PGear; |
3384 | 5870 |
begin |
8795 | 5871 |
PlaySound(sndSineGun); |
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5872 |
|
11551 | 5873 |
if (Gear^.Hedgehog <> nil) and (Gear^.Hedgehog^.Gear <> nil) then |
5874 |
begin |
|
5875 |
HHGear := Gear^.Hedgehog^.Gear; |
|
5876 |
// push the shooting Hedgehog back |
|
5877 |
Gear^.dX.isNegative := not Gear^.dX.isNegative; |
|
5878 |
Gear^.dY.isNegative := not Gear^.dY.isNegative; |
|
5879 |
HHGear^.dX := Gear^.dX; |
|
5880 |
HHGear^.dY := Gear^.dY; |
|
13806
506cca5a48cb
Fix sinegun dealing 1 damage when shooting straight up. Reduces sine gun knockback strength by 1.25%
alfadur
parents:
13760
diff
changeset
|
5881 |
AmmoShove(Gear, 0, 79); |
11551 | 5882 |
Gear^.dX.isNegative := not Gear^.dX.isNegative; |
5883 |
Gear^.dY.isNegative := not Gear^.dY.isNegative; |
|
5884 |
end; |
|
3454
a9bef74bd6e0
Code restlyling: experimental restyling of one module
mbait
parents:
3440
diff
changeset
|
5885 |
|
4034
634a8c8682de
add some phone rumbling to big explosions, airbomb and sinegun
koda
parents:
4026
diff
changeset
|
5886 |
Gear^.doStep := @doStepSineGunShotWork; |
9954 | 5887 |
{$IFNDEF PAS2C} |
8204 | 5888 |
with mobileRecord do |
5889 |
if (performRumble <> nil) and (not fastUntilLag) then |
|
5890 |
performRumble(kSystemSoundID_Vibrate); |
|
9954 | 5891 |
{$ENDIF} |
3384 | 5892 |
end; |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5893 |
|
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5894 |
//////////////////////////////////////////////////////////////////////////////// |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5895 |
procedure doStepFlamethrowerWork(Gear: PGear); |
8795 | 5896 |
var |
7281 | 5897 |
HHGear, flame: PGear; |
3485 | 5898 |
rx, ry, speed: hwFloat; |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5899 |
i, gX, gY: LongInt; |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5900 |
begin |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5901 |
AllInactive := false; |
4365 | 5902 |
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
|
5903 |
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
|
5904 |
begin |
14004 | 5905 |
StopSoundChan(Gear^.SoundChannel, 300); |
10831
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
5906 |
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
|
5907 |
exit |
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
5908 |
end; |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5909 |
HedgehogChAngle(HHGear); |
3484 | 5910 |
gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle); |
5911 |
gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle); |
|
8795 | 5912 |
|
3485 | 5913 |
if (GameTicks and $FF) = 0 then |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5914 |
begin |
3894 | 5915 |
if (HHGear^.Message and gmRight) <> 0 then |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5916 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5917 |
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
|
5918 |
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
|
5919 |
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
|
5920 |
dec(Gear^.Tag); |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5921 |
end |
3894 | 5922 |
else if (HHGear^.Message and gmLeft) <> 0 then |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5923 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
5924 |
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
|
5925 |
dec(Gear^.Tag) |
8795 | 5926 |
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
|
5927 |
inc(Gear^.Tag); |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5928 |
end |
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5929 |
end; |
8795 | 5930 |
|
3485 | 5931 |
dec(Gear^.Timer); |
5932 |
if Gear^.Timer = 0 then |
|
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5933 |
begin |
3485 | 5934 |
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
|
5935 |
if (Gear^.Health mod 5) = 0 then |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5936 |
begin |
7001 | 5937 |
rx := rndSign(getRandomf * _0_1); |
5938 |
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
|
5939 |
speed := _0_5 * (_10 / Gear^.Tag); |
8795 | 5940 |
|
7281 | 5941 |
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
|
5942 |
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
|
5943 |
AngleCos(HHGear^.Angle) * ( - speed) + ry, 0); |
13469
f1d349a52bc7
Refactor: lfCurrentHog→lfCurHogCrate, lfNotCurrentMask→lfNotCurHogCrate
Wuzzy <Wuzzy2@mail.ru>
parents:
13408
diff
changeset
|
5944 |
flame^.CollisionMask:= lfNotCurHogCrate; |
8795 | 5945 |
|
6131 | 5946 |
if (Gear^.Health mod 30) = 0 then |
7281 | 5947 |
begin |
5948 |
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
|
5949 |
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
|
5950 |
AngleCos(HHGear^.Angle) * ( - speed) + ry, 0); |
13469
f1d349a52bc7
Refactor: lfCurrentHog→lfCurHogCrate, lfNotCurrentMask→lfNotCurHogCrate
Wuzzy <Wuzzy2@mail.ru>
parents:
13408
diff
changeset
|
5951 |
flame^.CollisionMask:= lfNotCurHogCrate; |
7281 | 5952 |
end |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5953 |
end; |
3485 | 5954 |
Gear^.Timer:= Gear^.Tag |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5955 |
end; |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5956 |
|
7539 | 5957 |
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
|
5958 |
begin |
14019
23fb123bd70c
Clear gmLeft/gmRight after using landspray/flamethrower to prevent accidental walking
Wuzzy <Wuzzy2@mail.ru>
parents:
14017
diff
changeset
|
5959 |
HHGear^.Message:= HHGear^.Message and (not (gmAttack or gmLeft or gmRight)); |
10831
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
5960 |
HHGear^.State := HHGear^.State and (not gstNotKickable); |
14004 | 5961 |
StopSoundChan(Gear^.SoundChannel, 300); |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5962 |
DeleteGear(Gear); |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5963 |
AfterAttack |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5964 |
end |
3485 | 5965 |
else |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5966 |
begin |
4256 | 5967 |
i:= Gear^.Health div 5; |
15381
c117e17b90bc
flag some of the renderstringtex which are taking up a ton of processing time with --stats-only and pas2c
nemo
parents:
15354
diff
changeset
|
5968 |
if (not cOnlyStats) and (i <> Gear^.Damage) and ((GameTicks and $3F) = 0) then |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5969 |
begin |
4258 | 5970 |
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
|
5971 |
FreeAndNilTexture(Gear^.Tex); |
13898 | 5972 |
Gear^.Tex := RenderStringTex(FormatA(trmsg[sidFuel], ansistring(inttostr(i))), |
13640
cb0191394133
Use full string for sidFuel and avoid string concatenation
Wuzzy <Wuzzy2@mail.ru>
parents:
13624
diff
changeset
|
5973 |
cWhiteColor, fntSmall) |
4254
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5974 |
end |
47515c926984
only update flamethrower texture when the percentage changes
nemo
parents:
4246
diff
changeset
|
5975 |
end |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5976 |
end; |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5977 |
|
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5978 |
procedure doStepFlamethrower(Gear: PGear); |
8795 | 5979 |
var |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5980 |
HHGear: PGear; |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5981 |
begin |
4365 | 5982 |
HHGear := Gear^.Hedgehog^.Gear; |
6450 | 5983 |
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
|
5984 |
HHGear^.State := HHGear^.State or gstNotKickable; |
14653
5132548cdb77
Add workaround around an SDL_mixer bug that screws up volume after using flamethrower (bug 721)
Wuzzy <Wuzzy2@mail.ru>
parents:
14637
diff
changeset
|
5985 |
(* NOTE: Flamethrower sound is supposed to start instantly (no fade in), |
5132548cdb77
Add workaround around an SDL_mixer bug that screws up volume after using flamethrower (bug 721)
Wuzzy <Wuzzy2@mail.ru>
parents:
14637
diff
changeset
|
5986 |
but this would cause the game volume to screw up because of a bug in SDL_mixer: |
5132548cdb77
Add workaround around an SDL_mixer bug that screws up volume after using flamethrower (bug 721)
Wuzzy <Wuzzy2@mail.ru>
parents:
14637
diff
changeset
|
5987 |
https://bugzilla.libsdl.org/show_bug.cgi?id=4205 |
5132548cdb77
Add workaround around an SDL_mixer bug that screws up volume after using flamethrower (bug 721)
Wuzzy <Wuzzy2@mail.ru>
parents:
14637
diff
changeset
|
5988 |
As workaround, a tiny fade-in delay was added. |
5132548cdb77
Add workaround around an SDL_mixer bug that screws up volume after using flamethrower (bug 721)
Wuzzy <Wuzzy2@mail.ru>
parents:
14637
diff
changeset
|
5989 |
FIXME: Remove the fade-in delay argument when the SDL bug has been fixed. *) |
5132548cdb77
Add workaround around an SDL_mixer bug that screws up volume after using flamethrower (bug 721)
Wuzzy <Wuzzy2@mail.ru>
parents:
14637
diff
changeset
|
5990 |
Gear^.SoundChannel := LoopSound(sndFlamethrower, 20); |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5991 |
Gear^.doStep := @doStepFlamethrowerWork |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5992 |
end; |
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3475
diff
changeset
|
5993 |
|
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
|
5994 |
//////////////////////////////////////////////////////////////////////////////// |
5024 | 5995 |
procedure doStepLandGunWork(Gear: PGear); |
8795 | 5996 |
var |
7281 | 5997 |
HHGear, land: PGear; |
5024 | 5998 |
rx, ry, speed: hwFloat; |
5999 |
i, gX, gY: LongInt; |
|
6000 |
begin |
|
6001 |
AllInactive := false; |
|
6002 |
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
|
6003 |
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
|
6004 |
begin |
14006 | 6005 |
StopSoundChan(gear^.SoundChannel); |
10831
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
6006 |
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
|
6007 |
exit |
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
6008 |
end; |
5024 | 6009 |
HedgehogChAngle(HHGear); |
6010 |
gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle); |
|
6011 |
gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle); |
|
8795 | 6012 |
|
5024 | 6013 |
if (GameTicks and $FF) = 0 then |
6014 |
begin |
|
6015 |
if (HHGear^.Message and gmRight) <> 0 then |
|
6016 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
6017 |
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
|
6018 |
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
|
6019 |
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
|
6020 |
dec(Gear^.Tag); |
5024 | 6021 |
end |
6022 |
else if (HHGear^.Message and gmLeft) <> 0 then |
|
6023 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
6024 |
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
|
6025 |
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
|
6026 |
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
|
6027 |
inc(Gear^.Tag); |
5024 | 6028 |
end |
6029 |
end; |
|
8795 | 6030 |
|
5024 | 6031 |
dec(Gear^.Timer); |
6032 |
if Gear^.Timer = 0 then |
|
6033 |
begin |
|
6034 |
dec(Gear^.Health); |
|
5480 | 6035 |
|
7001 | 6036 |
rx := rndSign(getRandomf * _0_1); |
6037 |
ry := rndSign(getRandomf * _0_1); |
|
5480 | 6038 |
speed := (_3 / Gear^.Tag); |
6039 |
||
8795 | 6040 |
land:= AddGear(gx, gy, gtFlake, gstTmpFlag, |
6041 |
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
|
6042 |
AngleCos(HHGear^.Angle) * ( - speed) + ry, 0); |
13469
f1d349a52bc7
Refactor: lfCurrentHog→lfCurHogCrate, lfNotCurrentMask→lfNotCurHogCrate
Wuzzy <Wuzzy2@mail.ru>
parents:
13408
diff
changeset
|
6043 |
land^.CollisionMask:= lfNotCurHogCrate; |
8795 | 6044 |
|
5024 | 6045 |
Gear^.Timer:= Gear^.Tag |
6046 |
end; |
|
6047 |
||
7539 | 6048 |
if (Gear^.Health = 0) or ((HHGear^.State and gstHHDriven) = 0) or ((HHGear^.Message and gmAttack) <> 0) then |
5024 | 6049 |
begin |
14019
23fb123bd70c
Clear gmLeft/gmRight after using landspray/flamethrower to prevent accidental walking
Wuzzy <Wuzzy2@mail.ru>
parents:
14017
diff
changeset
|
6050 |
HHGear^.Message:= HHGear^.Message and (not (gmAttack or gmLeft or gmRight)); |
10831
19d056c10bbd
Clear flag set by gear on gear deletion. Also added a few more nil checks on HHGear
nemo
parents:
10827
diff
changeset
|
6051 |
HHGear^.State := HHGear^.State and (not gstNotKickable); |
14006 | 6052 |
StopSoundChan(gear^.SoundChannel); |
5024 | 6053 |
DeleteGear(Gear); |
6054 |
AfterAttack |
|
6055 |
end |
|
6056 |
else |
|
6057 |
begin |
|
6058 |
i:= Gear^.Health div 10; |
|
15381
c117e17b90bc
flag some of the renderstringtex which are taking up a ton of processing time with --stats-only and pas2c
nemo
parents:
15354
diff
changeset
|
6059 |
if (not cOnlyStats) and (i <> Gear^.Damage) and ((GameTicks and $3F) = 0) then |
5024 | 6060 |
begin |
6061 |
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
|
6062 |
FreeAndNilTexture(Gear^.Tex); |
13898 | 6063 |
Gear^.Tex := RenderStringTex(FormatA(trmsg[sidFuel], ansistring(inttostr(i))), |
13640
cb0191394133
Use full string for sidFuel and avoid string concatenation
Wuzzy <Wuzzy2@mail.ru>
parents:
13624
diff
changeset
|
6064 |
cWhiteColor, fntSmall) |
5024 | 6065 |
end |
6066 |
end |
|
6067 |
end; |
|
6068 |
||
6069 |
procedure doStepLandGun(Gear: PGear); |
|
8795 | 6070 |
var |
5024 | 6071 |
HHGear: PGear; |
6072 |
begin |
|
6073 |
HHGear := Gear^.Hedgehog^.Gear; |
|
6450 | 6074 |
HHGear^.Message := HHGear^.Message and (not (gmUp or gmDown or gmLeft or gmRight or gmAttack)); |
5024 | 6075 |
HHGear^.State := HHGear^.State or gstNotKickable; |
14006 | 6076 |
Gear^.SoundChannel := LoopSound(sndLandGun); |
5024 | 6077 |
Gear^.doStep := @doStepLandGunWork |
6078 |
end; |
|
6079 |
||
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
|
6080 |
//////////////////////////////////////////////////////////////////////////////// |
3712 | 6081 |
procedure doStepPoisonCloud(Gear: PGear); |
6082 |
begin |
|
11236 | 6083 |
// don't bounce |
6084 |
if WorldEdge <> weBounce then |
|
6085 |
WorldWrap(Gear); |
|
3712 | 6086 |
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
|
6087 |
begin |
3712 | 6088 |
DeleteGear(Gear); |
6089 |
exit |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
6090 |
end; |
3712 | 6091 |
dec(Gear^.Timer); |
6092 |
Gear^.X:= Gear^.X + Gear^.dX; |
|
6093 |
Gear^.Y:= Gear^.Y + Gear^.dY; |
|
3713 | 6094 |
Gear^.dX := Gear^.dX + cWindSpeed / 4; |
3712 | 6095 |
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
|
6096 |
if (GameTicks and $FF) = 0 then |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
6097 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLDontDraw or EXPLNoGfx or EXPLNoDamage or EXPLDoNotTouchAny or EXPLPoisoned); |
9817 | 6098 |
if Gear^.State and gstTmpFlag = 0 then |
6099 |
AllInactive:= false; |
|
3717 | 6100 |
end; |
6101 |
||
6102 |
//////////////////////////////////////////////////////////////////////////////// |
|
6103 |
procedure doStepHammer(Gear: PGear); |
|
3720 | 6104 |
var HHGear, tmp, tmp2: PGear; |
3717 | 6105 |
t: PGearArray; |
12621 | 6106 |
i, dmg: LongInt; |
3717 | 6107 |
begin |
4365 | 6108 |
HHGear:= Gear^.Hedgehog^.Gear; |
3717 | 6109 |
HHGear^.State:= HHGear^.State or gstNoDamage; |
6110 |
DeleteCI(HHGear); |
|
11044
c3d76daae637
this should prevent hogs from hovering in air after using hammer
sheepluva
parents:
11042
diff
changeset
|
6111 |
SetLittle(HHGear^.dY); |
c3d76daae637
this should prevent hogs from hovering in air after using hammer
sheepluva
parents:
11042
diff
changeset
|
6112 |
HHGear^.dY.IsNegative:= true; |
c3d76daae637
this should prevent hogs from hovering in air after using hammer
sheepluva
parents:
11042
diff
changeset
|
6113 |
HHGear^.State:= HHGear^.State or gstMoving; |
3717 | 6114 |
|
6115 |
t:= CheckGearsCollision(Gear); |
|
3720 | 6116 |
|
6117 |
for i:= 5 downto 0 do |
|
6118 |
AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust); |
|
6119 |
||
3717 | 6120 |
i:= t^.Count; |
6121 |
while i > 0 do |
|
6122 |
begin |
|
6123 |
dec(i); |
|
6124 |
tmp:= t^.ar[i]; |
|
6125 |
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
|
6126 |
if (tmp^.Kind = gtHedgehog) or (tmp^.Kind = gtMine) or (tmp^.Kind = gtExplosives) then |
3717 | 6127 |
begin |
11042 | 6128 |
dmg:= 0; |
15764
0b5aea8e5eab
Fix hammer not digging when hitting hog with 0 health
Wuzzy <Wuzzy2@mail.ru>
parents:
15763
diff
changeset
|
6129 |
if (tmp^.Kind <> gtHedgehog) or |
0b5aea8e5eab
Fix hammer not digging when hitting hog with 0 health
Wuzzy <Wuzzy2@mail.ru>
parents:
15763
diff
changeset
|
6130 |
((tmp^.Hedgehog^.Effects[heInvulnerable] = 0) and ((tmp^.State and gstHHDeath) = 0)) then |
11039
cd4b0851b060
Hammer changes/fixes: honor extra-damage (Issue 975), round up damage, do correct damage when being spammed in infinite-attack mode
sheepluva
parents:
11020
diff
changeset
|
6131 |
begin |
cd4b0851b060
Hammer changes/fixes: honor extra-damage (Issue 975), round up damage, do correct damage when being spammed in infinite-attack mode
sheepluva
parents:
11020
diff
changeset
|
6132 |
// base damage on remaining health |
cd4b0851b060
Hammer changes/fixes: honor extra-damage (Issue 975), round up damage, do correct damage when being spammed in infinite-attack mode
sheepluva
parents:
11020
diff
changeset
|
6133 |
dmg:= (tmp^.Health - tmp^.Damage); |
15764
0b5aea8e5eab
Fix hammer not digging when hitting hog with 0 health
Wuzzy <Wuzzy2@mail.ru>
parents:
15763
diff
changeset
|
6134 |
// always rounding down |
0b5aea8e5eab
Fix hammer not digging when hitting hog with 0 health
Wuzzy <Wuzzy2@mail.ru>
parents:
15763
diff
changeset
|
6135 |
dmg:= dmg div Gear^.Boom; |
0b5aea8e5eab
Fix hammer not digging when hitting hog with 0 health
Wuzzy <Wuzzy2@mail.ru>
parents:
15763
diff
changeset
|
6136 |
|
11039
cd4b0851b060
Hammer changes/fixes: honor extra-damage (Issue 975), round up damage, do correct damage when being spammed in infinite-attack mode
sheepluva
parents:
11020
diff
changeset
|
6137 |
if dmg > 0 then |
15764
0b5aea8e5eab
Fix hammer not digging when hitting hog with 0 health
Wuzzy <Wuzzy2@mail.ru>
parents:
15763
diff
changeset
|
6138 |
ApplyDamage(tmp, CurrentHedgehog, dmg, dsHammer); |
0b5aea8e5eab
Fix hammer not digging when hitting hog with 0 health
Wuzzy <Wuzzy2@mail.ru>
parents:
15763
diff
changeset
|
6139 |
tmp^.dY:= _0_03 * Gear^.Boom |
11042 | 6140 |
end; |
6141 |
||
15764
0b5aea8e5eab
Fix hammer not digging when hitting hog with 0 health
Wuzzy <Wuzzy2@mail.ru>
parents:
15763
diff
changeset
|
6142 |
if ((tmp^.Kind = gtHedgehog) and ((tmp^.State and gstHHDeath) = 0)) or (tmp^.Health > tmp^.Damage) then |
11042 | 6143 |
begin |
6144 |
tmp2:= AddGear(hwRound(tmp^.X), hwRound(tmp^.Y), gtHammerHit, 0, _0, _0, 0); |
|
6145 |
tmp2^.LinkedGear:= tmp; |
|
6146 |
SetAllToActive |
|
6147 |
end; |
|
11039
cd4b0851b060
Hammer changes/fixes: honor extra-damage (Issue 975), round up damage, do correct damage when being spammed in infinite-attack mode
sheepluva
parents:
11020
diff
changeset
|
6148 |
end; |
3717 | 6149 |
end; |
6150 |
||
6450 | 6151 |
HHGear^.State:= HHGear^.State and (not gstNoDamage); |
3717 | 6152 |
Gear^.Timer:= 250; |
6153 |
Gear^.doStep:= @doStepIdle |
|
6154 |
end; |
|
3720 | 6155 |
|
6156 |
procedure doStepHammerHitWork(Gear: PGear); |
|
8795 | 6157 |
var |
5628 | 6158 |
i, j, ei: LongInt; |
5624
b6f70f6335ee
Allow hammer to bash mines/barrels too, increase escape time to 3s
nemo
parents:
5612
diff
changeset
|
6159 |
HitGear: PGear; |
3720 | 6160 |
begin |
6161 |
AllInactive := false; |
|
7272
71df899c4163
Second part of the change. Make collision check use the new mask bit.
nemo
parents:
7270
diff
changeset
|
6162 |
HitGear := Gear^.LinkedGear; |
3720 | 6163 |
dec(Gear^.Timer); |
5624
b6f70f6335ee
Allow hammer to bash mines/barrels too, increase escape time to 3s
nemo
parents:
5612
diff
changeset
|
6164 |
if (HitGear = nil) or (Gear^.Timer = 0) or ((Gear^.Message and gmDestroy) <> 0) then |
5628 | 6165 |
begin |
3720 | 6166 |
DeleteGear(Gear); |
6167 |
exit |
|
5628 | 6168 |
end; |
3720 | 6169 |
|
6170 |
if (Gear^.Timer mod 5) = 0 then |
|
5628 | 6171 |
begin |
3720 | 6172 |
AddVisualGear(hwRound(Gear^.X) - 5 + Random(10), hwRound(Gear^.Y) + 12, vgtDust); |
6173 |
||
5628 | 6174 |
i := hwRound(Gear^.X) - HitGear^.Radius + 2; |
6175 |
ei := hwRound(Gear^.X) + HitGear^.Radius - 2; |
|
13604
73b096e1d895
Fix hammer/pickhammer not digging land with gfSolidLand on
Wuzzy <Wuzzy2@mail.ru>
parents:
13603
diff
changeset
|
6176 |
for j := 1 to 4 do doMakeExplosion(i - GetRandom(5), hwRound(Gear^.Y) + 6*j, 3, Gear^.Hedgehog, EXPLNoDamage or EXPLDoNotTouchAny or EXPLNoGfx or EXPLForceDraw); |
73b096e1d895
Fix hammer/pickhammer not digging land with gfSolidLand on
Wuzzy <Wuzzy2@mail.ru>
parents:
13603
diff
changeset
|
6177 |
for j := 1 to 4 do doMakeExplosion(ei + LongInt(GetRandom(5)), hwRound(Gear^.Y) + 6*j, 3, Gear^.Hedgehog, EXPLNoDamage or EXPLDoNotTouchAny or EXPLNoGfx or EXPLForceDraw); |
3720 | 6178 |
while i <= ei do |
5628 | 6179 |
begin |
13604
73b096e1d895
Fix hammer/pickhammer not digging land with gfSolidLand on
Wuzzy <Wuzzy2@mail.ru>
parents:
13603
diff
changeset
|
6180 |
for j := 1 to 11 do doMakeExplosion(i, hwRound(Gear^.Y) + 3*j, 3, Gear^.Hedgehog, EXPLNoDamage or EXPLDoNotTouchAny or EXPLNoGfx or EXPLForceDraw); |
3720 | 6181 |
inc(i, 1) |
5628 | 6182 |
end; |
3720 | 6183 |
|
6184 |
if CheckLandValue(hwRound(Gear^.X + Gear^.dX + SignAs(_6,Gear^.dX)), hwRound(Gear^.Y + _1_9) |
|
13603 | 6185 |
, lfIndestructible) then |
6186 |
begin |
|
6187 |
Gear^.Y := Gear^.Y + _1_9 |
|
6188 |
end; |
|
3720 | 6189 |
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
|
6190 |
if TestCollisionYwithGear(Gear, 1) <> 0 then |
5628 | 6191 |
begin |
3720 | 6192 |
Gear^.dY := _0; |
5624
b6f70f6335ee
Allow hammer to bash mines/barrels too, increase escape time to 3s
nemo
parents:
5612
diff
changeset
|
6193 |
SetLittle(HitGear^.dX); |
b6f70f6335ee
Allow hammer to bash mines/barrels too, increase escape time to 3s
nemo
parents:
5612
diff
changeset
|
6194 |
HitGear^.dY := _0; |
5628 | 6195 |
end |
3720 | 6196 |
else |
5628 | 6197 |
begin |
10354 | 6198 |
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
|
6199 |
Gear^.Timer := 1 |
5628 | 6200 |
end; |
3720 | 6201 |
|
5624
b6f70f6335ee
Allow hammer to bash mines/barrels too, increase escape time to 3s
nemo
parents:
5612
diff
changeset
|
6202 |
HitGear^.X := Gear^.X; |
8634
5dcb1dc9e01b
fix portal/hammer interaction, ban freezer from portal
nemo
parents:
8632
diff
changeset
|
6203 |
HitGear^.Y := Gear^.Y; |
5628 | 6204 |
SetLittle(HitGear^.dY); |
6205 |
HitGear^.Active:= true; |
|
3720 | 6206 |
end; |
6207 |
||
6208 |
procedure doStepHammerHit(Gear: PGear); |
|
8795 | 6209 |
var |
3720 | 6210 |
i, y: LongInt; |
6211 |
ar: TRangeArray; |
|
6212 |
HHGear: PGear; |
|
6213 |
begin |
|
6214 |
i := 0; |
|
4365 | 6215 |
HHGear := Gear^.Hedgehog^.Gear; |
3720 | 6216 |
|
6217 |
y := hwRound(Gear^.Y) - cHHRadius * 2; |
|
6218 |
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
|
6219 |
begin |
3720 | 6220 |
ar[i].Left := hwRound(Gear^.X) - Gear^.Radius - LongInt(GetRandom(2)); |
6221 |
ar[i].Right := hwRound(Gear^.X) + Gear^.Radius + LongInt(GetRandom(2)); |
|
6222 |
inc(y, 2); |
|
6223 |
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
|
6224 |
end; |
3720 | 6225 |
|
6226 |
DrawHLinesExplosions(@ar, 3, hwRound(Gear^.Y) - cHHRadius * 2, 2, Pred(i)); |
|
6227 |
Gear^.dY := HHGear^.dY; |
|
6228 |
DeleteCI(HHGear); |
|
6229 |
||
6230 |
doStepHammerHitWork(Gear); |
|
3821 | 6231 |
Gear^.doStep := @doStepHammerHitWork |
3720 | 6232 |
end; |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6233 |
|
4293
d79ffcdd77df
makes drill attack drills weaker and not affected by wind
Henek
parents:
4282
diff
changeset
|
6234 |
//////////////////////////////////////////////////////////////////////////////// |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6235 |
procedure doStepResurrectorWork(Gear: PGear); |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6236 |
var |
7335 | 6237 |
graves: PGearArrayS; |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6238 |
resgear: PGear; |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6239 |
hh: PHedgehog; |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6240 |
i: LongInt; |
12169
869cf5f34700
More ticker messages: Sick, king died, resurrect, time box return, timeout, kamikaze
Wuzzy <almikes@aol.com>
parents:
12120
diff
changeset
|
6241 |
s: ansistring; |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6242 |
begin |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6243 |
AllInactive := false; |
4365 | 6244 |
hh := Gear^.Hedgehog; |
4387 | 6245 |
|
6131 | 6246 |
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
|
6247 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
6248 |
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
|
6249 |
exit; |
8795 | 6250 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
6251 |
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
|
6252 |
exit; |
4017
048bcb8c72ae
Kill off hog immediately on using up health, use more common formatting, call render less often
nemo
parents:
4005
diff
changeset
|
6253 |
|
6131 | 6254 |
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
|
6255 |
begin |
4023
8de77872ef21
Resurrector: Levitate hog + show cross
Tobias Neumann <mail@tobias-neumann.eu>
parents:
4021
diff
changeset
|
6256 |
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
|
6257 |
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
|
6258 |
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
|
6259 |
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
|
6260 |
|
4184
bc2b88eea8c4
fix stray offset in resurrector, make resurrector use time
nemo
parents:
4182
diff
changeset
|
6261 |
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
|
6262 |
|
7335 | 6263 |
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
|
6264 |
begin |
7053 | 6265 |
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
|
6266 |
Gear^.Timer := 250; |
3f605cca9215
Resurrector weapon: do not make it end turn, add description,
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3971
diff
changeset
|
6267 |
Gear^.doStep := @doStepIdle; |
3f605cca9215
Resurrector weapon: do not make it end turn, add description,
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3971
diff
changeset
|
6268 |
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
|
6269 |
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
|
6270 |
|
6131 | 6271 |
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
|
6272 |
begin |
7721 | 6273 |
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
|
6274 |
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
|
6275 |
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
|
6276 |
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
|
6277 |
RenderHealth(hh^); |
7399 | 6278 |
RecountTeamHealth(hh^.Team); |
7335 | 6279 |
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
|
6280 |
inc(Gear^.Tag) |
8795 | 6281 |
end |
6282 |
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
|
6283 |
begin |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6284 |
// now really resurrect the hogs with the hp saved in the graves |
7335 | 6285 |
for i:= 0 to graves.size - 1 do |
6286 |
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
|
6287 |
begin |
11203 | 6288 |
resgear := AddGear(hwRound(graves.ar^[i]^.X), hwRound(graves.ar^[i]^.Y), gtHedgehog, gstWait, _0, _0, 0,graves.ar^[i]^.Pos); |
7335 | 6289 |
resgear^.Hedgehog := graves.ar^[i]^.Hedgehog; |
6290 |
resgear^.Health := graves.ar^[i]^.Health; |
|
6291 |
PHedgehog(graves.ar^[i]^.Hedgehog)^.Gear := resgear; |
|
7394 | 6292 |
graves.ar^[i]^.Message:= graves.ar^[i]^.Message or gmDestroy; |
7399 | 6293 |
graves.ar^[i]^.Active:= true; |
4372 | 6294 |
RenderHealth(resgear^.Hedgehog^); |
6295 |
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
|
6296 |
resgear^.Hedgehog^.Effects[heResurrected]:= 1; |
14419
87562a68c41f
Fix some King Mode bugs causing minions not always being properly killed
Wuzzy <Wuzzy2@mail.ru>
parents:
14379
diff
changeset
|
6297 |
if resgear^.Hedgehog^.King then |
87562a68c41f
Fix some King Mode bugs causing minions not always being properly killed
Wuzzy <Wuzzy2@mail.ru>
parents:
14379
diff
changeset
|
6298 |
resgear^.Hedgehog^.Team^.hasKing:= true; |
13760
b1177e9c9ee9
Fix player rankings getting confused if a clan was revived
Wuzzy <Wuzzy2@mail.ru>
parents:
13739
diff
changeset
|
6299 |
{ Reviving a hog implies its clan is now alive, too. } |
b1177e9c9ee9
Fix player rankings getting confused if a clan was revived
Wuzzy <Wuzzy2@mail.ru>
parents:
13739
diff
changeset
|
6300 |
resgear^.Hedgehog^.Team^.Clan^.DeathLogged:= false; |
14637
4638aa2ea8f2
Update clan passive status when team died / got resurrected
Wuzzy <Wuzzy2@mail.ru>
parents:
14595
diff
changeset
|
6301 |
if (not resgear^.Hedgehog^.Team^.Passive) then |
4638aa2ea8f2
Update clan passive status when team died / got resurrected
Wuzzy <Wuzzy2@mail.ru>
parents:
14595
diff
changeset
|
6302 |
resgear^.Hedgehog^.Team^.Clan^.Passive:= false; |
12169
869cf5f34700
More ticker messages: Sick, king died, resurrect, time box return, timeout, kamikaze
Wuzzy <almikes@aol.com>
parents:
12120
diff
changeset
|
6303 |
s:= ansistring(resgear^.Hedgehog^.Name); |
13642
3d14950641a4
Refactor text color variable names, export 2 color values to Lua
Wuzzy <Wuzzy2@mail.ru>
parents:
13640
diff
changeset
|
6304 |
AddCaption(FormatA(GetEventString(eidResurrected), s), capcolDefault, capgrpMessage); |
4874 | 6305 |
// only make hat-less hedgehogs look like zombies, preserve existing hats |
7394 | 6306 |
|
4372 | 6307 |
if resgear^.Hedgehog^.Hat = 'NoHat' then |
7754 | 6308 |
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
|
6309 |
end; |
4023
8de77872ef21
Resurrector: Levitate hog + show cross
Tobias Neumann <mail@tobias-neumann.eu>
parents:
4021
diff
changeset
|
6310 |
|
15716
2a69c6693fbb
Fix hog sometimes not falling after using resurrector
Wuzzy <Wuzzy2@mail.ru>
parents:
15699
diff
changeset
|
6311 |
hh^.Gear^.dY := -cLittle; |
4045 | 6312 |
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
|
6313 |
doStepHedgehogMoving(hh^.Gear); |
7053 | 6314 |
StopSoundChan(Gear^.SoundChannel); |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6315 |
Gear^.Timer := 250; |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6316 |
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
|
6317 |
end |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6318 |
end; |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6319 |
|
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6320 |
procedure doStepResurrector(Gear: PGear); |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6321 |
var |
7335 | 6322 |
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
|
6323 |
hh: PHedgehog; |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6324 |
i: LongInt; |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6325 |
begin |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6326 |
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
|
6327 |
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
|
6328 |
|
7335 | 6329 |
if graves.size > 0 then |
6330 |
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
|
6331 |
hh := Gear^.Hedgehog; |
7335 | 6332 |
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
|
6333 |
begin |
7335 | 6334 |
PHedgehog(graves.ar^[i]^.Hedgehog)^.Gear := nil; |
6335 |
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
|
6336 |
end; |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6337 |
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
|
6338 |
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
|
6339 |
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
|
6340 |
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
|
6341 |
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
|
6342 |
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
|
6343 |
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
|
6344 |
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
|
6345 |
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
|
6346 |
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
|
6347 |
inc(Gear^.Tag) |
8795 | 6348 |
end |
6349 |
end |
|
6350 |
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
|
6351 |
begin |
7053 | 6352 |
StopSoundChan(Gear^.SoundChannel); |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6353 |
Gear^.Timer := 250; |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6354 |
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
|
6355 |
end |
3963
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6356 |
end; |
6090d2a2472e
New Weapon: Resurrector (TODO: ammo icon + sprites)
Tobias Neumann <mail@tobias-neumann.eu>
parents:
3959
diff
changeset
|
6357 |
|
4293
d79ffcdd77df
makes drill attack drills weaker and not affected by wind
Henek
parents:
4282
diff
changeset
|
6358 |
//////////////////////////////////////////////////////////////////////////////// |
4313
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6359 |
procedure doStepNapalmBomb(Gear: PGear); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6360 |
var |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6361 |
i, gX, gY: LongInt; |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6362 |
dX, dY: hwFloat; |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6363 |
begin |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6364 |
AllInactive := false; |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6365 |
doStepFallingGear(Gear); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6366 |
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
|
6367 |
begin |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
6368 |
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
|
6369 |
gX := hwRound(Gear^.X); |
8795 | 6370 |
gY := hwRound(Gear^.Y); |
4313
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6371 |
for i:= 0 to 10 do |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6372 |
begin |
7001 | 6373 |
dX := AngleCos(i * 2) * ((_0_1*(i div 5))) * (GetRandomf + _1); |
6374 |
dY := AngleSin(i * 8) * _0_5 * (GetRandomf + _1); |
|
4313
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6375 |
AddGear(gX, gY, gtFlame, 0, dX, dY, 0); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6376 |
AddGear(gX, gY, gtFlame, 0, dX, -dY, 0); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6377 |
AddGear(gX, gY, gtFlame, 0, -dX, dY, 0); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6378 |
AddGear(gX, gY, gtFlame, 0, -dX, -dY, 0); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6379 |
end; |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6380 |
DeleteGear(Gear); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6381 |
exit |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6382 |
end; |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6383 |
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
|
6384 |
begin |
4837
2ea0a152c319
Pass PHedgehog instead of PGear to stats. Fixes crash.
unc0rr
parents:
4824
diff
changeset
|
6385 |
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
|
6386 |
for i:= -19 to 19 do |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6387 |
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
|
6388 |
DeleteGear(Gear); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6389 |
exit |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
6390 |
end; |
4313
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6391 |
if (GameTicks and $3F) = 0 then |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6392 |
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace); |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6393 |
dec(Gear^.Timer) |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6394 |
end; |
0690067bc5ff
made napalm use napalmbombs instead of just dropping fire
Henek
parents:
4301
diff
changeset
|
6395 |
|
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
|
6396 |
//////////////////////////////////////////////////////////////////////////////// |
5706 | 6397 |
(* |
8795 | 6398 |
TARDIS needs |
5706 | 6399 |
Warp in. Pos = 1 |
6400 |
Pause. Pos = 2 |
|
6401 |
Hide gear (TARDIS hedgehog was nil) |
|
6402 |
Warp out. Pos = 3 |
|
6403 |
... idle active for some time period ... Pos = 4 |
|
6404 |
Warp in. Pos = 1 |
|
6405 |
Pause. Pos = 2 |
|
6406 |
Restore gear (TARDIS hedgehog was not nil) |
|
6407 |
Warp out. Pos = 3 |
|
6408 |
*) |
|
6409 |
||
6410 |
procedure doStepTardisWarp(Gear: PGear); |
|
6411 |
var HH: PHedgehog; |
|
6412 |
i,j,cnt: LongWord; |
|
15986
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6413 |
restoreBottomY: LongInt; |
12169
869cf5f34700
More ticker messages: Sick, king died, resurrect, time box return, timeout, kamikaze
Wuzzy <almikes@aol.com>
parents:
12120
diff
changeset
|
6414 |
s: ansistring; |
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
|
6415 |
begin |
5706 | 6416 |
HH:= Gear^.Hedgehog; |
15243
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6417 |
if Gear^.Tag = 0 then |
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6418 |
begin |
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6419 |
if HH^.Gear <> nil then |
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6420 |
begin |
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6421 |
if (HH^.Gear^.Damage <> 0) or (HH^.Gear^.Health = 0) or |
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6422 |
((HH^.Gear^.State and (gstMoving or gstHHDeath or gstHHGone or gstDrowning)) <> 0) then |
15274
000d3262244c
Fix multiple timeboxes spawning when hog moves before timebox arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15267
diff
changeset
|
6423 |
begin |
15243
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6424 |
Gear^.Tag:= 1; |
15274
000d3262244c
Fix multiple timeboxes spawning when hog moves before timebox arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15267
diff
changeset
|
6425 |
HH^.Gear^.State:= HH^.Gear^.State and (not gstAttacking); |
000d3262244c
Fix multiple timeboxes spawning when hog moves before timebox arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15267
diff
changeset
|
6426 |
HH^.Gear^.Message:= HH^.Gear^.Message and (not gmAttack); |
000d3262244c
Fix multiple timeboxes spawning when hog moves before timebox arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15267
diff
changeset
|
6427 |
AfterAttack; |
000d3262244c
Fix multiple timeboxes spawning when hog moves before timebox arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15267
diff
changeset
|
6428 |
end; |
15243
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6429 |
end |
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6430 |
else if HH^.GearHidden = nil then |
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6431 |
Gear^.Tag:= 1; |
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6432 |
if (Gear^.Tag = 1) and (Gear = CurAmmoGear) then |
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6433 |
CurAmmoGear:= nil; |
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6434 |
end; |
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6435 |
|
5706 | 6436 |
if Gear^.Pos = 2 then |
6437 |
begin |
|
7053 | 6438 |
StopSoundChan(Gear^.SoundChannel); |
12672
c98179b00740
Fix short sound breakdown shortly after using time box
Wuzzy <almikes@aol.com>
parents:
12656
diff
changeset
|
6439 |
Gear^.SoundChannel:= -1; |
5706 | 6440 |
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
|
6441 |
begin |
5715
59a8dd33f274
Restore gear ASAP, add denied sound for illegal activation without wasting ammo.
nemo
parents:
5710
diff
changeset
|
6442 |
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
|
6443 |
begin |
15243
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6444 |
if Gear^.Tag = 0 then |
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6445 |
AfterAttack; |
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6446 |
if Gear = CurAmmoGear then |
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6447 |
CurAmmoGear:= nil; |
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6448 |
if Gear^.Tag = 0 then |
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6449 |
HideHog(HH); |
5706 | 6450 |
end |
14593
34e810295d08
Remove a bunch of dead out-commented code
Wuzzy <Wuzzy2@mail.ru>
parents:
14591
diff
changeset
|
6451 |
else if (HH^.GearHidden <> nil) then |
12169
869cf5f34700
More ticker messages: Sick, king died, resurrect, time box return, timeout, kamikaze
Wuzzy <almikes@aol.com>
parents:
12120
diff
changeset
|
6452 |
begin |
869cf5f34700
More ticker messages: Sick, king died, resurrect, time box return, timeout, kamikaze
Wuzzy <almikes@aol.com>
parents:
12120
diff
changeset
|
6453 |
RestoreHog(HH); |
869cf5f34700
More ticker messages: Sick, king died, resurrect, time box return, timeout, kamikaze
Wuzzy <almikes@aol.com>
parents:
12120
diff
changeset
|
6454 |
s:= ansistring(HH^.Name); |
13642
3d14950641a4
Refactor text color variable names, export 2 color values to Lua
Wuzzy <Wuzzy2@mail.ru>
parents:
13640
diff
changeset
|
6455 |
AddCaption(FormatA(GetEventString(eidTimeTravelEnd), s), capcolDefault, capgrpMessage) |
12169
869cf5f34700
More ticker messages: Sick, king died, resurrect, time box return, timeout, kamikaze
Wuzzy <almikes@aol.com>
parents:
12120
diff
changeset
|
6456 |
end |
5706 | 6457 |
end; |
6458 |
||
5971 | 6459 |
inc(Gear^.Timer); |
5706 | 6460 |
if (Gear^.Timer > 2000) and ((GameTicks mod 2000) = 1000) then |
6461 |
begin |
|
5728 | 6462 |
Gear^.SoundChannel := LoopSound(sndTardis); |
6463 |
Gear^.Pos:= 3 |
|
6464 |
end |
|
5706 | 6465 |
end; |
6466 |
||
6131 | 6467 |
if (Gear^.Pos = 1) and (GameTicks and $1F = 0) and (Gear^.Power < 255) then |
5935 | 6468 |
begin |
6469 |
inc(Gear^.Power); |
|
8795 | 6470 |
if (Gear^.Power = 172) and (HH^.Gear <> nil) and |
15243
deaa316af414
TimeBox: Fix buggy behaviour if hog took damage or died before time box arrived
Wuzzy <Wuzzy2@mail.ru>
parents:
15242
diff
changeset
|
6471 |
(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
|
6472 |
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
|
6473 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
6474 |
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
|
6475 |
Tag:= 2; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
6476 |
Timer:= 0; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
6477 |
Pos:= 0 |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
6478 |
end |
5935 | 6479 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
6480 |
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
|
6481 |
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
|
6482 |
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
|
6483 |
Gear^.Pos:= 2; |
5706 | 6484 |
if (Gear^.Pos = 3) and (Gear^.Power = 0) then |
6485 |
begin |
|
7053 | 6486 |
StopSoundChan(Gear^.SoundChannel); |
12672
c98179b00740
Fix short sound breakdown shortly after using time box
Wuzzy <almikes@aol.com>
parents:
12656
diff
changeset
|
6487 |
Gear^.SoundChannel:= -1; |
5710 | 6488 |
if HH^.GearHidden = nil then |
6489 |
begin |
|
6490 |
DeleteGear(Gear); |
|
6491 |
exit |
|
6492 |
end; |
|
5706 | 6493 |
Gear^.Pos:= 4; |
6494 |
// 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
|
6495 |
Gear^.Timer:= GetRandom(cHedgehogTurnTime*TeamsCount)+cHedgehogTurnTime |
5706 | 6496 |
end; |
6497 |
||
6498 |
if (Gear^.Pos = 4) then |
|
6499 |
begin |
|
6500 |
cnt:= 0; |
|
6501 |
for j:= 0 to Pred(HH^.Team^.Clan^.TeamsNumber) do |
|
9470 | 6502 |
with HH^.Team^.Clan^.Teams[j]^ do |
6503 |
for i:= 0 to Pred(HedgehogsNumber) do |
|
6504 |
if (Hedgehogs[i].Gear <> nil) |
|
6505 |
and ((Hedgehogs[i].Gear^.State and gstDrowning) = 0) |
|
6506 |
and (Hedgehogs[i].Gear^.Health > Hedgehogs[i].Gear^.Damage) then |
|
6507 |
inc(cnt); |
|
5706 | 6508 |
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
|
6509 |
begin |
15986
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6510 |
// Place tardis |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6556
diff
changeset
|
6511 |
if HH^.GearHidden <> nil then |
15986
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6512 |
begin |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6513 |
restoreBottomY:= cWaterLine; |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6514 |
// Place tardis at a random safe position |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6515 |
FindPlace(HH^.GearHidden, false, 0, LAND_WIDTH, restoreBottomY, true, false); |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6516 |
|
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6517 |
// If in Sudden Death, rise the minimum possible spawn position to make |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6518 |
// it less likely for the hog to drown before its turn |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6519 |
if SuddenDeathActive and (cWaterRise > 0) then |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6520 |
begin |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6521 |
// Enough space to survive the water rise of 1 round. |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6522 |
// Also limit the highest spawn height to topY plus a small buffer zone |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6523 |
restoreBottomY:= max(topY + cHHRadius * 5, cWaterLine - cWaterRise * (TeamsCount + 1)); |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6524 |
// If gear is below the safe spawn height, place it again, |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6525 |
// but this time with the height limit in place |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6526 |
if (HH^.GearHidden <> nil) and (hwRound(HH^.GearHidden^.Y) > restoreBottomY) then |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6527 |
// Due to the reduced Y range, this one might fail for very aggressive SD water rise |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6528 |
begin |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6529 |
FindPlace(HH^.GearHidden, false, 0, LAND_WIDTH, restoreBottomY, true, false); |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6530 |
end; |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6531 |
// Still unsafe? Relax the height limit to a third of the map height above cWaterLine |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6532 |
if (HH^.GearHidden <> nil) and (hwRound(HH^.GearHidden^.Y) > restoreBottomY) then |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6533 |
begin |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6534 |
restoreBottomY:= cWaterLine - ((cWaterLine - topY) div 3); |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6535 |
// Even this might fail, but it's much less likely. If it fails, we still have the |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6536 |
// position of the first FindPlace as a fallback. |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6537 |
FindPlace(HH^.GearHidden, false, 0, LAND_WIDTH, restoreBottomY, true, false); |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6538 |
end; |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6539 |
end; |
7125918637e9
Make tardis avoid water during Sudden Death
Wuzzy <Wuzzy@disroot.org>
parents:
15938
diff
changeset
|
6540 |
end; |
8795 | 6541 |
|
6131 | 6542 |
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
|
6543 |
begin |
5738 | 6544 |
Gear^.X:= HH^.GearHidden^.X; |
6545 |
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
|
6546 |
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
|
6547 |
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
|
6548 |
|
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
|
6549 |
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
|
6550 |
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
|
6551 |
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
|
6552 |
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
|
6553 |
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
|
6554 |
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
|
6555 |
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
|
6556 |
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
|
6557 |
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
|
6558 |
Gear^.Power:= 0; |
5706 | 6559 |
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
|
6560 |
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
|
6561 |
else if (CurrentHedgehog^.Team^.Clan = Gear^.Hedgehog^.Team^.Clan) then dec(Gear^.Timer) |
5706 | 6562 |
end; |
6563 |
||
6564 |
end; |
|
6565 |
||
6566 |
procedure doStepTardis(Gear: PGear); |
|
12712
31f7e0a31736
AI player checks if it can use tardis before selecting it
Wuzzy <almikes@aol.com>
parents:
12700
diff
changeset
|
6567 |
var HH: PHedgehog; |
5706 | 6568 |
begin |
6569 |
HH:= Gear^.Hedgehog; |
|
12712
31f7e0a31736
AI player checks if it can use tardis before selecting it
Wuzzy <almikes@aol.com>
parents:
12700
diff
changeset
|
6570 |
if (not CanUseTardis(HH^.Gear)) then |
31f7e0a31736
AI player checks if it can use tardis before selecting it
Wuzzy <almikes@aol.com>
parents:
12700
diff
changeset
|
6571 |
begin |
31f7e0a31736
AI player checks if it can use tardis before selecting it
Wuzzy <almikes@aol.com>
parents:
12700
diff
changeset
|
6572 |
HH^.Gear^.Message := HH^.Gear^.Message and (not gmAttack); |
31f7e0a31736
AI player checks if it can use tardis before selecting it
Wuzzy <almikes@aol.com>
parents:
12700
diff
changeset
|
6573 |
HH^.Gear^.State:= HH^.Gear^.State and (not gstAttacking); |
5715
59a8dd33f274
Restore gear ASAP, add denied sound for illegal activation without wasting ammo.
nemo
parents:
5710
diff
changeset
|
6574 |
PlaySound(sndDenied); |
12712
31f7e0a31736
AI player checks if it can use tardis before selecting it
Wuzzy <almikes@aol.com>
parents:
12700
diff
changeset
|
6575 |
DeleteGear(Gear); |
5706 | 6576 |
exit |
12712
31f7e0a31736
AI player checks if it can use tardis before selecting it
Wuzzy <almikes@aol.com>
parents:
12700
diff
changeset
|
6577 |
end; |
5728 | 6578 |
Gear^.SoundChannel := LoopSound(sndTardis); |
5706 | 6579 |
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
|
6580 |
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
|
6581 |
|
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
|
6582 |
//////////////////////////////////////////////////////////////////////////////// |
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
|
6583 |
|
7007 | 6584 |
(* |
14593
34e810295d08
Remove a bunch of dead out-commented code
Wuzzy <Wuzzy2@mail.ru>
parents:
14591
diff
changeset
|
6585 |
The ice gun has the following effects: |
34e810295d08
Remove a bunch of dead out-commented code
Wuzzy <Wuzzy2@mail.ru>
parents:
14591
diff
changeset
|
6586 |
A "ray" like a deagle is projected out from the gun. |
8795 | 6587 |
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 | 6588 |
* 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
|
6589 |
* 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. |
11191 | 6590 |
* When fired at a hog (land and $00FF <> 0), while the hog is targetted, the hog's state is set to frozen. |
6591 |
As long as the gun is on the hog, a frozen hog sprite creeps up from the feet to the head. |
|
6592 |
If the effect is interrupted before reaching the top, the freezing state is cleared. |
|
6593 |
A frozen hog will animate differently. |
|
14593
34e810295d08
Remove a bunch of dead out-commented code
Wuzzy <Wuzzy2@mail.ru>
parents:
14591
diff
changeset
|
6594 |
Frozen hogs take less damage and are harder to push. |
11191 | 6595 |
This might make freezing potentially useful for friendlies in a bad position. |
6596 |
A frozen hog stays frozen for a certain number of turns. |
|
6597 |
Each turn the frozen overlay becomes fainter, until it fades and the hog animates normally again. |
|
7007 | 6598 |
*) |
8548 | 6599 |
|
6600 |
||
6601 |
procedure updateFuel(Gear: PGear); |
|
8795 | 6602 |
var |
8548 | 6603 |
t:LongInt; |
6604 |
begin |
|
6605 |
t:= Gear^.Health div 10; |
|
15381
c117e17b90bc
flag some of the renderstringtex which are taking up a ton of processing time with --stats-only and pas2c
nemo
parents:
15354
diff
changeset
|
6606 |
if (not cOnlyStats) and (t <> Gear^.Damage) and ((GameTicks and $3F) = 0) then |
8548 | 6607 |
begin |
6608 |
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
|
6609 |
FreeAndNilTexture(Gear^.Tex); |
13898 | 6610 |
Gear^.Tex := RenderStringTex(FormatA(trmsg[sidFuel], ansistring(inttostr(t))), |
13640
cb0191394133
Use full string for sidFuel and avoid string concatenation
Wuzzy <Wuzzy2@mail.ru>
parents:
13624
diff
changeset
|
6611 |
cWhiteColor, fntSmall) |
8548 | 6612 |
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
|
6613 |
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
|
6614 |
begin |
14005 | 6615 |
if (Gear^.Tag <> 2) then |
6616 |
begin |
|
6617 |
StopSoundChan(Gear^.SoundChannel); |
|
6618 |
Gear^.SoundChannel:= LoopSound(sndIceBeamIdle); |
|
6619 |
Gear^.Tag:= 2; |
|
6620 |
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
|
6621 |
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
|
6622 |
end |
10015 | 6623 |
else |
9072 | 6624 |
begin |
14005 | 6625 |
if (Gear^.Tag <> 1) then |
6626 |
begin |
|
6627 |
StopSoundChan(Gear^.SoundChannel); |
|
6628 |
Gear^.SoundChannel:= LoopSound(sndIceBeam); |
|
6629 |
Gear^.Tag:= 1; |
|
6630 |
end; |
|
9072 | 6631 |
if GameTicks mod 10 = 0 then dec(Gear^.Health) |
6632 |
end |
|
8548 | 6633 |
end; |
6634 |
||
6635 |
||
6636 |
procedure updateTarget(Gear:PGear; newX, newY:HWFloat); |
|
6637 |
begin |
|
6638 |
with Gear^ do |
|
6639 |
begin |
|
6640 |
dX:= newX; |
|
6641 |
dY:= newY; |
|
6642 |
Pos:= 0; |
|
6643 |
Target.X:= NoPointX; |
|
6644 |
LastDamage:= nil; |
|
6645 |
X:= Hedgehog^.Gear^.X; |
|
6646 |
Y:= Hedgehog^.Gear^.Y; |
|
6647 |
end; |
|
6648 |
end; |
|
6649 |
||
7007 | 6650 |
procedure doStepIceGun(Gear: PGear); |
9145 | 6651 |
const iceWaitCollision = 0; |
6652 |
const iceCollideWithGround = 1; |
|
6653 |
const iceCollideWithWater = 5; |
|
6654 |
const groundFreezingTime = 1000; |
|
8601
7668f92734b8
Make refactoring. Remove DrawIce function
Urbertar@gmail.com
parents:
8599
diff
changeset
|
6655 |
const iceRadius = 32; |
8602 | 6656 |
const iceHeight = 40; |
7716 | 6657 |
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
|
6658 |
HHGear, iter: PGear; |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
6659 |
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
|
6660 |
ndX, ndY: hwFloat; |
9137
d987230b85ed
fixed all engine compilation hints and notes (that I could see)
sheepluva
parents:
9080
diff
changeset
|
6661 |
i, t, gX, gY: LongInt; |
7335 | 6662 |
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
|
6663 |
vg: PVisualGear; |
7007 | 6664 |
begin |
7093 | 6665 |
HHGear := Gear^.Hedgehog^.Gear; |
9356 | 6666 |
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 | 6667 |
begin |
9072 | 6668 |
StopSoundChan(Gear^.SoundChannel); |
7093 | 6669 |
DeleteGear(Gear); |
6670 |
AfterAttack; |
|
6671 |
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
|
6672 |
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
|
6673 |
updateFuel(Gear); |
14591
0da43a3d5500
Properly stop freezeray at bounce edge (instead of restarting the ray over and over again)
Wuzzy <Wuzzy2@mail.ru>
parents:
14589
diff
changeset
|
6674 |
if (WorldEdge <> weBounce) then |
0da43a3d5500
Properly stop freezeray at bounce edge (instead of restarting the ray over and over again)
Wuzzy <Wuzzy2@mail.ru>
parents:
14589
diff
changeset
|
6675 |
if WorldWrap(Gear) and (WorldEdge = weWrap) and (Gear^.Target.X = NoPointX) then |
0da43a3d5500
Properly stop freezeray at bounce edge (instead of restarting the ray over and over again)
Wuzzy <Wuzzy2@mail.ru>
parents:
14589
diff
changeset
|
6676 |
// Use FlightTime to count number of times the gear has world-wrapped |
0da43a3d5500
Properly stop freezeray at bounce edge (instead of restarting the ray over and over again)
Wuzzy <Wuzzy2@mail.ru>
parents:
14589
diff
changeset
|
6677 |
inc(Gear^.FlightTime); |
8548 | 6678 |
|
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
|
6679 |
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
|
6680 |
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
|
6681 |
HedgehogChAngle(HHGear); |
7093 | 6682 |
ndX:= SignAs(AngleSin(HHGear^.Angle), HHGear^.dX) * _4; |
6683 |
ndY:= -AngleCos(HHGear^.Angle) * _4; |
|
13995
4d0c80f7aa32
Fix freezer ray extending with low fuel usage when firing straight up/down while holding up/down key
Wuzzy <Wuzzy2@mail.ru>
parents:
13977
diff
changeset
|
6684 |
if (ndX <> dX) or (ndY <> dY) or (Gear^.Message and (gmUp or gmDown) <> 0) or |
13399 | 6685 |
(((Target.X <> NoPointX) and (Target.X and LAND_WIDTH_MASK = 0) and |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
6686 |
(Target.Y and LAND_HEIGHT_MASK = 0) and ((LandGet(Target.Y, Target.X) = 0)) and |
14591
0da43a3d5500
Properly stop freezeray at bounce edge (instead of restarting the ray over and over again)
Wuzzy <Wuzzy2@mail.ru>
parents:
14589
diff
changeset
|
6687 |
(not CheckCoordInWater(Target.X, Target.Y))) and (CheckGearNear(gtAirMine, int2hwFloat(Target.X),int2hwFloat(Target.Y), Gear^.Radius*3, Gear^.Radius*3) = nil) and |
0da43a3d5500
Properly stop freezeray at bounce edge (instead of restarting the ray over and over again)
Wuzzy <Wuzzy2@mail.ru>
parents:
14589
diff
changeset
|
6688 |
(not ((WorldEdge = weBounce) and ((Target.X > rightX) or (Target.X < leftX))))) 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
|
6689 |
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
|
6690 |
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
|
6691 |
Timer := iceWaitCollision; |
13572
a71e6856ffab
Fix freeze ray not working through wrap world edge; add DrawLineWrapped
Wuzzy <Wuzzy2@mail.ru>
parents:
13566
diff
changeset
|
6692 |
FlightTime := 0; |
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
|
6693 |
end |
14581
45c6c12c12e2
Fix wrong ice beam angle if it goes diagonally up out of map thru world wrap (bug 718)
Wuzzy <Wuzzy2@mail.ru>
parents:
14578
diff
changeset
|
6694 |
// Extend ice beam, unless it is far outside he map boundaries |
45c6c12c12e2
Fix wrong ice beam angle if it goes diagonally up out of map thru world wrap (bug 718)
Wuzzy <Wuzzy2@mail.ru>
parents:
14578
diff
changeset
|
6695 |
else if (not ((hwRound(X + dX) > max(LAND_WIDTH,4096)*2) or |
45c6c12c12e2
Fix wrong ice beam angle if it goes diagonally up out of map thru world wrap (bug 718)
Wuzzy <Wuzzy2@mail.ru>
parents:
14578
diff
changeset
|
6696 |
(hwRound(X + dX) < -max(LAND_WIDTH,4096)*2) or |
45c6c12c12e2
Fix wrong ice beam angle if it goes diagonally up out of map thru world wrap (bug 718)
Wuzzy <Wuzzy2@mail.ru>
parents:
14578
diff
changeset
|
6697 |
(hwRound(Y + dY) < -max(LAND_HEIGHT,4096)*2) or |
45c6c12c12e2
Fix wrong ice beam angle if it goes diagonally up out of map thru world wrap (bug 718)
Wuzzy <Wuzzy2@mail.ru>
parents:
14578
diff
changeset
|
6698 |
(hwRound(Y + dY) > max(LAND_HEIGHT,4096)+512))) 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
|
6699 |
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
|
6700 |
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
|
6701 |
Y:= Y + dY; |
7093 | 6702 |
gX:= hwRound(X); |
8795 | 6703 |
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
|
6704 |
if Target.X = NoPointX then t:= hwRound(hwSqr(X-HHGear^.X)+hwSqr(Y-HHGear^.Y)); |
8548 | 6705 |
|
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
|
6706 |
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
|
6707 |
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
|
6708 |
CheckCollision(Gear); |
13404
8ce83caec236
Make mine active/hunting glow a bit more obvious. Add frozen sprite, increase ice beam mine "hit" radius a bit
nemo
parents:
13403
diff
changeset
|
6709 |
if ((State and gstCollision) <> 0) or (CheckGearNear(gtAirMine, int2hwFloat(Target.X),int2hwFloat(Target.Y), Gear^.Radius*4, Gear^.Radius*4) <> nil) then |
8548 | 6710 |
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
|
6711 |
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
|
6712 |
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
|
6713 |
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
|
6714 |
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
|
6715 |
end |
8795 | 6716 |
end |
10582 | 6717 |
else if CheckCoordInWater(Target.X, Target.Y) or |
6718 |
((Target.X and LAND_WIDTH_MASK = 0) and |
|
6719 |
(Target.Y and LAND_HEIGHT_MASK = 0) and |
|
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
6720 |
(LandGet(Target.Y, Target.X) = lfIce) and |
10582 | 6721 |
((Target.Y+iceHeight+5 > cWaterLine) or |
6722 |
((WorldEdge = weSea) and |
|
14303
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
14225
diff
changeset
|
6723 |
((Target.X+iceHeight+5 > rightX) or |
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
14225
diff
changeset
|
6724 |
(Target.X-iceHeight-5 < leftX)))) |
10582 | 6725 |
) then |
8602 | 6726 |
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
|
6727 |
if Timer = iceWaitCollision then |
8602 | 6728 |
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
|
6729 |
Timer := iceCollideWithWater; |
8795 | 6730 |
Power := GameTicks; |
8602 | 6731 |
end; |
8548 | 6732 |
end; |
6733 |
||
7098
f8c453ade379
Minor tweaks to freezer, mostly to simplify current state to laptop
nemo
parents:
7093
diff
changeset
|
6734 |
if (abs(gX-Target.X) < 2) and (abs(gY-Target.Y) < 2) then |
8602 | 6735 |
begin |
7098
f8c453ade379
Minor tweaks to freezer, mostly to simplify current state to laptop
nemo
parents:
7093
diff
changeset
|
6736 |
X:= HHGear^.X; |
f8c453ade379
Minor tweaks to freezer, mostly to simplify current state to laptop
nemo
parents:
7093
diff
changeset
|
6737 |
Y:= HHGear^.Y |
8602 | 6738 |
end; |
8548 | 6739 |
|
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
|
6740 |
if (Timer = iceCollideWithGround) and ((GameTicks - Power) > groundFreezingTime) then |
8795 | 6741 |
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
|
6742 |
FillRoundInLandFT(target.x, target.y, iceRadius, icePixel); |
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
6743 |
landRect.x := min(max(target.x - iceRadius, 0), LAND_WIDTH - 1); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
6744 |
landRect.y := min(max(target.y - iceRadius, 0), LAND_HEIGHT - 1); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
6745 |
landRect.w := min(2*iceRadius, LAND_WIDTH - landRect.x - 1); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
6746 |
landRect.h := min(2*iceRadius, LAND_HEIGHT - landRect.y - 1); |
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
6747 |
UpdateLandTexture(landRect.x, landRect.w, landRect.y, landRect.h, true); |
10015 | 6748 |
|
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
|
6749 |
// 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
|
6750 |
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
|
6751 |
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
|
6752 |
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
|
6753 |
if (iter^.State and gstFrozen = 0) and |
13399 | 6754 |
((iter^.Kind = gtExplosives) or (iter^.Kind = gtAirMine) or (iter^.Kind = gtCase) or (iter^.Kind = gtMine) or (iter^.Kind = gtSMine)) and |
14368
1dcc37b6913e
Fix freezer failing to freeze gears with negative coordinate
Wuzzy <Wuzzy2@mail.ru>
parents:
14367
diff
changeset
|
6755 |
(abs(hwRound(iter^.X) - target.x) + abs(hwRound(iter^.Y) - target.y) + 2 < 2 * iceRadius) |
9954 | 6756 |
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
|
6757 |
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
|
6758 |
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
|
6759 |
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
|
6760 |
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
|
6761 |
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
|
6762 |
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
|
6763 |
i:= random(100) + 155; |
9145 | 6764 |
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
|
6765 |
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
|
6766 |
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
|
6767 |
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
|
6768 |
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
|
6769 |
end; |
9077
e8d9d94c122f
Waddaya think. Add it for iced up water and mines/cases/explosives
nemo
parents:
9076
diff
changeset
|
6770 |
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
|
6771 |
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
|
6772 |
begin |
9251 | 6773 |
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
|
6774 |
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
|
6775 |
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
|
6776 |
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
|
6777 |
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
|
6778 |
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
|
6779 |
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
|
6780 |
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
|
6781 |
end |
12300
6486a012987e
Make sticky mines fall off the map when frozen
Wuzzy <almikes@aol.com>
parents:
12299
diff
changeset
|
6782 |
else if iter^.Kind = gtSMine then // disabe sticky mine and drop it into the water |
12299
6b25d117a904
Freezer allows to freeze sticky mines (currently only disables them)
Wuzzy <almikes@aol.com>
parents:
12292
diff
changeset
|
6783 |
begin |
6b25d117a904
Freezer allows to freeze sticky mines (currently only disables them)
Wuzzy <almikes@aol.com>
parents:
12292
diff
changeset
|
6784 |
iter^.State:= iter^.State or gstFrozen; |
12300
6486a012987e
Make sticky mines fall off the map when frozen
Wuzzy <almikes@aol.com>
parents:
12299
diff
changeset
|
6785 |
iter^.CollisionMask:= 0; |
12299
6b25d117a904
Freezer allows to freeze sticky mines (currently only disables them)
Wuzzy <almikes@aol.com>
parents:
12292
diff
changeset
|
6786 |
vg:= AddVisualGear(hwRound(iter^.X) - 2 + Random(4), hwRound(iter^.Y) - 2 - Random(2), vgtSmoke); |
6b25d117a904
Freezer allows to freeze sticky mines (currently only disables them)
Wuzzy <almikes@aol.com>
parents:
12292
diff
changeset
|
6787 |
if vg <> nil then |
6b25d117a904
Freezer allows to freeze sticky mines (currently only disables them)
Wuzzy <almikes@aol.com>
parents:
12292
diff
changeset
|
6788 |
vg^.Scale:= 0.4; |
6b25d117a904
Freezer allows to freeze sticky mines (currently only disables them)
Wuzzy <almikes@aol.com>
parents:
12292
diff
changeset
|
6789 |
PlaySound(sndVaporize); |
6b25d117a904
Freezer allows to freeze sticky mines (currently only disables them)
Wuzzy <almikes@aol.com>
parents:
12292
diff
changeset
|
6790 |
iter^.State := iter^.State and (not gstAttacking) |
6b25d117a904
Freezer allows to freeze sticky mines (currently only disables them)
Wuzzy <almikes@aol.com>
parents:
12292
diff
changeset
|
6791 |
end |
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
|
6792 |
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
|
6793 |
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
|
6794 |
DeleteCI(iter); |
9251 | 6795 |
iter^.State:= iter^.State or gstFrozen; |
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9289
diff
changeset
|
6796 |
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
|
6797 |
end |
13399 | 6798 |
else if iter^.Kind = gtAirMine then |
6799 |
begin |
|
14362
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6800 |
iter^.Damage:= 0; |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6801 |
iter^.State:= iter^.State or gstFrozen; |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
6802 |
if (hwRound(iter^.X) < RightX-16) and (hwRound(iter^.X) > LeftX+16) and |
14362
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6803 |
(hwRound(iter^.Y) > topY+16) and (hwRound(iter^.Y) < LAND_HEIGHT-16) then |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6804 |
begin |
14367
22c91ac48d38
Do not call AddCI when air mine is frozen without creating land
Wuzzy <Wuzzy2@mail.ru>
parents:
14365
diff
changeset
|
6805 |
AddCI(iter); |
14577 | 6806 |
iter^.X:= int2hwFloat(min(RightX-16,max(hwRound(iter^.X), LeftX+16))); |
6807 |
iter^.Y:= int2hwFloat(min(LAND_HEIGHT-16,max(hwRound(iter^.Y),TopY+16))); |
|
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
6808 |
ForcePlaceOnLand(hwRound(iter^.X)-16, hwRound(iter^.Y)-16, sprFrozenAirMine, 0, lfIce, $FFFFFFFF, false, false, false); |
14362
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6809 |
iter^.State:= iter^.State or gstInvisible |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6810 |
end |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6811 |
else |
14577 | 6812 |
begin |
6813 |
updateTarget(Gear, ndX, ndY); |
|
6814 |
FlightTime := 0; |
|
6815 |
Timer := iceWaitCollision; |
|
6816 |
Power := GameTicks; |
|
14379
1f87c7c2b151
Make sad Pas2C happy again (add missing parenthesis around a "not")
Wuzzy <Wuzzy2@mail.ru>
parents:
14368
diff
changeset
|
6817 |
iter^.State:= iter^.State and (not gstNoGravity) |
14577 | 6818 |
end |
13399 | 6819 |
end |
9045
6561c42399d3
sheepluva suggestion for frozen barrel behaviour. untested.
nemo
parents:
9043
diff
changeset
|
6820 |
else // gtExplosives |
9251 | 6821 |
begin |
6822 |
iter^.State:= iter^.State or gstFrozen; |
|
9045
6561c42399d3
sheepluva suggestion for frozen barrel behaviour. untested.
nemo
parents:
9043
diff
changeset
|
6823 |
iter^.Health:= iter^.Health + cBarrelHealth |
9251 | 6824 |
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
|
6825 |
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
|
6826 |
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
|
6827 |
end; |
8795 | 6828 |
|
8783
f1231a48fc48
Remove some duplicating code from uLandGraphics.pas
Urbertar
parents:
8773
diff
changeset
|
6829 |
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
|
6830 |
Timer := iceWaitCollision; |
14362
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6831 |
Power:= GameTicks |
8602 | 6832 |
end; |
6833 |
||
10411 | 6834 |
if (Timer = iceCollideWithWater) and ((GameTicks - Power) > groundFreezingTime div 2) then |
8795 | 6835 |
begin |
9077
e8d9d94c122f
Waddaya think. Add it for iced up water and mines/cases/explosives
nemo
parents:
9076
diff
changeset
|
6836 |
PlaySound(sndHogFreeze); |
10582 | 6837 |
if CheckCoordInWater(Target.X, Target.Y) then |
6838 |
DrawIceBreak(Target.X, Target.Y, iceRadius, iceHeight) |
|
6839 |
else if Target.Y+iceHeight+5 > cWaterLine then |
|
6840 |
DrawIceBreak(Target.X, Target.Y+iceHeight+5, iceRadius, iceHeight) |
|
14303
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
14225
diff
changeset
|
6841 |
else if Target.X+iceHeight+5 > rightX then |
10582 | 6842 |
DrawIceBreak(Target.X+iceHeight+5, Target.Y, iceRadius, iceHeight) |
6843 |
else |
|
6844 |
DrawIceBreak(Target.X-iceHeight-5, Target.Y, iceRadius, iceHeight); |
|
8795 | 6845 |
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
|
6846 |
Timer := iceWaitCollision; |
8602 | 6847 |
end; |
7128
574b385ce7df
Minor freezer changes, allow snow to accumulate on indestructible terrain too.
nemo
parents:
7101
diff
changeset
|
6848 |
// freeze nearby hogs |
8560 | 6849 |
hogs := GearsNear(int2hwFloat(Target.X), int2hwFloat(Target.Y), gtHedgehog, Gear^.Radius*2); |
7335 | 6850 |
if hogs.size > 0 then |
6851 |
for i:= 0 to hogs.size - 1 do |
|
6852 |
if hogs.ar^[i] <> HHGear then |
|
8795 | 6853 |
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
|
6854 |
begin |
8565 | 6855 |
hogs.ar^[i]^.Active:= true; |
6856 |
if hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] < 256 then |
|
6857 |
hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] := hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] + 1 |
|
6858 |
else if hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] = 256 then |
|
9073 | 6859 |
begin |
9059 | 6860 |
hogs.ar^[i]^.Hedgehog^.Effects[heFrozen]:= 200000-1;//cHedgehogTurnTime + cReadyDelay |
9073 | 6861 |
PlaySound(sndHogFreeze); |
6862 |
end; |
|
8563
4d9d8287e601
Trying to improve rendering, sliding and thawing. Messing around w/ making fire thaw faster.
nemo
parents:
8560
diff
changeset
|
6863 |
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
|
6864 |
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
|
6865 |
end |
10582 | 6866 |
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
|
6867 |
(((gX and LAND_WIDTH_MASK = 0) and (gY and LAND_HEIGHT_MASK = 0)) |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
6868 |
and (LandGet(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
|
6869 |
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
|
6870 |
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
|
6871 |
Target.Y:= gY; |
7093 | 6872 |
X:= HHGear^.X; |
6873 |
Y:= HHGear^.Y |
|
13399 | 6874 |
end |
14591
0da43a3d5500
Properly stop freezeray at bounce edge (instead of restarting the ray over and over again)
Wuzzy <Wuzzy2@mail.ru>
parents:
14589
diff
changeset
|
6875 |
else if (WorldEdge = weBounce) and ((gX > rightX) or (gX < leftX)) then |
0da43a3d5500
Properly stop freezeray at bounce edge (instead of restarting the ray over and over again)
Wuzzy <Wuzzy2@mail.ru>
parents:
14589
diff
changeset
|
6876 |
begin |
0da43a3d5500
Properly stop freezeray at bounce edge (instead of restarting the ray over and over again)
Wuzzy <Wuzzy2@mail.ru>
parents:
14589
diff
changeset
|
6877 |
Target.X:= gX; |
0da43a3d5500
Properly stop freezeray at bounce edge (instead of restarting the ray over and over again)
Wuzzy <Wuzzy2@mail.ru>
parents:
14589
diff
changeset
|
6878 |
Target.Y:= gY; |
0da43a3d5500
Properly stop freezeray at bounce edge (instead of restarting the ray over and over again)
Wuzzy <Wuzzy2@mail.ru>
parents:
14589
diff
changeset
|
6879 |
X:= HHGear^.X; |
0da43a3d5500
Properly stop freezeray at bounce edge (instead of restarting the ray over and over again)
Wuzzy <Wuzzy2@mail.ru>
parents:
14589
diff
changeset
|
6880 |
Y:= HHGear^.Y |
0da43a3d5500
Properly stop freezeray at bounce edge (instead of restarting the ray over and over again)
Wuzzy <Wuzzy2@mail.ru>
parents:
14589
diff
changeset
|
6881 |
end |
14362
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6882 |
else |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6883 |
begin |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6884 |
iter:= CheckGearNear(Gear, gtAirMine, Gear^.Radius*2, Gear^.Radius*2); |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6885 |
if (iter <> nil) and (iter^.State <> gstFrozen) then |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6886 |
begin |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6887 |
Target.X:= gX; |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6888 |
Target.Y:= gY; |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6889 |
X:= HHGear^.X; |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6890 |
Y:= HHGear^.Y |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
6891 |
end |
14362
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6892 |
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
|
6893 |
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
|
6894 |
end; |
7007 | 6895 |
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
|
6896 |
|
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
|
6897 |
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
|
6898 |
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
|
6899 |
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
|
6900 |
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
|
6901 |
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
|
6902 |
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
|
6903 |
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
|
6904 |
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
|
6905 |
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
|
6906 |
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
|
6907 |
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
|
6908 |
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
|
6909 |
AddRandomness(CheckSum); |
13214
9c81e34f1933
gtGenericFaller: Use Tag=1 to allow gtGenericFaller to be displaced randomly. Otherwise it is left alone
Wuzzy <Wuzzy2@mail.ru>
parents:
13161
diff
changeset
|
6910 |
if (gi^.Kind = gtGenericFaller) and (gi^.Tag = 1) then |
9c81e34f1933
gtGenericFaller: Use Tag=1 to allow gtGenericFaller to be displaced randomly. Otherwise it is left alone
Wuzzy <Wuzzy2@mail.ru>
parents:
13161
diff
changeset
|
6911 |
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
|
6912 |
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
|
6913 |
end; |
13285 | 6914 |
if Gear^.Pos = posCaseUtility then |
6915 |
a:= GetUtility(Gear^.Hedgehog) |
|
6916 |
else a:= GetAmmo(Gear^.Hedgehog); |
|
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
|
6917 |
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
|
6918 |
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
|
6919 |
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
|
6920 |
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
|
6921 |
|
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
|
6922 |
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
|
6923 |
begin |
7406
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
6924 |
if Gear^.Timer < $FFFFFFFF then |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
6925 |
if Gear^.Timer > 0 then |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
6926 |
dec(Gear^.Timer) |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
6927 |
else |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
6928 |
begin |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
6929 |
DeleteGear(Gear); |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
6930 |
exit |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7400
diff
changeset
|
6931 |
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
|
6932 |
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
|
6933 |
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
|
6934 |
doStepFallingGear(Gear); |
14307 | 6935 |
if (Gear^.Tag = 1) and (GameTicks and $FF = 0) and (hwRound(Gear^.X) < leftX) or (hwRound(Gear^.X) > rightX) or (hwRound(Gear^.Y) < 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
|
6936 |
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
|
6937 |
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
|
6938 |
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
|
6939 |
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
|
6940 |
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
|
6941 |
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
|
6942 |
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
|
6943 |
end; |
13605
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6944 |
|
13872
f01798038c2e
Rename amDuck and related symbols to amCreeper, gtCreeper, etc.
Wuzzy <Wuzzy2@mail.ru>
parents:
13871
diff
changeset
|
6945 |
// TODO: Finish creeper implementation |
7627 | 6946 |
procedure doStepCreeper(Gear: PGear); |
13605
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6947 |
var i,t,targDist,tmpDist: LongWord; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6948 |
targ, tmpG: PGear; |
13613
d6b79a080a3e
Remove unused variables of creeper handler
Wuzzy <Wuzzy2@mail.ru>
parents:
13610
diff
changeset
|
6949 |
tX, tY: hwFloat; |
13605
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6950 |
vg: PVisualGear; |
7627 | 6951 |
begin |
14362
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6952 |
targ:= nil; |
13605
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6953 |
doStepFallingGear(Gear); |
14362
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6954 |
if (Gear^.State and gstFrozen) <> 0 then |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6955 |
begin |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6956 |
if Gear^.Damage > 0 then |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6957 |
begin |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6958 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6959 |
DeleteGear(Gear) |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6960 |
end; |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6961 |
exit |
d5317635f368
fix bounds check, make out of bounds air mines fall since there's no land to check them into
nemo
parents:
14361
diff
changeset
|
6962 |
end; |
13605
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6963 |
if (TurnTimeLeft = 0) or (Gear^.Angle = 0) or (Gear^.Hedgehog = nil) or (Gear^.Hedgehog^.Gear = nil) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6964 |
begin |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6965 |
Gear^.Hedgehog:= nil; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6966 |
targ:= nil; |
7627 | 6967 |
end |
13605
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6968 |
else if Gear^.Hedgehog <> nil then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6969 |
targ:= Gear^.Hedgehog^.Gear; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6970 |
if (targ <> nil) and ((GameTicks and $3F) = 0) and (TestCollisionYKick(Gear, 1) <> 0) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6971 |
begin |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6972 |
vg:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeWhite); |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6973 |
if vg <> nil then vg^.Tint:= $FF0000FF; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6974 |
if (Gear^.X < targ^.X) then // need to add collision checks to avoid walking off edges or getting too close to obstacles where jumping is needed |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6975 |
if (WorldEdge = weWrap) and ((targ^.X - Gear^.X) > ((Gear^.X - int2hwFloat(LeftX)) + (int2hwFloat(RightX) - targ^.X))) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6976 |
Gear^.dX:= -cLittle |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6977 |
else |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6978 |
Gear^.dX:= cLittle |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6979 |
else if (Gear^.X > targ^.X) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6980 |
if (WorldEdge = weWrap) and ((Gear^.X - targ^.X) > ((targ^.X - int2hwFloat(LeftX)) + (int2hwFloat(RightX) - Gear^.X))) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6981 |
Gear^.dX:= cLittle |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6982 |
else |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6983 |
Gear^.dX:= -cLittle; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6984 |
if (GetRandom(30) = 0) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6985 |
begin |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6986 |
Gear^.dY := -_0_15; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6987 |
Gear^.dX:= SignAs(_0_15, Gear^.dX); |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6988 |
end; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6989 |
MakeHedgehogsStep(Gear); |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6990 |
end; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6991 |
if (TurnTimeLeft = 0) and ((Gear^.dX.QWordValue + Gear^.dY.QWordValue) > _0_02.QWordValue) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6992 |
AllInactive := false; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6993 |
|
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6994 |
if targ <> nil then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6995 |
begin |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6996 |
tX:=Gear^.X-targ^.X; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6997 |
tY:=Gear^.Y-targ^.Y; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
6998 |
// allow escaping - should maybe flag this too |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
6999 |
if (GameTicks > Gear^.FlightTime+10000) or |
13605
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7000 |
((tX.Round+tY.Round > Gear^.Angle*6) and |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7001 |
(hwRound(hwSqr(tX) + hwSqr(tY)) > sqr(Gear^.Angle*6))) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7002 |
targ:= nil |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7003 |
end; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7004 |
|
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7005 |
// If in ready timer, or after turn, or in first 5 seconds of turn (really a window due to extra time utility) |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7006 |
// or mine is inactive due to lack of gsttmpflag or hunting is disabled due to seek radius of 0 |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7007 |
// then we aren't hunting |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
7008 |
if (ReadyTimeLeft > 0) or (TurnTimeLeft = 0) or |
13605
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7009 |
((TurnTimeLeft < cHedgehogTurnTime) and (cHedgehogTurnTime-TurnTimeLeft < 5000)) or |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7010 |
(Gear^.State and gsttmpFlag = 0) or |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7011 |
(Gear^.Angle = 0) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7012 |
gear^.State:= gear^.State and (not gstChooseTarget) |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7013 |
else if |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7014 |
// todo, allow not finding new target, set timeout on target retention |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7015 |
(Gear^.State and gstAttacking = 0) and |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7016 |
((GameTicks and $FF) = 17) and |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7017 |
(GameTicks > Gear^.FlightTime) then // recheck hunted hog |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7018 |
begin |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7019 |
gear^.State:= gear^.State or gstChooseTarget; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7020 |
if targ <> nil then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7021 |
targDist:= Distance(Gear^.X-targ^.X,Gear^.Y-targ^.Y).Round |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7022 |
else targDist:= 0; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7023 |
for t:= 0 to Pred(TeamsCount) do |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7024 |
with TeamsArray[t]^ do |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7025 |
for i:= 0 to cMaxHHIndex do |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7026 |
if Hedgehogs[i].Gear <> nil then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7027 |
begin |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7028 |
tmpG:= Hedgehogs[i].Gear; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7029 |
tX:=Gear^.X-tmpG^.X; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7030 |
tY:=Gear^.Y-tmpG^.Y; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7031 |
if (Gear^.Angle = $FFFFFFFF) or |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7032 |
((tX.Round+tY.Round < Gear^.Angle) and |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7033 |
(hwRound(hwSqr(tX) + hwSqr(tY)) < sqr(Gear^.Angle))) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7034 |
begin |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7035 |
if targ <> nil then tmpDist:= Distance(tX,tY).Round; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7036 |
if (targ = nil) or (tmpDist < targDist) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7037 |
begin |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7038 |
if targ = nil then targDist:= Distance(tX,tY).Round |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7039 |
else targDist:= tmpDist; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7040 |
Gear^.Hedgehog:= @Hedgehogs[i]; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7041 |
targ:= tmpG; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7042 |
end |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7043 |
end |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7044 |
end; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7045 |
if targ <> nil then Gear^.FlightTime:= GameTicks + 5000 |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7046 |
end; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7047 |
|
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7048 |
if ((Gear^.State and gsttmpFlag) <> 0) and (Gear^.Health <> 0) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7049 |
begin |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7050 |
if ((Gear^.State and gstAttacking) = 0) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7051 |
begin |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7052 |
if ((GameTicks and $1F) = 0) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7053 |
begin |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7054 |
if targ <> nil then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7055 |
begin |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7056 |
tX:=Gear^.X-targ^.X; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7057 |
tY:=Gear^.Y-targ^.Y; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7058 |
if (tX.Round+tY.Round < Gear^.Boom) and |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7059 |
(hwRound(hwSqr(tX) + hwSqr(tY)) < sqr(Gear^.Boom)) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7060 |
Gear^.State := Gear^.State or gstAttacking |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7061 |
end |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7062 |
else if (Gear^.Angle > 0) and (CheckGearNear(Gear, gtHedgehog, Gear^.Boom, Gear^.Boom) <> nil) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7063 |
Gear^.State := Gear^.State or gstAttacking |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7064 |
end |
7627 | 7065 |
end |
13605
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7066 |
else // gstAttacking <> 0 |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7067 |
begin |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7068 |
AllInactive := false; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7069 |
if (Gear^.Timer and $1FF) = 0 then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7070 |
PlaySound(sndVaporize); |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7071 |
if Gear^.Timer = 0 then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7072 |
begin |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7073 |
// recheck |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7074 |
if targ <> nil then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7075 |
begin |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7076 |
tX:=Gear^.X-targ^.X; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7077 |
tY:=Gear^.Y-targ^.Y; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7078 |
if (tX.Round+tY.Round < Gear^.Boom) and |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7079 |
(hwRound(hwSqr(tX) + hwSqr(tY)) < sqr(Gear^.Boom)) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7080 |
begin |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7081 |
Gear^.Hedgehog:= CurrentHedgehog; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7082 |
tmpG:= FollowGear; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7083 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7084 |
FollowGear:= tmpG; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7085 |
DeleteGear(Gear); |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7086 |
exit |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7087 |
end |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7088 |
end |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7089 |
else if (Gear^.Angle > 0) and (CheckGearNear(Gear, gtHedgehog, Gear^.Boom, Gear^.Boom) <> nil) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7090 |
begin |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7091 |
Gear^.Hedgehog:= CurrentHedgehog; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7092 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7093 |
DeleteGear(Gear); |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7094 |
exit |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7095 |
end; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7096 |
Gear^.State:= Gear^.State and (not gstAttacking); |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7097 |
Gear^.Timer:= Gear^.WDTimer |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7098 |
end; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7099 |
if Gear^.Timer > 0 then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7100 |
dec(Gear^.Timer); |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7101 |
end |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7102 |
end |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7103 |
else // gsttmpFlag = 0 |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7104 |
if (TurnTimeLeft = 0) |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7105 |
or ((GameFlags and gfInfAttack <> 0) and (GameTicks > Gear^.FlightTime)) |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7106 |
or (CurrentHedgehog^.Gear = nil) then |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7107 |
begin |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7108 |
Gear^.FlightTime:= GameTicks; |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7109 |
Gear^.State := Gear^.State or gsttmpFlag |
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7110 |
end |
7627 | 7111 |
end; |
13605
422d6062620a
hijack the duck for an attempted resurrection of the creeper. initial pass.
nemo
parents:
13604
diff
changeset
|
7112 |
|
7730
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7729
diff
changeset
|
7113 |
//////////////////////////////////////////////////////////////////////////////// |
7754 | 7114 |
procedure doStepKnife(Gear: PGear); |
8370 | 7115 |
var a: real; |
7754 | 7116 |
begin |
7117 |
// Gear is shrunk so it can actually escape the hog without carving into the terrain |
|
13470
7b4643ff60ea
Refactor collision mask checks, remove hardcoded numbers
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
7118 |
if (Gear^.Radius = 4) and (Gear^.CollisionMask = lfAll) then Gear^.Radius:= 7; |
7872
ab6db9e07c4d
Allow cleavers to be knocked loose by explosions. Probabilities might need tweaking.
nemo
parents:
7864
diff
changeset
|
7119 |
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
|
7120 |
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
|
7121 |
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
|
7122 |
Gear^.Damage:= 0; |
7759 | 7123 |
if Gear^.Timer > 0 then dec(Gear^.Timer); |
7754 | 7124 |
if (Gear^.State and gstMoving <> 0) and (Gear^.State and gstCollision = 0) then |
7125 |
begin |
|
7126 |
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
|
7127 |
Gear^.Radius:= 7; |
7754 | 7128 |
// used for damage and impact calc. needs balancing I think |
11468
2f6f8baa2a97
Make weapon damage in most cases be a structure value and also expose it to lua. Needs testing/review due to conditions at time of doing this (w/ one arm, dizzy/tingling due to sodium citrate), and just number of places changed..
nemo
parents:
11391
diff
changeset
|
7129 |
Gear^.Health:= hwRound(hwSqr((hwAbs(Gear^.dY)+hwAbs(Gear^.dX))*Gear^.Boom/10000)); |
7754 | 7130 |
doStepFallingGear(Gear); |
7131 |
AllInactive := false; |
|
7864
667b7583c389
double cleaver rotation speed, also make spin direction dX dependent.
nemo
parents:
7829
diff
changeset
|
7132 |
a:= Gear^.DirAngle; |
667b7583c389
double cleaver rotation speed, also make spin direction dX dependent.
nemo
parents:
7829
diff
changeset
|
7133 |
CalcRotationDirAngle(Gear); |
667b7583c389
double cleaver rotation speed, also make spin direction dX dependent.
nemo
parents:
7829
diff
changeset
|
7134 |
Gear^.DirAngle:= a+(Gear^.DirAngle-a)*2*hwSign(Gear^.dX) // double rotation |
7754 | 7135 |
end |
7759 | 7136 |
else if (Gear^.CollisionIndex = -1) and (Gear^.Timer = 0) then |
7754 | 7137 |
begin |
11765
10860d4bca22
Add sound effects for: cleaver impact, air mine impact, using extra time
Wuzzy <almikes@aol.com>
parents:
11553
diff
changeset
|
7138 |
if Gear^.Health > 0 then |
10860d4bca22
Add sound effects for: cleaver impact, air mine impact, using extra time
Wuzzy <almikes@aol.com>
parents:
11553
diff
changeset
|
7139 |
PlaySound(Gear^.ImpactSound); |
10860d4bca22
Add sound effects for: cleaver impact, air mine impact, using extra time
Wuzzy <almikes@aol.com>
parents:
11553
diff
changeset
|
7140 |
|
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
|
7141 |
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
|
7142 |
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
|
7143 |
((not Gear^.dX.isNegative) and (not Gear^.dY.isNegative)) then Gear^.DirAngle:= Gear^.DirAngle-90; |
7754 | 7144 |
Gear^.dX:= _0; |
7145 |
Gear^.dY:= _0; |
|
7146 |
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
|
7147 |
Gear^.Radius:= 16; |
7754 | 7148 |
if Gear^.Health > 0 then AmmoShove(Gear, Gear^.Health, 0); |
7149 |
Gear^.Health:= 0; |
|
7759 | 7150 |
Gear^.Timer:= 500; |
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9289
diff
changeset
|
7151 |
AddCI(Gear) |
7754 | 7152 |
end |
7153 |
else if GameTicks and $3F = 0 then |
|
7154 |
begin |
|
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9698
diff
changeset
|
7155 |
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
|
7156 |
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
|
7157 |
and (TestCollisionXwithGear(Gear,-1) = 0) |
7754 | 7158 |
and (TestCollisionYwithGear(Gear, 1) = 0) then Gear^.State:= Gear^.State and (not gstCollision) or gstMoving; |
7159 |
end |
|
7160 |
end; |
|
12192 | 7161 |
|
7162 |
//////////////////////////////////////////////////////////////////////////////// |
|
12898 | 7163 |
procedure doStepMinigunWork(Gear: PGear); |
7164 |
var HHGear: PGear; |
|
7165 |
bullet: PGear; |
|
7166 |
rx, ry: hwFloat; |
|
7167 |
gX, gY: LongInt; |
|
7168 |
begin |
|
7169 |
AllInactive:= false; |
|
7170 |
HHGear := Gear^.Hedgehog^.Gear; |
|
7171 |
if HHGear = nil then |
|
7172 |
begin |
|
7173 |
ClearHitOrder(); |
|
7174 |
DeleteGear(gear); |
|
7175 |
exit |
|
7176 |
end; |
|
7177 |
||
7178 |
HedgehogChAngle(HHGear); |
|
7179 |
||
7180 |
dec(Gear^.Timer); |
|
7181 |
if (Gear^.Timer mod 50) = 0 then |
|
7182 |
begin |
|
7183 |
Gear^.Tag := ((Gear^.Tag - 1) and 1) + 2; |
|
7184 |
||
7185 |
gX := hwRound(Gear^.X) + GetLaunchX(amMinigun, hwSign(HHGear^.dX), HHGear^.Angle); |
|
7186 |
gY := hwRound(Gear^.Y) + GetLaunchY(amMinigun, HHGear^.Angle); |
|
7187 |
rx := rndSign(getRandomf * _0_2); |
|
7188 |
ry := rndSign(getRandomf * _0_2); |
|
7189 |
||
7190 |
bullet:= AddGear(gx, gy, gtMinigunBullet, 0, SignAs(AngleSin(HHGear^.Angle) * _0_8, HHGear^.dX) + rx, AngleCos(HHGear^.Angle) * ( - _0_8) + ry, 0); |
|
13469
f1d349a52bc7
Refactor: lfCurrentHog→lfCurHogCrate, lfNotCurrentMask→lfNotCurHogCrate
Wuzzy <Wuzzy2@mail.ru>
parents:
13408
diff
changeset
|
7191 |
bullet^.CollisionMask:= lfNotCurHogCrate; |
12898 | 7192 |
bullet^.WDTimer := Gear^.WDTimer; |
7193 |
Inc(Gear^.WDTimer); |
|
7194 |
||
13147
7040506c831f
Fix direction of dispensed bullet shells from shotgun/sniper/minigun
alfadur
parents:
13140
diff
changeset
|
7195 |
CreateShellForGear(Gear, Gear^.Tag and 1); |
12898 | 7196 |
end; |
7197 |
||
7198 |
if (Gear^.Timer = 0) or ((HHGear^.State and gstHHDriven) = 0) then |
|
7199 |
begin |
|
13323 | 7200 |
if (HHGear^.State and gstHHDriven) = 0 then |
7201 |
StopSound(sndMinigun); |
|
12898 | 7202 |
HHGear^.State := HHGear^.State and (not gstNotKickable); |
7203 |
ClearHitOrder(); |
|
7204 |
DeleteGear(Gear); |
|
7205 |
AfterAttack |
|
7206 |
end |
|
7207 |
end; |
|
7208 |
||
7209 |
procedure doStepMinigun(Gear: PGear); |
|
7210 |
var HHGear: PGear; |
|
7211 |
begin |
|
7212 |
dec(Gear^.Timer); |
|
7213 |
if (Gear^.Timer mod 100) = 0 then |
|
7214 |
Gear^.Tag := (Gear^.Tag + 1) and 1; |
|
7215 |
||
7216 |
if Gear^.Timer = 0 then |
|
7217 |
begin |
|
7218 |
Gear^.Tag := 2; |
|
7219 |
HHGear := Gear^.Hedgehog^.Gear; |
|
7220 |
HHGear^.Message := HHGear^.Message and (not (gmUp or gmDown)); |
|
7221 |
HHGear^.State := HHGear^.State or gstNotKickable; |
|
7222 |
||
13154
44351ea57b71
Minigun: Move attack timer to Karma to make gear type more Lua-friendly
Wuzzy <Wuzzy2@mail.ru>
parents:
13153
diff
changeset
|
7223 |
Gear^.Timer := Gear^.Karma; |
12898 | 7224 |
Gear^.WDTimer := 0; // Order of the next bullet; |
7225 |
ClearHitOrder(); |
|
7226 |
Gear^.doStep := @doStepMinigunWork |
|
7227 |
end; |
|
7228 |
end; |
|
7229 |
||
7230 |
//////////////////////////////////////////////////////////////////////////////// |
|
7231 |
||
7232 |
procedure doStepMinigunBullet(Gear: PGear); |
|
7233 |
begin |
|
15678 | 7234 |
if Gear^.Data = nil then |
7235 |
// remember who fired this |
|
7236 |
if (Gear^.Hedgehog <> nil) and (Gear^.Hedgehog^.Gear <> nil) then |
|
7237 |
Gear^.Data:= Pointer(Gear^.Hedgehog^.Gear); |
|
12898 | 7238 |
|
7239 |
Gear^.X := Gear^.X + Gear^.dX * 2; |
|
7240 |
Gear^.Y := Gear^.Y + Gear^.dY * 2; |
|
13151
deab88f1f6f7
Improve appearance of bullet trails, slight fade out at beginning
alfadur
parents:
13147
diff
changeset
|
7241 |
Gear^.FlightTime := 0; |
12898 | 7242 |
Gear^.doStep := @doStepBulletWork |
7243 |
end; |
|
7244 |
||
15661 | 7245 |
//////////////////////////////////////////////////////////////////////////////// |
15663 | 7246 |
|
15681 | 7247 |
function MakeSentryStep(Sentry: PGear; maxYStep: LongInt; TestOnly: Boolean): Boolean; |
15669 | 7248 |
var x, y, offset, direction: LongInt; |
7249 |
begin |
|
7250 |
MakeSentryStep := false; |
|
7251 |
x := hwRound(Sentry^.X); |
|
7252 |
y := hwRound(Sentry^.Y); |
|
7253 |
direction := hwSign(Sentry^.dX); |
|
7254 |
||
7255 |
for offset := -maxYStep - 1 to maxYStep + 1 do |
|
7256 |
begin |
|
7257 |
if TestCollisionYImpl(x + direction, y + offset, Sentry^.Radius, 1, Sentry^.CollisionMask) <> 0 then |
|
7258 |
break; |
|
7259 |
end; |
|
7260 |
||
15736
7a4b719ac611
prevent sentries from getting stuck in the corners
alfadur
parents:
15735
diff
changeset
|
7261 |
if (offset >= -maxYStep) and (offset <= maxYStep) |
7a4b719ac611
prevent sentries from getting stuck in the corners
alfadur
parents:
15735
diff
changeset
|
7262 |
and (TestCollisionYImpl(x + direction, y + offset, Sentry^.Radius, -1, Sentry^.CollisionMask) = 0) then |
15669 | 7263 |
begin |
15681 | 7264 |
if not TestOnly then |
7265 |
begin |
|
7266 |
Sentry^.X := Sentry^.X + signAs(_1, Sentry^.dX); |
|
7267 |
Sentry^.Y := Sentry^.Y + int2hwFloat(offset); |
|
7268 |
end; |
|
15669 | 7269 |
MakeSentryStep := true |
7270 |
end |
|
7271 |
end; |
|
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
7272 |
|
15692 | 7273 |
function MakeSentryJump(Sentry: PGear; maxXStep, maxYStep: LongInt): Boolean; |
15735 | 7274 |
var x, y, offsetX, offsetY, direction: LongInt; |
15692 | 7275 |
jumpTime: hwFloat; |
7276 |
begin |
|
7277 |
MakeSentryJump := false; |
|
7278 |
x := hwRound(Sentry^.X); |
|
7279 |
y := hwRound(Sentry^.Y); |
|
15735 | 7280 |
offsetX := maxXStep - Sentry^.Radius; |
7281 |
direction := hwSign(Sentry^.dX); |
|
7282 |
||
15692 | 7283 |
repeat |
7284 |
for offsetY := -maxYStep - 1 to maxYStep + 1 do |
|
15735 | 7285 |
if TestCollisionYImpl(x + offsetX * direction, y + offsetY, Sentry^.Radius, 1, Sentry^.CollisionMask) <> 0 then |
15692 | 7286 |
break; |
7287 |
if (offsetY >= -maxYStep) and (offsetY <= maxYStep) then |
|
7288 |
break; |
|
15735 | 7289 |
Dec(offsetX, Sentry^.Radius); |
15692 | 7290 |
until offsetX <= 0; |
7291 |
||
15735 | 7292 |
if (offsetX >= Sentry^.Radius) and (not cGravity.isNegative) then |
15692 | 7293 |
begin |
7294 |
Sentry^.dY := -_0_25; |
|
7295 |
jumpTime := _2 * Sentry^.dY / cGravity; |
|
15735 | 7296 |
Sentry^.dX := SignAs(int2hwFloat(offsetX - Sentry^.Radius) / jumpTime, Sentry^.dX); |
15869 | 7297 |
Sentry^.State := Sentry^.State or gstHHJumping; |
15692 | 7298 |
MakeSentryJump := true; |
7299 |
end; |
|
7300 |
end; |
|
15669 | 7301 |
|
15670 | 7302 |
function TraceAttackPath(fromX, fromY, toX, toY, step: hwFloat; mask: Word): LongWord; |
7303 |
var distX, distY, dist, invDistance: HwFloat; |
|
7304 |
i, count: LongInt; |
|
7305 |
begin |
|
7306 |
TraceAttackPath := 0; |
|
7307 |
if (step < _1) |
|
7308 |
or ((hwRound(fromX) and LAND_WIDTH_MASK) <> 0) |
|
7309 |
or ((hwRound(toX) and LAND_WIDTH_MASK) <> 0) |
|
7310 |
or ((hwRound(fromY) and LAND_HEIGHT_MASK) <> 0) |
|
7311 |
or ((hwRound(toY) and LAND_HEIGHT_MASK) <> 0) then |
|
7312 |
exit; |
|
7313 |
||
7314 |
distX := toX - fromX; |
|
7315 |
distY := toY - fromY; |
|
7316 |
dist := Distance(distX, distY); |
|
7317 |
count := hwRound(dist / step); |
|
7318 |
||
7319 |
invDistance := step / dist; |
|
7320 |
distX := distX * invDistance; |
|
7321 |
distY := distY * invDistance; |
|
7322 |
||
7323 |
for i := 0 to count - 1 do |
|
7324 |
begin |
|
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15927
diff
changeset
|
7325 |
if (LandGet(hwRound(fromY), hwRound(fromX)) and mask) <> 0 then |
15670 | 7326 |
Inc(TraceAttackPath); |
7327 |
fromX := fromX + distX; |
|
7328 |
fromY := fromY + distY; |
|
7329 |
end |
|
7330 |
end; |
|
7331 |
||
15682
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7332 |
function CheckSentryAttackRange(Sentry: PGear; targetX, targetY: HwFloat): Boolean; |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7333 |
var distX, distY: hwFloat; |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7334 |
begin |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7335 |
distX := targetX - Sentry^.X; |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7336 |
distY := targetY - Sentry^.Y; |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7337 |
CheckSentryAttackRange := |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7338 |
(distX.isNegative = Sentry^.dX.isNegative) |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7339 |
and (distX.Round > 24) |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7340 |
and (distX.Round < 500) |
15683 | 7341 |
and (hwAbs(distY) < hwAbs(distX * _1_5)) |
15682
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7342 |
and (TraceAttackPath(Sentry^.X, Sentry^.Y, targetX, targetY, _4, lfLandMask) <= 18); |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7343 |
end; |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7344 |
|
15734 | 7345 |
procedure ResetSentryState(Gear: PGear; state, timer: LongInt); |
7346 |
begin |
|
7347 |
Gear^.Timer := timer; |
|
7348 |
Gear^.Tag := state; |
|
7349 |
Gear^.Target.X := 0; |
|
7350 |
Gear^.Target.Y := 0; |
|
7351 |
if Gear^.Karma <> 0 then |
|
7352 |
begin |
|
7353 |
ClearGlobalHitOrderLeq(Gear^.Karma); |
|
7354 |
Gear^.Karma := 0; |
|
7355 |
end; |
|
7356 |
end; |
|
7357 |
||
15739 | 7358 |
function CheckSentryDestroyed(Sentry: PGear; damagedState: LongInt): Boolean; |
7359 |
begin |
|
7360 |
CheckSentryDestroyed := false; |
|
7361 |
if Sentry^.Damage > 0 then |
|
7362 |
begin |
|
7363 |
dec(Sentry^.Health, Sentry^.Damage); |
|
7364 |
Sentry^.Damage := 0; |
|
7365 |
if Sentry^.Health <= 0 then |
|
7366 |
begin |
|
7367 |
doMakeExplosion(hwRound(Sentry^.X), hwRound(Sentry^.Y), Sentry^.Boom, Sentry^.Hedgehog, EXPLAutoSound); |
|
7368 |
DeleteGear(Sentry); |
|
7369 |
CheckSentryDestroyed := true; |
|
7370 |
exit; |
|
7371 |
end |
|
7372 |
else |
|
7373 |
ResetSentryState(Sentry, damagedState, 10000) |
|
7374 |
end; |
|
7375 |
||
7376 |
if ((Sentry^.Health * 100) < random(cSentryHealth * 90)) and ((GameTicks and $FF) = 0) then |
|
7377 |
if Sentry^.Health * 2 < cSentryHealth then |
|
7378 |
AddVisualGear(hwRound(Sentry^.X) - 8 + Random(16), hwRound(Sentry^.Y) - 2, vgtSmoke) |
|
7379 |
else |
|
7380 |
AddVisualGear(hwRound(Sentry^.X) - 8 + Random(16), hwRound(Sentry^.Y) - 2, vgtSmokeWhite); |
|
7381 |
end; |
|
7382 |
||
7383 |
procedure AimSentry(Sentry: PGear); |
|
7384 |
var HHGear: PGear; |
|
7385 |
begin |
|
7386 |
if CurrentHedgehog <> nil then |
|
7387 |
begin |
|
7388 |
HHGear := CurrentHedgehog^.Gear; |
|
7389 |
if HHGear <> nil then |
|
7390 |
begin |
|
7391 |
Sentry^.Target.X := Sentry^.Target.X + hwSign(HHGear^.X - int2hwFloat(Sentry^.Target.X)); |
|
7392 |
Sentry^.Target.Y := Sentry^.Target.Y + hwSign(HHGear^.Y - int2hwFloat(Sentry^.Target.Y)); |
|
7393 |
end; |
|
7394 |
end; |
|
7395 |
end; |
|
7396 |
||
7397 |
procedure MakeSentryShot(Sentry: PGear); |
|
7398 |
var bullet: PGear; |
|
7399 |
distX, distY, invDistance: HwFloat; |
|
7400 |
begin |
|
7401 |
distX := int2hwFloat(Sentry^.Target.X) - Sentry^.X; |
|
7402 |
distY := int2hwFloat(Sentry^.Target.Y) - Sentry^.Y; |
|
7403 |
invDistance := _1 / Distance(distX, distY); |
|
7404 |
distX := distX * invDistance; |
|
7405 |
distY := distY * invDistance; |
|
7406 |
||
7407 |
bullet := AddGear( |
|
7408 |
hwRound(Sentry^.X), hwRound(Sentry^.Y), |
|
7409 |
gtMinigunBullet, 0, |
|
7410 |
distX * _0_9 + rndSign(getRandomf * _0_1), |
|
7411 |
distY * _0_9 + rndSign(getRandomf * _0_1), |
|
7412 |
0); |
|
7413 |
||
7414 |
bullet^.Karma := 12; |
|
15864 | 7415 |
bullet^.Pos := 1; // To tell apart from minigun bullets |
15739 | 7416 |
bullet^.WDTimer := GameTicks; |
7417 |
bullet^.PortalCounter := 1; |
|
7418 |
bullet^.Elasticity := Sentry^.X; |
|
7419 |
bullet^.Friction := Sentry^.Y; |
|
7420 |
bullet^.Data := Pointer(Sentry); |
|
15845 | 7421 |
bullet^.Hedgehog := Sentry^.Hedgehog; |
15739 | 7422 |
|
7423 |
CreateShellForGear(Sentry, Sentry^.WDTimer and 1); |
|
7424 |
PlaySound(sndGun); |
|
7425 |
end; |
|
7426 |
||
15843
4a1e3d824c34
make domesticated sentries not target their owners
alfadur
parents:
15841
diff
changeset
|
7427 |
function GetSentryTarget(sentry: PGear): PGear; |
15740 | 7428 |
var HHGear: PGear; |
15843
4a1e3d824c34
make domesticated sentries not target their owners
alfadur
parents:
15841
diff
changeset
|
7429 |
friendlyTarget: boolean; |
15740 | 7430 |
begin |
7431 |
GetSentryTarget := nil; |
|
15843
4a1e3d824c34
make domesticated sentries not target their owners
alfadur
parents:
15841
diff
changeset
|
7432 |
friendlyTarget := false; |
4a1e3d824c34
make domesticated sentries not target their owners
alfadur
parents:
15841
diff
changeset
|
7433 |
|
4a1e3d824c34
make domesticated sentries not target their owners
alfadur
parents:
15841
diff
changeset
|
7434 |
if CurrentHedgehog <> nil then |
15740 | 7435 |
begin |
7436 |
HHGear := CurrentHedgehog^.Gear; |
|
7437 |
if HHGear <> nil then |
|
15843
4a1e3d824c34
make domesticated sentries not target their owners
alfadur
parents:
15841
diff
changeset
|
7438 |
if ((HHGear^.State and gstHHDriven) <> 0) and (HHGear^.CollisionIndex < 0) then |
4a1e3d824c34
make domesticated sentries not target their owners
alfadur
parents:
15841
diff
changeset
|
7439 |
begin |
4a1e3d824c34
make domesticated sentries not target their owners
alfadur
parents:
15841
diff
changeset
|
7440 |
if sentry^.Hedgehog <> nil then |
15844 | 7441 |
friendlyTarget := sentry^.Hedgehog^.Team^.Clan = CurrentHedgehog^.Team^.Clan; |
15843
4a1e3d824c34
make domesticated sentries not target their owners
alfadur
parents:
15841
diff
changeset
|
7442 |
if not friendlyTarget then |
4a1e3d824c34
make domesticated sentries not target their owners
alfadur
parents:
15841
diff
changeset
|
7443 |
GetSentryTarget := HHGear; |
4a1e3d824c34
make domesticated sentries not target their owners
alfadur
parents:
15841
diff
changeset
|
7444 |
end |
15740 | 7445 |
end |
7446 |
end; |
|
7447 |
||
15737 | 7448 |
procedure doStepSentryLand(Gear: PGear); |
15739 | 7449 |
var HHGear: PGear; |
15869 | 7450 |
land: Word; |
15664 | 7451 |
const sentry_Idle = 0; |
7452 |
sentry_Walking = 1; |
|
7453 |
sentry_Aiming = 2; |
|
7454 |
sentry_Attacking = 3; |
|
7455 |
sentry_Reloading = 4; |
|
15661 | 7456 |
begin |
15663 | 7457 |
HHGear:= nil; |
7458 |
||
15662 | 7459 |
if CheckGearDrowning(Gear) then |
7460 |
exit; |
|
7461 |
||
15739 | 7462 |
if CheckSentryDestroyed(Gear, sentry_Reloading) then |
7463 |
exit; |
|
15733 | 7464 |
|
15869 | 7465 |
land := TestCollisionYwithGear(Gear, 1); |
7466 |
if Gear^.dY.isNegative or (land = 0) or |
|
7467 |
((Gear^.dY.QWordValue > _0_01.QWordValue) and ((Gear^.State and gstHHJumping) = 0)) then |
|
15662 | 7468 |
begin |
15744 | 7469 |
DeleteCI(Gear); |
15662 | 7470 |
doStepFallingGear(Gear); |
15734 | 7471 |
if not (Gear^.Tag in [sentry_Idle, sentry_Reloading]) then |
7472 |
ResetSentryState(Gear, sentry_Idle, 1000); |
|
15662 | 7473 |
exit; |
15744 | 7474 |
end |
7475 |
else |
|
15869 | 7476 |
begin |
15744 | 7477 |
AddCI(Gear); |
15869 | 7478 |
Gear^.State := Gear^.State and (not gstHHJumping); |
7479 |
Gear^.dX := SignAs(_0, Gear^.dX); |
|
7480 |
Gear^.dY := SignAs(_0, Gear^.dY); |
|
7481 |
end; |
|
15662 | 7482 |
|
15664 | 7483 |
if Gear^.Timer > 0 then dec(Gear^.Timer); |
7484 |
||
7485 |
if Gear^.Timer = 0 then |
|
15662 | 7486 |
begin |
15744 | 7487 |
DeleteCI(Gear); |
15664 | 7488 |
if Gear^.Tag = sentry_Idle then |
7489 |
begin |
|
7490 |
Gear^.Tag := sentry_Walking; |
|
7491 |
Gear^.Timer := 1000 + GetRandom(3000); |
|
15692 | 7492 |
if GetRandom(4) = 0 then |
7493 |
begin |
|
7494 |
if MakeSentryJump(Gear, 80, 60) then |
|
7495 |
Gear^.Timer := 4000 |
|
7496 |
else |
|
7497 |
Gear^.Timer := 1000; |
|
7498 |
Gear^.Tag := sentry_Idle; |
|
7499 |
end |
|
7500 |
else |
|
7501 |
begin |
|
7502 |
Gear^.dX.isNegative := GetRandom(2) = 1; |
|
7503 |
||
7504 |
if MakeSentryStep(Gear, 6, true) then |
|
15681 | 7505 |
begin |
15692 | 7506 |
if GetRandom(4) = 0 then |
7507 |
begin |
|
7508 |
Gear^.Timer := 2000; |
|
7509 |
Gear^.Tag := sentry_Idle; |
|
7510 |
end; |
|
7511 |
end |
|
7512 |
else |
|
7513 |
begin |
|
7514 |
Gear^.dX.isNegative := not Gear^.dX.isNegative; |
|
7515 |
if not MakeSentryStep(Gear, 6, true) then |
|
7516 |
begin |
|
7517 |
if GetRandom(2) = 0 then |
|
7518 |
begin |
|
15741 | 7519 |
Gear^.dY := - _0_1; |
7520 |
if TestCollisionYKick(Gear, -1) = 0 then |
|
7521 |
Gear^.dY := - _0_25; |
|
15692 | 7522 |
Gear^.Timer := 3000; |
7523 |
end |
|
7524 |
else |
|
7525 |
Gear^.Timer := 5000; |
|
7526 |
Gear^.Tag := sentry_Idle; |
|
7527 |
end; |
|
7528 |
end |
|
15681 | 7529 |
end |
15664 | 7530 |
end |
7531 |
else if Gear^.Tag in [sentry_Walking, sentry_Reloading] then |
|
7532 |
begin |
|
7533 |
Gear^.Tag := sentry_Idle; |
|
15662 | 7534 |
Gear^.Timer := 1000 + GetRandom(1000); |
7535 |
end |
|
15664 | 7536 |
else if Gear^.Tag = sentry_Aiming then |
7537 |
begin |
|
15682
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7538 |
if CheckSentryAttackRange(Gear, int2hwFloat(Gear^.Target.X), int2hwFloat(Gear^.Target.Y)) then |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7539 |
begin |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7540 |
Gear^.WDTimer := 5 + GetRandom(3); |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7541 |
Gear^.Tag := sentry_Attacking; |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7542 |
Gear^.Timer := 100; |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7543 |
end |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7544 |
else |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7545 |
begin |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7546 |
Gear^.Target.X := 0; |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7547 |
Gear^.Target.Y := 0; |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7548 |
Gear^.Tag := sentry_Idle; |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7549 |
Gear^.Timer := 5000; |
5ce76c658c22
don't shoot if the target moves out of range while aiming
alfadur
parents:
15681
diff
changeset
|
7550 |
end |
15664 | 7551 |
end |
7552 |
else if Gear^.Tag = sentry_Attacking then |
|
7553 |
begin |
|
15739 | 7554 |
MakeSentryShot(Gear); |
15664 | 7555 |
|
7556 |
if Gear^.WDTimer = 0 then |
|
15739 | 7557 |
ResetSentryState(Gear, sentry_Reloading, 6000 + GetRandom(2000)) |
15664 | 7558 |
else |
7559 |
begin |
|
7560 |
dec(Gear^.WDTimer); |
|
15678 | 7561 |
Gear^.Timer := 100; |
15664 | 7562 |
end |
7563 |
end; |
|
15744 | 7564 |
AddCI(Gear); |
15662 | 7565 |
end; |
7566 |
||
15664 | 7567 |
if (Gear^.Tag = sentry_Walking) and ((GameTicks and $1F) = 0) then |
15662 | 7568 |
begin |
15744 | 7569 |
DeleteCI(Gear); |
15681 | 7570 |
if not MakeSentryStep(Gear, 6, false) then |
15744 | 7571 |
Gear^.Timer := 0; |
7572 |
AddCI(Gear); |
|
15662 | 7573 |
end; |
15663 | 7574 |
|
15739 | 7575 |
if ((GameTicks and $1F) = 0) and (Gear^.Tag = sentry_Aiming) then |
7576 |
AimSentry(Gear); |
|
15679 | 7577 |
|
15663 | 7578 |
if ((GameTicks and $FF) = 0) |
15740 | 7579 |
and (Gear^.Tag in [sentry_Idle, sentry_Walking]) then |
15663 | 7580 |
begin |
15843
4a1e3d824c34
make domesticated sentries not target their owners
alfadur
parents:
15841
diff
changeset
|
7581 |
HHGear := GetSentryTarget(Gear); |
15740 | 7582 |
if HHGear <> nil then |
7583 |
if CheckSentryAttackRange(Gear, HHGear^.X, HHGear^.Y) then |
|
7584 |
begin |
|
7585 |
Gear^.Target.X := hwRound(HHGear^.X); |
|
7586 |
Gear^.Target.Y := hwRound(HHGear^.Y); |
|
7587 |
Gear^.Karma := GameTicks; |
|
7588 |
Gear^.Tag := sentry_Aiming; |
|
7589 |
Gear^.Timer := 1800 + GetRandom(400); |
|
7590 |
end |
|
15663 | 7591 |
end |
15661 | 7592 |
end; |
7593 |
||
15738 | 7594 |
procedure doStepSentryWater(Gear: PGear); |
15739 | 7595 |
var HHGear: PGear; |
7596 |
const sentry_Idle = 0; |
|
7597 |
sentry_Walking = 1; |
|
7598 |
sentry_Aiming = 2; |
|
7599 |
sentry_Attacking = 3; |
|
7600 |
sentry_Reloading = 4; |
|
15738 | 7601 |
begin |
7602 |
if Gear^.Tag < 0 then |
|
7603 |
begin |
|
7604 |
CheckGearDrowning(Gear); |
|
7605 |
exit; |
|
7606 |
end; |
|
7607 |
||
7608 |
Gear^.Y := int2hwFloat(cWaterLine - 3 * Gear^.Radius); |
|
15746 | 7609 |
if TestCollisionYImpl(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Radius - 1, -1, Gear^.CollisionMask and lfLandMask) <> 0 then |
15738 | 7610 |
begin |
7611 |
Gear^.Tag := -1; |
|
7612 |
exit; |
|
7613 |
end; |
|
15739 | 7614 |
|
7615 |
if CheckSentryDestroyed(Gear, sentry_Reloading) then |
|
7616 |
exit; |
|
7617 |
||
7618 |
if Gear^.Timer > 0 then dec(Gear^.Timer); |
|
7619 |
||
7620 |
if Gear^.Timer = 0 then |
|
7621 |
begin |
|
7622 |
if Gear^.Tag = sentry_Idle then |
|
7623 |
begin |
|
7624 |
Gear^.Tag := sentry_Walking; |
|
7625 |
Gear^.Timer := 3000 + GetRandom(3000); |
|
7626 |
Gear^.dX.isNegative := GetRandom(2) = 1; |
|
7627 |
if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) <> 0 then |
|
7628 |
Gear^.dX.isNegative := not Gear^.dX.isNegative; |
|
7629 |
end |
|
7630 |
else if Gear^.Tag in [sentry_Walking, sentry_Reloading] then |
|
7631 |
begin |
|
7632 |
Gear^.Tag := sentry_Idle; |
|
7633 |
Gear^.Timer := 1000 + GetRandom(1000); |
|
7634 |
end |
|
7635 |
else if Gear^.Tag = sentry_Aiming then |
|
7636 |
begin |
|
7637 |
if CheckSentryAttackRange(Gear, int2hwFloat(Gear^.Target.X), int2hwFloat(Gear^.Target.Y)) then |
|
7638 |
begin |
|
7639 |
Gear^.WDTimer := 5 + GetRandom(3); |
|
7640 |
Gear^.Tag := sentry_Attacking; |
|
7641 |
Gear^.Timer := 100; |
|
7642 |
end |
|
7643 |
else |
|
7644 |
begin |
|
7645 |
Gear^.Target.X := 0; |
|
7646 |
Gear^.Target.Y := 0; |
|
7647 |
Gear^.Tag := sentry_Idle; |
|
7648 |
Gear^.Timer := 5000; |
|
7649 |
end |
|
7650 |
end |
|
7651 |
else if Gear^.Tag = sentry_Attacking then |
|
7652 |
begin |
|
7653 |
MakeSentryShot(Gear); |
|
7654 |
||
7655 |
if Gear^.WDTimer = 0 then |
|
7656 |
ResetSentryState(Gear, sentry_Reloading, 6000 + GetRandom(2000)) |
|
7657 |
else |
|
7658 |
begin |
|
7659 |
dec(Gear^.WDTimer); |
|
7660 |
Gear^.Timer := 100; |
|
7661 |
end |
|
7662 |
end; |
|
7663 |
end; |
|
7664 |
||
7665 |
if (Gear^.Tag = sentry_Walking) and ((GameTicks and $1F) = 0) then |
|
7666 |
begin |
|
7667 |
if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) = 0 then |
|
15743 | 7668 |
begin |
7669 |
Gear^.dX := SignAs(_1, Gear^.dX); |
|
7670 |
Gear^.X := Gear^.X + Gear^.dX; |
|
7671 |
WorldWrap(Gear); |
|
7672 |
end |
|
15739 | 7673 |
else |
7674 |
Gear^.Timer := 0 |
|
7675 |
end; |
|
7676 |
||
7677 |
if ((GameTicks and $1F) = 0) and (Gear^.Tag = sentry_Aiming) then |
|
7678 |
AimSentry(Gear); |
|
7679 |
||
7680 |
if ((GameTicks and $FF) = 0) |
|
15740 | 7681 |
and (Gear^.Tag in [sentry_Idle, sentry_Walking]) then |
15739 | 7682 |
begin |
15843
4a1e3d824c34
make domesticated sentries not target their owners
alfadur
parents:
15841
diff
changeset
|
7683 |
HHGear := GetSentryTarget(Gear); |
15740 | 7684 |
if HHGear <> nil then |
7685 |
if CheckSentryAttackRange(Gear, HHGear^.X, HHGear^.Y) then |
|
7686 |
begin |
|
7687 |
Gear^.Target.X := hwRound(HHGear^.X); |
|
7688 |
Gear^.Target.Y := hwRound(HHGear^.Y); |
|
7689 |
Gear^.Karma := GameTicks; |
|
7690 |
Gear^.Tag := sentry_Aiming; |
|
7691 |
Gear^.Timer := 1800 + GetRandom(400); |
|
7692 |
end |
|
15739 | 7693 |
end |
15738 | 7694 |
end; |
7695 |
||
15737 | 7696 |
procedure doStepSentryDeploy(Gear: PGear); |
7697 |
begin |
|
7698 |
Gear^.Tag := -1; |
|
15738 | 7699 |
if hwRound(Gear^.Y) + 3 * Gear^.Radius >= cWaterLine then |
7700 |
begin |
|
7701 |
Gear^.Y := int2hwFloat(cWaterLine - 3 * Gear^.Radius); |
|
7702 |
if Gear^.Timer > 0 then dec(Gear^.Timer); |
|
7703 |
if Gear^.Timer = 0 then |
|
7704 |
begin |
|
7705 |
Gear^.Tag := 0; |
|
7706 |
Gear^.doStep := @doStepSentryWater; |
|
7707 |
end; |
|
7708 |
end |
|
7709 |
else if Gear^.dY.isNegative or (TestCollisionYwithGear(Gear, 1) = 0) then |
|
15737 | 7710 |
doStepFallingGear(Gear) |
7711 |
else |
|
7712 |
begin |
|
7713 |
if Gear^.Timer > 0 then dec(Gear^.Timer); |
|
7714 |
if Gear^.Timer = 0 then |
|
7715 |
begin |
|
7716 |
Gear^.Tag := 0; |
|
7717 |
Gear^.doStep := @doStepSentryLand; |
|
7718 |
end; |
|
7719 |
end; |
|
7720 |
end; |
|
7721 |
||
15674
3d8c2ab2b98b
Tweak airplane spawn point to avoid appear out of nowhere
Wuzzy <Wuzzy2@mail.ru>
parents:
15670
diff
changeset
|
7722 |
end. |