
// CYBERDEMON MK. II
//
ACTOR RLCyberneticCyberdemon : RLCyberdemonBase 16550
{
  Health 8000
  Speed 14
  Mass 500000
  
  PainThreshold 200
  PainChance 256
  
  DamageFactor "Melee", 1.5
  DamageFactor "Holy", 2
  DamageFactor "Unholy", 0.25
  
  SeeSound "cyberdemonmkii/sight"
  ActiveSound "mechdemon/active"
  PainSound "cyberdemonmkii/pain"
  DeathSound "cyberdemonmkii/death"
  
  Obituary "%o couldn't stop the Cyberdemon Mk. II's march."
  HitObituary "%o had %h face smashed off by a Cyberdemon Mk. II."
  Tag "Cyberdemon Mk. II"
    //$category "MP Technophobia"
  
	// Guncaster compatibility
	DropItem "TreasureChest"
	DropItem "TreasureChest"
  
  var int user_muhverticalaimexperience;
  var int user_muhhorizontalaimexperience;
  var int user_missilestorm;
  var int user_wheeeslidingisfun;
  States
  {
  Spawn:
    TNT1 A 0 A_JumpIfHealthLower (3000, "SpawnDamaged")
    CCYB C Random(9,10) A_Look
    Goto Spawn
  SpawnDamaged:
    TNT1 A 0 A_Jump (230, 2)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "LightBlue", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), 128+frandom(2.2,4.2), 1, 0.2, 0, "None", frandom(-5,5))
    CCYB C Random(4,5) A_Look
    Goto Spawn
	
  See:
    TNT1 A 0 A_JumpIfHealthLower (3000, "SeeDamaged")
    CCYB DD 4 A_Chase("", "RightArm")
  SeeMain:
    CCYB AA 4 A_Chase ("", "RightArm", CHF_DONTMOVE)
    TNT1 A 0 A_PlaySound("cyberdemonmkii/walk", 5, 0.6, 0, 0.7)
    CCYB BB 4 A_Chase("", "LeftArm")
    TNT1 A 0 A_PlaySound("rlmonsters/metalhoof", 5, 0.9, 0, 0.7)
	TNT1 A 0 A_JumpIf(CallACS("DRLA_MonsterQuake") == 0, 3)
    TNT1 A 0 A_Quake(1, 12, 0, 1024, "")
    TNT1 A 0 A_Quake(3, 6, 0, 512, "")
    CCYB CC 4 A_Chase ("", "LeftArm", CHF_DONTMOVE)
    TNT1 A 0 A_PlaySound("cyberdemonmkii/walk", 5, 0.6, 0, 0.7)
    CCYB DD 4 A_Chase("", "RightArm")
    TNT1 A 0 A_PlaySound("rlmonsters/metalhoof", 5, 0.9, 0, 0.7)
	TNT1 A 0 A_JumpIf(CallACS("DRLA_MonsterQuake") == 0, 3)
    TNT1 A 0 A_Quake(1, 12, 0, 1024, "")
    TNT1 A 0 A_Quake(3, 6, 0, 512, "")
    Loop
  SeeDamaged:
    CCYB DD 4 A_Chase("", "Missile")
  SeeDamagedMain:
    CCYB A 4 A_Chase ("", "Missile", CHF_DONTMOVE)
    TNT1 A 0 A_Jump (230, 2)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "LightBlue", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), 128+frandom(2.2,4.2), 1, 0.2, 0, "None", frandom(-5,5))
    CCYB A 4 A_Chase ("", "Missile", CHF_DONTMOVE)
    TNT1 A 0 A_Jump (230, 2)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "LightBlue", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), 128+frandom(2.2,4.2), 1, 0.2, 0, "None", frandom(-5,5))
    TNT1 A 0 A_PlaySound("cyberdemonmkii/walk", 5, 0.6, 0, 0.7)
    CCYB B 4 A_Chase("", "Missile")
    TNT1 A 0 A_Jump (230, 2)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "LightBlue", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), 128+frandom(2.2,4.2), 1, 0.2, 0, "None", frandom(-5,5))
    CCYB B 4 A_Chase("", "Missile")
    TNT1 A 0 A_Jump (230, 2)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "LightBlue", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), 128+frandom(2.2,4.2), 1, 0.2, 0, "None", frandom(-5,5))
    TNT1 A 0 A_PlaySound("rlmonsters/metalhoof", 5, 0.9, 0, 0.7)
	TNT1 A 0 A_JumpIf(CallACS("DRLA_MonsterQuake") == 0, 3)
    TNT1 A 0 A_Quake(1, 12, 0, 1024, "")
    TNT1 A 0 A_Quake(3, 6, 0, 512, "")
    CCYB C 4 A_Chase ("", "Missile", CHF_DONTMOVE)
    TNT1 A 0 A_Jump (230, 2)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "LightBlue", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), 128+frandom(2.2,4.2), 1, 0.2, 0, "None", frandom(-5,5))
    CCYB C 4 A_Chase ("", "Missile", CHF_DONTMOVE)
    TNT1 A 0 A_Jump (230, 2)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "LightBlue", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), 128+frandom(2.2,4.2), 1, 0.2, 0, "None", frandom(-5,5))
    TNT1 A 0 A_PlaySound("cyberdemonmkii/walk", 5, 0.6, 0, 0.7)
    CCYB D 4 A_Chase("", "Missile")
    TNT1 A 0 A_Jump (230, 2)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "LightBlue", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), 128+frandom(2.2,4.2), 1, 0.2, 0, "None", frandom(-5,5))
    CCYB D 4 A_Chase("", "Missile")
    TNT1 A 0 A_Jump (230, 2)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "LightBlue", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), 128+frandom(2.2,4.2), 1, 0.2, 0, "None", frandom(-5,5))
    TNT1 A 0 A_PlaySound("rlmonsters/metalhoof", 5, 0.9, 0, 0.7)
	TNT1 A 0 A_JumpIf(CallACS("DRLA_MonsterQuake") == 0, 3)
    TNT1 A 0 A_Quake(1, 12, 0, 1024, "")
    TNT1 A 0 A_Quake(3, 6, 0, 512, "")
    Loop
	
  MissileProper:
    TNT1 A 0 A_PlaySound("rlmonsters/metalhoof", 5, 0.9, 0, 0.7)
    CCYB EEE 4 A_FaceTarget
    TNT1 A 0 A_JumpIfCloser (1024, 1)
    Goto HeyGetBackHereAndGetDrunkdOn
    CCYB EEE 4 A_FaceTarget
    Goto UnleashTheDrunkstorm
  UnleashTheDrunkstorm:
    TNT1 A 0 A_JumpIf (user_missilestorm >= 36, "GottaPaceTheStorm")
    TNT1 A 0 A_FaceTarget
    TNT1 A 0 A_Jump (230, 2)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "LightBlue", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), 128+frandom(2.2,4.2), 1, 0.2, 0, "None", frandom(-5,5))
    TNT1 A 0 A_SetUserVar("user_missilestorm", user_missilestorm+3)
    TNT1 AA 0 A_CustomMissile("RLCyberdemonMkIIDrunkRocket", 57, 23, frandom(-5,5), CMF_OFFSETPITCH, frandom(-2,2))
    CCYB E 3 Bright A_CustomMissile("RLCyberdemonMkIIDrunkRocket", 57, 23, frandom(-5,5), CMF_OFFSETPITCH, frandom(-2,2))
    CCYB E 3
    TNT1 A 0 A_FaceTarget
    TNT1 A 0 A_SetUserVar("user_missilestorm", user_missilestorm+3)
    TNT1 AA 0 A_CustomMissile("RLCyberdemonMkIIDrunkRocket", 57, -23, frandom(-5,5), CMF_OFFSETPITCH, frandom(-2,2))
    CCYB E 3 Bright A_CustomMissile("RLCyberdemonMkIIDrunkRocket", 57, -23, frandom(-5,5), CMF_OFFSETPITCH, frandom(-2,2))
    CCYB E 3
    TNT1 A 0 A_JumpIfCloser (1024, 1)
    Goto HeyGetBackHereAndGetDrunkdOn
    TNT1 A 0 A_MonsterRefire (200, "See")
    Goto UnleashTheDrunkstorm
  HeyGetBackHereAndGetDrunkdOn:
    TNT1 A 0 A_JumpIf (user_missilestorm >= 36, "GottaPaceTheStorm")
    CCYB E 4 A_FaceTarget
    TNT1 A 0 A_Jump (230, 2)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "LightBlue", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), 128+frandom(2.2,4.2), 1, 0.2, 0, "None", frandom(-5,5))
    CCYB E 4 A_FaceTarget
    TNT1 A 0 A_Jump (230, 2)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "LightBlue", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), 128+frandom(2.2,4.2), 1, 0.2, 0, "None", frandom(-5,5))
    TNT1 A 0 A_FaceTarget
    TNT1 A 0 A_Jump (230, 2)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "LightBlue", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), 128+frandom(2.2,4.2), 1, 0.2, 0, "None", frandom(-5,5))
    TNT1 A 0 A_SetUserVar("user_missilestorm", user_missilestorm+6)
    TNT1 A 0 A_CustomMissile("RLCyberdemonMkIIRocketHax", 57, -23)
    CCYB E 3 Bright A_CustomMissile("RLCyberdemonMkIIRocketHax", 57, 23)
    TNT1 A 0 A_Jump (230, 2)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "LightBlue", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), 128+frandom(2.2,4.2), 1, 0.2, 0, "None", frandom(-5,5))
    CCYB E 3 Bright
    TNT1 A 0 A_JumpIfCloser (1024, "UnleashTheDrunkstorm")
    TNT1 A 0 A_MonsterRefire (0, "See")
    Goto HeyGetBackHereAndGetDrunkdOn
  GottaPaceTheStorm:
    TNT1 A 0 A_SetUserVar("user_missilestorm", 0)
    CCYB EEEEEE 4 A_FaceTarget
    TNT1 A 0 A_JumpIfCloser (1024, 1)
    Goto HeyGetBackHereAndGetDrunkdOn
    TNT1 A 0 A_MonsterRefire (200, "See")
    Goto UnleashTheDrunkstorm
	
  LeftArm:
    TNT1 A 0 A_JumpIfHealthLower (3000, "Missile")
    TNT1 A 0 A_JumpIfInventory ("RLCyberdemonMkIIGrenadeActive", 1, 2)
    TNT1 A 0 A_JumpIfCloser (1300, "LeftArmGrenade")
    TNT1 A 0 A_JumpIfCloser (1300, "LeftArmMissiles")
	Goto LeftArmTorpedo
  LeftArmMissiles:
    TNT1 A 0 A_JumpIfCloser (110, "LeftArmMelee")
    TNT1 A 0 A_PlaySound("rlmonsters/metalhoof", 5, 0.9, 0, 0.7)
    TNT1 A 0 A_SetUserVar("user_muhhorizontalaimexperience", random(-100,100))
    TNT1 A 0 A_SetUserVar("user_muhverticalaimexperience", random(-100,100))
    CCYB FFF 4 A_FaceTarget
    TNT1 A 0 A_FaceTarget
    CCYB F 6 Bright A_CustomMissile("RLCyberdemonMkIIRocketHax", 57, -23)
    CCYB FF 4 A_FaceTarget
    Goto See
	
  LeftArmGrenade:
    TNT1 A 0 A_JumpIfCloser (110, "LeftArmMelee")
    TNT1 A 0 A_PlaySound("rlmonsters/metalhoof", 5, 0.9, 0, 0.7)
    CCYB FFF 4 A_FaceTarget
    TNT1 A 0 A_FaceTarget
    CCYB F 6 Bright A_CustomMissile("RLCyberdemonMkIIGrenade", 57, -23)
    CCYB FF 4 A_FaceTarget
    Goto See
	
  LeftArmMelee:
    CCYB F 4 A_FaceTarget
    TNT1 A 0 A_FaceTarget
    CCYB F 6 Bright A_CustomMissile("RLCyberdemonMkIITorpedoDumbfire", 57, -23)
    CCYB FF 4 A_FaceTarget
    Goto See
  LeftArmTorpedo:
    TNT1 A 0 A_CheckFlag ("INVISIBLE", "LeftArmMissiles", AAPTR_TARGET)
    TNT1 A 0 A_CheckFlag ("SHADOW", "LeftArmMissiles", AAPTR_TARGET)
    CCYB FFF 4 A_FaceTarget
    TNT1 A 0 A_FaceTarget
    CCYB F 6 Bright A_CustomMissile("RLCyberdemonMkIITorpedo", 57, -23)
    Goto LeftArmTorpedoGuiding
  LeftArmTorpedoGuiding:
    CCYB F 1 A_FaceTarget
    TNT1 A 0 A_FaceTarget
    TNT1 A 0 A_CustomMissile("RLCyberdemonMkIITorpedoGuidanceFlash", 57, -23)
