Actor MechaDragonVC : TerminalArmorClass
{
Player.ScoreIcon "MECHMUGS"
player.startitem "BaseFlagPack", 1
PainSound "weapon/mm2pain"
player.displayname "MechaDragon"
player.soundclass "mechadragonc"
player.morphweapon "DragonBreathBoss"
player.viewheight 120
projectilepassheight 150
player.forwardmove 0.87,0.87
player.sidemove 0.85,0.85
player.jumpz 14
renderstyle translucent
alpha 0.0
States
{
Spawn:
PLAY A 0 
MDR2 B 1
MDR2 BA 6
Goto Spawn+2

See:
MDR2 BABADCDC 2
Goto Spawn+1

Animation1:
Missile:
MDR2 FEIGFEIG 2
Goto Spawn+2

Animation2:
MDR2 FEIG 4
goto Spawn+2

Animation3:
MDR2 BABA 2
loop

Animation4:
MDR2 FEIGFEIG 1
loop

Animation5:
TFOG D 6
TFOG EF 1
MDR2 JKJKJKJKJKJKJKJKJKJKJKJKJKJKJKJKJKJK 1
goto Spawn

Animation6:
TNT1 A 1
loop

ClassPain:
MDR2 HHHHHHHHHH 2 A_SpawnItem("PainFX",0,3)
Goto Spawn+1
WeaponGetM:
ClassDeath:
NOFX A 0 A_SpawnItemEx("DeadMechaDragon",0,0,0,0,0,0,0,1)
NOFX A 20 ACS_ExecuteAlways(999,0,0)
NOFX A 1 A_CheckPlayerDone
wait
}
}

Actor DeadMechaDragon : DeadYellowDevil
{
mass 57
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
MDR2 H 9 A_PlaySoundEx("weapon/pfdeath","Body")
goto Spawn2
}
}

Actor DragonBreathBoss : VCBaseWeapon
{
Weapon.AmmoGive 28
Weapon.AmmoType "Base28Ammo"
Weapon.AmmoUse 4
Obituary "$OB_MECHADRAGON1"
+WEAPON.NOAUTOAIM
States
{
Ready:
TNT1 A 0
TNT1 A 0 A_Stop
TNT1 A 0 SetPlayerProperty(0,1,4)
TNT1 A 0 A_ChangeFlag("INVULNERABLE",True)
TNT1 A 0 A_ChangeFlag("NOTELEFRAG",True)
TNT1 A 0 A_GiveInventory("InvProtection",1)
TNT1 A 0 ACS_ExecuteAlways(991,0,2755)
TNT1 A 0 ACS_ExecuteAlways(191,0,APROP_JumpZ,0,1)
TNT1 A 0 SetPlayerProperty(0,1,0)
TNT1 A 1 ACS_NamedExecuteWithResult("VC_SetState",6)
TNT1 A 0 A_Quake(3,12,0,400)
TNT1 A 40 A_PlaySoundEx("misc/dozer","Auto")
TNT1 A 0 A_Quake(3,12,0,400)
TNT1 A 40 A_PlaySoundEx("misc/dozer","Auto")
TNT1 A 0 A_Quake(4,50,0,400)
TNT1 AAAAAA 7 A_PlaySoundEx("misc/dozer","Auto")
TNT1 A 0 A_PlaySoundEx("weapon/dragonburst","Auto")
TNT1 A 0 A_Quake(4,50,0,400)
TNT1 A 0 A_GiveInventory("ShadowVisible")
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",5)
TNT1 A 0 SetPlayerProperty(0,0,0)
TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("DragonBurstFX",random(0,120),0,0,0,0,0,random(0,359))
TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("DragonBlockFX",random(0,80),0,0,random(3,15),0,random(5,40),random(0,359))
TNT1 A 0 A_SetGravity(0.0)
TNT1 A 0 ACS_ExecuteAlways(191,0,APROP_JumpZ,14,1)
TNT1 AAAAAAAA 1 ThrustThingZ(0,50,0,0)
TNT1 A 0 A_PlaySoundEx("weapon/dragonbreath","Weapon")
MDRH BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC 1 A_Stop
TNT1 A 0 SetPlayerProperty(0,0,4)
TNT1 A 0 SetPlayerProperty(0,0,0)
MDRH A 35 A_GiveInventory("GravityRestore")
TNT1 A 0 A_ChangeFlag("INVULNERABLE",False)
TNT1 A 0 A_ChangeFlag("NOTELEFRAG",False)
TNT1 A 0 A_TakeInventory("InvProtection",1)

Ready2:
TNT1 A 0
MDRH A 0 A_JumpIfInventory("DragonEggAmmo",1,"Ready2.TF")
MDRH A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,1)) MDRH A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
MDRH A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,1)) MDRH A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
MDRH A 0 A_GiveInventory("Base28Ammo",1)
goto Ready2

