////////////////////////////////////
//       TABAN (FIREDEMON)        //
////////////////////////////////////

Actor TabanMonster : FireDemon 30824
{
//$Category MM8BDM-Monsters (Hexen)
//$Title Taban (FireDemon)
//$Sprite D028B8B2
//$Arg0 Dormant Position
//$Arg0Enum { 0 = "Down"; 1 = "Up"; 2 = "Not Dormant"; }
//$Arg0Type 11
Tag "Taban"
Translation "108:108=108:108", "192:192=4:4", "198:198=108:108"
MONSTER
Species "TabanMonster"
BloodType "MonsterRipperProtect_Helper"
//+NOBLOOD
-NOINFIGHTING
+DONTHARMSPECIES
-FLOAT
+FLOATBOB
+NOGRAVITY
+DROPOFF
-FLOORCLIP
+TELESTOMP
+INVULNERABLE
Health 80
Radius 20
Height 68
Speed 1 // 13
PainChance 1
PainChance "WindStorm", 1
PainChance "GravityHold", 1
PainChance "ConcreteShot", 1
PainChance "TornadoBlow", 1
PainChance "BlackHoleBomb", 1
PainChance "TimeStopper", 256
DamageFactor "Dummy", 0.0
SeeSound "item/rushdetect"
PainSound "monster/mm4pain"
DeathSound "monster/death"
ActiveSound "misc/repairing"
Obituary "$OB_FIREDEMON"
Mass 9999
Scale 2.5
States
{
Spawn:
TAB2 "#" 0 NoDelay A_Stop
TAB2 "#" 0 A_JumpIf(args[0] == 1, "SpawnUp")
TAB2 "#" 0 A_JumpIf(args[0] == 2, "SpawnActive")
Goto SpawnDown

SpawnDown:
TAB2 "#" 0 A_TakeInventory("CutterFlag",1)
TAB2 "#" 0 A_ChangeFlag("FLOATBOB",false)
TAB2 "#" 0 ACS_NamedExecuteAlways("Monster_PassivePain",0)
TAB2 "#" 0 A_Look
TAB2 D 5
Goto Spawn+3

SpawnUp:
TAB2 "#" 0 A_TakeInventory("CutterFlag",1)
TAB2 "#" 0 A_ChangeFlag("FLOATBOB",false)
TAB2 "#" 0 ACS_NamedExecuteAlways("Monster_PassivePain",0)
TAB2 "#" 0 A_Look
TAB2 J 5
Goto Spawn+3

SpawnActive:
TAB2 "#" 0 A_TakeInventory("CutterFlag",1)
TAB2 "#" 0 ACS_NamedExecuteAlways("Monster_PassivePain",0)
TAB2 "#" 0 A_SpawnItemEx("MonsterHitbox20_68")
TAB2 "#" 0 A_UnSetInvulnerable
// Alphabet soup in order to match the idle animation of TabanProp with the A_Look loop delay of FireDemon (5 tics)
TAB2 A 1 A_Look
TAB2 AAAB 1
TAB2 B 1 A_Look
TAB2 BBAA 1
TAB2 A 1 A_Look
TAB2 ABBB 1
TAB2 B 1 A_Look
TAB2 AAAA 1
TAB2 B 1 A_Look
TAB2 BBBA 1
TAB2 A 1 A_Look
TAB2 AABB 1
TAB2 B 1 A_Look
TAB2 BAAA 1
TAB2 A 1 A_Look
TAB2 BBBB 1
Goto Spawn+4

FirstSee:
TAB2 "#" 0 A_TakeInventory("CutterFlag",1)
TAB2 "#" 0 ACS_NamedExecuteAlways("Monster_PassivePain",0)
TAB2 "#" 0 Thing_SetTranslation(0,30501) //ALLRED
TAB2 "#" 0 A_ChangeFlag("FLOATBOB",false)
TAB2 "#" 2 Bright
TAB2 "#" 0 Thing_SetTranslation(0,30824) //TABANMONSTER
TAB2 "#" 0 A_GiveInventory("CutterFlag",1)
TAB2 "#" 0 A_JumpIf(args[0] == 1, "SeeUp")
TAB2 "#" 0 A_JumpIf(args[0] == 2, "Chase")
Goto SeeDown

SeeUp:
TAB2 JJJJJJJJJJJ 4
TAB2 K 4 A_PlaySoundEx("monster/tabansee","Body")
TAB2 A 2 
TAB2 A 2 A_UnSetInvulnerable
TAB2 B 3
TAB2 A 0 A_ChangeFlag("FLOAT",true)
TAB2 A 0 A_ChangeFlag("FLOORCLIP",true)
Goto Chase

SeeDown:
TAB2 DDDDDDDDD 4
TAB2 EFG 4 
TAB2 H 2 A_PlaySoundEx("monster/tabansee","Body")
TAB2 H 2 A_UnSetInvulnerable
TAB2 A 3
TAB2 A 0 A_ChangeFlag("FLOAT",true)
TAB2 A 0 A_ChangeFlag("FLOORCLIP",true)
Goto Chase

See:
TAB2 "#" 0 A_JumpIfInventory("CutterFlag",1,1)
Goto FirstSee
Chase:
TAB2 A 0 A_ChangeFlag("FLOAT",true)
TAB2 A 0 A_ChangeFlag("FLOORCLIP",true)
TAB2 A 1 A_FireDChase
TAB2 AAAB 1 A_ChangeVelocity(4.15,0,momz,3)
TAB2 B 1 A_FireDChase
TAB2 BBAA 1 A_ChangeVelocity(4.15,0,momz,3)
TAB2 A 1 A_FireDChase
TAB2 ABBB 1 A_ChangeVelocity(4.15,0,momz,3)
TAB2 B 1 A_FireDChase
TAB2 AAAA 1 A_ChangeVelocity(4.15,0,momz,3)
TAB2 B 1 A_FireDChase
TAB2 BBBA 1 A_ChangeVelocity(4.15,0,momz,3)
TAB2 A 1 A_FireDChase
TAB2 AABB 1 A_ChangeVelocity(4.15,0,momz,3)
TAB2 B 1 A_FireDChase
TAB2 BAAA 1 A_ChangeVelocity(4.15,0,momz,3)
TAB2 A 1 A_FireDChase
TAB2 BBBB 1 A_ChangeVelocity(4.15,0,momz,3)
Loop

Missile:
TAB2 A 0 A_ScaleVelocity(2.0)
TAB2 A 0 A_FaceTarget
TAB2 A 0 Thing_SetTranslation(0,30504) //MISSILEFLASH
TAB2 A 2 Bright
TAB2 A 0 Thing_SetTranslation(0,30824) //TABANMONSTER
TAB2 A 1
TAB2 A 1 A_FireDAttack
TAB2 B 4
TAB2 A 1 A_FireDAttack
TAB2 A 3
TAB2 B 1 A_FireDAttack
TAB2 B 3
TAB2 A 3
Goto Chase

Pain:
TAB2 C 0 A_Stop
Pain.WindStorm:
Pain.GravityHold:
Pain.ConcreteShot:
Pain.TornadoBlow:
Pain.BlackHoleBomb:
TAB2 C 0 A_UnSetInvulnerable
TAB2 C 0 Thing_SetTranslation(0,30824) //TABANMONSTER
TAB2 C 6 A_Pain
Goto Chase

Pain.TimeStopper:
TAB2 C 0 A_Stop
TAB2 C 0 A_UnSetInvulnerable
TAB2 C 0 Thing_SetTranslation(0,30824) //TABANMONSTER
TAB2 C 0 A_ChangeFlag("NOPAIN",true)
TAB2 "##############################################################################################################################################################################################################################################################################################################################################################" 1 A_SpawnItemEx("TimeStopGFX",random(8,56),0,random(0,56),0,0,0,random(0,359),0,80)
TAB2 C 0 A_ChangeFlag("NOPAIN",false)
Goto See

Death.WindStorm:
Death.GravityHold:
Death.TornadoBlow:
BlowDeath:
TAB2 C 0 A_Stop
TAB2 C 0 A_UnSetInvulnerable
TAB2 C 0 Thing_SetTranslation(0,30824) //TABANMONSTER
TAB2 C 0 A_ChangeFlag("SHOOTABLE",false)
TAB2 C 0 A_ChangeFlag("NODAMAGE",false)
TAB2 C 0 A_ChangeFlag("SOLID",false)
TAB2 C 1 ThrustThingZ(0,10,0,1)
TAB2 C 0 A_JumpIf(ceilingz-z<77,"Death")
TAB2 C 0 A_GiveInventory("BlowDeathTimer",1)
TAB2 C 0 A_JumpIfInventory("BlowDeathTimer",35,"Death")
Goto BlowDeath+5

Death:
XDeath:
TAB2 C 0 A_Stop
TAB2 C 0 A_FaceTarget
TAB2 C 0 Thing_SetTranslation(0,30824) //TABANMONSTER
TAB2 C 2 A_NoBlocking
TAB2 C 0 A_Scream
TAB2 C 0 A_SpawnItemEx("ExplosionEffect1",0,0,24)
TAB2 C 0 A_SpawnItemEx("MonsterFakeDeathFX",0,0,24,0,0,0,0,1)
TAB2 C 0 A_SpawnItemEx("TabanMonster_DeathMarker",0,0,24,0,0,8,0,1)
TNT1 A 0 A_JumpIf(CallACS("Monster_CanDropWeapon"),4)
TNT1 A 0 A_Jump(2,2)
TNT1 A 0 A_JumpIf(True,2)
TNT1 A 0 ACS_NamedExecuteWithResult("Monster_WeaponDrop",6) //Dusk Bringer
TNT1 A 23
TNT1 A -1
Stop

Raise:
TNT1 A 0 A_SpawnItemEx("MonsterReviveHelper")
TNT1 A 20
TNT1 A 0 A_GiveInventory("DrillFlag",1)
TAB2 A 5
TNT1 A 0 A_ChangeFlag("FLOATBOB",true)
TNT1 A 0 A_TakeInventory("DrillFlag",1)
Goto SpawnActive
}
}

