1 -------------------------------- |
1 -------------------------------- |
2 -- HIGHLANDER / HOGS OF WAR |
2 -- HIGHLANDER / HOGS OF WAR |
3 -- by mikade |
3 -- by mikade |
4 -------------------------------- |
4 -------------------------------- |
5 |
|
6 -- Ancient changelog: |
|
7 |
|
8 ----------- |
|
9 --0.1 |
|
10 ----------- |
|
11 |
|
12 -- concept test |
|
13 |
|
14 ----------- |
|
15 --0.2 |
|
16 ----------- |
|
17 |
|
18 -- remove tardis till Henek fixes his tracker |
|
19 -- change wep crates to health crates |
|
20 -- reset arb turntimevalue |
|
21 -- include randomOrder |
|
22 -- Until fixed .17 methods come out, remove switches and resurrector |
|
23 -- on request, removed kamikaze and piano weapons |
|
24 -- provisional fixing of bugs that can't actually be fixed yet |
|
25 |
|
26 ----------- |
|
27 --0.3 |
|
28 ----------- |
|
29 |
|
30 -- meh, update incorrect display |
|
31 -- may change this in the future to have switches |
|
32 -- but for now people are used to it without, so~ |
|
33 |
|
34 -- mudball is now counted as a utility |
|
35 |
|
36 ----------- |
|
37 --0.3b |
|
38 ----------- |
|
39 |
|
40 -- cleaned up code and got rid of unneccessary vars |
|
41 -- mudball is a weapon again |
|
42 -- landgun is now a utility |
|
43 -- extra time, vampirism utility removed |
|
44 -- hammer wep removed |
|
45 -- all hogs have kamikaze |
|
46 |
|
47 ----------- |
|
48 --0.3c |
|
49 ----------- |
|
50 |
|
51 -- restructured some code |
|
52 -- added napalm (whoops) to list of possible weapons you can get |
|
53 -- hogs no longer recieve airstrike-related weps on border maps |
|
54 |
|
55 ----------- |
|
56 --0.4 |
|
57 ----------- |
|
58 -- fix same name/blank weapon transfer bug (issue 541) |
|
59 -- show next hog ammo set in full (issue 312) |
|
60 -- allow mid-kill multi-shot weapon transfers (issue 503) |
|
61 -- allow users to configure hog health |
|
62 -- remove 'switched to' message |
|
63 -- remove some extraeneous code |
|
64 -- add more whitespace |
|
65 -- break everything |
|
66 |
|
67 ----------- |
|
68 --0.4b |
|
69 ----------- |
|
70 -- as per request, add ice-gun |
|
71 |
5 |
72 ------------------------- |
6 ------------------------- |
73 -- ideas for the future |
7 -- ideas for the future |
74 ------------------------- |
8 ------------------------- |
75 -- add structure |
9 -- add structure |
76 -- allow switcher, resurrector |
10 -- allow switcher, resurrector |
77 -- add abuse |
|
78 -- nerf teleport |
11 -- nerf teleport |
79 -- allow more customization |
|
80 -- poison hogs using the default team? :/ |
|
81 -- balance weapon distribution across entire team / all teams |
12 -- balance weapon distribution across entire team / all teams |
82 -- add other inequalities/bonuses like... ??? |
13 -- add other inequalities/bonuses like... ??? |
83 -- some hogs start off with an extra 25 health? |
14 -- * some hogs start off with an extra 25 health? |
84 -- some hogs start off poisoned? |
15 -- * some hogs start off poisoned? |
85 -- some hogs start off with a rope and 2 drills but die after their turn? |
16 -- * some hogs start off with a rope and 2 drills but die after their turn? |
86 |
17 |
87 ------------------------------- |
18 ------------------ |
88 -- derp, script follows |
19 -- script follows |
89 ------------------------------- |
20 ------------------ |
90 |
21 |
91 HedgewarsScriptLoad("/Scripts/Locale.lua") |
22 HedgewarsScriptLoad("/Scripts/Locale.lua") |
92 HedgewarsScriptLoad("/Scripts/Tracker.lua") |
23 HedgewarsScriptLoad("/Scripts/Tracker.lua") |
93 HedgewarsScriptLoad("/Scripts/Params.lua") |
24 HedgewarsScriptLoad("/Scripts/Params.lua") |
94 |
25 |
95 -- These define weps allowed by the script. |
26 -- These define weps allowed by the script. |
96 -- These were arbitrarily defined out-of-order in initial script, so that was preserved here, resulting |
27 -- These were arbitrarily defined out-of-order in initial script, so that was preserved here, resulting |
97 -- in a moderately odd syntax. |
28 -- in a moderately odd syntax. |
98 local atkWeps = { |
29 local atkWeps = { |
99 [amBazooka]=true, [amBee]=true, [amMortar]=true, [amDrill]=true, [amSnowball]=true, |
30 [amBazooka]=true, [amBee]=true, [amMortar]=true, [amDrill]=true, [amSnowball]=true, |
100 [amGrenade]=true, [amClusterBomb]=true, [amMolotov]=true, [amWatermelon]=true, |
31 [amGrenade]=true, [amClusterBomb]=true, [amMolotov]=true, [amWatermelon]=true, |
101 [amHellishBomb]=true, [amGasBomb]=true, [amShotgun]=true, [amDEagle]=true, |
32 [amHellishBomb]=true, [amGasBomb]=true, [amShotgun]=true, [amDEagle]=true, |
102 [amFlamethrower]=true, [amSniperRifle]=true, [amSineGun]=true, [amMinigun]=true, |
33 [amFlamethrower]=true, [amSniperRifle]=true, [amSineGun]=true, [amMinigun]=true, |
103 [amFirePunch]=true, [amWhip]=true, [amBaseballBat]=true, [amKamikaze]=true, |
34 [amFirePunch]=true, [amWhip]=true, [amBaseballBat]=true, [amKamikaze]=true, |
104 [amSeduction]=true, [amHammer]=true, [amMine]=true, [amDynamite]=true, [amCake]=true, |
35 [amSeduction]=true, [amHammer]=true, [amMine]=true, [amDynamite]=true, [amCake]=true, |
105 [amBallgun]=true, [amSMine]=true, [amRCPlane]=true, [amBirdy]=true, [amKnife]=true, |
36 [amBallgun]=true, [amSMine]=true, [amRCPlane]=true, [amBirdy]=true, [amKnife]=true, |
106 [amAirAttack]=true, [amMineStrike]=true, [amNapalm]=true, [amDrillStrike]=true, [amPiano]=true, [amAirMine] = true, |
37 [amAirAttack]=true, [amMineStrike]=true, [amNapalm]=true, [amDrillStrike]=true, [amPiano]=true, [amAirMine] = true, |
107 [amDuck]=true, |
38 [amDuck]=true, |
108 } |
39 } |
109 |
40 |
110 local utilWeps = { |
41 local utilWeps = { |
111 [amBlowTorch]=true, [amPickHammer]=true, [amGirder]=true, [amPortalGun]=true, |
42 [amBlowTorch]=true, [amPickHammer]=true, [amGirder]=true, [amPortalGun]=true, |
112 [amRope]=true, [amParachute]=true, [amTeleport]=true, [amJetpack]=true, |
43 [amRope]=true, [amParachute]=true, [amTeleport]=true, [amJetpack]=true, |
113 [amInvulnerable]=true, [amLaserSight]=true, [amVampiric]=true, |
44 [amInvulnerable]=true, [amLaserSight]=true, [amVampiric]=true, |
114 [amLowGravity]=true, [amExtraDamage]=true, [amExtraTime]=true, |
45 [amLowGravity]=true, [amExtraDamage]=true, [amExtraTime]=true, |
115 [amLandGun]=true, [amRubber]=true, [amIceGun]=true, |
46 [amLandGun]=true, [amRubber]=true, [amIceGun]=true, |
116 } |
47 } |
117 |
48 |
118 -- Intentionally left out: |
49 -- Intentionally left out: |
119 -- * Resurrector (guaranteed to screw up the game) |
50 -- * Resurrector (guaranteed to screw up the game) |
120 -- * Time Box |
51 -- * Time Box |
121 -- * Switch Hedgehog (not sure why) |
52 -- * Switch Hedgehog (not sure why) |
157 turn by killing enemies in a clever way. |
88 turn by killing enemies in a clever way. |
158 We need to distinguish between your current inventory and the “reset inventory”, |
89 We need to distinguish between your current inventory and the “reset inventory”, |
159 that is, the state to which your inventory will get reset in the next turn. |
90 that is, the state to which your inventory will get reset in the next turn. |
160 |
91 |
161 No Multi-Use (default): |
92 No Multi-Use (default): |
162 If you kill a hog who owns a weapon you currently have in your reset inventory, |
93 If you kill a hog who owns a weapon you currently have in your reset inventory, |
163 but not your inventory, you DO NOT get this weapon again. |
94 but not your inventory, you DO NOT get this weapon again. |
164 |
95 |
165 Multi-Use: |
96 Multi-Use: |
166 If you kill a hog who owns a weapon you currently have in your reset inventory, |
97 If you kill a hog who owns a weapon you currently have in your reset inventory, |
167 but not your inventory, you DO get this weapon. |
98 but not your inventory, you DO get this weapon. |
168 |
99 |
169 Example 1: |
100 Example 1: |
170 You have a ballgun, and use it to kill a hog who also owns a ballgun. |
101 You have a ballgun, and use it to kill a hog who also owns a ballgun. |
171 No Multi-Use: You will NOT get another ballgun, since it's in your |
102 No Multi-Use: You will NOT get another ballgun, since it's in your |
172 reset inventory. |
103 reset inventory. |
173 Multi-Use: You get another ballgun. |
104 Multi-Use: You get another ballgun. |
174 |
105 |
175 Example 2: |
106 Example 2: |
176 You have a grenade and a bazooka in your inventory. You use the bazooka |
107 You have a grenade and a bazooka in your inventory. You use the bazooka |
177 to kill a hedgehog who owns a grenade. |
108 to kill a hedgehog who owns a grenade. |
178 In both ammo limit modes, you do NOT win any ammo since you already have |
109 In both ammo limit modes, you do NOT win any ammo since you already have |
179 a grenade in your inventory (not just your reset inventory), and the |
110 a grenade in your inventory (not just your reset inventory), and the |
180 rule “no more than 1 ammo per type” applies. |
111 rule “no more than 1 ammo per type” applies. |
181 ]] |
112 ]] |
182 local multiUse = false |
113 local multiUse = false |
183 |
114 |
184 function onParameters() |
115 function onParameters() |
185 parseParams() |
116 parseParams() |
186 multiUse = params["multiuse"] == "true" |
117 multiUse = params["multiuse"] == "true" |
187 loyal = params["loyal"] == "true" |
118 loyal = params["loyal"] == "true" |
188 end |
119 end |
189 |
120 |
190 function CheckForWeaponSwap() |
121 function CheckForWeaponSwap() |
191 if GetCurAmmoType() ~= lastWep then |
122 if GetCurAmmoType() ~= lastWep then |
192 shotsFired = 0 |
123 shotsFired = 0 |
206 CheckForWeaponSwap() |
137 CheckForWeaponSwap() |
207 shotsFired = shotsFired + 1 |
138 shotsFired = shotsFired + 1 |
208 end |
139 end |
209 |
140 |
210 function StartingSetUp(gear) |
141 function StartingSetUp(gear) |
211 for i = 0, AmmoTypeMax do |
142 for i = 0, AmmoTypeMax do |
212 if i ~= amNothing then |
143 if i ~= amNothing then |
213 setGearValue(gear,i,0) |
144 setGearValue(gear,i,0) |
214 end |
145 end |
215 end |
146 end |
216 for w,c in pairs(wepArray) do |
147 for w,c in pairs(wepArray) do |
217 if c == 9 and (atkWeps[w] or utilWeps[w]) then |
148 if c == 9 and (atkWeps[w] or utilWeps[w]) then |
218 setGearValue(gear,w,1) |
149 setGearValue(gear,w,1) |
219 end |
150 end |
220 end |
151 end |
221 |
152 |
222 setGearValue(gear,amSkip,100) |
153 setGearValue(gear,amSkip,100) |
223 |
154 |
224 local r = 0 |
155 local r = 0 |
225 if atktot > 0 then |
156 if atktot > 0 then |
226 r = GetRandom(atktot)+1 |
157 r = GetRandom(atktot)+1 |
227 for i = 0, AmmoTypeMax do |
158 for i = 0, AmmoTypeMax do |
228 if i ~= amNothing then |
159 if i ~= amNothing then |
229 if atkChoices[i] >= r then |
160 if atkChoices[i] >= r then |
230 setGearValue(gear,i,1) |
161 setGearValue(gear,i,1) |
231 break |
162 break |
232 end |
163 end |
233 end |
164 end |
234 end |
165 end |
235 end |
166 end |
236 if utiltot > 0 then |
167 if utiltot > 0 then |
237 r = GetRandom(utiltot)+1 |
168 r = GetRandom(utiltot)+1 |
238 for i = 0, AmmoTypeMax do |
169 for i = 0, AmmoTypeMax do |
239 if i ~= amNothing then |
170 if i ~= amNothing then |
240 if utilChoices[i] >= r then |
171 if utilChoices[i] >= r then |
241 setGearValue(gear,i,1) |
172 setGearValue(gear,i,1) |
242 break |
173 break |
243 end |
174 end |
244 end |
175 end |
245 end |
176 end |
246 end |
177 end |
247 end |
178 end |
248 |
|
249 --[[function SaveWeapons(gear) |
|
250 -- er, this has no 0 check so presumably if you use a weapon then when it saves you wont have it |
|
251 |
|
252 for i = 1, (#wepArray) do |
|
253 setGearValue(gear, wepArray[i], GetAmmoCount(gear, wepArray[i]) ) |
|
254 --AddAmmo(gear, wepArray[i], getGearValue(gear,wepArray[i]) ) |
|
255 end |
|
256 |
|
257 end]] |
|
258 |
179 |
259 function ConvertValues(gear) |
180 function ConvertValues(gear) |
260 for w,c in pairs(wepArray) do |
181 for w,c in pairs(wepArray) do |
261 AddAmmo(gear, w, getGearValue(gear,w) ) |
182 AddAmmo(gear, w, getGearValue(gear,w) ) |
262 end |
183 end |
263 end |
184 end |
264 |
185 |
265 -- this is called when a hog dies |
186 -- this is called when a hog dies |
266 function TransferWeps(gear) |
187 function TransferWeps(gear) |
267 |
188 |
268 if CurrentHedgehog ~= nil and CurrentHedgehog ~= gear and (not loyal or (GetHogClan(CurrentHedgehog) ~= GetHogClan(gear))) then |
189 if CurrentHedgehog ~= nil and CurrentHedgehog ~= gear and (not loyal or (GetHogClan(CurrentHedgehog) ~= GetHogClan(gear))) then |
269 |
190 |
270 local x,y,color |
191 local x,y,color |
271 local vgear |
192 local vgear |
272 local vgtX, vgtY, vgtdX, vgtdY, vgtAngle, vgtFrame, vgtFrameTicks, vgtState, vgtTimer, vgtTint |
193 local vgtX, vgtY, vgtdX, vgtdY, vgtAngle, vgtFrame, vgtFrameTicks, vgtState, vgtTimer, vgtTint |
273 local dspl = IsHogLocal(CurrentHedgehog) |
194 local dspl = IsHogLocal(CurrentHedgehog) |
274 local ammolist = '' |
195 local ammolist = '' |
275 |
196 |
276 if dspl then |
197 if dspl then |
277 x,y = GetGearPosition(CurrentHedgehog) |
198 x,y = GetGearPosition(CurrentHedgehog) |
278 color = GetClanColor(GetHogClan(CurrentHedgehog)) |
199 color = GetClanColor(GetHogClan(CurrentHedgehog)) |
279 end |
200 end |
280 |
201 |
281 for w,c in pairs(wepArray) do |
202 for w,c in pairs(wepArray) do |
282 val = getGearValue(gear,w) |
203 val = getGearValue(gear,w) |
283 if val ~= 0 and (multiUse or (wepArray[w] ~= 9 and getGearValue(CurrentHedgehog, w) == 0)) then |
204 if val ~= 0 and (multiUse or (wepArray[w] ~= 9 and getGearValue(CurrentHedgehog, w) == 0)) then |
284 setGearValue(CurrentHedgehog, w, val) |
205 setGearValue(CurrentHedgehog, w, val) |
285 |
206 |
286 -- if you are using multi-shot weapon, gimme one more |
207 -- if you are using multi-shot weapon, gimme one more |
288 AddAmmo(CurrentHedgehog, w, val+1) |
209 AddAmmo(CurrentHedgehog, w, val+1) |
289 -- assign ammo as per normal |
210 -- assign ammo as per normal |
290 else |
211 else |
291 AddAmmo(CurrentHedgehog, w, val) |
212 AddAmmo(CurrentHedgehog, w, val) |
292 end |
213 end |
293 if dspl then |
214 if dspl then |
294 if ammolist == '' then |
215 if ammolist == '' then |
295 ammolist = GetAmmoName(w) |
216 ammolist = GetAmmoName(w) |
296 else |
217 else |
297 ammolist = ammolist .. ' • ' .. GetAmmoName(w) |
218 ammolist = ammolist .. ' • ' .. GetAmmoName(w) |
298 end |
219 end |
299 x = x + 2 |
220 x = x + 2 |
300 y = y + 32 |
221 y = y + 32 |
301 vgear = AddVisualGear(x, y, vgtAmmo, 0, true) |
222 vgear = AddVisualGear(x, y, vgtAmmo, 0, true) |
302 if vgear ~= nil then |
223 if vgear ~= nil then |
303 vgtX,vgtY,vgtdX,vgtdY,vgtAngle,vgtFrame,vgtFrameTicks,vgtState,vgtTimer,vgtTint = GetVisualGearValues(vgear) |
224 vgtX,vgtY,vgtdX,vgtdY,vgtAngle,vgtFrame,vgtFrameTicks,vgtState,vgtTimer,vgtTint = GetVisualGearValues(vgear) |
304 vgtFrame = w |
225 vgtFrame = w |
305 SetVisualGearValues(vgear,vgtX,vgtY,vgtdX,vgtdY,vgtAngle,vgtFrame,vgtFrameTicks,vgtState,vgtTimer,vgtTint) |
226 SetVisualGearValues(vgear,vgtX,vgtY,vgtdX,vgtdY,vgtAngle,vgtFrame,vgtFrameTicks,vgtState,vgtTimer,vgtTint) |
306 end |
227 end |
307 end |
228 end |
308 |
229 |
309 end |
230 end |
310 end |
231 end |
311 |
232 |
312 if dspl and ammolist ~= '' then |
233 if dspl and ammolist ~= '' then |
313 PlaySound(sndShotgunReload); |
234 PlaySound(sndShotgunReload); |
314 AddCaption(ammolist, color, capgrpAmmoinfo) |
235 AddCaption(ammolist, color, capgrpAmmoinfo) |
315 end |
236 end |
316 end |
237 end |
317 |
238 |
318 end |
239 end |
319 |
240 |
320 function onGameInit() |
241 function onGameInit() |
334 Goals = Goals .. loc("No Multi-Use: Once you used an ammo, you can’t take it again in this turn") |
255 Goals = Goals .. loc("No Multi-Use: Once you used an ammo, you can’t take it again in this turn") |
335 end |
256 end |
336 end |
257 end |
337 |
258 |
338 function onGameStart() |
259 function onGameStart() |
339 utilChoices[amSkip] = 0 |
260 utilChoices[amSkip] = 0 |
340 local c = 0 |
261 local c = 0 |
341 for i = 0, AmmoTypeMax do |
262 for i = 0, AmmoTypeMax do |
342 if i ~= amNothing then |
263 if i ~= amNothing then |
343 atkChoices[i] = 0 |
264 atkChoices[i] = 0 |
344 utilChoices[i] = 0 |
265 utilChoices[i] = 0 |
345 if i ~= 7 then |
266 if i ~= 7 then |
346 wepArray[i] = 0 |
267 wepArray[i] = 0 |
347 c = GetAmmoCount(someHog, i) |
268 c = GetAmmoCount(someHog, i) |
348 if c > 8 then c = 9 end |
269 if c > 8 then |
349 wepArray[i] = c |
270 c = 9 |
350 if c < 9 and c > 0 then |
271 end |
351 if atkWeps[i] then |
272 wepArray[i] = c |
352 --WriteLnToConsole('a c: '..c..' w:'..i) |
273 if c < 9 and c > 0 then |
353 atktot = atktot + probability[c] |
274 if atkWeps[i] then |
354 atkChoices[i] = atktot |
275 atktot = atktot + probability[c] |
355 elseif utilWeps[i] then |
276 atkChoices[i] = atktot |
356 --WriteLnToConsole('u c: '..c..' w:'..i) |
277 elseif utilWeps[i] then |
357 utiltot = utiltot + probability[c] |
278 utiltot = utiltot + probability[c] |
358 utilChoices[i] = utiltot |
279 utilChoices[i] = utiltot |
359 end |
280 end |
360 end |
281 end |
361 end |
282 end |
362 end |
283 end |
363 end |
284 end |
364 |
|
365 --WriteLnToConsole('utiltot:'..utiltot..' atktot:'..atktot) |
|
366 |
|
367 |
285 |
368 runOnGears(StartingSetUp) |
286 runOnGears(StartingSetUp) |
369 runOnGears(ConvertValues) |
287 runOnGears(ConvertValues) |
370 end |
288 end |
371 |
289 |