Ready2.TF:
MDRH A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,1)) MDRH A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") MDRH A 0 A_JumpIf(CallACS("VC_CheckBtn",3)==3,"User1")
MDRH A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",0,1)) MDRH A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") MDRH A 0 A_JumpIf(CallACS("VC_CheckBtn",3)==3,"User1")
MDRH A 0 A_GiveInventory("Base28Ammo",1)
goto Ready2

Deselect:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
MDRH A 1 A_Lower
Loop

Select:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
MDRH A 1 A_Raise
Loop


User1:
MDRH B 1 Offset(0,28)
MDRH C 0 A_GiveInventory("DragonTFHandler",1)
MDRH C 14 Offset(0,26)
MDRH B 2 Offset(0,28)
MDRH A 2 A_WeaponReady(WRF_NOFIRE)
goto Ready2


Fire:
TOAD A 0 A_GiveInventory("ToadChargeDamageGive")
MDRH B 1 Offset(-1,0) A_GiveInventory("DragonCharge",1)
MDRH B 1 Offset(1,0) A_GiveInventory("DragonCharge",1)
MDRH B 0 A_Refire

Fire2:
TOAD A 0 A_GiveInventory("ToadChargeDamageTake")
MDRH D 1 Offset(-3,0) A_GiveInventory("DragonM1Handler",1)
MDRH D 1 Offset(3,0) A_ClearRefire
MDRH D 1 Offset(-2,0)
MDRH C 1 Offset(2,0)
MDRH C 1 Offset(-1,0)
MDRH C 1 Offset(1,0)
MDRH CBAAAA 1 A_WeaponReady(WRF_NOFIRE)
MDRH A 0 A_JumpIfInventory("DragonCharge",9,"Fire2")
MDRH A 18 A_TakeInventory("DragonCharge",99)
goto Ready2


Altfire:
MDRH B 1
MDRH B 0 A_PlaySoundEx("weapon/magmamanbomb","Body")
TNT1 A 0 ACS_NamedExecuteAlways("VC_DragonSpeed",0,0)

AltHold:
MDRH D 0 A_JumpIfInventory("Base28Ammo",1,1)
goto Altfire.Finish
MDRH D 1 A_GiveInventory("DragonM2Handler",1)
MDRH C 1
MDRH D 0 A_Refire("AltHold")
goto Altfire.Finish

Altfire.Finish:
TNT1 A 0 ACS_NamedExecuteAlways("VC_DragonSpeed",0,1)
MDRH CCBAA 4 A_ClearRefire
TNT1 A 0 A_TakeInventory("VC_Timer",99)
goto Ready2


UltimateAttack:
TNT1 A 0 ACS_NamedExecuteAlways("VC_UltimateText",0,136)
TNT1 A 0 A_PlaySoundEx("classes/ultimateactivation","Auto")
MDRH A 0 A_PlaySoundEx("weapon/dragonult","Body")
TNT1 A 0 A_SpawnItemEx("TerminatorUltimateAlarm")
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",3)
TNT1 A 0 A_ChangeFlag("INVULNERABLE",True)
TNT1 A 0 A_GiveInventory("InvProtection",1)
TNT1 A 0 SetPlayerProperty(0,1,0)
TNT1 A 0 A_Stop