//	TNT1 A 0 A_CustomRailgun (0, -26, "None", "Red", RGF_SILENT | RGF_FULLBRIGHT | RGF_EXPLICITANGLE, 0, 0.1, "RLParticleBeamPuff2", -0.7, 0.0, random(4000,4096), 2, 0.2, 0, "None", -3)
    TNT1 A 0 A_MonsterRefire (0, "LeftArmTorpedoGuidingInterrupted")
    TNT1 A 0 A_JumpIfInventory ("RLCyberdemonMkIITorpedoFired", 1, "LeftArmTorpedoGuiding")
    Goto LeftArmTorpedoGuidingInterrupted
  LeftArmTorpedoGuidingInterrupted:
    TNT1 A 0 A_GiveInventory ("RLCyberdemonMkIITorpedoInterrupt", 1)
    CCYB FF 4 A_FaceTarget
    Goto See
	
  RightArm:
    TNT1 A 0 A_JumpIfHealthLower (3000, "Missile")
    TNT1 A 0 A_JumpIfCloser (1300, 1)
	Goto LeftArmTorpedo
  RightArmMissiles:
    TNT1 A 0 A_JumpIfCloser (110, "RightArmMelee")
    TNT1 A 0 A_PlaySound("rlmonsters/metalhoof", 5, 0.9, 0, 0.7)
    TNT1 A 0 A_SetUserVar("user_muhhorizontalaimexperience", random(-100,100))
    TNT1 A 0 A_SetUserVar("user_muhverticalaimexperience", random(-100,100))
    CCYB GGG 4 A_FaceTarget
    TNT1 A 0 A_FaceTarget
    CCYB G 6 Bright A_CustomMissile("RLCyberdemonMkIIRocketHax", 57, 23)
    CCYB GG 4 A_FaceTarget
    Goto See
  RightArmMelee:
    CCYB G 4 A_FaceTarget
    TNT1 A 0 A_FaceTarget
    CCYB G 6 Bright A_CustomMissile("RLCyberdemonMkIITorpedoDumbfire", 57, 23)
    CCYB GG 4 A_FaceTarget
    Goto See

  PainMain:
    TNT1 A 0 ACS_NamedExecuteAlways("DRLA_BossPainCheck", 0)
    TNT1 A 0 A_GiveInventory ("RLCyberdemonMkIITorpedoInterrupt", 1)
    TNT1 A 0 A_FaceTarget
    TNT1 A 0 ThrustThing(angle*256/360+128, 50, 0, 0)
    TNT1 A 0 A_Pain
    TNT1 A 0 A_SetUserVar("user_wheeeslidingisfun", 50)
    TNT1 A 0 A_PlaySound("cyberdemonmkii/knockback", 5, 0.8, 0, 0.6)
  PainSlide:
    TNT1 A 0 A_JumpIf (user_wheeeslidingisfun <= 0, "See")
    TNT1 A 0 A_Jump (230, 2)
    TNT1 A 0 A_CustomRailgun (0, 0, "None", "LightBlue", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), 128+frandom(2.2,4.2), 1, 0.2, 0, "None", frandom(-5,5))
    TNT1 A 0 A_SetUserVar("user_wheeeslidingisfun", user_wheeeslidingisfun - 1)
    TNT1 A 0 A_JumpIf (user_wheeeslidingisfun <= 15, 3)
    TNT1 A 0 A_SpawnItemEx ("RLCyberdemonMkIISlidingSmoke", 0,26+frandom(-2,2),0, 0,0,frandom(0.5,2), 0, SXF_NOCHECKPOSITION)
    TNT1 A 0 A_SpawnItemEx ("RLCyberdemonMkIISlidingSmoke", 0,-26+frandom(-2,2),0, 0,0,frandom(0.5,2), 0, SXF_NOCHECKPOSITION)
    CCYB H 1
    Goto PainSlide
	
  DeathMain:
    TNT1 A 0 A_GiveInventory ("RLCyberneticCyberdemonKillIncrementer", 1, AAPTR_PLAYER1) // Used for tallying total kills and bestiary info
    TNT1 A 0 A_GiveInventory ("RLCyberdemonMkIITorpedoInterrupt", 1)
    CCYB I 10
	TNT1 A 0 A_JumpIf(CallACS("DRLA_MonsterQuake") == 0, 2)
    TNT1 A 0 A_Quake(7, 40, 0, 1024, "")
    CCYB J 10 Bright A_Scream
    TNT1 A 0 A_SpawnItemEx ("RLGibber", 0,0,0, VelX,VelY,VelZ, 0, SXF_ABSOLUTEMOMENTUM | SXF_USEBLOODCOLOR | SXF_NOCHECKPOSITION)
    CCYB KLM 10 Bright
    TNT1 A 0 A_SpawnItemEx ("RLGibber", 0,0,0, VelX,VelY,VelZ, 0, SXF_ABSOLUTEMOMENTUM | SXF_USEBLOODCOLOR | SXF_NOCHECKPOSITION)
	TNT1 A 0 A_JumpIf(CallACS("DRLA_MonsterQuake") == 0, 2)
    TNT1 A 0 A_Quake(4, 20, 0, 1024, "")
    CCYB N 10 Bright A_NoBlocking
    CCYB OP 10
    CCYB Q 30
    CCYB Q 0 A_BossDeath
    "####" "#" 0 A_Jump(256, "DeathEnd")
    Goto DeathEnd
  DeathFrame:
    TNT1 A 0 A_GiveInventory ("RLCyberdemonMkIITorpedoInterrupt", 1)
    CCYB Q 0
    "####" "#" 0 A_Jump(256, "DeathEnd")
    Goto DeathEnd
	
	//Ice
  GenericFreezeDeath:
	"####" "#" 0 A_GiveInventory ("RLCyberneticCyberdemonKillIncrementer", 1, AAPTR_PLAYER1) // Used for tallying total kills and bestiary info
    TNT1 A 0 A_GiveInventory ("RLCyberdemonMkIITorpedoInterrupt", 1)
    "####" "#" 0 A_Jump(256, "GenericFreezeMana")
    Goto GenericFreezeMana
	
  CrushDRLA:
    TNT1 A 0 A_GiveInventory ("RLCyberdemonMkIITorpedoInterrupt", 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_GiveInventory ("RLCyberdemonMkIITorpedoInterrupt", 1)
    TNT1 A 0 A_PlaySound("weapons/dn2gunhit", CHAN_BODY)
    D2F1 R 2 Bright
    Goto See
  Pain.NeuralStun:
    TNT1 A 0 A_GiveInventory ("RLCyberdemonMkIITorpedoInterrupt", 1)
    D2F1 R 2 Bright
    Goto See
  Pain.CyberDisruptor:
    TNT1 A 0
    Goto Pain.LightningBlue
	
  Death.NeuralStun:
    TNT1 A 0
    Goto Death
  XDeath.RigelBlast:
  Death.RigelBlast:
    TNT1 A 0 A_GiveInventory ("RLDuke2Score", 10000, AAPTR_TARGET)
    TNT1 A 0 A_GiveInventory ("RLCyberneticCyberdemonKillIncrementer", 1, AAPTR_PLAYER1) // Used for tallying total kills and bestiary info
    TNT1 A 0 A_GiveInventory ("RLCyberdemonMkIITorpedoInterrupt", 1)
    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)
    TNT1 A 0 A_Jump (256, "DN2BossExplosionLoop")
	Goto DN2BossExplosionLoop
  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, "")
    CCYB H 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
	Stop
	
