
actor DooMImpClass : PlayerPawn
{
  health 180 //60
  gibhealth 99999 //added - actor can not be gibbed
  radius 20
  height 54
  mass 80
  speed 0.75 //0.35
  painchance 140
  Player.MaxHealth 180
  Player.ViewHeight 45
  Player.JumpZ 10
  Player.MorphWeapon "ImpBaller"
  Player.WeaponSlot 1, ImpBaller
  Player.DisplayName "DoomImp"
  Player.SoundClass "MImpale"
  
  DamageFactor "Suicide", 0 // puppetmaster can not suicide a monster
  DamageFactor "MarineDamage", 0.5
  DamageFactor "MarineRLDamage", 0.5
  DamageFactor "BFGSplash", 0.5
  DamageFactor "MarineRail", 0.35
  
  DamageFactor "CybRLDamage", 0.25
  DamageFactor "ImpBallDamage", 0
  DamageFactor "CacoDamage", 0
  DamageFactor "SkelDamage", 0
  DamageFactor "FatsoDamage", 0
  DamageFactor "KnightDamage", 0
  DamageFactor "ArachDamage", 0
  DamageFactor "viledamage", 0
  DamageFactor "Control", 0
  DamageFactor "ZombiesDamage", 0
  DamageFactor "Slime", 0
  DamageFactor "ZombieTankDamage", 0
  -FRIENDLY
  +NOTARGET
  +NOSKIN
  +NOPAIN
  -PICKUP
  +LONGMELEERANGE //added
  +NOTRIGGER //added - avoid issues in level design
  
  states
  {
  Spawn:
      TROO A 10 
	  TROO B 10 
      loop
  See:
      TROO A 0
      TROO A 1 A_Jump (240,2) //0
	  TROO A 0 A_PlaySoundEx ("imp/active","body")
      TROO ABCD 6 
      Loop
  Missile:
      TROO EF 8
	  TROO G 6
	  goto Spawn
  Melee:
      TROO G 6
      goto See
  Death:
    TROO I 8 A_GiveToTarget ("MarineExp",3)
    TROO J 8 A_PlaySoundEx ("imp/death","Body")
    TROO K 6 Thing_changeTid(144,0)
    TROO L 6 A_NoBlocking
	TROO L 1 A_SpawnItemEx ("MDeathGhost",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0) //0
	TROO M -1
    stop
  XDeath:
    TROO N 5 A_GiveToTarget ("MarineExp",3)
    TROO O 5 A_XScream
    TROO P 5 Thing_changeTid(144,0)
    TROO Q 5 A_NoBlocking
	TROO Q 1 A_SpawnItemEx ("MDeathGhost",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0) //0
    TROO RST 5
	TROO U -1
    stop	
  }
}

ACTOR ImpBaller : Weapon
{
  obituary "%o was burned by %k."
  hitobituary "%o was slashed by %k."
  weapon.kickback 60
  attacksound "imp/melee"
  weapon.ammouse 0
  +WEAPON.NOALERT
  +WEAPON.AMMO_OPTIONAL
  +WEAPON.CHEATNOTWEAPON
  +WEAPON.NOAUTOAIM
  //+INVENTORY.UNDROPPABLE //added
  
  states
  {
  Spawn:
    TNT1 A 0 Thing_Remove (0)
    Stop
  Select:
    CLAW A 1 A_Raise
    Goto Ready
  Ready:
    CLAW A 7 A_WeaponReady
    CLAW A 0 A_JumpIfInventory ("Mskull",0,3)
    CLAW A 7 A_WeaponReady
    CLAW A 0 A_JumpIfInventory ("Mskull",3,1)
    CLAW A 0 HealThing(5)	
    Loop
  DeSelect:
    CLAW A 1 A_Lower
    Loop
  Fire:
    CLAW A 0 A_JumpIfCloser (130,"Melee") //60
	CLAW B 5 bright
    CLAW C 5 bright
	CLAW D 5 bright A_FireCustomMissile ("PDoomImpBall",0,0,5,10)
	CLAW D 5 bright A_FireCustomMissile ("PDoomImpBall",random(-15,15),0,5,10)
	CLAW D 5 bright A_FireCustomMissile ("PDoomImpBall",random(-15,15),0,5,10)
	CLAW D 5 bright A_FireCustomMissile ("PDoomImpBall",random(-15,15),0,5,10)
	CLAW D 5 bright A_FireCustomMissile ("PDoomImpBall",random(-15,15),0,5,10)
	CLAW E 5
    Goto Ready
  Melee:
    CLAW A 5
	CLAW B 6 A_CustomPunch (8,0,1,"FBulletPuff")
    CLAW E 6
	goto Ready	
  AltFire:
    CLAW A 5 ACS_ExecuteAlways (419,0,2)
	Goto Ready
  }
}

