author  nemo 
Sun, 03 May 2009 21:12:34 +0000  
changeset 2024  2985f3bd18b7 
parent 2023  41d3afaa20c7 
child 2040  7c366fc3c099 
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 

37  19 
//////////////////////////////////////////////////////////////////////////////// 
783  20 
procedure ChangeAmmo(Gear: PGear); 
941
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

21 
var slot, i: Longword; 
783  22 
begin 
23 
slot:= Gear^.MsgParam; 

24 

25 
with PHedgehog(Gear^.Hedgehog)^ do 

927
2c1675344a6f
Remove AltSlot and AltAmmo fields of Hedgehog record, as they are not actually needed
unc0rr
parents:
926
diff
changeset

26 
begin 
1883
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

27 
Gear^.Message:= Gear^.Message and not gm_Slot; 
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

28 

928
b9064b48b001
Some preparation work for attacking from rope, parachute and etc.
unc0rr
parents:
927
diff
changeset

29 
if ((Gear^.State and (gstAttacking or gstAttacked)) <> 0) 
b9064b48b001
Some preparation work for attacking from rope, parachute and etc.
unc0rr
parents:
927
diff
changeset

30 
or (AttacksNum > 0) 
927
2c1675344a6f
Remove AltSlot and AltAmmo fields of Hedgehog record, as they are not actually needed
unc0rr
parents:
926
diff
changeset

31 
or ((Gear^.State and gstHHDriven) = 0) then exit; 
783  32 

1883
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

33 
Gear^.Message:= Gear^.Message and not (gm_LJump or gm_HJump); 
783  34 

927
2c1675344a6f
Remove AltSlot and AltAmmo fields of Hedgehog record, as they are not actually needed
unc0rr
parents:
926
diff
changeset

35 
if CurSlot = slot then 
2c1675344a6f
Remove AltSlot and AltAmmo fields of Hedgehog record, as they are not actually needed
unc0rr
parents:
926
diff
changeset

36 
begin 
941
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

37 
i:= 0; 
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

38 
repeat 
927
2c1675344a6f
Remove AltSlot and AltAmmo fields of Hedgehog record, as they are not actually needed
unc0rr
parents:
926
diff
changeset

39 
inc(CurAmmo); 
941
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

40 
if (CurAmmo > cMaxSlotAmmoIndex) then 
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

41 
begin 
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

42 
CurAmmo:= 0; 
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

43 
inc(i); 
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

44 
TryDo(i < 2, 'Engine bug: no ammo in current slot', true) 
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

45 
end; 
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

46 
until (Ammo^[slot, CurAmmo].Count > 0) and (Team^.Clan^.TurnNumber > Ammoz[Ammo^[slot, CurAmmo].AmmoType].SkipTurns) 
927
2c1675344a6f
Remove AltSlot and AltAmmo fields of Hedgehog record, as they are not actually needed
unc0rr
parents:
926
diff
changeset

47 
end else 
2c1675344a6f
Remove AltSlot and AltAmmo fields of Hedgehog record, as they are not actually needed
unc0rr
parents:
926
diff
changeset

48 
begin 
941
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

49 
i:= 0; 
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

50 
// check whether there's ammo in slot 
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

51 
while (i <= cMaxSlotAmmoIndex) 
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

52 
and ((Ammo^[slot, i].Count = 0) 
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

53 
or (Team^.Clan^.TurnNumber <= Ammoz[Ammo^[slot, i].AmmoType].SkipTurns)) do inc(i); 
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

54 

b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

55 
if i <= cMaxSlotAmmoIndex then 
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

56 
begin 
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

57 
CurSlot:= slot; 
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

58 
CurAmmo:= i 
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

59 
end 
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

60 
end 
1710
cecb3cc93251
Fix angle restriction applying to rc plane when choosing via ammomenu
unc0rr
parents:
1689
diff
changeset

61 
end 
783  62 
end; 
63 

64 
procedure HHSetWeapon(Gear: PGear); 

65 
var t: LongInt; 

66 
weap: TAmmoType; 

67 
begin 

68 
weap:= TAmmoType(Gear^.MsgParam); 

941
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

69 

b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

70 
if PHedgehog(Gear^.Hedgehog)^.Team^.Clan^.TurnNumber <= Ammoz[weap].SkipTurns then exit; // weapon isn't activated yet 
b5222ddafe1f
 Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
931
diff
changeset

71 

783  72 
Gear^.MsgParam:= Ammoz[weap].Slot; 
73 

74 
t:= cMaxSlotAmmoIndex; 

75 

76 
Gear^.Message:= Gear^.Message and not gm_Weapon; 

77 

78 
with PHedgehog(Gear^.Hedgehog)^ do 

926
d231e007452a
Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents:
925
diff
changeset

79 
while (Ammo^[CurSlot, CurAmmo].AmmoType <> weap) and (t >= 0) do 
d231e007452a
Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents:
925
diff
changeset

80 
begin 
d231e007452a
Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents:
925
diff
changeset

81 
ChangeAmmo(Gear); 
d231e007452a
Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents:
925
diff
changeset

82 
dec(t) 
1710
cecb3cc93251
Fix angle restriction applying to rc plane when choosing via ammomenu
unc0rr
parents:
1689
diff
changeset

83 
end; 
cecb3cc93251
Fix angle restriction applying to rc plane when choosing via ammomenu
unc0rr
parents:
1689
diff
changeset

84 

cecb3cc93251
Fix angle restriction applying to rc plane when choosing via ammomenu
unc0rr
parents:
1689
diff
changeset

85 
ApplyAmmoChanges(PHedgehog(Gear^.Hedgehog)^) 
783  86 
end; 
87 

926
d231e007452a
Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents:
925
diff
changeset

88 
procedure HHSetTimer(Gear: PGear); 
d231e007452a
Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents:
925
diff
changeset