//==============================================================================
//					--	Special Monster Attacks  --
//==============================================================================

//==============================================================================
//					--	Final Doomer Compatibility Stuff  --
//==============================================================================
  DeathXSparkFrame:
    "####" "#" 0 A_JumpIfInTargetInventory("Mana",0,2)
    "####" "#" 0 A_DropItem("MajorManaPod",-1,54)
    CCYB H 0 A_BossDeath
    "####" "#" 0 A_Jump(256, "DeathXSpark")
	Goto DeathXSpark
	
//==============================================================================
//					--	Guncaster Compatibility Stuff  --
//==============================================================================
	MidasFrame1:
		CCYB H 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:
		CCYB H 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:
		CCYB H 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:
		CCYB H 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
		CCYB H 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
		CCYB H 0 A_ChangeFlag("NOPAIN",1)
		"####" "#" 0 A_SetUserVar("User_LightningLock", User_LightningLock + 10)
		"####" "#" 0 A_Jump(256,"BlueLightningLock")
		Goto BlueLightningLock
  }
}

ACTOR RLCyberdemonMkIISlidingSmoke
{
   Projectile 
   Radius 4
   Height 4
   Speed 2
   Scale 0.3
   Damage 0
   Renderstyle Translucent
   Alpha 0.15
   +NOCLIP
   +NOINTERACTION
   +NOTONAUTOMAP
   States
   {
   Spawn:
   TNT1 A 0
   TNT1 A 0 A_SetScale (scalex * frandom(0.85,1.15))
   TNT1 A 0 A_Jump (128, 2)
   TNT1 A 0 A_SetScale (scalex - (scalex * 2), scaley)
   SMK2 ABCDEFGHIJKLMNOPQ 1 A_ScaleVelocity (1.01)
   Stop
   }
}

