author | koda |
Wed, 14 Oct 2009 22:12:02 +0000 | |
changeset 2443 | fececcbc2189 |
parent 2434 | 5faa05d99241 |
child 2453 | fdb76012b688 |
permissions | -rw-r--r-- |
393 | 1 |
(* |
1066 | 2 |
* Hedgewars, a free turn based strategy game |
883 | 3 |
* Copyright (c) 2006-2008 Andrey Korotaev <unC0Rr@gmail.com> |
393 | 4 |
* |
5 |
* This program is free software; you can redistribute it and/or modify |
|
6 |
* it under the terms of the GNU General Public License as published by |
|
7 |
* the Free Software Foundation; version 2 of the License |
|
8 |
* |
|
9 |
* This program is distributed in the hope that it will be useful, |
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
12 |
* GNU General Public License for more details. |
|
13 |
* |
|
14 |
* You should have received a copy of the GNU General Public License |
|
15 |
* along with this program; if not, write to the Free Software |
|
16 |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA |
|
17 |
*) |
|
18 |
||
288 | 19 |
unit uAmmos; |
20 |
interface |
|
534 | 21 |
uses uConsts, uTeams; |
288 | 22 |
{$INCLUDE options.inc} |
23 |
||
24 |
procedure AddAmmoStore(s: shortstring); |
|
25 |
procedure AssignStores; |
|
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
26 |
procedure AddAmmo(var Hedgehog: THedgehog; ammo: TAmmoType); |
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
27 |
function HHHasAmmo(var Hedgehog: THedgehog; Ammo: TAmmoType): boolean; |
371 | 28 |
procedure PackAmmo(Ammo: PHHAmmo; Slot: LongInt); |
534 | 29 |
procedure OnUsedAmmo(var Hedgehog: THedgehog); |
1964 | 30 |
procedure ApplyAngleBounds(var Hedgehog: THedgehog; AmmoType: TAmmoType); |
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
31 |
procedure ApplyAmmoChanges(var Hedgehog: THedgehog); |
1922 | 32 |
procedure SwitchNotHeldAmmo(var Hedgehog: THedgehog); |
783 | 33 |
procedure SetWeapon(weap: TAmmoType); |
1784 | 34 |
procedure DisableSomeWeapons; |
288 | 35 |
|
1966 | 36 |
var shoppa: Boolean = false; |
37 |
||
288 | 38 |
implementation |
783 | 39 |
uses uMisc, uGears, uWorld, uLocale, uConsole; |
295 | 40 |
type TAmmoCounts = array[TAmmoType] of Longword; |
288 | 41 |
var StoresList: array[0..Pred(cMaxHHs)] of PHHAmmo; |
42 |
StoreCnt: Longword = 0; |
|
43 |
||
295 | 44 |
procedure FillAmmoStore(Ammo: PHHAmmo; var cnts: TAmmoCounts); |
288 | 45 |
var mi: array[0..cMaxSlotIndex] of byte; |
46 |
a: TAmmoType; |
|
295 | 47 |
begin |
48 |
FillChar(mi, sizeof(mi), 0); |
|
49 |
FillChar(Ammo^, sizeof(Ammo^), 0); |
|
50 |
for a:= Low(TAmmoType) to High(TAmmoType) do |
|
51 |
if cnts[a] > 0 then |
|
52 |
begin |
|
53 |
TryDo(mi[Ammoz[a].Slot] <= cMaxSlotAmmoIndex, 'Ammo slot overflow', true); |
|
351 | 54 |
Ammo^[Ammoz[a].Slot, mi[Ammoz[a].Slot]]:= Ammoz[a].Ammo; |
55 |
Ammo^[Ammoz[a].Slot, mi[Ammoz[a].Slot]].Count:= cnts[a]; |
|
295 | 56 |
inc(mi[Ammoz[a].Slot]) |
57 |
end |
|
58 |
end; |
|
59 |
||
60 |
procedure AddAmmoStore(s: shortstring); |
|
2370 | 61 |
const probability: array [0..8] of LongWord = (0,20,30,60,100,150,200,400,600); |
295 | 62 |
var cnt: Longword; |
63 |
a: TAmmoType; |
|
64 |
ammos: TAmmoCounts; |
|
288 | 65 |
begin |
2370 | 66 |
TryDo(byte(s[0]) = byte(ord(High(TAmmoType))) * 2, 'Invalid ammo scheme (incompatible frontend)', true); |
288 | 67 |
|
68 |
inc(StoreCnt); |
|
69 |
TryDo(StoreCnt <= cMaxHHs, 'Ammo stores overflow', true); |
|
70 |
||
71 |
new(StoresList[Pred(StoreCnt)]); |
|
72 |
||
73 |
for a:= Low(TAmmoType) to High(TAmmoType) do |
|
74 |
begin |
|
2357
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
75 |
if a <> amNothing then |
1895 | 76 |
begin |
2370 | 77 |
Ammoz[a].Probability:= probability[byte(s[ord(a) + ord(High(TAmmoType))]) - byte('0')]; |
2434 | 78 |
if (TrainingFlags and tfIgnoreDelays) <> 0 then Ammoz[a].SkipTurns:= 0; |
2357
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
79 |
cnt:= byte(s[ord(a)]) - byte('0'); |
2370 | 80 |
// avoid things we already have infinite number |
2357
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
81 |
if cnt = 9 then |
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
82 |
begin |
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
83 |
cnt:= AMMO_INFINITE; |
2370 | 84 |
Ammoz[a].Probability:= 0 |
2357
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
85 |
end; |
2370 | 86 |
// avoid things we already have by scheme |
2357
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
87 |
if ((a = amLowGravity) and ((GameFlags and gfLowGravity) <> 0)) or |
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
88 |
((a = amInvulnerable) and ((GameFlags and gfInvulnerable) <> 0)) or |
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
89 |
((a = amLaserSight) and ((GameFlags and gfLaserSight) <> 0)) or |
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
90 |
((a = amVampiric) and ((GameFlags and gfVampiric) <> 0)) then |
2128 | 91 |
begin |
2357
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
92 |
cnt:= 0; |
2370 | 93 |
Ammoz[a].Probability:= 0 |
94 |
end; |
|
2357
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
95 |
ammos[a]:= cnt |
2360
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2357
diff
changeset
|
96 |
end else |
2370 | 97 |
ammos[a]:= AMMO_INFINITE |
288 | 98 |
end; |
295 | 99 |
|
100 |
FillAmmoStore(StoresList[Pred(StoreCnt)], ammos) |
|
288 | 101 |
end; |
102 |
||
103 |
function GetAmmoByNum(num: Longword): PHHAmmo; |
|
104 |
begin |
|
105 |
TryDo(num < StoreCnt, 'Invalid store number', true); |
|
351 | 106 |
exit(StoresList[num]) |
288 | 107 |
end; |
108 |
||
109 |
procedure AssignStores; |
|
547 | 110 |
var t: LongInt; |
288 | 111 |
i: Longword; |
112 |
begin |
|
547 | 113 |
for t:= 0 to Pred(TeamsCount) do |
114 |
with TeamsArray[t]^ do |
|
288 | 115 |
begin |
116 |
for i:= 0 to cMaxHHIndex do |
|
547 | 117 |
if Hedgehogs[i].Gear <> nil then |
118 |
Hedgehogs[i].Ammo:= GetAmmoByNum(Hedgehogs[i].AmmoStore); |
|
288 | 119 |
end |
120 |
end; |
|
121 |
||
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
122 |
procedure AddAmmo(var Hedgehog: THedgehog; ammo: TAmmoType); |
295 | 123 |
var ammos: TAmmoCounts; |
371 | 124 |
slot, ami: LongInt; |
295 | 125 |
hhammo: PHHAmmo; |
126 |
begin |
|
127 |
FillChar(ammos, sizeof(ammos), 0); |
|
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
128 |
hhammo:= Hedgehog.Ammo; |
295 | 129 |
|
130 |
for slot:= 0 to cMaxSlotIndex do |
|
131 |
for ami:= 0 to cMaxSlotAmmoIndex do |
|
351 | 132 |
if hhammo^[slot, ami].Count > 0 then |
133 |
ammos[hhammo^[slot, ami].AmmoType]:= hhammo^[slot, ami].Count; |
|
295 | 134 |
|
941
b5222ddafe1f
- Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
927
diff
changeset
|
135 |
if ammos[ammo] <> AMMO_INFINITE then |
b5222ddafe1f
- Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
927
diff
changeset
|
136 |
begin |
b5222ddafe1f
- Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
927
diff
changeset
|
137 |
inc(ammos[ammo], Ammoz[ammo].NumberInCase); |
b5222ddafe1f
- Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
927
diff
changeset
|
138 |
if ammos[ammo] > AMMO_INFINITE then ammos[ammo]:= AMMO_INFINITE |
b5222ddafe1f
- Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
927
diff
changeset
|
139 |
end; |
b5222ddafe1f
- Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
927
diff
changeset
|
140 |
|
295 | 141 |
FillAmmoStore(hhammo, ammos) |
142 |
end; |
|
143 |
||
371 | 144 |
procedure PackAmmo(Ammo: PHHAmmo; Slot: LongInt); |
145 |
var ami: LongInt; |
|
295 | 146 |
b: boolean; |
147 |
begin |
|
148 |
repeat |
|
149 |
b:= false; |
|
150 |
ami:= 0; |
|
151 |
while (not b) and (ami < cMaxSlotAmmoIndex) do |
|
351 | 152 |
if (Ammo^[Slot, ami].Count = 0) |
153 |
and (Ammo^[Slot, ami + 1].Count > 0) then b:= true |
|
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
154 |
else inc(ami); |
2221 | 155 |
if b then // there is a free item in ammo stack |
295 | 156 |
begin |
351 | 157 |
Ammo^[Slot, ami]:= Ammo^[Slot, ami + 1]; |
158 |
Ammo^[Slot, ami + 1].Count:= 0 |
|
295 | 159 |
end; |
160 |
until not b; |
|
161 |
end; |
|
162 |
||
534 | 163 |
procedure OnUsedAmmo(var Hedgehog: THedgehog); |
295 | 164 |
begin |
534 | 165 |
with Hedgehog do |
971
d2c49b730771
Fix a bug with automatic weapon switching when attacking from rope
unc0rr
parents:
941
diff
changeset
|
166 |
begin |
d2c49b730771
Fix a bug with automatic weapon switching when attacking from rope
unc0rr
parents:
941
diff
changeset
|
167 |
with Ammo^[CurSlot, CurAmmo] do |
d2c49b730771
Fix a bug with automatic weapon switching when attacking from rope
unc0rr
parents:
941
diff
changeset
|
168 |
if Count <> AMMO_INFINITE then |
d2c49b730771
Fix a bug with automatic weapon switching when attacking from rope
unc0rr
parents:
941
diff
changeset
|
169 |
begin |
d2c49b730771
Fix a bug with automatic weapon switching when attacking from rope
unc0rr
parents:
941
diff
changeset
|
170 |
dec(Count); |
d2c49b730771
Fix a bug with automatic weapon switching when attacking from rope
unc0rr
parents:
941
diff
changeset
|
171 |
if Count = 0 then |
d2c49b730771
Fix a bug with automatic weapon switching when attacking from rope
unc0rr
parents:
941
diff
changeset
|
172 |
begin |
d2c49b730771
Fix a bug with automatic weapon switching when attacking from rope
unc0rr
parents:
941
diff
changeset
|
173 |
PackAmmo(Ammo, CurSlot); |
1922 | 174 |
SwitchNotHeldAmmo(Hedgehog) |
971
d2c49b730771
Fix a bug with automatic weapon switching when attacking from rope
unc0rr
parents:
941
diff
changeset
|
175 |
end |
d2c49b730771
Fix a bug with automatic weapon switching when attacking from rope
unc0rr
parents:
941
diff
changeset
|
176 |
end |
d2c49b730771
Fix a bug with automatic weapon switching when attacking from rope
unc0rr
parents:
941
diff
changeset
|
177 |
end |
295 | 178 |
end; |
179 |
||
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
180 |
function HHHasAmmo(var Hedgehog: THedgehog; Ammo: TAmmoType): boolean; |
371 | 181 |
var slot, ami: LongInt; |
295 | 182 |
begin |
183 |
Slot:= Ammoz[Ammo].Slot; |
|
184 |
ami:= 0; |
|
351 | 185 |
while (ami <= cMaxSlotAmmoIndex) do |
295 | 186 |
begin |
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
187 |
with Hedgehog.Ammo^[Slot, ami] do |
941
b5222ddafe1f
- Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
927
diff
changeset
|
188 |
if (AmmoType = Ammo) then |
b5222ddafe1f
- Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents:
927
diff
changeset
|
189 |
exit((Count > 0) and (Hedgehog.Team^.Clan^.TurnNumber > Ammoz[AmmoType].SkipTurns)); |
295 | 190 |
inc(ami) |
351 | 191 |
end; |
192 |
HHHasAmmo:= false |
|
295 | 193 |
end; |
194 |
||
1964 | 195 |
procedure ApplyAngleBounds(var Hedgehog: THedgehog; AmmoType: TAmmoType); |
1922 | 196 |
begin |
197 |
with Hedgehog do |
|
1964 | 198 |
begin |
199 |
CurMinAngle:= Ammoz[AmmoType].minAngle; |
|
200 |
if Ammoz[AmmoType].maxAngle <> 0 then |
|
201 |
CurMaxAngle:= Ammoz[AmmoType].maxAngle |
|
202 |
else |
|
203 |
CurMaxAngle:= cMaxAngle; |
|
204 |
||
205 |
with Hedgehog.Gear^ do |
|
1922 | 206 |
begin |
1964 | 207 |
if Angle < CurMinAngle then Angle:= CurMinAngle; |
208 |
if Angle > CurMaxAngle then Angle:= CurMaxAngle; |
|
1922 | 209 |
end |
1964 | 210 |
end |
1922 | 211 |
end; |
212 |
||
2432
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
213 |
procedure SwitchToFirstLegalAmmo(var Hedgehog: THedgehog); |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
214 |
begin |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
215 |
with Hedgehog do |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
216 |
begin |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
217 |
CurAmmo:= 0; |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
218 |
CurSlot:= 0; |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
219 |
while (CurSlot <= cMaxSlotIndex) and |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
220 |
((Ammo^[CurSlot, CurAmmo].Count = 0) or |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
221 |
(Ammoz[Ammo^[CurSlot, CurAmmo].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber >= 0)) |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
222 |
do |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
223 |
begin |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
224 |
while (CurAmmo <= cMaxSlotAmmoIndex) and |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
225 |
((Ammo^[CurSlot, CurAmmo].Count = 0) or |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
226 |
(Ammoz[Ammo^[CurSlot, CurAmmo].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber >= 0)) |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
227 |
do inc(CurAmmo); |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
228 |
|
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
229 |
if (CurAmmo > cMaxSlotAmmoIndex) then |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
230 |
begin |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
231 |
CurAmmo:= 0; |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
232 |
inc(CurSlot) |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
233 |
end |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
234 |
end; |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
235 |
TryDo(CurSlot <= cMaxSlotIndex, 'Ammo slot index overflow', true) |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
236 |
end |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
237 |
end; |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
238 |
|
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
239 |
procedure ApplyAmmoChanges(var Hedgehog: THedgehog); |
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
240 |
var s: shortstring; |
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
241 |
begin |
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
242 |
TargetPoint.X:= NoPointX; |
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
243 |
|
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
244 |
with Hedgehog do |
1922 | 245 |
begin |
2409
dbf195c3e09c
fix a very rare bug in which CurSlot becomes greater than cMaxCurSlot
koda
parents:
2370
diff
changeset
|
246 |
|
1922 | 247 |
if (Ammo^[CurSlot, CurAmmo].Count = 0) then |
2432
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
248 |
SwitchToFirstLegalAmmo(Hedgehog); |
2431
23242609c44b
Real fix to ammo slot overflow (bug triggered by r2411 fix)
unc0rr
parents:
2409
diff
changeset
|
249 |
|
2409
dbf195c3e09c
fix a very rare bug in which CurSlot becomes greater than cMaxCurSlot
koda
parents:
2370
diff
changeset
|
250 |
//bad things could happen here in case CurSlot is overflowing |
1964 | 251 |
ApplyAngleBounds(Hedgehog, Ammo^[CurSlot, CurAmmo].AmmoType); |
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
252 |
|
1922 | 253 |
with Ammo^[CurSlot, CurAmmo] do |
254 |
begin |
|
2357
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
255 |
if AmmoType <> amNothing then |
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
256 |
begin |
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
257 |
s:= trammo[Ammoz[AmmoType].NameId]; |
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
258 |
if (Count <> AMMO_INFINITE) and not (Hedgehog.Team^.ExtDriven or (Hedgehog.BotLevel > 0)) then |
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
259 |
s:= s + ' (' + IntToStr(Count) + ')'; |
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
260 |
if (Propz and ammoprop_Timerable) <> 0 then |
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
261 |
s:= s + ', ' + inttostr(Timer div 1000) + ' ' + trammo[sidSeconds]; |
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
262 |
AddCaption(s, Team^.Clan^.Color, capgrpAmmoinfo); |
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2246
diff
changeset
|
263 |
end; |
1922 | 264 |
if (Propz and ammoprop_NeedTarget) <> 0 |
265 |
then begin |
|
266 |
Gear^.State:= Gear^.State or gstHHChooseTarget; |
|
267 |
isCursorVisible:= true |
|
268 |
end else begin |
|
269 |
Gear^.State:= Gear^.State and not gstHHChooseTarget; |
|
270 |
isCursorVisible:= false |
|
271 |
end; |
|
272 |
ShowCrosshair:= (Propz and ammoprop_NoCrosshair) = 0 |
|
273 |
end |
|
274 |
end |
|
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
275 |
end; |
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
276 |
|
1922 | 277 |
procedure SwitchNotHeldAmmo(var Hedgehog: THedgehog); |
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
278 |
begin |
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
279 |
with Hedgehog do |
2431
23242609c44b
Real fix to ammo slot overflow (bug triggered by r2411 fix)
unc0rr
parents:
2409
diff
changeset
|
280 |
if ((Ammo^[CurSlot, CurAmmo].Propz and ammoprop_DontHold) <> 0) or |
23242609c44b
Real fix to ammo slot overflow (bug triggered by r2411 fix)
unc0rr
parents:
2409
diff
changeset
|
281 |
(Ammoz[Ammo^[CurSlot, CurAmmo].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber >= 0) then |
2432
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
282 |
SwitchToFirstLegalAmmo(Hedgehog); |
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
283 |
end; |
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
284 |
|
783 | 285 |
procedure SetWeapon(weap: TAmmoType); |
286 |
begin |
|
1850 | 287 |
ParseCommand('/setweap ' + char(weap), true) |
783 | 288 |
end; |
289 |
||
1784 | 290 |
procedure DisableSomeWeapons; |
291 |
var i, slot, a: Longword; |
|
292 |
t: TAmmoType; |
|
293 |
begin |
|
294 |
for i:= 0 to Pred(StoreCnt) do |
|
295 |
for slot:= 0 to cMaxSlotIndex do |
|
296 |
begin |
|
297 |
for a:= 0 to cMaxSlotAmmoIndex do |
|
298 |
with StoresList[i]^[slot, a] do |
|
299 |
if (Propz and ammoprop_NotBorder) <> 0 then Count:= 0; |
|
300 |
||
301 |
PackAmmo(StoresList[i], slot) |
|
302 |
end; |
|
303 |
||
304 |
for t:= Low(TAmmoType) to High(TAmmoType) do |
|
305 |
if (Ammoz[t].Ammo.Propz and ammoprop_NotBorder) <> 0 then Ammoz[t].Probability:= 0 |
|
306 |
end; |
|
307 |
||
288 | 308 |
end. |