author  nemo 
Mon, 11 May 2015 13:53:08 0400  
changeset 10942  5d7dd938dedc 
parent 10895  bce67defd804 
child 10970  7341e0c3f966 
permissions  rwrr 
6581  1 
(* 
2 
* Hedgewars, a free turn based strategy game 

9998  3 
* Copyright (c) 20042014 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 021101301 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; 
6581  33 

34 
implementation 

8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

35 
uses uConsts, uVariables, uFloat, uAmmos, uSound, uCaptions, 
9285  36 
uCommands, uLocale, uUtils, uStats, uIO, uScript, 
37 
uGearsList, uCollisions, uRandom, uStore, uTeams, 

9670
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset

38 
uGearsUtils, uVisualGearsList, uChat; 
6581  39 

7028  40 
var GHStepTicks: LongWord = 0; 
41 

9670
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset

42 
procedure AFKSkip; 
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset

43 
var 
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset

44 
t: byte; 
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset

45 
begin 
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset

46 
t:= 0; 
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset

47 
while (TeamsArray[t] <> CurrentTeam) do inc(t); 
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset

48 

1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset

49 
SendHogSpeech(#1 + char(t) + 'AFK'); 
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset

50 

1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset

51 
ParseCommand('/skip', true) 
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset

52 
end; 
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset

53 

6581  54 
// Shouldn't more of this ammo switching stuff be moved to uAmmos ? 
55 
function ChangeAmmo(HHGear: PGear): boolean; 

56 
var slot, i: Longword; 

57 
ammoidx: LongInt; 

7754  58 
prevAmmo: TAmmoType; 
6581  59 
begin 
60 
ChangeAmmo:= false; 

61 
slot:= HHGear^.MsgParam; 

62 

63 
with HHGear^.Hedgehog^ do 

64 
begin 

65 
HHGear^.Message:= HHGear^.Message and (not gmSlot); 

7754  66 
prevAmmo:= CurAmmoType; 
6581  67 
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

68 
if (((HHGear^.State and (gstAttacking or gstAttacked)) <> 0) and (GameFlags and gfInfAttack = 0)) 
6581  69 
or ((HHGear^.State and gstHHDriven) = 0) then 
70 
exit; 

71 
ChangeAmmo:= true; 

72 

73 
while (ammoidx < cMaxSlotAmmoIndex) and (Ammo^[slot, ammoidx].AmmoType <> CurAmmoType) do 

74 
inc(ammoidx); 

75 

8553
a8e1cff496d8
Allow switching away from any weapon when during multishoot.
nemo
parents:
8494
diff
changeset

76 
if (MultiShootAttacks > 0) then 
a8e1cff496d8
Allow switching away from any weapon when during multishoot.
nemo
parents:
8494
diff
changeset

77 
begin 
a8e1cff496d8
Allow switching away from any weapon when during multishoot.
nemo
parents:
8494
diff
changeset

78 
if (CurAmmoType = amSniperRifle) and ((GameFlags and gfArtillery) = 0) then 
a8e1cff496d8
Allow switching away from any weapon when during multishoot.
nemo
parents:
8494
diff
changeset

79 
cArtillery := false; 
8631
796ed875aa95
Call act as if attack ended on last shot if switching while in mid multishoot. Thanks to AI for discovering this.
nemo
parents:
8616
diff
changeset

80 
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 multishoot. Thanks to AI for discovering this.
nemo
parents:
8616
diff
changeset

81 
begin 
796ed875aa95
Call act as if attack ended on last shot if switching while in mid multishoot. Thanks to AI for discovering this.
nemo
parents:
8616
diff
changeset

82 
MultiShootAttacks:= Ammoz[CurAmmoType].Ammo.NumPerTurn; 
796ed875aa95
Call act as if attack ended on last shot if switching while in mid multishoot. Thanks to AI for discovering this.
nemo
parents:
8616
diff
changeset

83 
AfterAttack 
796ed875aa95
Call act as if attack ended on last shot if switching while in mid multishoot. Thanks to AI for discovering this.
nemo
parents:
8616
diff
changeset

84 
end 
796ed875aa95
Call act as if attack ended on last shot if switching while in mid multishoot. Thanks to AI for discovering this.
nemo
parents:
8616
diff
changeset

85 
else OnUsedAmmo(HHGear^.Hedgehog^) 
8553
a8e1cff496d8
Allow switching away from any weapon when during multishoot.
nemo
parents:
8494
diff
changeset

86 
end; 
6581  87 

88 
MultiShootAttacks:= 0; 

89 
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

90 

6581  91 
if Ammoz[CurAmmoType].Slot = slot then 
92 
begin 

93 
i:= 0; 

94 
repeat 

95 
inc(ammoidx); 

96 
if (ammoidx > cMaxSlotAmmoIndex) then 

97 
begin 

98 
inc(i); 

99 
CurAmmoType:= amNothing; 

100 
ammoidx:= 1; 

101 
//TryDo(i < 2, 'Engine bug: no ammo in current slot', true) 

102 
end; 

103 
until (i = 1) or ((Ammo^[slot, ammoidx].Count > 0) 

104 
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

105 

b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

106 
end 
6581  107 
else 
108 
begin 

109 
i:= 0; 

110 
// check whether there is ammo in slot 

111 
while (i <= cMaxSlotAmmoIndex) and ((Ammo^[slot, i].Count = 0) 

112 
or (Team^.Clan^.TurnNumber <= Ammoz[Ammo^[slot, i].AmmoType].SkipTurns)) 

113 
do inc(i); 

114 

115 
if i <= cMaxSlotAmmoIndex then 

116 
ammoidx:= i 

117 
else ammoidx:= 1 

118 
end; 

119 
if ammoidx >= 0 then 

120 
CurAmmoType:= Ammo^[slot, ammoidx].AmmoType; 

8051
f26422ef0333
oftrequested, should make the shoppa guys happy, probably, but, knowing them, I'm sure someone will complain
nemo
parents:
8030
diff
changeset

121 
// Try again in the next slot 
10015  122 
if (CurAmmoType = prevAmmo) and (slot < cMaxSlotIndex) then 
8051
f26422ef0333
oftrequested, should make the shoppa guys happy, probably, but, knowing them, I'm sure someone will complain
nemo
parents:
8030
diff
changeset

123 
begin 
9664
1e528c58e41d
ok. this should avoid calling switch inappropriately. also, add skip to trophyrace and add the perteam achievement reporting.
nemo
parents:
9579
diff
changeset

124 
inc(slot); 
8051
f26422ef0333
oftrequested, should make the shoppa guys happy, probably, but, knowing them, I'm sure someone will complain
nemo
parents:
8030
diff
changeset

125 
HHGear^.MsgParam:= slot; 
f26422ef0333
oftrequested, should make the shoppa guys happy, probably, but, knowing them, I'm sure someone will complain
nemo
parents:
8030
diff
changeset

126 
ChangeAmmo(HHGear) 
7754  127 
end 
6581  128 
end 
129 
end; 

130 

131 
procedure HHSetWeapon(HHGear: PGear); 

132 
var t: LongInt; 

133 
weap: TAmmoType; 

134 
Hedgehog: PHedgehog; 

135 
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

136 
prevState, newState: LongWord; 
6581  137 
begin 
138 
s:= false; 

139 

140 
weap:= TAmmoType(HHGear^.MsgParam); 

141 
Hedgehog:= HHGear^.Hedgehog; 

142 

143 
if Hedgehog^.Team^.Clan^.TurnNumber <= Ammoz[weap].SkipTurns then 

144 
exit; // weapon is not activated yet 

145 

146 
HHGear^.MsgParam:= Ammoz[weap].Slot; 

147 

148 
t:= cMaxSlotAmmoIndex; 

149 

150 
HHGear^.Message:= HHGear^.Message and (not gmWeapon); 

151 

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

152 
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

153 
newState:= prevState; 
6581  154 
with Hedgehog^ do 
155 
while (CurAmmoType <> weap) and (t >= 0) do 

156 
begin 

157 
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

158 
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

159 
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

160 
HHGear^.State:= prevState; 
6581  161 
dec(t) 
162 
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

163 
HHGear^.State:= newState; 
6581  164 

165 
if s then 

166 
ApplyAmmoChanges(HHGear^.Hedgehog^) 

167 
end; 

168 

169 
procedure HHSetTimer(Gear: PGear); 

170 
var CurWeapon: PAmmo; 

171 
color: LongWord; 

172 
begin 

173 
Gear^.Message:= Gear^.Message and (not gmTimer); 

6924  174 
CurWeapon:= GetCurAmmoEntry(Gear^.Hedgehog^); 
6581  175 
with Gear^.Hedgehog^ do 
176 
if ((Gear^.Message and gmPrecise) <> 0) and ((CurWeapon^.Propz and ammoprop_SetBounce) <> 0) then 

177 
begin 

178 
color:= Gear^.Hedgehog^.Team^.Clan^.Color; 

179 
case Gear^.MsgParam of 

180 
1: begin 

10116
dd27562b6f21
rolling back my PChar stuff, because unC0Rr improves string handling pas2c instead <3
sheepluva
parents:
10108
diff
changeset

181 
AddCaption(FormatA(trmsg[sidBounce], trmsg[sidBounce1]), color, capgrpAmmostate); 
6581  182 
CurWeapon^.Bounciness:= 350; 
183 
end; 

184 
2: begin 

10116
dd27562b6f21
rolling back my PChar stuff, because unC0Rr improves string handling pas2c instead <3
sheepluva
parents:
10108
diff
changeset

185 
AddCaption(FormatA(trmsg[sidBounce], trmsg[sidBounce2]), color, capgrpAmmostate); 
6581  186 
CurWeapon^.Bounciness:= 700; 
187 
end; 

188 
3: begin 

10116
dd27562b6f21
rolling back my PChar stuff, because unC0Rr improves string handling pas2c instead <3
sheepluva
parents:
10108
diff
changeset

189 
AddCaption(FormatA(trmsg[sidBounce], trmsg[sidBounce3]), color, capgrpAmmostate); 
6581  190 
CurWeapon^.Bounciness:= 1000; 
191 
end; 

192 
4: 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[sidBounce4]), color, capgrpAmmostate); 
6581  194 
CurWeapon^.Bounciness:= 2000; 
195 
end; 

196 
5: begin 

10116
dd27562b6f21
rolling back my PChar stuff, because unC0Rr improves string handling pas2c instead <3
sheepluva
parents:
10108
diff
changeset

197 
AddCaption(FormatA(trmsg[sidBounce], trmsg[sidBounce5]), color, capgrpAmmostate); 
6581  198 
CurWeapon^.Bounciness:= 4000; 
199 
end 

200 
end 

201 
end 

202 
else if (CurWeapon^.Propz and ammoprop_Timerable) <> 0 then 

203 
begin 

204 
CurWeapon^.Timer:= 1000 * Gear^.MsgParam; 

205 
with CurrentTeam^ do 

206 
ApplyAmmoChanges(Hedgehogs[CurrHedgehog]); 

207 
end; 

208 
end; 

209 

210 

211 
procedure Attack(Gear: PGear); 

212 
var xx, yy, newDx, newDy, lx, ly: hwFloat; 

213 
speech: PVisualGear; 

214 
newGear: PGear; 

215 
CurWeapon: PAmmo; 

216 
altUse: boolean; 

217 
elastic: hwFloat; 

218 
begin 

219 
newGear:= nil; 

220 
bShowFinger:= false; 

6924  221 
CurWeapon:= GetCurAmmoEntry(Gear^.Hedgehog^); 
6581  222 
with Gear^, 
223 
Gear^.Hedgehog^ do 

224 
begin 

10818
f642a28cab0c
Add placement of airmines in engine outside of hog proximity. Has a bug, only protecting 1st team. Also fix a spelling error and rename gstHHChooseTarget to gstChooseTarget
nemo
parents:
10789
diff
changeset

225 
if ((State and gstHHDriven) <> 0) and ((State and (gstAttacked or gstChooseTarget)) = 0) and (((State and gstMoving) = 0) 
6581  226 
or (Power > 0) 
227 
or (CurAmmoType = amTeleport) 

8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

228 
or 
6581  229 
// Allow attacks while moving on ammo with AltAttack 
230 
((CurAmmoGear <> nil) and ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) <> 0)) 