ACTOR RLCyberdemonMkIIRocketTrail
{
   Projectile
   Radius 8
   Height 8
   Speed 1
   Scale 0.3
   Damage 0
   Renderstyle Add
   Alpha 0.45
   +NOCLIP
   +NOINTERACTION
   +NOTONAUTOMAP
   +NOTIMEFREEZE
   States
   {
   Spawn:
//      TNT1 A 0
//      TNT1 A 0 A_PrintBold ("fuck")
//      TNT1 A 0 A_Explode (20000,20000)
   CRES ABCDE 3 A_SetScale (ScaleX*1.1)
   Stop
   }
}

ACTOR RLCyberdemonMkIITorpedoGuidanceFlash
{
  RenderStyle Add
  Alpha 0.75
  Scale 1.5
  YScale 0.6
  Speed 8
  Projectile
  +NOGRAVITY
  +NOINTERACTION
  +NOCLIP
  +THRUACTORS
  +FORCEXYBILLBOARD
  States
  {
  Spawn:
    TNT1 A 1
    TNT1 A 0 A_Stop
    TNT1 A 0 A_SetScale (frandom(0.8,1.8))
    UNMP BCD 1 Bright
    Stop
  }
}

//==============================================================================
// BEWARE
// YOU ENTER THE MARRUB ZONE
// THERE ARE MANY NUMBERS HERE

ACTOR RLCyberdemonMkIIRocketHax
{
   Health 15
   Scale 0.7
   Radius 13
   Height 10
   Speed 28
   Damage (45 * random(1,3))
   DamageType "Fire"
   PainType "Explosion"
   DeathType "Explosion"
   
   Projectile
   +ISMONSTER
   +SHOOTABLE
   +THRUGHOST
   +NOTIMEFREEZE
   +BLOODSPLATTER
   +SKYEXPLODE
   SeeSound "cyberdemonmkii/fire"
   
   var int user_instantimpact;
   states
   {
   Spawn:
      TNT1 A 0
      TNT1 A 1
      TNT1 A 0 A_SpawnItemEx("RLCyberdemonMkIISpiralRocket", 0,0,0, 0,0,0, 0, SXF_ORIGINATOR|SXF_SETMASTER|SXF_TRANSFERPOINTERS)
      TNT1 A 0 A_SpawnItemEx("RLCyberdemonMkIISpiralRocket2", 0,0,0, 0,0,0, 0, SXF_ORIGINATOR|SXF_SETMASTER|SXF_TRANSFERPOINTERS)
      TNT1 A 0 A_SpawnItemEx("RLCyberdemonMkIISpiralRocket3", 0,0,0, 0,0,0, 0, SXF_ORIGINATOR|SXF_SETMASTER|SXF_TRANSFERPOINTERS)
      TNT1 A 0 A_SetUserVar(user_instantimpact,   1)
   SpawnLoop:
      TNT1 A 1
      loop
   Death:
      TNT1 A 0 A_JumpIf(user_instantimpact == 0, "GenerateBooms")
      Goto BangStuff
   BangStuff:
	  TNT1 A 0 A_JumpIf(CallACS("DRLA_MonsterQuake") == 0, 3)
      TNT1 A 0 A_Quake(1, 18, 0, 512, "")
      TNT1 A 0 A_Quake(3, 12, 0, 256, "")
      TNT1 A 0 A_PlaySound ("rlmonsters/smallexp", 7, 1, 0, 0.8)
      TNT1 A 0 A_PlaySound("rlmonsters/smallexp", CHAN_ITEM, 0.05, 0, 0.05)
      TNT1 A 0 A_Explode (48, 96)
      TNT1 A 0 A_KillChildren
      TNT1 A 10
      Stop
   GenerateBooms:
      TNT1 A 0 A_SpawnItemEx("RLCyberdemonMkIISpiralRocketBoom", 0,0,0, 0,0,0, 0, SXF_ORIGINATOR|SXF_SETMASTER|SXF_TRANSFERPOINTERS)
      TNT1 A 0 A_SpawnItemEx("RLCyberdemonMkIISpiralRocketBoom2", 0,0,0, 0,0,0, 0, SXF_ORIGINATOR|SXF_SETMASTER|SXF_TRANSFERPOINTERS)
      TNT1 A 0 A_SpawnItemEx("RLCyberdemonMkIISpiralRocketBoom3", 0,0,0, 0,0,0, 0, SXF_ORIGINATOR|SXF_SETMASTER|SXF_TRANSFERPOINTERS)
      Goto BangStuff
   }
}

