ACTOR MSXWeapon:Weapon{
	// A lot of stuff gets shoved in here now, thanks in part to reseved frames,
	// and A_Jump calls being virtual (i.e. they can jump into states that exist 
	// in the inheriting actor).
	States{
	// STATE TEMPLATES //
	// Only here so ZDoom doesn't barf up errors.
	Select:
		TNT1 A 1 A_Raise
		Loop
	Deselect:
		TNT1 A 1 A_Lower
		Loop
	Ready:
		TNT1 A 1 A_WeaponReady
		Loop
	Fire:
		TNT1 A 1
		Goto Idle
	GrenadeEnd:
		TNT1 A 1
		Goto Idle
	Idle:
		TNT1 A 1 A_WeaponReady
		Loop
	IdleZoom:
		TNT1 A 1 A_WeaponReady
		Loop
	SprEnd:
		TNT1 A 1
		Goto Idle
	WeaponJetEnd:
		TNT1 A 1
		Goto Idle
	StimulateEnd:
		TNT1 A 1
		Goto Idle
	BoostifyEnd:
		TNT1 A 1
		Goto Idle
	// JETPACK STUFF //
	JetpackStart:
		TNT1 A 0 A_JumpIf(GetCVar("MSfiXd_Jetpactive")==0,3)
		TNT1 A 1
		TNT1 A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER4),"JetpackStart")
		TNT1 A 0 {A_GiveInventory("PowerJetpack");
			A_PlaySound("jetpack/use",CHAN_WEAPON,1.0,1);
			ACS_NamedExecute("JetpackFreeze",0);
			A_Overlay(100,"JetZoom");}
	 Jetting:
		TNT1 A 0 A_JumpIf((pitch<5)&&(pitch>-5),"JetNeutral")
		TNT1 A 0 A_JumpIf(pitch>=5,"JetUp")
		TNT1 A 0 A_JumpIf(pitch<=-5,"JetDown")
	  JetNeutral:
		TNT1 A 0 A_ChangeVelocity(15,0,0,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
	  JetUp:
		TNT1 A 0 A_JumpIf(pitch>50,10)
		TNT1 A 0 A_JumpIf(pitch>45,10)
		TNT1 A 0 A_JumpIf(pitch>40,10)
		TNT1 A 0 A_JumpIf(pitch>35,10)
		TNT1 A 0 A_JumpIf(pitch>30,10)
		TNT1 A 0 A_JumpIf(pitch>25,10)
		TNT1 A 0 A_JumpIf(pitch>20,10)
		TNT1 A 0 A_JumpIf(pitch>15,10)
		TNT1 A 0 A_JumpIf(pitch>10,10)
		TNT1 A 0 A_JumpIf(pitch>5,10)
		TNT1 A 0 A_ChangeVelocity(15,0,-30,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
		TNT1 A 0 A_ChangeVelocity(15,0,-27,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
		TNT1 A 0 A_ChangeVelocity(15,0,-24,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
		TNT1 A 0 A_ChangeVelocity(15,0,-21,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
		TNT1 A 0 A_ChangeVelocity(15,0,-18,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
		TNT1 A 0 A_ChangeVelocity(15,0,-15,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
		TNT1 A 0 A_ChangeVelocity(15,0,-12,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
		TNT1 A 0 A_ChangeVelocity(15,0,-9,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
		TNT1 A 0 A_ChangeVelocity(15,0,-6,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
		TNT1 A 0 A_ChangeVelocity(15,0,-3,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
	JetDown:
		TNT1 A 0 A_JumpIf(pitch<-50,10)
		TNT1 A 0 A_JumpIf(pitch<-45,10)
		TNT1 A 0 A_JumpIf(pitch<-40,10)
		TNT1 A 0 A_JumpIf(pitch<-35,10)
		TNT1 A 0 A_JumpIf(pitch<-30,10)
		TNT1 A 0 A_JumpIf(pitch<-25,10)
		TNT1 A 0 A_JumpIf(pitch<-20,10)
		TNT1 A 0 A_JumpIf(pitch<-15,10)
		TNT1 A 0 A_JumpIf(pitch<-10,10)
		TNT1 A 0 A_JumpIf(pitch<-5,10)
		TNT1 A 0 A_ChangeVelocity(15,0,30,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
		TNT1 A 0 A_ChangeVelocity(15,0,27,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
		TNT1 A 0 A_ChangeVelocity(15,0,24,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
		TNT1 A 0 A_ChangeVelocity(15,0,21,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
		TNT1 A 0 A_ChangeVelocity(15,0,18,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
		TNT1 A 0 A_ChangeVelocity(15,0,15,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
		TNT1 A 0 A_ChangeVelocity(15,0,12,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
		TNT1 A 0 A_ChangeVelocity(15,0,9,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
		TNT1 A 0 A_ChangeVelocity(15,0,6,CVF_RELATIVE|CVF_REPLACE)
		Goto JettingContinue
		TNT1 A 0 A_ChangeVelocity(15,0,3,CVF_RELATIVE|CVF_REPLACE)
	JettingContinue:
		TNT1 A 1 A_GiveInventory("JetFuelCounter",1)
		TNT1 A 0 A_JumpIf(GetCVar("MSfiXd_InfiniteJetpack")==1,3)
		TNT1 A 0 A_JumpIfInventory("InHexen",1,2) // Infinite use in Hexen! ...Until you leave this hub.
		TNT1 A 0 A_JumpIfInventory("JetFuelCounter",0,"DepleteFuel")
		TNT1 A 0 A_JumpIf(GetCVar("MSfiXd_Jetpactive")==1,2)
		TNT1 A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER4),"Jetting")
		Goto JetpackShutdown
		TNT1 A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER4),"JetpackShutdown")
		Goto Jetting
	JetpackShutdown:
		TNT1 A 0 {A_TakeInventory("PowerJetpack");
			A_StopSound(CHAN_WEAPON);
			ACS_NamedExecute("JetpackUnFreeze",0);
			A_Overlay(100,"JetUnZoom");}
		TNT1 A 0 A_JumpIf(GetCVar("MSfiXd_Jetpactive")==1,"ShutdownToggle")
		TNT1 A 0 A_Jump(256,"WeaponJetEnd")
		Goto WeaponJetEnd
	 ShutdownToggle:
		TNT1 A 1
		TNT1 A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER4),"ShutdownToggle")
		TNT1 A 0 A_Jump(256,"WeaponJetEnd")
		Goto WeaponJetEnd
	DepleteFuel:
		TNT1 A 0 {A_TakeInventory("Jetpack",1);
			A_TakeInventory("JetFuelCounter");}
		TNT1 A 0 A_JumpIfInventory("Jetpack",1,"Jetting")
		Goto JetpackShutdown
	JetZoom:
		TNT1 A 1 A_ZoomFactor(0.98)
		TNT1 A 1 A_ZoomFactor(0.96)
		TNT1 A 1 A_ZoomFactor(0.94)
		TNT1 A 1 A_ZoomFactor(0.92)
		TNT1 A 1 A_ZoomFactor(0.90)
		Stop
	JetUnZoom:
		TNT1 A 1 A_ZoomFactor(0.92)
		TNT1 A 1 A_ZoomFactor(0.94)
		TNT1 A 1 A_ZoomFactor(0.96)
		TNT1 A 1 A_ZoomFactor(0.98)
		TNT1 A 1 A_ZoomFactor(1.00)
		Stop
	// SPRINTING STUFF //
	// Since the same animation is used for every non-fist weapon, most of it 
	// goes in here.
	SprLoop1:
		"####" "#" 0 A_JumpIfInventory("PlayerStamina",1,"SL1")
		"####" "#" 0 A_TakeInventory("SprintingPlayer",1)
		"####" "#" 0 A_Jump(256,"SprEnd")
		Goto SprEnd
	SL1:
		"####" "#" 1 Offset(-14,33)
		"####" "#" 1 Offset(-34,39)
		"####" "#" 1 Offset(-40,44)
		"####" "#" 1 Offset(-43,47)
		"####" "#" 1 Offset(-44,50)
		"####" "#" 0 A_JumpIfInventory("SprintingPlayer",1,"SprLoop2")
		"####" "#" 0 A_Jump(256,"SprEnd")
		Goto SprEnd
	SprLoop2:
		"####" "#" 0 A_JumpIfInventory("PlayerStamina",1,"SL2")
		"####" "#" 0 A_TakeInventory("SprintingPlayer",1)
		"####" "#" 0 A_Jump(256,"SprEnd")
		Goto SprEnd
	SL2:
		"####" "#" 1 Offset(-44,50)
		"####" "#" 1 Offset(-40,44)
		"####" "#" 1 Offset(-34,39)
		"####" "#" 1 Offset(-27,36)
		"####" "#" 1 Offset(-14,33)
		"####" "#" 0 A_JumpIf(GetCVar("MSfiXd_SprintStaminaUse")==0,2)
		"####" "#" 0 A_TakeInventory("PlayerStamina",4)
		"####" "#" 0 A_JumpIfInventory("SprintingPlayer",1,"SprLoop3")
		"####" "#" 0 A_Jump(256,"SprEnd")
		Goto SprEnd
	SprLoop3:
		"####" "#" 0 A_JumpIfInventory("PlayerStamina",1,"SL3")
		"####" "#" 0 A_TakeInventory("SprintingPlayer",1)
		"####" "#" 0 A_Jump(256,"SprEnd")
		Goto SprEnd
	SL3:
		"####" "#" 1 Offset(14,33)
		"####" "#" 1 Offset(34,39)
		"####" "#" 1 Offset(40,44)
		"####" "#" 1 Offset(43,47)
		"####" "#" 1 Offset(44,50)
		"####" "#" 0 A_JumpIfInventory("SprintingPlayer",1,"SprLoop4")
		"####" "#" 0 A_Jump(256,"SprEnd")
		Goto SprEnd
	SprLoop4:
		"####" "#" 0 A_JumpIfInventory("PlayerStamina",1,"SL4")
		"####" "#" 0 A_TakeInventory("SprintingPlayer",1)
		"####" "#" 0 A_Jump(256,"SprEnd")
		Goto SprEnd
	SL4:
		"####" "#" 1 Offset(44,50)
		"####" "#" 1 Offset(40,44)
		"####" "#" 1 Offset(34,39)
		"####" "#" 1 Offset(27,36)
		"####" "#" 1 Offset(14,33)
		"####" "#" 0 A_JumpIf(GetCVar("MSfiXd_SprintStaminaUse")==0,2)
		"####" "#" 0 A_TakeInventory("PlayerStamina",4)
		"####" "#" 0 A_JumpIfInventory("SprintingPlayer",1,"SprLoop1")
		"####" "#" 0 A_Jump(256,"SprEnd")
		Goto SprEnd
	// Sprint Hands //
	// Because I'm a freakin' weirdo, I though maybe somebody would like to see 
	// the sprinting animation for the fists even when you have another weapon 
	// out.
	Sprint_Hands:
		"####" "#" 0 A_JumpIf(GetCVar("MSfiXd_SprintStaminaUse")==0,"SprStart_Hands")
		TNT1 A 0 A_JumpIfInventory("PlayerStamina",1,"SprStart_Hands")
		TNT1 A 0 A_TakeInventory("SprintingPlayer",1)
		TNT1 A 0 A_Jump(256,"Idle")
		Goto Idle
	SprStart_Hands:
		TNT1 A 0 {A_PlaySound("sfx/sprintstart",CHAN_AUTO);
			//ACS_NamedExecute("Player-ChangeSpeed",0,200,0,0);
			ACS_NamedExecute("Player-ChangeSpeed",0,GetCVar("MSfiXd_SprintSpeed"),0,0);
			A_SetBlend("49 99 0",0.4,15);
			A_Recoil(-15);}
		FSTG ABCDE 1
		TNT1 A 0 A_JumpIfInventory("SprintingPlayer",1,"SprLoop1_Hands")
		Goto SprEnd_Hands
	SprLoop1_Hands:
		"####" "#" 0 A_JumpIf(GetCVar("MSfiXd_SprintStaminaUse")==0,"SL1_Hands")
		TNT1 A 0 A_JumpIfInventory("PlayerStamina",1,"SL1_Hands")
		TNT1 A 0 A_TakeInventory("SprintingPlayer",1)
		Goto SprEnd_Hands
	SL1_Hands:
		FSTS ACEEDCB 1
		"####" "#" 0 A_JumpIf(GetCVar("MSfiXd_SprintStaminaUse")==0,2)
		TNT1 A 0 A_TakeInventory("PlayerStamina",3)
		TNT1 A 0 A_JumpIfInventory("SprintingPlayer",1,"SprLoop2_Hands")
		Goto SprEnd_Hands
	SprLoop2_Hands:
		TNT1 A 0 A_JumpIfInventory("PlayerStamina",1,"SL2_Hands")
		"####" "#" 0 A_JumpIf(GetCVar("MSfiXd_SprintStaminaUse")==0,"SprEnd_Hands")
		TNT1 A 0 A_TakeInventory("SprintingPlayer",1)
		Goto SprEnd_Hands
	SL2_Hands:
		FSTS FHJJIHG 1 
		"####" "#" 0 A_JumpIf(GetCVar("MSfiXd_SprintStaminaUse")==0,2)
		TNT1 A 0 A_TakeInventory("PlayerStamina",3)
		TNT1 A 0 A_JumpIfInventory("SprintingPlayer",1,"SprLoop1_Hands")
		Goto SprEnd_Hands
	SprEnd_Hands:
		//
		TNT1 A 0 A_JumpIfInventory("SprintHands",1,"SprEnd_HandWeapon")
		//
		TNT1 A 0 {A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
			ACS_NamedExecute("Player-ChangeSpeed",0,100,0,0);
			A_PlaySound("sfx/sprintend",CHAN_AUTO);}
		FSTG EDCBA 1 
		TNT1 A 0 A_Jump(256,"Idle")
		Goto Idle
	// GRENADE STUFF //
	// This used to be a separate weapon. Yeah, I dunno why either.
	GrenadeStart:
		TNT1 A 0 {A_SetCrosshair(10);
			A_GiveInventory("GrenadeHold");
			A_GiveInventory("xhair_switch",1);}
		TNT1 A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER1),"PowThrowStart")
	 NormGrenadeToss:	 
		TNT1 A 5 A_PlaySound("grenade/pin",CHAN_WEAPON)
		GTOS A 1 A_PlaySound("grenade/toss",CHAN_WEAPON) 
		GTOS B 1 
		GTOS C 1 {A_TakeInventory("grenades",1,TIF_NOTAKEINFINITE);
			A_FireCustomMissile("frag_grenade",0,0,-5,10,0,5);}
		GTOS DEFGHIJK 1
		TNT1 A 0 A_TakeInventory("xhair_switch",1)
		TNT1 A 0 A_Jump(256,"GrenadeEnd")
		Goto GrenadeEnd
	PowThrowStart:
		TNT1 A 0 A_JumpIfInventory("PlayerStamina",1,1)
		Goto NormGrenadeToss
		GPTS EDCBA 1
		TNT1 A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER1),"ChargeStart")
	PowThrowQuickEnd:
		TNT1 A 0 {A_GunFlash("flashreset");
			A_TakeInventory("SuitIsPowered",9);
			A_TakeInventory("powthrow_counter",999);}
		GPTS ABCDE 1
		TNT1 A 0 A_JumpIf(GetCVar("MSfiXd_GrenadeCancelling")==1,"GrenadeEnd")
		Goto NormGrenadeToss
	ChargeStart:
		TNT1 A 0 {A_PlaySound("weapons/powpstart",CHAN_AUTO);
			A_PlaySound("weapons/powchrg0",CHAN_WEAPON);
			A_GiveInventory("SuitIsPowered",1);
			A_GunFlash("flash0to1");}
	loop_chrgStart:
		TNT1 A 0 A_JumpIfInventory("powthrow_counter",20,"chrg_l1")
		GPTC A 2 {A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
			A_GiveInventory("powthrow_counter",2);}
		TNT1 A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER1),"loop_chrgStart")
		Goto PowThrowQuickEnd
	flash0to1:
		GCP1 ABCDEFGHIJKLMNOPQRST 1 bright
		stop
	chrg_l1:
		TNT1 A 0 A_JumpIfInventory("PlayerStamina",11,1)
		Goto PowThrow_lvl1
		TNT1 A 0 A_TakeInventory("PlayerStamina",20)
		TNT1 A 0 A_PlaySound("weapons/powchrg1",CHAN_WEAPON)
		TNT1 A 0 A_GunFlash("flash1to2")
	loop_cl1:
		TNT1 A 0 A_JumpIfInventory("PlayerStamina",11,1)
		Goto PowThrow_lvl1
		TNT1 A 0 A_JumpIfInventory("powthrow_counter",40,"chrg_l2")
		TNT1 A 0 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH|WRF_ALLOWRELOAD|WRF_ALLOWZOOM)
		GPTC A 2 A_GiveInventory("powthrow_counter",2)
		TNT1 A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER1),"loop_cl1")
		Goto PowThrow_lvl1
	flash1to2:
		GCP2 ABCDEFGHIJKLMNOPQRST 1 bright
		stop
	chrg_l2:
		TNT1 A 0 A_JumpIfInventory("PlayerStamina",11,1)
		Goto PowThrow_lvl2
		TNT1 A 0 A_TakeInventory("PlayerStamina",20)
		TNT1 A 0 A_PlaySound("weapons/powchrg2",CHAN_WEAPON)
		TNT1 A 0 A_GunFlash("flash2to3")
	loop_cl2:
		TNT1 A 0 A_JumpIfInventory("PlayerStamina",11,1)
		Goto PowThrow_lvl2
		TNT1 A 0 A_JumpIfInventory("powthrow_counter",60,"chrg_l3")
		TNT1 A 0 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH|WRF_ALLOWRELOAD|WRF_ALLOWZOOM)
		GPTC A 2 A_GiveInventory("powthrow_counter",2)
		TNT1 A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER1),"loop_cl2")
		Goto PowThrow_lvl2
	flash2to3:
		GCP3 ABCDEFGHIJKLMNOPQRST 1 bright
		stop
	chrg_l3:
		TNT1 A 0 A_JumpIfInventory("PlayerStamina",11,1)
		Goto PowThrow_lvl3
		TNT1 A 0 A_TakeInventory("PlayerStamina",20)
		TNT1 A 0 A_PlaySound("weapons/powchrg3",CHAN_WEAPON)
		TNT1 A 0 A_GunFlash("flash3toMAX")
	loop_cl3:
		TNT1 A 0 A_JumpIfInventory("PlayerStamina",11,1)
		Goto PowThrow_lvl3
		TNT1 A 0 A_JumpIfInventory("powthrow_counter",80,"chrg_max")
		GPTC A 2 {A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
			A_GiveInventory("powthrow_counter",2);}
		TNT1 A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER1),"loop_cl3")
		Goto PowThrow_lvl3
	flash3toMAX:
		GCP4 ABCDEFGHIJKLMNOPQRST 1 bright
		stop
	chrg_max:
		TNT1 A 0 {A_SetBlend("99 80 45",1.0,24);
			A_GiveInventory("SuitIsOvercharged",1);
			A_GunFlash("flash5max");
			ACS_NamedExecute("Player-ChangeSpeed",0,160,0,0);
			A_TakeInventory("PlayerStamina",40);
			A_PlaySound("weapons/powpmax",CHAN_AUTO);
			ACS_NamedExecute("set_powf-bonusdamage",0,0,0,0);}
	chrg_maxhold:
		GPMC A 2 Offset(3,35) {A_PlaySound("weapons/powchrg5",CHAN_WEAPON);
			A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);}
		TNT1 A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER1),1)
		Goto PowThrow_Max
		GPMC A 2 Offset(0,29) A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		TNT1 A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER1),1)
		Goto PowThrow_Max
		GPMC A 2 Offset(-3,32) A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		TNT1 A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER1),1)
		Goto PowThrow_Max
		GPMC A 2 Offset(0,35) A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		TNT1 A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER1),1)
		Goto PowThrow_Max
		GPMC A 2 Offset(-3,29) A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		TNT1 A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER1),"chrg_maxhold")
		Goto PowThrow_Max
	flash5max:
		GPM1 ABCDEFGHIJKLMNO 1 bright
		GPM2 ABCDEFGHIJKLMNO 1 bright
		loop
	PowThrow_lvl1:
		TNT1 A 0 {A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
			A_GunFlash("PowThl1_end");
			A_SetBlend("0 48 99",0.3,18);}
		GPTC A 1 Offset(-17,39)
		GPTC A 1 Offset(-39,58)
		GPTC A 1 Offset(-58,94)
		GPTC A 1 Offset(-80,141)
		TNT1 A 0 {A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
			A_PlayWeaponSound("grenade/pin");
			A_GunFlash("PT1_glow");}
		GTOS A 1 A_PlayWeaponSound("weapons/powattack2") 
		GTOS B 1 
		GTOS C 1 A_FireCustomMissile("pow_frag-l1",0,0,-5,10,0,5)
		TNT1 A 0 A_TakeInventory("grenades",1,TIF_NOTAKEINFINITE)
		GTOS DEFGHIJK 1
		TNT1 A 0 {A_TakeInventory("SuitIsPowered",9);
			A_TakeInventory("powthrow_counter",999);}
		TNT1 A 0 A_TakeInventory("xhair_switch",1)
		TNT1 A 0 A_Jump(256,"GrenadeEnd")
		Goto GrenadeEnd
	PT1_glow:
		GPG1 ABCDEFGHIJK 1 bright
		stop
	PowThl1_end:
		GCP2 A 4 bright
		stop
	PowThrow_lvl2:
		TNT1 A 0 {A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
			A_GunFlash("PowThl2_end");
			A_SetBlend("0 48 99",0.5,18);}
		GPTC A 1 Offset(-17,39)
		GPTC A 1 Offset(-39,58)
		GPTC A 1 Offset(-58,94)
		GPTC A 1 Offset(-80,141)
		TNT1 A 0 {A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);}
		TNT1 A 1 A_PlayWeaponSound("grenade/pin")
		GTOS A 1 {A_GunFlash("PT2_glow");
			A_PlayWeaponSound("weapons/powattack3");}
		GTOS B 1 
		GTOS C 1 {A_TakeInventory("grenades",1,TIF_NOTAKEINFINITE);
			A_FireCustomMissile("pow_frag-l2",0,0,-5,10,0,0);}
		GTOS DEFGHIJK 1
		TNT1 A 0 {A_TakeInventory("SuitIsPowered",9);
			A_TakeInventory("powthrow_counter",999);}
		TNT1 A 0 A_TakeInventory("xhair_switch",1)
		TNT1 A 0 A_Jump(256,"GrenadeEnd")
		Goto GrenadeEnd
	PT2_glow:
		GPG2 ABCDEFGHIJK 1 bright
		stop
	PowThl2_end:
		GCP3 A 4 bright
		stop
	PowThrow_lvl3:
		TNT1 A 0 {A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
			A_GunFlash("PowThl3_end");
			A_SetBlend("0 48 99",0.7,18);}
		GPTC A 1 Offset(-17,39)
		GPTC A 1 Offset(-39,58)
		GPTC A 1 Offset(-58,94)
		GPTC A 1 Offset(-80,141)
		TNT1 A 0 {A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);}
		TNT1 A 1 A_PlayWeaponSound("grenade/pin")
		GTOS A 1 {A_GunFlash("PT3_glow");
			A_PlayWeaponSound("weapons/powattack4");}
		GTOS B 1 
		GTOS C 1 {A_TakeInventory("grenades",1,TIF_NOTAKEINFINITE);
			A_FireCustomMissile("pow_frag-l3",0,0,-5,10,0,0);}
		GTOS DEFGHIJK 1
		TNT1 A 0 {A_TakeInventory("SuitIsPowered",9);
			A_TakeInventory("powthrow_counter",999);}
		TNT1 A 0 A_TakeInventory("xhair_switch",1)
		TNT1 A 0 A_Jump(256,"GrenadeEnd")
		Goto GrenadeEnd
	PT3_glow:
		GPG3 ABCDEFGHIJK 1 bright
		stop
	PowThl3_end:
		GCP4 A 4 bright
		stop
	PowThrow_max:
		TNT1 A 0 {A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
			A_GunFlash("PowThMax_end");
			A_SetBlend("99 54 0",0.9,25);}
		GPMC A 1 Offset(-17,19)
		GPMC A 1 Offset(-39,38)
		GPMC A 1 Offset(-58,74)
		GPMC A 1 Offset(-83,128)
		TNT1 A 1 {A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
			A_PlayWeaponSound("weapons/powattack5");}
		GTOS A 1 A_GunFlash("PTMAX_glow")
		GTOM A 1 A_FireCustomMissile("pthrow_wave_spawner",0,0,-5,10,0,0)
		GTOM B 1 {A_TakeInventory("grenades",1,TIF_NOTAKEINFINITE);
			A_FireCustomMissile("pow_frag-MAX",0,0,-5,10,0,0);}
		GTOM CDEFFGHIJKLMNOPQRST 1
		TNT1 A 0 {ACS_NamedExecute("Player-ChangeSpeed",0,100,0,0);
			A_TakeInventory("SuitIsPowered",9);
			A_TakeInventory("SuitIsOvercharged",9);
			A_TakeInventory("powthrow_counter",999);
			A_TakeInventory("SuitIsPowered",9);}
		TNT1 A 0 A_TakeInventory("xhair_switch",1)
		TNT1 A 0 A_Jump(256,"GrenadeEnd")
		Goto GrenadeEnd
	PTMAX_glow:
		GCPM ABCDEFGHIJKLMNOPQRSTU 1 bright
		stop
	PowThMax_end:
		GPM1 A 4 bright
		stop
	flashreset:
		TNT1 AA 1
		stop
	// GENERALIZED STIM STUFF //
	// Most of the code is handled here in the base weapon. Holstering 
	// animations need to be in the weapons themselves, though.
	User2:
		"####" "#" 0 A_JumpIfHealthLower(200,"StimCheck")
	 HealthMaxLoop:	
		"####" "#" 0 A_JumpIfInventory("OrionZoom4x",1,5)
		"####" "#" 0 A_JumpIfInventory("OrionZoom16x",1,4)
		"####" "#" 0 A_JumpIfInventory("BarraZoom",1,2)
		"####" "#" 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		Goto HealthMaxLoop+6
		"####" "#" 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH|WRF_NOBOB)
		Goto HealthMaxLoop+6
		"####" "#" 1 BRIGHT A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH|WRF_NOBOB)
		"####" "#" 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER2),"HealthMaxLoop")
		"####" "#" 0 A_JumpIfInventory("healthstim",1,2)
		"####" "#" 0 {A_Print("\cn- Health nominal -\n\cn- Health Stims unavailable -");
			A_PlaySound("weapons/cr_noammo",CHAN_AUTO,0.5);}
		Goto HealthMaxLoop+10
		"####" "#" 0 {A_Print("\cn- Health nominal -");
			A_PlaySound("weapons/cr_noammo",CHAN_AUTO,0.5);}
		"####" "#" 0 A_JumpIfInventory("BarraZoom",1,4)
		"####" "#" 0 A_JumpIfInventory("OrionZoom4x",1,"IdleZoom")
		"####" "#" 0 A_JumpIfInventory("OrionZoom16x",1,"IdleZoom")
		"####" "#" 0 A_Jump(256,"Idle")
		Goto Idle
		"####" "#" 0 A_JumpIfInventory("HoldingZoom",1,"HoldingZoomIdle")
		Goto IdleZoom
	 StimCheck:
		"####" "#" 0 A_JumpIfInventory("healthstim",1,"Stim_HolsterCheck")
	  NoStimLoop:
		"####" "#" 0 A_JumpIfInventory("OrionZoom4x",1,5)
		"####" "#" 0 A_JumpIfInventory("OrionZoom16x",1,4)
		"####" "#" 0 A_JumpIfInventory("BarraZoom",1,2)
		"####" "#" 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		Goto NoStimLoop+6
		"####" "#" 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH|WRF_NOBOB)
		Goto NoStimLoop+6
		"####" "#" 1 BRIGHT A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH|WRF_NOBOB)
		Goto NoStimLoop+6
		"####" "#" 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER2),"NoStimLoop")
		"####" "#" 0 {A_Print("\cn- Health Stims unavailable -");
			A_PlaySound("weapons/cr_noammo",CHAN_AUTO,0.5);}
		"####" "#" 0 A_JumpIfInventory("BarraZoom",1,"IdleZoom")
		"####" "#" 0 A_JumpIfInventory("OrionZoom4x",1,"IdleZoom")
		"####" "#" 0 A_JumpIfInventory("OrionZoom16x",1,"IdleZoom")
		"####" "#" 0 A_Jump(256,"Idle")
		Goto Idle
	Stimulate:	
		TNT1 A 0 A_JumpIf(GetCVar("MSfiXd_HolsterWeapForItems")==0,"QuickStim")
		TNT1 A 1
		TNT1 A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER2),"Stimulate")
		TNT1 A 10
		TNT1 A 0 ACS_NamedExecuteAlways("pmsx_UseMedkit")
		TNT1 A 35
		TNT1 A 0 A_Jump(256,"StimulateEnd")
		Goto StimulateEnd
	QuickStim:
		TNT1 A 0 ACS_NamedExecuteAlways("pmsx_UseMedkit")
		TNT1 A 0 A_Jump(256,"StimulateEnd")
		Goto StimulateEnd
	// GENERALIZED SHIELD BOOSTER STUFF //	
	// Just like the stim stuff above, this is where most of the heavy lifting's 
	// done.
	User3:
		"####" "#" 0 A_JumpIfArmorType("fullshield","ShieldMaxLoop",200)
		"####" "#" 0 A_JumpIfArmorType("autoshield","ShieldMaxLoop",200)
		"####" "#" 0 A_JumpIfArmorType("overshield","ShieldMaxLoop",1)
		Goto BoostCheck
	 ShieldMaxLoop:	
		"####" "#" 0 A_JumpIfInventory("OrionZoom4x",1,5)
		"####" "#" 0 A_JumpIfInventory("OrionZoom16x",1,4)
		"####" "#" 0 A_JumpIfInventory("BarraZoom",1,2)
		"####" "#" 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		Goto ShieldMaxLoop+6
		"####" "#" 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH|WRF_NOBOB)
		Goto ShieldMaxLoop+6
		"####" "#" 1 BRIGHT A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH|WRF_NOBOB)
		"####" "#" 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER3),"ShieldMaxLoop")
		"####" "#" 0 A_JumpIfInventory("shieldbooster",1,2)
		"####" "#" 0 {A_Print("\cn- Shields nominal -\n\cn- Shield Boosters unavailable -");
			A_PlaySound("weapons/cr_noammo",CHAN_AUTO,0.5);}
		Goto ShieldMaxLoop+10
		"####" "#" 0 {A_Print("\cn- Shields nominal -");
			A_PlaySound("weapons/cr_noammo",CHAN_AUTO,0.5);}
		"####" "#" 0 A_JumpIfInventory("BarraZoom",1,4)
		"####" "#" 0 A_JumpIfInventory("OrionZoom4x",1,"IdleZoom")
		"####" "#" 0 A_JumpIfInventory("OrionZoom16x",1,"IdleZoom")
		"####" "#" 0 A_Jump(256,"Idle")
		Goto Idle
		"####" "#" 0 A_JumpIf(GetCVar("MSfiXd_BarracudaZoomReturn")==2,2)
		"####" "#" 0 A_JumpIf(GetCVar("MSfiXd_BarracudaZoomReturn_ShieldBooster")==1,1)
		Goto Idle
		"####" "#" 0 A_JumpIfInventory("HoldingZoom",1,"HoldingZoomIdle")
		Goto IdleZoom
	 BoostCheck:
		"####" "#" 0 A_JumpIfInventory("shieldbooster",1,"Boost_HolsterCheck")
	  NoBoostLoop:
		"####" "#" 0 A_JumpIfInventory("OrionZoom4x",1,5)
		"####" "#" 0 A_JumpIfInventory("OrionZoom16x",1,4)
		"####" "#" 0 A_JumpIfInventory("BarraZoom",1,2)
		"####" "#" 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		Goto NoBoostLoop+6
		"####" "#" 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH|WRF_NOBOB)
		Goto NoBoostLoop+6
		"####" "#" 1 BRIGHT A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH|WRF_NOBOB)
		Goto NoBoostLoop+6
		"####" "#" 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER3),"NoBoostLoop")
		"####" "#" 0 {A_Print("\cn- Shield Boosters unavailable -");
			A_PlaySound("weapons/cr_noammo",CHAN_AUTO,0.5);}
		"####" "#" 0 A_JumpIfInventory("BarraZoom",1,4)
		"####" "#" 0 A_JumpIfInventory("OrionZoom4x",1,"IdleZoom")
		"####" "#" 0 A_JumpIfInventory("OrionZoom16x",1,"IdleZoom")
		"####" "#" 0 A_Jump(256,"Idle")
		Goto Idle
		"####" "#" 0 A_JumpIf(GetCVar("MSfiXd_BarracudaZoomReturn")==2,2)
		"####" "#" 0 A_JumpIf(GetCVar("MSfiXd_BarracudaZoomReturn_ShieldBooster")==1,1)
		Goto Idle
		"####" "#" 0 A_JumpIfInventory("HoldingZoom",1,"HoldingZoomIdle")
		Goto IdleZoom
	Boostify:	
		TNT1 A 0 A_JumpIf(GetCVar("MSfiXd_HolsterWeapForItems")==0,"QuickBoost")
		TNT1 A 1
		TNT1 A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS)&(BT_USER3),"Boostify")
		TNT1 A 10
		TNT1 A 0 ACS_NamedExecuteAlways("pmsx_UseShieldBooster")
		TNT1 A 35
		TNT1 A 0 A_Jump(256,"BoostifyEnd")
		Goto BoostifyEnd
	QuickBoost:
		TNT1 A 0 ACS_NamedExecuteAlways("pmsx_UseShieldBooster")
		TNT1 A 0 A_Jump(256,"BoostifyEnd")
		Goto BoostifyEnd}}