231 
or ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_AttackInMove) <> 0)) 

232 
and ((TargetPoint.X <> NoPointX) or ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_NeedTarget) = 0)) then 

233 
begin 

234 
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

235 
if (Power = cMaxPower) or ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_Power) = 0) then 
6581  236 
Message:= Message and (not gmAttack) 
237 
else 

238 
begin 

239 
if Power = 0 then 

240 
begin 

241 
AttackBar:= CurrentTeam^.AttackBar; 

242 
PlaySound(sndThrowPowerUp) 

243 
end; 

244 
inc(Power) 

245 
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

246 
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

247 
exit; 
6581  248 

8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

249 
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

250 
begin 
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

251 
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

252 
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

253 
end; 
6581  254 

8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

255 
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

256 
yy:= AngleCos(Angle); 
6581  257 

8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

258 
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

259 
ly:= Y + int2hwfloat(round(GetLaunchY(CurAmmoType, Angle))); 
6581  260 

8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

261 
if ((Gear^.State and gstHHHJump) <> 0) and (not cArtillery) then 
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

262 
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

263 
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

264 
AddVoice(Ammoz[CurAmmoType].Ammo.AttackVoice, CurrentTeam^.voicepack); 
6581  265 

266 
// 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

267 
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

268 
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

269 
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

270 
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

271 
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

272 
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

273 
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

274 
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

275 
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

276 
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

277 
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

278 
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

279 
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

280 
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

281 
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

282 
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

283 
end 
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

284 
else 
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

285 
begin 
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

286 
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

287 
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

288 
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

289 
end; 
6581  290 

8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

291 
case CurAmmoType of 
6581  292 
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

293 
amAirMine: newGear:= AddGear(hwRound(lx), hwRound(ly), gtAirMine, 0, newDx, newDy, 0); 
6581  294 
amMolotov: newGear:= AddGear(hwRound(lx), hwRound(ly), gtMolotov, 0, newDx, newDy, 0); 
295 
amClusterBomb: newGear:= AddGear(hwRound(lx), hwRound(ly), gtClusterBomb, 0, newDx, newDy, CurWeapon^.Timer); 

296 
amGasBomb: newGear:= AddGear(hwRound(lx), hwRound(ly), gtGasBomb, 0, newDx, newDy, CurWeapon^.Timer); 

297 
amBazooka: newGear:= AddGear(hwRound(lx), hwRound(ly), gtShell, 0, newDx, newDy, 0); 

298 
amSnowball: newGear:= AddGear(hwRound(lx), hwRound(ly), gtSnowball, 0, newDx, newDy, 0); 

299 
amBee: newGear:= AddGear(hwRound(lx), hwRound(ly), gtBee, 0, newDx, newDy, 0); 

300 
amShotgun: begin 

301 
PlaySound(sndShotgunReload); 

302 
newGear:= AddGear(hwRound(lx), hwRound(ly), gtShotgunShot, 0, xx * _0_5, yy * _0_5, 0); 

303 
end; 

304 
amPickHammer: newGear:= AddGear(hwRound(lx), hwRound(ly) + cHHRadius, gtPickHammer, 0, _0, _0, 0); 

305 
amSkip: ParseCommand('/skip', true); 

306 
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

307 
amMine: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtMine, gstWait, SignAs(_0_02, dX), _0, 0); 
6581  308 
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

309 
amKnife: begin 
7754  310 
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

311 
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

312 
newGear^.Radius:= 4 // temporarily shrink so it doesn't instantly embed in the ground 
7754  313 
end; 
6581  314 
amDEagle: newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtDEagleShot, 0, xx * _0_5, yy * _0_5, 0); 
315 
amSineGun: newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtSineGunShot, 0, xx * _0_5, yy * _0_5, 0); 

316 
amPortalGun: begin 

8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

317 
newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtPortal, 0, xx * _0_6, yy * _0_6, 
6581  318 
// set selected color 
319 
CurWeapon^.Pos); 

320 
end; 

321 
amSniperRifle: begin 

322 
PlaySound(sndSniperReload); 

323 
newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtSniperRifleShot, 0, xx * _0_5, yy * _0_5, 0); 

324 
end; 

325 
amDynamite: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtDynamite, 0, SignAs(_0_03, dX), _0, 5000); 

326 
amFirePunch: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 10, hwRound(ly), gtFirePunch, 0, xx, _0, 0); 

327 
amWhip: begin 

328 
newGear:= AddGear(hwRound(lx) + hwSign(dX) * 10, hwRound(ly), gtWhip, 0, SignAs(_1, dX),  _0_8, 0); 

329 
PlaySound(sndWhipCrack) 

330 
end; 

331 
amHammer: begin 

332 
newGear:= AddGear(hwRound(lx) + hwSign(dX) * 10, hwRound(ly), gtHammer, 0, SignAs(_1, dX),  _0_8, 0); 

333 
PlaySound(sndWhack) 

334 
end; 

335 
amBaseballBat: begin 

336 
newGear:= AddGear(hwRound(lx) + hwSign(dX) * 10, hwRound(ly), gtShover, gsttmpFlag, xx * _0_5, yy * _0_5, 0); 

337 
PlaySound(sndBaseballBat) // TODO: Only play if something is hit? 

338 
end; 

339 
amParachute: begin 

340 
newGear:= AddGear(hwRound(lx), hwRound(ly), gtParachute, 0, _0, _0, 0); 

341 
PlaySound(sndParachute) 

342 
end; 

343 
// we save CurWeapon^.Pos (in this case: cursor direction) by using it as (otherwise irrelevant) X value of the new gear. 

344 
amAirAttack: newGear:= AddGear(CurWeapon^.Pos, 0, gtAirAttack, 0, _0, _0, 0); 

345 
amMineStrike: newGear:= AddGear(CurWeapon^.Pos, 0, gtAirAttack, 1, _0, _0, 0); 

