Actor MonsterPassivePainFlag : Once {}
Actor MonsterJumpFlag : Once {}
Actor MonsterJumpFlag2 : Once {}

Actor TFakeDeathFX : FakeDeathFX
{
States
{
Spawn:
TNT1 A 1
PLY1 Z 0 A_SpawnItemEx("DeathFX1",0,0,0,0,1.0,0.0,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
PLY1 Z 0 A_SpawnItemEx("DeathFX1",0,0,0,0,0.7,0.7,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
PLY1 Z 0 A_SpawnItemEx("DeathFX1",0,0,0,0,0.0,1.0,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
PLY1 Z 0 A_SpawnItemEx("DeathFX1",0,0,0,0,-0.7,0.7,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
PLY1 Z 0 A_SpawnItemEx("DeathFX1",0,0,0,0,-1.0,0.0,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
PLY1 Z 0 A_SpawnItemEx("DeathFX1",0,0,0,0,-0.7,-0.7,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
PLY1 Z 0 A_SpawnItemEx("DeathFX1",0,0,0,0,0.0,-1.0,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
PLY1 Z 0 A_SpawnItemEx("DeathFX1",0,0,0,0,0.7,-0.7,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
PLY1 Z 0 A_SpawnItemEx("DeathFX2",0,0,0,0,1.0,0.0,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
PLY1 Z 0 A_SpawnItemEx("DeathFX2",0,0,0,0,0.7,0.7,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
PLY1 Z 0 A_SpawnItemEx("DeathFX2",0,0,0,0,0.0,1.0,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
PLY1 Z 0 A_SpawnItemEx("DeathFX2",0,0,0,0,-0.7,0.7,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
PLY1 Z 0 A_SpawnItemEx("DeathFX2",0,0,0,0,-1.0,0.0,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
PLY1 Z 0 A_SpawnItemEx("DeathFX2",0,0,0,0,-0.7,-0.7,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
PLY1 Z 0 A_SpawnItemEx("DeathFX2",0,0,0,0,0.0,-1.0,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
PLY1 Z 0 A_SpawnItemEx("DeathFX2",0,0,0,0,0.7,-0.7,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
TNT1 A 1
stop
}
}

Actor MonsterWallChecker : FastProjectile
{
Radius 1
Height 1
Renderstyle Normal
Speed 60
Damage (0)
States
{
Spawn:
BUST A 1 NoDelay
BUST A 1
Goto XDeath

XDeath:
Crash:
TNT1 A 0
stop

Death:
TNT1 A 0 A_GiveToTarget("MonsterJumpFlag",1)
stop
}
}

Actor MonsterWallChecker_Warp
{
PROJECTILE
+NOCLIP
+THRUACTORS
+THRUGHOST
+SERVERSIDEONLY
Radius 1
Height 1
Renderstyle None
Damage (0)
States
{
Spawn:
MXP1 C 1 NoDelay
MXP1 C 0 A_Warp(AAPTR_TARGET,38,0,24,0,0,"Spawn2")
Goto Jump

Spawn2:
MXP1 C 1
MXP1 C 0 A_Warp(AAPTR_TARGET,38,0,24,0,0,"Spawn")
Goto Jump

Jump:
TNT1 A 0 A_GiveToTarget("MonsterWallChecker_Warp2_P",1)
TNT1 A 35
Goto Spawn

Death:
TNT1 A 0
Stop
}
}

Actor MonsterWallChecker_Warp2_P : CustomInventory
{
+INVENTORY.AUTOACTIVATE
States
{
Pickup:
TNT1 A 0 A_SpawnItemEx("MonsterWallChecker_Warp2",76,0,68)
stop
}
}

Actor MonsterWallChecker_Warp2 : MonsterWallChecker_Warp
{
-NOCLIP
States
{
Spawn:
MXP1 C 1 NoDelay
TNT1 A 0 A_GiveToTarget("MonsterJumpFlag2",1)
Stop

Death:
XDeath:
Crash:
TNT1 A 0
Stop
}
}

actor MonsterBulletPuff : BulletPuff
{
Translation "198:198=88:88"
+BRIGHT
-ALLOWPARTICLES
-RANDOMIZE
+PUFFONACTORS
+PUFFGETSOWNER
+HITTRACER
+FORCEXYBILLBOARD
+DONTBLAST
RenderStyle Normal
Alpha 1.0
VSpeed 0
Radius 1
Height 1
scale 2.2
States
{
Spawn:
TNT1 A 0
TNT1 A 1
Death:
TNT1 A 0 A_Explode(0,0,0,0,0)
goto XDeath
XDeath:
TNT1 A 0 A_Stop
stop
}
}

Actor MonsterDontRip : CustomInventory
{
+INVENTORY.AUTOACTIVATE
States
{
Pickup:
TNT1 A 0
TNT1 A 0 A_ChangeFlag("DONTRIP",True)
stop
}
}

Actor MonsterRipperProtect_Helper
{
+MISSILE
-CLIENTSIDEONLY
+NOCLIP
+NOINTERACTION
+NOGRAVITY
+DONTBLAST
+DONTSPLASH
+LOOKALLAROUND
+SERVERSIDEONLY
Radius 0
Height 0
Alpha 1.0
Renderstyle None		// Change to "Normal for testing purposes"
Scale 2.5
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_RadiusGive("MonsterRipperProtect_Pickup",64,RGF_MONSTERS|RGF_CUBE)
Death:
MMFX C 0 A_Stop
MMFX CDE 4
stop
}
}

Actor MonsterRipperProtect_Pickup : CustomInventory
{
Inventory.Amount 1
Inventory.MaxAmount 0x7FFFFFFD
+INVENTORY.AUTOACTIVATE
States
{
Use:
TNT1 A 0
TNT1 A 0 A_GiveInventory("MonsterRipperProtect_Power")
Stop

No:
TNT1 A 0
Stop
}
}

Actor MonsterRipperProtect_Power : PowerProtection
{
Powerup.Duration 4
DamageFactor Normal, 0.5
}

Actor MonsterFakePain : CustomInventory
{
+INVENTORY.AUTOACTIVATE
States
{
Pickup:
TNT1 A 0
TNT1 A 0 A_SpawnItemEx("MonsterPainFX",-5,0,3,0,0,0)
TNT1 A 0 A_PlaySound("monster/hitconfirm","Auto")
stop
}
}

Actor MonsterPainFX : PainFX
{
-CLIENTSIDEONLY
}

Actor MonsterFakeDeathFX
{
+NOBLOCKMAP
+NOGRAVITY
States
{
Spawn:
TNT1 A 1 A_RearrangePointers(AAPTR_NULL,AAPTR_NULL,AAPTR_NULL)
TNT1 A 0 A_SpawnItemEx("MonsterDeathFX1",0,0,0,0,1.0,0.0,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
TNT1 A 0 A_SpawnItemEx("MonsterDeathFX1",0,0,0,0,0.7,0.7,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
TNT1 A 0 A_SpawnItemEx("MonsterDeathFX1",0,0,0,0,0.0,1.0,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
TNT1 A 0 A_SpawnItemEx("MonsterDeathFX1",0,0,0,0,-0.7,0.7,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
TNT1 A 0 A_SpawnItemEx("MonsterDeathFX1",0,0,0,0,-1.0,0.0,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
TNT1 A 0 A_SpawnItemEx("MonsterDeathFX1",0,0,0,0,-0.7,-0.7,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
TNT1 A 0 A_SpawnItemEx("MonsterDeathFX1",0,0,0,0,0.0,-1.0,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
TNT1 A 0 A_SpawnItemEx("MonsterDeathFX1",0,0,0,0,0.7,-0.7,0,SXF_TRANSFERTRANSLATION|SXF_MULTIPLYSPEED)
TNT1 A 1
stop
}
}

actor MonsterDeathFX1
{
+BRIGHT
PROJECTILE
+NOINTERACTION
+NOGRAVITY
+FORCEXYBILLBOARD
renderstyle "Translucent"
alpha 1.0
radius 2
height 2
scale 2.5
mass 1
Speed 15
reactiontime 2
States
{
Spawn:
MXP1 ABCDE 1
MXP1 A 0 A_CountDown
loop
}
}

Actor MonsterReviveHelper
{
+NOBLOCKMAP
+NOGRAVITY
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_RearrangePointers(AAPTR_NULL,AAPTR_NULL,AAPTR_NULL)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX1",0,0,0,0,0,0,30)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX1",0,0,0,0,0,0,60)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX1",0,0,0,0,0,0,90)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX1",0,0,0,0,0,0,150)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX1",0,0,0,0,0,0,180)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX1",0,0,0,0,0,0,210)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX1",0,0,0,0,0,0,270)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX1",0,0,0,0,0,0,300)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX1",0,0,0,0,0,0,330)

TNT1 A 0 A_SpawnItemEx("MonsterReviveFX2",0,0,0,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX2",0,0,0,0,0,0,60)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX2",0,0,0,0,0,0,90)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX2",0,0,0,0,0,0,120)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX2",0,0,0,0,0,0,180)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX2",0,0,0,0,0,0,210)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX2",0,0,0,0,0,0,240)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX2",0,0,0,0,0,0,300)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX2",0,0,0,0,0,0,330)

TNT1 A 0 A_SpawnItemEx("MonsterReviveFX3",0,0,0,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX3",0,0,0,0,0,0,30)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX3",0,0,0,0,0,0,90)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX3",0,0,0,0,0,0,120)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX3",0,0,0,0,0,0,150)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX3",0,0,0,0,0,0,210)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX3",0,0,0,0,0,0,240)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX3",0,0,0,0,0,0,270)
TNT1 A 0 A_SpawnItemEx("MonsterReviveFX3",0,0,0,0,0,0,330)

TNT1 A 20 A_PlaySoundEx("misc/junkmix","Voice")
TNT1 A 0 A_PlaySoundEx("weapon/thunderbolt","Body")
TNT1 AAAAAAA 3 A_SpawnItemEx("SparkleFX",random(-64,64),random(-64,64),random(0,64))
stop
}
}

Actor MonsterReviveFX1 : MonsterFakeDeathFX
{
Translation "58:58=95:95", "60:60=4:4"
Scale 2.5
ReactionTime 20
RenderStyle Translucent
Alpha 0.25
Mass 0
Radius 1
Height 1
var int user_angle;
States
{
Spawn:
MJUN C 0
MJUN C 0 A_SetPitch(Mass)
MJUN C 0 A_Jump(256,"FX1","FX2","FX3")
FX1:
MJUN C 0
Goto LoopState
FX2:
MJUN D 0
Goto LoopState
FX3:
MJUN E 0
Goto LoopState

LoopState:
"####" "#" 1 A_Warp(AAPTR_TARGET,40,0,(pitch+mass)-60,angle,WARPF_ABSOLUTEANGLE|WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
"####" "#" 0 A_SetTranslucent(Alpha+0.25)
"####" "#" 0 A_SetAngle(Angle+32)
"####" "#" 0 A_SetPitch(Pitch+3)
"####" "#" 0 A_CountDown
Loop

Death:
"####" "#" 0 A_Jump(56,"XDeath")
"####" "#" 0 A_Recoil(-10)
"####" "#" 1 A_FadeOut
loop

XDeath:
TNT1 A 0
stop
}
}

Actor MonsterReviveFX2 : MonsterReviveFX1 { Mass 10 }
Actor MonsterReviveFX3 : MonsterReviveFX1 { Mass 20 }

Actor Monster_DeathMarker
{
+MISSILE
+THRUACTORS
+CANBOUNCEWATER
+DONTSPLASH
+DONTBLAST
+DONTDRAIN
Radius 8
Height 8
scale 2.5
Mass 9999
Gravity 0.75
BounceType Hexen
BounceCount 9999999
BounceFactor 0.25
WallBounceFactor 0.25
RenderStyle Translucent
Alpha 0.30
States
{
Spawn:
TNT1 A 0 NoDelay A_Jump(128,2)
TNT1 A 0 A_SetScale(-ScaleX,ScaleY)
Goto SpawnLoop

Death:
TNT1 A 0 A_TakeFromTarget("DrillFlag",1)
stop
}
}

actor MonsterNothing
{
+CLIENTSIDEONLY
+NOINTERACTION
+NOGRAVITY
-SOLID
+MISSILE
renderstyle "Translucent"
alpha 0.0
radius 2
height 2
scale 2.5
}

actor MonsterShieldBreakFX : BasicGraphicEffect
{
+BRIGHT
+MISSILE
Translation "203:203=85:85"
-CLIENTSIDEONLY
-NOINTERACTION
-NOGRAVITY
+NONETID
+THRUACTORS
+THRUGHOST
Gravity 0.2
scale 2.5
States
{
Spawn:
FCRA J 4
FCRA K 15
FCRA L 1 A_Fadeout
wait
}
}

Actor MM8BDMMonstersInvasionSpot : CustomMonsterInvasionSpot
{
//$Category "MM8BDM-Invasion Spawners/Monsters"
//$Title Invasion Spot - Monsters
//$Arg0 Start Spawn Number
//$Arg1 Spawn Delay
//$Arg2 Round Spawn Delay
//$Arg3 First Appear Wave
//$Arg4 Max Spawn
Scale 2.5
}

Actor MM8BDMWeaponsInvasionSpot : CustomWeaponInvasionSpot
{
//$Category "MM8BDM-Invasion Spawners/Weapons"
//$Title Invasion Spot - Weapons
//$Arg0 Start Spawn Number
//$Arg1 Spawn Delay
//$Arg2 Round Spawn Delay
//$Arg3 First Appear Wave
//$Arg4 Max Spawn
Scale 2.5
}

Actor MM8BDMPickupsInvasionSpot : CustomPickupInvasionSpot
{
//$Category "MM8BDM-Invasion Spawners/Assists"
//$Title Invasion Spot - Assists
//$Arg0 Start Spawn Number
//$Arg1 Spawn Delay
//$Arg2 Round Spawn Delay
//$Arg3 First Appear Wave
//$Arg4 Max Spawn
Scale 2.5
}