ACTOR RoasterChainTimer : Inventory
{
	Inventory.MaxAmount 40
}

ACTOR RoasterLegMissile
{
  Radius 4
  Height 8
  Speed 35
  Damagetype "ExplosiveDamage"
  Damage 20
  Projectile
  +RANDOMIZE
  +DEHEXPLOSION
  +ROCKETTRAIL
  DeathSound "weapons/rocklx"
  Obituary "%o was fucked by a Roasterock leg missile." // "%o rode %k's rocket."
  States
  {
  Spawn:
	TNT1 A 0
	VZOM A 0 A_JumpIf(3 == (ACS_ExecuteWithResult(50,0,0,0)),"TurnIntoSeeker")
    RMIS A 1 Bright
    Goto Spawn+1
  TurnIntoSeeker:
	TNT1 A 0
	TNT1 A 0 A_ChangeFlag("SEEKERMISSILE",1)
	Goto SpawnSeeker
  SpawnSeeker:
	RMIS A 1 bright A_SeekerMissile(40, 15)
	Loop
  Death:
    TNT1 A 0
    TNT1 A 0 A_AlertMonsters
    TNT1 A 0 Radius_Quake(2,12,0,8,0)
    TNT1 AA 0 A_Explode(40,170)
    TNT1 AA 0 A_Explode(25,300)
    TNT1 A 0 A_SpawnItemEx("ExplosionRoast2")
    TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ImpactSpark2", random(-32,32), random(-32,32), random(-32,32), random(-5,5), random(-5,5), random(-1,5), 0, 128, 0)
    TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ImpactSpark2", random(-32,32), random(-32,32), random(-32,32), random(-5,5), random(-5,5), random(-1,5), 0, 128, 0)
    TNT1 A 20
    stop
  }
}

ACTOR RoasterShoulderMissile
{
  Radius 4
  Height 8
  Speed 25
  Damage 20
  Projectile
  Scale 0.5
  +RANDOMIZE
  +SHOOTABLE
  Damagetype "ExplosiveDamage"
  +NOBLOOD
  +SOLID
  Health 16
  -NOBLOCKMAP
  +ROCKETTRAIL
  SeeSound "shoulder/fly"
  DeathSound "weapons/rocklx"
  Obituary "%o was fucked by a Roasterock shoulder missile." // "%o rode %k's rocket."
  States
  {
  Spawn:
	TNT1 A 0
	VZOM A 0 A_JumpIf(3 == (ACS_ExecuteWithResult(50,0,0,0)),"TurnIntoSeeker")
    MIS2 A 1 Bright
    Goto Spawn+1
  TurnIntoSeeker:
	TNT1 A 0
	TNT1 A 0 A_ChangeFlag("SEEKERMISSILE",1)
	Goto SpawnSeeker
  SpawnSeeker:
	MIS2 A 1 bright A_SeekerMissile(40, 15)
	Loop
  Death:
	TNT1 A 0
    TNT1 A 0 A_AlertMonsters
    TNT1 A 0 Radius_Quake(3,12,0,8,0)
    TNT1 AA 0 A_Explode(50,170)
    TNT1 AA 0 A_Explode(35,300)
    TNT1 A 0 A_SpawnItemEx("ExplosionRoast2")
    TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ImpactSpark2", random(-32,32), random(-32,32), random(-32,32), random(-5,5), random(-5,5), random(-1,5), 0, 128, 0)
    TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ImpactSpark2", random(-32,32), random(-32,32), random(-32,32), random(-5,5), random(-5,5), random(-1,5), 0, 128, 0)
    TNT1 A 20
    stop
  }
}

ACTOR RoasterHeatMissileFast
{
  Radius 6
  Height 12
  Speed 30
  Damage 40
  Projectile
  +RANDOMIZE
  Damagetype "ExplosiveDamage"
  +SHOOTABLE
  +NOBLOOD
  +SOLID
  -THRUACTORS
  Health 64
  -NOBLOCKMAP
  +ROCKETTRAIL
  SeeSound "jave/fly"
  DeathSound "weapons/rocklx"
  Obituary "%o was fucked by a Roasterock heat missile." // "%o rode %k's rocket."
  States
  {
  Spawn:
	TNT1 A 0
	VZOM A 0 A_JumpIf(3 == (ACS_ExecuteWithResult(50,0,0,0)),"TurnIntoSeeker")
    MISL A 1 Bright
    Goto Spawn+1
  TurnIntoSeeker:
	TNT1 A 0
	TNT1 A 0 A_ChangeFlag("SEEKERMISSILE",1)
	Goto SpawnSeeker
  SpawnSeeker:
	MISL A 1 bright A_SeekerMissile(40, 15)
	Loop
  Death:
	TNT1 A 0
    TNT1 A 0 A_AlertMonsters
    TNT1 A 0 Radius_Quake(4,12,0,8,0)
    TNT1 AA 0 A_Explode(60,170)
    TNT1 AA 0 A_Explode(45,300)
    TNT1 A 0 A_SpawnItemEx("ExplosionRoast")
    TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ImpactSpark2", random(-32,32), random(-32,32), random(-32,32), random(-5,5), random(-5,5), random(-1,5), 0, 128, 0)
    TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ImpactSpark2", random(-32,32), random(-32,32), random(-32,32), random(-5,5), random(-5,5), random(-1,5), 0, 128, 0)
    TNT1 A 20
    stop
  }
}