Actor TabanMonster_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)
TAB2 LLLLLMMMMMNNNNNOOOOO 1 A_CheckFloor("SpawnFloor")
loop

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

Actor TabanMonsterShot : FireDemonMissile replaces FireDemonMissile
{
+BRIGHT
PROJECTILE
Radius 10
Height 6
Speed 10
Damage (8)
DamageType "Buster"
RenderStyle Normal
SeeSound "monster/smallshot"
Scale 2.5
States
{
Spawn:
BASB A 5 NoDelay
loop

Death:
TNT1 A 0
stop
}
}

Actor TabanMonsterDown : TabanMonster
{
States
{
Spawn:
TAB2 "#" 0 NoDelay A_Stop
TAB2 "#" 0 A_SetArg(0,0)
Goto SpawnDown
}
}

Actor TabanMonsterUp : TabanMonster
{
States
{
Spawn:
TAB2 "#" 0 NoDelay A_Stop
TAB2 "#" 0 A_SetArg(0,1)
Goto SpawnUp
}
}

Actor TabanMonsterActive : TabanMonster
{
States
{
Spawn:
TAB2 "#" 0 NoDelay A_Stop
TAB2 "#" 0 A_SetArg(0,2)
Goto SpawnActive
}
}

Actor TabanMonster_Replaced : TabanMonster replaces FireDemon {}