sm-ssc Private Beta Wave 1 | 20091201

The list below comprises sm-ssc Private Beta Wave 1's changes. Some of the changes are from baseline StepMania 4 SVN, in order to keep compatibility.


  • [StepMania.cpp] (any)Shift+F2 = reload metrics only. F2 = reload metrics and textures.
  • [Course.cpp] GetPlayMode() and GetCourseType() return actual enums now, instead of numbers.
  • Add improved cel shading for people with GLSL support. [shakesoda]


  • [TimingData] add GetActualBPM() Lua binding that returns a table holding the min and max BPMs, in that order.


  • Disable color keying banners (it's 2009, I don't think anyone is using the old rotated banners anymore. -aj) [shakesoda]
  • Add OptionsListTimeout metric. [shakesoda]

20091126 (SSC turkey day)

  • [Song] new Lua bindings: NormallyDisplayed(), GetStepsSeconds()
  • Themes will load Lua scripts from subdirectories first now.



  • Fixed a crash with lifemultipliers > 1.0 in debug builds


  • F2 reloads metrics again, just like in StepMania 3.9. (This is probably one of those changes that won't get backported to baseline StepMania...)
  • [ScoreKeeperNormal] version 0.5 of ToastyTriggersAt added; only allows for one value, unlike 3.9+ (which used a String with multiple values). The final version will use a Lua table, similar to [MusicWheel] SortOrders.


  • [Character] new Lua bindings: GetModelPath(), GetRestAnimationPath(), GetWarmUpAnimationPath(), GetDanceAnimationPath()
  • [CharacterManager] GetRandomCharacter() Lua binding added
  • [RageFileManager] GetDirListing(sPath,bOnlyDirs,bPathToo) Lua binding added
  • [CharacterManager] GetAllCharacters() Lua binding added.




  • sm4svn r28233 [Glenn Maynard]: "Fix ThemeMetric gives the first value of the enum when the theme metric is nil, instead of EnumType_INVALID. This happened because ThemeMetric was setting the value to its default, eg. EnumType(), when LuaHelpers::FromStack returned false. This behavior doesn't make sense in the general case, since EnumType() results in an arbitrary value (the first one) rather than Invalid. Every FromStack function sets a reasonable default on invalid data, anyway, and only RageColor and enums can return false in any case. This fixes CustomDifficulty when CourseType = nil."

  • Fix a crash in StepsDisplay that allows Course mode to at least run.


  • MusicWheelItem SetMessage has a new param, Type (string that returns the item type).
  • Add sort songs by most recently played. (not feature-complete yet.)

20091103 to 20091109

  • Changes from SM4SVN:

    • r28211: [HighScore.cpp] "logic fixup" [Glenn Maynard]
    • r28215: "default to showing backgrounds in editor" [Chris Danford]
    • r28217: "Fix crash on reload metrics due to faulty FlushDirCache logic." [Steve Checkoway], implemented along with code that was originally submitted as r076 but removed. See this fix log to figure out why we'd bother. :)
    • r28218: "crash handler is crashing in 2.6.31 in GetBacktrace, causing a recursive crash handler crash that we aren't handling, leading to recursion" [Glenn Maynard]
    • r28219: "add 'DIRRO' driver for read-only access" [Glenn Maynard]
    • r28220: "fix confusing comment. Escaping doesn't affect this; commas aren't escaped, since they're split from the value itself, long after MsdFile is loaded." [Glenn Maynard] (We'll be keeping the 1,1,1,1 colors in sm-ssc, and may provide a compatibility script for SM4SVN, so be on the lookout.)
    • r28221: "allow overriding, like PRODUCT_ID" [Glenn Maynard]
    • r28222-28223: "adding support for pms files" [GRIM657]
    • The pulseaudio patch [David Santamaría Rogado (howl), Ondřej Hošek, Damien Thébault] (see
    • Greg Nadja's OpenGL/Windows patch
    • Load Splash.png instead of an .xpm [David Santamaría Rogado (howl)] (
  • sm-ssc Changes:

    • [ScreenSelectMusic.cpp] Add SelectMenuInputMessage, has params Player and Button. Broadcast messages when holding select and a button other than Select is pushed.
    • Windowed mode is now the default display mode.
    • [HighScore.cpp] new Lua bindings:
    • GetModifiers()
    • GetTapNoteScore(TapNoteScore)
    • GetHoldNoteScore(HoldNoteScore)
    • GetRadarValues()
    • [ProfileManager.cpp] added IsSongNew(Song) Lua binding

r088 | 20091101 12:19:47

  • SM4SVN r28203-28208, all by Glenn Maynard.
    • r28203: "skip exporting round data when nothing was played (no taps, no holds)"
    • r28204: "fix signatures not being written" (we had this already)
    • r28205: "don't fail if there's no course; just hide"
    • r28206: "move course rename and delete into Overview"
    • r28208: "disable rename and delete for courses that havn't been saved yet" r28207 was a theme edit.


sm4svn r28202: helper for cycling through an enum [Glenn Maynard]


sm4svn r28201: "refactor RageInput to not call GetDevicesAndDescriptions constantly; it can be slightly complex and get called thousands of times a second" [Glenn Maynard]


  • SM4SVN r28198-28200

    • r28198: Fix GetFileSizeInBytes to return an int instead of unsigned. "this returns -1 on error (this should actually be 64-bit, but that's a bigger change)" [Glenn Maynard]
    • r28199: The official log is as follows: "Hack to get the decorations to be deleted. Fixes crashes, but probably not the best way to go about this." [Steve Checkoway]
    • r28200: The official log is as follows: "Do not use an AutoActor to keep track of the children." However, this also fixes the hack in r28199. [Steve Checkoway]
  • Allow for Codes on ScreenGameplay. [shakesoda]

  • New Lua bindings for ScreenGameplay:

    • PauseGame(bool) - Pauses/unpauses the game.
    • IsPaused() - returns true or false depending on if the game is paused or not.


  • Support loading Lua scripts from subdirectories of the Scripts folder, to allow for better organization. The scripts in the root Scripts folder will run first, then any Lua scripts in subdirectories of the Scripts folder will be run. It currently only works with one folder depth, for example: Scripts/subfolder/script.lua.

    This is not likely to be changed. If you can see a possible need for paths like Scripts/subfolder/subfolder2/script.lua, please make a Feature Request ticket on the bugtracker at with an explanation of what you have in mind.


  • Change BitmapText defaults to no stroke + no shadow.
  • Added DefaultTheme preference in order to fix crashes. (sm-ssc's fallback theme is _fallback [and therefore normally unselectable].)


  • [NotesLoaderSM.cpp] Changes based on SM4SVN r28197 [Archer]


  • Event Mode turned on by default, as it should be. :) (sm-ssc is a home mode-based version of StepMania.)


  • SM4SVN r28192-28196.
    • r28192: HexToBinary for RString -> RString. [Glenn Maynard]
    • r28193: show all songs in EditCourse, not just preferred songs [Chris Danford]
    • r28194: [ScreenDebugOverlay] Glenn made this themeable in SM4SVN, finally catching up. This means we've had to rename a few things:
    • DebugMenuHeader -> HeaderText
    • PageName -> PageText ButtonText and FunctionText were added, as well. The font names remain the same, only the metrics change. (Can you believe they're still using Common normal as the font?)
    • r28195,28196: fix ComboChanged message sent when m_bSendJudgmentAndComboMessages is false, fix doing unnecessary work in multiplayer [Glenn Maynard]


  • [StepsDisplay] Fixed it so it actually shows up again.


Happy talk like k//eternal day!

  • [Font.cpp] Don't show strokes by default.
  • [NoteDisplay] fRotation -> fRotationZ in anticipation of multiple rotation mods.
  • [PaneDisplay] changed one thing that used a goto; doesn't use it anymore. seems to work for me, though I'm not 100% sure.
  • [ThemeManager] don't reload Lua scripts when you reload the metrics. This is a temporary fix, and may be deemed safe at some point in the future.


(SM4SVN r28189)

  • SM4SVN r28190,28191 (25 files worth). This was later reverted, as it caused reloading the metrics to crash. Since sm-ssc is primarily for themers, this is a dealbreaker. A lot of things were unofficially added to sm-ssc at this point:

  • [ActorFrame] Added RemoveAllChildren() and RemoveChild(sName) bindings. These are not guaranteed to work. Don't use them. They are very dangerous.

  • [IniFile] added Lua's '--' syntax for commenting (along with '//' and '#', which were already supported).

  • New blend modes Modulate (subject to renaming later) and AlphaMultiply.

  • [RageUtil] Added various bindings for formatting time that were already built into StepMania: SecondsToHHMMSS, SecondsToMMSSMsMs, SecondsToMMSSMsMsMs, SecondsToMSS, SecondsToMMSS. All bindings take in a float (number of seconds).

  • [RageUtil] Added IsHexVal(string) binding.

  • Added groups to sort length (based on BPM ranges), so the songs no longer show up without groups.


(SM4SVN r28180-28185)


  • Added WeightedMultiply and InvertDest blend modes to Direct3D.


  • Change decorations draw order so it breaks things less.


  • "hidden" removed from Actor commands. It was deprecated. A compatibility alias was added to replicate its functionality. However, this will not work with NoteSkins, so be sure to make sure to check them for the use of hidden.

    Handy replacement guide: hidden,true / hidden,1 = visible,false hidden,false / hidden,0 = visible,true


  • Add Sprite:CropTo() function + Lua binding.


  • Base theme changed from "default" to "_fallback". As a result, all themes will fallback on _fallback instead of default.


  • add URLEncode Lua binding to RageUtil.
  • [ScreenWithMenuElements.cpp, ThemeManager.cpp] Load and parse Lua as music. This makes conditional music possible.


  • Change many things on ScreenEdit to go 5 decimal places instead of 3.
  • Beginnings of Xbox controller mappings for edit mode (currently untested)


  • Binding naming format changed for BPM bindings. Always uses all caps BPM. Changes in the codebase due to this:
    • [Song] HasSignificantBpmChangesOrStops -> HasSignificantBPMChangesOrStops
    • [TimingData] HasBpmChanges -> HasBPMChanges
  • [TimingData] New bindings. (GetStops, GetBPMsAndTimes)
  • [ScreenPackages] attempt to not call MoveLeft by duplicating code. Seemed to work okay.


  • ScreenPackages changes:
    • Backgrounds from Sprites to AutoActors (Lua can be used now).
    • DefaultUrl metric added.
  • [ActorScroller] Make naming of commands consistent (some were all lowercase, some were CamelCase), all are now CamelCase.


  • Added ScreenGameplay:GetPlayerInfo(PlayerNumber) Lua binding


  • Added LifeChanged message to LifeMeterBattery, meaning certain hackily-coded custom life meters by a certain SSC member can work in Oni mode again. ;)
  • MAX_EDIT_STEPS_SIZE_BYTES changed from 30KB to 60KB.
  • Added --theme= and --language= command line options.


  • SSE2 build configuration added to Visual Studio 2008 project file.
  • new Lua bindings for WheelBase: IsSettled(), IsLocked()


  • Add Beginner meter sort.
  • [CommandLineActions] Implement --version command line argument. Prints out the version of sm-ssc. Please build sm-ssc with HAVE_VERSION_TIME if possible for compatibility with all possible sm-ssc themes.


(SM4SVN r28172-28174)


  • [GameCommand.cpp] add GetUrl() Lua binding.
  • [GameManager.cpp] add IsGameEnabled(Game) Lua binding.
  • [GrooveRadar] name m_GrooveRadarValueMap "RadarValueMap(P1/P2)" (commands untested); new todo note in header file
  • [ScoreDisplayOni.cpp] give it a name ("ScoreDisplayOni Numbers") and run commands. (untested)
  • removing player color diffuse commands, in the hopes this can be replicated using Lua commands. [GrooveRadar.cpp, ScoreDisplayLifeTime.cpp, ScreenSelectMusic.cpp]


(SM4SVN r28170: vdl's fixes for Xbox building; he says they should be tested.)


  • add THEME:GetPathO() Lua binding


(SM4SVN r28140-r28166; code changes only)


(SM4SVN r28135, r28137, r28138)

  • Lossless screenshots now save as PNG.
  • Conversion of decorations to not be children of the screen; they load in a similar fashion to overlay/underlay, but still using LoadB so everything works correctly. (Tested against SM4 default theme for compatibility.)


  • add GetRotationX, GetRotationZ commands to Actor
  • add urlnoexit game command, which won't exit upon loading the browser.
  • add OldHealthState to HealthStateChanged message on ScreenGameplay


  • (untested) GrooveRadar plays commands on the frame now, allowing for customized in and out transitions, using TweenOnScreen/TweenOffScreen Commands.
  • add PlayerController enum binding
  • add PlayerState:GetPlayerController() [untested]


ScreenDebugOverlay changes:

  • add OnCommand, X, Y to Debug Header
  • add GainFocus/LoseFocus commands to page names
  • add LineOnColor/LineOffColor


  • Add StartRoulette and StartRandom messages to MusicWheel.
  • Fix default stroke color and shadow length. (BitmapText)


  • patch by theDtTvB: (some parts relating to Player.cpp were later reverted; will be reimplemented)
  • Add SetPref to GameCommands.


  • New ThemeManager Lua bindings:
    • GetCurrentThemeDirectory
    • ReloadMetrics
  • Added more internal font mappings: auxc, auxd, auxz, auxwhite, auxblack, auxlb, auxrb, auxlt, auxrt
  • Add conf,PercentageScoring.


  • ActorScroller: add GetNumItems binding.
  • ThemeManager: add bindings for GetThemeDisplayName() and GetThemeDisplayAuthor() (for the current theme only).


  • Fixes songs with only Edit steps from crashing.
  • Lights fix from ???
  • Add GAMESTATE:IsBattleMode() binding.


  • (sync with SM4SVN: LightsManager.cpp, ScreenGameplay.cpp)


  • Add GetProfileDir() binding to ProfileManager.
  • Added ProfileSlotNames enum.
  • Add broadcasted message "SongChosen" on ScreenSelectMusic.


  • Allow meters to go up to 20 in Edit Mode.


  • Added io, os, and packages to Lua bindings. They are disabled for now.
  • Fix instance in ScreenSelectMaster where hitting Up wouldn't count as going backwards.


  • Add Overlay shader. [AJ]


(sync with SM4SVN)

More Lua bindings:

  • PlayerStageStats:FullComboOfScore(tns)

  • RageFileManager is now accessible through FILEMAN with these bindings:

    • FILEMAN:DoesFileExist(path)
    • FILEMAN:GetHashForFile(path)
  • Add bindings to Song:

    • GetSongFilePath
    • GetMusicPath
    • GetCDTitlePath
    • GetLyricsPath
    • IsEnabled
    • HasStepsType
    • HasMusic
    • HasBanner
    • HasBackground
    • HasCDTitle
    • HasBGChanges
    • HasLyrics
    • GetBPMAtBeat
    • GetBeatFromElapsedTime
    • GetElapsedTimeFromBeat
    • HasSignificantBpmChangesOrStops
    • HasEdits
    • IsEasy
  • Add bindings to Steps:

    • IsAnEdit
    • IsAPlayerEdit
    • GetHash
    • disabled stub for GetSMNoteData (untested)


  • Work-in-progress bindings for ActorSound:
    • pause
    • stop
  • Work-in-progress bindings for RageSound:
    • volume
    • SetStopMode


(sync with SM4SVN: Archer adding 5:4 support)


Add three new Lua bindings to RageFile:

  • GetError
  • ClearError
  • AtEOF


(sync with SM4SVN)

  • [Actor.cpp] add GetDiffuse() Lua binding


  • Add glowramp to Actor


  • (changes from SM4SVN: Frieza and Wolfman [OnlyPreferredDifficulties])


  • New RageFile bindings: Seek, Tell
  • Added more internal font mappings: auxa, auxb, auxy, auxl, auxr


ActorScroller changes:

  • Can now actually set size of the mask with SetMask
  • Add more Lua bindings:
    • SetNumItemsToDraw
    • GetFullScrollLengthSeconds
    • GetCurrentItem
    • GetDestinationItem


  • Add skewy to valid Actor commands.


(SM4SVN: ComboMultiplier by Frieza in ScoreKeeperNormal + r28060, r28061)


(changes from SM4SVN: ScreenSelect* changes by Frieza)

  • Make ScreenDebugOverlay use its own fonts, namely:
    • ScreenDebugOverlay header
    • ScreenDebugOverlay page
    • ScreenDebugOverlay line
  • Add GetServerName() binding to NetworkSyncManager.
  • Add GetText() binding to BPMDisplay.
  • add MD5 String/File and SHA1 String hashing via Lua:
    • CRYPTMAN:MD5String(str)
    • CRYPTMAN:MD5File(path)
    • CRYPTMAN:SHA1String(str)
  • Add more Lua bindings to PlayerStageStats:
    • GetCurrentMissCombo
    • GetCurrentPossibleDancePoints
    • GetAliveSeconds
  • Add GetThemeAuthor() to ThemeManager.
  • Add bindings to Song:
    • GetDisplaySubTitle
    • GetTranslitSubTitle


(changes from SM4SVN: tons of changes by Frieza)


(changes from SM4SVN: GameManager.cpp, RollingNumbers.cpp)


  • Make some crash explanations more detailed. Changed files include:
    • Actor.cpp - PercentThroughEffect, PercentBetweenColors, DeltaTime
    • Attack.cpp
    • GameManager.cpp
    • GameState.cpp
    • InputFilter.cpp
    • NoteData.cpp
  • Add new Lua bindings to TimingData: HasBpmChanges, GetBpms, GetStops.


  • Project begins.
  • Remove ScreenEz2SelectPlayer, which only the Xbox project still referenced.