author | Wuzzy <Wuzzy2@mail.ru> |
Tue, 07 Jul 2020 00:07:40 +0200 | |
changeset 15717 | eeab5b90c082 |
parent 15672 | 85d2afe34116 |
child 15929 | 128ace913837 |
permissions | -rw-r--r-- |
6581 | 1 |
(* |
2 |
* Hedgewars, a free turn based strategy game |
|
11046 | 3 |
* Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com> |
6581 | 4 |
* |
5 |
* This program is free software; you can redistribute it and/or modify |
|
6 |
* it under the terms of the GNU General Public License as published by |
|
7 |
* the Free Software Foundation; version 2 of the License |
|
8 |
* |
|
9 |
* This program is distributed in the hope that it will be useful, |
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
12 |
* GNU General Public License for more details. |
|
13 |
* |
|
14 |
* You should have received a copy of the GNU General Public License |
|
15 |
* along with this program; if not, write to the Free Software |
|
10108
c68cf030eded
update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents:
10105
diff
changeset
|
16 |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
6581 | 17 |
*) |
18 |
||
19 |
{$INCLUDE "options.inc"} |
|
20 |
||
21 |
unit uGearsHedgehog; |
|
22 |
interface |
|
10015 | 23 |
uses uTypes, uGearsHandlersMess; |
6581 | 24 |
|
25 |
procedure doStepHedgehog(Gear: PGear); |
|
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
26 |
procedure AfterAttack; |
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
27 |
procedure HedgehogStep(Gear: PGear); |
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
28 |
procedure doStepHedgehogMoving(Gear: PGear); |
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
29 |
procedure HedgehogChAngle(HHGear: PGear); |
6581 | 30 |
procedure PickUp(HH, Gear: PGear); |
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:
7375
diff
changeset
|
31 |
procedure AddPickup(HH: THedgehog; ammo: TAmmoType; cnt, X, Y: LongWord); |
8574 | 32 |
procedure CheckIce(Gear: PGear); inline; |
12815
92218a06c9ff
Don't send taunt message for automatically happening taunt animation
unc0rr
parents:
12649
diff
changeset
|
33 |
procedure PlayTaunt(taunt: Longword); |
13533
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
34 |
function HHGetTimer(Gear: PGear): LongWord; |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
35 |
function HHGetTimerMsg(Gear: PGear): LongWord; |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
36 |
function HHGetBounciness(Gear: PGear): LongWord; |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
37 |
function HHGetBouncinessMsg(Gear: PGear): LongWord; |
6581 | 38 |
|
39 |
implementation |
|
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
40 |
uses uConsts, uVariables, uFloat, uAmmos, uSound, uCaptions, |
9285 | 41 |
uCommands, uLocale, uUtils, uStats, uIO, uScript, |
42 |
uGearsList, uCollisions, uRandom, uStore, uTeams, |
|
9670
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
43 |
uGearsUtils, uVisualGearsList, uChat; |
6581 | 44 |
|
7028 | 45 |
var GHStepTicks: LongWord = 0; |
46 |
||
9670
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
47 |
procedure AFKSkip; |
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
48 |
var |
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
49 |
t: byte; |
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
50 |
begin |
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
51 |
t:= 0; |
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
52 |
while (TeamsArray[t] <> CurrentTeam) do inc(t); |
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
53 |
|
13897
aa321e51da14
make explicit for pas2c some string casts that fpc was probably doing automatically
nemo
parents:
13891
diff
changeset
|
54 |
AddChatString(#2 + Format(shortstring(trmsg[sidAutoSkip]), CurrentTeam^.TeamName)); |
9670
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
55 |
|
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
56 |
ParseCommand('/skip', true) |
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
57 |
end; |
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
58 |
|
6581 | 59 |
// Shouldn't more of this ammo switching stuff be moved to uAmmos ? |
12304
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
60 |
function ChangeAmmo(HHGear: PGear): boolean; |
6581 | 61 |
var slot, i: Longword; |
12304
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
62 |
ammoidx: LongInt; |
7754 | 63 |
prevAmmo: TAmmoType; |
6581 | 64 |
begin |
65 |
ChangeAmmo:= false; |
|
66 |
slot:= HHGear^.MsgParam; |
|
67 |
||
68 |
with HHGear^.Hedgehog^ do |
|
69 |
begin |
|
70 |
HHGear^.Message:= HHGear^.Message and (not gmSlot); |
|
7754 | 71 |
prevAmmo:= CurAmmoType; |
6581 | 72 |
ammoidx:= 0; |
9732
a13afa6c5d21
don't abort changeammo on attacking/attacked in infattack mode, keep scrolling through slot after setweap even if a multishoot was aborted triggering gstattacked, to ensure proper ammo gets set for next turn
nemo
parents:
9731
diff
changeset
|
73 |
if (((HHGear^.State and (gstAttacking or gstAttacked)) <> 0) and (GameFlags and gfInfAttack = 0)) |
6581 | 74 |
or ((HHGear^.State and gstHHDriven) = 0) then |
75 |
exit; |
|
76 |
ChangeAmmo:= true; |
|
12304
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
77 |
|
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
78 |
while (ammoidx < cMaxSlotAmmoIndex) and (Ammo^[slot, ammoidx].AmmoType <> CurAmmoType) do |
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
79 |
inc(ammoidx); |
6581 | 80 |
|
8553
a8e1cff496d8
Allow switching away from any weapon when during multishoot.
nemo
parents:
8494
diff
changeset
|
81 |
if (MultiShootAttacks > 0) then |
a8e1cff496d8
Allow switching away from any weapon when during multishoot.
nemo
parents:
8494
diff
changeset
|
82 |
begin |
13096
d78e65c66573
Add hedgehog effect heArtillery, allows to set per-hedgehog artillery mode
Wuzzy <Wuzzy2@mail.ru>
parents:
12996
diff
changeset
|
83 |
if (Effects[heArtillery] = 2) then |
d78e65c66573
Add hedgehog effect heArtillery, allows to set per-hedgehog artillery mode
Wuzzy <Wuzzy2@mail.ru>
parents:
12996
diff
changeset
|
84 |
Effects[heArtillery]:= 0; |
8631
796ed875aa95
Call act as if attack ended on last shot if switching while in mid multi-shoot. Thanks to AI for discovering this.
nemo
parents:
8616
diff
changeset
|
85 |
if (Ammoz[CurAmmoType].Ammo.Propz and ammoprop_NoRoundEnd) = 0 then |
796ed875aa95
Call act as if attack ended on last shot if switching while in mid multi-shoot. Thanks to AI for discovering this.
nemo
parents:
8616
diff
changeset
|
86 |
begin |
796ed875aa95
Call act as if attack ended on last shot if switching while in mid multi-shoot. Thanks to AI for discovering this.
nemo
parents:
8616
diff
changeset
|
87 |
MultiShootAttacks:= Ammoz[CurAmmoType].Ammo.NumPerTurn; |
796ed875aa95
Call act as if attack ended on last shot if switching while in mid multi-shoot. Thanks to AI for discovering this.
nemo
parents:
8616
diff
changeset
|
88 |
AfterAttack |
796ed875aa95
Call act as if attack ended on last shot if switching while in mid multi-shoot. Thanks to AI for discovering this.
nemo
parents:
8616
diff
changeset
|
89 |
end |
796ed875aa95
Call act as if attack ended on last shot if switching while in mid multi-shoot. Thanks to AI for discovering this.
nemo
parents:
8616
diff
changeset
|
90 |
else OnUsedAmmo(HHGear^.Hedgehog^) |
8553
a8e1cff496d8
Allow switching away from any weapon when during multishoot.
nemo
parents:
8494
diff
changeset
|
91 |
end; |
6581 | 92 |
|
93 |
MultiShootAttacks:= 0; |
|
94 |
HHGear^.Message:= HHGear^.Message and (not (gmLJump or gmHJump)); |
|
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
95 |
|
12304
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
96 |
if Ammoz[CurAmmoType].Slot = slot then |
6581 | 97 |
begin |
98 |
i:= 0; |
|
99 |
repeat |
|
12304
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
100 |
inc(ammoidx); |
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
101 |
if (ammoidx > cMaxSlotAmmoIndex) then |
6581 | 102 |
begin |
103 |
inc(i); |
|
104 |
CurAmmoType:= amNothing; |
|
105 |
ammoidx:= -1; |
|
106 |
//TryDo(i < 2, 'Engine bug: no ammo in current slot', true) |
|
107 |
end; |
|
108 |
until (i = 1) or ((Ammo^[slot, ammoidx].Count > 0) |
|
109 |
and (Team^.Clan^.TurnNumber > Ammoz[Ammo^[slot, ammoidx].AmmoType].SkipTurns)) |
|
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
110 |
|
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
111 |
end |
6581 | 112 |
else |
113 |
begin |
|
12304
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
114 |
i:= 0; |
6581 | 115 |
// check whether there is ammo in slot |
12304
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
116 |
while (i <= cMaxSlotAmmoIndex) and ((Ammo^[slot, i].Count = 0) |
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
117 |
or (Team^.Clan^.TurnNumber <= Ammoz[Ammo^[slot, i].AmmoType].SkipTurns)) |
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
118 |
do inc(i); |
6581 | 119 |
|
12304
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
120 |
if i <= cMaxSlotAmmoIndex then |
6581 | 121 |
ammoidx:= i |
122 |
else ammoidx:= -1 |
|
123 |
end; |
|
124 |
if ammoidx >= 0 then |
|
125 |
CurAmmoType:= Ammo^[slot, ammoidx].AmmoType; |
|
12304
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
126 |
// Try again in the next slot |
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
127 |
if (CurAmmoType = prevAmmo) and (slot < cMaxSlotIndex) then |
8051
f26422ef0333
oft-requested, should make the shoppa guys happy, probably, but, knowing them, I'm sure someone will complain
nemo
parents:
8030
diff
changeset
|
128 |
begin |
12304
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
129 |
inc(slot); |
8051
f26422ef0333
oft-requested, should make the shoppa guys happy, probably, but, knowing them, I'm sure someone will complain
nemo
parents:
8030
diff
changeset
|
130 |
HHGear^.MsgParam:= slot; |
12304
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
131 |
ChangeAmmo(HHGear) |
7754 | 132 |
end |
6581 | 133 |
end |
134 |
end; |
|
135 |
||
136 |
procedure HHSetWeapon(HHGear: PGear); |
|
137 |
var t: LongInt; |
|
138 |
weap: TAmmoType; |
|
139 |
Hedgehog: PHedgehog; |
|
140 |
s: boolean; |
|
9732
a13afa6c5d21
don't abort changeammo on attacking/attacked in infattack mode, keep scrolling through slot after setweap even if a multishoot was aborted triggering gstattacked, to ensure proper ammo gets set for next turn
nemo
parents:
9731
diff
changeset
|
141 |
prevState, newState: LongWord; |
6581 | 142 |
begin |
143 |
s:= false; |
|
144 |
||
145 |
weap:= TAmmoType(HHGear^.MsgParam); |
|
146 |
Hedgehog:= HHGear^.Hedgehog; |
|
147 |
||
12912
a840fd55caa6
Calling SetWeapon with amNothing now unselects weapon
Wuzzy <Wuzzy2@mail.ru>
parents:
12898
diff
changeset
|
148 |
HHGear^.Message:= HHGear^.Message and (not gmWeapon); |
a840fd55caa6
Calling SetWeapon with amNothing now unselects weapon
Wuzzy <Wuzzy2@mail.ru>
parents:
12898
diff
changeset
|
149 |
|
6581 | 150 |
if Hedgehog^.Team^.Clan^.TurnNumber <= Ammoz[weap].SkipTurns then |
151 |
exit; // weapon is not activated yet |
|
152 |
||
153 |
HHGear^.MsgParam:= Ammoz[weap].Slot; |
|
154 |
||
155 |
t:= cMaxSlotAmmoIndex; |
|
156 |
||
9732
a13afa6c5d21
don't abort changeammo on attacking/attacked in infattack mode, keep scrolling through slot after setweap even if a multishoot was aborted triggering gstattacked, to ensure proper ammo gets set for next turn
nemo
parents:
9731
diff
changeset
|
157 |
prevState:= HHGear^.State; |
a13afa6c5d21
don't abort changeammo on attacking/attacked in infattack mode, keep scrolling through slot after setweap even if a multishoot was aborted triggering gstattacked, to ensure proper ammo gets set for next turn
nemo
parents:
9731
diff
changeset
|
158 |
newState:= prevState; |
6581 | 159 |
with Hedgehog^ do |
160 |
while (CurAmmoType <> weap) and (t >= 0) do |
|
161 |
begin |
|
12304
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
162 |
s:= ChangeAmmo(HHGear); |
9732
a13afa6c5d21
don't abort changeammo on attacking/attacked in infattack mode, keep scrolling through slot after setweap even if a multishoot was aborted triggering gstattacked, to ensure proper ammo gets set for next turn
nemo
parents:
9731
diff
changeset
|
163 |
if HHGear^.State <> prevState then // so we can keep gstAttacked out of consideration when looping |
a13afa6c5d21
don't abort changeammo on attacking/attacked in infattack mode, keep scrolling through slot after setweap even if a multishoot was aborted triggering gstattacked, to ensure proper ammo gets set for next turn
nemo
parents:
9731
diff
changeset
|
164 |
newState:= HHGear^.State; |
a13afa6c5d21
don't abort changeammo on attacking/attacked in infattack mode, keep scrolling through slot after setweap even if a multishoot was aborted triggering gstattacked, to ensure proper ammo gets set for next turn
nemo
parents:
9731
diff
changeset
|
165 |
HHGear^.State:= prevState; |
6581 | 166 |
dec(t) |
167 |
end; |
|
9732
a13afa6c5d21
don't abort changeammo on attacking/attacked in infattack mode, keep scrolling through slot after setweap even if a multishoot was aborted triggering gstattacked, to ensure proper ammo gets set for next turn
nemo
parents:
9731
diff
changeset
|
168 |
HHGear^.State:= newState; |
6581 | 169 |
|
170 |
if s then |
|
171 |
ApplyAmmoChanges(HHGear^.Hedgehog^) |
|
172 |
end; |
|
173 |
||
174 |
procedure HHSetTimer(Gear: PGear); |
|
175 |
var CurWeapon: PAmmo; |
|
176 |
color: LongWord; |
|
177 |
begin |
|
178 |
Gear^.Message:= Gear^.Message and (not gmTimer); |
|
6924 | 179 |
CurWeapon:= GetCurAmmoEntry(Gear^.Hedgehog^); |
6581 | 180 |
with Gear^.Hedgehog^ do |
13826
5d46b4fae757
Ignore gmTimer after attack or hog is no longer controlled
Wuzzy <Wuzzy2@mail.ru>
parents:
13770
diff
changeset
|
181 |
if (((Gear^.State and gstAttacked) <> 0) and (GameFlags and gfInfAttack = 0)) |
5d46b4fae757
Ignore gmTimer after attack or hog is no longer controlled
Wuzzy <Wuzzy2@mail.ru>
parents:
13770
diff
changeset
|
182 |
or ((Gear^.State and gstHHDriven) = 0) then |
5d46b4fae757
Ignore gmTimer after attack or hog is no longer controlled
Wuzzy <Wuzzy2@mail.ru>
parents:
13770
diff
changeset
|
183 |
exit; |
6581 | 184 |
if ((Gear^.Message and gmPrecise) <> 0) and ((CurWeapon^.Propz and ammoprop_SetBounce) <> 0) then |
185 |
begin |
|
186 |
color:= Gear^.Hedgehog^.Team^.Clan^.Color; |
|
13532
ee77086fc5fa
Move hardcoded bounciness values to uConsts
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
187 |
|
6581 | 188 |
case Gear^.MsgParam of |
189 |
1: begin |
|
10116
dd27562b6f21
rolling back my PChar stuff, because unC0Rr improves string handling pas2c instead <3
sheepluva
parents:
10108
diff
changeset
|
190 |
AddCaption(FormatA(trmsg[sidBounce], trmsg[sidBounce1]), color, capgrpAmmostate); |
6581 | 191 |
end; |
192 |
2: begin |
|
10116
dd27562b6f21
rolling back my PChar stuff, because unC0Rr improves string handling pas2c instead <3
sheepluva
parents:
10108
diff
changeset
|
193 |
AddCaption(FormatA(trmsg[sidBounce], trmsg[sidBounce2]), color, capgrpAmmostate); |
6581 | 194 |
end; |
195 |
3: begin |
|
10116
dd27562b6f21
rolling back my PChar stuff, because unC0Rr improves string handling pas2c instead <3
sheepluva
parents:
10108
diff
changeset
|
196 |
AddCaption(FormatA(trmsg[sidBounce], trmsg[sidBounce3]), color, capgrpAmmostate); |
6581 | 197 |
end; |
198 |
4: begin |
|
10116
dd27562b6f21
rolling back my PChar stuff, because unC0Rr improves string handling pas2c instead <3
sheepluva
parents:
10108
diff
changeset
|
199 |
AddCaption(FormatA(trmsg[sidBounce], trmsg[sidBounce4]), color, capgrpAmmostate); |
6581 | 200 |
end; |
201 |
5: begin |
|
10116
dd27562b6f21
rolling back my PChar stuff, because unC0Rr improves string handling pas2c instead <3
sheepluva
parents:
10108
diff
changeset
|
202 |
AddCaption(FormatA(trmsg[sidBounce], trmsg[sidBounce5]), color, capgrpAmmostate); |
6581 | 203 |
end |
13532
ee77086fc5fa
Move hardcoded bounciness values to uConsts
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
204 |
end; |
ee77086fc5fa
Move hardcoded bounciness values to uConsts
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
205 |
CurWeapon^.Bounciness:= bouncinessLevels[Gear^.MsgParam - 1]; |
6581 | 206 |
end |
207 |
else if (CurWeapon^.Propz and ammoprop_Timerable) <> 0 then |
|
208 |
begin |
|
209 |
CurWeapon^.Timer:= 1000 * Gear^.MsgParam; |
|
210 |
with CurrentTeam^ do |
|
211 |
ApplyAmmoChanges(Hedgehogs[CurrHedgehog]); |
|
212 |
end; |
|
213 |
end; |
|
214 |
||
13533
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
215 |
// Return timer (in ticks) of hogs current ammo or MSGPARAM_INVALID |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
216 |
// if not timerable |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
217 |
function HHGetTimer(Gear: PGear): LongWord; |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
218 |
var CurWeapon: PAmmo; |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
219 |
begin |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
220 |
CurWeapon:= GetCurAmmoEntry(Gear^.Hedgehog^); |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
221 |
with Gear^.Hedgehog^ do |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
222 |
if ((CurWeapon^.Propz and ammoprop_Timerable) <> 0) then |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
223 |
HHGetTimer:= CurWeapon^.Timer |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
224 |
else |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
225 |
HHGetTimer:= MSGPARAM_INVALID; |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
226 |
end; |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
227 |
|
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
228 |
// Returns timer as a corresponding msgParam for /timer command |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
229 |
function HHGetTimerMsg(Gear: PGear): LongWord; |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
230 |
var timer: LongInt; |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
231 |
begin |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
232 |
timer:= HHGetTimer(Gear); |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
233 |
if timer > -1 then |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
234 |
HHGetTimerMsg:= timer div 1000 |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
235 |
else |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
236 |
HHGetTimerMsg:= MSGPARAM_INVALID |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
237 |
end; |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
238 |
|
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
239 |
// Returns the selected bounciness value for the hog gear's current ammo |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
240 |
// or MSGPARAM_INVALID if current ammo has no settable bounciness |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
241 |
function HHGetBounciness(Gear: PGear): LongWord; |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
242 |
var CurWeapon: PAmmo; |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
243 |
begin |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
244 |
CurWeapon:= GetCurAmmoEntry(Gear^.Hedgehog^); |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
245 |
with Gear^.Hedgehog^ do |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
246 |
if ((CurWeapon^.Propz and ammoprop_SetBounce) <> 0) then |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
247 |
HHGetBounciness:= CurWeapon^.Bounciness |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
248 |
else |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
249 |
HHGetBounciness:= MSGPARAM_INVALID |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
250 |
end; |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
251 |
|
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
252 |
// Returns bounciness as a corresponding msgParam for /timer command |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
253 |
function HHGetBouncinessMsg(Gear: PGear): LongWord; |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
254 |
var bounciness, i: LongInt; |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
255 |
begin |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
256 |
bounciness:= HHGetBounciness(Gear); |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
257 |
if bounciness > -1 then |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
258 |
for i:=0 to High(bouncinessLevels) do |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
259 |
if bounciness = bouncinessLevels[i] then |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
260 |
begin |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
261 |
HHGetBouncinessMsg:= i+1; |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
262 |
exit |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
263 |
end; |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
264 |
HHGetBouncinessMsg:= MSGPARAM_INVALID |
0c8001e43fd3
Add control to cycle through timer/bounciness values
Wuzzy <Wuzzy2@mail.ru>
parents:
13532
diff
changeset
|
265 |
end; |
6581 | 266 |
|
267 |
procedure Attack(Gear: PGear); |
|
268 |
var xx, yy, newDx, newDy, lx, ly: hwFloat; |
|
269 |
speech: PVisualGear; |
|
270 |
newGear: PGear; |
|
271 |
CurWeapon: PAmmo; |
|
10970
7341e0c3f966
LuaAPI: fix OnHogAttack the incorrect AmmoType (amNothing) under certain conditions. Thanks for CheezeMonkey for reporting this
sheepluva
parents:
10942
diff
changeset
|
272 |
usedAmmoType: TAmmoType; |
15167
6b7d92fa4912
Keep hog facing direction while on parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15148
diff
changeset
|
273 |
altUse, faceLeft: boolean; |
6581 | 274 |
elastic: hwFloat; |
275 |
begin |
|
276 |
newGear:= nil; |
|
277 |
bShowFinger:= false; |
|
6924 | 278 |
CurWeapon:= GetCurAmmoEntry(Gear^.Hedgehog^); |
6581 | 279 |
with Gear^, |
280 |
Gear^.Hedgehog^ do |
|
281 |
begin |
|
10970
7341e0c3f966
LuaAPI: fix OnHogAttack the incorrect AmmoType (amNothing) under certain conditions. Thanks for CheezeMonkey for reporting this
sheepluva
parents:
10942
diff
changeset
|
282 |
usedAmmoType:= CurAmmoType; |
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:
10789
diff
changeset
|
283 |
if ((State and gstHHDriven) <> 0) and ((State and (gstAttacked or gstChooseTarget)) = 0) and (((State and gstMoving) = 0) |
6581 | 284 |
or (Power > 0) |
285 |
or (CurAmmoType = amTeleport) |
|
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
286 |
or |
6581 | 287 |
// Allow attacks while moving on ammo with AltAttack |
288 |
((CurAmmoGear <> nil) and ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) <> 0)) |
|
289 |
or ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_AttackInMove) <> 0)) |
|
290 |
and ((TargetPoint.X <> NoPointX) or ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_NeedTarget) = 0)) then |
|
291 |
begin |
|
292 |
State:= State or gstAttacking; |
|
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
293 |
if (Power = cMaxPower) or ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_Power) = 0) then |
6581 | 294 |
Message:= Message and (not gmAttack) |
295 |
else |
|
296 |
begin |
|
297 |
if Power = 0 then |
|
298 |
begin |
|
299 |
AttackBar:= CurrentTeam^.AttackBar; |
|
300 |
PlaySound(sndThrowPowerUp) |
|
301 |
end; |
|
302 |
inc(Power) |
|
303 |
end; |
|
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
304 |
if ((Message and gmAttack) <> 0) then |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
305 |
exit; |
6581 | 306 |
|
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
307 |
if (Ammoz[CurAmmoType].Ammo.Propz and ammoprop_Power) <> 0 then |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
308 |
begin |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
309 |
StopSound(sndThrowPowerUp); |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
310 |
PlaySound(sndThrowRelease); |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
311 |
end; |
6581 | 312 |
|
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
313 |
xx:= SignAs(AngleSin(Angle), dX); |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
314 |
yy:= -AngleCos(Angle); |
6581 | 315 |
|
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
316 |
lx:= X + int2hwfloat(round(GetLaunchX(CurAmmoType, hwSign(dX), Angle))); |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
317 |
ly:= Y + int2hwfloat(round(GetLaunchY(CurAmmoType, Angle))); |
6581 | 318 |
|
13096
d78e65c66573
Add hedgehog effect heArtillery, allows to set per-hedgehog artillery mode
Wuzzy <Wuzzy2@mail.ru>
parents:
12996
diff
changeset
|
319 |
if ((Gear^.State and gstHHHJump) <> 0) and (Effects[heArtillery] = 0) then |
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
320 |
xx:= - xx; |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
321 |
if Ammoz[CurAmmoType].Ammo.AttackVoice <> sndNone then |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
322 |
AddVoice(Ammoz[CurAmmoType].Ammo.AttackVoice, CurrentTeam^.voicepack); |
6581 | 323 |
|
324 |
// Initiating alt attack |
|
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
325 |
if (CurAmmoGear <> nil) |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
326 |
and ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) <> 0) |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
327 |
and ((Gear^.Message and gmLJump) <> 0) |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
328 |
and ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_AltUse) <> 0) then |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
329 |
begin |
8987
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8947
diff
changeset
|
330 |
if (CurAmmoGear^.AmmoType = amJetpack) and (Gear^.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:
8947
diff
changeset
|
331 |
begin |
8992
5b0be812dcdb
Rename submersible state, increase getaway time for attack underwater, slow down gear dx/dy underwater to simulate water resistance
nemo
parents:
8987
diff
changeset
|
332 |
newDx:= xx*cMaxPower/cPowerDivisor; |
5b0be812dcdb
Rename submersible state, increase getaway time for attack underwater, slow down gear dx/dy underwater to simulate water resistance
nemo
parents:
8987
diff
changeset
|
333 |
newDy:= yy*cMaxPower/cPowerDivisor |
8987
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8947
diff
changeset
|
334 |
end |
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8947
diff
changeset
|
335 |
else |
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8947
diff
changeset
|
336 |
begin |
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8947
diff
changeset
|
337 |
newDx:= dX; |
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8947
diff
changeset
|
338 |
newDy:= dY |
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8947
diff
changeset
|
339 |
end; |
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
340 |
altUse:= true |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
341 |
end |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
342 |
else |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
343 |
begin |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
344 |
newDx:= xx*Power/cPowerDivisor; |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
345 |
newDy:= yy*Power/cPowerDivisor; |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
346 |
altUse:= false |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
347 |
end; |
6581 | 348 |
|
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
349 |
case CurAmmoType of |
6581 | 350 |
amGrenade: newGear:= AddGear(hwRound(lx), hwRound(ly), gtGrenade, 0, newDx, newDy, CurWeapon^.Timer); |
10789
acbf69e2e5cf
experiment with air mines. thought they could make shoppa... interesting. ToDo: Allow mines to give up, tweak distances, real graphics, toggle for whether they can acquire a new target while they haven't given up.
nemo
parents:
10714
diff
changeset
|
351 |
amAirMine: newGear:= AddGear(hwRound(lx), hwRound(ly), gtAirMine, 0, newDx, newDy, 0); |
6581 | 352 |
amMolotov: newGear:= AddGear(hwRound(lx), hwRound(ly), gtMolotov, 0, newDx, newDy, 0); |
353 |
amClusterBomb: newGear:= AddGear(hwRound(lx), hwRound(ly), gtClusterBomb, 0, newDx, newDy, CurWeapon^.Timer); |
|
354 |
amGasBomb: newGear:= AddGear(hwRound(lx), hwRound(ly), gtGasBomb, 0, newDx, newDy, CurWeapon^.Timer); |
|
355 |
amBazooka: newGear:= AddGear(hwRound(lx), hwRound(ly), gtShell, 0, newDx, newDy, 0); |
|
356 |
amSnowball: newGear:= AddGear(hwRound(lx), hwRound(ly), gtSnowball, 0, newDx, newDy, 0); |
|
357 |
amBee: newGear:= AddGear(hwRound(lx), hwRound(ly), gtBee, 0, newDx, newDy, 0); |
|
358 |
amShotgun: begin |
|
359 |
PlaySound(sndShotgunReload); |
|
360 |
newGear:= AddGear(hwRound(lx), hwRound(ly), gtShotgunShot, 0, xx * _0_5, yy * _0_5, 0); |
|
361 |
end; |
|
362 |
amPickHammer: newGear:= AddGear(hwRound(lx), hwRound(ly) + cHHRadius, gtPickHammer, 0, _0, _0, 0); |
|
363 |
amSkip: ParseCommand('/skip', true); |
|
364 |
amRope: newGear:= AddGear(hwRound(lx), hwRound(ly), gtRope, 0, xx, yy, 0); |
|
10942
5d7dd938dedc
This probably fixes bug #839 - mine time was hardcoded to 3000 in Attack, instead of using the "0 as undefined" input that other places were using. When re653e96b0ec3 started paying attention to the input parameter, this previously ignored value became a problem.
nemo
parents:
10895
diff
changeset
|
365 |
amMine: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtMine, gstWait, SignAs(_0_02, dX), _0, 0); |
6581 | 366 |
amSMine: newGear:= AddGear(hwRound(lx), hwRound(ly), gtSMine, 0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0); |
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
367 |
amKnife: begin |
7754 | 368 |
newGear:= AddGear(hwRound(lx), hwRound(ly), gtKnife, 0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0); |
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
369 |
newGear^.State:= newGear^.State or gstMoving; |
8494
53b91a602955
Cleaver tweaks based on feedback. Nerf damage, shrink radius. This means cleaver will embed into ground quite a bit further.
nemo
parents:
8493
diff
changeset
|
370 |
newGear^.Radius:= 4 // temporarily shrink so it doesn't instantly embed in the ground |
7754 | 371 |
end; |
6581 | 372 |
amDEagle: newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtDEagleShot, 0, xx * _0_5, yy * _0_5, 0); |
13161 | 373 |
amMinigun: begin |
374 |
PlaySound(sndMinigun); |
|
375 |
newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtMinigun, 0, xx * _0_5, yy * _0_5, 0); |
|
376 |
end; |
|
6581 | 377 |
amSineGun: newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtSineGunShot, 0, xx * _0_5, yy * _0_5, 0); |
378 |
amPortalGun: begin |
|
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
379 |
newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtPortal, 0, xx * _0_6, yy * _0_6, |
6581 | 380 |
// set selected color |
381 |
CurWeapon^.Pos); |
|
382 |
end; |
|
383 |
amSniperRifle: begin |
|
384 |
PlaySound(sndSniperReload); |
|
385 |
newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtSniperRifleShot, 0, xx * _0_5, yy * _0_5, 0); |
|
386 |
end; |
|
387 |
amDynamite: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtDynamite, 0, SignAs(_0_03, dX), _0, 5000); |
|
13872
f01798038c2e
Rename amDuck and related symbols to amCreeper, gtCreeper, etc.
Wuzzy <Wuzzy2@mail.ru>
parents:
13857
diff
changeset
|
388 |
amCreeper: begin |
f01798038c2e
Rename amDuck and related symbols to amCreeper, gtCreeper, etc.
Wuzzy <Wuzzy2@mail.ru>
parents:
13857
diff
changeset
|
389 |
// TODO: Implement proper creeper spawning code. This is still the old rubber duck code. |
f01798038c2e
Rename amDuck and related symbols to amCreeper, gtCreeper, etc.
Wuzzy <Wuzzy2@mail.ru>
parents:
13857
diff
changeset
|
390 |
|
f01798038c2e
Rename amDuck and related symbols to amCreeper, gtCreeper, etc.
Wuzzy <Wuzzy2@mail.ru>
parents:
13857
diff
changeset
|
391 |
// Does it spawn inside water? |
12204
0a7d7256d3d8
Don't play duck drop sound when duck spawns in water
Wuzzy <almikes@aol.com>
parents:
12194
diff
changeset
|
392 |
if (LeftX > hwRound(Gear^.X) - Gear^.Karma) or (RightX < hwRound(Gear^.X) + Gear^.Karma) or (cWaterLine < hwRound(Gear^.Y) + Gear^.Karma) then |
0a7d7256d3d8
Don't play duck drop sound when duck spawns in water
Wuzzy <almikes@aol.com>
parents:
12194
diff
changeset
|
393 |
PlaySound(sndDroplet2) |
0a7d7256d3d8
Don't play duck drop sound when duck spawns in water
Wuzzy <almikes@aol.com>
parents:
12194
diff
changeset
|
394 |
else |
13872
f01798038c2e
Rename amDuck and related symbols to amCreeper, gtCreeper, etc.
Wuzzy <Wuzzy2@mail.ru>
parents:
13857
diff
changeset
|
395 |
// spawned in air, normal drop sound |
f01798038c2e
Rename amDuck and related symbols to amCreeper, gtCreeper, etc.
Wuzzy <Wuzzy2@mail.ru>
parents:
13857
diff
changeset
|
396 |
PlaySound(sndCreeperDrop); |
f01798038c2e
Rename amDuck and related symbols to amCreeper, gtCreeper, etc.
Wuzzy <Wuzzy2@mail.ru>
parents:
13857
diff
changeset
|
397 |
newGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtCreeper, 0, SignAs(_0_03, dX), _0, 0); |
12193
71c47122fbc0
Add ammotype amDuck for rubber duck
Wuzzy <almikes@aol.com>
parents:
12184
diff
changeset
|
398 |
if not ((not dX.isNegative) xor ((State and gstHHHJump) <> 0)) then |
71c47122fbc0
Add ammotype amDuck for rubber duck
Wuzzy <almikes@aol.com>
parents:
12184
diff
changeset
|
399 |
newGear^.Tag:= -1 |
71c47122fbc0
Add ammotype amDuck for rubber duck
Wuzzy <almikes@aol.com>
parents:
12184
diff
changeset
|
400 |
else |
71c47122fbc0
Add ammotype amDuck for rubber duck
Wuzzy <almikes@aol.com>
parents:
12184
diff
changeset
|
401 |
newGear^.Tag:= 1; |
71c47122fbc0
Add ammotype amDuck for rubber duck
Wuzzy <almikes@aol.com>
parents:
12184
diff
changeset
|
402 |
end; |
15661 | 403 |
amSentry: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtSentry, 0, SignAs(_0_03, dX), _0, 0); |
6581 | 404 |
amFirePunch: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 10, hwRound(ly), gtFirePunch, 0, xx, _0, 0); |
405 |
amWhip: begin |
|
406 |
newGear:= AddGear(hwRound(lx) + hwSign(dX) * 10, hwRound(ly), gtWhip, 0, SignAs(_1, dX), - _0_8, 0); |
|
407 |
PlaySound(sndWhipCrack) |
|
408 |
end; |
|
409 |
amHammer: begin |
|
410 |
newGear:= AddGear(hwRound(lx) + hwSign(dX) * 10, hwRound(ly), gtHammer, 0, SignAs(_1, dX), - _0_8, 0); |
|
411 |
PlaySound(sndWhack) |
|
412 |
end; |
|
413 |
amBaseballBat: begin |
|
414 |
newGear:= AddGear(hwRound(lx) + hwSign(dX) * 10, hwRound(ly), gtShover, gsttmpFlag, xx * _0_5, yy * _0_5, 0); |
|
415 |
PlaySound(sndBaseballBat) // TODO: Only play if something is hit? |
|
416 |
end; |
|
417 |
amParachute: begin |
|
15167
6b7d92fa4912
Keep hog facing direction while on parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15148
diff
changeset
|
418 |
faceLeft:= IsHogFacingLeft(Gear); |
6581 | 419 |
newGear:= AddGear(hwRound(lx), hwRound(ly), gtParachute, 0, _0, _0, 0); |
15167
6b7d92fa4912
Keep hog facing direction while on parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15148
diff
changeset
|
420 |
if faceLeft then |
6b7d92fa4912
Keep hog facing direction while on parachute
Wuzzy <Wuzzy2@mail.ru>
parents:
15148
diff
changeset
|
421 |
newGear^.Tag:= -1; |
6581 | 422 |
PlaySound(sndParachute) |
423 |
end; |
|
424 |
// we save CurWeapon^.Pos (in this case: cursor direction) by using it as (otherwise irrelevant) X value of the new gear. |
|
425 |
amAirAttack: newGear:= AddGear(CurWeapon^.Pos, 0, gtAirAttack, 0, _0, _0, 0); |
|
426 |
amMineStrike: newGear:= AddGear(CurWeapon^.Pos, 0, gtAirAttack, 1, _0, _0, 0); |
|
427 |
amDrillStrike: newGear:= AddGear(CurWeapon^.Pos, 0, gtAirAttack, 3, _0, _0, CurWeapon^.Timer); |
|
428 |
amNapalm: newGear:= AddGear(CurWeapon^.Pos, 0, gtAirAttack, 2, _0, _0, 0); |
|
429 |
amBlowTorch: newGear:= AddGear(hwRound(lx), hwRound(ly), gtBlowTorch, 0, SignAs(_0_5, dX), _0, 0); |
|
430 |
amGirder: newGear:= AddGear(0, 0, gtGirder, CurWeapon^.Pos, _0, _0, 0); |
|
9768
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9732
diff
changeset
|
431 |
amRubber: begin |
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9732
diff
changeset
|
432 |
newGear:= AddGear(0, 0, gtGirder, CurWeapon^.Pos, _0, _0, 0); |
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9732
diff
changeset
|
433 |
newGear^.AmmoType:= amRubber |
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9732
diff
changeset
|
434 |
end; |
6581 | 435 |
amTeleport: newGear:= AddGear(CurWeapon^.Pos, 0, gtTeleport, 0, _0, _0, 0); |
436 |
amSwitch: newGear:= AddGear(hwRound(lx), hwRound(ly), gtSwitcher, 0, _0, _0, 0); |
|
437 |
amMortar: begin |
|
438 |
playSound(sndMortar); |
|
439 |
newGear:= AddGear(hwRound(lx), hwRound(ly), gtMortar, 0, xx*cMaxPower/cPowerDivisor, yy*cMaxPower/cPowerDivisor, 0); |
|
440 |
end; |
|
441 |
amRCPlane: begin |
|
442 |
newGear:= AddGear(hwRound(lx), hwRound(ly), gtRCPlane, 0, xx * cMaxPower / cPowerDivisor / 4, yy * cMaxPower / cPowerDivisor / 4, 0); |
|
7053 | 443 |
newGear^.SoundChannel:= LoopSound(sndRCPlane) |
6581 | 444 |
end; |
445 |
amKamikaze: newGear:= AddGear(hwRound(lx), hwRound(ly), gtKamikaze, 0, xx * _0_5, yy * _0_5, 0); |
|
7832 | 446 |
amCake: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 3, hwRound(ly), gtCake, 0, SignAs(cLittle, xx), _0, 0); |
6581 | 447 |
amSeduction: newGear:= AddGear(hwRound(lx), hwRound(ly), gtSeduction, 0, _0, _0, 0); |
448 |
amWatermelon: newGear:= AddGear(hwRound(lx), hwRound(ly), gtWatermelon, 0, newDx, newDy, CurWeapon^.Timer); |
|
449 |
amHellishBomb: newGear:= AddGear(hwRound(lx), hwRound(ly), gtHellishBomb, 0, newDx, newDy, 0); |
|
450 |
amDrill: newGear:= AddGear(hwRound(lx), hwRound(ly), gtDrill, 0, newDx, newDy, 0); |
|
451 |
amBallgun: newGear:= AddGear(hwRound(X), hwRound(Y), gtBallgun, 0, xx * _0_5, yy * _0_5, 0); |
|
452 |
amJetpack: newGear:= AddGear(hwRound(lx), hwRound(ly), gtJetpack, 0, _0, _0, 0); |
|
453 |
amBirdy: begin |
|
454 |
PlaySound(sndWhistle); |
|
455 |
newGear:= AddGear(hwRound(lx), hwRound(ly) - 32, gtBirdy, 0, _0, _0, 0); |
|
456 |
end; |
|
457 |
amLowGravity: begin |
|
458 |
PlaySound(sndLowGravity); |
|
459 |
cGravity:= cMaxWindSpeed; |
|
11887
083c12795632
Show symbols at bottom right while extra damage / low grav. are active
Wuzzy <almikes@aol.com>
parents:
11848
diff
changeset
|
460 |
cGravityf:= 0.00025; |
083c12795632
Show symbols at bottom right while extra damage / low grav. are active
Wuzzy <almikes@aol.com>
parents:
11848
diff
changeset
|
461 |
cLowGravity := true |
6581 | 462 |
end; |
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
463 |
amExtraDamage: begin |
14009
c28a4f76d37d
Add separate sound symbols for case impact and extra damage
Wuzzy <Wuzzy2@mail.ru>
parents:
13897
diff
changeset
|
464 |
PlaySound(sndExtraDamage); |
6581 | 465 |
cDamageModifier:= _1_5 |
466 |
end; |
|
11911
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11887
diff
changeset
|
467 |
amInvulnerable: begin |
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11887
diff
changeset
|
468 |
PlaySound(sndInvulnerable); |
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11887
diff
changeset
|
469 |
Effects[heInvulnerable]:= 1 |
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11887
diff
changeset
|
470 |
end; |
6581 | 471 |
amExtraTime: begin |
11765
10860d4bca22
Add sound effects for: cleaver impact, air mine impact, using extra time
Wuzzy <almikes@aol.com>
parents:
11624
diff
changeset
|
472 |
PlaySound(sndExtraTime); |
13663
91d48cbae927
Prevent wrapping of turn time when using extra time
Wuzzy <Wuzzy2@mail.ru>
parents:
13642
diff
changeset
|
473 |
if TurnTimeLeft <= (cMaxTurnTime - ExtraTime) then |
91d48cbae927
Prevent wrapping of turn time when using extra time
Wuzzy <Wuzzy2@mail.ru>
parents:
13642
diff
changeset
|
474 |
TurnTimeLeft:= TurnTimeLeft + ExtraTime |
91d48cbae927
Prevent wrapping of turn time when using extra time
Wuzzy <Wuzzy2@mail.ru>
parents:
13642
diff
changeset
|
475 |
else |
91d48cbae927
Prevent wrapping of turn time when using extra time
Wuzzy <Wuzzy2@mail.ru>
parents:
13642
diff
changeset
|
476 |
TurnTimeLeft:= cMaxTurnTime; |
6581 | 477 |
end; |
11911
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11887
diff
changeset
|
478 |
amLaserSight: begin |
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11887
diff
changeset
|
479 |
PlaySound(sndLaserSight); |
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11887
diff
changeset
|
480 |
cLaserSighting:= true |
6145efcff302
Add sounds for blowtorch, invuln., f. saucer, lasersight, portal gun
Wuzzy <almikes@aol.com>
parents:
11887
diff
changeset
|
481 |
end; |
6581 | 482 |
amVampiric: begin |
7053 | 483 |
PlaySoundV(sndOw1, Team^.voicepack); |
6581 | 484 |
cVampiric:= true; |
485 |
end; |
|
14587
85921db6f7c3
Disallow placement of piano beyond bounce world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
14420
diff
changeset
|
486 |
amPiano: newGear:= AddGear(TargetPoint.X, -1024, gtPiano, 0, _0, _0, 0); |
6581 | 487 |
amFlamethrower: newGear:= AddGear(hwRound(X), hwRound(Y), gtFlamethrower, 0, xx * _0_5, yy * _0_5, 0); |
488 |
amLandGun: newGear:= AddGear(hwRound(X), hwRound(Y), gtLandGun, 0, xx * _0_5, yy * _0_5, 0); |
|
489 |
amResurrector: begin |
|
490 |
newGear:= AddGear(hwRound(lx), hwRound(ly), gtResurrector, 0, _0, _0, 0); |
|
491 |
newGear^.SoundChannel := LoopSound(sndResurrector); |
|
492 |
end; |
|
9675
295636ec930a
cleanup of timer accidentally exposed prob w/ timebox
nemo
parents:
9672
diff
changeset
|
493 |
amTardis: newGear:= AddGear(hwRound(X), hwRound(Y), gtTardis, 0, _0, _0, 0); |
8774
39754516eee6
Try to document TGear a bit, so people know what is commonly overridden, and what stuff is used for. Remove gtIceGun-specific values from TGear and abuse a couple of commonly abused members instead.
nemo
parents:
8753
diff
changeset
|
494 |
amIceGun: newGear:= AddGear(hwRound(X), hwRound(Y), gtIceGun, 0, _0, _0, 0); |
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
495 |
end; |
10015 | 496 |
if altUse and (newGear <> nil) and |
8987
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8947
diff
changeset
|
497 |
((CurAmmoGear = nil) or (CurAmmoGear^.AmmoType <> amJetpack) or (Gear^.Message and gmPrecise = 0)) then |
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
498 |
begin |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
499 |
newGear^.dX:= newDx / newGear^.Density; |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
500 |
newGear^.dY:= newDY / newGear^.Density |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
501 |
end; |
8987
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8947
diff
changeset
|
502 |
if (CurAmmoGear <> nil) and (CurAmmoGear^.AmmoType = amJetpack) and |
10354 | 503 |
(Gear^.Message and gmPrecise <> 0) and CheckCoordInWater(hwRound(X), hwRound(Y)) then |
8992
5b0be812dcdb
Rename submersible state, increase getaway time for attack underwater, slow down gear dx/dy underwater to simulate water resistance
nemo
parents:
8987
diff
changeset
|
504 |
newGear^.State:= newGear^.State or gstSubmersible; |
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
505 |
|
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
506 |
case CurAmmoType of |
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
507 |
amGrenade, amMolotov, |
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
508 |
amClusterBomb, amGasBomb, |
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
509 |
amBazooka, amSnowball, |
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
510 |
amBee, amSMine, |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
511 |
amMortar, amWatermelon, |
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:
10714
diff
changeset
|
512 |
amHellishBomb, amDrill, |
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:
10714
diff
changeset
|
513 |
amAirMine: FollowGear:= newGear; |
6581 | 514 |
|
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
515 |
amShotgun, amPickHammer, |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
516 |
amRope, amDEagle, |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
517 |
amSineGun, amSniperRifle, |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
518 |
amFirePunch, amWhip, |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
519 |
amHammer, amBaseballBat, |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
520 |
amParachute, amBlowTorch, |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
521 |
amGirder, amTeleport, |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
522 |
amSwitch, amRCPlane, |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
523 |
amKamikaze, amCake, |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
524 |
amSeduction, amBallgun, |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
525 |
amJetpack, amBirdy, |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
526 |
amFlamethrower, amLandGun, |
14217
ab5e710d353d
Remove all traces of dead code related to amStructure/gtStructure
Wuzzy <Wuzzy2@mail.ru>
parents:
14035
diff
changeset
|
527 |
amResurrector, amTardis, |
ab5e710d353d
Remove all traces of dead code related to amStructure/gtStructure
Wuzzy <Wuzzy2@mail.ru>
parents:
14035
diff
changeset
|
528 |
amPiano, amIceGun, |
14756
2d859d34e6f6
Fix turn end if placing air attack in bouncy world edge map was denied
Wuzzy <Wuzzy2@mail.ru>
parents:
14587
diff
changeset
|
529 |
amAirAttack, amNapalm, |
2d859d34e6f6
Fix turn end if placing air attack in bouncy world edge map was denied
Wuzzy <Wuzzy2@mail.ru>
parents:
14587
diff
changeset
|
530 |
amMineStrike, amDrillStrike, |
14217
ab5e710d353d
Remove all traces of dead code related to amStructure/gtStructure
Wuzzy <Wuzzy2@mail.ru>
parents:
14035
diff
changeset
|
531 |
amRubber, amMinigun: CurAmmoGear:= newGear; |
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
532 |
end; |
15633
d347785fd61c
Follow piano gear when it's spawned by hedgehog
Wuzzy <Wuzzy2@mail.ru>
parents:
15415
diff
changeset
|
533 |
if (CurAmmoType = amCake) or (CurAmmoType = amPiano) then |
d347785fd61c
Follow piano gear when it's spawned by hedgehog
Wuzzy <Wuzzy2@mail.ru>
parents:
15415
diff
changeset
|
534 |
FollowGear:= newGear; |
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
535 |
|
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:
10714
diff
changeset
|
536 |
if ((CurAmmoType = amMine) or (CurAmmoType = amSMine) or (CurAmmoType = amAirMine)) and (GameFlags and gfInfAttack <> 0) then |
11197 | 537 |
newGear^.FlightTime:= GameTicks + min(TurnTimeLeft,1000) |
6581 | 538 |
else if CurAmmoType = amDrill then |
539 |
newGear^.FlightTime:= GameTicks + 250; |
|
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
540 |
if Ammoz[CurAmmoType].Ammo.Propz and ammoprop_NeedTarget <> 0 then |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
541 |
begin |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
542 |
newGear^.Target.X:= TargetPoint.X; |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
543 |
newGear^.Target.Y:= TargetPoint.Y |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
544 |
end; |
13469
f1d349a52bc7
Refactor: lfCurrentHog→lfCurHogCrate, lfNotCurrentMask→lfNotCurHogCrate
Wuzzy <Wuzzy2@mail.ru>
parents:
13399
diff
changeset
|
545 |
if (newGear <> nil) and (newGear^.CollisionMask and lfCurHogCrate <> 0) then newGear^.CollisionMask:= newGear^.CollisionMask and (not lfCurHogCrate); |
6581 | 546 |
|
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
547 |
// Clear FollowGear if using on a rope/parachute/saucer etc so focus stays with the hog's movement |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
548 |
if altUse then |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
549 |
FollowGear:= nil; |
6581 | 550 |
|
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
551 |
if (newGear <> nil) and ((Ammoz[newGear^.AmmoType].Ammo.Propz and ammoprop_SetBounce) <> 0) then |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
552 |
begin |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
553 |
elastic:= int2hwfloat(CurWeapon^.Bounciness) / _1000; |
6581 | 554 |
|
555 |
if elastic < _1 then |
|
556 |
newGear^.Elasticity:= newGear^.Elasticity * elastic |
|
557 |
else if elastic > _1 then |
|
558 |
newGear^.Elasticity:= _1 - ((_1-newGear^.Elasticity) / elastic); |
|
8330 | 559 |
(* Experimented with friction modifier. Didn't seem helpful |
6581 | 560 |
fric:= int2hwfloat(CurWeapon^.Bounciness) / _250; |
561 |
if fric < _1 then newGear^.Friction:= newGear^.Friction * fric |
|
562 |
else if fric > _1 then newGear^.Friction:= _1 - ((_1-newGear^.Friction) / fric)*) |
|
563 |
end; |
|
564 |
||
565 |
||
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
566 |
uStats.AmmoUsed(CurAmmoType); |
6581 | 567 |
|
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
568 |
if not (SpeechText = '') then |
6581 | 569 |
begin |
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
570 |
speech:= AddVisualGear(0, 0, vgtSpeechBubble); |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
571 |
if speech <> nil then |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
572 |
begin |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
573 |
speech^.Text:= SpeechText; |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
574 |
speech^.Hedgehog:= Gear^.Hedgehog; |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
575 |
speech^.FrameTicks:= SpeechType; |
13897
aa321e51da14
make explicit for pas2c some string casts that fpc was probably doing automatically
nemo
parents:
13891
diff
changeset
|
576 |
AddChatString(#9+Format(shortstring(trmsg[sidChatHog]), Gear^.Hedgehog^.Name, SpeechText)); |
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
577 |
end; |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
578 |
SpeechText:= '' |
6581 | 579 |
end; |
580 |
||
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
581 |
Power:= 0; |
8833 | 582 |
if (CurAmmoGear <> nil) and ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_AltUse) = 0){check for dropping ammo from rope} then |
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
583 |
begin |
8833 | 584 |
if CurAmmoType in [amRope,amResurrector] then |
585 |
Message:= Message or gmAttack; |
|
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
586 |
CurAmmoGear^.Message:= Message |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
587 |
end |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
588 |
else |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
589 |
begin |
8833 | 590 |
if (not CurrentTeam^.ExtDriven) and ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_Power) <> 0) then |
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
591 |
SendIPC(_S'a'); |
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
592 |
AfterAttack; |
13738
2ac3658a2a13
Fix hog attack code always destroying TargetPoint, even if no attack occurred. Fixes bug 265
Wuzzy <Wuzzy2@mail.ru>
parents:
13674
diff
changeset
|
593 |
end; |
2ac3658a2a13
Fix hog attack code always destroying TargetPoint, even if no attack occurred. Fixes bug 265
Wuzzy <Wuzzy2@mail.ru>
parents:
13674
diff
changeset
|
594 |
TargetPoint.X := NoPointX; |
6581 | 595 |
end |
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
596 |
else |
8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset
|
597 |
Message:= Message and (not gmAttack); |
10669
4c78eafe76ac
Issue 755: Lua API: Add ammo type parameter for onHogAttack
sheepluva
parents:
10579
diff
changeset
|
598 |
|
10970
7341e0c3f966
LuaAPI: fix OnHogAttack the incorrect AmmoType (amNothing) under certain conditions. Thanks for CheezeMonkey for reporting this
sheepluva
parents:
10942
diff
changeset
|
599 |
ScriptCall('onHogAttack', ord(usedAmmoType)); |
10669
4c78eafe76ac
Issue 755: Lua API: Add ammo type parameter for onHogAttack
sheepluva
parents:
10579
diff
changeset
|
600 |
end; // of with Gear^, Gear^.Hedgehog^ do |
6581 | 601 |
end; |
602 |
||
603 |
procedure AfterAttack; |
|
10124
aabd1b75d5a3
Even more explicit type conversions and other stuff to help pas2c use ansistrings
unc0rr
parents:
10123
diff
changeset
|
604 |
var s: ansistring; |
6581 | 605 |
a: TAmmoType; |
7459
8511a3f899d3
Allow AfterAttack to proceed even if the Hedgehog is dead. They could be resurrected after all.
nemo
parents:
7426
diff
changeset
|
606 |
HHGear: PGear; |
6581 | 607 |
begin |
7459
8511a3f899d3
Allow AfterAttack to proceed even if the Hedgehog is dead. They could be resurrected after all.
nemo
parents:
7426
diff
changeset
|
608 |
with CurrentHedgehog^ do |
6581 | 609 |
begin |
7459
8511a3f899d3
Allow AfterAttack to proceed even if the Hedgehog is dead. They could be resurrected after all.
nemo
parents:
7426
diff
changeset
|
610 |
HHGear:= Gear; |
6581 | 611 |
a:= CurAmmoType; |
7459
8511a3f899d3
Allow AfterAttack to proceed even if the Hedgehog is dead. They could be resurrected after all.
nemo
parents:
7426
diff
changeset
|
612 |
if HHGear <> nil then HHGear^.State:= HHGear^.State and (not gstAttacking); |
6581 | 613 |
if (Ammoz[a].Ammo.Propz and ammoprop_Effect) = 0 then |
614 |
begin |
|
615 |
Inc(MultiShootAttacks); |
|
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
616 |
|
14016
52e20f8f538a
Display "0 remaining" if multi-shoot weapon has been used up
Wuzzy <Wuzzy2@mail.ru>
parents:
14009
diff
changeset
|
617 |
if (Ammoz[a].Ammo.NumPerTurn > 0) and ((GameFlags and gfMultiWeapon) = 0) then |
6581 | 618 |
begin |
10124
aabd1b75d5a3
Even more explicit type conversions and other stuff to help pas2c use ansistrings
unc0rr
parents:
10123
diff
changeset
|
619 |
s:= ansistring(inttostr(Ammoz[a].Ammo.NumPerTurn - MultiShootAttacks + 1)); |
13642
3d14950641a4
Refactor text color variable names, export 2 color values to Lua
Wuzzy <Wuzzy2@mail.ru>
parents:
13619
diff
changeset
|
620 |
AddCaption(formatA(trmsg[sidRemaining], s), capcolDefault, capgrpAmmostate); |
6581 | 621 |
end; |
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
622 |
|
6581 | 623 |
if (Ammoz[a].Ammo.NumPerTurn >= MultiShootAttacks) |
624 |
or ((GameFlags and gfMultiWeapon) <> 0) then |
|
625 |
begin |
|
626 |
isInMultiShoot:= true |
|
627 |
end |
|
628 |
else |
|
629 |
begin |
|
630 |
OnUsedAmmo(CurrentHedgehog^); |
|
631 |
if ((Ammoz[a].Ammo.Propz and ammoprop_NoRoundEnd) = 0) and (((GameFlags and gfInfAttack) = 0) or PlacingHogs) then |
|
632 |
begin |
|
633 |
if TagTurnTimeLeft = 0 then |
|
634 |
TagTurnTimeLeft:= TurnTimeLeft; |
|
13755
885404cdf07a
Add missing nil check in AfterAttack (oops!)
Wuzzy <Wuzzy2@mail.ru>
parents:
13749
diff
changeset
|
635 |
if (HHGear <> nil) and ((HHGear^.State and gstHHDriven) <> 0) then |
13749
52959f686082
Don't start retreat time if hog has lost control in the meantime
Wuzzy <Wuzzy2@mail.ru>
parents:
13738
diff
changeset
|
636 |
begin |
52959f686082
Don't start retreat time if hog has lost control in the meantime
Wuzzy <Wuzzy2@mail.ru>
parents:
13738
diff
changeset
|
637 |
if (CurAmmoGear <> nil) and (CurAmmoGear^.State and gstSubmersible <> 0) and CheckCoordInWater(hwRound(CurAmmoGear^.X), hwRound(CurAmmoGear^.Y)) then |
52959f686082
Don't start retreat time if hog has lost control in the meantime
Wuzzy <Wuzzy2@mail.ru>
parents:
13738
diff
changeset
|
638 |
TurnTimeLeft:=(Ammoz[a].TimeAfterTurn * cGetAwayTime) div 25 |
52959f686082
Don't start retreat time if hog has lost control in the meantime
Wuzzy <Wuzzy2@mail.ru>
parents:
13738
diff
changeset
|
639 |
else TurnTimeLeft:=(Ammoz[a].TimeAfterTurn * cGetAwayTime) div 100; |
52959f686082
Don't start retreat time if hog has lost control in the meantime
Wuzzy <Wuzzy2@mail.ru>
parents:
13738
diff
changeset
|
640 |
IsGetAwayTime := true; |
52959f686082
Don't start retreat time if hog has lost control in the meantime
Wuzzy <Wuzzy2@mail.ru>
parents:
13738
diff
changeset
|
641 |
end; |
6581 | 642 |
end; |
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
643 |
if ((Ammoz[a].Ammo.Propz and ammoprop_NoRoundEnd) = 0) and (HHGear <> nil) then |
7462 | 644 |
HHGear^.State:= HHGear^.State or gstAttacked; |
12649
2837dee472cc
Show selected weapon again when using it in inf attack mode
Wuzzy <almikes@aol.com>
parents:
12600
diff
changeset
|
645 |
if (a = amNothing) or ((Ammoz[a].Ammo.Propz and ammoprop_NoRoundEnd) <> 0) or |
2837dee472cc
Show selected weapon again when using it in inf attack mode
Wuzzy <almikes@aol.com>
parents:
12600
diff
changeset
|
646 |
(((GameFlags and gfInfAttack) <> 0) and ((Ammoz[a].Ammo.Propz and ammoprop_ForceTurnEnd) = 0)) then |
6581 | 647 |
ApplyAmmoChanges(CurrentHedgehog^) |
648 |
end; |
|
649 |
end |
|
650 |
else |
|
651 |
begin |
|
652 |
OnUsedAmmo(CurrentHedgehog^); |
|
653 |
ApplyAmmoChanges(CurrentHedgehog^); |
|
654 |
end; |
|
655 |
AttackBar:= 0 |
|
656 |
end |
|
657 |
end; |
|
658 |
||
659 |
//////////////////////////////////////////////////////////////////////////////// |
|
660 |
procedure doStepHedgehogDead(Gear: PGear); |
|
661 |
const frametime = 200; |
|
662 |
timertime = frametime * 6; |
|
11202 | 663 |
var grave: PGear; |
6581 | 664 |
begin |
665 |
if Gear^.Hedgehog^.Unplaced then |
|
666 |
exit; |
|
667 |
if Gear^.Timer > 1 then |
|
668 |
begin |
|
669 |
AllInactive:= false; |
|
670 |
dec(Gear^.Timer); |
|
671 |
if (Gear^.Timer mod frametime) = 0 then |
|
672 |
inc(Gear^.Pos) |
|
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
673 |
end |
6581 | 674 |
else if Gear^.Timer = 1 then |
675 |
begin |
|
9064 | 676 |
Gear^.Hedgehog^.Effects[heFrozen]:= 0; |
6581 | 677 |
Gear^.State:= Gear^.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:
11267
diff
changeset
|
678 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, CurrentHedgehog, EXPLAutoSound); |
11202 | 679 |
grave:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtGrave, 0, _0, _0, 0); |
680 |
grave^.Hedgehog:= Gear^.Hedgehog; |
|
681 |
grave^.Pos:= Gear^.uid; |
|
682 |
||
6581 | 683 |
DeleteGear(Gear); |
684 |
SetAllToActive |
|
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
685 |
end |
6581 | 686 |
else // Gear^.Timer = 0 |
687 |
begin |
|
688 |
AllInactive:= false; |
|
689 |
Gear^.Z:= cCurrHHZ; |
|
690 |
RemoveGearFromList(Gear); |
|
691 |
InsertGearToList(Gear); |
|
14035 | 692 |
case random(3) of |
693 |
0: PlaySoundV(sndByeBye, Gear^.Hedgehog^.Team^.voicepack); |
|
694 |
1: PlaySoundV(sndSoLong, Gear^.Hedgehog^.Team^.voicepack); |
|
695 |
2: PlaySoundV(sndOhDear, Gear^.Hedgehog^.Team^.voicepack); |
|
696 |
end; |
|
6581 | 697 |
Gear^.Pos:= 0; |
698 |
Gear^.Timer:= timertime |
|
699 |
end |
|
700 |
end; |
|
701 |
||
702 |
//////////////////////////////////////////////////////////////////////////////// |
|
703 |
procedure doStepHedgehogGone(Gear: PGear); |
|
704 |
const frametime = 65; |
|
705 |
timertime = frametime * 11; |
|
10178
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset
|
706 |
var i: LongInt; |
6581 | 707 |
begin |
708 |
if Gear^.Hedgehog^.Unplaced then |
|
709 |
exit; |
|
710 |
if Gear^.Timer > 1 then |
|
711 |
begin |
|
712 |
AllInactive:= false; |
|
713 |
dec(Gear^.Timer); |
|
714 |
if (Gear^.Timer mod frametime) = 0 then |
|
715 |
inc(Gear^.Pos) |
|
716 |
end |
|
717 |
else |
|
718 |
if Gear^.Timer = 1 then |
|
719 |
begin |
|
720 |
DeleteGear(Gear); |
|
721 |
SetAllToActive |
|
722 |
end |
|
723 |
else // Gear^.Timer = 0 |
|
724 |
begin |
|
725 |
AllInactive:= false; |
|
726 |
Gear^.Z:= cCurrHHZ; |
|
727 |
RemoveGearFromList(Gear); |
|
728 |
InsertGearToList(Gear); |
|
10178
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset
|
729 |
// only play sound for one alive hedgehog |
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset
|
730 |
with Gear^.Hedgehog^.Team^ do |
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset
|
731 |
for i:= 0 to cMaxHHIndex do |
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset
|
732 |
begin |
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset
|
733 |
if (Hedgehogs[i].Gear <> nil) then |
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset
|
734 |
begin |
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset
|
735 |
if (Hedgehogs[i].Gear = Gear) then |
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset
|
736 |
begin |
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset
|
737 |
PlaySoundV(sndByeBye, Gear^.Hedgehog^.Team^.voicepack); |
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset
|
738 |
PlaySound(sndWarp); |
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset
|
739 |
end; |
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset
|
740 |
break; |
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset
|
741 |
end; |
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset
|
742 |
end; |
6581 | 743 |
Gear^.Pos:= 0; |
744 |
Gear^.Timer:= timertime |
|
745 |
end |
|
746 |
end; |
|
747 |
||
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:
7375
diff
changeset
|
748 |
procedure AddPickup(HH: THedgehog; ammo: TAmmoType; cnt, X, Y: LongWord); |
10124
aabd1b75d5a3
Even more explicit type conversions and other stuff to help pas2c use ansistrings
unc0rr
parents:
10123
diff
changeset
|
749 |
var s: ansistring; |
11939
c7ec309cd685
Add Lua API function SetAmmoTexts (see issue 82)
Wuzzy <almikes@aol.com>
parents:
11922
diff
changeset
|
750 |
name: ansistring; |
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:
7375
diff
changeset
|
751 |
vga: PVisualGear; |
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:
7375
diff
changeset
|
752 |
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:
7375
diff
changeset
|
753 |
if cnt <> 0 then AddAmmo(HH, ammo, cnt) |
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:
7375
diff
changeset
|
754 |
else AddAmmo(HH, ammo); |
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:
7375
diff
changeset
|
755 |
|
11848
6a0d6b00dac8
Highlander: give visual and acustic feedback when weapons are collected from a kill, similar to collecting a crate
sheepluva
parents:
11847
diff
changeset
|
756 |
if IsHogLocal(@HH) then |
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:
7375
diff
changeset
|
757 |
begin |
11939
c7ec309cd685
Add Lua API function SetAmmoTexts (see issue 82)
Wuzzy <almikes@aol.com>
parents:
11922
diff
changeset
|
758 |
if length(trluaammo[Ammoz[ammo].NameId]) > 0 then |
c7ec309cd685
Add Lua API function SetAmmoTexts (see issue 82)
Wuzzy <almikes@aol.com>
parents:
11922
diff
changeset
|
759 |
name:= trluaammo[Ammoz[ammo].NameId] |
c7ec309cd685
Add Lua API function SetAmmoTexts (see issue 82)
Wuzzy <almikes@aol.com>
parents:
11922
diff
changeset
|
760 |
else |
c7ec309cd685
Add Lua API function SetAmmoTexts (see issue 82)
Wuzzy <almikes@aol.com>
parents:
11922
diff
changeset
|
761 |
name:= trammo[Ammoz[ammo].NameId]; |
12464
39d780f9bf35
Show “Empty!” when collecting ammo crate with amNothing or 0 ammo
Wuzzy <almikes@aol.com>
parents:
12463
diff
changeset
|
762 |
|
39d780f9bf35
Show “Empty!” when collecting ammo crate with amNothing or 0 ammo
Wuzzy <almikes@aol.com>
parents:
12463
diff
changeset
|
763 |
if cnt = 0 then |
39d780f9bf35
Show “Empty!” when collecting ammo crate with amNothing or 0 ammo
Wuzzy <almikes@aol.com>
parents:
12463
diff
changeset
|
764 |
cnt:= Ammoz[ammo].NumberInCase; |
39d780f9bf35
Show “Empty!” when collecting ammo crate with amNothing or 0 ammo
Wuzzy <almikes@aol.com>
parents:
12463
diff
changeset
|
765 |
|
39d780f9bf35
Show “Empty!” when collecting ammo crate with amNothing or 0 ammo
Wuzzy <almikes@aol.com>
parents:
12463
diff
changeset
|
766 |
if (ammo = amNothing) or (cnt = 0) then |
12600 | 767 |
s:= trmsg[sidEmptyCrate] |
12464
39d780f9bf35
Show “Empty!” when collecting ammo crate with amNothing or 0 ammo
Wuzzy <almikes@aol.com>
parents:
12463
diff
changeset
|
768 |
else if cnt >= AMMO_INFINITE then |
14388
40dd8eb60d54
Explain those weird hexcodes in uGearsHedgehog
Wuzzy <Wuzzy2@mail.ru>
parents:
14387
diff
changeset
|
769 |
// infinity symbol |
14387
2ab312c47dc3
make pas2c function without haskell aborting if locale is C
nemo
parents:
14303
diff
changeset
|
770 |
s:= name + ansistring(' (+' + char($E2) + char($88) + char($9E) +')') |
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:
7375
diff
changeset
|
771 |
else |
12464
39d780f9bf35
Show “Empty!” when collecting ammo crate with amNothing or 0 ammo
Wuzzy <almikes@aol.com>
parents:
12463
diff
changeset
|
772 |
s:= name + ansistring(' (+' + IntToStr(cnt) + ')'); |
39d780f9bf35
Show “Empty!” when collecting ammo crate with amNothing or 0 ammo
Wuzzy <almikes@aol.com>
parents:
12463
diff
changeset
|
773 |
|
10116
dd27562b6f21
rolling back my PChar stuff, because unC0Rr improves string handling pas2c instead <3
sheepluva
parents:
10108
diff
changeset
|
774 |
AddCaption(s, HH.Team^.Clan^.Color, capgrpAmmoinfo); |
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:
7375
diff
changeset
|
775 |
|
12464
39d780f9bf35
Show “Empty!” when collecting ammo crate with amNothing or 0 ammo
Wuzzy <almikes@aol.com>
parents:
12463
diff
changeset
|
776 |
// show ammo icon (if not empty) |
39d780f9bf35
Show “Empty!” when collecting ammo crate with amNothing or 0 ammo
Wuzzy <almikes@aol.com>
parents:
12463
diff
changeset
|
777 |
if (ammo <> amNothing) and (cnt <> 0) then |
39d780f9bf35
Show “Empty!” when collecting ammo crate with amNothing or 0 ammo
Wuzzy <almikes@aol.com>
parents:
12463
diff
changeset
|
778 |
begin |
39d780f9bf35
Show “Empty!” when collecting ammo crate with amNothing or 0 ammo
Wuzzy <almikes@aol.com>
parents:
12463
diff
changeset
|
779 |
vga:= AddVisualGear(X, Y, vgtAmmo); |
39d780f9bf35
Show “Empty!” when collecting ammo crate with amNothing or 0 ammo
Wuzzy <almikes@aol.com>
parents:
12463
diff
changeset
|
780 |
if vga <> nil then |
39d780f9bf35
Show “Empty!” when collecting ammo crate with amNothing or 0 ammo
Wuzzy <almikes@aol.com>
parents:
12463
diff
changeset
|
781 |
vga^.Frame:= Longword(ammo); |
39d780f9bf35
Show “Empty!” when collecting ammo crate with amNothing or 0 ammo
Wuzzy <almikes@aol.com>
parents:
12463
diff
changeset
|
782 |
end |
39d780f9bf35
Show “Empty!” when collecting ammo crate with amNothing or 0 ammo
Wuzzy <almikes@aol.com>
parents:
12463
diff
changeset
|
783 |
|
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:
7375
diff
changeset
|
784 |
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:
7375
diff
changeset
|
785 |
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:
7375
diff
changeset
|
786 |
|
6581 | 787 |
//////////////////////////////////////////////////////////////////////////////// |
788 |
procedure PickUp(HH, Gear: PGear); |
|
12937
a84a05719454
Refactor health gain effects and message into util fuction HHHeal
Wuzzy <Wuzzy2@mail.ru>
parents:
12912
diff
changeset
|
789 |
var ag, gi: PGear; |
13617
a6abc2c1fc1a
Show correct health increase when hog health cap is reached
Wuzzy <Wuzzy2@mail.ru>
parents:
13611
diff
changeset
|
790 |
healthBoost: LongInt; |
6581 | 791 |
begin |
11624 | 792 |
if Gear^.State and gstFrozen <> 0 then exit; |
15064
35932896ce84
Prevent crates from being collected twice
Wuzzy <Wuzzy2@mail.ru>
parents:
15043
diff
changeset
|
793 |
if Gear^.Message and gmDestroy <> 0 then exit; |
11624 | 794 |
|
6581 | 795 |
Gear^.Message:= gmDestroy; |
796 |
if (Gear^.Pos and posCaseExplode) <> 0 then |
|
797 |
if (Gear^.Pos and posCasePoison) <> 0 then |
|
798 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 25, HH^.Hedgehog, EXPLAutoSound + EXPLPoisoned) |
|
799 |
else |
|
800 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 25, HH^.Hedgehog, EXPLAutoSound) |
|
801 |
else if (Gear^.Pos and posCasePoison) <> 0 then |
|
802 |
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 25, HH^.Hedgehog, EXPLAutoSound + EXPLPoisoned + EXPLNoDamage) |
|
803 |
else |
|
804 |
case Gear^.Pos of |
|
805 |
posCaseUtility, |
|
806 |
posCaseAmmo: begin |
|
7597
1ef520fea21c
make cheating a bit easier (mikade insisted). Also, try flipping dust for a bit more variety.
nemo
parents:
7462
diff
changeset
|
807 |
PlaySound(sndShotgunReload); |
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
808 |
if Gear^.AmmoType <> amNothing then |
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:
7375
diff
changeset
|
809 |
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:
7375
diff
changeset
|
810 |
AddPickup(HH^.Hedgehog^, Gear^.AmmoType, 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:
7375
diff
changeset
|
811 |
end |
6581 | 812 |
else |
813 |
begin |
|
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:
7375
diff
changeset
|
814 |
// Add spawning here... |
7409 | 815 |
AddRandomness(GameTicks); |
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
816 |
|
7406
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset
|
817 |
gi := GearsList; |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset
|
818 |
while gi <> nil do |
7391
588eabb4b384
Apparently order of multiple getrandom in params is undefined. Also remove broken and pointless getrandom call.
nemo
parents:
7389
diff
changeset
|
819 |
begin |
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
|
820 |
if (gi^.Kind = gtGenericFaller) and (gi^.Tag = 1) then |
7406
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset
|
821 |
begin |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset
|
822 |
gi^.Active:= true; |
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
|
823 |
gi^.State:= gi^.State or gstTmpFlag; |
7406
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset
|
824 |
gi^.X:= int2hwFloat(GetRandom(rightX-leftX)+leftX); |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset
|
825 |
gi^.Y:= int2hwFloat(GetRandom(LAND_HEIGHT-topY)+topY); |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset
|
826 |
gi^.dX:= _90-(GetRandomf*_360); |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset
|
827 |
gi^.dY:= _90-(GetRandomf*_360) |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset
|
828 |
end; |
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset
|
829 |
gi := gi^.NextGear |
7391
588eabb4b384
Apparently order of multiple getrandom in params is undefined. Also remove broken and pointless getrandom call.
nemo
parents:
7389
diff
changeset
|
830 |
end; |
7598 | 831 |
ag:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAddAmmo, gstInvisible, _0, _0, GetRandom(125)+25); |
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:
7375
diff
changeset
|
832 |
ag^.Pos:= Gear^.Pos; |
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:
7375
diff
changeset
|
833 |
ag^.Power:= Gear^.Power |
6581 | 834 |
end; |
835 |
end; |
|
836 |
posCaseHealth: begin |
|
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:
7375
diff
changeset
|
837 |
PlaySound(sndShotgunReload); |
13617
a6abc2c1fc1a
Show correct health increase when hog health cap is reached
Wuzzy <Wuzzy2@mail.ru>
parents:
13611
diff
changeset
|
838 |
healthBoost:= IncHogHealth(HH^.Hedgehog, Gear^.Health); |
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:
6992
diff
changeset
|
839 |
HH^.Hedgehog^.Effects[hePoisoned] := 0; |
6581 | 840 |
RenderHealth(HH^.Hedgehog^); |
841 |
RecountTeamHealth(HH^.Hedgehog^.Team); |
|
13617
a6abc2c1fc1a
Show correct health increase when hog health cap is reached
Wuzzy <Wuzzy2@mail.ru>
parents:
13611
diff
changeset
|
842 |
HHHeal(HH^.Hedgehog, healthBoost, true); |
6581 | 843 |
end; |
844 |
end |
|
845 |
end; |
|
846 |
||
847 |
procedure HedgehogStep(Gear: PGear); |
|
848 |
var PrevdX: LongInt; |
|
849 |
CurWeapon: PAmmo; |
|
850 |
begin |
|
6924 | 851 |
CurWeapon:= GetCurAmmoEntry(Gear^.Hedgehog^); |
6581 | 852 |
if ((Gear^.State and (gstAttacking or gstMoving)) = 0) then |
853 |
begin |
|
854 |
if isCursorVisible then |
|
855 |
with Gear^.Hedgehog^ do |
|
856 |
with CurWeapon^ do |
|
857 |
begin |
|
15017
7ff86274114e
Refactor PosCount: Use 0 instead of 1 for unused PosSprite
Wuzzy <Wuzzy2@mail.ru>
parents:
14984
diff
changeset
|
858 |
if Ammoz[AmmoType].PosCount < 2 then |
7ff86274114e
Refactor PosCount: Use 0 instead of 1 for unused PosSprite
Wuzzy <Wuzzy2@mail.ru>
parents:
14984
diff
changeset
|
859 |
exit |
7ff86274114e
Refactor PosCount: Use 0 instead of 1 for unused PosSprite
Wuzzy <Wuzzy2@mail.ru>
parents:
14984
diff
changeset
|
860 |
else if (Gear^.Message and gmLeft ) <> 0 then |
6581 | 861 |
Pos:= (Pos - 1 + Ammoz[AmmoType].PosCount) mod Ammoz[AmmoType].PosCount |
15017
7ff86274114e
Refactor PosCount: Use 0 instead of 1 for unused PosSprite
Wuzzy <Wuzzy2@mail.ru>
parents:
14984
diff
changeset
|
862 |
else if (Gear^.Message and gmRight ) <> 0 then |
7ff86274114e
Refactor PosCount: Use 0 instead of 1 for unused PosSprite
Wuzzy <Wuzzy2@mail.ru>
parents:
14984
diff
changeset
|
863 |
Pos:= (Pos + 1) mod Ammoz[AmmoType].PosCount |
6581 | 864 |
else |
15017
7ff86274114e
Refactor PosCount: Use 0 instead of 1 for unused PosSprite
Wuzzy <Wuzzy2@mail.ru>
parents:
14984
diff
changeset
|
865 |
exit; |
7ff86274114e
Refactor PosCount: Use 0 instead of 1 for unused PosSprite
Wuzzy <Wuzzy2@mail.ru>
parents:
14984
diff
changeset
|
866 |
GHStepTicks:= 200; |
7ff86274114e
Refactor PosCount: Use 0 instead of 1 for unused PosSprite
Wuzzy <Wuzzy2@mail.ru>
parents:
14984
diff
changeset
|
867 |
exit |
7ff86274114e
Refactor PosCount: Use 0 instead of 1 for unused PosSprite
Wuzzy <Wuzzy2@mail.ru>
parents:
14984
diff
changeset
|
868 |
end; |
7ff86274114e
Refactor PosCount: Use 0 instead of 1 for unused PosSprite
Wuzzy <Wuzzy2@mail.ru>
parents:
14984
diff
changeset
|
869 |
|
7ff86274114e
Refactor PosCount: Use 0 instead of 1 for unused PosSprite
Wuzzy <Wuzzy2@mail.ru>
parents:
14984
diff
changeset
|
870 |
if (Gear^.Hedgehog^.Unplaced) then |
6581 | 871 |
exit; |
13827
4e5fcfc6f033
Fix hedgehog being able to make walk/jump sounds before it was placed
Wuzzy <Wuzzy2@mail.ru>
parents:
13826
diff
changeset
|
872 |
|
6581 | 873 |
if ((Gear^.Message and gmAnimate) <> 0) then |
874 |
begin |
|
875 |
Gear^.Message:= 0; |
|
876 |
Gear^.State:= Gear^.State or gstAnimation; |
|
877 |
Gear^.Tag:= Gear^.MsgParam; |
|
878 |
Gear^.Timer:= 0; |
|
879 |
Gear^.Pos:= 0 |
|
880 |
end; |
|
881 |
||
882 |
if ((Gear^.Message and gmLJump ) <> 0) then |
|
883 |
begin |
|
884 |
Gear^.Message:= Gear^.Message and (not gmLJump); |
|
885 |
DeleteCI(Gear); |
|
886 |
if TestCollisionYwithGear(Gear, -1) = 0 then |
|
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset
|
887 |
if TestCollisionXwithXYShift(Gear, _0, -2, hwSign(Gear^.dX)) = 0 then |
6581 | 888 |
Gear^.Y:= Gear^.Y - _2 |
889 |
else |
|
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset
|
890 |
if TestCollisionXwithXYShift(Gear, _0, -1, hwSign(Gear^.dX)) = 0 then |
6581 | 891 |
Gear^.Y:= Gear^.Y - _1; |
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset
|
892 |
if (TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) = 0) and |
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset
|
893 |
(TestCollisionYwithGear(Gear, -1) = 0) then |
6581 | 894 |
begin |
895 |
Gear^.dY:= -_0_15; |
|
13096
d78e65c66573
Add hedgehog effect heArtillery, allows to set per-hedgehog artillery mode
Wuzzy <Wuzzy2@mail.ru>
parents:
12996
diff
changeset
|
896 |
if Gear^.Hedgehog^.Effects[heArtillery] = 0 then |
6581 | 897 |
Gear^.dX:= SignAs(_0_15, Gear^.dX); |
898 |
Gear^.State:= Gear^.State or gstMoving or gstHHJumping; |
|
7053 | 899 |
PlaySoundV(sndJump1, Gear^.Hedgehog^.Team^.voicepack); |
6581 | 900 |
exit |
901 |
end; |
|
902 |
end; |
|
903 |
||
904 |
if ((Gear^.Message and gmHJump ) <> 0) then |
|
905 |
begin |
|
906 |
DeleteCI(Gear); |
|
907 |
Gear^.Message:= Gear^.Message and (not gmHJump); |
|
908 |
||
909 |
Gear^.dY:= -_0_2; |
|
910 |
SetLittle(Gear^.dX); |
|
911 |
Gear^.State:= Gear^.State or gstMoving or gstHHJumping; |
|
7053 | 912 |
PlaySoundV(sndJump3, Gear^.Hedgehog^.Team^.voicepack); |
6581 | 913 |
exit |
914 |
end; |
|
915 |
||
13399 | 916 |
if (Gear^.Message and (gmLeft or gmRight) <> 0) and (Gear^.State and gstMoving = 0) and |
13770
9fdb13633bcb
Fix hog teleporting back and forth when walking on portals on floor. Fixes bug 686
Wuzzy <Wuzzy2@mail.ru>
parents:
13755
diff
changeset
|
917 |
(CheckGearNear(Gear, gtPortal, 26, 26) = nil) then |
13399 | 918 |
Gear^.PortalCounter:= 0; |
6581 | 919 |
PrevdX:= hwSign(Gear^.dX); |
920 |
if (Gear^.Message and gmLeft )<>0 then |
|
15415
b7e40129dbdb
Set dX to zero in hedgehog walk routine to prevent unexpected changes in X coordinate in certain conditions
unc0rr
parents:
15167
diff
changeset
|
921 |
Gear^.dX:= -_0 else |
6581 | 922 |
if (Gear^.Message and gmRight )<>0 then |
15415
b7e40129dbdb
Set dX to zero in hedgehog walk routine to prevent unexpected changes in X coordinate in certain conditions
unc0rr
parents:
15167
diff
changeset
|
923 |
Gear^.dX:= _0 |
b7e40129dbdb
Set dX to zero in hedgehog walk routine to prevent unexpected changes in X coordinate in certain conditions
unc0rr
parents:
15167
diff
changeset
|
924 |
else exit; |
6581 | 925 |
|
7187
aff30d80bd7b
- Allow camera movement while current hedgehog is falling
unc0rr
parents:
7164
diff
changeset
|
926 |
StepSoundTimer:= cHHStepTicks; |
7719
eeae1cb6b6bf
Move hedgehog's step routine into separate function, use it in both hedgehog and ai code
unc0rr
parents:
7671
diff
changeset
|
927 |
|
7028 | 928 |
GHStepTicks:= cHHStepTicks; |
6581 | 929 |
if PrevdX <> hwSign(Gear^.dX) then |
930 |
begin |
|
931 |
FollowGear:= Gear; |
|
932 |
exit |
|
933 |
end; |
|
934 |
DeleteCI(Gear); // must be after exit!! (see previous line) |
|
935 |
||
936 |
Gear^.Hedgehog^.visStepPos:= (Gear^.Hedgehog^.visStepPos + 1) and 7; |
|
7164
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7069
diff
changeset
|
937 |
|
13096
d78e65c66573
Add hedgehog effect heArtillery, allows to set per-hedgehog artillery mode
Wuzzy <Wuzzy2@mail.ru>
parents:
12996
diff
changeset
|
938 |
if ((Gear^.Hedgehog^.Effects[heArtillery] = 0) or |
10714 | 939 |
((CurAmmoGear <> nil) and (CurAmmoGear^.Kind = gtBlowTorch))) and |
940 |
((Gear^.Message and gmPrecise) = 0) then |
|
7719
eeae1cb6b6bf
Move hedgehog's step routine into separate function, use it in both hedgehog and ai code
unc0rr
parents:
7671
diff
changeset
|
941 |
MakeHedgehogsStep(Gear); |
6581 | 942 |
|
8576
286ebfcb3d97
workaround for frequent AllHH active call in hedgehog step
nemo
parents:
8574
diff
changeset
|
943 |
SetAllHHToActive(false); |
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9285
diff
changeset
|
944 |
AddCI(Gear) |
6581 | 945 |
end |
946 |
end; |
|
947 |
||
948 |
procedure HedgehogChAngle(HHGear: PGear); |
|
949 |
var da: LongWord; |
|
950 |
begin |
|
951 |
with HHGear^.Hedgehog^ do |
|
10015 | 952 |
if (((CurAmmoType = amRope) or ((CurAmmoGear <> nil) and (CurAmmoGear^.AmmoType = amRope))) and |
9139
2ae44c4381cd
Restore CurAmmoType check as well, that was removed in r8f317ba10675 when trying to fix aiming during alt attack.
nemo
parents:
9080
diff
changeset
|
953 |
((HHGear^.State and (gstMoving or gstHHJumping)) = gstMoving)) |
6581 | 954 |
or ((CurAmmoType = amPortalGun) and ((HHGear^.State and gstMoving) <> 0)) then |
955 |
da:= 2 |
|
956 |
else da:= 1; |
|
957 |
||
8987
47cf32305d99
some saucer thing for firing weps underwater and aiming and such. bit drunk and sleepy so testing I guess
nemo
parents:
8947
diff
changeset
|
958 |
if ((HHGear^.Message and gmPrecise = 0) or ((CurAmmoGear <> nil) and (CurAmmoGear^.AmmoType = amJetpack))) or (GameTicks mod 5 = 1) then |
6581 | 959 |
if ((HHGear^.Message and gmUp) <> 0) and (HHGear^.Angle >= CurMinAngle + da) then |
960 |
dec(HHGear^.Angle, da) |
|
961 |
else |
|
962 |
if ((HHGear^.Message and gmDown) <> 0) and (HHGear^.Angle + da <= CurMaxAngle) then |
|
963 |
inc(HHGear^.Angle, da) |
|
964 |
end; |
|
965 |
||
966 |
||
967 |
//////////////////////////////////////////////////////////////////////////////// |
|
11512
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
968 |
procedure moveHedgehogOutOfWall(Gear: PGear); |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
969 |
var |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
970 |
hx: hwFloat; |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
971 |
colly, collxl, collxr: boolean; |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
972 |
begin |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
973 |
colly:= (TestCollisionYwithGear(Gear, 1) <> 0); |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
974 |
|
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
975 |
while colly do |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
976 |
begin |
11513
d44d2ab7ce4a
fix comment; revert unintentional commit of some testing png
sheepluva
parents:
11512
diff
changeset
|
977 |
// don't use TestCollisionXwithXYShift, because it checks for gears |
11512
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
978 |
// save real x-position |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
979 |
hx:= Gear^.X; |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
980 |
|
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
981 |
Gear^.X:= hx + _1; |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
982 |
collxl:= (TestCollisionX(Gear, -1) <> 0); |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
983 |
|
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
984 |
Gear^.X:= hx - _1; |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
985 |
collxr:= (TestCollisionX(Gear, 1) <> 0); |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
986 |
|
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
987 |
// restore original value |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
988 |
Gear^.X:= hx; |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
989 |
|
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
990 |
// do nothing if trapped between 2 walls |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
991 |
if collxl = collxr then |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
992 |
break; |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
993 |
|
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
994 |
// if we in a wall - fix that |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
995 |
if collxl then |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
996 |
begin |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
997 |
// check for obstacle |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
998 |
if (TestCollisionX(Gear, 1) <> 0) then |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
999 |
break; |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1000 |
Gear^.X:= Gear^.X + _1; |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1001 |
end |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1002 |
else |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1003 |
begin |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1004 |
// check for obstacle |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1005 |
if (TestCollisionX(Gear, -1) <> 0) then |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1006 |
break; |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1007 |
Gear^.X:= Gear^.X - _1; |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1008 |
end; |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1009 |
|
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1010 |
colly:= (TestCollisionYwithGear(Gear, 1) <> 0); |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1011 |
end; |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1012 |
|
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1013 |
|
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1014 |
end; |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1015 |
|
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1016 |
//////////////////////////////////////////////////////////////////////////////// |
6581 | 1017 |
procedure doStepHedgehogMoving(Gear: PGear); |
1018 |
var isFalling, isUnderwater: boolean; |
|
1019 |
land: Word; |
|
11484 | 1020 |
cnt: LongWord; |
12184
50856782cdc4
Add support for hog name in home run message
Wuzzy <almikes@aol.com>
parents:
12169
diff
changeset
|
1021 |
s: ansistring; |
6581 | 1022 |
begin |
10577
5e075da5e0a4
don't drown unplaced hedgehogs. thanks to zimmux and Wohlstand for reporting
sheepluva
parents:
10443
diff
changeset
|
1023 |
if Gear^.Hedgehog^.Unplaced then |
5e075da5e0a4
don't drown unplaced hedgehogs. thanks to zimmux and Wohlstand for reporting
sheepluva
parents:
10443
diff
changeset
|
1024 |
begin |
5e075da5e0a4
don't drown unplaced hedgehogs. thanks to zimmux and Wohlstand for reporting
sheepluva
parents:
10443
diff
changeset
|
1025 |
Gear^.dY:= _0; |
5e075da5e0a4
don't drown unplaced hedgehogs. thanks to zimmux and Wohlstand for reporting
sheepluva
parents:
10443
diff
changeset
|
1026 |
Gear^.dX:= _0; |
5e075da5e0a4
don't drown unplaced hedgehogs. thanks to zimmux and Wohlstand for reporting
sheepluva
parents:
10443
diff
changeset
|
1027 |
Gear^.State:= Gear^.State and (not gstMoving); |
5e075da5e0a4
don't drown unplaced hedgehogs. thanks to zimmux and Wohlstand for reporting
sheepluva
parents:
10443
diff
changeset
|
1028 |
exit |
5e075da5e0a4
don't drown unplaced hedgehogs. thanks to zimmux and Wohlstand for reporting
sheepluva
parents:
10443
diff
changeset
|
1029 |
end; |
5e075da5e0a4
don't drown unplaced hedgehogs. thanks to zimmux and Wohlstand for reporting
sheepluva
parents:
10443
diff
changeset
|
1030 |
|
6581 | 1031 |
land:= 0; |
10354 | 1032 |
isUnderwater:= CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y) + Gear^.Radius); |
6581 | 1033 |
if Gear^.dX.QWordValue > 8160437862 then |
1034 |
Gear^.dX.QWordValue:= 8160437862; |
|
1035 |
if Gear^.dY.QWordValue > 8160437862 then |
|
1036 |
Gear^.dY.QWordValue:= 8160437862; |
|
1037 |
||
11512
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1038 |
isFalling:= (Gear^.dY.isNegative); |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1039 |
if (not isFalling) then |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1040 |
begin |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1041 |
// make sure we're not just stuck in wall |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1042 |
moveHedgehogOutOfWall(Gear); |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1043 |
// test for floor/obstacle below |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1044 |
isFalling:= (TestCollisionYKick(Gear, 1) = 0); |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1045 |
end; |
0e305b7153e6
serious anti wall sticking protection for hedgewars
sheepluva
parents:
11510
diff
changeset
|
1046 |
|
6581 | 1047 |
if isFalling then |
1048 |
begin |
|
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:
9706
diff
changeset
|
1049 |
land:= TestCollisionYKick(Gear, -1); |
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:
9706
diff
changeset
|
1050 |
if (Gear^.dY.isNegative) and (land <> 0) then |
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9706
diff
changeset
|
1051 |
begin |
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:
9706
diff
changeset
|
1052 |
if land and lfBouncy <> 0 then |
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9706
diff
changeset
|
1053 |
begin |
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:
9706
diff
changeset
|
1054 |
doStepFallingGear(Gear); |
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:
10818
diff
changeset
|
1055 |
Gear^.AdvBounce:= 1; |
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:
9706
diff
changeset
|
1056 |
Gear^.dX:= Gear^.dX * _0_8 |
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:
9706
diff
changeset
|
1057 |
end; |
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:
9706
diff
changeset
|
1058 |
if (land and lfBouncy = 0) or (Gear^.State and gstCollision <> 0) then |
9795
487e5675061f
clear gstCollision from doStepFallingGear once I'm done with it. hog "physics" doesn't use it, and was screwing up labels
nemo
parents:
9776
diff
changeset
|
1059 |
Gear^.dY:= _0; |
9954 | 1060 |
Gear^.State:= Gear^.State and (not gstCollision) |
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:
9706
diff
changeset
|
1061 |
end; |
6581 | 1062 |
Gear^.State:= Gear^.State or gstMoving; |
9971 | 1063 |
if (Gear^.State and gstHHDriven <> 0) and |
11267 | 1064 |
(FollowGear <> nil) and |
9499 | 1065 |
(not CurrentTeam^.ExtDriven) and (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) > _0_003) then |
6581 | 1066 |
begin |
7187
aff30d80bd7b
- Allow camera movement while current hedgehog is falling
unc0rr
parents:
7164
diff
changeset
|
1067 |
// TODO: why so aggressive at setting FollowGear when falling? |
9499 | 1068 |
// because hog was being yanked out of frame by other stuff when doing a complicated jump/chute/saucer/roping. |
1069 |
// added a couple more conditions to make it a bit less aggressive, at cost of possibly spectator failing to follow a maneuver |
|
6581 | 1070 |
FollowGear:= Gear; |
1071 |
end; |
|
1072 |
if isUnderwater then |
|
1073 |
Gear^.dY:= Gear^.dY + cGravity / _2 |
|
1074 |
else |
|
1075 |
begin |
|
1076 |
Gear^.dY:= Gear^.dY + cGravity; |
|
1077 |
// this set of circumstances could be less complex if jumping was more clearly identified |
|
1078 |
if ((GameFlags and gfMoreWind) <> 0) and (((Gear^.Damage <> 0) |
|
1079 |
or ((CurAmmoGear <> nil) and ((CurAmmoGear^.AmmoType = amJetpack) or (CurAmmoGear^.AmmoType = amBirdy))) |
|
1080 |
or ((Gear^.dY.QWordValue + Gear^.dX.QWordValue) > _0_55.QWordValue))) then |
|
1081 |
Gear^.dX := Gear^.dX + cWindSpeed / Gear^.Density |
|
1082 |
end |
|
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
1083 |
end |
6581 | 1084 |
else |
1085 |
begin |
|
1086 |
land:= TestCollisionYwithGear(Gear, 1); |
|
10015 | 1087 |
if ((Gear^.dX.QWordValue + Gear^.dY.QWordValue) < _0_55.QWordValue) and ((land and lfIce) = 0) |
1088 |
and ((land and lfBouncy = 0) or (Gear^.State and gstCollision <> 0)) |
|
11510 | 1089 |
and (Gear^.Damage = 0) |
6581 | 1090 |
and ((Gear^.State and gstHHJumping) <> 0) then |
1091 |
SetLittle(Gear^.dX); |
|
1092 |
||
1093 |
if not Gear^.dY.isNegative then |
|
1094 |
begin |
|
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:
9706
diff
changeset
|
1095 |
if land and lfBouncy <> 0 then |
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9706
diff
changeset
|
1096 |
begin |
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:
9706
diff
changeset
|
1097 |
doStepFallingGear(Gear); |
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:
10818
diff
changeset
|
1098 |
Gear^.AdvBounce:= 1; |
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:
9706
diff
changeset
|
1099 |
// hogs for some reason have very low friction. slippery little buggers |
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:
9706
diff
changeset
|
1100 |
Gear^.dX:= Gear^.dX * _0_8 |
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:
9706
diff
changeset
|
1101 |
end; |
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:
9706
diff
changeset
|
1102 |
|
6581 | 1103 |
CheckHHDamage(Gear); |
1104 |
||
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:
9706
diff
changeset
|
1105 |
if (land and lfBouncy = 0) or (Gear^.State and gstCollision <> 0) then |
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9706
diff
changeset
|
1106 |
begin |
13096
d78e65c66573
Add hedgehog effect heArtillery, allows to set per-hedgehog artillery mode
Wuzzy <Wuzzy2@mail.ru>
parents:
12996
diff
changeset
|
1107 |
if ((Gear^.State and gstHHHJump) <> 0) and (Gear^.Hedgehog^.Effects[heArtillery] = 0) |
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:
9706
diff
changeset
|
1108 |
and (Gear^.dX.QWordValue < _0_02.QWordValue) then |
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9706
diff
changeset
|
1109 |
begin |
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:
9706
diff
changeset
|
1110 |
if land and lfBouncy <> 0 then |
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9706
diff
changeset
|
1111 |
Gear^.dY:= _0; |
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:
9706
diff
changeset
|
1112 |
Gear^.dX.isNegative:= not Gear^.dX.isNegative // landing after high jump |
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:
9706
diff
changeset
|
1113 |
end; |
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:
9706
diff
changeset
|
1114 |
Gear^.State:= Gear^.State and (not (gstHHJumping or gstHHHJump)); |
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:
9706
diff
changeset
|
1115 |
if (land and lfBouncy = 0) or (Gear^.dX.QWordValue < _0_02.QWordValue) then |
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9706
diff
changeset
|
1116 |
Gear^.dY:= _0 |
9795
487e5675061f
clear gstCollision from doStepFallingGear once I'm done with it. hog "physics" doesn't use it, and was screwing up labels
nemo
parents:
9776
diff
changeset
|
1117 |
end; |
9954 | 1118 |
Gear^.State:= Gear^.State and (not gstCollision) |
6581 | 1119 |
end |
1120 |
else |
|
1121 |
Gear^.dY:= Gear^.dY + cGravity; |
|
1122 |
||
1123 |
if ((Gear^.State and gstMoving) <> 0) then |
|
1124 |
begin |
|
1125 |
if land and lfIce <> 0 then |
|
1126 |
begin |
|
1127 |
Gear^.dX:= Gear^.dX * (_1 - (_1 - Gear^.Friction) / _2) |
|
1128 |
end |
|
1129 |
else |
|
1130 |
Gear^.dX:= Gear^.dX * Gear^.Friction; |
|
1131 |
end |
|
1132 |
end; |
|
1133 |
||
10146
1fb6d8cc4626
Should never use State like this, since some states aren't synced (thinking state for example)
unc0rr
parents:
10124
diff
changeset
|
1134 |
if (Gear^.State and (gstMoving or gstHHJumping or gstHHHJump)) <> 0 then |
6581 | 1135 |
DeleteCI(Gear); |
1136 |
||
1137 |
if isUnderwater then |
|
1138 |
begin |
|
1139 |
Gear^.dY:= Gear^.dY * _0_999; |
|
1140 |
Gear^.dX:= Gear^.dX * _0_999; |
|
1141 |
end; |
|
1142 |
||
1143 |
if (Gear^.State and gstMoving) <> 0 then |
|
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset
|
1144 |
if TestCollisionXKick(Gear, hwSign(Gear^.dX)) <> 0 then |
6581 | 1145 |
if not isFalling then |
1146 |
if hwAbs(Gear^.dX) > _0_01 then |
|
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset
|
1147 |
if (TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -1, hwSign(Gear^.dX)) = 0) and |
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset
|
1148 |
(TestCollisionYwithXYShift(Gear, hwSign(Gear^.dX) - hwRound(Gear^.dX), -1, -1) = 0) then |
6581 | 1149 |
begin |
1150 |
Gear^.X:= Gear^.X + Gear^.dX; |
|
1151 |
Gear^.dX:= Gear^.dX * _0_96; |
|
1152 |
Gear^.Y:= Gear^.Y - _1 |
|
1153 |
end |
|
1154 |
else |
|
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset
|
1155 |
if (TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -2, hwSign(Gear^.dX)) = 0) and |
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset
|
1156 |
(TestCollisionYwithXYShift(Gear, hwSign(Gear^.dX) - hwRound(Gear^.dX), -1, -1) = 0) then |
6581 | 1157 |
begin |
1158 |
Gear^.X:= Gear^.X + Gear^.dX; |
|
1159 |
Gear^.dX:= Gear^.dX * _0_93; |
|
1160 |
Gear^.Y:= Gear^.Y - _2 |
|
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
1161 |
end |
6581 | 1162 |
else |
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset
|
1163 |
if (TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -3, hwSign(Gear^.dX)) = 0) and |
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset
|
1164 |
(TestCollisionYwithXYShift(Gear, hwSign(Gear^.dX) - hwRound(Gear^.dX), -1, -1) = 0) then |
6581 | 1165 |
begin |
1166 |
Gear^.X:= Gear^.X + Gear^.dX; |
|
1167 |
Gear^.dX:= Gear^.dX * _0_9 ; |
|
1168 |
Gear^.Y:= Gear^.Y - _3 |
|
1169 |
end |
|
1170 |
else |
|
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset
|
1171 |
if (TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -4, hwSign(Gear^.dX)) = 0) and |
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset
|
1172 |
(TestCollisionYwithXYShift(Gear, hwSign(Gear^.dX) - hwRound(Gear^.dX), -1, -1) = 0) then |
6581 | 1173 |
begin |
1174 |
Gear^.X:= Gear^.X + Gear^.dX; |
|
1175 |
Gear^.dX:= Gear^.dX * _0_87; |
|
1176 |
Gear^.Y:= Gear^.Y - _4 |
|
1177 |
end |
|
1178 |
else |
|
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset
|
1179 |
if (TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -5, hwSign(Gear^.dX)) = 0) and |
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset
|
1180 |
(TestCollisionYwithXYShift(Gear, hwSign(Gear^.dX) - hwRound(Gear^.dX), -1, -1) = 0) then |
6581 | 1181 |
begin |
1182 |
Gear^.X:= Gear^.X + Gear^.dX; |
|
1183 |
Gear^.dX:= Gear^.dX * _0_84; |
|
1184 |
Gear^.Y:= Gear^.Y - _5 |
|
1185 |
end |
|
1186 |
else |
|
1187 |
if hwAbs(Gear^.dX) > _0_02 then |
|
1188 |
Gear^.dX:= -Gear^.Elasticity * Gear^.dX |
|
1189 |
else |
|
1190 |
begin |
|
1191 |
Gear^.State:= Gear^.State and (not gstMoving); |
|
11484 | 1192 |
cnt:= 0; |
1193 |
while (cnt < 6) and (not CheckGearDrowning(Gear)) and (Gear <> nil) and (TestCollisionYWithGear(Gear,1) = 0) do |
|
1194 |
begin |
|
1195 |
Gear^.Y:= Gear^.Y + _1; |
|
1196 |
inc(cnt) |
|
1197 |
end; |
|
1198 |
||
6581 | 1199 |
SetLittle(Gear^.dX) |
1200 |
end |
|
1201 |
else |
|
1202 |
begin |
|
1203 |
Gear^.State:= Gear^.State and (not gstMoving); |
|
11484 | 1204 |
cnt:= 0; |
1205 |
while (cnt < 6) and (not CheckGearDrowning(Gear)) and (Gear <> nil) and (TestCollisionYWithGear(Gear,1) = 0) do |
|
1206 |
begin |
|
1207 |
Gear^.Y:= Gear^.Y + _1; |
|
1208 |
inc(cnt) |
|
1209 |
end; |
|
6581 | 1210 |
SetLittle(Gear^.dX) |
1211 |
end |
|
1212 |
else if (hwAbs(Gear^.dX) > cLittle) |
|
1213 |
and ((Gear^.State and gstHHJumping) = 0) then |
|
1214 |
Gear^.dX:= -Gear^.Elasticity * Gear^.dX |
|
1215 |
else |
|
1216 |
SetLittle(Gear^.dX); |
|
1217 |
||
1218 |
if (not isFalling) |
|
7362
53bcfc714cb3
Fix rare condition when hog's gear stucks in an infinite loop which adds 1 to its Y coordinate not checking for drowning
unc0rr
parents:
7339
diff
changeset
|
1219 |
and (hwAbs(Gear^.dX) + hwAbs(Gear^.dY) < _0_03) then |
6581 | 1220 |
begin |
14947
60340c8a6fae
Don't remove gstWinner after GameOver
Wuzzy <Wuzzy2@mail.ru>
parents:
14769
diff
changeset
|
1221 |
if (not GameOver) then |
60340c8a6fae
Don't remove gstWinner after GameOver
Wuzzy <Wuzzy2@mail.ru>
parents:
14769
diff
changeset
|
1222 |
Gear^.State:= Gear^.State and (not gstWinner); |
6581 | 1223 |
Gear^.State:= Gear^.State and (not gstMoving); |
11484 | 1224 |
cnt:= 0; |
1225 |
while (cnt < 6) and (not CheckGearDrowning(Gear)) and (Gear <> nil) and (TestCollisionYWithGear(Gear,1) = 0) do |
|
1226 |
begin |
|
8947
e906ebd59612
CheckGearDrowning could delete hedgehogs gear! (CheckGearDrowning -> ResurrectHedgehog -> FindPlace). Fixes bug 620.
unc0rr
parents:
8818
diff
changeset
|
1227 |
Gear^.Y:= Gear^.Y + _1; |
11484 | 1228 |
inc(cnt) |
1229 |
end; |
|
8947
e906ebd59612
CheckGearDrowning could delete hedgehogs gear! (CheckGearDrowning -> ResurrectHedgehog -> FindPlace). Fixes bug 620.
unc0rr
parents:
8818
diff
changeset
|
1230 |
|
e906ebd59612
CheckGearDrowning could delete hedgehogs gear! (CheckGearDrowning -> ResurrectHedgehog -> FindPlace). Fixes bug 620.
unc0rr
parents:
8818
diff
changeset
|
1231 |
// could become nil in CheckGearDrowning if ai's hog fails to respawn in ai survival |
e906ebd59612
CheckGearDrowning could delete hedgehogs gear! (CheckGearDrowning -> ResurrectHedgehog -> FindPlace). Fixes bug 620.
unc0rr
parents:
8818
diff
changeset
|
1232 |
if Gear = nil then exit; |
6581 | 1233 |
SetLittle(Gear^.dX); |
1234 |
Gear^.dY:= _0 |
|
1235 |
end |
|
1236 |
else |
|
1237 |
Gear^.State:= Gear^.State or gstMoving; |
|
1238 |
||
1239 |
if (Gear^.State and gstMoving) <> 0 then |
|
1240 |
begin |
|
1241 |
Gear^.State:= Gear^.State and (not gstAnimation); |
|
1242 |
// ARTILLERY but not being moved by explosions |
|
1243 |
Gear^.X:= Gear^.X + Gear^.dX; |
|
1244 |
Gear^.Y:= Gear^.Y + Gear^.dY; |
|
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:
9706
diff
changeset
|
1245 |
if (not Gear^.dY.isNegative) and (TestCollisionYKick(Gear, 1) = 0) then |
6581 | 1246 |
begin |
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:
9706
diff
changeset
|
1247 |
land:= TestCollisionYwithXYShift(Gear, 0, 1, 1); |
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:
9706
diff
changeset
|
1248 |
if land and lfBouncy <> 0 then |
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9706
diff
changeset
|
1249 |
doStepFallingGear(Gear); |
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:
10818
diff
changeset
|
1250 |
Gear^.AdvBounce:= 1; |
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:
9706
diff
changeset
|
1251 |
|
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:
9706
diff
changeset
|
1252 |
if (land <> 0) and ((land and lfBouncy = 0) or (Gear^.State and gstCollision <> 0)) then |
953197ac43d8
Make sticky mine respect lfBouncy, make hogs do same, kinda... make uCollisions return land w/ mask, restrict bouncy to advbounce gears only, which means piano doesn't bounce anymore
nemo
parents:
9706
diff
changeset
|
1253 |
begin |
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:
9706
diff
changeset
|
1254 |
CheckHHDamage(Gear); |
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:
9706
diff
changeset
|
1255 |
Gear^.dY:= _0; |
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:
9706
diff
changeset
|
1256 |
Gear^.Y:= Gear^.Y + _1 |
9795
487e5675061f
clear gstCollision from doStepFallingGear once I'm done with it. hog "physics" doesn't use it, and was screwing up labels
nemo
parents:
9776
diff
changeset
|
1257 |
end; |
9954 | 1258 |
Gear^.State:= Gear^.State and (not gstCollision) |
6581 | 1259 |
end; |
8947
e906ebd59612
CheckGearDrowning could delete hedgehogs gear! (CheckGearDrowning -> ResurrectHedgehog -> FindPlace). Fixes bug 620.
unc0rr
parents:
8818
diff
changeset
|
1260 |
|
e906ebd59612
CheckGearDrowning could delete hedgehogs gear! (CheckGearDrowning -> ResurrectHedgehog -> FindPlace). Fixes bug 620.
unc0rr
parents:
8818
diff
changeset
|
1261 |
// could become nil if ai's hog fails to respawn in ai survival |
e906ebd59612
CheckGearDrowning could delete hedgehogs gear! (CheckGearDrowning -> ResurrectHedgehog -> FindPlace). Fixes bug 620.
unc0rr
parents:
8818
diff
changeset
|
1262 |
if Gear = nil then exit; |
6581 | 1263 |
// hide target cursor if current hog is drowning |
1264 |
if (Gear^.State and gstDrowning) <> 0 then |
|
1265 |
if (CurrentHedgehog^.Gear = Gear) then |
|
1266 |
isCursorVisible:= false |
|
1267 |
end; |
|
7623
addc5b262617
isZero appears to be never used. Use it in a few obvious cases and add web variant.
nemo
parents:
7615
diff
changeset
|
1268 |
if (not isZero(Gear^.dY)) and (Gear^.FlightTime > 0) and ((GameFlags and gfLowGravity) = 0) then |
6581 | 1269 |
begin |
1270 |
inc(Gear^.FlightTime); |
|
14303
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
14217
diff
changeset
|
1271 |
if (Gear^.FlightTime > 1500) and ((hwRound(Gear^.X) < leftX-250) or (hwRound(Gear^.X) > rightX+250)) then |
6581 | 1272 |
begin |
7763 | 1273 |
Gear^.FlightTime:= 0; |
12184
50856782cdc4
Add support for hog name in home run message
Wuzzy <almikes@aol.com>
parents:
12169
diff
changeset
|
1274 |
s:= ansistring(CurrentHedgehog^.Name); |
15066
9f6e3be10e96
Use capgrpMessage2 for eidHomerun so it doesn't collide with death msgs
Wuzzy <Wuzzy2@mail.ru>
parents:
15064
diff
changeset
|
1275 |
AddCaption(FormatA(GetEventString(eidHomerun), s), capcolDefault, capgrpMessage2); |
6581 | 1276 |
PlaySound(sndHomerun) |
1277 |
end; |
|
1278 |
end |
|
1279 |
else |
|
1280 |
begin |
|
1281 |
uStats.hedgehogFlight(Gear, Gear^.FlightTime); |
|
1282 |
Gear^.FlightTime:= 0; |
|
1283 |
end; |
|
15672
85d2afe34116
Enforce camera limits regardless of zoom level
Wuzzy <Wuzzy2@mail.ru>
parents:
15661
diff
changeset
|
1284 |
if (WorldEdge = weNone) and (not hasBorder) and (not Gear^.Hedgehog^.FlownOffMap) and (not isZero(Gear^.dX)) and (not isUnderwater) and ((Gear^.State and gstHHDriven) = 0) and (hwRound(Gear^.Y) < cWaterLine-300) and ((hwRound(Gear^.X) < -cCamLimitX) or (hwRound(Gear^.X) > LAND_WIDTH+cCamLimitX)) then |
14961
8b848c2939da
Add taunt sndFlyAway when hog flies off the map
Wuzzy <Wuzzy2@mail.ru>
parents:
14947
diff
changeset
|
1285 |
begin |
8b848c2939da
Add taunt sndFlyAway when hog flies off the map
Wuzzy <Wuzzy2@mail.ru>
parents:
14947
diff
changeset
|
1286 |
PlaySoundV(sndFlyAway, Gear^.Hedgehog^.Team^.voicepack); |
8b848c2939da
Add taunt sndFlyAway when hog flies off the map
Wuzzy <Wuzzy2@mail.ru>
parents:
14947
diff
changeset
|
1287 |
Gear^.Hedgehog^.FlownOffMap:= true; |
8b848c2939da
Add taunt sndFlyAway when hog flies off the map
Wuzzy <Wuzzy2@mail.ru>
parents:
14947
diff
changeset
|
1288 |
end; |
6581 | 1289 |
|
1290 |
end; |
|
1291 |
||
1292 |
procedure doStepHedgehogDriven(HHGear: PGear); |
|
1293 |
var t: PGear; |
|
1294 |
wasJumping: boolean; |
|
1295 |
Hedgehog: PHedgehog; |
|
12169
869cf5f34700
More ticker messages: Sick, king died, resurrect, time box return, timeout, kamikaze
Wuzzy <almikes@aol.com>
parents:
12048
diff
changeset
|
1296 |
s: ansistring; |
6581 | 1297 |
begin |
1298 |
Hedgehog:= HHGear^.Hedgehog; |
|
8658 | 1299 |
if not isInMultiShoot then |
1300 |
AllInactive:= false |
|
1301 |
else if Hedgehog^.CurAmmoType in [amShotgun, amDEagle, amSniperRifle] then |
|
12431
031af5544333
bug #230 - Precise aiming is disabled after firing first Deagle shot (when held down)
nemo
parents:
12322
diff
changeset
|
1302 |
HHGear^.Message:= HHGear^.Message and gmPrecise; |
6581 | 1303 |
|
15086
39067b45d0fc
Backed out changeset 96244def1cc0—It was broken
Wuzzy <Wuzzy2@mail.ru>
parents:
15085
diff
changeset
|
1304 |
if ((Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_Utility) <> 0) and isInMultiShoot then |
6581 | 1305 |
AllInactive:= true |
7786
23a075cf4837
*sigh* revert the multishoot thingy. worked fine in my tests w/ smine and cleaver, screwed up deagle. need to find out why, but sleepy. for later
nemo
parents:
7783
diff
changeset
|
1306 |
else if not isInMultiShoot then |
6581 | 1307 |
AllInactive:= false; |
1308 |
||
15148
f3f09c71ff6c
End turn immediately when hedgehog health reaches 0
Wuzzy <Wuzzy2@mail.ru>
parents:
15086
diff
changeset
|
1309 |
if (TurnTimeLeft = 0) or (HHGear^.Damage > 0) or (HHGear^.Health = 0) or (((GameFlags and gfKing) <> 0) and (not Hedgehog^.Team^.hasKing)) or (LuaEndTurnRequested = true) then |
6581 | 1310 |
begin |
8494
53b91a602955
Cleaver tweaks based on feedback. Nerf damage, shrink radius. This means cleaver will embed into ground quite a bit further.
nemo
parents:
8493
diff
changeset
|
1311 |
if (Hedgehog^.CurAmmoType = amKnife) then |
53b91a602955
Cleaver tweaks based on feedback. Nerf damage, shrink radius. This means cleaver will embed into ground quite a bit further.
nemo
parents:
8493
diff
changeset
|
1312 |
LoadHedgehogHat(Hedgehog^, Hedgehog^.Hat); |
6581 | 1313 |
if TagTurnTimeLeft = 0 then |
1314 |
TagTurnTimeLeft:= TurnTimeLeft; |
|
1315 |
TurnTimeLeft:= 0; |
|
15148
f3f09c71ff6c
End turn immediately when hedgehog health reaches 0
Wuzzy <Wuzzy2@mail.ru>
parents:
15086
diff
changeset
|
1316 |
if (GameOver = false) and ((GameFlags and gfInfAttack) = 0) and ((HHGear^.State and gstAttacked) = 0) and (HHGear^.Damage = 0) and (HHGear^.Health > 0) and (LuaNoEndTurnTaunts = false) and (uStats.getIsTurnSkipped() = false) then |
12169
869cf5f34700
More ticker messages: Sick, king died, resurrect, time box return, timeout, kamikaze
Wuzzy <almikes@aol.com>
parents:
12048
diff
changeset
|
1317 |
begin |
11922
d0296b8e60c0
Add “boring” voice to voice queue to avoid voice overlapping
Wuzzy <almikes@aol.com>
parents:
11914
diff
changeset
|
1318 |
AddVoice(sndBoring, Hedgehog^.Team^.voicepack); |
12169
869cf5f34700
More ticker messages: Sick, king died, resurrect, time box return, timeout, kamikaze
Wuzzy <almikes@aol.com>
parents:
12048
diff
changeset
|
1319 |
if (GameFlags and gfInfAttack = 0) then |
869cf5f34700
More ticker messages: Sick, king died, resurrect, time box return, timeout, kamikaze
Wuzzy <almikes@aol.com>
parents:
12048
diff
changeset
|
1320 |
begin |
869cf5f34700
More ticker messages: Sick, king died, resurrect, time box return, timeout, kamikaze
Wuzzy <almikes@aol.com>
parents:
12048
diff
changeset
|
1321 |
s:= Hedgehog^.Name; |
13642
3d14950641a4
Refactor text color variable names, export 2 color values to Lua
Wuzzy <Wuzzy2@mail.ru>
parents:
13619
diff
changeset
|
1322 |
AddCaption(FormatA(GetEventString(eidTimeout), s), capcolDefault, capgrpMessage); |
12169
869cf5f34700
More ticker messages: Sick, king died, resurrect, time box return, timeout, kamikaze
Wuzzy <almikes@aol.com>
parents:
12048
diff
changeset
|
1323 |
end; |
869cf5f34700
More ticker messages: Sick, king died, resurrect, time box return, timeout, kamikaze
Wuzzy <almikes@aol.com>
parents:
12048
diff
changeset
|
1324 |
end; |
6581 | 1325 |
isCursorVisible:= false; |
1326 |
HHGear^.State:= HHGear^.State and (not (gstHHDriven or gstAnimation or gstAttacking)); |
|
1327 |
AttackBar:= 0; |
|
12492
47be9f3e61e9
Fix charging sound continuing to play on hog damage (#236)
Wuzzy <almikes@aol.com>
parents:
12464
diff
changeset
|
1328 |
StopSound(sndThrowPowerUp); |
12286
b4dde7035fe2
New Lua call: EndTurn to end turn
Wuzzy <almikes@aol.com>
parents:
12204
diff
changeset
|
1329 |
LuaEndTurnRequested:= false; |
b4dde7035fe2
New Lua call: EndTurn to end turn
Wuzzy <almikes@aol.com>
parents:
12204
diff
changeset
|
1330 |
LuaNoEndTurnTaunts:= false; |
15148
f3f09c71ff6c
End turn immediately when hedgehog health reaches 0
Wuzzy <Wuzzy2@mail.ru>
parents:
15086
diff
changeset
|
1331 |
if (HHGear^.Damage > 0) or (HHGear^.Health = 0) then |
6581 | 1332 |
HHGear^.State:= HHGear^.State and (not (gstHHJumping or gstHHHJump)); |
1333 |
exit |
|
1334 |
end; |
|
1335 |
||
9670
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
1336 |
if isAFK and (not CurrentTeam^.ExtDriven) and (CurrentHedgehog^.BotLevel = 0) then |
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
1337 |
begin |
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
1338 |
AFKSkip; |
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
1339 |
exit |
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
1340 |
end; |
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
1341 |
|
6581 | 1342 |
if (HHGear^.State and gstAnimation) <> 0 then |
1343 |
begin |
|
1344 |
HHGear^.Message:= 0; |
|
1345 |
if (HHGear^.Pos = Wavez[TWave(HHGear^.Tag)].VoiceDelay) and (HHGear^.Timer = 0) then |
|
7053 | 1346 |
PlaySoundV(Wavez[TWave(HHGear^.Tag)].Voice, Hedgehog^.Team^.voicepack); |
6581 | 1347 |
inc(HHGear^.Timer); |
1348 |
if HHGear^.Timer = Wavez[TWave(HHGear^.Tag)].Interval then |
|
1349 |
begin |
|
1350 |
HHGear^.Timer:= 0; |
|
1351 |
inc(HHGear^.Pos); |
|
1352 |
if HHGear^.Pos = Wavez[TWave(HHGear^.Tag)].FramesCount then |
|
1353 |
HHGear^.State:= HHGear^.State and (not gstAnimation) |
|
1354 |
end; |
|
1355 |
exit |
|
1356 |
end; |
|
1357 |
||
1358 |
if ((HHGear^.State and gstMoving) <> 0) |
|
7028 | 1359 |
or (GHStepTicks = cHHStepTicks) |
6581 | 1360 |
or (CurAmmoGear <> nil) then // we are moving |
1361 |
begin |
|
1362 |
with Hedgehog^ do |
|
1363 |
if (CurAmmoGear = nil) |
|
1364 |
and (HHGear^.dY > _0_39) |
|
1365 |
and (CurAmmoType = amParachute) then |
|
1366 |
HHGear^.Message:= HHGear^.Message or gmAttack; |
|
1367 |
// check for case with ammo |
|
1368 |
t:= CheckGearNear(HHGear, gtCase, 36, 36); |
|
11624 | 1369 |
if (t <> nil) then |
6581 | 1370 |
PickUp(HHGear, t) |
1371 |
end; |
|
1372 |
||
1373 |
if (CurAmmoGear = nil) then |
|
1374 |
if (((HHGear^.Message and gmAttack) <> 0) |
|
1375 |
or ((HHGear^.State and gstAttacking) <> 0)) then |
|
1376 |
Attack(HHGear) // should be before others to avoid desync with '/put' msg and changing weapon msgs |
|
1377 |
else |
|
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
1378 |
else |
6581 | 1379 |
with Hedgehog^ do |
1380 |
if ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) <> 0) |
|
1381 |
and ((HHGear^.Message and gmLJump) <> 0) |
|
1382 |
and ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_AltUse) <> 0) then |
|
1383 |
begin |
|
1384 |
Attack(HHGear); |
|
1385 |
HHGear^.Message:= HHGear^.Message and (not gmLJump) |
|
1386 |
end; |
|
1387 |
||
1388 |
if (CurAmmoGear = nil) |
|
7956
61da79e83330
Causes AI fail. Needs testing 'cause at some point, I thought this was needed for portal, I don't remember *why*
nemo
parents:
7832
diff
changeset
|
1389 |
or ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) <> 0) then |
6581 | 1390 |
begin |
1391 |
if ((HHGear^.Message and gmSlot) <> 0) then |
|
12304
95cd64676f73
Backed out changeset 071a05275798
Wuzzy <almikes@aol.com>
parents:
12303
diff
changeset
|
1392 |
if ChangeAmmo(HHGear) then ApplyAmmoChanges(Hedgehog^); |
6581 | 1393 |
|
1394 |
if ((HHGear^.Message and gmWeapon) <> 0) then |
|
1395 |
HHSetWeapon(HHGear); |
|
1396 |
||
1397 |
if ((HHGear^.Message and gmTimer) <> 0) then |
|
1398 |
HHSetTimer(HHGear); |
|
1399 |
end; |
|
1400 |
||
1401 |
if CurAmmoGear <> nil then |
|
1402 |
begin |
|
1403 |
CurAmmoGear^.Message:= HHGear^.Message; |
|
1404 |
exit |
|
1405 |
end; |
|
1406 |
||
1407 |
HedgehogChAngle(HHGear); |
|
1408 |
||
1409 |
if (HHGear^.State and gstMoving) <> 0 then |
|
1410 |
begin |
|
1411 |
wasJumping:= ((HHGear^.State and gstHHJumping) <> 0); |
|
1412 |
||
1413 |
if ((HHGear^.Message and gmHJump) <> 0) and wasJumping and ((HHGear^.State and gstHHHJump) = 0) then |
|
15649 | 1414 |
if (not (hwAbs(HHGear^.dX) > cLittle)) and (HHGear^.dY < _0_05) then |
6581 | 1415 |
begin |
1416 |
HHGear^.State:= HHGear^.State or gstHHHJump; |
|
1417 |
HHGear^.dY:= -_0_25; |
|
13096
d78e65c66573
Add hedgehog effect heArtillery, allows to set per-hedgehog artillery mode
Wuzzy <Wuzzy2@mail.ru>
parents:
12996
diff
changeset
|
1418 |
if (Hedgehog^.Effects[heArtillery] = 0) then |
6581 | 1419 |
HHGear^.dX:= -SignAs(_0_02, HHGear^.dX); |
7053 | 1420 |
PlaySoundV(sndJump2, Hedgehog^.Team^.voicepack) |
6581 | 1421 |
end; |
1422 |
||
1423 |
HHGear^.Message:= HHGear^.Message and (not (gmLJump or gmHJump)); |
|
1424 |
||
13096
d78e65c66573
Add hedgehog effect heArtillery, allows to set per-hedgehog artillery mode
Wuzzy <Wuzzy2@mail.ru>
parents:
12996
diff
changeset
|
1425 |
if (Hedgehog^.Effects[heArtillery] = 0) and wasJumping and (TestCollisionXwithGear(HHGear, hwSign(HHGear^.dX)) <> 0) then |
6581 | 1426 |
SetLittle(HHGear^.dX); |
1427 |
||
1428 |
if Hedgehog^.Gear <> nil then |
|
1429 |
doStepHedgehogMoving(HHGear); |
|
1430 |
||
1431 |
if ((HHGear^.State and (gstMoving or gstDrowning)) = 0) then |
|
1432 |
begin |
|
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9285
diff
changeset
|
1433 |
AddCI(HHGear); |
6581 | 1434 |
if wasJumping then |
7028 | 1435 |
GHStepTicks:= 410 |
6581 | 1436 |
else |
7028 | 1437 |
GHStepTicks:= 95 |
6581 | 1438 |
end; |
1439 |
exit |
|
1440 |
end; |
|
1441 |
||
15086
39067b45d0fc
Backed out changeset 96244def1cc0—It was broken
Wuzzy <Wuzzy2@mail.ru>
parents:
15085
diff
changeset
|
1442 |
if not(isInMultiShoot and (Hedgehog^.CurAmmoType in [amShotgun, amDEagle, amSniperRifle])) and (Hedgehog^.Gear <> nil) then |
6581 | 1443 |
begin |
7028 | 1444 |
if GHStepTicks > 0 then |
1445 |
dec(GHStepTicks); |
|
1446 |
if (GHStepTicks = 0) then |
|
6581 | 1447 |
HedgehogStep(HHGear) |
1448 |
end |
|
1449 |
end; |
|
1450 |
||
1451 |
//////////////////////////////////////////////////////////////////////////////// |
|
1452 |
procedure doStepHedgehogFree(Gear: PGear); |
|
1453 |
var prevState: Longword; |
|
10124
aabd1b75d5a3
Even more explicit type conversions and other stuff to help pas2c use ansistrings
unc0rr
parents:
10123
diff
changeset
|
1454 |
s: ansistring; |
6581 | 1455 |
begin |
1456 |
prevState:= Gear^.State; |
|
1457 |
||
1458 |
doStepHedgehogMoving(Gear); |
|
1459 |
||
1460 |
if (Gear^.State and (gstMoving or gstDrowning)) <> 0 then |
|
1461 |
begin |
|
1462 |
if Gear^.Damage > 0 then |
|
1463 |
CalcRotationDirAngle(Gear); |
|
1464 |
AllInactive:= false; |
|
1465 |
exit |
|
1466 |
end; |
|
1467 |
||
1468 |
if (Gear^.Health = 0) then |
|
1469 |
begin |
|
1470 |
if PrvInactive or ((GameFlags and gfInfAttack) <> 0) then |
|
1471 |
begin |
|
1472 |
Gear^.Timer:= 0; |
|
1473 |
FollowGear:= Gear; |
|
1474 |
PrvInactive:= false; |
|
1475 |
AllInactive:= false; |
|
1476 |
||
1477 |
if (Gear^.State and gstHHGone) = 0 then |
|
1478 |
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:
6992
diff
changeset
|
1479 |
Gear^.Hedgehog^.Effects[hePoisoned] := 0; |
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:
6992
diff
changeset
|
1480 |
if Gear^.Hedgehog^.Effects[heResurrectable] <> 0 then |
6581 | 1481 |
begin |
1482 |
ResurrectHedgehog(Gear); |
|
1483 |
end |
|
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
1484 |
else |
6581 | 1485 |
begin |
1486 |
Gear^.State:= (Gear^.State or gstHHDeath) and (not gstAnimation); |
|
1487 |
Gear^.doStep:= @doStepHedgehogDead; |
|
1488 |
// Death message |
|
10124
aabd1b75d5a3
Even more explicit type conversions and other stuff to help pas2c use ansistrings
unc0rr
parents:
10123
diff
changeset
|
1489 |
s:= ansistring(Gear^.Hedgehog^.Name); |
12169
869cf5f34700
More ticker messages: Sick, king died, resurrect, time box return, timeout, kamikaze
Wuzzy <almikes@aol.com>
parents:
12048
diff
changeset
|
1490 |
if Gear^.Hedgehog^.King then |
13642
3d14950641a4
Refactor text color variable names, export 2 color values to Lua
Wuzzy <Wuzzy2@mail.ru>
parents:
13619
diff
changeset
|
1491 |
AddCaption(FormatA(GetEventString(eidKingDied), s), capcolDefault, capgrpMessage) |
12169
869cf5f34700
More ticker messages: Sick, king died, resurrect, time box return, timeout, kamikaze
Wuzzy <almikes@aol.com>
parents:
12048
diff
changeset
|
1492 |
else |
13642
3d14950641a4
Refactor text color variable names, export 2 color values to Lua
Wuzzy <Wuzzy2@mail.ru>
parents:
13619
diff
changeset
|
1493 |
AddCaption(FormatA(GetEventString(eidDied), s), capcolDefault, capgrpMessage); |
6581 | 1494 |
end; |
1495 |
end |
|
1496 |
else |
|
1497 |
begin |
|
1498 |
Gear^.State:= Gear^.State and (not gstAnimation); |
|
1499 |
Gear^.doStep:= @doStepHedgehogGone; |
|
1500 |
||
1501 |
// Gone message |
|
10124
aabd1b75d5a3
Even more explicit type conversions and other stuff to help pas2c use ansistrings
unc0rr
parents:
10123
diff
changeset
|
1502 |
s:= ansistring(Gear^.Hedgehog^.Name); |
13642
3d14950641a4
Refactor text color variable names, export 2 color values to Lua
Wuzzy <Wuzzy2@mail.ru>
parents:
13619
diff
changeset
|
1503 |
AddCaption(FormatA(GetEventString(eidGone), s), capcolDefault, capgrpMessage); |
6581 | 1504 |
end |
1505 |
end; |
|
1506 |
exit |
|
1507 |
end; |
|
1508 |
||
1509 |
if ((Gear^.State and gstWait) = 0) and |
|
1510 |
(prevState <> Gear^.State) then |
|
1511 |
begin |
|
1512 |
Gear^.State:= Gear^.State or gstWait; |
|
1513 |
Gear^.Timer:= 150 |
|
1514 |
end |
|
1515 |
else |
|
1516 |
begin |
|
1517 |
if Gear^.Timer = 0 then |
|
1518 |
begin |
|
14947
60340c8a6fae
Don't remove gstWinner after GameOver
Wuzzy <Wuzzy2@mail.ru>
parents:
14769
diff
changeset
|
1519 |
Gear^.State:= Gear^.State and (not (gstWait or gstLoser or gstAttacked or gstNotKickable or gstChooseTarget)); |
60340c8a6fae
Don't remove gstWinner after GameOver
Wuzzy <Wuzzy2@mail.ru>
parents:
14769
diff
changeset
|
1520 |
if (not GameOver) then |
60340c8a6fae
Don't remove gstWinner after GameOver
Wuzzy <Wuzzy2@mail.ru>
parents:
14769
diff
changeset
|
1521 |
Gear^.State:= Gear^.State and (not gstWinner); |
8563
4d9d8287e601
Trying to improve rendering, sliding and thawing. Messing around w/ making fire thaw faster.
nemo
parents:
8560
diff
changeset
|
1522 |
if Gear^.Hedgehog^.Effects[heFrozen] = 0 then Gear^.Active:= false; |
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9285
diff
changeset
|
1523 |
AddCI(Gear); |
6581 | 1524 |
exit |
1525 |
end |
|
1526 |
else dec(Gear^.Timer) |
|
1527 |
end; |
|
1528 |
||
1529 |
AllInactive:= false |
|
1530 |
end; |
|
1531 |
||
8574 | 1532 |
procedure CheckIce(Gear: PGear); inline; |
6581 | 1533 |
(* |
1534 |
var x,y,tx,ty: LongInt; |
|
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
1535 |
tdX, tdY, slope: hwFloat; |
6581 | 1536 |
land: Word; *) |
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
1537 |
var slope: hwFloat; |
6581 | 1538 |
begin |
8574 | 1539 |
if (Gear^.Message and (gmAllStoppable or gmLJump or gmHJump) = 0) |
13324 | 1540 |
and (Gear^.State and (gstHHJumping or gstHHHJump or gstAttacking or gstAnimation) = 0) |
8633 | 1541 |
and ((Gear^.Hedgehog = nil) or ((Gear^.Hedgehog^.Effects[heFrozen] = 0) or (Gear^.Hedgehog^.Effects[heFrozen] > 255))) |
9672
8663d299ba62
this should prevent sliding when game clock isn't running. sorry unc0rr, not going to bother encapsulating. maybe later. short on time right now/lazy
nemo
parents:
9670
diff
changeset
|
1542 |
and (not Gear^.dY.isNegative) and TurnClockActive and (TestCollisionYwithGear(Gear, 1) and lfIce <> 0) then |
8574 | 1543 |
begin |
1544 |
slope:= CalcSlopeBelowGear(Gear); |
|
1545 |
if slope.QWordValue > 730144440 then // ignore mild slopes |
|
1546 |
begin |
|
1547 |
Gear^.dX:=Gear^.dX+slope*cGravity*_256; |
|
1548 |
Gear^.State:= Gear^.State or gstMoving |
|
1549 |
end |
|
1550 |
end; |
|
1551 |
(* |
|
1552 |
x:= hwRound(Gear^.X); |
|
1553 |
y:= hwRound(Gear^.Y); |
|
1554 |
AddVisualGear(x, y, vgtSmokeTrace); |
|
1555 |
AddVisualGear(x - hwRound(_5*slope), y + hwRound(_5*slope), vgtSmokeTrace); |
|
1556 |
AddVisualGear(x + hwRound(_5*slope), y - hwRound(_5*slope), vgtSmokeTrace); |
|
1557 |
AddVisualGear(x - hwRound(_20 * slope), y + hwRound(_20 * slope), vgtSmokeTrace); |
|
1558 |
AddVisualGear(x + hwRound(_20 * slope), y - hwRound(_20 * slope), vgtSmokeTrace); |
|
1559 |
AddVisualGear(x - hwRound(_30 * slope), y + hwRound(_30 * slope), vgtSmokeTrace); |
|
1560 |
AddVisualGear(x + hwRound(_30 * slope), y - hwRound(_30 * slope), vgtSmokeTrace); |
|
1561 |
AddVisualGear(x - hwRound(_40 * slope), y + hwRound(_40 * slope), vgtSmokeTrace); |
|
1562 |
AddVisualGear(x + hwRound(_40 * slope), y - hwRound(_40 * slope), vgtSmokeTrace); |
|
1563 |
AddVisualGear(x - hwRound(_50 * slope), y + hwRound(_50 * slope), vgtSmokeTrace); |
|
1564 |
AddVisualGear(x + hwRound(_50 * slope), y - hwRound(_50 * slope), vgtSmokeTrace); *) |
|
1565 |
end; |
|
1566 |
||
1567 |
//////////////////////////////////////////////////////////////////////////////// |
|
1568 |
procedure doStepHedgehog(Gear: PGear); |
|
9526 | 1569 |
var tX: hwFloat; |
8574 | 1570 |
begin |
10577
5e075da5e0a4
don't drown unplaced hedgehogs. thanks to zimmux and Wohlstand for reporting
sheepluva
parents:
10443
diff
changeset
|
1571 |
// it might make sense to skip more than just drowning check here |
5e075da5e0a4
don't drown unplaced hedgehogs. thanks to zimmux and Wohlstand for reporting
sheepluva
parents:
10443
diff
changeset
|
1572 |
if (not Gear^.Hedgehog^.Unplaced) then |
5e075da5e0a4
don't drown unplaced hedgehogs. thanks to zimmux and Wohlstand for reporting
sheepluva
parents:
10443
diff
changeset
|
1573 |
CheckGearDrowning(Gear); |
9917 | 1574 |
if Gear = nil then exit; |
9526 | 1575 |
tX:= Gear^.X; |
1576 |
if WorldWrap(Gear) then |
|
1577 |
begin |
|
10015 | 1578 |
if (WorldEdge <> weBounce) and (Gear = CurrentHedgehog^.Gear) and |
9539 | 1579 |
(CurAmmoGear <> nil) and (CurAmmoGear^.Kind =gtRope) and (CurAmmoGear^.Elasticity <> _0) then |
9526 | 1580 |
CurAmmoGear^.PortalCounter:= 1; |
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset
|
1581 |
if (WorldEdge = weWrap) and ((TestCollisionXwithGear(Gear, 1) <> 0) or (TestCollisionXwithGear(Gear, -1) <> 0)) then |
13610
f1b6070a6e14
Fix projectiles reacing incorrectly with land just behind the wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13597
diff
changeset
|
1582 |
// Stop hedgehog if it collides with land *just* behind other side of world wrap edge |
13611
65a10215ba43
Fix hog turning around when blowtorching through wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13610
diff
changeset
|
1583 |
if ((Gear^.State and gstNotKickable) = 0) then |
65a10215ba43
Fix hog turning around when blowtorching through wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13610
diff
changeset
|
1584 |
begin |
14303
6015b74eea55
overall, using LongInt for leftX/rightX results in fewer casts, since most comparisons are against ints.
nemo
parents:
14217
diff
changeset
|
1585 |
if (hwRound(tX) > leftX + Gear^.Radius * 2) then |
13611
65a10215ba43
Fix hog turning around when blowtorching through wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13610
diff
changeset
|
1586 |
Gear^.X:= int2HwFloat(RightX) |
65a10215ba43
Fix hog turning around when blowtorching through wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13610
diff
changeset
|
1587 |
else |
65a10215ba43
Fix hog turning around when blowtorching through wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13610
diff
changeset
|
1588 |
Gear^.X:= int2HwFloat(LeftX); |
65a10215ba43
Fix hog turning around when blowtorching through wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13610
diff
changeset
|
1589 |
Gear^.dX.QWordValue:= 0; |
65a10215ba43
Fix hog turning around when blowtorching through wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13610
diff
changeset
|
1590 |
Gear^.State := Gear^.State or gstCollision; |
65a10215ba43
Fix hog turning around when blowtorching through wrap world edge
Wuzzy <Wuzzy2@mail.ru>
parents:
13610
diff
changeset
|
1591 |
end; |
9526 | 1592 |
end; |
9507 | 1593 |
|
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:
7375
diff
changeset
|
1594 |
CheckSum:= CheckSum xor Gear^.Hedgehog^.BotLevel; |
6581 | 1595 |
if (Gear^.Message and gmDestroy) <> 0 then |
1596 |
begin |
|
1597 |
DeleteGear(Gear); |
|
1598 |
exit |
|
1599 |
end; |
|
9670
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset
|
1600 |
if GameTicks mod 128 = 0 then CheckIce(Gear); |
8655
9fa380a18a65
At multiple requests, change ice to be turn based. This is a more modest adjustment of existing code, that can be fairly easily flagged or reverted if desired. It also allows scripts to extend freezing, and preserves fire melting.
nemo
parents:
8633
diff
changeset
|
1601 |
(* |
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
1602 |
if Gear^.Hedgehog^.Effects[heFrozen] > 0 then |
8563
4d9d8287e601
Trying to improve rendering, sliding and thawing. Messing around w/ making fire thaw faster.
nemo
parents:
8560
diff
changeset
|
1603 |
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:
8631
diff
changeset
|
1604 |
if (Gear^.Hedgehog^.Effects[heFrozen] > 256) and (CurrentHedgehog^.Team^.Clan <> Gear^.Hedgehog^.Team^.Clan) then |
8563
4d9d8287e601
Trying to improve rendering, sliding and thawing. Messing around w/ making fire thaw faster.
nemo
parents:
8560
diff
changeset
|
1605 |
dec(Gear^.Hedgehog^.Effects[heFrozen]) |
4d9d8287e601
Trying to improve rendering, sliding and thawing. Messing around w/ making fire thaw faster.
nemo
parents:
8560
diff
changeset
|
1606 |
else if GameTicks mod 10 = 0 then |
4d9d8287e601
Trying to improve rendering, sliding and thawing. Messing around w/ making fire thaw faster.
nemo
parents:
8560
diff
changeset
|
1607 |
dec(Gear^.Hedgehog^.Effects[heFrozen]) |
4d9d8287e601
Trying to improve rendering, sliding and thawing. Messing around w/ making fire thaw faster.
nemo
parents:
8560
diff
changeset
|
1608 |
end; |
8655
9fa380a18a65
At multiple requests, change ice to be turn based. This is a more modest adjustment of existing code, that can be fairly easily flagged or reverted if desired. It also allows scripts to extend freezing, and preserves fire melting.
nemo
parents:
8633
diff
changeset
|
1609 |
*) |
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset
|
1610 |
if (GameTicks mod 10 = 0) and (Gear^.Hedgehog^.Effects[heFrozen] > 0) and (Gear^.Hedgehog^.Effects[heFrozen] < 256) then |
8655
9fa380a18a65
At multiple requests, change ice to be turn based. This is a more modest adjustment of existing code, that can be fairly easily flagged or reverted if desired. It also allows scripts to extend freezing, and preserves fire melting.
nemo
parents:
8633
diff
changeset
|
1611 |
dec(Gear^.Hedgehog^.Effects[heFrozen]); |
6581 | 1612 |
if (Gear^.State and gstHHDriven) = 0 then |
1613 |
doStepHedgehogFree(Gear) |
|
1614 |
else |
|
1615 |
begin |
|
1616 |
with Gear^.Hedgehog^ do |
|
1617 |
if Team^.hasGone then |
|
1618 |
TeamGoneEffect(Team^) |
|
1619 |
else |
|
1620 |
doStepHedgehogDriven(Gear) |
|
1621 |
end; |
|
1622 |
end; |
|
1623 |
||
12815
92218a06c9ff
Don't send taunt message for automatically happening taunt animation
unc0rr
parents:
12649
diff
changeset
|
1624 |
procedure PlayTaunt(taunt: Longword); |
92218a06c9ff
Don't send taunt message for automatically happening taunt animation
unc0rr
parents:
12649
diff
changeset
|
1625 |
begin |
92218a06c9ff
Don't send taunt message for automatically happening taunt animation
unc0rr
parents:
12649
diff
changeset
|
1626 |
if CurrentHedgehog^.Gear <> nil then |
92218a06c9ff
Don't send taunt message for automatically happening taunt animation
unc0rr
parents:
12649
diff
changeset
|
1627 |
with CurrentHedgehog^.Gear^ do |
92218a06c9ff
Don't send taunt message for automatically happening taunt animation
unc0rr
parents:
12649
diff
changeset
|
1628 |
begin |
92218a06c9ff
Don't send taunt message for automatically happening taunt animation
unc0rr
parents:
12649
diff
changeset
|
1629 |
Message:= Message or (gmAnimate and InputMask); |
92218a06c9ff
Don't send taunt message for automatically happening taunt animation
unc0rr
parents:
12649
diff
changeset
|
1630 |
MsgParam:= taunt; |
92218a06c9ff
Don't send taunt message for automatically happening taunt animation
unc0rr
parents:
12649
diff
changeset
|
1631 |
ScriptCall('onTaunt', MsgParam); |
92218a06c9ff
Don't send taunt message for automatically happening taunt animation
unc0rr
parents:
12649
diff
changeset
|
1632 |
end |
92218a06c9ff
Don't send taunt message for automatically happening taunt animation
unc0rr
parents:
12649
diff
changeset
|
1633 |
end; |
92218a06c9ff
Don't send taunt message for automatically happening taunt animation
unc0rr
parents:
12649
diff
changeset
|
1634 |
|
6581 | 1635 |
end. |