
ACTOR ZombieManClass : PlayerPawn
{
  Health 200
  gibhealth 99999 //added - actor can not be gibbed
  Speed 0.75 //0.4
  Radius 20
  Height 56
  Mass 100
  PainChance 200
  Player.MorphWeapon ZombieRifle
  Player.DisplayName "ZombieMan"
  Player.WeaponSlot 1, ZombieRifle
  Player.MaxHealth 100
  Player.ViewHeight 41
  Player.SoundClass Brainless
  Player.JumpZ 10

  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.2
  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
  
  +NOSKIN
  +NOPAIN
  -PICKUP
  -FRIENDLY
  +NOTARGET
  +NOTRIGGER //added - avoid issues in level design
  
  states
  {
  Spawn:
	POSS AB 10 
    Loop
  See:
    POSS A 0 
    POSS A 1 A_Jump (240,2) //0
	POSS A 0 A_PlaySoundEx ("grunt/active","body")
    POSS ABCD 4 
    Loop
  Missile:
	POSS E 3
	POSS F 6 bright
    POSS E 6 
    Goto spawn
  Death:
    POSS I 5 A_PlaySoundEx ("grunt/death","Body")
    POSS J 5 A_NoBlocking
    POSS K 0 Thing_changeTid(144,0)
    POSS K 5 A_GiveToTarget ("MarineExp",2)
	POSS K 5
	POSS K 1 A_SpawnItemEx ("MDeathGhost",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0) //0
    POSS K 1 A_SpawnItemEx ("AssaultRifle",0,0,random(29,38),0,0,0,0,32,0)	
	POSS L -1
    stop
  XDeath:
    POSS M 4 A_GiveToTarget ("MarineExp",2)
    POSS N 4 A_XScream
    POSS O 4 A_NoBlocking
    POSS P 0 Thing_changeTid(144,0)
    POSS P 1 A_SpawnItemEx ("MDeathGhost",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0) //0
    POSS PQRST 4
	POSS T 1 A_SpawnItemEx ("AssaultRifle",0,0,random(29,38),0,0,0,0,32,0)
    POSS T -1
	stop
  }
}

// Weapon 


ACTOR ZombieRifle : Weapon 
{ 
  weapon.kickback 100
  attacksound "weapons/pistol"
  obituary "%o was killed by %k."
  +NOEXTREMEDEATH
  +WEAPON.NOALERT
  +WEAPON.AMMO_OPTIONAL
  +WEAPON.CHEATNOTWEAPON
  +WEAPON.NOAUTOAIM
  //+INVENTORY.UNDROPPABLE //added
  states
  {
  Ready:
    POGN A 7 A_WeaponReady
    POGN A 0 A_JumpIfInventory ("Mskull",0,3)
    POGN A 7 A_WeaponReady
    POGN A 0 A_JumpIfInventory ("Mskull",3,1)
    POGN A 0 HealThing(5)	
    Loop
  Select:
	POGN A 1 A_Raise 
    loop
  DeSelect:
    POGN A 1 A_Lower
    Loop
  Fire:
  	POGN A 0 A_JumpIfInventory ("PM_AltFireX",1,"AltFireX")
    POGN A 3 A_GunFlash
    POGN B 3 bright A_FireBullets (1.5,1.0,1,16,"FBulletPuff",1)
    POGN C 3 bright
    POGN A 0 A_Refire
    POGN A 2 //5
    Goto Ready
  AltFireX:
    POGN A 1 A_GunFlash
	POGN B 0 A_FireCustomMissile("PuppetBulletTracer", random(-5,5),0,12,-6,0,random(-1,1))
    POGN B 2 bright A_FireBullets (6,6,1,8,"PuppetBulletRico",1)
    POGN C 2 bright
	POGN B 0 A_FireCustomMissile("PuppetBulletTracer", random(-5,5),0,12,-6,0,random(-1,1))
    POGN B 2 bright A_FireBullets (6,6,1,8,"PuppetBulletRico",1)
    POGN C 2 bright
	POGN B 0 A_FireCustomMissile("PuppetBulletTracer", random(-5,5),0,12,-6,0,random(-1,1))
	POGN B 2 bright A_FireBullets (6,6,1,8,"PuppetBulletRico",1)
    POGN C 2 bright
	POGN B 0 A_FireCustomMissile("PuppetBulletTracer", random(-5,5),0,12,-6,0,random(-1,1))
	POGN B 2 bright A_FireBullets (6,6,1,8,"PuppetBulletRico",1)
    POGN C 2 bright
	POGN A 24
    Goto Ready

  Flash:
    TNT1 A 3 A_Light0
    TNT1 A 3 A_Light1
    TNT1 A 3 A_Light2
    TNT1 A 0 A_Light0
    Stop
  AltFire:
    POGN A 5 ACS_ExecuteAlways (419,0,1)
	goto ready
  }
}