89 
begin 
d231e007452a
Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents:
925
diff
changeset

90 
Gear^.Message:= Gear^.Message and not gm_Timer; 
d231e007452a
Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents:
925
diff
changeset

91 
with PHedgehog(Gear^.Hedgehog)^ do 
d231e007452a
Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents:
925
diff
changeset

92 
if (Ammo^[CurSlot, CurAmmo].Propz and ammoprop_Timerable) <> 0 then 
d231e007452a
Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents:
925
diff
changeset

93 
begin 
d231e007452a
Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents:
925
diff
changeset

94 
Ammo^[CurSlot, CurAmmo].Timer:= 1000 * Gear^.MsgParam; 
d231e007452a
Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents:
925
diff
changeset

95 
with CurrentTeam^ do 
d231e007452a
Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents:
925
diff
changeset

96 
ApplyAmmoChanges(Hedgehogs[CurrHedgehog]); 
d231e007452a
Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents:
925
diff
changeset

97 
end; 
d231e007452a
Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents:
925
diff
changeset

98 
end; 
d231e007452a
Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents:
925
diff
changeset

99 

d231e007452a
Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents:
925
diff
changeset

100 

32
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

101 
procedure Attack(Gear: PGear); 
351  102 
var xx, yy: hwFloat; 
2017  103 
tmpGear: PGear; 
32
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

104 
begin 
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

105 
with Gear^, 
351  106 
PHedgehog(Gear^.Hedgehog)^ do 
32
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

107 
begin 
95  108 
if ((State and gstHHDriven) <> 0)and 
542  109 
((State and (gstAttacked or gstHHChooseTarget)) = 0)and 
836  110 
(((State and gstMoving) = 0) or ((Ammo^[CurSlot, CurAmmo].Propz and ammoprop_AttackInMove) <> 0))and 
111 
((TargetPoint.X <> NoPointX) or ((Ammo^[CurSlot, CurAmmo].Propz and ammoprop_NeedTarget) = 0)) then 

32
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

112 
begin 
95  113 
State:= State or gstAttacking; 
114 
if Power = cMaxPower then Message:= Message and not gm_Attack 

351  115 
else if (Ammo^[CurSlot, CurAmmo].Propz and ammoprop_Power) = 0 then Message:= Message and not gm_Attack 
95  116 
else begin 
117 
if Power = 0 then 

118 
begin 

351  119 
AttackBar:= CurrentTeam^.AttackBar; 
1669  120 
PlaySound(sndThrowPowerUp, false, nil) 
95  121 
end; 
122 
inc(Power) 

123 
end; 

124 
if ((Message and gm_Attack) <> 0) then exit; 

351  125 

126 
if (Ammo^[CurSlot, CurAmmo].Propz and ammoprop_Power) <> 0 then 

32
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

127 
begin 
282  128 
StopSound(sndThrowPowerUp); 
1669  129 
PlaySound(sndThrowRelease, false, nil); 
32
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

130 
end; 
1922  131 

519  132 
xx:= SignAs(AngleSin(Angle), dX); 
900  133 
yy:= AngleCos(Angle); 
134 

135 
if ((Gear^.State and gstHHHJump) <> 0) then xx:=  xx; 

351  136 
case Ammo^[CurSlot, CurAmmo].AmmoType of 
137 
amGrenade: FollowGear:= AddGear(hwRound(X), hwRound(Y), gtAmmo_Bomb, 0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, Ammo^[CurSlot, CurAmmo].Timer); 

138 
amClusterBomb: FollowGear:= AddGear(hwRound(X), hwRound(Y), gtClusterBomb, 0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, Ammo^[CurSlot, CurAmmo].Timer); 

139 
amBazooka: FollowGear:= AddGear(hwRound(X), hwRound(Y), gtAmmo_Grenade, 0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0); 

140 
amUFO: FollowGear:= AddGear(hwRound(X), hwRound(Y), gtUFO, 0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0); 

32
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

141 
amShotgun: begin 
1669  142 
PlaySound(sndShotgunReload, false, nil); 
351  143 
CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtShotgunShot, 0, xx * _0_5, yy * _0_5, 0); 
32
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

144 
end; 
498  145 
amPickHammer: CurAmmoGear:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y) + cHHRadius, gtPickHammer, 0, _0, _0, 0); 
866  146 
amSkip: ParseCommand('/skip', true); 
351  147 
amRope: CurAmmoGear:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtRope, 0, xx, yy, 0); 
800  148 
amMine: begin 
149 
AddGear(hwRound(X) + hwSign(dX) * 7, hwRound(Y), gtMine, 0, SignAs(_0_02, dX), _0, 3000); 

1682  150 
PlaySound(sndLaugh, false, CurrentTeam^.voicepack) 
800  151 
end; 
876  152 
amDEagle: CurAmmoGear:= AddGear(hwRound(X + xx * cHHRadius), hwRound(Y + yy * cHHRadius), gtDEagleShot, 0, xx * _0_5, yy * _0_5, 0); 
2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2017
diff
changeset

153 
amSniperRifle: CurAmmoGear:= AddGear(hwRound(X + xx * cHHRadius), hwRound(Y + yy * cHHRadius), gtSniperRifleShot, 0, xx * _0_5, yy * _0_5, 0); 
1112  154 
amDynamite: begin 
155 
AddGear(hwRound(X) + hwSign(dX) * 7, hwRound(Y), gtDynamite, 0, SignAs(_0_03, dX), _0, 5000); 

1682  156 
PlaySound(sndLaugh, false, CurrentTeam^.voicepack) 
1112  157 
end; 
979
edb8f208c1d9
Fix firepunch direction when attacking from high jump
unc0rr
parents:
958
diff
changeset