Ult.Wait:
TNT1 A 0 A_GiveInventory("WindUltCooldown",1)
MDRH A 0 ACS_ExecuteAlways(971,0,1234)
MDRH A 0 A_GiveInventory("CutterFlag",1)
MDRH AA 1 Offset(0,36) ThrustThingZ(0,1,0,0)
MDRH A 0 ACS_ExecuteAlways(991,0,2755)
MDRH A 0 A_GiveInventory("CutterFlag",1)
MDRH AA 1 Offset(0,38) ThrustThingZ(0,1,0,0)
MDRH A 0 A_JumpIfInventory("CutterFlag",53,"Ult.Next")
loop

Ult.Next:
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",4)
MDRH A 0 A_PlaySoundEx("weapon/gigadragoncry","Auto",0,2)
MDRH A 0 A_SpawnItemEx("DragonCry",36,0,90)
TNT1 A 0 SetPlayerProperty(0,1,3)
TNT1 A 0 SetPlayerProperty(0,0,0)
MDRH B 1 A_GunFlash

Ult.Loop:
TNT1 A 0 A_GiveInventory("WindUltCooldown",1)
MDRH AAAA 0 A_SpawnItemEx("MechaBlock",random(80,800),0,random(100,500),0,0,0,random(0,359))
MDRH A 0 A_SpawnItemEx("DragonUltHitbox")
TNT1 A 0 A_SpawnItemEx("MDUltEchoPreview",0,0,0,0,0,0,0,1)
MDRH C 1 Offset(-1,32)
MDRH AAAA 0 A_SpawnItemEx("MechaBlock",random(80,800),0,random(100,500),0,0,0,random(0,359))
MDRH A 0 A_SpawnItemEx("DragonUltHitbox")
TNT1 A 0 A_SpawnItemEx("MDUltEchoPreview",0,0,0,0,0,0,0,1)
MDRH C 1 Offset(1,32)
MDRH A 0 A_TakeInventory("TerminationUltimateAmmo",5)
MDRH A 0 A_JumpIfInventory("TerminationUltimateAmmo",1,"Ult.Loop")

Ult.Finish:
TNT1 A 0 A_ChangeFlag("INVULNERABLE",0)
TNT1 A 0 A_TakeInventory("InvProtection",1)
TNT1 A 0 A_GunFlash("NoFlash")
TNT1 A 0 SetPlayerProperty(0,0,3)
TNT1 A 0 A_TakeInventory("CutterFlag",99)
TNT1 A 0 A_TakeInventory("UltAttackFlag",1)
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",2)
MDRH BAAA 1 A_WeaponReady(WRF_NOFIRE)
goto Ready2


Flash:
TNT1 A 0 A_JumpIfInventory("IsDead",1,"NoFlash")
TNT1 A 0 A_Quake(4,35,0,500)
TNT1 A 33 A_PlaySoundEx("weapon/dragonquake","Weapon")
loop
}
}

actor DragonCharge : inventory
{
	inventory.amount 1
	inventory.maxamount 36
}

actor DragonEggAmmo : inventory
{
	inventory.amount 1
	inventory.maxamount 2
}

actor DragonM1Handler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",1)
TNT1 A 0 A_TakeInventory("DragonCharge",9)
TNT1 A 0 A_PlaySoundEx("weapon/dragonbreath","Weapon")
TNT1 A 0 A_FireCustomMissile("MechaFlame",0,0,0,76)
stop
}
}

