@shakesoda shakesoda released this Feb 13, 2015 · 1531 commits to master since this release

Assets 4

StepMania 5.0.5; release notes compiled and Markdown formatted by @kyzentun:

This is divided into four sections:

  • Player visible changes: New configuration options players should try out,
  • Themer visible changes: New (optional) screens that themes can support, new metrics or lua functions, or fixes for existing functions.
  • Prominent bug fixes: Bugs that seem prominent and aren't solely relevant to themers. Listing every tiny little bug would make these notes far longer than they already are, so most bugs are left out.
  • Preemptive problem solving: Problems that might commonly occur and have a known good solution.

Items are roughly grouped into the general part of Stepmania they fit into.

Player visible changes:

Edit Mode:

  • Play song:

    Ends when the song ends, or when the notes end, whichever is later.

  • Key configuration:

    See Docs/Mapping_keys_for_edit_mode.txt

  • Record Hold Time:

    When recording steps in Record Mode, a button that is held more than 0.3
    seconds is recorded as a hold. This amount of time can now be adjusted up
    or down with Q/W or set to 120 seconds with R or reset to 0.3 with E.

  • Record Mode Lead In Time:

    Preference for setting the number of seconds before the selected section
    comes up in record mode. Should be settable on the options screen in edit
    mode in default theme.


  • DefaultFailType:

    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)

  • MinTNSToHideNotes:

    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.

  • Previously hidden preferences:

    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.

    • AllowMultipleHighScoreWithSameName
    • ComboContinuesBetweenSongs
    • Disqualification
    • FailOffForFirstStageEasy
    • FailOffInBeginner
    • LockCourseDifficulties
    • InputDebounceTime
    • MaxHighScoresPerListForMachine
    • MaxHighScoresPerListForPlayer


  • Profile merging

    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

  • Profile types

    Guest and Test profile types added. All existing and new profiles are

    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.


  • Added auto-mappings for D-Force dance pads.


  • Forced sanity checking

    Start, MenuLeft, MenuRight, and Operator keys must be mapped.

  • Reset key mappings option

    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.

Themer visible changes:

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.

  • Bug fixes are marked with [B].
  • Functions are marked with [F].
  • Metrics are marked with [M].
  • Sounds are marked with [S]
  • Thread variables are marked with [V]

Function Chaining:

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:xy(_screen.cx, _screen.h-60)
    -- new style:
    self:zoom(.5):xy(_screen.cx, _screen.h-60):diffuse(color("#dc322f"))

Function Naming:

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.