ACTOR SprintHands:Inventory{}
actor xhair_switch:Inventory{
	Inventory.PickupSound ""
	-INVBAR
	Inventory.Amount 1
	Inventory.MaxAmount 1}
actor xhair_hold:Inventory{
	Inventory.PickupSound ""
	-INVBAR
	Inventory.Amount 1
	Inventory.MaxAmount 1}
actor SprintingPlayer:Inventory {
	Inventory.PickupSound ""
	+INVBAR
	Inventory.Amount 1
	Inventory.MaxAmount 1} 
actor EvadingPlayer:Inventory {
	Inventory.PickupSound ""
	Inventory.Amount 1
	Inventory.MaxAmount 1}
actor WeaponActive:Inventory {
	Inventory.PickupSound ""
	Inventory.Amount 1
	Inventory.MaxAmount 1}
actor PlayerIsJumping:Inventory {
	Inventory.PickupSound ""
	Inventory.Amount 1
	Inventory.MaxAmount 1}
actor PlayerPowerJumping:Inventory {
	Inventory.PickupSound ""
	Inventory.Amount 1
	Inventory.MaxAmount 1}
actor SuitIsPowered:Inventory {
	Inventory.PickupSound ""
	Inventory.Amount 1
	Inventory.MaxAmount 1}
