New Modifiers
	-drunk
		-drunkspeed
		-drunkoffset (-100 on drunk or tipsy offset causes the whole thing to be in phase, it's also possible to get it to stop moving with these)
		-drunkperiod (change the period of the oscillations of drunk)
	-tandrunk (Drunk operates on a tan wave instead of a sine wave, holds periodically tend to infinity. Targets also warp around.)
		-tandrunkspeed
		-tandrunkoffset
		-tandrunkperiod (change the period of the oscillations of tangent drunk)
	-tipsy
		-tipsyspeed
		-tipsyoffset
	-tantipsy
		-tantipsyspeed
		-tantipsyoffset
		
	-beat (changed since regular 3.95/ITG such that bpms over 300 don't ruin the beat)
		-beatoffset (move the timing of the beat mod, add 50% beat offset to move the beat to be on 8ths)
		-beatperiod (waveform length of the beat mod at peak wave amplitude)
		-beatmult (multiplies the bpm of the song that beat is responding to)
	-beaty
	-beatz (see the above for the modifiers)
		
	regarding offsets
		-100 on drunk or tipsy offset causes the whole thing to be in phase, it's also possible to get it to stop moving with these
		
	-zigzag (a triangle wave. Similar to drunk, but with straight lines.)
		-zigzagperiod (alter the period of the wave. At 2x, 0% zigzagperiod makes 4ths and 8ths alternate, -50% makes [4ths+8ths] alternate with 16ths)
			100% will double the period
		-zigzagoffset (do we want to move the zigzag along?)
	
	-sawtooth (similar to zigzag, but with a sawtooth wave)
		-sawtoothperiod (alter the period of wave. At 2x, 0% sawtoothperiod makes 4ths and 8ths alternate, -50% makes [4ths+8ths] alternate with 16ths)
			100% will double the period
	
	-parabolax (generic wave for aiding in drawing stuff)
	-parabolay (generic wave for aiding in drawing stuff)
	-parabolaz (generic wave for aiding in drawing stuff)
	
	-wave (unchanged)
		-waveperiod (affects the waveform)
	
	-sawtoothz
		-sawtoothzperiod
	-zigzagz
		-zigzagzperiod
		-zigzagzoffset
			(this is the same as the x variations but in the z axis
				fov on the playfields is not so you need to use bigger values)
	
	-tornado
		-tornadoperiod (control the helix length)
		-tornadooffset (control how far into the tornado the receptors are)
	-tantornado (this is exactly as stupid as it sounds)
		-tantornadoperiod
		-tantornadooffset
			(both of the above offsets will move the receptors)
			
	-spiralx (highly experimental, and stupid)
	-spiralxperiod (highly experimental, and stupid)
	-spiraly (highly experimental, and stupid)
	-spiralyperiod (highly experimental, and stupid)
		Spiral is readable at 150 spiralx/y -99 spiralperiodx/y
	
	-hidden,sudden,hiddenoffset,suddenoffset,stealth and blink for each color (red, green, blue)
		(use these the same way stealth is used, but to hide hues
	
	-confusion (as in SM5, rotate the receptors (and by extension, the arrows too) - use negative dizzy to counteract the spinning...)
		-confusionoffset (rotate the notes and targets by an amount, and just leave them there)
	
	-bounce (notes travel in a rectified sine wave towards the receptors)
	-square (notes travel in a square wave pattern towards the receptors)
		-period and offset as seen above will apply to both of these functions
	-digital (sine wave with variable stepping)
		-digitalsteps (control the resolution (number of stopping points) of the digital)
		-digitalperiod
		-digitaloffset
	
	z versions of bounce, square and digital
	
	-stealthglowred/green/blue (alter the color that stealth glows to before fading)
	
	-ActorProxy
		Copies an actor on the topScreen
		self:SetTarget('PlayerP1') <- now we have a copy of the playfield of P1
		
	-bumpy
		-bumpyperiod
		-bumpyoffset
	-tanbumpy
		-tanbumpyperiod
		-tanbumpyoffset
		
	-attenuatex
	-attenuatey
	-attenuatez
		(these function the same way that parabola does, but is based on the distance from the center to determine the parabola direction)
	
	-movex0-n
	-movey0-n
	-movez0-n
		(move any column anywhere!)
		(example: 100% move1 moves the down column one column to the right)
	-movex/y/z (shortcut to move the whole playfield in one direction)
	
	-tiny (doesn't affect the targets' positioning)
	
	-pulseinner (inner size of the pulse - might remove, as this is basically just additive tiny?)
	-pulseouter (outer size of the pulse)
		-pulseperiod (controls how big the wave is)
		-pulseoffset (controls how far into the wave "0" is)
	-pulse (controls both inner and outer pulse at the same time)
		(*2.25 210000000 pulseoffset is interesting at 140bpm)
	
	-shrinklinear
	-shrinkmult
		(this goes well with attenuatex)
	
	-confusiony/x (see confusion)
		-confusiony/xoffset (see confusionoffset)
	
	-dizzyholds (if this value is non zero, dizzy hold heads are enabled)
	
	-arbitrary translations
		(for exampe, -100% translatex0, 50% translatexoffset0 will make it so that there is a jump of 1 column to the left, half way up the screen)
		(the first translation with a value of 0 and an offset of 0 will terminate the chain, meaning they need to be done in order)
		(up to 1024 translations in each axis can be placed anywhere on the playfield. The terminator is important for stopping the (BIG) loops.)
	
	-arbitrary pathing!
		format is "spline%dx%d"
		This can be used to make specific beats in specific columns have the arrows move in specific directions.
			-100% in the y direction will make the arrows stay stationary in the y axis
			because for every pixel the arrows travel up, they travel down the same distance
			-combine this mod with drawsize as this can cut some size off the playfields
			
				--this will make a right turn protrude out of the playfield, on the left most column (spline 0)
				------
				--30% of the way down the screen from the receptors, arrows turn right
				--60% of the way down, they return to the usual direction (downwards) but will be off center to the left
				--90% of the way down, arrows turn left
				--120% of the way down, the arrows return to the proper direction.
				--Since the same amount of distance has been travelled both left and right, the original path is rejoined.
				
				{4,2000,'*10000 -100 spline0x0','end'},
				{4,2000,'*10000 30 spline0xoffset0','end'},
				{4,2000,'*10000 100 spline0x1','end'},
				{4,2000,'*10000 60 spline0xoffset1','end'},
				{4,2000,'*10000 100 spline0x2','end'},
				{4,2000,'*10000 90 spline0xoffset2','end'},
				{4,2000,'*10000 -100 spline0x3','end'},
				{4,2000,'*10000 120 spline0xoffset3','end'},
				
				{4,2000,'*10000 -100 spline0y0','end'},
				{4,2000,'*10000 30 spline0yoffset0','end'},
				{4,2000,'*10000 100 spline0y1','end'},
				{4,2000,'*10000 60 spline0yoffset1','end'},
				{4,2000,'*10000 100 spline0y2','end'},
				{4,2000,'*10000 90 spline0yoffset2','end'},
				{4,2000,'*10000 -100 spline0y3','end'},
				{4,2000,'*10000 120 spline0yoffset3','end'},
		
		--it is encouraged to work with different percentages to create different angles.
		
	-grain (for controlling how many polygons the holds are made up of. 100% very fine, 1600% is very coarse.)
		(if the value is 0%, the default (4) pixels is used)
	
	-spiralholds (!!!!! activate with spiralholds mod, this controls the way holds are drawn. Most mods are unchanged,
		but some mods that have significant effects on the y axis will be altered. Boomerang will draw holds on he way down,
		and spirals will render properly. This is experimental, and it's not recommended you leave it on.)
		This mod is also called by "holdtype"
		
	-stealthtype
		set the same way as holdtype - makes it so that the stealth is based on musical distance from the receptors
		rather than physical onscreen distance.
	
	-drawsize (scales how far down the arrows stop drawing - 100% doubles the size of the playfield, -100% is no draw)
	

	
									
									------some cool mods------
									
									-------------------------------------------
									-----wind tunnel mod by TaroNuke
									--this is fucking awesome
										{0,2000,'*1000 1.25x','end'},
											--slow it down
										{0,2000,'*1000 150 spiralx','end'},
										{0,2000,'*1000 -96 spiralxperiod','end'},
										{0,2000,'*1000 150 spiraly','end'},
										{0,2000,'*1000 -96 spiralyperiod','end'},
											--control the spiral
										{0,2000,'*1000 50 centered','end'},
										{0,2000,'*1000 100 mini','end'},
											--position and size
										{0,2000,'*1000 spiralholds','end'},
											--enable spiral holds
										{0,2000,'*1000 -100 tiny','end'},
										{0,2000,'*1000 -20 flip','end'},
											--make everything a bit bigger and more visible
										{0,2000,'*1000 3000 zigzagz','end'},
										{0,2000,'*1000 1000 zigzagzperiod','end'},
											--cause the arrows to fall towards the targets from the z axis
										
										{0,2000,'*1000 -300 movez','end'},
											--move everything away from the camera
											
									
									-------------------------------------------
									-----using the offsetters to create a small readable area by the targets
										
										{0,2000,'*1000 1.25x','end'},
										{0,2000,'*1000 200 spiralx','end'},
										{0,2000,'*1000 -95 spiralxperiod','end'},
										{0,2000,'*1000 200 spiraly','end'},
										{0,2000,'*1000 -95 spiralyperiod','end'},
										{0,2000,'*1000 50 centered','end'},
										{0,2000,'*1000 100 mini','end'},
										{0,2000,'*1000 spiralholds','end'},
										{0,2000,'*1000 -100 tiny','end'},
										{0,2000,'*1000 -20 flip','end'},
										{4,2000,'*0.1 50 brake','end'},
											--slow it down in the mercy gap
											
										----outside the table----
										for i=0,10 do
											table.insert(mods,{0,2000,'*1000 15 translatey'..i,'end'})
											table.insert(mods,{0,2000,'*1000 '..(1+(i/2))..' translateyoffset'..i,'end'})
										end
								
									-----------------------------------------------
									-----offset the spiralx and y periods for FUNKY shit
										-- -96 spiralyperiod, -97 spiralxperiod = a weird planetarium