actor MechaFlame
{
PROJECTILE
Obituary "$OB_MECHADRAGON1"
scale 2.5
speed 40
damagetype "DragonFlame"
damage(15)
radius 20
height 20
+HITTRACER
+NOCLIP
var int user_timer;
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 1 A_ChangeFlag("NOCLIP",0)
MECF AB 3
goto Spawn+3
XDeath:
TNT1 A 0 A_GiveInventory("DrillFlag")
Death:
TNT1 A 0 A_SpawnItemEx("OilPitIgnite",0,0,8)
TNT1 A 0 A_Stop
TNT1 A 0 A_JumpIfInventory("DrillFlag",1,1)
goto Nope
TNT1 A 0 A_JumpIfInventory("DragonFlameFlag",1,"Death3",AAPTR_TRACER)
TNT1 A 0 A_JumpIfInventory("DragonNoBurn",1,"Death3",AAPTR_TRACER)
SetDone:
TNT1 AAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("DragonFireFX2",0,random(-18,18),random(-18,18),random(-30,30),random(-30,30),random(-30,30))
TNT1 A 0 A_GiveInventory("DragonFlameFlag",1,AAPTR_TRACER)
TNT1 A 0 A_GiveInventory("DragonNoBurn",1,AAPTR_TRACER)
Latch:
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("cbm_istracerenemy",0)==0,"Nope")
TNT1 A 1 A_Warp(AAPTR_TRACER,0,0,0,0,WARPF_NOCHECKPOSITION|WARPF_COPYINTERPOLATION)
TNT1 A 0 A_SpawnItemEx("OilPitIgnite",0,0,8)
TNT1 A 0 A_JumpIfInventory("CutterFlag", 35, "Death2")
TNT1 A 0 A_GiveInventory("CutterFlag", 1)
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",1)==0,"Death3")
TNT1 A 0 A_JumpIf(user_timer >= 5,"Hit")
TNT1 A 0 A_SetUserVar("user_timer",user_timer+1)
Goto Latch
Hit:
TNT1 A 0 A_SetUserVar("user_timer",0)
TNT1 A 0 A_SpawnItemEx("MechaFlameDamage",-0,0,0,momx,momy,momz,0,SXF_NOCHECKPOSITION)
goto Latch
Death2:
TNT1 A 0 A_TakeInventory("PowerShock",1,0,AAPTR_TRACER)
TNT1 A 0 A_TakeInventory("PowerColor",1,0,AAPTR_TRACER)
Death3:
TNT1 A 0 A_TakeInventory("DragonFlameFlag",999,0,AAPTR_TRACER)
stop
Nope:
TNT1 A 0
stop
}
}

actor MechaFlameDamage : MegaShot
{
Damage (2)
DamageType "DragonBurn"
Obituary "$OB_MECHADRAGON1"
Radius 6
Height 5
States
{
Spawn:
TNT1 A 1
TNT1 A 2
stop
}
}

actor DragonFireFX : BasicClientSide
{
translation "192:192=216:216", "198:198=41:41"
renderstyle add
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
X_8C ABCD 2
X_8C A 0 A_Stop
X_8C A 2 A_SetScale(2.0)
X_8C B 2 A_SetScale(1.5)
X_8C C 2 A_SetScale(1.0)
X_8C D 2 A_SetScale(0.5)
stop
}
}

actor DragonFireFX2 : DragonFireFX
{
renderstyle normal
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
X_8C ABCD 1
X_8C A 0 A_Stop
X_8C A 1 A_SetScale(2.0)
X_8C B 1 A_SetScale(1.5)
X_8C C 1 A_SetScale(1.0)
X_8C D 1 A_SetScale(0.5)
stop
}
}

actor DragonFlameFlag : Inventory
{
Inventory.MaxAmount 1
}

actor DragonNoBurn : Powerup
{
Powerup.Duration 70
}

