/////////////////////////////////////////////
//         COPY MACHINE (ARCHVILE)         //
/////////////////////////////////////////////

Actor CopyMachine 30615
{
//$Category MM8BDM-Monsters (Doom)
//$Title Copy Machine (Archvile)
//$Sprite D024B8B2
Tag "Copy Machine"
MONSTER
Species "CopyMachineMonster"
BloodType "MonsterRipperProtect_Helper"
//+NOBLOOD
+FLOORCLIP
-NOINFIGHTING
+QUICKTORETALIATE
+NOTARGET
Health 700
Radius 20
Height 56
Speed 1 // 10
PainChance 10
PainChance "WindStorm", 10
PainChance "GravityHold", 10
PainChance "ConcreteShot", 10
PainChance "TornadoBlow", 10
PainChance "BlackHoleBomb", 10
PainChance "TimeStopper", 256
DamageFactor "Dummy", 0.0
MaxTargetRange 896
DamageType "Buster"
SeeSound "misc/bombcount"
PainSound "misc/monkeybutt"
DeathSound "monster/death"
ActiveSound "misc/repairing"
Obituary "$OB_VILE"
RenderStyle Translucent
Alpha 0.85
Mass 9999
Scale 2.5
States
{
Spawn:
MEGM A 0 NoDelay A_SpawnItemEx("CopyMachine_MachinePart")
MEGM A 0 A_Stop
MEGM A 0 A_TakeInventory("LightningBoltAmmo",1)
MEGM A 0 A_TakeInventory("ThunderBoltAmmo",1)
MEGM A 0 A_TakeInventory("JunkShieldAmmo",1)
MEGM A 0 A_TakeInventory("CutterFlag",1)
MEGM A 0 ACS_NamedExecuteAlways("Monster_PassivePain",0)
MEGM A 0 A_SpawnItemEx("MonsterHitbox20_56")
MEGM A 10 A_Look
Goto Spawn+8

FirstSee:
EMEG S 0 A_TakeInventory("CutterFlag",1)
EMEG S 0 ACS_NamedExecuteAlways("Monster_PassivePain",0)
EMEG S 0 A_PlaySoundEx("misc/archivescreen","Body")
EMEG A 1 A_SetScale(0.5,2.5)
EMEG A 1 A_SetScale(1.5,2.5)
EMEG A 1 A_SetScale(3.5,2.5)
EMEG A 1 A_SetScale(2.5,2.5)
EMEG A 2
EMEG A 0 A_GiveInventory("CutterFlag",1)
Goto See

See:
EMEG A 0 A_JumpIfInventory("CutterFlag",1,"SeeLoop")
Goto FirstSee
SeeStart:
EMEG B 0 A_PlaySoundEx("misc/archivescreen","Body")
EMEG B 0 A_SetScale(0.5,2.5)
EMEG B 0 A_VileChase
EMEG B 1 A_SetScale(1.5,2.5)
EMEG B 0 A_ChangeVelocity(6,0,momz,3)
EMEG B 1 A_SetScale(3.5,2.5)
EMEG B 0 A_SetScale(2.5,2.5)
Goto SeeLoop+2
SeeLoop:
EMEG B 1 A_VileChase
EMEG B 1 A_ChangeVelocity(6,0,momz,3)
EMEG B 1 A_VileChase
EMEG B 1 A_ChangeVelocity(6,0,momz,3)
EMEG B 1 A_VileChase
EMEG C 1 A_ChangeVelocity(6,0,momz,3)
EMEG C 1 A_VileChase
EMEG C 1 A_ChangeVelocity(6,0,momz,3)
EMEG C 1 A_VileChase
EMEG C 1 A_ChangeVelocity(6,0,momz,3)
EMEG D 1 A_VileChase
EMEG D 1 A_ChangeVelocity(6,0,momz,3)
EMEG D 1 A_VileChase
EMEG D 1 A_ChangeVelocity(6,0,momz,3)
EMEG D 1 A_VileChase
EMEG E 1 A_ChangeVelocity(6,0,momz,3)
EMEG E 1 A_VileChase
EMEG E 1 A_ChangeVelocity(6,0,momz,3)
EMEG E 1 A_VileChase
EMEG E 1 A_ChangeVelocity(6,0,momz,3)
Loop

Missile:
TNT1 A 0 A_Jump(256,"MissileDynamo","MissileMagnet","MissileDM3")
MissileDynamo:
CPMC T 0 A_Stop
CPMC T 0 A_PlaySoundEx("misc/archivescreen","Body") // A_VileStart
CPMC T 0 A_FaceTarget
CPMC T 0 A_GiveInventory("LightningBoltAmmo",1)
CPMC T 1 A_SetScale(0.5,2.5)
CPMC T 1 A_SetScale(1.5,2.5)
CPMC T 1 A_SetScale(3.5,2.5)
CPMC T 1 A_SetScale(2.5,2.5)
CPMC TU 3
CPMC F 0 A_VileTarget("CopyMachineTarget")
CPMC F 0 A_TakeInventory("LightningBoltAmmo",1)
CPMC F 0 A_GiveInventory("ThunderBoltAmmo",1)
CPMC V 4 
CPMC Y 4
CPMC F 0 Thing_SetTranslation(0,30615) //COPYMACHINEMONSTER
CPMC F 0 A_FaceTarget
CPMC F 0 A_PlaySoundEx("monster/copymachinecharge","Body")
CPMC F 0 A_SpawnItemEx("CopyMachineOrbiter1")
CPMC F 0 A_SpawnItemEx("CopyMachineOrbiter2")
CPMC GFGF 2
CPMC F 0 A_FaceTarget
CPMC GFGF 2
CPMC F 0 A_FaceTarget
CPMC GFGF 2
CPMC F 0 A_FaceTarget
CPMC GFGF 2
CPMC F 0 A_FaceTarget
CPMC GFGF 2 
CPMC F 0 A_FaceTarget
CPMC GF 1
CPMC F 0 A_PlaySoundEx("weapon/lightningbolt","Weapon")
CPMC G 0 A_SpawnItemEx("LightningStartFX1",4,0,48,0,0,0,0,1)
CPMC GF 1
CPMC G 0 A_SpawnItemEx("LightningStartFX2",4,0,48,0,0,0,0,1)
CPMC GFGF 1
CPMC F 0 A_JumpIfTargetInLOS(2)
CPMC F 0 A_Jump(256,2)
CPMC F 0 A_CustomBulletAttack(0,0,1,-1,"CopyMachine_LightningPuff",0,CBAF_NORANDOMPUFFZ)
CPMC F 0 A_VileAttack("weapon/lightningbolt",80,70,70,1.0,"TopSpin",VAF_DMGTYPEAPPLYTODIRECT)
CPMC F 0 Thing_SetTranslation(0,30502) //ALLYELLOW
CPMC F 2 Bright 
CPMC F 0 Thing_SetTranslation(0,0) //MEGABUSTER
CPMC XV 3
CPMC F 0 A_TakeInventory("ThunderBoltAmmo",1)
CPMC F 0 A_GiveInventory("LightningBoltAmmo",1)
CPMC T 18
CPMC B 0 A_TakeInventory("LightningBoltAmmo",1)
Goto MissileEnd

MissileMagnet:
CPMC A 0 A_Stop
CPMC A 0 A_PlaySoundEx("misc/archivescreen","Body") // A_VileStart
CPMC A 0 A_FaceTarget
CPMC A 0 A_GiveInventory("MagnetMissileAmmo",2)
CPMC A 1 A_SetScale(0.5,2.5)
CPMC A 1 A_SetScale(1.5,2.5)
CPMC A 1 A_SetScale(3.5,2.5)
CPMC A 1 A_SetScale(2.5,2.5)
CPMC DD 3
CPMC A 0 A_VileTarget("CopyMachineTarget")
CPMC F 0 A_PlaySoundEx("misc/lightelevator","Body")
CPMC F 0 A_SpawnItemEx("CopyMachineOrbiter3")
CPMC CBCB 2
CPMC F 0 A_FaceTarget
CPMC CBCB 2
CPMC B 0 A_FaceTarget
CPMC CBCB 2
CPMC B 0 A_FaceTarget
CPMC CBCB 2
CPMC B 0 A_FaceTarget
CPMC CBCB 2
CPMC B 0 A_FaceTarget
CPMC CBCB 2
CPMC B 0 A_FaceTarget
CPMC CBCBCB 1
CPMC D 0 A_TakeInventory("MagnetMissileAmmo",1)
CPMC D 2
CPMC D 0 A_JumpIfTargetInLOS(2)
CPMC D 0 A_Jump(256,2)
CPMC D 0 A_CustomBulletAttack(0,0,1,-1,"CopyMachine_MagnetPuff",0,CBAF_NORANDOMPUFFZ)
CPMC D 0 A_VileAttack("misc/marsswitch",80,70,70,1.0,"TopSpin",VAF_DMGTYPEAPPLYTODIRECT)
CPMC D 0 Thing_SetTranslation(0,30502) //ALLYELLOW
CPMC D 2 Bright
CPMC D 0 Thing_SetTranslation(0,0) //MEGABUSTER
CPMC D 6
CPMC A 18
CPMC A 0 A_TakeInventory("MagnetMissileAmmo",2)
Goto MissileEnd

MissileDM3:
CPMC E 0 A_Stop
CPMC E 0 A_PlaySoundEx("misc/archivescreen","Body") // A_VileStart
CPMC E 0 A_FaceTarget
CPMC E 0 A_GiveInventory("LightningBoltAmmo",1)
CPMC E 1 A_SetScale(0.5,2.5)
CPMC E 1 A_SetScale(1.5,2.5)
CPMC E 1 A_SetScale(3.5,2.5)
CPMC E 1 A_SetScale(2.5,2.5)
CPMC ES 3
CPMC S 0 A_VileTarget("CopyMachineTarget")
CPMC SS 4
CPMC S 0 A_FaceTarget
CPMC S 0 A_PlaySoundEx("misc/eclipseshockwave","Body")
CPMC SZSZ 2
CPMC S 0 A_FaceTarget
CPMC SZSZ 2
CPMC S 0 A_FaceTarget
CPMC SZSZSZSZ 1
CPMC S 0 A_FaceTarget
CPMC SZSZSZSZ 1
CPMC S 0 A_FaceTarget
CPMC SZSZSZZZ 1
CPMC S 0 A_FaceTarget
CPMC ZZZZZZZZ 1
CPMC S 0 A_JumpIfTargetInLOS(2)
CPMC S 0 A_Jump(256,2)
CPMC S 0 A_CustomRailgun(0,27,0,0,RGF_SILENT|RGF_EXPLICITANGLE,1,0,"MonsterNothing",1.5,0,0,0,10,0,"CopyMachine_DM3Trail",20)
CPMC S 0 A_VileAttack("weapon/coilfire2",80,70,70,1.0,"TopSpin",VAF_DMGTYPEAPPLYTODIRECT)
CPMC S 0 Thing_SetTranslation(0,30502) //ALLYELLOW
CPMC S 2 Bright
CPMC W 0 Thing_SetTranslation(0,0) //MEGABUSTER
CPMC W 6
CPMC E 18
CPMC E 0 A_TakeInventory("LightningBoltAmmo",1)
Goto MissileEnd

MissileEnd:
CPMC B 0 A_PlaySoundEx("misc/archivescreen","Body")
EMEG B 1 A_SetScale(0.5,2.5)
EMEG B 1 A_SetScale(1.5,2.5)
EMEG B 1 A_SetScale(3.5,2.5)
EMEG B 1 A_SetScale(2.5,2.5)
Goto SeeLoop

Heal:
CPMC H 0 A_Stop
CPMC H 0 A_PlaySoundEx("misc/archivescreen","Body")
CPMC H 0 A_GiveInventory("JunkShieldAmmo",1)
CPMC H 1 A_SetScale(0.5,2.5)
CPMC H 1 A_SetScale(1.5,2.5)
CPMC H 1 A_SetScale(3.5,2.5)
CPMC I 1 A_SetScale(2.5,2.5)
CPMC I 2
CPMC HIHIHIHI 3
CPMC B 0 A_PlaySoundEx("misc/archivescreen","Body")
CPMC H 0 A_TakeInventory("JunkShieldAmmo",1)
EMEG B 1 A_SetScale(0.5,2.5)
Goto SeeStart

Pain:
EMEG H 0 A_Stop
Pain.WindStorm:
Pain.GravityHold:
Pain.ConcreteShot:
Pain.TornadoBlow:
Pain.BlackHoleBomb:
EMEG H 0 Thing_SetTranslation(0,0) //MEGABUSTER
EMEG H 0 A_PlaySoundEx("misc/archivescreen","Body")
EMEG H 0 A_TakeInventory("LightningBoltAmmo",1)
EMEG H 0 A_TakeInventory("ThunderBoltAmmo",1)
EMEG H 0 A_TakeInventory("JunkShieldAmmo",1)
EMEG H 0 A_TakeInventory("MagnetMissileAmmo",2)
EMEG H 0 A_GiveInventory("SuperArmAmmo",1)
EMEG H 1 A_SetScale(0.5,2.5)
EMEG H 1 A_SetScale(1.5,2.5)
EMEG H 1 A_SetScale(3.5,2.5)
EMEG H 1 A_SetScale(2.5,2.5)
EMEG H 5 A_Pain
EMEG H 0 A_TakeInventory("SuperArmAmmo",1)
EMEG H 1
Goto SeeLoop

Pain.TimeStopper:
EMEG H 0 A_Stop
EMEG H 0 A_PlaySoundEx("misc/archivescreen","Body")
EMEG H 0 A_TakeInventory("LightningBoltAmmo",1)
EMEG H 0 A_TakeInventory("ThunderBoltAmmo",1)
EMEG H 0 A_TakeInventory("JunkShieldAmmo",1)
EMEG H 0 A_TakeInventory("MagnetMissileAmmo",2)
EMEG H 0 A_GiveInventory("SuperArmAmmo",1)
EMEG H 1 A_SetScale(0.5,2.5)
EMEG H 1 A_SetScale(1.5,2.5)
EMEG H 1 A_SetScale(3.5,2.5)
EMEG H 1 A_SetScale(2.5,2.5)
EMEG H 0 Thing_SetTranslation(0,0) //MEGABUSTER
EMEG H 0 A_ChangeFlag("NOPAIN",true)
EMEG "########################################################################################" 1 A_SpawnItemEx("TimeStopGFX",random(8,56),0,random(0,72),0,0,0,random(0,359),0,80)
EMEG H 0 A_ChangeFlag("NOPAIN",false)
Goto See

Death:
XDeath:
CPMC J 0 A_Stop
CPMC J 0 A_FaceTarget
CPMC J 0 Thing_SetTranslation(0,0) //MEGABUSTER
CPMC J 0 A_Scream
CPMC J 0 A_NoBlocking
CPMC J 0 A_JumpIf(CallACS("Monster_CanDropWeapon"),4)
CPMC J 0 A_Jump(28,2)
CPMC J 0 A_JumpIf(True,2)
CPMC J 0 ACS_NamedExecuteWithResult("Monster_WeaponDrop",7) //Deadscope Upgrade
CPMC J 0 A_TakeInventory("LightningBoltAmmo",1)
CPMC J 0 A_TakeInventory("ThunderBoltAmmo",1)
CPMC J 0 A_TakeInventory("JunkShieldAmmo",1)
CPMC J 0 A_TakeInventory("MagnetMissileAmmo",2)
CPMC J 0 A_TakeInventory("SuperArmAmmo",1)
CPMC J 0 A_GiveInventory("DrillFlag",1)
CPMC J 0 A_PlaySoundEx("misc/archivescreen","Body")
// Corpse can't raise so taking my sweet time animating here
CPMC J 1 A_SetScale(0.5,2.5)
CPMC J 1 A_SetScale(1.5,2.5)
CPMC J 1 A_SetScale(3.5,2.5)
CPMC J 1 A_SetScale(2.5,2.5)
CPMC J 5
CPMC KJKJK 12 A_SetTranslucent(Alpha-0.05)
CPMC [ 9 A_SetTranslucent(Alpha-0.05)
CPMC LMNMLL 9 A_SetTranslucent(Alpha-0.035) 
CPMC L 0 A_PlaySoundEx("monster/copymachinebye","Weapon")
CPMC OPQ 2 A_SetTranslucent(Alpha-0.05)
TNT1 A -1
Stop
}
}

Actor CopyMachineOrbiter1 : MonsterReviveFX1
{
-CLIENTSIDEONLY
-NOINTERACTION
Translation "210:210=96:96", "229:229=240:240", "248:248=96:96"
Alpha 1.0
States
{
Spawn:
TNT1 A 0 NoDelay A_JumpIfInTargetInventory("ThunderBoltAmmo",1,"SpawnLoop")
Goto Death
SpawnLoop:
LBFX KM 1 A_Warp(AAPTR_TARGET,0,-48,32,user_angle,WARPF_ABSOLUTEANGLE|WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
TNT1 A 0 A_SetUserVar("user_angle",user_angle+30)
Goto Spawn
}
}

Actor CopyMachineOrbiter2 : CopyMachineOrbiter1
{
States
{
Spawn:
TNT1 A 0 NoDelay A_JumpIfInTargetInventory("ThunderBoltAmmo",1,"SpawnLoop")
Goto Death
SpawnLoop:
LBFX KM 1 A_Warp(AAPTR_TARGET,0,48,32,user_angle,WARPF_ABSOLUTEANGLE|WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
TNT1 A 0 A_SetUserVar("user_angle",user_angle+30)
Goto Spawn
}
}

Actor CopyMachineOrbiter3 : CopyMachineOrbiter1
{
States
{
Spawn:
TNT1 A 0 NoDelay A_JumpIfInTargetInventory("MagnetMissileAmmo",2,"SpawnLoop")
Goto Death
SpawnLoop:
CPMC \ 1 A_Warp(AAPTR_TARGET,0,0,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
CPMC ] 1 A_Warp(AAPTR_TARGET,0,0,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
Goto Spawn
}
}

Actor CopyMachineTarget
{
Translation "210:210=4:4", "229:229=85:85", "248:248=85:85"
+CLIENTSIDEONLY
+NOINTERACTION
-SOLID
+NOGRAVITY
RenderStyle Add
Alpha 0.325
Scale 2.5
States
{
Spawn:
TNT1 A 6 NoDelay 
TNT1 A 0 A_PlaySoundEx("misc/darkthrow","Weapon")
WGOA S 2 A_Fire(24)
WGOA T 2 A_Fire(26)
LBFX M 2 A_Fire(28)
LBFX L 2 A_Fire(30)
TNT1 A 0 A_PlaySoundEx("misc/darkthrow","Weapon")
LBFX K 2 A_Fire(32)
LBFX L 2 A_Fire(34)
LBFX M 2 A_Fire(38)
WGOA S 2 A_Fire(40)
TNT1 A 0 A_PlaySoundEx("misc/darkthrow","Weapon")
WGOA T 2 A_Fire(42)
LBFX M 2 A_Fire(44)
LBFX L 2 A_Fire(46)
LBFX K 2 A_Fire(48)
TNT1 A 0 A_PlaySoundEx("misc/darkthrow","Weapon")
LBFX L 2 A_Fire(50)
LBFX M 2 A_Fire(52)
WGOA S 2 A_Fire(54)
WGOA T 2 A_Fire(56)
TNT1 A 0 A_PlaySoundEx("misc/darkthrow","Weapon")
LBFX M 2 A_Fire(58)
LBFX L 2 A_Fire(60)
LBFX K 2 A_Fire(62)
LBFX L 2 A_Fire(64)
TNT1 A 0 A_PlaySoundEx("misc/darkthrow","Weapon")
LBFX M 2 A_Fire(68)
WGOA S 2 A_Fire(70)
Stop

Death:
TNT1 A 0
Stop
}
}

Actor LightningBolt_Harmless : LightningBolt { Translation "210:210=96:96", "229:229=240:240", "248:248=96:96" DamageType "Dummy" }

Actor CopyMachine_LightningPuff
{
Translation "210:210=96:96", "229:229=240:240", "248:248=96:96"
+PUFFONACTORS
+ALWAYSPUFF
+HITTRACER
Scale 1.5
States
{
Spawn:
TNT1 A 0 NoDelay A_PlaySoundEx("weapon/lightningbolt","Weapon")
TNT1 A 0 A_SpawnItemEx("LightningBolt_Harmless")
stop
}
}

Actor CopyMachine_MagnetPuff : CopyMachine_LightningPuff
{
States
{
Spawn:
TNT1 A 0 NoDelay A_PlaySoundEx("misc/marsswitch","Weapon")
TNT1 A 0 A_GiveInventory("CopyMachine_InverseScreenPower",1,AAPTR_TRACER)
stop
}
}

Actor CopyMachine_DM3Trail
{
Translation "192:192=4:4", "198:198=90:90"
+NOGRAVITY
+NOINTERACTION
radius 2
height 2
scale 1.5
States
{
Spawn:
BSB0 K 0 NoDelay A_PlaySoundEx("weapon/waveburner","Weapon")
MXP1 EDCD 2
MXP1 E 1 A_FadeOut
wait
}
}

Actor CopyMachine_InverseScreenPower : Powerup
{
Powerup.Color InverseMap
Powerup.Duration 12
}

Actor CopyMachine_MachinePart
{
Translation "192:192=213:213", "198:198=231:231"
PROJECTILE
+NOBLOCKMAP
+NOGRAVITY
+NOINTERACTION
Scale 2.5
States
{
Spawn:
CPMC R 0 NoDelay A_JumpIfInTargetInventory("DrillFlag",1,"Death")
CPMC R 0 A_JumpIfInTargetInventory("SuperArmAmmo",1,"SpawnPain")
CPMC R 0 A_JumpIfInTargetInventory("JunkShieldAmmo",1,"SpawnJunk")
CPMC R 0 A_JumpIfInTargetInventory("LightningBoltAmmo",1,"SpawnDynamo")
CPMC R 0 A_JumpIfInTargetInventory("ThunderBoltAmmo",1,"SpawnDynamo2")
CPMC R 0 A_JumpIfInTargetInventory("MagnetMissileAmmo",1,"SpawnMagnet")
CPMC R 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
Loop

SpawnPain:
CPMC R 1 A_Warp(AAPTR_TARGET,0,0,12,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
Goto Spawn

SpawnJunk:
CPMC R 1 A_Warp(AAPTR_TARGET,0,0,38,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
Goto Spawn

SpawnDynamo:
CPMC R 1 A_Warp(AAPTR_TARGET,0,0,18,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
Goto Spawn

SpawnDynamo2:
CPMC R 1 A_Warp(AAPTR_TARGET,0,0,48,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
Goto Spawn

SpawnMagnet:
CPMC R 1 A_Warp(AAPTR_TARGET,0,0,14,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
Goto Spawn

Death:
TNT1 A 0 A_TransferPointer(AAPTR_TARGET,AAPTR_DEFAULT,AAPTR_TARGET,AAPTR_TARGET)
TNT1 A 0 A_FaceTarget
TNT1 A 0 A_SpawnItemEx("ExplosionEffect1",0,0,85)
TNT1 A 0 A_SpawnItemEx("MonsterFakeDeathFX",0,0,85,0,0,0,0,1)
TNT1 A 0
Stop
}
}

Actor CopyMachine_Replaced : CopyMachine replaces Archvile {}