author  koda 
Thu, 14 Jan 2010 16:46:50 +0000  
changeset 2695  ed789a7ef68d 
parent 2659  947fa21d5cd8 
child 2699  249adefa9c1c 
permissions  rwrr 
4  1 
(* 
1066  2 
* Hedgewars, a free turn based strategy game 
1689  3 
* Copyright (c) 20042009 Andrey Korotaev <unC0Rr@gmail.com> 
4  4 
* 
183  5 
* This program is free software; you can redistribute it and/or modify 
6 
* it under the terms of the GNU General Public License as published by 

7 
* the Free Software Foundation; version 2 of the License 

4  8 
* 
183  9 
* This program is distributed in the hope that it will be useful, 
10 
* but WITHOUT ANY WARRANTY; without even the implied warranty of 

11 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

12 
* GNU General Public License for more details. 

4  13 
* 
183  14 
* You should have received a copy of the GNU General Public License 
15 
* along with this program; if not, write to the Free Software 

16 
* Foundation, Inc., 59 Temple Place  Suite 330, Boston, MA 021111307, USA 

4  17 
*) 
18 

2622  19 
{$INCLUDE "options.inc"} 
20 

4  21 
unit uGears; 
22 
interface 

351  23 
uses SDLh, uConsts, uFloat; 
4  24 
const AllInactive: boolean = false; 
868  25 
PrvInactive: boolean = false; 
4  26 

27 
type PGear = ^TGear; 

1259  28 
TGearStepProcedure = procedure (Gear: PGear); 
29 
TGear = record 

30 
NextGear, PrevGear: PGear; 

31 
Active: Boolean; 

1849  32 
Invulnerable: Boolean; 
2204
526f8165acce
Smaxx' idea of timers, reworked just a tad. Might need variable for offset, but seems ok for now
nemo
parents:
2186
diff
changeset

33 
RenderTimer: Boolean; 
1259  34 
Ammo : PAmmo; 
35 
State : Longword; 

36 
X : hwFloat; 

37 
Y : hwFloat; 

38 
dX: hwFloat; 

39 
dY: hwFloat; 

40 
Kind: TGearType; 

41 
Pos: Longword; 

42 
doStep: TGearStepProcedure; 

43 
Radius: LongInt; 

44 
Angle, Power : Longword; 

45 
DirAngle: real; 

46 
Timer : LongWord; 

47 
Elasticity: hwFloat; 

48 
Friction : hwFloat; 

49 
Message, MsgParam : Longword; 

50 
Hedgehog: pointer; 

2135
0b7972dfad01
Push karma application to end of round  should avoid problems w/ plane and kamikaze
nemo
parents:
2134
diff
changeset

51 
Health, Damage, Karma: LongInt; 
1259  52 
CollisionIndex: LongInt; 
53 
Tag: LongInt; 

54 
Tex: PTexture; 

55 
Z: Longword; 

56 
IntersectGear: PGear; 

57 
TriggerId: Longword; 

2428  58 
FlightTime: Longword; 
2042
905c554d62e6
Move Speech to visual gears. This checkin CRASHES on deletion of visual gear outside the doStep
nemo
parents:
2031
diff
changeset

59 
uid: Longword 
1259  60 
end; 
4  61 

371  62 
function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer: LongWord): PGear; 
4  63 
procedure ProcessGears; 
1849  64 
procedure ResetUtilities; 
2017  65 
procedure ApplyDamage(Gear: PGear; Damage: Longword); 
4  66 
procedure SetAllToActive; 
67 
procedure SetAllHHToActive; 

956  68 
procedure DrawGears; 
4  69 
procedure FreeGearsList; 
10  70 
procedure AddMiscGears; 
4  71 
procedure AssignHHCoords; 
294  72 
procedure InsertGearToList(Gear: PGear); 
73 
procedure RemoveGearFromList(Gear: PGear); 

4  74 

75 
var CurAmmoGear: PGear = nil; 

68  76 
GearsList: PGear = nil; 
307  77 
KilledHHs: Longword = 0; 
2017  78 
SuddenDeathDmg: Boolean = false; 
79 
SpeechType: Longword = 1; 

80 
SpeechText: shortstring; 

2428  81 
TrainingTargetGear: PGear = nil; 
2621
956ff066f3a5
Fix desync when playing with AI via network, occuring in certain conditions
unc0rr
parents:
2619
diff
changeset

82 
skipFlag: boolean = false; 
70  83 

4  84 
implementation 
81  85 
uses uWorld, uMisc, uStore, uConsole, uSound, uTeams, uRandom, uCollisions, 
2376  86 
uLand, uIO, uLandGraphics, uAIMisc, uLocale, uAI, uAmmos, uTriggers, 
2152  87 
{$IFDEF GLES11} 
1906  88 
gles11, 
89 
{$ELSE} 

90 
GL, 

91 
{$ENDIF} 

1259  92 
uStats, uVisualGears; 
789  93 

1207
ceaab010269e
Some adjusting... it still doesn't solve problem fully
unc0rr
parents:
1200
diff
changeset

94 
const MAXROPEPOINTS = 384; 
68  95 
var RopePoints: record 
4  96 
Count: Longword; 
776
8fc7e59d9cb4
Convert the rest of rotated sprites to be rotated by OpenGL
unc0rr
parents:
775
diff
changeset

97 
HookAngle: GLfloat; 
789  98 
ar: array[0..MAXROPEPOINTS] of record 
351  99 
X, Y: hwFloat; 
100 
dLen: hwFloat; 

4  101 
b: boolean; 
102 
end; 

2391  103 
rounded: array[0..MAXROPEPOINTS + 2] of TVertex2f; 
2362  104 
end; 
4  105 

1515  106 
procedure DeleteGear(Gear: PGear); forward; 
371  107 
procedure doMakeExplosion(X, Y, Radius: LongInt; Mask: LongWord); forward; 
108 
procedure AmmoShove(Ammo: PGear; Damage, Power: LongInt); forward; 

1433  109 
//procedure AmmoFlameWork(Ammo: PGear); forward; 
371  110 
function CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear; forward; 
15  111 
procedure SpawnBoxOfSmth; forward; 
32
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
24
diff
changeset

112 
procedure AfterAttack; forward; 
1515  113 
procedure FindPlace(var Gear: PGear; withFall: boolean; Left, Right: LongInt); forward; 
302  114 
procedure HedgehogStep(Gear: PGear); forward; 
1528  115 
procedure doStepHedgehogMoving(Gear: PGear); forward; 
303
1659c4aad5ab
Now blow torch angle can be changed during blowing :)
unc0rr
parents:
302
diff
changeset

116 
procedure HedgehogChAngle(Gear: PGear); forward; 
506  117 
procedure ShotgunShot(Gear: PGear); forward; 
1689  118 
procedure PickUp(HH, Gear: PGear); forward; 
1964  119 
procedure HHSetWeapon(Gear: PGear); forward; 
120 

4  121 

2599  122 
{$INCLUDE "GSHandlers.inc"} 
123 
{$INCLUDE "HHHandlers.inc"} 

4  124 

125 
const doStepHandlers: array[TGearType] of TGearStepProcedure = ( 

1259  126 
@doStepBomb, 
127 
@doStepHedgehog, 

128 
@doStepGrenade, 

129 
@doStepHealthTag, 

130 
@doStepGrave, 

131 
@doStepUFO, 

132 
@doStepShotgunShot, 

133 
@doStepPickHammer, 

134 
@doStepRope, 

135 
@doStepSmokeTrace, 

136 
@doStepExplosion, 

137 
@doStepMine, 

138 
@doStepCase, 

139 
@doStepDEagleShot, 

140 
@doStepDynamite, 

141 
@doStepBomb, 

142 
@doStepCluster, 

143 
@doStepShover, 

144 
@doStepFlame, 

145 
@doStepFirePunch, 

146 
@doStepActionTimer, 

147 
@doStepActionTimer, 

148 
@doStepActionTimer, 

149 
@doStepParachute, 

150 
@doStepAirAttack, 

151 
@doStepAirBomb, 

152 
@doStepBlowTorch, 

153 
@doStepGirder, 

154 
@doStepTeleport, 

155 
@doStepSwitcher, 

2460  156 
@doStepTarget, 
1259  157 
@doStepMortar, 
158 
@doStepWhip, 

159 
@doStepKamikaze, 

160 
@doStepCake, 

1261  161 
@doStepSeduction, 
1279  162 
@doStepWatermelon, 
1263  163 
@doStepCluster, 
164 
@doStepBomb, 

1298  165 
@doStepSmokeTrace, 
1573  166 
@doStepWaterUp, 
1601  167 
@doStepDrill, 
168 
@doStepBallgun, 

1689  169 
@doStepBomb, 
2017  170 
@doStepRCPlane, 
2177
c045698e044f
Initial attempt at jetpack. Pluses, more like lunar lander (takes fall damage). Minuses, can't seem to cancel it or use alt weapon
nemo
parents:
2168
diff
changeset

171 
@doStepSniperRifleShot, 
2457
ecf0c7e7995b
Initial molotov cocktail. Still needs graphics, tweaking of fire behaviour. Also changed probabilities for default weapon sets
nemo
parents:
2455
diff
changeset

172 
@doStepJetpack, 
ecf0c7e7995b
Initial molotov cocktail. Still needs graphics, tweaking of fire behaviour. Also changed probabilities for default weapon sets
nemo
parents:
2455
diff
changeset

173 
@doStepMolotov 
1259  174 
); 
4  175 

294  176 
procedure InsertGearToList(Gear: PGear); 
803  177 
var tmp, ptmp: PGear; 
294  178 
begin 
179 
if GearsList = nil then 

1505  180 
GearsList:= Gear 
181 
else begin 

182 
tmp:= GearsList; 

183 
ptmp:= GearsList; 

184 
while (tmp <> nil) and (tmp^.Z <= Gear^.Z) do 

185 
begin 

186 
ptmp:= tmp; 

187 
tmp:= tmp^.NextGear 

188 
end; 

