diff --git a/.hgignore b/.hgignore index 27273f9e7d..d4a51e972a 100644 --- a/.hgignore +++ b/.hgignore @@ -13,6 +13,7 @@ ffmpeg-* *.idb *.pdb *.exp +*.dmg ___* .hg .hgignore @@ -21,6 +22,7 @@ ___* .cvsignore .DS_Store Thumbs.db +GameData.smzip config.log config.status *.pbxuser @@ -60,6 +62,7 @@ GtkModule.so ver.cpp lib*_link.a Data/UserPrefs +Data/uPrefs Data/GamePrefs/*.cfg PBProject/Hardware.plist Themes/pump @@ -75,6 +78,9 @@ Data/SpeedMods.txt Program/StepMania*.lib crashinfo.txt Utils/temp* +*.lnk +BuildLog.htm +*.pch syntax: regexp .*\#.*\#$ diff --git a/Docs/Changelog_SSCformat.txt b/Docs/Changelog_SSCformat.txt index c50c25737f..3c3378adfe 100644 --- a/Docs/Changelog_SSCformat.txt +++ b/Docs/Changelog_SSCformat.txt @@ -6,9 +6,15 @@ a changelog is provided here between each version. Notice: .ssc is not a finalized format at the moment. There are plans for a change to JSON, but it is unsure if this will be done. -Implement .ssc at your own risk. +/!\ Implement .ssc at your own risk. /!\ ________________________________________________________________________________ +[v0.57] - AJ +* Add #ORIGIN tag to metadata. + +[v0.56] - Wolfman2000 +* Implement #WARPS tag to replace negative bpm/stop gimmicks. + [v0.55] - Wolfman2000 * Add #COMBOS tag to the Song and Steps (does nothing here). diff --git a/Docs/Changelog_sm-ssc.txt b/Docs/Changelog_sm-ssc.txt index 57a2fa0398..f2ed5cb0a5 100644 --- a/Docs/Changelog_sm-ssc.txt +++ b/Docs/Changelog_sm-ssc.txt @@ -10,20 +10,137 @@ supported but exist anyways.) _____________________________________________________________________________ ================================================================================ -sm-ssc v1.2.4 | 20110??? +sm-ssc v1.2.5 | 20110501 -------------------------------------------------------------------------------- +20110430 +-------- +* [ScreenOptions] Renamed "ScreenOptions LineHighlight" to "ScreenOptions + LineHighlight P#", making it load per-player. [AJ] +* [OptionRow] Added Text param to RefreshMessageCommand. [AJ] +* [ScreenOptions] Added SelectMultipleMessageCommand, ChangeValueMessageCommand. [AJ] +* [UnlockEntry] Added GetCourse, GetCode Lua bindings. [AJ] +* [UnlockManager] Added UnlockRequirement_NumUnlocked enum. [AJ] +* [Song] Added Origin (#ORIGIN tag in .ssc) [AJ] +* [UnlockManager] Added GetPoints(UnlockRequirement), + GetPointsForProfile(Profile,UnlockRequirement) Lua bindings. [AJ] +* [Course] Added #SCRIPTER tag and GetScripter Lua binding. [AJ] + +20110428 +-------- +* [BeginnerHelper] Various changes: [AJ] + * Changed Player_#X/Y metrics to Player#X/Y metrics for consistency. + * Converted the background to an AutoActor. +* [BPMDisplay] Added SetFromSong Lua binding. [AJ] + +20110423 +-------- +* [CourseLoaderCRS] Fixed loading of Player's Best/Most Played courses, + probably others too. [AJ] +* [ScreenGameplaySyncMachine] Fixed a crash when entering + ScreenGameplaySyncMachine as Player 2. (Fixes issue 127) [AJ] +* [ScreenOptionsEditCourse] Fixed a crash when going to the first row. + (Fixes issue 235) [AJ] +* [SongManager] Added GetCourseGroupNames Lua binding. [AJ] + +20110422 +-------- +* [Banner] Added ScrollSpeedDivisor metric; controls the scroll speed of + Random/Roulette banners. [AJ] +* [FadingBanner] Added BannerRoulette, BannerRandom, and Banner(Custom Item Name) commands. [AJ] + +20110421 +-------- +* [ScreenSelectMusic] Changed "Percent Frame p1" to "PercentFrame P1" for consistency. [AJ] +* [LifeMeterBattery] Convert Frame to an AutoActor. [AJ] +* [ScreenEvaluation] Added RollingNumbersClass metric, allowing for the ability + to change which RollingNumbers class is loaded. [AJ] +* [ScreenGameplay] Added SongNumberFormat metric. [AJ] + +20110420 +-------- +* [CourseContentsList] Fix a crash. [AJ] + +20110416 +-------- +* [PlayerOptions] Added UsingReverse() Lua binding (automatically tests GetReverse() == 1) [AJ] +* [PlayerState] Added GetCurrentPlayerOptions() Lua binding [AJ] + +20110413 +-------- +* [ScreenSelectMusic] Made score frame into an AutoActor, changed the filename + from "score frame p1" to "ScoreFrame P1" for consistency with other elements. [AJ] + +20110405 +-------- +* [ScreenEdit] Allow modifying the #DISPLAYBPM traits in the editor. Look in + Edit Song Info to find it. [Wolfman2000] + +20110402 +-------- +* Fix a crash (issue 247) when exiting Practice mode from dance-solo, + dance-threepanel, and popn-nine (all of which can only have one player). + If you find any other modes this crashes on, let us know. [AJ] + +20110329 +-------- +* [ScreenEdit] Changed sample playback button to L. [AJ] +* [ScreenGameplay] Announcers say combo messages again. [AJ] + +================================================================================ +sm-ssc v1.2.4 | 20110327 +-------------------------------------------------------------------------------- + +20110327 +-------- +* Fix Gameplay Footer not showing up over arrows. [AJ] + +20110326 +-------- +* [NotesLoaderSM, NotesWriterSSC] Officially add the #WARPS tag. The negative + tricks of the past are now officially standardized. Please tell us about + files which have broken sync or are otherwise unplayable/incorrect. + [AJ, theDtTvB, Wolfman2000] + +20110320 +-------- +* [PlayerOptions] Added SetNoteSkin(string) Lua binding. [AJ] +* [PlayerOptions] Tons of new Lua bindings. See the Lua documentation for all + of them, there's too many to print here. [AJ] + +20110317 +-------- +* [ScreenEdit] Fix bug number 222, where Steps disappeared if they weren't + saved. [AJ, Wolfman2000] +* [ScreenOptionsEdit] Fix bug number 186, where people could try to edit or + share songs when they didn't have any. [Wolfman2000] +* [ScreenEdit] Add a metric to switch Ctrl+Up and Ctrl+Down. This is for + easier compatibility with prior versions of SM. It defaults to false. + [Wolfman2000] +* [ScreenEdit] Fix bug number 65, where Steps disappeared if they were + involved with the Compress or Expand options. [Wolfman2000] + 20110316 -------- * [NotesLoaderSMA] Allow for preliminary support of loading SMA files. This will become better once Split Timing is in place. [Wolfman2000] +* [NotesLoaderBMS] Improve BMS loading: [theDtTvB] + * Ignore time signatures before the notes for the steps to be more + synchronized. + * Load BPM changes properly. Many songs with BPM changes no longer freeze. +* [Player] Stop playing the keysound when letting go of hold notes. [theDtTvB] +* [NoteDataUtil] Make keysounded notes that can't be inserted when reducing + number of tracks autokeysound, means less missing sounds when playing + 7-key BMS on dance-single. [theDtTvB] 20110313 -------- * [NotesWriterSM] Allow for either the #DESCRIPTION or #CREDIT tags to be used for the .sm format's description token. [Wolfman2000] -* [ScreenEdit] Add Tap Note Cycling to allow inputting all of the taps. The way - to make holds and rolls are still the same as before. [Wolfman2000] +* [ScreenEdit] Add Tap Note Cycling to allow inputting all of the taps. Use the + n and m keys to switch between taps, mines, lifts, and fakes. The way to make + holds and rolls are still the same as before; hold 1-0 (plus shift for rolls) + and then drag up or down as needed. [Wolfman2000] ================================================================================ sm-ssc v1.2.3 | 20110323 diff --git a/Docs/CourseFormat.txt b/Docs/CourseFormat.txt new file mode 100644 index 0000000000..6051a6044a --- /dev/null +++ b/Docs/CourseFormat.txt @@ -0,0 +1,88 @@ +Complete Course Template + +[[ Header Content ]] +-- Header Content is comprimised with any course-defining data such as the +-- title, banner and other parameters. +#COURSE:My Course!; +-- The title of the course. +#COURSETRANSLIT:My Course, Translated!; +-- The title of the course, translated into english. +#REPEAT:YES; +-- If this is present, the course does not end. Useful for endless & workout +-- courses. +#LIVES:4; +-- The maximum(?) number of lives attainable in the course. Enabling this will +-- automatically force your course into an Oni course. +#BANNER:My Banner.png; +-- A banner for your course. +#BACKGROUND:My Background.png; +-- A background for your course. Currently only available in SM-SSC. +#STYLE:SINGLE,VERSUS; +-- Denote which styles may be played on this course. This is useful in +-- particular to clone courses for doubles and single courses. +#METER:Beginner:3; +-- A custom-set meter for that course difficulty. You may set the difficulty +-- for Beginner, Easy, Medium, Hard, Challenge and Edit difficulties. + +[[ Song Content ]] +-- Song Content is comprimised with any song-changing data such as modifiers, +-- followed by an actual song for teh game to play. + +-- Modifiers can be assigned in a variety of formats, the most effective three being the following: + +1.) Repeated Modifier Block w/ Length: +#MODS:TIME:0.500:LEN:0.500:MODS:2x; +#MODS:TIME:1.500:LEN:0.500:MODS:0.5x; + +2.) Nested Modifier Block w/ Length: +#MODS: + TIME:0.500:LEN:0.500:MODS:2x; + TIME:1.500:LEN:0.500:MODS:0.5x; + +3.) Nested Modifier Block w/ Ends: +#MODS: + TIME:0.500:END:1.000:MODS:2x; + TIME:1.500:END:1.500:MODS:0.5x; + +#GAINSECONDS:60.5; +-- The number of seconds gained before starting a song. This and #LIVES are +-- mutually exclusive: you can either have one, the other, or none: both +-- is not possible. This is meant to be used for Survival courses. + +#SONG:*:Medium:2x; +-- #SONG can take quite a variety of parameters, of which may be useful to you +-- for testing or randomocity purpose. +-- * is a wildcard item, meaning that StepMania will always pick a random song +-- for this part of the course. +-- You can also replace with BEST*,WORST*,GRADEBEST*, or GRADEWORST*, where * +-- is a number to retrive the first of each category above. +#SONG:BEST1:Medium:2x; +-- As well as that, you may also do Group Random, like such: +#SONG:Dance Dance Revolution 8th Mix/*:Medium:2x; +-- If the above is not applicable, StepMania will search for the song title as best it can, depending on what you give it: +#SONG:Xepher:Medium:2x; +-- Will simply search the title of the song. +#SONG:DDR Supernova/Xepher:Medium:2x; +-- Will search for the exact directory. + +-- #SONG can also apply different effects on each entry in the course by adding +-- special modifiers to the modifiers segment: +#SONG:*:Medium:showcourse; +-- For example, forces the course to never be hidden, noshowcourse being the +-- reverse of such. +-- nodifficult also exists to disable a player from changing difficulties, +-- barring the player from making it easier or harder ( Gauntlets & Survivals +-- do not allow you to change difficulties ). +-- Finally, award*, where * is a number, allows you to control how many lives +-- the player gains from successfully completing a course in Oni mode. + +Finally, here's an example course: +#COURSE:My Awesome Course - The Revenge; +#METER:Medium:8; + +#MODS: + TIME:1.00:END:50.00:MODS:C150; +#SONG:In The Groove/Dawn:Overhead; +#SONG:In The Groove/Mouth:; +#SONG:In The Groove 2/Funk Factory:; +#SONG:In The Groove 3/Disconnected Zeo:; diff --git a/Docs/Devdocs/NegBPMsTutorial.html b/Docs/Devdocs/NegBPMsTutorial.html new file mode 100644 index 0000000000..ee9d34f0c7 --- /dev/null +++ b/Docs/Devdocs/NegBPMsTutorial.html @@ -0,0 +1,130 @@ + + +Negative BPM/Stop Tutorial by WinDEU + + + +Hello everyone, and welcome to WinDEU's Negative BPM tutorial! Making negative +BPMs is pretty complex, so hopefully this guide will help you guys out.
+
+NOTE: I am using +SM 3.95 for this tutorial. 3.9 works as well, and is probably better to use +for playback purposes. When a negative BPM hits in edit mode, 3.95 jumps very +quickly (but not instantly) to the next point in the chart, whereas 3.9 does +do it instantly.
+
+What are negative BPMs? +Negative BPMs are the act of "warping" to a +later place in the chart, skipping multiple lines of the chart and +ignoring anything within those areas.
+
+Once you understand how negative BPMs work, it shouldn't be too hard to +figure out.
+
+So, let's start out with a screenshot.
+
+ +
+We start off on measure 1, with a current second of 0.055, and a BPM of 150. +Take note of the current second (upper right), this is very important in +dealing with negative BPMs.
+
+ +
+We are now on measure 2, with a BPM of -150, the exact opposite of the normal +BPM. Look at the current second again. It took 1.600 seconds to scroll 1 +whole measure at 150 BPM. Right now the current second is 1.655. Also of +note, the BPM goes back to 150 starting on measure 3. Now, here's where the +magic happens.
+
+
+We are on measure 3, back into positive BPM territory, but take a look at the +current second again. It is 0.055 on measure 3, the same value as the current +second from measure 1. This makes sense, because it took -1.600 seconds to +scroll from measure 2 to measure 3, because the BPM was negative during that +measure.
+
+
+As you can see from the current second on measure 4, it is the same value as measure 2.
+
+This is how the warping happens. When the chart first reaches the negative BPM, +it will search for the next positive BPM value. +NOTE: if there is no +positive BPM after the last negative BPM, I believe that the song ends +instantly, because it has reached the highest time possible within the chart. +Once the negative BPM hits, the current second will start counting backwards +forever.
+
+So, once the negative BPM hits, the game attempts to find the next place in +the chart that matches the current second of +the exact moment the negative BPM hit. At measure 2, the current second +was 1.655, and from the picture above, we can see that the next place that the +current second is 1.655 would be measure 4. So, you've effectively created a +warp going from measure 2 to measure 4, skipping everything in between.
+
+ +
+So basically, it comes down to this: When making negative BPMs, make sure that +the space between the negative BPM and the next positive BPM is +doubled (assuming that you're using +the same BPM, which would be the easiest method anyway).
+
+Negative Stops +

+Negative stops work about the same way as negative BPMs, without the mess +of having to change around the BPMs. There is a little math involved, though.
+
+Let's say that you want to do a 2-measure warp, like the negative BPM example +above. You need to simulate going backwards by two measures. Normal stops keep +the current second going, even though the chart is at a standstill. Negative +stops keep the current second going as well, only backwards.
+
+First, find the time it would take to progress two measures. You can do this +by either checking the current second, going down two measures, check the +current second again, and take the difference. Or, you can calculate it like this:
+
+60/[BPM] = [quarter note value, in seconds]
+[quarter note] x 8 = [2 measures, in seconds]
+
+So that translates to:
+
+60/150 = 0.400
+0.400 x 8 = 3.200 seconds = two measures
+
+Now that we've got that out of the way, it's time to make the negative stop. +You might have noticed something though. StepMania doesn't let you input +negative stops. F9 to decrease the stop values in edit mode doesn't let you +go below 0.00, and adding a negative stop through Add Stop from the menu +doesn't work either.
+
+Unfortunately, you'll have to manually insert the negative stop into the .sm +file. NOTE: Before you +manually insert any negative stops, make sure to save your chart, otherwise +any unsaved data will be lost!
+
+This time, take note of the current beat +(again, upper right). Now, open up the .sm file and look for the #STOPS tag. +If you want to add a -3.200 long stop in at measure 2, it will look like this:
+
+#STOPS:4.000=-3.200;
+
+After you're done, save the .sm, and go back to StepMania (which should still +be open). Press ESC, and go to the menu option "Revert From Disk." It will +warn you that any unsaved changes will be lost (which is why I gave the warning +before explaining all of this). Choose yes, and you should see the negative +stop value appear on measure 2.
+
+
+
+If you scroll to measure 2, and then to measure 4, you will see that the +current second values are the same, meaning that you've successfully created +a warp with negative stops!
+
+NOTE: Using a lot of +negative stops in a short period of time tends to lag ITG machines a lot, +so be wary of this.
+
+That covers the basics of negative BPMs and negative stops. Hopefully this guide helps! + + \ No newline at end of file diff --git a/Docs/Devdocs/negbpmtut/screen00214.jpg b/Docs/Devdocs/negbpmtut/screen00214.jpg new file mode 100644 index 0000000000..2212059623 Binary files /dev/null and b/Docs/Devdocs/negbpmtut/screen00214.jpg differ diff --git a/Docs/Devdocs/negbpmtut/screen00215.jpg b/Docs/Devdocs/negbpmtut/screen00215.jpg new file mode 100644 index 0000000000..48d703b825 Binary files /dev/null and b/Docs/Devdocs/negbpmtut/screen00215.jpg differ diff --git a/Docs/Devdocs/negbpmtut/screen00216.jpg b/Docs/Devdocs/negbpmtut/screen00216.jpg new file mode 100644 index 0000000000..b28c3ff933 Binary files /dev/null and b/Docs/Devdocs/negbpmtut/screen00216.jpg differ diff --git a/Docs/Devdocs/negbpmtut/screen00217.jpg b/Docs/Devdocs/negbpmtut/screen00217.jpg new file mode 100644 index 0000000000..1f91fa1f02 Binary files /dev/null and b/Docs/Devdocs/negbpmtut/screen00217.jpg differ diff --git a/Docs/Devdocs/negbpmtut/screen00218.jpg b/Docs/Devdocs/negbpmtut/screen00218.jpg new file mode 100644 index 0000000000..7d1e11d398 Binary files /dev/null and b/Docs/Devdocs/negbpmtut/screen00218.jpg differ diff --git a/Docs/Devdocs/negbpmtut/screen00221.jpg b/Docs/Devdocs/negbpmtut/screen00221.jpg new file mode 100644 index 0000000000..35876856b4 Binary files /dev/null and b/Docs/Devdocs/negbpmtut/screen00221.jpg differ diff --git a/Docs/Luadoc/Lua.xml b/Docs/Luadoc/Lua.xml index d489f9638b..30d7084c15 100644 --- a/Docs/Luadoc/Lua.xml +++ b/Docs/Luadoc/Lua.xml @@ -126,6 +126,7 @@ + @@ -519,6 +520,7 @@ + @@ -595,6 +597,7 @@ + @@ -803,6 +806,7 @@ + @@ -887,7 +891,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -925,6 +1002,7 @@ + @@ -1115,6 +1193,7 @@ + @@ -1148,6 +1227,7 @@ + @@ -1185,6 +1265,7 @@ + @@ -1322,6 +1403,7 @@ + @@ -1339,6 +1421,8 @@ + + @@ -1359,6 +1443,8 @@ + + @@ -1952,6 +2038,7 @@ + @@ -1992,6 +2079,6 @@ - sm-ssc v1.2.3 - 2011-03-15 + sm-ssc v1.2.5 + 2011-05-01 diff --git a/Docs/Luadoc/LuaDocumentation.xml b/Docs/Luadoc/LuaDocumentation.xml index cf44a947be..e991e0a589 100644 --- a/Docs/Luadoc/LuaDocumentation.xml +++ b/Docs/Luadoc/LuaDocumentation.xml @@ -41,6 +41,9 @@ [03 HSV.lua] + + [03 ProductivityHelpers.lua] Returns true if Center 1P is being used. + [03 Gameplay.lua] @@ -54,9 +57,7 @@ A generic interface to Lua's garbage collector. Performs different functions based on the value of opt. - 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. + 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. [03 Gameplay.lua] Determines what TapNoteScore allows for continuing the combo. @@ -110,11 +111,20 @@ Returns the current Life Difficulty. - Returns a string representing the name of the operating system being used. (e.g. "Xbox", "Windows", "Linux", "Mac, "Unknown") + Returns a string representing the name of the operating system being used. (e.g. "Windows", "Linux", "Mac, "Unknown") [03 ThemePrefs.lua] Returns true if player pn is using ProTiming. + + [02 Utilities.lua] Returns a path to a random song background. + + + Returns the name of the currently connected server. + + + [02 Utilities.lua] Returns a path to the current songs background. + Returns the theme's aspect ratio. @@ -155,8 +165,10 @@ Returns true if connected to StepMania Online. - Returns true if Player pn is logged on to - a SMOnline server. + Returns true if Player pn is logged on to a SMOnline server. + + + [02 Branches.lua] Returns true if Routine mode is being played. [04 WidescreenHelpers.lua] Returns true if the aspect ratio is 16:10 (1.6) or higher. @@ -188,6 +200,9 @@ [02 Sprite.lua] Returns a Sprite with the current song's background. + + Returns the length of the multi-byte character string sString. + Returns the current Minute. @@ -203,12 +218,27 @@ [03 ProductivityHelpers.lua] Converts a PlayerNumber into a short string (e.g. "P1", "P2"). + + [03 ProductivityHelpers.lua] Returns either p1val or p2val depending on pn. + [00 init.lua] + + [03 ThemePrefs.lua] Prints a table's contents to the log. + + + Returns the product ID. + + + Returns the product version. + [02 ActorDef.lua] + + [04 FileUtils.lua] Reads the file at path and returns its contents. + [03 UserPreferences2.lua] (internal) Reads the specified user preference from its config file. @@ -221,9 +251,24 @@ Returns the current second. + + Converts fSecs to Minutes:Seconds:Milliseconds format using two digits for each section. + + + Converts fSecs to Minutes:Seconds.Milliseconds format using two digits for each section except Minutes (uses 1). + + + Converts fSecs to Minutes:Seconds format. + Converts fSecs to Minutes:Seconds.Milliseconds format. + + Converts fSecs to Minutes:Seconds.Milliseconds format using two digits for each section. + + + Converts fSecs to Minutes:Seconds.Milliseconds format using two digits for each section except Milliseconds (uses 3). + [02 Branches.lua] Determines the correct music/course selection screen to use and returns it. @@ -239,6 +284,9 @@ [02 ActorDef.lua] Returns true if a decoration should be shown on the current screen or not. + + [03 CustomSpeedMods.lua] Returns a Lua option row with the custom speed mods defined in SpeedMods.txt. + [02 Utilities.lua] Splits a string at every occurence of delimiter, returning a table of the results. @@ -266,6 +314,9 @@ [00 init.lua] Alias for . + + Returns a string with characters escaped for URLs. (e.g. a space becomes '%20') + [01 base.lua] Alias for lua.GetThreadVariable. @@ -278,48 +329,17 @@ [02 ActorDef.lua] Wraps the children in an ActorFrame. + + [04 FileUtils.lua] Writes buf to the file at path. + [03 UserPreferences2.lua] (internal) Writes user preference prefName to its config file with value being tostring'd. Returns the current year. - - Returns the length of the multi-byte character string sString. - - - Returns the name of the currently connected server. - - - Converts fSecs to Minutes:Seconds:Milliseconds format using two digits for each section. - - - Converts fSecs to Minutes:Seconds.Milliseconds format using two digits for each section. - - - Converts fSecs to Minutes:Seconds.Milliseconds format using two digits for each section except Milliseconds (uses 3). - - - Converts fSecs to Minutes:Seconds.Milliseconds format using two digits for each section except Minutes (uses 1). - - - Converts fSecs to Minutes:Seconds format. - - - Returns a string with characters escaped for URLs. (e.g. a space becomes '%20') - - - - [03 CustomSpeedMods.lua] Returns a Lua option row with the custom speed mods defined in SpeedMods.txt. - - - - [04 FileUtils.lua] Reads the file at path and returns its contents. - - - [04 FileUtils.lua] Writes buf to the file at path. - + [03 ThemePrefs.lua] Returns a Lua option row for ProTiming. @@ -1235,12 +1255,15 @@ - + Returns the text that is currently set at the exact moment you call it. This is likely only going to be useful in an Update command. Sets the BPMDisplay from the GameState. + + Sets the BPMDisplay from the specified Song. + @@ -1341,6 +1364,9 @@ Returns the Course's . (Returns PlayMode in sm-ssc; integer in SM4) + + Returns the name of the person who scripted the Course. + Returns the total length of the Course in seconds. @@ -1863,10 +1889,10 @@ Returns the Grade of this high score. - + Return the number of HoldNoteScores that match hns. - + Returns the modifiers used for this HighScore. @@ -1875,7 +1901,7 @@ Returns the percentage of dance points associated with the high score. - + Returns the RadarValues for this HighScore. @@ -1884,9 +1910,12 @@ Returns the number of seconds survived associated with the high score. - + Return the number of TapNoteScores that match tns. + + Returns true if this high score's name uses a fill-in marker. + @@ -1928,7 +1957,7 @@ Returns the number of lives remaining. - + Returns the number of total lives. @@ -2098,9 +2127,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Returns the current NoteSkin set in the PlayerOptions. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Changes the player's noteskin to noteskin. + + + Returns true if the player is using reverse. (equivalent to GetReverse() == 1) + @@ -2218,6 +2466,9 @@ + + Returns the current PlayerOptions for this PlayerState. + Returns the HealthState for this PlayerState. @@ -2406,7 +2657,7 @@ Returns true if player pn's profile is persistent. - + Returns true if Song s has never been played before (according to the machine profile). @@ -2580,10 +2831,10 @@ Sets the next Screen to be loaded. - + Returns true if the game is paused. - + Pauses or unpauses the game, depending on the value of bPause. @@ -2695,6 +2946,9 @@ Returns the MusicWheel used on this screen. + + Opens the OptionsList for Player pn + [02 StageMods.lua] Sets up modifiers for course modes. @@ -2779,6 +3033,9 @@ Returns a Step object if the StepType and Difficulty exist. + + Gets the Song's origin. + Returns the song's directory. @@ -2886,6 +3143,9 @@ Returns the course color of Course c. + + Returns a table containing all of the course group names. + Returns the extra stage info (Song, Steps) for the specified Style s. (If bExtra2 is true, it will use the second Extra Stage data instead of the first. Again, Lua.xsd sucks) @@ -3250,6 +3510,9 @@ Returns true if the TimingData contains stops. + + Returns true if the TimingData contains warps. + @@ -3296,6 +3559,12 @@ Sets the UnlockEntry's course to sCourseName.
Example: course,"Driven"
+ + Returns the code for this unlock. + + + Returns the Course for this unlock. + Returns the unlock description. @@ -3349,6 +3618,12 @@ Returns the number of all unlock items, regardless of status. + + Returns the number of points for the machine profile based on the specified UnlockRequirement. + + + Returns the number of points for the specified profile based on the specified UnlockRequirement. + Returns the number of points until the next unlock. diff --git a/Docs/credits.txt b/Docs/credits.txt index 28c0f41096..55c8ad396b 100644 --- a/Docs/credits.txt +++ b/Docs/credits.txt @@ -4,7 +4,7 @@ sm-ssc credits (in no particular order) * If you have any corrections to this list, let us know (via forums or IRC). ==the spinal shark collective== -AJ Kelly +AJ Kelly (freem) * Main programming * UserPreferences and some other Lua scripts * Some small theme edits here and there @@ -43,7 +43,10 @@ FSX Nicole Reid (okeeblow) * Tested building sm-ssc on FreeBSD, provided fixes. -Wolfman +Thai Pangsakulyanont (theDtTvB) + * Various changes to BMS support to make things work better. + +Jason Felds (Wolfman2000) * [Player] PercentUntilColorCombo metric * Mac OS X maintainer * Various fixes/changes. (see Changelog_sm-ssc.txt for more details) @@ -76,10 +79,6 @@ v1toko Macgravel * Orbular noteskin (the default kb7 noteskin) -theDtTvB - * Keysound patch (http://share11.appspot.com/20421) - [This patch is currently causing crashes for us, sadly.] - sy567 * Small beginner helper fix (http://www.stepmania.com/forums/showpost.php?p=158721&postcount=12) @@ -145,4 +144,4 @@ NitroX72 Wanny Tio Cerbo -Daisuke Master \ No newline at end of file +Daisuke Master diff --git a/NoteSkins/dance/midi-note-3d/Down Hold Body Active (doubleres).png b/NoteSkins/dance/midi-note-3d/Down Hold Body Active (doubleres).png new file mode 100644 index 0000000000..5a5c758c47 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/Down Hold Body Active (doubleres).png differ diff --git a/NoteSkins/dance/midi-note-3d/Down Hold Body Inactive (doubleres).png b/NoteSkins/dance/midi-note-3d/Down Hold Body Inactive (doubleres).png new file mode 100644 index 0000000000..890e85577f Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/Down Hold Body Inactive (doubleres).png differ diff --git a/NoteSkins/dance/midi-note-3d/Down Hold BottomCap Active (doubleres).png b/NoteSkins/dance/midi-note-3d/Down Hold BottomCap Active (doubleres).png new file mode 100644 index 0000000000..c48bca4137 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/Down Hold BottomCap Active (doubleres).png differ diff --git a/NoteSkins/dance/midi-note-3d/Down Hold BottomCap Inactive (doubleres).png b/NoteSkins/dance/midi-note-3d/Down Hold BottomCap Inactive (doubleres).png new file mode 100644 index 0000000000..268a08ead1 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/Down Hold BottomCap Inactive (doubleres).png differ diff --git a/NoteSkins/dance/midi-note-3d/Down Hold Explosion.redir b/NoteSkins/dance/midi-note-3d/Down Hold Explosion.redir new file mode 100644 index 0000000000..9bef57edb4 --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/Down Hold Explosion.redir @@ -0,0 +1 @@ +Down Tap Explosion Bright \ No newline at end of file diff --git a/NoteSkins/dance/midi-note-3d/Down Hold Head Active.png b/NoteSkins/dance/midi-note-3d/Down Hold Head Active.png new file mode 100644 index 0000000000..37b14d3586 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/Down Hold Head Active.png differ diff --git a/NoteSkins/dance/midi-note-3d/Down Hold Head Inactive.lua b/NoteSkins/dance/midi-note-3d/Down Hold Head Inactive.lua new file mode 100644 index 0000000000..ce2f8a5c79 --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/Down Hold Head Inactive.lua @@ -0,0 +1,4 @@ +return Def.Sprite { + Texture=NOTESKIN:GetPath('Down','Hold Head Active'); + InitCommand=cmd(diffuse,color("0.5,0.5,0.5,1")); +}; \ No newline at end of file diff --git a/NoteSkins/dance/midi-note-3d/Down Receptor.lua b/NoteSkins/dance/midi-note-3d/Down Receptor.lua new file mode 100644 index 0000000000..cb2ef38198 --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/Down Receptor.lua @@ -0,0 +1,26 @@ +local t = Def.ActorFrame { + Def.Sprite { + Texture=NOTESKIN:GetPath( '_down', 'tap Receptor' ); + Frame0000=0; + Delay0000=1; + InitCommand=NOTESKIN:GetMetricA('ReceptorArrow', 'InitCommand'); + NoneCommand=NOTESKIN:GetMetricA('ReceptorArrow', 'NoneCommand'); + }; + Def.Sprite { + Texture=NOTESKIN:GetPath( '_down', 'tap Receptor' ); + Frame0000=0; + Delay0000=1; + InitCommand=NOTESKIN:GetMetricA('ReceptorArrowOverlay', 'InitCommand'); + NoneCommand=NOTESKIN:GetMetricA('ReceptorArrowOverlay', 'NoneCommand'); + }; + Def.Sprite { + Texture=NOTESKIN:GetPath( '_down', 'tap Flash' ); + Frame0000=0; + Delay0000=1; + InitCommand=NOTESKIN:GetMetricA('ReceptorOverlay', 'InitCommand'); + PressCommand=NOTESKIN:GetMetricA('ReceptorOverlay', 'PressCommand'); + LiftCommand=NOTESKIN:GetMetricA('ReceptorOverlay', 'LiftCommand'); + NoneCommand=NOTESKIN:GetMetricA('ReceptorArrow', 'NoneCommand'); + }; +}; +return t; diff --git a/NoteSkins/dance/midi-note-3d/Down Roll Body Active (doubleres).png b/NoteSkins/dance/midi-note-3d/Down Roll Body Active (doubleres).png new file mode 100644 index 0000000000..a412335424 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/Down Roll Body Active (doubleres).png differ diff --git a/NoteSkins/dance/midi-note-3d/Down Roll Body Inactive (doubleres).png b/NoteSkins/dance/midi-note-3d/Down Roll Body Inactive (doubleres).png new file mode 100644 index 0000000000..7d995a73ed Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/Down Roll Body Inactive (doubleres).png differ diff --git a/NoteSkins/dance/midi-note-3d/Down Roll BottomCap Active (doubleres).png b/NoteSkins/dance/midi-note-3d/Down Roll BottomCap Active (doubleres).png new file mode 100644 index 0000000000..7eeb31774e Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/Down Roll BottomCap Active (doubleres).png differ diff --git a/NoteSkins/dance/midi-note-3d/Down Roll BottomCap Inactive (doubleres).png b/NoteSkins/dance/midi-note-3d/Down Roll BottomCap Inactive (doubleres).png new file mode 100644 index 0000000000..25be6edce3 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/Down Roll BottomCap Inactive (doubleres).png differ diff --git a/NoteSkins/dance/midi-note-3d/Down Roll BottomCap.png b/NoteSkins/dance/midi-note-3d/Down Roll BottomCap.png new file mode 100644 index 0000000000..b4d0918613 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/Down Roll BottomCap.png differ diff --git a/NoteSkins/dance/midi-note-3d/Down Roll Explosion.redir b/NoteSkins/dance/midi-note-3d/Down Roll Explosion.redir new file mode 100644 index 0000000000..9bef57edb4 --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/Down Roll Explosion.redir @@ -0,0 +1 @@ +Down Tap Explosion Bright \ No newline at end of file diff --git a/NoteSkins/dance/midi-note-3d/Down Roll Head Active.png b/NoteSkins/dance/midi-note-3d/Down Roll Head Active.png new file mode 100644 index 0000000000..dba93001df Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/Down Roll Head Active.png differ diff --git a/NoteSkins/dance/midi-note-3d/Down Roll Head Inactive.lua b/NoteSkins/dance/midi-note-3d/Down Roll Head Inactive.lua new file mode 100644 index 0000000000..bceb68c82a --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/Down Roll Head Inactive.lua @@ -0,0 +1,4 @@ +return Def.Sprite { + Texture=NOTESKIN:GetPath('Down','Roll Head Active'); + InitCommand=cmd(diffuse,color("0.5,0.5,0.5,1")); +}; \ No newline at end of file diff --git a/NoteSkins/dance/midi-note-3d/Down Tap Explosion Bright.png b/NoteSkins/dance/midi-note-3d/Down Tap Explosion Bright.png new file mode 100644 index 0000000000..bd54411afb Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/Down Tap Explosion Bright.png differ diff --git a/NoteSkins/dance/midi-note-3d/Down Tap Explosion Dim.redir b/NoteSkins/dance/midi-note-3d/Down Tap Explosion Dim.redir new file mode 100644 index 0000000000..9bef57edb4 --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/Down Tap Explosion Dim.redir @@ -0,0 +1 @@ +Down Tap Explosion Bright \ No newline at end of file diff --git a/NoteSkins/dance/midi-note-3d/Down Tap Fake (doubleres).png b/NoteSkins/dance/midi-note-3d/Down Tap Fake (doubleres).png new file mode 100644 index 0000000000..741e7ad279 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/Down Tap Fake (doubleres).png differ diff --git a/NoteSkins/dance/midi-note-3d/Down Tap Lift.png b/NoteSkins/dance/midi-note-3d/Down Tap Lift.png new file mode 100644 index 0000000000..8919b8a664 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/Down Tap Lift.png differ diff --git a/NoteSkins/dance/midi-note-3d/Down Tap Mine.lua b/NoteSkins/dance/midi-note-3d/Down Tap Mine.lua new file mode 100644 index 0000000000..ae8d8bd24c --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/Down Tap Mine.lua @@ -0,0 +1,9 @@ +local t = Def.ActorFrame { + Def.Sprite { + Texture=NOTESKIN:GetPath( '_down', 'tap mine' ); + Frame0000=0; + Delay0000=1; + InitCommand=cmd(spin;effectclock,'beat';effectmagnitude,0,0,-180); + }; +}; +return t; diff --git a/NoteSkins/dance/midi-note-3d/Down Tap Note.lua b/NoteSkins/dance/midi-note-3d/Down Tap Note.lua new file mode 100644 index 0000000000..23d4dc0157 --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/Down Tap Note.lua @@ -0,0 +1,7 @@ +local t = Def.Model { + Meshes=NOTESKIN:GetPath('_down','tap note meshes'); + Materials=NOTESKIN:GetPath('_down','tap note materials'); + Bones=NOTESKIN:GetPath('_down','tap bones'); +}; + +return t; diff --git a/NoteSkins/dance/midi-note-3d/Left Hold BottomCap Active.png b/NoteSkins/dance/midi-note-3d/Left Hold BottomCap Active.png new file mode 100644 index 0000000000..9dc1c72578 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/Left Hold BottomCap Active.png differ diff --git a/NoteSkins/dance/midi-note-3d/Left Hold BottomCap Inactive.lua b/NoteSkins/dance/midi-note-3d/Left Hold BottomCap Inactive.lua new file mode 100644 index 0000000000..69bb142e52 --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/Left Hold BottomCap Inactive.lua @@ -0,0 +1,4 @@ +return Def.Sprite { + Texture=NOTESKIN:GetPath('Left','Hold BottomCap Active'); + InitCommand=cmd(diffuse,color("0.5,0.5,0.5,0.5")); +}; \ No newline at end of file diff --git a/NoteSkins/dance/midi-note-3d/Left Roll BottomCap Active.png b/NoteSkins/dance/midi-note-3d/Left Roll BottomCap Active.png new file mode 100644 index 0000000000..2c768bf44f Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/Left Roll BottomCap Active.png differ diff --git a/NoteSkins/dance/midi-note-3d/Left Roll BottomCap Inactive.lua b/NoteSkins/dance/midi-note-3d/Left Roll BottomCap Inactive.lua new file mode 100644 index 0000000000..16238c09b5 --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/Left Roll BottomCap Inactive.lua @@ -0,0 +1,4 @@ +return Def.Sprite { + Texture=NOTESKIN:GetPath('Left','Roll BottomCap Active'); + InitCommand=cmd(diffuse,color("0.5,0.5,0.5,0.5")); +}; \ No newline at end of file diff --git a/NoteSkins/dance/midi-note-3d/NoteSkin.lua b/NoteSkins/dance/midi-note-3d/NoteSkin.lua new file mode 100644 index 0000000000..2f97fb4e72 --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/NoteSkin.lua @@ -0,0 +1,128 @@ +-- Haggen Daze + +local ret = ... or {}; + +ret.RedirTable = +{ + Up = "Down", + Down = "Down", + Left = "Down", + Right = "Down", + UpLeft = "Down", + UpRight = "Down", +}; + +local OldRedir = ret.Redir; +ret.Redir = function(sButton, sElement) + -- sButton, sElement = OldRedir(sButton, sElement); + + -- Instead of separate hold heads, use the tap note graphics. + if sElement == "Hold Head Active" or + sElement == "Roll Head Active" + then + sElement = "StreamHead Active"; + end + + -- Test + if sElement == "Hold Head Inactive" or + sElement == "Roll Head Inactive" or + then + sElement = "StreamHead Inactive"; + end + + sButton = ret.RedirTable[sButton]; + + return sButton, sElement; +end + +-- local OldRedir = ret.Redir; +-- ret.Redir = function(sButton, sElement) + -- sButton = ret.RedirTable[sButton]; + -- return sButton, sElement; +-- end + +-- To have separate graphics for each hold part: +local OldRedir = ret.Redir; +ret.Redir = function(sButton, sElement) + -- Redirect non-hold, non-roll parts. + if string.find(sElement, "hold") or string.find(sElement, "roll") then + return sButton, sElement; + end + return OldRedir(sButton, sElement); +end + +--[[ +local OldFunc = ret.Load; +function ret.Load() + local t = OldFunc(); + + -- The main "Explosion" part just loads other actors; don't rotate + -- it. The "Hold Explosion" part should not be rotated. + if Var "Element" == "Explosion" or + Var "Element" == "Roll Explosion" then + t.BaseRotationZ = nil; + end + return t; +end +]] + +local OldFunc = ret.Load; +function ret.Load() + local t = OldFunc(); + + --Explosion should not be rotated; it calls other actors. + if Var "Element" == "Explosion" then + t.BaseRotationZ = nil; + end + return t; +end + +ret.PartsToRotate = +{ + ["Receptor"] = true, + ["Go Receptor"] = true, + ["Ready Receptor"] = true, + ["Tap Explosion Bright"] = true, + ["Tap Explosion Dim"] = true, + ["Tap Note"] = true, + ["Tap Lift"] = true, + ["Hold Head Active"] = true, + ["Hold Head Inactive"] = true, + ["Roll Head Active"] = true, + ["Roll Head Inactive"] = true, + ["Hold Explosion"] = true, + ["Roll Explosion"] = true, +}; +ret.Rotate = +{ + Up = 180, + Down = 0, + Left = 90, + Right = -90, + UpLeft = 135, + UpRight = 225, +}; + +-- +-- If a derived skin wants to have separate UpLeft graphics, +-- use this: +-- +-- ret.RedirTable.UpLeft = "UpLeft"; +-- ret.RedirTable.UpRight = "UpLeft"; +-- ret.Rotate.UpLeft = 0; +-- ret.Rotate.UpRight = 90; +-- +ret.Blank = +{ + ["Hold Topcap Active"] = true, + ["Hold Topcap Inactive"] = true, + ["Roll Topcap Active"] = true, + ["Roll Topcap Inactive"] = true, + ["Hold Tail Active"] = true, + ["Hold Tail Inactive"] = true, + ["Roll Tail Active"] = true, + ["Roll Tail Inactive"] = true, + ["Roll Explosion"] = true, +}; + +return ret; diff --git a/NoteSkins/dance/midi-note-3d/Up Hold BottomCap Active.png b/NoteSkins/dance/midi-note-3d/Up Hold BottomCap Active.png new file mode 100644 index 0000000000..0e4e631058 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/Up Hold BottomCap Active.png differ diff --git a/NoteSkins/dance/midi-note-3d/Up Hold BottomCap Inactive.lua b/NoteSkins/dance/midi-note-3d/Up Hold BottomCap Inactive.lua new file mode 100644 index 0000000000..1c2efe09ab --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/Up Hold BottomCap Inactive.lua @@ -0,0 +1,4 @@ +return Def.Sprite { + Texture=NOTESKIN:GetPath('Up','Hold BottomCap Active'); + InitCommand=cmd(diffuse,color("0.5,0.5,0.5,0.5")); +}; \ No newline at end of file diff --git a/NoteSkins/dance/midi-note-3d/Up Roll BottomCap Active.png b/NoteSkins/dance/midi-note-3d/Up Roll BottomCap Active.png new file mode 100644 index 0000000000..be4e8864c9 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/Up Roll BottomCap Active.png differ diff --git a/NoteSkins/dance/midi-note-3d/Up Roll BottomCap Inactive.lua b/NoteSkins/dance/midi-note-3d/Up Roll BottomCap Inactive.lua new file mode 100644 index 0000000000..857066f572 --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/Up Roll BottomCap Inactive.lua @@ -0,0 +1,4 @@ +return Def.Sprite { + Texture=NOTESKIN:GetPath('Up','Roll BottomCap Active'); + InitCommand=cmd(diffuse,color("0.5,0.5,0.5,0.5")); +}; \ No newline at end of file diff --git a/NoteSkins/dance/midi-note-3d/_Down Tap Flash.png b/NoteSkins/dance/midi-note-3d/_Down Tap Flash.png new file mode 100644 index 0000000000..5055d59771 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/_Down Tap Flash.png differ diff --git a/NoteSkins/dance/midi-note-3d/_Down Tap Mine.png b/NoteSkins/dance/midi-note-3d/_Down Tap Mine.png new file mode 100644 index 0000000000..53e4a6d966 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/_Down Tap Mine.png differ diff --git a/NoteSkins/dance/midi-note-3d/_Down Tap Receptor (doubleres).png b/NoteSkins/dance/midi-note-3d/_Down Tap Receptor (doubleres).png new file mode 100644 index 0000000000..91b4f6ed29 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/_Down Tap Receptor (doubleres).png differ diff --git a/NoteSkins/dance/midi-note-3d/_down Tap Note materials.txt b/NoteSkins/dance/midi-note-3d/_down Tap Note materials.txt new file mode 100644 index 0000000000..f3cdd5db2f --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/_down Tap Note materials.txt @@ -0,0 +1,28 @@ +Materials: 3 +"cells" +0.588235 0.588235 0.588235 1.000000 +0.588235 0.588235 0.588235 1.000000 +0.898039 0.898039 0.898039 1.000000 +0.000000 0.000000 0.000000 1.000000 +0.000000 +1.000000 +"tex\black.png" +"" +"1 - Default" +0.588235 0.588235 0.588235 1.000000 +0.588235 0.588235 0.588235 1.000000 +0.898039 0.898039 0.898039 1.000000 +0.000000 0.000000 0.000000 1.000000 +0.000000 +1.000000 +"tex\color.ini" +"" +"2 - Inside" +0.588235 0.588235 0.588235 1.000000 +0.588235 0.588235 0.588235 1.000000 +0.898039 0.898039 0.898039 1.000000 +0.000000 0.000000 0.000000 1.000000 +0.000000 +1.000000 +"tex\color in.jpg" +"" diff --git a/NoteSkins/dance/midi-note-3d/_down tap bones.txt b/NoteSkins/dance/midi-note-3d/_down tap bones.txt new file mode 100644 index 0000000000..fb2c53c800 --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/_down tap bones.txt @@ -0,0 +1 @@ +Bones: 0 diff --git a/NoteSkins/dance/midi-note-3d/_down tap note meshes.txt b/NoteSkins/dance/midi-note-3d/_down tap note meshes.txt new file mode 100644 index 0000000000..5f3d35a743 --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/_down tap note meshes.txt @@ -0,0 +1,949 @@ +// MilkShape 3D ASCII + +Frames: 30 +Frame: 1 + +Meshes: 3 +"cell" 0 0 +64 +0 2.549132 27.005108 -5.999992 0.000000 0.000000 -1 +0 -2.470720 27.005108 -5.999992 0.000000 0.000000 -1 +0 -3.501126 29.003641 -3.999992 0.000000 0.000000 -1 +0 3.515003 29.000792 -3.999992 0.000000 0.000000 -1 +0 7.480893 22.005108 -5.999992 0.000000 0.000000 -1 +0 9.515003 22.992289 -3.999992 0.000000 0.000000 -1 +0 7.487095 -0.006020 -5.999992 0.000000 0.000000 -1 +0 9.498875 3.988278 -3.999992 0.000000 0.000000 -1 +0 -7.464517 22.005112 -5.999992 0.000000 0.000000 -1 +0 -9.501126 22.993713 -3.999992 0.000000 0.000000 -1 +0 -7.470722 0.000184 -5.999992 0.000000 0.000000 -1 +0 -9.496346 5.006423 -3.999992 0.000000 0.000000 -1 +0 -16.489040 12.002391 -3.999992 0.000000 0.000000 -1 +0 -17.519123 9.995950 -5.999992 0.000000 0.000000 -1 +0 -23.502296 9.990573 -5.999992 0.000000 0.000000 -1 +0 -24.496029 11.991723 -3.999992 0.000000 0.000000 -1 +0 -27.479452 5.977798 -5.999992 0.000000 0.000000 -1 +0 -29.504972 7.003297 -3.999992 0.000000 0.000000 -1 +0 -27.479452 0.022464 -5.999992 0.000000 0.000000 -1 +0 -29.490093 -1.017060 -3.999992 0.000000 0.000000 -1 +0 -0.491594 -27.002575 -5.999992 0.000000 0.000000 -1 +0 -0.502999 -29.987505 -3.999992 0.000000 0.000000 -1 +0 0.540664 -26.992649 -5.999992 0.000000 0.000000 -1 +0 0.530027 -29.987507 -3.999992 0.000000 0.000000 -1 +0 29.517078 -0.995554 -3.999992 0.000000 0.000000 -1 +0 27.495455 -0.000695 -5.999992 0.000000 0.000000 -1 +0 27.501657 5.992133 -5.999992 0.000000 0.000000 -1 +0 29.517847 6.998812 -3.999992 0.000000 0.000000 -1 +0 24.519735 12.004406 -3.999992 0.000000 0.000000 -1 +0 23.485622 10.001644 -5.999992 0.000000 0.000000 -1 +0 17.513138 10.005877 -5.999992 0.000000 0.000000 -1 +0 16.503641 11.993057 -3.999992 0.000000 0.000000 -1 +0 -3.501126 29.003641 3.999992 0.000000 0.000000 -1 +0 -2.470720 27.005108 5.999992 0.000000 0.000000 -1 +0 2.549132 27.005108 5.999992 0.000000 0.000000 -1 +0 3.515003 29.000792 3.999992 0.000000 0.000000 -1 +0 7.480893 22.005108 5.999992 0.000000 0.000000 -1 +0 9.515003 22.992289 3.999992 0.000000 0.000000 -1 +0 7.487095 -0.006020 5.999992 0.000000 0.000000 -1 +0 9.498875 3.988278 3.999992 0.000000 0.000000 -1 +0 -7.464517 22.005112 5.999992 0.000000 0.000000 -1 +0 -9.501126 22.993713 3.999992 0.000000 0.000000 -1 +0 -7.470722 0.000184 5.999992 0.000000 0.000000 -1 +0 -9.496346 5.006423 3.999992 0.000000 0.000000 -1 +0 -16.489040 12.002391 3.999992 0.000000 0.000000 -1 +0 -17.519123 9.995950 5.999992 0.000000 0.000000 -1 +0 -23.502296 9.990573 5.999992 0.000000 0.000000 -1 +0 -24.496029 11.991723 3.999992 0.000000 0.000000 -1 +0 -27.479452 5.977798 5.999992 0.000000 0.000000 -1 +0 -29.504972 7.003297 3.999992 0.000000 0.000000 -1 +0 -27.479452 0.022464 5.999992 0.000000 0.000000 -1 +0 -29.490093 -1.017060 3.999992 0.000000 0.000000 -1 +0 -0.491594 -27.002575 5.999992 0.000000 0.000000 -1 +0 -0.502999 -29.981012 3.999992 0.000000 0.000000 -1 +0 0.540664 -26.992649 5.999992 0.000000 0.000000 -1 +0 0.530027 -29.981014 3.999992 0.000000 0.000000 -1 +0 29.517078 -0.995554 3.999992 0.000000 0.000000 -1 +0 27.495455 -0.000695 5.999992 0.000000 0.000000 -1 +0 27.501657 5.992133 5.999992 0.000000 0.000000 -1 +0 29.517847 6.998812 3.999992 0.000000 0.000000 -1 +0 24.519735 12.004406 3.999992 0.000000 0.000000 -1 +0 23.485622 10.001644 5.999992 0.000000 0.000000 -1 +0 17.513138 10.005877 5.999992 0.000000 0.000000 -1 +0 16.503641 11.993057 3.999992 0.000000 0.000000 -1 +64 +0.169806 0.655192 -0.736131 +-0.250549 0.617210 -0.745840 +-0.275250 0.836959 -0.473009 +0.459405 0.785493 -0.414666 +0.577221 0.333428 -0.745414 +0.881916 0.227749 -0.412741 +0.092722 0.371508 -0.923788 +0.169860 0.707114 -0.686394 +-0.573749 0.332170 -0.748649 +-0.879427 0.314309 -0.357516 +-0.141921 0.315683 -0.938191 +-0.262755 0.616506 -0.742213 +0.344982 0.840986 -0.416810 +0.248845 0.616689 -0.746840 +-0.168686 0.653382 -0.737995 +-0.385134 0.776941 -0.498031 +-0.575127 0.332429 -0.747475 +-0.879422 0.314342 -0.357500 +-0.650095 -0.165820 -0.741539 +-0.785052 -0.458118 -0.416920 +-0.329746 -0.522471 -0.786315 +-0.234369 -0.850153 -0.471498 +0.251898 -0.537389 -0.804835 +0.353500 -0.814060 -0.460808 +0.840352 -0.346008 -0.417236 +0.615558 -0.250982 -0.747059 +0.615191 0.250029 -0.747680 +0.834314 0.438972 -0.333503 +0.274670 0.837106 -0.473085 +0.249963 0.616515 -0.746611 +-0.167195 0.654806 -0.737072 +-0.506100 0.780635 -0.366705 +-0.391918 0.788978 0.473195 +-0.250549 0.617210 0.745840 +0.169806 0.655192 0.736131 +0.325964 0.848082 0.417737 +0.577221 0.333428 0.745414 +0.832330 0.366307 0.415988 +0.092722 0.371508 0.923788 +0.236113 0.821103 0.519655 +-0.573749 0.332170 0.748649 +-0.825071 0.272863 0.494776 +-0.141921 0.315683 0.938191 +-0.318851 0.756020 0.571636 +0.317238 0.776006 0.545137 +0.248845 0.616689 0.746840 +-0.168686 0.653382 0.737995 +-0.395630 0.844991 0.359815 +-0.575127 0.332429 0.747475 +-0.825185 0.272671 0.494692 +-0.650095 -0.165820 0.741539 +-0.847433 -0.324937 0.419849 +-0.329917 -0.522977 0.785907 +-0.375728 -0.796362 0.473959 +0.252032 -0.537990 0.804392 +0.373498 -0.875660 0.306134 +0.775167 -0.318440 0.545629 +0.615558 -0.250982 0.747059 +0.615191 0.250029 0.747680 +0.901716 0.275241 0.333393 +0.391503 0.789137 0.473273 +0.249963 0.616515 0.746611 +-0.167195 0.654806 0.737072 +-0.366036 0.853817 0.370155 +96 +0 0 1 2 0 1 2 1 +0 0 2 3 0 2 3 1 +0 0 3 4 0 3 4 1 +0 4 3 5 4 3 5 1 +0 5 6 4 5 6 4 1 +0 5 7 6 5 7 6 1 +0 2 1 8 2 1 8 1 +0 8 9 2 8 9 2 1 +0 9 8 10 9 8 10 1 +0 10 11 9 10 11 9 1 +0 11 10 12 11 10 12 1 +0 12 10 13 12 10 13 1 +0 12 13 14 12 13 14 1 +0 14 15 12 14 15 12 1 +0 15 14 16 15 14 16 1 +0 16 17 15 16 17 15 1 +0 17 16 18 17 16 18 1 +0 18 19 17 18 19 17 1 +0 18 20 19 18 20 19 1 +0 19 20 21 19 20 21 1 +0 21 20 22 21 20 22 1 +0 23 21 22 23 21 22 1 +0 23 22 24 23 22 24 1 +0 22 25 24 22 25 24 1 +0 24 25 26 24 25 26 1 +0 26 27 24 26 27 24 1 +0 27 26 28 27 26 28 1 +0 28 26 29 28 26 29 1 +0 28 29 30 28 29 30 1 +0 30 31 28 30 31 28 1 +0 31 30 6 31 30 6 1 +0 31 6 7 31 6 7 1 +0 32 33 34 32 33 34 1 +0 35 32 34 35 32 34 1 +0 36 35 34 36 35 34 1 +0 37 35 36 37 35 36 1 +0 36 38 37 36 38 37 1 +0 38 39 37 38 39 37 1 +0 40 33 32 40 33 32 1 +0 32 41 40 32 41 40 1 +0 42 40 41 42 40 41 1 +0 41 43 42 41 43 42 1 +0 44 42 43 44 42 43 1 +0 45 42 44 45 42 44 1 +0 46 45 44 46 45 44 1 +0 44 47 46 44 47 46 1 +0 48 46 47 48 46 47 1 +0 47 49 48 47 49 48 1 +0 50 48 49 50 48 49 1 +0 49 51 50 49 51 50 1 +0 51 52 50 51 52 50 1 +0 53 52 51 53 52 51 1 +0 54 52 53 54 52 53 1 +0 54 53 55 54 53 55 1 +0 56 54 55 56 54 55 1 +0 56 57 54 56 57 54 1 +0 58 57 56 58 57 56 1 +0 56 59 58 56 59 58 1 +0 60 58 59 60 58 59 1 +0 61 58 60 61 58 60 1 +0 62 61 60 62 61 60 1 +0 60 63 62 60 63 62 1 +0 38 62 63 38 62 63 1 +0 39 38 63 39 38 63 1 +0 7 5 39 7 5 39 1 +0 39 5 37 39 5 37 1 +0 37 5 3 37 5 3 1 +0 3 35 37 3 35 37 1 +0 35 3 2 35 3 2 1 +0 2 32 35 2 32 35 1 +0 32 2 9 32 2 9 1 +0 9 41 32 9 41 32 1 +0 43 41 9 43 41 9 1 +0 9 11 43 9 11 43 1 +0 43 11 12 43 11 12 1 +0 44 43 12 44 43 12 1 +0 47 44 12 47 44 12 1 +0 12 15 47 12 15 47 1 +0 15 17 47 15 17 47 1 +0 49 47 17 49 47 17 1 +0 51 49 17 51 49 17 1 +0 17 19 51 17 19 51 1 +0 53 51 19 53 51 19 1 +0 19 21 53 19 21 53 1 +0 21 23 55 21 23 55 1 +0 55 23 24 55 23 24 1 +0 24 56 55 24 56 55 1 +0 24 27 59 24 27 59 1 +0 59 56 24 59 56 24 1 +0 27 28 60 27 28 60 1 +0 60 59 27 60 59 27 1 +0 28 31 63 28 31 63 1 +0 63 60 28 63 60 28 1 +0 31 7 39 31 7 39 1 +0 39 63 31 39 63 31 1 +0 55 53 21 55 53 21 1 +"inside" 0 2 +136 +0 0.545871 6.574782 4.000001 0.082192 0.409653 -1 +0 0.527650 6.000967 6.000000 0.082126 0.416299 -1 +0 3.517759 8.995436 6.000000 0.088233 0.377420 -1 +0 3.013403 9.081276 4.000001 0.087090 0.376297 -1 +0 3.514073 18.989233 6.000000 0.088225 0.246740 -1 +0 3.013403 19.081276 4.000001 0.087090 0.245537 -1 +0 1.491741 20.995436 6.000000 0.083642 0.220507 -1 +0 -1.478017 20.995436 6.000000 0.076913 0.220507 -1 +0 -1.506077 20.652702 4.000001 0.076850 0.224988 -1 +0 -3.484221 19.005362 6.000000 0.072367 0.246529 -1 +0 -2.986597 19.081276 4.000001 0.073495 0.245537 -1 +0 -3.478692 9.015251 6.000000 0.072380 0.377160 -1 +0 -0.476883 6.005363 6.000000 0.078414 0.416249 -1 +0 -0.467116 6.613743 4.000001 0.078449 0.409203 -1 +0 -0.498861 -7.986947 6.000000 0.079132 0.611176 -1 +0 0.515562 -7.994639 6.000000 0.081431 0.611277 -1 +0 0.526949 -7.493545 4.000000 0.081456 0.604724 -1 +0 3.492485 -4.994639 6.000000 0.088176 0.565923 -1 +0 3.000633 -4.993546 4.000000 0.087061 0.565909 -1 +0 3.507869 6.000966 6.000000 0.088211 0.416576 -1 +0 2.995759 4.994668 4.000000 0.087050 0.429734 -1 +0 0.522155 2.996570 6.000000 0.082559 0.450850 -1 +0 -0.472487 3.005361 6.000000 0.077660 0.450736 -1 +0 -0.486608 2.542022 4.000000 0.077629 0.456794 -1 +0 -3.474295 5.996571 6.000000 0.072390 0.416633 -1 +0 -3.004789 4.996567 4.000000 0.073454 0.429710 -1 +0 -3.498861 -4.986946 6.000000 0.072334 0.565822 -1 +0 -0.516910 -7.467229 4.000000 0.079091 0.604379 -1 +0 -0.571486 -22.010983 6.000000 0.078967 0.782863 -1 +0 0.539625 -21.973946 6.000000 0.081485 0.782379 -1 +0 0.506847 -21.462547 4.000000 0.081411 0.775691 -1 +0 22.490080 0.991055 6.000000 0.129343 0.482086 -1 +0 22.011435 0.996168 4.000000 0.128259 0.482019 -1 +0 22.477116 4.003556 6.000000 0.129174 0.447705 -1 +0 22.002260 4.005342 4.000000 0.128099 0.447682 -1 +0 21.502117 4.991519 6.000000 0.126965 0.434786 -1 +0 21.506847 4.546627 4.000000 0.126976 0.440604 -1 +0 18.494793 4.993823 6.000000 0.122100 0.434200 -1 +0 7.507869 -6.010023 6.000000 0.097274 0.573633 -1 +0 7.534371 -6.462548 4.000000 0.097334 0.579549 -1 +0 4.530946 -6.002331 6.000000 0.090529 0.573532 -1 +0 4.497674 -6.517594 4.000000 0.090453 0.580270 -1 +0 0.515562 -10.010023 6.000000 0.081431 0.625937 -1 +0 -0.506554 -10.002331 6.000000 0.079114 0.625836 -1 +0 -0.513281 -10.449017 4.000000 0.079099 0.631677 -1 +0 -4.498861 -6.002331 6.000000 0.070068 0.573532 -1 +0 -7.476655 -6.006133 6.000000 0.063321 0.573581 -1 +0 -7.474803 -6.453374 4.000000 0.063325 0.579429 -1 +0 -18.496527 5.005362 6.000000 0.038421 0.433492 -1 +0 -21.486635 5.000965 6.000000 0.033316 0.434663 -1 +0 -21.474804 4.555800 4.000000 0.033342 0.440484 -1 +0 -22.497412 4.003303 6.000000 0.031025 0.447708 -1 +0 -21.988565 3.996168 4.000000 0.032178 0.447802 -1 +0 -22.497414 1.011768 6.000000 0.030886 0.481258 -1 +0 -21.997740 0.996168 4.000000 0.032018 0.481462 -1 +0 -21.997740 0.996168 -4.000000 0.032018 0.481462 -1 +0 -21.988565 3.996168 -4.000000 0.032178 0.447802 -1 +0 -18.493153 4.537452 -4.000000 0.038428 0.439610 -1 +0 -21.474804 4.555800 -4.000000 0.033342 0.440484 -1 +0 -0.502327 -21.471722 -4.000000 0.079124 0.775811 -1 +0 -0.513281 -10.449017 -4.000000 0.079099 0.631677 -1 +0 0.511512 -10.473810 -4.000000 0.081421 0.632002 -1 +0 0.506847 -21.462547 -4.000000 0.081411 0.775691 -1 +0 -7.474803 -6.453374 -4.000000 0.063325 0.579429 -1 +0 -4.502326 -6.471723 -4.000000 0.070060 0.579670 -1 +0 4.497674 -6.517594 -4.000000 0.090453 0.580270 -1 +0 7.534371 -6.462548 -4.000000 0.097334 0.579549 -1 +0 22.011435 0.996168 -4.000000 0.128259 0.482019 -1 +0 18.506847 4.528278 -4.000000 0.122127 0.440287 -1 +0 21.506847 4.546627 -4.000000 0.126976 0.440604 -1 +0 22.002260 4.005342 -4.000000 0.128099 0.447682 -1 +0 -0.467116 6.575283 -4.000001 0.078449 0.409648 -1 +0 -2.999583 9.042815 -4.000001 0.073465 0.376800 -1 +0 3.013403 9.042815 -4.000001 0.087090 0.376800 -1 +0 0.545871 6.536322 -4.000001 0.082192 0.410099 -1 +0 -2.986597 19.042814 -4.000001 0.073495 0.246039 -1 +0 -1.506077 20.614243 -4.000001 0.076850 0.225491 -1 +0 1.493923 20.614243 -4.000001 0.083647 0.225491 -1 +0 3.013403 19.042814 -4.000001 0.087090 0.246039 -1 +0 -2.999583 9.081276 4.000001 0.073465 0.376297 -1 +0 1.493923 20.652702 4.000001 0.083647 0.224988 -1 +0 -3.484221 19.005363 -5.999992 0.072367 0.246529 -1 +0 -1.478017 20.995438 -5.999992 0.076913 0.220507 -1 +0 1.491741 20.995438 -5.999992 0.083642 0.220507 -1 +0 3.514073 18.989235 -5.999992 0.088225 0.246740 -1 +0 3.517759 8.995436 -5.999992 0.088233 0.377420 -1 +0 0.527650 6.000967 -5.999992 0.082126 0.416299 -1 +0 -0.476883 6.005363 -5.999992 0.078414 0.416249 -1 +0 -3.478692 9.015251 -5.999992 0.072380 0.377160 -1 +0 0.526949 -7.493545 -4.000000 0.081456 0.604724 -1 +0 -0.516910 -7.467229 -4.000000 0.079091 0.604379 -1 +0 -2.999367 -5.011089 -4.000000 0.073466 0.566138 -1 +0 3.000633 -4.993546 -4.000000 0.087061 0.565909 -1 +0 -3.004789 4.996567 -4.000000 0.073454 0.429710 -1 +0 -0.486608 2.542022 -4.000000 0.077629 0.456794 -1 +0 0.522483 2.523840 -4.000000 0.082560 0.457032 -1 +0 2.995759 4.994668 -4.000000 0.087050 0.429734 -1 +0 0.515562 -7.994638 -5.999992 0.081431 0.611277 -1 +0 -0.498861 -7.986946 -5.999992 0.079132 0.611176 -1 +0 -3.498861 -4.986946 -5.999992 0.072334 0.565822 -1 +0 -3.474295 5.996571 -5.999992 0.072390 0.416633 -1 +0 -0.472487 3.005361 -5.999992 0.077660 0.450736 -1 +0 0.522155 2.996570 -5.999992 0.082559 0.450850 -1 +0 3.507869 6.000966 -5.999992 0.088211 0.416576 -1 +0 3.492485 -4.994639 -5.999992 0.088176 0.565923 -1 +0 -2.999367 -5.011089 4.000000 0.073466 0.566138 -1 +0 0.522483 2.523840 4.000000 0.082560 0.457032 -1 +0 -18.493153 4.537452 4.000000 0.038428 0.439610 -1 +0 -0.502327 -21.471722 4.000000 0.079124 0.775811 -1 +0 0.511512 -10.473810 4.000000 0.081421 0.632002 -1 +0 -4.502326 -6.471723 4.000000 0.070060 0.579670 -1 +0 18.506847 4.528278 4.000000 0.122127 0.440287 -1 +0 0.539625 -21.973946 -5.999992 0.081485 0.782379 -1 +0 -0.571486 -22.010983 -5.999992 0.078967 0.782863 -1 +0 -22.497414 1.011768 -5.999992 0.030886 0.481258 -1 +0 -22.497412 4.003303 -5.999992 0.031025 0.447708 -1 +0 -21.486635 5.000965 -5.999992 0.033316 0.434663 -1 +0 -18.496527 5.005362 -5.999992 0.038421 0.433492 -1 +0 -7.476655 -6.006133 -5.999992 0.063321 0.573581 -1 +0 -4.498861 -6.002331 -5.999992 0.070068 0.573532 -1 +0 -0.506554 -10.002331 -5.999992 0.079114 0.625836 -1 +0 0.515562 -10.010023 -5.999992 0.081431 0.625937 -1 +0 4.530946 -6.002331 -5.999992 0.090529 0.573532 -1 +0 7.507869 -6.010023 -5.999992 0.097274 0.573633 -1 +0 18.494793 4.993823 -5.999992 0.122100 0.434200 -1 +0 21.502117 4.991519 -5.999992 0.126965 0.434786 -1 +0 22.477116 4.003556 -5.999992 0.129174 0.447705 -1 +0 22.490080 0.991055 -5.999992 0.129343 0.482086 -1 +0 27.495455 -0.000695 6.000000 0.139989 0.500622 -1 +0 27.501657 5.992133 6.000000 0.140002 0.422259 -1 +0 -27.479452 5.977798 6.000000 0.020154 0.421890 -1 +0 -27.479452 0.022464 6.000000 0.020154 0.499762 -1 +0 -27.479452 0.022464 -5.999992 0.020154 0.499762 -1 +0 -27.479452 5.977798 -5.999992 0.020154 0.421890 -1 +0 27.495455 -0.000695 -5.999992 0.139989 0.500622 -1 +0 27.501657 5.992133 -5.999992 0.140002 0.422259 -1 +132 +-0.426003 0.735887 0.526300 +-0.233622 0.933613 0.271639 +-0.840566 0.491072 0.228685 +-0.417847 0.108732 0.901987 +-0.941515 -0.251044 0.224779 +-0.757997 -0.443457 0.478316 +-0.381686 -0.910051 0.161625 +0.508190 -0.847889 0.151087 +0.164191 -0.601932 0.781486 +0.901153 -0.379340 0.209819 +0.835235 -0.343913 0.429077 +0.896069 0.375877 0.236171 +0.374691 0.886508 0.271497 +0.303934 0.709402 0.635904 +0.258768 0.936216 0.237776 +-0.497396 0.841970 0.209006 +-0.175843 0.691709 0.700441 +-0.900271 0.374705 0.221605 +-0.553527 0.230042 0.800430 +-0.792205 -0.442883 0.419841 +0.198560 -0.647221 0.735988 +0.370703 -0.903729 0.214134 +-0.379445 -0.900750 0.211355 +-0.267234 -0.635861 0.724063 +-0.258962 -0.891115 0.372629 +0.571732 -0.320158 0.755394 +0.900007 0.376839 0.219045 +0.444512 0.743294 0.499923 +0.375212 0.894913 0.241549 +-0.399682 0.886488 0.233225 +-0.241609 0.544018 0.803535 +-0.850800 0.481857 0.209650 +-0.493354 0.125175 0.860775 +-0.942194 -0.249067 0.224134 +-0.696036 -0.345465 0.629434 +-0.513100 -0.837067 0.189863 +-0.193002 -0.697426 0.690179 +0.377837 -0.901832 0.209617 +0.375427 -0.902918 0.209271 +0.268558 -0.635314 0.724053 +0.253267 -0.940355 0.227132 +0.373504 -0.627253 0.683409 +0.368185 -0.905916 0.209181 +-0.380733 -0.902178 0.202776 +-0.312068 -0.732110 0.605498 +-0.377631 -0.902363 0.207692 +-0.376334 -0.904227 0.201855 +-0.306911 -0.733768 0.606126 +-0.377530 -0.902841 0.205790 +0.374445 -0.904627 0.203569 +0.350872 -0.823859 0.445136 +0.848189 -0.485865 0.210973 +0.632921 -0.140551 0.761352 +0.941860 0.240138 0.235017 +0.629501 0.356219 0.690533 +0.694496 0.177608 -0.697230 +0.586021 -0.294361 -0.754938 +-0.263615 -0.446117 -0.855270 +0.229548 -0.830755 -0.507103 +0.177857 0.424208 -0.887927 +-0.240617 -0.559147 -0.793384 +0.260430 -0.640802 -0.722183 +-0.150200 0.344553 -0.926673 +-0.185852 -0.700887 -0.688634 +-0.373313 -0.631262 -0.679813 +0.235541 -0.551850 -0.799988 +0.268558 -0.635314 -0.724053 +-0.558017 0.224228 -0.798961 +0.234425 -0.556459 -0.797119 +-0.313581 -0.728305 -0.609293 +-0.642324 -0.210083 -0.737079 +0.306530 0.716441 -0.626699 +0.577698 0.154752 -0.801447 +-0.378603 0.221494 -0.898666 +-0.289905 0.722738 -0.627379 +0.757912 -0.438868 -0.482663 +0.191605 -0.440985 -0.876823 +-0.191682 -0.713712 -0.673701 +-0.829575 -0.344609 -0.439374 +0.428936 0.181684 0.884876 +-0.244206 -0.573288 0.782115 +0.941337 -0.250330 -0.226316 +0.383959 -0.906209 -0.177091 +-0.503088 -0.847547 -0.169017 +-0.899997 -0.379100 -0.215146 +-0.938372 0.246915 -0.241850 +-0.367118 0.897412 -0.244697 +0.375924 0.890688 -0.255648 +0.839355 0.498481 -0.216794 +-0.175843 0.691709 -0.700442 +0.444512 0.743293 -0.499924 +0.490340 0.130046 -0.861774 +-0.553526 0.230042 -0.800431 +-0.189592 -0.651097 -0.734933 +-0.183159 -0.436075 -0.881074 +0.177328 -0.699077 -0.692709 +0.198560 -0.647221 -0.735989 +-0.497396 0.841970 -0.209006 +0.258768 0.936216 -0.237777 +0.842085 0.497804 -0.207568 +0.793869 -0.443083 -0.416472 +-0.378237 -0.899805 -0.217459 +0.495488 -0.844803 -0.201987 +-0.792204 -0.442883 -0.419843 +-0.900271 0.374705 -0.221605 +0.349363 0.147326 0.925332 +0.226644 -0.557256 0.798810 +-0.147967 -0.352058 0.924208 +0.104073 0.244752 0.963984 +0.175034 -0.436327 0.882600 +-0.233891 -0.556756 0.797068 +0.234425 -0.556460 0.797118 +-0.394645 0.888735 -0.233248 +0.368762 0.894189 -0.253853 +0.848431 0.481177 -0.220528 +0.938303 -0.250853 -0.238035 +0.508114 -0.838633 -0.196251 +-0.250212 -0.943696 -0.216407 +-0.497086 -0.846376 -0.191191 +-0.250545 -0.943250 -0.217960 +-0.383686 -0.900106 -0.206384 +0.372887 -0.904057 -0.208891 +0.378857 -0.900080 -0.215227 +0.375427 -0.902917 -0.209272 +0.377837 -0.901831 -0.209618 +-0.380618 -0.902859 -0.199938 +-0.905945 -0.366727 -0.211603 +-0.905726 0.363690 -0.217691 +-0.341889 0.000354 0.939740 +0.342244 0.000000 0.939611 +0.342243 0.000000 -0.939612 +-0.341888 0.000354 -0.939741 +184 +0 0 1 2 0 1 2 1 +0 3 2 4 3 2 4 1 +0 5 4 6 5 4 6 1 +0 6 7 8 6 7 8 1 +0 7 9 10 7 9 10 1 +0 10 9 11 10 9 11 1 +0 11 12 13 11 12 13 1 +0 13 12 1 13 12 1 1 +0 14 15 16 14 15 16 1 +0 15 17 18 15 17 18 1 +0 18 17 19 18 17 19 1 +0 20 19 21 20 19 21 1 +0 21 22 23 21 22 23 1 +0 23 22 24 23 22 24 1 +0 25 24 26 25 24 26 1 +0 26 14 27 26 14 27 1 +0 28 29 30 28 29 30 1 +0 30 29 31 30 29 31 1 +0 32 31 33 32 31 33 1 +0 34 33 35 34 33 35 1 +0 36 35 37 36 35 37 1 +0 37 38 39 37 38 39 1 +0 39 38 40 39 38 40 1 +0 41 40 42 41 40 42 1 +0 42 43 44 42 43 44 1 +0 44 43 45 44 43 45 1 +0 45 46 47 45 46 47 1 +0 47 46 48 47 46 48 1 +0 48 49 50 48 49 50 1 +0 50 49 51 50 49 51 1 +0 52 51 53 52 51 53 1 +0 54 53 28 54 53 28 1 +0 55 56 57 55 56 57 1 +0 57 56 58 57 56 58 1 +0 59 55 57 59 55 57 1 +0 59 60 61 59 60 61 1 +0 61 62 59 61 62 59 1 +0 59 57 63 59 57 63 1 +0 63 64 59 63 64 59 1 +0 59 64 60 59 64 60 1 +0 61 65 62 61 65 62 1 +0 62 65 66 62 65 66 1 +0 67 62 66 67 62 66 1 +0 66 68 67 66 68 67 1 +0 67 68 69 67 68 69 1 +0 69 70 67 69 70 67 1 +0 71 72 73 71 72 73 1 +0 73 74 71 73 74 71 1 +0 72 75 76 72 75 76 1 +0 77 78 73 77 78 73 1 +0 73 72 76 73 72 76 1 +0 76 77 73 76 77 73 1 +0 3 79 13 3 79 13 1 +0 13 0 3 13 0 3 1 +0 8 10 79 8 10 79 1 +0 3 5 80 3 5 80 1 +0 8 79 3 8 79 3 1 +0 3 80 8 3 80 8 1 +0 2 3 0 2 3 0 1 +0 4 5 3 4 5 3 1 +0 6 80 5 6 80 5 1 +0 8 80 6 8 80 6 1 +0 10 8 7 10 8 7 1 +0 11 79 10 11 79 10 1 +0 13 79 11 13 79 11 1 +0 1 0 13 1 0 13 1 +0 75 81 82 75 81 82 1 +0 82 76 75 82 76 75 1 +0 82 83 77 82 83 77 1 +0 77 76 82 77 76 82 1 +0 83 84 78 83 84 78 1 +0 78 77 83 78 77 83 1 +0 78 84 85 78 84 85 1 +0 85 73 78 85 73 78 1 +0 73 85 86 73 85 86 1 +0 86 74 73 86 74 73 1 +0 86 87 71 86 87 71 1 +0 71 74 86 71 74 86 1 +0 71 87 88 71 87 88 1 +0 88 72 71 88 72 71 1 +0 72 88 81 72 88 81 1 +0 81 75 72 81 75 72 1 +0 89 90 91 89 90 91 1 +0 89 91 92 89 91 92 1 +0 91 93 94 91 93 94 1 +0 95 96 92 95 96 92 1 +0 92 91 94 92 91 94 1 +0 92 94 95 92 94 95 1 +0 89 97 98 89 97 98 1 +0 98 90 89 98 90 89 1 +0 90 98 99 90 98 99 1 +0 90 99 91 90 99 91 1 +0 91 99 100 91 99 100 1 +0 100 93 91 100 93 91 1 +0 101 94 93 101 94 93 1 +0 93 100 101 93 100 101 1 +0 95 94 101 95 94 101 1 +0 101 102 95 101 102 95 1 +0 96 95 102 96 95 102 1 +0 102 103 96 102 103 96 1 +0 103 104 92 103 104 92 1 +0 92 96 103 92 96 103 1 +0 92 104 97 92 104 97 1 +0 97 89 92 97 89 92 1 +0 105 27 16 105 27 16 1 +0 18 105 16 18 105 16 1 +0 23 25 105 23 25 105 1 +0 18 20 106 18 20 106 1 +0 23 105 18 23 105 18 1 +0 106 23 18 106 23 18 1 +0 16 27 14 16 27 14 1 +0 15 18 16 15 18 16 1 +0 19 20 18 19 20 18 1 +0 21 106 20 21 106 20 1 +0 23 106 21 23 106 21 1 +0 24 25 23 24 25 23 1 +0 26 105 25 26 105 25 1 +0 27 105 26 27 105 26 1 +0 107 52 54 107 52 54 1 +0 50 52 107 50 52 107 1 +0 107 54 108 107 54 108 1 +0 109 44 108 109 44 108 1 +0 108 30 109 108 30 109 1 +0 47 107 108 47 107 108 1 +0 108 110 47 108 110 47 1 +0 44 110 108 44 110 108 1 +0 30 41 109 30 41 109 1 +0 39 41 30 39 41 30 1 +0 39 30 32 39 30 32 1 +0 32 111 39 32 111 39 1 +0 36 111 32 36 111 32 1 +0 32 34 36 32 34 36 1 +0 30 108 28 30 108 28 1 +0 31 32 30 31 32 30 1 +0 33 34 32 33 34 32 1 +0 35 36 34 35 36 34 1 +0 37 111 36 37 111 36 1 +0 39 111 37 39 111 37 1 +0 40 41 39 40 41 39 1 +0 109 41 42 109 41 42 1 +0 44 109 42 44 109 42 1 +0 45 110 44 45 110 44 1 +0 47 110 45 47 110 45 1 +0 48 107 47 48 107 47 1 +0 50 107 48 50 107 48 1 +0 51 52 50 51 52 50 1 +0 53 54 52 53 54 52 1 +0 28 108 54 28 108 54 1 +0 112 113 59 112 113 59 1 +0 59 62 112 59 62 112 1 +0 114 55 59 114 55 59 1 +0 59 113 114 59 113 114 1 +0 55 114 115 55 114 115 1 +0 115 56 55 115 56 55 1 +0 56 115 116 56 115 116 1 +0 116 58 56 116 58 56 1 +0 58 116 117 58 116 117 1 +0 117 57 58 117 57 58 1 +0 57 117 118 57 117 118 1 +0 118 63 57 118 63 57 1 +0 63 118 119 63 118 119 1 +0 64 63 119 64 63 119 1 +0 120 60 64 120 60 64 1 +0 119 120 64 119 120 64 1 +0 61 60 120 61 60 120 1 +0 120 121 61 120 121 61 1 +0 61 121 122 61 121 122 1 +0 122 65 61 122 65 61 1 +0 66 65 122 66 65 122 1 +0 122 123 66 122 123 66 1 +0 66 123 124 66 123 124 1 +0 124 68 66 124 68 66 1 +0 69 68 124 69 68 124 1 +0 124 125 69 124 125 69 1 +0 126 70 69 126 70 69 1 +0 69 125 126 69 125 126 1 +0 126 127 67 126 127 67 1 +0 67 70 126 67 70 126 1 +0 67 127 112 67 127 112 1 +0 112 62 67 112 62 67 1 +0 128 129 34 128 128 34 1 +0 130 131 52 129 129 52 1 +0 132 133 56 130 130 56 1 +0 134 70 135 131 70 131 1 +"scroller" 0 1 +96 +0 -1.478017 20.995436 6.000000 0.076939 0.215925 -1 +0 1.491741 20.995436 6.000000 0.083416 0.215925 -1 +0 2.549132 27.005108 6.000000 0.085722 0.136089 -1 +0 -2.470720 27.005108 6.000000 0.074773 0.136089 -1 +0 3.514073 18.989233 6.000000 0.087827 0.240642 -1 +0 7.480893 22.005108 6.000000 0.096479 0.201305 -1 +0 -7.464517 22.005110 6.000000 0.063881 0.201305 -1 +0 -3.484221 19.005362 6.000000 0.072382 0.241157 -1 +0 3.517759 8.995436 6.000000 0.087745 0.381147 -1 +0 -3.478692 9.015251 6.000000 0.072303 0.381614 -1 +0 -0.476883 6.005363 6.000000 0.077857 0.415795 -1 +0 -3.474295 5.996571 6.000000 0.072223 0.416635 -1 +0 -0.472487 3.005361 6.000000 0.077713 0.449122 -1 +0 0.522155 2.996570 6.000000 0.082580 0.449237 -1 +0 0.527650 6.000967 6.000000 0.082488 0.415853 -1 +0 3.507869 6.000966 6.000000 0.087724 0.416578 -1 +0 -0.506554 -10.002331 6.000000 0.077611 0.635467 -1 +0 0.515562 -10.010023 6.000000 0.082824 0.635567 -1 +0 0.515562 -7.994639 6.000000 0.081197 0.612182 -1 +0 -0.498861 -7.986947 6.000000 0.078984 0.612080 -1 +0 7.487095 -0.006020 6.000000 0.096403 0.494928 -1 +0 -7.470722 0.000184 6.000000 0.063777 0.494848 -1 +0 -3.498861 -4.986946 6.000000 0.072169 0.572951 -1 +0 3.492485 -4.994639 6.000000 0.087689 0.573052 -1 +0 -4.498861 -6.002331 6.000000 0.068903 0.583294 -1 +0 4.530946 -6.002331 6.000000 0.091582 0.583294 -1 +0 7.507869 -6.010023 6.000000 0.098076 0.583394 -1 +0 -7.476655 -6.006133 6.000000 0.062408 0.583344 -1 +0 -18.496527 5.005362 6.000000 0.038553 0.433916 -1 +0 -17.519123 9.995950 6.000000 0.041860 0.364471 -1 +0 -21.486635 5.000965 6.000000 0.033025 0.433973 -1 +0 -23.502296 9.990573 6.000000 0.028809 0.364541 -1 +0 -27.479452 5.977798 6.000000 0.020135 0.416880 -1 +0 -22.497412 4.003303 6.000000 0.030821 0.446985 -1 +0 -27.479452 0.022464 6.000000 0.020135 0.494557 -1 +0 -22.497414 1.011768 6.000000 0.030821 0.486005 -1 +0 -0.491594 -27.002575 6.000000 0.079000 0.866634 -1 +0 -0.571486 -22.010983 6.000000 0.078826 0.781945 -1 +0 0.540664 -26.992649 6.000000 0.081251 0.866504 -1 +0 0.539625 -21.973946 6.000000 0.081249 0.781461 -1 +0 27.495455 -0.000695 6.000000 0.140046 0.494859 -1 +0 22.490080 0.991055 6.000000 0.129037 0.485550 -1 +0 22.477116 4.003556 6.000000 0.129009 0.446257 -1 +0 27.501657 5.992133 6.000000 0.140059 0.416693 -1 +0 23.485622 10.001644 6.000000 0.131299 0.364396 -1 +0 21.502117 4.991519 6.000000 0.126882 0.433371 -1 +0 17.513138 10.005877 6.000000 0.118271 0.364341 -1 +0 18.494793 4.993823 6.000000 0.121407 0.433341 -1 +0 2.549132 27.005108 -5.999992 0.085722 0.136089 -1 +0 1.491741 20.995438 -5.999992 0.083416 0.215925 -1 +0 -1.478017 20.995438 -5.999992 0.076939 0.215925 -1 +0 -2.470720 27.005108 -5.999992 0.074773 0.136089 -1 +0 7.480893 22.005108 -5.999992 0.096479 0.201305 -1 +0 3.514073 18.989235 -5.999992 0.087827 0.240642 -1 +0 -3.484221 19.005363 -5.999992 0.072382 0.241157 -1 +0 -7.464517 22.005112 -5.999992 0.063881 0.201305 -1 +0 3.517759 8.995436 -5.999992 0.087745 0.381147 -1 +0 -3.478692 9.015251 -5.999992 0.072303 0.381614 -1 +0 -3.474295 5.996571 -5.999992 0.072223 0.416635 -1 +0 -0.476883 6.005363 -5.999992 0.077857 0.415795 -1 +0 -0.472487 3.005361 -5.999992 0.077713 0.449122 -1 +0 0.527650 6.000967 -5.999992 0.082488 0.415853 -1 +0 0.522155 2.996570 -5.999992 0.082580 0.449237 -1 +0 3.507869 6.000966 -5.999992 0.087724 0.416578 -1 +0 0.515562 -7.994638 -5.999992 0.081197 0.612182 -1 +0 0.515562 -10.010023 -5.999992 0.082824 0.635567 -1 +0 -0.506554 -10.002331 -5.999992 0.077611 0.635467 -1 +0 -0.498861 -7.986946 -5.999992 0.078984 0.612080 -1 +0 7.487095 -0.006020 -5.999992 0.096403 0.494928 -1 +0 -7.470722 0.000184 -5.999992 0.063777 0.494848 -1 +0 -3.498861 -4.986946 -5.999992 0.072169 0.572951 -1 +0 3.492485 -4.994639 -5.999992 0.087689 0.573052 -1 +0 -4.498861 -6.002331 -5.999992 0.068903 0.583294 -1 +0 4.530946 -6.002331 -5.999992 0.091582 0.583294 -1 +0 7.507869 -6.010023 -5.999992 0.098076 0.583394 -1 +0 -7.476655 -6.006133 -5.999992 0.062408 0.583344 -1 +0 -18.496527 5.005362 -5.999992 0.038553 0.433916 -1 +0 -17.519123 9.995950 -5.999992 0.041860 0.364471 -1 +0 -21.486635 5.000965 -5.999992 0.033025 0.433973 -1 +0 -23.502296 9.990573 -5.999992 0.028809 0.364541 -1 +0 -27.479452 5.977798 -5.999992 0.020135 0.416880 -1 +0 -22.497412 4.003303 -5.999992 0.030821 0.446985 -1 +0 -27.479452 0.022464 -5.999992 0.020135 0.494557 -1 +0 -22.497414 1.011768 -5.999992 0.030821 0.486005 -1 +0 -0.571486 -22.010983 -5.999992 0.078826 0.781945 -1 +0 -0.491594 -27.002575 -5.999992 0.079000 0.866634 -1 +0 0.540664 -26.992649 -5.999992 0.081251 0.866504 -1 +0 0.539625 -21.973946 -5.999992 0.081249 0.781461 -1 +0 22.490080 0.991055 -5.999992 0.129037 0.485550 -1 +0 27.495455 -0.000695 -5.999992 0.140046 0.494859 -1 +0 22.477116 4.003556 -5.999992 0.129009 0.446257 -1 +0 27.501657 5.992133 -5.999992 0.140059 0.416693 -1 +0 23.485622 10.001644 -5.999992 0.131299 0.364396 -1 +0 21.502117 4.991519 -5.999992 0.126882 0.433371 -1 +0 17.513138 10.005877 -5.999992 0.118271 0.364341 -1 +0 18.494793 4.993823 -5.999992 0.121407 0.433341 -1 +2 +0.000000 0.000000 1.000000 +0.000000 0.000000 -1.000000 +157 +0 0 1 2 0 0 0 1 +0 3 0 2 0 0 0 1 +0 1 4 5 0 0 0 1 +0 5 2 1 0 0 0 1 +0 0 6 7 0 0 0 1 +0 0 3 6 0 0 0 1 +0 4 8 5 0 0 0 1 +0 9 7 6 0 0 0 1 +0 10 9 11 0 0 0 1 +0 11 12 10 0 0 0 1 +0 12 13 14 0 0 0 1 +0 14 10 12 0 0 0 1 +0 15 14 13 0 0 0 1 +0 15 8 14 0 0 0 1 +0 16 17 18 0 0 0 1 +0 18 19 16 0 0 0 1 +0 8 15 20 0 0 0 1 +0 20 5 8 0 0 0 1 +0 21 11 9 0 0 0 1 +0 9 6 21 0 0 0 1 +0 22 11 21 0 0 0 1 +0 23 20 15 0 0 0 1 +0 24 16 19 0 0 0 1 +0 19 22 24 0 0 0 1 +0 18 17 25 0 0 0 1 +0 25 23 18 0 0 0 1 +0 25 26 20 0 0 0 1 +0 20 23 25 0 0 0 1 +0 24 22 21 0 0 0 1 +0 21 27 24 0 0 0 1 +0 28 27 21 0 0 0 1 +0 21 29 28 0 0 0 1 +0 30 28 29 0 0 0 1 +0 30 29 31 0 0 0 1 +0 31 32 30 0 0 0 1 +0 33 30 32 0 0 0 1 +0 32 34 33 0 0 0 1 +0 33 34 35 0 0 0 1 +0 34 36 37 0 0 0 1 +0 37 35 34 0 0 0 1 +0 37 36 38 0 0 0 1 +0 38 39 37 0 0 0 1 +0 38 40 41 0 0 0 1 +0 41 39 38 0 0 0 1 +0 42 41 40 0 0 0 1 +0 40 43 42 0 0 0 1 +0 42 43 44 0 0 0 1 +0 44 45 42 0 0 0 1 +0 45 44 46 0 0 0 1 +0 45 46 47 0 0 0 1 +0 46 20 26 0 0 0 1 +0 26 47 46 0 0 0 1 +0 48 49 50 1 1 1 1 +0 48 50 51 1 1 1 1 +0 52 53 49 1 1 1 1 +0 49 48 52 1 1 1 1 +0 54 55 50 1 1 1 1 +0 55 51 50 1 1 1 1 +0 52 56 53 1 1 1 1 +0 55 54 57 1 1 1 1 +0 58 57 59 1 1 1 1 +0 59 60 58 1 1 1 1 +0 61 62 60 1 1 1 1 +0 60 59 61 1 1 1 1 +0 62 61 63 1 1 1 1 +0 61 56 63 1 1 1 1 +0 64 65 66 1 1 1 1 +0 66 67 64 1 1 1 1 +0 68 63 56 1 1 1 1 +0 56 52 68 1 1 1 1 +0 57 58 69 1 1 1 1 +0 69 55 57 1 1 1 1 +0 69 58 70 1 1 1 1 +0 63 68 71 1 1 1 1 +0 67 66 72 1 1 1 1 +0 72 70 67 1 1 1 1 +0 73 65 64 1 1 1 1 +0 64 71 73 1 1 1 1 +0 68 74 73 1 1 1 1 +0 73 71 68 1 1 1 1 +0 69 70 72 1 1 1 1 +0 72 75 69 1 1 1 1 +0 69 75 76 1 1 1 1 +0 76 77 69 1 1 1 1 +0 77 76 78 1 1 1 1 +0 79 77 78 1 1 1 1 +0 78 80 79 1 1 1 1 +0 80 78 81 1 1 1 1 +0 81 82 80 1 1 1 1 +0 83 82 81 1 1 1 1 +0 84 85 82 1 1 1 1 +0 82 83 84 1 1 1 1 +0 86 85 84 1 1 1 1 +0 84 87 86 1 1 1 1 +0 88 89 86 1 1 1 1 +0 86 87 88 1 1 1 1 +0 89 88 90 1 1 1 1 +0 90 91 89 1 1 1 1 +0 92 91 90 1 1 1 1 +0 90 93 92 1 1 1 1 +0 94 92 93 1 1 1 1 +0 95 94 93 1 1 1 1 +0 74 68 94 1 1 1 1 +0 94 95 74 1 1 1 1 +0 84 83 83 1 1 1 1 +0 67 70 58 1 1 1 1 +0 67 58 60 1 1 1 1 +0 62 63 64 1 1 1 1 +0 64 63 71 1 1 1 1 +0 67 60 64 1 1 1 1 +0 64 60 62 1 1 1 1 +0 57 54 50 1 1 1 1 +0 50 59 57 1 1 1 1 +0 56 49 53 1 1 1 1 +0 56 61 49 1 1 1 1 +0 50 49 61 1 1 1 1 +0 61 59 50 1 1 1 1 +0 84 75 72 1 1 1 1 +0 72 66 84 1 1 1 1 +0 87 65 73 1 1 1 1 +0 73 74 87 1 1 1 1 +0 87 84 66 1 1 1 1 +0 66 65 87 1 1 1 1 +0 75 84 83 1 1 1 1 +0 87 74 88 1 1 1 1 +0 74 95 88 1 1 1 1 +0 88 95 93 1 1 1 1 +0 88 93 90 1 1 1 1 +0 75 83 76 1 1 1 1 +0 83 81 76 1 1 1 1 +0 76 81 78 1 1 1 1 +0 18 23 15 0 0 0 1 +0 15 13 18 0 0 0 1 +0 19 12 11 0 0 0 1 +0 19 11 22 0 0 0 1 +0 19 18 13 0 0 0 1 +0 13 12 19 0 0 0 1 +0 10 14 1 0 0 0 1 +0 10 1 0 0 0 0 1 +0 1 14 8 0 0 0 1 +0 8 4 1 0 0 0 1 +0 7 9 0 0 0 0 1 +0 0 9 10 0 0 0 1 +0 37 39 17 0 0 0 1 +0 17 16 37 0 0 0 1 +0 24 37 16 0 0 0 1 +0 39 25 17 0 0 0 1 +0 39 26 25 0 0 0 1 +0 24 27 37 0 0 0 1 +0 37 27 35 0 0 0 1 +0 35 27 28 0 0 0 1 +0 35 28 33 0 0 0 1 +0 33 28 30 0 0 0 1 +0 39 41 26 0 0 0 1 +0 26 41 47 0 0 0 1 +0 47 41 45 0 0 0 1 +0 45 41 42 0 0 0 1 diff --git a/NoteSkins/dance/midi-note-3d/metrics.ini b/NoteSkins/dance/midi-note-3d/metrics.ini new file mode 100644 index 0000000000..8690f47b0e --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/metrics.ini @@ -0,0 +1,85 @@ +[Global] +FallbackNoteSkin=default + +[NoteDisplay] +TapNoteAnimationIsVivid=0 +DrawHoldHeadForTapsOnSameRow=1 +TapNoteAnimationLength=4 +TapAdditionAnimationLength=4 +TapMineAnimationLength=1 +TapLiftAnimationLength=4 +HoldHeadAnimationLength=4 // doesn't matter. Only 1 frame anyway. +HoldTopCapAnimationLength=4 // doesn't matter. Only 1 frame anyway. +HoldBottomCapAnimationLength=4 // doesn't matter. Only 1 frame anyway. +HoldBodyAnimationLength=4 // doesn't matter. Only 1 frame anyway. +HoldTailAnimationLength=4 // doesn't matter. Only 1 frame anyway. + +StartDrawingHoldBodyOffsetFromHead=0 +StopDrawingHoldBodyOffsetFromTail=0 + +HoldLetGoGrayPercent=0.125 + +ReverseDrawOrder=1101 +HoldHeadIsAboveWavyParts=1 +HoldTailIsAboveWavyParts=1 +TapNoteAdditionTextureCoordOffsetX=0 +TapNoteAdditionTextureCoordOffsetY=0 +FlipHeadAndTailWhenReverse=1 +FlipHoldBodyWhenReverse=1 +TopHoldAnchorWhenReverse=1 + +TapNoteNoteColorTextureCoordSpacingX=0.12 +TapNoteNoteColorTextureCoordSpacingY=0 + +TapFakeNoteColorTextureCoordSpacingX=0.12 +TapFakeNoteColorTextureCoordSpacingY=0 + +HoldHeadNoteColorTextureCoordSpacingX=0.12 +HoldHeadNoteColorTextureCoordSpacingY=0 + +[GhostArrowDim] +NoneCommand= +HitMineCommand=blend,'BlendMode_Add';diffuse,1,1,1,0.875;zoom,1;rotationz,0;linear,0.3;rotationz,90;linear,0.3;rotationz,180;diffusealpha,0 +MissCommand=blend,'BlendMode_Add'; +W5Command=blend,'BlendMode_Add';diffuse,0.8,0.0,0.6,0.875;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0 +W4Command=blend,'BlendMode_Add';diffuse,0.3,0.8,1.0,0.875;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0 +W3Command=blend,'BlendMode_Add';diffuse,0.0,1.0,0.4,0.875;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0 +W2Command=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 +W1Command=blend,'BlendMode_Add';diffuse,1.0,1.0,1.0,0.875;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0 +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 + +[GhostArrowBright] +NoneCommand=blend,'BlendMode_Add'; +HitMineCommand=blend,'BlendMode_Add';diffuse,1,1,1,0.875;zoom,1;rotationz,0;linear,0.3;rotationz,90;linear,0.3;rotationz,180;diffusealpha,0 +MissCommand=blend,'BlendMode_Add'; +W5Command=blend,'BlendMode_Add';diffuse,0.8,0.0,0.6,0.875;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0 +W4Command=blend,'BlendMode_Add';diffuse,0.3,0.8,1.0,0.875;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0 +W3Command=blend,'BlendMode_Add';diffuse,0.0,1.0,0.4,0.875;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0 +W2Command=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 +W1Command=blend,'BlendMode_Add';diffuse,1.0,1.0,1.0,0.875;zoom,1;linear,0.06;zoom,1.1;linear,0.06;diffusealpha,0 +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 + +[ReceptorArrow] +W3Command=stoptweening;zoom,0.85;linear,0.12;zoom,1 +W2Command=stoptweening;zoom,0.85;linear,0.12;zoom,1 +W1Command=stoptweening;zoom,0.85;linear,0.12;zoom,1 +InitCommand= +NoneCommand=stoptweening;zoom,0.85;linear,0.12;zoom,1 +PressCommand=stoptweening;zoom,0.85;linear,0.12;zoom,1 +[ReceptorArrowOverlay] +W3Command=stoptweening;zoom,0.85;linear,0.12;zoom,1 +W2Command=stoptweening;zoom,0.85;linear,0.12;zoom,1 +W1Command=stoptweening;zoom,0.85;linear,0.12;zoom,1 +InitCommand=blend,"BlendMode_Add";effectclock,"beat";diffuseramp;effectcolor1,color("1,1,1,0");effectcolor2,color("1,1,1,1");effecttiming,.2,0,.8,0;effectoffset,.05 +NoneCommand=stoptweening;zoom,0.85;linear,0.12;zoom,1 +PressCommand=stoptweening;zoom,0.85;linear,0.12;zoom,1 +[ReceptorOverlay] +InitCommand=diffusealpha,0;blend,"BlendMode_Add" +PressCommand=finishtweening;zoom,0.85;decelerate,0.12;zoom,1;diffusealpha,0.6; +LiftCommand=finishtweening;accelerate,0.12;diffusealpha,0;zoom,1.2 \ No newline at end of file diff --git a/NoteSkins/dance/midi-note-3d/res/Resource.psd b/NoteSkins/dance/midi-note-3d/res/Resource.psd new file mode 100644 index 0000000000..2ebcfdd717 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/res/Resource.psd differ diff --git a/NoteSkins/dance/midi-note-3d/res/down hold tail active.psd b/NoteSkins/dance/midi-note-3d/res/down hold tail active.psd new file mode 100644 index 0000000000..fa89b7884a Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/res/down hold tail active.psd differ diff --git a/NoteSkins/dance/midi-note-3d/res/down hold tail inactive.psd b/NoteSkins/dance/midi-note-3d/res/down hold tail inactive.psd new file mode 100644 index 0000000000..b82e788d14 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/res/down hold tail inactive.psd differ diff --git a/NoteSkins/dance/midi-note-3d/res/down roll tail active.psd b/NoteSkins/dance/midi-note-3d/res/down roll tail active.psd new file mode 100644 index 0000000000..5c3175c83c Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/res/down roll tail active.psd differ diff --git a/NoteSkins/dance/midi-note-3d/res/down roll tail inactive.psd b/NoteSkins/dance/midi-note-3d/res/down roll tail inactive.psd new file mode 100644 index 0000000000..50fa746f70 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/res/down roll tail inactive.psd differ diff --git a/NoteSkins/dance/midi-note-3d/res/hold body active.psd b/NoteSkins/dance/midi-note-3d/res/hold body active.psd new file mode 100644 index 0000000000..6a2a6e1f34 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/res/hold body active.psd differ diff --git a/NoteSkins/dance/midi-note-3d/res/hold body inactive.psd b/NoteSkins/dance/midi-note-3d/res/hold body inactive.psd new file mode 100644 index 0000000000..4f6ec5c346 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/res/hold body inactive.psd differ diff --git a/NoteSkins/dance/midi-note-3d/res/roll body active.psd b/NoteSkins/dance/midi-note-3d/res/roll body active.psd new file mode 100644 index 0000000000..caa82b6f77 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/res/roll body active.psd differ diff --git a/NoteSkins/dance/midi-note-3d/res/roll body inactive.psd b/NoteSkins/dance/midi-note-3d/res/roll body inactive.psd new file mode 100644 index 0000000000..cc8c4208b0 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/res/roll body inactive.psd differ diff --git a/NoteSkins/dance/midi-note-3d/tex/black.png b/NoteSkins/dance/midi-note-3d/tex/black.png new file mode 100644 index 0000000000..7c8f9aa4ec Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/black.png differ diff --git a/NoteSkins/dance/midi-note-3d/tex/color in.jpg b/NoteSkins/dance/midi-note-3d/tex/color in.jpg new file mode 100644 index 0000000000..ea81427111 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/color in.jpg differ diff --git a/NoteSkins/dance/midi-note-3d/tex/color.ini b/NoteSkins/dance/midi-note-3d/tex/color.ini new file mode 100644 index 0000000000..68dc43d394 --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/tex/color.ini @@ -0,0 +1,17 @@ +[AnimatedTexture] +Frame0000=color1.png +Delay0000=0.125 +Frame0001=color2.png +Delay0001=0.125 +Frame0002=color3.png +Delay0002=0.125 +Frame0003=color4.png +Delay0003=0.125 +Frame0004=color5.png +Delay0004=0.125 +Frame0005=color6.png +Delay0005=0.125 +Frame0006=color7.png +Delay0006=0.125 +Frame0007=color8.png +Delay0007=0.125 \ No newline at end of file diff --git a/NoteSkins/dance/midi-note-3d/tex/color1.png b/NoteSkins/dance/midi-note-3d/tex/color1.png new file mode 100644 index 0000000000..221b2a7b7b Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/color1.png differ diff --git a/NoteSkins/dance/midi-note-3d/tex/color2.png b/NoteSkins/dance/midi-note-3d/tex/color2.png new file mode 100644 index 0000000000..fbb9504283 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/color2.png differ diff --git a/NoteSkins/dance/midi-note-3d/tex/color3.png b/NoteSkins/dance/midi-note-3d/tex/color3.png new file mode 100644 index 0000000000..879f74b1e9 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/color3.png differ diff --git a/NoteSkins/dance/midi-note-3d/tex/color4.png b/NoteSkins/dance/midi-note-3d/tex/color4.png new file mode 100644 index 0000000000..7f20b92d84 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/color4.png differ diff --git a/NoteSkins/dance/midi-note-3d/tex/color5.png b/NoteSkins/dance/midi-note-3d/tex/color5.png new file mode 100644 index 0000000000..5607c6ec6c Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/color5.png differ diff --git a/NoteSkins/dance/midi-note-3d/tex/color6.png b/NoteSkins/dance/midi-note-3d/tex/color6.png new file mode 100644 index 0000000000..7f697964c0 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/color6.png differ diff --git a/NoteSkins/dance/midi-note-3d/tex/color7.png b/NoteSkins/dance/midi-note-3d/tex/color7.png new file mode 100644 index 0000000000..c789887d45 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/color7.png differ diff --git a/NoteSkins/dance/midi-note-3d/tex/color8.png b/NoteSkins/dance/midi-note-3d/tex/color8.png new file mode 100644 index 0000000000..14f27d427f Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/color8.png differ diff --git a/NoteSkins/dance/midi-note-3d/tex/res/color in.psd b/NoteSkins/dance/midi-note-3d/tex/res/color in.psd new file mode 100644 index 0000000000..c461dadaf3 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/res/color in.psd differ diff --git a/NoteSkins/dance/midi-note-3d/tex/res/color1.psd b/NoteSkins/dance/midi-note-3d/tex/res/color1.psd new file mode 100644 index 0000000000..53907c27fa Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/res/color1.psd differ diff --git a/NoteSkins/dance/midi-note-3d/tex/res/color2.psd b/NoteSkins/dance/midi-note-3d/tex/res/color2.psd new file mode 100644 index 0000000000..0adfa0c024 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/res/color2.psd differ diff --git a/NoteSkins/dance/midi-note-3d/tex/res/color3.psd b/NoteSkins/dance/midi-note-3d/tex/res/color3.psd new file mode 100644 index 0000000000..b93157c8a6 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/res/color3.psd differ diff --git a/NoteSkins/dance/midi-note-3d/tex/res/color4.psd b/NoteSkins/dance/midi-note-3d/tex/res/color4.psd new file mode 100644 index 0000000000..74f94b631c Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/res/color4.psd differ diff --git a/NoteSkins/dance/midi-note-3d/tex/res/midi-note-3d.txt b/NoteSkins/dance/midi-note-3d/tex/res/midi-note-3d.txt new file mode 100644 index 0000000000..8fd8e2b448 --- /dev/null +++ b/NoteSkins/dance/midi-note-3d/tex/res/midi-note-3d.txt @@ -0,0 +1,984 @@ +// MilkShape 3D ASCII + +Frames: 30 +Frame: 1 + +Meshes: 3 +"cell" 0 0 +64 +0 2.549132 27.005108 -5.999992 0.000000 0.000000 -1 +0 -2.470720 27.005108 -5.999992 0.000000 0.000000 -1 +0 -3.501126 29.003641 -3.999992 0.000000 0.000000 -1 +0 3.515003 29.000792 -3.999992 0.000000 0.000000 -1 +0 7.480893 22.005108 -5.999992 0.000000 0.000000 -1 +0 9.515003 22.992289 -3.999992 0.000000 0.000000 -1 +0 7.487095 -0.006020 -5.999992 0.000000 0.000000 -1 +0 9.498875 3.988278 -3.999992 0.000000 0.000000 -1 +0 -7.464517 22.005112 -5.999992 0.000000 0.000000 -1 +0 -9.501126 22.993713 -3.999992 0.000000 0.000000 -1 +0 -7.470722 0.000184 -5.999992 0.000000 0.000000 -1 +0 -9.496346 5.006423 -3.999992 0.000000 0.000000 -1 +0 -16.489040 12.002391 -3.999992 0.000000 0.000000 -1 +0 -17.519123 9.995950 -5.999992 0.000000 0.000000 -1 +0 -23.502296 9.990573 -5.999992 0.000000 0.000000 -1 +0 -24.496029 11.991723 -3.999992 0.000000 0.000000 -1 +0 -27.479452 5.977798 -5.999992 0.000000 0.000000 -1 +0 -29.504972 7.003297 -3.999992 0.000000 0.000000 -1 +0 -27.479452 0.022464 -5.999992 0.000000 0.000000 -1 +0 -29.490093 -1.017060 -3.999992 0.000000 0.000000 -1 +0 -0.491594 -27.002575 -5.999992 0.000000 0.000000 -1 +0 -0.502999 -29.987505 -3.999992 0.000000 0.000000 -1 +0 0.540664 -26.992649 -5.999992 0.000000 0.000000 -1 +0 0.530027 -29.987507 -3.999992 0.000000 0.000000 -1 +0 29.517078 -0.995554 -3.999992 0.000000 0.000000 -1 +0 27.495455 -0.000695 -5.999992 0.000000 0.000000 -1 +0 27.501657 5.992133 -5.999992 0.000000 0.000000 -1 +0 29.517847 6.998812 -3.999992 0.000000 0.000000 -1 +0 24.519735 12.004406 -3.999992 0.000000 0.000000 -1 +0 23.485622 10.001644 -5.999992 0.000000 0.000000 -1 +0 17.513138 10.005877 -5.999992 0.000000 0.000000 -1 +0 16.503641 11.993057 -3.999992 0.000000 0.000000 -1 +0 -3.501126 29.003641 3.999992 0.000000 0.000000 -1 +0 -2.470720 27.005108 5.999992 0.000000 0.000000 -1 +0 2.549132 27.005108 5.999992 0.000000 0.000000 -1 +0 3.515003 29.000792 3.999992 0.000000 0.000000 -1 +0 7.480893 22.005108 5.999992 0.000000 0.000000 -1 +0 9.515003 22.992289 3.999992 0.000000 0.000000 -1 +0 7.487095 -0.006020 5.999992 0.000000 0.000000 -1 +0 9.498875 3.988278 3.999992 0.000000 0.000000 -1 +0 -7.464517 22.005112 5.999992 0.000000 0.000000 -1 +0 -9.501126 22.993713 3.999992 0.000000 0.000000 -1 +0 -7.470722 0.000184 5.999992 0.000000 0.000000 -1 +0 -9.496346 5.006423 3.999992 0.000000 0.000000 -1 +0 -16.489040 12.002391 3.999992 0.000000 0.000000 -1 +0 -17.519123 9.995950 5.999992 0.000000 0.000000 -1 +0 -23.502296 9.990573 5.999992 0.000000 0.000000 -1 +0 -24.496029 11.991723 3.999992 0.000000 0.000000 -1 +0 -27.479452 5.977798 5.999992 0.000000 0.000000 -1 +0 -29.504972 7.003297 3.999992 0.000000 0.000000 -1 +0 -27.479452 0.022464 5.999992 0.000000 0.000000 -1 +0 -29.490093 -1.017060 3.999992 0.000000 0.000000 -1 +0 -0.491594 -27.002575 5.999992 0.000000 0.000000 -1 +0 -0.502999 -29.981012 3.999992 0.000000 0.000000 -1 +0 0.540664 -26.992649 5.999992 0.000000 0.000000 -1 +0 0.530027 -29.981014 3.999992 0.000000 0.000000 -1 +0 29.517078 -0.995554 3.999992 0.000000 0.000000 -1 +0 27.495455 -0.000695 5.999992 0.000000 0.000000 -1 +0 27.501657 5.992133 5.999992 0.000000 0.000000 -1 +0 29.517847 6.998812 3.999992 0.000000 0.000000 -1 +0 24.519735 12.004406 3.999992 0.000000 0.000000 -1 +0 23.485622 10.001644 5.999992 0.000000 0.000000 -1 +0 17.513138 10.005877 5.999992 0.000000 0.000000 -1 +0 16.503641 11.993057 3.999992 0.000000 0.000000 -1 +64 +0.169806 0.655192 -0.736131 +-0.250549 0.617210 -0.745840 +-0.275250 0.836959 -0.473009 +0.459405 0.785493 -0.414666 +0.577221 0.333428 -0.745414 +0.881916 0.227749 -0.412741 +0.092722 0.371508 -0.923788 +0.169860 0.707114 -0.686394 +-0.573749 0.332170 -0.748649 +-0.879427 0.314309 -0.357516 +-0.141921 0.315683 -0.938191 +-0.262755 0.616506 -0.742213 +0.344982 0.840986 -0.416810 +0.248845 0.616689 -0.746840 +-0.168686 0.653382 -0.737995 +-0.385134 0.776941 -0.498031 +-0.575127 0.332429 -0.747475 +-0.879422 0.314342 -0.357500 +-0.650095 -0.165820 -0.741539 +-0.785052 -0.458118 -0.416920 +-0.329746 -0.522471 -0.786315 +-0.234369 -0.850153 -0.471498 +0.251898 -0.537389 -0.804835 +0.353500 -0.814060 -0.460808 +0.840352 -0.346008 -0.417236 +0.615558 -0.250982 -0.747059 +0.615191 0.250029 -0.747680 +0.834314 0.438972 -0.333503 +0.274670 0.837106 -0.473085 +0.249963 0.616515 -0.746611 +-0.167195 0.654806 -0.737072 +-0.506100 0.780635 -0.366705 +-0.391918 0.788978 0.473195 +-0.250549 0.617210 0.745840 +0.169806 0.655192 0.736131 +0.325964 0.848082 0.417737 +0.577221 0.333428 0.745414 +0.832330 0.366307 0.415988 +0.092722 0.371508 0.923788 +0.236113 0.821103 0.519655 +-0.573749 0.332170 0.748649 +-0.825071 0.272863 0.494776 +-0.141921 0.315683 0.938191 +-0.318851 0.756020 0.571636 +0.317238 0.776006 0.545137 +0.248845 0.616689 0.746840 +-0.168686 0.653382 0.737995 +-0.395630 0.844991 0.359815 +-0.575127 0.332429 0.747475 +-0.825185 0.272671 0.494692 +-0.650095 -0.165820 0.741539 +-0.847433 -0.324937 0.419849 +-0.329917 -0.522977 0.785907 +-0.375728 -0.796362 0.473959 +0.252032 -0.537990 0.804392 +0.373498 -0.875660 0.306134 +0.775167 -0.318440 0.545629 +0.615558 -0.250982 0.747059 +0.615191 0.250029 0.747680 +0.901716 0.275241 0.333393 +0.391503 0.789137 0.473273 +0.249963 0.616515 0.746611 +-0.167195 0.654806 0.737072 +-0.366036 0.853817 0.370155 +96 +0 0 1 2 0 1 2 1 +0 0 2 3 0 2 3 1 +0 0 3 4 0 3 4 1 +0 4 3 5 4 3 5 1 +0 5 6 4 5 6 4 1 +0 5 7 6 5 7 6 1 +0 2 1 8 2 1 8 1 +0 8 9 2 8 9 2 1 +0 9 8 10 9 8 10 1 +0 10 11 9 10 11 9 1 +0 11 10 12 11 10 12 1 +0 12 10 13 12 10 13 1 +0 12 13 14 12 13 14 1 +0 14 15 12 14 15 12 1 +0 15 14 16 15 14 16 1 +0 16 17 15 16 17 15 1 +0 17 16 18 17 16 18 1 +0 18 19 17 18 19 17 1 +0 18 20 19 18 20 19 1 +0 19 20 21 19 20 21 1 +0 21 20 22 21 20 22 1 +0 23 21 22 23 21 22 1 +0 23 22 24 23 22 24 1 +0 22 25 24 22 25 24 1 +0 24 25 26 24 25 26 1 +0 26 27 24 26 27 24 1 +0 27 26 28 27 26 28 1 +0 28 26 29 28 26 29 1 +0 28 29 30 28 29 30 1 +0 30 31 28 30 31 28 1 +0 31 30 6 31 30 6 1 +0 31 6 7 31 6 7 1 +0 32 33 34 32 33 34 1 +0 35 32 34 35 32 34 1 +0 36 35 34 36 35 34 1 +0 37 35 36 37 35 36 1 +0 36 38 37 36 38 37 1 +0 38 39 37 38 39 37 1 +0 40 33 32 40 33 32 1 +0 32 41 40 32 41 40 1 +0 42 40 41 42 40 41 1 +0 41 43 42 41 43 42 1 +0 44 42 43 44 42 43 1 +0 45 42 44 45 42 44 1 +0 46 45 44 46 45 44 1 +0 44 47 46 44 47 46 1 +0 48 46 47 48 46 47 1 +0 47 49 48 47 49 48 1 +0 50 48 49 50 48 49 1 +0 49 51 50 49 51 50 1 +0 51 52 50 51 52 50 1 +0 53 52 51 53 52 51 1 +0 54 52 53 54 52 53 1 +0 54 53 55 54 53 55 1 +0 56 54 55 56 54 55 1 +0 56 57 54 56 57 54 1 +0 58 57 56 58 57 56 1 +0 56 59 58 56 59 58 1 +0 60 58 59 60 58 59 1 +0 61 58 60 61 58 60 1 +0 62 61 60 62 61 60 1 +0 60 63 62 60 63 62 1 +0 38 62 63 38 62 63 1 +0 39 38 63 39 38 63 1 +0 7 5 39 7 5 39 1 +0 39 5 37 39 5 37 1 +0 37 5 3 37 5 3 1 +0 3 35 37 3 35 37 1 +0 35 3 2 35 3 2 1 +0 2 32 35 2 32 35 1 +0 32 2 9 32 2 9 1 +0 9 41 32 9 41 32 1 +0 43 41 9 43 41 9 1 +0 9 11 43 9 11 43 1 +0 43 11 12 43 11 12 1 +0 44 43 12 44 43 12 1 +0 47 44 12 47 44 12 1 +0 12 15 47 12 15 47 1 +0 15 17 47 15 17 47 1 +0 49 47 17 49 47 17 1 +0 51 49 17 51 49 17 1 +0 17 19 51 17 19 51 1 +0 53 51 19 53 51 19 1 +0 19 21 53 19 21 53 1 +0 21 23 55 21 23 55 1 +0 55 23 24 55 23 24 1 +0 24 56 55 24 56 55 1 +0 24 27 59 24 27 59 1 +0 59 56 24 59 56 24 1 +0 27 28 60 27 28 60 1 +0 60 59 27 60 59 27 1 +0 28 31 63 28 31 63 1 +0 63 60 28 63 60 28 1 +0 31 7 39 31 7 39 1 +0 39 63 31 39 63 31 1 +0 55 53 21 55 53 21 1 +"inside" 0 2 +136 +0 0.545871 6.574782 4.000001 0.082192 0.409653 -1 +0 0.527650 6.000967 6.000000 0.082126 0.416299 -1 +0 3.517759 8.995436 6.000000 0.088233 0.377420 -1 +0 3.013403 9.081276 4.000001 0.087090 0.376297 -1 +0 3.514073 18.989233 6.000000 0.088225 0.246740 -1 +0 3.013403 19.081276 4.000001 0.087090 0.245537 -1 +0 1.491741 20.995436 6.000000 0.083642 0.220507 -1 +0 -1.478017 20.995436 6.000000 0.076913 0.220507 -1 +0 -1.506077 20.652702 4.000001 0.076850 0.224988 -1 +0 -3.484221 19.005362 6.000000 0.072367 0.246529 -1 +0 -2.986597 19.081276 4.000001 0.073495 0.245537 -1 +0 -3.478692 9.015251 6.000000 0.072380 0.377160 -1 +0 -0.476883 6.005363 6.000000 0.078414 0.416249 -1 +0 -0.467116 6.613743 4.000001 0.078449 0.409203 -1 +0 -0.498861 -7.986947 6.000000 0.079132 0.611176 -1 +0 0.515562 -7.994639 6.000000 0.081431 0.611277 -1 +0 0.526949 -7.493545 4.000000 0.081456 0.604724 -1 +0 3.492485 -4.994639 6.000000 0.088176 0.565923 -1 +0 3.000633 -4.993546 4.000000 0.087061 0.565909 -1 +0 3.507869 6.000966 6.000000 0.088211 0.416576 -1 +0 2.995759 4.994668 4.000000 0.087050 0.429734 -1 +0 0.522155 2.996570 6.000000 0.082559 0.450850 -1 +0 -0.472487 3.005361 6.000000 0.077660 0.450736 -1 +0 -0.486608 2.542022 4.000000 0.077629 0.456794 -1 +0 -3.474295 5.996571 6.000000 0.072390 0.416633 -1 +0 -3.004789 4.996567 4.000000 0.073454 0.429710 -1 +0 -3.498861 -4.986946 6.000000 0.072334 0.565822 -1 +0 -0.516910 -7.467229 4.000000 0.079091 0.604379 -1 +0 -0.571486 -22.010983 6.000000 0.078967 0.782863 -1 +0 0.539625 -21.973946 6.000000 0.081485 0.782379 -1 +0 0.506847 -21.462547 4.000000 0.081411 0.775691 -1 +0 22.490080 0.991055 6.000000 0.129343 0.482086 -1 +0 22.011435 0.996168 4.000000 0.128259 0.482019 -1 +0 22.477116 4.003556 6.000000 0.129174 0.447705 -1 +0 22.002260 4.005342 4.000000 0.128099 0.447682 -1 +0 21.502117 4.991519 6.000000 0.126965 0.434786 -1 +0 21.506847 4.546627 4.000000 0.126976 0.440604 -1 +0 18.494793 4.993823 6.000000 0.122100 0.434200 -1 +0 7.507869 -6.010023 6.000000 0.097274 0.573633 -1 +0 7.534371 -6.462548 4.000000 0.097334 0.579549 -1 +0 4.530946 -6.002331 6.000000 0.090529 0.573532 -1 +0 4.497674 -6.517594 4.000000 0.090453 0.580270 -1 +0 0.515562 -10.010023 6.000000 0.081431 0.625937 -1 +0 -0.506554 -10.002331 6.000000 0.079114 0.625836 -1 +0 -0.513281 -10.449017 4.000000 0.079099 0.631677 -1 +0 -4.498861 -6.002331 6.000000 0.070068 0.573532 -1 +0 -7.476655 -6.006133 6.000000 0.063321 0.573581 -1 +0 -7.474803 -6.453374 4.000000 0.063325 0.579429 -1 +0 -18.496527 5.005362 6.000000 0.038421 0.433492 -1 +0 -21.486635 5.000965 6.000000 0.033316 0.434663 -1 +0 -21.474804 4.555800 4.000000 0.033342 0.440484 -1 +0 -22.497412 4.003303 6.000000 0.031025 0.447708 -1 +0 -21.988565 3.996168 4.000000 0.032178 0.447802 -1 +0 -22.497414 1.011768 6.000000 0.030886 0.481258 -1 +0 -21.997740 0.996168 4.000000 0.032018 0.481462 -1 +0 -21.997740 0.996168 -4.000000 0.032018 0.481462 -1 +0 -21.988565 3.996168 -4.000000 0.032178 0.447802 -1 +0 -18.493153 4.537452 -4.000000 0.038428 0.439610 -1 +0 -21.474804 4.555800 -4.000000 0.033342 0.440484 -1 +0 -0.502327 -21.471722 -4.000000 0.079124 0.775811 -1 +0 -0.513281 -10.449017 -4.000000 0.079099 0.631677 -1 +0 0.511512 -10.473810 -4.000000 0.081421 0.632002 -1 +0 0.506847 -21.462547 -4.000000 0.081411 0.775691 -1 +0 -7.474803 -6.453374 -4.000000 0.063325 0.579429 -1 +0 -4.502326 -6.471723 -4.000000 0.070060 0.579670 -1 +0 4.497674 -6.517594 -4.000000 0.090453 0.580270 -1 +0 7.534371 -6.462548 -4.000000 0.097334 0.579549 -1 +0 22.011435 0.996168 -4.000000 0.128259 0.482019 -1 +0 18.506847 4.528278 -4.000000 0.122127 0.440287 -1 +0 21.506847 4.546627 -4.000000 0.126976 0.440604 -1 +0 22.002260 4.005342 -4.000000 0.128099 0.447682 -1 +0 -0.467116 6.575283 -4.000001 0.078449 0.409648 -1 +0 -2.999583 9.042815 -4.000001 0.073465 0.376800 -1 +0 3.013403 9.042815 -4.000001 0.087090 0.376800 -1 +0 0.545871 6.536322 -4.000001 0.082192 0.410099 -1 +0 -2.986597 19.042814 -4.000001 0.073495 0.246039 -1 +0 -1.506077 20.614243 -4.000001 0.076850 0.225491 -1 +0 1.493923 20.614243 -4.000001 0.083647 0.225491 -1 +0 3.013403 19.042814 -4.000001 0.087090 0.246039 -1 +0 -2.999583 9.081276 4.000001 0.073465 0.376297 -1 +0 1.493923 20.652702 4.000001 0.083647 0.224988 -1 +0 -3.484221 19.005363 -5.999992 0.072367 0.246529 -1 +0 -1.478017 20.995438 -5.999992 0.076913 0.220507 -1 +0 1.491741 20.995438 -5.999992 0.083642 0.220507 -1 +0 3.514073 18.989235 -5.999992 0.088225 0.246740 -1 +0 3.517759 8.995436 -5.999992 0.088233 0.377420 -1 +0 0.527650 6.000967 -5.999992 0.082126 0.416299 -1 +0 -0.476883 6.005363 -5.999992 0.078414 0.416249 -1 +0 -3.478692 9.015251 -5.999992 0.072380 0.377160 -1 +0 0.526949 -7.493545 -4.000000 0.081456 0.604724 -1 +0 -0.516910 -7.467229 -4.000000 0.079091 0.604379 -1 +0 -2.999367 -5.011089 -4.000000 0.073466 0.566138 -1 +0 3.000633 -4.993546 -4.000000 0.087061 0.565909 -1 +0 -3.004789 4.996567 -4.000000 0.073454 0.429710 -1 +0 -0.486608 2.542022 -4.000000 0.077629 0.456794 -1 +0 0.522483 2.523840 -4.000000 0.082560 0.457032 -1 +0 2.995759 4.994668 -4.000000 0.087050 0.429734 -1 +0 0.515562 -7.994638 -5.999992 0.081431 0.611277 -1 +0 -0.498861 -7.986946 -5.999992 0.079132 0.611176 -1 +0 -3.498861 -4.986946 -5.999992 0.072334 0.565822 -1 +0 -3.474295 5.996571 -5.999992 0.072390 0.416633 -1 +0 -0.472487 3.005361 -5.999992 0.077660 0.450736 -1 +0 0.522155 2.996570 -5.999992 0.082559 0.450850 -1 +0 3.507869 6.000966 -5.999992 0.088211 0.416576 -1 +0 3.492485 -4.994639 -5.999992 0.088176 0.565923 -1 +0 -2.999367 -5.011089 4.000000 0.073466 0.566138 -1 +0 0.522483 2.523840 4.000000 0.082560 0.457032 -1 +0 -18.493153 4.537452 4.000000 0.038428 0.439610 -1 +0 -0.502327 -21.471722 4.000000 0.079124 0.775811 -1 +0 0.511512 -10.473810 4.000000 0.081421 0.632002 -1 +0 -4.502326 -6.471723 4.000000 0.070060 0.579670 -1 +0 18.506847 4.528278 4.000000 0.122127 0.440287 -1 +0 0.539625 -21.973946 -5.999992 0.081485 0.782379 -1 +0 -0.571486 -22.010983 -5.999992 0.078967 0.782863 -1 +0 -22.497414 1.011768 -5.999992 0.030886 0.481258 -1 +0 -22.497412 4.003303 -5.999992 0.031025 0.447708 -1 +0 -21.486635 5.000965 -5.999992 0.033316 0.434663 -1 +0 -18.496527 5.005362 -5.999992 0.038421 0.433492 -1 +0 -7.476655 -6.006133 -5.999992 0.063321 0.573581 -1 +0 -4.498861 -6.002331 -5.999992 0.070068 0.573532 -1 +0 -0.506554 -10.002331 -5.999992 0.079114 0.625836 -1 +0 0.515562 -10.010023 -5.999992 0.081431 0.625937 -1 +0 4.530946 -6.002331 -5.999992 0.090529 0.573532 -1 +0 7.507869 -6.010023 -5.999992 0.097274 0.573633 -1 +0 18.494793 4.993823 -5.999992 0.122100 0.434200 -1 +0 21.502117 4.991519 -5.999992 0.126965 0.434786 -1 +0 22.477116 4.003556 -5.999992 0.129174 0.447705 -1 +0 22.490080 0.991055 -5.999992 0.129343 0.482086 -1 +0 27.495455 -0.000695 6.000000 0.139989 0.500622 -1 +0 27.501657 5.992133 6.000000 0.140002 0.422259 -1 +0 -27.479452 5.977798 6.000000 0.020154 0.421890 -1 +0 -27.479452 0.022464 6.000000 0.020154 0.499762 -1 +0 -27.479452 0.022464 -5.999992 0.020154 0.499762 -1 +0 -27.479452 5.977798 -5.999992 0.020154 0.421890 -1 +0 27.495455 -0.000695 -5.999992 0.139989 0.500622 -1 +0 27.501657 5.992133 -5.999992 0.140002 0.422259 -1 +132 +-0.426003 0.735887 0.526300 +-0.233622 0.933613 0.271639 +-0.840566 0.491072 0.228685 +-0.417847 0.108732 0.901987 +-0.941515 -0.251044 0.224779 +-0.757997 -0.443457 0.478316 +-0.381686 -0.910051 0.161625 +0.508190 -0.847889 0.151087 +0.164191 -0.601932 0.781486 +0.901153 -0.379340 0.209819 +0.835235 -0.343913 0.429077 +0.896069 0.375877 0.236171 +0.374691 0.886508 0.271497 +0.303934 0.709402 0.635904 +0.258768 0.936216 0.237776 +-0.497396 0.841970 0.209006 +-0.175843 0.691709 0.700441 +-0.900271 0.374705 0.221605 +-0.553527 0.230042 0.800430 +-0.792205 -0.442883 0.419841 +0.198560 -0.647221 0.735988 +0.370703 -0.903729 0.214134 +-0.379445 -0.900750 0.211355 +-0.267234 -0.635861 0.724063 +-0.258962 -0.891115 0.372629 +0.571732 -0.320158 0.755394 +0.900007 0.376839 0.219045 +0.444512 0.743294 0.499923 +0.375212 0.894913 0.241549 +-0.399682 0.886488 0.233225 +-0.241609 0.544018 0.803535 +-0.850800 0.481857 0.209650 +-0.493354 0.125175 0.860775 +-0.942194 -0.249067 0.224134 +-0.696036 -0.345465 0.629434 +-0.513100 -0.837067 0.189863 +-0.193002 -0.697426 0.690179 +0.377837 -0.901832 0.209617 +0.375427 -0.902918 0.209271 +0.268558 -0.635314 0.724053 +0.253267 -0.940355 0.227132 +0.373504 -0.627253 0.683409 +0.368185 -0.905916 0.209181 +-0.380733 -0.902178 0.202776 +-0.312068 -0.732110 0.605498 +-0.377631 -0.902363 0.207692 +-0.376334 -0.904227 0.201855 +-0.306911 -0.733768 0.606126 +-0.377530 -0.902841 0.205790 +0.374445 -0.904627 0.203569 +0.350872 -0.823859 0.445136 +0.848189 -0.485865 0.210973 +0.632921 -0.140551 0.761352 +0.941860 0.240138 0.235017 +0.629501 0.356219 0.690533 +0.694496 0.177608 -0.697230 +0.586021 -0.294361 -0.754938 +-0.263615 -0.446117 -0.855270 +0.229548 -0.830755 -0.507103 +0.177857 0.424208 -0.887927 +-0.240617 -0.559147 -0.793384 +0.260430 -0.640802 -0.722183 +-0.150200 0.344553 -0.926673 +-0.185852 -0.700887 -0.688634 +-0.373313 -0.631262 -0.679813 +0.235541 -0.551850 -0.799988 +0.268558 -0.635314 -0.724053 +-0.558017 0.224228 -0.798961 +0.234425 -0.556459 -0.797119 +-0.313581 -0.728305 -0.609293 +-0.642324 -0.210083 -0.737079 +0.306530 0.716441 -0.626699 +0.577698 0.154752 -0.801447 +-0.378603 0.221494 -0.898666 +-0.289905 0.722738 -0.627379 +0.757912 -0.438868 -0.482663 +0.191605 -0.440985 -0.876823 +-0.191682 -0.713712 -0.673701 +-0.829575 -0.344609 -0.439374 +0.428936 0.181684 0.884876 +-0.244206 -0.573288 0.782115 +0.941337 -0.250330 -0.226316 +0.383959 -0.906209 -0.177091 +-0.503088 -0.847547 -0.169017 +-0.899997 -0.379100 -0.215146 +-0.938372 0.246915 -0.241850 +-0.367118 0.897412 -0.244697 +0.375924 0.890688 -0.255648 +0.839355 0.498481 -0.216794 +-0.175843 0.691709 -0.700442 +0.444512 0.743293 -0.499924 +0.490340 0.130046 -0.861774 +-0.553526 0.230042 -0.800431 +-0.189592 -0.651097 -0.734933 +-0.183159 -0.436075 -0.881074 +0.177328 -0.699077 -0.692709 +0.198560 -0.647221 -0.735989 +-0.497396 0.841970 -0.209006 +0.258768 0.936216 -0.237777 +0.842085 0.497804 -0.207568 +0.793869 -0.443083 -0.416472 +-0.378237 -0.899805 -0.217459 +0.495488 -0.844803 -0.201987 +-0.792204 -0.442883 -0.419843 +-0.900271 0.374705 -0.221605 +0.349363 0.147326 0.925332 +0.226644 -0.557256 0.798810 +-0.147967 -0.352058 0.924208 +0.104073 0.244752 0.963984 +0.175034 -0.436327 0.882600 +-0.233891 -0.556756 0.797068 +0.234425 -0.556460 0.797118 +-0.394645 0.888735 -0.233248 +0.368762 0.894189 -0.253853 +0.848431 0.481177 -0.220528 +0.938303 -0.250853 -0.238035 +0.508114 -0.838633 -0.196251 +-0.250212 -0.943696 -0.216407 +-0.497086 -0.846376 -0.191191 +-0.250545 -0.943250 -0.217960 +-0.383686 -0.900106 -0.206384 +0.372887 -0.904057 -0.208891 +0.378857 -0.900080 -0.215227 +0.375427 -0.902917 -0.209272 +0.377837 -0.901831 -0.209618 +-0.380618 -0.902859 -0.199938 +-0.905945 -0.366727 -0.211603 +-0.905726 0.363690 -0.217691 +-0.341889 0.000354 0.939740 +0.342244 0.000000 0.939611 +0.342243 0.000000 -0.939612 +-0.341888 0.000354 -0.939741 +184 +0 0 1 2 0 1 2 1 +0 3 2 4 3 2 4 1 +0 5 4 6 5 4 6 1 +0 6 7 8 6 7 8 1 +0 7 9 10 7 9 10 1 +0 10 9 11 10 9 11 1 +0 11 12 13 11 12 13 1 +0 13 12 1 13 12 1 1 +0 14 15 16 14 15 16 1 +0 15 17 18 15 17 18 1 +0 18 17 19 18 17 19 1 +0 20 19 21 20 19 21 1 +0 21 22 23 21 22 23 1 +0 23 22 24 23 22 24 1 +0 25 24 26 25 24 26 1 +0 26 14 27 26 14 27 1 +0 28 29 30 28 29 30 1 +0 30 29 31 30 29 31 1 +0 32 31 33 32 31 33 1 +0 34 33 35 34 33 35 1 +0 36 35 37 36 35 37 1 +0 37 38 39 37 38 39 1 +0 39 38 40 39 38 40 1 +0 41 40 42 41 40 42 1 +0 42 43 44 42 43 44 1 +0 44 43 45 44 43 45 1 +0 45 46 47 45 46 47 1 +0 47 46 48 47 46 48 1 +0 48 49 50 48 49 50 1 +0 50 49 51 50 49 51 1 +0 52 51 53 52 51 53 1 +0 54 53 28 54 53 28 1 +0 55 56 57 55 56 57 1 +0 57 56 58 57 56 58 1 +0 59 55 57 59 55 57 1 +0 59 60 61 59 60 61 1 +0 61 62 59 61 62 59 1 +0 59 57 63 59 57 63 1 +0 63 64 59 63 64 59 1 +0 59 64 60 59 64 60 1 +0 61 65 62 61 65 62 1 +0 62 65 66 62 65 66 1 +0 67 62 66 67 62 66 1 +0 66 68 67 66 68 67 1 +0 67 68 69 67 68 69 1 +0 69 70 67 69 70 67 1 +0 71 72 73 71 72 73 1 +0 73 74 71 73 74 71 1 +0 72 75 76 72 75 76 1 +0 77 78 73 77 78 73 1 +0 73 72 76 73 72 76 1 +0 76 77 73 76 77 73 1 +0 3 79 13 3 79 13 1 +0 13 0 3 13 0 3 1 +0 8 10 79 8 10 79 1 +0 3 5 80 3 5 80 1 +0 8 79 3 8 79 3 1 +0 3 80 8 3 80 8 1 +0 2 3 0 2 3 0 1 +0 4 5 3 4 5 3 1 +0 6 80 5 6 80 5 1 +0 8 80 6 8 80 6 1 +0 10 8 7 10 8 7 1 +0 11 79 10 11 79 10 1 +0 13 79 11 13 79 11 1 +0 1 0 13 1 0 13 1 +0 75 81 82 75 81 82 1 +0 82 76 75 82 76 75 1 +0 82 83 77 82 83 77 1 +0 77 76 82 77 76 82 1 +0 83 84 78 83 84 78 1 +0 78 77 83 78 77 83 1 +0 78 84 85 78 84 85 1 +0 85 73 78 85 73 78 1 +0 73 85 86 73 85 86 1 +0 86 74 73 86 74 73 1 +0 86 87 71 86 87 71 1 +0 71 74 86 71 74 86 1 +0 71 87 88 71 87 88 1 +0 88 72 71 88 72 71 1 +0 72 88 81 72 88 81 1 +0 81 75 72 81 75 72 1 +0 89 90 91 89 90 91 1 +0 89 91 92 89 91 92 1 +0 91 93 94 91 93 94 1 +0 95 96 92 95 96 92 1 +0 92 91 94 92 91 94 1 +0 92 94 95 92 94 95 1 +0 89 97 98 89 97 98 1 +0 98 90 89 98 90 89 1 +0 90 98 99 90 98 99 1 +0 90 99 91 90 99 91 1 +0 91 99 100 91 99 100 1 +0 100 93 91 100 93 91 1 +0 101 94 93 101 94 93 1 +0 93 100 101 93 100 101 1 +0 95 94 101 95 94 101 1 +0 101 102 95 101 102 95 1 +0 96 95 102 96 95 102 1 +0 102 103 96 102 103 96 1 +0 103 104 92 103 104 92 1 +0 92 96 103 92 96 103 1 +0 92 104 97 92 104 97 1 +0 97 89 92 97 89 92 1 +0 105 27 16 105 27 16 1 +0 18 105 16 18 105 16 1 +0 23 25 105 23 25 105 1 +0 18 20 106 18 20 106 1 +0 23 105 18 23 105 18 1 +0 106 23 18 106 23 18 1 +0 16 27 14 16 27 14 1 +0 15 18 16 15 18 16 1 +0 19 20 18 19 20 18 1 +0 21 106 20 21 106 20 1 +0 23 106 21 23 106 21 1 +0 24 25 23 24 25 23 1 +0 26 105 25 26 105 25 1 +0 27 105 26 27 105 26 1 +0 107 52 54 107 52 54 1 +0 50 52 107 50 52 107 1 +0 107 54 108 107 54 108 1 +0 109 44 108 109 44 108 1 +0 108 30 109 108 30 109 1 +0 47 107 108 47 107 108 1 +0 108 110 47 108 110 47 1 +0 44 110 108 44 110 108 1 +0 30 41 109 30 41 109 1 +0 39 41 30 39 41 30 1 +0 39 30 32 39 30 32 1 +0 32 111 39 32 111 39 1 +0 36 111 32 36 111 32 1 +0 32 34 36 32 34 36 1 +0 30 108 28 30 108 28 1 +0 31 32 30 31 32 30 1 +0 33 34 32 33 34 32 1 +0 35 36 34 35 36 34 1 +0 37 111 36 37 111 36 1 +0 39 111 37 39 111 37 1 +0 40 41 39 40 41 39 1 +0 109 41 42 109 41 42 1 +0 44 109 42 44 109 42 1 +0 45 110 44 45 110 44 1 +0 47 110 45 47 110 45 1 +0 48 107 47 48 107 47 1 +0 50 107 48 50 107 48 1 +0 51 52 50 51 52 50 1 +0 53 54 52 53 54 52 1 +0 28 108 54 28 108 54 1 +0 112 113 59 112 113 59 1 +0 59 62 112 59 62 112 1 +0 114 55 59 114 55 59 1 +0 59 113 114 59 113 114 1 +0 55 114 115 55 114 115 1 +0 115 56 55 115 56 55 1 +0 56 115 116 56 115 116 1 +0 116 58 56 116 58 56 1 +0 58 116 117 58 116 117 1 +0 117 57 58 117 57 58 1 +0 57 117 118 57 117 118 1 +0 118 63 57 118 63 57 1 +0 63 118 119 63 118 119 1 +0 64 63 119 64 63 119 1 +0 120 60 64 120 60 64 1 +0 119 120 64 119 120 64 1 +0 61 60 120 61 60 120 1 +0 120 121 61 120 121 61 1 +0 61 121 122 61 121 122 1 +0 122 65 61 122 65 61 1 +0 66 65 122 66 65 122 1 +0 122 123 66 122 123 66 1 +0 66 123 124 66 123 124 1 +0 124 68 66 124 68 66 1 +0 69 68 124 69 68 124 1 +0 124 125 69 124 125 69 1 +0 126 70 69 126 70 69 1 +0 69 125 126 69 125 126 1 +0 126 127 67 126 127 67 1 +0 67 70 126 67 70 126 1 +0 67 127 112 67 127 112 1 +0 112 62 67 112 62 67 1 +0 128 129 34 128 128 34 1 +0 130 131 52 129 129 52 1 +0 132 133 56 130 130 56 1 +0 134 70 135 131 70 131 1 +"scroller" 0 1 +96 +0 -1.478017 20.995436 6.000000 0.076939 0.215925 -1 +0 1.491741 20.995436 6.000000 0.083416 0.215925 -1 +0 2.549132 27.005108 6.000000 0.085722 0.136089 -1 +0 -2.470720 27.005108 6.000000 0.074773 0.136089 -1 +0 3.514073 18.989233 6.000000 0.087827 0.240642 -1 +0 7.480893 22.005108 6.000000 0.096479 0.201305 -1 +0 -7.464517 22.005110 6.000000 0.063881 0.201305 -1 +0 -3.484221 19.005362 6.000000 0.072382 0.241157 -1 +0 3.517759 8.995436 6.000000 0.087745 0.381147 -1 +0 -3.478692 9.015251 6.000000 0.072303 0.381614 -1 +0 -0.476883 6.005363 6.000000 0.077857 0.415795 -1 +0 -3.474295 5.996571 6.000000 0.072223 0.416635 -1 +0 -0.472487 3.005361 6.000000 0.077713 0.449122 -1 +0 0.522155 2.996570 6.000000 0.082580 0.449237 -1 +0 0.527650 6.000967 6.000000 0.082488 0.415853 -1 +0 3.507869 6.000966 6.000000 0.087724 0.416578 -1 +0 -0.506554 -10.002331 6.000000 0.077611 0.635467 -1 +0 0.515562 -10.010023 6.000000 0.082824 0.635567 -1 +0 0.515562 -7.994639 6.000000 0.081197 0.612182 -1 +0 -0.498861 -7.986947 6.000000 0.078984 0.612080 -1 +0 7.487095 -0.006020 6.000000 0.096403 0.494928 -1 +0 -7.470722 0.000184 6.000000 0.063777 0.494848 -1 +0 -3.498861 -4.986946 6.000000 0.072169 0.572951 -1 +0 3.492485 -4.994639 6.000000 0.087689 0.573052 -1 +0 -4.498861 -6.002331 6.000000 0.068903 0.583294 -1 +0 4.530946 -6.002331 6.000000 0.091582 0.583294 -1 +0 7.507869 -6.010023 6.000000 0.098076 0.583394 -1 +0 -7.476655 -6.006133 6.000000 0.062408 0.583344 -1 +0 -18.496527 5.005362 6.000000 0.038553 0.433916 -1 +0 -17.519123 9.995950 6.000000 0.041860 0.364471 -1 +0 -21.486635 5.000965 6.000000 0.033025 0.433973 -1 +0 -23.502296 9.990573 6.000000 0.028809 0.364541 -1 +0 -27.479452 5.977798 6.000000 0.020135 0.416880 -1 +0 -22.497412 4.003303 6.000000 0.030821 0.446985 -1 +0 -27.479452 0.022464 6.000000 0.020135 0.494557 -1 +0 -22.497414 1.011768 6.000000 0.030821 0.486005 -1 +0 -0.491594 -27.002575 6.000000 0.079000 0.866634 -1 +0 -0.571486 -22.010983 6.000000 0.078826 0.781945 -1 +0 0.540664 -26.992649 6.000000 0.081251 0.866504 -1 +0 0.539625 -21.973946 6.000000 0.081249 0.781461 -1 +0 27.495455 -0.000695 6.000000 0.140046 0.494859 -1 +0 22.490080 0.991055 6.000000 0.129037 0.485550 -1 +0 22.477116 4.003556 6.000000 0.129009 0.446257 -1 +0 27.501657 5.992133 6.000000 0.140059 0.416693 -1 +0 23.485622 10.001644 6.000000 0.131299 0.364396 -1 +0 21.502117 4.991519 6.000000 0.126882 0.433371 -1 +0 17.513138 10.005877 6.000000 0.118271 0.364341 -1 +0 18.494793 4.993823 6.000000 0.121407 0.433341 -1 +0 2.549132 27.005108 -5.999992 0.085722 0.136089 -1 +0 1.491741 20.995438 -5.999992 0.083416 0.215925 -1 +0 -1.478017 20.995438 -5.999992 0.076939 0.215925 -1 +0 -2.470720 27.005108 -5.999992 0.074773 0.136089 -1 +0 7.480893 22.005108 -5.999992 0.096479 0.201305 -1 +0 3.514073 18.989235 -5.999992 0.087827 0.240642 -1 +0 -3.484221 19.005363 -5.999992 0.072382 0.241157 -1 +0 -7.464517 22.005112 -5.999992 0.063881 0.201305 -1 +0 3.517759 8.995436 -5.999992 0.087745 0.381147 -1 +0 -3.478692 9.015251 -5.999992 0.072303 0.381614 -1 +0 -3.474295 5.996571 -5.999992 0.072223 0.416635 -1 +0 -0.476883 6.005363 -5.999992 0.077857 0.415795 -1 +0 -0.472487 3.005361 -5.999992 0.077713 0.449122 -1 +0 0.527650 6.000967 -5.999992 0.082488 0.415853 -1 +0 0.522155 2.996570 -5.999992 0.082580 0.449237 -1 +0 3.507869 6.000966 -5.999992 0.087724 0.416578 -1 +0 0.515562 -7.994638 -5.999992 0.081197 0.612182 -1 +0 0.515562 -10.010023 -5.999992 0.082824 0.635567 -1 +0 -0.506554 -10.002331 -5.999992 0.077611 0.635467 -1 +0 -0.498861 -7.986946 -5.999992 0.078984 0.612080 -1 +0 7.487095 -0.006020 -5.999992 0.096403 0.494928 -1 +0 -7.470722 0.000184 -5.999992 0.063777 0.494848 -1 +0 -3.498861 -4.986946 -5.999992 0.072169 0.572951 -1 +0 3.492485 -4.994639 -5.999992 0.087689 0.573052 -1 +0 -4.498861 -6.002331 -5.999992 0.068903 0.583294 -1 +0 4.530946 -6.002331 -5.999992 0.091582 0.583294 -1 +0 7.507869 -6.010023 -5.999992 0.098076 0.583394 -1 +0 -7.476655 -6.006133 -5.999992 0.062408 0.583344 -1 +0 -18.496527 5.005362 -5.999992 0.038553 0.433916 -1 +0 -17.519123 9.995950 -5.999992 0.041860 0.364471 -1 +0 -21.486635 5.000965 -5.999992 0.033025 0.433973 -1 +0 -23.502296 9.990573 -5.999992 0.028809 0.364541 -1 +0 -27.479452 5.977798 -5.999992 0.020135 0.416880 -1 +0 -22.497412 4.003303 -5.999992 0.030821 0.446985 -1 +0 -27.479452 0.022464 -5.999992 0.020135 0.494557 -1 +0 -22.497414 1.011768 -5.999992 0.030821 0.486005 -1 +0 -0.571486 -22.010983 -5.999992 0.078826 0.781945 -1 +0 -0.491594 -27.002575 -5.999992 0.079000 0.866634 -1 +0 0.540664 -26.992649 -5.999992 0.081251 0.866504 -1 +0 0.539625 -21.973946 -5.999992 0.081249 0.781461 -1 +0 22.490080 0.991055 -5.999992 0.129037 0.485550 -1 +0 27.495455 -0.000695 -5.999992 0.140046 0.494859 -1 +0 22.477116 4.003556 -5.999992 0.129009 0.446257 -1 +0 27.501657 5.992133 -5.999992 0.140059 0.416693 -1 +0 23.485622 10.001644 -5.999992 0.131299 0.364396 -1 +0 21.502117 4.991519 -5.999992 0.126882 0.433371 -1 +0 17.513138 10.005877 -5.999992 0.118271 0.364341 -1 +0 18.494793 4.993823 -5.999992 0.121407 0.433341 -1 +2 +0.000000 0.000000 1.000000 +0.000000 0.000000 -1.000000 +157 +0 0 1 2 0 0 0 1 +0 3 0 2 0 0 0 1 +0 1 4 5 0 0 0 1 +0 5 2 1 0 0 0 1 +0 0 6 7 0 0 0 1 +0 0 3 6 0 0 0 1 +0 4 8 5 0 0 0 1 +0 9 7 6 0 0 0 1 +0 10 9 11 0 0 0 1 +0 11 12 10 0 0 0 1 +0 12 13 14 0 0 0 1 +0 14 10 12 0 0 0 1 +0 15 14 13 0 0 0 1 +0 15 8 14 0 0 0 1 +0 16 17 18 0 0 0 1 +0 18 19 16 0 0 0 1 +0 8 15 20 0 0 0 1 +0 20 5 8 0 0 0 1 +0 21 11 9 0 0 0 1 +0 9 6 21 0 0 0 1 +0 22 11 21 0 0 0 1 +0 23 20 15 0 0 0 1 +0 24 16 19 0 0 0 1 +0 19 22 24 0 0 0 1 +0 18 17 25 0 0 0 1 +0 25 23 18 0 0 0 1 +0 25 26 20 0 0 0 1 +0 20 23 25 0 0 0 1 +0 24 22 21 0 0 0 1 +0 21 27 24 0 0 0 1 +0 28 27 21 0 0 0 1 +0 21 29 28 0 0 0 1 +0 30 28 29 0 0 0 1 +0 30 29 31 0 0 0 1 +0 31 32 30 0 0 0 1 +0 33 30 32 0 0 0 1 +0 32 34 33 0 0 0 1 +0 33 34 35 0 0 0 1 +0 34 36 37 0 0 0 1 +0 37 35 34 0 0 0 1 +0 37 36 38 0 0 0 1 +0 38 39 37 0 0 0 1 +0 38 40 41 0 0 0 1 +0 41 39 38 0 0 0 1 +0 42 41 40 0 0 0 1 +0 40 43 42 0 0 0 1 +0 42 43 44 0 0 0 1 +0 44 45 42 0 0 0 1 +0 45 44 46 0 0 0 1 +0 45 46 47 0 0 0 1 +0 46 20 26 0 0 0 1 +0 26 47 46 0 0 0 1 +0 48 49 50 1 1 1 1 +0 48 50 51 1 1 1 1 +0 52 53 49 1 1 1 1 +0 49 48 52 1 1 1 1 +0 54 55 50 1 1 1 1 +0 55 51 50 1 1 1 1 +0 52 56 53 1 1 1 1 +0 55 54 57 1 1 1 1 +0 58 57 59 1 1 1 1 +0 59 60 58 1 1 1 1 +0 61 62 60 1 1 1 1 +0 60 59 61 1 1 1 1 +0 62 61 63 1 1 1 1 +0 61 56 63 1 1 1 1 +0 64 65 66 1 1 1 1 +0 66 67 64 1 1 1 1 +0 68 63 56 1 1 1 1 +0 56 52 68 1 1 1 1 +0 57 58 69 1 1 1 1 +0 69 55 57 1 1 1 1 +0 69 58 70 1 1 1 1 +0 63 68 71 1 1 1 1 +0 67 66 72 1 1 1 1 +0 72 70 67 1 1 1 1 +0 73 65 64 1 1 1 1 +0 64 71 73 1 1 1 1 +0 68 74 73 1 1 1 1 +0 73 71 68 1 1 1 1 +0 69 70 72 1 1 1 1 +0 72 75 69 1 1 1 1 +0 69 75 76 1 1 1 1 +0 76 77 69 1 1 1 1 +0 77 76 78 1 1 1 1 +0 79 77 78 1 1 1 1 +0 78 80 79 1 1 1 1 +0 80 78 81 1 1 1 1 +0 81 82 80 1 1 1 1 +0 83 82 81 1 1 1 1 +0 84 85 82 1 1 1 1 +0 82 83 84 1 1 1 1 +0 86 85 84 1 1 1 1 +0 84 87 86 1 1 1 1 +0 88 89 86 1 1 1 1 +0 86 87 88 1 1 1 1 +0 89 88 90 1 1 1 1 +0 90 91 89 1 1 1 1 +0 92 91 90 1 1 1 1 +0 90 93 92 1 1 1 1 +0 94 92 93 1 1 1 1 +0 95 94 93 1 1 1 1 +0 74 68 94 1 1 1 1 +0 94 95 74 1 1 1 1 +0 84 83 83 1 1 1 1 +0 67 70 58 1 1 1 1 +0 67 58 60 1 1 1 1 +0 62 63 64 1 1 1 1 +0 64 63 71 1 1 1 1 +0 67 60 64 1 1 1 1 +0 64 60 62 1 1 1 1 +0 57 54 50 1 1 1 1 +0 50 59 57 1 1 1 1 +0 56 49 53 1 1 1 1 +0 56 61 49 1 1 1 1 +0 50 49 61 1 1 1 1 +0 61 59 50 1 1 1 1 +0 84 75 72 1 1 1 1 +0 72 66 84 1 1 1 1 +0 87 65 73 1 1 1 1 +0 73 74 87 1 1 1 1 +0 87 84 66 1 1 1 1 +0 66 65 87 1 1 1 1 +0 75 84 83 1 1 1 1 +0 87 74 88 1 1 1 1 +0 74 95 88 1 1 1 1 +0 88 95 93 1 1 1 1 +0 88 93 90 1 1 1 1 +0 75 83 76 1 1 1 1 +0 83 81 76 1 1 1 1 +0 76 81 78 1 1 1 1 +0 18 23 15 0 0 0 1 +0 15 13 18 0 0 0 1 +0 19 12 11 0 0 0 1 +0 19 11 22 0 0 0 1 +0 19 18 13 0 0 0 1 +0 13 12 19 0 0 0 1 +0 10 14 1 0 0 0 1 +0 10 1 0 0 0 0 1 +0 1 14 8 0 0 0 1 +0 8 4 1 0 0 0 1 +0 7 9 0 0 0 0 1 +0 0 9 10 0 0 0 1 +0 37 39 17 0 0 0 1 +0 17 16 37 0 0 0 1 +0 24 37 16 0 0 0 1 +0 39 25 17 0 0 0 1 +0 39 26 25 0 0 0 1 +0 24 27 37 0 0 0 1 +0 37 27 35 0 0 0 1 +0 35 27 28 0 0 0 1 +0 35 28 33 0 0 0 1 +0 33 28 30 0 0 0 1 +0 39 41 26 0 0 0 1 +0 26 41 47 0 0 0 1 +0 47 41 45 0 0 0 1 +0 45 41 42 0 0 0 1 + +Materials: 3 +"cells" +0.588235 0.588235 0.588235 1.000000 +0.588235 0.588235 0.588235 1.000000 +0.898039 0.898039 0.898039 1.000000 +0.000000 0.000000 0.000000 1.000000 +0.000000 +1.000000 +"..\black.png" +"" +"19 - Default" +1.000000 1.000000 1.000000 1.000000 +0.800000 0.800000 0.800000 1.000000 +0.000000 0.000000 0.000000 1.000000 +0.000000 0.000000 0.000000 1.000000 +0.000000 +1.000000 +"..\color4.png" +"" +"19 - Inside" +1.000000 1.000000 1.000000 1.000000 +1.000000 1.000000 1.000000 1.000000 +0.000000 0.000000 0.000000 1.000000 +0.000000 0.000000 0.000000 1.000000 +0.000000 +1.000000 +"..\color in.jpg" +"" + +Bones: 0 +GroupComments: 0 +MaterialComments: 0 +BoneComments: 0 +ModelComment: 0 diff --git a/NoteSkins/dance/midi-note-3d/tex/res/midinote3d.ms3d b/NoteSkins/dance/midi-note-3d/tex/res/midinote3d.ms3d new file mode 100644 index 0000000000..f6cb68a6b2 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/res/midinote3d.ms3d differ diff --git a/NoteSkins/dance/midi-note-3d/tex/res/midinote3d1.ms3d b/NoteSkins/dance/midi-note-3d/tex/res/midinote3d1.ms3d new file mode 100644 index 0000000000..ac6d167b68 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/res/midinote3d1.ms3d differ diff --git a/NoteSkins/dance/midi-note-3d/tex/res/midinote3d2.ms3d b/NoteSkins/dance/midi-note-3d/tex/res/midinote3d2.ms3d new file mode 100644 index 0000000000..99ae61e4af Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/res/midinote3d2.ms3d differ diff --git a/NoteSkins/dance/midi-note-3d/tex/res/midinote3d3.ms3d b/NoteSkins/dance/midi-note-3d/tex/res/midinote3d3.ms3d new file mode 100644 index 0000000000..79b808d1d9 Binary files /dev/null and b/NoteSkins/dance/midi-note-3d/tex/res/midinote3d3.ms3d differ diff --git a/NoteSkins/dance/midi-note/NoteSkin.lua b/NoteSkins/dance/midi-note/NoteSkin.lua index 2f97fb4e72..2ae3231d5f 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 = "StreamHead Active"; + sElement = "Hold Head Active"; end -- Test if sElement == "Hold Head Inactive" or - sElement == "Roll Head Inactive" or + sElement == "Roll Head Inactive" then - sElement = "StreamHead Inactive"; + sElement = "Hold Head Inactive"; end sButton = ret.RedirTable[sButton]; diff --git a/NoteSkins/dance/midi-note/metrics.ini b/NoteSkins/dance/midi-note/metrics.ini index 600751263c..4969099512 100644 --- a/NoteSkins/dance/midi-note/metrics.ini +++ b/NoteSkins/dance/midi-note/metrics.ini @@ -8,7 +8,7 @@ TapNoteAnimationLength=4 TapAdditionAnimationLength=4 TapMineAnimationLength=1 TapLiftAnimationLength=4 -HoldHeadAnimationLength=4 // doesn't matter. Only 1 frame anyway. +HoldHeadAnimationLength=1 // doesn't matter. Only 1 frame anyway. HoldTopCapAnimationLength=4 // doesn't matter. Only 1 frame anyway. HoldBottomCapAnimationLength=4 // doesn't matter. Only 1 frame anyway. HoldBodyAnimationLength=4 // doesn't matter. Only 1 frame anyway. @@ -35,7 +35,7 @@ TapFakeNoteColorTextureCoordSpacingX=0 TapFakeNoteColorTextureCoordSpacingY=0.125 HoldHeadNoteColorTextureCoordSpacingX=0 -HoldHeadNoteColorTextureCoordSpacingY=0.125 +HoldHeadNoteColorTextureCoordSpacingY=0 [GhostArrowDim] NoneCommand= diff --git a/Themes/_fallback/BGAnimations/ScreenCredits overlay.lua b/Themes/_fallback/BGAnimations/ScreenCredits overlay.lua new file mode 100644 index 0000000000..94591c70b1 --- /dev/null +++ b/Themes/_fallback/BGAnimations/ScreenCredits overlay.lua @@ -0,0 +1,141 @@ +local function Fooled() + local phrases = { + "hornswaggled", + "bamboozled", + "hoodwinked", + "swindled", + "duped", + "hoaxed", + "fleeced", + "shafted", + "caboodled", + "beguiled", + "finagled", + "two-timed", + "suckered", + "flimflammed" + } + return phrases[math.random(#phrases)] +end + +local ssc = { + "AJ Kelly as freem", + "Jonathan Payne (Midiman)", + "Colby Klein (shakesoda)", +} + +local sm_ssc = { + "Jason Felds (wolfman2000)", + "Alberto Ramos (Daisuke Master)", + "Jack Walstrom (FSX)", +} + +local stepmania = { + "Chris Danford", + "Glenn Maynard", + "Steve Checkoway", + -- and various other contributors +} + +local contrib = { + "Aldo Fregoso (Aldo_MX)", -- delays + "Chris Eldridge (kurisu)", -- dance-threepanel + "cerbo", + "cesarmades", -- pump/cmd* noteskins + "corec", -- various fixes + "galopin", -- piu PlayStation2 usb mat support + "gholms", -- automake 1.11 support + "juanelote", -- SongManager:GetSongGroupByIndex, JumpToNext/PrevGroup logic mods + "Kaox", -- pump/default noteskin + "NitroX72", -- pump/frame noteskin + "sy567", -- beginner helper fix + "Thai Pangsakulyanont (theDtTvB)", + "v1toko", -- x-mode from StepNXA +} + +local thanks = { + "A Pseudonymous Coder", -- support + "Bill Shillito (DM Ashura)", -- Music (not yet though) + "cpubasic13", -- testing (a lot) + "Dreamwoods", + "Infamouspat", -- oitg bro + "Jason Bolt (LightningXCE)", + "Jousway", -- Noteskins + "Matt1360", -- Automake magic + oitg bro + "Mark Cannon (vyhd)", -- oitg bro + twirl/roll + "Petriform", -- Music + "Renard", + "Ryan McKanna (Plaguefox)", +} + +local shoutout = { + "The Lua team", -- lua project lead or some shit. super nerdy but oh hell. + "Mojang", -- 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 + "You showed us... your ultimate dance", + -- "Can't stop crying... buckets of tears!" +} + +local copyright = { + "StepMania is released under the terms of the MIT license.", + "If you paid for the program you've been " .. Fooled() .. ".", + "All content is the sole property of their respectful owners." +} + +local sections = { + { "the spinal shark collective (project lead)", ssc }, + { "sm-ssc Team", sm_ssc }, + { "StepMania Team", stepmania }, + { "Other Contributors", contrib }, + { "Special Thanks", thanks }, + { "Shoutouts", shoutout }, + { "Copyright", copyright }, +} + +-- To add people or sections modify the above. + +local lineOn = cmd(zoom,0.875;strokecolor,color("#444444");shadowcolor,color("#444444");shadowlength,3) +local sectionOn = cmd(diffuse,color("#88DDFF");strokecolor,color("#446688");shadowcolor,color("#446688");shadowlength,3) +local item_padding_start = 4; + +local creditScroller = Def.ActorScroller { + SecondsPerItem = 0.5; + NumItemsToDraw = 40; + TransformFunction = function( self, offset, itemIndex, numItems) + self:y(30*offset) + end; + OnCommand = cmd(scrollwithpadding,item_padding_start,15); +} + +local function AddLine( text, command ) + local text = Def.ActorFrame{ + LoadFont("Common normal")..{ + Text = text or ""; + OnCommand = command or lineOn; + } + } + table.insert( creditScroller, text ) +end + +-- Add sections with padding. +for section in ivalues(sections) do + AddLine( section[1], sectionOn ) + for name in ivalues(section[2]) do + AddLine( name ) + end + AddLine() + AddLine() +end + +creditScroller.BeginCommand=function(self) + SCREENMAN:GetTopScreen():PostScreenMessage( "SM_BeginFadingOut", (t.SecondsPerItem * (#t + item_padding_start) + 5) ); +end; + + +return Def.ActorFrame{ + creditScroller..{ + InitCommand=cmd(CenterX;y,SCREEN_BOTTOM-64), + } +}; \ No newline at end of file diff --git a/Themes/_fallback/BGAnimations/ScreenSelectProfile overlay.lua b/Themes/_fallback/BGAnimations/ScreenSelectProfile overlay.lua index 8355b85580..d8d484d7b0 100644 --- a/Themes/_fallback/BGAnimations/ScreenSelectProfile overlay.lua +++ b/Themes/_fallback/BGAnimations/ScreenSelectProfile overlay.lua @@ -1,9 +1,9 @@ function GetLocalProfiles() - local ret = {}; + local t = {}; for p = 0,PROFILEMAN:GetNumLocalProfiles()-1 do local profile=PROFILEMAN:GetLocalProfileFromIndex(p); - local item = Def.ActorFrame { + local ProfileCard = Def.ActorFrame { --[[ Def.Quad { InitCommand=cmd(zoomto,200,1;y,40/2); OnCommand=cmd(diffuse,Color('Outline');); @@ -22,10 +22,10 @@ function GetLocalProfiles() end; }; }; - table.insert( ret, item ); + t[#t+1]=ProfileCard; end; - return ret; + return t; end; function LoadCard(cColor) @@ -38,14 +38,14 @@ function LoadCard(cColor) return t end function LoadPlayerStuff(Player) - local ret = {}; + local t = {}; local pn = (Player == PLAYER_1) and 1 or 2; --[[ local t = LoadActor(THEME:GetPathB('', '_frame 3x3'), 'metal', 200, 230) .. { Name = 'BigFrame'; }; --]] - local t = Def.ActorFrame { + t[#t+1] = Def.ActorFrame { Name = 'JoinFrame'; LoadCard(Color('Orange')); --[[ Def.Quad { @@ -62,23 +62,13 @@ function LoadPlayerStuff(Player) OnCommand=cmd(diffuseshift;effectcolor1,Color('White');effectcolor2,color("0.5,0.5,0.5")); }; }; - table.insert( ret, t ); - t = Def.ActorFrame { + t[#t+1] = Def.ActorFrame { Name = 'BigFrame'; LoadCard(PlayerColor(Player)); }; - table.insert( ret, t ); - ---[[ t = LoadActor(THEME:GetPathB('', '_frame 3x3'), 'metal', 170, 20) .. { + t[#t+1] = Def.ActorFrame { Name = 'SmallFrame'; - }; --]] - t = Def.ActorFrame { - Name = 'SmallFrame'; ---[[ Def.Quad { - InitCommand=cmd(zoomto,170+4,32+4); - OnCommand=cmd(shadowlength,1); - }; --]] InitCommand=cmd(y,-2); Def.Quad { InitCommand=cmd(zoomto,200-10,40+2); @@ -97,9 +87,8 @@ function LoadPlayerStuff(Player) OnCommand=cmd(diffuse,PlayerColor(Player);glow,color("1,1,1,0.25")); }; }; - table.insert( ret, t ); - t = Def.ActorScroller{ + t[#t+1] = Def.ActorScroller{ Name = 'Scroller'; NumItemsToDraw=6; -- InitCommand=cmd(y,-230/2+20;); @@ -114,34 +103,17 @@ function LoadPlayerStuff(Player) end; children = GetLocalProfiles(); }; - table.insert( ret, t ); - t = Def.ActorFrame { + t[#t+1] = Def.ActorFrame { Name = "EffectFrame"; - --[[ Def.Quad { - InitCommand=cmd(y,-230/2;vertalign,top;zoomto,200,8;fadebottom,1); - OnCommand=cmd(diffuse,Color("Black");diffusealpha,0.25); - }; - Def.Quad { - InitCommand=cmd(y,230/2;vertalign,bottom;zoomto,200,8;fadetop,1); - OnCommand=cmd(diffuse,Color("Black");diffusealpha,0.25); - }; --]] }; - table.insert( ret, t ); ---[[ t = Def.BitmapText { - OnCommand = cmd(y,160); - Name = 'SelectedProfileText'; - Font = "Common Normal"; - Text = 'No profile'; - }; --]] - t = LoadFont("Common Normal") .. { + t[#t+1] = LoadFont("Common Normal") .. { Name = 'SelectedProfileText'; --InitCommand=cmd(y,160;shadowlength,1;diffuse,PlayerColor(Player)); InitCommand=cmd(y,160;shadowlength,1;); }; - table.insert( ret, t ); - return ret; + return t; end; function UpdateInternal3(self, Player) diff --git a/Themes/_fallback/Fonts/_korean 24px [jamo 4-stroke] 8x8.png b/Themes/_fallback/Fonts/_korean 24px [jamo 4-stroke] 8x8.png index 529df808ef..0dccd4b664 100644 Binary files a/Themes/_fallback/Fonts/_korean 24px [jamo 4-stroke] 8x8.png and b/Themes/_fallback/Fonts/_korean 24px [jamo 4-stroke] 8x8.png differ diff --git a/Themes/_fallback/Fonts/_korean 24px [jamo 4] 8x8.png b/Themes/_fallback/Fonts/_korean 24px [jamo 4] 8x8.png index d7c9138b63..374671719a 100644 Binary files a/Themes/_fallback/Fonts/_korean 24px [jamo 4] 8x8.png and b/Themes/_fallback/Fonts/_korean 24px [jamo 4] 8x8.png differ diff --git a/Themes/_fallback/Fonts/_korean 24px.ini b/Themes/_fallback/Fonts/_korean 24px.ini index 1e8c45164f..788c68ac0c 100644 --- a/Themes/_fallback/Fonts/_korean 24px.ini +++ b/Themes/_fallback/Fonts/_korean 24px.ini @@ -1,4 +1,4 @@ -[common] +[common] Top=5 Baseline=26 LineSpacing=28 @@ -42,4 +42,5 @@ line 2=í°íƒ‘터투트티펌페 line 3=í¼í•‘할함해행헤혀 line 4=환회휘태난터까시 line 5=간너ìƒëŸ¬ë²„문ì³ë‹¬ -line 6=깡천림í™ì„ +line 6=깡천림í™ì„ì•…ì „ë°˜ +line 7=채 diff --git a/Themes/_fallback/Graphics/CombinedLifeMeterTug stream p1.png b/Themes/_fallback/Graphics/CombinedLifeMeterTug stream p1.png index 9d1b997b23..d4cd501ba7 100644 Binary files a/Themes/_fallback/Graphics/CombinedLifeMeterTug stream p1.png and b/Themes/_fallback/Graphics/CombinedLifeMeterTug stream p1.png differ diff --git a/Themes/_fallback/Graphics/CombinedLifeMeterTug stream p2.png b/Themes/_fallback/Graphics/CombinedLifeMeterTug stream p2.png index 67226f3897..0ce3736e34 100644 Binary files a/Themes/_fallback/Graphics/CombinedLifeMeterTug stream p2.png and b/Themes/_fallback/Graphics/CombinedLifeMeterTug stream p2.png differ diff --git a/Themes/_fallback/Graphics/Common window icon.png b/Themes/_fallback/Graphics/Common window icon.png index 9e88998360..23750444ac 100644 Binary files a/Themes/_fallback/Graphics/Common window icon.png and b/Themes/_fallback/Graphics/Common window icon.png differ diff --git a/Themes/_fallback/Graphics/Judgment Normal 1x6.png b/Themes/_fallback/Graphics/Judgment Normal 1x6.png index 697a28e8ed..5579c3f196 100644 Binary files a/Themes/_fallback/Graphics/Judgment Normal 1x6.png and b/Themes/_fallback/Graphics/Judgment Normal 1x6.png differ diff --git a/Themes/_fallback/Graphics/OptionsCursorP1 Left (doubleres).png b/Themes/_fallback/Graphics/OptionsCursorP1 Left (doubleres).png index b967a57a6b..55247eb9ba 100644 Binary files a/Themes/_fallback/Graphics/OptionsCursorP1 Left (doubleres).png and b/Themes/_fallback/Graphics/OptionsCursorP1 Left (doubleres).png differ diff --git a/Themes/_fallback/Graphics/OptionsCursorP1 Middle (doubleres).png b/Themes/_fallback/Graphics/OptionsCursorP1 Middle (doubleres).png index 5cd8e75bd5..25033cb466 100644 Binary files a/Themes/_fallback/Graphics/OptionsCursorP1 Middle (doubleres).png and b/Themes/_fallback/Graphics/OptionsCursorP1 Middle (doubleres).png differ diff --git a/Themes/_fallback/Graphics/OptionsCursorP1 Right (doubleres).png b/Themes/_fallback/Graphics/OptionsCursorP1 Right (doubleres).png index f6a2b10238..a1dc9c2d67 100644 Binary files a/Themes/_fallback/Graphics/OptionsCursorP1 Right (doubleres).png and b/Themes/_fallback/Graphics/OptionsCursorP1 Right (doubleres).png differ diff --git a/Themes/_fallback/Graphics/OptionsCursorP2 Left (doubleres).png b/Themes/_fallback/Graphics/OptionsCursorP2 Left (doubleres).png index b7bcb02daa..c7141b1daa 100644 Binary files a/Themes/_fallback/Graphics/OptionsCursorP2 Left (doubleres).png and b/Themes/_fallback/Graphics/OptionsCursorP2 Left (doubleres).png differ diff --git a/Themes/_fallback/Graphics/OptionsCursorP2 Middle (doubleres).png b/Themes/_fallback/Graphics/OptionsCursorP2 Middle (doubleres).png index 3a7079e700..410961c083 100644 Binary files a/Themes/_fallback/Graphics/OptionsCursorP2 Middle (doubleres).png and b/Themes/_fallback/Graphics/OptionsCursorP2 Middle (doubleres).png differ diff --git a/Themes/_fallback/Graphics/OptionsCursorP2 Right (doubleres).png b/Themes/_fallback/Graphics/OptionsCursorP2 Right (doubleres).png index ed54d17341..fb04d53115 100644 Binary files a/Themes/_fallback/Graphics/OptionsCursorP2 Right (doubleres).png and b/Themes/_fallback/Graphics/OptionsCursorP2 Right (doubleres).png differ diff --git a/Themes/_fallback/Graphics/OptionsUnderlineP1 Left (doubleres).png b/Themes/_fallback/Graphics/OptionsUnderlineP1 Left (doubleres).png index dc8c30d81e..6387c652a9 100644 Binary files a/Themes/_fallback/Graphics/OptionsUnderlineP1 Left (doubleres).png and b/Themes/_fallback/Graphics/OptionsUnderlineP1 Left (doubleres).png differ diff --git a/Themes/_fallback/Graphics/OptionsUnderlineP1 Middle (doubleres).png b/Themes/_fallback/Graphics/OptionsUnderlineP1 Middle (doubleres).png index b730fdce3d..c0416a73ef 100644 Binary files a/Themes/_fallback/Graphics/OptionsUnderlineP1 Middle (doubleres).png and b/Themes/_fallback/Graphics/OptionsUnderlineP1 Middle (doubleres).png differ diff --git a/Themes/_fallback/Graphics/OptionsUnderlineP1 Right (doubleres).png b/Themes/_fallback/Graphics/OptionsUnderlineP1 Right (doubleres).png index bf0fe5be22..b7d6b77654 100644 Binary files a/Themes/_fallback/Graphics/OptionsUnderlineP1 Right (doubleres).png and b/Themes/_fallback/Graphics/OptionsUnderlineP1 Right (doubleres).png differ diff --git a/Themes/_fallback/Graphics/OptionsUnderlineP2 Left (doubleres).png b/Themes/_fallback/Graphics/OptionsUnderlineP2 Left (doubleres).png index 5e13db0cca..d3407076ae 100644 Binary files a/Themes/_fallback/Graphics/OptionsUnderlineP2 Left (doubleres).png and b/Themes/_fallback/Graphics/OptionsUnderlineP2 Left (doubleres).png differ diff --git a/Themes/_fallback/Graphics/OptionsUnderlineP2 Middle (doubleres).png b/Themes/_fallback/Graphics/OptionsUnderlineP2 Middle (doubleres).png index 27fde0de05..52caa00843 100644 Binary files a/Themes/_fallback/Graphics/OptionsUnderlineP2 Middle (doubleres).png and b/Themes/_fallback/Graphics/OptionsUnderlineP2 Middle (doubleres).png differ diff --git a/Themes/_fallback/Graphics/OptionsUnderlineP2 Right (doubleres).png b/Themes/_fallback/Graphics/OptionsUnderlineP2 Right (doubleres).png index 446c29cc2c..43645c39e2 100644 Binary files a/Themes/_fallback/Graphics/OptionsUnderlineP2 Right (doubleres).png and b/Themes/_fallback/Graphics/OptionsUnderlineP2 Right (doubleres).png differ diff --git a/Themes/_fallback/Graphics/ScoreDisplayRave stream level1.png b/Themes/_fallback/Graphics/ScoreDisplayRave stream level1.png index d29741c9ec..e5a9418357 100644 Binary files a/Themes/_fallback/Graphics/ScoreDisplayRave stream level1.png and b/Themes/_fallback/Graphics/ScoreDisplayRave stream level1.png differ diff --git a/Themes/_fallback/Graphics/ScoreDisplayRave stream level2.png b/Themes/_fallback/Graphics/ScoreDisplayRave stream level2.png index dc89c20be9..199e406605 100644 Binary files a/Themes/_fallback/Graphics/ScoreDisplayRave stream level2.png and b/Themes/_fallback/Graphics/ScoreDisplayRave stream level2.png differ diff --git a/Themes/_fallback/Graphics/ScoreDisplayRave stream level3.png b/Themes/_fallback/Graphics/ScoreDisplayRave stream level3.png index 68f70a0159..41138c9a2f 100644 Binary files a/Themes/_fallback/Graphics/ScoreDisplayRave stream level3.png and b/Themes/_fallback/Graphics/ScoreDisplayRave stream level3.png differ diff --git a/Themes/_fallback/Graphics/ScreenEvaluation Percent Frame P1.redir b/Themes/_fallback/Graphics/ScreenEvaluation PercentFrame P1.redir similarity index 100% rename from Themes/_fallback/Graphics/ScreenEvaluation Percent Frame P1.redir rename to Themes/_fallback/Graphics/ScreenEvaluation PercentFrame P1.redir diff --git a/Themes/_fallback/Graphics/ScreenEvaluation Percent Frame P2.redir b/Themes/_fallback/Graphics/ScreenEvaluation PercentFrame P2.redir similarity index 100% rename from Themes/_fallback/Graphics/ScreenEvaluation Percent Frame P2.redir rename to Themes/_fallback/Graphics/ScreenEvaluation PercentFrame P2.redir diff --git a/Themes/_fallback/Graphics/ScreenOptions LineHighlight.redir b/Themes/_fallback/Graphics/ScreenOptions LineHighlight P1.redir similarity index 100% rename from Themes/_fallback/Graphics/ScreenOptions LineHighlight.redir rename to Themes/_fallback/Graphics/ScreenOptions LineHighlight P1.redir diff --git a/Themes/_fallback/Graphics/ScreenSelectmusic score frame p1.redir b/Themes/_fallback/Graphics/ScreenOptions LineHighlight P2.redir similarity index 100% rename from Themes/_fallback/Graphics/ScreenSelectmusic score frame p1.redir rename to Themes/_fallback/Graphics/ScreenOptions LineHighlight P2.redir diff --git a/Themes/_fallback/Graphics/ScreenSelectmusic score frame p2.redir b/Themes/_fallback/Graphics/ScreenSelectMusic ScoreFrame P1.redir similarity index 100% rename from Themes/_fallback/Graphics/ScreenSelectmusic score frame p2.redir rename to Themes/_fallback/Graphics/ScreenSelectMusic ScoreFrame P1.redir diff --git a/Themes/_fallback/Graphics/ScreenSelectMusic ScoreFrame P2.redir b/Themes/_fallback/Graphics/ScreenSelectMusic ScoreFrame P2.redir new file mode 100644 index 0000000000..04b2ead777 --- /dev/null +++ b/Themes/_fallback/Graphics/ScreenSelectMusic ScoreFrame P2.redir @@ -0,0 +1 @@ +_blank \ No newline at end of file diff --git a/Themes/_fallback/Graphics/ScreenSelectProfile CardBackground.png b/Themes/_fallback/Graphics/ScreenSelectProfile CardBackground.png index 046958618d..f19427e45f 100644 Binary files a/Themes/_fallback/Graphics/ScreenSelectProfile CardBackground.png and b/Themes/_fallback/Graphics/ScreenSelectProfile CardBackground.png differ diff --git a/Themes/_fallback/Graphics/ScreenSelectProfile CardFrame.png b/Themes/_fallback/Graphics/ScreenSelectProfile CardFrame.png index d35a931168..930e959214 100644 Binary files a/Themes/_fallback/Graphics/ScreenSelectProfile CardFrame.png and b/Themes/_fallback/Graphics/ScreenSelectProfile CardFrame.png differ diff --git a/Themes/_fallback/Graphics/ScreenTitleMenu logo.png b/Themes/_fallback/Graphics/ScreenTitleMenu logo.png index 72d198be1a..3ca532dced 100644 Binary files a/Themes/_fallback/Graphics/ScreenTitleMenu logo.png and b/Themes/_fallback/Graphics/ScreenTitleMenu logo.png differ diff --git a/Themes/_fallback/Graphics/SnapDisplay icon 9x1.png b/Themes/_fallback/Graphics/SnapDisplay icon 9x1.png index 7155d3f182..9f51b94133 100644 Binary files a/Themes/_fallback/Graphics/SnapDisplay icon 9x1.png and b/Themes/_fallback/Graphics/SnapDisplay icon 9x1.png differ diff --git a/Themes/_fallback/Graphics/StreamDisplay hot.png b/Themes/_fallback/Graphics/StreamDisplay hot.png index 6c6956e44e..e2ad51a314 100644 Binary files a/Themes/_fallback/Graphics/StreamDisplay hot.png and b/Themes/_fallback/Graphics/StreamDisplay hot.png differ diff --git a/Themes/_fallback/Graphics/StreamDisplay normal.png b/Themes/_fallback/Graphics/StreamDisplay normal.png index 734a4c6750..adc767ccee 100644 Binary files a/Themes/_fallback/Graphics/StreamDisplay normal.png and b/Themes/_fallback/Graphics/StreamDisplay normal.png differ diff --git a/Themes/_fallback/Graphics/_blank.png b/Themes/_fallback/Graphics/_blank.png index af1d438da2..b193cde188 100644 Binary files a/Themes/_fallback/Graphics/_blank.png and b/Themes/_fallback/Graphics/_blank.png differ diff --git a/Themes/_fallback/Graphics/_missing.png b/Themes/_fallback/Graphics/_missing.png index af1d438da2..b193cde188 100644 Binary files a/Themes/_fallback/Graphics/_missing.png and b/Themes/_fallback/Graphics/_missing.png differ diff --git a/Themes/_fallback/Languages/en.ini b/Themes/_fallback/Languages/en.ini index a5dbbfbab7..d9d10e7aca 100644 --- a/Themes/_fallback/Languages/en.ini +++ b/Themes/_fallback/Languages/en.ini @@ -435,7 +435,7 @@ SoundResampleQuality=Advanced: Select the resampling quality to use. SoundVolume=Adjust the volume level during gameplay. SoundVolumeAttract=Adjust the volume level during attract mode. Speed=Speed -Stepmania Credits=The Stepmania Development Team +StepMania Credits=The StepMania Development Team. Steps=Steps Style= Test Input=Test the responsiveness of connected joysticks. @@ -534,6 +534,7 @@ x2.5=2.5x 8=8 8th=8th 9=9 +Actual=Actual Add=Additive All Music=All Music AllDifficulties=All Difficulties @@ -706,6 +707,7 @@ Song BGAnimation=Song BGAnimation Song Bitmap=Song Bitmap Song Movie=Song Movie Space=Space +Specified=Specified Split=Split Standard=Standard Start=Start @@ -822,6 +824,7 @@ Delete=Delete Delete beat and shift up=Delete beat and shift up Description=Description Difficulty=Difficulty +Display BPM=Display BPM DisplayAspectRatio=Aspect Ratio DisplayColorDepth=Display Color DisplayResolution=Display Resolution @@ -843,6 +846,7 @@ Edit time signature (top)=Edit time signature (beats per measure) Edit time signature (bottom)=Edit time signature (single beat note value) Edit tickcount=Edit tickcount Edit combo=Edit combo +Edit warp=Edit warp Editor options=Options EditorShowBGChangesPlay=Show Backgrounds Effect=Effect @@ -900,9 +904,11 @@ Low Meter=Low Meter Advanced Options=Advanced Options Main title=Main title Main title transliteration=Main title transliteration +Max BPM=Max Specified BPM MaxTextureResolution=Texture Resolution MenuTimer=Menu Timer Meter=Meter +Min BPM=Min Specified BPM Mines=Mines MoveRandomToEnd=Random At End More Options=More Options @@ -985,7 +991,7 @@ ShowSongOptions=Show Song Options ShowStats=Show Stats SmoothLines=SmoothLines SoundEffect=Sound Effect -Stepmania Credits=Stepmania Credits +StepMania Credits=StepMania Credits Center1Player=Center 1 Player Song=Song Song Group=Song Group @@ -1209,6 +1215,7 @@ Enter a new Time Signature numerator value.=Enter the number of beats per measur Enter a new Time Signature denominator value.=Enter the note value that represents one beat. Enter a new Tickcount value.=Enter a new Tickcount value. Enter a new Combo value.=Enter a new Combo value. +Enter a new Warp value.=Enter the beat you will warp to when you reach this point. Enter a new artist transliteration.=Enter a new artist transliteration. Enter a new artist.=Enter a new artist. Enter a new genre.=Enter a new genre. @@ -1221,6 +1228,8 @@ 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. Enter a new sub title.=Enter a new sub title. +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\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\nF1:\n Show help\n @@ -2221,18 +2230,6 @@ HeaderText=Edit Course HelpText=&MENUUP;&MENUDOWN; Move &MENULEFT;&MENURIGHT; Change Value [ScreenOptionsCourseOverview] HeaderText=Course Overview -[ScreenQuickSetupOverview] -HeaderText=Quick Setup - Welcome! -[ScreenQuickSetupPhaseOne] -HeaderText=Quick Setup - Page 1: Profile -[ScreenQuickSetupPhaseTwo] -HeaderText=Quick Setup - Page 2: Gameplay -[ScreenQuickSetupPhaseThree] -HeaderText=Quick Setup - Page 3: Appearance -[ScreenQuickSetupPhaseFour] -HeaderText=Quick Setup - Page 4: Extra -[ScreenQuickSetupFinished] -HeaderText=Quick Setup - Finished! [ScreenSelectProfile] HeaderText=Select Profile [ScreenSelectPlayStyle] diff --git a/Themes/_fallback/Other/_blank.png b/Themes/_fallback/Other/_blank.png index af1d438da2..b193cde188 100644 Binary files a/Themes/_fallback/Other/_blank.png and b/Themes/_fallback/Other/_blank.png differ diff --git a/Themes/_fallback/Other/_missing.png b/Themes/_fallback/Other/_missing.png index af1d438da2..b193cde188 100644 Binary files a/Themes/_fallback/Other/_missing.png and b/Themes/_fallback/Other/_missing.png differ diff --git a/Themes/_fallback/Scripts/02 Branches.lua b/Themes/_fallback/Scripts/02 Branches.lua index d57ef9d551..f10f448946 100644 --- a/Themes/_fallback/Scripts/02 Branches.lua +++ b/Themes/_fallback/Scripts/02 Branches.lua @@ -71,6 +71,13 @@ Branch = { end; return "ScreenSelectProfile"; end, + OptionsEdit = function() + -- Similar to above, don't let anyone in here with 0 songs. + if SONGMAN:GetNumSongs() == 0 and SONGMAN:GetNumAdditionalSongs() == 0 then + return "ScreenHowToInstallSongs"; + end; + return "ScreenOptionsEdit"; + end, AfterProfileLoad = function() return "ScreenSelectProfile" end, @@ -186,10 +193,4 @@ Branch = { Network = function() return IsNetConnected() and "ScreenTitleMenu" or "ScreenTitleMenu" end, - QuickSetupStart = "ScreenQuickSetupOverview", - QuickSetupA = "ScreenQuickSetupPhaseOne", - QuickSetupB = "ScreenQuickSetupPhaseTwo", - QuickSetupC = "ScreenQuickSetupPhaseThree", - QuickSetupD = "ScreenQuickSetupPhaseFour", - QuickSetupFinished = "ScreenQuickSetupFinished" } diff --git a/Themes/_fallback/Scripts/02 Lyrics.lua b/Themes/_fallback/Scripts/02 Lyrics.lua index 169aff9712..9c3be1833e 100644 --- a/Themes/_fallback/Scripts/02 Lyrics.lua +++ b/Themes/_fallback/Scripts/02 Lyrics.lua @@ -1,5 +1,6 @@ function Actor:LyricCommand(side) self:settext( Var "LyricText" ) + self:draworder(102) self:stoptweening() self:shadowlengthx(0) diff --git a/Themes/_fallback/Scripts/03 CustomSpeedMods.lua b/Themes/_fallback/Scripts/03 CustomSpeedMods.lua index af8806d129..48e23bd5ed 100644 --- a/Themes/_fallback/Scripts/03 CustomSpeedMods.lua +++ b/Themes/_fallback/Scripts/03 CustomSpeedMods.lua @@ -40,7 +40,7 @@ v1.1 * Cleaned up code some, I think. ________________________________________________________________________________ anticipated future changes: -* M-Mod support (when sm-ssc imntegrates it) +* 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,0.75x,1x,1.75x,2x,2.25x,2.5x,C150,C300" + local fallbackString = "0.5x,1x,1.5x,2x,3x,4x,8x,C200,C400" Trace("[CustomSpeedMods]: Could not read SpeedMods; writing fallback to "..path) file:Open(path, 2) file:Write(fallbackString) diff --git a/Themes/_fallback/Scripts/03 ProductivityHelpers.lua b/Themes/_fallback/Scripts/03 ProductivityHelpers.lua index 29f1addd20..efe523ddfa 100644 --- a/Themes/_fallback/Scripts/03 ProductivityHelpers.lua +++ b/Themes/_fallback/Scripts/03 ProductivityHelpers.lua @@ -141,6 +141,10 @@ function Actor:xy(actorX,actorY) self:y(actorY) end +function PositionPerPlayer(player, p1X, p2X) + return player == PLAYER_1 and p1X or p2X +end + -- MaskSource([clearzbuffer]) -- Sets an actor up as the source for a mask. Clears zBuffer by default. function Actor:MaskSource(noclear) diff --git a/Themes/_fallback/Sounds/_Music title (loop).ogg b/Themes/_fallback/Sounds/_Music title (loop).ogg index 5fb39c16f7..b61cd34099 100644 Binary files a/Themes/_fallback/Sounds/_Music title (loop).ogg and b/Themes/_fallback/Sounds/_Music title (loop).ogg differ diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index cd1040325c..95db410a9f 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -64,6 +64,7 @@ OverlayScreens="ScreenSystemLayer,ScreenSyncOverlay,ScreenStatsOverlay,ScreenDeb PercentScoreDecimalPlaces=2 # 02 # + [LightsManager] # Mostly useless since it doesn't work, as well as that barely anyone has # lights to play around with. @@ -122,12 +123,39 @@ UnlockColor=color("1,0.5,0,1") ExtraColor=color("#ff0000") -- red [UnlockManager] -# Unlock specific things. we'll go in-depth with this one day, but it really -# isnt what sm-ssc was designed for. +# Unlock specific things. AutoLockChallengeSteps=false UnlockNames="" +# useful commands: +# require,(UnlockRequirement),(value); +# where (UnlockRequirement) is one of the UnlockRequirement enums. + +# song,(Song Name); +# sets a Song to be unlocked + +# course,(Course Name); +# sets a Course to be unlocked + +# roulette; +# Song shows up in roulette (useful with Song only) + +# mod,(modifier); +# sets a modifier to be unlocked. + +# code,(code); +# assigns a code to the unlock + +# examples: +# 1) The song "Pledge" requires 500 AP. +# Unlock1Command=song,"Pledge";require,"UnlockRequirement_ArcadePoints",500 + +# 2) The song "ABC" can be unlocked via roulette; pick an arbitrary code +# to use to store the unlock. +# Unlock2Command=song,"ABC";code,"59183751";roulette + # 03 # + [ArrowEffects] # Complicated stuff you probably shouldn't ever mess with or else you'll # destroy mods completely! @@ -193,6 +221,8 @@ BottomEdge=SCREEN_BOTTOM # Scroll stuff when you roll over it, DDR Extreme style. ScrollRandom=false ScrollRoulette=false +# Control how fast the banner scrolls. Higher numbers mean slower. +ScrollSpeedDivisor=2 [BitmapText] # The colors in the 'roulette' text. you can have alot! @@ -233,6 +263,11 @@ FormatString="%03.0f" [CodeDetector] # Codes on the MusicWheel that change stuff! +# For Future Reference: +# @ = Holding +# - = In Conjuction With / Then +# ~ = Released +# + = At The Same Time PrevSteps1="Up,Up" PrevSteps2="MenuUp,MenuUp" NextSteps1="Down,Down" @@ -279,6 +314,7 @@ SaveScreenshot1="MenuLeft-MenuRight" SaveScreenshot2="" CancelAllPlayerOptions="Left,Right,Left,Right,Left,Right" BackInEventMode="" + [CodeDetectorOnline] Fallback="CodeDetector" PrevSteps1="MenuUp,MenuUp" @@ -337,6 +373,7 @@ TipShowTime=4 TipSwitchTime=1 # The Command when its made TipOnCommand=shadowlength,0;diffuseblink + [Judgment] # New # JudgmentOnCommand= @@ -438,6 +475,7 @@ PumpRoutineString="Routine" # Difficulty_Edit-StepsType_Pump_Halfdouble=Edit # Difficulty_Edit-StepsType_Pump_Double=Edit # Course=Progressive + [CustomScoring] # Custom scoring, usually good for custom games. @@ -464,6 +502,7 @@ PointsCheckpointMiss=-5 PointsNone=0 PointsHoldHeld=+5 PointsHoldLetGo=-5 + [DifficultyList] # A list that shows difficulties in a song. CapitalizeDifficultyNames=false @@ -483,6 +522,9 @@ BannerFadeOffCommand=diffusealpha,1;stoptweening;linear,0.25;diffusealpha,0 # ? BannerResetFadeCommand=diffusealpha,1 +BannerRouletteCommand= +BannerRandomCommand= + [Gameplay] # System Direction ComboIsPerRow=ComboPerRow() @@ -585,6 +627,7 @@ StreamX=0 StreamY=0 OverX=0 OverY=0 + [LifeMeterBattery] # The bar that shows up in Oni mode. @@ -627,7 +670,6 @@ DancePointsP2Y=0 DancePointsP2OnCommand=zoom,0.7;shadowlength,0;diffuse,PlayerColor(PLAYER_2) DancePointsP2OffCommand= - [LifeMeterTime] # The Lifemeter that shows up when you're playing survival. @@ -838,16 +880,19 @@ PortalColor=color("1,0,0,1") SortOrders={ "SortOrder_Preferred", "SortOrder_Group", "SortOrder_Title", "SortOrder_BPM", "SortOrder_Artist", "SortOrder_Genre" } # SortOrders={ "SortOrder_Preferred", "SortOrder_Group", "SortOrder_Title", "SortOrder_BPM", "SortOrder_Popularity", "SortOrder_Artist", "SortOrder_Genre" } -# + ShowRoulette=true ShowRandom=false ShowPortal=false -# + +SortBPMDivision=20 +SortLengthDivision=5 + MostPlayedSongsToShow=30 RecentSongsToShow=30 -# + UseEasyMarkerFlag=false -# + ModeMenuChoiceNames="Preferred,Group,Title,Bpm,Popularity,TopGrades,Artist,EasyMeter,MediumMeter,HardMeter,ChallengeMeter,DoubleEasyMeter,DoubleMediumMeter,DoubleHardMeter,DoubleChallengeMeter,Genre,Length,Recent" # ModeMenuChoiceNames="Preferred,Group,Title,Bpm,Popularity,TopGrades,Artist,EasyMeter,MediumMeter,HardMeter,ChallengeMeter,DoubleEasyMeter,DoubleMediumMeter,DoubleHardMeter,DoubleChallengeMeter,Genre,Length,Recent,NormalMode,BattleMode" ChoicePreferred="sort,Preferred" @@ -870,7 +915,7 @@ ChoiceLength="sort,Length" ChoiceRecent="sort,Recent" ChoiceNormalMode="playmode,regular" ChoiceBattleMode="playmode,battle" -# + CustomWheelItemNames="" [CourseWheel] @@ -963,6 +1008,7 @@ RoutineNoteSkinP2=RoutineSkinP2() BPMColor=color("1,0,0,1") StopColor=color("0.8,0.8,0,1") DelayColor=color("0,0.8,0.8,1") +WarpColor=color("1,0,0.5,1") TimeSignatureColor=color("1,0.55,0,1") TickcountColor=color("0,1,0,1") ComboColor=color("0.55,1,0,1") @@ -970,13 +1016,15 @@ ComboColor=color("0.55,1,0,1") BPMIsLeftSide=true StopIsLeftSide=true DelayIsLeftSide=true +WarpIsLeftSide=false TimeSignatureIsLeftSide=true TickcountIsLeftSide=false ComboIsLeftSide=false # BPMOffsetX=60 -StopOffsetX=10 -DelayOffsetX=10 +StopOffsetX=50 +DelayOffsetX=120 +WarpOffsetX=60 TimeSignatureOffsetX=30 TickcountOffsetX=10 ComboOffsetX=30 @@ -1095,7 +1143,6 @@ TextOffCommand= [ScoreDisplayOni] - [ScoreDisplayLifeTime] FrameX= FrameY= @@ -1245,6 +1292,7 @@ SoundProperty="Pitch" PropertyMin=7/8 PropertyCenter=1.0 PropertyMax=9/8 + [StepsDisplayListRow] FrameX=0 FrameY=0 @@ -1321,6 +1369,7 @@ ShowTraining=false BlinkPlayersBest=true # 04 # + [Screen] ScreenInitCommand= ScreenOnCommand= @@ -1371,6 +1420,7 @@ HeaderTextOffCommand= LineOnCommand=zoom,0.75 # + [ScreenSystemLayer] Class="ScreenSystemLayer" Fallback="Screen" @@ -1421,6 +1471,7 @@ Fallback="Screen" StatusOnCommand=x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y+150;shadowlength,2;strokecolor,color("#000000"); AdjustmentsOnCommand=x,SCREEN_CENTER_X+160;y,SCREEN_CENTER_Y; # + [ScreenStatsOverlay] Class="ScreenStatsOverlay" Fallback="Screen" @@ -1434,6 +1485,7 @@ SkipOnCommand=zoom,0.5 SkipWidth=190 SkipSpacingY=14 # + [ScreenWithMenuElements] Class="ScreenWithMenuElements" Fallback="Screen" @@ -1657,21 +1709,18 @@ Choice1="applydefaultoptions;text,Game Start;screen,"..Branch.StartGame() Choice2="screen,ScreenNetworkOptions;text,Play Online" Choice3="screen,ScreenSelectGame;text,Select Game" Choice4="screen,ScreenOptionsService;text,Options" -Choice5="screen,ScreenOptionsEdit;text,Edit/Share" +Choice5="text,Edit/Share;screen,"..Branch.OptionsEdit() Choice6="screen,ScreenJukeboxMenu;text,Jukebox" Choice7="screen,ScreenExit;text,Exit" Choice8="screen,ScreenTest;text,Sandbox" -Choice9="screen,ScreenQuickSetupOverview;text,Setup" # Aliases for the future. -ChoiceSetup="screen,ScreenQuickSetupOverview;text,Setup" -ChoiceGameStart="applydefaultoptions;screen,ScreenSelectProfile;text,Game Start" +ChoiceGameStart="applydefaultoptions;text,Game Start;screen,"..Branch.StartGame() ChoiceOnline="screen,ScreenNetworkOptions;text,Play Online" ChoiceGameSelect="screen,ScreenSelectGame;text,Select Game" ChoiceOptions="screen,ScreenOptionsSystemDirection;text,Options" -ChoiceEdit="screen,ScreenOptionsEdit;text,Edit/Share" +ChoiceEdit="text,Edit/Share;screen,"..Branch.OptionsEdit() ChoiceJukebox="screen,ScreenJukeboxMenu;text,Jukebox" ChoiceSandbox="screen,ScreenTest;text,Sandbox" -ChoiceSetup="screen,ScreenQuickSetupOverview;text,Setup" ChoiceExit="screen,ScreenExit;text,Exit" # AllowRepeatingInput=true @@ -1720,87 +1769,7 @@ LogoX=SCREEN_CENTER_X LogoY=SCREEN_CENTER_Y-80 LogoOnCommand=bob;effectperiod,4;effectmagnitude,0,8,0;zoom,0;bounceend,0.35;zoom,1 LogoOffCommand= -[ScreenQuickSetupOverview] -Class="ScreenSelectMaster" -Fallback="ScreenSelectMaster" -# -NextScreen=Branch.QuickSetupA -PrevScreen=Branch.TitleMenu() -# -TimerSeconds=-1 -# -DefaultChoice="Start" -ChoiceNames="Start,Back" -# -ChoiceStart="name,Start;screen,".. Branch.QuickSetupA -ChoiceBack="name,Back;screen,".. Branch.TitleMenu -# -PerChoiceScrollElement=false -PerChoiceIconElement=false -# -ShowScroller=true -WrapScroller=false -ShowIcon=true -[ScreenQuickSetupPhaseOne] -Class="ScreenSelectMaster" -Fallback="ScreenQuickSetupOverview" -# -NextScreen=Branch.QuickSetupBl -PrevScreen=Branch.QuickSetupStart -# -DefaultChoice="Set" -ChoiceNames="Set,Back" -# -ChoiceSet="name,Set;screen,".. Branch.QuickSetupB -ChoiceBack="name,Back;screen,".. Branch.QuickSetupStart -[ScreenQuickSetupPhaseTwo] -Class="ScreenSelectMaster" -Fallback="ScreenQuickSetupOverview" -# -NextScreen=Branch.QuickSetupC -PrevScreen=Branch.QuickSetupA -# -DefaultChoice="Set" -ChoiceNames="Set,Back" -# -ChoiceSet="name,Set;screen,".. Branch.QuickSetupC -ChoiceBack="name,Back;screen,".. Branch.QuickSetupA -[ScreenQuickSetupPhaseThree] -Class="ScreenSelectMaster" -Fallback="ScreenQuickSetupOverview" -# -NextScreen=Branch.QuickSetupD -PrevScreen=Branch.QuickSetupB -# -DefaultChoice="Set" -ChoiceNames="Set,Back" -# -ChoiceSet="name,Set;screen,".. Branch.QuickSetupD -ChoiceBack="name,Back;screen,".. Branch.QuickSetupB -[ScreenQuickSetupPhaseFour] -Class="ScreenSelectMaster" -Fallback="ScreenQuickSetupOverview" -# -NextScreen=Branch.QuickSetupFinished -PrevScreen=Branch.QuickSetupC -# -DefaultChoice="Set" -ChoiceNames="Set,Back" -# -ChoiceSet="name,Set;screen,".. Branch.QuickSetupFinished -ChoiceBack="name,Back;screen,".. Branch.QuickSetupC -[ScreenQuickSetupFinished] -Class="ScreenSelectMaster" -Fallback="ScreenQuickSetupOverview" -# -NextScreen=Branch.TitleMenu() -PrevScreen=Branch.QuickSetupD -# -DefaultChoice="Set" -ChoiceNames="Set,Back" -# -ChoiceSet="name,Set;screen,".. Branch.TitleMenu -ChoiceBack="name,Back;screen,".. Branch.QuickSetupD + [ScreenProfileLoad] Class="ScreenProfileLoad" Fallback="ScreenWithMenuElementsBlank" @@ -1817,7 +1786,7 @@ LoadEdits=true Fallback="ScreenWithMenuElements" Class="ScreenSelectProfile" # -ScreenOnCommand=lockinput,1 +ScreenOnCommand=%function(self) self:lockinput(3); end; # NextScreen=Branch.AfterSelectProfile() PrevScreen=Branch.TitleMenu() @@ -1830,7 +1799,8 @@ CodeUp="+MenuUp" CodeUp2="+Up" CodeDown="+MenuDown" CodeDown2="+Down" -CodeStart="Start" +# Holding Start let us skip ( annoying ) +CodeStart="~Start,+Start" CodeBack="Back" CodeCenter="Center" CodeDownLeft="DownLeft" @@ -1850,16 +1820,16 @@ DefaultChoice="Single" ChoiceNames=GameCompatibleModes() # OptionOrderAuto="1:2,2:1" -ChoiceSingle="name,Single;style,single;screen,"..Branch.AfterSelectPlayMode() -ChoiceDouble="name,Double;style,double;screen,"..Branch.AfterSelectPlayMode() -ChoiceSolo="name,Solo;style,solo;screen,"..Branch.AfterSelectPlayMode() -ChoiceVersus="name,Versus;style,versus;screen,"..Branch.AfterSelectPlayMode() -ChoiceCouple="name,Couple;style,couple;screen,"..Branch.AfterSelectPlayMode() -ChoiceHalfDouble="name,HalfDouble;style,halfdouble;screen,"..Branch.AfterSelectPlayMode() -Choice5Keys="name,5Keys;style,single5;;screen,"..Branch.AfterSelectPlayMode() -Choice7Keys="name,7Keys;style,single7;screen,"..Branch.AfterSelectPlayMode() -Choice10Keys="name,10Keys;style,double10;screen,"..Branch.AfterSelectPlayMode() -Choice14Keys="name,14Keys;style,double14;screen,"..Branch.AfterSelectPlayMode() +ChoiceSingle="name,Single;style,single;text,Single;screen,"..Branch.AfterSelectPlayMode() +ChoiceDouble="name,Double;style,double;text,Double;screen,"..Branch.AfterSelectPlayMode() +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() +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() +Choice10Keys="name,10Keys;style,double10;text,10Keys;screen,"..Branch.AfterSelectPlayMode() +Choice14Keys="name,14Keys;style,double14;text,14Keys;screen,"..Branch.AfterSelectPlayMode() ChoiceKB7="name,kb7;style,single;screen,"..Branch.AfterSelectPlayMode() # PerChoiceScrollElement=false @@ -1880,7 +1850,7 @@ PrevScreen=Branch.TitleMenu() # TimerSeconds=40 # -DefaultChoice="Easy" +DefaultChoice="Normal" ChoiceNames="Normal,Rave,Extended,Oni,Endless" # PerChoiceScrollElement=false @@ -1890,13 +1860,13 @@ ShowScroller=true WrapScroller=true ShowIcon=false # -ChoiceEasy="applydefaultoptions;name,Easy;playmode,regular;difficulty,easy;screen,ScreenSelectMusic;setenv,sMode,Normal" -ChoiceNormal="applydefaultoptions;name,Normal;playmode,regular;difficulty,easy;screen,ScreenSelectMusic;setenv,sMode,Normal" -ChoiceHard="applydefaultoptions;name,Hard;playmode,regular;difficulty,hard;screen,ScreenSelectMusic;setenv,sMode,Normal" -ChoiceRave="applydefaultoptions;name,Rave;playmode,rave;screen,ScreenSelectMusic;setenv,sMode,Rave" -ChoiceExtended="applydefaultoptions;name,Extended;playmode,nonstop;screen,ScreenSelectCourse;setenv,sMode,Extended" -ChoiceOni="applydefaultoptions;name,Oni;playmode,oni;screen,ScreenSelectCourse;setenv,sMode,Oni" -ChoiceEndless="applydefaultoptions;name,Endless;playmode,endless;screen,ScreenSelectCourse;setenv,sMode,Endless" +ChoiceEasy="applydefaultoptions;name,Easy;text,Easy;playmode,regular;difficulty,easy;screen,ScreenSelectMusic;setenv,sMode,Normal" +ChoiceNormal="applydefaultoptions;name,Normal;text,Normal;playmode,regular;difficulty,easy;screen,ScreenSelectMusic;setenv,sMode,Normal" +ChoiceHard="applydefaultoptions;name,Hard;text,Hard;playmode,regular;difficulty,hard;screen,ScreenSelectMusic;setenv,sMode,Normal" +ChoiceRave="applydefaultoptions;name,Rave;text,Rave;playmode,rave;screen,ScreenSelectMusic;setenv,sMode,Rave" +ChoiceExtended="applydefaultoptions;name,Extended;text,Extended;playmode,nonstop;screen,ScreenSelectCourse;setenv,sMode,Extended" +ChoiceOni="applydefaultoptions;name,Oni;text,Oni;playmode,oni;screen,ScreenSelectCourse;setenv,sMode,Oni" +ChoiceEndless="applydefaultoptions;name,Endless;text,Endless;playmode,endless;screen,ScreenSelectCourse;setenv,sMode,Endless" [ScreenSelectCharacter] Class="ScreenSelectMaster" @@ -1911,6 +1881,7 @@ PerChoiceIconElement=false ShowScroller=true WrapScroller=true ShowIcon=false + [ScreenGameInformation] Class="ScreenSelectMaster" Fallback="ScreenSelectMaster" @@ -2035,6 +2006,7 @@ ScreenModsCommand=setupcoursestagemods # MusicWheelType="CourseWheel" Codes="CourseCodeDetector" + [CourseCodeDetector] Fallback="CodeDetector" NextSort1= @@ -2042,7 +2014,6 @@ NextSort2= NextSort3= NextSort4= - [StepsDisplay] FrameX=0 FrameY=0 @@ -2076,7 +2047,7 @@ ShowAutogen=true AutogenX=40 AutogenY=0 AutogenOnCommand= -AutogenSetCommand=%function(self,param) if param.CustomDifficulty then self:diffuse(CustomDifficultyToLightColor(param.CustomDifficulty)); self:strokecolor(CustomDifficultyToDarkColor(param.CustomDifficulty)); end end +AutogenSetCommand= ShowStepsType=false StepsTypeX=0 StepsTypeY=0 @@ -2137,9 +2108,12 @@ PageOnCommand= ContainerOnCommand= ContainerOffCommand= CursorOnCommand= -LineHighlightOnCommand= -LineHighlightChangeCommand= -LineHighlightChangeToExitCommand= +LineHighlightP1OnCommand= +LineHighlightP1ChangeCommand= +LineHighlightP1ChangeToExitCommand= +LineHighlightP2OnCommand= +LineHighlightP2ChangeCommand= +LineHighlightP2ChangeToExitCommand= ShowScrollBar=false ScrollBarHeight=0 ScrollBarTime=0 @@ -2527,9 +2501,13 @@ Fallback="ScreenOptionsSimple" OptionRowNormalMetricsGroup="OptionRowService" -LineHighlightOnCommand=visible,false -LineHighlightChangeCommand= -LineHighlightChangeToExitCommand= +LineHighlightP1OnCommand=visible,false +LineHighlightP1ChangeCommand= +LineHighlightP1ChangeToExitCommand= + +LineHighlightP2OnCommand=visible,false +LineHighlightP2ChangeCommand= +LineHighlightP2ChangeToExitCommand= CursorOnCommand=visible,false @@ -2540,7 +2518,7 @@ Fallback="ScreenOptionsSimpleService" NextScreen=Branch.Init() PrevScreen=Branch.Init() -LineNames="SystemDirection,KeyConfig,GameType,6,8,Reload,MoreOptions" +LineNames="SystemDirection,KeyConfig,GameType,6,8,Reload,Credits,MoreOptions" # LineNames="SystemDirection,1,2,Sync,13,3,10,11,4,12,6,5,Theme,8,9" Line1="gamecommand;screen,ScreenMapControllers;name,Key Joy Mappings" Line2="gamecommand;screen,ScreenTestInput;name,Test Input" @@ -2561,6 +2539,7 @@ LineKeyConfig="gamecommand;screen,ScreenMapControllers;name,Key Joy Mappings" LineGameType="gamecommand;screen,ScreenSelectGame;name,Select Game" LineSync="gamecommand;screen,ScreenGameplaySyncMachine;name,Calibrate Machine Sync" LineReload="gamecommand;screen,ScreenReloadSongs;name,Reload Songs" +LineCredits="gamecommand;screen,ScreenCredits;name,StepMania Credits" LineMoreOptions="gamecommand;screen,ScreenOptionsExtended;name,More Options" [ScreenOptionsExtended] @@ -2585,9 +2564,13 @@ PrevScreen="ScreenOptionsService" NextScreen="ScreenOptionsService" HelpText=Screen.String("HelpTextOptionsAndBack") -LineHighlightOnCommand=visible,false -LineHighlightChangeCommand= -LineHighlightChangeToExitCommand= +LineHighlightP1OnCommand=visible,false +LineHighlightP1ChangeCommand= +LineHighlightP1ChangeToExitCommand= + +LineHighlightP2OnCommand=visible,false +LineHighlightP2ChangeCommand= +LineHighlightP2ChangeToExitCommand= # ExplanationTogetherX=SCREEN_CENTER_X ExplanationTogetherY=SCREEN_CENTER_Y+174 @@ -2596,6 +2579,7 @@ ExplanationTogetherOffCommand= [ScreenOptionsServiceExtendedChild] Fallback="ScreenOptionsServiceChild" + [ScreenMiniMenu] Class="ScreenMiniMenu" Fallback="ScreenOptions" @@ -2915,12 +2899,14 @@ Line16="list,Steps" Line17="list,Characters" # + [ScreenPlayerOptionsRestricted] Fallback="ScreenPlayerOptions" NextScreen="ScreenStageInformation" LineNames="1,8,16,17" # funny + [ScreenSongOptions] Fallback="ScreenOptions" Class="ScreenSongOptions" @@ -2955,6 +2941,7 @@ AllowStartToSkip=false PrepareScreen= # 05 # A + [ScreenExit] # Midiman: # Fun fact, if you don't enable this screen, Force Crashing will hang @@ -3248,6 +3235,7 @@ DebugX=SCREEN_CENTER_X DebugY=SCREEN_BOTTOM-72 DebugOnCommand=zoom,0.75 # +SongNumberFormat="%d" SongNumberP1X=THEME:GetMetric(Var "LoadingScreen","PlayerP1OnePlayerOneSideX") - 60 SongNumberP1Y=SCREEN_TOP+24+7 SongNumberP1OnCommand=visible,false @@ -3299,6 +3287,7 @@ PlayerOptionsHideFailType=false MaxComboNumDigits=4 # ShowBannerArea=true +RollingNumbersClass="RollingNumbersJudgment" ShowSharedJudgmentLineLabels=false ShowJudgmentLineW1=false ShowJudgmentLineW2=false @@ -3367,6 +3356,7 @@ DisqualifiedP2OffCommand= # DetailLineFormat="%3d/%3d" # + [ScreenEvaluationNormal] Fallback="ScreenEvaluation" # @@ -3419,11 +3409,13 @@ NextScreen=Branch.AfterProfileSave() PrevScreen=Branch.TitleMenu() # TimerSeconds=-1 + [ScreenProfileSaveSummary] Fallback="ScreenProfileSave" # NextScreen="ScreenGameOver" PrevScreen="ScreenGameOver" + [ScreenGameOver] Class="ScreenEnding" Fallback="ScreenAttract" @@ -3486,6 +3478,7 @@ Answer3Of3OffCommand= # # stuff for edit mode: # + [ScreenOptionsEdit] Class="ScreenOptionsMaster" Fallback="ScreenOptionsSimpleService" @@ -3614,6 +3607,7 @@ TimerSeconds=-1 HelpText=Screen.String("HelpTextOptionsAndBack") # could use a redo but whatever + [ScreenEdit] Class="ScreenEdit" Fallback="ScreenWithMenuElementsBlank" @@ -3628,6 +3622,7 @@ ShowHelp=false AllowOperatorMenuButton=false ShowCreditDisplay=false ShowStyleIcon=false +InvertScrollSpeedButtons=false TimerSeconds=-1 EditModifiers="no reverse" EditHelpX=SCREEN_LEFT+4 @@ -3694,13 +3689,14 @@ CancelTransitionsOut=true PlayMusic=false TimerSeconds=-1 ShowStyleIcon=false -LineNames="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16" +LineNames="1,2,3,4,5,6,R,7,8,9,10,11,12,13,14,15,16" Line1="list,Speed" Line2="list,Accel" Line3="list,Effect" Line4="list,Appearance" Line5="list,Turn" Line6="list,Insert" +LineR="list,Remove" Line7="list,Scroll" Line8="list,NoteSkins" Line9="list,Holds" @@ -3717,6 +3713,7 @@ OutCancelCommand= Fallback="StepsDisplay" # oh, right, minimenus. + [ScreenMiniMenuEditHelp] Fallback="ScreenMiniMenu" ShowFooter=false @@ -3778,6 +3775,7 @@ Fallback="ScreenMiniMenu" Fallback="ScreenMiniMenu" # Export Packages + [ScreenOptionsExportPackage] Class="ScreenOptionsExportPackage" Fallback="ScreenOptionsSimpleService" @@ -3795,6 +3793,7 @@ Fallback="OptionRowService" TitleX=SCREEN_CENTER_X-150 # Manage Courses + [OptionRowCourseOverview] Fallback="OptionRowService" ItemsLongRowSharedX=SCREEN_CENTER_X-100 @@ -3843,6 +3842,7 @@ EditScreen="ScreenOptionsEditCourse" OptionRowNormalMetricsGroup="OptionRowCourseOverview" # visual/interactive syncing + [ScreenGameplaySyncMachine] Class="ScreenGameplaySyncMachine" Fallback="ScreenGameplay" @@ -3851,7 +3851,7 @@ NextScreen="ScreenOptionsExtended" PlayerType="PlayerSyncMachine" AllowCenter1Player=false -SyncInfoOnCommand=x,SCREEN_CENTER_X+160;y,SCREEN_CENTER_Y;zoom,0;decelerate,0.5;zoom,0.6 +SyncInfoOnCommand=x,PositionPerPlayer(GAMESTATE:GetMasterPlayerNumber(),SCREEN_CENTER_X+160,SCREEN_CENTER_X-160);y,SCREEN_CENTER_Y;zoom,0;decelerate,0.5;zoom,0.6 # hidden by default: LifeP1OnCommand=visible,false @@ -3872,6 +3872,7 @@ Fallback="Player" ComboOnCommand=visible,false # sm-ssc helper screens + [ScreenHowToInstallSongs] Class="ScreenSplash" Fallback="ScreenSplash" @@ -3882,6 +3883,7 @@ TimerSeconds=-1 ShowHelp=false # stuff for online mode: + [ScreenSMOnlineLogin] Class="ScreenSMOnlineLogin" Fallback="ScreenOptionsServiceChild" @@ -4126,6 +4128,7 @@ UserOnCommand= UserOffCommand= # Arcade + [ScreenLogo] Fallback="ScreenAttract" # @@ -4189,6 +4192,7 @@ ChoiceNames="1" IdleCommentSeconds=-1 IdleTimeoutSeconds=-1 IdleTimeoutScreen=Branch.AfterInit() + [ScreenDemonstration] Fallback="ScreenGameplay" Class="ScreenDemonstration" @@ -4232,3 +4236,15 @@ StartScreen="ScreenTitleMenu" LightsMode="LightsMode_Demonstration" ShowCourseModifiersProbability=0 AllowAdvancedModifiers=true + +[ScreenCredits] +Class="ScreenSplash" +Fallback="ScreenSplash" +AllowStartToSkip=true +NextScreen=Branch.TitleMenu() +PrevScreen=Branch.TitleMenu() +TimerSeconds=40 +TimerStealth=true +ForceTimer=true +TimerMetricsGroup="MenuTimerNoSound" +TimerOnCommand=visible,false \ No newline at end of file diff --git a/Themes/_themekit-piu/BGAnimations/Screen in.lua b/Themes/_themekit-piu/BGAnimations/Screen in.lua new file mode 100644 index 0000000000..4ad6ca4625 --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/Screen in.lua @@ -0,0 +1 @@ +return Def.Actor { OnCommand=cmd(sleep,0.3); } \ No newline at end of file diff --git a/Themes/_themekit-piu/BGAnimations/Screen out.lua b/Themes/_themekit-piu/BGAnimations/Screen out.lua new file mode 100644 index 0000000000..4ad6ca4625 --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/Screen out.lua @@ -0,0 +1 @@ +return Def.Actor { OnCommand=cmd(sleep,0.3); } \ No newline at end of file diff --git a/Themes/_themekit-piu/BGAnimations/ScreenCustomOptionsList overlay/default.lua b/Themes/_themekit-piu/BGAnimations/ScreenCustomOptionsList overlay/default.lua new file mode 100644 index 0000000000..93d6f6bfb3 --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/ScreenCustomOptionsList overlay/default.lua @@ -0,0 +1,384 @@ +local PlayerIndexes = { PlayerNumber_P1 = 1, PlayerNumber_P2 = 1 } +-- Reads mods from a file +-- keywords: Speed, Noteskins, None, Clear +local function ReadMods() + local file = THEME:GetCurrentThemeDirectory() .. "mods.txt" + local mods = File.Read( file ) + if not mods + or mods == "" + then + local buff = ";Set mods here, one per line or various in one separated with commas\r\n;Keywords: 'Speed', 'Noteskins', 'None', 'Clear'\r\nSpeeds\r\nNoteskins" + File.Write(file,buff) + return { + ReadSpeedMods(); + NOTESKIN:GetNoteSkinNames(); + "Clear"; + } + end + + mods = string.gsub(mods,"\r","") + mods = split("\n",mods) + + local ret = {} + local clear = false + + for k,v in ipairs(mods) do + if string.sub(v,1,1) == ";" + or v == "" + then + --skip + elseif v == "Speeds" then + table.insert(ret, ReadSpeedMods()) + elseif v == "Noteskins" then + table.insert(ret, NOTESKIN:GetNoteSkinNames()) + else + local ModToAdd = string.gsub(v,"%s","") + if string.find(ModToAdd, ",") ~= nil then + ModToAdd = split(",", ModToAdd) + if ModToAdd[1] ~= "None" then + table.insert(ModToAdd,1,"None") + end + table.insert(ret,ModToAdd) + else + if ModToAdd == "Clear" then + if not clear then table.insert(ret,ModToAdd) end + clear = true + end + end + end + end + -- This will happen... + if not clear then table.insert(ret,"Clear") end + + return ret +end + +local modslist = ReadMods() + +-- Displays the mods with actorscrollers +local function OptionsListDisplay(player) + local function GetPlayerMods() + local playerstate = GAMESTATE:GetPlayerState(player) + local playermods = playerstate:GetPlayerOptionsArray('ModsLevel_Preferred') + return playermods + end + + local make = {} + -- iterate modslist entries + for k,v in ipairs(modslist) do + -- not kinopio + local RowToAdd + if type(v) == "table" then + -- it's a table, make it a scroller + local choices = {} + -- build the choices + for i,j in ipairs(v) do + choices[i] = LoadFont()..{ Text=j }; + end + RowToAdd = Def.ActorScroller { + NumItemsToDraw=3; + SecondsPerItem=0.075; + -- init indexes here + -- I like how InitCommand is not allowed to be played or queued + -- (HURR TOO MUCH COMMANDS ARG!) + SetChoicesCommand=function(self) + local found = false + --SCREENMAN:SystemMessage(join(",", defmods)) + for idx,Mod in ipairs(GetPlayerMods()) do + -- In before I forgot what's this: those are the nod entries + for jdx,Nod in ipairs(v) do + if Mod == Nod then + found = true + self:SetCurrentAndDestinationItem(jdx-1); + break + end + end + end + -- oops, no defaults, set them + if not found then + for idx,Mod in ipairs(v) do + if Mod == "1x" + or Mod == "default" + or Mod == "None" + then + self:SetCurrentAndDestinationItem(idx-1); + break + else + self:SetCurrentAndDestinationItem(0); + end + end + end + end; + CleanModsMessageCommand=function(self,params) + if player ~= params.PlayerNumber then return end + self:playcommand("SetChoices"); + end; + InitCommand=function(self) + self:SetLoop(true); + self:playcommand("SetChoices"); + end; + TransformFunction=function(self, offset, itemIndex, numItems) + self:x(offset * 100); + local focus = math.abs(offset) + focus = scale(focus,0,1,1,0.75) + + self:zoom(focus) + end; + ChoiceSwapMessageCommand=function(self,params) + if params.PlayerNumber ~= player then return end + if params.Row ~= k then return end + + local index = params.Index + --SCREENMAN:SystemMessage(ToEnumShortString(player).." row mods index: "..index); + if params.bHasLooped then + self:SetCurrentAndDestinationItem(-1) + end + + self:SetDestinationItem(index-1) + end; + -- actors are wrapped here: + children = choices; + }; + elseif type(v) == "string" then + -- it's not, make single switchable choice + RowToAdd = Def.ActorFrame { + LoadFont()..{ + Text=v; + -- init highlights here + SetChoicesCommand=function(self) + local cc = color("#000000") + for idx,Mod in ipairs(GetPlayerMods()) do + if Mod == v then + cc = color("#ffffff") + break + end + end + if v == "Clear" then + cc = color("#0000ff") + end + self:diffuse(cc); + end; + InitCommand=function(self) + self:playcommand("SetChoices"); + end; + -- Following commands you'll understand (I've heard that somewhere...) + CleanModsMessageCommand=function(self,params) + --if v == "Clear" then return end + if player ~= params.PlayerNumber then return end + self:playcommand("SetChoices"); + --self:diffuse(color("#000000")); + end; + -- cmd(diffuse,color("#000000")); + ChoiceToggleMessageCommand=function(self,params) + if params.PlayerNumber ~= player then return end + if params.Row ~= k then return end + + local cc = color("#ffffff") + if not params.Activated then + cc = color("#000000") + end + + --self:visible(params.Activated) + -- why the fuck is not coloring itself? oh I think I got it... duh! + self:diffuse(cc) + end; + } + } + else + --table.remove(modslist,k) + --Def.Actor { }; + end + make[k] = RowToAdd + end + + return Def.ActorFrame { + Draw.RoundBox(300,320,50,50,color("1,0,1,0.5")); + Draw.RoundBox(300,50,25,25,color("1,0,0,0.5")); + Def.ActorScroller { + Name="OptionsListScroller"; + NumItemsToDraw=5; + SecondsPerItem=0.075; + InitCommand=function(self) + self:SetLoop(true); + end; + TransformFunction=function(self, offset, itemIndex, numItems) + self:y(offset * 50); + end; + children = make; + }; + } +end + +-- Internals +return Def.ActorFrame { + OptionsListDisplay(PLAYER_1)..{ + Name="OptionsListDisplay"..PLAYER_1; + Condition=GAMESTATE:IsHumanPlayer(PLAYER_1); + InitCommand=function(self) + if #GAMESTATE:GetHumanPlayers() == 1 + and PREFSMAN:GetPreference("Center1Player") + then + self:CenterX() + else + self:FromLeft(160) + end + self:CenterY(); + end; + }; + OptionsListDisplay(PLAYER_2)..{ + Name="OptionsListDisplay"..PLAYER_2; + Condition=GAMESTATE:IsHumanPlayer(PLAYER_2); + InitCommand=function(self) + if #GAMESTATE:GetHumanPlayers() == 1 + and PREFSMAN:GetPreference("Center1Player") + then + self:CenterX() + else + self:FromRight(-160) + end + self:CenterY(); + end; + }; + -- Everything here and beyond is pure magic + CodeMessageCommand=function(self,params) + -- I'm reusing code from CustomCodeDetector + local code = params.Name + local player = params.PlayerNumber + local movement = "none" + local modscleared = false + + if not GAMESTATE:IsHumanPlayer(player) then return end; + + if code == "Back" then + --SCREENMAN:SystemMessage(ToEnumShortString(player).." closed the oplist") + SCREENMAN:GetTopScreen():Cancel(); + elseif code == "Prev" then + PlayerIndexes[player] = PlayerIndexes[player]-1 + if PlayerIndexes[player] < 1 then + PlayerIndexes[player] = #modslist + movement = "first" + end + --SCREENMAN:SystemMessage(ToEnumShortString(player).." index: "..PlayerIndexes[player]); + elseif code == "Next" then + PlayerIndexes[player] = PlayerIndexes[player]+1 + if PlayerIndexes[player] > #modslist then + PlayerIndexes[player] = 1 + movement = "last" + end + --SCREENMAN:SystemMessage(ToEnumShortString(player).." index: "..PlayerIndexes[player]); + elseif code == "Toggle" then + -- changes will be done here + -- get playerstate and playermods + local playerstate = GAMESTATE:GetPlayerState(player) + local playermods = playerstate:GetPlayerOptionsArray('ModsLevel_Preferred') + + -- let's check in what index we are + local ModToAdd = modslist[PlayerIndexes[player]] + --the mod is a table, scroll those + if type(ModToAdd) == "table" then + -- iteration, once again, like in the custom code detector I made :x + local index = 1 + local found = false + local looped = false + for i,j in ipairs(playermods) do + for k,l in ipairs(ModToAdd) do + if j == l then + found = true + index = k+1 + if index > #ModToAdd then + index = 1 + looped = true + end + --replace + playermods[i] = ModToAdd[index] + break + end + end + end + -- looks like nothing was found, we can assume those are the default mods + -- (1x and default noteskin) they are not listed for some reason... + if not found then + -- set the first on the list (nono, better list 1x and default) + for k,v in ipairs(ModToAdd) do + if v == "1x" + or v == "default" + then + index = k+1 + if index > #ModToAdd then + index = 1 + looped = true + end + table.insert(playermods, ModToAdd[index]) + break + elseif v == "None" then + table.insert(playermods, ModToAdd[2]) + index = 2 + end + end + end + -- send message broadcasts to be able to move things on the oplist displays + MESSAGEMAN:Broadcast("ChoiceSwap",{ Row = PlayerIndexes[player]; Index = index; PlayerNumber = player; bHasLooped = looped }) + elseif ModToAdd == "Clear" then + local defaultmods = PREFSMAN:GetPreference("DefaultModifiers") + playermods = split(",", defaultmods) + modscleared = true + --MESSAGEMAN:Broadcast("CleanMods",{ PlayerNumber = player }); + else + -- if type(ModToAdd) == "string" then end + -- we know it's a string... + local found = false + for i,j in ipairs(playermods) do + if j == ModToAdd then + -- remove it + found = true + table.remove(playermods, i) + break + end + end + + if not found then + table.insert(playermods, ModToAdd) + end + MESSAGEMAN:Broadcast("ChoiceToggle",{ Row = PlayerIndexes[player]; Activated = not found; PlayerNumber = player }) + end + -- let's check if noteskins aren't missing (we're avoiding crashes here...) + local found = false + -- iterate again uh + for i,j in ipairs(playermods) do + -- yes because noteskins are stored in the second slot... + for k,l in ipairs(modslist[2]) do + if j == l then + found = true + break + end + end + end + -- apparently there aren't any noteskins... + if not found then + table.insert(playermods, "default") + end + + -- everything is ready to be set + playermods = join(", ",playermods) + playerstate:SetPlayerOptions('ModsLevel_Preferred',playermods) + -- and thats pretty much it :D + end + + if modscleared then + MESSAGEMAN:Broadcast("CleanMods",{ PlayerNumber = player }); + end + + --this moves the scroller... + local scroller = self:GetChild("OptionsListDisplay"..player):GetChild("OptionsListScroller") + if movement ~= "none" then + local tomove + if movement == "first" then + tomove = PlayerIndexes[player] + elseif movement == "last" then + tomove = PlayerIndexes[player]-2 + end + scroller:SetCurrentAndDestinationItem(tomove); + end + scroller:SetDestinationItem(PlayerIndexes[player]-1); + end; +}; \ No newline at end of file diff --git a/Themes/_themekit-piu/BGAnimations/ScreenEvaluationNormal overlay/default.lua b/Themes/_themekit-piu/BGAnimations/ScreenEvaluationNormal overlay/default.lua new file mode 100644 index 0000000000..af25c713f6 --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/ScreenEvaluationNormal overlay/default.lua @@ -0,0 +1,118 @@ +local function Labels() + local captions = { + "Perfect", + "Great", + "Good", + "Bad", + "Miss", + "Combo", + "Score", + }; + + local t = Def.ActorFrame {} + + for idx,k in ipairs(captions) do + local _ = idx-1 + t[#t+1] = LoadFont("_arial black 20px")..{ + Text=k; + InitCommand=cmd(y,_*40;diffuse,color("#000000");Stroke,color("#ffffff")); + }; + end + + return t +end + +local function Scores(player) + if not player or not GAMESTATE:IsPlayerEnabled(player) then return Def.Actor {} end + + local curstats = STATSMAN:GetCurStageStats():GetPlayerStageStats(player) + + local timmings = { + { + curstats:GetTapNoteScores('TapNoteScore_CheckpointHit'), + curstats:GetTapNoteScores('TapNoteScore_W1'), + curstats:GetTapNoteScores('TapNoteScore_W2'), + }, + { + curstats:GetTapNoteScores('TapNoteScore_W3') + }, + { + curstats:GetTapNoteScores('TapNoteScore_W4') + }, + { + curstats:GetTapNoteScores('TapNoteScore_W5') + }, + { + curstats:GetTapNoteScores('TapNoteScore_CheckpointMiss'), + curstats:GetTapNoteScores('TapNoteScore_Miss'), + }, + { + curstats:MaxCombo() + }, + { + curstats:GetScore() + } + } + + local t = Def.ActorFrame {} + + for idx,k in ipairs(timmings) do + local _ = idx-1 + local curstats = STATSMAN:GetCurStageStats():GetPlayerStageStats(player) + local number = 0 + + for i,v in ipairs(k) do + number = number + v-- curstats:GetTapNoteScores(v); + end + + t[#t+1] = LoadFont("_arial black 20px")..{ + Text=string.format("%03d", number); --curstats:GetTapNoteScores(k) + InitCommand=cmd(y,_*40;diffuse,color("#000000");Stroke,color("#ffffff")); + }; + end + + return t +end + +local function Grade(player) + if not player or not GAMESTATE:IsPlayerEnabled(player) then return Def.Actor {} end + + local captions = { + Grade_Tier01 = "S"; + Grade_Tier02 = "S"; + Grade_Tier03 = "A"; + Grade_Tier04 = "B"; + Grade_Tier05 = "C"; + Grade_Tier06 = "D"; + Grade_Tier07 = "F"; + Grade_Failed = "S"; + } + local grade = STATSMAN:GetCurStageStats():GetPlayerStageStats(player):GetGrade() + + return LoadFont("_impact 50px")..{ + Text=captions[grade]; + --OnCommand=cmd(zoom,2;diffuse,color("#000000");Stroke,color("#ffffff");diffusealpha,0;sleep,1;linear,1;zoom,1;diffuse,color("#000000");Stroke,color("#ffffff");;diffusealpha,1); + } +end + +return Def.ActorFrame { + LoadFont("_impact 50px")..{ + Text="Evaluation"; + InitCommand=cmd(CenterX;y,50;diffuse,color("#000000");Stroke,color("#ffffff")); + }; + Labels()..{ + InitCommand=cmd(CenterX;FromTop,130); + }; + Scores(PLAYER_1)..{ + InitCommand=cmd(FromCenterX,-160;FromTop,130); + }; + Scores(PLAYER_2)..{ + InitCommand=cmd(FromCenterX,160;FromTop,130); + }; + Grade(PLAYER_1)..{ + InitCommand=cmd(FromLeft,50;FromTop,240); + }; + Grade(PLAYER_2)..{ + InitCommand=cmd(FromRight,-50;FromTop,240); + }; +} \ No newline at end of file diff --git a/Themes/_themekit-piu/BGAnimations/ScreenGameOver underlay/default.lua b/Themes/_themekit-piu/BGAnimations/ScreenGameOver underlay/default.lua new file mode 100644 index 0000000000..f13882ac24 --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/ScreenGameOver underlay/default.lua @@ -0,0 +1,6 @@ +return Def.ActorFrame { + LoadFont("_impact 50px")..{ + Text="THE GAME IS OVER"; + InitCommand=cmd(Center;diffuse,color("#000000");Stroke,color("#ffffff")); + }; +} \ No newline at end of file diff --git a/Themes/_themekit-piu/BGAnimations/ScreenGameplay out.lua b/Themes/_themekit-piu/BGAnimations/ScreenGameplay out.lua new file mode 100644 index 0000000000..405cbf7623 --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/ScreenGameplay out.lua @@ -0,0 +1 @@ +return Def.Actor { OnCommand=cmd(sleep,1); } \ No newline at end of file diff --git a/Themes/_themekit-piu/BGAnimations/ScreenGameplay overlay/default.lua b/Themes/_themekit-piu/BGAnimations/ScreenGameplay overlay/default.lua new file mode 100644 index 0000000000..f0189f6f51 --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/ScreenGameplay overlay/default.lua @@ -0,0 +1,30 @@ +--a simple life display... +local function LifeDisplay(pn) + local function update(self) + --local this = self:GetChildren() + local lifemeter = SCREENMAN:GetTopScreen():GetLifeMeter(pn) + --ºvº + local life = lifemeter:GetLife() + life = clamp(life,0,1) + + self:GetChild("LifeText"):settextf("Life: %.2f%%", life*100) + end + + return Def.ActorFrame { + InitCommand=cmd(player,pn;SetUpdateFunction,update); + + LoadFont("_arial black 20px")..{ + --Text="100%"; + Name="LifeText"; + }; + }; +end + +return Def.ActorFrame { + LoadFont("_impact 50px")..{ + InitCommand=cmd(CenterX;FromTop,30); + Text=string.format("%02i", STATSMAN:GetStagesPlayed()+1); + }; + LifeDisplay(PLAYER_1)..{ InitCommand=cmd(FromCenterX,-160;FromTop,20); }; + LifeDisplay(PLAYER_2)..{ InitCommand=cmd(FromCenterX,160;FromTop,20); }; +} \ No newline at end of file diff --git a/Themes/_themekit-piu/BGAnimations/ScreenGameplay underlay.lua b/Themes/_themekit-piu/BGAnimations/ScreenGameplay underlay.lua new file mode 100644 index 0000000000..b1bb3cd79b --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/ScreenGameplay underlay.lua @@ -0,0 +1,115 @@ +-- CH32 asked me if this was possible, and as you can see, it is!! +local function GetSpeedChanges() + local smfile = GAMESTATE:GetCurrentSong():GetSongFilePath() + local file = File.Read( smfile ) + if not file then return end + -- search the tag + local find = string.find(file , "#SPEED:") + if not find then return end + -- search the next semicolon + local last = string.find(file , ";" , find) + local found = string.sub(file,find,last) + -- cleans + found = string.gsub(found, "\r", "") + found = string.gsub(found, "\n", "") + found = string.gsub(found, "#SPEED:", "") + found = string.gsub(found, ";", "") + -- make it a table + found = split(",", found) + -- return it + return found +end + +local speeds = GetSpeedChanges() + +-- what are those things made of? +local function update(self) + if speeds ~= nil then + for idx,Spd in ipairs(speeds) do + local part = split("=", Spd) + local ebeat = tonumber(part[1]) --WHERE + assert(ebeat) + local songbeat = GAMESTATE:GetSongBeat() + + if songbeat >= ebeat + -- 1/20 beat + and songbeat <= ebeat + (1/20) + --and not GAMESTATE:GetSongFreeze() + --and not GAMESTATE:GetSongDelay() + then + local bps = 60 / GAMESTATE:GetCurrentSong():GetTimingData():GetBPMAtBeat( ebeat ) + --local bps = GAMESTATE:GetSongBPS() + local value = tonumber(part[2]) --SPEED + local approach = part[3] --APPLY TIME + -- Odd, it needs to be a string to be evaluated o_o; + if not approach then approach = tostring(4*bps) end + + if string.sub(approach,approach:len()) == "s" then + approach = string.sub(approach,1,approach:len()-1) + approach = tonumber(approach) + approach = 1/approach + else + approach = 1/(approach*bps) + end + + local pastspeed = 1 + if idx > 1 then + pastspeed = split("=", speeds[idx-1]) + pastspeed = tonumber(pastspeed[2]) + end + + approach = approach * math.abs(value-pastspeed) + + approach = approach + 0.05 + + --if value ~= 0 then + --approach = value/approach + --approach = scale(value,0,approach,0,1) + --end + + MESSAGEMAN:Broadcast("SpeedModLaunched",{ Value = value ; Approach = approach }); + --SCREENMAN:SystemMessage("APP: " .. approach .. " SPD: " .. value); + return + end + end + end +end + +return Def.ActorFrame { + InitCommand=cmd(SetUpdateFunction,update); + SpeedModLaunchedMessageCommand=function(self,params) + local approach = params.Approach + local value = params.Value + + local playerstate = GAMESTATE:GetPlayerState(PLAYER_1) + local playermods = playerstate:GetPlayerOptionsArray('ModsLevel_Preferred') + + local found = false + for idx,Mod in ipairs(playermods) do + if string.find(Mod,"%dx") ~= nil + --or string.find(Mod,"%d.%dx") ~= nil + then + found = true + local xmod = playermods[idx] + xmod = string.gsub(xmod,"x","") + xmod = tonumber(xmod) + xmod = xmod * value + --duh, floats + xmod = string.format("*%.2f %.2fx",approach,xmod) + playermods[idx] = xmod + --SCREENMAN:SystemMessage(xmod) + end + end + if not found then + local xmod = string.format("*%.2f %.2fx",approach,value) + table.insert( playermods, xmod) + end + + playermods = join(",",playermods) + playerstate:SetPlayerOptions('ModsLevel_Song', playermods) + --self:GetChild("_debug"):settext(playermods) + --SCREENMAN:SystemMessage(playerstate:GetPlayerOptions('ModsLevel_Preferred')); + --SCREENMAN:SystemMessage(value) + end; + --LoadFont()..{ Name="_debug"; InitCommand=cmd(x,50;CenterY;rotationz,90); }; +} \ No newline at end of file diff --git a/Themes/_themekit-piu/BGAnimations/ScreenNextStage underlay/default.lua b/Themes/_themekit-piu/BGAnimations/ScreenNextStage underlay/default.lua new file mode 100644 index 0000000000..4a335d868d --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/ScreenNextStage underlay/default.lua @@ -0,0 +1,6 @@ +return Def.ActorFrame { + LoadFont("_impact 50px")..{ + Text="Try next stage"; + InitCommand=cmd(Center;diffuse,color("#000000");Stroke,color("#ffffff")); + }; +} \ No newline at end of file diff --git a/Themes/_themekit-piu/BGAnimations/ScreenProfileLoad overlay.lua b/Themes/_themekit-piu/BGAnimations/ScreenProfileLoad overlay.lua new file mode 100644 index 0000000000..0ad1c12434 --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/ScreenProfileLoad overlay.lua @@ -0,0 +1,21 @@ +return Def.ActorFrame { + BeginCommand=function(self) + self:visible(false); + if SCREENMAN:GetTopScreen():HaveProfileToLoad() then + self:visible(true); + self:sleep(1); + end; + self:queuecommand("Load"); + end; + LoadCommand=function(self) + SCREENMAN:GetTopScreen():Continue(); + end; + -- + Draw.Box(SCREEN_WIDTH,50)..{ + InitCommand=cmd(Center); + }; + LoadFont("_arial black 20px")..{ + Text="Loading Profiles..."; + InitCommand=cmd(Center;skewx,-0.1;diffuse,color("#000000");Stroke,color("#ffffff")); + }; +} \ No newline at end of file diff --git a/Themes/_themekit-piu/BGAnimations/ScreenProfileSave overlay.lua b/Themes/_themekit-piu/BGAnimations/ScreenProfileSave overlay.lua new file mode 100644 index 0000000000..0798fe9d22 --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/ScreenProfileSave overlay.lua @@ -0,0 +1,21 @@ +return Def.ActorFrame { + BeginCommand=function(self) + self:visible(false); + if SCREENMAN:GetTopScreen():HaveProfileToSave() then + self:visible(true); + self:sleep(1); + end; + self:queuecommand("Save"); + end; + SaveCommand=function(self) + SCREENMAN:GetTopScreen():Continue(); + end; + -- + Draw.Box(SCREEN_WIDTH,50)..{ + InitCommand=cmd(Center); + }; + LoadFont("_arial black 20px")..{ + Text="Saving Profiles..."; + InitCommand=cmd(Center;skewx,-0.1;diffuse,color("#000000");Stroke,color("#ffffff")); + }; +} \ No newline at end of file diff --git a/Themes/_themekit-piu/BGAnimations/ScreenSelectMusic overlay/default.lua b/Themes/_themekit-piu/BGAnimations/ScreenSelectMusic overlay/default.lua new file mode 100644 index 0000000000..f37397ab33 --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/ScreenSelectMusic overlay/default.lua @@ -0,0 +1,224 @@ +--Whew... this one took some time... +local function ModIcons(p) + local oldmods + + --todo: add more + local noteskinbuttons = { + pump = "UpLeft"; + dance ="Down"; + }; + local function ModiconRow(caption) + return Def.ActorFrame { + Draw.RoundBox(35,35,6,6,color("#32ff00")); + Draw.RoundBox(25,25,3,3,color("#32c800")); + LoadFont("_arial black")..{ + Name="caption"; + Text=caption or ""; + }; + LoadActor("i can flash")..{ + Name="sfx"; + InitCommand=cmd(blend,Blend.Add;zoom,0.125); + SFXCommand=cmd(stoptweening;diffusealpha,1;zoom,0.5;linear,0.2;zoom,1;diffusealpha,0); + }; + } + end + --ActorScrollers <3 + return Def.ActorScroller { + --TransformFunctions are both love and hate... + TransformFunction=function(self, offset, itemIndex, numItems) + self:y(offset * 40); + end; + InitCommand=function(self) + local items = self:GetNumChildren() + self:SetCurrentAndDestinationItem(items/2); + if SSC then + self:SetNumItemsToDraw(items); + end + self:SetLoop(true); + self:playcommand("Set"); + end; + PlayerOptionsChangedMessageCommand=cmd(playcommand,"Set"); + PlayerJoinedMessageCommand=cmd(playcommand,"Set"); + --Here's where the magic happens + SetCommand=function(self) + local playermods = GAMESTATE:GetPlayerState(p):GetPlayerOptionsArray('ModsLevel_Preferred') + --clean (invisible everything) + for k,v in pairs(self:GetChildren()) do + self:GetChild(k):visible(false); + end + --stop early + if not GAMESTATE:IsHumanPlayer(p) then return end; + --this thing is based on iteration... ugh + for k,v in ipairs(playermods) do + --check if it's speed + if string.find(v,"%dx") ~= nil then + local c = self:GetChild("%dx") + c:visible(true); + c:GetChild("caption"):settext(v); + c:GetChild("sfx"):playcommand("SFX"); + else + --check if it's noteskin + local noteskins = NOTESKIN:GetNoteSkinNames() + for i,n in ipairs(noteskins) do + if n == v then + local c = self:GetChild("Noteskin") + local button = noteskinbuttons[sGame] or "fallback" + local toload = NOTESKIN:GetPathForNoteSkin(button, "Tap Note", v) + --make it visible + c:visible(true); + --adjust sizes here + c:GetChild("skingraphic"):Load(toload); + c:GetChild("skingraphic"):zoom(0.45); + --effects + c:GetChild("skinframe"):GetChild("sfx"):playcommand("SFX"); + else + --it's anything else then + local c = self:GetChild(v) + if c then + c:visible(true); + c:GetChild("sfx"):playcommand("SFX"); + end + end + end + end + --yeah whatever... + self:GetChild("revg"):visible(getenv("GradeReverse"..p)); + self:GetChild("revg"):GetChild("sfx"):playcommand("SFX"); + end + + oldmods = playermods + end; + --speed + ModiconRow("1x")..{ Name="%dx" }; + --reserved for noteskins + Def.ActorFrame { + Name="Noteskin"; + ModiconRow("")..{ Name="skinframe"; }; + Def.Sprite { Name="skingraphic"; }; + }; + --the rest + ModiconRow("RS")..{ Name="SuperShuffle" }; + ModiconRow("MR")..{ Name="Left" }; + ModiconRow("VN")..{ Name="Hidden" }; + ModiconRow("FD")..{ Name="Dark" }; + ModiconRow("XM")..{ Name="XMode" }; + ModiconRow("RG")..{ Name="revg" }; + } +end + +local function DifficultyMeter(p) + return LoadFont("_impact 50px")..{ + Text=""; + SetCommand=function(self) + if not GAMESTATE:IsHumanPlayer(p) then return end; + + local steps = GAMESTATE:GetCurrentSteps(p) + local diff = steps:GetDifficulty() + local stype = steps:GetStepsType() + local desc = steps:GetDescription() + local meter = steps:GetMeter() + --local autogen = steps:IsAutogen() and "AUTO " or "" + + --compatible + local text = DifficultyAndStepstypeToString(diff,stype,desc) + text = string.upper(text); + + self:settextf("%s [%d]",text,meter); + end; + CurrentSongChangedMessageCommand=function(self) + local song = GAMESTATE:GetCurrentSong() + if not song then self:visible(false); return end + self:visible(true); + end; + }; +end + +local function SongInformationDisplay() + local index = 1 + return LoadFont("_arial black 20px")..{ + --Text="asd"; + SetCommand=function(self) + local song = GAMESTATE:GetCurrentSong() + if not song then self:diffusealpha(0); return end + + local title = song:GetDisplayFullTitle(); + local artist = song:GetDisplayArtist(); + local bpm = song:GetDisplayBpms() --GetTimmingData():GetActualBPM() + local group = song:GetGroupName(); + local length = song:MusicLengthSeconds(); + if length == 150 then + length = "Lengthless" + else + local longmara + if song:IsLong() then + longmara = " Long song" + elseif song:IsMarathon() then + longmara = " Marathon song" + else + longmara = "" + end + length = string.format("%02d:%02d%s",length/60,length%60,longmara) + end + + if bpm[1] == bpm[2] then + bpm = string.format("BPM %d", bpm[1]) + else + bpm = string.format("BPM %d - %d",bpm[1],bpm[2]) + end + + local metadata = {title,artist,bpm,group,length} + + local toset = metadata[index] + + index = index+1 + if index > #metadata then index = 1 end + + --self:finishtweening(); + self:settext(toset); + self:linear(0.2); + self:diffusealpha(1); + self:sleep(1); + self:linear(0.2) + self:diffusealpha(0); + self:queuecommand("Set"); + end; + CurrentSongChangedMessageCommand=function(self) + --reset index + index = 1 + --start looping + self:stoptweening(); + self:linear(0.2) + self:diffusealpha(0); + self:queuecommand("Set") + end; + OffCommand=cmd(finishtweening); + }; +end + +return Def.ActorFrame { + DifficultyMeter(PLAYER_1)..{ + InitCommand=cmd(FromCenterX,-120;FromTop,100;zoom,0.75;diffuse,color("#646464");Stroke,color("#ffffff")); + CurrentStepsP1ChangedMessageCommand=cmd(playcommand,"Set"); + }; + DifficultyMeter(PLAYER_2)..{ + InitCommand=cmd(FromCenterX,120;FromTop,100;zoom,0.75;diffuse,color("#646464");Stroke,color("#ffffff")); + CurrentStepsP2ChangedMessageCommand=cmd(playcommand,"Set"); + }; + Draw.RoundBox(SCREEN_WIDTH*0.75+10,50,color("#ffffff"))..{ + InitCommand=cmd(CenterX;FromBottom,-75); + }; + Draw.RoundBox(SCREEN_WIDTH*0.75,40,5,5,color("#0000c8"))..{ + InitCommand=cmd(CenterX;FromBottom,-75); + }; + SongInformationDisplay()..{ + InitCommand=cmd(CenterX;FromBottom,-75;diffuse,color("#009600");Stroke,color("#000000")); + }; + ModIcons(PLAYER_1)..{ + InitCommand=cmd(FromLeft,30;FromTop,240); + Condition=not GetUserPrefB("OptionsMode"); + }; + ModIcons(PLAYER_2)..{ + InitCommand=cmd(FromRight,-30;FromTop,240); + Condition=not GetUserPrefB("OptionsMode"); + }; +} \ No newline at end of file diff --git a/Themes/_themekit-piu/BGAnimations/ScreenSelectMusic overlay/i can flash.png b/Themes/_themekit-piu/BGAnimations/ScreenSelectMusic overlay/i can flash.png new file mode 100644 index 0000000000..9d3f04542c Binary files /dev/null and b/Themes/_themekit-piu/BGAnimations/ScreenSelectMusic overlay/i can flash.png differ diff --git a/Themes/_themekit-piu/BGAnimations/ScreenSelectMusic underlay.lua b/Themes/_themekit-piu/BGAnimations/ScreenSelectMusic underlay.lua new file mode 100644 index 0000000000..c0678bb310 --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/ScreenSelectMusic underlay.lua @@ -0,0 +1,66 @@ +return Def.ActorFrame { + InitCommand=function(self) + setenv("GradeReverse" .. PLAYER_1, false) + setenv("GradeReverse" .. PLAYER_2, false) + --setenv("UnderAttack", false) + --setenv("Drop", false) + end; + CodeMessageCommand=function(self,params) + local code = params.Name + local player = params.PlayerNumber + if not GAMESTATE:IsHumanPlayer(player) then return end; + + if not GetUserPrefB("OptionsMode") then + --Yeah + if not CustomCodeDetector(code,player,true) then + --handling envutils here + if code == "GradeReverse" + --or code == "any envutil wich requires to be per player" + then + if not getenv( code..player ) then + setenv( code..player, true) + else + setenv( code..player, false) + end + else --general envutils (not per player) + if not getenv( code ) then + setenv( code, true) + else + setenv( code, false) + end + end + end + + if code == "Cancel" then + setenv("GradeReverse"..player,false) + end + + MESSAGEMAN:Broadcast("PlayerOptionsChanged", { PlayerNumber = player }) + --SOUND:PlayOnce(THEME:GetPathS("ScreenSelectMusic","Options")) + else + if code == "Summon" then + --this lua binding is awesome + --SCREENMAN:SystemMessage(ToEnumShortString(player).." opened the oplist") + self:sleep(0.5); + self:queuecommand("OpenCustomOpList"); + end + end + end; + OpenCustomOpListCommand=function(self) SCREENMAN:AddNewScreenToTop("ScreenCustomOptionsList") end; + PlayerOptionsChangedMessageCommand=function(self,params) + local player = params.PlayerNumber + local playermods = GAMESTATE:GetPlayerState(player):GetPlayerOptions('ModsLevel_Preferred') + --SCREENMAN:SystemMessage(ToEnumShortString(player).." mods: "..playermods); + end; + LoadSound("START")..{ + OffCommand=cmd(play); + }; + LoadSound("ScreenSelectMusic","Options")..{ + PlayerOptionsChangedMessageCommand=cmd(stop;play); + }; + LoadSound("3-2")..{ + --TwoPartConfirmCanceledMessageCommand=cmd(play); + SongChosenMessageCommand=cmd(stop;play); + OffCommand=cmd(play); + }; +} diff --git a/Themes/_themekit-piu/BGAnimations/ScreenStageBreak underlay/default.lua b/Themes/_themekit-piu/BGAnimations/ScreenStageBreak underlay/default.lua new file mode 100644 index 0000000000..9b5240467b --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/ScreenStageBreak underlay/default.lua @@ -0,0 +1,6 @@ +return Def.ActorFrame { + LoadFont("_impact 50px")..{ + Text="Epic fail..."; + InitCommand=cmd(Center;diffuse,color("#000000");Stroke,color("#ffffff")); + }; +} \ No newline at end of file diff --git a/Themes/_themekit-piu/BGAnimations/ScreenStageInformation underlay.lua b/Themes/_themekit-piu/BGAnimations/ScreenStageInformation underlay.lua new file mode 100644 index 0000000000..cff6516117 --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/ScreenStageInformation underlay.lua @@ -0,0 +1,24 @@ +local song = GAMESTATE:GetCurrentSong() +--assert(song,"WHY THIS HAPPENS LOL") +if not song then + song = SONGMAN:GetRandomSong() + GAMESTATE:SetCurrentSong( song ) + + for k,v in ipairs(PlayerNumber) do + local stepsplayer = GAMESTATE:GetCurrentSteps(v) + steps = song:GetOneSteps( stepsplayer:GetStepsType() , stepsplayer:GetDifficulty() ) + GAMESTATE:SetCurrentSteps( steps ) + end +end + +local path = song:GetBackgroundPath() + +SplitMode(); + +if not path then + path = THEME:GetPathG("Common", "fallback background") +end + +return LoadActor(path)..{ + InitCommand=cmd(scaletocover,0,0,SCREEN_WIDTH,SCREEN_HEIGHT); +}; \ No newline at end of file diff --git a/Themes/_themekit-piu/BGAnimations/ScreenSystemLayer overlay.lua b/Themes/_themekit-piu/BGAnimations/ScreenSystemLayer overlay.lua new file mode 100644 index 0000000000..16f54e6cd0 --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/ScreenSystemLayer overlay.lua @@ -0,0 +1,79 @@ +local function PlayerName(player) + local puns = { + --TODO: add moar... + ["asd"] = "qwe"; + ["qwe"] = "asd"; + }; + + return LoadFont("_arial black 20px")..{ + --Text="PlaceHolder"; + InitCommand=cmd(zoomx,1); + SetCommand=function(self) + self:settext(""); + if PROFILEMAN:IsPersistentProfile(player) then + local profile = PROFILEMAN:GetProfile(player) + local name = profile:GetDisplayName() + + if name == "" then + name = string.gsub(player,"Number_P"," ") + end + --max 20 chars ºvº + name = string.sub(name,1,20) + --name = puns[name] or name + + self:settext(name) + end + end; + PlayerJoinedMessageCommand=cmd(playcommand,"Set"); + CoinInsertedMessageCommand=cmd(playcommand,"Set"); + CoinModeChangedMessageCommand=cmd(playcommand,"Set"); + ScreenChangedMessageCommand=cmd(playcommand,"Set"); + StorageDevicesChangedMessageCommand=cmd(playcommand,"Set"); + }; +end + +return Def.ActorFrame { + LoadFont("_fixedsys")..{ + InitCommand=cmd(blend,'BlendMode_Add'xy,10,5;shadowlength,0;Stroke,{0,0,0,1};wrapwidthpixels,SCREEN_WIDTH*0.45;maxwidth,SCREEN_WIDTH*0.45;horizalign,left;SetTextureFiltering,false;vertalign,top;zoom,1.5); + SystemMessageMessageCommand=function(self,params) + self:settext(params.Message); + self:finishtweening(); + self:diffusealpha(1); + self:sleep(3); + self:diffusealpha(0); + end; + HideSystemMessageMessageCommand=cmd(finishtweening); + }; + + LoadFont("_arial black 20px")..{ + InitCommand=cmd(xy,SCREEN_CENTER_X,SCREEN_HEIGHT-20;zoom,1;shadowlength,0;playcommand,"Text"); + TextCommand=function(self) + if GAMESTATE:GetCoinMode() == 'CoinMode_Pay' then + local Coins = GAMESTATE:GetCoins() + local CoinForCredit = GAMESTATE:GetCoinsNeededToJoin() + local Credits = math.floor(Coins/CoinForCredit) + local Remain = Coins % CoinForCredit + self:settext(string.format("CREDIT(S) %i[%i/%i]", Credits, Remain, CoinForCredit)) + elseif GAMESTATE:GetCoinMode() == 'CoinMode_Free' then + self:settext("Free Play") + else --homemode + self:settext("Home Mode"); + end + end; + PlayerJoinedMessageCommand=cmd(playcommand,"Text"); + CoinInsertedMessageCommand=cmd(playcommand,"Text"); + CoinModeChangedMessageCommand=cmd(playcommand,"Text"); + ScreenChangedMessageCommand=cmd(playcommand,"Text"); + }; + + ScreenChangedMessageCommand=function(self) + self:visible(THEME:GetMetric(SCREENMAN:GetTopScreen():GetName(),"ShowCreditDisplay")); + end; + + PlayerName(PLAYER_1)..{ + InitCommand=cmd(xy,20,SCREEN_HEIGHT-20;horizalign,left); + }; + PlayerName(PLAYER_2)..{ + InitCommand=cmd(xy,SCREEN_WIDTH-20,SCREEN_HEIGHT-20;horizalign,right); + }; +} diff --git a/Themes/_themekit-piu/BGAnimations/ScreenTitleMenu underlay/default.lua b/Themes/_themekit-piu/BGAnimations/ScreenTitleMenu underlay/default.lua new file mode 100644 index 0000000000..20508d98b1 --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/ScreenTitleMenu underlay/default.lua @@ -0,0 +1,6 @@ +return Def.ActorFrame { + LoadFont("_arial black 20px")..{ + Text="Background logo or video must go here..."; + InitCommand=cmd(CenterX;y,200;Stroke,color("#000000")); + }; +} \ No newline at end of file diff --git a/Themes/_themekit-piu/BGAnimations/ScreenWithMenuElements background.lua b/Themes/_themekit-piu/BGAnimations/ScreenWithMenuElements background.lua new file mode 100644 index 0000000000..2617497a9a --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/ScreenWithMenuElements background.lua @@ -0,0 +1,22 @@ +local particles = { + Def.Quad { InitCommand=cmd(FullScreen;diffuse,color("#003200");diffusetopedge,color("#000000")); } +} + +for i=1,30 do + particles[#particles+1] = Draw.Oval(math.random(20,80))..{ + InitCommand=function(self) + self:finishtweening(); + self:decelerate(0.25); + + self:x(math.random(20,SCREEN_WIDTH-20)); + self:y(math.random(20,SCREEN_HEIGHT-20)); + + self:diffuse(math.random(0.2,1),math.random(0.2,1),math.random(0.2,1),math.random(0.75,0.95)) + end; + ScreenChangedMessageCommand=cmd(playcommand,"Init"); + } +end + +return Def.ActorFrame { + children = particles; +} \ No newline at end of file diff --git a/Themes/_themekit-piu/BGAnimations/_frame 3x1.lua b/Themes/_themekit-piu/BGAnimations/_frame 3x1.lua new file mode 100644 index 0000000000..b18753105a --- /dev/null +++ b/Themes/_themekit-piu/BGAnimations/_frame 3x1.lua @@ -0,0 +1,13 @@ +--stolen from default theme +local File, Width = ... +assert( File ); +assert( Width ); + +local FullFile = THEME:GetPathB('','_frame files 3x1/'..File ) +local Frame = LoadActor( FullFile ) + +return Def.ActorFrame { + Frame .. { InitCommand=cmd(setstate,0;pause;horizalign,right;x,-Width/2) }; + Frame .. { InitCommand=cmd(setstate,1;pause;zoomtowidth,Width) }; + Frame .. { InitCommand=cmd(setstate,2;pause;horizalign,left;x,Width/2) }; +}; diff --git a/Themes/_themekit-piu/Fonts/Common Normal.redir b/Themes/_themekit-piu/Fonts/Common Normal.redir new file mode 100644 index 0000000000..3307c63107 --- /dev/null +++ b/Themes/_themekit-piu/Fonts/Common Normal.redir @@ -0,0 +1 @@ +_arial black 20px \ No newline at end of file diff --git a/Themes/_themekit-piu/Fonts/_arial black 20px [alt-stroke] 10x10 (doubleres).png b/Themes/_themekit-piu/Fonts/_arial black 20px [alt-stroke] 10x10 (doubleres).png new file mode 100644 index 0000000000..659334f4be Binary files /dev/null and b/Themes/_themekit-piu/Fonts/_arial black 20px [alt-stroke] 10x10 (doubleres).png differ diff --git a/Themes/_themekit-piu/Fonts/_arial black 20px [alt] 10x10 (doubleres).png b/Themes/_themekit-piu/Fonts/_arial black 20px [alt] 10x10 (doubleres).png new file mode 100644 index 0000000000..c310d618ff Binary files /dev/null and b/Themes/_themekit-piu/Fonts/_arial black 20px [alt] 10x10 (doubleres).png differ diff --git a/Themes/_themekit-piu/Fonts/_arial black 20px [main-stroke] 15x15 (doubleres).png b/Themes/_themekit-piu/Fonts/_arial black 20px [main-stroke] 15x15 (doubleres).png new file mode 100644 index 0000000000..3787568000 Binary files /dev/null and b/Themes/_themekit-piu/Fonts/_arial black 20px [main-stroke] 15x15 (doubleres).png differ diff --git a/Themes/_themekit-piu/Fonts/_arial black 20px [main] 15x15 (doubleres).png b/Themes/_themekit-piu/Fonts/_arial black 20px [main] 15x15 (doubleres).png new file mode 100644 index 0000000000..3411305717 Binary files /dev/null and b/Themes/_themekit-piu/Fonts/_arial black 20px [main] 15x15 (doubleres).png differ diff --git a/Themes/_themekit-piu/Fonts/_arial black 20px.ini b/Themes/_themekit-piu/Fonts/_arial black 20px.ini new file mode 100644 index 0000000000..a2e96a6d3a --- /dev/null +++ b/Themes/_themekit-piu/Fonts/_arial black 20px.ini @@ -0,0 +1,352 @@ +[common] +Baseline=25 +Top=11 +LineSpacing=28 +DrawExtraPixelsLeft=1 +DrawExtraPixelsRight=0 +AdvanceExtraPixels=0 + +[main] +Line 0= !"#$%&'()*+,-. +Line 1=/0123456789:;<= +Line 2=>?@ABCDEFGHIJKL +Line 3=MNOPQRSTUVWXYZ[ +Line 4=\]^_`abcdefghij +Line 5=klmnopqrstuvwxy +Line 6=z{|}~€‚ƒ„…†‡ˆ‰Š +Line 7=‹ŒŽ‘’“â€â€¢â€“—˜™š›œ +Line 8=žŸ ¡¢£¤¥¦§¨©ª«¬ +Line 9=­®¯°±²³´µ¶·¸¹º» +Line 10=¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊ +Line 11=ËÌÃÃŽÃÃÑÒÓÔÕÖרÙ +Line 12=ÚÛÜÃÞßàáâãäåæçè +Line 13=éêëìíîïðñòóôõö÷ +Line 14=øùúûüýþÿ + +0=7 +1=7 +2=10 +3=13 +4=13 +5=20 +6=18 +7=6 +8=8 +9=8 +10=11 +11=13 +12=7 +13=7 +14=7 +15=6 +16=13 +17=13 +18=13 +19=13 +20=13 +21=13 +22=13 +23=13 +24=13 +25=13 +26=7 +27=7 +28=13 +29=13 +30=13 +31=12 +32=15 +33=16 +34=16 +35=16 +36=16 +37=14 +38=13 +39=17 +40=17 +41=8 +42=13 +43=17 +44=13 +45=19 +46=17 +47=17 +48=14 +49=17 +50=16 +51=14 +52=14 +53=17 +54=16 +55=20 +56=16 +57=16 +58=14 +59=8 +60=6 +61=8 +62=13 +63=10 +64=7 +65=13 +66=13 +67=13 +68=13 +69=13 +70=8 +71=13 +72=13 +73=7 +74=7 +75=13 +76=7 +77=20 +78=13 +79=13 +80=13 +81=13 +82=9 +83=12 +84=9 +85=13 +86=12 +87=19 +88=13 +89=12 +90=11 +91=8 +92=6 +93=8 +94=13 +95=13 +96=6 +97=13 +98=10 +99=20 +100=13 +101=13 +102=7 +103=20 +104=14 +105=7 +106=20 +107=14 +108=6 +109=6 +110=10 +111=10 +112=10 +113=10 +114=20 +115=7 +116=19 +117=12 +118=7 +119=20 +120=11 +121=16 +122=7 +123=7 +124=13 +125=13 +126=13 +127=13 +128=6 +129=13 +130=7 +131=16 +132=8 +133=13 +134=13 +135=7 +136=16 +137=10 +138=8 +139=13 +140=8 +141=8 +142=7 +143=13 +144=17 +145=7 +146=7 +147=8 +148=8 +149=13 +150=20 +151=20 +152=20 +153=12 +154=16 +155=16 +156=16 +157=16 +158=16 +159=16 +160=20 +161=16 +162=14 +163=14 +164=14 +165=14 +166=8 +167=8 +168=8 +169=8 +170=16 +171=17 +172=17 +173=17 +174=17 +175=17 +176=17 +177=13 +178=17 +179=17 +180=17 +181=17 +182=17 +183=16 +184=14 +185=13 +186=13 +187=13 +188=13 +189=13 +190=13 +191=13 +192=20 +193=13 +194=13 +195=13 +196=13 +197=13 +198=7 +199=7 +200=7 +201=7 +202=13 +203=13 +204=13 +205=13 +206=13 +207=13 +208=13 +209=13 +210=13 +211=13 +212=13 +213=13 +214=13 +215=12 +216=13 +217=12 + +[alt] +Line 0= Ą˘Å¤ĽŚ§¨Š +Line 1=ŞŤŹ­ŽŻ°ą˛ł +Line 2=Â´Ä¾Å›Ë‡Â¸Å¡ÅŸÅ¥ÅºË +Line 3=žżŔÃÂĂÄĹĆÇ +Line 4=ČÉĘËĚÃÃŽÄŽÄŃ +Line 5=ŇÓÔÅÖ×ŘŮÚŰ +Line 6=ÜÃŢßŕáâăäĺ +Line 7=ćçÄÃ©Ä™Ã«Ä›Ã­Ã®Ä +Line 8=đńňóôőö÷řů +Line 9=úűüýţ˙ + +0=7 +1=16 +2=7 +3=13 +4=13 +5=13 +6=14 +7=13 +8=7 +9=14 +10=14 +11=14 +12=14 +13=7 +14=14 +15=14 +16=8 +17=13 +18=7 +19=7 +20=7 +21=10 +22=12 +23=7 +24=7 +25=12 +26=12 +27=13 +28=11 +29=7 +30=11 +31=11 +32=16 +33=16 +34=16 +35=16 +36=16 +37=13 +38=16 +39=16 +40=16 +41=14 +42=14 +43=14 +44=14 +45=8 +46=8 +47=16 +48=16 +49=17 +50=17 +51=17 +52=17 +53=17 +54=17 +55=13 +56=16 +57=17 +58=17 +59=17 +60=17 +61=16 +62=14 +63=13 +64=9 +65=13 +66=13 +67=13 +68=13 +69=7 +70=13 +71=13 +72=13 +73=13 +74=13 +75=13 +76=13 +77=7 +78=7 +79=17 +80=13 +81=13 +82=13 +83=13 +84=13 +85=13 +86=13 +87=13 +88=9 +89=13 +90=13 +91=13 +92=13 +93=12 +94=9 +95=7 diff --git a/Themes/_themekit-piu/Fonts/_fixedsys 8px [alt] 10x10 (mipmaps).png b/Themes/_themekit-piu/Fonts/_fixedsys 8px [alt] 10x10 (mipmaps).png new file mode 100644 index 0000000000..56add39233 Binary files /dev/null and b/Themes/_themekit-piu/Fonts/_fixedsys 8px [alt] 10x10 (mipmaps).png differ diff --git a/Themes/_themekit-piu/Fonts/_fixedsys 8px [main] 15x15 (mipmaps).png b/Themes/_themekit-piu/Fonts/_fixedsys 8px [main] 15x15 (mipmaps).png new file mode 100644 index 0000000000..329e3ab85d Binary files /dev/null and b/Themes/_themekit-piu/Fonts/_fixedsys 8px [main] 15x15 (mipmaps).png differ diff --git a/Themes/_themekit-piu/Fonts/_fixedsys 8px.ini b/Themes/_themekit-piu/Fonts/_fixedsys 8px.ini new file mode 100644 index 0000000000..724c7f3888 --- /dev/null +++ b/Themes/_themekit-piu/Fonts/_fixedsys 8px.ini @@ -0,0 +1,352 @@ +[common] +Baseline=13 +Top=4 +LineSpacing=15 +DrawExtraPixelsLeft=0 +DrawExtraPixelsRight=0 +AdvanceExtraPixels=0 + +[main] +Line 0= !"#$%&'()*+,-. +Line 1=/0123456789:;<= +Line 2=>?@ABCDEFGHIJKL +Line 3=MNOPQRSTUVWXYZ[ +Line 4=\]^_`abcdefghij +Line 5=klmnopqrstuvwxy +Line 6=z{|}~€‚ƒ„…†‡ˆ‰Š +Line 7=‹ŒŽ‘’“â€â€¢â€“—˜™š›œ +Line 8=žŸ ¡¢£¤¥¦§¨©ª«¬ +Line 9=­®¯°±²³´µ¶·¸¹º» +Line 10=¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊ +Line 11=ËÌÃÃŽÃÃÑÒÓÔÕÖרÙ +Line 12=ÚÛÜÃÞßàáâãäåæçè +Line 13=éêëìíîïðñòóôõö÷ +Line 14=øùúûüýþÿ + +0=8 +1=8 +2=8 +3=8 +4=8 +5=8 +6=8 +7=8 +8=8 +9=8 +10=8 +11=8 +12=8 +13=8 +14=8 +15=8 +16=8 +17=8 +18=8 +19=8 +20=8 +21=8 +22=8 +23=8 +24=8 +25=8 +26=8 +27=8 +28=8 +29=8 +30=8 +31=8 +32=8 +33=8 +34=8 +35=8 +36=8 +37=8 +38=8 +39=8 +40=8 +41=8 +42=8 +43=8 +44=8 +45=8 +46=8 +47=8 +48=8 +49=8 +50=8 +51=8 +52=8 +53=8 +54=8 +55=8 +56=8 +57=8 +58=8 +59=8 +60=8 +61=8 +62=8 +63=8 +64=8 +65=8 +66=8 +67=8 +68=8 +69=8 +70=8 +71=8 +72=8 +73=8 +74=8 +75=8 +76=8 +77=8 +78=8 +79=8 +80=8 +81=8 +82=8 +83=8 +84=8 +85=8 +86=8 +87=8 +88=8 +89=8 +90=8 +91=8 +92=8 +93=8 +94=8 +95=8 +96=8 +97=8 +98=8 +99=8 +100=8 +101=8 +102=8 +103=8 +104=8 +105=8 +106=8 +107=8 +108=8 +109=8 +110=8 +111=8 +112=8 +113=8 +114=8 +115=8 +116=8 +117=8 +118=8 +119=8 +120=8 +121=8 +122=8 +123=8 +124=8 +125=8 +126=8 +127=8 +128=8 +129=8 +130=8 +131=8 +132=8 +133=8 +134=8 +135=8 +136=8 +137=8 +138=8 +139=8 +140=8 +141=8 +142=8 +143=8 +144=8 +145=8 +146=8 +147=8 +148=8 +149=8 +150=8 +151=8 +152=8 +153=8 +154=8 +155=8 +156=8 +157=8 +158=8 +159=8 +160=8 +161=8 +162=8 +163=8 +164=8 +165=8 +166=8 +167=8 +168=8 +169=8 +170=8 +171=8 +172=8 +173=8 +174=8 +175=8 +176=8 +177=8 +178=8 +179=8 +180=8 +181=8 +182=8 +183=8 +184=8 +185=8 +186=8 +187=8 +188=8 +189=8 +190=8 +191=8 +192=8 +193=8 +194=8 +195=8 +196=8 +197=8 +198=8 +199=8 +200=8 +201=8 +202=8 +203=8 +204=8 +205=8 +206=8 +207=8 +208=8 +209=8 +210=8 +211=8 +212=8 +213=8 +214=8 +215=8 +216=8 +217=8 + +[alt] +Line 0= Ą˘Å¤ĽŚ§¨Š +Line 1=ŞŤŹ­ŽŻ°ą˛ł +Line 2=Â´Ä¾Å›Ë‡Â¸Å¡ÅŸÅ¥ÅºË +Line 3=žżŔÃÂĂÄĹĆÇ +Line 4=ČÉĘËĚÃÃŽÄŽÄŃ +Line 5=ŇÓÔÅÖ×ŘŮÚŰ +Line 6=ÜÃŢßŕáâăäĺ +Line 7=ćçÄÃ©Ä™Ã«Ä›Ã­Ã®Ä +Line 8=đńňóôőö÷řů +Line 9=úűüýţ˙ + +0=8 +1=8 +2=8 +3=8 +4=8 +5=8 +6=8 +7=8 +8=8 +9=8 +10=8 +11=8 +12=8 +13=8 +14=8 +15=8 +16=8 +17=8 +18=8 +19=8 +20=8 +21=8 +22=8 +23=8 +24=8 +25=8 +26=8 +27=8 +28=8 +29=8 +30=8 +31=8 +32=8 +33=8 +34=8 +35=8 +36=8 +37=8 +38=8 +39=8 +40=8 +41=8 +42=8 +43=8 +44=8 +45=8 +46=8 +47=8 +48=8 +49=8 +50=8 +51=8 +52=8 +53=8 +54=8 +55=8 +56=8 +57=8 +58=8 +59=8 +60=8 +61=8 +62=8 +63=8 +64=8 +65=8 +66=8 +67=8 +68=8 +69=8 +70=8 +71=8 +72=8 +73=8 +74=8 +75=8 +76=8 +77=8 +78=8 +79=8 +80=8 +81=8 +82=8 +83=8 +84=8 +85=8 +86=8 +87=8 +88=8 +89=8 +90=8 +91=8 +92=8 +93=8 +94=8 +95=8 diff --git a/Themes/_themekit-piu/Fonts/_impact 50px [alt-stroke] 10x10 (doubleres).png b/Themes/_themekit-piu/Fonts/_impact 50px [alt-stroke] 10x10 (doubleres).png new file mode 100644 index 0000000000..45d9f2990f Binary files /dev/null and b/Themes/_themekit-piu/Fonts/_impact 50px [alt-stroke] 10x10 (doubleres).png differ diff --git a/Themes/_themekit-piu/Fonts/_impact 50px [alt] 10x10 (doubleres).png b/Themes/_themekit-piu/Fonts/_impact 50px [alt] 10x10 (doubleres).png new file mode 100644 index 0000000000..1f3da6cd9c Binary files /dev/null and b/Themes/_themekit-piu/Fonts/_impact 50px [alt] 10x10 (doubleres).png differ diff --git a/Themes/_themekit-piu/Fonts/_impact 50px [main-stroke] 15x15 (doubleres).png b/Themes/_themekit-piu/Fonts/_impact 50px [main-stroke] 15x15 (doubleres).png new file mode 100644 index 0000000000..33563d4b04 Binary files /dev/null and b/Themes/_themekit-piu/Fonts/_impact 50px [main-stroke] 15x15 (doubleres).png differ diff --git a/Themes/_themekit-piu/Fonts/_impact 50px [main] 15x15 (doubleres).png b/Themes/_themekit-piu/Fonts/_impact 50px [main] 15x15 (doubleres).png new file mode 100644 index 0000000000..1d33a28642 Binary files /dev/null and b/Themes/_themekit-piu/Fonts/_impact 50px [main] 15x15 (doubleres).png differ diff --git a/Themes/_themekit-piu/Fonts/_impact 50px.ini b/Themes/_themekit-piu/Fonts/_impact 50px.ini new file mode 100644 index 0000000000..06977fae7d --- /dev/null +++ b/Themes/_themekit-piu/Fonts/_impact 50px.ini @@ -0,0 +1,352 @@ +[common] +Baseline=57 +Top=18 +LineSpacing=50 +DrawExtraPixelsLeft=4 +DrawExtraPixelsRight=4 +AdvanceExtraPixels=0 + +[main] +Line 0= !"#$%&'()*+,-. +Line 1=/0123456789:;<= +Line 2=>?@ABCDEFGHIJKL +Line 3=MNOPQRSTUVWXYZ[ +Line 4=\]^_`abcdefghij +Line 5=klmnopqrstuvwxy +Line 6=z{|}~€‚ƒ„…†‡ˆ‰Š +Line 7=‹ŒŽ‘’“â€â€¢â€“—˜™š›œ +Line 8=žŸ ¡¢£¤¥¦§¨©ª«¬ +Line 9=­®¯°±²³´µ¶·¸¹º» +Line 10=¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊ +Line 11=ËÌÃÃŽÃÃÑÒÓÔÕÖרÙ +Line 12=ÚÛÜÃÞßàáâãäåæçè +Line 13=éêëìíîïðñòóôõö÷ +Line 14=øùúûüýþÿ + +0=9 +1=14 +2=18 +3=31 +4=27 +5=35 +6=29 +7=9 +8=16 +9=16 +10=14 +11=27 +12=8 +13=15 +14=9 +15=20 +16=27 +17=19 +18=25 +19=27 +20=25 +21=27 +22=27 +23=20 +24=27 +25=27 +26=10 +27=10 +28=27 +29=27 +30=27 +31=26 +32=39 +33=25 +34=28 +35=28 +36=28 +37=21 +38=20 +39=28 +40=28 +41=14 +42=17 +43=27 +44=19 +45=36 +46=27 +47=27 +48=25 +49=27 +50=27 +51=26 +52=23 +53=27 +54=25 +55=41 +56=23 +57=24 +58=20 +59=14 +60=20 +61=14 +62=24 +63=28 +64=17 +65=25 +66=26 +67=25 +68=26 +69=26 +70=14 +71=26 +72=26 +73=13 +74=13 +75=24 +76=13 +77=39 +78=26 +79=26 +80=26 +81=26 +82=18 +83=24 +84=15 +85=26 +86=22 +87=32 +88=22 +89=22 +90=18 +91=18 +92=14 +93=18 +94=26 +95=27 +96=8 +97=22 +98=17 +99=28 +100=27 +101=27 +102=17 +103=51 +104=26 +105=10 +106=34 +107=20 +108=8 +109=8 +110=17 +111=17 +112=17 +113=25 +114=50 +115=17 +116=39 +117=24 +118=10 +119=38 +120=18 +121=24 +122=9 +123=14 +124=26 +125=27 +126=27 +127=24 +128=14 +129=24 +130=17 +131=39 +132=16 +133=19 +134=27 +135=15 +136=39 +137=28 +138=17 +139=27 +140=16 +141=16 +142=17 +143=24 +144=29 +145=17 +146=17 +147=12 +148=16 +149=19 +150=31 +151=32 +152=35 +153=26 +154=25 +155=25 +156=25 +157=25 +158=25 +159=25 +160=36 +161=28 +162=21 +163=21 +164=21 +165=21 +166=14 +167=14 +168=14 +169=14 +170=28 +171=27 +172=27 +173=27 +174=27 +175=27 +176=27 +177=27 +178=27 +179=27 +180=27 +181=27 +182=27 +183=24 +184=25 +185=28 +186=25 +187=25 +188=25 +189=25 +190=25 +191=25 +192=38 +193=25 +194=26 +195=26 +196=26 +197=26 +198=13 +199=13 +200=13 +201=13 +202=26 +203=26 +204=26 +205=26 +206=26 +207=26 +208=26 +209=27 +210=26 +211=26 +212=26 +213=26 +214=26 +215=22 +216=26 +217=22 + +[alt] +Line 0= Ą˘Å¤ĽŚ§¨Š +Line 1=ŞŤŹ­ŽŻ°ą˛ł +Line 2=Â´Ä¾Å›Ë‡Â¸Å¡ÅŸÅ¥ÅºË +Line 3=žżŔÃÂĂÄĹĆÇ +Line 4=ČÉĘËĚÃÃŽÄŽÄŃ +Line 5=ŇÓÔÅÖ×ŘŮÚŰ +Line 6=ÜÃŢßŕáâăäĺ +Line 7=ćçÄÃ©Ä™Ã«Ä›Ã­Ã®Ä +Line 8=đńňóôőö÷řů +Line 9=úűüýţ˙ + +0=9 +1=25 +2=17 +3=19 +4=27 +5=22 +6=26 +7=24 +8=17 +9=26 +10=26 +11=23 +12=20 +13=15 +14=20 +15=20 +16=17 +17=25 +18=17 +19=13 +20=17 +21=21 +22=24 +23=17 +24=17 +25=24 +26=24 +27=23 +28=18 +29=17 +30=18 +31=18 +32=27 +33=25 +34=25 +35=25 +36=25 +37=19 +38=28 +39=28 +40=28 +41=21 +42=21 +43=21 +44=21 +45=14 +46=14 +47=28 +48=28 +49=27 +50=27 +51=27 +52=27 +53=27 +54=27 +55=27 +56=27 +57=27 +58=27 +59=27 +60=27 +61=24 +62=23 +63=28 +64=18 +65=25 +66=25 +67=25 +68=25 +69=13 +70=25 +71=25 +72=25 +73=26 +74=26 +75=26 +76=26 +77=13 +78=13 +79=33 +80=26 +81=26 +82=26 +83=26 +84=26 +85=26 +86=26 +87=27 +88=18 +89=26 +90=26 +91=26 +92=26 +93=22 +94=15 +95=17 diff --git a/Themes/_themekit-piu/Fonts/combo 5x2.png b/Themes/_themekit-piu/Fonts/combo 5x2.png new file mode 100644 index 0000000000..8374cf1270 Binary files /dev/null and b/Themes/_themekit-piu/Fonts/combo 5x2.png differ diff --git a/Themes/_themekit-piu/Fonts/combo.ini b/Themes/_themekit-piu/Fonts/combo.ini new file mode 100644 index 0000000000..5354c7bb6e --- /dev/null +++ b/Themes/_themekit-piu/Fonts/combo.ini @@ -0,0 +1,3 @@ +[main] +line 0=01234 +line 1=56789 \ No newline at end of file diff --git a/Themes/_themekit-piu/Graphics/Common fallback background.png b/Themes/_themekit-piu/Graphics/Common fallback background.png new file mode 100644 index 0000000000..c854724502 Binary files /dev/null and b/Themes/_themekit-piu/Graphics/Common fallback background.png differ diff --git a/Themes/_themekit-piu/Graphics/Common fallback banner.png b/Themes/_themekit-piu/Graphics/Common fallback banner.png new file mode 100644 index 0000000000..d084e5887e Binary files /dev/null and b/Themes/_themekit-piu/Graphics/Common fallback banner.png differ diff --git a/Themes/_themekit-piu/Graphics/Common window icon.png b/Themes/_themekit-piu/Graphics/Common window icon.png new file mode 100644 index 0000000000..e07404fc23 Binary files /dev/null and b/Themes/_themekit-piu/Graphics/Common window icon.png differ diff --git a/Themes/_themekit-piu/Graphics/MusicWheelItem SectionCollapsed NormalPart.redir b/Themes/_themekit-piu/Graphics/MusicWheelItem SectionCollapsed NormalPart.redir new file mode 100644 index 0000000000..d4bf7f2689 --- /dev/null +++ b/Themes/_themekit-piu/Graphics/MusicWheelItem SectionCollapsed NormalPart.redir @@ -0,0 +1 @@ +MusicWheelItem SectionExpanded NormalPart \ No newline at end of file diff --git a/Themes/_themekit-piu/Graphics/MusicWheelItem SectionExpanded NormalPart/default.lua b/Themes/_themekit-piu/Graphics/MusicWheelItem SectionExpanded NormalPart/default.lua new file mode 100644 index 0000000000..f90b65c56a --- /dev/null +++ b/Themes/_themekit-piu/Graphics/MusicWheelItem SectionExpanded NormalPart/default.lua @@ -0,0 +1,30 @@ +return Def.ActorFrame { + Draw.RoundBox(276,212,20,20,color("#323232")); + Draw.RoundBox(256,192,10,10)..{ + Name="ColorFill"; + --InitCommand=cmd(zoomto,256,192); + SetMessageCommand=function(self,params) + local color = {1,1,1,1} + if PREFSMAN:GetPreference("MusicWheelUsesSections") ~= 'MusicWheelUsesSections_Never' + and GAMESTATE:GetSortOrder() == 'SortOrder_Group' + then + local goupcolor = SONGMAN:GetSongGroupColor(params.SongGroup) + + if goupcolor ~= nil then + color = SONGMAN:GetSongGroupColor(params.SongGroup) + end + end + + self:diffuse(color); + end; + }; + + LoadFont("_impact 50px")..{ + Name="GroupName"; + InitCommand=cmd(shadowlength,0;Stroke,color("#000000");maxwidth,210); + SetMessageCommand=function(self,params) + text = params.SongGroup + self:settext(text); + end; + }; +} diff --git a/Themes/_themekit-piu/Graphics/MusicWheelItem Song NormalPart/default.lua b/Themes/_themekit-piu/Graphics/MusicWheelItem Song NormalPart/default.lua new file mode 100644 index 0000000000..0ac252227b --- /dev/null +++ b/Themes/_themekit-piu/Graphics/MusicWheelItem Song NormalPart/default.lua @@ -0,0 +1,32 @@ +return Def.ActorFrame { + Draw.RoundBox(276,212,20,20,color("#323232")); + Def.Banner { + Name="SongBanner"; + InitCommand=cmd(scaletoclipped,256,192); + SetMessageCommand=function(self,params) + local path = params.Song:GetBannerPath() + if not path then path = THEME:GetPathG("Common","fallback banner") end + + local bHighResTextures = PREFSMAN:GetPreference("HighResolutionTextures") + + --banner loading stuff... + --is on + if bHighResTextures == 'HighResolutionTextures_ForceOn' or GetUserPrefB("goodbanners") then + self:LoadFromSong(params.Song); + --is off + elseif bHighResTextures == 'HighResolutionTextures_ForceOff' then + self:LoadFromCachedBanner(path); + --is auto + elseif bHighResTextures == 'HighResolutionTextures_Auto' then + local iWidth = DISPLAY:GetDisplayHeight() + --display is over ninethousand eh... 480 + if iWidth > 480 then + self:LoadFromSong(params.Song); + --display is 480 or less + else + self:LoadFromCachedBanner(path); + end + end + end; + }; +} diff --git a/Themes/_themekit-piu/Graphics/Player combo.redir b/Themes/_themekit-piu/Graphics/Player combo.redir new file mode 100644 index 0000000000..04b2ead777 --- /dev/null +++ b/Themes/_themekit-piu/Graphics/Player combo.redir @@ -0,0 +1 @@ +_blank \ No newline at end of file diff --git a/Themes/_themekit-piu/Graphics/Player judgment/default.lua b/Themes/_themekit-piu/Graphics/Player judgment/default.lua new file mode 100644 index 0000000000..e6ac0e3a71 --- /dev/null +++ b/Themes/_themekit-piu/Graphics/Player judgment/default.lua @@ -0,0 +1,120 @@ +--Sí, ando usando judge premiere para el themekit ¿Y qué? +local player = Var "Player" +-- blah +--if not getenv then getenv = function() return false end end + +--frame correspondiente de cada judgment +local TNSframe = { + TapNoteScore_CheckpointHit = 0; + TapNoteScore_W1 = 0; + TapNoteScore_W2 = 0; + TapNoteScore_W3 = 1; + TapNoteScore_W4 = 2; + TapNoteScore_W5 = 3; + TapNoteScore_Miss = 4; + TapNoteScore_CheckpointMiss = 4; +} + +--frames para RG +local TNSframeReversed = { + TapNoteScore_CheckpointHit = 4; + TapNoteScore_W1 = 4; + TapNoteScore_W2 = 4; + TapNoteScore_W3 = 3; + TapNoteScore_W4 = 2; + TapNoteScore_W5 = 1; + TapNoteScore_Miss = 0; + TapNoteScore_CheckpointMiss = 0; +} + +return Def.ActorFrame { + --init + InitCommand=function(self) + local this = self:GetChildren() + this.judgm:pause(); + + --this.judgm:y(-35); + --this.combo:y(42); + + this.combo:vertalign(top); + this.label:vertalign(top); + + this.judgm:visible(false); + this.combo:visible(false); + this.label:visible(false); + + --self:runcommandsonleaves(cmd( SetTextureFiltering,false )) + end; + + --judges + LoadActor("judge")..{ + Name="judgm"; + NormalCommand=cmd(shadowlength,0;diffusealpha,1;zoomx,0.913;zoomy,1.175;decelerate,0.175;zoomx,0.62;zoomy,0.78;accelerate,0.06;zoomx,0.63;zoomy,0.82;sleep,0.04;diffusealpha,0.5;zoomx,0.97;zoomy,0.82;sleep,0.04;zoomx,0.63;zoomy,0.82;decelerate,0.175;zoomx,0.82;zoomy,0.82;diffusealpha,0) + }; + --label + LoadActor("label")..{ + Name="label"; + NormalCommand=cmd(shadowlength,0;diffusealpha,1;zoomx,1.58;zoomy,1.6;y,100;decelerate,0.175;zoomx,1.09;zoomy,1.1;y,70;accelerate,0.06;zoomx,1.14;zoomy,1.1;y,71;sleep,0.04;diffusealpha,0.5;zoomx,1.66;zoomy,1.1;sleep,0.04;zoomx,1.14;zoomy,1.1;decelerate,0.175;zoomx,1.34;zoomy,1.1;diffusealpha,0) + }; + --combo + LoadFont("combo")..{ + Name="combo"; + NormalCommand=cmd(shadowlength,0;diffusealpha,1;zoomx,1.58;zoomy,1.6;y,30;decelerate,0.175;zoomx,1.09;zoomy,1.1;y,21;accelerate,0.06;zoomx,1.14;zoomy,1.1;y,22;sleep,0.04;diffusealpha,0.5;zoomx,1.66;zoomy,1.1;sleep,0.04;zoomx,1.14;zoomy,1.1;decelerate,0.175;zoomx,1.34;zoomy,1.1;diffusealpha,0) + }; + + --"PERFECT"! + JudgmentMessageCommand=function(self,param) + local this = self:GetChildren() + local iTns = TNSframe[param.TapNoteScore] + + if getenv("ReverseGrade"..player) then + iTns = TNSframeReversed[param.TapNoteScore] + end + + --no player, no job + if param.Player ~= player then return end + if param.HoldNoteScore then return end + + this.judgm:visible(true); + this.judgm:setstate(iTns); + --this.combo:visible(true); + --this.label:visible(true); + + this.judgm:stoptweening(); + this.judgm:queuecommand("Normal"); + end; + + ComboCommand=function(self,param) + local this = self:GetChildren() + local combo = param.Misses or param.Combo; + + --color misses o RG + local ccolor + if param.Misses then + ccolor = color("1,0,0,1"); + --GradeReverse, combo misses no rojo + --puedes cambiar userprefs por getenv + if getenv("ReverseGrade"..player) then + ccolor = color("1,1,1,1"); + end + else + ccolor = color("1,1,1,1"); + --GradeReverse, combo rojo + if getenv("ReverseGrade"..player) then + ccolor = color("1,0,0,1"); + end + end; + + --visibilidad + this.combo:visible(combo >= 4); + this.combo:stoptweening(); + this.combo:settextf("%03i",combo); + this.combo:diffuse(ccolor); + this.combo:queuecommand("Normal"); + + this.label:visible(combo >= 4); + this.label:stoptweening(); + this.label:diffuse(ccolor); + this.label:queuecommand("Normal"); + end; +} \ No newline at end of file diff --git a/Themes/_themekit-piu/Graphics/Player judgment/judgelabels 1x5.png b/Themes/_themekit-piu/Graphics/Player judgment/judgelabels 1x5.png new file mode 100644 index 0000000000..28d9252548 Binary files /dev/null and b/Themes/_themekit-piu/Graphics/Player judgment/judgelabels 1x5.png differ diff --git a/Themes/_themekit-piu/Graphics/Player judgment/label.png b/Themes/_themekit-piu/Graphics/Player judgment/label.png new file mode 100644 index 0000000000..e4c47cc345 Binary files /dev/null and b/Themes/_themekit-piu/Graphics/Player judgment/label.png differ diff --git a/Themes/_themekit-piu/Graphics/ScreenMapControllers exit.lua b/Themes/_themekit-piu/Graphics/ScreenMapControllers exit.lua new file mode 100644 index 0000000000..caa908feda --- /dev/null +++ b/Themes/_themekit-piu/Graphics/ScreenMapControllers exit.lua @@ -0,0 +1,6 @@ +return LoadFont("Common", "Normal")..{ + Text="EXIT"; + InitCommand=cmd(CenterX); + GainFocusCommand=cmd(diffuse,color("#FF0000")); + LoseFocusCommand=cmd(diffuse,color("#FFFFFF")); +} \ No newline at end of file diff --git a/Themes/_themekit-piu/Graphics/ScreenTitleMenu scroll.lua b/Themes/_themekit-piu/Graphics/ScreenTitleMenu scroll.lua new file mode 100644 index 0000000000..af292e0b9d --- /dev/null +++ b/Themes/_themekit-piu/Graphics/ScreenTitleMenu scroll.lua @@ -0,0 +1,18 @@ +local gc = Var("GameCommand"); + +return Def.ActorFrame { + InitCommand=function(self) + local this = self:GetChildren() + this.ttf:settext(gc:GetText()); + this.ttf:Stroke(color("#000000")); + this.ttf:diffuse(color("#ffffff")); + --this.bkg:zoomto(150,40); + --this.bkg:diffuse(color("#c0c0c0")); + --this.bkg:fadeleft(0.2); + --this.bkg:faderight(0.2); + end; + --GainFocusCommand=cmd(stoptweening;zoom,1.2); + --LoseFocusCommand=cmd(stoptweening;zoom,1.0); + --Def.Quad { Name="bkg" }; + LoadFont("_arial", "black 20px")..{ Name="ttf" }; +}; \ No newline at end of file diff --git a/Themes/_themekit-piu/Graphics/_Figures/circle.png b/Themes/_themekit-piu/Graphics/_Figures/circle.png new file mode 100644 index 0000000000..673c22375a Binary files /dev/null and b/Themes/_themekit-piu/Graphics/_Figures/circle.png differ diff --git a/Themes/_themekit-piu/Graphics/_Figures/corner.png b/Themes/_themekit-piu/Graphics/_Figures/corner.png new file mode 100644 index 0000000000..b23468dbcf Binary files /dev/null and b/Themes/_themekit-piu/Graphics/_Figures/corner.png differ diff --git a/Themes/_themekit-piu/Graphics/_Figures/triangle.png b/Themes/_themekit-piu/Graphics/_Figures/triangle.png new file mode 100644 index 0000000000..88565933dd Binary files /dev/null and b/Themes/_themekit-piu/Graphics/_Figures/triangle.png differ diff --git a/Themes/_themekit-piu/Languages/en.ini b/Themes/_themekit-piu/Languages/en.ini new file mode 100644 index 0000000000..01ba42e1b8 --- /dev/null +++ b/Themes/_themekit-piu/Languages/en.ini @@ -0,0 +1,57 @@ +[Common] +WindowTitle=THEMEKIT PIU + +[Judgment] +W1=TERRIFIC +W2=PERFECT +W3=GREAT +W4=GOOD +W5=BAD +Miss=MISS + +[OptionTitles] +OptionsMode=Options Type + +[OptionExplanations] +OptionsMode=magic + +[OptionNames] +0.5x=0.5x +1.5x=1.5x +1x=1x +2x=2x +3x=3x +4x=4x +5x=5x +6x=6x +7x=7x +8x=8x + +Speed=Speed +Noteskins=Noteskins +FadeNotes=Fade Notes +Scroll=Scroll +Effect=Effect +Receptor=Receptor +ResetOptions=Reset Options + +Vanish=Vanish +RndVanish=Random Vanish +Appear=Appear +Nonstep=Nonstep + +Accel=Acceleration +Decel=Deceleration +Worm=EarthWorm + +Spin=Spin +Snake=Snake +Drift=Drift +Shrink=Shrink +Jumps=Jumps + +Freedom=Freedom +Center=Center + +Codes=Custom Code Detector +OptionsList=Custom Options List \ No newline at end of file diff --git a/Themes/_themekit-piu/Scripts/01 system.lua b/Themes/_themekit-piu/Scripts/01 system.lua new file mode 100644 index 0000000000..dbe1340be8 --- /dev/null +++ b/Themes/_themekit-piu/Scripts/01 system.lua @@ -0,0 +1,18 @@ +ThemeInfo = { + Name="_Themekit_PIU"; + Version="pretty much final"; + Code="DSMT-PIUKIT"; + Date = {31,7,2010}; +}; + +WORKING_VERSION = (ProductVersion() == "v1.0 rc2") + +if GetUserPrefB("OptionsMode") == nil then + SetUserPref("OptionsMode", false) +end + +--no anda así, mejor uso pantallas +--assert(SSC and WORKING_VERSION, "El Themekit PIU es compatible sólo con SM-SSC") + +--not working like this, better use screens +--assert(SSC and WORKING_VERSION, "Themekit PIU is compatible only with SM-SSC RC1.5") \ No newline at end of file diff --git a/Themes/_themekit-piu/Scripts/02 CustomCodeDetector.lua b/Themes/_themekit-piu/Scripts/02 CustomCodeDetector.lua new file mode 100644 index 0000000000..23588ea62e --- /dev/null +++ b/Themes/_themekit-piu/Scripts/02 CustomCodeDetector.lua @@ -0,0 +1,350 @@ +--moved here for portability sake +--[[-------------------------------------------------------------------------- +Custom Code Detector by Daisuke Master +------------------------------------------------------------------------------ +-= Whats this? =- +Just that, a custom codedetector, you can add the codenames as exact mods +and this thingy will do whatever you wanted to do with the oh-so-known +harcoded codedetector. +I kind of don't like the codedetector for various reasons, that's why I made +this (also the remaining stuff happened by accident lol), anyway, if you feel +like wanting this in your theme, go ahead! no problem, just let me know that +you're using it and that this was useful for you ^^ + +-= How to use =- +First of all, put this lua module under the Scripts folder of your theme. +Using codeset, put this in a CodeMessageCommand, inside a function command, +under ScreenSelectMusic, like this: + + +CodeMessageCommand=function(self) + CustomCodeDetector() +end; + + +You'll need codename and player to be passed as arguments, you can get those +somewhere: + + +CodeMessageCommand=function(self,params) + CustomCodeDetector(params.Name, params.PlayerNumber) +end; + + +If you like to be classy like me: + + +CodeMessageCommand=function(self,params) + local code = params.Name + local player = params.PlayerNumber + if not GAMESTATE:IsHumanPlayer(player) then return end; + + CustomCodeDetector(code, player) +end; + + +Niceties: + + +CodeMessageCommand=function(self,params) + local code = params.Name + local player = params.PlayerNumber + if not GAMESTATE:IsHumanPlayer(player) then return end; + + if CustomCodeDetector(code, player, true) then + --idk what to put here so eh... + else + --handle here other codes for misc purposes + end + + SOUND:PlayOnce(THEME:GetPathS("ScreenSelectMusic","Options")) +end; + +Extras: you can set a third param as true to deactivate sound and +the message broadcast to handle those outside (example above) + +What more? Oh yes, you'll need a CodeNames line under ScreenSelectMusic + + +[ScreenSelectMusic] +CodeNames="Noteskin,Speed,Cancel,Dark,Mirror" +;main codes +CodeNoteskin="Up,Up,Down,Down,Left,Right,Left,Right" +CodeSpeed="Left,Right,Left,Right,Down" +CodeCancel="Select,Select" +;secondary codes +CodeDark="Down,Down,Left,Right,Down" +CodeMirror="Down,Left,Up,Down,Right,Up" + + +The first three (speed, noteskin and cancle er... cancel) are mandatory, the +rest are optional (dark and mirror as examples) + +-= Caveats =- +*I don't know what will happen if illegal modifiers are set into the CodeNames +line under ScreenSelectMusic, so try at your own risk (not that anything bad +but a crash may happen, I don't know so I'm just warning you). +*I don't know what will happen if you add percentages and/or approach into the +modifiers (for example >Code50% tornado="@Right-Up") +*Ignore the previous two points, I just added a mod validator function, if your +mod does not exists there just add it. +*You just can't set multiple modifiers in one code because of how codes are +separated (by commas) +*FOR PUMP-SM USERS: Watch out when using center as part of your code, it's +treated as start button and you know what happens when you press start, +solution: you can use two part selection in metrics along with twopart +confirms only so you can doublepress center with no problems, remember that +only sm-ssc can do that (goes the same to ez2/popn users with footdown/red +buttons). +*Don't try weird things with this. + +-= TODO list =- +*Previous speed and noteskins +*Go lazy and lowercase GetPlayerOptions +*Be able to put multiple mods in one code + +-= Licensing =- +IMO it's important, I don't like to see my work being hijacked by someone else +and claiming as it's own (others don't like that either) so here we go: + +I'm licensing this under Creative Commons by-sa 3.0 +http://creativecommons.org/licenses/by-sa/3.0/ + +This means that: + +You can share and adapt this code as you like/need/want withouth worry, but +you must attribute me, and if you release your modified work you must license +it with the same license as this. + +-= Credits =- +ºDaisuMaster + +-= Thanks =- +ºmain stepmania devteam (they created SM) +ºsm-ssc devteam (they forked sm4 and tweaked it in an astounding way) +ºcesarmades (this guy inspired me somehow) + +-= Final notes =- +That's all you should need to know for now, and as I said, feel free to use +this and let me know if this was useful for you ^^ +--]]-------------------------------------------------------------------------- +function ReadSpeedMods() + --this reads speeds from a file (Cmods are not allowed, I don't like to + --deal with these) + local dir = THEME:GetCurrentThemeDirectory() .. "speeds.txt" + local speeds = File.Read( dir ) + if not speeds then + speeds = {"1x","2x","3x","4x","5x","8x"} + speeds = join("\r\n",speeds) + File.Write( dir , speeds) + return speeds + end + + speeds = string.gsub(speeds,"\r","") + speeds = split("\n", speeds) + + --[[local rebuild = false + for k,v in ipairs(speeds) do + if not string.find(v,"%dx") or not string.find(v,"%%d.dx") then + rebuild = true + table.remove(speed,k) + end + end + if rebuild then + --cleanup + File.Write( dir , join("\r\n",speeds)) + end]] + + return speeds +end + +local function IsValidMod(m) + --check mods here, see PlayerOptions.cpp if you want/need more + --throwing the most common/used here + --todo: regex formats and bind the mods into a table so setups like 50% dark would work + if m == "Boost" + or m == "Brake" + or m == "Wave" + or m == "Expand" + or m == "Boomerang" + or m == "Drunk" + or m == "Dizzy" + or m == "Confusion" + or m == "Mini" + or m == "Tiny" + or m == "Flip" + or m == "Invert" + or m == "Tornado" + or m == "Tipsy" + or m == "Bumpy" + or m == "Beat" + or m == "XMode" + or m == "Hidden" + or m == "Sudden" + or m == "Stealth" + or m == "Blink" + or m == "RandomVanish" + or m == "Reverse" + or m == "Split" + or m == "Alternate" + or m == "Cross" + or m == "Centered" + or m == "Dark" + or m == "RandomAttacks" + or m == "SongAttacks" + or m == "PlayerAutoPlay" + or m == "Mirror" + or m == "Left" + or m == "Right" + or m == "Shuffle" + or m == "SoftShuffle" + or m == "SuperShuffle" + then + return true + else + return false + end +end + +--local function Tracef(...) Trace(string.format(...)) end + +function CustomCodeDetector(code,player,sound_and_broadcast) + assert(code,"[CUSTOMCODEDETECTOR]: an input code must be given.") + assert(player, "[CUSTOMCODEDETECTOR]: a player number must be given.") + if sound_and_broadcast then + Trace("[CUSTOMCODEDETECTOR]: playeroptions message broadcast and sound playback are deactivated") + end + --playerstates lets you get and set modifiers per player via lua + local playerstate = GAMESTATE:GetPlayerState(player) + --nice, I didn't knew that playermods could be get as an array. + local playermods = playerstate:GetPlayerOptionsArray('ModsLevel_Preferred') + --local playermods = playerstate:GetPlayerOptions('ModsLevel_Preferred') + --playermods = split(", ",playermods) + + local noteskins = NOTESKIN:GetNoteSkinNames() + if not noteskins then noteskins = {"default"} end + --woot! noteskins via codes!! and not hardcoded!!! :awesome: + --dang, I forgot that GetNoteSkinNames works only in sm-ssc + if code == "Noteskin" and SSC then + + --do changes here + local found = false + --iterate every noteskin in every playermod + for i,j in ipairs(playermods) do + for k,l in ipairs(noteskins) do + --we got a match + if j == l then + found = true + local index = k+1 + --avoiding overflow + if index > #noteskins then index = 1 end + --replacing + Tracef("[CUSTOMCODEDETECTOR]: Setting noteskin '%s' in place of '%s'", noteskins[index], playermods[i]) + playermods[i] = noteskins[index] + end + end + end + + --no matches + if not found then + for k,v in ipairs(noteskins) do + if string.lower(v) == "default" then + --set the one next to default or the first if it's the last + local idx = k+1 + if idx > #noteskins then idx = 1 end + Tracef("[CUSTOMCODEDETECTOR]: Setting noteskin '%s'", noteskins[idx]) + table.insert(playermods, noteskins[idx]) + end + end + end + --like notekins but with speeds + elseif code == "Speed" then + --read your speeds from a file (by theme) + --local speeds = { "1x","2x","3x","4x","5x" } + local speeds = ReadSpeedMods() + local found = false + + for i,j in ipairs(playermods) do + for k,l in ipairs(speeds) do + if j == l then + found = true + local index = k+1 + if index > #speeds then index = 1 end + Tracef("[CUSTOMCODEDETECTOR]: Setting speedmod '%s' in place of '%s'", speeds[index], playermods[i]) + playermods[i] = speeds[index] + end + end + end + if not found then + --most likely is a 1x, set the next + for k,v in ipairs(speeds) do + if v == "1x" then + local idx = k+1 + if idx > #speeds then idx = 1 end + Tracef("[CUSTOMCODEDETECTOR]: Setting speedmod '%s'", speeds[idx]) + table.insert(playermods, speeds[idx]) + end + end + end + elseif code == "Cancel" then + local defaultmods = PREFSMAN:GetPreference("DefaultModifiers") + defaultmods = split(",", defaultmods) + --set 1x and clear other mods, also default noteskin (along with the default mods) + playermods = { "1x","default" } + for k,v in ipairs(defaultmods) do + table.insert(playermods, v) + end + else + if IsValidMod(code) then + --other mod codes, code name must be the exact mod + local found = false + for i,j in ipairs(playermods) do + if j == code then + --remove it + found = true + Tracef("[CUSTOMCODEDETECTOR]: Setting modifier '%s'", code) + table.remove(playermods, i) + end + end + + if not found then + Tracef("[CUSTOMCODEDETECTOR]: Unsetting modifier '%s'", code) + table.insert(playermods, code) + end + else + --SOUND:PlayOnce(THEME:GetPathS("MusicWheel","locked")) + Tracef("[CUSTOMCODEDETECTOR]: The mod '%s' could not be set", code) + return false + end + end + + --let's check if noteskins aren't missing (we're avoiding crashes here...) + local found = false + --iterate again uh + for i,j in ipairs(playermods) do + for k,l in ipairs(noteskins) do + if j == l then + found = true + end + end + end + --apparently there aren't any noteskins... + if not found then + table.insert(playermods, "default") + end + + --join + playermods = join(", ",playermods) + + --set the mods + playerstate:SetPlayerOptions('ModsLevel_Preferred',playermods) + --optional stuff + if not sound_and_broadcast then + --play some sound + SOUND:PlayOnce(THEME:GetPathS("ScreenSelectMusic","Options")) + --send some message + MESSAGEMAN:Broadcast("PlayerOptionsChanged", { PlayerNumber = player }) + end + --if we get here then everything went just fine + return true +end \ No newline at end of file diff --git a/Themes/_themekit-piu/Scripts/02 Draw.lua b/Themes/_themekit-piu/Scripts/02 Draw.lua new file mode 100644 index 0000000000..7890cba817 --- /dev/null +++ b/Themes/_themekit-piu/Scripts/02 Draw.lua @@ -0,0 +1,252 @@ +--[[-------------------------------------------------------------------------- +Shape Drawing module by Daisuke Master +------------------------------------------------------------------------------ +-= What's this? =- +Those are functions that can draw some basic shapes + +-= How to use =- +Add them as layers + + +Def.ActorFrame { + Draw.RoundBox(410,310,20,20,color(#000000)); + Draw.RoundBox(400,300,10,10); + Draw.Box(256,64,color("#ffcc66"))..{ + InitCommand=cmd(y,-300); + }; +} + + +You'll need graphics included under Graphics/_shapes for the roundboxes and +ovals (a 1000x1000 circle, 500x500 quarter circle and 1000x850 triangle) + +The neatest thing about those things is that those are overloaded: + +ºBoxesº (pretty much same as quads but without the need of using initcommand +every fucking time to resize them, color them and agh!...) +Draw.Box(width) <-- this will make a blank square (it says blank not black) +Draw.Box(width,color) <-- this will make a colored square +Draw.Box(width,height) <------------ Rectangles! +Draw.Box(width,height,color) <--/ + +ºTrianglesº (BROKEN) +Draw.Triangle(base) <-- this will make an equilateral blank trine +Draw.Triangle(base,color) <-- colored equilateral trine +Draw.Triangle(base,height) +Draw.Triangle(base,height,color) +Draw.Triangle(base,height,point) +Draw.Triangle(base,height,point,color) +--planned/impossible +Draw.Triangle(base,point,color) <-- sorry, I can't figure how to do this + (maybe if I use negative values...) +Draw.Triangle(base,skew) <-- rect/irregular trines +Draw.Triangle(base,skew,color) +--the point should be in 0..1 range + +ºRoundBoxesº (cute rounded boxes, better than sharp edged boxes) +Draw.RoundBox(width,height) +Draw.RoundBox(width,height,color) +Draw.RoundBox(width,height,radius) +Draw.RoundBox(width,height,radius,color) +Draw.RoundBox(width,height,horiz_radius,vert_radius,color) + +ºOvals/Circlesº (yes, figures) +Draw.Oval(radius) +Draw.Oval(radius,color) +Draw.Oval(radius1,radius2) +Draw.Oval(radius1,radius2,color) + +ºLinesº (not yet) +how it's (supposed to be) drawn: +S = start +E = end +dash,slash,backslash,bar = line body + +Draw.Line(4,0,0,4) + E + / + / + / +S + +Draw.Line(0,0,4,0) +S---E + +Draw.Line(0,0,4,4) +S + \ + \ + \ + E + +Draw.Line(0,0,0,4) +S +| +| +| +E + +lines are pending... +--]]-------------------------------------------------------------------------- + +Draw = { + Box = function(w,...) + assert(w) + local h,c = ... + if not h and not c then + h = w + c = color("#ffffff") + elseif not c then + if type(h) == "number" then + c = color("#ffffff") + else + c = h + h = w + end + end + --option + --if not h then h = w end + --if not c then c = color("#ffffff") end + return Def.Quad { + InitCommand=function(self) + self:basezoomx(w); + self:basezoomy(h); + self:diffuse(c); + end; + }; + end; + Triangle = function(b,h,p,c) + --I'M BROKEN + assert(b) + assert(h) + assert(p) + assert(c) + --local h,p,c = ... + + return LoadActor(THEME:GetPathG("","_Figures/triangle.png"))..{ + InitCommand=function(self) + local base = self:GetWidth() + local height = self:GetHeight() + local xzoom = scale(b,0,base,0,1) + local yzoom = scale(h,0,height,0,1) + local rot = scale(p,0,1,0,360) + self:basezoomx(xzoom); + self:basezoomx(yzoom); + self:baserotationz(rot); + self:diffuse(c); + end; + }; + end; + --I had to take a small glance into optical's roundbox code to do this... + RoundBox = function(w,h,...) + assert(w) + assert(h) + --grab color and radii from arguments + local hr,vr,c = ... + if not hr and not vr and not c then + hr = 10 + vr = 10 + c = color("#ffffff") + elseif not vr and not c then + if type(hr) == "number" then + vr = hr + c = color("#ffffff") + else + c = hr + hr = 10 + vr = 10 + end + elseif not c then + if type(vr) == "number" then + c = color("#ffffff") + else + c = vr + vr = hr + end + end + --horizontal radius can't overflow the half of the width and can't be + --below zero, same with vertical radius + hr = clamp(hr,0,w/2) + vr = clamp(vr,0,h/2) + + local corner = LoadActor(THEME:GetPathG("","_Figures/corner.png"))..{ + InitCommand=function(self) + local width = self:GetWidth() + local height = self:GetHeight() + local xpixels = scale(hr,0,width,0,1) + local ypixels = scale(vr,0,height,0,1) + self:basezoomx(xpixels) + self:basezoomy(ypixels) + end; + }; + + return Def.ActorFrame { + InitCommand=function(self) + --this's pretty a shitload of operations... + self:GetChild("Top"):y(-h/2+vr/2); + self:GetChild("Bottom"):y(h/2-vr/2); + --also here + self:GetChild("TopLeft"):xy(-w/2+hr/2,-h/2+vr/2); + self:GetChild("TopRight"):xy(w/2-hr/2,-h/2+vr/2); + self:GetChild("BottomLeft"):xy(-w/2+hr/2,h/2-vr/2); + self:GetChild("BottomRight"):xy(w/2-hr/2,h/2-vr/2); + --coloree :3 + self:runcommandsonleaves(cmd(diffuse,c)) + end; + --lol sound effects + --wrrr whrr wrrr + Draw.Box(w-hr-hr,vr,c)..{Name="Top"}; + Draw.Box(w,h-vr-vr,c)..{Name="Middle"}; + Draw.Box(w-hr-hr,vr,c)..{Name="Bottom"}; + --corners + corner..{ Name="TopLeft"; }; + corner..{ Name="TopRight"; BaseRotationY=180; }; + corner..{ Name="BottomLeft"; BaseRotationX=180; }; + corner..{ Name="BottomRight"; BaseRotationX=180; BaseRotationY=180; }; + } + end; + Oval = function(w,...) + assert(w) + local h,c = ... + if not h and not c then + h = w + c = color("#ffffff") + elseif not c then + color("#ffffff") + if type(h) == "number" then + c = color("#ffffff") + else + c = h + h = w + end + end + return LoadActor(THEME:GetPathG("","_Figures/circle.png"))..{ + InitCommand=function(self) + --self:SetTextureFiltering(false); + local width = self:GetWidth() + local height = self:GetHeight() + local xzoom = scale(w,0,width,0,1) + local yzoom = scale(h,0,height,0,1) + self:diffuse(c); + self:basezoomx(xzoom); + self:basezoomy(yzoom); + end; + }; + end; + Line = function(x1,x2,y1,y2,c) + assert(x1) + assert(x2) + assert(y1) + assert(y2) + + return Def.Quad { + InitCommand=function(self) + self:horizalign(left); + self:xy(x1,y1); + self:zoomto(1,1); + self:rotationz(0); + self:diffuse(c); + end; + }; + end +} \ No newline at end of file diff --git a/Themes/_themekit-piu/Scripts/02 ini read.lua.bak b/Themes/_themekit-piu/Scripts/02 ini read.lua.bak new file mode 100644 index 0000000000..a72fbb797b --- /dev/null +++ b/Themes/_themekit-piu/Scripts/02 ini read.lua.bak @@ -0,0 +1,71 @@ +--iniread +--references: http://lua.pastebin.com/fef286 + +--[[function FirstCharMatch(text,pattern) + local count = 1 + while true do + if string.sub(text,count,count) == pattern then + return count + end + count = count+1 + end +end]] + +function ReadIniFile( file ) + local path = ResolveRelativePath( file, 2 ) + assert(path, file .. " was not found") + + local inifile = File.Read( path ) + local lines = {} + + --identify mac, unix or dos + --mac "\r" - cr + if string.find(inifile, "\r") ~= nil + and string.find(inifile, "\n") == nil + then + lines = split("\r", inifile) + --unix "\n" - lf + elseif string.find(inifile, "\r") == nil + and string.find(inifile, "\n") ~= nil + then + lines = split("\n", inifile) + --dos/win "\r\n" -crlf + elseif string.find(inifile, "\r") ~= nil + and string.find(inifile, "\n") ~= nil + then + lines = split("\r\n", inifile) + end + + local ret = {} + for k,v in ipairs(lines) do + if string.sub(v,1,1) == '[' then + + end + end + + return {} +end +--[[-------------------- +[Section1] +Key1=value1 +Key2=value2 +Key3=value3 + +[Section2] +Key1=value1 +Key2=value2 +Key3=value3 + +ini = { + Section1 = { + Key1 = "Value1"; + Key2 = "Value2"; + Key3 = "Value3"; + }; + Section2 = { + Key1 = "Value1"; + Key2 = "Value2"; + Key3 = "Value3"; + }; +} +--]]-------------------- \ No newline at end of file diff --git a/Themes/_themekit-piu/Scripts/02 splitmode.lua b/Themes/_themekit-piu/Scripts/02 splitmode.lua new file mode 100644 index 0000000000..a79ba75017 --- /dev/null +++ b/Themes/_themekit-piu/Scripts/02 splitmode.lua @@ -0,0 +1,102 @@ +--SplitMode (no version) +--[[-------------------------------------------------------------------------- +Inspired by FSX's SplitLoader (ExSongs) +A Note: No code was stolen from FSX's script, this was completely made from +scratch (the only stolen thing was the idea of using the description as helper +lol) This is a minimized version, without accurate searching modes, prefs and +stuff. This only searches for a song specified in the description and sets +it along with the same kind of source difficulty and stepstype. + +~{ How to use? }~ +Write into steps description: +!SONG= +This script will do the rest... + +~{ Where to use? }~ +Anywhere before gameplay starts +(Recommended: ScreenStage or ScreenStageInformation) + +~{ TODO list }~ +>none... + +~{ Credits }~ +FSX: he had the initial ex-songs idea, I arranged that idea to make it +simplier and somewhat flexible + +~{ License }~ +cc-by +http://creativecommons.org/licenses/by/3.0/ +In a nutshell: You are free to use this freely without worry, just atribute me +--]]-------------------------------------------------------------------------- +function SplitMode() + local bImWorking = false + + --local function Tracef(...) Trace(string.format(...)) end + + --I'll work with the master player + local masterplayer = GAMESTATE:GetMasterPlayerNumber() + local song = GAMESTATE:GetCurrentSong() + local step = GAMESTATE:GetCurrentSteps(masterplayer) + local description = step:GetDescription() + --Working for 1 player atm... + + --if string.lower( step:GetDifficulty() ) ~= 'difficulty_edit' then + if not step:IsAPlayerEdit() then + if description ~= "" then + --the description it's multipurpose + local parts = split("|", description); + local working = {} + + for i=1,#parts do + if string.find(parts[i], "!SONG") then + --use equals as separator + working = split("=", parts[i]) + end + end + + if #working == 2 then + --two parts + if working[1] == "!SONG" and working[2] ~= "" then + local songtoset = SONGMAN:FindSong(working[2]) + --Lets check if there is a song... + if songtoset ~= nil then + local steptoset = songtoset:GetOneSteps(step:GetStepsType(), step:GetDifficulty()) + if steptoset ~= nil then + --Yay! + GAMESTATE:SetCurrentSong(songtoset) + --Set MasterPlayer's steps to both players. + for idx, player in ipairs(PlayerNumber) do + GAMESTATE:SetCurrentSteps(player, steptoset) + end + bImWorking = true + Trace("[SPLITMODE]: Split System Is Working...") + Tracef("--> NewSong: '%s - %s'", songtoset:GetDisplayFullTitle(), songtoset:GetDisplayArtist()) + --Tracef("--> NewDifficulty: '%s'",steptoset:GetStepsType()) + --Tracef("--> NewStepType: '%s'",steptoset:GetDifficulty()) + Trace("--> Difficulty and StepsType should be the same as the source song") + else + Tracef("[SPLITMODE]: Steps with StepsType '%s' and Difficulty '%s' not found for the song '%s'...", step:GetStepsType(), step:GetDifficulty(), parts[2]) + --Tracef("[SPLITMODE]: No StepsType and Difficulty Match for song '%s'...", parts[2]); + end + else + Tracef("[SPLITMODE]: Song '%s' not found...", working[2]); + end + else + Trace("[SPLITMODE]: Do nothing: Malformed Working Part Format") + end + else + Trace("[SPLITMODE]: Do nothing: Regular or Reserved Description") + end + else + Trace("[SPLITMODE]: Do nothing: Empty Description") + end + else + Trace("[SPLITMODE]: Do nothing: Secure Exception -> This is either an edit or a player edit") + end + +-- if not bImWorking then +-- Trace("[SPLITMODE]: Not working for an unknown reason...") +-- end + + return bImWorking +end \ No newline at end of file diff --git a/Themes/_themekit-piu/Scripts/03 branches.lua b/Themes/_themekit-piu/Scripts/03 branches.lua new file mode 100644 index 0000000000..712fe33d25 --- /dev/null +++ b/Themes/_themekit-piu/Scripts/03 branches.lua @@ -0,0 +1,39 @@ +function GameplayNext() + --Cuando pierdas + if STATSMAN:GetCurStageStats():AllFailed() then + --Pierdes, fuera + return "ScreenStageBreak" + --¡Pasaste! + else + return "ScreenEvaluationNormal" + end +end + +function EvaluationNext() + local stagesleft = GAMESTATE:GetSmallestNumStagesLeftForAnyHumanPlayer() + if (stagesleft <= 0 or STATSMAN:GetBestGrade() >= 6) and not GAMESTATE:IsEventMode() then + --return "ScreenGameOver" + return "ScreenProfileSave" + else + return "ScreenNextStage" + end +end + +function GameOverNext() + if (GAMESTATE:GetCoinMode() == 'CoinMode_Pay' and GAMESTATE:GetCoins() > 0) + or GAMESTATE:GetCoinMode() == 'CoinMode_Free' + then + return "ScreenTitleMenu" + else + return "ScreenInit" + end +end + +function StageBreakNext() + if GAMESTATE:IsEventMode() then + return "ScreenSelectMusic" + else + --return "ScreenGameOver" + return "ScreenProfileSave" + end +end diff --git a/Themes/_themekit-piu/Scripts/03 optionrow.lua b/Themes/_themekit-piu/Scripts/03 optionrow.lua new file mode 100644 index 0000000000..8cea2353bf --- /dev/null +++ b/Themes/_themekit-piu/Scripts/03 optionrow.lua @@ -0,0 +1,90 @@ +--[[-------------------------------------------------------------------------- +A fresh and simple way to set up OptionRows -DaisuMaster +--]]-------------------------------------------------------------------------- + +--[[ CORE FUNCTIONS ]]-- +--{ Those must be internal only }-- + +-- Main template +local function OptionRowTemplate(name,layout,select,onechoice,export,choices,loadfunc,savefunc) + local t = { + Name = name; + LayoutType = layout; + SelectType = select; + OneChoiceForAllPlayers = onechoice; + ExportOnChange = export; + Choices = choices; + LoadSelections = loadfunc; + SaveSelections = savefunc; + } + setmetatable( t, t ) + return t +end + +-- Create templates for UserPreferences +local function OptionRowUserPrefTemplate(name,choices) + local function load(self, list, pn) + if GetUserPrefB(name) then + list[1] = true + else + list[2] = true + end + end + local function save(self, list, pn) + local bool + if list[1] then + bool = true + else + bool = false + end + SetUserPref(name,bool) + end + return OptionRowTemplate(name,"ShowAllInRow","SelectOne",true,false,choices,load,save) +end + +-- Same as above but for EnvUtils +local function OptionRowEnvutilsTemplate(name,onechoice,choices) + local function load(self, list, pn) + if onechoice then + setenv(name,false) + else + setenv(name..pn,false) + end + list[1] = true + end + local function save(self, list, pn) + local bool + if list[1] then + bool = false + else + bool = true + end + if onechoice then + setenv(name,bool) + else + setenv(name..pn,bool) + end + end + if not choices then + choices = { + THEME:GetString("OptionNames","Off"), + THEME:GetString("OptionNames","On"), + } + end + return OptionRowTemplate(name,"ShowAllInRow","SelectOne",onechoice,false,choices,load,save) +end + +--[[ whatever else you want/like put it there (keep it clean please) ]]-- +--{ Those should be used externally }-- + +function OptionReverseGrade() + return OptionRowEnvutilsTemplate("GradeReverse",false) +end + +function UserPrefOptionsMode() + local choices = { + THEME:GetString("OptionNames","OptionsList"), + THEME:GetString("OptionNames","Codes"), + } + return OptionRowUserPrefTemplate("OptionsMode", choices) +end \ No newline at end of file diff --git a/Themes/_themekit-piu/Scripts/04 themelibs.lua b/Themes/_themekit-piu/Scripts/04 themelibs.lua new file mode 100644 index 0000000000..ae57d46095 --- /dev/null +++ b/Themes/_themekit-piu/Scripts/04 themelibs.lua @@ -0,0 +1,153 @@ +function StageBreak() + if GAMESTATE:IsEventMode() + or GAMESTATE:GetEasiestStepsDifficulty() == 'Difficulty_Beginner' + or GAMESTATE:GetEasiestStepsDifficulty() == 'Difficulty_Easy' + then + return -1 + end + + return 51 +end + +function JudgmentTransformCommand( self, params ) + local y = 0 + + if params.bCentered then + if params.bReverse then + y = 100 + else + y = -170 + end + end + + self:y(y) +end + +function Tracef(...) + Trace(string.format(...)) +end + +function DifficultyAndStepstypeToString( difficulty, stepstype, description ) + --safe + difficulty = string.lower(difficulty) + stepstype = string.lower(stepstype) + -- + description = description == "" and "Edit" or description + if string.find(stepstype,"double") then + description = description.." - Double" + else + description = description.." - Single" + end + + --return {difficulty, stepstype, description} + + local strings = { + stepstype_pump_single = { + difficulty_beginner = "Easy"; + difficulty_easy = "Normal"; + difficulty_medium = "Hard"; + difficulty_hard = "Crazy"; + difficulty_challenge = "Wild"; + difficulty_edit = description; + }; + stepstype_pump_double = { + difficulty_beginner = "Double"; + difficulty_easy = "Performance"; + difficulty_medium = "Freestyle"; + difficulty_hard = "Nightmare"; + difficulty_challenge = "Hardcore"; + difficulty_edit = description; + }; + stepstype_pump_halfdouble = { + --figure out more names to identify + difficulty_beginner = "Halfdouble"; + difficulty_easy = "Halfdouble"; + difficulty_medium = "Halfdouble"; + difficulty_hard = "Halfdouble"; + difficulty_challenge = "Halfdouble"; + difficulty_edit = description; + }; + other = { + --touhou, sorry + difficulty_beginner = "Easy"; + difficulty_easy = "Normal"; + difficulty_medium = "Hard"; + difficulty_hard = "Lunatic"; + difficulty_challenge = "Extra"; + difficulty_edit = description; + }; + } + + local game = GAMESTATE:GetCurrentGame():GetName() + local mode = string.gsub(stepstype,game.."_","") + mode = string.gsub(mode,"stepstype_","") + + --if game == mode then mode = "" else mode = "-"..mode end + + local FallbackString = string.format("%s-%s %s", game, mode, strings.other[difficulty]) + + local ret = strings[stepstype] + if not ret then return FallbackString end + + return ret[difficulty] or FallbackString +end +-->> media loaders +function LoadSound( a, b ) return LoadActor( THEME:GetPathS(b and a or "", b or a) ) end; +--<< end media loaders +-->> positioning helpers (handy!) +function Actor:FromCenterX(i) + self:x(SCREEN_CENTER_X + i) +end + +function Actor:FromCenterY(i) + self:y(SCREEN_CENTER_Y + i) +end + +function Actor:FromLeft(i) + self:x(SCREEN_LEFT + i) +end + +function Actor:FromRight(i) + self:x(SCREEN_RIGHT + i) +end + +function Actor:FromTop(i) + self:y(SCREEN_TOP + i) +end + +function Actor:FromBottom(i) + self:y(SCREEN_BOTTOM + i) +end +--<< end positioning helpers +-->> scale helpers +--like stretchto, but the values are relative to the edges +function Actor:Rect(left, top, right, bottom) + self:stretchto(left, top, SCREEN_RIGHT - right, SCREEN_BOTTOM - bottom); +end + +function Actor:Skew(x,y) + self:skewx(x); + self:skewy(x); +end + +--I wonder if it's like that... +function Actor:SkewPixels(x,y) + self:skewx(scale(x,0,self:GetWidth(),0,1)); + self:skewy(scale(y,0,self:GetHeight(),0,1)); +end +--<< end scale helpers +-->> frame set helpers +function Sprite.FrameRange(s,f,d) + local frames = {} + for i=s,f do + frames[#frames+1] = { + Frame = i; + Delay = d; + }; + end + return frames +end +--<< end frame set helpers + +--Alberto Ramos +--MIT License \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/2-1.ogg b/Themes/_themekit-piu/Sounds/2-1.ogg new file mode 100644 index 0000000000..97a40e4fd1 Binary files /dev/null and b/Themes/_themekit-piu/Sounds/2-1.ogg differ diff --git a/Themes/_themekit-piu/Sounds/3-2.ogg b/Themes/_themekit-piu/Sounds/3-2.ogg new file mode 100644 index 0000000000..bbbe57f8bb Binary files /dev/null and b/Themes/_themekit-piu/Sounds/3-2.ogg differ diff --git a/Themes/_themekit-piu/Sounds/B09.ogg b/Themes/_themekit-piu/Sounds/B09.ogg new file mode 100644 index 0000000000..a5c10eb561 Binary files /dev/null and b/Themes/_themekit-piu/Sounds/B09.ogg differ diff --git a/Themes/_themekit-piu/Sounds/Common Coin.redir b/Themes/_themekit-piu/Sounds/Common Coin.redir new file mode 100644 index 0000000000..1f8565ca21 --- /dev/null +++ b/Themes/_themekit-piu/Sounds/Common Coin.redir @@ -0,0 +1 @@ +_silent \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/Common Start.redir b/Themes/_themekit-piu/Sounds/Common Start.redir new file mode 100644 index 0000000000..a3850946fe --- /dev/null +++ b/Themes/_themekit-piu/Sounds/Common Start.redir @@ -0,0 +1 @@ +2-1.ogg \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/Copia de ScreenSelectMusic locked.redir b/Themes/_themekit-piu/Sounds/Copia de ScreenSelectMusic locked.redir new file mode 100644 index 0000000000..1f8565ca21 --- /dev/null +++ b/Themes/_themekit-piu/Sounds/Copia de ScreenSelectMusic locked.redir @@ -0,0 +1 @@ +_silent \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/MusicWheel change.redir b/Themes/_themekit-piu/Sounds/MusicWheel change.redir new file mode 100644 index 0000000000..cf2dcaddd7 --- /dev/null +++ b/Themes/_themekit-piu/Sounds/MusicWheel change.redir @@ -0,0 +1 @@ +3-2.ogg \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/MusicWheel expand.redir b/Themes/_themekit-piu/Sounds/MusicWheel expand.redir new file mode 100644 index 0000000000..cf2dcaddd7 --- /dev/null +++ b/Themes/_themekit-piu/Sounds/MusicWheel expand.redir @@ -0,0 +1 @@ +3-2.ogg \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/MusicWheel locked.redir b/Themes/_themekit-piu/Sounds/MusicWheel locked.redir new file mode 100644 index 0000000000..cf2dcaddd7 --- /dev/null +++ b/Themes/_themekit-piu/Sounds/MusicWheel locked.redir @@ -0,0 +1 @@ +3-2.ogg \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/Player mine.redir b/Themes/_themekit-piu/Sounds/Player mine.redir new file mode 100644 index 0000000000..47529e9c84 --- /dev/null +++ b/Themes/_themekit-piu/Sounds/Player mine.redir @@ -0,0 +1 @@ +B09.ogg \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/START.ogg b/Themes/_themekit-piu/Sounds/START.ogg new file mode 100644 index 0000000000..35252e8a95 Binary files /dev/null and b/Themes/_themekit-piu/Sounds/START.ogg differ diff --git a/Themes/_themekit-piu/Sounds/ScreenEvaluation start.redir b/Themes/_themekit-piu/Sounds/ScreenEvaluation start.redir new file mode 100644 index 0000000000..1f8565ca21 --- /dev/null +++ b/Themes/_themekit-piu/Sounds/ScreenEvaluation start.redir @@ -0,0 +1 @@ +_silent \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/ScreenSelectMusic Options.redir b/Themes/_themekit-piu/Sounds/ScreenSelectMusic Options.redir new file mode 100644 index 0000000000..a3850946fe --- /dev/null +++ b/Themes/_themekit-piu/Sounds/ScreenSelectMusic Options.redir @@ -0,0 +1 @@ +2-1.ogg \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/ScreenSelectMusic course music.redir b/Themes/_themekit-piu/Sounds/ScreenSelectMusic course music.redir new file mode 100644 index 0000000000..1f8565ca21 --- /dev/null +++ b/Themes/_themekit-piu/Sounds/ScreenSelectMusic course music.redir @@ -0,0 +1 @@ +_silent \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/ScreenSelectMusic difficulty easier.redir b/Themes/_themekit-piu/Sounds/ScreenSelectMusic difficulty easier.redir new file mode 100644 index 0000000000..cf2dcaddd7 --- /dev/null +++ b/Themes/_themekit-piu/Sounds/ScreenSelectMusic difficulty easier.redir @@ -0,0 +1 @@ +3-2.ogg \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/ScreenSelectMusic difficulty harder.redir b/Themes/_themekit-piu/Sounds/ScreenSelectMusic difficulty harder.redir new file mode 100644 index 0000000000..cf2dcaddd7 --- /dev/null +++ b/Themes/_themekit-piu/Sounds/ScreenSelectMusic difficulty harder.redir @@ -0,0 +1 @@ +3-2.ogg \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/ScreenSelectMusic locked.redir b/Themes/_themekit-piu/Sounds/ScreenSelectMusic locked.redir new file mode 100644 index 0000000000..1f8565ca21 --- /dev/null +++ b/Themes/_themekit-piu/Sounds/ScreenSelectMusic locked.redir @@ -0,0 +1 @@ +_silent \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/ScreenSelectMusic loop music.redir b/Themes/_themekit-piu/Sounds/ScreenSelectMusic loop music.redir new file mode 100644 index 0000000000..1f8565ca21 --- /dev/null +++ b/Themes/_themekit-piu/Sounds/ScreenSelectMusic loop music.redir @@ -0,0 +1 @@ +_silent \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/ScreenSelectMusic random music.redir b/Themes/_themekit-piu/Sounds/ScreenSelectMusic random music.redir new file mode 100644 index 0000000000..1f8565ca21 --- /dev/null +++ b/Themes/_themekit-piu/Sounds/ScreenSelectMusic random music.redir @@ -0,0 +1 @@ +_silent \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/ScreenSelectMusic roulette music.redir b/Themes/_themekit-piu/Sounds/ScreenSelectMusic roulette music.redir new file mode 100644 index 0000000000..1f8565ca21 --- /dev/null +++ b/Themes/_themekit-piu/Sounds/ScreenSelectMusic roulette music.redir @@ -0,0 +1 @@ +_silent \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/ScreenSelectMusic section music.redir b/Themes/_themekit-piu/Sounds/ScreenSelectMusic section music.redir new file mode 100644 index 0000000000..1f8565ca21 --- /dev/null +++ b/Themes/_themekit-piu/Sounds/ScreenSelectMusic section music.redir @@ -0,0 +1 @@ +_silent \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/ScreenSelectMusic sort music.redir b/Themes/_themekit-piu/Sounds/ScreenSelectMusic sort music.redir new file mode 100644 index 0000000000..1f8565ca21 --- /dev/null +++ b/Themes/_themekit-piu/Sounds/ScreenSelectMusic sort music.redir @@ -0,0 +1 @@ +_silent \ No newline at end of file diff --git a/Themes/_themekit-piu/Sounds/ScreenSelectMusic start.redir b/Themes/_themekit-piu/Sounds/ScreenSelectMusic start.redir new file mode 100644 index 0000000000..1f8565ca21 --- /dev/null +++ b/Themes/_themekit-piu/Sounds/ScreenSelectMusic start.redir @@ -0,0 +1 @@ +_silent \ No newline at end of file diff --git a/Themes/_themekit-piu/ThemeInfo.ini b/Themes/_themekit-piu/ThemeInfo.ini new file mode 100644 index 0000000000..efeb97e846 --- /dev/null +++ b/Themes/_themekit-piu/ThemeInfo.ini @@ -0,0 +1,3 @@ +[ThemeInfo] +DisplayName=_Themekit_PIU +Author=DaisuMaster \ No newline at end of file diff --git a/Themes/_themekit-piu/metrics.ini b/Themes/_themekit-piu/metrics.ini new file mode 100644 index 0000000000..10e3f17d4b --- /dev/null +++ b/Themes/_themekit-piu/metrics.ini @@ -0,0 +1,553 @@ +#Themekit PIU +#Base para hacer Themes PIU +#Indice + +#01# - System +#02# - Pantallas +#03# - Attract loop +#04# - Gameplay loop +#05# - Otras pantallas/debug + +;Nota: las anotaciones en los luas están en inglés porque se me dió la gana + +#00# - Antes de todo +;[Global] +;FallbackTheme=_themekit_piu + +#01# - System +[ArrowEffects] +;En PIU las flechas están separadas 60 pixeles +ArrowSpacing=60 + +[Background] +;em, no +ShowDancingCharacters=false +;ala prex3 pc? +UseStaticBackground=false + +[Common] +;InitialScreen="ScreenInit" +AutoSetStyle=true +DefaultModifiers="1x" +StepsTypesToHide="pump-couple,dance-double,dance-couple,dance-solo,dance-routine,lights-cabinet" +;Si no se usa, no sé siquiera por qué los pongo así +ColorP1Command=diffuse,color("#FFFFFF") +ColorP2Command=diffuse,color("#FFFFFF") + +;ya no lo necesito +[CodeDetector] +PrevSteps1="" +PrevSteps2="" +NextSteps1="" +NextSteps2="" + +;groups +NextGroup="" +PrevGroup="" + +;Sorting +NextSort1="" +NextSort2="" +NextSort3="" +NextSort4="" + +;Demases +ModeMenu1="" +ModeMenu2="" +Mirror="" +Left="" +Right="" +Shuffle="" +SuperShuffle="" +NextTransform="" +NextScrollSpeed="" +PreviousScrollSpeed="" +NextAccel="" +NextEffect="" +NextAppearance="" +NextTurn="" +Reverse="" +HoldNotes="" +Mines="" +Dark="" +CancelAll="" +NextTheme="" +NextTheme2="" +NextAnnouncer="" +NextAnnouncer2="" +NextBannerGroup="" +NextBannerGroup2="" +Hidden="" +RandomVanish="" +SaveScreenshot1="" +SaveScreenshot2="" +CancelAllPlayerOptions="" +BackInEventMode="" + +[CustomDifficulty] +;Screwy +Names="" + +[CustomScoring] +ComboAboveThresholdAddsToScoreBonus=0 +ComboMultiplier=0.0 +ComboScoreBonusThreshold=50 +ComboScoreBonusValue=+1000 + +DoubleNoteScoreMultiplier=1.0 +TripleNoteScoreMultiplier=1.5 +QuadOrHigherNoteScoreMultiplier=2 + +PointsW1=+1000 +PointsW2=+1000 +PointsW3=+500 +PointsW4=+100 +PointsW5=-200 +PointsMiss=-500 +PointsHitMine=-1000 +PointsCheckpointHit=+1000 +PointsCheckpointMiss=-200 +PointsNone=0 +PointsHoldHeld=+1000 +PointsHoldLetGo=-500 + +[Gameplay] +ComboIsPerRow=true +MinScoreToContinueCombo="TapNoteScore_W3" +MinScoreToMaintainCombo="TapNoteScore_W4" + +[GameState] +GradeTierForExtra1="Grade_Tier03" +GradeTierForExtra2="Grade_Tier03" +MinDifficultyForExtra="Difficulty_Beginner" + +AreStagePlayerModsForced=false +AreStageSongModsForced=false + +AllowExtra2=false +LockExtraStageSelection=false + +[HoldJudgment] +# no +HoldJudgmentLetGoCommand=visible,false +HoldJudgmentHeldCommand=visible,false + +[LifeMeterBar] +;note scores +;ADD +LifePercentChangeCheckpointHit=0.008 +LifePercentChangeHeld=0.000 +LifePercentChangeW1=0.008 +LifePercentChangeW2=0.008 +LifePercentChangeW3=0.004 +;STAY +LifePercentChangeW4=0.000 +LifePercentChangeLetGo=0.000 +;SUBSTRACT +LifePercentChangeW5=-0.040 +LifePercentChangeMiss=-0.080 +LifePercentChangeCheckpointMiss=-0.080 +;mines +LifePercentChangeHitMine=-0.160 + +;no pierdes vida si presionas bads +MinStayAlive="TapNoteScore_W5" +;como no funciona de ese modo... +LifeMultiplier=1.2 + +;la mitad desde el inicio... +InitialValue=0.5 + +[MenuTimer] +WarningStart=0 +WarningBeepStart=11 + +Text1OnCommand=stopeffect;stoptweening;shadowlength,0; +Text1FormatFunction=function(fSeconds) return string.format("%02i",fSeconds) end; +Text2OnCommand=visible,false + +Warning0Command= + +[MusicWheel] +SwitchSeconds=0.1 +ShowRoulette=false +;probando cosas... +;coverflowish +ItemTransformFunction=function(self,offsetFromCenter,itemIndex,numItems) \ + local x = offsetFromCenter * 250 \ + if offsetFromCenter >= 1 then \ + x = scale(offsetFromCenter+1,-1,1,-0.5,0.5) * 250 \ + elseif offsetFromCenter <= -1 then \ + x = scale(offsetFromCenter-1,-1,1,-0.5,0.5) * 250 \ + end \ + self:x( x ) \ + self:z((-clamp(math.abs(offsetFromCenter),0,1)*250)-math.abs(offsetFromCenter)) \ + self:rotationy( clamp( offsetFromCenter, -1, 1) * 90) \ +end; +;7 items +NumWheelItems=7 +;sólo dos por el momento, si ocupas más solo acomódalo en tu theme... +SortOrders={ "SortOrder_Group", "SortOrder_Genre" } + +;limpio de toda impureza... quiero discs en mi musicwheel :3 +[MusicWheelItem] +SongNameOnCommand=zoom,0 +CourseOnCommand=zoom,0 +SectionExpandedOnCommand=zoom,0 +SectionCollapsedOnCommand=zoom,0 +SectionCountOnCommand=zoom,0 +RouletteOnCommand=zoom,0 +SortOnCommand=zoom,0 +ModeOnCommand=zoom,0 +GradesShowMachine=false + +[Player] +ReceptorArrowsYStandard=-173 +ReceptorArrowsYReverse=173 +DrawDistanceBeforeTargetsPixels=SCREEN_HEIGHT +DrawDistanceAfterTargetsPixels=-100 + +JudgeHoldNotesOnSameRowTogether=false +HoldCheckpoints=true +CheckpointsUseTimeSignatures=true +CheckpointsTapsSeparateJudgment=false +CheckpointsFlashOnHold=true +ImmediateHoldLetGo=false +RequireStepOnHoldHeads=false +InitialHoldLife=1 +MaxHoldLife=1 +RollBodyIncrementsCombo=false +ScoreMissedHoldsAndRolls=false + +;Grades +[PlayerStageStats] +NumGradeTiersUsed=7 +;S +GradePercentTier01=1 +;S +GradePercentTier02=1 +;A +GradePercentTier03=0.8 +;B +GradePercentTier04=0.6 +;C +GradePercentTier05=0.4 +;D +GradePercentTier06=0.2 +;F +GradePercentTier07=-999999 +;FPC = SS +GradeTier01IsAllW2s=true +GradeTier02IsAllW2s=false +;FC = S +GradeTier02IsFullCombo=true + +[SongManager] +ExtraColorMeter=17 +ExtraStage2DifficultyMax=999 +NumSongGroupColors=1 +SongGroupColor1=color("#ffffff") + +#02# - Pantallas +[Screen] +ShowCreditDisplay=true + +[ScreenOptionsMaster] +SongMenu="7" +SongMenuDefault="" +SongMenu,1="name,Speed;screen,Speed" +SongMenu,2="name,Noteskins;screen,Noteskins" +SongMenu,3="name,FadeNotes;screen,FadeNotes" +SongMenu,4="name,Scroll;screen,Scroll" +SongMenu,5="name,Effect;screen,Effect" +SongMenu,6="name,Receptor;screen,Receptor" +SongMenu,7="name,ResetOptions" + +Speed="10" +SpeedDefault="mod,1x,no randomspeed" +Speed,1="mod,0.5x;name,0.5x" +Speed,2="mod,1x;name,1x" +Speed,3="mod,1.5x;name,1.5x" +Speed,4="mod,2x;name,2x" +Speed,5="mod,3x;name,3x" +Speed,6="mod,4x;name,4x" +Speed,7="mod,5x;name,5x" +Speed,8="mod,6x;name,6x" +Speed,9="mod,7x;name,7x" +Speed,10="mod,8x;name,8x" + +FadeNotes="5;selectmultiple" +FadeNotesDefault="mod,no hidden,no sudden,no stealth,no blink" +FadeNotes,1="name,Vanish;mod,hidden" +FadeNotes,2="name,RndVanish;mod,randomvanish" +FadeNotes,3="name,Appear;mod,sudden" +FadeNotes,4="name,Nonstep;mod,stealth" +FadeNotes,5="name,Flash;mod,blink" + +Scroll="5;selectmultiple" +ScrollDefault="mod,no boost,no brake,no wave,no expand,no xmode" +Scroll,1="name,Accel;mod,boost" +Scroll,2="name,Decel;mod,brake" +Scroll,3="name,Worm;mod,expand" +Scroll,4="name,Wave;mod,wave" +Scroll,5="name,XMode;mod,xmode" + +Effect="6;selectmultiple" +EffectDefault="mod,no dizzy,no tornado,no drunk,no beat,no tiny,no bumpy" +Effect,1="name,Spin;mod,628% dizzy" +Effect,2="name,Snake;mod,25% tornado" +Effect,3="name,Drift;mod,drunk" +Effect,4="name,Beat;mod,beat" +Effect,5="name,Shrink;mod,tiny" +Effect,6="name,Jumps;mod,bumpy" + +Receptor="5;selectmultiple" +ReceptorDefault="mod,no dark,no reverse,no centered" +Receptor,1="name,Freedom;mod,dark" +Receptor,2="name,Reverse;mod,reverse" +Receptor,3="name,Center;mod,centered" +Receptor,4="name,Flip;mod flip" +Receptor,5="name,Invert,mod, invert" + +[ScreenPlayerOptions] +;LineNames="1,2,3,4,5,6,7,8,14" +LineNames="1,8" +;Line1="lua,SpeedMods()" +Line1="list,Speed" + +[ScreenWithMenuElements] +TimerX=SCREEN_CENTER_X +TimerY=10 +TimerOnCommand= +TimerOffCommand= + +#03# - Attract loop +[ScreenInit] +PlayMusic=true + +#04# - Gameplay loop + +;82w +[ScreenTitleMenu] +;Next, Prev y CoinChange Screen +PrevScreen="ScreenInit" +NextScreen="ScreenTitleMenu" +CoinModeChangeScreen="ScreenTitleMenu" + +;choices +ChoiceNames="1,2,3,5" +Choice1="text,Play;applydefaultoptions;difficulty,beginner;screen,ScreenProfileLoad" +;ScreenProfileLoad" +Choice2="text,Options;screen,ScreenOptionsService" +Choice3="text,Editor;screen,ScreenOptionsEdit" +Choice4="text,Test;screen,ScreenTest" +Choice5="text,Exit;screen,ScreenExit" + +;el scroller +LoopScroller=true +WrapScroller=true +ScrollerSecondsPerItem=0.1 +ScrollerNumItemsToDraw=5 + +ScrollerX=SCREEN_CENTER_X +ScrollerY=SCREEN_CENTER_Y +ScrollerTransform=function(self,offset,itemIndex,numItems) self:x(offset * 200); end + +[ScreenProfileLoad] +NextScreen="ScreenSelectMusic" +PrevScreen="ScreenTitleMenu" + +;099 +[ScreenSelectMusic] +;settings +NextScreen="ScreenStageInformation" +PrevScreen="ScreenProfileSave" +;"ScreenTitleMenu" +;mucho tiempo, aprovéchalo +TimerSeconds=100 +;no +ShowOptionsMessageSeconds=0 +;em +ScreenModsCommand= +;si, eso +DefaultSort="Group" +;¡No! +DoRouletteOnMenuTimer=false + +;plz +SampleMusicLoops=false +SampleMusicDelay=0.5 +SampleMusicDelayInit=1.5 +;1: oye, esto para qué es? +;2: ez - no - hd - cz - fs - nm - ez - no - hd - cz - fs - nm - ez +;1: ok ok, ya entendí... +WrapChangeSteps=true +;un pequeño agregado mío... +ChangeStepsWithGameButtons=true +PreviousDifficultyButton="MenuUp" +NextDifficultyButton="MenuDown" +######################## +# Custom code detector # +######################## +CodeNames=GetUserPrefB("OptionsMode") and "Summon" or "Noteskin,Speed,Cancel,Hidden,SuperShuffle,XMode,Left,Dark,GradeReverse" +;main codes +CodeNoteskin="UpLeft,Center,UpRight,Center" +CodeSpeed="UpLeft,UpRight,UpLeft,UpRight,Center" +CodeCancel="DownLeft,DownRight,DownLeft,DownRight,DownLeft,DownRight" +;secondary codes +CodeHidden="UpLeft,UpRight,DownLeft,DownRight,Center" +CodeSuperShuffle="UpLeft,UpRight,UpLeft,UpRight,DownLeft,DownRight,DownLeft,DownRight,Center" +CodeXMode="DownLeft,UpRight,DownLeft,UpRight,DownRight,UpLeft,DownRight,UpLeft,Center" +CodeLeft="DownRight,DownLeft,UpRight,UpLeft,DownRight,DownLeft,UpRight,UpLeft,Center" +CodeDark="UpLeft,DownLeft,UpRight,DownRight,DownRight,UpLeft,UpRight,DownLeft,Center" +;tertiary codes +CodeGradeReverse="UpLeft,UpRight,Center,DownLeft,DownRight,DownRight,DownLeft,Center,UpRight,UpLeft,Center" +CodeSomething="Select,Select,Select,Select,Center" + +;special cases or whatever... +CodeSummon="DownLeft,DownRight,DownLeft,DownRight,DownLeft,DownRight" + +;confirm +TwoPartSelection=true +TwoPartConfirmsOnly=true + +;oplist +;UseOptionsList=true + +;otros elementos +TimerOnCommand=visible,false +BannerOnCommand=visible,false +MusicWheelX=SCREEN_CENTER_X +MusicWheelY=SCREEN_CENTER_Y +MusicWheelOnCommand=SetDrawByZPosition,true;fov,90 + +CDTitleOnCommand=visible,false;pause; + +[ScreenCustomOptionsList] +;with this selectmusic preview still plays when stacking this screen +PlayMusic=false + +Class="ScreenSplash" +Fallback="ScreenSplash" +NextScreen="ScreenSelectMusic" +PrevScreen="ScreenSelectMusic" + +CodeNames="Prev,Next,Toggle,Back1=Back,Back2=Back" +CodePrev="+DownLeft" +CodeNext="+DownRight" +CodeToggle="Center" +CodeBack1="UpLeft" +CodeBack2="UpRight" + +;pnz showoff +[ScreenStageInformation] +TimerSeconds=1 +TimerOnCommand=visible,false +NextScreen="ScreenGameplay" +PrevScreen="ScreenSelectMusic" +PrepareScreen="ScreenGameplay" +ShowCreditDisplay=false + +;00 +;in before iguana play... +[ScreenGameplay] +NextScreen=GameplayNext() +PrevScreen="ScreenSelectMusic" + +FailOnMissCombo=StageBreak() + +MinSecondsToStep=0.5 +MinSecondsToMusic=0 +MusicFadeOutSeconds=1 + +;con toda confianza puedo decir: la (barra de) vida es una mierda XD +LifeP1OnCommand=visible,false +LifeP2OnCommand=visible,false +ScoreP1OnCommand=visible,false +ScoreP2OnCommand=visible,false + +PlayerInitCommand=y,240;zoom,(THEME:GetMetric("Common","ScreenHeight")/480) +StartGivesUp=false +BackGivesUp=false + +;uh... +PlayerP1OnePlayerOneSideX=SCREEN_CENTER_X-160 +PlayerP2OnePlayerOneSideX=SCREEN_CENTER_X+160 +PlayerP1TwoPlayersTwoSidesX=SCREEN_CENTER_X-160 +PlayerP2TwoPlayersTwoSidesX=SCREEN_CENTER_X+160 +PlayerP1OnePlayerTwoSidesX=SCREEN_CENTER_X +PlayerP2OnePlayerTwoSidesX=SCREEN_CENTER_X +PlayerP1TwoPlayersSharedSidesX=SCREEN_CENTER_X +PlayerP2TwoPlayersSharedSidesX=SCREEN_CENTER_X + +;Si no pones estos, el extra stage te crashea si le das back... +SurviveTimeX=0 +SurviveTimeY=0 +SurviveTimeOnCommand=visible,false +SurviveTimeOffCommand= + +;83 +[ScreenEvaluationNormal] +ForceTimer=true +TimerSeconds=10 +TimerMetricsGroup="MenuTimerNoSound" +;TimerOnCommand=visible,false +NextScreen=EvaluationNext() + +;LT%02d +[ScreenNextStage] +Class="ScreenSplash" +Fallback="ScreenSplash" +PrevScreen="ScreenSelectMusic" +NextScreen="ScreenSelectMusic" + +ForceTimer=true +TimerSeconds=3 +TimerMetricsGroup="MenuTimerNoSound" +TimerOnCommand=visible,false + +;083 +[ScreenStageBreak] +Class="ScreenSplash" +Fallback="ScreenSplash" +PrevScreen=StageBreakNext() +NextScreen=StageBreakNext() +ForceTimer=true +TimerSeconds=5 +TimerMetricsGroup="MenuTimerNoSound" +TimerOnCommand=visible,false + +;guardar perfiles +[ScreenProfileSave] +NextScreen="ScreenGameOver" +PrevScreen="ScreenGameOver" + +;84 +[ScreenGameOver] +Class="ScreenSplash" +Fallback="ScreenSplash" +PrevScreen=GameOverNext() +NextScreen=GameOverNext() + +PlayMusic=true +ForceTimer=true +TimerSeconds=5 +TimerMetricsGroup="MenuTimerNoSound" +TimerOnCommand=visible,false + +#05# - Otras pantallas/debug +[ScreenOptionsTheme] +Fallback="ScreenOptionsServiceChild" +LineNames="1" +Line1="lua,UserPrefOptionsMode()" + +;derivadas de screenoptions +;Sí porque faltan lineas en varias y otras te llevan a pantallas que no quiero... +[ScreenOptionsService] +PrevScreen="ScreenTitleMenu" +;LineNames="SD,1,2,13,3,10,11,4,12,6,5,8,9" + +[ScreenOptionsSystemDirection] +Fallback="ScreenOptionsServiceChild" +PrevScreen="ScreenOptionsService" +NextScreen="ScreenOptionsService" \ No newline at end of file diff --git a/Themes/_themekit-piu/reads.txt b/Themes/_themekit-piu/reads.txt new file mode 100644 index 0000000000..674db02715 --- /dev/null +++ b/Themes/_themekit-piu/reads.txt @@ -0,0 +1,53 @@ +Congrats, you're reading the readme + +-= Themekit piu: a base for piu themes =- +Use this theme as fallback for your own themes so you don't need to deal with +piu related metric setups like lifebars, tiers, effects and such; also some +screens are already linked (no attract screens tough) + +-= Why you do this? =- +Well, I'm a PIU player, and as one, I like to have PIU setups in my Stepmania themes + +-= Basics and how to =- +Easy! +º Put this under /Themes +º Make a blank folder under /Themes with whatever name you want for your theme +º Create a blank Metrics.ini file inside +º Open it +º Write in: + + +[Global] +FallbackTheme=_themekit_piu + + +º And there you go! just mount the screens that you want to work with or +add/replace metrics/elements + +-= FAQ and details =- +Q: Can't select themekit +A: Themekits aren't supposed to be selectable, but if you want to use this as a +theme (wich actually works like one) remove the first underscore in the theme +folder name; alternately you can make a blank theme and fallback it with this +(explained up there^) and it should work as is. + +Q: Theme doesn't work. +A: Maybe you're using stepmania 4 alpha or some old cvs build, use sm-ssc + +Q: I want to use (partial or entirely) the lua modules outside +A: Go ahead, just please read the notes if there are any. + +Q: Help me with X +A: Sorry, I don't feel like doing so... + +Q: I want to contact you +A: I don't like to have my email address floating around, visit sm-ssc irc channel +at irc.badnik.net/sm-ssc, I'll be usually there + +Q: Er... Your real name? +A: yeah, Alberto Ramos + +-= Least but not least: Final notes =- +Well, I think that's pretty much it and what you need to know about this themekit, +I hope that you enjoy it, whenever you are or not a themer, and if you are one I +just hope that I didn't wasted time doing this... er... you found this useful ^^ \ No newline at end of file diff --git a/Themes/default/BGAnimations/ScreenCredits background/_grid.png b/Themes/default/BGAnimations/ScreenCredits background/_grid.png new file mode 100644 index 0000000000..241d739b9d Binary files /dev/null and b/Themes/default/BGAnimations/ScreenCredits background/_grid.png differ diff --git a/Themes/default/BGAnimations/ScreenCredits background/_space.png b/Themes/default/BGAnimations/ScreenCredits background/_space.png new file mode 100644 index 0000000000..3784c11ab7 Binary files /dev/null and b/Themes/default/BGAnimations/ScreenCredits background/_space.png differ diff --git a/Themes/default/BGAnimations/ScreenCredits background/default.lua b/Themes/default/BGAnimations/ScreenCredits background/default.lua new file mode 100644 index 0000000000..47e9237339 --- /dev/null +++ b/Themes/default/BGAnimations/ScreenCredits background/default.lua @@ -0,0 +1,20 @@ +local scrolltime = 95; + +local t = Def.ActorFrame { + InitCommand=cmd(Center); + LoadActor("_space")..{ + InitCommand=cmd(y,-SCREEN_HEIGHT*1.5;fadebottom,0.125;fadetop,0.25); + OnCommand=cmd(linear,scrolltime;addy,SCREEN_HEIGHT*1.5825); + }; + Def.Quad { + InitCommand=cmd(scaletoclipped,SCREEN_WIDTH+1,SCREEN_HEIGHT); + OnCommand=cmd(diffusecolor,color("#FFCB05");diffusebottomedge,color("#F0BA00");diffusealpha,0.45); + }; + 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); + }; +}; + +return t \ No newline at end of file diff --git a/Themes/default/BGAnimations/ScreenCredits overlay.lua b/Themes/default/BGAnimations/ScreenCredits overlay.lua new file mode 100644 index 0000000000..49bef89970 --- /dev/null +++ b/Themes/default/BGAnimations/ScreenCredits overlay.lua @@ -0,0 +1,144 @@ +local function Fooled() + local phrases = { + "hornswaggled", + "bamboozled", + "hoodwinked", + "swindled", + "duped", + "hoaxed", + "fleeced", + "shafted", + "caboodled", + "beguiled", + "finagled", + "two-timed", + "suckered", + "flimflammed" + } + return phrases[math.random(#phrases)] +end + +local ssc = { + "AJ Kelly as freem", + "Jonathan Payne (Midiman)", + "Colby Klein (shakesoda)", +} + +local sm_ssc = { + "Jason Felds (wolfman2000)", + "Alberto Ramos (Daisuke Master)", + "Jack Walstrom (FSX)", +} + +local stepmania = { + "Chris Danford", + "Glenn Maynard", + "Steve Checkoway", + -- and various other contributors +} + +local contrib = { + "Aldo Fregoso (Aldo_MX)", -- delays + "Chris Eldridge (kurisu)", -- dance-threepanel + "cerbo", + "cesarmades", -- pump/cmd* noteskins + "corec", -- various fixes + "galopin", -- piu PlayStation2 usb mat support + "gholms", -- automake 1.11 support + "juanelote", -- SongManager:GetSongGroupByIndex, JumpToNext/PrevGroup logic mods + "Kaox", -- pump/default noteskin + "NitroX72", -- pump/frame noteskin + "sy567", -- beginner helper fix + "Thai Pangsakulyanont (theDtTvB)", + "v1toko", -- x-mode from StepNXA +} + +local thanks = { + "A Pseudonymous Coder", -- support + "Bill Shillito (DM Ashura)", -- Music (not yet though) + "cpubasic13", -- testing (a lot) + "Dreamwoods", + "Infamouspat", -- oitg bro + "Jason Bolt (LightningXCE)", + "Jousway", -- Noteskins + "Matt1360", -- Automake magic + oitg bro + "Mark Cannon (vyhd)", -- oitg bro + twirl/roll + "Petriform", -- Music + "Renard", + "Ryan McKanna (Plaguefox)", +} + +local shoutout = { + "The Lua team", -- lua project lead or some shit. super nerdy but oh hell. + "Mojang", -- 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 + "You showed us... your ultimate dance", + -- "Can't stop crying... buckets of tears!" +} + +local copyright = { + "StepMania is released under the terms of the MIT license.", + "If you paid for the program you've been " .. Fooled() .. ".", + "All content is the sole property of their respectful owners." +} + +local sections = { + { "the spinal shark collective (project lead)", ssc }, + { "sm-ssc Team", sm_ssc }, + { "StepMania Team", stepmania }, + { "Other Contributors", contrib }, + { "Special Thanks", thanks }, + { "Shoutouts", shoutout }, + { "Copyright", copyright }, +} + +-- To add people or sections modify the above. + +local lineOn = cmd(zoom,0.875;strokecolor,color("#444444");shadowcolor,color("#444444");shadowlength,3) +local sectionOn = cmd(diffuse,color("#88DDFF");strokecolor,color("#446688");shadowcolor,color("#446688");shadowlength,3) +local item_padding_start = 4; + +local creditScroller = Def.ActorScroller { + SecondsPerItem = 1.25; + NumItemsToDraw = 40; + TransformFunction = function( self, offset, itemIndex, numItems) + self:y(30*offset) + end; + OnCommand = cmd(scrollwithpadding,item_padding_start,15); +} + +local function AddLine( text, command ) + local text = Def.ActorFrame{ + LoadFont("Common normal")..{ + Text = text or ""; + OnCommand = command or lineOn; + } + } + table.insert( creditScroller, text ) +end + +-- Add sections with padding. +for section in ivalues(sections) do + AddLine( section[1], sectionOn ) + for name in ivalues(section[2]) do + AddLine( name ) + end + AddLine() + AddLine() +end + +creditScroller.BeginCommand=function(self) + SCREENMAN:GetTopScreen():PostScreenMessage( "SM_BeginFadingOut", (t.SecondsPerItem * (#t + item_padding_start) + 5) ); +end; + + +return Def.ActorFrame{ + creditScroller..{ + InitCommand=cmd(CenterX;y,SCREEN_BOTTOM-64), + }, + LoadActor(THEME:GetPathB("ScreenWithMenuElements","background/_bg top"))..{ + InitCommand=cmd(Center), + }, +}; \ No newline at end of file diff --git a/Themes/default/BGAnimations/ScreenGameplay ready/ready.png b/Themes/default/BGAnimations/ScreenGameplay ready/ready.png index 1386cf4055..cb48b43b74 100644 Binary files a/Themes/default/BGAnimations/ScreenGameplay ready/ready.png and b/Themes/default/BGAnimations/ScreenGameplay ready/ready.png differ diff --git a/Themes/default/BGAnimations/ScreenHowToPlay background/bg.png b/Themes/default/BGAnimations/ScreenHowToPlay background/bg.png index d941cf0dcf..f5b3eb3aa8 100644 Binary files a/Themes/default/BGAnimations/ScreenHowToPlay background/bg.png and b/Themes/default/BGAnimations/ScreenHowToPlay background/bg.png differ diff --git a/Themes/default/BGAnimations/ScreenHowToPlay overlay/feet.png b/Themes/default/BGAnimations/ScreenHowToPlay overlay/feet.png index feaea9d5bc..e300f70836 100644 Binary files a/Themes/default/BGAnimations/ScreenHowToPlay overlay/feet.png and b/Themes/default/BGAnimations/ScreenHowToPlay overlay/feet.png differ diff --git a/Themes/default/BGAnimations/ScreenHowToPlay overlay/healthhilight.png b/Themes/default/BGAnimations/ScreenHowToPlay overlay/healthhilight.png index bf38ca43b7..b55fa18f9b 100644 Binary files a/Themes/default/BGAnimations/ScreenHowToPlay overlay/healthhilight.png and b/Themes/default/BGAnimations/ScreenHowToPlay overlay/healthhilight.png differ diff --git a/Themes/default/BGAnimations/ScreenHowToPlay overlay/jumpmessage.png b/Themes/default/BGAnimations/ScreenHowToPlay overlay/jumpmessage.png index b9d8d02bdc..4cea6a81ee 100644 Binary files a/Themes/default/BGAnimations/ScreenHowToPlay overlay/jumpmessage.png and b/Themes/default/BGAnimations/ScreenHowToPlay overlay/jumpmessage.png differ diff --git a/Themes/default/BGAnimations/ScreenHowToPlay overlay/missmessage.png b/Themes/default/BGAnimations/ScreenHowToPlay overlay/missmessage.png index 26e6cefb6e..2b6177e292 100644 Binary files a/Themes/default/BGAnimations/ScreenHowToPlay overlay/missmessage.png and b/Themes/default/BGAnimations/ScreenHowToPlay overlay/missmessage.png differ diff --git a/Themes/default/BGAnimations/ScreenHowToPlay overlay/tapglow.png b/Themes/default/BGAnimations/ScreenHowToPlay overlay/tapglow.png index c66f659005..096f26b895 100644 Binary files a/Themes/default/BGAnimations/ScreenHowToPlay overlay/tapglow.png and b/Themes/default/BGAnimations/ScreenHowToPlay overlay/tapglow.png differ diff --git a/Themes/default/BGAnimations/ScreenHowToPlay overlay/tapmessage.png b/Themes/default/BGAnimations/ScreenHowToPlay overlay/tapmessage.png index 7afb411b1c..d2e855de96 100644 Binary files a/Themes/default/BGAnimations/ScreenHowToPlay overlay/tapmessage.png and b/Themes/default/BGAnimations/ScreenHowToPlay overlay/tapmessage.png differ diff --git a/Themes/default/BGAnimations/ScreenTitleMenu background/_bg.png b/Themes/default/BGAnimations/ScreenTitleMenu background/_bg.png index 1039cffe89..7478cf4cdf 100644 Binary files a/Themes/default/BGAnimations/ScreenTitleMenu background/_bg.png and b/Themes/default/BGAnimations/ScreenTitleMenu background/_bg.png differ diff --git a/Themes/default/BGAnimations/ScreenWithMenuElements background/_bg top.png b/Themes/default/BGAnimations/ScreenWithMenuElements background/_bg top.png index a02bee444d..d8a7b3babb 100644 Binary files a/Themes/default/BGAnimations/ScreenWithMenuElements background/_bg top.png and b/Themes/default/BGAnimations/ScreenWithMenuElements background/_bg top.png differ diff --git a/Themes/default/BGAnimations/ScreenWithMenuElements background/_grid.png b/Themes/default/BGAnimations/ScreenWithMenuElements background/_grid.png index c2e0a20e6d..241d739b9d 100644 Binary files a/Themes/default/BGAnimations/ScreenWithMenuElements background/_grid.png and b/Themes/default/BGAnimations/ScreenWithMenuElements background/_grid.png differ diff --git a/Themes/default/BGAnimations/ScreenWithMenuElements background/_particle normal.png b/Themes/default/BGAnimations/ScreenWithMenuElements background/_particle normal.png index dfbdda9d56..dce80615c0 100644 Binary files a/Themes/default/BGAnimations/ScreenWithMenuElements background/_particle normal.png and b/Themes/default/BGAnimations/ScreenWithMenuElements background/_particle normal.png differ diff --git a/Themes/default/BGAnimations/ScreenWithMenuElements background/_pattern (stretch).png b/Themes/default/BGAnimations/ScreenWithMenuElements background/_pattern (stretch).png index 0b8f4f91a4..4f00841603 100644 Binary files a/Themes/default/BGAnimations/ScreenWithMenuElements background/_pattern (stretch).png and b/Themes/default/BGAnimations/ScreenWithMenuElements background/_pattern (stretch).png differ diff --git a/Themes/default/BGAnimations/_frame files 3x1/rounded fill 3x1.png b/Themes/default/BGAnimations/_frame files 3x1/rounded fill 3x1.png index 69a8621fba..37cbb834a5 100644 Binary files a/Themes/default/BGAnimations/_frame files 3x1/rounded fill 3x1.png and b/Themes/default/BGAnimations/_frame files 3x1/rounded fill 3x1.png differ diff --git a/Themes/default/BGAnimations/_frame files 3x1/rounded gloss 3x1.png b/Themes/default/BGAnimations/_frame files 3x1/rounded gloss 3x1.png index 3abc3f2af7..1757e4c9ea 100644 Binary files a/Themes/default/BGAnimations/_frame files 3x1/rounded gloss 3x1.png and b/Themes/default/BGAnimations/_frame files 3x1/rounded gloss 3x1.png differ diff --git a/Themes/default/Graphics/Banner all music.png b/Themes/default/Graphics/Banner all music.png index 8acc31db6e..8e49185765 100644 Binary files a/Themes/default/Graphics/Banner all music.png and b/Themes/default/Graphics/Banner all music.png differ diff --git a/Themes/default/Graphics/Banner mode.png b/Themes/default/Graphics/Banner mode.png index 34320e4b14..5d9b9917c4 100644 Binary files a/Themes/default/Graphics/Banner mode.png and b/Themes/default/Graphics/Banner mode.png differ diff --git a/Themes/default/Graphics/Banner random.png b/Themes/default/Graphics/Banner random.png index b6d653902d..2a19b14c37 100644 Binary files a/Themes/default/Graphics/Banner random.png and b/Themes/default/Graphics/Banner random.png differ diff --git a/Themes/default/Graphics/Banner roulette.png b/Themes/default/Graphics/Banner roulette.png index 330f598295..aa6116cb21 100644 Binary files a/Themes/default/Graphics/Banner roulette.png and b/Themes/default/Graphics/Banner roulette.png differ diff --git a/Themes/default/Graphics/Combo 1000milestone/shot.png b/Themes/default/Graphics/Combo 1000milestone/shot.png index a8bc31656d..fbfbc3e3e2 100644 Binary files a/Themes/default/Graphics/Combo 1000milestone/shot.png and b/Themes/default/Graphics/Combo 1000milestone/shot.png differ diff --git a/Themes/default/Graphics/Combo 100milestone/explosion.png b/Themes/default/Graphics/Combo 100milestone/explosion.png index 3aac56aa4d..8364e4de51 100644 Binary files a/Themes/default/Graphics/Combo 100milestone/explosion.png and b/Themes/default/Graphics/Combo 100milestone/explosion.png differ diff --git a/Themes/default/Graphics/Common fallback background.png b/Themes/default/Graphics/Common fallback background.png index 8e96fb77af..335bd214fb 100644 Binary files a/Themes/default/Graphics/Common fallback background.png and b/Themes/default/Graphics/Common fallback background.png differ diff --git a/Themes/default/Graphics/Common fallback banner.png b/Themes/default/Graphics/Common fallback banner.png index 8f8d24bb6f..45098f5999 100644 Binary files a/Themes/default/Graphics/Common fallback banner.png and b/Themes/default/Graphics/Common fallback banner.png differ diff --git a/Themes/default/Graphics/Common window icon.png b/Themes/default/Graphics/Common window icon.png index 9e88998360..23750444ac 100644 Binary files a/Themes/default/Graphics/Common window icon.png and b/Themes/default/Graphics/Common window icon.png differ diff --git a/Themes/default/Graphics/CourseEntryDisplay bar.png b/Themes/default/Graphics/CourseEntryDisplay bar.png index 3772927033..af0e0f7a8b 100644 Binary files a/Themes/default/Graphics/CourseEntryDisplay bar.png and b/Themes/default/Graphics/CourseEntryDisplay bar.png differ diff --git a/Themes/default/Graphics/EditMenu Left 1x8.png b/Themes/default/Graphics/EditMenu Left 1x8.png index 4220e03c15..453489ad58 100644 Binary files a/Themes/default/Graphics/EditMenu Left 1x8.png and b/Themes/default/Graphics/EditMenu Left 1x8.png differ diff --git a/Themes/default/Graphics/GradeDisplayEval Failed.png b/Themes/default/Graphics/GradeDisplayEval Failed.png index 5039f694ba..b97031ef0f 100644 Binary files a/Themes/default/Graphics/GradeDisplayEval Failed.png and b/Themes/default/Graphics/GradeDisplayEval Failed.png differ diff --git a/Themes/default/Graphics/GradeDisplayEval Tier01.png b/Themes/default/Graphics/GradeDisplayEval Tier01.png index 261bf219bc..eda3f2a778 100644 Binary files a/Themes/default/Graphics/GradeDisplayEval Tier01.png and b/Themes/default/Graphics/GradeDisplayEval Tier01.png differ diff --git a/Themes/default/Graphics/GradeDisplayEval Tier02.png b/Themes/default/Graphics/GradeDisplayEval Tier02.png index 6fd46208b6..af203c8dd7 100644 Binary files a/Themes/default/Graphics/GradeDisplayEval Tier02.png and b/Themes/default/Graphics/GradeDisplayEval Tier02.png differ diff --git a/Themes/default/Graphics/GradeDisplayEval Tier03.png b/Themes/default/Graphics/GradeDisplayEval Tier03.png index a6f0c198d3..89671959f7 100644 Binary files a/Themes/default/Graphics/GradeDisplayEval Tier03.png and b/Themes/default/Graphics/GradeDisplayEval Tier03.png differ diff --git a/Themes/default/Graphics/GradeDisplayEval Tier04.png b/Themes/default/Graphics/GradeDisplayEval Tier04.png index de67b3f75e..addf5d6b53 100644 Binary files a/Themes/default/Graphics/GradeDisplayEval Tier04.png and b/Themes/default/Graphics/GradeDisplayEval Tier04.png differ diff --git a/Themes/default/Graphics/GradeDisplayEval Tier05.png b/Themes/default/Graphics/GradeDisplayEval Tier05.png index 41f93409eb..d24567f53e 100644 Binary files a/Themes/default/Graphics/GradeDisplayEval Tier05.png and b/Themes/default/Graphics/GradeDisplayEval Tier05.png differ diff --git a/Themes/default/Graphics/GradeDisplayEval Tier06.png b/Themes/default/Graphics/GradeDisplayEval Tier06.png index fd6ea5e6bf..ffb61f8988 100644 Binary files a/Themes/default/Graphics/GradeDisplayEval Tier06.png and b/Themes/default/Graphics/GradeDisplayEval Tier06.png differ diff --git a/Themes/default/Graphics/GradeDisplayEval Tier07.png b/Themes/default/Graphics/GradeDisplayEval Tier07.png index deca391659..c79802aee6 100644 Binary files a/Themes/default/Graphics/GradeDisplayEval Tier07.png and b/Themes/default/Graphics/GradeDisplayEval Tier07.png differ diff --git a/Themes/default/Graphics/GraphDisplay backing.png b/Themes/default/Graphics/GraphDisplay backing.png index adeeb209bc..fc9c3f64ad 100644 Binary files a/Themes/default/Graphics/GraphDisplay backing.png and b/Themes/default/Graphics/GraphDisplay backing.png differ diff --git a/Themes/default/Graphics/HoldJudgment label 1x2.png b/Themes/default/Graphics/HoldJudgment label 1x2.png index 94dd858951..5cb4d2b32a 100644 Binary files a/Themes/default/Graphics/HoldJudgment label 1x2.png and b/Themes/default/Graphics/HoldJudgment label 1x2.png differ diff --git a/Themes/default/Graphics/Judgment Normal 1x6.png b/Themes/default/Graphics/Judgment Normal 1x6.png index 697a28e8ed..5579c3f196 100644 Binary files a/Themes/default/Graphics/Judgment Normal 1x6.png and b/Themes/default/Graphics/Judgment Normal 1x6.png differ diff --git a/Themes/default/Graphics/LifeMeterBar over.png b/Themes/default/Graphics/LifeMeterBar over.png index 4e74cb571c..09dbaf6dde 100644 Binary files a/Themes/default/Graphics/LifeMeterBar over.png and b/Themes/default/Graphics/LifeMeterBar over.png differ diff --git a/Themes/default/Graphics/LifeMeterBar under.png b/Themes/default/Graphics/LifeMeterBar under.png index 00d2fb5e25..e54c55f801 100644 Binary files a/Themes/default/Graphics/LifeMeterBar under.png and b/Themes/default/Graphics/LifeMeterBar under.png differ diff --git a/Themes/default/Graphics/LifeMeterBattery frame.png b/Themes/default/Graphics/LifeMeterBattery frame.png index 4459d2922f..a91ea54d81 100644 Binary files a/Themes/default/Graphics/LifeMeterBattery frame.png and b/Themes/default/Graphics/LifeMeterBattery frame.png differ diff --git a/Themes/default/Graphics/LifeMeterBattery lives 1x4.png b/Themes/default/Graphics/LifeMeterBattery lives 1x4.png index 3fe80d83ce..87a32d19d2 100644 Binary files a/Themes/default/Graphics/LifeMeterBattery lives 1x4.png and b/Themes/default/Graphics/LifeMeterBattery lives 1x4.png differ diff --git a/Themes/default/Graphics/MenuTimer frame.png b/Themes/default/Graphics/MenuTimer frame.png index 22ce2299ff..4f43cb607e 100644 Binary files a/Themes/default/Graphics/MenuTimer frame.png and b/Themes/default/Graphics/MenuTimer frame.png differ diff --git a/Themes/default/Graphics/MusicWheel highlight.png b/Themes/default/Graphics/MusicWheel highlight.png index 0042bbe932..9431e18766 100644 Binary files a/Themes/default/Graphics/MusicWheel highlight.png and b/Themes/default/Graphics/MusicWheel highlight.png differ diff --git a/Themes/default/Graphics/MusicWheelItem Course ColorPart.png b/Themes/default/Graphics/MusicWheelItem Course ColorPart.png index 0d8a36946f..5bf8af903a 100644 Binary files a/Themes/default/Graphics/MusicWheelItem Course ColorPart.png and b/Themes/default/Graphics/MusicWheelItem Course ColorPart.png differ diff --git a/Themes/default/Graphics/MusicWheelItem Course NormalPart.png b/Themes/default/Graphics/MusicWheelItem Course NormalPart.png index 0287fc2e23..0182e96397 100644 Binary files a/Themes/default/Graphics/MusicWheelItem Course NormalPart.png and b/Themes/default/Graphics/MusicWheelItem Course NormalPart.png differ diff --git a/Themes/default/Graphics/MusicWheelItem Mode ColorPart.png b/Themes/default/Graphics/MusicWheelItem Mode ColorPart.png index dbc8372b68..0c805538e0 100644 Binary files a/Themes/default/Graphics/MusicWheelItem Mode ColorPart.png and b/Themes/default/Graphics/MusicWheelItem Mode ColorPart.png differ diff --git a/Themes/default/Graphics/MusicWheelItem Mode NormalPart.png b/Themes/default/Graphics/MusicWheelItem Mode NormalPart.png index 6b047bd086..ccd464cff1 100644 Binary files a/Themes/default/Graphics/MusicWheelItem Mode NormalPart.png and b/Themes/default/Graphics/MusicWheelItem Mode NormalPart.png differ diff --git a/Themes/default/Graphics/MusicWheelItem SectionCollapsed ColorPart.png b/Themes/default/Graphics/MusicWheelItem SectionCollapsed ColorPart.png index 0053486149..d658fa9aaf 100644 Binary files a/Themes/default/Graphics/MusicWheelItem SectionCollapsed ColorPart.png and b/Themes/default/Graphics/MusicWheelItem SectionCollapsed ColorPart.png differ diff --git a/Themes/default/Graphics/MusicWheelItem SectionCollapsed NormalPart.png b/Themes/default/Graphics/MusicWheelItem SectionCollapsed NormalPart.png index 2a919b9529..ea6876b5d9 100644 Binary files a/Themes/default/Graphics/MusicWheelItem SectionCollapsed NormalPart.png and b/Themes/default/Graphics/MusicWheelItem SectionCollapsed NormalPart.png differ diff --git a/Themes/default/Graphics/MusicWheelItem SectionExpanded ColorPart.png b/Themes/default/Graphics/MusicWheelItem SectionExpanded ColorPart.png index c87ea911fe..a8d5dd9212 100644 Binary files a/Themes/default/Graphics/MusicWheelItem SectionExpanded ColorPart.png and b/Themes/default/Graphics/MusicWheelItem SectionExpanded ColorPart.png differ diff --git a/Themes/default/Graphics/MusicWheelItem Song ColorPart.png b/Themes/default/Graphics/MusicWheelItem Song ColorPart.png index 25b546b519..5a196c15e4 100644 Binary files a/Themes/default/Graphics/MusicWheelItem Song ColorPart.png and b/Themes/default/Graphics/MusicWheelItem Song ColorPart.png differ diff --git a/Themes/default/Graphics/MusicWheelItem Song NormalPart.png b/Themes/default/Graphics/MusicWheelItem Song NormalPart.png index 997f2b0a84..b41801c162 100644 Binary files a/Themes/default/Graphics/MusicWheelItem Song NormalPart.png and b/Themes/default/Graphics/MusicWheelItem Song NormalPart.png differ diff --git a/Themes/default/Graphics/NoteField board.png b/Themes/default/Graphics/NoteField board.png index 62fd82c09f..dc75b2a2d2 100644 Binary files a/Themes/default/Graphics/NoteField board.png and b/Themes/default/Graphics/NoteField board.png differ diff --git a/Themes/default/Graphics/OptionRowExit frame.png b/Themes/default/Graphics/OptionRowExit frame.png index 809ce7e8f7..0e04d83a89 100644 Binary files a/Themes/default/Graphics/OptionRowExit frame.png and b/Themes/default/Graphics/OptionRowExit frame.png differ diff --git a/Themes/default/Graphics/OptionsCursorP1 Left (doubleres).png b/Themes/default/Graphics/OptionsCursorP1 Left (doubleres).png index cfb7235278..f310cb4096 100644 Binary files a/Themes/default/Graphics/OptionsCursorP1 Left (doubleres).png and b/Themes/default/Graphics/OptionsCursorP1 Left (doubleres).png differ diff --git a/Themes/default/Graphics/OptionsCursorP1 Middle (doubleres).png b/Themes/default/Graphics/OptionsCursorP1 Middle (doubleres).png index 7efac56b0f..ac200ad648 100644 Binary files a/Themes/default/Graphics/OptionsCursorP1 Middle (doubleres).png and b/Themes/default/Graphics/OptionsCursorP1 Middle (doubleres).png differ diff --git a/Themes/default/Graphics/OptionsCursorP1 Right (doubleres).png b/Themes/default/Graphics/OptionsCursorP1 Right (doubleres).png index 7bcc5a9f11..2e44ceb6e9 100644 Binary files a/Themes/default/Graphics/OptionsCursorP1 Right (doubleres).png and b/Themes/default/Graphics/OptionsCursorP1 Right (doubleres).png differ diff --git a/Themes/default/Graphics/OptionsUnderlineP1 Left (doubleres).png b/Themes/default/Graphics/OptionsUnderlineP1 Left (doubleres).png index 582428b9d7..514db2e8ca 100644 Binary files a/Themes/default/Graphics/OptionsUnderlineP1 Left (doubleres).png and b/Themes/default/Graphics/OptionsUnderlineP1 Left (doubleres).png differ diff --git a/Themes/default/Graphics/OptionsUnderlineP1 Middle (doubleres).png b/Themes/default/Graphics/OptionsUnderlineP1 Middle (doubleres).png index 9df8df47d3..70ac652bd2 100644 Binary files a/Themes/default/Graphics/OptionsUnderlineP1 Middle (doubleres).png and b/Themes/default/Graphics/OptionsUnderlineP1 Middle (doubleres).png differ diff --git a/Themes/default/Graphics/OptionsUnderlineP1 Right (doubleres).png b/Themes/default/Graphics/OptionsUnderlineP1 Right (doubleres).png index 10c9c93113..07cace80d0 100644 Binary files a/Themes/default/Graphics/OptionsUnderlineP1 Right (doubleres).png and b/Themes/default/Graphics/OptionsUnderlineP1 Right (doubleres).png differ diff --git a/Themes/default/Graphics/Player combo/_combo.png b/Themes/default/Graphics/Player combo/_combo.png index 650bf41ffe..9d2db54061 100644 Binary files a/Themes/default/Graphics/Player combo/_combo.png and b/Themes/default/Graphics/Player combo/_combo.png differ diff --git a/Themes/default/Graphics/Player combo/_misses.png b/Themes/default/Graphics/Player combo/_misses.png index 2d34d2f615..6011258193 100644 Binary files a/Themes/default/Graphics/Player combo/_misses.png and b/Themes/default/Graphics/Player combo/_misses.png differ diff --git a/Themes/default/Graphics/ScoreDisplayRave stream level1 (res 256x20).png b/Themes/default/Graphics/ScoreDisplayRave stream level1 (res 256x20).png index d29741c9ec..e5a9418357 100644 Binary files a/Themes/default/Graphics/ScoreDisplayRave stream level1 (res 256x20).png and b/Themes/default/Graphics/ScoreDisplayRave stream level1 (res 256x20).png differ diff --git a/Themes/default/Graphics/ScoreDisplayRave stream level2 (res 256x20).png b/Themes/default/Graphics/ScoreDisplayRave stream level2 (res 256x20).png index dc89c20be9..199e406605 100644 Binary files a/Themes/default/Graphics/ScoreDisplayRave stream level2 (res 256x20).png and b/Themes/default/Graphics/ScoreDisplayRave stream level2 (res 256x20).png differ diff --git a/Themes/default/Graphics/ScoreDisplayRave stream level3 (res 256x20).png b/Themes/default/Graphics/ScoreDisplayRave stream level3 (res 256x20).png index 68f70a0159..41138c9a2f 100644 Binary files a/Themes/default/Graphics/ScoreDisplayRave stream level3 (res 256x20).png and b/Themes/default/Graphics/ScoreDisplayRave stream level3 (res 256x20).png differ diff --git a/Themes/default/Graphics/ScreenGameplay ScoreFrame.png b/Themes/default/Graphics/ScreenGameplay ScoreFrame.png index 64bd20f0cb..e6d45b3eee 100644 Binary files a/Themes/default/Graphics/ScreenGameplay ScoreFrame.png and b/Themes/default/Graphics/ScreenGameplay ScoreFrame.png differ diff --git a/Themes/default/Graphics/ScreenOptions line highlight.png b/Themes/default/Graphics/ScreenOptions line highlight.png index 5fa65a5094..80a3a0048f 100644 Binary files a/Themes/default/Graphics/ScreenOptions line highlight.png and b/Themes/default/Graphics/ScreenOptions line highlight.png differ diff --git a/Themes/default/Graphics/ScreenOptions page.png b/Themes/default/Graphics/ScreenOptions page.png index dc4953b361..b444ea82d7 100644 Binary files a/Themes/default/Graphics/ScreenOptions page.png and b/Themes/default/Graphics/ScreenOptions page.png differ diff --git a/Themes/default/Graphics/ScreenQuickSetupOverview icon/_base.png b/Themes/default/Graphics/ScreenQuickSetupOverview icon/_base.png index 2663a10bf6..eae80d4289 100644 Binary files a/Themes/default/Graphics/ScreenQuickSetupOverview icon/_base.png and b/Themes/default/Graphics/ScreenQuickSetupOverview icon/_base.png differ diff --git a/Themes/default/Graphics/ScreenRanking type dance-double.png b/Themes/default/Graphics/ScreenRanking type dance-double.png index 761b877060..f669ee2223 100644 Binary files a/Themes/default/Graphics/ScreenRanking type dance-double.png and b/Themes/default/Graphics/ScreenRanking type dance-double.png differ diff --git a/Themes/default/Graphics/ScreenRanking type dance-single.png b/Themes/default/Graphics/ScreenRanking type dance-single.png index 18479df93a..c2083d88ab 100644 Binary files a/Themes/default/Graphics/ScreenRanking type dance-single.png and b/Themes/default/Graphics/ScreenRanking type dance-single.png differ diff --git a/Themes/default/Graphics/ScreenSelectMusic BannerFrame.png b/Themes/default/Graphics/ScreenSelectMusic BannerFrame.png index ff2f650272..b7adfee618 100644 Binary files a/Themes/default/Graphics/ScreenSelectMusic BannerFrame.png and b/Themes/default/Graphics/ScreenSelectMusic BannerFrame.png differ diff --git a/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_background.png b/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_background.png index 857eba4834..1f70d00267 100644 Binary files a/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_background.png and b/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_background.png differ diff --git a/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Beginner.png b/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Beginner.png index f8a4ae21ff..1a527877c6 100644 Binary files a/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Beginner.png and b/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Beginner.png differ diff --git a/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Challenge.png b/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Challenge.png index c886a81e5d..10de18d296 100644 Binary files a/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Challenge.png and b/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Challenge.png differ diff --git a/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Easy.png b/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Easy.png index c971e4a931..d029aa927a 100644 Binary files a/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Easy.png and b/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Easy.png differ diff --git a/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Edit.png b/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Edit.png index 88a6ad8071..87125989ea 100644 Binary files a/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Edit.png and b/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Edit.png differ diff --git a/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Hard.png b/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Hard.png index 0669646de6..b72deec656 100644 Binary files a/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Hard.png and b/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Hard.png differ diff --git a/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Medium.png b/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Medium.png index f6c242b8c0..1f399e3fe6 100644 Binary files a/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Medium.png and b/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/_barpeice Medium.png differ diff --git a/Themes/default/Graphics/ScreenSelectMusic PaneDisplayFrame.png b/Themes/default/Graphics/ScreenSelectMusic PaneDisplayFrame.png index e2e7f90497..f9dcfaa1b7 100644 Binary files a/Themes/default/Graphics/ScreenSelectMusic PaneDisplayFrame.png and b/Themes/default/Graphics/ScreenSelectMusic PaneDisplayFrame.png differ diff --git a/Themes/default/Graphics/ScreenSelectPlayMode BackgroundFrame.png b/Themes/default/Graphics/ScreenSelectPlayMode BackgroundFrame.png index 8f70e20e2d..8d139482dc 100644 Binary files a/Themes/default/Graphics/ScreenSelectPlayMode BackgroundFrame.png and b/Themes/default/Graphics/ScreenSelectPlayMode BackgroundFrame.png differ diff --git a/Themes/default/Graphics/ScreenSelectPlayMode Icon/_background effect.png b/Themes/default/Graphics/ScreenSelectPlayMode Icon/_background effect.png index b9f0d4ef07..b609b5139e 100644 Binary files a/Themes/default/Graphics/ScreenSelectPlayMode Icon/_background effect.png and b/Themes/default/Graphics/ScreenSelectPlayMode Icon/_background effect.png differ diff --git a/Themes/default/Graphics/ScreenSelectPlayMode Icon/_cutout.png b/Themes/default/Graphics/ScreenSelectPlayMode Icon/_cutout.png index 3038574c5c..881914a0a6 100644 Binary files a/Themes/default/Graphics/ScreenSelectPlayMode Icon/_cutout.png and b/Themes/default/Graphics/ScreenSelectPlayMode Icon/_cutout.png differ diff --git a/Themes/default/Graphics/ScreenSelectPlayMode scroller/Easy.png b/Themes/default/Graphics/ScreenSelectPlayMode scroller/Easy.png index 1561546bc3..b035216608 100644 Binary files a/Themes/default/Graphics/ScreenSelectPlayMode scroller/Easy.png and b/Themes/default/Graphics/ScreenSelectPlayMode scroller/Easy.png differ diff --git a/Themes/default/Graphics/ScreenSelectPlayMode scroller/Endless.png b/Themes/default/Graphics/ScreenSelectPlayMode scroller/Endless.png index 0743275df1..66e04b64ab 100644 Binary files a/Themes/default/Graphics/ScreenSelectPlayMode scroller/Endless.png and b/Themes/default/Graphics/ScreenSelectPlayMode scroller/Endless.png differ diff --git a/Themes/default/Graphics/ScreenSelectPlayMode scroller/Extended.png b/Themes/default/Graphics/ScreenSelectPlayMode scroller/Extended.png index 3fc1a75285..bc423e4594 100644 Binary files a/Themes/default/Graphics/ScreenSelectPlayMode scroller/Extended.png and b/Themes/default/Graphics/ScreenSelectPlayMode scroller/Extended.png differ diff --git a/Themes/default/Graphics/ScreenSelectPlayMode scroller/Hard.png b/Themes/default/Graphics/ScreenSelectPlayMode scroller/Hard.png index 69e052a3fb..85c48ca74f 100644 Binary files a/Themes/default/Graphics/ScreenSelectPlayMode scroller/Hard.png and b/Themes/default/Graphics/ScreenSelectPlayMode scroller/Hard.png differ diff --git a/Themes/default/Graphics/ScreenSelectPlayMode scroller/Normal.png b/Themes/default/Graphics/ScreenSelectPlayMode scroller/Normal.png index 38808fce82..49ca3980cc 100644 Binary files a/Themes/default/Graphics/ScreenSelectPlayMode scroller/Normal.png and b/Themes/default/Graphics/ScreenSelectPlayMode scroller/Normal.png differ diff --git a/Themes/default/Graphics/ScreenSelectPlayMode scroller/Oni.png b/Themes/default/Graphics/ScreenSelectPlayMode scroller/Oni.png index 1569820b6a..dac5c90943 100644 Binary files a/Themes/default/Graphics/ScreenSelectPlayMode scroller/Oni.png and b/Themes/default/Graphics/ScreenSelectPlayMode scroller/Oni.png differ diff --git a/Themes/default/Graphics/ScreenSelectPlayMode scroller/Rave.png b/Themes/default/Graphics/ScreenSelectPlayMode scroller/Rave.png new file mode 100644 index 0000000000..d4c361f406 Binary files /dev/null and b/Themes/default/Graphics/ScreenSelectPlayMode scroller/Rave.png differ diff --git a/Themes/default/Graphics/ScreenSelectPlayMode scroller/Rave.redir b/Themes/default/Graphics/ScreenSelectPlayMode scroller/Rave.redir deleted file mode 100644 index 3310ed756e..0000000000 --- a/Themes/default/Graphics/ScreenSelectPlayMode scroller/Rave.redir +++ /dev/null @@ -1 +0,0 @@ -Normal \ No newline at end of file diff --git a/Themes/default/Graphics/ScreenSelectPlayMode scroller/_HighlightFrame.png b/Themes/default/Graphics/ScreenSelectPlayMode scroller/_HighlightFrame.png index 89738af6e8..938fc07abd 100644 Binary files a/Themes/default/Graphics/ScreenSelectPlayMode scroller/_HighlightFrame.png and b/Themes/default/Graphics/ScreenSelectPlayMode scroller/_HighlightFrame.png differ diff --git a/Themes/default/Graphics/ScreenSelectProfile CardBackground.png b/Themes/default/Graphics/ScreenSelectProfile CardBackground.png index 046958618d..f19427e45f 100644 Binary files a/Themes/default/Graphics/ScreenSelectProfile CardBackground.png and b/Themes/default/Graphics/ScreenSelectProfile CardBackground.png differ diff --git a/Themes/default/Graphics/ScreenSelectProfile CardFrame.png b/Themes/default/Graphics/ScreenSelectProfile CardFrame.png index d35a931168..930e959214 100644 Binary files a/Themes/default/Graphics/ScreenSelectProfile CardFrame.png and b/Themes/default/Graphics/ScreenSelectProfile CardFrame.png differ diff --git a/Themes/default/Graphics/ScreenStageInformation stage 1st.png b/Themes/default/Graphics/ScreenStageInformation stage 1st.png index c2fa86c9e9..fa61a920a3 100644 Binary files a/Themes/default/Graphics/ScreenStageInformation stage 1st.png and b/Themes/default/Graphics/ScreenStageInformation stage 1st.png differ diff --git a/Themes/default/Graphics/ScreenStageInformation stage 2nd.png b/Themes/default/Graphics/ScreenStageInformation stage 2nd.png index 71089afde6..c5e7f7b7f7 100644 Binary files a/Themes/default/Graphics/ScreenStageInformation stage 2nd.png and b/Themes/default/Graphics/ScreenStageInformation stage 2nd.png differ diff --git a/Themes/default/Graphics/ScreenStageInformation stage 3rd.png b/Themes/default/Graphics/ScreenStageInformation stage 3rd.png index 1127863cdb..e811600f0f 100644 Binary files a/Themes/default/Graphics/ScreenStageInformation stage 3rd.png and b/Themes/default/Graphics/ScreenStageInformation stage 3rd.png differ diff --git a/Themes/default/Graphics/ScreenStageInformation stage 4th.png b/Themes/default/Graphics/ScreenStageInformation stage 4th.png index 13129ebadf..058bd81726 100644 Binary files a/Themes/default/Graphics/ScreenStageInformation stage 4th.png and b/Themes/default/Graphics/ScreenStageInformation stage 4th.png differ diff --git a/Themes/default/Graphics/ScreenStageInformation stage 5th.png b/Themes/default/Graphics/ScreenStageInformation stage 5th.png index 910c98c77b..9055624c6c 100644 Binary files a/Themes/default/Graphics/ScreenStageInformation stage 5th.png and b/Themes/default/Graphics/ScreenStageInformation stage 5th.png differ diff --git a/Themes/default/Graphics/ScreenStageInformation stage 6th.png b/Themes/default/Graphics/ScreenStageInformation stage 6th.png index bb0a7eddd6..66f44def11 100644 Binary files a/Themes/default/Graphics/ScreenStageInformation stage 6th.png and b/Themes/default/Graphics/ScreenStageInformation stage 6th.png differ diff --git a/Themes/default/Graphics/ScreenStageInformation stage endless.png b/Themes/default/Graphics/ScreenStageInformation stage endless.png index 9d4f03d5d6..874013dacf 100644 Binary files a/Themes/default/Graphics/ScreenStageInformation stage endless.png and b/Themes/default/Graphics/ScreenStageInformation stage endless.png differ diff --git a/Themes/default/Graphics/ScreenStageInformation stage event.png b/Themes/default/Graphics/ScreenStageInformation stage event.png index 73a7808132..8b7df78ab9 100644 Binary files a/Themes/default/Graphics/ScreenStageInformation stage event.png and b/Themes/default/Graphics/ScreenStageInformation stage event.png differ diff --git a/Themes/default/Graphics/ScreenStageInformation stage extra1.png b/Themes/default/Graphics/ScreenStageInformation stage extra1.png index f31cacb78c..55f7b4936d 100644 Binary files a/Themes/default/Graphics/ScreenStageInformation stage extra1.png and b/Themes/default/Graphics/ScreenStageInformation stage extra1.png differ diff --git a/Themes/default/Graphics/ScreenStageInformation stage extra2.png b/Themes/default/Graphics/ScreenStageInformation stage extra2.png index 01d1d6bd6b..a25c12e229 100644 Binary files a/Themes/default/Graphics/ScreenStageInformation stage extra2.png and b/Themes/default/Graphics/ScreenStageInformation stage extra2.png differ diff --git a/Themes/default/Graphics/ScreenStageInformation stage final.png b/Themes/default/Graphics/ScreenStageInformation stage final.png index 62f0e1b3b7..2caa88eed2 100644 Binary files a/Themes/default/Graphics/ScreenStageInformation stage final.png and b/Themes/default/Graphics/ScreenStageInformation stage final.png differ diff --git a/Themes/default/Graphics/ScreenStageInformation stage nonstop.png b/Themes/default/Graphics/ScreenStageInformation stage nonstop.png index 316efa8cdf..53f97a8004 100644 Binary files a/Themes/default/Graphics/ScreenStageInformation stage nonstop.png and b/Themes/default/Graphics/ScreenStageInformation stage nonstop.png differ diff --git a/Themes/default/Graphics/ScreenStageInformation stage oni.png b/Themes/default/Graphics/ScreenStageInformation stage oni.png index dd897525e1..5ff9758f46 100644 Binary files a/Themes/default/Graphics/ScreenStageInformation stage oni.png and b/Themes/default/Graphics/ScreenStageInformation stage oni.png differ diff --git a/Themes/default/Graphics/ScreenTitleMenu PreferenceFrame.png b/Themes/default/Graphics/ScreenTitleMenu PreferenceFrame.png index 809ce7e8f7..0e04d83a89 100644 Binary files a/Themes/default/Graphics/ScreenTitleMenu PreferenceFrame.png and b/Themes/default/Graphics/ScreenTitleMenu PreferenceFrame.png differ diff --git a/Themes/default/Graphics/ScreenTitleMenu logo/_ball.png b/Themes/default/Graphics/ScreenTitleMenu logo/_ball.png index 2f7d1093a7..1f00664b2e 100644 Binary files a/Themes/default/Graphics/ScreenTitleMenu logo/_ball.png and b/Themes/default/Graphics/ScreenTitleMenu logo/_ball.png differ diff --git a/Themes/default/Graphics/ScreenTitleMenu logo/_multi.png b/Themes/default/Graphics/ScreenTitleMenu logo/_multi.png index 9603860c23..35a26da8e2 100644 Binary files a/Themes/default/Graphics/ScreenTitleMenu logo/_multi.png and b/Themes/default/Graphics/ScreenTitleMenu logo/_multi.png differ diff --git a/Themes/default/Graphics/ScreenTitleMenu logo/_text.png b/Themes/default/Graphics/ScreenTitleMenu logo/_text.png index 6e0aae466c..e5af33ba36 100644 Binary files a/Themes/default/Graphics/ScreenTitleMenu logo/_text.png and b/Themes/default/Graphics/ScreenTitleMenu logo/_text.png differ diff --git a/Themes/default/Graphics/ScreenWithMenuElements footer.png b/Themes/default/Graphics/ScreenWithMenuElements footer.png index ffecbe2f4c..55238f3fa1 100644 Binary files a/Themes/default/Graphics/ScreenWithMenuElements footer.png and b/Themes/default/Graphics/ScreenWithMenuElements footer.png differ diff --git a/Themes/default/Graphics/ScreenWithMenuElements header/Header.png b/Themes/default/Graphics/ScreenWithMenuElements header/Header.png index e9f24cab2a..c975a6d582 100644 Binary files a/Themes/default/Graphics/ScreenWithMenuElements header/Header.png and b/Themes/default/Graphics/ScreenWithMenuElements header/Header.png differ diff --git a/Themes/default/Graphics/ScreenWithMenuElements header/_texture stripe (stretch).png b/Themes/default/Graphics/ScreenWithMenuElements header/_texture stripe (stretch).png index 09bb35b779..e8d357f12f 100644 Binary files a/Themes/default/Graphics/ScreenWithMenuElements header/_texture stripe (stretch).png and b/Themes/default/Graphics/ScreenWithMenuElements header/_texture stripe (stretch).png differ diff --git a/Themes/default/Graphics/ScreenWithMenuElements header/old _texture stripe.png b/Themes/default/Graphics/ScreenWithMenuElements header/old _texture stripe.png index 2608aefe5a..0163348817 100644 Binary files a/Themes/default/Graphics/ScreenWithMenuElements header/old _texture stripe.png and b/Themes/default/Graphics/ScreenWithMenuElements header/old _texture stripe.png differ diff --git a/Themes/default/Graphics/SongMeterDisplay frame p1.png b/Themes/default/Graphics/SongMeterDisplay frame p1.png index 1660b3903f..e38abbd715 100644 Binary files a/Themes/default/Graphics/SongMeterDisplay frame p1.png and b/Themes/default/Graphics/SongMeterDisplay frame p1.png differ diff --git a/Themes/default/Graphics/SongMeterDisplay stream p1.png b/Themes/default/Graphics/SongMeterDisplay stream p1.png index 01c672e23d..7bdbf44e7a 100644 Binary files a/Themes/default/Graphics/SongMeterDisplay stream p1.png and b/Themes/default/Graphics/SongMeterDisplay stream p1.png differ diff --git a/Themes/default/Graphics/SongMeterDisplay tip p1.png b/Themes/default/Graphics/SongMeterDisplay tip p1.png index a79426846d..5c9c83efcb 100644 Binary files a/Themes/default/Graphics/SongMeterDisplay tip p1.png and b/Themes/default/Graphics/SongMeterDisplay tip p1.png differ diff --git a/Themes/default/Graphics/StepsDisplay frame.png b/Themes/default/Graphics/StepsDisplay frame.png index dab2f1eb2b..e23414b6ae 100644 Binary files a/Themes/default/Graphics/StepsDisplay frame.png and b/Themes/default/Graphics/StepsDisplay frame.png differ diff --git a/Themes/default/Graphics/StepsDisplayGameplay frame.png b/Themes/default/Graphics/StepsDisplayGameplay frame.png index ed4790bd70..f171ab5d10 100644 Binary files a/Themes/default/Graphics/StepsDisplayGameplay frame.png and b/Themes/default/Graphics/StepsDisplayGameplay frame.png differ diff --git a/Themes/default/Graphics/StepsDisplayListRow autogen.png b/Themes/default/Graphics/StepsDisplayListRow autogen.png index a24ad06ffd..cb2073ec7e 100644 Binary files a/Themes/default/Graphics/StepsDisplayListRow autogen.png and b/Themes/default/Graphics/StepsDisplayListRow autogen.png differ diff --git a/Themes/default/Graphics/StepsDisplayListRow frame.png b/Themes/default/Graphics/StepsDisplayListRow frame.png index 3f4eb2f700..3a02abfd2d 100644 Binary files a/Themes/default/Graphics/StepsDisplayListRow frame.png and b/Themes/default/Graphics/StepsDisplayListRow frame.png differ diff --git a/Themes/default/Graphics/StreamDisplay hot.png b/Themes/default/Graphics/StreamDisplay hot.png index 1ad5463687..447c2342dc 100644 Binary files a/Themes/default/Graphics/StreamDisplay hot.png and b/Themes/default/Graphics/StreamDisplay hot.png differ diff --git a/Themes/default/Graphics/StreamDisplay normal.png b/Themes/default/Graphics/StreamDisplay normal.png index d82b937d37..a697856e3f 100644 Binary files a/Themes/default/Graphics/StreamDisplay normal.png and b/Themes/default/Graphics/StreamDisplay normal.png differ diff --git a/Themes/default/Graphics/TestStep.png b/Themes/default/Graphics/TestStep.png index f6e09e8a91..88a1e3a372 100644 Binary files a/Themes/default/Graphics/TestStep.png and b/Themes/default/Graphics/TestStep.png differ diff --git a/Themes/default/Graphics/WheelNotifyIcon icons 4x2 (doubleres).png b/Themes/default/Graphics/WheelNotifyIcon icons 4x2 (doubleres).png index 928fd8f0aa..d743c7abb6 100644 Binary files a/Themes/default/Graphics/WheelNotifyIcon icons 4x2 (doubleres).png and b/Themes/default/Graphics/WheelNotifyIcon icons 4x2 (doubleres).png differ diff --git a/Themes/default/Graphics/_CombinedLifeMeterTug separator.png b/Themes/default/Graphics/_CombinedLifeMeterTug separator.png index 9b90f459be..4c62fd6b1e 100644 Binary files a/Themes/default/Graphics/_CombinedLifeMeterTug separator.png and b/Themes/default/Graphics/_CombinedLifeMeterTug separator.png differ diff --git a/Themes/default/Graphics/_JudgmentLineLabel/_frame.png b/Themes/default/Graphics/_JudgmentLineLabel/_frame.png index 375c413bff..65cca663cc 100644 Binary files a/Themes/default/Graphics/_JudgmentLineLabel/_frame.png and b/Themes/default/Graphics/_JudgmentLineLabel/_frame.png differ diff --git a/Themes/default/Graphics/_MusicWheelItem Roulette NormalPart.png b/Themes/default/Graphics/_MusicWheelItem Roulette NormalPart.png index af9f62c790..99f25c6d5f 100644 Binary files a/Themes/default/Graphics/_MusicWheelItem Roulette NormalPart.png and b/Themes/default/Graphics/_MusicWheelItem Roulette NormalPart.png differ diff --git a/Themes/default/Graphics/_SelectIcon 10Keys.png b/Themes/default/Graphics/_SelectIcon 10Keys.png index 327d5bc08f..908caa184b 100644 Binary files a/Themes/default/Graphics/_SelectIcon 10Keys.png and b/Themes/default/Graphics/_SelectIcon 10Keys.png differ diff --git a/Themes/default/Graphics/_SelectIcon 14Keys.png b/Themes/default/Graphics/_SelectIcon 14Keys.png index 1348ccbd7a..e0612bc785 100644 Binary files a/Themes/default/Graphics/_SelectIcon 14Keys.png and b/Themes/default/Graphics/_SelectIcon 14Keys.png differ diff --git a/Themes/default/Graphics/_SelectIcon 5Keys.png b/Themes/default/Graphics/_SelectIcon 5Keys.png index 5619651c75..62ed62ecd9 100644 Binary files a/Themes/default/Graphics/_SelectIcon 5Keys.png and b/Themes/default/Graphics/_SelectIcon 5Keys.png differ diff --git a/Themes/default/Graphics/_SelectIcon 7Keys.png b/Themes/default/Graphics/_SelectIcon 7Keys.png index b32c8fa200..b4a56715d9 100644 Binary files a/Themes/default/Graphics/_SelectIcon 7Keys.png and b/Themes/default/Graphics/_SelectIcon 7Keys.png differ diff --git a/Themes/default/Graphics/_SelectIcon Couple.png b/Themes/default/Graphics/_SelectIcon Couple.png index f160b95541..1a26b05b14 100644 Binary files a/Themes/default/Graphics/_SelectIcon Couple.png and b/Themes/default/Graphics/_SelectIcon Couple.png differ diff --git a/Themes/default/Graphics/_SelectIcon Double.png b/Themes/default/Graphics/_SelectIcon Double.png index 9b4b3f2ad1..672b154c7f 100644 Binary files a/Themes/default/Graphics/_SelectIcon Double.png and b/Themes/default/Graphics/_SelectIcon Double.png differ diff --git a/Themes/default/Graphics/_SelectIcon Easy.png b/Themes/default/Graphics/_SelectIcon Easy.png index 58a2ea4a10..4de4868446 100644 Binary files a/Themes/default/Graphics/_SelectIcon Easy.png and b/Themes/default/Graphics/_SelectIcon Easy.png differ diff --git a/Themes/default/Graphics/_SelectIcon Endless.png b/Themes/default/Graphics/_SelectIcon Endless.png index b2da97399e..247916809a 100644 Binary files a/Themes/default/Graphics/_SelectIcon Endless.png and b/Themes/default/Graphics/_SelectIcon Endless.png differ diff --git a/Themes/default/Graphics/_SelectIcon Extended.png b/Themes/default/Graphics/_SelectIcon Extended.png index 9bd1b23343..0f8286d964 100644 Binary files a/Themes/default/Graphics/_SelectIcon Extended.png and b/Themes/default/Graphics/_SelectIcon Extended.png differ diff --git a/Themes/default/Graphics/_SelectIcon HalfDouble.png b/Themes/default/Graphics/_SelectIcon HalfDouble.png index d7d8711556..2d492f17ab 100644 Binary files a/Themes/default/Graphics/_SelectIcon HalfDouble.png and b/Themes/default/Graphics/_SelectIcon HalfDouble.png differ diff --git a/Themes/default/Graphics/_SelectIcon Hard.png b/Themes/default/Graphics/_SelectIcon Hard.png index dafc049aa6..be801b19a5 100644 Binary files a/Themes/default/Graphics/_SelectIcon Hard.png and b/Themes/default/Graphics/_SelectIcon Hard.png differ diff --git a/Themes/default/Graphics/_SelectIcon KB7.png b/Themes/default/Graphics/_SelectIcon KB7.png index 426ffee7fb..52f062eb2d 100644 Binary files a/Themes/default/Graphics/_SelectIcon KB7.png and b/Themes/default/Graphics/_SelectIcon KB7.png differ diff --git a/Themes/default/Graphics/_SelectIcon Normal.png b/Themes/default/Graphics/_SelectIcon Normal.png index 6f7734b492..71abe8c722 100644 Binary files a/Themes/default/Graphics/_SelectIcon Normal.png and b/Themes/default/Graphics/_SelectIcon Normal.png differ diff --git a/Themes/default/Graphics/_SelectIcon Oni.png b/Themes/default/Graphics/_SelectIcon Oni.png index 17b10f3c22..e33534fe57 100644 Binary files a/Themes/default/Graphics/_SelectIcon Oni.png and b/Themes/default/Graphics/_SelectIcon Oni.png differ diff --git a/Themes/default/Graphics/_SelectIcon Rave.png b/Themes/default/Graphics/_SelectIcon Rave.png index 8e00418335..5d5502cc5f 100644 Binary files a/Themes/default/Graphics/_SelectIcon Rave.png and b/Themes/default/Graphics/_SelectIcon Rave.png differ diff --git a/Themes/default/Graphics/_SelectIcon Single.png b/Themes/default/Graphics/_SelectIcon Single.png index c217b2946b..bbc8389d41 100644 Binary files a/Themes/default/Graphics/_SelectIcon Single.png and b/Themes/default/Graphics/_SelectIcon Single.png differ diff --git a/Themes/default/Graphics/_SelectIcon Solo.png b/Themes/default/Graphics/_SelectIcon Solo.png index 665f02d06f..0b121a7a8c 100644 Binary files a/Themes/default/Graphics/_SelectIcon Solo.png and b/Themes/default/Graphics/_SelectIcon Solo.png differ diff --git a/Themes/default/Graphics/_SelectIcon Survival.png b/Themes/default/Graphics/_SelectIcon Survival.png index f4d412da49..57ecae3a11 100644 Binary files a/Themes/default/Graphics/_SelectIcon Survival.png and b/Themes/default/Graphics/_SelectIcon Survival.png differ diff --git a/Themes/default/Graphics/_SelectIcon Versus.png b/Themes/default/Graphics/_SelectIcon Versus.png index d3bb611301..70ffab03f1 100644 Binary files a/Themes/default/Graphics/_SelectIcon Versus.png and b/Themes/default/Graphics/_SelectIcon Versus.png differ diff --git a/Themes/default/Graphics/_SelectIcon.png b/Themes/default/Graphics/_SelectIcon.png index 9973f7d67d..93332e9756 100644 Binary files a/Themes/default/Graphics/_SelectIcon.png and b/Themes/default/Graphics/_SelectIcon.png differ diff --git a/Themes/default/Graphics/_StepsDisplayListRow Cursor.png b/Themes/default/Graphics/_StepsDisplayListRow Cursor.png index f3e4c2033d..3cf3b78a37 100644 Binary files a/Themes/default/Graphics/_StepsDisplayListRow Cursor.png and b/Themes/default/Graphics/_StepsDisplayListRow Cursor.png differ diff --git a/Themes/default/Graphics/_StepsDisplayListRow arrow.png b/Themes/default/Graphics/_StepsDisplayListRow arrow.png index c384be08a5..4ccae23710 100644 Binary files a/Themes/default/Graphics/_StepsDisplayListRow arrow.png and b/Themes/default/Graphics/_StepsDisplayListRow arrow.png differ diff --git a/Themes/default/Graphics/_StepsType Icon dance-single.png b/Themes/default/Graphics/_StepsType Icon dance-single.png index 254526a3ae..3eee7ea478 100644 Binary files a/Themes/default/Graphics/_StepsType Icon dance-single.png and b/Themes/default/Graphics/_StepsType Icon dance-single.png differ diff --git a/Themes/default/Graphics/_StepsType/Dance_Double.png b/Themes/default/Graphics/_StepsType/Dance_Double.png index 826d78d195..06440ad36d 100644 Binary files a/Themes/default/Graphics/_StepsType/Dance_Double.png and b/Themes/default/Graphics/_StepsType/Dance_Double.png differ diff --git a/Themes/default/Graphics/_StepsType/Dance_Single.png b/Themes/default/Graphics/_StepsType/Dance_Single.png index c548376c7b..59cd7e5c4e 100644 Binary files a/Themes/default/Graphics/_StepsType/Dance_Single.png and b/Themes/default/Graphics/_StepsType/Dance_Single.png differ diff --git a/Themes/default/Graphics/_StepsType/Dance_Solo.png b/Themes/default/Graphics/_StepsType/Dance_Solo.png index 1aa776e3ac..17027fabc8 100644 Binary files a/Themes/default/Graphics/_StepsType/Dance_Solo.png and b/Themes/default/Graphics/_StepsType/Dance_Solo.png differ diff --git a/Themes/default/Graphics/_StepsType/Pump_Double.png b/Themes/default/Graphics/_StepsType/Pump_Double.png index 3239eeea25..4d60abdb89 100644 Binary files a/Themes/default/Graphics/_StepsType/Pump_Double.png and b/Themes/default/Graphics/_StepsType/Pump_Double.png differ diff --git a/Themes/default/Graphics/_StepsType/Pump_HalfDouble.png b/Themes/default/Graphics/_StepsType/Pump_HalfDouble.png index d6facf7182..1adc5e5ade 100644 Binary files a/Themes/default/Graphics/_StepsType/Pump_HalfDouble.png and b/Themes/default/Graphics/_StepsType/Pump_HalfDouble.png differ diff --git a/Themes/default/Graphics/_StepsType/Pump_Single.png b/Themes/default/Graphics/_StepsType/Pump_Single.png index 22e21b5127..f51a97cced 100644 Binary files a/Themes/default/Graphics/_StepsType/Pump_Single.png and b/Themes/default/Graphics/_StepsType/Pump_Single.png differ diff --git a/Themes/default/Graphics/_StepsType/Techno_Double4.png b/Themes/default/Graphics/_StepsType/Techno_Double4.png index 5b9490855e..02cf899f8f 100644 Binary files a/Themes/default/Graphics/_StepsType/Techno_Double4.png and b/Themes/default/Graphics/_StepsType/Techno_Double4.png differ diff --git a/Themes/default/Graphics/_StepsType/Techno_Double5.png b/Themes/default/Graphics/_StepsType/Techno_Double5.png index 7bbd8fc62c..55ecd8434c 100644 Binary files a/Themes/default/Graphics/_StepsType/Techno_Double5.png and b/Themes/default/Graphics/_StepsType/Techno_Double5.png differ diff --git a/Themes/default/Graphics/_StepsType/Techno_Single4.png b/Themes/default/Graphics/_StepsType/Techno_Single4.png index 692a4025bf..d163bb1c88 100644 Binary files a/Themes/default/Graphics/_StepsType/Techno_Single4.png and b/Themes/default/Graphics/_StepsType/Techno_Single4.png differ diff --git a/Themes/default/Graphics/_StepsType/Techno_Single5.png b/Themes/default/Graphics/_StepsType/Techno_Single5.png index 3ed007df17..bbf7f65280 100644 Binary files a/Themes/default/Graphics/_StepsType/Techno_Single5.png and b/Themes/default/Graphics/_StepsType/Techno_Single5.png differ diff --git a/Themes/default/Graphics/_StepsType/Techno_Single8.png b/Themes/default/Graphics/_StepsType/Techno_Single8.png index 39a2790fe4..5136b6853d 100644 Binary files a/Themes/default/Graphics/_StepsType/Techno_Single8.png and b/Themes/default/Graphics/_StepsType/Techno_Single8.png differ diff --git a/Themes/default/Graphics/_combined life frame.png b/Themes/default/Graphics/_combined life frame.png index 87f85c202d..8133b5870a 100644 Binary files a/Themes/default/Graphics/_combined life frame.png and b/Themes/default/Graphics/_combined life frame.png differ diff --git a/Themes/default/Graphics/_howto find.png b/Themes/default/Graphics/_howto find.png index aca7b6519b..dffd809dfe 100644 Binary files a/Themes/default/Graphics/_howto find.png and b/Themes/default/Graphics/_howto find.png differ diff --git a/Themes/default/Graphics/_howto install.png b/Themes/default/Graphics/_howto install.png index eb756edf01..a91509a5cf 100644 Binary files a/Themes/default/Graphics/_howto install.png and b/Themes/default/Graphics/_howto install.png differ diff --git a/Themes/default/Graphics/_icon Health.png b/Themes/default/Graphics/_icon Health.png index 772b27a787..42ccca3f10 100644 Binary files a/Themes/default/Graphics/_icon Health.png and b/Themes/default/Graphics/_icon Health.png differ diff --git a/Themes/default/Graphics/_icon Sort.png b/Themes/default/Graphics/_icon Sort.png index 49376d9c12..a8859abe4b 100644 Binary files a/Themes/default/Graphics/_icon Sort.png and b/Themes/default/Graphics/_icon Sort.png differ diff --git a/Themes/default/Graphics/_icon Timing.png b/Themes/default/Graphics/_icon Timing.png index fbae098de2..75f529c184 100644 Binary files a/Themes/default/Graphics/_icon Timing.png and b/Themes/default/Graphics/_icon Timing.png differ diff --git a/Themes/default/Languages/en.ini b/Themes/default/Languages/en.ini index 125ed3b51f..1afd38fa53 100644 --- a/Themes/default/Languages/en.ini +++ b/Themes/default/Languages/en.ini @@ -1,7 +1,9 @@ [Screen] HelpText=&BACK; Exit &START; Select &SELECT; Options &MENULEFT;&MENURIGHT;&MENUUP;&MENUDOWN; Move + [ScreenWithMenuElements] HelpText=&BACK; Exit &START; Select &MENULEFT;&MENURIGHT; Move + [ScreenTitleMenu] HelpText=&BACK; Exit &START; Select &MENUUP;&MENUDOWN; Move Network OK=Network OK @@ -10,6 +12,7 @@ Connected to %s=Connected to %s CurrentGametype=Current Gametype: %s LifeDifficulty=Life Difficulty: %s TimingDifficulty=Timing Difficulty: %s + [ScreenTitleJoin] HelpText=Press &START; to Play HelpTextJoin=Press &START; to Play @@ -19,16 +22,22 @@ JointPremiumMain=Joint Premium JointPremiumSecondary=Two players can play with one credit! DoublesPremiumMain=Doubles Premium DoublesPremiumSecondary=Play doubles for one credit! + [ScreenDemonstration] Demonstration=Demonstration + [ScreenQuickSetupOverview] Explanation=Quick Setup provides a easy way to set commonly-changed and useful preferences. + [ScreenProfileLoad] HelpText=... Loading profiles, please wait ... + [ScreenSelectProfile] HelpText=&MENUUP;&MENUDOWN; Switch Profile &START; Choose/Join &BACK; Unselect + [ScreenSelectMaster] HelpText=&BACK; Exit &START; Select / Join &MENULEFT;&MENURIGHT; Move + [ScreenSelectPlayMode] HelpText=&BACK; Exit &START; Select / Join &MENULEFT;&MENURIGHT; Move EasyExplanation=A mode for beginners. @@ -39,31 +48,40 @@ RaveExplanation=Battle against friend or foe. ExtendedExplanation=Several Songs in a row OniExplanation=A true test of skill. EndlessExplanation=It don't stop, it keep rollin'. + [ScreenSelectPlayStyle] HelpText=&BACK; Exit &START; Select &MENULEFT;&MENURIGHT; Move + [ScreenGameInformation] HelpText=&BACK; Exit &START; Skip + [ScreenSelectMusic] HelpText=&BACK; Exit &START; Select / Join &SELECT; Magic Codes &MENULEFT;&MENURIGHT; Move::&AUXWHITE;+[KEY] Sort To [KEY] AlternateHelpText=&SELECT;+&MENULEFT;&MENURIGHT; Change Difficulties &SELECT;+&START; Quick Sort + [ScreenSelectCourse] HelpText=&BACK; Exit &START; Select / Join &SELECT; Magic Codes &MENULEFT;&MENURIGHT; Move::&UP;&DOWN;&UP;&DOWN; for other course types + [ScreenOptions] HelpText=&BACK; Exit &START; Choose &SELECT; Go Up &MENULEFT;&MENURIGHT;&MENUUP;&MENUDOWN; Move + [ScreenStageInformation] HelpText= + [ScreenGameplay] HelpText= + [ScreenEvaluation] HelpText=&BACK; Exit &START; Move On &MENULEFT;+&MENURIGHT; or &SELECT; Snapshot LifeDifficulty=Life Difficulty: %s TimingDifficulty=Timing Difficulty: %s + [OptionTitles] -GamePrefAutoSetStyle=Auto Set Style +UserPrefAutoSetStyle=Auto Set Style UserPrefSpecialScoringMode=Special Scoring Mode -GamePrefNotePosition=Note Positions -GamePrefComboOnRolls=Rolls Increment Combo -GamePrefComboUnderField=Combo Under Field +UserPrefNotePosition=Note Positions +UserPrefComboOnRolls=Rolls Increment Combo +UserPrefComboUnderField=Combo Under Field UserPrefGameplayShowScore=Show Score UserPrefGameplayShowStepsDisplay=Show Steps @@ -71,11 +89,12 @@ UserPrefShowLotsaOptions=Options Density UserPrefLongFail=Fail Length UserPrefFlashyCombo=Flashy Combo UserPrefGameplayFooter=Gameplay Footer + [OptionExplanations] -GamePrefAutoSetStyle=Allow the game to list all one player and two player modes at once instead of one style only. This might require a restart of StepMania\n( or alternatively hit F2! ) -GamePrefNotePosition=Determines where the arrow receptors are placed in gameplay. -GamePrefComboOnRolls=Choose if rolls should increment the combo or not. -GamePrefComboUnderField=Determine if the combo should display under the notes or not. +UserPrefAutoSetStyle=Allow the game to list all one player and two player modes at once instead of one style only. This might require a restart of StepMania\n( or alternatively hit F2! ) +UserPrefNotePosition=Determines where the arrow receptors are placed in gameplay. +UserPrefComboOnRolls=Choose if rolls should increment the combo or not. +UserPrefComboUnderField=Determine if the combo should display under the notes or not. UserPrefGameplayShowScore=Show or Hide the score display in gameplay. UserPrefSpecialScoringMode=Select the scoring mode to be used if the Special scoring type is selected. @@ -107,6 +126,7 @@ Steps=Adjust the difficulty of the steps. Characters=Dancing buddies. SaveToProfileHelp=Requires profile or memory card. MusicRateHelp=Play the music at a faster rate. + [StepsListDisplayRow StepsType] Dance_Single=4 Dance_Double=8 @@ -160,4 +180,4 @@ Explanation-Exit=Return to the title menu. Custom=Special [ScreenTestInput] -HelpText=Hold &BACK; or &START; to exit. \ No newline at end of file +HelpText=Hold &BACK; or &START; to exit. diff --git a/Themes/default/Other/_blank.png b/Themes/default/Other/_blank.png index af1d438da2..b193cde188 100644 Binary files a/Themes/default/Other/_blank.png and b/Themes/default/Other/_blank.png differ diff --git a/Themes/default/Other/_missing.png b/Themes/default/Other/_missing.png index af1d438da2..b193cde188 100644 Binary files a/Themes/default/Other/_missing.png and b/Themes/default/Other/_missing.png differ diff --git a/Themes/default/metrics.ini b/Themes/default/metrics.ini index fe7af31f60..a9931ae5f6 100644 --- a/Themes/default/metrics.ini +++ b/Themes/default/metrics.ini @@ -1,11 +1,38 @@ +# 01 # [Global] FallbackTheme=_fallback [Common] FirstAttractScreen="" -InitialScreen="ScreenInit" -# AutoSetStyle=GetUserPrefB("UserPrefAutoSetStyle") +# 02 # +[LightsManager] + +[ProfileManager] + +[SongManager] +SongGroupColor1=BoostColor(Color("Orange"),1.2) +SongGroupColor2=BoostColor(Color("Orange"),1.25) +SongGroupColor3=BoostColor(Color("Orange"),1.25) +SongGroupColor4=BoostColor(Color("Orange"),1.25) +SongGroupColor5=BoostColor(Color("Orange"),1.25) +SongGroupColor6=BoostColor(Color("Orange"),1.25) +SongGroupColor7=BoostColor(Color("Orange"),1.25) +SongGroupColor8=BoostColor(Color("Orange"),1.25) +SongGroupColor9=BoostColor(Color("Orange"),1.25) +SongGroupColor10=BoostColor(Color("Orange"),1.25) + +CourseGroupColor1=color("1,1,1,1") + +[UnlockManager] + +# 03 # +[ArrowEffects] + +[Background] + +[Banner] + [BitmapText] NumRainbowColors=1 RainbowColor1=Color("Black"); @@ -16,16 +43,7 @@ SetNormalCommand=stoptweening;maxwidth,128;linear,0.2;diffuse,Color("White");dif SetChangeCommand=stoptweening;maxwidth,128;linear,0.2;diffuse,Color("Orange");diffusetopedge,BoostColor(Color("Orange"),1.5); SetRandomCommand=stoptweening;maxwidth,128;linear,0.2;diffuse,Color("Blue");diffusetopedge,BoostColor(Color("Blue"),1.5); SetExtraCommand=stoptweening;maxwidth,128;linear,0.2;diffuse,Color("Red");diffusebottomedge,BoostColor(Color("Red"),0.5); -Cycle=true -NoBpmText="000" RandomCycleSpeed=0.2 -- smaller numbers mean the bpm cycles faster -Separator="-" -ShowQMarksInRandomCycle=true - -[CombinedLifeMeterTug] -# We dont use it. -MeterWidth=512-8 -MeterHeight=40 [CodeDetector] # For Future Reference: @@ -33,19 +51,17 @@ MeterHeight=40 # - = In Conjuction With / Then # ~ = Released # + = At The Same Time -[DifficultyList] -CapitalizeDifficultyNames=false -NumShownItems=8 -ItemsSpacingY=24 -[HelpDisplay] -TipShowTime=7 + +[CodeDetectorOnline] + +[CombinedLifeMeterTug] +# We don't use it. +MeterWidth=512-8 +MeterHeight=40 + [Combo] ShowComboAt=2 -NumberMinZoom=0.8 -NumberMaxZoom=1 -NumberMaxZoomAt=100 -LabelMinZoom=0.75*0.75 LabelMaxZoom=0.75*1 PulseCommand=%function(self,param) self:finishtweening(); self:diffusealpha(1); self:zoom(1.125*param.Zoom); self:linear(0.05); self:zoom(param.Zoom); self:sleep(2); self:linear(0.5); self:diffusealpha(0); end; @@ -53,37 +69,14 @@ PulseLabelCommand=%function(self,param) self:finishtweening(); self:diffusealpha NumberOnCommand=y,240-216-1.5;shadowlength,1;horizalign,right;vertalign,bottom;skewx,-0.125; LabelOnCommand=x,6;y,22.5;shadowlength,1;zoom,0.75;diffusebottomedge,color("0.75,0.75,0.75,1");horizalign,left;vertalign,bottom -[FadingBanner] -BannerOnCommand= -BannerFadeFromCachedCommand=diffusealpha,1;stoptweening;accelerate,0.05;glow,Colors.Alpha( Color("White"), 0.45 );decelerate,0.175;diffusealpha,0;glow,Color("Invisible"); -BannerFadeOffCommand=diffusealpha,1;stoptweening;linear,0.25;diffusealpha,0 -BannerResetFadeCommand=diffusealpha,1 - [HoldJudgment] -# !!! # -# HoldJudgmentLetGoCommand=HoldJudgmentLetGo() -# HoldJudgmentHeldCommand=HoldJudgmentHeld() 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 -# HoldJudgmentLetGoCommand=GAMESTATE:GetCurrentGame():GetName() == "pump" and "visible,false" or "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=GAMESTATE:GetCurrentGame():GetName() == "pump" and "visible,false" or "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"; -# HoldJudgmentLetGoCommand=function(self) \ - # if GAMESTATE:GetCurrentGame():GetName() == "pump" then \ - # return (cmd(visible,false))(self); \ - # else return (cmd(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))(self); \ - # end; \ -# end; -# HoldJudgmentHeldCommand=function(self) \ - # if GAMESTATE:GetCurrentGame():GetName() == "pump" then \ - # return (cmd(visible,false)); \ - # else return (cmd(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))(self); \ - # end; \ -# end; + +[HelpDisplay] +TipShowTime=7 [Judgment] -# New # -JudgmentOnCommand= -# !!! # JudgmentW1Command=finishtweening;shadowlength,0;y,0;diffusealpha,1;zoom,1.3;linear,0.05;zoom,1;sleep,0.8;linear,0.1;zoomy,0.5;zoomx,2;diffusealpha,0;glowblink;effectperiod,0.05;effectcolor1,1,1,1,0;effectcolor2,1,1,1,0.8 JudgmentW2Command=finishtweening;y,0;shadowlength,0;diffusealpha,1;zoom,1.3;linear,0.05;zoom,1;sleep,0.5;linear,0.1;zoomy,0.5;zoomx,2;diffusealpha,0 JudgmentW3Command=finishtweening;y,0;shadowlength,0;diffusealpha,1;zoom,1.2;linear,0.05;zoom,1;sleep,0.5;linear,0.1;zoomy,0.5;zoomx,2;diffusealpha,0; @@ -94,6 +87,67 @@ JudgmentMissCommand=finishtweening;y,0;shadowlength,0;diffusealpha,1;zoom,1;y,-2 OffsetOnCommand= OffsetLateCommand= OffsetEarlyCommand= + +[Protiming] +ProtimingOnCommand=shadowlength,1;horizalign,right;x,30;strokecolor,Color("Outline");skewx,-0.125;textglowmode,"TextGlowMode_Inner"; +AverageOnCommand=shadowlength,1;horizalign,left;x,32;y,8;zoom,0.75;diffuse,ColorLightTone( Color("Green") );strokecolor,Color("Outline");skewx,-0.125;textglowmode,"TextGlowMode_Inner"; +TextOnCommand=shadowlength,1;horizalign,left;x,32;y,-6;zoom,0.5;strokecolor,Color("Outline");skewx,-0.125;textglowmode,"TextGlowMode_Inner"; +# +ProtimingW1Command=finishtweening;diffuse,Color("White");zoom,1.15;glow,Color("White");linear,0.05;zoom,1;glow,Color("Invisible");diffuse,GameColor.Judgment["JudgmentLine_W1"];sleep,2;linear,0.5;diffuse,Color("Invisible"); +ProtimingW2Command=finishtweening;diffuse,Color("White");zoom,1.15;glow,Color("White");linear,0.05;zoom,1;glow,Color("Invisible");diffuse,GameColor.Judgment["JudgmentLine_W2"];sleep,2;linear,0.5;diffuse,Color("Invisible"); +ProtimingW3Command=finishtweening;diffuse,Color("White");zoom,1.15;glow,Color("White");linear,0.05;zoom,1;glow,Color("Invisible");diffuse,GameColor.Judgment["JudgmentLine_W3"];sleep,2;linear,0.5;diffuse,Color("Invisible"); +ProtimingW4Command=finishtweening;diffuse,Color("White");zoom,1.15;glow,Color("White");linear,0.05;zoom,1;glow,Color("Invisible");diffuse,GameColor.Judgment["JudgmentLine_W4"];sleep,2;linear,0.5;diffuse,Color("Invisible"); +ProtimingW5Command=finishtweening;diffuse,Color("White");zoom,1.15;glow,Color("White");linear,0.05;zoom,1;glow,Color("Invisible");diffuse,GameColor.Judgment["JudgmentLine_W5"];sleep,2;linear,0.5;diffuse,Color("Invisible"); +ProtimingMissCommand=finishtweening;diffusealpha,1;zoom,1.15;glow,GameColor.Judgment["JudgmentLine_Miss"];linear,0.05;zoom,1;glow,Color("Invisible");diffuse,GameColor.Judgment["JudgmentLine_Miss"];sleep,2;linear,0.5;diffuse,Color("Invisible"); +# +AveragePulseCommand=finishtweening;diffusealpha,1;zoom,0.75*1.025;decelerate,0.05;zoom,0.75;sleep,2;linear,0.5;diffusealpha,0; +TextPulseCommand=finishtweening;diffusealpha,1;zoom,0.5*1.025;decelerate,0.05;zoom,0.5;sleep,2;linear,0.5;diffusealpha,0; + +[Course] + +[CustomDifficulty] + +[CustomScoring] +# So special scoring works properly, we zero this out +ComboAboveThresholdAddsToScoreBonus=0 +ComboScoreBonusThreshold=0 +ComboScoreBonusValue=0 +ComboMultiplier=0 +DoubleNoteScoreMultiplier=0 +TripleNoteScoreMultiplier=0 +QuadOrHigherNoteScoreMultiplier=0 +PointsW1=0 +PointsW2=0 +PointsW3=0 +PointsW4=0 +PointsW5=0 +PointsMiss=0 +PointsHitMine=0 +PointsCheckpointHit=0 +PointsCheckpointMiss=0 +PointsNone=0 +PointsHoldHeld=0 +PointsHoldLetGo=0 + +[DifficultyList] +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"); + +[Gameplay] + +[GameState] + +[GrooveRadar] + +[GroupList] + +[HighScore] + +[Inventory] + [LifeMeterBar] OverOnCommand=diffuse,Color("Orange");diffuserightedge,BoostColor(Color("Orange"),1.5) @@ -105,48 +159,82 @@ BatteryP1Y=0 BatteryP2X=0 BatteryP2Y=0 # -NumLivesP1X=-92 -NumLivesP1Y=0 -NumLivesP2X=92 -NumLivesP2Y=0 NumLivesP2OnCommand=zoomx,-1 [LifeMeterBattery Percent] # still asking for this even though it's in fallback... -aj Format= # -DancePointsP2OnCommand=zoom,0.7;zoomx,-0.7;shadowlength,0;diffuse,PlayerColor(PLAYER_2) -DancePointsP2OffCommand= -# -PercentP2X=0 -PercentP2Y=0 PercentP2OnCommand=zoom,0.7;zoomx,-0.7;shadowlength,0;diffuse,PlayerColor(PLAYER_2) -PercentP2OffCommand= +DancePointsP2OnCommand=zoom,0.7;zoomx,-0.7;shadowlength,0;diffuse,PlayerColor(PLAYER_2) -[NoteField] -ShowBoard=GAMESTATE:GetCurrentGame():GetName() == "kb7" +[LifeMeterTime] +[LyricDisplay] + +[NotesWriterSM] + +[OptionRow] +TitleOnCommand=shadowlength,0;skewx,-0.1;uppercase,true;wrapwidthpixels,136;maxheight,42;zoom,0.6 +TitleGainFocusCommand=stoptweening;zoom,0.6375*1.125;bounceend,0.2;diffuse,Color("Orange");diffusetopedge,BoostColor(Color("Orange"),1.5);strokecolor,Color("Black");zoom,0.6375; +# TitleGainFocusCommand=stoptweening;zoom,0.6375*1.25;bounceend,0.2;diffuse,Color("Orange");diffusetopedge,BoostColor(Color("Orange"),1.5);strokecolor,Color("Black");zoom,0.6375;thump;effectmagnitude,1,1.05,1;effectclock,'beat' +TitleLoseFocusCommand=diffuse,Color("White");strokecolor,Color("Black");stopeffect; + +[OptionRowService] + +[OptionRowExit] +FrameOnCommand=visible,true;diffuse,Color("Red"); +FrameX=SCREEN_CENTER_X + +ItemsMinBaseZoom=1 +ItemOnCommand=shadowlength,1;zoom,0.8;diffuse,Color("Red");diffusebottomedge,BoostColor(Color("Red"),0.75);shadowcolor,BoostColor(Color("Red"),0.35) +ItemGainFocusCommand=stoptweening;linear,0.2;zoom,1;diffuse,Color("Red");diffusebottomedge,BoostColor(Color("Red"),0.75) +ItemLoseFocusCommand=stoptweening;decelerate,0.5;zoom,0.8; +ColorSelected=Color("Red") +ColorNotSelected=Color("Red") +ColorDisabled=Color("Red") + +ItemsLongRowP1X=SCREEN_CENTER_X-1024 +ItemsLongRowP2X=SCREEN_CENTER_X+1024 +ItemsLongRowSharedX=SCREEN_CENTER_X + +[OptionsCursor] + +[OptionsCursorP1] +LeftOnCommand=horizalign,right;diffuse,PlayerColor(PLAYER_1) +MiddleOnCommand=;diffuse,PlayerColor(PLAYER_1) +RightOnCommand=horizalign,left;diffuse,PlayerColor(PLAYER_1) + +[OptionsCursorP2] +LeftOnCommand=horizalign,right;diffuse,PlayerColor(PLAYER_2) +MiddleOnCommand=;diffuse,PlayerColor(PLAYER_2) +RightOnCommand=horizalign,left;diffuse,PlayerColor(PLAYER_2) + +[OptionsUnderline] + +[OptionsUnderlineP1] +LeftOnCommand=horizalign,right;diffuse,PlayerColor(PLAYER_1) +MiddleOnCommand=;diffuse,PlayerColor(PLAYER_1) +RightOnCommand=horizalign,left;diffuse,PlayerColor(PLAYER_1) + +[OptionsUnderlineP2] +LeftOnCommand=horizalign,right;diffuse,PlayerColor(PLAYER_2) +MiddleOnCommand=;diffuse,PlayerColor(PLAYER_2) +RightOnCommand=horizalign,left;diffuse,PlayerColor(PLAYER_2) [MenuTimer] Text1OnCommand=stopeffect;stoptweening;shadowlength,0;strokecolor,Color("Outline") Text1FormatFunction=function(fSeconds) \ return string.format("%0.1f", fSeconds); \ end -FrameOnCommand= + Warning10Command=diffuseshift;effectperiod,1;effectcolor2,Color("Red");effectcolor1,color("0.5,0,0,1"); -#~ Warning10Command=%function(self) \ - #~ MESSAGEMAN:Broadcast("TimerWarning"); \ - #~ cmd(diffuseshift;effectperiod,1;effectcolor2,Color("Red");effectcolor1,color("0.5,0,0,1"))(self); \ -#~ end; + +[MenuTimerNoSound] [MusicWheel] -FadeSeconds=1 SwitchSeconds=0.08 -RandomPicksLockedSongs=true -RouletteSwitchSeconds=0.05 -RouletteSlowDownSwitches=5 LockedInitialVelocity=7 -ScrollBarHeight=300 -ScrollBarOnCommand=visible,false + ; linear wheel example: ; ItemTransformFunction=function(self,offsetFromCenter,itemIndex,numItems) \ ; self:y(offsetFromCenter*38); \ @@ -162,58 +250,37 @@ ScrollBarOnCommand=visible,false ; self:rotationx( rotationx_radians * 180/math.pi ); --[[ to degrees end]] \ ; end; ItemTransformFunction=function(self,offsetFromCenter,itemIndex,numItems) self:x( (1-math.cos(offsetFromCenter/math.pi))*44 ); self:y( offsetFromCenter*46 ); end -NumWheelItems=11 MusicWheelSortOnCommand=fov,90; MusicWheelSortOffCommand=fov,90; MusicWheelItemSortOnCommand=zoomy,0;bounceend,0.15;zoomy,1 MusicWheelItemSortOffCommand=linear,0.175;zoomy,0 HighlightOnCommand=diffuseshift;effecttiming,(1/8),0,(7/8),0;effectcolor2,Color("White");effectcolor1,color("1,1,1,0.5");effectclock,'beatnooffset' -HighlightOffCommand= HighlightSortOnCommand=stoptweening;decelerate,0.125;glow,Color("Stealth");zoom,1 HighlightSortOffCommand=stoptweening;accelerate,0.125;glow,Color("Orange");zoom,1.05 WheelItemOnDelayOffset=0.04 WheelItemOffDelayOffset=0.04 -WheelItemLockedColor=color("0,0,0,0.5") -# -NumSectionColors=1 + SectionColor1=Color("Orange") # SongRealExtraColor=Color("Red") SortMenuColor=Color("Orange") + # -ShowRoulette=true -ShowRandom=false -ShowPortal=false -MostPlayedSongsToShow=30 -#~ ModeMenuChoiceNames="Preferred,Group,Title,Bpm,Popularity,TopGrades,Artist,EasyMeter,MediumMeter,HardMeter,ChallengeMeter,Genre,Length" -#~ ChoicePreferred="sort,Preferred" -#~ ChoiceGroup="sort,Group" -#~ ChoiceTitle="sort,Title" -#~ ChoiceBpm="sort,BPM" -#~ ChoicePopularity="sort,Popularity" -#~ ChoiceTopGrades="sort,TopGrades" -#~ ChoiceArtist="sort,Artist" -#~ ChoiceGenre="sort,Genre" -#~ ChoiceEasyMeter="sort,EasyMeter" -#~ ChoiceMediumMeter="sort,MediumMeter" -#~ ChoiceHardMeter="sort,HardMeter" -#~ ChoiceChallengeMeter="sort,ChallengeMeter" -#~ ChoiceLength="sort,Length" -#~ ChoiceCourses="sort,AllCourses;" + UseEasyMarkerFlag=true -# + + +[CourseWheel] + +[OnlineMusicWheel] [MusicWheelItem] WheelNotifyIconX=-128-16+0.5 -WheelNotifyIconY=0 WheelNotifyIconOnCommand=shadowlength,2; # SongNameX=-120 -SongNameY=0 -SongNameOnCommand= # CourseX=-120 -CourseY=0 CourseOnCommand=maxwidth,208;horizalign,left # SectionExpandedX=-38 @@ -224,11 +291,8 @@ SectionCollapsedX=-38 SectionCollapsedY=-2 SectionCollapsedOnCommand=maxwidth,194;shadowlength,1;shadowcolor,color("0.1,0.1,0.1,0.2") SectionCountX=112 -SectionCountY=0 SectionCountOnCommand=zoom,0.75;strokecolor,Color("Outline") # -RouletteX=0 -RouletteY=0 RouletteOnCommand=maxwidth,400;shadowlength,1;zoom,0.75;rainbowscroll,true;thump,2; # SortX=-132 @@ -243,153 +307,70 @@ GradeP1X=106+16 GradeP1Y=-8 GradeP2X=110+16 GradeP2Y=8 -GradesShowMachine=true -[OptionRow] -TitleOnCommand=shadowlength,0;skewx,-0.1;uppercase,true;wrapwidthpixels,136;maxheight,42;zoom,0.6 -TitleGainFocusCommand=stoptweening;zoom,0.6375*1.125;bounceend,0.2;diffuse,Color("Orange");diffusetopedge,BoostColor(Color("Orange"),1.5);strokecolor,Color("Black");zoom,0.6375; -# TitleGainFocusCommand=stoptweening;zoom,0.6375*1.25;bounceend,0.2;diffuse,Color("Orange");diffusetopedge,BoostColor(Color("Orange"),1.5);strokecolor,Color("Black");zoom,0.6375;thump;effectmagnitude,1,1.05,1;effectclock,'beat' -TitleLoseFocusCommand=diffuse,Color("White");strokecolor,Color("Black");stopeffect; -[OptionRowMiniMenu] -Fallback="OptionRow" +[NoteField] +ShowBoard=GAMESTATE:GetCurrentGame():GetName() == "kb7" -TitleX=SCREEN_CENTER_X-320+48 -TitleOnCommand=horizalign,left;shadowlength,0;uppercase,true;zoom,0.6375;strokecolor,Color("Black"); -#~ TitleGainFocusCommand= -#~ TitleLoseFocusCommand= +[PlayerStageStats] -ColorSelected=color("1,1,1,1") -ColorNotSelected=color("0.9,0.9,0.9,1") -ColorDisabled=color("0.5,0.5,0.5,1") - -ItemOnCommand=zoom,0.6375 -ItemsLongRowP1X=SCREEN_CENTER_X-240 -ItemsLongRowP2X=SCREEN_CENTER_X+240 -ItemsLongRowSharedX=SCREEN_CENTER_X+200 - -[OptionRowMiniMenuContext] -Fallback="OptionRowMiniMenu" - -[OptionRowExit] -Fallback="OptionRow" -FrameOnCommand=visible,true;diffuse,Color("Red"); -FrameX=SCREEN_CENTER_X -TitleOnCommand=visible,false - -ItemsMinBaseZoom=1 -ItemOnCommand=shadowlength,1;zoom,0.8;diffuse,Color("Red");diffusebottomedge,BoostColor(Color("Red"),0.75);shadowcolor,BoostColor(Color("Red"),0.35) -ItemGainFocusCommand=stoptweening;linear,0.2;zoom,1;diffuse,Color("Red");diffusebottomedge,BoostColor(Color("Red"),0.75) -ItemLoseFocusCommand=stoptweening;decelerate,0.5;zoom,0.8; -ColorSelected=Color("Red") -ColorNotSelected=Color("Red") -ColorDisabled=Color("Red") - -ItemsLongRowP1X=SCREEN_CENTER_X-1024 -ItemsLongRowP2X=SCREEN_CENTER_X+1024 -ItemsLongRowSharedX=SCREEN_CENTER_X - -[OptionsCursorP1] -LeftOnCommand=horizalign,right;diffuse,PlayerColor(PLAYER_1) -MiddleOnCommand=;diffuse,PlayerColor(PLAYER_1) -RightOnCommand=horizalign,left;diffuse,PlayerColor(PLAYER_1) -[OptionsCursorP2] -LeftOnCommand=horizalign,right;diffuse,PlayerColor(PLAYER_2) -MiddleOnCommand=;diffuse,PlayerColor(PLAYER_2) -RightOnCommand=horizalign,left;diffuse,PlayerColor(PLAYER_2) -[OptionsUnderlineP1] -LeftOnCommand=horizalign,right;diffuse,PlayerColor(PLAYER_1) -MiddleOnCommand=;diffuse,PlayerColor(PLAYER_1) -RightOnCommand=horizalign,left;diffuse,PlayerColor(PLAYER_1) -[OptionsUnderlineP2] -LeftOnCommand=horizalign,right;diffuse,PlayerColor(PLAYER_2) -MiddleOnCommand=;diffuse,PlayerColor(PLAYER_2) -RightOnCommand=horizalign,left;diffuse,PlayerColor(PLAYER_2) -[Protiming] -ProtimingOnCommand=shadowlength,1;horizalign,right;x,30;strokecolor,Color("Outline");skewx,-0.125;textglowmode,"TextGlowMode_Inner"; -AverageOnCommand=shadowlength,1;horizalign,left;x,32;y,8;zoom,0.75;diffuse,ColorLightTone( Color("Green") );strokecolor,Color("Outline");skewx,-0.125;textglowmode,"TextGlowMode_Inner"; -TextOnCommand=shadowlength,1;horizalign,left;x,32;y,-6;zoom,0.5;strokecolor,Color("Outline");skewx,-0.125;textglowmode,"TextGlowMode_Inner"; -# -ProtimingW1Command=finishtweening;diffuse,Color("White");zoom,1.15;glow,Color("White");linear,0.05;zoom,1;glow,Color("Invisible");diffuse,GameColor.Judgment["JudgmentLine_W1"];sleep,2;linear,0.5;diffuse,Color("Invisible"); -ProtimingW2Command=finishtweening;diffuse,Color("White");zoom,1.15;glow,Color("White");linear,0.05;zoom,1;glow,Color("Invisible");diffuse,GameColor.Judgment["JudgmentLine_W2"];sleep,2;linear,0.5;diffuse,Color("Invisible"); -ProtimingW3Command=finishtweening;diffuse,Color("White");zoom,1.15;glow,Color("White");linear,0.05;zoom,1;glow,Color("Invisible");diffuse,GameColor.Judgment["JudgmentLine_W3"];sleep,2;linear,0.5;diffuse,Color("Invisible"); -ProtimingW4Command=finishtweening;diffuse,Color("White");zoom,1.15;glow,Color("White");linear,0.05;zoom,1;glow,Color("Invisible");diffuse,GameColor.Judgment["JudgmentLine_W4"];sleep,2;linear,0.5;diffuse,Color("Invisible"); -ProtimingW5Command=finishtweening;diffuse,Color("White");zoom,1.15;glow,Color("White");linear,0.05;zoom,1;glow,Color("Invisible");diffuse,GameColor.Judgment["JudgmentLine_W5"];sleep,2;linear,0.5;diffuse,Color("Invisible"); -ProtimingMissCommand=finishtweening;diffusealpha,1;zoom,1.15;glow,GameColor.Judgment["JudgmentLine_Miss"];linear,0.05;zoom,1;glow,Color("Invisible");diffuse,GameColor.Judgment["JudgmentLine_Miss"];sleep,2;linear,0.5;diffuse,Color("Invisible"); -# -AveragePulseCommand=finishtweening;diffusealpha,1;zoom,0.75*1.025;decelerate,0.05;zoom,0.75;sleep,2;linear,0.5;diffusealpha,0; -TextPulseCommand=finishtweening;diffusealpha,1;zoom,0.5*1.025;decelerate,0.05;zoom,0.5;sleep,2;linear,0.5;diffusealpha,0; [Player] -# ReceptorArrowsYStandard=GetTapPosition('Standard') -# ReceptorArrowsYReverse=GetTapPosition('Reverse') -# RollBodyIncrementsCombo=GetUserPrefB("UserPrefComboOnRolls") + +[PlayerOptions] + +[PlayerShared] + +[Profile] + +[RadarValues] + +[RollingNumbers] + +[RollingNumbersEvaluation] + +[RollingNumbersJudgment] [ScoreDisplayNormal] -FrameX= -FrameY= -FrameOnCommand= -FrameOffCommand= -TextX= -TextY= TextOnCommand=shadowlength,1;diffusebottomedge,BoostColor(Color('White'),0.75) -TextOffCommand= [ScoreDisplayOni] TextX= TextY= TextOnCommand=shadowlength,1;diffusebottomedge,BoostColor(Color('White'),0.75) TextOffCommand= + [ScoreDisplayOni Numbers] TextX= TextY= TextOnCommand=shadowlength,1;diffusebottomedge,BoostColor(Color('White'),0.75) TextOffCommand= + [ScoreDisplayLifeTime] -FrameX= -FrameY= FrameOnCommand=visible,false;spin -FrameOffCommand= # -TimeRemainingX= TimeRemainingY=80 TimeRemainingOnCommand=zoom,1;shadowlength,1;settext,"Hi!"; -TimeRemainingOffCommand= # DeltaSecondsOnCommand=y,80;settext,Hi;spin; -DeltaSecondsNoneCommand= -DeltaSecondsHitMineCommand= -DeltaSecondsAvoidMineCommand= -DeltaSecondsCheckpointMissCommand= -DeltaSecondsCheckpointHitCommand= -DeltaSecondsMissCommand= -DeltaSecondsW5Command= -DeltaSecondsW4Command= -DeltaSecondsW3Command= -DeltaSecondsW2Command= -DeltaSecondsW1Command= -DeltaSecondsLetGoCommand= -DeltaSecondsHeldCommand= DeltaSecondsGainLifeCommand=zoom,0.5;settext,"Hi!"; + [ScoreDisplayPercentage Percent] PercentP1OnCommand=shadowlength,1;diffuse,PlayerColor(PLAYER_1);diffusetopedge,BoostColor(PlayerColor(PLAYER_1),1.5) PercentP2OnCommand=shadowlength,1;diffuse,PlayerColor(PLAYER_2);diffusetopedge,BoostColor(PlayerColor(PLAYER_2),1.5) + +[ScoreDisplayRave] +MeterP1OnCommand=draworder,-1 +MeterP2OnCommand=draworder,-1;zoomx,-1 +LevelP1OnCommand=draworder,105;zoom,0.75;diffuse,ColorLightTone( PlayerColor(PLAYER_1) );strokecolor,ColorDarkTone( PlayerColor(PLAYER_1) );x,-144;skewx,-0.125; +LevelP2OnCommand=draworder,105;draworder,105;zoom,0.75;diffuse,ColorLightTone( PlayerColor(PLAYER_2) );strokecolor,ColorDarkTone( PlayerColor(PLAYER_2) );x,144;skewx,-0.125; + +[ScoreKeeperRave] + [ScreenEvaluation Percent] -# This shouldn't even be named this but whatever man. -PercentP1X=0 -PercentP1Y=0 +# TODO: Better name? PercentP1OnCommand=horizalign,right;shadowlength,1;diffuse,PlayerColor(PLAYER_1);strokecolor,ColorDarkTone( PlayerColor(PLAYER_1) ); -PercentP1OffCommand= -PercentP2X=0 -PercentP2Y=0 PercentP2OnCommand=horizalign,right;shadowlength,1;diffuse,PlayerColor(PLAYER_2);strokecolor,ColorDarkTone( PlayerColor(PLAYER_2) ); -PercentP2OffCommand= -PercentRemainderP1X=0 -PercentRemainderP1Y=0 PercentRemainderP1OnCommand=horizalign,left;shadowlength,1;diffuse,PlayerColor(PLAYER_1);strokecolor,ColorDarkTone( PlayerColor(PLAYER_1) ); -PercentRemainderP1OffCommand= -PercentRemainderP2X=0 -PercentRemainderP2Y=0 PercentRemainderP2OnCommand=horizalign,left;shadowlength,1;diffuse,PlayerColor(PLAYER_2);strokecolor,ColorDarkTone( PlayerColor(PLAYER_2) ); -PercentRemainderP2OffCommand= DancePointsP1X=0 DancePointsP1Y=0 DancePointsP1OnCommand=shadowlength,1;diffuse,PlayerColor(PLAYER_1);strokecolor,ColorDarkTone( PlayerColor(PLAYER_1) ); @@ -399,46 +380,81 @@ DancePointsP2Y=0 DancePointsP2OnCommand=shadowlength,1;diffuse,PlayerColor(PLAYER_2);strokecolor,ColorDarkTone( PlayerColor(PLAYER_2) ); DancePointsP2OffCommand= DancePointsDigits=2 -PercentUseRemainder=true ApplyScoreDisplayOptions=true -FormatPercentScore=FormatPercentScore -Format= PercentDecimalPlaces=2 PercentTotalSize=5 -[ScoreDisplayRave] -MeterP1X= -MeterP1Y= -MeterP1OnCommand=draworder,-1 -MeterP1OffCommand= -MeterP2X= -MeterP2Y= -MeterP2OnCommand=draworder,-1;zoomx,-1 -MeterP2OffCommand= +[SoundEffectControl] -LevelP1X= -LevelP1Y= -LevelP1OnCommand=draworder,105;zoom,0.75;diffuse,ColorLightTone( PlayerColor(PLAYER_1) );strokecolor,ColorDarkTone( PlayerColor(PLAYER_1) );x,-144;skewx,-0.125; -LevelP1OffCommand= -LevelP2X= -LevelP2Y= -LevelP2OnCommand=draworder,105;draworder,105;zoom,0.75;diffuse,ColorLightTone( PlayerColor(PLAYER_2) );strokecolor,ColorDarkTone( PlayerColor(PLAYER_2) );x,144;skewx,-0.125; -LevelP2OffCommand= -[SongManager] -SongGroupColor1=BoostColor(Color("Orange"),1.2) -SongGroupColor2=BoostColor(Color("Orange"),1.25) -SongGroupColor3=BoostColor(Color("Orange"),1.25) -SongGroupColor4=BoostColor(Color("Orange"),1.25) -SongGroupColor5=BoostColor(Color("Orange"),1.25) -SongGroupColor6=BoostColor(Color("Orange"),1.25) -SongGroupColor7=BoostColor(Color("Orange"),1.25) -SongGroupColor8=BoostColor(Color("Orange"),1.25) -SongGroupColor9=BoostColor(Color("Orange"),1.25) -SongGroupColor10=BoostColor(Color("Orange"),1.25) +[SoundEffectControl_Off] -CourseGroupColor1=color("1,1,1,1") -UnlockColor=color("1,0.5,0,1") -ExtraColor=color("#ff0000") -- red +[SoundEffectControl_Speed] + +[SoundEffectControl_Pitch] + +[StepsDisplayListRow] +# TODO: Make this use DifficultyList? +CapitalizeDifficultyNames=false +NumShownItems=5 +ItemsSpacingY=24 +MoveCommand=decelerate,0.3 + +FrameX= + +FrameSetCommand=%function(self,param) \ + if param.CustomDifficulty then \ + self:diffuse(ColorMidTone( CustomDifficultyToColor(param.CustomDifficulty) )); \ + else \ + self:diffuse(color('1,1,1,1')); \ + end; \ +end; +# +NumTicks=10 +MaxTicks=10 +# +ShowMeter=true +MeterX=56 +MeterOnCommand=shadowlength,1;zoom,0.65;textglowmode,'TextGlowMode_Inner'; +MeterSetCommand=%function(self,param) \ + if param.CustomDifficulty then \ + self:diffuse(CustomDifficultyToColor(param.CustomDifficulty)); \ + self:shadowcolor(CustomDifficultyToDarkColor(param.CustomDifficulty)); \ + end; \ + if param.Meter then \ + if param.Meter >= 10 then \ + self:textglowmode('TextGlowMode_Inner'); \ + self:glowshift(); \ + else \ + self:stopeffect(); \ + end; \ + end; \ +end; +# +ShowDescription=true +DescriptionX=GetGamePrefB("AutoSetStyle") and (-64-8+20) or (-64-8) +# DescriptionX=GetUserPrefB("UserPrefAutoSetStyle") and (-64-8+20) or (-64-8) +DescriptionOnCommand=shadowlength,1;horizalign,left;zoom,0.65;maxwidth,128+8-20;uppercase,true; +DescriptionSetCommand=%function(self,param) \ + if self:GetText() == "" then \ + self:settext("Edit"); \ + end; \ + if param.CustomDifficulty then \ + self:diffuse(CustomDifficultyToColor(param.CustomDifficulty)); \ + self:shadowcolor(CustomDifficultyToDarkColor(param.CustomDifficulty)); \ + end; \ +end; +# +ShowAutogen=true +AutogenX=0 +AutogenY=0 +#AutogenOnCommand=diffuseshift;effectcolor1,Colors.Alpha( Color("Green") , 0.5 );effectcolor2,ColorLightTone( Color("Green") ); +AutogenOnCommand=blend,Blend.Add;diffuseshift;effectcolor1,color("#FFCC00FF");effectcolor2,color("#FFCC0088"); +# +ShowStepsType=GetGamePrefB("AutoSetStyle") +StepsTypeX=-64-8 +StepsTypeY=0 +StepsTypeOnCommand= +StepsTypeSetCommand= [SongMeterDisplay] StreamWidth=380 @@ -468,225 +484,10 @@ FrameOnCommand=sleep,2;linear,0.25;diffuse,PlayerColor(PLAYER_1);glow,1,1,1,0.5; [SongMeterDisplayP2] Fallback="SongMeterDisplay" FrameOnCommand=sleep,2;linear,0.25;diffuse,PlayerColor(PLAYER_2);glow,1,1,1,0.5;decelerate,0.6;glow,1,1,1,0 -[StepsDisplay] -FrameX=0 -FrameY=0 -FrameOnCommand= -FrameLoadCommand=%function(self,param) end; -FrameSetCommand=%function(self,param) \ - if param.CustomDifficulty then \ - self:diffuse(CustomDifficultyToColor(param.CustomDifficulty)); \ - end; \ -end; -# -ShowTicks=false -NumTicks=10 -MaxTicks=14 -TicksX=0 -TicksY=0 -TicksOnCommand=shadowlength,0; -TicksSetCommand=%function(self,param) end; -# -ShowMeter=true -ZeroMeterString="?" -MeterX=56-32 -MeterY=0 -MeterOnCommand=shadowlength,1;textglowmode,'TextGlowMode_Inner' -MeterSetCommand=%function(self,param) \ - if param.CustomDifficulty then \ - self:diffuse(CustomDifficultyToColor(param.CustomDifficulty)); \ - self:shadowcolor(CustomDifficultyToDarkColor(param.CustomDifficulty)); \ - end; \ - if param.Meter then \ - if param.Meter >= 100 then \ - self:basezoom(0.8); \ - self:glowshift(); \ - elseif param.Meter >= 10 then \ - self:basezoom(1); \ - self:glowshift(); \ - else \ - self:basezoom(1); \ - self:stopeffect(); \ - end; \ - end; \ -end; -# -ShowDescription=true -DescriptionX=-20-32 -DescriptionY=GetGamePrefB("AutoSetStyle") and -5 or 0 -# DescriptionY=GetUserPrefB("UserPrefAutoSetStyle") and -5 or 0 -DescriptionOnCommand=shadowlength,1;uppercase,true;zoom,0.75;maxwidth,128+8 -DescriptionSetCommand=%function(self,param) \ - if self:GetText() == "" then \ - self:settext("Edit"); \ - end; \ - if param.CustomDifficulty then \ - self:diffuse(CustomDifficultyToColor(param.CustomDifficulty)); \ - self:shadowcolor(CustomDifficultyToDarkColor(param.CustomDifficulty)); \ - end; \ -end; -# -ShowAutogen=false -AutogenX=40-32 -AutogenY=0 -AutogenOnCommand= -AutogenSetCommand=%function(self,param) if param.Difficulty then self:diffuse(CustomDifficultyToLightColor(param.Difficulty)); self:strokecolor(CustomDifficultyToDarkColor(param.Difficulty)); end end -# -ShowStepsType=GetGamePrefB("AutoSetStyle") -# ShowStepsType=GetUserPrefB("UserPrefAutoSetStyle") -StepsTypeX=-20-32 -StepsTypeY=7 -StepsTypeOnCommand=zoom,0.45 - -[StepsDisplayEdit] -Fallback="StepsDisplayGameplay" - -[StepsDisplayGameplay] -Fallback="StepsDisplay" - -FrameX=0 -FrameY=0 -FrameOnCommand= -FrameLoadCommand=%function(self,param) end; -FrameSetCommand=%function(self,param) \ - if param.CustomDifficulty then \ - self:diffuse(CustomDifficultyToColor(param.CustomDifficulty)); \ - end; \ -end; -# -ShowTicks=false -NumTicks=10 -MaxTicks=14 -TicksX=0 -TicksY=0 -TicksOnCommand=shadowlength,0; -TicksSetCommand=%function(self,param) end; -# -ShowMeter=true -ZeroMeterString="?" -MeterX=56 -MeterY=0 -MeterOnCommand=shadowlength,1;textglowmode,'TextGlowMode_Inner' -MeterSetCommand=%function(self,param) \ - if param.CustomDifficulty then \ - self:diffuse(CustomDifficultyToColor(param.CustomDifficulty)); \ - self:shadowcolor(CustomDifficultyToDarkColor(param.CustomDifficulty)); \ - end; \ - if param.Meter then \ - if param.Meter >= 100 then \ - self:zoom(0.8); \ - else \ - self:zoom(1); \ - end; \ - end; \ -end; -# -ShowDescription=true -DescriptionX=-20 -DescriptionY=GetGamePrefB("AutoSetStyle") and -5 or 0 -# DescriptionY=GetUserPrefB("UserPrefAutoSetStyle") and -5 or 0 -DescriptionOnCommand=shadowlength,1;uppercase,true;zoom,0.75;maxwidth,128+8 -DescriptionSetCommand=%function(self,param) \ - if self:GetText() == "" then \ - self:settext("Edit"); \ - end; \ - if param.CustomDifficulty then \ - self:diffuse(CustomDifficultyToColor(param.CustomDifficulty)); \ - self:shadowcolor(CustomDifficultyToDarkColor(param.CustomDifficulty)); \ - end; \ - (cmd(finishtweening;diffusealpha,0;addx,-4;smooth,0.125;addx,4;diffusealpha,1))(self); \ -end; -# -ShowAutogen=false -AutogenX=40 -AutogenY=0 -AutogenOnCommand= -AutogenSetCommand=%function(self,param) if param.Difficulty then self:diffuse(CustomDifficultyToLightColor(param.Difficulty)); self:strokecolor(CustomDifficultyToDarkColor(param.Difficulty)); end end -# -ShowStepsType=GetGamePrefB("AutoSetStyle") -# ShowStepsType=GetUserPrefB("UserPrefAutoSetStyle") -StepsTypeX=-20 -StepsTypeY=7 -StepsTypeOnCommand=zoom,0.45 [StepsDisplayEvaluation] Fallback="StepsDisplay" -[StepsDisplayListRow] -# -CapitalizeDifficultyNames=false -NumShownItems=5 -ItemsSpacingY=24 -MoveCommand=decelerate,0.3 -# -FrameX= -FrameY=0 -FrameOnCommand= -FrameOffCommand= -FrameSetCommand=%function(self,param) \ - if param.CustomDifficulty then \ - self:diffuse(ColorMidTone( CustomDifficultyToColor(param.CustomDifficulty) )); \ - else \ - self:diffuse(color('1,1,1,1')); \ - end; \ -end; -# -ShowTicks=false -NumTicks=10 -MaxTicks=10 -TicksSetCommand= -# -ShowMeter=true -ZeroMeterString="0" -MeterX=56 -MeterY=0 -MeterOnCommand=shadowlength,1;zoom,0.65;textglowmode,'TextGlowMode_Inner'; -MeterOffCommand= -MeterSetCommand=%function(self,param) \ - if param.CustomDifficulty then \ - self:diffuse(CustomDifficultyToColor(param.CustomDifficulty)); \ - self:shadowcolor(CustomDifficultyToDarkColor(param.CustomDifficulty)); \ - end; \ - if param.Meter then \ - if param.Meter >= 10 then \ - self:textglowmode('TextGlowMode_Inner'); \ - self:glowshift(); \ - else \ - self:stopeffect(); \ - end; \ - end; \ -end; -# -ShowDescription=true -DescriptionX=GetGamePrefB("AutoSetStyle") and (-64-8+20) or (-64-8) -# DescriptionX=GetUserPrefB("UserPrefAutoSetStyle") and (-64-8+20) or (-64-8) -DescriptionY=0 -DescriptionOnCommand=shadowlength,1;horizalign,left;zoom,0.65;maxwidth,128+8-20;uppercase,true; -DescriptionOffCommand= -DescriptionSetCommand=%function(self,param) \ - if self:GetText() == "" then \ - self:settext("Edit"); \ - end; \ - if param.CustomDifficulty then \ - self:diffuse(CustomDifficultyToColor(param.CustomDifficulty)); \ - self:shadowcolor(CustomDifficultyToDarkColor(param.CustomDifficulty)); \ - end; \ -end; -# -ShowAutogen=true -AutogenX=0 -AutogenY=0 -#AutogenOnCommand=diffuseshift;effectcolor1,Colors.Alpha( Color("Green") , 0.5 );effectcolor2,ColorLightTone( Color("Green") ); -AutogenOnCommand=blend,Blend.Add;diffuseshift;effectcolor1,color("#FFCC00FF");effectcolor2,color("#FFCC0088"); -AutogenSetCommand= -# -ShowStepsType=GetGamePrefB("AutoSetStyle") -# ShowStepsType=GetUserPrefB("UserPrefAutoSetStyle") -StepsTypeX=-64-8 -StepsTypeY=0 -StepsTypeOnCommand= -StepsTypeSetCommand= - [StreamDisplay] ; a simple bar life meter: ; PillTransformFunction=function(self,offsetFromCenter,itemIndex,numItems) local native_width=32; local zoomed_width=12; self:zoomx(zoomed_width/native_width); self:x((itemIndex-(numItems/2))*zoomed_width); end @@ -715,21 +516,32 @@ end; # end; TextureCoordScaleX=1 NumPills=1 -AlwaysBounceNormalBar=false [TextBanner] TitleOnCommand=horizalign,left;shadowlength,1; SubtitleOnCommand=horizalign,left;shadowlength,1; ArtistOnCommand=horizalign,left;shadowlength,1;skewx,-0.2 ArtistPrependString="" -AfterSetCommand=%TextBannerAfterSet + +[WheelNotifyIcon] + +[Screen] + +[ScreenDebugOverlay] [ScreenSystemLayer] CreditsP1OnCommand=horizalign,left;vertalign,bottom;zoom,0.675;shadowlength,1;diffusebottomedge,PlayerColor(PLAYER_1); -CreditsP1OffCommand= # CreditsP2OnCommand=horizalign,right;vertalign,bottom;zoom,0.675;shadowlength,1;diffusebottomedge,PlayerColor(PLAYER_2); -CreditsP2OffCommand= + +[ScreenConsoleOverlay] + +[ScreenInstallOverlay] + +[ScreenSyncOverlay] + +[ScreenStatsOverlay] + [ScreenWithMenuElements] WaitForChildrenBeforeTweening=true @@ -780,89 +592,19 @@ ArcadeOverlay.TextX=SCREEN_CENTER_X ArcadeOverlay.TextY=SCREEN_BOTTOM-48 ArcadeOverlay.TextOnCommand= ArcadeOverlay.TextOffCommand= + [ScreenWithMenuElementsBlank] ShowHeader=false ShowFooter=false -[ScreenOptions] -DisqualifyP1X=SCREEN_CENTER_X-176 -DisqualifyP1Y=SCREEN_BOTTOM-98 -DisqualifyP1OnCommand=draworder,100;zoom,0.5;shadowlength,1;player,PLAYER_1 -DisqualifyP1OffCommand= -DisqualifyP2X=SCREEN_CENTER_X+176 -DisqualifyP2Y=SCREEN_BOTTOM-98 -DisqualifyP2OnCommand=draworder,100;zoom,0.5;shadowlength,1;player,PLAYER_2 -DisqualifyP2OffCommand= +[ScreenSelectMaster] -ContainerOnCommand=x,-SCREEN_WIDTH;decelerate,0.35;x,SCREEN_LEFT -# PageOnCommand=fadetop,0.125;fadebottom,0.125;cropbottom,0.5;croptop,0.5;decelerate,0.25;croptop,0;cropbottom,0;fadetop,0;fadebottom,0; -CursorOnCommand= - -LineHighlightOnCommand=cropleft,0.1;cropright,0.1;zoomx,1.25;fadeleft,0.05;faderight,0.05;diffuseshift;effectcolor2,color("1,1,1,0.5");effectcolor1,color("1,1,1,0.25");effectclock,'beat' -LineHighlightChangeCommand=linear,0.1;diffuse,Color("White");diffuseshift;effectcolor2,color("1,1,1,0.5");effectcolor1,color("1,1,1,0.25") -LineHighlightChangeToExitCommand=linear,0.1;diffuse,Color("Red");diffuseshift;effectcolor2,color("1,0,0,0.5");effectcolor1,color("1,0,0,0.25") - -[ScreenMiniMenu] -HeaderX=SCREEN_CENTER_X -HeaderY=SCREEN_TOP -HeaderOnCommand=draworder,100;visible,false -HeaderOffCommand= - -LineHighlightOnCommand=cropleft,0.1;cropright,0.1;zoomx,1.3;fadeleft,0.25;faderight,0.25;diffusealpha,0.375 -LineHighlightChangeCommand= -LineHighlightChangeToExitCommand= - -[ScreenMiniMenuContext] -PageOnCommand=visible,false -LineHighlightX=SCREEN_CENTER_X/2 - -TitleX=SCREEN_CENTER_X -TitleOnCommand=shadowlength,1; -ItemsStartX=SCREEN_CENTER_X -ItemsEndX=SCREEN_CENTER_X -ItemsGapX=14 -ItemsLongRowP1X=SCREEN_CENTER_X -ItemsLongRowP2X=SCREEN_CENTER_X -ItemsLongRowSharedX=SCREEN_CENTER_X - -[ScreenOptionsTheme] -Fallback="ScreenOptionsServiceChild" -NextScreen="ScreenOptionsExtended" -PrevScreen="ScreenOptionsExtended" -LineNames="gNotePos,gAuto,gScore,gSScore,gSDisp,gOpts,gLongFail,gComboUnderField,FlashyCombo,GameplayFooter" -LinegNotePos="lua,GamePrefNotePosition()" -LinegScore="lua,UserPrefGameplayShowScore()" -LinegSScore="lua,UserPrefSpecialScoringMode()" -LinegSDisp="lua,UserPrefGameplayShowStepsDisplay()" -LinegOpts="lua,UserPrefShowLotsaOptions()" -LinegAuto="lua,GamePrefAutoSetStyle()" -LinegLongFail="lua,UserPrefLongFail()" -LinegComboUnderField="lua,GamePrefComboUnderField()" -LineFlashyCombo="lua,UserPrefFlashyCombo()" -LineGameplayFooter="lua,UserPrefGameplayFooter()" -[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" -LineLF="lua,UserPrefLongFail()" -LineRollCombo="lua,GamePrefComboOnRolls()" -LineFlashyCombo="lua,UserPrefFlashyCombo()" -[ScreenOptionsAdvanced] -LineNames="2,3,4,8,11,13,14,15,16,28,29,30,RollCombo" -LineRollCombo="lua,GamePrefComboOnRolls()" -[ScreenOptionsService] -ShowHeader=false - -# ScreenOptionsSystemDirection" - -NumRowsShown=14 -RowPositionTransformFunction=function(self,offsetFromCenter,itemIndex,numItems) self:y(SCREEN_CENTER_Y-170+24*offsetFromCenter) end - -SeparateExitRow=false -SeparateExitRowY=SCREEN_BOTTOM-40 +[ScreenSelectMasterBlank] [ScreenTextEntry] QuestionOnCommand=diffuse,Color("Orange");diffusetopedge,BoostColor(Color("Orange"),1.5);wrapwidthpixels,600 AnswerOnCommand=diffuse,Color("Blue");glowshift; -KeysInitCommand=zoom,0.8;shadowlength,0 + [ScreenInit] PrepareScreens="ScreenTitleMenu,ScreenTitleJoin" @@ -873,7 +615,6 @@ PersistScreens="ScreenInit,ScreenTitleJoin,ScreenTitleMenu" ShowHeader=false ShowFooter=false # -ShowScroller=true WrapScroller=false ScrollerTransform=function(self,offset,itemIndex,numItems) self:y((28)*(itemIndex-(numItems-1)/2)); end; ScrollerSecondsPerItem=0 @@ -946,13 +687,17 @@ ExplanationX=SCREEN_CENTER_X ExplanationY=SCREEN_BOTTOM-100 ExplanationOnCommand=shadowlength,1;zoom,0.75;maxwidth,SCREEN_WIDTH/0.75; ExplanationOffCommand= + + [ScreenProfileLoad] # ShowHeader=true ShowFooter=true ShowHelp=true + [ScreenSelectProfile] WaitForChildrenBeforeTweening=true + [ScreenSelectStyle] UpdateOnMesage="" # @@ -961,17 +706,6 @@ FOV=90 PerChoiceScrollElement=false PerChoiceIconElement=false # -DefaultChoice="Single" -ChoiceNames=GameCompatibleModes() -# -OptionOrderAuto="1:2,2:1" -ChoiceSingle="name,Single;style,single;screen,"..Branch.AfterSelectPlayMode() -ChoiceDouble="name,Double;style,double;screen,"..Branch.AfterSelectPlayMode() -ChoiceSolo="name,Solo;style,solo;screen,"..Branch.AfterSelectPlayMode() -ChoiceVersus="name,Versus;style,versus;screen,"..Branch.AfterSelectPlayMode() -ChoiceCouple="name,Couple;style,couple;screen,"..Branch.AfterSelectPlayMode() -ChoiceHalfDouble="name,HalfDouble;style,halfdouble;screen,"..Branch.AfterSelectPlayMode() -Choice5Keys="name,5Keys;style,single5;;screen,"..Branch.AfterSelectPlayMode() Choice7Keys="name,7Keys;style,single7;screen,"..Branch.AfterSelectPlayMode() Choice10Keys="name,10Keys;style,double10;screen,"..Branch.AfterSelectPlayMode() Choice14Keys="name,14Keys;style,double14;screen,"..Branch.AfterSelectPlayMode() @@ -1106,6 +840,10 @@ IconChoiceEndlessY=SCREEN_BOTTOM-88 IconChoiceEndlessOnCommand=zoom,0;bounceend,0.35;zoom,0.8 IconChoiceEndlessOffCommand=linear,0.1175;zoomx,0 +[ScreenSelectCharacter] + +[ScreenGameInformation] + [ScreenSelectMusic] UsePlayerSelectMenu=false # OptionsMenuAvailable=(getenv(sMode) ~= Oni) @@ -1272,23 +1010,7 @@ CDTitleBackCommand=cullmode,'CullMode_Back' CDTitleOnCommand=draworder,106;shadowlength,1;zoom,0.75;diffusealpha,1;zoom,0;bounceend,0.35;zoom,0.75;spin;effectmagnitude,0,180,0; CDTitleOffCommand=bouncebegin,0.15;zoomx,0; # -ScoreFrameP1X= -ScoreFrameP1Y= -ScoreFrameP1OnCommand=visible,false -ScoreFrameP1OffCommand= -ScoreP1X= -ScoreP1Y= -ScoreP1OnCommand=visible,false -ScoreP1OffCommand= # -ScoreP2X= -ScoreP2Y= -ScoreP2OnCommand=visible,false -ScoreP2OffCommand= -ScoreFrameP2X= -ScoreFrameP2Y= -ScoreFrameP2OnCommand=visible,false -ScoreFrameP2OffCommand= # ScoreP1SortChangeCommand=stoptweening; ScoreP2SortChangeCommand=stoptweening; @@ -1320,13 +1042,8 @@ PercentScoreP2X=SCREEN_CENTER_X+240-1 PercentScoreP2Y=SCREEN_BOTTOM-60 PercentScoreP2OnCommand=player,PLAYER_2;addy,SCREEN_CENTER_Y;decelerate,0.35;addy,-SCREEN_CENTER_Y PercentScoreP2OffCommand=bouncebegin,0.15;zoomx,0; + [ScreenSelectCourse] -#~ ScreenInitCommand=%function(self) \ - #~ GAMESTATE:ApplyGameCommand("sort,AllCourses",PLAYER_1); \ - #~ GAMESTATE:ApplyGameCommand("sort,AllCourses",PLAYER_2); \ -#~ end; -# -DefaultSort="Nonstop" # ShowDifficultyList=false ShowCourseContentsList=true @@ -1339,73 +1056,272 @@ ShowPaneDisplayFrameP1=false ShowPaneDisplayTextP1=false ShowPaneDisplayFrameP2=false ShowPaneDisplayTextP2=false -[ScreenNetSelectMusic] -StepsDisplayP1X=SCREEN_CENTER_X-240 -StepsDisplayP1Y=SCREEN_CENTER_Y+185 -StepsDisplayP1OnCommand=horizalign,right;zoomx,0.0;zoomy,0.0;linear,0.5;zoomy,1.0;zoomx,1.0 -StepsDisplayP1OffCommand=linear,0.5;zoomx,0.0;zoomy,0.0 -#--# -StepsDisplayP2X=SCREEN_CENTER_X-110 -StepsDisplayP2Y=SCREEN_CENTER_Y+185 -StepsDisplayP2OnCommand=horizalign,right;zoomx,0.0;zoomy,0.0;linear,0.5;zoomy,1.0;zoomx,1.0 -StepsDisplayP2OffCommand=linear,0.5;zoomx,0.0;zoomy,0.0 -#====# -BPMDisplayX=SCREEN_CENTER_X-160-90+2 -BPMDisplayY=SCREEN_CENTER_Y+156 -BPMDisplayOnCommand=finishtweening;horizalign,left;strokecolor,Color("Outline");maxwidth,128;addx,320;zoomx,0;decelerate,0.35;addx,-320;zoomx,1 -BPMDisplayOffCommand=bouncebegin,0.15;zoomx,0; -#--# -ShowBPMLabel=true -BPMLabelX=SCREEN_CENTER_X-160-90 -BPMLabelY=SCREEN_CENTER_Y+156 -BPMLabelOnCommand=horizalign,right;zoom,0.75;strokecolor,Color("Outline");addx,-SCREEN_CENTER_X;decelerate,0.35;addx,SCREEN_CENTER_X -BPMLabelOffCommand=bouncebegin,0.15;zoomx,0; -UsersX=SCREEN_CENTER_X-272 -UsersY=SCREEN_CENTER_Y-172 -UsersDX=40 -UsersAY=16 -UsersOnCommand=draworder,2;zoom,0.75;shadowlength,1 +[CourseCodeDetector] + +[StepsDisplay] +FrameLoadCommand=%function(self,param) end; +NumTicks=10 +MaxTicks=14 +TicksX=0 +TicksY=0 +TicksOnCommand=shadowlength,0; +TicksSetCommand=%function(self,param) end; +MeterX=56-32 +MeterY=0 +MeterOnCommand=shadowlength,1;textglowmode,'TextGlowMode_Inner' +MeterSetCommand=%function(self,param) \ + if param.CustomDifficulty then \ + self:diffuse(CustomDifficultyToColor(param.CustomDifficulty)); \ + self:shadowcolor(CustomDifficultyToDarkColor(param.CustomDifficulty)); \ + end; \ + if param.Meter then \ + if param.Meter >= 100 then \ + self:basezoom(0.8); \ + self:glowshift(); \ + elseif param.Meter >= 10 then \ + self:basezoom(1); \ + self:glowshift(); \ + else \ + self:basezoom(1); \ + self:stopeffect(); \ + end; \ + end; \ +end; # -ShowDifficultyDisplay=true -DifficultyDisplayX=SCREEN_CENTER_X-240+200 -DifficultyDisplayY=SCREEN_CENTER_Y+185 -DifficultyDisplayOnCommand=draworder,105;fov,90;zoom,1;zoomy,0;sleep,0.35;smooth,0.35;zoomy,1 -DifficultyDisplayOffCommand=linear,0.25;zoomy,0; +ShowDescription=true +DescriptionX=-20-32 +DescriptionY=GetGamePrefB("AutoSetStyle") and -5 or 0 +# DescriptionY=GetUserPrefB("UserPrefAutoSetStyle") and -5 or 0 +DescriptionOnCommand=shadowlength,1;uppercase,true;zoom,0.75;maxwidth,128+8 +DescriptionSetCommand=%function(self,param) \ + if self:GetText() == "" then \ + self:settext("Edit"); \ + end; \ + if param.CustomDifficulty then \ + self:diffuse(CustomDifficultyToColor(param.CustomDifficulty)); \ + self:shadowcolor(CustomDifficultyToDarkColor(param.CustomDifficulty)); \ + end; \ +end; +# +ShowAutogen=false +AutogenX=40-32 +AutogenY=0 +AutogenOnCommand= +AutogenSetCommand=%function(self,param) if param.Difficulty then self:diffuse(CustomDifficultyToLightColor(param.Difficulty)); self:strokecolor(CustomDifficultyToDarkColor(param.Difficulty)); end end +# +ShowStepsType=GetGamePrefB("AutoSetStyle") +# ShowStepsType=GetUserPrefB("UserPrefAutoSetStyle") +StepsTypeX=-20-32 +StepsTypeY=7 +StepsTypeOnCommand=zoom,0.45 + +[StepsDisplayGameplay] +Fallback="StepsDisplay" + +# +ShowMeter=true +ZeroMeterString="?" +MeterX=56 +MeterY=0 +MeterOnCommand=shadowlength,1;textglowmode,'TextGlowMode_Inner' +MeterSetCommand=%function(self,param) \ + if param.CustomDifficulty then \ + self:diffuse(CustomDifficultyToColor(param.CustomDifficulty)); \ + self:shadowcolor(CustomDifficultyToDarkColor(param.CustomDifficulty)); \ + end; \ + if param.Meter then \ + if param.Meter >= 100 then \ + self:zoom(0.8); \ + else \ + self:zoom(1); \ + end; \ + end; \ +end; +# +ShowDescription=true +DescriptionX=-20 +DescriptionY=GetGamePrefB("AutoSetStyle") and -5 or 0 +# DescriptionY=GetUserPrefB("UserPrefAutoSetStyle") and -5 or 0 +DescriptionOnCommand=shadowlength,1;uppercase,true;zoom,0.75;maxwidth,128+8 +DescriptionSetCommand=%function(self,param) \ + if self:GetText() == "" then \ + self:settext("Edit"); \ + end; \ + if param.CustomDifficulty then \ + self:diffuse(CustomDifficultyToColor(param.CustomDifficulty)); \ + self:shadowcolor(CustomDifficultyToDarkColor(param.CustomDifficulty)); \ + end; \ + (cmd(finishtweening;diffusealpha,0;addx,-4;smooth,0.125;addx,4;diffusealpha,1))(self); \ +end; +# +ShowAutogen=false +AutogenX=40 +AutogenY=0 +AutogenOnCommand= +AutogenSetCommand=%function(self,param) if param.Difficulty then self:diffuse(CustomDifficultyToLightColor(param.Difficulty)); self:strokecolor(CustomDifficultyToDarkColor(param.Difficulty)); end end +# +ShowStepsType=GetGamePrefB("AutoSetStyle") +# ShowStepsType=GetUserPrefB("UserPrefAutoSetStyle") +StepsTypeX=-20 +StepsTypeY=7 +StepsTypeOnCommand=zoom,0.45 + +[ScreenOptions] +DisqualifyP1X=SCREEN_CENTER_X-176 +DisqualifyP1Y=SCREEN_BOTTOM-98 +DisqualifyP1OnCommand=draworder,100;zoom,0.5;shadowlength,1;player,PLAYER_1 +DisqualifyP2X=SCREEN_CENTER_X+176 +DisqualifyP2Y=SCREEN_BOTTOM-98 +DisqualifyP2OnCommand=draworder,100;zoom,0.5;shadowlength,1;player,PLAYER_2 + +ContainerOnCommand=x,-SCREEN_WIDTH;decelerate,0.35;x,SCREEN_LEFT +CursorOnCommand= + +LineHighlightOnCommand=cropleft,0.1;cropright,0.1;zoomx,1.25;fadeleft,0.05;faderight,0.05;diffuseshift;effectcolor2,color("1,1,1,0.5");effectcolor1,color("1,1,1,0.25");effectclock,'beat' +LineHighlightChangeCommand=linear,0.1;diffuse,Color("White");diffuseshift;effectcolor2,color("1,1,1,0.5");effectcolor1,color("1,1,1,0.25") +LineHighlightChangeToExitCommand=linear,0.1;diffuse,Color("Red");diffuseshift;effectcolor2,color("1,0,0,0.5");effectcolor1,color("1,0,0,0.25") + +[ScreenOptionsMaster] + +[ScreenOptionsSimple] + +[ScreenOptionsSimpleService] + +[ScreenOptionsService] +ShowHeader=false + +# ScreenOptionsSystemDirection" + +NumRowsShown=14 +RowPositionTransformFunction=function(self,offsetFromCenter,itemIndex,numItems) self:y(SCREEN_CENTER_Y-170+24*offsetFromCenter) end + +SeparateExitRow=false +SeparateExitRowY=SCREEN_BOTTOM-40 + +[ScreenOptionsExtended] + +[ScreenOptionsServiceChild] + +[ScreenOptionsServiceExtendedChild] + +[ScreenMiniMenu] +HeaderY=SCREEN_TOP +HeaderOnCommand=draworder,100;visible,false +LineHighlightOnCommand=cropleft,0.1;cropright,0.1;zoomx,1.3;fadeleft,0.25;faderight,0.25;diffusealpha,0.375 +LineHighlightChangeCommand= +LineHighlightChangeToExitCommand= + +[OptionRowMiniMenu] +Fallback="OptionRow" +TitleX=SCREEN_CENTER_X-320+48 +TitleOnCommand=horizalign,left;shadowlength,0;uppercase,true;zoom,0.6375;strokecolor,Color("Black"); +ItemsLongRowP1X=SCREEN_CENTER_X-240 +ItemsLongRowP2X=SCREEN_CENTER_X+240 +ItemsLongRowSharedX=SCREEN_CENTER_X+200 +ItemOnCommand=zoom,0.6375 + +ColorSelected=color("1,1,1,1") +ColorNotSelected=color("0.9,0.9,0.9,1") + +[ScreenMiniMenuContext] +PageOnCommand=visible,false +LineHighlightX=SCREEN_CENTER_X/2 + +TitleX=SCREEN_CENTER_X +TitleOnCommand=shadowlength,1; +ItemsStartX=SCREEN_CENTER_X +ItemsEndX=SCREEN_CENTER_X +ItemsGapX=14 +ItemsLongRowP1X=SCREEN_CENTER_X +ItemsLongRowP2X=SCREEN_CENTER_X +ItemsLongRowSharedX=SCREEN_CENTER_X + +[OptionRowMiniMenuContext] + +[ScreenMapControllers] + +[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" +LineLF="lua,UserPrefLongFail()" +LineRollCombo="lua,UserPrefComboOnRolls()" +LineFlashyCombo="lua,UserPrefFlashyCombo()" + +[ScreenOptionsGraphicsSound] + +[ScreenOptionsAdvanced] +LineNames="2,3,4,8,11,13,14,15,16,28,29,30,RollCombo" +LineRollCombo="lua,UserPrefComboOnRolls()" + +[ScreenAppearanceOptions] + +[ScreenOptionsUI] + +[ScreenOptionsInput] + +[ScreenOptionsArcade] + +[ScreenOptionsTheme] +Fallback="ScreenOptionsServiceChild" +NextScreen="ScreenOptionsExtended" +PrevScreen="ScreenOptionsExtended" +LineNames="gNotePos,gAuto,gScore,gSScore,gSDisp,gOpts,gLongFail,gComboUnderField,FlashyCombo,GameplayFooter" +LinegNotePos="lua,UserPrefNotePosition()" +LinegScore="lua,UserPrefGameplayShowScore()" +LinegSScore="lua,UserPrefSpecialScoringMode()" +LinegSDisp="lua,UserPrefGameplayShowStepsDisplay()" +LinegOpts="lua,UserPrefShowLotsaOptions()" +LinegAuto="lua,UserPrefAutoSetStyle()" +LinegLongFail="lua,UserPrefLongFail()" +LinegComboUnderField="lua,UserPrefComboUnderField()" +LineFlashyCombo="lua,UserPrefFlashyCombo()" +LineGameplayFooter="lua,UserPrefGameplayFooter()" + +[ScreenSelectGame] + +[ScreenNetworkOptions] + +[ScreenOptionsManageProfiles] + +[ScreenOptionsEditProfile] + +[ScreenReloadSongs] + [ScreenPlayerOptions] LineNames=GetDefaultOptionLines() -#~ LineNames="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17" -Line1="lua,SpeedMods()" -#~ Line1="list,Speed" -Line2="list,Accel" -Line3="list,Effect" -Line4="list,Appearance" -Line5="list,Turn" -Line6="list,Insert" -LineR="list,Remove" -Line7="list,Scroll" -Line8="list,NoteSkins" -Line9="list,Holds" -Line10="list,Mines" -Line11="list,Attacks" -Line12="list,PlayerAutoPlay" -Line13="list,Hide" -Line14="list,Persp" -Line15="list,ScoreDisplay" -Line16="list,Steps" Line17="lua,OptionRowProTiming()" Line18="list,Characters" -[ScreenEditOptions] -Line1="lua,SpeedMods()" -[ScreenStageInformation] -ForceTimer=true -TimerOnCommand=visible,false -TimerSeconds=3 +[ScreenPlayerOptionsRestricted] + +[ScreenSplash] + +[ScreenExit] + +[ScreenAttract] + # -WaitForChildrenBeforeTweening=true +# +# +# + +[ScreenRanking] +# + +# + +# + +# + +# + +# 05 # B + +# 05 # C [ScreenGameplay] -ShowLifeMeterForDisabledPlayers=false # SongMeterDisplayX=SCREEN_CENTER_X SongMeterDisplayY=SCREEN_TOP+50 @@ -1432,7 +1348,7 @@ ShowBPMDisplay=true BPMDisplayX=Center1Player() and (GAMESTATE:GetMasterPlayerNumber() == PLAYER_1 and THEME:GetMetric(Var "LoadingScreen","PlayerP1OnePlayerOneSideX") or THEME:GetMetric(Var "LoadingScreen","PlayerP2OnePlayerOneSideX")) or SCREEN_CENTER_X # BPMDisplayX=(PREFSMAN:GetPreference("Center1Player") and GAMESTATE:GetNumPlayersEnabled() == 1) and (GAMESTATE:GetMasterPlayerNumber() == PLAYER_1 and THEME:GetMetric(Var "LoadingScreen","PlayerP1OnePlayerOneSideX") or THEME:GetMetric(Var "LoadingScreen","PlayerP2OnePlayerOneSideX")) or SCREEN_CENTER_X BPMDisplayY=SCREEN_BOTTOM-16 -# BPMDisplayOnCommand=zoom,0.5; +BPMDisplayOnCommand=draworder,101 BPMDisplayOffCommand=bounceend,0.25;zoom,0 # ShowStageDisplay=false @@ -1444,7 +1360,7 @@ StageDisplayOffCommand=bounceend,0.25;zoom,0 ShowScoreFrame=GetUserPrefB("GameplayFooter"); ScoreFrameX=SCREEN_CENTER_X ScoreFrameY=SCREEN_BOTTOM+4 -ScoreFrameOnCommand=vertalign,bottom;zoomtowidth,SCREEN_WIDTH+4;diffuse,color("#ffd400");addy,80;sleep,2;decelerate,0.5;addy,-80; +ScoreFrameOnCommand=draworder,100;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") @@ -1508,47 +1424,47 @@ DeltaSecondsP2OffCommand= ScoreP1X=Center1Player() and SCREEN_CENTER_X or THEME:GetMetric(Var "LoadingScreen","PlayerP1OnePlayerOneSideX") # ScoreP1X=(PREFSMAN:GetPreference("Center1Player") and GAMESTATE:GetNumPlayersEnabled() == 1) and SCREEN_CENTER_X or THEME:GetMetric(Var "LoadingScreen","PlayerP1OnePlayerOneSideX") ScoreP1Y=SCREEN_BOTTOM-28 -ScoreP1OnCommand=visible,GetUserPrefB("UserPrefGameplayShowScore");diffuse,PlayerColor(PLAYER_1);sleep,3+0.3;smooth,0.5;y,SCREEN_BOTTOM-50 +ScoreP1OnCommand=draworder,101;visible,GetUserPrefB("UserPrefGameplayShowScore");diffuse,PlayerColor(PLAYER_1);sleep,3+0.3;smooth,0.5;y,SCREEN_BOTTOM-50 ScoreP1OffCommand= ScoreP2X=Center1Player() and SCREEN_CENTER_X or THEME:GetMetric(Var "LoadingScreen","PlayerP2OnePlayerOneSideX") # ScoreP2X=(PREFSMAN:GetPreference("Center1Player") and GAMESTATE:GetNumPlayersEnabled() == 1) and SCREEN_CENTER_X or THEME:GetMetric(Var "LoadingScreen","PlayerP2OnePlayerOneSideX") ScoreP2Y=SCREEN_BOTTOM-28 -ScoreP2OnCommand=visible,GetUserPrefB("UserPrefGameplayShowScore");diffuse,PlayerColor(PLAYER_2);sleep,3+0.3;smooth,0.5;y,SCREEN_BOTTOM-50 +ScoreP2OnCommand=draworder,101;visible,GetUserPrefB("UserPrefGameplayShowScore");diffuse,PlayerColor(PLAYER_2);sleep,3+0.3;smooth,0.5;y,SCREEN_BOTTOM-50 ScoreP2OffCommand= # StepsDescriptionP1X=Center1Player() and SCREEN_CENTER_X or THEME:GetMetric(Var "LoadingScreen","PlayerP1OnePlayerOneSideX") # StepsDescriptionP1X=(PREFSMAN:GetPreference("Center1Player") and GAMESTATE:GetNumPlayersEnabled() == 1) and SCREEN_CENTER_X or THEME:GetMetric(Var "LoadingScreen","PlayerP1OnePlayerOneSideX") StepsDescriptionP1Y=SCREEN_CENTER_Y-24 -StepsDescriptionP1OnCommand=zoom,0.5;diffusealpha,0;addy,-10;smooth,0.3;diffusealpha,1;addy,10;sleep,3;smooth,0.5;addy,-10;diffusealpha,0 +StepsDescriptionP1OnCommand=draworder,101;zoom,0.5;diffusealpha,0;addy,-10;smooth,0.3;diffusealpha,1;addy,10;sleep,3;smooth,0.5;addy,-10;diffusealpha,0 StepsDescriptionP1OffCommand= StepsDescriptionP2X=Center1Player() and SCREEN_CENTER_X or THEME:GetMetric(Var "LoadingScreen","PlayerP2OnePlayerOneSideX") # StepsDescriptionP2X=(PREFSMAN:GetPreference("Center1Player") and GAMESTATE:GetNumPlayersEnabled() == 1) and SCREEN_CENTER_X or THEME:GetMetric(Var "LoadingScreen","PlayerP2OnePlayerOneSideX") StepsDescriptionP2Y=SCREEN_CENTER_Y-24 -StepsDescriptionP2OnCommand=zoom,0.5;diffusealpha,0;addy,-10;smooth,0.3;diffusealpha,1;addy,10;sleep,3;smooth,0.5;addy,-10;diffusealpha,0 +StepsDescriptionP2OnCommand=draworder,101;zoom,0.5;diffusealpha,0;addy,-10;smooth,0.3;diffusealpha,1;addy,10;sleep,3;smooth,0.5;addy,-10;diffusealpha,0 StepsDescriptionP2OffCommand= # PlayerOptionsP1X=Center1Player() and SCREEN_CENTER_X or THEME:GetMetric(Var "LoadingScreen","PlayerP1OnePlayerOneSideX") # PlayerOptionsP1X=(PREFSMAN:GetPreference("Center1Player") and GAMESTATE:GetNumPlayersEnabled() == 1) and SCREEN_CENTER_X or THEME:GetMetric(Var "LoadingScreen","PlayerP1OnePlayerOneSideX") PlayerOptionsP1Y=SCREEN_CENTER_Y+24 -PlayerOptionsP1OnCommand=vertalign,top;wrapwidthpixels,256*2;zoom,0.5;diffusealpha,0;addy,10;smooth,0.3;diffusealpha,1;addy,-10;sleep,3;smooth,0.5;addy,10;diffusealpha,0 +PlayerOptionsP1OnCommand=draworder,101;vertalign,top;wrapwidthpixels,256*2;zoom,0.5;diffusealpha,0;addy,10;smooth,0.3;diffusealpha,1;addy,-10;sleep,3;smooth,0.5;addy,10;diffusealpha,0 PlayerOptionsP1OffCommand= PlayerOptionsP2X=Center1Player() and SCREEN_CENTER_X or THEME:GetMetric(Var "LoadingScreen","PlayerP2OnePlayerOneSideX") # PlayerOptionsP2X=(PREFSMAN:GetPreference("Center1Player") and GAMESTATE:GetNumPlayersEnabled() == 1) and SCREEN_CENTER_X or THEME:GetMetric(Var "LoadingScreen","PlayerP2OnePlayerOneSideX") PlayerOptionsP2Y=SCREEN_CENTER_Y+24 -PlayerOptionsP2OnCommand=vertalign,top;wrapwidthpixels,256*2;zoom,0.5;diffusealpha,0;addy,10;smooth,0.3;diffusealpha,1;addy,-10;sleep,3;smooth,0.5;addy,10;diffusealpha,0 +PlayerOptionsP2OnCommand=draworder,101;vertalign,top;wrapwidthpixels,256*2;zoom,0.5;diffusealpha,0;addy,10;smooth,0.3;diffusealpha,1;addy,-10;sleep,3;smooth,0.5;addy,10;diffusealpha,0 PlayerOptionsP2OffCommand= # StepsDisplayP1X=Center1Player() and SCREEN_CENTER_X or THEME:GetMetric(Var "LoadingScreen","PlayerP1OnePlayerOneSideX") # StepsDisplayP1X=(PREFSMAN:GetPreference("Center1Player") and GAMESTATE:GetNumPlayersEnabled() == 1) and SCREEN_CENTER_X or THEME:GetMetric(Var "LoadingScreen","PlayerP1OnePlayerOneSideX") StepsDisplayP1Y=SCREEN_CENTER_Y -StepsDisplayP1OnCommand=zoomy,0;linear,0.3;zoomy,1;sleep,3;queuecommand,( GetUserPrefB("UserPrefGameplayShowStepsDisplay") == true and "Show" or "Hide" ); +StepsDisplayP1OnCommand=draworder,101;zoomy,0;linear,0.3;zoomy,1;sleep,3;queuecommand,( GetUserPrefB("UserPrefGameplayShowStepsDisplay") == true and "Show" or "Hide" ); StepsDisplayP1ShowCommand=smooth,0.5;y,SCREEN_BOTTOM-20; StepsDisplayP1HideCommand=linear,0.5;zoomy,0 StepsDisplayP1OffCommand= StepsDisplayP2X=Center1Player() and SCREEN_CENTER_X or THEME:GetMetric(Var "LoadingScreen","PlayerP2OnePlayerOneSideX") # StepsDisplayP2X=(PREFSMAN:GetPreference("Center1Player") and GAMESTATE:GetNumPlayersEnabled() == 1) and SCREEN_CENTER_X or THEME:GetMetric(Var "LoadingScreen","PlayerP2OnePlayerOneSideX") StepsDisplayP2Y=SCREEN_CENTER_Y -StepsDisplayP2OnCommand=zoomy,0;linear,0.3;zoomy,1;sleep,3;queuecommand,( GetUserPrefB("UserPrefGameplayShowStepsDisplay") == true and "Show" or "Hide" ); +StepsDisplayP2OnCommand=draworder,101;zoomy,0;linear,0.3;zoomy,1;sleep,3;queuecommand,( GetUserPrefB("UserPrefGameplayShowStepsDisplay") == true and "Show" or "Hide" ); StepsDisplayP2ShowCommand=smooth,0.5;y,SCREEN_BOTTOM-20; StepsDisplayP2HideCommand=linear,0.5;zoomy,0 StepsDisplayP2OffCommand= @@ -1556,9 +1472,15 @@ StepsDisplayP2OffCommand= SongOptionsX=Center1Player() and (GAMESTATE:GetMasterPlayerNumber() == PLAYER_1 and THEME:GetMetric(Var "LoadingScreen","PlayerP1OnePlayerOneSideX") or THEME:GetMetric(Var "LoadingScreen","PlayerP2OnePlayerOneSideX")) or SCREEN_CENTER_X # SongOptionsX=(PREFSMAN:GetPreference("Center1Player") and GAMESTATE:GetNumPlayersEnabled() == 1) and (GAMESTATE:GetMasterPlayerNumber() == PLAYER_1 and THEME:GetMetric(Var "LoadingScreen","PlayerP1OnePlayerOneSideX") or THEME:GetMetric(Var "LoadingScreen","PlayerP2OnePlayerOneSideX")) or SCREEN_CENTER_X SongOptionsY=SCREEN_BOTTOM-32 -SongOptionsOnCommand=zoom,0.5 +SongOptionsOnCommand=draworder,101;zoom,0.5 SongOptionsOffCommand= # +LyricDisplaySetNoReverseCommand=x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y+160 +LyricDisplaySetReverseCommand=x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y-140 +# This is used if one player is in reverse and the other isn't. +LyricDisplaySetOneReverseCommand=x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y-160; +LyricDisplayDefaultColor=Color("White") +# OniGameOverP1X= OniGameOverP1Y= OniGameOverP1OnCommand= @@ -1583,21 +1505,9 @@ ActiveAttackListP2Y= ActiveAttackListP2OnCommand=visible,false ActiveAttackListP2OffCommand= # -LyricDisplaySetNoReverseCommand=x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y+160 -LyricDisplaySetReverseCommand=x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y-140 -# This is used if one player is in reverse and the other isn't. -LyricDisplaySetOneReverseCommand=x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y-160; -LyricDisplayDefaultColor=Color("White") -[ScreenGameplaySyncMachine] -SongMeterDisplayP1OnCommand=visible,false -SongMeterDisplayP2OnCommand=visible,false -StepsDescriptionP1OnCommand=visible,false -StepsDescriptionP2OnCommand=visible,false -StepsDisplayP1OnCommand=visible,false -StepsDisplayP2OnCommand=visible,false -PlayerOptionsP1OnCommand=visible,false -PlayerOptionsP2OnCommand=visible,false + +[ScreenGameplayShared] [ScreenEvaluation] Class="ScreenEvaluation" @@ -1925,6 +1835,7 @@ SongInformationX=SCREEN_CENTER_X SongInformationY=SCREEN_TOP+100 SongInformationOnCommand=playcommand,"Set";draworder,105 SongInformationOffCommand= + [ScreenEvaluationNormal] Fallback="ScreenEvaluation" # @@ -1979,65 +1890,94 @@ SmallBanner6Y=SCREEN_TOP+100+24 SmallBanner6OnCommand=zoom,0.5 SmallBanner6OffCommand= -[ScreenNetEvaluation] -UserTier02OrBetterCommand=diffuseshift;effectperiod,0.75;effectcolor1,color("1,0.95,0.8,1");effectcolor2,color("0.8,0.95,1,1") +[ScreenNameEntry] -# arcade stuff -[ScreenLogo] -TimerSeconds=10 -ShowLogo=true -LogoX=SCREEN_CENTER_X -LogoY=SCREEN_CENTER_Y-18 -LogoOnCommand=bob;effectperiod,4;effectmagnitude,0,5.25,0;zoom,0;bounceend,0.35;zoom,0.75 -LogoOffCommand=stopeffect;bouncebegin,0.35;zoom,0 +[ScreenProfileSave] -ArcadeOverlay.TextY=SCREEN_BOTTOM-60 -# -[ScreenTitleJoin] -ShowHelp=false -HelpText=Screen.String("HelpTextTitleJoin") -HelpY=SCREEN_CENTER_Y+100 -HelpOnCommand=visible,false;zoom,1;strokecolor,color("0.125,0.125,0.125,0.5");queuecommand,"Refresh" -HelpCoinIsertedMessageCommand=playcommand,"Refresh" -HelpCoinModeChangedMessageCommand=playcommand,"Refresh" -HelpRefreshCommand=%function(self) \ - local bCanPlay = GAMESTATE:EnoughCreditsToJoin(); \ - local bReady = GAMESTATE:GetNumSidesJoined() > 0; \ - if bCanPlay or bReady then \ - self:SetTipsColonSeperated(THEME:GetString( Var "LoadingScreen","HelpTextPlay")); \ - else \ - self:SetTipsColonSeperated(THEME:GetString( Var "LoadingScreen","HelpTextWait")); \ - end \ -end; -# -LogoX=SCREEN_CENTER_X -LogoY=SCREEN_CENTER_Y-28 -LogoOnCommand=bob;effectperiod,4;effectmagnitude,0,5.25,0;zoom,0;bounceend,0.35;zoom,0.75 -LogoOffCommand=stopeffect;bouncebegin,0.35;rotationz,360;zoom,0 +[ScreenProfileSaveSummary] -VersionInfoX=SCREEN_CENTER_X+114 -VersionInfoY=SCREEN_CENTER_Y+44 -VersionInfoOnCommand=settext,ProductVersion();horizalign,right;vertalign,bottom;bob;effectperiod,4;effectmagnitude,0,5.25,0;zoom,0;bounceend,0.35;zoom,0.65;shadowlength,1;shadowcolor,color("0.2,0.2,0.2,0.925"); +[ScreenGameOver] -ScrollerOnCommand=visible,false; +[ScreenPrompt] -ArcadeOverlay.TextY=SCREEN_BOTTOM-128 +[ScreenOptionsEdit] -[ScreenDemonstration] -SongMeterDisplayOnCommand=visible,false +[EditMenu] + +[TextBannerEditMode] + +[ScreenEditMenu] + +[ScreenEdit] + +[ScreenPracticeMenu] + +[PracticeMenu] + +[ScreenPractice] + +[ScreenEditOptions] +Line1="lua,SpeedMods()" + +[StepsDisplayEdit] +Fallback="StepsDisplayGameplay" + +[ScreenMiniMenuEditHelp] + +[OptionRowMiniMenuEditHelp] + +[ScreenMiniMenuMainMenu] + +[ScreenMiniMenuAreaMenu] + +[ScreenMiniMenuStepsInformation] + +[ScreenMiniMenuSongInformation] + +[ScreenMiniMenuTimingDataInformation] + +[ScreenMiniMenuBackgroundChange] + +[ScreenMiniMenuPreferences] + +[ScreenMiniMenuInsertTapAttack] + +[ScreenMiniMenuInsertCourseAttack] + +[ScreenMiniMenuCourseDisplay] + +[ScreenMiniMenuCourseOptions] + +[ScreenOptionsExportPackage] + +[ScreenOptionsManage] + +[OptionRowManage] + +[OptionRowCourseOverview] + +[ScreenOptionsManageCourses] + +[OptionRowCourse] + +[ScreenOptionsEditCourse] + +[OptionRowEditCourse] + +[ScreenOptionsCourseOverview] + +[ScreenGameplaySyncMachine] SongMeterDisplayP1OnCommand=visible,false SongMeterDisplayP2OnCommand=visible,false -LifeP1OnCommand=visible,false -LifeP2OnCommand=visible,false -ScoreP1OnCommand=visible,false -ScoreP2OnCommand=visible,false -StepsDisplayP1OnCommand=zoomy,0;linear,0.3;zoomy,1;sleep,3;smooth,0.5;y,SCREEN_BOTTOM-20;zoomy,0 -StepsDisplayP2OnCommand=zoomy,0;linear,0.3;zoomy,1;sleep,3;smooth,0.5;y,SCREEN_BOTTOM-20;zoomy,0 -ShowBPMDisplay=false -# -PlayMusic=false +StepsDescriptionP1OnCommand=visible,false +StepsDescriptionP2OnCommand=visible,false +StepsDisplayP1OnCommand=visible,false +StepsDisplayP2OnCommand=visible,false +PlayerOptionsP1OnCommand=visible,false +PlayerOptionsP2OnCommand=visible,false + +[PlayerSyncMachine] -# sm-ssc helper screens [ScreenHowToInstallSongs] Class="ScreenSelectMaster" Fallback="ScreenSelectMaster" @@ -2066,24 +2006,132 @@ DefaultChoice="WhereToFind" OptionOrderUp="5:4,4:3,3:2,2:1,1:5" OptionOrderDown="1:2,2:3,3:4,4:5,5:1" -[CustomScoring] -# So special scoring works properly, we zero this out -ComboAboveThresholdAddsToScoreBonus=0 -ComboScoreBonusThreshold=0 -ComboScoreBonusValue=0 -ComboMultiplier=0 -DoubleNoteScoreMultiplier=0 -TripleNoteScoreMultiplier=0 -QuadOrHigherNoteScoreMultiplier=0 -PointsW1=0 -PointsW2=0 -PointsW3=0 -PointsW4=0 -PointsW5=0 -PointsMiss=0 -PointsHitMine=0 -PointsCheckpointHit=0 -PointsCheckpointMiss=0 -PointsNone=0 -PointsHoldHeld=0 -PointsHoldLetGo=0 + +[ScreenSMOnlineLogin] + +[ScreenNetSelectBase] + +[ScreenNetSelectMusic] +BPMDisplayX=SCREEN_CENTER_X-160-90+2 +BPMDisplayY=SCREEN_CENTER_Y+156 +BPMDisplayOnCommand=finishtweening;horizalign,left;strokecolor,Color("Outline");maxwidth,128;addx,320;zoomx,0;decelerate,0.35;addx,-320;zoomx,1 +BPMDisplayOffCommand=bouncebegin,0.15;zoomx,0; + +StepsDisplayP1X=SCREEN_CENTER_X-240 +StepsDisplayP1Y=SCREEN_CENTER_Y+185 +StepsDisplayP1OnCommand=horizalign,right;zoomx,0.0;zoomy,0.0;linear,0.5;zoomy,1.0;zoomx,1.0 +StepsDisplayP1OffCommand=linear,0.5;zoomx,0.0;zoomy,0.0 +#--# +StepsDisplayP2X=SCREEN_CENTER_X-110 +StepsDisplayP2Y=SCREEN_CENTER_Y+185 +StepsDisplayP2OnCommand=horizalign,right;zoomx,0.0;zoomy,0.0;linear,0.5;zoomy,1.0;zoomx,1.0 +StepsDisplayP2OffCommand=linear,0.5;zoomx,0.0;zoomy,0.0 +#====# + +#--# +ShowBPMLabel=true +BPMLabelX=SCREEN_CENTER_X-160-90 +BPMLabelY=SCREEN_CENTER_Y+156 +BPMLabelOnCommand=horizalign,right;zoom,0.75;strokecolor,Color("Outline");addx,-SCREEN_CENTER_X;decelerate,0.35;addx,SCREEN_CENTER_X +BPMLabelOffCommand=bouncebegin,0.15;zoomx,0; + +UsersX=SCREEN_CENTER_X-272 +UsersY=SCREEN_CENTER_Y-172 +UsersDX=40 +UsersAY=16 +UsersOnCommand=draworder,2;zoom,0.75;shadowlength,1 +# +ShowDifficultyDisplay=true +DifficultyDisplayX=SCREEN_CENTER_X-240+200 +DifficultyDisplayY=SCREEN_CENTER_Y+185 +DifficultyDisplayOnCommand=draworder,105;fov,90;zoom,1;zoomy,0;sleep,0.35;smooth,0.35;zoomy,1 +DifficultyDisplayOffCommand=linear,0.25;zoomy,0; + +[StepsDisplayNet] + +[ScreenNetRoom] + +[RoomWheel] + +[RoomWheelItem] + +[RoomInfoDisplay] + +[ScreenSMOnlineSelectMusic] + +[ModIcon] + +[ModIconSelectMusic] + +[ModIconRow] + +[ModIconRowSelectMusic] + +[GraphDisplay] + +[ComboGraph] + +[ScreenNetEvaluation] +UserTier02OrBetterCommand=diffuseshift;effectperiod,0.75;effectcolor1,color("1,0.95,0.8,1");effectcolor2,color("0.8,0.95,1,1") + +# Arcade + +[ScreenLogo] +TimerSeconds=10 +ShowLogo=true +LogoX=SCREEN_CENTER_X +LogoY=SCREEN_CENTER_Y-18 +LogoOnCommand=bob;effectperiod,4;effectmagnitude,0,5.25,0;zoom,0;bounceend,0.35;zoom,0.75 +LogoOffCommand=stopeffect;bouncebegin,0.35;zoom,0 + +ArcadeOverlay.TextY=SCREEN_BOTTOM-60 +# + +[ScreenHowToPlay] + +[ScreenTitleJoin] +ShowHelp=false +HelpText=Screen.String("HelpTextTitleJoin") +HelpY=SCREEN_CENTER_Y+100 +HelpOnCommand=visible,false;zoom,1;strokecolor,color("0.125,0.125,0.125,0.5");queuecommand,"Refresh" +HelpCoinIsertedMessageCommand=playcommand,"Refresh" +HelpCoinModeChangedMessageCommand=playcommand,"Refresh" +HelpRefreshCommand=%function(self) \ + local bCanPlay = GAMESTATE:EnoughCreditsToJoin(); \ + local bReady = GAMESTATE:GetNumSidesJoined() > 0; \ + if bCanPlay or bReady then \ + self:SetTipsColonSeperated(THEME:GetString( Var "LoadingScreen","HelpTextPlay")); \ + else \ + self:SetTipsColonSeperated(THEME:GetString( Var "LoadingScreen","HelpTextWait")); \ + end \ +end; +# +LogoX=SCREEN_CENTER_X +LogoY=SCREEN_CENTER_Y-28 +LogoOnCommand=bob;effectperiod,4;effectmagnitude,0,5.25,0;zoom,0;bounceend,0.35;zoom,0.75 +LogoOffCommand=stopeffect;bouncebegin,0.35;rotationz,360;zoom,0 + +VersionInfoX=SCREEN_CENTER_X+114 +VersionInfoY=SCREEN_CENTER_Y+44 +VersionInfoOnCommand=settext,ProductVersion();horizalign,right;vertalign,bottom;bob;effectperiod,4;effectmagnitude,0,5.25,0;zoom,0;bounceend,0.35;zoom,0.65;shadowlength,1;shadowcolor,color("0.2,0.2,0.2,0.925"); +ScrollerOnCommand=visible,false; +ArcadeOverlay.TextY=SCREEN_BOTTOM-128 + +[ScreenDemonstration] +SongMeterDisplayOnCommand=visible,false +SongMeterDisplayP1OnCommand=visible,false +SongMeterDisplayP2OnCommand=visible,false +LifeP1OnCommand=visible,false +LifeP2OnCommand=visible,false +ScoreP1OnCommand=visible,false +ScoreP2OnCommand=visible,false +StepsDisplayP1OnCommand=zoomy,0;linear,0.3;zoomy,1;sleep,3;smooth,0.5;y,SCREEN_BOTTOM-20;zoomy,0 +StepsDisplayP2OnCommand=zoomy,0;linear,0.3;zoomy,1;sleep,3;smooth,0.5;y,SCREEN_BOTTOM-20;zoomy,0 +ShowBPMDisplay=false + +[ScreenJukeboxMenu] + +[ScreenJukebox] + +[ScreenCredits] +TimerSeconds=96 \ No newline at end of file diff --git a/Themes/themekit/BGAnimations/ScreenSelectMusic decorations.lua b/Themes/themekit/BGAnimations/ScreenSelectMusic decorations.lua new file mode 100644 index 0000000000..f5a37674cd --- /dev/null +++ b/Themes/themekit/BGAnimations/ScreenSelectMusic decorations.lua @@ -0,0 +1,47 @@ +-- Loads up a slew of objects to load into the screen, like how 3.9 does. +-- I prefer to keep these optional, incase another screen wants to hide +-- these elements. +local t = LoadFallbackB(); + +-- Legacy StepMania 4 Function +local function CreateStepDisplay(pn) + local function set(self, player) + self:SetFromGameState( player ); + end + + local t = Def.StepsDisplay { + InitCommand=cmd(Load,"StepsDisplay",GAMESTATE:GetPlayerState(pn);); + }; + + if pn == PLAYER_1 then + t.CurrentStepsP1ChangedMessageCommand=function(self) set(self, pn); end; + t.CurrentTrailP1ChangedMessageCommand=function(self) set(self, pn); end; + else + t.CurrentStepsP2ChangedMessageCommand=function(self) set(self, pn); end; + t.CurrentTrailP2ChangedMessageCommand=function(self) set(self, pn); end; + end + + return t; +end + + + +for pn in ivalues(PlayerNumber) do + local MetricsName = "StepsDisplay" .. PlayerNumberToString(pn); + t[#t+1] = CreateStepDisplay(pn) .. { + InitCommand=function(self) self:player(pn); self:name(MetricsName); ActorUtil.LoadAllCommandsAndSetXY(self,Var "LoadingScreen"); end; + PlayerJoinedMessageCommand=function(self, params) + if params.Player == pn then + self:visible(true); + (cmd(zoom,0;bounceend,0.3;zoom,1))(self); + end; + end; + PlayerUnjoinedMessageCommand=function(self, params) + if params.Player == pn then + self:visible(true); + (cmd(bouncebegin,0.3;zoom,0))(self); + end; + end; + }; +end +return t \ No newline at end of file diff --git a/Themes/themekit/BGAnimations/ScreenTitleMenu underlay.lua b/Themes/themekit/BGAnimations/ScreenTitleMenu underlay.lua new file mode 100644 index 0000000000..1646b07202 --- /dev/null +++ b/Themes/themekit/BGAnimations/ScreenTitleMenu underlay.lua @@ -0,0 +1,7 @@ +-- This adds the logo man~ +InitUserPrefs(); +local t = Def.ActorFrame {}; + +t[#t+1] = StandardDecorationFromFileOptional("Logo","Logo"); + +return t \ No newline at end of file diff --git a/Themes/themekit/BGAnimations/ScreenWithMenuElements background/VOL1-29-NTSC.mpg b/Themes/themekit/BGAnimations/ScreenWithMenuElements background/VOL1-29-NTSC.mpg new file mode 100644 index 0000000000..6f579ea520 Binary files /dev/null and b/Themes/themekit/BGAnimations/ScreenWithMenuElements background/VOL1-29-NTSC.mpg differ diff --git a/Themes/themekit/BGAnimations/ScreenWithMenuElements background/_16 (stretch).png b/Themes/themekit/BGAnimations/ScreenWithMenuElements background/_16 (stretch).png new file mode 100644 index 0000000000..eda8b07a4b Binary files /dev/null and b/Themes/themekit/BGAnimations/ScreenWithMenuElements background/_16 (stretch).png differ diff --git a/Themes/themekit/BGAnimations/ScreenWithMenuElements background/_32 (stretch).png b/Themes/themekit/BGAnimations/ScreenWithMenuElements background/_32 (stretch).png new file mode 100644 index 0000000000..ee4d071b3d Binary files /dev/null and b/Themes/themekit/BGAnimations/ScreenWithMenuElements background/_32 (stretch).png differ diff --git a/Themes/themekit/BGAnimations/ScreenWithMenuElements background/_8 (stretch).png b/Themes/themekit/BGAnimations/ScreenWithMenuElements background/_8 (stretch).png new file mode 100644 index 0000000000..e078062a7d Binary files /dev/null and b/Themes/themekit/BGAnimations/ScreenWithMenuElements background/_8 (stretch).png differ diff --git a/Themes/themekit/BGAnimations/ScreenWithMenuElements decorations - Copy.lua b/Themes/themekit/BGAnimations/ScreenWithMenuElements decorations - Copy.lua new file mode 100644 index 0000000000..0a6c72ce04 --- /dev/null +++ b/Themes/themekit/BGAnimations/ScreenWithMenuElements decorations - Copy.lua @@ -0,0 +1,27 @@ +-- Loads up a slew of objects to load into the screen, like how 3.9 does. +-- I prefer to keep these optional, incase another screen wants to hide +-- these elements. +local t = Def.ActorFrame {}; +-- Image displayed on the top of the screen +t[#t+1] = StandardDecorationFromFileOptional("Header","Header"); +-- Text displayed at the top of the screen +t[#t+1] = StandardDecorationFromFileOptional("TextHeader","TextHeader") .. { + BeginCommand=cmd(playcommand,"Set"); + SetCommand=function(self) + local sText = '_'; + if SCREENMAN:GetTopScreen() then + if SCREENMAN:GetTopScreen():GetName() ~= nil then + sText = THEME:GetString(SCREENMAN:GetTopScreen():GetName(), "HeaderText"); + else + sText = 'No Screen Name'; + end + else + sText = 'No Top Screen'; + end + -- + self:settext(sText); + end; +}; +-- Image displayed on the bottom of the screen +t[#t+1] = StandardDecorationFromFileOptional("Footer","Footer"); +return t \ No newline at end of file diff --git a/Themes/themekit/BGAnimations/ScreenWithMenuElements decorations/default.lua b/Themes/themekit/BGAnimations/ScreenWithMenuElements decorations/default.lua deleted file mode 100644 index d3a0d5252a..0000000000 --- a/Themes/themekit/BGAnimations/ScreenWithMenuElements decorations/default.lua +++ /dev/null @@ -1,7 +0,0 @@ --- Loads up a slew of objects to load into the screen, like how 3.9 does. --- I prefer to keep these optional, incase another screen wants to hide --- these elements. -local t = Def.ActorFrame {}; -t[#t+1] = StandardDecorationFromFileOptional("Header","Header"); -t[#t+1] = StandardDecorationFromFileOptional("Footer","Footer"); -return t \ No newline at end of file diff --git a/Themes/themekit/Fonts/ScreenWithMenuElements TextHeader.redir b/Themes/themekit/Fonts/ScreenWithMenuElements TextHeader.redir new file mode 100644 index 0000000000..a290ae3b16 --- /dev/null +++ b/Themes/themekit/Fonts/ScreenWithMenuElements TextHeader.redir @@ -0,0 +1,3 @@ +Common Normal +-- Fun Fact, Redirs only read the 1st line in any of the files, so you can +-- comment them as much as you want! \ No newline at end of file diff --git a/Themes/themekit/Graphics/MusicWheel highlight.png b/Themes/themekit/Graphics/MusicWheel highlight.png new file mode 100644 index 0000000000..d147847ad7 Binary files /dev/null and b/Themes/themekit/Graphics/MusicWheel highlight.png differ diff --git a/Themes/themekit/Graphics/MusicWheelItem SectionCollapsed ColorPart.png b/Themes/themekit/Graphics/MusicWheelItem SectionCollapsed ColorPart.png new file mode 100644 index 0000000000..46c195c686 Binary files /dev/null and b/Themes/themekit/Graphics/MusicWheelItem SectionCollapsed ColorPart.png differ diff --git a/Themes/themekit/Graphics/MusicWheelItem SectionExpanded ColorPart.png b/Themes/themekit/Graphics/MusicWheelItem SectionExpanded ColorPart.png new file mode 100644 index 0000000000..c169cf6f07 Binary files /dev/null and b/Themes/themekit/Graphics/MusicWheelItem SectionExpanded ColorPart.png differ diff --git a/Themes/themekit/Graphics/MusicWheelItem Song NormalPart.png b/Themes/themekit/Graphics/MusicWheelItem Song NormalPart.png new file mode 100644 index 0000000000..88c8ae0756 Binary files /dev/null and b/Themes/themekit/Graphics/MusicWheelItem Song NormalPart.png differ diff --git a/Themes/themekit/Graphics/PlayMode Endless.png b/Themes/themekit/Graphics/PlayMode Endless.png new file mode 100644 index 0000000000..e215c9d8ea Binary files /dev/null and b/Themes/themekit/Graphics/PlayMode Endless.png differ diff --git a/Themes/themekit/Graphics/PlayMode Extended.png b/Themes/themekit/Graphics/PlayMode Extended.png new file mode 100644 index 0000000000..249e938335 Binary files /dev/null and b/Themes/themekit/Graphics/PlayMode Extended.png differ diff --git a/Themes/themekit/Graphics/PlayMode Normal.png b/Themes/themekit/Graphics/PlayMode Normal.png new file mode 100644 index 0000000000..f88293648b Binary files /dev/null and b/Themes/themekit/Graphics/PlayMode Normal.png differ diff --git a/Themes/themekit/Graphics/PlayMode Oni.png b/Themes/themekit/Graphics/PlayMode Oni.png new file mode 100644 index 0000000000..b51d7a3354 Binary files /dev/null and b/Themes/themekit/Graphics/PlayMode Oni.png differ diff --git a/Themes/themekit/Graphics/PlayMode Rave.png b/Themes/themekit/Graphics/PlayMode Rave.png new file mode 100644 index 0000000000..ca7d14b753 Binary files /dev/null and b/Themes/themekit/Graphics/PlayMode Rave.png differ diff --git a/Themes/themekit/Graphics/ScreenSelectPlayMode Icon ChoiceEndless.png b/Themes/themekit/Graphics/ScreenSelectPlayMode Icon ChoiceEndless.png new file mode 100644 index 0000000000..aa5165a584 Binary files /dev/null and b/Themes/themekit/Graphics/ScreenSelectPlayMode Icon ChoiceEndless.png differ diff --git a/Themes/themekit/Graphics/ScreenSelectPlayMode Icon ChoiceExtended.png b/Themes/themekit/Graphics/ScreenSelectPlayMode Icon ChoiceExtended.png new file mode 100644 index 0000000000..1000ebbdbb Binary files /dev/null and b/Themes/themekit/Graphics/ScreenSelectPlayMode Icon ChoiceExtended.png differ diff --git a/Themes/themekit/Graphics/ScreenSelectPlayMode Icon ChoiceHard.png b/Themes/themekit/Graphics/ScreenSelectPlayMode Icon ChoiceHard.png new file mode 100644 index 0000000000..936a81dfea Binary files /dev/null and b/Themes/themekit/Graphics/ScreenSelectPlayMode Icon ChoiceHard.png differ diff --git a/Themes/themekit/Graphics/ScreenSelectPlayMode Icon ChoiceNormal.png b/Themes/themekit/Graphics/ScreenSelectPlayMode Icon ChoiceNormal.png new file mode 100644 index 0000000000..6c26d3f468 Binary files /dev/null and b/Themes/themekit/Graphics/ScreenSelectPlayMode Icon ChoiceNormal.png differ diff --git a/Themes/themekit/Graphics/ScreenSelectPlayMode Icon ChoiceOni.png b/Themes/themekit/Graphics/ScreenSelectPlayMode Icon ChoiceOni.png new file mode 100644 index 0000000000..8e41efa3ce Binary files /dev/null and b/Themes/themekit/Graphics/ScreenSelectPlayMode Icon ChoiceOni.png differ diff --git a/Themes/themekit/Graphics/ScreenSelectPlayMode Icon ChoiceRave.png b/Themes/themekit/Graphics/ScreenSelectPlayMode Icon ChoiceRave.png new file mode 100644 index 0000000000..fe8a7293c6 Binary files /dev/null and b/Themes/themekit/Graphics/ScreenSelectPlayMode Icon ChoiceRave.png differ diff --git a/Themes/themekit/Graphics/ScreenSelectPlayMode scroll.lua b/Themes/themekit/Graphics/ScreenSelectPlayMode scroll.lua new file mode 100644 index 0000000000..5c75c954e7 --- /dev/null +++ b/Themes/themekit/Graphics/ScreenSelectPlayMode scroll.lua @@ -0,0 +1,12 @@ +local gc = Var("GameCommand"); + +local t = Def.ActorFrame { + LoadActor("PlayMode " .. gc:GetText() ); +}; + +t[1].OnCommand=Screen.Metric("ScrollerItemOnCommand"); +t[1].GainFocusCommand=Screen.Metric("ScrollerItemGainFocusCommand"); +t[1].LoseFocusCommand=Screen.Metric("ScrollerItemLoseFocusCommand"); +t[1].OffFocusedCommand=Screen.Metric("ScrollerItemOffFocusedCommand"); +t[1].OffUnfocusedCommand=Screen.Metric("ScrollerItemOffUnfocusedCommand"); +return t; \ No newline at end of file diff --git a/Themes/themekit/Graphics/ScreenSelectStyle Icon Choice10Keys.png b/Themes/themekit/Graphics/ScreenSelectStyle Icon Choice10Keys.png new file mode 100644 index 0000000000..87255c9ebd Binary files /dev/null and b/Themes/themekit/Graphics/ScreenSelectStyle Icon Choice10Keys.png differ diff --git a/Themes/themekit/Graphics/ScreenSelectStyle Icon Choice14Keys.png b/Themes/themekit/Graphics/ScreenSelectStyle Icon Choice14Keys.png new file mode 100644 index 0000000000..2aeb544a25 Binary files /dev/null and b/Themes/themekit/Graphics/ScreenSelectStyle Icon Choice14Keys.png differ diff --git a/Themes/themekit/Graphics/ScreenSelectStyle Icon Choice5Keys.png b/Themes/themekit/Graphics/ScreenSelectStyle Icon Choice5Keys.png new file mode 100644 index 0000000000..bb0cec0b02 Binary files /dev/null and b/Themes/themekit/Graphics/ScreenSelectStyle Icon Choice5Keys.png differ diff --git a/Themes/themekit/Graphics/ScreenSelectStyle Icon Choice7Keys.png b/Themes/themekit/Graphics/ScreenSelectStyle Icon Choice7Keys.png new file mode 100644 index 0000000000..3a7b5cebef Binary files /dev/null and b/Themes/themekit/Graphics/ScreenSelectStyle Icon Choice7Keys.png differ diff --git a/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceCouple.png b/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceCouple.png new file mode 100644 index 0000000000..ee241ff74c Binary files /dev/null and b/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceCouple.png differ diff --git a/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceDouble.png b/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceDouble.png new file mode 100644 index 0000000000..419db18572 Binary files /dev/null and b/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceDouble.png differ diff --git a/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceHalfDouble.png b/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceHalfDouble.png new file mode 100644 index 0000000000..c13642b105 Binary files /dev/null and b/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceHalfDouble.png differ diff --git a/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceKB7.png b/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceKB7.png new file mode 100644 index 0000000000..c6785ff8c6 Binary files /dev/null and b/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceKB7.png differ diff --git a/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceSingle.png b/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceSingle.png new file mode 100644 index 0000000000..5f667a4c1e Binary files /dev/null and b/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceSingle.png differ diff --git a/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceSolo.png b/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceSolo.png new file mode 100644 index 0000000000..05e289ba54 Binary files /dev/null and b/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceSolo.png differ diff --git a/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceVersus.png b/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceVersus.png new file mode 100644 index 0000000000..23f90f887f Binary files /dev/null and b/Themes/themekit/Graphics/ScreenSelectStyle Icon ChoiceVersus.png differ diff --git a/Themes/themekit/Graphics/ScreenSelectStyle scroll.lua b/Themes/themekit/Graphics/ScreenSelectStyle scroll.lua new file mode 100644 index 0000000000..f839f3f013 --- /dev/null +++ b/Themes/themekit/Graphics/ScreenSelectStyle scroll.lua @@ -0,0 +1,12 @@ +local gc = Var("GameCommand"); + +local t = Def.ActorFrame { + LoadActor("Style " .. gc:GetText() ); +}; +-- This works. +t[1].OnCommand=Screen.Metric("ScrollerItemOnCommand"); +t[1].GainFocusCommand=Screen.Metric("ScrollerItemGainFocusCommand"); +t[1].LoseFocusCommand=Screen.Metric("ScrollerItemLoseFocusCommand"); +t[1].OffFocusedCommand=Screen.Metric("ScrollerItemOffFocusedCommand"); +t[1].OffUnfocusedCommand=Screen.Metric("ScrollerItemOffUnfocusedCommand"); +return t; \ No newline at end of file diff --git a/Themes/themekit/Graphics/ScreenTitleMenu Logo.png b/Themes/themekit/Graphics/ScreenTitleMenu Logo.png new file mode 100644 index 0000000000..15e8583c76 Binary files /dev/null and b/Themes/themekit/Graphics/ScreenTitleMenu Logo.png differ diff --git a/Themes/themekit/Graphics/ScreenTitleMenu scroll.lua b/Themes/themekit/Graphics/ScreenTitleMenu scroll.lua index fa40c9c589..437e80dd9c 100644 --- a/Themes/themekit/Graphics/ScreenTitleMenu scroll.lua +++ b/Themes/themekit/Graphics/ScreenTitleMenu scroll.lua @@ -3,9 +3,13 @@ local gc = Var("GameCommand"); local t = Def.ActorFrame {}; t[#t+1] = LoadFont("Common Normal") .. { + Name="Text"; Text=gc:GetText(); }; -t.GainFocusCommand=cmd(diffusealpha,1); -t.LoseFocusCommand=cmd(diffusealpha,0.5); +t[1].OnCommand=Screen.Metric("ScrollerItemOnCommand"); +t[1].GainFocusCommand=Screen.Metric("ScrollerItemGainFocusCommand"); +t[1].LoseFocusCommand=Screen.Metric("ScrollerItemLoseFocusCommand"); +t[1].OffFocusedCommand=Screen.Metric("ScrollerItemOffFocusedCommand"); +t[1].OffUnfocusedCommand=Screen.Metric("ScrollerItemOffUnfocusedCommand"); return t; \ No newline at end of file diff --git a/Themes/themekit/Graphics/ScreenWithMenuElements Footer.png b/Themes/themekit/Graphics/ScreenWithMenuElements Footer.png new file mode 100644 index 0000000000..eabccf5713 Binary files /dev/null and b/Themes/themekit/Graphics/ScreenWithMenuElements Footer.png differ diff --git a/Themes/themekit/Graphics/ScreenWithMenuElements Header.png b/Themes/themekit/Graphics/ScreenWithMenuElements Header.png new file mode 100644 index 0000000000..b1ffdc490e Binary files /dev/null and b/Themes/themekit/Graphics/ScreenWithMenuElements Header.png differ diff --git a/Themes/themekit/Graphics/ScreenWithMenuElements TextHeader.lua b/Themes/themekit/Graphics/ScreenWithMenuElements TextHeader.lua new file mode 100644 index 0000000000..5724a0826b --- /dev/null +++ b/Themes/themekit/Graphics/ScreenWithMenuElements TextHeader.lua @@ -0,0 +1,2 @@ +-- This actually returns an object for stepmania to use instead of a regular image or movie! Pretty sneaky stuff. +return LoadFont("ScreenWithMenuElements","TextHeader"); \ No newline at end of file diff --git a/Themes/themekit/Graphics/StepsDisplay frame.png b/Themes/themekit/Graphics/StepsDisplay frame.png new file mode 100644 index 0000000000..a1994514fc Binary files /dev/null and b/Themes/themekit/Graphics/StepsDisplay frame.png differ diff --git a/Themes/themekit/Graphics/Style 10Keys.png b/Themes/themekit/Graphics/Style 10Keys.png new file mode 100644 index 0000000000..3c2fd3b864 Binary files /dev/null and b/Themes/themekit/Graphics/Style 10Keys.png differ diff --git a/Themes/themekit/Graphics/Style 14Keys.png b/Themes/themekit/Graphics/Style 14Keys.png new file mode 100644 index 0000000000..768440b941 Binary files /dev/null and b/Themes/themekit/Graphics/Style 14Keys.png differ diff --git a/Themes/themekit/Graphics/Style 5Keys.png b/Themes/themekit/Graphics/Style 5Keys.png new file mode 100644 index 0000000000..f57e8101f8 Binary files /dev/null and b/Themes/themekit/Graphics/Style 5Keys.png differ diff --git a/Themes/themekit/Graphics/Style 7Keys.png b/Themes/themekit/Graphics/Style 7Keys.png new file mode 100644 index 0000000000..eb012a02de Binary files /dev/null and b/Themes/themekit/Graphics/Style 7Keys.png differ diff --git a/Themes/themekit/Graphics/Style Couple.png b/Themes/themekit/Graphics/Style Couple.png new file mode 100644 index 0000000000..ba78b81d4d Binary files /dev/null and b/Themes/themekit/Graphics/Style Couple.png differ diff --git a/Themes/themekit/Graphics/Style Double.png b/Themes/themekit/Graphics/Style Double.png new file mode 100644 index 0000000000..58617e146e Binary files /dev/null and b/Themes/themekit/Graphics/Style Double.png differ diff --git a/Themes/themekit/Graphics/Style HalfDouble.png b/Themes/themekit/Graphics/Style HalfDouble.png new file mode 100644 index 0000000000..8b77fe2fe8 Binary files /dev/null and b/Themes/themekit/Graphics/Style HalfDouble.png differ diff --git a/Themes/themekit/Graphics/Style KB7.png b/Themes/themekit/Graphics/Style KB7.png new file mode 100644 index 0000000000..473c29b075 Binary files /dev/null and b/Themes/themekit/Graphics/Style KB7.png differ diff --git a/Themes/themekit/Graphics/Style Single.png b/Themes/themekit/Graphics/Style Single.png new file mode 100644 index 0000000000..d1bfa058b3 Binary files /dev/null and b/Themes/themekit/Graphics/Style Single.png differ diff --git a/Themes/themekit/Graphics/Style Solo.png b/Themes/themekit/Graphics/Style Solo.png new file mode 100644 index 0000000000..b9807126df Binary files /dev/null and b/Themes/themekit/Graphics/Style Solo.png differ diff --git a/Themes/themekit/Graphics/Style Versus.png b/Themes/themekit/Graphics/Style Versus.png new file mode 100644 index 0000000000..0f16c82637 Binary files /dev/null and b/Themes/themekit/Graphics/Style Versus.png differ diff --git a/Themes/themekit/Scripts/02 TextBanner.lua b/Themes/themekit/Scripts/02 TextBanner.lua new file mode 100644 index 0000000000..b70206dea8 --- /dev/null +++ b/Themes/themekit/Scripts/02 TextBanner.lua @@ -0,0 +1,19 @@ +local mainMaxWidth = 228; -- zoom w/subtitle is 0.75 (multiply by 1.25) +local subMaxWidth = 420; -- zoom is 0.6 (multiply zoom,1 value by 1.4) +local artistMaxWidth = 300/0.8; + +function TextBannerAfterSet(self,param) + local Title=self:GetChild("Title"); + local Subtitle=self:GetChild("Subtitle"); + local Artist=self:GetChild("Artist"); + if Subtitle:GetText() == "" then + (cmd(maxwidth,mainMaxWidth;y,-8;zoom,1;))(Title); + (cmd(visible,false))(Subtitle); + (cmd(zoom,0.66;maxwidth,artistMaxWidth;y,8))(Artist); + else + -- subtitle below + (cmd(maxwidth,mainMaxWidth*1.25;y,-11;zoom,0.75;))(Title); + (cmd(visible,true;zoom,0.6;y,0;maxwidth,subMaxWidth))(Subtitle); + (cmd(zoom,0.6;maxwidth,artistMaxWidth;y,10))(Artist); + end +end \ No newline at end of file diff --git a/Themes/themekit/Sounds/_Music menu.redir b/Themes/themekit/Sounds/_Music menu.redir new file mode 100644 index 0000000000..c29cb1da10 --- /dev/null +++ b/Themes/themekit/Sounds/_Music menu.redir @@ -0,0 +1 @@ +_Music title \ No newline at end of file diff --git a/Themes/themekit/Sounds/_Music title (loop).ogg b/Themes/themekit/Sounds/_Music title (loop).ogg new file mode 100644 index 0000000000..d2b3d47cd7 Binary files /dev/null and b/Themes/themekit/Sounds/_Music title (loop).ogg differ diff --git a/Themes/themekit/Sounds/_Music title (loop).sm b/Themes/themekit/Sounds/_Music title (loop).sm new file mode 100644 index 0000000000..9fabf3b246 --- /dev/null +++ b/Themes/themekit/Sounds/_Music title (loop).sm @@ -0,0 +1,5 @@ +#TITLE:Technotris; +#OFFSET:0.000; +#BPMS:0.000=148.000; +#STOPS:; + diff --git a/Themes/themekit/_Resources/MusicWheelItem.psd b/Themes/themekit/_Resources/MusicWheelItem.psd new file mode 100644 index 0000000000..0d98cf39bc Binary files /dev/null and b/Themes/themekit/_Resources/MusicWheelItem.psd differ diff --git a/Themes/themekit/_Resources/ScreenSelectStyle Icon.psd b/Themes/themekit/_Resources/ScreenSelectStyle Icon.psd new file mode 100644 index 0000000000..9721d6d12d Binary files /dev/null and b/Themes/themekit/_Resources/ScreenSelectStyle Icon.psd differ diff --git a/Themes/themekit/_Resources/ScreenSelectStyle Scroll.psd b/Themes/themekit/_Resources/ScreenSelectStyle Scroll.psd new file mode 100644 index 0000000000..924ff48912 Binary files /dev/null and b/Themes/themekit/_Resources/ScreenSelectStyle Scroll.psd differ diff --git a/Themes/themekit/_Resources/ScreenTitleMenu logo.psd b/Themes/themekit/_Resources/ScreenTitleMenu logo.psd new file mode 100644 index 0000000000..79fb479580 Binary files /dev/null and b/Themes/themekit/_Resources/ScreenTitleMenu logo.psd differ diff --git a/Themes/themekit/_Resources/ScreenWithMenuElements Footer.psd b/Themes/themekit/_Resources/ScreenWithMenuElements Footer.psd new file mode 100644 index 0000000000..8120704912 Binary files /dev/null and b/Themes/themekit/_Resources/ScreenWithMenuElements Footer.psd differ diff --git a/Themes/themekit/_Resources/ScreenWithMenuElements Header.psd b/Themes/themekit/_Resources/ScreenWithMenuElements Header.psd new file mode 100644 index 0000000000..d874523b70 Binary files /dev/null and b/Themes/themekit/_Resources/ScreenWithMenuElements Header.psd differ diff --git a/Themes/themekit/_Resources/StepsDisplay items.psd b/Themes/themekit/_Resources/StepsDisplay items.psd new file mode 100644 index 0000000000..e22284be56 Binary files /dev/null and b/Themes/themekit/_Resources/StepsDisplay items.psd differ diff --git a/Themes/themekit/_library.txt b/Themes/themekit/_library.txt new file mode 100644 index 0000000000..54af4efe66 --- /dev/null +++ b/Themes/themekit/_library.txt @@ -0,0 +1,11 @@ +=== +COLORS +==== + BACKGROUND +==== + Clear #000000 (Black) + Light #646464 (Grey) + Primary #007cd4 (Slate Blue) + Secondary #a4005d (Slate Purple) + the base is black (#000000) +=== \ No newline at end of file diff --git a/Themes/themekit/_todo.txt b/Themes/themekit/_todo.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Themes/themekit/metrics.ini b/Themes/themekit/metrics.ini index fbc0f5651a..3489476bb4 100644 --- a/Themes/themekit/metrics.ini +++ b/Themes/themekit/metrics.ini @@ -1,37 +1,342 @@ [Global] FallbackTheme=_fallback +[ScreenSystemLayer] +CreditsP1X=SCREEN_CENTER_X-256-32 +CreditsP1Y=SCREEN_BOTTOM-4 +# ColorLightTone & ColorDarkTone make colors 50% brighter or darker, where ColorMidTone makes them 25% darker +# ColorLightTone( color here ); example: ColorLightTone( PlayerColor(PLAYER_1) ); +CreditsP1OnCommand=horizalign,left;vertalign,bottom;zoom,0.675;shadowlength,1;diffusebottomedge,ColorLightTone( PlayerColor(PLAYER_1) );strokecolor,Color("Black"); +# +CreditsP2X=SCREEN_CENTER_X+256+32 +CreditsP2Y=SCREEN_BOTTOM-4 +CreditsP2OnCommand=horizalign,right;vertalign,bottom;zoom,0.675;shadowlength,1;diffusebottomedge,ColorLightTone( PlayerColor(PLAYER_2) );strokecolor,Color("Black"); [ScreenWithMenuElements] +# Header ( Top of Screen ) ShowHeader=true HeaderX=SCREEN_CENTER_X HeaderY=SCREEN_TOP -HeaderOnCommand= +HeaderOnCommand=vertalign,top;addy,-64;decelerate,0.35;addy,64; HeaderOffCommand= -# +# Text Header ( Text displayed at top of screen on top of header ) +ShowTextHeader=true +TextHeaderX=SCREEN_CENTER_X-256-32 +TextHeaderY=SCREEN_TOP+32+8-1.5 +TextHeaderOnCommand=horizalign,left;vertalign,bottom;skewx,-0.125;shadowlength,1;diffusealpha,0;addx,-16;sleep,0.35;decelerate,0.125;diffusealpha,1;addx,16; +TextHeaderOffCommand= +# Footer ( Bottom Of Screen ) ShowFooter=true FooterX=SCREEN_CENTER_X FooterY=SCREEN_BOTTOM -FooterOnCommand= +FooterOnCommand=vertalign,bottom;addy,48;decelerate,0.35;addy,-48 FooterOffCommand= -# -TimerX=SCREEN_WIDTH-64 -TimerY=SCREEN_TOP+48-4.5 +# Menu Timer +TimerX=SCREEN_CENTER_X+256+32 +TimerY=SCREEN_TOP+32+8-1.5 +# We animate the timer in [MenuTimer], since diffusion doesn't work here. TimerOnCommand= TimerOffCommand= [MenuTimer] -# Text -Text1OnCommand=stopeffect;stoptweening;vertalign,bottom;horizalign,right +# Text associated with the menutimer +Text1OnCommand=stopeffect;stoptweening;horizalign,right;vertalign,bottom;shadowlength,1;diffusealpha,0;x,16;sleep,0.35;decelerate,0.125;diffusealpha,1;x,0; Text1FormatFunction=function(fSeconds) \ return string.format("%0.1f", fSeconds); \ end FrameOnCommand= -# Warning +# Warning10Command=diffuseshift;effectperiod,1;effectcolor2,Color("Red");effectcolor1,color("0.5,0,0,1"); [ScreenTitleMenu] -ShowHeader=true -ShowFooter=true +# Don't show these +ShowHeader=false +ShowFooter=false +# Logo +ShowLogo=true +LogoX=SCREEN_CENTER_X +LogoY=SCREEN_CENTER_Y-48 +LogoOnCommand=zoom,1; +LogoOffCommand=zoom,0; +# Title Menu +ScrollerX=SCREEN_CENTER_X +ScrollerY=SCREEN_CENTER_Y+96 +ScrollerOnCommand= +ScrollerOffCommand= +# Menu Items [ThemeKit Only] +ScrollerItemOnCommand=shadowlength,1;strokecolor,color("0,0,0,0.25"); +# GainFocus is when an item is selected. +ScrollerItemGainFocusCommand=stoptweening;linear,0.125;zoom,1; +# LoseFocus is when an item is deselected. +ScrollerItemLoseFocusCommand=stoptweening;linear,0.125;zoom,0.75; +# OffFocused is for items you have selected and the screen is exiting. +ScrollerItemOffFocusedCommand=sleep,0.35;linear,0.15;zoom,0; +# OffUnfocused is for items that were not selected and the screen is exiting. +ScrollerItemOffUnfocusedCommand=linear,0.15;zoom,0; +[ScreenSelectStyle] +# Let items do OffCommand +WaitForChildrenBeforeTweening=true +# Explanatory +ShowIcon=true +ShowScroller=true +# Force theme to load image for each style type, instead of a lua file +PerChoiceIconElement=true +PerChoiceScrollElement=false +# +ScrollerX=SCREEN_CENTER_X +ScrollerY=SCREEN_CENTER_Y-16 +# Menu Items [ThemeKit Only] +ScrollerItemOnCommand= +ScrollerItemOnFocusedCommand=visible,true +# GainFocus is when an item is selected. +ScrollerItemGainFocusCommand=visible,true;finishtweening;zoom,1.25;linear,0.125;zoom,1; +# LoseFocus is when an item is deselected. +ScrollerItemLoseFocusCommand=finishtweening;visible,false; +# OffFocused is for items you have selected and the screen is exiting. +ScrollerItemOffFocusedCommand=sleep,0.35;linear,0.15;zoom,0; +# OffUnfocused is for items that were not selected and the screen is exiting. +ScrollerItemOffUnfocusedCommand=linear,0.15;zoom,0; +# Need this so that icons animate from metrics +UseIconMetrics=true +# Positions of all da 'cons +IconChoiceSingleX=SCREEN_CENTER_X-256 +IconChoiceSingleY=SCREEN_BOTTOM-64 +IconChoiceSingleOnCommand=zoom,0;bounceend,0.35;zoom,1 +IconChoiceSingleGainFocusCommand=stoptweening;zoom,1;pulse;effectmagnitude,1,1.125,1; +IconChoiceSingleLoseFocusCommand=stoptweening;stopeffect;zoom,0.75; +IconChoiceSingleEnabledCommand=diffuse,color("1,1,1,1"); +IconChoiceSingleDisabledCommand=diffuse,color("1,0,0,0.5"); +IconChoiceSingleOffUnfocusedCommand=linear,0.1175;zoomx,0 +IconChoiceSingleOffFocusedCommand=stopeffect;sleep,0.1175;linear,0.25;zoom,1.1;sleep,0.25;decelerate,0.3;zoom,0; +# +IconChoiceSoloX=SCREEN_CENTER_X-128 +IconChoiceSoloY=SCREEN_BOTTOM-64 +IconChoiceSoloOnCommand=zoom,0;bounceend,0.35;zoom,1 +IconChoiceSoloGainFocusCommand=stoptweening;zoom,1;pulse;effectmagnitude,1,1.125,1; +IconChoiceSoloLoseFocusCommand=stoptweening;stopeffect;zoom,0.75; +IconChoiceSoloEnabledCommand=diffuse,color("1,1,1,1"); +IconChoiceSoloDisabledCommand=diffuse,color("1,0,0,0.5"); +IconChoiceSoloOffUnfocusedCommand=linear,0.1175;zoomx,0 +IconChoiceSoloOffFocusedCommand=stopeffect;sleep,0.1175;linear,0.25;zoom,1.1;sleep,0.25;decelerate,0.3;zoom,0; +IconChoiceHalfDoubleX=SCREEN_CENTER_X-128 +IconChoiceHalfDoubleY=SCREEN_BOTTOM-64 +IconChoiceHalfDoubleOnCommand=zoom,0;bounceend,0.35;zoom,1 +IconChoiceHalfDoubleGainFocusCommand=stoptweening;zoom,1;pulse;effectmagnitude,1,1.125,1; +IconChoiceHalfDoubleLoseFocusCommand=stoptweening;stopeffect;zoom,0.75; +IconChoiceHalfDoubleEnabledCommand=diffuse,color("1,1,1,1"); +IconChoiceHalfDoubleDisabledCommand=diffuse,color("1,0,0,0.5"); +IconChoiceHalfDoubleOffUnfocusedCommand=linear,0.1175;zoomx,0 +IconChoiceHalfDoubleOffFocusedCommand=stopeffect;sleep,0.1175;linear,0.25;zoom,1.1;sleep,0.25;decelerate,0.3;zoom,0; +# +IconChoiceDoubleX=SCREEN_CENTER_X +IconChoiceDoubleY=SCREEN_BOTTOM-64 +IconChoiceDoubleOnCommand=zoom,0;bounceend,0.35;zoom,1 +IconChoiceDoubleGainFocusCommand=stoptweening;zoom,1;pulse;effectmagnitude,1,1.125,1; +IconChoiceDoubleLoseFocusCommand=stoptweening;stopeffect;zoom,0.75; +IconChoiceDoubleEnabledCommand=diffuse,color("1,1,1,1"); +IconChoiceDoubleDisabledCommand=diffuse,color("1,0,0,0.5"); +IconChoiceDoubleOffUnfocusedCommand=linear,0.1175;zoomx,0 +IconChoiceDoubleOffFocusedCommand=stopeffect;sleep,0.1175;linear,0.25;zoom,1.1;sleep,0.25;decelerate,0.3;zoom,0; +# +IconChoiceVersusX=SCREEN_CENTER_X+128 +IconChoiceVersusY=SCREEN_BOTTOM-64 +IconChoiceVersusOnCommand=zoom,0;bounceend,0.35;zoom,1 +IconChoiceVersusGainFocusCommand=stoptweening;zoom,1;pulse;effectmagnitude,1,1.125,1; +IconChoiceVersusLoseFocusCommand=stoptweening;stopeffect;zoom,0.75; +IconChoiceVersusEnabledCommand=diffuse,color("1,1,1,1"); +IconChoiceVersusDisabledCommand=diffuse,color("1,0,0,0.5"); +IconChoiceVersusOffUnfocusedCommand=linear,0.1175;zoomx,0 +IconChoiceVersusOffFocusedCommand=stopeffect;sleep,0.1175;linear,0.25;zoom,1.1;sleep,0.25;decelerate,0.3;zoom,0; +# +IconChoiceCoupleX=SCREEN_CENTER_X+256 +IconChoiceCoupleY=SCREEN_BOTTOM-64 +IconChoiceCoupleOnCommand=zoom,0;bounceend,0.35;zoom,1 +IconChoiceCoupleGainFocusCommand=stoptweening;zoom,1;pulse;effectmagnitude,1,1.125,1; +IconChoiceCoupleLoseFocusCommand=stoptweening;stopeffect;zoom,0.75; +IconChoiceCoupleEnabledCommand=diffuse,color("1,1,1,1"); +IconChoiceCoupleDisabledCommand=diffuse,color("1,0,0,0.5"); +IconChoiceCoupleOffUnfocusedCommand=linear,0.1175;zoomx,0 +IconChoiceCoupleOffFocusedCommand=stopeffect;sleep,0.1175;linear,0.25;zoom,1.1;sleep,0.25;decelerate,0.3;zoom,0; +# +IconChoiceKB7X=SCREEN_CENTER_X +IconChoiceKB7Y=SCREEN_BOTTOM-64 +IconChoiceKB7OnCommand=zoom,0;bounceend,0.35;zoom,1 +IconChoiceKB7GainFocusCommand=stoptweening;zoom,1;pulse;effectmagnitude,1,1.125,1; +IconChoiceKB7LoseFocusCommand=stoptweening;stopeffect;zoom,0.75; +IconChoiceKB7EnabledCommand=diffuse,color("1,1,1,1"); +IconChoiceKB7DisabledCommand=diffuse,color("1,0,0,0.5"); +IconChoiceKB7OffUnfocusedCommand=linear,0.1175;zoomx,0 +IconChoiceKB7OffFocusedCommand=stopeffect;sleep,0.1175;linear,0.25;zoom,1.1;sleep,0.25;decelerate,0.3;zoom,0; +# +IconChoice5KeysX=SCREEN_CENTER_X-128 +IconChoice5KeysY=SCREEN_BOTTOM-64 +IconChoice5KeysOnCommand=zoom,0;bounceend,0.35;zoom,1 +IconChoice5KeysGainFocusCommand=stoptweening;zoom,1;pulse;effectmagnitude,1,1.125,1; +IconChoice5KeysLoseFocusCommand=stoptweening;stopeffect;zoom,0.75; +IconChoice5KeysEnabledCommand=diffuse,color("1,1,1,1"); +IconChoice5KeysDisabledCommand=diffuse,color("1,0,0,0.5"); +IconChoice5KeysOffUnfocusedCommand=linear,0.1175;zoomx,0 +IconChoice5KeysOffFocusedCommand=stopeffect;sleep,0.1175;linear,0.25;zoom,1.1;sleep,0.25;decelerate,0.3;zoom,0; +# +IconChoice7KeysX=SCREEN_CENTER_X-64 +IconChoice7KeysY=SCREEN_BOTTOM-64 +IconChoice7KeysOnCommand=zoom,0;bounceend,0.35;zoom,1 +IconChoice7KeysGainFocusCommand=stoptweening;zoom,1;pulse;effectmagnitude,1,1.125,1; +IconChoice7KeysLoseFocusCommand=stoptweening;stopeffect;zoom,0.75; +IconChoice7KeysEnabledCommand=diffuse,color("1,1,1,1"); +IconChoice7KeysDisabledCommand=diffuse,color("1,0,0,0.5"); +IconChoice7KeysOffUnfocusedCommand=linear,0.1175;zoomx,0 +IconChoice7KeysOffFocusedCommand=stopeffect;sleep,0.1175;linear,0.25;zoom,1.1;sleep,0.25;decelerate,0.3;zoom,0; +# +IconChoice10KeysX=SCREEN_CENTER_X+64 +IconChoice10KeysY=SCREEN_BOTTOM-64 +IconChoice10KeysOnCommand=zoom,0;bounceend,0.35;zoom,1 +IconChoice10KeysGainFocusCommand=stoptweening;zoom,1;pulse;effectmagnitude,1,1.125,1; +IconChoice10KeysLoseFocusCommand=stoptweening;stopeffect;zoom,0.75; +IconChoice10KeysEnabledCommand=diffuse,color("1,1,1,1"); +IconChoice10KeysDisabledCommand=diffuse,color("1,0,0,0.5"); +IconChoice10KeysOffUnfocusedCommand=linear,0.1175;zoomx,0 +IconChoice10KeysOffFocusedCommand=stopeffect;sleep,0.1175;linear,0.25;zoom,1.1;sleep,0.25;decelerate,0.3;zoom,0; +# +IconChoice14KeysX=SCREEN_CENTER_X+128 +IconChoice14KeysY=SCREEN_BOTTOM-64 +IconChoice14KeysOnCommand=zoom,0;bounceend,0.35;zoom,1 +IconChoice14KeysGainFocusCommand=stoptweening;zoom,1;pulse;effectmagnitude,1,1.125,1; +IconChoice14KeysLoseFocusCommand=stoptweening;stopeffect;zoom,0.75; +IconChoice14KeysEnabledCommand=diffuse,color("1,1,1,1"); +IconChoice14KeysDisabledCommand=diffuse,color("1,0,0,0.5"); +IconChoice14KeysOffUnfocusedCommand=linear,0.1175;zoomx,0 +IconChoice14KeysOffFocusedCommand=stopeffect;sleep,0.1175;linear,0.25;zoom,1.1;sleep,0.25;decelerate,0.3;zoom,0; +[ScreenSelectPlayMode] +# Let items do OffCommand +WaitForChildrenBeforeTweening=true +# Explanatory +ShowIcon=true +ShowScroller=true +# Force theme to load image for each style type, instead of a lua file +PerChoiceIconElement=true +PerChoiceScrollElement=false +# +ScrollerX=SCREEN_CENTER_X +ScrollerY=SCREEN_CENTER_Y-16 +# Menu Items [ThemeKit Only] +ScrollerItemOnCommand= +ScrollerItemOnFocusedCommand=visible,true +# GainFocus is when an item is selected. +ScrollerItemGainFocusCommand=visible,true;finishtweening;zoom,1.25;linear,0.125;zoom,1; +# LoseFocus is when an item is deselected. +ScrollerItemLoseFocusCommand=finishtweening;visible,false; +# OffFocused is for items you have selected and the screen is exiting. +ScrollerItemOffFocusedCommand=sleep,0.35;linear,0.15;zoom,0; +# OffUnfocused is for items that were not selected and the screen is exiting. +ScrollerItemOffUnfocusedCommand=linear,0.15;zoom,0; +# Need this so that icons animate from metrics +UseIconMetrics=true +# Positions of all da 'cons +IconChoiceNormalX=SCREEN_CENTER_X-256 +IconChoiceNormalY=SCREEN_BOTTOM-64 +IconChoiceNormalOnCommand=zoom,0;bounceend,0.35;zoom,1 +IconChoiceNormalGainFocusCommand=stoptweening;zoom,1;pulse;effectmagnitude,1,1.125,1; +IconChoiceNormalLoseFocusCommand=stoptweening;stopeffect;zoom,0.75; +IconChoiceNormalEnabledCommand=diffuse,color("1,1,1,1"); +IconChoiceNormalDisabledCommand=diffuse,color("1,0,0,0.5"); +IconChoiceNormalOffUnfocusedCommand=linear,0.1175;zoomx,0 +IconChoiceNormalOffFocusedCommand=stopeffect;sleep,0 +# +IconChoiceRaveX=SCREEN_CENTER_X-128 +IconChoiceRaveY=SCREEN_BOTTOM-64 +IconChoiceRaveOnCommand=zoom,0;bounceend,0.35;zoom,1 +IconChoiceRaveGainFocusCommand=stoptweening;zoom,1;pulse;effectmagnitude,1,1.125,1; +IconChoiceRaveLoseFocusCommand=stoptweening;stopeffect;zoom,0.75; +IconChoiceRaveEnabledCommand=diffuse,color("1,1,1,1"); +IconChoiceRaveDisabledCommand=diffuse,color("1,0,0,0.5"); +IconChoiceRaveOffUnfocusedCommand=linear,0.1175;zoomx,0 +IconChoiceRaveOffFocusedCommand=stopeffect;sleep,0 +# +IconChoiceExtendedX=SCREEN_CENTER_X +IconChoiceExtendedY=SCREEN_BOTTOM-64 +IconChoiceExtendedOnCommand=zoom,0;bounceend,0.35;zoom,1 +IconChoiceExtendedGainFocusCommand=stoptweening;zoom,1;pulse;effectmagnitude,1,1.125,1; +IconChoiceExtendedLoseFocusCommand=stoptweening;stopeffect;zoom,0.75; +IconChoiceExtendedEnabledCommand=diffuse,color("1,1,1,1"); +IconChoiceExtendedDisabledCommand=diffuse,color("1,0,0,0.5"); +IconChoiceExtendedOffUnfocusedCommand=linear,0.1175;zoomx,0 +IconChoiceExtendedOffFocusedCommand=stopeffect;sleep,0 +# +IconChoiceOniX=SCREEN_CENTER_X+128 +IconChoiceOniY=SCREEN_BOTTOM-64 +IconChoiceOniOnCommand=zoom,0;bounceend,0.35;zoom,1 +IconChoiceOniGainFocusCommand=stoptweening;zoom,1;pulse;effectmagnitude,1,1.125,1; +IconChoiceOniLoseFocusCommand=stoptweening;stopeffect;zoom,0.75; +IconChoiceOniEnabledCommand=diffuse,color("1,1,1,1"); +IconChoiceOniDisabledCommand=diffuse,color("1,0,0,0.5"); +IconChoiceOniOffUnfocusedCommand=linear,0.1175;zoomx,0 +IconChoiceOniOffFocusedCommand=stopeffect;sleep,0 +# +IconChoiceEndlessX=SCREEN_CENTER_X+256 +IconChoiceEndlessY=SCREEN_BOTTOM-64 +IconChoiceEndlessOnCommand=zoom,0;bounceend,0.35;zoom,1 +IconChoiceEndlessGainFocusCommand=stoptweening;zoom,1;pulse;effectmagnitude,1,1.125,1; +IconChoiceEndlessLoseFocusCommand=stoptweening;stopeffect;zoom,0.75; +IconChoiceEndlessEnabledCommand=diffuse,color("1,1,1,1"); +IconChoiceEndlessDisabledCommand=diffuse,color("1,0,0,0.5"); +IconChoiceEndlessOffUnfocusedCommand=linear,0.1175;zoomx,0 +IconChoiceEndlessOffFocusedCommand=stopeffect;sleep,0 [ScreenSelectMusic] +ShowStepsDisplayP1=true +StepsDisplayP1X=SCREEN_CENTER_X-192 +StepsDisplayP1Y=SCREEN_BOTTOM-64 +StepsDisplayP1OnCommand= +StepsDisplayP1OffCommand= +# +ShowStepsDisplayP2=true +StepsDisplayP2X=SCREEN_CENTER_X-192 +StepsDisplayP2Y=SCREEN_BOTTOM-64 +StepsDisplayP2OnCommand= +StepsDisplayP2OffCommand= +# MusicWheelX=SCREEN_RIGHT-128-18 MusicWheelOnCommand=draworder,-1 [MusicWheel] +HighlightOnCommand=blend,Blend.Add;diffuseramp;effectclock,'beatnooffset' +# ItemTransformFunction=function(self,offsetFromCenter,itemIndex,numItems) self:x( (1-math.cos(offsetFromCenter/math.pi))*0 ); self:y( offsetFromCenter*48 ); end -NumWheelItems=13 \ No newline at end of file +NumWheelItems=13 +[MusicWheelItem] +# Move Song all the way to the left, since it is left aligned +# see [TextBanner] +SongNameX=-124 +# +SectionExpandedX=-126 +SectionExpandedY=0 +SectionExpandedOnCommand=horizalign,left;maxwidth,252;shadowlength,1 +# +SectionCollapsedX=-126 +SectionCollapsedY=0 +SectionCollapsedOnCommand=horizalign,left;maxwidth,252;shadowlength,1 +# +SectionCountX=108 +SectionCountY=16 +SectionCountOnCommand=zoom,0.5;shadowlength,1; +[TextBanner] +TitleOnCommand=horizalign,left;shadowlength,1; +SubtitleOnCommand=horizalign,left;shadowlength,1; +ArtistOnCommand=horizalign,left;shadowlength,1;skewx,-0.2 +ArtistPrependString="" +[StepsDisplay] +ShowMeter=true +ZeroMeterString="?" +MeterX=92 +MeterY=0 +MeterOnCommand=horizalign,right;zoom,0.75;shadowlength,1 +MeterSetCommand=%function(self,param) \ + if param.CustomDifficulty then \ + self:diffuse(CustomDifficultyToLightColor(param.CustomDifficulty)); \ + end \ +end; +# +ShowDescription=true +DescriptionX=-92 +DescriptionY=0 +DescriptionOnCommand=horizalign,left;zoom,0.75;shadowlength,1;uppercase,true; +DescriptionSetCommand=%function(self,param) \ + if param.CustomDifficulty then \ + self:diffuse(CustomDifficultyToLightColor(param.CustomDifficulty)); \ + end \ +end; \ No newline at end of file diff --git a/Utils/CreatePackage.pl b/Utils/CreatePackage.pl index 48c85f50ac..81457e0f87 100755 --- a/Utils/CreatePackage.pl +++ b/Utils/CreatePackage.pl @@ -150,6 +150,7 @@ my @files = ( "Characters/default", "Courses/Default", "Data", + "NoteSkins/beat/default", "NoteSkins/common/common", # dance noteskins "NoteSkins/dance/default", @@ -166,8 +167,13 @@ my @files = ( "NoteSkins/dance/retrobar-splithand_whiteblue", # pump noteskins "NoteSkins/pump/cmd", + "NoteSkins/pump/cmd-routine-p1", + "NoteSkins/pump/cmd-routine-p2", "NoteSkins/pump/complex", "NoteSkins/pump/default", + "NoteSkins/pump/frame5p", + "NoteSkins/pump/newextra", + "NoteSkins/pump/rhythm", "NoteSkins/pump/simple", # kb7 noteskins "NoteSkins/kb7/default", @@ -175,6 +181,8 @@ my @files = ( "NoteSkins/kb7/retrobar", "NoteSkins/kb7/retrobar-iidx", "NoteSkins/kb7/retrobar-o2jam", + "NoteSkins/kb7/retrobar-razor", + "NoteSkins/kb7/retrobar-razor_o2", # themes "Themes/_fallback", "Themes/_portKit-sm4", diff --git a/_assets/fonts/_korean 24px [jamo 4-stroke] 8x8.psd b/_assets/fonts/_korean 24px [jamo 4-stroke] 8x8.psd new file mode 100644 index 0000000000..e933717c10 Binary files /dev/null and b/_assets/fonts/_korean 24px [jamo 4-stroke] 8x8.psd differ diff --git a/_assets/fonts/_korean 24px [jamo 4] 8x8.psd b/_assets/fonts/_korean 24px [jamo 4] 8x8.psd new file mode 100644 index 0000000000..d13ee0dedb Binary files /dev/null and b/_assets/fonts/_korean 24px [jamo 4] 8x8.psd differ diff --git a/autoconf/m4/bzip.m4 b/autoconf/m4/bzip.m4 new file mode 100644 index 0000000000..2f0dfc6490 --- /dev/null +++ b/autoconf/m4/bzip.m4 @@ -0,0 +1,27 @@ +AC_DEFUN([SM_BZIP], +[ + AC_REQUIRE([SM_STATIC]) + AC_CHECK_LIB(bz2, BZ2_bzCompressInit, have_bzip=yes, have_bzip=no) + AC_CHECK_HEADER(bzlib.h, have_bzip_header=yes, have_bzip_header=no) + AC_ARG_WITH(static-bzip, AS_HELP_STRING([--with-static-bzip],[Statically link bzip]), with_static_bzip=$withval, with_static_bzip=no) + + if test "$with_static_bzip" = "yes"; then + LIB_PRE=$START_STATIC + LIB_POST=$END_STATIC + fi + + if test "$have_bzip_header" = "no"; then + have_bzip=no + fi + + if test "$have_bzip" = "no"; then + echo "*** bzip is required to build StepMania; please make sure" + echo "*** that bzip is installed to continue the installation process." + exit 0; + fi + + LIBS="$LIBS $LIB_PRE -lbz2 $LIB_POST" + + LIB_PRE= + LIB_POST= +]) diff --git a/configure.ac b/configure.ac index 2fb749062c..786027c60b 100644 --- a/configure.ac +++ b/configure.ac @@ -197,6 +197,7 @@ fi AM_CONDITIONAL(WITHOUT_NETWORKING, test "$with_network" = "no") SM_ZLIB +SM_BZIP SM_AUDIO SM_VIDEO SM_TLS diff --git a/src/AutoActor.h b/src/AutoActor.h index c2223e6711..3ee95bec09 100644 --- a/src/AutoActor.h +++ b/src/AutoActor.h @@ -12,7 +12,7 @@ class XNode; class AutoActor { public: - AutoActor() { m_pActor = NULL; } + AutoActor(): m_pActor(NULL) {} ~AutoActor() { Unload(); } AutoActor( const AutoActor &cpy ); AutoActor &operator =( const AutoActor &cpy ); diff --git a/src/AutoKeysounds.cpp b/src/AutoKeysounds.cpp index b5558456cd..5aac67976b 100644 --- a/src/AutoKeysounds.cpp +++ b/src/AutoKeysounds.cpp @@ -99,7 +99,7 @@ void AutoKeysounds::LoadAutoplaySoundsInto( RageSoundReader_Chain *pChain ) if( tn[pn].iKeysoundIndex >= 0 ) { RString sKeysoundFilePath = sSongDir + pSong->m_vsKeysoundFile[tn[pn].iKeysoundIndex]; - float fSeconds = pSong->m_Timing.GetElapsedTimeFromBeat( NoteRowToBeat(iRow) ); + float fSeconds = pSong->m_Timing.GetElapsedTimeFromBeatNoOffset( NoteRowToBeat(iRow) ) + SOUNDMAN->GetPlayLatency(); float fPan = 0; if( !bSoundIsGlobal ) diff --git a/src/BPMDisplay.cpp b/src/BPMDisplay.cpp index 80ce23a145..5bdcbd66f4 100644 --- a/src/BPMDisplay.cpp +++ b/src/BPMDisplay.cpp @@ -180,8 +180,8 @@ void BPMDisplay::SetBpmFromSong( const Song* pSong ) ASSERT( pSong ); switch( pSong->m_DisplayBPMType ) { - case Song::DISPLAY_ACTUAL: - case Song::DISPLAY_SPECIFIED: + case DISPLAY_BPM_ACTUAL: + case DISPLAY_BPM_SPECIFIED: { DisplayBpms bpms; pSong->GetDisplayBpms( bpms ); @@ -189,7 +189,7 @@ void BPMDisplay::SetBpmFromSong( const Song* pSong ) m_fCycleTime = 1.0f; } break; - case Song::DISPLAY_RANDOM: + case DISPLAY_BPM_RANDOM: CycleRandomly(); break; default: @@ -294,11 +294,22 @@ class LunaBPMDisplay: public Luna { public: static int SetFromGameState( T* p, lua_State *L ) { p->SetFromGameState(); return 0; } + static int SetFromSong( T* p, lua_State *L ) + { + if( lua_isnil(L,1) ) { p->NoBPM(); } + else + { + const Song* pSong = Luna::check( L, 1, true ); + p->SetBpmFromSong(pSong); + } + return 0; + } static int GetText( T* p, lua_State *L ) { lua_pushstring( L, p->GetText() ); return 1; } LunaBPMDisplay() { ADD_METHOD( SetFromGameState ); + ADD_METHOD( SetFromSong ); ADD_METHOD( GetText ); } }; diff --git a/src/BackgroundUtil.h b/src/BackgroundUtil.h index ca813484d8..80d36b8a92 100644 --- a/src/BackgroundUtil.h +++ b/src/BackgroundUtil.h @@ -27,15 +27,26 @@ struct BackgroundDef RString m_sColor2; // "" == use default XNode *CreateNode() const; + + /** @brief Set up the BackgroundDef with default values. */ + BackgroundDef(): m_sEffect(""), m_sFile1(""), m_sFile2(""), + m_sColor1(""), m_sColor2("") {} + + /** + * @brief Set up the BackgroundDef with some defined values. + * @param effect the intended effect. + * @param f1 the primary filename for the definition. + * @param f2 the secondary filename (optional). */ + BackgroundDef(RString effect, RString f1, RString f2): + m_sEffect(effect), m_sFile1(f1), m_sFile2(f2), + m_sColor1(""), m_sColor2("") {} }; struct BackgroundChange { - BackgroundChange() - { - m_fStartBeat=-1; - m_fRate=1; - } + BackgroundChange(): m_def(), m_fStartBeat(-1), m_fRate(1), + m_sTransition("") {} + BackgroundChange( float s, RString f1, @@ -43,15 +54,10 @@ struct BackgroundChange float r=1.f, RString e=SBE_Centered, RString t=RString() - ) - { - m_fStartBeat=s; - m_def.m_sFile1=f1; - m_def.m_sFile2=f2; - m_fRate=r; - m_def.m_sEffect=e; - m_sTransition=t; - } + ): + m_def(e, f1, f2), m_fStartBeat(s), + m_fRate(r), m_sTransition(t) {} + BackgroundDef m_def; float m_fStartBeat; float m_fRate; diff --git a/src/Banner.cpp b/src/Banner.cpp index 3f8b7a8b09..b8d115e206 100644 --- a/src/Banner.cpp +++ b/src/Banner.cpp @@ -17,6 +17,9 @@ REGISTER_ACTOR_CLASS( Banner ); ThemeMetric SCROLL_RANDOM ("Banner","ScrollRandom"); ThemeMetric SCROLL_ROULETTE ("Banner","ScrollRoulette"); +//ThemeMetric SCROLL_MODE ("Banner","ScrollMode"); +//ThemeMetric SCROLL_SORT_ORDER ("Banner","ScrollSortOrder"); +ThemeMetric SCROLL_SPEED_DIVISOR ("Banner","ScrollSpeedDivisor"); Banner::Banner() { @@ -79,7 +82,7 @@ void Banner::Update( float fDeltaTime ) if( m_bScrolling ) { - m_fPercentScrolling += fDeltaTime/2; + m_fPercentScrolling += fDeltaTime/(float)SCROLL_SPEED_DIVISOR; m_fPercentScrolling -= (int)m_fPercentScrolling; const RectF *pTextureRect = GetCurrentTextureCoordRect(); diff --git a/src/BannerCache.cpp b/src/BannerCache.cpp index 8e60a2e2a8..ffcc4a3e6f 100644 --- a/src/BannerCache.cpp +++ b/src/BannerCache.cpp @@ -230,17 +230,13 @@ struct BannerTexture: public RageTexture m_iTextureWidth = m_iImageWidth = m_pImage->w; m_iTextureHeight = m_iImageHeight = m_pImage->h; - /* Find a supported texture format. If it happens to match the stored - * file, we won't have to do any conversion here, and that'll happen often - * with paletted images. */ -#if !defined(XBOX) + /* Find a supported texture format. If it happens to match the stored + * file, we won't have to do any conversion here, and that'll happen + * often with paletted images. */ PixelFormat pf = m_pImage->format->BitsPerPixel == 8? PixelFormat_PAL: PixelFormat_RGB5A1; if( !DISPLAY->SupportsTextureFormat(pf) ) pf = PixelFormat_RGBA4; -#else - // xbox display currently supports only rgba8 - PixelFormat pf = PixelFormat_RGBA8; -#endif + ASSERT( DISPLAY->SupportsTextureFormat(pf) ); ASSERT(m_pImage); diff --git a/src/BeginnerHelper.cpp b/src/BeginnerHelper.cpp index f696ad108c..3bf23107df 100644 --- a/src/BeginnerHelper.cpp +++ b/src/BeginnerHelper.cpp @@ -12,12 +12,12 @@ #include "ScreenDimensions.h" #include "ThemeManager.h" -// "PLAYER_X" offsets are relative to the pad.. ex: Setting this to 10, and the HELPER to 300, will put the dancer at 310 -#define PLAYER_X( px ) THEME->GetMetricF("BeginnerHelper",ssprintf("Player%d_X",px+1)) +// "PLAYER_X" offsets are relative to the pad. ex: Setting this to 10, and the HELPER to 300, will put the dancer at 310 +#define PLAYER_X( px ) THEME->GetMetricF("BeginnerHelper",ssprintf("Player%dX",px+1)) #define PLAYER_ANGLE THEME->GetMetricF("BeginnerHelper","PlayerAngle") #define DANCEPAD_ANGLE THEME->GetMetricF("BeginnerHelper","DancePadAngle") -// "HELPER" offsets effect the pad/dancer as a whole.. Their relative Y cooridinates are hard-coded for eachother. +// "HELPER" offsets effect the pad/dancer as a whole. Their relative Y cooridinates are hard-coded for each other. #define HELPER_X THEME->GetMetricF("BeginnerHelper","HelperX") #define HELPER_Y THEME->GetMetricF("BeginnerHelper","HelperY") @@ -75,6 +75,108 @@ BeginnerHelper::~BeginnerHelper() delete m_pDancePad; } +bool BeginnerHelper::Init( int iDancePadType ) +{ + ASSERT( !m_bInitialized ); + if( !CanUse() ) + return false; + + // If no players were successfully added, bail. + { + bool bAnyLoaded = false; + for( int pn=0; pnGetPathG("BeginnerHelper","background") ); + this->AddChild( m_sBackground ); + //m_sBackground.SetXY( 1, 1 ); + + m_sFlash.Load( THEME->GetPathG("BeginnerHelper","flash") ); + m_sFlash.SetXY( 0, 0 ); + m_sFlash.SetDiffuseAlpha( 0 ); + } + + // Load StepCircle graphics + for( int lsc=0; lscGetPathG("BeginnerHelper","stepcircle") ); + m_sStepCircle[lsc][lsce].SetZoom( 0 ); // Hide until needed. + this->AddChild(&m_sStepCircle[lsc][lsce]); + + // Set StepCircle coordinates + switch( lsce ) + { + case 0: m_sStepCircle[lsc][lsce].SetXY((HELPER_X+PLAYER_X(lsc)-80),HELPER_Y); break; // Left + case 1: m_sStepCircle[lsc][lsce].SetXY((HELPER_X+PLAYER_X(lsc)+80),HELPER_Y); break; // Right + case 2: m_sStepCircle[lsc][lsce].SetXY((HELPER_X+PLAYER_X(lsc)),(HELPER_Y-60)); break; // Up + case 3: m_sStepCircle[lsc][lsce].SetXY((HELPER_X+PLAYER_X(lsc)),(HELPER_Y+60)); break; // Down + } + } + } + + SHOW_DANCE_PAD.Load( "BeginnerHelper","ShowDancePad" ); + // Load the DancePad + if( SHOW_DANCE_PAD ) + { + switch( iDancePadType ) + { + case 0: break; // No pad + case 1: m_pDancePad->LoadMilkshapeAscii(GetAnimPath(ANIM_DANCE_PAD)); break; + case 2: m_pDancePad->LoadMilkshapeAscii(GetAnimPath(ANIM_DANCE_PADS)); break; + } + + m_pDancePad->SetHorizAlign( align_left ); // xxx: hardcoded -aj + m_pDancePad->SetRotationX( DANCEPAD_ANGLE ); + m_pDancePad->SetX( HELPER_X ); + m_pDancePad->SetY( HELPER_Y ); + // xxx: hardcoded -aj + m_pDancePad->SetZoom( 23 ); // Pad should always be 3 units bigger in zoom than the dancer. + } + + for( int pl=0; plm_pCurCharacters[pl]; + ASSERT( Character != NULL ); + + // Load textures + m_pDancer[pl]->SetHorizAlign( align_left ); + m_pDancer[pl]->LoadMilkshapeAscii( Character->GetModelPath() ); + + // Load needed animations + m_pDancer[pl]->LoadMilkshapeAsciiBones( "Step-LEFT", GetAnimPath(ANIM_LEFT) ); + m_pDancer[pl]->LoadMilkshapeAsciiBones( "Step-DOWN", GetAnimPath(ANIM_DOWN) ); + m_pDancer[pl]->LoadMilkshapeAsciiBones( "Step-UP", GetAnimPath(ANIM_UP) ); + m_pDancer[pl]->LoadMilkshapeAsciiBones( "Step-RIGHT", GetAnimPath(ANIM_RIGHT) ); + m_pDancer[pl]->LoadMilkshapeAsciiBones( "Step-JUMPLR", GetAnimPath(ANIM_JUMPLR) ); + m_pDancer[pl]->LoadMilkshapeAsciiBones( "rest", Character->GetRestAnimationPath() ); + m_pDancer[pl]->SetDefaultAnimation( "rest" ); // Stay bouncing after a step has finished animating + m_pDancer[pl]->PlayAnimation( "rest" ); + m_pDancer[pl]->SetRotationX( PLAYER_ANGLE ); + m_pDancer[pl]->SetX( HELPER_X+PLAYER_X(pl) ); + m_pDancer[pl]->SetY( HELPER_Y+10 ); + m_pDancer[pl]->SetZoom( 20 ); + m_pDancer[pl]->SetCullMode( CULL_NONE ); // many of the models floating around have the vertex order flipped + } + + m_bInitialized = true; + return true; +} + void BeginnerHelper::ShowStepCircle( PlayerNumber pn, int CSTEP ) { int isc=0; // Save OR issues within array boundries.. it's worth the extra few bytes of memory. @@ -120,102 +222,6 @@ bool BeginnerHelper::CanUse() return GAMESTATE->GetCurrentStyle()->m_bCanUseBeginnerHelper; } -bool BeginnerHelper::Initialize( int iDancePadType ) -{ - ASSERT( !m_bInitialized ); - if( !CanUse() ) - return false; - - // If no players were successfully added, bail. - { - bool bAnyLoaded = false; - for( int pn=0; pnGetPathG("BeginnerHelper","background") ); - this->AddChild( &m_sBackground ); - m_sBackground.SetXY( 1, 1 ); - m_sFlash.Load( THEME->GetPathG("BeginnerHelper","flash") ); - m_sFlash.SetXY( 0, 0 ); - m_sFlash.SetDiffuseAlpha( 0 ); - } - - // Load StepCircle graphics - for( int lsc=0; lscGetPathG("BeginnerHelper","stepcircle") ); - m_sStepCircle[lsc][lsce].SetZoom( 0 ); // Hide until needed. - this->AddChild(&m_sStepCircle[lsc][lsce]); - - // Set coordinates of StepCircle - switch( lsce ) - { - case 0: m_sStepCircle[lsc][lsce].SetXY((HELPER_X+PLAYER_X(lsc)-80),HELPER_Y); break; // Left - case 1: m_sStepCircle[lsc][lsce].SetXY((HELPER_X+PLAYER_X(lsc)+80),HELPER_Y); break; // Right - case 2: m_sStepCircle[lsc][lsce].SetXY((HELPER_X+PLAYER_X(lsc)),(HELPER_Y-60)); break; // Up - case 3: m_sStepCircle[lsc][lsce].SetXY((HELPER_X+PLAYER_X(lsc)),(HELPER_Y+60)); break; // Down - } - } - } - - // Load the DancePad - switch( iDancePadType ) - { - case 0: break; // No pad - case 1: m_pDancePad->LoadMilkshapeAscii(GetAnimPath(ANIM_DANCE_PAD)); break; - case 2: m_pDancePad->LoadMilkshapeAscii(GetAnimPath(ANIM_DANCE_PADS)); break; - } - - m_pDancePad->SetHorizAlign( align_left ); - m_pDancePad->SetRotationX( DANCEPAD_ANGLE ); - m_pDancePad->SetX( HELPER_X ); - m_pDancePad->SetY( HELPER_Y ); - m_pDancePad->SetZoom( 23 ); // Pad should always be 3 units bigger in zoom than the dancer. - - for( int pl=0; plm_pCurCharacters[pl]; - ASSERT( Character != NULL ); - - // Load textures - m_pDancer[pl]->SetHorizAlign( align_left ); - m_pDancer[pl]->LoadMilkshapeAscii( Character->GetModelPath() ); - - // Load needed animations - m_pDancer[pl]->LoadMilkshapeAsciiBones( "Step-LEFT", GetAnimPath(ANIM_LEFT) ); - m_pDancer[pl]->LoadMilkshapeAsciiBones( "Step-DOWN", GetAnimPath(ANIM_DOWN) ); - m_pDancer[pl]->LoadMilkshapeAsciiBones( "Step-UP", GetAnimPath(ANIM_UP) ); - m_pDancer[pl]->LoadMilkshapeAsciiBones( "Step-RIGHT", GetAnimPath(ANIM_RIGHT) ); - m_pDancer[pl]->LoadMilkshapeAsciiBones( "Step-JUMPLR", GetAnimPath(ANIM_JUMPLR) ); - m_pDancer[pl]->LoadMilkshapeAsciiBones( "rest", Character->GetRestAnimationPath() ); - m_pDancer[pl]->SetDefaultAnimation( "rest" ); // Stay bouncing after a step has finished animating - m_pDancer[pl]->PlayAnimation( "rest" ); - m_pDancer[pl]->SetRotationX( PLAYER_ANGLE ); - m_pDancer[pl]->SetX( HELPER_X+PLAYER_X(pl) ); - m_pDancer[pl]->SetY( HELPER_Y+10 ); - m_pDancer[pl]->SetZoom( 20 ); - m_pDancer[pl]->SetCullMode( CULL_NONE ); // many of the models floating around have the vertex order flipped - } - - m_bInitialized = true; - return true; -} - void BeginnerHelper::DrawPrimitives() { // If not initialized, don't bother with this @@ -226,32 +232,37 @@ void BeginnerHelper::DrawPrimitives() m_sFlash.Draw(); bool DrawCelShaded = PREFSMAN->m_bCelShadeModels; - if( DrawCelShaded ) - m_pDancePad->DrawCelShaded(); - else + // Draw Pad + if( SHOW_DANCE_PAD ) { - DISPLAY->SetLighting( true ); - DISPLAY->SetLightDirectional( - 0, - RageColor(0.5,0.5,0.5,1), - RageColor(1,1,1,1), - RageColor(0,0,0,1), - RageVector3(0, 0, 1) ); + if( DrawCelShaded ) + m_pDancePad->DrawCelShaded(); + else + { + DISPLAY->SetLighting( true ); + DISPLAY->SetLightDirectional( + 0, + RageColor(0.5,0.5,0.5,1), + RageColor(1,1,1,1), + RageColor(0,0,0,1), + RageVector3(0, 0, 1) ); - m_pDancePad->Draw(); - DISPLAY->ClearZBuffer(); // So character doesn't step "into" the dance pad. - DISPLAY->SetLightOff( 0 ); - DISPLAY->SetLighting( false ); + m_pDancePad->Draw(); + DISPLAY->ClearZBuffer(); // So character doesn't step "into" the dance pad. + DISPLAY->SetLightOff( 0 ); + DISPLAY->SetLighting( false ); + } } - + // Draw StepCircles for(int scd=0; scdIsHumanPlayer(pn) ) m_pDancer[pn]->DrawCelShaded(); } @@ -265,7 +276,7 @@ void BeginnerHelper::DrawPrimitives() RageColor(0,0,0,1), RageVector3(0, 0, 1) ); - FOREACH_PlayerNumber( pn ) // Draw each dancer + FOREACH_PlayerNumber( pn ) if( GAMESTATE->IsHumanPlayer(pn) ) m_pDancer[pn]->Draw(); @@ -314,7 +325,7 @@ void BeginnerHelper::Step( PlayerNumber pn, int CSTEP ) m_pDancer[pn]->SetRotationY( 0 ); break; } - + m_sFlash.StopEffect(); m_sFlash.StopTweening(); m_sFlash.Sleep( GAMESTATE->m_fCurBPS/16 ); @@ -337,22 +348,22 @@ void BeginnerHelper::Update( float fDeltaTime ) // Check if there are any notes at all on this row.. If not, save scanning. if( !m_NoteData[pn].IsThereATapAtRow(iRow) ) continue; - + // Find all steps on this row, in order to show the correct animations int iStep = 0; const int iNumTracks = m_NoteData[pn].GetNumTracks(); for( int t=0; tStep( pn, iStep ); } } - + // Make sure we don't accidentally scan a row 2x m_iLastRowChecked = iCurRow; - + // Update animations ActorFrame::Update( fDeltaTime ); m_pDancePad->Update( fDeltaTime ); diff --git a/src/BeginnerHelper.h b/src/BeginnerHelper.h index f188d0e739..a5941e7e85 100644 --- a/src/BeginnerHelper.h +++ b/src/BeginnerHelper.h @@ -4,8 +4,10 @@ #include "ActorFrame.h" #include "Character.h" #include "Sprite.h" +#include "AutoActor.h" #include "PlayerNumber.h" #include "NoteData.h" +#include "ThemeMetric.h" class Model; /** @brief A dancing character that follows the steps of the Song. */ class BeginnerHelper : public ActorFrame @@ -14,7 +16,7 @@ public: BeginnerHelper(); ~BeginnerHelper(); - bool Initialize( int iDancePadType ); + bool Init( int iDancePadType ); bool IsInitialized() { return m_bInitialized; } static bool CanUse(); void AddPlayer( PlayerNumber pn, const NoteData &nd ); @@ -32,12 +34,14 @@ protected: Model *m_pDancer[NUM_PLAYERS]; Model *m_pDancePad; Sprite m_sFlash; - Sprite m_sBackground; + AutoActor m_sBackground; Sprite m_sStepCircle[NUM_PLAYERS][4]; // More memory, but much easier to manage int m_iLastRowChecked; int m_iLastRowFlashed; bool m_bInitialized; + + ThemeMetric SHOW_DANCE_PAD; }; #endif diff --git a/src/BitmapText.h b/src/BitmapText.h index 2647dda970..bc06c5c406 100644 --- a/src/BitmapText.h +++ b/src/BitmapText.h @@ -51,7 +51,7 @@ public: struct Attribute { - Attribute() : length(-1) { } + Attribute() : length(-1), glow() { } int length; RageColor diffuse[4]; RageColor glow; diff --git a/src/Command.h b/src/Command.h index 88f5110bfc..71adceb282 100644 --- a/src/Command.h +++ b/src/Command.h @@ -16,10 +16,13 @@ public: struct Arg { RString s; + Arg(): s("") {} }; Arg GetArg( unsigned index ) const; vector m_vsArgs; + + Command(): m_vsArgs() {} }; class Commands diff --git a/src/CommonMetrics.h b/src/CommonMetrics.h index f2e4e629c5..ba0529b361 100644 --- a/src/CommonMetrics.h +++ b/src/CommonMetrics.h @@ -11,7 +11,7 @@ class ThemeMetricDifficultiesToShow : public ThemeMetric { public: - ThemeMetricDifficultiesToShow() { } + ThemeMetricDifficultiesToShow(): m_v() { } ThemeMetricDifficultiesToShow( const RString& sGroup, const RString& sName ); void Read(); const vector &GetValue() const; @@ -21,7 +21,7 @@ private: class ThemeMetricCourseDifficultiesToShow : public ThemeMetric { public: - ThemeMetricCourseDifficultiesToShow() { } + ThemeMetricCourseDifficultiesToShow(): m_v() { } ThemeMetricCourseDifficultiesToShow( const RString& sGroup, const RString& sName ); void Read(); const vector &GetValue() const; @@ -31,7 +31,7 @@ private: class ThemeMetricStepsTypesToShow : public ThemeMetric { public: - ThemeMetricStepsTypesToShow() { } + ThemeMetricStepsTypesToShow(): m_v() { } ThemeMetricStepsTypesToShow( const RString& sGroup, const RString& sName ); void Read(); const vector &GetValue() const; diff --git a/src/Course.cpp b/src/Course.cpp index 10dc2c7f0f..dec0b75526 100644 --- a/src/Course.cpp +++ b/src/Course.cpp @@ -88,9 +88,18 @@ int CourseEntry::GetNumModChanges() const -Course::Course() +Course::Course(): m_bIsAutogen(false), m_sPath(""), m_sMainTitle(""), + m_sMainTitleTranslit(""), m_sSubTitle(""), m_sSubTitleTranslit(""), + m_sBannerPath(""), m_sBackgroundPath(""), m_sCDTitlePath(""), + m_sGroupName(""), m_sScripter(""), m_bRepeat(false), m_fGoalSeconds(0), + m_bShuffle(false), m_iLives(-1), m_bSortByMeter(false), + m_bIncomplete(false), m_vEntries(), m_SortOrder_TotalDifficulty(0), + m_SortOrder_Ranking(0), m_LoadedFromProfile(ProfileSlot_Invalid), + m_TrailCache(), m_iTrailCacheSeed(0), m_RadarCache(), + m_setStyles(), m_CachedObject() { - Init(); + FOREACH_ENUM( Difficulty,dc) + m_iCustomMeter[dc] = -1; } CourseType Course::GetCourseType() const @@ -166,6 +175,7 @@ void Course::Init() m_sMainTitleTranslit = ""; m_sSubTitle = ""; m_sSubTitleTranslit = ""; + m_sScripter = ""; m_sBannerPath = ""; m_sBackgroundPath = ""; @@ -239,6 +249,9 @@ struct SortTrailEntry { TrailEntry entry; int SortMeter; + + SortTrailEntry(): entry(), SortMeter(0) {} + bool operator< ( const SortTrailEntry &rhs ) const { return SortMeter < rhs.SortMeter; } }; @@ -1079,6 +1092,7 @@ public: static int GetGroupName( T* p, lua_State *L ) { lua_pushstring(L, p->m_sGroupName ); return 1; } static int IsAutogen( T* p, lua_State *L ) { lua_pushboolean(L, p->m_bIsAutogen ); return 1; } static int GetEstimatedNumStages( T* p, lua_State *L ) { lua_pushnumber(L, p->GetEstimatedNumStages() ); return 1; } + static int GetScripter( T* p, lua_State *L ) { lua_pushstring(L, p->m_sScripter ); return 1; } static int GetTotalSeconds( T* p, lua_State *L ) { StepsType st = Enum::Check(L, 1); @@ -1099,28 +1113,29 @@ public: LunaCourse() { - ADD_METHOD( GetPlayMode ); // [sm-ssc] returns PlayMode enum now + ADD_METHOD( GetPlayMode ); ADD_METHOD( GetDisplayFullTitle ); ADD_METHOD( GetTranslitFullTitle ); ADD_METHOD( HasMods ); ADD_METHOD( HasTimedMods ); - ADD_METHOD( GetCourseType ); // [sm-ssc] returns CourseType enum now + ADD_METHOD( GetCourseType ); ADD_METHOD( GetCourseEntry ); ADD_METHOD( GetCourseEntries ); ADD_METHOD( GetAllTrails ); ADD_METHOD( GetBannerPath ); - ADD_METHOD( GetBackgroundPath ); // sm-ssc addition - ADD_METHOD( GetCourseDir ); // sm-ssc addition + ADD_METHOD( GetBackgroundPath ); + ADD_METHOD( GetCourseDir ); ADD_METHOD( GetGroupName ); ADD_METHOD( IsAutogen ); ADD_METHOD( GetEstimatedNumStages ); + ADD_METHOD( GetScripter ); ADD_METHOD( GetTotalSeconds ); ADD_METHOD( IsEndless ); - ADD_METHOD( IsNonstop ); // sm-ssc addition - ADD_METHOD( IsOni ); // sm-ssc addition + ADD_METHOD( IsNonstop ); + ADD_METHOD( IsOni ); ADD_METHOD( GetGoalSeconds ); - ADD_METHOD( HasBanner ); // sm-ssc addition - ADD_METHOD( HasBackground ); // sm-ssc addition + ADD_METHOD( HasBanner ); + ADD_METHOD( HasBackground ); ADD_METHOD( IsAnEdit ); } }; diff --git a/src/Course.h b/src/Course.h index 25864c12f6..b6326833f2 100644 --- a/src/Course.h +++ b/src/Course.h @@ -55,9 +55,11 @@ public: float fGainSeconds; // time gained back at the beginning of the song. LifeMeterTime only. int iGainLives; // lives gained back at the beginning of the next song - CourseEntry(): bSecret(false), bNoDifficult(false), + CourseEntry(): bSecret(false), songID(), songCriteria(), + stepsCriteria(), bNoDifficult(false), songSort(SongSort_Randomize), iChooseIndex(0), - sModifiers(RString("")), fGainSeconds(0), iGainLives(-1) {} + sModifiers(RString("")), attacks(), fGainSeconds(0), + iGainLives(-1) {} bool IsFixedSong() const { return songID.IsValid(); } @@ -159,9 +161,10 @@ public: RString m_sMainTitle, m_sMainTitleTranslit; RString m_sSubTitle, m_sSubTitleTranslit; + RString m_sScripter; RString m_sBannerPath; - RString m_sBackgroundPath; // after 9 years yes finally -aj + RString m_sBackgroundPath; RString m_sCDTitlePath; RString m_sGroupName; @@ -187,6 +190,8 @@ public: { Trail trail; bool null; + + CacheData(): trail(), null(false) {} }; typedef map TrailCache_t; mutable TrailCache_t m_TrailCache; diff --git a/src/CourseContentsList.cpp b/src/CourseContentsList.cpp index a4e09474c5..ee4b99cb2f 100644 --- a/src/CourseContentsList.cpp +++ b/src/CourseContentsList.cpp @@ -78,7 +78,9 @@ void CourseContentsList::SetItemFromGameState( Actor *pActor, int iCourseEntryIn FOREACH_HumanPlayer(pn) { const Trail *pTrail = GAMESTATE->m_pCurTrail[pn]; - if( pTrail == NULL || iCourseEntryIndex >= (int) pTrail->m_vEntries.size() ) + if( pTrail == NULL + || iCourseEntryIndex >= (int) pTrail->m_vEntries.size() + || iCourseEntryIndex >= (int) pCourse->m_vEntries.size() ) continue; const TrailEntry *te = &pTrail->m_vEntries[iCourseEntryIndex]; diff --git a/src/CourseLoaderCRS.cpp b/src/CourseLoaderCRS.cpp index d0bd999294..e2bd6a59a4 100644 --- a/src/CourseLoaderCRS.cpp +++ b/src/CourseLoaderCRS.cpp @@ -65,6 +65,8 @@ bool CourseLoaderCRS::LoadFromMsd( const RString &sPath, const MsdFile &msd, Cou out.m_sMainTitle = sParams[1]; else if( 0 == stricmp(sValueName, "COURSETRANSLIT") ) out.m_sMainTitleTranslit = sParams[1]; + else if( 0 == stricmp(sValueName, "SCRIPTER") ) + out.m_sScripter = sParams[1]; else if( 0 == stricmp(sValueName, "REPEAT") ) { RString str = sParams[1]; @@ -161,6 +163,7 @@ 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 + LOG->Trace("[CourseLoaderCRS] sParams[1] = %s",sParams[1].c_str()); // most played if( sParams[1].Left(strlen("BEST")) == "BEST" ) { @@ -176,7 +179,7 @@ bool CourseLoaderCRS::LoadFromMsd( const RString &sPath, const MsdFile &msd, Cou new_entry.songSort = SongSort_FewestPlays; } // best grades - if( sParams[1].Left(strlen("GRADEBEST")) == "GRADEBEST" ) + else if( sParams[1].Left(strlen("GRADEBEST")) == "GRADEBEST" ) { new_entry.iChooseIndex = atoi( sParams[1].Right(sParams[1].size()-strlen("GRADEBEST")) ) - 1; CLAMP( new_entry.iChooseIndex, 0, 500 ); diff --git a/src/CourseUtil.h b/src/CourseUtil.h index f897617888..e338c9c3e7 100644 --- a/src/CourseUtil.h +++ b/src/CourseUtil.h @@ -68,7 +68,7 @@ namespace EditCourseUtil class CourseID { public: - CourseID() { Unset(); } + CourseID(): sPath(""), sFullTitle(""), m_Cache() { Unset(); } void Unset() { FromCourse(NULL); } void FromCourse( const Course *p ); Course *ToCourse() const; diff --git a/src/CourseWriterCRS.cpp b/src/CourseWriterCRS.cpp index 582653847c..8a52095667 100644 --- a/src/CourseWriterCRS.cpp +++ b/src/CourseWriterCRS.cpp @@ -46,6 +46,8 @@ bool CourseWriterCRS::Write( const Course &course, RageFileBasic &f, bool bSavin f.PutLine( ssprintf("#COURSE:%s;", course.m_sMainTitle.c_str()) ); if( course.m_sMainTitleTranslit != "" ) f.PutLine( ssprintf("#COURSETRANSLIT:%s;", course.m_sMainTitleTranslit.c_str()) ); + if( course.m_sScripter != "" ) + f.PutLine( ssprintf("#SCRIPTER:%s;", course.m_sScripter.c_str()) ); if( course.m_bRepeat ) f.PutLine( "#REPEAT:YES;" ); if( course.m_iLives != -1 ) diff --git a/src/DancingCharacters.cpp b/src/DancingCharacters.cpp index 3404096a63..6653173f9b 100644 --- a/src/DancingCharacters.cpp +++ b/src/DancingCharacters.cpp @@ -43,10 +43,11 @@ const float MODEL_X_ONE_PLAYER = 0; const float MODEL_X_TWO_PLAYERS[NUM_PLAYERS] = { +8, -8 }; const float MODEL_ROTATIONY_TWO_PLAYERS[NUM_PLAYERS] = { -90, 90 }; -DancingCharacters::DancingCharacters() +DancingCharacters::DancingCharacters(): m_bDrawDangerLight(false), + m_CameraDistance(0), m_CameraPanYStart(0), m_CameraPanYEnd(0), + m_fLookAtHeight(0), m_fCameraHeightStart(0), m_fCameraHeightEnd(0), + m_fThisCameraStartBeat(0), m_fThisCameraEndBeat(0) { - m_bDrawDangerLight = false; - FOREACH_PlayerNumber( p ) { m_pCharacter[p] = new Model; diff --git a/src/FadingBanner.cpp b/src/FadingBanner.cpp index e8e536e911..b64b8850d3 100644 --- a/src/FadingBanner.cpp +++ b/src/FadingBanner.cpp @@ -226,12 +226,14 @@ void FadingBanner::LoadRoulette() { BeforeChange(); m_Banner[m_iIndexLatest].LoadRoulette(); + m_Banner[m_iIndexLatest].PlayCommand( "Roulette" ); } void FadingBanner::LoadRandom() { BeforeChange(); m_Banner[m_iIndexLatest].LoadRandom(); + m_Banner[m_iIndexLatest].PlayCommand( "Random" ); } void FadingBanner::LoadFromSortOrder( SortOrder so ) @@ -252,6 +254,13 @@ void FadingBanner::LoadCourseFallback() m_Banner[m_iIndexLatest].LoadCourseFallback(); } +void FadingBanner::LoadCustom( RString sBanner ) +{ + BeforeChange(); + m_Banner[m_iIndexLatest].Load( THEME->GetPathG( "Banner", sBanner ) ); + m_Banner[m_iIndexLatest].PlayCommand( sBanner ); +} + // lua start #include "LuaBinding.h" diff --git a/src/FadingBanner.h b/src/FadingBanner.h index 33cafbfac9..4770eefd24 100644 --- a/src/FadingBanner.h +++ b/src/FadingBanner.h @@ -29,6 +29,7 @@ public: void LoadFromSortOrder( SortOrder so ); void LoadFallback(); void LoadCourseFallback(); + void LoadCustom( RString sBanner ); bool LoadFromCachedBanner( const RString &path ); bool LoadFromCachedBackground( const RString &path ); diff --git a/src/Font.cpp b/src/Font.cpp index 10c89f5ad8..a012906df5 100644 --- a/src/Font.cpp +++ b/src/Font.cpp @@ -13,7 +13,8 @@ FontPage::FontPage(): m_iHeight(0), m_iLineSpacing(0), m_fVshift(0), m_iDrawExtraPixelsLeft(0), m_iDrawExtraPixelsRight(0), - m_sTexturePath("") {} + m_FontPageTextures(), m_sTexturePath(""), m_aGlyphs(), + m_iCharToGlyphNo() {} void FontPage::Load( const FontPageSettings &cfg ) { @@ -156,11 +157,6 @@ void FontPage::SetTextureCoords( const vector &widths, int iAdvanceExtraPix void FontPage::SetExtraPixels( int iDrawExtraPixelsLeft, int iDrawExtraPixelsRight ) { - /* Hack: do one more than we were asked to; I think a lot of fonts are one - * too low. - glenn */ - iDrawExtraPixelsRight++; - iDrawExtraPixelsLeft++; - if( (iDrawExtraPixelsLeft % 2) == 1 ) ++iDrawExtraPixelsLeft; @@ -220,15 +216,10 @@ int Font::GetLineHeightInSourcePixels( const wstring &szLine ) const } -Font::Font() -{ - m_iRefCount = 1; - m_pDefault = NULL; - m_bRightToLeft = false; - // [sm-ssc] don't show strokes by default - m_DefaultStrokeColor = RageColor(0,0,0,0); -} - +Font::Font(): m_iRefCount(1), path(""), m_apPages(), m_pDefault(NULL), + m_iCharToGlyph(), m_bRightToLeft(false), + // strokes aren't shown by default, hence the Color. + m_DefaultStrokeColor(RageColor(0,0,0,0)), m_sChars("") {} Font::~Font() { Unload(); @@ -717,8 +708,8 @@ void Font::Load( const RString &sIniPath, RString sChars ) for(unsigned i = 0; i < ImportList.size(); ++i) { - RString fPath = THEME->GetPathF( "", ImportList[i], true ); - if( fPath == "" ) + RString sPath = THEME->GetPathF( "", ImportList[i], true ); + if( sPath == "" ) { RString s = ssprintf( "Font \"%s\" imports a font \"%s\" that doesn't exist", sIniPath.c_str(), ImportList[i].c_str() ); Dialog::OK( s ); @@ -726,7 +717,7 @@ void Font::Load( const RString &sIniPath, RString sChars ) } Font subfont; - subfont.Load(fPath,""); + subfont.Load(sPath,""); MergeFont(subfont); } } diff --git a/src/Font.h b/src/Font.h index ef1eeb1f73..d57a6b5eae 100644 --- a/src/Font.h +++ b/src/Font.h @@ -23,11 +23,7 @@ struct FontPageTextures RageTexture *m_pTextureStroke; /** @brief Set up the initial textures. */ - FontPageTextures() - { - m_pTextureMain = NULL; - m_pTextureStroke = NULL; - } + FontPageTextures(): m_pTextureMain(NULL), m_pTextureStroke(NULL) {} }; /** @brief The components of a glyph (not technically a character). */ @@ -52,6 +48,10 @@ struct glyph /** @brief Texture coordinate rect. */ RectF m_TexRect; + + /** @brief Set up the glyph with default values. */ + glyph() : m_pPage(NULL), m_FontPageTextures(), m_iHadvance(0), + m_fWidth(0), m_fHeight(0), m_fHshift(0), m_TexRect() {} }; /** @brief The settings used for the FontPage. */ @@ -75,7 +75,7 @@ struct FontPageSettings map m_mapGlyphWidths; /** @brief The initial settings for the FontPage. */ - FontPageSettings(): + FontPageSettings(): m_sTexturePath(""), m_iDrawExtraPixelsLeft(0), m_iDrawExtraPixelsRight(0), m_iAddToAllWidths(0), m_iLineSpacing(-1), @@ -84,7 +84,9 @@ struct FontPageSettings m_iDefaultWidth(-1), m_iAdvanceExtraPixels(1), m_fScaleAllWidthsBy(1), - m_sTextureHints("default") + m_sTextureHints("default"), + CharToGlyphNo(), + m_mapGlyphWidths() { } /** diff --git a/src/GameCommand.h b/src/GameCommand.h index f04f97da6f..8cd135dde4 100644 --- a/src/GameCommand.h +++ b/src/GameCommand.h @@ -22,7 +22,27 @@ struct lua_State; class GameCommand { public: - GameCommand() { Init(); } + GameCommand(): m_Commands(), m_sName(""), m_sText(""), + m_bInvalid(true), m_sInvalidReason(""), + m_iIndex(-1), m_MultiPlayer(MultiPlayer_Invalid), + m_pStyle(NULL), m_pm(PlayMode_Invalid), + m_dc(Difficulty_Invalid), + m_CourseDifficulty(Difficulty_Invalid), + m_sAnnouncer(""), m_sPreferredModifiers(""), + m_sStageModifiers(""), m_sScreen(""), m_LuaFunction(), + m_pSong(NULL), m_pSteps(NULL), m_pCourse(NULL), + m_pTrail(NULL), m_pCharacter(NULL), m_SetEnv(), + m_sSongGroup(""), m_SortOrder(SortOrder_Invalid), + m_sSoundPath(""), m_vsScreensToPrepare(), m_iWeightPounds(-1), + m_iGoalCalories(-1), m_GoalType(GoalType_Invalid), + m_sProfileID(""), m_sUrl(""), m_bUrlExits(true), + m_bInsertCredit(false), m_bClearCredits(false), + m_bStopMusic(false), m_bApplyDefaultOptions(false), + m_bFadeMusic(false), m_fMusicFadeOutVolume(-1), + m_fMusicFadeOutSeconds(-1), m_bApplyCommitsScreens(true) + { + m_LuaFunction.Unset(); + } void Init(); void Load( int iIndex, const Commands& cmds ); diff --git a/src/GameSoundManager.cpp b/src/GameSoundManager.cpp index ca07566f8a..5b3ba858de 100644 --- a/src/GameSoundManager.cpp +++ b/src/GameSoundManager.cpp @@ -142,7 +142,8 @@ static void StartMusic( MusicToPlay &ToPlay ) { LOG->Trace( "Found '%s'", ToPlay.m_sTimingFile.c_str() ); Song song; - if( SSCLoader::LoadFromSSCFile(ToPlay.m_sTimingFile, song) ) + if( GetExtension(ToPlay.m_sTimingFile) == ".ssc" && + SSCLoader::LoadFromSSCFile(ToPlay.m_sTimingFile, song) ) { ToPlay.HasTiming = true; ToPlay.m_TimingData = song.m_Timing; @@ -151,7 +152,8 @@ static void StartMusic( MusicToPlay &ToPlay ) if( pStepsCabinetLights ) pStepsCabinetLights->GetNoteData( ToPlay.m_LightsData ); } - else if( SMLoader::LoadFromSMFile(ToPlay.m_sTimingFile, song) ) + else if( GetExtension(ToPlay.m_sTimingFile) == ".sm" && + SMLoader::LoadFromSMFile(ToPlay.m_sTimingFile, song) ) { ToPlay.HasTiming = true; ToPlay.m_TimingData = song.m_Timing; diff --git a/src/GameState.cpp b/src/GameState.cpp index c1f5b0b0f4..90792cad8c 100644 --- a/src/GameState.cpp +++ b/src/GameState.cpp @@ -355,9 +355,14 @@ void GameState::JoinPlayer( PlayerNumber pn ) if( ALLOW_LATE_JOIN && m_pCurStyle != NULL ) { const Style *pStyle; - // only use one player for StyleType_OnePlayerTwoSides. + // Only use one player for StyleType_OnePlayerTwoSides and StepsTypes + // that can only be played by one player (e.g. dance-solo, + // dance-threepanel, popn-nine). -aj // XXX?: still shows joined player as "Insert Card". May not be an issue? -aj - if( m_pCurStyle->m_StyleType == StyleType_OnePlayerTwoSides ) + if( m_pCurStyle->m_StyleType == StyleType_OnePlayerTwoSides || + m_pCurStyle->m_StepsType == StepsType_dance_solo || + m_pCurStyle->m_StepsType == StepsType_dance_threepanel || + m_pCurStyle->m_StepsType == StepsType_popn_nine ) pStyle = GAMEMAN->GetFirstCompatibleStyle( m_pCurGame, 1, m_pCurStyle->m_StepsType ); else pStyle = GAMEMAN->GetFirstCompatibleStyle( m_pCurGame, GetNumSidesJoined(), m_pCurStyle->m_StepsType ); @@ -897,7 +902,7 @@ void GameState::ResetMusicStatistics() m_bFreeze = false; m_bDelay = false; m_iWarpBeginRow = -1; // Set to -1 because some song may want to warp to row 0. -aj - m_fWarpLength = -1; // Set when a warp is encountered. also see above. -aj + m_fWarpDestination = -1; // Set when a warp is encountered. also see above. -aj m_fMusicSecondsVisible = 0; m_fSongBeatVisible = 0; Actor::SetBGMTime( 0, 0, 0, 0 ); @@ -943,7 +948,7 @@ void GameState::ResetStageStatistics() } static Preference g_fVisualDelaySeconds( "VisualDelaySeconds", 0.0f ); -// todo: modify for warps -aj + void GameState::UpdateSongPosition( float fPositionSeconds, const TimingData &timing, const RageTimer ×tamp ) { if( !timestamp.IsZero() ) @@ -957,18 +962,10 @@ void GameState::UpdateSongPosition( float fPositionSeconds, const TimingData &ti LOG->Trace( ssprintf("[GameState::UpdateSongPosition] cur BPS = %f, fPositionSeconds = %f",m_fCurBPS,fPositionSeconds) ); */ - timing.GetBeatAndBPSFromElapsedTime( fPositionSeconds, m_fSongBeat, m_fCurBPS, m_bFreeze, m_bDelay, m_iWarpBeginRow, m_fWarpLength ); + timing.GetBeatAndBPSFromElapsedTime( fPositionSeconds, m_fSongBeat, m_fCurBPS, m_bFreeze, m_bDelay, m_iWarpBeginRow, m_fWarpDestination ); // "Crash reason : -243478.890625 -48695.773438" ASSERT_M( m_fSongBeat > -2000, ssprintf("Song beat %f at %f seconds", m_fSongBeat, fPositionSeconds) ); - //if( m_iWarpBeginRow != -1 || m_iWarpEndRow == -1 ) - if( m_iWarpBeginRow != -1 && m_fWarpLength > 0.0f ) - { - // There is a warp in this section. - LOG->Trace("warp at %i lasts for %f, jumps to %i",m_iWarpBeginRow,m_fWarpLength,m_iWarpBeginRow+BeatToNoteRow(m_fWarpLength)); - //fPositionSeconds += (m_fWarpLength * m_fCurBPS); - } - m_fMusicSeconds = fPositionSeconds; m_fLightSongBeat = timing.GetBeatFromElapsedTime( fPositionSeconds + g_fLightsAheadSeconds ); diff --git a/src/GameState.h b/src/GameState.h index d26fe5b308..406e4784b1 100644 --- a/src/GameState.h +++ b/src/GameState.h @@ -208,9 +208,10 @@ public: bool m_bFreeze; /** @brief A flag to determine if we're in the middle of a delay (Pump style stop). */ bool m_bDelay; - // used for warping: + /** @brief The row used to start a warp. */ int m_iWarpBeginRow; - float m_fWarpLength; + /** @brief The beat to warp to afterwards. */ + float m_fWarpDestination; RageTimer m_LastBeatUpdate; // time of last m_fSongBeat, etc. update BroadcastOnChange m_bGameplayLeadIn; diff --git a/src/HighScore.h b/src/HighScore.h index 61610bb88f..3673c98e37 100644 --- a/src/HighScore.h +++ b/src/HighScore.h @@ -100,10 +100,13 @@ private: struct HighScoreList { public: - HighScoreList() - { - Init(); - } + /** + * @brief Set up the HighScore List with default values. + * + * This used to call Init(), but it's better to be explicit here. */ + HighScoreList(): vHighScores(), HighGrade(Grade_NoData), + iNumTimesPlayed(0), dtLastPlayed() {} + void Init(); int GetNumTimesPlayed() const diff --git a/src/InputEventPlus.h b/src/InputEventPlus.h index 0907b55ed6..2ba00ae493 100644 --- a/src/InputEventPlus.h +++ b/src/InputEventPlus.h @@ -9,10 +9,11 @@ class InputEventPlus { public: InputEventPlus(): + DeviceI(), GameI(), type(IET_FIRST_PRESS), MenuI(GameButton_Invalid), pn(PLAYER_INVALID), - mp(MultiPlayer_Invalid) { } + mp(MultiPlayer_Invalid), InputList() { } DeviceInput DeviceI; GameInput GameI; InputEventType type; diff --git a/src/InputMapper.h b/src/InputMapper.h index 271d682465..d09f23c53e 100644 --- a/src/InputMapper.h +++ b/src/InputMapper.h @@ -78,7 +78,7 @@ struct AutoMappings AutoMappingEntry im37 = AutoMappingEntry(), AutoMappingEntry im38 = AutoMappingEntry(), AutoMappingEntry im39 = AutoMappingEntry() ) - : m_sGame(s1), m_sDriverRegex(s2), m_sControllerName(s3) + : m_sGame(s1), m_sDriverRegex(s2), m_sControllerName(s3), m_vMaps() { #define PUSH( im ) if(!im.IsEmpty()) m_vMaps.push_back(im); PUSH(im0);PUSH(im1);PUSH(im2);PUSH(im3);PUSH(im4);PUSH(im5);PUSH(im6);PUSH(im7);PUSH(im8);PUSH(im9);PUSH(im10);PUSH(im11);PUSH(im12);PUSH(im13);PUSH(im14);PUSH(im15);PUSH(im16);PUSH(im17);PUSH(im18);PUSH(im19); diff --git a/src/InputQueue.h b/src/InputQueue.h index 8ee93be3d7..cb7498470b 100644 --- a/src/InputQueue.h +++ b/src/InputQueue.h @@ -27,11 +27,19 @@ struct InputQueueCode public: bool Load( RString sButtonsNames ); bool EnteredCode( GameController controller ) const; + + InputQueueCode(): m_aPresses() {} private: struct ButtonPress { - ButtonPress() { m_bAllowIntermediatePresses = false; memset( m_InputTypes, 0, sizeof(m_InputTypes) ); m_InputTypes[IET_FIRST_PRESS] = true; } + ButtonPress(): m_aButtonsToHold(), m_aButtonsToNotHold(), + m_aButtonsToPress(), + m_bAllowIntermediatePresses(false) + { + memset( m_InputTypes, 0, sizeof(m_InputTypes) ); + m_InputTypes[IET_FIRST_PRESS] = true; + } vector m_aButtonsToHold; vector m_aButtonsToNotHold; vector m_aButtonsToPress; diff --git a/src/LifeMeterBattery.cpp b/src/LifeMeterBattery.cpp index 558b2e2029..00fb586848 100644 --- a/src/LifeMeterBattery.cpp +++ b/src/LifeMeterBattery.cpp @@ -31,7 +31,7 @@ void LifeMeterBattery::Load( const PlayerState *pPlayerState, PlayerStageStats * bool bPlayerEnabled = GAMESTATE->IsPlayerEnabled( pPlayerState ); m_sprFrame.Load( THEME->GetPathG(sType,"frame") ); - this->AddChild( &m_sprFrame ); + this->AddChild( m_sprFrame ); m_sprBattery.Load( THEME->GetPathG(sType,"lives 1x4") ); m_sprBattery.SetName( ssprintf("BatteryP%i",int(pn+1)) ); @@ -87,7 +87,7 @@ void LifeMeterBattery::OnSongEnded() m_iTrailingLivesLeft = m_iLivesLeft; PlayerNumber pn = m_pPlayerState->m_PlayerNumber; const Course *pCourse = GAMESTATE->m_pCurCourse; - + if( pCourse && pCourse->m_vEntries[GAMESTATE->GetCourseSongIndex()].iGainLives > -1 ) m_iLivesLeft += pCourse->m_vEntries[GAMESTATE->GetCourseSongIndex()].iGainLives; else @@ -101,14 +101,12 @@ void LifeMeterBattery::OnSongEnded() Refresh(); } - void LifeMeterBattery::ChangeLife( TapNoteScore score ) { if( m_iLivesLeft == 0 ) return; - // xxx: this is hardcoded; we should use metrics for this. -aj - // How to: have a TapNote reference similar to LifeMeterBattery + // xxx: This is hardcoded; we should use metrics for this. -aj switch( score ) { case TNS_W1: diff --git a/src/LifeMeterBattery.h b/src/LifeMeterBattery.h index d1d39473fc..08d72233db 100644 --- a/src/LifeMeterBattery.h +++ b/src/LifeMeterBattery.h @@ -7,6 +7,7 @@ #include "RageSound.h" #include "PercentageDisplay.h" #include "ThemeMetric.h" +#include "AutoActor.h" /** @brief Battery life meter used in Oni mode. */ class LifeMeterBattery : public LifeMeter @@ -45,7 +46,7 @@ private: //ThemeMetric<> METRIC_NAME; ThemeMetric BATTERY_BLINK_TIME; - Sprite m_sprFrame; + AutoActor m_sprFrame; Sprite m_sprBattery; BitmapText m_textNumLives; diff --git a/src/LuaManager.cpp b/src/LuaManager.cpp index 70b4d84eeb..e61352d9c0 100644 --- a/src/LuaManager.cpp +++ b/src/LuaManager.cpp @@ -27,7 +27,7 @@ struct Impl }; static Impl *pImpl = NULL; -#if defined(_MSC_VER) || defined (_XBOX) +#if defined(_MSC_VER) /* "interaction between '_setjmp' and C++ object destruction is non-portable" * We don't care; we'll throw a fatal exception immediately anyway. */ #pragma warning (disable : 4611) @@ -864,8 +864,8 @@ void LuaHelpers::ParseCommandList( Lua *L, const RString &sCommands, const RStri FOREACH_CONST( Command, cmds.v, c ) { const Command& cmd = (*c); - RString sName = cmd.GetName(); - s << "\tself:" << sName << "("; + RString local_sName = cmd.GetName(); + s << "\tself:" << local_sName << "("; for( unsigned i=1; iGetPathG(sMetricsGroup,"Filled") ); + m_sprFilled->SetName("Filled"); + ActorUtil::LoadAllCommands( m_sprFilled, sMetricsGroup ); this->AddChild( m_sprFilled ); m_sprEmpty.Load( THEME->GetPathG(sMetricsGroup,"Empty") ); + m_sprEmpty->SetName("Empty"); + ActorUtil::LoadAllCommands( m_sprEmpty, sMetricsGroup ); this->AddChild( m_sprEmpty ); m_text.LoadFromFont( THEME->GetPathF(sMetricsGroup,"Text") ); @@ -70,7 +74,7 @@ void ModIcon::Set( const RString &_sText ) m_text.SetText( sText ); // This line makes Lua option rows crash: -aj - m_text.CropToWidth( CROP_TEXT_TO_WIDTH ); + //m_text.CropToWidth( CROP_TEXT_TO_WIDTH ); } /* diff --git a/src/Model.h b/src/Model.h index 804d9a38ee..d9ce8e343b 100644 --- a/src/Model.h +++ b/src/Model.h @@ -83,6 +83,8 @@ private: float m_fCurAnimationRate; bool m_bLoop; bool m_bDrawCelShaded; // for Lua models + + Model& operator=(const Model& rhs); }; #endif diff --git a/src/MsdFile.h b/src/MsdFile.h index 1c5f50f645..7d43d2aec4 100644 --- a/src/MsdFile.h +++ b/src/MsdFile.h @@ -13,6 +13,9 @@ public: { /** @brief The list of parameters. */ vector params; + /** @brief Set up the parameters with default values. */ + value_t(): params() {} + /** * @brief Access the proper parameter. * @param i the index. @@ -20,6 +23,8 @@ public: */ RString operator[]( unsigned i ) const { if( i >= params.size() ) return RString(); return params[i]; } }; + + MsdFile(): values(), error("") {} /** @brief Remove the MSDFile. */ virtual ~MsdFile() { } diff --git a/src/MusicWheel.cpp b/src/MusicWheel.cpp index e767612f14..85dbc2000b 100644 --- a/src/MusicWheel.cpp +++ b/src/MusicWheel.cpp @@ -360,6 +360,8 @@ bool MusicWheel::SelectModeMenuItem() return true; } +// bool MusicWheel::SelectCustomItem() + void MusicWheel::GetSongList( vector &arraySongs, SortOrder so ) { vector apAllSongs; @@ -659,6 +661,7 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelIt if( so != SORT_ROULETTE ) { + // todo: allow themers to change the order of the items. -aj if( SHOW_ROULETTE ) arrayWheelItemDatas.push_back( new MusicWheelItemData(TYPE_ROULETTE, NULL, "", NULL, ROULETTE_COLOR, 0) ); diff --git a/src/MusicWheel.h b/src/MusicWheel.h index 20c7cbf5c1..73e63deb0e 100644 --- a/src/MusicWheel.h +++ b/src/MusicWheel.h @@ -57,6 +57,7 @@ protected: bool SelectSongOrCourse(); bool SelectCourse( const Course *p ); bool SelectModeMenuItem(); + //bool SelectCustomItem(); virtual void UpdateSwitch(); diff --git a/src/MusicWheelItem.cpp b/src/MusicWheelItem.cpp index 659de68a4d..c7ad0fb3c3 100644 --- a/src/MusicWheelItem.cpp +++ b/src/MusicWheelItem.cpp @@ -33,14 +33,12 @@ static const char *MusicWheelItemTypeNames[] = { }; XToString( MusicWheelItemType ); -MusicWheelItemData::MusicWheelItemData( WheelItemDataType type, Song* pSong, RString sSectionName, Course* pCourse, RageColor color, int iSectionCount ): - WheelItemBaseData(type, sSectionName, color) -{ - m_pSong = pSong; - m_pCourse = pCourse; - m_Flags = WheelNotifyIcon::Flags(); - m_iSectionCount = iSectionCount; -} +MusicWheelItemData::MusicWheelItemData( WheelItemDataType type, Song* pSong, + RString sSectionName, Course* pCourse, + RageColor color, int iSectionCount ): + WheelItemBaseData(type, sSectionName, color), + m_pCourse(pCourse), m_pSong(pSong), m_Flags(WheelNotifyIcon::Flags()), + m_iSectionCount(iSectionCount), m_sLabel(""), m_pAction() {} MusicWheelItem::MusicWheelItem( RString sType ): WheelItemBase( sType ) @@ -172,6 +170,7 @@ MusicWheelItem::MusicWheelItem( const MusicWheelItem &cpy ): MusicWheelItem::~MusicWheelItem() { + delete m_pTextSectionCount; } void MusicWheelItem::LoadFromWheelItemData( const WheelItemBaseData *pData, int iIndex, bool bHasFocus, int iDrawIndex ) diff --git a/src/MusicWheelItem.h b/src/MusicWheelItem.h index 1d83357b5e..6155e24d70 100644 --- a/src/MusicWheelItem.h +++ b/src/MusicWheelItem.h @@ -62,8 +62,11 @@ private: struct MusicWheelItemData : public WheelItemBaseData { - MusicWheelItemData() : m_iSectionCount(0) { } - MusicWheelItemData( WheelItemDataType type, Song* pSong, RString sSectionName, Course* pCourse, RageColor color, int iSectionCount ); + MusicWheelItemData() : m_pCourse(NULL), m_pSong(NULL), m_Flags(), + m_iSectionCount(0), m_sLabel(""), m_pAction() { } + MusicWheelItemData( WheelItemDataType type, Song* pSong, + RString sSectionName, Course* pCourse, + RageColor color, int iSectionCount ); Course* m_pCourse; Song* m_pSong; diff --git a/src/NetworkSyncManager.cpp b/src/NetworkSyncManager.cpp index 21a8555c3d..b49720a46a 100644 --- a/src/NetworkSyncManager.cpp +++ b/src/NetworkSyncManager.cpp @@ -2,6 +2,7 @@ #include "NetworkSyncManager.h" #include "LuaManager.h" #include "LocalizedString.h" +#include NetworkSyncManager *NSMAN; @@ -107,13 +108,21 @@ void NetworkSyncManager::CloseConnection() void NetworkSyncManager::PostStartUp( const RString& ServerIP ) { RString sAddress; - short iPort; + unsigned short iPort; size_t cLoc = ServerIP.find( ':' ); if( ServerIP.find( ':' ) != RString::npos ) { - iPort = (short) atoi( ServerIP.substr( cLoc + 1 ).c_str() ); sAddress = ServerIP.substr( 0, cLoc ); + char* cEnd; + errno = 0; + iPort = (unsigned short)strtol( ServerIP.substr( cLoc + 1 ).c_str(), &cEnd, 10 ); + if( *cEnd != 0 || errno != 0 ) + { + m_startupStatus = 2; + LOG->Warn( "Invalid port" ); + return; + } } else { @@ -121,7 +130,7 @@ void NetworkSyncManager::PostStartUp( const RString& ServerIP ) sAddress = ServerIP; } - LOG->Info( "Attempting to connect to: %s, Port: %d", sAddress.c_str(), iPort ); + LOG->Info( "Attempting to connect to: %s, Port: %i", sAddress.c_str(), iPort ); CloseConnection(); if( !Connect(sAddress.c_str(), iPort) ) @@ -136,7 +145,7 @@ void NetworkSyncManager::PostStartUp( const RString& ServerIP ) useSMserver = true; - m_startupStatus = 1; //Connection attepmpt successful + m_startupStatus = 1; // Connection attepmpt successful // If network play is desired and the connection works, // halt until we know what server version we're dealing with diff --git a/src/NoteData.cpp b/src/NoteData.cpp index bbbee687f1..88c350b408 100644 --- a/src/NoteData.cpp +++ b/src/NoteData.cpp @@ -52,18 +52,18 @@ void NoteData::ClearRangeForTrack( int rowBegin, int rowEnd, int iTrack ) if( rowBegin == rowEnd ) return; - NoteData::TrackMap::iterator begin, end; - GetTapNoteRangeInclusive( iTrack, rowBegin, rowEnd, begin, end ); + NoteData::TrackMap::iterator lBegin, lEnd; + GetTapNoteRangeInclusive( iTrack, rowBegin, rowEnd, lBegin, lEnd ); - if( begin != end && begin->first < rowBegin && begin->first + begin->second.iDuration > rowEnd ) + if( lBegin != lEnd && lBegin->first < rowBegin && lBegin->first + lBegin->second.iDuration > rowEnd ) { /* A hold note overlaps the whole range. Truncate it, and add the * remainder to the end. */ - TapNote tn1 = begin->second; + TapNote tn1 = lBegin->second; TapNote tn2 = tn1; - int iEndRow = begin->first + tn1.iDuration; - int iRow = begin->first; + int iEndRow = lBegin->first + tn1.iDuration; + int iRow = lBegin->first; tn1.iDuration = rowBegin - iRow; tn2.iDuration = iEndRow - rowEnd; @@ -72,23 +72,23 @@ void NoteData::ClearRangeForTrack( int rowBegin, int rowEnd, int iTrack ) SetTapNote( iTrack, rowEnd, tn2 ); // We may have invalidated our iterators. - GetTapNoteRangeInclusive( iTrack, rowBegin, rowEnd, begin, end ); + GetTapNoteRangeInclusive( iTrack, rowBegin, rowEnd, lBegin, lEnd ); } - else if( begin != end && begin->first < rowBegin ) + else if( lBegin != lEnd && lBegin->first < rowBegin ) { // A hold note overlaps the beginning of the range. Truncate it. - TapNote &tn1 = begin->second; - int iRow = begin->first; + TapNote &tn1 = lBegin->second; + int iRow = lBegin->first; tn1.iDuration = rowBegin - iRow; - ++begin; + ++lBegin; } - if( begin != end ) + if( lBegin != lEnd ) { - NoteData::TrackMap::iterator prev = end; + NoteData::TrackMap::iterator prev = lEnd; --prev; - TapNote tn = begin->second; + TapNote tn = lBegin->second; int iRow = prev->first; if( tn.type == TapNote::hold_head && iRow + tn.iDuration > rowEnd ) { @@ -99,14 +99,14 @@ void NoteData::ClearRangeForTrack( int rowBegin, int rowEnd, int iTrack ) tn.iDuration -= iAdd; iRow += iAdd; SetTapNote( iTrack, iRow, tn ); - end = prev; + lEnd = prev; } // We may have invalidated our iterators. - GetTapNoteRangeInclusive( iTrack, rowBegin, rowEnd, begin, end ); + GetTapNoteRangeInclusive( iTrack, rowBegin, rowEnd, lBegin, lEnd ); } - m_TapNotes[iTrack].erase( begin, end ); + m_TapNotes[iTrack].erase( lBegin, lEnd ); } void NoteData::ClearRange( int rowBegin, int rowEnd ) @@ -138,17 +138,17 @@ void NoteData::CopyRange( const NoteData& from, int rowFromBegin, int rowFromEnd for( int t=0; tsecond; + TapNote head = lBegin->second; if( head.type == TapNote::empty ) continue; if( head.type == TapNote::hold_head ) { - int iStartRow = begin->first + iMoveBy; + int iStartRow = lBegin->first + iMoveBy; int iEndRow = iStartRow + head.iDuration; iStartRow = clamp( iStartRow, rowToBegin, rowToEnd ); @@ -158,7 +158,7 @@ void NoteData::CopyRange( const NoteData& from, int rowFromBegin, int rowFromEnd } else { - int iTo = begin->first + iMoveBy; + int iTo = lBegin->first + iMoveBy; if( iTo >= rowToBegin && iTo <= rowToEnd ) this->SetTapNote( t, iTo, head ); } @@ -307,11 +307,11 @@ void NoteData::AddHoldNote( int iTrack, int iStartRow, int iEndRow, TapNote tn ) ASSERT_M( iEndRow >= iStartRow, ssprintf("EndRow %d < StartRow %d",iEndRow,iStartRow) ); /* Include adjacent (non-overlapping) hold notes, since we need to merge with them. */ - NoteData::TrackMap::iterator begin, end; - GetTapNoteRangeInclusive( iTrack, iStartRow, iEndRow, begin, end, true ); + NoteData::TrackMap::iterator lBegin, lEnd; + GetTapNoteRangeInclusive( iTrack, iStartRow, iEndRow, lBegin, lEnd, true ); // Look for other hold notes that overlap and merge them into add. - for( iterator it = begin; it != end; ++it ) + for( iterator it = lBegin; it != lEnd; ++it ) { int iOtherRow = it->first; const TapNote &tnOther = it->second; @@ -325,14 +325,14 @@ void NoteData::AddHoldNote( int iTrack, int iStartRow, int iEndRow, TapNote tn ) tn.iDuration = iEndRow - iStartRow; // Remove everything in the range. - while( begin != end ) + while( lBegin != lEnd ) { - iterator next = begin; + iterator next = lBegin; ++next; - RemoveTapNote( iTrack, begin ); + RemoveTapNote( iTrack, lBegin ); - begin = next; + lBegin = next; } /* Additionally, if there's a tap note lying at the end of our range, @@ -590,12 +590,12 @@ int NoteData::GetNumHoldNotes( int iStartIndex, int iEndIndex ) const int iNumHolds = 0; for( int t=0; tsecond.type != TapNote::hold_head || - begin->second.subType != TapNote::hold_head_hold ) + if( lBegin->second.type != TapNote::hold_head || + lBegin->second.subType != TapNote::hold_head_hold ) continue; iNumHolds++; } @@ -608,12 +608,12 @@ int NoteData::GetNumRolls( int iStartIndex, int iEndIndex ) const int iNumRolls = 0; for( int t=0; tsecond.type != TapNote::hold_head || - begin->second.subType != TapNote::hold_head_roll ) + if( lBegin->second.type != TapNote::hold_head || + lBegin->second.subType != TapNote::hold_head_roll ) continue; iNumRolls++; } @@ -773,43 +773,43 @@ bool NoteData::GetPrevTapNoteRowForTrack( int track, int &rowInOut ) const return true; } -void NoteData::GetTapNoteRange( int iTrack, int iStartRow, int iEndRow, TrackMap::iterator &begin, TrackMap::iterator &end ) +void NoteData::GetTapNoteRange( int iTrack, int iStartRow, int iEndRow, TrackMap::iterator &lBegin, TrackMap::iterator &lEnd ) { ASSERT_M( iTrack < GetNumTracks(), ssprintf("%i,%i", iTrack, GetNumTracks()) ); TrackMap &mapTrack = m_TapNotes[iTrack]; if( iStartRow > iEndRow ) { - begin = end = mapTrack.end(); + lBegin = lEnd = mapTrack.end(); return; } if( iStartRow <= 0 ) - begin = mapTrack.begin(); // optimization + lBegin = mapTrack.begin(); // optimization else if( iStartRow >= MAX_NOTE_ROW ) - begin = mapTrack.end(); // optimization + lBegin = mapTrack.end(); // optimization else - begin = mapTrack.lower_bound( iStartRow ); + lBegin = mapTrack.lower_bound( iStartRow ); if( iEndRow <= 0 ) - end = mapTrack.begin(); // optimization + lEnd = mapTrack.begin(); // optimization else if( iEndRow >= MAX_NOTE_ROW ) - end = mapTrack.end(); // optimization + lEnd = mapTrack.end(); // optimization else - end = mapTrack.lower_bound( iEndRow ); + lEnd = mapTrack.lower_bound( iEndRow ); } /* Include hold notes that overlap the edges. If a hold note completely surrounds the given * range, included it, too. If bIncludeAdjacent is true, also include hold notes adjacent to, * but not overlapping, the edge. */ -void NoteData::GetTapNoteRangeInclusive( int iTrack, int iStartRow, int iEndRow, TrackMap::iterator &begin, TrackMap::iterator &end, bool bIncludeAdjacent ) +void NoteData::GetTapNoteRangeInclusive( int iTrack, int iStartRow, int iEndRow, TrackMap::iterator &lBegin, TrackMap::iterator &lEnd, bool bIncludeAdjacent ) { - GetTapNoteRange( iTrack, iStartRow, iEndRow, begin, end ); + GetTapNoteRange( iTrack, iStartRow, iEndRow, lBegin, lEnd ); - if( begin != this->begin(iTrack) ) + if( lBegin != this->begin(iTrack) ) { - iterator prev = Decrement(begin); + iterator prev = Decrement(lBegin); const TapNote &tn = prev->second; if( tn.type == TapNote::hold_head ) @@ -821,62 +821,62 @@ void NoteData::GetTapNoteRangeInclusive( int iTrack, int iStartRow, int iEndRow, if( iHoldEndRow > iStartRow ) { // The previous note is a hold. - begin = prev; + lBegin = prev; } } } - if( bIncludeAdjacent && end != this->end(iTrack) ) + if( bIncludeAdjacent && lEnd != this->end(iTrack) ) { // Include the next note if it's a hold and starts on iEndRow. - const TapNote &tn = end->second; - int iHoldStartRow = end->first; + const TapNote &tn = lEnd->second; + int iHoldStartRow = lEnd->first; if( tn.type == TapNote::hold_head && iHoldStartRow == iEndRow ) - ++end; + ++lEnd; } } -void NoteData::GetTapNoteRangeExclusive( int iTrack, int iStartRow, int iEndRow, TrackMap::iterator &begin, TrackMap::iterator &end ) +void NoteData::GetTapNoteRangeExclusive( int iTrack, int iStartRow, int iEndRow, TrackMap::iterator &lBegin, TrackMap::iterator &lEnd ) { - GetTapNoteRange( iTrack, iStartRow, iEndRow, begin, end ); + GetTapNoteRange( iTrack, iStartRow, iEndRow, lBegin, lEnd ); // If end-1 is a hold_head, and extends beyond iEndRow, exclude it. - if( begin != end && end != this->begin(iTrack) ) + if( lBegin != lEnd && lEnd != this->begin(iTrack) ) { - iterator prev = end; + iterator prev = lEnd; --prev; if( prev->second.type == TapNote::hold_head ) { int localStartRow = prev->first; const TapNote &tn = prev->second; if( localStartRow + tn.iDuration >= iEndRow ) - end = prev; + lEnd = prev; } } } -void NoteData::GetTapNoteRange( int iTrack, int iStartRow, int iEndRow, TrackMap::const_iterator &begin, TrackMap::const_iterator &end ) const +void NoteData::GetTapNoteRange( int iTrack, int iStartRow, int iEndRow, TrackMap::const_iterator &lBegin, TrackMap::const_iterator &lEnd ) const { TrackMap::iterator const_begin, const_end; const_cast(this)->GetTapNoteRange( iTrack, iStartRow, iEndRow, const_begin, const_end ); - begin = const_begin; - end = const_end; + lBegin = const_begin; + lEnd = const_end; } -void NoteData::GetTapNoteRangeInclusive( int iTrack, int iStartRow, int iEndRow, TrackMap::const_iterator &begin, TrackMap::const_iterator &end, bool bIncludeAdjacent ) const +void NoteData::GetTapNoteRangeInclusive( int iTrack, int iStartRow, int iEndRow, TrackMap::const_iterator &lBegin, TrackMap::const_iterator &lEnd, bool bIncludeAdjacent ) const { TrackMap::iterator const_begin, const_end; const_cast(this)->GetTapNoteRangeInclusive( iTrack, iStartRow, iEndRow, const_begin, const_end, bIncludeAdjacent ); - begin = const_begin; - end = const_end; + lBegin = const_begin; + lEnd = const_end; } -void NoteData::GetTapNoteRangeExclusive( int iTrack, int iStartRow, int iEndRow, TrackMap::const_iterator &begin, TrackMap::const_iterator &end ) const +void NoteData::GetTapNoteRangeExclusive( int iTrack, int iStartRow, int iEndRow, TrackMap::const_iterator &lBegin, TrackMap::const_iterator &lEnd ) const { TrackMap::iterator const_begin, const_end; const_cast(this)->GetTapNoteRange( iTrack, iStartRow, iEndRow, const_begin, const_end ); - begin = const_begin; - end = const_end; + lBegin = const_begin; + lEnd = const_end; } diff --git a/src/NoteData.h b/src/NoteData.h index a8c59f0bd9..5de742eb30 100644 --- a/src/NoteData.h +++ b/src/NoteData.h @@ -32,6 +32,8 @@ public: typedef map::const_iterator const_iterator; typedef map::reverse_iterator reverse_iterator; typedef map::const_reverse_iterator const_reverse_iterator; + + NoteData(): m_TapNotes() {} iterator begin( int iTrack ) { return m_TapNotes[iTrack].begin(); } const_iterator begin( int iTrack ) const { return m_TapNotes[iTrack].begin(); } diff --git a/src/NoteDataUtil.cpp b/src/NoteDataUtil.cpp index d8a39396d1..9b5748ce39 100644 --- a/src/NoteDataUtil.cpp +++ b/src/NoteDataUtil.cpp @@ -2229,62 +2229,61 @@ void NoteDataUtil::AddTapAttacks( NoteData &nd, Song* pSong ) } } -#if 0 // undo this if ScaleRegion breaks more things than it fixes void NoteDataUtil::Scale( NoteData &nd, float fScale ) { ASSERT( fScale > 0 ); - - NoteData temp; - temp.CopyAll( &nd ); - nd.ClearAll(); - - for( int r=0; r<=temp.GetLastRow(); r++ ) + + NoteData ndOut; + ndOut.SetNumTracks( nd.GetNumTracks() ); + + for( int t=0; tsecond; + int iNewRow = lrintf( fScale * iter->first ); + int iNewDuration = lrintf( fScale * (iter->first + tn.iDuration) ); + tn.iDuration = iNewDuration; + ndOut.SetTapNote( t, iNewRow, tn ); } } + + nd.swap( ndOut ); +} + +/* XXX: move this to an appropriate place, same place as NoteRowToBeat perhaps? */ +static inline int GetScaledRow( float fScale, int iStartIndex, int iEndIndex, int iRow ) +{ + if( iRow < iStartIndex ) + return iRow; + else if( iRow > iEndIndex ) + return iRow + lrintf( (iEndIndex - iStartIndex) * (fScale - 1) ); + else + return lrintf( (iRow - iStartIndex) * fScale ) + iStartIndex; } -#endif void NoteDataUtil::ScaleRegion( NoteData &nd, float fScale, int iStartIndex, int iEndIndex ) { ASSERT( fScale > 0 ); ASSERT( iStartIndex < iEndIndex ); ASSERT( iStartIndex >= 0 ); - - NoteData temp1, temp2; - temp1.SetNumTracks( nd.GetNumTracks() ); - temp2.SetNumTracks( nd.GetNumTracks() ); - - if( iStartIndex != 0 ) - temp1.CopyRange( nd, 0, iStartIndex ); - if( iEndIndex != MAX_NOTE_ROW ) - { - const int iScaledFirstRowAfterRegion = int(iStartIndex + (iEndIndex - iStartIndex) * fScale); - temp1.CopyRange( nd, iEndIndex, MAX_NOTE_ROW, iScaledFirstRowAfterRegion ); - } - temp2.CopyRange( nd, iStartIndex, iEndIndex ); - nd.ClearAll(); - - for( int t=0; tfirst*fScale + iStartIndex ); - temp1.SetTapNote( t, new_row, iter->second ); + TapNote tn = iter->second; + int iNewRow = GetScaledRow( fScale, iStartIndex, iEndIndex, iter->first ); + int iNewDuration = GetScaledRow( fScale, iStartIndex, iEndIndex, iter->first + tn.iDuration ) - iNewRow; + tn.iDuration = iNewDuration; + ndOut.SetTapNote( t, iNewRow, tn ); } } - - nd.swap( temp1 ); + + nd.swap( ndOut ); } void NoteDataUtil::InsertRows( NoteData &nd, int iStartIndex, int iRowsToAdd ) diff --git a/src/NoteDataUtil.h b/src/NoteDataUtil.h index a930af6547..f92043c9ff 100644 --- a/src/NoteDataUtil.h +++ b/src/NoteDataUtil.h @@ -149,9 +149,8 @@ namespace NoteDataUtil int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW ); void AddTapAttacks( NoteData &nd, Song* pSong ); - // void Scale( NoteData &nd, float fScale ); + void Scale( NoteData &nd, float fScale ); void ScaleRegion( NoteData &nd, float fScale, int iStartIndex = 0, int iEndIndex = MAX_NOTE_ROW ); - inline void Scale( NoteData &nd, float fScale ) { NoteDataUtil::ScaleRegion(nd, fScale); } void InsertRows( NoteData &nd, int iStartIndex, int iRowsToShift ); void DeleteRows( NoteData &nd, int iStartIndex, int iRowsToShift ); diff --git a/src/NoteDisplay.cpp b/src/NoteDisplay.cpp index 0bae40abd8..3998c1fb08 100644 --- a/src/NoteDisplay.cpp +++ b/src/NoteDisplay.cpp @@ -418,7 +418,7 @@ void NoteDisplay::DrawHoldPart( vector &vpSpr, int iCol, int fYStep, fl { /* For very large hold notes, shift the texture coordinates to be near 0, so we * don't send very large values to the renderer. */ - const float fDistFromTop = fYStartPos - fYTop; + const float fDistFromTop = fYStartPos - fYTop; float fTexCoordTop = SCALE( fDistFromTop, 0, fFrameHeight, rect.top, rect.bottom ); fTexCoordTop += fAddToTexCoord; fAddToTexCoord -= floorf( fTexCoordTop ); @@ -542,8 +542,8 @@ void NoteDisplay::DrawHoldBody( const TapNote& tn, int iCol, float fBeat, bool b DISPLAY->SetZTestMode( bWavyPartsNeedZBuffer?ZTEST_WRITE_ON_PASS:ZTEST_OFF ); DISPLAY->SetZWrite( bWavyPartsNeedZBuffer ); - /* Hack: Z effects need a finer grain step. */ - const int fYStep = bWavyPartsNeedZBuffer? 4: 16; // use small steps only if wavy + // Hack: Z effects need a finer grain step. + const int fYStep = bWavyPartsNeedZBuffer? 4: 16; // use small steps only if wavy if( bFlipHoldBody ) { @@ -641,16 +641,18 @@ void NoteDisplay::DrawHold( const TapNote &tn, int iCol, int iRow, bool bIsBeing /* The body and caps should have no overlap, so their order doesn't matter. * Draw the head last, so it appears on top. */ float fBeat = NoteRowToBeat(iRow); - //if( !cache->m_bHoldHeadIsAboveWavyParts ) - //{ - // Actor *pActor = GetHoldActor( m_HoldHead, NotePart_HoldHead, NoteRowToBeat(iRow), tn.subType == TapNote::hold_head_roll, bIsBeingHeld ); - // DrawActor( tn, pActor, NotePart_HoldHead, iCol, bFlipHeadAndTail ? fEndYOffset : fStartYOffset, fBeat, bIsAddition, fPercentFadeToFail, fReverseOffsetPixels, fColorScale, fDrawDistanceAfterTargetsPixels, fDrawDistanceBeforeTargetsPixels, fFadeInPercentOfDrawFar ); - //} - //if( !cache->m_bHoldTailIsAboveWavyParts ) - //{ - // Actor *pActor = GetHoldActor( m_HoldTail, NotePart_HoldTail, NoteRowToBeat(iRow), tn.subType == TapNote::hold_head_roll, bIsBeingHeld ); - // DrawActor( tn, pActor, NotePart_HoldTail, iCol, bFlipHeadAndTail ? fStartYOffset : fEndYOffset, fBeat, bIsAddition, fPercentFadeToFail, fReverseOffsetPixels, fColorScale, fDrawDistanceAfterTargetsPixels, fDrawDistanceBeforeTargetsPixels, fFadeInPercentOfDrawFar ); - //} + /* + if( !cache->m_bHoldHeadIsAboveWavyParts ) + { + Actor *pActor = GetHoldActor( m_HoldHead, NotePart_HoldHead, NoteRowToBeat(iRow), tn.subType == TapNote::hold_head_roll, bIsBeingHeld ); + DrawActor( tn, pActor, NotePart_HoldHead, iCol, bFlipHeadAndTail ? fEndYOffset : fStartYOffset, fBeat, bIsAddition, fPercentFadeToFail, fReverseOffsetPixels, fColorScale, fDrawDistanceAfterTargetsPixels, fDrawDistanceBeforeTargetsPixels, fFadeInPercentOfDrawFar ); + } + if( !cache->m_bHoldTailIsAboveWavyParts ) + { + Actor *pActor = GetHoldActor( m_HoldTail, NotePart_HoldTail, NoteRowToBeat(iRow), tn.subType == TapNote::hold_head_roll, bIsBeingHeld ); + DrawActor( tn, pActor, NotePart_HoldTail, iCol, bFlipHeadAndTail ? fStartYOffset : fEndYOffset, fBeat, bIsAddition, fPercentFadeToFail, fReverseOffsetPixels, fColorScale, fDrawDistanceAfterTargetsPixels, fDrawDistanceBeforeTargetsPixels, fFadeInPercentOfDrawFar ); + } + */ DrawHoldBody( tn, iCol, fBeat, bIsBeingHeld, fYHead, fYTail, bIsAddition, fPercentFadeToFail, fColorScale, false, fDrawDistanceAfterTargetsPixels, fDrawDistanceBeforeTargetsPixels, fFadeInPercentOfDrawFar ); DrawHoldBody( tn, iCol, fBeat, bIsBeingHeld, fYHead, fYTail, bIsAddition, fPercentFadeToFail, fColorScale, true, fDrawDistanceAfterTargetsPixels, fDrawDistanceBeforeTargetsPixels, fFadeInPercentOfDrawFar ); diff --git a/src/NoteField.cpp b/src/NoteField.cpp index d809cf7242..d321c0ad26 100644 --- a/src/NoteField.cpp +++ b/src/NoteField.cpp @@ -422,18 +422,21 @@ void NoteField::DrawAreaHighlight( int iStartBeat, int iEndBeat ) static ThemeMetric BPM_COLOR ( "NoteField", "BPMColor" ); static ThemeMetric STOP_COLOR ( "NoteField", "StopColor" ); static ThemeMetric DELAY_COLOR ( "NoteField", "DelayColor" ); +static ThemeMetric WARP_COLOR ( "NoteField", "WarpColor" ); static ThemeMetric TIME_SIGNATURE_COLOR ( "NoteField", "TimeSignatureColor" ); static ThemeMetric TICKCOUNT_COLOR ( "NoteField", "TickcountColor" ); static ThemeMetric COMBO_COLOR ( "NoteField", "ComboColor" ); static ThemeMetric BPM_IS_LEFT_SIDE ( "NoteField", "BPMIsLeftSide" ); static ThemeMetric STOP_IS_LEFT_SIDE ( "NoteField", "StopIsLeftSide" ); static ThemeMetric DELAY_IS_LEFT_SIDE ( "NoteField", "DelayIsLeftSide" ); +static ThemeMetric WARP_IS_LEFT_SIDE ( "NoteField", "WarpIsLeftSide" ); static ThemeMetric TIME_SIGNATURE_IS_LEFT_SIDE ( "NoteField", "TimeSignatureIsLeftSide" ); static ThemeMetric TICKCOUNT_IS_LEFT_SIDE ( "NoteField", "TickcountIsLeftSide" ); static ThemeMetric COMBO_IS_LEFT_SIDE ( "NoteField", "ComboIsLeftSide" ); static ThemeMetric BPM_OFFSETX ( "NoteField", "BPMOffsetX" ); static ThemeMetric STOP_OFFSETX ( "NoteField", "StopOffsetX" ); static ThemeMetric DELAY_OFFSETX ( "NoteField", "DelayOffsetX" ); +static ThemeMetric WARP_OFFSETX ( "NoteField", "WarpOffsetX" ); static ThemeMetric TIME_SIGNATURE_OFFSETX ( "NoteField", "TimeSignatureOffsetX" ); static ThemeMetric TICKCOUNT_OFFSETX ( "NoteField", "TickcountOffsetX" ); static ThemeMetric COMBO_OFFSETX ( "NoteField", "ComboOffsetX" ); @@ -481,6 +484,23 @@ void NoteField::DrawFreezeText( const float fBeat, const float fSecs, const floa m_textMeasureNumber.Draw(); } +void NoteField::DrawWarpText( const float fBeat, const float fNewBeat ) +{ + const float fYOffset = ArrowEffects::GetYOffset( m_pPlayerState, 0, fBeat ); + const float fYPos = ArrowEffects::GetYPos( m_pPlayerState, 0, fYOffset, m_fYReverseOffsetPixels ); + const float fZoom = ArrowEffects::GetZoom( m_pPlayerState ); + const float xBase = GetWidth()/2.f; + const float xOffset = WARP_OFFSETX * fZoom; + + m_textMeasureNumber.SetZoom( fZoom ); + m_textMeasureNumber.SetHorizAlign( WARP_IS_LEFT_SIDE ? align_right : align_left ); + m_textMeasureNumber.SetDiffuse( WARP_COLOR ); + m_textMeasureNumber.SetGlow( RageColor(1,1,1,RageFastCos(RageTimer::GetTimeSinceStartFast()*2)/2+0.5f) ); + m_textMeasureNumber.SetText( ssprintf("%.3f", fNewBeat) ); + m_textMeasureNumber.SetXY( (WARP_IS_LEFT_SIDE ? -xBase - xOffset : xBase + xOffset), fYPos ); + m_textMeasureNumber.Draw(); +} + void NoteField::DrawTimeSignatureText( const float fBeat, int iNumerator, int iDenominator ) { const float fYOffset = ArrowEffects::GetYOffset( m_pPlayerState, 0, fBeat ); @@ -746,72 +766,71 @@ void NoteField::DrawPrimitives() ASSERT(GAMESTATE->m_pCurSong); // BPM text - const vector &aBPMSegments = GAMESTATE->m_pCurSong->m_Timing.m_BPMSegments; - for( unsigned i=0; im_pCurSong->m_Timing.m_BPMSegments, seg ) { - if( aBPMSegments[i].m_iStartRow >= iFirstRowToDraw && - aBPMSegments[i].m_iStartRow <= iLastRowToDraw) + if( seg->m_iStartRow >= iFirstRowToDraw && seg->m_iStartRow <= iLastRowToDraw ) { - float fBeat = NoteRowToBeat(aBPMSegments[i].m_iStartRow); + float fBeat = NoteRowToBeat(seg->m_iStartRow); if( IS_ON_SCREEN(fBeat) ) - DrawBPMText( fBeat, aBPMSegments[i].GetBPM() ); + DrawBPMText( fBeat, seg->GetBPM() ); } } // Freeze text - const vector &aStopSegments = GAMESTATE->m_pCurSong->m_Timing.m_StopSegments; - for( unsigned i=0; im_pCurSong->m_Timing.m_StopSegments, seg ) { - if( aStopSegments[i].m_iStartRow >= iFirstRowToDraw && - aStopSegments[i].m_iStartRow <= iLastRowToDraw) + if( seg->m_iStartRow >= iFirstRowToDraw && seg->m_iStartRow <= iLastRowToDraw ) { - float fBeat = NoteRowToBeat(aStopSegments[i].m_iStartRow); + float fBeat = NoteRowToBeat(seg->m_iStartRow); if( IS_ON_SCREEN(fBeat) ) - DrawFreezeText( fBeat, aStopSegments[i].m_fStopSeconds, aStopSegments[i].m_bDelay ); + DrawFreezeText( fBeat, seg->m_fStopSeconds, seg->m_bDelay ); + } + } + + // Warp text + FOREACH_CONST( WarpSegment, GAMESTATE->m_pCurSong->m_Timing.m_WarpSegments, seg ) + { + if( seg->m_iStartRow >= iFirstRowToDraw && seg->m_iStartRow <= iLastRowToDraw ) + { + float fBeat = NoteRowToBeat(seg->m_iStartRow); + if( IS_ON_SCREEN(fBeat) ) + DrawWarpText( fBeat, seg->m_fEndBeat ); } } // Time Signature text - const vector &vTimeSignatureSegments = GAMESTATE->m_pCurSong->m_Timing.m_vTimeSignatureSegments; - for( unsigned i=0; im_pCurSong->m_Timing.m_vTimeSignatureSegments, seg ) { - if( vTimeSignatureSegments[i].m_iStartRow >= iFirstRowToDraw && - vTimeSignatureSegments[i].m_iStartRow <= iLastRowToDraw) + if( seg->m_iStartRow >= iFirstRowToDraw && seg->m_iStartRow <= iLastRowToDraw ) { - float fBeat = NoteRowToBeat(vTimeSignatureSegments[i].m_iStartRow); + float fBeat = NoteRowToBeat(seg->m_iStartRow); if( IS_ON_SCREEN(fBeat) ) - DrawTimeSignatureText( fBeat, vTimeSignatureSegments[i].m_iNumerator, vTimeSignatureSegments[i].m_iDenominator ); + DrawTimeSignatureText( fBeat, seg->m_iNumerator, seg->m_iDenominator ); } } - + // Tickcount text - const vector &tTickcountSegments = GAMESTATE->m_pCurSong->m_Timing.m_TickcountSegments; - for( unsigned i=0; im_pCurSong->m_Timing.m_TickcountSegments, seg ) { - if( tTickcountSegments[i].m_iStartRow >= iFirstRowToDraw && - tTickcountSegments[i].m_iStartRow <= iLastRowToDraw) + if( seg->m_iStartRow >= iFirstRowToDraw && seg->m_iStartRow <= iLastRowToDraw ) { - float fBeat = NoteRowToBeat(tTickcountSegments[i].m_iStartRow); + float fBeat = NoteRowToBeat(seg->m_iStartRow); if( IS_ON_SCREEN(fBeat) ) - DrawTickcountText( fBeat, tTickcountSegments[i].m_iTicks ); + DrawTickcountText( fBeat, seg->m_iTicks ); } } // Combo text - const vector &tComboSegments = GAMESTATE->m_pCurSong->m_Timing.m_ComboSegments; - for( unsigned i=0; im_pCurSong->m_Timing.m_ComboSegments, seg ) { - if( tComboSegments[i].m_iStartRow >= iFirstRowToDraw && - tComboSegments[i].m_iStartRow <= iLastRowToDraw) + if( seg->m_iStartRow >= iFirstRowToDraw && seg->m_iStartRow <= iLastRowToDraw ) { - float fBeat = NoteRowToBeat(tComboSegments[i].m_iStartRow); + float fBeat = NoteRowToBeat(seg->m_iStartRow); if( IS_ON_SCREEN(fBeat) ) - DrawComboText( fBeat, tComboSegments[i].m_iCombo ); + DrawComboText( fBeat, seg->m_iCombo ); } } - // todo: add warp text -aj - // Course mods text const Course *pCourse = GAMESTATE->m_pCurCourse; if( pCourse ) diff --git a/src/NoteField.h b/src/NoteField.h index 0c4f03c990..08a83e11aa 100644 --- a/src/NoteField.h +++ b/src/NoteField.h @@ -57,6 +57,7 @@ protected: void DrawAreaHighlight( int iStartBeat, int iEndBeat ); void DrawBPMText( const float fBeat, const float fBPM ); void DrawFreezeText( const float fBeat, const float fBPM, const float bDelay ); + 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 ); diff --git a/src/NoteTypes.h b/src/NoteTypes.h index 76ae2f92f8..b842dd2f16 100644 --- a/src/NoteTypes.h +++ b/src/NoteTypes.h @@ -134,9 +134,9 @@ struct TapNote void LoadFromNode( const XNode* pNode ); TapNote(): type(empty), subType(SubType_Invalid), source(original), - pn(PLAYER_INVALID), bHopoPossible(false), + result(), pn(PLAYER_INVALID), bHopoPossible(false), sAttackModifiers(""), fAttackDurationSeconds(0), - iKeysoundIndex(-1), iDuration(0) {} + iKeysoundIndex(-1), iDuration(0), HoldResult() {} void Init() { type = empty; @@ -155,10 +155,11 @@ struct TapNote RString sAttackModifiers_, float fAttackDurationSeconds_, int iKeysoundIndex_ ): - type(type_), subType(subType_), source(source_), - pn(PLAYER_INVALID), sAttackModifiers(sAttackModifiers_), + type(type_), subType(subType_), source(source_), result(), + pn(PLAYER_INVALID), bHopoPossible(false), + sAttackModifiers(sAttackModifiers_), fAttackDurationSeconds(fAttackDurationSeconds_), - iKeysoundIndex(iKeysoundIndex_), iDuration(0) {} + iKeysoundIndex(iKeysoundIndex_), iDuration(0), HoldResult() {} /** * @brief Determine if the two TapNotes are equal to each other. diff --git a/src/NotesLoaderBMS.cpp b/src/NotesLoaderBMS.cpp index 2e7c0e4d82..d90a368591 100644 --- a/src/NotesLoaderBMS.cpp +++ b/src/NotesLoaderBMS.cpp @@ -138,31 +138,10 @@ static RString FindLargestInitialSubstring( const RString &string1, const RStrin return string1.substr( 0, i ); } -static StepsType DetermineStepsType( int iPlayer, const NoteData &nd, const RString &sPath ) +static StepsType DetermineStepsType( int iPlayer, const NoteData &nd, const RString &sPath, const int iNumNonEmptyTracks ) { ASSERT( NUM_BMS_TRACKS == nd.GetNumTracks() ); - bool bTrackHasNote[NUM_NON_AUTO_KEYSOUND_TRACKS]; - ZERO( bTrackHasNote ); - - int iLastRow = nd.GetLastRow(); - for( int t=0; t &out ) { GetDirListing( sPath + RString("*.bms"), out ); GetDirListing( sPath + RString("*.bme"), out ); + GetDirListing( sPath + RString("*.bml"), out ); } bool BMSLoader::LoadFromDir( const RString &sDir, Song &out ) @@ -1086,6 +1104,18 @@ bool BMSLoader::LoadFromDir( const RString &sDir, Song &out ) map idToKeysoundIndex; ReadGlobalTags( aBMSData[iMainDataIndex], out, sigAdjustments, idToKeysoundIndex ); + // The brackets before the difficulty are in common substring, so remove them if it's found. + if( commonSubstring.size() > 2 && commonSubstring[commonSubstring.size() - 2] == ' ' ) + { + switch( commonSubstring[commonSubstring.size() - 1] ) + { + case '[': + case '(': + case '<': + commonSubstring = commonSubstring.substr(0, commonSubstring.size() - 2); + } + } + // Override what that global tag said about the title if we have a good substring. // Prevents clobbering and catches "MySong (7keys)" / "MySong (Another) (7keys)" // Also catches "MySong (7keys)" / "MySong (14keys)" diff --git a/src/NotesLoaderDWI.cpp b/src/NotesLoaderDWI.cpp index 30386f0f8c..b15c74252f 100644 --- a/src/NotesLoaderDWI.cpp +++ b/src/NotesLoaderDWI.cpp @@ -500,18 +500,18 @@ bool DWILoader::LoadFromDir( const RString &sPath_, Song &out, set &Bla * worth bothering with since we don't display fractional BPM anyway.) */ if( sscanf( sParams[1], "%i..%i", &iMin, &iMax ) == 2 ) { - out.m_DisplayBPMType = Song::DISPLAY_SPECIFIED; + out.m_DisplayBPMType = DISPLAY_BPM_SPECIFIED; out.m_fSpecifiedBPMMin = (float) iMin; out.m_fSpecifiedBPMMax = (float) iMax; } else if( sscanf( sParams[1], "%i", &iMin ) == 1 ) { - out.m_DisplayBPMType = Song::DISPLAY_SPECIFIED; + out.m_DisplayBPMType = DISPLAY_BPM_SPECIFIED; out.m_fSpecifiedBPMMin = out.m_fSpecifiedBPMMax = (float) iMin; } else { - out.m_DisplayBPMType = Song::DISPLAY_RANDOM; + out.m_DisplayBPMType = DISPLAY_BPM_RANDOM; } } diff --git a/src/NotesLoaderPMS.cpp b/src/NotesLoaderPMS.cpp index 692f4cf0ce..08f8efbb79 100644 --- a/src/NotesLoaderPMS.cpp +++ b/src/NotesLoaderPMS.cpp @@ -123,6 +123,7 @@ static StepsType DetermineStepsType( int iPlayer, const NoteData &nd, const RStr switch( iPlayer ) { case 1: + case 3: switch( iNumNonEmptyTracks ) { case 5: return StepsType_popn_five; diff --git a/src/NotesLoaderSM.cpp b/src/NotesLoaderSM.cpp index 8a280ec723..7fa211df32 100644 --- a/src/NotesLoaderSM.cpp +++ b/src/NotesLoaderSM.cpp @@ -12,7 +12,13 @@ #include "Steps.h" #include "PrefsManager.h" +/** @brief The maximum file size for edits. */ const int MAX_EDIT_STEPS_SIZE_BYTES = 60*1024; // 60KB +/** + * @brief The highest allowable speed before Warps come in. + * + * This was brought in from StepMania 4's recent betas. */ +const float FAST_BPM_WARP = 9999999.f; void SMLoader::LoadFromSMTokens( RString sStepsType, @@ -104,9 +110,6 @@ void SMLoader::LoadTimingFromSMFile( const MsdFile &msd, TimingData &out ) out.m_WarpSegments.clear(); out.m_vTimeSignatureSegments.clear(); - vector arrayWarpsFromNegativeBPMs; - //vector arrayWarpsFromNegativeStops; - for( unsigned i=0; i arrayBPMChangeExpressions; + split( sParams[1], ",", arrayBPMChangeExpressions ); + + // prepare storage variables for negative BPMs -> Warps. + float negBeat = -1; + float negBPM = 1; + float highspeedBeat = -1; + + for( unsigned b=0; b arrayBPMChangeValues; + split( arrayBPMChangeExpressions[b], "=", arrayBPMChangeValues ); + // XXX: Hard to tell which file caused this. + if( arrayBPMChangeValues.size() != 2 ) + { + LOG->UserLog( "Song file", "(UNKNOWN)", "has an invalid #%s value \"%s\" (must have exactly one '='), ignored.", + sValueName.c_str(), arrayBPMChangeExpressions[b].c_str() ); + continue; + } + + const float fBeat = StringToFloat( arrayBPMChangeValues[0] ); + const float fNewBPM = StringToFloat( arrayBPMChangeValues[1] ); + + if( fNewBPM < 0.0f ) + { + out.m_bHasNegativeBpms = true; + negBeat = fBeat; + negBPM = fNewBPM; + } + else if( fNewBPM > 0.0f ) + { + // add in a warp. + if( negBPM < 0 ) + { + float endBeat = fBeat + (fNewBPM / -negBPM) * (fBeat - negBeat); + WarpSegment new_seg(negBeat, endBeat); + out.AddWarpSegment( new_seg ); + + negBeat = -1; + negBPM = 1; + } + // too fast. make it a warp. + if( fNewBPM > FAST_BPM_WARP ) + { + highspeedBeat = fBeat; + } + else + { + // add in a warp. + if( highspeedBeat > 0 ) + { + WarpSegment new_seg(highspeedBeat, fBeat); + out.AddWarpSegment( new_seg ); + highspeedBeat = -1; + } + { + BPMSegment new_seg; + new_seg.m_iStartRow = BeatToNoteRow(fBeat); + new_seg.SetBPM( fNewBPM ); + out.AddBPMSegment( new_seg ); + } + } + } + } + } + else if( sValueName=="STOPS" || sValueName=="FREEZES" ) { vector arrayFreezeExpressions; split( sParams[1], ",", arrayFreezeExpressions ); + // Prepare variables for negative stop conversion. + float negBeat = -1; + float negPause = 0; + for( unsigned f=0; f arrayFreezeValues; @@ -136,29 +211,49 @@ void SMLoader::LoadTimingFromSMFile( const MsdFile &msd, TimingData &out ) const float fFreezeBeat = StringToFloat( arrayFreezeValues[0] ); const float fFreezeSeconds = StringToFloat( arrayFreezeValues[1] ); - StopSegment new_seg( BeatToNoteRow(fFreezeBeat), fFreezeSeconds ); - // XXX: Remove Negatives Bug? - new_seg.m_iStartRow = BeatToNoteRow(fFreezeBeat); - new_seg.m_fStopSeconds = fFreezeSeconds; - - if(fFreezeSeconds > 0.0f) + + // Process the prior stop. + if( negPause > 0 ) { - // LOG->Trace( "Adding a freeze segment: beat: %f, seconds = %f", new_seg.m_fStartBeat, new_seg.m_fStopSeconds ); - out.AddStopSegment( new_seg ); + BPMSegment oldBPM = out.GetBPMSegmentAtRow(BeatToNoteRow(negBeat)); + float fSecondsPerBeat = 60 / oldBPM.GetBPM(); + float fSkipBeats = negPause / fSecondsPerBeat; + + if( negBeat + fSkipBeats > fFreezeBeat ) + fSkipBeats = fFreezeBeat - negBeat; + + WarpSegment ws( negBeat, negBeat + fSkipBeats); + out.AddWarpSegment( ws ); + + negBeat = -1; + negPause = 0; } - else + + if( fFreezeSeconds < 0.0f ) { - // negative stops (hi JS!) -aj - if( PREFSMAN->m_bQuirksMode ) - { - // LOG->Trace( "Adding a negative freeze segment: beat: %f, seconds = %f", new_seg.m_fStartBeat, new_seg.m_fStopSeconds ); - out.AddStopSegment( new_seg ); - } - else - LOG->UserLog( "Song file", "(UNKNOWN)", "has an invalid stop at beat %f, length %f.", fFreezeBeat, fFreezeSeconds ); + negBeat = fFreezeBeat; + negPause = -fFreezeSeconds; } + else if( fFreezeSeconds > 0.0f ) + { + StopSegment ss( BeatToNoteRow(fFreezeBeat), fFreezeSeconds ); + out.AddStopSegment( ss ); + } + + } + + // Process the prior stop if there was one. + if( negPause > 0 ) + { + BPMSegment oldBPM = out.GetBPMSegmentAtRow(BeatToNoteRow(negBeat)); + float fSecondsPerBeat = 60 / oldBPM.GetBPM(); + float fSkipBeats = negPause / fSecondsPerBeat; + + WarpSegment ws( negBeat, negBeat + fSkipBeats); + out.AddWarpSegment( ws ); } } + else if( sValueName=="DELAYS" ) { vector arrayDelayExpressions; @@ -183,7 +278,7 @@ void SMLoader::LoadTimingFromSMFile( const MsdFile &msd, TimingData &out ) // XXX: Remove Negatives Bug? new_seg.m_iStartRow = BeatToNoteRow(fFreezeBeat); new_seg.m_fStopSeconds = fFreezeSeconds; - + // LOG->Trace( "Adding a delay segment: beat: %f, seconds = %f", new_seg.m_fStartBeat, new_seg.m_fStopSeconds ); if(fFreezeSeconds > 0.0f) @@ -193,95 +288,6 @@ void SMLoader::LoadTimingFromSMFile( const MsdFile &msd, TimingData &out ) } } - else if( sValueName=="BPMS" ) - { - vector arrayBPMChangeExpressions; - split( sParams[1], ",", arrayBPMChangeExpressions ); - - for( unsigned b=0; b arrayBPMChangeValues; - split( arrayBPMChangeExpressions[b], "=", arrayBPMChangeValues ); - // XXX: Hard to tell which file caused this. - if( arrayBPMChangeValues.size() != 2 ) - { - LOG->UserLog( "Song file", "(UNKNOWN)", "has an invalid #%s value \"%s\" (must have exactly one '='), ignored.", - sValueName.c_str(), arrayBPMChangeExpressions[b].c_str() ); - continue; - } - - const float fBeat = StringToFloat( arrayBPMChangeValues[0] ); - const float fNewBPM = StringToFloat( arrayBPMChangeValues[1] ); - // XXX: Remove Negatives Bug? - BPMSegment new_seg; - new_seg.m_iStartRow = BeatToNoteRow(fBeat); - new_seg.SetBPM( fNewBPM ); - - // convert negative BPMs into Warp segments - if( fNewBPM < 0.0f ) - { - vector arrayNextBPMChangeValues; - // get next bpm in sequence - if((b+1) < arrayBPMChangeExpressions.size()) - { - split( arrayBPMChangeExpressions[b+1], "=", arrayNextBPMChangeValues ); - const float fNextPositiveBeat = StringToFloat( arrayNextBPMChangeValues[0] ); - const float fNextPositiveBPM = StringToFloat( arrayNextBPMChangeValues[1] ); - - // tJumpPos = (tPosBPS-abs(negBPS)) + (gPosBPMPosition - fNegPosition) - float fDeltaBeat = ((fNextPositiveBPM/60.0f)-abs(fNewBPM/60.0f)) + (fNextPositiveBeat-fBeat); - //float fWarpLengthBeats = fNextPositiveBeat + fDeltaBeat; - WarpSegment wsTemp(BeatToNoteRow(fBeat),fDeltaBeat); - arrayWarpsFromNegativeBPMs.push_back(wsTemp); - - /* - LOG->Trace( ssprintf("==NotesLoSM negbpm==\nfnextposbeat = %f, fnextposbpm = %f,\nfdelta = %f, fwarpto = %f", - fNextPositiveBeat, - fNextPositiveBPM, - fDeltaBeat, - fWarpToBeat - ) ); - */ - /* - LOG->Trace( ssprintf("==Negative/Subtractive BPM in NotesLoader==\nNegBPM has noterow = %i, BPM = %f\nNextBPM @ noterow %i\nDelta value = %i noterows\nThis warp will have us end up at noterow %i", - BeatToNoteRow(fBeat), fNewBPM, - BeatToNoteRow(fNextPositiveBeat), - BeatToNoteRow(fDeltaBeat), - BeatToNoteRow(fWarpToBeat)) - ); - */ - //float fDeltaBeat = ((fNextPositiveBPM/60.0f)-abs(fNewBPM/60.0f)) + (fNextPositiveBeat-fBeat); - /* - LOG->Trace( ssprintf("==NotesLoader Delta as NoteRows==\nfDeltaBeat = %f (beat)\nfDeltaBeat = (NextBPMSeg %f - abs(fBPS %f)) + (nextStartRow %i - thisRow %i)", - fDeltaBeat,(fNextPositiveBPM/60.0f),abs(fNewBPM/60.0f),BeatToNoteRow(fNextPositiveBeat),BeatToNoteRow(fBeat)) - ); - */ - - out.AddBPMSegment( new_seg ); - - continue; - } - else - { - // last BPM is a negative one? ugh. -aj (MAX_NOTE_ROW exists btw) - out.AddBPMSegment( new_seg ); - } - } - - if(fNewBPM > 0.0f) - out.AddBPMSegment( new_seg ); - else - { - out.m_bHasNegativeBpms = true; - // only add Negative BPMs in quirks mode -aj - if( PREFSMAN->m_bQuirksMode ) - out.AddBPMSegment( new_seg ); - else - LOG->UserLog( "Song file", "(UNKNOWN)", "has an invalid BPM change at beat %f, BPM %f.", fBeat, fNewBPM ); - } - } - } - else if( sValueName=="TIMESIGNATURES" ) { vector vs1; @@ -326,12 +332,12 @@ void SMLoader::LoadTimingFromSMFile( const MsdFile &msd, TimingData &out ) out.AddTimeSignatureSegment( seg ); } } - + else if( sValueName=="TICKCOUNTS" ) { vector arrayTickcountExpressions; split( sParams[1], ",", arrayTickcountExpressions ); - + for( unsigned f=0; f arrayTickcountValues; @@ -343,7 +349,7 @@ void SMLoader::LoadTimingFromSMFile( const MsdFile &msd, TimingData &out ) sValueName.c_str(), arrayTickcountExpressions[f].c_str() ); continue; } - + const float fTickcountBeat = StringToFloat( arrayTickcountValues[0] ); int iTicks = atoi( arrayTickcountValues[1] ); // you're lazy, let SM do the work for you... -DaisuMaster @@ -366,61 +372,8 @@ void SMLoader::LoadTimingFromSMFile( const MsdFile &msd, TimingData &out ) } } } - - // warps (replacement for Negative BPM and Negative Stops) - /* - else if( sValueName=="WARPS" ) - { - vector arrayWarpExpressions; - split( sParams[1], ",", arrayWarpExpressions ); - - for( unsigned f=0; f arrayWarpValues; - split( arrayWarpExpressions[f], "=", arrayWarpValues ); - if( arrayWarpValues.size() != 2 ) - { - // XXX: Hard to tell which file caused this. - LOG->UserLog( "Song file", "(UNKNOWN)", "has an invalid #%s value \"%s\" (must have exactly one '='), ignored.", - sValueName.c_str(), arrayWarpExpressions[f].c_str() ); - continue; - } - - const float fWarpStart = StringToFloat( arrayWarpValues[0] ); - const float fWarpBeats = StringToFloat( arrayWarpValues[1] ); - - if( fWarpStart > 0.0f && fWarpBeats > 0.0f ) - { - WarpSegment new_seg( BeatToNoteRow(fWarpStart), fWarpBeats ); - out.AddWarpSegment( new_seg ); - } - else - { - // Currently disallow negative warps, to prevent the same - // kind of problem that happened when Negative/Subtractive - // BPMs arrived on the StepMania scene. -aj - LOG->UserLog( "Song file", "(UNKNOWN)", "has an invalid warp at beat %f lasting %f beats.", fWarpStart, fWarpBeats ); - } - } - } - */ - - // Note: Even though it is possible to have Negative BPMs and Stops in - // a song along with Warps, we should not support files that contain - // both styles of warp tricks (Negatives vs. #WARPS). - // If Warps have been populated from Negative BPMs, then go through that - // instead of using the data in the Warps tag. This should be above, - // but it breaks compiling so... - if(arrayWarpsFromNegativeBPMs.size() > 0) - { - // zomg we already have some warps... - for( unsigned j=0; j arrayWarpExpressions; + split( sParams[1], ",", arrayWarpExpressions ); + + for( unsigned b=0; b arrayWarpValues; + split( arrayWarpExpressions[b], "=", arrayWarpValues ); + // XXX: Hard to tell which file caused this. + if( arrayWarpValues.size() != 2 ) + { + LOG->UserLog( "Song file", "(UNKNOWN)", "has an invalid #%s value \"%s\" (must have exactly one '='), ignored.", + sValueName.c_str(), arrayWarpExpressions[b].c_str() ); + continue; + } + + const float fBeat = StringToFloat( arrayWarpValues[0] ); + const float fNewBeat = StringToFloat( arrayWarpValues[1] ); + + if(fNewBeat > fBeat) + out.m_Timing.AddWarpSegment( WarpSegment(fBeat, fNewBeat) ); + else + { + LOG->UserLog( "Song file", "(UNKNOWN)", "has an invalid Warp at beat %f, BPM %f.", fBeat, fNewBeat ); + } + } + } else if( sValueName=="TIMESIGNATURES" ) { diff --git a/src/NotesLoaderSSC.h b/src/NotesLoaderSSC.h index ae8f00bc9c..ff44a23cb5 100644 --- a/src/NotesLoaderSSC.h +++ b/src/NotesLoaderSSC.h @@ -21,7 +21,10 @@ enum SSCLoadingStates NUM_SSCLoadingStates /**< The number of states used. */ }; +/** @brief The version where fakes started to be used as a radar category. */ const float VERSION_RADAR_FAKE = 0.53f; +/** @brief The version where WarpSegments started to be utilized. */ +const float VERSION_WARP_SEGMENT = 0.56f; /** * @brief The SSCLoader handles all of the parsing needed for .ssc files. diff --git a/src/NotesWriterDWI.cpp b/src/NotesWriterDWI.cpp index 2398b708e7..ce8ba00231 100644 --- a/src/NotesWriterDWI.cpp +++ b/src/NotesWriterDWI.cpp @@ -360,16 +360,16 @@ bool NotesWriterDWI::Write( RString sPath, const Song &out ) f.PutLine( ssprintf("#CDTITLE:%s;", DwiEscape(out.m_sCDTitleFile).c_str()) ); switch( out.m_DisplayBPMType ) { - case Song::DISPLAY_ACTUAL: + case DISPLAY_BPM_ACTUAL: // write nothing break; - case Song::DISPLAY_SPECIFIED: + case DISPLAY_BPM_SPECIFIED: if( out.m_fSpecifiedBPMMin == out.m_fSpecifiedBPMMax ) f.PutLine( ssprintf("#DISPLAYBPM:%i;\n", (int) out.m_fSpecifiedBPMMin) ); else f.PutLine( ssprintf("#DISPLAYBPM:%i..%i;\n", (int) out.m_fSpecifiedBPMMin, (int) out.m_fSpecifiedBPMMax) ); break; - case Song::DISPLAY_RANDOM: + case DISPLAY_BPM_RANDOM: f.PutLine( "#DISPLAYBPM:*" ); break; } diff --git a/src/NotesWriterSM.cpp b/src/NotesWriterSM.cpp index 2f5d38251d..23f9a646ce 100644 --- a/src/NotesWriterSM.cpp +++ b/src/NotesWriterSM.cpp @@ -76,11 +76,11 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) f.PutLine( "#INSTRUMENTTRACK:" + s + ";\n" ); } } - f.PutLine( ssprintf( "#OFFSET:%.6f;", out.m_Timing.m_fBeat0OffsetInSeconds ) ); - f.PutLine( ssprintf( "#SAMPLESTART:%.6f;", out.m_fMusicSampleStartSeconds ) ); - f.PutLine( ssprintf( "#SAMPLELENGTH:%.6f;", out.m_fMusicSampleLengthSeconds ) ); + f.PutLine( ssprintf( "#OFFSET:%.3f;", out.m_Timing.m_fBeat0OffsetInSeconds ) ); + f.PutLine( ssprintf( "#SAMPLESTART:%.3f;", out.m_fMusicSampleStartSeconds ) ); + f.PutLine( ssprintf( "#SAMPLELENGTH:%.3f;", out.m_fMusicSampleLengthSeconds ) ); if( out.m_fSpecifiedLastBeat > 0 ) - f.PutLine( ssprintf("#LASTBEATHINT:%.6f;", out.m_fSpecifiedLastBeat) ); + f.PutLine( ssprintf("#LASTBEATHINT:%.3f;", out.m_fSpecifiedLastBeat) ); f.Write( "#SELECTABLE:" ); switch(out.m_SelectionDisplay) @@ -94,17 +94,17 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) switch( out.m_DisplayBPMType ) { - case Song::DISPLAY_ACTUAL: + case DISPLAY_BPM_ACTUAL: // write nothing break; - case Song::DISPLAY_SPECIFIED: + case DISPLAY_BPM_SPECIFIED: if( out.m_fSpecifiedBPMMin == out.m_fSpecifiedBPMMax ) - f.PutLine( ssprintf( "#DISPLAYBPM:%.6f;", out.m_fSpecifiedBPMMin ) ); + f.PutLine( ssprintf( "#DISPLAYBPM:%.3f;", out.m_fSpecifiedBPMMin ) ); else - f.PutLine( ssprintf( "#DISPLAYBPM:%.6f:%.6f;", + f.PutLine( ssprintf( "#DISPLAYBPM:%.3f:%.3f;", out.m_fSpecifiedBPMMin, out.m_fSpecifiedBPMMax ) ); break; - case Song::DISPLAY_RANDOM: + case DISPLAY_BPM_RANDOM: f.PutLine( ssprintf( "#DISPLAYBPM:*;" ) ); break; } @@ -115,7 +115,7 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) { const BPMSegment &bs = out.m_Timing.m_BPMSegments[i]; - f.PutLine( ssprintf( "%.6f=%.6f", NoteRowToBeat(bs.m_iStartRow), bs.GetBPM() ) ); + f.PutLine( ssprintf( "%.3f=%.3f", NoteRowToBeat(bs.m_iStartRow), bs.GetBPM() ) ); if( i != out.m_Timing.m_BPMSegments.size()-1 ) f.Write( "," ); } @@ -128,7 +128,7 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) if(!fs.m_bDelay) { - f.PutLine( ssprintf( "%.6f=%.6f", NoteRowToBeat(fs.m_iStartRow), fs.m_fStopSeconds ) ); + f.PutLine( ssprintf( "%.3f=%.3f", NoteRowToBeat(fs.m_iStartRow), fs.m_fStopSeconds ) ); if( i != out.m_Timing.m_StopSegments.size()-1 ) f.Write( "," ); } @@ -142,31 +142,18 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) if( fs.m_bDelay ) { - f.PutLine( ssprintf( "%.6f=%.6f", NoteRowToBeat(fs.m_iStartRow), fs.m_fStopSeconds ) ); + f.PutLine( ssprintf( "%.3f=%.3f", NoteRowToBeat(fs.m_iStartRow), fs.m_fStopSeconds ) ); if( i != out.m_Timing.m_StopSegments.size()-1 ) f.Write( "," ); } } f.PutLine( ";" ); - /* - f.Write( "#WARPS:" ); - for( unsigned i=0; im_iStartRow), + f.PutLine( ssprintf( "%.3f=%d=%d", NoteRowToBeat(iter->m_iStartRow), iter->m_iNumerator, iter->m_iDenominator ) ); vector::const_iterator iter2 = iter; iter2++; @@ -181,7 +168,7 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) { const TickcountSegment &ts = out.m_Timing.m_TickcountSegments[i]; - f.PutLine( ssprintf( "%.6f=%d", NoteRowToBeat(ts.m_iStartRow), ts.m_iTicks ) ); + f.PutLine( ssprintf( "%.3f=%d", NoteRowToBeat(ts.m_iStartRow), ts.m_iTicks ) ); if( i != out.m_Timing.m_TickcountSegments.size()-1 ) f.Write( "," ); } @@ -274,7 +261,7 @@ static RString GetSMNotesTag( const Song &song, const Steps &in ) RString desc = (USE_CREDIT ? in.GetCredit() : in.GetDescription()); lines.push_back( ssprintf( " %s:", SmEscape(desc).c_str() ) ); lines.push_back( ssprintf( " %s:", DifficultyToString(in.GetDifficulty()).c_str() ) ); - lines.push_back( ssprintf( " %d:", in.GetMeter() ) ); + lines.push_back( ssprintf( " %d:", clamp( in.GetMeter(), MIN_METER, MAX_METER ) ) ); vector asRadarValues; // SM files don't use fakes for radar data. Keep it that way. @@ -300,7 +287,7 @@ static RString GetSMNotesTag( const Song &song, const Steps &in ) return JoinLineList( lines ); } -bool NotesWriterSM::Write( RString sPath, const Song &out ) +bool NotesWriterSM::Write( RString sPath, const Song &out, const vector& vpStepsToSave ) { int flags = RageFile::WRITE; @@ -315,8 +302,6 @@ bool NotesWriterSM::Write( RString sPath, const Song &out ) WriteGlobalTags( f, out ); - // Save specified Steps to this file - const vector& vpStepsToSave = out.GetAllSteps(); FOREACH_CONST( Steps*, vpStepsToSave, s ) { const Steps* pSteps = *s; diff --git a/src/NotesWriterSM.h b/src/NotesWriterSM.h index 71a5e8b292..ee0ed26441 100644 --- a/src/NotesWriterSM.h +++ b/src/NotesWriterSM.h @@ -11,7 +11,7 @@ namespace NotesWriterSM * @param sPath the path to write the file. * @param out the Song to be written out. * @return its success or failure. */ - bool Write( RString sPath, const Song &out ); + bool Write( RString sPath, const Song &out, const vector& vpStepsToSave ); /** * @brief Get some contents about the edit file first. * @param pSong the Song in question. diff --git a/src/NotesWriterSSC.cpp b/src/NotesWriterSSC.cpp index c736104ae8..5c01700586 100644 --- a/src/NotesWriterSSC.cpp +++ b/src/NotesWriterSSC.cpp @@ -55,6 +55,7 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) f.PutLine( ssprintf( "#SUBTITLETRANSLIT:%s;", SmEscape(out.m_sSubTitleTranslit).c_str() ) ); f.PutLine( ssprintf( "#ARTISTTRANSLIT:%s;", SmEscape(out.m_sArtistTranslit).c_str() ) ); f.PutLine( ssprintf( "#GENRE:%s;", SmEscape(out.m_sGenre).c_str() ) ); + f.PutLine( ssprintf( "#ORIGIN:%s;", SmEscape(out.m_sOrigin).c_str() ) ); f.PutLine( ssprintf( "#CREDIT:%s;", SmEscape(out.m_sCredit).c_str() ) ); f.PutLine( ssprintf( "#BANNER:%s;", SmEscape(out.m_sBannerFile).c_str() ) ); f.PutLine( ssprintf( "#BACKGROUND:%s;", SmEscape(out.m_sBackgroundFile).c_str() ) ); @@ -91,16 +92,16 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) switch( out.m_DisplayBPMType ) { - case Song::DISPLAY_ACTUAL: + case DISPLAY_BPM_ACTUAL: // write nothing break; - case Song::DISPLAY_SPECIFIED: + case DISPLAY_BPM_SPECIFIED: if( out.m_fSpecifiedBPMMin == out.m_fSpecifiedBPMMax ) f.PutLine( ssprintf( "#DISPLAYBPM:%.6f;", out.m_fSpecifiedBPMMin ) ); else f.PutLine( ssprintf( "#DISPLAYBPM:%.6f:%.6f;", out.m_fSpecifiedBPMMin, out.m_fSpecifiedBPMMax ) ); break; - case Song::DISPLAY_RANDOM: + case DISPLAY_BPM_RANDOM: f.PutLine( ssprintf( "#DISPLAYBPM:*;" ) ); break; } @@ -144,18 +145,18 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) } f.PutLine( ";" ); - /* + f.Write( "#WARPS:" ); for( unsigned i=0; i asRadarValues; FOREACH_PlayerNumber( pn ) @@ -299,6 +300,7 @@ static RString GetSSCNoteData( const Song &song, const Steps &in, bool bSavingCa lines.push_back( "#BPMS:;" ); lines.push_back( "#STOPS:;" ); lines.push_back( "#DELAYS:;" ); + lines.push_back( "#WARPS:;" ); lines.push_back( "#TIMESIGNATURES:;" ); lines.push_back( "#TICKCOUNTS:;" ); lines.push_back( "#ATTACKS:;" ); @@ -336,7 +338,19 @@ static RString GetSSCNoteData( const Song &song, const Steps &in, bool bSavingCa } } lines.push_back( ssprintf( "#DELAYS:%s;", join("\n,", asDelayValues).c_str() ) ); - + + vector asWarpValues; + for( unsigned i=0; i asTimeSigValues; FOREACH_CONST( TimeSignatureSegment, in.m_Timing.m_vTimeSignatureSegments, iter ) diff --git a/src/OptionRow.cpp b/src/OptionRow.cpp index 4d645977ac..ee043f65df 100644 --- a/src/OptionRow.cpp +++ b/src/OptionRow.cpp @@ -168,7 +168,7 @@ void OptionRow::ChoicesChanged( RowType type ) vbSelected[0] = true; } - // TRICKY: Insert a down arrow as the first choice in the row. + // TRICKY: Insert a down arrow as the first choice in the row. if( m_bFirstItemGoesDown ) { m_pHand->m_Def.m_vsChoices.insert( m_pHand->m_Def.m_vsChoices.begin(), NEXT_ROW_NAME ); @@ -178,7 +178,7 @@ void OptionRow::ChoicesChanged( RowType type ) InitText( type ); - /* When choices change, the old focus position is meaningless; reset it. */ + // When choices change, the old focus position is meaningless; reset it. FOREACH_PlayerNumber( p ) SetChoiceInRowWithFocus( p, 0 ); @@ -260,7 +260,7 @@ void OptionRow::InitText( RowType type ) m_ModIcons[p] = new ModIcon( m_pParentType->m_ModIcon ); m_ModIcons[p]->SetDrawOrder(-1); // under title m_ModIcons[p]->PlayCommand( "On" ); - + m_Frame.AddChild( m_ModIcons[p] ); GameCommand gc; @@ -398,7 +398,7 @@ void OptionRow::InitText( RowType type ) this->SortByDrawOrder(); } -/* After importing options, choose which item is focused. */ +// After importing options, choose which item is focused. void OptionRow::AfterImportOptions( PlayerNumber pn ) { /* We load items for both players on start, since we don't know which players @@ -604,7 +604,7 @@ void OptionRow::UpdateEnabledDisabled() FOREACH_HumanPlayer( pn ) { bRowEnabled = m_pHand->m_Def.m_vEnabledForPlayers.find(pn) != m_pHand->m_Def.m_vEnabledForPlayers.end(); - + if( !m_pHand->m_Def.m_bOneChoiceForAllPlayers ) { if( m_bRowHasFocus[pn] ) color = m_pParentType->COLOR_SELECTED; @@ -645,6 +645,7 @@ void OptionRow::SetModIcon( PlayerNumber pn, const RString &sText, GameCommand & // update row frame Message msg( "Refresh" ); msg.SetParam( "GameCommand", &gc ); + msg.SetParam( "Text", sText ); m_sprFrame->HandleMessage( msg ); if( m_ModIcons[pn] != NULL ) m_ModIcons[pn]->Set( sText ); diff --git a/src/OptionRowHandler.h b/src/OptionRowHandler.h index 2fe5a5b624..3a443849ce 100644 --- a/src/OptionRowHandler.h +++ b/src/OptionRowHandler.h @@ -77,15 +77,14 @@ struct OptionRowDefinition OptionRowDefinition(): m_sName(""), m_sExplanationName(""), m_bOneChoiceForAllPlayers(false), m_selectType(SELECT_ONE), - m_layoutType(LAYOUT_SHOW_ALL_IN_ROW), m_iDefault(-1), + m_layoutType(LAYOUT_SHOW_ALL_IN_ROW), m_vsChoices(), + m_vEnabledForPlayers(), m_iDefault(-1), m_bExportOnChange(false), m_bAllowThemeItems(true), m_bAllowThemeTitle(true), m_bAllowExplanation(true), m_bShowChoicesListOnSelect(false) { - m_vsChoices.clear(); - m_vEnabledForPlayers.clear(); FOREACH_PlayerNumber( pn ) - m_vEnabledForPlayers.insert( pn ); + m_vEnabledForPlayers.insert( pn ); } void Init() { @@ -106,13 +105,33 @@ struct OptionRowDefinition m_bShowChoicesListOnSelect = false; } - OptionRowDefinition( const char *n, bool b, const char *c0=NULL, const char *c1=NULL, const char *c2=NULL, const char *c3=NULL, const char *c4=NULL, const char *c5=NULL, const char *c6=NULL, const char *c7=NULL, const char *c8=NULL, const char *c9=NULL, const char *c10=NULL, const char *c11=NULL, const char *c12=NULL, const char *c13=NULL, const char *c14=NULL, const char *c15=NULL, const char *c16=NULL, const char *c17=NULL, const char *c18=NULL, const char *c19=NULL ) + OptionRowDefinition( const char *n, bool b, const char *c0=NULL, + const char *c1=NULL, const char *c2=NULL, + const char *c3=NULL, const char *c4=NULL, + const char *c5=NULL, const char *c6=NULL, + const char *c7=NULL, const char *c8=NULL, + const char *c9=NULL, const char *c10=NULL, + const char *c11=NULL, const char *c12=NULL, + const char *c13=NULL, const char *c14=NULL, + const char *c15=NULL, const char *c16=NULL, + const char *c17=NULL, const char *c18=NULL, + const char *c19=NULL ): m_sName(n), + m_sExplanationName(""), m_bOneChoiceForAllPlayers(b), + m_selectType(SELECT_ONE), + m_layoutType(LAYOUT_SHOW_ALL_IN_ROW), m_vsChoices(), + m_vEnabledForPlayers(), m_iDefault(-1), + m_bExportOnChange(false), m_bAllowThemeItems(true), + m_bAllowThemeTitle(true), m_bAllowExplanation(true), + m_bShowChoicesListOnSelect(false) { - Init(); - m_sName=n; - m_bOneChoiceForAllPlayers=b; + FOREACH_PlayerNumber( pn ) + m_vEnabledForPlayers.insert( pn ); + #define PUSH( c ) if(c) m_vsChoices.push_back(c); - PUSH(c0);PUSH(c1);PUSH(c2);PUSH(c3);PUSH(c4);PUSH(c5);PUSH(c6);PUSH(c7);PUSH(c8);PUSH(c9);PUSH(c10);PUSH(c11);PUSH(c12);PUSH(c13);PUSH(c14);PUSH(c15);PUSH(c16);PUSH(c17);PUSH(c18);PUSH(c19); + PUSH(c0);PUSH(c1);PUSH(c2);PUSH(c3);PUSH(c4);PUSH(c5); + PUSH(c6);PUSH(c7);PUSH(c8);PUSH(c9);PUSH(c10);PUSH(c11); + PUSH(c12);PUSH(c13);PUSH(c14);PUSH(c15);PUSH(c16);PUSH(c17); + PUSH(c18);PUSH(c19); #undef PUSH } }; @@ -124,7 +143,7 @@ public: OptionRowDefinition m_Def; vector m_vsReloadRowMessages; // refresh this row on on these messages - OptionRowHandler() { Init(); } + OptionRowHandler(): m_Def(), m_vsReloadRowMessages() { } virtual ~OptionRowHandler() { } virtual void Init() { diff --git a/src/PaneDisplay.cpp b/src/PaneDisplay.cpp index f3e37b9e60..e812156cd3 100644 --- a/src/PaneDisplay.cpp +++ b/src/PaneDisplay.cpp @@ -51,6 +51,7 @@ static const Content_t g_Contents[NUM_PaneCategory] = { NEED_NOTES, "count" }, // Mines { NEED_NOTES, "count" }, // Hands { NEED_NOTES, "count" }, // Lifts + { NEED_NOTES, "count" }, // Fakes { NEED_NOTES, "score" }, // MachineHighScore { NEED_NOTES, "name" }, // MachineHighName { NEED_NOTES|NEED_PROFILE, "score" }, // ProfileHighScore @@ -247,6 +248,7 @@ void PaneDisplay::SetContent( PaneCategory c ) case PaneCategory_Mines: case PaneCategory_Hands: case PaneCategory_Lifts: + case PaneCategory_Fakes: str = ssprintf( COUNT_FORMAT.GetValue(), val ); } } diff --git a/src/Player.cpp b/src/Player.cpp index 2f505d391a..c3e6b86ce8 100644 --- a/src/Player.cpp +++ b/src/Player.cpp @@ -1291,6 +1291,8 @@ void Player::UpdateHoldNotes( int iSongRow, float fDeltaTime, vectorpTN; @@ -1303,15 +1305,11 @@ void Player::UpdateHoldNotes( int iSongRow, float fDeltaTime, vectorsecond; + if( GAMESTATE->m_pCurSong->m_Timing.IsWarpAtRow( begin->first ) ) + break; if( tn.type == TapNote::empty ) break; if( !bAllowGraded && tn.result.tns != TNS_None ) @@ -1569,6 +1569,11 @@ int Player::GetClosestNonEmptyRowDirectional( int iStartRow, int iEndRow, bool b ++iter; continue; } + if( GAMESTATE->m_pCurSong->m_Timing.IsWarpAtRow( iter.Row() ) ) + { + ++iter; + continue; + } return iter.Row(); } } @@ -1806,6 +1811,35 @@ void Player::ScoreAllActiveHoldsLetGo() } } +void Player::PlayKeysound( const TapNote &tn, TapNoteScore score ) +{ + // tap note must have keysound + if( tn.iKeysoundIndex >= 0 && tn.iKeysoundIndex < (int) m_vKeysounds.size() ) + { + // handle a case for hold notes + if( tn.type == TapNote::hold_head ) + { + // if the hold is not already held + if( tn.HoldResult.hns == HNS_None ) + { + // if the hold is already activated + TapNoteScore tns = tn.result.tns; + if( tns != TNS_None && tns != TNS_Miss && score == TNS_None ) + { + // the sound must also be already playing + if( m_vKeysounds[tn.iKeysoundIndex].IsPlaying() ) + { + // if all of these conditions are met, don't play the sound. + return; + } + } + } + } + m_vKeysounds[tn.iKeysoundIndex].Play(); + m_vKeysounds[tn.iKeysoundIndex].SetProperty ("Volume", 1); + } +} + void Player::StepStrumHopo( int col, int row, const RageTimer &tm, bool bHeld, bool bRelease, Player::ButtonType pbt ) { if( IsOniDead() ) @@ -1966,7 +2000,10 @@ void Player::StepStrumHopo( int col, int row, const RageTimer &tm, bool bHeld, b * Either option would fundamentally change the grading of two quick notes * "jack hammers." Hmm. */ - const int iStepSearchRows = BeatToNoteRow( StepSearchDistance * GAMESTATE->m_fCurBPS * GAMESTATE->m_SongOptions.GetCurrent().m_fMusicRate ); + const int iStepSearchRows = max( + BeatToNoteRow( GAMESTATE->m_pCurSong->m_Timing.GetBeatFromElapsedTime( GAMESTATE->m_fMusicSeconds + StepSearchDistance ) ) - iSongRow, + iSongRow - BeatToNoteRow( GAMESTATE->m_pCurSong->m_Timing.GetBeatFromElapsedTime( GAMESTATE->m_fMusicSeconds - StepSearchDistance ) ) + ) + ROWS_PER_BEAT; int iRowOfOverlappingNoteOrRow = row; if( row == -1 ) { @@ -2040,7 +2077,9 @@ void Player::StepStrumHopo( int col, int row, const RageTimer &tm, bool bHeld, b { case TapNote::mine: // Stepped too close to mine? - if( !bRelease && ( REQUIRE_STEP_ON_MINES == !bHeld ) && fSecondsFromExact <= GetWindowSeconds(TW_Mine) ) + if( !bRelease && ( REQUIRE_STEP_ON_MINES == !bHeld ) && + fSecondsFromExact <= GetWindowSeconds(TW_Mine) && + !GAMESTATE->m_pCurSong->m_Timing.IsWarpAtRow(iSongRow) ) score = TNS_HitMine; break; @@ -2449,37 +2488,23 @@ done_checking_hopo: } if( iRowOfOverlappingNoteOrRow != -1 ) { - bool bShouldPlayNextKeysound = true; - - if( bShouldPlayNextKeysound ) + switch( pbt ) { - - switch( pbt ) + DEFAULT_FAIL(pbt); + case ButtonType_StrumFretsChanged: + for( int i=0; i= 0 && tn.iKeysoundIndex < (int) m_vKeysounds.size() && (tn.type != TapNote::hold_head || (!tn.HoldResult.bActive || (tn.HoldResult.fOverlappedTime == 0 || (tn.HoldResult.hns == HNS_Held)))) ) - { - m_vKeysounds[tn.iKeysoundIndex].Play(); - m_vKeysounds[tn.iKeysoundIndex].SetProperty ("Volume", 1); - } - } - break; - case ButtonType_Step: - case ButtonType_Hopo: - const TapNote &tn = m_NoteData.GetTapNote( col, iRowOfOverlappingNoteOrRow ); - if( tn.iKeysoundIndex >= 0 && tn.iKeysoundIndex < (int) m_vKeysounds.size() && (tn.type != TapNote::hold_head || (!tn.HoldResult.bActive || (tn.HoldResult.fOverlappedTime == 0 || (tn.HoldResult.hns == HNS_Held)))) ) - { - m_vKeysounds[tn.iKeysoundIndex].Play(); - m_vKeysounds[tn.iKeysoundIndex].SetProperty ("Volume", 1); - } - break; + const TapNote &tn = m_NoteData.GetTapNote( i, iRowOfOverlappingNoteOrRow ); + PlayKeysound( tn, score ); } - + break; + case ButtonType_Step: + case ButtonType_Hopo: + const TapNote &tn = m_NoteData.GetTapNote( col, iRowOfOverlappingNoteOrRow ); + PlayKeysound( tn, score ); + break; } + } } // XXX: @@ -2522,8 +2547,8 @@ void Player::UpdateTapNotesMissedOlderThan( float fMissIfOlderThanSeconds ) { //LOG->Trace( "Steps::UpdateTapNotesMissedOlderThan(%f)", fMissIfOlderThanThisBeat ); int iMissIfOlderThanThisRow; + const float fEarliestTime = GAMESTATE->m_fMusicSeconds - fMissIfOlderThanSeconds; { - const float fEarliestTime = GAMESTATE->m_fMusicSeconds - fMissIfOlderThanSeconds; bool bFreeze, bDelay; float fMissIfOlderThanThisBeat; float fThrowAway; @@ -2551,8 +2576,8 @@ void Player::UpdateTapNotesMissedOlderThan( float fMissIfOlderThanSeconds ) if( !NeedsTapJudging(tn) ) continue; - // warp hackery - if( iter.Row() >= GAMESTATE->m_iWarpBeginRow && iter.Row() <= (GAMESTATE->m_iWarpBeginRow + BeatToNoteRow(GAMESTATE->m_fWarpLength)) ) + // Ignore all notes that are skipped via WARPS. + if( GAMESTATE->m_pCurSong->m_Timing.IsWarpAtRow( iter.Row() ) ) continue; if( tn.type == TapNote::mine ) @@ -2568,11 +2593,6 @@ void Player::UpdateTapNotesMissedOlderThan( float fMissIfOlderThanSeconds ) } else { - // warp hackery: don't score notes within the warp region. - // (Only useful when QuirksMode is enabled.) -aj - if( iter.Row() >= GAMESTATE->m_iWarpBeginRow && iter.Row() <= (GAMESTATE->m_iWarpBeginRow + BeatToNoteRow(GAMESTATE->m_fWarpLength)) ) - continue; - tn.result.tns = TNS_Miss; } } @@ -2591,9 +2611,8 @@ void Player::UpdateJudgedRows() { int iRow = iter.Row(); - // if row is within a warp section, ignore it. -aj - if( iRow >= GAMESTATE->m_iWarpBeginRow && - iRow <= (GAMESTATE->m_iWarpBeginRow + BeatToNoteRow(GAMESTATE->m_fWarpLength)) ) + // If row is within a warp section, ignore it. -aj + if( GAMESTATE->m_pCurSong->m_Timing.IsWarpAtRow(iRow) ) continue; if( iLastSeenRow != iRow ) @@ -2927,9 +2946,8 @@ void Player::HandleTapRowScore( unsigned row ) bNoCheating = false; #endif - // more warp hackery. -aj - if( row >= (unsigned)GAMESTATE->m_iWarpBeginRow && - row <= (unsigned)(GAMESTATE->m_iWarpBeginRow + BeatToNoteRow(GAMESTATE->m_fWarpLength)) ) + // Warp hackery. -aj + if( GAMESTATE->m_pCurSong->m_Timing.IsWarpAtRow( row ) ) return; if( GAMESTATE->m_bDemonstrationOrJukebox ) @@ -3032,9 +3050,8 @@ void Player::HandleHoldCheckpoint( int iRow, int iNumHoldsHeldThisRow, int iNumH bNoCheating = false; #endif - // more warp hackery. -aj - if( iRow >= GAMESTATE->m_iWarpBeginRow && - iRow <= (GAMESTATE->m_iWarpBeginRow + BeatToNoteRow(GAMESTATE->m_fWarpLength)) ) + // More warp hackery. -aj + if( GAMESTATE->m_pCurSong->m_Timing.IsWarpAtRow( iRow ) ) return; // don't accumulate combo if AutoPlay is on. diff --git a/src/Player.h b/src/Player.h index a72a4b57e0..b8923b9372 100644 --- a/src/Player.h +++ b/src/Player.h @@ -117,6 +117,7 @@ protected: void DrawTapJudgments(); void DrawHoldJudgments(); void SendComboMessages( int iOldCombo, int iOldMissCombo ); + void PlayKeysound( const TapNote &tn, TapNoteScore score ); void SetJudgment( TapNoteScore tns, int iFirstTrack, float fTapNoteOffset ); // -1 if no track as in TNS_Miss void SetHoldJudgment( TapNoteScore tns, HoldNoteScore hns, int iTrack ); diff --git a/src/PlayerOptions.cpp b/src/PlayerOptions.cpp index 812127f8d5..8d1a8199cd 100644 --- a/src/PlayerOptions.cpp +++ b/src/PlayerOptions.cpp @@ -840,11 +840,227 @@ void PlayerOptions::ResetPrefs( ResetPrefsType type ) class LunaPlayerOptions: public Luna { public: - DEFINE_METHOD( GetNoteSkin, m_sNoteSkin ) + // NoteSkins + static int GetNoteSkin( T *p, lua_State *L ) + { + if( p->m_sNoteSkin.empty() ) + lua_pushstring( L, CommonMetrics::DEFAULT_NOTESKIN_NAME.GetValue() ); + else + lua_pushstring( L, p->m_sNoteSkin ); + return 1; + } + static int SetNoteSkin( T *p, lua_State *L ) + { + if( NOTESKIN->DoesNoteSkinExist(SArg(1)) ) + p->m_sNoteSkin = SArg(1); + return 0; + } + + // Speed Mods + static int GetCMod( T *p, lua_State *L ) + { + if( p->m_fTimeSpacing ) + lua_pushnumber( L, p->m_fTimeSpacing ); + else + lua_pushnil(L); + return 1; + } + static int GetXMod( T *p, lua_State *L ) + { + if( !p->m_fTimeSpacing ) + lua_pushnumber( L, p->m_fScrollSpeed ); + else + lua_pushnil(L); + return 1; + } + + // Accel + DEFINE_METHOD( GetBoost, m_fAccels[PlayerOptions::ACCEL_BOOST] ) + DEFINE_METHOD( GetBrake, m_fAccels[PlayerOptions::ACCEL_BRAKE] ) + DEFINE_METHOD( GetWave, m_fAccels[PlayerOptions::ACCEL_WAVE] ) + DEFINE_METHOD( GetExpand, m_fAccels[PlayerOptions::ACCEL_EXPAND] ) + DEFINE_METHOD( GetBoomerang, m_fAccels[PlayerOptions::ACCEL_BOOMERANG] ) + + // Effect + DEFINE_METHOD( GetDrunk, m_fEffects[PlayerOptions::EFFECT_DRUNK] ) // MoonGyuHyuk + DEFINE_METHOD( GetDizzy, m_fEffects[PlayerOptions::EFFECT_DIZZY] ) + DEFINE_METHOD( GetConfusion, m_fEffects[PlayerOptions::EFFECT_CONFUSION] ) + DEFINE_METHOD( GetMini, m_fEffects[PlayerOptions::EFFECT_MINI] ) + DEFINE_METHOD( GetTiny, m_fEffects[PlayerOptions::EFFECT_TINY] ) + DEFINE_METHOD( GetFlip, m_fEffects[PlayerOptions::EFFECT_FLIP] ) + DEFINE_METHOD( GetInvert, m_fEffects[PlayerOptions::EFFECT_INVERT] ) + DEFINE_METHOD( GetTornado, m_fEffects[PlayerOptions::EFFECT_TORNADO] ) + DEFINE_METHOD( GetTipsy, m_fEffects[PlayerOptions::EFFECT_TIPSY] ) + DEFINE_METHOD( GetBumpy, m_fEffects[PlayerOptions::EFFECT_BUMPY] ) + DEFINE_METHOD( GetBeat, m_fEffects[PlayerOptions::EFFECT_BEAT] ) + DEFINE_METHOD( GetXMode, m_fEffects[PlayerOptions::EFFECT_XMODE] ) + DEFINE_METHOD( GetTwirl, m_fEffects[PlayerOptions::EFFECT_TWIRL] ) + DEFINE_METHOD( GetRoll, m_fEffects[PlayerOptions::EFFECT_ROLL] ) + + // Appearance + DEFINE_METHOD( GetHidden, m_fAppearances[PlayerOptions::APPEARANCE_HIDDEN] ) + DEFINE_METHOD( GetHiddenOffset, m_fAppearances[PlayerOptions::APPEARANCE_HIDDEN_OFFSET] ) + DEFINE_METHOD( GetSudden, m_fAppearances[PlayerOptions::APPEARANCE_SUDDEN] ) + DEFINE_METHOD( GetSuddenOffset, m_fAppearances[PlayerOptions::APPEARANCE_SUDDEN_OFFSET] ) + DEFINE_METHOD( GetStealth, m_fAppearances[PlayerOptions::APPEARANCE_STEALTH] ) + DEFINE_METHOD( GetBlink, m_fAppearances[PlayerOptions::APPEARANCE_BLINK] ) + DEFINE_METHOD( GetRandomVanish, m_fAppearances[PlayerOptions::APPEARANCE_RANDOMVANISH] ) + + // Scroll + DEFINE_METHOD( GetReverse, m_fScrolls[PlayerOptions::SCROLL_REVERSE] ) + DEFINE_METHOD( UsingReverse, m_fScrolls[PlayerOptions::SCROLL_REVERSE] == 1 ) + static int GetReversePercentForColumn( T *p, lua_State *L ) + { + // todo: make sure IArg is within boundaries -aj + lua_pushnumber( L, p->GetReversePercentForColumn(IArg(1)) ); + return 1; + } + DEFINE_METHOD( GetSplit, m_fScrolls[PlayerOptions::SCROLL_SPLIT] ) + DEFINE_METHOD( GetAlternate, m_fScrolls[PlayerOptions::SCROLL_ALTERNATE] ) + DEFINE_METHOD( GetCross, m_fScrolls[PlayerOptions::SCROLL_CROSS] ) + DEFINE_METHOD( GetCentered, m_fScrolls[PlayerOptions::SCROLL_CENTERED] ) + + // Turns + DEFINE_METHOD( GetMirror, m_bTurns[PlayerOptions::TURN_MIRROR] ) + DEFINE_METHOD( GetLeft, m_bTurns[PlayerOptions::TURN_LEFT] ) + DEFINE_METHOD( GetRight, m_bTurns[PlayerOptions::TURN_RIGHT] ) + DEFINE_METHOD( GetShuffle, m_bTurns[PlayerOptions::TURN_SHUFFLE] ) + DEFINE_METHOD( GetSoftShuffle, m_bTurns[PlayerOptions::TURN_SOFT_SHUFFLE] ) + DEFINE_METHOD( GetSuperShuffle, m_bTurns[PlayerOptions::TURN_SUPER_SHUFFLE] ) + + // Transform + DEFINE_METHOD( GetNoHolds, m_bTransforms[PlayerOptions::TRANSFORM_NOHOLDS] ) + DEFINE_METHOD( GetNoRolls, m_bTransforms[PlayerOptions::TRANSFORM_NOROLLS] ) + DEFINE_METHOD( GetNoMines, m_bTransforms[PlayerOptions::TRANSFORM_NOMINES] ) + DEFINE_METHOD( GetLittle, m_bTransforms[PlayerOptions::TRANSFORM_LITTLE] ) + DEFINE_METHOD( GetWide, m_bTransforms[PlayerOptions::TRANSFORM_WIDE] ) + DEFINE_METHOD( GetBig, m_bTransforms[PlayerOptions::TRANSFORM_BIG] ) + DEFINE_METHOD( GetQuick, m_bTransforms[PlayerOptions::TRANSFORM_QUICK] ) + DEFINE_METHOD( GetBMRize, m_bTransforms[PlayerOptions::TRANSFORM_BMRIZE] ) + DEFINE_METHOD( GetSkippy, m_bTransforms[PlayerOptions::TRANSFORM_SKIPPY] ) + DEFINE_METHOD( GetMines, m_bTransforms[PlayerOptions::TRANSFORM_MINES] ) + DEFINE_METHOD( GetAttackMines, m_bTransforms[PlayerOptions::TRANSFORM_ATTACKMINES] ) + DEFINE_METHOD( GetEcho, m_bTransforms[PlayerOptions::TRANSFORM_ECHO] ) + DEFINE_METHOD( GetStomp, m_bTransforms[PlayerOptions::TRANSFORM_STOMP] ) + DEFINE_METHOD( GetPlanted, m_bTransforms[PlayerOptions::TRANSFORM_PLANTED] ) + DEFINE_METHOD( GetFloored, m_bTransforms[PlayerOptions::TRANSFORM_FLOORED] ) + DEFINE_METHOD( GetTwister, m_bTransforms[PlayerOptions::TRANSFORM_TWISTER] ) + DEFINE_METHOD( GetHoldRolls, m_bTransforms[PlayerOptions::TRANSFORM_HOLDROLLS] ) + DEFINE_METHOD( GetNoJumps, m_bTransforms[PlayerOptions::TRANSFORM_NOJUMPS] ) + DEFINE_METHOD( GetNoHands, m_bTransforms[PlayerOptions::TRANSFORM_NOHANDS] ) + DEFINE_METHOD( GetNoLifts, m_bTransforms[PlayerOptions::TRANSFORM_NOLIFTS] ) + DEFINE_METHOD( GetNoFakes, m_bTransforms[PlayerOptions::TRANSFORM_NOFAKES] ) + DEFINE_METHOD( GetNoQuads, m_bTransforms[PlayerOptions::TRANSFORM_NOQUADS] ) + DEFINE_METHOD( GetNoStretch, m_bTransforms[PlayerOptions::TRANSFORM_NOSTRETCH] ) + + // Others + DEFINE_METHOD( GetDark, m_fDark ) + DEFINE_METHOD( GetBlind, m_fBlind ) + DEFINE_METHOD( GetCover, m_fCover ) + DEFINE_METHOD( GetRandomAttacks, m_fRandAttack ) + DEFINE_METHOD( GetSongAttacks, m_fSongAttack ) + DEFINE_METHOD( GetSkew, m_fSkew ) + DEFINE_METHOD( GetPassmark, m_fPassmark ) + DEFINE_METHOD( GetRandomSpeed, m_fRandomSpeed ) LunaPlayerOptions() { + ADD_METHOD( GetDark ); + // SetDark + ADD_METHOD( GetBlind ); + // SetBlind + ADD_METHOD( GetCover ); + // SetCover + // GetMuteOnError, SetMuteOnError ADD_METHOD( GetNoteSkin ); + ADD_METHOD( SetNoteSkin ); + // GetPerspectiveTilt, SetPerspectiveTilt + ADD_METHOD( GetPassmark ); + // SetPassmark + ADD_METHOD( GetRandomAttacks ); + // SetRandomAttacks + ADD_METHOD( GetRandomSpeed ); + // SetRandomSpeed + ADD_METHOD( GetSkew ); + // SetSkew + ADD_METHOD( GetSongAttacks ); + // SetSongAttacks + ADD_METHOD( GetCMod ); + ADD_METHOD( GetXMod ); + + // Accel + ADD_METHOD( GetBoost ); + ADD_METHOD( GetBrake ); + ADD_METHOD( GetWave ); + ADD_METHOD( GetExpand ); + ADD_METHOD( GetBoomerang ); + + // Effect + ADD_METHOD( GetDrunk ); + ADD_METHOD( GetDizzy ); + ADD_METHOD( GetConfusion ); + ADD_METHOD( GetMini ); + ADD_METHOD( GetTiny ); + ADD_METHOD( GetFlip ); + ADD_METHOD( GetInvert ); + ADD_METHOD( GetTornado ); + ADD_METHOD( GetTipsy ); + ADD_METHOD( GetBumpy ); + ADD_METHOD( GetBeat ); + ADD_METHOD( GetXMode ); + ADD_METHOD( GetTwirl ); + ADD_METHOD( GetRoll ); + + // Appearance + ADD_METHOD( GetHidden ); + ADD_METHOD( GetHiddenOffset ); + ADD_METHOD( GetSudden ); + ADD_METHOD( GetSuddenOffset ); + ADD_METHOD( GetStealth ); + ADD_METHOD( GetBlink ); + ADD_METHOD( GetRandomVanish ); + + // Scroll + ADD_METHOD( GetReverse ); + ADD_METHOD( UsingReverse ); + ADD_METHOD( GetReversePercentForColumn ); + ADD_METHOD( GetSplit ); + ADD_METHOD( GetAlternate ); + ADD_METHOD( GetCross ); + ADD_METHOD( GetCentered ); + + // Turns + ADD_METHOD( GetMirror ); + ADD_METHOD( GetLeft ); + ADD_METHOD( GetRight ); + ADD_METHOD( GetShuffle ); + ADD_METHOD( GetSoftShuffle ); + ADD_METHOD( GetSuperShuffle ); + + // Transform + ADD_METHOD( GetNoHolds ); + ADD_METHOD( GetNoRolls ); + ADD_METHOD( GetNoMines ); + ADD_METHOD( GetLittle ); + ADD_METHOD( GetWide ); + ADD_METHOD( GetBig ); + ADD_METHOD( GetQuick ); + ADD_METHOD( GetBMRize ); + ADD_METHOD( GetSkippy ); + ADD_METHOD( GetMines ); + ADD_METHOD( GetAttackMines ); + ADD_METHOD( GetEcho ); + ADD_METHOD( GetStomp ); + ADD_METHOD( GetPlanted ); + ADD_METHOD( GetFloored ); + ADD_METHOD( GetTwister ); + ADD_METHOD( GetHoldRolls ); + ADD_METHOD( GetNoJumps ); + ADD_METHOD( GetNoHands ); + ADD_METHOD( GetNoLifts ); + ADD_METHOD( GetNoFakes ); + ADD_METHOD( GetNoQuads ); + ADD_METHOD( GetNoStretch ); } }; diff --git a/src/PlayerOptions.h b/src/PlayerOptions.h index a95523a7a5..8a66d1d758 100644 --- a/src/PlayerOptions.h +++ b/src/PlayerOptions.h @@ -162,9 +162,9 @@ public: /* All floats have a corresponding speed setting, which determines how fast * PlayerOptions::Approach approaches. */ bool m_bSetScrollSpeed; // true if the scroll speed was set by FromString - float m_fTimeSpacing, m_SpeedfTimeSpacing; // instead of Beat spacing - float m_fScrollSpeed, m_SpeedfScrollSpeed; // used if !m_bTimeSpacing - float m_fScrollBPM, m_SpeedfScrollBPM; // used if m_bTimeSpacing + float m_fTimeSpacing, m_SpeedfTimeSpacing; // instead of Beat spacing (CMods, mMods) + float m_fScrollSpeed, m_SpeedfScrollSpeed; // used if !m_bTimeSpacing (xMods) + float m_fScrollBPM, m_SpeedfScrollBPM; // used if m_bTimeSpacing (CMod) float m_fAccels[NUM_ACCELS], m_SpeedfAccels[NUM_ACCELS]; float m_fEffects[NUM_EFFECTS], m_SpeedfEffects[NUM_EFFECTS]; float m_fAppearances[NUM_APPEARANCES],m_SpeedfAppearances[NUM_APPEARANCES]; @@ -189,7 +189,7 @@ public: bool m_bTransforms[NUM_TRANSFORMS]; bool m_bMuteOnError; /** @brief How can the Player fail a song? */ - enum FailType { + enum FailType { FAIL_IMMEDIATE=0, /**< fail immediately when life touches 0 */ FAIL_IMMEDIATE_CONTINUE, /**< Same as above, but allow playing the rest of the song */ FAIL_AT_END, /**< fail if life is at 0 when the song ends */ diff --git a/src/PlayerState.cpp b/src/PlayerState.cpp index a18e85c3e7..070e96c7be 100644 --- a/src/PlayerState.cpp +++ b/src/PlayerState.cpp @@ -229,6 +229,12 @@ public: LuaHelpers::Push( L, s ); return 1; } + static int GetCurrentPlayerOptions( T* p, lua_State *L ) + { + PlayerOptions po = p->m_PlayerOptions.GetCurrent(); + po.PushSelf(L); + return 1; + } DEFINE_METHOD( GetHealthState, m_HealthState ); LunaPlayerState() @@ -239,6 +245,7 @@ public: ADD_METHOD( GetPlayerOptions ); ADD_METHOD( GetPlayerOptionsArray ); ADD_METHOD( GetPlayerOptionsString ); + ADD_METHOD( GetCurrentPlayerOptions ); ADD_METHOD( GetHealthState ); } }; diff --git a/src/ProductInfo.h b/src/ProductInfo.h index be5d7e73c0..8916d00401 100644 --- a/src/ProductInfo.h +++ b/src/ProductInfo.h @@ -35,7 +35,7 @@ * */ #ifndef PRODUCT_VER_BARE -#define PRODUCT_VER_BARE v1.2.3 +#define PRODUCT_VER_BARE v1.2.5 #endif /** diff --git a/src/ProductInfo.inc b/src/ProductInfo.inc index e47653133d..29ee485bd9 100644 --- a/src/ProductInfo.inc +++ b/src/ProductInfo.inc @@ -5,7 +5,7 @@ ; see ProductInfo.h for use descriptions !define PRODUCT_ID "sm-ssc" -!define PRODUCT_VER "v1.2.3" +!define PRODUCT_VER "v1.2.5" !define PRODUCT_DISPLAY "${PRODUCT_ID} ${PRODUCT_VER}" !define PRODUCT_BITMAP "ssc" diff --git a/src/Profile.h b/src/Profile.h index 1a4d022319..1115192911 100644 --- a/src/Profile.h +++ b/src/Profile.h @@ -67,9 +67,50 @@ class Game; class Profile { public: - Profile() + /** + * @brief Set up the Profile with default values. + * + * Note: there are probably a lot of variables. */ + Profile(): m_sDisplayName(""), m_sCharacterID(""), + m_sLastUsedHighScoreName(""), m_iWeightPounds(0), + m_sGuid(MakeGuid()), m_sDefaultModifiers(), + m_SortOrder(SortOrder_Invalid), + m_LastDifficulty(Difficulty_Invalid), + m_LastCourseDifficulty(Difficulty_Invalid), + m_LastStepsType(StepsType_Invalid), m_lastSong(), + m_lastCourse(), m_iTotalSessions(0), + m_iTotalSessionSeconds(0), m_iTotalGameplaySeconds(0), + m_fTotalCaloriesBurned(0), m_GoalType(GoalType_Calories), + m_iGoalCalories(0), m_iGoalSeconds(0), m_iTotalDancePoints(0), + m_iNumExtraStagesPassed(0), m_iNumExtraStagesFailed(0), + m_iNumToasties(0), m_iTotalTapsAndHolds(0), m_iTotalJumps(0), + m_iTotalHolds(0), m_iTotalRolls(0), m_iTotalMines(0), + m_iTotalHands(0), m_iTotalLifts(0), m_bNewProfile(false), + m_UnlockedEntryIDs(), m_sLastPlayedMachineGuid(""), + m_LastPlayedDate(),m_iNumSongsPlayedByStyle(), + m_iNumTotalSongsPlayed(0), m_UserData(), m_SongHighScores(), + m_CourseHighScores(), m_vScreenshots(), + m_mapDayToCaloriesBurned() { - InitAll(); + m_lastSong.Unset(); + m_lastCourse.Unset(); + + m_LastPlayedDate.Init(); + + FOREACH_ENUM( PlayMode, i ) + m_iNumSongsPlayedByPlayMode[i] = 0; + FOREACH_ENUM( Difficulty, i ) + m_iNumSongsPlayedByDifficulty[i] = 0; + for( int i=0; i m_UnlockedEntryIDs; /** * @brief Which machine did we play on last, based on the Guid? @@ -170,11 +213,13 @@ public: struct HighScoresForASteps { HighScoreList hsl; + HighScoresForASteps(): hsl() {} }; struct HighScoresForASong { std::map m_StepsHighScores; int GetNumTimesPlayed() const; + HighScoresForASong(): m_StepsHighScores() {} }; std::map m_SongHighScores; @@ -196,11 +241,13 @@ public: struct HighScoresForATrail { HighScoreList hsl; + HighScoresForATrail(): hsl() {} }; struct HighScoresForACourse { std::map m_TrailHighScores; int GetNumTimesPlayed() const; + HighScoresForACourse(): m_TrailHighScores() {} }; std::map m_CourseHighScores; @@ -240,7 +287,7 @@ public: * insert some garbage entries into the map. */ struct Calories { - Calories() { fCals = 0; } + Calories(): fCals(0) {} float fCals; }; map m_mapDayToCaloriesBurned; diff --git a/src/ProfileManager.cpp b/src/ProfileManager.cpp index aa103b4e6b..041803238c 100644 --- a/src/ProfileManager.cpp +++ b/src/ProfileManager.cpp @@ -97,6 +97,7 @@ void ProfileManager::Init() m_bLastLoadWasTamperedOrCorrupt[p] = false; m_bLastLoadWasFromLastGood[p] = false; m_bNeedToBackUpLastLoad[p] = false; + m_bNewProfile[p] = false; } LoadMachineProfile(); @@ -222,6 +223,7 @@ bool ProfileManager::LoadProfileFromMemoryCard( PlayerNumber pn, bool bLoadEdits vector asDirsToTry; GetMemoryCardProfileDirectoriesToTry( asDirsToTry ); + m_bNewProfile[pn] = true; for( unsigned i = 0; i < asDirsToTry.size(); ++i ) { @@ -239,6 +241,7 @@ bool ProfileManager::LoadProfileFromMemoryCard( PlayerNumber pn, bool bLoadEdits ProfileLoadResult res = LoadProfile( pn, sDir, true ); if( res == ProfileLoadResult_Success ) { + m_bNewProfile[pn] = false; /* If importing, store the directory we imported from, for display purposes. */ if( i > 0 ) m_sProfileDirImportedFrom[pn] = asDirsToTry[i]; @@ -246,7 +249,10 @@ bool ProfileManager::LoadProfileFromMemoryCard( PlayerNumber pn, bool bLoadEdits } if( res == ProfileLoadResult_FailedTampered ) + { + m_bNewProfile[pn] = false; break; + } } /* If we imported a profile fallback directory, change the memory card @@ -544,6 +550,11 @@ bool ProfileManager::ProfileWasLoadedFromMemoryCard( PlayerNumber pn ) const return !m_sProfileDir[pn].empty() && m_bWasLoadedFromMemoryCard[pn]; } +bool ProfileManager::ProfileFromMemoryCardIsNew( PlayerNumber pn ) const +{ + return GetProfile(pn) && m_bWasLoadedFromMemoryCard[pn] && m_bNewProfile[pn]; +} + bool ProfileManager::LastLoadWasTamperedOrCorrupt( PlayerNumber pn ) const { return !m_sProfileDir[pn].empty() && m_bLastLoadWasTamperedOrCorrupt[pn]; @@ -813,7 +824,7 @@ public: if( pProfile ) pProfile->PushSelf(L); else - lua_pushnil(L ); + lua_pushnil(L); return 1; } static int GetLocalProfileFromIndex( T* p, lua_State *L ) { Profile *pProfile = p->GetLocalProfileFromIndex(IArg(1)); ASSERT(pProfile); pProfile->PushSelf(L); return 1; } diff --git a/src/ProfileManager.h b/src/ProfileManager.h index e083d13636..6cb5632388 100644 --- a/src/ProfileManager.h +++ b/src/ProfileManager.h @@ -77,6 +77,7 @@ public: RString GetPlayerName( PlayerNumber pn ) const; bool ProfileWasLoadedFromMemoryCard( PlayerNumber pn ) const; + bool ProfileFromMemoryCardIsNew( PlayerNumber pn ) const; bool LastLoadWasTamperedOrCorrupt( PlayerNumber pn ) const; bool LastLoadWasFromLastGood( PlayerNumber pn ) const; @@ -117,6 +118,7 @@ private: bool m_bLastLoadWasTamperedOrCorrupt[NUM_PLAYERS]; // true if Stats.xml was present, but failed to load (probably because of a signature failure) bool m_bLastLoadWasFromLastGood[NUM_PLAYERS]; // if true, then m_bLastLoadWasTamperedOrCorrupt is also true mutable bool m_bNeedToBackUpLastLoad[NUM_PLAYERS]; // if true, back up profile on next save + bool m_bNewProfile[NUM_PLAYERS]; Profile *m_pMemoryCardProfile[NUM_PLAYERS]; // holds Profile for the currently inserted card Profile *m_pMachineProfile; diff --git a/src/RageBitmapTexture.cpp b/src/RageBitmapTexture.cpp index 0579ebd56a..e6743722c2 100644 --- a/src/RageBitmapTexture.cpp +++ b/src/RageBitmapTexture.cpp @@ -31,7 +31,7 @@ static void GetResolutionFromFileName( RString sPath, int &iWidth, int &iHeight } RageBitmapTexture::RageBitmapTexture( RageTextureID name ) : - RageTexture( name ) + RageTexture( name ), m_uTexHandle(0) { Create(); } diff --git a/src/RageDisplay.cpp b/src/RageDisplay.cpp index 4519a623be..273d68a4c8 100644 --- a/src/RageDisplay.cpp +++ b/src/RageDisplay.cpp @@ -264,7 +264,7 @@ class MatrixStack vector stack; public: - MatrixStack() + MatrixStack(): stack() { stack.resize(1); LoadIdentity(); diff --git a/src/RageDisplay_D3D.cpp b/src/RageDisplay_D3D.cpp index b977eb03b1..8dfb6974fd 100644 --- a/src/RageDisplay_D3D.cpp +++ b/src/RageDisplay_D3D.cpp @@ -17,16 +17,11 @@ #include #include -#if !defined(XBOX) #include "archutils/Win32/GraphicsWindow.h" -#else -#include "archutils/Xbox/GraphicsWindow.h" -#include "archutils/Xbox/VirtualMemory.h" -#endif // Static libraries // load Windows D3D8 dynamically -#if defined(_MSC_VER) && !defined(_XBOX) +#if defined(_MSC_VER) #pragma comment(lib, "D3dx8.lib") #pragma comment(lib, "Dxerr8.lib") #endif @@ -42,9 +37,7 @@ RString GetErrorString( HRESULT hr ) } // Globals -#if !defined(XBOX) HMODULE g_D3D8_Module = NULL; -#endif LPDIRECT3D8 g_pd3d = NULL; LPDIRECT3DDEVICE8 g_pd3dDevice = NULL; D3DCAPS8 g_DeviceCaps; @@ -84,12 +77,8 @@ static void SetPalette( unsigned TexResource ) } // Load it. -#if !defined(XBOX) TexturePalette& pal = g_TexResourceToTexturePalette[TexResource]; g_pd3dDevice->SetPaletteEntries( iPalIndex, pal.p ); -#else - ASSERT(0); -#endif g_TexResourceToPaletteIndex[TexResource] = iPalIndex; } @@ -106,11 +95,7 @@ static void SetPalette( unsigned TexResource ) break; } -#if !defined(XBOX) g_pd3dDevice->SetCurrentTexturePalette( iPalIndex ); -#else - ASSERT(0); -#endif } #define D3DFVF_RageSpriteVertex (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_DIFFUSE|D3DFVF_TEX1) @@ -178,11 +163,7 @@ static D3DFORMAT D3DFORMATS[NUM_PixelFormat] = D3DFMT_A4R4G4B4, D3DFMT_A1R5G5B5, D3DFMT_X1R5G5B5, -#if defined(XBOX) - D3DFMT_UNKNOWN, // no RGB -#else D3DFMT_R8G8B8, -#endif D3DFMT_P8, D3DFMT_UNKNOWN, // no BGR D3DFMT_UNKNOWN, // no ABGR @@ -214,9 +195,7 @@ RString RageDisplay_D3D::Init( const VideoModeParams &p, bool bAllowUnaccelerate typedef IDirect3D8 * (WINAPI * Direct3DCreate8_t) (UINT SDKVersion); Direct3DCreate8_t pDirect3DCreate8; -#if defined(XBOX) - pDirect3DCreate8 = Direct3DCreate8; -#else + g_D3D8_Module = LoadLibrary("D3D8.dll"); if(!g_D3D8_Module) return D3D_NOT_INSTALLED.GetValue() + "\n" + D3D_URL; @@ -227,7 +206,6 @@ RString RageDisplay_D3D::Init( const VideoModeParams &p, bool bAllowUnaccelerate LOG->Trace( "Direct3DCreate8 not found" ); return D3D_NOT_INSTALLED.GetValue(); } -#endif g_pd3d = pDirect3DCreate8( D3D_SDK_VERSION ); if(!g_pd3d) @@ -294,13 +272,11 @@ RageDisplay_D3D::~RageDisplay_D3D() /* Even after we call Release(), D3D may still affect our window. It seems * to subclass the window, and never release it. Free the DLL after * destroying the window. */ -#if !defined(XBOX) if( g_D3D8_Module ) { FreeLibrary( g_D3D8_Module ); g_D3D8_Module = NULL; } -#endif } void RageDisplay_D3D::GetDisplayResolutions( DisplayResolutions &out ) const @@ -334,9 +310,7 @@ D3DFORMAT FindBackBufferType(bool bWindowed, int iBPP) } if( iBPP == 32 || bWindowed ) { -#if !defined(XBOX) vBackBufferFormats.push_back( D3DFMT_R8G8B8 ); -#endif vBackBufferFormats.push_back( D3DFMT_X8R8G8B8 ); vBackBufferFormats.push_back( D3DFMT_A8R8G8B8 ); } @@ -383,13 +357,8 @@ RString SetD3DParams( bool &bNewDeviceOut ) HRESULT hr = g_pd3d->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, -#if !defined(XBOX) GraphicsWindow::GetHwnd(), D3DCREATE_SOFTWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED, -#else - NULL, - D3DCREATE_HARDWARE_VERTEXPROCESSING, -#endif &g_d3dpp, &g_pd3dDevice ); if( FAILED(hr) ) @@ -506,11 +475,7 @@ static void SetPresentParametersFromVideoModeParams( const VideoModeParams &p, D pD3Dpp->BackBufferCount = 1; pD3Dpp->MultiSampleType = D3DMULTISAMPLE_NONE; pD3Dpp->SwapEffect = D3DSWAPEFFECT_DISCARD; -#if !defined(XBOX) pD3Dpp->hDeviceWindow = GraphicsWindow::GetHwnd(); -#else - pD3Dpp->hDeviceWindow = NULL; -#endif pD3Dpp->Windowed = p.windowed; pD3Dpp->EnableAutoDepthStencil = TRUE; pD3Dpp->AutoDepthStencilFormat = D3DFMT_D16; @@ -520,25 +485,9 @@ static void SetPresentParametersFromVideoModeParams( const VideoModeParams &p, D else pD3Dpp->FullScreen_PresentationInterval = p.vsync ? D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE; -#if !defined(XBOX) pD3Dpp->FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; if( !p.windowed && p.rate != REFRESH_DEFAULT ) pD3Dpp->FullScreen_RefreshRateInHz = p.rate; -#else - if( XGetVideoStandard() == XC_VIDEO_STANDARD_PAL_I ) - { - // Get supported video flags. - DWORD VideoFlags = XGetVideoFlags(); - - // Set pal60 if available. - if( VideoFlags & XC_VIDEO_FLAGS_PAL_60Hz ) - pD3Dpp->FullScreen_RefreshRateInHz = 60; - else - pD3Dpp->FullScreen_RefreshRateInHz = 50; - } - else - pD3Dpp->FullScreen_RefreshRateInHz = 60; -#endif pD3Dpp->Flags = 0; @@ -556,9 +505,6 @@ static void SetPresentParametersFromVideoModeParams( const VideoModeParams &p, D RString RageDisplay_D3D::TryVideoMode( const VideoModeParams &_p, bool &bNewDeviceOut ) { VideoModeParams p = _p; -#if defined(XBOX) - p.windowed = false; -#endif LOG->Warn( "RageDisplay_D3D::TryVideoMode( %d, %d, %d, %d, %d, %d )", p.windowed, p.width, p.height, p.bpp, p.rate, p.vsync ); if( FindBackBufferType( p.windowed, p.bpp ) == D3DFMT_UNKNOWN ) // no possible back buffer formats @@ -571,11 +517,6 @@ RString RageDisplay_D3D::TryVideoMode( const VideoModeParams &_p, bool &bNewDevi SetPresentParametersFromVideoModeParams( p, &g_d3dpp ); -#if defined(XBOX) - if( D3D__pDevice ) - g_pd3dDevice = D3D__pDevice; -#endif - // Display the window immediately, so we don't display the desktop ... while( 1 ) { @@ -612,14 +553,6 @@ void RageDisplay_D3D::ResolutionChanged() { //LOG->Warn( "RageDisplay_D3D::ResolutionChanged" ); -#if defined(XBOX) - VideoModeParams p = GetActualVideoModeParams(); - D3DVIEWPORT8 viewData = { 0, 0, p.width, p.height, 0.f, 1.f }; - g_pd3dDevice->SetViewport( &viewData ); - g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, - D3DCOLOR_XRGB(0,0,0), 1.0f, 0x00000000 ); -#endif - RageDisplay::ResolutionChanged(); } @@ -632,7 +565,6 @@ bool RageDisplay_D3D::BeginFrame() { GraphicsWindow::Update(); -#if !defined(XBOX) switch( g_pd3dDevice->TestCooperativeLevel() ) { case D3DERR_DEVICELOST: @@ -647,7 +579,6 @@ bool RageDisplay_D3D::BeginFrame() break; } } -#endif g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,0), 1.0f, 0x00000000 ); @@ -670,16 +601,6 @@ void RageDisplay_D3D::EndFrame() bool RageDisplay_D3D::SupportsTextureFormat( PixelFormat pixfmt, bool realtime ) { -#if defined(XBOX) - /* Lazy... Xbox handles paletted textures completely differently than - * regular D3D. It's not worth writing a bunch of code to handle it. - * Paletted textures result in worse cache efficiency anyway (see "Xbox - * Palettized Texture Performance" in XDK). So, just force 32bit ARGB textures. - * -Chris - * This is also needed for XGSwizzleRect(). */ - return pixfmt == PixelFormat_RGBA8; -#endif - // Some cards (Savage) don't support alpha in palettes. // Don't allow paletted textures if this is the case. if( pixfmt == PixelFormat_PAL && !(g_DeviceCaps.TextureCaps & D3DPTEXTURECAPS_ALPHAPALETTE) ) @@ -707,9 +628,6 @@ bool RageDisplay_D3D::SupportsThreadedRendering() RageSurface* RageDisplay_D3D::CreateScreenshot() { -#if defined(XBOX) - return NULL; -#else // Get the back buffer. IDirect3DSurface8* pSurface; g_pd3dDevice->GetBackBuffer( 0, D3DBACKBUFFER_TYPE_MONO, &pSurface ); @@ -756,7 +674,6 @@ RageSurface* RageDisplay_D3D::CreateScreenshot() pCopy->Release(); return SurfaceCopy; -#endif } VideoModeParams RageDisplay_D3D::GetActualVideoModeParams() const @@ -1429,15 +1346,6 @@ unsigned RageDisplay_D3D::CreateTexture( IDirect3DTexture8* pTex; hr = g_pd3dDevice->CreateTexture( power_of_two(img->w), power_of_two(img->h), 1, 0, D3DFORMATS[pixfmt], D3DPOOL_MANAGED, &pTex ); -#if defined(XBOX) - while(hr == E_OUTOFMEMORY) - { - if(!vmem_Manager.DecommitLRU()) - break; - hr = g_pd3dDevice->CreateTexture( power_of_two(img->w), power_of_two(img->h), 1, 0, D3DFORMATS[pixfmt], D3DPOOL_MANAGED, &pTex ); - } -#endif - if( FAILED(hr) ) RageException::Throw( "CreateTexture(%i,%i,%s) failed: %s", img->w, img->h, PixelFormatToString(pixfmt).c_str(), GetErrorString(hr).c_str() ); @@ -1490,27 +1398,6 @@ void RageDisplay_D3D::UpdateTexture( ASSERT( yoffset+height <= int(desc.Height) ); // Copy bits -#if defined(XBOX) - RageSurface *Texture = CreateSurface( width, height, 32, - Swap32BE( 0x0000FF00 ), - Swap32BE( 0x00FF0000 ), - Swap32BE( 0xFF000000 ), - Swap32BE( 0x000000FF ) ); - - RageSurfaceUtils::Blit( img, Texture, width, height ); - - // Xbox textures need to be swizzled - XGSwizzleRect( - Texture->pixels, // pSource, - Texture->pitch, // Pitch, - NULL, // pRect, - lr.pBits, // pDest, - Texture->w, // Width, - Texture->h, // Height, - NULL, // pPoint, - Texture->format->BytesPerPixel ); //BytesPerPixel - delete Texture; -#else int texpixfmt; for(texpixfmt = 0; texpixfmt < NUM_PixelFormat; ++texpixfmt) if(D3DFORMATS[texpixfmt] == desc.Format) break; @@ -1521,7 +1408,6 @@ void RageDisplay_D3D::UpdateTexture( RageSurfaceUtils::Blit( img, Texture, width, height ); delete Texture; -#endif pTex->UnlockRect( 0 ); } diff --git a/src/RageFileDriverDeflate.cpp b/src/RageFileDriverDeflate.cpp index 45fff020bb..dbb839c1ab 100644 --- a/src/RageFileDriverDeflate.cpp +++ b/src/RageFileDriverDeflate.cpp @@ -6,9 +6,9 @@ #include "RageUtil.h" #include -#if defined(_WINDOWS) || defined(_XBOX) +#if defined(_WINDOWS) #include "zlib/zlib.h" -#if defined(_MSC_VER) && !defined(_XBOX) +#if defined(_MSC_VER) #pragma comment(lib, "zlib/zdll.lib") #endif #elif defined(MACOSX) diff --git a/src/RageFileDriverDirect.cpp b/src/RageFileDriverDirect.cpp index cfab22525f..2dfbee3f7d 100644 --- a/src/RageFileDriverDirect.cpp +++ b/src/RageFileDriverDirect.cpp @@ -16,9 +16,7 @@ #include #else #include "archutils/Win32/ErrorStrings.h" -#if !defined(_XBOX) #include -#endif // !defined(_XBOX) #include #endif // !defined(WIN32) @@ -66,6 +64,10 @@ private: */ bool m_bWriteFailed; bool WriteFailed() const { return !(m_iMode & RageFile::STREAMED) && m_bWriteFailed; } + + // unused + RageFileObjDirect& operator=(const RageFileObjDirect& rhs); + RageFileObjDirect(const RageFileObjDirect& rhs); }; diff --git a/src/RageFileDriverDirectHelpers.cpp b/src/RageFileDriverDirectHelpers.cpp index dd7a65631c..fd8aa8d048 100644 --- a/src/RageFileDriverDirectHelpers.cpp +++ b/src/RageFileDriverDirectHelpers.cpp @@ -12,57 +12,13 @@ #include #include #else -#if !defined(_XBOX) #include -#endif #include #endif -#if defined(_XBOX) -/* Wrappers for low-level file functions, to work around Xbox issues: */ -int DoMkdir( const RString &sPath, int perm ) -{ - return mkdir( DoPathReplace(sPath), perm ); -} - -int DoOpen( const RString &sPath, int flags, int perm ) -{ - return open( DoPathReplace(sPath), flags, perm ); -} - -int DoStat( const RString &sPath, struct stat *st ) -{ - return stat( DoPathReplace(sPath), st ); -} - -int DoRename( const RString &sOldPath, const RString &sNewPath ) -{ - return rename( DoPathReplace(sOldPath), DoPathReplace(sNewPath) ); -} - -int DoRemove( const RString &sPath ) -{ - return remove( DoPathReplace(sPath) ); -} - -int DoRmdir( const RString &sPath ) -{ - return rmdir( DoPathReplace(sPath) ); -} - -HANDLE DoFindFirstFile( const RString &sPath, WIN32_FIND_DATA *fd ) -{ - return FindFirstFile( DoPathReplace(sPath), fd ); -} - -#endif RString DoPathReplace(const RString &sPath) { RString TempPath = sPath; -#if defined(XBOX) - TempPath.Replace( "//", "\\" ); - TempPath.Replace( "/", "\\" ); -#endif return TempPath; } @@ -72,9 +28,9 @@ static bool WinMoveFileInternal( const RString &sOldPath, const RString &sNewPat { static bool Win9x = false; - /* Windows botches rename: it returns error if the file exists. In NT, + /* Windows botches rename: it returns error if the file exists. In NT, * we can use MoveFileEx( new, old, MOVEFILE_REPLACE_EXISTING ) (though I - * don't know if it has similar atomicity guarantees to rename). In + * don't know if it has similar atomicity guarantees to rename). In * 9x, we're screwed, so just delete any existing file (we aren't going * to be robust on 9x anyway). */ if( !Win9x ) @@ -92,7 +48,7 @@ static bool WinMoveFileInternal( const RString &sOldPath, const RString &sNewPat if( MoveFile( sOldPath, sNewPath ) ) return true; - + if( GetLastError() != ERROR_ALREADY_EXISTS ) return false; @@ -118,15 +74,15 @@ bool WinMoveFile( RString sOldPath, RString sNewPath ) /* mkdir -p. Doesn't fail if Path already exists and is a directory. */ bool CreateDirectories( RString Path ) { - /* XXX: handle "//foo/bar" paths in Windows */ + // XXX: handle "//foo/bar" paths in Windows vector parts; RString curpath; - /* If Path is absolute, add the initial slash ("ignore empty" will remove it). */ + // If Path is absolute, add the initial slash ("ignore empty" will remove it). if( Path.Left(1) == "/" ) curpath = "/"; - /* Ignore empty, so eg. "/foo/bar//baz" doesn't try to create "/foo/bar" twice. */ + // Ignore empty, so eg. "/foo/bar//baz" doesn't try to create "/foo/bar" twice. split( Path, "/", parts, true ); for(unsigned i = 0; i < parts.size(); ++i) @@ -174,7 +130,7 @@ bool CreateDirectories( RString Path ) WARN( ssprintf("Couldn't create %s: %s", curpath.c_str(), strerror(errno)) ); return false; } - + return true; } @@ -189,10 +145,10 @@ void DirectFilenameDB::SetRoot( RString root_ ) { root = root_; - /* "\abcd\" -> "/abcd/": */ + // "\abcd\" -> "/abcd/": root.Replace( "\\", "/" ); - /* "/abcd/" -> "/abcd": */ + // "/abcd/" -> "/abcd": if( root.Right(1) == "/" ) root.erase( root.size()-1, 1 ); } @@ -210,7 +166,7 @@ void DirectFilenameDB::CacheFile( const RString &sPath ) } while( !pFileSet->m_bFilled ) m_Mutex.Wait(); - + #if defined(WIN32) // There is almost surely a better way to do this WIN32_FIND_DATA fd; @@ -224,12 +180,12 @@ void DirectFilenameDB::CacheFile( const RString &sPath ) f.dir = !!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY); f.size = fd.nFileSizeLow; f.hash = fd.ftLastWriteTime.dwLowDateTime; - + pFileSet->files.insert( f ); FindClose( hFind ); #else File f( Basename(sPath) ); - + struct stat st; if( DoStat(root+sPath, &st) == -1 ) { @@ -237,7 +193,7 @@ void DirectFilenameDB::CacheFile( const RString &sPath ) // If it's a broken symlink, ignore it. Otherwise, warn. // Huh? WARN( ssprintf("File '%s' is gone! (%s)", - sPath.c_str(), strerror(iError)) ); + sPath.c_str(), strerror(iError)) ); } else { @@ -255,17 +211,10 @@ void DirectFilenameDB::PopulateFileSet( FileSet &fs, const RString &path ) { RString sPath = path; -#if defined(XBOX) - /* Xbox doesn't handle path names which end with ".", which are used when using an - * alternative song directory */ - if( sPath.size() > 0 && sPath.Right(1) == "." ) - sPath.erase( sPath.size() - 1 ); -#endif - - /* Resolve path cases (path/Path -> PATH/path). */ + // Resolve path cases (path/Path -> PATH/path). ResolvePath( sPath ); - fs.age.GetDeltaTime(); /* reset */ + fs.age.GetDeltaTime(); // reset fs.files.clear(); #if defined(WIN32) diff --git a/src/RageFileDriverDirectHelpers.h b/src/RageFileDriverDirectHelpers.h index 0a3dae233d..91b2f0d9d4 100644 --- a/src/RageFileDriverDirectHelpers.h +++ b/src/RageFileDriverDirectHelpers.h @@ -5,15 +5,6 @@ #include -#if defined(_XBOX) -int DoMkdir( const RString &sPath, int perm ); -int DoOpen( const RString &sPath, int flags, int perm ); -int DoStat( const RString &sPath, struct stat *st ); -int DoRename( const RString &sOldPath, const RString &sNewPath ); -int DoRemove( const RString &sPath ); -int DoRmdir( const RString &sPath ); -HANDLE DoFindFirstFile( const RString &sPath, WIN32_FIND_DATA *fd ); -#else #define DoOpen open #define DoStat stat #define DoMkdir mkdir @@ -21,7 +12,6 @@ HANDLE DoFindFirstFile( const RString &sPath, WIN32_FIND_DATA *fd ); #define DoRename rename #define DoRemove remove #define DoRmdir rmdir -#endif RString DoPathReplace( const RString &sPath ); #if defined(WIN32) diff --git a/src/RageFileManager.cpp b/src/RageFileManager.cpp index 49740eccbe..6219b6288c 100644 --- a/src/RageFileManager.cpp +++ b/src/RageFileManager.cpp @@ -12,7 +12,7 @@ #include -#if defined(WIN32) && !defined(XBOX) +#if defined(WIN32) #include #elif defined(UNIX) || defined(MACOSX) #include @@ -174,11 +174,7 @@ static RageFileDriverMountpoints *g_Mountpoints = NULL; static RString GetDirOfExecutable( RString argv0 ) { -#ifdef _XBOX - // ???: what if it's not running from D:\? - return "D:\\"; -#else - /* argv[0] can be wrong in most OS's; try to avoid using it. */ + // argv[0] can be wrong in most OS's; try to avoid using it. RString sPath; #if defined(WIN32) @@ -241,7 +237,6 @@ static RString GetDirOfExecutable( RString argv0 ) #endif } return sPath; -#endif } static void ChangeToDirOfExecutable( const RString &argv0 ) diff --git a/src/RageInputDevice.h b/src/RageInputDevice.h index 89084be39d..a81401e6a3 100644 --- a/src/RageInputDevice.h +++ b/src/RageInputDevice.h @@ -315,8 +315,9 @@ public: float level; // Mouse coordinates - unsigned x; - unsigned y; + //unsigned x; + //unsigned y; + int z; // mousewheel /* Whether this button is pressed. This is level with a threshold and * debouncing applied. */ @@ -324,12 +325,12 @@ public: RageTimer ts; - DeviceInput(): device(InputDevice_Invalid), button(DeviceButton_Invalid), level(0), x(0), y(0), bDown(false), ts(RageZeroTimer) { } - DeviceInput( InputDevice d, DeviceButton b, float l=0 ): device(d), button(b), level(l), x(0), y(0), bDown(l > 0.5f), ts(RageZeroTimer) { } + DeviceInput(): device(InputDevice_Invalid), button(DeviceButton_Invalid), level(0), z(0), bDown(false), ts(RageZeroTimer) { } + DeviceInput( InputDevice d, DeviceButton b, float l=0 ): device(d), button(b), level(l), z(0), bDown(l > 0.5f), ts(RageZeroTimer) { } DeviceInput( InputDevice d, DeviceButton b, float l, const RageTimer &t ): - device(d), button(b), level(l), x(0), y(0), bDown(level > 0.5f), ts(t) { } - DeviceInput( InputDevice d, DeviceButton b, const RageTimer &t, unsigned xPos=0, unsigned yPos=0 ): - device(d), button(b), level(0), x(xPos), y(yPos), bDown(false), ts(t) { } + device(d), button(b), level(l), z(0), bDown(level > 0.5f), ts(t) { } + DeviceInput( InputDevice d, DeviceButton b, const RageTimer &t, int zVal=0 ): + device(d), button(b), level(0), z(zVal), bDown(false), ts(t) { } bool operator==( const DeviceInput &other ) const { diff --git a/src/RageLog.cpp b/src/RageLog.cpp index 8684fc6502..5c517f209e 100644 --- a/src/RageLog.cpp +++ b/src/RageLog.cpp @@ -175,7 +175,7 @@ void RageLog::SetShowLogOutput( bool show ) { m_bShowLogOutput = show; -#if defined(WIN32) && !defined(_XBOX) +#if defined(WIN32) if( m_bShowLogOutput ) { // create a new console window and attach standard handles diff --git a/src/RageMath.cpp b/src/RageMath.cpp index 6edff8df4c..dd209974cc 100644 --- a/src/RageMath.cpp +++ b/src/RageMath.cpp @@ -112,7 +112,7 @@ RageMatrix RageMatrix::GetTranspose() const void RageMatrixMultiply( RageMatrix* pOut, const RageMatrix* pA, const RageMatrix* pB ) { -//#if defined(_WINDOWS) || defined(_XBOX) +//#if defined(_WINDOWS) // // <30 cycles for theirs versus >100 for ours. // D3DXMatrixMultiply( (D3DMATRIX*)pOut, (D3DMATRIX*)pA, (D3DMATRIX*)pB ); //#else diff --git a/src/RageSound.cpp b/src/RageSound.cpp index 258023c5ce..a89ff3018a 100644 --- a/src/RageSound.cpp +++ b/src/RageSound.cpp @@ -48,9 +48,10 @@ RageSoundLoadParams::RageSoundLoadParams(): m_bSupportRateChanging(false), m_bSupportPan(false) {} RageSound::RageSound(): - m_Mutex( "RageSound" ), m_pSource(NULL), m_iStreamFrame(0), + m_Mutex( "RageSound" ), m_pSource(NULL), + m_sFilePath(""), m_Param(), m_iStreamFrame(0), m_iStoppedSourceFrame(0), m_bPlaying(false), - m_bDeleteWhenFinished(false) + m_sError(""), m_bDeleteWhenFinished(false) { ASSERT( SOUNDMAN ); } diff --git a/src/RageSoundReader_MP3.cpp b/src/RageSoundReader_MP3.cpp index 281da9d38a..0cb9e5940e 100644 --- a/src/RageSoundReader_MP3.cpp +++ b/src/RageSoundReader_MP3.cpp @@ -9,24 +9,16 @@ #include #include -#if defined(_WINDOWS) || defined(_XBOX) || defined(MACOSX) +#if defined(_WINDOWS) || defined(MACOSX) #include "mad-0.15.1b/mad.h" #ifdef _MSC_VER -#ifdef _XBOX -#ifdef DEBUG -#pragma comment(lib, "mad-0.15.1b/xboxmad/debug/xboxmad.lib") -#else -#pragma comment(lib, "mad-0.15.1b/xboxmad/Release/xboxmad.lib") -#endif // DEBUG -#else #pragma comment(lib, "mad-0.15.1b/msvc++/Release/libmad.lib") -#endif // _XBOX #endif //_MSC_VER #else #include #endif // _WINDOWS -/* ID3 code from libid3: */ +// ID3 code from libid3: enum tagtype { TAGTYPE_NONE = 0, TAGTYPE_ID3V1, diff --git a/src/RageSoundReader_WAV.cpp b/src/RageSoundReader_WAV.cpp index 19263ce22e..0af1f10e30 100644 --- a/src/RageSoundReader_WAV.cpp +++ b/src/RageSoundReader_WAV.cpp @@ -374,7 +374,7 @@ public: int iFramesToCopy = (m_iBufferAvail-m_iBufferUsed) / iBytesPerFrame; iFramesToCopy = min( iFramesToCopy, (int) (iFrames-iGotFrames) ); int iSamplesToCopy = iFramesToCopy * iSamplesPerFrame; - int iBytesToCopy = iSamplesToCopy * sizeof(int16_t); + int iBytesToCopy = iSamplesToCopy * sizeof(float); memcpy( buf, m_pBuffer+m_iBufferUsed, iBytesToCopy ); m_iBufferUsed += iBytesToCopy; iGotFrames += iFramesToCopy; diff --git a/src/RageSurface_Load_JPEG.cpp b/src/RageSurface_Load_JPEG.cpp index 353921e740..3db75aa0e4 100644 --- a/src/RageSurface_Load_JPEG.cpp +++ b/src/RageSurface_Load_JPEG.cpp @@ -7,24 +7,15 @@ #include -// Don't let jpeglib.h define the boolean type on Xbox. -#if defined(_XBOX) -# define HAVE_BOOLEAN -#endif - #if defined(WIN32) -/* work around namespace bugs in win32/libjpeg: */ +// work around namespace bugs in win32/libjpeg: #define XMD_H #undef FAR #include "libjpeg/jpeglib.h" #include "libjpeg/jerror.h" #if defined(_MSC_VER) -#if !defined(XBOX) #pragma comment(lib, "libjpeg/jpeg.lib") -#else -#pragma comment(lib, "libjpeg/xboxjpeg.lib") -#endif #endif #pragma warning(disable: 4611) /* interaction between '_setjmp' and C++ object destruction is non-portable */ diff --git a/src/RageSurface_Load_PNG.cpp b/src/RageSurface_Load_PNG.cpp index dd7014bf15..4572fc63ae 100644 --- a/src/RageSurface_Load_PNG.cpp +++ b/src/RageSurface_Load_PNG.cpp @@ -6,25 +6,16 @@ #include "RageSurface.h" -#if defined(_WINDOWS) || defined(_XBOX) +#if defined(_WINDOWS) # include "libpng/include/png.h" # if defined(_MSC_VER) -# if defined(_XBOX) -# pragma comment(lib, "libpng/lib/xboxlibpng.lib") -# else -# pragma comment(lib, "libpng/lib/libpng.lib") -# endif +# pragma comment(lib, "libpng/lib/libpng.lib") # pragma warning(disable: 4611) /* interaction between '_setjmp' and C++ object destruction is non-portable */ # endif // _MSC_VER #else # include #endif -#if defined(_XBOX) -# include // for alloca -# include "archutils/Xbox/VirtualMemory.h" -#endif - namespace { void RageFile_png_read( png_struct *png, png_byte *p, png_size_t size ) @@ -80,16 +71,6 @@ static RageSurface *RageSurface_Load_PNG( RageFile *f, const char *fn, char erro png_struct *png = png_create_read_struct( PNG_LIBPNG_VER_STRING, &error, PNG_Error, PNG_Warning ); -#if defined(XBOX) - while(png == NULL) - { - if(!vmem_Manager.DecommitLRU()) - break; - - png = png_create_read_struct( PNG_LIBPNG_VER_STRING, &error, PNG_Error, PNG_Warning ); - } -#endif - if( png == NULL ) { sprintf( errorbuf, "creating png_create_read_struct failed"); diff --git a/src/RageSurface_Save_JPEG.cpp b/src/RageSurface_Save_JPEG.cpp index 1ea4c34178..0348d620eb 100644 --- a/src/RageSurface_Save_JPEG.cpp +++ b/src/RageSurface_Save_JPEG.cpp @@ -6,7 +6,7 @@ #include "RageUtil.h" #include "RageFile.h" -#undef FAR /* fix for VC */ +#undef FAR // fix for VC /** @brief A helper to get the jpeg lib. */ namespace jpeg { @@ -16,16 +16,11 @@ namespace jpeg } } -/* Pull in JPEG library here. */ -#ifdef _XBOX -#pragma comment(lib, "libjpeg/xboxjpeg.lib") -#elif defined _MSC_VER +// Pull in JPEG library here. +#if defined _MSC_VER #pragma comment(lib, "libjpeg/jpeg.lib") #endif - - - #define OUTPUT_BUFFER_SIZE 4096 typedef struct { diff --git a/src/RageSurface_Save_PNG.cpp b/src/RageSurface_Save_PNG.cpp index f971760fbd..797bfec8eb 100644 --- a/src/RageSurface_Save_PNG.cpp +++ b/src/RageSurface_Save_PNG.cpp @@ -6,14 +6,10 @@ #include "RageLog.h" #include "RageUtil.h" -#if defined(WINDOWS) || defined(_XBOX) +#if defined(WINDOWS) #include "libpng/include/png.h" #if defined(_MSC_VER) -# if defined(_XBOX) -# pragma comment(lib, "libpng/lib/xboxlibpng.lib") -# else -# pragma comment(lib, "libpng/lib/libpng.lib") -# endif +# pragma comment(lib, "libpng/lib/libpng.lib") #pragma warning(disable: 4611) /* interaction between '_setjmp' and C++ object destruction is non-portable */ #endif #else diff --git a/src/RageTexturePreloader.h b/src/RageTexturePreloader.h index a7bfb04805..4f893ffe9a 100644 --- a/src/RageTexturePreloader.h +++ b/src/RageTexturePreloader.h @@ -1,16 +1,15 @@ -/* RageTexturePreloader - Load textures in advance, for use later. */ - #ifndef RAGE_TEXTURE_PRELOADER_H #define RAGE_TEXTURE_PRELOADER_H class RageTexture; struct RageTextureID; - +/** @brief Load the textures in advance for using them later. */ class RageTexturePreloader { public: - RageTexturePreloader() { } - RageTexturePreloader( const RageTexturePreloader &cpy ) { *this = cpy; } + RageTexturePreloader(): m_apTextures() { } + RageTexturePreloader( const RageTexturePreloader &cpy ): + m_apTextures(cpy.m_apTextures) { } RageTexturePreloader &operator=( const RageTexturePreloader &rhs ); ~RageTexturePreloader(); void Load( const RageTextureID &ID ); diff --git a/src/RageTypes.h b/src/RageTypes.h index 7e7238f383..610b058329 100644 --- a/src/RageTypes.h +++ b/src/RageTypes.h @@ -335,6 +335,7 @@ typedef StepMania::Rect RectF; * have the same layout that D3D expects. */ struct RageSpriteVertex // has color { + RageSpriteVertex(): p(), n(), c(), t() {} RageVector3 p; // position RageVector3 n; // normal RageVColor c; // diffuse color diff --git a/src/RageUtil.cpp b/src/RageUtil.cpp index 15257851ff..a6428a7f6b 100644 --- a/src/RageUtil.cpp +++ b/src/RageUtil.cpp @@ -967,14 +967,10 @@ bool GetCommandlineArgument( const RString &option, RString *argument, int iInde RString GetCwd() { -#ifdef _XBOX - return SYS_BASE_PATH; -#else char buf[PATH_MAX]; bool ret = getcwd(buf, PATH_MAX) != NULL; ASSERT(ret); return buf; -#endif } /* diff --git a/src/RageUtil_CachedObject.h b/src/RageUtil_CachedObject.h index d0305e43f9..1fee1a6397 100644 --- a/src/RageUtil_CachedObject.h +++ b/src/RageUtil_CachedObject.h @@ -18,17 +18,14 @@ template class CachedObject { public: - CachedObject() + CachedObject(): m_pObject(NULL) { - m_pObject = NULL; - /* A new object is being constructed, so invalidate negative caching. */ ClearCacheNegative(); } - CachedObject( const CachedObject &cpy ) + CachedObject( const CachedObject &cpy ): m_pObject(NULL) { - m_pObject = NULL; ClearCacheNegative(); } @@ -117,11 +114,10 @@ public: Object::Register( this ); } - CachedObjectPointer( const CachedObjectPointer &cpy ) + CachedObjectPointer( const CachedObjectPointer &cpy ): + m_pCache(cpy.m_pCache), m_bCacheIsSet(cpy.m_bCacheIsSet) { CachedObjectHelpers::Lock(); - m_pCache = cpy.m_pCache; - m_bCacheIsSet = cpy.m_bCacheIsSet; Object::Register( this ); CachedObjectHelpers::Unlock(); } diff --git a/src/RoomInfoDisplay.cpp b/src/RoomInfoDisplay.cpp index 86b568612b..847db6846f 100644 --- a/src/RoomInfoDisplay.cpp +++ b/src/RoomInfoDisplay.cpp @@ -179,7 +179,6 @@ void RoomInfoDisplay::SetRoomInfo( const RoomInfo& info) m_playerList[i] = new BitmapText; m_playerList[i]->LoadFromFont( THEME->GetPathF(GetName(),"text") ); m_playerList[i]->SetName("PlayerListElement"); - m_playerList[i]->SetShadowLength( 0 ); m_playerList[i]->SetHorizAlign( align_left ); m_playerList[i]->SetX(PLAYERLISTX + (i * PLAYERLISTOFFSETX)); m_playerList[i]->SetY(PLAYERLISTY + (i * PLAYERLISTOFFSETY)); diff --git a/src/RoomWheel.cpp b/src/RoomWheel.cpp index 9678d3701f..0541b90b4e 100644 --- a/src/RoomWheel.cpp +++ b/src/RoomWheel.cpp @@ -151,7 +151,6 @@ bool RoomWheel::Select() { // Since this is not actually an option outside of this wheel, NULL is a good idea. m_LastSelection = NULL; - // todo: Call a screen with class ScreenTextEntry instead. -aj ScreenTextEntry::TextEntry( SM_BackFromRoomName, ENTER_ROOM_NAME, "", 255 ); } return false; diff --git a/src/ScreenEdit.h b/src/ScreenEdit.h index 200a3979f0..1af4734fc1 100644 --- a/src/ScreenEdit.h +++ b/src/ScreenEdit.h @@ -442,6 +442,9 @@ public: sub_title_transliteration, artist_transliteration, last_beat_hint, + display_bpm, + min_bpm, + max_bpm, NUM_SONG_INFORMATION_CHOICES }; void HandleSongInformationChoice( SongInformationChoice c, const vector &iAnswers ); @@ -456,6 +459,7 @@ public: time_signature_denominator, tickcount, combo, + warp, NUM_TIMING_DATA_INFORMATION_CHOICES }; diff --git a/src/ScreenEvaluation.cpp b/src/ScreenEvaluation.cpp index 395c8b257b..76c40f03a1 100644 --- a/src/ScreenEvaluation.cpp +++ b/src/ScreenEvaluation.cpp @@ -30,7 +30,6 @@ #include "ScoreKeeperNormal.h" #include "InputEventPlus.h" - // metrics that are common to all ScreenEvaluation classes #define BANNER_WIDTH THEME->GetMetricF(m_sName,"BannerWidth") #define BANNER_HEIGHT THEME->GetMetricF(m_sName,"BannerHeight") @@ -45,7 +44,7 @@ LuaFunction( JudgmentLineToLocalizedString, JudgmentLineToLocalizedString(Enum:: static const char *DetailLineNames[NUM_DetailLine] = { - "NumSteps","Jumps", "Holds", "Mines", "Hands", "Rolls", + "NumSteps","Jumps", "Holds", "Mines", "Hands", "Rolls", "Lifts", "Fakes" }; XToString( DetailLine ); #define DETAILLINE_FORMAT THEME->GetMetric (m_sName,"DetailLineFormat") @@ -352,7 +351,7 @@ void ScreenEvaluation::Init() { FOREACH_EnabledPlayer( p ) { - m_sprPercentFrame[p].Load( THEME->GetPathG(m_sName,ssprintf("percent frame p%d",p+1)) ); + m_sprPercentFrame[p].Load( THEME->GetPathG(m_sName,ssprintf("PercentFrame p%d",p+1)) ); m_sprPercentFrame[p]->SetName( ssprintf("PercentFrameP%d",p+1) ); ActorUtil::LoadAllCommands( *m_sprPercentFrame[p], m_sName ); SET_XY( m_sprPercentFrame[p] ); @@ -453,6 +452,7 @@ void ScreenEvaluation::Init() } // init judgment area + ROLLING_NUMBERS_CLASS.Load( m_sName, "RollingNumbersClass" ); FOREACH_ENUM( JudgmentLine, l ) { if( l == JudgmentLine_W1 && !GAMESTATE->ShowW1() ) @@ -474,7 +474,7 @@ void ScreenEvaluation::Init() { m_textJudgmentLineNumber[l][p].LoadFromFont( THEME->GetPathF(m_sName, "JudgmentLineNumber") ); m_textJudgmentLineNumber[l][p].SetName( JudgmentLineToString(l)+ssprintf("NumberP%d",p+1) ); - m_textJudgmentLineNumber[l][p].Load( "RollingNumbersJudgment" ); + m_textJudgmentLineNumber[l][p].Load( ROLLING_NUMBERS_CLASS ); ActorUtil::LoadAllCommands( m_textJudgmentLineNumber[l][p], m_sName ); SET_XY( m_textJudgmentLineNumber[l][p] ); this->AddChild( &m_textJudgmentLineNumber[l][p] ); diff --git a/src/ScreenEvaluation.h b/src/ScreenEvaluation.h index e4565a194c..5e14e159f1 100644 --- a/src/ScreenEvaluation.h +++ b/src/ScreenEvaluation.h @@ -76,10 +76,9 @@ protected: // grade area AutoActor m_sprGradeFrame[NUM_PLAYERS]; - GradeDisplay m_Grades[NUM_PLAYERS]; + GradeDisplay m_Grades[NUM_PLAYERS]; // points area - bool m_bNewSongsUnlocked; PercentageDisplay m_Percent[NUM_PLAYERS]; AutoActor m_sprPercentFrame[NUM_PLAYERS]; @@ -115,6 +114,7 @@ protected: RageSound m_soundStart; // sound played if the player passes or fails ThemeMetric SUMMARY; + ThemeMetric ROLLING_NUMBERS_CLASS; /** @brief Did a player save a screenshot of their score? */ bool m_bSavedScreenshot[NUM_PLAYERS]; }; diff --git a/src/ScreenGameplay.cpp b/src/ScreenGameplay.cpp index 8280993a27..814093883a 100644 --- a/src/ScreenGameplay.cpp +++ b/src/ScreenGameplay.cpp @@ -95,26 +95,17 @@ static Preference g_fNetStartOffset( "NetworkStartOffset", -3.0 ); static Preference g_bEasterEggs( "EasterEggs", true ); -PlayerInfo::PlayerInfo() -{ - m_pn = PLAYER_INVALID; - m_mp = MultiPlayer_Invalid; - m_bIsDummy = false; - m_iDummyIndex = 0; - m_iAddToDifficulty = 0; - m_pLifeMeter = NULL; - m_ptextCourseSongNumber = NULL; - m_ptextStepsDescription = NULL; - m_pPrimaryScoreDisplay = NULL; - m_pSecondaryScoreDisplay = NULL; - m_pPrimaryScoreKeeper = NULL; - m_pSecondaryScoreKeeper = NULL; - m_ptextPlayerOptions = NULL; - m_pActiveAttackList = NULL; - m_pPlayer = NULL; - m_pInventory = NULL; - m_pStepsDisplay = NULL; -} +PlayerInfo::PlayerInfo(): m_pn(PLAYER_INVALID), m_mp(MultiPlayer_Invalid), + m_bIsDummy(false), m_iDummyIndex(0), m_iAddToDifficulty(0), + m_bPlayerEnabled(false), m_PlayerStateDummy(), + m_PlayerStageStatsDummy(), m_SoundEffectControl(), + m_vpStepsQueue(), m_asModifiersQueue(), m_pLifeMeter(NULL), + m_ptextCourseSongNumber(NULL), m_ptextStepsDescription(NULL), + m_pPrimaryScoreDisplay(NULL), m_pSecondaryScoreDisplay(NULL), + m_pPrimaryScoreKeeper(NULL), m_pSecondaryScoreKeeper(NULL), + m_ptextPlayerOptions(NULL), m_pActiveAttackList(NULL), + m_NoteData(), m_pPlayer(NULL), m_pInventory(NULL), + m_pStepsDisplay(NULL), m_sprOniGameOver() {} void PlayerInfo::Load( PlayerNumber pn, MultiPlayer mp, bool bShowNoteField, int iAddToDifficulty ) { @@ -597,9 +588,9 @@ void ScreenGameplay::Init() if( GAMESTATE->IsCourseMode() ) { ASSERT( pi->m_ptextCourseSongNumber == NULL ); + SONG_NUMBER_FORMAT.Load( m_sName, "SongNumberFormat" ); pi->m_ptextCourseSongNumber = new BitmapText; pi->m_ptextCourseSongNumber->LoadFromFont( THEME->GetPathF(m_sName,"SongNum") ); - pi->m_ptextCourseSongNumber->SetShadowLength( 0 ); pi->m_ptextCourseSongNumber->SetName( ssprintf("SongNumber%s",pi->GetName().c_str()) ); LOAD_ALL_COMMANDS_AND_SET_XY( pi->m_ptextCourseSongNumber ); pi->m_ptextCourseSongNumber->SetText( "" ); @@ -618,7 +609,6 @@ void ScreenGameplay::Init() ASSERT( pi->m_ptextPlayerOptions == NULL ); pi->m_ptextPlayerOptions = new BitmapText; pi->m_ptextPlayerOptions->LoadFromFont( THEME->GetPathF(m_sName,"player options") ); - pi->m_ptextPlayerOptions->SetShadowLength( 0 ); pi->m_ptextPlayerOptions->SetName( ssprintf("PlayerOptions%s",pi->GetName().c_str()) ); LOAD_ALL_COMMANDS_AND_SET_XY( pi->m_ptextPlayerOptions ); this->AddChild( pi->m_ptextPlayerOptions ); @@ -1022,7 +1012,7 @@ void ScreenGameplay::LoadNextSong() { pi->GetPlayerStageStats()->m_iSongsPlayed++; if( pi->m_ptextCourseSongNumber ) - pi->m_ptextCourseSongNumber->SetText( ssprintf("%d", pi->GetPlayerStageStats()->m_iSongsPassed+1) ); + pi->m_ptextCourseSongNumber->SetText( ssprintf(SONG_NUMBER_FORMAT.GetValue(), pi->GetPlayerStageStats()->m_iSongsPassed+1) ); } if( GAMESTATE->m_bMultiplayer ) @@ -1141,13 +1131,12 @@ void ScreenGameplay::LoadNextSong() m_LyricDisplay.PlayCommand( bAllReverse? "SetReverse": bAtLeastOneReverse? "SetOneReverse": "SetNoReverse" ); // Load lyrics - // XXX: don't load this here + // XXX: don't load this here (who and why? -aj) LyricsLoader LL; if( GAMESTATE->m_pCurSong->HasLyrics() ) LL.LoadFromLRCFile(GAMESTATE->m_pCurSong->GetLyricsPath(), *GAMESTATE->m_pCurSong); - - /* Set up song-specific graphics. */ + // Set up song-specific graphics. // Check to see if any players are in beginner mode. // Note: steps can be different if turn modifiers are used. @@ -1167,21 +1156,22 @@ void ScreenGameplay::LoadNextSong() if( m_pSongForeground ) m_pSongForeground->Unload(); - if( !PREFSMAN->m_bShowBeginnerHelper || !m_BeginnerHelper.Initialize(2) ) + if( !PREFSMAN->m_bShowBeginnerHelper || !m_BeginnerHelper.Init(2) ) { m_BeginnerHelper.SetVisible( false ); - /* BeginnerHelper disabled, or failed to load. */ + // BeginnerHelper disabled, or failed to load. if( m_pSongBackground ) m_pSongBackground->LoadFromSong( GAMESTATE->m_pCurSong ); if( !GAMESTATE->m_bDemonstrationOrJukebox ) { - /* This will fade from a preset brightness to the actual brightness (based - * on prefs and "cover"). The preset brightness may be 0 (to fade from - * black), or it might be 1, if the stage screen has the song BG and we're - * coming from it (like Pump). This used to be done in SM_PlayReady, but - * that means it's impossible to snap to the new brightness immediately. */ + /* This will fade from a preset brightness to the actual brightness + * (based on prefs and "cover"). The preset brightness may be 0 (to + * fade from black), or it might be 1, if the stage screen has the + * song BG and we're coming from it (like Pump). This used to be done + * in SM_PlayReady, but that means it's impossible to snap to the + * new brightness immediately. */ if( m_pSongBackground ) { m_pSongBackground->SetBrightness( INITIAL_BACKGROUND_BRIGHTNESS ); @@ -2526,9 +2516,11 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM ) if( !m_Toasty.IsTransitioning() && !m_Toasty.IsFinished() ) // don't play if we've already played it once m_Toasty.StartTransitioning(); } - else if( SM >= SM_100Combo && SM <= SM_1000Combo ) + else if( ScreenMessageHelpers::ScreenMessageToString(SM).find("0Combo") != string::npos ) { - int iCombo = ( SM-(SM_100Combo+1) ) * 100; + int iCombo; + RString sCropped = ScreenMessageHelpers::ScreenMessageToString(SM).substr(3); + sscanf(sCropped.c_str(),"%d%*s",&iCombo); PlayAnnouncer( ssprintf("gameplay %d combo",iCombo), 2 ); } else if( SM == SM_ComboStopped ) diff --git a/src/ScreenGameplay.h b/src/ScreenGameplay.h index f3d0d096aa..89c4cf60c8 100644 --- a/src/ScreenGameplay.h +++ b/src/ScreenGameplay.h @@ -193,6 +193,7 @@ protected: ThemeMetric FAIL_ON_MISS_COMBO; ThemeMetric ALLOW_CENTER_1_PLAYER; ThemeMetric UNPAUSE_WITH_START; + ThemeMetric SONG_NUMBER_FORMAT; bool IsLastSong(); void SetupSong( int iSongIndex ); diff --git a/src/ScreenGameplaySyncMachine.cpp b/src/ScreenGameplaySyncMachine.cpp index 2ac318a5b1..325b3a2e87 100644 --- a/src/ScreenGameplaySyncMachine.cpp +++ b/src/ScreenGameplaySyncMachine.cpp @@ -35,7 +35,7 @@ void ScreenGameplaySyncMachine::Init() SongUtil::GetPlayableSteps( &m_Song, vpSteps ); ASSERT_M(vpSteps.size() > 0, "No playable steps for ScreenGameplaySyncMachine"); Steps *pSteps = vpSteps[0]; - GAMESTATE->m_pCurSteps[0].Set( pSteps ); + GAMESTATE->m_pCurSteps[GAMESTATE->GetFirstHumanPlayer()].Set( pSteps ); GamePreferences::m_AutoPlay.Set( PC_HUMAN ); diff --git a/src/ScreenMapControllers.cpp b/src/ScreenMapControllers.cpp index ed6b3dcacd..d2ed7b085e 100644 --- a/src/ScreenMapControllers.cpp +++ b/src/ScreenMapControllers.cpp @@ -240,28 +240,6 @@ void ScreenMapControllers::Input( const InputEventPlus &input ) int button = input.DeviceI.button; -#ifdef _XBOX - if( m_WaitingForPress.IsZero() && input.DeviceI.device == DEVICE_JOY1 ) - { - // map the xbox controller buttons to the keyboard equivalents - if( input.DeviceI.button == JOY_HAT_LEFT ) - button = KEY_LEFT; - else if( input.DeviceI.button == JOY_HAT_RIGHT ) - button = KEY_RIGHT; - else if( input.DeviceI.button == JOY_HAT_UP ) - button = KEY_UP; - else if( input.DeviceI.button == JOY_HAT_DOWN ) - button = KEY_DOWN; - else if( input.DeviceI.button == JOY_AUX_1 ) - button = KEY_ENTER; - else if( input.DeviceI.button == JOY_AUX_2 ) - button = KEY_ESC; - else if( input.DeviceI.button == JOY_BUTTON_1 || input.DeviceI.button == JOY_BUTTON_2 || - input.DeviceI.button == JOY_BUTTON_3 || input.DeviceI.button == JOY_BUTTON_4 ) - button = KEY_DEL; - } -#endif - /* TRICKY: Some adapters map the PlayStation digital d-pad to both axes and * buttons. We want buttons to be used for any mappings where possible * because presses of buttons aren't mutually exclusive and presses of axes @@ -293,11 +271,7 @@ void ScreenMapControllers::Input( const InputEventPlus &input ) m_DeviceIToMap = input.DeviceI; } } -#ifdef _XBOX - else if( input.DeviceI.device == DEVICE_JOY1 ) -#else else if( input.DeviceI.device == DEVICE_KEYBOARD ) -#endif { switch( button ) { @@ -310,10 +284,8 @@ void ScreenMapControllers::Input( const InputEventPlus &input ) * pressed up on the joypad. */ case KEY_DEL: -#ifndef _XBOX case KEY_SPACE: case KEY_BACK: // Clear the selected input mapping. -#endif if( m_iCurButton == (int) m_KeysToMap.size() ) break; // on exit diff --git a/src/ScreenMiniMenu.h b/src/ScreenMiniMenu.h index 313166efd9..365ac90a24 100644 --- a/src/ScreenMiniMenu.h +++ b/src/ScreenMiniMenu.h @@ -4,6 +4,7 @@ #define SCREEN_MINI_MENU_H #include "ScreenOptions.h" +#include #include "GameConstantsAndTypes.h" typedef bool (*MenuRowUpdateEnabled)(); @@ -20,35 +21,76 @@ struct MenuRowDef bool bThemeTitle; bool bThemeItems; - MenuRowDef() {} - MenuRowDef( int r, RString n, MenuRowUpdateEnabled pe, EditMode s, bool bTT, bool bTI, int d, const char *c0=NULL, const char *c1=NULL, const char *c2=NULL, const char *c3=NULL, const char *c4=NULL, const char *c5=NULL, const char *c6=NULL, const char *c7=NULL, const char *c8=NULL, const char *c9=NULL, const char *c10=NULL, const char *c11=NULL, const char *c12=NULL, const char *c13=NULL, const char *c14=NULL, const char *c15=NULL, const char *c16=NULL, const char *c17=NULL, const char *c18=NULL, const char *c19=NULL, const char *c20=NULL, const char *c21=NULL, const char *c22=NULL, const char *c23=NULL, const char *c24=NULL, const char *c25=NULL ) + MenuRowDef(): iRowCode(0), sName(""), bEnabled(false), + pfnEnabled(), emShowIn(), iDefaultChoice(0), + choices(), bThemeTitle(false), bThemeItems(false) {} + MenuRowDef( int r, RString n, MenuRowUpdateEnabled pe, EditMode s, + bool bTT, bool bTI, int d, const char *c0=NULL, + const char *c1=NULL, const char *c2=NULL, + const char *c3=NULL, const char *c4=NULL, + const char *c5=NULL, const char *c6=NULL, + const char *c7=NULL, const char *c8=NULL, + const char *c9=NULL, const char *c10=NULL, + const char *c11=NULL, const char *c12=NULL, + const char *c13=NULL, const char *c14=NULL, + const char *c15=NULL, const char *c16=NULL, + const char *c17=NULL, const char *c18=NULL, + const char *c19=NULL, const char *c20=NULL, + const char *c21=NULL, const char *c22=NULL, + const char *c23=NULL, const char *c24=NULL, + const char *c25=NULL ): iRowCode(r), sName(n), + bEnabled(true), pfnEnabled(pe), emShowIn(s), + iDefaultChoice(d), choices(), + bThemeTitle(bTT), bThemeItems(bTI) { - iRowCode = r; - sName = n; - bEnabled = true; - pfnEnabled = pe; - emShowIn = s; - bThemeTitle = bTT; - bThemeItems = bTI; - iDefaultChoice = d; #define PUSH( c ) if(c) choices.push_back(c); - PUSH(c0);PUSH(c1);PUSH(c2);PUSH(c3);PUSH(c4);PUSH(c5);PUSH(c6);PUSH(c7);PUSH(c8);PUSH(c9);PUSH(c10);PUSH(c11);PUSH(c12);PUSH(c13);PUSH(c14);PUSH(c15);PUSH(c16);PUSH(c17);PUSH(c18);PUSH(c19);PUSH(c20);PUSH(c21);PUSH(c22);PUSH(c22);PUSH(c23);PUSH(c23);PUSH(c24);PUSH(c25); + PUSH(c0);PUSH(c1);PUSH(c2);PUSH(c3);PUSH(c4);PUSH(c5); + PUSH(c6);PUSH(c7);PUSH(c8);PUSH(c9);PUSH(c10);PUSH(c11); + PUSH(c12);PUSH(c13);PUSH(c14);PUSH(c15);PUSH(c16);PUSH(c17); + PUSH(c18);PUSH(c19);PUSH(c20);PUSH(c21);PUSH(c22);PUSH(c22); + PUSH(c23);PUSH(c23);PUSH(c24);PUSH(c25); #undef PUSH } - MenuRowDef( int r, RString n, bool e, EditMode s, bool bTT, bool bTI, int d, const char *c0=NULL, const char *c1=NULL, const char *c2=NULL, const char *c3=NULL, const char *c4=NULL, const char *c5=NULL, const char *c6=NULL, const char *c7=NULL, const char *c8=NULL, const char *c9=NULL, const char *c10=NULL, const char *c11=NULL, const char *c12=NULL, const char *c13=NULL, const char *c14=NULL, const char *c15=NULL, const char *c16=NULL, const char *c17=NULL, const char *c18=NULL, const char *c19=NULL, const char *c20=NULL, const char *c21=NULL, const char *c22=NULL, const char *c23=NULL, const char *c24=NULL, const char *c25=NULL ) + MenuRowDef( int r, RString n, bool e, EditMode s, bool bTT, bool bTI, + int d, const char *c0=NULL, const char *c1=NULL, + const char *c2=NULL, const char *c3=NULL, + const char *c4=NULL, const char *c5=NULL, + const char *c6=NULL, const char *c7=NULL, + const char *c8=NULL, const char *c9=NULL, + const char *c10=NULL, const char *c11=NULL, + const char *c12=NULL, const char *c13=NULL, + const char *c14=NULL, const char *c15=NULL, + const char *c16=NULL, const char *c17=NULL, + const char *c18=NULL, const char *c19=NULL, + const char *c20=NULL, const char *c21=NULL, + const char *c22=NULL, const char *c23=NULL, + const char *c24=NULL, const char *c25=NULL ): + iRowCode(r), sName(n), bEnabled(e), pfnEnabled(NULL), + emShowIn(s), iDefaultChoice(d), choices(), + bThemeTitle(bTT), bThemeItems(bTI) { - iRowCode = r; - sName = n; - bEnabled = e; - pfnEnabled = NULL; - emShowIn = s; - bThemeTitle = bTT; - bThemeItems = bTI; - iDefaultChoice = d; #define PUSH( c ) if(c) choices.push_back(c); - PUSH(c0);PUSH(c1);PUSH(c2);PUSH(c3);PUSH(c4);PUSH(c5);PUSH(c6);PUSH(c7);PUSH(c8);PUSH(c9);PUSH(c10);PUSH(c11);PUSH(c12);PUSH(c13);PUSH(c14);PUSH(c15);PUSH(c16);PUSH(c17);PUSH(c18);PUSH(c19);PUSH(c20);PUSH(c21);PUSH(c22);PUSH(c22);PUSH(c23);PUSH(c23);PUSH(c24);PUSH(c25); + PUSH(c0);PUSH(c1);PUSH(c2);PUSH(c3);PUSH(c4);PUSH(c5); + PUSH(c6);PUSH(c7);PUSH(c8);PUSH(c9);PUSH(c10);PUSH(c11); + PUSH(c12);PUSH(c13);PUSH(c14);PUSH(c15);PUSH(c16);PUSH(c17); + PUSH(c18);PUSH(c19);PUSH(c20);PUSH(c21);PUSH(c22);PUSH(c22); + PUSH(c23);PUSH(c23);PUSH(c24);PUSH(c25); #undef PUSH } + + MenuRowDef( int r, RString n, bool e, EditMode s, bool bTT, bool bTI, + int d, int low, int high ): + iRowCode(r), sName(n), bEnabled(e), pfnEnabled(NULL), + emShowIn(s), iDefaultChoice(d), choices(), + bThemeTitle(bTT), bThemeItems(bTI) + { + for ( int i = low; i <= high; i++ ) + { + std::stringstream ss; + ss << i; + choices.push_back(ss.str().c_str()); + } + } void SetOneUnthemedChoice( const RString &sChoice ) { @@ -76,11 +118,29 @@ struct MenuDef RString sClassName; vector rows; - MenuDef( RString c, MenuRowDef r0=MenuRowDef(), MenuRowDef r1=MenuRowDef(), MenuRowDef r2=MenuRowDef(), MenuRowDef r3=MenuRowDef(), MenuRowDef r4=MenuRowDef(), MenuRowDef r5=MenuRowDef(), MenuRowDef r6=MenuRowDef(), MenuRowDef r7=MenuRowDef(), MenuRowDef r8=MenuRowDef(), MenuRowDef r9=MenuRowDef(), MenuRowDef r10=MenuRowDef(), MenuRowDef r11=MenuRowDef(), MenuRowDef r12=MenuRowDef(), MenuRowDef r13=MenuRowDef(), MenuRowDef r14=MenuRowDef(), MenuRowDef r15=MenuRowDef(), MenuRowDef r16=MenuRowDef(), MenuRowDef r17=MenuRowDef(), MenuRowDef r18=MenuRowDef(), MenuRowDef r19=MenuRowDef(), MenuRowDef r20=MenuRowDef(), MenuRowDef r21=MenuRowDef(), MenuRowDef r22=MenuRowDef(), MenuRowDef r23=MenuRowDef(), MenuRowDef r24=MenuRowDef(), MenuRowDef r25=MenuRowDef(), MenuRowDef r26=MenuRowDef(), MenuRowDef r27=MenuRowDef(), MenuRowDef r28=MenuRowDef(), MenuRowDef r29=MenuRowDef() ) + MenuDef( RString c, MenuRowDef r0=MenuRowDef(), + MenuRowDef r1=MenuRowDef(), MenuRowDef r2=MenuRowDef(), + MenuRowDef r3=MenuRowDef(), MenuRowDef r4=MenuRowDef(), + MenuRowDef r5=MenuRowDef(), MenuRowDef r6=MenuRowDef(), + MenuRowDef r7=MenuRowDef(), MenuRowDef r8=MenuRowDef(), + MenuRowDef r9=MenuRowDef(), MenuRowDef r10=MenuRowDef(), + MenuRowDef r11=MenuRowDef(), MenuRowDef r12=MenuRowDef(), + MenuRowDef r13=MenuRowDef(), MenuRowDef r14=MenuRowDef(), + MenuRowDef r15=MenuRowDef(), MenuRowDef r16=MenuRowDef(), + MenuRowDef r17=MenuRowDef(), MenuRowDef r18=MenuRowDef(), + MenuRowDef r19=MenuRowDef(), MenuRowDef r20=MenuRowDef(), + MenuRowDef r21=MenuRowDef(), MenuRowDef r22=MenuRowDef(), + MenuRowDef r23=MenuRowDef(), MenuRowDef r24=MenuRowDef(), + MenuRowDef r25=MenuRowDef(), MenuRowDef r26=MenuRowDef(), + MenuRowDef r27=MenuRowDef(), MenuRowDef r28=MenuRowDef(), + MenuRowDef r29=MenuRowDef() ): sClassName(c), rows() { - sClassName = c; #define PUSH( r ) if(!r.sName.empty()) rows.push_back(r); - PUSH(r0);PUSH(r1);PUSH(r2);PUSH(r3);PUSH(r4);PUSH(r5);PUSH(r6);PUSH(r7);PUSH(r8);PUSH(r9);PUSH(r10);PUSH(r11);PUSH(r12);PUSH(r13);PUSH(r14);PUSH(r15);PUSH(r16);PUSH(r17);PUSH(r18);PUSH(r19);PUSH(r20);PUSH(r21);PUSH(r22);PUSH(r23);PUSH(r24);PUSH(r25);PUSH(r26);PUSH(r27);PUSH(r28);PUSH(r29); + PUSH(r0);PUSH(r1);PUSH(r2);PUSH(r3);PUSH(r4);PUSH(r5);PUSH(r6); + PUSH(r7);PUSH(r8);PUSH(r9);PUSH(r10);PUSH(r11);PUSH(r12); + PUSH(r13);PUSH(r14);PUSH(r15);PUSH(r16);PUSH(r17);PUSH(r18); + PUSH(r19);PUSH(r20);PUSH(r21);PUSH(r22);PUSH(r23);PUSH(r24); + PUSH(r25);PUSH(r26);PUSH(r27);PUSH(r28);PUSH(r29); #undef PUSH } }; @@ -89,7 +149,9 @@ struct MenuDef class ScreenMiniMenu : public ScreenOptions { public: - static void MiniMenu( const MenuDef* pDef, ScreenMessage smSendOnOK, ScreenMessage smSendOnCancel = SM_None, float fX = 0, float fY = 0 ); + static void MiniMenu( const MenuDef* pDef, ScreenMessage smSendOnOK, + ScreenMessage smSendOnCancel = SM_None, + float fX = 0, float fY = 0 ); void Init(); void BeginScreen(); @@ -110,6 +172,8 @@ protected: vector m_vMenuRows; public: + ScreenMiniMenu(): m_SMSendOnOK(), m_SMSendOnCancel(), m_vMenuRows() {} + static bool s_bCancelled; static int s_iLastRowCode; static vector s_viLastAnswers; diff --git a/src/ScreenNameEntryTraditional.cpp b/src/ScreenNameEntryTraditional.cpp index 6c0c229e3f..3663641412 100644 --- a/src/ScreenNameEntryTraditional.cpp +++ b/src/ScreenNameEntryTraditional.cpp @@ -81,7 +81,8 @@ void ScreenNameEntryTraditional::BeginScreen() GAMESTATE->GetRankingFeats( pn, aFeats ); bool bNoStagesLeft = GAMESTATE->m_iPlayerStageTokens[pn] <= 0; - m_bEnteringName[pn] = aFeats.size() > 0 && bNoStagesLeft; + m_bEnteringName[pn] = ( aFeats.size() > 0 || + PROFILEMAN->ProfileFromMemoryCardIsNew(pn) ) && bNoStagesLeft; m_bFinalized[pn] = !m_bEnteringName[pn]; } diff --git a/src/ScreenOptions.cpp b/src/ScreenOptions.cpp index f41afe9dfd..4cf574d9b5 100644 --- a/src/ScreenOptions.cpp +++ b/src/ScreenOptions.cpp @@ -131,11 +131,11 @@ void ScreenOptions::Init() LOAD_ALL_COMMANDS_AND_SET_XY( m_sprPage ); m_frameContainer.AddChild( m_sprPage ); - // init line line highlights + // init line highlights FOREACH_PlayerNumber( p ) { - m_sprLineHighlight[p].Load( THEME->GetPathG(m_sName,"LineHighlight") ); - m_sprLineHighlight[p]->SetName( "LineHighlight" ); + m_sprLineHighlight[p].Load( THEME->GetPathG(m_sName, ssprintf("LineHighlight P%d",p+1)) ); + m_sprLineHighlight[p]->SetName( ssprintf("LineHighlightP%d",p+1) ); m_sprLineHighlight[p]->SetX( LINE_HIGHLIGHT_X ); LOAD_ALL_COMMANDS( m_sprLineHighlight[p] ); m_frameContainer.AddChild( m_sprLineHighlight[p] ); @@ -878,6 +878,13 @@ void ScreenOptions::ProcessMenuStart( const InputEventPlus &input ) m_pRows[iCurRow]->PositionUnderlines( pn ); RefreshIcons( iCurRow, pn ); + Message msg( "SelectMultiple" ); + msg.SetParam( "PlayerNumber", pn ); + msg.SetParam( "RowIndex", iCurRow ); + msg.SetParam( "ChoiceInRow", iChoiceInRow ); + msg.SetParam( "Selected", bSelected ); + MESSAGEMAN->Broadcast( msg ); + if( row.GetFirstItemGoesDown() ) { // move to the first choice in the row @@ -990,6 +997,11 @@ void ScreenOptions::ChangeValueInRowAbsolute( int iRow, PlayerNumber pn, int iCh int iCurrentChoiceWithFocus = row.GetChoiceInRowWithFocus(pn); int iDelta = iChoiceIndex - iCurrentChoiceWithFocus; + Message msg( "ChangeValue" ); + msg.SetParam( "PlayerNumber", pn ); + msg.SetParam( "RowIndex", iRow ); + MESSAGEMAN->Broadcast( msg ); + ChangeValueInRowRelative( iRow, pn, iDelta, bRepeat ); } diff --git a/src/ScreenOptionsEditCourse.cpp b/src/ScreenOptionsEditCourse.cpp index e9b0589b88..75e5317887 100644 --- a/src/ScreenOptionsEditCourse.cpp +++ b/src/ScreenOptionsEditCourse.cpp @@ -14,10 +14,11 @@ #include "Style.h" #include "Steps.h" - static void GetStepsForSong( Song *pSong, vector &vpStepsOut ) { SongUtil::GetSteps( pSong, vpStepsOut, GAMESTATE->GetCurrentStyle()->m_StepsType ); + // xxx: If the StepsType isn't valid for the current game, this will cause + // a crash when changing songs. -aj StepsUtil::RemoveLockedSteps( pSong, vpStepsOut ); StepsUtil::SortNotesArrayByDifficulty( vpStepsOut ); } @@ -334,7 +335,7 @@ void ScreenOptionsEditCourse::ExportOptions( int iRow, const vectorGetStepsForEntry( iEntryIndex ); - ASSERT( pSteps ); + ASSERT_M( pSteps, "No Steps for this Song!" ); CourseEntry ce; ce.songID.FromSong( pSong ); ce.stepsCriteria.m_difficulty = pSteps->GetDifficulty(); @@ -447,8 +448,13 @@ void ScreenOptionsEditCourse::AfterChangeRow( PlayerNumber pn ) { ScreenOptions::AfterChangeRow( pn ); - SetCurrentSong(); - SetCurrentSteps(); + const int iCurRow = m_iCurrentRow[pn]; + // only do this if it's not the first row. -aj + if( iCurRow > 0 ) + { + SetCurrentSong(); + SetCurrentSteps(); + } } void ScreenOptionsEditCourse::AfterChangeValueInRow( int iRow, PlayerNumber pn ) diff --git a/src/ScreenOptionsExportPackage.cpp b/src/ScreenOptionsExportPackage.cpp index 6bbdf66f2d..eda77e4ac9 100644 --- a/src/ScreenOptionsExportPackage.cpp +++ b/src/ScreenOptionsExportPackage.cpp @@ -25,8 +25,8 @@ void ScreenOptionsExportPackage::Init() void ScreenOptionsExportPackage::BeginScreen() { // Fill m_vsPossibleDirsToExport - // todo: split these out over multiple screens so the scroller - // isn't so overloaded. -freem + // todo: Split these out over multiple screens so the scroller + // isn't so overloaded. (See ScreenOptionsToggleSongs) -freem { // Add themes { diff --git a/src/ScreenPlayerOptions.cpp b/src/ScreenPlayerOptions.cpp index f6d9e0ca1b..ffa39f85a3 100644 --- a/src/ScreenPlayerOptions.cpp +++ b/src/ScreenPlayerOptions.cpp @@ -77,7 +77,7 @@ void ScreenPlayerOptions::Input( const InputEventPlus &input ) { // apply the game default mods, but not the Profile saved mods GAMESTATE->m_pPlayerState[pn]->ResetToDefaultPlayerOptions( ModsLevel_Preferred ); - + MESSAGEMAN->Broadcast( ssprintf("CancelAllP%i", pn+1) ); for( unsigned r=0; rPlayCommand( "Choose" ); - fSecs = max( fSecs, m_sprCursor[pn]->GetTweenTimeLeft() ); + if(m_sprCursor[pn] != NULL) + { + m_sprCursor[pn]->PlayCommand( "Choose" ); + fSecs = max( fSecs, m_sprCursor[pn]->GetTweenTimeLeft() ); + } } return fSecs; @@ -809,8 +812,7 @@ void ScreenSelectMaster::MenuStart( const InputEventPlus &input ) mc.ApplyToAllPlayers(); // We want to be able to broadcast a Start message to the theme, in // case a themer wants to handle something. -aj - // TODO: Find a way to differentiate this from the message below, for - // less ambiguousness? + // TODO: Add a param to differentiate this from the message below. MESSAGEMAN->Broadcast( (MessageID)(Message_MenuStartP1+pn) ); return; } diff --git a/src/ScreenSelectMusic.cpp b/src/ScreenSelectMusic.cpp index a7335d68ba..a866cbfa91 100644 --- a/src/ScreenSelectMusic.cpp +++ b/src/ScreenSelectMusic.cpp @@ -199,10 +199,10 @@ void ScreenSelectMusic::Init() FOREACH_ENUM( PlayerNumber, p ) { - m_sprHighScoreFrame[p].SetName( ssprintf("ScoreFrameP%d",p+1) ); - m_sprHighScoreFrame[p].Load( THEME->GetPathG(m_sName,ssprintf("score frame p%d",p+1)) ); + m_sprHighScoreFrame[p].Load( THEME->GetPathG(m_sName,ssprintf("ScoreFrame P%d",p+1)) ); + m_sprHighScoreFrame[p]->SetName( ssprintf("ScoreFrameP%d",p+1) ); LOAD_ALL_COMMANDS_AND_SET_XY( m_sprHighScoreFrame[p] ); - this->AddChild( &m_sprHighScoreFrame[p] ); + this->AddChild( m_sprHighScoreFrame[p] ); m_textHighScore[p].SetName( ssprintf("ScoreP%d",p+1) ); m_textHighScore[p].LoadFromFont( THEME->GetPathF(m_sName,"score") ); @@ -247,7 +247,7 @@ void ScreenSelectMusic::BeginScreen() { if( GAMESTATE->IsHumanPlayer(pn) ) continue; - m_sprHighScoreFrame[pn].SetVisible( false ); + m_sprHighScoreFrame[pn]->SetVisible( false ); m_textHighScore[pn].SetVisible( false ); } @@ -485,7 +485,7 @@ void ScreenSelectMusic::Input( const InputEventPlus &input ) m_bStepsChosen[input.pn] ) return; // ignore - // todo: use mousewheel to scroll MusicWheel -aj + // todo: Allow mousewheel to scroll MusicWheel -aj if( USE_PLAYER_SELECT_MENU ) { @@ -1528,9 +1528,8 @@ void ScreenSelectMusic::AfterStepsOrTrailChange( const vector &vpn } else { - // I don't like how numbers just stay up there if the current - // selection is NULL. - // todo: Let themers set the text instead of just using 0. -aj + // The numbers shouldn't stay if the current selection is NULL. + // todo: Let themers set the text value instead of just using 0. -aj m_textHighScore[pn].SetText( ssprintf("%*i", NUM_SCORE_DIGITS, 0) ); } } @@ -1723,10 +1722,13 @@ void ScreenSelectMusic::AfterMusicChange() m_sSampleMusicToPlay = m_sRandomMusicPath; break; case TYPE_CUSTOM: - bWantBanner = false; // we load it ourself, or should - m_Banner.Load( THEME->GetPathG( "Banner", GetMusicWheel()->GetCurWheelItemData( GetMusicWheel()->GetCurrentIndex() )->m_pAction->m_sName.c_str() ) ); - if( SAMPLE_MUSIC_PREVIEW_MODE != SampleMusicPreviewMode_LastSong ) - m_sSampleMusicToPlay = m_sSectionMusicPath; + { + bWantBanner = false; // we load it ourself + RString sBannerName = GetMusicWheel()->GetCurWheelItemData( GetMusicWheel()->GetCurrentIndex() )->m_pAction->m_sName.c_str(); + m_Banner.LoadCustom(sBannerName); + if( SAMPLE_MUSIC_PREVIEW_MODE != SampleMusicPreviewMode_LastSong ) + m_sSampleMusicToPlay = m_sSectionMusicPath; + } break; default: ASSERT(0); @@ -1856,6 +1858,14 @@ void ScreenSelectMusic::AfterMusicChange() AfterStepsOrTrailChange( vpns ); } +void ScreenSelectMusic::OpenOptionsList(PlayerNumber pn) +{ + if( pn != PLAYER_INVALID ) + { + m_OptionsList[pn].Open(); + } +} + // lua start #include "LuaBinding.h" @@ -1868,11 +1878,13 @@ public: p->GetMusicWheel()->PushSelf(L); return 1; } + static int OpenOptionsList( T* p, lua_State *L ) { PlayerNumber pn = Enum::Check(L, 1); p->OpenOptionsList(pn); return 0; } LunaScreenSelectMusic() { ADD_METHOD( GetGoToOptions ); ADD_METHOD( GetMusicWheel ); + ADD_METHOD( OpenOptionsList ); } }; diff --git a/src/ScreenSelectMusic.h b/src/ScreenSelectMusic.h index 6e75a65b34..ad117bce74 100644 --- a/src/ScreenSelectMusic.h +++ b/src/ScreenSelectMusic.h @@ -47,6 +47,8 @@ public: bool GetGoToOptions() const { return m_bGoToOptions; } MusicWheel *GetMusicWheel() { return &m_MusicWheel; } + void OpenOptionsList( PlayerNumber pn ); + // Lua virtual void PushSelf( lua_State *L ); @@ -60,7 +62,7 @@ protected: void SwitchToPreferredDifficulty(); void AfterMusicChange(); - void CheckBackgroundRequests( bool bForce ); + void CheckBackgroundRequests( bool bForce ); bool DetectCodes( const InputEventPlus &input ); vector m_vpSteps; @@ -123,7 +125,7 @@ protected: FadingBanner m_Banner; Sprite m_sprCDTitleFront, m_sprCDTitleBack; - Sprite m_sprHighScoreFrame[NUM_PLAYERS]; + AutoActor m_sprHighScoreFrame[NUM_PLAYERS]; BitmapText m_textHighScore[NUM_PLAYERS]; MusicWheel m_MusicWheel; OptionsList m_OptionsList[NUM_PLAYERS]; diff --git a/src/ScreenServiceAction.h b/src/ScreenServiceAction.h index 0a19dc3e0c..35011f0106 100644 --- a/src/ScreenServiceAction.h +++ b/src/ScreenServiceAction.h @@ -3,11 +3,6 @@ #ifndef ScreenServiceAction_H #define ScreenServiceAction_H -//There's a FAILED macro somewhere in winerror.h, which gets included with Xbox. -#if defined(_XBOX) -#undef FAILED -#endif - #include "ScreenPrompt.h" class ScreenServiceAction : public ScreenPrompt diff --git a/src/ScreenSystemLayer.cpp b/src/ScreenSystemLayer.cpp index 885f03bbe6..69cb90cc69 100644 --- a/src/ScreenSystemLayer.cpp +++ b/src/ScreenSystemLayer.cpp @@ -110,6 +110,7 @@ namespace int iCredits = GAMESTATE->m_iCoins / PREFSMAN->m_iCoinsPerCredit; int iCoins = GAMESTATE->m_iCoins % PREFSMAN->m_iCoinsPerCredit; RString sCredits = CREDITS_CREDITS; + // todo: allow themers to change these strings -aj if( iCredits > 0 || PREFSMAN->m_iCoinsPerCredit == 1 ) sCredits += ssprintf(" %d", iCredits); if( PREFSMAN->m_iCoinsPerCredit > 1 ) diff --git a/src/ScreenTestFonts.h b/src/ScreenTestFonts.h index d966f85f36..16c9e2fd19 100644 --- a/src/ScreenTestFonts.h +++ b/src/ScreenTestFonts.h @@ -3,10 +3,6 @@ #ifndef SCREEN_TEST_FONTS_H #define SCREEN_TEST_FONTS_H -#if defined(_XBOX) -#undef TEXT -#endif - #include "Screen.h" #include "BitmapText.h" #include "Quad.h" diff --git a/src/ScreenTextEntry.h b/src/ScreenTextEntry.h index 1ed5136c41..c3dad0bbb6 100644 --- a/src/ScreenTextEntry.h +++ b/src/ScreenTextEntry.h @@ -71,7 +71,10 @@ public: } struct TextEntrySettings { - TextEntrySettings() { } + TextEntrySettings(): smSendOnPop(), sQuestion(""), + sInitialAnswer(""), iMaxInputLength(0), + bPassword(false), Validate(), OnOK(), OnCancel(), + ValidateAppend(), FormatAnswerForDisplay() { } ScreenMessage smSendOnPop; RString sQuestion; RString sInitialAnswer; diff --git a/src/Song.cpp b/src/Song.cpp index ff686d6e25..06a83b2a05 100644 --- a/src/Song.cpp +++ b/src/Song.cpp @@ -41,7 +41,7 @@ * @brief The internal version of the cache for StepMania. * * Increment this value to invalidate the current cache. */ -const int FILE_CACHE_VERSION = 166; +const int FILE_CACHE_VERSION = 168; /** @brief How long does a song sample last by default? */ const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f; @@ -74,7 +74,7 @@ Song::Song() m_fSpecifiedLastBeat = -1; m_SelectionDisplay = SHOW_ALWAYS; m_bEnabled = true; - m_DisplayBPMType = DISPLAY_ACTUAL; + m_DisplayBPMType = DISPLAY_BPM_ACTUAL; m_fSpecifiedBPMMin = 0; m_fSpecifiedBPMMax = 0; m_bIsSymLink = false; @@ -147,7 +147,7 @@ void Song::AddLyricSegment( LyricSegment seg ) void Song::GetDisplayBpms( DisplayBpms &AddTo ) const { - if( m_DisplayBPMType == DISPLAY_SPECIFIED ) + if( m_DisplayBPMType == DISPLAY_BPM_SPECIFIED ) { AddTo.Add( m_fSpecifiedBPMMin ); AddTo.Add( m_fSpecifiedBPMMax ); @@ -781,10 +781,7 @@ void Song::TidyUpData() // If no time signature specified, assume 4/4 time for the whole song. if( m_Timing.m_vTimeSignatureSegments.empty() ) { - TimeSignatureSegment seg; - seg.m_iStartRow = 0; - seg.m_iNumerator = 4; - seg.m_iDenominator = 4; + TimeSignatureSegment seg(0, 4, 4); m_Timing.m_vTimeSignatureSegments.push_back( seg ); } @@ -795,18 +792,14 @@ void Song::TidyUpData() */ if( m_Timing.m_TickcountSegments.empty() ) { - TickcountSegment seg; - seg.m_iStartRow = 0; - seg.m_iTicks = 2; + TickcountSegment seg(0, 2); m_Timing.m_TickcountSegments.push_back( seg ); } // Have a default combo segment of one just in case. if( m_Timing.m_ComboSegments.empty() ) { - ComboSegment seg; - seg.m_iStartRow = 0; - seg.m_iCombo = 1; + ComboSegment seg(0, 1); m_Timing.m_ComboSegments.push_back( seg ); } } @@ -925,7 +918,22 @@ bool Song::SaveToSMFile() // If the file exists, make a backup. if( IsAFile(sPath) ) FileCopy( sPath, sPath + ".old" ); - return NotesWriterSM::Write( sPath, *this ); + + vector vpStepsToSave; + FOREACH_CONST( Steps*, m_vpSteps, s ) + { + Steps *pSteps = *s; + if( pSteps->IsAutogen() ) + continue; // don't write autogen notes + + // Only save steps that weren't loaded from a profile. + if( pSteps->WasLoadedFromProfile() ) + continue; + + vpStepsToSave.push_back( pSteps ); + } + + return NotesWriterSM::Write( sPath, *this, vpStepsToSave ); } @@ -1443,7 +1451,7 @@ bool Song::HasSignificantBpmChangesOrStops() const // Don't consider BPM changes that only are only for maintaining sync as // a real BpmChange. - if( m_DisplayBPMType == DISPLAY_SPECIFIED ) + if( m_DisplayBPMType == DISPLAY_BPM_SPECIFIED ) { if( m_fSpecifiedBPMMin != m_fSpecifiedBPMMax ) return true; @@ -1487,6 +1495,7 @@ public: static int GetDisplayArtist( T* p, lua_State *L ) { lua_pushstring(L, p->GetDisplayArtist() ); return 1; } static int GetTranslitArtist( T* p, lua_State *L ) { lua_pushstring(L, p->GetTranslitArtist() ); return 1; } static int GetGenre( T* p, lua_State *L ) { lua_pushstring(L, p->m_sGenre ); return 1; } + static int GetOrigin( T* p, lua_State *L ) { lua_pushstring(L, p->m_sOrigin ); return 1; } static int GetAllSteps( T* p, lua_State *L ) { const vector &v = p->GetAllSteps(); @@ -1597,7 +1606,7 @@ public: } static int IsDisplayBpmRandom( T* p, lua_State *L ) { - lua_pushboolean( L, p->m_DisplayBPMType == Song::DISPLAY_RANDOM ); + lua_pushboolean( L, p->m_DisplayBPMType == DISPLAY_BPM_RANDOM ); return 1; } @@ -1612,6 +1621,7 @@ public: ADD_METHOD( GetDisplayArtist ); ADD_METHOD( GetTranslitArtist ); ADD_METHOD( GetGenre ); + ADD_METHOD( GetOrigin ); ADD_METHOD( GetAllSteps ); ADD_METHOD( GetStepsByStepsType ); ADD_METHOD( GetSongDir ); diff --git a/src/Song.h b/src/Song.h index 74d1159b73..c8cd697210 100644 --- a/src/Song.h +++ b/src/Song.h @@ -17,7 +17,7 @@ struct lua_State; struct BackgroundChange; /** @brief The version of the .ssc file format. */ -const static float STEPFILE_VERSION_NUMBER = 0.55f; +const static float STEPFILE_VERSION_NUMBER = 0.57f; /** @brief How many edits for this song can each profile have? */ const int MAX_EDITS_PER_SONG_PER_PROFILE = 5; @@ -35,6 +35,15 @@ enum BackgroundLayer NUM_BackgroundLayer, BACKGROUND_LAYER_Invalid }; + +/** @brief The different ways of displaying the BPM. */ +enum DisplayBPM +{ + DISPLAY_BPM_ACTUAL, /**< Display the song's actual BPM. */ + DISPLAY_BPM_SPECIFIED, /**< Display a specified value or values. */ + DISPLAY_BPM_RANDOM /**< Display a random selection of BPMs. */ +}; + /** @brief A custom foreach loop for the different background layers. */ #define FOREACH_BackgroundLayer( bl ) FOREACH_ENUM( BackgroundLayer, bl ) @@ -213,6 +222,8 @@ public: * This is read and saved, but never actually used. */ RString m_sCredit; + RString m_sOrigin; // song origin (for .ssc format) + RString m_sMusicFile; RString m_sInstrumentTrackFile[NUM_InstrumentTrack]; @@ -222,7 +233,7 @@ public: float m_fSpecifiedLastBeat; // specified last beat of the song float m_fMusicSampleStartSeconds; float m_fMusicSampleLengthSeconds; - enum { DISPLAY_ACTUAL, DISPLAY_SPECIFIED, DISPLAY_RANDOM } m_DisplayBPMType; + DisplayBPM m_DisplayBPMType; float m_fSpecifiedBPMMin; float m_fSpecifiedBPMMax; // if a range, then Min != Max @@ -307,7 +318,7 @@ public: void AddBPMSegment( const BPMSegment &seg ) { m_Timing.AddBPMSegment( seg ); } void AddStopSegment( const StopSegment &seg ) { m_Timing.AddStopSegment( seg ); } - //void AddWarpSegment( const WarpSegment &seg ) { m_Timing.AddWarpSegment( seg ); } + void AddWarpSegment( const WarpSegment &seg ) { m_Timing.AddWarpSegment( seg ); } void AddBackgroundChange( BackgroundLayer blLayer, BackgroundChange seg ); void AddForegroundChange( BackgroundChange seg ); void AddLyricSegment( LyricSegment seg ); diff --git a/src/SongCacheIndex.cpp b/src/SongCacheIndex.cpp index 482ed06ed6..fb0d588adc 100644 --- a/src/SongCacheIndex.cpp +++ b/src/SongCacheIndex.cpp @@ -50,12 +50,7 @@ RString SongCacheIndex::GetCacheFilePath( const RString &sGroup, const RString & for( size_t pos = s.find_first_of(invalid); pos != RString::npos; pos = s.find_first_of(invalid, pos) ) s[pos] = '_'; // CACHE_DIR ends with a /. -#if defined(XBOX) - // Use CRC32 to make fatx compatible filenames. - return ssprintf( "%s%s/%X", SpecialFiles::CACHE_DIR.c_str(), sGroup.c_str(), GetHashForString(s)); -#else return ssprintf( "%s%s/%s", SpecialFiles::CACHE_DIR.c_str(), sGroup.c_str(), s.c_str() ); -#endif } SongCacheIndex::SongCacheIndex() diff --git a/src/SongManager.cpp b/src/SongManager.cpp index 34e296be35..fe4bb51cd2 100644 --- a/src/SongManager.cpp +++ b/src/SongManager.cpp @@ -1890,6 +1890,14 @@ public: DEFINE_METHOD( ShortenGroupName, ShortenGroupName( SArg(1) ) ) + static int GetCourseGroupNames( T* p, lua_State *L ) + { + vector v; + p->GetCourseGroupNames( v ); + LuaHelpers::CreateTableFromArray( v, L ); + return 1; + } + LunaSongManager() { ADD_METHOD( GetAllSongs ); @@ -1898,6 +1906,7 @@ public: ADD_METHOD( FindCourse ); ADD_METHOD( GetRandomSong ); ADD_METHOD( GetRandomCourse ); + ADD_METHOD( GetCourseGroupNames ); ADD_METHOD( GetNumSongs ); ADD_METHOD( GetNumUnlockedSongs ); ADD_METHOD( GetNumSelectableAndUnlockedSongs ); diff --git a/src/SongUtil.cpp b/src/SongUtil.cpp index d221159346..2641f860f0 100644 --- a/src/SongUtil.cpp +++ b/src/SongUtil.cpp @@ -19,6 +19,9 @@ #include "LuaBinding.h" #include "EnumHelper.h" +ThemeMetric SORT_BPM_DIVISION ( "MusicWheel", "SortBPMDivision" ); +ThemeMetric SORT_LENGTH_DIVISION ( "MusicWheel", "SortLengthDivision" ); + bool SongCriteria::Matches( const Song *pSong ) const { if( !m_sGroupName.empty() && m_sGroupName != pSong->m_sGroupName ) @@ -595,8 +598,7 @@ RString SongUtil::GetSectionNameFromSongAndSort( const Song* pSong, SortOrder so return SORT_NOT_AVAILABLE.GetValue(); case SORT_BPM: { - // todo: make this a theme metric? -aj - const int iBPMGroupSize = 20; + const int iBPMGroupSize = SORT_BPM_DIVISION; DisplayBpms bpms; pSong->GetDisplayBpms( bpms ); int iMaxBPM = (int)bpms.GetMax(); @@ -605,8 +607,7 @@ RString SongUtil::GetSectionNameFromSongAndSort( const Song* pSong, SortOrder so } case SORT_LENGTH: { - // todo: make this a theme metric? -aj - const int iSortLengthSize = 5; + const int iSortLengthSize = SORT_LENGTH_DIVISION; int iMaxLength = (int)pSong->m_fMusicLengthSeconds; iMaxLength += (iSortLengthSize - (iMaxLength%iSortLengthSize) - 1); int iMinLength = iMaxLength - (iSortLengthSize-1); diff --git a/src/SongUtil.h b/src/SongUtil.h index 7262306f02..0c0a18043d 100644 --- a/src/SongUtil.h +++ b/src/SongUtil.h @@ -47,8 +47,9 @@ public: } m_Locked; /** @brief Set up some initial song criteria. */ - SongCriteria(): m_sGroupName(""), m_bUseSongGenreAllowedList(false), - m_Selectable(Selectable_DontCare), m_bUseSongAllowedList(false), + SongCriteria(): m_sGroupName(""), m_bUseSongGenreAllowedList(false), + m_vsSongGenreAllowedList(), m_Selectable(Selectable_DontCare), + m_bUseSongAllowedList(false), m_vpSongAllowedList(), m_iMaxStagesForSong(-1), m_Tutorial(Tutorial_DontCare), m_Locked(Locked_DontCare) { @@ -178,7 +179,11 @@ class SongID mutable CachedObjectPointer m_Cache; public: - SongID() { Unset(); } + /** + * @brief Set up the SongID with default values. + * + * This used to call Unset() to do the same thing. */ + SongID(): sDir(""), m_Cache() { m_Cache.Unset(); } void Unset() { FromSong(NULL); } void FromSong( const Song *p ); Song *ToSong() const; diff --git a/src/StageStats.cpp b/src/StageStats.cpp index d00c73f80b..df3a500349 100644 --- a/src/StageStats.cpp +++ b/src/StageStats.cpp @@ -47,9 +47,9 @@ void StageStats::AssertValid( PlayerNumber pn ) const ASSERT( m_player[pn].m_vpPossibleSteps[0] ); ASSERT_M( m_playMode < NUM_PlayMode, ssprintf("playmode %i", m_playMode) ); ASSERT( m_pStyle != NULL ); - ASSERT_M( m_player[pn].m_vpPossibleSteps[0]->GetDifficulty() < NUM_Difficulty, ssprintf("difficulty %i", m_player[pn].m_vpPossibleSteps[0]->GetDifficulty()) ); - ASSERT_M( (int) m_vpPlayedSongs.size() == m_player[pn].m_iStepsPlayed, ssprintf("%i, %i, %i", (int)m_vpPlayedSongs.size(), (int)m_player[pn].m_iStepsPlayed, pn) ); - ASSERT_M( m_vpPossibleSongs.size() == m_player[pn].m_vpPossibleSteps.size(), ssprintf("%i, %i, %i", (int)m_vpPossibleSongs.size(), (int)m_player[pn].m_vpPossibleSteps.size(), pn) ); + ASSERT_M( m_player[pn].m_vpPossibleSteps[0]->GetDifficulty() < NUM_Difficulty, ssprintf("Invalid Difficulty %i", m_player[pn].m_vpPossibleSteps[0]->GetDifficulty()) ); + ASSERT_M( (int) m_vpPlayedSongs.size() == m_player[pn].m_iStepsPlayed, ssprintf("%i Songs Played != %i Steps Played for player %i", (int)m_vpPlayedSongs.size(), (int)m_player[pn].m_iStepsPlayed, pn) ); + ASSERT_M( m_vpPossibleSongs.size() == m_player[pn].m_vpPossibleSteps.size(), ssprintf("%i Possible Songs != %i Possible Steps for player %i", (int)m_vpPossibleSongs.size(), (int)m_player[pn].m_vpPossibleSteps.size(), pn) ); } void StageStats::AssertValid( MultiPlayer pn ) const diff --git a/src/StageStats.h b/src/StageStats.h index a160d0c652..a5a52587ef 100644 --- a/src/StageStats.h +++ b/src/StageStats.h @@ -79,6 +79,9 @@ public: // Lua void PushSelf( lua_State *L ); + +private: + // TODO: Implement the copy and assignment operators on our own. }; #endif diff --git a/src/StepManiaXbox-2003.vcproj b/src/StepManiaXbox-2003.vcproj deleted file mode 100644 index e3cdae7552..0000000000 --- a/src/StepManiaXbox-2003.vcproj +++ /dev/null @@ -1,2783 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Steps.cpp b/src/Steps.cpp index 9110ecf96d..3c0cf7cb57 100644 --- a/src/Steps.cpp +++ b/src/Steps.cpp @@ -25,20 +25,12 @@ #include -Steps::Steps() -{ - m_bSavedToDisk = false; - m_StepsType = StepsType_Invalid; - m_LoadedFromProfile = ProfileSlot_Invalid; - m_iHash = 0; - m_Difficulty = Difficulty_Invalid; - m_iMeter = 0; - - m_pNoteData = new NoteData; - m_bNoteDataIsFilled = false; - m_sNoteDataCompressed = ""; - parent = NULL; -} +Steps::Steps(): m_StepsType(StepsType_Invalid), + parent(NULL), m_pNoteData(new NoteData), m_bNoteDataIsFilled(false), + m_sNoteDataCompressed(""), m_sFilename(""), m_bSavedToDisk(false), + m_LoadedFromProfile(ProfileSlot_Invalid), m_iHash(0), + m_sDescription(""), m_sChartStyle(""), + m_Difficulty(Difficulty_Invalid), m_iMeter(0), m_sCredit("") {} Steps::~Steps() { @@ -89,6 +81,13 @@ void Steps::GetNoteData( NoteData& noteDataOut ) const } } +NoteData Steps::GetNoteData() const +{ + NoteData tmp; + this->GetNoteData( tmp ); + return tmp; +} + void Steps::SetSMNoteData( const RString ¬es_comp_ ) { m_pNoteData->Init(); diff --git a/src/Steps.h b/src/Steps.h index e42c11d54d..fee6204527 100644 --- a/src/Steps.h +++ b/src/Steps.h @@ -108,6 +108,7 @@ public: unsigned GetHash() const; void GetNoteData( NoteData& noteDataOut ) const; + NoteData GetNoteData() const; void SetNoteData( const NoteData& noteDataNew ); void SetSMNoteData( const RString ¬es_comp ); void GetSMNoteData( RString ¬es_comp_out ) const; diff --git a/src/StepsUtil.h b/src/StepsUtil.h index f2fa03fd06..fa61a61900 100644 --- a/src/StepsUtil.h +++ b/src/StepsUtil.h @@ -163,7 +163,13 @@ class StepsID mutable CachedObjectPointer m_Cache; public: - StepsID() { Unset(); } + /** + * @brief Set up the StepsID with default values. + * + * This used to call Unset(), which set the variables to + * the same thing. */ + StepsID(): st(StepsType_Invalid), dc(Difficulty_Invalid), + sDescription(""), uHash(0), m_Cache() {} void Unset() { FromSteps(NULL); } void FromSteps( const Steps *p ); Steps *ToSteps( const Song *p, bool bAllowNull ) const; diff --git a/src/StyleUtil.h b/src/StyleUtil.h index f2a93b4cf8..6051d17617 100644 --- a/src/StyleUtil.h +++ b/src/StyleUtil.h @@ -11,7 +11,7 @@ class StyleID RString sStyle; public: - StyleID() { Unset(); } + StyleID(): sGame(""), sStyle("") { } void Unset() { FromStyle(NULL); } void FromStyle( const Style *p ); const Style *ToStyle() const; diff --git a/src/Texture Font Generator/Texture Font Generator-net2008.vcproj b/src/Texture Font Generator/Texture Font Generator-net2008.vcproj index 2c3e2f450e..dee8b0dace 100644 --- a/src/Texture Font Generator/Texture Font Generator-net2008.vcproj +++ b/src/Texture Font Generator/Texture Font Generator-net2008.vcproj @@ -46,6 +46,7 @@ jmpbuf) ) { - png_destroy_read_struct( &pPng, &pInfo, png_infopp_NULL ); + png_destroy_read_struct( &pPng, &pInfo, NULL ); return false; } diff --git a/src/ThemeMetric.h b/src/ThemeMetric.h index 80e445797e..5ef34f9abe 100644 --- a/src/ThemeMetric.h +++ b/src/ThemeMetric.h @@ -53,9 +53,9 @@ public: * (everything except screens). */ ThemeMetric( const RString& sGroup = "", const RString& sName = "" ): m_sGroup( sGroup ), - m_sName( sName ) + m_sName( sName ), + m_Value(), m_currentValue(T()), m_bCallEachTime(false) { - m_currentValue = T(); ThemeManager::Subscribe( this ); } @@ -64,6 +64,7 @@ public: m_sGroup( cpy.m_sGroup ), m_sName( cpy.m_sName ), m_Value( cpy.m_Value ) + // do we transfer the current value or bCallEachTime? { ThemeManager::Subscribe( this ); } diff --git a/src/TimingData.cpp b/src/TimingData.cpp index d1ff6ce5c3..8efd8ec0e6 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -92,17 +92,16 @@ void TimingData::SetStopAtRow( int iRow, float fSeconds, bool bDelay ) if( i == m_StopSegments.size() ) // there is no Stop/Delay Segment at the current beat { // create a new StopSegment - if( fSeconds > 0 || PREFSMAN->m_bQuirksMode ) + if( fSeconds > 0 ) { AddStopSegment( StopSegment(iRow, fSeconds, bDelay) ); } } else // StopSegment being modified is m_StopSegments[i] { - if( fSeconds > 0 || PREFSMAN->m_bQuirksMode ) + if( fSeconds > 0 ) { m_StopSegments[i].m_fStopSeconds = fSeconds; - //m_StopSegments[i].m_bDelay = bDelay; // use this? } else m_StopSegments.erase( m_StopSegments.begin()+i, m_StopSegments.begin()+i+1 ); @@ -150,12 +149,30 @@ void TimingData::SetTimeSignatureDenominatorAtRow( int iRow, int iDenominator ) SetTimeSignatureAtRow( iRow, GetTimeSignatureSegmentAtBeat( NoteRowToBeat( iRow ) ).m_iNumerator, iDenominator ); } -/* -void TimingData::SetWarpAtRow( int iRowAt, float fLengthBeats ) +void TimingData::SetWarpAtRow( int iRow, float fNew ) { - // todo: code this -aj + unsigned i; + for( i=0; i 0 && NoteRowToBeat(iRow) < fNew; + if( i == m_WarpSegments.size() ) + { + if( valid ) + { + AddWarpSegment( WarpSegment(iRow, fNew) ); + } + } + else + { + if( valid ) + { + m_WarpSegments[i].m_fEndBeat = fNew; + } + else + m_WarpSegments.erase( m_WarpSegments.begin()+i, m_WarpSegments.begin()+i+1 ); + } } -*/ /* Change an existing Tickcount segment, merge identical segments together or insert a new one. */ void TimingData::SetTickcountAtRow( int iRow, int iTicks ) @@ -229,13 +246,13 @@ int TimingData::GetComboAtRow( int iNoteRow ) const return m_ComboSegments[GetComboSegmentIndexAtRow( iNoteRow )].m_iCombo; } -int TimingData::GetWarpToRow( int iWarpBeginRow ) const +float TimingData::GetWarpAtRow( int iWarpRow ) const { for( unsigned i=0; i iNoteRow ) break; - return (int)i; + return static_cast(i); } int TimingData::GetStopSegmentIndexAtRow( int iNoteRow, bool bDelay ) const @@ -308,16 +325,72 @@ int TimingData::GetStopSegmentIndexAtRow( int iNoteRow, bool bDelay ) const if( s.m_iStartRow > iNoteRow && s.m_bDelay == bDelay ) break; } - return (int)i; + return static_cast(i); +} + +int TimingData::GetWarpSegmentIndexAtRow( int iNoteRow ) const +{ + unsigned i; + for( i=0; i iNoteRow ) + break; + } + return static_cast(i); +} + +bool TimingData::IsWarpAtRow( int iNoteRow ) const +{ + if( m_WarpSegments.empty() ) + return false; + + int i = GetWarpSegmentIndexAtRow( iNoteRow ); + const WarpSegment& s = m_WarpSegments[i]; + if( s.m_iStartRow <= iNoteRow && iNoteRow < BeatToNoteRow(s.m_fEndBeat) ) + { + if( m_StopSegments.empty() ) + { + return true; + } + if( GetStopAtRow(iNoteRow) != 0.0f || GetDelayAtRow(iNoteRow) != 0.0f ) + { + return false; + } + return true; + } + return false; } int TimingData::GetTimeSignatureSegmentIndexAtRow( int iRow ) const { - int i; - for (i=0; i < (int)(m_vTimeSignatureSegments.size()) - 1; i++ ) + unsigned i; + for (i=0; i < m_vTimeSignatureSegments.size() - 1; i++ ) if( m_vTimeSignatureSegments[i+1].m_iStartRow > iRow ) break; - return i; + return static_cast(i); +} + +int TimingData::GetComboSegmentIndexAtRow( int iRow ) const +{ + unsigned i; + for( i=0; i iRow ) + break; + } + return static_cast(i); +} + +BPMSegment& TimingData::GetBPMSegmentAtRow( int iNoteRow ) +{ + static BPMSegment empty; + if( m_BPMSegments.empty() ) + return empty; + + int i = GetBPMSegmentIndexAtRow( iNoteRow ); + return m_BPMSegments[i]; } TimeSignatureSegment& TimingData::GetTimeSignatureSegmentAtRow( int iRow ) @@ -339,28 +412,6 @@ int TimingData::GetTimeSignatureDenominatorAtRow( int iRow ) return GetTimeSignatureSegmentAtRow( iRow ).m_iDenominator; } -int TimingData::GetComboSegmentIndexAtRow( int iRow ) const -{ - unsigned i; - for( i=0; i iRow ) - break; - } - return (int)i; -} - -BPMSegment& TimingData::GetBPMSegmentAtRow( int iNoteRow ) -{ - static BPMSegment empty; - if( m_BPMSegments.empty() ) - return empty; - - int i = GetBPMSegmentIndexAtRow( iNoteRow ); - return m_BPMSegments[i]; -} - ComboSegment& TimingData::GetComboSegmentAtRow( int iRow ) { unsigned i; @@ -380,6 +431,16 @@ StopSegment& TimingData::GetStopSegmentAtRow( int iNoteRow, bool bDelay ) return m_StopSegments[i]; } +WarpSegment& TimingData::GetWarpSegmentAtRow( int iRow ) +{ + static WarpSegment empty; + if( m_WarpSegments.empty() ) + return empty; + + int i = GetWarpSegmentIndexAtRow( iRow ); + return m_WarpSegments[i]; +} + int TimingData::GetTickcountSegmentIndexAtRow( int iRow ) const { int i; @@ -411,150 +472,118 @@ void TimingData::GetBeatAndBPSFromElapsedTime( float fElapsedTime, float &fBeatO GetBeatAndBPSFromElapsedTimeNoOffset( fElapsedTime, fBeatOut, fBPSOut, bFreezeOut, bDelayOut, iWarpBeginOut, fWarpLengthOut ); } -void TimingData::GetBeatAndBPSFromElapsedTimeNoOffset( float fElapsedTime, float &fBeatOut, float &fBPSOut, bool &bFreezeOut, bool &bDelayOut, int &iWarpBeginOut, float &fWarpLengthOut ) const +enum { -// LOG->Trace( "GetBeatAndBPSFromElapsedTime( fElapsedTime = %f )", fElapsedTime ); - const float fTime = fElapsedTime; - fElapsedTime += m_fBeat0OffsetInSeconds; + FOUND_WARP, + FOUND_WARP_DESTINATION, + FOUND_BPM_CHANGE, + FOUND_STOP, + FOUND_MARKER, + NOT_FOUND +}; - for( unsigned i=0; i::const_iterator itBPMS = m_BPMSegments.begin(); + vector::const_iterator itWS = m_WarpSegments.begin(); + vector::const_iterator itSS = m_StopSegments.begin(); + + bFreezeOut = false; + bDelayOut = false; + + iWarpBeginOut = -1; + + int iLastRow = 0; + float fLastTime = -m_fBeat0OffsetInSeconds; + float fBPS = GetBPMAtRow(0) / 60.0; + + float bIsWarping = false; + float fWarpDestination = 0.0; + + for( ;; ) { - const int iStartRowThisSegment = m_BPMSegments[i].m_iStartRow; - const float fStartBeatThisSegment = NoteRowToBeat( iStartRowThisSegment ); - const bool bIsFirstBPMSegment = i==0; - const bool bIsLastBPMSegment = i==m_BPMSegments.size()-1; - const int iStartRowNextSegment = bIsLastBPMSegment ? MAX_NOTE_ROW : m_BPMSegments[i+1].m_iStartRow; - const float fStartBeatNextSegment = NoteRowToBeat( iStartRowNextSegment ); - const float fBPS = m_BPMSegments[i].m_fBPS; - - for( unsigned j=0; j= m_StopSegments[j].m_iStartRow ) - continue; - if( !bIsLastBPMSegment && m_StopSegments[j].m_iStartRow > iStartRowNextSegment ) - continue; - - // this freeze lies within this BPMSegment - const int iRowsBeatsSinceStartOfSegment = m_StopSegments[j].m_iStartRow - iStartRowThisSegment; - const float fBeatsSinceStartOfSegment = NoteRowToBeat(iRowsBeatsSinceStartOfSegment); - const float fFreezeStartSecond = fBeatsSinceStartOfSegment / fBPS; - - // modified for delays - if( !bIsDelay && fFreezeStartSecond >= fElapsedTime ) - break; - if( bIsDelay && fFreezeStartSecond > fElapsedTime ) - break; - - // the freeze segment is <= current time - fElapsedTime -= m_StopSegments[j].m_fStopSeconds; - - if( (fFreezeStartSecond >= fElapsedTime && !bIsDelay) || - (fFreezeStartSecond > fElapsedTime && bIsDelay) ) + iEventRow = BeatToNoteRow(fWarpDestination); + iEventType = FOUND_WARP_DESTINATION; + } + if( itBPMS != m_BPMSegments.end() && itBPMS->m_iStartRow < iEventRow ) + { + iEventRow = itBPMS->m_iStartRow; + iEventType = FOUND_BPM_CHANGE; + } + if( itSS != m_StopSegments.end() && itSS->m_iStartRow < iEventRow ) + { + iEventRow = itSS->m_iStartRow; + iEventType = FOUND_STOP; + } + if( itWS != m_WarpSegments.end() && itWS->m_iStartRow < iEventRow ) + { + iEventRow = itWS->m_iStartRow; + iEventType = FOUND_WARP; + } + if( iEventType == NOT_FOUND ) + { + break; + } + float fTimeToNextEvent = bIsWarping ? 0 : NoteRowToBeat( iEventRow - iLastRow ) / fBPS; + float fNextEventTime = fLastTime + fTimeToNextEvent; + if ( fElapsedTime < fNextEventTime ) + { + break; + } + fLastTime = fNextEventTime; + switch( iEventType ) + { + case FOUND_WARP_DESTINATION: + bIsWarping = false; + break; + case FOUND_BPM_CHANGE: + fBPS = itBPMS->m_fBPS; + itBPMS ++; + break; + case FOUND_STOP: { - // The time lies within the stop. - fBeatOut = NoteRowToBeat(m_StopSegments[j].m_iStartRow); - fBPSOut = fBPS; - bFreezeOut = !bIsDelay; - bDelayOut = bIsDelay; - //iWarpBeginOut = -1; - //fWarpLengthOut = -1; - return; + fTimeToNextEvent = itSS->m_fStopSeconds; + fNextEventTime = fLastTime + fTimeToNextEvent; + const bool bIsDelay = itSS->m_bDelay; + if ( fElapsedTime < fNextEventTime ) + { + bFreezeOut = !bIsDelay; + bDelayOut = bIsDelay; + fBeatOut = NoteRowToBeat( itSS->m_iStartRow ); + fBPSOut = fBPS; + return; + } + fLastTime = fNextEventTime; + itSS ++; } - } - - // by this point we should have the warps in their own place. - for( unsigned j=0; j= m_WarpSegments[j].m_iStartRow ) - continue; - if( !bIsLastBPMSegment && m_WarpSegments[j].m_iStartRow > iStartRowNextSegment ) - continue; - - /* - const int iRowsBeatsSinceStartOfSegment = m_WarpSegments[j].m_iStartRow - iStartRowThisSegment; - const float fBeatsSinceStartOfSegment = NoteRowToBeat(iRowsBeatsSinceStartOfSegment); - const float fWarpStartSecond = fBeatsSinceStartOfSegment / fBPS; - */ - - // the freeze segment is <= current time - //fElapsedTime -= m_WarpSegments[j].m_fWarpBeats; - - // this warp lies within this BPMSegment. - /* - if( fWarpStartSecond >= fElapsedTime ) + break; + case FOUND_WARP: + bIsWarping = true; + if( itWS->m_fEndBeat > fWarpDestination ) { - // this WarpSegment IS the current segment. - // don't know how to properly handle beatout -aj - //fBeatOut = NoteRowToBeat(m_WarpSegments[j].m_iStartRow); - fBeatOut = fStartBeatThisSegment + fElapsedTime*fBPS; - fBPSOut = m_BPMSegments[i+1].m_fBPS; - bFreezeOut = false; - bDelayOut = false; - iWarpBeginOut = m_WarpSegments[j].m_iStartRow; - fWarpLengthOut = m_WarpSegments[j].m_fWarpBeats; - return; + fWarpDestination = itWS->m_fEndBeat; } - */ + iWarpBeginOut = iEventRow; + fWarpDestinationOut = fWarpDestination; + itWS ++; + break; } - - const float fBeatsInThisSegment = fStartBeatNextSegment - fStartBeatThisSegment; - const float fSecondsInThisSegment = fBeatsInThisSegment / fBPS; - //if(fBPS < 0.0f) - /* - if(fStartBeatThisSegment == 445.500f || fStartBeatThisSegment == 449.500) - { - LOG->Trace( ssprintf("segment (beat %f) beats: %f / seconds: %f / BPS: %f",fStartBeatThisSegment,fBeatsInThisSegment,fSecondsInThisSegment,fBPS) ); - } - */ - if( bIsLastBPMSegment || fElapsedTime <= fSecondsInThisSegment ) - { - // this BPMSegment IS the current segment. - fBeatOut = fStartBeatThisSegment + fElapsedTime*fBPS; - fBPSOut = fBPS; - bFreezeOut = false; - bDelayOut = false; - //iWarpBeginOut; - //fWarpLengthOut; - return; - } - - // this BPMSegment is NOT the current segment. - fElapsedTime -= fSecondsInThisSegment; - // xxx: negative testing [aj] - /* - //if(fBPS < 0.0f) - if( (fStartBeatNextSegment >= 445.490f && fStartBeatNextSegment <= 453.72f) || fBPS < 0.0f ) - { - //LOG->Trace( ssprintf("beat %f is %f BPS (%f BPM)",fBeatOut,fBPSOut,fBPSOut*60.0f) ); - //LOG->Trace( ssprintf("start beat %f + elapsed time %f",fStartBeatThisSegment,fElapsedTime) ); - //LOG->Trace( ssprintf("elapsed time is now %f",fElapsedTime) ); - } - */ + iLastRow = iEventRow; } - // If we get here, something has gone wrong. Is everything sorted? - vector vBPMS = m_BPMSegments; - vector vSS = m_StopSegments; - vector vWS = m_WarpSegments; - vector vTSS = m_vTimeSignatureSegments; - vector vTS = m_TickcountSegments; - vector vCS = m_ComboSegments; - sort( vBPMS.begin(), vBPMS.end() ); - sort( vSS.begin(), vSS.end() ); - sort( vWS.begin(), vWS.end() ); - sort( vTSS.begin(), vTSS.end() ); - sort( vTS.begin(), vTS.end() ); - sort( vCS.begin(), vCS.end() ); - ASSERT_M( vBPMS == m_BPMSegments, "The BPM segments were not sorted!" ); - ASSERT_M( vSS == m_StopSegments, "The Stop segments were not sorted!" ); - ASSERT_M( vWS == m_WarpSegments, "The Warp segments were not sorted!" ); - ASSERT_M( vTSS == m_vTimeSignatureSegments, "The Time Signature segments were not sorted!" ); - ASSERT_M( vTS == m_TickcountSegments, "The Tickcount segments were not sorted!" ); - ASSERT_M( vCS == m_ComboSegments, "The Combo segments were not sorted!" ); - FAIL_M( ssprintf("Failed to find the appropriate segment for elapsed time %f.", fTime) ); + + fBeatOut = NoteRowToBeat( iLastRow ) + (fElapsedTime - fLastTime) * fBPS; + fBPSOut = fBPS; + } + + float TimingData::GetElapsedTimeFromBeat( float fBeat ) const { return TimingData::GetElapsedTimeFromBeatNoOffset( fBeat ) - PREFSMAN->m_fGlobalOffsetSeconds; @@ -562,61 +591,94 @@ float TimingData::GetElapsedTimeFromBeat( float fBeat ) const float TimingData::GetElapsedTimeFromBeatNoOffset( float fBeat ) const { - float fElapsedTime = 0; - fElapsedTime -= m_fBeat0OffsetInSeconds; - int iRow = BeatToNoteRow(fBeat); - for( unsigned j=0; j::const_iterator itBPMS = m_BPMSegments.begin(); + vector::const_iterator itWS = m_WarpSegments.begin(); + vector::const_iterator itSS = m_StopSegments.begin(); + + int iLastRow = 0; + float fLastTime = -m_fBeat0OffsetInSeconds; + float fBPS = GetBPMAtRow(0) / 60.0; + + float bIsWarping = false; + float fWarpDestination = 0.0; + + for( ;; ) { - /* A traditional stop has the beat happening before the stop. (>=) - * A Pump delay acts differently: the pause is before the beat. (>) - */ - if( ( m_StopSegments[j].m_iStartRow >= iRow && !m_StopSegments[j].m_bDelay ) || - ( m_StopSegments[j].m_iStartRow > iRow && m_StopSegments[j].m_bDelay ) ) + int iEventRow = INT_MAX; + int iEventType = NOT_FOUND; + if( bIsWarping && BeatToNoteRow(fWarpDestination) < iEventRow ) + { + iEventRow = BeatToNoteRow(fWarpDestination); + iEventType = FOUND_WARP_DESTINATION; + } + if( itBPMS != m_BPMSegments.end() && itBPMS->m_iStartRow < iEventRow ) + { + iEventRow = itBPMS->m_iStartRow; + iEventType = FOUND_BPM_CHANGE; + } + if( itSS != m_StopSegments.end() && itSS->m_bDelay && itSS->m_iStartRow < iEventRow ) // delays (come before marker) + { + iEventRow = itSS->m_iStartRow; + iEventType = FOUND_STOP; + } + if( BeatToNoteRow(fBeat) < iEventRow ) + { + iEventRow = BeatToNoteRow(fBeat); + iEventType = FOUND_MARKER; + } + if( itSS != m_StopSegments.end() && !itSS->m_bDelay && itSS->m_iStartRow < iEventRow ) // stops (come after marker) + { + iEventRow = itSS->m_iStartRow; + iEventType = FOUND_STOP; + } + if( itWS != m_WarpSegments.end() && itWS->m_iStartRow < iEventRow ) + { + iEventRow = itWS->m_iStartRow; + iEventType = FOUND_WARP; + } + float fTimeToNextEvent = bIsWarping ? 0 : NoteRowToBeat( iEventRow - iLastRow ) / fBPS; + float fNextEventTime = fLastTime + fTimeToNextEvent; + fLastTime = fNextEventTime; + switch( iEventType ) + { + case FOUND_WARP_DESTINATION: + bIsWarping = false; + break; + case FOUND_BPM_CHANGE: + fBPS = itBPMS->m_fBPS; + itBPMS ++; + break; + case FOUND_STOP: + fTimeToNextEvent = itSS->m_fStopSeconds; + fNextEventTime = fLastTime + fTimeToNextEvent; + fLastTime = fNextEventTime; + itSS ++; + break; + case FOUND_MARKER: + return fLastTime; + case FOUND_WARP: + bIsWarping = true; + if( itWS->m_fEndBeat > fWarpDestination ) + { + fWarpDestination = itWS->m_fEndBeat; + } + itWS ++; break; - fElapsedTime += m_StopSegments[j].m_fStopSeconds; - } - - for( unsigned i=0; i 0 ); ASSERT( iStartIndex >= 0 ); ASSERT( iStartIndex < iEndIndex ); - + for ( unsigned i = 0; i < m_BPMSegments.size(); i++ ) { const int iSegStart = m_BPMSegments[i].m_iStartRow; @@ -627,7 +689,7 @@ void TimingData::ScaleRegion( float fScale, int iStartIndex, int iEndIndex ) else m_BPMSegments[i].m_iStartRow = lrintf( (iSegStart - iStartIndex) * fScale ) + iStartIndex; } - + for( unsigned i = 0; i < m_StopSegments.size(); i++ ) { const int iSegStartRow = m_StopSegments[i].m_iStartRow; @@ -638,6 +700,72 @@ void TimingData::ScaleRegion( float fScale, int iStartIndex, int iEndIndex ) else m_StopSegments[i].m_iStartRow = lrintf((iSegStartRow - iStartIndex) * fScale) + iStartIndex; } + + for( unsigned i = 0; i < m_WarpSegments.size(); i++ ) + { + const int iSegStartRow = m_WarpSegments[i].m_iStartRow; + const int iSegEndRow = BeatToNoteRow( m_WarpSegments[i].m_fEndBeat ); + if( iSegEndRow >= iStartIndex ) + { + if( iSegEndRow > iEndIndex ) + m_WarpSegments[i].m_fEndBeat += NoteRowToBeat(lrintf((iEndIndex - iStartIndex) * (fScale - 1))); + else + m_WarpSegments[i].m_fEndBeat = NoteRowToBeat(lrintf((iSegEndRow - iStartIndex) * fScale) + iStartIndex); + } + if( iSegStartRow < iStartIndex ) + continue; + else if( iSegStartRow > iEndIndex ) + m_WarpSegments[i].m_iStartRow += lrintf((iEndIndex - iStartIndex) * (fScale - 1)); + else + m_WarpSegments[i].m_iStartRow = lrintf((iSegStartRow - iStartIndex) * fScale) + iStartIndex; + } + + for ( unsigned i = 0; i < m_TickcountSegments.size(); i++ ) + { + const int iSegStart = m_TickcountSegments[i].m_iStartRow; + if( iSegStart < iStartIndex ) + continue; + else if( iSegStart > iEndIndex ) + m_TickcountSegments[i].m_iStartRow += lrintf( (iEndIndex - iStartIndex) * (fScale - 1) ); + else + m_TickcountSegments[i].m_iStartRow = lrintf( (iSegStart - iStartIndex) * fScale ) + iStartIndex; + } + + for ( unsigned i = 0; i < m_ComboSegments.size(); i++ ) + { + const int iSegStart = m_ComboSegments[i].m_iStartRow; + if( iSegStart < iStartIndex ) + continue; + else if( iSegStart > iEndIndex ) + m_ComboSegments[i].m_iStartRow += lrintf( (iEndIndex - iStartIndex) * (fScale - 1) ); + else + m_ComboSegments[i].m_iStartRow = lrintf( (iSegStart - iStartIndex) * fScale ) + iStartIndex; + } + + // adjust BPM changes to preserve timing + if( bAdjustBPM ) + { + int iNewEndIndex = lrintf( (iEndIndex - iStartIndex) * fScale ) + iStartIndex; + float fEndBPMBeforeScaling = GetBPMAtRow(iNewEndIndex); + + // adjust BPM changes "between" iStartIndex and iNewEndIndex + for ( unsigned i = 0; i < m_BPMSegments.size(); i++ ) + { + const int iSegStart = m_BPMSegments[i].m_iStartRow; + if( iSegStart <= iStartIndex ) + continue; + else if( iSegStart >= iNewEndIndex ) + continue; + else + m_BPMSegments[i].m_fBPS *= fScale; + } + + // set BPM at iStartIndex and iNewEndIndex. + SetBPMAtRow( iStartIndex, GetBPMAtRow(iStartIndex) * fScale ); + SetBPMAtRow( iNewEndIndex, fEndBPMBeforeScaling ); + + } + } void TimingData::InsertRows( int iStartRow, int iRowsToAdd ) @@ -658,6 +786,16 @@ void TimingData::InsertRows( int iStartRow, int iRowsToAdd ) stop.m_iStartRow += iRowsToAdd; } + for( unsigned i = 0; i < m_WarpSegments.size(); i++ ) + { + WarpSegment &warp = m_WarpSegments[i]; + if( BeatToNoteRow(warp.m_fEndBeat) >= iStartRow ) + warp.m_fEndBeat += NoteRowToBeat(iRowsToAdd); + if( warp.m_iStartRow < iStartRow ) + continue; + warp.m_iStartRow += iRowsToAdd; + } + for( unsigned i = 0; i < m_vTimeSignatureSegments.size(); i++ ) { TimeSignatureSegment &time = m_vTimeSignatureSegments[i]; @@ -739,6 +877,26 @@ void TimingData::DeleteRows( int iStartRow, int iRowsToDelete ) stop.m_iStartRow -= iRowsToDelete; } + for( unsigned i = 0; i < m_WarpSegments.size(); i++ ) + { + WarpSegment &warp = m_WarpSegments[i]; + + if( BeatToNoteRow(warp.m_fEndBeat) >= iStartRow ) + warp.m_fEndBeat = max( NoteRowToBeat(iStartRow), warp.m_fEndBeat - NoteRowToBeat(iRowsToDelete) ); + + if( warp.m_iStartRow < iStartRow ) + continue; + + if( warp.m_iStartRow < iStartRow+iRowsToDelete ) + { + m_WarpSegments.erase( m_WarpSegments.begin()+i, m_WarpSegments.begin()+i+1 ); + --i; + continue; + } + + warp.m_iStartRow -= iRowsToDelete; + } + for( unsigned i = 0; i < m_vTimeSignatureSegments.size(); i++ ) { TimeSignatureSegment &time = m_vTimeSignatureSegments[i]; @@ -866,6 +1024,7 @@ class LunaTimingData: public Luna public: static int HasStops( T* p, lua_State *L ) { lua_pushboolean(L, p->HasStops()); return 1; } static int HasBPMChanges( T* p, lua_State *L ) { lua_pushboolean(L, p->HasBpmChanges()); return 1; } + static int HasWarps( T* p, lua_State *L ) { lua_pushboolean(L, p->HasWarps()); return 1; } static int GetStops( T* p, lua_State *L ) { vector vStops; @@ -940,6 +1099,7 @@ public: { ADD_METHOD( HasStops ); ADD_METHOD( HasBPMChanges ); + ADD_METHOD( HasWarps ); ADD_METHOD( GetStops ); ADD_METHOD( GetDelays ); ADD_METHOD( GetBPMs ); diff --git a/src/TimingData.h b/src/TimingData.h index d15703b7d5..f61afb6d9c 100644 --- a/src/TimingData.h +++ b/src/TimingData.h @@ -318,25 +318,41 @@ struct TimeSignatureSegment struct WarpSegment { /** - * @brief Creates a simple Warp Segment with default values. + * @brief Create a simple Warp Segment with default values. * * It is best to override the values as soon as possible. */ - WarpSegment() : m_iStartRow(-1), m_fWarpBeats(-1) { } + WarpSegment() : m_iStartRow(-1), m_fEndBeat(-1) { } /** - * @brief Creates a Warp Segment with the specified starting row and row to warp to. + * @brief Create a Warp Segment with the specified starting row and row to warp to. * @param s the starting row of this segment. * @param r the row to warp to. */ - WarpSegment( int s, int r ): m_iStartRow(max(0, s)), - m_fWarpBeats(max(0, NoteRowToBeat(r))) {} + WarpSegment( int s, int r ): m_iStartRow(max(0, (s < r ? s : r))), + m_fEndBeat(max(0, NoteRowToBeat((r > s ? r : s)))) {} /** * @brief Creates a Warp Segment with the specified starting row and beat to warp to. * @param s the starting row of this segment. * @param b the beat to warp to. */ WarpSegment( int s, float b ): m_iStartRow(max(0, s)), - m_fWarpBeats(max(0, b)) {} + m_fEndBeat(max(0, b)) {} + /** + * @brief Create a Warp Segment with the specified starting beat and row to warp to. + * @param s the starting beat in this segment. + * @param r the row to warp to. + */ + WarpSegment( float s, int r ): + m_iStartRow(max(0, BeatToNoteRow(s))), + m_fEndBeat(max(0, NoteRowToBeat(r))) {} + /** + * @brief Creates a Warp Segment with the specified starting beat and beat to warp to. + * @param s the starting beat of this segment. + * @param b the beat to warp to. + */ + WarpSegment( float s, float b ): + m_iStartRow(max(0, BeatToNoteRow((s < b ? s : b)))), + m_fEndBeat(max(0, (b > s ? b : s))) {} /** * @brief The row in which the WarpSegment activates. */ @@ -344,7 +360,7 @@ struct WarpSegment /** * @brief The beat to warp to. */ - float m_fWarpBeats; + float m_fEndBeat; /** * @brief Compares two WarpSegments to see if they are equal to each other. * @param other the other WarpSegment to compare to. @@ -353,7 +369,7 @@ struct WarpSegment bool operator==( const WarpSegment &other ) const { COMPARE( m_iStartRow ); - COMPARE( m_fWarpBeats ); + COMPARE( m_fEndBeat ); return true; } /** @@ -370,7 +386,7 @@ struct WarpSegment bool operator<( const WarpSegment &other ) const { return m_iStartRow < other.m_iStartRow || - ( m_iStartRow == other.m_iStartRow && m_fWarpBeats < other.m_fWarpBeats ); + ( m_iStartRow == other.m_iStartRow && m_fEndBeat < other.m_fEndBeat ); } /** * @brief Compares two WarpSegments to see if one is less than or equal to the other. @@ -875,19 +891,71 @@ public: * @param seg the new TimeSignatureSegment. */ void AddTimeSignatureSegment( const TimeSignatureSegment &seg ); - /** - * @brief Determine the row to warp to. - * @param iWarpBeginRow The row you start on. - * @return the row you warp to. + * @brief Determine the beat to warp to. + * @param iRow The row you start on. + * @return the beat you warp to. */ - int GetWarpToRow( int iWarpBeginRow ) const; + float GetWarpAtRow( int iRow ) const; + /** + * @brief Determine the beat to warp to. + * @param fBeat The beat you start on. + * @return the beat you warp to. + */ + float GetWarpAtBeat( float fBeat ) const { return GetWarpAtRow( BeatToNoteRow( fBeat ) ); } + /** + * @brief Set the beat to warp to given a starting row. + * @param iRow The row to start on. + * @param fNew The destination beat. + */ + void SetWarpAtRow( int iRow, float fNew ); + /** + * @brief Set the beat to warp to given a starting beat. + * @param fBeat The beat to start on. + * @param fNew The destination beat. + */ + void SetWarpAtBeat( float fBeat, float fNew ) { SetWarpAtRow( BeatToNoteRow( fBeat ), fNew ); } + /** + * @brief Retrieve the WarpSegment at the specified row. + * @param iRow the row to focus on. + * @return the WarpSegment in question. + */ + WarpSegment& GetWarpSegmentAtRow( int iRow ); + /** + * @brief Retrieve the WarpSegment at the specified beat. + * @param fBeat the beat to focus on. + * @return the WarpSegment in question. + */ + WarpSegment& GetWarpSegmentAtBeat( float fBeat ) { return GetWarpSegmentAtRow( BeatToNoteRow( fBeat ) ); } + /** + * @brief Retrieve the index of the WarpSegment at the specified row. + * @param iRow the row to focus on. + * @return the index in question. + */ + int GetWarpSegmentIndexAtRow( int iRow ) const; + /** + * @brief Retrieve the index of the WarpSegment at the specified beat. + * @param fBeat the beat to focus on. + * @return the index in question. + */ + int GetWarpSegmentIndexAtBeat( float fBeat ) const { return GetWarpSegmentIndexAtRow( BeatToNoteRow( fBeat ) ); } + /** + * @brief Checks if the row is inside a warp. + * @param iRow the row to focus on. + * @return true if the row is inside a warp, false otherwise. + */ + bool IsWarpAtRow( int iRow ) const; + /** + * @brief Checks if the beat is inside a warp. + * @param fBeat the beat to focus on. + * @return true if the row is inside a warp, false otherwise. + */ + bool IsWarpAtBeat( float fBeat ) const { return IsWarpAtRow( BeatToNoteRow( fBeat ) ); } /** * @brief Add the WarpSegment to the TimingData. * @param seg the new WarpSegment. */ void AddWarpSegment( const WarpSegment &seg ); - /** * @brief Retrieve the Tickcount at the given row. * @param iNoteRow the row in question. @@ -1011,7 +1079,7 @@ public: } float GetElapsedTimeFromBeat( float fBeat ) const; - void GetBeatAndBPSFromElapsedTimeNoOffset( float fElapsedTime, float &fBeatOut, float &fBPSOut, bool &bFreezeOut, bool &bDelayOut, int &iWarpBeginOut, float &iWarpLengthOut ) const; + void GetBeatAndBPSFromElapsedTimeNoOffset( float fElapsedTime, float &fBeatOut, float &fBPSOut, bool &bFreezeOut, bool &bDelayOut, int &iWarpBeginOut, float &fWarpDestinationOut ) const; float GetBeatFromElapsedTimeNoOffset( float fElapsedTime ) const // shortcut for places that care only about the beat { float fBeat, fThrowAway, fThrowAway2; @@ -1073,7 +1141,7 @@ public: */ bool operator!=( const TimingData &other ) { return !operator==(other); } - void ScaleRegion( float fScale = 1, int iStartRow = 0, int iEndRow = MAX_NOTE_ROW ); + void ScaleRegion( float fScale = 1, int iStartRow = 0, int iEndRow = MAX_NOTE_ROW, bool bAdjustBPM = false ); void InsertRows( int iStartRow, int iRowsToAdd ); void DeleteRows( int iStartRow, int iRowsToDelete ); diff --git a/src/Trail.cpp b/src/Trail.cpp index bbd54bf4bc..073d266c93 100644 --- a/src/Trail.cpp +++ b/src/Trail.cpp @@ -189,11 +189,11 @@ void Trail::GetDisplayBpms( DisplayBpms &AddTo ) const ASSERT( pSong ); switch( pSong->m_DisplayBPMType ) { - case Song::DISPLAY_ACTUAL: - case Song::DISPLAY_SPECIFIED: + case DISPLAY_BPM_ACTUAL: + case DISPLAY_BPM_SPECIFIED: pSong->GetDisplayBpms( AddTo ); break; - case Song::DISPLAY_RANDOM: + case DISPLAY_BPM_RANDOM: AddTo.Add( -1 ); break; DEFAULT_FAIL( pSong->m_DisplayBPMType ); diff --git a/src/Trail.h b/src/Trail.h index 10fa10d9b7..1aaa74b8a2 100644 --- a/src/Trail.h +++ b/src/Trail.h @@ -17,6 +17,8 @@ struct TrailEntry TrailEntry(): pSong(NULL), pSteps(NULL), + Modifiers(""), + Attacks(), bSecret(false), iLowMeter(-1), iHighMeter(-1), @@ -69,11 +71,11 @@ public: * * This used to call Init(), which is still available. */ Trail(): m_StepsType(StepsType_Invalid), + m_CourseType(CourseType_Invalid), m_CourseDifficulty(Difficulty_Invalid), - m_iSpecifiedMeter(-1), m_bRadarValuesCached(false) - { - m_vEntries.clear(); - } + m_vEntries(), m_iSpecifiedMeter(-1), + m_bRadarValuesCached(false), m_CachedRadarValues(), + m_CachedObject() {} void Init() { m_StepsType = StepsType_Invalid; diff --git a/src/TrailUtil.h b/src/TrailUtil.h index adaa71b6b3..12c4a7dd76 100644 --- a/src/TrailUtil.h +++ b/src/TrailUtil.h @@ -33,7 +33,8 @@ class TrailID mutable CachedObjectPointer m_Cache; public: - TrailID() { Unset(); } + TrailID(): st(StepsType_Invalid), cd(Difficulty_Invalid), + m_Cache() { m_Cache.Unset(); } void Unset() { FromTrail(NULL); } void FromTrail( const Trail *p ); Trail *ToTrail( const Course *p, bool bAllowNull ) const; diff --git a/src/UnlockManager.cpp b/src/UnlockManager.cpp index b85c908118..47af088551 100644 --- a/src/UnlockManager.cpp +++ b/src/UnlockManager.cpp @@ -33,7 +33,8 @@ static const char *UnlockRequirementNames[] = "ExtraCleared", "ExtraFailed", "Toasties", - "StagesCleared" + "StagesCleared", + "NumberUnlocked" }; XToString( UnlockRequirement ); StringToX( UnlockRequirement ); @@ -294,6 +295,7 @@ void UnlockManager::GetPoints( const Profile *pProfile, float fScores[NUM_Unlock fScores[UnlockRequirement_SongPoints] = GetSongPoints( pProfile ); fScores[UnlockRequirement_DancePoints] = (float) pProfile->m_iTotalDancePoints; fScores[UnlockRequirement_StagesCleared] = (float) pProfile->GetTotalNumSongsPassed(); + fScores[UnlockRequirement_NumUnlocked] = (float) GetNumUnlocked(); } /* Return true if all songs and/or courses referenced by an unlock are available. */ @@ -469,7 +471,7 @@ void UnlockManager::Load() } } - // Make sure that we don't have duplicate unlock IDs. This can cause problems + // Make sure that we don't have duplicate unlock IDs. This can cause problems // with UnlockCelebrate and with codes. FOREACH_CONST( UnlockEntry, m_UnlockEntries, ue ) FOREACH_CONST( UnlockEntry, m_UnlockEntries, ue2 ) @@ -514,9 +516,7 @@ void UnlockManager::Load() } } - // // Log unlocks - // FOREACH_CONST( UnlockEntry, m_UnlockEntries, e ) { RString str = ssprintf( "Unlock: %s; ", join("\n",e->m_cmd.m_vsArgs).c_str() ); @@ -558,7 +558,7 @@ float UnlockManager::PointsUntilNextUnlock( UnlockRequirement t ) const for( unsigned a=0; a fScores[t] ) fSmallestPoints = min( fSmallestPoints, m_UnlockEntries[a].m_fRequirement[t] ); - + if( fSmallestPoints == FLT_MAX ) return 0; // no match found return fSmallestPoints - fScores[t]; @@ -673,7 +673,19 @@ public: if( pSong ) { pSong->PushSelf(L); return 1; } return 0; } + static int GetCourse( T* p, lua_State *L ) + { + Course *pCourse = p->m_Course.ToCourse(); + if( pCourse ) { pCourse->PushSelf(L); return 1; } + return 0; + } + static int GetCode( T* p, lua_State *L ) + { + lua_pushstring( L, p->m_sEntryID ); + return 1; + } + // internal static int GetArgs( T* p, lua_State *L ) { Command cmd; @@ -701,11 +713,13 @@ public: LunaUnlockEntry() { ADD_METHOD( IsLocked ); + ADD_METHOD( GetCode ); ADD_METHOD( GetDescription ); ADD_METHOD( GetUnlockRewardType ); ADD_METHOD( GetRequirement ); ADD_METHOD( GetRequirePassHardSteps ); ADD_METHOD( GetSong ); + ADD_METHOD( GetCourse ); ADD_METHOD( song ); ADD_METHOD( steps ); ADD_METHOD( course ); @@ -748,7 +762,7 @@ public: static int GetStepsUnlockedByEntryID( T* p, lua_State *L ) { - // Return the song each steps are associated with, too. + // Return the Song each Steps are associated with, too. vector apSongs; vector apDifficulty; UNLOCKMAN->GetStepsUnlockedByEntryID( apSongs, apDifficulty, SArg(1) ); @@ -757,20 +771,36 @@ public: return 2; } + static int GetPoints( T* p, lua_State *L ) { + float fScores[NUM_UnlockRequirement]; + UNLOCKMAN->GetPoints( PROFILEMAN->GetMachineProfile(), fScores ); + lua_pushnumber( L, fScores[Enum::Check(L, 1)] ); + return 1; + } + + static int GetPointsForProfile( T* p, lua_State *L ) { + float fScores[NUM_UnlockRequirement]; + UNLOCKMAN->GetPoints( Luna::check(L,1), fScores ); + lua_pushnumber( L, fScores[Enum::Check(L, 2)] ); + return 1; + } + LunaUnlockManager() { - ADD_METHOD( GetPointsUntilNextUnlock ); + ADD_METHOD( AnyUnlocksToCelebrate ); ADD_METHOD( FindEntryID ); - ADD_METHOD( UnlockEntryID ); - ADD_METHOD( UnlockEntryIndex ); - ADD_METHOD( PreferUnlockEntryID ); ADD_METHOD( GetNumUnlocks ); ADD_METHOD( GetNumUnlocked ); - ADD_METHOD( GetUnlockEntryIndexToCelebrate ); - ADD_METHOD( AnyUnlocksToCelebrate ); - ADD_METHOD( GetUnlockEntry ); + ADD_METHOD( GetPoints ); + ADD_METHOD( GetPointsForProfile ); + ADD_METHOD( GetPointsUntilNextUnlock ); ADD_METHOD( GetSongsUnlockedByEntryID ); ADD_METHOD( GetStepsUnlockedByEntryID ); + ADD_METHOD( GetUnlockEntry ); + ADD_METHOD( GetUnlockEntryIndexToCelebrate ); + ADD_METHOD( PreferUnlockEntryID ); + ADD_METHOD( UnlockEntryID ); + ADD_METHOD( UnlockEntryIndex ); } }; diff --git a/src/UnlockManager.h b/src/UnlockManager.h index 9874e5401c..6c085e6680 100644 --- a/src/UnlockManager.h +++ b/src/UnlockManager.h @@ -25,6 +25,7 @@ enum UnlockRequirement UnlockRequirement_ExtraFailed, UnlockRequirement_Toasties, UnlockRequirement_StagesCleared, + UnlockRequirement_NumUnlocked, NUM_UnlockRequirement, UnlockRequirement_Invalid, }; @@ -57,9 +58,10 @@ public: * * m_sEntryID starts as an empty string. It will be filled automatically * if not specified. */ - UnlockEntry(): m_Type(UnlockRewardType_Invalid), - m_dc(Difficulty_Invalid), m_bRequirePassHardSteps(false), - m_bRoulette(false), m_sEntryID(RString("")) + UnlockEntry(): m_Type(UnlockRewardType_Invalid), m_cmd(), + m_Song(), m_dc(Difficulty_Invalid), m_Course(), + m_bRequirePassHardSteps(false), m_bRoulette(false), + m_sEntryID(RString("")) { ZERO( m_fRequirement ); } @@ -99,7 +101,7 @@ public: // Option is locked due to a #SELECTABLE tag. #define LOCKED_SELECTABLE 0x4 -// Option is disabled by the operator. (For courses, this means that a song in the +// Option is disabled by the operator. (For courses, this means that a song in the // course is disabled.) #define LOCKED_DISABLED 0x8 diff --git a/src/arch/ArchHooks/ArchHooks_Xbox.cpp b/src/arch/ArchHooks/ArchHooks_Xbox.cpp deleted file mode 100644 index ff4c37400b..0000000000 --- a/src/arch/ArchHooks/ArchHooks_Xbox.cpp +++ /dev/null @@ -1,227 +0,0 @@ -#include "global.h" -#include "ArchHooks_Xbox.h" -#include "dsound.h" // for timeGetTime -#include "archutils/Xbox/custom_launch_params.h" // for XGetCustomLaunchData -#include "archutils/Xbox/VirtualMemory.h" - -#include // for XNetStartup -#include // for _set_new_handler and _set_new_mode - -typedef struct _UNICODE_STRING {unsigned short Length; unsigned short MaximumLength; PSTR Buffer;} UNICODE_STRING,*PUNICODE_STRING; -extern "C" XBOXAPI DWORD WINAPI IoCreateSymbolicLink(IN PUNICODE_STRING SymbolicLinkName,IN PUNICODE_STRING DeviceName); - -static bool g_bTimerInitialized; -static DWORD g_iStartTime; - -static void InitTimer() -{ - if( g_bTimerInitialized ) - return; - g_bTimerInitialized = true; - - g_iStartTime = timeGetTime(); -} - -int64_t ArchHooks::GetMicrosecondsSinceStart( bool bAccurate ) -{ - if( !g_bTimerInitialized ) - InitTimer(); - - int64_t ret = (timeGetTime() - g_iStartTime) * int64_t(1000); - if( bAccurate ) - { - ret = FixupTimeIfLooped( ret ); - ret = FixupTimeIfBackwards( ret ); - } - - return ret; -} - -void MountDriveLetter(char drive, char* szDevice, char* szDir) -{ - char szSourceDevice[256]; - char szDestinationDrive[16]; - sprintf(szDestinationDrive, "\\??\\%c:", drive); - sprintf(szSourceDevice,"\\Device\\%s",szDevice); - if (*szDir != 0x00 && *szDir != '\\') - { - strcat(szSourceDevice, "\\"); - strcat(szSourceDevice, szDir); - } - - UNICODE_STRING LinkName = - { - strlen(szDestinationDrive), - strlen(szDestinationDrive) + 1, - szDestinationDrive - }; - UNICODE_STRING DeviceName = - { - strlen(szSourceDevice), - strlen(szSourceDevice) + 1, - szSourceDevice - }; - - IoCreateSymbolicLink(&LinkName, &DeviceName); -} - -void MountDrives() -{ - MountDriveLetter('A', "Cdrom0", "\\"); - MountDriveLetter('E', "Harddisk0\\Partition1", "\\"); - MountDriveLetter('C', "Harddisk0\\Partition2", "\\"); - MountDriveLetter('X', "Harddisk0\\Partition3", "\\"); - MountDriveLetter('Y', "Harddisk0\\Partition4", "\\"); - MountDriveLetter('F', "Harddisk0\\Partition6", "\\"); - MountDriveLetter('G', "Harddisk0\\Partition7", "\\"); -} - -bool SetupNetwork() -{ -#if !defined(WITHOUT_NETWORKING) - XNetStartupParams xnsp; - memset(&xnsp, 0, sizeof(xnsp)); - xnsp.cfgSizeOfStruct = sizeof(XNetStartupParams); - xnsp.cfgFlags = XNET_STARTUP_BYPASS_SECURITY; - - INT err = XNetStartup(&xnsp); - - return err == 0; -#else - return true; -#endif -} - -// if Xbox has 128 meg RAM make sure its used -void EnableExtraRAM() -{ - LARGE_INTEGER regVal; - - // Verify that we have 128 megs available - MEMORYSTATUS memStatus; - GlobalMemoryStatus( &memStatus ); - if( memStatus.dwTotalPhys < (100 * 1024 * 1024) ) - return; - - // Grab the existing default type (0x02FF) - READMSRREG( 0x02FF, ®Val ); - - // Set the default to WriteBack (0x06) - regVal.LowPart = (regVal.LowPart & ~0xFF) | 0x06; - WRITEMSRREG( 0x02FF, regVal ); -} - -void InitDevices() -{ - XDEVICE_PREALLOC_TYPE xdpt[] = {{XDEVICE_TYPE_GAMEPAD, 4}, {XDEVICE_TYPE_MEMORY_UNIT, 2}}; - XInitDevices( sizeof(xdpt) / sizeof(XDEVICE_PREALLOC_TYPE), xdpt ); -} - -ArchHooks_Xbox::ArchHooks_Xbox() -{ - _set_new_handler(NoMemory); - _set_new_mode(1); - SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER) CheckPageFault); - - XGetCustomLaunchData(); - - // mount A to DVD, C, E, F, G, X, and Y to the harddisk - MountDrives(); - - SetupNetwork(); - - EnableExtraRAM(); - - InitDevices(); -} - -static RString XLangID( DWORD Lang ) -{ - switch(Lang) - { - case XC_LANGUAGE_JAPANESE:return "JA"; - case XC_LANGUAGE_GERMAN:return "DE"; - case XC_LANGUAGE_FRENCH:return "FR"; - case XC_LANGUAGE_SPANISH:return "ES"; - case XC_LANGUAGE_ITALIAN:return "IT"; - case XC_LANGUAGE_KOREAN:return "KO"; - case XC_LANGUAGE_TCHINESE:return "ZH"; - case XC_LANGUAGE_PORTUGUESE:return "PT"; - default: - case XC_LANGUAGE_ENGLISH: return "EN"; - } -} - -RString ArchHooks::GetPreferredLanguage() -{ - return XLangID( XGetLanguage() ); -} - -ArchHooks_Xbox::~ArchHooks_Xbox() -{ - // We only want to reboot the Xbox in a software manner. - XLaunchNewImage( NULL, NULL ); -} - -void ArchHooks_Xbox::DumpDebugInfo() -{ - -} - -float ArchHooks_Xbox::GetDisplayAspectRatio() -{ - // xxx: does this take into account system settings? -aj - float fDisplayAspectRatio = 4.0 / 3.0; - IDirect3DSurface8 *pBackBuffer = NULL; - if( D3D__pDevice->GetBackBuffer( -1, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer) == D3D_OK ) - { - D3DSURFACE_DESC Desc; - if( pBackBuffer->GetDesc(&Desc) == D3D_OK ) - { - fDisplayAspectRatio = (float)Desc.Width / (float)Desc.Height; - } - pBackBuffer->Release(); - } - return fDisplayAspectRatio; -} - -#include "RageFileManager.h" - -void ArchHooks::MountInitialFilesystems( const RString &sDirOfExecutable ) -{ - FILEMAN->Mount( "dir", "D:\\", "/" ); -} - -void ArchHooks::MountUserFilesystems( const RString &sDirOfExecutable ) -{ - // Mount everything game-writable (not counting the editor) to the game title persistent data region ( /E/TDATA/33342530/ ) - FILEMAN->Mount( "dir", "T:/Cache", "/Cache" ); - FILEMAN->Mount( "dir", "T:/Logs", "/Logs" ); - FILEMAN->Mount( "dir", "T:/Save", "/Save" ); - FILEMAN->Mount( "dir", "T:/Screenshots", "/Screenshots" ); -} - -/* - * (c) 2003-2004 Glenn Maynard, Chris Danford - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ diff --git a/src/arch/ArchHooks/ArchHooks_Xbox.h b/src/arch/ArchHooks/ArchHooks_Xbox.h deleted file mode 100644 index a1e349db8d..0000000000 --- a/src/arch/ArchHooks/ArchHooks_Xbox.h +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef ARCH_HOOKS_XBOX_H -#define ARCH_HOOKS_XBOX_H - -#include "ArchHooks.h" -class RageMutex; - -class ArchHooks_Xbox: public ArchHooks -{ -public: - ArchHooks_Xbox(); - ~ArchHooks_Xbox(); - RString GetArchName() { return "Xbox"; } - void DumpDebugInfo(); - float GetDisplayAspectRatio(); - - //void MountInitialFilesystems( const RString &sDirOfExecutable ); -}; - -// XXX: This stuff doesn't belong here. Hide it in ArchHooks. - -// Read a 64 bit MSR register -inline void READMSRREG( UINT32 reg, LARGE_INTEGER *val ) -{ -UINT32 lowPart, highPart; - __asm - { - mov ecx, reg - rdmsr - mov lowPart, eax - mov highPart, edx - }; - - val->LowPart = lowPart; - val->HighPart = highPart; -} - -// Write a 64 bit MSR register -inline void WRITEMSRREG( UINT32 reg, LARGE_INTEGER val ) -{ - __asm - { - mov ecx, reg - mov eax, val.LowPart - mov edx, val.HighPart - wrmsr - }; -} - -#ifdef ARCH_HOOKS -#error "More than one ArchHooks selected!" -#endif -#define ARCH_HOOKS ArchHooks_Xbox - -#endif -/* - * (c) 2002-2004 Glenn Maynard, Chris Danford - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ diff --git a/src/arch/InputHandler/InputHandler.h b/src/arch/InputHandler/InputHandler.h index 307f78617b..3564a73552 100644 --- a/src/arch/InputHandler/InputHandler.h +++ b/src/arch/InputHandler/InputHandler.h @@ -25,7 +25,7 @@ public: static void Create( const RString &sDrivers, vector &apAdd ); static DriverList m_pDriverList; - InputHandler(): m_iInputsSinceUpdate(0) {} + InputHandler(): m_LastUpdate(), m_iInputsSinceUpdate(0) {} virtual ~InputHandler() { } virtual void Update() { } virtual bool DevicesChanged() { return false; } diff --git a/src/arch/InputHandler/InputHandler_DirectInput.cpp b/src/arch/InputHandler/InputHandler_DirectInput.cpp index 6dedbeba21..a0a9316e64 100644 --- a/src/arch/InputHandler/InputHandler_DirectInput.cpp +++ b/src/arch/InputHandler/InputHandler_DirectInput.cpp @@ -413,12 +413,21 @@ void InputHandler_DInput::UpdatePolled( DIDevice &device, const RageTimer &tm ) break; case DIMOFS_Z: { - neg = MOUSE_WHEELUP; pos = MOUSE_WHEELDOWN; + neg = MOUSE_WHEELDOWN; pos = MOUSE_WHEELUP; val = state.lZ; + //LOG->Trace("MouseWheel polled: %i",val); + INPUTFILTER->UpdateMouseWheel(val); - float l = SCALE( int(val), -120.0f, 120.0f, 0.0f, 1.0f ); - ButtonPressed( DeviceInput(dev, neg, max(-l,0), tm) ); - ButtonPressed( DeviceInput(dev, pos, max(+l,0), tm) ); + /* + if( (int)val != 0 ) + { + // positive values: WheelUp + // negative values: WheelDown + float l = SCALE( int(val), -120.0f, 120.0f, -1.0f, 1.0f ); + ButtonPressed( DeviceInput(dev, neg, max(-l,0), tm) ); + ButtonPressed( DeviceInput(dev, pos, max(+l,0), tm) ); + } + */ } break; default: LOG->MapLog( "unknown input", @@ -515,10 +524,12 @@ void InputHandler_DInput::UpdateBuffered( DIDevice &device, const RageTimer &tm INPUTFILTER->UpdateCursorLocation((float)cursorPos.x,(float)cursorPos.y); break; case DIMOFS_Z: + // positive values: WheelUp + // negative values: WheelDown INPUTFILTER->UpdateMouseWheel(l); { up = MOUSE_WHEELUP; down = MOUSE_WHEELDOWN; - l = SCALE( int(evtbuf[i].dwData), -120.0f, 120.0f, 1.0f, -1.0f ); + l = SCALE( int(evtbuf[i].dwData), -WHEEL_DELTA, WHEEL_DELTA, 1.0f, -1.0f ); DeviceInput diUp = DeviceInput(dev, up, max(-l,0), tm); DeviceInput diDown = DeviceInput(dev, down, max(+l,0), tm); ButtonPressed( diUp ); diff --git a/src/arch/InputHandler/InputHandler_DirectInputHelper.cpp b/src/arch/InputHandler/InputHandler_DirectInputHelper.cpp index 6699b16910..a493502baf 100644 --- a/src/arch/InputHandler/InputHandler_DirectInputHelper.cpp +++ b/src/arch/InputHandler/InputHandler_DirectInputHelper.cpp @@ -331,7 +331,6 @@ static BOOL CALLBACK DIMouse_EnumDevObjectsProc(LPCDIDEVICEOBJECTINSTANCE dev, L in.ofs = dev->dwOfs; - // xxx: does this check for scrollwheels? -aj if(dev->dwType & DIDFT_BUTTON) { in.type = in.BUTTON; diff --git a/src/arch/InputHandler/InputHandler_Linux_Event.cpp b/src/arch/InputHandler/InputHandler_Linux_Event.cpp index 6c944f9a29..2baebdc253 100644 --- a/src/arch/InputHandler/InputHandler_Linux_Event.cpp +++ b/src/arch/InputHandler/InputHandler_Linux_Event.cpp @@ -398,7 +398,7 @@ void InputHandler_Linux_Event::InputThread() DeviceButton neg = g_apEventDevices[i]->aiAbsMappingLow[event.code]; DeviceButton pos = g_apEventDevices[i]->aiAbsMappingHigh[event.code]; - float l = SCALE( int(event.value), (float) g_apEventDevices[i]->aiAbsMin[i], (float) g_apEventDevices[i]->aiAbsMax[i], -1.0f, 1.0f ); + float l = SCALE( int(event.value), (float) g_apEventDevices[i]->aiAbsMin[event.code], (float) g_apEventDevices[i]->aiAbsMax[event.code], -1.0f, 1.0f ); ButtonPressed( DeviceInput(g_apEventDevices[i]->m_Dev, neg, max(-l,0), now) ); ButtonPressed( DeviceInput(g_apEventDevices[i]->m_Dev, pos, max(+l,0), now) ); break; diff --git a/src/arch/InputHandler/InputHandler_MacOSX_HID.cpp b/src/arch/InputHandler/InputHandler_MacOSX_HID.cpp index 84bc3283f4..c9e1b86243 100644 --- a/src/arch/InputHandler/InputHandler_MacOSX_HID.cpp +++ b/src/arch/InputHandler/InputHandler_MacOSX_HID.cpp @@ -247,10 +247,10 @@ InputHandler_MacOSX_HID::InputHandler_MacOSX_HID() : m_Sem( "Input thread starte // Add devices. LOG->Trace( "Finding keyboards" ); AddDevices( kHIDPage_GenericDesktop, kHIDUsage_GD_Keyboard, id ); - /* + LOG->Trace( "Finding mice" ); AddDevices( kHIDPage_GenericDesktop, kHIDUsage_GD_Mouse, id ); - */ + LOG->Trace( "Finding joysticks" ); id = DEVICE_JOY1; AddDevices( kHIDPage_GenericDesktop, kHIDUsage_GD_Joystick, id ); diff --git a/src/arch/InputHandler/InputHandler_Xbox.cpp b/src/arch/InputHandler/InputHandler_Xbox.cpp deleted file mode 100644 index 1c2f870456..0000000000 --- a/src/arch/InputHandler/InputHandler_Xbox.cpp +++ /dev/null @@ -1,232 +0,0 @@ -#include "global.h" -#include "InputHandler_Xbox.h" -#include "RageUtil.h" -#include "RageLog.h" -#include "RageDisplay.h" - - -#include - -struct DEVICE_STATE { - XPP_DEVICE_TYPE *pxdt; - DWORD dwState; -}; - -byte buttonMasks[] = { XINPUT_GAMEPAD_DPAD_LEFT, - XINPUT_GAMEPAD_DPAD_RIGHT, - XINPUT_GAMEPAD_DPAD_UP, - XINPUT_GAMEPAD_DPAD_DOWN, - XINPUT_GAMEPAD_START, - XINPUT_GAMEPAD_BACK, - XINPUT_GAMEPAD_LEFT_THUMB, - XINPUT_GAMEPAD_RIGHT_THUMB}; - - -/** - * XBOX controller maps to the following RageInputDevice constants: - * DPAD -> JOY_HAT_... - * START -> JOY_AUX_1 - * BACK -> JOY_AUX_2 - * Left thumb button -> JOY_AUX_3 - * Right thumb button -> JOY_AUX_4 - * Following buttons are JOY_(index): - * A, B, X, Y, BLACK, WHITE, Left trigger, right trigger - */ - -InputHandler_Xbox::InputHandler_Xbox() -{ - // - // Init joysticks - // - ZeroMemory( joysticks, sizeof(joysticks) ); - - getHandles(); -} - -InputHandler_Xbox::~InputHandler_Xbox() -{ - for(unsigned i = 0; i < NUM_JOYSTICKS; i++) - { - if(joysticks[i] != 0) - XInputClose(joysticks[i]); - } -} - -void InputHandler_Xbox::Update() -{ - // check insertions and removals - DWORD dwInsert, dwRemove; - DEVICE_STATE devices = {XDEVICE_TYPE_GAMEPAD, 0}; - - bool changes = false; - // Check each device type to see if any changes have occurred. - if( XGetDeviceChanges( devices.pxdt, &dwInsert, &dwRemove ) ) - { - for(int j = 0; j < 4; j++) - { - if(1 << j & dwRemove) - { - changes = true; - LOG->Trace("A joystick was removed"); - } - if(1 << j & dwInsert) - { - changes = true; - LOG->Trace("A joystick was inserted"); - } - } - } - - if(changes) - { - getHandles(); - return; - } - - for(unsigned i = 0; i < NUM_JOYSTICKS; i++) - { - if(joysticks[i] == 0) - continue; - - InputDevice inputDevice = InputDevice(DEVICE_JOY1 + i); - XINPUT_STATE xis; - // Query latest state. - XInputGetState( joysticks[i], &xis ); - - // check buttons - for(int j = 0; j < ARRAYLEN(buttonMasks); j++) - { - DWORD nowPressed = xis.Gamepad.wButtons & buttonMasks[j]; - DWORD wasPressed = lastState[i].wButtons & buttonMasks[j]; - - if(nowPressed != wasPressed) - { - DeviceButton Button = DeviceButton(JOY_HAT_LEFT + j); - if(Button >= JOY_BUTTON_32) - { - LOG->Warn("Ignored joystick event (button too high)"); - continue; - } - DeviceInput di(inputDevice, Button, nowPressed != 0); - ButtonPressed(di); - continue; - } - } - - // check analog buttons - for(int j = 0; j < ARRAYLEN(xis.Gamepad.bAnalogButtons); j++) - { - bool nowPressed = xis.Gamepad.bAnalogButtons[j] > XINPUT_GAMEPAD_MAX_CROSSTALK; - bool wasPressed = lastState[i].bAnalogButtons[j] > XINPUT_GAMEPAD_MAX_CROSSTALK; - - if(nowPressed != wasPressed) - { - DeviceButton Button = DeviceButton(JOY_BUTTON_1 + j); - if(Button >= JOY_BUTTON_32) - { - LOG->Warn("Ignored joystick event (button too high)"); - continue; - } - DeviceInput di(inputDevice, Button, nowPressed); - ButtonPressed(di); - continue; - } - } - - // check thumbsticks - SHORT axes[] = { xis.Gamepad.sThumbLX, xis.Gamepad.sThumbLY, xis.Gamepad.sThumbRX, xis.Gamepad.sThumbRY}; - - for(int j = 0; j < ARRAYLEN(axes); j++) - { - if(axes[j] != 0) - { - // Reverse y axis (negative values are down, not up) - if(j == 1 || j == 3) - axes[j] = -axes[j]; - - DeviceButton neg = (DeviceButton)(JOY_LEFT + (2 * j)); - DeviceButton pos = (DeviceButton)(JOY_RIGHT + (2 * j)); - float l = SCALE( axes[j], 0.0f, 32768.0f, 0.0f, 1.0f ); - ButtonPressed(DeviceInput(inputDevice, neg,max(-l,0),RageZeroTimer)); - ButtonPressed(DeviceInput(inputDevice, pos,max(+l,0),RageZeroTimer)); - continue; - } - } - - memcpy(&lastState[i], &xis.Gamepad, sizeof(XINPUT_GAMEPAD)); - } - - InputHandler::UpdateTimer(); -} - -void InputHandler_Xbox::GetDevicesAndDescriptions( vector& vDevicesOut ) -{ - for( int i=0; iInfo( "Found %d connected joysticks for %d players", joysFound, playersAllocated ); -} - -/* - * (c) 2004 Ryan Dortmans - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ diff --git a/src/arch/InputHandler/InputHandler_Xbox.h b/src/arch/InputHandler/InputHandler_Xbox.h deleted file mode 100644 index 14a8cc2292..0000000000 --- a/src/arch/InputHandler/InputHandler_Xbox.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef INPUT_HANDLER_XBOX_H -#define INPUT_HANDLER_XBOX_H - -#include "InputHandler.h" - -#include - -#define NUM_PORTS 4 - -class InputHandler_Xbox: public InputHandler -{ - HANDLE joysticks[NUM_JOYSTICKS]; - XINPUT_GAMEPAD lastState[NUM_JOYSTICKS]; - -public: - void Update(); - InputHandler_Xbox(); - ~InputHandler_Xbox(); - void GetDevicesAndDescriptions( vector& vDevicesOut ); - -private: - void getHandles(); -}; -#define USE_INPUT_HANDLER_XBOX -REGISTER_INPUT_HANDLER_CLASS( Xbox ); - -#endif - -/* - * (c) 2004 Ryan Dortmans - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ diff --git a/src/arch/LoadingWindow/LoadingWindow.cpp b/src/arch/LoadingWindow/LoadingWindow.cpp index 8fa1d0ae01..2002e81f45 100644 --- a/src/arch/LoadingWindow/LoadingWindow.cpp +++ b/src/arch/LoadingWindow/LoadingWindow.cpp @@ -12,7 +12,7 @@ LoadingWindow *LoadingWindow::Create() return new LoadingWindow_Null; #endif // Don't load NULL by default. - const RString drivers = "xbox,win32,macosx,gtk"; + const RString drivers = "win32,macosx,gtk"; vector DriversToTry; split( drivers, ",", DriversToTry, true ); @@ -33,9 +33,6 @@ LoadingWindow *LoadingWindow::Create() #endif #ifdef USE_LOADING_WINDOW_WIN32 if( !DriversToTry[i].CompareNoCase("Win32") ) ret = new LoadingWindow_Win32; -#endif -#ifdef USE_LOADING_WINDOW_XBOX - if( !DriversToTry[i].CompareNoCase("Xbox") ) ret = new LoadingWindow_Xbox; #endif if( !DriversToTry[i].CompareNoCase("Null") ) ret = new LoadingWindow_Null; diff --git a/src/arch/LoadingWindow/LoadingWindow_Xbox.cpp b/src/arch/LoadingWindow/LoadingWindow_Xbox.cpp deleted file mode 100644 index 1e6b7edf73..0000000000 --- a/src/arch/LoadingWindow/LoadingWindow_Xbox.cpp +++ /dev/null @@ -1,179 +0,0 @@ -#include "global.h" -#include "LoadingWindow_Xbox.h" -#include "RageLog.h" - -#include "ProductInfo.h" - -LPDIRECT3D8 g_pD3D = NULL; // DirectX Object -LPDIRECT3DDEVICE8 g_pD3DDevice = NULL; // Screen Object -LPDIRECT3DTEXTURE8 splash = NULL; // splash texture -LPD3DXSPRITE g_sprite = NULL; // sprite object - -LoadingWindow_Xbox::LoadingWindow_Xbox() -{ - // Initialise Direct3D - g_pD3D = Direct3DCreate8(D3D_SDK_VERSION); - - // Create a structure to hold the settings for our device - D3DPRESENT_PARAMETERS d3dpp; - ZeroMemory(&d3dpp, sizeof(d3dpp)); - - // Fill the structure. - // Set fullscreen 640x480x32 mode - d3dpp.BackBufferWidth = 640; - d3dpp.BackBufferHeight = 480; - d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8; - - // Create one backbuffer and a zbuffer - d3dpp.BackBufferCount = 1; - - // Set up how the backbuffer is "presented" to the frontbuffer each time - d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; - - //Create a Direct3D device. - g_pD3D->CreateDevice(0, D3DDEVTYPE_HAL, NULL, - D3DCREATE_HARDWARE_VERTEXPROCESSING, - &d3dpp, &g_pD3DDevice); - g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE); - - // Create the sprite object (for painting the image) - D3DXCreateSprite(g_pD3DDevice, &g_sprite); - - // Load the default font - XFONT_OpenDefaultFont(&font); - font->SetTextColor(D3DCOLOR_XRGB(255,255,255)); - font->SetTextAlignment(XFONT_CENTER); - - // Load the splash.png - - HRESULT result = D3DXCreateTextureFromFileA(g_pD3DDevice, "D:\\Data\\splash.png", &splash); - useImage = (result == D3D_OK); - - if(!useImage) - LOG->Trace("Error loading splash.png - %i", result); - - SetText(RString("Loading songs")); -} - -LoadingWindow_Xbox::~LoadingWindow_Xbox() -{ - g_pD3DDevice->Release(); - g_pD3D->Release(); - font->Release(); -} - -void LoadingWindow_Xbox::Paint() -{ - LPDIRECT3DSURFACE8 g_pFrontBuffer; - - if(text == "") - return; - - g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0); - - g_pD3DDevice->BeginScene(); - g_pD3DDevice->GetBackBuffer(0,D3DBACKBUFFER_TYPE_MONO,&g_pFrontBuffer); - - if(useImage) - { - // Draw the splash image - // Only draw if the splash texture is successfully loaded - D3DXVECTOR2 pos; - pos.x = 70.0f; - pos.y = 30.0f; - - g_sprite->Begin(); - g_sprite->Draw(splash, NULL, NULL, NULL, NULL, &pos, 0xFFFFFFFF); - g_sprite->End(); - } - else - { - // Lo-fi version: print the product name and version at the top of the screen - font->SetTextColor(D3DCOLOR_XRGB(255, 0, 0)); - RString title = "Version "; - title = title + PRODUCT_VER; - WCHAR wc_title[200] = {0}; - swprintf(wc_title, L"%S", title.c_str()); - - font->TextOut(g_pFrontBuffer, L"StepMania", -1, 320, 30); - font->SetTextColor(D3DCOLOR_XRGB(255, 255, 0)); - font->TextOut(g_pFrontBuffer, wc_title, -1, 320, 40 + font->GetTextHeight()); - } - - // Draw the text on the screen - font->SetTextColor(D3DCOLOR_XRGB(255, 255, 255)); - basic_string ::size_type newLineIndex = text.find("\n", 0); - int y = 240; - - if(newLineIndex == RString.npos) - { - WCHAR wc_text[200] = {0}; - swprintf(wc_text, L"%S", text.c_str()); - - font->TextOut(g_pFrontBuffer, wc_text, wcslen(wc_text), 320, y); - } - else - { - int start = 0; - - while(start != RString.npos) - { - RString toPrint; - if(newLineIndex != RString.npos) - toPrint = text.substr(start, newLineIndex - start); - else - toPrint = text.substr(start); - - if(toPrint != "") - { - WCHAR wc_text[200] = {0}; - swprintf(wc_text, L"%S", toPrint.c_str()); - - font->TextOut(g_pFrontBuffer, wc_text, wcslen(wc_text), 320, y); - } - y = y + font->GetTextHeight() + 10; - - if(newLineIndex != RString.npos) - start = newLineIndex + 1; - else - start = RString.npos; - - newLineIndex = text.find("\n", start); - } - } - - g_pFrontBuffer->Release(); - - g_pD3DDevice->EndScene(); - g_pD3DDevice->Present(NULL, NULL, NULL, NULL); -} - -void LoadingWindow_Xbox::SetText(RString str) -{ - text = str ; -} - -/* - * (c) 2004 Ryan Dortmans - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ \ No newline at end of file diff --git a/src/arch/LoadingWindow/LoadingWindow_Xbox.h b/src/arch/LoadingWindow/LoadingWindow_Xbox.h deleted file mode 100644 index 956bef0157..0000000000 --- a/src/arch/LoadingWindow/LoadingWindow_Xbox.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef LOADING_WINDOW_XBOX_H -#define LOADING_WINDOW_XBOX_H - -#include "LoadingWindow.h" - -#include -#include -#define XFONT_TRUETYPE - -class LoadingWindow_Xbox: public LoadingWindow -{ -public: - LoadingWindow_Xbox(); - ~LoadingWindow_Xbox(); - - void Paint(); - void SetText(RString str); - -protected: - RString text ; - XFONT* font; - bool useImage; -}; -#define USE_LOADING_WINDOW_XBOX - -#endif - -/* - * (c) 2004 Ryan Dortmans - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ diff --git a/src/arch/MemoryCard/MemoryCardDriverThreaded_Xbox.cpp b/src/arch/MemoryCard/MemoryCardDriverThreaded_Xbox.cpp deleted file mode 100644 index 0523f27de3..0000000000 --- a/src/arch/MemoryCard/MemoryCardDriverThreaded_Xbox.cpp +++ /dev/null @@ -1,150 +0,0 @@ -#include "global.h" -#include "MemoryCardDriverThreaded_Xbox.h" -#include "RageUtil.h" -#include "RageLog.h" - -MemoryCardDriverThreaded_Xbox::MemoryCardDriverThreaded_Xbox() -{ -} - -MemoryCardDriverThreaded_Xbox::~MemoryCardDriverThreaded_Xbox() -{ -} - -static bool TestReady( const RString &sDrive, RString &sVolumeLabelOut ) -{ - TCHAR szVolumeNameBuffer[MAX_PATH]; - DWORD dwVolumeSerialNumber; - DWORD dwMaximumComponentLength; - DWORD lpFileSystemFlags; - TCHAR szFileSystemNameBuffer[MAX_PATH]; - - if( !GetVolumeInformation( - sDrive, - szVolumeNameBuffer, - sizeof(szVolumeNameBuffer), - &dwVolumeSerialNumber, - &dwMaximumComponentLength, - &lpFileSystemFlags, - szFileSystemNameBuffer, - sizeof(szFileSystemNameBuffer)) ){ - LOG->Trace("GetVolumeInformation failed %u", GetLastError()); - return false; - } - - sVolumeLabelOut = szVolumeNameBuffer; - return true; -} - -bool MemoryCardDriverThreaded_Xbox::TestWrite( UsbStorageDevice* pDevice ) -{ - /* Try to write a file, to check if the device is writable and that we have write permission.*/ - for( int i = 0; i < 10; ++i ) - { - HANDLE hFile = CreateFile( - ssprintf( "%s\\tmp%i", pDevice->sOsMountDir.c_str(), RandomInt(100000)), - GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - CREATE_NEW, - FILE_FLAG_DELETE_ON_CLOSE, - NULL ); - - if( hFile == INVALID_HANDLE_VALUE ) - { - DWORD iError = GetLastError(); - LOG->Warn( "Couldn't write to %s (%u)", pDevice->sOsMountDir.c_str(), iError); - - if( iError == ERROR_FILE_EXISTS ) - continue; - break; - } - - CloseHandle( hFile ); - return true; - } - - pDevice->SetError( "TestFailed" ); - return false; -} - -void MemoryCardDriverThreaded_Xbox::GetUSBStorageDevices( vector& vDevicesOut ) -{ - DWORD devices=XGetDevices(XDEVICE_TYPE_MEMORY_UNIT); - - for(int port=0;port<4;port++){ - //top slot - if(devices&(1<Trace( "%s", __FUNCTION__); - CHAR drive; - DWORD MountRetval=XMountMU(pDevice->iPort, pDevice->iLevel, &drive); - if(MountRetval==ERROR_SUCCESS){ - LOG->Trace("Mounted memory card from port %u slot %u to %c:", pDevice->iPort, pDevice->iLevel, drive); - pDevice->SetOsMountDir(ssprintf("%c:", drive)); - RString sVolumeLabel; - if( !TestReady(pDevice->sOsMountDir + "\\", sVolumeLabel) ) - { - LOG->Trace( "not TestReady" ); - } - pDevice->sVolumeLabel = sVolumeLabel; - return true; - }else{ - LOG->Trace("Could not mount memory card %u", MountRetval); - return false; - } -} - -void MemoryCardDriverThreaded_Xbox::Unmount( UsbStorageDevice* pDevice ) -{ - XUnmountMU(pDevice->iPort, pDevice->iLevel); -} - -/* - * (c) 2003-2004 Chris Danford - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ diff --git a/src/arch/MemoryCard/MemoryCardDriverThreaded_Xbox.h b/src/arch/MemoryCard/MemoryCardDriverThreaded_Xbox.h deleted file mode 100644 index af3c47d1dd..0000000000 --- a/src/arch/MemoryCard/MemoryCardDriverThreaded_Xbox.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef MemoryCardDriverThreaded_Xbox_H -#define MemoryCardDriverThreaded_Xbox_H - -#include "MemoryCardDriver.h" - -class MemoryCardDriverThreaded_Xbox: public MemoryCardDriver -{ -public: - MemoryCardDriverThreaded_Xbox(); - virtual ~MemoryCardDriverThreaded_Xbox(); - - virtual bool Mount( UsbStorageDevice* pDevice ); - virtual void Unmount( UsbStorageDevice* pDevice ); - -private: - void GetUSBStorageDevices( vector& vDevicesOut ); - bool USBStorageDevicesChanged(); - bool TestWrite( UsbStorageDevice* pDevice ); -}; - -#ifdef ARCH_MEMORY_CARD_DRIVER -#error "More than one MemoryCardDriver included!" -#endif -#define ARCH_MEMORY_CARD_DRIVER MemoryCardDriverThreaded_Xbox - -#endif - -/* - * (c) 2003-2004 Chris Danford - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ diff --git a/src/arch/MovieTexture/MovieTexture_FFMpeg.cpp b/src/arch/MovieTexture/MovieTexture_FFMpeg.cpp index fd27ba5d3a..ed70a0acbf 100644 --- a/src/arch/MovieTexture/MovieTexture_FFMpeg.cpp +++ b/src/arch/MovieTexture/MovieTexture_FFMpeg.cpp @@ -29,34 +29,15 @@ namespace avcodec }; /* -#if defined(_MSC_VER) && !defined(XBOX) +#if defined(_MSC_VER) #pragma comment(lib, "ffmpeg/lib/avcodec.lib") #pragma comment(lib, "ffmpeg/lib/avformat.lib") #if defined(USE_MODERN_FFMPEG) #pragma comment(lib, "ffmpeg/lib/swscale.lib") #endif -#endif // _MSC_VER && !XBOX +#endif // _MSC_VER */ -#if defined(XBOX) - /* NOTES: ffmpeg static libraries arent included in SVN. You have to build - *them yourself or remove this file to produce the xbox build. - * - * build ffmpeg with mingw32 ( howto http://ffmpeg.arrozcru.org/wiki/index.php?title=Main_Page ) - * ./configure --enable-memalign-hack --enable-static --disable-mmx --target-os=mingw32 --arch=x86 - * you can use various switches to enable/disable codecs/muxers/etc. - * - * libgcc.a and libmingwex.a comes from mingw installation - * msys\mingw\lib\gcc\mingw32\3.4.5\libgcc.a */ - #pragma comment(lib, "ffmpeg/lib/libavcodec.a") - #pragma comment(lib, "ffmpeg/lib/libavformat.a") - #pragma comment(lib, "ffmpeg/lib/libavutil.a") - #pragma comment(lib, "ffmpeg/lib/libswscale.a") - #pragma comment(lib, "ffmpeg/lib/libgcc.a") - #pragma comment(lib, "ffmpeg/lib/libmingwex.a") - #pragma comment(lib, "ffmpeg/lib/libcoldname.a") -#endif - #if !defined(MACOSX) static const int sws_flags = SWS_BICUBIC; // XXX: Reasonable default? #endif diff --git a/src/arch/MovieTexture/MovieTexture_Generic.cpp b/src/arch/MovieTexture/MovieTexture_Generic.cpp index ae14237fc9..e3f1ea0aee 100644 --- a/src/arch/MovieTexture/MovieTexture_Generic.cpp +++ b/src/arch/MovieTexture/MovieTexture_Generic.cpp @@ -9,7 +9,7 @@ #include "RageUtil.h" #include "Sprite.h" -#if defined(WIN32) && !defined(XBOX) +#if defined(WIN32) #include "archutils/Win32/ErrorStrings.h" #include #endif diff --git a/src/arch/Sound/RageSoundDriver_PulseAudio.cpp b/src/arch/Sound/RageSoundDriver_PulseAudio.cpp index d639cd8287..54bfc8474f 100644 --- a/src/arch/Sound/RageSoundDriver_PulseAudio.cpp +++ b/src/arch/Sound/RageSoundDriver_PulseAudio.cpp @@ -79,7 +79,7 @@ RString RageSoundDriver_PulseAudio::Init() #endif pa_context_set_state_callback(m_PulseCtx, StaticCtxStateCb, this); - + LOG->Trace("Pulse: pa_context_connect()..."); error = pa_context_connect(m_PulseCtx, NULL, (pa_context_flags_t)0, NULL); @@ -299,6 +299,11 @@ int64_t RageSoundDriver_PulseAudio::GetPosition() const return m_LastPosition; } +/* + * XXX: Something here is slow and causes arrows to stutter in gameplay. + * This needs to be looked into (and for some reason the ALSA driver is + * useless on my laptop). - Colby + */ void RageSoundDriver_PulseAudio::StreamWriteCb(pa_stream *s, size_t length) { #if PA_API_VERSION <= 11 @@ -359,4 +364,4 @@ void RageSoundDriver_PulseAudio::StaticStreamWriteCb(pa_stream *s, size_t length * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. - */ \ No newline at end of file + */ diff --git a/src/arch/Threads/Threads_Win32.cpp b/src/arch/Threads/Threads_Win32.cpp index 027c11f573..3fd4a72795 100644 --- a/src/arch/Threads/Threads_Win32.cpp +++ b/src/arch/Threads/Threads_Win32.cpp @@ -31,11 +31,9 @@ HANDLE Win32ThreadIdToHandle( uint64_t iID ) void ThreadImpl_Win32::Halt( bool Kill ) { -#ifndef _XBOX if( Kill ) TerminateThread( ThreadHandle, 0 ); else -#endif SuspendThread( ThreadHandle ); } diff --git a/src/arch/arch.cpp b/src/arch/arch.cpp index cafa822ef6..5cbdcdcd02 100644 --- a/src/arch/arch.cpp +++ b/src/arch/arch.cpp @@ -52,9 +52,6 @@ void MakeInputHandlers( const RString &drivers, vector &Add ) #ifdef USE_INPUT_HANDLER_X11 if( !s->CompareNoCase("X11") ) ret = new InputHandler_X11; #endif -#ifdef USE_INPUT_HANDLER_XBOX - if( !s->CompareNoCase("Xbox") ) ret = new InputHandler_Xbox; -#endif #ifdef USE_INPUT_HANDLER_MACOSX_HID if( !s->CompareNoCase("MacOSX") ) ret = new InputHandler_MacOSX_HID; #endif @@ -104,7 +101,7 @@ LoadingWindow *MakeLoadingWindow() return new LoadingWindow_Null; #endif // Don't load NULL by default. - const RString drivers = "xbox,win32,cocoa,gtk"; + const RString drivers = "win32,cocoa,gtk"; vector DriversToTry; split( drivers, ",", DriversToTry, true ); @@ -129,11 +126,7 @@ LoadingWindow *MakeLoadingWindow() #ifdef USE_LOADING_WINDOW_WIN32 if( !DriversToTry[i].CompareNoCase("Win32") ) ret = new LoadingWindow_Win32; #endif -#ifdef USE_LOADING_WINDOW_XBOX - if( !DriversToTry[i].CompareNoCase("Xbox") ) ret = new LoadingWindow_Xbox; -#endif - if( ret == NULL ) continue; @@ -144,10 +137,10 @@ LoadingWindow *MakeLoadingWindow() SAFE_DELETE( ret ); } } - + if(ret) LOG->Info( "Loading window: %s", Driver.c_str() ); - + return ret; } @@ -191,7 +184,7 @@ RageMovieTexture *MakeRageMovieTexture( RageTextureID ID ) vector DriversToTry; split( sDrivers, ",", DriversToTry, true ); - + if( DriversToTry.empty() ) RageException::Throw( MOVIE_DRIVERS_EMPTY.GetValue() ); @@ -231,7 +224,7 @@ RageMovieTexture *MakeRageMovieTexture( RageTextureID ID ) RageException::Throw( COULDNT_CREATE_MOVIE_DRIVER.GetValue() ); LOG->Trace( "Created movie texture \"%s\" with driver \"%s\"", - ID.filename.c_str(), Driver.c_str() ); + ID.filename.c_str(), Driver.c_str() ); return ret; } @@ -291,10 +284,10 @@ RageSoundDriver *MakeRageSoundDriver( const RString &drivers ) SAFE_DELETE( ret ); } } - + if( ret ) LOG->Info( "Sound driver: %s", Driver.c_str() ); - + return ret; } diff --git a/src/arch/arch.h b/src/arch/arch.h index 29e3a29f60..eaa457ca5a 100644 --- a/src/arch/arch.h +++ b/src/arch/arch.h @@ -7,8 +7,6 @@ #if defined(_WINDOWS) #define SUPPORT_OPENGL #define SUPPORT_D3D -#elif defined(_XBOX) -#define SUPPORT_D3D #else #define SUPPORT_OPENGL #endif diff --git a/src/arch/arch_default.h b/src/arch/arch_default.h index 5752dacadc..4dcbe1a5f2 100644 --- a/src/arch/arch_default.h +++ b/src/arch/arch_default.h @@ -22,16 +22,6 @@ #define DEFAULT_SOUND_DRIVER_LIST "AudioUnit,Null" -#elif defined(_XBOX) -#include "ArchHooks/ArchHooks_Xbox.h" -#include "LoadingWindow/LoadingWindow_Xbox.h" -#include "LowLevelWindow/LowLevelWindow_Win32.h" -#include "MemoryCard/MemoryCardDriverThreaded_Xbox.h" -#define DEFAULT_INPUT_DRIVER_LIST "Xbox" -#define DEFAULT_MOVIE_DRIVER_LIST "Theora,FFMpeg,DShow,Null" -#define DEFAULT_SOUND_DRIVER_LIST "DirectSound,DirectSound-sw,Null" - - #elif defined(UNIX) #include "ArchHooks/ArchHooks_Unix.h" #include "LowLevelWindow/LowLevelWindow_X11.h" diff --git a/src/archutils/Darwin/MouseDevice.cpp b/src/archutils/Darwin/MouseDevice.cpp index b968b0cfb9..12d5f6b886 100644 --- a/src/archutils/Darwin/MouseDevice.cpp +++ b/src/archutils/Darwin/MouseDevice.cpp @@ -60,6 +60,7 @@ void MouseDevice::AddElement( int usagePage, int usage, IOHIDElementCookie cooki m.y_max = iMax; break; case kHIDUsage_GD_Z: + case kHIDUsage_GD_Wheel: // also handle wheel m.z_axis = cookie; m.z_min = iMin; m.z_max = iMax; @@ -102,13 +103,19 @@ void MouseDevice::GetButtonPresses( vector& vPresses, IOHIDElementC { // todo: add mouse axis stuff -aj const Mouse& m = m_Mouse; + HRESULT result; + IOHIDEventStruct hidEvent; + // result = (*m_Interface)->getElementValue(hidDeviceInterface,cookie,&hidEvent); + if( m.x_axis == cookie ) { -// INPUTFILTER->UpdateCursorLocation(value,m.y_axis); + //INPUTFILTER->UpdateCursorLocation(value,m.y_axis); + LOG->Trace("Mouse X: Value = %i",value); } else if( m.y_axis == cookie ) { -// INPUTFILTER->UpdateCursorLocation(m.x_axis,value); + //INPUTFILTER->UpdateCursorLocation(m.x_axis,value); + LOG->Trace("Mouse Y: Value = %i",value); } else if( m.z_axis == cookie ) { diff --git a/src/archutils/Win32/AppInstance.h b/src/archutils/Win32/AppInstance.h index 59386febe5..3a0358094e 100644 --- a/src/archutils/Win32/AppInstance.h +++ b/src/archutils/Win32/AppInstance.h @@ -1,9 +1,7 @@ #ifndef APP_INSTANCE_H #define APP_INSTANCE_H -#if !defined(_XBOX) -# include "windows.h" -#endif +#include "windows.h" /** @brief get an HINSTANCE for starting dialog boxes. */ class AppInstance diff --git a/src/archutils/Win32/DirectXHelpers.cpp b/src/archutils/Win32/DirectXHelpers.cpp index 430bb32666..3b28626926 100644 --- a/src/archutils/Win32/DirectXHelpers.cpp +++ b/src/archutils/Win32/DirectXHelpers.cpp @@ -2,14 +2,10 @@ #include "DirectXHelpers.h" #include "RageUtil.h" -#ifdef _XBOX -# include -#else -# include -# include -# if defined(_MSC_VER) -# pragma comment(lib, "dxerr8.lib") -# endif +#include +#include +#if defined(_MSC_VER) +# pragma comment(lib, "dxerr8.lib") #endif RString hr_ssprintf( int hr, const char *fmt, ... ) @@ -19,13 +15,7 @@ RString hr_ssprintf( int hr, const char *fmt, ... ) RString s = vssprintf( fmt, va ); va_end(va); -#ifdef _XBOX - char szError[1024] = ""; - D3DXGetErrorString( hr, szError, sizeof(szError) ); -#else const char *szError = DXGetErrorString8( hr ); -#endif - return s + ssprintf( " (%s)", szError ); } diff --git a/src/archutils/Win32/ErrorStrings.cpp b/src/archutils/Win32/ErrorStrings.cpp index de53870c66..7f5b40b3c8 100644 --- a/src/archutils/Win32/ErrorStrings.cpp +++ b/src/archutils/Win32/ErrorStrings.cpp @@ -2,17 +2,13 @@ #include "ErrorStrings.h" #include "RageUtil.h" -#if !defined(XBOX) #include -#endif RString werr_ssprintf( int err, const char *fmt, ... ) { char buf[1024] = ""; -#ifndef _XBOX FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, err, 0, buf, sizeof(buf), NULL); -#endif // Why is FormatMessage returning text ending with \r\n? (who? -aj) // Perhaps it's because you're on Windows, where newlines are \r\n. -aj diff --git a/src/archutils/Win32/WindowsResources.rc b/src/archutils/Win32/WindowsResources.rc index 1f2375ef26..ad20d9749a 100644 --- a/src/archutils/Win32/WindowsResources.rc +++ b/src/archutils/Win32/WindowsResources.rc @@ -171,8 +171,8 @@ END // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -IDI_ICON1 ICON "smzip.ico" IDI_ICON ICON "StepMania.ICO" +IDI_ICON1 ICON "smzip.ico" ///////////////////////////////////////////////////////////////////////////// // @@ -181,7 +181,7 @@ IDI_ICON ICON "StepMania.ICO" VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,1 - PRODUCTVERSION 1,0,0,1 + PRODUCTVERSION 1,2,4,1 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -198,12 +198,12 @@ BEGIN BEGIN VALUE "CompanyName", "the spinal shark collective\nhttp://ssc.ajworld.net/" VALUE "FileDescription", "sm-ssc" - VALUE "FileVersion", "1, 2, 2, 0" + VALUE "FileVersion", "1, 2, 4, 0" VALUE "InternalName", "sm-ssc" VALUE "LegalCopyright", "Copyright © 2001-2011" VALUE "OriginalFilename", "StepMania.exe" VALUE "ProductName", "sm-ssc" - VALUE "ProductVersion", "1, 2, 2, 0" + VALUE "ProductVersion", "1, 2, 4, 0" END END BLOCK "VarFileInfo" diff --git a/src/archutils/Win32/arch_setup.h b/src/archutils/Win32/arch_setup.h index 9ad85a8a37..faa6ee057d 100644 --- a/src/archutils/Win32/arch_setup.h +++ b/src/archutils/Win32/arch_setup.h @@ -1,14 +1,10 @@ #ifndef ARCH_SETUP_WINDOWS_H #define ARCH_SETUP_WINDOWS_H -#if !defined(XBOX) #define HAVE_FFMPEG #define HAVE_THEORA -#endif -#if !defined(XBOX) #define SUPPORT_OPENGL -#endif #define SUPPORT_D3D #if defined(__MINGW32__) @@ -143,25 +139,13 @@ inline long int lrintf( float f ) /* We implement the crash handler interface (though that interface isn't * completely uniform across platforms yet). */ -#if !defined(_XBOX) && !defined(SMPACKAGE) +#if !defined(SMPACKAGE) #define CRASH_HANDLER #endif #define ENDIAN_LITTLE -#if defined(_XBOX) -#if defined(_DEBUG) -#define OGG_LIB_DIR "vorbis/xbox/debug/" -#else -#define OGG_LIB_DIR "vorbis/xbox/release/" -#endif -#else #define OGG_LIB_DIR "vorbis/win32/" -#endif - -#if defined(XBOX) -#include "ArchUtils/Xbox/arch_setup.h" -#endif #if defined(__GNUC__) // It might be MinGW or Cygwin(?) #include "archutils/Common/gcc_byte_swaps.h" diff --git a/src/archutils/Xbox/GraphicsWindow.cpp b/src/archutils/Xbox/GraphicsWindow.cpp deleted file mode 100644 index 42ad602abd..0000000000 --- a/src/archutils/Xbox/GraphicsWindow.cpp +++ /dev/null @@ -1,151 +0,0 @@ -#include "global.h" -#include "archutils/Xbox/GraphicsWindow.h" -#include "ProductInfo.h" -#include "RageLog.h" -#include "RageUtil.h" -#include "RageDisplay.h" - -static const RString g_sClassName = RString(PRODUCT_ID) + " LowLevelWindow_Win32"; - -static VideoModeParams g_CurrentParams; -static bool g_bResolutionChanged = false; -static bool g_bHasFocus = true; -static bool g_bLastHasFocus = true; -static bool m_bWideWindowClass; -bool isPALSystem(); -void setScreenResolutionValues(); - -void GraphicsWindow::SetVideoModeParams( const VideoModeParams ¶ms ) -{ - g_CurrentParams = params; -} - -const VideoModeParams &GraphicsWindow::GetParams() -{ - return g_CurrentParams; -} - -void GraphicsWindow::Update() -{ - if( g_bResolutionChanged ) - { - /* Let DISPLAY know that our resolution has changed. */ - DISPLAY->ResolutionChanged(); - g_bResolutionChanged = false; - } -} - -void GraphicsWindow::Initialize( bool bD3D ) -{ - /* We do the parameters initialisation here. No need to use the INI, - because if we changed resolutions, it wouldn't keep up. */ - - g_CurrentParams.bpp = 32; - g_CurrentParams.windowed=false; - - isPALSystem(); - setScreenResolutionValues(); -} - -bool isPALSystem() -{ - if(XGetVideoStandard() == XC_VIDEO_STANDARD_PAL_I) - { - g_CurrentParams.interlaced=true; - - /* Get supported video flags. */ - DWORD VideoFlags = XGetVideoFlags(); - - /* Set pal60 if available. */ - if( VideoFlags & XC_VIDEO_FLAGS_PAL_60Hz ) - g_CurrentParams.rate = 60; - else - g_CurrentParams.rate = 50; - - g_CurrentParams.PAL = true; - return true; - } - g_CurrentParams.rate = 60; - g_CurrentParams.PAL = false; - return false; -} -void setScreenResolutionValues() -{ - DWORD CurrentVideoFlags = XGetVideoFlags(); - int heightStandards; - - // Preventive definition. Changed only if needed. - g_CurrentParams.interlaced=false; - - switch(isPALSystem()){ - case true: - heightStandards = 576; - break; - case false: - heightStandards = 480; - g_CurrentParams.interlaced=false; - break; - } - - switch (CurrentVideoFlags){ - - case XC_VIDEO_FLAGS_HDTV_480p: - g_CurrentParams.width=720; - g_CurrentParams.height=480; - break; - - case XC_VIDEO_FLAGS_HDTV_720p: - g_CurrentParams.width=1280; - g_CurrentParams.height=720; - break; - - case XC_VIDEO_FLAGS_HDTV_1080i: - g_CurrentParams.width=1920; - g_CurrentParams.height=1080; - g_CurrentParams.interlaced=true; - break; - - case XC_VIDEO_FLAGS_WIDESCREEN: - g_CurrentParams.width=720; - g_CurrentParams.height=heightStandards; - break; - - case XC_VIDEO_FLAGS_LETTERBOX: - default: - g_CurrentParams.width=640; - g_CurrentParams.height=heightStandards; - break; - } -} - -void GraphicsWindow::Shutdown() { } -RString GraphicsWindow::SetScreenMode( const VideoModeParams &p ) { return ""; } -void GraphicsWindow::CreateGraphicsWindow( const VideoModeParams &p ) { } -void GraphicsWindow::RecreateGraphicsWindow( const VideoModeParams &p ) { } -void GraphicsWindow::DestroyGraphicsWindow() { } -void GraphicsWindow::ConfigureGraphicsWindow( const VideoModeParams &p ) { } - -/* - * (c) 2004 Glenn Maynard, Renaud Lepage - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ diff --git a/src/archutils/Xbox/GraphicsWindow.h b/src/archutils/Xbox/GraphicsWindow.h deleted file mode 100644 index fa1ada8ba0..0000000000 --- a/src/archutils/Xbox/GraphicsWindow.h +++ /dev/null @@ -1,47 +0,0 @@ -#if !defined(GRAPHICS_WINDOW_H) -#define GRAPHICS_WINDOW_H - -#pragma once - -class VideoModeParams; - -namespace GraphicsWindow -{ - void Initialize( bool bD3D ); - void Shutdown(); - void SetVideoModeParams( const VideoModeParams &p ); - RString SetScreenMode( const VideoModeParams &p ); - void CreateGraphicsWindow( const VideoModeParams &p ); - void RecreateGraphicsWindow( const VideoModeParams &p ); - void DestroyGraphicsWindow(); - void ConfigureGraphicsWindow( const VideoModeParams &p ); - const VideoModeParams &GetParams(); - void Update(); -}; - -#endif - -/* - * (c) 2004 Glenn Maynard - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ diff --git a/src/archutils/Xbox/VirtualMemory.cpp b/src/archutils/Xbox/VirtualMemory.cpp deleted file mode 100644 index f302989e91..0000000000 --- a/src/archutils/Xbox/VirtualMemory.cpp +++ /dev/null @@ -1,644 +0,0 @@ -/* This handles manual paging. It's primarily intended for the Xbox, but works - * in Windows as well; it can be enabled for debugging. */ - -#include "global.h" -#include "VirtualMemory.h" -#include "RageLog.h" -#include "Preference.h" -#include - -#if defined(WINDOWS) -#define PAGE_FILE_PATH "StepMania pagefile.dat" -#else -#define PAGE_FILE_PATH "Z:\\xxpagefile.sys" -#endif - -VirtualMemoryManager vmem_Manager; - -static Preference g_bEnableVirtualMemory( "EnableVirtualMemory", true ); -// page file size in megabytes -static Preference g_iPageFileSize( "PageFileSize", 384 ); -// page size in kilobytes -static Preference g_iPageSize( "PageSize", 16 ); -// threshold in kilobytes where virtual memory will be used -static Preference g_iPageThreshold( "PageThreshold", 8 ); -// (under debug) log the virtual memory allocation, etc. -static Preference g_bLogVirtualMemory( "LogVirtualMemory", false ); - -struct vm_page -{ - DWORD startAddress; // start address for this page - unsigned long headPage; // 0 if not allocated. Otherwise, the index of the first page - // of this segment. - bool committed; // true if this page is committed to RAM (is otherwise in the page file) - bool locked; // true if this page should not be decommitted - int pageFaults; // number of times this page has been accessed when it wasn't committed - unsigned long sizeInPages; // size of the data segment in pages. - size_t sizeInBytes; // size of the data segment in bytes. -}; - -VirtualMemoryManager::VirtualMemoryManager(): - vmemMutex("VirtualMemory") -{ - pages = 0; - pageLRU = -1; - inited = false; -} - -VirtualMemoryManager::~VirtualMemoryManager() -{ - Destroy(); -} - -bool VirtualMemoryManager::Init() -{ - if( !g_bEnableVirtualMemory ) - return true; - unsigned long totalPageSize = 1024 * 1024 * g_iPageFileSize; - unsigned long sizePerPage = 1024 * g_iPageSize; - unsigned long thold = 1024 * g_iPageThreshold; - - threshold = thold; - - totalPages = totalPageSize / sizePerPage; - pageSize = sizePerPage; - - if(totalPageSize % sizePerPage != 0) - totalPageSize = sizePerPage * totalPages; - - // initialise the pages array - // bypass the overridden new by using HeapAlloc - pages = (vm_page*)HeapAlloc(GetProcessHeap(), 0, totalPages * sizeof(vm_page)); - - if(pages == NULL) - return false; - - // create the page file on Z drive - vmemFile = CreateFile( PAGE_FILE_PATH, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); - - if(vmemFile == INVALID_HANDLE_VALUE) - return false; - - // set the file size - // find the current file size - unsigned long fileSize = SetFilePointer(vmemFile, 0, 0, FILE_END); - if(fileSize == INVALID_SET_FILE_POINTER) - return false; - - if(fileSize < totalPageSize) - { - fileSize = SetFilePointer(vmemFile, totalPageSize, 0, FILE_BEGIN); - if(fileSize == INVALID_SET_FILE_POINTER) - return false; - } - - // Reserve the virtual memory and get the base address - baseAddress = (DWORD)VirtualAlloc(NULL, totalPageSize, MEM_RESERVE, PAGE_NOACCESS); - - if(baseAddress == NULL) - return false; - - // initialise the page array - for(unsigned long i = 0; i < totalPages; i++) - { - pages[i].startAddress = baseAddress + (i * pageSize); - pages[i].headPage = -1; - pages[i].committed = false; - pages[i].sizeInPages = 0; - pages[i].sizeInBytes = 0; - pages[i].pageFaults = 0; - pages[i].locked = false; - } - - SetLogging( g_bLogVirtualMemory ); - - inited = true; - return true; -} - -void VirtualMemoryManager::Destroy() -{ - if(pages != 0) - { - VirtualFree((LPVOID)baseAddress, 0, MEM_RELEASE); - HeapFree(GetProcessHeap(), 0, pages); - CloseHandle(vmemFile); - } -} - -void* VirtualMemoryManager::Allocate(size_t size) -{ - if(!inited) - return NULL; - - LockMut(vmemMutex); - - unsigned long startPage = -1; - unsigned long freeSegments = 0; - unsigned long sizeInPages = (size / pageSize) + 1; - - if(size % pageSize == 0) - sizeInPages--; - - // find a contiguous group of pages that will fit the data - for(unsigned long i = 0; i < totalPages; i++) - { - if(pages[i].sizeInPages != 0) - { - startPage = -1; - freeSegments = 0; - i += pages[i].sizeInPages - 1; // go to next page segment - } - else - { - if(startPage == -1) - { - startPage = i; - freeSegments = 1; - } - else - freeSegments++; - - if(sizeInPages == freeSegments) - { - if(LOG && logging) - LOG->Trace("Allocating pages %u to %u", startPage, startPage + freeSegments - 1); - - // commit this to memory - DWORD ret = (DWORD)VirtualAlloc((LPVOID)pages[startPage].startAddress, size, MEM_COMMIT, PAGE_READWRITE); - while(ret == NULL) - { - bool swappedOut = DecommitLRU(); - - if(!swappedOut) - { - if(LOG) - LOG->Trace("VMem error: out of memory with no pages to swap out left"); - return NULL; - } - - ret = (DWORD)VirtualAlloc((LPVOID)pages[startPage].startAddress, size, MEM_COMMIT, PAGE_READWRITE); - } - - pageLRU = (startPage + sizeInPages) % totalPages; - for(unsigned long j = startPage; j < startPage + freeSegments; j++) - { - pages[j].headPage = startPage; - pages[j].pageFaults = 0; - pages[j].sizeInPages = freeSegments; - pages[j].sizeInBytes = size; - pages[j].committed = true; - pages[i].locked = false; - } - - return (void*) ret; - } - } - } - - if(LOG) - LOG->Trace("VMem error: Couldn't find contiguous group of pages to allocate"); - - return NULL; -} - -bool VirtualMemoryManager::Free(void *ptr) -{ - if(!inited) - return false; - - LockMut(vmemMutex); - - // check that the address is within the virtual address bounds - if((DWORD)ptr < baseAddress || (DWORD)ptr >= baseAddress + (totalPages * pageSize)) - { - return false; - } - - // find the page(s) to free - DWORD offset = (DWORD)ptr - baseAddress; - unsigned long pageIndex = offset / pageSize; - - if(pages[pageIndex].headPage == -1) - { - return false; - } - - pageIndex = pages[pageIndex].headPage; - ptr = (void *)pages[pageIndex].startAddress; - - unsigned long endPage = pageIndex + pages[pageIndex].sizeInPages; - unsigned long size = pages[pageIndex].sizeInBytes; - - if(size == 0) - { - return false; // trying to free unallocated memory - } - - if(LOG && logging) - LOG->Trace("Freeing pages %u to %u", pageIndex, endPage - 1); - - if(pages[pageIndex].committed) - VirtualFree(ptr, size, MEM_DECOMMIT); - - for(unsigned long i = pageIndex; i < endPage; i++) - { - pages[i].headPage = -1; - pages[i].committed = false; - pages[i].pageFaults = 0; - pages[i].sizeInBytes = 0; - pages[i].sizeInPages = 0; - pages[i].locked = false; - } - - return true; -} - -bool VirtualMemoryManager::PageFault(void *ptr) -{ - if(!inited) - return false; - - LockMut(vmemMutex); - - // check that the address is within the virtual address bounds - if((DWORD)ptr < baseAddress || (DWORD)ptr >= baseAddress + (totalPages * pageSize)) - { - if(LOG) - { - LOG->Trace("Vmem error: Page fault outside virtual memory bounds"); - LOG->Trace("Address: %u, bounds: %u to %u", (DWORD)ptr, baseAddress, baseAddress + (totalPages * pageSize)); - } - return false; - } - - // find the page segment that the fault occurred - unsigned long offset = (DWORD)ptr - baseAddress; - unsigned long pageIndex = offset / pageSize; - - - unsigned long startPage = pages[pageIndex].headPage; - if(startPage == -1) - { - if(LOG) - LOG->Trace("VMem error: Trying to access memory that wasn't allocated"); - // trying to access memory that wasn't allocated - return false; - } - - if(pages[startPage].committed) - { - if(LOG && logging) - LOG->Trace("Pages appear to be committed already. Doing nothing..."); - return true; - } - - pageLRU = (startPage + pages[startPage].sizeInPages) % totalPages; - - if(LOG && logging) - LOG->Trace("Reallocating pages %u to %u", startPage, startPage + pages[startPage].sizeInPages - 1); - - DWORD ret = (DWORD)VirtualAlloc((LPVOID)pages[startPage].startAddress, pages[startPage].sizeInBytes, MEM_COMMIT, PAGE_READWRITE); - - while(ret == NULL) - { - bool swappedOut = DecommitLRU(); - if(!swappedOut) - { - if(LOG) - LOG->Trace("VMem error: no pages left to swap out while reallocating"); - - return false; - } - - ret = (DWORD)VirtualAlloc((LPVOID)pages[startPage].startAddress, pages[startPage].sizeInBytes, MEM_COMMIT, PAGE_READWRITE); - } - - for(unsigned long i = startPage; i < startPage + pages[startPage].sizeInPages; i++) - { - pages[i].committed = true; - pages[i].pageFaults++; - } - - DWORD numRead; - - SetFilePointer(vmemFile, pages[startPage].startAddress - baseAddress, 0, FILE_BEGIN); - ReadFile(vmemFile, (void *)pages[startPage].startAddress, pages[startPage].sizeInBytes, &numRead, NULL); - - return true; -} - -bool VirtualMemoryManager::DecommitLRU() -{ - if(!inited) - return false; - - LockMut(vmemMutex); - - // choose random LRU - pageLRU = rand() % totalPages; - - for(unsigned long i = 0; i < totalPages; i++) - { - unsigned long index = (pageLRU + i) % totalPages; - - if(index == 0) - index++; - - if(pages[index].headPage == index && pages[index].committed && !pages[index].locked) // this is a head page - { - DWORD addr = pages[index].startAddress; - unsigned long size = pages[index].sizeInPages; - - // decommit this page - // write to the page file - if(SetFilePointer(vmemFile, addr - baseAddress, 0, FILE_BEGIN) == INVALID_SET_FILE_POINTER) - { - if(LOG) - LOG->Trace("Vmem error: could not write to page file"); - return false; - } - - DWORD written; - - WriteFile(vmemFile, (LPCVOID)addr, pages[index].sizeInBytes, &written, NULL); - - // reset the page data - if(LOG && logging) - LOG->Trace("Swapping out pages %i to %i", index, index + size - 1); - - for(unsigned long j = index; j < index + size; j++) - { - pages[j].committed = false; - } - - if(VirtualFree((LPVOID)addr, pages[index].sizeInBytes, MEM_DECOMMIT) == 0) - { - return false; - } - - pageLRU = (pageLRU + pages[index].sizeInPages) % totalPages; - - return true; - } - } - - return false; -} - -bool VirtualMemoryManager::EnsureFreeMemory(size_t size) -{ - if(!inited) - return false; - - LockMut(vmemMutex); - - MEMORYSTATUS ms; - GlobalMemoryStatus(&ms); - - while(ms.dwAvailPhys < size) - { - if(LOG && logging) - LOG->Trace("Freeing memory: need %i, have %i", size, ms.dwAvailPhys); - - if(!DecommitLRU()) - { - if(LOG) - LOG->Trace("VMem error: No pages left to free while reserving memory"); - return false; - } - } - - return true; -} - -void VirtualMemoryManager::Lock(void *ptr) -{ - if(!inited) - return; - - LockMut(vmemMutex); - - // check that the address is within the virtual address bounds - if((DWORD)ptr < baseAddress || (DWORD)ptr >= baseAddress + (totalPages * pageSize)) - { - return; - } - - // find the page(s) to free - DWORD offset = (DWORD)ptr - baseAddress; - unsigned long pageIndex = offset / pageSize; - - if(pages[pageIndex].headPage == -1) - { - return; - } - - pageIndex = pages[pageIndex].headPage; - - unsigned long endPage = pageIndex + pages[pageIndex].sizeInPages; - - if(!pages[pageIndex].committed) - { - if(!PageFault(ptr)) - return; - } - - for(unsigned long i = pageIndex; i < endPage; i++) - { - pages[i].locked = true; - } -} -void VirtualMemoryManager::Unlock(void *ptr) -{ - if(!inited) - return; - - LockMut(vmemMutex); - - // check that the address is within the virtual address bounds - if((DWORD)ptr < baseAddress || (DWORD)ptr >= baseAddress + (totalPages * pageSize)) - { - return; - } - - // find the page(s) to free - DWORD offset = (DWORD)ptr - baseAddress; - unsigned long pageIndex = offset / pageSize; - - if(pages[pageIndex].headPage == -1) - { - return; - } - - pageIndex = pages[pageIndex].headPage; - - unsigned long endPage = pageIndex + pages[pageIndex].sizeInPages; - - for(unsigned long i = pageIndex; i < endPage; i++) - { - pages[i].locked = false; - } -} - -void* operator new (size_t size) -{ - if(!vmem_Manager.IsValid()) - return HeapAlloc(GetProcessHeap(), 0, size); - - if(size > vmem_Manager.GetThreshold()) - return vmem_Manager.Allocate(size); - else - { - void *ret = HeapAlloc(GetProcessHeap(), 0, size); - while(ret == NULL) - { - if(!vmem_Manager.DecommitLRU()) - return NULL; - - ret = HeapAlloc(GetProcessHeap(), 0, size); - } - return ret; - } -} - -void* operator new[] (size_t size) -{ - if(!vmem_Manager.IsValid()) - return HeapAlloc(GetProcessHeap(), 0, size); - - if(size > vmem_Manager.GetThreshold()) - return vmem_Manager.Allocate(size); - else - { - void *ret = HeapAlloc(GetProcessHeap(), 0, size); - while(ret == NULL) - { - if(!vmem_Manager.DecommitLRU()) - return NULL; - - ret = HeapAlloc(GetProcessHeap(), 0, size); - } - return ret; - } -} - -void operator delete (void *p) -{ - if(vmem_Manager.IsValid()) - { - if(vmem_Manager.Free(p)) - return; - } - - HeapFree(GetProcessHeap(), 0, p); -} - -void operator delete[] (void *p) -{ - if(vmem_Manager.IsValid()) - { - if(vmem_Manager.Free(p)) - return; - } - - HeapFree(GetProcessHeap(), 0, p); -} - -void *valloc(size_t size) -{ - if(!vmem_Manager.IsValid()) - return HeapAlloc(GetProcessHeap(), 0, size); - - if(size > vmem_Manager.GetThreshold()) - return vmem_Manager.Allocate(size); - else - { - void *ret = HeapAlloc(GetProcessHeap(), 0, size); - while(ret == NULL) - { - if(!vmem_Manager.DecommitLRU()) - return NULL; - - ret = HeapAlloc(GetProcessHeap(), 0, size); - } - return ret; - } -} - -void vfree(void *ptr) -{ - if(vmem_Manager.IsValid()) - { - if(vmem_Manager.Free(ptr)) - return; - } - - HeapFree(GetProcessHeap(), 0, ptr); -} - -LONG _stdcall CheckPageFault(LPEXCEPTION_POINTERS e) -{ - if(LOG && e->ExceptionRecord->ExceptionCode != EXCEPTION_ACCESS_VIOLATION) - LOG->Trace("Exception: %u", e->ExceptionRecord->ExceptionCode); - - if (e->ExceptionRecord->ExceptionCode != EXCEPTION_ACCESS_VIOLATION) - return EXCEPTION_CONTINUE_SEARCH; - - DWORD addr = (DWORD)e->ExceptionRecord->ExceptionInformation[1]; - - if(vmem_Manager.IsValid()) - { - if(LOG && vmem_Manager.IsLogging()) - LOG->Trace("Page fault"); - - if(vmem_Manager.PageFault((void *)addr)) - return EXCEPTION_CONTINUE_EXECUTION; - } - - return EXCEPTION_CONTINUE_SEARCH; -} - -int NoMemory(size_t size) -{ - if(LOG && vmem_Manager.IsLogging()) - LOG->Trace("Out of memory, freeing up some..."); - - if(vmem_Manager.DecommitLRU()) - { - if(LOG && vmem_Manager.IsLogging()) - LOG->Trace("Freed some memory, trying again"); - return 1; - } - else - { - if(LOG) - LOG->Trace("No memory left to free. Failed"); - return 0; - } -} - -/* - * (c) 2004 Ryan Dortmans - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ \ No newline at end of file diff --git a/src/archutils/Xbox/VirtualMemory.h b/src/archutils/Xbox/VirtualMemory.h deleted file mode 100644 index 3d27a84b95..0000000000 --- a/src/archutils/Xbox/VirtualMemory.h +++ /dev/null @@ -1,87 +0,0 @@ -#ifndef VIRTUAL_MEMORY_H -#define VIRTUAL_MEMORY_H - -#if defined(XBOX) -#include -#else -#include -#endif - -#include "RageThreads.h" - -struct vm_page; - -class VirtualMemoryManager -{ -public: - VirtualMemoryManager(); - ~VirtualMemoryManager(); - - bool Init(); - void Destroy(); - void* Allocate(size_t size); - bool Free(void *ptr); - bool PageFault(void *ptr); - bool DecommitLRU(); - bool EnsureFreeMemory(size_t size); - void Lock(void *ptr); - void Unlock(void *ptr); - void SetLogging(bool l) { logging = l; } - - bool IsValid() { return inited; } - bool IsLogging() { return logging; } - unsigned long GetThreshold() { return threshold; } - -protected: - vm_page *pages; - HANDLE vmemFile; - DWORD baseAddress; - unsigned long totalPages; - unsigned long pageSize; - unsigned long threshold; - unsigned long pageLRU; - - bool inited; - bool logging; - - // mutex to make sure pages aren't allocated/deallocated concurrently - RageMutex vmemMutex; -}; - -void *valloc(size_t size); -void vfree(void *ptr); - -//#define malloc(size) valloc(size) -//#define free(memblock) vfree(memblock) - -extern VirtualMemoryManager vmem_Manager; - -LONG _stdcall CheckPageFault(LPEXCEPTION_POINTERS e); -int NoMemory(size_t size); - -#endif - -/* - * (c) 2004 Ryan Dortmans - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ \ No newline at end of file diff --git a/src/archutils/Xbox/arch_setup.cpp b/src/archutils/Xbox/arch_setup.cpp deleted file mode 100644 index 017e1909b5..0000000000 --- a/src/archutils/Xbox/arch_setup.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#include "global.h" - -#undef main -void __cdecl main() -{ - int argc = 1; - char def[] = "default.xbe"; - char *argv[] = { def }; - int ret=SM_main( argc, argv ); -} - -#ifndef _DEBUG -//release xbox libs doesnt have these functions -FILE * __cdecl _popen(const char *, const char *) -{ - return NULL; -} - -int __cdecl _pclose(FILE *) -{ - return -1; -} - -char *getenv(const char *) -{ - return NULL; -} - -int __cdecl system(const char *) -{ - return -1; -} -#endif - -/* - * (c) 2006 Chris - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons to - * whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF - * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS - * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT - * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS - * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ diff --git a/src/archutils/Xbox/arch_setup.h b/src/archutils/Xbox/arch_setup.h deleted file mode 100644 index 4fc285b866..0000000000 --- a/src/archutils/Xbox/arch_setup.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef ARCH_SETUP_XBOX_H -#define ARCH_SETUP_XBOX_H - -#include -#include -#include - -#if defined(_XDBG) -#include -#define IsDebuggerPresent() DmIsDebuggerPresent() -#endif - -// Xbox base path -#define SYS_BASE_PATH "D:\\" - -#define SUPPORT_D3D - -/* Stubs: */ -inline HRESULT CoInitialize( LPVOID pvReserved ) { return S_OK; } -inline void CoUninitialize() { } - -extern "C" int SM_main( int argc, char *argv[] ); -#define main(x,y) SM_main(x,y) - -#endif diff --git a/src/archutils/Xbox/custom_launch_params.cpp b/src/archutils/Xbox/custom_launch_params.cpp deleted file mode 100644 index 47716d2ca0..0000000000 --- a/src/archutils/Xbox/custom_launch_params.cpp +++ /dev/null @@ -1,66 +0,0 @@ -#include -#include -#include "custom_launch_params.h" - -CUSTOM_LAUNCH_DATA g_launchData ; -int g_autoLaunchGame ; -int g_launchReturnXBE ; - -//XGetCustomLaunchData -// -//If there is a valid filename to load, then g_autoLaunchGame will be set to 1 -//If there is a valid return XBE, then g_launchReturnXBE will be set to 1 -int XGetCustomLaunchData() -{ - DWORD launchType; - - g_autoLaunchGame = 0 ; - g_launchReturnXBE = 0 ; - - memset( &g_launchData, 0, sizeof( CUSTOM_LAUNCH_DATA ) ) ; - - - if ( ( XGetLaunchInfo( &launchType,(PLAUNCH_DATA)&g_launchData) == ERROR_SUCCESS ) ) - { - if ( ( launchType == LDT_TITLE ) && ( g_launchData.magic == CUSTOM_LAUNCH_MAGIC ) ) - { - if ( g_launchData.szFilename[0] ) - g_autoLaunchGame = 1 ; - - if ( g_launchData.szLaunchXBEOnExit[0] ) - g_launchReturnXBE = 1 ; - - return 1 ; - } - } - - return 0 ; -} - -void XReturnToLaunchingXBE( ) -{ - if ( g_launchReturnXBE ) - { - LD_LAUNCH_DASHBOARD LaunchData = { XLD_LAUNCH_DASHBOARD_MAIN_MENU }; - } - else - { - LD_LAUNCH_DASHBOARD LaunchData = { XLD_LAUNCH_DASHBOARD_MAIN_MENU }; - - XLaunchNewImage( NULL, (LAUNCH_DATA*)&LaunchData ); - } -} - -#ifdef __cplusplus -extern "C" { -#endif - -void doReturn() -{ - XGetCustomLaunchData(); - XReturnToLaunchingXBE( ); -} - -#ifdef __cplusplus -} -#endif diff --git a/src/archutils/Xbox/custom_launch_params.h b/src/archutils/Xbox/custom_launch_params.h deleted file mode 100644 index 196c9ea6df..0000000000 --- a/src/archutils/Xbox/custom_launch_params.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef CUSTOM_LAUNCH_PARAMS_H -#define CUSTOM_LAUNCH_PARAMS_H - -#include - - -#define CUSTOM_LAUNCH_MAGIC 0xEE456777 - -#define COUNTRY_TYPE_AUTODETECT 0 -#define COUNTRY_TYPE_USA 1 -#define COUNTRY_TYPE_JAPAN 2 -#define COUNTRY_TYPE_EUROPE 3 -#define COUNTRY_TYPE_OTHER 4 - -typedef struct _CUSTOM_LAUNCH_DATA -{ - DWORD magic ; //populate this with CUSTOM_LAUNCH_MAGIC so we know we are using this special structure - char szFilename[300] ; //this is the path to the game to load upon startup - char szLaunchXBEOnExit[100] ; //this is the XBE name that should be launched when exiting the emu ( "FILE.XBE" ) - char szRemap_D_As[350] ; //this is what D drive should be mapped to in order to launch the XBE specified in szLaunchXBEOnExit ( "\\Device\\Harddisk0\\Partition1\\GAMES" ) - BYTE country ; //country code to use - BYTE launchInsertedMedia ; //should we auto-run the inserted CD/DVD ? - BYTE executionType ; //generic variable that determines how the emulator is run - for example, if you wish to run FMSXBOX as MSX1 or MSX2 or MSX2+ - char reserved[MAX_LAUNCH_DATA_SIZE-757] ; //MAX_LAUNCH_DATA_SIZE is 3KB - -} CUSTOM_LAUNCH_DATA, *PCUSTOM_LAUNCH_DATA; - -extern CUSTOM_LAUNCH_DATA g_launchData ; -extern int g_autoLaunchGame ; -extern int g_launchReturnXBE ; - - -int XGetCustomLaunchData() ; -void XReturnToLaunchingXBE( ); - -#endif diff --git a/src/archutils/Xbox/saveblue.XBX b/src/archutils/Xbox/saveblue.XBX deleted file mode 100644 index 3756c0c380..0000000000 Binary files a/src/archutils/Xbox/saveblue.XBX and /dev/null differ diff --git a/src/archutils/Xbox/savered.XBX b/src/archutils/Xbox/savered.XBX deleted file mode 100644 index 77d5f92e09..0000000000 Binary files a/src/archutils/Xbox/savered.XBX and /dev/null differ diff --git a/src/archutils/Xbox/smicon.XBX b/src/archutils/Xbox/smicon.XBX deleted file mode 100644 index 3550c4f178..0000000000 Binary files a/src/archutils/Xbox/smicon.XBX and /dev/null differ diff --git a/src/crypto/CryptNoise.cpp b/src/crypto/CryptNoise.cpp index 4db065d162..f65cbe1810 100644 --- a/src/crypto/CryptNoise.cpp +++ b/src/crypto/CryptNoise.cpp @@ -5,16 +5,7 @@ #include "global.h" -#if defined(_XBOX) -void noise_get_heavy(void (*func) (void *, int)) -{ -} - -void noise_get_light(void (*func) (void *, int)) -{ -} - -#elif defined(_WINDOWS) +#if defined(_WINDOWS) #define _WIN32_WINNT 0x0400 // VC6 header needs this defined. #include #include diff --git a/src/ezsockets.cpp b/src/ezsockets.cpp index 188074b6fd..5b3bc56423 100644 --- a/src/ezsockets.cpp +++ b/src/ezsockets.cpp @@ -10,9 +10,9 @@ #include "ezsockets.h" -#if defined(_MSC_VER) && !defined(_XBOX) // We need the WinSock32 Library on Windows +#if defined(_MSC_VER) // We need the WinSock32 Library on Windows #pragma comment(lib,"wsock32.lib") -#elif !defined(__MINGW32__) && !defined(_XBOX) +#elif !defined(__MINGW32__) #include #include #include @@ -38,7 +38,7 @@ EzSockets::EzSockets() MAXCON = 5; memset (&addr,0,sizeof(addr)); //Clear the sockaddr_in structure -#if defined(_WINDOWS) || defined(_XBOX) // Windows REQUIRES WinSock Startup +#if defined(_WINDOWS) // Windows REQUIRES WinSock Startup WSAStartup( MAKEWORD(1,1), &wsda ); #endif @@ -61,11 +61,7 @@ EzSockets::~EzSockets() //Check to see if the socket has been created bool EzSockets::check() { -#if !defined(XBOX) return sock > SOCKET_NONE; -#else - return sock != INVALID_SOCKET; -#endif } bool EzSockets::create() @@ -82,13 +78,7 @@ bool EzSockets::create(int Protocol) case IPPROTO_UDP: return create(IPPROTO_UDP, SOCK_DGRAM); default: - /* XBOX does not support raw sockets. So, since there's no need, - we aren't going to allow it on the XBOX. */ -#if defined(_XBOX) - return false; -#else return create(Protocol, SOCK_RAW); -#endif } } @@ -97,14 +87,9 @@ bool EzSockets::create(int Protocol, int Type) state = skDISCONNECTED; sock = socket(AF_INET, Type, Protocol); lastCode = sock; -#if !defined(XBOX) - return sock > SOCKET_NONE; //Socket must be Greater than 0 -#else - return sock != INVALID_SOCKET; -#endif + return sock > SOCKET_NONE; // Socket must be Greater than 0 } - bool EzSockets::bind(unsigned short port) { if(!check()) @@ -184,32 +169,12 @@ bool EzSockets::connect(const std::string& host, unsigned short port) if(!check()) return false; -#if defined(_XBOX) - if(!isdigit(host[0])) // don't do a DNS lookup for an IP address - { - XNDNS *pxndns = NULL; - XNetDnsLookup(host.c_str(), NULL, &pxndns); - while (pxndns->iStatus == WSAEINPROGRESS) - { - // Do something else while lookup is in progress - } - - if (pxndns->iStatus == 0) - memcpy(&addr.sin_addr, &pxndns->aina[0], sizeof(struct in_addr)); - else - return false; - - XNetDnsRelease(pxndns); - } - else - addr.sin_addr.s_addr = inet_addr(host.c_str()); -#else struct hostent* phe; phe = gethostbyname(host.c_str()); if (phe == NULL) return false; memcpy(&addr.sin_addr, phe->h_addr, sizeof(struct in_addr)); -#endif + addr.sin_family = AF_INET; addr.sin_port = htons(port); @@ -266,7 +231,7 @@ void EzSockets::update() unsigned long EzSockets::LongFromAddrIn( const sockaddr_in & s ) { -#if defined(_XBOX) || defined(_WINDOWS) +#if defined(_WINDOWS) return ntohl(s.sin_addr.S_un.S_addr); #else return ntohl(s.sin_addr.s_addr); diff --git a/src/ezsockets.h b/src/ezsockets.h index 7c8893b84b..6e90313d67 100644 --- a/src/ezsockets.h +++ b/src/ezsockets.h @@ -19,15 +19,7 @@ #include #include -#if defined(_XBOX) -/* - * Summary : WinsockX is bad, XTL is good. - * Explained : WinsockX may rely on some declares that are present in XTL. - * Also, using XTL includes some files maybe needed for other operations - * on Xbox. - */ -#include -#elif defined(_WINDOWS) +#if defined(_WINDOWS) #include #else #include @@ -132,8 +124,8 @@ public: private: - // Only necessary for Windows and Xbox -#if defined(_WINDOWS) || defined(_XBOX) + // Only necessary for Windows +#if defined(_WINDOWS) WSADATA wsda; #endif diff --git a/src/global.cpp b/src/global.cpp index 946261b850..be38a84929 100644 --- a/src/global.cpp +++ b/src/global.cpp @@ -10,7 +10,6 @@ # include "archutils/Darwin/Crash.h" using CrashHandler::IsDebuggerPresent; using CrashHandler::DebugBreak; -#elif defined(XBOX) #else # include #endif diff --git a/src/libjpeg/jmorecfg.h b/src/libjpeg/jmorecfg.h index 93ccd1f84f..68a250c624 100644 --- a/src/libjpeg/jmorecfg.h +++ b/src/libjpeg/jmorecfg.h @@ -187,7 +187,7 @@ typedef unsigned int JDIMENSION; /* a function referenced thru EXTERNs: */ #define GLOBAL(type) type /* a reference to a GLOBAL function: */ -#if defined(WIN32) && !defined(XBOX) +#if defined(WIN32) # ifdef BUILDING_JPEG_DLL # define DLLIMPORT __declspec (dllexport) # else diff --git a/src/lua-5.1/src/luaconf.h b/src/lua-5.1/src/luaconf.h index 0ca4825551..732ac082de 100644 --- a/src/lua-5.1/src/luaconf.h +++ b/src/lua-5.1/src/luaconf.h @@ -700,11 +700,10 @@ union luai_Cast { double l_d; long l_l; }; #define LUA_DL_DLOPEN #endif -#if defined(LUA_WIN) && !defined(XBOX) +#if defined(LUA_WIN) #define LUA_DL_DLL #endif - /* @@ LUAI_EXTRASPACE allows you to add user-specific data in a lua_State @* (the data goes just *before* the lua_State pointer). diff --git a/src/sm-ssc_Xbox-net2003.sln b/src/sm-ssc_Xbox-net2003.sln deleted file mode 100644 index 60286bddd7..0000000000 --- a/src/sm-ssc_Xbox-net2003.sln +++ /dev/null @@ -1,53 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StepMania", "StepManiaXbox-2003.vcproj", "{670745A6-106B-420D-A2A9-D4F89A23986E}" - ProjectSection(ProjectDependencies) = postProject - {15A6313B-3206-4847-87A2-62255F0B3837} = {15A6313B-3206-4847-87A2-62255F0B3837} - {00C33C79-1140-47B0-838B-109A61950513} = {00C33C79-1140-47B0-838B-109A61950513} - {CA22B79A-E8A9-4BFB-A297-42231F2213F2} = {CA22B79A-E8A9-4BFB-A297-42231F2213F2} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xboxmad", "mad-0.15.1b\xboxmad\xboxmad-2003.vcproj", "{CA22B79A-E8A9-4BFB-A297-42231F2213F2}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtomcrypt", "libtomcrypt\libtomcryptXbox-net2003.vcproj", "{15A6313B-3206-4847-87A2-62255F0B3837}" - ProjectSection(ProjectDependencies) = postProject - {00C33C79-1140-47B0-838B-109A61950513} = {00C33C79-1140-47B0-838B-109A61950513} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtommath", "libtommath\libtommathXbox-net2003.vcproj", "{00C33C79-1140-47B0-838B-109A61950513}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection - GlobalSection(SolutionConfiguration) = preSolution - Debug Xbox = Debug Xbox - Release Xbox = Release Xbox - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {670745A6-106B-420D-A2A9-D4F89A23986E}.Debug Xbox.ActiveCfg = Debug|Xbox - {670745A6-106B-420D-A2A9-D4F89A23986E}.Debug Xbox.Build.0 = Debug|Xbox - {670745A6-106B-420D-A2A9-D4F89A23986E}.Release Xbox.ActiveCfg = Release|Xbox - {670745A6-106B-420D-A2A9-D4F89A23986E}.Release Xbox.Build.0 = Release|Xbox - {CA22B79A-E8A9-4BFB-A297-42231F2213F2}.Debug Xbox.ActiveCfg = Debug|Xbox - {CA22B79A-E8A9-4BFB-A297-42231F2213F2}.Debug Xbox.Build.0 = Debug|Xbox - {CA22B79A-E8A9-4BFB-A297-42231F2213F2}.Release Xbox.ActiveCfg = Release|Xbox - {CA22B79A-E8A9-4BFB-A297-42231F2213F2}.Release Xbox.Build.0 = Release|Xbox - {15A6313B-3206-4847-87A2-62255F0B3837}.Debug Xbox.ActiveCfg = Debug|Xbox - {15A6313B-3206-4847-87A2-62255F0B3837}.Debug Xbox.Build.0 = Debug|Xbox - {15A6313B-3206-4847-87A2-62255F0B3837}.Release Xbox.ActiveCfg = Release|Xbox - {15A6313B-3206-4847-87A2-62255F0B3837}.Release Xbox.Build.0 = Release|Xbox - {00C33C79-1140-47B0-838B-109A61950513}.Debug Xbox.ActiveCfg = Debug|Xbox - {00C33C79-1140-47B0-838B-109A61950513}.Debug Xbox.Build.0 = Debug|Xbox - {00C33C79-1140-47B0-838B-109A61950513}.Release Xbox.ActiveCfg = Release|Xbox - {00C33C79-1140-47B0-838B-109A61950513}.Release Xbox.Build.0 = Release|Xbox - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - DPBuild = 5 - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/src/tests/test_timing_data.cpp b/src/tests/test_timing_data.cpp index 06118d6fc9..de995caab9 100644 --- a/src/tests/test_timing_data.cpp +++ b/src/tests/test_timing_data.cpp @@ -101,7 +101,7 @@ void run() CHECK( test.GetElapsedTimeFromBeat(15.0f), 14.5f ); // stopped CHECK( test.GetElapsedTimeFromBeat(16), 20.0f ); - /* todo: add warp tests once the warp code is done */ + // todo: add warp tests -aj RageTimer foobar; /* We can look up the time of any given beat, then look up the beat of that @@ -124,10 +124,10 @@ int q = 0; } LOG->Trace("... %i in %f", q, foobar.GetDeltaTime()); - // todo: add warp segments TimingData test2; test2.AddBPMSegment( BPMSegment(0, 60) ); test2.AddStopSegment( StopSegment(0, 1) ); + //test2.AddWarpSegment( WarpSegment() ); CHECK( test2.GetBeatFromElapsedTime(-1), -1.0f ); CHECK( test2.GetBeatFromElapsedTime(0), 0.0f ); CHECK( test2.GetBeatFromElapsedTime(1), 0.0f );