158 
amFirePunch: CurAmmoGear:= AddGear(hwRound(X) + hwSign(dX) * 10, hwRound(Y), gtFirePunch, 0, xx, _0, 0); 
1712  159 
amWhip: begin 
160 
CurAmmoGear:= AddGear(hwRound(X) + hwSign(dX) * 10, hwRound(Y), gtWhip, 0, SignAs(_1, dX),  _0_8, 0); 

161 
PlaySound(sndWhipCrack, false, nil) 

162 
end; 

854  163 
amBaseballBat: CurAmmoGear:= AddGear(hwRound(X) + hwSign(dX) * 10, hwRound(Y), gtShover, 0, xx * _0_5, yy * _0_5, 0); 
498  164 
amParachute: CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtParachute, 0, _0, _0, 0); 
165 
amAirAttack: AddGear(Ammo^[CurSlot, CurAmmo].Pos, 0, gtAirAttack, 0, _0, _0, 0); 

166 
amMineStrike: AddGear(Ammo^[CurSlot, CurAmmo].Pos, 0, gtAirAttack, 1, _0, _0, 0); 

167 
amBlowTorch: CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtBlowTorch, 0, SignAs(_0_5, dX), _0, 0); 

168 
amGirder: CurAmmoGear:= AddGear(0, 0, gtGirder, Ammo^[CurSlot, CurAmmo].Pos, _0, _0, 0); 

520  169 
amTeleport: CurAmmoGear:= AddGear(0, 0, gtTeleport, 0, _0, _0, 0); 
534  170 
amSwitch: CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtSwitcher, 0, _0, _0, 0); 
924  171 
amMortar: FollowGear:= AddGear(hwRound(X), hwRound(Y), gtMortar, 0, xx*cMaxPower/cPowerDivisor, yy*cMaxPower/cPowerDivisor, 0); 
1712  172 
amRCPlane: begin 
173 
CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtRCPlane, 0, xx * cMaxPower / cPowerDivisor / 4, yy * cMaxPower / cPowerDivisor / 4, 0); 

174 
PlaySound(sndRCPlane, true, nil) 

175 
end; 

984  176 
amKamikaze: CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtKamikaze, 0, xx * _0_5, yy * _0_5, 0); 
1112  177 
amCake: begin 
178 
CurAmmoGear:= AddGear(hwRound(X) + hwSign(dX) * 3, hwRound(Y), gtCake, 0, xx, _0, 0); 

1682  179 
PlaySound(sndLaugh, false, CurrentTeam^.voicepack) 
1112  180 
end; 
1286  181 
amSeduction: CurAmmoGear:= AddGear(hwRound(X + xx * cHHRadius * 2), hwRound(Y + yy * cHHRadius * 2), gtSeduction, 0, xx * _0_4, yy * _0_4, 0); 
1261  182 
amWatermelon: FollowGear:= AddGear(hwRound(X), hwRound(Y), gtWatermelon, 0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, Ammo^[CurSlot, CurAmmo].Timer); 
1263  183 
amHellishBomb: FollowGear:= AddGear(hwRound(X), hwRound(Y), gtHellishBomb, 0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 5000); 
1507  184 
amNapalm: AddGear(Ammo^[CurSlot, CurAmmo].Pos, 0, gtAirAttack, 2, _0, _0, 0); 
1573  185 
amDrill: FollowGear:= AddGear(hwRound(X), hwRound(Y), gtDrill, 0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0); 
1601  186 
amBallgun: CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtBallgun, 0, xx * _0_5, yy * _0_5, 0); 
1849  187 
amLowGravity: cGravity:= cMaxWindSpeed / 2; 
188 
amExtraDamage: cDamageModifier:= _1_5; 

189 
amInvulnerable: Invulnerable:= true; 

190 
amExtraTime: TurnTimeLeft:= TurnTimeLeft + 30000; 

1854  191 
amLaserSight: cLaserSighting:= true; 
2017  192 
amVampiric: cVampiric:= true; 
32
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

193 
end; 
829  194 

195 
uStats.AmmoUsed(Ammo^[CurSlot, CurAmmo].AmmoType); 

196 

2017  197 
if not (SpeechText = '') then 
198 
begin 

199 
tmpGear:= AddGear(0, 0, gtSpeechBubble, 0, _0, _0, 0); 

200 
tmpGear^.Text:= SpeechText; 

201 
tmpGear^.Hedgehog:= CurrentHedgehog; 

202 
tmpGear^.State:= SpeechType; 

203 
SpeechText:= '' 

204 
end; 

205 

32
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

206 
Power:= 0; 
930  207 
if (CurAmmoGear <> nil) 
208 
and (((Ammo^[CurSlot, CurAmmo].Propz) and ammoprop_AltUse) = 0){check for dropping ammo from rope} then 

32
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

209 
begin 
930  210 
CurAmmoGear^.Ammo:= @(Ammo^[CurSlot, CurAmmo]); 
82  211 
Message:= Message or gm_Attack; 
351  212 
CurAmmoGear^.Message:= Message 
82  213 
end else begin 
351  214 
if not CurrentTeam^.ExtDriven and 
215 
((Ammo^[CurSlot, CurAmmo].Propz and ammoprop_Power) <> 0) then SendIPC('a'); 

1849  216 
AfterAttack; 
82  217 
end 
1849  218 
end else Message:= Message and not gm_Attack; 
32
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

219 
end 
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

220 
end; 
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

221 

78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

222 
procedure AfterAttack; 
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

223 
begin 
602  224 
with CurrentHedgehog^.Gear^, 
1286  225 
CurrentHedgehog^ do 
226 
begin 

1849  227 
State:= State and not gstAttacking; 
1883
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

228 
if ((Ammo^[CurSlot, CurAmmo].Propz) and ammoprop_Utility) = 0 then 
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

229 
begin 
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

230 
Inc(AttacksNum); 
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

231 
if (Ammo^[CurSlot, CurAmmo].NumPerTurn >= AttacksNum) or 
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