ACTOR RLCyberdemonMkIISpiralRocket
{
   Health 15
   Scale 0.7
   Radius 2
   Height 2
   Speed 0
   Damage (15 * random(1,3))// Never mind you can't actually collide with these things
   DamageType "Fire"
   PainType "Explosion"
   DeathType "Explosion"
//   DeathSound "rlmonsters/smallexp"
   
   Projectile
   +ISMONSTER
   +SHOOTABLE
   +THRUACTORS
   +NOTIMEFREEZE
   +BLOODSPLATTER
   +SKYEXPLODE
   
   var int user_trailstep;
   var int user_spiraldist;
   var int user_spiralanglez;
   
   states
   {
   Spawn:
      TNT1 A 0
      TNT1 A 0 A_PlaySound("cyberdemonmkii/missileloop", 7, 0.65, 0, 1.3)
      TNT1 A 0 A_SetUserVar(user_spiraldist,   0)
      TNT1 A 0 A_SetUserVar(user_spiralanglez, user_spiraldist)
	  Goto SpawnLoop
   SpawnLoop:
      TNT1 A 0 A_SetUserVar(user_spiraldist,   (user_spiraldist + 15)   % 360)
      TNT1 A 0 A_SetUserVar(user_spiralanglez, (user_spiralanglez + 15) % 360)
      TNT1 A 0 A_Warp(AAPTR_MASTER, cos(90.0) * (sin(user_spiraldist) * 12.0),
                                    sin(90.0) * (sin(user_spiraldist) * 12.0),
                                    cos(user_spiralanglez) * 12.0,
                      0.0, WARPF_NOCHECKPOSITION)
	  Goto TheRealSpawnShady
   TheRealSpawnShady:
      TNT1 A 0 A_JumpIf(user_trailstep >= 4, "TrailDone")
      TNT1 A 0 A_SetUserVar(user_trailstep, user_trailstep + 1)
      TNT1 A 0 A_SpawnItemEx("RLCyberdemonMkIIRocketTrail",((user_trailstep * 8.0) * velx) / -35.0,-((user_trailstep * 8.0) * vely) / -35.0,2.0 + ((user_trailstep * 8.0) * velz) / -35.0,frandom(-0.5,0.5), frandom(-0.5,0.5), 0,0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION)
      TNT1 A 0 A_SpawnItemEx("RLCyberdemonMkIIRocketTrail",
                                   ((user_trailstep * 8.0) * CallACS("VelaHax", 1)) / -35.0,
                                  -((user_trailstep * 8.0) * CallACS("VelaHax", 2)) / -35.0,
                             2.0 + ((user_trailstep * 8.0) * CallACS("VelaHax", 3)) / -35.0,
                             frandom(-0.5,0.5), frandom(-0.5,0.5), 0,
                             0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION)
      loop
   TrailDone:
      TNT1 A 0 A_SetUserVar(user_trailstep, 0)
//      TNT1 A 0 A_SpawnItemEx ("RLCyberdemonMkIIRocketTrail", 24, 0, 0, 0, 0, 0, 180, SXF_NOCHECKPOSITION)
//      TNT1 A 0 A_SpawnItemEx ("RLCyberdemonMkIIRocketTrail", 16, 0, 0, 0, 0, 0, 180, SXF_NOCHECKPOSITION)
//      TNT1 A 0 A_SpawnItemEx ("RLCyberdemonMkIIRocketTrail", 8, 0, 0, 0, 0, 0, 180, SXF_NOCHECKPOSITION)
	  Goto Done
   Done:
      ZMIS A 1 Bright A_Stop
      TNT1 A 0 A_Warp(AAPTR_MASTER)
      goto SpawnLoop
   Death:
      TNT1 A 0 A_KillMaster
      TNT1 A 0 A_StopSound(7)
      TNT1 A 0 A_SetTranslucent (0.80, 1)
      TNT1 A 0 A_JumpIf(CallACS("GnuCustardCheck"), "GuncasterImpact")
      MEXP AB 4 Bright
      MEXP CD 3 Bright
      MEXP EF 2 Bright
      stop
	  
  GuncasterImpact:
    TNT1 A 0 A_PlaySound("Matriarch/Hit", 5, 0.6)
    TNT1 A 0 A_PlaySound("Matriarch/Exp", 6, 0.8)
    TNT1 A 0 A_PlaySound("Matriarch/Exp", CHAN_ITEM, 0.05, 0, 0.35)
    TNT1 A 0 A_SpawnItemEx("RLGuncasterMonsterExplosion", 0,0,0, 0,0,0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION)
    Stop
   }
}

ACTOR RLCyberdemonMkIISpiralRocket2 : RLCyberdemonMkIISpiralRocket
{
   states
   {
   Spawn:
      TNT1 A 0
      TNT1 A 0 A_PlaySound("cyberdemonmkii/missileloop", 7, 0.65, 0, 1.3)
      TNT1 A 0 A_SetUserVar(user_spiraldist,   120)
      TNT1 A 0 A_SetUserVar(user_spiralanglez, user_spiraldist)
	  Goto SpawnLoop
   }
}

ACTOR RLCyberdemonMkIISpiralRocket3 : RLCyberdemonMkIISpiralRocket
{
   states
   {
   Spawn:
      TNT1 A 0
      TNT1 A 0 A_PlaySound("cyberdemonmkii/missileloop", 7, 0.65, 0, 1.3)
      TNT1 A 0 A_SetUserVar(user_spiraldist,   240)
      TNT1 A 0 A_SetUserVar(user_spiralanglez, user_spiraldist)
	  Goto SpawnLoop
   }
}

ACTOR RLCyberdemonMkIISpiralRocketBoom : RLCyberdemonMkIISpiralRocket
{
   +NOCLIP
   +THRUACTORS
   states
   {
   Spawn:
      TNT1 A 0
      TNT1 A 0 A_SetUserVar(user_spiraldist,   0)
      TNT1 A 0 A_Jump (256, "ExplosionCrap")
	  Goto ExplosionCrap
   ExplosionCrap:
      TNT1 A 0 A_SetUserVar(user_spiralanglez, user_spiraldist)
      TNT1 A 0 A_SetUserVar(user_spiraldist,   (user_spiraldist + 15)   % 360)
      TNT1 A 0 A_SetUserVar(user_spiralanglez, (user_spiralanglez + 15) % 360)
      TNT1 A 0 A_Warp(AAPTR_MASTER, cos(90.0) * (sin(user_spiraldist) * 12.0),
                                    sin(90.0) * (sin(user_spiraldist) * 12.0),
                                    cos(user_spiralanglez) * 12.0,
                      0.0, WARPF_NOCHECKPOSITION)
      TNT1 A 0 A_SetTranslucent (0.80, 1)
      TNT1 A 0 A_JumpIf(CallACS("GnuCustardCheck"), "GuncasterImpact")
      MEXP AB 4 Bright
      MEXP CD 3 Bright
      MEXP EF 2 Bright
	  Stop
	  
  GuncasterImpact:
    TNT1 A 0 A_PlaySound("Matriarch/Hit", 5, 0.6)
    TNT1 A 0 A_PlaySound("Matriarch/Exp", 6, 0.8)
    TNT1 A 0 A_PlaySound("Matriarch/Exp", CHAN_ITEM, 0.05, 0, 0.35)
    TNT1 A 0 A_SpawnItemEx("RLGuncasterMonsterExplosion", 0,0,0, 0,0,0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION)
    Stop
   }
}

ACTOR RLCyberdemonMkIISpiralRocketBoom2 : RLCyberdemonMkIISpiralRocketBoom
{
   states
   {
   Spawn:
      TNT1 A 0
      TNT1 A 0 A_SetUserVar(user_spiraldist,   120)
      TNT1 A 0 A_Jump (256, "ExplosionCrap")
	  Goto ExplosionCrap
   }
}

ACTOR RLCyberdemonMkIISpiralRocketBoom3 : RLCyberdemonMkIISpiralRocketBoom
{
   states
   {
   Spawn:
      TNT1 A 0
      TNT1 A 0 A_SetUserVar(user_spiraldist,   240)
      TNT1 A 0 A_Jump (256, "ExplosionCrap")
	  Goto ExplosionCrap
   }
}

//==============================================================================