actor DragonM2Handler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_PlaySoundEx("weapon/mechabreath","Weapon")
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",1)
TNT1 A 0 A_TakeInventory("Base28Ammo",1)
TNT1 A 0 A_GiveInventory("VC_Timer",1)
TNT1 A 0 A_JumpIfInventory("VC_Timer",12,"Pickup12")
TNT1 A 0 A_JumpIfInventory("VC_Timer",11,"Pickup11")
TNT1 A 0 A_JumpIfInventory("VC_Timer",10,"Pickup10")
TNT1 A 0 A_JumpIfInventory("VC_Timer",9,"Pickup9")
TNT1 A 0 A_JumpIfInventory("VC_Timer",8,"Pickup8")
TNT1 A 0 A_JumpIfInventory("VC_Timer",7,"Pickup7")
TNT1 A 0 A_JumpIfInventory("VC_Timer",6,"Pickup6")
TNT1 A 0 A_JumpIfInventory("VC_Timer",5,"Pickup5")
TNT1 A 0 A_JumpIfInventory("VC_Timer",4,"Pickup4")
TNT1 A 0 A_JumpIfInventory("VC_Timer",3,"Pickup3")
TNT1 A 0 A_JumpIfInventory("VC_Timer",2,"Pickup2")
TNT1 A 0 A_FireCustomMissile("MechaBreath",0,0,0,52)
stop

Pickup2:
TNT1 A 0 A_FireCustomMissile("MechaBreath",2,0,0,52)
stop

Pickup3:
TNT1 A 0 A_FireCustomMissile("MechaBreath",4,0,0,52)
stop

Pickup4:
TNT1 A 0 A_FireCustomMissile("MechaBreath",6,0,0,52)
stop

Pickup5:
TNT1 A 0 A_FireCustomMissile("MechaBreath",4,0,0,52)
stop

Pickup6:
TNT1 A 0 A_FireCustomMissile("MechaBreath",2,0,0,52)
stop

Pickup7:
TNT1 A 0 A_FireCustomMissile("MechaBreath",0,0,0,52)
stop

Pickup8:
TNT1 A 0 A_FireCustomMissile("MechaBreath",-2,0,0,52)
stop

Pickup9:
TNT1 A 0 A_FireCustomMissile("MechaBreath",-4,0,0,52)
stop

Pickup10:
TNT1 A 0 A_FireCustomMissile("MechaBreath",-6,0,0,52)
stop

Pickup11:
TNT1 A 0 A_FireCustomMissile("MechaBreath",-4,0,0,52)
stop

Pickup12:
TNT1 A 0 A_FireCustomMissile("MechaBreath",-2,0,0,52)
TNT1 A 0 A_TakeInventory("VC_Timer",99)
stop
}
}

actor MechaBreath
{
PROJECTILE
Obituary "$OB_MECHADRAGON2"
scale 2.5
speed 45
+RIPPER
+NOCLIP
damagetype "DragonBreath"
damage(4)
radius 20
height 20
reactiontime 3
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 2 A_ChangeFlag("NOCLIP",0)
loopit:
MD2F ABCDABCDABCD 1 A_CheckFloor("Death")
MD2F EFGHEFGHEFGH 1 A_Explode(2,36,0,0,36)
Death:
TNT1 A 0 A_Stop
TNT1 A 0 A_PlaySoundEx("weapon/firestorm","Body")
TNT1 AAAAAAAAA 0 A_SpawnItemEx("DragonBreathFX",0,random(-18,18),random(0,48),random(-25,25),random(-25,25),random(-25,25))
TNT1 A 2 A_SpawnItemEx("OilPitIgnite",0,0,8)
stop
}
}

actor DragonBreathFX : BasicClientSide
{
translation "192:192=210:210", "198:198=222:222"
scale 2.5
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
X_8C EFG 1
X_8C A 0 A_ScaleVelocity(frandom(0.1,2))
X_8C A 1 A_SetScale(2.0)
X_8C B 1 A_SetScale(1.5)
X_8C C 1 A_SetScale(1.0)
X_8C D 1 A_SetScale(0.5)
stop
}
}

actor DragonBurnColor : PowerupGiver
{
Powerup.ColorMap 0.883, 0.453, 0.02, 0.9, 0.9, 0.9
powerup.duration -10
powerup.type "PowerColor"
+INVENTORY.AUTOACTIVATE
+INVENTORY.ALWAYSPICKUP
states
{
Pickup:
TNT1 A 0 
TNT1 A 999
stop
}
}