actor PDoomImpBall : DoomImpBall
{
damage 6
speed 30
DamageType "ImpBallDamage"
}

// DarkImp Class

actor DarkImpClass : PlayerPawn
{
  health 300 //120
  gibhealth 99999 //added - actor can not be gibbed
  radius 20
  height 54
  mass 80
  speed 0.75 //0.45
  painchance 140
  Player.MaxHealth 300
  Player.ViewHeight 45
  Player.JumpZ 10
  Player.MorphWeapon "DarkImpHand"
  Player.WeaponSlot 1, DarkImpHand
  Player.DisplayName "DarkImp"
  Player.SoundClass "MsDarkImp"
  
  DamageFactor "Suicide", 0 // puppetmaster can not suicide a monster
  DamageFactor "MarineDamage", 0.5
  DamageFactor "MarineRLDamage", 0.5
  DamageFactor "BFGSplash", 0.5
  DamageFactor "MarineRail", 0.35
  
  DamageFactor "CybRLDamage", 0.25
  DamageFactor "ImpBallDamage", 0
  DamageFactor "CacoDamage", 0
  DamageFactor "SkelDamage", 0
  DamageFactor "FatsoDamage", 0
  DamageFactor "KnightDamage", 0
  DamageFactor "ArachDamage", 0
  DamageFactor "viledamage", 0
  DamageFactor "Control", 0
  DamageFactor "ZombiesDamage", 0
  DamageFactor "Slime", 0
  DamageFactor "ZombieTankDamage", 0
  -FRIENDLY
  +NOTARGET
  +NOSKIN
  +NOPAIN
  -PICKUP
  +LONGMELEERANGE //added
  +NOTRIGGER //added - avoid issues in level design
  
  states
  {
  Spawn:
      DRKI AB 10 
      loop
  See:
      DRKI A 0
      DRKI A 1 A_Jump (240,2) //0
	  DRKI A 0 A_PlaySoundEx ("darkimp/active","body")
      DRKI ABCD 6 
      Loop
  Missile:
	  DRKI EF 4
	  DRKI G 5 bright
	  goto Spawn
  Melee:
      DRKI G 6
      goto See
  Death:
      DRKI I 8 A_GiveToTarget ("MarineExp",4)
      DRKI J 8 A_PlaySoundEx ("darkimp/death","Body")
      DRKI K 6 Thing_changeTid(144,0)
      DRKI L 6 A_NoBlocking
	  DRKI L 1 A_SpawnItemEx ("MDeathGhost",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0) //0
	  DRKI M -1
	  stop
  XDeath:
      DRKI N 5 A_GiveToTarget ("MarineExp",4)
      DRKI O 5 A_XScream
      DRKI P 5 Thing_changeTid(144,0)
      DRKI Q 5 A_NoBlocking
	  DRKI Q 1 A_SpawnItemEx ("MDeathGhost",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0) //0
      DRKI RST 5
	  DRKI U -1
	  stop	
  }
}

