/*

==.100% TACTICAL PISTOL==
Modelled after the weapon of a valued operator, the .100% Tactical Pistol
by default features Fuller Auto fire, unleashing a terrifying hail of gunfire
that rivals most full sized automatic weaponry.

As a secondary fire, the pistol can also fire a massive oversized slug that drives
straight through weaker enemies, it's best not to think about the logistics about
this too much, or how it ejects the super sized casing.
*/

actor Pistoltoken : custominventory
{
	+notimefreeze
	scale 1
	Inventory.PickupSound "brickbook/pickup"
	Inventory.PickupMessage "You got the .100% tactical pistol!"
	states
	{
	spawn:
		SKUP A 8 bright
		SKUP A 5
		loop
	pickup:
		TNT1 A 0
		TNT1 A 0 a_jumpifinventory ("RevenantBox", 1, "dropBoner")
		TNT1 A 0 a_jumpifinventory ("IcarusLauncher", 1, "dropIcarus")
		TNT1 A 0 a_jumpifinventory ("Tsbrick", 1, "dropbrick")
		TNT1 A 0 a_jumpifinventory ("ParticleSmasher", 1, "dropsmasher")
		TNT1 A 0 a_giveinventory ("SKPistol", 1)
		stop
	dropbrick:
		TNT1 A 0
		TNT1 A 0 a_spawnitemex ("DroppedBrick",1,0,15,random (-3,-6),0,random(2,4),0,SXF_NOCHECKPOSITION)
		TNT1 A 0 a_takeinventory ("tsbrick", 1)
		TNT1 A 0 a_giveinventory ("SKPistol", 1)
		stop
	dropsmasher:
		TNT1 A 0
		TNT1 A 0 a_spawnitemex ("DroppedSmasher",1,0,15,random (-3,-6),0,random(2,4),0,SXF_NOCHECKPOSITION)
		TNT1 A 0 a_takeinventory ("Particlesmasher", 1)
		TNT1 A 0 a_giveinventory ("SKPistol", 1)
		stop
	DropIcarus:
		TNT1 A 0 
		TNT1 A 0 a_spawnitemex ("DroppedIcarus",1,0,15,random (-3,-6),0,random(2,4),0,SXF_NOCHECKPOSITION)
		TNT1 A 0 a_takeinventory ("IcarusLauncher", 1)
		TNT1 A 0 a_giveinventory ("SKPistol", 1)
		stop
	DropBoner:
		TNT1 A 0 
		TNT1 A 0 a_spawnitemex ("DroppedBoner",1,0,15,random (-3,-6),0,random(2,4),0,SXF_NOCHECKPOSITION)
		TNT1 A 0 a_takeinventory ("RevenantBox", 1)
		TNT1 A 0 a_giveinventory ("SKPistol", 1)
		stop
		
	}
}

actor droppedpistol
{
	+notimefreeze
	+dropped
	scale 1
	renderstyle ADD
	alpha 0.50
	states
	{
	spawn:
		SKUP A 60
		goto death
	death:
		TNT1 A 0
		TNT1 A 0 a_spawnitemex ("pistoltoken")
		stop
	}
}



