small optimisations
[k8zan.git] / decorate / Weapons / SpikeGun.txt
blob557a621abb7209e391bcccc50d4aa21f03d3179a
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 10
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;
117   // temps
118   var int user_LoadCount;
119   var int user_ClipCount;
121   States {
122   Spawn:
123     SPGS A -1
124     Stop
126   PickupWeapon:
127     // always has some loaded ammo on first pickup
128     TNT1 A 0 A_GiveInventory("SpikeGunLoaded", random(1, 3)*10)
129     Stop
131   Select:
132     stateinclude "decorate/Weapons/QuickKick/QuickKickOnSelectDeselect.txt"
133     TNT1 A 0
134       {
135         A_GiveInventory("HoldingSpikeGun", 1);
136         if (GetCVarB('k8ZanMod_CustomCrosshairs')) A_SetCrosshair(3);
137       }
138     WSPI A 0 A_Raise(666)
139     Goto Ready
141   Deselect:
142     stateinclude "decorate/Weapons/QuickKick/QuickKickOnSelectDeselect.txt"
143     TNT1 A 0
144       {
145         A_TakeInventory("SpikeGunZoomed", 1);
146         A_ZoomFactor(1);
147         A_TakeInventory("SpikeGunHeat", 36);
148       }
149     WSPI A 1 Offset(-15, 40)
150     WSPI A 1 Offset(-30, 50)
151     WSPI A 1 Offset(-50, 65)
152     WSPI A 1 Offset(-70, 80)
153     Goto DeselectLoop
155   DeselectLoop:
156     TNT1 A 0 A_TakeInventory("HoldingSpikeGun", 1)
157     TNT1 A 1 A_Lower(666)  // was zero duration
158     Loop
160   Ready:
161     TNT1 A 8
162     TNT1 A 0 A_PlaySound("Ammo/SpikeGunPick", CHAN_WEAPON, 0.6)
163     WSPI A 1 Offset(-70, 80)
164     WSPI A 1 Offset(-50, 65)
165     WSPI A 1 Offset(-30, 50)
166     WSPI A 1 Offset(-15, 40)
167     TNT1 A 0 A_TakeInventory("QuickKickDisabled")
168     Goto ReadyIdle
170   ReadyIdle:
171     WSPI A 0
172       {
173         // low ammo sound
174         if (CountInv("SpikeGunLoaded") <= 8) {
175           user_lowPauseCount -= 1;
176           if (user_lowPauseCount < 1) {
177             if (GetCVarB("k8ZanMod_WarnLowAmmo")) {
178               A_PlaySound("weapons/zanweapon/lowammo", CHAN_VOICE, 1.0);
179             }
180             user_lowPauseCount = CountInv("SpikeGunLoaded");
181                  if (user_lowPauseCount > 6) user_lowPauseCount = 40;
182             else if (user_lowPauseCount > 4) user_lowPauseCount = 30;
183             else if (user_lowPauseCount > 0) user_lowPauseCount = 20;
184             else user_lowPauseCount = 10;
185           }
186         }
187       }
188     WSPI A 0 A_JumpIfInventory("SpikeGunZoomed", 1, "ReadyZoomed")
189     TNT1 A 0 Offset(-15, 40) { if (GetCVarB('k8ZanMod_CustomCrosshairs')) A_SetCrosshair(3); }
190     WSPI A 1 A_WeaponReady(WRF_ALLOWRELOAD)
191     TNT1 A 0 A_JumpIf(CountInv("SpikeGunHeat") > 28, "Steaming")
192     Loop
194   Steaming:
195     TNT1 A 0
196       {
197         A_TakeInventory("SpikeGunHeat", 1);
198         A_SpawnItemEx("SteamPuffSpikeGun", 10, 2, 60, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 150);
199       }
200     WSPI A 4 A_WeaponReady(WRF_ALLOWRELOAD)
201     Goto ReadyIdle
203   ReadyZoomed:
204     WSPS A 1 Offset(10000, 32) A_WeaponReady(WRF_ALLOWRELOAD)
205     TNT1 A 0 A_JumpIf(CountInv("SpikeGunHeat") > 28, "ZoomSteaming")
206     Goto ReadyIdle
208   ZoomSteaming:
209     TNT1 A 0
210       {
211         A_TakeInventory("SpikeGunHeat", 1);
212         A_SpawnItemEx("SteamPuffSpikeGun", 10, 0, 62, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 150);
213       }
214     WSPS A 4 A_WeaponReady(WRF_ALLOWRELOAD)
215     Goto ReadyIdle
217   Altfire:
218     WSPI A 0 A_JumpIfInventory("SpikeGunZoomed", 1, "UnZoom")
219     WSPI A 8 { if (GetCVarB('k8ZanMod_CustomCrosshairs')) A_SetCrosshair(1); }
220     WSPI A 1 Offset(10000, 36)
221     WSPI A 1 Offset(10000, 42)
222     WSPI A 1 Offset(10000, 48)
223     TNT1 A 0 A_ZoomFactor(2)
224     WSPS A 1 Offset(10000, 48)
225     WSPS A 1 Offset(10000, 40)
226     WSPS A 1 Offset(10000, 35)
227     WSPS A 1 Offset(10000, 32)
228     TNT1 A 0 A_GiveInventory("SpikeGunZoomed", 1)
229     Goto ReadyIdle
231   UnZoom:
232     WSPS A 4 A_TakeInventory("SpikeGunZoomed", 1)
233     WSPS A 1 Offset(10000, 32)
234     WSPS A 1 Offset(10000, 35)
235     WSPS A 1 Offset(10000, 40)
236     WSPS A 1 Offset(10000, 48)
237     TNT1 A 0 A_ZoomFactor(1)
238     WSPI A 1 Offset(-15, 48)
239     WSPI A 1 Offset(-15, 42)
240     WSPI A 1 Offset(-15, 36)
241     Goto ReadyIdle
243   Fire:
244     TNT1 A 0 A_JumpIfNoAmmo("Reload")
245     TNT1 A 0 A_JumpIfInventory("SpikeGunZoomed", 1, "FireZoomed")
246     TNT1 A 0 A_JumpIf(waterlevel==3, "WaterFire")
247     SPGH A 0
248       {
249         A_GunFlash("Flash");
250         A_PlaySound("Weapons/SpikeGunFire", CHAN_WEAPON);
251         A_SetPitch(-0.50+pitch);
252       }
253     //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
254     WSPF A 1 A_FireProjectile("SpikeShot", frandom(-0.5, 0.5), 1, /*3*/0, 0, FPF_NOAUTOAIM, frandom(-0.5, 0.5))
255     WSPF A 1
256     WSPF A 0
257       {
258         A_GiveInventory("SpikeGunHeat", 1);
259         A_SpawnItemEx("SteamPuffSpikeGun", 10, 2, 60, 1, 0, 0, 0, SXF_NOCHECKPOSITION, 0);
260         A_SetPitch(-0.30+pitch);
261       }
262     //WSPI A 1 A_FireBullets(1, 1, 0, 3*random(2, 3), "HammerPuff", FPF_NOAUTOAIM)
263     WSPF B 2 Offset(0, 33)
264     WSPF B 0 A_SetPitch(0.40+pitch)
265     WSPF C 2 Offset(0, 34) //A_ReFire
266     WSPF C 0
267       {
268         A_SetPitch(0.40+pitch);
269         A_AlertMonsters();
270       }
271     Goto ReadyIdle
273   WaterFire:
274     TNT1 A 0 A_JumpIfNoAmmo("Reload")
275     TNT1 A 0 A_JumpIfInventory("SpikeGunZoomed", 1, "FireZoomed")
276     SPGH A 0
277       {
278         A_GunFlash("Flash");  //k8: i restored underwater flash
279         A_PlaySound("Weapons/SpikeGunFire", CHAN_WEAPON);
280         A_SetPitch(-0.2+pitch);
281       }
282     //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
283     WSPF A 1 A_FireProjectile("SpikeShotUnderwater", frandom(-0.7, 0.7), 1, /*3*/0, 0, FPF_NOAUTOAIM, frandom(-0.7, 0.7))
284     WSPF A 1
285     TNT1 A 0 A_SetPitch(0.1+pitch)
286     //WSPI A 1 A_FireBullets(1, 1, 0, 3*random(2, 3), "HammerPuff", FPF_NOAUTOAIM)
287     WSPF B 2 Offset(0, 33)
288     WSPF C 2 Offset(0, 34) //A_ReFire
289     TNT1 A 0 A_SetPitch(0.1+pitch)
290     TNT1 A 0 //A_AlertMonsters
291     Goto ReadyIdle
293   FireZoomed:
294     TNT1 A 0 A_JumpIfNoAmmo("Reload")
295     TNT1 A 0 A_JumpIf(waterlevel==3, "WaterFireZoomed")
296     WSPS A 0
297       {
298         A_PlaySound("Weapons/SpikeGunFire", CHAN_WEAPON);
299         A_SetPitch(-0.20+pitch);
300       }
301     //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
302     WSPS A 1 A_FireProjectile("SpikeShotAimed", frandom(-0.1, 0.1), 1, /*1*/0, 0, FPF_NOAUTOAIM, frandom(-0.2, 0.2))
303     WSPS A 0
304       {
305         A_GiveInventory("SpikeGunHeat", 1);
306         A_SpawnItemEx("SteamPuffSpikeGun", 10, 0, 62, 1, 0, 0, 0, SXF_NOCHECKPOSITION, 0);
307       }
308     WSPS A 1 Offset(0, 33)
309     WSPS A 0 A_SetPitch(0.10+pitch)
310     WSPS A 1 Offset(0, 34)
311     WSPS A 0
312       {
313         A_SetPitch(0.10+pitch);
314         A_AlertMonsters();
315       }
316     WSPS A 0 A_JumpIfNoAmmo("Reload")
317     WSPS A 0 A_JumpIf(waterlevel==3, "WaterFireZoomed")
318     WSPS A 0 A_PlaySound("Weapons/SpikeGunFire", CHAN_WEAPON)
319     WSPS A 0 A_SetPitch(-0.20+pitch)
320     //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
321     WSPS A 1 A_FireProjectile("SpikeShotAimed", frandom(-0.1, 0.1), 1, /*1*/0, 0, FPF_NOAUTOAIM, frandom(-0.2, 0.2))
322     WSPS A 0
323       {
324         A_GiveInventory("SpikeGunHeat", 1);
325         A_SpawnItemEx("SteamPuffSpikeGun", 10, 0, 62, 1, 0, 0, 0, SXF_NOCHECKPOSITION, 0);
326       }
327     WSPS A 1 Offset(0, 33)
328     WSPS A 0 A_SetPitch(0.10+pitch)
329     WSPS A 1 Offset(0, 34)
330     WSPS A 0
331       {
332         A_SetPitch(0.10+pitch);
333         A_AlertMonsters();
334       }
335     WSPS A 0 A_JumpIfNoAmmo("Reload")
336     WSPS A 0 A_JumpIf(waterlevel==3, "WaterFireZoomed")
337     WSPS A 0
338       {
339         A_PlaySound("Weapons/SpikeGunFire", CHAN_WEAPON);
340         A_SetPitch(-0.20+pitch);
341       }
342     //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
343     WSPS A 1 A_FireProjectile("SpikeShotAimed", frandom(-0.1, 0.1), 1, /*1*/0, 0, FPF_NOAUTOAIM, frandom(-0.2, 0.2))
344     WSPS A 0
345       {
346         A_GiveInventory("SpikeGunHeat", 1);
347         A_SpawnItemEx("SteamPuffSpikeGun", 10, 0, 62, 1, 0, 0, 0, SXF_NOCHECKPOSITION, 0);
348       }
349     WSPS A 1 Offset(0, 33)
350     WSPS A 0 A_SetPitch(0.10+pitch)
351     WSPS A 1 Offset(0, 34)
352     WSPS A 0
353       {
354         A_SetPitch(0.10+pitch);
355         A_AlertMonsters;
356       }
357     Goto BurstBreak
359   WaterFireZoomed:
360     TNT1 A 0 A_JumpIfNoAmmo("Reload")
361     WSPS A 0
362       {
363         A_PlaySound("Weapons/SpikeGunFire", CHAN_WEAPON);
364         A_SetPitch(-0.1+pitch);
365       }
366     //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
367     WSPS A 1 A_FireProjectile("SpikeShotAimedUnderwater", frandom(-0.3, 0.3), 1, /*1*/0, 0, FPF_NOAUTOAIM, frandom(-0.4, 0.4))
368     WSPS A 1 Offset(0, 33)
369     WSPS A 0 A_SetPitch(0.05+pitch)
370     WSPS A 1 Offset(0, 34)
371     WSPS A 0 A_SetPitch(0.05+pitch)
372     WSPS A 0 A_JumpIfNoAmmo("Reload")
373     WSPS A 0
374       {
375         A_PlaySound("Weapons/SpikeGunFire", CHAN_WEAPON);
376         A_SetPitch(-0.1+pitch);
377       }
378     //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
379     WSPS A 1 A_FireProjectile("SpikeShotAimedUnderwater", frandom(-0.3, 0.3), 1, /*1*/0, 0, FPF_NOAUTOAIM, frandom(-0.4, 0.4))
380     WSPS A 1 Offset(0, 33)
381     WSPS A 0 A_SetPitch(0.05+pitch)
382     WSPS A 1 Offset(0, 34)
383     WSPS A 0 A_SetPitch(0.05+pitch)
384     WSPS A 0 A_JumpIfNoAmmo("Reload")
385     WSPS A 0 A_PlaySound("Weapons/SpikeGunFire", CHAN_WEAPON)
386     WSPS A 0 A_SetPitch(-0.1+pitch)
387     //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
388     WSPS A 1 A_FireProjectile("SpikeShotAimedUnderwater", frandom(-0.3, 0.3), 1, /*1*/0, 0, FPF_NOAUTOAIM, frandom(-0.4, 0.4))
389     WSPS A 1 Offset(0, 33)
390     WSPS A 0 A_SetPitch(0.05+pitch)
391     WSPS A 1 Offset(0, 34)
392     WSPS A 0 A_SetPitch(0.05+pitch)
393     Goto BurstBreak
395   BurstBreak:
396     WSPS A 4 A_SpawnItemEx("SteamPuffSpikeGun", 10, -1, 62, 1, 0, 0, 0, SXF_NOCHECKPOSITION, 0)
397     WSPS A 4 A_SpawnItemEx("SteamPuffSpikeGun", 10, -1, 62, 1, 0, 0, 0, SXF_NOCHECKPOSITION, 0)
398     WSPS A 2
399     Goto ReadyIdle
401   Flash:
402     SPGF A 2 A_Light1
403     SPGF B 2 A_Light1
404     SPGF C 3 A_Light0
405     SPGF D 3 A_Light0
406     SPGF E 4 A_Light0
407     //TNT1 A 1 A_Light0
408     Goto LightDone
410   Reload:
411     WSPR A 0 A_JumpIfInventory("SpikeGunLoaded", 36, "ReloadFinish")
412     WSPR A 0
413       {
414         A_ZoomFactor(1);
415         A_TakeInventory("SpikeGunZoomed", 1);
416       }
417     WSPR A 0 A_JumpIfInventory("SpikeMag", 1, "ReloadWork")
418     WSPR A 0 A_JumpIfNoAmmo("DryFire")
419     WSPI A 1
420     Goto ReadyIdle
422   ReloadWork:
423     WSPI A 0 A_JumpIf(CountInv("SpikeGunHeat") > 12, "ReloadWorkSteaming")
424     WSPI A 4 A_PlaySound("Weapons/SpikeGunReloadA", CHAN_WEAPON)
425     WSPI A 6 A_SpawnItem("SpikeMagDropped", -1, 16, 0)
426     WSPR G 2
427     WSPR A 3
428     WSPR B 9
429     WSPR C 3
430     WSPR D 3 A_PlaySound("Weapons/SpikeGunReloadB", CHAN_WEAPON)
431     WSPR E 3
432     WSPR F 3
433     WSPR A 2
434     WSPR G 2
435     Goto ReloadLoop
437   ReloadWorkSteaming:
438     WSPI A 4 A_PlaySound("Weapons/SpikeGunReloadA", CHAN_WEAPON)
439     WSPI A 3 A_SpawnItem("SpikeMagDropped", -1, 16, 0)
440     WSPI A 0
441       {
442         A_TakeInventory("SpikeGunHeat", 1);
443         A_SpawnItemEx("SteamPuffSpikeGun", 10, 2, 60, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
444       }
445     WSPI A 3
446     WSPI A 0
447       {
448         A_TakeInventory("SpikeGunHeat", 1);
449         A_SpawnItemEx("SteamPuffSpikeGun", 10, 2, 60, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
450       }
451     WSPR G 2
452     WSPI G 0
453       {
454         A_TakeInventory("SpikeGunHeat", 1);
455         A_SpawnItemEx("SteamPuffSpikeGun", 10, 2, 63, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
456       }
457     WSPR A 3
458     WSPR A 0
459       {
460         A_TakeInventory("SpikeGunHeat", 1);
461         A_SpawnItemEx("SteamPuffSpikeGun", 10, 2, 63, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
462       }
463     WSPR B 3
464     WSPR B 0
465       {
466         A_TakeInventory("SpikeGunHeat", 1);
467         A_SpawnItemEx("SteamPuffSpikeGun", 10, 5, 66, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
468       }
469     WSPR B 3
470     WSPR B 0
471       {
472         A_TakeInventory("SpikeGunHeat", 1);
473         A_SpawnItemEx("SteamPuffSpikeGun", 10, 5, 67, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
474       }
475     WSPR B 3
476     WSPR B 0
477       {
478         A_TakeInventory("SpikeGunHeat", 1);
479         A_SpawnItemEx("SteamPuffSpikeGun", 10, 5, 66, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
480       }
481     WSPR C 3
482     WSPR C 0
483       {
484         A_TakeInventory("SpikeGunHeat", 1);
485         A_SpawnItemEx("SteamPuffSpikeGun", 10, 5, 67, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
486       }
487     WSPR D 3 A_PlaySound("Weapons/SpikeGunReloadB", CHAN_WEAPON)
488     WSPR D 0
489       {
490         A_TakeInventory("SpikeGunHeat", 1);
491         A_SpawnItemEx("SteamPuffSpikeGun", 10, 5, 66, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
492       }
493     WSPR E 3
494     WSPR E 0
495       {
496         A_TakeInventory("SpikeGunHeat", 1);
497         A_SpawnItemEx("SteamPuffSpikeGun", 10, 5, 67, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
498       }
499     WSPR F 3
500     WSPR F 0
501       {
502         A_TakeInventory("SpikeGunHeat", 1);
503         A_SpawnItemEx("SteamPuffSpikeGun", 10, 5, 67, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
504       }
505     WSPR A 2
506     WSPR A 0
507       {
508         A_TakeInventory("SpikeGunHeat", 1);
509         A_SpawnItemEx("SteamPuffSpikeGun", 10, 2, 63, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
510       }
511     WSPR G 2
512     WSPR G 0
513       {
514         A_TakeInventory("SpikeGunHeat", 1);
515         A_SpawnItemEx("SteamPuffSpikeGun", 10, 2, 63, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 80);
516       }
517     //Goto ReloadLoop
519   ReloadLoop:
520     TNT1 A 0
521       {
522         // if reload in not cheating, drop unused ammo
523         if (!GetCVar("k8ZanMod_CheatReload")) {
524           A_TakeInventory("SpikeGunLoaded", 666);
525         }
526         user_ClipCount = CountInv("SpikeMag");
527         user_LoadCount = 36-CountInv("SpikeGunLoaded");
528         if (user_LoadCount > 0) {
529           if (user_LoadCount > user_ClipCount) user_LoadCount = user_ClipCount;
530           A_TakeInventory("SpikeMag", user_LoadCount);
531           A_GiveInventory("SpikeGunLoaded", user_LoadCount);
532         }
533         user_lowPauseCount = 0;
534       }
536   ReloadFinish:
537     TNT1 A 0
538     Goto ReadyIdle
540   DryFire:
541     WSPI A 16 A_PlaySound("Ammo/SpikeGunPick", CHAN_WEAPON, 0.2)
542     Goto ReadyIdle
544     stateinclude "decorate/Weapons/QuickKick/QuickKickInclude.txt"
545   }
549 ACTOR SpikeGunZoomed : Inventory {
550   Inventory.MaxAmount 1
554 ACTOR SpikeShot : FastProjectile {
555   //Xscale 0.35
556   //Yscale 0.35
557   Radius 2
558   Height 2
559   Speed 160
560   Projectile
561   //MissileHeight 8
562   Damage (3*random(6, 8))
563   DamageType "SpikeGun"
564   +k8MissileHeadshots
565   +DONTREFLECT
566   +THRUGHOST
567   +NOEXTREMEDEATH
568   +BLOODSPLATTER
569   +BRIGHT
570   //+FORCEXYBILLBOARD
571   SeeSound "Weapons/SpikeShotSee"
572   DeathSound "Weapons/SpikeShotDeath"
573   Obituary "%o got nailed by %k."
574   Decal "SpikeDecalHot"
576   States {
577   Spawn:
578     PSPI Z 1 //A_FaceMovementDirection(0, 0, 0)
579     Loop
581   Death:
582     TNT1 A 0
583     Stop
584   }
588 ACTOR SpikeShotAimed : FastProjectile {
589   Radius 2
590   Height 2
591   Speed 220
592   Damage (3*random(9, 9))
593   DamageType "SpikeGun"
594   Projectile
595   +k8MissileHeadshots
596   +DONTREFLECT
597   +THRUGHOST
598   +NOEXTREMEDEATH
599   +BLOODSPLATTER
600   +BRIGHT
601   SeeSound "Weapons/SpikeShotSee"
602   DeathSound "Weapons/SpikeShotDeath"
603   Obituary "%o got surgically nailed by %k."
604   Decal "SpikeDecalHot"
606   States {
607   Spawn:
608     PSPI Z 1
609     Loop
611   Death:
612     TNT1 A 0
613     Stop
614   }
618 // Underwater shots
619 ACTOR SpikeShotUnderwater /*: FastProjectile*/ {
620   //Xscale 0.35
621   //Yscale 0.35
622   Radius 2
623   Height 2
624   Speed 60
625   Projectile
626   //MissileHeight 8
627   Damage (3*random(6, 8))
628   DamageType "SpikeGun"
629   +k8MissileHeadshots
630   +DONTREFLECT
631   +THRUGHOST
632   +NOEXTREMEDEATH
633   +BLOODSPLATTER
634   +NoTeleport
635   +k8AllowSimpleTick
636   //+FORCEXYBILLBOARD
637   //SeeSound "weapons/spikegunfire"
638   DeathSound "Weapons/SpikeShotDeath"
639   Obituary "%o got nailed by %k."
640   Decal "SpikeDecalHotUnderwater"
642   States {
643   Spawn:
644     PSPI Z 1 A_SpawnItemEx("UnderwaterBubble", 0, 0, 0, random(-1, 1), random(-1, 1), random(1, 2), 0, SXF_NOCHECKPOSITION, 80)//A_FaceMovementDirection(0, 0, 0)
645     Loop
647   Death:
648     TNT1 AAAA 0 A_SpawnItemEx("UnderwaterBubble", 0, 0, 0, random(-1, 1), random(-1, 1), random(1, 2), 0, SXF_NOCHECKPOSITION, 80)
649     Stop
650   }
654 ACTOR SpikeShotAimedUnderwater /*: FastProjectile*/ {
655   Radius 2
656   Height 2
657   Speed 70
658   Damage (3*random(7, 8))
659   DamageType "SpikeGun"
660   Projectile
661   +k8MissileHeadshots
662   +DONTREFLECT
663   +THRUGHOST
664   +NOEXTREMEDEATH
665   +BLOODSPLATTER
666   +NoTeleport
667   +k8AllowSimpleTick
668   DeathSound "Weapons/SpikeShotDeath"
669   Obituary "%o got surgically nailed by %k."
670   Decal "SpikeDecalHotUnderwater"
672   States {
673   Spawn:
674     PSPI Z 1 A_SpawnItemEx("UnderwaterBubble", 0, 0, 0, random(-1, 1), random(-1, 1), random(1, 2), 0, SXF_NOCHECKPOSITION, 80)
675     Loop
677   Death:
678     TNT1 AAAA 0 A_SpawnItemEx("UnderwaterBubble", 0, 0, 0, random(-1, 1), random(-1, 1), random(1, 2), 0, SXF_NOCHECKPOSITION, 80)
679     Stop
680   }
684 ACTOR SteamPuffSpikeGun {
685   Radius 5
686   Height 5
687   Mass 5
688   Scale 0.1
689   RenderStyle "Translucent"
690   Alpha 0.6
691   +NOGRAVITY
692   +NOBLOCKMAP
693   +NOINTERACTION
694   +NoTeleport
695   +k8AllowSimpleTick
697   States {
698   Spawn:
699     LPUF D 2
700     LPUF E 3
701     LPUF F 4
702     LPUF G 5
703     Stop
704   }
708 ACTOR SpikeGunHeat : Inventory {
709   Inventory.Amount 1
710   Inventory.MaxAmount 36
711   Inventory.InterHubAmount 36
713   States {
714   Spawn:
715     TNT1 A -1
716     Stop
717   }
721 // heretic
722 Actor (optional) Zan_GoldWandSpikeMag : SpikeMag Replaces GoldWandAmmo {}
723 Actor (optional) Zan_GoldWandSpikeMagBox : SpikeMagBox Replaces GoldWandHefty {}
725 Actor (optional) Zan_GoldWandSpikeGun : SpikeGun Replaces GoldWand {}
726 Actor (optional) Zan_GoldWandPoweredSpikeGun : SpikeGun Replaces GoldWandPowered {}
729 // hexen
730 Actor (optional) Zan_Mana1SpikeMag : SpikeMag Replaces Mana1 {}
732 Actor (optional) Zan_TPH_TPHPistol : SpikeGun Replaces TPHPistol {}
733 Actor (optional) Zan_TPH_PistolAmmo : SpikeMag Replaces PistolAmmo {}