232 
((GameFlags and gfMultiWeapon) <> 0) then 
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

233 
isInMultiShoot:= true 
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

234 
else 
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

235 
begin 
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

236 
TurnTimeLeft:= Ammoz[Ammo^[CurSlot, CurAmmo].AmmoType].TimeAfterTurn; 
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

237 
State:= State or gstAttacked; 
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

238 
OnUsedAmmo(CurrentHedgehog^); 
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

239 
end; 
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

240 
end 
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

241 
else 
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

242 
begin 
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

243 
OnUsedAmmo(CurrentHedgehog^); 
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

244 
ApplyAmmoChanges(CurrentHedgehog^); 
7c7476f56114
 Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents:
1865
diff
changeset

245 
end; 
1286  246 
AttackBar:= 0; 
247 
end 

32
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

248 
end; 
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

249 

42  250 
//////////////////////////////////////////////////////////////////////////////// 
863  251 
procedure doStepHedgehogDead(Gear: PGear); 
868  252 
const frametime = 200; 
253 
timertime = frametime * 6; 

863  254 
begin 
255 
if Gear^.Timer > 1 then 

256 
begin 

257 
AllInactive:= false; 

868  258 
dec(Gear^.Timer); 
259 
if (Gear^.Timer mod frametime) = 0 then inc(Gear^.Pos) 

863  260 
end else 
261 
if Gear^.Timer = 1 then 

262 
begin 

263 
Gear^.State:= Gear^.State or gstNoDamage; 

264 
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, EXPLAutoSound); 

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

266 
DeleteGear(Gear); 

267 
SetAllToActive 

268 
end else // Gear^.Timer = 0 

269 
begin 

270 
AllInactive:= false; 

868  271 
Gear^.Z:= cCurrHHZ; 
272 
RemoveGearFromList(Gear); 

273 
InsertGearToList(Gear); 

1669  274 
PlaySound(sndByeBye, false, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack); 
868  275 
Gear^.Pos:= 0; 
276 
Gear^.Timer:= timertime 

863  277 
end 
278 
end; 

279 

280 
//////////////////////////////////////////////////////////////////////////////// 

42  281 
procedure PickUp(HH, Gear: PGear); 
295  282 
var s: shortstring; 
283 
a: TAmmoType; 

42  284 
begin 
351  285 
Gear^.Message:= gm_Destroy; 
286 
case Gear^.Pos of 

1964  287 
posCaseUtility, 
295  288 
posCaseAmmo: begin 
351  289 
a:= TAmmoType(Gear^.State); 
553
5478386d935f
 Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
549
diff
changeset

290 
AddAmmo(PHedgehog(HH^.Hedgehog)^, a); 
1072  291 
if (not (PHedgehog(HH^.Hedgehog)^.Team^.ExtDriven 
292 
or (PHedgehog(HH^.Hedgehog)^.BotLevel > 0))) 

293 
or (GameType = gmtDemo) then 

836  294 
begin 
295 
s:= trammo[Ammoz[a].NameId] + '(+' + IntToStr(Ammoz[a].NumberInCase) + ')'; 

296 
AddCaption(s, PHedgehog(HH^.Hedgehog)^.Team^.Clan^.Color, capgrpAmmoinfo); 

297 
end 

295  298 
end; 
42  299 
posCaseHealth: begin 
351  300 
inc(HH^.Health, Gear^.Health); 
301 
str(Gear^.Health, s); 

295  302 
s:= '+' + s; 
549  303 
AddCaption(s, PHedgehog(HH^.Hedgehog)^.Team^.Clan^.Color, capgrpAmmoinfo); 
351  304 
RenderHealth(PHedgehog(HH^.Hedgehog)^); 
305 
RecountTeamHealth(PHedgehog(HH^.Hedgehog)^.Team) 

42  306 
end; 
435  307 
end 
42  308 
end; 
32
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
16
diff
changeset

309 

4  310 
const StepTicks: LongWord = 0; 
311 

302  312 
procedure HedgehogStep(Gear: PGear); 
371  313 
var PrevdX: LongInt; 
302  314 
begin 
542  315 
if ((Gear^.State and (gstAttacking or gstMoving)) = 0) then 
4  316 
begin 
408  317 
if isCursorVisible then 
318 
with PHedgehog(Gear^.Hedgehog)^ do 

319 
with Ammo^[CurSlot, CurAmmo] do 

320 
begin 

542  321 
if (Gear^.Message and gm_Left ) <> 0 then 
408  322 
Pos:= (Pos + Ammoz[AmmoType].PosCount  1) mod Ammoz[AmmoType].PosCount 
323 
else 

542  324 
if (Gear^.Message and gm_Right ) <> 0 then 
408  325 
Pos:= (Pos + 1) mod Ammoz[AmmoType].PosCount 
326 
else exit; 

423  327 
StepTicks:= 200; 
408  328 
exit 
329 
end; 

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

330 

1033  331 
if ((Gear^.Message and gm_Animate) <> 0) then 
332 
begin 

333 
Gear^.Message:= 0; 

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

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

336 
Gear^.Timer:= 0; 

337 
Gear^.Pos:= 0 

338 
end; 

339 

351  340 
if ((Gear^.Message and gm_LJump ) <> 0) then 
4  341 
begin 
542  342 
Gear^.Message:= Gear^.Message and not gm_LJump; 
505
fcba7d7aea0d
Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents:
498
diff
changeset

343 
DeleteCI(Gear); 
68  344 
if not TestCollisionYwithGear(Gear, 1) then 
498  345 
if not TestCollisionXwithXYShift(Gear, _0, 2, hwSign(Gear^.dX)) then Gear^.Y:= Gear^.Y  _2 else 
346 
if not TestCollisionXwithXYShift(Gear, _0, 1, hwSign(Gear^.dX)) then Gear^.Y:= Gear^.Y  _1; 