ACTOR RLCyberdemonMkIIDrunkRocket
{
   Scale 0.7
   Radius 6
   Height 5
   Speed 28
   Damage (15 * random(1,3))// Oh hey this one can actually hit you, cool
   DamageType "Fire"
   PainType "Explosion"
   DeathType "Explosion"
//   DeathSound "rlmonsters/smallexp"
   
   Projectile
   +THRUGHOST
   +NOTIMEFREEZE
   +BLOODSPLATTER
   +SKYEXPLODE
   
   var int user_trailstep;
   var int user_ohnoesmath;
   var int user_velwhy;
   var int user_velzee;
   
   states
   {
   Spawn:
      TNT1 A 0
      TNT1 A 0 A_PlaySound("cyberdemonmkii/missileloop", 7, 0.65, 0, 1.3)
	  Goto SpawnLoop
   SpawnLoop:
      TNT1 A 0 A_JumpIf(user_trailstep >= 4, "TrailDone")
      TNT1 A 0 A_SetUserVar(user_trailstep, user_trailstep + 1)
      TNT1 A 0 A_SpawnItemEx("RLCyberdemonMkIIRocketTrail",((user_trailstep * 8.0) * velx) / -35.0,-((user_trailstep * 8.0) * vely) / -35.0,4.0 + ((user_trailstep * 8.0) * velz) / -35.0,frandom(-0.5,0.5), frandom(-0.5,0.5), 0,0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION)
      TNT1 A 0 A_SpawnItemEx("RLCyberdemonMkIIRocketTrail",
                                   ((user_trailstep * 8.0) * CallACS("VelaHax", 1)) / -35.0,
                                  -((user_trailstep * 8.0) * CallACS("VelaHax", 2)) / -35.0,
                             4.0 + ((user_trailstep * 8.0) * CallACS("VelaHax", 3)) / -35.0,
                             frandom(-0.5,0.5), frandom(-0.5,0.5), 0,
                             0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION)
      Loop
   TrailDone:
      TNT1 A 0 A_SetUserVar(user_trailstep, 0)
//      TNT1 A 0 A_SpawnItemEx ("RLCyberdemonMkIIRocketTrail", 24, 0, 0, 0, 0, 0, 180, SXF_NOCHECKPOSITION)
//      TNT1 A 0 A_SpawnItemEx ("RLCyberdemonMkIIRocketTrail", 16, 0, 0, 0, 0, 0, 180, SXF_NOCHECKPOSITION)
//      TNT1 A 0 A_SpawnItemEx ("RLCyberdemonMkIIRocketTrail", 8, 0, 0, 0, 0, 0, 180, SXF_NOCHECKPOSITION)

   SetYVel:
      TNT1 A 0 A_JumpIf(user_velwhy >= 45, "SetYVelDown")
      TNT1 A 0 A_JumpIf(user_velwhy <= -45, "SetYVelUp")
      TNT1 A 0 A_SetUserVar(user_ohnoesmath,   random(-5,5))
      TNT1 A 0 A_SetUserVar(user_velwhy,   user_velwhy + user_ohnoesmath)
      TNT1 A 0 A_ChangeVelocity (0, user_ohnoesmath, 0, CVF_RELATIVE)
      Goto SetZVel
   SetYVelDown:
      TNT1 A 0 A_SetUserVar(user_ohnoesmath,   random(-5,0))
      TNT1 A 0 A_SetUserVar(user_velwhy,   user_velwhy + user_ohnoesmath)
      TNT1 A 0 A_ChangeVelocity (0, user_ohnoesmath, 0, CVF_RELATIVE)
      Goto SetZVel
   SetYVelUp:
      TNT1 A 0 A_SetUserVar(user_ohnoesmath,   random(0,5))
      TNT1 A 0 A_SetUserVar(user_velwhy,   user_velwhy + user_ohnoesmath)
      TNT1 A 0 A_ChangeVelocity (0, user_ohnoesmath, 0, CVF_RELATIVE)
      Goto SetZVel
	  
   SetZVel:
      TNT1 A 0 A_JumpIf(user_velzee >= 30, "SetZVelDown")
      TNT1 A 0 A_JumpIf(user_velzee <= -30, "SetZVelUp")
      TNT1 A 0 A_SetUserVar(user_ohnoesmath,   random(-1,1))
      TNT1 A 0 A_SetUserVar(user_velzee,   user_velzee + user_ohnoesmath)
      TNT1 A 0 A_ChangeVelocity (0, 0, user_ohnoesmath, CVF_RELATIVE)
      Goto TheLonelySingleFrame
   SetZVelDown:
      TNT1 A 0 A_SetUserVar(user_ohnoesmath,   random(-1,0))
      TNT1 A 0 A_SetUserVar(user_velzee,   user_velzee + user_ohnoesmath)
      TNT1 A 0 A_ChangeVelocity (0, 0, user_ohnoesmath, CVF_RELATIVE)
      Goto TheLonelySingleFrame
   SetZVelUp:
      TNT1 A 0 A_SetUserVar(user_ohnoesmath,   random(0,1))
      TNT1 A 0 A_SetUserVar(user_velzee,   user_velzee + user_ohnoesmath)
      TNT1 A 0 A_ChangeVelocity (0, 0, user_ohnoesmath, CVF_RELATIVE)
      Goto TheLonelySingleFrame
	  
   TheLonelySingleFrame:
      ZMIS A 1 Bright
      Goto SpawnLoop
   Death:
      TNT1 A 0 A_StopSound(7)
      TNT1 A 0 A_SetTranslucent (0.80, 1)
	  TNT1 A 0 A_JumpIf(CallACS("DRLA_MonsterQuake") == 0, 3)
      TNT1 A 0 A_Quake(1, 18, 0, 512, "")
      TNT1 A 0 A_Quake(3, 12, 0, 256, "")
      TNT1 A 0 A_PlaySound ("rlmonsters/smallexp", 7, 1, 0, 0.8)
      TNT1 A 0 A_PlaySound("rlmonsters/smallexp", CHAN_ITEM, 0.05, 0, 0.05)
      TNT1 A 0 A_Explode (16, 96)
      TNT1 A 0 A_JumpIf(CallACS("GnuCustardCheck"), "GuncasterImpact")
      MEXP AB 4 Bright
      MEXP CD 3 Bright
      MEXP EF 2 Bright
      Stop
	  
  GuncasterImpact:
    TNT1 A 0 A_PlaySound("Matriarch/Hit", 5, 0.6)
    TNT1 A 0 A_PlaySound("Matriarch/Exp", 6, 0.8)
    TNT1 A 0 A_PlaySound("Matriarch/Exp", CHAN_ITEM, 0.05, 0, 0.35)
    TNT1 A 0 A_SpawnItemEx("RLGuncasterMonsterExplosion", 0,0,0, 0,0,0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION)
    Stop
   }
}