actor SuitIsOvercharged:Inventory {
	Inventory.PickupSound ""
	Inventory.Amount 1
	Inventory.MaxAmount 1}
ACTOR GrenadeHold:Inventory{}
actor gtoss_weaponmemory:inventory {Inventory.PickupSound "" inventory.maxamount 99}
actor powthrow_counter:inventory{Inventory.PickupSound "" inventory.maxamount 102}
actor pthrow_wave_spawner{
	+NOGRAVITY
	+NOINTERACTION
	states{
	spawn:
		TNT1 A 0
		TNT1 A 0 
	death:
		TNT1 AA 3 A_SpawnItemEx("pthrow_wave",30,0,0,0,0,0,0,0)
		stop}}
actor pthrow_wave{
	var int user_scale;
	alpha 1.0
	renderstyle add
	+NOINTERACTION
	+NOGRAVITY
	+FORCEXYBILLBOARD
	states{
	spawn:
		TNT1 A 0 NoDelay A_SetUserVar("user_scale",1) 
		TNT1 A 0 A_SetScale((user_scale*0.005))
		TNT1 A 0 A_JumpIf(user_scale>=40,2)
		BSW1 A 1 bright {A_FadeOut(0.04);
			A_SetUserVar("user_scale",user_scale+4);}
		Goto Spawn+1
		BSW1 A 1 Bright A_FadeOut(0.1)
		Wait}}