// ChainSaw Zombieman Class

ACTOR ChainsawZombieClass : PlayerPawn
{
  Health 200
  gibhealth 99999 //added - actor can not be gibbed
  Speed 1.25
  Radius 20
  Height 56
  Mass 100
  PainChance 200
  Player.MorphWeapon ZombieChainSaw
  Player.DisplayName "ChainsawZombieMan"
  Player.WeaponSlot 1, ZombieChainSaw
  Player.MaxHealth 180
  Player.ViewHeight 41
  Player.SoundClass Brainless
  Player.JumpZ 10
  MeleeRange 150
  
  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
  
  +NOSKIN
  +NOPAIN
  -PICKUP
  -FRIENDLY
  +NOTARGET
  +NOTRIGGER //added - avoid issues in level design
  
  states
  {
  Spawn:
	CHAN AB 8 
    Loop
  See:
    CHAN A 0 
    CHAN A 1 A_Jump (240,2) //0
	CHAN A 0 A_PlaySoundEx ("grunt/active","body")
    CHAN ABCD 4
	CHAN D 0 HealThing(10)
    Loop
  Missile:
    CHAN EF 4 
    Goto spawn
  Death:
    CHAN I 5 A_PlaySoundEx ("grunt/death","Body")
    CHAN J 5 A_NoBlocking 
    CHAN K 5 A_GiveToTarget ("MarineExp",2)
    CHAN L 5 Thing_changeTid(144,0)
    CHAN M 5
    CHAN N 1 A_SpawnItemEx ("MDeathGhost",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0) //0
    CHAN H 1 A_SpawnItemEx ("MChainsaw",0,0,random(29,38),0,0,0,0,32,0)	
	CHAN N -1
    stop
  XDeath:
	CHAN O 4 A_GiveToTarget ("MarineExp",2)
    CHAN P 4 A_XScream
    CHAN Q 4 A_NoBlocking
    CHAN R 0 Thing_changeTid(144,0)
    CHAN R 1 A_SpawnItemEx ("MDeathGhost",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0) //0
    CHAN RSTUV 4
	CHAN V 1 A_SpawnItemEx ("MChainsaw",0,0,random(29,38),0,0,0,0,32,0)
    CHAN V -1
	stop
  }
}

// Weapon 


ACTOR ZombieChainSaw : Chainsaw 
{ 
  obituary "%o was sliced by a madman %k with a chainsaw!"
  +NOEXTREMEDEATH
  +WEAPON.NOALERT
  +WEAPON.AMMO_OPTIONAL
  +WEAPON.CHEATNOTWEAPON
  +WEAPON.NOAUTOAIM
  //+INVENTORY.UNDROPPABLE //added
  states
  {
  Ready:
    SAWG CDCD 3 A_WeaponReady
    SAWG A 0 A_JumpIfInventory ("Mskull",0,5)
    SAWG CDCD 3 A_WeaponReady
    SAWG A 0 A_JumpIfInventory ("Mskull",3,1)	
    Loop
  Select:
	SAWG C 1 A_Raise 
    loop
  DeSelect:
    SAWG C 1 A_Lower
    Loop
  Fire:
    SAWG AB 3 A_Saw ("weapons/sawfull","weapons/sawhit",20,"FBulletPuff")
	SAWG B 0 HealThing(1)
    SAWG B 0 A_ReFire
    goto Ready
  AltFire:
    SAWG A 5 ACS_ExecuteAlways (419,0,19)
	goto ready
  Spawn:
    CSAW A 1 Thing_remove(0)
    stop
  }
}


// Plasma Zombie

