Structure of BDLite monsters
The edited monsters are the real meat of Brutal Doom. Each one of them defines a vast tree of states that builds on the normal Doom monster behaviour, most notably what happens when they're shot. Far from just falling over and dying with the same two animations each time, each monster has a large library of sprites for being maimed in a variety of morbidly interesting ways depending on the damage type. These typically spawn large numbers of gibs/remains from the original monster, or even have the monster going into a last stand where it can still attack desperately as it dies. This results in class definitions that are even bigger than the weapons - the Sergeant, for example, weighs in at 1099 lines, with extra definitions for dead variants and other extras bringing the size of the file up to 1376 lines.
ACTOR ShotgunGuy1: ShotgunGuy Replaces ShotgunGuy
{
Game Doom
Health 50
SpawnID 1
Radius 16
Height 44
Height 44
Mass 100
Speed 6
FastSpeed 12
Scale 0.98
PainChance 200
PainChance "Avoid", 50
PainChance "Head", 255
PainChance "Kick", 255
PainChance "Melee", 255
PainChance "HelperMarineFatality", 255
PainChance "MonsterKnocked", 255
PainChance "ExplosiveImpact", 255
damagefactor "Crush", 5.0
PainChance "Taunt", 255
damagefactor "Avoid", 1.0
damagefactor "DontCallTheBaron", 0.0
damagefactor "TeleportRemover", 0.0
damagefactor "GibRemoving", 0.0
damagefactor "SSG", 50.0
DropItem "GrenadeAmmo" 15
DropItem "Shotgun"
damagetype "Melee"
Monster
+FLOORCLIP
+SLIDESONWALLS
BloodType "Brutal_Blood", "BloodSPlatterReplacer", "SawBlood"
SeeSound "grunt/sight"
PainSound "grunt/pain"
DeathSound "grunt/death"
ActiveSound "grunt/active"
damagefactor "Blood", 0.0 damagefactor "BlueBlood", 0.0 damagefactor "GreenBlood", 0.0
damagefactor "Shrapnel", 0.3
damagefactor "Kick", 0.4
damagefactor "taunt", 0.0
Obituary "%o got his face splattered on the wall by a Zombie Shotgunner."
MaxStepHeight 24
MaxDropOffHeight 32
DamageFactor "CauseObjectsToSplash", 0.0
States
{
Pain.Avoid:
TNT1 A 0
TNT1 A 0 A_Jump(255, "AvoidLeft", "AvoidRight")
Goto AvoidLeft
AvoidLeft:
SPOS A 1 A_FaceTarget
TNT1 A 0 ThrustThing(angle*256/360+192, 15, 0, 0)
ZRO4 ABCDEFGH 2 A_FaceTarget
Goto Missile
AvoidRight:
SPOS A 1 A_FaceTarget
TNT1 A 0 ThrustThing(angle*256/360+64, 15, 0, 0)
ZRO3 ABCDEFGH 2 A_FaceTarget
Goto Missile
ReplaceVanilla:
TNT1 A 0 A_ChangeFlag("THRUACTORS", 1)
TNT1 A 0 A_ChangeFlag("COUNTKILL", 0)
TNT1 A 0 A_SpawnItemEx ("VanillaShotgunguy",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG ,0)
Stop
Spawn:
TNT1 A 0
TNT1 A 0 ACS_ExecuteAlways(796, 0, 0, 0, 0)//Check if Vanilla Mode is activated
TNT1 A 0
TNT1 A 0 A_GiveInventory("SKShotgunGuy", 1)
TNT1 A 0 A_GiveInventory("TypeSergeant", 1)
TNT1 A 0 A_TakeInventory("SergeantAmmo", 6)
TNT1 A 0 A_GiveInventory("SergeantAmmo", random(0,5))
SPOS B 1
Goto Stand
Stand:
SPOS A 0 A_CheckSight("Stand2")
TNT1 A 0 A_GiveInventory("SKShotgunGuy", 1)
TNT1 A 0 A_SpawnItem ("HeadshotTarget10", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SHID A 10 A_Look
TNT1 A 0 A_SpawnItem ("HeadshotTarget10", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SHID A 10 A_Look
TNT1 A 0 A_SpawnItem ("HeadshotTarget10", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SHID B 10 A_Look
TNT1 A 0 A_SpawnItem ("HeadshotTarget10", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SHID B 10 A_Look
Loop
Stand2:
SPSS Z 1 A_Look
Goto Stand
FallBack:
TNT1 A 0 A_CheckSight("Advance")
TNT1 A 0 A_ChangeFLag("NODROPOFF", 1)
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_SpawnItem ("LegTarget4", 10)
SPOS D 2 A_FaceTarget
SPOS D 2 A_Recoil(2)
TNT1 A 0 A_jump(64, "Missile")
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_SpawnItem ("LegTarget4", 10)
SPOS C 2 A_FaceTarget
SPOS C 2 A_Recoil(2)
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_SpawnItem ("LegTarget4", 10)
SPOS B 2 A_FaceTarget
SPOS B 2 A_Recoil(2)
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_SpawnItem ("LegTarget4", 10)
SPOS A 2 A_FaceTarget
SPOS A 2 A_Recoil(2)
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_SpawnItem ("LegTarget4", 10)
SPOS D 2 A_FaceTarget
SPOS D 2 A_Recoil(2)
TNT1 A 0 A_jump(64, "Missile")
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_SpawnItem ("LegTarget4", 10)
SPOS C 2 A_FaceTarget
SPOS C 2 A_Recoil(2)
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_SpawnItem ("LegTarget4", 10)
SPOS B 2 A_FaceTarget
SPOS B 2 A_Recoil(2)
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_SpawnItem ("LegTarget4", 10)
SPOS A 2 A_FaceTarget
SPOS A 2 A_Recoil(2)
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
GOto Missile
SearchForPlayer:
Idle:
TNT1 A 0 A_ClearTarget
TNT1 A 0 A_TakeInventory("EnemyMemory", 30)
TNT1 A 0 A_GiveInventory("SKShotgunGUy", 1)
TNT1 A 0 A_SpawnItem ("HeadshotTarget10", 5, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SHID A 10 A_Look
TNT1 A 0 A_SpawnItem ("HeadshotTarget10", 5, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SHID C 10 A_Look
TNT1 A 0 A_SpawnItem ("HeadshotTarget10", 5, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SHID A 10 A_Look
TNT1 A 0 A_SpawnItem ("HeadshotTarget10", 5, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SHID D 10 A_Look
TNT1 A 0 A_SpawnItem ("HeadshotTarget10", 5, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SHID A 10 A_Look
SPOS A 4 A_Look
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_Wander
TNT1 A 0 A_Recoil(-1)
SPOS B 4 A_Look
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_Wander
TNT1 A 0 A_Recoil(-1)
SPOS C 4 A_Look
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_Wander
TNT1 A 0 A_Recoil(-1)
SPOS D 4 A_Look
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_Wander
TNT1 A 0 A_Recoil(-1)
TNT1 A 0 A_Jump(128, "Idle")
SPOS A 4 A_Look
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_Wander
TNT1 A 0 A_Recoil(-1)
SPOS B 4 A_Look
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_Wander
TNT1 A 0 A_Recoil(-1)
SPOS C 4 A_Look
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_Wander
TNT1 A 0 A_Recoil(-1)
SPOS D 4 A_Look
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_Wander
TNT1 A 0 A_Recoil(-1)
Loop
See:
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
TNT1 A 0 A_TakeInventory("SKZombieman", 1)
TNT1 A 0 A_TakeInventory("EnemyMemory", 15)
TNT1 A 0 A_CheckSight("SeeNeverSeen")
Goto SeeContinue
SeeContinue:
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
TNT1 A 0 A_JumpIfCloser(200, "FallBack")
//Advance:
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
TNT1 A 0 A_JumpIfInventory("EnemyMemory", 15, "SearchForPlayer")
TNT1 A 0 A_GiveInventory("EnemyMemory", 1)
TNT1 A 0 A_SpawnItemEx("FootStep", 0, 0, 20, 0, 0)
TNT1 A 0 A_TakeInventory("SKShotgunGuy", 1)
TNT1 A 0 A_SpawnItem("HeadshotTarget4", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPOS AA 2 A_Chase
TNT1 A 0 A_SpawnItem("HeadshotTarget4", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPOS AA 2 A_Chase
TNT1 A 0 A_SpawnItem("HeadshotTarget4", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPOS BB 2 A_Chase
TNT1 A 0 A_SpawnItem("HeadshotTarget4", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPOS BB 2 A_Chase
TNT1 A 0 A_SpawnItem("HeadshotTarget4", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPOS CC 2 A_Chase
TNT1 A 0 A_SpawnItem("HeadshotTarget4", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPOS CC 2 A_Chase
TNT1 A 0 A_SpawnItem("HeadshotTarget4", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPOS DD 2 A_Chase
TNT1 A 0 A_SpawnItem("HeadshotTarget4", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPOS DD 2 A_Chase
Loop
SeeNeverSeen:
TNT1 A 0 A_JumpIfCloser(200, "FallBack")
Advance:
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
TNT1 A 0 A_SpawnItemEx("FootStep", 0, 0, 10, 0, 0)
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPOS AA 2 A_Chase
TNT1 A 0 A_Recoil(-1)
TNT1 A 0 A_TakeInventory("SKZombieman", 1)
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPOS BB 2 A_Chase
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPOS CC 2 A_Chase
TNT1 A 0 A_SpawnItem ("HeadshotTarget4", 5, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPOS DD 2 A_Chase
Loop
Missile:
TNT1 A 0 A_Stop
TNT1 A 0 A_TakeInventory("EnemyMemory", 10)
TNT1 A 0 A_SpawnItem("HeadshotTarget10", 0, 40,0)
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
TNT1 A 0 A_TakeInventory("SKShotgunGuy", 1)
TNT1 A 0 A_GiveInventory("SergeantAmmo", 1)
SPOS D 5 A_FaceTarget
TNT1 A 0 A_SpawnItem("HeadshotTarget10", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPOS E 10 A_FaceTarget
TNT1 A 0 A_SpawnItem("HeadshotTarget4", 0, 40,0)
SPOS E 4 A_FaceTarget
TNT1 A 0 A_SpawnItem("HeadshotTarget10", 0, 40,0)
TNT1 AA 0 A_CustomMissile("OrangeLensFlareAlt", 34, 10, 15, 0)
//TNT1 A 0 A_SetPitch(random (-8, 8) + pitch)
TNT1 AAAAA 0 A_CustomMissile("MonsterTracer", 36, 0, random(-7, 7), 1, random(-4, 4))
TNT1 AAAAAAAA 0 A_CustomMissile("ShotgunParticles", 36, 0, random(-9, 9), 6, random(-9, 9))
TNT1 AA 0 A_CustomMissile("OrangeLensFlareAlt", 34, 10, 15, 0)
TNT1 A 0 A_PlaySound("weapons/sg")
SPOS F 5 BRIGHT //A_CustomBulletAttack(8, 8, 10, 3, "HitPuff")
TNT1 A 0 A_Recoil(1)
SPSR C 6
TNT1 A 0 A_SpawnItem("HeadshotTarget10", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPOS E 7 A_FaceTarget
TNT1 A 0 A_SpawnItem("HeadshotTarget10", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPSR A 7
TNT1 A 0 A_PlaySound("weapons/sgpump")
TNT1 A 0 A_SpawnItem("HeadshotTarget10", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPSR B 7 A_SpawnItem ("ShotCaseSpawn", 0, 30,0)
TNT1 A 0 A_SpawnItem("HeadshotTarget10", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPSR A 7
TNT1 A 0 A_JumpIfInventory("SergeantAmmo", 6, "Reload")
Goto SeeContinue
Reload:
TNT1 A 0
TNT1 A 0 A_SpawnItem ("HeadshotTarget20", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTarget20", 10)
SPSR A 15
TNT1 A 0 A_SpawnItem ("HeadshotTarget20", 0, 40,0)
TNT1 A 0 A_SpawnItem ("HeadshotTarget20", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTarget20", 10)
ID12 EFG 5
TNT1 A 0 A_PlaySound("insertshell")
TNT1 A 0 A_TakeInventory("SergeantAmmo", 1)
TNT1 A 0 A_SpawnItem ("HeadshotTarget20", 0, 40,0)
ID12 EFG 5
TNT1 A 0 A_PlaySound("insertshell")
TNT1 A 0 A_TakeInventory("SergeantAmmo", 1)
TNT1 A 0 A_SpawnItem ("HeadshotTarget20", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTarget20", 10)
ID12 EFG 5
TNT1 A 0 A_PlaySound("insertshell")
TNT1 A 0 A_TakeInventory("SergeantAmmo", 1)
TNT1 A 0 A_SpawnItem ("HeadshotTarget20", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTarget20", 10)
ID12 EFG 5
TNT1 A 0 A_PlaySound("insertshell")
TNT1 A 0 A_TakeInventory("SergeantAmmo", 1)
TNT1 A 0 A_SpawnItem ("HeadshotTarget20", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTarget20", 10)
ID12 EFG 5
TNT1 A 0 A_PlaySound("insertshell")
TNT1 A 0 A_TakeInventory("SergeantAmmo", 1)
TNT1 A 0 A_SpawnItem ("HeadshotTarget20", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTarget20", 10)
ID12 EFG 5
TNT1 A 0 A_PlaySound("insertshell")
TNT1 A 0 A_TakeInventory("SergeantAmmo", 1)
TNT1 A 0 A_SpawnItem ("HeadshotTarget20", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTarget20", 10)
SPSR A 10
TNT1 A 0 A_PlaySound("weapons/sgpump")
TNT1 A 0 A_SpawnItem("HeadshotTarget10", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTarget20", 10)
SPSR B 10
TNT1 A 0 A_SpawnItem("HeadshotTarget10", 0, 40,0)
SPSR A 10
TNT1 A 0 A_SpawnItem("HeadshotTarget10", 0, 40,0)
Goto SeeContinue
Pain:
TNT1 A 0 A_JumpIfInventory ("IsDown", 1, 9)
TNT1 A 0 A_TakeInventory("SKShotgunGuy", 1)
TNT1 A 0 A_SpawnItem("HeadshotTarget4", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPOS G 5
TNT1 A 0 A_SpawnItem("HeadshotTarget4", 0, 40,0)
TNT1 A 0 A_SpawnItem ("LegTargetBase", 10)
SPOS G 5 A_Pain
TNT1 A 0 A_Jump(196, "Missile")
Goto SeeContinue
TNT1 AAAAA 0
TNT1 A 0 A_Pain
ID11 H 6
Goto GetUp
Pain.Melee:
TNT1 A 0
TNT1 A 0 A_JumpIfInventory ("SKShotgunGuy", 1, "GotoStealthKill")
TNT1 A 0 A_JumpIfInventory ("IsDown", 1, 6)
TNT1 A 0 A_SpawnItem("HeadshotTarget4", 0, 40,0)
SPOS G 3
TNT1 A 0 A_SpawnItem("HeadshotTarget4", 0, 40,0)
SPOS G 3 A_Pain
Goto SeeContinue
TNT1 AAAAA 0
TNT1 A 0 A_Pain
ID11 H 8
ID11 S 35
TNT1 A 0 A_TakeInventory("IsDown", 1)
ID11 T 10
Goto SeeContinue
Pain.ExplosiveImpact:
Pain.ExtremePunches:
Pain.Explosive:
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
TNT1 A 0
TNT1 A 0 A_Pain
TNT1 A 0 A_JumpIfInventory ("IsDown", 1, "Pain")
TNT1 A 0 A_TakeInventory("SKShotgunGuy", 1)
TNT1 A 0 A_GiveInventory("IsDown", 1)
TNT1 A 0 ThrustThingZ(0,40,0,1)
SPO4 UUVWXY 4
Goto FallingAfterImpact
Pain.Kick:
Pain.HeavyImpact:
TNT1 A 0
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
TNT1 A 0 A_JumpIfInventory ("IsDown", 1, "Pain")
ID11 G 1 A_Pain
TNT1 A 0 A_GiveInventory("IsDown", 1)
TNT1 A 0 A_TakeInventory("SKShotgunGuy", 1)
TNT1 A 0 ThrustThingZ(0,30,0,1)
TNT1 A 0 A_ChangeFlag("NOPAIN", 1)
//ID11 E 1 A_Chase ("","")
SPO4 U 1 A_facetarget
SPO4 U 3 ThrustThing(angle*256/360+128, 10, 0, 0)
SPO4 UVWXY 3
TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
Goto FallingAfterImpact
FallingAfterImpact:
ID11 H 1 A_GiveInventory ("FallingHeight", 1)
ID11 H 1 A_CheckFloor ("GetUp")
NULL A 0 A_JumpIf (momz == 0, "GetUp")
Loop
GetUp:
TNT1 A 0
TNT1 A 0 A_GiveInventory("IsDown", 1)
TNT1 A 0 A_SpawnItem("LargeMassWaterImpact")
TNT1 A 0 A_ChangeFlag("FORCEXYBILLBOARD", 1)
TNT1 A 0 A_ChangeFlag("NOPAIN", 0)
TNT1 A 0 A_ChangeFlag("SOLID", 0)
TNT1 A 0 A_ChangeFLag("GHOST", 1)
TNT1 A 0 A_JumpIfInventory ("FallingHeight", 4, "FallingDie")
ID11 SSSSSSSSS 5 A_JumpIf(momz < 0, "FallingAfterImpact")
TNT1 A 0 A_TakeInventory("FallingHeight", 100)
ID11 T 10
TNT1 A 0 A_ChangeFlag("FORCEXYBILLBOARD", 0)
TNT1 A 0 A_TakeInventory("IsDown", 1)
TNT1 A 0 A_ChangeFlag("SOLID", 1)
Goto SeeContinue
FallingDie:
TNT1 A 0
TNT1 A 0 A_ChangeFlag("SHOOTABLE", 0)
TNT1 A 0 A_JumpIfInventory ("FallingHeight", 15, "Death.Stomp")
TNT1 A 0 A_JumpIfInventory ("FallingHeight", 10, "FallingSuperDeath")
TNT1 A 0 A_JumpIfInventory ("FallingHeight", 4, "FallingDeath")
FallingDeath:
TNT1 A 0
TNT1 A 0 A_Scream
TNT1 A 0 A_NoBLocking
TNT1 A 0 A_Stop
TNT1 AAAA 0 A_CustomMissile ("XDeath1", 32, 0, random (0, 360), 2, random (50, 130))
ID11 EF 2
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
SPOS L -1
Stop
FallingSuperDeath:
TNT1 A 0
TNT1 A 0 A_XScream
TNT1 A 0 A_NoBLocking
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
Goto Death.ExplosiveImpact+1
Pain.KillMe:
TNT1 A 0
Goto Missile
Death.KillMe:
Death.Taunt:
TNT1 A 0 A_ChangeFlag("SOLID", 0)
TNT1 A 0 A_SpawnItem("ShotgunGuy")
Stop
Death.Shotgun:
TNT1 A 0 A_Jump(42, "Death.Shotgunontheface")
TNT1 A 0 A_JumpIfCloser(80, "Death.Blast")
TNT1 A 0 A_JumpIfCloser(320, "Death.Shotgunontheface")
Goto Death
Death.Shotgunontheface:
Death.HeavyImpact:
TNT1 A 0
TNT1 A 0 A_ChangeFlag("SLIDESONWALLS", 0)
TNT1 A 0 A_Jump(24, "Death.ARm")
TNT1 A 0 A_Jump(128, "DeathShotgunFly")
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_ChangeFlag("NOBLOCKMONST", 1)
TNT1 A 0 A_Jump(128, "DeathShotgunontheface2")
TNT1 A 0 A_Stop
TNT1 A 0 A_Pain
SPOS H 1 A_FaceTarget
TNT1 A 0 A_Recoil(13)
TNT1 A 0 ThrustThingZ(0,20,0,1)
TNT1 A 0 A_Scream
TNT1 A 0 A_CustomMissile ("MuchBlood2", 35, 0, random (0, 360), 2, random (0, 160))
TNT1 AA 0 A_CustomMissile ("XDeath1", 35, 0, random (0, 360), 2, random (0, 160))
SPO4 ABCD 4
SPO4 EFGHIJ 4 A_JumpIf((MomY == 0), "DSFStop")
Goto DSFStop+1
DSFStop:
TNT1 A 0 A_SpawnItem("Ploft3")
TNT1 A 0 A_Stop
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
TNT1 A 0 A_CustomMissile ("SuperWallRedBlood", 2, 0, random (170, 190), 2, random (0, 0))
SPO4 J -1
Stop
DeathShotgunontheface2:
TNT1 A 0 A_ChangeFlag("NOBLOCKMONST", 1)
TNT1 A 0 A_Stop
TNT1 A 0 A_Pain
SPOS H 1 A_FaceTarget
TNT1 A 0 A_Scream
TNT1 A 0 A_Recoil(13)
TNT1 A 0 ThrustThingZ(0,20,0,1)
TNT1 A 0 A_CustomMissile ("MuchBlood2", 35, 0, random (0, 360), 2, random (0, 160))
TNT1 AA 0 A_CustomMissile ("XDeath1", 35, 0, random (0, 360), 2, random (0, 160))
SPO4 KLMN 4
SPO4 OPQRST 4 A_JumpIf((MomY == 0), "DSFStop2")
Goto DSFStop2+1
DSFStop2:
TNT1 A 0 A_SpawnItem("Ploft3")
TNT1 A 0 A_Stop
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
TNT1 A 0 A_CustomMissile ("SuperWallRedBlood", 2, 0, random (170, 190), 2, random (0, 0))
SPO4 T -1
Stop
DeathShotgunFly:
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
TNT1 A 0 A_ChangeFLag("SLIDESONWALLS", 0)
TNT1 A 0 ThrustThingZ(0,30,0,1)
TNT1 A 0 A_Scream
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_FaceTarget
TNT1 A 0 A_Recoil (6)
SPO4 U 5 A_CustomMissile ("Brutal_LiquidBlood3", 15, 0, random (0, 360), 2, random (0, 40))
TNT1 A 0 A_JumpIf((MomY == 0), "TakeASit")
SPO4 U 5 A_CustomMissile ("Brutal_LiquidBlood3", 15, 0, random (0, 360), 2, random (0, 40))
TNT1 A 0 A_JumpIf((MomY == 0), "TakeASit")
SPO4 V 5 A_CustomMissile ("Brutal_LiquidBlood3", 15, 0, random (0, 360), 2, random (0, 40))
TNT1 A 0 A_JumpIf((MomY == 0), "TakeASit")
SPO4 W 5 A_CustomMissile ("Brutal_LiquidBlood3", 15, 0, random (0, 360), 2, random (0, 40))
SPO4 X 5 A_CustomMissile ("Brutal_LiquidBlood3", 15, 0, random (0, 360), 2, random (0, 40))
SPO4 Y 5 A_CustomMissile ("Brutal_LiquidBlood3", 15, 0, random (0, 360), 2, random (0, 40))
TNT1 A 0 A_SpawnItem("GrowingBloodPool")
TNT1 A 0 A_SpawnItem("DeadShotgunguy1")
Stop
TakeASit:
TNT1 AAAA 0 A_CustomMissile ("SuperWallRedBlood", 6, 0, random (170, 190), 2, random (0, 40))
SPO4 U 5
TNT1 A 0 A_SpawnItem("GrowingBloodPool")
TNT1 A 0 A_SpawnItemEx("DeadShotgunguy_Slumped", 10)
Stop
Death.Eat:
TNT1 A 0
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_Scream
TNT1 A 0 A_GiveToTarget("SergeantFatality",1)
Stop
Death.ShotgunonthefaceArm:
TNT1 A 0
TNT1 A 0 A_Jump(128, "Death.Arm")
TNT1 A 0 ThrustThingZ(0,40,0,1)
TNT1 A 0 A_CustomMissile ("XDeathArm1", 35, 0, random (0, 360), 2, random (0, 160))
TNT1 AA 0 A_CustomMissile ("MuchBlood2", 35, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_Scream
TNT1 A 0 A_NoBlocking
ID11 OP 15
TNT1 A 0 A_SpawnItem ("DeadShotgunGuy_NoArm")
Stop
GotoStealthKill:
TNT1 A 1
TNT1 A 0 A_Explode(100, 1, 1)
TNT1 A 1
Goto SeeContinue
Death.Melee:
TNT1 A 0 A_JumpIfInventory ("IsDown", 1, "Death.Down")
TNT1 A 0 A_JumpIfInventory ("SKShotgunGuy", 1, "StealthKill")
Death.Kick:
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
TNT1 A 0 A_Scream
TNT1 A 0 A_NoBlocking
TNT1 A 0 ThrustThingZ(0,30,0,1)
TNT1 A 0 A_FaceTarget
TNT1 A 0 A_Recoil (8)
SPO4 UUVWXY 4
SPOS L -1
Stop
Death:
TNT1 A 0 A_JumpIfInventory ("IsDown", 1, "Death.Down")
TNT1 A 0 A_Jump(96, "Death.Arm")
Death.MinorLeg:
TNT1 A 0 A_Jump(48, "Death.Leg")
SPOS H 5 A_Scream
SPOS I 5
SPOS J 5 A_NoBlocking
SPOS K 5
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
SPOS L -1
Stop
Death.Down:
Death.Trample:
TNT1 A 0
TNT1 A 0 A_Scream
TNT1 A 0 A_NoBlocking
TNT1 AAA 0 A_CustomMissile ("XDeath1", 2, 0, random (0, 360), 2, random (0, 40))
ID11 H 12
TNT1 A 0 A_SpawnItem("DeadShotgunguy")
Stop
Death.Leg:
TNT1 A 0 A_CustomMissile ("XDeathSargeLeg1", 35, 0, random (0, 360), 2, random (0, 160))
SPO3 A 9 A_CustomMissile ("XDeath1", 40, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_Playsound ("grunt/death")
SPO3 B 3
SPO3 C 3 A_NoBlocking
TNT1 A 0 A_SpawnItemEx ("SergeantGotHisLegBlowed",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
Stop
LeaveCrawling:
TNT1 A 0
TNT1 A 0 A_SpawnItemEx ("DyingSergeantNoLeg",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
TNT1 A 0
Stop
Death.Arm:
TNT1 A 0 A_Scream
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_CustomMissile ("XDeathArm2", 35, 0, random (0, 360), 2, random (0, 160))
SPO5 A 9 A_CustomMissile ("XDeath1", 40, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
TNT1 A 0 A_SpawnItemEx ("DyingSergeant",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
Stop
HeadExploder:
TNT1 A 0 A_Jump(72, "Death.HeadExplode")
Goto Death.HeadMinor
Death.Head:
TNT1 A 0 A_JumpIfInTargetInventory("HasPlasmaWeapon", 1, "Death.Plasma")
TNT1 A 0 A_JumpIfInTargetInventory("HasCutingWeapon", 1, "Death.Decaptate")
TNT1 A 0 A_JumpIfHealthLower(-200, "HeavyHead")
TNT1 A 0 A_JumpIfHealthLower(-50, "Death.HeadExplode")
TNT1 A 0 A_JumpIfInTargetInventory("RandomHeadExploder", 1, "HeadExploder")
Death.HeadMinor:
TNT1 A 0 A_FaceTarget
TNT1 A 0 A_PlaySound("misc/xdeath4")
TNT1 A 0 A_Jump(142, "DeathMinorHead4")
TNT1 A 0 A_Jump(32, "Death.MinorHeadLong")
TNT1 AAAAA 0 A_CustomMissile ("Brutal_FlyingBloodTrail8", 50, 0, random (0, 360), 2, random (0, 360))
TNT1 AA 0 A_CustomMissile ("SmallBrainPiece", 50, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeath1", 40, 0, random (100, 130), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("Brains3", 50, 0, random (90, 110), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("Brains5", 50, 0, random (100, 130), 2, random (0, 160))
TNT1 A 0 A_Scream
SPOS TTTTUU 2 A_CustomMissile ("Brutal_LiquidBlood", 40, 0, 120, 2, random (0, 60))
SPOS VVV 2 A_CustomMissile ("Brutal_LiquidBlood2", 30, 0, 120, 2, random (60, 120))
TNT1 A 0 A_NoBlocking
SPOS XXXYYY 2 A_CustomMissile ("Brutal_LiquidBlood2", 20, 0, random (0, 360), 2, random (60, 120))
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
SPOS Z -1
Stop
Death.MinorHeadLong:
TNT1 AAAAA 0 A_CustomMissile ("Brutal_FlyingBloodTrail8", 50, 0, random (0, 360), 2, random (0, 360))
TNT1 AA 0 A_CustomMissile ("SmallBrainPieceFast", random (45, 55), random (5, -5), random (170, 190), 2, random (-10, 10))
TNT1 AAA 0 A_CustomMissile ("SmallBrainPiece", 50, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeath1", 40, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("Brains3", 50, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("Brains5", 50, 0, random (0, 360), 2, random (0, 160))
SPOS U 6 A_Scream
SPOS V 6 A_NoBlocking
SPOS VWVWVW 18 A_Pain
SPOS XY 6
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
SPOS Z -1
Stop
DeathMinorHead4:
TNT1 A 0
TNT1 A 0 A_Pain
TNT1 A 0 A_FaceTarget
TNT1 A 0 A_CustomMissile ("Brains4", random (45, 55), random (5, -5), random (170, 190), 2, random (-10, 10))
TNT1 AA 0 A_CustomMissile ("SmallBrainPieceFast", random (45, 55), random (5, -5), random (170, 190), 2, random (-10, 10))
TNT1 A 0 A_CustomMissile ("SmallBrainPiece", 50, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("SuperWallRedBlood", 46, 0, random (170, 190), 2, random (0, 40))
13DG J 6 A_CustomMissile ("MuchBlood2", 40, 0, random (0, 360), 2, random (0, 160))
13DG KL 8
TNT1 A 0 A_Scream
13DG M 6 A_NoBlocking
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
13DG N -1
Stop
Death.headExplode:
TNT1 A 0 A_XScream
TNT1 A 0 A_SpawnItem("ShotgunguyHeadExplode", 0, 50)
TNT1 A 0 A_NoBlocking
SPDH AAAAABBBBBBBBBBCCCCC 2 A_CustomMissile ("Brutal_LiquidBlood2", 30, 0, random (0, 360), 2, random (60, 120))
SPDH DDDDEEEE 2 A_CustomMissile ("Brutal_LiquidBlood2", 10, 0, random (0, 360), 2, random (60, 120))
SPDH EEEEEEEEEE 2 A_CustomMissile ("Brutal_LiquidBlood2", 5, 0, random (0, 360), 2, random (10, 40))
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
SPDH E -1
Stop
HeavyHead:
TNT1 A 0 A_ClearTarget
SOSL G 1 A_Chase("", "")
SOSL G 1 A_Pain
TNT1 A 0 A_ChangeFlag("NOBLOCKMONST", 1)
TNT1 A 0 A_PlaySound("misc/xdeath4")
TNT1 A 0 A_FaceTarget
TNT1 A 0 A_Recoil(10)
TNT1 A 0 ThrustThingZ(0,35,0,1)
TNT1 AA 0 A_CustomMissile ("MuchBlood", 50, 0, random (0, 360), 2, random (10, 170))
TNT1 A 0 A_CustomMissile ("MuchBlood2", 40, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("Brains2", 40, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("Brains3", 40, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("Brains5", 40, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("BrainsSergeantHeadPiece", 50, 0, random (0, 360), 2, random (0, 160))
TNT1 AAA 0 A_CustomMissile ("SmallBrainPieceFast", random (45, 55), random (5, -5), random (170, 190), 2, random (-10, 10))
TNT1 AAAAA 0 A_CustomMissile ("SmallBrainPiece", 40, 0, random (0, 360), 2, random (0, 160))
TNT1 AA 0 A_CustomMissile ("SuperWallRedBlood", 46, 0, random (170, 190), 2, random (0, 40))
ZMAD B 0 A_XScream
TNT1 A 0 A_SpawnItem("BloodSplasher2")
ZMAD C 0 A_NoBlocking
SOSL GHIJK 6
SOSL LLLLLLLLLLLLLLLLLLL 4 A_CustomMissile ("Brutal_LiquidBlood2", 10, 0, random (0, 360), 2, random (10, 40))
SOSL L -1
Stop
Death.decaptate:
TNT1 AAAAAAA 0 A_CustomMissile ("Blood", 50, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_PlaySound("misc/xdeath4")
TNT1 A 0 A_CustomMissile ("XDeathSergeantHeadBeheaded", 50, 0, random (0, 360), 2, random (40, 90))
TNT1 A 0 A_CustomMissile ("MuchBlood2", 40, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_XScream
TNT1 A 0 A_NoBlocking
SPDH AAAAABBBBBBBBBBCCCCC 2 A_CustomMissile ("Brutal_LiquidBlood2", 30, 0, random (0, 360), 2, random (60, 120))
SPDH DDDDDDEEEEE 2 A_CustomMissile ("Brutal_LiquidBlood2", 10, 0, random (0, 360), 2, random (60, 120))
SPDH EEEEEEEEEEEE 2 A_CustomMissile ("Brutal_LiquidBlood2", 5, 0, random (0, 360), 2, random (10, 40))
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
SPDH E -1
Stop
Death.Saw:
Death.cut:
Death.HKFT:
TNT1 A 0
TNT1 A 0 A_Jump(96, "Death.Arm")
Goto Death.Tear
Death.cutless:
TNT1 A 0
TNT1 A 0 A_JumpIfInventory ("IsDown", 1, "Death.Down")
TNT1 A 0 A_Jump(16, "Death")
TNT1 A 0 A_Jump(32, "Death.Cut")
TNT1 A 0 A_Jump(16, "Death.LegMassacre")
Goto Death.Minigun
Death.Tear:
TNT1 AAA 0 A_CustomMissile ("MuchBlood", 1, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_XScream
TNT1 O 0 A_NoBlocking
SP2X AA 8
TNT1 A 0 A_CustomMissile ("XDeath4", 40, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("RipSergeant", 0, 0, random (0, 360), 2, random (0, 160))
SP2X BBCD 8
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
SP2X E -1
Stop
Death.Minigun:
TNT1 A 0
TNT1 A 0 A_FaceTarget
TNT1 A 0 A_Scream
TNT1 O 0 A_NoBlocking
TNT1 A 0 A_SpawnItem ("BrutalizedSergeant1", 1)
Stop
Death.LegMassacre:
TNT1 A 0
TNT1 A 0 A_FaceTarget
TNT1 A 0 A_Scream
TNT1 O 0 A_NoBlocking
TNT1 A 0 A_SpawnItem ("BrutalizedSergeantLeg", 1)
Stop
Death.Blast:
Death.Railgun:
TNT1 A 0
TNT1 A 0 A_FaceTarget
TNT1 A 0 A_Jump(12, "Death.Arm")
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_Jump(128, "Death.Blast2")
TNT1 A 0 A_Scream
TNT1 AAA 0 A_CustomMissile ("Instestin", 32, 0, random (150, 210), 2, random (0, 40))
TNT1 AAA 0 A_CustomMissile ("XDeath1", 32, 0, random (150, 210), 2, random (0, 40))
TNT1 AAA 0 A_CustomMissile ("Xdeath3", 16, 0, random (170, 190), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBlood", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodFaster", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodMuchFaster", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("SuperWallRedBlood", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 AAA 0 A_CustomMissile ("BloodMistBig", 40, 0, random (0, 360), 2, random (30, 90))
ZXZ7 A 6 A_Stop
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
ZXZ7 BBBBBBBBBB 3 A_CustomMissile ("Brutal_LiquidBlood2", 26, 0, random (0, 360), 2, random (30, 60))
ZXZ7 CCC 3 A_CustomMissile ("Brutal_LiquidBlood2", 26, 0, random (0, 360), 2, random (10, 40))
ZXZ7 DD 3 A_CustomMissile ("Brutal_LiquidBlood2", 6, 0, random (0, 360), 2, random (30, 60))
ZXZ7 E -1
Stop
Death.Blast2:
TNT1 A 0 A_XScream
TNT1 A 0 A_CustomMissile ("XDeathArm1", 42, 0, random (0, 360), 2, random (0, 40))
TNT1 AAA 0 A_CustomMissile ("Instestin", 32, 0, random (150, 210), 2, random (0, 40))
TNT1 AAA 0 A_CustomMissile ("XDeath1", 32, 0, random (150, 210), 2, random (0, 40))
TNT1 AAA 0 A_CustomMissile ("Xdeath3", 16, 0, random (170, 190), 2, random (0, 40))
TNT1 AA 0 A_CustomMissile ("Xdeath2", 16, 0, random (130, 210), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBlood", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodFaster", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodMuchFaster", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("SuperWallRedBlood", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("BloodMistBig", 40, 0, random (0, 360), 2, random (30, 90))
ZXZ6 A 6 A_Stop
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
ZXZ6 BBBBBBBBBBBBBBBBBBB 3 A_CustomMissile ("Brutal_LiquidBlood2", 26, 0, random (0, 360), 2, random (30, 60))
ZXZ6 CCC 3 A_CustomMissile ("Brutal_LiquidBlood2", 26, 0, random (0, 360), 2, random (10, 40))
ZXZ6 DD 3 A_CustomMissile ("Brutal_LiquidBlood2", 6, 0, random (0, 360), 2, random (30, 60))
ZXZ6 E -1
Stop
Death.SuperPunch:
Death.SSG:
SZD1 E 1 A_Pain
SZD1 E 1 A_FaceTarget
TNT1 A 0 A_SpawnItem("BloodSplasher2")
TNT1 AAA 0 bright A_CustomMissile ("SuperGoreSpawner", 35, 0, random (170, 190), 2, random (0, 40))
//TNT1 A 0 A_CustomMissile ("MeatDeath", 0, 0, random (0, 360), 2, random (0, 160))
TNT1 AAAA 0 A_CustomMissile ("XDeath1", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 A 0 A_CustomMissile ("XDeath2", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 A 0 A_CustomMissile ("XDeath3", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBlood", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 AAA 0 A_CustomMissile ("Instestin", 32, 0, random (150, 210), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodFaster", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodMuchFaster", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("SuperWallRedBlood", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("SuperWallRedBlood", 46, 0, random (170, 190), 2, random (0, 40))
TNT1 AA 0 A_CustomMissile ("XDeathArm1", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 A 0 A_CustomMissile ("XDeathSergeantHead", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 A 0 A_XScream
TNT1 A 0 A_NoBlocking
SZD1 EEFFGH 6
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
SZD1 H -1
Stop
Death.GreenFire:
TNT1 A 0
TNT1 A 0 A_XScream
TNT1 A 0 A_NoBlocking
TNT1 AAAA 0 A_CustomMissile ("Brutal_Blood", 30, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeathBurnedArm", 32, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeathBurnedLeg", 32, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeathBurnedSkull", 32, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeathBurnedMeat", 32, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeathBurnedMeat2", 32, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeathBurnedMeat3", 32, 0, random (0, 360), 2, random (0, 160))
EXPL AAAAAAAAAAAAAAAAAAAAAAAA 0 A_CustomMissile ("GreenFlameTrails", 50, 0, random (0, 360), 2, random (0, 360))
XBRN AAAA 2 BRIGHT A_SpawnItem("GreenFlare",0,43)
Stop
Death.Plasma: Death.Plasma2:
PBR1 A 6 A_Scream
TNT1 AAAAAAAAAAAAAAAAAA 0 A_CustomMissile ("Ashes1", 32, 0, random (0, 360), 2, random (0, 180))
TNT1 AAAAAAAAAAAAAAAAAA 0 A_CustomMissile ("Ashes2", 32, 0, random (0, 360), 2, random (0, 180))
TNT1 AAAA 0 A_CustomMissile ("BluePlasmaFireNonStatic", 32, 0, random (0, 360), 2, random (0, 180))
PBR1 B 6 A_NoBlocking
PBR1 CDEFGH 6 A_CustomMissile ("Blood", 10, 0, random (0, 360), 2, random (0, 160))
PBR1 HHHHHHHHHHHHHHHHHHHHHH 8 A_CustomMissile ("PlasmaSmoke", 10, 0, random (0, 360), 2, random (0, 160))
PBR1 H -1
Stop
Death.SuperPlasma:
TNT1 A 0
TNT1 A 0 A_XScream
TNT1 A 0 A_NoBlocking
XBRN AA 2 BRIGHT A_SpawnItem("BlueFlare",0,43)
TNT1 AAAA 0 A_CustomMissile ("Brutal_Blood", 30, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeathBurnedArm", 32, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeathBurnedLeg", 32, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeathBurnedSkull", 32, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeathBurnedMeat", 32, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeathBurnedMeat2", 32, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeathBurnedMeat3", 32, 0, random (0, 360), 2, random (0, 160))
XBRN BB 2 BRIGHT A_SpawnItem("BlueFlare",0,43)
TNT1 A 0 A_CustomMissile ("Brutal_Blood", 30, 0, random (0, 360), 2, random (0, 160))
XBRN CC 2 BRIGHT A_SpawnItem("BlueFlare",0,43)
TNT1 AAAAA 0 A_CustomMissile ("PlasmaParticleX", 48, 0, random (0, 360), 2, random (0, 360))
TNT1 AAA 0 A_CustomMissile ("BigPlasmaParticleX", 42, 0, random (0, 360), 2, random (0, 360))
TNT1 A 0
Stop
Death.Fatality:
TNT1 A 0
TNT1 A 0 A_Pain
TNT1 A 0 A_JumpIfIntargetInventory("FistsSelected", 1, 1)
Goto Death.ExplosiveImpact
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_GiveToTarget("GoFatality", 1)
TNT1 A 0 A_Jump(255, "Death.Fatality1", "Death.Fatality1", "Death.Fatality2", "Death.Fatality3")
Death.Fatality1:
TNT1 A 0 A_GiveToTarget("SergeantFatality", 1)
Stop
Death.Fatality2:
TNT1 A 0 A_GiveToTarget("SergeantFatality2", 1)
Stop
Death.Fatality3:
TNT1 A 0 A_GiveToTarget("SergeantFatality3", 1)
Stop
Death.HelperMarineFatallity:
Death.BHFT:
Death.RVFT:
TNT1 A 0
TNT1 A 1 A_Pain
TNT1 A 0 A_Chase("","")
TNT1 A 0 A_Scream
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_GiveToTarget("SergeantFatality", 1)
Stop
Death.fire:
Death.burn:
Death.flames:
TNT1 A 0 A_Scream
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_SpawnItem("BurningZombieMan", 0, 7)
//TNT1 A 0 A_SpawnItem("BurningShotgunguy", 0, 10)
Stop
XDeath:
TNT1 A 0 A_XScream
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_FaceTarget
TNT1 AAA 0 A_CustomMissile ("XDeath1", 42, 0, random (0, 190), 2, random (10, 60))
TNT1 AAA 0 A_CustomMissile ("XDeath3", 42, 0, random (0, 190), 2, random (10, 60))
TNT1 A 0 A_CustomMissile ("XDeath2", 42, 0, random (0, 190), 2, random (10, 60))
TNT1 A 0 A_CustomMissile ("XDeath4", 42, 0, random (0, 190), 2, random (10, 60))
TNT1 A 0 A_CustomMissile ("SargeXDeath", 0, 0, random (0, 360), 2, random (0, 160))
Stop
Death.Desintegrate:
TNT1 A 0 A_Scream
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_SpawnItem("DesintegratedHuman")
Stop
Crush:
Death.Stomp:
TNT1 AAAAAAAAAAAAAAAAAAAAAAAAA 0 A_CustomMissile ("Brutal_FlyingBloodTrail8", 0, 0, random (0, 360), 2, random (0, 360))
TNT1 AAAAAA 0 bright A_CustomMissile ("SuperGoreSpawner", 5, 0, random (0, 360), 2, random (30, 180))
TNT1 AAAAAA 0 bright A_CustomMissile ("XDeath1", 5, 0, random (0, 360), 2, random (30, 180))
TNT1 AA 0 bright A_CustomMissile ("XDeath2", 55, 0, random (0, 360), 2, random (30, 180))
TNT1 AA 0 bright A_CustomMissile ("XDeath3", 55, 0, random (0, 360), 2, random (30, 180))
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
TNT1 A 0 A_SpawnItem ("CrushedRemains")
TNT1 A 1
TNT1 A 1 A_XScream
TNT1 A 1 A_NoBlocking
Stop
Death.ExplosiveImpact:
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
TNT1 A 0
TNT1 A 0 A_CustomMissile ("XDeath1", 32, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeath2", 32, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_ChangeFlag("NOBLOCKMONST", 1)
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_Jump(96,"Death.LandMine")
TNT1 AAAA 0 A_CustomMissile ("Brains1", 50, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("Brains2", 50, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("Brains3", 50, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("Brains4", 50, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("Brains5", 50, 0, random (0, 360), 2, random (0, 160))
TNT1 AAAA 0 A_CustomMissile ("SmallBrainPieceFast", random (45, 55), random (5, -5), random (170, 190), 2, random (-10, 10))
TNT1 AAAA 0 A_CustomMissile ("SmallBrainPiece", 50, 0, random (0, 360), 2, random (0, 160))
TNT1 AA 0 A_CustomMissile ("SuperWallRedBlood", 46, 0, random (170, 190), 2, random (0, 40))
TNT1 AAAAAAAAAAA 0 A_CustomMissile ("BrainBlood", 50, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeathArm1", 35, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeath3", 40, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeathSargeLeg2", 32, 0, random (0, 360), 2, random (0, 160))
TNT1 AAAAAA 0 A_CustomMissile ("BloodMistLarge", 40, 0, random (0, 360), 2, random (20, 90))
TNT1 AAAA 0 A_CustomMissile ("XDeath1", 40, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 ThrustThingZ(0,30,0,1)
ID14 AB 5
ID14 CDEF 5 A_CheckFloor ("Dead.ExplosiveImpact")
ID14 FFFFFF 5 A_CheckFloor ("Dead.ExplosiveImpact")
TNT1 A 0 A_SpawnItem ("VeryFuckedUpBrutalizedSergeantLeg")
Stop
Dead.ExplosiveImpact:
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
TNT1 A 0 A_SpawnItem ("VeryFuckedUpBrutalizedSergeantLeg")
TNT1 A 0 A_SpawnItem ("Ploft")
TNT1 A 0 A_SpawnItem ("MuchBlood")
Stop
Death.LandMine:
TNT1 AA 0 A_CustomMissile ("SuperWallRedBlood", 46, 0, random (170, 190), 2, random (0, 40))
TNT1 AAAAAAAAAAA 0 A_CustomMissile ("BrainBlood", 50, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("XDeathSargeLeg1", 32, 0, random (0, 360), 2, random (0, 160))
//TNT1 A 0 A_CustomMissile ("GibHand", 42, 0, random (0, 360), 2, random (0, 160))
TNT1 AAAA 0 A_CustomMissile ("XDeath1", 40, 0, random (0, 360), 2, random (0, 160))
TNT1 AAAAAA 0 A_CustomMissile ("BloodMistLarge", 40, 0, random (0, 360), 2, random (20, 90))
TNT1 A 0 ThrustThingZ(0,50,0,1)
ID16 A 1 A_Scream
ID16 A 9
ID16 BCD 9 A_CheckFloor ("Dead.Landmine")
ID16 DDDD 9 A_CheckFloor ("Dead.Landmine")
TNT1 A 0 A_SpawnItem ("DeadShotgunguy_NoLeg", 1)
Stop
Dead.Landmine:
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
TNT1 A 0 A_SpawnItem ("DeadShotgunguy_NoLeg", 1)
TNT1 A 0 A_SpawnItem ("Ploft")
TNT1 A 0 A_SpawnItem ("MuchBlood")
Stop
Raise:
SPOS L 5
SPOS KJIH 5
Goto SeeContinue
StealthKill:
TNT1 A 0
TNT1 A 0 A_JumpIfInTargetInventory("FistsSelected", 1, 1)
Goto Death
TNT1 A 0 A_GiveToTarget("GoFatality", 1)
TNT1 A 0 A_GiveToTarget("SKShotgunGuy", 1)
TNT1 A 0 A_Fall
//TNT1 A 0 A_NoBlocking
TNT1 A 0 A_Die("Stealthy")
TNT1 A 1
TNT1 A 1
Stop
Death.Stealthy:
TNT1 A 0
Stop
Death.Ice:
Death.Freeze:
Death.Frost:
TNT1 A 0 A_ChangeFlag("SHOOTABLE", 0)
TNT1 A 0 A_ChangeFlag("SOLID", 0)
TNT1 A 0 A_SpawnItem("FrozenShotgunguy")
Stop
Death.Massacre:
Goto Death
}
}
A lot of the enemies in Brutal Doom have a concept of memory - as they chase you, they gradually decrement the number of EnemyMemory in their inventory, and if you've been out of sight for a while, they revert to just wandering instead of chasing you. And there are some very fine details like having the Sergeant keep an ammo count - once he's fired all his shells, he has to stop and reload the next time Missile is called. It's a clever idea, but it's a bit wasted because in normal gameplay for a monster that is dispatched so easily, you really aren't going to notice this happening. It would be good for a boss, though.
Damage types
Before going very far down the class, you can see a large number of PainChance and DamageFactor definitions - and like most other things in Brutal Doom, damage types are all over the place. It's even more difficult to keep track of them than most other elements because damage types don't require definition anywhere - they're just strings, which are easy to typo undetectably and don't have a central place to look them up.
Brutal Doom actually uses some damage types in clever ways - for example, flying body parts from monsters cause the Blood damage type, which everything declares itself immune to - however, the Pain.Blood state still gets called if something is hit by one, producing effects like blood-stained barrels or drips on the player's screen. Another unorthodox damage type is Avoid, which causes no damage but which is intended to cause a monster to attempt to dodge aside if hit by it - it's used in places like the rocket launcher, which fires an invisible hitscan to alert enemies as the real projectile launches.
Deciding what to keep and what to avoid from all of the above was a challenge, but in the end I removed most of the special cases and pared the whole thing down to just eight damage types:
- Kick - Caused by short-range physical attacks, typically in slot 1 or the universal kick.
- SuperKick - Caused by short-range physical attacks when in Berserk.
- Bullet - Slow-firing bullet weapons like the pistol or Brutal Doom rifle.
- Shotgun - Shell weapons like the shotgun.
- RapidFire - Weapons with a high rate of fire such as the chaingun.
- Explosive - Rockets, grenades and so on.
- Plasma - Laser and plasma/cell weapons
- Flak - Larger and more powerful ballistic weapons, like the Super Shotgun or (because I wanted to include it as my pet weapon) the new Flak Cannon.
There are still a couple of other ones that get used very occasionally, such as GreenFire for the Hell Knight's attacks, but for the vast majority of the time I stuck with the above.
Death states
In Brutal Doom, each damage type's death state for each monster is unique. They contain a lot of hard-to-follow jumps for randomization or special cases, and spawn a ton of additional blood and/or gib items. Here's just one of them taken from the Sergeant class above.
Death.SSG:
SZD1 E 1 A_Pain
SZD1 E 1 A_FaceTarget
TNT1 A 0 A_SpawnItem("BloodSplasher2")
TNT1 AAA 0 bright A_CustomMissile ("SuperGoreSpawner", 35, 0, random (170, 190), 2, random (0, 40))
//TNT1 A 0 A_CustomMissile ("MeatDeath", 0, 0, random (0, 360), 2, random (0, 160))
TNT1 AAAA 0 A_CustomMissile ("XDeath1", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 A 0 A_CustomMissile ("XDeath2", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 A 0 A_CustomMissile ("XDeath3", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBlood", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 AAA 0 A_CustomMissile ("Instestin", 32, 0, random (150, 210), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodFaster", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("Brutal_FlyingBloodMuchFaster", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("SuperWallRedBlood", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 AAAA 0 A_CustomMissile ("SuperWallRedBlood", 46, 0, random (170, 190), 2, random (0, 40))
TNT1 AA 0 A_CustomMissile ("XDeathArm1", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 A 0 A_CustomMissile ("XDeathSergeantHead", 32, 0, random (170, 190), 2, random (0, 40))
TNT1 A 0 A_XScream
TNT1 A 0 A_NoBlocking
SZD1 EEFFGH 6
TNT1 A 0 A_SpawnItem ("GrowingBloodPool")
SZD1 H -1
Stop
BDLite restructures the death states so that the entry points are much more straightforward:
Death:
Death.Bullet:
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
TNT1 A 0 A_Scream
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_Jump(256, "DieNormal", "DieNormal2")
Death.Kick:
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
TNT1 A 0 A_Scream
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_Jump(256, "DieRollBack")
Death.SuperKick:
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
TNT1 A 0 A_Scream
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_Jump(256, "DieSplit", "DieGibs")
Death.Shotgun:
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
TNT1 A 0 A_Scream
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_Jump(256, "DieBlastedBack", "DieRollBack", "DieArmOff", "DieRoll")
Death.RapidFire:
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
TNT1 A 0 A_Scream
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_Jump(256, "DieArmOff", "DieInHalf", "DieHeadOff", "DieHoleThroughChest", "DieRoll")
Death.Explosive:
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
TNT1 A 0 A_Scream
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_JumpIf(health > -10, "DieNormal")
TNT1 A 0 A_Jump(256, "DieGibs", "XDeath")
Death.Plasma:
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
TNT1 A 0 A_Scream
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_Jump(256, "DiePlasma")
Death.Flak:
TNT1 A 0 A_ChangeFLag("NODROPOFF", 0)
TNT1 A 0 A_Scream
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_Jump(256, "DieJustLegs", "DieInHalf", "DieGibs")
The death states only do a small amount of work to indicate the monster is dead, and then define a selection of one or more Die___ states to randomly jump to afterwards. Monsters can have as few or as many Die states as you like - for some of them, I used the huge number of sprites available to define many variations, but for others, just a few variations were enough.
The Die states are where the animation and blood-spawning now take place. Each one is named roughly after the style of death it shows - DieInHalf or DieHeadOff, for example, and for the ones that involve madly firing as they fall over I chose to use the term "DieRambo". There's often a bit of repetition in here, but it's much clearer now what they're doing - spawn the gibs, animate the sprite, and end it either with a frame of length -1 or a Stop to remove the actor entirely. Here are four of them - the Sergeant is among the actors with the most possible deaths at 14.
DieHeadOff:
TNT1 A 0 A_CustomMissile ("BdGibZombieHead", 48, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_CustomMissile ("BdBloodSpawnerMed", 35, 0, random (0, 360), 2, random (0, 160))
TNT1 AAA 0 A_CustomMissile ("BdBloodLump", 35, 0, random (0, 360), 2, random(45, 80))
SPDH ABCDE 6 A_CustomMissile ("BdBloodDrop", 15, 0, random (0, 360), 2, random (0, 40))
SPDH E -1
DieHoleThroughChest:
TNT1 A 0 A_CustomMissile ("BdBloodSpawnerMed", 35, 0, random (0, 360), 2, random (0, 160))
TNT1 AA 0 A_CustomMissile ("BdBloodLump", 35, 0, random (0, 360), 2, random(45, 80))
TNT1 AAAA 0 A_CustomMissile ("BdGibGut", 35, 0, random (0, 360), 2, random(25, 45))
TNT1 A 0 A_CustomMissile ("BdGibZombieRibcage", 42, 0, random (0, 360), 2, random (10, 160))
ZXZ7 ABCDE 6 A_CustomMissile ("BdBloodDrop", 15, 0, random (0, 360), 2, random (0, 40))
ZXZ7 E -1
DieRoll:
TNT1 A 0 A_CustomMissile ("BdBloodSpawnerMed", 35, 0, random (0, 360), 2, random (0, 160))
TNT1 AAA 0 A_CustomMissile ("BdBloodLump", 35, 0, random (0, 360), 2, random(45, 80))
TNT1 A 0 ThrustThingZ(0,5,0,1)
TNT1 A 0 A_FaceTarget
TNT1 A 0 A_Recoil(random(2, 4))
SPO4 ABCDJ 4 A_CustomMissile ("BdBloodDrop", 15, 0, random (0, 360), 2, random (0, 40))
SPO4 J -1
DiePlasma:
PBR1 A 2
TNT1 AAAAAAAAAAAAAAAAAAAAAAA 0 {
A_CustomMissile ("BdAshes", 32, 0, random (0, 360), 2, random (0, 180));
A_CustomMissile ("BdAshesHeavy", 32, 0, random (0, 360), 2, random (0, 180));
}
TNT1 A 0 A_CustomMissile ("BdBloodSpawnerMelting", 35, 0, random (0, 360), 2, random (0, 160))
PBR1 BBBBBB 2 A_SpawnItemEx("BdPlasmaEvaporate", random(0 - radius/2, radius/2), random(0 - radius/2, radius/2), 48)
PBR1 CDEFGH 6 A_CustomMissile ("Blood", 10, 0, random (0, 360), 2, random (0, 160))
TNT1 A 0 A_SpawnItem ("BdBloodPool")
PBR1 HHHHHHHHHHHHHHHHHHHHHH 8 {
A_CustomMissile ("BdPlasmaSmoke", 10, 0, random (0, 360), 2, random (0, 160));
A_SpawnItemEx("BdPlasmaEvaporate", random(0 - radius/2, radius/2), random(0 - radius/2, radius/2), 8);
}
PBR1 H -1
Stop
The Plasma death states tend to be the longest as they spawn some extra objects compared to normal deaths (they use a carbonized version of the monster sprite and show flecks of plasma evaporating off them) - but there's now no unexpected jumping around, the animations are all straightforward to read. You'll also notice that the blood and gib classes are entirely different, an overhaul that I'll describe in the next post.
As for pain states, they remain mostly the same as in Doom, with the exception of Kick which typically has a much higher PainChance than it would normally and thrusts the target monster back a bit - this keeps the kick's unique advantage in being able to slow monsters down and get out if they're crowding you in.