sm-ssc v1.0 Public Beta 4 | 20100531

The letter grade tiers have been reset to the old SM4CVS/3.9 values. You should probably reset your scores to maintain consistency. (Though if you used themes with their own scoring system, you never had consistency in the first place. :s)


  • [Trail] Add GetTrailEntry() Lua binding.
  • [TrailEntry] Allow TrailEntry to push itself, making Lua bindings possible. TrailEntry's Lua bindings include GetSong(), GetSteps(), IsSecret() and GetNormalModifiers().


  • Add Direction param to ChangeStepsMessage.


  • Enable upper diagonal keys for Positive Gaming Impact dance mat [corec]


  • [ScreenSelectProfile] Actually load player's last used settings.
  • [ScreenNetEvaluation] Don't assume every theme has a Grade display and/or Points display; This fixes crashes in themes which don't have them when people go to view another player's stats.
  • [ScoreKeeperNormal] add [Gameplay] MaxScoreToIncrementMissCombo metric.
  • [Course] add GetCourseDir(), HasBackground(), IsAnEdit() Lua bindings.
  • [GameManager] rework how the IsGameEnabled() Lua binding works: it now takes a string as a parameter.
  • [ScoreKeeper] allow ScoreKeeperRave to be used as a ScoreKeeper.
  • [ThemeManager] add GetCurLanguage() Lua binding.


  • [CourseLoaderCRS] up the maximum size of an edit course from 30KB to 32KB; allow the #BACKGROUND tag to be read from .crs files.
  • [HelpDisplay] new TipSwitchTime metric
  • [PrefsManager] add PreferenceExists(sPrefName) Lua binding; removed now-unused ShowSelectGroup preference.
  • [ScreenSelectMusic] make the ScoreDisplay 0 out if nothing is selected.


  • The great Lua binding addition begins...
    • [Actor] GetHAlign(), GetVAlign()
    • [LifeMeterBattery] GetLivesLeft()
    • [MemoryCardManager] GetCardLocked(pn), IsNameAvailable(pn)
    • [MenuTimer] GetSeconds()
    • [PlayerStageStats] GetRadarPossible(), GetRadarActual()
    • [ProfileManager] LastLoadWasFromLastGood(pn), LastLoadWasTamperedOrCorrupt(pn)


  • [AnnouncerManager] Lua bindings get added to AnnouncerManager, which now exists as ANNOUNCER. New bindings: ANNOUNCER:DoesAnnouncerExist(sAnnouncer) - returns a bool ANNOUNCER:GetAnnouncerNames() - returns a table of strings ANNOUNCER:GetCurrentAnnouncer() - returns a string ANNOUNCER:SetCurrentAnnouncer(sAnnouncer) - Sets the announcer if it exists.


  • [ScreenEvalation] Graphic "time label" renamed to "TimeLabel" for the sake of naming consistency.
  • Add GetOSName() binding. Returns a string representing the current OS.
  • Allow Negative stops to "work" again in Quirks Mode.
  • [ScreenSelectMaster] Fix "THE" cursor crash by testing if the cursor object is actually there (a.k.a. not null). It should be noted that cursors can still crash, however. (yay bugs)


  • [NotesLoaderSM] Only apply the old .sm format difficulty hacks if difficulty == Difficulty_Hard.
  • [TimingData] add HasNegativeBpms() Lua binding.


  • [PaneDisplay] Show fallback values when Song/Course is null.


  • [ScreenSelectMusic] Make it so changing difficulty also cancels TwoPartSelection if TwoPartConfirmsOnly.


  • [ScreenGameplay] Un-hardcoded the diffuse command on CourseSongNumber.


  • Add dance-threepanel StepsType. Thanks to kurisu for the original 3.9 code.
  • XMode mod added, thanks to v1toko/StepNXA.
  • [Song] add GetDisplayBpms() [a table of two floats], IsDisplayBpmSecret(), IsDisplayBpmConstant() [both bools] Lua bindings


  • Fixed an issue with StepsDisplayList crashing if more than 21 difficulties are playable. This allows Technomotion to work with AutoSetStyle and Autogen on.