ACTOR RoasterStepQuiet
{
 radius 1
 height 1
 +NOCLIP
 +CLIENTSIDEONLY
 States
 {
 Spawn:
  TNT1 A 0
  TNT1 A 1 A_PlaySoundEx("roaster/stepquiet","Weapon")
  stop
 }
}

ACTOR RoasterStep
{
 radius 1
 height 1
 +NOCLIP
 +CLIENTSIDEONLY
 States
 {
 Spawn:
  TNT1 A 0
  TNT1 A 1 A_PlaySoundEx("roaster/step","Weapon")
  stop
 }
}

ACTOR Roasterock 16505
{
  Health 12000
  Radius 40
  Height 39
  Mass 1000
  Speed 8
  PainChance 2
  Monster
  MinMissileChance 160
  MaxDropOffHeight 512
  Scale 1.25
  +BOSS
  +MISSILEMORE
  +FLOORCLIP
  +NORADIUSDMG
  +DONTMORPH
  +BOSSDEATH
  PainChance "QuickMelee", 0
 DamageFactor "head", 0.45
 DamageFactor "minorhead", 0.45
 DamageFactor "Decapitate", 0.45
 DamageFactor "Head_Shotgun", 0.55
 DamageFactor "ExplosiveDamage", 0.65
 DamageFactor "ItemExplode", 0.00
  SeeSound "roaster/sight"
  PainSound "roaster/pain"
  DeathSound "roaster/death"
  ActiveSound "roaster/idle"
  AttackSound "roaster/fire"
  Obituary "%o let \cIGeneral Roasterock \c-get %h."
  States
  {
  Spawn:
    ROST A 0
	ROST A 0 A_JumpIfInventory("HasSpawnedHead",1,"Wandering")
	ROST A 0 ACS_ExecuteAlways(625,0,44,0,0)
	ROST A 0 ACS_ExecuteWithResult(49,0,0,0)
	ROST A 0 A_GiveInventory("HasSpawnedHead",1)
	Goto Wandering
  SpawnTaunt:
	ROST A 20
	ROST A 0 A_PlaySound("roaster/sight")
	ROST LN 3
	ROST VWVWVW 6
	
	POSS F 0 A_SpawnItemEx("LongRifleCaseSpawn",0,0,25)
	TNT1 A 0 A_SpawnItemEx("ShooterLight",0,0,0)
	ROST H 0 A_PlaySound("roaster/fire", CHAN_WEAPON)
	ROST X 1 bright
	ROST V 1
	
	POSS F 0 A_SpawnItemEx("LongRifleCaseSpawn",0,0,25)
	TNT1 A 0 A_SpawnItemEx("ShooterLight",0,0,0)
	ROST H 0 A_PlaySound("roaster/fire", CHAN_WEAPON)
	ROST X 1 bright
	ROST V 1
	
	POSS F 0 A_SpawnItemEx("LongRifleCaseSpawn",0,0,25)
	TNT1 A 0 A_SpawnItemEx("ShooterLight",0,0,0)
	ROST H 0 A_PlaySound("roaster/fire", CHAN_WEAPON)
	ROST X 1 bright
	ROST V 1
	
	POSS F 0 A_SpawnItemEx("LongRifleCaseSpawn",0,0,25)
	TNT1 A 0 A_SpawnItemEx("ShooterLight",0,0,0)
	ROST H 0 A_PlaySound("roaster/fire", CHAN_WEAPON)
	ROST X 1 bright
	ROST V 1
	
	POSS F 0 A_SpawnItemEx("LongRifleCaseSpawn",0,0,25)
	TNT1 A 0 A_SpawnItemEx("ShooterLight",0,0,0)
	ROST H 0 A_PlaySound("roaster/fire", CHAN_WEAPON)
	ROST X 1 bright
	ROST V 1
	
	POSS F 0 A_SpawnItemEx("LongRifleCaseSpawn",0,0,25)
	TNT1 A 0 A_SpawnItemEx("ShooterLight",0,0,0)
	ROST H 0 A_PlaySound("roaster/fire", CHAN_WEAPON)
	ROST X 1 bright
	ROST V 1
	
	ROST V 8
	ROST NL 3
	
	ROST A 8
	Goto Static
  Static:
	ROST A 1
	Loop
  See:
	ROST A 0 A_Jump(16,"Sprint")
	ROST A 0 A_SpawnItemEx("RoasterStep",0,0,0)
	ROST AABB 3 A_Chase
	ROST A 0 A_SpawnItemEx("RoasterStep",0,0,0)
	ROST CCDD 3 A_Chase
	Loop
  Wandering:
	BSZM A 0 A_LookEx(0,0,2048,2048,100)
	ROST A 0 A_SpawnItemEx("RoasterStepQuiet",0,0,0)
	ROST AAAABBBB 2 A_Wander
	BSZM A 0 A_LookEx(0,0,2048,2048,100)
	ROST A 0 A_SpawnItemEx("RoasterStepQuiet",0,0,0)
	ROST CCCCDDDD 2 A_Wander
	Loop
  Sprint:
	ROST A 0 A_SpawnItemEx("RoasterStep",0,0,0)
	ROST AAAABBBB 1 A_Chase
	ROST A 0 A_SpawnItemEx("RoasterStep",0,0,0)
	ROST CCCCDDDD 1 A_Chase
	ROST A 0 A_SpawnItemEx("RoasterStep",0,0,0)
	ROST AAAABBBB 1 A_Chase
	ROST A 0 A_SpawnItemEx("RoasterStep",0,0,0)
	ROST CCCCDDDD 1 A_Chase
	ROST A 0 A_SpawnItemEx("RoasterStep",0,0,0)
	ROST AAAABBBB 1 A_Chase
	ROST A 0 A_SpawnItemEx("RoasterStep",0,0,0)
	ROST CCCCDDDD 1 A_Chase
	Goto See
  Missile:
	TNT1 A 0 A_Jump(16,"MegaAttack")
	TNT1 A 0 A_Jump(255,"Cannon", "Chaingun", "LegMissile", "ShoulderMissile", "Sprint")
    Goto See
  Cannon:
	ZCGN E 0 A_PlaySoundEx("roaster/prep","SoundSlot6")
	ROST EEEEEEEEEE 3 A_FaceTarget
	ROST J 0 A_PlaySound("roaster/javelin", CHAN_WEAPON)
    ROST F 2 bright A_CustomMissile("RoasterHeatMissileFast",30,10)
	ROST E 12
    Goto See
  Chaingun:
	ZCGN E 0 A_PlaySoundEx("roaster/start","SoundSlot6")
	ROST GGGGGGGGGG 3 A_FaceTarget
	ZCGN E 0 A_PlaySoundEx("roaster/loop","SoundSlot6",true)
	Goto ChainLoop
  ChainLoop:
	ROST G 0 A_JumpIfInventory("RoasterChainTimer",40,"ChainEnd")
	POSS F 0 A_SpawnItemEx("LongRifleCaseSpawn",0,0,25)
	TNT1 A 0 A_SpawnItemEx("ShooterLight",0,0,0)
	ROST H 0 A_PlaySound("roaster/fire", CHAN_WEAPON)
	ROST H 0 A_CustomBulletAttack(5.5, 5.5, 1, random(1,5)*3, "BulletPuff2", 0, CBAF_NORANDOM)
    ROST H 1 Bright
	ROST G 1 A_GiveInventory("RoasterChainTimer",1)
    ROST G 0 A_MonsterRefire(10, "ChainEnd")
    Loop
  ChainEnd:
	ZCGN E 0 A_PlaySoundEx("roaster/stop","SoundSlot6")
	ROST G 0 A_TakeInventory("RoasterChainTimer",40)
	ROST G 10
	Goto See
  LegMissile:
	ZCGN E 0 A_PlaySoundEx("roaster/prep","SoundSlot6")
	ROST IIIIIIIIII 3 A_FaceTarget
	ROST J 0 A_PlaySound("roaster/leg", CHAN_WEAPON)
    ROST J 2 bright A_CustomMissile("RoasterLegMissile",12,-10)
	ROST I 14
    Goto See
  ShoulderMissile:
	ZCGN E 0 A_PlaySoundEx("roaster/prep","SoundSlot6")
	ROST IIIIIIIIII 3 A_FaceTarget
	ROST J 0 A_PlaySound("roaster/shoulder", CHAN_WEAPON)
    ROST K 2 bright A_CustomMissile("RoasterShoulderMissile",42,15)
	ROST I 14
    Goto See
  MegaAttack:
	VZOM A 0 A_JumpIf(3 == (ACS_ExecuteWithResult(50,0,0,0)),1)
	Goto ShoulderMissile
	ROST L 0 A_PlaySound("roaster/pain")
	ROST LLLLLL 4 A_FaceTarget
	ROST J 0 A_PlaySound("roaster/javelin", CHAN_WEAPON)
	ROST J 0 A_PlaySoundEx("roaster/leg", "SoundSlot6")
	ROST J 0 A_PlaySoundEx("roaster/shoulder", "SoundSlot5")
	ROST L 0 A_CustomMissile("RoasterShoulderMissile",52,15)
	ROST L 0 A_CustomMissile("RoasterLegMissile",12,-10)
	ROST L 0 A_CustomMissile("RoasterHeatMissileFast",25,10)
    ROST M 2 bright
	ROST L 14
    Goto See
  Pain:
    ROST N 5 A_Pain
    Goto See
  Death:
	ZCGN E 0 A_StopSoundEx("SoundSlot6")
    ROST A 0 A_Scream
	TERM M 0 ACS_Execute(91,0,0,0,0)
	ROST OPQRSTU 6
	ROST U -1
    Stop
  }
}