//////////////////////////////////////////////////////////
///////////////// WEAPON PROJECTILES /////////////////////
//////////////////////////////////////////////////////////

//////////////////////////
////// EXPLOSIVES ////////
//////////////////////////


Actor PlasmaGun
{
PROJECTILE
+DONTREFLECT
SeeSound "weapons/plasmaf"
DeathSound "weapons/plasmax"
Alpha 0.75
height 2
radius 2
States
{
Spawn:
PLSS AB 6 bright
loop
Death:
PLSS A 0 
PLSS A 0 ACS_Execute(935, 0)
PLSS A 1 A_SpawnItemEx("Explosion_Spawner_Blue", 0, 0, 0, 0, 0, 0, 0, 0, 0)
PLSS A 1 A_Explode(ACS_ExecuteWithResult(933, 0, 14), 32, 1)
stop
}}

Actor WeaponBFG
{
+DONTREFLECT
PROJECTILE
-NOGRAVITY
-WINDTHRUST
DeathSound "weapons/bfgx"
Alpha 0.9
Renderstyle Add
height 4
radius 4
Scale 1.1
damage 20
Mass 500
States
{
Spawn:
BFS1 AB 4 bright A_SpawnItemEx("BFGTracer", 0, 0, 0, 0, 0, -30, 0, 0, 0)
loop
Death:
TNT1 A 0 
TNT1 A 0 ACS_Execute(935, 0)
TNT1 A 1 A_SpawnItemEx("Explosion_Spawner_Green", 0, 0, 0, 0, 0, 0, 0, 0, 0)
TNT1 A 1 A_Explode(ACS_ExecuteWithResult(933, 0, 15), 128, 1)
stop
}}

Actor BFGTracer
{
+DONTREFLECT
PROJECTILE
-WINDTHRUST
Alpha 0.7
Renderstyle Add
height 4
radius 8
damage 5
Mass 1000
States
{
Spawn:
TNT1 A 6
loop
Death:
BFE2 ABCD 8 bright
stop
}}

Actor HomingMissile
{
  +DONTREFLECT
  PROJECTILE
  +RANDOMIZE
  +STRIFEDAMAGE
  -NOGRAVITY
  seesound "weapons\homingmissile"
  deathsound "weapons/rocklx"
  
height 10
radius 10
damage 7
speed 40
reactiontime 12

States
{
  Spawn:
    MISL A 0
//	MISL A 1 ACS_Execute(855, 0)
  FlightLoop:
	MISL A 0 A_JumpIf(waterlevel > 0, "Destroy")
	MISL ABCDABCDABCDABCD 4
	MISL A 3 A_Countdown
	loop
  NoGrav:
  	MISL A 1 A_ChangeFlag("NOGRAVITY", 1)
	goto FlightLoop
  Death:
	TNT1 A 0 ACS_Execute(935, 0)
	TNT1 A 0 A_SpawnItemEx("Explosion_Spawner_M", 0, 0, 0, 0, 0, 0, 0, 0, 0)
	TNT1 A 0 
	TNT1 A 1 bright A_Explode(ACS_ExecuteWithResult(933, 0, 18), 32, 1)
    stop
  Destroy:
    MISL A 1
	stop
  }
}

Actor AirstrikeRocket : Rocket
{
+DONTREFLECT
-NOGRAVITY
+DROPOFF
+WINDTHRUST
-SLIDESONWALLS
+DONTOVERLAP
gravity 1.2
mass 500
height 10
radius 10
damage 5

States
{
  Spawn:
    MISL A 0
	MISL ABCDABCDABCDABCD 4 bright
	MISL A 1 bright A_JumpIf(waterlevel > 0, "Destroy")
    loop
  Death:
    TNT1 A 0 ACS_Execute(935, 0)
	TNT1 A 0 A_SpawnItemEx("Explosion_Spawner_M", 0, 0, 0, 0, 0, 0, 0, 0, 0)
	TNT1 A 1 
	TNT1 A 8 bright A_Explode(ACS_ExecuteWithResult(933, 0, 9), 32, 1)
    TNT1 A 6 bright 
    TNT1 A 4 bright
    stop
  Destroy:
    MISL A 20
	stop
  }
}

Actor NapalmstrikeRocket : Rocket
{
+DONTREFLECT
-NOGRAVITY
+DROPOFF
+WINDTHRUST
-SLIDESONWALLS
+DONTOVERLAP
gravity 1.2
mass 500
height 10
radius 10
damage 5

States
{
  Spawn:
    MISL A 0
	MISL ABCDABCDABCDABCD 4 bright A_JumpIf(z - floorz < 256.0, "Death")
	MISL A 1 bright A_JumpIf(waterlevel > 0, "Destroy")
    loop
  Death:
    TNT1 A 0 ACS_Execute(935, 0)
	TNT1 A 0 A_SpawnItemEx("Explosion_Spawner_M", 0, 0, 0, 0, 0, 0, 0, 0, 0)
	TNT1 A 1 
	TNT1 A 8 A_Explode(ACS_ExecuteWithResult(933, 0, 9), 32, 1)
    TNT1 A 6 A_SpawnItemEx("MolotovFireScript", 0, 0, 24, 0, 0, 0, 0, 0, 0)
    TNT1 A 4 
    stop
  Destroy:
    MISL A 20
	stop
  }
}


