Complete Course Template

[[ Header Content ]]
-- Header Content is any course-defining data, such as the title, banner,
-- and other parameters.

#COURSE:My Course!;
--	The title of the course.

#COURSETRANSLIT:My Course, Translated!;
--	The title of the course, transliterated into english.

#REPEAT:YES;
--	If this is present, the course does not end.
--	Useful for endless & workout courses.

#LIVES:4;
--	The maximum(?) number of lives attainable in the course. Enabling this will
--	automatically force your course into an Oni course.

#BANNER:My Banner.png;
--	A banner for your course.

#BACKGROUND:My Background.png;
--	A background for your course. Currently only available in SM5 and sm-ssc.

#STYLE:SINGLE,VERSUS;
--	Denote which styles may be played on this course. This is useful for
--	cloning courses for doubles and single styles.

#METER:Beginner:3;
--	A custom-set meter for that course difficulty. You may set the difficulty
--	for Beginner, Easy, Medium, Hard, Challenge and Edit difficulties.

[[ Song Content ]]
-- Song Content makes up the entries in the course,
-- and also allows for timed modifiers.

-- Modifiers can be assigned in a variety of formats, the most effective three being the following:

1.) Repeated Modifier Block w/ Length:
#MODS:TIME:0.500:LEN:0.500:MODS:2x;
#MODS:TIME:1.500:LEN:0.500:MODS:0.5x;

2.) Nested Modifier Block w/ Length:
#MODS:
	TIME:0.500:LEN:0.500:MODS:2x;
	TIME:1.500:LEN:0.500:MODS:0.5x;

3.) Nested Modifier Block w/ Ends:
#MODS:
	TIME:0.500:END:1.000:MODS:2x;
	TIME:1.500:END:1.500:MODS:0.5x;

#GAINSECONDS:60.5;
--	The number of seconds gained before starting a song. This and #LIVES are
--	mutually exclusive: you can either have one, the other, or none: both
--	is not possible. This is meant to be used for Survival courses.

#SONG:*:Medium:2x;
-- #SONG can take quite a variety of parameters, of which may be useful to you
-- for testing or other purposes.
-- * is a wildcard item, meaning that StepMania will always pick a random song
-- for this part of the course.
-- You can also replace with BEST*,WORST*,GRADEBEST*, or GRADEWORST*, where * 
-- is a number to retrive the first of each category above.
#SONG:BEST1:Medium:2x;
-- As well as that, you may also do Group Random, like such:
#SONG:Dance Dance Revolution 8th Mix/*:Medium:2x;
-- If the above is not applicable, StepMania will search for the song title as best it can, depending on what you give it:
#SONG:Xepher:Medium:2x;
-- Will simply search the title of the song.
#SONG:DDR Supernova/Xepher:Medium:2x;
-- Will search for the exact directory.

-- #SONG can also apply different effects on each entry in the course by adding
-- special modifiers to the modifiers segment:
#SONG:*:Medium:showcourse;
-- For example, forces the course to never be hidden, noshowcourse being the
-- reverse of such.

-- nodifficult also exists to disable a player from changing difficulties, 
-- barring the player from making it easier or harder ( Gauntlets & Survivals
-- do not allow you to change difficulties ).

-- Finally, award*, where * is a number, allows you to control how many lives
-- the player gains from successfully completing a course in Oni mode.



#SONGSELECT:GROUP=Stepmania 5:BPMRANGE=120-160:Difficulty=Medium:MODS=2x;
-- #SONGSELECT is a new alternative to the #SONG tag, which will (hopefully)
-- be easier to use and understand. Instead of relying on values input in a
-- very specific and poorly-documented order, this tag is composed of 
-- a series of PARAM=VALUE statements, separated by :'s. 

-- The following parameters are available for selecting a song:
-- TITLE, GROUP, ARTIST, GENRE, DIFFICULTY, METER, BPMRANGE, DURATION, SORT
-- These can be used in any combination and order.
-- If none are specified, then a song and difficulty will be chosen completely at random.
-- If a combination is specified that results in no possible songs to select,
-- then that #SONGSELECT entry is skipped.

-- Parameter Desciptions:
--  TITLE= A list of one or more song titles, separated by commas.
--  Notes: 
--  - The "title" here can be either the name of the song directory,
--    the #TITLE, or the #TITLETRANSLIT.
--  - Titles must be an *exact match*.
--  - Unlike the #SONG tag, this will not take into account group names.
--    If you want to specify a specific song from a specific group, use
--    this along with the GROUP parameter.
--  - Commas, and other control characters (`#`,`;`, `=`, and `:`) can be used, 
--    but they must be escaped (like `\#`, `\,`, etc).
--  Example: 
#SONGSELECT:TITLE=Goin' Under,Springtime;  
#SONGSELECT:TITLE=thank u\, next;

--  GROUP= A list of one or more song groups, separated by commas.
--  Notes:
--  - The "group" refers to the directory name of the song group.
--  - Group names must be an *exact match*.
--  - Commas, and other control characters (`#`,`;`, `=`, and `:`) can be used, 
--    but they must be escaped (like `\#`, `\,`, etc).
--  Example: 
#SONGSELECT:GROUP=Stepmania 5,In The Groove;
  
