
// ABOMINANT
/*
*/
ACTOR RLAbominant : RLWildcardBossBase 16570
{
  Health 12000
  GibHealth -1000
  Radius 40
  Height 88
  Speed 6
  Scale 1.25
  Mass 15000
  
  MinMissileChance 30
  PainThreshold 45
  PainChance 90
  
  DamageFactor "Melee", 0.4
  DamageFactor "Holy", 2
  DamageFactor "Unholy", 0.05
  
  SeeSound "abominant/sight"
  ActiveSound "abominant/active"
  PainSound "abominant/pain"
  DeathSound "abominant/death"
  CrushPainSound "rlmonsters/crush"
  
  +DONTFALL
  +FLOAT
  +NOGRAVITY
  +QUICKTORETALIATE
  +LOOKALLAROUND
  
  Species "RLPainElemental"
  Obituary "%o couldn't handle an Abominant."
  HitObituary "%o was smashed apart by an Abominant."
  Tag "Abominant"
    //$category "MP Armageddon"
  
	DropItem "RLAbominantDrop"
	// Guncaster compatibility
	DropItem "TreasureChest"
	DropItem "TreasureChest"
	DropItem "TreasureChest"
  
  var int user_seekerdetonationtimer;
  var int user_gravitypulsecharge;
  var int user_dodgetimer;
  var int user_dodgedirection;
  States
  {
  Spawn:
    ABOM AAA Random(1,2) A_Look
    Loop
	
  See:
    ABOM AAAAAAAA 1 A_Chase ("", "PreMissile")
    ABOM AAAAAAAA 1 A_Chase ("", "PreMissile")
    ABOM BBBBBBBB 1 A_Chase ("", "PreMissile")
    ABOM CCCCCCCC 1 A_Chase ("", "Missile")
    ABOM DDDDDDDD 1 A_Chase ("", "Missile")
    Loop
	
  PreMissile:
    ABOM CC 4 A_FaceTarget
    TNT1 A 0 A_Jump (256, "Missile")
	Goto Missile
	
  MissileProper:
    TNT1 A 0 A_PlaySound ("abominant/attack", CHAN_VOICE, 1)
    ABOM E 6 A_FaceTarget
    TNT1 A 0 A_JumpIfCloser (700, "MissileCloseRangeChoice")
    TNT1 A 0 A_JumpIfCloser (1500, "MissileMidRangeChoice")
	Goto MissileLongRangeChoice
	
  MissileLongRangeChoice: // 1500 - unlimited range
    TNT1 A 0// A_JumpIfInventory("RLAbominantAnnihilationGazeCooldown", 1, "StandardMissile")
//    TNT1 A 0 A_Jump (32, "AnnihilationGaze")
	Goto StandardMissile
	
  MissileMidRangeChoice: // 700 - 2500 range
    TNT1 A 0 A_JumpIfInventory("RLAbominantAnnihilationGazeCooldown", 1, 2)
    TNT1 A 0 A_Jump (96, "AnnihilationGaze")
    TNT1 A 0 A_JumpIfInventory("RLAbominantChargeDisperser", 1, "StandardMissile")
    TNT1 A 0 A_Jump (32, "GravityPulse")
	Goto StandardMissile
	
  MissileCloseRangeChoice: // 0 - 700 range
    TNT1 A 0 A_JumpIfInventory("RLAbominantChargeDisperser", 1, "StandardMissile")
    TNT1 A 0 A_Jump (128, "GravityPulse")
	Goto StandardMissile
	
	// Shoots a weak but fast and homing shot with immense knockback
	// Will punt you across the planet if you let it
  StandardMissile:
    TNT1 A 0 A_FaceTarget
    ABOM F 8 Bright A_CustomMissile ("RLAbominantPulse", 76, 0)
    ABOM E 6 A_FaceTarget
  StandardMissileEnd:
    ABOM BBBBBB 1 A_Chase ("", "")
    TNT1 A 0 A_Jump (30, "DodgeBegin")
    ABOM AAAAAAAA 1 A_Chase ("", "")
    Goto See
	
	// Charges up and slowly tracks the tracer, pulls you in and instakills you if you touch it
	// Won't kill you if you are careful, but the gravity will hamper your ability to dodge the fast homing normal shots
  GravityPulse:
    TNT1 A 0 A_SetUserVar("user_gravitypulsecharge", 0)
    TNT1 A 0 A_ChangeFlag ("QUICKTORETALIATE", 0)
    TNT1 A 0 A_PlaySound ("abominant/bigpulsecharge", CHAN_WEAPON, 1, 0, 0.75)
    TNT1 A 0 A_SpawnItemEx ("RLAbominantGravityPulseCharging", 0,0,0, 0,0,0, 0, SXF_SETMASTER | SXF_NOCHECKPOSITION)
  GravityPulseCharge:
    TNT1 A 0 A_JumpIf (user_gravitypulsecharge >= 45, "GravityPulseFire")
    TNT1 A 0 A_FaceTarget
    ABOM E 1 // A_CustomRailgun (0, 0, "None", "Gold", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(-15,15), frandom(-15,15), (user_gravitypulsecharge*3)+(16+frandom(2.2,4.2)), 1, 0.2, 0, "None", 13)
    TNT1 A 0 A_FaceTarget
    ABOM F 1 Bright // A_CustomRailgun (0, 0, "None", "Gold", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(-15,15), frandom(-15,15), (user_gravitypulsecharge*3)+(16+frandom(2.2,4.2)), 1, 0.2, 0, "None", 13)
    TNT1 A 0 A_SetUserVar("user_gravitypulsecharge", user_gravitypulsecharge + 1)
    Goto GravityPulseCharge
  GravityPulseFire:
    TNT1 A 0 A_ChangeFlag ("QUICKTORETALIATE", 1)
    TNT1 A 0 A_GiveInventory("RLAbominantChargeDisperser", 1)
    TNT1 A 0 A_StopSound (CHAN_WEAPON)
    TNT1 A 0 A_SetUserVar("user_gravitypulsecharge", 0)
    ABOM F 8 Bright A_CustomMissile ("RLAbominantGravityPulse", 76, 0)
    TNT1 A 0 ThrustThing(angle*256/360+128, random(9,12), 1, 0)
    ABOM E 1 A_SpawnItemEx ("RLAbominantAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_NOCHECKPOSITION)
    TNT1 A 0 ThrustThing(angle*256/360+128, random(1,2), 1, 0)
    ABOM E 1 A_SpawnItemEx ("RLAbominantAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_NOCHECKPOSITION)
    TNT1 A 0 ThrustThing(angle*256/360+128, random(1,2), 1, 0)
    ABOM E 1 A_SpawnItemEx ("RLAbominantAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_NOCHECKPOSITION)
    TNT1 A 0 ThrustThing(angle*256/360+128, random(1,2), 1, 0)
    ABOM E 1 A_SpawnItemEx ("RLAbominantAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_NOCHECKPOSITION)
    TNT1 A 0 ThrustThing(angle*256/360+128, random(1,2), 1, 0)
    ABOM E 1 A_SpawnItemEx ("RLAbominantAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_NOCHECKPOSITION)
    TNT1 A 0 ThrustThing(angle*256/360+128, random(1,2), 1, 0)
    ABOM E 1 A_SpawnItemEx ("RLAbominantAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_NOCHECKPOSITION)
    TNT1 A 0 ThrustThing(angle*256/360+128, random(1,2), 1, 0)
    ABOM B 1 A_SpawnItemEx ("RLAbominantAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_NOCHECKPOSITION)
    TNT1 A 0 ThrustThing(angle*256/360+128, random(1,2), 1, 0)
    ABOM B 1 A_SpawnItemEx ("RLAbominantAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_NOCHECKPOSITION)
    TNT1 A 0 ThrustThing(angle*256/360+128, random(1,2), 1, 0)
    ABOM B 1 A_SpawnItemEx ("RLAbominantAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_NOCHECKPOSITION)
    TNT1 A 0 ThrustThing(angle*256/360+128, random(1,2), 1, 0)
    ABOM B 1 A_SpawnItemEx ("RLAbominantAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_NOCHECKPOSITION)
    TNT1 A 0 ThrustThing(angle*256/360+128, random(1,2), 1, 0)
    ABOM B 1 A_SpawnItemEx ("RLAbominantAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_NOCHECKPOSITION)
    TNT1 A 0 ThrustThing(angle*256/360+128, random(1,2), 1, 0)
    ABOM B 1 A_SpawnItemEx ("RLAbominantAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_NOCHECKPOSITION)
    TNT1 A 0 A_Stop
    Goto DodgeBegin
	
	// Emits nonsolid blasts into you that travel ahead of where you are moving and then detonates in your face
	// Has a chance of firing less in a row, but won't fire more than 5
	
	// Axed, couldn't do it
/*  PredictiveBlasts:
    TNT1 A 0 A_FaceTarget
    ABOM F 8 Bright A_CustomMissile ("RLAbominantPredictiveBlast", 76, 0)
    ABOM E 6 A_FaceTarget
    TNT1 A 0 A_Jump (50, "StandardMissileEnd")
    ABOM F 8 Bright A_CustomMissile ("RLAbominantPredictiveBlast", 76, 0)
    ABOM E 6 A_FaceTarget
    TNT1 A 0 A_Jump (50, "StandardMissileEnd")
    ABOM F 8 Bright A_CustomMissile ("RLAbominantPredictiveBlast", 76, 0)
    ABOM E 6 A_FaceTarget
    TNT1 A 0 A_Jump (50, "StandardMissileEnd")
    ABOM F 8 Bright A_CustomMissile ("RLAbominantPredictiveBlast", 76, 0)
    ABOM E 6 A_FaceTarget
    TNT1 A 0 A_Jump (50, "StandardMissileEnd")
    ABOM F 8 Bright A_CustomMissile ("RLAbominantPredictiveBlast", 76, 0)
    ABOM E 6 A_FaceTarget
	Goto StandardMissileEnd*/
	
	// Fires a spread of radiant energy bursts that stick to walls and floors that push you away and damage you when you near them
	// This renders entire areas inaccessible for dodging, making it easier for the Abominant to crush you
	
	// Axed because it's just weird. Also super duper loud.
/*  Scattershot:
    TNT1 A 0 A_GiveInventory("RLAbominantScattershotCooldown", 1)
    TNT1 A 0 A_FaceTarget
    ABOM FFFFFFFFFFFFFFFFFFFF 0 A_CustomMissile ("RLAbominantScattershot", 76, 0, frandom(-30.0,30.0), CMF_OFFSETPITCH, frandom(-30.0,30.0))
    ABOM F 8 Bright
	Goto StandardMissileEnd*/
	
	// Basically, an arch-vile attack
	// Designed to stop people just circle-strafing the toughest boss in the game to death
  AnnihilationGaze:
    TNT1 A 0 A_JumpIf(CheckClass("PlayerPawn", AAPTR_TARGET, TRUE), 1) // Only uses the gaze beam on players because they're dicks
	Goto StandardMissile
    TNT1 A 0 A_SetUserVar("user_seekerdetonationtimer", 0)
    TNT1 A 0 A_SpawnItemEx ("RLAbominantAnnihilationGazeRing", 8,0,76, 0,0,0, 0, SXF_SETMASTER | SXF_NOCHECKPOSITION)
    TNT1 A 0 A_PlaySound ("abominant/gazecharge", CHAN_WEAPON, 1, 0, 0.45)
	TNT1 A 0 A_VileTarget ("RLAbominantAnnihilationGazeTracer")
  AnnihilationGazeLoop:
    TNT1 A 0 A_JumpIf (user_seekerdetonationtimer >= 33, "AnnihilationGazeActivate")
    TNT1 A 0 A_FaceTarget
    TNT1 A 0 A_SpawnItemEx ("RLAbominantRadiantSparks", 8,0,76, 0,0,0, 0, SXF_NOCHECKPOSITION)
    ABOM F 1 Bright A_FaceTarget
    TNT1 A 0 A_SpawnItemEx ("RLAbominantRadiantSparks", 8,0,76, 0,0,0, 0, SXF_NOCHECKPOSITION)
    ABOM E 1 A_FaceTarget
    TNT1 A 0 A_SetUserVar("user_seekerdetonationtimer", user_seekerdetonationtimer + 1)
    Goto AnnihilationGazeLoop
  AnnihilationGazeActivate:
    TNT1 A 0 A_FaceTarget
    TNT1 A 0 A_PlaySound ("abominant/gazefire", CHAN_WEAPON, 1, 0, 0.75)
    TNT1 A 0 A_PlaySound ("abominant/gazefire", 7, 1, 0, 0.75)
    TNT1 AAA 0 A_CustomRailgun (0, 0, "None", "Gold", RGF_FULLBRIGHT | RGF_SILENT | RGF_CENTERZ, 1, 15, "RLCacobyssLightningPuff2", 0, 0, 4000, 3, 1, 0.1, 0, 32) 
	TNT1 A 0 A_VileAttack ("", 50, 50, 128, 2.5, "Radiant", VAF_DMGTYPEAPPLYTODIRECT)
    TNT1 A 0 A_SpawnItemEx ("RLAbominantAnnihilationGazeImpact", 8,0,76, 0,0,0, 0, SXF_NOCHECKPOSITION)
    ABOM F 8 Bright A_FaceTarget
    ABOM E 6 A_FaceTarget
    Goto StandardMissileEnd
	
  PainMain:
    TNT1 A 0 A_ChangeFlag ("QUICKTORETALIATE", 1)
    TNT1 A 0 A_GiveInventory("RLAbominantChargeDisperser", 1)
    TNT1 A 0 A_GiveInventory("RLAbominantInterrupt", 1)
    TNT1 A 0 A_Stop
    TNT1 A 0 ACS_NamedExecuteAlways("DRLA_BossPainCheck", 0)
    ABOM G 1
    ABOM G 15 A_Pain
    TNT1 A 0 A_Jump (85, "DodgeBegin")
    Goto See
	
  DodgeBegin:
    TNT1 A 0 A_PlaySound ("abominant/dodge", 7)
    TNT1 A 0 A_SetUserVar("user_dodgedirection", random(0,1))
    TNT1 A 0 A_JumpIf (user_dodgedirection == 1, "DodgeRightBegin")
  DodgeLeftBegin:
    TNT1 A 0 ThrustThing(angle*256/360+192, random(1,2), 1, 0)
    TNT1 A 0 A_FaceTarget (360, 90)
    TNT1 A 0 A_SetUserVar("user_dodgetimer", random(10,40))
	Goto DodgeLoop
  DodgeRightBegin:
    TNT1 A 0 ThrustThing(angle*256/360+64, random(1,2), 1, 0)
    TNT1 A 0 A_FaceTarget (360, 90)
    TNT1 A 0 A_SetUserVar("user_dodgetimer", random(10,40))
	Goto DodgeLoop
	
  DodgeLoop:
    TNT1 A 0 A_JumpIf (user_dodgetimer <= 0, "DodgeEnd")
    TNT1 A 0 A_JumpIf (user_dodgedirection == 1, "DodgeRight")
  DodgeLeft:
    TNT1 A 0 ThrustThing(angle*256/360+192, random(1,2), 1, 0)
	Goto DodgeContinue
  DodgeRight:
    TNT1 A 0 ThrustThing(angle*256/360+64, random(1,2), 1, 0)
	Goto DodgeContinue
  DodgeContinue:
    TNT1 A 0 A_FaceTarget (360, 90)
    ABOM A 1 A_SpawnItemEx ("RLAbominantAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_NOCHECKPOSITION)
    TNT1 A 0 A_SetUserVar("user_dodgetimer", user_dodgetimer - 1)
	Goto DodgeLoop
  DodgeEnd:
    TNT1 A 0 A_Stop
    TNT1 A 0 A_Jump (85, 1)
    Goto See
    TNT1 A 0 A_SetUserVar("user_dodgetimer", random(10,40))
    TNT1 A 0 A_JumpIf (user_dodgedirection == 1, 2)
    TNT1 A 0 A_SetUserVar("user_dodgedirection", 1)
    Goto DodgeLoop
    TNT1 A 0 A_SetUserVar("user_dodgedirection", 0)
    Goto DodgeLoop
	
  DeathMain:
    TNT1 A 0 A_GiveInventory ("RLAbominantKillIncrementer", 1, AAPTR_PLAYER1) // Used for tallying total kills and bestiary info
    TNT1 A 0 A_ChangeFlag ("QUICKTORETALIATE", 1)
    TNT1 A 0 A_GiveInventory("RLAbominantChargeDisperser", 1)
    TNT1 A 0 A_Stop
    ABOM H 4
    ABOM H 35 A_Scream
    ABOM IJJJ 4
    TNT1 A 0 A_NoBlocking
    TNT1 A 0 A_SpawnItemEx ("RLGibber", 0,0,0, VelX,VelY,VelZ, 0, SXF_ABSOLUTEMOMENTUM | SXF_USEBLOODCOLOR | SXF_NOCHECKPOSITION)
    TNT1 A 0 A_PlaySound("rlmonsters/largeexp", 6, 1, 0, 0.7)
    TNT1 A 0 A_CustomMissile("RLAgonyElementalExplosion",32,0)
	TNT1 A 0 A_JumpIf(CallACS("DRLA_MonsterQuake") == 0, 3)
    TNT1 A 0 A_Quake(1, 36, 0, 1024, "")
    TNT1 A 0 A_Quake(5, 12, 0, 128, "")
    ABOM K 8 Bright
    TNT1 A 0 A_SpawnItemEx ("RLGibber", 0,0,0, VelX,VelY,VelZ, 0, SXF_ABSOLUTEMOMENTUM | SXF_USEBLOODCOLOR | SXF_NOCHECKPOSITION)
    ABOM L 8 Bright
    TNT1 A 0 A_SpawnItemEx ("RLGibber", 0,0,0, VelX,VelY,VelZ, 0, SXF_ABSOLUTEMOMENTUM | SXF_USEBLOODCOLOR | SXF_NOCHECKPOSITION)
    ABOM MNOP 8 Bright
    TNT1 A 30
    TNT1 A 0 A_BossDeath
    "####" "#" 0 A_Jump(256, "DestroyedEnd")
    Goto DestroyedEnd
  DeathFrame:
    TNT1 A 0 A_BossDeath
    "####" "#" 0 A_Jump(256, "DestroyedEnd")
    Goto DestroyedEnd
	
	//Ice
  GenericFreezeDeath:
	"####" "#" 0 A_GiveInventory ("RLAbominantKillIncrementer", 1, AAPTR_PLAYER1) // Used for tallying total kills and bestiary info
    "####" "#" 0 A_Jump(256, "GenericFreezeMana")
    Goto GenericFreezeMana
	
  Raise:
    Stop
	
  CrushDRLA:
    TNT1 A 0 A_GiveInventory("RLAbominantChargeDisperser", 1)
    TNT1 A 30 A_SpawnItemEx("RLCrushedLarge",0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    "####" "#" 0 A_BossDeath
    "####" "#" 0 A_Jump(256, "CrushEnd")
    Goto CrushEnd
//==============================================================================
//					--	DOOMRL ARSENAL STUFF  --
//==============================================================================
  Pain.RigelBlast:
    TNT1 A 0 A_PlaySound("weapons/dn2gunhit", CHAN_BODY)
    D2F2 Z 2 Bright
    Goto See
  Pain.NeuralStun:
    D2F2 Z 2 Bright
    Goto See
	
  Death.NeuralStun:
    TNT1 A 0
    Goto Death
  XDeath.RigelBlast:
  Death.RigelBlast:
    TNT1 A 0 A_GiveInventory ("RLDuke2Score", 100000, AAPTR_TARGET)
    TNT1 A 0 A_GiveInventory ("RLAbominantKillIncrementer", 1, AAPTR_PLAYER1) // Used for tallying total kills and bestiary info
    TNT1 A 0 A_ChangeFlag ("QUICKTORETALIATE", 1)
    TNT1 A 0 A_GiveInventory("RLAbominantChargeDisperser", 1)
    TNT1 A 0 A_Stop
    TNT1 A 0 A_PlaySound("weapons/dn2gunbigexplosion", 7, 1, 0, 0.3)
    TNT1 A 0 A_NoBlocking
    TNT1 A 0 A_SetUserVar("user_dn2bossexplosiontimer", 80)
  DN2BossExplosionLoop:
    TNT1 A 0 A_JumpIf (user_dn2bossexplosiontimer <= 0, "DN2BossExplosionFinish")
    TNT1 A 0 A_Jump(190, 2)
    TNT1 A 0 A_RadiusGive ("RLDN2BossFlash", 768, RGF_PLAYERS, 1)
	TNT1 A 0 A_JumpIf(CallACS("DRLA_MonsterQuake") == 0, 2)
    TNT1 A 0 A_Quake(4, 2, 0, 768, "")
    ABOM G 1 Bright
    TNT1 A 0 A_Jump(150, 2)
    TNT1 A 0 A_PlaySound("weapons/dn2gunbigexplosion", 7, 1, 0, 0.3)
    TNT1 A 0 A_Jump(100, 2)
    TNT1 A 0 A_SpawnItemEx ("RLDuke2RandomExplosion", frandom(-64,64),frandom(-64,64),frandom(4,90), 0,0,0, 0, SXF_NOCHECKPOSITION)
    TNT1 A 1
    TNT1 A 0 A_SpawnItemEx ("RLDuke2RandomExplosion", frandom(-64,64),frandom(-64,64),frandom(4,90), 0,0,0, 0, SXF_NOCHECKPOSITION)
    TNT1 A 0 A_SetUserVar("user_dn2bossexplosiontimer", user_dn2bossexplosiontimer - 1)
    Goto DN2BossExplosionLoop
  DN2BossExplosionFinish:
    TNT1 A 0 A_RadiusGive ("RLDN2BossFlash2", 1560, RGF_PLAYERS, 1)
	TNT1 A 0 A_JumpIf(CallACS("DRLA_MonsterQuake") == 0, 2)
    TNT1 A 0 A_Quake(9, 15, 0, 1560, "")
    TNT1 A 0 A_FaceTarget
    TNT1 A 0 A_PlaySound("weapons/dn2gunbigexplosion", 7, 1, 0, 0)
//    TNT1 A 0 A_SpawnItemEx ("RLDuke2BossExplosion", 0,0,48, 0,0,0, 0, SXF_NOCHECKPOSITION)
    TNT1 A 0 A_SpawnItemEx ("RLDuke2ShockwaveLeft", 0,12,48, 0,14,0, 0, SXF_NOCHECKPOSITION)
    TNT1 A 0 A_SpawnItemEx ("RLDuke2ShockwaveRight", 0,-12,48, 0,-14,0, 0, SXF_NOCHECKPOSITION)
    TNT1 A 35
    TNT1 A 0 A_BossDeath
    TNT1 A -1
	Stop
	
//==============================================================================
//					--	Special Monster Attacks  --
//==============================================================================
  ShadowAuraMissileAttack:
    TNT1 A 0 A_PlaySound ("abominant/attack", CHAN_VOICE, 1)
    ABOM E 6 A_FaceTarget
    TNT1 A 0 A_JumpIfInventory("RLAbominantChargeDisperser", 1, 2)
    TNT1 A 0 A_Jump (128, "GravityPulse")
    TNT1 A 0 A_FaceTarget
    TNT1 A 0 A_CustomMissile ("RLAbominantPulse", 76, 0, 15)
    TNT1 A 0 A_CustomMissile ("RLAbominantPulse", 76, 0, -15)
    ABOM F 8 Bright A_CustomMissile ("RLAbominantPulse", 76, 0)
    ABOM E 6 A_FaceTarget
    ABOM BBBBBB 1 A_Chase ("", "")
    TNT1 A 0 A_Jump (30, "DodgeBegin")
    ABOM AAAAAAAA 1 A_Chase ("", "")
    Goto See
	
  LegendaryAttack:
    TNT1 A 0 A_PlaySound ("abominant/attack", CHAN_VOICE, 1)
    ABOM E 6 A_FaceTarget
    TNT1 A 0 A_JumpIfInventory("RLAbominantChargeDisperser", 1, 2)
    TNT1 A 0 A_Jump (32, "GravityPulse")
    TNT1 A 0 A_FaceTarget
    ABOM FFFF 2 Bright A_CustomMissile ("RLAbominantPulse", 76, 0, frandom(-10,10), CMF_OFFSETPITCH, frandom(-10,10))
    ABOM E 6 A_FaceTarget
    ABOM BBBBBB 1 A_Chase ("", "")
    TNT1 A 0 A_Jump (256, "DodgeBegin")
    ABOM AAAAAAAA 1 A_Chase ("", "")
    Goto See

//==============================================================================
//					--	Final Doomer Compatibility Stuff  --
//==============================================================================
  DeathXSparkFrame:
    "####" "#" 0 A_JumpIfInTargetInventory("Mana",0,2)
    "####" "#" 0 A_DropItem("MajorManaPod",-1,54)
    ABOM G 0 A_BossDeath
    "####" "#" 0 A_Jump(256, "DeathXSpark")
	Goto DeathXSpark
	
//==============================================================================
//					--	Guncaster Compatibility Stuff  --
//==============================================================================
	MidasFrame1:
		ABOM G 0 A_SpawnItemEx("Midas_Statue_Cyberdemon", 0,0,0, 0,0,0, 0,SXF_TRANSFERPOINTERS|SXF_TRANSFERSPRITEFRAME)
		TNT1 A 0 A_JumpIf(1, "DestroyedEnd")
		Goto DestroyedEnd
	MidasFrame2:
		ABOM G 0 A_SpawnItemEx("Midas_Statue_Cyberdemon", 0,0,0, frandom(-10.0,-12.0),0,frandom(1.0,3.0), 0,SXF_TRANSFERPOINTERS|SXF_SETMASTER|SXF_TRANSFERSPRITEFRAME)
		TNT1 A 10 A_KillChildren
		TNT1 A 0 A_JumpIf(1, "DestroyedEnd")
		Goto DestroyedEnd
	MidasFrame3:
		ABOM G 0 A_SpawnItemEx("Midas_Statue_Cyberdemon", 0,0,0, frandom(-15.0,-20.0),0,frandom(10.0,15.0), 0,SXF_TRANSFERPOINTERS|SXF_SETMASTER|SXF_TRANSFERSPRITEFRAME)
		TNT1 A 10 A_KillChildren
		TNT1 A 0 A_JumpIf(1, "DestroyedEnd")
		Goto DestroyedEnd
		
	//Gumpop
	Death.Acid:
		ABOM G 1 A_ChangeFlag("SOLID",0)
		"####" "#" 1 A_Playsound("Gumpop/Expand",5)
		"####" "###################################" 1 A_SetScale(ScaleX+frandom(0.01,0.025))
		"####" "#" 1 A_Playsound("Gumpop/Pop",5)
		"####" "#" 0 A_Jump(256,"XDeathMain")
		Goto XDeathMain
		
	//Thunderstruck
	Pain.Lightning:
		"####" "#" 0 A_Jump(164,1)
		Goto Pain
		ABOM G 0 A_ChangeFlag("NOPAIN",1)
		"####" "#" 0 A_SetUserVar("User_LightningLock", User_LightningLock + 10)
		"####" "#" 0 A_Jump(256,"LightningLock")
		Goto LightningLock
		
	//Cauterizer
	Pain.LightningBlue:
		"####" "#" 0 A_Jump(48,1)
		Goto Pain
		ABOM G 0 A_ChangeFlag("NOPAIN",1)
		"####" "#" 0 A_SetUserVar("User_LightningLock", User_LightningLock + 10)
		"####" "#" 0 A_Jump(256,"BlueLightningLock")
		Goto BlueLightningLock
		
		// Overwrite these for monsters that do not leave corpses behind
	//Dreadful
	Death.Tiberium:
		"####" "#" 0 A_Jump(256, "Death")
		Goto Death
	Death.BlueTiberium:
		"####" "#" 0 A_Jump(256, "Death")
		Goto Death
	//Fire and Lightning
	Death.Fire:
		"####" "#" 0 A_Jump(256,"Death")
		Goto Death
  }
}

ACTOR RLAbominantPulse
{
   Radius 6
   Height 8
   Speed 24
   FastSpeed 48
   Projectile
   +NOTIMEFREEZE
   +THRUGHOST
   +SEEKERMISSILE
   +HITTRACER
   +BLOODSPLATTER
   RenderStyle Add
   Alpha 0.98
   Scale 0.5
   DamageType "Radiant"
   Damage (random(7,8) * 3)
   SeeSound "abominant/pulse"
   States
   {
   Spawn:
    TNT1 A 0
    TNT1 A 0 A_PlaySound ("abominant/pulseloop", 6, 0.5, 1, 0.8)
    ABOX A 1 Bright A_SpawnItemEx ("RLAbominantPulseTrail", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    TNT1 A 0 A_SpawnItemEx ("RLAbominantPulseTrail", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    ABOX A 1 Bright A_SeekerMissile (4, 4, SMF_PRECISE)
    TNT1 A 0 A_JumpIfTargetInLOS (1, 110, JLOSF_PROJECTILE)
    Goto NoSeek
    ABOX B 1 Bright A_SpawnItemEx ("RLAbominantPulseTrail", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    TNT1 A 0 A_SpawnItemEx ("RLAbominantPulseTrail", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    ABOX B 1 Bright A_SeekerMissile (4, 4, SMF_PRECISE)
    TNT1 A 0 A_JumpIfTargetInLOS (1, 110, JLOSF_PROJECTILE)
    Goto NoSeek
    ABOX C 1 Bright A_SpawnItemEx ("RLAbominantPulseTrail", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    TNT1 A 0 A_SpawnItemEx ("RLAbominantPulseTrail", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    ABOX C 1 Bright A_SeekerMissile (4, 4, SMF_PRECISE)
    TNT1 A 0 A_JumpIfTargetInLOS (1, 110, JLOSF_PROJECTILE)
    Goto NoSeek
    ABOX D 1 Bright A_SpawnItemEx ("RLAbominantPulseTrail", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    TNT1 A 0 A_SpawnItemEx ("RLAbominantPulseTrail", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    ABOX D 1 Bright A_SeekerMissile (4, 4, SMF_PRECISE)
    TNT1 A 0 A_JumpIfTargetInLOS (1, 110, JLOSF_PROJECTILE)
    Goto NoSeek
    ABOX E 1 Bright A_SpawnItemEx ("RLAbominantPulseTrail", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    TNT1 A 0 A_SpawnItemEx ("RLAbominantPulseTrail", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    ABOX E 1 Bright A_SeekerMissile (4, 4, SMF_PRECISE)
    TNT1 A 0 A_JumpIfTargetInLOS ("Spawn", 110, JLOSF_PROJECTILE)
    Goto NoSeek
   NoSeek:
    TNT1 A 0 A_PlaySound ("abominant/pulseloop", 6, 0.5, 1, 0.8)
    ABOX AABBCCDDEE 1 Bright A_SpawnItemEx ("RLAbominantPulseTrail", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    Goto NoSeek
   Death:
    TNT1 A 0 A_GiveInventory ("RLAbominantRadiantDamage", 1, AAPTR_TRACER)
    TNT1 A 0 A_PlaySound ("abominant/pulseimpact", 7, 1, 0, 0.8)
    TNT1 A 0 A_StopSound (6)
    TNT1 A 0 A_SetScale (2.0)
    TNT1 A 0 A_Explode (64, 128, 0)
    TNT1 A 0 A_RadiusThrust (20000, 64, RTF_NOIMPACTDAMAGE)
    TNT1 A 0 A_RadiusThrust (2500, 128, RTF_NOIMPACTDAMAGE)
    TNT1 A 0 A_RadiusThrust (1500, 192, RTF_NOIMPACTDAMAGE)
    TNT1 A 0 A_RadiusThrust (500, 384, RTF_NOIMPACTDAMAGE)
	TNT1 A 0 A_JumpIf(CallACS("DRLA_MonsterQuake") == 0, "DeathLoop")
    TNT1 A 0 A_Quake(1, 12, 0, 256, "")
    TNT1 A 0 A_Quake(3, 6, 0, 128, "")
   DeathLoop:
    TNT1 A 0 A_SetScale (scalex-0.06)
    ABOX J 1 Bright A_FadeTo (0, 0.04, 1)
    TNT1 A 0 A_SetScale (scalex-0.06)
    ABOX K 1 Bright A_FadeTo (0, 0.04, 1)
    TNT1 A 0 A_SetScale (scalex-0.06)
    ABOX L 1 Bright A_FadeTo (0, 0.04, 1)
    TNT1 A 0 A_SetScale (scalex-0.06)
    ABOX M 1 Bright A_FadeTo (0, 0.04, 1)
    Loop
   }
}

ACTOR RLAbominantPulseTrail
{
   Radius 4
   Height 4
   RenderStyle Add
   Alpha 0.95
   Scale 0.5
   +NOGRAVITY
   +NOCLIP
   +NOINTERACTION
   +NOTONAUTOMAP
   +NOTIMEFREEZE
   States
   {
   Spawn:
    ABOX FFFFFFGGGGGGHHHHHHIIIIII 1 Bright A_FadeTo (0, 0.04, 1)
    Stop
   }
}

ACTOR RLAbominantGravityPulse
{
   Radius 6
   Height 8
   Speed 5
   FastSpeed 8
   Projectile
   +NOTIMEFREEZE
   +THRUACTORS
   +THRUGHOST
   +SEEKERMISSILE
   +EXTREMEDEATH
   +BLOODSPLATTER
   RenderStyle Add
   Alpha 0.99
   Scale 1.0
   DamageType "Piercing"
   Damage (5)
  
  var int user_gravitypulseframe;
  var int user_gravitypulsetimer;
   States
   {
   Spawn:
    TNT1 A 0
    TNT1 A 0 A_PlaySound ("abominant/bigpulse", 6, 1, 0, 0.5)
    TNT1 A 0 A_SetUserVar("user_gravitypulsetimer", 175)
   SpawnLoop:
    TNT1 A 0 A_JumpIf (user_gravitypulsetimer <= 0, "DeathNoImpact")
    TNT1 A 0 A_SetUserVar("user_gravitypulsetimer", user_gravitypulsetimer - 1)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "White", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), 128+frandom(0.0,128.0), 1, 0.2, 0, "None", -11)
    TNT1 A 0 A_SeekerMissile (90, 90, SMF_PRECISE)
    TNT1 A 0 A_SetScale (frandom(0.8,1.2))
    TNT1 A 0 A_Explode (10, 100, 0, 0, 100)
    TNT1 A 0 A_Explode (1, 128, 0, 0, 128)
    TNT1 A 0 A_RadiusThrust (-100, 160, RTF_NOIMPACTDAMAGE)
    TNT1 A 0 A_RadiusThrust (-10, 320, RTF_NOIMPACTDAMAGE)
    TNT1 A 0 A_RadiusThrust (-20, 480, RTF_NOIMPACTDAMAGE)
    TNT1 A 0 A_RadiusThrust (-40, 640, RTF_NOIMPACTDAMAGE)
    TNT1 A 0 A_RadiusThrust (-80, 1280, RTF_NOIMPACTDAMAGE)
    TNT1 A 0 A_RadiusThrust (-160, 2560, RTF_NOIMPACTDAMAGE)
	TNT1 A 0 A_JumpIf(CallACS("DRLA_MonsterQuake") == 0, 4)
    TNT1 A 0 A_Quake(1, 1, 0, 2560, "")
    TNT1 A 0 A_Quake(2, 1, 0, 640, "")
    TNT1 A 0 A_Quake(9, 1, 0, 128, "")
    TNT1 A 0 A_JumpIf (user_gravitypulseframe == 3, "SpawnFrame4")
    TNT1 A 0 A_JumpIf (user_gravitypulseframe == 2, "SpawnFrame3")
    TNT1 A 0 A_JumpIf (user_gravitypulseframe == 1, "SpawnFrame2")
	Goto SpawnFrame1
   SpawnFrame1:
    TNT1 A 0 A_SetUserVar("user_gravitypulseframe", 1)
    ABOX N 1 Bright A_SpawnItemEx ("RLAbominantBrightAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_TRANSFERSCALE | SXF_NOCHECKPOSITION)
    Goto SpawnLoop
   SpawnFrame2:
    TNT1 A 0 A_SetUserVar("user_gravitypulseframe", 2)
    ABOX O 1 Bright A_SpawnItemEx ("RLAbominantBrightAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_TRANSFERSCALE | SXF_NOCHECKPOSITION)
    Goto SpawnLoop
   SpawnFrame3:
    TNT1 A 0 A_SetUserVar("user_gravitypulseframe", 3)
    ABOX P 1 Bright A_SpawnItemEx ("RLAbominantBrightAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_TRANSFERSCALE | SXF_NOCHECKPOSITION)
    Goto SpawnLoop
   SpawnFrame4:
    TNT1 A 0 A_SetUserVar("user_gravitypulseframe", 0)
    ABOX Q 1 Bright A_SpawnItemEx ("RLAbominantBrightAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_TRANSFERSCALE | SXF_NOCHECKPOSITION)
    Goto SpawnLoop
	
   DeathNoImpact:
    TNT1 A 0 A_Stop
	Goto DeathLoop
   Death:
    TNT1 A 0 A_PlaySound ("abominant/bigpulseend", 6, 1, 0, 0.5)
    TNT1 A 0 A_Stop
	Goto DeathLoop
   DeathLoop:
    TNT1 A 0 A_SetScale (scalex-0.01)
    ABOX N 1 Bright A_FadeTo (0, 0.02, 1)
    TNT1 A 0 A_SetScale (scalex-0.01)
    ABOX O 1 Bright A_FadeTo (0, 0.02, 1)
    TNT1 A 0 A_SetScale (scalex-0.01)
    ABOX P 1 Bright A_FadeTo (0, 0.02, 1)
    TNT1 A 0 A_SetScale (scalex-0.01)
    ABOX Q 1 Bright A_FadeTo (0, 0.02, 1)
    Loop
   }
}

ACTOR RLAbominantGravityPulseCharging
{
   Radius 4
   Height 4
   RenderStyle Add
   Alpha 0.02
   Scale 0.02
   +NOGRAVITY
   +NOCLIP
   +NOTONAUTOMAP
   +NOTIMEFREEZE
  
  var int user_lightningscaler;
   States
   {
   Spawn:
    TNT1 A 0
    TNT1 A 0 A_JumpIfInventory ("RLAbominantChargeDisperser", 1, "PEW", AAPTR_MASTER)
    TNT1 A 0 A_SetUserVar("user_lightningscaler", user_lightningscaler + 8)
    TNT1 A 0 A_Warp (AAPTR_MASTER, 8, 0, 76, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "White", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), user_lightningscaler+random(0,32), 1, 0.2, 0, "None", -11)
    TNT1 A 0 A_RadiusThrust (-(user_lightningscaler/8), 1280, RTF_NOIMPACTDAMAGE)
    TNT1 A 0 A_JumpIf (scalex >= 1.0, 2)
    TNT1 A 0 A_SetScale (scalex+0.015)
    TNT1 A 0 A_FadeTo (1, 0.02, 0)
    ABOX N 1 Bright A_SpawnItemEx ("RLAbominantBrightAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_TRANSFERSCALE | SXF_NOCHECKPOSITION)
    TNT1 A 0 A_JumpIfInventory ("RLAbominantChargeDisperser", 1, "PEW", AAPTR_MASTER)
    TNT1 A 0 A_SetUserVar("user_lightningscaler", user_lightningscaler + 8)
    TNT1 A 0 A_Warp (AAPTR_MASTER, 8, 0, 76, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "White", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), user_lightningscaler+random(0,32), 1, 0.2, 0, "None", -11)
    TNT1 A 0 A_RadiusThrust (-(user_lightningscaler/8), 1280, RTF_NOIMPACTDAMAGE)
    TNT1 A 0 A_JumpIf (scalex >= 1.0, 2)
    TNT1 A 0 A_SetScale (scalex+0.015)
    TNT1 A 0 A_FadeTo (1, 0.02, 0)
    ABOX O 1 Bright A_SpawnItemEx ("RLAbominantBrightAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_TRANSFERSCALE | SXF_NOCHECKPOSITION)
    TNT1 A 0 A_JumpIfInventory ("RLAbominantChargeDisperser", 1, "PEW", AAPTR_MASTER)
    TNT1 A 0 A_SetUserVar("user_lightningscaler", user_lightningscaler + 8)
    TNT1 A 0 A_Warp (AAPTR_MASTER, 8, 0, 76, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "White", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), user_lightningscaler+random(0,32), 1, 0.2, 0, "None", -11)
    TNT1 A 0 A_RadiusThrust (-(user_lightningscaler/8), 1280, RTF_NOIMPACTDAMAGE)
    TNT1 A 0 A_JumpIf (scalex >= 1.0, 2)
    TNT1 A 0 A_SetScale (scalex+0.015)
    TNT1 A 0 A_FadeTo (1, 0.02, 0)
    ABOX P 1 Bright A_SpawnItemEx ("RLAbominantBrightAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_TRANSFERSCALE | SXF_NOCHECKPOSITION)
    TNT1 A 0 A_JumpIfInventory ("RLAbominantChargeDisperser", 1, "PEW", AAPTR_MASTER)
    TNT1 A 0 A_SetUserVar("user_lightningscaler", user_lightningscaler + 8)
    TNT1 A 0 A_Warp (AAPTR_MASTER, 8, 0, 76, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "White", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), user_lightningscaler+random(0,32), 1, 0.2, 0, "None", -11)
    TNT1 A 0 A_RadiusThrust (-(user_lightningscaler/8), 1280, RTF_NOIMPACTDAMAGE)
    TNT1 A 0 A_JumpIf (scalex >= 1.0, 2)
    TNT1 A 0 A_SetScale (scalex+0.015)
    TNT1 A 0 A_FadeTo (1, 0.02, 0)
    ABOX Q 1 Bright A_SpawnItemEx ("RLAbominantBrightAfterImage", 0,0,0, 0,0,0, 0, SXF_TRANSFERSPRITEFRAME | SXF_TRANSFERSCALE | SXF_NOCHECKPOSITION)
    Loop
   PEW:
    TNT1 A 0
    Stop
   }
}

// No longer used, left it here for anyone who likes reading this kinda shit
ACTOR RLAbominantScattershot : RLAbominantPulse
{
   Speed 26
   FastSpeed 28
   -SEEKERMISSILE
   -HITTRACER
   -NOGRAVITY
   +THRUACTORS
   Gravity 0.7
   Alpha 0.98
   Scale 0.2
   DamageType "Radiant"
   Damage (0)
   SeeSound "abominant/pulse"
  
  var int user_scattertimer;
   States
   {
   Spawn:
    TNT1 A 0
    ABOX F 1 Bright A_SpawnItemEx ("RLAbominantPulseTrail", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION | SXF_TRANSFERSCALE)
    Loop
   Death:
    TNT1 A 0 A_SetUserVar("user_scattertimer", random(500,525))
    TNT1 A 0 A_PlaySound ("abominant/pulseloop", 6, 0.5, 1, 0.8)
    TNT1 A 0 A_ChangeFlag ("NOGRAVITY", 1)
    TNT1 A 0 A_Warp (AAPTR_DEFAULT, 0,0,8, 0, WARPF_NOCHECKPOSITION)
   DeathLoop:
    ABOX I 1 Bright A_SpawnItemEx ("RLAbominantScattershotGlow", frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2), frandom(-0.1,0.1),frandom(-0.1,0.1),frandom(0.1,0.3), 0, SXF_NOCHECKPOSITION | SXF_TRANSFERSCALE | SXF_TRANSFERALPHA)
    TNT1 A 0 A_SetScale (frandom(1.0,1.3),frandom(1.0,1.3))
    TNT1 A 0 A_FadeTo (frandom(0.7,0.98), 0.1, 0)
    TNT1 A 0 A_Explode (5, 128, 0)
    TNT1 A 0 A_RadiusThrust (480, 32, RTF_NOIMPACTDAMAGE)
    TNT1 A 0 A_RadiusThrust (240, 64, RTF_NOIMPACTDAMAGE)
    TNT1 A 0 A_RadiusThrust (120, 96, RTF_NOIMPACTDAMAGE)
    TNT1 A 0 A_RadiusThrust (60, 128, RTF_NOIMPACTDAMAGE)
    TNT1 A 0 A_SetUserVar("user_scattertimer", user_scattertimer - 1)
    TNT1 A 0 A_JumpIf (user_scattertimer <= 0, "Detonate")
    ABOX I 1 Bright
    TNT1 A 0 A_SetScale (frandom(1.0,1.3),frandom(1.0,1.3))
    TNT1 A 0 A_FadeTo (frandom(0.7,0.98), 0.1, 0)
    TNT1 A 0 A_SetUserVar("user_scattertimer", user_scattertimer - 1)
    TNT1 A 0 A_JumpIf (user_scattertimer <= 0, "Detonate")
    ABOX I 1 Bright
    TNT1 A 0 A_SetScale (frandom(1.0,1.3),frandom(1.0,1.3))
    TNT1 A 0 A_FadeTo (frandom(0.7,0.98), 0.1, 0)
    TNT1 A 0 A_SetUserVar("user_scattertimer", user_scattertimer - 1)
    TNT1 A 0 A_JumpIf (user_scattertimer <= 0, "Detonate")
    ABOX I 1 Bright
    TNT1 A 0 A_SetScale (frandom(1.0,1.3),frandom(1.0,1.3))
    TNT1 A 0 A_FadeTo (frandom(0.7,0.98), 0.1, 0)
    TNT1 A 0 A_SetUserVar("user_scattertimer", user_scattertimer - 1)
    TNT1 A 0 A_JumpIf (user_scattertimer <= 0, "Detonate")
    ABOX I 1 Bright
    TNT1 A 0 A_SetScale (frandom(1.0,1.3),frandom(1.0,1.3))
    TNT1 A 0 A_FadeTo (frandom(0.7,0.98), 0.1, 0)
    TNT1 A 0 A_SetUserVar("user_scattertimer", user_scattertimer - 1)
    TNT1 A 0 A_JumpIf (user_scattertimer <= 0, "Detonate")
	Loop
	
   Detonate:
    TNT1 A 0
	Stop
   }
}

ACTOR RLAbominantScattershotGlow : RLAbominantPulseTrail
{
   States
   {
   Spawn:
    ABOX FGHIHG 1 Bright A_FadeTo (0, 0.01, 1)
    Loop
   }
}
/*
ACTOR RLAbominantSeekerPulse : FastProjectile
{
   Radius 6
   Height 8
   Speed 80
   Projectile
   +NOTIMEFREEZE
   +THRUGHOST
   +SEEKERMISSILE
   +HITTRACER
   +BLOODSPLATTER
   RenderStyle Add
   Alpha 0.98
   Scale 0.5
   DamageType "Radiant"
   Damage (1)
   SeeSound "abominant/pulse"
   States
   {
   Spawn:
    TNT1 A 0
    TNT1 A 0 A_PlaySound ("abominant/pulseloop", 6, 0.5, 1, 0.8)
    TNT1 A 0 A_SpawnItemEx ("RLAbominantSeekerPulseTrail", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    AIMX A 1 Bright A_SeekerMissile (90, 90, SMF_PRECISE)
    TNT1 A 0 A_SpawnItemEx ("RLAbominantSeekerPulseTrail", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    AIMX A 1 Bright A_SeekerMissile (90, 90, SMF_PRECISE)
    TNT1 A 0 A_SpawnItemEx ("RLAbominantSeekerPulseTrail", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    AIMX B 1 Bright A_SeekerMissile (90, 90, SMF_PRECISE)
    TNT1 A 0 A_SpawnItemEx ("RLAbominantSeekerPulseTrail", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    AIMX B 1 Bright A_SeekerMissile (90, 90, SMF_PRECISE)
    Loop
   Death:
    TNT1 A 0 A_SpawnItemEx ("RLAbominantSeekerPulseImpact", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    TNT1 A 0 A_GiveInventory ("RLAbominantSeekerCooldown", 1, AAPTR_TARGET)
    TNT1 A 0 A_GiveInventory ("RLAbominantSeekerActive", 1, AAPTR_TRACER)
    TNT1 A 0 A_PlaySound ("abominant/pulseimpact", 6, 1, 0, 0.8)
    TNT1 A 0 A_Warp (AAPTR_TRACER, 0,0,0, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION, "DebuffLoop", 0.5)
	Stop
   DebuffLoop:
    TNT1 A 0 A_JumpIfInventory ("RLAbominantSeekerActivate", 1, "Explode", AAPTR_TARGET)
    TNT1 A 1
    TNT1 A 0 A_SpawnItemEx ("RLAbominantSeekerPulseTrail", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    TNT1 A 0 A_Warp (AAPTR_TRACER, 0,0,0, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION, "DebuffLoop", 0.5)
    Stop
   Explode:
    TNT1 A 0 A_Warp (AAPTR_TRACER, 0,0,0, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION, 0, 0.5)
    TNT1 A 0 A_SpawnItemEx ("RLAbominantSeekerPulseImpact", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    TNT1 A 0 A_PlaySound ("abominant/pulseimpact", 6, 1, 0, 0.8)
    TNT1 A 30
    Stop
   }
}
*/

ACTOR RLAbominantAnnihilationGazeTracer
{
   Radius 4
   Height 4
   RenderStyle Add
   Alpha 0.25
   Scale 0.5
   +NOGRAVITY
   +NOCLIP
   +NOINTERACTION
   +NOTONAUTOMAP
   +NOTIMEFREEZE
  
  var int user_gazetimer;
   States
   {
   Spawn:
    TNT1 A 0
    TNT1 A 0 A_PlaySound ("abominant/gazecharge", CHAN_WEAPON, 1, 0, 0.75)
    TNT1 A 0 A_SetUserVar("user_gazetimer", 66)
   SpawnLoop:
    TNT1 A 0 A_Warp (AAPTR_TRACER, 8, 0, 0, 0, WARPF_NOCHECKPOSITION, "SpawnWarp", 0.5)
    Stop
   SpawnWarp:
    TNT1 A 0 A_JumpIfInventory ("RLAbominantInterrupt", 1, "Nope", AAPTR_TARGET)
    TNT1 A 0 A_TransferPointer (AAPTR_TARGET, AAPTR_DEFAULT, AAPTR_TARGET, AAPTR_TRACER)
    TNT1 A 1 A_SpawnItemEx ("RLAbominantScattershotGlow", frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2), frandom(-0.1,0.1),frandom(-0.1,0.1),frandom(0.1,0.3), 0, SXF_NOCHECKPOSITION | SXF_TRANSFERSCALE | SXF_TRANSFERALPHA)
    TNT1 A 0 A_SetUserVar("user_gazetimer", user_gazetimer - 1)
    TNT1 A 0 A_JumpIf (user_gazetimer <= 0, "Detonate")
    Goto SpawnLoop
   Detonate:
    TNT1 A 0 A_SpawnItemEx ("RLAbominantAnnihilationGazeImpact", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    TNT1 A 30 A_PlaySound("rlmonsters/largeexp", CHAN_WEAPON, 1, 0, 0.7)
    Stop
   Nope:
    TNT1 A 10 A_StopSound(CHAN_WEAPON)
    Stop
   }
}

ACTOR RLAbominantRadiantSparks
{
   Radius 4
   Height 4
   +NOGRAVITY
   +NOCLIP
   +NOTONAUTOMAP
   +NOTIMEFREEZE
   States
   {
   Spawn:
    TNT1 A 0
    TNT1 A 0// A_Warp (AAPTR_MASTER, 8, 0, 76, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
    TNT1 A 1 A_CustomRailgun (0, 0, "None", "Gold", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(-30,30), frandom(-30,30), random(16,32), 1, 0.2, 0, "None", -11)
    Stop
   }
}

ACTOR RLAbominantAnnihilationGazeTrail
{   
   Radius 2
   Height 2
   Renderstyle Add
   Alpha 0.15
   Scale 0.55
   +NOINTERACTION
   +NOTIMEFREEZE
   States
   {
   Spawn:
      TNT1 A 0
      TNT1 A 0 A_SetScale (frandom(0.54,0.56))
      YSHK ABCDEFGHIJKLMNOPQR 1 Bright
      Stop 
   }
}

ACTOR RLAbominantAnnihilationGazeImpact : RLAbominantAnnihilationGazeTrail
{   
   Alpha 0.45
   Scale 0.85
   +NOINTERACTION
   +NOTIMEFREEZE
   States
   {
   Spawn:
      TNT1 A 0
	  TNT1 A 0 A_JumpIf(CallACS("DRLA_MonsterQuake") == 0, "SpawnLoop")
      TNT1 A 0 A_Quake(1, 12, 0, 256, "")
      TNT1 A 0 A_Quake(3, 6, 0, 128, "")
   SpawnLoop:
      TNT1 A 0 A_SetScale (frandom(0.84,0.86))
      YSHK ABCDEFGHIJKLMNOPQR 1 Bright
      Stop 
   }
}

ACTOR RLAbominantAnnihilationGazeRing : RLAbominantAnnihilationGazeImpact
{   
   States
   {
   Spawn:
      TNT1 A 12
      YSHK RRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA 1 Bright A_Warp (AAPTR_MASTER, 8, 0, 76, 0, WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
      Stop 
   }
}

ACTOR RLAbominantAfterImage
{
   Radius 4
   Height 4
   Scale 1.25
   RenderStyle Translucent
   Alpha 0.95
   +NOGRAVITY
   +NOCLIP
   +NOINTERACTION
   +NOTONAUTOMAP
   +NOTIMEFREEZE
   States
   {
   Spawn:
    "####" "#" 1 A_FadeTo (0, 0.05, 1)
    Loop
   }
}

ACTOR RLAbominantBrightAfterImage : RLAbominantAfterImage
{
   RenderStyle Add
   States
   {
   Spawn:
    "####" "#" 1 Bright A_FadeTo (0, 0.05, 1)
    Loop
   }
}

// As the Abominant's damage is pretty low, it can have trouble with infighting.
// With this, it's very good at destructicating badmans
ACTOR RLAbominantRadiantDamage : RLMPCustomFunction
{
  States
  {
  Pickup:
    TNT1 A 0
    TNT1 A 0 A_JumpIf(CheckClass("RLAbominant", AAPTR_DEFAULT, TRUE), "NoEffect")
    TNT1 A 0 A_CheckFlag ("ISMONSTER", "FUGU2M8")
    Stop
  FUGU2M8:
    TNT1 A 0 A_CheckFlag ("BOSS", "OHHITHERE")
    TNT1 A 0 A_DamageSelf(Health*0.5, "Radiant")
    Stop
  OHHITHERE:
    TNT1 A 0 A_DamageSelf(Health*0.1, "Radiant")
    Stop
  NoEffect:
    TNT1 A 0
    Stop
  }
}

ACTOR RLAbominantChargeDisperser : Powerup
{
	Powerup.Duration 350
   +INVENTORY.UNTOSSABLE
}

ACTOR RLAbominantScattershotcooldown : Powerup
{
	Powerup.Duration 600
   +INVENTORY.UNTOSSABLE
}

ACTOR RLAbominantAnnihilationGazeCooldown : Powerup
{
	Powerup.Duration -15
   +INVENTORY.UNTOSSABLE
}

ACTOR RLAbominantInterrupt : Powerup
{
	Powerup.Duration 5
   +INVENTORY.UNTOSSABLE
}

ACTOR RLAbominantArtifactGuardian : RLAbominant
{
  Health 16000
  PainThreshold 500
  PainChance "Telefrag", 256
  MinMissileChance 5
  +NOINFIGHTING
  +NOTELEFRAG
  +ALWAYSFAST
  -COUNTKILL
  DropItem "RLDemonArtifactItem"
  States
  {
    Pain.Telefrag:
		"####" "#" 0 A_SpawnItemEx("RLAntiTelefrag",0,0,0, 0,0,0, 0,SXF_NOCHECKPOSITION | SXF_SETTARGET)
		Goto See
  }
}

ACTOR RLCCAbominant : RLAbominant
{
  +TOUCHY
  States
  {
  See:
    ABOM AABCD 8
    Loop
  Missile:
    ABOM C 8
    ABOM E 6
    ABOM F 8 Bright
    ABOM EB 6
    Goto See
  Melee:
    Stop
  Death:
    ABOM H 4
    ABOM H 35 A_Scream
    ABOM IJJJ 4
    ABOM KLMNOP 8 Bright
    TNT1 A 10
    Stop
  }
}

//==============================================================================
//							MONSTER'S ITEM POOL

ACTOR RLAbominantDrop : RLEnemyWeaponDrop
{
	States
	{
	WeaponDrop: // Drops for DRLA Arsenal + Monsterpack
		TNT1 A 0 A_JumpIfInventory ("RLDemonicItemFound", 1, 1, AAPTR_PLAYER1)
		Goto Nope // Doesn't drop anything if you haven't found a Demonic weapon.
		TNT1 A 0 A_DropItem("RLDemonArtifactItem", 1, 128)
		Stop
	WeaponDropNoArsenal: // Drops for Monsterpack
		TNT1 A 0// A_DropItem("Megasphere")
		Stop
	WeaponDropVanilla: // Drops for Monsterpack if vanilla drops option is enabled
		TNT1 A 0 A_JumpIfInventory ("RLDemonicItemFound", 1, 1, AAPTR_PLAYER1)
		Goto Nope // Doesn't drop anything if you haven't found a Demonic weapon.
		TNT1 A 0 A_DropItem("RLDemonArtifactItem", 1, 128)
		Stop
	DonutstealDrop: // Drops for Demonsteele
		TNT1 A 0// A_DropItem("Megasphere")
		Stop
	}
}