actor frag_grenade{
    radius 3
	height 3  
	mass 50
	damage 0
	speed 21
	scale 0.11
	gravity 0.7
	RenderStyle normal
	PROJECTILE
	+BLOODLESSIMPACT
	+NOEXPLODEFLOOR
	+FORCEXYBILLBOARD
	+BOUNCEONACTORS
	+ALLOWBOUNCEONACTORS
	+CANBOUNCEWATER
	-FLOORHUGGER
	-NOGRAVITY
	-NOBLOCKMAP
	-NOTELEPORT
	bouncetype "doom"
	bouncecount 2
	bouncefactor 0.48
	damagetype "frag_explosion"
	bouncesound "grenade/bounce"
	deathsound "grenade/bounce"
	var int user_boomsparks;
	States{
	Spawn:
		FRGR A 2 
	spawnloop:
		FRGR A 0 A_JumpIfInventory("frag_timer",10,"boom")
	  	FRGR ABCDEFGH 1 A_SpawnItemEx("frag_grenadesmoke",0,0,0,0,random(-1,1),1)			
		FRGR A 0 {A_ScaleVelocity(0.90);
			A_GiveInventory("frag_timer",1);}
		loop
	Death:
		FRGG A 0 A_JumpIfInventory("frag_timer",10,"boom")
		FRGG AAAAAA 1 A_SpawnItemEx("frag_grenadesmoke",0,0,0,random(-1,1),random(-1,1),1)	
		FRGG A 0 A_GiveInventory("frag_timer",1)
		loop
	Boom:
		TNT1 A 0 A_JumpIf(CountInv("MSfiXd_DegninOre",AAPTR_TARGET)>=1,1)
		Goto Boom+2
		TNT1 A 0 A_RemoveForceField
		TNT1 A 0 {A_PlaySound("grenade/explosion");
			A_AlertMonsters;
			A_Explode(600,200,1,1,100);
			A_SpawnItemEx("frag_flash",0,0,0,0,0,0);}
		TNT1 A 0 {for(A_SetUserVar(user_boomsparks,0); user_boomsparks<20; A_SetUserVar(user_boomsparks,user_boomsparks+1)){
			A_SpawnItemEx("frag_boomspark",0,0,0,0,random(3,4),random(6,9),random(1,360));}}
		TNT1 A 0 {A_SpawnItemEx("frag_boom",0,0,20,0,0,0);
			A_SpawnItemEx("frag_lboom",0,0,-20,0,0,0);
			A_SpawnItemEx("frag_boomsmkspawner",0,0,0,0,0,0);
			A_SpawnItemEx("frag_boomshockwave",0,0,0,0,0,0);
			A_SpawnItemEx("frag_boom2",random(-30,30),random(-20,-60),random(60,80),0,0,0);
			A_SpawnItemEx("frag_boom3",random(-30,30),random(20,60),random(60,80),0,0,0);}
		Stop}}