346 
amDrillStrike: newGear:= AddGear(CurWeapon^.Pos, 0, gtAirAttack, 3, _0, _0, CurWeapon^.Timer); 

347 
amNapalm: newGear:= AddGear(CurWeapon^.Pos, 0, gtAirAttack, 2, _0, _0, 0); 

348 
amBlowTorch: newGear:= AddGear(hwRound(lx), hwRound(ly), gtBlowTorch, 0, SignAs(_0_5, dX), _0, 0); 

349 
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

350 
amRubber: begin 
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9732
diff
changeset

351 
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

352 
newGear^.AmmoType:= amRubber 
08799c901a42
Add rubber utility. Graphics are still incomplete. Also flag snow/ice in theme config.
nemo
parents:
9732
diff
changeset

353 
end; 
6581  354 
amTeleport: newGear:= AddGear(CurWeapon^.Pos, 0, gtTeleport, 0, _0, _0, 0); 
355 
amSwitch: newGear:= AddGear(hwRound(lx), hwRound(ly), gtSwitcher, 0, _0, _0, 0); 

356 
amMortar: begin 

357 
playSound(sndMortar); 

358 
newGear:= AddGear(hwRound(lx), hwRound(ly), gtMortar, 0, xx*cMaxPower/cPowerDivisor, yy*cMaxPower/cPowerDivisor, 0); 

359 
end; 

360 
amRCPlane: begin 

361 
newGear:= AddGear(hwRound(lx), hwRound(ly), gtRCPlane, 0, xx * cMaxPower / cPowerDivisor / 4, yy * cMaxPower / cPowerDivisor / 4, 0); 

7053  362 
newGear^.SoundChannel:= LoopSound(sndRCPlane) 
6581  363 
end; 
364 
amKamikaze: newGear:= AddGear(hwRound(lx), hwRound(ly), gtKamikaze, 0, xx * _0_5, yy * _0_5, 0); 

7832  365 
amCake: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 3, hwRound(ly), gtCake, 0, SignAs(cLittle, xx), _0, 0); 
6581  366 
amSeduction: newGear:= AddGear(hwRound(lx), hwRound(ly), gtSeduction, 0, _0, _0, 0); 
367 
amWatermelon: newGear:= AddGear(hwRound(lx), hwRound(ly), gtWatermelon, 0, newDx, newDy, CurWeapon^.Timer); 

368 
amHellishBomb: newGear:= AddGear(hwRound(lx), hwRound(ly), gtHellishBomb, 0, newDx, newDy, 0); 

369 
amDrill: newGear:= AddGear(hwRound(lx), hwRound(ly), gtDrill, 0, newDx, newDy, 0); 

370 
amBallgun: newGear:= AddGear(hwRound(X), hwRound(Y), gtBallgun, 0, xx * _0_5, yy * _0_5, 0); 

371 
amJetpack: newGear:= AddGear(hwRound(lx), hwRound(ly), gtJetpack, 0, _0, _0, 0); 

372 
amBirdy: begin 

373 
PlaySound(sndWhistle); 

374 
newGear:= AddGear(hwRound(lx), hwRound(ly)  32, gtBirdy, 0, _0, _0, 0); 

375 
end; 

376 
amLowGravity: begin 

377 
PlaySound(sndLowGravity); 

378 
cGravity:= cMaxWindSpeed; 

379 
cGravityf:= 0.00025 

380 
end; 

8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

381 
amExtraDamage: begin 
6581  382 
PlaySound(sndHellishImpact4); 
383 
cDamageModifier:= _1_5 

384 
end; 

9685
7d925e82e572
Tweak trophyrace to work better w/ skip (probably, needs testing), drop Invulnerable in favour of effects  heInvulnerable is already in effects,
nemo
parents:
9675
diff
changeset

385 
amInvulnerable: Effects[heInvulnerable]:= 1; 
6581  386 
amExtraTime: begin 
387 
PlaySound(sndSwitchHog); 

388 
TurnTimeLeft:= TurnTimeLeft + 30000 

389 
end; 

390 
amLaserSight: cLaserSighting:= true; 

391 
amVampiric: begin 

7053  392 
PlaySoundV(sndOw1, Team^.voicepack); 
6581  393 
cVampiric:= true; 
394 
end; 

395 
amPiano: begin 

396 
// Tuck the hedgehog away until the piano attack is completed 

397 
Unplaced:= true; 

398 
X:= _0; 

399 
Y:= _0; 

8414
c1ac0b64315e
Start piano higher (piano on maps that matched land_height was really weird before). Experiment w/ trying to make birdy shrink into distance to avoid odd birdy vanishes if tracking it.
nemo
parents:
8161
diff
changeset

400 
newGear:= AddGear(TargetPoint.X, 1024, gtPiano, 0, _0, _0, 0); 
6581  401 
PauseMusic 
402 
end; 

403 
amFlamethrower: newGear:= AddGear(hwRound(X), hwRound(Y), gtFlamethrower, 0, xx * _0_5, yy * _0_5, 0); 

404 
amLandGun: newGear:= AddGear(hwRound(X), hwRound(Y), gtLandGun, 0, xx * _0_5, yy * _0_5, 0); 

405 
amResurrector: begin 

406 
newGear:= AddGear(hwRound(lx), hwRound(ly), gtResurrector, 0, _0, _0, 0); 

407 
newGear^.SoundChannel := LoopSound(sndResurrector); 

408 
end; 

8161  409 
//amStructure: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtStructure, gstWait, SignAs(_0_02, dX), _0, 3000); 
9675
295636ec930a
cleanup of timer accidentally exposed prob w/ timebox
nemo
parents:
9672
diff
changeset

410 
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 gtIceGunspecific values from TGear and abuse a couple of commonly abused members instead.
nemo
parents:
8753
diff
changeset

411 
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

412 
end; 
10015  413 
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

