cosmetix (spaces, etc. in `Damage` property)
[k8zan.git] / decorate / Weapons / SpikeGun.txt
blobf08c532cccb277d8695ceb20c8199abd7f53a790
1 //Thanks to Wildweasel for the Gun Labs tutorials! ( http://gunlabs.blogspot.ro/2011/01/welcome-to-new-doom-armory.html )
3 /*
4 actor (optional) ZanPistolReplacer : RandomSpawner replaces Pistol {
5   DropItem "SpikeGun"
7 */
10 ACTOR SpikeMag : Ammo replaces Clip {
11   Radius 14
12   Height 12
13   Scale 0.55
14   Inventory.Amount 36
15   Inventory.MaxAmount 288
16   Ammo.BackpackAmount 72
17   Ammo.BackpackMaxAmount 360
18   Inventory.Icon "SPMGA0"
19   Inventory.PickupMessage "Picked up a Spike Mag."
20   Inventory.PickupSound "Ammo/SpikeMagPick"
22   States {
23   Spawn:
24     SPMG A -1
25     Stop
26   }
30 ACTOR SpikeMagBox : SpikeMag /*replaces Clipbox*/ {
31   Radius 15
32   Height 16
33   Scale 0.95
34   Inventory.Amount 100
35   Inventory.Icon "SPMGA0"
36   Inventory.PickupMessage "Picked up a Spike Box."
37   Inventory.PickupSound "Ammo/SpikeMagPick"
38   States {
39   Spawn:
40     SPMG A -1
41     Stop
42   }
46 Actor SpikeMagDropped {
47   Radius 1
48   Height 1
49   Scale 0.55
50   Gravity 0.75
51   +MOVEWITHSECTOR
52   +MISSILE
53   +NOBLOCKMAP
54   +BOUNCEONFLOORS
55   +BOUNCEONWALLS
56   +BOUNCEONCEILINGS
57   +ALLOWBOUNCEONACTORS
58   +BOUNCEONACTORS
59   +NoTeleport
60   +k8AllowSimpleTick
61   BounceType Doom
62   BounceFactor 0.7
63   BounceCount 4
64   BounceSound "Ammo/SpikeMagBounce"
66   States {
67   Spawn:
68     SPMG BC 12
69     SPMG D 1000
70     Stop
72   Death:
73     SPMG D -1
74     Stop
75   }
79 ACTOR SpikeGunLoaded : Ammo {
80   Inventory.Amount 0
81   Inventory.MaxAmount 36
82   Ammo.BackpackAmount 0
83   Ammo.BackpackMaxAmount 36
84   +INVENTORY.IGNORESKILL
88 ACTOR SpikeGun : Weapon /*replaces Chaingun*/ replaces Pistol {
89   Xscale 0.35
90   Yscale 0.35
91   Radius 30
92   Height 12
93   +INVENTORY.UNDROPPABLE
94   +NOEXTREMEDEATH
95   +WEAPON.NOALERT
96   //+WEAPON.NO_AUTO_SWITCH
97   +WEAPON.AMMO_OPTIONAL
98   Inventory.PickupMessage "Got a Spike Gun."
99   Inventory.PickupSound "Ammo/SpikeGunPick"
100   //Inventory.Icon "SPGIA0"
101   Tag "Spike Gun"
102   Weapon.KickBack 70
103   Weapon.SelectionOrder 4
104   //Weapon.MinSelectionAmmo1 0
105   //Weapon.MinSelectionAmmo2 0
106   Weapon.AmmoType1 "SpikeGunLoaded"
107   Weapon.AmmoGive1 0
108   Weapon.AmmoUse1 1
109   Weapon.AmmoType2 "SpikeMag"
110   Weapon.AmmoGive2 18
111   Weapon.AmmoUse2 0
112   Weapon.SlotNumber 2
113   //Decal "SpikeDecalHot"
114   //AttackSound "weapons/spikegunfire"
116   var int user_lowPauseCount;
118   States {
119   Spawn:
120     SPGS A -1
121     Stop
123   PickupWeapon:
124     // always has some loaded ammo on first pickup
125     TNT1 A 0 A_GiveInventory("SpikeGunLoaded", random(1, 3)*10)
126     Stop
128   Select:
129     stateinclude "QuickKick/QuickKickOnSelectDeselect.txt"
130     TNT1 A 0
131       {
132         A_GiveInventory("HoldingSpikeGun", 1);
133         if (GetCVarB('k8ZanMod_CustomCrosshairs')) A_SetCrosshair(3);
134       }
135     WSPI A 0 A_Raise(666)
136     Goto Ready
138   Deselect:
139     stateinclude "QuickKick/QuickKickOnSelectDeselect.txt"
140     TNT1 A 0
141       {
142         A_TakeInventory("SpikeGunZoomed", 1);
143         A_ZoomFactor(1);
144         A_TakeInventory("SpikeGunHeat", 36);
145       }
146     WSPI A 1 Offset(-15, 40)
147     WSPI A 1 Offset(-30, 50)
148     WSPI A 1 Offset(-50, 65)
149     WSPI A 1 Offset(-70, 80)
150     Goto DeselectLoop
152   DeselectLoop:
153     TNT1 A 0 A_TakeInventory("HoldingSpikeGun", 1)
154     TNT1 A 1 A_Lower(666)  // was zero duration
155     Loop
157   Ready:
158     TNT1 A 8
159     TNT1 A 0 A_PlaySound("Ammo/SpikeGunPick", CHAN_WEAPON, 0.6)
160     WSPI A 1 Offset(-70, 80)
161     WSPI A 1 Offset(-50, 65)
162     WSPI A 1 Offset(-30, 50)
163     WSPI A 1 Offset(-15, 40)
164     TNT1 A 0 A_TakeInventory("QuickKickDisabled")
165     Goto ReadyIdle
167   ReadyIdle:
168     WSPI A 0
169       {
170         // low ammo sound
171         if (CountInv("SpikeGunLoaded") <= 8) {
172           user_lowPauseCount -= 1;
173           if (user_lowPauseCount < 1) {
174             if (user_lowPauseCount > -666 && GetCVarB("k8ZanMod_WarnLowAmmo")) {
175               A_PlaySound("weapons/zanweapon/lowammo", CHAN_VOICE, 1.0);
176             }
177             local ammoCount = CountInv("SpikeGunLoaded");
178                  if (ammoCount > 6) user_lowPauseCount = 40;
179             else if (ammoCount > 4) user_lowPauseCount = 30;
180             else if (ammoCount > 0) user_lowPauseCount = 20;
181             else user_lowPauseCount = 10;
182           }
183         }
184       }
185     WSPI A 0 A_JumpIfInventory("SpikeGunZoomed", 1, "ReadyZoomed")
186     TNT1 A 0 Offset(-15, 40) { if (GetCVarB('k8ZanMod_CustomCrosshairs')) A_SetCrosshair(3); }
187     WSPI A 1 A_WeaponReady(WRF_ALLOWRELOAD|(GetCVarB('k8ZanMod_SpikeZoom') ? 0 : WRF_SECONDARY_SAME_AMMO))
188     TNT1 A 0 A_JumpIfInventory("SpikeGunHeat", 29, "Steaming")
189     Loop
191   Steaming:
192     TNT1 A 0
193       {
194         A_TakeInventory("SpikeGunHeat", 1);
195         A_SpawnItemEx("SteamPuffSpikeGun", 10, 2, 60, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 150);
196       }
197     WSPI A 4 A_WeaponReady(WRF_ALLOWRELOAD|(GetCVarB('k8ZanMod_SpikeZoom') ? 0 : WRF_SECONDARY_SAME_AMMO))
198     Goto ReadyIdle
200   ReadyZoomed:
201     WSPS A 1 Offset(10000, 32) A_WeaponReady(WRF_ALLOWRELOAD|(GetCVarB('k8ZanMod_SpikeZoom') ? 0 : WRF_SECONDARY_SAME_AMMO))
202     TNT1 A 0 A_JumpIfInventory("SpikeGunHeat", 29, "ZoomSteaming")
203     Goto ReadyIdle
205   ZoomSteaming:
206     TNT1 A 0
207       {
208         A_TakeInventory("SpikeGunHeat", 1);
209         A_SpawnItemEx("SteamPuffSpikeGun", 10, 0, 62, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 150);
210       }
211     WSPS A 4 A_WeaponReady(WRF_ALLOWRELOAD|(GetCVarB('k8ZanMod_SpikeZoom') ? 0 : WRF_SECONDARY_SAME_AMMO))
212     Goto ReadyIdle
214   AltFire:
215     WSPI A 0 A_JumpIfInventory("SpikeGunZoomed", 1, "UnZoom")
216     WSPI A 8
217       {
218         if (!GetCVarB('k8ZanMod_SpikeZoom')) {
219           A_Jump(256, "FireZoomed");
220         } else if (GetCVarB('k8ZanMod_CustomCrosshairs')) {
221           A_SetCrosshair(1);
222         }
223       }
224     WSPI A 1 Offset(10000, 36)
225     WSPI A 1 Offset(10000, 42)
226     WSPI A 1 Offset(10000, 48)
227     TNT1 A 0 A_ZoomFactor(2)
228     WSPS A 1 Offset(10000, 48)
229     WSPS A 1 Offset(10000, 40)
230     WSPS A 1 Offset(10000, 35)
231     WSPS A 1 Offset(10000, 32)
232     TNT1 A 0 A_GiveInventory("SpikeGunZoomed", 1)
233     Goto ReadyIdle
235   UnZoom:
236     WSPS A 4 A_TakeInventory("SpikeGunZoomed", 1)
237     WSPS A 1 Offset(10000, 32)
238     WSPS A 1 Offset(10000, 35)
239     WSPS A 1 Offset(10000, 40)
240     WSPS A 1 Offset(10000, 48)
241     TNT1 A 0 A_ZoomFactor(1)
242     WSPI A 1 Offset(-15, 48)
243     WSPI A 1 Offset(-15, 42)
244     WSPI A 1 Offset(-15, 36)
245     Goto ReadyIdle
247   Fire:
248     TNT1 A 0 A_JumpIfNoAmmo("Reload")
249     TNT1 A 0 A_JumpIfInventory("SpikeGunZoomed", 1, "FireZoomed")
250     TNT1 A 0 A_JumpIf(waterlevel==3, "WaterFire")
251     SPGH A 0
252       {
253         user_lowPauseCount = -666;
254         A_GunFlash("Flash");
255         A_PlaySound("Weapons/SpikeGunFire", CHAN_WEAPON);
256         A_SetPitch(-0.50+pitch);
257       }
258     //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
259     WSPF A 1 A_FireProjectile("SpikeShot", frandom(-0.5, 0.5), 1, /*3*/0, 0, FPF_NOAUTOAIM, frandom(-0.5, 0.5))
260     WSPF A 1
261     WSPF A 0
262       {
263         A_GiveInventory("SpikeGunHeat", 1);
264         A_SpawnItemEx("SteamPuffSpikeGun", 10, 2, 60, 1, 0, 0, 0, SXF_NOCHECKPOSITION, 0);
265         A_SetPitch(-0.30+pitch);
266       }
267     //WSPI A 1 A_FireBullets(1, 1, 0, 3*random(2, 3), "HammerPuff", FPF_NOAUTOAIM)
268     WSPF B 2 Offset(0, 33)
269     WSPF B 0 A_SetPitch(0.40+pitch)
270     WSPF C 2 Offset(0, 34) //A_ReFire
271     WSPF C 0
272       {
273         A_SetPitch(0.40+pitch);
274         A_AlertMonsters();
275       }
276     Goto ReadyIdle
278   WaterFire:
279     TNT1 A 0 A_JumpIfNoAmmo("Reload")
280     TNT1 A 0 A_JumpIfInventory("SpikeGunZoomed", 1, "FireZoomed")
281     SPGH A 0
282       {
283         user_lowPauseCount = -666;
284         A_GunFlash("Flash");  //k8: i restored underwater flash
285         A_PlaySound("Weapons/SpikeGunFire", CHAN_WEAPON);
286         A_SetPitch(-0.2+pitch);
287       }
288     //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
289     WSPF A 1 A_FireProjectile("SpikeShotUnderwater", frandom(-0.7, 0.7), 1, /*3*/0, 0, FPF_NOAUTOAIM, frandom(-0.7, 0.7))
290     WSPF A 1
291     TNT1 A 0 A_SetPitch(0.1+pitch)
292     //WSPI A 1 A_FireBullets(1, 1, 0, 3*random(2, 3), "HammerPuff", FPF_NOAUTOAIM)
293     WSPF B 2 Offset(0, 33)
294     WSPF C 2 Offset(0, 34) //A_ReFire
295     TNT1 A 0 A_SetPitch(0.1+pitch)
296     TNT1 A 0 //A_AlertMonsters
297     Goto ReadyIdle
299   FireZoomed:
300     TNT1 A 0 A_JumpIfNoAmmo("Reload")
301     TNT1 A 0 A_JumpIf(waterlevel==3, "WaterFireZoomed")
302     WSPS A 0
303       {
304         user_lowPauseCount = -666;
305         A_PlaySound("Weapons/SpikeGunFire", CHAN_WEAPON);
306         A_SetPitch(-0.20+pitch);
307       }
308     //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
309     WSPS A 1 A_FireProjectile("SpikeShotAimed", frandom(-0.1, 0.1), 1, /*1*/0, 0, FPF_NOAUTOAIM, frandom(-0.2, 0.2))
310     WSPS A 0
311       {
312         A_GiveInventory("SpikeGunHeat", 1);
313         A_SpawnItemEx("SteamPuffSpikeGun", 10, 0, 62, 1, 0, 0, 0, SXF_NOCHECKPOSITION, 0);
314       }
315     WSPS A 1 Offset(0, 33)
316     WSPS A 0 A_SetPitch(0.10+pitch)
317     WSPS A 1 Offset(0, 34)
318     WSPS A 0
319       {
320         A_SetPitch(0.10+pitch);
321         A_AlertMonsters();
322       }
323     WSPS A 0 A_JumpIfNoAmmo("Reload")
324     WSPS A 0 A_JumpIf(waterlevel==3, "WaterFireZoomed")
325     WSPS A 0 A_PlaySound("Weapons/SpikeGunFire", CHAN_WEAPON)
326     WSPS A 0 A_SetPitch(-0.20+pitch)
327     //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
328     WSPS A 1 A_FireProjectile("SpikeShotAimed", frandom(-0.1, 0.1), 1, /*1*/0, 0, FPF_NOAUTOAIM, frandom(-0.2, 0.2))
329     WSPS A 0
330       {
331         A_GiveInventory("SpikeGunHeat", 1);
332         A_SpawnItemEx("SteamPuffSpikeGun", 10, 0, 62, 1, 0, 0, 0, SXF_NOCHECKPOSITION, 0);
333       }
334     WSPS A 1 Offset(0, 33)
335     WSPS A 0 A_SetPitch(0.10+pitch)
336     WSPS A 1 Offset(0, 34)
337     WSPS A 0
338       {
339         A_SetPitch(0.10+pitch);
340         A_AlertMonsters();
341       }
342     WSPS A 0 A_JumpIfNoAmmo("Reload")
343     WSPS A 0 A_JumpIf(waterlevel==3, "WaterFireZoomed")
344     WSPS A 0
345       {
346         A_PlaySound("Weapons/SpikeGunFire", CHAN_WEAPON);
347         A_SetPitch(-0.20+pitch);
348       }
349     //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
350     WSPS A 1 A_FireProjectile("SpikeShotAimed", frandom(-0.1, 0.1), 1, /*1*/0, 0, FPF_NOAUTOAIM, frandom(-0.2, 0.2))
351     WSPS A 0
352       {
353         A_GiveInventory("SpikeGunHeat", 1);
354         A_SpawnItemEx("SteamPuffSpikeGun", 10, 0, 62, 1, 0, 0, 0, SXF_NOCHECKPOSITION, 0);
355       }
356     WSPS A 1 Offset(0, 33)
357     WSPS A 0 A_SetPitch(0.10+pitch)
358     WSPS A 1 Offset(0, 34)
359     WSPS A 0
360       {
361         A_SetPitch(0.10+pitch);
362         A_AlertMonsters();
363       }
364     Goto BurstBreak
366   WaterFireZoomed:
367     TNT1 A 0 A_JumpIfNoAmmo("Reload")
368     WSPS A 0
369       {
370         user_lowPauseCount = -666;
371         A_PlaySound("Weapons/SpikeGunFire", CHAN_WEAPON);
372         A_SetPitch(-0.1+pitch);
373       }
374     //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
375     WSPS A 1 A_FireProjectile("SpikeShotAimedUnderwater", frandom(-0.3, 0.3), 1, /*1*/0, 0, FPF_NOAUTOAIM, frandom(-0.4, 0.4))
376     WSPS A 1 Offset(0, 33)
377     WSPS A 0 A_SetPitch(0.05+pitch)
378     WSPS A 1 Offset(0, 34)
379     WSPS A 0 A_SetPitch(0.05+pitch)
380     WSPS A 0 A_JumpIfNoAmmo("Reload")
381     WSPS A 0
382       {
383         A_PlaySound("Weapons/SpikeGunFire", CHAN_WEAPON);
384         A_SetPitch(-0.1+pitch);
385       }
386     //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
387     WSPS A 1 A_FireProjectile("SpikeShotAimedUnderwater", frandom(-0.3, 0.3), 1, /*1*/0, 0, FPF_NOAUTOAIM, frandom(-0.4, 0.4))
388     WSPS A 1 Offset(0, 33)
389     WSPS A 0 A_SetPitch(0.05+pitch)
390     WSPS A 1 Offset(0, 34)
391     WSPS A 0 A_SetPitch(0.05+pitch)
392     WSPS A 0 A_JumpIfNoAmmo("Reload")
393     WSPS A 0 A_PlaySound("Weapons/SpikeGunFire", CHAN_WEAPON)
394     WSPS A 0 A_SetPitch(-0.1+pitch)
395     //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
396     WSPS A 1 A_FireProjectile("SpikeShotAimedUnderwater", frandom(-0.3, 0.3), 1, /*1*/0, 0, FPF_NOAUTOAIM, frandom(-0.4, 0.4))
397     WSPS A 1 Offset(0, 33)
398     WSPS A 0 A_SetPitch(0.05+pitch)
399     WSPS A 1 Offset(0, 34)
400     WSPS A 0 A_SetPitch(0.05+pitch)
401     Goto BurstBreak
403   BurstBreak:
404     WSPS A 4 A_SpawnItemEx("SteamPuffSpikeGun", 10, -1, 62, 1, 0, 0, 0, SXF_NOCHECKPOSITION, 0)
405     WSPS A 4 A_SpawnItemEx("SteamPuffSpikeGun", 10, -1, 62, 1, 0, 0, 0, SXF_NOCHECKPOSITION, 0)
406     WSPS A 2
407     Goto ReadyIdle
409   Flash:
410     SPGF A 2 A_Light1
411     SPGF B 2 A_Light1
412     SPGF C 3 A_Light0
413     SPGF D 3 A_Light0
414     SPGF E 4 A_Light0
415     //TNT1 A 1 A_Light0
416     Goto LightDone
418   Reload:
419     WSPR A 0 A_JumpIfInventory("SpikeGunLoaded", 36, "ReloadFinish")
420     WSPR A 0
421       {
422         A_ZoomFactor(1);
423         A_TakeInventory("SpikeGunZoomed", 1);
424       }
425     WSPR A 0 A_JumpIfInventory("SpikeMag", 1, "ReloadWork")
426     WSPR A 0 A_JumpIfNoAmmo("DryFire")
427     WSPI A 1
428     Goto ReadyIdle
430   ReloadWork:
431     WSPI A 0 A_JumpIfInventory("SpikeGunHeat", 13, "ReloadWorkSteaming")
432     WSPI A 4 A_PlaySound("Weapons/SpikeGunReloadA", CHAN_WEAPON)
433     WSPI A 6 A_SpawnItem("SpikeMagDropped", -1, 16, 0)
434     WSPR G 2
435     WSPR A 3
436     WSPR B 9
437     WSPR C 3
438     WSPR D 3 A_PlaySound("Weapons/SpikeGunReloadB", CHAN_WEAPON)
439     WSPR E 3
440     WSPR F 3
441     WSPR A 2
442     WSPR G 2
443     Goto ReloadLoop
445   ReloadWorkSteaming:
446     WSPI A 4 A_PlaySound("Weapons/SpikeGunReloadA", CHAN_WEAPON)
447     WSPI A 3 A_SpawnItem("SpikeMagDropped", -1, 16, 0)
448     WSPI A 0
449       {
450         A_TakeInventory("SpikeGunHeat", 1);
451         A_SpawnItemEx("SteamPuffSpikeGun", 10, 2, 60, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
452       }
453     WSPI A 3
454     WSPI A 0
455       {
456         A_TakeInventory("SpikeGunHeat", 1);
457         A_SpawnItemEx("SteamPuffSpikeGun", 10, 2, 60, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
458       }
459     WSPR G 2
460     WSPI G 0
461       {
462         A_TakeInventory("SpikeGunHeat", 1);
463         A_SpawnItemEx("SteamPuffSpikeGun", 10, 2, 63, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
464       }
465     WSPR A 3
466     WSPR A 0
467       {
468         A_TakeInventory("SpikeGunHeat", 1);
469         A_SpawnItemEx("SteamPuffSpikeGun", 10, 2, 63, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
470       }
471     WSPR B 3
472     WSPR B 0
473       {
474         A_TakeInventory("SpikeGunHeat", 1);
475         A_SpawnItemEx("SteamPuffSpikeGun", 10, 5, 66, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
476       }
477     WSPR B 3
478     WSPR B 0
479       {
480         A_TakeInventory("SpikeGunHeat", 1);
481         A_SpawnItemEx("SteamPuffSpikeGun", 10, 5, 67, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
482       }
483     WSPR B 3
484     WSPR B 0
485       {
486         A_TakeInventory("SpikeGunHeat", 1);
487         A_SpawnItemEx("SteamPuffSpikeGun", 10, 5, 66, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
488       }
489     WSPR C 3
490     WSPR C 0
491       {
492         A_TakeInventory("SpikeGunHeat", 1);
493         A_SpawnItemEx("SteamPuffSpikeGun", 10, 5, 67, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
494       }
495     WSPR D 3 A_PlaySound("Weapons/SpikeGunReloadB", CHAN_WEAPON)
496     WSPR D 0
497       {
498         A_TakeInventory("SpikeGunHeat", 1);
499         A_SpawnItemEx("SteamPuffSpikeGun", 10, 5, 66, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
500       }
501     WSPR E 3
502     WSPR E 0
503       {
504         A_TakeInventory("SpikeGunHeat", 1);
505         A_SpawnItemEx("SteamPuffSpikeGun", 10, 5, 67, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
506       }
507     WSPR F 3
508     WSPR F 0
509       {
510         A_TakeInventory("SpikeGunHeat", 1);
511         A_SpawnItemEx("SteamPuffSpikeGun", 10, 5, 67, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
512       }
513     WSPR A 2
514     WSPR A 0
515       {
516         A_TakeInventory("SpikeGunHeat", 1);
517         A_SpawnItemEx("SteamPuffSpikeGun", 10, 2, 63, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
518       }
519     WSPR G 2
520     WSPR G 0
521       {
522         A_TakeInventory("SpikeGunHeat", 1);
523         A_SpawnItemEx("SteamPuffSpikeGun", 10, 2, 63, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
524       }
525     //Goto ReloadLoop
527   ReloadLoop:
528     TNT1 A 0
529       {
530         // if reload in not cheating, drop unused ammo
531         if (!GetCVar("k8ZanMod_CheatReload")) {
532           A_TakeInventory("SpikeGunLoaded", 666);
533         }
534         local clipCount = CountInv("SpikeMag");
535         local loadCount = 36-CountInv("SpikeGunLoaded");
536         if (loadCount > 0) {
537           if (loadCount > clipCount) loadCount = clipCount;
538           A_TakeInventory("SpikeMag", loadCount);
539           A_GiveInventory("SpikeGunLoaded", loadCount);
540         }
541         user_lowPauseCount = 0;
542       }
544   ReloadFinish:
545     TNT1 A 0
546     Goto ReadyIdle
548   DryFire:
549     WSPI A 16 A_PlaySound("Ammo/SpikeGunPick", CHAN_WEAPON, 0.2)
550     Goto ReadyIdle
552     stateinclude "QuickKick/QuickKickInclude.txt"
553   }
557 ACTOR SpikeGunZoomed : Inventory {
558   Inventory.MaxAmount 1
562 ACTOR SpikeShot : FastProjectile {
563   //Xscale 0.35
564   //Yscale 0.35
565   Radius 2
566   Height 2
567   Speed 160
568   Projectile
569   //MissileHeight 8
570   Damage (3*random(6, 8))
571   DamageType "SpikeGun"
572   +k8MissileHeadshots
573   +k8MissileHitscan  // block by "block hitscan" line flag, not by "block projectile" flag
574   +DONTREFLECT
575   +THRUGHOST
576   +NOEXTREMEDEATH
577   +BLOODSPLATTER
578   +BRIGHT
579   //+FORCEXYBILLBOARD
580   SeeSound "Weapons/SpikeShotSee"
581   DeathSound "Weapons/SpikeShotDeath"
582   Obituary "%o got nailed by %k."
583   Decal "SpikeDecalHot"
585   States {
586   Spawn:
587     PSPI Z 1 Bright //A_FaceMovementDirection(0, 0, 0)
588     Loop
590   Death:
591     TNT1 A 0
592     Stop
593   }
597 ACTOR SpikeShotAimed : FastProjectile {
598   Radius 2
599   Height 2
600   Speed 220
601   Damage (3*9)
602   DamageType "SpikeGun"
603   Projectile
604   +k8MissileHeadshots
605   +k8MissileHitscan  // block by "block hitscan" line flag, not by "block projectile" flag
606   +DONTREFLECT
607   +THRUGHOST
608   +NOEXTREMEDEATH
609   +BLOODSPLATTER
610   +BRIGHT
611   SeeSound "Weapons/SpikeShotSee"
612   DeathSound "Weapons/SpikeShotDeath"
613   Obituary "%o got surgically nailed by %k."
614   Decal "SpikeDecalHot"
616   States {
617   Spawn:
618     PSPI Z 1 Bright
619     Loop
621   Death:
622     TNT1 A 0
623     Stop
624   }
628 // Underwater shots
629 ACTOR SpikeShotUnderwater /*: FastProjectile*/ {
630   //Xscale 0.35
631   //Yscale 0.35
632   Radius 2
633   Height 2
634   Speed 60
635   Projectile
636   //MissileHeight 8
637   Damage (3*random(6, 8))
638   DamageType "SpikeGun"
639   +k8MissileHeadshots
640   +k8MissileHitscan  // block by "block hitscan" line flag, not by "block projectile" flag
641   +DONTREFLECT
642   +THRUGHOST
643   +NOEXTREMEDEATH
644   +BLOODSPLATTER
645   +NoTeleport
646   +k8AllowSimpleTick
647   //+FORCEXYBILLBOARD
648   //SeeSound "weapons/spikegunfire"
649   DeathSound "Weapons/SpikeShotDeath"
650   Obituary "%o got nailed by %k."
651   Decal "SpikeDecalHotUnderwater"
653   States {
654   Spawn:
655     PSPI Z 1 Bright A_SpawnItemEx("UnderwaterBubble", 0, 0, 0, random(-1, 1), random(-1, 1), random(1, 2), 0, SXF_NOCHECKPOSITION, 80)//A_FaceMovementDirection(0, 0, 0)
656     Loop
658   Death:
659     TNT1 AAAA 0 A_SpawnItemEx("UnderwaterBubble", 0, 0, 0, random(-1, 1), random(-1, 1), random(1, 2), 0, SXF_NOCHECKPOSITION, 80)
660     Stop
661   }
665 ACTOR SpikeShotAimedUnderwater /*: FastProjectile*/ {
666   Radius 2
667   Height 2
668   Speed 70
669   Damage (3*random(7, 8))
670   DamageType "SpikeGun"
671   Projectile
672   +k8MissileHeadshots
673   +k8MissileHitscan  // block by "block hitscan" line flag, not by "block projectile" flag
674   +DONTREFLECT
675   +THRUGHOST
676   +NOEXTREMEDEATH
677   +BLOODSPLATTER
678   +NoTeleport
679   +k8AllowSimpleTick
680   DeathSound "Weapons/SpikeShotDeath"
681   Obituary "%o got surgically nailed by %k."
682   Decal "SpikeDecalHotUnderwater"
684   States {
685   Spawn:
686     PSPI Z 1 Bright A_SpawnItemEx("UnderwaterBubble", 0, 0, 0, random(-1, 1), random(-1, 1), random(1, 2), 0, SXF_NOCHECKPOSITION, 80)
687     Loop
689   Death:
690     TNT1 AAAA 0 A_SpawnItemEx("UnderwaterBubble", 0, 0, 0, random(-1, 1), random(-1, 1), random(1, 2), 0, SXF_NOCHECKPOSITION, 80)
691     Stop
692   }
696 ACTOR SteamPuffSpikeGun {
697   Radius 5
698   Height 5
699   Mass 5
700   Scale 0.1
701   RenderStyle "Translucent"
702   Alpha 0.6
703   +NOGRAVITY
704   +NOBLOCKMAP
705   +NOINTERACTION
706   +NoTeleport
707   +k8AllowSimpleTick
709   States {
710   Spawn:
711     LPUF D 2
712     LPUF E 3
713     LPUF F 4
714     LPUF G 5
715     Stop
716   }
720 ACTOR SpikeGunHeat : Inventory {
721   Inventory.Amount 1
722   Inventory.MaxAmount 36
723   Inventory.InterHubAmount 36
725   States {
726   Spawn:
727     TNT1 A -1
728     Stop
729   }
733 // heretic
734 Actor (optional) Zan_GoldWandSpikeMag : SpikeMag Replaces GoldWandAmmo {}
735 Actor (optional) Zan_GoldWandSpikeMagBox : SpikeMagBox Replaces GoldWandHefty {}
737 Actor (optional) Zan_GoldWandSpikeGun : SpikeGun Replaces GoldWand {}
738 Actor (optional) Zan_GoldWandPoweredSpikeGun : SpikeGun Replaces GoldWandPowered {}
741 // hexen
742 Actor (optional) Zan_Mana1SpikeMag : SpikeMag Replaces Mana1 {}
744 Actor (optional) Zan_TPH_TPHPistol : SpikeGun Replaces TPHPistol {}
745 Actor (optional) Zan_TPH_PistolAmmo : SpikeMag Replaces PistolAmmo {}