actor pow_frag-l1:frag_grenade{
	damage 20
	speed 36
	gravity 0.34
	bouncefactor 0.58
	bouncecount 5
	-BLOODLESSIMPACT
	+BOUNCEAUTOOFFFLOORONLY
	States{
	Spawn:
		FRGR AA 1 A_SpawnItemEx("pfragFlare",0,0,0,0,0,0)
	spawnloop:
		FRGR A 0 A_JumpIfInventory("frag_timer",10,"boom")
	  	FRGR ABCDEFGH 1 A_SpawnItemEx("pfragL1_trail_spawner",0,0,0,0,random(-1,1),1)			
		FRGR A 0 A_ScaleVelocity(0.90)
		FRGR A 0 A_GiveInventory("frag_timer",1)
		loop
	Death:
		FRGG A 0 A_JumpIfInventory("frag_timer",10,"boom")
		FRGG AAAAAA 1 A_SpawnItemEx("pfragL1_trail_spawner",0,0,0,random(-1,1),random(-1,1),1)	
		FRGG A 0 A_GiveInventory("frag_timer",1)
		loop
	Boom:
		TNT1 A 0 A_JumpIf(CountInv("MSfiXd_DegninOre",AAPTR_TARGET)>=1,1)
		Goto Boom+2
		TNT1 A 0 A_RemoveForceField
		TNT1 A 0 {A_PlaySound("grenade/explosion");
			A_AlertMonsters;
			A_Explode(650,200,1,1,100);
			A_Explode(150,300,0,1,200);
			A_SpawnItemEx("frag_flash-l1",0,0,0,0,0,0);}
		TNT1 A 0 {for(A_SetUserVar(user_boomsparks,0); user_boomsparks<20; A_SetUserVar(user_boomsparks,user_boomsparks+1)){
			A_SpawnItemEx("frag_boomspark",0,0,0,0,random(3,4),random(6,9),random(1,360));}}
		TNT1 A 0 {for(A_SetUserVar(user_boomsparks,0); user_boomsparks<10; A_SetUserVar(user_boomsparks,user_boomsparks+1)){
			A_SpawnItemEx("frag_boomspark2",0,0,0,0,random(4,5),random(7,10),random(1,360));}}
		TNT1 A 0 {A_SpawnItemEx("frag_boom",0,0,20,0,0,0);
			A_SpawnItemEx("frag_lboom",0,0,-20,0,0,0);
			A_SpawnItemEx("frag_boomsmkspawner2",0,0,0,0,0,0);
			A_SpawnItemEx("powfrag_boomshock1",0,0,0,0,0,0);
			A_SpawnItemEx("frag_boom2",random(-30,30),random(-20,-60),random(60,80),0,0,0);
			A_SpawnItemEx("frag_boom3",random(-30,30),random(20,60),random(60,80),0,0,0);}
		TNT1 A 2
		TNT1 A 0 A_SpawnItemEx("frag_boomsmkspawner",0,0,0,0,0,0)
		Stop}}
actor pow_frag-l2:frag_grenade{
	damage(250+random(1,32))
	radius 6
	height 6 
	speed 55
	gravity 0.06
	+BLOODLESSIMPACT
	-NOEXPLODEFLOOR
	-BOUNCEONACTORS
	-ALLOWBOUNCEONACTORS
	+NOTELEPORT
	bouncetype "none"	
	bouncesound " "
	deathsound " "	
	States{
	Spawn:
		FRGR AA 1 NoDelay A_SpawnItemEx("pfragFlare_l2",0,0,0,0,0,0)
	spawnloop:
		// What was this for? frag_flash-12 isn't an inventory item. Nothing can 
		// own one. I got nothin'.
		//FRGR A 0 A_JumpIfInventory("frag_flash-l2",10,"death")
		FRGR A 0 A_JumpIfInventory("frag_timer",10,"Death")
	  	FRGR ABCDEFGH 1 A_SpawnItemEx("pfragL2_trail_spawner",0,0,0,0,0,0)			
		//FRGR A 0 A_ScaleVelocity(0.90)
		FRGR A 0 A_GiveInventory("frag_timer",1)
		loop
	Death:
		TNT1 A 0 A_JumpIf(CountInv("MSfiXd_DegninOre",AAPTR_TARGET)>=1,1)
		Goto Death+2
		TNT1 A 0 A_RemoveForceField
		TNT1 A 0 {A_ChangeVelocity(0,0,0,CVF_REPLACE);
			A_PlaySound("grenade/explosion");
			A_AlertMonsters;
			A_Explode(750,225,1,1,100);
			A_Explode(250,400,0,1,200);
			A_SpawnItemEx("frag_flash",0,0,0,0,0,0);
			A_SpawnItemEx("frag_powflash-l2",0,0,0,0,0,0);
			A_SpawnItemEx("frag_boomfireSpark",0,0,0,0,random(9,12),random(0,8),random(1,90),0);
			A_SpawnItemEx("frag_boomfireSpark",0,0,0,0,random(9,12),random(0,8),random(91,180),0);
			A_SpawnItemEx("frag_boomfireSpark",0,0,0,0,random(9,12),random(0,8),random(181,270),0);
			A_SpawnItemEx("frag_boomfireSpark",0,0,0,0,random(9,12),random(0,8),random(271,360),0);}
		TNT1 AA 0 A_SpawnItemEx("frag_boomfireSpark",0,0,0,0,random(4,6),random(12,16),random(0,360),0)
		TNT1 A 0 {for(A_SetUserVar(user_boomsparks,0); user_boomsparks<26; A_SetUserVar(user_boomsparks,user_boomsparks+1)){
			A_SpawnItemEx("frag_boomspark",0,0,0,0,random(3,5),random(6,10),random(1,360));}}	
		TNT1 A 0 {for(A_SetUserVar(user_boomsparks,0); user_boomsparks<13; A_SetUserVar(user_boomsparks,user_boomsparks+1)){
			A_SpawnItemEx("frag_boomspark2",0,0,0,0,random(4,6),random(7,11),random(1,360));}}
		TNT1 A 2 {A_SpawnItemEx("frag_boom",0,0,20,0,0,0);
			A_SpawnItemEx("frag_lboom",0,0,-20,0,0,0);
			A_SpawnItemEx("powfrag_boomsmkspawn",0,0,0,0,0,0);
			A_SpawnItemEx("powfrag_boomshock1",0,0,0,0,0,0);
			A_SpawnItemEx("frag_boom2",random(-30,30),random(-20,-60),random(60,80),0,0,0);
			A_SpawnItemEx("frag_boom3",random(-30,30),random(20,60),random(60,80),0,0,0);}
		TNT1 A 4 A_SpawnItemEx("frag_lboom",random(-30,30),random(-40,40),random(20,40),0,0,0)
		TNT1 A 4 {A_SpawnItemEx("frag_boomsmkspawner2",0,0,0,0,0,0);
			A_SpawnItemEx("frag_boom4",random(-30,30),random(-40,40),random(-40,-20),0,0,0);}
		TNT1 A 4 A_SpawnItemEx("frag_lboom",random(-30,30),random(-40,40),random(-40,-20),0,0,0)
		Stop}}