414 
((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

415 
begin 
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

416 
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

417 
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

418 
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

419 
if (CurAmmoGear <> nil) and (CurAmmoGear^.AmmoType = amJetpack) and 
10354  420 
(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

421 
newGear^.State:= newGear^.State or gstSubmersible; 
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

422 

8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

423 
case CurAmmoType of 
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

424 
amGrenade, amMolotov, 
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

425 
amClusterBomb, amGasBomb, 
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

426 
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

427 
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

428 
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

429 
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

430 
amAirMine: FollowGear:= newGear; 
6581  431 

8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

432 
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

433 
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

434 
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

435 
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

436 
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

437 
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

438 
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

439 
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

440 
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

441 
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

442 
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

443 
amFlamethrower, amLandGun, 
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

444 
amResurrector, //amStructure, 
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

445 
amTardis, amPiano, 
9776  446 
amIceGun, amRubber: 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

447 
end; 
10789
acbf69e2e5cf
experiment with air mines. thought they could make shoppa... interesting. ToDo: Allow mines to give up, tweak distances, real graphics, toggle for whether they can acquire a new target while they haven't given up.
nemo
parents:
10714
diff
changeset

448 
if CurAmmoType = amCake then FollowGear:= newGear; 
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

449 
if CurAmmoType = amAirMine then newGear^.Hedgehog:= nil; 
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

450 

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

451 
if ((CurAmmoType = amMine) or (CurAmmoType = amSMine) or (CurAmmoType = amAirMine)) and (GameFlags and gfInfAttack <> 0) then 
6581  452 
newGear^.FlightTime:= GameTicks + 1000 
453 
else if CurAmmoType = amDrill then 

454 
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

455 
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

456 
begin 
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

457 
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

458 
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

459 
end; 
8744  460 
if (newGear <> nil) and (newGear^.CollisionMask and lfCurrentHog <> 0) then newGear^.CollisionMask:= newGear^.CollisionMask and (not lfCurrentHog); 
6581  461 

8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

462 
// 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

463 
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

464 
FollowGear:= nil; 
6581  465 

8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

466 
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

467 
begin 
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

468 
elastic:= int2hwfloat(CurWeapon^.Bounciness) / _1000; 
6581  469 

470 
if elastic < _1 then 

471 
newGear^.Elasticity:= newGear^.Elasticity * elastic 

472 
else if elastic > _1 then 

473 
newGear^.Elasticity:= _1  ((_1newGear^.Elasticity) / elastic); 

8330  474 
(* Experimented with friction modifier. Didn't seem helpful 
6581  475 
fric:= int2hwfloat(CurWeapon^.Bounciness) / _250; 
476 
if fric < _1 then newGear^.Friction:= newGear^.Friction * fric 

477 
else if fric > _1 then newGear^.Friction:= _1  ((_1newGear^.Friction) / fric)*) 

478 
end; 

479 

480 

8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

481 
uStats.AmmoUsed(CurAmmoType); 
6581  482 

8492
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

483 
if not (SpeechText = '') then 
6581  484 
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

485 
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

486 
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

487 
begin 
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

488 
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

489 
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

490 
speech^.FrameTicks:= SpeechType; 
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

491 
end; 
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

492 
SpeechText:= '' 
6581  493 
end; 
494 

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 
Power:= 0; 
8833  496 
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

497 
begin 
8833  498 
if CurAmmoType in [amRope,amResurrector] then 
499 
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

500 
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

501 
end 
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

502 
else 
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

503 
begin 
8833  504 
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

505 
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

506 
AfterAttack; 
67d2ad3b3ce9
Allow moving after firing cleaver. This changes multishoot behaviour quite a bit. Needs a lot of testing.
nemo
parents:
8414
diff
changeset

507 
end 
6581  508 
end 
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

509 
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

510 
Message:= Message and (not gmAttack); 
10669
4c78eafe76ac
Issue 755: Lua API: Add ammo type parameter for onHogAttack
sheepluva
parents:
10579
diff
changeset

511 

4c78eafe76ac
Issue 755: Lua API: Add ammo type parameter for onHogAttack
sheepluva
parents:
10579
diff
changeset

512 
ScriptCall('onHogAttack', ord(CurAmmoType)); 
4c78eafe76ac
Issue 755: Lua API: Add ammo type parameter for onHogAttack
sheepluva
parents:
10579
diff
changeset

513 
end; // of with Gear^, Gear^.Hedgehog^ do 
4c78eafe76ac
Issue 755: Lua API: Add ammo type parameter for onHogAttack
sheepluva
parents:
10579
diff
changeset

514 

6581  515 
TargetPoint.X := NoPointX; 
516 
end; 

517 

518 
procedure AfterAttack; 

10124
aabd1b75d5a3
Even more explicit type conversions and other stuff to help pas2c use ansistrings
unc0rr
parents:
10123
diff
changeset

519 
var s: ansistring; 
6581  520 
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

521 
HHGear: PGear; 
6581  522 
begin 
7459
8511a3f899d3
Allow AfterAttack to proceed even if the Hedgehog is dead. They could be resurrected after all.
nemo
parents:
7426
diff
changeset

523 
with CurrentHedgehog^ do 
6581  524 
begin 
7459
8511a3f899d3
Allow AfterAttack to proceed even if the Hedgehog is dead. They could be resurrected after all.
nemo
parents:
7426
diff
changeset

525 
HHGear:= Gear; 
6581  526 
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

527 
if HHGear <> nil then HHGear^.State:= HHGear^.State and (not gstAttacking); 
6581  528 
if (Ammoz[a].Ammo.Propz and ammoprop_Effect) = 0 then 
529 
begin 

530 
Inc(MultiShootAttacks); 

8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

531 

6581  532 
if (Ammoz[a].Ammo.NumPerTurn >= MultiShootAttacks) then 
533 
begin 

10124
aabd1b75d5a3
Even more explicit type conversions and other stuff to help pas2c use ansistrings
unc0rr
parents:
10123
diff
changeset

534 
s:= ansistring(inttostr(Ammoz[a].Ammo.NumPerTurn  MultiShootAttacks + 1)); 
aabd1b75d5a3
Even more explicit type conversions and other stuff to help pas2c use ansistrings
unc0rr
parents:
10123
diff
changeset

535 
AddCaption(formatA(trmsg[sidRemaining], s), cWhiteColor, capgrpAmmostate); 
6581  536 
end; 
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

537 

6581  538 
if (Ammoz[a].Ammo.NumPerTurn >= MultiShootAttacks) 
539 
or ((GameFlags and gfMultiWeapon) <> 0) then 

540 
begin 

541 
isInMultiShoot:= true 

542 
end 

543 
else 

544 
begin 

545 
OnUsedAmmo(CurrentHedgehog^); 

546 
if ((Ammoz[a].Ammo.Propz and ammoprop_NoRoundEnd) = 0) and (((GameFlags and gfInfAttack) = 0) or PlacingHogs) then 

547 
begin 

548 
if TagTurnTimeLeft = 0 then 

549 
TagTurnTimeLeft:= TurnTimeLeft; 

10354  550 
if (CurAmmoGear <> nil) and (CurAmmoGear^.State and gstSubmersible <> 0) and CheckCoordInWater(hwRound(CurAmmoGear^.X), hwRound(CurAmmoGear^.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

551 
TurnTimeLeft:=(Ammoz[a].TimeAfterTurn * cGetAwayTime) div 25 
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

552 
else TurnTimeLeft:=(Ammoz[a].TimeAfterTurn * cGetAwayTime) div 100; 
6581  553 
end; 
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

554 
if ((Ammoz[a].Ammo.Propz and ammoprop_NoRoundEnd) = 0) and (HHGear <> nil) then 
7462  555 
HHGear^.State:= HHGear^.State or gstAttacked; 
6581  556 
if (Ammoz[a].Ammo.Propz and ammoprop_NoRoundEnd) <> 0 then 
557 
ApplyAmmoChanges(CurrentHedgehog^) 

558 
end; 

559 
end 

560 
else 

561 
begin 

562 
OnUsedAmmo(CurrentHedgehog^); 

563 
ApplyAmmoChanges(CurrentHedgehog^); 

564 
end; 

565 
AttackBar:= 0 

566 
end 

567 
end; 

568 

569 
//////////////////////////////////////////////////////////////////////////////// 

570 
procedure doStepHedgehogDead(Gear: PGear); 

571 
const frametime = 200; 

572 
timertime = frametime * 6; 

573 
begin 

574 
if Gear^.Hedgehog^.Unplaced then 

575 
exit; 

576 
if Gear^.Timer > 1 then 

577 
begin 

578 
AllInactive:= false; 

579 
dec(Gear^.Timer); 

580 
if (Gear^.Timer mod frametime) = 0 then 

581 
inc(Gear^.Pos) 

8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

582 
end 
6581  583 
else if Gear^.Timer = 1 then 
584 
begin 

9064  585 
Gear^.Hedgehog^.Effects[heFrozen]:= 0; 
6581  586 
Gear^.State:= Gear^.State or gstNoDamage; 
587 
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, CurrentHedgehog, EXPLAutoSound); 

588 
AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtGrave, 0, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog; 

589 
DeleteGear(Gear); 

590 
SetAllToActive 

8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

591 
end 
6581  592 
else // Gear^.Timer = 0 
593 
begin 

594 
AllInactive:= false; 

595 
Gear^.Z:= cCurrHHZ; 

596 
RemoveGearFromList(Gear); 

597 
InsertGearToList(Gear); 

7053  598 
PlaySoundV(sndByeBye, Gear^.Hedgehog^.Team^.voicepack); 
6581  599 
Gear^.Pos:= 0; 
600 
Gear^.Timer:= timertime 

601 
end 

602 
end; 

603 

604 
//////////////////////////////////////////////////////////////////////////////// 

605 
procedure doStepHedgehogGone(Gear: PGear); 

606 
const frametime = 65; 

607 
timertime = frametime * 11; 

10178
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset

608 
var i: LongInt; 
6581  609 
begin 
610 
if Gear^.Hedgehog^.Unplaced then 

611 
exit; 

612 
if Gear^.Timer > 1 then 

613 
begin 

614 
AllInactive:= false; 

615 
dec(Gear^.Timer); 

616 
if (Gear^.Timer mod frametime) = 0 then 

617 
inc(Gear^.Pos) 

618 
end 

619 
else 

620 
if Gear^.Timer = 1 then 

621 
begin 

622 
DeleteGear(Gear); 

623 
SetAllToActive 

624 
end 

625 
else // Gear^.Timer = 0 

626 
begin 

627 
AllInactive:= false; 

628 
Gear^.Z:= cCurrHHZ; 

629 
RemoveGearFromList(Gear); 

630 
InsertGearToList(Gear); 

10178
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset

631 
// 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

632 
with Gear^.Hedgehog^.Team^ do 
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset

633 
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

634 
begin 
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset

635 
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

636 
begin 
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset

637 
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

638 
begin 
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset

639 
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

640 
PlaySound(sndWarp); 
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset

641 
end; 
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset

642 
break; 
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset

643 
end; 
949b51ca18c6
don't stack bye/teleport sounds of hogs (when a team is gone)
sheepluva
parents:
10147
diff
changeset

644 
end; 
6581  645 
Gear^.Pos:= 0; 
646 
Gear^.Timer:= timertime 

647 
end 

648 
end; 

649 

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

650 
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

651 
var s: 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

652 
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

653 
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

654 
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

655 
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

656 

8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

657 
if (not (HH.Team^.ExtDriven 
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

658 
or (HH.BotLevel > 0))) 
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

659 
or (HH.Team^.Clan^.ClanIndex = LocalClan) 
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

660 
or (GameType = gmtDemo) then 
15c3fb4882df
Sorry about the slight delay in pickup. You can blame a few lame cheaters. This is to make their cheating a bit harder.
nemo
parents:
7375
diff
changeset

661 
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

662 
if cnt <> 0 then 
10123  663 
s:= trammo[Ammoz[ammo].NameId] + ansistring(' (+' + IntToStr(cnt) + ')') 
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

664 
else 
10123  665 
s:= trammo[Ammoz[ammo].NameId] + ansistring(' (+' + IntToStr(Ammoz[ammo].NumberInCase) + ')'); 
10116
dd27562b6f21
rolling back my PChar stuff, because unC0Rr improves string handling pas2c instead <3
sheepluva
parents:
10108
diff
changeset

666 
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

667 

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

668 
// show ammo icon 
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

669 
vga:= AddVisualGear(X, Y, vgtAmmo); 
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

670 
if vga <> nil then 
15c3fb4882df
Sorry about the slight delay in pickup. You can blame a few lame cheaters. This is to make their cheating a bit harder.
nemo
parents:
7375
diff
changeset

671 
vga^.Frame:= Longword(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

672 
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

673 
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

674 

6581  675 
//////////////////////////////////////////////////////////////////////////////// 
676 
procedure PickUp(HH, Gear: PGear); 

677 
var s: shortstring; 

7406
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset

678 
i: LongInt; 
6581  679 
vga: PVisualGear; 
7406
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset

680 
ag, gi: PGear; 
6581  681 
begin 
682 
Gear^.Message:= gmDestroy; 

683 
if (Gear^.Pos and posCaseExplode) <> 0 then 

684 
if (Gear^.Pos and posCasePoison) <> 0 then 

685 
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 25, HH^.Hedgehog, EXPLAutoSound + EXPLPoisoned) 

686 
else 

687 
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 25, HH^.Hedgehog, EXPLAutoSound) 

688 
else if (Gear^.Pos and posCasePoison) <> 0 then 

689 
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 25, HH^.Hedgehog, EXPLAutoSound + EXPLPoisoned + EXPLNoDamage) 

690 
else 

691 
case Gear^.Pos of 

692 
posCaseUtility, 

693 
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

694 
PlaySound(sndShotgunReload); 
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

695 
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

696 
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

697 
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

698 
end 
6581  699 
else 
700 
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

701 
// Add spawning here... 
7409  702 
AddRandomness(GameTicks); 
8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

703 

7406
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset

704 
gi := GearsList; 
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset

705 
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

706 
begin 
8030
165aeaaaf445
Call fallers less often. Should hopefully still be about as effective at the intended purpose. Should help loads quite a bit.
nemo
parents:
8003
diff
changeset

707 
if (gi^.Kind = gtGenericFaller) and (gi^.State and gstInvisible <> 0) then 
7406
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset

708 
begin 
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset

709 
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

710 
gi^.State:= gi^.State or gstTmpFlag; 
7406
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset

711 
gi^.X:= int2hwFloat(GetRandom(rightXleftX)+leftX); 
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset

712 
gi^.Y:= int2hwFloat(GetRandom(LAND_HEIGHTtopY)+topY); 
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset

713 
gi^.dX:= _90(GetRandomf*_360); 
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset

714 
gi^.dY:= _90(GetRandomf*_360) 
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset

715 
end; 
1fe2c821f9bf
Try avoiding spamming the log by retaining the gears. untested.
nemo
parents:
7391
diff
changeset

716 
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

717 
end; 
7598  718 
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

719 
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

720 
ag^.Power:= Gear^.Power 
6581  721 
end; 
722 
end; 

723 
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

724 
PlaySound(sndShotgunReload); 
6581  725 
inc(HH^.Health, 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

726 
HH^.Hedgehog^.Effects[hePoisoned] := 0; 
6581  727 
str(Gear^.Health, s); 
728 
s:= '+' + s; 

10124
aabd1b75d5a3
Even more explicit type conversions and other stuff to help pas2c use ansistrings
unc0rr
parents:
10123
diff
changeset

729 
AddCaption(ansistring(s), HH^.Hedgehog^.Team^.Clan^.Color, capgrpAmmoinfo); 
6581  730 
RenderHealth(HH^.Hedgehog^); 
731 
RecountTeamHealth(HH^.Hedgehog^.Team); 

732 

733 
i:= 0; 

734 
while i < Gear^.Health do 

735 
begin 

736 
vga:= AddVisualGear(hwRound(HH^.X), hwRound(HH^.Y), vgtStraightShot); 

737 
if vga <> nil then 

738 
with vga^ do 

739 
begin 

740 
Tint:= $00FF00FF; 

741 
State:= ord(sprHealth) 

742 
end; 

743 
inc(i, 5); 

744 
end; 

745 
end; 

746 
end 

747 
end; 

748 

749 
procedure HedgehogStep(Gear: PGear); 

750 
var PrevdX: LongInt; 

751 
CurWeapon: PAmmo; 

10435
4c8fc3aa9432
allow hogs to repeatedly enter portals placed on the ground
nemo
parents:
10354
diff
changeset

752 
portals: PGearArrayS; 
6581  753 
begin 
6924  754 
CurWeapon:= GetCurAmmoEntry(Gear^.Hedgehog^); 
6581  755 
if ((Gear^.State and (gstAttacking or gstMoving)) = 0) then 
756 
begin 

757 
if isCursorVisible then 

758 
with Gear^.Hedgehog^ do 

759 
with CurWeapon^ do 

760 
begin 

761 
if (Gear^.Message and gmLeft ) <> 0 then 

762 
Pos:= (Pos  1 + Ammoz[AmmoType].PosCount) mod Ammoz[AmmoType].PosCount 

763 
else 

764 
if (Gear^.Message and gmRight ) <> 0 then 

765 
Pos:= (Pos + 1) mod Ammoz[AmmoType].PosCount 

766 
else 

767 
exit; 

7028  768 
GHStepTicks:= 200; 
6581  769 
exit 
770 
end; 

771 

772 
if ((Gear^.Message and gmAnimate) <> 0) then 

773 
begin 

774 
Gear^.Message:= 0; 

775 
Gear^.State:= Gear^.State or gstAnimation; 

776 
Gear^.Tag:= Gear^.MsgParam; 

777 
Gear^.Timer:= 0; 

778 
Gear^.Pos:= 0 

779 
end; 

780 

781 
if ((Gear^.Message and gmLJump ) <> 0) then 

782 
begin 

783 
Gear^.Message:= Gear^.Message and (not gmLJump); 

784 
DeleteCI(Gear); 

785 
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

786 
if TestCollisionXwithXYShift(Gear, _0, 2, hwSign(Gear^.dX)) = 0 then 
6581  787 
Gear^.Y:= Gear^.Y  _2 
788 
else 

9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset

789 
if TestCollisionXwithXYShift(Gear, _0, 1, hwSign(Gear^.dX)) = 0 then 
6581  790 
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

791 
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

792 
(TestCollisionYwithGear(Gear, 1) = 0) then 
6581  793 
begin 
794 
Gear^.dY:= _0_15; 

795 
if not cArtillery then 

796 
Gear^.dX:= SignAs(_0_15, Gear^.dX); 

797 
Gear^.State:= Gear^.State or gstMoving or gstHHJumping; 

7053  798 
PlaySoundV(sndJump1, Gear^.Hedgehog^.Team^.voicepack); 
6581  799 
exit 
800 
end; 

801 
end; 

802 

803 
if ((Gear^.Message and gmHJump ) <> 0) then 

804 
begin 

805 
DeleteCI(Gear); 

806 
Gear^.Message:= Gear^.Message and (not gmHJump); 

807 

808 
Gear^.dY:= _0_2; 

809 
SetLittle(Gear^.dX); 

810 
Gear^.State:= Gear^.State or gstMoving or gstHHJumping; 

7053  811 
PlaySoundV(sndJump3, Gear^.Hedgehog^.Team^.voicepack); 
6581  812 
exit 
813 
end; 

814 

10435
4c8fc3aa9432
allow hogs to repeatedly enter portals placed on the ground
nemo
parents:
10354
diff
changeset

815 
if (Gear^.Message and (gmLeft or gmRight) <> 0) and (Gear^.State and gstMoving = 0) then 
4c8fc3aa9432
allow hogs to repeatedly enter portals placed on the ground
nemo
parents:
10354
diff
changeset

816 
begin 
4c8fc3aa9432
allow hogs to repeatedly enter portals placed on the ground
nemo
parents:
10354
diff
changeset

817 
// slightly inefficient since it doesn't halt after one portal, maybe could add a param to GearsNear for number desired. 
4c8fc3aa9432
allow hogs to repeatedly enter portals placed on the ground
nemo
parents:
10354
diff
changeset

818 
portals:= GearsNear(Gear^.X, Gear^.Y, gtPortal, 26); 
4c8fc3aa9432
allow hogs to repeatedly enter portals placed on the ground
nemo
parents:
10354
diff
changeset

819 
if portals.size = 0 then Gear^.PortalCounter:= 0 
4c8fc3aa9432
allow hogs to repeatedly enter portals placed on the ground
nemo
parents:
10354
diff
changeset

820 
end; 
6581  821 
PrevdX:= hwSign(Gear^.dX); 
822 
if (Gear^.Message and gmLeft )<>0 then 

823 
Gear^.dX:= cLittle else 

824 
if (Gear^.Message and gmRight )<>0 then 

8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

825 
Gear^.dX:= cLittle 
7187
aff30d80bd7b
 Allow camera movement while current hedgehog is falling
unc0rr
parents:
7164
diff
changeset

826 
else exit; 
6581  827 

7187
aff30d80bd7b
 Allow camera movement while current hedgehog is falling
unc0rr
parents:
7164
diff
changeset

828 
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

829 

7028  830 
GHStepTicks:= cHHStepTicks; 
6581  831 
if PrevdX <> hwSign(Gear^.dX) then 
832 
begin 

833 
FollowGear:= Gear; 

834 
exit 

835 
end; 

836 
DeleteCI(Gear); // must be after exit!! (see previous line) 

837 

838 
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

839 

10714  840 
if (not cArtillery or 
841 
((CurAmmoGear <> nil) and (CurAmmoGear^.Kind = gtBlowTorch))) and 

842 
((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

843 
MakeHedgehogsStep(Gear); 
6581  844 

8576
286ebfcb3d97
workaround for frequent AllHH active call in hedgehog step
nemo
parents:
8574
diff
changeset

845 
SetAllHHToActive(false); 
9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9285
diff
changeset

846 
AddCI(Gear) 
6581  847 
end 
848 
end; 

849 

850 
procedure HedgehogChAngle(HHGear: PGear); 

851 
var da: LongWord; 

852 
begin 

853 
with HHGear^.Hedgehog^ do 

10015  854 
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

855 
((HHGear^.State and (gstMoving or gstHHJumping)) = gstMoving)) 
6581  856 
or ((CurAmmoType = amPortalGun) and ((HHGear^.State and gstMoving) <> 0)) then 
857 
da:= 2 

858 
else da:= 1; 

859 

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

860 
if ((HHGear^.Message and gmPrecise = 0) or ((CurAmmoGear <> nil) and (CurAmmoGear^.AmmoType = amJetpack))) or (GameTicks mod 5 = 1) then 
6581  861 
if ((HHGear^.Message and gmUp) <> 0) and (HHGear^.Angle >= CurMinAngle + da) then 
862 
dec(HHGear^.Angle, da) 

863 
else 

864 
if ((HHGear^.Message and gmDown) <> 0) and (HHGear^.Angle + da <= CurMaxAngle) then 

865 
inc(HHGear^.Angle, da) 

866 
end; 

867 

868 

869 
//////////////////////////////////////////////////////////////////////////////// 

870 
procedure doStepHedgehogMoving(Gear: PGear); 

871 
var isFalling, isUnderwater: boolean; 

872 
land: Word; 

873 
begin 

10577
5e075da5e0a4
don't drown unplaced hedgehogs. thanks to zimmux and Wohlstand for reporting
sheepluva
parents:
10443
diff
changeset

874 
if Gear^.Hedgehog^.Unplaced then 
5e075da5e0a4
don't drown unplaced hedgehogs. thanks to zimmux and Wohlstand for reporting
sheepluva
parents:
10443
diff
changeset

875 
begin 
5e075da5e0a4
don't drown unplaced hedgehogs. thanks to zimmux and Wohlstand for reporting
sheepluva
parents:
10443
diff
changeset

876 
Gear^.dY:= _0; 
5e075da5e0a4
don't drown unplaced hedgehogs. thanks to zimmux and Wohlstand for reporting
sheepluva
parents:
10443
diff
changeset

877 
Gear^.dX:= _0; 
5e075da5e0a4
don't drown unplaced hedgehogs. thanks to zimmux and Wohlstand for reporting
sheepluva
parents:
10443
diff
changeset

878 
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

879 
exit 
5e075da5e0a4
don't drown unplaced hedgehogs. thanks to zimmux and Wohlstand for reporting
sheepluva
parents:
10443
diff
changeset

880 
end; 
5e075da5e0a4
don't drown unplaced hedgehogs. thanks to zimmux and Wohlstand for reporting
sheepluva
parents:
10443
diff
changeset

881 

6581  882 
land:= 0; 
10354  883 
isUnderwater:= CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y) + Gear^.Radius); 
6581  884 
if Gear^.dX.QWordValue > 8160437862 then 
885 
Gear^.dX.QWordValue:= 8160437862; 

886 
if Gear^.dY.QWordValue > 8160437862 then 

887 
Gear^.dY.QWordValue:= 8160437862; 

888 

9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset

889 
isFalling:= (Gear^.dY.isNegative) or (TestCollisionYKick(Gear, 1) = 0); 
6581  890 
if isFalling then 
891 
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

892 
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

893 
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

894 
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

895 
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

896 
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

897 
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

898 
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

899 
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

900 
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

901 
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

902 
Gear^.dY:= _0; 
9954  903 
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

904 
end; 
6581  905 
Gear^.State:= Gear^.State or gstMoving; 
9971  906 
if (Gear^.State and gstHHDriven <> 0) and 
9499  907 
(not CurrentTeam^.ExtDriven) and (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) > _0_003) then 
6581  908 
begin 
7187
aff30d80bd7b
 Allow camera movement while current hedgehog is falling
unc0rr
parents:
7164
diff
changeset

909 
// TODO: why so aggressive at setting FollowGear when falling? 
9499  910 
// because hog was being yanked out of frame by other stuff when doing a complicated jump/chute/saucer/roping. 
911 
// added a couple more conditions to make it a bit less aggressive, at cost of possibly spectator failing to follow a maneuver 

6581  912 
FollowGear:= Gear; 
913 
end; 

914 
if isUnderwater then 

915 
Gear^.dY:= Gear^.dY + cGravity / _2 

916 
else 

917 
begin 

918 
Gear^.dY:= Gear^.dY + cGravity; 

919 
// this set of circumstances could be less complex if jumping was more clearly identified 

920 
if ((GameFlags and gfMoreWind) <> 0) and (((Gear^.Damage <> 0) 

921 
or ((CurAmmoGear <> nil) and ((CurAmmoGear^.AmmoType = amJetpack) or (CurAmmoGear^.AmmoType = amBirdy))) 

922 
or ((Gear^.dY.QWordValue + Gear^.dX.QWordValue) > _0_55.QWordValue))) then 

923 
Gear^.dX := Gear^.dX + cWindSpeed / Gear^.Density 

924 
end 

8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

925 
end 
6581  926 
else 
927 
begin 

928 
land:= TestCollisionYwithGear(Gear, 1); 

10015  929 
if ((Gear^.dX.QWordValue + Gear^.dY.QWordValue) < _0_55.QWordValue) and ((land and lfIce) = 0) 
930 
and ((land and lfBouncy = 0) or (Gear^.State and gstCollision <> 0)) 

6581  931 
and ((Gear^.State and gstHHJumping) <> 0) then 
932 
SetLittle(Gear^.dX); 

933 

934 
if not Gear^.dY.isNegative then 

935 
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

936 
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

937 
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

938 
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

939 
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

940 
// 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

941 
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

942 
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

943 

6581  944 
CheckHHDamage(Gear); 
945 

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

946 
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

947 
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

948 
if ((Gear^.State and gstHHHJump) <> 0) and (not cArtillery) 
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

949 
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

950 
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

951 
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

952 
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

953 
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

954 
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

955 
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

956 
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

957 
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

958 
end; 
9954  959 
Gear^.State:= Gear^.State and (not gstCollision) 
6581  960 
end 
961 
else 

962 
Gear^.dY:= Gear^.dY + cGravity; 

963 

964 
if ((Gear^.State and gstMoving) <> 0) then 

965 
begin 

966 
if land and lfIce <> 0 then 

967 
begin 

968 
Gear^.dX:= Gear^.dX * (_1  (_1  Gear^.Friction) / _2) 

969 
end 

970 
else 

971 
Gear^.dX:= Gear^.dX * Gear^.Friction; 

972 
end 

973 
end; 

974 

10146
1fb6d8cc4626
Should never use State like this, since some states aren't synced (thinking state for example)
unc0rr
parents:
10124
diff
changeset

975 
if (Gear^.State and (gstMoving or gstHHJumping or gstHHHJump)) <> 0 then 
6581  976 
DeleteCI(Gear); 
977 

978 
if isUnderwater then 

979 
begin 

980 
Gear^.dY:= Gear^.dY * _0_999; 

981 
Gear^.dX:= Gear^.dX * _0_999; 

982 
end; 

983 

984 
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

985 
if TestCollisionXKick(Gear, hwSign(Gear^.dX)) <> 0 then 
6581  986 
if not isFalling then 
987 
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

988 
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

989 
(TestCollisionYwithXYShift(Gear, hwSign(Gear^.dX)  hwRound(Gear^.dX), 1, 1) = 0) then 
6581  990 
begin 
991 
Gear^.X:= Gear^.X + Gear^.dX; 

992 
Gear^.dX:= Gear^.dX * _0_96; 

993 
Gear^.Y:= Gear^.Y  _1 

994 
end 

995 
else 

9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset

996 
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

997 
(TestCollisionYwithXYShift(Gear, hwSign(Gear^.dX)  hwRound(Gear^.dX), 1, 1) = 0) then 
6581  998 
begin 
999 
Gear^.X:= Gear^.X + Gear^.dX; 

1000 
Gear^.dX:= Gear^.dX * _0_93; 

1001 
Gear^.Y:= Gear^.Y  _2 

8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

1002 
end 
6581  1003 
else 
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset

1004 
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

1005 
(TestCollisionYwithXYShift(Gear, hwSign(Gear^.dX)  hwRound(Gear^.dX), 1, 1) = 0) then 
6581  1006 
begin 
1007 
Gear^.X:= Gear^.X + Gear^.dX; 

1008 
Gear^.dX:= Gear^.dX * _0_9 ; 

1009 
Gear^.Y:= Gear^.Y  _3 

1010 
end 

1011 
else 

9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset

1012 
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

1013 
(TestCollisionYwithXYShift(Gear, hwSign(Gear^.dX)  hwRound(Gear^.dX), 1, 1) = 0) then 
6581  1014 
begin 
1015 
Gear^.X:= Gear^.X + Gear^.dX; 

1016 
Gear^.dX:= Gear^.dX * _0_87; 

1017 
Gear^.Y:= Gear^.Y  _4 

1018 
end 

1019 
else 

9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset

1020 
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

1021 
(TestCollisionYwithXYShift(Gear, hwSign(Gear^.dX)  hwRound(Gear^.dX), 1, 1) = 0) then 
6581  1022 
begin 
1023 
Gear^.X:= Gear^.X + Gear^.dX; 

1024 
Gear^.dX:= Gear^.dX * _0_84; 

1025 
Gear^.Y:= Gear^.Y  _5 

1026 
end 

1027 
else 

1028 
if hwAbs(Gear^.dX) > _0_02 then 

1029 
Gear^.dX:= Gear^.Elasticity * Gear^.dX 

1030 
else 

1031 
begin 

1032 
Gear^.State:= Gear^.State and (not gstMoving); 

1033 
while TestCollisionYWithGear(Gear,1) = 0 do 

1034 
Gear^.Y:= Gear^.Y+_1; 

1035 
SetLittle(Gear^.dX) 

1036 
end 

1037 
else 

1038 
begin 

1039 
Gear^.State:= Gear^.State and (not gstMoving); 

1040 
while TestCollisionYWithGear(Gear,1) = 0 do 

1041 
Gear^.Y:= Gear^.Y+_1; 

1042 
SetLittle(Gear^.dX) 

1043 
end 

1044 
else if (hwAbs(Gear^.dX) > cLittle) 

1045 
and ((Gear^.State and gstHHJumping) = 0) then 

1046 
Gear^.dX:= Gear^.Elasticity * Gear^.dX 

1047 
else 

1048 
SetLittle(Gear^.dX); 

1049 

1050 
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

1051 
and (hwAbs(Gear^.dX) + hwAbs(Gear^.dY) < _0_03) then 
6581  1052 
begin 
1053 
Gear^.State:= Gear^.State and (not gstWinner); 

1054 
Gear^.State:= Gear^.State and (not gstMoving); 

9914  1055 
while (not CheckGearDrowning(Gear)) and (Gear <> nil) and (TestCollisionYWithGear(Gear,1) = 0) do 
8947
e906ebd59612
CheckGearDrowning could delete hedgehogs gear! (CheckGearDrowning > ResurrectHedgehog > FindPlace). Fixes bug 620.
unc0rr
parents:
8818
diff
changeset

1056 
Gear^.Y:= Gear^.Y + _1; 
e906ebd59612
CheckGearDrowning could delete hedgehogs gear! (CheckGearDrowning > ResurrectHedgehog > FindPlace). Fixes bug 620.
unc0rr
parents:
8818
diff
changeset

1057 

e906ebd59612
CheckGearDrowning could delete hedgehogs gear! (CheckGearDrowning > ResurrectHedgehog > FindPlace). Fixes bug 620.
unc0rr
parents:
8818
diff
changeset

1058 
// 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

1059 
if Gear = nil then exit; 
6581  1060 
SetLittle(Gear^.dX); 
1061 
Gear^.dY:= _0 

1062 
end 

1063 
else 

1064 
Gear^.State:= Gear^.State or gstMoving; 

1065 

1066 
if (Gear^.State and gstMoving) <> 0 then 

1067 
begin 

1068 
Gear^.State:= Gear^.State and (not gstAnimation); 

1069 
// ARTILLERY but not being moved by explosions 

1070 
Gear^.X:= Gear^.X + Gear^.dX; 

1071 
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

1072 
if (not Gear^.dY.isNegative) and (TestCollisionYKick(Gear, 1) = 0) then 
6581  1073 
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

1074 
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

1075 
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

1076 
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

1077 
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

1078 

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

1079 
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

1080 
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

1081 
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

1082 
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

1083 
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

1084 
end; 
9954  1085 
Gear^.State:= Gear^.State and (not gstCollision) 
6581  1086 
end; 
8947
e906ebd59612
CheckGearDrowning could delete hedgehogs gear! (CheckGearDrowning > ResurrectHedgehog > FindPlace). Fixes bug 620.
unc0rr
parents:
8818
diff
changeset

1087 

e906ebd59612
CheckGearDrowning could delete hedgehogs gear! (CheckGearDrowning > ResurrectHedgehog > FindPlace). Fixes bug 620.
unc0rr
parents:
8818
diff
changeset

1088 
// 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

1089 
if Gear = nil then exit; 
6581  1090 
// hide target cursor if current hog is drowning 
1091 
if (Gear^.State and gstDrowning) <> 0 then 

1092 
if (CurrentHedgehog^.Gear = Gear) then 

1093 
isCursorVisible:= false 

1094 
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

1095 
if (not isZero(Gear^.dY)) and (Gear^.FlightTime > 0) and ((GameFlags and gfLowGravity) = 0) then 
6581  1096 
begin 
1097 
inc(Gear^.FlightTime); 

8003  1098 
if (Gear^.FlightTime > 1500) and ((hwRound(Gear^.X) < LongInt(leftX)250) or (hwRound(Gear^.X) > LongInt(rightX)+250)) then 
6581  1099 
begin 
7763  1100 
Gear^.FlightTime:= 0; 
6581  1101 
AddCaption(GetEventString(eidHomerun), cWhiteColor, capgrpMessage); 
1102 
PlaySound(sndHomerun) 

1103 
end; 

1104 
end 

1105 
else 

1106 
begin 

1107 
uStats.hedgehogFlight(Gear, Gear^.FlightTime); 

1108 
Gear^.FlightTime:= 0; 

1109 
end; 

1110 

1111 
end; 

1112 

1113 
procedure doStepHedgehogDriven(HHGear: PGear); 

1114 
var t: PGear; 

1115 
wasJumping: boolean; 

1116 
Hedgehog: PHedgehog; 

1117 
begin 

1118 
Hedgehog:= HHGear^.Hedgehog; 

8658  1119 
if not isInMultiShoot then 
1120 
AllInactive:= false 

1121 
else if Hedgehog^.CurAmmoType in [amShotgun, amDEagle, amSniperRifle] then 

1122 
HHGear^.Message:= 0; 

6581  1123 

8330  1124 
if ((Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_Utility) <> 0) and isInMultiShoot then 
6581  1125 
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

1126 
else if not isInMultiShoot then 
6581  1127 
AllInactive:= false; 
1128 

1129 
if (TurnTimeLeft = 0) or (HHGear^.Damage > 0) then 

1130 
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

1131 
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

1132 
LoadHedgehogHat(Hedgehog^, Hedgehog^.Hat); 
6581  1133 
if TagTurnTimeLeft = 0 then 
1134 
TagTurnTimeLeft:= TurnTimeLeft; 

1135 
TurnTimeLeft:= 0; 

1136 
isCursorVisible:= false; 

1137 
HHGear^.State:= HHGear^.State and (not (gstHHDriven or gstAnimation or gstAttacking)); 

1138 
AttackBar:= 0; 

1139 
if HHGear^.Damage > 0 then 

1140 
HHGear^.State:= HHGear^.State and (not (gstHHJumping or gstHHHJump)); 

1141 
exit 

1142 
end; 

1143 

9670
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset

1144 
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

1145 
begin 
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset

1146 
AFKSkip; 
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset

1147 
exit 
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset

1148 
end; 
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9664
diff
changeset

1149 

6581  1150 
if (HHGear^.State and gstAnimation) <> 0 then 
1151 
begin 

1152 
HHGear^.Message:= 0; 

1153 
if (HHGear^.Pos = Wavez[TWave(HHGear^.Tag)].VoiceDelay) and (HHGear^.Timer = 0) then 

7053  1154 
PlaySoundV(Wavez[TWave(HHGear^.Tag)].Voice, Hedgehog^.Team^.voicepack); 
6581  1155 
inc(HHGear^.Timer); 
1156 
if HHGear^.Timer = Wavez[TWave(HHGear^.Tag)].Interval then 

1157 
begin 

1158 
HHGear^.Timer:= 0; 

1159 
inc(HHGear^.Pos); 

1160 
if HHGear^.Pos = Wavez[TWave(HHGear^.Tag)].FramesCount then 

1161 
HHGear^.State:= HHGear^.State and (not gstAnimation) 

1162 
end; 

1163 
exit 

1164 
end; 

1165 

1166 
if ((HHGear^.State and gstMoving) <> 0) 

7028  1167 
or (GHStepTicks = cHHStepTicks) 
6581  1168 
or (CurAmmoGear <> nil) then // we are moving 
1169 
begin 

1170 
with Hedgehog^ do 

1171 
if (CurAmmoGear = nil) 

1172 
and (HHGear^.dY > _0_39) 

1173 
and (CurAmmoType = amParachute) then 

1174 
HHGear^.Message:= HHGear^.Message or gmAttack; 

1175 
// check for case with ammo 

1176 
t:= CheckGearNear(HHGear, gtCase, 36, 36); 

9041
aefe46d64dd9
Make frozen crates uncollectable, add some tinting to frozen items. Suggestions needed for what should happen to explosives
nemo
parents:
8992
diff
changeset

1177 
if (t <> nil) and (t^.State and gstFrozen = 0) then 
6581  1178 
PickUp(HHGear, t) 
1179 
end; 

1180 

1181 
if (CurAmmoGear = nil) then 

1182 
if (((HHGear^.Message and gmAttack) <> 0) 

1183 
or ((HHGear^.State and gstAttacking) <> 0)) then 

1184 
Attack(HHGear) // should be before others to avoid desync with '/put' msg and changing weapon msgs 

1185 
else 

8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

1186 
else 
6581  1187 
with Hedgehog^ do 
1188 
if ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) <> 0) 