actor SKPistol : weapon
{
	Weapon.SelectionOrder 20
	Weapon.AmmoUse 1
	weapon.ammouse2 30
	Weapon.AmmoType1 "CrateEnergy"
	Weapon.AmmoType2 "CrateEnergy"
	scale 1
	+WEAPON.AMMO_OPTIONAL
	+cheatnotweapon
	+WEAPON.ALT_AMMO_OPTIONAL
	+NOAUTOAIM
	+INVENTORY.UNTOSSABLE
	//+UNDROPPABLE
	Obituary "%o was tactically shot down by %k."
	weapon.bobstyle smooth
	weapon.bobrangex 0.1
	weapon.bobrangey 0.6
	weapon.bobspeed 2
	Tag ".100% tactical pistol"
	states
	{
	spawn:
		SKUP A 1
		loop
	select:
		TNT1 A 0
		TNT1 A 0 a_playsound ("SKpistol/draw",0)
		TNT1 A 0 a_jumpifinventory ("IAmTechMonk",1,"VisorSwap")
		Goto Draw
	VisorSwap:
		TNT1 A 0
		TNT1 A 0 a_takeinventory ("ArtiPainTimer",9999)
		TNT1 A 0 a_giveinventory ("CrateWeaponArmed",1)
		TNT1 A 0 a_giveinventory ("ArtiPainTimer",40)
	draw:	
		TNT1 A 0
		SKPS AAAA 0 A_Raise
		SKPS A 1 A_Raise
		loop
	deselect:
		TNT1 A 0
		TNT1 A 0 a_stopsound (CHAN_WEAPON)
		TNT1 A 0 a_stopsound (6)
		TNT1 A 0 a_playsound ("silence",6)		
		TNT1 A 0 a_jumpifhealthlower (1, "deadlower")
		TNT1 A 0 a_playsound ("SKpistol/ready",0)
	holster:
		TNT1 A 0
		TNT1 A 0 a_stopsound (CHAN_WEAPON)
		TNT1 A 0 a_stopsound (6)
		TNT1 A 0 a_playsound ("silence",6)		
		TNT1 A 0 a_jumpifinventory ("IAmTechMonk",1,"VisorSwapAway")
		Goto Lowering
	VisorSwapAway:
		TNT1 A 0
		TNT1 A 0 a_takeinventory ("ArtiPainTimer",9999)
		TNT1 A 0 a_giveinventory ("ArtiPainTimer",40)
	Lowering:
		SKPS A 1 a_lower
		TNT1 A 0 a_takeinventory ("secretaction", 99)
		TNT1 AA 0 a_lower
		loop
	deadlower:
		TNT1 A 0
		TNT1 A 0
		TNT1 A 0 a_stopsound (CHAN_WEAPON)
		TNT1 A 0 a_stopsound (6)
		TNT1 AAAAAAAAAAAAA 0 a_lower
		TNT1 A 1 a_lower
		wait		
	Ready:
		TNT1 A 0 a_jumpifinventory ("secretaction",1,"FakeReload")
		SKPS A 1 A_WeaponReady
		TNT1 A 0 a_jumpifinventory ("secretaction",1,"FakeReload")
		loop
	fire:
		SKPS A 1 a_jumpifinventory ("CrateEnergy",1, "FULLERAUTOSTART")
		goto ready
	FULLERAUTOSTART:
		TNT1 A 0
		SKPS A 1 a_playsound ("SKPistol/FULLERAUTO",6,0.60,1)
	FULLERAUTO:
		TNT1 A 0
		TNT1 A 0 a_jumpifinventory ("SKShot",1,"FULLERAUTO2")
		SKPS B 1 Bright A_FireBullets (3.5, 3.0, 1, 7, "SKNormalPuff") 
		TNT1 A 0 a_giveinventory ("SKShot",1)
		goto FULLERAUTOING
	
	//This part doesn't use ammo
	FULLERAUTO2:
		SKPS B 1 Bright A_FireBullets (3.5, 3.0, 1, 7, "SKNormalPuff",0) 
		TNT1 A 0 a_takeinventory ("SKShot",99)
		goto FULLERAUTOING
		
	FULLERAUTOING:
		TNT1 A 0 A_Quake(3, 4, 0, 5)
		//D3PS B 0 A_firecustommissile ("bloodlessgenkabullet",Frandom(2, -2), 0, 0, 0, 0, Frandom(2, -2))
		D3PS B 0 A_FireBullets (3.5, 3.0, 1, 7, "SKNormalPuff",0) 
		TNT1 A 0 A_FireCustomMissile("Bulletcasingspawner",0,0,1,3)
		SKPS C 1 A_FireBullets (3.5, 3.0, 1, 7, "SKNormalPuff",0) 
		TNT1 A 0 A_FireCustomMissile("Bulletcasingspawner",0,0,1,3)
		SKPS C 1 a_refire ("Ammocheck")
		goto fullerautoend
	Ammocheck:
		SKPS C 1 a_jumpifinventory ("CrateEnergy",1,"FULLERAUTO")
		goto fullerautoend
	FullerAutoEnd:
		SKPS C 1 a_stopsound (6)
		SKPS C 1 a_playsound ("SKPistol/FULLERAUTOEND",6)
		TNT1 A 0 a_firecustommissile ("smashersmokespawner",0,0,0,0,0,0)
		SKPS C 5
		TNT1 A 0 a_firecustommissile ("smashersmokespawner",0,0,0,0,0,0)
		SKPS C 5
		TNT1 A 0 a_firecustommissile ("smashersmokespawner",0,0,0,0,0,0)
		SKPS C 5
		SKPS D 2
		SKPS A 1
		goto ready
	AltFire:
		SKPS A 1
		SKPS A 1 a_jumpifinventory ("CrateEnergy",40, "BIGSHOT")
		goto ready
	BIGSHOT:
		//SKBS A 2 a_firecustommissile ("bigtacticalbullet",0,0)
		TNT1 A 0 A_FireBullets (0, 0, 50, 60, "SKSuperPuff",FBF_NORANDOM) 
		TNT1 A 0 A_FireBullets (0, 0, -1, 1800, "SKFinisherPuff",FBF_NORANDOM) 
		SKBS A 2 
		TNT1 A 0 A_Quake(3, 10, 0, 5)		
		TNT1 A 0 a_playsound ("SKpistol/bigshot",CHAN_WEAPON)
		TNT1 A 0 a_recoil (30)
		TNT1 A 0 a_takeinventory ("CrateEnergy",40)
		TNT1 A 0 A_FireCustomMissile("BIGBulletcasingspawner",0,0,1,3)
		SKBS BCDEFG 2 
		SKPS A 4
		TNT1 A 0 a_firecustommissile ("smashersmokespawner",0,0,0,0,0,0)
		SKPS A 4
		TNT1 A 0 a_firecustommissile ("smashersmokespawner",0,0,0,0,0,0)
		SKPS A 4
		TNT1 A 0 a_firecustommissile ("smashersmokespawner",0,0,0,0,0,0)
		SKPS A 4
		TNT1 A 0 a_firecustommissile ("smashersmokespawner",0,0,0,0,0,0)
		goto ready
	FakeReload:
		TNT1 A 0
		TNT1 A 0 a_playsound ("SKpistol/eject",CHAN_WEAPON)
		SKPS EFGHIJKLMNOPQRSTUVW 2  
		TNT1 A 0 a_stopsound (CHAN_WEAPON)
		TNT1 A 0 A_SpawnItemEx("BigMag",-10,0,30)
		SKPS W 2
		SKPS XYZ 2
		TNT1 A 0 a_playsound ("SKpistol/maginsert")
		SKP1 ABC 2
		SKP1 DEFG 2 
		TNT1 A 0 a_playsound ("SKpistol/Mag1",0)
		SKP1 HIJ 2
		SKP1 J 3
		SKP1 DEFG 2 
		TNT1 A 0 a_playsound ("SKpistol/Mag2",0)
		SKP1 HIJ 2
		SKP1 J 3
		SKP1 KLMN 2
		TNT1 A 0 a_playsound ("SKpistol/Mag3",0)
		SKP1 OPQ 2
		SKP1 Q 4
		SKP1 RST 2 
		TNT1 A 0 a_playsound ("SKpistol/reload",0)
		SKP1 UVWXYZ 2
		SKPS A 3
		goto ready
	}
}