actor pow_frag-l3:frag_grenade{
	damage(600+random(1,64))
	radius 8
	height 8 
	speed 70
	gravity 0.01
	+BLOODLESSIMPACT
	-NOEXPLODEFLOOR
	-BOUNCEONACTORS
	-ALLOWBOUNCEONACTORS
	+NOTELEPORT
	bouncetype "none"	
	bouncesound " "
	deathsound " "	
	States{
	Spawn:
		FRGR AA 1 NoDelay A_SpawnItemEx("pfragFlare_l3",0,0,0,0,0,0)
	spawnloop:
		FRGR A 0 A_JumpIfInventory("frag_timer",10,"death")
	  	FRGR ABCDEFGH 1 A_SpawnItemEx("pfragL3_trail_spawner",0,0,0,0,0,0,0,SXF_TRANSFERPITCH)		
		FRGR A 0 A_GiveInventory("frag_timer",1)
		loop
	Death:
		TNT1 A 0 A_JumpIf(CountInv("MSfiXd_DegninOre",AAPTR_TARGET)>=1,1)
		Goto Death+2
		TNT1 A 0 A_RemoveForceField
		TNT1 A 0 {A_ChangeVelocity(0,0,0,CVF_REPLACE);
			A_PlaySound("grenade/explosion");
			A_AlertMonsters;
			A_Explode(950,250,1,1,125);
			A_Explode(450,450,0,1,225);
			A_SpawnItemEx("frag_flash-l3",0,0,0,0,0,0);
			A_SpawnItemEx("frag_powflash-l3",0,0,0,0,0,0);}
		TNT1 AA 0 A_SpawnItemEx("frag_boomfireSpark",0,0,0,0,random(9,12),random(0,8),random(1,90),0)
		TNT1 AA 0 A_SpawnItemEx("frag_boomfireSpark",0,0,0,0,random(9,12),random(0,8),random(91,180),0)
		TNT1 AA 0 A_SpawnItemEx("frag_boomfireSpark",0,0,0,0,random(9,12),random(0,8),random(181,270),0)
		TNT1 AA 0 A_SpawnItemEx("frag_boomfireSpark",0,0,0,0,random(9,12),random(0,8),random(271,360),0)
		TNT1 AAA 0 A_SpawnItemEx("frag_boomfireSpark",0,0,0,0,random(4,6),random(12,16),random(0,360),0)
		
		TNT1 A 0 {for(A_SetUserVar(user_boomsparks,0); user_boomsparks<26; A_SetUserVar(user_boomsparks,user_boomsparks+1)){
			A_SpawnItemEx("frag_boomspark",0,0,0,0,random(3,6),random(6,11),random(1,360));}}
		TNT1 A 0 {for(A_SetUserVar(user_boomsparks,0); user_boomsparks<13; A_SetUserVar(user_boomsparks,user_boomsparks+1)){	
			A_SpawnItemEx("frag_boomspark2",0,0,0,0,random(4,7),random(7,12),random(1,360));}}
		TNT1 A 2 {A_SpawnItemEx("frag_boom",0,0,20,0,0,0);
			A_SpawnItemEx("frag_lboom",0,0,-20,0,0,0);
			A_SpawnItemEx("powfrag_boomsmkspawn2",0,0,0,0,0,0);
			A_SpawnItemEx("powfrag_boomshock2",0,0,0,0,0,0);
			A_SpawnItemEx("frag_boom2",random(-30,30),random(-20,-60),random(60,80),0,0,0);
			A_SpawnItemEx("frag_boom3",random(-30,30),random(20,60),random(60,80),0,0,0);}
		TNT1 A 4 A_SpawnItemEx("frag_lboom",random(-30,30),random(-40,40),random(20,40),0,0,0)
		TNT1 A 4 {A_SpawnItemEx("powfrag_boomsmkspawn",0,0,0,0,0,0);
			A_SpawnItemEx("frag_boom4",random(-30,30),random(-40,40),random(-40,-20),0,0,0);}
		TNT1 A 4 A_SpawnItemEx("frag_lboom",random(-30,30),random(-40,40),random(-40,-20),0,0,0)
		TNT1 A 4 A_SpawnItemEx("frag_boom4",random(-30,30),random(-40,40),random(-40,-20),0,0,0)			
		Stop}}
actor pow_frag-MAX:fastprojectile {
	damage((1200+random(1,128)) +(ACS_NamedExecuteWithResult("get_powf-bonusdamage",0,0,0)/4))
	radius 8
	height 8
	mass 50
	speed 80
	scale 0.75
	gravity 0
	RenderStyle add
	PROJECTILE
	+BLOODLESSIMPACT
	-NOEXPLODEFLOOR
	-BOUNCEONACTORS
	-ALLOWBOUNCEONACTORS
	+NOTELEPORT
	-NOGRAVITY
	-NOBLOCKMAP
	-FLOORHUGGER
	+FORCEXYBILLBOARD
	damagetype "frag_explosion"
	MissileType "pfragMAX_trail_spawner"
	MissileHeight 8
	var int user_boomsparks;
	Decal "BigScorch"
	States{
	Spawn:
		TNT1 A 0 A_JumpIfInventory("powfrag_timer",80,"death")
		FLR1 A 1 bright A_SpawnItemEx("powfragMAX_wavetrail",0,0,0,0,0,0,0)
		TNT1 A 0 A_GiveInventory("powfrag_timer",1)
		loop
	Death:
		TNT1 A 0 A_JumpIf(CountInv("MSfiXd_DegninOre",AAPTR_TARGET)>=1,1)
		Goto Death+2
		TNT1 A 0 A_RemoveForceField
		TNT1 A 0 {A_ChangeVelocity(0,0,0,CVF_REPLACE);
			A_PlaySound("grenade/explosion");
			A_AlertMonsters;
			A_Explode(1400+(ACS_NamedExecuteWithResult("get_powf-bonusdamage",1,0,0)/3),350,1,1,125);
			A_Explode(800+(ACS_NamedExecuteWithResult("get_powf-bonusdamage",1,0,0)/4),550+(ACS_NamedExecuteWithResult("get_powf-bonusdamage",1,0,0)/10),0,1,250);
			A_SpawnItemEx("frag_flash-MAX",0,0,0,0,0,0);
			A_SpawnItemEx("frag_powflash-MAX",0,0,0,0,0,0);}
		TNT1 AAA 0 A_SpawnItemEx("frag_boomfireSpark",0,0,0,0,random(9,12),random(0,8),random(1,90),0)
		TNT1 AAA 0 A_SpawnItemEx("frag_boomfireSpark",0,0,0,0,random(9,12),random(0,8),random(91,180),0)
		TNT1 AAA 0 A_SpawnItemEx("frag_boomfireSpark",0,0,0,0,random(9,12),random(0,8),random(181,270),0)
		TNT1 AAA 0 A_SpawnItemEx("frag_boomfireSpark",0,0,0,0,random(9,12),random(0,8),random(271,360),0)
		TNT1 AAAA 0 A_SpawnItemEx("frag_boomfireSpark",0,0,0,0,random(4,6),random(12,16),random(0,360),0)
		TNT1 A 0 {for(A_SetUserVar(user_boomsparks,0); user_boomsparks<26; A_SetUserVar(user_boomsparks,user_boomsparks+1)){
			A_SpawnItemEx("frag_boomspark",0,0,0,0,random(3,7),random(6,12),random(1,360));}}
		TNT1 A 0 {for(A_SetUserVar(user_boomsparks,0); user_boomsparks<26; A_SetUserVar(user_boomsparks,user_boomsparks+1)){
			A_SpawnItemEx("frag_boomspark2",0,0,0,0,random(4,8),random(7,13),random(1,360));}}
		TNT1 A 0 A_SpawnItemEx("frag_boom",0,0,20,0,0,0)
		TNT1 A 0 A_SpawnItemEx("frag_lboom",0,0,-20,0,0,0)
		TNT1 A 0 A_SpawnItemEx("powfrag_boomsmkspawn2",0,0,0,0,0,0)
		TNT1 A 0 A_SpawnItemEx("powfrag_boomshock2",0,0,0,0,0,0)
		TNT1 A 0 A_SpawnItemEx("frag_boom2",random(-30,30),random(-20,-60),random(60,80),0,0,0)
		TNT1 A 0 A_SpawnItemEx("frag_boom3",random(-30,30),random(20,60),random(60,80),0,0,0)
		TNT1 A 3
		TNT1 A 0 A_SpawnItemEx("powfrag_boomshock2",0,0,0,0,0,0)	
		TNT1 A 4 A_SpawnItemEx("frag_lboom",random(-30,30),random(-40,40),random(20,40),0,0,0)			
		TNT1 A 4 A_SpawnItemEx("frag_boom4",random(-30,30),random(-40,40),random(-40,-20),0,0,0)
		TNT1 A 0 A_SpawnItemEx("powfrag_boomsmkspawn",0,0,0,0,0,0)
		TNT1 A 0 A_SpawnItemEx("frag_fastboomsmoke",0,0,0,0,random(20,30),8,random(1,80),0)
		TNT1 A 0 A_SpawnItemEx("frag_fastboomsmoke",0,0,0,0,random(20,30),8,random(101,170),0)
		TNT1 A 0 A_SpawnItemEx("frag_fastboomsmoke",0,0,0,0,random(20,30),8,random(191,260),0)
		TNT1 A 0 A_SpawnItemEx("frag_fastboomsmoke",0,0,0,0,random(20,30),8,random(281,350),0)
		TNT1 A 0 A_SpawnItemEx("frag_fastboomsmoke",0,0,0,0,random(20,30),-8,random(1,80),0)
		TNT1 A 0 A_SpawnItemEx("frag_fastboomsmoke",0,0,0,0,random(20,30),-8,random(101,170),0)
		TNT1 A 0 A_SpawnItemEx("frag_fastboomsmoke",0,0,0,0,random(20,30),-8,random(191,260),0)
		TNT1 A 0 A_SpawnItemEx("frag_fastboomsmoke",0,0,0,0,random(20,30),-8,random(281,350),0)
		TNT1 A 0 A_SpawnItemEx("frag_boom2",random(-30,30),random(-60,-50),random(60,80),0,0,0)
		TNT1 A 0 A_SpawnItemEx("frag_boom3",random(-30,30),random(50,60),random(-80,-60),0,0,0)
		TNT1 A 4 A_SpawnItemEx("frag_lboom",random(-30,30),random(-40,40),random(-40,-20),0,0,0)
		TNT1 A 0 A_SpawnItemEx("frag_boom2",random(-30,30),random(50,60),random(-80,-60),0,0,0)
		TNT1 A 0 A_SpawnItemEx("frag_boom3",random(-30,30),random(-60,-50),random(60,80),0,0,0)
		TNT1 A 4 A_SpawnItemEx("frag_boom4",random(-30,30),random(-40,40),random(-40,-20),0,0,0)	
		TNT1 A 0
		Stop}}