Actor BazookaRocket : Rocket
{
-NOGRAVITY
+DROPOFF
+WINDTHRUST
-SLIDESONWALLS
+DONTOVERLAP
+DONTREFLECT
height 2
radius 2
damage 2

States
{
  Spawn:
    MISL A 0 
	MISL ABCDABCDABCDABCD 4
	MISL A 3 bright ACS_ExecuteAlways(976, 0, 0)
	MISL A 0 bright A_JumpIf(waterlevel > 0, "Destroy")
    loop
  Death:
    TNT1 A 0 ACS_Execute(935, 0)
	TNT1 A 0 A_SpawnItemEx("Explosion_Spawner_L", 0, 0, 0, 0, 0, 0, 0, 0, 0)
	TNT1 A 0 
	TNT1 A 8 bright A_Explode(ACS_ExecuteWithResult(971, 0, 1), 128)
    TNT1 A 6 bright 
    TNT1 A 4 bright
    stop
  Destroy:
	MISL A 0 A_JumpIf(WaterLevel > 2, "Remove")
    MISL A 20
	stop
  Remove:
    MISL A 1
	stop
  }
}

Actor Grenade
{
PROJECTILE
+DOOMBOUNCE
+BOUNCEONACTORS
-NOBLOCKMAP
-WINDTHRUST
-NOGRAVITY
+SHOOTABLE
+SOLID
-SLIDESONWALLS
+FIXMAPTHINGPOS
+USESTBOUNCESOUND
-DONTSPLASH
+CANPASS
deathsound "weapons/rocklx"

health 6
damage 0
gravity 0.5
wallbouncefactor 0.75
BounceFactor 0.75
height 4
radius 4
bouncecount 200
States

{
Spawn:
GREN A 0
GREN A 1 ACS_Execute(981, 0, Health)
GREN A 33 A_JumpIf(waterlevel > 0, "Destroy")
GREN A 0 
GREN A 0 Thing_Damage(0, 1, 0)
GREN A 1 A_JumpIfHealthLower(1, "Death")
loop
Death:
TNT1 A 0 A_ChangeFlag("CANPASS", 0)
TNT1 A 1 ACS_Execute(935, 0)
TNT1 A 0 A_SpawnItemEx("Explosion_Spawner_M", 0, 0, 0, 0, 0, 0, 0, 0, 0)
TNT1 A 8 bright A_Explode(ACS_ExecuteWithResult(933, 0, 1), 112, 1)
TNT1 A 6 bright
TNT1 A 4 bright
stop
Destroy:
GREN A 20
stop
}}

Actor Cluster
{
PROJECTILE
+HEXENBOUNCE
+BOUNCEONACTORS
-WINDTHRUST
-NOGRAVITY
+DROPOFF
+SHOOTABLE
+PUSHABLE
+CANPASS
+FIXMAPTHINGPOS
-SLIDESONWALLS
+USESTBOUNCESOUND
-DONTSPLASH
deathsound "weapons/rocklx"

health 6
wallbouncefactor 0.75
BounceFactor 0.75
height 4
radius 4
bouncecount 200
translation "0:255=172:191"
damage 0

States
{
Spawn:
GREN A 0
GREN A 1 ACS_Execute(981, 0, Health)
GREN A 33 A_JumpIf(waterlevel > 0, "Destroy")
GREN A 0 
GREN A 0 Thing_Damage(0, 1, 0)
GREN A 1 A_JumpIfHealthLower(1, "Death")
loop
Death:
TNT1 B 0 A_ChangeFlag("CANPASS", 0)
TNT1 B 0 ACS_Execute(935, 0)
TNT1 B 0 A_SpawnItemEx("Explosion_Spawner_M", 0, 0, 0, 0, 0, 0, 0, 0, 0)
TNT1 B 0 A_SpawnItemEx("ClusterBits", 0, 0, 0, Random(-2, 2), 0, Random(3, 6), 0, SXF_ABSOLUTEMOMENTUM, 0)
TNT1 BBBBBBBBB 0 A_SpawnItemEx("ClusterBits", 0, 0, 0, Random(-2, 2), 0, Random(3, 6), 0, SXF_ABSOLUTEMOMENTUM, 0)
TNT1 B 8 bright A_Explode(ACS_ExecuteWithResult(933, 0, 2), 112, 1)
stop
Destroy:
GREN A 20
stop
}}

