//   RAPTOR I4PA-ECS NAILSHOTGUN
/////////////////////

actor raptorshotgun : SuperShotgun replaces SuperShotgun{
	Tag "Raptor NailShotgun"
	
	weapon.selectionorder 200
	inventory.pickupsound "weapons/cs_cock"
	inventory.pickupmessage "Raptor I4PA-ECS NailShotgun"

	AttackSound ""

	weapon.ammotype "raptorchamber"
	weapon.ammotype2 "nailshot_ammo"
	weapon.ammouse 1
	weapon.ammogive2 4
	weapon.ammogive 0
	weapon.kickback 100
	//weapon.bobstyle inverse
	//weapon.bobrangeX 0.4
	//weapon.bobrangeY 0.75
	//weapon.bobspeed 2.5
	Weapon.preferredSkin "NailShotSkin"
	+AMMO_OPTIONAL	
	//+NOAUTOFIRE
	+NOALERT
	+WEAPON.NOAUTOAIM
	scale 0.28
	
	states{
		
		spawn:
			NSHW A -1
    		stop
		ready:
			NSHI A 1 A_WeaponReady
			NULL A 0 A_JumpIfInventory("TossGrenade", 1, "Grenade")
			TNT1 A 0 A_JumpIfInventory("SprintingPlayer", 1, "Sprint")
			NULL A 0 A_JumpIfInventory("ReloadingWeapon",1,"Reload_check")
			loop
			
		/////
		Sprint:
			TNT1 A 0 A_JumpIfInventory("PlayerStamina", 1, "SprStart")
			TNT1 A 0 A_TakeInventory("SprintingPlayer",1)
			goto ready
		SprStart:
			TNT1 A 0 A_PlaySound("sfx/sprintstart",CHAN_AUTO)
			TNT1 A 0 ACS_ExecuteAlways(Player_ChangeSpeed,0,200,0,0)
			TNT1 A 0 A_SetBlend("49 99 0",0.4,15)
			TNT1 A 0 A_Recoil(-15)
			NSHS ABCDE 1 Offset(0,32)
			TNT1 A 0 A_JumpIfInventory("SprintingPlayer", 1, "SprLoop1")
			goto SprEnd
		SprLoop1:
			TNT1 A 0 A_JumpIfInventory("PlayerStamina", 1, "SL1")
			TNT1 A 0 A_TakeInventory("SprintingPlayer",1)
			goto SprEnd
		SL1:
			//GASX ABCDEF 1
			NSHS E 1 Offset(-14,33)
			//NSHS E 1 Offset(-27,36)
			NSHS E 1 Offset(-34,39)
			NSHS E 1 Offset(-40,44)
			NSHS E 1 Offset(-43,47)
			NSHS E 1 Offset(-44,50)
			
			TNT1 A 0 A_JumpIfInventory("SprintingPlayer", 1, "SprLoop2")
			goto SprEnd
		SprLoop2:
			TNT1 A 0 A_JumpIfInventory("PlayerStamina", 1, "SL2")
			TNT1 A 0 A_TakeInventory("SprintingPlayer",1)
			goto SprEnd
		SL2:
			//GASX FEDCBA 1
			NSHS E 1 Offset(-44,50)
			//NSHS E 1 Offset(-43,47)
			NSHS E 1 Offset(-40,44)
			NSHS E 1 Offset(-34,39)
			NSHS E 1 Offset(-27,36)
			NSHS E 1 Offset(-14,33)
			TNT1 A 0 A_TakeInventory("PlayerStamina", 4)
			TNT1 A 0 A_JumpIfInventory("SprintingPlayer", 1, "SprLoop3")
			goto SprEnd
		SprLoop3:
			TNT1 A 0 A_JumpIfInventory("PlayerStamina", 1, "SL3")
			TNT1 A 0 A_TakeInventory("SprintingPlayer",1)
			goto SprEnd
		SL3:
			//GASX GHIJKL 1
			NSHS E 1 Offset(14,33)
			//NSHS E 1 Offset(27,36)
			NSHS E 1 Offset(34,39)
			NSHS E 1 Offset(40,44)
			NSHS E 1 Offset(43,47)
			NSHS E 1 Offset(44,50)
			
			TNT1 A 0 A_JumpIfInventory("SprintingPlayer", 1, "SprLoop4")
			goto SprEnd
		SprLoop4:
			TNT1 A 0 A_JumpIfInventory("PlayerStamina", 1, "SL4")
			TNT1 A 0 A_TakeInventory("SprintingPlayer",1)
			goto SprEnd
		SL4:
			//GASX LKJIHG 1
			NSHS E 1 Offset(44,50)
			//NSHS E 1 Offset(43,47)
			NSHS E 1 Offset(40,44)
			NSHS E 1 Offset(34,39)
			NSHS E 1 Offset(27,36)
			NSHS E 1 Offset(14,33)
			TNT1 A 0 A_TakeInventory("PlayerStamina", 4)
			TNT1 A 0 A_JumpIfInventory("SprintingPlayer", 1, "SprLoop1")
		SprEnd:	
			TNT1 A 0 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)//resets the offsets
			TNT1 A 0 ACS_ExecuteAlways(Player_ChangeSpeed,0,100,0,0)
			TNT1 A 0 A_PlaySound("sfx/sprintend",CHAN_AUTO)
			NSHS EDCBA 1 
			goto ready
			
		Select:
			TNT1 A 0 //A_SetCrosshair(10)
			TNT1 A 0 A_JumpIfInventory("gtoss_weaponmemory",14,"GrenadeEnd")
			NULL A 8
			NSHU G 1  A_PlaySound("weapons/cs_select", CHAN_WEAPON)
			NSHU FEDCBA 1
			NULL A 0 A_GiveInventory("xhair_switch",1)
		SelectLoop:
      		NSHI A 1 A_Raise
      		Goto SelectLoop
		deselect:
			NULL A 0 A_TakeInventory("xhair_switch",1)
			NSHU A 1 A_PlaySound("weapons/cs_deselect", CHAN_WEAPON)
			NSHU BCDEFG 1
			NULL A 2 
		deselectLoop:
			NULL A 1 A_Lower
			Goto deselectLoop
		
 		Fire:
			TNT1 A 0 A_JumpIfInventory("raptorchamber", 1, 3)
			NSHI A 1 A_PlayWeaponSound("weapons/noammo")
			NSHI A 6
			goto ready
			
			TNT1 A 0 A_Light1
			TNT1 A 0 A_AlertMonsters
			NSHF A 1 bright
			TNT1 A 0 bright A_PlayWeaponSound("weapons/cs_fire")
			//TNT1 A 0 ACS_ExecuteAlways(Weapon_Recoil,0,90,random(-65,65),0)
			
			//nail fire
			TNT1 A 0 A_FireCustomMissile("raptornail", random(-7, 7), 1, 4, 5, 0,random(-4, 4))
			TNT1 AAAAAAAAAAAAAA 0 A_FireCustomMissile("raptornail", random(-7, 7), 0, 4, 5, 0,random(-4, 4))		

			NSHF B 1 bright
			TNT1 A 0 A_Light0		
			NSHF CD 1 bright 
				
			NSHT ABBDDEFHJLNOO 1
			NSHT P 2
			TNT1 A 0 A_PlaySound("weapons/cs_cock", CHAN_AUTO)

			NSHT QRSTU 1
			NSHT W 6 A_FireCustomMissile("scmtrshell_spawner",0,0,0,3,0)
			NSHT UTSRQ 1

			NSHE ABCDE 1 //end
			
			NSHI A 1 A_Refire
			goto Ready
		Hold:
			NSHI A 1 A_WeaponReady
			NSHI A 0 A_Refire
			goto ready
			
		Pump:
			NULL A 0 //A_TakeInventory("raptorchamber_1shell",1)
			NSHI A 4
			NULL A 0 A_PlaySound("weapons/cs_cock", CHAN_AUTO)
			NSRP ABCD 1
			NSRP E 6
			NSRP DCBA 1
			goto Ready
		Reload_Check:
			NULL A 0 A_JumpIfInventory("raptorchamber",4,2)
 		   	NULL A 0 A_JumpIfInventory("nailshot_ammo",1, 2)
	      	NULL A 0
    	  	Goto Ready
			NULL A 0 A_JumpIfInventory("raptorchamber",1,"Reload_Quick")
			NULL A 0
			Goto Reload_Full
		//////////////////////////////////////////////////////////
		Reload_Full:
			NSRS ABCDE 1
			NSRS F 2
		InsertF:
			NSRS F 1
			NSRI ABC 1
			NSRI D 1 A_PlaySound("weapons/cs_insert", CHAN_WEAPON)
			NSRI EFGHH 2
			NULL A 0 A_TakeInventory("nailshot_ammo",1)
	      	NULL A 0 A_GiveInventory("raptorchamber",1)
			NSRI IJKLM 1
			NULL A 0 A_JumpIfInventory("ReloadingWeapon",1,"RF_Continue")
			NULL A 0
		//Reload_Finish:
			NSRS F 2
			NSRS EDCBA 1
			Goto Pump
			
		RF_Continue:
			NULL A 0 A_JumpIfInventory("raptorchamber",4,2) //full chamber, cancel reload
			NULL A 0 A_JumpIfInventory("nailshot_ammo",1,"InsertF") //more than 1 shell availble, reload continues
			NULL A 0
			NSRS F 2
			NSRS EDCBA 1
			goto Pump
		
		//////////////////////////////////////////////////////////
		Reload_Quick:
			NSRS ABCDE 1
			NSRS F 2
		Insert:
			NSRS F 1
			NSRI ABC 1
			NSRI D 1 A_PlaySound("weapons/cs_insert", CHAN_WEAPON)
			NSRI EFGHH 2
			NULL A 0 A_TakeInventory("nailshot_ammo",1)
	      	NULL A 0 A_GiveInventory("raptorchamber",1)
			NSRI IJKLM 1
			NULL A 0 A_JumpIfInventory("ReloadingWeapon",1,"R_Continue")
			NULL A 0
			
		//Reload_Finish:
			NSRS F 4
			NSRS EDCBA 1
			Goto Ready
			
		R_Continue:
			NULL A 0 A_JumpIfInventory("raptorchamber",4,2) //recamara llena, cancela recarga
			NULL A 0 A_JumpIfInventory("nailshot_ammo",1,"Insert") //mas de 1 cartucho disponible, continua la recarga
			NULL A 0
			NSRS F 4
			NSRS EDCBA 1
			goto ready
				

		
		Grenade:
			TNT1 A 0 A_JumpIfInventory("grenades", 1, 2)
			TNT1 A 0
			goto ready
			NSHG ABCDEFG 1
			TNT1 A 0 A_GiveInventory("gtoss_weaponmemory", 14)
			TNT1 A 0 A_SelectWeapon("grenade_toss")
			goto deselectLoop
		GrenadeEnd:
			TNT1 A 0 A_TakeInventory("gtoss_weaponmemory",99)
			NSHG GFEDCBA 1
			goto selectLoop
		AltFire:
			NSHM C 1 A_Recoil(-6)
			NULL A 0 A_PlayWeaponSound("sfx/meleeswing")
			NSHM EHJ 1
			NSHM L 9 A_CustomPunch ((164+random(1,32)), 1 , 0 , "meleepuff",88)
			NSHM KJIHGFEDCBA 1
			goto ready
	}
}