// Grenade SFX
actor pfragL1_trail_spawner{
	+NOINTERACTION
	states{
	spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx("pfragFlare",0,0,1,0,0,0)
		TNT1 A 0 A_SpawnItemEx("frag_grenadesmoke",0,0,0,0,random(-1,1),1)
		stop}}
actor pfragL2_trail_spawner{
	+NOINTERACTION
	states{
	spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx("pfragFlare_l2",0,0,1,0,0,0)
		TNT1 A 0 A_SpawnItemEx("powfragl2_smoke",0,0,0,0,frandom(-0.3,0.3),0.2)
		stop}}
actor pfragL3_trail_spawner{
	+NOINTERACTION
	states{
	spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx("pfragFlare_l3",0,0,1,0,0,0)
		TNT1 AA 0 A_SpawnItemEx("powfragl2_smoke",0,0,0,0,frandom(-0.8,0.8),0.6)
		TNT1 AAAAAAAA 0 A_SpawnItemEx("powfrag_smoke",0,0,0,frandom(0.6,1.2),frandom(-0.5,0.5),frandom(-0.5,0.5),0,SXF_TRANSFERPITCH)
		TNT1 AAAAAAAA 0 A_SpawnItemEx("powfrag_smoke",0,0,0,frandom(-1.2,-0.6),frandom(-0.5,0.5),frandom(-0.5,0.5),0,SXF_TRANSFERPITCH)
		stop}}
//(sin(pitch)/cos(pitch))*10
actor pfragMAX_trail_spawner{
	+NOINTERACTION
	states{
	spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx("powfragMAX_trail",0,0,0,0,0,0)
		TNT1 AA 0 A_SpawnItemEx("powfragMAX_smoke",0,0,0,0,frandom(-0.8,0.8),frandom(-0.8,0.8))	
		stop}}
actor frag_timer:Inventory{Inventory.PickupSound "" Inventory.MaxAmount 10}
actor powfrag_timer:Inventory{Inventory.PickupSound "" Inventory.MaxAmount 80}
actor frag_grenadesmoke{
	scale 0.09
	renderstyle translucent
	alpha 0.5
	damage 0
	speed 0
	+NOTELEPORT
	+NOCLIP
	+NOGRAVITY
	+FORCEXYBILLBOARD
	+NOINTERACTION
	states{
	spawn:
		SMK4 ABCDEFGHIJ 1 bright 
	endloop:			
		SMK4 J 2 bright A_FadeOut(0.1) 
		TNT1 A 0 A_ScaleVelocity(0.9)
		loop}}
actor powfragl2_smoke:frag_grenadesmoke {renderstyle add alpha 0.8}
actor pfragFlare{
	alpha 0.45
	scale 0.25
	renderstyle add
	+NOINTERACTION
	+FORCEXYBILLBOARD
	states{
	spawn:
		TNT1 A 0
		FLR2 A 1 bright
		stop}}
actor pfragFlare_l2:pfragFlare{alpha 0.65 scale 0.25}
actor pfragFlare_l3:pfragFlare{alpha 0.85 scale 0.25}
actor powfragMAX_trail{
	scale 0.09
	renderstyle add
	alpha 0.9
	damage 0
	speed 0
	+FORCEXYBILLBOARD
	+NOINTERACTION
	states{
	spawn:
		PGNT A 4 bright
	endloop:
		PGNT A 3 bright A_FadeOut(0.1)
		loop}}
actor powfragMAX_wavetrail{
	var int user_scale;
	alpha 1.0
	renderstyle add
	+NOINTERACTION
	+NOGRAVITY
	+FORCEXYBILLBOARD
	states{
	spawn:
		TNT1 A 0
		TNT1 A 0 A_SetUserVar("user_scale",1) 
	scaledown:			   
		TNT1 A 0 A_SetScale((user_scale*0.01)) //Start scale
		TNT1 A 0 A_JumpIf(user_scale>=20,"LoopEnd") //Maximum Scale
		BSW2 A 1 bright A_FadeOut(0.05)
		TNT1 A 0 A_SetUserVar("user_scale",user_scale+2) //Speed
		loop
	loopend:
		BSW2 A 1 Bright A_FadeOut(0.05)
		wait}}
//EXPLOSIONS
actor frag_flash{
	scale 2.0
	alpha 1.0
	renderstyle add
	+NOTELEPORT
	+NOCLIP
	+FLOORCLIP
	+NOGRAVITY
	+FORCEXYBILLBOARD
	+NOINTERACTION
	states{
	spawn:
		BFSH A 3 bright
	endloop:
		BFSH A 1 A_FadeOut(0.2)
		loop}}
actor frag_flash-l1:frag_flash{scale 2.2}
actor frag_flash-l2:frag_flash{scale 2.4}
actor frag_flash-l3:frag_flash{scale 2.6}
actor frag_flash-MAX:frag_flash{scale 2.9}
actor frag_powflash-l2{
	scale 1.2
	alpha 1.0
	renderstyle add
	+NOTELEPORT
	+NOCLIP
	+FLOORCLIP
	+NOGRAVITY
	+FORCEXYBILLBOARD
	+NOINTERACTION
	states{
	spawn:
		BFSH B 4 bright
	endloop:
		BFSH B 1 A_FadeOut(0.1)
		loop}}
actor frag_powflash-l3:frag_powflash-l2 {scale 1.35}
actor frag_powflash-MAX:frag_powflash-l2 {scale 1.55}
actor frag_boomshockwave{
	var int user_scale;
	var float user_multiplier;
	var int user_endsize;
	renderstyle add
	+NOTELEPORT
	+NOCLIP
	+FLOORCLIP
	+NOGRAVITY
	+FORCEXYBILLBOARD
	+NOINTERACTION
	States{
	Spawn:
		TNT1 A 0 NoDelay {A_SetUserVar("user_scale",1);
			A_SetUserVarFloat(user_multiplier,0.03);
			A_SetUserVar(user_endsize,40);}
	Expand:
		TNT1 A 0 A_SetScale((user_scale*user_multiplier))
		TNT1 A 0 A_JumpIf(user_scale>=user_endsize,"Fade")
		BSW0 A 1 bright {A_FadeOut(0.1);
			A_SetUserVar("user_scale",user_scale+4);}
		Goto Spawn+1
	Fade:
		BSW0 A 1 Bright A_FadeOut(0.1)
		Wait}}
actor powfrag_boomshock1:frag_boomshockwave{
	states{
	spawn:
		TNT1 A 0 NoDelay {A_SetUserVar("user_scale",1);
			A_SetUserVarFloat(user_multiplier,0.04);
			A_SetUserVar(user_endsize,44);}
		TNT1 A 0 A_Jump(256,"Expand")
		Goto Expand}}
actor powfrag_boomshock2:frag_boomshockwave{
	states{
	spawn:
		TNT1 A 0 NoDelay {A_SetUserVar("user_scale",1);
			A_SetUserVarFloat(user_multiplier,0.05);
			A_SetUserVar(user_endsize,48);}
		TNT1 A 0 A_Jump(256,"Expand")
		Goto Expand}}
actor frag_boom{
	radius 2
	height 2
	scale 1.6
	alpha 0.7
	renderstyle add
	+NOTELEPORT
	+NOCLIP
	+FLOORCLIP
	+NOGRAVITY
	+FORCEXYBILLBOARD
	+NOINTERACTION
	states{
	spawn:
		SX03 A 1 NoDelay BRIGHT A_Quake(5,12,0,612," ")	
		SX03 BCDEFGHIJKLMNOPQRSTWXYZ 1 bright
		Stop}}
actor frag_lboom:frag_boom{
	states{
	spawn:
		SX03 ABCDEFGHIJKLMNOPQRSTWXYZ 1 bright
		Stop}}
actor frag_boom2:frag_boom{
	scale 1.3
	states{
	spawn:
		SX02 ABCDEFGHIJKLMNOPQRSTU 1 bright
		stop}} 
actor frag_boom3:frag_boom2{
	scale 1
	states{
	spawn:
		SX04 ABCDEFGHIJKLMNOPQ 1 bright
		stop}}
actor frag_boom4:frag_boom{
	states{
	spawn:
		SX06 ABCDEFGHIJKLMNOPQRSTWX 1 bright
		stop}}