Actor ClusterBits : DoomImpBall
{
-NOGRAVITY
+WINDTHRUST
+DONTOVERLAP
+ROCKETTRAIL

gravity 0.2
scale 1.0
renderstyle add
alpha 0.8
height 4
radius 4
damage 3
States
{
Spawn:
BAL1 A 0 
BAL1 A 0 Thing_ChangeTid(0, 210)
BAL1 AB 4 bright A_JumpIf(waterlevel > 0, "Destroy")
loop
Death:
BAL1 CCCC 0 A_SpawnItemEx("Ash", Random(-4, 4), Random(-4, 4), 0, 0, 0, 0, 0, 0, 0)
BAL1 C 0 A_SpawnItemEx("Explosion_Spawner_XS", 0, 0, 0, 0, 0, 0, 0, 0, 0)
TNT1 B 0 ACS_Execute(935, 0)
BAL1 C 3 A_Explode(4, 48, 1)
BAL1 DE 3 bright
stop
Destroy:
BAL1 A 1 
stop
}}

Actor Banana
{
PROJECTILE
+HEXENBOUNCE
+BOUNCEONACTORS
+NOBLOCKMAP
-WINDTHRUST
-NOGRAVITY
+DROPOFF
+SHOOTABLE
+PUSHABLE
+FIXMAPTHINGPOS
-SLIDESONWALLS
-DONTSPLASH
+CANPASS

seesound "weapons\banana"
deathsound "weapons/rocklx"

health 6
wallbouncefactor 0.75
BounceFactor 0.75
height 4
radius 4
bouncecount 100
damage 0

States
{
Spawn:
BANA A 0
BANA A 0 ACS_Execute(981, 0, Health)
BANA A 33 A_JumpIf(waterlevel > 0, "Destroy")
BANA A 1 Thing_Damage(0, 1, 0)
BANA A 1 A_JumpIfHealthLower(1, "Death")
loop
Death:
TNT1 B 0 A_ChangeFlag("CANPASS", 0)
TNT1 B 1 ACS_Execute(935, 0)
TNT1 B 0 A_SpawnItemEx("Explosion_Spawner_XL", 0, 0, 0, 0, 0, 0, 0, 0, 0)
TNT1 B 0 A_SpawnItemEx("BananaBits", 0, 0, 0, Random(-8, 8), 0, Random(16, 32), 0, SXF_ABSOLUTEMOMENTUM, 0)
TNT1 BBBBB 0 A_SpawnItemEx("BananaBits", 0, 0, 0, Random(-8, 8), 0, Random(16, 32), 0, SXF_ABSOLUTEMOMENTUM, 0)
TNT1 B 8 bright A_Explode(ACS_ExecuteWithResult(933, 0, 19), 200, 1)
stop
Destroy:
BANA A 20
stop
}}

Actor BananaBits
{
PROJECTILE
+NOBLOCKMAP
-WINDTHRUST
-NOGRAVITY
+DROPOFF
+SHOOTABLE
+PUSHABLE
+RANDOMIZE
+FIXMAPTHINGPOS
-SLIDESONWALLS
-DONTSPLASH

deathsound "weapons/rocklx"

health 6
scale 0.5
height 4
radius 4
damage 8

States
{
Spawn:
BANA A 0
BANA A 0 Thing_ChangeTid(0, 210)
BANA A 35 A_JumpIf(waterlevel > 0, "Destroy") 
loop
Death:
TNT1 B 0 A_SpawnItemEx("Explosion_Spawner_M", 0, 0, 0, 0, 0, 0, 0, 0, 0)
TNT1 B 0 A_RadiusThrust(112, 128, 1)
TNT1 B 8 bright A_Explode
TNT1 C 6 bright 
TNT1 D 4 bright
stop
Destroy:
BANA A 20
stop
}}

Actor Molotov
{
+DONTREFLECT
PROJECTILE
+NOBLOCKMAP
-WINDTHRUST
-NOGRAVITY
+DROPOFF
-SLIDESONWALLS
-SOLID
+ROCKETTRAIL

DeathSound "weapons\molotovbreak"

damagetype "Barrel"

health 6
height 8
radius 8
damage 1

States
{
Spawn:
BOTT A 0 A_SpawnItemEx("FireRise6", 0, 0, 0, 0, 0, 0, 0, 0, 20)
BOTT A 3 A_JumpIf(waterlevel > 0, "Destroy")
BOTT A 0 A_SpawnItemEx("FireRise5", 0, 0, 0, 0, 0, 0, 0, 0, 20)
BOTT A 3 A_JumpIf(waterlevel > 0, "Destroy")
BOTT A 0 A_SpawnItemEx("FireRise7", 0, 0, 0, 0, 0, 0, 0, 0, 20)
BOTT A 3 A_JumpIf(waterlevel > 0, "Destroy")
BOTT A 0 A_SpawnItemEx("FireRise5", 0, 0, 0, 0, 0, 0, 0, 0, 20)
BOTT A 3 A_JumpIf(waterlevel > 0, "Destroy")
loop
Death:
BOTT A 0 ACS_Execute(935, 0)
BOTT A 0 A_SpawnItemEx("Explosion_Spawner_S", 0, 0, 0, 0, 0, 0, 0, 0, 0)
BOTT A 0 A_SpawnItemEx("FireRise2", 0, 0, 0, Random(-2, 2), 0, Random(3, 6), 0, SXF_ABSOLUTEMOMENTUM, 0)
BOTT AAAAAAAAA 0 A_SpawnItemEx("FireRise2", 0, 0, 0, Random(-2, 2), 0, Random(3, 6), 0, SXF_ABSOLUTEMOMENTUM, 0)
BOTT A 0 A_SpawnItemEx("MolotovFireScript", 0, 0, 24, 0, 0, 0, 0, 0, 0)
BOTT A 0 A_Explode(64, 96, 1)
BOTT A 0 A_Scream
BOTT A 8 bright
stop
Destroy:
BOTT A 1
stop
}}