actor raptorchamber : ammo{
	Inventory.MaxAmount 4
	+INVENTORY.IGNORESKILL
}


//nails
actor raptornail : fastprojectile {
	height 3
	radius 4
	PROJECTILE
    +BLOODSPLATTER
	-NOGRAVITY
	//+RIPPER
	
	+THRUSPECIES
	Species "Player"
	
	damagetype nail_damage
	renderstyle add
	//ProjectileKickBack 180
	//gravity 0.2
	scale 0.06
	damage ((80+(12*random(0,2))))
	speed 60
	mass 10
	missiletype "rnail_trailspawner"
	missileheight 8
	states{
		spawn:
			SPRK CC 1 
			//TNT1 A 0 A_ChangeFlag("RIPPER",0)
		sploop:
			TNT1 A 0 A_ChangeFlag("NOEXTREMEDEATH",1)
			SPRK C 1 ThrustThingZ(0,1,1,1)
			loop
		death:
			NULL A 0 A_PlaySound("sfx/nailric")
			NULL A 0 A_SpawnItemEx ("rnail_impactspawner", 0, 0, 0, 0, 0, 0, 0, 0)
			stop
		crash:
			NULL A 0 A_PlaySound("sfx/nailric")
			NULL A 0 A_SpawnItemEx ("rnail_impactspawner", 0, 0, 0, 0, 0, 0, 0, 0)
			stop
		XDeath:
			//TNT1 AAA 0 A_SpawnItemEx ("rnail_impactsmoke", 0, 0, 0,  0, /*f*/random(-0.35,0.35) , /*f*/random(-0.35,0.35) , random(0,180))
			TNT1 A 1
			stop
	}
}