--  ARTIST= A list of one or more artist names, separated by commas.
--  Notes:
--  - The "artist" refers to either the #ARTIST or #ARTISTTRANSLIT value
--    of the simfile.
--  - Commas, and other control characters (`#`,`;`, `=`, and `:`) can be used, 
--    but they must be escaped (like `\#`, `\,`, etc).
-- Example:
#SONGSELECT:ARTIST=Kommisar,NegaRen;

--  GENRE= A list of one or more song genres, separated by commas.
--  Notes:
--  - The "genre" refers to the #GENRE tag of a song.
--  - Commas, and other control characters (`#`,`;`, `=`, and `:`) can be used, 
--    but they must be escaped (like `\#`, `\,`, etc).
--  - Most songs don't actually have a #GENRE defined, which unfortunately
--    makes this parameter not terribly useful at this time.
-- Example:
#SONGSELECT:GENRE=J-Pop,Black Metal;

--  DIFFICULTY= A list of one or more difficulties, separated by commas.
--  Notes:
--  - There are a number of acceptable values for this, but for the sake
--    of consistency, please try to use:
--    Beginner,Easy,Medium,Hard,Challenge,Edit
--    (if you really want to use whacky value names, you can find the rest
--     defined in Diffiulty.cpp)
--  Example:
#SONGSELECT:DIFFICULTY=Medium,Hard;

--  METER= A minimum and maximum value of a song's difficulty meter,
--  separated by a dash `-`.
--  Notes:
--  - This is independent of the DIFFICULTY parameter, which can be used
--    along with METER to further refine a specific song hardness.
--  - If DIFFICULTY is not specified, then any difficulty may be picked from
--    a song that matches the given range.
--  - These values must be whole numbers.
--  - These values are inclusive, meaning that song with a meter that is exactly
--    the value of minimum or maximum can be chosen.
--  Example:
#SONGSELECT:METER=8-12;

--  BPMRANGE= A minimum and maximum value of a song's bpm, 
--  separated by a dash `-`.
--  Notes:
--  - The "bpm" values refer to the displayed bpm value/range of a song.
--    This means that a song may be chosen if its #DISPLAYBPM matches the 
      given range, even though it's true bpm might not.
--  - These values should only whole numbers (no decimal places).
--  - If a song has a displayed bpm range, both the min and max values must
--    be within the specified range.
--  - This range is inclusive, meaning that a song with a bpm that is exactly
--    the value of the lower or upper range can also be chosen. 
--  - This also means that if you want to choose songs of a very specific bpm,
--    like songs that are exactly 120 bpm, you can specify BPMRANGE=120-120
-- Example:
#SONGSELECT:BPMRANGE=120-150;

--  DURATION= A minimum and maximum value, in seconds, for the length of a song,
--  separated by a dash `-`.
--  Notes:
--  - The "duration" values refers to either the song file's actual length, or
--    The simfile's #MUSICLENGTH value, if specified.
--  - These values should only be whole numbers (no decimal places).
--  - This range is inclusive.
--  Example:
#SONGSELECT:DURATION=90-125;

--  SORT= A set of two values that specify a sort type and a number, separated
--  by a comma. For example, SORT=MostPlays,1 selects the #1 most played song on
--  the machine, SORT=LowestGrades,10 selects the song that you've gotten your 10th
--  worst score on.
--  One possible use for this would be to create a course to force you to play songs 
--  from certain groups that you likely haven't played before, by combining this with
--  the GROUP parameter, eg "#SONGSELECT:GROUP=In the Groove:SORT=FewestPlays,1;"
--  
--  Notes:
--  - Like DIFFICULTY, there are several acceptable values that are equivalent to each other.
--    The old style values are Best, Worst, GradeBest, or GradeWorst. 
--    For the sake of consistency and clarity, please consider using:
--    MostPlays, FewestPlays, TopGrades, or LowestGrades.
--  - The number value can be between 1 and 500.
--  - As of right now, the results from using this parameter aren't exactly accurate.
--    I can't quite work out how/why it makes the choices that it does.
-- Example:
#SONGSELECT:SORT=MostPlays,4;

-- Besides the selection parameters, there are a few more parameters added to make sure that
-- this can be a complete replacement for the #SONG tag.
-- These parameters are:
-- MODS, GAINSECONDS, GAINLIVES

--  MODS= A list of modifiers that are applied to the entire song.
--  Notes:
--  - This does *NOT* replace the #MODS tag for specifying timed mods/attacks.
--  - At ths time, I don't actually know what all can be specified as a modifier.

--  GAINSECONDS= The number of seconds gained before starting a song.
--  This is exactly the same as if specifying the #GAINSECONDS tag.

--  GAINLIVES= The number of lives gained for completing this song. 
--  This is equivalent to the 'award*' modifier for #SONG. 

Finally, here's an example course:

#COURSE:My Awesome Course - The Revenge;
#METER:Medium:8;

#MODS:
	TIME:1.00:END:50.00:MODS:C150;
#SONGSELECT:GROUP=Stepmania 5:MODS=Overhead;
#SONGSELECT:ARTIST=Kommisar:MODS=2x;
#SONGSELECT:GROUP=In The Groove:TITLE=Mouth;
#SONGSELECT:BPMRANGE=110-160:DIFFICULTY=Medium;
