ACTOR GlowStick : G2_Weapon 31101
{
	Inventory.PickupMessage "Picked up a glowstick"
	Inventory.PickupSound "weapons/glowstick_pick"
	Weapon.ammotype "GlowSticks"
	Weapon.ammouse 1
	Weapon.ammogive 1
	Weapon.ammotype2 "GlowstickLife"
	Weapon.ammouse2 0
	//Weapon.upsound "weapons/glowstick_switch"
	+WEAPON.NOAUTOAIM
	renderstyle normal
	scale 0.15
	alpha 1.0
	States
	{
		Ready:
			GSTG A 0
			GSTG A 0 ACS_NamedExecuteWithResult("light_glowstickWeapon", 0, 0)
		Ready2:
			GSTG A 0
			GSTG A 0 A_GiveInventory("G2_UsesLightSource",1)
			GSTG A 0 A_TakeInventory("GlowstickLife",1)
			GSTG A 0 A_JumpIfInventory("GlowstickLife", 0, "LifeTimeOver")
			GSTG A 1 A_WeaponReady
			GSTG A 0 A_JumpIfInventory("GlowstickLife", 1, "Ready2")
			Goto LifeTimeOver
		LifeTimeOver:
			TNT1 A 0
			TNT1 A 0 A_JumpIfInventory("Glowsticks",1,"DoLifeTimeOver")
			TNT1 A 0
			Goto NoAmmo
		DoLifeTimeOver:
			TNT1 A 25 A_PlaySoundEx("weapons/glowstick_throw","Weapon")
			TNT1 A 0 A_TakeInventory("Glowsticks",1)
			TNT1 A 0 A_GiveInventory("GlowstickLife",15000)
			Goto Ready2
		Select:
			GSTG A 1 A_Raise
			GSTG A 0 A_Raise
			GSTG A 0 A_Raise
			Loop
		Deselect:
			GSTG A 1 A_Lower
			GSTG A 0 A_Lower
			GSTG A 0 A_Lower
			GSTG A 0 A_TakeInventory("G2_UsesLightSource",1)
			loop
		Fire:
			GSTG A 0
			GSTG A 1
			TNT1 A 0 A_JumpIfInventory("Glowsticks",1,"DoFire")
			goto Ready2
		DoFire:
			GSTG A 1 Offset(4, 40)
			GSTG A 1 Offset(8, 48)
			GSTG A 1 Offset(16, 62)
			GSTG A 1 Offset(32, 88)
			GSTG A 1 Offset(68, 108)
		
			GSTG A 0 A_PlaySoundEx("weapons/glowstick_throw","Weapon")

			GSTG C 1 Offset(100, 72)
			GSTG C 1 Offset(60, 60)

			GSTG C 1 Offset(20, 50)

			GSTG C 0 A_FireCustomMissile("ThrownGlowstick")
			
			GSTG C 1 Offset(-20, 40)
			GSTG C 1 Offset(-60, 50)
			
			GSTG C 1 Offset(-90, 52)
			GSTG C 1 Offset(-110, 62)
			GSTG C 1 Offset(-150, 88)

			GSTG C 0 A_JumpIfInventory("Glowsticks",1,"FinishFire")
			GSTG C 0 Offset(0, 32)
			goto NoAmmo
			FinishFire:
			GSTG A 1 Offset(32, 88)
			GSTG A 1 Offset(24, 72)
			GSTG A 1 Offset(16, 62)
			GSTG A 1 Offset(8, 48)
			GSTG A 1 Offset(4, 40)
			goto Ready2
		AltFire:
			GSTG A 0
			GSTG A 1
			TNT1 A 0 A_JumpIfInventory("Glowsticks",1,"DoFire2")
			goto Ready2
		DoFire2:
			GSTG A 1 Offset(4, 40)
			GSTG A 1 Offset(8, 48)
			GSTG A 1 Offset(16, 62)
			GSTG A 1 Offset(32, 88)
			GSTG A 1 Offset(68, 108)
		
			GSTG A 0 A_PlaySoundEx("weapons/glowstick_throw","Weapon")

			GSTG B 1 Offset(24, 72)
			GSTG B 1 Offset(16, 62)

			GSTG B 1 Offset(15, 60)

			GSTG B 0 A_FireCustomMissile("ThrownGlowstick2")
			GSTG B 0 A_TakeInventory("Glowsticks",1)
			
			GSTG B 1 Offset(14, 58)
			GSTG B 1 Offset(15, 60)
			GSTG B 1 Offset(16, 62)
			GSTG B 1 Offset(24, 72)
			GSTG B 1 Offset(32, 88)

			GSTG B 0 A_JumpIfInventory("Glowsticks",1,"FinishFire2")
			GSTG B 0 Offset(0, 32)
			goto NoAmmo
			FinishFire2:
			GSTG A 1 Offset(32, 88)
			GSTG A 1 Offset(24, 72)
			GSTG A 1 Offset(16, 62)
			GSTG A 1 Offset(8, 48)
			GSTG A 1 Offset(4, 40)
			goto Ready2
		NoAmmo:
			TNT1 A 0
			TNT1 A 0 Offset(0, 32)
			TNT1 A 0 A_SelectWeapon("Matches")
			TNT1 A 0 A_SelectWeapon("Lighter")
			TNT1 A 0 A_SelectWeapon("FlashLight")
			TNT1 A 0 A_TakeInventory("G2_UsesLightSource",1)
			TNT1 A 0 A_TakeInventory("Glowstick",1)
			TNT1 A 10
			goto Ready2
		Spawn:
			GSTC B -1
			loop
	}
}

