1 ACTOR BoltMag : Ammo replaces RocketBox {
8 Ammo.BackpackMaxAmount 54
9 Inventory.Icon "ABOLA0"
10 Inventory.PickupMessage "Picked up a Boltmag."
11 Inventory.PickupSound "Ammo/BoltMagPick"
21 ACTOR BoltMagOne : BoltMag replaces RocketAmmo {
26 Inventory.PickupMessage "Picked up one Bolt."
36 ACTOR BoltMagDropped {
55 BounceSound "Ammo/BoltmagBounce"
69 ACTOR CrushbowLoaded : Ammo {
73 Ammo.BackpackMaxAmount 6
74 +INVENTORY.IGNORESKILL
78 ACTOR Crushbow : Weapon replaces RocketLauncher {
84 +INVENTORY.UNDROPPABLE
86 //+WEAPON.NO_AUTO_SWITCH
88 //+WEAPON.ALT_USES_BOTH
89 Inventory.PickupMessage "Got a Crushbow."
90 Inventory.PickupSound "Weapons/CrushbowPump"
91 //Inventory.Icon "WCRUA0"
93 Weapon.SelectionOrder 5
94 //Weapon.MinSelectionAmmo1 0
95 //Weapon.MinSelectionAmmo2 1
96 Weapon.AmmoType1 "CrushbowLoaded"
99 Weapon.AmmoType2 "BoltMag"
104 var int user_lowPauseCount;
113 TNT1 A 0 A_k8ConLog(va("trying to pickup weapon, self=%C", GetSelf))
118 // always has some loaded ammo on first pickup
119 TNT1 A 0 A_GiveInventory("CrushbowLoaded", random(1, 4))
123 stateinclude "QuickKick/QuickKickOnSelectDeselect.txt"
124 TNT1 A 0 A_GiveInventory("HoldingCrushbow", 1)
125 TNT1 A 0 { if (GetCVarB('k8ZanMod_CustomCrosshairs')) A_SetCrosshair(5); }
126 TNT1 A 0 A_Raise(666)
130 stateinclude "QuickKick/QuickKickOnSelectDeselect.txt"
131 WCRR A 1 Offset(-15, 40)
132 WCRR A 1 Offset(-30, 50)
133 WCRR A 1 Offset(-50, 65)
134 WCRR A 1 Offset(-70, 80)
138 TNT1 A 0 A_TakeInventory("HoldingCrushbow", 1)
139 TNT1 A 1 A_Lower(666) // was zero duration
144 TNT1 A 0 A_PlaySound("Weapons/CrushbowPump", CHAN_WEAPON, 0.6)
145 WCRR A 1 Offset(-70, 80)
146 WCRR A 1 Offset(-50, 65)
147 WCRR A 1 Offset(-30, 50)
148 WCRR A 1 Offset(-15, 40)
149 TNT1 A 0 A_TakeInventory("QuickKickDisabled")
156 if (CountInv("CrushbowLoaded") < 3) {
157 user_lowPauseCount -= 1;
158 if (user_lowPauseCount < 1) {
159 if (user_lowPauseCount > -666 && GetCVarB("k8ZanMod_WarnLowAmmo")) {
160 A_PlaySound("weapons/zanweapon/lowammo", CHAN_VOICE, 1.0);
162 local ammoCount = CountInv("CrushbowLoaded");
163 if (ammoCount > 1) user_lowPauseCount = 30/8;
164 else if (ammoCount > 0) user_lowPauseCount = 20/8;
165 else user_lowPauseCount = 10; // no need to divide here
169 TNT1 A 0 A_JumpIfNotInventory("CrushbowLoaded", "ReadyEmptyGun")
170 WCRR A 8 A_WeaponReady(WRF_ALLOWRELOAD)
174 WCRF E 1 A_WeaponReady(WRF_ALLOWRELOAD)
176 Goto ReadyIdle // for sound
179 TNT1 A 0 A_JumpIfNoAmmo("Reload")
180 TNT1 A 0 A_JumpIf(waterlevel==3, "WaterFire")
181 WSPI A 0 A_FireProjectile("FireBolt", 0, 1, /*2*/0, 1, FPF_NOAUTOAIM, 0)
183 WCRF A 1 A_SetPitch(0.50+pitch)
184 WCRF B 1 A_SetPitch(0.50+pitch)
185 WCRF C 1 A_SetPitch(0.50+pitch)
186 TNT1 A 0 A_PlaySound("Weapons/CrushbowFire", CHAN_WEAPON)
187 WCRF D 1 A_SetPitch(1.00+pitch)
188 WCRF D 1 A_SetPitch(-1.00+pitch)
189 WCRF D 1 A_SetPitch(1.00+pitch)
190 WCRF D 1 A_SetPitch(-1.00+pitch)
191 WCRF D 4 A_AlertMonsters
192 TNT1 A 0 A_JumpIfNotInventory("CrushbowLoaded", "ReadyEmptyGun")
194 WCRF E 3 A_SetPitch(-0.50+pitch)
195 TNT1 A 0 A_PlaySound("Weapons/CrushbowPump", CHAN_WEAPON)
196 WCRF F 3 A_SetPitch(-0.50+pitch)
197 WCRR A 4 A_SetPitch(-0.50+pitch)
201 user_lowPauseCount = -666;
206 TNT1 A 0 A_JumpIfNoAmmo("Reload")
207 WSPI A 0 A_FireProjectile("FireBoltUnderwater", 0, 1, /*2*/0, 1, FPF_NOAUTOAIM, 0)
209 WCRF A 1 A_SetPitch(0.25+pitch)
210 WCRF B 1 A_SetPitch(0.25+pitch)
211 WCRF C 1 A_SetPitch(0.25+pitch)
212 TNT1 A 0 A_PlaySound("Weapons/CrushbowFire", CHAN_WEAPON)
213 WCRF D 1 A_SetPitch(0.50+pitch)
214 WCRF D 1 A_SetPitch(-0.50+pitch)
215 WCRF D 1 A_SetPitch(0.50+pitch)
216 WCRF D 1 A_SetPitch(-0.50+pitch)
217 WCRF D 4 A_AlertMonsters
218 TNT1 A 0 A_JumpIfNotInventory("CrushbowLoaded", "ReadyEmptyGun")
219 WCRF D 8 A_AlertMonsters
220 WCRF E 3 A_SetPitch(-0.25+pitch)
221 TNT1 A 0 A_PlaySound("Weapons/CrushbowPump", CHAN_WEAPON, 0.5)
222 WCRF F 3 A_SetPitch(-0.25+pitch)
225 A_SetPitch(-0.25+pitch);
226 user_lowPauseCount = -666;
231 TNT1 A 0 A_JumpIfNotInventory("CrushbowLoaded", "Reload")
232 TNT1 A 0 A_TakeInventory("CrushbowLoaded", 1)
233 TNT1 A 0 A_JumpIf(waterlevel==3, "WaterAltFire")
234 WSPI A 0 A_FireProjectile("ImpactBolt", 0, 1, /*2*/0, 1, FPF_NOAUTOAIM, 0)
236 WCRF A 1 A_SetPitch(0.50+pitch)
237 WCRF B 1 A_SetPitch(0.50+pitch)
238 WCRF C 1 A_SetPitch(0.50+pitch)
239 TNT1 A 0 A_PlaySound("Weapons/CrushbowFire", CHAN_WEAPON)
240 WCRF D 1 A_SetPitch(1.00+pitch)
241 WCRF D 1 A_SetPitch(-1.00+pitch)
242 WCRF D 1 A_SetPitch(1.00+pitch)
243 WCRF D 1 A_SetPitch(-1.00+pitch)
244 TNT1 A 0 A_JumpIfNotInventory("CrushbowLoaded", "ReadyEmptyGun")
246 WCRF E 3 A_SetPitch(-0.50+pitch)
247 TNT1 A 0 A_PlaySound("Weapons/CrushbowPump", CHAN_WEAPON)
248 WCRF F 3 A_SetPitch(-0.50+pitch)
249 WCRR A 4 A_SetPitch(-0.50+pitch)
253 user_lowPauseCount = -666;
258 TNT1 A 0 A_JumpIfNotInventory("CrushbowLoaded", "Reload")
259 TNT1 A 0 A_TakeInventory("CrushbowLoaded", 1)
260 WSPI A 0 A_FireProjectile("ImpactBoltUnderwater", 0, 1, /*2*/0, 1, FPF_NOAUTOAIM, 0)
262 WCRF A 1 A_SetPitch(0.25+pitch)
263 WCRF B 1 A_SetPitch(0.25+pitch)
264 WCRF C 1 A_SetPitch(0.25+pitch)
265 TNT1 A 0 A_PlaySound("Weapons/CrushbowFire", CHAN_WEAPON)
266 WCRF D 1 A_SetPitch(0.50+pitch)
267 WCRF D 1 A_SetPitch(-0.50+pitch)
268 WCRF D 1 A_SetPitch(0.50+pitch)
269 WCRF D 1 A_SetPitch(-0.50+pitch)
270 TNT1 A 0 A_JumpIfNotInventory("CrushbowLoaded", "ReadyEmptyGun")
272 WCRF E 3 A_SetPitch(-0.25+pitch)
273 TNT1 A 0 A_PlaySound("Weapons/CrushbowPump", CHAN_WEAPON, 0.5)
274 WCRF F 3 A_SetPitch(-0.25+pitch)
277 A_SetPitch(-0.25+pitch);
278 user_lowPauseCount = -666;
283 WCRF E 16 A_PlaySound("Ammo/SpikeGunPick", CHAN_WEAPON, 0.2)
287 WFRR A 0 A_JumpIfInventory("CrushbowLoaded", 6, "ReloadFinish")
288 WFRR A 0 A_JumpIfInventory("BoltMag", 1, "ReloadWork")
289 WFRR A 0 A_JumpIfNoAmmo("Dryfire")
290 WCRR A 1 A_JumpIfNotInventory("BoltMag", "ReadyIdle")
294 WCRF E 3 A_PlaySound("Weapons/CrushbowReloadA", CHAN_WEAPON)
298 WCRL D 4 A_SpawnItem("BoltmagDropped", -1, 16, 0)
299 WCRL D 8 A_PlaySound("Weapons/CrushbowReloadB", CHAN_WEAPON)
303 WCRL H 3 A_PlaySound("Weapons/CrushbowPump", CHAN_WEAPON)
312 // if reload in not cheating, drop unused ammo
313 if (!GetCVar("k8ZanMod_CheatReload")) {
314 A_TakeInventory("CrushbowLoaded", 666);
316 local clipCount = CountInv("BoltMag");
317 local loadCount = 6-CountInv("CrushbowLoaded");
319 if (loadCount > clipCount) loadCount = clipCount;
320 A_TakeInventory("BoltMag", loadCount);
321 A_GiveInventory("CrushbowLoaded", loadCount);
323 user_lowPauseCount = 0;
330 stateinclude "QuickKick/QuickKickInclude.txt"
343 ProjectileKickBack 250
344 Damage(80*random(1, 1))
345 DamageType "Crushbow"
351 SeeSound "Weapons/BoltSee"
352 Obituary "%o was turned into meatballs by %k's Fire Bolt."
353 Decal "FireBoltDecalHot"
358 TNT1 A 0 A_SpawnItemEx("FireBoltTrail", random(-1, 1), random(-1, 1), random(-1, 1), random(-1, 1), random(-1, 1), random(-1, 1), 0, SXF_NOCHECKPOSITION, 0)
359 TNT1 A 0 A_SpawnItemEx("FireBoltTrail", random(-1, 1), random(-1, 1), random(-1, 1), random(-1, 1), random(-1, 1), random(-1, 1), 0, SXF_NOCHECKPOSITION, 0)
360 TNT1 A 0 A_SpawnItemEx("FireBoltTrail", random(-1, 1), random(-1, 1), random(-1, 1), random(-1, 1), random(-1, 1), random(-1, 1), 0, SXF_NOCHECKPOSITION, 0)
364 TNT1 A 0 A_Explode(random(20, 30), 176, (GetCVarB('k8ZanMod_DamageSelfCrushbow') ? XF_HURTSOURCE : 0), True, 64, 0, 0, " ", "Fire")
365 TNT1 A 1 A_Explode(100, 176, (GetCVarB('k8ZanMod_DamageSelfCrushbow') ? XF_HURTSOURCE : 0), True, 64, 0, 0, " ", "Crushbow")
366 TNT1 A 0 A_JumpIf(WaterLevel>0, "WaterDeath")
367 TNT1 A 0 A_SpawnItemEx("ExplosionLarge", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 0)
368 TNT1 A 0 A_SpawnItemEx("FireTinyDie1", random(-40, 40), random(-40, 40), 1, 0, 0, 0, 0, 0, 0)
369 TNT1 A 0 A_SpawnItemEx("FireTinyDie2", random(-50, 50), random(-50, 50), 1, 0, 0, 0, 0, 0, 50)
370 TNT1 A 0 A_SpawnItemEx("FireTinyDie3", random(-60, 60), random(-60, 60), 1, 0, 0, 0, 0, 0, 100)
371 TNT1 A 0 A_SpawnItemEx("FireTinyDie1", random(-70, 70), random(-70, 70), 1, 0, 0, 0, 0, 0, 50)
372 TNT1 A 0 A_SpawnItemEx("FireTinyDie2", random(-80, 80), random(-80, 80), 1, 0, 0, 0, 0, 0, 0)
373 TNT1 A 0 A_SpawnItemEx("FireTinyDie3", random(-90, 90), random(-90, 90), 1, 0, 0, 0, 0, 0, 100)
374 TNT1 A 30 A_Quake(3, 30, 0, 1200)
375 TNT1 A 0 A_AlertMonsters(1200)
379 TNT1 AAAAAAAAAAAAAAA 0 A_SpawnItemEx("UnderwaterBubble", 0, 0, 0, random(-5, 5), random(-5, 5), random(1, 4), 0, SXF_NOCHECKPOSITION, 0)
385 ACTOR ImpactBolt : FastProjectile {
392 Damage (200*random(1, 1))
393 DamageType "Crushbow"
395 ProjectileKickBack 400
404 SeeSound "Weapons/BoltSee"
405 Obituary "%o was shattered to bits by %k's Impact Bolt."
406 Decal "ImpactBoltDecalHot"
411 TNT1 AAA 0 A_SpawnItemEx("MagicSparkCyanSmall", random(-1, 1), random(-1, 1), random(-1, 1), random(-1, 1), random(-1, 1), random(-1, 1), 0, SXF_NOCHECKPOSITION, 50)
412 TNT1 A 0 A_SpawnItemEx("FireBoltTrail", 0, 0, 0, random(-1, 1), random(-1, 1), random(-1, 1), 0, SXF_NOCHECKPOSITION, 100)
416 TNT1 A 0 A_Explode(random(5, 15), 80, (GetCVarB('k8ZanMod_DamageSelfCrushbow') ? XF_HURTSOURCE : 0), True, 5, 0, 0, " ", "Fire")
417 TNT1 A 1 A_Explode(random(15, 25), 80, (GetCVarB('k8ZanMod_DamageSelfCrushbow') ? XF_HURTSOURCE : 0), True, 5, 0, 0, " ", "Crushbow")
418 TNT1 A 0 A_JumpIf(WaterLevel>0, "WaterDeath")
419 TNT1 A 0 A_SpawnItemEx("ExplosionSmall", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 0)
420 TNT1 A 16 A_Quake(2, 16, 0, 900)
421 TNT1 A 0 A_AlertMonsters(900)
425 TNT1 AAAAAAAAAA 0 A_SpawnItemEx("UnderwaterBubble", 0, 0, 0, random(-5, 5), random(-5, 5), random(1, 4), 0, SXF_NOCHECKPOSITION, 0)
431 ACTOR FireBoltUnderwater {
439 ProjectileKickBack 50
440 Damage(30*random(1, 1))
441 DamageType "Crushbow"
448 SeeSound "Weapons/BoltSee"
449 Obituary "%o was turned into meatballs by %k's Fire Bolt."
450 //Decal "FireBoltDecalHot"
454 PBOL Y 1 A_SpawnItemEx("UnderwaterBubble", 0, 0, 0, random(-1, 1), random(-1, 1), random(1, 2), 0, SXF_NOCHECKPOSITION, 80)
455 TNT1 AAA 0 A_SpawnItemEx("FireBoltTrail", random(-1, 1), random(-1, 1), random(-1, 1), random(-1, 1), random(-1, 1), random(-1, 1), 0, SXF_NOCHECKPOSITION, 0)
459 TNT1 A 0 A_JumpIf(WaterLevel>=1, "WaterDeath")
460 TNT1 A 0 A_Explode(random(100, 120), 200, 0, True, 0, 0, 0, " ", "Crushbow")
461 TNT1 A 0 A_SpawnItemEx("ExplosionLarge", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 0)
462 TNT1 A 30 A_Quake(2, 30, 0, 1000)
466 TNT1 A 0 A_Explode(random(10, 20), 64, 0, True, 0, 0, 0, " ", "Crushbow")
467 TNT1 AAAAAAAAAAAAAAA 0 A_SpawnItemEx("UnderwaterBubble", 0, 0, 0, random(-5, 5), random(-5, 5), random(1, 4), 0, SXF_NOCHECKPOSITION, 0)
473 ACTOR ImpactBoltUnderwater {
480 Damage (200*random(1, 1))
481 DamageType "Crushbow"
483 ProjectileKickBack 200
489 SeeSound "Weapons/BoltSee"
490 Obituary "%o was shattered by %k's Impact Bolt."
491 Decal "ImpactBoltDecalHot"
495 PBOL Z 1 A_SpawnItemEx("UnderwaterBubble", 0, 0, 0, random(-1, 1), random(-1, 1), random(1, 2), 0, SXF_NOCHECKPOSITION, 80)
496 TNT1 AAA 0 A_SpawnItemEx("MagicSparkCyanSmall", random(-1, 1), random(-1, 1), random(-1, 1), random(-1, 1), random(-1, 1), random(-1, 1), 0, SXF_NOCHECKPOSITION, 50)
497 TNT1 A 0 A_SpawnItemEx("FireBoltTrail", 0, 0, 0, random(-1, 1), random(-1, 1), random(-1, 1), 0, SXF_NOCHECKPOSITION, 100)
501 TNT1 A 0 A_Explode(random(15, 25), 80, 0, False, 0, 0, 0, " ", "Crushbow")
502 TNT1 A 0 A_JumpIf(WaterLevel>0, "WaterDeath")
503 TNT1 A 0 A_SpawnItemEx("ExplosionSmall", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 0)
504 TNT1 A 16 A_Quake(2, 16, 0, 900)
508 TNT1 AAAAAAAAAA 0 A_SpawnItemEx("UnderwaterBubble", 0, 0, 0, random(-5, 5), random(-5, 5), random(1, 4), 0, SXF_NOCHECKPOSITION, 0)
515 Actor (optional) Zan_BlasterBoltMagOne : BoltMagOne Replaces BlasterAmmo {}
516 Actor (optional) Zan_BlasterBoltMag : BoltMag Replaces BlasterHefty {}
518 Actor (optional) Zan_BlasterCrushbow : Crushbow Replaces Blaster {}
519 Actor (optional) Zan_BlasterPoweredCrushbow : Crushbow Replaces BlasterPowered {}
521 Actor (optional) Zan_TPH_TPHRocketLauncher : Crushbow Replaces TPHRocketLauncher {}