1189 
and ((HHGear^.Message and gmLJump) <> 0) 

1190 
and ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_AltUse) <> 0) then 

1191 
begin 

1192 
Attack(HHGear); 

1193 
HHGear^.Message:= HHGear^.Message and (not gmLJump) 

1194 
end; 

1195 

1196 
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

1197 
or ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) <> 0) then 
6581  1198 
begin 
1199 
if ((HHGear^.Message and gmSlot) <> 0) then 

1200 
if ChangeAmmo(HHGear) then ApplyAmmoChanges(Hedgehog^); 

1201 

1202 
if ((HHGear^.Message and gmWeapon) <> 0) then 

1203 
HHSetWeapon(HHGear); 

1204 

1205 
if ((HHGear^.Message and gmTimer) <> 0) then 

1206 
HHSetTimer(HHGear); 

1207 
end; 

1208 

1209 
if CurAmmoGear <> nil then 

1210 
begin 

1211 
CurAmmoGear^.Message:= HHGear^.Message; 

1212 
exit 

1213 
end; 

1214 

1215 
HedgehogChAngle(HHGear); 

1216 

1217 
if (HHGear^.State and gstMoving) <> 0 then 

1218 
begin 

1219 
wasJumping:= ((HHGear^.State and gstHHJumping) <> 0); 