ACTOR DarkImpHand : Weapon
{
  obituary "%o was burned by %k."
  hitobituary "%o was slashed by %k."
  weapon.kickback 60
  attacksound "imp/melee"
  weapon.ammouse 0
  +WEAPON.NOALERT
  +WEAPON.AMMO_OPTIONAL
  +WEAPON.CHEATNOTWEAPON
  +WEAPON.NOAUTOAIM
  //+INVENTORY.UNDROPPABLE //added
  
  states
  {
  Spawn:
    TNT1 A 0 Thing_Remove (0)
    Stop
  Select:
    DCLW A 1 A_Raise
    Goto Ready
  Ready:
    DCLW A 6 A_WeaponReady
    DCLW A 0 A_JumpIfInventory ("Mskull",0,3)
    DCLW A 6 A_WeaponReady
    DCLW A 0 A_JumpIfInventory ("Mskull",3,1)
    DCLW A 0 HealThing(5)	
    Loop
  DeSelect:
    DCLW A 1 A_Lower
    Loop
  Fire:
    DCLW A 0 A_JumpIfCloser (130,"Melee") //60
	DCLW B 4
	DCLW C 4
	DCLW D 4 bright A_FireCustomMissile ("MPDarkSeeker",0,0,5,10)
	DCLW D 4 bright A_FireCustomMissile ("MPDarkSeeker",random(-15,15),0,5,10)
	DCLW D 4 bright A_FireCustomMissile ("MPDarkSeeker",random(-15,15),0,5,10)
	DCLW D 4 bright A_FireCustomMissile ("MPDarkSeeker",random(-15,15),0,5,10)
	DCLW D 4 bright A_FireCustomMissile ("MPDarkSeeker",random(-15,15),0,5,10)
	DCLW A 4
    Goto Ready
  Melee:
    DCLW A 5
	DCLW B 6 A_CustomPunch (8,0,1,"FBulletPuff")
    DCLW E 6
	goto Ready	
  AltFire:
    DCLW A 5 ACS_ExecuteAlways (419,0,20)
	Goto Ready
  }
}

actor MPDarkSeeker : MDarkSeeker
{
    Speed 16
}

// Shadow 