294  189 

1505  190 
if ptmp <> nil then 
191 
begin 

192 
Gear^.NextGear:= ptmp^.NextGear; 

193 
Gear^.PrevGear:= ptmp; 

194 
if ptmp^.NextGear <> nil then ptmp^.NextGear^.PrevGear:= Gear; 

195 
ptmp^.NextGear:= Gear 

196 
end 

197 
else GearsList:= Gear 

198 
end 

294  199 
end; 
200 

201 
procedure RemoveGearFromList(Gear: PGear); 

202 
begin 

351  203 
if Gear^.NextGear <> nil then Gear^.NextGear^.PrevGear:= Gear^.PrevGear; 
1505  204 
if Gear^.PrevGear <> nil then 
205 
Gear^.PrevGear^.NextGear:= Gear^.NextGear 

206 
else 

207 
GearsList:= Gear^.NextGear 

294  208 
end; 
209 

371  210 
function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer: LongWord): PGear; 
79  211 
const Counter: Longword = 0; 
2695  212 
var gear: PGear; 
4  213 
begin 
79  214 
inc(Counter); 
1495  215 
{$IFDEF DEBUGFILE} 
1503  216 
AddFileLog('AddGear: #' + inttostr(Counter) + ' (' + inttostr(x) + ',' + inttostr(y) + '), d(' + floattostr(dX) + ',' + floattostr(dY) + ') type = ' + inttostr(ord(Kind))); 
1495  217 
{$ENDIF} 
218 

2695  219 
New(gear); 
220 
FillChar(gear^, sizeof(TGear), 0); 

221 
gear^.X:= int2hwFloat(X); 

222 
gear^.Y:= int2hwFloat(Y); 

223 
gear^.Kind := Kind; 

224 
gear^.State:= State; 

225 
gear^.Active:= true; 

226 
gear^.dX:= dX; 

227 
gear^.dY:= dY; 

228 
gear^.doStep:= doStepHandlers[Kind]; 

229 
gear^.CollisionIndex:= 1; 

230 
gear^.Timer:= Timer; 

231 
gear^.Z:= cUsualZ; 

232 
gear^.FlightTime:= 0; 

233 
gear^.uid:= Counter; 

505
fcba7d7aea0d
Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents:
503
diff
changeset

234 

4  235 
if CurrentTeam <> nil then 
1505  236 
begin 
2695  237 
gear^.Hedgehog:= CurrentHedgehog; 
238 
gear^.IntersectGear:= CurrentHedgehog^.Gear 

1505  239 
end; 
802
ed5450a89b96
Start implementing 'visual gears'  gears, that don't need to be synchronized (clouds and flakes)
unc0rr
parents:
789
diff
changeset

240 

4  241 
case Kind of 
915  242 
gtAmmo_Bomb, 
243 
gtClusterBomb: begin 

2695  244 
gear^.Radius:= 4; 
245 
gear^.Elasticity:= _0_6; 

246 
gear^.Friction:= _0_96; 

247 
gear^.RenderTimer:= true; 

248 
if gear^.Timer = 0 then gear^.Timer:= 3000 

4  249 
end; 
1261  250 
gtWatermelon: begin 
2695  251 
gear^.Radius:= 4; 
252 
gear^.Elasticity:= _0_8; 

253 
gear^.Friction:= _0_995; 

254 
gear^.RenderTimer:= true; 

255 
if gear^.Timer = 0 then gear^.Timer:= 3000 

1261  256 
end; 
4  257 
gtHedgehog: begin 
2695  258 
gear^.Radius:= cHHRadius; 
259 
gear^.Elasticity:= _0_35; 

260 
gear^.Friction:= _0_999; 

261 
gear^.Angle:= cMaxAngle div 2; 

262 
gear^.Z:= cHHZ; 

4  263 
end; 
2488  264 
gtAmmo_Grenade: begin // bazooka 
2695  265 
gear^.Radius:= 4; 
4  266 
end; 
267 
gtHealthTag: begin 

2695  268 
gear^.Timer:= 1500; 
269 
gear^.Z:= 2002; 

2017  270 
end; 
4  271 
gtGrave: begin 
2695  272 
gear^.Radius:= 10; 
273 
gear^.Elasticity:= _0_6; 

4  274 
end; 
275 
gtUFO: begin 

2695  276 
gear^.Radius:= 5; 
277 
gear^.Timer:= 500; 

278 
gear^.RenderTimer:= true; 

279 
gear^.Elasticity:= _0_9 

4  280 
end; 
281 
gtShotgunShot: begin 

2695  282 
gear^.Timer:= 900; 
283 
gear^.Radius:= 2 

4  284 
end; 
285 
gtPickHammer: begin 

2695  286 
gear^.Radius:= 10; 
287 
gear^.Timer:= 4000 

4  288 
end; 
1263  289 
gtSmokeTrace, 
290 
gtEvilTrace: begin 

2695  291 
gear^.X:= gear^.X  _16; 
292 
gear^.Y:= gear^.Y  _16; 

293 
gear^.State:= 8; 

294 
gear^.Z:= cSmokeZ 

4  295 
end; 
296 
gtRope: begin 

2695  297 
gear^.Radius:= 3; 
298 
gear^.Friction:= _450; 

4  299 
RopePoints.Count:= 0; 
300 
end; 

9  301 
gtExplosion: begin 
2695  302 
gear^.X:= gear^.X; 
303 
gear^.Y:= gear^.Y; 

9  304 
end; 
10  305 
gtMine: begin 
2695  306 
gear^.State:= gear^.State or gstMoving; 
307 
gear^.Radius:= 2; 

308 
gear^.Elasticity:= _0_55; 

309 
gear^.Friction:= _0_995; 

2031
b6f3e56fb100
david_ac's game scheme options for mine delay/quantity, tweaks to sniper rifle
nemo
parents:
2028
diff
changeset

310 
if cMinesTime < 0 then 
2695  311 
gear^.Timer:= getrandom(4)*1000 
2031
b6f3e56fb100
david_ac's game scheme options for mine delay/quantity, tweaks to sniper rifle
nemo
parents:
2028
diff
changeset

312 
else 
2695  313 
gear^.Timer:= cMinesTime*1; 
10  314 
end; 
14
81f125629b25
 Mine checks whether a hedgehog is near less frequently
unc0rr
parents:
10
diff
changeset

315 
gtCase: begin 
2695  316 
gear^.Radius:= 16; 
317 
gear^.Elasticity:= _0_3 

14
81f125629b25
 Mine checks whether a hedgehog is near less frequently
unc0rr
parents:
10
diff
changeset

318 
end; 
37  319 
gtDEagleShot: begin 
2695  320 
gear^.Radius:= 1; 
321 
gear^.Health:= 50 

37  322 
end; 
2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

323 
gtSniperRifleShot: begin 
2695  324 
gear^.Radius:= 1; 
325 
gear^.Health:= 50 

2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

326 
end; 
39  327 
gtDynamite: begin 
2695  328 
gear^.Radius:= 3; 
329 
gear^.Elasticity:= _0_55; 

330 
gear^.Friction:= _0_03; 

331 
gear^.Timer:= 5000; 

39  332 
end; 
2204
526f8165acce
Smaxx' idea of timers, reworked just a tad. Might need variable for offset, but seems ok for now
nemo
parents:
2186
diff
changeset

333 
gtCluster: begin 
2695  334 
gear^.Radius:= 2; 
335 
gear^.RenderTimer:= true 

2204
526f8165acce
Smaxx' idea of timers, reworked just a tad. Might need variable for offset, but seems ok for now
nemo
parents:
2186
diff
changeset

336 
end; 
2695  337 
gtShover: gear^.Radius:= 20; 
79  338 
gtFlame: begin 
2695  339 
gear^.Tag:= GetRandom(32); 
340 
gear^.Radius:= 1; 

341 
gear^.Health:= 5; 

342 
if (gear^.dY.QWordValue = 0) and (gear^.dX.QWordValue = 0) then 

1555  343 
begin 
2695  344 
gear^.dY:= (getrandom  _0_8) * _0_03; 
345 
gear^.dX:= (getrandom  _0_5) * _0_4 

1555  346 
end 
79  347 
end; 
82  348 
gtFirePunch: begin 
2695  349 
gear^.Radius:= 15; 
350 
gear^.Tag:= Y 

82  351 
end; 
302  352 
gtAirBomb: begin 
2695  353 
gear^.Radius:= 5; 
302  354 
end; 
355 
gtBlowTorch: begin 

2695  356 
gear^.Radius:= cHHRadius + cBlowTorchC; 
357 
gear^.Timer:= 7500 

302  358 
end; 
540  359 
gtSwitcher: begin 
2695  360 
gear^.Z:= cCurrHHZ 
540  361 
end; 
593  362 
gtTarget: begin 
2695  363 
gear^.Radius:= 10; 
364 
gear^.Elasticity:= _0_3; 

365 
gear^.Timer:= 0 

593  366 
end; 
924  367 
gtMortar: begin 
2695  368 
gear^.Radius:= 4; 
369 
gear^.Elasticity:= _0_2; 

370 
gear^.Friction:= _0_08 

924  371 
end; 
2695  372 
gtWhip: gear^.Radius:= 20; 
984  373 
gtKamikaze: begin 
2695  374 
gear^.Health:= 2048; 
375 
gear^.Radius:= 20 

984  376 
end; 
1089  377 
gtCake: begin 
2695  378 
gear^.Health:= 2048; 
379 
gear^.Radius:= 7; 

380 
gear^.Z:= cOnHHZ; 

381 
gear^.RenderTimer:= true; 

382 
if not dX.isNegative then gear^.Angle:= 1 else gear^.Angle:= 3 

1089  383 
end; 
1263  384 
gtHellishBomb: begin 
2695  385 
gear^.Radius:= 4; 
386 
gear^.Elasticity:= _0_5; 

387 
gear^.Friction:= _0_96; 

388 
gear^.RenderTimer:= true; 

389 
gear^.Timer:= 5000 