ACTOR RLCyberdemonMkIITorpedo : FastProjectile
{
   Scale 0.7
   Radius 12
   Height 9
   Speed 12
   Damage (100)// pls no catch with your face
   DamageType "Fire"
   PainType "Explosion"
   DeathType "Explosion"
   
   Projectile
   +THRUGHOST
   +SEEKERMISSILE
   +NOTIMEFREEZE
   +BLOODSPLATTER
   +SKYEXPLODE
   
   var int user_trailstep;
   
   states
   {
   Spawn:
      TNT1 A 0
      TNT1 A 0 A_GiveInventory ("RLCyberdemonMkIITorpedoFired", 1, AAPTR_TARGET)
      TNT1 A 0 A_PlaySound("cyberdemonmkii/missileloop", 7, 0.65, 0, 1.3)
	  Goto SpawnLoop
   SpawnLoop:
      TNT1 A 0 A_ScaleVelocity (1.01)
      TNT1 A 0 A_SpawnItemEx ("RLCyberdemonMkIIRocketTrail", 24, 0, 0, 0, 0, 0, 180, SXF_NOCHECKPOSITION)
      TNT1 A 0 A_SpawnItemEx ("RLCyberdemonMkIIRocketTrail", 16, 0, 0, 0, 0, 0, 180, SXF_NOCHECKPOSITION)
      TNT1 A 0 A_SpawnItemEx ("RLCyberdemonMkIIRocketTrail", 8, 0, 0, 0, 0, 0, 180, SXF_NOCHECKPOSITION)
      TNT1 A 0 A_JumpIfInventory ("RLCyberdemonMkIITorpedoFired", 1, "TheLonelySingleFrame", AAPTR_TARGET)
      TNT1 A 0 A_GiveInventory ("RLCyberdemonMkIITorpedoUnguided", 1)
      TNT1 A 0 A_TakeInventory ("RLCyberdemonMkIITorpedoFired", 1, 0, AAPTR_TARGET)
      Goto LostLaserGuidance
	  
   TheLonelySingleFrame:
      TNT1 A 0 A_JumpIfTracerCloser (128, "SelfDetonate")
      TNT1 A 0 A_JumpIfInventory ("RLCyberdemonMkIITorpedoInterrupt", 1, "OhShitWeLostLaserGuidance", AAPTR_TARGET)
      MNSS A 1 Bright A_SeekerMissile (1,5, SMF_PRECISE)
      Goto SpawnLoop
	  
   OhShitWeLostLaserGuidance:
      TNT1 A 0 A_GiveInventory ("RLCyberdemonMkIITorpedoUnguided", 1)
      TNT1 A 0 A_TakeInventory ("RLCyberdemonMkIITorpedoFired", 1, 0, AAPTR_TARGET)
   LostLaserGuidance:
      TNT1 A 0 A_ScaleVelocity (1.025)
      TNT1 A 0 A_SpawnItemEx ("RLCyberdemonMkIIRocketTrail", 24, 0, 0, 0, 0, 0, 180, SXF_NOCHECKPOSITION)
      TNT1 A 0 A_SpawnItemEx ("RLCyberdemonMkIIRocketTrail", 16, 0, 0, 0, 0, 0, 180, SXF_NOCHECKPOSITION)
      TNT1 A 0 A_SpawnItemEx ("RLCyberdemonMkIIRocketTrail", 8, 0, 0, 0, 0, 0, 180, SXF_NOCHECKPOSITION)
      MNSS A 1 Bright
      Goto LostLaserGuidance
	  
   SelfDetonate:
      TNT1 A 0 A_ChangeFlag ("NOCLIP", 1)
      TNT1 A 0 A_ChangeFlag ("THRUACTORS", 1)
      TNT1 A 0 A_Stop
	  TNT1 A 0 A_DamageTarget (112, "Fire")
      TNT1 A 0 A_Die
	  Goto Death
   Death:
      TNT1 A 0 A_JumpIfInventory ("RLCyberdemonMkIITorpedoUnguided", 1, 2)
      TNT1 A 0 A_TakeInventory ("RLCyberdemonMkIITorpedoFired", 1, 0, AAPTR_TARGET)
      TNT1 A 0 A_SetScale (1.5)
      TNT1 A 0 A_StopSound(7)
      TNT1 A 0 A_SetTranslucent (0.80, 1)
	  TNT1 A 0 A_JumpIf(CallACS("DRLA_MonsterQuake") == 0, 3)
      TNT1 A 0 A_Quake(1, 18, 0, 1280, "")
      TNT1 A 0 A_Quake(5, 12, 0, 512, "")
      TNT1 A 0 A_Explode (64, 160)
	  TNT1 A 0 A_JumpIf(CallACS("GnuCustardCheck"), "GuncasterImpact")
      TNT1 A 0 A_PlaySound ("rlmonsters/mediumexp", 7, 1, 0, 0.5)
      TNT1 A 0 A_PlaySound("rlmonsters/mediumexp", CHAN_ITEM, 0.05, 0, 0.05)
      MEXP AB 4 Bright
      MEXP CD 3 Bright
      MEXP EF 2 Bright
      Stop
	  
  GuncasterImpact:
    TNT1 A 0 A_PlaySound("Matriarch/Hit", 5, 0.8)
    TNT1 A 0 A_PlaySound("Matriarch/Exp", 6, 1.0)
    TNT1 A 0 A_PlaySound("Matriarch/Exp", CHAN_ITEM, 0.05, 0, 0.05)
    TNT1 A 20 A_SpawnItemEx("RLGuncasterMonsterExplosionBig", 0,0,0, 0,0,0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION)
    Stop
   }
}

ACTOR RLCyberdemonMkIITorpedoDumbfire : RLCyberdemonMkIITorpedo
{
   states
   {
   Spawn:
      TNT1 A 0
      TNT1 A 0 A_PlaySound("cyberdemonmkii/missileloop", 7, 0.65, 0, 1.3)
	  Goto SpawnLoop
   SpawnLoop:
      TNT1 A 0 A_ScaleVelocity (1.01)
      TNT1 A 0 A_SpawnItemEx ("RLCyberdemonMkIIRocketTrail", 24, 0, 0, 0, 0, 0, 180, SXF_NOCHECKPOSITION)
      TNT1 A 0 A_SpawnItemEx ("RLCyberdemonMkIIRocketTrail", 16, 0, 0, 0, 0, 0, 180, SXF_NOCHECKPOSITION)
      TNT1 A 0 A_SpawnItemEx ("RLCyberdemonMkIIRocketTrail", 8, 0, 0, 0, 0, 0, 180, SXF_NOCHECKPOSITION)
      MNSS A 1 Bright
      Goto SpawnLoop
	  
   Death:
      TNT1 A 0 A_SetScale (1.5)
      TNT1 A 0 A_StopSound(7)
      TNT1 A 0 A_SetTranslucent (0.80, 1)
	  TNT1 A 0 A_JumpIf(CallACS("DRLA_MonsterQuake") == 0, 3)
      TNT1 A 0 A_Quake(1, 18, 0, 1280, "")
      TNT1 A 0 A_Quake(5, 12, 0, 512, "")
      TNT1 A 0 A_Explode (64, 160)
	  TNT1 A 0 A_JumpIf(CallACS("GnuCustardCheck"), "GuncasterImpact")
      TNT1 A 0 A_PlaySound ("rlmonsters/mediumexp", 7, 1, 0, 0.5)
      TNT1 A 0 A_PlaySound("rlmonsters/mediumexp", CHAN_ITEM, 0.05, 0, 0.05)
      MEXP AB 4 Bright
      MEXP CD 3 Bright
      MEXP EF 2 Bright
      stop
   }
}

