StepMania 5.1.0 Alpha

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

Keep scrolling down for 5.0.10 stable release

This alpha release is primarily for noteskin authors and theme authors who
are interested in creating noteskins or using the new features.
If you are not a noteskin author or theme author, you probably do not want to
use this 5.1.0 Alpha release.

Compiling:

The 5_1_0 branch uses submodules for some external dependencies like ffmpeg,
so they are not bundled. As a side effect, if you click the "Download ZIP"
button on github to get a source zip, you will not be able to build that zip.

If you are not compiling from source, you can ignore this section. The linux tar.gz attached to this release was built for amd64 debian.

To get around this problem, these are the steps for fetching the 5_1_0 branch source:

git clone --depth=1 -b 5_1_0 https://github.com/stepmania/stepmania.git
cd stepmania
git submodule init
git submodule update

(if someone wants to submit instructions for doing the same with a gui,
gui instructions can be added.)
The --recursive flag is not used in the clone command given above
because some submodules like cppformat have their own submodules that are not
needed for building or running stepmania.

After the submodules have been updated, compiling can be done in the same way
as on the master branch of stepmania.

New systems:

The new systems in this alpha release are not in their final form. They will
be extended and modified based on feedback from noteskin and theme authors
who create new content. Keeping the systems simple and allowing new people
to learn them gradually is one of the goals.

RollingNumbers:

This is the simplest one, so it is explained first. The changes to
RollingNumbers were more of an attempt to improve it than a serious rewrite
like the other new systems. Changes to RollingNumbers are fully documented
in Docs/Themerdocs/5.1_incompatibilities/RollingNumbers.md.

Feature Overview:

  • More lua control: Various things that could only be set through metrics
    can now be set by calling lua functions.
  • Attributes: The attribute system from BitmapText is used, giving more
    freedom than the multiply color metric.
  • Configurable leading glyph: Any glyph can be used as the leading character
    for the number. This is for people that don't want zeroes in front.

NewSkins:

A new noteskin system has been created. The goals of the new system are to
provide a solid base for future development, clear out cruft, remove metrics
from noteskins, and provide more advanced features.
The new noteskin system is fully documented in NewSkins/default, which is an
example noteskin explaining all the features and demonstrating some of them.

Feature Overview:

  • Pure lua: The metrics system is outdated and tends to obstruct advanced
    authors trying to handle varied cases. The NewSkin system does not use
    metrics at all. Everything is done in lua.
  • Not tied to game types: A NewSkin can be used in any game type, as long as
    it supports the buttons used by the current chart.
  • Adjustable column width: The NewSkin controls how wide each column is and
    the padding on the sides of each column. The hardcoded values from the
    Style are ignored, and will be removed in a future version.
  • Quantizable holds: Hold bodies can be quantized the same way taps are, if
    the noteskin author uses the feature.
  • Superior quantization: Quantizations are not forced to fit the traditional
    categories of 4th, 8th, 12th, 16th, 24th, 32nd, 48th, 64th. Instead, notes
    are quantized using a system based on how many times a quantization occurs
    each beat. The simfile format and internal note data structures are still
    limited, but the noteskin system is not.
  • Receptor warnings: The receptors are told when the next arrow is coming,
    even if it's off the bottom of the screen, so the receptor can warn of
    upcoming notes by changing color or something.
  • Superior multiplayer support: The NewSkin system does not force a hard
    limit of 2 players, and noteskin authors are encouraged to support as many
    players as feasible. Edit mode and gameplay will need upgrades before
    more than 2 players is really possible, but the NewSkin system is prepared.

NewField:

NewField is a completely new notefield system. It gives the theme more
control over every aspect, and is self contained.
Initial documentation is in
Docs/Themerdocs/5.1_incompatibilities/NewField.md.

Feature Overview:

  • Columns are actors: Each column is its own actor, with extra features.
  • More info for Notefield board: The Notefield board file in Graphics should
    be a lua file now. It is passed more info to make using it for a screen
    filter easier. Using the notefield board for a screen filter makes
    positioning logic much simpler because the themer doesn't have to worry
    about the current style or how many players there are.
  • Better multiplayer support: The NewField does not pull anything from a
    global player state. Instead, all behavior is set by whatever creates the
    NewField, or by the theme. It will not be an obstacle to having more than
    2 players. Many other parts of the engine still stand in the way of
    multiplayer, but the NewField is prepared.