1263  390 
end; 
1573  391 
gtDrill: begin 
2695  392 
gear^.Timer:= 5000; 
393 
gear^.Radius:= 4 

1573  394 
end; 
1601  395 
gtBall: begin 
2695  396 
gear^.Radius:= 5; 
397 
gear^.Tag:= random(8); 

398 
gear^.Timer:= 5000; 

399 
gear^.Elasticity:= _0_7; 

400 
gear^.Friction:= _0_995; 

1601  401 
end; 
402 
gtBallgun: begin 

2695  403 
gear^.Timer:= 5001; 
1601  404 
end; 
1689  405 
gtRCPlane: begin 
2695  406 
gear^.Timer:= 15000; 
407 
gear^.Health:= 3; 

408 
gear^.Radius:= 8 

1689  409 
end; 
2177
c045698e044f
Initial attempt at jetpack. Pluses, more like lunar lander (takes fall damage). Minuses, can't seem to cancel it or use alt weapon
nemo
parents:
2168
diff
changeset

410 
gtJetpack: begin 
2695  411 
gear^.Health:= 2000; 
2177
c045698e044f
Initial attempt at jetpack. Pluses, more like lunar lander (takes fall damage). Minuses, can't seem to cancel it or use alt weapon
nemo
parents:
2168
diff
changeset

412 
end; 
2488  413 
gtMolotov: begin 
2695  414 
gear^.Radius:= 8; 
2488  415 
end; 
4  416 
end; 
2695  417 
InsertGearToList(gear); 
418 
AddGear:= gear; 

4  419 
end; 
420 

1515  421 
procedure DeleteGear(Gear: PGear); 
48  422 
var team: PTeam; 
1515  423 
t: Longword; 
4  424 
begin 
503  425 
DeleteCI(Gear); 
762  426 

427 
if Gear^.Tex <> nil then 

1495  428 
begin 
429 
FreeTexture(Gear^.Tex); 

430 
Gear^.Tex:= nil 

431 
end; 

762  432 

351  433 
if Gear^.Kind = gtHedgehog then 
2079  434 
if (CurAmmoGear <> nil) and (CurrentHedgehog^.Gear = Gear) then 
1495  435 
begin 
436 
Gear^.Message:= gm_Destroy; 

437 
CurAmmoGear^.Message:= gm_Destroy; 

438 
exit 

439 
end 

440 
else 

441 
begin 

2076
aa3263e57b8f
increase # of mines to 50, limit max depth of drowning damage tag
nemo
parents:
2074
diff
changeset

442 
if (hwRound(Gear^.Y) >= cWaterLine) then 
1495  443 
begin 
444 
t:= max(Gear^.Damage, Gear^.Health); 

445 
Gear^.Damage:= t; 

2076
aa3263e57b8f
increase # of mines to 50, limit max depth of drowning damage tag
nemo
parents:
2074
diff
changeset