ACTOR RLCyberdemonMkIITorpedoFired : RLPermanentMPInventory {}
ACTOR RLCyberdemonMkIITorpedoUnguided : RLPermanentMPInventory {}

ACTOR RLCyberdemonMkIITorpedoInterrupt : Powerup
{
	Powerup.Duration 3
   +INVENTORY.UNTOSSABLE
}


ACTOR RLCyberdemonMkIIGrenade : Rocket
{
  Radius 8
  Height 8
  Speed 16
  Damage (10*random(2,4))
  DamageType "Fire"
  PainType "Explosion"
  DeathType "Explosion"
  Gravity 0.65
  BounceType "Doom"
  BounceFactor 0.95
  WallBounceFactor 1.0
  BounceCount 0
  ReactionTime 200
  Scale 0.5
  +MTHRUSPECIES
  +THRUGHOST
  +NOTIMEFREEZE
  +BLOODSPLATTER
  +USEBOUNCESTATE
  +EXPLODEONWATER
  +SEEKERMISSILE
  +SKYEXPLODE
  -NOGRAVITY
  -RANDOMIZE
  -DEHEXPLOSION
  -ROCKETTRAIL
  BounceSound "rlmonsters/grenadebounce"
  DeathSound ""
  Obituary "%o didn't dodge the murderous bouncing bowling ball."
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 A 0 A_GiveInventory ("RLCyberdemonMkIIGrenadeActive", 1, AAPTR_TARGET)
//    TNT1 A 0 ThrustThingZ (0, 9, 1, 1)
  SpawnLoop:
    TBO4 AABBCCDD 1 Bright A_Countdown
    Loop
  Bounce:
    TNT1 A 0 A_JumpIfTargetInLOS (1, 0, JLOSF_PROJECTILE)
	Goto SpawnLoop
    TNT1 A 0 A_FaceTracer
    TNT1 A 0 A_ChangeVelocity (16,0,velz, CVF_RELATIVE | CVF_REPLACE)
	Goto SpawnLoop
/*  Bounce.Floor:
    TNT1 A 0 A_JumpIfTargetInLOS (1, 0, JLOSF_PROJECTILE)
	Goto SpawnLoop
    TNT1 A 0 A_FaceTracer
    TNT1 A 0 A_ChangeVelocity (16,0,velz, CVF_RELATIVE | CVF_REPLACE)
	Goto SpawnLoop
  Bounce.Ceiling:
    TNT1 A 0 A_JumpIfTargetInLOS (1, 0, JLOSF_PROJECTILE)
	Goto SpawnLoop
    TNT1 A 0 A_FaceTracer
    TNT1 A 0 A_ChangeVelocity (16,0,velz, CVF_RELATIVE | CVF_REPLACE)
	Goto SpawnLoop*/
  
  Death:
    TNT1 A 0 A_TakeInventory ("RLCyberdemonMkIIGrenadeActive", 1, 0, AAPTR_TARGET)
    TNT1 A 0 A_ChangeFlag ("NOGRAVITY", 1)
    TNT1 A 0 A_Stop
    TNT1 A 0 A_SetTranslucent (0.95, 1)
    TNT1 A 0 A_Explode (128,192,0)
	TNT1 A 0 A_SetScale (1.5)
	TNT1 A 0 A_JumpIf(CallACS("DRLA_MonsterQuake") == 0, 3)
    TNT1 A 0 A_Quake (1, 8, 0, 1024, "")
    TNT1 A 0 A_Quake (6, 8, 0, 512, "")
	TNT1 A 0 A_JumpIf(CallACS("GnuCustardCheck"), "GuncasterImpact")
    TNT1 A 0 A_PlaySound ("weapons/rocklx", 7, 1, 0, 0.5)
    TNT1 A 0 A_PlaySound("weapons/rocklx", CHAN_ITEM, 0.05, 0, 0.05)
    TNT1 A 0 A_CheckFloor ("FloorDeathAnimation")
	Goto DeathAnimation
  DeathAnimation:
    MEXP A 4 Bright
    MEXP B 4 Bright
    MEXP C 3 Bright
    MEXP D 3 Bright
    MEXP E 2 Bright
    MEXP F 2 Bright
    Stop
  FloorDeathAnimation:
    GLXP ABCDEFGHIJ 2 Bright
    Stop
	
  GuncasterImpact:
    TNT1 A 0 A_PlaySound("Matriarch/Hit", 5, 0.8)
    TNT1 A 0 A_PlaySound("Matriarch/Exp", 6, 1.0)
    TNT1 A 0 A_PlaySound("Matriarch/Exp", CHAN_ITEM, 0.05, 0, 0.05)
    TNT1 A 0 A_SpawnItemEx("RLGuncasterMonsterExplosion", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
    Stop
  }
}

ACTOR RLCyberdemonMkIIGrenadeActive : Powerup
{
	Powerup.Duration 300
   +INVENTORY.UNTOSSABLE
}


ACTOR RLDRPGSummonedCyberneticCyberdemon : RLCyberneticCyberdemon
{
  -COUNTKILL
  +NOBLOCKMONST
  +NOTELESTOMP
  +NOFEAR
  +SEEINVISIBLE
  +DONTDRAIN
  +ALWAYSFAST
  +QUICKTORETALIATE
  +MISSILEMORE
  +THRUSPECIES
  Species "Player"
  States
  {
  Spawn:
	TNT1 A 0 NoDelay ACS_NamedExecuteAlways("MonsterInit", 0)
    TNT1 A 0 A_GiveInventory ("RLMonsterInitializerToken", 1)
    TNT1 A 0 A_GiveInventory ("DRPGDRLASummonedMonsterToken", 1)
	Goto Super::Spawn
	See:
	TNT1 A 0 ACS_NamedExecuteAlways("MonsterInit", 0)
    TNT1 A 0 A_GiveInventory ("RLMonsterInitializerToken", 1)
    TNT1 A 0 A_GiveInventory ("DRPGDRLASummonedMonsterToken", 1)
	Goto Super::See
  }
}

ACTOR RLCCCyberneticCyberdemon : RLCyberneticCyberdemon
{
  +TOUCHY
  States
  {
  See:
    CCYB DD 4
    CCYB AA 4
    CCYB BB 4
    CCYB CC 4
    Loop
  Melee:
    CCYB G 6
    CCYB G 12 Bright
    CCYB G 12
    Goto See
  Missile:
    CCYB F 6
    CCYB F 12 Bright
    CCYB F 12
    Goto See
  Death:
    CCYB I 10
    CCYB J 10 Bright A_Scream
    CCYB KLM 10 Bright
    CCYB N 10 Bright A_NoBlocking
    CCYB OP 10
    CCYB Q 30
    CCYB Q -1 A_BossDeath
    Stop
  }
}
