// Prox Mine Code: Copied from Strikerman's GE007 Mod, with mostly everything untouched. Credit goes to him and SMII team.

actor ProxExplosion
{
  Radius 1
  Height 1
  Speed 0
  Scale 1.25
  obituary "%o was roasted to a cinder by %k's Mines."
  RenderStyle Translucent
  Alpha 0.9
  -SOLID
  +NOGRAVITY
  +NODAMAGETHRUST
  +FORCERADIUSDMG
  +FORCEXYBILLBOARD
  States
  {
  Spawn:
   FIR2 ABCDEFGH 2 BRIGHT A_Explode(10, 76, 1)
   FIR2 IJKLMN 2 BRIGHT
   stop
  }
}

actor ProxDetector
{
	radius 5
	height 2
	health 1
	damage 22
	speed 0
	scale 0.3
	mass 9999999
	obituary "%o's beady little eyes didn't see %k's mine hiding in the road."
	meleerange 128
	+DOOMBOUNCE
	+NOBLOOD
	+MISSILE
	+NOGRAVITY
	+GHOST
	+THRUGHOST
	+LOOKALLAROUND
	+SHOOTABLE
	+NOCLIP
	+NOTARGET
	states
	{
		Spawn:
			TNT1 A 0
			TNT1 A 1 A_Look
			loop
		See:
			TNT1 A 1 A_Chase
			TNT1 A 0 A_JumpIfCloser(128, 3)
			TNT1 A 0 A_Look
			loop
			TNT1 A 2 A_Explode(40, 10, 1)
			stop
		Melee:
			TNT1 A 0 A_Explode(40, 10, 1)
			stop
		Death:
			TNT1 A 1 A_Explode(999, 10, 1)
			stop
	}
}

actor ProxProj
{
	radius 8
	height 8
	health 5
	damage 22
	speed 0
	scale 0.3
	mass 9999999
	obituary "%k's mine jumped into %o's face."
	+HEXENBOUNCE
	+NOBLOOD
	+SHOOTABLE
	-NOGRAVITY
	+LOOKALLAROUND
	+NOTARGET
	+BOUNCEONACTORS
	+GHOST
	+THRUGHOST
	+NOCLIP
	
	+MISSILE
	bouncefactor 0
	states
	{
		Spawn:
			PROX A 0
			PROX A 1
			PROX A 0 A_CheckFloor("SpawnFloor")
			PROX A 0 A_NoGravity
			PROX A 0 A_Stop
			PROX A 16
			PROX A 0 A_SpawnItem("ProxDetector", 0, 0, 1)
			PROX A 1
			goto Spawn+7
		SpawnFloor:
			PROX B 16
			PROX B 0 A_SpawnItem("ProxDetector", 0, 0, 1)
			PROX B 1
			goto SpawnFloor+2
		Death:
			PROX A 0 A_NoGravity
			PROX A 0 A_CheckFloor("FloorDeath")
			PROX A 14 A_PlaySound("GE007/Weapons/ProxBeep")
			TNT1 A 0 bright A_PlaySound("GE007/Weapons/Boom")
			TNT1 A 0 bright A_Explode(64, 128, 1)
			TNT1 A 0 A_NoGravity
			TNT1 A 3 A_SpawnItemEx ("ProxExplosion", 0, 0, 0, 0, 0, 0, 0, 0, 0)
			TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
			TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
			TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
			TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
			TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
			TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
			TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
			TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
			TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
			TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
			TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
			TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
			TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
			TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
			TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
			TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
			TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
			TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
			TNT1 AAAAAAA 5 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
			stop
		FloorDeath:
			PROX B 10 A_PlaySound("GE007/Weapons/ProxBeep")
			goto Death+3
	}
}

actor ProxProj3 : ProxProj
{
 States
 {
		Spawn:
			PROX A 1 A_CheckFloor("SpawnFloor")
			goto Spawn
		SpawnFloor:
			PROX B 16 A_PlaySound("GE007/Weapons/ProxHit")
			PROX B 0 A_SpawnItem("ProxDetector", 0, 0, 1)
			PROX B 1
			goto SpawnFloor+2
 }
}