Actor MolotovFireScript
{
	+NOCLIP
	height 8
	radius 8
	-NOGRAVITY
states
{
Spawn:
	TNT1 A 1 A_PlaySound("weapons\molotovfire")
	TNT1 A 35 ACS_Execute(980, 0, 1)
	TNT1 A 5
	stop
}}


////////////////////////////////////
//////// HITSCAN PROJECTILES ///////
////////////////////////////////////

Actor ShotgunShells : FastProjectile
{
+DONTREFLECT
PROJECTILE
+SKYEXPLODE
height 4
radius 4
damage 0
Scale 3.0
States
{
Spawn:
TNT1 A 8
loop
Death:
PUFF C 0 A_Explode(ACS_ExecuteWithResult(933, 0, 3), 24, 1)
PUFF C 1 A_Stop
PUFF C 8 
PUFF D 8 
stop
XDeath:
PUFF A 1 A_Explode(ACS_ExecuteWithResult(933, 0, 3), 24, 1)
BLUD CBA 8
stop
Crash:
stop
}}

Actor UziShot : FastProjectile
{
PROJECTILE
+STRIFEDAMAGE
+SKYEXPLODE
height 8
radius 8
damage 1
scale 2.0
States
{
Spawn:
TNT1 A 8
loop
Death:
PUFF C 1 A_Stop
PUFF C 8 
PUFF D 8 
stop
XDeath:
BLUD C 8
BLUD BA 8
stop
Crash:
stop
}}


Actor RailDummy
{
+NOCLIP
-SOLID
+FRIENDLY
+NOTARGETSWITCH
+NOINFIGHTING
+NOGRAVITY
Damage 40
height 2
radius 2

States
{
Spawn:
TNT1 A 1
loop
RailFire:
TNT1 A 0
TNT1 A 4 A_CustomRailgun(ACS_ExecuteWithResult(933, 0, 17), 0, "ff ff ff", "ff ff e0", 0, 0)
TNT1 A 1
stop
}}

///////////////////////////////
////// DYNAMITE AND MINES /////
///////////////////////////////
Actor DynamiteFizz
{
+CLIENTSIDEONLY
+NOCLIP
+NOBLOCKMAP
scale 0.1
translation "0:255=224:231"
gravity 0.4
Renderstyle Add
height 1
radius 1
states
{
Spawn:
PLSS AB 1 A_FadeOut(0.02)
loop
}}

Actor Dynamite
{
+DONTREFLECT
PROJECTILE
+RIPPER
+NOEXPLODEFLOOR
-WINDTHRUST
-NOGRAVITY
+CANPASS
+FIXMAPTHINGPOS
bouncefactor 0
speed 0
health 5
damage 0
gravity 4
mass 100
scale 0.14
height 3
radius 2

States
{
Spawn:
DYNM A 0 
DYNM A 0 A_PlaySound("weapons\dynamitefizz", CHAN_BODY, 1.0, 1)
SpawnLoop:
DYNM A 0 A_JumpIf(waterlevel > 1, "Destroy")
DYNM A 0 A_JumpIfHealthLower(0, "Explode")
DYNM A 2 A_Stop
DYNM AAAAAAAAAAAAAAAA 2 A_SpawnItemEx("DynamiteFizz", 0, 0, 12, Random(-2, 2), 0, Random(2, 6), 0, 128, 50)
DYNM A 1 ACS_ExecuteAlways(978, 0)
loop
Explode:
MISL B 0 ACS_Execute(935, 0)
MISL B 0 A_StopSound(CHAN_BODY)
MISL B 0 A_SpawnItemEx("Explosion_Spawner_L", 0, 0, 0, 0, 0, 0, 0, 0, 0)
MISL B 0 A_PlaySound("weapons/rocklx", CHAN_VOICE, 1.0)
MISL B 8 bright A_Explode(ACS_ExecuteWithResult(933, 0, 20), 184, 1) 
MISL D 0 Thing_ChangeTID(0, 0)
MISL D 4 bright
stop
Destroy:
DYNM A 1 Thing_ChangeTID(0, 0)
stop
}}

