added cheating options to emulate old "don't hurt self" bug; it is possible to plant...
[k8zan.git] / decorate / Weapons / Hellclaw.txt
blob0502b403b795a08b7e3235b47c8f6ac5d52744bc
1 ACTOR IsDraining : Inventory {
2   Inventory.Amount 1
3   Inventory.MaxAmount 1
4   Inventory.InterHubAmount 0
6   States {
7   Spawn:
8     TNT1 A -1
9     Stop
10   }
15 ACTOR HellclawDrainKilled : Inventory {
16   Inventory.Amount 1
17   Inventory.MaxAmount 1
23 ACTOR BearzerkHellclaw {
24   Scale 0.35
26   States {
27   Spawn:
28     WHEL B -1
29     Stop
30   }
35 ACTOR HellEnergy : Ammo {
36   Inventory.Amount 30
37   Inventory.MaxAmount 150
38   Ammo.BackpackAmount 60
39   Ammo.BackpackMaxAmount 360
40   Inventory.Icon "WHELB0"
42   States {
43   Spawn:
44     TNT1 A 1
45     Stop
46   }
50 ACTOR Hellclaw : Weapon replaces SuperShotgun {
51   Scale 0.35
52   Radius 22
53   Height 15
54   +INVENTORY.UNDROPPABLE
55   +WEAPON.NOALERT
56   //+WEAPON.NO_AUTO_SWITCH
57   +WEAPON.AMMO_OPTIONAL
58   //+WEAPON.ALT_USES_BOTH
59   Inventory.PickupMessage "Got a Hellclaw."
60   Inventory.PickupSound "Weapons/HellclawPick"
61   Inventory.Icon "WHELA0"
62   Tag "Hellclaw"
63   Weapon.SelectionOrder 4
64   //Weapon.MinSelectionAmmo1 0
65   //Weapon.MinSelectionAmmo2 0
66   Weapon.AmmoType1 "HellEnergy"
67   Weapon.AmmoGive1 30
68   Weapon.AmmoUse1 1
69   Weapon.AmmoType2 "none"
70   Weapon.AmmoGive2 0
71   Weapon.AmmoUse2 0
72   Weapon.SlotNumber 1  // was 4
73   Weapon.SlotPriority 0.5
75   States {
76   Spawn:
77     WHEL B -1
78     Stop
80   Select:
81     stateinclude "QuickKick/QuickKickOnSelectDeselect.txt"
82     TNT1 A 0 A_GiveInventory("HoldingFists", 1)
83     TNT1 A 0 { if (GetCVarB('k8ZanMod_CustomCrosshairs')) A_SetCrosshair(13); }
84     TNT1 A 0 A_Raise(666)
85     Goto Ready
87   Deselect:
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)
94     Goto DeselectLoop
96   DeselectLoop:
97     TNT1 A 0 A_TakeInventory("HoldingFists", 1)
98     TNT1 A 1 A_Lower(666)
99     Loop
101   Ready:
102     TNT1 A 8
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")
109     Goto ReadyIdle
111   ReadyIdle:
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)
120     Loop
122   Fire:
123     TNT1 A 0 A_JumpIfNoAmmo("Reload")
124     TNT1 A 0 A_JumpIfInventory("IsDraining", 1, "Reload")
125     SPGH A 0
126       {
127         A_PlaySound("Weapons/HellclawFire", CHAN_WEAPON);
128         A_SetPitch(-1.0+pitch);
129       }
130     WHEF A 2
131     WHEF B 2
132     TNT1 A 0
133       {
134         A_SetPitch(-0.15+pitch);
135         A_PlaySound("Weapons/HellclawFire", CHAN_WEAPON);
136       }
137     WHEF C 2
138     //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
139     WSPI A 0
140       {
141         A_FireProjectile("HellBall", frandom(-0.5, 0.5), 1, /*5*/random(-1, 1), 0, FPF_NOAUTOAIM, frandom(-0.5, 0.5));
142         A_GunFlash();
143         A_SetPitch(0.15+pitch);
144       }
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
149     Goto ReadyIdle
151   Firing:
152     TNT1 A 0 A_JumpIfNoAmmo("Reload")
153     TNT1 A 0
154       {
155         A_SetPitch(-0.15+pitch);
156         A_PlaySound("Weapons/HellclawFire", CHAN_WEAPON);
157       }
158     WHEF C 2
159     //k8: do not horizontally ofsset spike shots, i want them to go through the crosshair
160     WSPI A 0
161       {
162         A_FireProjectile("HellBall", frandom(-1.1, 1.1), 1, /*5*/random(-1, 1), 0, FPF_NOAUTOAIM, frandom(-1.1, 1.1));
163         A_GunFlash();
164         A_SetPitch(0.15+pitch);
165       }
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
170     Goto ReadyIdle
172   Altfire:
173     TNT1 A 0 A_JumpIfInventory("IsDraining", 1, "Reload")
174     TNT1 A 0 A_JumpIf(CountInv("HellEnergy") < 10, "Reload")
175     TNT1 A 0
176       {
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 >= 20 && pitch <= 90 && GetCrouchFactor() <= 0.5) {
180           A_Jump(256, "LayMine");
181         } else {
182           A_PlaySound("Weapons/HellclawAltFire", CHAN_WEAPON);
183           A_AlertMonsters(128);
184           A_SetPitch(0.6+pitch);
185         }
186       }
187     WHEF E 2
188     TNT1 A 0
189       {
190         A_SetPitch(0.6+pitch);
191         A_SetAngle(-1.0+angle);
192       }
193     WHEF F 2
194     TNT1 A 0 A_SetPitch(0.6+pitch)
195     WHEF G 2
196     TNT1 A 0
197       {
198         A_SetPitch(0.6+pitch);
199         A_SetAngle(-1.0+angle);
200       }
201     WHEF H 2
202     TNT1 A 0 A_SetPitch(0.6+pitch)
203     TNT1 A 6
204     WHEF I 2
205     TNT1 A 0
206       {
207         A_SetPitch(0.6+pitch);
208         A_SetAngle(-1.0+angle);
209       }
210     WHEF J 2
211     WHEF K 1
212     TNT1 A 0
213       {
214         A_SetPitch(-1.2+pitch);
215         A_SetAngle(1.0+angle);
216       }
217     WHEF L 1
218     TNT1 A 0
219       {
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         A_TakeInventory("HellEnergy", 10);
225     }
226     WHEF D 1
227     TNT1 A 0
228       {
229         A_SetPitch(-1.2+pitch);
230         A_SetAngle(1.0+angle);
231       }
232     WHEF C 1
233     WHEF B 1
234     WHER A 8 A_WeaponReady(WRF_NOSECONDARY)
235     Goto ReadyIdle
237   LayMine:
238     WHEF E 2
239     WHEF F 2
240     WHEF G 2
241     WHEF H 2
242     //TNT1 A 6
243     TNT1 A 0
244       {
245         //A_k8ConLog(va("PITCH: %s; ofs=%s", pitch, 20*cos(pitch)));
246         A_SpawnItemEx("HellMineArmed", 40*cos(pitch), 0, 0,  0, 0, 0,  0,  SXF_ORIGINATOR/*SXF_NOPOINTERS*/);
247         A_TakeInventory("HellEnergy", 10);
248       }
249     WHEF I 2
250     WHEF J 2
251     WHEF K 1
252     WHEF L 1
253     WHEF D 1
254     WHEF C 1
255     WHEF B 1
256     WHER A 8 A_WeaponReady(WRF_NOSECONDARY)
257     Goto ReadyIdle
259   Flash:
260     TNT1 A 1 A_Light2
261     TNT1 A 1 A_Light2
262     TNT1 A 1 A_Light1
263     TNT1 A 0 A_Light0
264     Goto LightDone
266   Reload:
267     TNT1 A 0
268       {
269         A_GiveInventory("IsDraining", 1);
270         A_PlaySound("Weapons/HellclawReload", CHAN_WEAPON);
271         A_SetPitch(-0.5+pitch);
272       }
273     WHEF N 4
274     TNT1 A 0
275       {
276         A_SetPitch(-0.5+pitch);
277         A_GunFlash();
278       }
279     WHEF O 3
280     TNT1 A 0
281       {
282         A_SetPitch(0.5+pitch);
283         A_AlertMonsters(640);
284         A_CustomPunch(Random(20, 30), 1, CPF_PULLIN|CPF_SETTRACER, "HellclawPuff", 80, berserkerMult:6);
285         if (IsMonster(AAPTR_TRACER) && GetHealth(AAPTR_TRACER) <= 0) {
286           //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)));
287           //A_GiveInventory("HellclawDrainKilled", 1, AAPTR_TRACER);
288           A_SpawnItemEx("HellEnergyGiver", 0, 0, max(6, GetDefaultHeight(AAPTR_TRACER)-6), 0, 0, 0, 0, SXF_NOCHECKPOSITION);
289         }
290       }
291     WHEF P 4
292     TNT1 A 0 A_SetPitch(0.5+pitch)
293     WHEF O 3 A_WeaponReady(WRF_ALLOWRELOAD)
294     WHEF N 3 A_TakeInventory("IsDraining", 1)
295     WHEF M 3
296     Goto ReadyIdle
298     stateinclude "QuickKick/QuickKickInclude.txt"
299   }
303 ACTOR HellBall {
304   Scale 0.35
305   Radius 5
306   Height 8
307   Speed 47
308   Projectile
309   ProjectileKickBack 40
310   Damage (3*random(8, 8))
311   DamageType "Hellclaw"
312   +THRUGHOST
313   +NOBLOCKMAP
314   +BLOODSPLATTER
315   +THRUSPECIES
316   //+BRIGHT
317   +DONTREFLECT
318   DeathSound "Projectile/HellBallDeath"
319   Obituary "%o was torn apart by %k's hell ball."
320   Decal "HellBallDecal"
321   Species "ID"
323   States {
324   Spawn:
325     PHEB ABCD 3 Bright
326     Loop
328   Death:
329     PHEB EFGH 3 Bright
330     Stop
331   }
335 ACTOR HellMine {
336   Radius 5
337   Height 5
338   Speed 35
339   Scale 0.35
340   Gravity 1.0
341   Damage (1*random(15, 20))
342   DamageType "PoxBlunt"
343   Projectile
344   ProjectileKickBack 150
345   -NOGRAVITY
346   +DONTREFLECT
347   +DONTTHRUST
348   +NOEXTREMEDEATH
349   +RANDOMIZE
350   -BLOODSPLATTER
351   +NOBLOCKMAP
352   +THRUSPECIES
353   +BOUNCEONFLOORS
354   +BOUNCEONWALLS
355   +BOUNCEONCEILINGS
356   +ALLOWBOUNCEONACTORS
357   +BOUNCEONACTORS
358   BounceType Hexen
359   BounceFactor 0.20
360   WallBounceFactor 0.20
361   BounceCount 3
362   BounceSound "HellMine/Bounce"
363   //SeeSound "Weapons/FlameShot"
364   DeathSound "HellMine/Arm"
365   Obituary "%o got smacked by %k."
366   Species "ID"
368   States {
369   Spawn:
370     PHEM ABCD 4 Bright
371     TNT1 A 0 A_AlertMonsters(320)
372     Loop
374   Death:
375     TNT1 A 0
376       {
377         A_Scream();
378         A_SpawnItemEx("HellMineArmed", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 0);
379       }
380     Stop
381   }
385 ACTOR HellMineArmed {
386   //Monster
387   Radius 5
388   Height 15
389   Speed 0
390   FloatSpeed 0
391   Scale 0.35
392   Health 15
393   DamageFactor "Aggro", 0.0
394   DamageFactor "Drowning", 0.0
395   DamageFactor "Fire", 0.0
396   DamageFactor "Lava", 0.0
397   DamageFactor "Toxic", 0.0
398   DamageFactor "PoxToxic", 0.0
399   DamageFactor "ForcePull", 0.0
400   //RipLevelMin 1
401   //MeleeThreshold 128
402   MeleeRange 112
403   MinMissileChance 0
404   MeleeDamage 0
405   //+NOGRAVITY
406   +DONTTHRUST
407   +MISSILEMORE
408   +MISSILEEVENMORE
409   +THRUGHOST
410   +LOOKALLAROUND
411   +FLOORCLIP
412   +SHOOTABLE
413   -SOLID
414   -COUNTKILL
415   +NOINFIGHTING
416   +NOTARGET
417   +NEVERTARGET
418   +ISMONSTER
419   +FRIENDLY
420   +NOBLOOD
421   DeathSound "HellMine/Burst"
422   Obituary "%o was torn apart by a Hell Mine."
424   States {
425   Spawn:
426     PHEM F 1 Bright
427     Goto See
429   See:
430     TNT1 A 0 A_PlaySound("HellMine/Ping", CHAN_AUTO, 0.4, 0, 3)
431     PHEM FFFFFF 1 Bright Light("ZanHellMineFlicker") A_Chase
432     TNT1 A 0 A_ClearTarget
433     PHEM GGGGGGGGGG 1 Bright Light("ZanHellMineFlicker") A_Chase
434     TNT1 A 0 A_ClearTarget
435     PHEM GGGGGGGGGG 1 Bright Light("ZanHellMineFlicker") A_Chase
436     TNT1 A 0 A_ClearTarget
437     Loop
439   Melee:
440     PHEM F 1 Bright Light("ZanHellMineFlicker") A_Die
441     Goto See
443   Death:
444     TNT1 A 0 A_Scream
445     TNT1 A 0 A_AlertMonsters(1200)
446     PHEM E 1 Bright Light("ZanHellBallShot") A_ChangeVelocity(0, 0, 12, CVF_REPLACE)
447     TNT1 A 0 A_SpawnItemEx("DustPuffLarge", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 0)
448     PHEM E 12 Bright Light("ZanHellBallShot")
449     TNT1 A 0
450       {
451         A_ChangeFlag("NOTONAUTOMAP", 1);
452         if (IsPlayer(AAPTR_TARGET)) {
453           A_Explode(150, 192, (GetCVarB('k8ZanMod_DamageSelfHellMine') ? XF_HURTSOURCE : 0), True, 160, 0, 0, " ", "Crushbow");
454           A_Explode(80, 192, (GetCVarB('k8ZanMod_DamageSelfHellMine') ? XF_HURTSOURCE : 0), True, 160, 0, 0, " ", "Hellclaw");
455         } else {
456           // here, `Target` is activator, and it's not a player
457           A_Explode(150, 192, XF_HURTSOURCE, True, 160, 0, 0, " ", "Crushbow");
458           A_Explode(80, 192, XF_HURTSOURCE, True, 160, 0, 0, " ", "Hellclaw");
459         }
460         A_JumpIf(WaterLevel>0, "WaterDeath");
461         A_SpawnItemEx("ExplosionLargeRed", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION, 0);
462         A_SpawnItemEx("HellclawBloodCloud", 0, 0, -15,  3,  3, random(-2, 2), 0, SXF_NOCHECKPOSITION, 0);
463         A_SpawnItemEx("HellclawBloodCloud", 0, 0, -15, -3, -3, random(-2, 2), 0, SXF_NOCHECKPOSITION, 0);
464         A_SpawnItemEx("HellclawBloodCloud", 0, 0, -15,  3, -3, random(-2, 2), 0, SXF_NOCHECKPOSITION, 0);
465         A_SpawnItemEx("HellclawBloodCloud", 0, 0, -15, -3,  3, random(-2, 2), 0, SXF_NOCHECKPOSITION, 0);
466       }
467     TNT1 A 30 A_Quake(3, 30, 0, 1200)
468     Stop
470   WaterDeath:
471     TNT1 AAAAAAAAAAAAAAA 0 A_SpawnItemEx("UnderwaterBubble", 0, 0, 0, random(-5, 5), random(-5, 5), random(1, 4), 0, SXF_NOCHECKPOSITION, 0)
472     Stop
473   }
477 ACTOR HellclawBloodCloud {
478   Radius 5
479   Height 5
480   //Gravity 0.05
481   +NOGRAVITY
482   +NOBLOCKMAP
483   +DONTSPLASH
484   +MISSILE
485   +NOBLOCKMAP
486   +FRIGHTENED
487   +NOTELEPORT
488   +FLOORCLIP
489   +NOTONAUTOMAP
491 States {
492   Spawn:
493     BCLO A 1 A_FadeOut(0.04, FTF_REMOVE)
494     TNT1 A 0 A_SetScale(scaleX+0.04, scaleY+0.04)
495     Loop
496   }
500 ACTOR HellclawPuff {
501   Scale 0.5
502   Damage 0
503   DamageType "HellclawDrain"
504   +NOGRAVITY
505   +THRUGHOST
506   +FORCEPAIN
507   +BRIGHT
508   +NOEXTREMEDEATH
509   +NoTeleport
510   +k8AllowSimpleTick
511   Species "ID"
513   States {
514   Spawn:
515     PHED ABCD 3
516     Stop
517   }
521 ACTOR HellEnergyGiver {
522   Scale 0.35
523   Monster
524   Renderstyle "Translucent"
525   DamageFactor "Aggro", 0.0
526   Alpha 0.8
527   Health 9999
528   Radius 5
529   Height 5
530   Speed 10
531   FloatSpeed 10
532   MinMissileChance 0
533   MeleeRange 16
534   //Projectile
535   //ProjectileKickBack 0
536   Damage 0
537   +NOINFIGHTING
538   +NEVERTARGET
539   +NOTARGET
540   //+LOOKALLAROUND
541   +MISSILEMORE
542   +MISSILEEVENMORE
543   -ACTIVATEMCROSS
544   -CANUSEWALLS
545   -COUNTKILL
546   -SOLID
547   -SHOOTABLE
548   //+SEEKERMISSILE
549   +FLOAT
550   +NOGRAVITY
551   +THRUGHOST
552   +THRUACTORS
553   +NOBLOCKMAP
554   +NOBLOCKMONST
555   //-BLOODSPLATTER
556   //+BLOODLESSIMPACT
557   //+BRIGHT
558   +NOTIMEFREEZE
559   +NoTeleport
560   +k8AllowSimpleTick
561   DeathSound "Projectile/HellBallDeath"
562   //Species "ID"
564   States {
565   Spawn:
566     PHEB AA 1
567     Goto SpawnLoop
569   SpawnLoop:
570     PHEB BBCCDDAA 1 A_LookEx(0, 0, 0, 0, 360)
571     Loop
573   See:
574     //TNT1 A 0 A_JumpIfInTargetInventory("HellclawDrainKilled", 1, "ClearTarget")
575     PHEB CCDDAABB 1 A_Chase
576     Loop
578   /*
579   ClearTarget:
580     //TNT1 A 0 A_k8ConLog(va("%C: HellGiver Ignored %C, Health=%s (%s)", GetSelf, GetTarget, GetHealth(AAPTR_TARGET), GetSpawnHealth(AAPTR_TARGET)))
581     TNT1 A 0 A_ClearTarget
582     Goto SpawnLoop
583   */
585   Melee:
586     //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)))
587     TNT1 A 0 A_Scream
588     //TNT1 A 0 A_GiveInventory("HellEnergy", random(max(1, GetSpawnHealth(AAPTR_TRACER)/18), max(1, GetSpawnHealth(AAPTR_TRACER)/14+6)), AAPTR_TARGET)
589     TNT1 A 0
590       {
591         local int amnt = random(max(2, GetHealth(AAPTR_TARGET)/18), max(1, GetHealth(AAPTR_TARGET)/14+6));
592         // give some Hell Energy
593         A_RadiusGive("HellEnergy", 128.0, RGF_PLAYERS, amnt);
594         // damage target
595         A_DamageTarget(amnt, "HellclawDrain", DMSS_NOPROTECT, __default, src:AAPTR_NULL, inflict:AAPTR_NULL);
596         // heal players
597         A_RadiusGive("__rgf_heal__", 128.0, RGF_PLAYERS, amnt); // "__rgf_overheal__"?
598       }
599     PHEB EFGH 3
600     TNT1 A 0 A_Die
601     Stop
603   Death:
604     TNT1 A 0
605     Stop
606   }
610 // heretic
611 Actor (optional) Zan_GauntletsHellclaw : Hellclaw Replaces Gauntlets {}
612 Actor (optional) Zan_GauntletsPoweredHellclaw : Hellclaw Replaces GauntletsPowered {}
614 Actor (optional) Zan_TPH_TPHShotgun : Hellclaw Replaces TPHShotgun {} //SSG