actor DragonTFHandler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",2)
TNT1 A 0 A_TakeInventory("DragonEggAmmo",1)
TNT1 A 0 A_PlaySoundEx("weapon/dragonegg","Weapon")
TNT1 A 0 A_JumpIfInventory("DrillFlag",1,"Pickup2")
TNT1 A 0 A_FireCustomMissile("MechaEgg",0,0,0,76)
TNT1 A 0 A_SpawnItemEx("DragonEggWatcher1")
TNT1 A 0 A_GiveInventory("DrillFlag",1)
stop

Pickup2:
TNT1 A 0 A_FireCustomMissile("MechaEgg2",0,0,0,76)
TNT1 A 0 A_SpawnItemEx("DragonEggWatcher2")
TNT1 A 0 A_TakeInventory("DrillFlag",1)
stop
}
}

actor MechaEgg
{
PROJECTILE
Obituary "$OB_MECHADRAGON3"
scale 2.5
+BOUNCEONWALLS
+NOCLIP
-NOGRAVITY
+DONTBLAST
+SKYEXPLODE
+BOUNCEONCEILINGS
+DONTREFLECT
gravity 1.0
radius 24
height 24
speed 60
damage(17)
+NOCLIP
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
MD2D E 1 A_ChangeFlag("NOCLIP",0)
MD2D E 1 A_CheckCeiling("Down")
goto Spawn+3
Down:
MD2D E 1 ThrustThingZ(0,5,1,1)
loop
Death:
MD2D E 0 A_Stop
MD2D E 0 A_ChangeFlag("NOGRAVITY",1)
MD2D E 35 A_ChangeFlag("NOINTERACTION",1)
MD2D JEJEJEJEJEJEJEJEJE 1
XDeath:
MD2D F 0 A_Stop
MD2D F 0 A_ChangeFlag("NOGRAVITY",1)
MD2D F 0 A_ChangeFlag("NOINTERACTION",1)
MD2D F 0 A_PlaySoundEx("weapons/mm2/crashbombfire","Body")
MD2D F 0 A_Jump(256,"XDeath2")
goto XDeath2
XDeath2:
MD2D F 0 A_SpawnItemEx("MiniDragon",0,0,8,0,0,10)
MD2D FGHIIIIOIOIOIOIOIOIOIOIOI 1
stop
}
}

actor MechaEgg2 : MechaEgg
{
States
{
XDeath2:
MD2D F 0 A_SpawnItemEx("MiniDragon2",0,0,8,0,0,10)
MD2D FGHIIIIOIOIOIOIOIOIOIOIOI 1
stop
}
}

actor MiniDragon
{
Obituary "$OB_MECHADRAGON4"
Projectile
+BOUNCEONWALLS
+BOUNCEONFLOORS
+BOUNCEONCEILINGS
+NOEXPLODEFLOOR
+SEEKERMISSILE
+RIPPER
+NOTARGETSWITCH
+SKYEXPLODE
+GHOST
+THRUGHOST
+DONTREFLECT
damagetype "MechaDragon"

height 20
radius 20

speed 24
damage (2)
WallBounceFactor 1

scale 2.5

reactiontime 420
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 0 A_PlaySoundEx("weapon/minidragon","Body")
MD2D AABBAABBAABBAABB 1 ThrustThingZ(0,2,1,1)
MD2D A 0 A_Stop

Looking:
TNT1 AAAA 0 A_Countdown
MD2D AB 2 A_SeekerMissile(1, 6, SMF_LOOK|SMF_PRECISE, 256)
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Death")
TNT1 A 0 A_GiveInventory("CutterFlag",1)
TNT1 A 0 A_JumpIfInventory("CutterFlag",10,"Missile")
loop

Missile:
MD2D C 0 A_Stop
MD2D CCDDCCDD 1 A_FaceTracer(0,0)
MD2D B 0 A_PlaySoundEx("weapon/megaarmmini","Body")
HAIK B 0 A_CustomMissile("MiniDragonShot",44,0,0,CMF_AIMDIRECTION, pitch)
MD2D CDCDCDCDCD 2 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Death")
HAIK AAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_Countdown
MD2D ABAB 2 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Death")
HAIK A 0 A_Recoil(-20)
TNT1 A 0 A_TakeInventory("CutterFlag",99)
PAND A 0 A_RearrangePointers(AAPTR_DEFAULT,AAPTR_DEFAULT,AAPTR_NULL)
goto Looking

Death:
TNT1 A 0 A_GiveToTarget("DragonEggCancel1")
goto Death2

Death2:
TNT1 A 0 A_Stop
TNT1 A 0 A_PlaySoundEx("weapon/mm2pain","Body")
TNT1 A 0 A_GiveToTarget("DragonEggAmmo",1)
MMFX FGHI 2
stop
}
}

