function GetRandomSongNames( num )
	local s = "";
	for i = 1,num do
		local song = SONGMAN:GetRandomSong();
		if song then s = s .. song:GetDisplayFullTitle() .. "\n" end
	end
	return s
end

function GetStepChartFacts()
	local s = "";
	local single = GAMEMAN:StepsTypeToLocalizedString(STEPS_TYPE_DANCE_SINGLE)
	local double = GAMEMAN:StepsTypeToLocalizedString(STEPS_TYPE_DANCE_DOUBLE)
	local beginner = DifficultyToLocalizedString(DIFFICULTY_BEGINNER)
	local easy = DifficultyToLocalizedString(DIFFICULTY_EASY)
	local medium = DifficultyToLocalizedString(DIFFICULTY_MEDIUM)
	local hard = DifficultyToLocalizedString(DIFFICULTY_HARD)
	local challenge = DifficultyToLocalizedString(DIFFICULTY_CHALLENGE)
	
	s = s .. "In The Groove:\n"
	s = s .. "  71 "..single.." "..easy.."\n"
	s = s .. "  71 "..single.." "..medium.."\n"
	s = s .. "  71 "..single.." "..hard.."\n"
	s = s .. "  52 "..single.." "..challenge.."\n"
	s = s .. "  71 "..double.." "..easy.."\n"
	s = s .. "  71 "..double.." "..medium.."\n"
	s = s .. "  71 "..double.." "..hard.."\n"
	s = s .. "  59 "..double.." "..challenge.."\n"
	s = s .. "In The Groove 2:\n"
	s = s .. "  61 "..single.." "..beginner.."\n"
	s = s .. "  61 "..single.." "..easy.."\n"
	s = s .. "  61 "..single.." "..medium.."\n"
	s = s .. "  61 "..single.." "..hard.."\n"
	s = s .. "  49 "..single.." "..challenge.."\n"
	s = s .. "  61 "..double.." "..easy.."\n"
	s = s .. "  61 "..double.." "..medium.."\n"
	s = s .. "  61 "..double.." "..hard.."\n"
	s = s .. "  52 "..double.." "..challenge
	return s
end

function GetRandomCourseNames( num )
	local s = "";
	for i = 1,num do
		local course = SONGMAN:GetRandomCourse();
		if course then s = s .. course:GetDisplayFullTitle() .. "\n" end
	end
	return s
end

function GetModifierNames( num )
	local mods = {
		"1x","1.5x","2x","2.5x","3x","4x","5x","6x","8x","c300","c450",
		"Boost","Brake","Wave","Expand","Boomerang",
		"Drunk","Dizzy","Mini","Tiny","Flip","Invert","Tornado","Tipsy","Bumpy","Beat",
		"Hidden","Sudden","Stealth",
		"Reverse","Split","Alternate","Cross","Centered","Dark","Blind","Cover",
		"Mirror","Left","Right","Shuffle","SuperShuffle","NoHolds","NoRolls","NoMines","Little","Wide","Big","Quick","Skippy","Mines","Echo","Stomp","Planted","Floored","Twister","NoJumps","NoHands","NoQuads","NoStretch",
		"Overhead","Distant","Hallway","Space","Incoming"
	}
	mods = tableshuffle( mods )
	local s = "";
	for i = 1,math.min(num,table.getn(mods)) do
		s = s .. LocalizeOptionItem(mods[i]) .. "\n"
	end
	return s
end

function GetGameplayProgressMeterWidth()
	return 400
end

function GetPaneX( player )
	if GAMESTATE:PlayerUsingBothSides() then
		return SCREEN_CENTER_X
	end
	
	if player == PLAYER_1 then
		return SCREEN_CENTER_X-152
	else
		return SCREEN_CENTER_X+152
	end
end

function EvalOffsetX(pn)
	local x = 0
	if pn == PLAYER_1 then
		x = WideScale( 0, -25 )
	else
		x = WideScale( 0, 25 )
	end

	if not GAMESTATE:PlayerUsingBothSides() then return x end

	local Offset = 147
	if GAMESTATE:GetMasterPlayerNumber() == PLAYER_2 then Offset = Offset * -1 end
	return x + Offset;
end

function EvalTweenDistance()
	local Distance = SCREEN_WIDTH/2
	if GAMESTATE:PlayerUsingBothSides() then Distance = Distance * 2 end
	return Distance
end

function GameplayStageZoom()
	return 0.25
end