Actor Mine
{
PROJECTILE
-NOBLOCKMAP
+LOOKALLAROUND
+DOOMBOUNCE
+BOUNCEONACTORS
+NOEXPLODEFLOOR
+SOLID
+ISMONSTER
-NOGRAVITY
+CANPASS
+SHOOTABLE
+INVULNERABLE
+BRIGHT

speed 0
health 6
damage 0
gravity 1.0
damagetype "Mine"
damagefactor "Mine", 0
mass 15
wallbouncefactor 0.85
BounceFactor 0.60
scale 0.2
height 4
radius 4
bouncecount 65536
reactiontime 2
painchance 256


States
{
Spawn:
MINE A 0
MINE A 1 A_JumpIf(TID == 210, "Spawn2")
MINE A 1 A_LookEx(LOF_NOSOUNDCHECK, 0, 128, 1, 360, "Destroy")
MINE A 35 A_LookEx(LOF_NOSOUNDCHECK, 0, 128, 1, 360, "Destroy")
MINE A 0 A_LookEx(LOF_NOSOUNDCHECK, 0, 128, 1, 360, "Destroy") 
MINE A 1 A_LookEx(LOF_NOSOUNDCHECK, 0, 128, 1, 360, "Destroy")
MINE A 35 A_LookEx(LOF_NOSOUNDCHECK, 0, 128, 1, 360, "Destroy")
MINE A 0 A_LookEx(LOF_NOSOUNDCHECK, 0, 128, 1, 360, "Destroy")
MINE A 1 A_LookEx(LOF_NOSOUNDCHECK, 0, 128, 1, 360, "Destroy")
MINE A 35 A_LookEx(LOF_NOSOUNDCHECK, 0, 128, 1, 360, "Destroy")
MINE A 0 A_LookEx(LOF_NOSOUNDCHECK, 0, 128, 1, 360, "Destroy") 
MINE A 1 A_LookEx(LOF_NOSOUNDCHECK, 0, 128, 1, 360, "Destroy")
MINE A 35 A_LookEx(LOF_NOSOUNDCHECK, 0, 128, 1, 360, "Destroy")
MINE A 0 A_LookEx(LOF_NOSOUNDCHECK, 0, 128, 1, 360, "Destroy") 
MINE A 1 A_LookEx(LOF_NOSOUNDCHECK, 0, 128, 1, 360, "Destroy")
MINE A 35 A_LookEx(LOF_NOSOUNDCHECK, 0, 128, 1, 360, "Destroy")
MINE A 0 A_LookEx(LOF_NOSOUNDCHECK, 0, 128, 1, 360, "Destroy") 
MINE A 5
MINE A 0 A_Stop
Spawn2:
MINE A 20
Spawn1:
MINE A 1 A_JumpIfInventory("MineActive", 1, "SeeLoop")
MINE A 2 A_ChangeFLag("WINDTHRUST", 0)
MINE A 1 A_LookEx(LOF_NOSOUNDCHECK, 0, 48, 1, 360, "See")
MINE A 2 A_LookEx(LOF_NOSOUNDCHECK, 0, 48, 1, 360, "See")
MINE A 0 A_LookEx(LOF_NOSOUNDCHECK, 0, 48, 1, 360, "See")
MINE A 0 A_JumpIfInventory("MineActive", 1, "SeeLoop")
MINE A 1 A_JumpIf(z - floorz < 0.1 && momz < 1, "Spawn1")
MINE A 0 A_ChangeFlag("DOOMBOUNCE", 0)
Looper:
MINE A 0 A_JumpIf(waterlevel > 1, "Destroy")
MINE A 1 A_LookEx(LOF_NOSOUNDCHECK, 0, 48, 1, 360, "See")
MINE A 0 A_JumpIfHealthLower(1, "Explode")
MINE A 0 A_JumpIf(z - floorz < 0.1 && momz < 1, "Spawn1")
MINE A 1 A_JumpIf(z - floorz > 0.1, "ReBounce")
MINE A 0 A_ChangeFlag("DOOMBOUNCE", 0)
MINE A 1 A_ChangeFLag("WINDTHRUST", 0)
MINE A 1 A_JumpIf(momx > 0.2 || momz > 0.05, "looper")
MINE A 0 A_Stop
loop
Pain:
ReBounce:
MINE A 1 A_ChangeFlag("DOOMBOUNCE", 1)
MINE A 0 ThrustThingZ(0, 1, 0, 1)
goto Looper
See:
MINE C 1
MINE C 1 A_JumpIfCloser(8, "ZSee")
goto Looper
ZSee:
MINE C 0
MINE C 0 ACS_Execute(977)
MINE C 0 A_JumpIfHealthLower(1, "Explode")
MINE C 0 A_GiveInventory("MineActive", 1)
MINE C 0 A_JumpIf(waterlevel > 1, "Destroy")
MINE C 16 A_PlaySound("weapons\minesee")
MINE B 17 A_PlaySound("weapons\minebeep")
MINE C 1 ACS_ExecuteAlways(978, 0)
SeeLoop:
MINE B 1 A_JumpIfHealthLower(1, "Explode")
MINE B 16 A_PlaySound("weapons\minebeep")
MINE C 0 A_JumpIf(waterlevel > 1, "Destroy")
MINE C 17 A_PlaySound("weapons\minebeep")
MINE C 1 ACS_ExecuteAlways(978, 0)
loop
Death:
MISL A 1
MISL A 1 A_JumpIfInventory("MineActive", 1, "SeeLoop")
goto Looper
Explode:
MISL B 0 A_SpawnItemEx("Explosion_Spawner_M", 0, 0, 0, 0, 0, 0, 0, 0, 0)
MISL B 0 A_ChangeFlag("DOOMBOUNCE", 0)
MISL B 0 A_PlaySound("weapons/rocklx", CHAN_VOICE, 1.0)
MISL B 8 bright A_Explode(ACS_ExecuteWithResult(933, 0, 6), 128, 1) 
MISL D 4 bright 
stop
Destroy:
MINE A 1 
stop
}}