ModValue:

The new notefield system also has a completely new modifier system. This is
extensible, predictable, and documented. Figuring out exactly what a
modifier does no longer requires digging through ArrowEffects.cpp. Detailed
control over exactly what the arrows do is possible.
Full docs in Docs/Themerdocs/5.1_incompatibilities/NewField_mod_system.md.

Feature Overview:

  • Field mods separate from Column mods: The field and the columns have
    different mods, for doing different things.
  • Per-column mods: Each column can have its own mods.
  • Mods for more things: FOV, vanish point, field transform, column
    transform, note transform, note/explosion/receptor glow/alpha, time offset,
    quantization, reverse offset, reverse, center.
  • Separate glow and alpha: Glow and alpha are controlled by different mods
    because the white flash that hidden/sudden force in the old system bothers
    some people.
  • No hidden quirk interactions: In the old mod system, C600 + Boost plays
    differently from M600 + Boost. That's just weird and wrong, so the new
    system does not do that.
  • Splines are mods: The spline mod system added last Christmas was not well
    integrated with the old mod system because the old mod system didn't have
    a place for it. So there were weird interactions between the two that made
    splines awkward to use. Splines are part of the design of the new system,
    so they are much easier to use now.
  • Mods are equations: At its simplest, a mod is an equation that takes one
    aspect of a note as input (say, y offset) and sets an attribute based on
    that aspect (say, x position). Possible equations range from simple
    numbers to wave functions and splines.
  • Detailed control: Building on the idea of using equations for mods, there
    are many minor variables that can be set when creating a mod to customize
    exactly how it affects the notes.
  • Built in timed mods: The columns and field have managers built in that can
    be told when a mod should start and end. The manager efficiently handles
    turning mods on and off at the right times.
  • Rate adjusted mods: Mods are tied to the current time of the field, so
    when the music rate changes, mods play out at exactly the same beat. This
    relieves the burden of writing lua code to find the current music rate and
    try to adjust tween times, or forcing people to only play on 1x rate.

Options screen:

Because the modifier system does not use PlayerOptions, large parts of the
options screen do nothing. Mods that change the steps in a chart like
Shuffle work the same, but mods that change the appearance of notes like
Dizzy do nothing. This is because the system was not designed with OptionRow
in mind (I hate OptionRow, it can't do anything I want to do, I don't use
it).
Instead, the NewField relies on the theme to set mods through lua
function calls when ScreenGameplay starts. To assist themers, _fallback
provides functions for setting speed, tilt (distant), mini, and reverse by
reading them from PlayerOptions. There are also functions for setting hidden
and sudden mods (with control over exactly where the line is, and only
affecting note alpha. So no white flash), but they do not read from
PlayerOptions and must be called directly.
A future version will probably use lua option rows and a global lua variable
to store the mod choices from the options screen before applying them on
gameplay.

Todo:

  • Adapt the new mod system so that it can be used on any actor, not just on
    the notefield and notes.
  • Create lua option rows to assist themers putting newfield mods on the
    options screen.
  • Address the problem that prevents using the spin effect on mine notes. The
    notes need some efficient way for the effect clock to be tied to the time
    passing in the notefield, instead of being tied to PLAYER_1 or PLAYER_2.
  • Add stuff that edit mode needs, like drawing beat bars and timing segment
    info.
  • Write proper entries in Lua.xml for all the new functions. The
    documentation in Docs/Themerdocs should be a supplement to Lua.xml.

Things on the way out:

Old NoteField related stuff:

NoteField, NoteDisplay, ArrowEffects, NoteSkinManager, and (most of)
PlayerOptions will probably be removed in the next release.

Styles

It would be nice if both players were not forced to the same style.
Everybody tries to skip past style select quickly, so it seems obstructive.
If player's aren't forced to the same style, and the noteskin controls column
widths, what point does the style have? Changing between styles on music
select is already possible in more advanced themes. This will cement that,
and allow more freedom when picking what to play next.