diff --git a/Courses/Default/Jupiter.crs b/Courses/Default/Jupiter.crs
new file mode 100644
index 0000000000..85dbbc9cf5
--- /dev/null
+++ b/Courses/Default/Jupiter.crs
@@ -0,0 +1,8 @@
+#COURSE:Jupiter;
+#SCRIPTER:Midiman;
+
+#GAINSECONDS:120;
+#SONG:*:Hard;
+
+#GAINSECONDS:25;
+#SONG:*:Hard;
\ No newline at end of file
diff --git a/Data/AI.ini b/Data/AI.ini
index c2584caf8f..421c8757b7 100644
--- a/Data/AI.ini
+++ b/Data/AI.ini
@@ -39,17 +39,17 @@ WeightW2=30
WeightW1=50
[Skill5]
-WeightMiss=
-WeightW5=1
-WeightW4=1
+WeightMiss=2
+WeightW5=3
+WeightW4=5
WeightW3=5
WeightW2=30
WeightW1=55
[Skill6]
-WeightMiss=
-WeightW5=
-WeightW4=
+WeightMiss=2
+WeightW5=3
+WeightW4=5
WeightW3=5
WeightW2=30
-WeightW1=70
+WeightW1=55
diff --git a/Docs/Changelog_SSCformat.txt b/Docs/Changelog_SSCformat.txt
index ee7909d2ed..75c9fe55ec 100644
--- a/Docs/Changelog_SSCformat.txt
+++ b/Docs/Changelog_SSCformat.txt
@@ -9,6 +9,34 @@ change to JSON, but it is unsure if this will be done.
Implement .ssc at your own risk.
________________________________________________________________________________
+[v0.77] - Wolfman2000
+* Add the cache tag #STEPFILENAME to gain access to the proper #NOTES when
+ required.
+
+[v0.76] - Wolfman2000
+* Expand the #COMBOS tag to allow for Miss Combos. Anyone that is crazy enough
+ to put in a 51 miss combo in their tags should be...oh wait: it's already
+ been done.
+
+[v0.75] - Wolfman2000
+* Add Step based #DISPLAYBPM for those songs that have...very varied syncing.
+
+[v0.74] - Wolfman2000
+* Add #CHARTNAME tag for the title of the chart.
+* Older files will have their #DESCRIPTION tag content copied to #CHARTNAME
+ on load.
+
+[v0.73] - Wolfman2000
+* Use #FIRSTSECOND, #LASTSECOND, and #LASTSECONDHINT instead of the BEAT
+ equivalents.
+* Move #LASTSECONDHINT to after the Timing tags.
+
+[v0.72] - Wolfman2000
+* Have #OFFSET come before #ATTACKS in the Step data.
+
+[v0.71] - Wolfman2000
+* Have #ATTACKS work per step as well.
+
[v0.7] - theDtTvB, Wolfman2000
* Split Timing officially implemented.
* #SPEEDS tag for modified scroll speeds.
diff --git a/Docs/Changelog_sm5.txt b/Docs/Changelog_sm5.txt
index 6dc057dfb3..ce445d891e 100644
--- a/Docs/Changelog_sm5.txt
+++ b/Docs/Changelog_sm5.txt
@@ -5,9 +5,255 @@ from StepMania 4 alpha 5 to sm-ssc v1.2.5, see Changelog_sm-ssc.txt.
________________________________________________________________________________
================================================================================
-StepMania 5.0 Preview 2 | 20110???
+StepMania 5.0 ????????? | 20110???
--------------------------------------------------------------------------------
+2011/07/19
+----------
+* [LoadingWindow] Added the ability for themes to have custom splash banners.
+ (Currently Windows-only.) [AJ]
+
+2011/07/17
+----------
+* [Cache] No longer store #NOTES in the cache. This should speed things up
+ on the first load if there is not much to write. (General note: this was
+ taken from another branch, but results at that point were great.)
+ [Wolfman2000]
+
+2011/07/13
+----------
+* [Difficulty] Allow ALL StepsTypes to use CustomDifficulty properly.
+ There was some unfair targeting of Couple and Routine. [Wolfman2000]
+* [Steps] Calculate accurate radar values for Couple charts. [Wolfman2000]
+* [ScreenEdit] Display more accurate chart data for Couple and Routine charts
+ for the future. No more having (almost) every row as a jump! [Wolfman2000]
+
+2011/07/12
+----------
+* [OptionRowHandler] Add a new metric to ScreenOptionsMaster:
+ StepsUseChartName. Use this if you want your charts to have a unique name
+ in the options menu. If there is no #CHARTNAME or it is "Blank", it reverts
+ to the original behavior. This metric is false by default. [Wolfman2000]
+* [ScreenEdit] Fixed a bug involving #ATTACKS. Now when you set an attack,
+ the mods are reverted back to how they were prior to the attack being set.
+ [Wolfman2000]
+
+2011/07/09
+----------
+* [NotesTheUsual] Update the #COMBOS tag to allow for a Miss Combo attribute.
+ Any files that only use the Combo attribute will have that value copied to
+ miss combo on next launch. [Wolfman2000]
+* [ScoreKeeperNormal] Better match #COMBOS with eval. Scoring formulas should
+ not be affected, but it may require more testing. [Wolfman2000]
+* [Metrics] Have Pump mode lump the checkpoint judgments with Flawless and
+ Miss judgments on eval. Of course, this goes down to Perfect and Miss if
+ that is disabled. [Wolfman2000]
+
+2011/07/07
+----------
+* [ScreenEdit] Fix the NoMines transformation bug, issue 363. [Wolfman2000]
+* [CourseLoaderCRS] Don't load BEST# and WORST# where # is greater than the
+ number of songs installed. Fixes issue 373. [AJ]
+* [NotesAllSSC] Add the #CHARTNAME tag to the Steps. #DESCRIPTION is now for
+ more detailed descriptions, or perhaps some short hand lingo. All files
+ that used #DESCRIPTION will have their values moved to #CHARTNAME on
+ load. [Wolfman2000]
+* [ScreenEdit] Add a Steps Data menu for getting numerical step data on the
+ chart. This is a read only menu. Edit Steps Information contains writable
+ information. [Wolfman2000]
+* [NotesAllSSC] Add the Steps version of #DISPLAYBPM. The Song version is
+ still there, so themes should not have to worry about breakage.
+ [Wolfman2000]
+
+2011/07/06
+----------
+* [ScreenEdit] Fix the bug where hitting Enter during playing wouldn't take
+ the user back to the editor. [Wolfman2000]
+* [Gameplay] Fix Fail mods being dishonored. [Midiman]
+
+2011/07/05
+----------
+* [ScreenEdit] Restore dance-couple and pump-couple for editing purposes.
+ Saving should still work, but this was never tested yet. [Wolfman2000]
+* [ScreenOptions] Mini is now ITG Mini, and Tiny is now Pump Pro Mini.
+ This will prevent many prior courses from breaking. [sharksoda, Wolfman2000]
+* [CharacterManager] Add a lua function to check how many characters you have.
+ For an example of how this is used, check the default theme's scripts
+ folder, specifically 03 ThemePrefs.lua. [Wolfman2000]
+
+2011/07/04
+----------
+* [ScreenEdit] Add a function to switch the notes the routine players have to
+ hit. In simple terms, Player 1's notes are now Player 2's and vice~versa.
+ Check it out in the Alter Menu. [Wolfman2000]
+* [ScreenEdit] Add two routine mirroring functions. Now you can build sections
+ of a chart for one player, and mirror the effect for the other player when
+ finished. For Pump players, it is not a straight mirror, but is more akin
+ to what is found via normal routine charts. In other words, you'll be happy.
+ Check it out in the Alter Menu. [Wolfman2000]
+
+2011/07/03
+----------
+* [ScreenEdit] Fix a crash if one tries to remove an attack that doesn't
+ exist at that time. [Wolfman2000]
+
+================================================================================
+StepMania 5.0 Preview 2 | 20110703
+--------------------------------------------------------------------------------
+
+2011/07/03
+----------
+* [Player] Bring mMods from OpenITG over. Also, a metric was added,
+ "MModHighCap", to cap the speed mod if required for playing songs like
+ Tsuhsuixamush. Set the metric to 0 or less to remove the cap. [AJ, sharksoda,
+ Wolfman2000]
+
+2011/07/02
+----------
+* [ScreenEdit] Fixed a crash when hitting Enter in the F1 help menu. [AJ]
+
+2011/06/30
+----------
+* [NotesAll] Use #FIRSTSECOND, #LASTSECOND, and #LASTSECONDHINT instead of the
+ former BEAT equivalents. Split Timing has made this a necessity thanks to
+ certain files that abuse Stops/Delays more than usual. [Wolfman2000]
+* [ScreenEdit] Add a function in the Area Menu to designate the current beat
+ as the last second of the song. Please try to be smart and not use this too
+ early. [Wolfman2000]
+
+2011/06/28
+----------
+* [ScreenEdit] Add a function to copy/paste the TimingData of a player's
+ choice. Remember to be in the appropriate mode when copying and pasting.
+ By default, the song timing is already located in the clipboard, ready for
+ use. [Wolfman2000]
+
+2011/06/27
+----------
+* [Steps] Make sure #ATTACKS are copied when requested. [Wolfman2000]
+* [ScreenEdit] Have Step Author up front instead of Chart Style. This is
+ probably going to be better overall. [Wolfman2000]
+* [TimingData] Preserve the length of time for Speed Segment scaling when using
+ beats. [Wolfman2000]
+* [NotesLoader/WriterSSC] #OFFSET is to be before #ATTACKS. This is required if
+ we pursue beat based attacks and not just second based. [Wolfman2000]
+
+2011/06/26
+----------
+* [UnlockManager] New metric: AutoLockEditSteps. Use this to hide bonus charts
+ until the Expert steps are beaten. No guarantee that this works with no
+ challenge steps in the song. This defaults to false. [Wolfman2000]
+* [UnlockManager] New metric: SongsNotAdditional. Set to true to keep the
+ default behavior, false to have the AdditionalSongs folder contain
+ unlockable material. This is set to true to start. [Wolfman2000]
+* [ScreenEdit] Allow jumping between all segments, not just Label segments.
+ You still use Ctrl + ,/. to jump, but now you use Ctrl + N/M to cycle the
+ segments. By default, it starts with Label. [Wolfman2000]
+* [PlayerOptions] No longer display StepAttacks in the player's list.
+ Instead, show NoAttacks if attacks are disabled. [Wolfman2000]
+
+2011/06/24
+----------
+* [Actor] Implement compound(length,tweens) in _fallback/02 Actor.lua. [AJ]
+* [UnlockManager] Add a new unlock reward: StepsType. This is similar to
+ unlocking Steps, but it is targeted for one step in one stepstype rather
+ than one step in all stepstypes. This needs testing. [Wolfman2000]
+* [ScreenEdit] Add the option to convert delays to beats. Just find a better
+ song to use this on besides Uprock. [Wolfman2000]
+* [ScreenEdit] Fix a crash if you don't save any steps on a new song.
+ [Wolfman2000]
+* [NotesLoader/WriterSSC] Add support for Step #ATTACKS. Furthermore, Song
+ Attacks (or rather, Step Attacks as it should be called now) are turned on
+ by default instead of off. [Wolfman2000]
+
+2011/06/19
+----------
+* [EditMenu] Allow all songs to work in Practice Mode, regardless of folder
+ location. This fixes a crash if everyone had songs in AdditionalSongs.
+ [Wolfman2000]
+
+2011/06/17
+----------
+* [LifeMeterBattery] Fixed a bug where MinesSubtractLives was not being honored.
+ Also added LifeChanged message to changing of life on holds. [AJ]
+
+2011/06/15
+----------
+* [TimingData] Added many lua bindings for the other timing segments. GetWarps,
+ GetCombos, GetTimeSignatures, GetTickcounts, GetFakes, GetScrolls, GetSpeeds.
+ This should cover all of them now. [Wolfman2000]
+
+2011/06/13
+----------
+* [InputHandler_DirectInput] Fixed MouseWheel input not resetting. [AJ]
+* [ScreenTextEntry] Make it so only the keyboard's Enter key can finish the
+ screen. Should fix issues with buttons whose secondary function is MenuStart. [AJ]
+* [InputMapper] Modify default mappings. Use the Hyphen key instead of the
+ Numlock key for Player 2's GAME_BUTTON_BACK. This should address some
+ issues with Player 2 being unable to back out if they use a laptop.
+ [Wolfman2000]
+* [NoteDisplay] Add two new metrics.
+ * DrawRollHeadForTapsOnSameRow: bool, similar to DrawHoldHeadForTapsOnSameRow
+ * TapHoldRollOnRowMeansHold: bool, true means hold and false means roll
+ * No noteskins should require updating, as these were placed in common/common
+ for ease of use. [Wolfman2000]
+* [LifeMeterBattery] Added ChangeLives(int) Lua binding. [AJ]
+* [LifeMeterBattery] Added DangerThreshold metric. [AJ]
+* [LifeMeterBattery] Added some important metrics. [AJ]
+ * MinScoreToKeepLife='TapNoteScore_*' - any score below this = loss of life.
+ * SubtractLives=1 - how many lives are lost when going below MinScoreToKeepLife.
+ * MinesSubtractLives=1 - how many lives are lost when hitting a mine.
+ * HeldAddLives=0 - how many lives are gained when a hold is completed.
+ * LetGoSubtractLives=1 - how many lives are lost on a dropped hold.
+
+2011/06/12
+----------
+* [ScreenNetSelectMusic] Add PlayerOptionsScreen metric. [AJ]
+* [ScreenEdit] Restore the old PageUp/PageDown behavior, added Control +
+ PageUp/PageDown to use recent time signature behavior. Laptop users, that
+ includes you guys too: semicolon and apostrophe are still good. [Wolfman2000]
+
+2011/06/11
+----------
+* [ScreenEdit] Allow setting the Music Preview via the Alter Menu. Just select
+ your area, enter the menu, and choose "Designate as Music Preview". No more
+ math calculations needed! [Wolfman2000]
+* [SongUtil] Added GetPlayableSteps(Song) Lua binding. [AJ]
+* [Steps] Allow 255 characters for all chart descriptions, including edits.
+ We are no longer bound by In The Groove I think. [Wolfman2000]
+* [Player] Add GetPlayerTimingData() Lua binding. [Wolfman2000]
+
+2011/06/10
+----------
+* [ScreenEdit] Split the Area Menu into the Area Menu and Alter Menu. Use the
+ "A" key to enter the Alter Menu when a selection of notes/rows are
+ highlighted. Use the Enter key to enter the old Area Menu for the options that
+ do not depend on selecting NoteData. [Wolfman2000]
+* [ScreenEdit] Allow converting selections to Delays, Warps, or Fakes as well
+ as Stops. Remember, use the Alter Menu for this. [Wolfman2000]
+
+2011/06/09
+----------
+* [ScreenSyncOverlay] Ensure that F11 / F12 work with all charts due to Split
+ Timing. [Wolfman2000]
+
+2011/06/08
+----------
+* Any notes in a fake segment or warp segment are completely ignored for
+ scoring purposes. Now you can get 100% on your warping goodness!
+ [Wolfman2000]
+
+2011/06/06
+----------
+* [PlayerOptions] Removed the ScoreDisplay mod choices. Use lua to make your
+ own scoring formulas that work in reverse instead. [Wolfman2000]
+* [ScreenGameplay] Fix an assist tick bug if there was no Player 1. Note that
+ this changes the behavior slightly: it is the first enabled player, or
+ master player, that gets the ticks now. A better solution will be looked at
+ in the future. [Wolfman2000]
+* [NoteDataUtil] Fix a radar issue involving hands. Unfortunately, this means
+ yet another cache reload for accuracy purposes. [Wolfman2000]
+
2011/06/04
----------
* Changed default MusicWheelSwitchSpeed to 15 (was 10). [AJ]
diff --git a/Docs/Luadoc/Lua.xml b/Docs/Luadoc/Lua.xml
index 201f0b6312..bbb1e57e54 100644
--- a/Docs/Luadoc/Lua.xml
+++ b/Docs/Luadoc/Lua.xml
@@ -3,6 +3,7 @@
+
@@ -39,11 +40,8 @@
-
-
-
@@ -57,6 +55,7 @@
+
@@ -130,7 +129,6 @@
-
@@ -143,6 +141,8 @@
+
+
@@ -153,6 +153,7 @@
+
@@ -322,6 +323,7 @@
+
@@ -578,6 +580,7 @@
+
@@ -823,6 +826,7 @@
+
@@ -889,6 +893,7 @@
+
@@ -929,6 +934,7 @@
+
@@ -956,6 +962,7 @@
+
@@ -1026,6 +1033,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1093,6 +1146,15 @@
+
+
+
+
+
+
+
+
+
@@ -1185,9 +1247,11 @@
+
+
@@ -1318,6 +1382,7 @@
+
@@ -1327,6 +1392,7 @@
+
@@ -1377,10 +1443,17 @@
+
+
+
+
+
+
+
@@ -1408,6 +1481,7 @@
+
@@ -1421,6 +1495,7 @@
+
@@ -1470,6 +1545,7 @@
+
@@ -2024,8 +2100,9 @@
-
-
+
+
+
@@ -2060,6 +2137,6 @@
- StepMania 5 v5.0 Preview 1a
- 2011-06-04
+ StepMania 5 v5.0 Preview 2
+ 2011-07-04
diff --git a/Docs/Luadoc/Lua.xsl b/Docs/Luadoc/Lua.xsl
index 2861185f63..72271aec39 100644
--- a/Docs/Luadoc/Lua.xsl
+++ b/Docs/Luadoc/Lua.xsl
@@ -395,7 +395,13 @@
$type='bool' or
$type='table' or
$type='color' or
- $type='Enum'">
+ $type='Enum' or
+ $type='ThreadVariable' or
+ $type='LuaOptionRow' or
+ $type='ActorDef' or
+ $type='chunk' or
+ $type='unsigned' or
+ $type='various'">
diff --git a/Docs/Luadoc/LuaDocumentation.xml b/Docs/Luadoc/LuaDocumentation.xml
index b0bd9a2393..7de1cc82a3 100644
--- a/Docs/Luadoc/LuaDocumentation.xml
+++ b/Docs/Luadoc/LuaDocumentation.xml
@@ -23,6 +23,9 @@
+
+ [03 HSV.lua] Returns a color with the specified alpha.
+
[02 StageMods.lua]
@@ -36,10 +39,10 @@
Returns the base name of file path.
- [02 Colors.lua]
+ [02 Colors.lua] Boosts the specified color by multiplying its values by fBoost.
- [03 HSV.lua]
+ [03 HSV.lua] Modifies the brightness of the specified color.
[03 ProductivityHelpers.lua] Returns true if Center 1P is being used.
@@ -48,7 +51,8 @@
[03 Gameplay.lua]
- CLAMP is an all-female Japanese mangaka group that formed in the mid 1980s. Erm, I mean... Clamps fValue between fLow and fHigh.
+ CLAMP is an all-female Japanese mangaka group that formed in the mid 1980s.
+ Erm, I mean... Clamps fValue between fLow and fHigh.
Closes any connection to an online server.
@@ -59,6 +63,21 @@
Returns a color from a string. color can be in hex ("#FFFFFFFF") or 0..1 values ("1.0,1.0,1.0,1.0"), in RGBA order.
+
+ [02 Colors.lua] Returns a darker tone of the color. (Specifically c[1]/2, c[2]/2, c[3]/2, c[4])
+
+
+ [02 Colors.lua] Returns a lighter tone of the color. (Specifically c[1]+(c[1]/2), c[2]+(c[2]/2), c[3]+(c[3]/2), c[4])
+
+
+ [02 Colors.lua] Returns a midtone of the color. (Specifically c[1]/1.5, c[2]/1.5, c[3]/1.5, c[4])
+
+
+ [03 HSV.lua] Returns a hex representation for the specified color.
+
+
+ [03 HSV.lua] Takes in a color and returns a table with the HSV values.
+
[03 Gameplay.lua] Determines what TapNoteScore allows for continuing the combo.
@@ -68,6 +87,12 @@
[03 Gameplay.lua] Determines if combo should be per row (Jump = 1) or per column (Jump = 2).
+
+ [02 Other.lua] The combo trasform command.
+
+
+ [03 Gameplay.lua] Returns the UserPrefComboUnderField user preference value.
+
Tries to connect to the server at sAddress.
@@ -77,14 +102,23 @@
Returns the current day of the year.
+
+ [02 Serialize] Recursively deep-copy a table.
+
[01 base.lua] "Override Lua's dofile to use our loadfile."
+
+ [02 Utilities.lua]
+
+
+ [02 Utilities.lua] Return the index of a true value in list.
+
[02 Utilities.lua] Find a key in tab with the given value.
-
- [02 Utilities.lua] Return the index of a true value in list.
+
+ func takes a key and a value.
Returns the number passed to the function followed by its suffix ("th", "nd", and so on).
@@ -98,6 +132,12 @@
Returns the corresponding CustomDifficulty string for a StepsType/Difficulty (/optional CourseType) combination.
+
+ [04 Scoring.lua] "Get the radar values directly. The individual steps aren't used much."
+
+
+ [02 Other.lua] Returns a string with the Edit Mode SubScreens.
+
[03 EnvUtils2.lua] Returns the value of name from the Env table.
@@ -113,21 +153,45 @@
Returns a string representing the name of the operating system being used. (e.g. "Windows", "Linux", "Mac, "Unknown")
+
+ [03 ProductivityHelpers.lua] "This returns a profile, preferably a player one. If there isn't one, [it falls] back on the machine profile."
+
[03 ThemePrefs.lua] Returns true if player pn is using ProTiming.
[02 Utilities.lua] Returns a path to a random song background.
+
+ [03 ProductivityHelpers.lua]
+
+
+ [03 ProductivityHelpers.lua]
+
+
+ Returns the display aspect ratio.
+
Returns the name of the currently connected server.
[02 Utilities.lua] Returns a path to the current songs background.
+
+ [03 Gameplay.lua]
+
Returns the theme's aspect ratio.
+
+ [03 ThemePrefs.lua] (Alias for .)
+
+
+ Returns the current Timing difficulty.
+
+
+ [04 Scoring.lua] "Retrieve the amount of taps/holds/rolls involved." Used in some scoring formulas.
+
[03 UserPreferences2.lua] Themer-facing function for getting a user preference.
@@ -140,9 +204,38 @@
[03 UserPreferences2.lua] Themer-facing function for getting a user preference as a number.
+
+ [03 HSV.lua] Returns the color's alpha if it has any, otherwise returns 1.
+
+
+ [03 Gameplay.lua] Returns the value to start showing the combo at.
+
+
+ [03 Gameplay.lua] Returns true if you need to step on hold heads to activate them.
+
+
+ [03 Gameplay.lua] Returns 0 in pump mode, TimingWindowSecondsHold preference value in any other game mode.
+
Returns the current hour.
+
+ [03 HSV.lua] Converts a color from HSV values to something StepMania can understand.
+ hue is from 0-360, saturation and value are 0..1
+
+
+ [03 HSV.lua] Converts a color from HSV values with alpha to something StepMania can understand.
+ hue is from 0-360, saturation, value, and alpha are 0..1
+
+
+ [03 HSV.lua] "Converts a set of HSV values to a color."
+
+
+ [03 HSV.lua] "Takes in a normal color and returns the hex representation. (Adapted from code in LuaBit)"
+
+
+ [03 HSV.lua] Changes the hue of the input color.
+
[03 ThemePrefs.lua] Initializes various user preferences.
@@ -206,6 +299,12 @@
Returns the current Minute.
+
+ [03 Gameplay.lua] Returns the value to start showing the miss combo at.
+
+
+ Creates a module. See the Lua manual for more details.
+
Returns the current month of the year.
@@ -215,6 +314,20 @@
Returns Month m as a string.
+
+ "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.
+ next returns the next index of the table and its associated value."
+ See the Lua manual for more details.
+
+
+ [03 ThemePrefs.lua] Returns a Lua option row for ProTiming.
+
+
+ "Returns three values: the function, the table t, and nil,
+ so that the construction for k,v in pairs(t) do body end
+ will iterate over all key–value pairs of table t."
+
[03 ProductivityHelpers.lua] Converts a PlayerNumber into a short string (e.g. "P1", "P2").
@@ -233,6 +346,16 @@
Returns the product version.
+
+ "Checks whether v1 is equal to v2, without invoking any metamethod."
+
+
+ "Gets the real value of t[index], without invoking any metamethod."
+
+
+ "Sets the real value of t[index] to value, without invoking any metamethod."
+ The modified t is then returned.
+
[02 ActorDef.lua]
@@ -242,12 +365,27 @@
[03 UserPreferences2.lua] (internal) Reads the specified user preference from its config file.
+
+ Sends the current style to the server.
+
+
+ Loads the specified module. See the Lua manual for more information.
+
[02 Utilities.lua] Round a number.
+
+ [03 HSV.lua] Modifies the saturation of the specified color
+
[03 Gameplay.lua] Returns the primary ScoreKeeper class to use.
+
+ [00 alias.lua, 02 Other.lua] alias for .
+
+
+ [00 alias.lua, 02 Other.lua] alias for .
+
Returns the current second.
@@ -269,12 +407,20 @@
Converts fSecs to Minutes:Seconds.Milliseconds format using two digits for each section except Milliseconds (uses 3).
+
+ "If index is a number, returns all arguments after argument
+ number index. Otherwise, index must be the string
+ "#", and [it] returns the total number of extra arguments it received."
+
[02 Branches.lua] Determines the correct music/course selection screen to use and returns it.
[03 Gameplay.lua] (soon to be deprecated) Returns a list of codes to use on ScreenSelectProfile.
+
+ [02 Serialize.lua] Serialize the table t.
+
[03 EnvUtils2.lua] Sets the value of name to value in the Env table.
@@ -299,6 +445,12 @@
[02 ActorDef.lua]
+
+ [02 Utilities.lua] Returns a shuffled version of t.
+
+
+ [02 Utilities.lua] Returns a slice of the specified table of size num.
+
[02 Utilities.lua] Look up each value in a table, returning a table with the resulting strings.
@@ -308,42 +460,64 @@
[03 ProductivityHelpers.lua] Converts a string or number to a bool.
+
+ Tries to convert e to a number. Returns nil if
+ it can't convert the input to a number. (base is optional.)
+
+
+ Converts e to a string.
+
[02 Enum.lua] Returns a string representing an enum starting from '_'. For example, passing PlayerNumber_P1 to this function will return P1.
[00 init.lua] Alias for .
+
+ Returns the type of the object as a string. See the Lua manual for valid return values.
+
+
+ "Returns the elements from the given table.
+ This function is equivalent to return list[i], list[i+1], ···, list[j]"
+ (i and j are optional; "by default, i is 1 and j is the length of the list.")
+
Returns a string with characters escaped for URLs. (e.g. a space becomes '%20')
[01 base.lua] Alias for lua.GetThreadVariable.
+
+ Returns the current version's build date.
+
+
+ Returns the current version's build time.
+
[00 init.lua] Alias for .
[04 WidescreenHelpers.lua] Depending on the screen width, scales between ar43 (4:3; 640px) and ar169 (16:9; 854px).
+
+ [02 Utilities.lua]
+
[02 ActorDef.lua] Wraps the children in an ActorFrame.
[04 FileUtils.lua] Writes buf to the file at path.
+
+ [03 GamePreferences.lua]
+
[03 UserPreferences2.lua] (internal) Writes user preference prefName to its config file with value being tostring'd.
Returns the current year.
-
-
-
- [03 ThemePrefs.lua] Returns a Lua option row for ProTiming.
-
[03 ThemePrefs.lua] Returns a Lua option row for toggling AutoSetStyle.
@@ -367,9 +541,16 @@
+
+ Returns the for the file at sPath.
+
Returns true if sClassName is a registered Class.
+
+ Loads all commands and sets X and Y for the specified Actor.
+
+
@@ -414,6 +595,20 @@
+
+ Returns true if the type of v is sType.
+
+
+ Flushes log files to disk.
+
+
+
+ Tries to read the file at sPath. If successful, it returns the file's contents.
+ If unsuccessful, it returns two values: nil and "error".
+
+
+ Calls func(...) with two LuaThreadVariables set, and returns the return values of func().
+
Writes sString to log.txt. Aliased by
.
@@ -422,9 +617,6 @@
Writes sString to info.txt and log.txt as
a warning. Aliased by .
-
- Flushes log files to disk.
-
@@ -437,6 +629,9 @@
+
+ Gets the playable Steps for the present Song based on the present Game.
+
Returns true if the song's steps (st) are playable.
@@ -560,7 +755,21 @@
[02 Actor.lua]
- [02 Actor.lua] Centers an Actor.
+ [02 Actor.lua] Centers an Actor on the screen. (equivalent to x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y)
+
+
+ [03 ProductivityHelpers.lua] Centers an Actor on the X axis. (equivalent to x,SCREEN_CENTER_X)
+
+
+ [03 ProductivityHelpers.lua] Centers an Actor on the y axis. (equivalent to y,SCREEN_CENTER_Y)
+
+
+ Determines if the z-buffer should be cleared or not.
+
+
+ [02 Actor.lua] Combines multiple interpolators for complex tweens. tweens
+ can either be a string like "linear,0.25,accelerate,0.75" or
+ a table with tween information { {Type="linear", Percent=0.25, Bezier=nil}, {Type="accelerate", Percent=0.75, Bezier=nil} }
Crops percent of the Actor from the bottom, where percent is in the range 0..1.
@@ -853,6 +1062,9 @@
Stops any effect the Actor has.
+
+ Stops any tweening.
+
Stretches the Actor to a rectangle of a specific size.
@@ -877,6 +1089,12 @@
Set the z position of the Actor to zPos.
+
+ Sets the z bias to fBias.
+
+
+ Enables/disables z-buffer depending on bUse.
+
Zooms the Actor to zoom scale.
@@ -898,19 +1116,19 @@
Zooms the Actor to zoom scale on the Z axis.
+
+ Sets the z testing mode to write on pass if true, turns it off if false
+
+
+ Sets the z testing mode to testMode.
+
+
+ Sets z writing to true or false based on bWrite.
+
[02 Actor.lua]
-
- [02 Actor.lua] Centers an Actor on the screen. (equivalent to x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y)
-
-
- [03 ProductivityHelpers.lua] Centers an Actor on the X axis. (equivalent to x,SCREEN_CENTER_X)
-
-
- [03 ProductivityHelpers.lua] Centers an Actor on the y axis. (equivalent to y,SCREEN_CENTER_Y)
-
[02 Actor.lua] Stretches an Actor to cover the screen. (equivalent to stretchto,0,0,SCREEN_WIDTH,SCREEN_HEIGHT)
@@ -1163,7 +1381,7 @@
Loads the card image from the specified Character.
-
+ Loads the banner from the cache based on sPath (typically or ).
Loads a Banner from a specified Course.
@@ -1322,6 +1540,9 @@
Returns a random character.
+
+ Returns the number of characters available.
+
@@ -1452,6 +1673,9 @@
Returns the MD5 hash for s.
+
+ Returns the SHA-1 hash for the file at sPath.
+
Returns the SHA-1 hash for s.
@@ -2004,6 +2228,9 @@
+
+ Changes the player's life by iNumLives. (Negative values subtract lives.)
+
Returns the number of lives remaining.
@@ -2347,6 +2574,9 @@
+ This function is deprecated. Please use GetStepAttacks() instead.
+
+
@@ -2701,7 +2931,9 @@
-
+
+ Returns the Profile for the specified profile ID.
+
@@ -2723,6 +2955,9 @@
Returns true if Song s has never been played before (according to the machine profile).
+
+ Returns true if pn's Profile was loaded from a memory card.
+
Returns true if the last load of player pn's profile was a LastGood copy of the profile.
@@ -2858,12 +3093,21 @@
Returns the name of the previous Screen.
+
+ Returns the ScreenType for this Screen.
+
Locks input for f seconds.
+
+ [02 Other.lua] Gets a metric from the current Screen.
+
Posts a message with the text sScreenMsg to the Screen.
+
+ [02 Other.lua] Gets a string from the current Screen in the current language.
+
@@ -3078,6 +3322,9 @@
Returns the first beat of the song.
+
+ Returns the first second of the song.
+
Returns the genre of the song.
@@ -3087,6 +3334,9 @@
Returns the last beat of the song.
+
+ Returns the last second of the song.
+
Gets the path to the lyrics.
@@ -3328,6 +3578,9 @@
Load the song banner texture at sPath.
+
+ [02 Sprite.lua] Loads the background from the current Song or the first Trail entry.
+
[02 Sprite.lua] Load the texture for song's background.
@@ -3340,6 +3593,9 @@
Set the to mode.
+
+ Sets the number of seconds into the animation to fSeconds.
+
Set the texture to texture.
@@ -3445,6 +3701,9 @@
Returns the author that made that particular Steps pattern.
+
+ Returns the Steps chart name.
+
Returns the Chart Style for this Steps.
@@ -3463,8 +3722,11 @@
Returns the numerical difficulty of the Steps.
+
+ Returns true if the Steps has any attacks.
+
- returns true if the song has significant timing changes.
+ Returns true if the Steps pattern has significant timing changes.
Returns the complete list of RadarValues for player pn. Use to grab a specific value.
@@ -3608,6 +3870,27 @@
Returns a table of the Labels and the times they happen as strings with the format "beat=label name."
+
+ Returns a table of the Warps and the times they happen as strings with the format "beat=number of beats warped over."
+
+
+ Returns a table of the Combos and the times they happen as strings with the format "beat=combo value."
+
+
+ Returns a table of the Time Signatures and the times they happen as strings with the format "beat=beats per measure (numerator)=denominator."
+
+
+ Returns a table of the Tickcountss and the times they happen as strings with the format "beat=number of ticks per beat."
+
+
+ Returns a table of the Fakes and the times they happen as strings with the format "beat=number of beats to not judge."
+
+
+ Returns a table of the Scrolls and the times they happen as strings with the format "beat=scroll rate ratio."
+
+
+ Returns a table of the Speeds and the times they happen as strings with the format "beat=scroll rate ratio=length of time to fully activate=unit of activation (0 for beats, 1 for seconds)."
+
Returns true if the TimingData contains BPM changes.
@@ -3690,6 +3973,9 @@
Returns true if the UnlockEntry requires you to pass Hard steps.
+
+ Returns true if the UnlockEntry requires you to pass Challenge steps.
+
Returns the Song related to the UnlockEntry.
@@ -3720,6 +4006,9 @@
Sets the UnlockEntry to unlock a specified song's steps.
Example: steps,"In The Groove/Pandemonium","expert"
+
+ Sets the UnlockEntry to unlock a specified song's stepstype.
+
@@ -3755,7 +4044,9 @@
Returns the UnlockEntry index to celebrate.
-
+
+ Sets the preferred Song/Course to the specified sUnlockEntryID
+
Unlocks an entry by ID.
diff --git a/Docs/SimfileFormats/ssc_msd5.txt b/Docs/SimfileFormats/ssc_msd5.txt
index 845844fbc6..b8e5a2aea3 100644
--- a/Docs/SimfileFormats/ssc_msd5.txt
+++ b/Docs/SimfileFormats/ssc_msd5.txt
@@ -21,19 +21,19 @@
#DELAYS:;
#LABELS:;
#TIMESIGNATURES:;
-#LASTBEATHINT:;
#SAMPLESTART:;
#SAMPLELENGTH:;
#DISPLAYBPM:[xxx][xxx:xxx]|[*];
#SELECTABLE:;
+#LASTSECONDHINT:;
#BGCHANGES:;
#FGCHANGES:;
#KEYSOUNDS:;
#ATTACKS:;
// stored in cache
-#FIRSTBEAT:; // calculated
-#LASTBEAT:; // calculated
+#FIRSTSECOND:; // calculated
+#LASTSECOND:; // calculated
#SONGFILENAME:;
#MUSICBYTES:; // ignored by loader
#HASMUSIC:;
@@ -42,6 +42,7 @@
// begin
#NOTEDATA# // marks a new note data section
// information from #NOTES moved here
+#CHARTNAME:;
#STEPSTYPE:;
#DESCRIPTION:;
#CHARTSTYLE:;
@@ -51,6 +52,7 @@
#CREDIT:;
// steps-based timingdata
+#OFFSET:;
#BPMS:;
#STOPS:;
#DELAYS:;
@@ -61,8 +63,11 @@
#SCROLLS:;
#FAKES:;
#LABELS:;
-#ATTACKS:; // Not yet in use.
-#OFFSET:;
+#ATTACKS:;
+#DISPLAYBPM:;
-// actual step data
+// only in cache files
+#STEPFILENAME:;
+
+// actual step data (not in cache files)
#NOTES:;
diff --git a/Installer/custom-sm5.bmp b/Installer/custom-sm5.bmp
index 4d4a4490d8..17c427c6b4 100644
Binary files a/Installer/custom-sm5.bmp and b/Installer/custom-sm5.bmp differ
diff --git a/Installer/header-sm5.bmp b/Installer/header-sm5.bmp
index 8b5662310f..73a0be357f 100644
Binary files a/Installer/header-sm5.bmp and b/Installer/header-sm5.bmp differ
diff --git a/Installer/install.ico b/Installer/install.ico
index 6a5de183f0..60a8122e56 100644
Binary files a/Installer/install.ico and b/Installer/install.ico differ
diff --git a/Installer/welcome-sm5.bmp b/Installer/welcome-sm5.bmp
index e460d85781..08b7d503bf 100644
Binary files a/Installer/welcome-sm5.bmp and b/Installer/welcome-sm5.bmp differ
diff --git a/NoteSkins/common/common/metrics.ini b/NoteSkins/common/common/metrics.ini
index 619f75b3f6..6c9f3f4e31 100644
--- a/NoteSkins/common/common/metrics.ini
+++ b/NoteSkins/common/common/metrics.ini
@@ -1,5 +1,7 @@
[NoteDisplay]
DrawHoldHeadForTapsOnSameRow=1
+DrawRollHeadForTapsOnSameRow=1
+TapHoldRollOnRowMeansHold=1
AnimationIsBeatBased=1
TapNoteAnimationLength=1
TapMineAnimationLength=1
diff --git a/NoteSkins/dance/midi-note/Down Tap Explosion Bright.png b/NoteSkins/dance/midi-note/Down Tap Explosion Bright.png
index bd54411afb..251b65f913 100644
Binary files a/NoteSkins/dance/midi-note/Down Tap Explosion Bright.png and b/NoteSkins/dance/midi-note/Down Tap Explosion Bright.png differ
diff --git a/NoteSkins/dance/midi-note/NoteSkin.lua b/NoteSkins/dance/midi-note/NoteSkin.lua
index d821c2740b..0d596ec4ef 100644
--- a/NoteSkins/dance/midi-note/NoteSkin.lua
+++ b/NoteSkins/dance/midi-note/NoteSkin.lua
@@ -20,14 +20,14 @@ ret.Redir = function(sButton, sElement)
if sElement == "Hold Head Active" or
sElement == "Roll Head Active"
then
- sElement = "Hold Head Active";
+ sElement = "Tap Note";
end
-- Test
if sElement == "Hold Head Inactive" or
sElement == "Roll Head Inactive"
then
- sElement = "Hold Head Inactive";
+ sElement = "Tap Note";
end
if sElement == "Tap Fake"
diff --git a/NoteSkins/dance/midi-note/metrics.ini b/NoteSkins/dance/midi-note/metrics.ini
index 4969099512..d315c3ab14 100644
--- a/NoteSkins/dance/midi-note/metrics.ini
+++ b/NoteSkins/dance/midi-note/metrics.ini
@@ -3,7 +3,8 @@ FallbackNoteSkin=default
[NoteDisplay]
TapNoteAnimationIsVivid=0
-DrawHoldHeadForTapsOnSameRow=1
+HoldHeadAnimationIsVivid=0
+DrawHoldHeadForTapsOnSameRow=0
TapNoteAnimationLength=4
TapAdditionAnimationLength=4
TapMineAnimationLength=1
@@ -34,8 +35,14 @@ TapNoteNoteColorTextureCoordSpacingY=0.125
TapFakeNoteColorTextureCoordSpacingX=0
TapFakeNoteColorTextureCoordSpacingY=0.125
+HoldHeadAdditionTextureCoordOffsetX=0
+HoldHeadAdditionTextureCoordOffsetY=0
HoldHeadNoteColorTextureCoordSpacingX=0
HoldHeadNoteColorTextureCoordSpacingY=0
+HoldTopCapAdditionTextureCoordOffsetX=0
+HoldTopCapAdditionTextureCoordOffsetY=0
+HoldTopCapNoteColorTextureCoordSpacingX=0
+HoldTopCapNoteColorTextureCoordSpacingY=0
[GhostArrowDim]
NoneCommand=
@@ -62,8 +69,8 @@ LetGoCommand=blend,'BlendMode_Add';
HeldCommand=blend,'BlendMode_Add';diffuse,1.0,1.0,0.3,0.875;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0
[HoldGhostArrow]
-HoldingOnCommand=visible,true
-HoldingOffCommand=visible,false
+HoldingOnCommand=blend,'BlendMode_Add';pulse;effectmagnitude,1,1.125,1;effectperiod,0.05;effectclock,'beatnooffset';visible,true
+HoldingOffCommand=blend,'BlendMode_Add';stopeffect;visible,false
[ReceptorArrow]
W3Command=stoptweening;zoom,0.85;linear,0.12;zoom,1
diff --git a/NoteSkins/dance/midi-solo/metrics.ini b/NoteSkins/dance/midi-solo/metrics.ini
index cc79f5539f..698d307fb4 100644
--- a/NoteSkins/dance/midi-solo/metrics.ini
+++ b/NoteSkins/dance/midi-solo/metrics.ini
@@ -1,9 +1,9 @@
[Global]
-FallbackNoteSkin=default
+FallbackNoteSkin=midi-note
[NoteDisplay]
TapNoteAnimationIsVivid=0
-DrawHoldHeadForTapsOnSameRow=1
+DrawHoldHeadForTapsOnSameRow=0
TapNoteAnimationLength=4
TapAdditionAnimationLength=4
TapMineAnimationLength=1
@@ -35,7 +35,7 @@ TapFakeNoteColorTextureCoordSpacingX=0
TapFakeNoteColorTextureCoordSpacingY=0.125
HoldHeadNoteColorTextureCoordSpacingX=0
-HoldHeadNoteColorTextureCoordSpacingY=0.125
+HoldHeadNoteColorTextureCoordSpacingY=0
[GhostArrowDim]
NoneCommand=
diff --git a/NoteSkins/dance/retro/Down Hold Explosion.redir b/NoteSkins/dance/retro/Down Hold Explosion.redir
deleted file mode 100644
index 9bef57edb4..0000000000
--- a/NoteSkins/dance/retro/Down Hold Explosion.redir
+++ /dev/null
@@ -1 +0,0 @@
-Down Tap Explosion Bright
\ No newline at end of file
diff --git a/NoteSkins/kb7/retrobar-iidx/metrics.ini b/NoteSkins/kb7/retrobar-iidx/metrics.ini
index 3e010e338c..9a306a981e 100644
--- a/NoteSkins/kb7/retrobar-iidx/metrics.ini
+++ b/NoteSkins/kb7/retrobar-iidx/metrics.ini
@@ -4,7 +4,12 @@ DrawHoldHeadForTapsOnSameRow=0
StartDrawingHoldBodyOffsetFromHead=0
StopDrawingHoldBodyOffsetFromTail=-32
+TapNoteAnimationIsVivid=0
+
# control the vertical
+TapNoteNoteColorTextureCoordSpacingX=0
+TapNoteNoteColorTextureCoordSpacingY=0
+
TapNoteAdditionTextureCoordOffsetX=0
TapNoteAdditionTextureCoordOffsetY=0.5
diff --git a/NoteSkins/kb7/retrobar-o2jam/metrics.ini b/NoteSkins/kb7/retrobar-o2jam/metrics.ini
index 3e010e338c..9a306a981e 100644
--- a/NoteSkins/kb7/retrobar-o2jam/metrics.ini
+++ b/NoteSkins/kb7/retrobar-o2jam/metrics.ini
@@ -4,7 +4,12 @@ DrawHoldHeadForTapsOnSameRow=0
StartDrawingHoldBodyOffsetFromHead=0
StopDrawingHoldBodyOffsetFromTail=-32
+TapNoteAnimationIsVivid=0
+
# control the vertical
+TapNoteNoteColorTextureCoordSpacingX=0
+TapNoteNoteColorTextureCoordSpacingY=0
+
TapNoteAdditionTextureCoordOffsetX=0
TapNoteAdditionTextureCoordOffsetY=0.5
diff --git a/NoteSkins/kb7/retrobar-razor_o2/noteskin.ini b/NoteSkins/kb7/retrobar-razor_o2/metrics.ini
similarity index 100%
rename from NoteSkins/kb7/retrobar-razor_o2/noteskin.ini
rename to NoteSkins/kb7/retrobar-razor_o2/metrics.ini
diff --git a/NoteSkins/pump/default/UpLeft Explosion.lua b/NoteSkins/pump/default/UpLeft Explosion.lua
index 9127b0764b..a6e9d779ee 100644
--- a/NoteSkins/pump/default/UpLeft Explosion.lua
+++ b/NoteSkins/pump/default/UpLeft Explosion.lua
@@ -15,10 +15,9 @@ return Def.ActorFrame {
--tap
NOTESKIN:LoadActor(Var "Button", "Ready Receptor")..{
Name="Tap";
- Frames = { { Frame = 2 } };
+ --Frames = { { Frame = 2 ; Delay = 1 } };
TapCommand=cmd(finishtweening;diffusealpha,1;zoom,1;linear,0.2;diffusealpha,0;zoom,1.2);
-
- InitCommand=cmd(playcommand,"Tap");
+ InitCommand=cmd(pause;setstate,2;playcommand,"Tap");
HeldCommand=cmd(playcommand,"Tap");
ColumnJudgmentMessageCommand=cmd(playcommand,"Tap");
--TapNoneCommand=cmd(playcommand,"Tap");
diff --git a/NoteSkins/pump/default/UpLeft Receptor.lua b/NoteSkins/pump/default/UpLeft Receptor.lua
index cde7525919..86a2238fa1 100644
--- a/NoteSkins/pump/default/UpLeft Receptor.lua
+++ b/NoteSkins/pump/default/UpLeft Receptor.lua
@@ -1,12 +1,16 @@
local function Beat(self)
+ -- too many locals
local this = self:GetChildren()
+ local player = GAMESTATE:GetMasterPlayerNumber()
+ local playerstate = GAMESTATE:GetPlayerState( player )
+ local songposition = playerstate:GetSongPosition() -- GAMESTATE:GetSongPosition()
- local beat = GAMESTATE:GetSongBeat()
+ local beat = songposition:GetSongBeat() -- GAMESTATE:GetSongBeat()
local part = beat%1
part = clamp(part,0,0.5)
local eff = scale(part,0,0.5,1,0)
- if (GAMESTATE:GetSongPosition():GetDelay() or false) and part == 0 then eff = 0 end
+ if (songposition:GetDelay() or false) and part == 0 then eff = 0 end
if beat < 0 then
eff = 0
end
diff --git a/NoteSkins/pump/pad/Center Hold Body Active 6x1.png b/NoteSkins/pump/pad/Center Hold Body Active 6x1.png
new file mode 100644
index 0000000000..ddac269215
Binary files /dev/null and b/NoteSkins/pump/pad/Center Hold Body Active 6x1.png differ
diff --git a/NoteSkins/pump/pad/Center Hold BottomCap Active 6x1.png b/NoteSkins/pump/pad/Center Hold BottomCap Active 6x1.png
new file mode 100644
index 0000000000..cf2637fa80
Binary files /dev/null and b/NoteSkins/pump/pad/Center Hold BottomCap Active 6x1.png differ
diff --git a/NoteSkins/pump/pad/Center Outline Receptor.png b/NoteSkins/pump/pad/Center Outline Receptor.png
new file mode 100644
index 0000000000..bfca6a1c11
Binary files /dev/null and b/NoteSkins/pump/pad/Center Outline Receptor.png differ
diff --git a/NoteSkins/pump/pad/Center Ready Receptor 1x3.png b/NoteSkins/pump/pad/Center Ready Receptor 1x3.png
new file mode 100644
index 0000000000..0adc5259af
Binary files /dev/null and b/NoteSkins/pump/pad/Center Ready Receptor 1x3.png differ
diff --git a/NoteSkins/pump/pad/Center Roll Head Active 3x2.png b/NoteSkins/pump/pad/Center Roll Head Active 3x2.png
new file mode 100644
index 0000000000..5979f36db4
Binary files /dev/null and b/NoteSkins/pump/pad/Center Roll Head Active 3x2.png differ
diff --git a/NoteSkins/pump/pad/Center Tap Note 3x2.png b/NoteSkins/pump/pad/Center Tap Note 3x2.png
new file mode 100644
index 0000000000..40bb96963e
Binary files /dev/null and b/NoteSkins/pump/pad/Center Tap Note 3x2.png differ
diff --git a/NoteSkins/pump/pad/DownLeft Hold Body Active 6x1.png b/NoteSkins/pump/pad/DownLeft Hold Body Active 6x1.png
new file mode 100644
index 0000000000..79408710df
Binary files /dev/null and b/NoteSkins/pump/pad/DownLeft Hold Body Active 6x1.png differ
diff --git a/NoteSkins/pump/pad/DownLeft Hold BottomCap Active 6x1.png b/NoteSkins/pump/pad/DownLeft Hold BottomCap Active 6x1.png
new file mode 100644
index 0000000000..d28860440a
Binary files /dev/null and b/NoteSkins/pump/pad/DownLeft Hold BottomCap Active 6x1.png differ
diff --git a/NoteSkins/pump/pad/DownLeft Ready Receptor 1x3.png b/NoteSkins/pump/pad/DownLeft Ready Receptor 1x3.png
new file mode 100644
index 0000000000..3fd92f6f23
Binary files /dev/null and b/NoteSkins/pump/pad/DownLeft Ready Receptor 1x3.png differ
diff --git a/NoteSkins/pump/pad/DownLeft Roll Head Active 3x2.png b/NoteSkins/pump/pad/DownLeft Roll Head Active 3x2.png
new file mode 100644
index 0000000000..56bc2b2411
Binary files /dev/null and b/NoteSkins/pump/pad/DownLeft Roll Head Active 3x2.png differ
diff --git a/NoteSkins/pump/pad/DownLeft Tap Note 3x2.png b/NoteSkins/pump/pad/DownLeft Tap Note 3x2.png
new file mode 100644
index 0000000000..73d1ae0082
Binary files /dev/null and b/NoteSkins/pump/pad/DownLeft Tap Note 3x2.png differ
diff --git a/NoteSkins/pump/pad/DownRight Hold Body Active 6x1.png b/NoteSkins/pump/pad/DownRight Hold Body Active 6x1.png
new file mode 100644
index 0000000000..59300a1e1d
Binary files /dev/null and b/NoteSkins/pump/pad/DownRight Hold Body Active 6x1.png differ
diff --git a/NoteSkins/pump/pad/DownRight Hold BottomCap Active 6x1.png b/NoteSkins/pump/pad/DownRight Hold BottomCap Active 6x1.png
new file mode 100644
index 0000000000..34c6762d44
Binary files /dev/null and b/NoteSkins/pump/pad/DownRight Hold BottomCap Active 6x1.png differ
diff --git a/NoteSkins/pump/pad/DownRight Roll Head Active 3x2.png b/NoteSkins/pump/pad/DownRight Roll Head Active 3x2.png
new file mode 100644
index 0000000000..23e3979aed
Binary files /dev/null and b/NoteSkins/pump/pad/DownRight Roll Head Active 3x2.png differ
diff --git a/NoteSkins/pump/pad/UpLeft Hold Body Active 6x1.png b/NoteSkins/pump/pad/UpLeft Hold Body Active 6x1.png
new file mode 100644
index 0000000000..217d9cfc26
Binary files /dev/null and b/NoteSkins/pump/pad/UpLeft Hold Body Active 6x1.png differ
diff --git a/NoteSkins/pump/pad/UpLeft Hold BottomCap Active 6x1.png b/NoteSkins/pump/pad/UpLeft Hold BottomCap Active 6x1.png
new file mode 100644
index 0000000000..796e029122
Binary files /dev/null and b/NoteSkins/pump/pad/UpLeft Hold BottomCap Active 6x1.png differ
diff --git a/NoteSkins/pump/pad/UpLeft Ready Receptor 1x3.png b/NoteSkins/pump/pad/UpLeft Ready Receptor 1x3.png
new file mode 100644
index 0000000000..c50fcbca7c
Binary files /dev/null and b/NoteSkins/pump/pad/UpLeft Ready Receptor 1x3.png differ
diff --git a/NoteSkins/pump/pad/UpLeft Roll Head Active 3x2.png b/NoteSkins/pump/pad/UpLeft Roll Head Active 3x2.png
new file mode 100644
index 0000000000..1740406c46
Binary files /dev/null and b/NoteSkins/pump/pad/UpLeft Roll Head Active 3x2.png differ
diff --git a/NoteSkins/pump/pad/UpLeft Tap Note 3x2.png b/NoteSkins/pump/pad/UpLeft Tap Note 3x2.png
new file mode 100644
index 0000000000..bbe39eeceb
Binary files /dev/null and b/NoteSkins/pump/pad/UpLeft Tap Note 3x2.png differ
diff --git a/NoteSkins/pump/pad/UpRight Hold Body Active 6x1.png b/NoteSkins/pump/pad/UpRight Hold Body Active 6x1.png
new file mode 100644
index 0000000000..57ad1b1cd6
Binary files /dev/null and b/NoteSkins/pump/pad/UpRight Hold Body Active 6x1.png differ
diff --git a/NoteSkins/pump/pad/UpRight Hold BottomCap Active 6x1.png b/NoteSkins/pump/pad/UpRight Hold BottomCap Active 6x1.png
new file mode 100644
index 0000000000..c45d1d4149
Binary files /dev/null and b/NoteSkins/pump/pad/UpRight Hold BottomCap Active 6x1.png differ
diff --git a/NoteSkins/pump/pad/UpRight Roll Head Active 3x2.png b/NoteSkins/pump/pad/UpRight Roll Head Active 3x2.png
new file mode 100644
index 0000000000..fe3c63d2b5
Binary files /dev/null and b/NoteSkins/pump/pad/UpRight Roll Head Active 3x2.png differ
diff --git a/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ogg b/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ogg
new file mode 100644
index 0000000000..24464c899f
Binary files /dev/null and b/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ogg differ
diff --git a/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc b/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc
new file mode 100644
index 0000000000..48cc7a4d43
--- /dev/null
+++ b/Songs/StepMania 5/MechaTribe Assault/Mecha-Tribe Assault.ssc
@@ -0,0 +1,8527 @@
+#VERSION:0.77;
+#TITLE:Mecha-Tribe Assault;
+#SUBTITLE:;
+#ARTIST:Kommisar;
+#TITLETRANSLIT:;
+#SUBTITLETRANSLIT:;
+#ARTISTTRANSLIT:;
+#GENRE:;
+#ORIGIN:;
+#CREDIT:Graphics - Noon;
+#BANNER:mechatribeassaultbn.png;
+#BACKGROUND:mechatribeassaultbg.png;
+#LYRICSPATH:;
+#CDTITLE:wyde cd-tital.png;
+#MUSIC:Mecha-Tribe Assault.ogg;
+#OFFSET:-0.028000;
+#SAMPLESTART:48.018002;
+#SAMPLELENGTH:16.040001;
+#SELECTABLE:YES;
+#BPMS:0.000000=180.000000;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4;
+#TICKCOUNTS:0.000000=4;
+#COMBOS:0.000000=1;
+#SPEEDS:0.000000=1.000000=0.000000=0;
+#SCROLLS:0.000000=1.000000;
+#LABELS:0.000000=Song Start,
+16.000000=Verse 1A,
+32.000000=Verse 1B,
+48.000000=Verse 2A,
+64.000000=Verse 2B,
+80.000000=Verse 3A,
+96.000000=Verse 3B,
+112.000000=Verse 4A,
+128.000000=Verse 4B,
+144.000000=Verse 5A,
+160.000000=Verse 5B,
+176.000000=Verse 6A,
+192.000000=Verse 6B,
+208.000000=Verse 7A,
+224.000000=Verse 7B,
+240.000000=Verse 8A,
+256.000000=Verse 8B,
+272.000000=Verse 9A,
+288.000000=Verse 9B,
+304.000000=Fin;
+#BGCHANGES:;
+#KEYSOUNDS:;
+#ATTACKS:;
+
+//---------------dance-single - ----------------
+#NOTEDATA:;
+#CHARTNAME:Wyde;
+#STEPSTYPE:dance-single;
+#DESCRIPTION:;
+#CHARTSTYLE:;
+#DIFFICULTY:Challenge;
+#METER:11;
+#RADARVALUES:0.954,1.000,0.629,0.600,0.500,572.000,66.000,63.000,128.000,0.000,0.000,0.000,0.000,0.954,1.000,0.629,0.600,0.500,572.000,66.000,63.000,128.000,0.000,0.000,0.000,0.000;
+#CREDIT:Wyde;
+#OFFSET:-0.028000;
+#BPMS:0.000000=180.000000
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=2
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+;
+#SCROLLS:0.000000=1.000000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+,16.000000=Verse 1A
+,32.000000=Verse 1B
+,48.000000=Verse 2A
+,64.000000=Verse 2B
+,80.000000=Verse 3A
+,96.000000=Verse 3B
+,112.000000=Verse 4A
+,128.000000=Verse 4B
+,144.000000=Verse 5A
+,160.000000=Verse 5B
+,176.000000=Verse 6A
+,192.000000=Verse 6B
+,208.000000=Verse 7A
+,224.000000=Verse 7B
+,240.000000=Verse 8A
+,256.000000=Verse 8B
+,272.000000=Verse 9A
+,288.000000=Verse 9B
+,304.000000=Fin
+;
+#ATTACKS:;
+#NOTES:
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+1000
+1100
+000M
+1010
+000M
+0110
+M000
+1001
+,
+00M0
+1001
+0M00
+0011
+M000
+0101
+0100
+0001
+,
+1000
+1010
+0M00
+0101
+00M0
+1001
+0M00
+0110
+,
+M000
+0110
+000M
+1001
+00M0
+1100
+1000
+0100
+,
+0010
+0011
+M000
+0101
+00M0
+1001
+0M00
+1010
+,
+000M
+1010
+000M
+1100
+00M0
+0110
+0010
+0100
+,
+1000
+1001
+00M0
+0101
+M000
+1010
+000M
+1100
+,
+00M0
+1100
+000M
+0011
+0M00
+1001
+0001
+0010
+,
+0100
+1000
+0001
+0100
+0001
+1000
+0100
+0010
+,
+0001
+0000
+0010
+0000
+0100
+0000
+1000
+0000
+0001
+0000
+0100
+0000
+0001
+1000
+0100
+0010
+,
+0001
+1000
+0001
+0010
+0100
+1000
+0001
+0100
+,
+0010
+0000
+0100
+0000
+0001
+0000
+1000
+0000
+0100
+0000
+0010
+0000
+0001
+1000
+0010
+0100
+,
+0001
+1000
+0100
+0010
+0001
+1000
+0001
+0010
+,
+0100
+0000
+0010
+0000
+0001
+0000
+0100
+0000
+0001
+0000
+1000
+0000
+0100
+1000
+0001
+0010
+,
+0100
+0010
+0100
+1000
+0001
+0100
+0010
+1000
+,
+210M
+0000
+0000
+3020
+000M
+0030
+M102
+0000
+0000
+M023
+0000
+0030
+010M
+1000
+0100
+0010
+,
+0001
+0001
+0100
+0010
+1000
+0100
+0010
+0001
+,
+0100
+0000
+0100
+0000
+0001
+0000
+1000
+0000
+0100
+0000
+0010
+0000
+0001
+1000
+0001
+0100
+,
+0010
+0000
+1000
+0000
+1000
+0000
+0001
+0100
+0000
+0001
+0000
+1000
+0100
+0000
+0010
+0000
+,
+0001
+0000
+1000
+0100
+0000
+0100
+0000
+0010
+0000
+0001
+0010
+0100
+1000
+0100
+0010
+0001
+,
+1000
+1000
+0001
+0010
+0100
+1000
+0010
+0100
+,
+0001
+0000
+0001
+0000
+0100
+0000
+0010
+0000
+1000
+0000
+0001
+0000
+0010
+0100
+0010
+0001
+,
+1000
+0000
+0010
+0000
+0010
+0000
+0100
+0001
+0000
+1000
+0000
+0100
+0010
+0000
+0001
+0000
+,
+M102
+0000
+0000
+M023
+0000
+0030
+210M
+0000
+0000
+302M
+0000
+0000
+M130
+0001
+1000
+0100
+,
+1000
+00M0
+1020
+M000
+1030
+000M
+1002
+M000
+,
+1003
+0M00
+1200
+M000
+1300
+000M
+1002
+M000
+,
+1003
+00M0
+1020
+M000
+1030
+0M00
+1200
+M000
+,
+1300
+0000
+0001
+0000
+00M1
+0000
+0100
+0000
+M100
+0000
+0010
+0000
+001M
+0000
+1000
+0010
+,
+0100
+M000
+0201
+000M
+0301
+M000
+2001
+000M
+,
+3001
+00M0
+0021
+000M
+0031
+M000
+2001
+000M
+,
+3001
+0M00
+0201
+000M
+0301
+00M0
+0021
+000M
+,
+0031
+0000
+1000
+0000
+1M00
+0000
+0010
+0000
+001M
+0000
+0100
+0000
+01M0
+0000
+0001
+1000
+,
+0100
+1000
+10M0
+0001
+1000
+1000
+001M
+1000
+,
+1000
+0001
+1M00
+1000
+0010
+1000
+010M
+1000
+,
+0001
+1000
+10M0
+0100
+1000
+1000
+001M
+1000
+,
+1000
+0001
+0010
+0100
+0010
+0100
+1000
+0001
+1000
+0001
+0100
+0010
+0100
+0001
+0100
+0010
+,
+1000
+0001
+00M1
+0100
+0001
+0001
+M010
+0001
+,
+0001
+0100
+00M1
+0001
+1000
+0001
+0M10
+0001
+,
+1000
+0001
+00M1
+0100
+0001
+0001
+M010
+0001
+,
+0001
+0100
+0010
+1000
+0010
+1000
+0001
+0010
+0001
+0010
+0100
+1000
+0100
+0010
+0001
+1000
+,
+0010
+0100
+0020
+0000
+1030
+0000
+0010
+0100
+0020
+0000
+1030
+0000
+0010
+0100
+0001
+0100
+,
+0010
+0100
+0020
+0000
+1030
+0000
+0010
+0100
+0010
+1000
+0001
+1000
+0100
+0010
+0001
+0010
+,
+0100
+0010
+0200
+0000
+1300
+0000
+0100
+0010
+0001
+1000
+0001
+1000
+0001
+0010
+0100
+0000
+,
+1000
+0100
+0010
+0001
+0010
+0001
+1000
+0010
+1000
+0010
+0100
+0001
+0100
+0010
+1000
+0001
+,
+0100
+0010
+0200
+0000
+0301
+0000
+0100
+0010
+0200
+0000
+0301
+0000
+0100
+0010
+1000
+0010
+,
+0100
+0010
+0200
+0000
+0301
+0000
+0100
+0010
+0100
+0010
+1000
+0010
+0100
+0001
+1000
+0100
+,
+0010
+0100
+0020
+0000
+0031
+0000
+0010
+0100
+1000
+0001
+1000
+0100
+0010
+0001
+1000
+0000
+,
+0001
+0100
+0010
+0100
+0010
+0100
+0010
+1000
+0M01
+0010
+0100
+1000
+00M1
+0100
+0010
+1000
+,
+0001
+0100
+001M
+1000
+010M
+0010
+0011
+0001
+,
+1001
+0000
+1000
+0000
+00M1
+0000
+0100
+0000
+0110
+0000
+0010
+0000
+1000
+0001
+0010
+0100
+,
+1000
+0001
+M010
+0110
+010M
+1000
+1001
+0001
+,
+0101
+0000
+0100
+0000
+00M1
+0000
+1000
+0000
+0001
+0010
+0100
+1000
+0001
+0000
+0100
+0000
+,
+1001
+1000
+00M1
+0100
+00M1
+1000
+00M1
+0100
+,
+1001
+0000
+0001
+0000
+10M0
+0000
+0100
+0000
+10M0
+0000
+0001
+0000
+1000
+0100
+0010
+0001
+,
+1000
+0001
+1M00
+0010
+1M00
+0001
+1M00
+0010
+,
+1001
+0000
+1000
+0000
+010M
+0000
+0010
+0000
+0100
+1000
+0001
+1000
+0010
+0100
+0001
+1000
+,
+0M20
+0000
+0000
+0000
+0100
+0000
+0000
+0000
+1030
+0000
+0000
+0000
+0022
+0000
+0000
+0033
+,
+2100
+0000
+0000
+0000
+3010
+0000
+0000
+0000
+0022
+0000
+0000
+0033
+0220
+0000
+0000
+0330
+,
+1002
+0000
+0000
+0000
+0100
+0000
+0000
+0000
+1003
+0000
+0010
+0000
+2020
+0000
+0000
+3030
+,
+0201
+0000
+0310
+0000
+2001
+0010
+3010
+0000
+,
+012M
+1M00
+010M
+1M30
+,
+21M0
+001M
+01M0
+301M
+,
+M201
+001M
+M001
+031M
+,
+10M2
+0M10
+10M0
+0M10
+,
+M2M3
+00M0
+0301
+1000
+0200
+00M0
+1300
+0001
+,
+0200
+00M0
+0301
+1000
+0200
+000M
+1300
+0001
+,
+0020
+M000
+0130
+0010
+0002
+00M0
+1003
+0010
+,
+0200
+000M
+0310
+1000
+0002
+0M00
+0013
+0100
+,
+2000
+00M0
+3001
+0010
+0002
+0M00
+1003
+0100
+,
+2000
+00M0
+3001
+0100
+0002
+00M0
+1003
+0010
+,
+2000
+000M
+3100
+0010
+0200
+000M
+1300
+0010
+,
+2000
+0M00
+3001
+0100
+0002
+M000
+0013
+0220
+,
+0030
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0300
+0000
+0000
+0000
+;
+
+//---------------dance-single - ----------------
+#NOTEDATA:;
+#CHARTNAME:Wyde;
+#STEPSTYPE:dance-single;
+#DESCRIPTION:;
+#CHARTSTYLE:;
+#DIFFICULTY:Hard;
+#METER:10;
+#RADARVALUES:0.805,0.790,0.457,0.695,0.233,471.000,48.000,73.000,25.000,0.000,0.000,0.000,0.000,0.805,0.790,0.457,0.695,0.233,471.000,48.000,73.000,25.000,0.000,0.000,0.000,0.000;
+#CREDIT:Wyde;
+#OFFSET:-0.028000;
+#BPMS:0.000000=180.000000
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=2
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+;
+#SCROLLS:0.000000=1.000000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+,16.000000=Verse 1A
+,32.000000=Verse 1B
+,48.000000=Verse 2A
+,64.000000=Verse 2B
+,80.000000=Verse 3A
+,96.000000=Verse 3B
+,112.000000=Verse 4A
+,128.000000=Verse 4B
+,144.000000=Verse 5A
+,160.000000=Verse 5B
+,176.000000=Verse 6A
+,192.000000=Verse 6B
+,208.000000=Verse 7A
+,224.000000=Verse 7B
+,240.000000=Verse 8A
+,256.000000=Verse 8B
+,272.000000=Verse 9A
+,288.000000=Verse 9B
+,304.000000=Fin
+;
+#ATTACKS:;
+#NOTES:
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0001
+0100
+0000
+0010
+0000
+1000
+0000
+0001
+,
+0010
+0001
+0000
+1000
+0000
+0100
+0010
+0001
+,
+1000
+0001
+0000
+0100
+0000
+0010
+0000
+1000
+,
+0100
+1000
+0000
+0001
+0000
+0010
+0100
+1000
+,
+0001
+0100
+0000
+0010
+0000
+1000
+0000
+0100
+,
+0010
+0100
+0000
+1000
+0000
+0001
+0010
+0001
+,
+1000
+0010
+0000
+1000
+0000
+0100
+0000
+0010
+,
+0100
+0010
+0000
+0001
+0000
+1000
+0001
+0100
+,
+0010
+1000
+0000
+0101
+0000
+1001
+0000
+1100
+,
+00M0
+0000
+1100
+0000
+0000
+0000
+0110
+0000
+0000
+0000
+0001
+0000
+1000
+0001
+1000
+0010
+,
+1000
+0001
+0000
+0101
+0000
+0110
+0000
+1010
+,
+0M00
+0000
+1010
+0000
+0000
+0000
+0011
+0000
+0000
+0000
+1000
+0000
+0001
+1000
+0001
+0010
+,
+0001
+1000
+0000
+1010
+0000
+1001
+0000
+0011
+,
+M000
+0000
+0011
+0000
+0000
+0000
+0110
+0000
+0000
+0000
+1000
+0000
+0001
+1000
+0001
+0100
+,
+0001
+1000
+0000
+1100
+0000
+0110
+0000
+0001
+,
+2M00
+0000
+0000
+3020
+0000
+0000
+023M
+0000
+0000
+0302
+0000
+0000
+1003
+0010
+1000
+0010
+,
+0100
+0100
+0000
+0110
+0000
+0100
+0010
+1000
+,
+0100
+0000
+0100
+0000
+0000
+0000
+0110
+0000
+0000
+0000
+0100
+0000
+1000
+0001
+0010
+0001
+,
+1000
+0000
+0100
+0000
+1000
+0000
+0000
+0001
+0000
+1000
+0000
+0001
+0100
+0000
+0001
+0000
+,
+1000
+0000
+0001
+0010
+0000
+0100
+0000
+0010
+0000
+0100
+1000
+0100
+1000
+0000
+0001
+1000
+,
+0001
+0001
+0000
+1001
+0000
+0001
+0100
+0010
+,
+1000
+0000
+1000
+0000
+0000
+0000
+1001
+0000
+0000
+0000
+0001
+0000
+0010
+0001
+0010
+0100
+,
+1000
+0000
+0001
+0000
+1000
+0000
+0000
+0010
+0000
+0100
+0000
+0010
+0100
+0000
+0001
+0000
+,
+20M0
+0000
+0000
+3200
+0000
+0000
+M320
+0000
+0000
+0032
+0000
+0000
+1003
+0010
+0100
+0010
+,
+1000
+2001
+3001
+0012
+,
+0013
+0120
+0130
+1200
+,
+1300
+2010
+3010
+0120
+,
+0130
+0000
+0001
+0000
+0001
+0000
+1000
+0000
+1000
+0000
+0100
+0000
+0100
+0000
+0010
+0100
+,
+0010
+0021
+0031
+0102
+,
+0103
+0210
+0310
+1020
+,
+1030
+2001
+3001
+0012
+,
+0013
+0000
+0100
+0000
+0100
+0000
+1000
+0000
+1000
+0000
+0001
+0000
+0001
+0000
+1000
+0010
+,
+1000
+0200
+0000
+0310
+0002
+0000
+1003
+0020
+,
+0000
+0130
+0002
+0000
+1003
+0010
+1000
+0001
+,
+0010
+0200
+0000
+1300
+0002
+0000
+0103
+0010
+,
+1000
+0001
+0001
+1000
+1000
+0100
+0100
+0010
+,
+0001
+0200
+0000
+0310
+2000
+0000
+3100
+0020
+,
+0000
+0130
+2000
+0000
+3001
+0100
+0001
+1000
+,
+0010
+0200
+0000
+0301
+0020
+0000
+0130
+1000
+,
+0001
+0010
+0010
+0001
+0001
+1000
+1000
+0001
+,
+0100
+0010
+0100
+0000
+0001
+0000
+0100
+0010
+0100
+0000
+0001
+0000
+1000
+0000
+0100
+0000
+,
+0010
+0001
+0010
+0000
+0100
+0000
+0010
+0001
+0010
+0000
+0100
+0000
+1000
+0001
+1000
+0000
+,
+0001
+1000
+0001
+0000
+0100
+0000
+0001
+1000
+0001
+0000
+0100
+0000
+0010
+0000
+1000
+0000
+,
+0001
+0010
+0010
+0100
+0100
+1000
+1000
+0001
+,
+1000
+0010
+1000
+0000
+0001
+0000
+1000
+0010
+1000
+0000
+0001
+0000
+0100
+0000
+0010
+0000
+,
+0100
+0001
+0100
+0000
+0010
+0000
+0100
+0001
+0100
+0000
+0010
+0000
+1000
+0001
+1000
+0000
+,
+0001
+1000
+0001
+0000
+0010
+0000
+0001
+1000
+0001
+0000
+0010
+0000
+0100
+0000
+1000
+0000
+,
+0020
+0000
+0000
+0000
+1030
+0001
+1000
+0001
+,
+1002
+1003
+0100
+1000
+0001
+1000
+0020
+0130
+,
+0002
+0103
+0010
+1000
+0002
+0013
+0100
+0100
+,
+0020
+0130
+1000
+0002
+1003
+0100
+0020
+0031
+,
+0200
+0310
+1000
+0001
+0020
+0130
+1000
+1000
+,
+0002
+0103
+0001
+0100
+0001
+0100
+0001
+0100
+,
+0020
+1030
+0010
+1000
+0010
+1000
+0010
+0010
+,
+2000
+3001
+1000
+0001
+1000
+0001
+1000
+0001
+,
+0020
+0000
+0130
+0000
+0010
+0000
+0100
+0000
+0010
+0000
+0100
+0000
+1000
+0100
+0010
+0001
+,
+2000
+0100
+3001
+0011
+,
+0201
+0310
+1010
+1001
+,
+0021
+0100
+0031
+1100
+,
+2010
+3100
+0102
+1003
+,
+201M
+0M10
+001M
+3M10
+,
+M012
+0M10
+M010
+0M13
+,
+210M
+01M0
+010M
+31M0
+,
+M102
+0000
+0000
+0000
+01M0
+0000
+0000
+0000
+M100
+0000
+0000
+00M0
+0103
+0000
+0000
+0000
+,
+1M2M
+0000
+1030
+0001
+2000
+0000
+3001
+1000
+,
+0002
+0000
+1003
+0001
+2000
+0000
+3001
+1000
+,
+0200
+0000
+0310
+0100
+0020
+0000
+0031
+0010
+,
+0200
+0000
+1300
+0100
+0020
+0000
+0031
+1000
+,
+0020
+0000
+0130
+0010
+0200
+0000
+0310
+0100
+,
+0020
+0000
+1030
+0010
+2000
+0000
+3010
+1000
+,
+0020
+0000
+1030
+0001
+2000
+0000
+3001
+1000
+,
+0002
+0000
+0013
+0001
+0020
+0000
+0031
+2002
+,
+0003
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+3000
+0000
+0000
+0000
+;
+
+//---------------dance-single - ----------------
+#NOTEDATA:;
+#CHARTNAME:Wyde;
+#STEPSTYPE:dance-single;
+#DESCRIPTION:;
+#CHARTSTYLE:;
+#DIFFICULTY:Medium;
+#METER:8;
+#RADARVALUES:0.605,0.602,0.429,0.476,0.019,350.000,45.000,50.000,0.000,0.000,0.000,0.000,0.000,0.605,0.602,0.429,0.476,0.019,350.000,45.000,50.000,0.000,0.000,0.000,0.000,0.000;
+#CREDIT:Wyde;
+#OFFSET:-0.028000;
+#BPMS:0.000000=180.000000
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=2
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+;
+#SCROLLS:0.000000=1.000000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+,16.000000=Verse 1A
+,32.000000=Verse 1B
+,48.000000=Verse 2A
+,64.000000=Verse 2B
+,80.000000=Verse 3A
+,96.000000=Verse 3B
+,112.000000=Verse 4A
+,128.000000=Verse 4B
+,144.000000=Verse 5A
+,160.000000=Verse 5B
+,176.000000=Verse 6A
+,192.000000=Verse 6B
+,208.000000=Verse 7A
+,224.000000=Verse 7B
+,240.000000=Verse 8A
+,256.000000=Verse 8B
+,272.000000=Verse 9A
+,288.000000=Verse 9B
+,304.000000=Fin
+;
+#ATTACKS:;
+#NOTES:
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+1000
+1000
+0001
+0001
+,
+1000
+0000
+1000
+0000
+0001
+0000
+0001
+1000
+,
+0001
+0001
+0010
+0010
+,
+0001
+0000
+0001
+0000
+0010
+0000
+0010
+0001
+,
+0010
+0010
+0100
+0100
+,
+0010
+0000
+0010
+0000
+0100
+0000
+0100
+0010
+,
+0100
+0100
+1000
+1000
+,
+0100
+0000
+0100
+0000
+1000
+0000
+1000
+0001
+,
+1000
+0010
+0000
+0010
+0000
+0010
+0000
+0010
+,
+0000
+0010
+0000
+0010
+0000
+0100
+0001
+0010
+,
+0100
+1000
+0000
+1000
+0000
+1000
+0000
+1000
+,
+0000
+1000
+0000
+1000
+0000
+0100
+1000
+0010
+,
+0100
+0001
+0000
+0001
+0000
+0001
+0000
+0001
+,
+0000
+0001
+0000
+0001
+0000
+0010
+0100
+1000
+,
+0010
+0100
+0000
+0100
+0000
+0100
+0000
+0100
+,
+0002
+0000
+0000
+2003
+0000
+0000
+3002
+0000
+0000
+2003
+0000
+0000
+3100
+0000
+0010
+0000
+,
+0001
+1000
+0000
+1000
+0000
+1000
+0010
+0100
+,
+0001
+1000
+0000
+1000
+0000
+1000
+0100
+0010
+,
+0001
+1000
+0010
+1000
+0000
+1000
+0000
+1000
+,
+0100
+1000
+0000
+1000
+0000
+0001
+0100
+0010
+,
+1000
+0001
+0000
+0001
+0000
+0001
+0010
+0100
+,
+1000
+0001
+0000
+0001
+0000
+0001
+0100
+0010
+,
+1000
+0001
+0010
+0001
+0000
+0001
+0000
+0001
+,
+0200
+0000
+0000
+0320
+0000
+0000
+0230
+0000
+0000
+0320
+0000
+0000
+1030
+0000
+0001
+0000
+,
+1000
+1100
+1000
+1100
+,
+1000
+1001
+1000
+1001
+,
+1000
+1010
+1000
+1010
+,
+1000
+0001
+0010
+0001
+1000
+0001
+1000
+0001
+,
+0100
+0101
+0001
+0101
+,
+0001
+1001
+0001
+1001
+,
+0001
+0011
+0001
+0011
+,
+0001
+1000
+0010
+1000
+0001
+1000
+0001
+1000
+,
+0100
+0000
+0010
+0001
+0010
+0000
+0110
+0000
+,
+0100
+1000
+0100
+0000
+0011
+0000
+1001
+0000
+,
+1010
+0000
+1000
+0001
+1000
+0000
+1010
+0000
+,
+0010
+0100
+0010
+1000
+0010
+0100
+0001
+1000
+,
+0010
+0000
+1000
+0001
+1000
+0000
+1100
+0000
+,
+0100
+1000
+0100
+0000
+1001
+0000
+0110
+0000
+,
+1001
+0000
+0001
+0100
+0001
+0000
+1001
+0000
+,
+1000
+0010
+1000
+0001
+1000
+0100
+0010
+0001
+,
+2000
+0000
+3010
+2000
+0000
+3010
+0100
+0001
+,
+2000
+0000
+3100
+2000
+0000
+3100
+0010
+0001
+,
+2000
+0000
+3001
+1000
+0001
+0001
+1000
+0001
+,
+0000
+0100
+0010
+1000
+0001
+0010
+0100
+1000
+,
+0002
+0000
+0103
+0002
+0000
+0103
+0010
+1000
+,
+0002
+0000
+0013
+0002
+0000
+0013
+0100
+1000
+,
+0002
+0000
+1003
+0001
+1000
+1000
+0001
+0010
+,
+0200
+0000
+0000
+0000
+1300
+0001
+1000
+0001
+,
+0100
+0110
+0101
+1010
+,
+0011
+0000
+1001
+0000
+0110
+0000
+0001
+1000
+,
+0100
+0000
+0010
+0001
+1000
+0000
+0011
+0000
+,
+0101
+0000
+1001
+0000
+0110
+0000
+0001
+1000
+,
+0010
+1001
+1010
+1001
+,
+0101
+0000
+0110
+0000
+0101
+0000
+0010
+1000
+,
+0001
+0011
+1001
+0011
+,
+1100
+0000
+0110
+0000
+1100
+0000
+0010
+0001
+,
+2000
+0000
+0001
+3020
+,
+0230
+0000
+0302
+0023
+,
+0230
+0000
+1000
+0320
+,
+0032
+0000
+2003
+0000
+,
+3020
+0000
+0100
+0000
+,
+0230
+0000
+0001
+0000
+,
+0302
+0000
+1000
+0000
+,
+2003
+0000
+0100
+0000
+,
+3002
+0000
+0003
+0001
+2000
+0000
+3000
+1000
+,
+0002
+0000
+0003
+0001
+2000
+0000
+3000
+1000
+,
+0200
+0000
+0300
+0100
+0020
+0000
+0031
+1000
+,
+0020
+0000
+0030
+0010
+0200
+0000
+0300
+0100
+,
+0002
+0000
+0003
+0001
+0200
+0000
+0300
+0100
+,
+0020
+0000
+0030
+0010
+2000
+0000
+3000
+1000
+,
+0002
+0000
+0003
+0001
+0020
+0000
+0030
+0010
+,
+0200
+0000
+0300
+0100
+2000
+0000
+3000
+2002
+,
+3000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0003
+0000
+0000
+0000
+;
+
+//---------------dance-single - ----------------
+#NOTEDATA:;
+#CHARTNAME:Wyde;
+#STEPSTYPE:dance-single;
+#DESCRIPTION:;
+#CHARTSTYLE:;
+#DIFFICULTY:Easy;
+#METER:6;
+#RADARVALUES:0.484,0.527,0.324,0.495,0.000,270.000,34.000,52.000,0.000,0.000,0.000,0.000,0.000,0.484,0.527,0.324,0.495,0.000,270.000,34.000,52.000,0.000,0.000,0.000,0.000,0.000;
+#CREDIT:Wyde;
+#OFFSET:-0.028000;
+#BPMS:0.000000=180.000000
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=2
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+;
+#SCROLLS:0.000000=1.000000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+,16.000000=Verse 1A
+,32.000000=Verse 1B
+,48.000000=Verse 2A
+,64.000000=Verse 2B
+,80.000000=Verse 3A
+,96.000000=Verse 3B
+,112.000000=Verse 4A
+,128.000000=Verse 4B
+,144.000000=Verse 5A
+,160.000000=Verse 5B
+,176.000000=Verse 6A
+,192.000000=Verse 6B
+,208.000000=Verse 7A
+,224.000000=Verse 7B
+,240.000000=Verse 8A
+,256.000000=Verse 8B
+,272.000000=Verse 9A
+,288.000000=Verse 9B
+,304.000000=Fin
+;
+#ATTACKS:;
+#NOTES:
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+1000
+0001
+1000
+0001
+,
+1000
+0000
+0001
+0000
+1000
+0000
+0001
+1000
+,
+0001
+1000
+0001
+1000
+,
+0001
+0000
+1000
+0000
+0001
+0000
+1000
+0001
+,
+1000
+0001
+1000
+0001
+,
+1000
+0000
+0001
+0000
+1000
+0000
+0001
+1000
+,
+0001
+1000
+0001
+1000
+,
+0001
+0000
+1000
+0000
+0001
+0000
+1000
+0001
+,
+1000
+0100
+1000
+0100
+,
+0010
+0000
+0100
+0000
+0010
+0000
+0001
+0010
+,
+0001
+1000
+0001
+1000
+,
+0010
+0000
+1000
+0000
+0010
+0000
+0100
+0010
+,
+0100
+0001
+0100
+0001
+,
+1000
+0000
+0001
+0000
+1000
+0000
+0100
+1000
+,
+0100
+0010
+0100
+0010
+,
+2002
+0000
+0000
+3003
+0000
+0000
+0220
+0000
+0000
+0330
+0000
+0000
+1001
+0000
+0000
+0000
+,
+1000
+0100
+0010
+0001
+,
+1000
+0000
+0001
+0000
+0010
+0000
+0100
+1000
+,
+0100
+0010
+0001
+1000
+,
+0001
+0000
+0010
+0000
+0100
+0000
+1000
+0001
+,
+1000
+0010
+0100
+0001
+,
+1000
+0000
+0001
+0000
+0100
+0000
+0010
+1000
+,
+0010
+0100
+0001
+1000
+,
+2002
+0000
+0000
+3003
+0000
+0000
+0220
+0000
+0000
+0330
+0000
+0000
+1001
+0000
+0000
+0000
+,
+1000
+0200
+1300
+0002
+,
+1003
+0020
+1030
+0002
+,
+1003
+0200
+1300
+0002
+,
+1003
+0000
+1000
+0000
+0001
+1000
+0001
+1000
+,
+0001
+0020
+0031
+2000
+,
+3001
+0200
+0301
+2000
+,
+3001
+0020
+0031
+2000
+,
+3001
+0000
+0001
+0000
+1000
+0001
+1000
+0001
+,
+1000
+0000
+0000
+0011
+0000
+0000
+0101
+0000
+,
+0000
+1010
+0000
+0000
+1001
+0000
+0110
+0000
+,
+1001
+0000
+0000
+0011
+0000
+0000
+1100
+0000
+,
+1000
+0000
+0100
+0000
+0010
+0001
+0010
+0001
+,
+0010
+0000
+0000
+1010
+0000
+0000
+0101
+0000
+,
+0000
+0011
+0000
+0000
+0110
+0000
+1001
+0000
+,
+0110
+0000
+0000
+1100
+0000
+0000
+0101
+0000
+,
+0001
+0000
+1000
+0000
+0010
+0100
+0010
+0100
+,
+0010
+1000
+0100
+0010
+,
+0100
+1000
+0010
+0100
+,
+0010
+1000
+0100
+0010
+,
+0001
+0000
+1000
+0000
+0100
+1000
+0100
+1000
+,
+0100
+0010
+0001
+0100
+,
+0010
+0100
+0001
+0010
+,
+0100
+0010
+0001
+0100
+,
+0020
+0000
+0000
+0000
+1030
+0001
+1000
+0001
+,
+1000
+0100
+0010
+0110
+,
+1100
+1000
+1001
+0101
+,
+0110
+0000
+0000
+1010
+0000
+0000
+0011
+0000
+,
+1001
+0000
+1000
+0000
+1010
+0000
+0010
+1000
+,
+0010
+0100
+0001
+0100
+,
+0101
+0000
+0001
+0000
+1000
+0000
+0001
+0010
+,
+0001
+1000
+0100
+1000
+,
+1100
+0000
+0100
+0000
+0010
+0000
+0001
+1000
+,
+0002
+0000
+0000
+0023
+,
+0032
+0000
+2003
+3020
+,
+0230
+0000
+0000
+0302
+,
+2003
+0000
+3200
+0000
+,
+0320
+0000
+0000
+0000
+,
+0032
+0000
+0000
+0000
+,
+2003
+0000
+0000
+0000
+,
+3020
+0000
+0000
+0000
+,
+0230
+0300
+0200
+0300
+,
+0200
+0300
+0200
+0300
+,
+0002
+0003
+0002
+0013
+,
+0200
+0300
+0020
+0030
+,
+0002
+0003
+2000
+3000
+,
+0002
+0003
+2000
+3000
+,
+0002
+0003
+2000
+3000
+,
+0002
+0000
+0003
+0000
+2000
+0000
+3000
+2002
+,
+3000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0003
+0000
+0000
+0000
+;
+
+//---------------dance-single - ----------------
+#NOTEDATA:;
+#CHARTNAME:Wyde;
+#STEPSTYPE:dance-single;
+#DESCRIPTION:;
+#CHARTSTYLE:;
+#DIFFICULTY:Beginner;
+#METER:2;
+#RADARVALUES:0.265,0.289,0.181,0.171,0.000,158.000,19.000,18.000,2.000,0.000,0.000,0.000,0.000,0.265,0.289,0.181,0.171,0.000,158.000,19.000,18.000,2.000,0.000,0.000,0.000,0.000;
+#CREDIT:Wyde;
+#OFFSET:-0.028000;
+#BPMS:0.000000=180.000000
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=2
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+;
+#SCROLLS:0.000000=1.000000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+,16.000000=Verse 1A
+,32.000000=Verse 1B
+,48.000000=Verse 2A
+,64.000000=Verse 2B
+,80.000000=Verse 3A
+,96.000000=Verse 3B
+,112.000000=Verse 4A
+,128.000000=Verse 4B
+,144.000000=Verse 5A
+,160.000000=Verse 5B
+,176.000000=Verse 6A
+,192.000000=Verse 6B
+,208.000000=Verse 7A
+,224.000000=Verse 7B
+,240.000000=Verse 8A
+,256.000000=Verse 8B
+,272.000000=Verse 9A
+,288.000000=Verse 9B
+,304.000000=Fin
+;
+#ATTACKS:;
+#NOTES:
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0100
+0000
+0000
+0000
+,
+1001
+0000
+0000
+0010
+,
+0010
+0000
+0000
+0000
+,
+1001
+0000
+0000
+0100
+,
+0100
+0000
+0000
+0000
+,
+1001
+0000
+0000
+0010
+,
+0010
+0000
+0000
+0000
+,
+1001
+0000
+0000
+0100
+,
+0100
+0000
+0010
+0000
+,
+1001
+0000
+0000
+0010
+,
+0010
+0000
+0100
+0000
+,
+1001
+0000
+0000
+0100
+,
+0100
+0000
+0010
+0000
+,
+1001
+0000
+0000
+0010
+,
+0010
+0000
+0100
+0000
+,
+0220
+0000
+0330
+0000
+,
+0001
+0000
+0100
+0000
+,
+1001
+0000
+0100
+0000
+,
+1000
+0000
+0100
+0000
+,
+1001
+0000
+0010
+0000
+,
+1000
+0000
+0010
+0000
+,
+1001
+0000
+0010
+0000
+,
+0001
+0000
+0010
+0000
+,
+0220
+0000
+0330
+0000
+,
+1000
+1000
+1000
+1000
+,
+1000
+1000
+1000
+1000
+,
+1000
+1000
+1000
+1000
+,
+1000
+0000
+0000
+0000
+,
+0001
+0001
+0001
+0001
+,
+0001
+0001
+0001
+0001
+,
+0001
+0001
+0001
+0001
+,
+0001
+0000
+0000
+0000
+,
+0010
+0010
+0010
+0010
+,
+0010
+0010
+0010
+0010
+,
+0010
+0010
+0010
+0010
+,
+0020
+0000
+0030
+0000
+,
+0100
+0100
+0100
+0100
+,
+0100
+0100
+0100
+0100
+,
+0100
+0100
+0100
+0100
+,
+0200
+0000
+0300
+0000
+,
+1001
+0000
+0010
+0000
+,
+1001
+0000
+0010
+0000
+,
+1001
+0000
+0010
+0000
+,
+1000
+1000
+1000
+0000
+,
+1001
+0000
+0100
+0000
+,
+1001
+0000
+0100
+0000
+,
+1001
+0000
+0100
+0000
+,
+0000
+0000
+0001
+0001
+,
+0002
+0003
+0000
+1000
+,
+1000
+0000
+0100
+0100
+,
+0200
+0300
+0000
+0010
+,
+0010
+0000
+0001
+0000
+,
+2000
+3000
+1000
+0000
+,
+0002
+0003
+0001
+0000
+,
+0200
+0300
+0100
+0000
+,
+0020
+0030
+0010
+0000
+,
+2000
+0000
+3000
+1000
+,
+1000
+0000
+0001
+0001
+,
+0002
+0000
+0003
+0001
+,
+0001
+0000
+0010
+0000
+,
+0200
+0000
+0300
+0000
+,
+2000
+0000
+3000
+0000
+,
+0002
+0000
+0003
+0000
+,
+0200
+0000
+0300
+0000
+,
+1001
+0000
+1000
+0000
+,
+1000
+0000
+1000
+0000
+,
+0010
+0000
+0100
+0100
+,
+0100
+0000
+0001
+0000
+,
+0010
+0000
+0100
+0000
+,
+0010
+0000
+0100
+0000
+,
+0010
+0000
+0100
+0000
+,
+0010
+0000
+0000
+0000
+0100
+0000
+0000
+M00M
+;
+
+//---------------dance-solo - ----------------
+#NOTEDATA:;
+#CHARTNAME:Hard;
+#STEPSTYPE:dance-solo;
+#DESCRIPTION:;
+#CHARTSTYLE:Pad;
+#DIFFICULTY:Hard;
+#METER:10;
+#RADARVALUES:0.710,0.828,0.229,0.324,0.190,464.000,24.000,34.000,6.000,5.000,8.000,0.000,0.000,0.710,0.828,0.229,0.324,0.190,464.000,24.000,34.000,6.000,5.000,8.000,0.000,0.000;
+#CREDIT:Jason Felds;
+#OFFSET:-0.028000;
+#BPMS:0.000000=180.000000
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=4
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+,303.500000=0.250000=12.500000=0
+;
+#SCROLLS:0.000000=1.000000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+,16.000000=Verse 1A
+,32.000000=Verse 1B
+,48.000000=Verse 2A
+,64.000000=Verse 2B
+,80.000000=Verse 3A
+,96.000000=Verse 3B
+,112.000000=Verse 4A
+,128.000000=Verse 4B
+,144.000000=Verse 5A
+,160.000000=Verse 5B
+,176.000000=Verse 6A
+,192.000000=Verse 6B
+,208.000000=Verse 7A
+,224.000000=Verse 7B
+,240.000000=Verse 8A
+,256.000000=Verse 8B
+,272.000000=Verse 9A
+,288.000000=Verse 9B
+,304.000000=Fin
+;
+#ATTACKS:;
+#NOTES:
+000000
+000000
+000000
+000000
+,
+000000
+000000
+000000
+000000
+,
+000000
+000000
+000000
+000000
+,
+000000
+000000
+000000
+000000
+,
+000001
+001000
+000000
+000001
+000000
+010000
+000000
+000010
+,
+010000
+000100
+000000
+100000
+000000
+000001
+000000
+001000
+,
+000010
+010000
+000000
+001000
+000000
+000100
+000000
+000010
+,
+000001
+000100
+000000
+001000
+000000
+000010
+000000
+100000
+,
+000100
+000001
+000000
+100000
+000000
+001000
+000000
+000001
+,
+000010
+001000
+000000
+010000
+000000
+000010
+000000
+001000
+,
+000100
+010000
+000000
+000001
+000000
+010000
+000000
+100000
+,
+000100
+000010
+000000
+001000
+000000
+000010
+000000
+100000
+,
+001000
+000100
+000000
+000101
+000000
+000001
+000000
+010001
+,
+000000
+000000
+010000
+000000
+000000
+000000
+011000
+000000
+000000
+000000
+001000
+000000
+100000
+000001
+100000
+000010
+,
+010000
+000100
+000000
+001100
+000000
+001000
+000000
+001010
+,
+000000
+000000
+000010
+000000
+000000
+000000
+100010
+000000
+000000
+000000
+100000
+000000
+000010
+001000
+000001
+001000
+,
+000100
+100000
+000000
+101000
+000000
+001000
+000000
+001010
+,
+000000
+000000
+000010
+000000
+000000
+000000
+000011
+000000
+000000
+000000
+000001
+000000
+000100
+100000
+000100
+001000
+,
+000010
+000001
+000000
+001001
+000000
+001000
+000000
+001100
+,
+000200
+000000
+000000
+200300
+000000
+000000
+000002
+000000
+000000
+020000
+000000
+000000
+330013
+000000
+000000
+000000
+,
+100000
+001000
+000000
+011000
+000000
+010000
+000000
+010010
+,
+000000
+000000
+000010
+000000
+000000
+000000
+001010
+000000
+000000
+000000
+001000
+000000
+000001
+100000
+000001
+010000
+,
+000010
+010000
+000000
+011000
+000000
+001000
+000000
+001010
+,
+000000
+000000
+000010
+000000
+000000
+000000
+000011
+000000
+000000
+000000
+000001
+000000
+010000
+000100
+100000
+000100
+,
+001000
+000001
+000000
+000101
+000000
+000100
+000000
+001100
+,
+000000
+000000
+001000
+000000
+000000
+000000
+101000
+000000
+000000
+000000
+100000
+000000
+000100
+000001
+000100
+001000
+,
+010000
+100000
+000000
+100100
+000000
+000100
+000000
+001100
+,
+002000
+000000
+000000
+003002
+000000
+000000
+200000
+000000
+000000
+000020
+000000
+000000
+310033
+000000
+000000
+000000
+,
+100000
+000010
+010000
+000010
+000100
+000010
+001000
+000010
+,
+000001
+000010
+001000
+000010
+010000
+000010
+100000
+000010
+,
+010000
+001000
+000100
+000001
+000010
+001000
+010000
+000100
+,
+100000
+000000
+100000
+000000
+000010
+000000
+000010
+000000
+010000
+000000
+010000
+000000
+000100
+000000
+000100
+001000
+,
+000001
+010000
+000010
+010000
+000100
+010000
+001000
+010000
+,
+100000
+010000
+001000
+010000
+000010
+010000
+000001
+010000
+,
+000010
+000100
+001000
+100000
+010000
+001000
+000010
+000100
+,
+000001
+000000
+000001
+000000
+010000
+000000
+010000
+000000
+000010
+000000
+000010
+000000
+001000
+000000
+001000
+000100
+,
+020000
+000010
+030010
+000020
+001000
+001030
+002000
+000001
+,
+003001
+000002
+010000
+010003
+010000
+000010
+001000
+000100
+,
+200000
+000001
+300001
+000002
+010000
+010003
+020000
+030010
+,
+004000
+000004
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+003003
+000000
+,
+000020
+010000
+010030
+020000
+000100
+030100
+000200
+100000
+,
+100300
+200000
+000010
+300010
+000010
+010000
+000100
+001000
+,
+000002
+100000
+100003
+200000
+000010
+300010
+000020
+010030
+,
+000400
+400000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+300300
+000000
+,
+010000
+000010
+010000
+000000
+001000
+000000
+010000
+000010
+010000
+000000
+000100
+000000
+010000
+000010
+010000
+000000
+,
+000001
+001000
+000001
+000000
+000100
+000000
+000001
+001000
+000001
+000000
+000010
+000000
+000001
+001000
+000001
+000000
+,
+100000
+010000
+100000
+000000
+001000
+000000
+100000
+010000
+100000
+000000
+000010
+000000
+100000
+010000
+100000
+000000
+,
+000040
+004000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+003030
+000000
+,
+000010
+010000
+000010
+000000
+000100
+000000
+000010
+010000
+000010
+000000
+001000
+000000
+000010
+010000
+000010
+000000
+,
+100000
+000100
+100000
+000000
+001000
+000000
+100000
+000100
+100000
+000000
+010000
+000000
+100000
+000100
+100000
+000000
+,
+000001
+000010
+000001
+000000
+000100
+000000
+000001
+000010
+000001
+000000
+010000
+000000
+000001
+000010
+000001
+000000
+,
+040000
+000400
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+000000
+030300
+000000
+,
+000010
+001000
+000001
+000100
+000010
+010000
+001000
+100000
+,
+000100
+001000
+100000
+001000
+000010
+010000
+000001
+000100
+,
+000010
+001000
+010000
+001000
+000100
+100000
+000001
+000100
+,
+001000
+000100
+100000
+000100
+010000
+000100
+100000
+000100
+,
+001000
+010000
+000100
+001000
+000010
+010000
+001000
+100000
+,
+000100
+001000
+000001
+000010
+000001
+010000
+001000
+000100
+,
+000001
+001000
+000010
+100000
+010000
+100000
+000100
+001000
+,
+000010
+010000
+000001
+001000
+010000
+000100
+000010
+001000
+,
+000002
+010000
+100000
+010000
+,
+002003
+000100
+000010
+000100
+,
+023000
+100000
+001000
+100000
+,
+030002
+000100
+010000
+000100
+,
+000023
+010000
+001000
+010000
+,
+000230
+100000
+010000
+100000
+,
+002300
+000100
+000010
+000100
+,
+203000
+000010
+001000
+300010
+,
+000001
+000000
+010000
+001000
+010000
+000000
+000010
+001000
+,
+000010
+000000
+100000
+000100
+100000
+000000
+000010
+010000
+,
+000010
+000000
+001000
+000001
+001000
+000000
+000010
+000001
+,
+000010
+000000
+100000
+000100
+100000
+000000
+010000
+001000
+,
+010000
+000000
+100000
+000010
+100000
+000000
+000001
+000100
+,
+000001
+000000
+010000
+001000
+010000
+000000
+000010
+100000
+,
+000010
+000000
+001000
+000001
+001000
+000000
+000100
+010000
+,
+000100
+000000
+001000
+000010
+001000
+000000
+000022
+220000
+,
+000000
+000000
+000000
+000000
+,
+000000
+000000
+000000
+000000
+,
+000000
+000000
+000000
+330033
+,
+MMMMMM
+000000
+000000
+000000
+;
+
+//---------------pump-single - ----------------
+#NOTEDATA:;
+#CHARTNAME:Vin.il;
+#STEPSTYPE:pump-single;
+#DESCRIPTION:;
+#CHARTSTYLE:Pad;
+#DIFFICULTY:Hard;
+#METER:19;
+#RADARVALUES:1.000,1.000,1.000,0.448,0.538,569.000,106.000,47.000,50.000,16.000,0.000,0.000,0.000,1.000,1.000,1.000,0.448,0.538,569.000,106.000,47.000,50.000,16.000,0.000,0.000,0.000;
+#CREDIT:Vin.il;
+#OFFSET:-0.028000;
+#BPMS:0.000000=180.000000
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=4
+,303.500000=16
+;
+#COMBOS:0.000000=2
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+,76.000000=0.500000=0.375000=0
+,76.750000=1.000000=0.375000=0
+,77.500000=0.500000=0.375000=0
+,78.250000=1.000000=0.375000=0
+,79.000000=0.500000=0.375000=0
+,79.500000=1.000000=0.375000=0
+,108.000000=0.500000=0.375000=0
+,108.750000=1.000000=0.375000=0
+,109.500000=0.500000=0.375000=0
+,110.250000=1.000000=0.375000=0
+,111.000000=0.500000=0.375000=0
+,111.500000=1.000000=0.375000=0
+,206.000000=1.250000=0.000000=0
+,206.500000=1.500000=0.000000=0
+,207.000000=1.750000=0.000000=0
+,207.500000=2.000000=0.000000=0
+,272.000000=1.500000=0.250000=0
+,272.500000=2.000000=0.250000=0
+,273.000000=1.500000=0.250000=0
+,273.500000=2.000000=0.250000=0
+,274.000000=1.500000=0.250000=0
+,274.500000=2.000000=0.250000=0
+,275.000000=1.500000=0.250000=0
+,275.500000=2.000000=0.250000=0
+,276.000000=1.500000=0.250000=0
+,276.500000=2.000000=0.250000=0
+,277.000000=1.500000=0.250000=0
+,277.500000=2.000000=0.250000=0
+,278.000000=1.500000=0.250000=0
+,278.500000=2.000000=0.250000=0
+,279.000000=1.500000=0.250000=0
+,279.500000=2.000000=0.250000=0
+,280.000000=1.500000=0.250000=0
+,280.500000=2.000000=0.250000=0
+,281.000000=1.500000=0.250000=0
+,281.500000=2.000000=0.250000=0
+,282.000000=1.500000=0.250000=0
+,282.500000=2.000000=0.250000=0
+,283.000000=1.500000=0.250000=0
+,283.500000=2.000000=0.250000=0
+,284.000000=1.000000=0.250000=0
+,284.500000=2.000000=0.250000=0
+,285.000000=1.500000=0.250000=0
+,285.500000=2.000000=0.250000=0
+,286.000000=1.500000=0.250000=0
+,286.500000=2.000000=0.250000=0
+,287.000000=1.500000=0.250000=0
+,287.500000=2.000000=0.250000=0
+,288.000000=1.500000=0.250000=0
+,288.500000=2.000000=0.250000=0
+,289.000000=1.500000=0.250000=0
+,289.500000=2.000000=0.250000=0
+,290.000000=1.500000=0.250000=0
+,290.500000=2.000000=0.250000=0
+,291.000000=1.500000=0.250000=0
+,291.500000=2.000000=0.250000=0
+,292.000000=1.500000=0.250000=0
+,292.500000=2.000000=0.250000=0
+,293.000000=1.500000=0.250000=0
+,293.500000=2.000000=0.250000=0
+,294.000000=1.500000=0.250000=0
+,294.500000=2.000000=0.250000=0
+,295.000000=1.500000=0.250000=0
+,295.500000=2.000000=0.250000=0
+,296.000000=1.500000=0.250000=0
+,296.500000=2.000000=0.250000=0
+,297.000000=1.500000=0.250000=0
+,297.500000=2.000000=0.250000=0
+,298.000000=1.500000=0.250000=0
+,298.500000=2.000000=0.250000=0
+,299.000000=1.500000=0.250000=0
+,299.500000=2.000000=0.250000=0
+,300.000000=1.500000=0.250000=0
+,300.500000=2.000000=0.250000=0
+,301.000000=1.500000=0.250000=0
+,301.500000=2.000000=0.250000=0
+,302.000000=1.500000=0.250000=0
+,302.500000=2.000000=0.250000=0
+,303.000000=1.500000=0.250000=0
+,303.500000=2.000000=12.500000=0
+;
+#SCROLLS:0.000000=1.000000
+,204.000000=0.500000
+,272.000000=0.250000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+,16.000000=Verse 1A
+,32.000000=Verse 1B
+,48.000000=Verse 2A
+,64.000000=Verse 2B
+,80.000000=Verse 3A
+,96.000000=Verse 3B
+,112.000000=Verse 4A
+,128.000000=Verse 4B
+,144.000000=Verse 5A
+,160.000000=Verse 5B
+,176.000000=Verse 6A
+,192.000000=Verse 6B
+,208.000000=Verse 7A
+,224.000000=Verse 7B
+,240.000000=Verse 8A
+,256.000000=Verse 8B
+,272.000000=Verse 9A
+,288.000000=Verse 9B
+,304.000000=Fin
+;
+#ATTACKS:TIME=101.194664:LEN=7.000000:MODS=*0.2399996928003932 Reverse, Overhead;
+#NOTES:
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+00110
+00000
+00010
+00100
+00010
+00000
+00010
+10100
+,
+00010
+10100
+00010
+00000
+00010
+01100
+00010
+01000
+,
+01100
+00000
+01000
+00100
+01000
+00000
+01000
+00101
+,
+01000
+00101
+01000
+00000
+01000
+00110
+01000
+00010
+,
+10100
+00000
+10000
+00100
+10000
+00000
+10000
+00110
+,
+10000
+00110
+10000
+00000
+10000
+00101
+10000
+00001
+,
+00101
+00000
+00001
+00100
+00001
+00000
+00001
+01100
+,
+00001
+01100
+00001
+00000
+00001
+10100
+00001
+10000
+,
+00101
+10000
+00010
+00110
+00010
+01000
+00100
+01001
+,
+00100
+00000
+01001
+00000
+00100
+00000
+00010
+00000
+10000
+00000
+00110
+00000
+01000
+00100
+01000
+00100
+,
+10000
+10000
+10100
+10000
+00001
+00001
+00101
+00001
+,
+01000
+00000
+01000
+00000
+01100
+00000
+01000
+00000
+00010
+00000
+00010
+00000
+00010
+00100
+00010
+00100
+,
+00001
+00000
+00100
+00000
+00101
+00000
+00001
+10000
+00100
+00000
+10000
+00000
+10100
+00000
+10000
+00010
+,
+00100
+00000
+00010
+00000
+00110
+00000
+00010
+01000
+00100
+00000
+01000
+00000
+01000
+00100
+01000
+00010
+,
+00100
+00000
+00001
+00100
+00001
+00000
+01000
+00000
+00100
+00000
+10000
+00100
+10000
+00000
+00001
+00000
+,
+01101
+00000
+00000
+01010
+00000
+00000
+10110
+00000
+00000
+10001
+00000
+00000
+01101
+00000
+01010
+00000
+,
+10010
+00000
+10000
+00000
+00100
+00000
+10000
+00000
+00100
+00000
+01000
+00000
+00010
+00000
+00100
+00001
+,
+01000
+00000
+01000
+00000
+00100
+00000
+01000
+00000
+00100
+00000
+10000
+00000
+00001
+00100
+01000
+10000
+,
+00010
+00000
+00010
+00000
+00100
+00000
+00010
+00100
+00000
+00100
+00001
+10000
+00100
+00000
+00100
+01000
+,
+00001
+00000
+00001
+00100
+00001
+00100
+00000
+00010
+01000
+00100
+10000
+00010
+01000
+00000
+00010
+00100
+,
+00001
+00000
+00001
+00000
+00100
+00000
+00001
+00000
+00100
+00000
+00010
+00000
+01000
+00000
+00100
+10000
+,
+00010
+00000
+00010
+00000
+00100
+00000
+00010
+00000
+00100
+00000
+00001
+00000
+10000
+00100
+00010
+00001
+,
+01000
+00000
+01000
+00000
+00100
+00000
+01000
+00100
+00000
+00100
+10000
+00001
+00100
+00000
+00100
+00000
+,
+10110
+00000
+00000
+01010
+00000
+00000
+01101
+00000
+00000
+10001
+00000
+00000
+10110
+00000
+01010
+00000
+,
+01001
+00001
+01101
+00001
+01001
+00001
+01001
+00001
+,
+10010
+10000
+10110
+10000
+10010
+10000
+10010
+10000
+,
+10010
+00010
+10110
+00010
+10010
+00010
+10010
+00010
+,
+01001
+00000
+00100
+00000
+10010
+00000
+00100
+00000
+01000
+00001
+00100
+00001
+01000
+00010
+00100
+00001
+,
+10001
+10000
+10101
+10000
+10001
+10000
+10001
+10000
+,
+10001
+00001
+10101
+00001
+10001
+00001
+10001
+00001
+,
+01010
+01000
+01110
+01000
+01010
+01000
+01010
+01000
+,
+01010
+00000
+00100
+00000
+10001
+00000
+00100
+00000
+01000
+00100
+00010
+00001
+00100
+00010
+01000
+00100
+,
+10000
+00010
+00110
+10000
+00010
+00110
+10000
+00010
+,
+00110
+01000
+00001
+00101
+01000
+00001
+01000
+00001
+,
+00101
+01000
+01100
+00001
+01000
+01100
+00001
+01000
+,
+01100
+00000
+00010
+00000
+00010
+00000
+01000
+00000
+01000
+00000
+00100
+00000
+00100
+10000
+00001
+01000
+,
+00010
+10000
+10100
+00010
+10000
+10100
+00010
+10000
+,
+10100
+00001
+01000
+01100
+00001
+01000
+00001
+01000
+,
+01100
+00001
+00101
+01000
+00001
+00101
+01000
+00001
+,
+00101
+00000
+10000
+00000
+10000
+00000
+00001
+00000
+00001
+00000
+00100
+00000
+00100
+00010
+01000
+00001
+,
+10000
+00100
+10000
+00100
+01000
+00000
+00001
+00100
+00001
+00100
+00010
+00000
+10000
+00100
+00001
+00000
+,
+00010
+00100
+00010
+00100
+00001
+00000
+01000
+00100
+01000
+00100
+10000
+00000
+01000
+00100
+00010
+00000
+,
+10000
+00010
+00100
+00010
+10000
+00000
+00001
+01000
+00100
+00000
+00100
+00000
+10000
+00100
+00010
+00000
+,
+00001
+00100
+00001
+00000
+00001
+00000
+10000
+00000
+10000
+00000
+00100
+00000
+01000
+00100
+00010
+00001
+,
+01000
+00100
+00010
+00100
+01000
+00000
+00010
+00100
+01000
+00100
+00010
+00000
+01000
+00100
+00010
+00000
+,
+00001
+00100
+10000
+00100
+00001
+00000
+10000
+00100
+00001
+00100
+10000
+00000
+00001
+00100
+10000
+00000
+,
+00010
+00100
+01000
+00100
+00010
+00000
+00001
+00100
+10000
+00000
+00001
+00000
+10000
+00100
+00001
+00000
+,
+00010
+01000
+00010
+01000
+00010
+10000
+00010
+10000
+00001
+10000
+00001
+10000
+00001
+01000
+00001
+01000
+,
+00020
+00000
+01130
+00000
+01000
+00100
+02000
+00000
+,
+03002
+00000
+00100
+00000
+01103
+00000
+00000
+00000
+01000
+00000
+00010
+00000
+00100
+00010
+01000
+00100
+,
+20000
+30101
+00002
+02003
+,
+03100
+00000
+00100
+10000
+00020
+00030
+01010
+01010
+,
+02010
+00100
+03001
+01000
+02010
+00100
+03001
+01000
+,
+01020
+00100
+10030
+00010
+01020
+00100
+10030
+00010
+,
+20010
+00100
+30001
+10000
+20010
+00100
+30001
+10000
+,
+01002
+00000
+00100
+00000
+10003
+00000
+00001
+00000
+01002
+00000
+00100
+00000
+10003
+00000
+00001
+10000
+,
+00020
+00000
+00100
+00000
+00100
+00030
+02000
+00000
+,
+03020
+00100
+20030
+30002
+,
+02003
+03100
+02000
+03100
+02000
+03100
+20000
+30000
+,
+00002
+00103
+00002
+00103
+00020
+00130
+00020
+00130
+,
+02001
+00100
+03010
+01000
+02001
+00100
+03010
+01000
+,
+10020
+00100
+01030
+00010
+10020
+00100
+01030
+00010
+,
+20001
+00100
+30010
+10000
+20001
+00100
+30010
+10000
+,
+10002
+00100
+01003
+00001
+10002
+00100
+01003
+00001
+,
+20101
+00000
+00000
+00000
+,
+30002
+00000
+00000
+00000
+,
+02003
+00000
+00000
+03020
+,
+00230
+00000
+00320
+00000
+,
+20030
+00000
+00000
+00000
+,
+30002
+00000
+00000
+00000
+,
+02003
+00000
+00000
+00000
+,
+03020
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+02000
+M0000
+,
+00M00
+0000M
+00M00
+M0000
+00M00
+0000M
+00M00
+M0000
+00M00
+0000M
+00M00
+M0000
+00M00
+0000M
+00M00
+M0000
+,
+00M00
+0000M
+00M00
+M0000
+00M00
+0000M
+00M00
+M0000
+00M00
+0000M
+00M00
+M0000
+00M00
+0000M
+00M00
+M0000
+,
+00M00
+0000M
+00M00
+M0000
+00M00
+0000M
+00M00
+M0000
+00M00
+0000M
+00M00
+M0000
+00M00
+0000M
+00M00
+M0000
+,
+03M30
+00000
+00000
+00000
+;
+
+//---------------pump-single - ----------------
+#NOTEDATA:;
+#CHARTNAME:Vin.il;
+#STEPSTYPE:pump-single;
+#DESCRIPTION:;
+#CHARTSTYLE:Pad;
+#DIFFICULTY:Medium;
+#METER:13;
+#RADARVALUES:0.925,1.000,1.000,0.667,0.195,454.000,156.000,70.000,0.000,0.000,0.000,0.000,0.000,0.925,1.000,1.000,0.667,0.195,454.000,156.000,70.000,0.000,0.000,0.000,0.000,0.000;
+#CREDIT:Vin.il;
+#OFFSET:-0.028000;
+#BPMS:0.000000=180.000000
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=4
+,303.500000=8
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=4.000000=0.000000=0
+,76.000000=2.000000=4.000000=0
+,108.000000=1.000000=4.000000=0
+,206.000000=2.000000=2.000000=0
+,303.500000=0.000000=12.500000=0
+;
+#SCROLLS:0.000000=0.250000
+,80.000000=0.500000
+,112.000000=1.000000
+,204.000000=0.500000
+,272.000000=0.250000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+,16.000000=Verse 1A
+,32.000000=Verse 1B
+,48.000000=Verse 2A
+,64.000000=Verse 2B
+,80.000000=Verse 3A
+,96.000000=Verse 3B
+,112.000000=Verse 4A
+,128.000000=Verse 4B
+,144.000000=Verse 5A
+,160.000000=Verse 5B
+,176.000000=Verse 6A
+,192.000000=Verse 6B
+,208.000000=Verse 7A
+,224.000000=Verse 7B
+,240.000000=Verse 8A
+,256.000000=Verse 8B
+,272.000000=Verse 9A
+,288.000000=Verse 9B
+,304.000000=Fin
+;
+#ATTACKS:;
+#NOTES:
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+00110
+00000
+00010
+10010
+00000
+00000
+10000
+10001
+,
+00000
+10001
+00000
+00000
+00000
+01001
+00000
+00000
+,
+01100
+00000
+01000
+01001
+00000
+00000
+00001
+10001
+,
+00000
+10001
+00000
+00000
+00000
+10010
+00000
+00000
+,
+10100
+00000
+10000
+10010
+00000
+00000
+00010
+01010
+,
+00000
+01010
+00000
+00000
+00000
+01001
+00000
+00000
+,
+00101
+00000
+00001
+01001
+00000
+00000
+01000
+01010
+,
+00000
+01010
+00000
+00000
+00000
+10010
+00000
+00000
+,
+10100
+10000
+00001
+00101
+00000
+00001
+01000
+01100
+,
+00000
+00000
+01010
+00000
+00000
+00000
+00010
+00000
+10000
+00000
+10010
+00000
+00010
+00000
+00100
+00001
+,
+01000
+01000
+00010
+00110
+00000
+00010
+10000
+10100
+,
+00000
+00000
+10001
+00000
+00000
+00000
+00001
+00000
+01000
+00000
+01001
+00000
+00001
+00000
+00100
+00010
+,
+10000
+00100
+10000
+10001
+00000
+00001
+00100
+01001
+,
+00100
+00000
+01001
+00000
+00000
+00000
+00100
+00000
+10000
+00000
+10010
+00000
+00010
+00000
+00100
+00001
+,
+01000
+00100
+01000
+01010
+00000
+00010
+00100
+10010
+,
+01001
+00000
+00000
+00100
+00000
+00000
+10010
+00000
+00000
+00100
+00000
+00000
+01010
+00000
+00100
+00000
+,
+10001
+00001
+00000
+01001
+01000
+00010
+00100
+00001
+,
+10001
+00000
+10000
+00000
+00000
+00000
+10010
+00000
+00010
+00000
+01000
+00000
+00100
+10000
+00010
+00000
+,
+01010
+00000
+01000
+00000
+00010
+00000
+00100
+00001
+00000
+10000
+00000
+00001
+00100
+00000
+00010
+00000
+,
+01010
+00000
+00010
+10000
+00000
+10010
+00000
+10000
+00001
+00100
+00001
+00000
+00100
+00010
+01000
+00000
+,
+01010
+01000
+00000
+01001
+00001
+10000
+00100
+01000
+,
+01010
+00000
+00010
+00000
+00000
+00000
+10010
+00000
+10000
+00000
+00001
+00000
+00100
+00010
+10000
+00000
+,
+10001
+00000
+00001
+00000
+10000
+00000
+00100
+01000
+00000
+00010
+00000
+01000
+00100
+00000
+10000
+00000
+,
+10001
+00000
+00000
+00100
+00000
+00000
+01010
+00000
+00000
+00100
+00000
+00000
+01001
+00000
+00100
+00000
+,
+10010
+10000
+10001
+00001
+01001
+00000
+00100
+00000
+,
+10010
+10000
+10001
+00001
+01001
+00000
+00100
+00000
+,
+01001
+01000
+01010
+00010
+10010
+00000
+00100
+00000
+,
+01001
+00100
+01010
+00100
+10010
+10100
+10001
+00101
+,
+10001
+00001
+01001
+01000
+01010
+00000
+00100
+00000
+,
+10001
+00001
+01001
+01000
+01010
+00000
+00100
+00000
+,
+01010
+00010
+10010
+10000
+10001
+00000
+00100
+00000
+,
+01010
+00100
+10010
+00100
+10001
+01001
+01010
+10010
+,
+20001
+00100
+30100
+20001
+00100
+30100
+20001
+00100
+,
+30100
+20001
+00100
+30100
+20001
+30100
+20001
+30100
+,
+10002
+00100
+00103
+10002
+00100
+00103
+10002
+00100
+,
+00103
+00000
+00001
+01000
+00001
+00000
+10000
+00010
+10000
+00000
+00010
+01000
+00010
+01000
+00010
+00000
+,
+01020
+00100
+00130
+01020
+00100
+00130
+01020
+00100
+,
+00130
+01020
+00100
+00130
+01020
+00130
+01020
+00130
+,
+02010
+00100
+03100
+02010
+00100
+03100
+02010
+00100
+,
+03100
+00000
+01000
+00001
+01000
+00000
+00010
+10000
+00010
+00000
+10000
+00001
+10000
+00001
+10000
+00000
+,
+00001
+00100
+00001
+00000
+01000
+00000
+00010
+00000
+10000
+00100
+10000
+00000
+00001
+00000
+10000
+00000
+,
+00010
+00100
+00010
+00000
+10000
+00000
+00001
+00000
+01000
+00100
+01000
+00000
+00001
+00000
+10000
+00000
+,
+00010
+01000
+00010
+00000
+10000
+00000
+00001
+00000
+01000
+00010
+01000
+00000
+00010
+00000
+10000
+00000
+,
+10001
+00001
+00101
+10000
+10100
+00010
+00110
+01010
+,
+01000
+00100
+01000
+00000
+00001
+00000
+10000
+00000
+00010
+00100
+00010
+00000
+01000
+00000
+00010
+00000
+,
+10000
+00100
+10000
+00000
+00010
+00000
+01000
+00000
+00001
+00100
+00001
+00000
+01000
+00000
+00010
+00000
+,
+10000
+00001
+10000
+00000
+00010
+00000
+01000
+00000
+00001
+10000
+00001
+00000
+10000
+00000
+00010
+00000
+,
+01010
+01000
+01100
+00010
+00110
+10000
+10100
+10001
+,
+00102
+00103
+20100
+30020
+,
+02030
+00000
+03100
+00000
+00020
+00000
+10030
+10001
+,
+20001
+30000
+10001
+10001
+10002
+00003
+02000
+03000
+,
+00020
+00130
+02000
+03100
+,
+02010
+00100
+03100
+01010
+01020
+00100
+00130
+10010
+,
+20010
+00100
+30100
+10010
+10020
+00100
+00130
+10001
+,
+10002
+00100
+00103
+10001
+20001
+00100
+30100
+01001
+,
+01002
+00000
+00100
+00000
+00103
+00000
+01001
+00000
+02001
+00000
+00100
+00000
+03100
+00000
+00010
+01000
+,
+00100
+10100
+10001
+00101
+,
+20002
+00000
+00000
+30003
+10010
+00000
+01010
+00000
+,
+02001
+03000
+02001
+03000
+02001
+03000
+01020
+00030
+,
+20010
+30000
+20010
+30000
+01002
+00003
+01002
+00003
+,
+00200
+00310
+00200
+00301
+00200
+01300
+00200
+10300
+,
+00020
+00130
+02000
+03100
+00002
+00103
+20000
+30100
+,
+01002
+00103
+00102
+10003
+20001
+30100
+20100
+30010
+,
+10020
+00130
+00120
+01030
+02010
+03001
+01002
+00100
+,
+20000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00003
+,
+00200
+00000
+00000
+00000
+30000
+00000
+02000
+00300
+,
+00002
+03000
+20000
+00003
+,
+00002
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+30003
+20002
+00000
+,
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+30003
+00000
+00000
+00000
+;
+
+//---------------pump-single - ----------------
+#NOTEDATA:;
+#CHARTNAME:Vin.il;
+#STEPSTYPE:pump-single;
+#DESCRIPTION:;
+#CHARTSTYLE:Pad;
+#DIFFICULTY:Easy;
+#METER:6;
+#RADARVALUES:0.456,0.602,0.600,0.181,0.000,253.000,63.000,19.000,0.000,0.000,0.000,0.000,0.000,0.456,0.602,0.600,0.181,0.000,253.000,63.000,19.000,0.000,0.000,0.000,0.000,0.000;
+#CREDIT:Vin.il;
+#OFFSET:-0.028000;
+#BPMS:0.000000=180.000000
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=2
+,204.000000=0
+,206.000000=2
+,240.000000=1
+,248.000000=2
+,256.000000=1
+,303.500000=4
+;
+#COMBOS:0.000000=1
+,206.000000=4
+,208.000000=1
+,240.000000=2
+,241.000000=4
+,242.000000=2
+,243.000000=4
+,244.000000=2
+,245.000000=4
+,246.000000=2
+,247.000000=4
+,248.000000=1
+,256.000000=2
+,257.000000=4
+,258.000000=2
+,259.000000=4
+,260.000000=2
+,261.000000=4
+,262.000000=2
+,263.000000=4
+,264.000000=2
+,265.000000=4
+,266.000000=2
+,267.000000=4
+,268.000000=2
+,269.000000=4
+,270.000000=2
+,271.000000=4
+,272.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+,248.000000=0.750000=0.500000=0
+,248.500000=1.000000=0.500000=0
+,249.000000=0.750000=0.500000=0
+,249.500000=1.000000=0.500000=0
+,250.000000=0.750000=0.500000=0
+,250.500000=1.000000=0.500000=0
+,251.000000=0.750000=0.500000=0
+,251.500000=1.000000=0.500000=0
+,252.000000=0.750000=0.500000=0
+,252.500000=1.000000=0.500000=0
+,253.000000=0.750000=0.500000=0
+,253.500000=1.000000=0.500000=0
+,254.000000=0.750000=0.500000=0
+,254.500000=1.000000=0.500000=0
+,255.000000=0.750000=0.500000=0
+,255.500000=1.000000=0.500000=0
+,303.500000=0.000000=12.500000=0
+;
+#SCROLLS:0.000000=1.000000
+,76.000000=0.500000
+,80.000000=1.000000
+,108.000000=0.500000
+,112.000000=1.000000
+,204.000000=0.500000
+,208.000000=1.000000
+,272.000000=0.250000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+,16.000000=Verse 1A
+,32.000000=Verse 1B
+,48.000000=Verse 2A
+,64.000000=Verse 2B
+,80.000000=Verse 3A
+,96.000000=Verse 3B
+,112.000000=Verse 4A
+,128.000000=Verse 4B
+,144.000000=Verse 5A
+,160.000000=Verse 5B
+,176.000000=Verse 6A
+,192.000000=Verse 6B
+,208.000000=Verse 7A
+,224.000000=Verse 7B
+,240.000000=Verse 8A
+,256.000000=Verse 8B
+,272.000000=Verse 9A
+,288.000000=Verse 9B
+,304.000000=Fin
+;
+#ATTACKS:;
+#NOTES:
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+10000
+00000
+00000
+00001
+00000
+00000
+00000
+01000
+,
+00000
+01001
+00000
+00000
+00000
+00001
+00000
+00000
+,
+10000
+00000
+00000
+00001
+00000
+00000
+00000
+01000
+,
+00000
+01001
+00000
+00000
+00000
+00001
+00000
+00000
+,
+10000
+00000
+00000
+10010
+00000
+00000
+00000
+00001
+,
+00000
+01001
+00000
+00000
+00000
+00100
+00000
+00000
+,
+00001
+00000
+00000
+01001
+00000
+00000
+00000
+10000
+,
+00000
+10010
+00000
+00000
+00000
+00100
+00000
+00000
+,
+00001
+00100
+00000
+00001
+00000
+10000
+00000
+00001
+,
+00000
+00101
+00000
+00000
+00000
+01001
+00000
+00000
+,
+10000
+00100
+00000
+10000
+00000
+00001
+00000
+10000
+,
+00000
+10100
+00000
+00000
+00000
+10010
+00000
+00000
+,
+00010
+00100
+00000
+00010
+00000
+01000
+00000
+00010
+,
+00000
+00110
+00000
+00000
+00000
+10010
+00000
+00000
+,
+01000
+00100
+00000
+01000
+00000
+00010
+00000
+01000
+,
+00001
+00000
+00000
+10001
+00000
+00000
+10000
+00010
+,
+01000
+00001
+00000
+01000
+00000
+00010
+00000
+10000
+,
+00001
+01000
+00000
+00001
+00000
+10000
+00000
+00010
+,
+00100
+00001
+00000
+01000
+00000
+00010
+00000
+10000
+,
+00100
+01000
+00000
+00001
+00000
+10000
+00000
+00010
+,
+10000
+00010
+00000
+10000
+00000
+00001
+00000
+01000
+,
+00010
+10000
+00000
+00010
+00000
+01000
+00000
+00001
+,
+00100
+00010
+00000
+10000
+00000
+00001
+00000
+01000
+,
+00010
+00000
+00000
+01010
+00000
+00000
+01000
+00001
+,
+10000
+10100
+10000
+00001
+,
+10000
+10100
+10000
+00001
+,
+01000
+01100
+01000
+00001
+,
+01000
+01100
+00010
+00110
+,
+10000
+10100
+10000
+00001
+,
+10000
+10100
+10000
+00001
+,
+01000
+01100
+01000
+00001
+,
+01000
+01100
+00010
+00110
+,
+10000
+00100
+00000
+10000
+00100
+00000
+10000
+00100
+,
+00000
+10000
+00100
+00000
+10000
+00001
+00100
+00000
+,
+00001
+00100
+00000
+00001
+00100
+00000
+00001
+00100
+,
+00001
+01001
+10000
+10010
+,
+00010
+00100
+00000
+00010
+00100
+00000
+00010
+00100
+,
+00000
+00010
+00100
+00000
+00010
+01000
+00100
+00000
+,
+01000
+00100
+00000
+01000
+00100
+00000
+01000
+00100
+,
+01000
+01001
+00010
+10010
+,
+10000
+00001
+00100
+00000
+00001
+10000
+00100
+00000
+,
+10000
+00001
+00100
+00000
+00001
+10000
+00100
+00000
+,
+01000
+00010
+00100
+00000
+00010
+01000
+00100
+00000
+,
+01010
+00001
+10000
+00001
+,
+01000
+00010
+00100
+00000
+00010
+01000
+00100
+00000
+,
+01000
+00010
+00100
+00000
+00010
+01000
+00100
+00000
+,
+10000
+00001
+00100
+00000
+00001
+10000
+00100
+00000
+,
+20002
+00000
+00000
+00000
+00000
+00000
+00000
+30003
+,
+10001
+00101
+10001
+10100
+,
+10001
+01001
+10001
+10010
+,
+01010
+01010
+10001
+10001
+,
+01010
+01010
+10001
+10001
+,
+01010
+01100
+01010
+00110
+,
+01010
+01001
+01010
+10010
+,
+10001
+10001
+01010
+01010
+,
+10001
+10001
+01010
+01010
+,
+20001
+00000
+30002
+00000
+,
+20003
+00000
+30020
+00000
+,
+02030
+00000
+00000
+00000
+,
+03020
+00000
+00000
+00000
+,
+20030
+00000
+00000
+00000
+,
+30002
+00000
+00000
+00000
+,
+02003
+00000
+00000
+00000
+,
+03020
+00000
+00000
+00000
+,
+20030
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+30002
+00000
+00000
+02003
+,
+03020
+00000
+00230
+00000
+,
+00302
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+20000
+,
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+30003
+00000
+00000
+00000
+;
+
+//---------------dance-couple - Simple Chart----------------
+#NOTEDATA:;
+#CHARTNAME:Small Tribe;
+#STEPSTYPE:dance-couple;
+#DESCRIPTION:Simple Chart;
+#CHARTSTYLE:Pad;
+#DIFFICULTY:Easy;
+#METER:3;
+#RADARVALUES:0.253,0.362,0.095,0.419,0.000,132.000,10.000,44.000,0.000,0.000,0.000,0.000,0.000,0.253,0.362,0.095,0.419,0.000,132.000,10.000,44.000,0.000,0.000,0.000,0.000,0.000;
+#CREDIT:Jason Felds;
+#OFFSET:-0.028000;
+#BPMS:0.000000=180.000000
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=2
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+;
+#SCROLLS:0.000000=1.000000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+,16.000000=Verse 1A
+,32.000000=Verse 1B
+,48.000000=Verse 2A
+,64.000000=Verse 2B
+,80.000000=Verse 3A
+,96.000000=Verse 3B
+,112.000000=Verse 4A
+,128.000000=Verse 4B
+,144.000000=Verse 5A
+,160.000000=Verse 5B
+,176.000000=Verse 6A
+,192.000000=Verse 6B
+,208.000000=Verse 7A
+,224.000000=Verse 7B
+,240.000000=Verse 8A
+,256.000000=Verse 8B
+,272.000000=Verse 9A
+,288.000000=Verse 9B
+,304.000000=Fin
+;
+#ATTACKS:;
+#NOTES:
+00000000
+00000000
+00000000
+00000000
+,
+00000000
+00000000
+00000000
+00000000
+,
+00000000
+00000000
+00000000
+00000000
+,
+00000000
+00000000
+00000000
+00000000
+,
+10000001
+00000000
+00000000
+00000000
+,
+01000010
+00000000
+00000000
+00000000
+,
+00100100
+00000000
+00000000
+00000000
+,
+00011000
+00000000
+00000000
+00000000
+,
+01000010
+00000000
+00000000
+00000000
+,
+00100100
+00000000
+00000000
+00000000
+,
+10000001
+00000000
+00000000
+00000000
+,
+00011000
+00000000
+00000000
+00000000
+,
+10000001
+00000000
+00100001
+00000000
+,
+10000001
+00000000
+00100001
+00000000
+,
+01001000
+00000000
+00011000
+00000000
+,
+01001000
+00000000
+00011000
+00000000
+,
+00100010
+00000000
+01000010
+00000000
+,
+00100010
+00000000
+01000010
+00000000
+,
+10000100
+00000000
+00010100
+00000000
+,
+20020200
+00000000
+00000000
+30030300
+,
+10000001
+00000000
+10000100
+00000000
+,
+10000001
+00000000
+10000100
+00000000
+,
+00010010
+00000000
+00011000
+00000000
+,
+00010010
+00000000
+00011000
+00000000
+,
+01000100
+00000000
+01000010
+00000000
+,
+01000100
+00000000
+01000010
+00000000
+,
+00100001
+00000000
+00101000
+00000000
+,
+00202002
+00000000
+00000000
+00303003
+,
+00000001
+00100000
+00000100
+00010000
+,
+00001000
+10000000
+00000100
+00100000
+,
+00000001
+01000000
+00000010
+00010000
+,
+20000002
+32000203
+03200320
+00322030
+,
+10033000
+00000100
+00100000
+00001000
+,
+00010000
+00000001
+00100000
+00000100
+,
+10000000
+00000010
+01000000
+00001000
+,
+20000002
+30200023
+02300230
+03022300
+,
+10033010
+00000000
+00011000
+00000000
+,
+00100100
+00000000
+01000001
+00000000
+,
+10000010
+00000000
+01000100
+00000000
+,
+02202000
+00000000
+00000000
+03303000
+,
+01000001
+00000000
+00011000
+00000000
+,
+00100100
+00000000
+10000010
+00000000
+,
+01000001
+00000000
+00100010
+00000000
+,
+00020220
+00000000
+00000000
+00030330
+,
+10000001
+00001000
+00010100
+00010010
+,
+01000100
+00001000
+00100010
+00100100
+,
+10000001
+00000010
+01000100
+01000010
+,
+00200002
+00000000
+00000000
+00300003
+,
+10000001
+00010000
+00101000
+01001000
+,
+00100010
+00010000
+01000100
+00100100
+,
+10000001
+01000000
+00100010
+01000010
+,
+20000200
+00000000
+00000000
+30000300
+,
+00022000
+00000000
+00000000
+20033002
+,
+30200203
+00000000
+02300320
+00000000
+,
+03022030
+00000000
+00000000
+00100100
+,
+00233200
+00000000
+00000000
+00000000
+,
+02300320
+00000000
+23000032
+00000000
+,
+30200203
+00000000
+02300320
+00000000
+,
+03022030
+00000000
+20033002
+00000000
+,
+32000023
+00000000
+03200230
+00000000
+,
+00322300
+00000000
+00000000
+00000000
+,
+20033002
+00000000
+00000000
+00000000
+,
+30200203
+00000000
+00000000
+01000010
+,
+02300320
+00000000
+00000000
+00000000
+,
+03022030
+00000000
+20033002
+00000000
+,
+30200203
+00000000
+02300320
+00000000
+,
+03022030
+00000000
+00233200
+00000000
+,
+02300320
+00000000
+23000032
+00000000
+,
+30011003
+00000000
+00000000
+00000000
+,
+01100110
+00000000
+00000000
+00000000
+,
+10011001
+00000000
+00000000
+10011001
+,
+10011001
+00000000
+00000000
+00000000
+,
+01100110
+00000000
+00000000
+00000000
+,
+10011001
+00000000
+00000000
+00000000
+,
+01100110
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+20022002
+,
+00000000
+00000000
+00000000
+00000000
+,
+30033003
+00000000
+00000000
+00000000
+;
+
+//---------------dance-threepanel - It's a 3 panel chart.----------------
+#NOTEDATA:;
+#CHARTNAME:Simple;
+#STEPSTYPE:dance-threepanel;
+#DESCRIPTION:It's a 3 panel chart.;
+#CHARTSTYLE:Pad;
+#DIFFICULTY:Easy;
+#METER:2;
+#RADARVALUES:0.144,0.214,0.105,0.000,0.000,95.000,11.000,0.000,0.000,0.000,0.000,0.000,0.000,0.144,0.214,0.105,0.000,0.000,95.000,11.000,0.000,0.000,0.000,0.000,0.000,0.000;
+#CREDIT:Jason Felds;
+#OFFSET:-0.028000;
+#BPMS:0.000000=180.000000
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=2
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+;
+#SCROLLS:0.000000=1.000000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+,16.000000=Verse 1A
+,32.000000=Verse 1B
+,48.000000=Verse 2A
+,64.000000=Verse 2B
+,80.000000=Verse 3A
+,96.000000=Verse 3B
+,112.000000=Verse 4A
+,128.000000=Verse 4B
+,144.000000=Verse 5A
+,160.000000=Verse 5B
+,176.000000=Verse 6A
+,192.000000=Verse 6B
+,208.000000=Verse 7A
+,224.000000=Verse 7B
+,240.000000=Verse 8A
+,256.000000=Verse 8B
+,272.000000=Verse 9A
+,288.000000=Verse 9B
+,304.000000=Fin
+;
+#ATTACKS:;
+#NOTES:
+000
+000
+000
+000
+,
+000
+000
+000
+000
+,
+000
+000
+000
+000
+,
+000
+000
+000
+000
+,
+100
+000
+000
+000
+,
+000
+000
+000
+000
+,
+001
+000
+000
+000
+,
+000
+000
+000
+000
+,
+010
+000
+000
+000
+,
+000
+000
+000
+000
+,
+001
+000
+000
+000
+,
+000
+000
+000
+000
+,
+100
+000
+000
+000
+,
+010
+000
+000
+000
+,
+001
+000
+000
+000
+,
+010
+000
+000
+000
+,
+100
+000
+000
+000
+,
+001
+000
+000
+000
+,
+010
+000
+000
+000
+,
+001
+000
+000
+000
+,
+101
+000
+000
+000
+,
+010
+000
+000
+000
+,
+100
+000
+000
+000
+,
+001
+000
+000
+000
+,
+010
+000
+000
+000
+,
+001
+000
+000
+000
+,
+100
+000
+000
+000
+,
+010
+000
+000
+000
+,
+101
+000
+100
+000
+,
+100
+000
+100
+000
+,
+100
+000
+000
+000
+,
+110
+000
+000
+000
+,
+001
+000
+001
+000
+,
+001
+000
+001
+000
+,
+001
+000
+000
+000
+,
+011
+000
+000
+000
+,
+100
+000
+010
+000
+,
+100
+000
+001
+000
+,
+100
+000
+000
+000
+,
+101
+000
+000
+000
+,
+001
+000
+010
+000
+,
+001
+000
+100
+000
+,
+001
+000
+000
+000
+,
+101
+000
+000
+000
+,
+010
+000
+001
+000
+,
+100
+000
+010
+000
+,
+100
+000
+001
+000
+,
+010
+000
+000
+000
+,
+010
+000
+100
+000
+,
+001
+000
+010
+000
+,
+001
+000
+100
+000
+,
+010
+000
+000
+000
+,
+011
+000
+000
+000
+,
+110
+000
+000
+000
+,
+101
+000
+101
+000
+,
+101
+000
+000
+000
+,
+010
+000
+000
+001
+,
+001
+000
+000
+100
+,
+100
+000
+000
+010
+,
+010
+000
+000
+000
+,
+100
+000
+000
+001
+,
+001
+000
+000
+010
+,
+010
+000
+000
+001
+,
+001
+000
+000
+100
+,
+100
+000
+001
+000
+,
+010
+000
+001
+000
+,
+100
+000
+010
+000
+,
+100
+000
+001
+000
+,
+010
+000
+000
+000
+,
+001
+000
+000
+000
+,
+100
+000
+000
+010
+,
+010
+000
+000
+000
+,
+100
+000
+000
+000
+,
+001
+000
+000
+000
+,
+010
+000
+000
+000
+,
+001
+000
+000
+000
+;
+
+//---------------pump-halfdouble - Community Skype Chart----------------
+#NOTEDATA:;
+#CHARTNAME:Steam Pump;
+#STEPSTYPE:pump-halfdouble;
+#DESCRIPTION:Community Skype Chart;
+#CHARTSTYLE:Pad;
+#DIFFICULTY:Medium;
+#METER:11;
+#RADARVALUES:0.589,0.891,0.400,0.610,0.019,333.000,42.000,64.000,0.000,0.000,0.000,6.000,0.000,0.589,0.891,0.400,0.610,0.019,333.000,42.000,64.000,0.000,0.000,0.000,6.000,0.000;
+#CREDIT:Jason Felds;
+#OFFSET:-0.028000;
+#BPMS:0.000000=180.000000
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=4
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+;
+#SCROLLS:0.000000=1.000000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+,16.000000=Verse 1A
+,32.000000=Verse 1B
+,48.000000=Verse 2A
+,64.000000=Verse 2B
+,80.000000=Verse 3A
+,96.000000=Verse 3B
+,112.000000=Verse 4A
+,128.000000=Verse 4B
+,144.000000=Verse 5A
+,160.000000=Verse 5B
+,176.000000=Verse 6A
+,192.000000=Verse 6B
+,208.000000=Verse 7A
+,224.000000=Verse 7B
+,240.000000=Verse 8A
+,256.000000=Verse 8B
+,272.000000=Verse 9A
+,288.000000=Verse 9B
+,304.000000=Fin
+;
+#ATTACKS:;
+#NOTES:
+// measure 0
+000000
+000000
+000000
+000000
+, // measure 1
+000000
+000000
+000000
+000000
+, // measure 2
+000000
+000000
+000000
+000000
+, // measure 3
+000000
+000000
+000000
+000000
+, // measure 4
+000100
+000000
+000000
+001000
+000000
+000000
+000010
+000000
+, // measure 5
+000100
+000000
+000000
+000001
+000000
+000000
+000010
+000000
+, // measure 6
+000100
+000000
+000000
+000001
+000000
+000000
+000100
+000000
+, // measure 7
+010000
+000000
+000000
+001000
+000000
+000000
+100000
+000000
+, // measure 8
+001000
+000000
+000000
+000010
+000000
+000000
+000001
+000000
+, // measure 9
+000100
+000000
+000000
+000010
+000000
+000000
+010000
+000000
+, // measure 10
+001000
+000000
+000000
+100000
+000000
+000000
+000100
+000000
+, // measure 11
+010000
+000000
+000000
+000010
+000000
+000000
+001000
+000000
+, // measure 12
+000100
+100000
+000000
+101000
+000000
+001000
+000000
+011000
+, // measure 13
+000000
+010000
+000000
+010010
+000000
+000010
+000100
+000001
+, // measure 14
+001000
+000010
+000000
+000110
+000000
+000100
+000000
+000101
+, // measure 15
+000000
+000001
+000000
+001001
+000000
+001000
+000100
+010000
+, // measure 16
+000010
+001000
+000000
+001100
+000000
+000100
+000000
+010100
+, // measure 17
+000000
+010000
+000000
+011000
+000000
+001000
+100000
+000100
+, // measure 18
+001000
+000010
+000000
+010000
+000000
+000001
+000000
+100000
+, // measure 19
+000010
+000000
+000000
+0100L0
+000000
+000000
+0L0010
+000000
+000000
+0100L0
+000000
+000000
+010010
+000000
+000000
+000000
+, // measure 20
+001000
+000001
+000000
+000101
+000000
+000100
+000000
+000110
+, // measure 21
+000000
+000010
+000000
+010010
+000000
+010000
+001000
+100000
+, // measure 22
+000100
+010000
+000000
+011000
+000000
+001000
+000000
+101000
+, // measure 23
+000000
+100000
+000000
+100100
+000000
+000100
+001000
+000010
+, // measure 24
+010000
+000100
+000000
+001100
+000000
+001000
+000000
+001010
+, // measure 25
+000000
+000010
+000000
+000110
+000000
+000100
+000001
+001000
+, // measure 26
+000100
+010000
+000000
+000010
+000000
+100000
+000000
+000001
+, // measure 27
+010000
+000000
+000000
+0L0010
+000000
+000000
+0100L0
+000000
+000000
+0L0010
+000000
+000000
+010010
+000000
+000000
+000000
+, // measure 28
+000100
+010000
+000010
+001000
+, // measure 29
+000001
+100000
+001000
+010000
+, // measure 30
+000100
+001000
+000010
+010000
+, // measure 31
+000001
+000010
+000100
+001000
+010000
+100000
+110000
+000000
+, // measure 32
+001000
+000010
+010000
+000100
+, // measure 33
+100000
+000001
+000100
+000010
+, // measure 34
+001000
+000100
+010000
+000010
+, // measure 35
+100000
+010000
+001000
+000100
+000010
+000001
+000011
+000000
+, // measure 36
+000002
+000100
+000003
+000002
+001000
+000003
+000002
+010000
+, // measure 37
+000003
+000002
+100000
+000003
+000001
+000100
+000010
+001000
+, // measure 38
+000100
+001000
+000000
+000010
+000100
+000000
+000001
+001000
+, // measure 39
+000010
+000100
+000001
+010000
+000100
+001000
+001010
+000000
+, // measure 40
+200000
+001000
+300000
+200000
+000100
+300000
+200000
+000010
+, // measure 41
+300000
+200000
+000001
+300000
+100000
+001000
+010000
+000100
+, // measure 42
+001000
+000100
+000000
+010000
+001000
+000000
+100000
+000100
+, // measure 43
+010000
+001000
+100000
+000010
+001000
+000100
+010100
+000000
+, // measure 44
+200000
+000000
+300200
+002300
+000000
+003020
+020030
+030002
+, // measure 45
+000023
+000000
+000230
+002300
+000000
+003020
+020030
+032000
+, // measure 46
+203000
+000000
+320000
+032000
+000000
+003200
+000320
+000032
+, // measure 47
+010003
+000010
+010000
+000010
+010000
+000010
+010010
+000000
+, // measure 48
+000002
+000000
+020003
+030020
+000000
+002030
+003200
+200300
+, // measure 49
+302000
+000000
+023000
+030020
+000000
+002030
+003200
+000320
+, // measure 50
+000032
+000000
+000203
+000320
+000000
+020030
+032000
+203000
+, // measure 51
+300100
+001000
+000100
+001000
+000100
+001000
+001100
+000000
+, // measure 52
+000002
+000000
+000000
+200003
+, // measure 53
+300200
+000000
+002300
+000000
+, // measure 54
+003010
+010000
+000010
+010000
+, // measure 55
+000100
+001000
+000100
+001000
+, // measure 56
+000020
+001030
+002000
+003100
+, // measure 57
+000200
+010300
+020000
+030001
+, // measure 58
+000002
+100003
+200000
+300100
+, // measure 59
+000200
+010300
+020000
+030010
+, // measure 60
+000020
+000000
+002030
+003200
+, // measure 61
+200300
+000000
+300020
+000230
+, // measure 62
+000301
+100000
+000010
+010000
+, // measure 63
+000100
+001000
+000010
+010000
+, // measure 64
+000001
+000011
+000010
+000110
+, // measure 65
+000100
+001100
+001000
+011000
+, // measure 66
+010000
+110000
+100000
+100001
+, // measure 67
+000100
+010100
+001000
+001010
+, // measure 68
+001100
+000000
+000000
+000100
+010000
+000000
+000000
+010000
+, // measure 69
+001000
+000000
+000000
+001000
+100000
+000000
+000000
+100000
+, // measure 70
+000001
+000000
+000000
+000001
+000100
+000000
+000010
+000000
+, // measure 71
+001000
+000100
+010000
+000010
+, // measure 72
+001100
+000000
+000000
+001000
+000010
+000000
+000000
+000010
+, // measure 73
+000100
+000000
+000000
+000100
+000001
+000000
+000000
+000001
+, // measure 74
+100000
+000000
+000000
+100000
+001000
+000000
+010000
+000000
+, // measure 75
+000100
+000000
+001000
+000000
+000010
+000000
+020000
+002000
+, // measure 76
+000000
+000000
+000000
+000000
+, // measure 77
+000000
+000000
+000000
+000000
+, // measure 78
+033000
+000000
+000000
+000000
+;
diff --git a/Songs/StepMania 5/MechaTribe Assault/mechatribeassaultbg.png b/Songs/StepMania 5/MechaTribe Assault/mechatribeassaultbg.png
new file mode 100644
index 0000000000..df4e8c9673
Binary files /dev/null and b/Songs/StepMania 5/MechaTribe Assault/mechatribeassaultbg.png differ
diff --git a/Songs/StepMania 5/MechaTribe Assault/mechatribeassaultbn.png b/Songs/StepMania 5/MechaTribe Assault/mechatribeassaultbn.png
new file mode 100644
index 0000000000..10d3c05490
Binary files /dev/null and b/Songs/StepMania 5/MechaTribe Assault/mechatribeassaultbn.png differ
diff --git a/Songs/StepMania 5/MechaTribe Assault/wyde cd-tital.png b/Songs/StepMania 5/MechaTribe Assault/wyde cd-tital.png
new file mode 100644
index 0000000000..3f19b252d2
Binary files /dev/null and b/Songs/StepMania 5/MechaTribe Assault/wyde cd-tital.png differ
diff --git a/Songs/StepMania 5/Springtime/Kommisar - Springtime.mp3 b/Songs/StepMania 5/Springtime/Kommisar - Springtime.mp3
new file mode 100644
index 0000000000..d680255ec5
Binary files /dev/null and b/Songs/StepMania 5/Springtime/Kommisar - Springtime.mp3 differ
diff --git a/Songs/StepMania 5/Springtime/Springtime.ssc b/Songs/StepMania 5/Springtime/Springtime.ssc
new file mode 100644
index 0000000000..028d20ca71
--- /dev/null
+++ b/Songs/StepMania 5/Springtime/Springtime.ssc
@@ -0,0 +1,10608 @@
+#VERSION:0.73;
+#TITLE:Springtime;
+#SUBTITLE:;
+#ARTIST:Kommisar;
+#TITLETRANSLIT:;
+#SUBTITLETRANSLIT:;
+#ARTISTTRANSLIT:;
+#GENRE:;
+#ORIGIN:;
+#CREDIT:;
+#BANNER:springbn.png;
+#BACKGROUND:spring.png;
+#LYRICSPATH:;
+#CDTITLE:;
+#MUSIC:Kommisar - Springtime.mp3;
+#OFFSET:-0.125000;
+#SAMPLESTART:105.760086;
+#SAMPLELENGTH:9.360000;
+#SELECTABLE:YES;
+#DISPLAYBPM:181.699997;
+#BPMS:0.000000=181.699997
+,304.000000=90.850998
+,311.000000=181.701996
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=2
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+;
+#SCROLLS:0.000000=1.000000
+;
+#LABELS:0.000000=Song Start
+;
+#BGCHANGES:;
+#KEYSOUNDS:;
+#ATTACKS:;
+
+//---------------dance-single - Blank----------------
+#NOTEDATA:;
+#STEPSTYPE:dance-single;
+#DESCRIPTION:Blank;
+#CHARTSTYLE:;
+#DIFFICULTY:Challenge;
+#METER:12;
+#RADARVALUES:1.000,1.000,0.256,0.845,0.980,864.000,33.000,109.000,42.000,0.000,0.000,0.000,0.000,1.000,1.000,0.256,0.845,0.980,864.000,33.000,109.000,42.000,0.000,0.000,0.000,0.000;
+#CREDIT:Blank;
+#OFFSET:-0.125000;
+#BPMS:0.000000=181.699997
+,304.000000=90.850998
+,311.000000=181.701996
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=2
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+;
+#SCROLLS:0.000000=1.000000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+;
+#ATTACKS:
+;
+#NOTES:
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0010
+0000
+0010
+1000
+0100
+0000
+1000
+0010
+0100
+0001
+0000
+0000
+0101
+0000
+0101
+0000
+,
+0010
+0000
+1000
+0100
+0010
+0000
+0001
+0010
+0100
+1000
+0000
+0000
+0110
+0000
+0110
+0000
+,
+0001
+0000
+1000
+0100
+1000
+0000
+0010
+0100
+0001
+0010
+0000
+0000
+1001
+0000
+1001
+0000
+,
+0010
+0000
+1000
+0010
+1000
+0000
+0001
+0000
+1100
+0000
+1100
+0000
+0000
+0003
+0000
+0300
+,
+0010
+0000
+1000
+0001
+0010
+0000
+0001
+1000
+0010
+0100
+0000
+0000
+0011
+0000
+0011
+0000
+,
+1000
+0000
+0010
+0100
+0001
+0000
+0010
+0100
+1000
+0010
+0000
+0000
+1010
+0000
+1010
+0000
+,
+0001
+0000
+0100
+0010
+1000
+0000
+0100
+0010
+0001
+1000
+0000
+0000
+0011
+0000
+0011
+0000
+,
+1000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+1000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0001
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+1000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0010
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+1100
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+1100
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+1000
+0100
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0100
+2000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+,
+3001
+0100
+0100
+0010
+0000
+0010
+1000
+0000
+,
+0001
+0000
+0010
+0000
+0100
+0000
+1000
+0001
+0100
+0000
+0020
+0030
+2000
+3000
+2000
+3000
+,
+0010
+0100
+0100
+0001
+0000
+0001
+1000
+0000
+,
+0100
+0000
+0010
+0000
+0001
+0000
+1000
+0010
+0100
+0000
+0002
+0003
+0020
+0030
+0020
+0030
+,
+0001
+1000
+1000
+0100
+0000
+0100
+1000
+0000
+,
+0010
+0000
+0100
+0000
+0001
+0000
+0010
+0100
+1000
+0000
+0020
+0030
+0200
+0300
+0200
+0300
+,
+0001
+0100
+0100
+0010
+0000
+0010
+1000
+0000
+,
+1000
+0000
+0100
+0000
+0010
+0000
+0100
+0000
+1000
+0001
+0010
+0000
+0001
+0010
+0100
+0000
+,
+1000
+0000
+0100
+1000
+0100
+0000
+0100
+1000
+0001
+1000
+0100
+0000
+1000
+0000
+0010
+0000
+,
+0100
+0000
+0001
+0010
+0100
+0000
+1000
+0010
+0100
+0010
+2000
+3000
+0002
+0003
+0002
+0003
+,
+0100
+0000
+0010
+1000
+0010
+0000
+1000
+0001
+0010
+0100
+1000
+0000
+0010
+0000
+0100
+0000
+,
+0001
+0000
+1000
+0100
+0010
+0000
+0001
+0010
+0001
+1000
+0200
+0300
+2000
+3000
+2000
+3000
+,
+0010
+0000
+0100
+0001
+0100
+0000
+0010
+1000
+0100
+0010
+0001
+0000
+1000
+0000
+0010
+0000
+,
+0100
+0000
+0010
+1000
+0100
+0000
+1000
+0100
+0010
+0001
+2000
+3000
+0020
+0030
+0020
+0030
+,
+0100
+0000
+0001
+0010
+0100
+0000
+1000
+0010
+0100
+0001
+0010
+0000
+0001
+0000
+1000
+0000
+,
+0001
+0010
+0001
+0010
+0001
+0010
+0001
+0010
+0001
+1000
+0100
+1000
+0000
+0300
+0000
+3000
+,
+0010
+0000
+1000
+0000
+0100
+0000
+0020
+0000
+0001
+0000
+0000
+0000
+0130
+0000
+0100
+1000
+,
+0020
+0000
+0030
+0200
+0000
+0300
+0001
+0000
+2000
+0000
+0000
+0000
+0001
+0000
+0000
+0000
+,
+0010
+0000
+3000
+0000
+1000
+0000
+0100
+0000
+0010
+0100
+1000
+0001
+0010
+0001
+1000
+0100
+,
+0020
+0000
+0030
+0000
+0001
+0000
+1000
+0000
+0200
+0000
+0310
+0000
+0001
+3000
+0010
+0300
+,
+0010
+0000
+1000
+0000
+0100
+0000
+0020
+0000
+0001
+0000
+0000
+0000
+0130
+0000
+0100
+1000
+,
+0020
+0000
+0030
+2000
+0000
+3000
+0010
+0000
+2000
+0000
+0000
+0000
+0001
+0000
+0000
+0000
+,
+0010
+0000
+3000
+0000
+1000
+0000
+0100
+0000
+0010
+0100
+1000
+0001
+0100
+0001
+1000
+0010
+,
+0100
+0001
+0100
+0001
+0100
+0001
+0100
+0001
+1000
+0010
+1000
+0010
+0000
+3000
+0000
+0300
+,
+0010
+1000
+1100
+0010
+0000
+0100
+1001
+0010
+,
+0100
+1000
+0101
+0010
+0001
+0000
+1100
+0000
+,
+1000
+0100
+0M11
+0100
+0000
+1000
+0110
+1000
+,
+0001
+0010
+0001
+0100
+0010
+1000
+0001
+0100
+0010
+1000
+0100
+1000
+0010
+0100
+0001
+0010
+,
+0001
+0100
+0011
+1000
+0000
+0001
+0110
+1000
+,
+0001
+0010
+0101
+0010
+0001
+0000
+1100
+0000
+,
+0010
+0001
+110M
+0001
+0000
+0100
+1001
+0010
+,
+010M
+1000
+0010
+0100
+M001
+0010
+0100
+1000
+001M
+0100
+0010
+1000
+0M01
+0010
+0001
+1000
+,
+0010
+0000
+1000
+0000
+0100
+0000
+0020
+0000
+0001
+0000
+0000
+0000
+0130
+0000
+0100
+1000
+,
+0020
+0000
+0030
+0200
+0000
+0300
+0001
+0000
+2000
+0000
+0000
+0000
+0001
+0000
+0000
+0000
+,
+0010
+0000
+3000
+0000
+1000
+0000
+0100
+0000
+0010
+0100
+1000
+0001
+0010
+0001
+1000
+0200
+,
+0000
+0000
+0300
+0000
+1000
+0000
+0001
+0000
+0020
+0000
+0130
+0000
+1000
+0003
+0100
+0030
+,
+0100
+0000
+0001
+0000
+0010
+0000
+0200
+0000
+1000
+0000
+0000
+0000
+0310
+0000
+0010
+0001
+,
+0200
+0000
+0300
+0002
+0000
+0003
+0100
+0000
+0002
+0000
+0000
+0000
+1000
+0000
+0000
+0000
+,
+0100
+0000
+0003
+0000
+0001
+0000
+0010
+0000
+0100
+0010
+0001
+1000
+0010
+1000
+0001
+0100
+,
+0010
+1000
+0010
+1000
+0010
+1000
+0010
+1000
+0001
+0100
+0001
+0100
+0000
+0003
+0000
+0030
+,
+0001
+0000
+1000
+0100
+1000
+0000
+0001
+0100
+0001
+0000
+0100
+0010
+0100
+0000
+0001
+1000
+,
+0001
+0000
+0100
+0001
+0100
+0000
+0010
+1000
+0010
+0000
+1000
+0100
+1000
+0000
+0001
+1000
+,
+0001
+0000
+0010
+0001
+0010
+0000
+0001
+0100
+0001
+0000
+1000
+0010
+1000
+0000
+0010
+0100
+,
+0010
+0000
+0100
+0001
+0100
+0000
+0010
+0100
+0010
+0000
+1000
+0100
+1000
+0000
+0001
+0010
+,
+0001
+0000
+1000
+0100
+0010
+0000
+0001
+0010
+0100
+0000
+0010
+0001
+0100
+0000
+0010
+1000
+,
+0100
+0000
+0010
+0001
+1000
+0000
+0001
+0010
+0100
+0000
+1000
+0100
+0010
+0000
+0001
+0100
+,
+0010
+0000
+1000
+0001
+0010
+0000
+0001
+0100
+0010
+0000
+1000
+0100
+0010
+0000
+0001
+0010
+,
+0100
+0000
+0001
+0100
+0010
+0000
+0100
+0010
+1000
+0000
+0001
+0010
+0100
+0000
+1000
+0100
+,
+0020
+1030
+0100
+1000
+0020
+0130
+0001
+0100
+0020
+1030
+0001
+1000
+0020
+0130
+0001
+0100
+,
+0020
+1030
+0100
+1000
+0020
+1030
+0001
+1000
+0020
+0130
+0001
+0100
+0020
+1030
+0100
+1000
+,
+0020
+0130
+0001
+0100
+0020
+1030
+0001
+1000
+0020
+0130
+0001
+0100
+0020
+1030
+0001
+1000
+,
+0020
+0130
+0001
+0100
+0020
+1030
+0100
+1000
+0020
+0130
+0001
+0100
+0020
+1030
+0100
+1000
+,
+0020
+0130
+0001
+0100
+0020
+1030
+0001
+0100
+0020
+0130
+0001
+0100
+0020
+1030
+0100
+1000
+,
+0020
+0130
+0001
+1000
+0020
+0130
+0001
+0100
+0020
+1030
+0001
+1000
+0020
+0130
+0001
+0100
+,
+0020
+1030
+0100
+1000
+0020
+0130
+0001
+1000
+0020
+0130
+0001
+0100
+0020
+1030
+0001
+0100
+,
+0020
+1030
+0100
+1000
+0020
+0130
+0001
+0100
+0020
+1030
+0100
+1000
+0020
+0130
+0001
+0100
+,
+0010
+0100
+0100
+0010
+0000
+0010
+1000
+0000
+,
+0001
+0000
+0010
+0000
+0100
+0000
+1000
+0001
+0100
+0000
+0020
+0030
+2000
+3000
+2000
+3000
+,
+0010
+0100
+0100
+0001
+0000
+0001
+1000
+0000
+,
+0100
+0000
+0010
+0000
+0001
+0000
+1000
+0010
+0100
+0000
+0002
+0003
+0020
+0030
+0020
+0030
+,
+0001
+1000
+1000
+0100
+0000
+0100
+1000
+0000
+,
+0010
+0000
+0100
+0000
+0001
+0000
+0010
+0100
+1000
+0000
+0020
+0030
+0200
+0300
+0200
+0300
+,
+0001
+0100
+0100
+0010
+0000
+0010
+1000
+0000
+,
+0101
+0000
+0101
+0000
+0101
+0000
+0101
+0000
+00M1
+1000
+010M
+0010
+0M01
+1000
+01M0
+1000
+,
+010M
+0000
+1000
+0000
+01M0
+0000
+0002
+0000
+M000
+0000
+0000
+0000
+00M3
+0000
+0100
+1000
+00M1
+0000
+0000
+0010
+M000
+0000
+0100
+0000
+002M
+0000
+0000
+0000
+M000
+0000
+0000
+0000
+,
+0M30
+0000
+0000
+0000
+01M0
+0000
+1000
+0000
+010M
+0010
+0001
+0010
+M001
+0100
+0010
+2000
+000M
+0000
+0000
+3000
+0100
+0000
+0010
+0000
+0M00
+0000
+1003
+0000
+0001
+0000
+1000
+0000
+,
+0M00
+0031
+M000
+0310
+1000
+0000
+0001
+0000
+0010
+0000
+0200
+0000
+1000
+0000
+0000
+0000
+,
+0310
+0000
+0010
+0001
+0200
+0000
+0300
+0020
+0000
+0030
+1000
+0000
+0002
+0000
+0000
+0000
+,
+1000
+0000
+0000
+0000
+0100
+0000
+0003
+0000
+0001
+0000
+0010
+0000
+0100
+0010
+0001
+1000
+,
+0100
+1000
+0001
+0010
+0200
+0000
+0300
+0000
+1000
+0000
+0001
+0000
+0020
+0000
+0130
+0000
+,
+1000
+0003
+0100
+0030
+0100
+0000
+0001
+0000
+0010
+0000
+0200
+0000
+1000
+0000
+0000
+0000
+,
+0310
+0000
+0010
+0001
+0200
+0000
+0300
+0002
+0000
+0003
+0100
+0000
+0002
+0000
+0000
+0000
+,
+1000
+0000
+0000
+0000
+0100
+0000
+0003
+0000
+0001
+0000
+0010
+0000
+0100
+0010
+0001
+1000
+,
+0010
+0000
+1000
+0000
+0001
+0000
+0100
+0000
+0001
+0000
+0010
+0000
+0100
+0000
+1000
+0000
+0010
+0000
+0000
+0000
+0100
+0000
+0000
+0000
+0001
+0000
+0010
+0000
+0000
+0003
+0100
+0000
+,
+0000
+0030
+1000
+0000
+0000
+0300
+1000
+0000
+0010
+0000
+0000
+0000
+1000
+0000
+0000
+0000
+0100
+0000
+0000
+0000
+0020
+0000
+0000
+0000
+0001
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+,
+0130
+0000
+0100
+1000
+0020
+0000
+0030
+0200
+0000
+0300
+0001
+0000
+2000
+0000
+0000
+0000
+,
+0001
+3000
+0020
+0000
+1000
+0030
+0200
+0300
+,
+0002
+0003
+2000
+0000
+0010
+3010
+0200
+0001
+,
+0001
+0301
+2000
+0000
+0001
+0000
+0010
+3000
+,
+0002
+0003
+0020
+0000
+0001
+0000
+0100
+0030
+,
+0100
+1000
+0002
+0003
+2000
+0000
+0010
+0000
+,
+0001
+0000
+3000
+0000
+0010
+0100
+0010
+0100
+0010
+0100
+0010
+0100
+0001
+1000
+0001
+1000
+,
+0000
+0003
+0100
+0000
+02M2
+0000
+M000
+0000
+00M0
+0000
+M000
+0000
+00M0
+0000
+M000
+0000
+,
+00M0
+M000
+00M0
+M000
+00M0
+M300
+00M0
+0M00
+,
+00M0
+0M03
+0000
+0000
+0000
+0000
+0000
+0000
+;
+
+//---------------dance-single - Kommisar----------------
+#NOTEDATA:;
+#STEPSTYPE:dance-single;
+#DESCRIPTION:Kommisar;
+#CHARTSTYLE:;
+#DIFFICULTY:Hard;
+#METER:9;
+#RADARVALUES:0.825,0.969,0.000,0.542,0.395,675.000,0.000,70.000,0.000,0.000,2.000,0.000,0.000,0.825,0.969,0.000,0.542,0.395,675.000,0.000,70.000,0.000,0.000,2.000,0.000,0.000;
+#CREDIT:Kommisar;
+#OFFSET:-0.125000;
+#BPMS:0.000000=181.699997
+,304.000000=90.850998
+,311.000000=181.701996
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=2
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+;
+#SCROLLS:0.000000=1.000000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+;
+#ATTACKS:
+;
+#NOTES:
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0001
+0000
+1000
+0100
+1000
+0000
+0001
+0000
+0010
+0000
+0100
+0000
+1000
+0000
+0001
+0000
+,
+0100
+0000
+0010
+1000
+0010
+0000
+1000
+0000
+0100
+0000
+0010
+0000
+0001
+0000
+1000
+0000
+,
+0001
+0000
+0100
+0010
+0100
+0000
+0001
+0000
+1000
+0000
+0010
+0000
+1000
+0000
+0100
+0000
+,
+0010
+0000
+0001
+0100
+0001
+0000
+1000
+0000
+0100
+0000
+0100
+0000
+0020
+0030
+0002
+0003
+,
+1000
+0000
+0010
+0100
+0010
+0000
+1000
+0000
+0001
+0000
+0010
+0000
+0100
+0000
+1000
+0000
+,
+0001
+0000
+1000
+0010
+1000
+0000
+0001
+0000
+0100
+0000
+0010
+0000
+1000
+0000
+0100
+0000
+,
+0010
+0000
+0001
+0100
+0001
+0000
+1000
+0000
+0010
+0000
+1000
+0000
+0100
+0000
+0010
+0000
+,
+0001
+0000
+0001
+0000
+0100
+0000
+0100
+0000
+0010
+0000
+0010
+0000
+2000
+3000
+0002
+0003
+,
+1000
+0010
+0010
+0100
+0000
+0001
+0010
+0000
+,
+0100
+0000
+1000
+0000
+1000
+0000
+0001
+0010
+0001
+0000
+1000
+0000
+0100
+0000
+0100
+0000
+,
+0010
+0001
+0001
+0100
+0000
+0010
+1000
+0000
+,
+0100
+0000
+0010
+0000
+0100
+0000
+1000
+0001
+1000
+0000
+0010
+0000
+0200
+0300
+0002
+0003
+,
+1000
+0001
+0001
+0010
+0000
+0001
+1000
+0000
+,
+0010
+0000
+1000
+0000
+1000
+0000
+0001
+0100
+0001
+0000
+1000
+0000
+0010
+0000
+0010
+0000
+,
+0100
+0001
+1000
+0100
+0000
+0010
+0001
+0000
+,
+1000
+0000
+0010
+0000
+0100
+0000
+0001
+0000
+1000
+0100
+1000
+0000
+0001
+0100
+0001
+0000
+,
+1000
+0010
+0010
+0100
+0000
+0001
+0010
+0000
+,
+0100
+0000
+1000
+0000
+1000
+0000
+0001
+0010
+0001
+0000
+1000
+0000
+0100
+0000
+0100
+0000
+,
+0010
+0001
+0001
+0100
+0000
+0010
+1000
+0000
+,
+0100
+0000
+0010
+0000
+0100
+0000
+1000
+0001
+1000
+0000
+0010
+0000
+0200
+0300
+0002
+0003
+,
+1000
+0001
+0001
+0010
+0000
+0001
+1000
+0000
+,
+0010
+0000
+1000
+0000
+1000
+0000
+0001
+0100
+0001
+0000
+1000
+0000
+0010
+0000
+0010
+0000
+,
+1000
+0100
+0010
+0001
+0000
+1000
+0010
+0000
+,
+0100
+0001
+0100
+0000
+0001
+0100
+0001
+0000
+1000
+0001
+1000
+0000
+0002
+0003
+2000
+3000
+,
+0010
+0000
+0100
+0000
+0001
+0000
+2000
+0000
+0000
+0000
+0000
+3000
+0000
+0000
+0010
+0100
+,
+0002
+0000
+0003
+2000
+0000
+3000
+0100
+0000
+0020
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0030
+0001
+0000
+0100
+0000
+0001
+1000
+0001
+0000
+1000
+0100
+1000
+0020
+,
+0000
+0000
+0030
+0000
+0100
+0000
+0001
+0000
+2000
+0000
+0000
+0000
+3020
+0030
+0200
+0300
+,
+0001
+0000
+1000
+0000
+0100
+0000
+0020
+0000
+0000
+0000
+0000
+0000
+0030
+0000
+0001
+0010
+,
+0002
+0000
+0003
+0200
+0000
+0300
+0020
+0000
+2030
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+,
+0000
+0000
+3000
+0000
+0001
+0000
+0100
+0000
+0010
+1000
+0010
+0000
+1000
+0100
+1000
+0000
+,
+0010
+0100
+0010
+0000
+0100
+0010
+0100
+0000
+0001
+1000
+0001
+0000
+2000
+3000
+0020
+0030
+,
+1000
+0100
+0100
+0010
+0000
+0001
+0100
+0010
+,
+1000
+0001
+0001
+0100
+0000
+0001
+1000
+0100
+,
+1000
+0010
+0010
+1000
+0000
+0001
+0010
+0100
+,
+1000
+0001
+1000
+0000
+0001
+0010
+0001
+0000
+1000
+0100
+1000
+0000
+0001
+0010
+0100
+0000
+,
+1000
+0100
+0100
+0010
+0000
+0001
+1000
+0100
+,
+1000
+0001
+0010
+0100
+0000
+1000
+0010
+1000
+,
+0001
+0100
+0100
+0010
+0000
+1000
+0001
+0010
+,
+0100
+1000
+0100
+0000
+1000
+0100
+1000
+0000
+0001
+0000
+1000
+0001
+1000
+0001
+1000
+0000
+,
+0010
+0000
+0100
+0000
+0001
+0000
+2000
+0000
+0000
+0000
+0000
+3000
+0000
+0000
+0010
+0100
+,
+0002
+0000
+0003
+2000
+0000
+3000
+0100
+0000
+0020
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0030
+0001
+0000
+0100
+0000
+0001
+1000
+0001
+0000
+1000
+0100
+1000
+0020
+,
+0000
+0000
+0030
+0000
+0100
+0000
+0001
+0000
+2000
+0000
+0000
+0000
+3020
+0030
+0200
+0300
+,
+0001
+0000
+1000
+0000
+0100
+0000
+0020
+0000
+0000
+0000
+0000
+0000
+0030
+0000
+0001
+0010
+,
+0002
+0000
+0003
+0200
+0000
+0300
+0020
+0000
+2030
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+,
+0000
+0000
+3000
+0000
+0001
+0000
+0100
+0000
+0010
+1000
+0010
+0000
+1000
+0100
+1000
+0000
+,
+0010
+0100
+0010
+0000
+0100
+0010
+0100
+0000
+0001
+1000
+0001
+0000
+2000
+3000
+0020
+0030
+,
+1000
+0000
+0001
+0000
+0010
+0000
+0100
+0100
+,
+1000
+0000
+0010
+0000
+1000
+0000
+0001
+0001
+,
+0100
+0000
+0010
+0000
+1000
+0000
+0100
+0100
+,
+0010
+0000
+0001
+0000
+0100
+0000
+0010
+0010
+,
+1000
+0000
+0010
+0000
+0100
+0000
+0010
+0010
+,
+1000
+0000
+0100
+0000
+0010
+0000
+0001
+0001
+,
+1000
+0000
+0010
+0000
+1000
+0000
+0100
+0100
+,
+0010
+0000
+0001
+0000
+0100
+0000
+0010
+0010
+,
+1000
+0000
+0001
+0010
+0001
+0000
+1000
+0000
+0100
+0000
+0010
+0001
+0010
+0000
+0001
+0000
+,
+1000
+0000
+0010
+0100
+0010
+0000
+1000
+0000
+0001
+0000
+1000
+0100
+0010
+0000
+0001
+0000
+,
+1000
+0000
+0001
+0100
+0001
+0000
+1000
+0000
+0100
+0000
+0010
+0001
+0010
+0000
+0001
+0000
+,
+1000
+0000
+0001
+0010
+0100
+0000
+1000
+0000
+0001
+0000
+0100
+0010
+0100
+0000
+0001
+0000
+,
+1000
+0000
+0010
+0100
+0010
+0000
+1000
+0000
+0001
+0000
+1000
+0100
+1000
+0000
+0001
+0000
+,
+0010
+0000
+0100
+1000
+0100
+0000
+1000
+0000
+0001
+0000
+1000
+0010
+1000
+0000
+0001
+0000
+,
+1000
+0000
+0100
+0010
+0001
+0000
+1000
+0000
+0010
+0000
+0100
+0001
+0100
+0000
+0001
+0000
+,
+1000
+0000
+0010
+0100
+0010
+0000
+1000
+0000
+0001
+0000
+0100
+0001
+0100
+0000
+0001
+0000
+,
+1000
+0010
+0010
+0100
+0000
+0001
+0010
+0000
+,
+0100
+0000
+1000
+0000
+1000
+0000
+0001
+0010
+0001
+0000
+1000
+0000
+0100
+0000
+0100
+0000
+,
+0010
+0001
+0001
+0100
+0000
+0010
+1000
+0000
+,
+0100
+0000
+0010
+0000
+0100
+0000
+1000
+0001
+1000
+0000
+0010
+0000
+0100
+0000
+0001
+0000
+,
+1000
+0001
+0001
+0010
+0000
+0001
+1000
+0000
+,
+0010
+0000
+1000
+0000
+1000
+0000
+0001
+0100
+0001
+0000
+1000
+0000
+0010
+0000
+0010
+0000
+,
+0100
+0001
+1000
+0100
+0000
+0010
+0001
+0000
+,
+1000
+0000
+1000
+0000
+1000
+0000
+1000
+0000
+0001
+0100
+0001
+0000
+1000
+0001
+1000
+0000
+,
+0001
+0000
+0010
+0000
+0100
+0000
+2000
+0000
+0000
+0000
+0000
+0000
+3000
+0000
+0001
+0100
+0002
+0000
+0003
+0010
+0000
+0000
+0100
+0000
+2000
+0000
+0000
+0000
+0000
+0000
+0000
+3000
+,
+0000
+0000
+0000
+0000
+0001
+0000
+0100
+0000
+0001
+1000
+0001
+0000
+1000
+0010
+1000
+0200
+0000
+0000
+0300
+0000
+0010
+0000
+0001
+0000
+4000
+0000
+0000
+0000
+0000
+0000
+0000
+3000
+,
+0040
+0000
+0000
+0000
+0000
+0000
+0000
+0030
+0100
+0000
+0000
+0000
+0010
+0000
+0000
+0000
+1000
+0000
+0000
+0000
+0002
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0003
+0000
+,
+0000
+0000
+0100
+0010
+2000
+0000
+3000
+0002
+0000
+0003
+0010
+0000
+0200
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0300
+1000
+0000
+0010
+0000
+1000
+0001
+1000
+0000
+,
+0001
+0010
+0001
+0200
+0000
+0000
+0300
+0000
+0010
+0000
+1000
+0000
+0002
+0000
+0000
+0000
+,
+0203
+0300
+0020
+0030
+1000
+0000
+0001
+0000
+0010
+0000
+0200
+0000
+0000
+0000
+0000
+0000
+,
+0300
+0000
+1000
+0100
+2000
+0000
+3000
+0020
+0000
+0030
+0200
+0000
+0302
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+0000
+0000
+0003
+0000
+1000
+0000
+0010
+0000
+0100
+0001
+0100
+0000
+,
+0001
+0010
+0001
+0000
+1000
+0000
+0100
+0000
+1000
+0000
+0001
+0000
+0100
+0000
+0001
+1000
+,
+0001
+1000
+0020
+0000
+1030
+0000
+0100
+0000
+0010
+0000
+0002
+0000
+0000
+0000
+0000
+0000
+,
+0000
+0003
+0100
+0010
+0200
+0000
+0300
+0002
+0000
+0003
+1000
+0000
+0020
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0030
+2000
+0000
+0000
+0000
+0000
+0000
+0000
+3000
+0200
+0000
+0300
+0000
+,
+0020
+0000
+0000
+0030
+0002
+0000
+0000
+0000
+0000
+0000
+0000
+0003
+2000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+3000
+0010
+0000
+0100
+0000
+0001
+0000
+1000
+0000
+0100
+0000
+0010
+0000
+,
+0001
+0000
+0010
+0100
+1000
+0000
+0001
+0000
+1000
+0000
+0010
+0000
+1000
+0000
+0001
+0000
+,
+0100
+0000
+0001
+0010
+0100
+0000
+1000
+0000
+0010
+0000
+1000
+0000
+0100
+0000
+0010
+0000
+,
+0001
+0000
+1000
+0000
+0010
+0100
+0010
+0000
+0100
+0010
+0100
+0000
+0001
+1000
+0001
+0000
+,
+2000
+3000
+0002
+0003
+0200
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0300
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+;
+
+//---------------dance-single - Kommisar----------------
+#NOTEDATA:;
+#STEPSTYPE:dance-single;
+#DESCRIPTION:Kommisar;
+#CHARTSTYLE:;
+#DIFFICULTY:Beginner;
+#METER:1;
+#RADARVALUES:0.234,0.219,0.008,0.000,0.000,210.000,1.000,0.000,0.000,0.000,0.000,0.000,0.000,0.234,0.219,0.008,0.000,0.000,210.000,1.000,0.000,0.000,0.000,0.000,0.000,0.000;
+#CREDIT:Kommisar;
+#OFFSET:-0.125000;
+#BPMS:0.000000=181.699997
+,304.000000=90.850998
+,311.000000=181.701996
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=2
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+;
+#SCROLLS:0.000000=1.000000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+;
+#ATTACKS:
+;
+#NOTES:
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0001
+0000
+1000
+0000
+,
+0010
+0000
+0100
+0000
+,
+0001
+0000
+0010
+0000
+,
+0001
+0000
+1000
+0000
+,
+0100
+0000
+1000
+0000
+,
+0010
+0000
+0100
+0000
+,
+0001
+0000
+1000
+0000
+,
+0010
+0010
+0100
+0100
+,
+0001
+0000
+1000
+0000
+,
+0100
+0000
+0010
+0000
+,
+0001
+0000
+0100
+0000
+,
+0001
+0000
+1000
+0000
+,
+0100
+0000
+1000
+0000
+,
+0010
+0000
+0100
+0000
+,
+0001
+0000
+1000
+0000
+,
+0010
+0000
+0100
+0100
+,
+0001
+0000
+1000
+0000
+,
+0010
+0000
+1000
+0000
+,
+0100
+0000
+0010
+0000
+,
+0001
+0000
+1000
+0000
+,
+0010
+0000
+1000
+0000
+,
+0001
+0000
+1000
+0000
+,
+0100
+0000
+0010
+0000
+,
+0001
+0001
+1000
+1000
+,
+0001
+0000
+0100
+0000
+,
+0001
+0000
+1000
+0000
+,
+0100
+0000
+1000
+0000
+,
+0010
+0000
+0100
+0000
+,
+0010
+0000
+0100
+0000
+,
+0001
+0000
+1000
+0000
+,
+0010
+0000
+1000
+0000
+,
+0001
+0001
+1000
+1000
+,
+0010
+0000
+0100
+0000
+,
+0001
+0000
+1000
+0000
+,
+0001
+0000
+1000
+0000
+,
+0010
+0000
+0100
+0000
+,
+0010
+0000
+1000
+0000
+,
+0001
+0000
+0100
+0000
+,
+0001
+0000
+0010
+0000
+,
+0100
+0100
+1000
+1000
+,
+0001
+0000
+0100
+0000
+,
+0001
+0000
+1000
+0000
+,
+0010
+0000
+1000
+0000
+,
+0100
+0000
+0010
+0000
+,
+0001
+0000
+1000
+0000
+,
+0001
+0000
+0100
+0000
+,
+0001
+0000
+0010
+0000
+,
+0100
+0100
+1000
+1000
+,
+0001
+0000
+0010
+0000
+,
+0001
+0000
+1000
+0000
+,
+0000
+0010
+1000
+0000
+,
+0001
+0000
+1000
+0000
+,
+0010
+0000
+1000
+0000
+,
+0001
+0000
+0100
+0000
+,
+0001
+0000
+0010
+0000
+,
+0100
+0000
+1000
+0000
+,
+0001
+0001
+0001
+0000
+,
+1000
+1000
+1000
+0000
+,
+0010
+0010
+0010
+0000
+,
+0100
+0100
+0100
+0000
+,
+0001
+0001
+0001
+0000
+,
+1000
+1000
+1000
+0000
+,
+0010
+0010
+0010
+0000
+,
+0100
+0100
+0100
+0000
+,
+0001
+0000
+1000
+0000
+,
+0010
+0000
+0100
+0000
+,
+0001
+0000
+1000
+0000
+,
+0010
+0000
+1000
+0000
+,
+0100
+0000
+1000
+0000
+,
+0010
+0000
+1000
+0000
+,
+0001
+0000
+0100
+0000
+,
+0001
+0001
+1000
+1000
+,
+0001
+0000
+1000
+0000
+,
+0100
+0000
+0010
+0001
+,
+0001
+1000
+0000
+0010
+,
+0000
+1000
+0000
+0001
+,
+0000
+0010
+0000
+0001
+,
+0000
+1000
+1000
+0100
+,
+0100
+1000
+0000
+0001
+,
+0000
+1000
+0000
+0001
+,
+0000
+0100
+0000
+0001
+,
+0000
+1000
+1000
+0001
+,
+0001
+1000
+0000
+0010
+,
+0000
+0100
+0000
+0001
+,
+0000
+0100
+0000
+0010
+,
+0000
+1000
+0000
+0001
+,
+0000
+1000
+0000
+0001
+,
+0000
+0100
+0000
+0001
+,
+0000
+1000
+0000
+0010
+,
+0000
+1000
+1000
+0001
+,
+0001
+1001
+0000
+0000
+;
+
+//---------------dance-single - Kommisar----------------
+#NOTEDATA:;
+#STEPSTYPE:dance-single;
+#DESCRIPTION:Kommisar;
+#CHARTSTYLE:;
+#DIFFICULTY:Medium;
+#METER:6;
+#RADARVALUES:0.648,0.634,0.000,0.426,0.031,530.000,0.000,55.000,0.000,0.000,6.000,0.000,0.000,0.648,0.634,0.000,0.426,0.031,530.000,0.000,55.000,0.000,0.000,6.000,0.000,0.000;
+#CREDIT:Kommisar;
+#OFFSET:-0.125000;
+#BPMS:0.000000=181.699997
+,304.000000=90.850998
+,311.000000=181.701996
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=2
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+;
+#SCROLLS:0.000000=1.000000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+;
+#ATTACKS:
+;
+#NOTES:
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0001
+0000
+1000
+0000
+0010
+0100
+0010
+0000
+,
+1000
+0000
+0001
+0000
+0010
+0100
+1000
+0000
+,
+0010
+0000
+1000
+0000
+0001
+1000
+0001
+0000
+,
+1000
+0000
+0001
+0000
+1000
+0001
+1000
+0001
+,
+0100
+0000
+0010
+0000
+1000
+0001
+1000
+0000
+,
+0001
+0000
+0100
+0000
+0001
+1000
+0100
+0000
+,
+1000
+0000
+0001
+0000
+1000
+0010
+1000
+0000
+,
+0001
+0000
+1000
+0000
+0001
+0000
+1000
+0000
+0001
+0000
+1000
+0000
+0002
+0003
+2000
+3000
+,
+0001
+0010
+0100
+1000
+0000
+0001
+1000
+0000
+,
+0010
+0100
+0010
+1000
+0001
+0100
+0001
+1000
+,
+0100
+0010
+0001
+1000
+0000
+0001
+0010
+0000
+,
+0001
+1000
+0100
+1000
+0001
+0100
+0010
+0100
+,
+0001
+1000
+0100
+0010
+0000
+0001
+1000
+0000
+,
+0010
+1000
+0010
+1000
+0100
+0010
+0001
+1000
+,
+0010
+0100
+0001
+0100
+0000
+0001
+1000
+0000
+,
+0100
+0010
+0001
+1000
+0010
+1000
+0001
+1000
+,
+0001
+0010
+0100
+1000
+0000
+0001
+1000
+0000
+,
+0010
+0100
+0010
+1000
+0001
+0100
+0001
+1000
+,
+0100
+0010
+0001
+1000
+0000
+0001
+0010
+0000
+,
+0001
+1000
+0100
+1000
+0001
+0100
+0010
+0100
+,
+0001
+1000
+0100
+0010
+0000
+0001
+1000
+0000
+,
+0010
+1000
+0010
+1000
+0100
+0010
+0001
+1000
+,
+0010
+0100
+0001
+0100
+0000
+0001
+1000
+0000
+,
+0001
+0000
+0010
+0000
+0001
+0000
+0010
+0000
+0001
+0000
+0010
+0000
+0002
+0003
+2000
+3000
+,
+0001
+0010
+0100
+2000
+0000
+0000
+3000
+0001
+,
+0200
+0000
+0300
+0002
+0000
+0003
+1000
+0000
+0200
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+,
+0000
+0300
+0010
+0001
+1000
+0100
+1000
+0001
+,
+0100
+0000
+0001
+0000
+0100
+0000
+0001
+0000
+1000
+0000
+0100
+0000
+2000
+3000
+0002
+0003
+,
+1000
+0100
+0010
+0002
+0000
+0000
+0000
+0103
+,
+0020
+0000
+0030
+2000
+0000
+3000
+0001
+0000
+0200
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0300
+0001
+0000
+1000
+0000
+0010
+0000
+1000
+0000
+0100
+0000
+0010
+0000
+,
+0001
+0000
+1000
+0000
+0001
+0000
+1000
+0000
+0010
+0000
+1000
+0000
+0002
+0003
+0200
+0300
+,
+0001
+0010
+0100
+1000
+0000
+0010
+1000
+0001
+,
+1000
+0100
+0010
+0001
+0000
+0100
+0010
+0100
+,
+0001
+0010
+0001
+1000
+0000
+1000
+0100
+0010
+,
+0004
+0003
+4000
+3000
+0400
+0300
+0040
+0030
+,
+0001
+0100
+0001
+1000
+0000
+0010
+1000
+0010
+,
+1000
+0100
+0010
+0001
+0000
+0100
+0010
+0100
+,
+0001
+1000
+0010
+1000
+0000
+0001
+0010
+0100
+,
+4000
+3000
+0004
+0003
+1000
+1000
+0001
+1000
+,
+0001
+0010
+0100
+2000
+0000
+0000
+3000
+0001
+,
+0200
+0000
+0300
+0002
+0000
+0003
+1000
+0000
+0200
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+,
+0000
+0300
+0010
+0001
+1000
+0100
+1000
+0001
+,
+0100
+0000
+0001
+0000
+0100
+0000
+0001
+0000
+1000
+0000
+0100
+0000
+2000
+3000
+0002
+0003
+,
+1000
+0100
+0010
+0002
+0000
+0000
+0000
+0103
+,
+0020
+0000
+0030
+2000
+0000
+3000
+0001
+0000
+0200
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0300
+0001
+0000
+1000
+0000
+0010
+0000
+1000
+0000
+0100
+0000
+0010
+0000
+,
+0001
+0000
+1000
+0000
+0001
+0000
+1000
+0000
+0010
+0000
+1000
+0000
+0002
+0003
+0200
+0300
+,
+0001
+1000
+0010
+0100
+,
+0001
+0010
+0001
+1000
+,
+0010
+1000
+0100
+1000
+,
+0001
+0010
+0100
+1000
+,
+0001
+0010
+0001
+0100
+,
+0001
+1000
+0010
+1000
+,
+0100
+1000
+0010
+0100
+,
+0001
+0010
+0100
+1000
+,
+0001
+0100
+0001
+0000
+1000
+0100
+1000
+0000
+,
+0010
+0100
+0010
+0000
+1000
+0001
+1000
+0000
+,
+0001
+0010
+0100
+0000
+1000
+0100
+0010
+0000
+,
+0001
+0100
+0001
+0000
+1000
+0100
+1000
+0000
+,
+0001
+0010
+0100
+1000
+0010
+1000
+0100
+1000
+,
+0001
+0010
+0100
+1000
+0001
+0100
+0001
+1000
+,
+0100
+0010
+0001
+1000
+0100
+1000
+0010
+1000
+,
+0100
+0010
+0001
+0100
+0001
+1000
+0010
+1000
+,
+0001
+0010
+0100
+1000
+0000
+0001
+0100
+0000
+,
+0001
+1000
+0100
+0010
+0001
+0100
+0010
+0100
+,
+0001
+1000
+0100
+1000
+0000
+0010
+1000
+0000
+,
+0100
+0010
+0001
+0100
+0010
+1000
+0001
+1000
+,
+0001
+0010
+0100
+1000
+0000
+0001
+1000
+0000
+,
+0100
+0010
+0100
+1000
+0001
+0100
+0001
+1000
+,
+0100
+0010
+0100
+1000
+0000
+0001
+0100
+0000
+,
+0001
+1000
+0001
+1000
+0001
+0100
+0001
+0100
+,
+0001
+0000
+0000
+1000
+0000
+0000
+0000
+0000
+0010
+0000
+0000
+0000
+0100
+0000
+0000
+0000
+,
+0001
+0000
+1000
+0000
+0100
+0000
+0020
+0030
+,
+0002
+0000
+0000
+0003
+1000
+0000
+0100
+0000
+0010
+0000
+0002
+0000
+0000
+0000
+0000
+0000
+,
+0003
+0000
+0100
+0000
+0002
+0000
+0003
+2000
+0000
+3000
+0010
+0000
+0200
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0300
+0001
+0000
+1000
+0000
+0010
+0000
+1000
+0000
+,
+0100
+0010
+0001
+0100
+0001
+1000
+0010
+1000
+,
+0002
+0003
+0200
+0300
+0001
+0000
+0010
+0000
+0100
+0000
+2000
+0000
+0000
+0000
+0000
+0000
+,
+0000
+0000
+3001
+0000
+0200
+0000
+0300
+0002
+0000
+0003
+1000
+0000
+0020
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0030
+0100
+0000
+0010
+0000
+1000
+0000
+0100
+0000
+,
+0010
+0001
+1000
+0100
+1000
+0100
+1000
+0001
+,
+0010
+0100
+1000
+0010
+1000
+0002
+0000
+0000
+,
+0003
+0000
+0100
+0000
+0010
+0000
+0000
+1000
+0000
+0000
+0001
+0000
+0200
+0000
+0000
+0000
+,
+0000
+0300
+0020
+0000
+0000
+0030
+2000
+3000
+,
+0200
+0300
+0020
+0000
+0030
+0000
+0002
+0000
+,
+0000
+0003
+0020
+0000
+0000
+0000
+0030
+0000
+,
+0200
+0300
+2000
+0000
+0000
+0000
+0000
+3000
+,
+0010
+0100
+0002
+0000
+1003
+2000
+0000
+0000
+,
+3000
+0000
+0010
+0100
+0010
+0100
+0001
+1000
+,
+0002
+0003
+2000
+3000
+0020
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0030
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+;
+
+//---------------dance-single - Kommisar----------------
+#NOTEDATA:;
+#STEPSTYPE:dance-single;
+#DESCRIPTION:Kommisar;
+#CHARTSTYLE:;
+#DIFFICULTY:Easy;
+#METER:4;
+#RADARVALUES:0.492,0.484,0.000,0.248,0.000,412.000,0.000,32.000,0.000,0.000,0.000,0.000,0.000,0.492,0.484,0.000,0.248,0.000,412.000,0.000,32.000,0.000,0.000,0.000,0.000,0.000;
+#CREDIT:Kommisar;
+#OFFSET:-0.125000;
+#BPMS:0.000000=181.699997
+,304.000000=90.850998
+,311.000000=181.701996
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=2
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+;
+#SCROLLS:0.000000=1.000000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+;
+#ATTACKS:
+;
+#NOTES:
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0001
+1000
+0010
+1000
+,
+0001
+0100
+0001
+1000
+,
+0100
+1000
+0100
+0010
+,
+0001
+0000
+0000
+0000
+1000
+0000
+0000
+0000
+0001
+0000
+0000
+0000
+0200
+0300
+0002
+0003
+,
+1000
+0010
+1000
+0001
+,
+0100
+0010
+0100
+0001
+,
+1000
+0100
+0010
+0001
+,
+1000
+0000
+1000
+0000
+0001
+1000
+0001
+1000
+,
+0001
+0100
+0001
+1000
+,
+0010
+1000
+0100
+0010
+,
+0001
+1000
+0100
+1000
+,
+0010
+0000
+0000
+0000
+0100
+0000
+0000
+0000
+0001
+0000
+0000
+0000
+2000
+3000
+0002
+0003
+,
+1000
+0010
+1000
+0001
+,
+1000
+0010
+0100
+0001
+,
+0010
+0100
+1000
+0010
+,
+1000
+0000
+0000
+0000
+0100
+0000
+0000
+0000
+0010
+0000
+0000
+0000
+0002
+0003
+2000
+3000
+,
+0001
+0100
+0010
+1000
+,
+0100
+0010
+0001
+1000
+,
+0010
+0100
+0010
+1000
+,
+0100
+0000
+0000
+0000
+1000
+0000
+0000
+0000
+0010
+0000
+0000
+0000
+2000
+3000
+0002
+0003
+,
+1000
+0010
+0100
+0001
+,
+1000
+0100
+1000
+0001
+,
+0100
+0001
+1000
+0100
+,
+1000
+0001
+1000
+0000
+0001
+0100
+0001
+0000
+,
+1000
+0000
+0100
+0020
+0000
+0000
+0030
+0001
+,
+0100
+0000
+0001
+1000
+0001
+0000
+0100
+0000
+,
+0010
+1000
+0100
+0010
+,
+0001
+0000
+1000
+0000
+0010
+0000
+2000
+3002
+,
+0103
+0000
+0010
+2000
+0000
+0000
+3000
+0001
+,
+0100
+0000
+0001
+1000
+0001
+0000
+1000
+0000
+,
+0100
+0010
+0001
+1000
+,
+0100
+0000
+1000
+0000
+0100
+0000
+0000
+0000
+1000
+0000
+0001
+0000
+2000
+3000
+0002
+0003
+,
+0100
+0000
+0001
+1000
+0000
+0010
+1000
+0000
+,
+0001
+0000
+0100
+0001
+0000
+1000
+0001
+0000
+,
+1000
+0000
+0100
+0010
+0000
+0100
+1000
+0000
+,
+0001
+1000
+0010
+1000
+,
+0001
+0000
+1000
+0010
+0000
+1000
+0001
+0000
+,
+0100
+0000
+0010
+1000
+0000
+0010
+0100
+0000
+,
+0001
+0000
+1000
+0010
+0000
+1000
+0001
+0000
+,
+1000
+0000
+0100
+0000
+0010
+0000
+0001
+1000
+,
+0001
+0000
+1000
+0200
+0000
+0000
+0300
+0010
+,
+0001
+0000
+1000
+0100
+1000
+0000
+0001
+0000
+,
+0100
+0010
+1000
+0100
+,
+0010
+0000
+0001
+0000
+1000
+0000
+0002
+2003
+,
+3010
+0000
+0100
+0002
+0000
+0000
+0003
+1000
+,
+0010
+0000
+0100
+0001
+0100
+0000
+0001
+0000
+,
+1000
+0100
+0010
+0001
+,
+1000
+0000
+0001
+0000
+1000
+0000
+0000
+0000
+0010
+0000
+0100
+0000
+0020
+0030
+0200
+0300
+,
+0001
+1000
+0001
+1000
+,
+0010
+1000
+0010
+1000
+,
+0001
+0100
+0001
+0100
+,
+0001
+0010
+0001
+0010
+,
+0001
+1000
+0100
+1000
+,
+0010
+1000
+0100
+1000
+,
+0001
+1000
+0100
+0010
+,
+0001
+1000
+0100
+1000
+,
+0001
+0100
+0001
+0000
+1000
+0000
+0010
+0000
+,
+1000
+0100
+1000
+0000
+0001
+0000
+0100
+0000
+,
+0010
+1000
+0010
+0000
+1000
+0000
+0100
+0000
+,
+0010
+0001
+0010
+0000
+0100
+0000
+1000
+0000
+,
+0001
+1000
+0001
+0000
+1000
+0000
+0010
+0000
+,
+0100
+0001
+0100
+0000
+0001
+0000
+1000
+0000
+,
+0100
+0010
+0001
+0000
+1000
+0000
+0100
+0000
+,
+0010
+0001
+0010
+0000
+0100
+0000
+1000
+0000
+,
+0001
+1000
+0010
+0100
+,
+0001
+0000
+1000
+0000
+0010
+0000
+1000
+0001
+,
+1000
+0010
+0100
+0001
+,
+1000
+0000
+0100
+0000
+0010
+0000
+0001
+1000
+,
+0001
+1000
+0100
+1000
+,
+0010
+0000
+0100
+0000
+0001
+0000
+1000
+0010
+,
+1000
+0001
+0010
+0100
+,
+1000
+0000
+0001
+0000
+1000
+0000
+0000
+0000
+0001
+0000
+1000
+0000
+0002
+0003
+2000
+3000
+,
+0001
+0000
+0100
+0000
+,
+0001
+0000
+1000
+0000
+0001
+0000
+2000
+3000
+,
+0002
+0003
+1000
+0000
+0001
+0200
+0000
+0000
+,
+0300
+0010
+1000
+0000
+0100
+0010
+0001
+0000
+,
+1000
+0010
+0100
+0001
+,
+0010
+0100
+1000
+0001
+,
+2000
+3200
+0310
+0000
+0001
+2000
+0000
+0000
+,
+3000
+0010
+0100
+0000
+0001
+1000
+0001
+0000
+,
+1000
+0000
+0010
+0000
+0100
+0001
+0100
+0000
+,
+0001
+0000
+1000
+0000
+0100
+0000
+0010
+0001
+,
+1000
+0000
+0010
+0000
+1000
+0002
+0000
+0000
+,
+0003
+1000
+0001
+0000
+1000
+0100
+1000
+0000
+,
+0010
+1000
+0001
+0010
+,
+0100
+0000
+1000
+0000
+0010
+0000
+1000
+0001
+,
+1000
+0001
+1000
+0000
+0010
+0000
+1000
+0000
+,
+0100
+1000
+0001
+0010
+,
+0100
+1000
+0010
+1000
+,
+0001
+0000
+1000
+0100
+1000
+0000
+0001
+0100
+,
+0002
+0003
+2000
+3000
+0002
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+0000
+0003
+0000
+0000
+0000
+0000
+0000
+0000
+;
+
+//---------------pump-single - Vin.il / Aegis----------------
+#NOTEDATA:;
+#STEPSTYPE:pump-single;
+#DESCRIPTION:Vin.il / Aegis;
+#CHARTSTYLE:Pad;
+#DIFFICULTY:Medium;
+#METER:10;
+#RADARVALUES:1.000,1.000,0.581,1.000,0.201,694.000,75.000,173.000,0.000,0.000,0.000,0.000,0.000,1.000,1.000,0.581,1.000,0.201,694.000,75.000,173.000,0.000,0.000,0.000,0.000,0.000;
+#CREDIT:Vin.il;
+#OFFSET:-0.125000;
+#BPMS:0.000000=181.699997
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=4
+,384.000000=13
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+,384.000000=1.500000=0.500000=0
+;
+#SCROLLS:0.000000=1.000000
+,304.000000=0.500000
+,318.000000=1.000000
+,386.000000=0.000010
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+;
+#ATTACKS:
+;
+#NOTES:
+// measure 0
+00000
+00000
+00000
+00000
+, // measure 1
+00000
+00000
+00000
+00000
+, // measure 2
+00000
+00000
+00000
+00000
+, // measure 3
+00000
+00000
+00000
+00000
+, // measure 4
+00100
+00000
+01001
+00000
+00010
+10000
+00001
+01000
+, // measure 5
+00100
+00000
+10100
+00000
+00100
+01000
+00010
+00100
+, // measure 6
+00001
+00000
+01001
+00000
+00001
+01000
+00100
+10000
+, // measure 7
+00100
+00000
+00100
+01000
+00010
+00100
+00001
+00000
+, // measure 8
+00100
+00000
+00000
+00000
+01010
+00000
+00000
+00000
+01000
+00020
+00000
+00030
+00100
+00000
+00010
+00000
+, // measure 9
+10000
+00000
+00000
+00000
+10010
+00000
+00000
+00000
+10000
+00200
+00000
+00300
+01000
+00000
+00001
+00000
+, // measure 10
+00100
+00000
+00000
+00000
+00101
+00000
+00000
+00000
+00100
+00002
+00000
+00003
+10000
+00000
+00100
+00000
+, // measure 11
+01000
+00000
+00001
+00000
+01000
+00000
+00001
+00000
+10000
+00010
+10000
+00010
+00200
+00000
+00300
+00000
+, // measure 12
+00001
+00100
+00001
+10000
+00000
+00010
+01000
+00001
+, // measure 13
+10000
+00100
+01000
+00010
+00100
+00001
+10000
+00100
+, // measure 14
+00000
+01000
+00010
+00001
+00000
+00010
+00100
+00010
+, // measure 15
+10000
+00010
+01000
+00100
+10000
+00001
+01000
+10000
+, // measure 16
+00000
+00100
+00001
+01000
+00000
+00100
+00010
+00001
+, // measure 17
+00100
+10000
+00010
+00001
+00100
+00010
+01000
+00100
+, // measure 18
+00000
+10000
+00001
+00100
+00000
+00010
+01000
+00100
+, // measure 19
+01000
+00001
+10000
+00100
+01000
+02000
+03001
+00002
+, // measure 20
+10003
+00010
+01000
+00100
+10000
+00001
+01000
+00001
+, // measure 21
+10000
+00010
+01000
+00100
+10000
+00010
+01000
+01000
+, // measure 22
+00001
+01000
+00010
+10000
+00100
+01000
+00010
+00001
+, // measure 23
+00100
+10000
+00010
+00100
+00001
+10000
+00001
+00001
+, // measure 24
+01000
+10000
+00100
+00001
+01000
+00100
+01000
+00010
+, // measure 25
+10000
+01000
+00100
+00010
+00100
+00001
+10000
+10000
+, // measure 26
+00100
+10000
+00010
+01000
+00100
+10000
+00010
+00100
+, // measure 27
+00001
+00002
+00003
+00000
+10000
+20000
+30000
+00000
+00001
+00002
+00003
+00000
+10000
+20000
+30000
+00000
+00010
+00020
+00030
+00000
+01000
+02000
+03000
+00000
+00010
+00020
+00030
+00000
+01000
+02000
+03000
+00000
+, // measure 28
+00100
+10000
+00100
+02000
+10000
+00000
+03100
+00000
+, // measure 29
+10000
+01000
+00100
+00020
+00100
+00000
+01030
+00000
+, // measure 30
+00010
+10000
+00001
+00100
+00010
+10000
+00001
+00100
+, // measure 31
+00010
+01000
+00100
+10100
+10000
+00001
+10001
+10000
+, // measure 32
+00001
+01000
+10000
+02000
+00010
+00000
+03100
+00000
+, // measure 33
+10000
+00010
+00100
+00020
+00001
+00000
+00130
+00000
+, // measure 34
+00001
+10000
+00100
+01000
+00001
+10000
+00100
+01000
+, // measure 35
+00010
+00020
+00030
+00000
+01000
+02000
+03000
+00000
+00010
+00020
+00030
+00000
+01000
+02000
+03000
+00000
+00001
+00002
+00003
+00000
+10000
+20000
+30000
+00000
+00001
+00002
+00003
+00000
+10000
+20000
+30000
+00000
+, // measure 36
+00010
+00100
+00010
+00002
+00003
+00010
+10000
+00010
+, // measure 37
+00100
+00010
+01000
+00001
+10000
+00010
+01000
+00100
+, // measure 38
+10000
+00010
+01000
+20000
+30000
+01000
+00001
+01000
+, // measure 39
+02100
+03100
+10200
+10300
+21000
+31000
+02100
+03100
+, // measure 40
+00010
+00100
+00001
+00020
+00030
+00001
+00100
+00010
+, // measure 41
+01000
+00100
+10000
+01000
+00100
+00010
+00100
+00001
+, // measure 42
+00100
+00010
+01000
+00200
+00300
+10000
+00010
+00100
+, // measure 43
+00201
+00301
+00012
+00013
+00120
+00130
+01200
+01300
+, // measure 44
+00010
+00100
+00001
+02000
+00010
+00000
+03100
+00000
+, // measure 45
+01000
+00010
+00100
+00002
+10000
+00000
+00103
+00000
+, // measure 46
+00010
+01000
+00100
+10000
+00010
+01000
+00100
+10000
+, // measure 47
+00010
+01000
+00100
+10010
+00100
+00001
+01001
+00100
+, // measure 48
+10000
+00010
+00100
+02000
+10000
+00000
+03100
+00000
+, // measure 49
+00010
+01000
+00001
+00200
+00010
+00000
+00301
+00000
+, // measure 50
+10000
+00100
+01000
+00010
+10000
+00100
+01000
+00010
+, // measure 51
+10000
+20000
+30000
+00000
+00001
+00002
+00003
+00000
+10000
+20000
+30000
+00000
+00001
+00002
+00003
+00000
+01000
+02000
+03000
+00000
+00010
+00020
+00030
+00000
+01000
+02000
+03000
+00000
+00010
+00020
+00030
+00000
+, // measure 52
+02020
+03030
+00220
+00330
+02020
+03030
+02002
+03003
+, // measure 53
+02020
+03030
+20020
+30030
+02020
+03030
+02200
+03300
+, // measure 54
+02002
+03003
+00202
+00303
+02002
+03003
+02200
+03300
+, // measure 55
+20020
+30030
+02002
+03003
+10010
+01001
+10010
+00000
+, // measure 56
+20002
+30003
+02002
+03003
+20002
+30003
+20200
+30300
+, // measure 57
+20002
+30003
+00202
+00303
+20002
+30003
+20020
+30030
+, // measure 58
+20200
+30300
+20020
+30030
+00220
+00330
+20020
+30030
+, // measure 59
+00020
+20030
+30200
+02300
+03002
+00203
+00320
+10030
+, // measure 60
+20100
+30100
+01200
+01300
+02010
+03010
+00120
+00130
+, // measure 61
+00201
+00301
+01002
+01003
+02100
+03100
+10200
+10300
+, // measure 62
+20010
+30010
+10020
+10030
+20010
+30010
+10020
+10030
+, // measure 63
+00200
+02300
+03020
+00230
+00302
+20003
+30020
+00130
+, // measure 64
+00201
+00301
+10002
+10003
+20010
+30010
+01020
+01030
+, // measure 65
+02001
+03001
+10002
+10003
+20100
+30100
+01200
+01300
+, // measure 66
+02001
+03001
+01002
+01003
+02001
+03001
+01002
+01003
+, // measure 67
+00200
+20300
+30020
+00230
+00302
+20003
+30200
+01300
+, // measure 68
+00010
+00001
+00010
+00100
+00000
+00001
+00010
+00100
+, // measure 69
+01000
+10000
+00100
+00001
+00100
+10000
+00100
+00001
+, // measure 70
+00000
+01000
+10000
+01000
+00000
+00100
+10000
+00001
+, // measure 71
+01000
+10000
+00100
+00001
+10000
+00010
+00100
+00001
+, // measure 72
+00000
+00100
+00010
+01000
+00000
+00010
+00100
+00001
+, // measure 73
+00100
+00010
+01000
+10000
+01000
+00010
+10000
+00100
+, // measure 74
+00000
+10000
+01000
+00100
+00000
+00010
+01000
+00100
+, // measure 75
+01000
+00000
+00001
+00000
+10000
+00000
+00010
+00000
+10000
+00010
+10000
+00010
+10000
+00010
+10000
+00010
+, // measure 76
+00100
+00000
+00000
+00000
+00000
+00000
+00001
+00000
+00000
+00000
+00000
+00000
+00100
+00000
+00000
+00000
+00000
+00000
+00020
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+00030
+00000
+00000
+00000
+00000
+10000
+00000
+00000
+00000
+, // measure 77
+00100
+00000
+00000
+00100
+00000
+00000
+01000
+00000
+00020
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+, // measure 78
+00000
+00000
+00030
+00000
+00100
+00000
+00010
+00000
+02000
+03000
+00002
+00003
+20000
+30000
+00100
+02000
+, // measure 79
+00000
+00000
+00000
+00000
+03000
+00000
+00000
+00000
+00010
+00000
+00000
+00000
+00100
+00000
+00000
+00000
+00001
+00002
+00003
+00000
+10000
+20000
+30000
+00000
+00001
+00002
+00003
+00000
+10000
+20000
+30000
+00000
+, // measure 80
+00100
+01000
+10000
+01000
+00100
+01000
+10000
+01000
+, // measure 81
+00100
+10000
+00001
+10000
+00100
+10000
+00001
+10000
+, // measure 82
+00100
+00001
+00010
+10000
+00010
+00001
+00100
+10000
+, // measure 83
+00010
+00100
+01001
+00100
+10000
+01001
+10010
+00100
+, // measure 84
+00001
+00010
+00100
+00010
+00001
+00010
+00100
+00010
+, // measure 85
+00001
+10000
+00010
+10000
+00001
+10000
+00010
+10000
+, // measure 86
+00001
+01000
+10000
+01000
+00001
+01000
+10000
+00100
+, // measure 87
+00001
+00000
+00000
+00000
+10000
+00000
+00000
+00000
+01000
+00000
+00000
+00000
+00100
+00000
+00000
+00000
+00010
+00020
+00030
+00000
+01000
+02000
+03000
+00000
+00010
+00020
+00030
+00000
+01000
+02000
+03000
+00000
+, // measure 88
+00001
+00100
+00010
+02000
+00100
+00000
+03010
+00100
+, // measure 89
+00001
+10000
+00010
+01000
+00200
+00000
+10300
+00000
+, // measure 90
+00010
+10000
+00010
+01000
+00001
+00100
+00010
+01000
+, // measure 91
+00100
+10000
+00100
+10000
+00100
+00001
+00100
+00001
+, // measure 92
+00010
+00100
+01000
+10000
+00010
+00100
+00001
+00100
+, // measure 93
+00010
+01000
+00100
+01000
+10000
+00100
+00001
+00100
+, // measure 94
+00010
+01000
+00100
+10000
+00001
+00100
+00010
+01000
+, // measure 95
+00010
+00020
+00030
+00000
+01000
+02000
+03000
+00000
+00010
+00020
+00030
+00000
+01000
+02000
+03000
+00000
+00001
+00002
+00003
+00000
+10000
+20000
+30000
+00000
+00001
+00002
+00003
+00000
+10000
+20000
+30000
+00000
+, // measure 96
+20002
+00000
+00000
+00000
+, // measure 97
+00000
+00000
+00000
+00000
+00000
+30003
+00000
+00000
+;
+
+//---------------pump-single - Vin.il----------------
+#NOTEDATA:;
+#STEPSTYPE:pump-single;
+#DESCRIPTION:Vin.il;
+#CHARTSTYLE:Pad;
+#DIFFICULTY:Easy;
+#METER:7;
+#RADARVALUES:0.572,0.594,0.380,0.101,0.012,455.000,49.000,13.000,0.000,0.000,0.000,0.000,0.000,0.572,0.594,0.380,0.101,0.012,455.000,49.000,13.000,0.000,0.000,0.000,0.000,0.000;
+#CREDIT:Vin.il;
+#OFFSET:-0.125000;
+#BPMS:0.000000=181.699997
+,304.000000=90.850998
+,311.000000=181.701996
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=2
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+,380.000000=0.062500=0.062500=0
+,380.062500=1.000000=0.062500=0
+,380.500000=0.062500=0.062500=0
+,380.562500=1.000000=0.062500=0
+,381.000000=0.062500=0.062500=0
+,381.062500=1.000000=0.062500=0
+,381.250000=0.062500=0.062500=0
+,381.312500=1.000000=0.062500=0
+,381.750000=0.062500=0.062500=0
+,381.812500=1.000000=0.062500=0
+,382.500000=0.062500=0.062500=0
+,382.562500=1.000000=0.062500=0
+,383.000000=0.062500=0.062500=0
+,383.062500=1.000000=0.062500=0
+;
+#SCROLLS:0.000000=1.000000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+;
+#ATTACKS:
+;
+#NOTES:
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+,
+10000
+00000
+10100
+00000
+00000
+10000
+00001
+00000
+,
+00001
+00000
+00101
+00000
+00000
+00001
+01000
+00000
+,
+01000
+00000
+01100
+00000
+00000
+01000
+00010
+00000
+,
+00010
+00000
+00000
+00100
+00001
+01000
+00100
+00000
+,
+01000
+00000
+01100
+00000
+00000
+01000
+00010
+00000
+,
+00010
+00000
+00110
+00000
+00000
+00010
+10000
+00000
+,
+10000
+00000
+10100
+00000
+00000
+10000
+00001
+00000
+,
+00001
+00100
+00001
+00100
+00010
+10000
+00200
+00300
+,
+01000
+00000
+01001
+00000
+00001
+00000
+00100
+00001
+,
+10000
+00000
+00000
+00100
+01000
+00000
+00010
+00100
+,
+00001
+00000
+01001
+00000
+01000
+00000
+00100
+01000
+,
+00010
+00000
+00000
+00100
+00001
+00000
+10000
+00100
+,
+10000
+00000
+10010
+00000
+00010
+00000
+00100
+00001
+,
+00100
+00010
+00000
+01000
+00100
+00000
+10000
+00001
+,
+01000
+01001
+00001
+00100
+,
+00010
+00100
+00010
+00000
+10000
+00100
+10000
+00000
+,
+00001
+00000
+00101
+00000
+00001
+00100
+00010
+00000
+,
+01000
+00100
+00000
+00100
+10000
+00000
+00010
+00100
+,
+00010
+00000
+00110
+00000
+00010
+01000
+00100
+00000
+,
+10000
+00001
+00000
+00001
+00100
+00000
+00010
+01000
+,
+00010
+00000
+01010
+00000
+01000
+00100
+01000
+00000
+,
+00001
+10000
+00000
+10000
+00010
+00000
+00010
+01000
+,
+00001
+00000
+00101
+00000
+00001
+01000
+00100
+00000
+,
+10000
+00010
+10000
+00010
+01000
+00001
+00200
+00300
+,
+00001
+00000
+00001
+20000
+00000
+30000
+00000
+00100
+,
+10000
+00000
+00010
+00100
+00020
+00000
+00000
+00000
+,
+00030
+00000
+00100
+00000
+00001
+00100
+00001
+02000
+,
+03000
+00000
+00100
+00000
+01000
+00000
+00010
+00100
+,
+00010
+00000
+00010
+02000
+00000
+03000
+00000
+00100
+,
+01000
+00000
+00001
+00100
+00002
+00000
+00000
+00000
+,
+00003
+00000
+00100
+00000
+00010
+00100
+00010
+10000
+,
+00100
+00000
+01000
+00000
+00100
+10000
+00002
+00003
+,
+00100
+00000
+00001
+00000
+00100
+00000
+00010
+01000
+,
+00100
+00000
+10000
+00000
+00100
+00000
+01000
+00010
+,
+00100
+00001
+00000
+10000
+00000
+00100
+00000
+00100
+,
+01000
+00010
+00100
+00000
+00001
+00000
+01000
+00100
+,
+01000
+00000
+01000
+00000
+00100
+00000
+10000
+00001
+,
+00100
+00000
+00010
+00000
+00100
+00000
+00001
+10000
+,
+00100
+01000
+00000
+00010
+00000
+00100
+00000
+00100
+,
+00001
+10000
+00100
+10000
+00100
+00000
+01000
+00010
+,
+00100
+00000
+00101
+00000
+00001
+10000
+00100
+00000
+,
+10000
+00000
+10100
+00000
+10000
+00010
+00100
+00000
+,
+00010
+00000
+01010
+00000
+01000
+00100
+01000
+00001
+,
+00000
+00000
+00100
+00000
+00001
+00000
+10000
+00100
+,
+01000
+00000
+01100
+00000
+00100
+01000
+00010
+00000
+,
+00100
+00000
+00101
+00000
+00001
+01000
+00100
+00000
+,
+01000
+01010
+00010
+00100
+,
+00010
+00100
+00001
+00000
+01000
+00100
+20000
+30000
+,
+00010
+00110
+00010
+01010
+,
+01000
+01100
+01000
+01010
+,
+00001
+00101
+00001
+10001
+,
+10000
+10100
+10000
+10001
+,
+01000
+00000
+00010
+00100
+00001
+00000
+01000
+00000
+,
+00001
+00000
+10000
+00100
+01000
+00000
+00001
+00000
+,
+10000
+00000
+00001
+00100
+00010
+00000
+01000
+00000
+,
+00010
+00000
+01000
+00100
+10000
+00000
+00001
+00000
+,
+01000
+00000
+01010
+00000
+00010
+00100
+00001
+00000
+,
+10000
+00000
+10001
+00000
+00001
+00100
+00010
+00000
+,
+01000
+00000
+01100
+00000
+00100
+10000
+00010
+00000
+,
+10000
+00000
+10100
+00000
+00100
+01000
+00001
+00000
+,
+00100
+00001
+00100
+00000
+00001
+00000
+01000
+00000
+,
+00100
+10000
+00100
+00000
+10000
+00000
+00010
+00000
+,
+00100
+00010
+00100
+00000
+00010
+00000
+10000
+00000
+,
+00100
+01000
+00100
+00000
+01000
+00000
+00001
+00000
+,
+00100
+00000
+00101
+00000
+00001
+01000
+00100
+00000
+,
+00100
+10000
+00000
+00010
+00100
+00000
+00001
+00000
+,
+00100
+00000
+00110
+00000
+00010
+10000
+00100
+00000
+,
+00100
+01000
+00000
+00001
+00100
+00000
+00010
+00000
+,
+00100
+00000
+00110
+00000
+00010
+10000
+00100
+00000
+,
+00100
+01000
+00000
+00001
+00100
+00000
+00010
+00000
+,
+00100
+00000
+00101
+00000
+00001
+01000
+00100
+00000
+,
+00100
+10000
+00000
+00010
+00100
+00000
+00001
+00000
+,
+00100
+00000
+00001
+20000
+00000
+00000
+30000
+00000
+10000
+00000
+00000
+00001
+00200
+00000
+00000
+00000
+,
+00300
+00000
+00100
+00000
+00010
+01000
+00100
+00000
+10000
+00000
+00001
+00000
+00100
+00000
+00001
+00000
+,
+10000
+00100
+10001
+00000
+00001
+00000
+00100
+00001
+,
+01000
+00000
+00100
+00000
+10100
+00000
+10000
+00010
+,
+00100
+00000
+00001
+00100
+00001
+00000
+10000
+00000
+,
+10100
+00000
+00010
+00100
+00010
+00000
+01000
+00000
+,
+01100
+00000
+00010
+00000
+01000
+00000
+00100
+01000
+,
+00001
+00000
+00100
+00000
+00110
+00000
+00010
+10000
+,
+00100
+00000
+01000
+00100
+01000
+00000
+00010
+00000
+,
+00110
+00000
+10000
+00100
+10000
+00000
+00001
+00000
+,
+00101
+00000
+00001
+01000
+00001
+01000
+00000
+00000
+,
+00000
+01000
+00100
+00000
+00100
+10000
+00010
+00000
+,
+00110
+00100
+00101
+00001
+,
+10001
+00000
+10000
+00000
+00100
+10000
+00100
+00000
+,
+01000
+00000
+00001
+00100
+00001
+00000
+01000
+00000
+,
+00010
+00000
+10000
+00000
+10100
+00000
+00100
+10000
+,
+00001
+00100
+00010
+00000
+01010
+00000
+01000
+00000
+,
+00100
+00000
+10000
+00100
+10000
+00100
+01000
+00001
+,
+00100
+00010
+02020
+00000
+00000
+00000
+00000
+00000
+,
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+03030
+;
+
+//---------------pump-single - Vin.il - Another CZ----------------
+#NOTEDATA:;
+#STEPSTYPE:pump-single;
+#DESCRIPTION:Vin.il - Another CZ;
+#CHARTSTYLE:Pad - ACZ;
+#DIFFICULTY:Challenge;
+#METER:21;
+#RADARVALUES:1.000,1.000,0.620,0.488,1.000,1006.000,80.000,63.000,0.000,0.000,0.000,0.000,0.000,1.000,1.000,0.620,0.488,1.000,1006.000,80.000,63.000,0.000,0.000,0.000,0.000,0.000;
+#CREDIT:Vin.il;
+#OFFSET:-0.125000;
+#BPMS:0.000000=181.699997
+,44.000000=363.399994
+,47.000000=726.799988
+,48.000000=181.699997
+,300.000000=363.399994
+,304.000000=181.699997
+;
+#STOPS:;
+#DELAYS:44.500000=0.082554
+,45.000000=0.082554
+,45.500000=0.082554
+,46.000000=0.082554
+,46.250000=0.041277
+,46.500000=0.041277
+,46.750000=0.041277
+,47.000000=0.041277
+,48.000000=0.247661
+,300.500000=0.082558
+,301.000000=0.082558
+,301.500000=0.082558
+,302.000000=0.082558
+,302.250000=0.041275
+,302.500000=0.041275
+,302.750000=0.041275
+,303.000000=0.041275
+,303.250000=0.041275
+,303.500000=0.041275
+,303.750000=0.041275
+,304.000000=0.041275
+;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=4
+,384.000000=8
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+,174.750000=0.500000=0.500000=0
+,175.000000=1.000000=0.500000=0
+,175.250000=0.500000=0.250000=0
+,175.375000=1.000000=0.250000=0
+,175.500000=0.500000=0.250000=0
+,175.625000=1.000000=0.250000=0
+,175.750000=0.500000=0.250000=0
+,175.875000=1.000000=0.250000=0
+,304.000000=2.000000=14.000000=0
+,384.000000=1000.000000=6.500000=0
+;
+#SCROLLS:0.000000=1.000000
+,174.500000=0.000000
+,176.000000=1.000000
+,304.000000=0.250000
+,318.000000=0.500000
+,384.000000=0.001000
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+;
+#ATTACKS:;
+#NOTES:
+// measure 0
+00000
+00000
+00000
+00000
+, // measure 1
+00000
+00000
+00000
+00000
+, // measure 2
+00000
+00000
+00000
+00000
+, // measure 3
+00000
+00000
+00000
+00000
+, // measure 4
+10000
+00000
+00001
+00100
+00001
+00000
+01000
+00100
+01000
+00010
+00000
+00000
+01010
+00000
+01010
+00000
+, // measure 5
+10000
+00000
+00001
+00100
+00001
+00000
+01000
+00100
+01000
+00010
+00000
+00000
+01010
+00000
+01010
+00000
+, // measure 6
+00010
+00000
+01000
+00100
+01000
+00000
+00001
+00100
+00001
+10000
+00000
+00000
+10001
+00000
+10001
+00000
+, // measure 7
+00010
+00000
+01000
+00100
+01000
+00000
+00001
+00000
+00101
+00000
+00101
+00000
+20002
+00000
+30003
+00000
+, // measure 8
+00001
+00000
+01000
+00100
+01000
+00000
+00010
+00100
+00010
+10000
+00000
+00100
+10000
+00001
+00100
+00000
+, // measure 9
+00001
+00000
+01000
+00100
+01000
+00000
+00010
+00100
+00010
+10000
+00000
+00100
+10000
+00001
+00100
+00000
+, // measure 10
+00010
+00000
+10000
+00100
+10000
+00000
+00001
+00100
+00001
+01000
+00000
+00100
+01000
+00010
+00100
+00000
+, // measure 11
+00010
+00000
+00100
+00000
+00010
+00000
+10000
+00000
+00010
+01000
+00100
+10000
+00002
+00000
+00003
+00000
+, // measure 12
+00001
+00000
+00010
+00100
+01000
+00000
+00001
+00000
+01000
+00100
+00010
+00100
+01000
+00000
+00001
+00000
+, // measure 13
+10000
+00000
+00100
+00000
+00000
+00000
+10000
+00100
+00010
+00000
+00001
+00000
+00010
+00000
+00010
+00000
+, // measure 14
+00001
+00000
+10000
+00000
+10000
+00000
+01000
+00100
+00010
+00000
+10000
+00000
+00010
+00100
+01000
+00100
+, // measure 15
+00010
+00000
+10000
+00000
+00000
+00000
+00001
+00100
+01000
+00000
+10000
+00000
+01000
+00100
+00010
+00100
+, // measure 16
+00001
+00000
+00010
+00100
+00010
+00000
+00001
+00000
+10000
+01000
+00100
+01000
+10000
+00100
+01000
+00010
+, // measure 17
+00100
+00000
+00001
+00000
+00000
+00000
+00010
+00001
+00100
+00000
+01000
+00000
+10000
+00000
+00100
+00000
+, // measure 18
+10000
+00000
+01000
+00100
+01000
+00000
+10000
+00000
+00001
+00010
+00100
+00010
+00001
+00100
+00010
+01000
+, // measure 19
+00100
+10000
+00010
+00000
+00110
+01001
+00110
+10001
+, // measure 20
+00100
+00000
+10000
+00100
+10000
+00000
+00010
+00100
+00010
+00100
+00001
+00010
+00100
+00000
+01000
+00000
+, // measure 21
+00010
+00000
+00100
+00000
+01000
+00000
+10000
+01000
+00100
+00000
+00010
+00000
+01000
+00000
+00001
+00000
+, // measure 22
+00100
+00000
+00010
+00100
+00010
+00000
+10000
+00100
+10000
+00100
+01000
+10000
+00100
+00000
+00001
+00000
+, // measure 23
+10000
+00000
+00100
+00000
+00000
+00000
+01000
+00100
+00010
+00100
+01000
+00010
+00100
+00000
+00001
+00000
+, // measure 24
+10000
+00000
+00010
+00100
+00001
+00000
+01000
+00100
+10000
+00010
+01000
+00001
+00100
+00000
+00010
+00000
+, // measure 25
+01000
+00000
+00100
+00000
+00000
+00000
+10000
+00100
+00001
+00000
+00010
+00000
+00100
+00000
+00100
+00000
+, // measure 26
+00010
+10000
+10100
+00001
+00100
+00010
+01000
+00100
+, // measure 27
+10000
+00001
+10000
+00001
+10000
+00001
+10000
+00001
+01000
+00010
+01000
+00010
+10000
+00000
+00001
+00000
+, // measure 28
+10001
+00000
+00001
+00000
+00101
+00000
+00100
+00000
+00010
+00000
+01000
+00000
+01100
+00000
+00100
+10000
+, // measure 29
+00001
+00000
+01000
+00000
+01001
+00000
+00001
+00000
+10000
+00000
+00010
+00000
+10010
+00000
+00010
+10000
+, // measure 30
+00010
+00100
+00010
+00000
+00110
+00000
+00010
+00000
+01000
+00100
+10000
+00001
+01000
+00010
+00100
+00001
+, // measure 31
+20000
+00000
+30001
+10001
+00101
+00001
+10100
+10000
+, // measure 32
+01010
+00000
+01000
+00000
+01100
+00000
+00100
+00000
+10000
+00000
+00001
+00000
+00101
+00000
+00100
+00010
+, // measure 33
+01000
+00000
+00001
+00000
+01001
+00000
+01000
+00000
+00010
+00000
+10000
+00000
+10010
+00000
+10000
+00010
+, // measure 34
+10000
+00100
+10000
+00000
+10100
+00000
+10000
+00000
+00001
+00100
+00010
+01000
+00001
+10000
+00100
+01000
+, // measure 35
+00010
+00100
+00010
+00100
+00010
+00100
+00010
+00100
+00010
+10000
+00100
+10000
+00010
+00100
+00010
+01000
+, // measure 36
+00002
+00003
+00200
+00000
+00000
+00300
+00020
+00000
+00000
+00030
+02000
+03000
+00020
+00030
+00002
+00003
+, // measure 37
+00200
+00300
+20000
+00000
+00100
+00000
+00000
+30000
+00002
+00000
+00000
+00000
+00100
+00000
+00000
+00003
+, // measure 38
+20000
+30000
+00200
+00000
+00000
+00300
+00020
+00000
+00000
+00030
+00200
+00000
+00000
+00300
+00010
+00000
+, // measure 39
+00001
+00100
+00010
+00001
+00100
+10000
+00100
+01000
+10000
+00100
+00001
+10000
+00010
+01000
+00100
+10000
+, // measure 40
+00020
+00030
+00200
+00000
+00000
+00300
+00002
+00000
+00000
+00003
+20000
+30000
+00002
+00003
+00020
+00030
+, // measure 41
+00200
+00300
+02000
+00000
+00100
+00000
+00000
+03000
+00020
+00000
+00000
+00000
+00100
+00000
+00000
+00030
+, // measure 42
+02000
+03000
+00200
+00000
+00000
+00300
+20000
+00000
+00000
+30000
+00002
+00000
+00000
+00003
+00100
+00000
+, // measure 43
+00010
+00100
+00001
+00010
+00100
+01000
+00100
+10000
+00010
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+, // measure 44
+01010
+00000
+00010
+00000
+00110
+00000
+01000
+00000
+00100
+00000
+10000
+00000
+10001
+00000
+00001
+10000
+, // measure 45
+00100
+00000
+01000
+00010
+00100
+00001
+10000
+00000
+10010
+00000
+10000
+00000
+00101
+00000
+00001
+01000
+, // measure 46
+00001
+00100
+00001
+00000
+10100
+00000
+00001
+00000
+00010
+00100
+01000
+00010
+00100
+01000
+10000
+00001
+, // measure 47
+00100
+00010
+01000
+00100
+10000
+00010
+00100
+01000
+00100
+00010
+01000
+00100
+00010
+00001
+00100
+00010
+, // measure 48
+10000
+00000
+10000
+00000
+10100
+00000
+00001
+00000
+00100
+00000
+00010
+00000
+01010
+00000
+01000
+00010
+, // measure 49
+00100
+00000
+00001
+00100
+00010
+01000
+00100
+00000
+10010
+00000
+00010
+00000
+01100
+00000
+01000
+00001
+, // measure 50
+01000
+00100
+01000
+00000
+00110
+00000
+01000
+00000
+10000
+00100
+00001
+10000
+00100
+00001
+00010
+01000
+, // measure 51
+00100
+10000
+00001
+00100
+00010
+10000
+00100
+00001
+00100
+10000
+00001
+00100
+10000
+01000
+00100
+10000
+, // measure 52
+00001
+00000
+00100
+00000
+01001
+00000
+10000
+00000
+00001
+00000
+00100
+00000
+01001
+00000
+10000
+00010
+, // measure 53
+01000
+00000
+00100
+00000
+01001
+00000
+00010
+00000
+01000
+00000
+00100
+00000
+01001
+00000
+00001
+01000
+, // measure 54
+00010
+00000
+00100
+00000
+10010
+00000
+01000
+00000
+00010
+00000
+00100
+00000
+10010
+00000
+01000
+00001
+, // measure 55
+10000
+00000
+00100
+00000
+10010
+00000
+00001
+00000
+10000
+00000
+00100
+00000
+10010
+00000
+00010
+10000
+, // measure 56
+00001
+00000
+00100
+00000
+01001
+00000
+10000
+00000
+00001
+00000
+00100
+00000
+01001
+00000
+10000
+00010
+, // measure 57
+01000
+00000
+00100
+00000
+01001
+00000
+00010
+00000
+01000
+00000
+00100
+00000
+01001
+00000
+00001
+01000
+, // measure 58
+00010
+00000
+00100
+00000
+10010
+00000
+01000
+00000
+00010
+00000
+00100
+00000
+10010
+00000
+01000
+00001
+, // measure 59
+10000
+00000
+00100
+00000
+10010
+00000
+00001
+00000
+10000
+00000
+00100
+00000
+10010
+00000
+00010
+10000
+, // measure 60
+00001
+00000
+00100
+00001
+00100
+00010
+01000
+00100
+01000
+00010
+00100
+00001
+00100
+00010
+01000
+00100
+, // measure 61
+01000
+00010
+10000
+00100
+10000
+00010
+00100
+00001
+01000
+00100
+10000
+00100
+10000
+00010
+00100
+00001
+, // measure 62
+01000
+00100
+00010
+00001
+01000
+00100
+00010
+00001
+10000
+01000
+00100
+00010
+10000
+01000
+00100
+00010
+, // measure 63
+00200
+00300
+00002
+00003
+02000
+03000
+00002
+00003
+00200
+00300
+00002
+00003
+02000
+03000
+00020
+00030
+, // measure 64
+10000
+00000
+00100
+01000
+00100
+10000
+00001
+00100
+00001
+10000
+00100
+01000
+00100
+10000
+00001
+00100
+, // measure 65
+00001
+10000
+00010
+00100
+00010
+10000
+00100
+01000
+00001
+00100
+00010
+00100
+00010
+10000
+00100
+01000
+, // measure 66
+00001
+00100
+10000
+01000
+00001
+00100
+10000
+01000
+00010
+00001
+00100
+10000
+00010
+00001
+00100
+10000
+, // measure 67
+00200
+00300
+02000
+03000
+00002
+00003
+02000
+03000
+00200
+00300
+02000
+03000
+00002
+00003
+20000
+30000
+, // measure 68
+00010
+00100
+00100
+00010
+00110
+01000
+00100
+10000
+, // measure 69
+00001
+00000
+00100
+00000
+00100
+00000
+00010
+00100
+01000
+00000
+01000
+00100
+00010
+00000
+01000
+00000
+, // measure 70
+01000
+00000
+00100
+01000
+00100
+00000
+01000
+00000
+01100
+00000
+00100
+10000
+00100
+00000
+01000
+00000
+, // measure 71
+00010
+00000
+00100
+00000
+00110
+00000
+01000
+00100
+10000
+00000
+00001
+10000
+00100
+01000
+00100
+10000
+, // measure 72
+00001
+00010
+00110
+00100
+01000
+00100
+10100
+10000
+, // measure 73
+00001
+00000
+00100
+00000
+00101
+00000
+00100
+00010
+00100
+00010
+01000
+00100
+10000
+00100
+01000
+00001
+, // measure 74
+10000
+01000
+01100
+00100
+00010
+00100
+00101
+00001
+, // measure 75
+10001
+00000
+10001
+00000
+10001
+00000
+10001
+00000
+00001
+10000
+00001
+10000
+00010
+01000
+00010
+01000
+, // measure 76
+00200
+00300
+20000
+30000
+00200
+00300
+00020
+00000
+00000
+00000
+00000
+00000
+00000
+00030
+00100
+01000
+, // measure 77
+00002
+00000
+00003
+00200
+00000
+00300
+00020
+00030
+02000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+, // measure 78
+00000
+00000
+00000
+03000
+00200
+00300
+02000
+03000
+00010
+01000
+00100
+10000
+01000
+10000
+00100
+02000
+, // measure 79
+00000
+00000
+00000
+03000
+00020
+00030
+00200
+00300
+00001
+10000
+00100
+00001
+00010
+00100
+01000
+10000
+, // measure 80
+00001
+00100
+00001
+00100
+00001
+01000
+00010
+00100
+00010
+00000
+10000
+00000
+10100
+00000
+00010
+10000
+, // measure 81
+00100
+00000
+01000
+00010
+00100
+00010
+00001
+00100
+10000
+00000
+00001
+00000
+00101
+00000
+01000
+00000
+, // measure 82
+00010
+00000
+00200
+00300
+01000
+00000
+00200
+00300
+00010
+01000
+00100
+10000
+00010
+00100
+01000
+10000
+, // measure 83
+00001
+00100
+00001
+00100
+00001
+00000
+10001
+00000
+00101
+00000
+00110
+00000
+01100
+00000
+10100
+00000
+, // measure 84
+10001
+00000
+00001
+00100
+00001
+10000
+00100
+01000
+00010
+00000
+00100
+00010
+00100
+00000
+00001
+00100
+, // measure 85
+00001
+00000
+10000
+00100
+10000
+00000
+00100
+00000
+01000
+00000
+00010
+00100
+00010
+00100
+00001
+10000
+, // measure 86
+00100
+01000
+00010
+00000
+00100
+00010
+01000
+00000
+00100
+01000
+00010
+00100
+00001
+00010
+00100
+01000
+, // measure 87
+00010
+00100
+00001
+10000
+00100
+01000
+00010
+00100
+00001
+10000
+00010
+01000
+00001
+10000
+00100
+01000
+, // measure 88
+00010
+00100
+00010
+00100
+00001
+00010
+00100
+01000
+00010
+00100
+00010
+01000
+00100
+01000
+00100
+00010
+, // measure 89
+00100
+01000
+00010
+00100
+00001
+10000
+00100
+01000
+00010
+00100
+00001
+00010
+00100
+01000
+00010
+00100
+, // measure 90
+01000
+00100
+00010
+01000
+00100
+10000
+00001
+00100
+10000
+01000
+00010
+00100
+00001
+10000
+00100
+00001
+, // measure 91
+00100
+10000
+00001
+00010
+00100
+01000
+10000
+01000
+00100
+00000
+10100
+00000
+10001
+00000
+00101
+00000
+, // measure 92
+10000
+00001
+00100
+00010
+00001
+00100
+10000
+00001
+00100
+10000
+01000
+00100
+10000
+00010
+00100
+00001
+, // measure 93
+00100
+00010
+01000
+00100
+10000
+00100
+01000
+00100
+10000
+00010
+00100
+00001
+00100
+00010
+00001
+00010
+, // measure 94
+00100
+01000
+00001
+00100
+10000
+00010
+01000
+00100
+01000
+00010
+00100
+00001
+10000
+00100
+01000
+00010
+, // measure 95
+10000
+00000
+00001
+00000
+10000
+00000
+00001
+00000
+01000
+00000
+00010
+00000
+01000
+00000
+00010
+00000
+00100
+00000
+00001
+00000
+00100
+00000
+00001
+00000
+10000
+00010
+00000
+00000
+00000
+00000
+00000
+00000
+, // measure 96
+02020
+00000
+00000
+00000
+, // measure 97
+00000
+00000
+00000
+00000
+00000
+03030
+00000
+00000
+;
+
+//---------------pump-single - Vin.il----------------
+#NOTEDATA:;
+#STEPSTYPE:pump-single;
+#DESCRIPTION:Vin.il;
+#CHARTSTYLE:Pad;
+#DIFFICULTY:Hard;
+#METER:16;
+#RADARVALUES:1.000,1.000,0.473,0.395,0.612,829.000,61.000,51.000,0.000,0.000,0.000,0.000,0.000,1.000,1.000,0.473,0.395,0.612,829.000,61.000,51.000,0.000,0.000,0.000,0.000,0.000;
+#CREDIT:Vin.il;
+#OFFSET:-0.125000;
+#BPMS:0.000000=181.699997
+;
+#STOPS:;
+#DELAYS:;
+#WARPS:;
+#TIMESIGNATURES:0.000000=4=4
+;
+#TICKCOUNTS:0.000000=4
+,384.000000=8
+;
+#COMBOS:0.000000=1
+;
+#SPEEDS:0.000000=1.000000=0.000000=0
+,46.979168=0.000000=0.000000=0
+,47.000000=1.000000=1.000000=0
+;
+#SCROLLS:0.000000=1.000000
+,304.000000=0.500000
+,318.000000=1.000000
+,384.000000=0.062500
+;
+#FAKES:;
+#LABELS:0.000000=Song Start
+;
+#ATTACKS:
+;
+#NOTES:
+// measure 0
+00000
+00000
+00000
+00000
+, // measure 1
+00000
+00000
+00000
+00000
+, // measure 2
+00000
+00000
+00000
+00000
+, // measure 3
+00000
+00000
+00000
+00000
+, // measure 4
+10000
+00100
+10100
+00000
+00001
+00100
+00010
+01000
+, // measure 5
+00001
+00100
+00101
+00000
+10000
+00100
+01000
+00010
+, // measure 6
+01000
+00100
+01100
+00000
+00010
+00100
+00001
+10000
+, // measure 7
+00010
+00100
+00000
+00100
+00010
+01000
+00200
+00300
+, // measure 8
+10000
+00001
+00101
+00000
+00001
+00100
+00010
+00100
+, // measure 9
+00001
+10000
+10100
+00000
+10000
+00100
+01000
+00100
+, // measure 10
+01000
+00010
+00110
+00000
+00010
+00100
+00001
+00100
+, // measure 11
+00110
+00000
+00010
+00000
+01010
+00000
+01000
+00000
+00100
+10000
+00100
+10000
+00002
+00000
+00003
+00000
+, // measure 12
+00001
+00100
+00001
+10000
+00000
+00100
+10000
+00010
+, // measure 13
+00100
+00000
+00001
+00000
+00000
+00000
+00001
+00100
+00001
+00000
+01000
+00000
+00010
+00000
+00100
+00000
+, // measure 14
+00010
+00100
+00010
+10000
+00000
+00100
+01000
+00001
+, // measure 15
+00100
+00010
+00000
+00010
+10000
+00100
+10000
+00000
+, // measure 16
+00001
+00100
+00001
+10000
+00100
+01000
+00010
+00100
+, // measure 17
+00001
+00000
+10000
+00000
+00000
+00000
+00100
+01000
+00100
+00000
+01000
+00000
+00001
+00000
+00100
+00000
+, // measure 18
+00010
+00100
+00010
+01000
+00100
+10000
+00001
+00100
+, // measure 19
+00010
+00000
+01000
+00000
+00100
+00000
+00010
+00000
+00001
+00100
+00001
+00000
+10000
+00100
+10000
+00000
+, // measure 20
+00010
+00000
+00100
+00010
+00100
+00000
+00001
+00000
+00100
+00000
+00001
+00000
+10000
+00000
+00100
+00000
+, // measure 21
+01000
+00000
+00010
+00000
+00000
+00000
+00100
+00000
+00001
+00000
+10000
+00000
+00100
+01000
+00100
+01000
+, // measure 22
+00001
+00000
+00100
+00001
+00100
+00000
+00010
+00000
+00100
+00000
+00010
+00000
+01000
+00000
+00100
+00000
+, // measure 23
+10000
+00000
+00001
+00000
+00000
+00000
+00100
+00000
+00010
+00000
+01000
+00000
+00100
+10000
+00100
+10000
+, // measure 24
+00001
+00000
+00100
+00001
+00100
+00000
+00010
+00000
+01000
+00000
+00100
+10000
+00100
+00000
+10000
+00000
+, // measure 25
+00001
+00000
+00100
+00000
+00000
+00000
+00010
+00100
+00010
+00000
+01000
+00000
+00100
+00000
+00100
+00000
+, // measure 26
+10000
+00000
+00100
+10000
+00100
+00000
+01000
+00000
+00010
+00000
+00100
+00001
+00100
+00000
+00010
+00000
+, // measure 27
+01000
+00100
+01000
+00000
+00010
+00100
+00010
+00000
+10000
+00001
+10000
+00001
+10000
+00000
+00000
+00000
+, // measure 28
+00100
+00000
+10000
+00000
+00100
+00000
+01000
+00000
+00001
+00000
+00100
+00000
+00010
+00000
+01000
+00100
+, // measure 29
+01000
+00000
+00000
+00100
+10000
+00000
+00001
+00000
+00100
+00000
+00001
+00000
+01000
+00010
+01000
+00010
+, // measure 30
+01000
+00000
+00100
+00000
+10000
+00100
+10000
+00000
+00010
+00100
+00001
+10000
+00010
+00000
+01000
+00000
+, // measure 31
+00100
+10000
+00010
+01000
+00001
+00001
+10000
+10000
+, // measure 32
+10001
+00000
+00001
+00100
+00010
+00000
+01000
+00000
+00100
+00000
+10000
+00000
+00001
+00000
+00100
+00010
+, // measure 33
+01000
+00000
+00000
+00100
+01000
+00000
+00010
+00000
+00100
+00000
+00001
+00000
+10000
+00010
+10000
+00010
+, // measure 34
+10000
+00000
+00000
+00000
+00100
+00000
+01000
+00000
+00001
+00100
+00001
+00100
+00001
+00000
+10000
+00000
+, // measure 35
+00100
+01000
+00010
+00000
+00100
+00010
+01000
+00000
+00100
+10000
+00100
+10000
+00001
+00100
+00001
+00100
+, // measure 36
+00010
+00100
+00010
+02000
+03000
+00100
+01000
+10000
+, // measure 37
+01000
+00100
+10000
+00001
+00100
+00001
+01001
+00000
+, // measure 38
+10010
+20000
+30000
+00002
+00003
+00200
+00300
+00100
+, // measure 39
+00010
+01000
+00010
+01000
+00100
+00000
+10000
+00000
+00001
+00000
+00100
+00000
+00010
+01000
+00010
+01000
+, // measure 40
+00001
+00100
+00001
+20000
+30000
+00100
+10000
+01000
+, // measure 41
+10000
+00100
+01000
+00010
+00100
+00010
+10010
+00000
+, // measure 42
+01001
+02000
+03000
+00020
+00030
+00200
+00300
+00100
+, // measure 43
+00001
+10000
+00001
+10000
+00010
+01000
+00010
+01000
+00100
+00000
+00000
+10000
+00000
+00100
+00000
+01000
+, // measure 44
+00001
+00000
+00100
+00000
+00001
+00000
+01001
+00000
+01000
+00000
+00010
+00000
+01010
+00000
+00010
+01000
+, // measure 45
+00100
+00000
+00000
+10000
+00100
+00000
+00100
+00000
+01001
+00000
+00001
+00000
+00100
+00010
+00100
+00010
+, // measure 46
+01000
+00000
+00000
+00000
+00100
+00000
+10000
+00000
+01000
+00100
+01000
+00100
+00010
+00000
+00100
+00000
+, // measure 47
+00001
+00001
+01001
+01000
+01010
+00010
+00110
+00100
+, // measure 48
+10001
+00000
+00001
+00100
+00001
+00000
+10000
+00000
+10010
+00000
+10000
+00100
+10000
+00000
+00001
+00100
+, // measure 49
+00001
+00000
+00000
+00100
+00010
+00000
+01000
+00000
+01010
+00000
+01000
+00000
+00100
+10000
+00100
+10000
+, // measure 50
+00001
+00000
+00000
+00000
+00100
+00000
+00001
+00000
+01000
+00010
+00100
+00000
+00001
+00000
+10000
+00000
+, // measure 51
+00010
+00100
+00010
+00100
+00010
+00100
+00010
+00000
+01000
+00100
+01000
+00100
+01000
+00100
+01000
+00000
+, // measure 52
+01010
+00010
+00110
+00010
+10010
+00010
+01010
+00010
+, // measure 53
+01010
+01000
+01100
+01000
+01001
+01000
+01010
+01000
+, // measure 54
+10001
+10000
+10100
+10000
+10010
+10000
+10001
+10000
+, // measure 55
+10001
+00001
+00101
+00001
+01001
+00001
+10001
+00001
+, // measure 56
+01001
+00000
+00001
+01000
+00001
+00000
+10000
+00000
+00001
+00000
+10000
+00010
+10000
+00000
+00010
+00000
+, // measure 57
+01000
+00000
+00001
+00100
+00001
+00000
+01000
+00000
+00010
+00000
+10000
+00100
+10000
+00000
+00010
+00000
+, // measure 58
+00100
+00000
+00001
+01000
+00100
+00000
+10000
+00000
+00010
+00000
+10000
+00010
+00100
+00000
+00001
+00000
+, // measure 59
+02000
+03000
+00002
+00003
+00200
+00300
+00002
+00003
+02000
+03000
+00200
+00300
+20000
+30000
+00020
+00030
+, // measure 60
+10000
+00000
+00100
+01000
+00100
+01000
+00100
+01000
+00100
+00000
+10000
+00001
+10000
+00001
+10000
+00001
+, // measure 61
+10000
+00000
+00010
+00100
+00010
+00100
+00010
+00100
+00010
+00000
+01000
+00001
+01000
+00001
+01000
+00001
+, // measure 62
+01000
+00000
+00010
+10000
+00010
+10000
+00010
+10000
+00010
+00000
+01000
+00010
+01000
+00010
+01000
+00010
+, // measure 63
+02000
+03000
+00002
+00003
+00200
+00300
+00020
+00030
+20000
+30000
+00200
+00300
+02000
+03000
+00002
+00003
+, // measure 64
+01000
+00000
+00100
+10000
+00100
+10000
+00100
+10000
+00100
+00000
+01000
+00010
+01000
+00010
+01000
+00010
+, // measure 65
+01000
+00000
+00001
+00100
+00001
+00100
+00001
+00100
+00001
+00000
+10000
+00010
+10000
+00010
+10000
+00010
+, // measure 66
+10000
+00000
+00001
+01000
+00001
+01000
+00001
+01000
+00001
+00000
+10000
+00001
+10000
+00001
+10000
+00001
+, // measure 67
+20000
+30000
+00020
+00030
+00200
+00300
+00002
+00003
+02000
+03000
+00200
+00300
+20000
+30000
+00020
+00030
+, // measure 68
+01000
+00000
+00100
+00000
+01100
+00000
+00100
+01000
+00001
+00000
+00100
+00000
+00001
+00000
+10000
+00000
+, // measure 69
+00100
+00000
+01000
+00000
+01000
+00000
+00010
+00100
+00001
+00000
+01000
+00000
+00100
+00000
+00100
+00000
+, // measure 70
+10000
+00000
+00100
+00000
+10100
+00000
+00100
+10000
+00010
+00000
+00100
+00000
+00001
+00000
+01000
+00000
+, // measure 71
+00001
+00000
+00100
+00000
+00100
+00000
+00010
+01000
+00100
+00000
+10000
+00000
+00001
+00000
+00001
+00000
+, // measure 72
+00100
+00000
+00010
+00000
+00110
+00000
+00010
+00100
+00001
+00000
+01000
+00000
+00100
+00000
+10000
+00000
+, // measure 73
+00100
+00000
+01000
+00000
+01000
+00000
+00010
+00100
+00001
+00000
+01000
+00100
+10000
+00000
+10000
+00000
+, // measure 74
+00010
+00000
+00100
+00000
+00101
+00000
+00001
+01000
+00100
+00000
+10000
+00000
+00100
+00000
+01000
+00000
+, // measure 75
+00010
+00000
+00110
+00000
+00100
+00000
+00110
+00000
+00010
+01000
+00100
+01000
+00010
+00100
+00010
+01000
+, // measure 76
+00100
+00000
+10000
+00000
+00100
+00000
+02000
+00000
+00000
+00000
+00000
+00000
+00000
+03000
+00000
+00001
+, // measure 77
+00100
+00000
+00000
+00100
+00000
+00000
+00010
+00000
+02000
+00000
+00000
+00000
+00000
+00000
+00000
+00000
+, // measure 78
+00000
+00000
+03000
+00000
+00100
+00000
+01000
+00000
+00010
+00100
+00010
+00100
+00001
+01000
+00100
+20000
+, // measure 79
+00000
+00000
+30000
+00000
+00010
+00000
+00100
+00000
+00001
+00100
+00001
+00100
+00010
+10000
+00010
+10000
+, // measure 80
+00100
+00000
+01000
+00000
+01001
+00000
+00001
+00000
+00100
+00000
+00010
+00000
+10010
+00000
+10000
+00100
+, // measure 81
+10000
+00000
+00001
+00100
+00001
+00000
+01000
+00000
+00020
+00000
+00000
+00030
+00100
+00000
+00000
+00000
+, // measure 82
+00002
+00000
+00000
+00003
+00100
+00000
+00010
+00000
+01000
+00100
+10000
+00000
+00010
+00000
+00200
+00000
+, // measure 83
+00000
+00300
+00001
+00001
+10100
+10000
+00101
+00001
+, // measure 84
+00100
+00000
+00001
+00000
+01001
+00000
+01000
+00000
+00100
+00000
+10000
+00000
+10010
+00000
+00010
+00100
+, // measure 85
+00010
+00000
+01000
+00100
+01000
+00000
+00001
+00000
+20000
+00000
+00000
+30000
+00100
+00000
+00000
+00000
+, // measure 86
+02000
+00000
+00000
+03000
+00100
+00000
+10000
+00000
+00001
+00100
+00010
+00000
+10000
+00000
+00100
+00000
+, // measure 87
+02000
+00000
+03000
+00000
+00010
+00000
+00100
+00000
+00010
+00000
+00000
+01001
+00000
+01000
+00001
+01000
+, // measure 88
+00001
+00000
+00100
+00010
+00100
+00000
+00001
+00000
+10000
+00000
+00100
+01000
+00100
+00000
+01000
+00000
+, // measure 89
+00010
+00000
+00100
+00001
+00100
+00000
+00010
+00000
+01000
+00000
+00100
+10000
+00100
+00000
+01000
+00000
+, // measure 90
+00002
+00100
+00000
+00100
+20003
+00100
+30020
+00100
+, // measure 91
+02030
+00100
+00000
+00100
+03020
+00100
+20030
+00100
+, // measure 92
+30001
+00001
+00101
+00100
+00110
+00010
+01010
+01000
+, // measure 93
+01100
+00100
+10100
+10000
+10010
+00010
+01010
+01000
+, // measure 94
+01001
+00000
+00001
+01000
+00001
+00000
+10000
+00010
+10000
+00000
+00010
+01000
+00010
+00000
+10000
+00001
+, // measure 95
+10000
+00010
+10000
+00010
+10000
+00010
+10000
+00010
+01000
+00001
+01000
+00001
+00100
+00000
+00000
+00000
+, // measure 96
+20002
+00000
+00000
+00000
+, // measure 97
+00000
+00000
+00000
+00000
+00000
+30003
+00000
+00000
+;
diff --git a/Songs/StepMania 5/Springtime/spring.png b/Songs/StepMania 5/Springtime/spring.png
new file mode 100644
index 0000000000..e8461064cf
Binary files /dev/null and b/Songs/StepMania 5/Springtime/spring.png differ
diff --git a/Songs/StepMania 5/Springtime/springbn.png b/Songs/StepMania 5/Springtime/springbn.png
new file mode 100644
index 0000000000..bcdf81d128
Binary files /dev/null and b/Songs/StepMania 5/Springtime/springbn.png differ
diff --git a/Songs/instructions.txt b/Songs/instructions.txt
new file mode 100644
index 0000000000..e9236b0028
--- /dev/null
+++ b/Songs/instructions.txt
@@ -0,0 +1,8 @@
+[How to Install Songs]
+
+Songs are laid out based on the group that they are in.
+
+Songs\ : root folder
+ StepMania 5\ : group folder
+ MechaTribe Assault\ : song/simfile folder
+ *.png, *.mp3/*.ogg, *.sm/*.ssc/etc files
\ No newline at end of file
diff --git a/Themes/_fallback/BGAnimations/ScreenCredits overlay.lua b/Themes/_fallback/BGAnimations/ScreenCredits overlay.lua
index 94591c70b1..e1a275011b 100644
--- a/Themes/_fallback/BGAnimations/ScreenCredits overlay.lua
+++ b/Themes/_fallback/BGAnimations/ScreenCredits overlay.lua
@@ -25,7 +25,8 @@ local ssc = {
}
local sm_ssc = {
- "Jason Felds (wolfman2000)",
+ "Jason Felds (wolfman2000)", -- Timing Segments, Split Timing, optimization
+ "Thai Pangsakulyanont (theDtTvB)", -- BMS, Split Timing, optimization
"Alberto Ramos (Daisuke Master)",
"Jack Walstrom (FSX)",
}
@@ -39,9 +40,10 @@ local stepmania = {
local contrib = {
"Aldo Fregoso (Aldo_MX)", -- delays
- "Chris Eldridge (kurisu)", -- dance-threepanel
"cerbo",
"cesarmades", -- pump/cmd* noteskins
+ "Chris Eldridge (kurisu)", -- dance-threepanel
+ "Christophe Goulet-LeBlanc (Kommisar)",
"corec", -- various fixes
"galopin", -- piu PlayStation2 usb mat support
"gholms", -- automake 1.11 support
@@ -49,8 +51,8 @@ local contrib = {
"Kaox", -- pump/default noteskin
"NitroX72", -- pump/frame noteskin
"sy567", -- beginner helper fix
- "Thai Pangsakulyanont (theDtTvB)",
"v1toko", -- x-mode from StepNXA
+ "waiei", -- custom scoring fixes + Hybrid scoring
}
local thanks = {
@@ -70,10 +72,11 @@ local thanks = {
local shoutout = {
"The Lua team", -- lua project lead or some shit. super nerdy but oh hell.
- "Mojang", -- minecraft forever -freem
+ "Mojang AB", -- minecraft forever -freem
"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",
"You showed us... your ultimate dance",
-- "Can't stop crying... buckets of tears!"
}
diff --git a/Themes/_fallback/BGAnimations/ScreenGameplay background.lua b/Themes/_fallback/BGAnimations/ScreenGameplay background.lua
new file mode 100644
index 0000000000..989e15f73d
--- /dev/null
+++ b/Themes/_fallback/BGAnimations/ScreenGameplay background.lua
@@ -0,0 +1 @@
+return Def.ActorFrame { Name="YOU_WISH_YOU_WERE_PLAYING_BEATMANIA_RIGHT_NOW" };
\ No newline at end of file
diff --git a/Themes/_fallback/BGAnimations/ScreenGameplay background.redir b/Themes/_fallback/BGAnimations/ScreenGameplay background.redir
deleted file mode 100644
index 04b2ead777..0000000000
--- a/Themes/_fallback/BGAnimations/ScreenGameplay background.redir
+++ /dev/null
@@ -1 +0,0 @@
-_blank
\ No newline at end of file
diff --git a/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/default.lua b/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/default.lua
new file mode 100644
index 0000000000..66e7d7daa7
--- /dev/null
+++ b/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/default.lua
@@ -0,0 +1,289 @@
+function MakeScoreList(StagesAgo)
+ local c;
+ local Stats;
+ local PlayerStats = { }
+ local children = {
+ LoadActor( "difficulty cap 9x1" ) .. {
+ Name="DifficultyP1";
+ InitCommand = cmd(x,-66;pause;halign,1);
+ OnCommand=cmd(zoomx,0;sleep,0.3;bounceend,0.3;zoomx,1);
+ OffCommand=cmd(bouncebegin,0.1;zoomx,0);
+ };
+ LoadActor( "difficulty cap 9x1" ) .. {
+ Name="DifficultyP2";
+ InitCommand = cmd(x,66;pause;halign,1;zoomx,0);
+ OnCommand=cmd(zoomx,0;sleep,0.3;bounceend,0.3;zoomx,-1);
+ OffCommand=cmd(bouncebegin,0.1;zoomx,0);
+ };
+ LoadActor( "banner mask" ) .. {
+ Name="BannerMask";
+ InitCommand=cmd(clearzbuffer,true;zwrite,true;blend,"BlendMode_NoEffect");
+ OnCommand=cmd(zoom,0;bounceend,0.3;zoom,1);
+ OffCommand=cmd(bouncebegin,0.3;zoom,0);
+ };
+ Def.Sprite {
+ Name = "Banner";
+ InitCommand = cmd(setsize,300,100;zoom,0.5;ztest,true);
+ OnCommand=cmd(zoom,0;bounceend,0.3;zoom,0.5);
+ OffCommand=cmd(bouncebegin,0.3;zoom,0);
+ };
+ LoadActor( "banner frame" ) .. {
+ Name="BannerFrame";
+ OnCommand=cmd(zoom,0;bounceend,0.3;zoom,1);
+ OffCommand=cmd(bouncebegin,0.3;zoom,0);
+ };
+
+ LoadActor( "side score frame" ) .. {
+ Name="ScoreFrameP1";
+ InitCommand=cmd();
+ OnCommand=cmd(x,-266;addx,-250;diffusealpha,1;decelerate,0.3;addx,250);
+ OffCommand=cmd(linear,0.3;addx,-150;diffusealpha,0);
+ };
+ LoadActor( "side score frame" ) .. {
+ Name="ScoreFrameP2";
+ InitCommand=cmd(zoomx,-1);
+ OnCommand=cmd(x,266;addx,250;diffusealpha,1;decelerate,0.3;addx,-250);
+ OffCommand=cmd(linear,0.3;addx,150;diffusealpha,0);
+ };
+
+ LoadFont( "Common Normal" ) .. {
+-- LoadFont( "_regra bold 30px" ) .. {
+ Name="PlayerScoreP1";
+ InitCommand=cmd(x,-135;diffuse,color("#fdf991");shadowlength,0;zoom,0.6);
+ OnCommand=cmd(x,-135;addx,50;zoom,0;diffusealpha,0;sleep,0.1;accelerate,0.3;addx,-50;diffusealpha,1;zoom,0.6);
+ OffCommand=cmd(linear,0.3;diffusealpha,0);
+ };
+ LoadFont( "Common Normal" ) .. {
+-- LoadFont( "_regra bold 30px" ) .. {
+ Name="PlayerScoreP2";
+ InitCommand=cmd(x,135;diffuse,color("#abfe8e");shadowlength,0;zoom,0.6);
+ OnCommand=cmd(x,135;addx,-50;zoom,0;diffusealpha,0;sleep,0.1;accelerate,0.3;addx,50;diffusealpha,1;zoom,0.6);
+ OffCommand=cmd(linear,0.3;diffusealpha,0);
+ };
+
+ LoadFont( "Common Normal" ) .. {
+-- LoadFont( "_regra bold 30px" ) .. {
+ Name="MachineBestP1";
+ InitCommand=cmd(diffuse,color("#ffffff");shadowlength,0;zoom,0.5);
+ OnCommand=cmd(x,-250;addx,-250;diffusealpha,1;decelerate,0.3;addx,250);
+ OffCommand=cmd(linear,0.3;addx,-150;diffusealpha,0);
+ };
+ LoadFont( "Common Normal" ) .. {
+-- LoadFont( "_regra bold 30px" ) .. {
+ Name="MachineBestP2";
+ InitCommand=cmd(diffuse,color("#ffffff");shadowlength,0;zoom,0.5);
+ OnCommand=cmd(x,250;addx,250;diffusealpha,1;decelerate,0.3;addx,-250);
+ OffCommand=cmd(linear,0.3;addx,150;diffusealpha,0);
+ };
+
+ };
+
+ return Def.ActorFrame {
+ children = children;
+ InitCommand = function(self)
+ c = self:GetChildren();
+ c.PlayerScore = {};
+ c.PlayerScore[PLAYER_1] = c.PlayerScoreP1;
+ c.PlayerScore[PLAYER_2] = c.PlayerScoreP2;
+ c.MachineBest = {};
+ c.MachineBest[PLAYER_1] = c.MachineBestP1;
+ c.MachineBest[PLAYER_2] = c.MachineBestP2;
+ c.ScoreFrame = {};
+ c.ScoreFrame[PLAYER_1] = c.ScoreFrameP1;
+ c.ScoreFrame[PLAYER_2] = c.ScoreFrameP2;
+ c.Difficulty = {};
+ c.Difficulty[PLAYER_1] = c.DifficultyP1;
+ c.Difficulty[PLAYER_2] = c.DifficultyP2;
+ end;
+
+ BeginCommand = function(self)
+ Stats = STATSMAN:GetPlayedStageStats(StagesAgo);
+ if not Stats then
+ self:visible(false);
+ return;
+ end;
+ self:visible(true);
+
+ PlayerStats[PLAYER_1] = Stats:GetPlayerStageStats(PLAYER_1);
+ PlayerStats[PLAYER_2] = Stats:GetPlayerStageStats(PLAYER_2);
+
+ local Current;
+ local CurrentPart = {}
+ if GAMESTATE:IsCourseMode() then
+ Current = GAMESTATE:GetCurrentCourse();
+ CurrentPart[PLAYER_1] = GAMESTATE:GetCurrentTrail( PLAYER_1 );
+ CurrentPart[PLAYER_2] = GAMESTATE:GetCurrentTrail( PLAYER_2 );
+ else
+ Current = Stats:GetPlayedSongs()[1];
+ CurrentPart[PLAYER_1] = PlayerStats[PLAYER_1]:GetPlayedSteps()[1];
+ CurrentPart[PLAYER_2] = PlayerStats[PLAYER_2]:GetPlayedSteps()[1];
+ end
+ assert(Current);
+
+ local sBannerPath = Current:GetBannerPath() or THEME:GetPathG("Common","fallback banner");
+ c.Banner:LoadBanner( sBannerPath );
+
+ for pn in ivalues(PlayerNumber) do
+ local visible = GAMESTATE:IsHumanPlayer(pn) and CurrentPart[pn] ~= nil; -- was present for this song
+ c.MachineBest[pn]:visible( visible );
+ c.PlayerScore[pn]:visible( visible );
+ c.ScoreFrame[pn]:visible( visible );
+ c.Difficulty[pn]:visible( visible );
+
+ local MachineProfile = PROFILEMAN:GetMachineProfile();
+ if visible then
+ assert(CurrentPart[pn]);
+
+-- c.Difficulty[pn]:SetDifficultyAndStepsTypeFrame( CurrentPart[pn] );
+
+ local hsl = MachineProfile:GetHighScoreList( Current, CurrentPart[pn] );
+ assert( hsl );
+
+ -- Find the first high score that isn't one that we're entering now.
+ local HighScores = hsl:GetHighScores();
+ local hs;
+ for h in ivalues(HighScores) do
+ if not hs and not h:IsFillInMarker() then
+ hs = h;
+ end
+ end
+
+ if hs then
+ local fMachineScore = hs:GetPercentDP() or 0;
+ local sName = hs:GetName() or "";
+ local sText = sName .. " " .. FormatPercentScore( fMachineScore );
+ c.MachineBest[pn]:settext( sText );
+ else
+ c.ScoreFrame[pn]:visible( false );
+ end
+
+ local fPlayerScore = PlayerStats[pn]:GetPercentDancePoints();
+ local sText = FormatPercentScore( fPlayerScore );
+ c.PlayerScore[pn]:settext( sText );
+ local colors = {
+ [PLAYER_1] = color("#fdf991"),
+ [PLAYER_2] = color("#abfe8e"),
+ };
+ if Stats:PlayerHasHighScore(pn) then
+ colors = {
+ [PLAYER_1] = color("#feef01"),
+ [PLAYER_2] = color("#0ffc03"),
+ };
+ end
+ c.PlayerScore[pn]:diffuse(colors[pn]);
+ end;
+ end;
+ end;
+ };
+end
+
+local children = {
+ LoadActor( "center frame" ) .. {
+ InitCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y+9);
+ OnCommand=cmd(fadetop,0.3; croptop,1; linear,0.5; croptop,-0.3);
+ OffCommand=cmd(linear,0.5; croptop,1);
+ };
+ LoadActor( "line" ) .. {
+ InitCommand=cmd(x,SCREEN_CENTER_X;SetWidth,336;y,SCREEN_CENTER_Y+65;fadeleft,0.3; faderight,0.3);
+ OnCommand=cmd(cropleft,.5;cropright,.5;
+ sleep,0.2;
+ linear,0.3;
+ cropleft,-.2;cropright,-.2);
+
+ OffCommand=cmd(linear,0.3;cropleft,.5;cropright,.5);
+ };
+};
+
+for i = 1,5 do
+ children[#children+1] =
+ MakeScoreList(i) .. {
+ Name="Row" .. tostring(i);
+ InitCommand=cmd(x,SCREEN_CENTER_X);
+ };
+end
+
+--[[ children[#children+1] =
+ LoadActor( THEME:GetPathB("","_shared underlay") ) .. { OnCommand=cmd(); }; --]]
+
+children[#children+1] = LoadActor( "keyboard" ) .. {
+ InitCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y+80);
+ BeginCommand = cmd(visible,SCREENMAN:GetTopScreen():GetAnyEntering());
+};
+
+for pn in ivalues(PlayerNumber) do
+ local FrameX = pn == PLAYER_1 and (SCREEN_CENTER_X-265) or (SCREEN_CENTER_X+267);
+ local P1 = pn == PLAYER_1 and 1 or -1;
+ children[#children+1] = LoadActor( "name frame" ) .. {
+ InitCommand=cmd(y,SCREEN_CENTER_Y+119;
+ zoomx,pn == PLAYER_1 and 1.0 or -1.0);
+ BeginCommand=cmd(visible,SCREENMAN:GetTopScreen():GetEnteringName(pn));
+ OnCommand=cmd(finishtweening;x,FrameX;addx,-200*P1;zoom,0;bounceend,0.3;zoom,1;addx,200*P1);
+ OffCommand=cmd(stoptweening;bouncebegin,0.3;zoom,0;addx,-200*P1);
+ };
+
+ children[#children+1] = LoadFont( "Common Normal" ) .. {
+-- children[#children+1] = LoadFont( "_regra bold 30px" ) .. {
+ Name="PlayerText";
+ InitCommand=cmd(x,pn == PLAYER_1 and (SCREEN_CENTER_X-WideScale(310,330)) or (SCREEN_CENTER_X+WideScale(198,204));
+ halign,0;
+ y,SCREEN_CENTER_Y+115;shadowlength,0;zoom,1);
+ BeginCommand=cmd(visible,SCREENMAN:GetTopScreen():GetEnteringName(pn));
+ OnCommand=cmd(finishtweening;diffusealpha,0;sleep,0.1;linear,0.3;diffusealpha,1);
+ OffCommand=cmd(stoptweening;bouncebegin,0.3;zoom,0;addx,-200*P1);
+ EntryChangedMessageCommand=function(self,params)
+ if params.PlayerNumber ~= pn then
+ return;
+ end;
+ self:settext( params.Text );
+ end;
+ };
+end;
+
+return Def.ActorFrame {
+ children = children;
+
+ BeginCommand = function(self)
+ local StagesPlayed = STATSMAN:GetStagesPlayed();
+ local c = self:GetChildren();
+
+ local fYCenter = SCREEN_CENTER_Y-60;
+ local fYMinSpacing = 44;
+ local fYMaxSpacing = 70;
+ local fYSpacing = scale(StagesPlayed, 4, 5, fYMaxSpacing, fYMinSpacing);
+ fYSpacing = clamp(fYSpacing, fYMinSpacing, fYMaxSpacing);
+ fYSpacing = fYSpacing + math.mod(fYSpacing, 2); -- even
+ fYSpacing = -fYSpacing;
+
+ local fYStart = fYSpacing*(StagesPlayed-1)/2;
+ local fYEnd = -fYSpacing*(StagesPlayed-1)/2;
+ for i = 1,StagesPlayed do
+ local Name = "Row" .. tostring(i);
+ local row = c[Name];
+ assert(row);
+ local fY = fYCenter + fYEnd + (i-1)*fYSpacing;
+ row:y( fY );
+ end
+
+ local Timer = SCREENMAN:GetTopScreen():GetChild("Timer");
+ if not SCREENMAN:GetTopScreen():GetAnyEntering() then
+ Timer:setseconds(5);
+ Timer:silent(true);
+ else
+ Timer:setseconds(25);
+ Timer:silent(false);
+ end
+ end;
+
+ OnCommand = function(self)
+ local StagesPlayed = STATSMAN:GetStagesPlayed();
+ local c = self:GetChildren();
+ for i = 1,StagesPlayed do
+ local Name = "Row" .. tostring(i);
+ local row = c[Name];
+ assert(row);
+
+ row:hibernate(0.3+(i/StagesPlayed)*0.3);
+ end
+ end;
+};
+
diff --git a/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/keyboard.lua b/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/keyboard.lua
new file mode 100644
index 0000000000..08852dbaba
--- /dev/null
+++ b/Themes/_fallback/BGAnimations/ScreenNameEntryTraditional underlay/keyboard.lua
@@ -0,0 +1,285 @@
+local function distance( x1, y1, x2, y2 )
+ return math.pow( math.pow(x1-x2, 2) + math.pow(y1-y2, 2), 0.5 );
+end
+
+local children = {
+};
+
+local Letters = {
+ "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
+ "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
+ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "?", "!",
+ "BACK", "ENTER"
+};
+
+local LetterIndexes = { };
+for i, l in ipairs(Letters) do
+ LetterIndexes[l] = i;
+end
+
+local MapNameToLetter = {};
+local MapLetterToName = {};
+local letter = LoadFont( "Common Normal" ) .. {
+-- local letter = LoadFont( "_regra bold 30px" ) .. {
+ InitCommand=cmd(zoom,0.8;shadowlength,0);
+ PulseCommand = function(self)
+ self:finishtweening();
+ local z = self:GetZoomX();
+ (cmd(accelerate,0.15;zoom,1.2;decelerate,0.15;zoom,z))(self);
+ end;
+};
+
+for l in ivalues(Letters) do
+ local Name = "letter " .. l;
+ MapNameToLetter[Name] = l;
+ MapLetterToName[l] = Name;
+ children[#children+1] = letter .. {
+ Name = Name;
+ Text = l;
+ };
+ if l == "BACK" or l == "ENTER" then
+ children[#children].File = THEME:GetPathF("", "Common Normal");
+-- children[#children].File = THEME:GetPathF("", "_venacti 26px normal");
+ end;
+end;
+--[[ children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "type key") ) .. { Name = "Type"; SupportPan = true; }
+children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "back") ) .. { Name = "Back"; SupportPan = true; }
+children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "enter") ) .. { Name = "Enter"; SupportPan = true; }
+children[#children+1] = LoadActor( THEME:GetPathS(Var "LoadingScreen", "move cursor") ) .. { Name = "Move"; SupportPan = true; } --]]
+children[#children+1] = LoadActor( THEME:GetPathS("Common", "value") ) .. { Name = "Type"; SupportPan = true; }
+children[#children+1] = LoadActor( THEME:GetPathS("Common", "cancel") ) .. { Name = "Back"; SupportPan = true; }
+children[#children+1] = LoadActor( THEME:GetPathS("Common", "start") ).. { Name = "Enter"; SupportPan = true; }
+children[#children+1] = LoadActor( THEME:GetPathS("MusicWheel", "change") ) .. { Name = "Move"; SupportPan = true; }
+
+local CursorFiles = {
+ [PLAYER_1] = "Cursor P1",
+ [PLAYER_2] = "Cursor P2"
+};
+
+for pn in ivalues(PlayerNumber) do
+ children[#children+1] = LoadActor( THEME:GetPathG("_frame", "1D"),
+ { 4/10, 2/10, 4/10 },
+ LoadActor(CursorFiles[pn])
+ ) .. {
+ Name = CursorFiles[pn];
+ BeginCommand = cmd(visible,SCREENMAN:GetTopScreen():GetEnteringName(pn));
+ OnCommand = cmd(
+ zoom,0;
+ rotationz,-360*2;
+ sleep,0.55;
+ decelerate,0.5;
+ zoom,1;
+ rotationz,0;
+ );
+ OffCommand = cmd(sleep,0.3;queuecommand,"TweenOff");
+ PlayerFinishedMessageCommand = function(self,param)
+ if param.PlayerNumber ~= pn then return end
+ self:playcommand("TweenOff" );
+ end;
+ TweenOffCommand = function(self,param)
+ (cmd(
+ accelerate,0.25;
+ zoomx,0;
+ ))(self);
+ end;
+ };
+end
+
+local c;
+local Keys = {};
+local Selection = {};
+local PlayerX = {};
+local PlayerY = {};
+return Def.ActorFrame {
+ children = children;
+ BeginCommand = function(self)
+ c = self:GetChildren();
+ c.Cursors = {};
+ c.Cursors[PLAYER_1] = c["Cursor P1"];
+ c.Cursors[PLAYER_2] = c["Cursor P2"];
+
+ for l in ivalues(Letters) do
+ local Name = MapLetterToName[l];
+ assert(Name);
+ Keys[l] = {
+ Text = c[Name];
+ Width = c[Name]:GetWidth();
+ Height = c[Name]:GetHeight();
+ };
+ assert(c[Name], Name);
+ end;
+
+ -- Position letters.
+ local RowWidths = {};
+ local fX = 0;
+ local fXPadding = 4;
+ local fY = 0;
+ local iRow = 1;
+ for l in ivalues(Letters) do
+ if l == "O" or l == "0" or l == "BACK"
+ then
+ fX = 0;
+ fY = fY + 30;
+ iRow = iRow + 1;
+ end;
+ Keys[l].Row = iRow;
+ Keys[l].Text:x(fX + Keys[l].Width/2);
+ Keys[l].Text:y(fY + Keys[l].Height/2);
+ fX = fX + Keys[l].Width;
+ RowWidths[iRow] = fX;
+ fX = fX + fXPadding;
+ end;
+ for l in ivalues(Letters) do
+ local iRow = Keys[l].Row;
+ Keys[l].Text:addx(-RowWidths[iRow]/2);
+ end;
+
+ Keys["BACK"].Text:x(-140);
+ Keys["ENTER"].Text:x(140);
+
+ for pn in ivalues(PlayerNumber) do
+ local sName = SCREENMAN:GetTopScreen():GetSelection(pn);
+ local DefaultKey = "A"
+ if #sName > 0 then
+ DefaultKey = "ENTER"
+ end
+
+ self:playcommand("SelectKey", { Key = DefaultKey, PlayerNumber = pn });
+ c.Cursors[pn]:finishtweening();
+ end
+ end;
+
+ CodeMessageCommand = function(self, param)
+ local pn = param.PlayerNumber;
+ if not SCREENMAN:GetTopScreen():GetAnyStillEntering() and param.Name == "Enter" then
+ if SCREENMAN:GetTopScreen():Finish(pn) then
+ c.Enter:play();
+ end
+ return;
+ end
+ if SCREENMAN:GetTopScreen():GetFinalized( pn ) then
+ return;
+ end
+
+ if param.Name == "Left" or param.Name == "Right" then
+ local iDir = param.Name == "Left" and -1 or 1;
+
+ local idx = LetterIndexes[Selection[pn]];
+ idx = idx + iDir;
+ idx = math.mod(idx+#Letters-1, #Letters)+1;
+ self:playcommand("SelectKey", { Key = Letters[idx], PlayerNumber = pn });
+ c.Move:playforplayer(pn);
+ return;
+ end
+
+ if param.Name == "JumpToEnter" then
+ self:playcommand("SelectKey", { Key = "ENTER", PlayerNumber = pn });
+ c.Move:playforplayer(pn);
+ return;
+ end
+ if param.Name == "Backspace" then
+ if SCREENMAN:GetTopScreen():Backspace(pn) then
+ c.Back:playforplayer(pn);
+ end
+ return;
+ end
+
+ if param.Name == "NextRow" or param.Name == "PrevRow" then
+ local iDir = param.Name == "PrevRow" and -1 or 1;
+ local idx = LetterIndexes[Selection[pn]];
+ local iRow = Keys[Selection[pn]].Row;
+ iRow = iRow + iDir;
+ iRow = math.mod(iRow+4-1, 4)+1;
+
+ local NearestLetter
+ local NearestLetterDistance
+ for l in ivalues(Letters) do
+ if iRow == Keys[l].Row then
+ local Text = Keys[l].Text;
+
+ local fDist = distance( PlayerX[pn], PlayerY[pn],
+ Text:GetX(), Text:GetY() );
+ if not NearestLetterDistance or fDist < NearestLetterDistance then
+ NearestLetterDistance = fDist;
+ NearestLetter = l;
+ end
+ end
+ end
+ assert( NearestLetter );
+ self:playcommand("SelectKey", { Key = NearestLetter, PlayerNumber = pn, NoStore = true });
+
+ c.Move:playforplayer(pn);
+
+ return;
+ end
+
+ if param.Name == "Enter" then
+ if Selection[pn] == "BACK" then
+ if SCREENMAN:GetTopScreen():Backspace(pn) then
+ Keys[Selection[pn]].Text:playcommand( "Pulse" );
+ c.Back:playforplayer(pn);
+ end
+ elseif Selection[pn] == "ENTER" then
+ if SCREENMAN:GetTopScreen():Finish(pn) then
+ Keys[Selection[pn]].Text:playcommand( "Pulse" );
+ c.Enter:playforplayer(pn);
+ end
+ else
+ local key = Selection[pn]; -- EnterKey may change this
+ if SCREENMAN:GetTopScreen():EnterKey(pn, key) then
+ Keys[key].Text:playcommand( "Pulse" );
+ c.Type:playforplayer(pn);
+ end
+ end
+ end
+ end;
+
+ SelectKeyMessageCommand = function(self, param)
+ local key = param.Key;
+ local pn = param.PlayerNumber;
+ if not Keys[key] then return end
+
+ Selection[pn] = key;
+ c.Cursors[pn]:stoptweening();
+ c.Cursors[pn]:playcommand( "SetSize", { Width=Keys[key].Width+6; tween=cmd(stoptweening;linear,0.10); } );
+ c.Cursors[pn]:x( Keys[key].Text:GetX() );
+ c.Cursors[pn]:y( Keys[key].Text:GetY() );
+ if not param.NoStore then
+ PlayerX[pn] = Keys[key].Text:GetX();
+ PlayerY[pn] = Keys[key].Text:GetY();
+ end
+
+ -- SCREENMAN:GetTopScreen():EnterKey(PLAYER_2,"x");
+ end;
+ MenuTimerExpiredMessageCommand = function(self, param)
+ for pn in ivalues(PlayerNumber) do
+ SCREENMAN:GetTopScreen():Finish(pn);
+ end
+ c.Enter:play();
+ end;
+
+ OnCommand = function(self, param)
+ for key in ivalues(Letters) do
+ local fDist = distance( Keys[key].Text:GetX(), Keys[key].Text:GetY(), 0, 100 );
+
+ local f = cmd(
+ diffusealpha,0;zoom,0;
+ sleep,0.25 + (fDist / 400);
+ decelerate,0.5;
+ diffusealpha,1;zoom,0.8);
+ f(Keys[key].Text);
+ end
+ end;
+
+ OffCommand = function(self, param)
+ for key in ivalues(Letters) do
+ local fDist = distance( Keys[key].Text:GetX(), Keys[key].Text:GetY(), 0, 100 );
+
+ local f = cmd(
+ sleep,0.0 + (fDist / 400);
+ decelerate,0.5;
+ diffusealpha,0;zoom,0);
+ f(Keys[key].Text);
+ end
+ end;
+};
diff --git a/Themes/_fallback/BGAnimations/ScreenSystemLayer aux.lua b/Themes/_fallback/BGAnimations/ScreenSystemLayer aux.lua
index 18bd636e50..cba3909a14 100644
--- a/Themes/_fallback/BGAnimations/ScreenSystemLayer aux.lua
+++ b/Themes/_fallback/BGAnimations/ScreenSystemLayer aux.lua
@@ -1,49 +1,2 @@
-local function CreditsText( pn )
- function update(self)
- local str = ScreenSystemLayerHelpers.GetCreditsMessage(pn);
- self:settext(str);
- end
-
- function UpdateVisible(self)
- local screen = SCREENMAN:GetTopScreen();
- local bShow = true;
- if screen then
- local sClass = screen:GetName();
- bShow = THEME:GetMetric( sClass, "ShowCreditDisplay" );
- end
-
- self:visible( bShow );
- end
-
- local text = LoadFont(Var "LoadingScreen","credits") .. {
- InitCommand=function(self)
- self:name("Credits" .. PlayerNumberToString(pn))
- ActorUtil.LoadAllCommandsAndSetXY(self,Var "LoadingScreen");
- end;
- UpdateTextCommand=function(self)
- local str = ScreenSystemLayerHelpers.GetCreditsMessage(pn);
- self:settext(str);
- end;
- UpdateVisibleCommand=function(self)
- local screen = SCREENMAN:GetTopScreen();
- local bShow = true;
- if screen then
- local sClass = screen:GetName();
- bShow = THEME:GetMetric( sClass, "ShowCreditDisplay" );
- end
-
- self:visible( bShow );
- end;
---[[ RefreshCreditTextMessageCommand=update;
- CoinInsertedMessageCommand=update;
- PlayerJoinedMessageCommand=update;
- ScreenChangedMessageCommand=UpdateVisible; --]]
- };
- return text;
-end
-
-local t = Def.ActorFrame {
- CreditsText( PLAYER_1 );
- CreditsText( PLAYER_2 );
-};
+local t = Def.ActorFrame {};
return t;
\ No newline at end of file
diff --git a/Themes/_fallback/BGAnimations/ScreenSystemLayer overlay/default.lua b/Themes/_fallback/BGAnimations/ScreenSystemLayer overlay/default.lua
index 2dcdf564dd..a23015892f 100644
--- a/Themes/_fallback/BGAnimations/ScreenSystemLayer overlay/default.lua
+++ b/Themes/_fallback/BGAnimations/ScreenSystemLayer overlay/default.lua
@@ -1,4 +1,50 @@
+local function CreditsText( pn )
+ function update(self)
+ local str = ScreenSystemLayerHelpers.GetCreditsMessage(pn);
+ self:settext(str);
+ end
+
+ function UpdateVisible(self)
+ local screen = SCREENMAN:GetTopScreen();
+ local bShow = true;
+ if screen then
+ local sClass = screen:GetName();
+ bShow = THEME:GetMetric( sClass, "ShowCreditDisplay" );
+ end
+
+ self:visible( bShow );
+ end
+
+ local text = LoadFont(Var "LoadingScreen","credits") .. {
+ InitCommand=function(self)
+ self:name("Credits" .. PlayerNumberToString(pn))
+ ActorUtil.LoadAllCommandsAndSetXY(self,Var "LoadingScreen");
+ end;
+ UpdateTextCommand=function(self)
+ local str = ScreenSystemLayerHelpers.GetCreditsMessage(pn);
+ self:settext(str);
+ end;
+ UpdateVisibleCommand=function(self)
+ local screen = SCREENMAN:GetTopScreen();
+ local bShow = true;
+ if screen then
+ local sClass = screen:GetName();
+ bShow = THEME:GetMetric( sClass, "ShowCreditDisplay" );
+ end
+
+ self:visible( bShow );
+ end;
+--[[ RefreshCreditTextMessageCommand=update;
+ CoinInsertedMessageCommand=update;
+ PlayerJoinedMessageCommand=update;
+ ScreenChangedMessageCommand=UpdateVisible; --]]
+ };
+ return text;
+end;
+--
local t = Def.ActorFrame {
+ CreditsText( PLAYER_1 );
+ CreditsText( PLAYER_2 );
Def.ActorFrame {
Def.Quad {
InitCommand=cmd(zoomtowidth,SCREEN_WIDTH;zoomtoheight,30;horizalign,left;vertalign,top;y,SCREEN_TOP;diffuse,color("0,0,0,0"));
diff --git a/Themes/_fallback/Fonts/ScreenReloadSongs LoadingText.redir b/Themes/_fallback/Fonts/InGameLoadingWindow LoadingText.redir
similarity index 100%
rename from Themes/_fallback/Fonts/ScreenReloadSongs LoadingText.redir
rename to Themes/_fallback/Fonts/InGameLoadingWindow LoadingText.redir
diff --git a/Themes/_fallback/Fonts/frutiger 24px [main-stroke] 16x16.png b/Themes/_fallback/Fonts/frutiger 24px [main-stroke] 16x16.png
index 66f6fd79b3..cc9d1d62af 100644
Binary files a/Themes/_fallback/Fonts/frutiger 24px [main-stroke] 16x16.png and b/Themes/_fallback/Fonts/frutiger 24px [main-stroke] 16x16.png differ
diff --git a/Themes/_fallback/Fonts/frutiger 24px [main] 16x16.png b/Themes/_fallback/Fonts/frutiger 24px [main] 16x16.png
index 1963076070..bf737d6d3e 100644
Binary files a/Themes/_fallback/Fonts/frutiger 24px [main] 16x16.png and b/Themes/_fallback/Fonts/frutiger 24px [main] 16x16.png differ
diff --git a/Themes/_fallback/Fonts/frutiger 24px [polish-stroke] 8x2.png b/Themes/_fallback/Fonts/frutiger 24px [polish-stroke] 8x2.png
new file mode 100644
index 0000000000..fae305f37f
Binary files /dev/null and b/Themes/_fallback/Fonts/frutiger 24px [polish-stroke] 8x2.png differ
diff --git a/Themes/_fallback/Fonts/frutiger 24px [polish] 8x2.png b/Themes/_fallback/Fonts/frutiger 24px [polish] 8x2.png
new file mode 100644
index 0000000000..0ed3c843c3
Binary files /dev/null and b/Themes/_fallback/Fonts/frutiger 24px [polish] 8x2.png differ
diff --git a/Themes/_fallback/Fonts/frutiger 24px.ini b/Themes/_fallback/Fonts/frutiger 24px.ini
index 702c8cd9cd..988bc39672 100644
--- a/Themes/_fallback/Fonts/frutiger 24px.ini
+++ b/Themes/_fallback/Fonts/frutiger 24px.ini
@@ -261,6 +261,7 @@ AdvanceExtraPixels=0
253=12
254=15
255=12
+
[alt]
0=10
1=10
@@ -390,3 +391,28 @@ AdvanceExtraPixels=0
125=12
126=6
127=7
+
+[polish]
+Baseline=23
+Top=6
+
+line 0=ĄĆĘŁŃŚŹŻ
+line 1=ąćęłńśźż
+
+0=15
+1=10
+2=12
+3=12
+4=12
+5=12
+6=13
+7=13
+
+8=11
+9=11
+10=11
+11=6
+12=11
+13=10
+14=10
+15=10
\ No newline at end of file
diff --git a/Themes/_fallback/Graphics/Common splash.png b/Themes/_fallback/Graphics/Common splash.png
new file mode 100644
index 0000000000..2c365a3306
Binary files /dev/null and b/Themes/_fallback/Graphics/Common splash.png differ
diff --git a/Themes/_fallback/Graphics/Progressbar Indeterminate.png b/Themes/_fallback/Graphics/Progressbar Indeterminate.png
new file mode 100644
index 0000000000..c781e5d06e
Binary files /dev/null and b/Themes/_fallback/Graphics/Progressbar Indeterminate.png differ
diff --git a/Themes/_fallback/Languages/en.ini b/Themes/_fallback/Languages/en.ini
index 1884302235..9f85bed459 100644
--- a/Themes/_fallback/Languages/en.ini
+++ b/Themes/_fallback/Languages/en.ini
@@ -372,7 +372,7 @@ MaxTextureResolution=Choose the maximum texture resolution. Setting this to any
MenuTimer=When &oq;ON&cq;, menus have a time limit.
Mines=Mines
MoveRandomToEnd=Determines if courses with random songs should be placed at the end of the course select wheel.
-MovieColorDepth=Choose the color depth of textures. 32 bit textures use more memory, but look nicer.
+MovieColorDepth=Choose the color depth of movies. 32 bit textures use more memory, but look nicer.
MusicWheelSwitchSpeed=Adjusts the speed of the music wheel.
MusicWheelUsesSections=&oq;Always&cq; means sections in group + ABC; &oq;Never&cq; means no sections; &oq;Title Only&cq; shows sections in ABC order.
Network Options=Connect to a server or change server options.
@@ -656,6 +656,7 @@ Never=Never
New=New
NewEdit=-New Edit-
No=No
+NoAttacks=No Attacks
NoHands=No Hands
NoHolds=No Holds
NoJumps=No Jumps
@@ -707,7 +708,8 @@ Skip=Skip
Skippy=Skippy
Slow=Slow
SN2=Supernova 2
-SongAttacks=Song Attacks
+SongAttacks=Step Attacks
+StepAttacks=Step Attacks
Song BGAnimation=Song BGAnimation
Song Bitmap=Song Bitmap
Song Movie=Song Movie
@@ -800,6 +802,7 @@ CelShadeModels=Cel-shaded Models
Center Image=Center Image
Chaos=Chaos
Characters=Characters
+Chart Name=Chart Name
Chart Style=Chart Style
Choose=Choose
Clear Bookkeeping Data=Clear Bookkeeping Data
@@ -807,13 +810,20 @@ Clear Machine Edits=Clear Machine Edits
Clear Machine Stats=Clear Machine Scores
Clear USB edits=Clear USB edits
Clear area=Clear area
+Clear clipboard=Clear clipboard
CoinMode=Coin Mode
CoinModeNoHome=Coin Mode
CoinsPerCredit=Coins Per Credit
Connection=Connection
-Convert pause to beats=Convert pause to beats
-Convert selection to pause=Convert selection to pause
+Convert pause to beats=Convert stop to beats
+Convert delay to beats=Convert delay to beats
+Convert selection to attack=Convert selection to Attack
+Convert selection to pause=Convert selection to stop
+Convert selection to delay=Convert selection to delay
+Convert selection to warp=Convert selection to Warp Segment
+Convert selection to fake=Convert selection to Fake Segment
Copy=Copy
+Copy timing data=Copy timing data
CourseSortOrder=Course Sort
Create New=Create New
Create New Course=Create New
@@ -829,6 +839,8 @@ DelayedTextureDelete=Keep Textures In Memory
Delete=Delete
Delete beat and shift up=Delete beat and shift up
Description=Description
+Designate as Music Preview=Designate as Music Preview
+Designate last second at current beat=Designate last second at current beat
Difficulty=Difficulty
Display BPM=Display BPM
DisplayAspectRatio=Aspect Ratio
@@ -867,6 +879,7 @@ Entry %d=Entry %d
EventMode=Event Mode
Exit=Exit
Fail=Fail
+Fakes=Fakes
FastLoad=Fast\nLoad
File1 Global BGAnimation=File1 Global BGAnimation
File1 Global Movie=File1 Global Movie
@@ -904,11 +917,13 @@ Insert=Insert
Insert Credit=Insert Credit
Insert beat and shift down=Insert beat and shift down
Insert Entry=Insert Entry
+Invert notes' player=Invert player notes (routine only)
Jumps=Jumps
Key Joy Mappings=Config Key/Joy Mappings
Language=Language
-Last beat hint=Last beat hint
+Last second hint=Last second hint
Layer=Layer
+Lifts=Lifts
LifeDifficulty=Life Difficulty
LifeType=Life Type
Low Meter=Low Meter
@@ -921,6 +936,8 @@ MenuTimer=Menu Timer
Meter=Meter
Min BPM=Min Specified BPM
Mines=Mines
+Mirror Player 1 to 2=Mirror P1's notes to P2 (routine only)
+Mirror Player 2 to 1=Mirror P2's notes to P1 (routine only)
MoveRandomToEnd=Random At End
More Options=More Options
MovieColorDepth=Movie Color
@@ -936,6 +953,7 @@ OsMountPlayer1=OS Mount Player1
OsMountPlayer2=OS Mount Player2
Paste at begin marker=Paste at begin marker
Paste at current beat=Paste at current beat
+Paste timing data=Paste timing data
Persp=Persp
Play current beat to end=Play current beat to end
Play preview music=Play preview music
@@ -971,7 +989,8 @@ Remove Change=Remove Change
Rename=Rename
Reset To Defaults=Reset Options To Default Values
Revert from disk=Revert from disk
-Revert to last save=Revert to last save
+Revert to last save=Revert from cache
+Rolls=Rolls
Save=Save
SaveScores=Save Scores
SaveReplays=Save Replays
@@ -1036,6 +1055,7 @@ Type=Type
Turn=Turn
Undo=Undo
UseUnlockSystem=Unlock System
+View steps data=View Steps Data
VisualDelaySeconds=Visual Delay
Voltage=Voltage
Vsync=Wait For Vsync
@@ -1216,6 +1236,7 @@ Write Profiles=Write Profiles
off=off
on=on
or=or
+Zoom In Camera=Zoom In Camera
[ScreenEdit]
%s notes=%s notes
@@ -1228,7 +1249,7 @@ Enter a new Stop value.=Enter a new Stop value.\n\nType "0" to remove.
Enter a new Delay value.=Enter a new Delay value.\n\nType "0" to remove.
Enter a new Time Signature.=Enter a new time signature.\nUse the format "x/y".\nEnter the previous value to remove.
Enter a new Tickcount value.=Enter a new Tickcount value.\n\nEnter the previous value to remove.
-Enter a new Combo value.=Enter a new Combo value.\n\nEnter the previous value to remove.
+Enter a new Combo value.=Enter a new Combo value.\nUse the format "x/y".\nEnter the previous value to remove.
Enter a new Label value.=Enter a name for this section of the chart.\n\nEnter a previously used label to remove.
Enter a new Warp value.=Enter the number of beats you will warp over.\n\nType "0" to remove this segment.
Enter a new Speed percent value.=Enter the ratio for speed scrolling.\nEnter the previous value to remove.\n1 is the default scroll.
@@ -1242,11 +1263,12 @@ Enter a new artist.=Enter a new artist.
Enter a new genre.=Enter a new genre.
Enter a new credit.=Enter a new credit.
Enter a new description.=Enter a new description.
+Enter a new chart name.=Enter the name/title of this chart.
Enter a new chart style.=Enter a new chart style (e.g. "Pad", "Keyboard").
Enter a new meter.=Enter the difficulty rating for this chart.
Enter the author who made this step pattern.=Enter the author who made this step pattern.
Enter the offset for the song.=Enter the beat 0 offset for the song.
-Enter a new last beat hint.=Enter a new last beat hint.
+Enter a new last second hint.=Enter a new last second hint.
Enter a new main title transliteration.=Enter a new main title transliteration.
Enter a new main title.=Enter a new main title.
Enter a new sub title transliteration.=Enter a new sub title transliteration.
@@ -1257,7 +1279,7 @@ Enter a new min BPM.=Enter the minimum displayed BPM.
Enter a new max BPM.=Enter the maximum displayed BPM.
More than %d notes per measure is not allowed. This change has been reverted.=More than %d notes per measure is not allowed. This change has been reverted.
No backgrounds available=No backgrounds available
-EditHelpText=Up/Down:\n change beat\nLeft/Right:\n change snap\nNumber keys:\n add/remove\n tap note\nN and M keys:\n swap tap notes\nCreate hold note:\n Hold a number\n while moving\n Up or Down\nCreate roll note:\n Hold Shift,\n then create a\n hold note.\nSpace bar:\n Set area\n marker\nEnter:\n Area Menu\nEscape:\n Main Menu\nF4:\n Timing Menu\nF1:\n Show help\n
+EditHelpText=Up/Down:\n change beat\nLeft/Right:\n change snap\nNumber keys:\n add/remove\n tap note\nN and M keys:\n swap tap notes\nCtrl + N/M:\n swap cycled segment\nCtrl + ,/.:\n cycle segments\nCreate hold note:\n Hold a number\n while moving\n Up or Down\nCreate roll note:\n Hold Shift,\n then create a\n hold note.\nSpace bar: Set area\n marker\nT key: Switch Timing\nEnter: Area Menu\nA Key: Alter Menu\nEscape: Main Menu\nF4: Timing Menu\nF1: Show help\n
PlayRecordHelpText=Press START to end
Save successful.=Save successful.
Saved as SM and DWI.=Saved as SM and DWI.
@@ -1269,6 +1291,7 @@ This change creates notes past the end of the music and is not allowed.=This cha
This will destroy all unsaved changes.=This will destroy all unsaved changes.
Undo=Undo
You must be in Song Timing Mode to edit BG Changes.=You must be in Song Timing Mode to edit BG Changes.
+You must have an area selected to enter the Alter Menu.=You must have an area selected to enter the Alter Menu.
Current beat=Current beat
Current second=Current second
@@ -1276,10 +1299,13 @@ Snap to=Snap to
Selection beat=Selection beat
Difficulty=Difficulty
Description=Description
+Chart Name=Chart Name
Chart Style=Chart Style
+Step Author=Step Author
Main title=Main title
Subtitle=Subtitle
Tap Note=Tap Note
+Segment=Segment
Tap Steps=Tap Steps
Jumps=Jumps
Hands=Hands
@@ -1657,11 +1683,15 @@ Error adding file '%s'.=Error adding file '%s'.
Loading courses...=Loading courses...
Loading songs...=Loading songs...
Reloading...=Reloading...
+Unloading songs...=Unloading songs...
+Unloading courses...=Unloading courses...
The folder "%s" appears to be a song folder. All song folders must reside in a group folder. For example, "Songs/Originals/My Song".=The folder "%s" appears to be a song folder. All song folders must reside in a group folder. For example, "Songs/Originals/My Song" will contain the music file (MP3, OGG...), the steps file (.sm, .dwi, .ksf...) and other related files.
[SongUtil]
You must supply a name for your new edit.=You must supply a name for your new edit.
+The name you chose conflicts with another chart. Please use a different name.=The name you chose conflicts with another chart. Please use a different name.
The name you chose conflicts with another edit. Please use a different name.=The name you chose conflicts with another edit. Please use a different name.
+The chart name cannot contain any of the following characters: %s=The chart name cannot contain any of the following characters: %s
The edit name cannot contain any of the following characters: %s=The edit name can not contain any of the following characters: %s
The step author's name cannot contain any of the following characters: %s=The step author's name cannot contain any of the following characters: %s
@@ -1897,6 +1927,7 @@ P2=P2
[UnlockRewardType]
Song=Song
Steps=Steps
+StepsType=StepsType
Course=Course
Modifier=Modifier
diff --git a/Themes/_fallback/Other/ScreenGameplaySyncMachine music.ssc b/Themes/_fallback/Other/ScreenGameplaySyncMachine music.ssc
index dde55e41ae..5721dff9bf 100644
--- a/Themes/_fallback/Other/ScreenGameplaySyncMachine music.ssc
+++ b/Themes/_fallback/Other/ScreenGameplaySyncMachine music.ssc
@@ -10,7 +10,7 @@
#BACKGROUND:;
#LYRICSPATH:;
#CDTITLE:;
-#MUSIC:ScreenGameplaySyncMachine music.ogg;
+#MUSIC:_sync music.ogg;
#OFFSET:-0.012;
#SAMPLESTART:0.000;
#SAMPLELENGTH:12.000;
@@ -26,6 +26,8 @@
#DIFFICULTY:Beginner;
#METER:1;
#RADARVALUES:0.302,0.205,0.000,0.000,0.000;
+#BPMS:0.000=132.000;
+#OFFSET:-0.012;
#NOTES:
// measure 1
0000
@@ -100,6 +102,8 @@
#DIFFICULTY:Beginner;
#METER:1;
#RADARVALUES:0.302,0.205,0.000,0.000,0.000;
+#BPMS:0.000=132.000;
+#OFFSET:-0.012;
#NOTES:
// measure 1
00000
diff --git a/Themes/_fallback/Other/ScreenHowToPlay steps.ssc b/Themes/_fallback/Other/ScreenHowToPlay steps.ssc
index b64d877215..2f7ade5385 100644
--- a/Themes/_fallback/Other/ScreenHowToPlay steps.ssc
+++ b/Themes/_fallback/Other/ScreenHowToPlay steps.ssc
@@ -13,6 +13,8 @@
#DESCRIPTION:BASIC;
#DIFFICULTY:easy;
#METER:1;
+#BPMS:0.000=100.000;
+#STOPS:16=2,18=2,20=2,22=2;
#RADARVALUES:0,0,0,0,0;
#NOTES:
0000
@@ -72,6 +74,8 @@
#DESCRIPTION:NORMAL;
#DIFFICULTY:easy;
#METER:1;
+#BPMS:0.000=100.000;
+#STOPS:16=2,18=2,20=2,22=2;
#RADARVALUES:0,0,0,0,0;
#NOTES:
00000
diff --git a/Themes/_fallback/Other/ScreenGameplaySyncMachine music.ogg b/Themes/_fallback/Other/_sync music.ogg
similarity index 100%
rename from Themes/_fallback/Other/ScreenGameplaySyncMachine music.ogg
rename to Themes/_fallback/Other/_sync music.ogg
diff --git a/Themes/_fallback/Scripts/01 alias.lua b/Themes/_fallback/Scripts/01 alias.lua
index 126d9c69ef..05935425bf 100644
--- a/Themes/_fallback/Scripts/01 alias.lua
+++ b/Themes/_fallback/Scripts/01 alias.lua
@@ -20,4 +20,4 @@ local _screen = {
h = SCREEN_HEIGHT,
cx = SCREEN_CENTER_X,
cy = SCREEN_CENTER_Y
-}
+}
\ No newline at end of file
diff --git a/Themes/_fallback/Scripts/01 compat.lua b/Themes/_fallback/Scripts/01 compat.lua
index 36b5327aa2..4103cc9dbc 100644
--- a/Themes/_fallback/Scripts/01 compat.lua
+++ b/Themes/_fallback/Scripts/01 compat.lua
@@ -56,15 +56,6 @@ function ActorScroller:setfastcatchup(bFastCatchup)
self:SetFastCatchup(bFastCatchup)
end
--- renaming various StepMania functions to sm-ssc ones:
-if ScreenString then
- ScreenString = Screen.String
-end
-
-if ScreenMetric then
- ScreenMetric = Screen.Metric
-end
-
--[[ GameState ]]
--Aliases for old GAMESTATE timing functions.
--These have been converted to SongPosition, but most themes still use these old functions.
diff --git a/Themes/_fallback/Scripts/02 Actor.lua b/Themes/_fallback/Scripts/02 Actor.lua
index cfded1e6a4..5736536221 100644
--- a/Themes/_fallback/Scripts/02 Actor.lua
+++ b/Themes/_fallback/Scripts/02 Actor.lua
@@ -83,6 +83,44 @@ local DropBezier =
function Actor:drop(t)
self:tween( t, "TweenType_Bezier", DropBezier );
end
+
+-- compound tweens "combine multiple interpolators to allow generating more
+-- complex tweens." length is how long to span the animation for, while
+-- ... is either a string (e.g. "linear,0.25,accelerate,0.75") or a table
+-- with the tween information.
+function Actor:compound(length,...)
+ local tweens = ...
+
+ if type(tweens) == "string" then
+ local parsed = split(";",tweens)
+ tweens = {} -- convert to table
+ for i,s in pairs(parsed) do
+ local res = split(",",s)
+
+ tweens[i] = {
+ Type = res[1],
+ Percent = res[2],
+ Bezier = res[3] or nil
+ }
+ end
+ end
+
+ for i,t in pairs(tweens) do
+ if t.Type == "linear" then self:linear(t.Percent*length)
+ elseif t.Type == "accelerate" then self:accelerate(t.Percent*length)
+ elseif t.Type == "decelerate" then self:decelerate(t.Percent*length)
+ elseif t.Type == "spring" then self:spring(t.Percent*length)
+ elseif t.Type == "bouncebegin" then self:bouncebegin(t.Percent*length)
+ elseif t.Type == "bounceend" then self:bounceend(t.Percent*length)
+ elseif t.Type == "smooth" then self:smooth(t.Percent*length)
+ elseif t.Type == "drop" then self:smooth(t.Percent*length)
+ --elseif t.Type == "ease" then self:ease(t.Percent*length)
+ elseif t.Type == "bezier" then
+ -- todo: handle using tween and 'TweenType_Bezier'
+ end
+ end
+end
+
-- Hide if b is true, but don't unhide if b is false.
function Actor:hide_if(b)
if b then
@@ -114,17 +152,32 @@ function Actor:FullScreen()
end
--[[ Typical background sizes:
-320x240 - DDR 1st-Extreme, most NVLM_ZK songs
-640x480 - most simfiles in distribution today are this big.
-768x480 - 16:10 aspect ratio backgrounds
-854x480 - pump it up pro
+320x240 - [4:3]
+640x480 - [4:3] (most simfiles in distribution today use this res.)
+768x480 - [16:10]
+854x480 - [16:9]
]]
--- "Most backgrounds are 640x480. Some are 768x480. Stretch the 4:3 ones."
function Actor:scale_or_crop_background()
- if (self:GetWidth() * 3) / 4 == self:GetHeight() then
+ local gw = self:GetWidth()
+ local gh = self:GetHeight()
+
+ local graphicAspect = gw/gh
+ local displayAspect = DISPLAY:GetDisplayWidth()/DISPLAY:GetDisplayHeight()
+
+ if graphicAspect == displayAspect then
+ -- bga matches the current aspect, we can stretch it.
self:stretchto( 0,0,SCREEN_WIDTH,SCREEN_HEIGHT );
else
+ -- temp
self:scaletocover( 0,0,SCREEN_WIDTH,SCREEN_HEIGHT );
+ --[[
+ -- bga doesn't match the aspect.
+ if displayAspect > graphicAspect then
+ -- the graphic is smaller than the display aspect ratio
+ else
+ -- the graphic is bigger than the display aspect ratio; crop me
+ end
+ --]]
end
end
diff --git a/Themes/_fallback/Scripts/02 Branches.lua b/Themes/_fallback/Scripts/02 Branches.lua
index f4b1a09950..3f89ca77da 100644
--- a/Themes/_fallback/Scripts/02 Branches.lua
+++ b/Themes/_fallback/Scripts/02 Branches.lua
@@ -65,7 +65,11 @@ Branch = {
if SONGMAN:GetNumSongs() == 0 and SONGMAN:GetNumAdditionalSongs() == 0 then
return "ScreenHowToInstallSongs";
end;
- return "ScreenSelectProfile";
+ if PROFILEMAN:GetNumLocalProfiles() >= 2 then
+ return "ScreenSelectProfile";
+ else
+ return "ScreenProfileLoad";
+ end
end,
OptionsEdit = function()
-- Similar to above, don't let anyone in here with 0 songs.
@@ -75,7 +79,7 @@ Branch = {
return "ScreenOptionsEdit";
end,
AfterProfileLoad = function()
- return "ScreenSelectProfile"
+ return Branch.AfterSelectProfile()
end,
AfterSelectProfile = function()
if ( THEME:GetMetric("Common","AutoSetStyle") == true ) then
@@ -189,4 +193,7 @@ Branch = {
Network = function()
return IsNetConnected() and "ScreenTitleMenu" or "ScreenTitleMenu"
end,
+ AfterSaveSummary = function()
+ return GAMESTATE:AnyPlayerHasRankingFeats() and "ScreenNameEntryTraditional" or "ScreenGameOver"
+ end,
}
diff --git a/Themes/_fallback/Scripts/02 Colors.lua b/Themes/_fallback/Scripts/02 Colors.lua
index 9cfe09c54c..b46d9c5fe5 100644
--- a/Themes/_fallback/Scripts/02 Colors.lua
+++ b/Themes/_fallback/Scripts/02 Colors.lua
@@ -1,5 +1,5 @@
-- SSC Color Module and Library
-local nilColor = color("0,0,0,0")
+
-- Original Color Module.
Color = {
-- Color Library
@@ -16,7 +16,7 @@ Color = {
Purple = color("#92278f"),
Outline = color("0,0,0,0.5"),
Invisible = color("1,1,1,0"),
- Stealth = nilColor,
+ Stealth = color("0,0,0,0"),
-- Color Functions
-- These functions alter colors in a certain way so that you can make
-- new ones without having to copy a color or find a new one.
@@ -30,8 +30,11 @@ Color = {
return { c[1],c[2],c[3],fAlpha };
end
}
+
+setmetatable(Color, { __call = function(self, c) return self[c] end })
+
-- Remapped Color Module, since some themes are crazy
-Colors = Color;
+-- Colors = Color;
GameColor = {
PlayerColors = {
@@ -95,10 +98,6 @@ GameColor.Difficulty["Nightmare"] = GameColor.Difficulty["Challenge"];
GameColor.Difficulty["HalfDouble"] = GameColor.Difficulty["Medium"];
--[[ Fallbacks ]]
-function Color(c)
- return Colors[c]
-end
-
function BoostColor( cColor, fBoost )
local c = cColor
return { c[1]*fBoost, c[2]*fBoost, c[3]*fBoost, c[4] }
diff --git a/Themes/_fallback/Scripts/02 Other.lua b/Themes/_fallback/Scripts/02 Other.lua
index f9f2532a6f..91f81f06e1 100644
--- a/Themes/_fallback/Scripts/02 Other.lua
+++ b/Themes/_fallback/Scripts/02 Other.lua
@@ -98,16 +98,17 @@ end
-- Get a metric from the currently-loading screen. This is only valid while loading
-- an actor, such as from File or InitCommand attributes; not from commands.
-Screen = {
- Metric = function ( sName )
- local sClass = Var "LoadingScreen"
- return THEME:GetMetric( sClass, sName )
- end,
- String = function ( sName )
- local sClass = Var "LoadingScreen";
- return THEME:GetString( sClass, sName )
- end
-};
+Screen.Metric = function ( sName )
+ local sClass = Var "LoadingScreen"
+ return THEME:GetMetric( sClass, sName )
+end
+ScreenMetric = Screen.Metric
+
+Screen.String = function ( sName )
+ local sClass = Var "LoadingScreen";
+ return THEME:GetString( sClass, sName )
+end
+ScreenString = Screen.String
function TextBannerAfterSet(self,param)
local Title=self:GetChild("Title");
diff --git a/Themes/_fallback/Scripts/02 StageMods.lua b/Themes/_fallback/Scripts/02 StageMods.lua
index 294ccf6a76..0c552bde5d 100644
--- a/Themes/_fallback/Scripts/02 StageMods.lua
+++ b/Themes/_fallback/Scripts/02 StageMods.lua
@@ -13,23 +13,41 @@ function AreStageSongModsForced()
return bExtraStage or bOni or bBattle or bRave
end
+function SetFail()
+ local sFail = "";
+
+ if GetGamePref("DefaultFail") then
+ sFail = string.format("Fail%s", GetGamePref("DefaultFail"));
+ else
+ sFail = "FailOff";
+ end
+
+ sFail = tostring(sFail);
+-- SCREENMAN:SystemMessage( 'NEW FAIL IS: ' .. tostring(sFail) );
+
+ for pn in ivalues(GAMESTATE:GetHumanPlayers()) do
+-- GAMESTATE:ApplyGameCommand( "stagemod,FailImmediateContinue", pn );
+-- GAMESTATE:GetPlayerState(pn):SetPlayerOptions( "ModsLevel_Song", 'mod,FailImmediateContinue' );
+ MESSAGEMAN:Broadcast( "PlayerOptionsChanged", {PlayerNumber = pn} );
+ end
+
+-- GAMESTATE:SetSongOptions( "ModsLevel_Preferred", 'mod,FailImmediateContinue' );
+-- GAMESTATE:SetSongOptions( "ModsLevel_Stage", 'mod,FailImmediateContinue' );
+-- GAMESTATE:SetSongOptions( "ModsLevel_Song",'mod,FailImmediateContinue' );
+ GAMESTATE:ApplyGameCommand( "mod," .. sFail);
+-- GAMESTATE:ApplyGameCommand( "stagemod,FailImmediateContinue");
+ MESSAGEMAN:Broadcast( "SongOptionsChanged" );
+end
+
function ScreenSelectMusic:setupmusicstagemods()
Trace( "setupmusicstagemods" )
local pm = GAMESTATE:GetPlayMode()
-
+
if pm == "PlayMode_Battle" or pm == "PlayMode_Rave" then
- -- FIX DAT BUG;
- local sFail = "";
- if GetGamePref("DefaultFail") then
- sFail = string.format("Fail%s", GetGamePref("DefaultFail") );
- else
- sFail = "Failoff";
- end;
- --
- local so = GAMESTATE:GetDefaultSongOptions() .. "," .. sFail;
+ local so = GAMESTATE:GetDefaultSongOptions();
GAMESTATE:SetSongOptions( "ModsLevel_Stage", so );
MESSAGEMAN:Broadcast( "SongOptionsChanged" );
- elseif GAMESTATE:IsAnExtraStage() then
+ elseif GAMESTATE:IsAnExtraStage() then
if GAMESTATE:GetPreferredSongGroup() == "---Group All---" then
local song = GAMESTATE:GetCurrentSong()
GAMESTATE:SetPreferredSongGroup( song:GetGroupName() )
@@ -46,6 +64,7 @@ function ScreenSelectMusic:setupmusicstagemods()
po = THEME:GetMetric("SongManager","ExtraStagePlayerModifiers");
so = THEME:GetMetric("SongManager","ExtraStageStageModifiers");
end
+
local difficulty = steps:GetDifficulty()
local Reverse = PlayerNumber:Reverse()
@@ -58,8 +77,6 @@ function ScreenSelectMusic:setupmusicstagemods()
GAMESTATE:SetPreferredDifficulty( pn, difficulty )
MESSAGEMAN:Broadcast( "PlayerOptionsChanged", {PlayerNumber = pn} )
end
-
-
GAMESTATE:SetSongOptions( "ModsLevel_Stage", so )
MESSAGEMAN:Broadcast( "SongOptionsChanged" )
diff --git a/Themes/_fallback/Scripts/03 CustomSpeedMods.lua b/Themes/_fallback/Scripts/03 CustomSpeedMods.lua
index 48e23bd5ed..f84874a591 100644
--- a/Themes/_fallback/Scripts/03 CustomSpeedMods.lua
+++ b/Themes/_fallback/Scripts/03 CustomSpeedMods.lua
@@ -1,9 +1,12 @@
--[[
-Custom Speed Mods v2.0 (for sm-ssc)
+Custom Speed Mods v2.1 (for StepMania 5)
by AJ Kelly of KKI Labs ( http://kki.ajworld.net/ )
changelog:
+v2.1 (StepMania 5 Preview 2)
+* Added support for m-Mods.
+
v2.0 (for sm-ssc)
Giant rewrite of the speed mod parser.
This rewrite comes with the following changes/features:
@@ -38,9 +41,6 @@ v1.2
v1.1
* Cleaned up code some, I think.
-________________________________________________________________________________
-anticipated future changes:
-* M-Mod support (when sm-ssc integrates it)
]]
-- ProfileDir(slot): gets the profile dir for slot,
@@ -68,7 +68,7 @@ local function ParseSpeedModFile(path)
return mods
else
-- error; write a fallback mod file and return it
- local fallbackString = "0.5x,1x,1.5x,2x,3x,4x,8x,C200,C400"
+ local fallbackString = "0.5x,1x,1.5x,2x,3x,4x,8x,C250,C450,m550"
Trace("[CustomSpeedMods]: Could not read SpeedMods; writing fallback to "..path)
file:Open(path, 2)
file:Write(fallbackString)
@@ -148,8 +148,8 @@ end
local function SpeedModSort(tab)
local xMods = {}
+ local mMods = {}
local cMods = {}
- --local mMods = {}
-- convert to numbers so sorting works:
for i=1,#tab do
@@ -159,10 +159,10 @@ local function SpeedModSort(tab)
if string.find(tab[i],"C%d") then
typ = cMods
val = string.gsub(tab[i], "C", "")
- elseif string.find(tab[i],"M%d") then
- Trace("[CustomSpeedMods] OpenITG's M-Mods are not supported yet in sm-ssc.")
- --typ = mMods
- --val = string.gsub(tab[i], "M", "")
+ -- support both cases because I want to hit people -freem
+ elseif string.find(tab[i],"m%d") or string.find(tab[i],"M%d") then
+ typ = mMods
+ val = string.gsub(tab[i], "m", "")
else
typ = xMods
val = string.gsub(tab[i], "x", "")
@@ -175,7 +175,7 @@ local function SpeedModSort(tab)
-- sort cMods
cMods = AnonSort(cMods)
-- sort mMods
- --mMods = AnonSort(mMods)
+ mMods = AnonSort(mMods)
local fin = {}
-- convert it back to a string since that's what it expects
for i=1,#xMods do
@@ -184,7 +184,9 @@ local function SpeedModSort(tab)
for i=1,#cMods do
table.insert(fin, "C"..cMods[i])
end
- --for i=1,#mMods do table.insert(fin, "M"..mMods[i]); end;
+ for i=1,#mMods do
+ table.insert(fin, "m"..mMods[i])
+ end
return fin
end
@@ -295,7 +297,7 @@ function SpeedMods()
end
--[[
-Copyright 2008-2009 AJ Kelly/KKI Labs.
+Copyright 2008-2011 AJ Kelly/KKI Labs.
Use freely, so long this notice and the above documentation remains.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
diff --git a/Themes/_fallback/Scripts/03 Gameplay.lua b/Themes/_fallback/Scripts/03 Gameplay.lua
index f26977c630..629453ff5a 100644
--- a/Themes/_fallback/Scripts/03 Gameplay.lua
+++ b/Themes/_fallback/Scripts/03 Gameplay.lua
@@ -11,7 +11,7 @@ function GetExtraColorThreshold()
sGame = GAMESTATE:GetCurrentGame():GetName()
local Modes = {
dance = 10,
- pump = 15,
+ pump = 21,
beat = 12,
kb7 = 10,
para = 10,
@@ -105,6 +105,10 @@ function ComboPerRow()
end
end
+function EvalUsesCheckpointsWithJudgments()
+ return (GAMESTATE:GetCurrentGame():GetName() == "pump") and true or false
+end
+
-- these need cleanup really.
function HitCombo()
sGame = GAMESTATE:GetCurrentGame():GetName()
@@ -183,7 +187,11 @@ function HoldTiming()
end
function ShowHoldJudgments()
- return not GAMESTATE:GetCurrentGame():GetName() == "pump"
+ if GAMESTATE:GetCurrentGame():GetName() == "pump" then
+ return false
+ else
+ return true
+ end
end
function HoldHeadStep()
@@ -267,4 +275,4 @@ end
function ComboUnderField()
return GetUserPrefB("UserPrefComboUnderField")
-end
\ No newline at end of file
+end
diff --git a/Themes/_fallback/Scripts/03 HSV.lua b/Themes/_fallback/Scripts/03 HSV.lua
index a4b56baa5d..c2fd988ea7 100644
--- a/Themes/_fallback/Scripts/03 HSV.lua
+++ b/Themes/_fallback/Scripts/03 HSV.lua
@@ -246,4 +246,16 @@ function Hue(color,newHue)
end
c.Hue = newHue
return HSVToColor(c)
+end;
+
+function Alpha(color,percent)
+ local c = ColorToHSV(color);
+ -- error checking
+ if percent < 0 then
+ percent = 0.0;
+ elseif percent > 1 then
+ percent = 1.0;
+ end;
+ c.Alpha = percent;
+ return HSVToColor(c);
end;
\ No newline at end of file
diff --git a/Themes/_fallback/Scripts/03 ProductivityHelpers.lua b/Themes/_fallback/Scripts/03 ProductivityHelpers.lua
index eb2d64bb9d..4297389fc6 100644
--- a/Themes/_fallback/Scripts/03 ProductivityHelpers.lua
+++ b/Themes/_fallback/Scripts/03 ProductivityHelpers.lua
@@ -148,7 +148,9 @@ end
-- MaskSource([clearzbuffer])
-- Sets an actor up as the source for a mask. Clears zBuffer by default.
function Actor:MaskSource(noclear)
- self:clearzbuffer(noclear or true)
+ if noclear == true then
+ self:clearzbuffer(true)
+ end
self:zwrite(true)
self:blend('BlendMode_NoEffect')
end
@@ -224,10 +226,10 @@ end;
--[[ ----------------------------------------------------------------------- ]]
--[[ profile stuff ]]
--- Profile(pn)
+-- GetPlayerOrMachineProfile(pn)
-- This returns a profile, preferably a player one.
-- If there isn't one, we fall back on the machine profile.
-function Profile(pn)
+function GetPlayerOrMachineProfile(pn)
if PROFILEMAN:IsPersistentProfile(pn) then
-- player profile
return PROFILEMAN:GetProfile(pn);
diff --git a/Themes/_fallback/Scripts/03 ThemePrefs.lua b/Themes/_fallback/Scripts/03 ThemePrefs.lua
index dfa9e3e695..90d7d73a19 100644
--- a/Themes/_fallback/Scripts/03 ThemePrefs.lua
+++ b/Themes/_fallback/Scripts/03 ThemePrefs.lua
@@ -150,7 +150,7 @@ function InitUserPrefs()
end;
function UserPrefScoringMode()
- local baseChoices = { 'DDR 1stMIX', 'DDR 4thMIX', 'DDR Extreme', 'DDR SuperNOVA', 'DDR SuperNOVA 2', 'MIGS' }; --'[SSC] Radar Master'
+ local baseChoices = { 'DDR 1stMIX', 'DDR 4thMIX', 'DDR Extreme', 'DDR SuperNOVA', 'DDR SuperNOVA 2', 'MIGS', 'HYBRID' }; --'[SSC] Radar Master'
local t = {
Name = "UserPrefScoringMode";
LayoutType = "ShowAllInRow";
diff --git a/Themes/_fallback/Scripts/04 Scoring.lua b/Themes/_fallback/Scripts/04 Scoring.lua
index 27a1d6155a..5d47fbd89a 100644
--- a/Themes/_fallback/Scripts/04 Scoring.lua
+++ b/Themes/_fallback/Scripts/04 Scoring.lua
@@ -67,7 +67,7 @@ r['DDR 4thMIX'] = function(params, pss)
local capScore = 999999999;
local bestPoints = scoreLookupTable['TapNoteScore_W1'];
local bestCombo = bestPoints and comboBonusForThisStep or 0;
- pss:SeCurMaxScore(clamp(pss:GeCurMaxScore()+bestPoints+bestCombo,0,capScore));
+ 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));
@@ -84,14 +84,19 @@ r['DDR Extreme'] = function(params, pss)
setmetatable(judgmentBase, ZeroIfNotFound);
local steps = GAMESTATE:GetCurrentSteps(params.Player);
local radarValues = steps:GetRadarValues(params.Player);
- local baseScore = (steps:IsAnEdit() and
- 5 or steps:GetMeter()) * 1000000;
+ local meter = steps:GetMeter();
+ if (steps:IsAnEdit()) then
+ meter = 5;
+ elseif (meter < 1) then
+ meter = 1;
+ elseif (meter > 10) then
+ meter = 10;
+ end;
+ local baseScore = meter * 1000000;
if (GAMESTATE:GetCurrentSong():IsMarathon()) then
baseScore = baseScore * 3;
- else
- if (GAMESTATE:GetCurrentSong():IsLong()) then
- baseScore = baseScore * 2;
- end;
+ elseif (GAMESTATE:GetCurrentSong():IsLong()) then
+ baseScore = baseScore * 2;
end;
local totalItems = GetTotalItems(radarValues);
local singleStep = (1 + totalItems) * totalItems / 2;
@@ -122,6 +127,47 @@ r['DDR Extreme'] = function(params, pss)
Shared.CurrentStep[pn] = 0; -- Reset for the next song.
end;
end;
+
+-----------------------------------------------------------
+--HYBRID Scoring
+-----------------------------------------------------------
+r['HYBRID'] = function(params, pss)
+ local multLookup =
+ {
+ ['TapNoteScore_W1'] = 10,
+ ['TapNoteScore_W2'] = 9,
+ ['TapNoteScore_W3'] = 5
+ };
+ setmetatable(multLookup, ZeroIfNotFound);
+ local radarValues = GetDirectRadar(params.Player);
+ local totalItems = GetTotalItems(radarValues);
+ -- 1+2+3+...+totalItems の値
+ local sTotal = (totalItems+1)*totalItems/2;
+ -- [en] Score for one song
+ -- [ja] 1つあたりのスコア
+ local sOne = math.floor(100000000/sTotal);
+ -- [ja] 端数は最後の1ステップで加算するのでその値を取得
+ local sLast = 100000000-(sOne*sTotal);
+ -- [ja] 現在何個目の譜面か
+ pss:SetCurMaxScore(pss:GetCurMaxScore()+1);
+ -- [en] current score
+ -- [ja] 今回のスコア
+ local vScore = sOne*(pss:GetCurMaxScore());
+ if (params.HoldNoteScore == 'HoldNoteScore_Held') then
+ vScore = vScore;
+ else
+ if (params.HoldNoteScore == 'HoldNoteScore_LetGo') then
+ vScore = 0;
+ else
+ vScore = vScore*multLookup[params.TapNoteScore]/10;
+ end;
+ end;
+ if ((vScore > 0) and (pss:GetCurMaxScore() == totalItems)) then
+ vScore = vScore+sLast;
+ end;
+ pss:SetScore(pss:GetScore()+vScore);
+end;
+
-----------------------------------------------------------
--DDR SuperNOVA(-esque) scoring
-----------------------------------------------------------
@@ -148,24 +194,43 @@ end;
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 base = 100000 / totalItems;
- local hold = base * (params.HoldNoteScore == 'HoldNoteScore_Held' and 1 or 0);
- local maxScore = (base * multLookup['TapNoteScore_W1']) + hold;
- pss:SetCurMaxScore(pss:GetCurMaxScore() + (math.round(maxScore) * 10));
- local preW1 = base * multLookup[params.TapNoteScore];
- local buildScore = (preW1 - (IsW1Allowed(params.TapNoteScore) and 10 or 0)) + hold;
- pss:SetScore(pss:GetScore() + (math.round(buildScore) * 10));
+ local totalItems = GetTotalItems(radarValues);
+
+ -- handle holds
+ local maxAdd = 0;
+ if params.HoldNoteScore == 'HoldNoteScore_Held' then
+ maxAdd = 10;
+ elseif params.HoldNoteScore == 'HoldNoteScore_LetGo' then
+ maxAdd = 0;
+ else
+ maxAdd = multLookup[params.TapNoteScore];
+ if params.TapNoteScore == 'TapNoteScore_W2' or 'TapNoteScore_W3' then
+ -- [ja] 超最終手段
+ pss:SetCurMaxScore( pss:GetCurMaxScore() + 1000000 );
+ end;
+ end;
+ pss:SetCurMaxScore(pss:GetCurMaxScore() + maxAdd);
+
+ --[[
+ [ja] パフェ数取得 この方法で取得するとロングノートの場合2つカウントされる そのため使えない
+ pss:GetTapNoteScores('TapNoteScore_W2')
+ 仕方がないのでパフェ数を 1000000 単位で GetCurMaxScore に記録
+ その後、情報を分解して取り出す
+ --]]
+
+ local vScore = pss:GetCurMaxScore() % 1000000
+ local vSub = math.floor( pss:GetCurMaxScore()/1000000 )
+ pss:SetScore( math.floor(10000*vScore/totalItems) * 10 - (vSub*10) );
end;
-----------------------------------------------------------
---Radar Master (doesn't work in 1.2.1, disabled)
---don't try to "fix it up", either. you *cannot* make it work in 1.2.1.
+--Radar Master (doesn't work in sm-ssc 1.2.1, disabled)
+--todo: get this working with StepMania 5
-----------------------------------------------------------
r['[SSC] Radar Master'] = function(params, pss)
local masterTable = {
diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini
index fbe5f51939..7255b9a842 100644
--- a/Themes/_fallback/metrics.ini
+++ b/Themes/_fallback/metrics.ini
@@ -28,7 +28,7 @@ ScreenHeight=480
AutoSetStyle=GetUserPrefB("UserPrefAutoSetStyle")
# Default modifiers and noteskin.
-DefaultModifiers="default,1.5x"
+DefaultModifiers="1x"
DefaultNoteSkinName="default"
# Difficulties to show. Useful for custom games where you want to hide these.
@@ -124,6 +124,8 @@ ExtraColor=color("#ff0000") -- red
[UnlockManager]
# Unlock specific things.
AutoLockChallengeSteps=false
+AutoLockEditSteps=false
+SongsNotAdditional=true
UnlockNames=""
# useful commands:
@@ -200,6 +202,8 @@ BeatOffsetHeight=15
BeatPIHeight=2
MiniPercentBase=0.5
MiniPercentGate=1
+TinyPercentBase=0.5
+TinyPercentGate=1
DizzyHoldHeads=false
QuantizeArrowYPosition=false
@@ -411,72 +415,7 @@ SortLevel5Color=color("0,1,0,1")
# Custom system that lets you rename certain classes of difficulties to
# something else. Mostly for custom games and game emulation, PIU for example.
-# The names of which
-Names="PumpHard,PumpFreestyle,PumpNightmare,PumpHalfDouble,PumpRoutine"
-
-# Names="DanceCoupleBeginner,DanceCoupleEasy,DanceCoupleMedium,DanceCoupleHard,DanceCoupleExpert,PumpHard"
-# That get remapped to
-DanceCoupleBeginnerStepsType="StepsType_Dance_Couple"
-DanceCoupleBeginnerDifficulty="Difficulty_Beginner"
-DanceCoupleBeginnerCourseType=nil
-DanceCoupleBeginnerString="Beginner"
-#--#
-DanceCoupleEasyStepsType="StepsType_Dance_Couple"
-DanceCoupleEasyDifficulty="Difficulty_Easy"
-DanceCoupleEasyCourseType=nil
-DanceCoupleEasyString="Easy"
-#--#
-DanceCoupleMediumStepsType="StepsType_Dance_Couple"
-DanceCoupleMediumDifficulty="Difficulty_Medium"
-DanceCoupleMediumCourseType=nil
-DanceCoupleMediumString="Medium"
-#--#
-DanceCoupleHardStepsType="StepsType_Dance_Couple"
-DanceCoupleHardDifficulty="Difficulty_Hard"
-DanceCoupleHardCourseType=nil
-DanceCoupleHardString="Hard"
-#--#
-DanceCoupleExpertStepsType="StepsType_Dance_Couple"
-DanceCoupleExpertDifficulty="Difficulty_Expert"
-DanceCoupleExpertCourseType=nil
-DanceCoupleExpertString="Expert"
-#===#
-PumpHardStepsType="StepsType_Pump_Single"
-PumpHardDifficulty="Difficulty_Hard"
-PumpHardCourseType=nil
-PumpHardString="Crazy"
-#--#
-PumpFreestyleStepsType="StepsType_Pump_Double"
-PumpFreestyleDifficulty="Difficulty_Medium"
-PumpFreestyleCourseType=nil
-PumpFreestyleString="Freestyle"
-#--#
-PumpNightmareStepsType="StepsType_Pump_Double"
-PumpNightmareDifficulty="Difficulty_Hard"
-PumpNightmareCourseType=nil
-PumpNightmareString="Nightmare"
-#--#
-PumpHalfDoubleStepsType="StepsType_Pump_Halfdouble"
-PumpHalfDoubleDifficulty="Difficulty_Medium"
-PumpHalfDoubleCourseType=nil
-PumpHalfDoubleString="HalfDouble"
-#--#
-PumpRoutineStepsType="StepsType_Pump_Routine"
-PumpRoutineDifficulty="Difficulty_Medium"
-PumpRoutineCourseType=nil
-PumpRoutineString="Routine"
-#
-# Difficulty_Beginner-StepsType_Pump_Single=Easy
-# Difficulty_Easy-StepsType_Pump_Single=Normal
-# Difficulty_Medium-StepsType_Pump_Single=Hard
-# Difficulty_Hard-StepsType_Pump_Single=Crazy
-# Difficulty_Medium-StepsType_Pump_Halfdouble=Half-Double
-# Difficulty_Medium-StepsType_Pump_Double=Freestyle
-# Difficulty_Hard-StepsType_Pump_Double=Nightmare
-# Difficulty_Edit-StepsType_Pump_Single=Edit
-# Difficulty_Edit-StepsType_Pump_Halfdouble=Edit
-# Difficulty_Edit-StepsType_Pump_Double=Edit
-# Course=Progressive
+Names=
[DifficultyList]
# A list that shows difficulties in a song.
@@ -606,7 +545,19 @@ OverY=0
[LifeMeterBattery]
# The bar that shows up in Oni mode.
+# any score below this one will cause you to lose a life.
+MinScoreToKeepLife='TapNoteScore_W3'
+# how many lives you'll lose upon doing so.
+SubtractLives=1
+# how many lives you'll lose hitting a mine
+MinesSubtractLives=1
+# how many lives a successful hold will net you.
+HeldAddLives=0
+# how many lives an unsuccessful hold will cost you.
+LetGoSubtractLives=1
+# How many lives trigger the "Danger" state.
+DangerThreshold=1
# How long it flashes when you lose a life.
BatteryBlinkTime=1.2
# Where the batteries are
@@ -614,11 +565,16 @@ BatteryP1X=-92
BatteryP1Y=2
BatteryP2X=92
BatteryP2Y=2
-# Where your live count is
+# Where your life count is
+NumLivesFormat="x%d"
NumLivesP1X=-92
NumLivesP1Y=0
+NumLivesP1GainLifeCommand=
+NumLivesP1LoseLifeCommand=zoom,1.5;linear,0.15;zoom,1
NumLivesP2X=92
NumLivesP2Y=0
+NumLivesP2GainLifeCommand=
+NumLivesP2LoseLifeCommand=zoom,1.5;linear,0.15;zoom,1
[LifeMeterBattery Percent]
# The percentage on the bar. I wouldn't even bother changing this, because I
@@ -1012,8 +968,8 @@ StopOffsetX=50
DelayOffsetX=120
WarpOffsetX=90
TimeSignatureOffsetX=30
-TickcountOffsetX=70
-ComboOffsetX=50
+TickcountOffsetX=50
+ComboOffsetX=70
LabelOffsetX=130
SpeedOffsetX=30
ScrollOffsetX=100
@@ -1067,7 +1023,8 @@ CheckpointsUseTickcounts=(GAMESTATE:GetCurrentGame():GetName() == "pump")
; deprecated?
CheckpointsUseTimeSignatures=false
CheckpointsTapsSeparateJudgment=CheckpointsTapsSeparateJudgment()
-CheckpointsFlashOnHold=false
+; someone misunderstood me :x -Daisu
+CheckpointsFlashOnHold=(GAMESTATE:GetCurrentGame():GetName() == "pump")
ImmediateHoldLetGo=ImmediateHoldLetGo()
RequireStepOnHoldHeads=HoldHeadStep()
RequireStepOnMines=false
@@ -1081,6 +1038,7 @@ ComboStoppedAt=50
AttackRunTimeRandom=6
AttackRunTimeMine=7
BattleRaveMirror=true
+MModHighCap=600
[PlayerOptions]
RandomSpeedChance=0.2
@@ -1527,7 +1485,7 @@ AllowRepeatingInput=false
PreSwitchPageSeconds=0
PostSwitchPageSeconds=0
ScrollerSecondsPerItem=0
-ScrollerNumItemsToDraw=1024
+ScrollerNumItemsToDraw=16
ScrollerTransform=function(self,offset,itemIndex,numItems) end
ScrollerSubdivisions=1
OverrideSleepAfterTweenOffSeconds=false
@@ -1791,8 +1749,7 @@ CodeUp="+MenuUp"
CodeUp2="+Up"
CodeDown="+MenuDown"
CodeDown2="+Down"
-# Holding Start let us skip ( annoying )
-CodeStart="~Start,+Start"
+CodeStart="+Start"
CodeBack="Back"
CodeCenter="Center"
CodeDownLeft="DownLeft"
@@ -1817,6 +1774,7 @@ ChoiceDouble="name,Double;style,double;text,Double;screen,"..Branch.AfterSelectP
ChoiceSolo="name,Solo;style,solo;text,Solo;screen,"..Branch.AfterSelectPlayMode()
ChoiceVersus="name,Versus;style,versus;text,Versus;screen,"..Branch.AfterSelectPlayMode()
ChoiceCouple="name,Couple;style,couple;text,Couple;screen,"..Branch.AfterSelectPlayMode()
+ChoiceRoutine="name,Routine;style,routine;text,Routine;screen,"..Branch.AfterSelectPlayMode()
ChoiceHalfDouble="name,HalfDouble;style,halfdouble;text,HalfDouble;screen,"..Branch.AfterSelectPlayMode()
Choice5Keys="name,5Keys;style,single5;text,5Keys;screen,"..Branch.AfterSelectPlayMode()
Choice7Keys="name,7Keys;style,single7;text,7Keys;screen,"..Branch.AfterSelectPlayMode()
@@ -2064,7 +2022,8 @@ ForceTimer=true
TimerMetricsGroup="MenuTimerNoSound"
TimerSeconds=5
#
-
+ScreenBeginCommand=%SetFail
+#
[ScreenOptions]
Fallback="ScreenWithMenuElements"
NavigationMode="normal"
@@ -2134,6 +2093,7 @@ OptionRowExitMetricsGroup="OptionRowExit"
Fallback="ScreenOptions"
Class="ScreenOptionsMaster"
NoteSkinSortOrder=""
+StepsUseChartName=false
# ExitItem is an exit row with the "Exit" text as a menu item; ExitTitle
# uses the menu title.
@@ -2177,22 +2137,23 @@ Accel,5="mod,boomerang;name,Boomerang"
# Accel,5="mod,expand;name,Expand"
# Accel,6="mod,boomerang;name,Boomerang"
-Effect="14;selectmultiple"
+Effect="15;selectmultiple"
EffectDefault="mod,no drunk,no dizzy,,no twirl,no roll,no confusion,no mini,no tiny,no flip,no invert,no tornado,no tipsy,no bumpy,no beat,no xmode"
Effect,1="mod,drunk;name,Drunk"
Effect,2="mod,dizzy;name,Dizzy"
Effect,3="mod,twirl;name,Twirl"
Effect,4="mod,roll;name,Roll"
Effect,5="mod,confusion;name,Confusion"
-Effect,6="mod,tiny;name,Tiny"
-Effect,7="mod,-100% mini;name,Big"
-Effect,8="mod,flip;name,Flip"
-Effect,9="mod,invert;name,Invert"
-Effect,10="mod,tornado;name,Tornado"
-Effect,11="mod,tipsy;name,Tipsy"
-Effect,12="mod,bumpy;name,Bumpy"
-Effect,13="mod,beat;name,Beat"
-Effect,14="mod,45% xmode;name,XMode"
+Effect,6="mod,mini;name,Mini"
+Effect,7="mod,tiny;name,Tiny"
+Effect,8="mod,-100% mini;name,Big"
+Effect,9="mod,flip;name,Flip"
+Effect,10="mod,invert;name,Invert"
+Effect,11="mod,tornado;name,Tornado"
+Effect,12="mod,tipsy;name,Tipsy"
+Effect,13="mod,bumpy;name,Bumpy"
+Effect,14="mod,beat;name,Beat"
+Effect,15="mod,45% xmode;name,XMode"
EffectsReceptor="selectmultiple"
EffectsReceptorDefault=""
@@ -2335,18 +2296,11 @@ Mines,2="name,On"
Mines,3="mod,mines;name,Add"
Mines,4="mod,attackmines;name,AttackMines"
-# Mines="4"
-# MinesDefault="mod,no nomines,no mines, no attackmines"
-# Mines,1="mod,nomines;name,Off"
-# Mines,2="name,On"
-# Mines,3="mod,mines;name,Add"
-# Mines,4="mod,attackmines;name,AttackMines"
-
Attacks="3"
-AttacksDefault="mod,songattacks"
-Attacks,3="mod,no randomattacks,no songattacks;name,Off"
+AttacksDefault="mod,no randomattacks, no noattacks"
+Attacks,1="name,On"
Attacks,2="mod,randomattacks;name,RandomAttacks"
-Attacks,1="name,SongAttacks"
+Attacks,3="mod,noattacks;name,Off"
PlayerAutoPlay="2"
PlayerAutoPlayDefault="mod,no playerautoplay"
@@ -2357,7 +2311,7 @@ Hide="3;selectmultiple"
HideDefault="mod,no dark,no blind,no cover"
Hide,1="mod,dark;name,Dark"
Hide,2="mod,blind;name,Blind"
-Hide,3="mod,60% cover;name,Cover"
+Hide,3="mod,80% cover;name,Cover"
# Hide="3"
# HideDefault="mod,no dark,no blind"
@@ -2373,12 +2327,6 @@ Persp,3="mod,space;name,Space"
Persp,4="mod,hallway;name,Hallway"
Persp,5="mod,distant;name,Distant"
-ScoreDisplay="3"
-ScoreDisplayDefault="mod,addscore"
-ScoreDisplay,1="mod,addscore;name,Add"
-ScoreDisplay,2="mod,subtractscore;name,Subtract"
-ScoreDisplay,3="mod,averagescore;name,Average"
-
# Song options
# LifeType="3;together"
LifeType=(GAMESTATE:IsCourseMode() and 3 or 2)..";together"
@@ -2507,6 +2455,7 @@ LineHighlightP2ChangeToExitCommand=
CursorOnCommand=visible,false
[ScreenOptionsService]
+AllowOperatorMenuButton=false
Class="ScreenOptionsMaster"
Fallback="ScreenOptionsSimpleService"
#
@@ -2884,7 +2833,6 @@ Line11="list,Attacks"
Line12="list,PlayerAutoPlay"
Line13="list,Hide"
Line14="list,Persp"
-Line15="list,ScoreDisplay"
Line16="list,Steps"
Line17="list,Characters"
@@ -3276,10 +3224,13 @@ PlayerType="PlayerShared"
Class="ScreenEvaluation"
Fallback="ScreenWithMenuElements"
#
+NextScreen=Branch.AfterEvaluation()
+PrevScreen=Branch.AfterEvaluation()
+#
LightsMode="LightsMode_MenuStartOnly"
#
Summary=false
-CheckpointsWithJudgments=false
+CheckpointsWithJudgments=EvalUsesCheckpointsWithJudgments()
#
TimerSeconds=20
#
@@ -3361,30 +3312,34 @@ DetailLineFormat="%3d/%3d"
[ScreenEvaluationNormal]
Fallback="ScreenEvaluation"
#
-NextScreen="ScreenProfileSave"
+NextScreen=Branch.AfterEvaluation()
+PrevScreen=Branch.AfterEvaluation()
[ScreenEvaluationSummary]
Fallback="ScreenEvaluation"
#
-NextScreen="ScreenSelectMusic"
+NextScreen=Branch.AfterSummary()
#
Summary=true
-#
[ScreenNameEntry]
# !!! #
Class="ScreenNameEntry"
Fallback="ScreenWithMenuElementsBlank"
+#
TimerX=SCREEN_CENTER_X+0
TimerY=SCREEN_CENTER_Y-210
+#
CategoryY=SCREEN_CENTER_Y+190
CategoryZoom=0.7
+#
CharsZoomSmall=1.0
CharsZoomLarge=1.5
CharsSpacingY=40
CharsChoices=" ABCDEFGHIJKLMNOPQRSTUVWXYZ"
ScrollingCharsCommand=diffuse,0.6,0.8,0.8,1
SelectedCharsCommand=diffuse,0.8,1,1,1
+#
ReceptorArrowsY=SCREEN_CENTER_Y-140
NumCharsToDrawBehind=2
NumCharsToDrawTotal=10
@@ -3394,7 +3349,9 @@ TimerSeconds=24
TimerStealth=false
ShowStyleIcon=false
MaxRankingNameLength=4
+#
NextScreen="ScreenProfileSave"
+#
PlayerP1OnePlayerOneSideX=SCREEN_CENTER_X-160
PlayerP2OnePlayerOneSideX=SCREEN_CENTER_X+160
PlayerP1TwoPlayersTwoSidesX=SCREEN_CENTER_X-160
@@ -3402,6 +3359,31 @@ PlayerP2TwoPlayersTwoSidesX=SCREEN_CENTER_X+160
PlayerP1OnePlayerTwoSidesX=SCREEN_CENTER_X
PlayerP2OnePlayerTwoSidesX=SCREEN_CENTER_X
+[ScreenNameEntryTraditional]
+Class="ScreenNameEntryTraditional"
+Fallback="ScreenWithMenuElements"
+#
+TimerSeconds=30
+#
+RepeatRate=15
+RepeatDelay=1/4
+#
+NextScreen="ScreenProfileSaveSummary"
+#
+HelpText="Enter your name!"
+#
+CancelTransitionsOut=true
+MaxRankingNameLength=4
+CodeNames="Backspace,Left,Right,NextRow1=NextRow,NextRow2=NextRow,PrevRow,JumpToEnter,Enter"
+CodeLeft="+MenuLeft"
+CodeRight="+MenuRight"
+CodePrevRow="+MenuUp"
+CodeNextRow1="+MenuDown"
+CodeNextRow2="Select,~Select"
+CodeBackspace="@Select-MenuLeft"
+CodeJumpToEnter="@Select-Start"
+CodeEnter="Start"
+
[ScreenProfileSave]
Class="ScreenProfileSave"
Fallback="ScreenWithMenuElementsBlank"
@@ -3414,8 +3396,8 @@ TimerSeconds=-1
[ScreenProfileSaveSummary]
Fallback="ScreenProfileSave"
#
-NextScreen="ScreenGameOver"
-PrevScreen="ScreenGameOver"
+NextScreen=Branch.AfterSaveSummary()
+PrevScreen=Branch.AfterSaveSummary()
[ScreenGameOver]
Class="ScreenEnding"
@@ -3638,19 +3620,22 @@ PlayRecordHelpOnCommand=halign,0;valign,0;shadowlength,1
LoopOnChartEnd=true
-CurrentBeatFormat="%s:\n %.5f\n"
-CurrentSecondFormat="%s:\n %.5f\n"
-SnapToFormat="%s:\n %s\n"
-SelectionBeatBeginFormat="%s:\n %.5f"
+CurrentBeatFormat="%s:\n %.6f\n"
+CurrentSecondFormat="%s:\n %.6f\n"
+SnapToFormat="%s: %s\n"
+SelectionBeatBeginFormat="%s:\n %.6f"
SelectionBeatUnfinishedFormat=" ...\n"
-SelectionBeatEndFormat="-%.5f\n"
+SelectionBeatEndFormat="-%.6f\n"
DifficultyFormat="%s:\n %s\n"
-RoutinePlayerFormat="%s:\n %d\n"
+RoutinePlayerFormat="%s: %d\n"
DescriptionFormat="%s:\n %s\n"
+StepAuthorFormat="%s:\n %s\n"
+ChartNameFormat="%s:\n %s\n"
ChartStyleFormat="%s:\n %s\n"
MainTitleFormat="%s:\n %s\n"
SubtitleFormat="%s:\n %s\n"
TapNoteTypeFormat="%s: %s\n"
+SegmentTypeFormat="%s: %s\n"
NumStepsFormat="%s: %d\n"
NumJumpsFormat="%s: %d\n"
NumHoldsFormat="%s: %d\n"
@@ -3659,10 +3644,18 @@ NumHandsFormat="%s: %d\n"
NumRollsFormat="%s: %d\n"
NumLiftsFormat="%s: %d\n"
NumFakesFormat="%s: %d\n"
+NumStepsFormatTwoPlayer="%s: %d/%d\n"
+NumJumpsFormatTwoPlayer="%s: %d/%d\n"
+NumHoldsFormatTwoPlayer="%s: %d/%d\n"
+NumMinesFormatTwoPlayer="%s: %d/%d\n"
+NumHandsFormatTwoPlayer="%s: %d/%d\n"
+NumRollsFormatTwoPlayer="%s: %d/%d\n"
+NumLiftsFormatTwoPlayer="%s: %d/%d\n"
+NumFakesFormatTwoPlayer="%s: %d/%d\n"
TimingModeFormat="%s:\n %s\n"
-Beat0OffsetFormat="%s:\n %.5f secs\n"
-PreviewStartFormat="%s:\n %.5f secs\n"
-PreviewLengthFormat="%s:\n %.5f secs\n"
+Beat0OffsetFormat="%s:\n %.6f secs\n"
+PreviewStartFormat="%s:\n %.6f secs\n"
+PreviewLengthFormat="%s:\n %.6f secs\n"
[ScreenPracticeMenu]
Fallback="ScreenEditMenu"
@@ -3753,9 +3746,15 @@ TitleX=SCREEN_CENTER_X-80
[ScreenMiniMenuAreaMenu]
Fallback="ScreenMiniMenu"
+[ScreenMiniMenuAlterMenu]
+Fallback="ScreenMiniMenu"
+
[ScreenMiniMenuStepsInformation]
Fallback="ScreenMiniMenu"
+[ScreenMiniMenuStepsData]
+Fallback="ScreenMiniMenu"
+
[ScreenMiniMenuSongInformation]
Fallback="ScreenMiniMenu"
@@ -3949,6 +3948,7 @@ PrevScreen="ScreenNetRoom"
NextScreen="ScreenStageInformation"
NoSongsScreen=Branch.TitleMenu()
RoomSelectScreen="ScreenNetRoom"
+PlayerOptionsScreen="ScreenPlayerOptions"
Codes="CodeDetectorOnline"
ShowStyleIcon=false
diff --git a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/basemeter.png b/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/basemeter.png
deleted file mode 100644
index 469e617168..0000000000
Binary files a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/basemeter.png and /dev/null differ
diff --git a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/center (doubleres).png b/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/center (doubleres).png
deleted file mode 100644
index f792417219..0000000000
Binary files a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/center (doubleres).png and /dev/null differ
diff --git a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/corner (doubleres).png b/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/corner (doubleres).png
deleted file mode 100644
index f509dde7a7..0000000000
Binary files a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/corner (doubleres).png and /dev/null differ
diff --git a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/danger.png b/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/danger.png
deleted file mode 100644
index 3adbe6ff21..0000000000
Binary files a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/danger.png and /dev/null differ
diff --git a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/decoration_corner (doubleres).png b/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/decoration_corner (doubleres).png
deleted file mode 100644
index 865e4ce12b..0000000000
Binary files a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/decoration_corner (doubleres).png and /dev/null differ
diff --git a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/default.lua b/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/default.lua
deleted file mode 100644
index 362e5013a2..0000000000
--- a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/default.lua
+++ /dev/null
@@ -1,512 +0,0 @@
-local t = Def.ActorFrame{}
-
-local newBPS;
-local oldBPS;
-
-
--- DECORATIONS ////////////////////////
-
--- Left Hex Corner Decoration
-t[#t+1] = LoadActor("decoration_corner") .. {
- InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_1));
- OnCommand=cmd(horizalign,left;x,SCREEN_LEFT;vertalign,top;y,SCREEN_TOP;zoomy,0.4;zoomx,0.6;diffusealpha,0.3;blend,Blend.Add);
-};
-
--- Right Hex Corner Decoration
-t[#t+1] = LoadActor("decoration_corner") .. {
- InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_2));
- OnCommand=cmd(horizalign,left;x,SCREEN_RIGHT;vertalign,top;y,SCREEN_TOP;zoomy,0.4;;zoomx,-0.6;diffusealpha,0.3;blend,Blend.Add);
-};
-
-
--- WAVY LINE (thanks AJ) ////////////////////////
-
-
---P1
-t[#t+1] = LoadActor("hot_lores") .. {
- OnCommand=cmd(diffusealpha,0;visible,GAMESTATE:IsHumanPlayer(PLAYER_1);horizalign,left;x,SCREEN_LEFT+18;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH/2-26;texcoordvelocity,0.1,0;queuecommand,"Begin");
- BeginCommand=function(self)
- local style = GAMESTATE:GetCurrentStyle();
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- self:visible(false);
- else
- local move = GAMESTATE:GetSongBPS()/2
- if GAMESTATE:GetSongFreeze() then
- move = 0;
- end
- self:texcoordvelocity(move,0);
- self:sleep(0.001);
- self:queuecommand("Begin");
- end;
- end;
- LifeChangedMessageCommand=function(self,params)
- if params.Player == PLAYER_1 then
- local lifeP1=params.LifeMeter:GetLife();
- if lifeP1>=THEME:GetMetric("LifeMeterBar", "HotValue") then
- self:diffusealpha(0.5);
- else
- self:diffusealpha(0);
- end;
- end;
- end;
-};
-
---P2
-t[#t+1] = LoadActor("hot_lores") .. {
- OnCommand=cmd(diffusealpha,0;visible,GAMESTATE:IsHumanPlayer(PLAYER_2);horizalign,left;x,SCREEN_RIGHT-18;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,(SCREEN_WIDTH/2-26)*-1;texcoordvelocity,0.1,0;queuecommand,"Begin");
- BeginCommand=function(self)
- local style = GAMESTATE:GetCurrentStyle();
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- self:visible(false);
- else
- local move = GAMESTATE:GetSongBPS()/2
- if GAMESTATE:GetSongFreeze() then
- move = 0;
- end
- self:texcoordvelocity(move,0);
- self:sleep(0.001);
- self:queuecommand("Begin");
- end;
- end;
- LifeChangedMessageCommand=function(self,params)
- if params.Player == PLAYER_2 then
- local lifeP2=params.LifeMeter:GetLife();
- if lifeP2>=THEME:GetMetric("LifeMeterBar", "HotValue") then
- self:diffusealpha(0.5);
- else
- self:diffusealpha(0);
- end;
- end;
- end;
-};
-
---Double
---customtexturerect,0,0,[PixelsToCoverWidth]/[ImageWidth],[PixelsToCoverHeight]/[ImageHeight]
---I said that I was gonna write it down. thx midi
-
-t[#t+1] = LoadActor("hot_lores") .. {
- OnCommand=cmd(diffusealpha,0;horizalign,left;x,SCREEN_LEFT+18;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH-36;texcoordvelocity,0.1,0;customtexturerect,0,0,600/(SCREEN_WIDTH-36),1;queuecommand,"Begin");
- BeginCommand=function(self)
- local style = GAMESTATE:GetCurrentStyle();
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- local move = GAMESTATE:GetSongBPS()/2
- if GAMESTATE:GetSongFreeze() then
- move = 0;
- end
- self:texcoordvelocity(move,0);
- self:sleep(0.001);
- self:queuecommand("Begin");
- else
- self:visible(false);
- end;
- end;
- LifeChangedMessageCommand=function(self,params)
- local life=params.LifeMeter:GetLife();
- if life>=THEME:GetMetric("LifeMeterBar", "HotValue") then
- self:diffusealpha(0.5);
- else
- self:diffusealpha(0);
- end;
- end;
-};
-
-
--- DANGER ////////////////////////
-
-
---DANGER P1 single
-t[#t+1] = LoadActor("danger") .. {
- InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_1);horizalign,left;x,SCREEN_LEFT+18;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH/2-26;zoomy,0.5);
- OnCommand=cmd(effectclock,"bgm";diffusealpha,1;linear,0.2;diffusealpha,0.25;linear,0.2;diffusealpha,1;queuecommand,"On");
- LifeChangedMessageCommand=function(self,params)
- if params.Player == PLAYER_1 then
- local lifeP1 = params.LifeMeter:GetLife();
- if lifeP1 <= THEME:GetMetric("LifeMeterBar", "DangerThreshold") then
- local style = GAMESTATE:GetCurrentStyle();
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- self:visible(false);
- else
- self:visible(true);
- end;
- else
- self:visible(false);
- end;
- end;
-end;
-
-};
-
---DANGER P2 single
-t[#t+1] = LoadActor("danger") .. {
- InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_2);horizalign,right;x,SCREEN_RIGHT-18;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH/2-26;zoomy,0.5);
- OnCommand=cmd(effectclock,"bgm";diffusealpha,1;linear,0.2;diffusealpha,0.25;linear,0.2;diffusealpha,1;queuecommand,"On");
- LifeChangedMessageCommand=function(self,params)
- if params.Player == PLAYER_2 then
- local lifeP2 = params.LifeMeter:GetLife();
- if lifeP2 <= THEME:GetMetric("LifeMeterBar", "DangerThreshold") then
- local style = GAMESTATE:GetCurrentStyle();
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- self:visible(false);
- else
- self:visible(true);
- end;
- else
- self:visible(false);
- end;
- end;
- end;
-};
-
---DANGER double
-t[#t+1] = LoadActor("danger") .. {
- InitCommand=cmd(visible,false;horizalign,center;x,SCREEN_CENTER_X;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH-36;zoomy,0.5);
- OnCommand=cmd(effectclock,"bgm";diffusealpha,1;linear,0.2;diffusealpha,0.25;linear,0.2;diffusealpha,1;queuecommand,"On");
- LifeChangedMessageCommand=function(self,params)
- local life = params.LifeMeter:GetLife();
- local style = GAMESTATE:GetCurrentStyle();
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- if life <= THEME:GetMetric("LifeMeterBar", "DangerThreshold") then
- self:visible(true);
- else
- self:visible(false);
- end;
- end;
- end;
-};
-
-
-
--- METERS ////////////////////////
-
-
-
-
-
----basemeter masked P1
-t[#t+1] = LoadActor("basemeter") .. {
- InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_1);horizalign,left;x,SCREEN_LEFT+18;valign,0.5;y,SCREEN_TOP+41;zoomy,0.5;blend,Blend.Add);
- OnCommand=cmd(bounce;effectmagnitude,-40,0,0;effectclock,"bgm";effecttiming,2,0,0,0;);
- LifeChangedMessageCommand=function(self,params)
- if params.Player == PLAYER_1 then
- local style = GAMESTATE:GetCurrentStyle();
- local lifeP1 = params.LifeMeter:GetLife();
- if GAMESTATE:IsHumanPlayer(PLAYER_1)==true then
- if lifeP1==0 then
- self:visible(false);
- else
-
- if lifeP1==1 then
- self:effectmagnitude(0,0,0);
- else
- self:effectmagnitude(-40,0,0);
- end;
-
- self:visible(true);
- end
- end
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- self:zoomtowidth((SCREEN_WIDTH-40)*lifeP1+5);
- else
- self:zoomtowidth((SCREEN_WIDTH/2-26)*lifeP1);
- end;
-
- end;
- end;
-
-};
-
-
-
-
-
-
-
----basemeter masked P2
-t[#t+1] = LoadActor("basemeter") .. {
- InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_2);horizalign,right;x,SCREEN_RIGHT+18;valign,0.5;y,SCREEN_TOP+41;zoomy,0.5;blend,Blend.Add;queuecommand,"Set");
- OnCommand=cmd(bob;effectmagnitude,40,0,0;effectclock,"bgm";effecttiming,1,0,0,0;);
- SetCommand=function(self,params)
- local style = GAMESTATE:GetCurrentStyle();
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- self:effectmagnitude(-40,0,0);
- self:horizalign(left);
- self:x(SCREEN_LEFT+18);
- end;
- end;
-
- LifeChangedMessageCommand=function(self,params)
- if params.Player == PLAYER_2 then
- local style = GAMESTATE:GetCurrentStyle();
- local lifeP2 = params.LifeMeter:GetLife();
- if GAMESTATE:IsHumanPlayer(PLAYER_2)==true then
- if lifeP2==0 then
- self:visible(false);
- else
-
- if lifeP2==1 then
- self:effectmagnitude(0,0,0);
- else
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- self:effectmagnitude(-40,0,0);
- else
- self:effectmagnitude(40,0,0);
- end
- end;
-
- self:visible(true);
- end
- end
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- self:zoomtowidth((SCREEN_WIDTH-40)*lifeP2);
- else
- self:zoomtowidth(((SCREEN_WIDTH/2-26)*lifeP2)+40);
- end;
-
- end;
- end;
-
-};
-
-
-
-
--- FRAMES & TIPS ////////////////////////
-
-
--- Left Corner
-t[#t+1] = LoadActor("mask") .. {
- OnCommand=cmd(horizalign,right;x,SCREEN_LEFT+130;vertalign,top;y,SCREEN_TOP+12;zoom,0.45;queuecommand,"Set");
- SetCommand = function(self)
- local style = GAMESTATE:GetCurrentStyle();
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- self:visible(true);
- else
- if GAMESTATE:IsHumanPlayer(PLAYER_1) == true then
- self:visible(true);
- else
- self:visible(false);
- end;
- end;
- end;
-};
-
--- Right Corner
-t[#t+1] = LoadActor("mask") .. {
- OnCommand=cmd(horizalign,right;x,SCREEN_RIGHT-130;vertalign,top;y,SCREEN_TOP+12;zoomx,-0.45;zoomy,0.45;queuecommand,"Set");
-SetCommand = function(self)
- local style = GAMESTATE:GetCurrentStyle();
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- self:visible(true);
- else
- if GAMESTATE:IsHumanPlayer(PLAYER_2) == true then
- self:visible(true);
- else
- self:visible(false);
- end;
- end;
- end;
-};
-
-
--- Left Corner
-t[#t+1] = LoadActor("corner") .. {
- OnCommand=cmd(horizalign,left;x,SCREEN_LEFT+15;vertalign,top;y,SCREEN_TOP+16;zoom,0.75;queuecommand,"Set");
- SetCommand = function(self)
- local style = GAMESTATE:GetCurrentStyle();
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- self:visible(true);
- else
- if GAMESTATE:IsHumanPlayer(PLAYER_1) == true then
- self:visible(true);
- else
- self:visible(false);
- end;
- end;
- end;
-};
-
--- Right Corner
-t[#t+1] = LoadActor("corner") .. {
- OnCommand=cmd(horizalign,left;x,SCREEN_RIGHT-15;vertalign,top;y,SCREEN_TOP+16;zoomx,-0.75;zoomy,0.75;queuecommand,"Set");
-SetCommand = function(self)
- local style = GAMESTATE:GetCurrentStyle();
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- self:visible(true);
- else
- if GAMESTATE:IsHumanPlayer(PLAYER_2) == true then
- self:visible(true);
- else
- self:visible(false);
- end;
- end;
- end;
-};
-
--- Center Corner Left
-t[#t+1] = LoadActor("center") .. {
- OnCommand=cmd(horizalign,left;x,SCREEN_CENTER_X+5;vertalign,top;y,SCREEN_TOP+16;zoomx,-0.75;zoomy,0.75;queuecommand,"Set");
- SetCommand = function(self)
- local style = GAMESTATE:GetCurrentStyle();
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- self:visible(false);
- else
- if GAMESTATE:IsHumanPlayer(PLAYER_1) == true then
- self:visible(true);
- else
- self:visible(false);
- end;
- end;
- end;
-};
-
--- Center Corner Right
-t[#t+1] = LoadActor("center") .. {
- OnCommand=cmd(horizalign,left;x,SCREEN_CENTER_X-5;vertalign,top;y,SCREEN_TOP+16;zoom,0.75;queuecommand,"Set");
- SetCommand = function(self)
- local style = GAMESTATE:GetCurrentStyle();
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- self:visible(false);
- else
- if GAMESTATE:IsHumanPlayer(PLAYER_2) == true then
- self:visible(true);
- else
- self:visible(false);
- end;
- end;
- end;
-};
-
--- Center part 1
-t[#t+1] = LoadActor("frame") .. {
- OnCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_1);horizalign,left;x,SCREEN_LEFT+52.5;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH/2-85;zoomy,0.75;queuecommand,"Set";);
- SetCommand = function(self)
- local style = GAMESTATE:GetCurrentStyle();
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- self:zoomtowidth(SCREEN_WIDTH-105);
- self:visible(true)
- else
- if GAMESTATE:IsHumanPlayer(PLAYER_1) == false then
- self:visible(false)
- else
- self:visible(true)
- end
- end;
- end;
-};
-
--- Center part 2
-t[#t+1] = LoadActor("frame") .. {
- OnCommand=cmd(horizalign,right;x,SCREEN_RIGHT-52.5;vertalign,top;y,SCREEN_TOP+16;zoomtowidth,SCREEN_WIDTH/2-85;zoomy,0.75;queuecommand,"Set";);
- SetCommand = function(self)
- local style = GAMESTATE:GetCurrentStyle();
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- self:visible(false)
- else
- if GAMESTATE:IsHumanPlayer(PLAYER_2) == true then
- self:visible(true)
- else
- self:visible(false)
- end;
- end;
- end;
-};
-
-
-
----tip P1
-t[#t+1] = LoadActor("tip") .. {
- InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_1);valign,0.5;y,SCREEN_TOP+41;zoom,0.5;blend,Blend.Add;queuecommand,"Set");
- --OnCommand=cmd(bob;effectmagnitude,-40,0,0;effectclock,"bgm";effecttiming,1,0,0,0;);
- LifeChangedMessageCommand=function(self,params)
- if params.Player == PLAYER_1 then
- local style = GAMESTATE:GetCurrentStyle();
- local lifeP1 = params.LifeMeter:GetLife();
- if GAMESTATE:IsHumanPlayer(PLAYER_1)==true then
- if lifeP1==0 then
- self:visible(false);
- else
- self:visible(true);
- end
- end
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- self:x((SCREEN_WIDTH-40)*lifeP1+20);
- else
- self:x((SCREEN_WIDTH/2-26)*lifeP1+20);
- end;
-
- end;
- end;
-
-};
-
-
-
----tip P2
-t[#t+1] = LoadActor("tip") .. {
- InitCommand=cmd(visible,GAMESTATE:IsHumanPlayer(PLAYER_2);valign,0.5;y,SCREEN_TOP+41;zoom,0.5;blend,Blend.Add;);
- --OnCommand=cmd(bob;effectmagnitude,40,0,0;effectclock,"bgm";effecttiming,1,0,0,0;);
- LifeChangedMessageCommand=function(self,params)
- if params.Player == PLAYER_2 then
- local style = GAMESTATE:GetCurrentStyle();
- local lifeP2 = params.LifeMeter:GetLife();
- local fullstate;
- if GAMESTATE:IsHumanPlayer(PLAYER_2)==true then
- if lifeP2==0 then
- self:visible(false);
- else
- self:visible(true);
- end
- end
- if style:GetStyleType() == "StyleType_OnePlayerTwoSides" then
- self:x((SCREEN_WIDTH-40)*lifeP2+20);
- else
- self:x(SCREEN_RIGHT-((SCREEN_WIDTH/2-26)*lifeP2)-20);
- end;
-
- end;
- end;
-
-};
-
--- NAMES ////////////////////////
-
---P1 NAME
-t[#t+1] = LoadFont("Common Normal") .. {
- InitCommand=cmd(horizalign,left;x,SCREEN_LEFT+30;y,SCREEN_TOP+15;zoom,0.4;shadowlength,1;uppercase,true);
- BeginCommand=function(self)
- local profile = PROFILEMAN:GetProfile(PLAYER_1);
- local name = profile:GetDisplayName();
-
- if GAMESTATE:IsHumanPlayer(PLAYER_1) == true then
- if name=="" then
- self:settext("Player 1");
- else
- self:settext( name );
- end
- end
-
- end;
-
- };
-
---P2 NAME
-t[#t+1] = LoadFont("Common Normal") .. {
- InitCommand=cmd(horizalign,right;x,SCREEN_RIGHT-30;y,SCREEN_TOP+15;zoom,0.4;shadowlength,1;uppercase,true);
- BeginCommand=function(self)
- local profile = PROFILEMAN:GetProfile(PLAYER_2);
- local name = profile:GetDisplayName();
-
- if GAMESTATE:IsHumanPlayer(PLAYER_2) == true then
- if name=="" then
- self:settext("Player 2");
- else
- self:settext( name );
- end
- end
- end;
-
- };
-
-
-
-return t
\ No newline at end of file
diff --git a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/hot_lores.png b/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/hot_lores.png
deleted file mode 100644
index 6b2698696e..0000000000
Binary files a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/hot_lores.png and /dev/null differ
diff --git a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/mask.png b/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/mask.png
deleted file mode 100644
index 94585b3638..0000000000
Binary files a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/mask.png and /dev/null differ
diff --git a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/meter.png b/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/meter.png
deleted file mode 100644
index 983338f40a..0000000000
Binary files a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/meter.png and /dev/null differ
diff --git a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/tip.png b/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/tip.png
deleted file mode 100644
index 05b8c15fd5..0000000000
Binary files a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/tip.png and /dev/null differ
diff --git a/Themes/default-dev-midi/Graphics/Player judgment/default.lua b/Themes/default-dev-midi/Graphics/Player judgment/default.lua
deleted file mode 100644
index 74dba2343c..0000000000
--- a/Themes/default-dev-midi/Graphics/Player judgment/default.lua
+++ /dev/null
@@ -1,250 +0,0 @@
-local c;
-local player = Var "Player";
-local bShowProtiming = GetUserPrefB("UserPrefProtiming" .. ToEnumShortString(player) );
-
-local function MakeAverage( t )
- local sum = 0;
- for i=1,#t do
- sum = sum + t[i];
- end
- return sum / #t
-end
-
--- New
-local function PosCount( t )
- local Count = 0;
- for i=1,#t do
- if t[i] > 0 then Count = Count + 1 end
- end
- return Count
-end
-
-local function NegCount( t )
- local Count = 0;
- for i=1,#t do
- if t[i] < 0 then Count = Count + 1 end
- end
- return Count
-end
-
-
-local function StdDev( t )
- local avg = MakeAverage( t );
- local sum = 0;
- for i=1,#t do
- sum = sum + math.pow(t[i] - avg, 2);
- end
- return math.sqrt(sum / (#t - 1))
-end
-
---
-local tTotalJudgments = {};
--- Global?
---[[ tPlayerData = {};
-for pn in ivalues(GAMESTATE:GetHumanPlayers())
- tPlayerData[pn].SignedJudgments = {};
- tPlayerData[pn].AverageDifference = 0;
- tPlayerData[pn].AbsoluteDifference = 0;
- tPlayerData[pn].StandardDeviation = 0;
- tPlayerData[pn].StandardDeviation = 0;
- tPlayerData[pn].Early = 0;
- tPlayerData[pn].Late = 0;
-end ]]
---
-local JudgeCmds = {
- TapNoteScore_W1 = THEME:GetMetric( "Judgment", "JudgmentW1Command" );
- TapNoteScore_W2 = THEME:GetMetric( "Judgment", "JudgmentW2Command" );
- TapNoteScore_W3 = THEME:GetMetric( "Judgment", "JudgmentW3Command" );
- TapNoteScore_W4 = THEME:GetMetric( "Judgment", "JudgmentW4Command" );
- TapNoteScore_W5 = THEME:GetMetric( "Judgment", "JudgmentW5Command" );
- TapNoteScore_Miss = THEME:GetMetric( "Judgment", "JudgmentMissCommand" );
-};
-
-local ProtimingCmds = {
- TapNoteScore_W1 = THEME:GetMetric( "Protiming", "ProtimingW1Command" );
- TapNoteScore_W2 = THEME:GetMetric( "Protiming", "ProtimingW2Command" );
- TapNoteScore_W3 = THEME:GetMetric( "Protiming", "ProtimingW3Command" );
- TapNoteScore_W4 = THEME:GetMetric( "Protiming", "ProtimingW4Command" );
- TapNoteScore_W5 = THEME:GetMetric( "Protiming", "ProtimingW5Command" );
- TapNoteScore_Miss = THEME:GetMetric( "Protiming", "ProtimingMissCommand" );
-};
-
-local AverageCmds = {
- Pulse = THEME:GetMetric( "Protiming", "AveragePulseCommand" );
-};
-
-local TNSFrames = {
- TapNoteScore_W1 = 0;
- TapNoteScore_W2 = 1;
- TapNoteScore_W3 = 2;
- TapNoteScore_W4 = 3;
- TapNoteScore_W5 = 4;
- TapNoteScore_Miss = 5;
-};
-local t = Def.ActorFrame {};
-t[#t+1] = Def.ActorFrame {
- LoadActor(THEME:GetPathG("Judgment","Normal")) .. {
- Name="Judgment";
- InitCommand=cmd(pause;visible,false);
- OnCommand=THEME:GetMetric("Judgment","JudgmentOnCommand");
- ResetCommand=cmd(finishtweening;stopeffect;visible,false);
- };
- LoadFont("Combo Numbers") .. {
- Name="ProtimingDisplay";
- Text="";
- InitCommand=cmd(visible,false);
- OnCommand=THEME:GetMetric("Protiming","ProtimingOnCommand");
- ResetCommand=cmd(finishtweening;stopeffect;visible,false);
- };
- LoadFont("Common Normal") .. {
- Name="ProtimingAverage";
- Text="";
- InitCommand=cmd(visible,false);
- OnCommand=THEME:GetMetric("Protiming","AverageOnCommand");
- ResetCommand=cmd(finishtweening;stopeffect;visible,false);
- };
- Def.Quad {
- Name="ProtimingGraphBG";
- InitCommand=cmd(visible,false;y,32;zoomto,192,16);
- ResetCommand=cmd(finishtweening;diffusealpha,0.8;visible,false);
- OnCommand=cmd(diffuse,Color("Black");diffusetopedge,color("0.1,0.1,0.1,1");diffusealpha,0.8;shadowlength,2;);
- };
- Def.Quad {
- Name="ProtimingGraphWindowW3";
- InitCommand=cmd(visible,false;y,32;zoomto,192-4,16-4);
- ResetCommand=cmd(finishtweening;diffusealpha,1;visible,false);
- OnCommand=cmd(diffuse,GameColor.Judgment["JudgmentLine_W3"];);
- };
- Def.Quad {
- Name="ProtimingGraphWindowW2";
- InitCommand=cmd(visible,false;y,32;zoomto,scale(PREFSMAN:GetPreference("TimingWindowSecondsW2"),0,PREFSMAN:GetPreference("TimingWindowSecondsW3"),0,192-4),16-4);
- ResetCommand=cmd(finishtweening;diffusealpha,1;visible,false);
- OnCommand=cmd(diffuse,GameColor.Judgment["JudgmentLine_W2"];);
- };
- Def.Quad {
- Name="ProtimingGraphWindowW1";
- InitCommand=cmd(visible,false;y,32;zoomto,scale(PREFSMAN:GetPreference("TimingWindowSecondsW1"),0,PREFSMAN:GetPreference("TimingWindowSecondsW3"),0,192-4),16-4);
- ResetCommand=cmd(finishtweening;diffusealpha,1;visible,false);
- OnCommand=cmd(diffuse,GameColor.Judgment["JudgmentLine_W1"];);
- };
- Def.Quad {
- Name="ProtimingGraphUnderlay";
- InitCommand=cmd(visible,false;y,32;zoomto,192-4,16-4);
- ResetCommand=cmd(finishtweening;diffusealpha,0.25;visible,false);
- OnCommand=cmd(diffuse,Color("Black");diffusealpha,0.25);
- };
- Def.Quad {
- Name="ProtimingGraphFill";
- InitCommand=cmd(visible,false;y,32;zoomto,0,16-4;horizalign,left;);
- ResetCommand=cmd(finishtweening;diffusealpha,1;visible,false);
- OnCommand=cmd(diffuse,Color("Red"););
- };
- Def.Quad {
- Name="ProtimingGraphAverage";
- InitCommand=cmd(visible,false;y,32;zoomto,2,7;);
- ResetCommand=cmd(finishtweening;diffusealpha,0.85;visible,false);
- OnCommand=cmd(diffuse,Color("Orange");diffusealpha,0.85);
- };
- Def.Quad {
- Name="ProtimingGraphCenter";
- InitCommand=cmd(visible,false;y,32;zoomto,2,16-4;);
- ResetCommand=cmd(finishtweening;diffusealpha,1;visible,false);
- OnCommand=cmd(diffuse,Color("White");diffusealpha,1);
- };
- InitCommand = function(self)
- c = self:GetChildren();
- end;
-
- JudgmentMessageCommand=function(self, param)
- if param.Player ~= player then return end;
- if param.HoldNoteScore then return end;
-
- local iNumStates = c.Judgment:GetNumStates();
- local iFrame = TNSFrames[param.TapNoteScore];
-
- if not iFrame then return end
- if iNumStates == 12 then
- iFrame = iFrame * 2;
- if not param.Early then
- iFrame = iFrame + 1;
- end
- end
-
-
- local fTapNoteOffset = param.TapNoteOffset;
- if param.HoldNoteScore then
- fTapNoteOffset = 1;
- else
- fTapNoteOffset = param.TapNoteOffset;
- end
-
- if param.TapNoteScore == 'TapNoteScore_Miss' then
- fTapNoteOffset = 1;
- bUseNegative = true;
- else
--- fTapNoteOffset = fTapNoteOffset;
- bUseNegative = false;
- end;
-
- if fTapNoteOffset ~= 1 then
- -- we're safe, you can push the values
- tTotalJudgments[#tTotalJudgments+1] = bUseNegative and fTapNoteOffset or math.abs( fTapNoteOffset );
- -- New
--- tPlayerData[player].SignedJudgments[#(tPlayerData[player].SignedJudgments)+1] = fTapNoteOffset;
--- table.getn(tPlayerData[player].SignedJudgments = bUseNegative and fTapNoteOffset or fTapNoteOffset;
- end
-
- self:playcommand("Reset");
-
- c.Judgment:visible( not bShowProtiming );
- c.Judgment:setstate( iFrame );
- JudgeCmds[param.TapNoteScore](c.Judgment);
-
- c.ProtimingDisplay:visible( bShowProtiming );
- c.ProtimingDisplay:settextf("%i",math.abs(fTapNoteOffset * 1000));
- ProtimingCmds[param.TapNoteScore](c.ProtimingDisplay);
-
- c.ProtimingAverage:visible( bShowProtiming );
- c.ProtimingAverage:settextf("%.2f%%",clamp(100 - MakeAverage( tTotalJudgments ) * 1000 ,0,100));
- AverageCmds['Pulse'](c.ProtimingAverage);
-
- c.ProtimingGraphBG:visible( bShowProtiming );
- c.ProtimingGraphUnderlay:visible( bShowProtiming );
- c.ProtimingGraphWindowW3:visible( bShowProtiming );
- c.ProtimingGraphWindowW2:visible( bShowProtiming );
- c.ProtimingGraphWindowW1:visible( bShowProtiming );
- c.ProtimingGraphFill:visible( bShowProtiming );
- c.ProtimingGraphFill:finishtweening();
- c.ProtimingGraphFill:decelerate(1/60);
--- c.ProtimingGraphFill:zoomtowidth( clamp(fTapNoteOffset * 188,-188/2,188/2) );
- c.ProtimingGraphFill:zoomtowidth( clamp(
- scale(
- fTapNoteOffset,
- 0,PREFSMAN:GetPreference("TimingWindowSecondsW3"),
- 0,188/2),
- -188/2,188/2)
- );
- c.ProtimingGraphAverage:visible( bShowProtiming );
- c.ProtimingGraphAverage:zoomtowidth( clamp(
- scale(
- MakeAverage( tTotalJudgments ),
- 0,PREFSMAN:GetPreference("TimingWindowSecondsW3"),
- 0,188),
- 0,188)
- );
--- c.ProtimingGraphAverage:zoomtowidth( clamp(MakeAverage( tTotalJudgments ) * 1880,0,188) );
- c.ProtimingGraphCenter:visible( bShowProtiming );
- (cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphBG);
- (cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphUnderlay);
- (cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphWindowW3);
- (cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphWindowW2);
- (cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphWindowW1);
- (cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphFill);
- (cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphAverage);
- (cmd(sleep,2;linear,0.5;diffusealpha,0))(c.ProtimingGraphCenter);
- end;
-
-};
-
-
-return t;
diff --git a/Themes/default-dev-midi/metrics.ini b/Themes/default-dev-midi/metrics.ini
index e2eab4c818..2f0e2571a5 100644
--- a/Themes/default-dev-midi/metrics.ini
+++ b/Themes/default-dev-midi/metrics.ini
@@ -1,5 +1,8 @@
[Global]
FallbackTheme=default
+[ScreenTitleMenu]
+ChoiceNames="1,4,5,6,PopScreen,7"
+ChoicePopScreen="name,Boobs;text,Boobs";
[ScreenGameplay]
-LifeP1OnCommand=visible,false
-LifeP2OnCommand=visible,false
\ No newline at end of file
+# LifeP1OnCommand=visible,false
+# LifeP2OnCommand=visible,false
diff --git a/Themes/default/BGAnimations/ScreenCredits background/default.lua b/Themes/default/BGAnimations/ScreenCredits background/default.lua
index 47e9237339..8cd4a8ea35 100644
--- a/Themes/default/BGAnimations/ScreenCredits background/default.lua
+++ b/Themes/default/BGAnimations/ScreenCredits background/default.lua
@@ -13,7 +13,7 @@ local t = Def.ActorFrame {
LoadActor("_grid")..{
InitCommand=cmd(customtexturerect,0,0,(SCREEN_WIDTH+1)/4,SCREEN_HEIGHT/4;SetTextureFiltering,true);
OnCommand=cmd(zoomto,SCREEN_WIDTH+1,SCREEN_HEIGHT;diffuse,Color("Black");diffuseshift;effecttiming,(1/8)*4,0,(7/8)*4,0;effectclock,'beatnooffset';
- effectcolor2,Color("Black");effectcolor1,Colors.Alpha(Color("Black"),0.45);fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480;diffusealpha,0.345);
+ effectcolor2,Color("Black");effectcolor1,Color.Alpha(Color("Black"),0.45);fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480;diffusealpha,0.345);
};
};
diff --git a/Themes/default/BGAnimations/ScreenCredits overlay.lua b/Themes/default/BGAnimations/ScreenCredits overlay.lua
index 6c06c5b06a..6d9b73f724 100644
--- a/Themes/default/BGAnimations/ScreenCredits overlay.lua
+++ b/Themes/default/BGAnimations/ScreenCredits overlay.lua
@@ -40,9 +40,10 @@ local stepmania = {
local contrib = {
"Aldo Fregoso (Aldo_MX)", -- delays
- "Chris Eldridge (kurisu)", -- dance-threepanel
"cerbo",
"cesarmades", -- pump/cmd* noteskins
+ "Chris Eldridge (kurisu)", -- dance-threepanel
+ "Christophe Goulet-LeBlanc (Kommisar)",
"corec", -- various fixes
"galopin", -- piu PlayStation2 usb mat support
"gholms", -- automake 1.11 support
@@ -51,6 +52,7 @@ local contrib = {
"NitroX72", -- pump/frame noteskin
"sy567", -- beginner helper fix
"v1toko", -- x-mode from StepNXA
+ "waiei", -- custom scoring fixes + Hybrid scoring
}
local thanks = {
@@ -70,12 +72,13 @@ local thanks = {
local shoutout = {
"The Lua team", -- lua project lead or some shit. super nerdy but oh hell.
- "Mojang", -- minecraft forever -freem
+ "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
-- "Can't stop crying... buckets of tears!"
+ "#KBO",
"AJ Kelly, without which this game would have never been.",
"You showed us... your ultimate dance",
}
diff --git a/Themes/default/BGAnimations/ScreenEvaluation background/default.lua b/Themes/default/BGAnimations/ScreenEvaluation background/default.lua
index ac0c710158..5cd05e9772 100644
--- a/Themes/default/BGAnimations/ScreenEvaluation background/default.lua
+++ b/Themes/default/BGAnimations/ScreenEvaluation background/default.lua
@@ -5,7 +5,10 @@ t[#t+1] = Def.ActorFrame {
Def.Sprite {
OnCommand=function(self)
if GAMESTATE:GetCurrentSong() then
- self:LoadBackground( GAMESTATE:GetCurrentSong():GetBackgroundPath() );
+ local song = GAMESTATE:GetCurrentSong();
+ if song:HasBackground() then
+ self:LoadBackground(song:GetBackgroundPath());
+ end;
self:scaletoclipped( SCREEN_WIDTH+1,SCREEN_HEIGHT );
(cmd(fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480))(self);
else
diff --git a/Themes/default/BGAnimations/ScreenEvaluation overlay/default.lua b/Themes/default/BGAnimations/ScreenEvaluation overlay/default.lua
index f60350e627..cd8f3eac73 100644
--- a/Themes/default/BGAnimations/ScreenEvaluation overlay/default.lua
+++ b/Themes/default/BGAnimations/ScreenEvaluation overlay/default.lua
@@ -55,14 +55,14 @@ local function CreateStats( pnPlayer )
return t
end;
--- xxx: this only currently works for player 1. -aj
local t = Def.ActorFrame {};
+GAMESTATE:IsPlayerEnabled(PLAYER_1)
t[#t+1] = Def.ActorFrame {
- InitCommand=cmd(x,WideScale(math.floor(SCREEN_CENTER_X*0.3)-8,math.floor(SCREEN_CENTER_X*0.5)-8);y,SCREEN_CENTER_Y);
+ InitCommand=cmd(hide_if,not GAMESTATE:IsPlayerEnabled(PLAYER_1);x,WideScale(math.floor(SCREEN_CENTER_X*0.3)-8,math.floor(SCREEN_CENTER_X*0.5)-8);y,SCREEN_CENTER_Y-34);
CreateStats( PLAYER_1 );
};
t[#t+1] = Def.ActorFrame {
- InitCommand=cmd(x,WideScale(math.floor(SCREEN_CENTER_X*1.7)+8,math.floor(SCREEN_CENTER_X*1.5)+8);y,SCREEN_CENTER_Y);
+ InitCommand=cmd(hide_if,not GAMESTATE:IsPlayerEnabled(PLAYER_2);x,WideScale(math.floor(SCREEN_CENTER_X*1.7)+8,math.floor(SCREEN_CENTER_X*1.5)+8);y,SCREEN_CENTER_Y-34);
CreateStats( PLAYER_2 );
};
return t
\ No newline at end of file
diff --git a/Themes/default/BGAnimations/ScreenGameplay background.lua b/Themes/default/BGAnimations/ScreenGameplay background.lua
new file mode 100644
index 0000000000..989e15f73d
--- /dev/null
+++ b/Themes/default/BGAnimations/ScreenGameplay background.lua
@@ -0,0 +1 @@
+return Def.ActorFrame { Name="YOU_WISH_YOU_WERE_PLAYING_BEATMANIA_RIGHT_NOW" };
\ No newline at end of file
diff --git a/Themes/default/BGAnimations/ScreenGameplay decorations/default.lua b/Themes/default/BGAnimations/ScreenGameplay decorations/default.lua
index f46c102f86..815b30b141 100644
--- a/Themes/default/BGAnimations/ScreenGameplay decorations/default.lua
+++ b/Themes/default/BGAnimations/ScreenGameplay decorations/default.lua
@@ -1,47 +1,55 @@
-local function CreateStops()
+local function CreateSegments(Player)
local t = Def.ActorFrame { };
local bars = Def.ActorFrame{ };
local bpmFrame = Def.ActorFrame{ Name="BPMFrame"; };
local stopFrame = Def.ActorFrame{ Name="StopFrame"; };
+ local delayFrame = Def.ActorFrame{ Name="DelayFrame"; };
+ local warpFrame = Def.ActorFrame{ Name="WarpFrame"; };
+ local fakeFrame = Def.ActorFrame{ Name="FakeFrame"; };
+ local scrollFrame = Def.ActorFrame{ Name="ScrollFrame"; };
+ local speedFrame = Def.ActorFrame{ Name="SpeedFrame"; };
local fFrameWidth = 380;
local fFrameHeight = 8;
-- XXX: doesn't work in course mode -aj
- if not GAMESTATE:IsCourseMode() then
+ if not GAMESTATE:IsSideJoined( Player ) then
+ return t
+ elseif not GAMESTATE:IsCourseMode() then
-- Straight rip off NCRX
local song = GAMESTATE:GetCurrentSong();
- local timingData = song:GetTimingData();
+ local steps = GAMESTATE:GetCurrentSteps( Player );
+ local timingData = steps:GetTimingData();
-- if we're using SSC, might as well use the StepsSeconds, which will
-- almost always be more proper than a r21'd file.
if song then
local songLen = song:MusicLengthSeconds();
- local firstBeatSecs = timingData:GetElapsedTimeFromBeat(song:GetFirstBeat());
- local lastBeatSecs = timingData:GetElapsedTimeFromBeat(song:GetLastBeat());
-
- local bpms = timingData:GetBPMs();
+ local firstBeatSecs = song:GetFirstSecond();
+ local lastBeatSecs = song:GetLastSecond();
+ local bpms = timingData:GetBPMsAndTimes();
local stops = timingData:GetStops();
- for i=1,#stops do
- local data = split("=",stops[i]);
- local beat = data[1];
- local secs = data[2];
+ local delays = timingData:GetDelays();
+ local warps = timingData:GetWarps();
+ local fakes = timingData:GetFakes();
+ local scrolls = timingData:GetScrolls();
+ local speeds = timingData:GetSpeeds();
+
+ local function CreateLine(beat, secs, firstShadow, firstDiffuse, secondShadow, firstEffect, secondEffect)
local beatTime = timingData:GetElapsedTimeFromBeat(beat);
if beatTime < 0 then beatTime = 0; end;
-
- stopFrame[#stopFrame+1] = Def.ActorFrame {
+ return Def.ActorFrame {
Def.Quad {
InitCommand=function(self)
- --self:diffuse(HSVA(192,1,0.8,0.8));
self:shadowlength(0);
- self:shadowcolor( color("#FFFFFF77") );
+ self:shadowcolor(color(firstShadow));
-- set width
- self:zoomto( math.max((secs/songLen)*fFrameWidth, 1), fFrameHeight );
+ self:zoomto(math.max((secs/songLen)*fFrameWidth, 1), fFrameHeight);
-- find location
- self:x( ( scale(beatTime, firstBeatSecs,lastBeatSecs, -fFrameWidth/2,fFrameWidth/2) ) );
+ self:x((scale(beatTime,firstBeatSecs,lastBeatSecs,-fFrameWidth/2,fFrameWidth/2)));
end;
OnCommand=function(self)
- self:diffuse(Color("White"));
+ self:diffuse(color(firstDiffuse));
self:sleep(beatTime+1);
self:linear(2);
self:diffusealpha(0);
@@ -51,42 +59,89 @@ local function CreateStops()
InitCommand=function(self)
--self:diffuse(HSVA(192,1,0.8,0.8));
self:shadowlength(0);
- self:shadowcolor( color("#FFFFFF77") );
+ self:shadowcolor(color(secondShadow));
-- set width
- self:zoomto( math.max((secs/songLen)*fFrameWidth, 1), fFrameHeight );
+ self:zoomto(math.max((secs/songLen)*fFrameWidth, 1),fFrameHeight);
-- find location
- self:x( ( scale(beatTime, firstBeatSecs,lastBeatSecs, -fFrameWidth/2,fFrameWidth/2) ) );
+ self:x((scale(beatTime,firstBeatSecs,lastBeatSecs,-fFrameWidth/2,fFrameWidth/2)));
end;
OnCommand=function(self)
self:diffusealpha(1);
self:diffuseshift();
- self:effectcolor1(Color("Orange"));
- self:effectcolor2(Color("Red"));
+ self:effectcolor1(color(firstEffect));
+ self:effectcolor2(color(secondEffect));
self:effectclock('beat');
self:effectperiod(1/8);
--
self:diffusealpha(0);
self:sleep(beatTime+1);
- -- self:linear(1);
self:diffusealpha(1);
self:linear(4);
self:diffusealpha(0);
end;
};
- --OnCommand=cmd(diffuse,Color("White");sleep,math.min(0.00001+(secs-5),0.00001);linear,1;diffuse,Color("Orange");sleep,4;linear,2;diffusealpha,0);
- --OnCommand=cmd(diffuse,Color("White");linear,1;diffuse,Color("Orange"););
};
end;
+
+ for i=1,#bpms do
+ local data = split("=",bpms[i]);
+ bpmFrame[#bpmFrame+1] = CreateLine(data[1], 0,
+ "#00808077", "#00808077", "#00808077", "#FF634777", "#FF000077");
+ end;
+
+ for i=1,#delays do
+ local data = split("=",delays[i]);
+ delayFrame[#delayFrame+1] = CreateLine(data[1], data[2],
+ "#FFFF0077", "#FFFF0077", "#FFFF0077", "#00FF0077", "#FF000077");
+ end;
+
+ for i=1,#stops do
+ local data = split("=",stops[i]);
+ stopFrame[#stopFrame+1] = CreateLine(data[1], data[2],
+ "#FFFFFF77", "#FFFFFF77", "#FFFFFF77", "#FFA50077", "#FF000077");
+ end;
+
+ for i=1,#scrolls do
+ local data = split("=",scrolls[i]);
+ scrollFrame[#scrollFrame+1] = CreateLine(data[1], 0,
+ "#4169E177", "#4169E177", "#4169E177", "#0000FF77", "#FF000077");
+ end;
+
+ for i=1,#speeds do
+ local data = split("=",speeds[i]);
+ -- TODO: Turn beats into seconds for this calculation?
+ speedFrame[#speedFrame+1] = CreateLine(data[1], 0,
+ "#ADFF2F77", "#ADFF2F77", "#ADFF2F77", "#7CFC0077", "#FF000077");
+ end;
+
+ for i=1,#warps do
+ local data = split("=",warps[i]);
+ warpFrame[#warpFrame+1] = CreateLine(data[1], 0,
+ "#CC00CC77", "#CC00CC77", "#CC00CC77", "#FF33CC77", "#FF000077");
+ end;
+
+ for i=1,#fakes do
+ local data = split("=",fakes[i]);
+ fakeFrame[#fakeFrame+1] = CreateLine(data[1], 0,
+ "#BC8F8F77", "#BC8F8F77", "#BC8F8F77", "#F4A46077", "#FF000077");
+ end;
end;
+ bars[#bars+1] = bpmFrame;
+ bars[#bars+1] = scrollFrame;
+ bars[#bars+1] = speedFrame;
bars[#bars+1] = stopFrame;
+ bars[#bars+1] = delayFrame;
+ bars[#bars+1] = warpFrame;
+ bars[#bars+1] = fakeFrame;
t[#t+1] = bars;
end
return t
end
local t = LoadFallbackB()
+t[#t+1] = StandardDecorationFromFileOptional("ScoreFrame","ScoreFrame");
for pn in ivalues(PlayerNumber) do
--- local MetricsName = "SongMeterDisplay" .. PlayerNumberToString(pn);
---[[ t[#t+1] = Def.ActorFrame {
+ local MetricsName = "SongMeterDisplay" .. PlayerNumberToString(pn);
+ t[#t+1] = Def.ActorFrame {
InitCommand=function(self)
self:player(pn);
self:name(MetricsName);
@@ -117,8 +172,10 @@ for pn in ivalues(PlayerNumber) do
};
Tip=LoadActor( THEME:GetPathG( 'SongMeterDisplay', 'tip ' .. PlayerNumberToString(pn) ) ) .. { InitCommand=cmd(visible,false); };
};
- CreateStops();
- }; --]]
+ CreateSegments(pn) .. {
+-- InitCommand=cmd(draworder,10);
+ };
+ };
end;
for pn in ivalues(PlayerNumber) do
local MetricsName = "ToastyDisplay" .. PlayerNumberToString(pn);
@@ -131,43 +188,11 @@ for pn in ivalues(PlayerNumber) do
};
end;
-t[#t+1] = StandardDecorationFromFileOptional("ScoreFrame","ScoreFrame");
+
t[#t+1] = StandardDecorationFromFileOptional("BPMDisplay","BPMDisplay");
t[#t+1] = StandardDecorationFromFileOptional("StageDisplay","StageDisplay");
t[#t+1] = StandardDecorationFromFileOptional("SongTitle","SongTitle");
-t[#t+1] = Def.ActorFrame {
- InitCommand=function(self)
- self:name("SongMeterDisplay");
- ActorUtil.LoadAllCommandsAndSetXY(self,Var "LoadingScreen");
- end;
- LoadActor( THEME:GetPathG( 'SongMeterDisplay', 'frame ' .. PlayerNumberToString(PLAYER_1) ) ) .. {
- InitCommand=function(self)
- self:name('Frame');
- ActorUtil.LoadAllCommandsAndSetXY(self,"SongMeterDisplay");
- end;
- };
- Def.Quad {
- InitCommand=cmd(zoomto,2,8);
- OnCommand=cmd(x,scale(0.25,0,1,-380/2,380/2);diffuse,Color("Orange");diffusealpha,0.5);
- };
- Def.Quad {
- InitCommand=cmd(zoomto,2,8);
- OnCommand=cmd(x,scale(0.5,0,1,-380/2,380/2);diffuse,Color("Orange");diffusealpha,0.5);
- };
- Def.Quad {
- InitCommand=cmd(zoomto,2,8);
- OnCommand=cmd(x,scale(0.75,0,1,-380/2,380/2);diffuse,Color("Orange");diffusealpha,0.5);
- };
- Def.SongMeterDisplay {
- InitCommand=cmd(SetStreamWidth,THEME:GetMetric( "SongMeterDisplay", 'StreamWidth' ));
- Stream=LoadActor( THEME:GetPathG( 'SongMeterDisplay', 'stream ' .. PlayerNumberToString(PLAYER_1) ) )..{
- InitCommand=cmd(diffuse,Color("Orange");diffusealpha,0.5;blend,Blend.Add;);
- };
- Tip=LoadActor( THEME:GetPathG( 'SongMeterDisplay', 'tip ' .. PlayerNumberToString(PLAYER_1) ) ) .. { InitCommand=cmd(visible,false); };
- };
- CreateStops();
-};
if( not GAMESTATE:IsCourseMode() ) then
t[#t+1] = Def.Actor{
JudgmentMessageCommand = function(self, params)
diff --git a/Themes/default/BGAnimations/ScreenGameplay next course song/default.lua b/Themes/default/BGAnimations/ScreenGameplay next course song/default.lua
index de7cf0b949..732b6a912d 100644
--- a/Themes/default/BGAnimations/ScreenGameplay next course song/default.lua
+++ b/Themes/default/BGAnimations/ScreenGameplay next course song/default.lua
@@ -7,7 +7,7 @@ t[#t+1] = Def.Sprite {
BeforeLoadingNextCourseSongMessageCommand=function(self) self:LoadFromSongBackground( SCREENMAN:GetTopScreen():GetNextCourseSong() ) end;
ChangeCourseSongInMessageCommand=cmd(scaletoclipped,SCREEN_WIDTH,SCREEN_HEIGHT);
StartCommand=cmd(diffusealpha,0;decelerate,0.5;diffusealpha,1;);
- FinishCommand=cmd(linear,0.1;glow,Colors.Alpha(Color("White"),0.5);decelerate,0.4;glow,Color("Invisible");diffusealpha,0);
+ FinishCommand=cmd(linear,0.1;glow,Color.Alpha(Color("White"),0.5);decelerate,0.4;glow,Color("Invisible");diffusealpha,0);
};
t[#t+1] = Def.ActorFrame {
diff --git a/Themes/default/BGAnimations/ScreenPlayerOptions background.lua b/Themes/default/BGAnimations/ScreenPlayerOptions background.lua
index a02c0291d9..f06580a070 100644
--- a/Themes/default/BGAnimations/ScreenPlayerOptions background.lua
+++ b/Themes/default/BGAnimations/ScreenPlayerOptions background.lua
@@ -6,7 +6,10 @@ t[#t+1] = Def.ActorFrame {
Condition=not GAMESTATE:IsCourseMode();
OnCommand=function(self)
if GAMESTATE:GetCurrentSong() then
- self:LoadBackground( GAMESTATE:GetCurrentSong():GetBackgroundPath() );
+ local song = GAMESTATE:GetCurrentSong();
+ if song:HasBackground() then
+ self:LoadBackground(song:GetBackgroundPath());
+ end;
self:scaletoclipped( SCREEN_WIDTH+1,SCREEN_HEIGHT );
(cmd(fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480))(self);
else
@@ -21,7 +24,7 @@ t[#t+1] = Def.ActorFrame {
--[[ LoadActor(THEME:GetPathB("ScreenWithMenuElements","background/_grid")).. {
InitCommand=cmd(customtexturerect,0,0,(SCREEN_WIDTH+1)/4,SCREEN_HEIGHT/4;SetTextureFiltering,true);
OnCommand=cmd(zoomto,SCREEN_WIDTH+1,SCREEN_HEIGHT;diffuse,Color("Black");diffuseshift;effecttiming,(1/8)*4,0,(7/8)*4,0;effectclock,'beatnooffset';
- effectcolor2,Color("Black");effectcolor1,Colors.Alpha(Color("Black"),0.45);fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480;diffusealpha,0.345);
+ effectcolor2,Color("Black");effectcolor1,Color.Alpha(Color("Black"),0.45);fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480;diffusealpha,0.345);
}; --]]
LoadActor(THEME:GetPathB("ScreenWithMenuElements","background/_bg top")) .. {
InitCommand=cmd(scaletoclipped,SCREEN_WIDTH+1,SCREEN_HEIGHT);
diff --git a/Themes/default/BGAnimations/ScreenTitleMenu underlay.lua b/Themes/default/BGAnimations/ScreenTitleMenu underlay.lua
index 3f4af5add1..665a830d61 100644
--- a/Themes/default/BGAnimations/ScreenTitleMenu underlay.lua
+++ b/Themes/default/BGAnimations/ScreenTitleMenu underlay.lua
@@ -8,5 +8,25 @@ t[#t+1] = StandardDecorationFromFileOptional("LifeDifficulty","LifeDifficulty");
t[#t+1] = StandardDecorationFromFileOptional("TimingDifficulty","TimingDifficulty");
t[#t+1] = StandardDecorationFromFileOptional("NetworkStatus","NetworkStatus");
t[#t+1] = StandardDecorationFromFileOptional("SystemDirection","SystemDirection");
+--
+t[#t+1] = StandardDecorationFromFileOptional("NumSongs","NumSongs") .. {
+ SetCommand=function(self)
+ local InstalledSongs, AdditionalSongs, InstalledCourses, AdditionalCourses, Groups, Unlocked = 0;
+ if SONGMAN:GetRandomSong() then
+ InstalledSongs, AdditionalSongs, InstalledCourses, AdditionalCourses, Groups, Unlocked =
+ SONGMAN:GetNumSongs(),
+ SONGMAN:GetNumAdditionalSongs(),
+ SONGMAN:GetNumCourses(),
+ SONGMAN:GetNumAdditionalCourses(),
+ SONGMAN:GetNumSongGroups(),
+ SONGMAN:GetNumUnlockedSongs();
+ else
+ return
+ end
+
+ self:settextf("%i Songs (%i Groups), %i Courses", InstalledSongs, Groups, InstalledCourses);
+-- self:settextf("%i (+%i) Songs (%i Groups), %i (+%i) Courses", InstalledSongs, AdditionalSongs, Groups, InstalledCourses, AdditionalCourses);
+ end;
+};
return t
\ No newline at end of file
diff --git a/Themes/default/BGAnimations/ScreenWithMenuElements aux.lua b/Themes/default/BGAnimations/ScreenWithMenuElements aux.lua
new file mode 100644
index 0000000000..f808d9d5e4
--- /dev/null
+++ b/Themes/default/BGAnimations/ScreenWithMenuElements aux.lua
@@ -0,0 +1,80 @@
+local function Clock()
+ function UpdateVisible(self)
+ local screen = SCREENMAN:GetTopScreen()
+ local bShow = true
+ if screen then
+ local sClass = screen:GetName()
+ bShow = THEME:GetMetric(sClass, "ShowClock")
+ end
+ if bShow then
+ self:smooth(0.25)
+ self:y(12)
+ else
+ self:smooth(0.25)
+ self:y(-56)
+ end
+ end
+ -- clock
+ clock = Def.ActorFrame {
+ Name="Clock",
+ InitCommand=cmd(x,50;y,12;playcommand,"Update"),
+ ScreenChangedMessageCommand=UpdateVisible,
+ UpdateCommand=cmd(runcommandsonleaves,cmd(queuecommand,"Update")),
+ Def.RoundedBox(90,26)..{ InitCommand=cmd(x,-22;y,-4) },
+ Def.ActorFrame {
+ Name="ClockText",
+ InitCommand=cmd(y,-2),
+ LoadFont("Common", "normal")..{
+ Text="00:00:",
+ InitCommand=cmd(horizalign,right;shadowlength,0;diffusebottomedge,color("0.9,0.9,0.9")),
+ UpdateCommand=function(self)
+ local hour, min = Hour(), Minute()
+ if hour > 12 and GetUserPrefB("Use12HourClock") then
+ hour = hour - 12
+ elseif hour == 0 and GetUserPrefB("Use12HourClock") then
+ hour = 12
+ end
+ self:settext(string.format('%02i:%02i:', hour, min))
+ self:sleep(1)
+ self:queuecommand("Update")
+ end
+ },
+ LoadFont("Common", "normal")..{
+ Text="00",
+ InitCommand=cmd(horizalign,left;shadowlength,0;diffusebottomedge,color("0.9,0.9,0.9")),
+ UpdateCommand=function(self)
+ local sec = Second()
+ self:settext(string.format('%02i', sec))
+ self:sleep(1)
+ self:queuecommand("Update")
+ end,
+ },
+ LoadFont("Common", "normal")..{
+ Text="",
+ InitCommand=cmd(x,28;y,-3;horizalign,left;shadowlength,0;diffusebottomedge,color("0.9,0.9,0.9");visible,false;zoom,0.75),
+ UpdateCommand=function(self)
+ if not GetUserPrefB("Use12HourClock") then
+ self:visible(false)
+ return
+ end
+ local hour = Hour()
+ if hour < 12 then
+ self:settext("AM")
+ self:diffuse(color("1,0.85,0,1"))
+ self:diffusebottomedge(color("0.75,0.55,0,1"))
+ else
+ self:settext("PM")
+ self:diffuse(color("0,0.85,1,1"))
+ self:diffusebottomedge(color("0,0.55,1,1"))
+ end
+ self:visible(true)
+ self:sleep(1)
+ self:queuecommand("Update")
+ end
+ }
+ }
+ }
+ return clock;
+end
+local t = Def.ActorFrame {};
+return t;
\ No newline at end of file
diff --git a/Themes/default/BGAnimations/ScreenWithMenuElements background/default.lua b/Themes/default/BGAnimations/ScreenWithMenuElements background/default.lua
index 2a5ef20e90..73c5519edb 100644
--- a/Themes/default/BGAnimations/ScreenWithMenuElements background/default.lua
+++ b/Themes/default/BGAnimations/ScreenWithMenuElements background/default.lua
@@ -33,7 +33,7 @@ t[#t+1] = Def.ActorFrame {
--[[ LoadActor("_grid") .. {
InitCommand=cmd(customtexturerect,0,0,(SCREEN_WIDTH+1)/4,SCREEN_HEIGHT/4;SetTextureFiltering,true);
OnCommand=cmd(zoomto,SCREEN_WIDTH+1,SCREEN_HEIGHT;diffuse,Color("Orange");diffuseshift;effecttiming,(1/8)*2,0,(7/8)*2,0;effectclock,'beatnooffset';
- effectcolor2,Color("Orange");effectcolor1,Colors.Alpha(Color("Orange"),0.45);fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480);
+ effectcolor2,Color("Orange");effectcolor1,Color.Alpha(Color("Orange"),0.45);fadebottom,0.25;fadetop,0.25;croptop,48/480;cropbottom,48/480);
}; --]]
LoadActor("_bg top") .. {
InitCommand=cmd(scaletoclipped,SCREEN_WIDTH+1,SCREEN_HEIGHT);
diff --git a/Themes/default/BGAnimations/_ScreenWithMenuElements aux.lua b/Themes/default/BGAnimations/_ScreenWithMenuElements aux.lua
deleted file mode 100644
index b45f994ddf..0000000000
--- a/Themes/default/BGAnimations/_ScreenWithMenuElements aux.lua
+++ /dev/null
@@ -1 +0,0 @@
-local t = Def.ActorFrame {};
diff --git a/Themes/default/Graphics/CombinedLifeMeterTug separator.redir b/Themes/default/Graphics/CombinedLifeMeterTug separator.redir
index 04b2ead777..65de2f434b 100644
--- a/Themes/default/Graphics/CombinedLifeMeterTug separator.redir
+++ b/Themes/default/Graphics/CombinedLifeMeterTug separator.redir
@@ -1 +1 @@
-_blank
\ No newline at end of file
+_CombinedLifeMeterTug separator
\ No newline at end of file
diff --git a/Themes/default/Graphics/PaneDisplay text.lua b/Themes/default/Graphics/PaneDisplay text.lua
index 5a9983b945..3cc39b0512 100644
--- a/Themes/default/Graphics/PaneDisplay text.lua
+++ b/Themes/default/Graphics/PaneDisplay text.lua
@@ -83,8 +83,8 @@ local function CreatePaneDisplayGraph( _pnPlayer, _sLabel, _rcRadarCategory )
end;
};
LoadFont("Common Normal") .. {
- InitCommand=cmd(x,40;zoom,0.5;);
- OnCommand=cmd(shadowlength,1;);
+ InitCommand=cmd(x,14;zoom,0.45;halign,0;);
+ OnCommand=cmd(shadowlength,1;strokecolor,color("0.15,0.15,0.15,0.625"));
CurrentSongChangedMessageCommand=cmd(playcommand,"Set");
CurrentStepsP1ChangedMessageCommand=cmd(playcommand,"Set");
CurrentStepsP2ChangedMessageCommand=cmd(playcommand,"Set");
diff --git a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/frame (doubleres).png b/Themes/default/Graphics/Player Badge FullCombo.png
similarity index 54%
rename from Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/frame (doubleres).png
rename to Themes/default/Graphics/Player Badge FullCombo.png
index 8f4fb1191a..46688dc572 100644
Binary files a/Themes/default-dev-midi/BGAnimations/ScreenGameplay underlay/frame (doubleres).png and b/Themes/default/Graphics/Player Badge FullCombo.png differ
diff --git a/Themes/default/Graphics/Player toasty/default.lua b/Themes/default/Graphics/Player toasty/default.lua
index bbc4c72c04..206e223510 100644
--- a/Themes/default/Graphics/Player toasty/default.lua
+++ b/Themes/default/Graphics/Player toasty/default.lua
@@ -13,7 +13,7 @@ return Def.ActorFrame {
InitCommand=cmd(zoomto,fWidth,SCREEN_HEIGHT;diffuse,PlayerColor(Player);diffusealpha,0;fadeleft,32/(256+16);faderight,32/(256+16));
ToastyAchievedMessageCommand=function(self,params)
if params.PlayerNumber == Player then
- (cmd(stoptweening;linear,2.125;diffuse,Colors.Alpha( PlayerColor(Player), 0.345 );glow,color("1,1,1,0.5");decelerate,3;glow,Colors.Alpha( ColorDarkTone( PlayerColor(Player) ), 0 );diffuseramp;
+ (cmd(stoptweening;linear,2.125;diffuse,Color.Alpha( PlayerColor(Player), 0.345 );glow,color("1,1,1,0.5");decelerate,3;glow,Color.Alpha( ColorDarkTone( PlayerColor(Player) ), 0 );diffuseramp;
effectcolor1,ColorLightTone( PlayerColor(Player) );effectcolor2,PlayerColor(Player);
effectclock,'beat';effectperiod,2;
))(self);
@@ -23,7 +23,7 @@ return Def.ActorFrame {
ToastyDroppedMessageCommand=function(self,params)
if params.PlayerNumber == Player then
if HasToasty then
- (cmd(finishtweening;stopeffect;glow,color("1,1,1,0.5");decelerate,0.35;diffuse,Colors.Alpha( Color("Black"), 0.25 );glow,color("1,1,1,0");linear,0.35*0.25;diffusealpha,0))(self);
+ (cmd(finishtweening;stopeffect;glow,color("1,1,1,0.5");decelerate,0.35;diffuse,Color.Alpha( Color("Black"), 0.25 );glow,color("1,1,1,0");linear,0.35*0.25;diffusealpha,0))(self);
HasToasty = false;
else
return
diff --git a/Themes/default/Graphics/ScreenGameplay BPMDisplay.lua b/Themes/default/Graphics/ScreenGameplay BPMDisplay.lua
index bb61014df0..37f11b81e4 100644
--- a/Themes/default/Graphics/ScreenGameplay BPMDisplay.lua
+++ b/Themes/default/Graphics/ScreenGameplay BPMDisplay.lua
@@ -38,6 +38,10 @@ else
local stepsP1 = GAMESTATE:GetCurrentSteps(PLAYER_1)
local stepsP2 = GAMESTATE:GetCurrentSteps(PLAYER_2)
+ if not stepsP1 or not stepsP2 then
+ return displaySingle
+ end
+
local stP1 = stepsP1:GetStepsType()
local stP2 = stepsP2:GetStepsType()
diff --git a/Themes/default/Graphics/ScreenGameplay StageDisplay.lua b/Themes/default/Graphics/ScreenGameplay StageDisplay.lua
index a20a1c542f..81761ccc77 100644
--- a/Themes/default/Graphics/ScreenGameplay StageDisplay.lua
+++ b/Themes/default/Graphics/ScreenGameplay StageDisplay.lua
@@ -13,6 +13,7 @@ end
for s in ivalues(Stage) do
stages[#stages+1] = MakeBitmapTest() .. {
+ InitCommand=cmd(shadowlength,2);
SetCommand=function(self, params)
local Stage = GAMESTATE:GetCurrentStage();
local StageIndex = GAMESTATE:GetCurrentStageIndex();
diff --git a/Themes/default/Graphics/ScreenMapControllers exit.lua b/Themes/default/Graphics/ScreenMapControllers exit.lua
new file mode 100644
index 0000000000..dda8c0fd5c
--- /dev/null
+++ b/Themes/default/Graphics/ScreenMapControllers exit.lua
@@ -0,0 +1,10 @@
+return LoadFont("Common Normal") .. {
+ Text="Exit";
+ InitCommand=cmd(x,SCREEN_CENTER_X;zoom,0.75;shadowlength,0;diffuse,color("#880000");NoStroke);
+ OnCommand=cmd(diffusealpha,0;decelerate,0.5;diffusealpha,1);
+ OffCommand=cmd(stoptweening;accelerate,0.3;diffusealpha,0;queuecommand,"Hide");
+ HideCommand=cmd(hidden,true);
+
+ GainFocusCommand=cmd(diffuseshift;effectcolor1,color("#FF2222");effectcolor2,color("#880000"););
+ LoseFocusCommand=cmd(stopeffect);
+};
diff --git a/Themes/default/Graphics/ScreenMapControllers exit.redir b/Themes/default/Graphics/ScreenMapControllers exit.redir
deleted file mode 100644
index 04b2ead777..0000000000
--- a/Themes/default/Graphics/ScreenMapControllers exit.redir
+++ /dev/null
@@ -1 +0,0 @@
-_blank
\ No newline at end of file
diff --git a/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/default.lua b/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/default.lua
index 966f417b67..eeb4c57c79 100644
--- a/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/default.lua
+++ b/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/default.lua
@@ -70,7 +70,7 @@ for idx,diff in pairs(Difficulty) do
Text=(sDifficulty == "Edit") and "0 Edits" or "0";
ShowCommand=cmd(stoptweening;linear,0.1;diffuse,CustomDifficultyToColor( sDifficulty ));
HideCommand=cmd(stoptweening;decelerate,0.2;diffuse,CustomDifficultyToDarkColor( sDifficulty ));
- InitCommand=cmd(x,-64-8+tLocation[sDifficulty];shadowlength,1;zoom,0.5;diffuse,CustomDifficultyToColor( sDifficulty ));
+ InitCommand=cmd(x,-64-8+tLocation[sDifficulty];shadowlength,1;zoom,0.75;diffuse,CustomDifficultyToColor( sDifficulty ));
};
};
end
diff --git a/Themes/default/Graphics/ScreenTitleMenu NumAdditionalSongs.lua b/Themes/default/Graphics/ScreenTitleMenu NumAdditionalSongs.lua
new file mode 100644
index 0000000000..784c3f5c19
--- /dev/null
+++ b/Themes/default/Graphics/ScreenTitleMenu NumAdditionalSongs.lua
@@ -0,0 +1,2 @@
+return LoadFont("Common Normal") .. {
+};
\ No newline at end of file
diff --git a/Themes/default/Graphics/ScreenTitleMenu NumSongs.lua b/Themes/default/Graphics/ScreenTitleMenu NumSongs.lua
new file mode 100644
index 0000000000..784c3f5c19
--- /dev/null
+++ b/Themes/default/Graphics/ScreenTitleMenu NumSongs.lua
@@ -0,0 +1,2 @@
+return LoadFont("Common Normal") .. {
+};
\ No newline at end of file
diff --git a/Themes/default/Graphics/ScreenTitleMenu TimingDifficulty.lua b/Themes/default/Graphics/ScreenTitleMenu TimingDifficulty.lua
index 0437d83b4d..1be2c9961f 100644
--- a/Themes/default/Graphics/ScreenTitleMenu TimingDifficulty.lua
+++ b/Themes/default/Graphics/ScreenTitleMenu TimingDifficulty.lua
@@ -2,7 +2,7 @@ return Def.ActorFrame {
--[[ LoadActor(THEME:GetPathG("ScreenTitleMenu","PreferenceFrame")) .. {
OnCommand=function(self)
if GetTimingDifficulty() == 7 then
- (cmd(glowshift;diffuse,Color("Yellow");diffuserightedge,Color("Red");effectcolor1,Colors.Alpha( Color("Red"), 0.5 );effectcolor2,Color("Invisible");effectperiod,1.25/2))(self);
+ (cmd(glowshift;diffuse,Color("Yellow");diffuserightedge,Color("Red");effectcolor1,Color.Alpha( Color("Red"), 0.5 );effectcolor2,Color("Invisible");effectperiod,1.25/2))(self);
elseif GetTimingDifficulty() < 4 then
(cmd(diffuseshift;effectcolor1,Color("Blue");effectcolor2,ColorDarkTone(Color("Blue"));effectperiod,1.25))(self);
elseif GetTimingDifficulty() > 4 and GetTimingDifficulty < 6 then
diff --git a/Themes/default/Graphics/ScreenTitleMenu VersionInfo.lua b/Themes/default/Graphics/ScreenTitleMenu VersionInfo.lua
index aa46df3859..34c95f08ec 100644
--- a/Themes/default/Graphics/ScreenTitleMenu VersionInfo.lua
+++ b/Themes/default/Graphics/ScreenTitleMenu VersionInfo.lua
@@ -3,8 +3,8 @@ return Def.ActorFrame {
OnCommand=cmd(diffuse,color("#f7941d");diffusetopedge,color("#fff200");diffusealpha,0.25);
};
LoadFont("Common Normal") .. {
- Text=ProductID();
- AltText="";
+ Text="StepMania";
+ AltText="StepMania";
InitCommand=cmd(y,-5;zoom,0.6);
OnCommand=cmd(shadowlength,1);
};
diff --git a/Themes/default/Graphics/ScreenWithMenuElements StageDisplay.lua b/Themes/default/Graphics/ScreenWithMenuElements StageDisplay.lua
index abc1409fa6..9853636553 100644
--- a/Themes/default/Graphics/ScreenWithMenuElements StageDisplay.lua
+++ b/Themes/default/Graphics/ScreenWithMenuElements StageDisplay.lua
@@ -69,7 +69,7 @@ else
self:settextf( "Stage %03i", RealStage);
self:diffuse( StageToColor('Stage_1st') );
self:diffusebottomedge( ColorMidTone(StageToColor('Stage_1st')) );
- self:strokecolor( Colors.Alpha( ColorDarkTone(StageToColor('Stage_1st')), 0.75) );
+ self:strokecolor( Color.Alpha( ColorDarkTone(StageToColor('Stage_1st')), 0.75) );
end;
end;
}
diff --git a/Themes/default/Graphics/_SelectIcon Routine.png b/Themes/default/Graphics/_SelectIcon Routine.png
new file mode 100644
index 0000000000..2732321931
Binary files /dev/null and b/Themes/default/Graphics/_SelectIcon Routine.png differ
diff --git a/Themes/default/Scripts/03 ThemePrefs.lua b/Themes/default/Scripts/03 ThemePrefs.lua
index d7c1555728..221ced5288 100644
--- a/Themes/default/Scripts/03 ThemePrefs.lua
+++ b/Themes/default/Scripts/03 ThemePrefs.lua
@@ -231,9 +231,9 @@ function UserPrefShowLotsaOptions()
end
function GetDefaultOptionLines()
- local LineSets = {
- "1,8,14,2,3,4,5,6,R,7,9,10,11,12,13,16,17,18", -- All
- "1,8,14,2,7,13,16,17,18", -- DDR Essentials ( no turns, fx )
+ local LineSets = { -- none of these include characters yet.
+ "1,8,14,2,3,4,5,6,R,7,9,10,11,12,13,16,17", -- All
+ "1,8,14,2,7,13,16,17", -- DDR Essentials ( no turns, fx )
};
local function IsExtra()
if GAMESTATE:IsExtraStage() or GAMESTATE:IsExtraStage2() then
@@ -242,15 +242,22 @@ function GetDefaultOptionLines()
return false
end
end
- if not IsExtra() then
- if GetUserPrefB("UserPrefShowLotsaOptions") then
- return GetUserPrefB("UserPrefShowLotsaOptions") and LineSets[1] or LineSets[2];
- else
- return LineSets[2]; -- Just make sure!
+
+ local function CheckCharacters(mods)
+ if CHARMAN:GetCharacterCount() > 0 then
+ return mods .. ",18"; --TODO: Better line name.
end
- else
- return "1,8,14,2,7,13,16,17,18" -- "failsafe" list
+ return mods;
end
+
+ modLines = LineSets[2];
+
+ if not IsExtra() then
+ modLines = GetUserPrefB("UserPrefShowLotsaOptions")
+ and LineSets[1] or LineSets[2];
+ end
+
+ return CheckCharacters(modLines);
end;
function UserPrefAutoSetStyle()
diff --git a/Themes/default/Sounds/ScreenCredits music.redir b/Themes/default/Sounds/ScreenCredits music.redir
new file mode 100644
index 0000000000..cd560a087c
--- /dev/null
+++ b/Themes/default/Sounds/ScreenCredits music.redir
@@ -0,0 +1 @@
+_Music credits (loop)
\ No newline at end of file
diff --git a/Themes/default/Sounds/_Music credits (loop).ogg b/Themes/default/Sounds/_Music credits (loop).ogg
new file mode 100644
index 0000000000..2d5db646dd
Binary files /dev/null and b/Themes/default/Sounds/_Music credits (loop).ogg differ
diff --git a/Themes/default/metrics.ini b/Themes/default/metrics.ini
index 65558ea9ca..11e368b4e4 100644
--- a/Themes/default/metrics.ini
+++ b/Themes/default/metrics.ini
@@ -70,8 +70,6 @@ NumberOnCommand=y,240-216-1.5;shadowlength,1;horizalign,right;vertalign,bottom;s
LabelOnCommand=x,6;y,22.5;shadowlength,1;zoom,0.75;diffusebottomedge,color("0.75,0.75,0.75,1");horizalign,left;vertalign,bottom
[HoldJudgment]
-HoldJudgmentLetGoCommand=finishtweening;shadowlength,0;diffusealpha,1;zoom,1;y,-10;linear,0.8;y,10;sleep,0.5;linear,0.1;zoomy,0.5;zoomx,2;diffusealpha,0
-HoldJudgmentHeldCommand=finishtweening;shadowlength,0;diffusealpha,1;zoom,1.25;linear,0.3;zoomx,1;zoomy,1;sleep,0.5;linear,0.1;zoomy,0.5;zoomx,2;diffusealpha,0
[HelpDisplay]
TipShowTime=7
@@ -112,7 +110,7 @@ ItemsSpacingY=24
NumShownItems=8
[FadingBanner]
-BannerFadeFromCachedCommand=diffusealpha,1;stoptweening;accelerate,0.05;glow,Colors.Alpha( Color("White"), 0.45 );decelerate,0.175;diffusealpha,0;glow,Color("Invisible");
+BannerFadeFromCachedCommand=diffusealpha,1;stoptweening;accelerate,0.05;glow,Color.Alpha( Color("White"), 0.45 );decelerate,0.175;diffusealpha,0;glow,Color("Invisible");
[Gameplay]
@@ -424,7 +422,7 @@ end;
ShowAutogen=true
AutogenX=0
AutogenY=0
-#AutogenOnCommand=diffuseshift;effectcolor1,Colors.Alpha( Color("Green") , 0.5 );effectcolor2,ColorLightTone( Color("Green") );
+#AutogenOnCommand=diffuseshift;effectcolor1,Color.Alpha( Color("Green") , 0.5 );effectcolor2,ColorLightTone( Color("Green") );
AutogenOnCommand=blend,Blend.Add;diffuseshift;effectcolor1,color("#FFCC00FF");effectcolor2,color("#FFCC0088");
#
ShowStepsType=GetUserPrefB("UserPrefAutoSetStyle")
@@ -481,6 +479,7 @@ Fallback="StepsDisplay"
# end;
PillTransformFunction=function(self,offsetFromCenter,itemIndex,numItems) \
local fItemWidth = ( 256 / numItems ) \
+ self:x( ((itemIndex-(numItems/2))*fItemWidth) + ( numItems / 2 ) ); \
self:zoomtowidth(fItemWidth); \
end;
# PillTransformFunction=function(self,offsetFromCenter,itemIndex,numItems) \
@@ -491,8 +490,8 @@ end;
# self:effecttiming(1,0.01875*itemIndex,1,1-(0.01875*itemIndex)); \
# self:effectclock('beatnooffset'); \
# end;
-TextureCoordScaleX=1
-NumPills=1
+TextureCoordScaleX=256/16
+NumPills=16
[TextBanner]
TitleOnCommand=horizalign,left;shadowlength,1;
@@ -507,6 +506,7 @@ ArtistPrependString=""
[ScreenDebugOverlay]
[ScreenSystemLayer]
+ShowClock=true
CreditsP1OnCommand=horizalign,left;vertalign,bottom;zoom,0.675;shadowlength,1;diffusebottomedge,PlayerColor(PLAYER_1);
#
CreditsP2OnCommand=horizalign,right;vertalign,bottom;zoom,0.675;shadowlength,1;diffusebottomedge,PlayerColor(PLAYER_2);
@@ -612,6 +612,13 @@ CurrentGametypeY=SCREEN_HEIGHT*0.1575
CurrentGametypeOnCommand=vertalign,bottom;
CurrentGametypeOffCommand=linear,0.5;cropleft,1
#
+ShowNumSongs=true
+NumSongsX=SCREEN_WIDTH*0.99
+NumSongsY=SCREEN_HEIGHT*0.1575+5
+NumSongsOnCommand=vertalign,bottom;horizalign,right;zoom,0.5;playcommand,"Set"
+NumSongsOffCommand=
+#
+#
ShowTimingDifficulty=true
TimingDifficultyX=SCREEN_LEFT+84
TimingDifficultyY=SCREEN_TOP+22
@@ -705,7 +712,7 @@ IconChoiceDoubleX=SCREEN_CENTER_X-160
IconChoiceDoubleY=SCREEN_CENTER_Y
IconChoiceDoubleOnCommand=zoom,0;bounceend,0.35;zoom,1
IconChoiceDoubleOffCommand=linear,0.1175;zoomx,0
-#
+####
IconChoiceSoloX=SCREEN_CENTER_X-160
IconChoiceSoloY=SCREEN_CENTER_Y+96
IconChoiceSoloOnCommand=zoom,0;bounceend,0.35;zoom,1
@@ -715,17 +722,22 @@ IconChoiceHalfDoubleX=SCREEN_CENTER_X-160
IconChoiceHalfDoubleY=SCREEN_CENTER_Y+96
IconChoiceHalfDoubleOnCommand=zoom,0;bounceend,0.35;zoom,1
IconChoiceHalfDoubleOffCommand=linear,0.1175;zoomx,0
-#
+####
IconChoiceVersusX=SCREEN_CENTER_X+160
-IconChoiceVersusY=SCREEN_CENTER_Y-48
+IconChoiceVersusY=string.find(THEME:GetMetric("ScreenSelectStyle","ChoiceNames"),"Routine") and SCREEN_CENTER_Y-96 or SCREEN_CENTER_Y-48
IconChoiceVersusOnCommand=zoom,0;bounceend,0.35;zoom,1
IconChoiceVersusOffCommand=linear,0.1175;zoomx,0
#
IconChoiceCoupleX=SCREEN_CENTER_X+160
-IconChoiceCoupleY=SCREEN_CENTER_Y+48
+IconChoiceCoupleY=string.find(THEME:GetMetric("ScreenSelectStyle","ChoiceNames"),"Routine") and SCREEN_CENTER_Y or SCREEN_CENTER_Y+48
IconChoiceCoupleOnCommand=zoom,0;bounceend,0.35;zoom,1
IconChoiceCoupleOffCommand=linear,0.1175;zoomx,0
#
+IconChoiceRoutineX=SCREEN_CENTER_X+160
+IconChoiceRoutineY=SCREEN_CENTER_Y+96
+IconChoiceRoutineOnCommand=zoom,0;bounceend,0.35;zoom,1
+IconChoiceRoutineOffCommand=linear,0.1175;zoomx,0
+#
IconChoicekb7X=SCREEN_CENTER_X
IconChoicekb7Y=SCREEN_CENTER_Y
IconChoicekb7OnCommand=zoom,0;bounceend,0.35;zoom,1
@@ -1216,7 +1228,7 @@ ItemsLongRowSharedX=SCREEN_CENTER_X
[ScreenTestInput]
[ScreenOptionsSystemDirection]
-LineNames="1,2,3,4,5,6,7,8,9,FlashyCombo,RollCombo,10,11,12,13,14,15,16,LF,17,18,19,20,21,22"
+LineNames="1,2,3,4,5,6,7,8,9,FlashyCombo,RollCombo,10,11,12,13,14,16,LF,17,18,19,20,21,22"
LineLF="lua,UserPrefLongFail()"
LineRollCombo="lua,UserPrefComboOnRolls()"
LineFlashyCombo="lua,UserPrefFlashyCombo()"
@@ -1224,7 +1236,7 @@ LineFlashyCombo="lua,UserPrefFlashyCombo()"
[ScreenOptionsGraphicsSound]
[ScreenOptionsAdvanced]
-LineNames="Score,3,4,8,11,13,14,15,16,28,29,30,RollCombo"
+LineNames="Score,3,4,8,11,13,14,16,28,29,30,RollCombo"
LineRollCombo="lua,UserPrefComboOnRolls()"
[ScreenAppearanceOptions]
@@ -1301,18 +1313,18 @@ SongMeterDisplayOffCommand=
#
ShowSongTitle=true
SongTitleX=SCREEN_CENTER_X
-SongTitleY=SCREEN_TOP+50+12
-SongTitleOnCommand=draworder,55;shadowlength,1;basezoom,0.5;zoomy,0;sleep,1.5+0.5;smooth,0.5;zoom,1;y,SCREEN_TOP+50+12
+SongTitleY=SCREEN_TOP+50
+SongTitleOnCommand=draworder,55;shadowlength,1;basezoom,0.5;zoomy,0;sleep,1.5+0.5;smooth,0.5;zoom,1;y,SCREEN_TOP+50
SongTitleOffCommand=
#
SongMeterDisplayP1X=SCREEN_LEFT+16
SongMeterDisplayP1Y=SCREEN_CENTER_Y
-SongMeterDisplayP1OnCommand=rotationz,-90;zoom,0;addx,-24;sleep,1.5;decelerate,0.5;zoom,1;addx,24
+SongMeterDisplayP1OnCommand=draworder,5;rotationz,-90;zoom,0;addx,-24;sleep,1.5;decelerate,0.5;zoom,1;addx,24
SongMeterDisplayP1OffCommand=
#
SongMeterDisplayP2X=SCREEN_RIGHT-16
SongMeterDisplayP2Y=SCREEN_CENTER_Y
-SongMeterDisplayP2OnCommand=rotationz,-90;zoom,0;addx,24;sleep,1.5;decelerate,0.5;zoom,1;addx,-24
+SongMeterDisplayP2OnCommand=draworder,5;rotationz,-90;zoom,0;addx,24;sleep,1.5;decelerate,0.5;zoom,1;addx,-24
SongMeterDisplayP2OffCommand=
#
ShowBPMDisplay=true
@@ -1322,16 +1334,16 @@ BPMDisplayY=SCREEN_BOTTOM-16
BPMDisplayOnCommand=draworder,101
BPMDisplayOffCommand=bounceend,0.25;zoom,0
#
-ShowStageDisplay=false
+ShowStageDisplay=true
StageDisplayX=SCREEN_CENTER_X
StageDisplayY=SCREEN_TOP+24
-StageDisplayOnCommand=zoom,0.5;
+StageDisplayOnCommand=zoom,0.675;
StageDisplayOffCommand=bounceend,0.25;zoom,0
#
ShowScoreFrame=GetUserPrefB("GameplayFooter");
ScoreFrameX=SCREEN_CENTER_X
ScoreFrameY=SCREEN_BOTTOM+4
-ScoreFrameOnCommand=draworder,100;vertalign,bottom;zoomtowidth,SCREEN_WIDTH+4;diffuse,color("#ffd400");addy,80;sleep,2;decelerate,0.5;addy,-80;
+ScoreFrameOnCommand=draworder,4;vertalign,bottom;zoomtowidth,SCREEN_WIDTH+4;diffuse,color("#ffd400");addy,80;sleep,2;decelerate,0.5;addy,-80;
ScoreFrameOffCommand=
#
LifeP1X=Center1Player() and SCREEN_CENTER_X or THEME:GetMetric(Var "LoadingScreen","PlayerP1OnePlayerOneSideX")
@@ -1499,7 +1511,7 @@ ShowJudgmentLineW2=true
ShowJudgmentLineW3=true
ShowJudgmentLineW4=true
ShowJudgmentLineW5=true
-ShowJudgmentLineHeld=true
+ShowJudgmentLineHeld=(GAMESTATE:GetCurrentGame():GetName() ~= "pump")
ShowJudgmentLineMiss=true
ShowJudgmentLineMaxCombo=true
ShowGradeArea=true
diff --git a/Utils/CreatePackage.pl b/Utils/CreatePackage.pl
index 81457e0f87..37881fd1e7 100755
--- a/Utils/CreatePackage.pl
+++ b/Utils/CreatePackage.pl
@@ -173,6 +173,7 @@ my @files = (
"NoteSkins/pump/default",
"NoteSkins/pump/frame5p",
"NoteSkins/pump/newextra",
+ "NoteSkins/pump/pad",
"NoteSkins/pump/rhythm",
"NoteSkins/pump/simple",
# kb7 noteskins
diff --git a/Xcode/Libraries/README b/Xcode/Libraries/README
index c8dcc17f8a..176dad4352 100644
--- a/Xcode/Libraries/README
+++ b/Xcode/Libraries/README
@@ -1,7 +1,7 @@
Static Libraries:
jpeg-6b
libogg-1.1.2
-libpng-1.2.8
+libpng-1.5.1
libvorbis-1.1.1
libtheora-1.0alpha5
zlib-1.2.3
diff --git a/Xcode/scripts/mkrelease.pl b/Xcode/scripts/mkrelease.pl
index c3580425e9..4f514e785e 100644
--- a/Xcode/scripts/mkrelease.pl
+++ b/Xcode/scripts/mkrelease.pl
@@ -9,7 +9,9 @@ use Cwd;
my @docs = (
"Licenses.txt",
+ "Changelog_sm5.txt",
"Changelog_sm-ssc.txt",
+ "Changelog_SSCformat.txt",
"CommandLineArgs.txt",
"credits.txt",
"Themerdocs/"
@@ -46,8 +48,8 @@ $destname =~ s/\s+/-/g;
my $tmp = tempdir;
# Copy StepMania and make smzip
-system 'cp', '-r', "$srcdir/sm-ssc.app", $tmp and die "cp -r failed: $!\n";
-system 'strip', '-x', "$tmp/sm-ssc.app/Contents/MacOS/sm-ssc";
+system 'cp', '-r', "$srcdir/StepMania.app", $tmp and die "cp -r failed: $!\n";
+system 'strip', '-x', "$tmp/StepMania.app/Contents/MacOS/StepMania";
mkdir "$tmp/Packages";
system "$srcdir/Utils/CreatePackage.pl", $srcdir, "$tmp/Packages" and die "mksmdata.pl failed: $!\n";
diff --git a/Xcode/stepmania.xcodeproj/project.pbxproj b/Xcode/stepmania.xcodeproj/project.pbxproj
index fbe2913e32..36f73f5a4b 100644
--- a/Xcode/stepmania.xcodeproj/project.pbxproj
+++ b/Xcode/stepmania.xcodeproj/project.pbxproj
@@ -45,9 +45,9 @@
2B17AB8A13980FF6001AE57D /* pngwrite.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6132113773C8E00CC8BBD /* pngwrite.c */; };
2B17AB8B13980FF6001AE57D /* pngwtran.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6132213773C8E00CC8BBD /* pngwtran.c */; };
2B17AB8C13980FF6001AE57D /* pngwutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6132313773C8E00CC8BBD /* pngwutil.c */; };
- 2B17AB9F13981271001AE57D /* libpng-1.5.1sm0.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17AB7213980FDF001AE57D /* libpng-1.5.1sm0.1.a */; };
+ 2B17AB9F13981271001AE57D /* libpng-1.5.1-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17AB7213980FDF001AE57D /* libpng-1.5.1-sm5.a */; };
2B17ABC51398153F001AE57D /* glew.c in Sources */ = {isa = PBXBuildFile; fileRef = EE879BAA132E06C50078FDDC /* glew.c */; };
- 2B17ABCF139815E0001AE57D /* libglew.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABC013981521001AE57D /* libglew.a */; };
+ 2B17ABCF139815E0001AE57D /* libglew-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABC013981521001AE57D /* libglew-sm5.a */; };
2B17ABE51398179E001AE57D /* chartables.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7904AFD87300D02EE9 /* chartables.c */; };
2B17ABE61398179E001AE57D /* get.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7A04AFD87300D02EE9 /* get.c */; };
2B17ABE71398179E001AE57D /* internal.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8B6C7B04AFD87300D02EE9 /* internal.h */; };
@@ -55,8 +55,8 @@
2B17ABE91398179E001AE57D /* pcre.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7D04AFD87300D02EE9 /* pcre.c */; };
2B17ABEA1398179E001AE57D /* pcre.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8B6C7E04AFD87300D02EE9 /* pcre.h */; };
2B17ABEB1398179E001AE57D /* study.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7F04AFD87300D02EE9 /* study.c */; };
- 2B17ABFC139817D5001AE57D /* libpcre.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABE013981756001AE57D /* libpcre.a */; };
- 2B17ABFD139817D6001AE57D /* libpcre.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABE013981756001AE57D /* libpcre.a */; };
+ 2B17ABFC139817D5001AE57D /* libpcre-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABE013981756001AE57D /* libpcre-sm5.a */; };
+ 2B17ABFD139817D6001AE57D /* libpcre-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABE013981756001AE57D /* libpcre-sm5.a */; };
2B30D6821315EA7E00044B68 /* MouseDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B30D6801315EA7E00044B68 /* MouseDevice.cpp */; };
2B30D6831315EA7E00044B68 /* MouseDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B30D6811315EA7E00044B68 /* MouseDevice.h */; };
2B43509513949F37006FA051 /* TimingSegments.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B43509313949F37006FA051 /* TimingSegments.h */; };
@@ -321,7 +321,6 @@
AA29CDD50558741A00961A51 /* ScreenSelectCharacter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E005B047711F3005F316C /* ScreenSelectCharacter.cpp */; };
AA29CDDB0558741A00961A51 /* ScreenSelectMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0069047711F3005F316C /* ScreenSelectMusic.cpp */; };
AA29CDDD0558741A00961A51 /* ScreenSongOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E006F047711F3005F316C /* ScreenSongOptions.cpp */; };
- AA29CDE10558741A00961A51 /* ScreenTestFonts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */; };
AA29CDE20558741A00961A51 /* ScreenTestSound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007B047711F3005F316C /* ScreenTestSound.cpp */; };
AA29CDE30558741A00961A51 /* ScreenTextEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007D047711F3005F316C /* ScreenTextEntry.cpp */; };
AA29CDE40558741A00961A51 /* ScreenTitleMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007F047711F3005F316C /* ScreenTitleMenu.cpp */; };
@@ -535,7 +534,6 @@
AA40D24209A08D650068C0D5 /* ScreenSelectCharacter.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E005C047711F3005F316C /* ScreenSelectCharacter.h */; };
AA40D24609A08D650068C0D5 /* ScreenSelectMusic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E006A047711F3005F316C /* ScreenSelectMusic.h */; };
AA40D24809A08D650068C0D5 /* ScreenSongOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0070047711F3005F316C /* ScreenSongOptions.h */; };
- AA40D24A09A08D650068C0D5 /* ScreenTestFonts.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E007A047711F3005F316C /* ScreenTestFonts.h */; };
AA40D24B09A08D650068C0D5 /* ScreenTestSound.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E007C047711F3005F316C /* ScreenTestSound.h */; };
AA40D24C09A08D650068C0D5 /* ScreenTextEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E007E047711F3005F316C /* ScreenTextEntry.h */; };
AA40D24D09A08D650068C0D5 /* ScreenTitleMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6E0080047711F3005F316C /* ScreenTitleMenu.h */; };
@@ -862,7 +860,6 @@
AA40D3FF09A08D650068C0D5 /* ScreenSelectCharacter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E005B047711F3005F316C /* ScreenSelectCharacter.cpp */; };
AA40D40309A08D650068C0D5 /* ScreenSelectMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0069047711F3005F316C /* ScreenSelectMusic.cpp */; };
AA40D40509A08D650068C0D5 /* ScreenSongOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E006F047711F3005F316C /* ScreenSongOptions.cpp */; };
- AA40D40709A08D650068C0D5 /* ScreenTestFonts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */; };
AA40D40809A08D650068C0D5 /* ScreenTestSound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007B047711F3005F316C /* ScreenTestSound.cpp */; };
AA40D40909A08D650068C0D5 /* ScreenTextEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007D047711F3005F316C /* ScreenTextEntry.cpp */; };
AA40D40A09A08D650068C0D5 /* ScreenTitleMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA6E007F047711F3005F316C /* ScreenTitleMenu.cpp */; };
@@ -1142,8 +1139,8 @@
AA77E76508B64B9A00FA24CA /* ScreenOptionsManageCourses.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E75B08B64B9A00FA24CA /* ScreenOptionsManageCourses.cpp */; };
AA77E76708B64B9A00FA24CA /* ScreenOptionsManageProfiles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA77E75D08B64B9A00FA24CA /* ScreenOptionsManageProfiles.cpp */; };
AA77E8B108B6ABD500FA24CA /* vecLib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA77E8A108B6ABD500FA24CA /* vecLib.framework */; };
- AA7A2BAF0AE09CEC0054C5BA /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; };
- AA7A2BB00AE09CF10054C5BA /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; };
+ AA7A2BAF0AE09CEC0054C5BA /* liblua-5.1-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */; };
+ AA7A2BB00AE09CF10054C5BA /* liblua-5.1-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */; };
AA7ADC27072CAB7F00C50A7F /* RageSoundReader_Chain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7ADC23072CAB7F00C50A7F /* RageSoundReader_Chain.cpp */; };
AA7ADC29072CAB7F00C50A7F /* RageSoundUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7ADC25072CAB7F00C50A7F /* RageSoundUtil.cpp */; };
AA7C8AFC0B6744F700FD9940 /* bn_error.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8A800B6744F600FD9940 /* bn_error.c */; };
@@ -1424,10 +1421,10 @@
AA7C8CF00B67467D00FD9940 /* sober128.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C520B67467D00FD9940 /* sober128.c */; };
AA7C8CF20B67467D00FD9940 /* sprng.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C540B67467D00FD9940 /* sprng.c */; };
AA7C8CF30B67467D00FD9940 /* yarrow.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8C550B67467D00FD9940 /* yarrow.c */; };
- AA7C8D1F0B6748E300FD9940 /* libtommath.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C895F0B67444700FD9940 /* libtommath.a */; };
- AA7C8D200B6748E400FD9940 /* libtomcrypt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */; };
- AA7C8D430B674F4E00FD9940 /* libtommath.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C895F0B67444700FD9940 /* libtommath.a */; };
- AA7C8D440B674F4F00FD9940 /* libtomcrypt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */; };
+ AA7C8D1F0B6748E300FD9940 /* libtommath-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C895F0B67444700FD9940 /* libtommath-sm5.a */; };
+ AA7C8D200B6748E400FD9940 /* libtomcrypt-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C8B8B0B67460600FD9940 /* libtomcrypt-sm5.a */; };
+ AA7C8D430B674F4E00FD9940 /* libtommath-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C895F0B67444700FD9940 /* libtommath-sm5.a */; };
+ AA7C8D440B674F4F00FD9940 /* libtomcrypt-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA7C8B8B0B67460600FD9940 /* libtomcrypt-sm5.a */; };
AA7C8DAE0B68CB2200FD9940 /* GameplayAssist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8DAC0B68CB2200FD9940 /* GameplayAssist.cpp */; };
AA7C8DAF0B68CB2200FD9940 /* GameplayAssist.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7C8DAD0B68CB2200FD9940 /* GameplayAssist.h */; };
AA7C8DB00B68CB2200FD9940 /* GameplayAssist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA7C8DAC0B68CB2200FD9940 /* GameplayAssist.cpp */; };
@@ -1612,8 +1609,8 @@
AAE7804B060814AC0034E65F /* NetworkSyncManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE78049060814AC0034E65F /* NetworkSyncManager.cpp */; };
AAE7808706081A000034E65F /* ezsockets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE7808506081A000034E65F /* ezsockets.cpp */; };
AAE7812D0608249E0034E65F /* ActiveAttackList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE7812B0608249E0034E65F /* ActiveAttackList.cpp */; };
- AAE782030AC7E64D00AEFC64 /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; };
- AAE782040AC7E65200AEFC64 /* liblua-5.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */; };
+ AAE782030AC7E64D00AEFC64 /* liblua-5.1-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */; };
+ AAE782040AC7E65200AEFC64 /* liblua-5.1-sm5.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */; };
AAEBC6CC07A20AFE00793F0E /* RageSurface_Save_JPEG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6C607A20AFE00793F0E /* RageSurface_Save_JPEG.cpp */; };
AAEBC6CE07A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6C807A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp */; };
AAEBC6D007A20AFE00793F0E /* RageSurfaceUtils_Zoom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAEBC6CA07A20AFE00793F0E /* RageSurfaceUtils_Zoom.cpp */; };
@@ -1661,6 +1658,8 @@
AAFF41A40F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF41A20F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h */; };
AAFF41A50F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF41A10F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp */; };
AAFF41A60F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF41A20F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h */; };
+ B71A60C0139B41DB00183A27 /* InGameLoadingWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B71A60BE139B41DB00183A27 /* InGameLoadingWindow.cpp */; };
+ B71A60C1139B41DB00183A27 /* InGameLoadingWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = B71A60BF139B41DB00183A27 /* InGameLoadingWindow.h */; };
B75CE3B5137963350076A82D /* SongPosition.h in Headers */ = {isa = PBXBuildFile; fileRef = B75CE3B3137963350076A82D /* SongPosition.h */; };
B75CE3B6137963350076A82D /* SongPosition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B75CE3B4137963350076A82D /* SongPosition.cpp */; };
EE2153A910A75BEE0074B01B /* NotesLoaderPMS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE2153A710A75BEE0074B01B /* NotesLoaderPMS.cpp */; };
@@ -1824,9 +1823,9 @@
1215D7A108C6559A00B87D8B /* ScreenGameplayNormal.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenGameplayNormal.h; path = ../src/ScreenGameplayNormal.h; sourceTree = ""; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; };
- 2B17AB7213980FDF001AE57D /* libpng-1.5.1sm0.1.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libpng-1.5.1sm0.1.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- 2B17ABC013981521001AE57D /* libglew.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libglew.a; sourceTree = BUILT_PRODUCTS_DIR; };
- 2B17ABE013981756001AE57D /* libpcre.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libpcre.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2B17AB7213980FDF001AE57D /* libpng-1.5.1-sm5.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libpng-1.5.1-sm5.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2B17ABC013981521001AE57D /* libglew-sm5.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libglew-sm5.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2B17ABE013981756001AE57D /* libpcre-sm5.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libpcre-sm5.a"; sourceTree = BUILT_PRODUCTS_DIR; };
2B30D6801315EA7E00044B68 /* MouseDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MouseDevice.cpp; sourceTree = ""; };
2B30D6811315EA7E00044B68 /* MouseDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MouseDevice.h; sourceTree = ""; };
2B43509313949F37006FA051 /* TimingSegments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TimingSegments.h; path = ../src/TimingSegments.h; sourceTree = SOURCE_ROOT; };
@@ -2020,7 +2019,7 @@
AA28B47A058F2F5D0097C109 /* MemoryCardManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = MemoryCardManager.cpp; path = ../src/MemoryCardManager.cpp; sourceTree = ""; };
AA28B47B058F2F5D0097C109 /* MemoryCardManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = MemoryCardManager.h; path = ../src/MemoryCardManager.h; sourceTree = ""; };
AA29CE570558741A00961A51 /* Info-StepMania.plist */ = {isa = PBXFileReference; explicitFileType = text.plist; path = "Info-StepMania.plist"; sourceTree = SOURCE_ROOT; };
- AA29CE580558741A00961A51 /* sm-ssc.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "sm-ssc.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ AA29CE580558741A00961A51 /* StepMania.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = StepMania.app; sourceTree = BUILT_PRODUCTS_DIR; };
AA2C9C9F0BAD6F54002441E9 /* CodeSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CodeSet.cpp; path = ../src/CodeSet.cpp; sourceTree = ""; };
AA2C9CA00BAD6F54002441E9 /* CodeSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CodeSet.h; path = ../src/CodeSet.h; sourceTree = ""; };
AA2CA89D0BB745BD002441E9 /* ScreenContinue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScreenContinue.cpp; path = ../src/ScreenContinue.cpp; sourceTree = ""; };
@@ -2161,8 +2160,6 @@
AA6E006A047711F3005F316C /* ScreenSelectMusic.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSelectMusic.h; path = ../src/ScreenSelectMusic.h; sourceTree = ""; };
AA6E006F047711F3005F316C /* ScreenSongOptions.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenSongOptions.cpp; path = ../src/ScreenSongOptions.cpp; sourceTree = ""; };
AA6E0070047711F3005F316C /* ScreenSongOptions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenSongOptions.h; path = ../src/ScreenSongOptions.h; sourceTree = ""; };
- AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTestFonts.cpp; path = ../src/ScreenTestFonts.cpp; sourceTree = ""; };
- AA6E007A047711F3005F316C /* ScreenTestFonts.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenTestFonts.h; path = ../src/ScreenTestFonts.h; sourceTree = ""; };
AA6E007B047711F3005F316C /* ScreenTestSound.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTestSound.cpp; path = ../src/ScreenTestSound.cpp; sourceTree = ""; };
AA6E007C047711F3005F316C /* ScreenTestSound.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenTestSound.h; path = ../src/ScreenTestSound.h; sourceTree = ""; };
AA6E007D047711F3005F316C /* ScreenTextEntry.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ScreenTextEntry.cpp; path = ../src/ScreenTextEntry.cpp; sourceTree = ""; };
@@ -2421,7 +2418,7 @@
AA7ADC24072CAB7F00C50A7F /* RageSoundReader_Chain.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundReader_Chain.h; path = ../src/RageSoundReader_Chain.h; sourceTree = ""; };
AA7ADC25072CAB7F00C50A7F /* RageSoundUtil.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSoundUtil.cpp; path = ../src/RageSoundUtil.cpp; sourceTree = ""; };
AA7ADC26072CAB7F00C50A7F /* RageSoundUtil.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSoundUtil.h; path = ../src/RageSoundUtil.h; sourceTree = ""; };
- AA7C895F0B67444700FD9940 /* libtommath.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libtommath.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ AA7C895F0B67444700FD9940 /* libtommath-sm5.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libtommath-sm5.a"; sourceTree = BUILT_PRODUCTS_DIR; };
AA7C8A800B6744F600FD9940 /* bn_error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_error.c; sourceTree = ""; };
AA7C8A810B6744F600FD9940 /* bn_fast_mp_invmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_mp_invmod.c; sourceTree = ""; };
AA7C8A820B6744F600FD9940 /* bn_fast_mp_montgomery_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_mp_montgomery_reduce.c; sourceTree = ""; };
@@ -2544,7 +2541,7 @@
AA7C8AF90B6744F700FD9940 /* tommath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath.h; sourceTree = ""; };
AA7C8AFA0B6744F700FD9940 /* tommath_class.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath_class.h; sourceTree = ""; };
AA7C8AFB0B6744F700FD9940 /* tommath_superclass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath_superclass.h; sourceTree = ""; };
- AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libtomcrypt.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ AA7C8B8B0B67460600FD9940 /* libtomcrypt-sm5.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libtomcrypt-sm5.a"; sourceTree = BUILT_PRODUCTS_DIR; };
AA7C8B950B67467C00FD9940 /* aes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = aes.c; sourceTree = ""; };
AA7C8B960B67467C00FD9940 /* aes_tab.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = aes_tab.c; sourceTree = ""; };
AA7C8B990B67467C00FD9940 /* hash_memory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hash_memory.c; sourceTree = ""; };
@@ -2971,7 +2968,7 @@
AAE7808606081A000034E65F /* ezsockets.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ezsockets.h; path = ../src/ezsockets.h; sourceTree = ""; };
AAE7812B0608249E0034E65F /* ActiveAttackList.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = ActiveAttackList.cpp; path = ../src/ActiveAttackList.cpp; sourceTree = ""; };
AAE7812C0608249E0034E65F /* ActiveAttackList.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ActiveAttackList.h; path = ../src/ActiveAttackList.h; sourceTree = ""; };
- AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "liblua-5.1.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "liblua-5.1-sm5.a"; sourceTree = BUILT_PRODUCTS_DIR; };
AAEBC6C607A20AFE00793F0E /* RageSurface_Save_JPEG.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurface_Save_JPEG.cpp; path = ../src/RageSurface_Save_JPEG.cpp; sourceTree = ""; };
AAEBC6C707A20AFE00793F0E /* RageSurface_Save_JPEG.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = RageSurface_Save_JPEG.h; path = ../src/RageSurface_Save_JPEG.h; sourceTree = ""; };
AAEBC6C807A20AFE00793F0E /* RageSurfaceUtils_Dither.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = RageSurfaceUtils_Dither.cpp; path = ../src/RageSurfaceUtils_Dither.cpp; sourceTree = ""; };
@@ -3056,6 +3053,8 @@
AAFF55220549F43A00D02EE9 /* ComboGraph.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ComboGraph.h; path = ../src/ComboGraph.h; sourceTree = ""; };
AAFF5541054E736D00D02EE9 /* Attack.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Attack.cpp; path = ../src/Attack.cpp; sourceTree = ""; };
AAFF5542054E736D00D02EE9 /* Attack.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Attack.h; path = ../src/Attack.h; sourceTree = ""; };
+ B71A60BE139B41DB00183A27 /* InGameLoadingWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = InGameLoadingWindow.cpp; path = ../src/InGameLoadingWindow.cpp; sourceTree = ""; };
+ B71A60BF139B41DB00183A27 /* InGameLoadingWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InGameLoadingWindow.h; path = ../src/InGameLoadingWindow.h; sourceTree = ""; };
B75CE3B3137963350076A82D /* SongPosition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SongPosition.h; path = ../src/SongPosition.h; sourceTree = SOURCE_ROOT; };
B75CE3B4137963350076A82D /* SongPosition.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SongPosition.cpp; path = ../src/SongPosition.cpp; sourceTree = SOURCE_ROOT; };
EE2153A710A75BEE0074B01B /* NotesLoaderPMS.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NotesLoaderPMS.cpp; path = ../src/NotesLoaderPMS.cpp; sourceTree = SOURCE_ROOT; };
@@ -3117,15 +3116,15 @@
AA21E47B0A9826CD00684CEA /* libogg_link.a in Frameworks */,
AA21E47D0A9826CD00684CEA /* libtheora_link.a in Frameworks */,
AA21E47E0A9826CD00684CEA /* libvorbis_link.a in Frameworks */,
- AAE782030AC7E64D00AEFC64 /* liblua-5.1.a in Frameworks */,
- AA7C8D200B6748E400FD9940 /* libtomcrypt.a in Frameworks */,
- AA7C8D1F0B6748E300FD9940 /* libtommath.a in Frameworks */,
+ AAE782030AC7E64D00AEFC64 /* liblua-5.1-sm5.a in Frameworks */,
+ AA7C8D200B6748E400FD9940 /* libtomcrypt-sm5.a in Frameworks */,
+ AA7C8D1F0B6748E300FD9940 /* libtommath-sm5.a in Frameworks */,
AA059E2C0B8F0C67006F8139 /* libz_link.a in Frameworks */,
AAA0704E0CE5082E005A3060 /* libffmpeg_link.a in Frameworks */,
AAA071B40CE7C9C9005A3060 /* libmad-sm5.a in Frameworks */,
- 2B17AB9F13981271001AE57D /* libpng-1.5.1sm0.1.a in Frameworks */,
- 2B17ABCF139815E0001AE57D /* libglew.a in Frameworks */,
- 2B17ABFC139817D5001AE57D /* libpcre.a in Frameworks */,
+ 2B17AB9F13981271001AE57D /* libpng-1.5.1-sm5.a in Frameworks */,
+ 2B17ABCF139815E0001AE57D /* libglew-sm5.a in Frameworks */,
+ 2B17ABFC139817D5001AE57D /* libpcre-sm5.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -3147,12 +3146,12 @@
AA21E4810A9826CD00684CEA /* libogg_link.a in Frameworks */,
AA21E4830A9826CD00684CEA /* libtheora_link.a in Frameworks */,
AA21E4840A9826CD00684CEA /* libvorbis_link.a in Frameworks */,
- AAE782040AC7E65200AEFC64 /* liblua-5.1.a in Frameworks */,
- AA7C8D440B674F4F00FD9940 /* libtomcrypt.a in Frameworks */,
- AA7C8D430B674F4E00FD9940 /* libtommath.a in Frameworks */,
+ AAE782040AC7E65200AEFC64 /* liblua-5.1-sm5.a in Frameworks */,
+ AA7C8D440B674F4F00FD9940 /* libtomcrypt-sm5.a in Frameworks */,
+ AA7C8D430B674F4E00FD9940 /* libtommath-sm5.a in Frameworks */,
AA059E2B0B8F0C67006F8139 /* libz_link.a in Frameworks */,
AAA0704F0CE5082E005A3060 /* libffmpeg_link.a in Frameworks */,
- 2B17ABFD139817D6001AE57D /* libpcre.a in Frameworks */,
+ 2B17ABFD139817D6001AE57D /* libpcre-sm5.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -3160,7 +3159,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- AA7A2BAF0AE09CEC0054C5BA /* liblua-5.1.a in Frameworks */,
+ AA7A2BAF0AE09CEC0054C5BA /* liblua-5.1-sm5.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -3168,7 +3167,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- AA7A2BB00AE09CF10054C5BA /* liblua-5.1.a in Frameworks */,
+ AA7A2BB00AE09CF10054C5BA /* liblua-5.1-sm5.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -3233,17 +3232,17 @@
19C28FACFE9D520D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
- AA29CE580558741A00961A51 /* sm-ssc.app */,
+ AA29CE580558741A00961A51 /* StepMania.app */,
AA40D52B09A08D660068C0D5 /* sm-ssc.app */,
- AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */,
+ AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */,
AA7A2B940AE09B520054C5BA /* lua */,
AA7A2BAB0AE09CD50054C5BA /* luac */,
- AA7C895F0B67444700FD9940 /* libtommath.a */,
- AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */,
+ AA7C895F0B67444700FD9940 /* libtommath-sm5.a */,
+ AA7C8B8B0B67460600FD9940 /* libtomcrypt-sm5.a */,
AAA070A90CE7B0DF005A3060 /* libmad-sm5.a */,
- 2B17AB7213980FDF001AE57D /* libpng-1.5.1sm0.1.a */,
- 2B17ABC013981521001AE57D /* libglew.a */,
- 2B17ABE013981756001AE57D /* libpcre.a */,
+ 2B17AB7213980FDF001AE57D /* libpng-1.5.1-sm5.a */,
+ 2B17ABC013981521001AE57D /* libglew-sm5.a */,
+ 2B17ABE013981756001AE57D /* libpcre-sm5.a */,
);
name = Products;
sourceTree = "";
@@ -3536,8 +3535,6 @@
AA07A55E0843E72B00E33D21 /* ScreenSyncOverlay.h */,
AA1145DB075DFADF0050A3D1 /* ScreenSystemLayer.cpp */,
AA1145DC075DFADF0050A3D1 /* ScreenSystemLayer.h */,
- AA6E0079047711F3005F316C /* ScreenTestFonts.cpp */,
- AA6E007A047711F3005F316C /* ScreenTestFonts.h */,
AAC622FA05389A0500D02EE9 /* ScreenTestInput.cpp */,
AAC622FB05389A0500D02EE9 /* ScreenTestInput.h */,
AAF7435906110E8D00B19AD1 /* ScreenTestLights.cpp */,
@@ -4094,6 +4091,8 @@
AA6EFE9104770E7C005F316C /* GrooveRadar.h */,
AA6EFE9404770E7C005F316C /* HelpDisplay.cpp */,
AA6EFE9504770E7C005F316C /* HelpDisplay.h */,
+ B71A60BE139B41DB00183A27 /* InGameLoadingWindow.cpp */,
+ B71A60BF139B41DB00183A27 /* InGameLoadingWindow.h */,
AA729C460599B54D00779F33 /* MemoryCardDisplay.cpp */,
AA729C470599B54D00779F33 /* MemoryCardDisplay.h */,
AA6EFE9A04770E7C005F316C /* MenuTimer.cpp */,
@@ -5148,6 +5147,7 @@
2B9C2E8E137A138B004C92F3 /* NotesLoaderJson.h in Headers */,
2B9C2E90137A138B004C92F3 /* NotesWriterJson.h in Headers */,
2B43509513949F37006FA051 /* TimingSegments.h in Headers */,
+ B71A60C1139B41DB00183A27 /* InGameLoadingWindow.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -5276,7 +5276,6 @@
AA40D24209A08D650068C0D5 /* ScreenSelectCharacter.h in Headers */,
AA40D24609A08D650068C0D5 /* ScreenSelectMusic.h in Headers */,
AA40D24809A08D650068C0D5 /* ScreenSongOptions.h in Headers */,
- AA40D24A09A08D650068C0D5 /* ScreenTestFonts.h in Headers */,
AA40D24B09A08D650068C0D5 /* ScreenTestSound.h in Headers */,
AA40D24C09A08D650068C0D5 /* ScreenTextEntry.h in Headers */,
AA40D24D09A08D650068C0D5 /* ScreenTitleMenu.h in Headers */,
@@ -5673,7 +5672,7 @@
);
name = png;
productName = png;
- productReference = 2B17AB7213980FDF001AE57D /* libpng-1.5.1sm0.1.a */;
+ productReference = 2B17AB7213980FDF001AE57D /* libpng-1.5.1-sm5.a */;
productType = "com.apple.product-type.library.static";
};
2B17ABBF13981521001AE57D /* glew */ = {
@@ -5690,7 +5689,7 @@
);
name = glew;
productName = glew;
- productReference = 2B17ABC013981521001AE57D /* libglew.a */;
+ productReference = 2B17ABC013981521001AE57D /* libglew-sm5.a */;
productType = "com.apple.product-type.library.static";
};
2B17ABDF13981756001AE57D /* pcre */ = {
@@ -5707,7 +5706,7 @@
);
name = pcre;
productName = pcre;
- productReference = 2B17ABE013981756001AE57D /* libpcre.a */;
+ productReference = 2B17ABE013981756001AE57D /* libpcre-sm5.a */;
productType = "com.apple.product-type.library.static";
};
AA29CC240558741A00961A51 /* stepmania */ = {
@@ -5737,7 +5736,7 @@
name = stepmania;
productInstallPath = "$(HOME)/Applications";
productName = "SDL App";
- productReference = AA29CE580558741A00961A51 /* sm-ssc.app */;
+ productReference = AA29CE580558741A00961A51 /* StepMania.app */;
productType = "com.apple.product-type.application";
};
AA40D1B409A08D650068C0D5 /* stepmania-bare */ = {
@@ -5815,7 +5814,7 @@
);
name = tommath;
productName = tommath;
- productReference = AA7C895F0B67444700FD9940 /* libtommath.a */;
+ productReference = AA7C895F0B67444700FD9940 /* libtommath-sm5.a */;
productType = "com.apple.product-type.library.static";
};
AA7C8B8A0B67460600FD9940 /* tomcrypt */ = {
@@ -5832,7 +5831,7 @@
);
name = tomcrypt;
productName = tomcrypt;
- productReference = AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */;
+ productReference = AA7C8B8B0B67460600FD9940 /* libtomcrypt-sm5.a */;
productType = "com.apple.product-type.library.static";
};
AAA070A80CE7B0DF005A3060 /* mad */ = {
@@ -5866,7 +5865,7 @@
);
name = "lua-5.1";
productName = "lua-5.1";
- productReference = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1.a */;
+ productReference = AAE7817E0AC7E37B00AEFC64 /* liblua-5.1-sm5.a */;
productType = "com.apple.product-type.library.static";
};
/* End PBXNativeTarget section */
@@ -6200,7 +6199,6 @@
AA29CDD50558741A00961A51 /* ScreenSelectCharacter.cpp in Sources */,
AA29CDDB0558741A00961A51 /* ScreenSelectMusic.cpp in Sources */,
AA29CDDD0558741A00961A51 /* ScreenSongOptions.cpp in Sources */,
- AA29CDE10558741A00961A51 /* ScreenTestFonts.cpp in Sources */,
AA29CDE20558741A00961A51 /* ScreenTestSound.cpp in Sources */,
AA29CDE30558741A00961A51 /* ScreenTextEntry.cpp in Sources */,
AA29CDE40558741A00961A51 /* ScreenTitleMenu.cpp in Sources */,
@@ -6489,6 +6487,7 @@
2BD06FF2137242680018CB9F /* json_value.cpp in Sources */,
2BD06FF4137242680018CB9F /* json_writer.cpp in Sources */,
2B43509613949F37006FA051 /* TimingSegments.cpp in Sources */,
+ B71A60C0139B41DB00183A27 /* InGameLoadingWindow.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -6607,7 +6606,6 @@
AA40D3FF09A08D650068C0D5 /* ScreenSelectCharacter.cpp in Sources */,
AA40D40309A08D650068C0D5 /* ScreenSelectMusic.cpp in Sources */,
AA40D40509A08D650068C0D5 /* ScreenSongOptions.cpp in Sources */,
- AA40D40709A08D650068C0D5 /* ScreenTestFonts.cpp in Sources */,
AA40D40809A08D650068C0D5 /* ScreenTestSound.cpp in Sources */,
AA40D40909A08D650068C0D5 /* ScreenTextEntry.cpp in Sources */,
AA40D40A09A08D650068C0D5 /* ScreenTitleMenu.cpp in Sources */,
@@ -7344,6 +7342,7 @@
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = NO;
GCC_PREFIX_HEADER = "";
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
@@ -7373,7 +7372,7 @@
INSTALL_PATH = /usr/local/lib;
OTHER_LDFLAGS = "";
PREBINDING = NO;
- PRODUCT_NAME = "png-1.5.1sm0.1";
+ PRODUCT_NAME = "png-1.5.1-sm5";
USER_HEADER_SEARCH_PATHS = "";
};
name = Native;
@@ -7387,6 +7386,7 @@
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = NO;
GCC_PREFIX_HEADER = "";
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
@@ -7416,7 +7416,7 @@
INSTALL_PATH = /usr/local/lib;
OTHER_LDFLAGS = "";
PREBINDING = NO;
- PRODUCT_NAME = "png-1.5.1sm0.1";
+ PRODUCT_NAME = "png-1.5.1-sm5";
USER_HEADER_SEARCH_PATHS = "";
};
name = PerformanceDebug;
@@ -7430,6 +7430,7 @@
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = NO;
GCC_PREFIX_HEADER = "";
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
@@ -7459,7 +7460,7 @@
INSTALL_PATH = /usr/local/lib;
OTHER_LDFLAGS = "";
PREBINDING = NO;
- PRODUCT_NAME = "png-1.5.1sm0.1";
+ PRODUCT_NAME = "png-1.5.1-sm5";
USER_HEADER_SEARCH_PATHS = "";
};
name = Universal;
@@ -7476,6 +7477,7 @@
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = NO;
GCC_PREFIX_HEADER = "";
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
@@ -7505,7 +7507,7 @@
INSTALL_PATH = /usr/local/lib;
OTHER_LDFLAGS = "";
PREBINDING = NO;
- PRODUCT_NAME = "png-1.5.1sm0.1";
+ PRODUCT_NAME = "png-1.5.1-sm5";
USER_HEADER_SEARCH_PATHS = "";
};
name = Debug;
@@ -7519,6 +7521,7 @@
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = NO;
GCC_PREFIX_HEADER = "";
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
@@ -7547,7 +7550,7 @@
INSTALL_PATH = /usr/local/lib;
OTHER_LDFLAGS = "";
PREBINDING = NO;
- PRODUCT_NAME = glew;
+ PRODUCT_NAME = "glew-sm5";
USER_HEADER_SEARCH_PATHS = "";
};
name = Native;
@@ -7561,6 +7564,7 @@
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = NO;
GCC_PREFIX_HEADER = "";
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
@@ -7589,7 +7593,7 @@
INSTALL_PATH = /usr/local/lib;
OTHER_LDFLAGS = "";
PREBINDING = NO;
- PRODUCT_NAME = glew;
+ PRODUCT_NAME = "glew-sm5";
USER_HEADER_SEARCH_PATHS = "";
};
name = PerformanceDebug;
@@ -7603,6 +7607,7 @@
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = NO;
GCC_PREFIX_HEADER = "";
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
@@ -7631,7 +7636,7 @@
INSTALL_PATH = /usr/local/lib;
OTHER_LDFLAGS = "";
PREBINDING = NO;
- PRODUCT_NAME = glew;
+ PRODUCT_NAME = "glew-sm5";
USER_HEADER_SEARCH_PATHS = "";
};
name = Universal;
@@ -7648,6 +7653,7 @@
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = NO;
GCC_PREFIX_HEADER = "";
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
@@ -7676,7 +7682,7 @@
INSTALL_PATH = /usr/local/lib;
OTHER_LDFLAGS = "";
PREBINDING = NO;
- PRODUCT_NAME = glew;
+ PRODUCT_NAME = "glew-sm5";
USER_HEADER_SEARCH_PATHS = "";
};
name = Debug;
@@ -7690,6 +7696,7 @@
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = "";
GCC_PREFIX_HEADER = "";
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
@@ -7717,7 +7724,7 @@
INSTALL_PATH = /usr/local/lib;
OTHER_LDFLAGS = "";
PREBINDING = NO;
- PRODUCT_NAME = pcre;
+ PRODUCT_NAME = "pcre-sm5";
};
name = Native;
};
@@ -7730,6 +7737,7 @@
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = "";
GCC_PREFIX_HEADER = "";
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
@@ -7757,7 +7765,7 @@
INSTALL_PATH = /usr/local/lib;
OTHER_LDFLAGS = "";
PREBINDING = NO;
- PRODUCT_NAME = pcre;
+ PRODUCT_NAME = "pcre-sm5";
};
name = PerformanceDebug;
};
@@ -7770,6 +7778,7 @@
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = "";
GCC_PREFIX_HEADER = "";
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
@@ -7797,7 +7806,7 @@
INSTALL_PATH = /usr/local/lib;
OTHER_LDFLAGS = "";
PREBINDING = NO;
- PRODUCT_NAME = pcre;
+ PRODUCT_NAME = "pcre-sm5";
};
name = Universal;
};
@@ -7813,6 +7822,7 @@
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = "";
GCC_PREFIX_HEADER = "";
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
@@ -7840,7 +7850,7 @@
INSTALL_PATH = /usr/local/lib;
OTHER_LDFLAGS = "";
PREBINDING = NO;
- PRODUCT_NAME = pcre;
+ PRODUCT_NAME = "pcre-sm5";
};
name = Debug;
};
@@ -7876,11 +7886,13 @@
buildSettings = {
CONFIGURATION_BUILD_DIR = "$(SYMROOT)";
FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)";
+ GCC_AUTO_VECTORIZATION = NO;
GCC_ENABLE_SSE3_EXTENSIONS = NO;
GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch";
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
"$(SRCROOT)/../src",
"$(SRCROOT)/../src/ffmpeg/include",
@@ -7903,11 +7915,10 @@
OTHER_CPLUSPLUSFLAGS = (
"-finline-limit=300",
"-fconstant-cfstrings",
- "-fsingle-precision-constant",
"-fno-exceptions",
"-falign-loops=16",
);
- PRODUCT_NAME = "$(value)";
+ PRODUCT_NAME = StepMania;
SYMROOT = "$(SRCROOT)/..";
WRAPPER_EXTENSION = app;
};
@@ -7938,7 +7949,7 @@
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
GCC_STRICT_ALIASING = YES;
GCC_UNROLL_LOOPS = YES;
- GCC_VERSION = 4.0;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
@@ -7992,6 +8003,7 @@
NO_MP3_SUPPORT,
WITHOUT_NETWORKING,
);
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
"$(SRCROOT)/../src",
"$(SRCROOT)/Frameworks/ffmpeg.framework/Headers",
@@ -8040,6 +8052,7 @@
NO_MP3_SUPPORT,
WITHOUT_NETWORKING,
);
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
"$(SRCROOT)/../src",
"$(SRCROOT)/Frameworks/ffmpeg.framework/Headers",
@@ -8090,6 +8103,7 @@
WITHOUT_NETWORKING,
"$(value)",
);
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
"$(SRCROOT)/../src",
"$(SRCROOT)/Frameworks/ffmpeg.framework/Headers",
@@ -8133,6 +8147,7 @@
LUA_USE_MACOSX,
"$(value)",
);
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
INSTALL_PATH = "$(HOME)/bin";
LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)";
OBJROOT = "$(SRCROOT)/build";
@@ -8151,6 +8166,7 @@
LUA_USE_MACOSX,
"$(value)",
);
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
INSTALL_PATH = "$(HOME)/bin";
LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)";
OBJROOT = "$(SRCROOT)/build";
@@ -8169,6 +8185,7 @@
LUA_USE_MACOSX,
"$(value)",
);
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
INSTALL_PATH = "$(HOME)/bin";
LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)";
OBJROOT = "$(SRCROOT)/build";
@@ -8184,6 +8201,7 @@
GCC_PRECOMPILE_PREFIX_HEADER = NO;
GCC_PREFIX_HEADER = "";
GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
INSTALL_PATH = "$(HOME)/bin";
LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)";
OBJROOT = "$(SRCROOT)/build";
@@ -8199,6 +8217,7 @@
GCC_PRECOMPILE_PREFIX_HEADER = NO;
GCC_PREFIX_HEADER = "";
GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
INSTALL_PATH = "$(HOME)/bin";
LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)";
OBJROOT = "$(SRCROOT)/build";
@@ -8214,6 +8233,7 @@
GCC_PRECOMPILE_PREFIX_HEADER = NO;
GCC_PREFIX_HEADER = "";
GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
INSTALL_PATH = "$(HOME)/bin";
LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)";
OBJROOT = "$(SRCROOT)/build";
@@ -8253,11 +8273,12 @@
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)";
GCC_DYNAMIC_NO_PIC = YES;
GCC_MODEL_TUNING = G5;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
GCC_WARN_PROTOTYPE_CONVERSION = NO;
INSTALL_PATH = /usr/local/lib;
- PRODUCT_NAME = tommath;
+ PRODUCT_NAME = "tommath-sm5";
SYMROOT = "$(SRCROOT)/build";
};
name = Native;
@@ -8268,11 +8289,12 @@
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)";
GCC_DYNAMIC_NO_PIC = YES;
GCC_MODEL_TUNING = G5;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
GCC_WARN_PROTOTYPE_CONVERSION = NO;
INSTALL_PATH = /usr/local/lib;
- PRODUCT_NAME = tommath;
+ PRODUCT_NAME = "tommath-sm5";
SYMROOT = "$(SRCROOT)/build";
};
name = Universal;
@@ -8285,11 +8307,12 @@
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
GCC_WARN_PROTOTYPE_CONVERSION = NO;
INSTALL_PATH = /usr/local/lib;
- PRODUCT_NAME = tommath;
+ PRODUCT_NAME = "tommath-sm5";
SYMROOT = "$(SRCROOT)/build";
};
name = Debug;
@@ -8302,11 +8325,12 @@
GCC_DYNAMIC_NO_PIC = YES;
GCC_ENABLE_CPP_RTTI = NO;
GCC_NO_COMMON_BLOCKS = YES;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
GCC_WARN_PROTOTYPE_CONVERSION = NO;
INSTALL_PATH = /usr/local/lib;
KEEP_PRIVATE_EXTERNS = YES;
- PRODUCT_NAME = tomcrypt;
+ PRODUCT_NAME = "tomcrypt-sm5";
SYMROOT = "$(SRCROOT)/build";
};
name = Native;
@@ -8319,11 +8343,12 @@
GCC_DYNAMIC_NO_PIC = YES;
GCC_ENABLE_CPP_RTTI = NO;
GCC_NO_COMMON_BLOCKS = YES;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
GCC_WARN_PROTOTYPE_CONVERSION = NO;
INSTALL_PATH = /usr/local/lib;
KEEP_PRIVATE_EXTERNS = YES;
- PRODUCT_NAME = tomcrypt;
+ PRODUCT_NAME = "tomcrypt-sm5";
SYMROOT = "$(SRCROOT)/build";
};
name = Universal;
@@ -8336,11 +8361,16 @@
GCC_DYNAMIC_NO_PIC = YES;
GCC_ENABLE_CPP_RTTI = NO;
GCC_NO_COMMON_BLOCKS = YES;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ LTC_NO_ROLC,
+ "DEBUG=1",
+ );
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
GCC_WARN_PROTOTYPE_CONVERSION = NO;
INSTALL_PATH = /usr/local/lib;
KEEP_PRIVATE_EXTERNS = YES;
- PRODUCT_NAME = tomcrypt;
+ PRODUCT_NAME = "tomcrypt-sm5";
SYMROOT = "$(SRCROOT)/build";
};
name = Debug;
@@ -8366,6 +8396,7 @@
"SIZEOF_LONG=4",
"$(FPM)",
);
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
@@ -8402,6 +8433,7 @@
"SIZEOF_LONG=4",
"$(FPM)",
);
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
@@ -8438,6 +8470,7 @@
"SIZEOF_LONG=4",
"$(FPM)",
);
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
@@ -8477,6 +8510,7 @@
"SIZEOF_LONG=4",
"$(FPM)",
);
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
@@ -8515,7 +8549,7 @@
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_STRICT_ALIASING = YES;
GCC_UNROLL_LOOPS = YES;
- GCC_VERSION = 4.0;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
@@ -8562,12 +8596,14 @@
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = stabs;
FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)";
+ GCC_AUTO_VECTORIZATION = NO;
GCC_ENABLE_SSE3_EXTENSIONS = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch";
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
"$(SRCROOT)/../src",
"$(SRCROOT)/../src/ffmpeg/include",
@@ -8590,11 +8626,10 @@
OTHER_CPLUSPLUSFLAGS = (
"-finline-limit=300",
"-fconstant-cfstrings",
- "-fsingle-precision-constant",
"-fno-exceptions",
"-falign-loops=16",
);
- PRODUCT_NAME = "$(value)";
+ PRODUCT_NAME = StepMania;
STRIP_INSTALLED_PRODUCT = NO;
SYMROOT = "$(SRCROOT)/..";
WRAPPER_EXTENSION = app;
@@ -8642,6 +8677,7 @@
NO_MP3_SUPPORT,
WITHOUT_NETWORKING,
);
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
"$(SRCROOT)/../src",
"$(SRCROOT)/Frameworks/ffmpeg.framework/Headers",
@@ -8687,6 +8723,7 @@
"$(value)",
LUA_USE_MACOSX,
);
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
@@ -8695,7 +8732,7 @@
INSTALL_PATH = /usr/local/lib;
OBJROOT = "$(SRCROOT)/build";
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
- PRODUCT_NAME = "lua-5.1";
+ PRODUCT_NAME = "lua-5.1-sm5";
SYMROOT = "$(SRCROOT)/build";
};
name = PerformanceDebug;
@@ -8710,6 +8747,7 @@
LUA_USE_MACOSX,
"$(value)",
);
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
INSTALL_PATH = "$(HOME)/bin";
LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)";
OBJROOT = "$(SRCROOT)/build";
@@ -8725,6 +8763,7 @@
GCC_PRECOMPILE_PREFIX_HEADER = NO;
GCC_PREFIX_HEADER = "";
GCC_PREPROCESSOR_DEFINITIONS = LUA_USE_MACOSX;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
INSTALL_PATH = "$(HOME)/bin";
LIBRARY_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)";
OBJROOT = "$(SRCROOT)/build";
@@ -8746,11 +8785,12 @@
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)";
GCC_DYNAMIC_NO_PIC = YES;
GCC_MODEL_TUNING = G5;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
GCC_WARN_PROTOTYPE_CONVERSION = NO;
INSTALL_PATH = /usr/local/lib;
- PRODUCT_NAME = tommath;
+ PRODUCT_NAME = "tommath-sm5";
SYMROOT = "$(SRCROOT)/build";
};
name = PerformanceDebug;
@@ -8763,11 +8803,12 @@
GCC_DYNAMIC_NO_PIC = YES;
GCC_ENABLE_CPP_RTTI = NO;
GCC_NO_COMMON_BLOCKS = YES;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
GCC_WARN_PROTOTYPE_CONVERSION = NO;
INSTALL_PATH = /usr/local/lib;
KEEP_PRIVATE_EXTERNS = YES;
- PRODUCT_NAME = tomcrypt;
+ PRODUCT_NAME = "tomcrypt-sm5";
SYMROOT = "$(SRCROOT)/build";
};
name = PerformanceDebug;
@@ -8804,9 +8845,12 @@
buildSettings = {
CONFIGURATION_BUILD_DIR = "$(SYMROOT)";
FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)";
- GCC_ENABLE_SSE3_EXTENSIONS = NO;
+ GCC_AUTO_VECTORIZATION = YES;
+ GCC_ENABLE_SSE3_EXTENSIONS = YES;
+ GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES;
GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch";
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
"$(SRCROOT)/../src",
"$(SRCROOT)/../src/ffmpeg/include",
@@ -8829,11 +8873,10 @@
OTHER_CPLUSPLUSFLAGS = (
"-finline-limit=300",
"-fconstant-cfstrings",
- "-fsingle-precision-constant",
"-fno-exceptions",
"-falign-loops=16",
);
- PRODUCT_NAME = "$(value)";
+ PRODUCT_NAME = StepMania;
SYMROOT = "$(SRCROOT)/..";
WRAPPER_EXTENSION = app;
};
@@ -8862,7 +8905,7 @@
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_STRICT_ALIASING = YES;
GCC_UNROLL_LOOPS = YES;
- GCC_VERSION = 4.0;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
@@ -8933,9 +8976,12 @@
buildSettings = {
CONFIGURATION_BUILD_DIR = "$(SYMROOT)";
FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)";
+ GCC_AUTO_VECTORIZATION = NO;
GCC_ENABLE_OBJC_EXCEPTIONS = NO;
+ GCC_ENABLE_SSE3_EXTENSIONS = NO;
GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch";
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
"$(SRCROOT)/../src",
"$(SRCROOT)/../src/ffmpeg/include",
@@ -8958,11 +9004,10 @@
OTHER_CPLUSPLUSFLAGS = (
"-finline-limit=300",
"-fconstant-cfstrings",
- "-fsingle-precision-constant",
"-fno-exceptions",
"-falign-loops=16",
);
- PRODUCT_NAME = "$(value)";
+ PRODUCT_NAME = StepMania;
SYMROOT = "$(SRCROOT)/..";
WRAPPER_EXTENSION = app;
};
@@ -8992,7 +9037,7 @@
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_STRICT_ALIASING = YES;
GCC_UNROLL_LOOPS = YES;
- GCC_VERSION = 4.0;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
@@ -9043,6 +9088,7 @@
"$(value)",
LUA_USE_MACOSX,
);
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
@@ -9051,7 +9097,7 @@
INSTALL_PATH = /usr/local/lib;
OBJROOT = "$(SRCROOT)/build";
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
- PRODUCT_NAME = "lua-5.1";
+ PRODUCT_NAME = "lua-5.1-sm5";
SYMROOT = "$(SRCROOT)/build";
};
name = Native;
@@ -9068,6 +9114,7 @@
"$(value)",
LUA_USE_MACOSX,
);
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
@@ -9076,7 +9123,7 @@
INSTALL_PATH = /usr/local/lib;
OBJROOT = "$(SRCROOT)/build";
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
- PRODUCT_NAME = "lua-5.1";
+ PRODUCT_NAME = "lua-5.1-sm5";
SYMROOT = "$(SRCROOT)/build";
};
name = Universal;
@@ -9093,6 +9140,7 @@
"$(value)",
LUA_USE_MACOSX,
);
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
@@ -9101,7 +9149,7 @@
INSTALL_PATH = /usr/local/lib;
OBJROOT = "$(SRCROOT)/build";
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
- PRODUCT_NAME = "lua-5.1";
+ PRODUCT_NAME = "lua-5.1-sm5";
SYMROOT = "$(SRCROOT)/build";
};
name = Debug;
diff --git a/Themes/default/~res/24x24 icon.psd b/_assets/Themes/default/~res/24x24 icon.psd
similarity index 100%
rename from Themes/default/~res/24x24 icon.psd
rename to _assets/Themes/default/~res/24x24 icon.psd
diff --git a/Themes/default/~res/BannerFrame.7z b/_assets/Themes/default/~res/BannerFrame.7z
similarity index 100%
rename from Themes/default/~res/BannerFrame.7z
rename to _assets/Themes/default/~res/BannerFrame.7z
diff --git a/Themes/default/~res/Common fallback background.7z b/_assets/Themes/default/~res/Common fallback background.7z
similarity index 100%
rename from Themes/default/~res/Common fallback background.7z
rename to _assets/Themes/default/~res/Common fallback background.7z
diff --git a/Themes/default/~res/Common fallback banners.psd b/_assets/Themes/default/~res/Common fallback banners.psd
similarity index 100%
rename from Themes/default/~res/Common fallback banners.psd
rename to _assets/Themes/default/~res/Common fallback banners.psd
diff --git a/Themes/default/~res/EvaluationFrame.7z b/_assets/Themes/default/~res/EvaluationFrame.7z
similarity index 100%
rename from Themes/default/~res/EvaluationFrame.7z
rename to _assets/Themes/default/~res/EvaluationFrame.7z
diff --git a/Themes/default/~res/Footer.7z b/_assets/Themes/default/~res/Footer.7z
similarity index 100%
rename from Themes/default/~res/Footer.7z
rename to _assets/Themes/default/~res/Footer.7z
diff --git a/Themes/default/~res/FoundationLogo.7z b/_assets/Themes/default/~res/FoundationLogo.7z
similarity index 100%
rename from Themes/default/~res/FoundationLogo.7z
rename to _assets/Themes/default/~res/FoundationLogo.7z
diff --git a/Themes/default/~res/Header.7z b/_assets/Themes/default/~res/Header.7z
similarity index 100%
rename from Themes/default/~res/Header.7z
rename to _assets/Themes/default/~res/Header.7z
diff --git a/Themes/default/~res/HoldJudgment label 1x2.psd b/_assets/Themes/default/~res/HoldJudgment label 1x2.psd
similarity index 100%
rename from Themes/default/~res/HoldJudgment label 1x2.psd
rename to _assets/Themes/default/~res/HoldJudgment label 1x2.psd
diff --git a/Themes/default/~res/Judgments.7z b/_assets/Themes/default/~res/Judgments.7z
similarity index 100%
rename from Themes/default/~res/Judgments.7z
rename to _assets/Themes/default/~res/Judgments.7z
diff --git a/Themes/default/~res/Judgments.psd b/_assets/Themes/default/~res/Judgments.psd
similarity index 100%
rename from Themes/default/~res/Judgments.psd
rename to _assets/Themes/default/~res/Judgments.psd
diff --git a/Themes/default/~res/LifeMeterBar.7z b/_assets/Themes/default/~res/LifeMeterBar.7z
similarity index 100%
rename from Themes/default/~res/LifeMeterBar.7z
rename to _assets/Themes/default/~res/LifeMeterBar.7z
diff --git a/Themes/default/~res/MenuTimer frame.7z b/_assets/Themes/default/~res/MenuTimer frame.7z
similarity index 100%
rename from Themes/default/~res/MenuTimer frame.7z
rename to _assets/Themes/default/~res/MenuTimer frame.7z
diff --git a/Themes/default/~res/PaneDisplay frame.psd b/_assets/Themes/default/~res/PaneDisplay frame.psd
similarity index 100%
rename from Themes/default/~res/PaneDisplay frame.psd
rename to _assets/Themes/default/~res/PaneDisplay frame.psd
diff --git a/_assets/Themes/default/~res/Player fc badge.psd b/_assets/Themes/default/~res/Player fc badge.psd
new file mode 100644
index 0000000000..644ae13dbb
Binary files /dev/null and b/_assets/Themes/default/~res/Player fc badge.psd differ
diff --git a/Themes/default/~res/ScreenGameplay SongMeterDisplay parts.psd b/_assets/Themes/default/~res/ScreenGameplay SongMeterDisplay parts.psd
similarity index 100%
rename from Themes/default/~res/ScreenGameplay SongMeterDisplay parts.psd
rename to _assets/Themes/default/~res/ScreenGameplay SongMeterDisplay parts.psd
diff --git a/Themes/default/~res/ScreenGameplay ready.7z b/_assets/Themes/default/~res/ScreenGameplay ready.7z
similarity index 100%
rename from Themes/default/~res/ScreenGameplay ready.7z
rename to _assets/Themes/default/~res/ScreenGameplay ready.7z
diff --git a/Themes/default/~res/ScreenGameplay ready.psd b/_assets/Themes/default/~res/ScreenGameplay ready.psd
similarity index 100%
rename from Themes/default/~res/ScreenGameplay ready.psd
rename to _assets/Themes/default/~res/ScreenGameplay ready.psd
diff --git a/Themes/default/~res/ScreenOptions page.7z b/_assets/Themes/default/~res/ScreenOptions page.7z
similarity index 100%
rename from Themes/default/~res/ScreenOptions page.7z
rename to _assets/Themes/default/~res/ScreenOptions page.7z
diff --git a/Themes/default/~res/ScreenQuickSetupOverview icon.psd b/_assets/Themes/default/~res/ScreenQuickSetupOverview icon.psd
similarity index 100%
rename from Themes/default/~res/ScreenQuickSetupOverview icon.psd
rename to _assets/Themes/default/~res/ScreenQuickSetupOverview icon.psd
diff --git a/Themes/default/~res/ScreenSelect generic icons.7z b/_assets/Themes/default/~res/ScreenSelect generic icons.7z
similarity index 100%
rename from Themes/default/~res/ScreenSelect generic icons.7z
rename to _assets/Themes/default/~res/ScreenSelect generic icons.7z
diff --git a/Themes/default/~res/ScreenSelectMusic DifficultyDisplay.psd b/_assets/Themes/default/~res/ScreenSelectMusic DifficultyDisplay.psd
similarity index 100%
rename from Themes/default/~res/ScreenSelectMusic DifficultyDisplay.psd
rename to _assets/Themes/default/~res/ScreenSelectMusic DifficultyDisplay.psd
diff --git a/Themes/default/~res/ScreenSelectMusic DifficultyDisplayLarge.psd b/_assets/Themes/default/~res/ScreenSelectMusic DifficultyDisplayLarge.psd
similarity index 100%
rename from Themes/default/~res/ScreenSelectMusic DifficultyDisplayLarge.psd
rename to _assets/Themes/default/~res/ScreenSelectMusic DifficultyDisplayLarge.psd
diff --git a/Themes/default/~res/ScreenSelectPlayMode scroller background.psd b/_assets/Themes/default/~res/ScreenSelectPlayMode scroller background.psd
similarity index 100%
rename from Themes/default/~res/ScreenSelectPlayMode scroller background.psd
rename to _assets/Themes/default/~res/ScreenSelectPlayMode scroller background.psd
diff --git a/Themes/default/~res/ScreenSelectPlayMode scroller icons.psd b/_assets/Themes/default/~res/ScreenSelectPlayMode scroller icons.psd
similarity index 100%
rename from Themes/default/~res/ScreenSelectPlayMode scroller icons.psd
rename to _assets/Themes/default/~res/ScreenSelectPlayMode scroller icons.psd
diff --git a/Themes/default/~res/ScreenSelectProfile Card.psd b/_assets/Themes/default/~res/ScreenSelectProfile Card.psd
similarity index 100%
rename from Themes/default/~res/ScreenSelectProfile Card.psd
rename to _assets/Themes/default/~res/ScreenSelectProfile Card.psd
diff --git a/Themes/default/~res/ScreenStageInformation stage.psd b/_assets/Themes/default/~res/ScreenStageInformation stage.psd
similarity index 100%
rename from Themes/default/~res/ScreenStageInformation stage.psd
rename to _assets/Themes/default/~res/ScreenStageInformation stage.psd
diff --git a/Themes/default/~res/SelectIcons.7z b/_assets/Themes/default/~res/SelectIcons.7z
similarity index 100%
rename from Themes/default/~res/SelectIcons.7z
rename to _assets/Themes/default/~res/SelectIcons.7z
diff --git a/Themes/default/~res/SelectIcons.psd b/_assets/Themes/default/~res/SelectIcons.psd
similarity index 100%
rename from Themes/default/~res/SelectIcons.psd
rename to _assets/Themes/default/~res/SelectIcons.psd
diff --git a/Themes/default/~res/SnapDisplay icon 9x1.7z b/_assets/Themes/default/~res/SnapDisplay icon 9x1.7z
similarity index 100%
rename from Themes/default/~res/SnapDisplay icon 9x1.7z
rename to _assets/Themes/default/~res/SnapDisplay icon 9x1.7z
diff --git a/Themes/default/~res/StepsDisplay StepsType.psd b/_assets/Themes/default/~res/StepsDisplay StepsType.psd
similarity index 100%
rename from Themes/default/~res/StepsDisplay StepsType.psd
rename to _assets/Themes/default/~res/StepsDisplay StepsType.psd
diff --git a/Themes/default/~res/StepsDisplay frame.7z b/_assets/Themes/default/~res/StepsDisplay frame.7z
similarity index 100%
rename from Themes/default/~res/StepsDisplay frame.7z
rename to _assets/Themes/default/~res/StepsDisplay frame.7z
diff --git a/Themes/default/~res/StepsDisplayListRow Cursor.7z b/_assets/Themes/default/~res/StepsDisplayListRow Cursor.7z
similarity index 100%
rename from Themes/default/~res/StepsDisplayListRow Cursor.7z
rename to _assets/Themes/default/~res/StepsDisplayListRow Cursor.7z
diff --git a/Themes/default/~res/StepsDisplayListRow arrow.7z b/_assets/Themes/default/~res/StepsDisplayListRow arrow.7z
similarity index 100%
rename from Themes/default/~res/StepsDisplayListRow arrow.7z
rename to _assets/Themes/default/~res/StepsDisplayListRow arrow.7z
diff --git a/Themes/default/~res/StepsDisplayMusic frame.7z b/_assets/Themes/default/~res/StepsDisplayMusic frame.7z
similarity index 100%
rename from Themes/default/~res/StepsDisplayMusic frame.7z
rename to _assets/Themes/default/~res/StepsDisplayMusic frame.7z
diff --git a/Themes/default/~res/StepsDisplayMusic frame.psd b/_assets/Themes/default/~res/StepsDisplayMusic frame.psd
similarity index 100%
rename from Themes/default/~res/StepsDisplayMusic frame.psd
rename to _assets/Themes/default/~res/StepsDisplayMusic frame.psd
diff --git a/Themes/default/~res/musicwheel.7z b/_assets/Themes/default/~res/musicwheel.7z
similarity index 100%
rename from Themes/default/~res/musicwheel.7z
rename to _assets/Themes/default/~res/musicwheel.7z
diff --git a/Themes/default/~res/musicwheel.psd b/_assets/Themes/default/~res/musicwheel.psd
similarity index 100%
rename from Themes/default/~res/musicwheel.psd
rename to _assets/Themes/default/~res/musicwheel.psd
diff --git a/Themes/default/~res/pills.7z b/_assets/Themes/default/~res/pills.7z
similarity index 100%
rename from Themes/default/~res/pills.7z
rename to _assets/Themes/default/~res/pills.7z
diff --git a/Themes/default/~res/sm-ssc logo.7z b/_assets/Themes/default/~res/sm-ssc logo.7z
similarity index 100%
rename from Themes/default/~res/sm-ssc logo.7z
rename to _assets/Themes/default/~res/sm-ssc logo.7z
diff --git a/Themes/default/~res/uf_footer.7z b/_assets/Themes/default/~res/uf_footer.7z
similarity index 100%
rename from Themes/default/~res/uf_footer.7z
rename to _assets/Themes/default/~res/uf_footer.7z
diff --git a/Themes/default/~res/uf_header.7z b/_assets/Themes/default/~res/uf_header.7z
similarity index 100%
rename from Themes/default/~res/uf_header.7z
rename to _assets/Themes/default/~res/uf_header.7z
diff --git a/Themes/default/~res/uf_shared bg.7z b/_assets/Themes/default/~res/uf_shared bg.7z
similarity index 100%
rename from Themes/default/~res/uf_shared bg.7z
rename to _assets/Themes/default/~res/uf_shared bg.7z
diff --git a/_assets/fonts/frutiger 24px [polish-stroke] 8x2.psd b/_assets/fonts/frutiger 24px [polish-stroke] 8x2.psd
new file mode 100644
index 0000000000..da93af035a
Binary files /dev/null and b/_assets/fonts/frutiger 24px [polish-stroke] 8x2.psd differ
diff --git a/_assets/fonts/frutiger 24px [polish] 8x2.psd b/_assets/fonts/frutiger 24px [polish] 8x2.psd
new file mode 100644
index 0000000000..7d8c554687
Binary files /dev/null and b/_assets/fonts/frutiger 24px [polish] 8x2.psd differ
diff --git a/_assets/logo.psd b/_assets/logo.psd
index d59c9f8de8..312e23b9ea 100644
Binary files a/_assets/logo.psd and b/_assets/logo.psd differ
diff --git a/autoconf/m4/opengl.m4 b/autoconf/m4/opengl.m4
index e213addf18..e982d76c75 100644
--- a/autoconf/m4/opengl.m4
+++ b/autoconf/m4/opengl.m4
@@ -1,34 +1,36 @@
AC_DEFUN([SM_X_WITH_OPENGL],
[
- AC_PATH_X
-
- XCFLAGS=
- XLIBS=
+ AC_PATH_X
- if test "$no_x" != "yes"; then
+ XCFLAGS=
+ XLIBS=
+
+ if test "$no_x" != "yes"; then
if test -n "$x_includes"; then
- XCFLAGS="-I$x_includes"
+ XCFLAGS="-I$x_includes"
fi
if test -n "$x_libraries"; then
- XLIBS="-L$x_libraries -lX11"
+ XLIBS="-L$x_libraries"
fi
+ XLIBS+="-lX11"
+
if test -n "$x_includes"; then
- # See if we can compile X applications without using $XCFLAGS.
- AC_MSG_CHECKING(if $XCFLAGS is really necessary)
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[]])],[XCFLAGS=
+ # See if we can compile X applications without using $XCFLAGS.
+ AC_MSG_CHECKING(if $XCFLAGS is really necessary)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[]])],[XCFLAGS=
AC_MSG_RESULT(no)],[AC_MSG_RESULT(yes)])
fi
# Check for libXtst.
AC_CHECK_LIB(Xtst, XTestQueryExtension,
- XLIBS="$XLIBS -lXtst"
- [AC_DEFINE(HAVE_LIBXTST, 1, [libXtst available])],
- ,
- [$XLIBS])
+ XLIBS="$XLIBS -lXtst"
+ [AC_DEFINE(HAVE_LIBXTST, 1, [libXtst available])],
+ ,
+ [$XLIBS])
AC_DEFINE(HAVE_X11, 1, [X11 libraries present])
- fi
+ fi
# Check for Xrandr
# Can someone fix this for me? This is producing bizarre warnings from
@@ -53,15 +55,15 @@ AC_DEFUN([SM_X_WITH_OPENGL],
AM_CONDITIONAL(HAVE_X11, test "$no_x" != "yes")
- AC_SUBST(XCFLAGS)
- AC_SUBST(XLIBS)
+ AC_SUBST(XCFLAGS)
+ AC_SUBST(XLIBS)
- # Check for libGL and libGLU.
- AC_CHECK_LIB(GL, glPushMatrix, XLIBS="$XLIBS -lGL",
+ # Check for libGL and libGLU.
+ AC_CHECK_LIB(GL, glPushMatrix, XLIBS="$XLIBS -lGL",
AC_MSG_ERROR([No OpenGL library could be found.]), [$XLIBS])
- AC_CHECK_LIB(GLU, gluGetString, XLIBS="$XLIBS -lGLU",
+ AC_CHECK_LIB(GLU, gluGetString, XLIBS="$XLIBS -lGLU",
AC_MSG_ERROR([No GLU library could be found.]), [$XLIBS])
- AC_SUBST(XLIBS)
+ AC_SUBST(XLIBS)
])
diff --git a/configure.ac b/configure.ac
index 7917055408..dbf0199dca 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
AC_PREREQ(2.59)
-AC_INIT(sm-ssc, experimental, [http://ssc.ajworld.net/sm-ssc/], StepMania)
+AC_INIT(StepMania 5, experimental, [http://ssc.ajworld.net/sm-ssc/], StepMania)
AC_CONFIG_SRCDIR([src/StepMania.cpp])
AC_CONFIG_AUX_DIR(autoconf)
AC_CANONICAL_TARGET
diff --git a/extern/libjpeg/xboxjpeg.lib b/extern/libjpeg/xboxjpeg.lib
deleted file mode 100644
index cfd6a92d07..0000000000
Binary files a/extern/libjpeg/xboxjpeg.lib and /dev/null differ
diff --git a/sm-ssc.nsi b/sm-ssc.nsi
index a7560744b1..f0644064db 100644
--- a/sm-ssc.nsi
+++ b/sm-ssc.nsi
@@ -42,7 +42,7 @@
; don't forget to change this before releasing a new verson.
; wish this could be automated, but it requires "X.Y.Z.a" format. -aj
- VIProductVersion "1.2.3.0"
+ VIProductVersion "5.0.0.3"
VIAddVersionKey "ProductName" "${PRODUCT_ID}"
VIAddVersionKey "FileVersion" "${PRODUCT_VER}"
VIAddVersionKey "FileDescription" "${PRODUCT_ID} Installer"
@@ -52,8 +52,16 @@
SetDateSave on ; (can be on to have files restored to their orginal date)
; I think it may need actual admin privs for writing to the registry... -aj
- ; RequestExecutionLevel user
- ; this folder may not be the best idea for Windows Vista/7. -aj
+ ;RequestExecutionLevel user
+
+ ;GetVersion::WindowsServicePackMajor
+ ;Pop $R0
+ ;${If} $R0 >= 6
+ ; vista & 7
+ ;${Else}
+ ; xp and below
+ ;${EndIf}
+
InstallDir "$PROGRAMFILES\${PRODUCT_ID}"
InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\${PRODUCT_ID}" ""
@@ -211,8 +219,8 @@ Section "Main Section" SecMain
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\${PRODUCT_ID}" "" "$INSTDIR"
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_ID}" "DisplayName" "$(TEXT_IO_REMOVE_ONLY)"
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_ID}" "DisplayVersion" "$(PRODUCT_VER)"
- WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_ID}" "Comments" "sm-ssc is a rhythm game simulator (forked from StepMania)."
- WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_ID}" "Publisher" "the spinal shark collective"
+ WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_ID}" "Comments" "StepMania 5 is a rhythm game simulator."
+ WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_ID}" "Publisher" "StepMania Team"
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_ID}" "URLInfoAbout" "http://code.google.com/p/sm-ssc/"
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_ID}" "URLUpdateInfo" "http://code.google.com/p/sm-ssc/"
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_ID}" "UninstallString" '"$INSTDIR\uninstall.exe"'
@@ -295,6 +303,7 @@ Section "Main Section" SecMain
RMDir /r "$INSTDIR\NoteSkins\dance\midi"
; we may also want to remove the new ones.
RMDir /r "$INSTDIR\NoteSkins\dance\midi-note"
+ RMDir /r "$INSTDIR\NoteSkins\dance\midi-note-3d"
RMDir /r "$INSTDIR\NoteSkins\dance\midi-solo"
RMDir /r "$INSTDIR\NoteSkins\dance\midi-vivid"
RMDir /r "$INSTDIR\NoteSkins\dance\midi-rhythm-p1"
@@ -382,6 +391,7 @@ Section "Main Section" SecMain
CreateDirectory "$INSTDIR\Songs"
SetOutPath "$INSTDIR\Songs"
;File "Songs\Instructions.txt"
+ File /r /x CVS /x .svn "Songs\*"
; remove and install themes
RMDir /r "$INSTDIR\Themes\_fallback"
@@ -456,6 +466,7 @@ Section "Main Section" SecMain
File "Docs\Changelog_sm5.txt"
File "Docs\Changelog_SSCformat.txt"
File "Docs\CommandLineArgs.txt"
+ File "Docs\CourseFormat.txt"
File /r /x CVS /x .svn "Docs\license-ext"
File /r /x CVS /x .svn "Docs\Luadoc"
File /r /x CVS /x .svn "Docs\Themerdocs"
@@ -532,21 +543,21 @@ Function ShowAutorun
IfFileExists "$R1" show_play_and_reinstall
show_only_install:
- GetDlgItem $1 $hwnd 1201 ; Second cutom control
+ GetDlgItem $1 $hwnd 1201 ; Second custom control
ShowWindow $1 0
- GetDlgItem $1 $hwnd 1202 ; Third cutom control
+ GetDlgItem $1 $hwnd 1202 ; Third custom control
ShowWindow $1 0
Goto done
show_play_and_reinstall:
- GetDlgItem $1 $hwnd 1200 ; First cutom control
+ GetDlgItem $1 $hwnd 1200 ; First custom control
ShowWindow $1 0
done:
; Now show the dialog and wait for it to finish
InstallOptions::show
-
+
; Finally fetch the InstallOptions status value (we don't care what it is though)
Pop $0
@@ -574,7 +585,7 @@ Function LeaveAutorun
play_error:
MessageBox MB_ICONEXCLAMATION "$(TEXT_IO_COULD_NOT_EXECUTE)"
abort
-
+
proceed:
GetDlgItem $1 $HWNDPARENT 1 ; Next button
ShowWindow $1 1
@@ -741,6 +752,7 @@ Section "Uninstall"
RMDir /r "$INSTDIR\NoteSkins\dance\default"
RMDir /r "$INSTDIR\NoteSkins\dance\Delta"
RMDir /r "$INSTDIR\NoteSkins\dance\midi-note"
+ RMDir /r "$INSTDIR\NoteSkins\dance\midi-note-3d"
RMDir /r "$INSTDIR\NoteSkins\dance\midi-routine-p1"
RMDir /r "$INSTDIR\NoteSkins\dance\midi-routine-p2"
RMDir /r "$INSTDIR\NoteSkins\dance\midi-solo"
@@ -751,8 +763,13 @@ Section "Uninstall"
RMDir "$INSTDIR\NoteSkins\dance"
RMDir /r "$INSTDIR\NoteSkins\pump\cmd"
+ RMDir /r "$INSTDIR\NoteSkins\pump\cmd-routine-p1"
+ RMDir /r "$INSTDIR\NoteSkins\pump\cmd-routine-p2"
RMDir /r "$INSTDIR\NoteSkins\pump\complex"
RMDir /r "$INSTDIR\NoteSkins\pump\default"
+ RMDir /r "$INSTDIR\NoteSkins\pump\frame5p"
+ RMDir /r "$INSTDIR\NoteSkins\pump\newextra"
+ RMDir /r "$INSTDIR\NoteSkins\pump\rhythm"
RMDir /r "$INSTDIR\NoteSkins\pump\simple"
RMDir "$INSTDIR\NoteSkins\pump"
@@ -824,7 +841,7 @@ Section "Uninstall"
Delete "$INSTDIR\Program\zlib1.dll"
RMDir "$INSTDIR\Program"
- Delete "$INSTDIR\Licenses.txt"
+ Delete "$INSTDIR\Docs\Licenses.txt"
RMDir /r "$INSTDIR\Manual"
!endif
@@ -837,8 +854,37 @@ Section "Uninstall"
RMDir "$INSTDIR" ; will delete only if empty
SetShellVarContext current
- Delete "$DESKTOP\Play StepMania CVS.lnk"
- Delete "$DESKTOP\${PRODUCT_DISPLAY}.lnk"
+
+ ; kill shortcuts
+ !ifdef MAKE_DESKTOP_SHORTCUT
+ Delete "$DESKTOP\$(TEXT_IO_RUN).lnk"
+ !endif
+ !ifdef MAKE_DESKTOP_SHORTCUT
+ Delete "$DESKTOP\$(TEXT_IO_RUN).lnk"
+ !endif
+
+ Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_RUN).lnk"
+ Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_RUN_WITHOUT_SSE2).lnk"
+
+ !ifdef MAKE_OPEN_PROGRAM_FOLDER_SHORTCUT
+ Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_OPEN_PROGRAM_FOLDER).lnk"
+ !endif
+ !ifdef MAKE_OPEN_SETTINGS_FOLDER_SHORTCUT
+ Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_OPEN_SETTINGS_FOLDER).lnk"
+ !endif
+
+ ;Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_VIEW_STATISTICS).lnk"
+ ;Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_TOOLS).lnk"
+ Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_MANUAL).lnk"
+ Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_UNINSTALL).lnk"
+ Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_WEB_SITE).lnk"
+ Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_TEXTURE_FONT_GENERATOR).lnk"
+ !ifdef MAKE_UPDATES_SHORTCUT
+ Delete "$SMPROGRAMS\${PRODUCT_ID}\$(TEXT_IO_CHECK_FOR_UPDATES).lnk"
+ !endif
+ Delete "$INSTDIR\${PRODUCT_ID}.lnk"
+ Delete "$INSTDIR\${PRODUCT_ID} (non-SSE2).lnk"
+
; I'm being paranoid here:
Delete "$SMPROGRAMS\${PRODUCT_ID}\*.*"
RMDir "$SMPROGRAMS\${PRODUCT_ID}"
diff --git a/src/Actor.cpp b/src/Actor.cpp
index 3191d98d56..d7e8f3f4b2 100644
--- a/src/Actor.cpp
+++ b/src/Actor.cpp
@@ -105,9 +105,9 @@ void Actor::InitState()
#endif
m_fSecsIntoEffect = 0;
m_fEffectDelta = 0;
- m_fEffectRampUp = 0.5;
+ m_fEffectRampUp = 0.5f;
m_fEffectHoldAtHalf = 0;
- m_fEffectRampDown = 0.5;
+ m_fEffectRampDown = 0.5f;
m_fEffectHoldAtZero = 0;
m_fEffectOffset = 0;
m_EffectClock = CLOCK_TIMER;
@@ -118,7 +118,7 @@ void Actor::InitState()
m_bVisible = true;
m_fShadowLengthX = 0;
m_fShadowLengthY = 0;
- m_ShadowColor = RageColor(0,0,0,0.5);
+ m_ShadowColor = RageColor(0,0,0,0.5f);
m_bIsAnimating = true;
m_fHibernateSecondsLeft = 0;
m_iDrawOrder = 0;
diff --git a/src/AdjustSync.cpp b/src/AdjustSync.cpp
index bee582b4bf..7e7ec96247 100644
--- a/src/AdjustSync.cpp
+++ b/src/AdjustSync.cpp
@@ -256,7 +256,7 @@ void AdjustSync::AutosyncTempo()
// keep only a fraction of the data, such as the 80% with the lowest
// error. However, throwing away the ones with high error should
// be enough in most cases.
- float fFilteredError = 0.0;
+ float fFilteredError = 0;
s_iStepsFiltered = s_vAutosyncTempoData.size();
FilterHighErrorPoints( s_vAutosyncTempoData, fSlope, fIntercept, ERROR_TOO_HIGH );
s_iStepsFiltered -= s_vAutosyncTempoData.size();
@@ -266,14 +266,23 @@ void AdjustSync::AutosyncTempo()
GAMESTATE->m_pCurSong->m_SongTiming.m_fBeat0OffsetInSeconds += fIntercept;
const float fScaleBPM = 1.0f/(1.0f - fSlope);
- FOREACH( BPMSegment, GAMESTATE->m_pCurSong->m_SongTiming.m_BPMSegments, i )
- i->SetBPM( i->GetBPM() * fScaleBPM );
+ TimingData &timing = GAMESTATE->m_pCurSong->m_SongTiming;
+ vector &bpms = timing.allTimingSegments[SEGMENT_BPM];
+ for (unsigned i = 0; i < bpms.size(); i++)
+ {
+ BPMSegment *b = static_cast(bpms[i]);
+ b->SetBPM(b->GetBPM() * fScaleBPM);
+ }
/* We assume that the stops were measured as a number of beats.
* Therefore, if we change the bpms, we need to make a similar
* change to the stops. */
- FOREACH( StopSegment, GAMESTATE->m_pCurSong->m_SongTiming.m_StopSegments, i )
- i->SetPause(i->GetPause() * (1.0f - fSlope));
+ vector &stops = timing.allTimingSegments[SEGMENT_STOP_DELAY];
+ for (unsigned i = 0; i < stops.size(); i++)
+ {
+ StopSegment *s = static_cast(stops[i]);
+ s->SetPause(s->GetPause() * (1.0f - fSlope));
+ }
SCREENMAN->SystemMessage( AUTOSYNC_CORRECTION_APPLIED.GetValue() );
}
@@ -343,10 +352,14 @@ void AdjustSync::GetSyncChangeTextSong( vector &vsAddTo )
}
}
- for( unsigned i=0; i< testing.m_BPMSegments.size(); i++ )
+ vector &bpmTest = testing.allTimingSegments[SEGMENT_BPM];
+ vector &bpmOrig = original.allTimingSegments[SEGMENT_BPM];
+ for( unsigned i=0; i< bpmTest.size(); i++ )
{
- float fOld = Quantize( original.m_BPMSegments[i].GetBPM(), 0.001f );
- float fNew = Quantize( testing.m_BPMSegments[i].GetBPM(), 0.001f );
+ BPMSegment *bT = static_cast(bpmTest[i]);
+ BPMSegment *bO = static_cast(bpmOrig[i]);
+ float fOld = Quantize( bO->GetBPM(), 0.001f );
+ float fNew = Quantize( bT->GetBPM(), 0.001f );
float fDelta = fNew - fOld;
if( fabsf(fDelta) > 0.0001f )
@@ -364,10 +377,14 @@ void AdjustSync::GetSyncChangeTextSong( vector &vsAddTo )
}
}
- for( unsigned i=0; i< testing.m_StopSegments.size(); i++ )
+ vector &stopTest = testing.allTimingSegments[SEGMENT_STOP_DELAY];
+ vector &stopOrig = original.allTimingSegments[SEGMENT_STOP_DELAY];
+ for( unsigned i=0; i< stopTest.size(); i++ )
{
- float fOld = Quantize( original.m_StopSegments[i].GetPause(), 0.001f );
- float fNew = Quantize( testing.m_StopSegments[i].GetPause(), 0.001f );
+ StopSegment *sT = static_cast(stopTest[i]);
+ StopSegment *sO = static_cast(stopOrig[i]);
+ float fOld = Quantize( sO->GetPause(), 0.001f );
+ float fNew = Quantize( sT->GetPause(), 0.001f );
float fDelta = fNew - fOld;
if( fabsf(fDelta) > 0.0001f )
diff --git a/src/ArrowEffects.cpp b/src/ArrowEffects.cpp
index fb8da38fb5..a01f30d11d 100644
--- a/src/ArrowEffects.cpp
+++ b/src/ArrowEffects.cpp
@@ -56,10 +56,12 @@ static ThemeMetric DRUNK_OFFSET_FREQUENCY( "ArrowEffects", "DrunkOffsetFr
static ThemeMetric DRUNK_ARROW_MAGNITUDE( "ArrowEffects", "DrunkArrowMagnitude" );
static ThemeMetric BEAT_OFFSET_HEIGHT( "ArrowEffects", "BeatOffsetHeight" );
static ThemeMetric BEAT_PI_HEIGHT( "ArrowEffects", "BeatPIHeight" );
-static ThemeMetric MINI_PERCENT_BASE( "ArrowEffects", "MiniPercentBase" );
-static ThemeMetric MINI_PERCENT_GATE( "ArrowEffects", "MiniPercentGate" );
+static ThemeMetric TINY_PERCENT_BASE( "ArrowEffects", "TinyPercentBase" );
+static ThemeMetric TINY_PERCENT_GATE( "ArrowEffects", "TinyPercentGate" );
static ThemeMetric DIZZY_HOLD_HEADS( "ArrowEffects", "DizzyHoldHeads" );
+float ArrowGetPercentVisible( const PlayerState* pPlayerState, float fYPosWithoutReverse );
+
static float GetNoteFieldHeight( const PlayerState* pPlayerState )
{
return SCREEN_HEIGHT + fabsf(pPlayerState->m_PlayerOptions.GetCurrent().m_fPerspectiveTilt)*200;
@@ -236,7 +238,10 @@ float ArrowEffects::GetYOffset( const PlayerState* pPlayerState, int iCol, float
if( bShowEffects )
fBeatsUntilStep = pCurSteps->m_Timing.GetDisplayedBeat(fNoteBeat) - pCurSteps->m_Timing.GetDisplayedBeat(fSongBeat);
float fYOffsetBeatSpacing = fBeatsUntilStep;
- float fSpeedMultiplier = bShowEffects ? pCurSteps->m_Timing.GetDisplayedSpeedPercent( position.m_fSongBeatVisible, position.m_fMusicSecondsVisible ) : 1.0;
+ float fSpeedMultiplier = bShowEffects ?
+ pCurSteps->m_Timing.GetDisplayedSpeedPercent(
+ position.m_fSongBeatVisible,
+ position.m_fMusicSecondsVisible ) : 1.0f;
fYOffset += fSpeedMultiplier * fYOffsetBeatSpacing * (1-pPlayerState->m_PlayerOptions.GetCurrent().m_fTimeSpacing);
}
@@ -340,8 +345,8 @@ float ArrowEffects::GetYOffset( const PlayerState* pPlayerState, int iCol, float
static void ArrowGetReverseShiftAndScale( const PlayerState* pPlayerState, int iCol, float fYReverseOffsetPixels, float &fShiftOut, float &fScaleOut )
{
// XXX: Hack: we need to scale the reverse shift by the zoom.
- float fTinyPercent = pPlayerState->m_PlayerOptions.GetCurrent().m_fEffects[PlayerOptions::EFFECT_TINY];
- float fZoom = 1 - fTinyPercent*0.5f;
+ float fMiniPercent = pPlayerState->m_PlayerOptions.GetCurrent().m_fEffects[PlayerOptions::EFFECT_MINI];
+ float fZoom = 1 - fMiniPercent*0.5f;
// don't divide by 0
if( fabsf(fZoom) < 0.01 )
@@ -484,12 +489,12 @@ float ArrowEffects::GetXPos( const PlayerState* pPlayerState, int iColNum, float
fPixelOffsetFromCenter += pCols[iColNum].fXOffset;
- if( fEffects[PlayerOptions::EFFECT_MINI] != 0 )
+ if( fEffects[PlayerOptions::EFFECT_TINY] != 0 )
{
- // Allow Mini to pull tracks together, but not to push them apart.
- float fMiniPercent = fEffects[PlayerOptions::EFFECT_MINI];
- fMiniPercent = min( powf(MINI_PERCENT_BASE, fMiniPercent), (float)MINI_PERCENT_GATE );
- fPixelOffsetFromCenter *= fMiniPercent;
+ // Allow Tiny to pull tracks together, but not to push them apart.
+ float fTinyPercent = fEffects[PlayerOptions::EFFECT_TINY];
+ fTinyPercent = min( powf(TINY_PERCENT_BASE, fTinyPercent), (float)TINY_PERCENT_GATE );
+ fPixelOffsetFromCenter *= fTinyPercent;
}
return fPixelOffsetFromCenter;
@@ -560,7 +565,7 @@ static float GetCenterLine( const PlayerState* pPlayerState )
{
/* Another mini hack: if EFFECT_MINI is on, then our center line is at
* eg. 320, not 160. */
- const float fMiniPercent = pPlayerState->m_PlayerOptions.GetCurrent().m_fEffects[PlayerOptions::EFFECT_TINY];
+ const float fMiniPercent = pPlayerState->m_PlayerOptions.GetCurrent().m_fEffects[PlayerOptions::EFFECT_MINI];
const float fZoom = 1 - fMiniPercent*0.5f;
return CENTER_LINE_Y / fZoom;
}
@@ -736,11 +741,11 @@ float ArrowEffects::GetZoom( const PlayerState* pPlayerState )
(GAMESTATE->GetNumSidesJoined()==2 || GAMESTATE->AnyPlayersAreCpu()) )
fZoom *= 0.6f;
- float fMiniPercent = pPlayerState->m_PlayerOptions.GetCurrent().m_fEffects[PlayerOptions::EFFECT_MINI];
- if( fMiniPercent != 0 )
+ float fTinyPercent = pPlayerState->m_PlayerOptions.GetCurrent().m_fEffects[PlayerOptions::EFFECT_TINY];
+ if( fTinyPercent != 0 )
{
- fMiniPercent = powf( 0.5f, fMiniPercent );
- fZoom *= fMiniPercent;
+ fTinyPercent = powf( 0.5f, fTinyPercent );
+ fZoom *= fTinyPercent;
}
return fZoom;
}
diff --git a/src/Attack.cpp b/src/Attack.cpp
index 1bf2c8623b..25a19415c9 100644
--- a/src/Attack.cpp
+++ b/src/Attack.cpp
@@ -91,6 +91,27 @@ bool AttackArray::ContainsTransformOrTurn() const
return false;
}
+vector AttackArray::ToVectorString() const
+{
+ vector ret;
+ FOREACH_CONST( Attack, *this, a )
+ {
+ ret.push_back(ssprintf("TIME=%f:LEN=%f:MODS=%s",
+ a->fStartSecond,
+ a->fSecsRemaining,
+ a->sModifiers.c_str()));
+ }
+ return ret;
+}
+
+void AttackArray::UpdateStartTimes(float delta)
+{
+ FOREACH(Attack, *this, a)
+ {
+ a->fStartSecond += delta;
+ }
+}
+
/*
* (c) 2003-2004 Chris Danford
* All rights reserved.
diff --git a/src/Attack.h b/src/Attack.h
index 7eadbe4937..fe61a48723 100644
--- a/src/Attack.h
+++ b/src/Attack.h
@@ -71,6 +71,16 @@ struct AttackArray : public vector
* @brief Determine if the list of attacks contains a transform or turn mod.
* @return true if it does, or false otherwise. */
bool ContainsTransformOrTurn() const;
+
+ /**
+ * @brief Return a string representation used for simfiles.
+ * @return the string representation. */
+ vector ToVectorString() const;
+
+ /**
+ * @brief Adjust the starting time of all attacks.
+ * @param delta the amount to change. */
+ void UpdateStartTimes(float delta);
};
#endif
diff --git a/src/AttackDisplay.h b/src/AttackDisplay.h
index 1a411ea55a..5e4dccf3d3 100644
--- a/src/AttackDisplay.h
+++ b/src/AttackDisplay.h
@@ -6,6 +6,8 @@
#include "GameConstantsAndTypes.h" // for TapNoteScore
#include "RageTexturePreloader.h"
+RString GetAttackPieceName( const RString &sAttack );
+
class PlayerState;
/** @brief A graphical display for attacks. */
class AttackDisplay : public ActorFrame
diff --git a/src/AutoKeysounds.cpp b/src/AutoKeysounds.cpp
index 79ec773973..b536a3aa95 100644
--- a/src/AutoKeysounds.cpp
+++ b/src/AutoKeysounds.cpp
@@ -49,7 +49,7 @@ void AutoKeysounds::LoadAutoplaySoundsInto( RageSoundReader_Chain *pChain )
* Add all current autoplay sounds in both players to the chain. If a sound is
* common to both players, don't pan it; otherwise pan it to that player's side.
*/
- int iNumTracks = m_ndAutoKeysoundsOnly[GAMESTATE->m_MasterPlayerNumber].GetNumTracks();
+ int iNumTracks = m_ndAutoKeysoundsOnly[GAMESTATE->GetMasterPlayerNumber()].GetNumTracks();
for( int t = 0; t < iNumTracks; t++ )
{
int iRow = -1;
@@ -63,6 +63,10 @@ void AutoKeysounds::LoadAutoplaySoundsInto( RageSoundReader_Chain *pChain )
if( t >= m_ndAutoKeysoundsOnly[pn].GetNumTracks() )
continue;
int iNextRowForPlayer = iRow;
+ /* XXX: If a BMS file only has one tap note per track,
+ * this will prevent any keysounds from loading.
+ * This leads to failure later on.
+ * We need a better way to prevent this. */
if( m_ndAutoKeysoundsOnly[pn].GetNextTapNoteRowForTrack( t, iNextRowForPlayer ) )
iNextRow = min( iNextRow, iNextRowForPlayer );
}
@@ -274,7 +278,7 @@ void AutoKeysounds::FinishLoading()
delete pChain;
}
}
- ASSERT( m_pSharedSound );
+ ASSERT_M( m_pSharedSound, ssprintf("No keysounds were loaded for the song %s!", pSong->m_sMainTitle.c_str() ));
m_pSharedSound = new RageSoundReader_PitchChange( m_pSharedSound );
m_pSharedSound = new RageSoundReader_PostBuffering( m_pSharedSound );
@@ -297,7 +301,7 @@ void AutoKeysounds::FinishLoading()
apSounds.push_back( m_pPlayerSounds[1] );
}
- if( GAMESTATE->GetNumPlayersEnabled() == 1 && GAMESTATE->m_MasterPlayerNumber == PLAYER_2 )
+ if( GAMESTATE->GetNumPlayersEnabled() == 1 && GAMESTATE->GetMasterPlayerNumber() == PLAYER_2 )
swap( m_pPlayerSounds[PLAYER_1], m_pPlayerSounds[PLAYER_2] );
if( apSounds.size() > 1 )
diff --git a/src/Background.cpp b/src/Background.cpp
index 2761fd3b18..c987102faa 100644
--- a/src/Background.cpp
+++ b/src/Background.cpp
@@ -27,7 +27,6 @@ static ThemeMetric LEFT_EDGE ("Background","LeftEdge");
static ThemeMetric TOP_EDGE ("Background","TopEdge");
static ThemeMetric RIGHT_EDGE ("Background","RightEdge");
static ThemeMetric BOTTOM_EDGE ("Background","BottomEdge");
-#define RECT_BACKGROUND RectF (LEFT_EDGE,TOP_EDGE,RIGHT_EDGE,BOTTOM_EDGE)
static ThemeMetric CLAMP_OUTPUT_PERCENT ("Background","ClampOutputPercent");
static ThemeMetric SHOW_DANCING_CHARACTERS ("Background","ShowDancingCharacters");
static ThemeMetric USE_STATIC_BG ("Background","UseStaticBackground");
@@ -422,35 +421,41 @@ void BackgroundImpl::LoadFromRandom( float fFirstBeat, float fEndBeat, const Bac
const TimingData &timing = m_pSong->m_SongTiming;
// change BG every time signature change or 4 measures
- FOREACH_CONST( TimeSignatureSegment, timing.m_vTimeSignatureSegments, iter )
+ const vector &tSigs = timing.allTimingSegments[SEGMENT_TIME_SIG];
+
+ for (unsigned i = 0; i < tSigs.size(); i++)
{
- vector::const_iterator next = iter;
- next++;
- int iSegmentEndRow = (next == timing.m_vTimeSignatureSegments.end()) ? iEndRow : next->GetRow();
+ TimeSignatureSegment *ts = static_cast(tSigs[i]);
+ int iSegmentEndRow = (i + 1 == tSigs.size()) ? iEndRow : tSigs[i+1]->GetRow();
- for( int i=max(iter->GetRow(),iStartRow); iGetNoteRowsPerMeasure() )
+
+ for(int j=max(ts->GetRow(),iStartRow);
+ jGetNoteRowsPerMeasure())
{
// Don't fade. It causes frame rate dip, especially on slower machines.
- BackgroundDef bd = m_Layer[0].CreateRandomBGA( m_pSong, change.m_def.m_sEffect, m_RandomBGAnimations, this );
+ BackgroundDef bd = m_Layer[0].CreateRandomBGA(m_pSong,
+ change.m_def.m_sEffect,
+ m_RandomBGAnimations, this);
if( !bd.IsEmpty() )
{
BackgroundChange c = change;
c.m_def = bd;
- c.m_fStartBeat = NoteRowToBeat(i);
+ c.m_fStartBeat = NoteRowToBeat(j);
m_Layer[0].m_aBGChanges.push_back( c );
}
}
}
// change BG every BPM change that is at the beginning of a measure
- for( unsigned i=0; i &bpms = timing.allTimingSegments[SEGMENT_BPM];
+ for( unsigned i=0; iGetRow()) % iter->GetNoteRowsPerMeasure() == 0 )
+ TimeSignatureSegment *ts = static_cast(tSigs[j]);
+ if ((bpms[i]->GetRow() - ts->GetRow()) % ts->GetNoteRowsPerMeasure() == 0)
{
bAtBeginningOfMeasure = true;
break;
@@ -461,7 +466,7 @@ void BackgroundImpl::LoadFromRandom( float fFirstBeat, float fEndBeat, const Bac
continue; // skip
// start so that we don't create a BGChange right on top of fEndBeat
- bool bInRange = bpmseg.GetRow() >= iStartRow && bpmseg.GetRow() < iEndRow;
+ bool bInRange = bpms[i]->GetRow() >= iStartRow && bpms[i]->GetRow() < iEndRow;
if( !bInRange )
continue; // skip
@@ -471,7 +476,7 @@ void BackgroundImpl::LoadFromRandom( float fFirstBeat, float fEndBeat, const Bac
BackgroundChange c = change;
c.m_def.m_sFile1 = bd.m_sFile1;
c.m_def.m_sFile2 = bd.m_sFile2;
- c.m_fStartBeat = bpmseg.GetBeat();
+ c.m_fStartBeat = bpms[i]->GetBeat();
m_Layer[0].m_aBGChanges.push_back( c );
}
}
@@ -578,13 +583,15 @@ void BackgroundImpl::LoadFromSong( const Song* pSong )
else // pSong doesn't have an animation plan
{
Layer &layer = m_Layer[0];
+ float firstBeat = pSong->GetFirstBeat();
+ float lastBeat = pSong->GetLastBeat();
- LoadFromRandom( pSong->m_fFirstBeat, pSong->m_fLastBeat, BackgroundChange() );
+ LoadFromRandom( firstBeat, lastBeat, BackgroundChange() );
// end showing the static song background
BackgroundChange change;
change.m_def = m_StaticBackgroundDef;
- change.m_fStartBeat = pSong->m_fLastBeat;
+ change.m_fStartBeat = lastBeat;
layer.m_aBGChanges.push_back( change );
}
@@ -643,7 +650,7 @@ void BackgroundImpl::LoadFromSong( const Song* pSong )
continue;
float fStartBeat = change.m_fStartBeat;
- float fEndBeat = pSong->m_fLastBeat;
+ float fEndBeat = pSong->GetLastBeat();
if( i+1 < mainlayer.m_aBGChanges.size() )
fEndBeat = mainlayer.m_aBGChanges[i+1].m_fStartBeat;
diff --git a/src/BackgroundUtil.cpp b/src/BackgroundUtil.cpp
index 6644d1593d..d101be23e1 100644
--- a/src/BackgroundUtil.cpp
+++ b/src/BackgroundUtil.cpp
@@ -68,6 +68,25 @@ RString BackgroundChange::GetTextDescription() const
return s;
}
+RString BackgroundChange::ToString() const
+{
+ /* TODO: Technically we need to double-escape the filename
+ * (because it might contain '=') and then unescape the value
+ * returned by the MsdFile. */
+ return ssprintf("%.3f=%s=%.3f=%d=%d=%d=%s=%s=%s=%s=%s",
+ this->m_fStartBeat,
+ SmEscape(this->m_def.m_sFile1).c_str(),
+ this->m_fRate,
+ this->m_sTransition == SBT_CrossFade, // backward compat
+ this->m_def.m_sEffect == SBE_StretchRewind, // backward compat
+ this->m_def.m_sEffect != SBE_StretchNoLoop, // backward compat
+ this->m_def.m_sEffect.c_str(),
+ this->m_def.m_sFile2.c_str(),
+ this->m_sTransition.c_str(),
+ SmEscape(RageColor::NormalizeColorString(this->m_def.m_sColor1)).c_str(),
+ SmEscape(RageColor::NormalizeColorString(this->m_def.m_sColor2)).c_str());
+}
+
const RString BACKGROUND_EFFECTS_DIR = "BackgroundEffects/";
const RString BACKGROUND_TRANSITIONS_DIR = "BackgroundTransitions/";
diff --git a/src/BackgroundUtil.h b/src/BackgroundUtil.h
index 80d36b8a92..c4907b590c 100644
--- a/src/BackgroundUtil.h
+++ b/src/BackgroundUtil.h
@@ -64,6 +64,11 @@ struct BackgroundChange
RString m_sTransition;
RString GetTextDescription() const;
+
+ /**
+ * @brief Get the string representation of the change.
+ * @return the string representation. */
+ RString ToString() const;
};
/** @brief Shared background-related routines. */
namespace BackgroundUtil
diff --git a/src/BeginnerHelper.cpp b/src/BeginnerHelper.cpp
index 9bc73247ba..e6361729cf 100644
--- a/src/BeginnerHelper.cpp
+++ b/src/BeginnerHelper.cpp
@@ -242,7 +242,7 @@ void BeginnerHelper::DrawPrimitives()
DISPLAY->SetLighting( true );
DISPLAY->SetLightDirectional(
0,
- RageColor(0.5,0.5,0.5,1),
+ RageColor(0.5f,0.5f,0.5f,1),
RageColor(1,1,1,1),
RageColor(0,0,0,1),
RageVector3(0, 0, 1) );
@@ -271,7 +271,7 @@ void BeginnerHelper::DrawPrimitives()
DISPLAY->SetLighting( true );
DISPLAY->SetLightDirectional(
0,
- RageColor(0.5,0.5,0.5,1),
+ RageColor(0.5f,0.5f,0.5f,1),
RageColor(1,1,1,1),
RageColor(0,0,0,1),
RageVector3(0, 0, 1) );
diff --git a/src/Character.cpp b/src/Character.cpp
index 209d3c7fa3..bb7d0e0797 100644
--- a/src/Character.cpp
+++ b/src/Character.cpp
@@ -5,6 +5,8 @@
#include "RageTextureID.h"
#include "ActorUtil.h"
+RString GetRandomFileInDir( RString sDir );
+
Character::Character(): m_sCharDir(""), m_sCharacterID(""),
m_sDisplayName(""), m_sCardPath(""), m_sIconPath(""),
m_bUsableInRave(false), m_iPreloadRefcount(0) {}
diff --git a/src/CharacterManager.cpp b/src/CharacterManager.cpp
index 10cf6a26d6..8b70d9139f 100644
--- a/src/CharacterManager.cpp
+++ b/src/CharacterManager.cpp
@@ -89,7 +89,7 @@ Character* CharacterManager::GetDefaultCharacter()
}
/* We always have the default character. */
- ASSERT(0);
+ FAIL_M("There must be a default character available!");
return NULL;
}
@@ -152,6 +152,13 @@ public:
LuaHelpers::CreateTableFromArray(vChars, L);
return 1;
}
+ static int GetCharacterCount(T* p, lua_State *L)
+ {
+ vector chars;
+ p->GetCharacters(chars);
+ lua_pushnumber(L, chars.size());
+ return 1;
+ }
LunaCharacterManager()
{
@@ -159,6 +166,7 @@ public:
// sm-ssc adds:
ADD_METHOD( GetRandomCharacter );
ADD_METHOD( GetAllCharacters );
+ ADD_METHOD( GetCharacterCount );
}
};
diff --git a/src/CharacterManager.h b/src/CharacterManager.h
index bd49c20c5e..4a687ee9d3 100644
--- a/src/CharacterManager.h
+++ b/src/CharacterManager.h
@@ -1,19 +1,24 @@
-/* CharacterManager - Manage characters. */
-
#ifndef CHARACTER_MANAGER_H
#define CHARACTER_MANAGER_H
class Character;
struct lua_State;
+/** @brief Manage all of the Characters. */
class CharacterManager
{
public:
+ /** @brief Set up the character manager. */
CharacterManager();
+ /** @brief Destroy the character manager. */
~CharacterManager();
void GetCharacters( vector &vpCharactersOut );
+ /** @brief Get one installed character at random.
+ * @return The random character. */
Character* GetRandomCharacter();
+ /** @brief Get the character assigned as the default.
+ * @return The default character. */
Character* GetDefaultCharacter();
Character* GetCharacterFromID( RString sCharacterID );
diff --git a/src/CommandLineActions.cpp b/src/CommandLineActions.cpp
index ef5f26b10c..3a45380b87 100644
--- a/src/CommandLineActions.cpp
+++ b/src/CommandLineActions.cpp
@@ -108,7 +108,7 @@ static void Version()
#endif // WIN32
}
-void CommandLineActions::Handle(LoadingWindow* pLW)
+void CommandLineActions::Handle()
{
CommandLineArgs args;
for(int i=0; im_MasterPlayerNumber == PlayerNumber_Invalid )
+ if( GAMESTATE->GetMasterPlayerNumber() == PlayerNumber_Invalid )
return;
- const Trail *pMasterTrail = GAMESTATE->m_pCurTrail[GAMESTATE->m_MasterPlayerNumber];
+ const Trail *pMasterTrail = GAMESTATE->m_pCurTrail[GAMESTATE->GetMasterPlayerNumber()];
if( pMasterTrail == NULL )
return;
unsigned uNumEntriesToShow = pMasterTrail->m_vEntries.size();
diff --git a/src/CourseLoaderCRS.cpp b/src/CourseLoaderCRS.cpp
index 77a055eb56..d4ae2a026e 100644
--- a/src/CourseLoaderCRS.cpp
+++ b/src/CourseLoaderCRS.cpp
@@ -163,18 +163,39 @@ bool CourseLoaderCRS::LoadFromMsd( const RString &sPath, const MsdFile &msd, Cou
// infer entry::Type from the first param
// todo: make sure these aren't generating bogus entries due
// to a lack of songs. -aj
+ int iNumSongs = SONGMAN->GetNumSongs();
LOG->Trace("[CourseLoaderCRS] sParams[1] = %s",sParams[1].c_str());
// most played
if( sParams[1].Left(strlen("BEST")) == "BEST" )
{
- new_entry.iChooseIndex = StringToInt( sParams[1].Right(sParams[1].size()-strlen("BEST")) ) - 1;
+ int iChooseIndex = StringToInt( sParams[1].Right(sParams[1].size()-strlen("BEST")) ) - 1;
+ if( iChooseIndex > iNumSongs )
+ {
+ // looking up a song that doesn't exist.
+ LOG->UserLog( "Course file", sPath, "is trying to load BEST%i with only %i songs installed. "
+ "This entry will be ignored.", iChooseIndex, iNumSongs);
+ out.m_bIncomplete = true;
+ continue; // skip this #SONG
+ }
+
+ new_entry.iChooseIndex = iChooseIndex;
CLAMP( new_entry.iChooseIndex, 0, 500 );
new_entry.songSort = SongSort_MostPlays;
}
// least played
else if( sParams[1].Left(strlen("WORST")) == "WORST" )
{
- new_entry.iChooseIndex = StringToInt( sParams[1].Right(sParams[1].size()-strlen("WORST")) ) - 1;
+ int iChooseIndex = StringToInt( sParams[1].Right(sParams[1].size()-strlen("BEST")) ) - 1;
+ if( iChooseIndex > iNumSongs )
+ {
+ // looking up a song that doesn't exist.
+ LOG->UserLog( "Course file", sPath, "is trying to load WORST%i with only %i songs installed. "
+ "This entry will be ignored.", iChooseIndex, iNumSongs);
+ out.m_bIncomplete = true;
+ continue; // skip this #SONG
+ }
+
+ new_entry.iChooseIndex = iChooseIndex;
CLAMP( new_entry.iChooseIndex, 0, 500 );
new_entry.songSort = SongSort_FewestPlays;
}
diff --git a/src/CourseUtil.h b/src/CourseUtil.h
index e338c9c3e7..6be86abe77 100644
--- a/src/CourseUtil.h
+++ b/src/CourseUtil.h
@@ -11,6 +11,10 @@ class XNode;
class CourseEntry;
class Song;
+bool CompareCoursePointersBySortValueAscending( const Course *pSong1, const Course *pSong2 );
+bool CompareCoursePointersBySortValueDescending( const Course *pSong1, const Course *pSong2 );
+bool CompareCoursePointersByTitle( const Course *pCourse1, const Course *pCourse2 );
+
/** @brief Utility functions that deal with Courses. */
namespace CourseUtil
{
diff --git a/src/DancingCharacters.cpp b/src/DancingCharacters.cpp
index 8b5be828c3..403277580c 100644
--- a/src/DancingCharacters.cpp
+++ b/src/DancingCharacters.cpp
@@ -11,6 +11,8 @@
#include "PrefsManager.h"
#include "Model.h"
+int Neg1OrPos1();
+
#define DC_X( choice ) THEME->GetMetricF("DancingCharacters",ssprintf("2DCharacterXP%d",choice+1))
#define DC_Y( choice ) THEME->GetMetricF("DancingCharacters",ssprintf("2DCharacterYP%d",choice+1))
@@ -164,7 +166,7 @@ void DancingCharacters::LoadNextSong()
m_fThisCameraEndBeat = 0;
ASSERT( GAMESTATE->m_pCurSong );
- m_fThisCameraEndBeat = GAMESTATE->m_pCurSong->m_fFirstBeat;
+ m_fThisCameraEndBeat = GAMESTATE->m_pCurSong->GetFirstBeat();
FOREACH_PlayerNumber( p )
if( GAMESTATE->IsPlayerEnabled(p) )
@@ -210,9 +212,9 @@ void DancingCharacters::Update( float fDelta )
bWasGameplayStarting = bGameplayStarting;
static float fLastBeat = GAMESTATE->m_Position.m_fSongBeat;
+ float firstBeat = GAMESTATE->m_pCurSong->GetFirstBeat();
float fThisBeat = GAMESTATE->m_Position.m_fSongBeat;
- if( fLastBeat < GAMESTATE->m_pCurSong->m_fFirstBeat &&
- fThisBeat >= GAMESTATE->m_pCurSong->m_fFirstBeat )
+ if( fLastBeat < firstBeat && fThisBeat >= firstBeat )
{
FOREACH_PlayerNumber( p )
m_pCharacter[p]->PlayAnimation( "dance" );
@@ -344,7 +346,7 @@ void DancingCharacters::DrawPrimitives()
ambient,
diffuse,
specular,
- RageVector3(-3, -7.5, +9) );
+ RageVector3(-3, -7.5f, +9) );
if( PREFSMAN->m_bCelShadeModels )
{
diff --git a/src/DateTime.h b/src/DateTime.h
index 58f2cbe6ff..2d77da95bd 100644
--- a/src/DateTime.h
+++ b/src/DateTime.h
@@ -4,6 +4,8 @@
#include "EnumHelper.h"
#include
+int StringToDayInYear( RString sDayInYear );
+
/** @brief The number of days we check for previously. */
const int NUM_LAST_DAYS = 7;
/** @brief The number of weeks we check for previously. */
diff --git a/src/Difficulty.cpp b/src/Difficulty.cpp
index e37c5a4745..c5e3390c98 100644
--- a/src/Difficulty.cpp
+++ b/src/Difficulty.cpp
@@ -67,49 +67,34 @@ RString GetCustomDifficulty( StepsType st, Difficulty dc, CourseType ct )
return DifficultyToString( dc );
}
- const StepsTypeInfo &sti = GAMEMAN->GetStepsTypeInfo( st );
-
- switch( sti.m_StepsTypeCategory )
+ if( dc == Difficulty_Edit )
{
- DEFAULT_FAIL(sti.m_StepsTypeCategory);
- case StepsTypeCategory_Single:
- case StepsTypeCategory_Double:
- if( dc == Difficulty_Edit )
+ return "Edit";
+ }
+ // OPTIMIZATION OPPORTUNITY: cache these metrics and cache the splitting
+ vector vsNames;
+ split( NAMES, ",", vsNames );
+ FOREACH( RString, vsNames, sName )
+ {
+ ThemeMetric STEPS_TYPE("CustomDifficulty",(*sName)+"StepsType");
+ if( STEPS_TYPE == StepsType_Invalid || st == STEPS_TYPE ) // match
{
- return "Edit";
- }
- else
- {
- // OPTIMIZATION OPPORTUNITY: cache these metrics and cache the splitting
- vector vsNames;
- split( NAMES, ",", vsNames );
- FOREACH( RString, vsNames, sName )
+ ThemeMetric DIFFICULTY("CustomDifficulty",(*sName)+"Difficulty");
+ if( DIFFICULTY == Difficulty_Invalid || dc == DIFFICULTY ) // match
{
- ThemeMetric STEPS_TYPE("CustomDifficulty",(*sName)+"StepsType");
- if( STEPS_TYPE == StepsType_Invalid || st == STEPS_TYPE ) // match
+ ThemeMetric COURSE_TYPE("CustomDifficulty",(*sName)+"CourseType");
+ if( COURSE_TYPE == CourseType_Invalid || ct == COURSE_TYPE ) // match
{
- ThemeMetric DIFFICULTY("CustomDifficulty",(*sName)+"Difficulty");
- if( DIFFICULTY == Difficulty_Invalid || dc == DIFFICULTY ) // match
- {
- ThemeMetric COURSE_TYPE("CustomDifficulty",(*sName)+"CourseType");
- if( COURSE_TYPE == CourseType_Invalid || ct == COURSE_TYPE ) // match
- {
- ThemeMetric STRING("CustomDifficulty",(*sName)+"String");
- return STRING.GetValue();
- }
- }
+ ThemeMetric STRING("CustomDifficulty",(*sName)+"String");
+ return STRING.GetValue();
}
}
- // no matching CustomDifficulty, so use a regular difficulty name
- if( dc == Difficulty_Invalid )
- return RString();
- return DifficultyToString( dc );
}
- case StepsTypeCategory_Couple:
- return "Couple";
- case StepsTypeCategory_Routine:
- return "Routine";
}
+ // no matching CustomDifficulty, so use a regular difficulty name
+ if( dc == Difficulty_Invalid )
+ return RString();
+ return DifficultyToString( dc );
}
LuaFunction( GetCustomDifficulty, GetCustomDifficulty(Enum::Check(L,1), Enum::Check(L, 2), Enum::Check(L, 3, true)) );
diff --git a/src/DifficultyList.cpp b/src/DifficultyList.cpp
index 2b79d6fe10..52695cd16f 100644
--- a/src/DifficultyList.cpp
+++ b/src/DifficultyList.cpp
@@ -11,18 +11,10 @@
#include "SongUtil.h"
#include "XmlFile.h"
-// MAX_METERS was previously set to NUM_Difficulty + MAX_EDITS_PER_SONG.
-// This was all fine and well until AutoSetStyle was created. In certain
-// gametypes (technomotion for example), if autogen is on, the number of
-// available stepcharts exceeds MAX_METERS, resulting in a crash.
-// My first thought to fix this was:
-// (NUM_Difficulty (6) * NUM_StepsType (32)) + MAX_EDITS_PER_SONG (5*profileSlot (2)) = 202
-// However, 202 rows may be a bit overkill.
-// Dance has 6 stepstypes counting 3panel, Pump and Techno have 5.
-// (6 difficulties * 6 stepstypes) + MAX_EDITS_PER_SONG (which is 5 * profileSlots) = 46 rows
-// 46 seems to be a good enough number for this. If we get a crash again, up the
-// "magic" 6. -aj
-#define MAX_METERS (NUM_Difficulty * 6) + MAX_EDITS_PER_SONG
+/** @brief Specifies the max number of charts available for a song.
+ *
+ * This includes autogenned charts. */
+#define MAX_METERS (NUM_Difficulty * NUM_StepsType) + MAX_EDITS_PER_SONG
REGISTER_ACTOR_CLASS( StepsDisplayList );
diff --git a/src/EditMenu.cpp b/src/EditMenu.cpp
index 8b39585144..274ff975b8 100644
--- a/src/EditMenu.cpp
+++ b/src/EditMenu.cpp
@@ -60,7 +60,7 @@ void EditMenu::GetSongsToShowForGroup( const RString &sGroup, vector &vpS
for( int i=vpSongsOut.size()-1; i>=0; i-- )
{
const Song* pSong = vpSongsOut[i];
- if( !pSong->NormallyDisplayed() || pSong->IsTutorial() || SONGMAN->WasLoadedFromAdditionalSongs(pSong) )
+ if( !pSong->NormallyDisplayed() || pSong->IsTutorial() )
vpSongsOut.erase( vpSongsOut.begin()+i );
}
break;
diff --git a/src/EditMenu.h b/src/EditMenu.h
index 28c9730d81..dac6767899 100644
--- a/src/EditMenu.h
+++ b/src/EditMenu.h
@@ -10,6 +10,7 @@
#include "EnumHelper.h"
#include "ThemeMetric.h"
+/** @brief What type of row is needed for the EditMenu? */
enum EditMenuRow
{
ROW_GROUP,
@@ -19,11 +20,19 @@ enum EditMenuRow
ROW_SOURCE_STEPS_TYPE,
ROW_SOURCE_STEPS,
ROW_ACTION,
- NUM_EditMenuRow
+ NUM_EditMenuRow /**< The number of EditMenuRows available. */
};
/** @brief Loop through each EditMenuRow. */
#define FOREACH_EditMenuRow( r ) FOREACH_ENUM( EditMenuRow, r )
+/**
+ * @brief Turn the EditMenuRow into a string.
+ * @param r the row.
+ * @return the string. */
const RString& EditMenuRowToString( EditMenuRow r );
+/**
+ * @brief Turn the EditMenuRow into a localized string.
+ * @param r the row.
+ * @return the localized string. */
const RString& EditMenuRowToLocalizedString( EditMenuRow r );
/** @brief The different actions one can take on a step. */
@@ -38,9 +47,18 @@ enum EditMenuAction
};
/** @brief Loop through each EditMenuAction. */
#define FOREACH_EditMenuAction( ema ) FOREACH_ENUM( EditMenuAction, ema )
+/**
+ * @brief Turn the EditMenuAction into a string.
+ * @param ema the action.
+ * @return the string. */
const RString& EditMenuActionToString( EditMenuAction ema );
+/**
+ * @brief Turn the EditMenuAction into a localized string.
+ * @param ema the action.
+ * @return the localized string. */
const RString& EditMenuActionToLocalizedString( EditMenuAction ema );
+/** @brief How many arrows are used for the EditMenu? */
const int NUM_ARROWS = 2;
/**
@@ -50,39 +68,110 @@ const int NUM_ARROWS = 2;
class EditMenu: public ActorFrame
{
public:
+ /** @brief Set up the EditMenu. */
EditMenu();
+ /** @brief Destroy the EditMenu. */
~EditMenu();
void Load( const RString &sType );
+ /** @brief Determine if we can move up.
+ * @return true if we can, false otherwise. */
bool CanGoUp();
+ /** @brief Determine if we can move down.
+ * @return true if we can, false otherwise. */
bool CanGoDown();
+ /** @brief Determine if we can move left.
+ * @return true if we can, false otherwise. */
bool CanGoLeft();
+ /** @brief Determine if we can move right.
+ * @return true if we can, false otherwise. */
bool CanGoRight();
+ /** @brief Determine if the EditMenuRow is selectable.
+ * @param row the row in question.
+ * @return true if it can be selected, false otherwise. */
bool RowIsSelectable( EditMenuRow row );
+ /** @brief Move up to the next selection. */
void Up();
+ /** @brief Move down to the next selection. */
void Down();
+ /** @brief Move left to the next selection. */
void Left();
+ /** @brief Move right to the next selection. */
void Right();
void RefreshAll();
- RString GetSelectedGroup() const
+ /** @brief Retrieve the currently selected group.
+ * @return the current group. */
+ RString GetSelectedGroup() const
{
if( !SHOW_GROUPS.GetValue() ) return GROUP_ALL;
- ASSERT_M((int)m_iSelection[ROW_GROUP] < (int)m_sGroups.size(),
- ssprintf("Group selection %d < Number of groups %d", m_iSelection[ROW_GROUP], (int)m_sGroups.size()));
+ int groups = static_cast(m_sGroups.size());
+ ASSERT_M(m_iSelection[ROW_GROUP] < groups,
+ ssprintf("Group selection %d < Number of groups %d",
+ m_iSelection[ROW_GROUP],
+ groups));
return m_sGroups[m_iSelection[ROW_GROUP]];
}
- Song* GetSelectedSong() const { ASSERT(m_iSelection[ROW_SONG] < (int)m_pSongs.size()); return m_pSongs[m_iSelection[ROW_SONG]]; }
- StepsType GetSelectedStepsType() const { ASSERT(m_iSelection[ROW_STEPS_TYPE] < (int)m_StepsTypes.size()); return m_StepsTypes[m_iSelection[ROW_STEPS_TYPE]]; }
- Steps* GetSelectedSteps() const { ASSERT(m_iSelection[ROW_STEPS] < (int)m_vpSteps.size()); return m_vpSteps[m_iSelection[ROW_STEPS]].pSteps; }
- Difficulty GetSelectedDifficulty() const { ASSERT(m_iSelection[ROW_STEPS] < (int)m_vpSteps.size()); return m_vpSteps[m_iSelection[ROW_STEPS]].dc; }
- StepsType GetSelectedSourceStepsType() const { ASSERT(m_iSelection[ROW_SOURCE_STEPS_TYPE] < (int)m_StepsTypes.size()); return m_StepsTypes[m_iSelection[ROW_SOURCE_STEPS_TYPE]]; }
- Steps* GetSelectedSourceSteps() const { ASSERT(m_iSelection[ROW_SOURCE_STEPS] < (int)m_vpSourceSteps.size()); return m_vpSourceSteps[m_iSelection[ROW_SOURCE_STEPS]].pSteps; }
- Difficulty GetSelectedSourceDifficulty() const { ASSERT(m_iSelection[ROW_SOURCE_STEPS] < (int)m_vpSourceSteps.size()); return m_vpSourceSteps[m_iSelection[ROW_SOURCE_STEPS]].dc; }
- EditMenuAction GetSelectedAction() const { ASSERT(m_iSelection[ROW_ACTION] < (int)m_Actions.size()); return m_Actions[m_iSelection[ROW_ACTION]]; }
-
+ /** @brief Retrieve the currently selected song.
+ * @return the current song. */
+ Song* GetSelectedSong() const
+ {
+ ASSERT(m_iSelection[ROW_SONG] < (int)m_pSongs.size());
+ return m_pSongs[m_iSelection[ROW_SONG]];
+ }
+ /** @brief Retrieve the currently selected steps type.
+ * @return the current steps type. */
+ StepsType GetSelectedStepsType() const
+ {
+ ASSERT(m_iSelection[ROW_STEPS_TYPE] < (int)m_StepsTypes.size());
+ return m_StepsTypes[m_iSelection[ROW_STEPS_TYPE]];
+ }
+ /** @brief Retrieve the currently selected steps.
+ * @return the current steps. */
+ Steps* GetSelectedSteps() const
+ {
+ ASSERT(m_iSelection[ROW_STEPS] < (int)m_vpSteps.size());
+ return m_vpSteps[m_iSelection[ROW_STEPS]].pSteps;
+ }
+ /** @brief Retrieve the currently selected difficulty.
+ * @return the current difficulty. */
+ Difficulty GetSelectedDifficulty() const
+ {
+ ASSERT(m_iSelection[ROW_STEPS] < (int)m_vpSteps.size());
+ return m_vpSteps[m_iSelection[ROW_STEPS]].dc;
+ }
+ /** @brief Retrieve the currently selected source steps type.
+ * @return the current source steps type. */
+ StepsType GetSelectedSourceStepsType() const
+ {
+ ASSERT(m_iSelection[ROW_SOURCE_STEPS_TYPE] < (int)m_StepsTypes.size());
+ return m_StepsTypes[m_iSelection[ROW_SOURCE_STEPS_TYPE]];
+ }
+ /** @brief Retrieve the currently selected source steps.
+ * @return the current source steps. */
+ Steps* GetSelectedSourceSteps() const
+ {
+ ASSERT(m_iSelection[ROW_SOURCE_STEPS] < (int)m_vpSourceSteps.size());
+ return m_vpSourceSteps[m_iSelection[ROW_SOURCE_STEPS]].pSteps;
+ }
+ /** @brief Retrieve the currently selected difficulty.
+ * @return the current difficulty. */
+ Difficulty GetSelectedSourceDifficulty() const
+ {
+ ASSERT(m_iSelection[ROW_SOURCE_STEPS] < (int)m_vpSourceSteps.size());
+ return m_vpSourceSteps[m_iSelection[ROW_SOURCE_STEPS]].dc;
+ }
+ /** @brief Retrieve the currently selected action.
+ * @return the current action. */
+ EditMenuAction GetSelectedAction() const
+ {
+ ASSERT(m_iSelection[ROW_ACTION] < (int)m_Actions.size());
+ return m_Actions[m_iSelection[ROW_ACTION]];
+ }
+ /** @brief Retrieve the currently selected row.
+ * @return the current row. */
EditMenuRow GetSelectedRow() const { return m_SelectedRow; }
private:
diff --git a/src/EnumHelper.h b/src/EnumHelper.h
index 57e81d16c4..dc1049cc0c 100644
--- a/src/EnumHelper.h
+++ b/src/EnumHelper.h
@@ -15,7 +15,12 @@ extern "C"
/** @brief A general foreach loop for enumerators. */
#define FOREACH_ENUM( e, var ) for( e var=(e)0; var( var, +1 ) )
-int CheckEnum( lua_State *L, LuaReference &table, int iPos, int iInvalid, const char *szType, bool bAllowInvalid );
+int CheckEnum(lua_State *L,
+ LuaReference &table,
+ int iPos,
+ int iInvalid,
+ const char *szType,
+ bool bAllowInvalid);
template
struct EnumTraits
@@ -33,7 +38,12 @@ namespace Enum
template
static T Check( lua_State *L, int iPos, bool bAllowInvalid = false )
{
- return (T) CheckEnum( L, EnumTraits::StringToEnum, iPos, EnumTraits::Invalid, EnumTraits::szName, bAllowInvalid );
+ return (T) CheckEnum(L,
+ EnumTraits::StringToEnum,
+ iPos,
+ EnumTraits::Invalid,
+ EnumTraits::szName,
+ bAllowInvalid);
}
template
static void Push( lua_State *L, T iVal )
@@ -57,37 +67,47 @@ namespace Enum
const RString &EnumToString( int iVal, int iMax, const char **szNameArray, auto_ptr *pNameCache ); // XToString helper
#define XToString(X) \
- COMPILE_ASSERT( NUM_##X == ARRAYLEN(X##Names) ); \
- const RString& X##ToString( X x ) \
- { \
- static auto_ptr as_##X##Name[NUM_##X+2]; \
- return EnumToString( x, NUM_##X, X##Names, as_##X##Name ); \
- } \
- namespace StringConversion { template<> RString ToString( const X &value ) { return X##ToString(value); } }
+const RString& X##ToString(X x); \
+COMPILE_ASSERT( NUM_##X == ARRAYLEN(X##Names) ); \
+const RString& X##ToString( X x ) \
+{ \
+ static auto_ptr as_##X##Name[NUM_##X+2]; \
+ return EnumToString( x, NUM_##X, X##Names, as_##X##Name ); \
+} \
+namespace StringConversion { template<> RString ToString( const X &value ) { return X##ToString(value); } }
#define XToLocalizedString(X) \
- const RString &X##ToLocalizedString( X x ) \
- { \
- static auto_ptr g_##X##Name[NUM_##X]; \
- if( g_##X##Name[0].get() == NULL ) { \
- for( unsigned i = 0; i < NUM_##X; ++i ) \
- { \
- auto_ptr ap( new LocalizedString(#X, X##ToString((X)i)) ); \
- g_##X##Name[i] = ap; \
- } \
+const RString &X##ToLocalizedString(X x); \
+const RString &X##ToLocalizedString( X x ) \
+{ \
+ static auto_ptr g_##X##Name[NUM_##X]; \
+ if( g_##X##Name[0].get() == NULL ) { \
+ for( unsigned i = 0; i < NUM_##X; ++i ) \
+ { \
+ auto_ptr ap( new LocalizedString(#X, X##ToString((X)i)) ); \
+ g_##X##Name[i] = ap; \
} \
- return g_##X##Name[x]->GetValue(); \
- }
+ } \
+ return g_##X##Name[x]->GetValue(); \
+}
#define StringToX(X) \
- X StringTo##X( const RString& s ) \
- { \
- for( unsigned i = 0; i < ARRAYLEN(X##Names); ++i ) \
- if( !s.CompareNoCase(X##Names[i]) ) \
- return (X)i; \
- return X##_Invalid; \
+X StringTo##X(const RString&); \
+X StringTo##X( const RString& s ) \
+{ \
+ for( unsigned i = 0; i < ARRAYLEN(X##Names); ++i ) \
+ if( !s.CompareNoCase(X##Names[i]) ) \
+ return (X)i; \
+ return X##_Invalid; \
+} \
+namespace StringConversion \
+{ \
+ template<> bool FromString( const RString &sValue, X &out ) \
+ { \
+ out = StringTo##X(sValue); \
+ return out != X##_Invalid; \
} \
- namespace StringConversion { template<> bool FromString( const RString &sValue, X &out ) { out = StringTo##X(sValue); return out != X##_Invalid; } }
+}
// currently unused
#define LuaDeclareType(X)
@@ -123,8 +143,21 @@ static void Lua##X(lua_State* L) \
REGISTER_WITH_LUA_FUNCTION( Lua##X ); \
template<> X EnumTraits::Invalid = X##_Invalid; \
template<> const char *EnumTraits::szName = #X; \
-namespace LuaHelpers { template<> bool FromStack( lua_State *L, X &Object, int iOffset ) { Object = Enum::Check( L, iOffset, true ); return Object != EnumTraits::Invalid; } } \
-namespace LuaHelpers { template<> void Push( lua_State *L, const X &Object ) { Enum::Push( L, Object ); } }
+namespace LuaHelpers \
+{ \
+ template<> bool FromStack( lua_State *L, X &Object, int iOffset ) \
+ { \
+ Object = Enum::Check( L, iOffset, true ); \
+ return Object != EnumTraits::Invalid; \
+ } \
+} \
+namespace LuaHelpers \
+{ \
+ template<> void Push( lua_State *L, const X &Object ) \
+ { \
+ Enum::Push( L, Object ); \
+ } \
+}
#endif
diff --git a/src/GameCommand.h b/src/GameCommand.h
index 8cd135dde4..50f9ae5050 100644
--- a/src/GameCommand.h
+++ b/src/GameCommand.h
@@ -19,6 +19,9 @@ class Style;
class Game;
struct lua_State;
+int GetNumCreditsPaid();
+int GetCreditsRequiredToPlayStyle( const Style *style );
+
class GameCommand
{
public:
diff --git a/src/GameConstantsAndTypes.cpp b/src/GameConstantsAndTypes.cpp
index e1cbb161e4..3d557fdbb8 100644
--- a/src/GameConstantsAndTypes.cpp
+++ b/src/GameConstantsAndTypes.cpp
@@ -11,6 +11,7 @@
#include "PlayerNumber.h"
#include
+RString StepsTypeToString( StepsType st );
static vector GenerateRankingToFillInMarker()
{
@@ -359,12 +360,17 @@ float DisplayBpms::GetMin() const
}
float DisplayBpms::GetMax() const
+{
+ return this->GetMaxWithin();
+}
+
+float DisplayBpms::GetMaxWithin(float highest) const
{
float fMax = 0;
FOREACH_CONST( float, vfBpms, f )
{
if( *f != -1 )
- fMax = max( fMax, *f );
+ fMax = clamp(max( fMax, *f ), 0, highest);
}
return fMax;
}
diff --git a/src/GameConstantsAndTypes.h b/src/GameConstantsAndTypes.h
index 7242f4009d..1d86aa9b27 100644
--- a/src/GameConstantsAndTypes.h
+++ b/src/GameConstantsAndTypes.h
@@ -4,6 +4,7 @@
#define GAME_CONSTANTS_AND_TYPES_H
#include "EnumHelper.h"
+#include // need the max for default.
// Note definitions
/** @brief Define the mininum difficulty value allowed. */
@@ -513,6 +514,13 @@ struct DisplayBpms
* @return the maximum BPM.
*/
float GetMax() const;
+ /**
+ * @brief Retrieve the maximum BPM of the set,
+ * but no higher than a certain value.
+ * @param highest the highest BPM to use.
+ * @return the maximum BPM.
+ */
+ float GetMaxWithin(float highest = FLT_MAX) const;
/**
* @brief Determine if the BPM is really constant.
* @return Whether the BPM is constant or not.
diff --git a/src/GameManager.cpp b/src/GameManager.cpp
index 2ff129892c..a9178b5433 100644
--- a/src/GameManager.cpp
+++ b/src/GameManager.cpp
@@ -251,7 +251,7 @@ static const Style g_Style_Dance_Double =
static const Style g_Style_Dance_Couple =
{ // STYLE_DANCE_COUPLE
true, // m_bUsedForGameplay
- true, // m_bUsedForEdit
+ false, // m_bUsedForEdit
false, // m_bUsedForDemonstration
false, // m_bUsedForHowToPlay
"couple", // m_szName
@@ -324,6 +324,50 @@ static const Style g_Style_Dance_Solo =
false, // m_bLockDifficulties
};
+static const Style g_Style_Dance_Couple_Edit =
+{ // STYLE_DANCE_COUPLE
+ false, // m_bUsedForGameplay
+ true, // m_bUsedForEdit
+ false, // m_bUsedForDemonstration
+ false, // m_bUsedForHowToPlay
+ "couple-edit", // m_szName
+ StepsType_dance_couple, // m_StepsType
+ StyleType_OnePlayerTwoSides, // m_StyleType
+ 8, // m_iColsPerPlayer
+ { // m_ColumnInfo[NUM_PLAYERS][MAX_COLS_PER_PLAYER];
+ { // PLAYER_1
+ { TRACK_1, -DANCE_COL_SPACING*4.f, NULL },
+ { TRACK_2, -DANCE_COL_SPACING*3.f, NULL },
+ { TRACK_3, -DANCE_COL_SPACING*2.f, NULL },
+ { TRACK_4, -DANCE_COL_SPACING*1.f, NULL },
+ { TRACK_5, +DANCE_COL_SPACING*1.f, NULL },
+ { TRACK_6, +DANCE_COL_SPACING*2.f, NULL },
+ { TRACK_7, +DANCE_COL_SPACING*3.f, NULL },
+ { TRACK_8, +DANCE_COL_SPACING*4.f, NULL },
+ },
+ { // PLAYER_2
+ { TRACK_1, -DANCE_COL_SPACING*4.f, NULL },
+ { TRACK_2, -DANCE_COL_SPACING*3.f, NULL },
+ { TRACK_3, -DANCE_COL_SPACING*2.f, NULL },
+ { TRACK_4, -DANCE_COL_SPACING*1.f, NULL },
+ { TRACK_5, +DANCE_COL_SPACING*1.f, NULL },
+ { TRACK_6, +DANCE_COL_SPACING*2.f, NULL },
+ { TRACK_7, +DANCE_COL_SPACING*3.f, NULL },
+ { TRACK_8, +DANCE_COL_SPACING*4.f, NULL },
+ },
+ },
+ { // m_iInputColumn[NUM_GameController][NUM_GameButton]
+ { 0, 3, 2, 1, Style::END_MAPPING },
+ { 4, 7, 6, 5, Style::END_MAPPING },
+ },
+ { // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER];
+ 0,1,2,3,4,5,6,7
+ },
+ false, // m_bNeedsZoomOutWith2Players
+ false, // m_bCanUseBeginnerHelper
+ false, // m_bLockDifficulties
+};
+
static const Style g_Style_Dance_ThreePanel =
{ // STYLE_DANCE_THREEPANEL
true, // m_bUsedForGameplay
@@ -449,6 +493,7 @@ static const Style *g_apGame_Dance_Styles[] =
&g_Style_Dance_Double,
&g_Style_Dance_Couple,
&g_Style_Dance_Solo,
+ &g_Style_Dance_Couple_Edit,
&g_Style_Dance_Routine,
&g_Style_Dance_ThreePanel,
NULL
@@ -725,7 +770,7 @@ static const Style g_Style_Pump_Couple_Edit =
false, // m_bUsedForHowToPlay
"couple-edit", // m_szName
StepsType_pump_couple, // m_StepsType
- StyleType_OnePlayerOneSide, // m_StyleType
+ StyleType_OnePlayerTwoSides, // m_StyleType
10, // m_iColsPerPlayer
{ // m_ColumnInfo[NUM_PLAYERS][MAX_COLS_PER_PLAYER];
{ // PLAYER_1
@@ -741,19 +786,24 @@ static const Style g_Style_Pump_Couple_Edit =
{ TRACK_10, +PUMP_COL_SPACING*5.0f+4, NULL },
},
{ // PLAYER_2
- { TRACK_1, -PUMP_COL_SPACING*2.0f, NULL },
- { TRACK_2, -PUMP_COL_SPACING*1.0f, NULL },
- { TRACK_3, +PUMP_COL_SPACING*0.0f, NULL },
- { TRACK_4, +PUMP_COL_SPACING*1.0f, NULL },
- { TRACK_5, +PUMP_COL_SPACING*2.0f, NULL },
+ { TRACK_1, -PUMP_COL_SPACING*5.0f-4, NULL },
+ { TRACK_2, -PUMP_COL_SPACING*4.0f-4, NULL },
+ { TRACK_3, -PUMP_COL_SPACING*3.0f-4, NULL },
+ { TRACK_4, -PUMP_COL_SPACING*2.0f-4, NULL },
+ { TRACK_5, -PUMP_COL_SPACING*1.0f-4, NULL },
+ { TRACK_6, +PUMP_COL_SPACING*1.0f+4, NULL },
+ { TRACK_7, +PUMP_COL_SPACING*2.0f+4, NULL },
+ { TRACK_8, +PUMP_COL_SPACING*3.0f+4, NULL },
+ { TRACK_9, +PUMP_COL_SPACING*4.0f+4, NULL },
+ { TRACK_10, +PUMP_COL_SPACING*5.0f+4, NULL },
},
},
{ // m_iInputColumn[NUM_GameController][NUM_GameButton]
- { 1, 3, 2, 0, 4, 6, 8, 7, 5, 9, Style::END_MAPPING },
- { 1, 3, 2, 0, 4, 6, 8, 7, 5, 9, Style::END_MAPPING },
+ { 1, 3, 2, 0, 4, Style::END_MAPPING },
+ { 6, 8, 7, 5, 9, Style::END_MAPPING },
},
{ // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER];
- 2,1,3,0,4
+ 2,1,3,0,4, 2+5,1+5,3+5,0+5,4+5
},
false, // m_bNeedsZoomOutWith2Players
false, // m_bCanUseBeginnerHelper
diff --git a/src/GameSoundManager.cpp b/src/GameSoundManager.cpp
index a9e71fce24..183b3ccf48 100644
--- a/src/GameSoundManager.cpp
+++ b/src/GameSoundManager.cpp
@@ -60,8 +60,8 @@ struct MusicPlaying
RageSound *m_Music;
MusicPlaying( RageSound *Music )
{
- m_Timing.AddBPMSegment( BPMSegment(0,120) );
- m_NewTiming.AddBPMSegment( BPMSegment(0,120) );
+ m_Timing.AddSegment( SEGMENT_BPM, new BPMSegment(0,120) );
+ m_NewTiming.AddSegment( SEGMENT_BPM, new BPMSegment(0,120) );
m_bHasTiming = false;
m_bTimingDelayed = false;
m_bApplyMusicRate = false;
@@ -142,8 +142,10 @@ static void StartMusic( MusicToPlay &ToPlay )
{
LOG->Trace( "Found '%s'", ToPlay.m_sTimingFile.c_str() );
Song song;
- if( GetExtension(ToPlay.m_sTimingFile) == ".ssc" &&
- SSCLoader::LoadFromSSCFile(ToPlay.m_sTimingFile, song) )
+ SSCLoader loaderSSC;
+ SMLoader loaderSM;
+ if(GetExtension(ToPlay.m_sTimingFile) == ".ssc" &&
+ loaderSSC.LoadFromSimfile(ToPlay.m_sTimingFile, song) )
{
ToPlay.HasTiming = true;
ToPlay.m_TimingData = song.m_SongTiming;
@@ -152,8 +154,8 @@ static void StartMusic( MusicToPlay &ToPlay )
if( pStepsCabinetLights )
pStepsCabinetLights->GetNoteData( ToPlay.m_LightsData );
}
- else if( GetExtension(ToPlay.m_sTimingFile) == ".sm" &&
- SMLoader::LoadFromSMFile(ToPlay.m_sTimingFile, song) )
+ else if(GetExtension(ToPlay.m_sTimingFile) == ".sm" &&
+ loaderSM.LoadFromSimfile(ToPlay.m_sTimingFile, song) )
{
ToPlay.HasTiming = true;
ToPlay.m_TimingData = song.m_SongTiming;
diff --git a/src/GameSoundManager.h b/src/GameSoundManager.h
index 6ce38ca39e..1187924a37 100644
--- a/src/GameSoundManager.h
+++ b/src/GameSoundManager.h
@@ -6,6 +6,9 @@
class TimingData;
class RageSound;
struct lua_State;
+
+int MusicThread_start( void *p );
+
/** @brief High-level sound utilities. */
class GameSoundManager
{
diff --git a/src/GameState.cpp b/src/GameState.cpp
index dbca4fc9a3..35d61decd0 100644
--- a/src/GameState.cpp
+++ b/src/GameState.cpp
@@ -106,6 +106,7 @@ static Preference g_Premium( "Premium", Premium_Off );
Preference GameState::m_bAutoJoin( "AutoJoin", false );
GameState::GameState() :
+ processedTiming( NULL ),
m_pCurGame( Message_CurrentGameChanged ),
m_pCurStyle( Message_CurrentStyleChanged ),
m_PlayMode( Message_PlayModeChanged ),
@@ -122,14 +123,14 @@ GameState::GameState() :
m_pCurTrail( Message_CurrentTrailP1Changed ),
m_bGameplayLeadIn( Message_GameplayLeadInChanged ),
m_bDidModeChangeNoteSkin( false ),
+ m_bIsUsingStepTiming( true ),
+ m_bInStepEditor( false ),
m_stEdit( Message_EditStepsTypeChanged ),
m_cdEdit( Message_EditCourseDifficultyChanged ),
m_pEditSourceSteps( Message_EditSourceStepsChanged ),
m_stEditSource( Message_EditSourceStepsTypeChanged ),
m_iEditCourseEntryIndex( Message_EditCourseEntryIndexChanged ),
- m_sEditLocalProfileID( Message_EditLocalProfileIDChanged ),
- m_bIsUsingStepTiming( true ),
- m_bInStepEditor( false )
+ m_sEditLocalProfileID( Message_EditLocalProfileIDChanged )
{
g_pImpl = new GameStateImpl;
@@ -188,6 +189,27 @@ GameState::~GameState()
SAFE_DELETE( m_Environment );
SAFE_DELETE( g_pImpl );
+ SAFE_DELETE( processedTiming );
+}
+
+PlayerNumber GameState::GetMasterPlayerNumber() const
+{
+ return this->masterPlayerNumber;
+}
+
+void GameState::SetMasterPlayerNumber(const PlayerNumber p)
+{
+ this->masterPlayerNumber = p;
+}
+
+TimingData * GameState::GetProcessedTimingData() const
+{
+ return this->processedTiming;
+}
+
+void GameState::SetProcessedTimingData(TimingData * t)
+{
+ this->processedTiming = t;
}
void GameState::ApplyGameCommand( const RString &sCommand, PlayerNumber pn )
@@ -244,7 +266,7 @@ void GameState::ResetPlayer( PlayerNumber pn )
void GameState::Reset()
{
- m_MasterPlayerNumber = PLAYER_INVALID; // must initialize for UnjoinPlayer
+ this->SetMasterPlayerNumber(PLAYER_INVALID); // must initialize for UnjoinPlayer
FOREACH_PlayerNumber( pn )
UnjoinPlayer( pn );
@@ -334,14 +356,14 @@ void GameState::JoinPlayer( PlayerNumber pn )
* give the new player the same number of stage tokens that the old player
* has. */
if( GetCoinMode() == CoinMode_Pay && GetPremium() == Premium_2PlayersFor1Credit && GetNumSidesJoined() == 1 )
- m_iPlayerStageTokens[pn] = m_iPlayerStageTokens[m_MasterPlayerNumber];
+ m_iPlayerStageTokens[pn] = m_iPlayerStageTokens[this->GetMasterPlayerNumber()];
else
m_iPlayerStageTokens[pn] = PREFSMAN->m_iSongsPerPlay;
m_bSideIsJoined[pn] = true;
- if( m_MasterPlayerNumber == PLAYER_INVALID )
- m_MasterPlayerNumber = pn;
+ if( this->GetMasterPlayerNumber() == PLAYER_INVALID )
+ this->SetMasterPlayerNumber(pn);
// if first player to join, set start time
if( GetNumSidesJoined() == 1 )
@@ -385,8 +407,8 @@ void GameState::UnjoinPlayer( PlayerNumber pn )
ResetPlayer( pn );
- if( m_MasterPlayerNumber == pn )
- m_MasterPlayerNumber = GetFirstHumanPlayer();
+ if( this->GetMasterPlayerNumber() == pn )
+ this->SetMasterPlayerNumber(GetFirstHumanPlayer());
/* Unjoin STATSMAN first, so steps used by this player are released
* and can be released by PROFILEMAN. */
@@ -398,7 +420,7 @@ void GameState::UnjoinPlayer( PlayerNumber pn )
MESSAGEMAN->Broadcast( msg );
// If there are no players left, reset some non-player-specific stuff, too.
- if( m_MasterPlayerNumber == PLAYER_INVALID )
+ if( this->GetMasterPlayerNumber() == PLAYER_INVALID )
{
SongOptions so;
GetDefaultSongOptions( so );
@@ -635,8 +657,8 @@ int GameState::GetNumStagesForCurrentSongAndStepsOrCourse() const
if( pStyle == NULL )
{
const Steps *pSteps = NULL;
- if( m_MasterPlayerNumber != PlayerNumber_Invalid )
- pSteps = m_pCurSteps[m_MasterPlayerNumber];
+ if( this->GetMasterPlayerNumber() != PlayerNumber_Invalid )
+ pSteps = m_pCurSteps[this->GetMasterPlayerNumber()];
// Don't call GetFirstCompatibleStyle if numSidesJoined == 0.
// This happens because on SContinue when players are unjoined,
// pCurSteps will still be set while no players are joined. -Chris
@@ -690,7 +712,11 @@ void GameState::BeginStage()
if( !ARE_STAGE_PLAYER_MODS_FORCED )
{
FOREACH_PlayerNumber( p )
- m_pPlayerState[p]->m_PlayerOptions.Assign( ModsLevel_Stage, m_pPlayerState[p]->m_PlayerOptions.GetPreferred() );
+ {
+ ModsGroup &po = m_pPlayerState[p]->m_PlayerOptions;
+ po.Assign(ModsLevel_Stage,
+ m_pPlayerState[p]->m_PlayerOptions.GetPreferred());
+ }
}
if( !ARE_STAGE_SONG_MODS_FORCED )
m_SongOptions.Assign( ModsLevel_Stage, m_SongOptions.GetPreferred() );
@@ -969,7 +995,8 @@ update player position code goes here
float GameState::GetSongPercent( float beat ) const
{
// 0 = first step; 1 = last step
- return (beat - m_pCurSong->m_fFirstBeat) / m_pCurSong->m_fLastBeat;
+ float curTime = this->m_pCurSong->m_SongTiming.GetElapsedTimeFromBeat(beat);
+ return (curTime - m_pCurSong->GetFirstSecond()) / m_pCurSong->GetLastSecond();
}
int GameState::GetNumStagesLeft( PlayerNumber pn ) const
@@ -994,9 +1021,9 @@ bool GameState::IsFinalStageForAnyHumanPlayer() const
bool GameState::IsAnExtraStage() const
{
- if( m_MasterPlayerNumber == PlayerNumber_Invalid )
+ if( this->GetMasterPlayerNumber() == PlayerNumber_Invalid )
return false;
- return !IsEventMode() && !IsCourseMode() && m_iAwardedExtraStages[m_MasterPlayerNumber] > 0;
+ return !IsEventMode() && !IsCourseMode() && m_iAwardedExtraStages[this->GetMasterPlayerNumber()] > 0;
}
static ThemeMetric LOCK_EXTRA_STAGE_SELECTION("GameState","LockExtraStageSelection");
@@ -1007,16 +1034,16 @@ bool GameState::IsAnExtraStageAndSelectionLocked() const
bool GameState::IsExtraStage() const
{
- if( m_MasterPlayerNumber == PlayerNumber_Invalid )
+ if( this->GetMasterPlayerNumber() == PlayerNumber_Invalid )
return false;
- return !IsEventMode() && !IsCourseMode() && m_iAwardedExtraStages[m_MasterPlayerNumber] == 1;
+ return !IsEventMode() && !IsCourseMode() && m_iAwardedExtraStages[this->GetMasterPlayerNumber()] == 1;
}
bool GameState::IsExtraStage2() const
{
- if( m_MasterPlayerNumber == PlayerNumber_Invalid )
+ if( this->GetMasterPlayerNumber() == PlayerNumber_Invalid )
return false;
- return !IsEventMode() && !IsCourseMode() && m_iAwardedExtraStages[m_MasterPlayerNumber] == 2;
+ return !IsEventMode() && !IsCourseMode() && m_iAwardedExtraStages[this->GetMasterPlayerNumber()] == 2;
}
Stage GameState::GetCurrentStage() const
@@ -1059,7 +1086,7 @@ int GameState::GetCourseSongIndex() const
}
else
{
- return STATSMAN->m_CurStageStats.m_player[m_MasterPlayerNumber].m_iSongsPlayed-1;
+ return STATSMAN->m_CurStageStats.m_player[this->GetMasterPlayerNumber()].m_iSongsPlayed-1;
}
}
@@ -1131,7 +1158,7 @@ void GameState::SetCurrentStyle( const Style *pStyle )
if( INPUTMAPPER )
{
if( GetCurrentStyle() && GetCurrentStyle()->m_StyleType == StyleType_OnePlayerTwoSides )
- INPUTMAPPER->SetJoinControllers( m_MasterPlayerNumber );
+ INPUTMAPPER->SetJoinControllers( this->GetMasterPlayerNumber() );
else
INPUTMAPPER->SetJoinControllers( PLAYER_INVALID );
}
@@ -1192,7 +1219,7 @@ bool GameState::IsHumanPlayer( PlayerNumber pn ) const
return true;
case StyleType_OnePlayerOneSide:
case StyleType_OnePlayerTwoSides:
- return pn == m_MasterPlayerNumber;
+ return pn == this->GetMasterPlayerNumber();
default:
ASSERT(0); // invalid style type
return false;
@@ -1276,7 +1303,7 @@ EarnedExtraStage GameState::CalculateEarnedExtraStage() const
if( GetSmallestNumStagesLeftForAnyHumanPlayer() > 0 )
return EarnedExtraStage_No;
- if( m_iAwardedExtraStages[m_MasterPlayerNumber] >= 2 )
+ if( m_iAwardedExtraStages[this->GetMasterPlayerNumber()] >= 2 )
return EarnedExtraStage_No;
FOREACH_EnabledPlayer( pn )
@@ -2124,7 +2151,7 @@ public:
DEFINE_METHOD( IsPlayerEnabled, IsPlayerEnabled(Enum::Check(L, 1)) )
DEFINE_METHOD( IsHumanPlayer, IsHumanPlayer(Enum::Check(L, 1)) )
DEFINE_METHOD( GetPlayerDisplayName, GetPlayerDisplayName(Enum::Check(L, 1)) )
- DEFINE_METHOD( GetMasterPlayerNumber, m_MasterPlayerNumber )
+ DEFINE_METHOD( GetMasterPlayerNumber, GetMasterPlayerNumber() )
DEFINE_METHOD( GetMultiplayer, m_bMultiplayer )
static int SetMultiplayer( T* p, lua_State *L )
{
diff --git a/src/GameState.h b/src/GameState.h
index 5e925e05ff..51abbac141 100644
--- a/src/GameState.h
+++ b/src/GameState.h
@@ -32,9 +32,15 @@ class Style;
class TimingData;
class Trail;
+SortOrder GetDefaultSort();
+
/** @brief Holds game data that is not saved between sessions. */
class GameState
{
+ /** @brief The player number used with Styles where one player controls both sides. */
+ PlayerNumber masterPlayerNumber;
+ /** @brief The TimingData that is used for processing certain functions. */
+ TimingData * processedTiming;
public:
/** @brief Set up the GameState with initial values. */
GameState();
@@ -91,8 +97,6 @@ public:
* to get one credit, only to have to put in another four coins to get
* the three credits needed to begin the game. */
BroadcastOnChange m_iCoins;
- /** @brief The player number used with Styles where one player controls both sides. */
- PlayerNumber m_MasterPlayerNumber;
bool m_bMultiplayer;
int m_iNumMultiplayerNoteFields;
bool DifficultiesLocked() const;
@@ -139,6 +143,26 @@ public:
PlayerNumber GetFirstDisabledPlayer() const;
bool IsCpuPlayer( PlayerNumber pn ) const;
bool AnyPlayersAreCpu() const;
+
+ /**
+ * @brief Retrieve the present master player number.
+ * @return The master player number. */
+ PlayerNumber GetMasterPlayerNumber() const;
+
+ /**
+ * @brief Set the master player number.
+ * @param p the master player number. */
+ void SetMasterPlayerNumber(const PlayerNumber p);
+
+ /**
+ * @brief Retrieve the present timing data being processed.
+ * @return the timing data pointer. */
+ TimingData * GetProcessedTimingData() const;
+
+ /**
+ * @brief Set the timing data to be used with processing.
+ * @param t the timing data. */
+ void SetProcessedTimingData(TimingData * t);
bool IsCourseMode() const;
bool IsBattleMode() const; // not Rave
diff --git a/src/GameplayAssist.cpp b/src/GameplayAssist.cpp
index 4ecd6be014..e42920f15c 100644
--- a/src/GameplayAssist.cpp
+++ b/src/GameplayAssist.cpp
@@ -47,7 +47,7 @@ void GameplayAssist::PlayTicks( const NoteData &nd, const PlayerState *ps )
if( nd.IsThereATapOrHoldHeadAtRow( r ) )
iClapRow = r;
- if( iClapRow != -1 && !timing.IsWarpAtRow( iClapRow ) && !timing.IsFakeAtRow( iClapRow ) )
+ if( iClapRow != -1 && timing.IsJudgableAtRow(iClapRow))
{
const float fTickBeat = NoteRowToBeat( iClapRow );
const float fTickSecond = timing.GetElapsedTimeFromBeatNoOffset( fTickBeat );
diff --git a/src/GhostArrowRow.cpp b/src/GhostArrowRow.cpp
index 8a2b9f0b4a..f81eef75d6 100644
--- a/src/GhostArrowRow.cpp
+++ b/src/GhostArrowRow.cpp
@@ -88,7 +88,9 @@ void GhostArrowRow::Update( float fDeltaTime )
void GhostArrowRow::DrawPrimitives()
{
for( unsigned c=0; cDraw();
+ }
}
void GhostArrowRow::DidTapNote( int iCol, TapNoteScore tns, bool bBright )
diff --git a/src/InGameLoadingWindow.cpp b/src/InGameLoadingWindow.cpp
new file mode 100644
index 0000000000..39c06fa44c
--- /dev/null
+++ b/src/InGameLoadingWindow.cpp
@@ -0,0 +1,31 @@
+#include "global.h"
+#include "InGameLoadingWindow.h"
+#include "ScreenManager.h"
+#include "ThemeManager.h"
+#include "ActorUtil.h"
+
+//REGISTER_ACTOR_CLASS( InGameLoadingWindow );
+
+InGameLoadingWindow::InGameLoadingWindow() {
+ SetName("InGameLoadingWindow");
+ m_Text.SetName("LoadingText");
+ m_Text.LoadFromFont( THEME->GetPathF(m_sName, "LoadingText") );
+ m_Text.SetXY(0,0);
+ AddChild(&m_Text);
+}
+
+InGameLoadingWindow::~InGameLoadingWindow() {
+ RemoveChild(&m_Text);
+}
+
+void InGameLoadingWindow::SetText( RString str ) {
+ textChanged=true;
+ currentText=str;
+}
+
+void InGameLoadingWindow::Update(float delta) {
+ if(textChanged) {
+ m_Text.SetText( currentText );
+ textChanged=false;
+ }
+}
diff --git a/src/InGameLoadingWindow.h b/src/InGameLoadingWindow.h
new file mode 100644
index 0000000000..431be5119f
--- /dev/null
+++ b/src/InGameLoadingWindow.h
@@ -0,0 +1,21 @@
+#include "arch/LoadingWindow/LoadingWindow.h"
+#include "BitmapText.h"
+#include "RageTimer.h"
+#include "global.h"
+#include "ActorFrame.h"
+
+class InGameLoadingWindow: public LoadingWindow, public ActorFrame {
+
+public:
+ InGameLoadingWindow();
+ ~InGameLoadingWindow();
+
+ void SetText( RString str );
+ void Update ( float delta );
+
+private:
+ bool textChanged;
+ RString currentText;
+ BitmapText m_Text;
+};
+
diff --git a/src/InputMapper.cpp b/src/InputMapper.cpp
index 90e65ae879..1b0a71e77c 100644
--- a/src/InputMapper.cpp
+++ b/src/InputMapper.cpp
@@ -64,7 +64,7 @@ static const AutoMappings g_DefaultKeyMappings = AutoMappings(
AutoMappingEntry( 0, KEY_KP_C2, GAME_BUTTON_MENUDOWN, true ),
AutoMappingEntry( 0, KEY_KP_ENTER, GAME_BUTTON_START, true ),
AutoMappingEntry( 0, KEY_KP_C0, GAME_BUTTON_SELECT, true ),
- AutoMappingEntry( 0, KEY_NUMLOCK, GAME_BUTTON_BACK, true ),
+ AutoMappingEntry( 0, KEY_HYPHEN, GAME_BUTTON_BACK, true ), // laptop keyboards.
AutoMappingEntry( 0, KEY_F1, GAME_BUTTON_COIN, false ),
AutoMappingEntry( 0, KEY_SCRLLOCK, GAME_BUTTON_OPERATOR, false )
);
diff --git a/src/Inventory.cpp b/src/Inventory.cpp
index 3b7eb88b32..b45b779449 100644
--- a/src/Inventory.cpp
+++ b/src/Inventory.cpp
@@ -11,6 +11,7 @@
#include "ThemeMetric.h"
#include "PlayerState.h"
+void ReloadItems();
#define NUM_ITEM_TYPES THEME->GetMetricF("Inventory","NumItemTypes")
#define ITEM_DURATION_SECONDS THEME->GetMetricF("Inventory","ItemDurationSeconds")
@@ -118,10 +119,10 @@ void Inventory::Update( float fDelta )
}
}
-
+ Song &song = *GAMESTATE->m_pCurSong;
// use items if this player is CPU-controlled
if( m_pPlayerState->m_PlayerController != PC_HUMAN &&
- GAMESTATE->m_Position.m_fSongBeat < GAMESTATE->m_pCurSong->m_fLastBeat )
+ GAMESTATE->m_Position.m_fSongBeat < song.GetLastBeat() )
{
// every 1 seconds, try to use an item
int iLastSecond = (int)(RageTimer::GetTimeSinceStartFast() - fDelta);
diff --git a/src/JsonUtil.cpp b/src/JsonUtil.cpp
index be736ea4b5..755036e770 100644
--- a/src/JsonUtil.cpp
+++ b/src/JsonUtil.cpp
@@ -14,8 +14,7 @@ bool JsonUtil::LoadFromString(Json::Value &root, RString sData, RString &sErrorO
if (!parsingSuccessful)
{
RString err = reader.getFormatedErrorMessages();
- sErrorOut = ssprintf("JSON: LoadFromFileShowErrors failed: %s", err.c_str());
- LOG->Warn(sErrorOut);
+ LOG->Warn("JSON: LoadFromFileShowErrors failed: %s", err.c_str());
return false;
}
return true;
diff --git a/src/JsonUtil.h b/src/JsonUtil.h
index 87942336e0..22c33ae4ec 100644
--- a/src/JsonUtil.h
+++ b/src/JsonUtil.h
@@ -31,6 +31,24 @@ namespace JsonUtil
for(unsigned i=0; i
+ static void SerializeVectorPointers(const vector &v, void fn(const T &, Json::Value &), Json::Value &root)
+ {
+ root = Json::Value(Json::arrayValue);
+ root.resize(v.size());
+ for(unsigned i=0; i
+ static void SerializeVectorPointers(const vector &v, void fn(const T *, Json::Value &), Json::Value &root)
+ {
+ root = Json::Value(Json::arrayValue);
+ root.resize(v.size());
+ for(unsigned i=0; i
static void SerializeArray(const V &v, void fn(const T &, Json::Value &), Json::Value &root)
@@ -149,6 +167,19 @@ namespace JsonUtil
fn(*v[i], root[i]);
}
}
+
+ template
+ static void DeserializeVectorPointers(vector &v, void fn(T *, const Json::Value &), const Json::Value &root)
+ {
+ for(unsigned i=0; i
static void DeserializeArrayValues(vector &v, const Json::Value &root)
diff --git a/src/LifeMeterBar.cpp b/src/LifeMeterBar.cpp
index 8256732b89..bbc101058a 100644
--- a/src/LifeMeterBar.cpp
+++ b/src/LifeMeterBar.cpp
@@ -172,7 +172,7 @@ void LifeMeterBar::ChangeLife( HoldNoteScore score, TapNoteScore tscore )
switch( score )
{
case HNS_Held: fDeltaLife = +0; break;
- case HNS_LetGo: fDeltaLife = -1.0; break;
+ case HNS_LetGo: fDeltaLife = -1.0f; break;
default:
ASSERT(0);
}
diff --git a/src/LifeMeterBattery.cpp b/src/LifeMeterBattery.cpp
index 009d920e50..3f49487a17 100644
--- a/src/LifeMeterBattery.cpp
+++ b/src/LifeMeterBattery.cpp
@@ -26,6 +26,14 @@ void LifeMeterBattery::Load( const PlayerState *pPlayerState, PlayerStageStats *
const RString sType = "LifeMeterBattery";
PlayerNumber pn = pPlayerState->m_PlayerNumber;
+ MIN_SCORE_TO_KEEP_LIFE.Load(sType, "MinScoreToKeepLife");
+ DANGER_THRESHOLD.Load(sType, "DangerThreshold");
+ SUBTRACT_LIVES.Load(sType, "SubtractLives");
+ MINES_SUBTRACT_LIVES.Load(sType, "MinesSubtractLives");
+ HELD_ADD_LIVES.Load(sType, "HeldAddLives");
+ LET_GO_SUBTRACT_LIVES.Load(sType, "LetGoSubtractLives");
+
+ LIVES_FORMAT.Load(sType, "NumLivesFormat");
BATTERY_BLINK_TIME.Load(sType, "BatteryBlinkTime"); // 1.2f by default
bool bPlayerEnabled = GAMESTATE->IsPlayerEnabled( pPlayerState );
@@ -101,42 +109,54 @@ void LifeMeterBattery::OnSongEnded()
Refresh();
}
+void LifeMeterBattery::SubtractLives( int iLives )
+{
+ if( iLives <= 0 )
+ return;
+
+ m_iTrailingLivesLeft = m_iLivesLeft;
+ m_iLivesLeft -= iLives;
+ m_soundLoseLife.Play();
+ m_textNumLives.PlayCommand("LoseLife");
+
+ Refresh();
+ m_fBatteryBlinkTime = BATTERY_BLINK_TIME;
+}
+
+void LifeMeterBattery::AddLives( int iLives )
+{
+ if( iLives <= 0 )
+ return;
+
+ m_iTrailingLivesLeft = m_iLivesLeft;
+ m_iLivesLeft += iLives;
+ m_soundGainLife.Play();
+ m_textNumLives.PlayCommand("GainLife");
+
+ Refresh();
+ m_fBatteryBlinkTime = 0;
+}
+
+void LifeMeterBattery::ChangeLives(int iLifeDiff)
+{
+ if( iLifeDiff < 0 )
+ SubtractLives( abs(iLifeDiff) );
+ else if( iLifeDiff > 0 )
+ AddLives(iLifeDiff);
+}
+
void LifeMeterBattery::ChangeLife( TapNoteScore score )
{
if( m_iLivesLeft == 0 )
return;
- // todo: let the themer decide how this is handled. -aj
- switch( score )
+ // this probably doesn't handle hold checkpoints. -aj
+ if( score == TNS_HitMine && MINES_SUBTRACT_LIVES > 0 )
+ SubtractLives(MINES_SUBTRACT_LIVES);
+ else
{
- case TNS_W1:
- case TNS_W2:
- case TNS_W3:
- break;
- case TNS_W4:
- case TNS_W5:
- case TNS_Miss:
- case TNS_HitMine:
- m_iTrailingLivesLeft = m_iLivesLeft;
- m_iLivesLeft--;
- m_soundLoseLife.Play();
-
- m_textNumLives.PlayCommand("LoseLife");
- /*
- m_textNumLives.SetZoom( 1.5f );
- m_textNumLives.BeginTweening( 0.15f );
- m_textNumLives.SetZoom( 1.0f );
- */
-
- Refresh();
- m_fBatteryBlinkTime = BATTERY_BLINK_TIME;
- break;
- default:
- break;
- /*
- // xxx: this doesn't handle hold checkpoints.
- ASSERT(0);
- */
+ if( score < MIN_SCORE_TO_KEEP_LIFE && score > TNS_CheckpointMiss && SUBTRACT_LIVES > 0 )
+ SubtractLives(SUBTRACT_LIVES);
}
Message msg( "LifeChanged" );
@@ -148,16 +168,19 @@ void LifeMeterBattery::ChangeLife( TapNoteScore score )
void LifeMeterBattery::ChangeLife( HoldNoteScore score, TapNoteScore tscore )
{
- switch( score )
- {
- case HNS_Held:
- break;
- case HNS_LetGo:
- ChangeLife( TNS_Miss ); // LetGo is the same as a miss
- break;
- default:
- ASSERT(0);
- }
+ if( m_iLivesLeft == 0 )
+ return;
+
+ if( score == HNS_Held && HELD_ADD_LIVES > 0 )
+ AddLives(HELD_ADD_LIVES);
+ if( score == HNS_LetGo && LET_GO_SUBTRACT_LIVES > 0 )
+ SubtractLives(LET_GO_SUBTRACT_LIVES);
+
+ Message msg( "LifeChanged" );
+ msg.SetParam( "Player", m_pPlayerState->m_PlayerNumber );
+ msg.SetParam( "LifeMeter", LuaReference::CreateFromPush(*this) );
+ msg.SetParam( "LivesLeft", GetLivesLeft() );
+ MESSAGEMAN->Broadcast( msg );
}
void LifeMeterBattery::HandleTapScoreNone()
@@ -171,12 +194,12 @@ void LifeMeterBattery::ChangeLife( float fDeltaLifePercent )
bool LifeMeterBattery::IsInDanger() const
{
- return false;
+ return m_iLivesLeft < DANGER_THRESHOLD;
}
bool LifeMeterBattery::IsHot() const
{
- return false;
+ return m_iLivesLeft == GAMESTATE->m_SongOptions.GetSong().m_iBatteryLives;
}
bool LifeMeterBattery::IsFailing() const
@@ -208,7 +231,8 @@ void LifeMeterBattery::Refresh()
}
else
{
- m_textNumLives.SetText( ssprintf("x%d", m_iLivesLeft-1) );
+ //m_textNumLives.SetText( ssprintf("x%d", m_iLivesLeft-1) );
+ m_textNumLives.SetText( ssprintf(LIVES_FORMAT.GetValue(), m_iLivesLeft-1) );
m_sprBattery.SetState( 3 );
}
}
@@ -244,13 +268,14 @@ class LunaLifeMeterBattery: public Luna
{
public:
static int GetLivesLeft( T* p, lua_State *L ) { lua_pushnumber( L, p->GetLivesLeft() ); return 1; }
- // is this right? wtf -q2x
static int GetTotalLives( T* p, lua_State *L ) { lua_pushnumber( L, GAMESTATE->m_SongOptions.GetSong().m_iBatteryLives ); return 1; }
+ static int ChangeLives( T* p, lua_State *L ) { p->ChangeLives(IArg(1)); return 0; }
LunaLifeMeterBattery()
{
ADD_METHOD( GetLivesLeft );
ADD_METHOD( GetTotalLives );
+ ADD_METHOD( ChangeLives );
}
};
diff --git a/src/LifeMeterBattery.h b/src/LifeMeterBattery.h
index d7b4a90a1d..648811a9fc 100644
--- a/src/LifeMeterBattery.h
+++ b/src/LifeMeterBattery.h
@@ -32,18 +32,28 @@ public:
void Refresh();
int GetLivesLeft() { return m_iLivesLeft; }
+ void ChangeLives(int iLifeDiff);
// Lua
virtual void PushSelf( lua_State *L );
private:
+ void SubtractLives( int iLives );
+ void AddLives( int iLives );
+
int m_iLivesLeft; // dead when 0
int m_iTrailingLivesLeft; // lags m_iLivesLeft
float m_fBatteryBlinkTime; // if > 0 battery is blinking
- // theme metrics added for sm-ssc
ThemeMetric BATTERY_BLINK_TIME;
+ ThemeMetric MIN_SCORE_TO_KEEP_LIFE;
+ ThemeMetric DANGER_THRESHOLD;
+ ThemeMetric SUBTRACT_LIVES;
+ ThemeMetric MINES_SUBTRACT_LIVES;
+ ThemeMetric HELD_ADD_LIVES;
+ ThemeMetric LET_GO_SUBTRACT_LIVES;
+ ThemeMetric LIVES_FORMAT;
AutoActor m_sprFrame;
Sprite m_sprBattery;
diff --git a/src/LuaManager.h b/src/LuaManager.h
index 5bcf0233eb..084532800a 100644
--- a/src/LuaManager.h
+++ b/src/LuaManager.h
@@ -220,9 +220,11 @@ inline bool MyLua_checkintboolean( lua_State *L, int iArg )
#define FArg(n) ((float) luaL_checknumber(L,(n)))
#define LuaFunction( func, expr ) \
+int LuaFunc_##func( lua_State *L ); \
int LuaFunc_##func( lua_State *L ) { \
LuaHelpers::Push( L, expr ); return 1; \
} \
+void LuaFunc_Register_##func( lua_State *L ); \
void LuaFunc_Register_##func( lua_State *L ) { lua_register( L, #func, LuaFunc_##func ); } \
REGISTER_WITH_LUA_FUNCTION( LuaFunc_Register_##func );
diff --git a/src/LyricDisplay.cpp b/src/LyricDisplay.cpp
index 7284d2dc17..b896814e1d 100644
--- a/src/LyricDisplay.cpp
+++ b/src/LyricDisplay.cpp
@@ -59,8 +59,8 @@ void LyricDisplay::Update( float fDeltaTime )
if( m_iCurLyricNumber+1 < GAMESTATE->m_pCurSong->m_LyricSegments.size() )
fEndTime = pSong->m_LyricSegments[m_iCurLyricNumber+1].m_fStartTime;
else
- fEndTime = pSong->m_SongTiming.GetElapsedTimeFromBeat( pSong->m_fLastBeat );
-
+ fEndTime = pSong->GetLastSecond();
+
const float fDistance = fEndTime - pSong->m_LyricSegments[m_iCurLyricNumber].m_fStartTime;
const float fTweenBufferTime = IN_LENGTH.GetValue() + OUT_LENGTH.GetValue();
diff --git a/src/Makefile.am b/src/Makefile.am
index 2abcf7c4be..34443e1708 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -107,7 +107,7 @@ ScreenSyncOverlay.cpp ScreenSyncOverlay.h \
ScreenSystemLayer.cpp ScreenSystemLayer.h ScreenSetTime.cpp ScreenSetTime.h \
ScreenSongOptions.cpp ScreenSongOptions.h \
ScreenSplash.cpp ScreenSplash.h \
-ScreenTestFonts.cpp ScreenTestFonts.h ScreenTestInput.cpp ScreenTestInput.h \
+ScreenTestInput.cpp ScreenTestInput.h \
ScreenTestLights.cpp ScreenTestLights.h ScreenTestSound.cpp ScreenTestSound.h ScreenTextEntry.cpp ScreenTextEntry.h \
ScreenTitleMenu.cpp ScreenTitleMenu.h \
ScreenUnlockBrowse.cpp ScreenUnlockBrowse.h \
@@ -340,6 +340,7 @@ DualScrollBar.cpp DualScrollBar.h \
EditMenu.cpp EditMenu.h FadingBanner.cpp FadingBanner.h \
GradeDisplay.cpp GradeDisplay.h GraphDisplay.cpp GraphDisplay.h \
GrooveRadar.cpp GrooveRadar.h HelpDisplay.cpp HelpDisplay.h \
+InGameLoadingWindow.cpp InGameLoadingWindow.h \
MemoryCardDisplay.cpp MemoryCardDisplay.h \
MenuTimer.cpp MenuTimer.h \
ModIcon.cpp ModIcon.h ModIconRow.cpp ModIconRow.h \
diff --git a/src/MenuTimer.h b/src/MenuTimer.h
index 1756bf715d..cd3a211c54 100644
--- a/src/MenuTimer.h
+++ b/src/MenuTimer.h
@@ -9,6 +9,8 @@
#include "ThemeMetric.h"
#include "AutoActor.h"
+RString WARNING_COMMAND_NAME( size_t i );
+
class MenuTimer : public ActorFrame
{
public:
diff --git a/src/MeterDisplay.cpp b/src/MeterDisplay.cpp
index 641b50d73c..cd8c2faebb 100644
--- a/src/MeterDisplay.cpp
+++ b/src/MeterDisplay.cpp
@@ -73,8 +73,8 @@ void SongMeterDisplay::Update( float fDeltaTime )
{
if( GAMESTATE->m_pCurSong )
{
- float fSongStartSeconds = GAMESTATE->m_pCurSong->m_SongTiming.GetElapsedTimeFromBeat( GAMESTATE->m_pCurSong->m_fFirstBeat );
- float fSongEndSeconds = GAMESTATE->m_pCurSong->m_SongTiming.GetElapsedTimeFromBeat( GAMESTATE->m_pCurSong->m_fLastBeat );
+ float fSongStartSeconds = GAMESTATE->m_pCurSong->GetFirstSecond();
+ float fSongEndSeconds = GAMESTATE->m_pCurSong->GetLastSecond();
float fPercentPositionSong = SCALE( GAMESTATE->m_Position.m_fMusicSeconds, fSongStartSeconds, fSongEndSeconds, 0.0f, 1.0f );
CLAMP( fPercentPositionSong, 0, 1 );
diff --git a/src/ModIconRow.cpp b/src/ModIconRow.cpp
index 362c5a8e4d..7ecf1ce320 100644
--- a/src/ModIconRow.cpp
+++ b/src/ModIconRow.cpp
@@ -10,6 +10,8 @@
#include "LuaManager.h"
#include "Foreach.h"
+int OptionToPreferredColumn( RString sOptionText );
+
REGISTER_ACTOR_CLASS( ModIconRow );
ModIconRow::ModIconRow()
@@ -66,35 +68,12 @@ void ModIconRow::HandleMessage( const Message &msg )
struct OptionColumnEntry
{
- char *szString;
+ const char *szString;
int iSlotIndex;
//void FromStack( lua_State *L, int iPos );
};
-/*
-void OptionColumnEntry::FromStack( lua_State *L, int iPos )
-{
- if( lua_type(L, iPos) != LUA_TTABLE )
- return;
-
- lua_pushvalue( L, iPos );
- const int iTab = lua_gettop( L );
-
- // option name
- lua_getfield( L, iTab, "Name" );
- RString sName = lua_tostring( L, -1 );
- szString = const_cast(sName.c_str());
- lua_settop( L, iTab );
-
- // option icon index
- lua_getfield( L, iTab, "IconIndex" );
- iSlotIndex = lua_tointeger( L, -1 );
- lua_settop( L, iTab );
-}
-static vector g_OptionColumnEntries;
-*/
-
// todo: metric these? -aj
static const OptionColumnEntry g_OptionColumnEntries[] =
{
diff --git a/src/MusicWheel.cpp b/src/MusicWheel.cpp
index 77303f5286..5c7d9a6b6b 100644
--- a/src/MusicWheel.cpp
+++ b/src/MusicWheel.cpp
@@ -969,7 +969,7 @@ void MusicWheel::FilterWheelItemDatas(vector &aUnFilteredD
}
/* If the song has no steps for the current style, remove it. */
- if( !pSong->HasStepsType(GAMESTATE->GetCurrentStyle()->m_StepsType) )
+ if( !CommonMetrics::AUTO_SET_STYLE && !pSong->HasStepsType(GAMESTATE->GetCurrentStyle()->m_StepsType) )
{
aiRemove[i] = true;
continue;
@@ -1476,11 +1476,11 @@ RString MusicWheel::JumpToPrevGroup()
// in case it wasn't found above:
for( unsigned int i = m_CurWheelItemData.size()-1; i > 0; --i )
{
- LOG->Trace( ssprintf("JumpToPrevGroup iteration 2 | i = %u",i) );
+ LOG->Trace( "JumpToPrevGroup iteration 2 | i = %u",i );
if( m_CurWheelItemData[i]->m_Type == TYPE_SECTION )
{
m_iSelection = i;
- LOG->Trace( ssprintf("finding it in #2 | i = %u | text = %s",i, m_CurWheelItemData[i]->m_sText.c_str()) );
+ LOG->Trace( "finding it in #2 | i = %u | text = %s",i, m_CurWheelItemData[i]->m_sText.c_str() );
return m_CurWheelItemData[i]->m_sText;
}
}
diff --git a/src/MusicWheelItem.cpp b/src/MusicWheelItem.cpp
index c7ad0fb3c3..5bde9a78a1 100644
--- a/src/MusicWheelItem.cpp
+++ b/src/MusicWheelItem.cpp
@@ -170,6 +170,10 @@ MusicWheelItem::MusicWheelItem( const MusicWheelItem &cpy ):
MusicWheelItem::~MusicWheelItem()
{
+ FOREACH_ENUM( MusicWheelItemType, i )
+ {
+ SAFE_DELETE(m_pText[i]);
+ }
delete m_pTextSectionCount;
}
diff --git a/src/NetworkSyncManager.cpp b/src/NetworkSyncManager.cpp
index b49720a46a..66a4a1b4de 100644
--- a/src/NetworkSyncManager.cpp
+++ b/src/NetworkSyncManager.cpp
@@ -237,7 +237,7 @@ void NetworkSyncManager::ReportScore(int playerID, int step, int score, int comb
if( !useSMserver ) //Make sure that we are using the network
return;
- LOG->Trace( ssprintf("Player ID %i combo = %i", playerID, combo) );
+ LOG->Trace( "Player ID %i combo = %i", playerID, combo );
m_packet.ClearPacket();
m_packet.Write1( NSCGSU );
diff --git a/src/NoteData.cpp b/src/NoteData.cpp
index eac5bc42b4..78880dfbbe 100644
--- a/src/NoteData.cpp
+++ b/src/NoteData.cpp
@@ -9,6 +9,7 @@
#include "RageUtil.h"
#include "RageLog.h"
#include "XmlFile.h"
+#include "GameState.h" // blame radar calculations.
#include "Foreach.h"
#include "RageUtil_AutoPtr.h"
@@ -458,6 +459,31 @@ int NoteData::GetLastRow() const
return iOldestRowFoundSoFar;
}
+bool NoteData::IsTap(const TapNote &tn, const int row) const
+{
+ return (tn.type != TapNote::empty && tn.type != TapNote::mine
+ && tn.type != TapNote::lift && tn.type != TapNote::fake
+ && GAMESTATE->GetProcessedTimingData()->IsJudgableAtRow(row));
+}
+
+bool NoteData::IsMine(const TapNote &tn, const int row) const
+{
+ return (tn.type == TapNote::mine
+ && GAMESTATE->GetProcessedTimingData()->IsJudgableAtRow(row));
+}
+
+bool NoteData::IsLift(const TapNote &tn, const int row) const
+{
+ return (tn.type == TapNote::lift
+ && GAMESTATE->GetProcessedTimingData()->IsJudgableAtRow(row));
+}
+
+bool NoteData::IsFake(const TapNote &tn, const int row) const
+{
+ return (tn.type == TapNote::fake
+ || !GAMESTATE->GetProcessedTimingData()->IsJudgableAtRow(row));
+}
+
int NoteData::GetNumTapNotes( int iStartIndex, int iEndIndex ) const
{
int iNumNotes = 0;
@@ -465,9 +491,7 @@ int NoteData::GetNumTapNotes( int iStartIndex, int iEndIndex ) const
{
FOREACH_NONEMPTY_ROW_IN_TRACK_RANGE( *this, t, r, iStartIndex, iEndIndex )
{
- const TapNote &tn = GetTapNote(t, r);
- if( tn.type != TapNote::empty && tn.type != TapNote::mine
- && tn.type != TapNote::lift && tn.type != TapNote::fake )
+ if (this->IsTap(GetTapNote(t, r), r))
iNumNotes++;
}
}
@@ -485,7 +509,7 @@ int NoteData::GetNumRowsWithTap( int iStartIndex, int iEndIndex ) const
{
int iNumNotes = 0;
FOREACH_NONEMPTY_ROW_ALL_TRACKS_RANGE( *this, r, iStartIndex, iEndIndex )
- if( IsThereATapAtRow(r) )
+ if( IsThereATapAtRow(r) && GAMESTATE->GetProcessedTimingData()->IsJudgableAtRow(r) )
iNumNotes++;
return iNumNotes;
@@ -498,7 +522,7 @@ int NoteData::GetNumMines( int iStartIndex, int iEndIndex ) const
for( int t=0; tIsMine(GetTapNote(t, r), r))
iNumMines++;
}
@@ -509,7 +533,7 @@ int NoteData::GetNumRowsWithTapOrHoldHead( int iStartIndex, int iEndIndex ) cons
{
int iNumNotes = 0;
FOREACH_NONEMPTY_ROW_ALL_TRACKS_RANGE( *this, r, iStartIndex, iEndIndex )
- if( IsThereATapOrHoldHeadAtRow(r) )
+ if( IsThereATapOrHoldHeadAtRow(r) && GAMESTATE->GetProcessedTimingData()->IsJudgableAtRow(r) )
iNumNotes++;
return iNumNotes;
@@ -560,7 +584,8 @@ int NoteData::GetNumRowsWithSimultaneousPresses( int iMinSimultaneousPresses, in
{
if( !RowNeedsAtLeastSimultaneousPresses(iMinSimultaneousPresses,r) )
continue;
-
+ if (!GAMESTATE->GetProcessedTimingData()->IsJudgableAtRow(r))
+ continue;
iNum++;
}
@@ -576,7 +601,10 @@ int NoteData::GetNumRowsWithSimultaneousTaps( int iMinTaps, int iStartIndex, int
for( int t=0; tGetProcessedTimingData()->IsJudgableAtRow(r))
iNumNotesThisIndex++;
}
if( iNumNotesThisIndex >= iMinTaps )
@@ -598,6 +626,8 @@ int NoteData::GetNumHoldNotes( int iStartIndex, int iEndIndex ) const
if( lBegin->second.type != TapNote::hold_head ||
lBegin->second.subType != TapNote::hold_head_hold )
continue;
+ if (!GAMESTATE->GetProcessedTimingData()->IsJudgableAtRow(lBegin->first))
+ continue;
iNumHolds++;
}
}
@@ -616,6 +646,8 @@ int NoteData::GetNumRolls( int iStartIndex, int iEndIndex ) const
if( lBegin->second.type != TapNote::hold_head ||
lBegin->second.subType != TapNote::hold_head_roll )
continue;
+ if (!GAMESTATE->GetProcessedTimingData()->IsJudgableAtRow(lBegin->first))
+ continue;
iNumRolls++;
}
}
@@ -629,7 +661,7 @@ int NoteData::GetNumLifts( int iStartIndex, int iEndIndex ) const
for( int t=0; tIsLift(GetTapNote(t, r), r))
iNumLifts++;
}
@@ -643,13 +675,190 @@ int NoteData::GetNumFakes( int iStartIndex, int iEndIndex ) const
for( int t=0; tIsFake(GetTapNote(t, r), r))
+ iNumFakes++;
}
return iNumFakes;
}
+bool NoteData::IsPlayer1(const int track, const TapNote &tn) const
+{
+ if (this->IsComposite())
+ {
+ return tn.pn == PLAYER_1;
+ }
+ return track < (this->GetNumTracks() / 2);
+}
+
+pair NoteData::GetNumTapNotesTwoPlayer( int iStartIndex, int iEndIndex ) const
+{
+ pair num(0, 0);
+ for( int t=0; tIsTap(tn, r))
+ {
+ if (this->IsPlayer1(t, tn))
+ num.first++;
+ else
+ num.second++;
+ }
+ }
+ }
+ return num;
+}
+
+pair NoteData::GetNumRowsWithSimultaneousTapsTwoPlayer(int minTaps,
+ int startRow,
+ int endRow) const
+{
+ pair num(0, 0);
+ FOREACH_NONEMPTY_ROW_ALL_TRACKS_RANGE( *this, r, startRow, endRow )
+ {
+ pair found(0, 0);
+ for( int t=0; tIsTap(tn, r))
+ {
+ if (this->IsPlayer1(t, tn))
+ found.first++;
+ else
+ found.second++;
+ }
+ }
+ if (found.first >= minTaps)
+ num.first++;
+ if (found.second >= minTaps)
+ num.second++;
+ }
+ return num;
+}
+
+pair NoteData::GetNumJumpsTwoPlayer( int iStartIndex, int iEndIndex ) const
+{
+ return GetNumRowsWithSimultaneousTapsTwoPlayer( 2, iStartIndex, iEndIndex );
+}
+
+pair NoteData::GetNumHandsTwoPlayer( int iStartIndex, int iEndIndex ) const
+{
+ return GetNumRowsWithSimultaneousTapsTwoPlayer( 3, iStartIndex, iEndIndex );
+}
+
+pair NoteData::GetNumQuadsTwoPlayer( int iStartIndex, int iEndIndex ) const
+{
+ return GetNumRowsWithSimultaneousTapsTwoPlayer( 4, iStartIndex, iEndIndex );
+}
+
+pair NoteData::GetNumHoldNotesTwoPlayer( int iStartIndex, int iEndIndex ) const
+{
+ pair num(0, 0);
+ for( int t=0; tsecond.type != TapNote::hold_head ||
+ lBegin->second.subType != TapNote::hold_head_hold )
+ continue;
+ if (!GAMESTATE->GetProcessedTimingData()->IsJudgableAtRow(lBegin->first))
+ continue;
+ if (this->IsPlayer1(t, lBegin->second))
+ num.first++;
+ else
+ num.second++;
+ }
+ }
+ return num;
+}
+
+pair NoteData::GetNumMinesTwoPlayer( int iStartIndex, int iEndIndex ) const
+{
+ pair num(0, 0);
+ for( int t=0; tIsMine(tn, r))
+ {
+ if (this->IsPlayer1(t, tn))
+ num.first++;
+ else
+ num.second++;
+ }
+ }
+ }
+ return num;
+}
+
+pair NoteData::GetNumRollsTwoPlayer( int iStartIndex, int iEndIndex ) const
+{
+ pair num(0, 0);
+ for( int t=0; tsecond.type != TapNote::hold_head ||
+ lBegin->second.subType != TapNote::hold_head_roll )
+ continue;
+ if (!GAMESTATE->GetProcessedTimingData()->IsJudgableAtRow(lBegin->first))
+ continue;
+ if (this->IsPlayer1(t, lBegin->second))
+ num.first++;
+ else
+ num.second++;
+ }
+ }
+ return num;
+}
+
+pair NoteData::GetNumLiftsTwoPlayer( int iStartIndex, int iEndIndex ) const
+{
+ pair num(0, 0);
+ for( int t=0; tIsLift(tn, r))
+ {
+ if (this->IsPlayer1(t, tn))
+ num.first++;
+ else
+ num.second++;
+ }
+ }
+ }
+ return num;
+}
+
+pair NoteData::GetNumFakesTwoPlayer( int iStartIndex, int iEndIndex ) const
+{
+ pair num(0, 0);
+ for( int t=0; tIsFake(tn, r))
+ {
+ if (this->IsPlayer1(t, tn))
+ num.first++;
+ else
+ num.second++;
+ }
+ }
+ }
+ return num;
+}
+
/*
int NoteData::GetNumMinefields( int iStartIndex, int iEndIndex ) const
{
diff --git a/src/NoteData.h b/src/NoteData.h
index 5de742eb30..df8d6a5856 100644
--- a/src/NoteData.h
+++ b/src/NoteData.h
@@ -90,7 +90,46 @@ private:
// There's no point in inserting empty notes into the map.
// Any blank space in the map is defined to be empty.
vector m_TapNotes;
+
+ /**
+ * @brief Determine whether this note is for Player 1 or Player 2.
+ * @param track the track/column the note is in.
+ * @param tn the note in question. Required for routine mode.
+ * @return true if it's for player 1, false for player 2. */
+ bool IsPlayer1(const int track, const TapNote &tn) const;
+
+ /**
+ * @brief Determine if the note in questino should be counted as a tap.
+ * @param tn the note in question.
+ * @param row the row it lives in.
+ * @return true if it's a tap, false otherwise. */
+ bool IsTap(const TapNote &tn, const int row) const;
+
+ /**
+ * @brief Determine if the note in questino should be counted as a mine.
+ * @param tn the note in question.
+ * @param row the row it lives in.
+ * @return true if it's a mine, false otherwise. */
+ bool IsMine(const TapNote &tn, const int row) const;
+
+ /**
+ * @brief Determine if the note in questino should be counted as a lift.
+ * @param tn the note in question.
+ * @param row the row it lives in.
+ * @return true if it's a lift, false otherwise. */
+ bool IsLift(const TapNote &tn, const int row) const;
+
+ /**
+ * @brief Determine if the note in questino should be counted as a fake.
+ * @param tn the note in question.
+ * @param row the row it lives in.
+ * @return true if it's a fake, false otherwise. */
+ bool IsFake(const TapNote &tn, const int row) const;
+ pair GetNumRowsWithSimultaneousTapsTwoPlayer(int minTaps = 2,
+ int startRow = 0,
+ int endRow = MAX_NOTE_ROW) const;
+
public:
void Init();
@@ -130,7 +169,8 @@ public:
* @param iEndRow the ending point.
* @param begin the eventual beginning point of the range.
* @param end the eventual end point of the range. */
- void GetTapNoteRange( int iTrack, int iStartRow, int iEndRow, TrackMap::const_iterator &begin, TrackMap::const_iterator &end ) const;
+ void GetTapNoteRange(int iTrack, int iStartRow, int iEndRow,
+ TrackMap::const_iterator &begin, TrackMap::const_iterator &end ) const;
/**
* @brief Return a constant iterator range for [rowBegin,rowEnd).
* @param iTrack the column to use.
@@ -158,13 +198,17 @@ public:
/* Return an iterator range include iStartRow to iEndRow. Extend the range to include
* hold notes overlapping the boundary. */
- void GetTapNoteRangeInclusive( int iTrack, int iStartRow, int iEndRow, TrackMap::const_iterator &begin, TrackMap::const_iterator &end, bool bIncludeAdjacent=false ) const;
- void GetTapNoteRangeInclusive( int iTrack, int iStartRow, int iEndRow, TrackMap::iterator &begin, TrackMap::iterator &end, bool bIncludeAdjacent=false );
+ void GetTapNoteRangeInclusive(int iTrack, int iStartRow, int iEndRow,
+ TrackMap::const_iterator &begin, TrackMap::const_iterator &end, bool bIncludeAdjacent=false ) const;
+ void GetTapNoteRangeInclusive(int iTrack, int iStartRow, int iEndRow,
+ TrackMap::iterator &begin, TrackMap::iterator &end, bool bIncludeAdjacent=false );
/* Return an iterator range include iStartRow to iEndRow. Shrink the range to exclude
* hold notes overlapping the boundary. */
- void GetTapNoteRangeExclusive( int iTrack, int iStartRow, int iEndRow, TrackMap::const_iterator &begin, TrackMap::const_iterator &end ) const;
- void GetTapNoteRangeExclusive( int iTrack, int iStartRow, int iEndRow, TrackMap::iterator &begin, TrackMap::iterator &end );
+ void GetTapNoteRangeExclusive(int iTrack, int iStartRow, int iEndRow,
+ TrackMap::const_iterator &begin, TrackMap::const_iterator &end ) const;
+ void GetTapNoteRangeExclusive(int iTrack, int iStartRow, int iEndRow,
+ TrackMap::iterator &begin, TrackMap::iterator &end );
/* Returns the row of the first TapNote on the track that has a row greater than rowInOut. */
@@ -175,7 +219,17 @@ public:
void MoveTapNoteTrack( int dest, int src );
void SetTapNote( int track, int row, const TapNote& tn );
- void AddHoldNote( int iTrack, int iStartRow, int iEndRow, TapNote tn ); // add note hold note merging overlapping HoldNotes and destroying TapNotes underneath
+ /**
+ * @brief Add a hold note, merging other overlapping holds and destroying
+ * tap notes underneath.
+ * @param iTrack the column to work with.
+ * @param iStartRow the starting row.
+ * @param iEndRow the ending row.
+ * @param tn the tap note. */
+ void AddHoldNote(int iTrack,
+ int iStartRow,
+ int iEndRow,
+ TapNote tn );
void ClearRangeForTrack( int rowBegin, int rowEnd, int iTrack );
void ClearRange( int rowBegin, int rowEnd );
@@ -222,7 +276,12 @@ public:
// Count rows that contain iMinTaps or more taps.
int GetNumRowsWithSimultaneousTaps( int iMinTaps, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW ) const;
- int GetNumJumps( int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW ) const { return GetNumRowsWithSimultaneousTaps( 2, iStartIndex, iEndIndex ); }
+ int GetNumJumps( int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW ) const
+ {
+ return GetNumRowsWithSimultaneousTaps( 2, iStartIndex, iEndIndex );
+ }
+
+
// This row needs at least iMinSimultaneousPresses either tapped or held.
bool RowNeedsAtLeastSimultaneousPresses( int iMinSimultaneousPresses, int row ) const;
@@ -230,15 +289,51 @@ public:
// Count rows that need iMinSimultaneousPresses either tapped or held.
int GetNumRowsWithSimultaneousPresses( int iMinSimultaneousPresses, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW ) const;
- int GetNumHands( int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW ) const { return GetNumRowsWithSimultaneousPresses( 3, iStartIndex, iEndIndex ); }
- int GetNumQuads( int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW ) const { return GetNumRowsWithSimultaneousPresses( 4, iStartIndex, iEndIndex ); }
+ int GetNumHands( int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW ) const
+ {
+ return GetNumRowsWithSimultaneousPresses( 3, iStartIndex, iEndIndex );
+ }
+ int GetNumQuads( int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW ) const
+ {
+ return GetNumRowsWithSimultaneousPresses( 4, iStartIndex, iEndIndex );
+ }
// and the other notetypes
int GetNumLifts( int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW ) const;
int GetNumFakes( int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW ) const;
+ // the couple/routine style variants of the above.
+ pair GetNumTapNotesTwoPlayer(int startRow = 0,
+ int endRow = MAX_NOTE_ROW) const;
+
+ pair GetNumJumpsTwoPlayer(int startRow = 0,
+ int endRow = MAX_NOTE_ROW) const;
+
+ pair GetNumHandsTwoPlayer(int startRow = 0,
+ int endRow = MAX_NOTE_ROW) const;
+
+ pair GetNumQuadsTwoPlayer(int startRow = 0,
+ int endRow = MAX_NOTE_ROW) const;
+
+ pair GetNumHoldNotesTwoPlayer(int startRow = 0,
+ int endRow = MAX_NOTE_ROW) const;
+
+ pair GetNumMinesTwoPlayer(int startRow = 0,
+ int endRow = MAX_NOTE_ROW) const;
+
+ pair GetNumRollsTwoPlayer(int startRow = 0,
+ int endRow = MAX_NOTE_ROW) const;
+
+ pair GetNumLiftsTwoPlayer(int startRow = 0,
+ int endRow = MAX_NOTE_ROW) const;
+
+ pair GetNumFakesTwoPlayer(int startRow = 0,
+ int endRow = MAX_NOTE_ROW) const;
+
// Transformations
- void LoadTransformed( const NoteData& original, int iNewNumTracks, const int iOriginalTrackToTakeFrom[] ); // -1 for iOriginalTracksToTakeFrom means no track
+ void LoadTransformed(const NoteData& original,
+ int iNewNumTracks,
+ const int iOriginalTrackToTakeFrom[] ); // -1 for iOriginalTracksToTakeFrom means no track
// XML
XNode* CreateNode() const;
diff --git a/src/NoteDataUtil.cpp b/src/NoteDataUtil.cpp
index 022691c700..eff74fb0ae 100644
--- a/src/NoteDataUtil.cpp
+++ b/src/NoteDataUtil.cpp
@@ -778,13 +778,6 @@ void NoteDataUtil::LoadTransformedLightsFromTwo( const NoteData &marquee, const
NoteDataUtil::RemoveMines( out );
}
-struct RadarStats {
- int taps;
- int jumps;
- int hands;
- int quads;
-};
-
RadarStats CalculateRadarStatsFast( const NoteData &in, RadarStats &out )
{
out.taps = 0;
@@ -799,12 +792,18 @@ RadarStats CalculateRadarStatsFast( const NoteData &in, RadarStats &out )
{
FOREACH_NONEMPTY_ROW_IN_TRACK_RANGE( in, t, r, 0, MAX_NOTE_ROW )
{
+ /* This function deals strictly with taps, jumps, hands, and quads.
+ * As such, all rows in here have to be judgable. */
+ if (!GAMESTATE->GetProcessedTimingData()->IsJudgableAtRow(r))
+ continue;
+
const TapNote &tn = in.GetTapNote(t, r);
switch( tn.type )
{
case TapNote::mine:
case TapNote::empty:
case TapNote::fake:
+ case TapNote::autoKeysound:
continue; // skip these types - they don't count
}
@@ -886,7 +885,7 @@ void NoteDataUtil::CalculateRadarValues( const NoteData &in, float fSongSeconds,
case RadarCategory_Jumps: out[rc] = (float) stats.jumps; break;
case RadarCategory_Holds: out[rc] = (float) in.GetNumHoldNotes(); break;
case RadarCategory_Mines: out[rc] = (float) in.GetNumMines(); break;
- case RadarCategory_Hands: out[rc] = (float) stats.hands; break;
+ case RadarCategory_Hands: out[rc] = (float) in.GetNumHands(); break;
case RadarCategory_Rolls: out[rc] = (float) in.GetNumRolls(); break;
case RadarCategory_Lifts: out[rc] = (float) in.GetNumLifts(); break;
case RadarCategory_Fakes: out[rc] = (float) in.GetNumFakes(); break;
diff --git a/src/NoteDataUtil.h b/src/NoteDataUtil.h
index f92043c9ff..167d2955f7 100644
--- a/src/NoteDataUtil.h
+++ b/src/NoteDataUtil.h
@@ -10,6 +10,24 @@ class NoteData;
class Song;
struct AttackArray;
+/** @brief A limited selection of the RadarValues. */
+struct RadarStats
+{
+ /** @brief The number of tap notes in the song. */
+ int taps;
+ /** @brief The number of jumps in the song. */
+ int jumps;
+ /** @brief The number of 3 panel hits in the song. */
+ int hands;
+ /** @brief The number of 4 panel hits in the song. */
+ int quads;
+};
+
+void PlaceAutoKeysound( NoteData &out, int row, TapNote akTap );
+int FindLongestOverlappingHoldNoteForAnyTrack( const NoteData &in, int iRow );
+void LightTransformHelper( const NoteData &in, NoteData &out, const vector &aiTracks );
+RadarStats CalculateRadarStatsFast( const NoteData &in, RadarStats &out );
+
/**
* @brief Utility functions that deal with NoteData.
*
diff --git a/src/NoteDataWithScoring.cpp b/src/NoteDataWithScoring.cpp
index 06d1ebc88f..7a4113b213 100644
--- a/src/NoteDataWithScoring.cpp
+++ b/src/NoteDataWithScoring.cpp
@@ -349,7 +349,7 @@ void NoteDataWithScoring::GetActualRadarValues( const NoteData &in, const Player
case RadarCategory_Hands: out[rc] = (float) GetSuccessfulHands( in ); break;
case RadarCategory_Rolls: out[rc] = (float) GetNumHoldNotesWithScore( in, TapNote::hold_head_roll, HNS_Held ); break;
case RadarCategory_Lifts: out[rc] = (float) GetSuccessfulLifts( in, TNS_W4 ); break;
- case RadarCategory_Fakes: out[rc] = (float) in.GetNumLifts(); break;
+ case RadarCategory_Fakes: out[rc] = (float) in.GetNumFakes(); break;
//case RadarCategory_Minefields: out[rc] = (float) GetNumMinefieldsWithScore( in, TapNote::hold_head_mine, HNS_Held ); break;
DEFAULT_FAIL( rc );
}
diff --git a/src/NoteDisplay.cpp b/src/NoteDisplay.cpp
index a5c530bd73..d71b845198 100644
--- a/src/NoteDisplay.cpp
+++ b/src/NoteDisplay.cpp
@@ -46,6 +46,8 @@ static const NoteType MAX_DISPLAY_NOTE_TYPE = (NoteType)7;
struct NoteMetricCache_t
{
bool m_bDrawHoldHeadForTapsOnSameRow;
+ bool m_bDrawRollHeadForTapsOnSameRow;
+ bool m_bTapHoldRollOnRowMeansHold;
float m_fAnimationLength[NUM_NotePart];
bool m_bAnimationIsVivid[NUM_NotePart];
RageVector2 m_fAdditionTextureCoordOffset[NUM_NotePart];
@@ -69,6 +71,8 @@ struct NoteMetricCache_t
void NoteMetricCache_t::Load( const RString &sButton )
{
m_bDrawHoldHeadForTapsOnSameRow = NOTESKIN->GetMetricB(sButton,"DrawHoldHeadForTapsOnSameRow");
+ m_bDrawRollHeadForTapsOnSameRow = NOTESKIN->GetMetricB(sButton,"DrawRollHeadForTapsOnSameRow");
+ m_bTapHoldRollOnRowMeansHold = NOTESKIN->GetMetricB(sButton,"TapHoldRollOnRowMeansHold");
FOREACH_NotePart( p )
{
const RString &s = NotePartToString(p);
@@ -271,6 +275,11 @@ bool NoteDisplay::DrawHoldHeadForTapsOnSameRow() const
return cache->m_bDrawHoldHeadForTapsOnSameRow;
}
+bool NoteDisplay::DrawRollHeadForTapsOnSameRow() const
+{
+ return cache->m_bDrawRollHeadForTapsOnSameRow;
+}
+
void NoteDisplay::Update( float fDeltaTime )
{
/* This function is static: it's called once per game loop, not once per
@@ -683,11 +692,18 @@ void NoteDisplay::DrawActor( const TapNote& tn, Actor* pActor, NotePart part, in
const float fGlow = ArrowEffects::GetGlow( m_pPlayerState, iCol, fYOffset, fPercentFadeToFail, m_fYReverseOffsetPixels, fDrawDistanceBeforeTargetsPixels, fFadeInPercentOfDrawFar );
const RageColor diffuse = RageColor(fColorScale,fColorScale,fColorScale,fAlpha);
const RageColor glow = RageColor(1,1,1,fGlow);
- float fRotationX = 0, fRotationY = 0, fRotationZ = 0;
+ float fRotationX = 0, fRotationZ = 0;
+ const float fRotationY = ArrowEffects::GetRotationY( m_pPlayerState, fYOffset );
+
+ bool bIsHoldHead = tn.type == tn.hold_head;
+ bool bIsHoldCap = bIsHoldHead || tn.type == tn.hold_tail;
+
+ fRotationZ = ArrowEffects::GetRotationZ( m_pPlayerState, fBeat, bIsHoldHead );
+ if( !bIsHoldCap )
+ {
+ fRotationX = ArrowEffects::GetRotationX( m_pPlayerState, fYOffset );
+ }
- fRotationX = ArrowEffects::GetRotationX( m_pPlayerState, fYOffset );
- fRotationY = ArrowEffects::GetRotationY( m_pPlayerState, fYOffset );
- fRotationZ = ArrowEffects::GetRotationZ( m_pPlayerState, fBeat, tn.type == tn.hold_head );
if( tn.type != tn.hold_head )
fColorScale *= ArrowEffects::GetBrightness( m_pPlayerState, fBeat );
@@ -718,7 +734,13 @@ void NoteDisplay::DrawActor( const TapNote& tn, Actor* pActor, NotePart part, in
}
}
-void NoteDisplay::DrawTap( const TapNote& tn, int iCol, float fBeat, bool bOnSameRowAsHoldStart, bool bIsAddition, float fPercentFadeToFail, float fReverseOffsetPixels, float fDrawDistanceAfterTargetsPixels, float fDrawDistanceBeforeTargetsPixels, float fFadeInPercentOfDrawFar )
+void NoteDisplay::DrawTap(const TapNote& tn, int iCol, float fBeat,
+ bool bOnSameRowAsHoldStart, bool bOnSameRowAsRollStart,
+ bool bIsAddition, float fPercentFadeToFail,
+ float fReverseOffsetPixels,
+ float fDrawDistanceAfterTargetsPixels,
+ float fDrawDistanceBeforeTargetsPixels,
+ float fFadeInPercentOfDrawFar)
{
Actor* pActor = NULL;
NotePart part = NotePart_Tap;
@@ -738,10 +760,40 @@ void NoteDisplay::DrawTap( const TapNote& tn, int iCol, float fBeat, bool bOnSam
pActor = GetTapActor( m_TapFake, NotePart_Fake, fBeat );
part = NotePart_Fake;
}
+ // TODO: Simplify all of the below.
+ else if (bOnSameRowAsHoldStart && bOnSameRowAsRollStart)
+ {
+ if (cache->m_bDrawHoldHeadForTapsOnSameRow && cache->m_bDrawRollHeadForTapsOnSameRow)
+ {
+ if (cache->m_bTapHoldRollOnRowMeansHold) // another new metric?
+ {
+ pActor = GetHoldActor( m_HoldHead, NotePart_HoldHead, fBeat, false, false );
+ }
+ else
+ {
+ pActor = GetHoldActor( m_HoldHead, NotePart_HoldHead, fBeat, true, false );
+ }
+ }
+ else if (cache->m_bDrawHoldHeadForTapsOnSameRow)
+ {
+ pActor = GetHoldActor( m_HoldHead, NotePart_HoldHead, fBeat, false, false );
+ }
+ else if (cache->m_bDrawRollHeadForTapsOnSameRow)
+ {
+ pActor = GetHoldActor( m_HoldHead, NotePart_HoldHead, fBeat, true, false );
+ }
+ }
+
else if( bOnSameRowAsHoldStart && cache->m_bDrawHoldHeadForTapsOnSameRow )
{
pActor = GetHoldActor( m_HoldHead, NotePart_HoldHead, fBeat, false, false );
}
+
+ else if( bOnSameRowAsRollStart && cache->m_bDrawRollHeadForTapsOnSameRow )
+ {
+ pActor = GetHoldActor( m_HoldHead, NotePart_HoldHead, fBeat, true, false );
+ }
+
else
{
pActor = GetTapActor( m_TapNote, NotePart_Tap, fBeat );
diff --git a/src/NoteDisplay.h b/src/NoteDisplay.h
index 8f79041e17..a7e45f3f62 100644
--- a/src/NoteDisplay.h
+++ b/src/NoteDisplay.h
@@ -80,13 +80,33 @@ public:
static void Update( float fDeltaTime );
- void DrawTap( const TapNote& tn, int iCol, float fBeat, bool bOnSameRowAsHoldStart, bool bIsAddition,
- float fPercentFadeToFail, float fReverseOffsetPixels, float fDrawDistanceAfterTargetsPixels, float fDrawDistanceBeforeTargetsPixels, float fFadeInPercentOfDrawFar );
+ /**
+ * @brief Draw the TapNote onto the NoteField.
+ * @param tn the TapNote in question.
+ * @param iCol the column.
+ * @param float fBeat the beat to draw them on.
+ * @param bOnSameRowAsHoldStart a flag to see if a hold is on the same beat.
+ * @param bOnSameRowAsRollStart a flag to see if a roll is on the same beat.
+ * @param bIsAddition a flag to see if this note was added via mods.
+ * @param fPercentFadeToFail at what point do the notes fade on failure?
+ * @param fReverseOffsetPixels How are the notes adjusted on Reverse?
+ * @param fDrawDistanceAfterTargetsPixels how much to draw after the receptors.
+ * @param fDrawDistanceBeforeTargetsPixels how much ot draw before the receptors.
+ * @param fFadeInPercentOfDrawFar when to start fading in. */
+ void DrawTap(const TapNote& tn, int iCol, float fBeat,
+ bool bOnSameRowAsHoldStart, bool bOnSameRowAsRollBeat,
+ bool bIsAddition, float fPercentFadeToFail,
+ float fReverseOffsetPixels,
+ float fDrawDistanceAfterTargetsPixels,
+ float fDrawDistanceBeforeTargetsPixels,
+ float fFadeInPercentOfDrawFar );
void DrawHold( const TapNote& tn, int iCol, int iRow, bool bIsBeingHeld, const HoldNoteResult &Result,
bool bIsAddition, float fPercentFadeToFail, float fReverseOffsetPixels, float fDrawDistanceAfterTargetsPixels, float fDrawDistanceBeforeTargetsPixels,
float fDrawDistanceBeforeTargetsPixels2, float fFadeInPercentOfDrawFar );
bool DrawHoldHeadForTapsOnSameRow() const;
+
+ bool DrawRollHeadForTapsOnSameRow() const;
private:
void SetActiveFrame( float fNoteBeat, Actor &actorToSet, float fAnimationLength, bool bVivid );
diff --git a/src/NoteField.cpp b/src/NoteField.cpp
index 60b0d9b6be..e45ab8325a 100644
--- a/src/NoteField.cpp
+++ b/src/NoteField.cpp
@@ -20,6 +20,9 @@
#include "Course.h"
#include "NoteData.h"
+float FindFirstDisplayedBeat( const PlayerState* pPlayerState, int iDrawDistanceAfterTargetsPixels );
+float FindLastDisplayedBeat( const PlayerState* pPlayerState, int iDrawDistanceBeforeTargetsPixels );
+
static ThemeMetric SHOW_BOARD( "NoteField", "ShowBoard" );
static ThemeMetric SHOW_BEAT_BARS( "NoteField", "ShowBeatBars" );
static ThemeMetric FADE_BEFORE_TARGETS_PERCENT( "NoteField", "FadeBeforeTargetsPercent" );
@@ -208,10 +211,10 @@ void NoteField::Load(
//int i1 = m_pNoteData->GetNumTracks();
//int i2 = GAMESTATE->GetCurrentStyle()->m_iColsPerPlayer;
-
- ASSERT_M( m_pNoteData->GetNumTracks() == GAMESTATE->GetCurrentStyle()->m_iColsPerPlayer,
- ssprintf("NumTracks %d = ColsPerPlayer %d",m_pNoteData->GetNumTracks(), GAMESTATE->GetCurrentStyle()->m_iColsPerPlayer) );
-
+ ASSERT_M(m_pNoteData->GetNumTracks() == GAMESTATE->GetCurrentStyle()->m_iColsPerPlayer,
+ ssprintf("NumTracks %d = ColsPerPlayer %d",m_pNoteData->GetNumTracks(),
+ GAMESTATE->GetCurrentStyle()->m_iColsPerPlayer));
+
// The NoteSkin may have changed at the beginning of a new course song.
RString sNoteSkinLower = m_pPlayerState->m_PlayerOptions.GetCurrent().m_sNoteSkin;
@@ -303,7 +306,7 @@ void NoteField::Update( float fDeltaTime )
// TODO: Remove use of PlayerNumber.
PlayerNumber pn = m_pPlayerState->m_PlayerNumber;
- if( pn == GAMESTATE->m_MasterPlayerNumber )
+ if( pn == GAMESTATE->GetMasterPlayerNumber() )
NoteDisplay::Update( fDeltaTime );
}
@@ -574,7 +577,7 @@ void NoteField::DrawTickcountText( const float fBeat, int iTicks )
m_textMeasureNumber.Draw();
}
-void NoteField::DrawComboText( const float fBeat, int iCombo )
+void NoteField::DrawComboText( const float fBeat, int iCombo, int iMiss )
{
const float fYOffset = ArrowEffects::GetYOffset( m_pPlayerState, 0, fBeat );
const float fYPos = ArrowEffects::GetYPos( m_pPlayerState, 0, fYOffset, m_fYReverseOffsetPixels );
@@ -586,7 +589,7 @@ void NoteField::DrawComboText( const float fBeat, int iCombo )
m_textMeasureNumber.SetHorizAlign( COMBO_IS_LEFT_SIDE ? align_right : align_left );
m_textMeasureNumber.SetDiffuse( COMBO_COLOR );
m_textMeasureNumber.SetGlow( RageColor(1,1,1,RageFastCos(RageTimer::GetTimeSinceStartFast()*2)/2+0.5f) );
- m_textMeasureNumber.SetText( ssprintf("%d", iCombo) );
+ m_textMeasureNumber.SetText( ssprintf("%d/%d", iCombo, iMiss) );
m_textMeasureNumber.SetXY( (COMBO_IS_LEFT_SIDE ? -xBase - xOffset : xBase + xOffset), fYPos );
m_textMeasureNumber.Draw();
}
@@ -814,7 +817,7 @@ void NoteField::DrawPrimitives()
float fDrawScale = 1;
fDrawScale *= 1 + 0.5f * fabsf( current_po.m_fPerspectiveTilt );
- fDrawScale *= 1 + fabsf( current_po.m_fEffects[PlayerOptions::EFFECT_TINY] );
+ fDrawScale *= 1 + fabsf( current_po.m_fEffects[PlayerOptions::EFFECT_MINI] );
iDrawDistanceAfterTargetsPixels = (int)(iDrawDistanceAfterTargetsPixels * fDrawScale);
iDrawDistanceBeforeTargetsPixels = (int)(iDrawDistanceBeforeTargetsPixels * fDrawScale);
@@ -846,27 +849,26 @@ void NoteField::DrawPrimitives()
}
const TimingData *pTiming = GetDisplayedTiming(m_pPlayerState);
-
+ const vector *segs = pTiming->allTimingSegments;
+ unsigned i = 0;
// Draw beat bars
if( ( GAMESTATE->IsEditing() || SHOW_BEAT_BARS ) && pTiming != NULL )
{
- const TimingData &timing = *pTiming;
- const vector &vTimeSignatureSegments = timing.m_vTimeSignatureSegments;
+ const vector &tSigs = segs[SEGMENT_TIME_SIG];
int iMeasureIndex = 0;
- FOREACH_CONST( TimeSignatureSegment, vTimeSignatureSegments, iter )
+ for (i = 0; i < tSigs.size(); i++)
{
- vector::const_iterator next = iter;
- next++;
- int iSegmentEndRow = (next == vTimeSignatureSegments.end()) ? iLastRowToDraw : next->GetRow();
-
+ TimeSignatureSegment *ts = static_cast(tSigs[i]);
+ int iSegmentEndRow = (i + 1 == tSigs.size()) ? iLastRowToDraw : tSigs[i+1]->GetRow();
+
// beat bars every 16th note
- int iDrawBeatBarsEveryRows = BeatToNoteRow( ((float)iter->GetDen()) / 4 ) / 4;
+ int iDrawBeatBarsEveryRows = BeatToNoteRow( ((float)ts->GetDen()) / 4 ) / 4;
// In 4/4, every 16th beat bar is a measure
- int iMeasureBarFrequency = iter->GetNum() * 4;
+ int iMeasureBarFrequency = ts->GetNum() * 4;
int iBeatBarsDrawn = 0;
- for( int i=iter->GetRow(); i < iSegmentEndRow; i += iDrawBeatBarsEveryRows )
+ for( int j=ts->GetRow(); j < iSegmentEndRow; j += iDrawBeatBarsEveryRows )
{
bool bMeasureBar = iBeatBarsDrawn % iMeasureBarFrequency == 0;
BeatBarType type = quarter_beat;
@@ -876,7 +878,7 @@ void NoteField::DrawPrimitives()
type = beat;
else if( iBeatBarsDrawn % 2 == 0 )
type = half_beat;
- float fBeat = NoteRowToBeat(i);
+ float fBeat = NoteRowToBeat(j);
if( IS_ON_SCREEN(fBeat) )
{
@@ -899,8 +901,9 @@ void NoteField::DrawPrimitives()
// Scroll text
if( GAMESTATE->m_bIsUsingStepTiming )
{
- FOREACH_CONST( ScrollSegment, timing.m_ScrollSegments, seg )
+ for (i = 0; i < segs[SEGMENT_SCROLL].size(); i++)
{
+ ScrollSegment *seg = static_cast(segs[SEGMENT_SCROLL][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{
float fBeat = seg->GetBeat();
@@ -911,8 +914,9 @@ void NoteField::DrawPrimitives()
}
// BPM text
- FOREACH_CONST( BPMSegment, timing.m_BPMSegments, seg )
+ for (i = 0; i < segs[SEGMENT_BPM].size(); i++)
{
+ BPMSegment *seg = static_cast(segs[SEGMENT_BPM][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{
float fBeat = seg->GetBeat();
@@ -922,8 +926,9 @@ void NoteField::DrawPrimitives()
}
// Freeze text
- FOREACH_CONST( StopSegment, timing.m_StopSegments, seg )
+ for (i = 0; i < segs[SEGMENT_STOP_DELAY].size(); i++)
{
+ StopSegment *seg = static_cast(segs[SEGMENT_STOP_DELAY][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{
float fBeat = seg->GetBeat();
@@ -933,8 +938,9 @@ void NoteField::DrawPrimitives()
}
// Warp text
- FOREACH_CONST( WarpSegment, timing.m_WarpSegments, seg )
+ for (i = 0; i < segs[SEGMENT_WARP].size(); i++)
{
+ WarpSegment *seg = static_cast(segs[SEGMENT_WARP][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{
float fBeat = seg->GetBeat();
@@ -945,8 +951,9 @@ void NoteField::DrawPrimitives()
// Time Signature text
- FOREACH_CONST( TimeSignatureSegment, timing.m_vTimeSignatureSegments, seg )
+ for (i = 0; i < segs[SEGMENT_TIME_SIG].size(); i++)
{
+ TimeSignatureSegment *seg = static_cast(segs[SEGMENT_TIME_SIG][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{
float fBeat = seg->GetBeat();
@@ -958,8 +965,9 @@ void NoteField::DrawPrimitives()
if( GAMESTATE->m_bIsUsingStepTiming )
{
// Tickcount text
- FOREACH_CONST( TickcountSegment, timing.m_TickcountSegments, seg )
+ for (i = 0; i < segs[SEGMENT_TICKCOUNT].size(); i++)
{
+ TickcountSegment *seg = static_cast(segs[SEGMENT_TICKCOUNT][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{
float fBeat = seg->GetBeat();
@@ -972,20 +980,22 @@ void NoteField::DrawPrimitives()
if( GAMESTATE->m_bIsUsingStepTiming )
{
// Combo text
- FOREACH_CONST( ComboSegment, timing.m_ComboSegments, seg )
+ for (i = 0; i < segs[SEGMENT_COMBO].size(); i++)
{
+ ComboSegment *seg = static_cast(segs[SEGMENT_COMBO][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{
float fBeat = seg->GetBeat();
if( IS_ON_SCREEN(fBeat) )
- DrawComboText( fBeat, seg->GetCombo() );
+ DrawComboText( fBeat, seg->GetCombo(), seg->GetMissCombo() );
}
}
}
// Label text
- FOREACH_CONST( LabelSegment, timing.m_LabelSegments, seg )
+ for (i = 0; i < segs[SEGMENT_LABEL].size(); i++)
{
+ LabelSegment *seg = static_cast(segs[SEGMENT_LABEL][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{
float fBeat = seg->GetBeat();
@@ -996,8 +1006,10 @@ void NoteField::DrawPrimitives()
if( GAMESTATE->m_bIsUsingStepTiming )
{
- FOREACH_CONST( SpeedSegment, timing.m_SpeedSegments, seg )
+ // Speed text
+ for (i = 0; i < segs[SEGMENT_SPEED].size(); i++)
{
+ SpeedSegment *seg = static_cast(segs[SEGMENT_SPEED][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{
float fBeat = seg->GetBeat();
@@ -1008,11 +1020,12 @@ void NoteField::DrawPrimitives()
}
}
- // Speed text
+ // Fake text
if( GAMESTATE->m_bIsUsingStepTiming )
{
- FOREACH_CONST( FakeSegment, timing.m_FakeSegments, seg )
+ for (i = 0; i < segs[SEGMENT_FAKE].size(); i++)
{
+ FakeSegment *seg = static_cast(segs[SEGMENT_FAKE][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{
float fBeat = seg->GetBeat();
@@ -1042,6 +1055,22 @@ void NoteField::DrawPrimitives()
}
}
}
+ else
+ {
+ AttackArray &attacks = GAMESTATE->m_bIsUsingStepTiming ?
+ GAMESTATE->m_pCurSteps[PLAYER_1]->m_Attacks :
+ GAMESTATE->m_pCurSong->m_Attacks;
+ FOREACH_CONST(Attack, attacks, a)
+ {
+ float fBeat = timing.GetBeatFromElapsedTime(a->fStartSecond);
+ if (BeatToNoteRow(fBeat) >= iFirstRowToDraw &&
+ BeatToNoteRow(fBeat) <= iLastRowToDraw &&
+ IS_ON_SCREEN(fBeat))
+ {
+ this->DrawAttackText(fBeat, *a);
+ }
+ }
+ }
if( !GAMESTATE->m_bIsUsingStepTiming )
{
@@ -1055,55 +1084,55 @@ void NoteField::DrawPrimitives()
case EditMode_Full:
{
vector::iterator iter[NUM_BackgroundLayer];
- FOREACH_BackgroundLayer( i )
- iter[i] = GAMESTATE->m_pCurSong->GetBackgroundChanges(i).begin();
+ FOREACH_BackgroundLayer( j )
+ iter[j] = GAMESTATE->m_pCurSong->GetBackgroundChanges(j).begin();
while( 1 )
{
float fLowestBeat = FLT_MAX;
vector viLowestIndex;
- FOREACH_BackgroundLayer( i )
+ FOREACH_BackgroundLayer( j )
{
- if( iter[i] == GAMESTATE->m_pCurSong->GetBackgroundChanges(i).end() )
+ if( iter[j] == GAMESTATE->m_pCurSong->GetBackgroundChanges(j).end() )
continue;
- float fBeat = iter[i]->m_fStartBeat;
+ float fBeat = iter[j]->m_fStartBeat;
if( fBeat < fLowestBeat )
{
fLowestBeat = fBeat;
viLowestIndex.clear();
- viLowestIndex.push_back( i );
+ viLowestIndex.push_back( j );
}
else if( fBeat == fLowestBeat )
{
- viLowestIndex.push_back( i );
+ viLowestIndex.push_back( j );
}
}
if( viLowestIndex.empty() )
{
- FOREACH_BackgroundLayer( i )
- ASSERT( iter[i] == GAMESTATE->m_pCurSong->GetBackgroundChanges(i).end() );
+ FOREACH_BackgroundLayer( j )
+ ASSERT( iter[j] == GAMESTATE->m_pCurSong->GetBackgroundChanges(j).end() );
break;
}
if( IS_ON_SCREEN(fLowestBeat) )
{
vector vsBGChanges;
- FOREACH_CONST( BackgroundLayer, viLowestIndex, i )
+ FOREACH_CONST( BackgroundLayer, viLowestIndex, bl )
{
- ASSERT( iter[*i] != GAMESTATE->m_pCurSong->GetBackgroundChanges(*i).end() );
- const BackgroundChange& change = *iter[*i];
+ ASSERT( iter[*bl] != GAMESTATE->m_pCurSong->GetBackgroundChanges(*bl).end() );
+ const BackgroundChange& change = *iter[*bl];
RString s = change.GetTextDescription();
- if( *i!=0 )
- s = ssprintf("%d: ",*i) + s;
+ if( *bl!=0 )
+ s = ssprintf("%d: ",*bl) + s;
vsBGChanges.push_back( s );
}
DrawBGChangeText( fLowestBeat, join("\n",vsBGChanges) );
}
- FOREACH_CONST( BackgroundLayer, viLowestIndex, i )
- iter[*i]++;
+ FOREACH_CONST( BackgroundLayer, viLowestIndex, bl )
+ iter[*bl]++;
}
}
break;
@@ -1143,11 +1172,13 @@ void NoteField::DrawPrimitives()
float fSelectedRangeGlow = SCALE( RageFastCos(RageTimer::GetTimeSinceStartFast()*2), -1, 1, 0.1f, 0.3f );
const Style* pStyle = GAMESTATE->GetCurrentStyle();
- ASSERT( GAMESTATE->GetCurrentStyle()->m_iColsPerPlayer == m_pNoteData->GetNumTracks() );
+ ASSERT_M(m_pNoteData->GetNumTracks() == GAMESTATE->GetCurrentStyle()->m_iColsPerPlayer,
+ ssprintf("NumTracks %d = ColsPerPlayer %d",m_pNoteData->GetNumTracks(),
+ GAMESTATE->GetCurrentStyle()->m_iColsPerPlayer));
- for( int i=0; iGetNumTracks(); i++ ) // for each arrow column
+ for( int j=0; jGetNumTracks(); j++ ) // for each arrow column
{
- const int c = pStyle->m_iColumnDrawOrder[i];
+ const int c = pStyle->m_iColumnDrawOrder[j];
bool bAnyUpcomingInThisCol = false;
@@ -1158,7 +1189,7 @@ void NoteField::DrawPrimitives()
for( ; begin != end; ++begin )
{
- const TapNote &tn = begin->second; //m_pNoteData->GetTapNote(c, i);
+ const TapNote &tn = begin->second; //m_pNoteData->GetTapNote(c, j);
if( tn.type != TapNote::hold_head )
continue; // skip
@@ -1257,13 +1288,31 @@ void NoteField::DrawPrimitives()
{
for( int c2=0; c2GetNumTracks(); c2++ )
{
- if( m_pNoteData->GetTapNote(c2, q).type == TapNote::hold_head)
+ const TapNote &tmp = m_pNoteData->GetTapNote(c2, q);
+ if(tmp.type == TapNote::hold_head &&
+ tmp.subType == TapNote::hold_head_hold)
{
bHoldNoteBeginsOnThisBeat = true;
break;
}
}
}
+
+ // do the same for a roll.
+ bool bRollNoteBeginsOnThisBeat = false;
+ if (m_pCurDisplay->display[c].DrawRollHeadForTapsOnSameRow() )
+ {
+ for( int c2=0; c2GetNumTracks(); c2++ )
+ {
+ const TapNote &tmp = m_pNoteData->GetTapNote(c2, q);
+ if(tmp.type == TapNote::hold_head &&
+ tmp.subType == TapNote::hold_head_roll)
+ {
+ bRollNoteBeginsOnThisBeat = true;
+ break;
+ }
+ }
+ }
bool bIsInSelectionRange = false;
if( m_iBeginMarker!=-1 && m_iEndMarker!=-1 )
@@ -1273,7 +1322,8 @@ void NoteField::DrawPrimitives()
bool bIsHopoPossible = (tn.bHopoPossible);
bool bUseAdditionColoring = bIsAddition || bIsHopoPossible;
NoteDisplayCols *displayCols = tn.pn == PLAYER_INVALID ? m_pCurDisplay : m_pDisplays[tn.pn];
- displayCols->display[c].DrawTap( tn, c, NoteRowToVisibleBeat(m_pPlayerState, q), bHoldNoteBeginsOnThisBeat,
+ displayCols->display[c].DrawTap(tn, c, NoteRowToVisibleBeat(m_pPlayerState, q),
+ bHoldNoteBeginsOnThisBeat, bRollNoteBeginsOnThisBeat,
bUseAdditionColoring, bIsInSelectionRange ? fSelectedRangeGlow : m_fPercentFadeToFail,
m_fYReverseOffsetPixels, iDrawDistanceAfterTargetsPixels, iDrawDistanceBeforeTargetsPixels,
FADE_BEFORE_TARGETS_PERCENT );
diff --git a/src/NoteField.h b/src/NoteField.h
index 3357eff284..2deb044350 100644
--- a/src/NoteField.h
+++ b/src/NoteField.h
@@ -62,7 +62,7 @@ protected:
void DrawWarpText( const float fBeat, const float fNewBeat );
void DrawTimeSignatureText( const float fBeat, int iNumerator, int iDenominator );
void DrawTickcountText( const float fBeat, int iTicks );
- void DrawComboText( const float fBeat, int iCombo );
+ void DrawComboText( const float fBeat, int iCombo, int iMiss );
void DrawLabelText( const float fBeat, RString sLabel );
void DrawSpeedText( const float fBeat, float fPercent, float fWait, unsigned short usMode );
void DrawScrollText( const float fBeat, float fPercent );
diff --git a/src/NoteSkinManager.cpp b/src/NoteSkinManager.cpp
index d56062e0df..562629346f 100644
--- a/src/NoteSkinManager.cpp
+++ b/src/NoteSkinManager.cpp
@@ -200,7 +200,7 @@ bool NoteSkinManager::DoesNoteSkinExist( const RString &sSkinName )
vector asSkinNames;
GetAllNoteSkinNamesForGame( GAMESTATE->m_pCurGame, asSkinNames );
for( unsigned i=0; i TapNote::fake )
{
- LOG->Trace(ssprintf("Invalid tap note type %d (most likely) due to random vanish issues. Assume it doesn't need judging.", type_ ) );
+ LOG->Trace("Invalid tap note type %d (most likely) due to random vanish issues. Assume it doesn't need judging.", (int)type_ );
type = TapNote::empty;
}
}
@@ -334,7 +334,23 @@ static inline float ToBeat(int row) { return NoteRowToBeat(row); }
*/
static inline float ToBeat(float beat) { return beat; }
-
+/**
+ * @brief Scales the position.
+ * @param T start - the starting row of the scaling region
+ * @param T length - the length of the scaling region
+ * @param T newLength - the new length of the scaling region
+ * @param T position - the position to scale
+ * @return T the scaled position
+ */
+template
+inline T ScalePosition( T start, T length, T newLength, T position )
+{
+ if( position < start )
+ return position;
+ if( position >= start + length )
+ return position - length + newLength;
+ return start + (position - start) * newLength / length;
+}
#endif
diff --git a/src/NotesLoader.cpp b/src/NotesLoader.cpp
index 88f68787aa..983f35cedb 100644
--- a/src/NotesLoader.cpp
+++ b/src/NotesLoader.cpp
@@ -32,20 +32,23 @@ bool NotesLoader::LoadFromDir( const RString &sPath, Song &out, set &Bl
vector list;
BlacklistedImages.clear();
- SSCLoader::GetApplicableFiles( sPath, list );
+ SSCLoader loaderSSC;
+ loaderSSC.GetApplicableFiles( sPath, list );
if( !list.empty() )
{
- if( !SSCLoader::LoadFromDir( sPath, out ) )
+ if( !loaderSSC.LoadFromDir( sPath, out ) )
return false;
- SSCLoader::TidyUpData( out, false );
+ loaderSSC.TidyUpData( out, false );
return true;
}
- SMALoader::GetApplicableFiles( sPath, list );
+ SMALoader loaderSMA;
+ loaderSMA.GetApplicableFiles( sPath, list );
if (!list.empty() )
- return SMALoader::LoadFromDir( sPath, out );
- SMLoader::GetApplicableFiles( sPath, list );
+ return loaderSMA.LoadFromDir( sPath, out );
+ SMLoader loaderSM;
+ loaderSM.GetApplicableFiles( sPath, list );
if (!list.empty() )
- return SMLoader::LoadFromDir( sPath, out );
+ return loaderSM.LoadFromDir( sPath, out );
DWILoader::GetApplicableFiles( sPath, list );
if( !list.empty() )
return DWILoader::LoadFromDir( sPath, out, BlacklistedImages );
diff --git a/src/NotesLoaderBMS.cpp b/src/NotesLoaderBMS.cpp
index e7adf6d5a2..fdaf8ea92c 100644
--- a/src/NotesLoaderBMS.cpp
+++ b/src/NotesLoaderBMS.cpp
@@ -459,13 +459,16 @@ static bool SearchForKeysound( const RString &sPath, RString nDataOriginal, map<
* Do a search. Don't do a wildcard search; if sData is "song.wav",
* we might also have "song.png", which we shouldn't match. */
RString nData = nDataOriginal;
- if( !IsAFile(out.GetSongDir()+nData) )
+ RString dir = out.GetSongDir();
+ if (dir.empty())
+ dir = Dirname(sPath);
+ if( !IsAFile(dir+nData) )
{
const char *exts[] = { "oga", "ogg", "wav", "mp3", NULL }; // XXX: stop duplicating these everywhere
for( unsigned i = 0; exts[i] != NULL; ++i )
{
RString fn = SetExtension( nData, exts[i] );
- if( IsAFile(out.GetSongDir()+fn) )
+ if( IsAFile(dir+fn) )
{
nData = fn;
break;
@@ -473,9 +476,9 @@ static bool SearchForKeysound( const RString &sPath, RString nDataOriginal, map<
}
}
- if( !IsAFile(out.GetSongDir()+nData) )
+ if( !IsAFile(dir+nData) )
{
- LOG->UserLog( "Song file", out.GetSongDir(), "references key \"%s\" that can't be found", nData.c_str() );
+ LOG->UserLog( "Song file", dir, "references key \"%s\" that can't be found", nData.c_str() );
return false;
}
@@ -548,6 +551,7 @@ static bool LoadFromBMSFile( const RString &sPath, const NameToData_t &mapNameTo
{
map mapIdToKeysoundIndex;
+ map mapNoteRowToBPM;
MeasureToTimeSig_t sigAdjustments;
LOG->Trace( "Steps::LoadFromBMSFile( '%s' )", sPath.c_str() );
@@ -572,8 +576,8 @@ static bool LoadFromBMSFile( const RString &sPath, const NameToData_t &mapNameTo
if( fBPM > 0.0f )
{
- BPMSegment newSeg( 0, fBPM );
- out.m_Timing.AddBPMSegment( newSeg );
+ BPMSegment * newSeg = new BPMSegment( 0, fBPM );
+ out.m_Timing.AddSegment(SEGMENT_BPM, newSeg );
LOG->Trace( "Inserting new BPM change at beat %f, BPM %f", NoteRowToBeat(0), fBPM );
}
else
@@ -622,7 +626,7 @@ static bool LoadFromBMSFile( const RString &sPath, const NameToData_t &mapNameTo
case BMS_TRACK_BPM:
if( iVal > 0 )
{
- out.m_Timing.SetBPMAtBeat( fBeat, (float) iVal );
+ mapNoteRowToBPM[ BeatToNoteRow(fBeat) ] = iVal;
LOG->Trace( "Inserting new BPM change at beat %f, BPM %i", fBeat, iVal );
}
else
@@ -639,7 +643,7 @@ static bool LoadFromBMSFile( const RString &sPath, const NameToData_t &mapNameTo
if( GetTagFromMap( mapNameToData, sTagToLookFor, sBPM ) )
{
float fBPM = StringToFloat( sBPM );
- out.m_Timing.SetBPMAtBeat( fBeat, fBPM );
+ mapNoteRowToBPM[ BeatToNoteRow(fBeat) ] = fBPM;
}
else
{
@@ -662,9 +666,9 @@ static bool LoadFromBMSFile( const RString &sPath, const NameToData_t &mapNameTo
float fBeats = StringToFloat( sBeats ) / 48.0f;
float fFreezeSecs = fBeats / fBPS;
- StopSegment newSeg( BeatToNoteRow(fBeat), fFreezeSecs );
- out.m_Timing.AddStopSegment( newSeg );
- LOG->Trace( "Inserting new Freeze at beat %f, secs %f", fBeat, newSeg.GetPause() );
+ StopSegment * newSeg = new StopSegment( fBeat, fFreezeSecs );
+ out.m_Timing.AddSegment( SEGMENT_STOP_DELAY, newSeg );
+ LOG->Trace( "Inserting new Freeze at beat %f, secs %f", fBeat, newSeg->GetPause() );
}
else
{
@@ -676,6 +680,11 @@ static bool LoadFromBMSFile( const RString &sPath, const NameToData_t &mapNameTo
}
}
+
+ for( map::iterator it = mapNoteRowToBPM.begin(); it != mapNoteRowToBPM.end(); it ++ )
+ {
+ out.m_Timing.SetBPMAtRow( it->first, it->second );
+ }
// Now that we're done reading BPMs, factor out weird time signatures.
SetTimeSigAdjustments( mapMeasureToTimeSig, outSong, sigAdjustments );
@@ -690,6 +699,8 @@ static bool LoadFromBMSFile( const RString &sPath, const NameToData_t &mapNameTo
}
NameToData_t::const_iterator it;
+
+ bool hasBGM = false;
for( it = mapNameToData.lower_bound("#00000"); it != mapNameToData.end(); ++it )
{
const RString &sName = it->first;
@@ -739,6 +750,7 @@ static bool LoadFromBMSFile( const RString &sPath, const NameToData_t &mapNameTo
{
if( bmsTrack == BMS_AUTO_KEYSOUND_1 )
{
+ hasBGM = true;
// shift the auto keysound as far right as possible
int iLastEmptyTrack = -1;
if( ndNotes.GetTapLastEmptyTrack(row, iLastEmptyTrack) &&
@@ -766,6 +778,12 @@ static bool LoadFromBMSFile( const RString &sPath, const NameToData_t &mapNameTo
}
}
+ if (!hasBGM)
+ {
+ LOG->Warn("The song at %s is missing a #XXX01 tag! We're unable to load.", sPath.c_str());
+ return false;
+ }
+
/* Handles hold notes like uBMPlay.
* Different BMS simulators support hold notes differently.
* See http://nvyu.net/rdm/ex.php for more info.
@@ -958,7 +976,7 @@ static bool LoadFromBMSFile( const RString &sPath, const NameToData_t &mapNameTo
iTransformNewToOld[15] = BMS_P2_TURN;
break;
default:
- ASSERT(0);
+ ASSERT_M(0, ssprintf("Invalid StepsType when parsing BMS file %s!", sPath.c_str()));
}
// shift all of the autokeysound tracks onto the main tracks
@@ -984,7 +1002,7 @@ static bool LoadFromBMSFile( const RString &sPath, const NameToData_t &mapNameTo
}
else
{
- LOG->UserLog( "Song file", sPath, "has too much simultenous autokeysound tracks." );
+ LOG->UserLog( "Song file", sPath, "has too much simultaneous autokeysound tracks." );
}
}
}
@@ -1052,6 +1070,75 @@ void BMSLoader::GetApplicableFiles( const RString &sPath, vector &out )
GetDirListing( sPath + RString("*.bml"), out );
}
+bool BMSLoader::LoadNoteDataFromSimfile( const RString & cachePath, Steps & out )
+{
+ Song dummy;
+ // TODO: Simplify this copy/paste from LoadFromDir.
+
+ vector BMSData;
+ BMSData.push_back(NameToData_t());
+ ReadBMSFile(cachePath, BMSData.back());
+
+ RString commonSubstring;
+ GetCommonTagFromMapList( BMSData, "#title", commonSubstring );
+
+ Steps *copy = dummy.CreateSteps();
+
+ copy->SetDifficulty( Difficulty_Medium );
+ RString sTag;
+ if( GetTagFromMap( BMSData[0], "#title", sTag ) && sTag.size() != commonSubstring.size() )
+ {
+ sTag = sTag.substr( commonSubstring.size(), sTag.size() - commonSubstring.size() );
+ sTag.MakeLower();
+
+ if( sTag.find('l') != sTag.npos )
+ {
+ unsigned lPos = sTag.find('l');
+ if( lPos > 2 && sTag.substr(lPos-2,4) == "solo" )
+ {
+ copy->SetDifficulty( Difficulty_Edit );
+ }
+ else
+ {
+ copy->SetDifficulty( Difficulty_Easy );
+ }
+ }
+ else if( sTag.find('a') != sTag.npos )
+ copy->SetDifficulty( Difficulty_Hard );
+ else if( sTag.find('b') != sTag.npos )
+ copy->SetDifficulty( Difficulty_Beginner );
+ }
+ if( commonSubstring == "" )
+ {
+ copy->SetDifficulty(Difficulty_Medium);
+ RString sTag;
+ if (GetTagFromMap(BMSData[0], "#title#", sTag))
+ SearchForDifficulty(sTag, copy);
+ }
+ ReadGlobalTags( BMSData[0], dummy );
+ if( commonSubstring.size() > 2 && commonSubstring[commonSubstring.size() - 2] == ' ' )
+ {
+ switch( commonSubstring[commonSubstring.size() - 1] )
+ {
+ case '[':
+ case '(':
+ case '<':
+ commonSubstring = commonSubstring.substr(0, commonSubstring.size() - 2);
+ default:
+ break;
+ }
+ }
+ map mapFilenameToKeysoundIndex;
+
+
+ const bool ok = LoadFromBMSFile( cachePath, BMSData[0], *copy, dummy, mapFilenameToKeysoundIndex );
+ if( ok )
+ {
+ out.SetNoteData(copy->GetNoteData());
+ }
+ return ok;
+}
+
bool BMSLoader::LoadFromDir( const RString &sDir, Song &out )
{
LOG->Trace( "Song::LoadFromBMSDir(%s)", sDir.c_str() );
@@ -1156,6 +1243,7 @@ bool BMSLoader::LoadFromDir( const RString &sDir, Song &out )
iMainDataIndex = i;
ReadGlobalTags( aBMSData[iMainDataIndex], out );
+ out.m_sSongFileName = out.GetSongDir() + arrayBMSFileNames[iMainDataIndex];
// The brackets before the difficulty are in common substring, so remove them if it's found.
if( commonSubstring.size() > 2 && commonSubstring[commonSubstring.size() - 2] == ' ' )
@@ -1188,6 +1276,7 @@ bool BMSLoader::LoadFromDir( const RString &sDir, Song &out )
if( i == static_cast(iMainDataIndex) )
out.m_SongTiming = pNewNotes->m_Timing;
+ pNewNotes->SetFilename(out.GetSongDir() + arrayBMSFileNames[i]);
out.AddSteps( pNewNotes );
}
else
diff --git a/src/NotesLoaderBMS.h b/src/NotesLoaderBMS.h
index caf8372d64..caf124f07b 100644
--- a/src/NotesLoaderBMS.h
+++ b/src/NotesLoaderBMS.h
@@ -2,11 +2,13 @@
#define NOTES_LOADER_BMS_H
class Song;
+class Steps;
/** @brief Reads a Song from a set of .BMS files. */
namespace BMSLoader
{
void GetApplicableFiles( const RString &sPath, vector