1 ACTOR IsDraining : Inventory {
4 Inventory.InterHubAmount 0
15 ACTOR HellclawDrainKilled : Inventory {
23 ACTOR BearzerkHellclaw {
35 ACTOR HellEnergy : Ammo {
37 Inventory.MaxAmount 150
38 Ammo.BackpackAmount 60
39 Ammo.BackpackMaxAmount 360
40 Inventory.Icon "WHELB0"
50 ACTOR Hellclaw : Weapon replaces SuperShotgun {
54 +INVENTORY.UNDROPPABLE
56 //+WEAPON.NO_AUTO_SWITCH
58 //+WEAPON.ALT_USES_BOTH
59 Inventory.PickupMessage "Got a Hellclaw."
60 Inventory.PickupSound "Weapons/HellclawPick"
61 Inventory.Icon "WHELA0"
63 Weapon.SelectionOrder 4
64 //Weapon.MinSelectionAmmo1 0
65 //Weapon.MinSelectionAmmo2 0
66 Weapon.AmmoType1 "HellEnergy"
69 Weapon.AmmoType2 "none"
72 Weapon.SlotNumber 1 // was 4
73 Weapon.SlotPriority 0.5
81 stateinclude "QuickKick/QuickKickOnSelectDeselect.txt"
82 TNT1 A 0 A_GiveInventory("HoldingFists", 1)
83 TNT1 A 0 { if (GetCVarB('k8ZanMod_CustomCrosshairs')) A_SetCrosshair(13); }
88 stateinclude "QuickKick/QuickKickOnSelectDeselect.txt"
89 TNT1 A 0 A_TakeInventory("IsDraining", 1)
90 WHER A 1 Offset(-15, 40)
91 WHER A 1 Offset(-30, 50)
92 WHER A 1 Offset(-50, 65)
93 WHER A 1 Offset(-70, 80)
97 TNT1 A 0 A_TakeInventory("HoldingFists", 1)
103 TNT1 A 0 A_PlaySound("Weapons/HellclawReady", CHAN_WEAPON)
104 WHER A 1 Offset(-70, 80)
105 WHER A 1 Offset(-50, 65)
106 WHER A 1 Offset(-30, 50)
107 WHER A 1 Offset(-15, 40)
108 TNT1 A 0 A_TakeInventory("QuickKickDisabled")
112 WHER AAAA 17 A_WeaponReady(WRF_ALLOWRELOAD) // was one 70
113 WHER BCB 2 A_WeaponReady(WRF_NOFIRE)
114 WHER AA 17 A_WeaponReady(WRF_ALLOWRELOAD)
115 WHER B 4 A_WeaponReady(WRF_NOFIRE)
116 WHER AAAAAA 17 A_WeaponReady(WRF_ALLOWRELOAD) // was one 105
117 WHER BCB 2 A_WeaponReady(WRF_NOFIRE)
118 WHER A 16 A_WeaponReady(WRF_ALLOWRELOAD)
119 WHER B 4 A_WeaponReady(WRF_NOFIRE)
123 TNT1 A 0 A_JumpIfNoAmmo("Reload")
124 TNT1 A 0 A_JumpIfInventory("IsDraining", 1, "Reload")
127 A_PlaySound("Weapons/HellclawFire", CHAN_WEAPON);
128 A_SetPitch(-1.0+pitch);
134 A_SetPitch(-0.15+pitch);
135 A_PlaySound("Weapons/HellclawFire", CHAN_WEAPON);
138 //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
141 A_FireProjectile("HellBall", frandom(-0.5, 0.5), 1, /*5*/random(-1, 1), 0, FPF_NOAUTOAIM, frandom(-0.5, 0.5));
143 A_SetPitch(0.15+pitch);
145 WHEF D 2 A_AlertMonsters
146 TNT1 A 0 A_Refire("Firing")
147 TNT1 A 0 A_SetPitch(1.0+pitch)
148 WHEF CBA 3 A_WeaponReady
152 TNT1 A 0 A_JumpIfNoAmmo("Reload")
155 A_SetPitch(-0.15+pitch);
156 A_PlaySound("Weapons/HellclawFire", CHAN_WEAPON);
159 //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
162 A_FireProjectile("HellBall", frandom(-1.1, 1.1), 1, /*5*/random(-1, 1), 0, FPF_NOAUTOAIM, frandom(-1.1, 1.1));
164 A_SetPitch(0.15+pitch);
166 WHEF D 2 A_AlertMonsters
167 TNT1 A 0 A_Refire("Firing")
168 TNT1 A 0 A_SetPitch(1.0+pitch)
169 WHEF CBA 3 A_WeaponReady
173 TNT1 A 0 A_JumpIfInventory("IsDraining", 1, "Reload")
174 TNT1 A 0 A_JumpIfInventoryLess("HellEnergy", 10, "Reload")
177 //A_k8ConLog(va("PITCH: %s; crouch=%s", pitch, GetCrouchFactor()));
178 // if Zan is crouching, and looking down, just plant a mine
179 if (pitch >= 0 && pitch <= 90 && GetCrouchFactor() <= 0.5) {
180 A_Jump(256, "LayMine");
182 A_PlaySound("Weapons/HellclawAltFire", CHAN_WEAPON);
183 A_AlertMonsters(/*128*/random(120, 180));
184 A_SetPitch(0.6+pitch);
190 A_SetPitch(0.6+pitch);
191 A_SetAngle(-1.0+angle);
194 TNT1 A 0 A_SetPitch(0.6+pitch)
198 A_SetPitch(0.6+pitch);
199 A_SetAngle(-1.0+angle);
202 TNT1 A 0 A_SetPitch(0.6+pitch)
207 A_SetPitch(0.6+pitch);
208 A_SetAngle(-1.0+angle);
214 A_SetPitch(-1.2+pitch);
215 A_SetAngle(1.0+angle);
220 A_SetPitch(-1.2+pitch);
221 A_SetAngle(1.0+angle);
222 //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
223 A_FireProjectile("HellMine", 0, 1, /*5*/random(-1, 1), -5, FPF_NOAUTOAIM, -10);
224 if (!HasSpecialPowerup(PWRT_INFAMMO)) A_TakeInventory("HellEnergy", 10);
229 A_SetPitch(-1.2+pitch);
230 A_SetAngle(1.0+angle);
234 WHER A 8 A_WeaponReady(WRF_NOSECONDARY)
245 //A_k8ConLog(va("PITCH: %s; ofs=%s", pitch, 20*cos(pitch)));
246 //A_k8ConLog(va("ANGLE: %s", angle));
247 //A_SpawnItemEx("HellMineArmed", 40*cos(pitch), 0, 0, 0, 0, 0, 0, SXF_ORIGINATOR/*SXF_NOPOINTERS*/);
248 if (A_SpawnItemEx("HellMineLay", 0 /*-(4+2*cos(pitch))*/, 0, 0, 0, 0, 0, 0, SXF_ORIGINATOR|SXF_TRANSFERPITCH/*SXF_NOPOINTERS*/)) {
249 if (!HasSpecialPowerup(PWRT_INFAMMO)) A_TakeInventory("HellEnergy", 10);
259 WHER A 8 A_WeaponReady(WRF_NOSECONDARY)
272 A_GiveInventory("IsDraining", 1);
273 A_PlaySound("Weapons/HellclawReload", CHAN_WEAPON);
274 A_SetPitch(-0.5+pitch);
279 A_SetPitch(-0.5+pitch);
285 A_SetPitch(0.5+pitch);
286 A_AlertMonsters(/*640*/random(550, 650));
287 A_CustomPunch(Random(20, 30), 1, CPF_PULLIN|CPF_SETTRACER, "HellclawPuff", 80, berserkerMult:(IsPlayerRunning() ? 5 : 4));
288 if (IsMonster(AAPTR_TRACER) && GetHealth(AAPTR_TRACER) <= 0) {
289 //A_k8ConLog(va("%C: Clawed %C, Health=%s (%s); hgt=%s (%s)", GetSelf, GetTracer, GetHealth(AAPTR_TRACER), GetSpawnHealth(AAPTR_TRACER), GetHeight(AAPTR_TRACER), GetDefaultHeight(AAPTR_TRACER)));
290 //A_GiveInventory("HellclawDrainKilled", 1, AAPTR_TRACER);
291 A_SpawnItemEx("HellEnergyGiver", 0, 0, max(6, GetDefaultHeight(AAPTR_TRACER)-6), 0, 0, 0, 0, SXF_NOCHECKPOSITION);
295 TNT1 A 0 A_SetPitch(0.5+pitch)
296 WHEF O 3 A_WeaponReady(WRF_ALLOWRELOAD)
297 WHEF N 3 A_TakeInventory("IsDraining", 1)
301 stateinclude "QuickKick/QuickKickInclude.txt"
312 ProjectileKickBack 40
314 Damage (1*random(4*8, 5*8))
315 DamageType "Hellclaw"
322 DeathSound "Projectile/HellBallDeath"
323 Obituary "%o was torn apart by %k's hell ball."
324 Decal "HellBallDecal"
345 Damage (1*random(15, 20))
346 DamageType "PoxBlunt"
348 ProjectileKickBack 120 // 150
364 WallBounceFactor 0.20
366 BounceSound "HellMine/Bounce"
367 //SeeSound "Weapons/FlameShot"
368 DeathSound "HellMine/Arm"
369 Obituary "%o got smacked by %k."
375 TNT1 A 0 A_AlertMonsters(/*320*/random(300, 350))
382 A_AlertMonsters(/*320*/random(300, 350));
383 A_SpawnItemEx("HellMineArmed", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 0);
390 // ////////////////////////////////////////////////////////////////////////// //
391 // k8: no common class for Hell Mines to not invalidate the saves.
392 // k8: i hate it, but...
393 // the only difference is (was) that laying mine is thrusted in it's spawn state.
394 // also, layed mine will wait several seconds before exploding;
395 // this is to allow doors and such to open
397 // this mine was laid down
406 DamageFactor "Aggro", 0.0
407 DamageFactor "Drowning", 0.0
408 DamageFactor "Fire", 0.0
409 DamageFactor "Lava", 0.0
410 DamageFactor "Toxic", 0.0
411 DamageFactor "PoxToxic", 0.0
412 DamageFactor "ForcePull", 0.0
420 FriendlyTargetChance 222 // almost never skips the target
421 // the AI code will take care of this
422 //FriendlySeeBlocks 1 // meele range will take care of this
439 DeathSound "HellMine/Burst"
440 Obituary "%o was torn apart by a Hell Mine."
445 // wait a little (~4 seconds) before activating
446 PHEM F 120 Bright Light("ZanHellMineFlicker")
448 //A_k8ConLog(va("PITCH: %s; ofs=%s", pitch, 7*cos(pitch)));
449 ThrustThing(angle*256/360, 7*cos(pitch), 1, 0);
455 TNT1 A 0 A_PlaySound("HellMine/Ping", CHAN_AUTO, 0.4, 0, 3)
456 PHEM FFFFFF 1 Bright Light("ZanHellMineFlicker") A_Chase
457 TNT1 A 0 A_ClearTarget
458 PHEM GGGGGGGGGG 1 Bright Light("ZanHellMineFlicker") A_Chase
459 TNT1 A 0 A_ClearTarget
460 PHEM GGGGGGGGGG 1 Bright Light("ZanHellMineFlicker") A_Chase
461 TNT1 A 0 A_ClearTarget
466 // wait a little (1.4-1.8 seconds)
467 PHEM F random(49, 64) Bright Light("ZanHellMineFlicker")
470 A_k8ConLog(va("AWAKEN: target is %C, dist is %s; waiting...", GetTarget, VecDistance3D(OriginVector, GetActorOrigin(GetTarget()))));
473 PHEM GGGGGGGGGG 1 Bright Light("ZanHellMineFlicker") A_Chase("MeleeAwoken", "", CHF_DONTIDLE|CHF_DONTMOVE|CHF_DONTTURN)
476 //A_k8ConLog("deactivated...");
482 PHEM F 1 Bright Light("ZanHellMineFlicker") A_Die
490 A_AlertMonsters(1200);
492 PHEM E 1 Bright Light("ZanHellBallShot") A_ChangeVelocity(0, 0, 12, CVF_REPLACE)
493 TNT1 A 0 A_SpawnItemEx("DustPuffLarge", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 0)
494 PHEM E 12 Bright Light("ZanHellBallShot")
497 //A_k8ConLog(va("target is %C, dist is %s", GetTarget, VecDistance3D(OriginVector, GetActorOrigin(GetTarget()))));
498 A_ChangeFlag("NOTONAUTOMAP", 1);
499 if (IsPlayer(AAPTR_TARGET)) {
500 A_Explode(150, 192, (GetCVarB('k8ZanMod_DamageSelfHellMine') ? XF_HURTSOURCE : 0), True, 160, 0, 0, " ", "Crushbow");
501 A_Explode(80, 192, (GetCVarB('k8ZanMod_DamageSelfHellMine') ? XF_HURTSOURCE : 0), True, 160, 0, 0, " ", "Hellclaw");
503 // here, `Target` is activator, and it's not a player
504 A_Explode(150, 192, XF_HURTSOURCE, True, 160, 0, 0, " ", "Crushbow");
505 A_Explode(80, 192, XF_HURTSOURCE, True, 160, 0, 0, " ", "Hellclaw");
507 A_JumpIf(WaterLevel>0, "WaterDeath");
508 A_SpawnItemEx("ExplosionLargeRed", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 0);
509 A_SpawnItemEx("HellclawBloodCloud", 0, 0, -15, 3, 3, random(-2, 2), 0, SXF_NOCHECKPOSITION, 0);
510 A_SpawnItemEx("HellclawBloodCloud", 0, 0, -15, -3, -3, random(-2, 2), 0, SXF_NOCHECKPOSITION, 0);
511 A_SpawnItemEx("HellclawBloodCloud", 0, 0, -15, 3, -3, random(-2, 2), 0, SXF_NOCHECKPOSITION, 0);
512 A_SpawnItemEx("HellclawBloodCloud", 0, 0, -15, -3, 3, random(-2, 2), 0, SXF_NOCHECKPOSITION, 0);
514 TNT1 A 30 A_Quake(3, 30, 0, 1200)
518 TNT1 AAAAAAAAAAAAAAA 0 A_SpawnItemEx("UnderwaterBubble", 0, 0, 0, random(-5, 5), random(-5, 5), random(1, 4), 0, SXF_NOCHECKPOSITION, 0)
524 // this mine was thrown
525 ACTOR HellMineArmed {
533 DamageFactor "Aggro", 0.0
534 DamageFactor "Drowning", 0.0
535 DamageFactor "Fire", 0.0
536 DamageFactor "Lava", 0.0
537 DamageFactor "Toxic", 0.0
538 DamageFactor "PoxToxic", 0.0
539 DamageFactor "ForcePull", 0.0
546 FriendlyTargetChance 222 // almost never skips the target
547 // the AI code will take care of this
548 //FriendlySeeBlocks 1 // meele range will take care of this
565 DeathSound "HellMine/Burst"
566 Obituary "%o was torn apart by a Hell Mine."
574 TNT1 A 0 A_PlaySound("HellMine/Ping", CHAN_AUTO, 0.4, 0, 3)
575 PHEM FFFFFF 1 Bright Light("ZanHellMineFlicker") A_Chase
576 TNT1 A 0 A_ClearTarget
577 PHEM GGGGGGGGGG 1 Bright Light("ZanHellMineFlicker") A_Chase
578 TNT1 A 0 A_ClearTarget
579 PHEM GGGGGGGGGG 1 Bright Light("ZanHellMineFlicker") A_Chase
580 TNT1 A 0 A_ClearTarget
585 // wait a little (0.2-0.5 seconds)
586 PHEM F random(7, 17) Bright Light("ZanHellMineFlicker")
587 PHEM GGGGGGGGGG 1 Bright Light("ZanHellMineFlicker") A_Chase("MeleeAwoken", "", CHF_DONTIDLE|CHF_DONTMOVE|CHF_DONTTURN)
588 TNT1 A 0 A_ClearTarget
592 PHEM F 1 Bright Light("ZanHellMineFlicker") A_Die
599 //A_k8ConLog(va("target is %C, dist is %s", GetTarget, VecDistance3D(OriginVector, GetActorOrigin(GetTarget()))));
601 A_AlertMonsters(1200);
603 PHEM E 1 Bright Light("ZanHellBallShot") A_ChangeVelocity(0, 0, 12, CVF_REPLACE)
604 TNT1 A 0 A_SpawnItemEx("DustPuffLarge", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 0)
605 PHEM E 12 Bright Light("ZanHellBallShot")
608 A_ChangeFlag("NOTONAUTOMAP", 1);
609 if (IsPlayer(AAPTR_TARGET)) {
610 A_Explode(150, 192, (GetCVarB('k8ZanMod_DamageSelfHellMine') ? XF_HURTSOURCE : 0), True, 160, 0, 0, " ", "Crushbow");
611 A_Explode(80, 192, (GetCVarB('k8ZanMod_DamageSelfHellMine') ? XF_HURTSOURCE : 0), True, 160, 0, 0, " ", "Hellclaw");
613 // here, `Target` is activator, and it's not a player
614 A_Explode(150, 192, XF_HURTSOURCE, True, 160, 0, 0, " ", "Crushbow");
615 A_Explode(80, 192, XF_HURTSOURCE, True, 160, 0, 0, " ", "Hellclaw");
617 A_JumpIf(WaterLevel>0, "WaterDeath");
618 A_SpawnItemEx("ExplosionLargeRed", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 0);
619 A_SpawnItemEx("HellclawBloodCloud", 0, 0, -15, 3, 3, random(-2, 2), 0, SXF_NOCHECKPOSITION, 0);
620 A_SpawnItemEx("HellclawBloodCloud", 0, 0, -15, -3, -3, random(-2, 2), 0, SXF_NOCHECKPOSITION, 0);
621 A_SpawnItemEx("HellclawBloodCloud", 0, 0, -15, 3, -3, random(-2, 2), 0, SXF_NOCHECKPOSITION, 0);
622 A_SpawnItemEx("HellclawBloodCloud", 0, 0, -15, -3, 3, random(-2, 2), 0, SXF_NOCHECKPOSITION, 0);
624 TNT1 A 30 A_Quake(3, 30, 0, 1200)
628 TNT1 AAAAAAAAAAAAAAA 0 A_SpawnItemEx("UnderwaterBubble", 0, 0, 0, random(-5, 5), random(-5, 5), random(1, 4), 0, SXF_NOCHECKPOSITION, 0)
634 ACTOR HellclawBloodCloud {
650 BCLO A 1 A_FadeOut(0.04, FTF_REMOVE)
651 TNT1 A 0 A_SetScale(scaleX+0.04, scaleY+0.04)
660 DamageType "HellclawDrain"
678 ACTOR HellEnergyGiver {
681 Renderstyle "Translucent"
682 DamageFactor "Aggro", 0.0
692 //ProjectileKickBack 0
693 FriendlyTargetChance 222 // almost never skips the target
719 DeathSound "Projectile/HellBallDeath"
720 //Species "ZanSpecie"
728 PHEB BBCCDDAA 1 A_LookEx(0, 0, 0, 0, 360)
732 //TNT1 A 0 A_JumpIfInTargetInventory("HellclawDrainKilled", 1, "ClearTarget")
733 PHEB CCDDAABB 1 A_Chase
738 //TNT1 A 0 A_k8ConLog(va("%C: HellGiver Ignored %C, Health=%s (%s)", GetSelf, GetTarget, GetHealth(AAPTR_TARGET), GetSpawnHealth(AAPTR_TARGET)))
739 TNT1 A 0 A_ClearTarget
744 //TNT1 A 0 A_k8ConLog(va("%C: Draining %C, Health=%s (%s); hgt=%s (%s)", GetSelf, GetTarget, GetHealth(AAPTR_TARGET), GetSpawnHealth(AAPTR_TARGET), GetHeight(AAPTR_TARGET), GetDefaultHeight(AAPTR_TARGET)))
746 //TNT1 A 0 A_GiveInventory("HellEnergy", random(max(1, GetSpawnHealth(AAPTR_TRACER)/18), max(1, GetSpawnHealth(AAPTR_TRACER)/14+6)), AAPTR_TARGET)
749 local int amnt = random(max(2, GetHealth(AAPTR_TARGET)/18), max(1, GetHealth(AAPTR_TARGET)/14+6));
750 // give some Hell Energy
751 A_RadiusGive("HellEnergy", 128.0, RGF_PLAYERS, amnt);
753 A_DamageTarget(amnt, "HellclawDrain", DMSS_NOPROTECT, __default, src:AAPTR_NULL, inflict:AAPTR_NULL);
755 A_RadiusGive("__rgf_heal__", 128.0, RGF_PLAYERS, amnt); // "__rgf_overheal__"?
769 Actor (optional) Zan_GauntletsHellclaw : Hellclaw Replaces Gauntlets {}
770 Actor (optional) Zan_GauntletsPoweredHellclaw : Hellclaw Replaces GauntletsPowered {}
772 Actor (optional) Zan_TPH_TPHShotgun : Hellclaw Replaces TPHShotgun {} //SSG