actor ProxProj2
{
	radius 5
	height 5
	damage 0
	speed 24
	scale 0.3
	obituary "%o was tagged by %k's Proximity Mine."
	SeeSound "GE007/Weapons/ProxThrow"
	+MISSILE
	+THRUGHOST
	+GHOST
	+CORPSE
	+DROPOFF
	+NOBLOCKMAP
	+NOTARGET
	+FORCEXYBILLBOARD
	states
	{
		Spawn:
			PROX A 0
			PROX A 0 A_Gravity
			PROX A 0 ThrustThingZ(0, 30, 0, 1)
			PROX AB 1
			goto Spawn+3
		XDeath:
			PROX A 0 A_PlaySound("weapons/grbnce")
			PROX A 0 A_ScreamAndUnblock
			PROX A 0 A_SpawnItem("ProxProj3", 0, 1)
			TNT1 A 1
			stop
		Death:
			PROX A 0 A_PlaySound("GE007/Weapons/Proxhit")
			PROX A 0 A_ScreamAndUnblock
			PROX A 0 A_SpawnItem("ProxProj", 0, 1)
			TNT1 A 1
			stop
	}
}

actor GE007ProximityMines : Weapon
{
  Obituary "%o dived into %k's proximity mine."
  Weapon.Ammotype1 "GE007ProximityMinesAmmo"
  Weapon.UpSound "GE007/Weapons/ProxBeep"
  tag "Proximity Mine"
  Inventory.Pickupmessage "Picked up a proximity mine."
  Weapon.AmmoUse1 1
  Weapon.AmmoGive1 5
  Scale 0.3
  +WEAPON.NOAUTOFIRE
  +WEAPON.NOAUTOAIM
  States
  {
	Spawn:
		TKA4 A -1
		stop
	Select:
		TNT1 A 1 A_Raise
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
		loop
	Deselect:
		TNT1 A 1 A_Lower
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
		loop
	Ready:
		TNT1 A 1 A_WeaponReady
		loop
	Fire:
		TNT1 A 30 A_FireCustomMissile("ProxProj2", 0, 1, 5, 0, 0)
		TNT1 A 0 A_Refire
		goto Ready
  }
}

ACTOR GE007ProximityMinesPickup : Custominventory 
{
   Scale 0.1
 Inventory.PickupMessage "Picked up some Proximity Mines."
   inventory.pickupsound "GE007/Weapons/ProxBeep"
   States
   {
   Spawn:
		TKA2 A -1
	  loop
   Pickup:
	  TNT1 A 0 A_GiveInventory("GE007ProximityMines")
	  stop
   }
}

