/////////////////////////////////////////////
//         SKELETON JOE (REVENANT)         //
/////////////////////////////////////////////

Actor SkeletonJoeMonster 30613
{
//$Category MM8BDM-Monsters (Doom)
//$Title Skeleton Joe (Revenant)
//$Sprite D021B8B2
Tag "Skeleton Joe"
Translation "192:192=4:4", "198:198=106:106"
MONSTER
Species "SkeletonJoeMonster"
BloodType "MonsterRipperProtect_Helper"
//+NOBLOOD
+FLOORCLIP
-NOINFIGHTING
+DONTHARMSPECIES
+MISSILEMORE
Health 300
Radius 20
Height 56
Speed 1 // 10
PainChance 100
PainChance "WindStorm", 100
PainChance "GravityHold", 100
PainChance "ConcreteShot", 100
PainChance "TornadoBlow", 100
PainChance "BlackHoleBomb", 100
PainChance "TimeStopper", 256
DamageFactor "Dummy", 0.0
MeleeThreshold 196
SeeSound "item/rushdetect"
PainSound "monster/mm4pain"
DeathSound "monster/death"
ActiveSound "misc/repairing"
Obituary "$OB_UNDEAD"
HitObituary "$OB_UNDEADHIT"
Mass 9999
Scale 2.5
States
{
Spawn:
SKJO A 0 NoDelay A_Stop
SKJO A 0 A_TakeInventory("CutterFlag",1)
SKJO A 0 ACS_NamedExecuteAlways("Monster_PassivePain",0)
SKJO A 0 A_SpawnItemEx("MonsterHitbox20_56")
SKJO AA 10 A_Look
Goto Spawn+4

FirstSee:
SKJO A 0 A_TakeInventory("CutterFlag",1)
SKJO A 0 ACS_NamedExecuteAlways("Monster_PassivePain",0)
SKJO A 0 Thing_SetTranslation(0,30501) //ALLRED
SKJO A 2 Bright
SKJO A 0 Thing_SetTranslation(0,30613) //SKELETONJOEMONSTER
SKJO A 0 A_GiveInventory("CutterFlag",1)
Goto See

See:
SKJO A 0 A_JumpIfInventory("CutterFlag",1,1)
Goto FirstSee
SKJO B 1 A_Chase
SKJO B 1 A_ChangeVelocity(4,0,momz,3)
SKJO B 1 A_Chase
SKJO B 1 A_ChangeVelocity(4,0,momz,3)
SKJO B 1 A_Chase
SKJO C 1 A_ChangeVelocity(4,0,momz,3)
SKJO C 1 A_Chase
SKJO C 1 A_ChangeVelocity(4,0,momz,3)
SKJO C 1 A_Chase
SKJO C 1 A_ChangeVelocity(4,0,momz,3)
SKJO D 1 A_Chase
SKJO D 1 A_ChangeVelocity(4,0,momz,3)
SKJO D 1 A_Chase
SKJO D 1 A_ChangeVelocity(4,0,momz,3)
SKJO D 1 A_Chase
SKJO E 1 A_ChangeVelocity(4,0,momz,3)
SKJO E 1 A_Chase
SKJO E 1 A_ChangeVelocity(4,0,momz,3)
SKJO E 1 A_Chase
SKJO E 1 A_ChangeVelocity(4,0,momz,3)
Loop

Melee:
SKJO A 0 A_Stop
SKJO A 1 A_FaceTarget
SKJO A 0 A_PlaySoundEx("item/rushsearchdig","Weapon")
SKJO F 0 Thing_SetTranslation(0,30504) //MISSILEFLASH
SKJO F 0 A_FaceTarget
SKJO F 2 Bright
SKJO F 0 Thing_SetTranslation(0,30613) //SKELETONJOEMONSTER
SKJO F 4 
SKJO F 6 A_FaceTarget
SKJO G 0 A_CustomMeleeAttack(35,"misc/rathorfire","weapon/slashclaw","Buster")
SKJO G 6
Goto See

Missile:
SKJO F 0 A_Stop
SKJO F 1 A_FaceTarget
SKJO F 7 A_FaceTarget
SKJO G 0 A_PlaySoundEx("misc/rathorthrow","Weapon")
SKJO G 2
SKJO G 0 A_CustomMissile("SkeletonJoeMonsterShot",45,25)
SKJO G 0 Thing_SetTranslation(0,30504) //MISSILEFLASH
SKJO G 2 Bright
SKJO G 0 Thing_SetTranslation(0,30613) //SKELETONJOEMONSTER
SKJO G 8
SKJO G 5 A_FaceTarget
SKJO A 5
Goto See

Pain:
SKJO H 0 A_Stop
Pain.WindStorm:
Pain.GravityHold:
Pain.ConcreteShot:
Pain.TornadoBlow:
Pain.BlackHoleBomb:
SKJO H 0 Thing_SetTranslation(0,30613) //SKELETONJOEMONSTER
SKJO H 10 A_Pain
Goto See

Pain.TimeStopper:
SKJO H 0 A_Stop
SKJO H 0 Thing_SetTranslation(0,30613) //SKELETONJOEMONSTER
SKJO H 0 A_ChangeFlag("NOPAIN",true)
SKJO "##############################################################################################################################################################################################################################################################################################################################################################" 1 A_SpawnItemEx("TimeStopGFX",random(8,54),0,random(0,80),0,0,0,random(0,359),0,80)
SKJO H 0 A_ChangeFlag("NOPAIN",false)
Goto See

Death.WindStorm:
Death.GravityHold:
Death.TornadoBlow:
BlowDeath:
SKJO H 0 A_Stop
SKJO H 0 Thing_SetTranslation(0,30613) //SKELETONJOEMONSTER
SKJO H 0 A_ChangeFlag("SHOOTABLE",false)
SKJO H 0 A_ChangeFlag("NODAMAGE",false)
SKJO H 0 A_ChangeFlag("SOLID",false)
SKJO H 1 ThrustThingZ(0,10,0,1)
SKJO H 0 A_JumpIf(ceilingz-z<64,"Death")
SKJO H 0 A_GiveInventory("BlowDeathTimer",1)
SKJO H 0 A_JumpIfInventory("BlowDeathTimer",35,"Death")
Goto BlowDeath+5

Death:
XDeath:
SKJO H 0 A_Stop
SKJO H 0 A_FaceTarget
SKJO H 0 Thing_SetTranslation(0,30613) //SKELETONJOEMONSTER
SKJO H 2 A_NoBlocking
SKJO H 0 A_Scream
SKJO H 0 A_SpawnItemEx("ExplosionEffect1",0,0,32)
SKJO H 0 A_SpawnItemEx("MonsterFakeDeathFX",0,0,32,0,0,0,0,1)
SKJO H 0 A_SpawnItemEx("SkeletonJoeMonster_DeathMarker",0,0,32,0,0,8,0,1)
SKJO H 0 A_JumpIf(CallACS("Monster_CanDropWeapon"),4)
SKJO H 0 A_Jump(65,2)
SKJO H 0 A_JumpIf(True,2)
SKJO H 0 ACS_NamedExecuteWithResult("Monster_WeaponDrop",1) //Sapper Drill
TNT1 A 33
TNT1 A -1
Stop

Raise:
TNT1 A 0 A_SpawnItemEx("MonsterReviveHelper")
TNT1 A 20
TNT1 A 0 A_GiveInventory("DrillFlag",1)
SKJO A 10
TNT1 A 0 A_TakeInventory("DrillFlag",1)
Goto See
}
}