1220 

1221 
if ((HHGear^.Message and gmHJump) <> 0) and wasJumping and ((HHGear^.State and gstHHHJump) = 0) then 

1222 
if (not (hwAbs(HHGear^.dX) > cLittle)) and (HHGear^.dY < _0_02) then 

1223 
begin 

1224 
HHGear^.State:= HHGear^.State or gstHHHJump; 

1225 
HHGear^.dY:= _0_25; 

1226 
if not cArtillery then 

1227 
HHGear^.dX:= SignAs(_0_02, HHGear^.dX); 

7053  1228 
PlaySoundV(sndJump2, Hedgehog^.Team^.voicepack) 
6581  1229 
end; 
1230 

1231 
HHGear^.Message:= HHGear^.Message and (not (gmLJump or gmHJump)); 

1232 

9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9685
diff
changeset

1233 
if (not cArtillery) and wasJumping and (TestCollisionXwithGear(HHGear, hwSign(HHGear^.dX)) <> 0) then 
6581  1234 
SetLittle(HHGear^.dX); 
1235 

1236 
if Hedgehog^.Gear <> nil then 

1237 
doStepHedgehogMoving(HHGear); 

1238 

1239 
if ((HHGear^.State and (gstMoving or gstDrowning)) = 0) then 

1240 
begin 