351  347 
if not (TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) 
68  348 
or TestCollisionYwithGear(Gear, 1)) then 
4  349 
begin 
351  350 
Gear^.dY:= _0_15; 
2024
2985f3bd18b7
Disable long jump in artillery mode, make snipre rifle single shot
nemo
parents:
2023
diff
changeset

351 
if not cArtillery then Gear^.dX:= SignAs(_0_15, Gear^.dX); 
542  352 
Gear^.State:= Gear^.State or gstMoving or gstHHJumping; 
1669  353 
PlaySound(sndJump1, false, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack); 
4  354 
exit 
355 
end; 

356 
end; 

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

357 

351  358 
if ((Gear^.Message and gm_HJump ) <> 0) then 
4  359 
begin 
505
fcba7d7aea0d
Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents:
498
diff
changeset

360 
DeleteCI(Gear); 
542  361 
Gear^.Message:= Gear^.Message and not gm_HJump; 
855
8842c71d16bf
 Fix too long delay between shotgun and deagle shots
unc0rr
parents:
854
diff
changeset

362 

8842c71d16bf
 Fix too long delay between shotgun and deagle shots
unc0rr
parents:
854
diff
changeset

363 
Gear^.dY:= _0_2; 
8842c71d16bf
 Fix too long delay between shotgun and deagle shots
unc0rr
parents:
854
diff
changeset

364 
SetLittle(Gear^.dX); 
8842c71d16bf
 Fix too long delay between shotgun and deagle shots
unc0rr
parents:
854
diff
changeset

365 
Gear^.State:= Gear^.State or gstMoving or gstHHJumping; 
1669  366 
PlaySound(sndJump3, false, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack); 
855
8842c71d16bf
 Fix too long delay between shotgun and deagle shots
unc0rr
parents:
854
diff
changeset

367 
exit 
4  368 
end; 
505
fcba7d7aea0d
Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents:
498
diff
changeset

369 

351  370 
PrevdX:= hwSign(Gear^.dX); 
371 
if (Gear^.Message and gm_Left )<>0 then Gear^.dX:= cLittle else 

372 
if (Gear^.Message and gm_Right )<>0 then Gear^.dX:= cLittle else exit; 

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

373 

74  374 
StepTicks:= cHHStepTicks; 
610  375 
if PrevdX <> hwSign(Gear^.dX) then 
376 
begin 

377 
FollowGear:= Gear; 

378 
exit 

379 
end; 

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

838  381 

351  382 
PHedgehog(Gear^.Hedgehog)^.visStepPos:= (PHedgehog(Gear^.Hedgehog)^.visStepPos + 1) and 7; 
383 
if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then 

4  384 
begin 
498  385 
if not (TestCollisionXwithXYShift(Gear, _0, 6, hwSign(Gear^.dX)) 
386 
or TestCollisionYwithGear(Gear, 1)) then Gear^.Y:= Gear^.Y  _1; 

387 
if not (TestCollisionXwithXYShift(Gear, _0, 5, hwSign(Gear^.dX)) 

388 
or TestCollisionYwithGear(Gear, 1)) then Gear^.Y:= Gear^.Y  _1; 

389 
if not (TestCollisionXwithXYShift(Gear, _0, 4, hwSign(Gear^.dX)) 

390 
or TestCollisionYwithGear(Gear, 1)) then Gear^.Y:= Gear^.Y  _1; 

391 
if not (TestCollisionXwithXYShift(Gear, _0, 3, hwSign(Gear^.dX)) 

392 
or TestCollisionYwithGear(Gear, 1)) then Gear^.Y:= Gear^.Y  _1; 

393 
if not (TestCollisionXwithXYShift(Gear, _0, 2, hwSign(Gear^.dX)) 

394 
or TestCollisionYwithGear(Gear, 1)) then Gear^.Y:= Gear^.Y  _1; 

395 
if not (TestCollisionXwithXYShift(Gear, _0, 1, hwSign(Gear^.dX)) 

396 
or TestCollisionYwithGear(Gear, 1)) then Gear^.Y:= Gear^.Y  _1; 

4  397 
end; 
1528  398 

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

399 
if (not cArtillery) and (not TestCollisionXwithGear(Gear, hwSign(Gear^.dX))) then Gear^.X:= Gear^.X + SignAs(_1, Gear^.dX); 
62  400 
SetAllHHToActive; 
37  401 

68  402 
if not TestCollisionYwithGear(Gear, 1) then 
4  403 
begin 
498  404 
Gear^.Y:= Gear^.Y + _1; 
68  405 
if not TestCollisionYwithGear(Gear, 1) then 
4  406 
begin 
498  407 
Gear^.Y:= Gear^.Y + _1; 
68  408 
if not TestCollisionYwithGear(Gear, 1) then 
4  409 
begin 
498  410 
Gear^.Y:= Gear^.Y + _1; 
68  411 
if not TestCollisionYwithGear(Gear, 1) then 
4  412 
begin 
498  413 
Gear^.Y:= Gear^.Y + _1; 
68  414 
if not TestCollisionYwithGear(Gear, 1) then 
4  415 
begin 
498  416 
Gear^.Y:= Gear^.Y + _1; 
68  417 
if not TestCollisionYwithGear(Gear, 1) then 
4  418 
begin 
498  419 
Gear^.Y:= Gear^.Y + _1; 
68  420 
if not TestCollisionYwithGear(Gear, 1) then 
4  421 
begin 
498  422 
Gear^.Y:= Gear^.Y  _6; 
423 
Gear^.dY:= _0; 

542  424 
Gear^.State:= Gear^.State or gstMoving; 
505
fcba7d7aea0d
Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents:
498
diff
changeset

425 
exit 
4  426 
end; 
427 
end 

428 
end 

429 
end 

430 
end 

431 
end 

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

432 
end; 
fcba7d7aea0d
Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents:
498
diff
changeset