New Actor Classes:

  • NoteColumnRenderer:

    Each column in the NoteField is an actor that can be fetched and

  • NoteField:

    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?

  • NCSplineHandler:

    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.

  • CubicSplineN:

    (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.

New functions in old Classes:


  • [F] Add/RemoveWrapperState
  • [F] bezier
    The bezier tween tended to get caught in an infinite loop before, which made it very unsafe to use. Now it won't loop forever when you set a bezier tween with random values.
  • [F] effectclock("timer") no longer crashes
  • [F] Get/SetFakeParent
  • [F] GetNumWrapperStates
  • [F] GetWrapperState


  • [F] GetUpdateRate


  • [F] Add/RemoveState
  • [F] Add/RemoveQuadState
  • [F] ForceStateUpdate
  • [F] Get/SetDecodeMovie
  • [F] GetNumStates
  • [F] GetNumQuadStates
  • [F] GetSpline
  • [F] Get/SetQuadState
  • [F] Get/SetState
  • [F] Get/SetStateData
  • [F] Get/SetUseAnimationState
  • [F] SetAllStateDelays
  • [F] SetSecondsIntoAnimation
  • [F] SetStateProperties
  • [F] SetVertsFromSplines


  • [S] "evaluation full combo W3"
  • [S] "evaluation full combo W4"


strokecolor is in the tween state now, so it can be tweened.


  • [F] GetSeparateStyles


  • [F] ApplyPreferredSongOptionsToOtherLevels
  • [F] CanSafelyEnterGameplay
  • [F] Get/SetCurrentStyle changed
    In kickbox game mode, players can have different styles set, pass a
    PlayerNumber when using SetCurrentStyle or GetCurrentStyle. This does not
    break old code, if you don't care about whether your theme works in kickbox
    mode, you can ignore this.


  • [F] approach
  • [F] lerp
  • [F] lerp_color
  • [F] multiapproach


  • [M] HideActiveSectionTitle
    Defaults to true in _fallback. A bit unfortunate, but keeps backward
    compatibility with the existing behavior of OnlyShowActiveSection.
    If neither metric is true, wheel displays all titles plus the contents of the
    active section (if any).
    If OnlyShowActiveSection is true but HideActiveSectionTitle is false, wheel displays the active section title
    plus its contents, or all titles if no section is active.
    If both are true, wheel displays only the active section's contents, or all
    titles if no section is active.


  • [V] Controller
  • [V] Player
    The Controller and Player variables now work for non-receptor arrows.
  • [M] NoteColorCount
  • [M] NoteColorType
    {PartName}NoteColorType will take Denominator or Progress.
    Denominator is classic style, colored by NoteType.
    Progress simulates DDR's Rainbow noteskin.
    {PartName}NoteColorCount is Number of Note Color
    You can reduce image size by reducing this value.


  • [M] ComboBreakOnImmediateHoldLetGo


  • [F] MinTNSToHideNotes


  • [F] ApplyPreferredOptionsToOtherLevels


  • [F] GetPriority
  • [F] GetTotalDancePoints
  • [F] GetType


  • [F] GetImageWidth/Height
  • [F] GetTextureWidth/Height
  • [F] GetSourceWidth/Height


  • [B] Coloring and cropping during tweens fixed.
  • [B] Corner diffuse colors fixed.


  • [M] OptionsScreen
  • [M] SetModsScreen
    The screens used to set options and mods in edit mode are no longer hardcoded, you can use these metrics to control what screens are used.


  • [M] MarginFunction
    Notefield positioning is handled a bit differently now.
    See comments in _fallback/metrics.ini above the [ScreenGameplay]
    MarginFunction metric. Basically, you can define a lua function that returns
    the space you want at the edges and in the center instead of setting position
    metrics. Do NOT use Style:GetWidth to calculate the margins your function
    ScreenGameplay now handles zooming the notefield to fit in the space instead
    of using the NeedsZoomOutWith2Players flag in the style. If the notefield
    doesn't fit in the space between the margins, and there is only one player,
    the player will be centered even if the Center1Player pref is false.


  • [F] GetNumRows


  • [B] Mini menu
    Centered on screen instead of centered on the row because more options were added.


  • [M] AnswerOnCommand (did nothing before, actually works now)


  • [M] ChoiceNames
    This metric can be a lua command like this now:

The lua command can then return a table of GameCommands which are used to create the choices.


  • [M] IconChoicePosFunction
    This metric is optional, if it's set, it must be set to a function that
    returns a table of positions. Each position is a table of the form {x, y, z}, where x, y, and z are numbers and any that is not a number
    defaults to 0.
    The function is passed the number of choices for the screen.
    IconChoiceOnCommand and IconChoiceOffCommand metrics added so each choice
    doesn't require its own On/OffCommand pair. These are also optional, but if
    they are set, they will override the individual commands if they exist. (If
    and IconChoiceOnCommand
    both exist, IconChoiceOnCommand
    will be used.)
    # in metrics.ini
    -- 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


  • [M] HardCommentMeter
    Metric for the meter that triggers the "select music comment hard" announcer.


  • [F] find_missing_strings_in_theme_translations
    This function was added as a way to aid translators. It finds strings that
    have no translation at all.


  • [F] GetBGChanges


  • [F] Get/SetDecodeMovie
  • [F] SetStateProperties


  • [F] GetStepsSeconds


  • [F] NeedsZoomOutWith2Players always returns false now.
    The related variable no longer exists, ScreenGameplay now uses the width of
    the notefield and the MarginFunction to decide whether to zoom out the


Pass true as the last arg if you want the data in tables instead of strings.

Bug fixes:


  • Using the wrong transition name no longer crashes.
  • Playback rate is applied to videos.
  • Checkerboard and other effects that use the same file twice no longer play videos back at multiplied speed.


  • A couple of the crashes that occurred on some BMS files have been fixed.
  • Basic branching support implemented in loader. #RANDOM, #IF, #ELSE, #ELSEIF, #END should work.

Endless Mode:

  • Holding start takes you to the evaluation screen instead of the next song.
    Otherwise, you would not be able to reach evaluation when playing Endless
    Mode with Fail Off.


  • Lua Scripts/ folders are now reloaded when the Game mode is changed.


  • Fixed the rare bug where the life graph shows a gradual decline when it was
    actually full. This seemed to occur when the player had full life for a long
    time, then suddenly lost a chunk. The graph would show a gradual decline
    from the point where they reached full to the point where they lost a chunk,
    when in reality their life bar was full for practically all that time.
    The cause seems to have been getting judged for a hold and a tap on the exact
    same frame, and dropping the hold. It's rare and hard to reproduce on
    demand, but it is believed to be fixed.

Odd screen width:

  • Short: 1920x1080 would come up as 1921x1080 before. Now it's 1920x1080.
  • Long: The DisplayWidth preference and the ScreenWidth theme metric aren't
    actually used, the widths are calculated from the height and the aspect
    ratio. The old rounding code was written with 4:3 in mind, so an extra step
    was added to force the width to be even after the rounding.

Miscellaneous crashes:

  • Trying to practice doubles-only groups doesn't crash (still can't play, but
    doesn't crash).
  • ScreenHowToPlay doesn't crash when it can't find steps.
  • Joining the second player on Select Music now removes double-only songs
    from the music wheel. Selecting them before would crash.
  • Renaming a profile dir to a non-number no longer causes a crash the next time a profile is created.
  • Combo and point score changed to unsigned. A simfile with a huge tapcount no longer causes a crash.
  • Adding a bpm change that makes the bpm change after it no longer crashes. (Example: You have a file with 101 bpm at beat 0, and 100 bpm at beat 8. You add a change with 100 bpm at beat 4, then hit play. Previous versions would crash. Now, the bpm change at beat 8 is moved to beat 4.)


  • If a chart for an unrecognized style is in the simfile, it is preserved
    Previously, charts for unrecognized styles would end up on dance-single,
    where they don't belong. Now a warning is printed to the log file and the
    charts are completely inaccessible in the game. This probably only occurs
    for people using simfiles made by 3.9+ Redux, which would autogen a chart for
    every difficulty for every style, and had a few styles that don't exist

Sextet stream:

  • Input and lights data can be handled through a sextet stream system instead
    of writing drivers directly in StepMania's code. See
    #343 for details.

Preemptive problem solving:

  • "Tried to switch to a background that was never loaded: <BackgroundDef Effect='StretchNoLoop' File1='1.000'/>"

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:

  1. Create an empty BGAnimation for it to use.
  • Create a folder named BGAnimations inside your SM5 user data folder
    (%APPDATA%/StepMania 5.0/ on Windows, ~/.stepmania-5.0/ on Linux,
    ~/Library/Application Support/StepMania 5/ on OS X)
  • Create a folder with the name given in the error message inside that
    BGAnimations folder (the name is the part in quotes after File1).
  • Create default.lua inside that folder with this inside it: return
  1. Delete the BGCHANGES line from the simfile.
    You will also need to delete the cache entry for the simfile (Cache/Songs
    inside the user data folder has all the cache entries).
  2. Edit the simfile to correct the mistake in the BGCHANGES line.
    In the example, "1.000" is a nonsensical bg name, so the fields in the line
    are probably out of order. Docs/Userdocs/bgchanges_format.txt explains the
    format of the BGCHANGES line. Some files in the Rebirth pack have the color
    value in the wrong place.
  • CyberiaStyle8:
    Their function for figuring out what stepmania version is being used assumes
    that the version string can be split up by spaces, so now it emits an error.
    If you notice that your BackgroundFitMode preference that you set in the
    default theme is ignored in CyberiaStyle, it's because they implement their
    own bg fitting system that replaces the engine's.