actor rnail_trailspawner {
	+NOINTERACTION
	+CLIENTSIDEONLY
	states{
		spawn:
			TNT1 A 0
			//TNT1 A 0 A_SpawnItemEx ("rnail_glowtrail", 0, 0, 0, 0, 0, 0, 0)
			TNT1 A 0 A_SpawnItemEx ("rnail_smoketrail", 0, 0, 0, 0, /*f*/random(-0.8,0.8), /*f*/random(0.0,1.4), 0)
			TNT1 A 0 A_SpawnItemEx ("rnail_smoketrail2", 0, 0, 0, 0, /*f*/random(-0.2,0.2), /*f*/random(-0.2,0.2), 0)
			stop
	}
}

actor rnail_glowtrail {
	scale 0.05
	alpha 1.0
	renderstyle add
	+NOINTERACTION
	+FORCEXYBILLBOARD
	+NOTELEPORT
	+CLIENTSIDEONLY
	states{
		spawn:
			PRJ1 AB 1 bright
			stop
	}
}

actor rnail_smoketrail {
	scale 0.05
	alpha 1.0
	renderstyle add
	+NOINTERACTION
	+FORCEXYBILLBOARD
	+NOTELEPORT
	+CLIENTSIDEONLY
	states{
		spawn:
			NLSK ABCDEFGHIJKLMNOPQ 1 bright A_FadeOut(0.1)
			stop
	}
}