433 
AddGearCI(Gear) 
4  434 
end 
435 
end; 

436 

303
1659c4aad5ab
Now blow torch angle can be changed during blowing :)
unc0rr
parents:
302
diff
changeset

437 
procedure HedgehogChAngle(Gear: PGear); 
958  438 
var da: LongWord; 
303
1659c4aad5ab
Now blow torch angle can be changed during blowing :)
unc0rr
parents:
302
diff
changeset

439 
begin 
958  440 
with PHedgehog(Gear^.Hedgehog)^ do 
441 
if (Ammo^[CurSlot, CurAmmo].AmmoType = amRope) 

442 
and ((Gear^.State and (gstMoving or gstHHJumping)) = gstMoving) then da:= 2 else da:= 1; 

443 

1639  444 
if (((Gear^.Message and gm_Precise) = 0) or ((GameTicks mod 5) = 1)) then 
445 
if ((Gear^.Message and gm_Up) <> 0) and (Gear^.Angle  da >= CurMinAngle) then dec(Gear^.Angle, da) 

446 
else 

1689  447 
if ((Gear^.Message and gm_Down) <> 0) and (Gear^.Angle + da <= CurMaxAngle) then inc(Gear^.Angle, da) 
303
1659c4aad5ab
Now blow torch angle can be changed during blowing :)
unc0rr
parents:
302
diff
changeset

448 
end; 
1659c4aad5ab
Now blow torch angle can be changed during blowing :)
unc0rr
parents:
302
diff
changeset

449 

302  450 
procedure doStepHedgehog(Gear: PGear); forward; 
451 
//////////////////////////////////////////////////////////////////////////////// 

538  452 
procedure doStepHedgehogMoving(Gear: PGear); 
545  453 
var isFalling: boolean; 
538  454 
begin 
855
8842c71d16bf
 Fix too long delay between shotgun and deagle shots
unc0rr
parents:
854
diff
changeset

455 
isFalling:= (Gear^.dY.isNegative) or not TestCollisionYKick(Gear, 1); 
542  456 
if isFalling then 
538  457 
begin 
458 
if (Gear^.dY.isNegative) and TestCollisionYKick(Gear, 1) then Gear^.dY:= _0; 

542  459 
Gear^.State:= Gear^.State or gstMoving; 
538  460 
Gear^.dY:= Gear^.dY + cGravity 
461 
end else 

462 
begin 

463 
if ((hwAbs(Gear^.dX) + hwAbs(Gear^.dY)) < _0_55) 

464 
and ((Gear^.State and gstHHJumping) <> 0) then SetLittle(Gear^.dX); 

465 

540  466 
if not Gear^.dY.isNegative then 
467 
begin 

468 
CheckHHDamage(Gear); 

790
a6f442173822
Make high jump behaviour like in worms (back somersault)
unc0rr
parents:
783
diff
changeset

469 

a6f442173822
Make high jump behaviour like in worms (back somersault)
unc0rr
parents:
783
diff
changeset

470 
if ((Gear^.State and gstHHHJump) <> 0) and 
a6f442173822
Make high jump behaviour like in worms (back somersault)
unc0rr
parents:
783
diff
changeset

471 
(Gear^.dX.QWordValue < _0_02.QWordValue) then Gear^.dX.isNegative:= not Gear^.dX.isNegative; // landing after high jump 
a6f442173822
Make high jump behaviour like in worms (back somersault)
unc0rr
parents:
783
diff
changeset

472 

542  473 
Gear^.State:= Gear^.State and not (gstHHJumping or gstHHHJump); 
540  474 
Gear^.dY:= _0; 
475 
end else Gear^.dY:= Gear^.dY + cGravity; 

538  476 

477 
if ((Gear^.State and gstMoving) <> 0) then Gear^.dX:= Gear^.dX * Gear^.Friction 

478 
end; 

479 

480 
if (Gear^.State <> 0) then DeleteCI(Gear); 

783  481 

538  482 
if (Gear^.State and gstMoving) <> 0 then 
483 
if TestCollisionXKick(Gear, hwSign(Gear^.dX)) then 

542  484 
if not isFalling then 
538  485 
if hwAbs(Gear^.dX) > _0_01 then 
486 
if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX))  Gear^.dX, 1, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_96; Gear^.Y:= Gear^.Y  _1 end else 

487 
if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX))  Gear^.dX, 2, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_93; Gear^.Y:= Gear^.Y  _2 end else 

488 
if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX))  Gear^.dX, 3, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_9 ; Gear^.Y:= Gear^.Y  _3 end else 

489 
if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX))  Gear^.dX, 4, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_87; Gear^.Y:= Gear^.Y  _4 end else 

490 
if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX))  Gear^.dX, 5, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_84; Gear^.Y:= Gear^.Y  _5 end else 

491 
if hwAbs(Gear^.dX) > _0_02 then Gear^.dX:= Gear^.Elasticity * Gear^.dX 

492 
else begin 

493 
Gear^.State:= Gear^.State and not gstMoving; 

494 
SetLittle(Gear^.dX) 

495 
end 

496 
else begin 

497 
Gear^.State:= Gear^.State and not gstMoving; 

498 
SetLittle(Gear^.dX) 

499 
end 

1518  500 
else if (hwAbs(Gear^.dX) > cLittle) 
501 
and ((Gear^.State and gstHHJumping) = 0) 

502 
then Gear^.dX:= Gear^.Elasticity * Gear^.dX 

503 
else SetLittle(Gear^.dX); 

538  504 

542  505 
if (not isFalling) and 
538  506 
(hwAbs(Gear^.dX) + hwAbs(Gear^.dY) < _0_03) then 
507 
begin 

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

508 
Gear^.State:= Gear^.State and not gstWinner; 
538  509 
Gear^.State:= Gear^.State and not gstMoving; 
510 
SetLittle(Gear^.dX); 