actor MiniDragon2 : MiniDragon
{
States
{
Death:
TNT1 A 0 A_GiveToTarget("DragonEggCancel2")
goto Death2
}
}

actor MiniDragonShot
{
PROJECTILE
Obituary "$OB_MECHADRAGON4"
scale 2.5
speed 40
damagetype "MechaDragon"
damage(14)
radius 12
height 12
reactiontime 3
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
MD2D KLMLN 2
goto Spawn+2
Death:
TNT1 A 0 A_SpawnItemEx("OilPitIgnite",0,0,8)
stop
}
}

actor DragonUltHitbox : BasicExplosion
{
Obituary "$OB_MECHADRAGON5"
damagetype "DragonUlt"
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_Explode(1000,66,0,0,66)
stop
}
}

actor MDUltEchoPreview : BasicHelper
{
+CLIENTSIDEONLY
scale 1.9
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_JumpIf(CallACS("GVH_IsTargetClient")==1,"Death")
goto Spawn2
Spawn2:
TNT1 A 0 A_SpawnItemEx("MDUltEcho",0,0,0,0,0,0,0,1)
TNT1 A 1
stop
Death:
TNT1 A 0
stop
}
}

actor MDUltEcho : BasicGraphicEffect
{
Renderstyle add
alpha 0.9
Radius 2
Height 2
speed 1000
States
{
Spawn:
TNT1 A 0
MDR2 FEIGFEIG 1 A_FadeOut(0.1)
stop
}
}

actor MechaBlock
{
PROJECTILE
-NOGRAVITY
+DONTREFLECT
gravity 1.1
Obituary "$OB_MECHADRAGON5"
scale 2.5
speed 45
damagetype "DragonUlt"
reactiontime 350
damage(25)
radius 16
height 16
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
MD2B A 1 A_GiveToTarget("WindUltCooldown",1)
MD2B A 0 A_CheckFloor("Death")
MD2B A 0 A_Countdown
goto Spawn+2
Death:
TNT1 A 0 A_PlaySound("weapon/dragonbreak","Body",0.4)
TNT1 A 0 A_SpawnItemEx("MechaBlockBit1",random(0,16),0,random(0,16),random(5,8),0,random(4,10),random(0,359))
TNT1 A 0 A_SpawnItemEx("MechaBlockBit2",random(0,16),0,random(0,16),random(5,8),0,random(4,10),random(0,359))
TNT1 A 0 A_SpawnItemEx("MechaBlockBit3",random(0,16),0,random(0,16),random(5,8),0,random(4,10),random(0,359))
TNT1 A 0 A_SpawnItemEx("MechaBlockBit4",random(0,16),0,random(0,16),random(5,8),0,random(4,10),random(0,359))
TNT1 A 0 A_SpawnItemEx("MechaBlockBit5",random(0,16),0,random(0,16),random(5,8),0,random(4,10),random(0,359))
TNT1 A 2 A_SpawnItemEx("MechaBlockBit6",random(0,16),0,random(0,16),random(5,8),0,random(4,10),random(0,359))
stop
}
}

actor MechaBlockBit1 : MechaBlock
{
gravity 1.3
damage(10)
radius 8
height 8
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
MD2B B 1
goto Spawn+2
Death:
TNT1 A 0
stop
}
}

actor MechaBlockBit2 : MechaBlockBit1
{
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
MD2B C 1
goto Spawn+2
}
}