ACTOR PlasmaZombieClass : PlayerPawn
{
  Health 250
  gibhealth 99999 //added - actor can not be gibbed
  Speed 0.75 //0.4
  Radius 20
  Height 56
  Mass 100
  PainChance 200
  Player.MorphWeapon PlasmaZombieRifle
  Player.DisplayName "Plasma Zombie"
  Player.WeaponSlot 1, PlasmaZombieRifle
  Player.MaxHealth 250
  Player.ViewHeight 41
  Player.SoundClass Brainless
  Player.JumpZ 10

  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
  
  +NOSKIN
  +NOPAIN
  -PICKUP
  -FRIENDLY
  +NOTARGET
  +NOTRIGGER //added - avoid issues in level design
  
  states
  {
  Spawn:
    ZMAY AB 10 
    Loop
  See:
    ZMAY A 0 
    ZMAY A 1 A_Jump (240,2) //0
    ZMAY A 0 A_PlaySoundEx ("grunt/active","body")
    ZMAY ABCD 4 
    Loop
  Missile:
    ZMAY E 1
    ZMAY F 2 bright
    ZMAY E 1
    ZMAY F 2 bright
    ZMAY E 1
    ZMAY F 2 bright
    ZMAY E 10 
    Goto spawn
  Death:
    ZMAY I 5 A_PlaySoundEx ("grunt/death","Body")
    ZMAY J 5 A_NoBlocking
    ZMAY K 0 Thing_changeTid(144,0)
    ZMAY K 5 A_GiveToTarget ("MarineExp",3)
	ZMAY K 5
    ZMAY K 1 A_SpawnItemEx ("MDeathGhost",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0) //0
	ZMAY K 1 A_SpawnItemEx ("MPlasmaRifle",0,0,random(29,38),0,0,0,0,32,0)
	ZMAY L -1
    stop
  XDeath:
    ZMAY O 5 A_GiveToTarget ("MarineExp",3)
    ZMAY P 5 A_XScream
    ZMAY Q 5 A_NoBlocking
    ZMAY R 0 Thing_changeTid(144,0)
    ZMAY R 5 A_SpawnItemEx ("MDeathGhost",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
    ZMAY STU 5
	ZMAY V 1 A_SpawnItemEx ("MPlasmaRifle",0,0,random(29,38),0,0,0,0,32,0)
    ZMAY V -1
    stop
  }
}

// Weapon 


ACTOR PlasmaZombieRifle : Weapon 
{ 
  weapon.kickback 100
  attacksound "weapons/pistol"
  obituary "%o was plasmaed by John Stalve-- uhm, %k."
  +NOEXTREMEDEATH
  +WEAPON.NOALERT
  +WEAPON.AMMO_OPTIONAL
  +WEAPON.CHEATNOTWEAPON
  +WEAPON.NOAUTOAIM
  //+INVENTORY.UNDROPPABLE //added
  states
  {
  Select:
    PLSG A 1 A_Raise 
    loop
  DeSelect:
    PLSG A 1 A_Lower
    Loop
  Ready:
    PLSG A 7 A_WeaponReady
    PLSG A 0 A_JumpIfInventory ("Mskull",0,3)
    PLSG A 7 A_WeaponReady
    PLSG A 0 A_JumpIfInventory ("Mskull",3,1)
    PLSG A 0 HealThing(5)	
    Loop
  Fire:
    PLSG A 1 A_GunFlash
    PLSG A 2 A_FireCustomMissile ("ZPlasmaBall")
    PLSG A 1
    PLSG A 2 A_FireCustomMissile ("ZPlasmaBall")
    PLSG A 1
    PLSG A 2 A_FireCustomMissile ("ZPlasmaBall")
	PLSG A 1
	PLSG A 2 A_FireCustomMissile ("ZPlasmaBall")
    PLSG A 6
    PLSG A 2 A_FireCustomMissile ("ZPlasmaBall")
	PLSG A 1
	PLSG A 2 A_FireCustomMissile ("ZPlasmaBall")
	PLSG A 1
    PLSG A 2 A_FireCustomMissile ("ZPlasmaBall")
	PLSG A 1
	PLSG A 2 A_FireCustomMissile ("ZPlasmaBall")
    PLSG A 6
    PLSG A 2 A_FireCustomMissile ("ZPlasmaBall")
	PLSG A 1
	PLSG A 2 A_FireCustomMissile ("ZPlasmaBall")
	PLSG A 1
    PLSG A 2 A_FireCustomMissile ("ZPlasmaBall")
	PLSG A 1
	PLSG A 2 A_FireCustomMissile ("ZPlasmaBall")
    PLSG BC 2
    PLSG D 3
    PLSG E 7
    PLSG DCB 4
    Goto Ready
  Flash:
    PLSF A 1 Bright A_Light1
    PLSF B 2 Bright A_Light2
    PLSF A 1 Bright A_Light1
    PLSF B 2 Bright A_Light2
    PLSF A 1 Bright A_Light1
    PLSF B 2 Bright A_Light2
    PLSF A 0 A_Light0
    Stop
  AltFire:
    PLSG A 5 ACS_ExecuteAlways (419,0,44)
    goto ready
  Spawn:
    TNT1 A 1 Thing_Remove (0)
    Stop
  }
}