446 
AddGear(hwRound(Gear^.X), min(hwRound(Gear^.Y),cWaterLine+cVisibleWater+32), gtHealthTag, t, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog; 
1495  447 
uStats.HedgehogDamaged(Gear) 
448 
end; 

2376  449 

1495  450 
team:= PHedgehog(Gear^.Hedgehog)^.Team; 
451 
if CurrentHedgehog^.Gear = Gear then 

452 
FreeActionsList; // to avoid ThinkThread on drawned gear 

2376  453 

1495  454 
PHedgehog(Gear^.Hedgehog)^.Gear:= nil; 
455 
inc(KilledHHs); 

1515  456 
RecountTeamHealth(team) 
1495  457 
end; 
458 
{$IFDEF DEBUGFILE} 

1503  459 
with Gear^ do AddFileLog('Delete: #' + inttostr(uid) + ' (' + inttostr(hwRound(x)) + ',' + inttostr(hwRound(y)) + '), d(' + floattostr(dX) + ',' + floattostr(dY) + ') type = ' + inttostr(ord(Kind))); 
1495  460 
{$ENDIF} 
461 

595
5ee863f2f568
Triggers PoC: targets are spawned right after the previous damaged
unc0rr
parents:
593
diff
changeset

462 
if Gear^.TriggerId <> 0 then TickTrigger(Gear^.TriggerId); 
82  463 
if CurAmmoGear = Gear then CurAmmoGear:= nil; 
4  464 
if FollowGear = Gear then FollowGear:= nil; 
294  465 
RemoveGearFromList(Gear); 
1515  466 
Dispose(Gear) 
4  467 
end; 
468 

469 
function CheckNoDamage: boolean; // returns TRUE in case of no damaged hhs 

470 
var Gear: PGear; 

1849  471 
dmg: LongInt; 
4  472 
begin 
351  473 
CheckNoDamage:= true; 
4  474 
Gear:= GearsList; 
475 
while Gear <> nil do 

867  476 
begin 
477 
if Gear^.Kind = gtHedgehog then 

1861  478 
begin 
2135
0b7972dfad01
Push karma application to end of round  should avoid problems w/ plane and kamikaze
nemo
parents:
2134
diff
changeset

479 
if (not isInMultiShoot) then inc(Gear^.Damage, Gear^.Karma); 
1849  480 
if (Gear^.Damage <> 0) and 
481 
(not Gear^.Invulnerable) then 

1861  482 
begin 
483 
CheckNoDamage:= false; 

484 
uStats.HedgehogDamaged(Gear); 

485 
dmg:= Gear^.Damage; 

486 
if Gear^.Health < dmg then 

487 
Gear^.Health:= 0 

488 
else 

489 
dec(Gear^.Health, dmg); 

351  490 

2017  491 
if (PHedgehog(Gear^.Hedgehog)^.Team = CurrentTeam) and 
2135
0b7972dfad01
Push karma application to end of round  should avoid problems w/ plane and kamikaze
nemo
parents:
2134
diff
changeset

492 
(Gear^.Damage <> Gear^.Karma) and 
2017  493 
not SuddenDeathDmg then 
494 
Gear^.State:= Gear^.State or gstLoser; 

495 

1861  496 
AddGear(hwRound(Gear^.X), hwRound(Gear^.Y)  cHHRadius  12, 
497 
gtHealthTag, dmg, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog; 

867  498 

1861  499 
RenderHealth(PHedgehog(Gear^.Hedgehog)^); 
500 
RecountTeamHealth(PHedgehog(Gear^.Hedgehog)^.Team); 

1505  501 

1861  502 
end; 
2135
0b7972dfad01
Push karma application to end of round  should avoid problems w/ plane and kamikaze
nemo
parents:
2134
diff
changeset

503 
if (not isInMultiShoot) then Gear^.Karma:= 0; 
0b7972dfad01
Push karma application to end of round  should avoid problems w/ plane and kamikaze
nemo
parents:
2134
diff
changeset

504 
Gear^.Damage:= 0 
1861  505 
end; 
867  506 
Gear:= Gear^.NextGear 
507 
end; 

2017  508 
SuddenDeathDmg:= false; 
4  509 
end; 
510 

1054  511 
procedure HealthMachine; 
512 
var Gear: PGear; 

513 
begin 

514 
Gear:= GearsList; 

515 

516 
while Gear <> nil do 

517 
begin 

518 
if Gear^.Kind = gtHedgehog then 

519 
Gear^.Damage:= min(cHealthDecrease, Gear^.Health  1); 

520 

521 
Gear:= Gear^.NextGear 

522 
end; 

523 
end; 

524 

4  525 
procedure ProcessGears; 
614  526 
const delay: LongWord = 0; 
1797  527 
step: (stDelay, stChDmg, stSweep, stTurnReact, 
1495  528 
stAfterDelay, stChWin, stWater, stChWin2, stHealth, 
529 
stSpawn, stNTurn) = stDelay; 

1054  530 

4  531 
var Gear, t: PGear; 
532 
begin 

868  533 
PrvInactive:= AllInactive; 
4  534 
AllInactive:= true; 
1495  535 

4  536 
t:= GearsList; 
1054  537 
while t <> nil do 
1352
405ad07cf875
Add more support for handling disconnects while playing (not fully tested)
unc0rr
parents:
1346
diff
changeset

538 
begin 
405ad07cf875
Add more support for handling disconnects while playing (not fully tested)
unc0rr
parents:
1346
diff
changeset

539 
Gear:= t; 
405ad07cf875
Add more support for handling disconnects while playing (not fully tested)
unc0rr
parents:
1346
diff
changeset

540 
t:= Gear^.NextGear; 
2376  541 
if Gear^.Active then 
2204
526f8165acce
Smaxx' idea of timers, reworked just a tad. Might need variable for offset, but seems ok for now
nemo
parents:
2186
diff
changeset

542 
begin 
526f8165acce
Smaxx' idea of timers, reworked just a tad. Might need variable for offset, but seems ok for now
nemo
parents:
2186
diff
changeset

543 
if Gear^.RenderTimer and (Gear^.Timer > 500) and ((Gear^.Timer mod 1000) = 0) then 
526f8165acce
Smaxx' idea of timers, reworked just a tad. Might need variable for offset, but seems ok for now
nemo
parents:
2186
diff
changeset

544 
begin 
2376  545 
if Gear^.Tex <> nil then FreeTexture(Gear^.Tex); 
2619  546 
Gear^.Tex:= RenderStringTex(inttostr(Gear^.Timer div 1000), cWhiteColor, fntSmall); 
2204
526f8165acce
Smaxx' idea of timers, reworked just a tad. Might need variable for offset, but seems ok for now
nemo
parents:
2186
diff
changeset

547 
end; 
526f8165acce
Smaxx' idea of timers, reworked just a tad. Might need variable for offset, but seems ok for now
nemo
parents:
2186
diff
changeset

548 
Gear^.doStep(Gear); 
526f8165acce
Smaxx' idea of timers, reworked just a tad. Might need variable for offset, but seems ok for now
nemo
parents:
2186
diff
changeset

549 
end 
1352
405ad07cf875
Add more support for handling disconnects while playing (not fully tested)
unc0rr
parents:
1346
diff
changeset

550 
end; 
89  551 

4  552 
if AllInactive then 
1343  553 
case step of 
554 
stDelay: begin 

555 
if delay = 0 then 

556 
delay:= cInactDelay 

557 
else 

558 
dec(delay); 

614  559 

1343  560 
if delay = 0 then 
561 
inc(step) 

562 
end; 

1797  563 
stChDmg: if CheckNoDamage then inc(step) else step:= stDelay; 
564 
stSweep: if SweepDirty then 

1792  565 
begin 
1918  566 
SetAllToActive; 
1792  567 
step:= stChDmg 
1797  568 
end else inc(step); 
1343  569 
stTurnReact: begin 
570 
if (not bBetweenTurns) and (not isInMultiShoot) then 

571 
begin 

572 
uStats.TurnReaction; 

573 
inc(step) 

574 
end else 

575 
inc(step, 2); 

576 
end; 

577 
stAfterDelay: begin 

578 
if delay = 0 then 

579 
delay:= cInactDelay 

580 
else 

581 
dec(delay); 

815  582 

1343  583 
if delay = 0 then 
584 
inc(step) 

585 
end; 

586 
stChWin: begin 

587 
CheckForWin; 

588 
inc(step) 

589 
end; 

590 
stWater: if (not bBetweenTurns) and (not isInMultiShoot) then 

591 
begin 

1782
e7589e37a6d6
Options for bonus box probability tuning and number of turn until sudden death
unc0rr
parents:
1781
diff
changeset

592 
if TotalRounds = cSuddenDTurns + 2 then bWaterRising:= true; 
1055
9af540b23409
Water rises after 25 mins of round, health is decreased after 20 mins
unc0rr
parents:
1054
diff
changeset

593 

1343  594 
if bWaterRising then 
595 
AddGear(0, 0, gtWaterUp, 0, _0, _0, 0); 

1055
9af540b23409
Water rises after 25 mins of round, health is decreased after 20 mins
unc0rr
parents:
1054
diff
changeset

596 

1343  597 
inc(step) 
598 
end else inc(step); 

599 
stChWin2: begin 

600 
CheckForWin; 

601 
inc(step) 

602 
end; 

603 
stHealth: begin 

1782
e7589e37a6d6
Options for bonus box probability tuning and number of turn until sudden death
unc0rr
parents:
1781
diff
changeset

604 
if (TotalRounds = cSuddenDTurns) and (cHealthDecrease = 0) then 
1343  605 
begin 
606 
cHealthDecrease:= 5; 

2619  607 
AddCaption(trmsg[sidSuddenDeath], cWhiteColor, capgrpGameState); 
2217  608 
playSound(sndSuddenDeath, false, nil); 
1343  609 
end; 
1055
9af540b23409
Water rises after 25 mins of round, health is decreased after 20 mins
unc0rr
parents:
1054
diff
changeset

610 

1343  611 
if (cHealthDecrease = 0) 
612 
or bBetweenTurns 

613 
or isInMultiShoot 

614 
or (TotalRounds = 0) then inc(step) 

615 
else begin 

616 
bBetweenTurns:= true; 

617 
HealthMachine; 

2017  618 
SuddenDeathDmg:= true; 
1343  619 
step:= stChDmg 
620 
end 

621 
end; 

622 
stSpawn: begin 

623 
if not isInMultiShoot then SpawnBoxOfSmth; 

624 
inc(step) 

625 
end; 

626 
stNTurn: begin 

2608  627 
if isInMultiShoot then 
628 
isInMultiShoot:= false 

1343  629 
else begin 
2608  630 
// delayed till after 0.9.12 
631 
// reset to default zoom 

632 
//ZoomValue:= ZoomDefault; 

633 
with CurrentHedgehog^ do 

2611  634 
if (Gear <> nil) 
635 
and ((Gear^.State and gstAttacked) = 0) 

2608  636 
and (MultiShootAttacks > 0) then OnUsedAmmo(CurrentHedgehog^); 
637 

638 
ResetUtilities; 

2376  639 

2608  640 
FreeActionsList; // could send left, right and similar commands, so should be called before /nextturn 
1298  641 

2608  642 
ParseCommand('/nextturn', true); 
643 
SwitchHedgehog; 

1298  644 

2608  645 
AfterSwitchHedgehog; 
646 
bBetweenTurns:= false 

647 
end; 

1343  648 
step:= Low(step) 
649 
end; 

650 
end; 

15  651 

4  652 
if TurnTimeLeft > 0 then 
870  653 
if CurrentHedgehog^.Gear <> nil then 
654 
if ((CurrentHedgehog^.Gear^.State and gstAttacking) = 0) 

655 
and not isInMultiShoot then 

656 
begin 

657 
if (TurnTimeLeft = 5000) 

658 
and (CurrentHedgehog^.Gear <> nil) 

1669  659 
and ((CurrentHedgehog^.Gear^.State and gstAttacked) = 0) then 
660 
PlaySound(sndHurry, false, CurrentTeam^.voicepack); 

870  661 
dec(TurnTimeLeft) 
662 
end; 

351  663 

2621
956ff066f3a5
Fix desync when playing with AI via network, occuring in certain conditions
unc0rr
parents:
2619
diff
changeset

664 
if skipFlag then 
956ff066f3a5
Fix desync when playing with AI via network, occuring in certain conditions
unc0rr
parents:
2619
diff
changeset

665 
begin 
956ff066f3a5
Fix desync when playing with AI via network, occuring in certain conditions
unc0rr
parents:
2619
diff
changeset

666 
TurnTimeLeft:= 0; 
956ff066f3a5
Fix desync when playing with AI via network, occuring in certain conditions
unc0rr
parents:
2619
diff
changeset

667 
skipFlag:= false 
956ff066f3a5
Fix desync when playing with AI via network, occuring in certain conditions
unc0rr
parents:
2619
diff
changeset

668 
end; 
956ff066f3a5
Fix desync when playing with AI via network, occuring in certain conditions
unc0rr
parents:
2619
diff
changeset

669 

2134  670 
if ((GameTicks and $FFFF) = $FFFF) then 
917  671 
begin 
2134  672 
if (not CurrentTeam^.ExtDriven) then 
673 
SendIPCTimeInc; 

674 

675 
if (not CurrentTeam^.ExtDriven) or CurrentTeam^.hasGone then 

676 
inc(hiTicks) // we do not recieve a message for this 

917  677 
end; 
656
6d6d9d7b1054
Fix network game bug caused by recent protocol changes
unc0rr
parents:
651
diff
changeset

678 

515  679 
inc(GameTicks) 
4  680 
end; 
681 

1854  682 
//Purpose, to reset all transient attributes toggled by a utility. 
683 
//If any of these are set as permanent toggles in the frontend, that needs to be checked and skipped here. 

1849  684 
procedure ResetUtilities; 
1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

685 
var i: LongInt; 
1849  686 
begin 
2221  687 
SpeechText:= ''; // in case it has not been consumed 
2017  688 

1895  689 
if (GameFlags and gfLowGravity) = 0 then 
690 
cGravity:= cMaxWindSpeed; 

691 

2017  692 
if (GameFlags and gfVampiric) = 0 then 
693 
cVampiric:= false; 

694 

1849  695 
cDamageModifier:= _1; 
1895  696 

697 
if (GameFlags and gfLaserSight) = 0 then 

698 
cLaserSighting:= false; 

2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

699 

41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

700 
if (GameFlags and gfArtillery) = 0 then 
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

701 
cArtillery:= false; 
1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

702 

2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

703 
// have to sweep *all* current team hedgehogs since it is theoretically possible if you have enough invulnerabilities and switch turns to make your entire team invulnerable 
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

704 
if (CurrentTeam <> nil) then 
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

705 
with CurrentTeam^ do 
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

706 
for i:= 0 to cMaxHHIndex do 
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

707 
with Hedgehogs[i] do 
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

708 
begin 
2045
b0588498bc3a
 Fix network (my crappy fault, triggered by nemo's patch)
unc0rr
parents:
2042
diff
changeset

709 
if (SpeechGear <> nil) then 
b0588498bc3a
 Fix network (my crappy fault, triggered by nemo's patch)
unc0rr
parents:
2042
diff
changeset

710 
begin 
b0588498bc3a
 Fix network (my crappy fault, triggered by nemo's patch)
unc0rr
parents:
2042
diff
changeset

711 
DeleteVisualGear(SpeechGear); // remove to restore persisting beyond end of turn. Tiy says was too much of a gameplay issue 
b0588498bc3a
 Fix network (my crappy fault, triggered by nemo's patch)
unc0rr
parents:
2042
diff
changeset

712 
SpeechGear:= nil 
b0588498bc3a
 Fix network (my crappy fault, triggered by nemo's patch)
unc0rr
parents:
2042
diff
changeset

713 
end; 
b0588498bc3a
 Fix network (my crappy fault, triggered by nemo's patch)
unc0rr
parents:
2042
diff
changeset

714 

2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

715 
if (Gear <> nil) then 
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

716 
if (GameFlags and gfInvulnerable) = 0 then 
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

717 
Gear^.Invulnerable:= false; 
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

718 
end; 
1849  719 
end; 
2045
b0588498bc3a
 Fix network (my crappy fault, triggered by nemo's patch)
unc0rr
parents:
2042
diff
changeset

720 

2017  721 
procedure ApplyDamage(Gear: PGear; Damage: Longword); 
722 
var s: shortstring; 

2428  723 
vampDmg, tmpDmg, i: Longword; 
724 
vg: PVisualGear; 

2017  725 
begin 
2074  726 
if (Gear^.Kind = gtHedgehog) and (Damage>=1) then 
2017  727 
begin 
728 
AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), Damage, PHedgehog(Gear^.Hedgehog)^.Team^.Clan^.Color); 

2067
7524a783bd8c
use separate variable for vamp/karma calcs, move karma damage tag from point of damage origin to originating hedgehog at unc0rr's request
nemo
parents:
2057
diff
changeset

729 
tmpDmg:= min(Damage, max(0,Gear^.HealthGear^.Damage)); 
7524a783bd8c
use separate variable for vamp/karma calcs, move karma damage tag from point of damage origin to originating hedgehog at unc0rr's request
nemo
parents:
2057
diff
changeset

730 
if (Gear <> CurrentHedgehog^.Gear) and (CurrentHedgehog^.Gear <> nil) and (tmpDmg >= 1) then 
2017  731 
begin 
732 
if cVampiric then 

733 
begin 

2067
7524a783bd8c
use separate variable for vamp/karma calcs, move karma damage tag from point of damage origin to originating hedgehog at unc0rr's request
nemo
parents:
2057
diff
changeset

734 
vampDmg:= hwRound(int2hwFloat(tmpDmg)*_0_8); 
7524a783bd8c
use separate variable for vamp/karma calcs, move karma damage tag from point of damage origin to originating hedgehog at unc0rr's request
nemo
parents:
2057
diff
changeset

735 
if vampDmg >= 1 then 
7524a783bd8c
use separate variable for vamp/karma calcs, move karma damage tag from point of damage origin to originating hedgehog at unc0rr's request
nemo
parents:
2057
diff
changeset

736 
begin 
7524a783bd8c
use separate variable for vamp/karma calcs, move karma damage tag from point of damage origin to originating hedgehog at unc0rr's request
nemo
parents:
2057
diff
changeset

737 
// was considering pulsing on attack, Tiy thinks it should be permanent while in play 
7524a783bd8c
use separate variable for vamp/karma calcs, move karma damage tag from point of damage origin to originating hedgehog at unc0rr's request
nemo
parents:
2057
diff
changeset

738 
//CurrentHedgehog^.Gear^.State:= CurrentHedgehog^.Gear^.State or gstVampiric; 
7524a783bd8c
use separate variable for vamp/karma calcs, move karma damage tag from point of damage origin to originating hedgehog at unc0rr's request
nemo
parents:
2057
diff
changeset

739 
inc(CurrentHedgehog^.Gear^.Health,vampDmg); 
7524a783bd8c
use separate variable for vamp/karma calcs, move karma damage tag from point of damage origin to originating hedgehog at unc0rr's request
nemo
parents:
2057
diff
changeset

740 
str(vampDmg, s); 
7524a783bd8c
use separate variable for vamp/karma calcs, move karma damage tag from point of damage origin to originating hedgehog at unc0rr's request
nemo
parents:
2057
diff
changeset

741 
s:= '+' + s; 
7524a783bd8c
use separate variable for vamp/karma calcs, move karma damage tag from point of damage origin to originating hedgehog at unc0rr's request
nemo
parents:
2057
diff
changeset

742 
AddCaption(s, CurrentHedgehog^.Team^.Clan^.Color, capgrpAmmoinfo); 
7524a783bd8c
use separate variable for vamp/karma calcs, move karma damage tag from point of damage origin to originating hedgehog at unc0rr's request
nemo
parents:
2057
diff
changeset

743 
RenderHealth(CurrentHedgehog^); 
7524a783bd8c
use separate variable for vamp/karma calcs, move karma damage tag from point of damage origin to originating hedgehog at unc0rr's request
nemo
parents:
2057
diff
changeset

744 
RecountTeamHealth(CurrentHedgehog^.Team); 
2428  745 
i:= 0; 
746 
while i < vampDmg do 

747 
begin 

748 
vg:= AddVisualGear(hwRound(CurrentHedgehog^.Gear^.X), hwRound(CurrentHedgehog^.Gear^.Y), vgtHealth); 

749 
if vg <> nil then vg^.Frame:= 10; 

750 
inc(i, 5); 

751 
end; 

2067
7524a783bd8c
use separate variable for vamp/karma calcs, move karma damage tag from point of damage origin to originating hedgehog at unc0rr's request
nemo
parents:
2057
diff
changeset

752 
end 
2017  753 
end; 
2376  754 
if ((GameFlags and gfKarma) <> 0) and 
2017  755 
((GameFlags and gfInvulnerable) = 0) and 
756 
not CurrentHedgehog^.Gear^.Invulnerable then 

757 
begin // this cannot just use Damage or it interrupts shotgun and gets you called stupid 

2135
0b7972dfad01
Push karma application to end of round  should avoid problems w/ plane and kamikaze
nemo
parents:
2134
diff
changeset

758 
inc(CurrentHedgehog^.Gear^.Karma, tmpDmg); 
2376  759 
AddGear(hwRound(CurrentHedgehog^.Gear^.X), 
760 
hwRound(CurrentHedgehog^.Gear^.Y), 

2067
7524a783bd8c
use separate variable for vamp/karma calcs, move karma damage tag from point of damage origin to originating hedgehog at unc0rr's request
nemo
parents:
2057
diff
changeset

761 
gtHealthTag, tmpDmg, _0, _0, 0)^.Hedgehog:= CurrentHedgehog; 
2017  762 
end; 
763 
end; 

764 
end; 

2057
cf0d84479251
Prevent gaining more health than hedgehog actually has
nemo
parents:
2053
diff
changeset

765 
inc(Gear^.Damage, Damage); 
2017  766 
end; 
1849  767 

4  768 
procedure SetAllToActive; 
769 
var t: PGear; 

770 
begin 

771 
AllInactive:= false; 

772 
t:= GearsList; 

351  773 
while t <> nil do 
1505  774 
begin 
775 
t^.Active:= true; 

776 
t:= t^.NextGear 

777 
end 

4  778 
end; 
779 

780 
procedure SetAllHHToActive; 

781 
var t: PGear; 

782 
begin 

783 
AllInactive:= false; 

784 
t:= GearsList; 

351  785 
while t <> nil do 
1505  786 
begin 
787 
if t^.Kind = gtHedgehog then t^.Active:= true; 

788 
t:= t^.NextGear 

789 
end 

4  790 
end; 
791 

841
0700e3d3474d
Get rid if deprecated Surface parameter of Draw* calls
unc0rr
parents:
840
diff
changeset

792 
procedure DrawHH(Gear: PGear); 
2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

793 
var i, t: LongInt; 
822  794 
amt: TAmmoType; 
2020  795 
hx, hy, cx, cy, tx, ty, sx, sy, m: LongInt; // hedgehog, crosshair, temp, sprite, direction 
2597  796 
lx, ly, dx, dy, ax, ay, aAngle, dAngle, hAngle: real; // laser, change 
1253  797 
defaultPos, HatVisible: boolean; 
1906  798 
VertexBuffer: array [0..1] of TVertex2f; 
292  799 
begin 
2020  800 
m:= 1; 
2137  801 
if ((Gear^.State and gstHHHJump) <> 0) and not cArtillery then m:= 1; 
868  802 
if (Gear^.State and gstHHDeath) <> 0 then 
803 
begin 

804 
DrawSprite(sprHHDeath, hwRound(Gear^.X)  16 + WorldDx, hwRound(Gear^.Y)  26 + WorldDy, Gear^.Pos); 

805 
exit 

806 
end; 

1002  807 

824  808 
defaultPos:= true; 
1253  809 
HatVisible:= false; 
847  810 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

811 
sx:= hwRound(Gear^.X) + 1 + WorldDx; 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

812 
sy:= hwRound(Gear^.Y)  3 + WorldDy; 
1002  813 
if (Gear^.State and gstDrowning) <> 0 then 
814 
begin 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

815 
DrawHedgehog(sx, sy, 
1002  816 
hwSign(Gear^.dX), 
817 
1, 

818 
7, 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

819 
0); 
1002  820 
defaultPos:= false 
821 
end else 

2376  822 
if ((Gear^.State and gstWinner) <> 0) and 
1892  823 
((CurAmmoGear = nil) or (CurAmmoGear^.Kind <> gtPickHammer)) then 
1011  824 
begin 
1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

825 
DrawHedgehog(sx, sy, 
1011  826 
hwSign(Gear^.dX), 
827 
2, 

828 
0, 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

829 
0); 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

830 
defaultPos:= false 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

831 
end else 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

832 
if (Gear^.State and gstLoser) <> 0 then // for now using the jackhammer for its kind of bemused "oops" look 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

833 
begin 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

834 
DrawHedgehog(sx, sy, 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

835 
hwSign(Gear^.dX), 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

836 
2, 
2053
9a8a4add3eff
Use shrug frame for injuring yourself/teammate, add custom theme music to Sheep theme
nemo
parents:
2045
diff
changeset

837 
3, 
1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

838 
0); 
1011  839 
defaultPos:= false 
840 
end else 

841 

821
e6c0408b54ed
Use 'regular standing' and 'rope swing' hedgehog sprites
unc0rr
parents:
815
diff
changeset

842 
if (Gear^.State and gstHHDriven) <> 0 then 
966  843 
begin 
2376  844 
if ((Gear^.State and gstHHThinking) = 0) and 
845 
ShowCrosshair and 

2028  846 
((Gear^.State and (gstAttacked or gstAnimation)) = 0) then 
847 
begin 

848 
(* These calculations are a little complex for a few reasons: 

849 
1: I need to draw the laser from weapon origin to nearest land 

2376  850 
2: I need to start the beam outside the hedgie for attractiveness. 
851 
3: I need to extend the beam beyond land. 

2028  852 
This routine perhaps should be pushed into uStore or somesuch instead of continuuing the increase in size of this function. 
853 
*) 

854 
dx:= hwSign(Gear^.dX) * m * Sin(Gear^.Angle * pi / cMaxAngle); 

855 
dy:=  Cos(Gear^.Angle * pi / cMaxAngle); 

856 
if cLaserSighting then 

857 
begin 

858 
lx:= hwRound(Gear^.X); 

859 
ly:= hwRound(Gear^.Y); 

860 
lx:= lx + dx * 16; 

861 
ly:= ly + dy * 16; 

862 

863 
ax:= dx * 4; 

864 
ay:= dy * 4; 

865 

866 
tx:= round(lx); 

867 
ty:= round(ly); 

868 
hx:= tx; 

869 
hy:= ty; 

870 
while ((ty and LAND_HEIGHT_MASK) = 0) and 

871 
((tx and LAND_WIDTH_MASK) = 0) and 

872 
(Land[ty, tx] = 0) do 

873 
begin 

874 
lx:= lx + ax; 

875 
ly:= ly + ay; 

876 
tx:= round(lx); 

877 
ty:= round(ly) 

878 
end; 

879 
// reached edge of land. assume infinite beam. Extend it way out past camera 

880 
if ((ty and LAND_HEIGHT_MASK) <> 0) or ((tx and LAND_WIDTH_MASK) <> 0) then 

881 
begin 

882 
tx:= round(lx + ax * (LAND_WIDTH div 4)); 

883 
ty:= round(ly + ay * (LAND_WIDTH div 4)); 

884 
end; 

2376  885 

2028  886 
//if (abs(lxtx)>8) or (abs(lyty)>8) then 
887 
begin 

888 
glDisable(GL_TEXTURE_2D); 

889 
glEnable(GL_LINE_SMOOTH); 

890 

2362  891 
glLineWidth(1.0); 
2376  892 

2028  893 
glColor4ub($FF, $00, $00, $C0); 
894 
VertexBuffer[0].X:= hx + WorldDx; 

895 
VertexBuffer[0].Y:= hy + WorldDy; 

896 
VertexBuffer[1].X:= tx + WorldDx; 

897 
VertexBuffer[1].Y:= ty + WorldDy; 

2376  898 

2028  899 
glEnableClientState(GL_VERTEX_ARRAY); 
900 
glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); 

901 
glDrawArrays(GL_LINES, 0, Length(VertexBuffer)); 

902 
glColor4f(1, 1, 1, 1); 

903 
glEnable(GL_TEXTURE_2D); 

904 
glDisable(GL_LINE_SMOOTH); 

905 
end; 

906 
end; 

907 
// draw crosshair 

908 
cx:= Round(hwRound(Gear^.X) + dx * 80); 

909 
cy:= Round(hwRound(Gear^.Y) + dy * 80); 

910 
DrawRotatedTex(PHedgehog(Gear^.Hedgehog)^.Team^.CrosshairTex, 

911 
12, 12, cx + WorldDx, cy + WorldDy, 0, 

912 
hwSign(Gear^.dX) * (Gear^.Angle * 180.0) / cMaxAngle); 

913 
end; 

1002  914 
hx:= hwRound(Gear^.X) + 1 + 8 * hwSign(Gear^.dX) + WorldDx; 
915 
hy:= hwRound(Gear^.Y)  2 + WorldDy; 

916 
aangle:= Gear^.Angle * 180 / cMaxAngle  90; 

874  917 

1002  918 
if CurAmmoGear <> nil then 
919 
begin 

920 
case CurAmmoGear^.Kind of 

1294
50198e5c7f02
 Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents:
1286
diff
changeset

921 
gtShotgunShot: begin 
50198e5c7f02
 Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents:
1286
diff
changeset

922 
if (CurAmmoGear^.State and gstAnimation <> 0) then 
50198e5c7f02
 Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents:
1286
diff
changeset

923 
DrawRotated(sprShotgun, hx, hy, hwSign(Gear^.dX), aangle) 
50198e5c7f02
 Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents:
1286
diff
changeset

924 
else 
50198e5c7f02
 Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents:
1286
diff
changeset

925 
DrawRotated(sprHandShotgun, hx, hy, hwSign(Gear^.dX), aangle); 
50198e5c7f02
 Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents:
1286
diff
changeset

926 
end; 
1002  927 
gtDEagleShot: DrawRotated(sprDEagle, hx, hy, hwSign(Gear^.dX), aangle); 
2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

928 
gtSniperRifleShot: begin 
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

929 
if (CurAmmoGear^.State and gstAnimation <> 0) then 
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

930 
DrawRotatedF(sprSniperRifle, hx, hy, 1, hwSign(Gear^.dX), aangle) 
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

931 
else 
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

932 
DrawRotatedF(sprSniperRifle, hx, hy, 0, hwSign(Gear^.dX), aangle) 
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

933 
end; 
1601  934 
gtBallgun: DrawRotated(sprHandBallgun, hx, hy, hwSign(Gear^.dX), aangle); 
1717  935 
gtRCPlane: begin 
936 
DrawRotated(sprHandPlane, hx, hy, hwSign(Gear^.dX), 0); 

937 
defaultPos:= false 

938 
end; 

1002  939 
gtRope: begin 
940 
if Gear^.X < CurAmmoGear^.X then 

941 
begin 

942 
dAngle:= 0; 

2597  943 
hAngle:= 180; 
2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

944 
i:= 1 
1002  945 
end else 
946 
begin 

947 
dAngle:= 180; 

2597  948 
hAngle:= 0; 
2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

949 
i:= 1 
966  950 
end; 
1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

951 
sx:= hwRound(Gear^.X) + WorldDx; 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

952 
sy:= hwRound(Gear^.Y) + WorldDy; 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

953 
DrawHedgehog(sx, sy, 
2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

954 
i, 
1002  955 
1, 
956 
0, 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

957 
DxDy2Angle(CurAmmoGear^.dY, CurAmmoGear^.dX) + dAngle); 
2597  958 
with PHedgehog(Gear^.Hedgehog)^ do 
959 
if (HatTex <> nil) then 

960 
DrawRotatedTextureF(HatTex, 1.0, 1.0, 6.0, sx, sy, 0, i, 32, 

961 
i*DxDy2Angle(CurAmmoGear^.dY, CurAmmoGear^.dX) + hAngle); 

1002  962 
defaultPos:= false 
963 
end; 

964 
gtBlowTorch: begin 

965 
DrawRotated(sprBlowTorch, hx, hy, hwSign(Gear^.dX), aangle); 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

966 
DrawHedgehog(sx, sy, 
1002  967 
hwSign(Gear^.dX), 
968 
3, 

1113  969 
PHedgehog(Gear^.Hedgehog)^.visStepPos div 2, 
1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

970 
0); 
1002  971 
defaultPos:= false 
972 
end; 

973 
gtShover: DrawRotated(sprHandBaseball, hx, hy, hwSign(Gear^.dX), aangle + 180); 

974 
gtFirePunch: begin 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

975 
DrawHedgehog(sx, sy, 
1002  976 
hwSign(Gear^.dX), 
977 
1, 

978 
4, 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

979 
0); 
1002  980 
defaultPos:= false 
981 
end; 

1892  982 
gtPickHammer: begin 
983 
defaultPos:= false; 

984 
dec(sy,20); 

985 
end; 

1002  986 
gtTeleport: defaultPos:= false; 
1010  987 
gtWhip: begin 
988 
DrawRotatedF(sprWhip, 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

989 
sx, 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

990 
sy, 
1010  991 
1, 
992 
hwSign(Gear^.dX), 

993 
0); 

994 
defaultPos:= false 

995 
end; 

1002  996 
gtKamikaze: begin 
1286  997 
if CurAmmoGear^.Pos = 0 then 
1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

998 
DrawHedgehog(sx, sy, 
1286  999 
hwSign(Gear^.dX), 
1000 
1, 

1001 
6, 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1002 
0) 
1286  1003 
else 
1004 
DrawRotatedF(sprKamikaze, 

1005 
hwRound(Gear^.X) + WorldDx, 

1006 
hwRound(Gear^.Y) + WorldDy, 

1007 
CurAmmoGear^.Pos  1, 

2025
692308790912
Adjust routines impacted by DrawRotatedF modification, clear gstHHHJump in rope to avoid crosshair/hat drawing bug.
nemo
parents:
2023
diff
changeset

1008 
hwSign(Gear^.dX), 
692308790912
Adjust routines impacted by DrawRotatedF modification, clear gstHHHJump in rope to avoid crosshair/hat drawing bug.
nemo
parents:
2023
diff
changeset

1009 
aangle); 
1286  1010 
defaultPos:= false 
1011 
end; 

1012 
gtSeduction: begin 

1013 
if CurAmmoGear^.Pos >= 6 then 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1014 
DrawHedgehog(sx, sy, 
1286  1015 
hwSign(Gear^.dX), 
1016 
2, 

1017 
2, 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1018 
0) 
1286  1019 
else 
1020 
begin 

1021 
DrawRotatedF(sprDress, 

1022 
hwRound(Gear^.X) + WorldDx, 

1023 
hwRound(Gear^.Y) + WorldDy, 

1024 
CurAmmoGear^.Pos, 

1025 
hwSign(Gear^.dX), 

1026 
0); 

1027 
DrawSprite(sprCensored, hwRound(Gear^.X)  32 + WorldDx, hwRound(Gear^.Y)  20 + WorldDy, 0) 

1028 
end; 

1029 
defaultPos:= false 

1030 
end; 

1002  1031 
end; 
1032 

1033 
case CurAmmoGear^.Kind of 

1034 
gtShotgunShot, 

1035 
gtDEagleShot, 

2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

1036 
gtSniperRifleShot, 
1002  1037 
gtShover: begin 
1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1038 
DrawHedgehog(sx, sy, 
1002  1039 
hwSign(Gear^.dX), 
1040 
0, 

1041 
4, 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1042 
0); 
1977  1043 
defaultPos:= false; 
1044 
HatVisible:= true 

1002  1045 
end 
1046 
end 

1047 
end else 

876  1048 

1002  1049 
if ((Gear^.State and gstHHJumping) <> 0) then 
1050 
begin 

2020  1051 
DrawHedgehog(sx, sy, 
1052 
hwSign(Gear^.dX)*m, 

1053 
1, 

1054 
1, 

1055 
0); 

1056 
HatVisible:= true; 

1002  1057 
defaultPos:= false 
1058 
end else 

874  1059 

1913  1060 
if (Gear^.Message and (gm_Left or gm_Right) <> 0) and (not isCursorVisible) then 
824  1061 
begin 
1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1062 
DrawHedgehog(sx, sy, 
1002  1063 
hwSign(Gear^.dX), 
1064 
0, 

1065 
PHedgehog(Gear^.Hedgehog)^.visStepPos div 2, 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1066 
0); 
1257  1067 
defaultPos:= false; 
1068 
HatVisible:= true 

1002  1069 
end 
1070 
else 

1071 

1033  1072 
if ((Gear^.State and gstAnimation) <> 0) then 
1073 
begin 

1034  1074 
DrawRotatedF(Wavez[TWave(Gear^.Tag)].Sprite, 
1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1075 
sx, 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1076 
sy, 
1033  1077 
Gear^.Pos, 
1078 
hwSign(Gear^.dX), 

1079 
0.0); 

1080 
defaultPos:= false 

1081 
end 

1082 
else 

1002  1083 
if ((Gear^.State and gstAttacked) = 0) then 
1084 
begin 

1085 
amt:= CurrentHedgehog^.Ammo^[CurrentHedgehog^.CurSlot, CurrentHedgehog^.CurAmmo].AmmoType; 

1086 
case amt of 

1087 
amBazooka, 

1717  1088 
amMortar: DrawRotated(sprHandBazooka, hx, hy, hwSign(Gear^.dX), aangle); 
2457
ecf0c7e7995b
Initial molotov cocktail. Still needs graphics, tweaking of fire behaviour. Also changed probabilities for default weapon sets
nemo
parents:
2455
diff
changeset

1089 
amMolotov: DrawRotated(sprHandMolotov, hx, hy, hwSign(Gear^.dX), aangle); 
1717  1090 
amBallgun: DrawRotated(sprHandBallgun, hx, hy, hwSign(Gear^.dX), aangle); 
1091 
amDrill: DrawRotated(sprHandDrill, hx, hy, hwSign(Gear^.dX), aangle); 

1002  1092 
amRope: DrawRotated(sprHandRope, hx, hy, hwSign(Gear^.dX), aangle); 
1093 
amShotgun: DrawRotated(sprHandShotgun, hx, hy, hwSign(Gear^.dX), aangle); 

1094 
amDEagle: DrawRotated(sprHandDEagle, hx, hy, hwSign(Gear^.dX), aangle); 

2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2020
diff
changeset

1095 
amSniperRifle: DrawRotatedF(sprSniperRifle, hx, hy, 0, hwSign(Gear^.dX), aangle); 
1002  1096 
amBlowTorch: DrawRotated(sprHandBlowTorch, hx, hy, hwSign(Gear^.dX), aangle); 
1717  1097 
amRCPlane: begin 
1098 
DrawRotated(sprHandPlane, hx, hy, hwSign(Gear^.dX), 0); 

1099 
defaultPos:= false 

1100 
end; 

1939  1101 
amGirder: begin 
2376  1102 
DrawSpriteClipped(sprGirder, 
1103 
sx256, 

1104 
sy256, 

1105 
LongInt(topY)+WorldDy, 

1106 
LongInt(rightX)+WorldDx, 

1939  1107 
cWaterLine+WorldDy, 
1108 
LongInt(leftX)+WorldDx); 

1109 
end; 

1002  1110 
end; 
1111 

1112 
case amt of 

1113 
amAirAttack, 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1114 
amMineStrike: DrawRotated(sprHandAirAttack, sx, hwRound(Gear^.Y) + WorldDy, hwSign(Gear^.dX), 0); 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1115 
amPickHammer: DrawHedgehog(sx, sy, 
1002  1116 
hwSign(Gear^.dX), 
1117 
1, 

1118 
2, 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1119 
0); 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1120 
amBlowTorch: DrawHedgehog(sx, sy, 
1002  1121 
hwSign(Gear^.dX), 
1122 
1, 

1123 
3, 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1124 
0); 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1125 
amTeleport: DrawRotatedF(sprTeleport, sx, sy, 0, hwSign(Gear^.dX), 0); 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1126 
amKamikaze: DrawHedgehog(sx, sy, 
1002  1127 
hwSign(Gear^.dX), 
1128 
1, 

1129 
5, 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1130 
0); 
1221  1131 
amWhip: DrawRotatedF(sprWhip, 
1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1132 
sx, 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1133 
sy, 
1010  1134 
0, 
1135 
hwSign(Gear^.dX), 

1136 
0); 

1002  1137 
else 
1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1138 
DrawHedgehog(sx, sy, 
822  1139 
hwSign(Gear^.dX), 
1140 
0, 

1002  1141 
4, 
1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1142 
0); 
2376  1143 

1253  1144 
HatVisible:= true; 
1145 
with PHedgehog(Gear^.Hedgehog)^ do 

1294
50198e5c7f02
 Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents:
1286
diff
changeset

1146 
if (HatTex <> nil) 
1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1147 
and (HatVisibility > 0) then 
1253  1148 
DrawTextureF(HatTex, 
1149 
HatVisibility, 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1150 
sx, 
1253  1151 
hwRound(Gear^.Y)  8 + WorldDy, 
1152 
0, 

1153 
hwSign(Gear^.dX), 

1154 
32); 

1002  1155 
end; 
966  1156 

1002  1157 
case amt of 
1158 
amBaseballBat: DrawRotated(sprHandBaseball, 

1159 
hwRound(Gear^.X) + 1  4 * hwSign(Gear^.dX) + WorldDx, 

1160 
hwRound(Gear^.Y) + 6 + WorldDy, hwSign(Gear^.dX), aangle); 

1161 
end; 

966  1162 

1002  1163 
defaultPos:= false 
2182
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1164 
end; 
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1165 

1002  1166 
end else // not gstHHDriven 
1012  1167 
begin 
1014
3c7d4e7ccdff
 Fix firepunch sprite direction when use in high jump
unc0rr
parents:
1013
diff
changeset

1168 
if (Gear^.Damage > 0) 
2028  1169 
and (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) > _0_003) then 
1014
3c7d4e7ccdff
 Fix firepunch sprite direction when use in high jump
unc0rr
parents:
1013
diff
changeset

1170 
begin 
1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1171 
DrawHedgehog(sx, sy, 
1012  1172 
hwSign(Gear^.dX), 
1014
3c7d4e7ccdff
 Fix firepunch sprite direction when use in high jump
unc0rr
parents:
1013
diff
changeset

1173 
2, 
1012  1174 
1, 
1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1175 
Gear^.DirAngle); 
1012  1176 
defaultPos:= false 
1020  1177 
end else 
1014
3c7d4e7ccdff
 Fix firepunch sprite direction when use in high jump
unc0rr
parents:
1013
diff
changeset

1178 

3c7d4e7ccdff
 Fix firepunch sprite direction when use in high jump
unc0rr
parents:
1013
diff
changeset

1179 
if ((Gear^.State and gstHHJumping) <> 0) then 
3c7d4e7ccdff
 Fix firepunch sprite direction when use in high jump
unc0rr
parents:
1013
diff
changeset

1180 
begin 
2020  1181 
DrawHedgehog(sx, sy, 
1182 
hwSign(Gear^.dX)*m, 

1183 
1, 

1184 
1, 

1185 
0); 

1186 
defaultPos:= false 

1014
3c7d4e7ccdff
 Fix firepunch sprite direction when use in high jump
unc0rr
parents:
1013
diff
changeset

1187 
end; 
1012  1188 
end; 
834  1189 

1251  1190 
with PHedgehog(Gear^.Hedgehog)^ do 
970  1191 
begin 
1251  1192 
if defaultPos then 
1193 
begin 

1194 
DrawRotatedF(sprHHIdle, 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1195 
sx, 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1196 
sy, 
1251  1197 
(RealTicks div 128 + Gear^.Pos) mod 19, 
1198 
hwSign(Gear^.dX), 

1199 
0); 

1253  1200 
HatVisible:= true; 
1201 
end; 

1202 

1203 
if HatVisible then 

1251  1204 
if HatVisibility < 1.0 then 
1254  1205 
HatVisibility:= HatVisibility + 0.2 
1253  1206 
else 
1251  1207 
else 
1208 
if HatVisibility > 0.0 then 

1254  1209 
HatVisibility:= HatVisibility  0.2; 
2376  1210 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1211 
if (HatTex <> nil) 
1294
50198e5c7f02
 Hedgehog doesn't take off hat when shooting from shotgun
unc0rr
parents:
1286
diff
changeset

1212 
and (HatVisibility > 0) then 
1255  1213 
if DefaultPos then 
1214 
DrawTextureF(HatTex, 

1215 
HatVisibility, 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1216 
sx, 
1255  1217 
hwRound(Gear^.Y)  8 + WorldDy, 
1218 
(RealTicks div 128 + Gear^.Pos) mod 19, 

1219 
hwSign(Gear^.dX), 

1220 
32) 

1221 
else 

1222 
DrawTextureF(HatTex, 

1223 
HatVisibility, 

1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1224 
sx, 
1255  1225 
hwRound(Gear^.Y)  8 + WorldDy, 
1226 
0, 

2020  1227 
hwSign(Gear^.dX)*m, 
1255  1228 
32); 
970  1229 
end; 
2182
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1230 
if (Gear^.State and gstHHDriven) <> 0 then 
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1231 
begin 
2186
5ec3e4a03d51
disable selection sprite, nudge ship into the air on launch
nemo
parents:
2182
diff
changeset

1232 
(* if (CurAmmoGear = nil) then 
2182
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1233 
begin 
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1234 
amt:= CurrentHedgehog^.Ammo^[CurrentHedgehog^.CurSlot, CurrentHedgehog^.CurAmmo].AmmoType; 
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1235 
case amt of 
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1236 
amJetpack: DrawSprite(sprJetpack, sx32, sy32, 0); 
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1237 
end 
2186
5ec3e4a03d51
disable selection sprite, nudge ship into the air on launch
nemo
parents:
2182
diff
changeset

1238 
end; *) 
2182
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1239 
if CurAmmoGear <> nil then 
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1240 
begin 
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1241 
case CurAmmoGear^.Kind of 
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1242 
gtJetpack: begin 
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1243 
DrawSprite(sprJetpack, sx32, sy32, 0); 
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1244 
if (CurAmmoGear^.MsgParam and gm_Up) <> 0 then DrawSprite(sprJetpack, sx32, sy32, 1); 
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1245 
if (CurAmmoGear^.MsgParam and gm_Left) <> 0 then DrawSprite(sprJetpack, sx32, sy32, 2); 
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1246 
if (CurAmmoGear^.MsgParam and gm_Right) <> 0 then DrawSprite(sprJetpack, sx32, sy32, 3); 
2204
526f8165acce
Smaxx' idea of timers, reworked just a tad. Might need variable for offset, but seems ok for now
nemo
parents:
2186
diff
changeset

1247 
if CurAmmoGear^.Tex <> nil then DrawCentered(sx, sy  40, CurAmmoGear^.Tex) 
2182
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1248 
end; 
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1249 
end; 
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1250 
end 
ed7e7eb3f9ed
Ugly graphic for jetpack  jetpack should be essentially functional.
nemo
parents:
2177
diff
changeset

1251 
end; 
1251  1252 

351  1253 
with PHedgehog(Gear^.Hedgehog)^ do 
994  1254 
begin 
1011  1255 
if ((Gear^.State and not gstWinner) = 0) 
994  1256 
or (bShowFinger and ((Gear^.State and gstHHDriven) <> 0)) then 
958  1257 
begin 
1660  1258 
t:= hwRound(Gear^.Y)  cHHRadius  12 + WorldDy; 
2568
e654cbfb23ba
Bunch of neat stuff by Smaxx. ATI check, translucent name tags to reduce terrain fail, disabling health crates on invulnerable hogs. Also tweaks to prior stuff.
nemo
parents:
2537
diff
changeset

1259 
if (cTagsMasks[cTagsMaskIndex] and htTransparent) <> 0 then 
e654cbfb23ba
Bunch of neat stuff by Smaxx. ATI check, translucent name tags to reduce terrain fail, disabling health crates on invulnerable hogs. Also tweaks to prior stuff.
nemo
parents:
2537
diff
changeset

1260 
glColor4f(1, 1, 1, 0.5); 
e654cbfb23ba
Bunch of neat stuff by Smaxx. ATI check, translucent name tags to reduce terrain fail, disabling health crates on invulnerable hogs. Also tweaks to prior stuff.
nemo
parents:
2537
diff
changeset

1261 
if ((cTagsMasks[cTagsMaskIndex] and htHealth) <> 0) and ((GameFlags and gfInvulnerable) = 0) then 
1660  1262 
begin 
1263 
dec(t, HealthTagTex^.h + 2); 

1264 
DrawCentered(hwRound(Gear^.X) + WorldDx, t, HealthTagTex) 

1265 
end; 

2568
e654cbfb23ba
Bunch of neat stuff by Smaxx. ATI check, translucent name tags to reduce terrain fail, disabling health crates on invulnerable hogs. Also tweaks to prior stuff.
nemo
parents:
2537
diff
changeset

1266 
if (cTagsMasks[cTagsMaskIndex] and htName) <> 0 then 
1660  1267 
begin 
1268 
dec(t, NameTagTex^.h + 2); 

1269 
DrawCentered(hwRound(Gear^.X) + WorldDx, t, NameTagTex) 

1270 
end; 

2568
e654cbfb23ba
Bunch of neat stuff by Smaxx. ATI check, translucent name tags to reduce terrain fail, disabling health crates on invulnerable hogs. Also tweaks to prior stuff.
nemo
parents:
2537
diff
changeset

1271 
if (cTagsMasks[cTagsMaskIndex] and htTeamName) <> 0 then 
1660  1272 
begin 
1273 
dec(t, Team^.NameTagTex^.h + 2); 

1274 
DrawCentered(hwRound(Gear^.X) + WorldDx, t, Team^.NameTagTex) 

2568
e654cbfb23ba
Bunch of neat stuff by Smaxx. ATI check, translucent name tags to reduce terrain fail, disabling health crates on invulnerable hogs. Also tweaks to prior stuff.
nemo
parents:
2537
diff
changeset

1275 
end; 
e654cbfb23ba
Bunch of neat stuff by Smaxx. ATI check, translucent name tags to reduce terrain fail, disabling health crates on invulnerable hogs. Also tweaks to prior stuff.
nemo
parents:
2537
diff
changeset

1276 
if (cTagsMasks[cTagsMaskIndex] and htTransparent) <> 0 then 
e654cbfb23ba
Bunch of neat stuff by Smaxx. ATI check, translucent name tags to reduce terrain fail, disabling health crates on invulnerable hogs. Also tweaks to prior stuff.
nemo
parents:
2537
diff
changeset

1277 
glColor4f(1, 1, 1, 1) 
958  1278 
end; 
994  1279 
if (Gear^.State and gstHHDriven) <> 0 then // Current hedgehog 
958  1280 
begin 
1281 
if bShowFinger and ((Gear^.State and gstHHDriven) <> 0) then 

1282 
DrawSprite(sprFinger, hwRound(Gear^.X)  16 + WorldDx, hwRound(Gear^.Y)  64 + WorldDy, 

1283 
GameTicks div 32 mod 16); 

821
e6c0408b54ed
Use 'regular standing' and 'rope swing' hedgehog sprites
unc0rr
parents:
815
diff
changeset

1284 

958  1285 
if (Gear^.State and gstDrowning) = 0 then 
1286 
if (Gear^.State and gstHHThinking) <> 0 then 

1287 
DrawSprite(sprQuestion, hwRound(Gear^.X)  10 + WorldDx, hwRound(Gear^.Y)  cHHRadius  34 + WorldDy, 0) 

2028  1288 
end 
1865
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1289 
end; 
ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1290 

ebc6dfca60d4
 nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents:
1863
diff
changeset

1291 
if Gear^.Invulnerable then 
2017  1292 
begin 
2428  1293 
glColor4f(1, 1, 1, 0.25 + abs(1  ((RealTicks div 2) mod 1500) / 750)); 
1294 
DrawSprite(sprInvulnerable, sx  24, sy  24, 0); 

1295 
glColor4f(1, 1, 1, 1); 

2017  1296 
end; 
1297 
if cVampiric and 

2376  1298 
(CurrentHedgehog^.Gear <> nil) and 
2017  1299 
(CurrentHedgehog^.Gear = Gear) then 
1300 
begin 

2428  1301 
glColor4f(1, 1, 1, 0.25 + abs(1  (RealTicks mod 1500) / 750)); 
2017  1302 
DrawSprite(sprVampiric, sx  24, sy  24, 0); 
2428  1303 
glColor4f(1, 1, 1, 1); 
2017  1304 
end; 
292  1305 
end; 
1306 

2362  1307 
procedure DrawRopeLinesRQ(Gear: PGear); 
1308 
begin 

1309 
with RopePoints do 

2365  1310 
begin 
1311 
rounded[Count].X:= hwRound(Gear^.X); 

1312 
rounded[Count].Y:= hwRound(Gear^.Y); 

1313 
rounded[Count + 1].X:= hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.X); 

1314 
rounded[Count + 1].Y:= hwRound(PHedgehog(Gear^.Hedgehog)^.Gear^.Y); 

1315 
end; 

2362  1316 

2365  1317 
if (RopePoints.Count > 0) or (Gear^.Elasticity.QWordValue > 0) then 
2362  1318 
begin 
1319 
glDisable(GL_TEXTURE_2D); 

2366
b38efe489615
Disable smoothing and alpha for low quality rope rendering
unc0rr
parents:
2365
diff
changeset

1320 
//glEnable(GL_LINE_SMOOTH); 
2365  1321 

1322 
glPushMatrix; 

1323 

1324 
glTranslatef(WorldDx, WorldDy, 0); 

2376  1325 

2362  1326 
glLineWidth(4.0); 
1327 

2391  1328 
glColor4f(0.8, 0.8, 0.8, 1); 
2362  1329 

1330 
glEnableClientState(GL_VERTEX_ARRAY); 

2390  1331 
glVertexPointer(2, GL_FLOAT, 0, @RopePoints.rounded[0]); 
2365  1332 
glDrawArrays(GL_LINE_STRIP, 0, RopePoints.Count + 2); 
2362  1333 
glColor4f(1, 1, 1, 1); 
2365  1334 

1335 
glPopMatrix; 

2376  1336 

2362  1337 
glEnable(GL_TEXTURE_2D); 
2366
b38efe489615
Disable smoothing and alpha for low quality rope rendering
unc0rr
parents:
2365
diff
changeset

1338 
//glDisable(GL_LINE_SMOOTH) 
2362  1339 
end 
1340 
end; 

1341 

1342 
procedure DrawRope(Gear: PGear); 

1343 
var roplen: LongInt; 

2407
9f413bd5150e
 Fix mouse cursor bugs in net game (still has a bug near water)
unc0rr
parents:
2391
diff
changeset

1344 
i: Longword; 
2362  1345 

1346 
procedure DrawRopeLine(X1, Y1, X2, Y2: LongInt); 

1347 
var eX, eY, dX, dY: LongInt; 

1348 
i, sX, sY, x, y, d: LongInt; 

1349 
b: boolean; 

1350 
begin 

1351 
if (X1 = X2) and (Y1 = Y2) then 

1352 
begin 

1353 
//OutError('WARNING: zero length rope line!', false); 

1354 
exit 

1355 
end; 

1356 
eX:= 0; 

1357 
eY:= 0; 

1358 
dX:= X2  X1; 

1359 
dY:= Y2  Y1; 

1360 

1361 
if (dX > 0) then sX:= 1 

1362 
else 

1363 
if (dX < 0) then 

1364 
begin 

1365 
sX:= 1; 

1366 
dX:= dX 

1367 
end else sX:= dX; 

1368 

1369 
if (dY > 0) then sY:= 1 

1370 
else 

1371 
if (dY < 0) then 

1372 
begin 

1373 
sY:= 1; 

1374 
dY:= dY 

1375 
end else sY:= dY; 

1376 