actor frag_boomsmkspawner{
	speed 0
	+NOCLIP
	+NOINTERACTION
	var int user_spwn;
	var int user_svel;
	states{
	spawn:
		TNT1 A 0 NoDelay {A_SetUserVar("user_spwn",10);
			A_SetUserVar("user_svel",4);}
		TNT1 A 3
		Goto boom
	boom:
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",user_spwn,0,0,user_svel,0,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",-user_spwn,0,0,-user_svel,0,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,user_spwn,0,0,user_svel,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,-user_spwn,0,0,-user_svel,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",-user_spwn,user_spwn/2,0,-user_svel,user_svel/2,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",-user_spwn/2,user_spwn,0,-user_svel/2,user_svel,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",user_spwn/2,user_spwn,0,user_svel/2,user_svel,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",user_spwn,user_spwn/2,0,user_svel,user_svel/2,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",user_spwn,-user_spwn/2,0,user_svel,-user_svel/2,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",user_spwn/2,-user_spwn,0,user_svel/2,-user_svel,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",-user_spwn/2,-user_spwn,0,-user_svel/2,-user_svel,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",-user_spwn,-user_spwn/2,0,-user_svel,-user_svel/2,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,0,0,0,0,user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,0,-user_spwn,0,0,-user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",-user_spwn,0,user_spwn/2,-user_svel,0,user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",-user_spwn/2,0,user_spwn,-user_svel/2,0,user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",user_spwn/2,0,user_spwn,user_svel/2,0,user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",user_spwn,0,user_spwn/2,user_svel,0,user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",user_spwn,0,-user_spwn/2,user_svel,0,-user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",user_spwn/2,0,-user_spwn,user_svel/2,0,-user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",-user_spwn/2,0,-user_spwn,-user_svel/2,0,-user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",-user_spwn,0,-user_spwn/2,-user_svel,0,-user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,-user_spwn,user_spwn/2,0,-user_svel,user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,-user_spwn/2,user_spwn,0,-user_svel/2,user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,user_spwn/2,user_spwn,0,user_svel/2,user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,user_spwn,user_spwn/2,0,user_svel,user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,user_spwn,-user_spwn/2,0,user_svel,-user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,user_spwn/2,-user_spwn,0,user_svel/2,-user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,-user_spwn/2,-user_spwn,0,-user_svel/2,-user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,-user_spwn,-user_spwn/2,0,-user_svel,-user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,0,0,user_svel/2,user_svel/2,user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,0,0,user_svel/2,user_svel/2,-user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,0,0,user_svel/2,-user_svel/2,user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,0,0,user_svel/2,-user_svel/2,-user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,0,0,-user_svel/2,user_svel/2,user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,0,0,-user_svel/2,user_svel/2,-user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,0,0,-user_svel/2,-user_svel/2,user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke",0,0,0,-user_svel/2,-user_svel/2,-user_svel/2,0,32)			
		stop}}
actor frag_boomsmkspawner2:frag_boomsmkspawner{
	states{
	spawn:
		TNT1 A 0 NoDelay {A_SetUserVar("user_spwn",12);
			A_SetUserVar("user_svel",6);}
		TNT1 A 3
		Goto boom}}
actor powfrag_boomsmkspawn{
	speed 0
	+NOCLIP
	+NOINTERACTION
	var int user_spwn;
	var int user_svel;
	states{
	spawn:
		TNT1 A 0 {A_SetUserVar("user_spwn",12);
			A_SetUserVar("user_svel",6);}
		TNT1 A 3
		Goto boom
	boom:
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",user_spwn,0,0,user_svel,0,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",-user_spwn,0,0,-user_svel,0,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,user_spwn,0,0,user_svel,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,-user_spwn,0,0,-user_svel,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",-user_spwn,user_spwn/2,0,-user_svel,user_svel/2,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",-user_spwn/2,user_spwn,0,-user_svel/2,user_svel,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",user_spwn/2,user_spwn,0,user_svel/2,user_svel,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",user_spwn,user_spwn/2,0,user_svel,user_svel/2,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",user_spwn,-user_spwn/2,0,user_svel,-user_svel/2,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",user_spwn/2,-user_spwn,0,user_svel/2,-user_svel,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",-user_spwn/2,-user_spwn,0,-user_svel/2,-user_svel,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",-user_spwn,-user_spwn/2,0,-user_svel,-user_svel/2,0,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,0,0,0,0,user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,0,-user_spwn,0,0,-user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",-user_spwn,0,user_spwn/2,-user_svel,0,user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",-user_spwn/2,0,user_spwn,-user_svel/2,0,user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",user_spwn/2,0,user_spwn,user_svel/2,0,user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",user_spwn,0,user_spwn/2,user_svel,0,user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",user_spwn,0,-user_spwn/2,user_svel,0,-user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",user_spwn/2,0,-user_spwn,user_svel/2,0,-user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",-user_spwn/2,0,-user_spwn,-user_svel/2,0,-user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",-user_spwn,0,-user_spwn/2,-user_svel,0,-user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,-user_spwn,user_spwn/2,0,-user_svel,user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,-user_spwn/2,user_spwn,0,-user_svel/2,user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,user_spwn/2,user_spwn,0,user_svel/2,user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,user_spwn,user_spwn/2,0,user_svel,user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,user_spwn,-user_spwn/2,0,user_svel,-user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,user_spwn/2,-user_spwn,0,user_svel/2,-user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,-user_spwn/2,-user_spwn,0,-user_svel/2,-user_svel,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,-user_spwn,-user_spwn/2,0,-user_svel,-user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,0,0,user_svel/2,user_svel/2,user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,0,0,user_svel/2,user_svel/2,-user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,0,0,user_svel/2,-user_svel/2,user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,0,0,user_svel/2,-user_svel/2,-user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,0,0,-user_svel/2,user_svel/2,user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,0,0,-user_svel/2,user_svel/2,-user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,0,0,-user_svel/2,-user_svel/2,user_svel/2,0,32)
		TNT1 A 0 A_SpawnItemEx("frag_boomsmoke2",0,0,0,-user_svel/2,-user_svel/2,-user_svel/2,0,32)			
		stop}}
actor powfrag_boomsmkspawn2:powfrag_boomsmkspawn{
	states{
	spawn:
		TNT1 A 0 NoDelay {A_SetUserVar("user_spwn",14);
			A_SetUserVar("user_svel",8);}
		TNT1 A 3
		Goto Boom}}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
actor frag_fastboomsmoke{
	radius 2
	height 2
	speed  0
	damage 0
	gravity 0
	RenderStyle add
	Alpha 1
	Scale 0.4
	Mass 0
	+MISSILE
	+FLOORCLIP
	+DONTSPLASH
	+NOTELEPORT
	+FORCEXYBILLBOARD
	States{
	spawn:
		TNT1 AAAA 2 NoDelay A_SpawnItemEx("frag_boomsmoke2",0,0,0,0,0,0,0,0)
	death:
		TNT1 A 0
		stop}}
actor frag_boomspark{
	radius 2
	height 2
	scale 0.04
	gravity 0.4
	renderstyle add
	+NOTELEPORT
	+FLOORCLIP
	+FORCEXYBILLBOARD
	bouncetype "doom"
	bouncefactor 0.2
	states{
	spawn:
		SPRK A 40
		SPRK A 1 A_FadeOut(0.1)
		Wait}}
actor frag_boomspark2:frag_boomspark{
	scale 0.07
	gravity 0.38
	states{
	spawn:
		SPRK C 50
		SPRK C 1 A_FadeOut(0.1)
		Wait}}
actor frag_boomfireSpark{
	radius 1
	height 1
	speed  4
	damage 0
	RenderStyle add
	Alpha 1
	Scale 0.4
	Mass 0
	+MISSILE
	+FLOORCLIP
	+DONTSPLASH
	+NOTELEPORT
	+FORCEXYBILLBOARD
	BounceType "doom"
	gravity 0.8
	BounceFactor 0.2
	var int user_i;
	States{
	Spawn:
		TNT1 A 0 NoDelay A_SetUserVar("user_i",1)
		TNT1 A 0 A_JumpIf(user_i>=60,"Death")
		TNT1 A 1 {A_SpawnItemEx("f_bfireSpark-trail",0,0,2,0,0,0,0);
			A_SpawnItemEx("f_bfireSpark-smoke",0,0,0,frandom(-0.6,0.6),frandom(-0.6,0.6),frandom(0.6,0.8),0);
			A_SetUserVar("user_i",user_i+1);}
		Goto Spawn+1
	Death:
		TNT1 A 0
		stop}}
actor f_bfireSpark-trail{
	radius 1
	height 1
	alpha 1.0
	+FLOORCLIP
	+NOTELEPORT
	+FORCEXYBILLBOARD
	renderstyle add
	scale 0.65
	gravity 0
	states{
	spawn:
		TNT1 A 0 NoDelay A_Jump(256,1,2,3,4,5)
		EXP6 A 0 A_Jump(256,5)
		EXP7 A 0 A_Jump(256,4)
		EXP8 A 0 A_Jump(256,3)
		EXP9 A 0 A_Jump(256,2)
		EXP0 A 0
		"####" AABCDEFGH 2 BRIGHT
		Stop}}
//Ammo
ACTOR GrenadeAmmo:CustomInventory{
	radius 16
	height 8
	scale 0.15
	inventory.pickupmessage "'Slinger' TDG-47 Frag Grenade"
	inventory.pickupsound ""
	States{
	Spawn:
		FRGW ABCDEFGFEDCBA 2
		Loop
	Pickup:
		TNT1 A 0 A_JumpIfInventory("grenades",0,"Nope")
		TNT1 A 0 {A_PlaySound("grenade/pickup",CHAN_ITEM,1.0);
			A_PlaySound("grenade/pickup",CHAN_AUTO,0.75);
			A_GiveInventory("grenades",1);}
		Stop
	Nope:
		TNT1 A 0
		Fail}}
actor grenades:ammo{
  radius 16
  height 8
  scale 0.11
  inventory.pickupmessage "Single Frag Grenade"
  inventory.pickupsound "grenade/pickup"
  inventory.amount 1
  inventory.maxamount 10
  ammo.backpackamount 1
  ammo.backpackmaxamount 15
  states{
  Spawn:
    FRGW ABCDEFGFEDCBA 2
    loop}}
actor grenade_box:grenades{
	radius 16
	height 8
	scale 0.35
	inventory.pickupmessage "Box of Frag Grenades"
	inventory.pickupsound "grenade/pickup"
	inventory.amount 3
	states{
	Spawn:
		FRBX A -1
		stop}}
//grenades of the enemies
actor GruntGrenade:frag_grenade{speed 19 gravity 0.8}