actor rnail_smoketrail2 {
	height 1
	radius 1
	scale 0.25
	alpha 0.38
	renderstyle add
	+NOGRAVITY
	+FORCEXYBILLBOARD
	+NOTELEPORT
	+NOINTERACTION
	+CLIENTSIDEONLY
	states {
		spawn:
			STM0 ABCDEFJHIJKLMNO 1 bright A_FadeOut(0.1)
			stop
	}
}

actor grunt_raptornail : raptornail{
	damage (random(10,11))
	-THRUSPECIES
}

actor rnail_impactspawner {
	+NOINTERACTION
	+CLIENTSIDEONLY
	states{
		spawn:
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx ("rnail_impact", 0, 0, 0, 0, 0, 0, 0, 0)
			TNT1 AAAAAA 0 A_SpawnItemEx ("rnail_spark", 0, 0, 0,  random(1,2), random(2,4), random(0,5), random(180,360))
			// BUGSPRITES!1111
			//TNT1 AAAAA 0 A_SpawnItemEx ("rnail_impactsmoke", 0, 0, 0,  0, /*f*/random(-0.35,0.35) , /*f*/random(-0.35,0.35) , random(0,180))
			TNT1 AAAAAAAA 1 A_SpawnItemEx ("rnail_impactsmoke2", 0, 0, 0,  0, /*f*/random(-0.15,0.15) , /*f*/random(0.1,0.45) , random(0,180))
			stop
	}
}

actor rnail_impact {
	radius 1
	height 1
	renderstyle add
	alpha 1.0
	scale 0.6
	+NOGRAVITY
	+NOTELEPORT
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	states{
		spawn:
			TNT1 A 0
			TNT1 A 0 A_Jump(255,"nimp1","nimp2","nimp3","nimp4","nimp5","nimp6")
		nimp1:
			IPF1 A 2
		n1l:
			IPF1 A 1 bright //A_SetScale(ScaleX * 0.8, ScaleY * 0.8)
			TNT1 A 0 A_FadeOut(0.1)
			loop
		nimp2:
			IPF1 B 2
		n2l:
			IPF1 B 1 bright //A_SetScale(ScaleX * 0.8, ScaleY * 0.8)
			TNT1 A 0 A_FadeOut(0.1)
			loop
		nimp3:
			IPF1 C 2
		n3l:
			IPF1 C 1 bright //A_SetScale(ScaleX * 0.8, ScaleY * 0.8)
			TNT1 A 0 A_FadeOut(0.1)
			loop
		nimp4:
			IPF1 D 2
		n4l:
			IPF1 D 1 bright //A_SetScale(ScaleX * 0.8, ScaleY * 0.8)
			TNT1 A 0 A_FadeOut(0.1)
			loop
		nimp5:
			IPF1 E 2
		n5l:
			IPF1 E 1 bright //A_SetScale(ScaleX * 0.8, ScaleY * 0.8)
			TNT1 A 0 A_FadeOut(0.1)
			loop
		nimp6:
			IPF1 F 2
		n6l:
			IPF1 F 1 bright //A_SetScale(ScaleX * 0.8, ScaleY * 0.8)
			TNT1 A 0 A_FadeOut(0.1)
			loop
	}
}

actor rnail_spark {
	radius 2
	height 2
	alpha 1
	scale 0.035
	gravity 0.4
	renderstyle add
	+NOTELEPORT
	+FLOORCLIP
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	bouncetype "doom"
	bouncefactor 0.2
	states{
		spawn:
			SPRK C 14 bright
		spawnloop:
			SPRK C 1 bright A_FadeOut(0.1)
			loop
	}
}