actor GlowStickLight {
	+NOCLIP
	-SOLID
	+DONTSPLASH
	+CLIENTSIDEONLY
	+NOTIMEFREEZE
	+NOGRAVITY
	+NOBLOCKMAP
	States {
		Spawn:
			TNT1 A 0
			TNT1 A -1
			Stop
	}
}

actor GlowStickLight2 : GlowStickLight { }

actor ThrownGlowStick {
	PROJECTILE
	+DOOMBOUNCE
	renderstyle add
	scale 0.15
	alpha 1.0
	speed 35

	height 4
	radius 6
	-NOGRAVITY
	bouncefactor 0.4
	seesound "weapons/glowstick_bounce"
	states {
		Spawn:
			GSTC A 0
			GSTC A 0 Thing_ChangeTID(0, 3495)
			GSTC A 0 ACS_NamedExecuteWithResult("light_glowstick")
			GSTC A 0 ACS_NamedExecuteWithResult("glowstick_alert")
		Spawn2:
			GSTC AC 1 bright
			loop
		Break:
			GSTC A 0 A_PlaySound("weapons/glowstick_break", CHAN_6)
			GSTC AAAAAA 0 A_SpawnItemEx("GlowstickParticle", Random(-8, 8), Random(-8, 8), Random(0, 2), FRandom(5.0, 10.0), FRandom(-2.0, 2.0), FRandom(1.0, 5.0), 0, SXF_CLIENTSIDE)
			GSTC A 0 ACS_NamedExecuteWithResult("script_glowstick_alert")
			stop
		Death:
			//GSTC A 0 bright
			//GSTC A 0 bright A_SpawnItemEx("GlowStickLight2",0,0,40, 0,0,0, 0, SXF_CLIENTSIDE)
			TNT1 A 0 ACS_NamedExecuteWithResult("script_glowstick_alert")
			TNT1 A 1 bright A_SpawnItemEx("GlowStick2")
			stop
		
	}
}

actor ThrownGlowStick2 : ThrownGlowStick { speed 10 }

actor GlowStick2 : CustomInventory
{
	renderstyle add
	scale 0.15
	alpha 1.0
	Inventory.PickupMessage "Glowstick!"
	Inventory.PickupSound "weapons/glowstick_pick"
	-COUNTITEM
	+INVENTORY.IGNORESKILL
	+DONTGIB //In ZDoom 2.7.1 it prevents from removing the item when crushed by doors
	states
	{
		Spawn2:
			GSTC A 1
			loop
		Spawn:
			GSTC A 0
			GSTC A 0 bright A_GiveInventory("G2_IsThrowable", 1)
			GSTC A 0 Thing_ChangeTID(0,3500 + ((random(x,x)+10000)/1000) + (((random(y,y)+10000)/1000)*20))
			GSTC A 0 ACS_NamedExecuteWithResult("light_glowstick")
			GSTC A 3000
			GSTC A 0 A_SpawnItemEx("GlowstickDead")
			stop
		Off_Server:
		Off_Event:
			GSTC A 0 Thing_ChangeTID(0, 3496)
			GSTC A 0 ACS_NamedExecuteWithResult("light_offState")
			fail
		Off_Client:
			GSTC A 0 A_SpawnItemEx("GlowstickDead")
			GSTC A 0 A_PlaySound("weapons/glowstick_break", CHAN_6)
			GSTC A 0 ACS_NamedExecuteWithResult("script_glowstick_alert")
			GSTC AAAAAA 0 A_SpawnItemEx("GlowstickParticle", Random(-8, 8), Random(-8, 8), Random(0, 2), FRandom(-10.0, 10.0), FRandom(-10.0, 10.0), FRandom(1.0, 10.0), 0, SXF_CLIENTSIDE)
			stop
		Pickup:
			TNT1 A 0
			TNT1 A 0 A_JumpIfInventory("Glowsticks",12,"Spawn2")
			TNT1 A 0 A_GiveInventory ("Glowstick",1)
			stop
	}
}