Actor SKNormalPuff : CAPuff
{
	states
	{
	XDeath:
		TNT1 A 1
		TNT1 A 0 a_playsound ("blastmaster/PuffHit",CHAN_VOICE,0.1,0,1.5)	
		TNT1 A 1
		stop
	Crash:
		PUFF A 1 Bright
		BPK1 A 1
		TNT1 A 0 a_playsound ("blastmaster/ricochet",CHAN_VOICE,0.1,0,1.5)	
		TNT1 AA 0 a_spawnitemex ("CABulletSpark",5,0,0,Frandom(-200,200)/20.0,Frandom(-200,200)/20.0,Frandom(-200,200)/20.0,0,SXF_NOCHECKPOSITION,160)		
		BPK1 A 1 A_SetScale (scalex * frandom(1.20,1.40),scaley * frandom(1.20,1.40))
		BPK1 A 1 A_SetScale (scalex * frandom(0.70,0.80),scaley * frandom(0.70,0.80))
		BPK1 A 1 A_SetScale (scalex * frandom(0.20,0.40),scaley * frandom(0.20,0.40))
		Stop
	}
}

Actor SKSuperPuff : SKNormalPuff
{
	-NOEXTREMEDEATH
	+EXTREMEDEATH
}
	

ACTOR SKFinisherPuff : CAPuff
{
    Decal BFGScorch
	-NOEXTREMEDEATH
	+EXTREMEDEATH
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 1
	XDeath:
		TNT1 A 1
		stop
	Crash:
		PUFF A 1 Bright
		BPK1 A 1
		TNT1 A 0 a_playsound ("blastmaster/ricochet",CHAN_VOICE,0.5,0,1.5)	
		TNT1 AAAAAA 0 a_spawnitemex ("Missilefire",Frandom(-20,20),Frandom(-18,18),Frandom(-18,18),Frandom(-200,200)/20.0,Frandom(-200,200)/20.0,Frandom(-200,200)/20.0,0,160)
		TNT1 A 0 A_SpawnItemEx("LavaLazerExplosion")
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerTrail",frandom(-21,21),frandom(-21,21),frandom(-21,21),frandom(-1,1),frandom(-1,1),frandom(0,1))
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerSmoke2",frandom(-8,8),frandom(-8,8),frandom(-4,4),frandom(-1,1),frandom(-1,1),frandom(0,1))
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 Bright A_SpawnItemEx("LavaLazerSmoke",frandom(-8,8),frandom(-8,8),frandom(-4,4),0,0,frandom(1,2))
		Stop
	}
}



	

ACTOR bigmag : PistolClipDrop
{
	Radius 3
	Height 5
	Speed 0
	Scale 0.4
	PROJECTILE
	-NOGRAVITY
	+BOUNCEONACTORS
	Gravity 0.75
	BounceType Doom
	BounceCount 2
	BounceFactor 0.8
	+clientsideonly
	States
	{
	Spawn:
		CLP2 A 0
		CLP2 ABCDEFGH 1 A_JumpIf(floorz == z, "clipbounce")
		Loop
	clipbounce:
		TNT1 A 0 a_playsound ("SKpistol/Magbounce",0)
		CLP2 A 1 thrustthing (random(1,359),1,0,0)
		goto spawn
	Death:
		TNT1 A 0 a_jump (256, "dead1", "dead2")
		loop
	Dead1:
		TNT1 A 0 a_playsound ("SKpistol/Magbounce",0)
		CLP2 I 50
		CLP2 I 1 a_fadeout (0.01)
		wait
	Dead2:
		TNT1 A 0 a_playsound ("SKpistol/Magbounce",0)
		CLP2 J 50
		CLP2 J 1 a_fadeout (0.01)
		wait
   }
}


actor SKShot : inventory
{inventory.maxamount 1}