Actor MineActive : Inventory
{
Inventory.Amount 1
Inventory.MaxAmount 1
States
{
Spawn:
TNT1 A -1
stop
}}

Actor IsJumping : Inventory
{
Inventory.Amount 1
Inventory.MaxAmount 1
States
{
Spawn:
TNT1 A -1
stop
}}

Actor BloodDrip
{
PROJECTILE
+RIPPER
+CLIENTSIDEONLY
damage 0
gravity 1.0
states
{
Spawn:
BSPL ABAB 4
loop
Death:
BSPL A 1
stop
}}

Actor DemonHead
{
+HEXENBOUNCE
-SOLID
+CLIENTSIDEONLY
bouncecount 5
bouncefactor 0.6
reactiontime 5
Gravity 0.4
height 8
radius 8
states
{
Spawn:
DMHD A 8 A_Countdown
DMHD A 0 A_SpawnItemEx("BloodDrip", 0, 0, 0, 0, 0, Random(-8, -4), 0, 0, 0)
loop
Death:
DMHD A 1 A_FadeOut(0.05)
loop
}}

Actor DemonGib1 : DemonHead
{
+CLIENTSIDEONLY
ReactionTime 30
States
{
Spawn:
DGB1 A 2 A_SpawnItemEx("BloodDrip", 0, 0, 0, 0, 0, Random(-8, -4), 0, 0, 0)
DGB1 A 0 A_CountDown
DGB1 B 2 A_CountDown
DGB1 C 2 A_SpawnItemEx("BloodDrip", 0, 0, 0, 0, 0, Random(-8, -4), 0, 0, 0)
DGB1 C 0 A_CountDown
DGB1 D 2 A_CountDown
DGB1 E 2 A_SpawnItemEx("BloodDrip", 0, 0, 0, 0, 0, Random(-8, -4), 0, 0, 0)
DGB1 E 0 A_CountDown
DGB1 F 2 A_CountDown
DGB1 G 2 A_SpawnItemEx("BloodDrip", 0, 0, 0, 0, 0, Random(-8, -4), 0, 0, 0)
DGB1 G 0 A_CountDown
DGB1 H 2 A_CountDown
loop
Death:
stop
}}

Actor DemonGib2 : DemonGib1
{
States
{
Spawn:
DGB2 ABCDEFGH 2 A_Countdown
loop
}}

Actor DemonGib3 : DemonGib1
{
States
{
Spawn:
DGB3 ABCDEFGH 2 A_Countdown
loop
}}

Actor DemonGib4 : DemonGib1
{
States
{
Spawn:
GIB1 ABCDEFGH 2 A_Countdown
loop
}}

Actor DemonGib5 : DemonGib1
{
States
{
Spawn:
GIB2 ABCDEFGH 2 A_Countdown
loop
}}

Actor DemonGib6 : DemonGib1
{
States
{
Spawn:
GIB3 ABCDEFGH 2 A_Countdown
loop
}}

Actor DemonGib7 : DemonGib1
{
States
{
Spawn:
GIB4 ABCDEFGH 2 A_Countdown
loop
}}