9291
15f7bb217b66
Make add/delete consistent (this has bugged me for so long)
nemo
parents:
9285
diff
changeset

1241 
AddCI(HHGear); 
6581  1242 
if wasJumping then 
7028  1243 
GHStepTicks:= 410 
6581  1244 
else 
7028  1245 
GHStepTicks:= 95 
6581  1246 
end; 
1247 
exit 

1248 
end; 

1249 

8562
d9d1cb650ff8
Restore freezing hedgehog for shotgun, sniper rifle and deagle to make unc0rr happy. You'll still be able to get away after throwing cleaver and sticky bomb tho.
nemo
parents:
8553
diff
changeset

1250 
if not(isInMultiShoot and (Hedgehog^.CurAmmoType in [amShotgun, amDEagle, amSniperRifle])) and (Hedgehog^.Gear <> nil) then 
6581  1251 
begin 
7028  1252 
if GHStepTicks > 0 then 
1253 
dec(GHStepTicks); 

1254 
if (GHStepTicks = 0) then 

6581  1255 
HedgehogStep(HHGear) 
1256 
end 

1257 
end; 

1258 

1259 
//////////////////////////////////////////////////////////////////////////////// 

1260 
procedure doStepHedgehogFree(Gear: PGear); 

1261 
var prevState: Longword; 