actor MechaBlockBit3 : MechaBlockBit1
{
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
MD2B D 1
goto Spawn+2
}
}

actor MechaBlockBit4 : MechaBlockBit1
{
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
MD2B E 1
goto Spawn+2
}
}

actor MechaBlockBit5 : MechaBlockBit1
{
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
MD2B F 1
goto Spawn+2
}
}

actor MechaBlockBit6 : MechaBlockBit1
{
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
MD2B G 1
goto Spawn+2
}
}

actor DragonCry : BasicClientSide
{
translation "239:239=4:4"
scale 7.5
States
{
Spawn:
TNT1 A 0
MDRH A 0 A_Quake(7,5,0,1000)
MDRH A 0 A_Quake(6,10,0,1000)
MDRH A 0 A_Quake(5,15,0,1000)
MDRH A 0 A_Quake(4,20,0,1000)
MDRH A 0 A_Quake(3,25,0,1000)
MDRH A 0 A_Quake(2,30,0,1000)
MDRH A 0 A_Quake(1,35,0,1000)

loopit:
SLOD DEFGH 1
SLOD D 0 A_FadeOut(0.16)
loop
}
}

actor DragonBlockFX// : BasicClientSide
{
PROJECTILE
-NOGRAVITY
damage(10)
scale 2.5
Obituary "$OB_MECHADRAGON5"
damagetype "DragonUlt"
reactiontime 105
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
MD2B A 0 ThrustThingZ(0,4,1,1)
MD2B A 1 A_Countdown
goto Spawn+2
}
}

actor DragonBurstFX : BasicClientSide
{
States
{
Spawn:
TNT1 A 0
NAPA E 1 A_Jump(128,1)
NAPA E 1 A_Jump(128,1)
NAPA F 1 A_Jump(128,1)
NAPA F 1 A_Jump(128,1)
NAPA G 1 A_Jump(128,1)
NAPA G 1 A_Jump(128,1)
NAPA H 1 A_Jump(128,1)
NAPA H 1 A_Jump(128,1)
NAPA I 1 A_Jump(128,1)
NAPA I 1 A_Jump(128,1)
NAPA J 1 A_Jump(128,1)
NAPA J 1 A_Jump(128,1)
NAPA K 1 A_Jump(128,1)
NAPA K 1 A_Jump(128,1)
NAPA L 1 A_Jump(128,1)
NAPA L 1 A_Jump(128,1)
NAPA M 1 A_Jump(128,1)
NAPA M 1 A_Jump(128,1)
NAPA N 1 A_Jump(128,1)
NAPA N 1 A_Jump(128,1)
NAPA O 1 A_Jump(128,1)
NAPA O 1 A_Jump(128,1)
NAPA P 1 A_Jump(128,1)
NAPA P 1 A_Jump(128,1)
NAPA Q 1 A_Jump(128,1)
NAPA Q 1 A_Jump(128,1)
NAPA R 1 A_Jump(128,1)
NAPA R 1 A_Jump(128,1)
NAPA S 1 A_Jump(128,1)
NAPA S 1 A_Jump(128,1)
TNT1 A 0
stop
}
}

actor DragonEggWatcher1
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
reactiontime 700
States
{
Spawn:
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "Death")
TNT1 A 1 A_JumpIfInTargetInventory("DragonEggCancel1",1,"Death2")
TNT1 A 0 A_Countdown
loop
Death:
TNT1 A 0 A_GiveToTarget("DragonEggAmmo",1)
Death2:
TNT1 A 0
stop
}
}

actor DragonEggWatcher2 : DragonEggWatcher1
{
States
{
Spawn:
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0, "Death")
TNT1 A 1 A_JumpIfInTargetInventory("DragonEggCancel2",1,"Death2")
TNT1 A 0 A_Countdown
loop
}
}

actor DragonEggCancel1 : Powerup
{
Powerup.Duration 5
}

actor DragonEggCancel2 : Powerup
{
Powerup.Duration 5
}