Actor WeaponDemon
{
+PICKUP
+MISSILE
+HEXENBOUNCE
+BOUNCEONACTORS
-NOGRAVITY
+SOLID
+DROPOFF
+SLIDESONWALLS
+FIXMAPTHINGPOS
+NOEXPLODEFLOOR

gravity 1.0
bouncecount 1000
bouncefactor 0.05
wallbouncefactor 1.0
scale 0.7
height 32
radius 8
damage 0
seesound "demon/pain"
reactiontime 1000

States
{
  Spawn:
	SARG A 5
	SARG A 0 A_ChangeFlag("CANPASS", 1)
	SARG A 5 A_ChangeFlag("NOBLOCKMAP", 0)
  SpawnLoop:
    SARG A 0 A_Countdown
	SARG ABCD 1 A_JumpIf(waterlevel > 0, "Destroy")
	SARG AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDD 1 A_JumpIf(z - floorz < 2.0 || (momz == 0 && (z - FloorZ) < 64.0) || momz == 0.0, "Jump")
  loop
  Jump:
	SARG A 1 A_Stop
	SARG A 0 A_JumpIfInventory("IsJumping", 1, "SpawnLoop")
	SARG A 1 A_GiveInventory("IsJumping", 1)
	SARG A 0 ThrustThingZ(0, 18, 0, 1)
	SARG A 0 ThrustThing(angle*256/360, 4, 0, 0)
    SARG A 35
	SARG A 1 A_TakeInventory("IsJumping", 1)
	goto SpawnLoop
  Explode:
    MISL B 0 ACS_Execute(935, 0)
	MISL B 0 A_PlaySound("weapons/rocklx", CHAN_VOICE, 1.0)
	MISL B 0 A_SpawnItemEx("Explosion_Spawner_XL", 0, 0, 0, 0, 0, 0, 0, 0, 0)
	MISL B 0 A_SpawnItemEx("DemonHead", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib1", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib1", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib2", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib2", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib3", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib4", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib4", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib5", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib6", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib6", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib7", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib7", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib2", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib2", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib3", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib3", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 8 bright A_Explode(ACS_ExecuteWithResult(933, 0, 7), 160, 1)
    MISL C 6 bright
    MISL D 4 bright
    stop
  Destroy:
    SARG A 8
	stop
  Death:
    stop
  }
}

Actor ClusterDemon
{
+PICKUP
+MISSILE
+HEXENBOUNCE
+BOUNCEONACTORS
-NOGRAVITY
+SOLID
+DROPOFF
+SLIDESONWALLS
+FIXMAPTHINGPOS
+NOEXPLODEFLOOR
gravity 1.0
bouncecount 1000
bouncefactor 0.05
wallbouncefactor 1.0
translation "16:47=180:191"
scale 0.8
height 32
radius 8
damage 0
seesound "weapons\clusterdemonbounce"
reactiontime 2000

States
{
  Spawn:
	MAUD A 5
	MAUD A 0 A_ChangeFlag("CANPASS", 1)
	MAUD A 5 A_ChangeFlag("NOBLOCKMAP", 0)
  SpawnLoop:
    MAUD A 0 A_Countdown
	MAUD ABCD 1 A_JumpIf(waterlevel > 0, "Destroy")
	MAUD AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDD 1 A_JumpIf(z - floorz < 2.0 || momz == 0 , "Jump")
  loop
  Jump:
	MAUD A 1 A_Stop
	MAUD A 0 A_JumpIfInventory("IsJumping", 1, "SpawnLoop")
	MAUD A 1 A_GiveInventory("IsJumping", 1)
	MAUD A 0 ThrustThingZ(0, 18, 0, 1)
	MAUD A 0 ThrustThing(angle*256/360, 4, 0, 0)
    MAUD A 35
	MAUD A 1 A_TakeInventory("IsJumping", 1)
	goto SpawnLoop
  Explode:
    MISL B 0 ACS_Execute(935, 0)
    MISL B 0 A_PlaySound("weapons/rocklx", CHAN_VOICE, 1.0)
	MISL B 0 A_SpawnItemEx("Explosion_Spawner_XL", 0, 0, 0, 0, 0, 0, 0, 0, 0)
	MISL B 0 A_SpawnItemEx("DemonGib1", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 129, 0)
	MISL B 0 A_SpawnItemEx("DemonGib1", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 129, 0)
	MISL B 0 A_SpawnItemEx("DemonGib2", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 129, 0)
	MISL B 0 A_SpawnItemEx("DemonGib2", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 129, 0)
	MISL B 0 A_SpawnItemEx("DemonGib3", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 129, 0)
	MISL B 0 A_SpawnItemEx("DemonGib4", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 129, 0)
	MISL B 0 A_SpawnItemEx("DemonGib4", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 129, 0)
	MISL B 0 A_SpawnItemEx("DemonGib5", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 129, 0)
	MISL B 0 A_SpawnItemEx("DemonGib6", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 129, 0)
	MISL B 0 A_SpawnItemEx("DemonGib6", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 129, 0)
	MISL B 0 A_SpawnItemEx("DemonGib7", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 129, 0)
	MISL B 0 A_SpawnItemEx("DemonGib7", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 129, 0)
	MISL B 0 A_SpawnItemEx("DemonGib2", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 129, 0)
	MISL B 0 A_SpawnItemEx("DemonGib2", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 129, 0)
	MISL B 0 A_SpawnItemEx("DemonGib3", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 129, 0)
	MISL B 0 A_SpawnItemEx("DemonGib3", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 129, 0)
	MISL C 0 A_SpawnItemEx("ClusterDemonCluster", 24, 0, 24, Random(16, 24), 0, Random(6, 12), 0, 0, 0)
	MISL C 0 A_SpawnItemEx("ClusterDemonCluster", 24, 0, 24, Random(16, 24), 0, Random(6, 12), 0, 0, 0)
	MISL C 0 A_SpawnItemEx("ClusterDemonCluster", 24, 0, 24, Random(16, 24), 0, Random(6, 12), 0, 0, 0)
	MISL C 0 A_SpawnItemEx("ClusterDemonCluster", 24, 0, 24, Random(16, 24), 0, Random(6, 12), 128, 0, 0)
	MISL C 0 A_SpawnItemEx("ClusterDemonCluster", 24, 0, 24, Random(16, 24), 0, Random(6, 12), 128, 0, 0)
	MISL C 0 A_SpawnItemEx("ClusterDemonCluster", 24, 0, 24, Random(16, 24), 0, Random(6, 12), 128, 0, 0)
	MISL B 8 bright A_Explode(ACS_ExecuteWithResult(933, 0, 22), 160, 1)
	MISL C 6 bright
    MISL D 4 bright
    stop
  Destroy:
    MAUD A 8
	stop
  Death:
    stop
  }
}

Actor ClusterDemonCluster
{
+MISSILE
+HEXENBOUNCE
+BOUNCEONACTORS
-NOGRAVITY
+SOLID
+DROPOFF
+SLIDESONWALLS
+FIXMAPTHINGPOS
+NOEXPLODEFLOOR
gravity 1.0
bouncecount 1000
bouncefactor 0.05
wallbouncefactor 1.0
translation "168:175=180:191"
scale 0.3
height 16
radius 4
damage 0
seesound "demon/pain"
reactiontime 1000

States
{
  Spawn:
	SARG A 0
	SARG A 5 Thing_ChangeTid(0, 210)
	SARG A 0 A_ChangeFlag("CANPASS", 1)
	SARG A 5 A_ChangeFlag("NOBLOCKMAP", 0)
  SpawnLoop:
    SARG A 0 A_Countdown
	SARG ABCD 1 A_JumpIf(waterlevel > 0, "Destroy")
	SARG AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDD 1 A_JumpIf(z - floorz < 2.0 || momz == 0 , "Jump")
  loop
  Jump:
	SARG A 1 A_Stop
	SARG A 0 A_JumpIfInventory("IsJumping", 1, "SpawnLoop")
	SARG A 1 A_GiveInventory("IsJumping", 1)
	SARG A 0 ThrustThingZ(0, 30, 0, 1)
	SARG A 0 ThrustThing(angle*256/360, 8, 0, 0)
    SARG A 35
	SARG A 1 A_TakeInventory("IsJumping", 1)
	goto SpawnLoop
  Explode:
    MISL B 0 A_PlaySound("weapons/rocklx", CHAN_VOICE, 1.0)
	MISL B 0 A_SpawnItemEx("Explosion_Spawner_S", 0, 0, 0, 0, 0, 0, 0, 0, 0)
	MISL B 0 A_SpawnItemEx("DemonGib1", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib1", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib2", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib2", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib3", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib4", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib4", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib5", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib6", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib6", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib7", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib7", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib2", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib2", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib3", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 0 A_SpawnItemEx("DemonGib3", 0, 0, 0, Random(-8, 8), Random(-4, 4), Random(4, 10), 64, 128, 0)
	MISL B 8 bright A_Explode(64, 128, 1)
    MISL C 6 bright
    MISL D 4 bright
    stop
  Destroy:
    SARG A 8
	stop
  Death:
    stop
  }
}

Actor KamikazeBomber
{
+DONTREFLECT
+MISSILE
+SOLID
+DROPOFF
+SLIDESONWALLS
+FIXMAPTHINGPOS
+NOEXPLODEFLOOR
+CANPASS
gravity 1.0
scale 0.9
height 32
radius 24
damage 0
seesound "weapons\kamikazeidle"
reactiontime 40
States
{
  Spawn:
    BKAM A 0 A_Countdown
	BKAM A 0 A_PlaySoundEx ("weapons\kamikazescream", CHAN_BODY, 1)
	BKAM ABCD 4 A_JumpIf(waterlevel > 0, "Destroy")
  loop
  Destroy:
    BKAM A 24 A_StopSound(CHAN_BODY)
	stop
  Death:
    BKAM B 0 ACS_Execute(935, 0)
    BKAM B 0 A_PlaySound("weapons/rocklx", CHAN_VOICE, 1.0)
	BKAM B 0 A_SpawnItemEx("Explosion_Spawner_L", 0, 0, 0, 0, 0, 0, 0, 0, 0)
	MISL B 1 bright A_Explode(ACS_ExecuteWithResult(933, 0, 8), 160, 1)
	stop
  }
}

/////////////
/// OTHER ///
/////////////

Actor BaseballBat
{
PROJECTILE
+INVISIBLE
speed 4
height 4
radius 2
damagetype "Bat"
damage 5

states
{
Spawn:
TNT1 A 10
stop
Death:
stop
}}

Actor Kick
{
PROJECTILE
+INVISIBLE
+NODAMAGETHRUST
+DONTREFLECT
+FIXMAPTHINGPOS
speed 4
height 8
radius 4
damagetype "Groin"
damage 1
states
{
Spawn:
TNT1 A 10
stop
Death:
stop
}}