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.
Preferences:
-
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:
-
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
similar) -
Profile types
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.
Misc:
- Added auto-mappings for D-Force dance pads.
ScreenMapControllers:
-
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.
ScreenSelectStyle:
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.
ScreenOptions:
Player nameplates added with bpm info.
Translations:
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.
Videos:
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: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"))
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
manipulated. -
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:
Actor:
- [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
ActorFrame:
- [F] GetUpdateRate
ActorMultiVertex:
- [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
Announcer:
- [S] "evaluation full combo W3"
- [S] "evaluation full combo W4"
BitmapText:
strokecolor is in the tween state now, so it can be tweened.
Game:
- [F] GetSeparateStyles
GameState:
- [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.
Global:
- [F] approach
- [F] lerp
- [F] lerp_color
- [F] multiapproach
MusicWheel:
- [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.
Noteskins:
- [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.
Player:
- [M] ComboBreakOnImmediateHoldLetGo
PlayerOptions:
- [F] MinTNSToHideNotes
PlayerState:
- [F] ApplyPreferredOptionsToOtherLevels
Profile:
- [F] GetPriority
- [F] GetTotalDancePoints
- [F] GetType
RageTexture:
- [F] GetImageWidth/Height
- [F] GetTextureWidth/Height
- [F] GetSourceWidth/Height
RollingNumbers:
- [B] Coloring and cropping during tweens fixed.
- [B] Corner diffuse colors fixed.
ScreenEdit:
- [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.
ScreenGameplay:
- [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
returns.
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.
ScreenOptions:
- [F] GetNumRows
ScreenOptionsManageProfiles:
- [B] Mini menu
Centered on screen instead of centered on the row because more options were added.
ScreenPrompt:
- [M] AnswerOnCommand (did nothing before, actually works now)
ScreenSelect:
- [M] ChoiceNames
This metric can be a lua command like this now:
ChoiceNames="lua,ScreenSelectStyleChoices()"
The lua command can then return a table of GameCommands which are used to create the choices.
ScreenSelectMaster:
- [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
IconChoiceCactusOnCommand
andIconChoiceOnCommand
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
ScreenSelectMusic:
- [M] HardCommentMeter
Metric for the meter that triggers the "select music comment hard" announcer.
Scripts:
- [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.
Song:
- [F] GetBGChanges
Sprite:
- [F] Get/SetDecodeMovie
- [F] SetStateProperties
StageStats:
- [F] GetStepsSeconds
Style:
- [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
notefield.
TimingData:
Pass true as the last arg if you want the data in tables instead of strings.
Bug fixes:
Background:
- 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.
BMS:
- 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.
GameManager:
- Lua Scripts/ folders are now reloaded when the Game mode is changed.
LifeGraph:
- 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.)
Simfiles:
- If a chart for an unrecognized style is in the simfile, it is preserved
correctly.
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
anymore.
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:
- 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
Def.Actor{}
- 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). - 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.