


actor mastergun : Weapon
{
  Weapon.AmmoUse 0
  +WEAPON.NOALERT
  //+WEAPON.NOAUTOFIRE
  +WEAPON.AMMO_OPTIONAL
  +WEAPON.ALT_AMMO_OPTIONAL
  +WEAPON.CHEATNOTWEAPON
  +INVENTORY.UNDROPPABLE
  attacksound "imp/melee"
  
  States
  {
  Ready:
	TNT1 A 1
    TNT1 B 1 A_WeaponReady
    LOOP //GoTo Ready
  Deselect:
    TNT1 A 1 
	TNT1 A 0 A_TakeInventory("PM_AltfireX", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_AltfireY", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_AltfireZ", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_ZoomOffX", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_ZoomOffY", 1) //added - reset to defaults
    TNT1 B 1 A_Lower
	TNT1 A 1 
    LOOP
  Select:
    TNT1 A 1 A_Raise
	TNT1 B 1
	// Taking old weapon forced (if KeepInventory enable or some shit) 
	TNT1 A 0 A_TakeInventory ("ZombieRifle",1)
	TNT1 A 0 A_TakeInventory ("ZombieColonelRifle",1)
	TNT1 A 0 A_TakeInventory ("ImpBaller",1)
	TNT1 A 0 A_TakeInventory ("ZombieShotGun",1)
	TNT1 A 0 A_TakeInventory ("ChainGuyGun",1)
	TNT1 A 0 A_TakeInventory ("Demonmouth",1)
	TNT1 A 0 A_TakeInventory ("SpectreMouth",1)
	TNT1 A 0 A_TakeInventory ("RevenantGun",1) 
	TNT1 A 0 A_TakeInventory ("KnightHand",1)
	TNT1 A 0 A_TakeInventory ("BaronHand",1)
	TNT1 A 0 A_TakeInventory ("CacoBaller",1) 
	TNT1 A 0 A_TakeInventory ("FatsoGun",1)
	TNT1 A 0 A_TakeInventory ("ArPlasmaGun",1)
	TNT1 A 0 A_TakeInventory ("CyberDemonRL",1)
	TNT1 A 0 A_TakeInventory ("MasterMindGun",1)
	TNT1 A 0 A_TakeInventory ("VileHands",1)
	TNT1 A 0 A_TakeInventory ("SSmp40",1)
	TNT1 A 0 A_TakeInventory ("PainElementWeap",1)
	TNT1 A 0 A_TakeInventory ("MLostSoulWeap",1)
	TNT1 A 0 A_TakeInventory ("ZombieChainSaw",1)
	TNT1 A 0 A_TakeInventory ("DarkImpHand",1)
	TNT1 A 0 A_TakeInventory ("ZombieSuperShotgun",1)
	TNT1 A 0 A_TakeInventory ("DoubleChainGun",1)
	TNT1 A 0 A_TakeInventory ("BloodDemonMouth",1)
	TNT1 A 0 A_TakeInventory ("ShadowHand",1)
	TNT1 A 0 A_TakeInventory ("CacolanterMounth",1)
	TNT1 A 0 A_TakeInventory ("AbaddonMounth",1)
	TNT1 A 0 A_TakeInventory ("BelphegorHand",1)
	TNT1 A 0 A_TakeInventory ("Hectebusguns",1)
	TNT1 A 0 A_TakeInventory ("FFist",1)
	TNT1 A 0 A_TakeInventory ("FBers",1)
	TNT1 A 0 A_TakeInventory ("FChainsaw",1)
	TNT1 A 0 A_TakeInventory ("FPistol",1)
	TNT1 A 0 A_TakeInventory ("FShotgun",1)
	TNT1 A 0 A_TakeInventory ("FSuperShotgun",1)
	TNT1 A 0 A_TakeInventory ("FChaingun",1)
	TNT1 A 0 A_TakeInventory ("FRocketLauncher",1)
	TNT1 A 0 A_TakeInventory ("FPlasmaRifle",1)
	TNT1 A 0 A_TakeInventory ("FBFG9000",1)
	TNT1 A 0 A_TakeInventory ("MLeftFist",1)
	TNT1 A 0 A_TakeInventory ("ZombieAShotgun",1)
	TNT1 A 0 A_TakeInventory ("ArChaingun",1)
	TNT1 A 0 A_TakeInventory ("Barrelweapon",1)
	TNT1 A 0 A_TakeInventory ("PlasmaZombieRifle",1)
	TNT1 A 0 A_TakeInventory ("CyberAnniRL",1)
	TNT1 A 0 A_TakeInventory ("FHeat",200)
	//set properties
	TNT1 A 0 SetPlayerProperty (0, 0, 0)
	TNT1 A 0 SetPlayerProperty (0, 0, 4)
	TNT1 A 0 SetPlayerProperty (0,1,3)
	TNT1 A 0 ACS_ExecuteAlways(426,0,11)
	// Give ClassChecker
	TNT1 A 0 A_GiveInventory("ImMMaster")
    Loop


  Fire:
   TNT1 A 1
		TNT1 A 0 A_JumpIfInventory ("PM_AltFireX",1,"AltFireX")
		TNT1 A 0 A_JumpIfInventory ("PM_AltFireY",1,"AltFireY")
		TNT1 A 0 A_JumpIfInventory ("PM_AltFireZ",1,"AltFireZ")
    TNT1 A 1
    TNT1 B 1 A_JumpIfInventory ("getupm",1,"seeme")
	TNT1 A 1
	TNT1 B 1
    TNT1 A 1  //ACS_ExecuteAlways(520)
	TNT1 B 1
	TNT1 A 1
	TNT1 B 1
	TNT1 A 1
	TNT1 B 1
	TNT1 A 1
	TNT1 B 1
    TNT1 A 1 A_JumpIfInventory ("nothere",1,"nomasters")
	TNT1 B 1
	TNT1 A 1
	TNT1 B 1 ACS_ExecuteAlways(403)	
	TNT1 A 1
	TNT1 B 1
	TNT1 A 1
	TNT1 B 1
	TNT1 A 1
	TNT1 B 1
	TNT1 A 1
	TNT1 B 1
	TNT1 A 1
	TNT1 B 1
	TNT1 A 1
	TNT1 B 1
		TNT1 A 5
		TNT1 A 6 A_CustomPunch (1,0,0,"FBulletPuff",0)
		TNT1 A 6
	TNT1 A 0 A_TakeInventory("PM_AltfireX", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_AltfireY", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_AltfireZ", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_ZoomOffX", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_ZoomOffY", 1) //added - reset to defaults		
    goto ready
	
   AltFireX:
     TNT1 A 0 A_print("Ghost fake flame with re-fire")
	 GoTo AltFireXRefire
   AltFireXRefire:
     TNT1 A 0 A_JumpIfInventory("PuppetFlameLimit",54,"FlameCooldown")
	 TNT1 A 1 A_FireCustomMissile ("GhostVileFireDamage",0,1,5,10)
	 TNT1 A 0 A_GiveInventory ("PuppetFlameLimit",1)
	 TNT1 A 12
	 TNT1 A 1 A_FireCustomMissile ("GhostVileFireNoDamage",0,1,5,10)
	 TNT1 A 0 A_GiveInventory ("PuppetFlameLimit",1)
	 TNT1 A 12
	 TNT1 A 1 A_FireCustomMissile ("GhostVileFireNoDamage",0,1,5,10)
	 TNT1 A 0 A_GiveInventory ("PuppetFlameLimit",1)
	 TNT1 A 12
	 TNT1 A 0 A_JumpIfInventory("PuppetFlameLimit",54,"FlameCooldown")
	 TNT1 A 0 A_SetBlend ("YELLOW",0.2,56)
	 TNT1 A 0 A_Refire("AltFireXRefire")
	 TNT1 A 0 A_TakeInventory("PM_AltfireX", 1) //added - reset to defaults
	 TNT1 A 0 A_TakeInventory("PM_AltfireY", 1) //added - reset to defaults
	 TNT1 A 0 A_TakeInventory("PM_AltfireZ", 1) //added - reset to defaults
	 TNT1 A 0 A_TakeInventory("PM_ZoomOffX", 1) //added - reset to defaults
	 TNT1 A 0 A_TakeInventory("PM_ZoomOffY", 1) //added - reset to defaults
   GoTo Ready
 FlameCooldown:
    TNT1 A 0 A_print("Ghost flame overuse, cooldown")
	TNT1 A 0 A_TakeInventory("PM_AltfireX", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_AltfireY", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_AltfireZ", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_ZoomOffX", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_ZoomOffY", 1) //added - reset to defaults
	GoTo Ready

   AltFireY:
	 TNT1 A 0 A_print("Ghost push with re-fire")
	 GoTo AltFireYRefire
   AltFireYRefire:
	 TNT1 A 0 A_JumpIfInventory("PuppetPushLimit",8,"PushCooldown")
	 TNT1 A 1 A_Blast (BF_DONTWARN, 255, 168, 15)
	 TNT1 A 1 A_PlaySound ("GhostKick")
		TNT1 A 0 A_GiveInventory ("PuppetPushLimit",1)
	 TNT1 A 5
	 TNT1 A 1 A_PlaySound ("GhostEvilLaught")
	 TNT1 A 10
	 TNT1 A 10
	 TNT1 A 10
	 TNT1 A 10
	 TNT1 A 10
	 TNT1 A 10
	 TNT1 A 10
	 TNT1 A 10
	 TNT1 A 10
	 TNT1 A 10
	 TNT1 A 0 A_JumpIfInventory("PuppetPushLimit",8,"PushCooldown")
	 TNT1 A 0 A_Refire("AltFireYRefire")
	 TNT1 A 0 A_TakeInventory("PM_AltfireX", 1) //added - reset to defaults
	 TNT1 A 0 A_TakeInventory("PM_AltfireY", 1) //added - reset to defaults
	 TNT1 A 0 A_TakeInventory("PM_AltfireZ", 1) //added - reset to defaults
	 TNT1 A 0 A_TakeInventory("PM_ZoomOffX", 1) //added - reset to defaults
	 TNT1 A 0 A_TakeInventory("PM_ZoomOffY", 1) //added - reset to defaults
   GoTo Ready
 PushCooldown:
    TNT1 A 0 A_print("Ghost push overuse, cooldown")
	TNT1 A 0 A_TakeInventory("PM_AltfireX", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_AltfireY", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_AltfireZ", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_ZoomOffX", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_ZoomOffY", 1) //added - reset to defaults
	GoTo Ready

  AltFireZ:
    TNT1 A 0 A_print("Healing monsters with re-fire")
	GoTo AltFireZRefire
  AltFireZRefire:
	TNT1 A 1 A_RadiusGive("Health",600,RGF_MONSTERS,3)
	TNT1 A 0 A_Jump(242,3)
	TNT1 A 0 A_PlaySound("HRTBEATS")
	TNT1 A 0 A_SetBlend ("GREEN",0.2,56)
	TNT1 A 0 A_Refire("AltFireZRefire")
	TNT1 A 0 A_TakeInventory("PM_AltfireX", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_AltfireY", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_AltfireZ", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_ZoomOffX", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_ZoomOffY", 1) //added - reset to defaults
	GoTo Ready

seeme:
    TNT1 A 1
    TNT1 A 0 A_TakeInventory ("getupm",1)
    TNT1 B 1 A_FireCustomMissile ("fastraise",0,0,0,0,0,0)
	TNT1 A 1
	TNT1 B 1	
    GOTO ready
nomasters:
    TNT1 A 1
	TNT1 B 1 
    TNT1 A 0 A_print("puppets are disabled")
    TNT1 A 1 a_takeinventory("nothere",1)
	TNT1 B 1 
    GOTO ready
  AltFire:
	TNT1 A 1 //added
  	TNT1 A 0 A_TakeInventory("PM_AltfireX", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_AltfireY", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_AltfireZ", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_ZoomOffX", 1) //added - reset to defaults
	TNT1 A 0 A_TakeInventory("PM_ZoomOffY", 1) //added - reset to defaults
    TNT1 A 1
    TNT1 A 0 ACS_ExecuteAlways(406)
	TNT1 B 5
    TNT1 A 5
	TNT1 B 5
	TNT1 A 5
	TNT1 B 5
    GOTO ready 
  Spawn:
    TNT1 A 1 Thing_Remove (0)
    Stop
  }
}


actor controlp // needed to possess monster
{
  Radius 16
  Height 8
  Speed 999 //28
  Damage 9999
  Projectile
  +NOEXTREMEDEATH
  +NOBLOCKMAP
  +NOGRAVITY
  +BLOODLESSIMPACT
  DamageType "Control"
  +SERVERSIDEONLY //added to suppress server console log warnings of no NetID for this actor
  
  States
  {
  Spawn:
    TNT1 AAA 3
  Death:
    TNT1 A 1 Thing_Remove (0)
    stop
  }
}






actor ImMMaster : Inventory
{
  inventory.amount 1
  inventory.maxamount 1
  states
  {
  Spawn:
    TNT1 A -1
    stop
  }
}

actor nothere : inventory
{
inventory.maxamount 1
}
actor noesc : nothere
{}
actor getupm : inventory
{
inventory.maxamount 1
}




actor GhostVileFireNoDamage
{
  radius 8
  height 4
  speed 99
  alpha 1
  damage 0
  DamageType "viledamage"
  renderstyle add
  PROJECTILE
  +NOBLOCKMAP
  +NOGRAVITY
  +SEEKERMISSILE
  -BLOODLESSIMPACT
  +FORCEPAIN
  -RANDOMIZE
  states
  {
  Spawn:
    TNT1 A 1 A_Fire 
	loop
  Death:
    FIRE A 2 bright A_StartFire
    FIRE BAB 2 bright A_Fire
    FIRE C 2 bright A_FireCrackle
    FIRE BCBCDCDCDEDED 2 bright A_Fire
    FIRE E 2 bright A_FireCrackle
    FIRE FEFEFGHGHGH 2 bright A_Fire
    stop
  }
}

actor GhostVileFireDamage
{
  radius 8
  height 4
  speed 99
  alpha 1
  damage 1
  DamageType "viledamage"
  renderstyle add
  PROJECTILE
  +NOBLOCKMAP
  +NOGRAVITY
  +SEEKERMISSILE
  -BLOODLESSIMPACT
  +FORCEPAIN
  -RANDOMIZE
  states
  {
  Spawn:
    TNT1 A 1 A_Fire 
	loop
  Death:
    FIRE A 2 bright A_StartFire
    FIRE BAB 2 bright A_Fire
    FIRE C 2 bright A_FireCrackle
    FIRE BCBCDCDCDEDED 2 bright A_Fire
    FIRE E 2 bright A_FireCrackle
    FIRE FEFEFGHGHGH 2 bright A_Fire
    stop
  }
}