511 
Gear^.dY:= _0 

512 
end else Gear^.State:= Gear^.State or gstMoving; 

513 

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

515 
begin 

516 
Gear^.State:= Gear^.State and not gstAnimation; 

2017  517 
// ARTILLERY but not being moved by explosions 
538  518 
Gear^.X:= Gear^.X + Gear^.dX; 
519 
Gear^.Y:= Gear^.Y + Gear^.dY; 

520 
if (not Gear^.dY.isNegative) and 

521 
(not TestCollisionYKick(Gear, 1)) and 

522 
TestCollisionYwithXYShift(Gear, 0, 1, 1) then 

523 
begin 

524 
CheckHHDamage(Gear); 

525 
Gear^.dY:= _0; 

526 
Gear^.Y:= Gear^.Y + _1 

527 
end; 

1658
208a3258afdf
Fix a bug with visible cursor when hedgehog is dead
unc0rr
parents:
1645
diff
changeset

528 
CheckGearDrowning(Gear); 
208a3258afdf
Fix a bug with visible cursor when hedgehog is dead
unc0rr
parents:
1645
diff
changeset

529 
if (Gear^.State and gstDrowning) <> 0 then isCursorVisible:= false 
538  530 
end 
531 
end; 

532 

302  533 
procedure doStepHedgehogDriven(Gear: PGear); 
534 
var t: PGear; 

1519
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

535 
wasJumping: boolean; 
302  536 
begin 
558
b2b840eeb10a
Fix bug when hedgehog moves not right after it is kicked
unc0rr
parents:
553
diff
changeset

537 
if not isInMultiShoot then 
b2b840eeb10a
Fix bug when hedgehog moves not right after it is kicked
unc0rr
parents:
553
diff
changeset

538 
AllInactive:= false 
b2b840eeb10a
Fix bug when hedgehog moves not right after it is kicked
unc0rr
parents:
553
diff
changeset

539 
else 
b2b840eeb10a
Fix bug when hedgehog moves not right after it is kicked
unc0rr
parents:
553
diff
changeset

540 
Gear^.Message:= 0; 
505
fcba7d7aea0d
Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents:
498
diff
changeset

541 

1035  542 
if (TurnTimeLeft = 0) or (Gear^.Damage > 0) then 
1645  543 
begin 
544 
TurnTimeLeft:= 0; 

545 
isCursorVisible:= false; 

1749
7170f626e9d6
Fix crash when attackbar wasn't deleted, but hedgehog gear was
unc0rr
parents:
1712
diff
changeset

546 
Gear^.State:= Gear^.State and not (gstHHDriven or gstAnimation or gstAttacking); 
7170f626e9d6
Fix crash when attackbar wasn't deleted, but hedgehog gear was
unc0rr
parents:
1712
diff
changeset

547 
AttackBar:= 0; 
1645  548 
if Gear^.Damage > 0 then 
549 
Gear^.State:= Gear^.State and not (gstHHJumping or gstHHHJump); 

550 
exit 

551 
end; 

1035  552 

1033  553 
if (Gear^.State and gstAnimation) <> 0 then 
554 
begin 

555 
Gear^.Message:= 0; 

556 
inc(Gear^.Timer); 

557 
if Gear^.Timer = 125 then 

558 
begin 

559 
Gear^.Timer:= 0; 

560 
inc(Gear^.Pos); 

1034  561 
if Gear^.Pos = Wavez[TWave(Gear^.Tag)].FramesCount then 
1033  562 
Gear^.State:= Gear^.State and not gstAnimation 
563 
end; 

564 
exit 

565 
end; 

566 

836  567 
if ((Gear^.State and gstMoving) <> 0) 
568 
or (StepTicks = cHHStepTicks) 

835
6f567934cc44
Automatically use parachute when vertical speed is high enough
unc0rr
parents:
829
diff
changeset

569 
or (CurAmmoGear <> nil) then // we're moving 
836  570 
begin 
839  571 
with PHedgehog(Gear^.Hedgehog)^ do 
572 
if (CurAmmoGear = nil) 

573 
and (Gear^.dY > _0_39) 

574 
and (Ammo^[CurSlot, CurAmmo].AmmoType = amParachute) then Gear^.Message:= Gear^.Message or gm_Attack; 

836  575 
// check for case with ammo 
576 
t:= CheckGearNear(Gear, gtCase, 36, 36); 

577 
if t <> nil then 

578 
PickUp(Gear, t) 

855
8842c71d16bf
 Fix too long delay between shotgun and deagle shots
unc0rr
parents:
854
diff
changeset

579 
end; 
302  580 

930  581 
if (CurAmmoGear = nil) then 
582 
if (((Gear^.Message and gm_Attack) <> 0) 

583 
or ((Gear^.State and gstAttacking) <> 0)) then 

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

585 
else 

586 
else with PHedgehog(Gear^.Hedgehog)^ do 

1519
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

587 
if ((CurAmmoGear^.Ammo^.Propz and ammoprop_AltAttack) <> 0) 
930  588 
and ((Gear^.Message and gm_LJump) <> 0) 
931  589 
and (((Ammo^[CurSlot, CurAmmo].Propz) and ammoprop_AltUse) <> 0) then 
590 
begin 

591 
Gear^.Message:= Gear^.Message and not gm_LJump; 

592 
Attack(Gear) 

593 
end; 

930  594 

595 
if (CurAmmoGear = nil) 

596 
or ((CurAmmoGear^.Ammo^.Propz and ammoprop_AltAttack) <> 0) then 

597 
begin 

1710
cecb3cc93251
Fix angle restriction applying to rc plane when choosing via ammomenu
unc0rr
parents:
1689
diff
changeset

598 
if ((Gear^.Message and gm_Slot) <> 0) then 
cecb3cc93251
Fix angle restriction applying to rc plane when choosing via ammomenu
unc0rr
parents:
1689
diff
changeset

