author | nemo |
Mon, 11 Oct 2010 11:36:47 -0400 | |
changeset 3959 | e7ea30323993 |
parent 3955 | d14ecff9502b |
child 3960 | ada50f8d4186 |
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 |
||
2630 | 19 |
{$INCLUDE "options.inc"} |
20 |
||
288 | 21 |
unit uAmmos; |
22 |
interface |
|
3033
2a8f385ab466
FillAmmoStore is reused - check for before start of play.
nemo
parents:
3030
diff
changeset
|
23 |
uses uConsts, uTeams, uStats; |
288 | 24 |
|
3038 | 25 |
procedure initModule; |
26 |
procedure freeModule; |
|
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2715
diff
changeset
|
27 |
|
3346 | 28 |
procedure AddAmmoStore; |
29 |
procedure SetAmmoLoadout(s: shortstring); |
|
30 |
procedure SetAmmoProbability(s: shortstring); |
|
31 |
procedure SetAmmoDelay(s: shortstring); |
|
32 |
procedure SetAmmoReinforcement(s: shortstring); |
|
288 | 33 |
procedure AssignStores; |
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
34 |
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
|
35 |
function HHHasAmmo(var Hedgehog: THedgehog; Ammo: TAmmoType): boolean; |
371 | 36 |
procedure PackAmmo(Ammo: PHHAmmo; Slot: LongInt); |
534 | 37 |
procedure OnUsedAmmo(var Hedgehog: THedgehog); |
1964 | 38 |
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
|
39 |
procedure ApplyAmmoChanges(var Hedgehog: THedgehog); |
1922 | 40 |
procedure SwitchNotHeldAmmo(var Hedgehog: THedgehog); |
783 | 41 |
procedure SetWeapon(weap: TAmmoType); |
1784 | 42 |
procedure DisableSomeWeapons; |
2762
2fbc8d35eb52
Mode to place hogs at start of game. Will probably need a bit more testing.
nemo
parents:
2732
diff
changeset
|
43 |
procedure ResetWeapons; |
3405 | 44 |
function GetAmmoByNum(num: Longword): PHHAmmo; |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
45 |
function GetAmmoEntry(var Hedgehog: THedgehog): PAmmo; |
288 | 46 |
|
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2715
diff
changeset
|
47 |
var shoppa: boolean; |
3943
9835060e5c01
Add per-hog ammo option, initial stubs for infinite attack and weapon reset, fix a bug in ammo switching
nemo
parents:
3939
diff
changeset
|
48 |
StoreCnt: Longword; |
1966 | 49 |
|
288 | 50 |
implementation |
3935 | 51 |
uses uMisc, uGears, uWorld, uLocale, uConsole, uMobile; |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2715
diff
changeset
|
52 |
|
295 | 53 |
type TAmmoCounts = array[TAmmoType] of Longword; |
288 | 54 |
var StoresList: array[0..Pred(cMaxHHs)] of PHHAmmo; |
3346 | 55 |
ammoLoadout, ammoProbability, ammoDelay, ammoReinforcement: shortstring; |
3951
c9a63db3e603
Correct another bug in slot switching, adjust width of theme list, really truly fix reset of weps (I hope) should also fix infinite teleport bug in place hogs mode. Slow update of health to 5s for inf attack mode.
nemo
parents:
3943
diff
changeset
|
56 |
InitialCounts: array[0..Pred(cMaxHHs)] of TAmmoCounts; |
288 | 57 |
|
295 | 58 |
procedure FillAmmoStore(Ammo: PHHAmmo; var cnts: TAmmoCounts); |
288 | 59 |
var mi: array[0..cMaxSlotIndex] of byte; |
60 |
a: TAmmoType; |
|
295 | 61 |
begin |
3407 | 62 |
{$HINTS OFF} |
295 | 63 |
FillChar(mi, sizeof(mi), 0); |
3407 | 64 |
{$HINTS ON} |
295 | 65 |
FillChar(Ammo^, sizeof(Ammo^), 0); |
66 |
for a:= Low(TAmmoType) to High(TAmmoType) do |
|
2764 | 67 |
begin |
295 | 68 |
if cnts[a] > 0 then |
69 |
begin |
|
70 |
TryDo(mi[Ammoz[a].Slot] <= cMaxSlotAmmoIndex, 'Ammo slot overflow', true); |
|
351 | 71 |
Ammo^[Ammoz[a].Slot, mi[Ammoz[a].Slot]]:= Ammoz[a].Ammo; |
3951
c9a63db3e603
Correct another bug in slot switching, adjust width of theme list, really truly fix reset of weps (I hope) should also fix infinite teleport bug in place hogs mode. Slow update of health to 5s for inf attack mode.
nemo
parents:
3943
diff
changeset
|
72 |
with Ammo^[Ammoz[a].Slot, mi[Ammoz[a].Slot]] do |
c9a63db3e603
Correct another bug in slot switching, adjust width of theme list, really truly fix reset of weps (I hope) should also fix infinite teleport bug in place hogs mode. Slow update of health to 5s for inf attack mode.
nemo
parents:
3943
diff
changeset
|
73 |
begin |
c9a63db3e603
Correct another bug in slot switching, adjust width of theme list, really truly fix reset of weps (I hope) should also fix infinite teleport bug in place hogs mode. Slow update of health to 5s for inf attack mode.
nemo
parents:
3943
diff
changeset
|
74 |
Count:= cnts[a]; |
c9a63db3e603
Correct another bug in slot switching, adjust width of theme list, really truly fix reset of weps (I hope) should also fix infinite teleport bug in place hogs mode. Slow update of health to 5s for inf attack mode.
nemo
parents:
3943
diff
changeset
|
75 |
if (TotalRounds < 0) and ((GameFlags and gfPlaceHog) <> 0) and (a = amTeleport) then Count:= AMMO_INFINITE; |
c9a63db3e603
Correct another bug in slot switching, adjust width of theme list, really truly fix reset of weps (I hope) should also fix infinite teleport bug in place hogs mode. Slow update of health to 5s for inf attack mode.
nemo
parents:
3943
diff
changeset
|
76 |
end; |
295 | 77 |
inc(mi[Ammoz[a].Slot]) |
78 |
end |
|
3697 | 79 |
else if (TotalRounds < 0) and ((GameFlags and gfPlaceHog) <> 0) and (a = amTeleport) then |
2764 | 80 |
begin |
81 |
TryDo(mi[Ammoz[a].Slot] <= cMaxSlotAmmoIndex, 'Ammo slot overflow', true); |
|
82 |
Ammo^[Ammoz[a].Slot, mi[Ammoz[a].Slot]]:= Ammoz[a].Ammo; |
|
83 |
||
2767 | 84 |
Ammo^[Ammoz[a].Slot, mi[Ammoz[a].Slot]].Count:= AMMO_INFINITE; |
2764 | 85 |
|
86 |
inc(mi[Ammoz[a].Slot]) |
|
87 |
end |
|
88 |
end |
|
295 | 89 |
end; |
90 |
||
3346 | 91 |
procedure AddAmmoStore; |
3255
6d6f4241debe
Alter distribution of probabilities from frontend, allow utility crates in shoppa if probabilities permit (still ban health crates)
nemo
parents:
3114
diff
changeset
|
92 |
const probability: array [0..8] of LongWord = (0,20,30,60,100,200,400,600,800); |
295 | 93 |
var cnt: Longword; |
94 |
a: TAmmoType; |
|
95 |
ammos: TAmmoCounts; |
|
2453
fdb76012b688
Restore crate probability restriction for "shoppa" weapon sets
nemo
parents:
2434
diff
changeset
|
96 |
substr: shortstring; // TEMPORARY |
288 | 97 |
begin |
3346 | 98 |
TryDo((byte(ammoLoadout[0]) = byte(ord(High(TAmmoType)))) and (byte(ammoProbability[0]) = byte(ord(High(TAmmoType)))) and (byte(ammoDelay[0]) = byte(ord(High(TAmmoType)))) and (byte(ammoReinforcement[0]) = byte(ord(High(TAmmoType)))), 'Incomplete or missing ammo scheme set (incompatible frontend or demo/save?)', true); |
288 | 99 |
|
2453
fdb76012b688
Restore crate probability restriction for "shoppa" weapon sets
nemo
parents:
2434
diff
changeset
|
100 |
// FIXME - TEMPORARY hardcoded check on shoppa pending creation of crate *type* probability editor |
3346 | 101 |
substr:= Copy(ammoLoadout,1,15); |
3697 | 102 |
if (substr = '000000990000009') or |
2453
fdb76012b688
Restore crate probability restriction for "shoppa" weapon sets
nemo
parents:
2434
diff
changeset
|
103 |
(substr = '000000990000000') then |
fdb76012b688
Restore crate probability restriction for "shoppa" weapon sets
nemo
parents:
2434
diff
changeset
|
104 |
shoppa:= true; |
fdb76012b688
Restore crate probability restriction for "shoppa" weapon sets
nemo
parents:
2434
diff
changeset
|
105 |
|
288 | 106 |
inc(StoreCnt); |
107 |
TryDo(StoreCnt <= cMaxHHs, 'Ammo stores overflow', true); |
|
108 |
||
109 |
new(StoresList[Pred(StoreCnt)]); |
|
110 |
||
111 |
for a:= Low(TAmmoType) to High(TAmmoType) do |
|
112 |
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
|
113 |
if a <> amNothing then |
1895 | 114 |
begin |
3346 | 115 |
Ammoz[a].Probability:= probability[byte(ammoProbability[ord(a)]) - byte('0')]; |
116 |
Ammoz[a].SkipTurns:= (byte(ammoDelay[ord(a)]) - byte('0')); |
|
117 |
Ammoz[a].NumberInCase:= (byte(ammoReinforcement[ord(a)]) - byte('0')); |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
118 |
if (TrainingFlags and tfIgnoreDelays) <> 0 then Ammoz[a].SkipTurns:= 0; |
3346 | 119 |
cnt:= byte(ammoLoadout[ord(a)]) - byte('0'); |
2370 | 120 |
// 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
|
121 |
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
|
122 |
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
|
123 |
cnt:= AMMO_INFINITE; |
2370 | 124 |
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
|
125 |
end; |
2860
13a53315ae18
Awesome patch from TheException - adds editing of weapon delay and crate count. Tiy might want to tweak the crate graphic, could make be smaller or less overlappy.
nemo
parents:
2855
diff
changeset
|
126 |
if Ammoz[a].NumberInCase = 0 then Ammoz[a].Probability:= 0; |
13a53315ae18
Awesome patch from TheException - adds editing of weapon delay and crate count. Tiy might want to tweak the crate graphic, could make be smaller or less overlappy.
nemo
parents:
2855
diff
changeset
|
127 |
|
2370 | 128 |
// avoid things we already have by scheme |
2461 | 129 |
// merge this into DisableSomeWeapons ? |
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
|
130 |
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
|
131 |
((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
|
132 |
((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
|
133 |
((a = amVampiric) and ((GameFlags and gfVampiric) <> 0)) then |
2128 | 134 |
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
|
135 |
cnt:= 0; |
2370 | 136 |
Ammoz[a].Probability:= 0 |
137 |
end; |
|
2457
ecf0c7e7995b
Initial molotov cocktail. Still needs graphics, tweaking of fire behaviour. Also changed probabilities for default weapon sets
nemo
parents:
2453
diff
changeset
|
138 |
ammos[a]:= cnt; |
2730
f56592281526
Remove king invulnerability, disable everything but teleport instead.
nemo
parents:
2716
diff
changeset
|
139 |
|
3697 | 140 |
if ((GameFlags and gfKing) <> 0) and ((GameFlags and gfPlaceHog) = 0) and (Ammoz[a].SkipTurns = 0) and (a <> amTeleport) and (a <> amSkip) then |
2732
d893901eff4a
Only add turn timeout for weapons that don't already have a timeout
nemo
parents:
2731
diff
changeset
|
141 |
Ammoz[a].SkipTurns:= 1; |
2762
2fbc8d35eb52
Mode to place hogs at start of game. Will probably need a bit more testing.
nemo
parents:
2732
diff
changeset
|
142 |
|
2fbc8d35eb52
Mode to place hogs at start of game. Will probably need a bit more testing.
nemo
parents:
2732
diff
changeset
|
143 |
if ((GameFlags and gfPlaceHog) <> 0) and |
3697 | 144 |
(a <> amTeleport) and (a <> amSkip) and |
2762
2fbc8d35eb52
Mode to place hogs at start of game. Will probably need a bit more testing.
nemo
parents:
2732
diff
changeset
|
145 |
(Ammoz[a].SkipTurns < 10000) then inc(Ammoz[a].SkipTurns,10000) |
3951
c9a63db3e603
Correct another bug in slot switching, adjust width of theme list, really truly fix reset of weps (I hope) should also fix infinite teleport bug in place hogs mode. Slow update of health to 5s for inf attack mode.
nemo
parents:
3943
diff
changeset
|
146 |
end |
c9a63db3e603
Correct another bug in slot switching, adjust width of theme list, really truly fix reset of weps (I hope) should also fix infinite teleport bug in place hogs mode. Slow update of health to 5s for inf attack mode.
nemo
parents:
3943
diff
changeset
|
147 |
else ammos[a]:= AMMO_INFINITE; |
c9a63db3e603
Correct another bug in slot switching, adjust width of theme list, really truly fix reset of weps (I hope) should also fix infinite teleport bug in place hogs mode. Slow update of health to 5s for inf attack mode.
nemo
parents:
3943
diff
changeset
|
148 |
InitialCounts[Pred(StoreCnt)][a]:= ammos[a]; |
288 | 149 |
end; |
3951
c9a63db3e603
Correct another bug in slot switching, adjust width of theme list, really truly fix reset of weps (I hope) should also fix infinite teleport bug in place hogs mode. Slow update of health to 5s for inf attack mode.
nemo
parents:
3943
diff
changeset
|
150 |
FillAmmoStore(StoresList[Pred(StoreCnt)], ammos); |
c9a63db3e603
Correct another bug in slot switching, adjust width of theme list, really truly fix reset of weps (I hope) should also fix infinite teleport bug in place hogs mode. Slow update of health to 5s for inf attack mode.
nemo
parents:
3943
diff
changeset
|
151 |
for cnt:= 0 to cMaxSlotIndex do |
c9a63db3e603
Correct another bug in slot switching, adjust width of theme list, really truly fix reset of weps (I hope) should also fix infinite teleport bug in place hogs mode. Slow update of health to 5s for inf attack mode.
nemo
parents:
3943
diff
changeset
|
152 |
PackAmmo(StoresList[Pred(StoreCnt)], cnt) |
288 | 153 |
end; |
154 |
||
155 |
function GetAmmoByNum(num: Longword): PHHAmmo; |
|
156 |
begin |
|
157 |
TryDo(num < StoreCnt, 'Invalid store number', true); |
|
351 | 158 |
exit(StoresList[num]) |
288 | 159 |
end; |
160 |
||
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
161 |
function GetAmmoEntry(var Hedgehog: THedgehog): PAmmo; |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
162 |
var ammoidx, slot: LongWord; |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
163 |
begin |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
164 |
with Hedgehog do |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
165 |
begin |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
166 |
slot:= Ammoz[CurAmmoType].Slot; |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
167 |
ammoidx:= 0; |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
168 |
while (ammoidx < cMaxSlotAmmoIndex) and (Ammo^[slot, ammoidx].AmmoType <> CurAmmoType) do inc(ammoidx); |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
169 |
GetAmmoEntry:= @Ammo^[slot, ammoidx]; |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
170 |
end |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
171 |
end; |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
172 |
|
288 | 173 |
procedure AssignStores; |
547 | 174 |
var t: LongInt; |
288 | 175 |
i: Longword; |
176 |
begin |
|
547 | 177 |
for t:= 0 to Pred(TeamsCount) do |
178 |
with TeamsArray[t]^ do |
|
288 | 179 |
begin |
180 |
for i:= 0 to cMaxHHIndex do |
|
547 | 181 |
if Hedgehogs[i].Gear <> nil then |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
182 |
begin |
547 | 183 |
Hedgehogs[i].Ammo:= GetAmmoByNum(Hedgehogs[i].AmmoStore); |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
184 |
Hedgehogs[i].CurAmmoType:= amNothing; |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
185 |
end |
288 | 186 |
end |
187 |
end; |
|
188 |
||
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
189 |
procedure AddAmmo(var Hedgehog: THedgehog; ammo: TAmmoType); |
295 | 190 |
var ammos: TAmmoCounts; |
371 | 191 |
slot, ami: LongInt; |
295 | 192 |
hhammo: PHHAmmo; |
193 |
begin |
|
3407 | 194 |
{$HINTS OFF} |
295 | 195 |
FillChar(ammos, sizeof(ammos), 0); |
3407 | 196 |
{$HINTS ON} |
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
197 |
hhammo:= Hedgehog.Ammo; |
295 | 198 |
|
199 |
for slot:= 0 to cMaxSlotIndex do |
|
200 |
for ami:= 0 to cMaxSlotAmmoIndex do |
|
351 | 201 |
if hhammo^[slot, ami].Count > 0 then |
202 |
ammos[hhammo^[slot, ami].AmmoType]:= hhammo^[slot, ami].Count; |
|
295 | 203 |
|
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
|
204 |
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
|
205 |
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
|
206 |
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
|
207 |
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
|
208 |
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
|
209 |
|
295 | 210 |
FillAmmoStore(hhammo, ammos) |
211 |
end; |
|
212 |
||
371 | 213 |
procedure PackAmmo(Ammo: PHHAmmo; Slot: LongInt); |
214 |
var ami: LongInt; |
|
295 | 215 |
b: boolean; |
216 |
begin |
|
217 |
repeat |
|
218 |
b:= false; |
|
219 |
ami:= 0; |
|
220 |
while (not b) and (ami < cMaxSlotAmmoIndex) do |
|
351 | 221 |
if (Ammo^[Slot, ami].Count = 0) |
222 |
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
|
223 |
else inc(ami); |
2221 | 224 |
if b then // there is a free item in ammo stack |
295 | 225 |
begin |
351 | 226 |
Ammo^[Slot, ami]:= Ammo^[Slot, ami + 1]; |
227 |
Ammo^[Slot, ami + 1].Count:= 0 |
|
295 | 228 |
end; |
229 |
until not b; |
|
230 |
end; |
|
231 |
||
534 | 232 |
procedure OnUsedAmmo(var Hedgehog: THedgehog); |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
233 |
var CurWeapon: PAmmo; |
295 | 234 |
begin |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
235 |
CurWeapon:= GetAmmoEntry(Hedgehog); |
534 | 236 |
with Hedgehog do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
237 |
begin |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
238 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
239 |
MultiShootAttacks:= 0; |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
240 |
with CurWeapon^ do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
241 |
if Count <> AMMO_INFINITE then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
242 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
243 |
dec(Count); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
244 |
if Count = 0 then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
245 |
begin |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
246 |
PackAmmo(Ammo, Ammoz[AmmoType].Slot); |
3931
fd04228971b3
Set ammo to amNothing after using up the current ammo. This should reduce noob fail where they blow themselves up w/ bazooka.
nemo
parents:
3836
diff
changeset
|
247 |
//SwitchNotHeldAmmo(Hedgehog); |
fd04228971b3
Set ammo to amNothing after using up the current ammo. This should reduce noob fail where they blow themselves up w/ bazooka.
nemo
parents:
3836
diff
changeset
|
248 |
CurAmmoType:= amNothing |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
249 |
end |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
250 |
end |
3935 | 251 |
end; |
252 |
perfExt_NewTurnBeginning; |
|
295 | 253 |
end; |
254 |
||
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
255 |
function HHHasAmmo(var Hedgehog: THedgehog; Ammo: TAmmoType): boolean; |
371 | 256 |
var slot, ami: LongInt; |
295 | 257 |
begin |
258 |
Slot:= Ammoz[Ammo].Slot; |
|
259 |
ami:= 0; |
|
351 | 260 |
while (ami <= cMaxSlotAmmoIndex) do |
295 | 261 |
begin |
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
262 |
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
|
263 |
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
|
264 |
exit((Count > 0) and (Hedgehog.Team^.Clan^.TurnNumber > Ammoz[AmmoType].SkipTurns)); |
295 | 265 |
inc(ami) |
351 | 266 |
end; |
267 |
HHHasAmmo:= false |
|
295 | 268 |
end; |
269 |
||
1964 | 270 |
procedure ApplyAngleBounds(var Hedgehog: THedgehog; AmmoType: TAmmoType); |
1922 | 271 |
begin |
272 |
with Hedgehog do |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
273 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
274 |
CurMinAngle:= Ammoz[AmmoType].minAngle; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
275 |
if Ammoz[AmmoType].maxAngle <> 0 then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
276 |
CurMaxAngle:= Ammoz[AmmoType].maxAngle |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
277 |
else |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
278 |
CurMaxAngle:= cMaxAngle; |
1964 | 279 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
280 |
with Hedgehog.Gear^ do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
281 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
282 |
if Angle < CurMinAngle then Angle:= CurMinAngle; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
283 |
if Angle > CurMaxAngle then Angle:= CurMaxAngle; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
284 |
end |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
285 |
end |
1922 | 286 |
end; |
287 |
||
2432
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
288 |
procedure SwitchToFirstLegalAmmo(var Hedgehog: THedgehog); |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
289 |
var slot, ammoidx: LongWord; |
2432
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
290 |
begin |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
291 |
with Hedgehog do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
292 |
begin |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
293 |
CurAmmoType:= amNothing; |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
294 |
slot:= 0; |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
295 |
ammoidx:= 0; |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
296 |
while (slot <= cMaxSlotIndex) and |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
297 |
((Ammo^[slot, ammoidx].Count = 0) or |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
298 |
(Ammoz[Ammo^[slot, ammoidx].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber >= 0)) |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
299 |
do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
300 |
begin |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
301 |
while (ammoidx <= cMaxSlotAmmoIndex) and |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
302 |
((Ammo^[slot, ammoidx].Count = 0) or |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
303 |
(Ammoz[Ammo^[slot, ammoidx].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber >= 0)) |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
304 |
do inc(ammoidx); |
2432
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
305 |
|
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
306 |
if (ammoidx > cMaxSlotAmmoIndex) then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
307 |
begin |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
308 |
ammoidx:= 0; |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
309 |
inc(slot) |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
310 |
end |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
311 |
end; |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
312 |
TryDo(slot <= cMaxSlotIndex, 'Ammo slot index overflow', true); |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
313 |
CurAmmoType:= Ammo^[slot, ammoidx].AmmoType; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
314 |
end |
2432
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
315 |
end; |
1a0bb82d55f0
Switch to first legal ammo when hedgehog can't hold current one
unc0rr
parents:
2431
diff
changeset
|
316 |
|
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
317 |
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
|
318 |
var s: shortstring; |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
319 |
CurWeapon: PAmmo; |
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
320 |
begin |
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
321 |
TargetPoint.X:= NoPointX; |
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
322 |
|
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
323 |
with Hedgehog do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
324 |
begin |
3030 | 325 |
Timer:= 10; |
2409
dbf195c3e09c
fix a very rare bug in which CurSlot becomes greater than cMaxCurSlot
koda
parents:
2370
diff
changeset
|
326 |
|
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
327 |
CurWeapon:= GetAmmoEntry(Hedgehog); |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
328 |
|
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
329 |
if (CurWeapon^.Count = 0) then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
330 |
SwitchToFirstLegalAmmo(Hedgehog); |
2431
23242609c44b
Real fix to ammo slot overflow (bug triggered by r2411 fix)
unc0rr
parents:
2409
diff
changeset
|
331 |
|
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
332 |
CurWeapon:= GetAmmoEntry(Hedgehog); |
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
333 |
|
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
334 |
ApplyAngleBounds(Hedgehog, CurWeapon^.AmmoType); |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
335 |
|
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
336 |
with CurWeapon^ do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
337 |
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
|
338 |
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
|
339 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
340 |
s:= trammo[Ammoz[AmmoType].NameId]; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
341 |
if (Count <> AMMO_INFINITE) and not (Hedgehog.Team^.ExtDriven or (Hedgehog.BotLevel > 0)) then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
342 |
s:= s + ' (' + IntToStr(Count) + ')'; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
343 |
if (Propz and ammoprop_Timerable) <> 0 then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
344 |
s:= s + ', ' + inttostr(Timer div 1000) + ' ' + trammo[sidSeconds]; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
345 |
AddCaption(s, Team^.Clan^.Color, capgrpAmmoinfo); |
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
|
346 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
347 |
if (Propz and ammoprop_NeedTarget) <> 0 |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
348 |
then begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
349 |
Gear^.State:= Gear^.State or gstHHChooseTarget; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
350 |
isCursorVisible:= true |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
351 |
end else begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
352 |
Gear^.State:= Gear^.State and not gstHHChooseTarget; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
353 |
isCursorVisible:= false |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
354 |
end; |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
355 |
if (CurAmmoGear <> nil) and ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) <> 0) then |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
356 |
ShowCrosshair:= (Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_NoCrossHair) = 0 |
3114
3a3d1ee2ebd0
Tidier way to handle crosshair drawing. show/hide based on CurAmmoGear for alt attack weps
nemo
parents:
3075
diff
changeset
|
357 |
else |
3a3d1ee2ebd0
Tidier way to handle crosshair drawing. show/hide based on CurAmmoGear for alt attack weps
nemo
parents:
3075
diff
changeset
|
358 |
ShowCrosshair:= (Propz and ammoprop_NoCrosshair) = 0; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
359 |
end |
3935 | 360 |
end; |
361 |
perfExt_NewTurnBeginning; |
|
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
362 |
end; |
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
363 |
|
1922 | 364 |
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
|
365 |
begin |
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
366 |
with Hedgehog do |
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
367 |
if ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_DontHold) <> 0) or |
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3697
diff
changeset
|
368 |
(Ammoz[CurAmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber >= 0) then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
369 |
SwitchToFirstLegalAmmo(Hedgehog); |
553
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
370 |
end; |
5478386d935f
- Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents:
547
diff
changeset
|
371 |
|
783 | 372 |
procedure SetWeapon(weap: TAmmoType); |
373 |
begin |
|
1850 | 374 |
ParseCommand('/setweap ' + char(weap), true) |
783 | 375 |
end; |
376 |
||
1784 | 377 |
procedure DisableSomeWeapons; |
378 |
var i, slot, a: Longword; |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
379 |
t: TAmmoType; |
1784 | 380 |
begin |
381 |
for i:= 0 to Pred(StoreCnt) do |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
382 |
for slot:= 0 to cMaxSlotIndex do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
383 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
384 |
for a:= 0 to cMaxSlotAmmoIndex do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
385 |
with StoresList[i]^[slot, a] do |
3697 | 386 |
if (Propz and ammoprop_NotBorder) <> 0 then |
3319 | 387 |
begin |
388 |
Count:= 0; |
|
3951
c9a63db3e603
Correct another bug in slot switching, adjust width of theme list, really truly fix reset of weps (I hope) should also fix infinite teleport bug in place hogs mode. Slow update of health to 5s for inf attack mode.
nemo
parents:
3943
diff
changeset
|
389 |
InitialCounts[i][AmmoType]:= 0 |
3319 | 390 |
end; |
1784 | 391 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
392 |
PackAmmo(StoresList[i], slot) |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
393 |
end; |
1784 | 394 |
|
395 |
for t:= Low(TAmmoType) to High(TAmmoType) do |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
396 |
if (Ammoz[t].Ammo.Propz and ammoprop_NotBorder) <> 0 then Ammoz[t].Probability:= 0 |
1784 | 397 |
end; |
398 |
||
3346 | 399 |
procedure SetAmmoLoadout(s: shortstring); |
400 |
begin |
|
401 |
ammoLoadout:= s; |
|
402 |
end; |
|
403 |
||
404 |
procedure SetAmmoProbability(s: shortstring); |
|
405 |
begin |
|
406 |
ammoProbability:= s; |
|
407 |
end; |
|
408 |
||
409 |
procedure SetAmmoDelay(s: shortstring); |
|
410 |
begin |
|
411 |
ammoDelay:= s; |
|
412 |
end; |
|
413 |
||
414 |
procedure SetAmmoReinforcement(s: shortstring); |
|
415 |
begin |
|
416 |
ammoReinforcement:= s; |
|
417 |
end; |
|
418 |
||
2762
2fbc8d35eb52
Mode to place hogs at start of game. Will probably need a bit more testing.
nemo
parents:
2732
diff
changeset
|
419 |
// Restore indefinitely disabled weapons and initial weapon counts. Only used for hog placement right now |
2fbc8d35eb52
Mode to place hogs at start of game. Will probably need a bit more testing.
nemo
parents:
2732
diff
changeset
|
420 |
procedure ResetWeapons; |
3955 | 421 |
var i, t: Longword; |
422 |
a: TAmmoType; |
|
2762
2fbc8d35eb52
Mode to place hogs at start of game. Will probably need a bit more testing.
nemo
parents:
2732
diff
changeset
|
423 |
begin |
3955 | 424 |
for t:= 0 to Pred(TeamsCount) do |
425 |
with TeamsArray[t]^ do |
|
426 |
for i:= 0 to cMaxHHIndex do |
|
427 |
if Hedgehogs[i].Gear <> nil then |
|
428 |
FillAmmoStore(Hedgehogs[i].Ammo, InitialCounts[Hedgehogs[i].AmmoStore]); |
|
2762
2fbc8d35eb52
Mode to place hogs at start of game. Will probably need a bit more testing.
nemo
parents:
2732
diff
changeset
|
429 |
|
3955 | 430 |
for a:= Low(TAmmoType) to High(TAmmoType) do |
431 |
if Ammoz[a].SkipTurns >= 10000 then dec(Ammoz[a].SkipTurns,10000) |
|
2762
2fbc8d35eb52
Mode to place hogs at start of game. Will probably need a bit more testing.
nemo
parents:
2732
diff
changeset
|
432 |
end; |
2fbc8d35eb52
Mode to place hogs at start of game. Will probably need a bit more testing.
nemo
parents:
2732
diff
changeset
|
433 |
|
3038 | 434 |
procedure initModule; |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2715
diff
changeset
|
435 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
436 |
shoppa:= false; |
3346 | 437 |
StoreCnt:= 0; |
438 |
ammoLoadout:= ''; |
|
439 |
ammoProbability:= ''; |
|
440 |
ammoDelay:= ''; |
|
3951
c9a63db3e603
Correct another bug in slot switching, adjust width of theme list, really truly fix reset of weps (I hope) should also fix infinite teleport bug in place hogs mode. Slow update of health to 5s for inf attack mode.
nemo
parents:
3943
diff
changeset
|
441 |
ammoReinforcement:= ''; |
c9a63db3e603
Correct another bug in slot switching, adjust width of theme list, really truly fix reset of weps (I hope) should also fix infinite teleport bug in place hogs mode. Slow update of health to 5s for inf attack mode.
nemo
parents:
3943
diff
changeset
|
442 |
FillChar(InitialCounts, sizeof(InitialCounts), 0) |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2715
diff
changeset
|
443 |
end; |
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2715
diff
changeset
|
444 |
|
3038 | 445 |
procedure freeModule; |
2715
0e4e0db79e2a
Free up some unfreed memory. Needed for Koda's iphone lib work
nemo
parents:
2630
diff
changeset
|
446 |
var i: LongWord; |
0e4e0db79e2a
Free up some unfreed memory. Needed for Koda's iphone lib work
nemo
parents:
2630
diff
changeset
|
447 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2860
diff
changeset
|
448 |
if StoreCnt > 0 then |
3052 | 449 |
for i:= 0 to Pred(StoreCnt) do Dispose(StoresList[i]) |
2715
0e4e0db79e2a
Free up some unfreed memory. Needed for Koda's iphone lib work
nemo
parents:
2630
diff
changeset
|
450 |
end; |
0e4e0db79e2a
Free up some unfreed memory. Needed for Koda's iphone lib work
nemo
parents:
2630
diff
changeset
|
451 |
|
288 | 452 |
end. |