actor ShadowClass : PlayerPawn
{
  health 320 //160
  gibhealth 99999 //added - actor can not be gibbed
  radius 20
  height 54
  mass 100
  speed 1.5
  painchance 200
  Player.MaxHealth 320
  Player.ViewHeight 40
  Player.JumpZ 10
  Player.MorphWeapon "ShadowHand"
  Player.WeaponSlot 1, ShadowHand
  Player.DisplayName "Shadow"
  Player.SoundClass "Sshadow"
  RenderStyle "Translucent"
  Alpha 0.7
  
  DamageFactor "Suicide", 0 // puppetmaster can not suicide a monster
  DamageFactor "MarineDamage", 0.5
  DamageFactor "MarineRLDamage", 0.5
  DamageFactor "BFGSplash", 0.5
  DamageFactor "MarineRail", 0.35
  
  DamageFactor "CybRLDamage", 0.25
  DamageFactor "ImpBallDamage", 0
  DamageFactor "CacoDamage", 0
  DamageFactor "SkelDamage", 0
  DamageFactor "FatsoDamage", 0
  DamageFactor "KnightDamage", 0
  DamageFactor "ArachDamage", 0
  DamageFactor "viledamage", 0
  DamageFactor "Control", 0
  DamageFactor "ZombiesDamage", 0
  DamageFactor "Slime", 0
  DamageFactor "ZombieTankDamage", 0
  -FRIENDLY
  +NOTARGET
  +NOSKIN
  +NOPAIN
  -PICKUP
  +LONGMELEERANGE //added
  +NOTRIGGER //added - avoid issues in level design
  
  states
  {
  Spawn:
      SHDW E 5
      loop
  See:
      SHDW A 0
      SHDW A 1 A_Jump (240,2) //0
	  SHDW A 0 A_PlaySoundEx ("Shadow/active","body")
      SHDW A 3 A_SpawnItemEx("ShadowGhostA",-20, 0, 0, 0, 0, 0, 0, 128)
	  SHDW B 3 A_SpawnItemEx("ShadowGhostB",-20, 0, 0, 0, 0, 0, 0, 128)
	  SHDW C 3 A_SpawnItemEx("ShadowGhostC",-20, 0, 0, 0, 0, 0, 0, 128)
	  SHDW D 3 A_SpawnItemEx("ShadowGhostD",-20, 0, 0, 0, 0, 0, 0, 128)
      Loop
  Missile:
      SHDW EF 6
	  SHDW G 8
	  goto Spawn
  Melee:
      SHDW E 6
      SHDW G 8
      goto See
  Death:
	SHDW I 6 A_PlaySoundEx ("Shadow/death","Body")
	SHDW I 0 A_GiveToTarget ("MarineExp",5)
	SHDW J 5 A_NoBlocking
	SHDW K 5 A_SpawnItemEx("Shadowtorso", 0, 0, 0, 1, 0, 0, 0, 128)
	SHDW L 5 A_SpawnItemEx ("MDeathGhost",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
	SHDW M 6 Thing_changeTid(144,0)
	SHDW NO 6
	SHDW P -1
	stop
  XDeath:
	SHDX A 8 A_GiveToTarget ("MarineExp",5)
	SHDX B 6 A_XScream
	SHDX C 6 Thing_changeTid(144,0)
	SHDX D 6 A_NoBlocking
	SHDX E 6 A_SpawnItemEx ("MDeathGhost",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
	SHDX F 6
	SHDX G -1
	stop	
  }
}

ACTOR ShadowHand : Weapon
{
  obituary "%o was assassinated by %k."
  hitobituary "%o was assassinated by %k."
  weapon.kickback 60
  attacksound "imp/melee"
  weapon.ammouse 0
  +WEAPON.NOALERT
  +WEAPON.AMMO_OPTIONAL
  +WEAPON.CHEATNOTWEAPON
  +WEAPON.NOAUTOAIM
  //+INVENTORY.UNDROPPABLE //added
  
  states
  {
  Spawn:
    TNT1 A 0 Thing_Remove (0)
    Stop
  Select:
    DCLW A 1 A_Raise
    Goto Ready
  Ready:
    DCLW A 6 A_WeaponReady
    DCLW A 0 A_JumpIfInventory ("Mskull",0,3)
    DCLW A 6 A_WeaponReady
    DCLW A 0 A_JumpIfInventory ("Mskull",3,1)
	DCLW A 0 HealThing(5)
    Loop
  DeSelect:
    DCLW A 1 A_Lower
    Loop
  Fire:
    DCLW A 0 A_JumpIfCloser (130,"Melee") //60
	//DCLW A 0 A_JumpIfInventory ("Mskull",0,"Fire2")
	DCLW B 7 
    SCLW C 6 A_FireCustomMissile ("PShadowBall",0,0,0,8)
	SCLW D 6 A_FireCustomMissile ("PShadowBall",random(-15,15),0,0,8)
	SCLW C 6 A_FireCustomMissile ("PShadowBall",random(-15,15),0,0,8)
	SCLW D 6 A_FireCustomMissile ("PShadowBall",random(-15,15),0,0,8)
	SCLW C 6 A_FireCustomMissile ("PShadowBall",random(-15,15),0,0,8)
	DCLW E 8
    Goto Ready
  Fire2:
	DCLW B 8
    SCLW C 6 A_FireCustomMissile ("PShadowBall",0,0,0,8)
	SCLW C 6 A_FireCustomMissile ("PShadowBall",0,0,0,8)
	SCLW D 6 A_FireCustomMissile ("PShadowBall",0,0,0,8)
	DCLW E 8
    Goto Ready	
  Melee:
    DCLW A 3
	DCLW B 3 A_CustomPunch (7,0,1,"FBulletPuff")
    DCLW E 3
	goto Ready	
  AltFire:
    DCLW A 5 ACS_ExecuteAlways (419,0,24)
	Goto Ready
  }
}

actor PShadowBall : ShadowBall
{
Speed 20
Damage 6
}

actor SoulHarvesterclass : PlayerPawn
{
  health 200 //100
  gibhealth 99999 //added - actor can not be gibbed
  radius 20
  height 54
  mass 80
  speed 0.75 //0.4
  painchance 140
  Player.MaxHealth 200
  Player.ViewHeight 45
  Player.JumpZ 10
  Player.MorphWeapon "HarvesterHand"
  Player.WeaponSlot 1, HarvesterHand
  Player.DisplayName "SoulHarvester"
  Player.SoundClass "SHplayer"
  
  DamageFactor "Suicide", 0 // puppetmaster can not suicide a monster
  DamageFactor "MarineDamage", 0.5
  DamageFactor "MarineRLDamage", 0.5
  DamageFactor "BFGSplash", 0.5
  DamageFactor "MarineRail", 0.35
  
  DamageFactor "CybRLDamage", 0.25
  DamageFactor "ImpBallDamage", 0
  DamageFactor "CacoDamage", 0
  DamageFactor "SkelDamage", 0
  DamageFactor "FatsoDamage", 0
  DamageFactor "KnightDamage", 0
  DamageFactor "ArachDamage", 0
  DamageFactor "viledamage", 0
  DamageFactor "Control", 0
  DamageFactor "ZombiesDamage", 0
  DamageFactor "Slime", 0
  DamageFactor "ZombieTankDamage", 0
  -FRIENDLY
  +NOTARGET
  +NOSKIN
  +NOPAIN
  -PICKUP
  +NOTRIGGER //added - avoid issues in level design
  
  states
  {
  Spawn:
      SLHV A 10 
	  SLHV B 10 
      loop
  See:
      SLHV A 0
      SLHV A 1 A_Jump (240,2) //0
	  SLHV A 0 A_PlaySoundEx ("imp/active","body")
      SLHV ABCD 6 
      Loop
  Missile:
	  SLHV EFG 2 
	  SLHV HIJK 3 Bright 
	  SLHV L 3 Bright 
	  SLHV M 4
	  goto Spawn
  Melee:
      SLHV EF 3
      goto Spawn
  Death:
    SLHV O 7 A_PlaySoundEx ("imp/death","Body")
	SLHV P 7 A_GiveToTarget ("MarineExp",7)
	SLHV Q 7 Thing_changeTid(144,0)
	SLHV R 7
    SLHV S 6 A_CustomMissile("SoulHarvesterGhost", 32, 0, 0)
    SLHV T 5 A_NoBlocking
	SLHV UV 5
	SLHV W -1
    stop
  XDeath:
    SLHV X 6 A_Xscream
	SLHV Y 6 A_CustomMissile("SoulHarvesterGhost", 32, 0, 0)
	SLHV Z 6 A_GiveToTarget ("MarineExp",7)
	SLHV [ 6 Thing_changeTid(144,0)
	SLHV ] 6 A_SpawnItemEx ("MDeathGhost",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
    SLHX A -1
	stop	
  }
}

ACTOR HarvesterHand : Weapon
{
  obituary "%o couldn't evade %k attack."
  hitobituary "%o couldn't evade %k attack."
  weapon.kickback 60
  attacksound "imp/melee"
  weapon.ammouse 0
  +WEAPON.NOALERT
  +WEAPON.AMMO_OPTIONAL
  +WEAPON.CHEATNOTWEAPON
  //+INVENTORY.UNDROPPABLE //added
  
  states
  {
  Spawn:
    TNT1 A 0 Thing_Remove (0)
    Stop
  Select:
    DCLW A 1 A_Raise
    Goto Ready
  Ready:
    DCLW A 6 A_WeaponReady
    DCLW A 0 A_JumpIfInventory ("Mskull",0,3)
    DCLW A 6 A_WeaponReady
    DCLW A 0 A_JumpIfInventory ("Mskull",3,1)
	DCLW A 0 HealThing(5)
    Loop
  DeSelect:
    DCLW A 1 A_Lower
    Loop
  Fire:
    DCLW B 4
    DCLW C 4
    DCLW D 4 A_FireCustomMissile ("PSoulHarvesterBall",0,0,0,8)
	DCLW C 4 A_FireCustomMissile ("PSoulHarvesterBall",random(-15,15),0,0,8)
	DCLW D 4 A_FireCustomMissile ("PSoulHarvesterBall",random(-15,15),0,0,8)
	DCLW C 4 A_FireCustomMissile ("PSoulHarvesterBall",random(-15,15),0,0,8)
	DCLW D 4 A_FireCustomMissile ("PSoulHarvesterBall",random(-15,15),0,0,8)
    DCLW E 3
    DCLW D 3
    DCLW C 3
    DCLW B 3
    Goto Ready
  AltFire:
    DCLW A 5 ACS_ExecuteAlways (419,0,29)
	Goto Ready
  }
}

actor PSoulHarvesterBall : SoulHarvesterBall
{
speed 12
}