Advanced rhythm game for Windows, Linux and OS X. Designed for both home and arcade use.
StepMania 5.0.8; release notes compiled and Markdown formatted by @kyzentun:
Items are roughly grouped into the general part of StepMania they fit into.
Cmake is now the only method supported for compiling Stepmania. Read Build/README.md for instructions.
Some Linux users may need to pass -DWITH_LIBVA=ON
and/or -DWITH_CRYSTALHD_DISABLED=ON
to cmake when compiling.
There is a binary package for Linux which was built on amd64 debian. If it doesn't work, compile from the source instead.
Entries in service menu rearranged to hopefully organize them better.
Test Input
, Input Options
, and Calibrate Machine Sync
are now under Input Options
.
Appearance Options
, Set BG Fit Mode
, and UI Options
are now under Display Options
.
Allow Multiple Toasties
preference controls whether it is played
multiple times.ScreenOptionsInputSub and ScreenOptionsDisplaySub added. Updating a theme to show the options for the new screens should be a simple matter of changing the LineNames entry for ScreenOptionsService to include "InputOptions" and "SoundGraphics".
Added handling for diffuse to make rainbow and related effects work.
Stream, Voltage, Air, Freeze, and Chaos are no longer capped at 1. Stream and Voltage no longer count hold heads twice. RadarCategory_Notes added, which counts all notes.
The NoteField board is now underneath everything except the backgound. This means underneath any custom actors on the underlay or overlay or decoration layers, and also underneath the combo/judgment even when the ComboUnderField metric is true.
The parameter table broadcast with this message has changed it is now as follows:
{
PlayerNumber= pn, -- the player number of the player that earned the
toasty
ToastyCombo= number, -- the current number of W2/W1 in a row the player has
Level= number, -- the number of toasties earned in a row
}
Adding the Level parameter allows the themer to easily set off a different
effect based on how long the player has gone without breaking their toasty
combo.
See Docs/Themerdocs/Examples/Example_Actors/Toasty.lua
for an example of
BGAnimations/ScreenGameplay toasty.lua
that uses these parameters.
The Gameplay::ToastyTriggersAt metric can be a function now, or a number.
If the metric is a function, the function is passed the player number, and the player's current
toasty level, and the number it returns is the number of additional steps to
earn the next toasty.
If the metric is a number, it is the number of additional steps to
earn the next toasty.
This means that ToastyTriggersAt=250
and
ToastyTriggersAt=function(pn, level) return 250 end
have the same
effect: Toasties will be awared at 250, 500, 750, and so on.
The Gameplay::ToastyMinTNS metric has been added for controlling the minimum TapNoteScore needed to maintain toasty combo.
A converter has been added that takes care of the simple grunt work of converting an xml bg/fg file to lua for
SM5. Read Docs/Themerdocs/XmlToLua.txt
for details.
A toasty is a special award for achieving a certain number of W2 or W1 steps
in a row. In the default theme, this is 250 steps in a row, and W2 is known
as Perfect, and W1 is called Flawless. The number of toasties earned is
stored in the profile. Some themes show a special animation and play a
sound when a toasty is earned.
The current toasty combo is the progress towards this goal. Each note on a
row counts as one point in the toasty combo, thus jumps are two, and hands
are 3 or more.
Hitting a step with a judgment worse than W2 breaks the toasty combo,
resetting it to 0.
For many years, achieving 250 W2/W1 in a row, then 1 W3, then 250 more W2/W1
in a row would increment the toasty counter in the profile by 2, but only show the animation once. Earning 500 W2/W1 in a row was still only 1 toasty.
This behavior has been changed so that 500 W2/W1 in a row will increment the
toasty counter twice, and show the animation twice.
StepMania 5.0.7; release notes compiled and Markdown formatted by @kyzentun:
Items are roughly grouped into the general part of StepMania they fit into.
Simfile loading and caching has been changed internally to speed up loading
time. If you're using an SSD, or only have a few hundred songs, you probably
won't see any difference. People with large song collections who don't have
SSDs should be able to measure the difference.
Most of the changes are aimed at making StepMania read song data from the
cache and not look in the song folder until gameplay if the cache file
exists. To take full advantage of this, you should have the Fast Load
preferences set to true.
There are new things to help simfile authors deal with cases where the cache
file is out of date.
Because this release bumps the cache version, the first time you start up it will
rebuild the cache, which takes some time.
Pressing Ctrl+Shift+R on Select Music will reload the currently selected song from its song folder, updating any cached information.
The NeverCacheList preference has been added to Preferences.ini. You can use
it to set song group folders that should never be cached. The preference is
set to a comma separated list of group names. Because it disables the cache
for the songs in the groups listed, it should only be used sparingly, the
cache is important for loading quickly.
Example: NeverCacheList=work_in_progress,abandoned_in_progress
This will cause the songs in the work_in_progress
and abandoned_in_progress
groups to never be cached.
Pressing Ctrl+Backspace on the Select Music screen will prompt you to
permanently delete the currently selected song.
The Allow Song Deletion preference must be turned on in the Advanced Options section of the service menu for this to be enabled.
EditClearPromptThreshold
notes, you will be prompted. It's a preference
that is settable in the Advanced Options section or in the Options in Edit
Mode. Setting it to -1
means it will always prompt, setting it to 1000000
will make it never prompt.MUSIC
tag, pointing to a music file
to use instead of the normal song music. This does not change the logic for
when the song ends in gameplay. The time of the last step of any chart is
still used as the time to end the song in gameplay, so if you use per-chart
music, make sure your music is the same length.PREVIEW
tag which tells StepMania to use a specific file
for the preview instead of the song music file. When you set the preview tag, the length of the named file will be used to set the sample length. After that, the sample length can be adjusted as normal. The sample start is forced to 0 when the preview tag is used.HarshHotLifePenalty
is false, then the penalty is used instead
of 0.1.This only affects people building from source. StepMania has moved to using CMake as the primary system for generating project files. This saves us the trouble of keeping several different project files updated. Read Build/README.md for instructions on using CMake to build.
To make life slightly easier for translators, a language changelog has been added in Docs/Changelog_language.txt.
RemoveChild
and RemoveAllChildren
Lua functions to delete the
children instead of leaking memory.foreach_ordered
lua function now works on tables that have both number
and string keys. Number keys are iterated over first.GetPath
nil
.GetPreviewMusicPath
ReloadFromSongDir
There have been some changes to file loading to speed up startup time, and autosave has been added to edit mode. With those two additions affecting critical features, it is possible that some detail was missed (maybe a particular rare tag in simfiles doesn't work anymore, or maybe files aren't saved or loaded correctly)
Thus, this release candidate build is so that people can test things on non-critical systems to make sure simfiles that worked fine in 5.0.6 also work fine with the changed loader. (non-critical systems just means don't go stick it on an arcade machine where someone might get pissed if a song doesn't load or there's a crash) If you encounter any problems related to song loading or saving with this build post on the forum or submit an issue with as much info as you have. If it's a particular song that doesn't load right, that simfile will probably be needed to solve the problem.
If there are no serious bugs in this build, the next release will be in 3 weeks (April 1st), along with any changes that occur between now and then. Work on improving startup time is still ongoing.
Because this release includes a cache version bump, the first time you load will take much longer than normal because it has to rebuild the song cache. After that, it should be measurably faster. People using SSDs or on modern hardware or with small song collections might not be able to see any difference in loading time.
Now for the notes on the other changes from the last few weeks:
Items are roughly grouped into the general part of StepMania they fit into.
EditClearPromptThreshold
notes, you will be prompted. It's a preference
that is settable in the Advanced Options section or in the Options in Edit
Mode. Setting it to -1
means it will always prompt, setting it to 1000000
will make it never prompt.MUSIC
tag, pointing to a music file
to use instead of the normal song music. This does not change the logic for
when the song ends in gameplay. The time of the last step of any chart is
still used as the time to end the song in gameplay, so if you use per-chart
music, make sure your music is the same length.PREVIEW
tag which tells Stepmania to use a specific file
for the preview instead of the song music file. The preview length should
be read from the preview music file, so cut it right.HarshHotLifePenalty
is false, then the penalty is used instead
of 0.1.RemoveChild
and RemoveAllChildren
Lua functions to delete the
children instead of leaking memory.foreach_ordered
lua function now works on tables that have both number
and string keys. Number keys are iterated over first.nil
.GetPreviewMusicPath
@kyzentun made a mistake when fixing a crash bug the night before release that broke bpm editing. This fixes that mistake.
Also, if you didn't see 5.0.5, you should read the release notes for it. https://github.com/stepmania/stepmania/releases/tag/v5.0.5
StepMania 5.0.5; release notes compiled and Markdown formatted by @kyzentun:
Items are roughly grouped into the general part of Stepmania they fit into.
Internal mechanism changed again, set the preference to what you want again and report if it doesn't stick. (side note: It's stored in the DefaultModifiers preference, which is different for every game mode, so you'll have to set it for every game mode you play)
This preference controls the tap note score you must get on a note for it to disappear. Normally, any note that you score great or better on disappears, and the rest stay visible. Change this preference to miss, and even notes you miss will disappear. Change it to checkpoint, and not even fantastic will make a note disappear.
There is also a modifier for this, to allow players to have different settings if the theme provides a way to set the modifier.
A bunch of useful preferences weren't settable through the service menu. InputDebounceTime was added to the Input Options section. The rest in the list were added to the Arcade Options section. They might not show up in custom themes that change the service menu. They all have help text explaining them, so visit them on the options screen.
Profiles can be merged together now, to import scores from an old profile into a new one. Merging does not delete the old profile, you must do that step separately.
When merging a local profile into the machine profile, you can choose to skip merging the totals (step count, songs played, and similar)
Guest and Test profile types added. All existing and new profiles are Normal.
If a profile is changed to Guest through the profile management screen, it will always show at the top of the list. A profile set to Test will always be at the bottom of the list. Profiles can be moved around in the list.
Start, MenuLeft, MenuRight, and Operator keys must be mapped.
The debug menu now has a menu option for resetting the key mapping to the default. Hold F3 and press P and your current keymap will be wiped away.
This is for recovering from an unusuble keymap without needing to find and delete KeyMaps.ini.
The Select Style screen changed a bit internally to simplify adding new choices and make sure all game modes had the correct style choices available. This is only visible in default theme because the _fallback theme still uses the old system for backwards compatibility.
Player nameplates added with bpm info.
Dutch translation updated by Kevin O. (Thumbsy).
Spanish translation updated by Alejandro G. de la Muñoza.
Polish translation updated by Jarosław Pietras.
Japanese installer translation by hanubeki.
Partial French translation by Grégory Doche.
webm and wmv added to list of supported video formats.
Functions for new actor classes are not listed here, it is assumed that you will look at Lua.xml to see what is in them.
If a function is explained sufficiently by its entry in Docs/Luadoc/Lua.xml, it won't have a detailed entry.
All lua functions that didn't return something before now return the object they were called on.
Example: (yes I saw function chaining used in a certain gimmick noteskin)
-- old style:
self:zoom(.5)
self:xy(_screen.cx, _screen.h-60)
self:diffuse(color("#dc322f"))
-- new style:
self:zoom(.5):xy(_screen.cx, _screen.h-60):diffuse(color("#dc322f"))
CubicSplineN, NoteColumnRenderer, NoteField, and NCSplineHandler list their functions with underscore style names. Camelcase style aliases exist for all their functions, use whichever naming style you prefer.
Each column in the NoteField is an actor that can be fetched and manipulated.
The NoteField was just a normal(ish) ActorFrame before. Now it has all these functions and it's starting to get uppity. What is a callback anyway? It thinks we want it to call us back later when something happens?
Each property of the note column has its own spline handler, which allows the splines to behave differently and be controlled independently. Position, rotation, and zoom are the three things that can be controlled by splines.
(not actually an actor, but there aren't any other new non-actors to put it with)
This class provides an implementation of cubic splines. It's used by ActorMultiVertex and NoteColumnRenderer to control shape and note movement, but is also available in a standalone form for the rare case where you need a spline for something else.
strokecolor is in the tween state now, so it can be tweened.
ChoiceNames="lua,ScreenSelectStyleChoices()"
The lua command can then return a table of GameCommands which are used to create the choices.
{x, y, z}
, where x, y, and z are numbers and any that is not a number
defaults to 0.IconChoiceCactusOnCommand
and IconChoiceOnCommand
both exist, IconChoiceOnCommand
will be used.)
Example: # in metrics.ini
IconChoicePosFunction=choice_positions
-- In a file in Scripts/
function choice_positions(count)
local ret= {}
for i= 1, ret do ret[i]= {i*24, i*48} end
return ret
end
Pass true as the last arg if you want the data in tables instead of strings.
This occurs with some simfiles that have a malformed BGCHANGES line. Either the file doesn't exist in Stepmania/BGAnimations or the song folder, or the person who created the simfile put the wrong thing in the BGCHANGES line.
There are three possible solutions:
"Apple forced our hand with OS X 10.10" Edition (unofficial tagline)
StepMania 5 beta 4a is now available, primarily for those who have upgraded to Mac OS X 10.10, though there are bug fixes as well. Update notes copy/pasted from changelog and Markdown formatted by @freem.
StepMania 5 beta 4; release notes compiled by @kyzentun and Markdown formatted by @freem:
This is divided into three sections:
New Preferences:
In the default theme, speed mods are set in a new way. The first element on the speed mod row tells you what your speed mod is currently set to. Call this the status element. It's underlined by the player's color the same way any other option that is set is underlined. Next are elements for adjusting it up or down, in large or small increments. Last are elements for changing the mode of the speed mod. Hit start on an element to interact with it and change your speed mod by that increment or change the mode. The status element will update to tell you the new setting. If there are two players joined, there are two status elements. To change the sizes of the increments, go to the Advanced Options section of the Options in the default theme. "Speed Increment" adjusts the smaller increment that is used. "Speed Increment Large" adjusts the larger increment. 10 on this scale is equivalent to 0.1x on the XMod scale. This replaces the old system where a speed mod was selected from a small set to allow you to set any speed modifier you might want without needing to worry about whether it's in the theme's small list. SpeedMods.txt is no longer used by the default theme, though other themes can choose to support it. This change was made because editing SpeedMods.txt often resulted in people making mistakes or editing the wrong one, or not knowing it existed, or having to add too many options and ending up with an absurd number of choices to scroll through.
A profile customization screen now exists. This is for setting things like weight, birth year, and other calorie tracking stuff. If you're not using a theme that supports it, it's not relevant. Theme author instructions for adding support are in the Themer section.
To reach it, go to the Options screen from the main menu. Then go to Profiles. Pick the profile you want to customize. A menu will appear. Pick Edit. You'll see a menu of choices. Hit Start on a choice to change its value. The numpad should be self-explanatory.
This screen was added to allow setting the profile settings related to calculating how many calories were burned. Simply put, calculating calories purely off the number of steps hit and weight is inaccurate, so a new method for calculating off of heart rate, weight, age, gender and song duration was added. (shapesense's formula is the one that was used.)
VO2Max is optional, the internal code has a (less accurate) variant of the formula that is used if VO2Max is set to 0.
If you set the calorie calculation choice to use heart rate, then calories will not be added to the profile for every step. If the theme supports it, a screen for entering your heart rate will come up after gameplay and before evaluation. It will have a timer so you can measure your pulse and a numpad for entering the BPM of your heart. After you enter your heart rate, it'll be combined with the time to calculate the number of calories to add to the profile.
This is really more of a themer feature, but so many themes have errors in them that it's going to be widely seen. Errors in themes are now reported in dialog boxes and on screen much more than they previously were. (this is in addition to the Logs/log.txt reporting that has existed much longer) This means that if you use a theme with errors in it, you'll be interrupted by dialog boxes and text on the screen reporting the errors. There isn't a way to turn error reporting off, and there are no plans to add a way to turn it off. The solution is to use a theme that doesn't have errors, or fix them if a theme you made has errors. If you're a themer and you encounter an error you don't know how to fix, ask for help on the stepmania forums.
CMods adjust for song rate. Previously, if you used a rate mod, you'd have to pick a different CMod from normal to account for the rate. The CMod code now checks the song rate mod and adjusts appropriately. The same is true of MMods. Haste is not adjusted for because the sudden changes that can occur from haste would cause the arrows to jump disorientingly.
Lowercase and longer ranking names. The internal functions for storing ranking names were modified to allow mixed case and longer length. This only matters if the theme allows mixed case and/or longer length input.
New options have been added to the Alter menu.
Swap Up/Down swaps the Up/Down columns in the selected region. In double, this swaps Up and Down on both pads. In Pump, this swaps the front and back panels (UL is swapped with DL, UR is swapped with DR).
Arbitrary Remap provides a way to swap columns around arbitrarily. You will be prompted to enter a comma separated string of column numbers. After the remapping, each column will have a copy of the notes from the column number you entered. So entering "2, 1, 4, 3" will move down to left, left to down, right to up, and up to right. "1, 1, 1, 1" will copy the notes from left to every column.
Default theme's speed mod changed to 2x.
Background stretching has been a problem for a while, so now there's a preference for setting it. In the default theme, select "Set BG Fit Mode" from the Options menu to go to the screen for setting it. The screen will show the various choices, and how a background of each of the three common aspect ratios will be cut off by the screen edges. Some themes are known to override the internal lua functions that provide this feature, and it will not work in those themes.
A minor preference for having ITG's feature of accumulating a large combo across multiple songs. You'll have to find Save/Preferences.ini and set it to 1 in that file to enable it.
A minor preference to cover the rare case where an arcade machine needs a different debounce time for coin input. This must be set by editing Save/Preferences.ini. Specifically, this was added to cover a case where someone had a bill acceptor added to their machine that worked by sending multiple coin insert inputs very quickly.
Kind of an internal thing, but you'll have to re-set your Default Fail Type preference.
A minor preference for making note rendering faster. If you notice that your frame rate is low during very dense streams, you'll want to turn this on. It can be set in the Graphics/Sound section of the Options. The downside is that 3D notes will clip into each other instead of later notes being drawn on top of earlier notes.
A minor option for cabinets that only have Left, Right, and Start buttons. This can be set in the Input Options section. This forces the player options screen to have a down element for each row, so the cursor can no longer get stuck on rows that have multiple selections possible.
New stuff added to Docs/Themerdocs. Metrics are marked with [M]. Functions are marked with [F]. Attributes (things you set inside the lua file when creating the actor with Def.whatever) are marked with [A]. Bug fixes are marked with [B]. If a function is explained sufficiently by its entry in Docs/Luadoc/Lua.xml, it won't have a detailed entry.
A few examples of basic things and some advanced things now exist. Any questions for clarifying examples are welcome.
A new actor class for arbitrarily shaped actors. Detailed documentation is Docs/Themerdocs/ScreenAMVTest overlay.lua
A new actor class for displaying a log of messages. This is what Error Reporting uses internally for displaying the errors on screen, so if you want to have a log of something on screen in your theme, it's provided for general use. _fallback/Scripts/04 LogDisplay.lua discusses its customizable features in detail.
A new actor class for displaying an interactive numpad for entering a number. This is used by ScreenHeartEntry and ScreenOptionsCustomizeProfile for entering numbers, so you'll want to read up on it when working on those screens for your theme. _fallback/Scripts/04 NumPadEntry.lua discusses it in detail, and default/BGAnimations/ScreenHeartEntry overlay.lua has an example of it in use. (NumPadEntry.lua mentions an example that doesn't actually exist yet. It seemed superfluous to create an example after having such detail in the file already)
[F] GetChild, GetChildren improved Some themers may have known this already, some may not. If multiple actors inside an ActorFrame have the same name, GetChild would only return the first one, and GetChildren would only have one Actor by that name in the table it returns. This was particularly a problem when dealing with actors from the engine, where you can't control the name. GetChild and GetChildren were modified to return a table of all the actors by that name instead of just the single actor. The table does some fancy work to make old code that treats it as a single actor still work, but you probably want to update your code to take advantage of being able to access the individual actors anyway.
[A] Font (LoadFont obsoleted)
BitmapText will now automatically apply THEME:GetPathF to the Font attribute if it's not already the path to a valid font, so LoadFont is obsolete.
Example: Def.BitmapText{ Font= "Common Normal", Text= "Example" }
A namespace full of functions for advanced themers that want to reimplement the entire notefield in Lua. See Lua.xml for function list.
A class of functions for getting and setting the options (also called modifiers) for a player. This is a replacement for using GetPlayerOptionString/Array for fetching the player's options and a replacement for using ApplyGameCommand to set the player's options. It's intended to be used by scripted simfiles that want to use numbers instead of strings, and advanced themes that want to offer more powerful options screens. Lua.xml lists the functions and their usage. Themerdocs/modslevel.txt discusses which ModsLevel should be passed to PlayerState:GetPlayerOptions for the different uses.
Same as PlayerOptions, but for the song modifiers, like the music rate. Fetch with GAMESTATE:GetSongOptionsObject.
Minor class for storing the data passed in new JudgmentMessage parameters. Functions are listed in Lua.xml. Note that the TapNotes only exist for the duration of the song, so an data in them that is needed should be copied by calling their functions and storing what the functions return. This is for use by advanced themes that have some reason for tracking more judgment data than the engine tracks.
[M] AfterThemeChangeScreen, AfterGameChangeScreen, AfterGameAndThemeChangeScreen: Theme and game changing logic was changed a bit internally. These metrics are optional. When the theme or game changes, Stepmania will check the appropriate metric and load that screen after the change. If the metric is not set, the InitialScreen metric is used instead.
[F] GetCurrentStage: You probably have some kludgy way of detecting whether the current stage is Stage_Final somewhere in your theme because GetCurrentStage wasn't returning the right thing when on gameplay. That's been fixed, so you can use GetCurrentStage without worrying now.
[F] GetLastGameplayDuration: This is useful for implementing heart rate based calorie calculation support in your theme. Call this function on your ScreenHeartEntry to get the length of time to pass to Profile:CalculateCaloriesFromHeartRate.
Notes and Holds parameters: When a note is hit and the "Judgment" message is broadcast, it has two new parameters. Notes is a table of all the TapNotes on that row. Holds is a table of all the TapNotes that are holds on that row. This can be used to check more detailed judging data when handling the Judgment message. HoldNoteScore_MissedHold: HoldNoteScore_MissedHold is a new HoldNoteScore for when a hold is missed entirely because the player didn't hit the note at the start of the hold.
LifeType, DrainType, and BatteryLives used to be modifiers applied to the song, and both players were forced to use the same values. They have been moved to player options, so now they can be set to different values for each player.
The LifeMeterChanged message had a bug that causes LifeMeterChangedP1 to be broadcast for both players. This has been fixed so LifeMeterChangedP1 is broadcast for Player 1, and LifeMeterChangedP2 is broadcast for Player 2. The params table for LifeMeterChanged contains two values: Life for the value the life meter was changed to, and StepsSecond, for the time the change occurred.
[M] CourseSongRewardLives: Metric used to reward the player with battery lives after every song in a course. This metric must be set to a function. The function is passed the LifeMeterBattery for the player, and the PlayerNumber. It must return a number, which can be any amount, but the lives left will be capped by the player's BatteryLives option. _fallback/metrics.ini has a simple example.
[F] GetSelectedSection: A replacement for whatever crude kludge you're using to get the text of the current music wheel item.
Themerdocs/calories.txt lists the new functions for setting the parts of the profile related to calorie calculation.
The credits screen has been modified a bit internally to make it easier to add sections with custom theme credits without removing the main Stepmania credits.
With a new way of calculating the number of calories burned, comes a new way for entering the information it needs. This screen appears after gameplay and before evaluation, but only if at least one of the players has it enabled and the theme supports it. See Themerdocs/Examples/Example_Screens/ScreenHeartEntry.lua for an in-depth example.
(todo)
At a minimum, you want to set the LinesVisible metric to the correct value for your theme so that ScreenMapControllers knows when to stop scrolling the rows so the player's cursor can't go off the screen. Themerdocs/Examples/Example_Screens/ScreenMapControllers.lua discusses the themable parts of ScreenMapControllers.
This is the screen for presenting the BackgroundFitMode preference so the player knows exactly how their choice will affect backgrounds by looking at the effect each choice has on an image of each of the common aspect ratios. _fallback/BGAnimations/ScreenSetBGFit overlay.lua is a detailed example.
Themable haste system: Themerdocs/haste.txt discusses changing the way the haste system behaves if you want your theme to have different haste behavior from the default.
SelectMenuInput message: Previously, if the SelectMenuChangesDifficulty metric was true, the SelectMenuInput message would not be broadcast for button presses with select held down. Now the message is always broadcast for button presses while select is held down.
[M] GetReturnsNumbers: TimingData contains all the timing data for a Steps, and has functions for fetching it so the theme can see what the timing data was. Previously, these functions would all return strings and the theme would have to parse the strings to turn them into numbers befor it could do anything useful. Now, if the TimingData::GetReturnsNumbers metric is set to true, the TimingData functions will return numbers instead of strings.
StepMania 5 beta 3
StepMania 5 Alpha 3
StepMania 5 Alpha 2