10124
aabd1b75d5a3
Even more explicit type conversions and other stuff to help pas2c use ansistrings
unc0rr
parents:
10123
diff
changeset

1262 
s: ansistring; 
6581  1263 
begin 
1264 
prevState:= Gear^.State; 

1265 

1266 
doStepHedgehogMoving(Gear); 

1267 

1268 
if (Gear^.State and (gstMoving or gstDrowning)) <> 0 then 

1269 
begin 

1270 
if Gear^.Damage > 0 then 

1271 
CalcRotationDirAngle(Gear); 

1272 
AllInactive:= false; 

1273 
exit 

1274 
end; 

1275 

1276 
if (Gear^.Health = 0) then 

1277 
begin 

1278 
if PrvInactive or ((GameFlags and gfInfAttack) <> 0) then 

1279 
begin 

1280 
Gear^.Timer:= 0; 

1281 
FollowGear:= Gear; 

1282 
PrvInactive:= false; 

1283 
AllInactive:= false; 

1284 

1285 
if (Gear^.State and gstHHGone) = 0 then 

1286 
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

1287 
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

1288 
if Gear^.Hedgehog^.Effects[heResurrectable] <> 0 then 
6581  1289 
begin 
1290 
ResurrectHedgehog(Gear); 

1291 
end 

8795
b5b79a8f9354
merge correction, also what's with all those trailing whitespaces?
koda
parents:
8774
diff
changeset

1292 
else 
6581  1293 
begin 
1294 
Gear^.State:= (Gear^.State or gstHHDeath) and (not gstAnimation); 

1295 
Gear^.doStep:= @doStepHedgehogDead; 

1296 
// Death message 

10124
aabd1b75d5a3
Even more explicit type conversions and other stuff to help pas2c use ansistrings
unc0rr
parents:
10123
diff
changeset

1297 
s:= ansistring(Gear^.Hedgehog^.Name); 
aabd1b75d5a3
Even more explicit type conversions and other stuff to help pas2c use ansistrings
unc0rr
parents:
10123
diff
changeset

1298 
AddCaption(FormatA(GetEventString(eidDied), s), cWhiteColor, capgrpMessage); 
6581  1299 
end; 
1300 
end 

1301 
else 

1302 
begin 

1303 
Gear^.State:= Gear^.State and (not gstAnimation); 

1304 
Gear^.doStep:= @doStepHedgehogGone; 

1305 

1306 
// Gone message 

10124
aabd1b75d5a3
Even more explicit type conversions and other stuff to help pas2c use ansistrings
unc0rr
parents:
10123
diff
changeset

1307 
s:= ansistring(Gear^.Hedgehog^.Name); 
aabd1b75d5a3
Even more explicit type conversions and other stuff to help pas2c use ansistrings
unc0rr
parents:
10123
diff
changeset

1308 
AddCaption(FormatA(GetEventString(eidGone), s), cWhiteColor, capgrpMessage); 
6581  1309 
end 
1310 
end; 

1311 
exit 

1312 
end; 

1313 

1314 
if ((Gear^.State and gstWait) = 0) and 

1315 
(prevState <> Gear^.State) then 

1316 
begin 

1317 
Gear^.State:= Gear^.State or gstWait; 

1318 
Gear^.Timer:= 150 

1319 
end 

1320 
else 

1321 
begin 

1322 
if Gear^.Timer = 0 then 

1323 
begin 

10818
f642a28cab0c
Add placement of airmines in engine outside of hog proximity. Has a bug, only protecting 1st team. Also fix a spelling error and rename gstHHChooseTarget to gstChooseTarget
nemo
parents:
10789
diff
changeset

1324 
Gear^.State:= Gear^.State and (not (gstWait or gstLoser or gstWinner or gstAttacked or gstNotKickable or gstChooseTarget)); 
8563
4d9d8287e601
Trying to improve rendering, sliding and thawing. Messing around w/ making fire thaw faster.
nemo
parents:
8560
diff
changeset

1325 
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

1326 
AddCI(Gear); 
6581  1327 
exit 
1328 
end 

1329 
else dec(Gear^.Timer) 

1330 
end; 

1331 

1332 
AllInactive:= false 