actor GlowstickParticle {
	+NOBLOCKMAP
	+THRUACTORS
	+CLIENTSIDEONLY
	+MISSILE
	height 2
	radius 2

	renderstyle add
	alpha 1.0
	scale 0.025
	States {
		Spawn:
			GSTC P 1 A_FadeOut(0.025)
			loop
		Death:
			GSTC P 0 A_PlaySound("weapons/glowstick_splash")
			GSTC P 0 A_SpawnItemEx("GlowstickParticleAfterglow", 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE)
			stop
	}
}

actor GlowstickParticleAfterglow {
	+NOBLOCKMAP
	+THRUACTORS
	+CLIENTSIDEONLY
	+INVISIBLE
	height 2
	radius 2

	renderstyle normal
	scale 0.025
	gravity 0.01
	States {
		Spawn:
			POSS A 350
			POSS ABCDEFGHIJKLMNOP 1
			stop
	}
}

actor GlowStickDead {
	+NOBLOCKMAP
	+THRUACTORS
	+CLIENTSIDEONLY
	scale 0.15
	States {
		Spawn:
			GSTC B 700
			stop
	}
}

ACTOR GlowSticks : Ammo {
	Inventory.PickupMessage "Picked up a glowstick"
	Inventory.Amount 1
	Inventory.MaxAmount 12
	Ammo.BackpackAmount 0
	Ammo.BackpackMaxAmount 12
	+INVENTORY.IGNORESKILL
	scale 0.15
	States {
		Spawn:
			GSTC A 1
			Stop
	}
}

ACTOR GlowStickReturn : Ammo {
	Inventory.PickupMessage "Picked up dummy inventory that keeps track of how many glowsticks player has took from a box..."
	Inventory.Amount 1
	Inventory.MaxAmount 12
	Ammo.BackpackAmount 0
	Ammo.BackpackMaxAmount 12
	+INVENTORY.IGNORESKILL
	States {
		Spawn:
			CLIP A 1
			Stop
	}
}


actor GlowStickBox : CustomInventory 31102
{
	Inventory.PickupMessage "Picked up a box of glowsticks."
	Inventory.PickupSound "weapons/glowstick_pick"
	scale 0.35
	+INVENTORY.IGNORESKILL
	States
	{
		Spawn:
			GBOX A -1
			loop
		Pickup:
			TNT1 A 0
			TNT1 A 0 A_JumpIfInventory("GlowSticks", 12, "Full")

		Picking:
			TNT1 A 0 A_JumpIfInventory("GlowSticks", 12, "Finish")			
			TNT1 A 0 A_GiveInventory("GlowStick", 1)
			TNT1 A 0 A_GiveInventory("GlowStickReturn", 1)
			loop
		Finish:
			TNT1 A 0 A_JumpIfInventory("GlowStickReturn", 12, "Complete")
			TNT1 A 0 A_SpawnItemEx("GlowStick", 0, 0, 0, random(-1, 1), random(-1, 1), random(1, 2))
			TNT1 A 0 A_GiveInventory("GlowStickReturn", 1)
			loop			
		Complete:
			TNT1 A 0 A_TakeInventory("GlowStickReturn", 12)
			stop

		Full:
			TNT1 A 0
			fail
	}
}

ACTOR GlowstickLife : Ammo {
	Inventory.PickupMessage "Picked up a 1/35th of a second for life of glowstick... apparently time can be harvested and sold!"
	Inventory.Amount 0
	Inventory.MaxAmount 10000 //7350 original
	Ammo.BackpackAmount 10000 //Restore the glowstick for new map :)
	Ammo.BackpackMaxAmount 10000
	+INVENTORY.IGNORESKILL
	States {
		Spawn:
			CLIP A 1
			Stop
	}
}