599 
begin 
cecb3cc93251
Fix angle restriction applying to rc plane when choosing via ammomenu
unc0rr
parents:
1689
diff
changeset

600 
ChangeAmmo(Gear); 
cecb3cc93251
Fix angle restriction applying to rc plane when choosing via ammomenu
unc0rr
parents:
1689
diff
changeset

601 
ApplyAmmoChanges(PHedgehog(Gear^.Hedgehog)^) 
cecb3cc93251
Fix angle restriction applying to rc plane when choosing via ammomenu
unc0rr
parents:
1689
diff
changeset

602 
end; 
930  603 

604 
if ((Gear^.Message and gm_Weapon) <> 0) then HHSetWeapon(Gear); 

605 

606 
if ((Gear^.Message and gm_Timer) <> 0) then HHSetTimer(Gear); 

607 
end; 

608 

302  609 
if CurAmmoGear <> nil then 
610 
begin 

351  611 
CurAmmoGear^.Message:= Gear^.Message; 
302  612 
exit 
613 
end; 

614 

952  615 
if not isInMultiShoot then 
616 
HedgehogChAngle(Gear); 

926
d231e007452a
Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents:
925
diff
changeset

617 

542  618 
if (Gear^.State and gstMoving) <> 0 then 
1519
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

619 
begin 
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

620 
wasJumping:= ((Gear^.State and gstHHJumping) <> 0); 
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

621 

7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

622 
if ((Gear^.Message and gm_HJump) <> 0) and 
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

623 
wasJumping and 
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

624 
((Gear^.State and gstHHHJump) = 0) then 
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

625 
if (not (hwAbs(Gear^.dX) > cLittle)) and (Gear^.dY < _0_02) then 
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

626 
begin 
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

627 
Gear^.State:= Gear^.State or gstHHHJump or gstMoving; 
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

628 
Gear^.dY:= _0_25; 
2023
41d3afaa20c7
Artillery mode, sniper rifle, speech bubble tweaks, fix of rope bug introduced by enabling hats in jump
nemo
parents:
2017
diff
changeset

629 
if not cArtillery then Gear^.dX:= SignAs(_0_02, Gear^.dX); 
1669  630 
PlaySound(sndJump2, false, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack) 
1519
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

631 
end; 
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

632 

7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

633 
Gear^.Message:= Gear^.Message and not (gm_LJump or gm_HJump); 
538  634 

2024
2985f3bd18b7
Disable long jump in artillery mode, make snipre rifle single shot
nemo
parents:
2023
diff
changeset

635 
if (not cArtillery) and wasJumping and 
1519
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

636 
TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then SetLittle(Gear^.dX); 
538  637 

1519
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

638 
doStepHedgehogMoving(Gear); 
542  639 

1519
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

640 
if ((Gear^.State and (gstMoving or gstDrowning)) = 0) then 
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

641 
begin 
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

642 
AddGearCI(Gear); 
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

643 
if wasJumping then 
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

644 
StepTicks:= 410 
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

645 
else 
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

646 
StepTicks:= 95 
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

647 
end; 
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

648 
exit 
7b6adbe5266a
More delay after jump, less delay after small fall for hedgehog
unc0rr
parents:
1518
diff
changeset

649 
end; 
302  650 

1033  651 
if not isInMultiShoot then 
652 
begin 

653 
if StepTicks > 0 then dec(StepTicks); 

654 
if (StepTicks = 0) then HedgehogStep(Gear) 

655 
end 

302  656 
end; 
657 

4  658 
//////////////////////////////////////////////////////////////////////////////// 
659 
procedure doStepHedgehogFree(Gear: PGear); 

511  660 
var prevState: Longword; 
4  661 
begin 
511  662 
prevState:= Gear^.State; 
4  663 

538  664 
doStepHedgehogMoving(Gear); 
4  665 

1002  666 
if (Gear^.State and (gstMoving or gstDrowning)) <> 0 then 
865  667 
begin 
1012  668 
if Gear^.Damage > 0 then CalcRotationDirAngle(Gear); 
865  669 
AllInactive:= false; 
670 
exit 

671 
end; 

4  672 

863  673 
if (Gear^.Health = 0) then 
674 
begin 

868  675 
if PrvInactive then 
864  676 
begin 
677 
Gear^.Timer:= 0; 

868  678 
Gear^.State:= Gear^.State or gstHHDeath; 
679 
Gear^.doStep:= @doStepHedgehogDead; 

1347  680 
FollowGear:= Gear; 
868  681 
PrvInactive:= false; 
682 
AllInactive:= false 

864  683 
end; 
863  684 
exit 
685 
end; 

4  686 

1033  687 
if ((Gear^.State and gstWait) = 0) and 
863  688 
(prevState <> Gear^.State) then 
689 
begin 

1033  690 
Gear^.State:= gstWait; 
863  691 
Gear^.Timer:= 150 
692 
end else 

693 
begin 

694 
if Gear^.Timer = 0 then 

695 
begin 

696 
Gear^.State:= 0; 

697 
Gear^.Active:= false; 

698 
AddGearCI(Gear); 

699 
exit 

700 
end else dec(Gear^.Timer) 

701 
end; 

702 

703 
AllInactive:= false 

4  704 
end; 
705 

706 
//////////////////////////////////////////////////////////////////////////////// 

707 
procedure doStepHedgehog(Gear: PGear); 

708 
begin 

351  709 
if (Gear^.Message and gm_Destroy) <> 0 then 
1505  710 
begin 
711 
DeleteGear(Gear); 

712 
exit 

713 
end; 

714 

351  715 
if (Gear^.State and gstHHDriven) = 0 then doStepHedgehogFree(Gear) 
511  716 
else doStepHedgehogDriven(Gear) 
4  717 
end; 