actor rnail_impactsmoke {
	scale 0.18
	alpha 0.45
	renderstyle add
	+NOTELEPORT
	+FORCEXYBILLBOARD
	+NOINTERACTION
	+CLIENTSIDEONLY
	states{
		spawn:
			TNT1 A 3
			TNT1 A 0 A_Jump(255,"smoek1","smoek2","smoek3","smoek4","smoek5","smoek6")
		smoek1:
			TNT1 A 0 //A_SetScale(ScaleX * 1.02, ScaleY * 1.02)
			NLSK A 2 bright A_Fadeout(0.015)
			loop
		smoek2:
			TNT1 A 0 //A_SetScale(ScaleX * 1.02, ScaleY * 1.02)
			NLSK B 2 bright A_Fadeout(0.015)
			loop
		smoek3:
			TNT1 A 0 //A_SetScale(ScaleX * 1.02, ScaleY * 1.02)
			NLSK C 2 bright A_Fadeout(0.015)
			loop
		smoek4:
			TNT1 A 0 //A_SetScale(ScaleX * 1.02, ScaleY * 1.02)
			NLSK D 2 bright A_Fadeout(0.015)
			loop
		smoek5:
			TNT1 A 0 //A_SetScale(ScaleX * 1.02, ScaleY * 1.02)
			NLSK E 2 bright A_Fadeout(0.015)
			loop
		smoek6:
			TNT1 A 0 //A_SetScale(ScaleX * 1.02, ScaleY * 1.02)
			NLSK F 2 bright A_Fadeout(0.015)
			loop
	}
}


actor rnail_impactsmoke2 {
	scale 0.08
	alpha 0.5
	renderstyle add
	+NOTELEPORT
	+FORCEXYBILLBOARD
	+NOINTERACTION
	+CLIENTSIDEONLY
	states{
		spawn:
			TNT1 A 3
			TNT1 A 0 A_Jump(255,"smoek1","smoek2","smoek3","smoek4","smoek5","smoek6")
		smoek1:
			TNT1 A 0 //A_SetScale(ScaleX * 1.04, ScaleY * 1.04)
			SMK1 A 2 A_Fadeout(0.02)
			loop
		smoek2:
			TNT1 A 0 //A_SetScale(ScaleX * 1.04, ScaleY * 1.04)
			SMK1 B 2 A_Fadeout(0.02)
			loop
		smoek3:
			TNT1 A 0 //A_SetScale(ScaleX * 1.04, ScaleY * 1.04)
			SMK1 C 2 A_Fadeout(0.02)
			loop
		smoek4:
			TNT1 A 0 //A_SetScale(ScaleX * 1.04, ScaleY * 1.04)
			SMK1 D 2 A_Fadeout(0.02)
			loop
		smoek5:
			TNT1 A 0 //A_SetScale(ScaleX * 1.04, ScaleY * 1.04)
			SMK1 E 2 A_Fadeout(0.02)
			loop
		smoek6:
			TNT1 A 0 //A_SetScale(ScaleX * 1.04, ScaleY * 1.04)
			SMK1 F 2 A_Fadeout(0.02)
			loop
	}
}


////
actor scmtrshell_casing {
	scale 0.14
	radius 2
	height 2
	speed 6
	mass 4
	bouncefactor 0.5
	PROJECTILE
	+DOOMBOUNCE
	+NODROPOFF
	+FORCEXYBILLBOARD
	+NOTELEPORT
	+FLOORCLIP
	-NOGRAVITY
	-NOBLOCKMAP
	+CLIENTSIDEONLY
	seesound "casings/hp_shell"
	deathsound "casings/hp_shell"
	states{
		spawn:
			MSHC ABCDEFG 2
			loop
		death:
			NULL A 0 A_Jump(255, "pos1", "pos2", "pos3")
			NULL A 0
		pos1:
			MSHC C 400
			MSHC CCCCCCCCCC 1 A_FadeOut(0.1)
			stop
		pos2:
			MSHC D 400
			MSHC DDDDDDDDDD 1 A_FadeOut(0.1)
			stop
		pos3:
			MSHC G 400
			MSHC GGGGGGGGGG 1 A_FadeOut(0.1)
			stop
			
	}
}

actor scmtrshell_spawner {
	speed 15
	PROJECTILE
	+NOCLIP
	+CLIENTSIDEONLY
	states{
		spawn:
			NULL A 0
			NULL A 1 A_SpawnItemEx("scmtrshell_casing", -3, 0, 0, 0, random(-3,-4), random(1,2), 0, SXF_TRANSFERPOINTERS) 
			stop
	}

}
	