This commit is contained in:
Thai Pangsakulyanont
2011-10-09 18:34:44 +07:00
26 changed files with 941 additions and 450 deletions
+20
View File
@@ -4,6 +4,26 @@ The StepMania 5 Changelog covers all post-sm-ssc changes. For a list of changes
from StepMania 4 alpha 5 to sm-ssc v1.2.5, see Changelog_sm-ssc.txt.
________________________________________________________________________________
================================================================================
StepMania 5.0 $next | 2011xxxx
--------------------------------------------------------------------------------
2011/10/08
----------
* [GameSoundManager] Add the PlayMusicPart lua binding. [Wolfman2000]
* [ScreenEdit] Add the FadeInPreview and FadeOutPreview metrics. This controls
how long the fade in and fade outs are for playing the preview music.
The default values are 0 and 1.5 respectively. [Wolfman2000]
2011/10/07
----------
* [RageDisplay] Add the GetFPS, GetVPF, and GetCumFPS bindings. [Wolfman2000]
2011/10/06
----------
* Various scoring fixes sourced from http://www47.atwiki.jp/waiei/pages/21.html
[A.C/@waiei, 桜為小鳩/@sakuraponila]
================================================================================
StepMania 5.0 Preview 4 | 20111005
--------------------------------------------------------------------------------
+31 -8
View File
@@ -119,6 +119,7 @@
<Function name='MultiPlayerToLocalizedString'/>
<Function name='MultiPlayerToString'/>
<Function name='OptionRowProTiming'/>
<Function name='OptionRowScreenFilter'/>
<Function name='OptionsRandomJukebox'/>
<Function name='OptionsRowTest'/>
<Function name='PeakComboAwardToLocalizedString'/>
@@ -202,6 +203,7 @@
<Function name='UserPrefNotePosition'/>
<Function name='UserPrefScoringMode'/>
<Function name='UserPrefShowLotsaOptions'/>
<Function name='UserPrefTimingDisplay'/>
<Function name='Var'/>
<Function name='VersionDate'/>
<Function name='VersionTime'/>
@@ -216,7 +218,6 @@
<Function name='clamp'/>
<Function name='collectgarbage'/>
<Function name='color'/>
<Function name='date'/>
<Function name='dofile'/>
<Function name='error'/>
<Function name='fapproach'/>
@@ -663,10 +664,15 @@
<Class base='ActorFrame' name='FadingBanner'>
<Function name='GetLatestIndex'/>
<Function name='LoadCardFromCharacter'/>
<Function name='LoadCourseFallback'/>
<Function name='LoadFallback'/>
<Function name='LoadFromCourse'/>
<Function name='LoadFromSong'/>
<Function name='LoadFromSongGroup'/>
<Function name='LoadFromSortOrder'/>
<Function name='LoadIconFromCharacter'/>
<Function name='LoadRandom'/>
<Function name='LoadRoulette'/>
<Function name='ScaleToClipped'/>
<Function name='scaletoclipped'/>
</Class>
@@ -695,12 +701,17 @@
<Function name='DimMusic'/>
<Function name='GetPlayerBalance'/>
<Function name='PlayAnnouncer'/>
<Function name='PlayMusicPart'/>
<Function name='PlayOnce'/>
</Class>
<Class name='GameState'>
<Function name='AddStageToPlayer'/>
<Function name='AnyPlayerHasRankingFeats'/>
<Function name='ApplyGameCommand'/>
<Function name='ApplyPreferredModifiers'/>
<Function name='ApplyStageModifiers'/>
<Function name='ClearStageModifiersIllegalForCourse'/>
<Function name='CurrentOptionsDisqualifyPlayer'/>
<Function name='Dopefish'/>
<Function name='EnoughCreditsToJoin'/>
<Function name='Env'/>
@@ -720,6 +731,7 @@
<Function name='GetCurrentStyle'/>
<Function name='GetCurrentTrail'/>
<Function name='GetDefaultSongOptions'/>
<Function name='GetEarnedExtraStage'/>
<Function name='GetEasiestStepsDifficulty'/>
<Function name='GetEditCourseEntryIndex'/>
<Function name='GetEditLocalProfile'/>
@@ -855,9 +867,12 @@
</Class>
<Class base='ActorFrame' name='MenuTimer'>
<Function name='GetSeconds'/>
<Function name='SetSeconds'/>
<Function name='disable'/>
<Function name='pause'/>
<Function name='setseconds'/>
<Function name='silent'/>
<Function name='start'/>
<Function name='stealth'/>
<Function name='stop'/>
</Class>
@@ -871,6 +886,7 @@
<Function name='Load'/>
</Class>
<Class base='Actor' name='Model'>
<Function name='GetDefaultAnimation'/>
<Function name='GetNumStates'/>
<Function name='SetDefaultAnimation'/>
<Function name='loop'/>
@@ -1119,6 +1135,9 @@
<Class name='RageDisplay'>
<Function name='GetDisplayHeight'/>
<Function name='GetDisplayWidth'/>
<Function name='GetFPS'/>
<Function name='GetVPF'/>
<Function name='GetCumFPS'/>
</Class>
<Class name='RageFile'>
<Function name='AtEOF'/>
@@ -1572,10 +1591,10 @@
<Function name='GetStepsUnlockedByEntryID'/>
<Function name='GetUnlockEntry'/>
<Function name='GetUnlockEntryIndexToCelebrate'/>
<Function name='IsSongLocked'/>
<Function name='PreferUnlockEntryID'/>
<Function name='UnlockEntryID'/>
<Function name='UnlockEntryIndex'/>
<Function name='IsSongLocked'/>
</Class>
<Class base='ActorFrame' name='WheelBase'>
<Function name='GetCurrentIndex'/>
@@ -1585,6 +1604,10 @@
<Function name='IsSettled'/>
<Function name='SetOpenSection'/>
</Class>
<Class base='ActorFrame' name='WheelItemBase'>
<Function name='GetColor'/>
<Function name='GetText'/>
</Class>
<Class base='ActorFrame' name='WorkoutGraph'>
<Function name='SetFromCurrentWorkout'/>
<Function name='SetFromGameStateAndHighlightSong'/>
@@ -2177,16 +2200,16 @@
</Enum>
</Enums>
<Constants>
<Constant name='ASPECT_SCALE_FACTOR' value='640'/>
<Constant name='ASPECT_SCALE_FACTOR' value='854'/>
<Constant name='NUM_PLAYERS' value='2'/>
<Constant name='SCREEN_BOTTOM' value='480'/>
<Constant name='SCREEN_CENTER_X' value='320'/>
<Constant name='SCREEN_CENTER_X' value='427'/>
<Constant name='SCREEN_CENTER_Y' value='240'/>
<Constant name='SCREEN_HEIGHT' value='480'/>
<Constant name='SCREEN_LEFT' value='0'/>
<Constant name='SCREEN_RIGHT' value='640'/>
<Constant name='SCREEN_RIGHT' value='854'/>
<Constant name='SCREEN_TOP' value='0'/>
<Constant name='SCREEN_WIDTH' value='640'/>
<Constant name='SCREEN_WIDTH' value='854'/>
<Constant name='PLAYER_1' value='&apos;PlayerNumber_P1&apos;'/>
<Constant name='PLAYER_2' value='&apos;PlayerNumber_P2&apos;'/>
<Constant name='_VERSION' value='&apos;Lua 5.1&apos;'/>
@@ -2198,6 +2221,6 @@
<Constant name='sGame' value='&apos;dance&apos;'/>
<Constant name='top' value='&apos;VertAlign_Top&apos;'/>
</Constants>
<Version>StepMania v5.0 Preview 3</Version>
<Date>2011-08-27</Date>
<Version>StepMania v5.0 Preview 4</Version>
<Date>2011-10-06</Date>
</Lua>
+118 -38
View File
@@ -63,13 +63,13 @@
<Function name='color' return='color' arguments='string color'>
Returns a color from a string. <code>color</code> can be in hex (<code>"#FFFFFFFF"</code>) or 0..1 values (<code>"1.0,1.0,1.0,1.0"</code>), in RGBA order.
</Function>
<Function name='ColorDarkTone' theme='_fallback' return='' arguments='color c'>
<Function name='ColorDarkTone' theme='_fallback' return='color' arguments='color c'>
[02 Colors.lua] Returns a darker tone of the color. (Specifically <code>c[1]/2, c[2]/2, c[3]/2, c[4]</code>)
</Function>
<Function name='ColorLightTone' theme='_fallback' return='' arguments='color c'>
<Function name='ColorLightTone' theme='_fallback' return='color' arguments='color c'>
[02 Colors.lua] Returns a lighter tone of the color. (Specifically <code>c[1]+(c[1]/2), c[2]+(c[2]/2), c[3]+(c[3]/2), c[4]</code>)
</Function>
<Function name='ColorMidTone' theme='_fallback' return='' arguments='color c'>
<Function name='ColorMidTone' theme='_fallback' return='color' arguments='color c'>
[02 Colors.lua] Returns a midtone of the color. (Specifically <code>c[1]/1.5, c[2]/1.5, c[3]/1.5, c[4]</code>)
</Function>
<Function name='ColorToHex' theme='_fallback' return='string' arguments='color c'>
@@ -183,7 +183,7 @@
<Function name='GetThemeAspectRatio' return='float' arguments=''>
Returns the theme's aspect ratio.
</Function>
<Function name='GetThemePref' theme='_fallback' return='' arguments=''>
<Function name='GetThemePref' theme='_fallback' return='various' arguments='string pref'>
[03 ThemePrefs.lua] (Alias for <Link class='ThemePrefs' function='Get' />.)
</Function>
<Function name='GetTimingDifficulty' return='int' arguments=''>
@@ -302,7 +302,7 @@
<Function name='MissCombo' theme='_fallback' return='int' arguments=''>
[03 Gameplay.lua] Returns the value to start showing the miss combo at.
</Function>
<Function name='module' return='' arguments='string name, ...'>
<Function name='module' return='void' arguments='string name, ...'>
Creates a module. See the Lua manual for more details.
</Function>
<Function name='MonthOfYear' return='int' arguments=''>
@@ -314,7 +314,7 @@
<Function name='MonthToString' return='string' arguments='Month m'>
Returns Month <code>m</code> as a string.
</Function>
<Function name='next' return='' arguments='table t, int index'>
<Function name='next' return='void' arguments='table t, int index'>
"Allows a program to traverse all fields of a table. Its first argument is a
table and its second argument is an index in this table.
<code>next</code> returns the next index of the table and its associated value."
@@ -323,7 +323,7 @@
<Function name='OptionRowProTiming' theme='default' return='LuaOptionRow' arguments=''>
[03 ThemePrefs.lua] Returns a Lua option row for ProTiming.
</Function>
<Function name='pairs' return='' arguments='table t'>
<Function name='pairs' return='function' arguments='table t'>
"Returns three values: the <Link class='GLOBAL' function='next' /> function, the table <code>t</code>, and <code>nil</code>,
so that the construction <code>for k,v in pairs(t) do body end</code>
will iterate over all keyvalue pairs of table <code>t</code>."
@@ -368,7 +368,7 @@
<Function name='ReportStyle' return='void' arguments=''>
Sends the current style to the server.
</Function>
<Function name='require' return='' arguments='string modname'>
<Function name='require' return='void' arguments='string modname'>
Loads the specified module. See the Lua manual for more information.
</Function>
<Function name='round' theme='_fallback' return='int' arguments='float val, int decimal'>
@@ -476,7 +476,7 @@
<Function name='type' return='string' arguments='various v'>
Returns the type of the object as a string. See the Lua manual for valid return values.
</Function>
<Function name='unpack' return='' arguments='table list, int i, int j'>
<Function name='unpack' return='various' arguments='table list, int i, int j'>
"Returns the elements from the given table.
This function is equivalent to <code>return list[i], list[i+1], ···, list[j]</code>"
(<code>i</code> and <code>j</code> are optional; "by default, i is 1 and j is the length of the list.")
@@ -508,7 +508,7 @@
<Function name='WriteFile' theme='_fallback' return='bool' arguments='string path, string buf'>
[04 FileUtils.lua] Writes <code>buf</code> to the file at <code>path</code>.
</Function>
<Function name='WriteGamePrefToFile' theme='_fallback' return='' arguments='string name'>
<Function name='WriteGamePrefToFile' theme='_fallback' return='bool' arguments='string name'>
[03 GamePreferences.lua]
</Function>
<Function name='WritePrefToFile' theme='_fallback' return='bool' arguments='string prefName, various value'>
@@ -1580,7 +1580,7 @@
Gets the CourseEntry at <code>iIndex</code> from the Course.
</Function>
<Function name='GetCourseType' renamed='true' return='CourseType' arguments=''>
Returns the Course's <Link class='ENUM' function='CourseType' />. (Returns CourseType in sm-ssc; integer in SM4)
Returns the Course's <Link class='ENUM' function='CourseType' />. (Returns CourseType in SM5; integer in SM4)
</Function>
<Function name='GetDescription' return='string' arguments=''>
Returns the description for this Course.
@@ -1598,7 +1598,7 @@
Returns the Course's group name.
</Function>
<Function name='GetPlayMode' renamed='true' return='PlayMode' arguments=''>
Returns the Course's <Link class='ENUM' function='PlayMode' />. (Returns PlayMode in sm-ssc; integer in SM4)
Returns the Course's <Link class='ENUM' function='PlayMode' />. (Returns PlayMode in SM5; integer in SM4)
</Function>
<Function name='GetScripter' return='string' arguments=''>
Returns the name of the person who scripted the Course.
@@ -1715,6 +1715,15 @@
<Function name='GetLatestIndex' return='int' arguments=''>
Returns the index of the last banner loaded.
</Function>
<Function name='LoadCourseFallback' return='void' arguments=''>
Loads the fallback course banner.
</Function>
<Function name='LoadFallback' return='void' arguments=''>
Loads the fallback banner.
</Function>
<Function name='LoadCardFromCharacter' return='void' arguments='Character pCharacter'>
Loads the card image from the specified Character.
</Function>
<Function name='LoadFromCourse' return='void' arguments='Course c'>
Loads a Banner from a specified Course.
</Function>
@@ -1724,6 +1733,24 @@
<Function name='LoadFromSongGroup' return='void' arguments='string s'>
Loads a Banner from a specified Song Group.
</Function>
<Function name='LoadFromSortOrder' return='void' arguments='SortOrder so'>
Loads a Banner from a specified SortOrder.
</Function>
<Function name='LoadIconFromCharacter' return='void' arguments='Character pCharacter'>
Loads an icon from the specified Character.
</Function>
<Function name='LoadRandom' return='void' arguments=''>
Loads the Random banner.
</Function>
<Function name='LoadRoulette' return='void' arguments=''>
Loads the Roulette banner.
</Function>
<Function name='scaletoclipped' return='void' arguments='float fWidth, float fHeight'>
See <Link class='Sprite' function='scaletoclipped' />.
</Function>
<Function name='ScaleToClipped' return='void' arguments='float fWidth, float fHeight'>
See <Link class='Sprite' function='scaletoclipped' />.
</Function>
</Class>
<Class name='StepsDisplayList'>
<Function name='setfromgamestate' return='void' arguments=''>
@@ -1802,11 +1829,25 @@
<Function name='PlayAnnouncer' return='void' arguments='string sPath'>
Plays a sound from the current announcer.
</Function>
<Function name='PlayMusicPart' return='void' arguments='string musicPath, float musicStart, float musicLength, float fadeIn = 0, float fadeOut = 0'>
Play the sound at <code>musicPath</code> starting from <code>musicStart</code> for
<code>musicLength</code> seconds one time. Both <code>fadeIn</code> and
<code>fadeOut</code> can be customized as required.
</Function>
<Function name='PlayOnce' return='void' arguments='string sPath'>
Play the sound at <code>sPath</code> one time.
</Function>
</Class>
<Class name='GameState'>
<Function name='AddStageToPlayer' return='void' arguments='PlayerNumber pn'>
Adds another stage to the specifed player.
</Function>
<Function name='ApplyPreferredModifiers' return='void' arguments='PlayerNumber pn, string mods'>
Applies the specified modifiers for the specified player's preferred modifier set.
</Function>
<Function name='ApplyStageModifiers' return='void' arguments='PlayerNumber pn, string mods'>
Applies the specified modifiers for the specified player for the current stage.
</Function>
<Function name='AnyPlayerHasRankingFeats' return='bool' arguments=''>
Returns <code>true</code> if any player has performed a feat worthy of ranking.
</Function>
@@ -1817,6 +1858,9 @@
<Function name='ClearStageModifiersIllegalForCourse' return='void' arguments=''>
Removes any stage modifiers that are illegal for course play.
</Function>
<Function name='CurrentOptionsDisqualifyPlayer' return='bool' arguments='PlayerNumber pn'>
Returns <code>true</code> if <code>pn</code>'s options will disqualify them for ranking.
</Function>
<Function name='EnoughCreditsToJoin' return='bool' arguments=''>
Returns <code>true</code> if enough credits have been inserted to join.
</Function>
@@ -1884,6 +1928,9 @@
<Function name='GetDefaultSongOptions' return='string' arguments=''>
Return a string representation of the default song options.
</Function>
<Function name='GetEarnedExtraStage' return='EarnedExtraStage' arguments=''>
Returns the <Link class='ENUM' function='EarnedExtraStage' /> value.
</Function>
<Function name='GetEasiestStepsDifficulty' return='Difficulty' arguments=''>
Return the easiest <Link class='ENUM' function='Difficulty' /> of the
currently selected steps by all players. For example, if player 1 has
@@ -1976,22 +2023,22 @@
Returns the smallest number of stages left for any human player.
</Function>
<Function name='GetSongBeat' theme='_fallback' return='float' arguments=''>
[01 compat.lua] Returns the current beat of the song.
[01 alias.lua] Returns the current beat of the song.
</Function>
<Function name='GetSongBeatNoOffset' theme='_fallback' return='float' arguments=''>
[01 compat.lua] Returns the current beat of the song without an offset.
[01 alias.lua] Returns the current beat of the song without an offset.
</Function>
<Function name='GetSongBeatVisible' return='float' arguments=''>
Returns the current visible beat of the song.
</Function>
<Function name='GetSongBPS' theme='_fallback' return='float' arguments=''>
[01 compat.lua] Returns the song's current beats per second.
[01 alias.lua] Returns the song's current beats per second.
</Function>
<Function name='GetSongDelay' theme='_fallback' return='bool' arguments=''>
[01 compat.lua] Returns <code>true</code> if a delay is active in the song.
[01 alias.lua] Returns <code>true</code> if a delay is active in the song.
</Function>
<Function name='GetSongFreeze' theme='_fallback' return='bool' arguments=''>
[01 compat.lua] Returns <code>true</code> if the song is currently in a freeze.
[01 alias.lua] Returns <code>true</code> if the song is currently in a freeze.
</Function>
<Function name='GetSongOptions' return='string' arguments='ModsLevel ml'>
Returns the song options for the specified ModsLevel as a string.
@@ -2268,6 +2315,9 @@
</Function>
</Class>
<Class name='MenuTimer'>
<Function name='disable' return='void' arguments=''>
Stops the MenuTimer by setting it to 99.99 and pausing.
</Function>
<Function name='GetSeconds' return='float' arguments=''>
Returns the current MenuTimer's value.
</Function>
@@ -2275,11 +2325,17 @@
Pauses the MenuTimer, stopping it from counting down.
</Function>
<Function name='setseconds' return='void' arguments='float fSeconds'>
Compatibility alias for SetSeconds.
</Function>
<Function name='SetSeconds' return='void' arguments='float fSeconds'>
Sets the MenuTimer's value to <code>fSeconds</code>.
</Function>
<Function name='silent' return='void' arguments='bool bSilent'>
Sets the MenuTimer's silent setting to <code>bSilent</code>.
</Function>
<Function name='start' return='void' arguments=''>
Starts up the timer.
</Function>
<Function name='stealth' return='void' arguments='bool bStealth'>
Sets the MenuTimer's stealth setting to <code>bStealth</code>. If
<code>true</code>, the timer will be invisible and silent.
@@ -2301,6 +2357,9 @@
</Function>
</Class>
<Class name='Model'>
<Function name='GetDefaultAnimation' return='string' arguments=''>
Returns the model's default animation.
</Function>
<Function name='loop' return='void' arguments='bool bLoop'>
Controls if the model should loop or not.
</Function>
@@ -2740,20 +2799,6 @@
<Function name='GetTapNoteScores' return='int' arguments='TapNoteScore tns'>
Returns the number of judgments for a specified TapNoteScore.
</Function>
<!-- removed:
<Function name='IsFullComboW1' renamed='true' return='bool' arguments=''>
[01 compat.lua] Returns <code>true</code> if the player got a full combo of all W1s.
</Function>
<Function name='IsFullComboW2' renamed='true' return='bool' arguments=''>
[01 compat.lua] Returns <code>true</code> if the player got a full combo of all W2s.
</Function>
<Function name='IsFullComboW3' renamed='true' return='bool' arguments=''>
[01 compat.lua] Returns <code>true</code> if the player got a full combo of all W3s.
</Function>
<Function name='IsFullComboW4' renamed='true' return='bool' arguments=''>
[01 compat.lua] Returns <code>true</code> if the player got a full combo of all W4s.
</Function>
-->
<Function name='MaxCombo' return='int' arguments=''>
Returns the max combo for this performance.
</Function>
@@ -2995,6 +3040,15 @@
<Function name='GetDisplayWidth' return='int' arguments=''>
Return the width of the display.
</Function>
<Function name='GetFPS' return='int' arguments=''>
Return the FPS.
</Function>
<Function name='GetVPF' return='int' arguments=''>
Return the VPF.
</Function>
<Function name='GetCumFPS' return='int' arguments=''>
Return the cumulative FPS.
</Function>
</Class>
<Class name='RageFile'>
<Description>
@@ -3316,9 +3370,15 @@
<Function name='GetBannerPath' return='string' arguments=''>
Returns the path to the song's banner.
</Function>
<Function name='GetCDImagePath' return='string' arguments=''>
Returns the path to the song's CD image.
</Function>
<Function name='GetCDTitlePath' return='string' arguments=''>
Gets the path to the CDTitle.
</Function>
<Function name='GetDiscPath' return='string' arguments=''>
Returns the path to the song's disc image (different from CD, think Pump).
</Function>
<Function name='GetDisplayArtist' return='string' arguments=''>
Returns the displayed artist of the song.
</Function>
@@ -3346,6 +3406,9 @@
<Function name='GetGroupName' return='string' arguments=''>
Returns the group name that the song is in.
</Function>
<Function name='GetJacketPath' return='string' arguments=''>
Returns the path to the song's jacket image.
</Function>
<Function name='GetLastBeat' return='float' arguments=''>
Returns the last beat of the song.
</Function>
@@ -3412,12 +3475,21 @@
<Function name='HasBGChanges' return='bool' arguments=''>
Returns <code>true</code> if the song has BGChanges.
</Function>
<Function name='HasCDImage' return='bool' arguments=''>
Returns <code>true</code> if the song has a CD image.
</Function>
<Function name='HasCDTitle' return='bool' arguments=''>
Returns <code>true</code> if the song has a CDTitle.
</Function>
<Function name='HasDisc' return='bool' arguments=''>
Returns <code>true</code> if the song has a Disc graphic.
</Function>
<Function name='HasEdits' return='bool' arguments='StepsType st'>
Returns <code>true</code> if the song has edits.
</Function>
<Function name='HasCDJacket' return='bool' arguments=''>
Returns <code>true</code> if the song has a jacket graphic.
</Function>
<Function name='HasLyrics' return='bool' arguments=''>
Returns <code>true</code> if the song has lyrics.
</Function>
@@ -3425,10 +3497,10 @@
Returns <code>true</code> if the song has music.
</Function>
<Function name='HasSignificantBPMChangesOrStops' return='bool' arguments=''>
Returns <code>true</code> if the song has significant elephants or bison.
Returns <code>true</code> if the song has significant BPM changes or stops.
</Function>
<Function name='HasStepsType' return='bool' arguments=''>
Returns <code>true</code> if the song has .
<Function name='HasStepsType' return='bool' arguments='StepsType st'>
Returns <code>true</code> if the song has the specified StepsType.
</Function>
<Function name='IsDisplayBpmConstant' return='bool' arguments=''>
Returns <code>true</code> if the song's DisplayBPM is constant.
@@ -3531,7 +3603,7 @@
<Function name='GetPopularSongs' return='{Song}' arguments=''>
Returns a table of popular songs.
</Function>
<Function name='GetPreferredSortCourses' return='' arguments='CourseType ct, bool bIncludeAutogen'>
<Function name='GetPreferredSortCourses' return='{Course}' arguments='CourseType ct, bool bIncludeAutogen'>
Returns a table of courses as they'd appear in preferred sort.
</Function>
<Function name='GetPreferredSortSongs' return='{Song}' arguments=''>
@@ -3814,13 +3886,13 @@
<Function name='IsAutogen' return='bool' arguments=''>
Returns <code>true</code> if the steps were automatically generated.
</Function>
<Function name='IsDisplayBpmConstant' return='' arguments=''>
<Function name='IsDisplayBpmConstant' return='bool' arguments=''>
Returns <code>true</code> if the DisplayBPM is constant.
</Function>
<Function name='IsDisplayBpmRandom' return='' arguments=''>
<Function name='IsDisplayBpmRandom' return='bool' arguments=''>
Returns <code>true</code> if the DisplayBPM is random.
</Function>
<Function name='IsDisplayBpmSecret' return='' arguments=''>
<Function name='IsDisplayBpmSecret' return='bool' arguments=''>
Returns <code>true</code> if the DisplayBPM is secret.
</Function>
<Function name='PredictMeter' return='float' arguments=''>
@@ -4197,6 +4269,14 @@
Attempts to set the open section to <code>sSection</code>.
</Function>
</Class>
<Class name='WheelItemBase'>
<Function name='GetColor' return='color' arguments=''>
Returns the color of this wheel item.
</Function>
<Function name='GetText' return='string' arguments=''>
Returns the text of this wheel item.
</Function>
</Class>
<Class name='WorkoutGraph'>
<Function name='SetFromCurrentWorkout' return='void' arguments=''>
Sets the WorkoutGraph from the current Workout.
+11 -5
View File
@@ -10,7 +10,7 @@ AJ Kelly as freem
* UserPreferences and some other Lua scripts
* Some small theme edits here and there
* Noteskins (retro, retrobar*)
* Windows project file maintainer
* Windows project file maintainer (mostly)
Midiman
* Did most of the work on _fallback and default themes
@@ -39,7 +39,7 @@ Daisuke Master
* Taking advantage of sm-ssc's new features :)
FSX
* Various fixes. (see Changelog_sm-ssc.txt for more details)
* Various fixes. (see Changelogs for more details)
Nicole Reid (okeeblow)
* Tested building sm-ssc on FreeBSD, provided fixes.
@@ -59,6 +59,9 @@ StepMania Team
* Keeping StepMania 5 alive with changes, and providing a nice codebase for
us to work with.
1a2a3a2a1a
* Various beat mode fixes
Kaox
* Pump/default noteskin
@@ -66,7 +69,7 @@ cesarmades
* Pump/cmd-* noteskins
David Santamaría Rogado (howl)
* Various patches (see Changelog_sm-ssc.txt for more details and links)
* Various patches (see Changelogs for more details and links)
Kita K./D. Trucks
* default theme music
@@ -113,10 +116,13 @@ Tatsh
* A patch to fix building with system ffmpeg
(http://ssc.ajworld.net/sm-ssc/bugtracker/view.php?id=218)
A.C(waiei)
* Hybrid scoring mode
A.C (@waiei)
* Hybrid scoring mode + scoring fixes
* Various patches/fixes/bug reporting
桜為å°é³© (@sakuraponila)
* Scoring fixes
==the beta testers==
[SSC Beta Testing Team]
KeithD
@@ -44,21 +44,23 @@ local oitg = {
}
local contrib = {
"Aldo Fregoso (Aldo_MX)", -- delays
"cerbo",
"Aldo Fregoso (Aldo_MX)", -- delays and much more. StepMania AMX creator
"A.C/@waiei", -- custom scoring fixes + Hybrid scoring
"cerbo", -- lua bindings and other fun stuff
"cesarmades", -- pump/cmd* noteskins
"Chris Eldridge (kurisu)", -- dance-threepanel
"Chris Eldridge (kurisu)", -- dance-threepanel stepstype support
"Christophe Goulet-LeBlanc (Kommisar)", -- songs
"corec", -- various fixes
"galopin", -- piu PlayStation2 usb mat support
"gholms", -- automake 1.11 support
"juanelote", -- SongManager:GetSongGroupByIndex, JumpToNext/PrevGroup logic mods
"Kaox", -- pump/default noteskin
"Petriform", -- Music
"NitroX72", -- pump/frame noteskin
"Petriform", -- default theme music
"桜為小鳩/@sakuraponila", -- custom scoring fixes
"Samuel Kim (1a2a3a2a1a)", -- various beat mode fixes
"sy567", -- beginner helper fix
"v1toko", -- x-mode from StepNXA
"waiei", -- custom scoring fixes + Hybrid scoring
}
local translators = {
@@ -72,6 +74,7 @@ local thanks = {
"Dreamwoods",
"Jason Bolt (LightningXCE)",
"Jousway", -- Noteskins
"Luizsan", -- creator of Delta theme
"Matt1360", -- Automake magic + oitg bro
"Renard",
"Ryan McKanna (Plaguefox)",
@@ -80,13 +83,13 @@ local thanks = {
local shoutout = {
"The Lua team", -- lua project lead or some shit. super nerdy but oh hell.
"Mojang AB", -- minecraft forever -freem
"Wolfire Games", -- piles of inspiration
"NAKET Coder",
"Ciera Boyd", -- you bet your ass I'm putting my girlfriend in the credits
--Image(), -- we should have some logos probably to look super pro
"#KBO",
"Celestia Radio", -- LOVE AND TOLERANCE
"You showed us... your ultimate dance",
-- "Can't stop crying... buckets of tears!"
}
local copyright = {
@@ -146,7 +149,6 @@ creditScroller.BeginCommand=function(self)
SCREENMAN:GetTopScreen():PostScreenMessage( "SM_BeginFadingOut", (t.SecondsPerItem * (#t + item_padding_start) + 5) );
end;
return Def.ActorFrame{
creditScroller..{
InitCommand=cmd(CenterX;y,SCREEN_BOTTOM-64),
@@ -148,31 +148,3 @@ function InitUserPrefs()
SetUserPref("UserPrefScoringMode", 'DDR Extreme');
end;
end;
function UserPrefScoringMode()
local baseChoices = { 'DDR 1stMIX', 'DDR 4thMIX', 'DDR Extreme', 'DDR SuperNOVA', 'DDR SuperNOVA 2', 'MIGS', 'HYBRID' }; --'[SSC] Radar Master'
local t = {
Name = "UserPrefScoringMode";
LayoutType = "ShowAllInRow";
SelectType = "SelectOne";
OneChoiceForAllPlayers = true;
ExportOnChange = false;
Choices = baseChoices;
LoadSelections = function(self, list, pn)
if ReadPrefFromFile("UserPrefScoringMode") ~= nil then
local theValue = ReadPrefFromFile("UserPrefScoringMode");
local success = false;
for k,v in ipairs(baseChoices) do if v == theValue then list[k] = true success = true break end end;
if success == false then list[1] = true end;
else
WritePrefToFile("UserPrefScoringMode", 'DDR Extreme');
list[1] = true;
end;
end;
SaveSelections = function(self, list, pn)
for k,v in ipairs(list) do if v then WritePrefToFile("UserPrefScoringMode", baseChoices[k]) break end end;
end;
};
setmetatable( t, t );
return t;
end
+186 -150
View File
@@ -11,7 +11,14 @@ function GetTotalItems(radars)
local total = radars:GetValue('RadarCategory_TapsAndHolds')
total = total + radars:GetValue('RadarCategory_Holds')
total = total + radars:GetValue('RadarCategory_Rolls')
total = total + radars:GetValue('RadarCategory_Lifts')
-- [ja] Liftを加えると一部二重加算になるため除外する。
-- total = total + radars:GetValue('RadarCategory_Lifts')
-- [en] prevent divide by 0
-- [ja] 0除算対策(しなくても動作するけど満点になっちゃうんで)
if total <= 0 then
total = 1
end;
return total
end;
@@ -29,61 +36,44 @@ function GetDirectRadar(player)
end;
-----------------------------------------------------------
--DDR 1st Mix and 2nd Mix Scoring
--Oldschool scoring, best described as a modified 4th mix scheme
--with a little 1st mix influence
-----------------------------------------------------------
r['DDR 1stMIX'] = function(params, pss)
local dCombo = math.floor((pss:GetCurrentCombo()+1)/4);
local bScore = (dCombo^2+1) * 100;
local multLookup =
{
['TapNoteScore_W1']=3,
['TapNoteScore_W2']=3,
['TapNoteScore_W3']=1
};
setmetatable(multLookup, ZeroIfNotFound);
--if score increases above the boundaries of a 32-bit signed
--(about 2.15 billion), it stops increasing. Conveniently,
--1st Mix clamped score as well.
local capScore = 999999999;
local bestScore = bScore * multLookup['TapNoteScore_W1'];
local localScore = bScore * multLookup[params.TapNoteScore];
pss:SetCurMaxScore(clamp(pss:GetCurMaxScore()+(bestScore),0,capScore));
pss:SetScore(clamp(pss:GetScore()+(localScore),0,capScore));
end;
-----------------------------------------------------------
--DDR 4th Mix/Extra Mix/Konamix/GB3/DDRPC Scoring
-----------------------------------------------------------
r['DDR 4thMIX'] = function(params, pss)
r['Oldschool'] = function(params, pss)
local bestPoints = 999
local scoreLookupTable =
{
['TapNoteScore_W1']=777,
['TapNoteScore_W2']=777,
['TapNoteScore_W3']=555
['TapNoteScore_W1']=999,
['TapNoteScore_W2']=IsW1Allowed('TapNoteScore_W2') and 888 or 999,
['TapNoteScore_W3']=777,
['TapNoteScore_W4']=555,
['TapNoteScore_W5']=111,
};
setmetatable(scoreLookupTable, ZeroIfNotFound);
-- TODO: Modify this so that current max assumes full combo?
local comboBonusForThisStep = (pss:GetCurrentCombo()+1)*333;
local capScore = 999999999;
local bestPoints = scoreLookupTable['TapNoteScore_W1'];
local bestCombo = bestPoints and comboBonusForThisStep or 0;
pss:SetCurMaxScore(clamp(pss:GetCurMaxScore()+bestPoints+bestCombo,0,capScore));
local localPoints = scoreLookupTable[params.TapNoteScore];
local localCombo = localPoints and comboBonusForThisStep or 0;
pss:SetScore(clamp(pss:GetScore()+localPoints+localCombo,0,capScore));
local comboBonusForThisStep = (pss:GetCurrentCombo()*111)^1.1;
local capScore = 1000000000;
pss:SetCurMaxScore(capScore); --i don't really care about weird scoring modes -fsx
local pointsGot = comboBonusForThisStep + scoreLookupTable[params.TapNoteScore] + (params.HoldNoteScore == 'HoldNoteScore_Held' and 777 or 0);
pss:SetScore(clamp(pss:GetScore()+pointsGot,0,capScore));
end;
-----------------------------------------------------------
--DDR MAX2/Extreme Scoring
--DDR MAX2/Extreme(-esque) Scoring by @sakuraponila
-----------------------------------------------------------
local ext_Steps = {0,0};
r['DDR Extreme'] = function(params, pss)
local judgmentBase = {
local multLookup =
{
['TapNoteScore_W1'] = 10,
['TapNoteScore_W2'] = 9,
['TapNoteScore_W3'] = 5
};
setmetatable(judgmentBase, ZeroIfNotFound);
setmetatable(multLookup, ZeroIfNotFound);
local steps = GAMESTATE:GetCurrentSteps(params.Player);
local radarValues = steps:GetRadarValues(params.Player);
local radarValues = GetDirectRadar(params.Player);
local totalItems = GetTotalItems(radarValues);
-- 1 + 2 + 3 + ... + totalItems value/の値
local sTotal = (totalItems + 1) * totalItems / 2;
local meter = steps:GetMeter();
if (steps:IsAnEdit()) then
meter = 5;
@@ -92,39 +82,62 @@ r['DDR Extreme'] = function(params, pss)
elseif (meter > 10) then
meter = 10;
end;
local baseScore = meter * 1000000;
-- [en] score for one step
-- [ja] 1ステップあたりのスコア
local baseScore = meter * 1000000
if (GAMESTATE:GetCurrentSong():IsMarathon()) then
baseScore = baseScore * 3;
elseif (GAMESTATE:GetCurrentSong():IsLong()) then
baseScore = baseScore * 2;
end;
local totalItems = GetTotalItems(radarValues);
local singleStep = (1 + totalItems) * totalItems / 2;
if (not Shared.CurrentStep) then
Shared.CurrentStep = {};
Shared.CurrentStep["P1"] = 0;
Shared.CurrentStep["P2"] = 0;
end;
local pn = PlayerNumberToString(params.Player);
Shared.CurrentStep[pn] = Shared.CurrentStep[pn] + 1;
local stepValue = math.floor(baseScore /singleStep);
local stepLast = stepValue * Shared.CurrentStep[pn];
pss:SetCurMaxScore(pss:GetCurMaxScore() +
(stepLast * judgmentBase['TapNoteScore_W1']));
local judgeScore = 0;
if (params.HoldNoteScore == 'HoldNoteScore_Held') then
judgeScore = judgmentBase['TapNoteScore_W1'];
local sOne = math.floor(baseScore / sTotal);
-- [en] measures for 5 points of units
-- [ja] 5点単位のための処置
sOne = sOne - sOne % 5;
-- [en] because fractions are added by the last step, get value
-- [ja] 端数は最後の1ステップで加算するのでその値を取得
local sLast = baseScore - (sOne * sTotal);
local p;
if params.Player == 'PlayerNumber_P1' then
p = 1;
else
judgeScore = judgmentBase[params.TapNoteScore];
if (IsW1Allowed(params.TapNoteScore)) then
judgeScore = judgmentBase['TapNoteScore_W1'];
p = 2;
end;
-- [en] initialized when score is 0
-- [ja] スコアが0の時に初期化
if pss:GetScore() == 0 then
ext_Steps[p] = 0;
end;
-- [en] now step count
-- [ja] 現在のステップ数
ext_Steps[p] = ext_Steps[p] + 1;
-- [en] current score
-- [ja] 今回加算するスコア(W1の時)
local vScore = sOne * ext_Steps[p];
pss:SetCurMaxScore(pss:GetCurMaxScore() + vScore);
-- [ja] 判定によって加算量を変更
if (params.HoldNoteScore == 'HoldNoteScore_Held') then
-- [ja] O.K.判定時は問答無用で満点
vScore = vScore;
else
-- [ja] N.G.判定時は問答無用で0点
if (params.HoldNoteScore == 'HoldNoteScore_LetGo') then
vScore = 0;
-- [en] non-long note scoring
-- [ja] それ以外ということは、ロングノート以外の判定である
else
vScore = vScore * multLookup[params.TapNoteScore] / 10
end;
end;
local stepScore = judgeScore * stepLast;
pss:SetScore(pss:GetScore() + stepScore);
if (Shared.CurrentStep[pn] >= totalItems) then -- Just in case.
-- TODO: Implement the bonus for the last step?
Shared.CurrentStep[pn] = 0; -- Reset for the next song.
-- [en] measures for 5 points of units
-- [ja] ここでも5点単位のための処置
vScore = vScore - vScore % 5
pss:SetScore(pss:GetScore() + vScore);
-- if one of the last step, add the fractions
-- [ja] 最後の1ステップの場合、端数を加算する
if ((vScore > 0) and (ext_Steps[p] == totalItems)) then
pss:SetScore(pss:GetScore() + sLast);
end;
end;
@@ -132,7 +145,7 @@ end;
--HYBRID Scoring, contributed by @waiei
-----------------------------------------------------------
local hyb_Steps={0,0};
r['HYBRID'] = function(params, pss)
r['Hybrid'] = function(params, pss)
local multLookup =
{
['TapNoteScore_W1'] = 10,
@@ -141,8 +154,7 @@ r['HYBRID'] = function(params, pss)
};
setmetatable(multLookup, ZeroIfNotFound);
local radarValues = GetDirectRadar(params.Player);
-- [ja] GetTotalItems(radarValues) に Liftも含まれているので 引いておく
local totalItems = GetTotalItems(radarValues) - radarValues:GetValue('RadarCategory_Lifts');
local totalItems = GetTotalItems(radarValues);
-- 1+2+3+...+totalItems value/の値
local sTotal = (totalItems+1)*totalItems/2;
-- [en] Score for one song
@@ -151,9 +163,13 @@ r['HYBRID'] = function(params, pss)
-- [ja] 端数は最後の1ステップで加算するのでその値を取得
local sLast = 100000000-(sOne*sTotal);
local p = (params.Player == 'PlayerNumber_P1') and 1 or 2
local p;
if params.Player=='PlayerNumber_P1' then
p=1;
else
p=2;
end;
-- [en] Initialize score if 0.
-- [ja] スコアが0の時に初期化
if pss:GetScore()==0 then
hyb_Steps[p]=0;
@@ -184,26 +200,81 @@ r['HYBRID'] = function(params, pss)
end;
-----------------------------------------------------------
--DDR SuperNOVA(-esque) scoring
--DDR SuperNOVA scoring (Use MARVELOUS) by @sakuraponila
-----------------------------------------------------------
local sntmp_Score = {0,0};
local sntmp_Steps = {0,0};
r['DDR SuperNOVA'] = function(params, pss)
local multLookup =
{
['TapNoteScore_W1'] = 3,
['TapNoteScore_W2'] = 2,
['TapNoteScore_W3'] = 1
};
setmetatable(multLookup, ZeroIfNotFound);
local radarValues = GetDirectRadar(params.Player);
local totalItems = GetTotalItems(radarValues)
local p;
if params.Player == 'PlayerNumber_P1' then
p = 1;
else
p = 2;
end;
-- initialized when score is 0
-- [ja] スコアが0の時に初期化
if pss:GetScore() == 0 then
sntmp_Score[p] = 0;
sntmp_Steps[p] = 0;
end;
-- [ja] 判定によって加算量を変更
local maxAdd = 0;
-- [ja] O.K.判定時は問答無用で満点
if params.HoldNoteScore == 'HoldNoteScore_Held' then
maxAdd = 3;
else
-- [ja] N.G.判定時は問答無用で0点
if params.HoldNoteScore == 'HoldNoteScore_LetGo' then
maxAdd = 0;
-- [ja] それ以外ということは、ロングノート以外の判定である
else
maxAdd = multLookup[params.TapNoteScore];
end
end;
sntmp_Score[p] = sntmp_Score[p] + maxAdd;
-- [ja] 踏み踏みしたステップ数
sntmp_Steps[p] = sntmp_Steps[p] + 1;
-- [ja] 現時点での、All W1判定の時のスコア
pss:SetCurMaxScore(math.floor(10000000 * sntmp_Steps[p] / totalItems / 3));
-- [ja] 計算して代入
pss:SetScore(math.floor(10000000 * sntmp_Score[p] / totalItems / 3));
end;
-----------------------------------------------------------
--DDR SuperNOVA 2 scoring by @waiei
-----------------------------------------------------------
local sn2tmp_Sub={0,0};
local sn2tmp_Score={0,0};
local sn2tmp_Steps={0,0};
r['DDR SuperNOVA'] = function(params, pss)
r['DDR SuperNOVA 2'] = function(params, pss)
local multLookup =
{
['TapNoteScore_W1'] = 1,
['TapNoteScore_W2'] = 1,
['TapNoteScore_W3'] = 0.5
['TapNoteScore_W1'] = 10,
['TapNoteScore_W2'] = 10,
['TapNoteScore_W3'] = 5
};
setmetatable(multLookup, ZeroIfNotFound);
local radarValues = GetDirectRadar(params.Player);
local totalItems = GetTotalItems(radarValues);
local p;
if params.Player=='PlayerNumber_P1' then
p=1;
else
p=2;
end;
if totalItems < 0 then totalItems = 1; end
local p = (params.Player == 'PlayerNumber_P1') and 1 or 2
-- [en] Initialize score if 0.
-- [ja] スコアが0の時に初期化
if pss:GetScore()==0 then
sn2tmp_Sub[p]=0;
@@ -213,7 +284,6 @@ r['DDR SuperNOVA'] = function(params, pss)
-- [ja] maxAdd は 加算する最高点を 10 とした時の値(つまり、10=100% / 5=50%
local maxAdd = 0;
-- [ja] O.K.判定時は問答無用で満点
if params.HoldNoteScore == 'HoldNoteScore_Held' then
maxAdd = 10;
@@ -229,7 +299,7 @@ r['DDR SuperNOVA'] = function(params, pss)
sn2tmp_Sub[p]=sn2tmp_Sub[p]+1;
end;
end
end
end;
sn2tmp_Score[p]=sn2tmp_Score[p]+maxAdd;
-- [ja] 踏み踏みしたステップ数
sn2tmp_Steps[p]=sn2tmp_Steps[p]+1;
@@ -239,62 +309,7 @@ r['DDR SuperNOVA'] = function(params, pss)
-- [ja] 計算して代入
pss:SetScore((math.floor(10000*sn2tmp_Score[p]/totalItems) * 10) - (sn2tmp_Sub[p]*10) );
end;
-----------------------------------------------------------
--DDR SuperNOVA 2(-esque) scoring
-----------------------------------------------------------
local sn2tmp_Sub=0;
local sn2tmp_Score=0;
local sn2tmp_Steps=0;
r['DDR SuperNOVA 2'] = function(params, pss)
local multLookup =
{
['TapNoteScore_W1'] = 10,
['TapNoteScore_W2'] = 10,
['TapNoteScore_W3'] = 5
};
setmetatable(multLookup, ZeroIfNotFound);
local radarValues = GetDirectRadar(params.Player);
-- [ja] GetTotalItems(radarValues) に Liftも含まれているので 引いておく
local totalItems = GetTotalItems(radarValues) - radarValues:GetValue('RadarCategory_Lifts');
-- [ja] 0除算対策(しなくても動作するけど満点になっちゃうんで)
if totalItems <= 0 then
totalItems=1
end;
-- [ja] スコアが0の時に初期化
if pss:GetScore() == 0 then
sn2tmp_Sub=0;
sn2tmp_Score=0;
sn2tmp_Steps=0;
end;
-- [ja] maxAdd は 加算する最高点を 10 とした時の値(つまり、10=100% / 5=50%
local maxAdd = 0;
-- [ja] O.K.判定時は問答無用で満点
if params.HoldNoteScore == 'HoldNoteScore_Held' then
maxAdd = 10;
else
-- [ja] N.G.判定時は問答無用で0点
if params.HoldNoteScore == 'HoldNoteScore_LetGo' then
maxAdd = 0;
-- [ja] それ以外ということは、ロングノート以外の判定である
else
maxAdd = multLookup[params.TapNoteScore];
if (params.TapNoteScore == 'TapNoteScore_W2') or (params.TapNoteScore=='TapNoteScore_W3') then
-- [ja] W2とW3の数を記録
sn2tmp_Sub=sn2tmp_Sub+1;
end;
end
end;
sn2tmp_Score=sn2tmp_Score+maxAdd;
-- [ja] 踏み踏みしたステップ数
sn2tmp_Steps=sn2tmp_Steps+1;
-- [ja] 現時点での、All W1判定の時のスコア
pss:SetCurMaxScore(math.floor(10000*sn2tmp_Steps/totalItems) * 10);
-- [ja] 計算して代入
pss:SetScore((math.floor(10000*sn2tmp_Score/totalItems) * 10) - (sn2tmp_Sub*10) );
end;
-----------------------------------------------------------
--Radar Master (disabled; todo: get this working with StepMania 5)
-----------------------------------------------------------
@@ -343,12 +358,13 @@ r['MIGS'] = function(params,pss)
curScore = curScore + ( pss:GetTapNoteScores(k) * v );
end;
curScore = math.max(0,curScore + ( pss:GetHoldNoteScores('HoldNoteScore_Held') * 6 ));
pss:SetScore(curScore);
end;
--------------------------------------------------------------
--1bilDP scoring because I can.
--------------------------------------------------------------
r['1bilDP']= function(params,pss)
r['Billions DP']= function(params,pss)
local poss = pss:GetPossibleDancePoints()
pss:SetScore(math.floor((pss:GetActualDancePoints()/poss)*1000000000))
pss:SetCurMaxScore(math.floor((pss:GetCurrentPossibleDancePoints()/poss)*1000000000))
@@ -356,14 +372,34 @@ end
-------------------------------------------------------------------------------
-- Formulas end here.
for v in ivalues(DisabledScoringModes) do r[v] = nil end
Scoring = {}
setmetatable(Scoring, {
__metatable = { "Letting you change the metatable sort of defeats the purpose." },
__index = function(tbl, key)
for v in ivalues(DisabledScoringModes) do
if key == v then return r['DDR Extreme'] end
end
return r[key]
end,
}
);
Scoring = r;
function UserPrefScoringMode()
local baseChoices = {}
for k,v in pairs(Scoring) do table.insert(baseChoices,k) end
if next(baseChoices) == nil then UndocumentedFeature "No scoring modes available" end
local t = {
Name = "UserPrefScoringMode";
LayoutType = "ShowAllInRow";
SelectType = "SelectOne";
OneChoiceForAllPlayers = true;
ExportOnChange = false;
Choices = baseChoices;
LoadSelections = function(self, list, pn)
if ReadPrefFromFile("UserPrefScoringMode") ~= nil then
local theValue = ReadPrefFromFile("UserPrefScoringMode");
local success = false;
for k,v in ipairs(baseChoices) do if v == theValue then list[k] = true success = true break end end;
if success == false then list[1] = true end;
else
WritePrefToFile("UserPrefScoringMode", baseChoices[1]);
list[1] = true;
end;
end;
SaveSelections = function(self, list, pn)
for k,v in ipairs(list) do if v then WritePrefToFile("UserPrefScoringMode", baseChoices[k]) break end end;
end;
};
setmetatable( t, t );
return t;
end
+3
View File
@@ -3654,6 +3654,9 @@ Beat0OffsetFormat="%s:\n %.3f secs\n"
PreviewStartFormat="%s:\n %.3f secs\n"
PreviewLengthFormat="%s:\n %.3f secs\n"
FadeInPreview=0
FadeOutPreview=1.5
[ScreenPracticeMenu]
Fallback="ScreenEditMenu"
Class="ScreenEditMenu"
@@ -44,10 +44,11 @@ local oitg = {
}
local contrib = {
"Aldo Fregoso (Aldo_MX)", -- delays
"cerbo",
"Aldo Fregoso (Aldo_MX)", -- delays and much more. StepMania AMX creator
"A.C (@waiei)", -- custom scoring fixes + Hybrid scoring
"cerbo", -- lua bindings and other fun stuff
"cesarmades", -- pump/cmd* noteskins
"Chris Eldridge (kurisu)", -- dance-threepanel
"Chris Eldridge (kurisu)", -- dance-threepanel stepstype support
"Christophe Goulet-LeBlanc (Kommisar)", -- songs
"corec", -- various fixes
"galopin", -- piu PlayStation2 usb mat support
@@ -55,10 +56,11 @@ local contrib = {
"juanelote", -- SongManager:GetSongGroupByIndex, JumpToNext/PrevGroup logic mods
"Kaox", -- pump/default noteskin
"NitroX72", -- pump/frame noteskin
"Petriform", -- Music
"Petriform", -- default theme music
"桜為小鳩 (@sakuraponila)", -- custom scoring fixes
"Samuel Kim (1a2a3a2a1a)", -- various beat mode fixes
"sy567", -- beginner helper fix
"v1toko", -- x-mode from StepNXA
"waiei", -- custom scoring fixes + Hybrid scoring
}
local translators = {
@@ -72,6 +74,7 @@ local thanks = {
"Dreamwoods",
"Jason Bolt (LightningXCE)",
"Jousway", -- Noteskins
"Luizsan", -- creator of Delta theme
"Matt1360", -- Automake magic + oitg bro
"Renard",
"Ryan McKanna (Plaguefox)",
@@ -87,7 +90,6 @@ local shoutout = {
"#KBO",
"Celestia Radio", -- LOVE AND TOLERANCE
"You showed us... your ultimate dance",
-- "Can't stop crying... buckets of tears!"
}
local copyright = {
@@ -147,7 +149,6 @@ creditScroller.BeginCommand=function(self)
SCREENMAN:GetTopScreen():PostScreenMessage( "SM_BeginFadingOut", (t.SecondsPerItem * (#t + item_padding_start) + 5) );
end;
return Def.ActorFrame{
creditScroller..{
InitCommand=cmd(CenterX;y,SCREEN_BOTTOM-64),
+106 -111
View File
@@ -3,11 +3,60 @@
verbose=0
msg=
notify=0
s_configure=
s_stepmania=
s_data=
s_rebuild=
s_ffmpeg=
num_jobs=1
usage () {
echo "Usage: $0 [OPTION] [-- [CONFIGURE_OPTIONS]]"
echo 'Build StepMania.'
echo "CONFIGURE_OPTIONS are passed to StepMania's configure."
echo ''
echo ' -c, --configure stop after configuring StepMania.'
echo ' -s, --stepmania stop after building StepMania'
echo ' (do not copy binaries).'
echo ' -d, --data generate GameData.smzip.'
echo ' -r, --rebuild rebuild StepMania (soft).'
echo ' -f, --ffmpeg build with ffmpeg 0.6.1.'
echo ' -j#, --jobs=# pass -j# to make.'
echo ' -h, --help print this help and exit.'
echo ' -v, --verbose increase verbosity (up to 2).'
echo ' --version print version and exit.'
exit $1
}
if which notify-send >/dev/null 2>&1; then
#Comment the following line out to disable notify.
notify=1
fi
if which getopt >/dev/null 2>&1; then
set -- `getopt -l configure,stepmania,data,rebuild,ffmpeg,help \
-l jobs::,verbose,version -- drfcshj::v $*`
fi
while [ $# -gt 0 ]; do
arg=$1
shift
case $arg in
-c|--configure) s_configure=yes ;;
-s|--stepmania) s_stepmania=yes ;;
-d|--data) s_data=yes ;;
-r|--rebuild) s_rebuild=yes ;;
-f|--ffmpeg) s_ffmpeg=yes ;;
-h|--help) usage 0 ;;
-j|--jobs) num_jobs=$1; shift ;;
-v|--verbose) verbose=$[verbose+1] ;;
--version) version ;;
--) break ;;
*) usage 1 ;;
esac
done
message () {
msg=$1
if [ $verbose -gt 0 ]; then
@@ -15,7 +64,7 @@ message () {
else
echo -n "$msg..."
fi
if [ $notify -gt 0 ]; then
if [ $notify -gt 0 ] && [ $verbose -eq 0 ]; then
notify-send "StepMania build script" "$msg..."
fi
}
@@ -26,7 +75,7 @@ success () {
else
echo okay.
fi
if [ $notify -gt 0 ]; then
if [ $notify -gt 0 ] && [ $verbose -eq 0 ]; then
notify-send "StepMania build script" "$msg...okay."
fi
}
@@ -41,11 +90,11 @@ failure () {
echo "$msg...failed$error"
else
echo failed$error
echo "Consider passing --verbose to $0. Pass --help for details."
fi
if [ $notify -gt 0 ]; then
if [ $notify -gt 0 ] && [ $verbose -eq 0 ]; then
notify-send "StepMania build script failed" "$msg...failed$error"
fi;
echo "Consider passing --verbose to $0. Pass --help for details."
exit 1
}
@@ -61,115 +110,55 @@ call () {
success
}
usage () {
echo "Usage: $0 [OPTION] [-- [CONFIGURE_OPTIONS]]"
echo 'Build StepMania with a statically linked ffmpeg.'
echo "CONFIGURE_OPTIONS are passed to StepMania's configure."
echo ''
echo ' -d, --download stop after ffmpeg download.'
echo ' -f, --ffmpeg stop after building ffmpeg.'
echo ' -c, --configure stop after configuring StepMania.'
echo ' -s, --stepmania stop after building StepMania'
echo ' (do not copy binaries).'
echo ' -j#, --jobs=# pass -j# to make.'
echo ' -h, --help print this help and exit.'
echo ' -v, --verbose increase verbosity (up to 2).'
echo ' --version print version and exit.'
exit $1
}
version () {
echo 'build.sh (StepMania) 2.62'
echo 'build.sh (StepMania) 2.63'
echo 'Copyright (C) 2006-2009 Steve Checkoway'
echo 'StepMania is Copyright (C) 2001-2011 Chris Danford et al.'
echo 'sm-ssc is Copyright (C) 2009-2011 the spinal shark collective'
exit 0
}
if ! test -x configure; then
msg='Checking for configure'
verbose=1
failure 'file not found.'
fi
if which getopt >/dev/null 2>&1; then
set -- `getopt -l download,ffmpeg,configure,stepmania,help \
-l jobs::,verbose,version -- dfcshj::v $*`
fi
s_download=
s_ffmpeg=
s_configure=
s_stepmania=
num_jobs=1
while [ $# -gt 0 ]; do
arg=$1
shift
case $arg in
-d|--download) s_download=yes ;;
-f|--ffmpeg) s_ffmpeg=yes ;;
-c|--configure) s_configure=yes ;;
-s|--stepmania) s_stepmania=yes ;;
-h|--help) usage 0 ;;
-j|--jobs) num_jobs=$1; shift ;;
-v|--verbose) verbose=$[verbose+1] ;;
--version) version ;;
--) break ;;
*) usage 1 ;;
esac
done
version=0.6.1
ffmpeg=ffmpeg-$version
directory=http://ffmpeg.org/releases
if [ ! -d $ffmpeg ]; then
message 'Downloading ffmpeg'
if which bzip2 &>/dev/null; then
zipcommand=jxf
ffmarc=ffmpeg-$version.tar.bz2
elif which gzip &>/dev/null; then
zipcommand=zxf
ffmarc=ffmpeg-$version.tar.gz
if [ -n "$s_data" ]; then
message 'Generating GameData.smzip'
if [ -f _build/Makefile ]; then
cd _build
call make dist-hook
mv ./GameData.smzip ../
cd ..
else
failure 'Install either bzip2 or gzip.'
failure "You need to configure StepMania first."
fi
if which curl &>/dev/null; then
get='curl -O'
elif which wget &>/dev/null; then
get=wget
else
failure 'Install either curl or wget.'
fi
call $get $directory/$ffmarc
message 'Extracting ffmpeg'
call tar -$zipcommand $ffmarc
message 'Cleaning up temporary files'
call rm $ffmarc
exit 0
fi
if [ -n "$s_download" ]; then exit 0; fi
args='--enable-static --disable-debug
--enable-memalign-hack --disable-network --enable-small
--disable-encoders --disable-ffserver
--enable-demuxer=avi
--enable-demuxer=h261 --enable-demuxer=h263 --enable-demuxer=h264
--enable-demuxer=m4v --enable-demuxer=mjpeg --enable-demuxer=mov
--enable-demuxer=mpegps --enable-demuxer=mpegts
--enable-demuxer=mpegvideo --enable-demuxer=ogg
--enable-demuxer=rawvideo --enable-demuxer=yuv4mpegpipe
--enable-decoder=h261 --enable-decoder=h263
--enable-decoder=h263i --enable-decoder=h264 --enable-decoder=huffyuv
--enable-decoder=mjpeg --enable-decoder=mjpegb
--enable-decoder=mpeg_xvmc --enable-decoder=mpeg1video
--enable-decoder=mpeg2video --enable-decoder=mpeg4
--enable-decoder=mpegvideo --enable-decoder=msmpeg4v1
--enable-decoder=msmpeg4v2 --enable-decoder=msmpeg4v3
--enable-decoder=rawvideo --enable-decoder=theora
--enable-parser=h261 --enable-parser=h263 --enable-parser=h264
--enable-parser=mjpeg --enable-parser=mpeg4video
--enable-parser=mpegaudio --enable-parser=mpegvideo
--enable-parser=ac3
--extra-cflags=-Dattribute_deprecated='
if [ ! -f $ffmpeg/_inst/lib/libavcodec.a ]; then
if [ -n "$s_ffmpeg" ]; then
ffversion=0.6.1
ffmpeg=ffmpeg-$ffversion
if [ ! -d $ffmpeg ]; then
message 'Downloading ffmpeg'
if which bzip2 &>/dev/null; then
zipcommand=jxf
ffmarc=$ffmpeg.tar.bz2
elif which gzip &>/dev/null; then
zipcommand=zxf
ffmarc=$ffmpeg.tar.gz
else
failure 'Install either bzip2 or gzip.'
fi
if which wget &>/dev/null; then
get=wget
elif which curl &>/dev/null; then
get='curl -O'
else
failure 'Install either curl or wget.'
fi
call $get "http://ffmpeg.org/releases/$ffmarc"
message 'Extracting ffmpeg'
call tar -$zipcommand $ffmarc
message 'Cleaning up temporary files'
# call rm $ffmarc
fi
args="--enable-static --enable-gpl --enable-version3 --enable-nonfree --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid --disable-debug --enable-memalign-hack --disable-network --enable-small --disable-encoders --disable-ffserver --extra-cflags=-Dattribute_deprecated="
cd $ffmpeg
message 'Configuring ffmpeg'
call ./configure --prefix="`pwd`/_inst" $args
@@ -177,27 +166,33 @@ if [ ! -f $ffmpeg/_inst/lib/libavcodec.a ]; then
call make --jobs="$num_jobs" install-libs install-headers
cd ..
fi
if [ -n "$s_ffmpeg" ]; then exit 0; fi
if [ ! -f _build/src/config.h ]; then
if [ ! -f _build/src/config.h ] || [ -n "$s_rebuild" ]; then
message 'Configuring StepMania'
mkdir -p _build
cd _build
call ../configure --with-ffmpeg=../$ffmpeg/_inst "$@"
if [ -n "$s_ffmpeg" ]; then
call ../configure --with-ffmpeg=../$ffmpeg/_inst "$@"
else
call ../configure "$@"
fi
cd ..
fi
if [ -n "$s_configure" ]; then exit 0; fi
if [ ! -f _build/src/stepmania ]; then
if [ ! -f _build/src/stepmania ] || [ -n "$s_rebuild" ]; then
message 'Building StepMania'
cd _build || failure
cd _build
call make --jobs="$num_jobs"
cd ..
fi
if [ -n "$s_stepmania" ]; then exit 0; fi
if [ ! -f stepmania -o ! -f GtkModule.so ]; then
if [ ! -f stepmania -o ! -f GtkModule.so ] || [ -n "$s_rebuild" ]; then
message 'Copying StepMania binaries'
call cp _build/src/stepmania .
# todo: check for existence of GtkModule.so -freem
#_build/src/GtkModule.so . # we tend to not have this file!
cp _build/src/stepmania .
if [ -e _build/src/GtkModule.so ]; then
cp _build/src/GtkModule.so . # we tend to not have this file!
fi
success
fi
Regular → Executable
+6 -9
View File
@@ -21,18 +21,16 @@ cp -dpR autoconf $PRODUCTVER/
#cp -dpR Utils $PRODUCTVER/
cp -dpR src $PRODUCTVER/
cp Docs/Copying.MAD Docs/Licenses.txt Makefile.am aclocal.m4 \
configure Makefile.in configure.ac $PRODUCTVER
cp Docs/Copying.MAD Docs/Licenses.txt Docs/Changelog_sm5.txt \
Docs/Changelog_sm-ssc.txt Docs/Changelog_SSCformat.txt \
Docs/credits.txt Docs/KnownIssues.txt \
Makefile.am aclocal.m4 configure Makefile.in configure.ac \
$PRODUCTVER
echo Pruning...
cd $PRODUCTVER/src
# Obsolete and going away:
rm -rf SDL-1.2.5
rm -rf SDL-1.2.6
# Incomplete:
rm -rf Texture Font Generator
# Xbox:
rm -rf SDLx-0.02
# Unused:
rm -rf smlobby
@@ -46,12 +44,11 @@ rm -rf vorbis
rm -rf BaseClasses
rm -rf ddk
rm -rf smpackage
rm -rf sdl_xbox_includes
rm -rf SDLx-0.02.rar
cd ..
find . -type d -name 'CVS' | xargs rm -rf
find . -type d -name '.svn' | xargs rm -rf
find . -type f -name '*.lib' | xargs rm -rf
find . -type f -name '*.exe' | xargs rm -rf
find . -type f -name '*.a' | xargs rm -rf
-6
View File
@@ -670,12 +670,6 @@ FunctionEnd
Function .onInit
nsisos::osversion
${If} $R0 >= 6
;vista & win7
StrCpy $INSTDIR "%HOMEPATH%\${PRODUCT_ID}"
${EndIf}
; Force show language selection for debugging
;!define MUI_LANGDLL_ALWAYSSHOW
!insertmacro MUI_LANGDLL_DISPLAY
+38 -3
View File
@@ -807,9 +807,43 @@ public:
p->DimMusic( fVolume, fDurationSeconds );
return 0;
}
static int PlayOnce( T* p, lua_State *L ) { RString sPath = SArg(1); p->PlayOnce( sPath ); return 0; }
static int PlayAnnouncer( T* p, lua_State *L ) { RString sPath = SArg(1); p->PlayOnceFromAnnouncer( sPath ); return 0; }
static int GetPlayerBalance( T* p, lua_State *L ) { PlayerNumber pn = Enum::Check<PlayerNumber>(L, 1); lua_pushnumber( L, p->GetPlayerBalance(pn) ); return 1; }
static int PlayOnce( T* p, lua_State *L )
{
RString sPath = SArg(1);
p->PlayOnce( sPath );
return 0;
}
static int PlayAnnouncer( T* p, lua_State *L )
{
RString sPath = SArg(1);
p->PlayOnceFromAnnouncer( sPath );
return 0;
}
static int GetPlayerBalance( T* p, lua_State *L )
{
PlayerNumber pn = Enum::Check<PlayerNumber>(L, 1);
lua_pushnumber( L, p->GetPlayerBalance(pn) );
return 1;
}
static int PlayMusicPart( T* p, lua_State *L )
{
RString musicPath = SArg(1);
float musicStart = FArg(2);
float musicLength = FArg(3);
float fadeIn = 0;
float fadeOut = 0;
if (lua_gettop(L) >= 4 && !lua_isnil(L,4))
{
fadeIn = FArg(4);
if (lua_gettop(L) >= 5 && !lua_isnil(L,5))
{
fadeOut = FArg(5);
}
}
p->PlayMusic(musicPath, NULL, false, musicStart, musicLength,
fadeIn, fadeOut);
return 0;
}
LunaGameSoundManager()
{
@@ -817,6 +851,7 @@ public:
ADD_METHOD( PlayOnce );
ADD_METHOD( PlayAnnouncer );
ADD_METHOD( GetPlayerBalance );
ADD_METHOD( PlayMusicPart );
}
};
+1 -1
View File
@@ -253,7 +253,7 @@ static void LoadFromSMNoteDataStringWithPlayer( NoteData& out, const RString &sS
if( tn.type == TapNote::hold_head && tn.iDuration == MAX_NOTE_ROW )
{
int iRow = begin->first;
LOG->UserLog( "", "", "While loading SM note data, there was an unmatched 2 at beat %f", NoteRowToBeat(iRow) );
LOG->UserLog( "", "", "While loading .sm/.ssc note data, there was an unmatched 2 at beat %f", NoteRowToBeat(iRow) );
out.RemoveTapNote( t, begin );
}
+5 -1
View File
@@ -426,10 +426,14 @@ static bool LoadFromDWITokens(
out.m_StepsType = GetTypeFromMode(sMode);
// if the meter is empty, force it to 1.
if( sNumFeet.empty() )
sNumFeet = "1";
out.SetMeter(StringToInt(sNumFeet));
out.SetDifficulty( DwiCompatibleStringToDifficulty(sDescription) );
out.SetNoteData( ParseNoteData(sStepData1, sStepData2, out, sPath) );
out.TidyUpData();
+1 -1
View File
@@ -141,7 +141,7 @@ static bool LoadFromKSFFile( const RString &sPath, Steps &out, Song &song, bool
else if( sValueName=="DIFFICULTY" )
{
out.SetMeter( max(StringToInt(sParams[1]), 0) );
out.SetMeter( max(StringToInt(sParams[1]), 1) );
}
// new cases from Aldo_MX's fork:
else if( sValueName=="PLAYER" )
+6
View File
@@ -103,6 +103,12 @@ void SMLoader::LoadFromTokens(
out.SetDifficulty( Difficulty_Challenge );
}
if( sMeter.empty() )
{
// some simfiles (e.g. X-SPECIALs from Zenius-I-Vanisher) don't
// have a meter on certain steps. Make the meter 1 in these instances.
sMeter = "1";
}
out.SetMeter( StringToInt(sMeter) );
out.SetSMNoteData( sNoteData );
+21
View File
@@ -1012,11 +1012,32 @@ public:
LuaHelpers::Push( L, params.height );
return 1;
}
static int GetFPS( T* p, lua_State *L )
{
lua_pushnumber(L, p->GetFPS());
return 1;
}
static int GetVPF( T* p, lua_State *L )
{
lua_pushnumber(L, p->GetVPF());
return 1;
}
static int GetCumFPS( T* p, lua_State *L )
{
lua_pushnumber(L, p->GetCumFPS());
return 1;
}
LunaRageDisplay()
{
ADD_METHOD( GetDisplayWidth );
ADD_METHOD( GetDisplayHeight );
ADD_METHOD( GetFPS );
ADD_METHOD( GetVPF );
ADD_METHOD( GetCumFPS );
}
};
+5 -2
View File
@@ -1004,6 +1004,9 @@ void ScreenEdit::PlayTicks()
m_GameplayAssist.PlayTicks( m_Player->GetNoteData(), m_Player->GetPlayerState() );
}
static ThemeMetric<float> FADE_IN_PREVIEW("ScreenEdit", "FadeInPreview");
static ThemeMetric<float> FADE_OUT_PREVIEW("ScreenEdit", "FadeOutPreview");
void ScreenEdit::PlayPreviewMusic()
{
SOUND->StopMusic();
@@ -1013,8 +1016,8 @@ void ScreenEdit::PlayPreviewMusic()
false,
m_pSong->m_fMusicSampleStartSeconds,
m_pSong->m_fMusicSampleLengthSeconds,
0.0f,
1.5f );
FADE_IN_PREVIEW,
FADE_OUT_PREVIEW );
}
void ScreenEdit::MakeFilteredMenuDef( const MenuDef* pDef, MenuDef &menu )
+3 -3
View File
@@ -1429,7 +1429,7 @@ void ScreenGameplay::PlayTicks()
}
/* Play announcer "type" if it's been at least fSeconds since the last announcer. */
void ScreenGameplay::PlayAnnouncer( RString type, float fSeconds )
void ScreenGameplay::PlayAnnouncer( const RString &type, float fSeconds, float *fDeltaSeconds )
{
if( GAMESTATE->m_fOpponentHealthPercent == 0 )
return; // Shut the announcer up
@@ -1445,9 +1445,9 @@ void ScreenGameplay::PlayAnnouncer( RString type, float fSeconds )
GAMESTATE->m_Position.m_fSongBeat < GAMESTATE->m_pCurSong->GetFirstBeat())
return;
if( m_fTimeSinceLastDancingComment < fSeconds )
if( *fDeltaSeconds < fSeconds )
return;
m_fTimeSinceLastDancingComment = 0;
*fDeltaSeconds = 0;
SOUND->PlayOnceFromAnnouncer( type );
}
+2 -1
View File
@@ -206,7 +206,8 @@ protected:
void GetMusicEndTiming( float &fSecondsToStartFadingOutMusic, float &fSecondsToStartTransitioningOut );
void LoadLights();
void PauseGame( bool bPause, GameController gc = GameController_Invalid );
void PlayAnnouncer( RString type, float fSeconds );
void PlayAnnouncer( const RString &type, float fSeconds, float *fDeltaSeconds );
void PlayAnnouncer( const RString &type, float fSeconds ) { PlayAnnouncer(type, fSeconds, &m_fTimeSinceLastDancingComment); }
void UpdateLights();
void SendCrossedMessages();
void BeginBackingOutFromGameplay();
+3 -2
View File
@@ -729,8 +729,7 @@ void ScreenSelectMusic::Input( const InputEventPlus &input )
}
// two part confirms only means we can actually change songs here,
// so we need some hackery. oops looks like this is never going into
// mainline sm4 then -aj
// so we need some hackery. -aj
if( TWO_PART_CONFIRMS_ONLY )
{
if( m_SelectionState == SelectionState_SelectingSteps )
@@ -1080,6 +1079,8 @@ void ScreenSelectMusic::HandleMessage( const Message &msg )
}
else
{
// todo: handle changing rave difficulty on join -aj
Steps* pSteps = m_vpSteps.empty()? NULL: m_vpSteps[m_iSelection[pn]];
GAMESTATE->m_pCurSteps[pn].Set( pSteps );
}
+4 -3
View File
@@ -613,8 +613,9 @@ void Song::TidyUpData( bool fromCache, bool duringCache )
// find an image with "bg" or "background" in the file name
vector<RString> arrayPossibleBGs;
GetImageDirListing( m_sSongDir + "*bg*", arrayPossibleBGs );
GetImageDirListing( m_sSongDir + "*background*", arrayPossibleBGs );
// don't match e.g. "subgroup", "hobgoblin", etc.
GetImageDirListing( m_sSongDir + "*bg", arrayPossibleBGs );
if( !arrayPossibleBGs.empty() )
m_sBackgroundFile = arrayPossibleBGs[0];
}
@@ -644,8 +645,8 @@ void Song::TidyUpData( bool fromCache, bool duringCache )
{
// a rectangular graphic, not to be confused with CDImage above.
vector<RString> arrayPossibleDiscImages;
GetImageDirListing( m_sSongDir + "* Disc", arrayPossibleDiscImages );
GetImageDirListing( m_sSongDir + "* Title", arrayPossibleDiscImages );
GetImageDirListing( m_sSongDir + "* disc", arrayPossibleDiscImages );
GetImageDirListing( m_sSongDir + "* title", arrayPossibleDiscImages );
if( !arrayPossibleDiscImages.empty() )
m_sDiscFile = arrayPossibleDiscImages[0];
}
+344 -59
View File
@@ -1,60 +1,345 @@
/* XPM */
static char *icon[] = {
"32 32 21 1",
/* colors */
" c #000000",
". c #737300",
"X c #FF00FF",
"o c #004A73",
"O c #969600",
"+ c #006296",
"@ c #001950",
"# c #B9B900",
"$ c #007AB9",
"% c #FFB848",
"& c #734A00",
"* c #DCDC00",
"= c #505000",
"- c #323232",
"; c #003250",
": c #503200",
"> c #262626",
", c #1A1A1A",
"< c #0E0E0E",
"1 c #808000",
"2 c None",
/* pixels */
"XXXXXXXXXXXXXXXXXX XXXXXXXXXX",
"XXXXXXXXXXXXXX <,:::>< XXXXXXX",
"XXXXXXXXXXXX <=1OOOOO11.:<XXXXXX",
"XXXXXXXXXX <=####OOOOOOO=<< XXXX",
"XXXXXXXXX :O**##OOOOOO1:>;<, XXX",
"XXXXXXXX =#***###OOOOO:;$$;>> XX",
"XXXXXXX =****##1.OOOO:;$+>,,=<XX",
"X ,< X =#***###,@:#O,;$+,=...: X",
" ;$+> O***####.@,=,;$$>=OO1.=<X",
" ;;+$+o>&#*#####=>;o$$;:OO1..., ",
"XX <o$$+;:O**###O>$$$;:OO111.1: ",
"XXX ;o$$o,&O#*#,o$$o:OOOOO111= ",
"XXX :.,;$$+;,:1>o$$$o=#OOOOO11= ",
"XXX =#O=>+$$$o;o$$$$+,1#OOOOOO= ",
"XXX .##%1,+$$$$$$$$$$o:##OOOOO= ",
"XXX<O####.,;+$$$$$$$$+,####OOO: ",
"XXX,OOOOO##=,$$$$$$$$$;::O##OO<X",
"XXX,OOOO##%#=;$$$$$$$$+oo>##O. X",
"XXX=11OO####O,+$$$$$$$$$$,O##= X",
"XXX=.1OO#OOO#.@$$$$$$$$+@&##O<XX",
"XXX=11OOOOOOOO=,;+$$$$$,1###: XX",
"XXXX=1111OOOOO#1=,o+$$o:*##1 XXX",
"XXXX,...111OOOO##O=,o$o=**O<XXXX",
"XXXXX:....1OOOO####=o$;.*#, XXXX",
"XXXXX<=...11OO#####:+$;O#, XXXXX",
"XXXXXX<=.111OO#OOO#=o$-=< XXXXXX",
"XXXXXXX<=.11OOOOOO#.;+< XXXXXXXX",
"XXXXXXXX ,=O#OOOOOO=o; XXXXXXXXX",
"XXXXXXXXXX ,====::< ;>XXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXX ;;XXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXX XXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
};
static char * sm5icon_xpm[] = {
"32 32 310 2",
" c None",
". c #000000",
"+ c #1A0502",
"@ c #4B0D04",
"# c #671104",
"$ c #691104",
"% c #6B1105",
"& c #6D1105",
"* c #6E1205",
"= c #701205",
"- c #510E04",
"; c #1C0602",
"> c #260702",
", c #BD4212",
"' c #F49329",
") c #F9AA31",
"! c #FAAF3A",
"~ c #FAB140",
"{ c #FAB142",
"] c #FAB246",
"^ c #FAB44D",
"/ c #FAB550",
"( c #FAB552",
"_ c #FAB656",
": c #FAB95D",
"< c #FAB75C",
"[ c #F6A852",
"} c #D54E15",
"| c #2B0702",
"1 c #240602",
"2 c #E0661B",
"3 c #FDA32B",
"4 c #FE9B29",
"5 c #FC9D2A",
"6 c #FD9E2A",
"7 c #FD9F2A",
"8 c #FDA32C",
"9 c #FDA52C",
"0 c #FDA72C",
"a c #FEA82E",
"b c #FEAA31",
"c c #FEAD38",
"d c #FEAE3B",
"e c #FEAF3F",
"f c #FEB040",
"g c #FEB044",
"h c #FEB248",
"i c #FEB34B",
"j c #FEB54F",
"k c #FEB651",
"l c #FEB95B",
"m c #F18233",
"n c #010000",
"o c #B03B10",
"p c #F88022",
"q c #F67921",
"r c #F67A21",
"s c #F67D22",
"t c #F77E22",
"u c #F87F22",
"v c #F98323",
"w c #F98423",
"x c #FA8623",
"y c #FA8725",
"z c #FA8927",
"A c #FA8C2E",
"B c #FA8D30",
"C c #FA8F32",
"D c #FA9033",
"E c #FA9037",
"F c #FA933A",
"G c #FA943C",
"H c #FA973F",
"I c #FB9841",
"J c #FB9C4A",
"K c #D14914",
"L c #010100",
"M c #280602",
"N c #E65F19",
"O c #F05F1A",
"P c #EE5E1A",
"Q c #EF601A",
"R c #F0601A",
"S c #F1631B",
"T c #F2641B",
"U c #F3651B",
"V c #F4671C",
"W c #F5681C",
"X c #F66A1C",
"Y c #F76A1C",
"Z c #F76B1D",
"` c #F76D1F",
" . c #F77223",
".. c #F77325",
"+. c #F77428",
"@. c #F77529",
"#. c #F7772B",
"$. c #F87A2E",
"%. c #F87B30",
"&. c #F87E32",
"*. c #F97F33",
"=. c #F27D37",
"-. c #310802",
";. c #460D03",
">. c #E65417",
",. c #E64D14",
"'. c #E64F15",
"). c #E74F15",
"!. c #E85015",
"~. c #EA5115",
"{. c #EA5316",
"]. c #EC5416",
"^. c #ED5416",
"/. c #EE5516",
"(. c #F05717",
"_. c #F15717",
":. c #F25917",
"<. c #F35917",
"[. c #F35A18",
"}. c #F35D1A",
"|. c #F4611E",
"1. c #F4621F",
"2. c #F46421",
"3. c #F46522",
"4. c #F46624",
"5. c #F46926",
"6. c #F46A28",
"7. c #F56D2A",
"8. c #F27331",
"9. c #561004",
"0. c #3A0A03",
"a. c #DD4F15",
"b. c #DD4613",
"c. c #DC4813",
"d. c #DF4A14",
"e. c #E04A14",
"f. c #E14B14",
"g. c #E34C14",
"h. c #E44D15",
"i. c #E74E15",
"j. c #E94F15",
"k. c #EB5115",
"l. c #EC5115",
"m. c #EE5215",
"n. c #F05215",
"o. c #F05316",
"p. c #F05618",
"q. c #F15B1C",
"r. c #F05B1C",
"s. c #F05C1D",
"t. c #F05E1F",
"u. c #F05F20",
"v. c #F06022",
"w. c #F16323",
"x. c #F26425",
"y. c #F06D2E",
"z. c #591105",
"A. c #0B0201",
"B. c #C94913",
"C. c #D84D15",
"D. c #D44B14",
"E. c #D54C14",
"F. c #D94D15",
"G. c #DB4E15",
"H. c #DF5116",
"I. c #E25216",
"J. c #E35416",
"K. c #E55617",
"L. c #E65817",
"M. c #E45918",
"N. c #E65C18",
"O. c #E75C18",
"P. c #E85E19",
"Q. c #E7611C",
"R. c #E86420",
"S. c #E86522",
"T. c #E86624",
"U. c #E86725",
"V. c #E86826",
"W. c #E96A28",
"X. c #EA7133",
"Y. c #581104",
"Z. c #581506",
"`. c #D65416",
" + c #CD4E15",
".+ c #CE4F15",
"++ c #D15116",
"@+ c #D35116",
"#+ c #D55216",
"$+ c #D55416",
"%+ c #D55718",
"&+ c #D85A18",
"*+ c #DA5B18",
"=+ c #DE5D19",
"-+ c #E05E19",
";+ c #E35F19",
">+ c #E55F19",
",+ c #E6601A",
"'+ c #E6621C",
")+ c #E76520",
"!+ c #E76622",
"~+ c #E76724",
"{+ c #E76825",
"]+ c #E76927",
"^+ c #E97234",
"/+ c #7E2009",
"(+ c #D25617",
"_+ c #D35617",
":+ c #D05517",
"<+ c #D15717",
"[+ c #D55918",
"}+ c #D75A18",
"|+ c #D35918",
"1+ c #320902",
"2+ c #742009",
"3+ c #A2340E",
"4+ c #B0380F",
"5+ c #B1380F",
"6+ c #B53A0F",
"7+ c #B83A0F",
"8+ c #BA390F",
"9+ c #D85717",
"0+ c #8B2109",
"a+ c #E05D19",
"b+ c #8A2309",
"c+ c #DC5C19",
"d+ c #CE5617",
"e+ c #872209",
"f+ c #CA5517",
"g+ c #CC5517",
"h+ c #832109",
"i+ c #C55216",
"j+ c #C65316",
"k+ c #802109",
"l+ c #CF5617",
"m+ c #C15116",
"n+ c #C35216",
"o+ c #E86F30",
"p+ c #7E2109",
"q+ c #BC4F15",
"r+ c #BF5015",
"s+ c #E86E2E",
"t+ c #7A2008",
"u+ c #B84D15",
"v+ c #BA4E15",
"w+ c #E05B18",
"x+ c #E86E2D",
"y+ c #771F08",
"z+ c #B44B14",
"A+ c #B64C14",
"B+ c #8F2409",
"C+ c #A8330E",
"D+ c #E86C2B",
"E+ c #751E08",
"F+ c #B14A14",
"G+ c #B34B14",
"H+ c #8D260A",
"I+ c #A6320D",
"J+ c #541004",
"K+ c #621706",
"L+ c #AD4813",
"M+ c #AF4914",
"N+ c #8A260A",
"O+ c #A4320D",
"P+ c #130301",
"Q+ c #B04713",
"R+ c #AB4713",
"S+ c #A94713",
"T+ c #86240A",
"U+ c #A2320D",
"V+ c #4B1105",
"W+ c #A84613",
"X+ c #82230A",
"Y+ c #521004",
"Z+ c #5B1706",
"`+ c #A64613",
" @ c #81230A",
".@ c #9F320E",
"+@ c #491004",
"@@ c #A44412",
"#@ c #7E230A",
"$@ c #9D300D",
"%@ c #4E0F04",
"&@ c #120301",
"*@ c #A64212",
"=@ c #7A2109",
"-@ c #812209",
";@ c #2C0702",
">@ c #4D1305",
",@ c #762109",
"'@ c #2F0802",
")@ c #B03C10",
"!@ c #4F1405",
"~@ c #A74212",
"{@ c #AE4613",
"]@ c #541606",
"^@ c #701D08",
"/@ c #D45417",
"(@ c #270702",
"_@ c #3D0F04",
":@ c #511506",
"<@ c #401004",
"[@ c #130401",
"}@ c #591506",
"|@ c #C34A14",
"1@ c #AE3B10",
"2@ c #050201",
"3@ c #2D0903",
"4@ c #3D0D03",
"5@ c #190602",
" . . . . . . . . . . . . . . . . . . . . . . . . ",
" . . + @ # $ $ % % & & * = = = = = = = = = = - ; . . ",
" . > , ' ) ! ! ~ { ] ^ / ( _ : : : : : : : : : < [ } | . ",
" . 1 2 3 4 5 6 6 7 8 9 9 0 0 a b c c d e f g h i j k l m | . ",
". n o p q r r s t t u v w w x x y z A A B C D E F G H I J K L . ",
". M N O P Q R R S T T U V W W X Y Z ` . ...+.@.#.$.%.&.*.=.-.. ",
". ;.>.,.'.).!.~.~.{.].^./.(._._.:.<.[.}.|.|.1.2.3.4.5.6.7.8.9.. ",
". 0.a.b.c.d.e.f.g.g.h.i.i.j.k.l.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.. ",
". A.B.C.D.E.C.F.G.a.a.H.I.I.J.K.L.M.N.O.P.Q.R.R.S.T.U.V.W.X.Y.. ",
" . Z.`. + +.+++@+#+`.$+%+&+&+*+=+-+-+;+>+,+'+)+)+!+~+{+]+^+Y.. ",
" . . /+(+_+:+:+(+<+[+}+&+|+}+&+*+=+-+-+;+>+,+'+)+)+!+~+{+^+Y.. ",
" . . 1+2+3+4+5+6+6+7+8+9+|+}+&+*+=+-+-+;+>+,+'+)+)+!+~+^+Y.. ",
" . . . . . . . . . 0+a+<+|+}+&+*+=+-+-+;+>+,+'+)+)+!+^+Y.. ",
" . . . . b+c+d+<+<+|+}+&+*+=+-+-+;+>+,+'+)+)+^+Y.. ",
" . . e+&+f+g+d+<+<+|+}+&+*+=+-+-+;+>+,+'+)+^+Y.. ",
" . . h+<+i+j+f+g+d+<+<+|+}+&+*+=+-+-+;+>+,+'+^+Y.. ",
" . . k+l+m+n+i+j+f+g+d+<+<+|+}+&+*+=+-+-+;+>+,+o+Y.. ",
" . . p+f+q+r+m+n+i+j+f+g+d+<+<+[+}+&+*+=+-+-+;+>+s+Y.. ",
" . . t+i+u+v+q+r+m+n+i+j+f+g+d+=+w+[+}+&+*+=+-+-+;+x+9.. ",
" . . y+m+z+A+u+v+q+r+m+n+i+j+f+c+B+C+c+|+}+&+*+=+-+-+D+9.. ",
" . . E+q+F+G+z+A+u+v+q+r+m+n+i+&+H+. I+*+<+|+}+&+*+=+-+]+J+. ",
" . K+u+L+M+F+G+z+A+u+v+q+r+m+<+N+. . O+&+<+<+|+}+&+*+=+{+J+. ",
" . P+Q+R+S+L+M+F+G+z+A+u+v+q+l+T+. . . U+[+d+<+<+|+}+&+*+~+J+. ",
" . V+G+W+S+S+L+M+F+G+z+A+u+f+X+. . . U+|+g+d+<+<+|+}+&+)+Y+. ",
" . Z+F+`+W+S+S+L+M+F+G+z+i+ @. . . .@<+f+g+d+<+<+|+}+)+Y+. ",
" . +@M+@@`+W+S+S+L+M+F+m+#@. . . $@l+j+f+g+d+<+<+|+'+%@. ",
" . &@*@W+@@`+W+S+S+L+q+=@. . . -@<+i+j+f+g+d+<+<+,+;@. ",
" . >@L+W+@@`+W+M+u+,@. . . '@l+i+i+j+f+g+d+-+)@L . ",
" . . !@~@M+F+G+{@]@. . . . ^@<+f+i+j+f+c+/@(@. ",
" . . &@_@:@<@[@. . . . }@|@<+[+&+1@> . ",
" . . . . . . . 2@3@4@5@n . ",
" . . . . . "};
+9 -4
View File
@@ -36,8 +36,11 @@ void TimingData::Clear()
vector<TimingSegment*> &vSegs = m_avpTimingSegments[tst];
for( unsigned i = 0; i < vSegs.size(); ++i )
{
//LOG->Trace( "deleting %p", vSegs[i] );
SAFE_DELETE( vSegs[i] ); }
#if defined(DEBUG)
LOG->Trace( "TimingData::Clear(): deleting %p", vSegs[i] );
#endif
SAFE_DELETE( vSegs[i] );
}
vSegs.clear();
}
@@ -312,8 +315,8 @@ TimingSegment* GetSegmentAtRow( int iNoteRow, TimingSegmentType tst )
static void EraseSegment( vector<TimingSegment*> &vSegs, int index, TimingSegment *cur )
{
LOG->Trace( "EraseSegment(%d, %p)", index, cur );
#ifdef DEBUG
LOG->Trace( "EraseSegment(%d, %p)", index, cur );
cur->DebugPrint();
#endif
@@ -325,8 +328,8 @@ static void EraseSegment( vector<TimingSegment*> &vSegs, int index, TimingSegmen
// so we must deep-copy it (with ::Copy) for new allocations.
void TimingData::AddSegment( const TimingSegment *seg )
{
LOG->Trace( "AddSegment( %s )", TimingSegmentTypeToString(seg->GetType()).c_str() );
#ifdef DEBUG
LOG->Trace( "AddSegment( %s )", TimingSegmentTypeToString(seg->GetType()).c_str() );
seg->DebugPrint();
#endif
@@ -390,7 +393,9 @@ void TimingData::AddSegment( const TimingSegment *seg )
// the segment at or before this row is equal to the new one; ignore it
if( bOnSameRow && (*cur) == (*seg) )
{
#if defined(DEBUG)
LOG->Trace( "equals previous segment, ignoring" );
#endif
return;
}
@@ -22,7 +22,7 @@ extern "C" const char *Init( int *argc, char ***argv )
return "Couldn't initialize gtk (cannot open display)";
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position( GTK_WINDOW(window), GTK_WIN_POS_CENTER );
gtk_window_set_position( GTK_WINDOW(window), GTK_WIN_POS_CENTER_ALWAYS );
gtk_window_set_default_size( GTK_WINDOW(window), 512,96 );
//gtk_window_set_icon( GTK_WINDOW(window), );
gtk_widget_realize(window);