Actor SkeletonJoeMonster_DeathMarker : Monster_DeathMarker
{
States
{
Spawn:
TNT1 A 0 NoDelay A_Jump(128,2)
TNT1 A 0 A_SetScale(-ScaleX,ScaleY)
SpawnLoop:
TNT1 A 0 A_Jump(128,4)
TNT1 A 0 A_Jump(64,4)
TNT1 A 0 A_Jump(32,4)
SKJO IIIIIJJJJJKKKKKLLLLL 1 A_CheckFloor("SpawnFloor")
loop

SpawnFloor:
SKJO "#" 1 A_JumpIfInTargetInventory("DrillFlag",1,"Death")
wait
}
}

// Rough approximation of Revenant's missiles done in a different way
// because the original method bugs out online

Actor SkeletonJoeMonsterShot
{
Translation "192:192=4:4", "198:198=106:106"
+BRIGHT
PROJECTILE
+SEEKERMISSILE
Radius 11
Height 8
Speed 10
Damage (15)
DamageType "Buster"
Scale 2.5
States
{
Spawn:
TNT1 A 0 NoDelay A_Jump(128,"SpawnHoming")
SpawnNoHoming:
SKJO M 0 A_ChangeFlag("SEEKERMISSILE",False)
SKJO MNOP 4
Loop

SpawnHoming:
SKJO M 0 A_PlaySound("weapon/bladeshoot",CHAN_BODY,0.125)
SKJO M 0 A_SeekerMissile(360,90)
SKJO M 4 A_SpawnItemEx("SkeletonJoeMonsterShotTrail")
SKJO M 0 A_SeekerMissile(360,90)
SKJO N 4 A_SpawnItemEx("SkeletonJoeMonsterShotTrail")
SKJO O 0 A_PlaySound("weapon/bladeshoot",CHAN_BODY,0.125)
SKJO M 0 A_SeekerMissile(360,90)
SKJO O 4 A_SpawnItemEx("SkeletonJoeMonsterShotTrail")
SKJO M 0 A_SeekerMissile(360,90)
SKJO P 4 A_SpawnItemEx("SkeletonJoeMonsterShotTrail")
Loop

Death:
MMFX CDE 3
stop
}
}

Actor SkeletonJoeMonsterShotTrail : RevenantTracerSmoke replaces RevenantTracerSmoke
{
Translation "192:192=4:4", "198:198=106:106"
+BRIGHT
+MISSILE
+NOINTERACTION
+CLIENTSIDEONLY
Scale 2.5
Renderstyle Translucent
Alpha 0.5
States
{
Spawn:
SKJO QRS 4 NoDelay 
stop
}
}

Actor SkeletonJoeMonster_Replaced : SkeletonJoeMonster replaces Revenant {}