ACTOR RemoteMine
{
	PROJECTILE
	+SHOOTABLE
	+GHOST
	+NOBLOOD
	+EXTREMEDEATH
	+SEEKERMISSILE
	+THRUGHOST
	-NOBLOCKMAP
	-NOLIFTDROP
	-NOGRAVITY
	-ACTIVATEIMPACT
	-ACTIVATEPCROSS
	-ACTIVATEMCROSS
	+FORCEXYBILLBOARD
	mass 9999999
	SpawnID 234
	Obituary "%k used the ultimate detonator on %o."
	Health 5
	Damage 0
	Speed 24
	Scale 0.3
	Radius 6
	Height 6
	SeeSound "GE007/Weapons/ProxThrow"
	Renderstyle Normal
	States
	{
	Spawn:
	  RMIN A 0
	  RMIN A 0
	  RMIN A 0 ThrustThingZ(0, 30, 0, 1)
	  RMIN A 0 A_UnSetShootable
	  RMIN AB 1
	  goto Spawn+4
	Death:
	  RMIN A 0 A_PlaySound("GE007/Weapons/Proxhit")
	  RMIN A 0 A_SetShootable
	  RMIN A 0 A_CheckFloor("FloorDeath")
	  RMIN A 0 A_NoGravity
	  RMIN A 2 A_JumpIfInTargetInventory("Detonator", 1, "Detonate")
	  RMIN A 0 A_JumpIfHealthLower(1, "BlowUp")
	  goto Death+4
	FloorDeath:
	  RMIN B 0 A_Gravity
	  RMIN B 2 A_JumpIfInTargetInventory("Detonator", 1, "Detonate")
	  RMIN B 0 A_JumpIfHealthLower(1, "BlowUp")
	  goto FloorDeath+1
	XDeath:
	  RMIN A 0
	  RMIN A 0 A_Gravity
	  RMIN A 0 A_SetShootable
	  RMIN A 0 A_PlaySound("weapons/grbnce")
	  RMIN A 1
	  RMIN A 0 A_CheckFloor("FloorDeath")
	  RMIN A 0 A_JumpIfHealthLower(1, "BlowUp")
	  goto XDeath+4
	Detonate:
		RMIN A 0 A_UnSetShootable
		RMIN A 0 A_UnsetSolid
		RMIN A 0 A_CheckFloor("FloorDetonate")
		RMIN A 0 A_NoGravity
		RMIN A 4 A_PlaySound("GE007/Weapons/ProxBeep")
		RMIN A 4 A_Jump(127, 1)
		RMIN A 4
		TNT1 A 0 bright A_PlaySound("GE007/Weapons/Boom")
		TNT1 A 0 bright A_Explode(72, 128, 1)
		TNT1 A 0 A_NoGravity
		TNT1 A 0 Thing_ChangeTID(0, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", 0, 0, 0, 0, 0, 0, 0, 0, 0)
		TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 AAAAAAA 5 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		stop
	BlowUp:
		RMIN A 0 A_Fall
		RMIN A 0 A_UnsetSolid
		RMIN A 0 A_NoGravity
		RMIN A 0 A_Stop
		TNT1 A 0 bright A_PlaySound("GE007/Weapons/Boom")
		TNT1 A 0 bright A_Explode(72, 128, 1)
		TNT1 A 0 A_NoGravity
		TNT1 A 0 Thing_ChangeTID(0, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 A 0 A_SpawnItemEx ("ExplosionSmoke2", Random(-44, 44), Random(-44, 44), Random(0, 38), 0, 0, 0, 0, 128, 0)
		TNT1 A 3 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		TNT1 AAAAAAA 5 A_SpawnItemEx ("ProxExplosion", Random(-24, 24), Random(-24, 24), Random(0, 38), 0, 0, 0, Random(-360, 360), 0, 0)
		stop
	FloorDetonate:
		RMIN B 4 A_PlaySound("GE007/Weapons/ProxBeep")
		RMIN B 4 A_Jump(127, 1)
		RMIN B 4
		goto Detonate+7
	}
}

actor GE007RemoteMines : Weapon
{
  Obituary "%k detonated %o with his Remote Mine."
  Weapon.Ammotype1 "GE007RemoteMinesAmmo"
  Weapon.UpSound "GE007/Weapons/ProxBeep"
   tag "Remote Mine"
  Inventory.Pickupmessage "Picked up a remote mine."
  Weapon.AmmoUse1 1
  Weapon.AmmoGive1 5
  Scale 0.3
  +WEAPON.NOAUTOFIRE
  +WEAPON.AMMO_OPTIONAL
  +WEAPON.NOAUTOAIM
  States
  {
	Spawn:
		TKA4 B -1
		stop
	Select:
		TNT1 A 1 A_Raise
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
		loop
	Deselect:
		TNT1 A 1 A_Lower
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
		loop
	Ready:
		TNT1 A 1 A_WeaponReady
		loop
	Fire:
		TNT1 A 0 A_JumpIfNoAmmo("AltFire")
		TNT1 A 1 A_FireCustomMissile("RemoteMine", 0, 1, 5, 0, 0)
		TNT1 A 29
		TNT1 A 0 A_Refire
		goto Ready
	AltFire:
		TNT1 A 1
		DETO ABCD 1
		DETO E 5
		DETO F 0 A_PlayWeaponSound("GE007/Weapons/RemoteButton")
		DETO F 0 A_GiveInventory("Detonator", 1)
		DETO F 5
		DETO E 5
		DETO DCBA 1
		TNT1 A 10 A_TakeInventory("Detonator", 999)
		TNT1 A 0 A_Refire
		goto Ready
  }
}

ACTOR GE007RemoteMinesPickup : Custominventory
{
   Scale 0.1
 Inventory.PickupMessage "Picked up some Remote Mines."
   inventory.pickupsound "GE007/Weapons/ProxBeep"
   States
   {
   Spawn:
		TKA2 A -1
	  loop
   Pickup:
	  TNT1 A 0 A_GiveInventory("GE007RemoteMines")
	  stop
   }
}

actor Detonator : Inventory
{
  inventory.amount 1
  inventory.maxamount 1
  -INVBAR
  -INTERHUBSTRIP
  +INVENTORY.UNDROPPABLE
  +INVENTORY.HUBPOWER
  states
  {
  Spawn:
	TNT1 A 1
	loop
  }
}