ACTOR TeleporterClass : PlayerPawn
{
  Speed 1
  Health 100
  Radius 16
  Height 56
  Mass 200
  PainChance 255
  Player.ColorRange 112, 127
  Player.DisplayName "Teleporter"
  Player.CrouchSprite "PLYC"
  player.startitem "TeleporterGun", 1
  player.startitem "TeleporterAmmo", 5
  player.startitem "MegaSphere", 1
  player.startitem "TeleporterSuit", 1
  Player.JumpZ 12
  damagefactor "rocket", 0
  limitedtoteam 0
  +NOSKIN
  States
  {
  Spawn:
    TELP A 0
	TELP A 35
	TELP A 0 A_JumpIf (health>=50, 2)
	TELP A 0 ACS_Execute(110,0)
	TELP A 0 A_JumpIfInventory("TeleporterAmmo", 5, "Spawn")
	TELP A 35
	TELP A 0 ACS_Execute(116,0)
    Loop
  See:
    TELP ABCD 6 
    Loop
  Missile:
    TELP E 12 
    Goto Spawn
  Melee:
    TELP F 6 BRIGHT
    Goto Missile
  Pain:
    TELP G 4 
    TELP G 4 A_Pain
    Goto Spawn
  Death:
    TELP H 10
    TELP I 10 A_PlayerScream
    TELP J 10 A_NoBlocking
    TELP KLM 10
    TELP N -1
    Stop
  XDeath:
	PLAY O 0 A_Stop
    TELP O 5 A_SpawnItemEx ("HumanGibs",0,0,0,0,0,0,0,128)
	TELP O 0 A_SkullPop("HeadGib")
    TELP P 5 A_XScream
    TELP Q 5 A_NoBlocking
    TELP RSTUV 5
    TELP W -1
    Stop
  }
}

ACTOR TeleporterGun : Weapon
{
   Weapon.SelectionOrder 350
   Inventory.PickupSound "misc/w_pkup"
   Inventory.PickupMessage "You got the Teleporter!"
   Weapon.AmmoType "TeleporterAmmo"
   Weapon.AmmoGive 5
   Weapon.AmmoUse 1
   Weapon.Kickback 0
   Weapon.YAdjust 0
   +WEAPON.NOAUTOAIM
   +WEAPON.AMMO_OPTIONAL
   States
   {
   Spawn:
      TLPP A -1
      Loop
   Ready:
      TLPG A 1 A_WeaponReady
      Loop
   Deselect:
      TLPG A 1 A_Lower
      Loop
   Select:
      TLPG A 1 A_Raise
      Goto Select
   Fire:
	  TLPG A 0 A_JumpIfNoAmmo("NoAmmo")
	  TLPG A 0 bright A_PlaySound("TeleporterFire")
	  TLPG A 0 A_GunFlash
	  TLPG AABBC 3 bright
      TLPG A 0 A_PlayWeaponSound("TeleporterShot")
	  TLPG A 0 bright ACS_ExecuteAlways(105,0)
	  TLPG C 3 bright A_FireCustomMissile("TeleporterProjectile",0,0,0,0,0)
      TLPG CCBB 7 bright
	  TLPG A 0 A_Refire
      goto Ready
   Flash:
	  TLPF AA 3 bright A_Light1
	  TLPF BBCC 3 bright A_Light2
	  TNT1 A 0 A_Light0 
	  Stop
   NoAmmo:
      TLPG A 30 A_PlayWeaponSound("TeleporterNo")
      goto Ready
   }
}

ACTOR TeleporterAmmo : Ammo
{
	Inventory.PickupMessage "Teleporter Ammo!"
	Inventory.Amount 1
	Inventory.MaxAmount 5
	Ammo.BackpackAmount 1
	Ammo.BackpackMaxAmount 5
	Inventory.Icon "CELLA0"
	States
	{
	Spawn:
		CELL A -1
		stop
	}
}

ACTOR TeleporterProjectile
{
	Speed 200
	Radius 16
	Height 2
	Damage 0
	PROJECTILE
	+RIPPER
	+PAINLESS
	+NOBLOCKMAP
	+SKYEXPLODE
	+EXPLODEONWATER
	+INVISIBLE
	Translation "80:127=192:207", "224:231=192:199", "160:167=192:199"
	States
	{
	Spawn:
		APLS A 0
		APLS A 0 Thing_ChangeTID(0, 1999)
		APLS A 0 ACS_ExecuteAlways(106, 0)
		APLS AB 1 bright
		goto spawn+3
	Death:
		APBX A 2 A_Recoil(10)
		APBX A 0 A_Stop
		APBX A 0 A_PlaySound("TeleporterHit")
		APBX A 0 ACS_ExecuteAlways(107, 0)
		APBX ABCDE 5 bright
		stop
	}
}

ACTOR TeleporterDestination
{
	Radius 16
	Height 56
	Speed 0
	+SOLID
	+NOBLOCKMAP
	+NOLIFTDROP
	+NOGRAVITY
	+TELESTOMP
	Translation "80:127=192:207", "224:231=192:199", "160:167=192:199"
	States
	{
	Spawn:
		TFOG A 0 ACS_ExecuteAlways(108, 0)
		TFOG ABCDCB 3 bright
	Loop
	}
}