diff --git a/Courses/Default/ChallengingRandom5.crs b/Courses/Default/ChallengingRandom5.crs index be1a673dd4..36a000f496 100644 --- a/Courses/Default/ChallengingRandom5.crs +++ b/Courses/Default/ChallengingRandom5.crs @@ -1,5 +1,6 @@ #COURSE:Challenging Random 5; #LIVES:4; +#SCRIPTER:AJ; #SONG:*:Hard; #SONG:*:Hard; #SONG:*:Hard; diff --git a/Docs/Changelog_sm5.txt b/Docs/Changelog_sm5.txt index 6785197f3f..d6c32aac74 100644 --- a/Docs/Changelog_sm5.txt +++ b/Docs/Changelog_sm5.txt @@ -5,14 +5,38 @@ from StepMania 4 alpha 5 to sm-ssc v1.2.5, see Changelog_sm-ssc.txt. ________________________________________________________________________________ ================================================================================ -StepMania 5.0 ????????? | 20110??? +StepMania 5.0 Preview 1a | 20110603 -------------------------------------------------------------------------------- +Date Forgotten +-------------- +* [ScreenEdit] Fix Song Timing behaviors. [Wolfman2000] +* [NotesLoaderSM] Fix an Offset load bug. [Wolfman2000] + +2011/06/03 +---------- +* [LifeMeterBattery] Added LivesLeft param to LifeChanged message. [AJ] +* [Windows] Set up directories for pictures and app data in their proper + location. [Henke] + +2011/06/02 +---------- +* [BPMDisplay] Added SetFromSteps Lua binding. [AJ] +* [ScreenDebugOverlay] Switch the R and T keys to be Volume Down and Up + respectively. I have to admit, it makes more sense to have volume up be + on the right instead of the left. [Wolfman2000] +* [SongManager] Make autogen courses have "Autogen" as the Scripter. [AJ] + +2011/06/01 +---------- +* [TimingData] Added the HasScrollChanges lua binding. [Wolfman2000] + 2011/05/31 ---------- * [Player] Added the BattleRaveMirror metric. This determines if Battle and Rave mode will have the two players with mirrored charts or not. By default, this is set to true, preserving the ITG style behavior. [Wolfman2000] +* [TimingData] Added the HasScrollChanges lua binding. [Wolfman2000] ================================================================================ StepMania 5.0 Preview 1 | 20110529 diff --git a/Docs/Luadoc/Lua.xml b/Docs/Luadoc/Lua.xml index f697390be9..201f0b6312 100644 --- a/Docs/Luadoc/Lua.xml +++ b/Docs/Luadoc/Lua.xml @@ -130,6 +130,7 @@ + @@ -522,6 +523,7 @@ + @@ -627,6 +629,7 @@ + @@ -1023,52 +1026,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1427,6 +1384,7 @@ + @@ -2102,6 +2060,6 @@ - sm-ssc v1.2.5 - 2011-05-19 + StepMania 5 v5.0 Preview 1a + 2011-06-04 diff --git a/Docs/Luadoc/Lua.xsd b/Docs/Luadoc/Lua.xsd index a4103c434e..c6fb7a00e8 100644 --- a/Docs/Luadoc/Lua.xsd +++ b/Docs/Luadoc/Lua.xsd @@ -143,7 +143,6 @@ - diff --git a/Docs/Luadoc/Lua.xsl b/Docs/Luadoc/Lua.xsl index d7aabdfe4c..bf0562f25c 100644 --- a/Docs/Luadoc/Lua.xsl +++ b/Docs/Luadoc/Lua.xsl @@ -78,16 +78,6 @@ margin: 1px 2px 1px 2px; border: 1px solid #777; } - .sm-ssc{ - text-align: justify; - vertical-align: text-top; - background: #FFDDEE url(./bgline.png) repeat-x scroll 0 0; - padding: 1px; - } - fieldset div.sm-ssc{ - margin: 1px 2px 1px 2px; - border: 1px solid #777; - } ._fallbackTheme{ text-align: justify; vertical-align: text-top; @@ -243,9 +233,8 @@
Function Colors -
Available in SM4 alphas, sm-ssc, and StepMania 5
+
Available in sm-ssc and StepMania 5
Renamed or changed from StepMania 4 alphas
-
New bindings (since StepMania 4 alphas)
Defined in the _fallback theme
Defined in the default theme
@@ -487,7 +476,6 @@ renamed - sm-ssc _fallbackTheme defaultTheme descriptionCell @@ -524,7 +512,6 @@ - sm-ssc descriptionCell diff --git a/Docs/Luadoc/LuaDocumentation.xml b/Docs/Luadoc/LuaDocumentation.xml index 135d345578..b0bd9a2393 100644 --- a/Docs/Luadoc/LuaDocumentation.xml +++ b/Docs/Luadoc/LuaDocumentation.xml @@ -50,7 +50,7 @@ CLAMP is an all-female Japanese mangaka group that formed in the mid 1980s. Erm, I mean... Clamps fValue between fLow and fHigh. - + Closes any connection to an online server. @@ -110,7 +110,7 @@ Returns the current Life Difficulty. - + Returns a string representing the name of the operating system being used. (e.g. "Windows", "Linux", "Mac, "Unknown") @@ -119,7 +119,7 @@ [02 Utilities.lua] Returns a path to a random song background. - + Returns the name of the currently connected server. @@ -251,22 +251,22 @@ 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). @@ -314,7 +314,7 @@ [00 init.lua] Alias for . - + Returns a string with characters escaped for URLs. (e.g. a space becomes '%20') @@ -490,13 +490,13 @@ Plays the commands that follow at an accelerated rate (fRate * fRate), where fRate is in seconds. - + Adds rot to the Actor's current x rotation. - + Adds rot to the Actor's current y rotation. - + Adds rot to the Actor's current z rotation. @@ -532,7 +532,7 @@ Sets the Actor's base Z rotation to rot. - + Sets the Actor's base zoom to zoom. @@ -541,7 +541,7 @@ Sets the Actor's base Y zoom to zoom. - + Sets the Actor's base Z zoom to zoom. @@ -667,16 +667,16 @@ Returns the Actor's base X zoom value. - + Returns the Actor's base Y zoom value. - + Returns the Actor's base Z zoom value. Returns true if the Actor has a command named sCmdName. - + Returns the Actor's current diffuse color. @@ -688,10 +688,10 @@ Returns the Actor's current effect magnitude as three floats (not one; I hate Lua.xsd). - + Returns the Actor's current glow color. - + Returns the Actor's horizontal alignment as a number in the range 0..1. @@ -703,13 +703,13 @@ Returns the Actor's current height. - + Returns the Actor's current X rotation. Returns the Actor's current Y rotation. - + Returns the Actor's current Z rotation. @@ -718,7 +718,7 @@ Returns how much time is remaining for the current tween. - + Returns the Actor's vertical alignment as a number in the range 0..1. @@ -733,7 +733,7 @@ Sets the Actor's glow color. - + @@ -838,7 +838,7 @@ Skews the Actor on the x axis by fAmount. - + Skews the Actor on the y axis by fAmount. @@ -902,12 +902,18 @@ [02 Actor.lua] + + [02 Actor.lua] Centers an Actor on the screen. (equivalent to x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y) + [03 ProductivityHelpers.lua] Centers an Actor on the X axis. (equivalent to x,SCREEN_CENTER_X) [03 ProductivityHelpers.lua] Centers an Actor on the y axis. (equivalent to y,SCREEN_CENTER_Y) + + [02 Actor.lua] Stretches an Actor to cover the screen. (equivalent to stretchto,0,0,SCREEN_WIDTH,SCREEN_HEIGHT) + [03 ProductivityHelpers.lua] A customized version of pulse that is more appealing for on-beat effects. @@ -964,10 +970,10 @@ Runs the commands in cmds on the ActorFrame's leaves. - + Sets the ActorFrame's ambient light color to c. - + Sets the ActorFrame's diffuse light color to c. @@ -979,10 +985,10 @@ Sets the field of view for the ActorFrame. - + Currently unimplemented since it does not handle errors correctly. Arguments must be passed in as a table. - + Sets the ActorFrame's specular light color to c. @@ -1018,16 +1024,16 @@ - + Returns the scroller's current item. - + Returns the item the scroller's going to. - + Returns how long it will take for the scroller to completely scroll through all its items. - + Returns the number of items in the ActorScroller. @@ -1069,7 +1075,7 @@ Sets the scroller's mask to a Quad that is fWidth by fHeight pixels. - + Sets the scroller to draw fNumItems items. @@ -1113,7 +1119,7 @@ Loads the sound at sPath. - + Pauses or unpauses the sound based on bPause. @@ -1122,29 +1128,29 @@ [02 Sound.lua] Plays the sound on the given player's side. You must set SupportPan = true on load. - + Stops the sound. - + Returns true if Announcer sAnnouncer exists. - + Returns a table of installed announcers. - + Returns the current announcer's name. - + Sets the announcer to sNewAnnouncer. - + Returns true if the Banner is currently scrolling. - + @@ -1180,7 +1186,7 @@ See . - + @@ -1241,7 +1247,7 @@ Sets the stroke color to c. - + If the text is glowing, specify if just the stroke layer, just the inner layer, or both are affected by the glow. @@ -1255,42 +1261,45 @@ - + 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 specified Course. Sets the BPMDisplay from the GameState. - + Sets the BPMDisplay from the specified Song. + + Sets the BPMDisplay from the specified Steps. + Returns the path to the character's card graphic. - + Returns this character's directory. - + Returns this character's ID. - + Returns the path of the dancing animation of this character. - + Returns the character's display name. Returns the path to the character's icon. - + Returns the path of the model of this character. - + Returns the path of the rest animation of this character. @@ -1299,18 +1308,18 @@ Returns the path to the character's ScreenStage icon. - + Returns the path of the warm-up animation of this character. - + Returns a table of all characters installed. Return the corresponding to sID. - + Returns a random character. @@ -1334,16 +1343,16 @@ Returns a table of all the Trails in the Course. - + Returns the path to the Course's background. Returns the path to the Course's banner. - + Returns the Course's directory. - + Returns a table of CourseEntry items. @@ -1367,7 +1376,7 @@ Returns the Course's . (Returns PlayMode in sm-ssc; integer in SM4) - + Returns the name of the person who scripted the Course. @@ -1376,10 +1385,10 @@ Returns the full transliterated title of the Course. - + Returns true if the Course has a background. - + Returns true if the Course has a banner. @@ -1388,7 +1397,7 @@ Returns true if the Course has timed modifiers. - + Returns true if the Course is an edit. @@ -1397,10 +1406,10 @@ Returns true if the Course is Endless. - + Returns true if the Course is Nonstop. - + Returns true if the Course is Oni. @@ -1414,36 +1423,36 @@ Returns the Song that this CourseEntry corresponds to. - + Returns the number of lives gained after completing the song. - + Returns the number of seconds gained after completing the song. - + Returns any stage (non-timed) modifiers. - + Returns the number of modifier changes in this CourseEntry. - + Returns a comma-delimited string representing various facts about the CourseEntry. - + Returns true if this CourseEntry is a fixed song. - + Returns true if this CourseEntry is secret. - + Returns the MD5 hash for the file at sPath. - + Returns the MD5 hash for s. - + Returns the SHA-1 hash for s. @@ -1467,7 +1476,7 @@ - + Returns the index of the last banner loaded. @@ -1491,10 +1500,10 @@ - + Returns any Character associated with this item (or nil if there isn't one). - + Returns any Course that may have been set. @@ -1509,7 +1518,7 @@ Returns any Profile ID that may have been set. - + Returns any screen that may have been set as a string. @@ -1518,7 +1527,7 @@ Returns the name of any song group that may have been set. - + Returns any Steps that may have been set. @@ -1527,10 +1536,10 @@ Returns the display text. - + Returns any Trail that may have been set. - + Returns any Url that may have been set. @@ -1538,7 +1547,7 @@ Return the first for the specified game. - + Returns true if any noteskins exist for the specified Game s. @@ -1554,7 +1563,7 @@ to the right. --> Return the sound balance for pn. - + Plays a sound from the current announcer. @@ -1569,16 +1578,19 @@ The second argument is optional. Apply the GameCommand represented by sCommand for pn, if given. See . + + Removes any stage modifiers that are illegal for course play. + Returns true if enough credits have been inserted to join. - + fishpolk.mid; See also: Rise of the Triad Returns the environment table. See . - + Returns the current for the specified . @@ -1597,7 +1609,7 @@ The s in a are numbered sequentially starting from 0. Return the number of the current . - + Return the current number of seconds that have passed in the current song. This value can be negative. @@ -1663,7 +1675,7 @@ Return true if the gameplay lead in is enabled. If false, gameplay begins immediately. - + Return the hardest of the currently selected steps by all players. For example, if player 1 has selected Hard steps and player 2 has selected Medium steps, Hard will @@ -1672,12 +1684,18 @@ Returns an array of s corresponding to Human players. + + Returns the index of the next song in the course. + Returns the master player number. Returns true if the game is Multiplayer. + + Returns the PlayerState for the specified MultiPlayer. + Returns the number of active multiplayer NoteFields. @@ -1714,21 +1732,27 @@ Returns the current Premium. - - - Returns the current beat of the song. + + + Kind of does what it says on the tin. + + + [01 compat.lua] Returns the current beat of the song. + + + [01 compat.lua] Returns the current beat of the song without an offset. Returns the current visible beat of the song. - - Returns the song's current beats per second. + + [01 compat.lua] Returns the song's current beats per second. - - Returns true if a delay is active in the song. + + [01 compat.lua] Returns true if a delay is active in the song. - - Returns true if the song is currently in a freeze. + + [01 compat.lua] Returns true if the song is currently in a freeze. Returns the song options for the specified ModsLevel as a string. @@ -1736,11 +1760,11 @@ Returns the song options as a string. - + Returns how much of the song is through at beat fBeat. - - + + Returns the current SongPosition. Returns the current SortOrder. @@ -1763,7 +1787,7 @@ Returns true if any human player is using a memory card. - + Returns true if playing in Battle mode. @@ -1799,7 +1823,7 @@ Returns true if player pn is the winner. - + Joins player pn. @@ -1814,7 +1838,7 @@ Saves the bookkeeping and machine profile data. - + Sets the current for the specified . @@ -1832,7 +1856,7 @@ Sets if the Jukebox should use modifiers. - + @@ -1856,7 +1880,7 @@ Determines if Judgment W1 should be shown based on bOn. - + Unjoins player pn. @@ -1894,6 +1918,9 @@ Returns two tables representing the tips and alternate tips in the HelpDisplay. + + [02 HelpDisplay.lua] Sets the tips from a Song or Course. + Sets the seconds between switches of tips to fSeconds. @@ -1911,10 +1938,10 @@ Returns the Grade of this high score. - + Return the number of HoldNoteScores that match hns. - + Returns the modifiers used for this HighScore. @@ -1923,7 +1950,7 @@ Returns the percentage of dance points associated with the high score. - + Returns the RadarValues for this HighScore. @@ -1932,7 +1959,7 @@ Returns the number of seconds survived associated with the high score. - + Return the number of TapNoteScores that match tns. @@ -1953,12 +1980,12 @@ - + - + Returns the X position of the mouse. - + Returns the Y position of the mouse. @@ -1977,29 +2004,29 @@ - + Returns the number of lives remaining. - + Returns the number of total lives. - + Returns true if player pn's card is locked. Return the state for player pn. - + Returns the name of the storage device. - + Returns true if player pn's name is available. - + Returns the current MenuTimer's value. @@ -2048,7 +2075,7 @@ Sets the model's default animation to sAnimation at fPlayRate speed (default 1.0). - + Returns the number of states the Model has. @@ -2095,39 +2122,39 @@ Returns the actor for the specified sButton sElement using NoteSkin sNoteSkin. - + Returns true if the strName noteskin exists in the current gametype. - + Returns a table of noteskin names for the current gametype. - + Returns true if the first item in the row goes down. - + Returns an index of the choice in the row that player pn is on. - + Returns the OptionRow's layout type. - + Returns the name of the OptionRow. - + Returns the number of choices in this OptionRow. - + Returns the row title string. - + Returns the OptionRow's select type. - + Returns true if this row is focused by player pn. - + Returns true if this row forces one choice on all players. @@ -2147,230 +2174,230 @@ Returns the of player pn. - + Returns the Steps located at index in the current steps queue. - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + 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) @@ -2378,13 +2405,13 @@ Returns true if a full combo (TNS_W3 and up) was obtained. - + Returns true if a full combo (tns and up) was obtained. Returns the number of Dance Points obtained by the player. - + Returns how long the player has been alive. @@ -2393,7 +2420,7 @@ Returns the number of calories burned. - + Returns the current possible maximum score. @@ -2402,10 +2429,10 @@ Returns the player's current life from 0..1. - + Returns the player's current miss combo. - + Returns the number of Dance Points possible to be obtained by the player. @@ -2438,7 +2465,7 @@ Returns a table of played steps. - + Gets the percentage of taps that were scored as tns. @@ -2450,10 +2477,10 @@ Returns a table of possible steps. - + Returns a RadarValues object representing the player's actual performance. - + Returns a RadarValues object representing the total values for the song. @@ -2488,24 +2515,24 @@ Returns true if the player was disqualified from ranking. - + Sets the current possible maximum score. - + Sets the Player's score to iScore. - + Returns the current PlayerOptions for this PlayerState. - + Returns the HealthState for this PlayerState. - + Returns the multiplayer number for this PlayerState. - + Returns the PlayerController for this PlayerState. @@ -2514,13 +2541,13 @@ Returns a PlayerOptions object for the specified ModsLevel. - + Returns a string of player options for the specified ModsLevel. (was GetPlayerOptions in v1.2.2 and prior) Returns a table of strings, containing the player options for the specified ModsLevel. - + Returns the SongPosition for this PlayerState. @@ -2531,7 +2558,7 @@ Return the value of the preference sPreference. - + Return true if preference sPreference exists. @@ -2575,6 +2602,9 @@ Gets the profile's HighScoreList for a specified Song and Steps. (Alternate arguments for Courses: Course c, Trail t) + + Returns the last used high score name. + Returns the number of Toasties gotten using the specified profile. @@ -2614,7 +2644,7 @@ Returns the number of Jumps stepped on. - + Returns the number of successful Lifts. @@ -2644,7 +2674,7 @@ Returns true if the specified code sUnlockEntryID is unlocked. - + Sets the current for the Profile. @@ -2660,13 +2690,13 @@ Sets how much the player weighs (in pounds) to weightPounds. - + Returns the amount of time this profile has spent in gameplay (in seconds). - + Returns the number of sessions this profile has had. - + Returns the total session length (in seconds) of this profile. @@ -2684,19 +2714,19 @@ Returns the profile for player pn. - + Returns the profile directory of the specified ProfileSlot. Returns true if player pn's profile is persistent. - + Returns true if Song s has never been played before (according to the machine profile). - + Returns true if the last load of player pn's profile was a LastGood copy of the profile. - + Returns true if the last load of player pn's profile resulted in a tampered or corrupt profile. @@ -2721,7 +2751,7 @@ These commands require a RageFile handle. You can create one using . - + Returns true if the current position within the file is the end. (EOF = End of File) @@ -2750,13 +2780,13 @@ Returns a string containing the entire contents of the file. - + Returns length bytes from the RageFile's current position. Seeks to a position in the file and returns the new position. - + Returns the current position in the file. @@ -2764,16 +2794,16 @@ - + Returns true if a file exists at sPath. - + Returns a listing of files from sPath. The last two arguments are optional (and default to false). - + Returns a file's size in bytes. - + Returns the hash of the file at sPath. @@ -2795,7 +2825,7 @@ Sets the speed (that is, the rate at which the sound plays) to fSpeed. The associated must have SupportsRateChanging = true on load. - + Sets the volume to fVolume, which is between 0..1. @@ -2814,7 +2844,7 @@ - + Loads the metrics for this RollingNumbers from sGroupName. @@ -2825,7 +2855,7 @@ Returns the name of the next Screen. - + Returns the name of the previous Screen. @@ -2836,7 +2866,7 @@ - + Returns the current . @@ -2864,10 +2894,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. @@ -2877,13 +2907,13 @@ - + Adds a screen at the top of the screen stack. Gets the screen at the top of the screen stack. - + Reloads any loaded overlay screens. @@ -2928,21 +2958,21 @@ - + Returns the number of active players. - + Returns true if all active players are on the last options row. - + Returns true if the specified player is on an items that ends the screen. Returns the current row that player pn is on. (Was previously GetCurrentRow.) - + Returns the specified OptionRow. @@ -2968,7 +2998,7 @@ - + Returns player pn's current selected item as an integer. @@ -2976,10 +3006,10 @@ Returns true if the player is going to the options screen. - + Returns the MusicWheel used on this screen. - + Opens the OptionsList for Player pn @@ -3008,7 +3038,7 @@ See the Changelog for details on TextEntrySetting's format. - + Sets up a ScreenTextEntry's values. @@ -3027,13 +3057,13 @@ Returns the path to the song's banner. - + Gets the path to the CDTitle. Returns the displayed artist of the song. - + Returns a table of 2 floats containing the display BPMs. @@ -3057,28 +3087,28 @@ Returns the last beat of the song. - + Gets the path to the lyrics. - + Gets the path to the music file. Returns a Step object if the StepType and Difficulty exist. - + Gets the Song's origin. Returns the song's directory. - + Returns the songfile path. Returns a table of Steps that have StepsType st. - + Returns how long the longest stepchart is in seconds. @@ -3099,49 +3129,49 @@ Returns true if the song has steps for the specified difficulty in st. - + Returns true if the song has attacks. - + Returns true if the song has a background. - + Returns true if the song has a banner. - + Returns true if the song has BGChanges. - + Returns true if the song has a CDTitle. - + Returns true if the song has edits. - + Returns true if the song has lyrics. - + Returns true if the song has music. - + Returns true if the song has significant elephants or bison. - + Returns true if the song has . - + Returns true if the song's DisplayBPM is constant. - + Returns true if the song's DisplayBPM is random. - + Returns true if the song's DisplayBPM is secret. - + Returns true if the song is considered easy. - + Returns true if the song is enabled. @@ -3156,7 +3186,7 @@ Returns the length of the song in seconds. - + Returns true if the song is normally displayed. @@ -3176,7 +3206,7 @@ Returns the course color of Course c. - + Returns a table containing all of the course group names. @@ -3222,54 +3252,54 @@ Returns the song group color of sGroupName. - + Returns a table containing all of the song group names. - + Returns the rank (popularity) of Song s. - + Returns a table containing all of the songs in group sGroupName. - + Returns the shortened group name (based on entries in Translations.xml). - + Loads preferred courses from {theme}/Other/SongManager sListName.txt. - + Loads preferred songs from {theme}/Other/SongManager sListName.txt. - + Returns the current beats per second. - + Returns true if a Delay is active. - + Returns true if a Freeze is active. - + - + - + - + - + - + Returns the row where a warp appears. - + Returns the warp destination length. @@ -3277,10 +3307,10 @@ Returns the length of the animation in seconds. - + Return the number of states this Sprite has. - + Returns the Sprite's current state (frame number in a multi-frame sprite). @@ -3341,13 +3371,13 @@ Set the texture coordinate velocity which controls how the Sprite changes as it animates. - + Crops the Sprite to fWidthxfHeight. [01 alias.lua] Alias for CropTo. - + Sets all the state delays to fRate. Useful for Sprites that need to change by BPM (e.g. Tran from DDR 5th Mix, the cube from DS EuroMix 2). @@ -3415,7 +3445,7 @@ Returns the author that made that particular Steps pattern. - + Returns the Chart Style for this Steps. @@ -3427,14 +3457,14 @@ Returns the Steps filename from the Cache. - + Returns a hash of the Steps. Returns the numerical difficulty of the Steps. - - Returns true if the song has significant timing changes. + + returns true if the song has significant timing changes. Returns the complete list of RadarValues for player pn. Use to grab a specific value. @@ -3442,19 +3472,19 @@ Returns the Steps type. - + Returns the TimingData for the Steps. - + Returns true if the Steps are an edit. - + Returns true if the Steps are a player edit (loaded from a profile). Returns true if the steps were automatically generated. - + Returns true if the Steps use different TimingData from the Song. @@ -3476,7 +3506,7 @@ - + Returns the number of total tracks this Style contains (e.g. 4 for dance-versus, but 8 for dance-double). @@ -3488,7 +3518,7 @@ Returns the StyleType for this Style. - + Returns true if the Style needs to be zoomed out with two players. @@ -3504,10 +3534,10 @@ - + Returns the current language. - + Returns the theme's current directory. @@ -3528,74 +3558,77 @@ returns three strings: BGAnimation ResolvedPath, MatchingMetricsGroup, MatchingElement. Used in LoadFallbackB in themes/_fallback/02 Other.lua. (Lua.xsd sucks) - + Returns the path of an element in the Other folder. Returns the path of an element in the Sounds folder. - + Returns a table of selectable theme directories. Returns the value of Element in Class for the currently loaded language. - + Returns the author of the current theme or "[unknown author]". - + Returns the display name of the current theme. - + Reloads the current theme's metrics. - + Returns the minimum and maximum BPM of the song in a table (in that order). - + Returns the beat from fElapsedTime. - + Returns the BPM at fBeat. - + Returns a table of the BPMs as strings. - + Returns a table of the BPMs and the times they happen as strings with the format "beat=BPM". Returns the elapsed time from fBeat. - + Returns a table of the Stops and the times they happen as strings with the format "beat=stop seconds". - + Returns a table of the Delays and the times they happen as strings with the format "beat=stop seconds". - + Returns a table of the Labels and the times they happen as strings with the format "beat=label name." - + Returns true if the TimingData contains BPM changes. - + Returns true if the TimingData contains any BPM changes with a negative BPM. Returns true if the TimingData contains stops. - + Returns true if the TimingData contains warps. - - Returns true if the TimingData contains fake segments. + + returns true if the TimingData contains fake segments. - + Returns true if the TimingData contains speed scrolling changes. + + Returns true if the TimingData contains general scrolling changes. + @@ -3604,7 +3637,7 @@ Returns the Trail's difficulty. - + Returns a table of TrailEntry items. @@ -3616,21 +3649,21 @@ Returns the Trail's StepsType. - + Returns the TrailEntry at index iEntry. - + Returns a string of modifiers used in this TrailEntry. Returns the Song used in this TrailEntry. - + Returns the Steps used in this TrailEntry. - + (why'd I think this was a good idea when we have ?) @@ -3642,10 +3675,10 @@ Sets the UnlockEntry's course to sCourseName.
Example: course,"Driven"
- + Returns the code for this unlock. - + Returns the Course for this unlock. @@ -3701,10 +3734,10 @@ 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. @@ -3731,25 +3764,25 @@ - + Returns the wheel's current index. - + Returns the total number of items in the wheel. Returns the WheelItem at index iIndex. - + Returns true if the wheel is locked. - + Returns true if the wheel is settled/stopped moving. - + Moves the wheel by n. - + Attempts to set the open section to sSection. diff --git a/Docs/Luadoc/favicon.ico b/Docs/Luadoc/favicon.ico index 5a530ab403..95519364bc 100644 Binary files a/Docs/Luadoc/favicon.ico and b/Docs/Luadoc/favicon.ico differ diff --git a/Docs/credits.txt b/Docs/credits.txt index 55c8ad396b..b7cb9c0177 100644 --- a/Docs/credits.txt +++ b/Docs/credits.txt @@ -68,7 +68,7 @@ David Santamar * Various patches (see Changelog_sm-ssc.txt for more details and links) Kita K./D. Trucks - * sm-ssc default theme music + * default theme music kurisu * Dance-threepanel gametype code (3.9; re-adapted for sm-ssc) diff --git a/Themes/_fallback/Fonts/_misc 16px.ini b/Themes/_fallback/Fonts/_misc 16px.ini index 2b44a545ce..b29a07252b 100644 --- a/Themes/_fallback/Fonts/_misc 16px.ini +++ b/Themes/_fallback/Fonts/_misc 16px.ini @@ -27,7 +27,7 @@ Top=8 Baseline=23 LineSpacing=24 -line 0=☆★♡♥Ω +line 0=☆★♥♡Ω map doublezeta=5 map planet=6 diff --git a/Themes/_fallback/Graphics/Common window icon.png b/Themes/_fallback/Graphics/Common window icon.png index 23750444ac..4a68593c5d 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/Scripts/03 ProductivityHelpers.lua b/Themes/_fallback/Scripts/03 ProductivityHelpers.lua index efe523ddfa..eb2d64bb9d 100644 --- a/Themes/_fallback/Scripts/03 ProductivityHelpers.lua +++ b/Themes/_fallback/Scripts/03 ProductivityHelpers.lua @@ -223,6 +223,23 @@ end; --[[ ----------------------------------------------------------------------- ]] +--[[ profile stuff ]] +-- Profile(pn) +-- This returns a profile, preferably a player one. +-- If there isn't one, we fall back on the machine profile. +function Profile(pn) + if PROFILEMAN:IsPersistentProfile(pn) then + -- player profile + return PROFILEMAN:GetProfile(pn); + else + -- machine profile + return PROFILEMAN:GetMachineProfile(); + end; +end; +--[[ end profile stuff]] + +--[[ ----------------------------------------------------------------------- ]] + --[[ helper functions ]] function tobool(v) if type(v) == "string" then diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index 1c5d45139a..46246439b0 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -1016,7 +1016,7 @@ TickcountOffsetX=70 ComboOffsetX=50 LabelOffsetX=130 SpeedOffsetX=30 -ScrollOffsetX=40 +ScrollOffsetX=100 FakeOffsetX=90 [PlayerStageStats] @@ -2867,7 +2867,7 @@ PlayMusic=false # TimerSeconds=30 # -LineNames="1,2,3,4,5,6,R,7,8,9,10,11,12,13,14,15,16,17" +LineNames="1,2,3,4,5,6,R,7,8,9,10,11,12,13,14,16,17" Line1="lua,SpeedMods()" # Line1="list,Speed" Line2="list,Accel" diff --git a/Themes/default/Graphics/ScreenGameplay BPMDisplay.lua b/Themes/default/Graphics/ScreenGameplay BPMDisplay.lua index 3bed3203ec..4b927fb10a 100644 --- a/Themes/default/Graphics/ScreenGameplay BPMDisplay.lua +++ b/Themes/default/Graphics/ScreenGameplay BPMDisplay.lua @@ -5,4 +5,4 @@ return Def.SongBPMDisplay { SetCommand=function(self) self:SetFromGameState() end; CurrentSongChangedMessageCommand=cmd(playcommand,"Set"); CurrentCourseChangedMessageCommand=cmd(playcommand,"Set"); -}; \ No newline at end of file +}; diff --git a/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/default.lua b/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/default.lua index b26cdbe22e..966f417b67 100644 --- a/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/default.lua +++ b/Themes/default/Graphics/ScreenSelectMusic DifficultyDisplay/default.lua @@ -8,7 +8,7 @@ local function GetEdits( in_Song, in_StepsType ) if sSong:HasEdits( sStepsType ) then local tAllSteps = sSong:GetAllSteps(); for i,Step in pairs(tAllSteps) do - if Step:IsAnEdit() and s:GetStepsType() == sStepsType then + if Step:IsAnEdit() and Step:GetStepsType() == sStepsType then iNumEdits = iNumEdits + 1; end end diff --git a/Themes/default/Scripts/03 ThemePrefs.lua b/Themes/default/Scripts/03 ThemePrefs.lua index f3b91da4e3..d7c1555728 100644 --- a/Themes/default/Scripts/03 ThemePrefs.lua +++ b/Themes/default/Scripts/03 ThemePrefs.lua @@ -232,7 +232,7 @@ end function GetDefaultOptionLines() local LineSets = { - "1,8,14,2,3,4,5,6,R,7,9,10,11,12,13,15,16,17,18", -- All + "1,8,14,2,3,4,5,6,R,7,9,10,11,12,13,16,17,18", -- All "1,8,14,2,7,13,16,17,18", -- DDR Essentials ( no turns, fx ) }; local function IsExtra() diff --git a/Xcode/stepmania.xcodeproj/project.pbxproj b/Xcode/stepmania.xcodeproj/project.pbxproj index e135889337..95044c3766 100644 --- a/Xcode/stepmania.xcodeproj/project.pbxproj +++ b/Xcode/stepmania.xcodeproj/project.pbxproj @@ -23,6 +23,40 @@ /* Begin PBXBuildFile section */ 1215D7A208C6559A00B87D8B /* ScreenGameplayNormal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1215D7A008C6559A00B87D8B /* ScreenGameplayNormal.cpp */; }; + 2B17AB7713980FF6001AE57D /* png.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6130D13773C8E00CC8BBD /* png.c */; }; + 2B17AB7813980FF6001AE57D /* png.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC6130E13773C8E00CC8BBD /* png.h */; }; + 2B17AB7913980FF6001AE57D /* pngconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC6130F13773C8E00CC8BBD /* pngconf.h */; }; + 2B17AB7A13980FF6001AE57D /* pngdebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC6131013773C8E00CC8BBD /* pngdebug.h */; }; + 2B17AB7B13980FF6001AE57D /* pngerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131113773C8E00CC8BBD /* pngerror.c */; }; + 2B17AB7C13980FF6001AE57D /* pngget.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131213773C8E00CC8BBD /* pngget.c */; }; + 2B17AB7D13980FF6001AE57D /* pnginfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC6131313773C8E00CC8BBD /* pnginfo.h */; }; + 2B17AB7E13980FF6001AE57D /* pnglibconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC6133D13773D2C00CC8BBD /* pnglibconf.h */; }; + 2B17AB7F13980FF6001AE57D /* pngmem.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131413773C8E00CC8BBD /* pngmem.c */; }; + 2B17AB8013980FF6001AE57D /* pngpread.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131513773C8E00CC8BBD /* pngpread.c */; }; + 2B17AB8113980FF6001AE57D /* pngpriv.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC6131613773C8E00CC8BBD /* pngpriv.h */; }; + 2B17AB8213980FF6001AE57D /* pngread.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131713773C8E00CC8BBD /* pngread.c */; }; + 2B17AB8313980FF6001AE57D /* pngrio.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131813773C8E00CC8BBD /* pngrio.c */; }; + 2B17AB8413980FF6001AE57D /* pngrtran.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131913773C8E00CC8BBD /* pngrtran.c */; }; + 2B17AB8513980FF6001AE57D /* pngrutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131A13773C8E00CC8BBD /* pngrutil.c */; }; + 2B17AB8613980FF6001AE57D /* pngset.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131B13773C8E00CC8BBD /* pngset.c */; }; + 2B17AB8713980FF6001AE57D /* pngstruct.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC6131C13773C8E00CC8BBD /* pngstruct.h */; }; + 2B17AB8813980FF6001AE57D /* pngtrans.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131E13773C8E00CC8BBD /* pngtrans.c */; }; + 2B17AB8913980FF6001AE57D /* pngwio.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6132013773C8E00CC8BBD /* pngwio.c */; }; + 2B17AB8A13980FF6001AE57D /* pngwrite.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6132113773C8E00CC8BBD /* pngwrite.c */; }; + 2B17AB8B13980FF6001AE57D /* pngwtran.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6132213773C8E00CC8BBD /* pngwtran.c */; }; + 2B17AB8C13980FF6001AE57D /* pngwutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6132313773C8E00CC8BBD /* pngwutil.c */; }; + 2B17AB9F13981271001AE57D /* libpng.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17AB7213980FDF001AE57D /* libpng.a */; }; + 2B17ABC51398153F001AE57D /* glew.c in Sources */ = {isa = PBXBuildFile; fileRef = EE879BAA132E06C50078FDDC /* glew.c */; }; + 2B17ABCF139815E0001AE57D /* libglew.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABC013981521001AE57D /* libglew.a */; }; + 2B17ABE51398179E001AE57D /* chartables.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7904AFD87300D02EE9 /* chartables.c */; }; + 2B17ABE61398179E001AE57D /* get.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7A04AFD87300D02EE9 /* get.c */; }; + 2B17ABE71398179E001AE57D /* internal.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8B6C7B04AFD87300D02EE9 /* internal.h */; }; + 2B17ABE81398179E001AE57D /* maketables.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7C04AFD87300D02EE9 /* maketables.c */; }; + 2B17ABE91398179E001AE57D /* pcre.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7D04AFD87300D02EE9 /* pcre.c */; }; + 2B17ABEA1398179E001AE57D /* pcre.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8B6C7E04AFD87300D02EE9 /* pcre.h */; }; + 2B17ABEB1398179E001AE57D /* study.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7F04AFD87300D02EE9 /* study.c */; }; + 2B17ABFC139817D5001AE57D /* libpcre.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABE013981756001AE57D /* libpcre.a */; }; + 2B17ABFD139817D6001AE57D /* libpcre.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B17ABE013981756001AE57D /* libpcre.a */; }; 2B30D6821315EA7E00044B68 /* MouseDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B30D6801315EA7E00044B68 /* MouseDevice.cpp */; }; 2B30D6831315EA7E00044B68 /* MouseDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B30D6811315EA7E00044B68 /* MouseDevice.h */; }; 2B43509513949F37006FA051 /* TimingSegments.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B43509313949F37006FA051 /* TimingSegments.h */; }; @@ -37,28 +71,6 @@ 2BA7925F1304F20D002BD8E1 /* NotesLoaderSSC.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA7925B1304F20D002BD8E1 /* NotesLoaderSSC.h */; }; 2BA792601304F20D002BD8E1 /* NotesWriterSSC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BA7925C1304F20D002BD8E1 /* NotesWriterSSC.cpp */; }; 2BA792611304F20D002BD8E1 /* NotesWriterSSC.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA7925D1304F20D002BD8E1 /* NotesWriterSSC.h */; }; - 2BC6132413773C8E00CC8BBD /* png.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6130D13773C8E00CC8BBD /* png.c */; }; - 2BC6132513773C8E00CC8BBD /* png.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC6130E13773C8E00CC8BBD /* png.h */; }; - 2BC6132613773C8E00CC8BBD /* pngconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC6130F13773C8E00CC8BBD /* pngconf.h */; }; - 2BC6132713773C8E00CC8BBD /* pngdebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC6131013773C8E00CC8BBD /* pngdebug.h */; }; - 2BC6132813773C8E00CC8BBD /* pngerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131113773C8E00CC8BBD /* pngerror.c */; }; - 2BC6132913773C8E00CC8BBD /* pngget.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131213773C8E00CC8BBD /* pngget.c */; }; - 2BC6132A13773C8E00CC8BBD /* pnginfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC6131313773C8E00CC8BBD /* pnginfo.h */; }; - 2BC6132B13773C8E00CC8BBD /* pngmem.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131413773C8E00CC8BBD /* pngmem.c */; }; - 2BC6132C13773C8E00CC8BBD /* pngpread.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131513773C8E00CC8BBD /* pngpread.c */; }; - 2BC6132D13773C8E00CC8BBD /* pngpriv.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC6131613773C8E00CC8BBD /* pngpriv.h */; }; - 2BC6132E13773C8E00CC8BBD /* pngread.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131713773C8E00CC8BBD /* pngread.c */; }; - 2BC6132F13773C8E00CC8BBD /* pngrio.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131813773C8E00CC8BBD /* pngrio.c */; }; - 2BC6133013773C8E00CC8BBD /* pngrtran.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131913773C8E00CC8BBD /* pngrtran.c */; }; - 2BC6133113773C8E00CC8BBD /* pngrutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131A13773C8E00CC8BBD /* pngrutil.c */; }; - 2BC6133213773C8E00CC8BBD /* pngset.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131B13773C8E00CC8BBD /* pngset.c */; }; - 2BC6133313773C8E00CC8BBD /* pngstruct.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC6131C13773C8E00CC8BBD /* pngstruct.h */; }; - 2BC6133513773C8E00CC8BBD /* pngtrans.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6131E13773C8E00CC8BBD /* pngtrans.c */; }; - 2BC6133713773C8E00CC8BBD /* pngwio.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6132013773C8E00CC8BBD /* pngwio.c */; }; - 2BC6133813773C8E00CC8BBD /* pngwrite.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6132113773C8E00CC8BBD /* pngwrite.c */; }; - 2BC6133913773C8E00CC8BBD /* pngwtran.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6132213773C8E00CC8BBD /* pngwtran.c */; }; - 2BC6133A13773C8E00CC8BBD /* pngwutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6132313773C8E00CC8BBD /* pngwutil.c */; }; - 2BC6133E13773D2C00CC8BBD /* pnglibconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC6133D13773D2C00CC8BBD /* pnglibconf.h */; }; 2BD06FEE137242680018CB9F /* json_batchallocator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BD06FDD137240CF0018CB9F /* json_batchallocator.h */; }; 2BD06FEF137242680018CB9F /* json_internalarray.inl in Resources */ = {isa = PBXBuildFile; fileRef = 2BD06FDE137240CF0018CB9F /* json_internalarray.inl */; }; 2BD06FF0137242680018CB9F /* json_internalmap.inl in Resources */ = {isa = PBXBuildFile; fileRef = 2BD06FDF137240CF0018CB9F /* json_internalmap.inl */; }; @@ -333,10 +345,6 @@ AA29CDFE0558741A00961A51 /* ScreenSelectMaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1DC47404A4861700D02EE9 /* ScreenSelectMaster.cpp */; }; AA29CE000558741A00961A51 /* CombinedLifeMeterTug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE443EB04B0F9F600D02EE9 /* CombinedLifeMeterTug.cpp */; }; AA29CE010558741A00961A51 /* ScoreKeeperRave.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE443F304B0FEB700D02EE9 /* ScoreKeeperRave.cpp */; }; - AA29CE030558741A00961A51 /* get.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7A04AFD87300D02EE9 /* get.c */; }; - AA29CE040558741A00961A51 /* maketables.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7C04AFD87300D02EE9 /* maketables.c */; }; - AA29CE050558741A00961A51 /* pcre.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7D04AFD87300D02EE9 /* pcre.c */; }; - AA29CE060558741A00961A51 /* study.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7F04AFD87300D02EE9 /* study.c */; }; AA29CE070558741A00961A51 /* RageUtil_FileDB.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF580A704B3E2DC00D02EE9 /* RageUtil_FileDB.cpp */; }; AA29CE090558741A00961A51 /* ActorUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA983CA04B9060A00D02EE9 /* ActorUtil.cpp */; }; AA29CE0B0558741A00961A51 /* ArchHooks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3F283B04BE6DDC00D02EE9 /* ArchHooks.cpp */; }; @@ -554,8 +562,6 @@ AA40D26709A08D650068C0D5 /* ScreenSelectMaster.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1DC47504A4861700D02EE9 /* ScreenSelectMaster.h */; }; AA40D26B09A08D650068C0D5 /* CombinedLifeMeterTug.h in Headers */ = {isa = PBXBuildFile; fileRef = AAE443EC04B0F9F600D02EE9 /* CombinedLifeMeterTug.h */; }; AA40D26C09A08D650068C0D5 /* ScoreKeeperRave.h in Headers */ = {isa = PBXBuildFile; fileRef = AAE443F404B0FEB700D02EE9 /* ScoreKeeperRave.h */; }; - AA40D26D09A08D650068C0D5 /* internal.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8B6C7B04AFD87300D02EE9 /* internal.h */; }; - AA40D26E09A08D650068C0D5 /* pcre.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8B6C7E04AFD87300D02EE9 /* pcre.h */; }; AA40D26F09A08D650068C0D5 /* RageUtil_FileDB.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF580A804B3E2DC00D02EE9 /* RageUtil_FileDB.h */; }; AA40D27109A08D650068C0D5 /* LoadingWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = AAEF3D1004B53E2900D02EE9 /* LoadingWindow.h */; }; AA40D27209A08D650068C0D5 /* InputHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB3B36C04C38B4600D02EE9 /* InputHandler.h */; }; @@ -880,10 +886,6 @@ AA40D42009A08D650068C0D5 /* ScreenSelectMaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA1DC47404A4861700D02EE9 /* ScreenSelectMaster.cpp */; }; AA40D42109A08D650068C0D5 /* CombinedLifeMeterTug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE443EB04B0F9F600D02EE9 /* CombinedLifeMeterTug.cpp */; }; AA40D42209A08D650068C0D5 /* ScoreKeeperRave.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAE443F304B0FEB700D02EE9 /* ScoreKeeperRave.cpp */; }; - AA40D42309A08D650068C0D5 /* get.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7A04AFD87300D02EE9 /* get.c */; }; - AA40D42409A08D650068C0D5 /* maketables.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7C04AFD87300D02EE9 /* maketables.c */; }; - AA40D42509A08D650068C0D5 /* pcre.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7D04AFD87300D02EE9 /* pcre.c */; }; - AA40D42609A08D650068C0D5 /* study.c in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6C7F04AFD87300D02EE9 /* study.c */; }; AA40D42709A08D650068C0D5 /* RageUtil_FileDB.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAF580A704B3E2DC00D02EE9 /* RageUtil_FileDB.cpp */; }; AA40D42909A08D650068C0D5 /* ActorUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAA983CA04B9060A00D02EE9 /* ActorUtil.cpp */; }; AA40D42A09A08D650068C0D5 /* ArchHooks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA3F283B04BE6DDC00D02EE9 /* ArchHooks.cpp */; }; @@ -1661,7 +1663,6 @@ AAFF41A60F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF41A20F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h */; }; B75CE3B5137963350076A82D /* SongPosition.h in Headers */ = {isa = PBXBuildFile; fileRef = B75CE3B3137963350076A82D /* SongPosition.h */; }; B75CE3B6137963350076A82D /* SongPosition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B75CE3B4137963350076A82D /* SongPosition.cpp */; }; - B7B0914B1393481B00C33E6B /* glew.c in Sources */ = {isa = PBXBuildFile; fileRef = EE879BAA132E06C50078FDDC /* glew.c */; }; EE2153A910A75BEE0074B01B /* NotesLoaderPMS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE2153A710A75BEE0074B01B /* NotesLoaderPMS.cpp */; }; EE2153AA10A75BEE0074B01B /* NotesLoaderPMS.h in Headers */ = {isa = PBXBuildFile; fileRef = EE2153A810A75BEE0074B01B /* NotesLoaderPMS.h */; }; EE879B60132DEE720078FDDC /* RageDisplay_Legacy_Helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE879B5C132DEE720078FDDC /* RageDisplay_Legacy_Helpers.cpp */; }; @@ -1682,6 +1683,27 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 2B17AB8D13981009001AE57D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2B17AB7113980FDF001AE57D; + remoteInfo = png; + }; + 2B17ABD0139815EB001AE57D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2B17ABBF13981521001AE57D; + remoteInfo = glew; + }; + 2B17ABFE139817DF001AE57D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2B17ABDF13981756001AE57D; + remoteInfo = pcre; + }; AA30C61907F5E2EF0066F398 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; @@ -1802,6 +1824,9 @@ 1215D7A108C6559A00B87D8B /* ScreenGameplayNormal.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ScreenGameplayNormal.h; path = ../src/ScreenGameplayNormal.h; sourceTree = ""; }; 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 2B17AB7213980FDF001AE57D /* libpng.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libpng.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 2B17ABC013981521001AE57D /* libglew.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libglew.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 2B17ABE013981756001AE57D /* libpcre.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libpcre.a; sourceTree = BUILT_PRODUCTS_DIR; }; 2B30D6801315EA7E00044B68 /* MouseDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MouseDevice.cpp; sourceTree = ""; }; 2B30D6811315EA7E00044B68 /* MouseDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MouseDevice.h; sourceTree = ""; }; 2B43509313949F37006FA051 /* TimingSegments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TimingSegments.h; path = ../src/TimingSegments.h; sourceTree = SOURCE_ROOT; }; @@ -3053,6 +3078,27 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 2B17AB7013980FDF001AE57D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2B17ABBE13981521001AE57D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2B17ABDE13981756001AE57D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; AA29CE3B0558741A00961A51 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -3077,6 +3123,9 @@ AA059E2C0B8F0C67006F8139 /* libz_link.a in Frameworks */, AAA0704E0CE5082E005A3060 /* libffmpeg_link.a in Frameworks */, AAA071B40CE7C9C9005A3060 /* libmad.a in Frameworks */, + 2B17AB9F13981271001AE57D /* libpng.a in Frameworks */, + 2B17ABCF139815E0001AE57D /* libglew.a in Frameworks */, + 2B17ABFC139817D5001AE57D /* libpcre.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3103,6 +3152,7 @@ AA7C8D430B674F4E00FD9940 /* libtommath.a in Frameworks */, AA059E2B0B8F0C67006F8139 /* libz_link.a in Frameworks */, AAA0704F0CE5082E005A3060 /* libffmpeg_link.a in Frameworks */, + 2B17ABFD139817D6001AE57D /* libpcre.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3191,6 +3241,9 @@ AA7C895F0B67444700FD9940 /* libtommath.a */, AA7C8B8B0B67460600FD9940 /* libtomcrypt.a */, AAA070A90CE7B0DF005A3060 /* libmad.a */, + 2B17AB7213980FDF001AE57D /* libpng.a */, + 2B17ABC013981521001AE57D /* libglew.a */, + 2B17ABE013981756001AE57D /* libpcre.a */, ); name = Products; sourceTree = ""; @@ -5039,6 +5092,36 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ + 2B17AB6E13980FDF001AE57D /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 2B17AB7813980FF6001AE57D /* png.h in Headers */, + 2B17AB7913980FF6001AE57D /* pngconf.h in Headers */, + 2B17AB7A13980FF6001AE57D /* pngdebug.h in Headers */, + 2B17AB7D13980FF6001AE57D /* pnginfo.h in Headers */, + 2B17AB7E13980FF6001AE57D /* pnglibconf.h in Headers */, + 2B17AB8113980FF6001AE57D /* pngpriv.h in Headers */, + 2B17AB8713980FF6001AE57D /* pngstruct.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2B17ABBC13981521001AE57D /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2B17ABDC13981756001AE57D /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 2B17ABE71398179E001AE57D /* internal.h in Headers */, + 2B17ABEA1398179E001AE57D /* pcre.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AA29CC270558741A00961A51 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -5061,13 +5144,6 @@ EE879B63132DEE720078FDDC /* RageDisplay_Legacy.h in Headers */, 2B76698B132FF71500586512 /* NotesLoaderSMA.h in Headers */, 2BD06FEE137242680018CB9F /* json_batchallocator.h in Headers */, - 2BC6132513773C8E00CC8BBD /* png.h in Headers */, - 2BC6132613773C8E00CC8BBD /* pngconf.h in Headers */, - 2BC6132713773C8E00CC8BBD /* pngdebug.h in Headers */, - 2BC6132A13773C8E00CC8BBD /* pnginfo.h in Headers */, - 2BC6132D13773C8E00CC8BBD /* pngpriv.h in Headers */, - 2BC6133313773C8E00CC8BBD /* pngstruct.h in Headers */, - 2BC6133E13773D2C00CC8BBD /* pnglibconf.h in Headers */, B75CE3B5137963350076A82D /* SongPosition.h in Headers */, 2B9C2E8E137A138B004C92F3 /* NotesLoaderJson.h in Headers */, 2B9C2E90137A138B004C92F3 /* NotesWriterJson.h in Headers */, @@ -5227,8 +5303,6 @@ AA40D26709A08D650068C0D5 /* ScreenSelectMaster.h in Headers */, AA40D26B09A08D650068C0D5 /* CombinedLifeMeterTug.h in Headers */, AA40D26C09A08D650068C0D5 /* ScoreKeeperRave.h in Headers */, - AA40D26D09A08D650068C0D5 /* internal.h in Headers */, - AA40D26E09A08D650068C0D5 /* pcre.h in Headers */, AA40D26F09A08D650068C0D5 /* RageUtil_FileDB.h in Headers */, AA40D27109A08D650068C0D5 /* LoadingWindow.h in Headers */, AA40D27209A08D650068C0D5 /* InputHandler.h in Headers */, @@ -5585,6 +5659,57 @@ /* End PBXLegacyTarget section */ /* Begin PBXNativeTarget section */ + 2B17AB7113980FDF001AE57D /* png */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2B17AB8F13981052001AE57D /* Build configuration list for PBXNativeTarget "png" */; + buildPhases = ( + 2B17AB6E13980FDF001AE57D /* Headers */, + 2B17AB6F13980FDF001AE57D /* Sources */, + 2B17AB7013980FDF001AE57D /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = png; + productName = png; + productReference = 2B17AB7213980FDF001AE57D /* libpng.a */; + productType = "com.apple.product-type.library.static"; + }; + 2B17ABBF13981521001AE57D /* glew */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2B17ABCC139815AC001AE57D /* Build configuration list for PBXNativeTarget "glew" */; + buildPhases = ( + 2B17ABBC13981521001AE57D /* Headers */, + 2B17ABBD13981521001AE57D /* Sources */, + 2B17ABBE13981521001AE57D /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = glew; + productName = glew; + productReference = 2B17ABC013981521001AE57D /* libglew.a */; + productType = "com.apple.product-type.library.static"; + }; + 2B17ABDF13981756001AE57D /* pcre */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2B17ABF9139817C3001AE57D /* Build configuration list for PBXNativeTarget "pcre" */; + buildPhases = ( + 2B17ABDC13981756001AE57D /* Headers */, + 2B17ABDD13981756001AE57D /* Sources */, + 2B17ABDE13981756001AE57D /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = pcre; + productName = pcre; + productReference = 2B17ABE013981756001AE57D /* libpcre.a */; + productType = "com.apple.product-type.library.static"; + }; AA29CC240558741A00961A51 /* stepmania */ = { isa = PBXNativeTarget; buildConfigurationList = AAC8450F0856A19700A9FEAB /* Build configuration list for PBXNativeTarget "stepmania" */; @@ -5601,9 +5726,12 @@ ); dependencies = ( AAE781FE0AC7E61900AEFC64 /* PBXTargetDependency */, + 2B17ABD1139815EB001AE57D /* PBXTargetDependency */, AA7C8D180B6748B800FD9940 /* PBXTargetDependency */, AA7C8D160B6748B800FD9940 /* PBXTargetDependency */, + 2B17AB8E13981009001AE57D /* PBXTargetDependency */, AAA071AA0CE7B879005A3060 /* PBXTargetDependency */, + 2B17ABFF139817DF001AE57D /* PBXTargetDependency */, AA30C61A07F5E2EF0066F398 /* PBXTargetDependency */, ); name = stepmania; @@ -5776,6 +5904,9 @@ AA7C895E0B67444700FD9940 /* tommath */, AA7C8B8A0B67460600FD9940 /* tomcrypt */, AAA070A80CE7B0DF005A3060 /* mad */, + 2B17AB7113980FDF001AE57D /* png */, + 2B17ABBF13981521001AE57D /* glew */, + 2B17ABDF13981756001AE57D /* pcre */, ); }; /* End PBXProject section */ @@ -5905,12 +6036,53 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 2B17AB6F13980FDF001AE57D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2B17AB7713980FF6001AE57D /* png.c in Sources */, + 2B17AB7B13980FF6001AE57D /* pngerror.c in Sources */, + 2B17AB7C13980FF6001AE57D /* pngget.c in Sources */, + 2B17AB7F13980FF6001AE57D /* pngmem.c in Sources */, + 2B17AB8013980FF6001AE57D /* pngpread.c in Sources */, + 2B17AB8213980FF6001AE57D /* pngread.c in Sources */, + 2B17AB8313980FF6001AE57D /* pngrio.c in Sources */, + 2B17AB8413980FF6001AE57D /* pngrtran.c in Sources */, + 2B17AB8513980FF6001AE57D /* pngrutil.c in Sources */, + 2B17AB8613980FF6001AE57D /* pngset.c in Sources */, + 2B17AB8813980FF6001AE57D /* pngtrans.c in Sources */, + 2B17AB8913980FF6001AE57D /* pngwio.c in Sources */, + 2B17AB8A13980FF6001AE57D /* pngwrite.c in Sources */, + 2B17AB8B13980FF6001AE57D /* pngwtran.c in Sources */, + 2B17AB8C13980FF6001AE57D /* pngwutil.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2B17ABBD13981521001AE57D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2B17ABC51398153F001AE57D /* glew.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2B17ABDD13981756001AE57D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2B17ABE51398179E001AE57D /* chartables.c in Sources */, + 2B17ABE61398179E001AE57D /* get.c in Sources */, + 2B17ABE81398179E001AE57D /* maketables.c in Sources */, + 2B17ABE91398179E001AE57D /* pcre.c in Sources */, + 2B17ABEB1398179E001AE57D /* study.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AA29CD410558741A00961A51 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; comments = "We need a better way of organizing compile order here."; files = ( - B7B0914B1393481B00C33E6B /* glew.c in Sources */, AA29CD520558741A00961A51 /* RageUtil.cpp in Sources */, AA29CD420558741A00961A51 /* RageBitmapTexture.cpp in Sources */, AA29CD430558741A00961A51 /* RageDisplay.cpp in Sources */, @@ -6052,10 +6224,6 @@ AA29CDFE0558741A00961A51 /* ScreenSelectMaster.cpp in Sources */, AA29CE000558741A00961A51 /* CombinedLifeMeterTug.cpp in Sources */, AA29CE010558741A00961A51 /* ScoreKeeperRave.cpp in Sources */, - AA29CE030558741A00961A51 /* get.c in Sources */, - AA29CE040558741A00961A51 /* maketables.c in Sources */, - AA29CE050558741A00961A51 /* pcre.c in Sources */, - AA29CE060558741A00961A51 /* study.c in Sources */, AA29CE070558741A00961A51 /* RageUtil_FileDB.cpp in Sources */, AA29CE090558741A00961A51 /* ActorUtil.cpp in Sources */, AA29CE0B0558741A00961A51 /* ArchHooks.cpp in Sources */, @@ -6320,21 +6488,6 @@ 2BD06FF1137242680018CB9F /* json_reader.cpp in Sources */, 2BD06FF2137242680018CB9F /* json_value.cpp in Sources */, 2BD06FF4137242680018CB9F /* json_writer.cpp in Sources */, - 2BC6132413773C8E00CC8BBD /* png.c in Sources */, - 2BC6132813773C8E00CC8BBD /* pngerror.c in Sources */, - 2BC6132913773C8E00CC8BBD /* pngget.c in Sources */, - 2BC6132B13773C8E00CC8BBD /* pngmem.c in Sources */, - 2BC6132C13773C8E00CC8BBD /* pngpread.c in Sources */, - 2BC6132E13773C8E00CC8BBD /* pngread.c in Sources */, - 2BC6132F13773C8E00CC8BBD /* pngrio.c in Sources */, - 2BC6133013773C8E00CC8BBD /* pngrtran.c in Sources */, - 2BC6133113773C8E00CC8BBD /* pngrutil.c in Sources */, - 2BC6133213773C8E00CC8BBD /* pngset.c in Sources */, - 2BC6133513773C8E00CC8BBD /* pngtrans.c in Sources */, - 2BC6133713773C8E00CC8BBD /* pngwio.c in Sources */, - 2BC6133813773C8E00CC8BBD /* pngwrite.c in Sources */, - 2BC6133913773C8E00CC8BBD /* pngwtran.c in Sources */, - 2BC6133A13773C8E00CC8BBD /* pngwutil.c in Sources */, 2B43509613949F37006FA051 /* TimingSegments.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -6478,10 +6631,6 @@ AA40D42009A08D650068C0D5 /* ScreenSelectMaster.cpp in Sources */, AA40D42109A08D650068C0D5 /* CombinedLifeMeterTug.cpp in Sources */, AA40D42209A08D650068C0D5 /* ScoreKeeperRave.cpp in Sources */, - AA40D42309A08D650068C0D5 /* get.c in Sources */, - AA40D42409A08D650068C0D5 /* maketables.c in Sources */, - AA40D42509A08D650068C0D5 /* pcre.c in Sources */, - AA40D42609A08D650068C0D5 /* study.c in Sources */, AA40D42709A08D650068C0D5 /* RageUtil_FileDB.cpp in Sources */, AA40D42909A08D650068C0D5 /* ActorUtil.cpp in Sources */, AA40D42A09A08D650068C0D5 /* ArchHooks.cpp in Sources */, @@ -7087,6 +7236,21 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 2B17AB8E13981009001AE57D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 2B17AB7113980FDF001AE57D /* png */; + targetProxy = 2B17AB8D13981009001AE57D /* PBXContainerItemProxy */; + }; + 2B17ABD1139815EB001AE57D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 2B17ABBF13981521001AE57D /* glew */; + targetProxy = 2B17ABD0139815EB001AE57D /* PBXContainerItemProxy */; + }; + 2B17ABFF139817DF001AE57D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 2B17ABDF13981756001AE57D /* pcre */; + targetProxy = 2B17ABFE139817DF001AE57D /* PBXContainerItemProxy */; + }; AA30C61A07F5E2EF0066F398 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AA30C60F07F5E24A0066F398 /* version */; @@ -7171,6 +7335,515 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 2B17AB7313980FE0001AE57D /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INHIBIT_ALL_WARNINGS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNDECLARED_SELECTOR = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = "../extern/libpng/**"; + INSTALL_PATH = /usr/local/lib; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = png; + USER_HEADER_SEARCH_PATHS = ""; + }; + name = Native; + }; + 2B17AB7413980FE0001AE57D /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INHIBIT_ALL_WARNINGS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNDECLARED_SELECTOR = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = "../extern/libpng/**"; + INSTALL_PATH = /usr/local/lib; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = png; + USER_HEADER_SEARCH_PATHS = ""; + }; + name = PerformanceDebug; + }; + 2B17AB7513980FE0001AE57D /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INHIBIT_ALL_WARNINGS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNDECLARED_SELECTOR = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = "../extern/libpng/**"; + INSTALL_PATH = /usr/local/lib; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = png; + USER_HEADER_SEARCH_PATHS = ""; + }; + name = Universal; + }; + 2B17AB7613980FE0001AE57D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INHIBIT_ALL_WARNINGS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNDECLARED_SELECTOR = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = "../extern/libpng/**"; + INSTALL_PATH = /usr/local/lib; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = png; + USER_HEADER_SEARCH_PATHS = ""; + }; + name = Debug; + }; + 2B17ABC113981522001AE57D /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNDECLARED_SELECTOR = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = "../extern/glew-1.5.8/include"; + INSTALL_PATH = /usr/local/lib; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = glew; + USER_HEADER_SEARCH_PATHS = ""; + }; + name = Native; + }; + 2B17ABC213981522001AE57D /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNDECLARED_SELECTOR = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = "../extern/glew-1.5.8/include"; + INSTALL_PATH = /usr/local/lib; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = glew; + USER_HEADER_SEARCH_PATHS = ""; + }; + name = PerformanceDebug; + }; + 2B17ABC313981522001AE57D /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNDECLARED_SELECTOR = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = "../extern/glew-1.5.8/include"; + INSTALL_PATH = /usr/local/lib; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = glew; + USER_HEADER_SEARCH_PATHS = ""; + }; + name = Universal; + }; + 2B17ABC413981522001AE57D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNDECLARED_SELECTOR = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = "../extern/glew-1.5.8/include"; + INSTALL_PATH = /usr/local/lib; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = glew; + USER_HEADER_SEARCH_PATHS = ""; + }; + name = Debug; + }; + 2B17ABE113981757001AE57D /* Native */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = ""; + GCC_PREFIX_HEADER = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNDECLARED_SELECTOR = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + INSTALL_PATH = /usr/local/lib; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = pcre; + }; + name = Native; + }; + 2B17ABE213981757001AE57D /* PerformanceDebug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = ""; + GCC_PREFIX_HEADER = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNDECLARED_SELECTOR = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + INSTALL_PATH = /usr/local/lib; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = pcre; + }; + name = PerformanceDebug; + }; + 2B17ABE313981757001AE57D /* Universal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = ""; + GCC_PREFIX_HEADER = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNDECLARED_SELECTOR = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + INSTALL_PATH = /usr/local/lib; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = pcre; + }; + name = Universal; + }; + 2B17ABE413981757001AE57D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = ""; + GCC_PREFIX_HEADER = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; + GCC_WARN_ABOUT_RETURN_TYPE = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PROTOTYPE_CONVERSION = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNDECLARED_SELECTOR = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + INSTALL_PATH = /usr/local/lib; + OTHER_LDFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = pcre; + }; + name = Debug; + }; AA0AA8FE0963CF7700427F4D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8436,6 +9109,39 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 2B17AB8F13981052001AE57D /* Build configuration list for PBXNativeTarget "png" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2B17AB7313980FE0001AE57D /* Native */, + 2B17AB7413980FE0001AE57D /* PerformanceDebug */, + 2B17AB7513980FE0001AE57D /* Universal */, + 2B17AB7613980FE0001AE57D /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + 2B17ABCC139815AC001AE57D /* Build configuration list for PBXNativeTarget "glew" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2B17ABC113981522001AE57D /* Native */, + 2B17ABC213981522001AE57D /* PerformanceDebug */, + 2B17ABC313981522001AE57D /* Universal */, + 2B17ABC413981522001AE57D /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; + 2B17ABF9139817C3001AE57D /* Build configuration list for PBXNativeTarget "pcre" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2B17ABE113981757001AE57D /* Native */, + 2B17ABE213981757001AE57D /* PerformanceDebug */, + 2B17ABE313981757001AE57D /* Universal */, + 2B17ABE413981757001AE57D /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Native; + }; AA40D52709A08D650068C0D5 /* Build configuration list for PBXNativeTarget "stepmania-bare" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/src/AdjustSync.cpp b/src/AdjustSync.cpp index dbed2a0c59..bee582b4bf 100644 --- a/src/AdjustSync.cpp +++ b/src/AdjustSync.cpp @@ -269,11 +269,11 @@ void AdjustSync::AutosyncTempo() FOREACH( BPMSegment, GAMESTATE->m_pCurSong->m_SongTiming.m_BPMSegments, i ) i->SetBPM( i->GetBPM() * fScaleBPM ); - // We assume that the stops were measured as a number of beats. - // Therefore, if we change the bpms, we need to make a similar - // change to the stops. + /* We assume that the stops were measured as a number of beats. + * Therefore, if we change the bpms, we need to make a similar + * change to the stops. */ FOREACH( StopSegment, GAMESTATE->m_pCurSong->m_SongTiming.m_StopSegments, i ) - i->m_fStopSeconds *= 1.0f - fSlope; + i->SetPause(i->GetPause() * (1.0f - fSlope)); SCREENMAN->SystemMessage( AUTOSYNC_CORRECTION_APPLIED.GetValue() ); } @@ -366,8 +366,8 @@ void AdjustSync::GetSyncChangeTextSong( vector &vsAddTo ) for( unsigned i=0; i< testing.m_StopSegments.size(); i++ ) { - float fOld = Quantize( original.m_StopSegments[i].m_fStopSeconds, 0.001f ); - float fNew = Quantize( testing.m_StopSegments[i].m_fStopSeconds, 0.001f ); + float fOld = Quantize( original.m_StopSegments[i].GetPause(), 0.001f ); + float fNew = Quantize( testing.m_StopSegments[i].GetPause(), 0.001f ); float fDelta = fNew - fOld; if( fabsf(fDelta) > 0.0001f ) diff --git a/src/BPMDisplay.cpp b/src/BPMDisplay.cpp index bdeb805d52..a891f7161f 100644 --- a/src/BPMDisplay.cpp +++ b/src/BPMDisplay.cpp @@ -9,6 +9,7 @@ #include "CommonMetrics.h" #include "LocalizedString.h" #include "Song.h" +#include "Steps.h" #include @@ -198,6 +199,17 @@ void BPMDisplay::SetBpmFromSong( const Song* pSong ) } } +void BPMDisplay::SetBpmFromSteps( const Steps* pSteps ) +{ + ASSERT( pSteps ); + DisplayBpms bpms; + float fMinBPM, fMaxBPM; + pSteps->m_Timing.GetActualBPM( fMinBPM, fMaxBPM ); + bpms.Add( fMinBPM ); + bpms.Add( fMaxBPM ); + m_fCycleTime = 1.0f; +} + void BPMDisplay::SetBpmFromCourse( const Course* pCourse ) { ASSERT( pCourse ); @@ -307,6 +319,16 @@ public: } return 0; } + static int SetFromSteps( T* p, lua_State *L ) + { + if( lua_isnil(L,1) ) { p->NoBPM(); } + else + { + const Steps* pSteps = Luna::check( L, 1, true ); + p->SetBpmFromSteps(pSteps); + } + return 0; + } static int SetFromCourse( T* p, lua_State *L ) { if( lua_isnil(L,1) ) { p->NoBPM(); } @@ -323,6 +345,7 @@ public: { ADD_METHOD( SetFromGameState ); ADD_METHOD( SetFromSong ); + ADD_METHOD( SetFromSteps ); ADD_METHOD( SetFromCourse ); ADD_METHOD( GetText ); } diff --git a/src/BPMDisplay.h b/src/BPMDisplay.h index b27f96408a..d868ab23be 100644 --- a/src/BPMDisplay.h +++ b/src/BPMDisplay.h @@ -6,6 +6,7 @@ #include "ThemeMetric.h" #include "LocalizedString.h" class Song; +class Steps; class Course; struct DisplayBpms; @@ -30,6 +31,11 @@ public: * @param pSong the song in question. */ void SetBpmFromSong( const Song* pSong ); + /** + * @brief Use the BPM[s] from a steps. + * @param pSteps the steps in question. + */ + void SetBpmFromSteps( const Steps* pSteps ); /** * @brief Use the BPM[s] from a course. * @param pCourse the course in question. diff --git a/src/LifeMeterBattery.cpp b/src/LifeMeterBattery.cpp index 00fb586848..009d920e50 100644 --- a/src/LifeMeterBattery.cpp +++ b/src/LifeMeterBattery.cpp @@ -106,7 +106,7 @@ void LifeMeterBattery::ChangeLife( TapNoteScore score ) if( m_iLivesLeft == 0 ) return; - // xxx: This is hardcoded; we should use metrics for this. -aj + // todo: let the themer decide how this is handled. -aj switch( score ) { case TNS_W1: @@ -142,6 +142,7 @@ void LifeMeterBattery::ChangeLife( TapNoteScore score ) Message msg( "LifeChanged" ); msg.SetParam( "Player", m_pPlayerState->m_PlayerNumber ); msg.SetParam( "LifeMeter", LuaReference::CreateFromPush(*this) ); + msg.SetParam( "LivesLeft", GetLivesLeft() ); MESSAGEMAN->Broadcast( msg ); } @@ -152,7 +153,7 @@ void LifeMeterBattery::ChangeLife( HoldNoteScore score, TapNoteScore tscore ) case HNS_Held: break; case HNS_LetGo: - ChangeLife( TNS_Miss ); // LetGo is the same as a miss + ChangeLife( TNS_Miss ); // LetGo is the same as a miss break; default: ASSERT(0); diff --git a/src/LifeMeterBattery.h b/src/LifeMeterBattery.h index 08d72233db..d7b4a90a1d 100644 --- a/src/LifeMeterBattery.h +++ b/src/LifeMeterBattery.h @@ -43,7 +43,6 @@ private: float m_fBatteryBlinkTime; // if > 0 battery is blinking // theme metrics added for sm-ssc - //ThemeMetric<> METRIC_NAME; ThemeMetric BATTERY_BLINK_TIME; AutoActor m_sprFrame; diff --git a/src/MusicWheel.cpp b/src/MusicWheel.cpp index 85dbc2000b..77303f5286 100644 --- a/src/MusicWheel.cpp +++ b/src/MusicWheel.cpp @@ -23,6 +23,7 @@ #include "MessageManager.h" static Preference g_bMoveRandomToEnd( "MoveRandomToEnd", false ); +static Preference g_bPrecacheAllSorts( "PreCacheAllWheelSorts", false); #define NUM_WHEEL_ITEMS ((int)ceil(NUM_WHEEL_ITEMS_TO_DRAW+2)) #define WHEEL_TEXT(s) THEME->GetString( "MusicWheel", ssprintf("%sText",s.c_str()) ); @@ -69,18 +70,18 @@ void MusicWheel::Load( RString sType ) { ROULETTE_SWITCH_SECONDS .Load(sType,"RouletteSwitchSeconds"); ROULETTE_SLOW_DOWN_SWITCHES .Load(sType,"RouletteSlowDownSwitches"); - NUM_SECTION_COLORS .Load(sType,"NumSectionColors"); + NUM_SECTION_COLORS .Load(sType,"NumSectionColors"); SONG_REAL_EXTRA_COLOR .Load(sType,"SongRealExtraColor"); - SORT_MENU_COLOR .Load(sType,"SortMenuColor"); - SHOW_ROULETTE .Load(sType,"ShowRoulette"); - SHOW_RANDOM .Load(sType,"ShowRandom"); - SHOW_PORTAL .Load(sType,"ShowPortal"); + SORT_MENU_COLOR .Load(sType,"SortMenuColor"); + SHOW_ROULETTE .Load(sType,"ShowRoulette"); + SHOW_RANDOM .Load(sType,"ShowRandom"); + SHOW_PORTAL .Load(sType,"ShowPortal"); RANDOM_PICKS_LOCKED_SONGS .Load(sType,"RandomPicksLockedSongs"); MOST_PLAYED_SONGS_TO_SHOW .Load(sType,"MostPlayedSongsToShow"); RECENT_SONGS_TO_SHOW .Load(sType,"RecentSongsToShow"); MODE_MENU_CHOICE_NAMES .Load(sType,"ModeMenuChoiceNames"); - SORT_ORDERS .Load(sType,"SortOrders"); - SHOW_EASY_FLAG .Load(sType,"UseEasyMarkerFlag"); + SORT_ORDERS .Load(sType,"SortOrders"); + SHOW_EASY_FLAG .Load(sType,"UseEasyMarkerFlag"); USE_SECTIONS_WITH_PREFERRED_GROUP .Load(sType,"UseSectionsWithPreferredGroup"); HIDE_INACTIVE_SECTIONS .Load(sType,"OnlyShowActiveSection"); REMIND_WHEEL_POSITIONS .Load(sType,"RemindWheelPositions"); @@ -113,25 +114,36 @@ void MusicWheel::Load( RString sType ) * stable_sort) from its output, and title will be the secondary sort, without having * to re-sort by title each time. */ SONGMAN->SortSongs(); + + + FOREACH_ENUM( SortOrder, so ) { + m_WheelItemDatasStatus[so]=INVALID; + } } void MusicWheel::BeginScreen() { RageTimer timer; RString times; - /* Build all of the wheel item data. Do this after selecting the extra stage, - * so it knows to always display it. */ - FOREACH_ENUM( SortOrder, so ) - { - BuildWheelItemDatas( m_WheelItemDatas[so], so ); - times += ssprintf( "%i:%.3f ", so, timer.GetDeltaTime() ); - } - LOG->Trace( "MusicWheel sorting took: %s", times.c_str() ); + FOREACH_ENUM( SortOrder, so ) { + if(m_WheelItemDatasStatus[so]!=INVALID) { + m_WheelItemDatasStatus[so]=NEEDREFILTER; + + } - /* Set m_LastModeMenuItem to the first item that matches the current mode. (Do this - * after building wheel item data.) */ + if(g_bPrecacheAllSorts) { + readyWheelItemsData(so); + times += ssprintf( "%i:%.3f ", so, timer.GetDeltaTime() ); + } + } + if(g_bPrecacheAllSorts) { + LOG->Trace( "MusicWheel sorting took: %s", times.c_str() ); + } + + // Set m_LastModeMenuItem to the first item that matches the current mode. (Do this + // after building wheel item data.) { - const vector &from = m_WheelItemDatas[SORT_MODE_MENU]; + const vector &from = getWheelItemsData(SORT_MODE_MENU); for( unsigned i=0; im_pAction ); @@ -227,14 +239,19 @@ void MusicWheel::BeginScreen() MusicWheel::~MusicWheel() { - FOREACH_ENUM( SortOrder, so ) - FOREACH( MusicWheelItemData*, m_WheelItemDatas[so], i ) + FOREACH_ENUM( SortOrder, so ) { + vector::iterator i = m__UnFilteredWheelItemDatas[so].begin(); + vector::iterator iEnd = m__UnFilteredWheelItemDatas[so].end(); + for( ; i != iEnd; ++i ) { delete *i; + } + + } } -/* If a song or course is set in GAMESTATE and available, select it. Otherwise, - * choose the first available song or course. Return true if an item was set, - * false if no items are available. */ +/* If a song or course is set in GAMESTATE and available, select it. Otherwise, choose the + * first available song or course. Return true if an item was set, false if no items are + * available. */ bool MusicWheel::SelectSongOrCourse() { if( GAMESTATE->m_pPreferredSong && SelectSong( GAMESTATE->m_pPreferredSong ) ) @@ -247,7 +264,7 @@ bool MusicWheel::SelectSongOrCourse() return true; // Select the first selectable song based on the sort order... - vector &wiWheelItems = m_WheelItemDatas[GAMESTATE->m_SortOrder]; + vector &wiWheelItems = getWheelItemsData(GAMESTATE->m_SortOrder); for( unsigned i = 0; i < wiWheelItems.size(); i++ ) { if( wiWheelItems[i]->m_pSong ) @@ -280,7 +297,7 @@ bool MusicWheel::SelectSong( const Song *p ) return false; unsigned i; - vector &from = m_WheelItemDatas[GAMESTATE->m_SortOrder]; + vector &from = getWheelItemsData(GAMESTATE->m_SortOrder); for( i=0; im_pSong == p ) @@ -308,7 +325,7 @@ bool MusicWheel::SelectCourse( const Course *p ) return false; unsigned i; - vector &from = m_WheelItemDatas[GAMESTATE->m_SortOrder]; + vector &from = getWheelItemsData(GAMESTATE->m_SortOrder); for( i=0; im_pCourse == p ) @@ -335,7 +352,7 @@ bool MusicWheel::SelectModeMenuItem() { // Select the last-chosen option. ASSERT( GAMESTATE->m_SortOrder == SORT_MODE_MENU ); - const vector &from = m_WheelItemDatas[GAMESTATE->m_SortOrder]; + const vector &from = getWheelItemsData(GAMESTATE->m_SortOrder); unsigned i; for( i=0; i &arrayWheelIt WID.m_Flags.iStagesForSong = 1; } } +} +vector & MusicWheel::getWheelItemsData(SortOrder so) { // Update the popularity and init icons. + readyWheelItemsData(so); + return m__WheelItemDatas[so]; +} + +void MusicWheel::readyWheelItemsData(SortOrder so) { + if(m_WheelItemDatasStatus[so]!=VALID) { + RageTimer timer; + + vector &aUnFilteredDatas=m__UnFilteredWheelItemDatas[so]; + + if(m_WheelItemDatasStatus[so]==INVALID) { + BuildWheelItemDatas( aUnFilteredDatas, so ); + } + FilterWheelItemDatas( aUnFilteredDatas, m__WheelItemDatas[so], so ); + m_WheelItemDatasStatus[so]=VALID; + + LOG->Trace( "MusicWheel sorting took: %f", timer.GetTimeSinceStart() ); + } + +} + +void MusicWheel::FilterWheelItemDatas(vector &aUnFilteredDatas, vector &aFilteredData, SortOrder so ) +{ + + unsigned unfilteredSize=aUnFilteredDatas.size(); + + /* Only add TYPE_PORTAL if there's at least one song on the list. */ + bool bFoundAnySong = false; + for( unsigned i=0; i < unfilteredSize; i++ ) { + if( aUnFilteredDatas[i]->m_Type == TYPE_SONG ) { + bFoundAnySong = true; + break; + } + } + + vector aiRemove; + aiRemove.insert( aiRemove.begin(), unfilteredSize, false ); + + const int iMaxStagesForSong = GAMESTATE->GetSmallestNumStagesLeftForAnyHumanPlayer(); + + Song *pExtraStageSong = NULL; + if( GAMESTATE->IsAnExtraStage() ) + { + Steps *pSteps; + SONGMAN->GetExtraStageInfo( GAMESTATE->IsExtraStage2(), GAMESTATE->GetCurrentStyle(), pExtraStageSong, pSteps ); + } + + /* Mark any songs that aren't playable in aiRemove. */ + + for( unsigned i=0; i< unfilteredSize; i++ ) + { + MusicWheelItemData& WID = *aUnFilteredDatas[i]; + + /* If we have no songs, remove Random and Portal. */ + if( WID.m_Type == TYPE_RANDOM || WID.m_Type == TYPE_PORTAL ) + { + if( !bFoundAnySong ) + aiRemove[i] = true; + continue; + } + + /* Filter songs that we don't have enough stages to play. */ + if( WID.m_Type == TYPE_SONG ) + { + Song* pSong = WID.m_pSong; + + /* Never remove the extra stage song. */ + if( pExtraStageSong && WID.m_pSong == pExtraStageSong ) + continue; + + /* Check that we have enough stages to play this song. */ + if( GAMESTATE->GetNumStagesMultiplierForSong(WID.m_pSong) > iMaxStagesForSong ) + { + aiRemove[i] = true; + continue; + } + + int iLocked = UNLOCKMAN->SongIsLocked( pSong ); + if( iLocked & LOCKED_DISABLED ) + { + aiRemove[i] = true; + continue; + } + + /* If we're on an extra stage, and this song is selected, ignore #SELECTABLE. */ + if( pSong != GAMESTATE->m_pCurSong || !GAMESTATE->IsAnExtraStage() ) + { + /* Hide songs that asked to be hidden via #SELECTABLE. */ + if( iLocked & LOCKED_SELECTABLE ) + { + aiRemove[i] = true; + continue; + } + if( so != SORT_ROULETTE && iLocked & LOCKED_ROULETTE ) + { + aiRemove[i] = true; + continue; + } + } + + /* Hide locked songs. If RANDOM_PICKS_LOCKED_SONGS, hide in Roulette and Random, + * too. */ + if( (so!=SORT_ROULETTE || !RANDOM_PICKS_LOCKED_SONGS) && iLocked ) + { + aiRemove[i] = true; + continue; + } + + /* If the song has no steps for the current style, remove it. */ + if( !pSong->HasStepsType(GAMESTATE->GetCurrentStyle()->m_StepsType) ) + { + aiRemove[i] = true; + continue; + } + } + + if( WID.m_Type == TYPE_COURSE ) + { + if( !WID.m_pCourse->IsPlayableIn(GAMESTATE->GetCurrentStyle()->m_StepsType) ) + aiRemove[i] = true; + } + } + + /* Filter out the songs we're removing. */ + + aFilteredData.reserve( unfilteredSize ); + for( unsigned i=0; i< unfilteredSize; i++ ) + { + if( aiRemove[i] ) + continue; + aFilteredData.push_back( aUnFilteredDatas[i] ); + } + + // Update the song count in each section header. + unsigned filteredSize=aFilteredData.size(); + for( unsigned i=0; i < filteredSize; ) + { + MusicWheelItemData& WID = *aFilteredData[i]; + ++i; + if( WID.m_Type != TYPE_SECTION ) + continue; + + // Count songs in this section + WID.m_iSectionCount = 0; + for( ; i < filteredSize && aFilteredData[i]->m_sText == WID.m_sText; ++i ) + ++WID.m_iSectionCount; + } + + // If we have any section headers with no songs, then we filtered all of the songs in that group, + // so remove it. This isn't optimized like the above since this is a rare case. + for( unsigned i=0; i < filteredSize; ++i ) + { + MusicWheelItemData& WID = *aFilteredData[i]; + if( WID.m_Type != TYPE_SECTION ) + continue; + if( WID.m_iSectionCount > 0 ) + continue; + aFilteredData.erase( aFilteredData.begin()+i, aFilteredData.begin()+i+1 ); + --i; + --filteredSize; + } + + /* Update the popularity. This is affected by filtering. */ if( so == SORT_POPULARITY ) { - for( unsigned i=0; i< min(3u,arrayWheelItemDatas.size()); i++ ) + for( unsigned i=0; i< min(3u,aFilteredData.size()); i++ ) { - MusicWheelItemData& WID = *arrayWheelItemDatas[i]; + MusicWheelItemData& WID = *aFilteredData[i]; WID.m_Flags.iPlayersBestNumber = i+1; } } // If we've filtered all items, insert a dummy. - if( arrayWheelItemDatas.empty() ) - arrayWheelItemDatas.push_back( new MusicWheelItemData(TYPE_SECTION, NULL, "- EMPTY -", NULL, RageColor(1,0,0,1), 0) ); + if( aFilteredData.empty() ) + aFilteredData.push_back( new MusicWheelItemData(TYPE_SECTION, NULL, "- EMPTY -", NULL, RageColor(1,0,0,1), 0) ); } void MusicWheel::UpdateSwitch() @@ -980,7 +1162,7 @@ bool MusicWheel::ChangeSort( SortOrder new_so ) // return true if change success return false; // Don't change to SORT_MODE_MENU if it doesn't have at least two choices. - if( new_so == SORT_MODE_MENU && m_WheelItemDatas[new_so].size() < 2 ) + if( new_so == SORT_MODE_MENU && getWheelItemsData(new_so).size() < 2 ) return false; switch( m_WheelState ) @@ -1116,7 +1298,7 @@ void MusicWheel::StartRandom() { // Shuffle and use the roulette wheel. RandomGen rnd; - random_shuffle( m_WheelItemDatas[SORT_ROULETTE].begin(), m_WheelItemDatas[SORT_ROULETTE].end(), rnd ); + random_shuffle( getWheelItemsData(SORT_ROULETTE).begin(), getWheelItemsData(SORT_ROULETTE).end(), rnd ); GAMESTATE->m_SortOrder.Set( SORT_ROULETTE ); } else @@ -1154,7 +1336,7 @@ void MusicWheel::SetOpenSection( RString group ) GAMEMAN->GetCompatibleStyles( GAMESTATE->m_pCurGame, GAMESTATE->GetNumPlayersEnabled(), vpPossibleStyles ); m_CurWheelItemData.clear(); - vector &from = m_WheelItemDatas[GAMESTATE->m_SortOrder]; + vector &from = getWheelItemsData(GAMESTATE->m_SortOrder); m_CurWheelItemData.reserve( from.size() ); for( unsigned i = 0; i < from.size(); ++i ) { @@ -1316,7 +1498,10 @@ void MusicWheel::PlayerJoined() // We need to rebuild the wheel item data in this situation. -aj if( !GAMESTATE->IsCourseMode() && !PREFSMAN->m_bAutogenSteps ) { - BuildWheelItemDatas( m_WheelItemDatas[GAMESTATE->m_SortOrder], GAMESTATE->m_SortOrder ); + if(m_WheelItemDatasStatus[GAMESTATE->m_SortOrder]!=INVALID) + m_WheelItemDatasStatus[GAMESTATE->m_SortOrder]=NEEDREFILTER; + + RebuildWheelItems(); } SetOpenSection( m_sExpandedSectionName ); @@ -1366,7 +1551,7 @@ Song *MusicWheel::GetPreferredSelectionForRandomOrPortal() } RString sPreferredGroup = m_sExpandedSectionName; - vector &wid = m_WheelItemDatas[GAMESTATE->m_SortOrder]; + vector &wid = getWheelItemsData(GAMESTATE->m_SortOrder); StepsType st = GAMESTATE->GetCurrentStyle()->m_StepsType; diff --git a/src/MusicWheel.h b/src/MusicWheel.h index 73e63deb0e..0cc080f3d0 100644 --- a/src/MusicWheel.h +++ b/src/MusicWheel.h @@ -53,15 +53,14 @@ protected: MusicWheelItem *MakeItem(); void GetSongList( vector &arraySongs, SortOrder so ); - void BuildWheelItemDatas( vector &arrayWheelItems, SortOrder so ); bool SelectSongOrCourse(); bool SelectCourse( const Course *p ); bool SelectModeMenuItem(); - //bool SelectCustomItem(); virtual void UpdateSwitch(); - vector m_WheelItemDatas[NUM_SortOrder]; // aliases into m_UnfilteredWheelItemDatas + vector & getWheelItemsData(SortOrder so); + void readyWheelItemsData(SortOrder so); RString m_sLastModeMenuItem; SortOrder m_SortOrder; @@ -72,15 +71,15 @@ protected: ThemeMetric ROULETTE_SWITCH_SECONDS; ThemeMetric ROULETTE_SLOW_DOWN_SWITCHES; ThemeMetric NUM_SECTION_COLORS; - ThemeMetric SONG_REAL_EXTRA_COLOR; - ThemeMetric SORT_MENU_COLOR; + ThemeMetric SONG_REAL_EXTRA_COLOR; + ThemeMetric SORT_MENU_COLOR; ThemeMetric SHOW_ROULETTE; ThemeMetric SHOW_RANDOM; ThemeMetric SHOW_PORTAL; ThemeMetric RANDOM_PICKS_LOCKED_SONGS; ThemeMetric MOST_PLAYED_SONGS_TO_SHOW; ThemeMetric RECENT_SONGS_TO_SHOW; - ThemeMetric MODE_MENU_CHOICE_NAMES; + ThemeMetric MODE_MENU_CHOICE_NAMES; ThemeMetricMap CHOICE; ThemeMetric1D SECTION_COLORS; ThemeMetric SORT_ORDERS; @@ -96,6 +95,15 @@ protected: ThemeMetric CUSTOM_WHEEL_ITEM_NAMES; ThemeMetricMap CUSTOM_CHOICES; ThemeMetricMap CUSTOM_CHOICE_COLORS; + +private: + //use getWheelItemsData instead of touching this one + enum {INVALID,NEEDREFILTER,VALID} m_WheelItemDatasStatus[NUM_SortOrder]; + vector m__WheelItemDatas[NUM_SortOrder]; + vector m__UnFilteredWheelItemDatas[NUM_SortOrder]; + + void BuildWheelItemDatas( vector &arrayWheelItems, SortOrder so ); + void FilterWheelItemDatas(vector &aUnFilteredDatas, vector &aFilteredData, SortOrder so ); }; #endif diff --git a/src/NoteField.cpp b/src/NoteField.cpp index 29a08e081a..60b0d9b6be 100644 --- a/src/NoteField.cpp +++ b/src/NoteField.cpp @@ -637,7 +637,7 @@ void NoteField::DrawScrollText( const float fBeat, float fPercent ) m_textMeasureNumber.SetHorizAlign( SCROLL_IS_LEFT_SIDE ? align_right : align_left ); m_textMeasureNumber.SetDiffuse( SCROLL_COLOR ); m_textMeasureNumber.SetGlow( RageColor(1,1,1,RageFastCos(RageTimer::GetTimeSinceStartFast()*2)/2+0.5f) ); - m_textMeasureNumber.SetText( ssprintf("%.3fx", fPercent) ); + m_textMeasureNumber.SetText( ssprintf("%.3f", fPercent) ); m_textMeasureNumber.SetXY( (SCROLL_IS_LEFT_SIDE ? -xBase - xOffset : xBase + xOffset), fYPos ); m_textMeasureNumber.Draw(); } @@ -896,6 +896,20 @@ void NoteField::DrawPrimitives() const TimingData &timing = *pTiming; + // Scroll text + if( GAMESTATE->m_bIsUsingStepTiming ) + { + FOREACH_CONST( ScrollSegment, timing.m_ScrollSegments, seg ) + { + if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) + { + float fBeat = seg->GetBeat(); + if( IS_ON_SCREEN(fBeat) ) + DrawScrollText( fBeat, seg->GetRatio() ); + } + } + } + // BPM text FOREACH_CONST( BPMSegment, timing.m_BPMSegments, seg ) { @@ -910,11 +924,11 @@ void NoteField::DrawPrimitives() // Freeze text FOREACH_CONST( StopSegment, timing.m_StopSegments, seg ) { - if( seg->m_iStartRow >= iFirstRowToDraw && seg->m_iStartRow <= iLastRowToDraw ) + if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) { - float fBeat = NoteRowToBeat(seg->m_iStartRow); + float fBeat = seg->GetBeat(); if( IS_ON_SCREEN(fBeat) ) - DrawFreezeText( fBeat, seg->m_fStopSeconds, seg->m_bDelay ); + DrawFreezeText( fBeat, seg->GetPause(), seg->GetDelay() ); } } @@ -994,20 +1008,6 @@ void NoteField::DrawPrimitives() } } - // Scroll text - if( GAMESTATE->m_bIsUsingStepTiming ) - { - FOREACH_CONST( ScrollSegment, timing.m_ScrollSegments, seg ) - { - if( seg->m_iStartRow >= iFirstRowToDraw && seg->m_iStartRow <= iLastRowToDraw ) - { - float fBeat = NoteRowToBeat(seg->m_iStartRow); - if( IS_ON_SCREEN(fBeat) ) - DrawScrollText( fBeat, seg->m_fPercent ); - } - } - } - // Speed text if( GAMESTATE->m_bIsUsingStepTiming ) { diff --git a/src/NotesLoaderBMS.cpp b/src/NotesLoaderBMS.cpp index e3412e7099..e7adf6d5a2 100644 --- a/src/NotesLoaderBMS.cpp +++ b/src/NotesLoaderBMS.cpp @@ -664,7 +664,7 @@ static bool LoadFromBMSFile( const RString &sPath, const NameToData_t &mapNameTo StopSegment newSeg( BeatToNoteRow(fBeat), fFreezeSecs ); out.m_Timing.AddStopSegment( newSeg ); - LOG->Trace( "Inserting new Freeze at beat %f, secs %f", fBeat, newSeg.m_fStopSeconds ); + LOG->Trace( "Inserting new Freeze at beat %f, secs %f", fBeat, newSeg.GetPause() ); } else { diff --git a/src/NotesLoaderJson.cpp b/src/NotesLoaderJson.cpp index 4478423e6b..e0f79204d8 100644 --- a/src/NotesLoaderJson.cpp +++ b/src/NotesLoaderJson.cpp @@ -23,8 +23,8 @@ void Deserialize(BPMSegment &seg, const Json::Value &root) static void Deserialize(StopSegment &seg, const Json::Value &root) { - seg.m_iStartRow = BeatToNoteRow((float)(root["Beat"].asDouble())); - seg.m_fStopSeconds = (float)root["Seconds"].asDouble(); + seg.SetBeat((float)(root["Beat"].asDouble())); + seg.SetPause((float)(root["Seconds"].asDouble())); } static void Deserialize(TimingData &td, const Json::Value &root) diff --git a/src/NotesLoaderPMS.cpp b/src/NotesLoaderPMS.cpp index 749710abde..f0d742973c 100644 --- a/src/NotesLoaderPMS.cpp +++ b/src/NotesLoaderPMS.cpp @@ -722,7 +722,7 @@ static void ReadGlobalTags( const NameToData_t &mapNameToData, Song &out, Measur StopSegment newSeg( BeatToNoteRow(fBeat), fFreezeSecs ); out.m_SongTiming.AddStopSegment( newSeg ); - LOG->Trace( "Inserting new Freeze at beat %f, secs %f", fBeat, newSeg.m_fStopSeconds ); + LOG->Trace( "Inserting new Freeze at beat %f, secs %f", fBeat, newSeg.GetPause() ); } else { diff --git a/src/NotesLoaderSM.cpp b/src/NotesLoaderSM.cpp index acb7b5d0c7..f18c556056 100644 --- a/src/NotesLoaderSM.cpp +++ b/src/NotesLoaderSM.cpp @@ -84,20 +84,6 @@ void SMLoader::GetApplicableFiles( const RString &sPath, vector &out ) GetDirListing( sPath + RString("*.sm"), out ); } -bool SMLoader::LoadTimingFromFile( const RString &fn, TimingData &out ) -{ - MsdFile msd; - if( !msd.ReadFile( fn, true ) ) // unescape - { - LOG->UserLog( "Song file", fn, "couldn't be loaded: %s", msd.GetError().c_str() ); - return false; - } - - out.m_sFile = fn; - LoadTimingFromSMFile( msd, out ); - return true; -} - void SMLoader::ProcessBGChanges( Song &out, const RString &sValueName, const RString &sPath, const RString &sParam ) { BackgroundLayer iLayer = BACKGROUND_LAYER_1; @@ -342,10 +328,10 @@ void SMLoader::ProcessDelays( TimingData &out, const RString sParam ) const float fFreezeBeat = StringToFloat( arrayDelayValues[0] ); const float fFreezeSeconds = StringToFloat( arrayDelayValues[1] ); - StopSegment new_seg( BeatToNoteRow(fFreezeBeat), fFreezeSeconds, true ); + StopSegment new_seg( fFreezeBeat, fFreezeSeconds, true ); // XXX: Remove Negatives Bug? - new_seg.m_iStartRow = BeatToNoteRow(fFreezeBeat); - new_seg.m_fStopSeconds = fFreezeSeconds; + new_seg.SetBeat(fFreezeBeat); + new_seg.SetPause(fFreezeSeconds); // LOG->Trace( "Adding a delay segment: beat: %f, seconds = %f", new_seg.m_fStartBeat, new_seg.m_fStopSeconds ); @@ -423,53 +409,6 @@ void SMLoader::ProcessTickcounts( TimingData &out, const RString sParam ) } } -void SMLoader::LoadTimingFromSMFile( const MsdFile &msd, TimingData &out ) -{ - out.m_fBeat0OffsetInSeconds = 0; - out.m_BPMSegments.clear(); - out.m_StopSegments.clear(); - out.m_WarpSegments.clear(); - out.m_vTimeSignatureSegments.clear(); - - for( unsigned i=0; i aBGChangeValues; @@ -568,7 +507,6 @@ bool SMLoader::LoadFromSMFile( const RString &sPath, Song &out, bool bFromCache } out.m_SongTiming.m_sFile = sPath; - LoadTimingFromSMFile( msd, out.m_SongTiming ); for( unsigned i=0; iUserLog( "Song file", sPath, "has an unexpected value named \"%s\".", sValueName.c_str() ); } + + // Ensure all warps from negative time changes are in order. + sort(out.m_SongTiming.m_WarpSegments.begin(), out.m_SongTiming.m_WarpSegments.end()); TidyUpData( out, bFromCache ); return true; } diff --git a/src/NotesLoaderSM.h b/src/NotesLoaderSM.h index d1c4feded0..94dfdd2dfe 100644 --- a/src/NotesLoaderSM.h +++ b/src/NotesLoaderSM.h @@ -26,8 +26,6 @@ namespace SMLoader bool LoadFromSMFile( const RString &sPath, Song &out, bool bFromCache = false ); void GetApplicableFiles( const RString &sPath, vector &out ); - bool LoadTimingFromFile( const RString &fn, TimingData &out ); - void LoadTimingFromSMFile( const MsdFile &msd, TimingData &out ); bool LoadEditFromFile( RString sEditFilePath, ProfileSlot slot, bool bAddStepsToSong ); bool LoadEditFromBuffer( const RString &sBuffer, const RString &sEditFilePath, ProfileSlot slot ); bool LoadEditFromMsd( const MsdFile &msd, const RString &sEditFilePath, ProfileSlot slot, bool bAddStepsToSong ); diff --git a/src/NotesLoaderSMA.cpp b/src/NotesLoaderSMA.cpp index a45a87f9c2..449f5d7b29 100644 --- a/src/NotesLoaderSMA.cpp +++ b/src/NotesLoaderSMA.cpp @@ -209,10 +209,10 @@ void SMALoader::ProcessDelays( TimingData &out, const int iRowsPerBeat, const RS const float fFreezeBeat = RowToBeat( arrayDelayValues[0], iRowsPerBeat ); const float fFreezeSeconds = StringToFloat( arrayDelayValues[1] ); - StopSegment new_seg( BeatToNoteRow(fFreezeBeat), fFreezeSeconds, true ); + StopSegment new_seg( fFreezeBeat, fFreezeSeconds, true ); // XXX: Remove Negatives Bug? - new_seg.m_iStartRow = BeatToNoteRow(fFreezeBeat); - new_seg.m_fStopSeconds = fFreezeSeconds; + new_seg.SetBeat(fFreezeBeat); + new_seg.SetPause(fFreezeSeconds); // LOG->Trace( "Adding a delay segment: beat: %f, seconds = %f", new_seg.m_fStartBeat, new_seg.m_fStopSeconds ); diff --git a/src/NotesWriterDWI.cpp b/src/NotesWriterDWI.cpp index 4694c1f6db..3d0641c0e8 100644 --- a/src/NotesWriterDWI.cpp +++ b/src/NotesWriterDWI.cpp @@ -381,8 +381,8 @@ bool NotesWriterDWI::Write( RString sPath, const Song &out ) for( unsigned i=0; i &lines, TimingData timing, bool bIsSo w.Init( "STOPS" ); FOREACH_CONST( StopSegment, timing.m_StopSegments, ss ) - if( !ss->m_bDelay ) - w.Write( ss->m_iStartRow, ss->m_fStopSeconds ); + if( !ss->GetDelay() ) + w.Write( ss->GetRow(), ss->GetPause() ); w.Finish(); w.Init( "DELAYS" ); FOREACH_CONST( StopSegment, timing.m_StopSegments, ss ) - if( ss->m_bDelay ) - w.Write( ss->m_iStartRow, ss->m_fStopSeconds ); + if( ss->GetDelay() ) + w.Write( ss->GetRow(), ss->GetPause() ); w.Finish(); w.Init( "WARPS" ); @@ -139,7 +139,7 @@ static void GetTimingTags( vector &lines, TimingData timing, bool bIsSo w.Init( "SCROLLS" ); FOREACH_CONST( ScrollSegment, timing.m_ScrollSegments, ss ) - w.Write( ss->m_iStartRow, ss->m_fPercent ); + w.Write( ss->GetRow(), ss->GetRatio() ); w.Finish(); if( !bIsSong ) diff --git a/src/PlayerOptions.cpp b/src/PlayerOptions.cpp index e33c4108d8..363851cd6a 100644 --- a/src/PlayerOptions.cpp +++ b/src/PlayerOptions.cpp @@ -265,7 +265,7 @@ void PlayerOptions::FromString( const RString &sMultipleMods ) { if (!FromOneModString( *s, sThrowAway )) { - LOG->Trace( "Attempted to load a non-existing mod %s for the Player. Ignoring.", (*s).c_str() ); + LOG->Trace( "Attempted to load a non-existing mod \'%s\' for the Player. Ignoring.", (*s).c_str() ); } } } @@ -300,8 +300,8 @@ bool PlayerOptions::FromOneModString( const RString &sOneMod, RString &sErrorOut * they meant "*123". */ if( s->Right(1) == "*" ) { - /* XXX We know what they want, is there any reason not to handle it? */ - /* Yes. We should be strict in handling the format. -Chris */ + // XXX: We know what they want, is there any reason not to handle it? + // Yes. We should be strict in handling the format. -Chris sErrorOut = ssprintf("Invalid player options \"%s\"; did you mean '*%d'?", s->c_str(), StringToInt(*s) ); return false; } diff --git a/src/PlayerStageStats.cpp b/src/PlayerStageStats.cpp index 6aab543b26..e57682c843 100644 --- a/src/PlayerStageStats.cpp +++ b/src/PlayerStageStats.cpp @@ -583,7 +583,7 @@ float PlayerStageStats::GetPercentageOfTaps( TapNoteScore tns ) const void PlayerStageStats::CalcAwards( PlayerNumber p, bool bGaveUp, bool bUsedAutoplay ) { - LOG->Trace( "hand out awards" ); + //LOG->Trace( "hand out awards" ); m_PeakComboAward = PeakComboAward_Invalid; @@ -592,7 +592,7 @@ void PlayerStageStats::CalcAwards( PlayerNumber p, bool bGaveUp, bool bUsedAutop deque &vPdas = GAMESTATE->m_vLastStageAwards[p]; - LOG->Trace( "per difficulty awards" ); + //LOG->Trace( "per difficulty awards" ); // per-difficulty awards // don't give per-difficutly awards if using easy mods @@ -632,7 +632,7 @@ void PlayerStageStats::CalcAwards( PlayerNumber p, bool bGaveUp, bool bUsedAutop else m_StageAward = StageAward_Invalid; - LOG->Trace( "done with per difficulty awards" ); + //LOG->Trace( "done with per difficulty awards" ); // DO give peak combo awards if using easy mods int iComboAtStartOfStage = GetComboAtStartOfStage(); @@ -642,7 +642,7 @@ void PlayerStageStats::CalcAwards( PlayerNumber p, bool bGaveUp, bool bUsedAutop { int iLevel = 1000 * (pca+1); bool bCrossedLevel = iComboAtStartOfStage < iLevel && iPeakCombo >= iLevel; - LOG->Trace( "pca = %d, iLevel = %d, bCrossedLevel = %d", pca, iLevel, bCrossedLevel ); + //LOG->Trace( "pca = %d, iLevel = %d, bCrossedLevel = %d", pca, iLevel, bCrossedLevel ); if( bCrossedLevel ) GAMESTATE->m_vLastPeakComboAwards[p].push_back( pca ); } @@ -652,7 +652,7 @@ void PlayerStageStats::CalcAwards( PlayerNumber p, bool bGaveUp, bool bUsedAutop else m_PeakComboAward = PeakComboAward_Invalid; - LOG->Trace( "done with per combo awards" ); + //LOG->Trace( "done with per combo awards" ); } diff --git a/src/ProductInfo.h b/src/ProductInfo.h index 19268747d1..e6cd9db7a8 100644 --- a/src/ProductInfo.h +++ b/src/ProductInfo.h @@ -35,7 +35,7 @@ * */ #ifndef PRODUCT_VER_BARE -#define PRODUCT_VER_BARE v5.0 Preview 1 +#define PRODUCT_VER_BARE v5.0 Preview 1a #endif /** diff --git a/src/ProductInfo.inc b/src/ProductInfo.inc index 5e5bfde118..d08ad19e51 100644 --- a/src/ProductInfo.inc +++ b/src/ProductInfo.inc @@ -5,7 +5,7 @@ ; see ProductInfo.h for use descriptions !define PRODUCT_ID "StepMania" -!define PRODUCT_VER "v5.0 Preview 1" +!define PRODUCT_VER "v5.0 Preview 1a" !define PRODUCT_DISPLAY "${PRODUCT_ID} ${PRODUCT_VER}" !define PRODUCT_BITMAP "ssc" diff --git a/src/ScreenDebugOverlay.cpp b/src/ScreenDebugOverlay.cpp index b7c37b3326..b65b0efc7d 100644 --- a/src/ScreenDebugOverlay.cpp +++ b/src/ScreenDebugOverlay.cpp @@ -174,6 +174,9 @@ void ScreenDebugOverlay::Init() g_Mappings.holdForSlow = DeviceInput(DEVICE_KEYBOARD, KEY_ACCENT); g_Mappings.holdForFast = DeviceInput(DEVICE_KEYBOARD, KEY_TAB); + /* TODO: Find a better way of indicating which option is which here. + * Maybe we should take a page from ScreenEdit's menus and make + * RowDefs()? */ int i=0; g_Mappings.gameplayButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_F8); @@ -193,8 +196,8 @@ void ScreenDebugOverlay::Init() g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Cq); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Cw); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Ce); - g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Cr); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Ct); + g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Cr); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Cy); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Cu); g_Mappings.debugButton[i++] = DeviceInput(DEVICE_KEYBOARD, KEY_Ci); diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index d2aa616e1c..c6905545f4 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -1308,7 +1308,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) return; } TimingData &sTiming = GAMESTATE->m_pCurSong->m_SongTiming; - float playerBeat = GAMESTATE->m_pPlayerState[PLAYER_1]->m_Position.m_fSongBeat; + float playerBeat = GetAppropriatePosition().m_fSongBeat; int beatsPerMeasure = sTiming.GetTimeSignatureSegmentAtBeat( playerBeat ).GetNum(); switch( EditB ) @@ -1527,11 +1527,11 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) break; case EDIT_BUTTON_LAY_SELECT: { - const int iCurrentRow = BeatToNoteRow(GAMESTATE->m_pPlayerState[PLAYER_1]->m_Position.m_fSongBeat); + const int iCurrentRow = BeatToNoteRow(GetAppropriatePosition().m_fSongBeat); if( m_NoteFieldEdit.m_iBeginMarker==-1 && m_NoteFieldEdit.m_iEndMarker==-1 ) { // lay begin marker - m_NoteFieldEdit.m_iBeginMarker = BeatToNoteRow(GAMESTATE->m_pPlayerState[PLAYER_1]->m_Position.m_fSongBeat); + m_NoteFieldEdit.m_iBeginMarker = BeatToNoteRow(GetAppropriatePosition().m_fSongBeat); } else if( m_NoteFieldEdit.m_iEndMarker==-1 ) // only begin marker is laid { @@ -1698,7 +1698,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) unsigned i; for( i=0; i 0 ) - GetAppropriateTiming().AddStopSegment( StopSegment(BeatToNoteRow( GetBeat() ), fDelta) ); + GetAppropriateTiming().AddStopSegment( StopSegment( GetRow(), fDelta) ); } else // StopSegment being modified is m_SongTiming.m_StopSegments[i] { - GetAppropriateTiming().m_StopSegments[i].m_fStopSeconds += fDelta; - if( GetAppropriateTiming().m_StopSegments[i].m_fStopSeconds <= 0 ) - GetAppropriateTiming().m_StopSegments.erase( GetAppropriateTiming().m_StopSegments.begin()+i, - GetAppropriateTiming().m_StopSegments.begin()+i+1); + vector &s = GetAppropriateTiming().m_StopSegments; + s[i].SetPause(s[i].GetPause() + fDelta); + if( s[i].GetPause() <= 0 ) + s.erase( s.begin()+i, s.begin()+i+1); } (fDelta>0 ? m_soundValueIncrease : m_soundValueDecrease).Play(); SetDirty( true ); } break; - /* - case EDIT_BUTTON_DELAY_UP: - case EDIT_BUTTON_DELAY_DOWN: - { - float fDelta; - switch( EditB ) - { - DEFAULT_FAIL( EditB ); - case EDIT_BUTTON_STOP_UP: fDelta = +0.020f; break; - case EDIT_BUTTON_STOP_DOWN: fDelta = -0.020f; break; - } - if( EditIsBeingPressed( EDIT_BUTTON_ADJUST_FINE ) ) - { - fDelta /= 20; // 1ms - } - else if( input.type == IET_REPEAT ) - { - if( INPUTFILTER->GetSecsHeld(input.DeviceI) < 1.0f ) - fDelta *= 10; - else - fDelta *= 40; - } - unsigned i; - for( i=0; im_Position.m_fSongBeat) ) - break; - } - if( i == GetAppropriateTiming().m_StopSegments.size() ) // there is no delay segment at the current beat - { - // create a new delay segment - if( fDelta > 0 ) - m_pSong->AddStopSegment( StopSegment(BeatToNoteRow(GAMESTATE->m_Position.m_fSongBeat), fDelta, true) ); - } - else // delay segment being modified is m_SongTiming.m_StopSegments[i] - { - GetAppropriateTiming().m_StopSegments[i].m_fStopSeconds += fDelta; - if( GetAppropriateTiming().m_StopSegments[i].m_fStopSeconds <= 0 ) - GetAppropriateTiming().m_StopSegments.erase( GetAppropriateTiming().m_StopSegments.begin()+i, - GetAppropriateTiming().m_StopSegments.begin()+i+1); - } - (fDelta>0 ? m_soundValueIncrease : m_soundValueDecrease).Play(); - SetDirty( true ); - } - break; - */ case EDIT_BUTTON_OFFSET_UP: case EDIT_BUTTON_OFFSET_DOWN: { @@ -2091,12 +2045,12 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) { if( g_iDefaultRecordLength.Get() == -1 ) { - m_iStartPlayingAt = BeatToNoteRow(GAMESTATE->m_pPlayerState[PLAYER_1]->m_Position.m_fSongBeat); + m_iStartPlayingAt = BeatToNoteRow(GetAppropriatePosition().m_fSongBeat); m_iStopPlayingAt = max( m_iStartPlayingAt, m_NoteDataEdit.GetLastRow() + 1 ); } else { - m_iStartPlayingAt = BeatToNoteRow( ftruncf(GAMESTATE->m_pPlayerState[PLAYER_1]->m_Position.m_fSongBeat, g_iDefaultRecordLength.Get()) ); + m_iStartPlayingAt = BeatToNoteRow( ftruncf(GetAppropriatePosition().m_fSongBeat, g_iDefaultRecordLength.Get()) ); m_iStopPlayingAt = m_iStartPlayingAt + BeatToNoteRow( g_iDefaultRecordLength.Get() ); } @@ -2113,7 +2067,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) } break; case EDIT_BUTTON_RECORD_FROM_CURSOR: - m_iStartPlayingAt = BeatToNoteRow(GAMESTATE->m_pPlayerState[PLAYER_1]->m_Position.m_fSongBeat); + m_iStartPlayingAt = BeatToNoteRow(GetAppropriatePosition().m_fSongBeat); m_iStopPlayingAt = max( m_iStartPlayingAt, m_NoteDataEdit.GetLastRow() ); TransitionEditState( STATE_RECORDING ); break; @@ -2324,7 +2278,7 @@ void ScreenEdit::InputPlay( const InputEventPlus &input, EditButton EditB ) { case EDIT_BUTTON_RETURN_TO_EDIT: /* When exiting play mode manually, leave the cursor where it is. */ - m_fBeatToReturnTo = GAMESTATE->m_pPlayerState[PLAYER_1]->m_Position.m_fSongBeat; + m_fBeatToReturnTo = GetAppropriatePosition().m_fSongBeat; TransitionEditState( STATE_EDITING ); break; case EDIT_BUTTON_OFFSET_UP: @@ -2395,17 +2349,21 @@ void ScreenEdit::TransitionEditState( EditState em ) { case STATE_EDITING: // If exiting EDIT mode, save the cursor position. - m_fBeatToReturnTo = GAMESTATE->m_pPlayerState[PLAYER_1]->m_Position.m_fSongBeat; + m_fBeatToReturnTo = GetAppropriatePosition().m_fSongBeat; break; case STATE_PLAYING: AdjustSync::HandleSongEnd(); + if (!GAMESTATE->m_bIsUsingStepTiming) + GAMESTATE->m_pCurSteps[PLAYER_1]->m_Timing = backupStepTiming; if( AdjustSync::IsSyncDataChanged() ) ScreenSaveSync::PromptSaveSync(); break; case STATE_RECORDING: SetDirty( true ); + if (!GAMESTATE->m_bIsUsingStepTiming) + GAMESTATE->m_pCurSteps[PLAYER_1]->m_Timing = backupStepTiming; SaveUndo(); // delete old TapNotes in the range @@ -2456,6 +2414,12 @@ void ScreenEdit::TransitionEditState( EditState em ) GAMESTATE->UpdateSongPosition( fSeconds, GetAppropriateTiming(), RageZeroTimer, true ); GAMESTATE->m_bGameplayLeadIn.Set( false ); + + if (!GAMESTATE->m_bIsUsingStepTiming) + { + backupStepTiming = GetAppropriateTiming(); + GAMESTATE->m_pCurSteps[PLAYER_1]->m_Timing = GAMESTATE->m_pCurSong->m_SongTiming; + } /* Reset the note skin, in case preferences have changed. */ // XXX @@ -2555,7 +2519,7 @@ void ScreenEdit::ScrollTo( float fDestinationBeat ) CLAMP( fDestinationBeat, 0, GetMaximumBeatForMoving() ); // Don't play the sound and do the hold note logic below if our position didn't change. - const float fOriginalBeat = GAMESTATE->m_pPlayerState[PLAYER_1]->m_Position.m_fSongBeat; + const float fOriginalBeat = GetAppropriatePosition().m_fSongBeat; if( fOriginalBeat == fDestinationBeat ) return; @@ -3192,6 +3156,15 @@ TimingData & ScreenEdit::GetAppropriateTiming() const return m_pSong->m_SongTiming; } +SongPosition & ScreenEdit::GetAppropriatePosition() const +{ + if (GAMESTATE->m_bIsUsingStepTiming) + { + return GAMESTATE->m_pPlayerState[PLAYER_1]->m_Position; + } + return GAMESTATE->m_Position; +} + inline void ScreenEdit::SetBeat(float fBeat) { if( !GAMESTATE->m_bIsUsingStepTiming ) @@ -3546,14 +3519,12 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector &iAns case paste_at_current_beat: case paste_at_begin_marker: { - // TODO: Song/Step Timing checks? - int iDestFirstRow = -1; switch( c ) { DEFAULT_FAIL( c ); case paste_at_current_beat: - iDestFirstRow = BeatToNoteRow( GAMESTATE->m_pPlayerState[PLAYER_1]->m_Position.m_fSongBeat ); + iDestFirstRow = BeatToNoteRow( GetAppropriatePosition().m_fSongBeat ); break; case paste_at_begin_marker: ASSERT( m_NoteFieldEdit.m_iBeginMarker!=-1 ); @@ -4023,7 +3994,7 @@ void ScreenEdit::HandleTimingDataInformationChoice( TimingDataInformationChoice ScreenTextEntry::TextEntry( SM_BackFromScrollChange, ENTER_SCROLL_VALUE, - ssprintf( "%.5f", GetAppropriateTiming().GetScrollSegmentAtBeat( GetBeat() ).m_fPercent ), + ssprintf( "%.5f", GetAppropriateTiming().GetScrollSegmentAtBeat( GetBeat() ).GetRatio() ), 10 ); break; @@ -4316,7 +4287,7 @@ float ScreenEdit::GetMaximumBeatForNewNote() const * mid-measure, and it's odd to have movement capped to these weird * beats. */ TimingData &songTiming = GAMESTATE->m_pCurSong->m_SongTiming; - float playerBeat = GAMESTATE->m_pPlayerState[PLAYER_1]->m_Position.m_fSongBeat; + float playerBeat = GetAppropriatePosition().m_fSongBeat; int beatsPerMeasure = songTiming.GetTimeSignatureSegmentAtBeat( playerBeat ).GetNum(); fEndBeat += beatsPerMeasure; fEndBeat = ftruncf( fEndBeat, (float)beatsPerMeasure ); diff --git a/src/ScreenEdit.h b/src/ScreenEdit.h index c1334afbd8..2b92f8bbd5 100644 --- a/src/ScreenEdit.h +++ b/src/ScreenEdit.h @@ -251,6 +251,13 @@ protected: BitmapText m_textInputTips; + /** + * @brief Keep a backup of the present Step TimingData when + * entering a playing or recording state. + * + * This is mainly to allow playing a chart with Song Timing. */ + TimingData backupStepTiming; + /** @brief The current TapNote that would be inserted. */ TapNote m_selectedTap; @@ -580,6 +587,10 @@ private: * @brief Retrieve the appropriate TimingData based on GAMESTATE. * @return the proper TimingData. */ TimingData & GetAppropriateTiming() const; + /** + * @brief Retrieve the appropriate SongPosition data based on GAMESTATE. + * @return the proper SongPosition. */ + SongPosition & GetAppropriatePosition() const; void SetBeat(float fBeat); float GetBeat(); int GetRow(); diff --git a/src/Song.cpp b/src/Song.cpp index 491dfb477e..1e737ef182 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 = 177; +const int FILE_CACHE_VERSION = 178; /** @brief How long does a song sample last by default? */ const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f; diff --git a/src/Song.h b/src/Song.h index 7d3e92fab9..cbe6e5ddf4 100644 --- a/src/Song.h +++ b/src/Song.h @@ -287,9 +287,6 @@ public: /** @brief The Song's TimingData. */ TimingData m_SongTiming; - /** @brief The initial offset of a song. */ - float m_fBeat0OffsetInSeconds; - typedef vector VBackgroundChange; private: /** diff --git a/src/SongManager.cpp b/src/SongManager.cpp index e91b1c4d41..48a7d3c5eb 100644 --- a/src/SongManager.cpp +++ b/src/SongManager.cpp @@ -776,9 +776,7 @@ void SongManager::InitCoursesFromDisk( LoadingWindow *ld ) void SongManager::InitAutogenCourses() { - // // Create group courses for Endless and Nonstop - // vector saGroupNames; this->GetSongGroupNames( saGroupNames ); Course* pCourse; @@ -789,10 +787,12 @@ void SongManager::InitAutogenCourses() // Generate random courses from each group. pCourse = new Course; CourseUtil::AutogenEndlessFromGroup( sGroupName, Difficulty_Medium, *pCourse ); + pCourse->m_sScripter = "Autogen"; m_pCourses.push_back( pCourse ); pCourse = new Course; CourseUtil::AutogenNonstopFromGroup( sGroupName, Difficulty_Medium, *pCourse ); + pCourse->m_sScripter = "Autogen"; m_pCourses.push_back( pCourse ); } @@ -801,6 +801,7 @@ void SongManager::InitAutogenCourses() // Generate "All Songs" endless course. pCourse = new Course; CourseUtil::AutogenEndlessFromGroup( "", Difficulty_Medium, *pCourse ); + pCourse->m_sScripter = "Autogen"; m_pCourses.push_back( pCourse ); /* Generate Oni courses from artists. Only create courses if we have at least @@ -836,6 +837,7 @@ void SongManager::InitAutogenCourses() { pCourse = new Course; CourseUtil::AutogenOniFromArtist( sCurArtist, sCurArtistTranslit, aSongs, Difficulty_Hard, *pCourse ); + pCourse->m_sScripter = "Autogen"; m_pCourses.push_back( pCourse ); } diff --git a/src/StepMania-net2010.vcxproj b/src/StepMania-net2010.vcxproj index ebc0108298..c1aef5d7d2 100644 --- a/src/StepMania-net2010.vcxproj +++ b/src/StepMania-net2010.vcxproj @@ -76,7 +76,7 @@ false $(TargetDir) $(SolutionDir)/build-$(SolutionName)/$(ProjectName)/$(Configuration)\ - true + false true $(SolutionDir)$(Configuration)\ $(Configuration)\ @@ -93,10 +93,18 @@ AllRules.ruleset + C:\Program Files (x86)\Microsoft DirectX 9.0 SDK (Summer 2004)\Include;$(IncludePath) + C:\Program Files (x86)\Microsoft DirectX 9.0 SDK (Summer 2004)\Lib;$(LibraryPath) + C:\Program Files (x86)\Microsoft DirectX 9.0 SDK (Summer 2004)\Include;$(IncludePath) + C:\Program Files (x86)\Microsoft DirectX 9.0 SDK (Summer 2004)\Include;$(IncludePath) StepMania StepMania StepMania StepMania + C:\Program Files (x86)\Microsoft DirectX 9.0 SDK (Summer 2004)\Include;$(IncludePath) + C:\Program Files (x86)\Microsoft DirectX 9.0 SDK (Summer 2004)\Lib;$(LibraryPath) + C:\Program Files (x86)\Microsoft DirectX 9.0 SDK (Summer 2004)\Lib;$(LibraryPath) + C:\Program Files (x86)\Microsoft DirectX 9.0 SDK (Summer 2004)\Lib;$(LibraryPath) @@ -130,6 +138,10 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir) true EditAndContinue 4063;4100;4127;4201;4244;4275;4355;4505;4512;4702;4786;4996;%(DisableSpecificWarnings) + true + true + /EHsc %(AdditionalOptions) + false _DEBUG;%(PreprocessorDefinitions) @@ -151,6 +163,7 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir) false + SendErrorReport archutils\Win32\mapconv "$(IntDir)$(TargetName).map" "$(TargetDir)\StepMania-debug.vdi" @@ -178,8 +191,7 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir) WIN32;NDEBUG;_WINDOWS;WINDOWS;RELEASE;GLEW_STATIC;%(PreprocessorDefinitions) true false - - + Sync MultiThreadedDLL false false @@ -195,6 +207,8 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir) true ProgramDatabase 4063;4100;4127;4201;4244;4275;4355;4505;4512;4702;4786;4996;%(DisableSpecificWarnings) + true + true NDEBUG;%(PreprocessorDefinitions) @@ -213,8 +227,10 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir) true Windows false - - + true + SendErrorReport + UseLinkTimeCodeGeneration + true archutils\Win32\mapconv "$(IntDir)$(TargetName).map" "$(TargetDir)\StepMania.vdi" @@ -234,11 +250,10 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir) ../StepMania.tlb - Disabled + MaxSpeed .;..\extern\lua-5.1\src;ffmpeg\modern_working\include;BaseClasses;..\extern\jsoncpp\include;..\extern\glew-1.5.8\include;..\extern\pcre;..\extern\mad-0.15.1b;..\extern\libpng\lib;..\extern\libpng\include;..\extern\libjpeg;..\extern\zlib;..\extern\vorbis;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_WINDOWS;WINDOWS;DEBUG;GLEW_STATIC;%(PreprocessorDefinitions) - - + Sync Default MultiThreadedDebugDLL Use @@ -251,8 +266,13 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir) Level4 true - EditAndContinue + ProgramDatabase 4063;4100;4127;4201;4244;4275;4355;4505;4512;4702;4786;4996;%(DisableSpecificWarnings) + true + AnySuitable + true + Speed + true _DEBUG;%(PreprocessorDefinitions) @@ -260,10 +280,10 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir) /MACHINE:I386 "$(IntDir)verstub.obj" %(AdditionalOptions) - shell32.lib;gdi32.lib;user32.lib;ole32.lib;advapi32.lib;ffmpeg/modern_working/lib/avcodec.lib;ffmpeg/lib/avformat.lib;ffmpeg/lib/avutil.lib;ffmpeg/lib/swscale.lib;%(AdditionalDependencies) + shell32.lib;gdi32.lib;user32.lib;ole32.lib;advapi32.lib;avcodec.lib;avformat.lib;avutil.lib;swscale.lib;%(AdditionalDependencies) ../Program/StepMania-fastdebug.exe true - ..\extern\libpng\lib;ffmpeg\lib;..\extern\libjpeg\;..\extern\zlib\;..\extern\mad-0.15.1b\msvc++\Release\%(AdditionalLibraryDirectories) + ..\extern\libpng\lib;ffmpeg\modern_working\lib;..\extern\libjpeg\;..\extern\zlib\;..\extern\mad-0.15.1b\msvc++\Release\;%(AdditionalLibraryDirectories) wininet.lib;msimg32.lib;libci.lib;msvcrt.lib;%(IgnoreSpecificDefaultLibraries) true $(IntDir)StepMania.pdb @@ -274,6 +294,8 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir) false + SendErrorReport + UseLinkTimeCodeGeneration archutils\Win32\mapconv "$(IntDir)$(TargetName).map" "$(TargetDir)\StepMania-fastdebug.vdi" @@ -319,6 +341,7 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir) true ProgramDatabase 4063;4100;4127;4201;4244;4275;4355;4505;4512;4702;4786;4996;%(DisableSpecificWarnings) + false NDEBUG;%(PreprocessorDefinitions) @@ -340,6 +363,7 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir) NotSet + SendErrorReport archutils\Win32\mapconv "$(IntDir)$(TargetName)-SSE2.map" "$(TargetDir)\StepMania-SSE2.vdi" diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 0abe04e4ff..1e57e455ac 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -111,7 +111,7 @@ void TimingData::SetStopAtRow( int iRow, float fSeconds, bool bDelay ) { unsigned i; for( i=0; i 0 ) { - m_StopSegments[i].m_fStopSeconds = fSeconds; + m_StopSegments[i].SetPause(fSeconds); } else m_StopSegments.erase( m_StopSegments.begin()+i, m_StopSegments.begin()+i+1 ); @@ -299,25 +299,25 @@ void TimingData::SetScrollAtRow( int iRow, float fPercent ) unsigned i; for( i = 0; i < m_ScrollSegments.size(); i++ ) { - if( m_ScrollSegments[i].m_iStartRow >= iRow) + if( m_ScrollSegments[i].GetRow() >= iRow) break; } - if ( i == m_ScrollSegments.size() || m_ScrollSegments[i].m_iStartRow != iRow ) + if ( i == m_ScrollSegments.size() || m_ScrollSegments[i].GetRow() != iRow ) { // the core mod itself matters the most for comparisons. - if( i == 0 || m_ScrollSegments[i-1].m_fPercent != fPercent ) + if( i == 0 || m_ScrollSegments[i-1].GetRatio() != fPercent ) AddScrollSegment( ScrollSegment(iRow, fPercent) ); } else { // The others aren't compared: only the mod itself matters. - if( i > 0 && m_ScrollSegments[i-1].m_fPercent == fPercent ) + if( i > 0 && m_ScrollSegments[i-1].GetRatio() == fPercent ) m_ScrollSegments.erase( m_ScrollSegments.begin()+i, m_ScrollSegments.begin()+i+1 ); else { - m_ScrollSegments[i].m_fPercent = fPercent; + m_ScrollSegments[i].SetRatio(fPercent); } } } @@ -376,9 +376,10 @@ float TimingData::GetStopAtRow( int iNoteRow, bool bDelay ) const { for( unsigned i=0; i iNoteRow && s.m_bDelay == bDelay ) + if( s.GetRow() > iNoteRow && s.GetDelay() == bDelay ) break; } return static_cast(i); @@ -628,7 +629,7 @@ int TimingData::GetScrollSegmentIndexAtRow( int iRow ) const { unsigned i; for (i=0; i < m_ScrollSegments.size() - 1; i++ ) - if( m_ScrollSegments[i+1].m_iStartRow > iRow ) + if( m_ScrollSegments[i+1].GetRow() > iRow ) break; return static_cast(i); } @@ -665,7 +666,7 @@ ScrollSegment& TimingData::GetScrollSegmentAtRow( int iRow ) { unsigned i; for( i=0; i iRow ) + if( m_ScrollSegments[i+1].GetRow() > iRow ) break; return m_ScrollSegments[i]; } @@ -839,9 +840,9 @@ void TimingData::GetBeatAndBPSFromElapsedTimeNoOffset( float fElapsedTime, float iEventRow = itBPMS->GetRow(); iEventType = FOUND_BPM_CHANGE; } - if( itSS != m_StopSegments.end() && itSS->m_iStartRow < iEventRow ) + if( itSS != m_StopSegments.end() && itSS->GetRow() < iEventRow ) { - iEventRow = itSS->m_iStartRow; + iEventRow = itSS->GetRow(); iEventType = FOUND_STOP; } if( itWS != m_WarpSegments.end() && itWS->GetRow() < iEventRow ) @@ -871,14 +872,14 @@ void TimingData::GetBeatAndBPSFromElapsedTimeNoOffset( float fElapsedTime, float break; case FOUND_STOP: { - fTimeToNextEvent = itSS->m_fStopSeconds; + fTimeToNextEvent = itSS->GetPause(); fNextEventTime = fLastTime + fTimeToNextEvent; - const bool bIsDelay = itSS->m_bDelay; + const bool bIsDelay = itSS->GetDelay(); if ( fElapsedTime < fNextEventTime ) { bFreezeOut = !bIsDelay; bDelayOut = bIsDelay; - fBeatOut = NoteRowToBeat( itSS->m_iStartRow ); + fBeatOut = itSS->GetBeat(); fBPSOut = fBPS; return; } @@ -941,9 +942,9 @@ float TimingData::GetElapsedTimeFromBeatNoOffset( float fBeat ) const iEventRow = itBPMS->GetRow(); iEventType = FOUND_BPM_CHANGE; } - if( itSS != m_StopSegments.end() && itSS->m_bDelay && itSS->m_iStartRow < iEventRow ) // delays (come before marker) + if( itSS != m_StopSegments.end() && itSS->GetDelay() && itSS->GetRow() < iEventRow ) // delays (come before marker) { - iEventRow = itSS->m_iStartRow; + iEventRow = itSS->GetRow(); iEventType = FOUND_STOP; } if( BeatToNoteRow(fBeat) < iEventRow ) @@ -951,9 +952,9 @@ float TimingData::GetElapsedTimeFromBeatNoOffset( float fBeat ) const iEventRow = BeatToNoteRow(fBeat); iEventType = FOUND_MARKER; } - if( itSS != m_StopSegments.end() && !itSS->m_bDelay && itSS->m_iStartRow < iEventRow ) // stops (come after marker) + if( itSS != m_StopSegments.end() && !itSS->GetDelay() && itSS->GetRow() < iEventRow ) // stops (come after marker) { - iEventRow = itSS->m_iStartRow; + iEventRow = itSS->GetRow(); iEventType = FOUND_STOP; } if( itWS != m_WarpSegments.end() && itWS->GetRow() < iEventRow ) @@ -974,7 +975,7 @@ float TimingData::GetElapsedTimeFromBeatNoOffset( float fBeat ) const itBPMS ++; break; case FOUND_STOP: - fTimeToNextEvent = itSS->m_fStopSeconds; + fTimeToNextEvent = itSS->GetPause(); fNextEventTime = fLastTime + fTimeToNextEvent; fLastTime = fNextEventTime; itSS ++; @@ -1006,14 +1007,14 @@ float TimingData::GetDisplayedBeat( float fBeat ) const float fOutBeat = 0.0; for( ; it != end; it++ ) { - if( it+1 == end || BeatToNoteRow(fBeat) <= (it+1)->m_iStartRow ) + if( it+1 == end || fBeat <= (it+1)->GetBeat() ) { - fOutBeat += ( fBeat - NoteRowToBeat((it)->m_iStartRow) ) * (it)->m_fPercent; + fOutBeat += ( fBeat - (it)->GetBeat() ) * (it)->GetRatio(); break; } else { - fOutBeat += ( NoteRowToBeat((it+1)->m_iStartRow) - NoteRowToBeat((it)->m_iStartRow) ) * (it)->m_fPercent; + fOutBeat += ( (it+1)->GetBeat() - (it)->GetBeat() ) * (it)->GetRatio(); } } return fOutBeat; @@ -1040,13 +1041,13 @@ void TimingData::ScaleRegion( float fScale, int iStartIndex, int iEndIndex, bool for( unsigned i = 0; i < m_StopSegments.size(); i++ ) { StopSegment &s = m_StopSegments[i]; - const int iSegStartRow = s.m_iStartRow; + const int iSegStartRow = s.GetRow(); if( iSegStartRow < iStartIndex ) continue; else if( iSegStartRow > iEndIndex ) - s.m_iStartRow += lrintf((iEndIndex - iStartIndex) * (fScale - 1)); + s.SetRow(s.GetRow() + lrintf((iEndIndex - iStartIndex) * (fScale - 1))); else - s.m_iStartRow = lrintf((iSegStartRow - iStartIndex) * fScale) + iStartIndex; + s.SetRow(lrintf((iSegStartRow - iStartIndex) * fScale) + iStartIndex); } for( unsigned i = 0; i < m_vTimeSignatureSegments.size(); i++ ) @@ -1155,13 +1156,13 @@ void TimingData::ScaleRegion( float fScale, int iStartIndex, int iEndIndex, bool for( unsigned i = 0; i < m_ScrollSegments.size(); i++ ) { ScrollSegment &s = m_ScrollSegments[i]; - const int iSegStartRow = s.m_iStartRow; + const int iSegStartRow = s.GetRow(); if( iSegStartRow < iStartIndex ) continue; else if( iSegStartRow > iEndIndex ) - s.m_iStartRow += lrintf((iEndIndex - iStartIndex) * (fScale - 1)); + s.SetRow(s.GetRow() + lrintf((iEndIndex - iStartIndex) * (fScale - 1))); else - s.m_iStartRow = lrintf((iSegStartRow - iStartIndex) * fScale) + iStartIndex; + s.SetRow(lrintf((iSegStartRow - iStartIndex) * fScale) + iStartIndex); } // adjust BPM changes to preserve timing @@ -1203,9 +1204,9 @@ void TimingData::InsertRows( int iStartRow, int iRowsToAdd ) for( unsigned i = 0; i < m_StopSegments.size(); i++ ) { StopSegment &stop = m_StopSegments[i]; - if( stop.m_iStartRow < iStartRow ) + if( stop.GetRow() < iStartRow ) continue; - stop.m_iStartRow += iRowsToAdd; + stop.SetRow(stop.GetRow() + iRowsToAdd); } for( unsigned i = 0; i < m_WarpSegments.size(); i++ ) @@ -1266,9 +1267,9 @@ void TimingData::InsertRows( int iStartRow, int iRowsToAdd ) for( unsigned i = 0; i < m_ScrollSegments.size(); i++ ) { ScrollSegment &scrl = m_ScrollSegments[i]; - if( scrl.m_iStartRow < iStartRow ) + if( scrl.GetRow() < iStartRow ) continue; - scrl.m_iStartRow += iRowsToAdd; + scrl.SetRow(scrl.GetRow() + iRowsToAdd); } if( iStartRow == 0 ) @@ -1311,13 +1312,13 @@ void TimingData::DeleteRows( int iStartRow, int iRowsToDelete ) for( unsigned i = 0; i < m_StopSegments.size(); i++ ) { StopSegment &stop = m_StopSegments[i]; - + int keyRow = stop.GetRow(); // Before deleted region: - if( stop.m_iStartRow < iStartRow ) + if( keyRow < iStartRow ) continue; // Inside deleted region: - if( stop.m_iStartRow < iStartRow+iRowsToDelete ) + if( keyRow < iStartRow+iRowsToDelete ) { m_StopSegments.erase( m_StopSegments.begin()+i, m_StopSegments.begin()+i+1 ); --i; @@ -1325,7 +1326,7 @@ void TimingData::DeleteRows( int iStartRow, int iRowsToDelete ) } // After deleted region: - stop.m_iStartRow -= iRowsToDelete; + stop.SetRow(keyRow - iRowsToDelete); } for( unsigned i = 0; i < m_WarpSegments.size(); i++ ) @@ -1461,17 +1462,17 @@ void TimingData::DeleteRows( int iStartRow, int iRowsToDelete ) for( unsigned i = 0; i < m_ScrollSegments.size(); i++ ) { ScrollSegment &scrl = m_ScrollSegments[i]; - - if( scrl.m_iStartRow < iStartRow ) + int keyRow = scrl.GetRow(); + if( keyRow < iStartRow ) continue; - if( scrl.m_iStartRow < iStartRow+iRowsToDelete ) + if( keyRow < iStartRow+iRowsToDelete ) { m_ScrollSegments.erase( m_ScrollSegments.begin()+i, m_ScrollSegments.begin()+i+1 ); --i; continue; } - scrl.m_iStartRow -= iRowsToDelete; + scrl.SetRow(keyRow - iRowsToDelete); } this->SetBPMAtRow( iStartRow, fNewBPM ); @@ -1479,8 +1480,13 @@ void TimingData::DeleteRows( int iStartRow, int iRowsToDelete ) float TimingData::GetDisplayedSpeedPercent( float fSongBeat, float fMusicSeconds ) const { + /* HACK: Somehow we get called into this function when there is no + * TimingData to work with. This seems to happen the most upon + * leaving the editor. Still, cover our butts in case this instance + * isn't existing. */ + if (!this) return 1.0f; if( m_SpeedSegments.size() == 0 ) - return 1.0; + return 1.0f; const int index = GetSpeedSegmentIndexAtBeat( fSongBeat ); @@ -1607,12 +1613,12 @@ bool TimingData::HasFakes() const bool TimingData::HasSpeedChanges() const { - return m_SpeedSegments.size()>1; + return m_SpeedSegments.size()>1 || m_SpeedSegments[0].GetRatio() != 1; } bool TimingData::HasScrollChanges() const { - return m_ScrollSegments.size()>1; + return m_ScrollSegments.size()>1 || m_ScrollSegments[0].GetRatio() != 1; } void TimingData::NoteRowToMeasureAndBeat( int iNoteRow, int &iMeasureIndexOut, int &iBeatIndexOut, int &iRowsRemainder ) const @@ -1663,15 +1669,16 @@ public: static int HasWarps( T* p, lua_State *L ) { lua_pushboolean(L, p->HasWarps()); return 1; } static int HasFakes( T* p, lua_State *L ) { lua_pushboolean(L, p->HasFakes()); return 1; } static int HasSpeedChanges( T* p, lua_State *L ) { lua_pushboolean(L, p->HasSpeedChanges()); return 1; } + static int HasScrollChanges( T* p, lua_State *L ) { lua_pushboolean(L, p->HasScrollChanges()); return 1; } static int GetStops( T* p, lua_State *L ) { vector vStops; FOREACH_CONST( StopSegment, p->m_StopSegments, seg ) { - const float fStartRow = NoteRowToBeat(seg->m_iStartRow); - const float fStopLength = seg->m_fStopSeconds; - if(!seg->m_bDelay) - vStops.push_back( ssprintf("%f=%f", fStartRow, fStopLength) ); + const float fStartBeat = seg->GetBeat(); + const float fStopLength = seg->GetPause(); + if(!seg->GetDelay()) + vStops.push_back( ssprintf("%f=%f", fStartBeat, fStopLength) ); } LuaHelpers::CreateTableFromArray(vStops, L); @@ -1682,10 +1689,10 @@ public: vector vDelays; FOREACH_CONST( StopSegment, p->m_StopSegments, seg ) { - const float fStartRow = NoteRowToBeat(seg->m_iStartRow); - const float fStopLength = seg->m_fStopSeconds; - if(seg->m_bDelay) - vDelays.push_back( ssprintf("%f=%f", fStartRow, fStopLength) ); + const float fStartBeat = seg->GetBeat(); + const float fStopLength = seg->GetPause(); + if(seg->GetDelay()) + vDelays.push_back( ssprintf("%f=%f", fStartBeat, fStopLength) ); } LuaHelpers::CreateTableFromArray(vDelays, L); @@ -1752,6 +1759,7 @@ public: ADD_METHOD( HasWarps ); ADD_METHOD( HasFakes ); ADD_METHOD( HasSpeedChanges ); + ADD_METHOD( HasScrollChanges ); ADD_METHOD( GetStops ); ADD_METHOD( GetDelays ); ADD_METHOD( GetBPMs ); diff --git a/src/TimingData.h b/src/TimingData.h index 45f81fe268..e81fc078e7 100644 --- a/src/TimingData.h +++ b/src/TimingData.h @@ -9,192 +9,6 @@ struct lua_State; /** @brief Compare a TimingData segment's properties with one another. */ #define COMPARE(x) if(x!=other.x) return false; - - -/** - * @brief Identifies when a song has a stop or a delay. - * - * It is hopeful that stops and delays can be made into their own segments at some point. - */ -struct StopSegment -{ - /** - * @brief Creates a simple Stop Segment with default values. - * - * It is best to override the values as soon as possible. - */ - StopSegment() : m_iStartRow(-1), m_fStopSeconds(-1.0f), m_bDelay(false) { } - /** - * @brief Creates a Stop Segment at the specified row for the specified length of time. - * - * This will not create a dedicated delay segment. Use the third constructor for - * making delays. - * @param s the starting row of this segment. - * @param f the length of time to pause the note scrolling. - */ - StopSegment( int s, float f ) : m_iStartRow(max(0, s)), - m_fStopSeconds(f), m_bDelay(false) - { - if (!PREFSMAN->m_bQuirksMode) m_fStopSeconds = max( 0.0f, f ); - } - /** - * @brief Creates a Stop (or Delay) Segment at the specified row for the specified length of time. - * @param s the starting row of this segment. - * @param f the length of time to pause the note scrolling. - * @param d the flag that makes this Stop Segment a Delay Segment. - */ - StopSegment( int s, float f, bool d ) : m_iStartRow(max(0, s)), - m_fStopSeconds(f), m_bDelay(d) - { - if (!PREFSMAN->m_bQuirksMode) m_fStopSeconds = max( 0.0f, f ); - } - /** - * @brief The row in which the StopSegment activates. - */ - int m_iStartRow; - /** - * @brief The amount of time to complete the pause at the given row. - */ - float m_fStopSeconds; - /** - * @brief If true, the Stop Segment is treated as a Delay Segment, similar to the Pump It Up series. - */ - bool m_bDelay; - /** - * @brief Compares two StopSegments to see if they are equal to each other. - * @param other the other StopSegment to compare to. - * @return the equality of the two segments. - */ - bool operator==( const StopSegment &other ) const - { - COMPARE( m_iStartRow ); - COMPARE( m_fStopSeconds ); - COMPARE( m_bDelay ); - return true; - } - /** - * @brief Compares two StopSegments to see if they are not equal to each other. - * @param other the other StopSegment to compare to. - * @return the inequality of the two segments. - */ - bool operator!=( const StopSegment &other ) const { return !operator==(other); } - /** - * @brief Compares two StopSegments to see if one is less than the other. - * - * It should be observed that Delay Segments have to come before Stop Segments. - * Otherwise, it will act like a Stop Segment with extra time from the Delay at - * the same row. - * @param other the other StopSegment to compare to. - * @return the truth/falsehood of if the first is less than the second. - */ - bool operator<( const StopSegment &other ) const - { - return ( m_iStartRow < other.m_iStartRow ) || - ( m_iStartRow == other.m_iStartRow && - ( ( m_bDelay && !other.m_bDelay ) || m_fStopSeconds < other.m_fStopSeconds )); - } - /** - * @brief Compares two StopSegments to see if one is less than or equal to the other. - * @param other the other StopSegment to compare to. - * @return the truth/falsehood of if the first is less or equal to than the second. - */ - bool operator<=( const StopSegment &other ) const - { - return ( operator<(other) || operator==(other) ); - } - /** - * @brief Compares two StopSegments to see if one is greater than the other. - * - * Similar to the less than operator function, stops must come after delays - * to avoid rendering the point of delays pointless. - * @param other the other StopSegment to compare to. - * @return the truth/falsehood of if the first is greater than the second. - */ - bool operator>( const StopSegment &other ) const { return !operator<=(other); } - /** - * @brief Compares two StopSegments to see if one is greater than or equal to the other. - * @param other the other StopSegment to compare to. - * @return the truth/falsehood of if the first is greater than or equal to the second. - */ - bool operator>=( const StopSegment &other ) const { return !operator<(other); } -}; - -/** - * @brief Identifies when the chart scroll changes. - * - * ScrollSegments adjusts the scrolling speed of the note field. - * Unlike forced attacks, these cannot be turned off at a set time: - * reset it by setting the precentage back to 1. - * - * These were inspired by the Pump It Up series. */ -struct ScrollSegment -{ - /** @brief Sets up the ScrollSegment with default values. */ - ScrollSegment(): m_iStartRow(0), m_fPercent(1) {} - - /** - * @brief Sets up the ScrollSegment with specified values. - * @param i The row this activates. - * @param p The percentage to use. */ - ScrollSegment(int i, float p): m_iStartRow(i), m_fPercent(p) {} - - /** - * @brief Sets up the ScrollSegment with specified values. - * @param r The beat this activates. - * @param p The percentage to use. */ - ScrollSegment(float r, float p): m_iStartRow(BeatToNoteRow(r)), m_fPercent(p) {} - - /** @brief The row in which the ScrollSegment activates. */ - int m_iStartRow; - /** @brief The percentage to use when multiplying the chart's scroll rate. */ - float m_fPercent; - - /** - * @brief Compares two ScrollSegment to see if they are equal to each other. - * @param other the other ScrollSegment to compare to. - * @return the equality of the two segments. - */ - bool operator==( const ScrollSegment &other ) const - { - COMPARE( m_iStartRow ); - COMPARE( m_fPercent ); - return true; - } - /** - * @brief Compares two ScrollSegment to see if they are not equal to each other. - * @param other the other ScrollSegment to compare to. - * @return the inequality of the two segments. - */ - bool operator!=( const ScrollSegment &other ) const { return !operator==(other); } - /** - * @brief Compares two ScrollSegment to see if one is less than the other. - * @param other the other ScrollSegment to compare to. - * @return the truth/falsehood of if the first is less than the second. - */ - bool operator<( const ScrollSegment &other ) const { return m_iStartRow < other.m_iStartRow; } - /** - * @brief Compares two ScrollSegment to see if one is less than or equal to the other. - * @param other the other ScrollSegment to compare to. - * @return the truth/falsehood of if the first is less or equal to than the second. - */ - bool operator<=( const ScrollSegment &other ) const - { - return ( operator<(other) || operator==(other) ); - } - /** - * @brief Compares two ScrollSegment to see if one is greater than the other. - * @param other the other ScrollSegment to compare to. - * @return the truth/falsehood of if the first is greater than the second. - */ - bool operator>( const ScrollSegment &other ) const { return !operator<=(other); } - /** - * @brief Compares two ScrollSegment to see if one is greater than or equal to the other. - * @param other the other ScrollSegment to compare to. - * @return the truth/falsehood of if the first is greater than or equal to the second. - */ - bool operator>=( const ScrollSegment &other ) const { return !operator<(other); } -}; - /** * @brief Holds data for translating beats<->seconds. */ diff --git a/src/TimingSegments.cpp b/src/TimingSegments.cpp index 4184eff487..64aeee8b01 100644 --- a/src/TimingSegments.cpp +++ b/src/TimingSegments.cpp @@ -234,6 +234,51 @@ bool SpeedSegment::operator<( const SpeedSegment &other ) const return false; } +float ScrollSegment::GetRatio() const +{ + return this->ratio; +} + +void ScrollSegment::SetRatio(const float i) +{ + this->ratio = i; +} + +bool ScrollSegment::operator<( const ScrollSegment &other ) const +{ + LTCOMPARE(GetRow()); + LTCOMPARE(GetRatio()); + return false; +} + +float StopSegment::GetPause() const +{ + return this->pauseSeconds; +} + +void StopSegment::SetPause(const float i) +{ + this->pauseSeconds = i; +} + +bool StopSegment::GetDelay() const +{ + return this->isDelay; +} + +void StopSegment::SetDelay(const bool i) +{ + this->isDelay = i; +} + +bool StopSegment::operator<( const StopSegment &other ) const +{ + LTCOMPARE(GetRow()); + if (this->GetDelay() && !other.GetDelay()) return true; + if (!this->GetDelay() && other.GetDelay()) return false; + LTCOMPARE(GetPause()); + return false; +} /** * @file diff --git a/src/TimingSegments.h b/src/TimingSegments.h index 07a6ceb046..72e9a267c2 100644 --- a/src/TimingSegments.h +++ b/src/TimingSegments.h @@ -65,7 +65,7 @@ template struct TimingSegment: public BaseTimingSegment { - TimingSegment(): BaseTimingSegment() {}; + TimingSegment(): BaseTimingSegment(-1) {}; TimingSegment(const DerivedSegment &other): BaseTimingSegment(other) {}; template @@ -206,14 +206,14 @@ struct WarpSegment : public TimingSegment * It is best to override the values as soon as possible. */ WarpSegment(): - TimingSegment(), lengthBeats(-1) {}; + TimingSegment(-1), lengthBeats(-1) {}; /** * @brief Create a copy of another Warp Segment. * @param other the other warp segment */ WarpSegment(const WarpSegment &other): - TimingSegment(other.GetRow()), + TimingSegment(other), lengthBeats(other.GetLength()) {}; /** @@ -265,7 +265,7 @@ struct TickcountSegment : public TimingSegment * It is best to override the values as soon as possible. */ TickcountSegment(): - TimingSegment(), ticks(4) {}; + TimingSegment(-1), ticks(4) {}; /** * @brief Create a copy of another Tickcount Segment. @@ -328,7 +328,7 @@ struct ComboSegment : public TimingSegment * It is best to override the values as soon as possible. */ ComboSegment() : - TimingSegment(), combo(1) { } + TimingSegment(-1), combo(1) { } ComboSegment(const ComboSegment &other) : TimingSegment(other), @@ -382,7 +382,7 @@ struct LabelSegment : public TimingSegment * It is best to override the values as soon as possible. */ LabelSegment() : - TimingSegment(), label("") { } + TimingSegment(-1), label("") { } LabelSegment(const LabelSegment &other) : TimingSegment(other), @@ -500,7 +500,7 @@ struct TimeSignatureSegment : public TimingSegment * @brief Creates a simple Time Signature Segment with default values. */ TimeSignatureSegment(): - TimingSegment(), + TimingSegment(-1), numerator(4), denominator(4) { } TimeSignatureSegment(const TimeSignatureSegment &other) : @@ -688,12 +688,149 @@ private: * * 0: beats * 1: seconds - * other + * other values are undetermined at this time, but we're prepared this way. */ unsigned short unit; }; +/** + * @brief Identifies when the chart scroll changes. + * + * ScrollSegments adjusts the scrolling speed of the note field. + * Unlike forced attacks, these cannot be turned off at a set time: + * reset it by setting the precentage back to 1. + * + * These were inspired by the Pump It Up series. */ +struct ScrollSegment : public TimingSegment +{ + /** @brief Sets up the ScrollSegment with default values. */ + ScrollSegment(): TimingSegment(0), + ratio(1) {} + + /** + * @brief Sets up the ScrollSegment with specified values. + * @param s The row / beat this activates. + * @param p The percentage to use. */ + template + ScrollSegment( StartType s, float p): + TimingSegment(max((StartType)0, s)), + ratio(p) {} + + ScrollSegment(const ScrollSegment &other) : + TimingSegment(other), + ratio(other.GetRatio()) {} + + /** + * @brief Get the ratio in this ScrollSegment. + * @return the ratio. */ + float GetRatio() const; + + /** + * @brief Set the ratio in this ScrollSegment. + * @param i the ratio. */ + void SetRatio(const float i); + + /** + * @brief Compares two ScrollSegment to see if one is less than the other. + * @param other the other ScrollSegment to compare to. + * @return the truth/falsehood of if the first is less than the second. + */ + bool operator<( const ScrollSegment &other ) const; +private: + /** @brief The ratio / percentage to use when multiplying the chart's scroll rate. */ + float ratio; +}; + +/** + * @brief Identifies when a song has a stop or a delay. + * + * It is hopeful that stops and delays can be made into their own segments at some point. + */ +struct StopSegment : public TimingSegment +{ + /** + * @brief Creates a simple Stop Segment with default values. + * + * It is best to override the values as soon as possible. + */ + StopSegment() : TimingSegment(-1), + pauseSeconds(-1.0f), isDelay(false) {} + + StopSegment (const StopSegment &other): + TimingSegment(other), + pauseSeconds(other.GetPause()), + isDelay(other.GetDelay()) {} + + /** + * @brief Creates a Stop Segment with specified values. + * + * This will not create a dedicated delay segment. + * Use the third constructor for making delays. + * @param s the starting row / beat of this segment. + * @param f the length of time to pause the note scrolling. + */ + template + StopSegment( StartType s, float f ): + TimingSegment(max((StartType)0, s)), + pauseSeconds(f), isDelay(false) {} + /** + * @brief Creates a Stop/Delay Segment with specified values. + * @param s the starting row / beat of this segment. + * @param f the length of time to pause the note scrolling. + * @param d the flag that makes this Stop Segment a Delay Segment. + */ + template + StopSegment( StartType s, float f, bool d ): + TimingSegment(max((StartType)0, s)), + pauseSeconds(f), isDelay(d) {} + + /** + * @brief Get the pause length in this StopSegment. + * @return the pause length. */ + float GetPause() const; + + /** + * @brief Set the pause length in this StopSegment. + * @param i the pause length. */ + void SetPause(const float i); + + /** + * @brief Get the behavior in this StopSegment. + * @return the behavior. */ + bool GetDelay() const; + + /** + * @brief Set the behavior in this StopSegment. + * @param i the behavior. */ + void SetDelay(const bool i); + + /** + * @brief Compares two StopSegments to see if one is less than the other. + * + * It should be observed that Delay Segments have to come before Stop Segments. + * Otherwise, it will act like a Stop Segment with extra time from the Delay at + * the same row. + * @param other the other StopSegment to compare to. + * @return the truth/falsehood of if the first is less than the second. + */ + bool operator<( const StopSegment &other ) const; +private: + /** + * @brief The amount of time to complete the pause at the given row. + */ + float pauseSeconds; + /** + * @brief How does this StopSegment behave? + * + * If true, the Stop Segment is treated as a Delay Segment, similar to the Pump It Up series. + * If false, this behaves similar to the DDR/ITG style games. + * + * TODO: Separate out DelaySegments in the future. + */ + bool isDelay; +}; + #endif /** diff --git a/src/arch/ArchHooks/ArchHooks_Win32Static.cpp b/src/arch/ArchHooks/ArchHooks_Win32Static.cpp index f3dc6d64d6..3e63241dc4 100644 --- a/src/arch/ArchHooks/ArchHooks_Win32Static.cpp +++ b/src/arch/ArchHooks/ArchHooks_Win32Static.cpp @@ -55,16 +55,21 @@ static RString GetMountDir( const RString &sDirOfExecutable ) void ArchHooks::MountInitialFilesystems( const RString &sDirOfExecutable ) { RString sDir = GetMountDir( sDirOfExecutable ); + RString sCommonAppDataDir = SpecialDirs::GetCommonAppDataDir() + PRODUCT_ID; FILEMAN->Mount( "dir", sDir, "/" ); + FILEMAN->Mount( "dir", sCommonAppDataDir, "/" ); + FILEMAN->Mount( "dir", sCommonAppDataDir + "/Cache", "/Cache" ); } void ArchHooks::MountUserFilesystems( const RString &sDirOfExecutable ) { RString sAppDataDir = SpecialDirs::GetAppDataDir() + PRODUCT_ID; - FILEMAN->Mount( "dir", sAppDataDir + "/Cache", "/Cache" ); + RString sLocalAppDataDir = SpecialDirs::GetLocalAppDataDir() + PRODUCT_ID; + RString sPicturesDir = SpecialDirs::GetPicturesDir() + PRODUCT_ID; + FILEMAN->Mount( "dir", sAppDataDir + "/Logs", "/Logs" ); FILEMAN->Mount( "dir", sAppDataDir + "/Save", "/Save" ); - FILEMAN->Mount( "dir", sAppDataDir + "/Screenshots", "/Screenshots" ); + FILEMAN->Mount( "dir", sPicturesDir + " Screenshots", "/Screenshots" ); FILEMAN->Mount( "dir", sAppDataDir + "/Packages", "/" + SpecialFiles::USER_PACKAGES_DIR ); } diff --git a/src/archutils/Win32/SpecialDirs.cpp b/src/archutils/Win32/SpecialDirs.cpp index 48c274b824..5c48528e9e 100644 --- a/src/archutils/Win32/SpecialDirs.cpp +++ b/src/archutils/Win32/SpecialDirs.cpp @@ -18,6 +18,21 @@ RString SpecialDirs::GetAppDataDir() return GetSpecialFolderPath( CSIDL_APPDATA ); } +RString SpecialDirs::GetLocalAppDataDir() +{ + return GetSpecialFolderPath( CSIDL_LOCAL_APPDATA ); +} + +RString SpecialDirs::GetCommonAppDataDir() +{ + return GetSpecialFolderPath( CSIDL_COMMON_APPDATA ); +} + +RString SpecialDirs::GetPicturesDir() +{ + return GetSpecialFolderPath( CSIDL_MYPICTURES ); +} + RString SpecialDirs::GetDesktopDir() { return GetSpecialFolderPath( CSIDL_DESKTOP ); diff --git a/src/archutils/Win32/SpecialDirs.h b/src/archutils/Win32/SpecialDirs.h index c3ce9b42a9..3ea9ac7465 100644 --- a/src/archutils/Win32/SpecialDirs.h +++ b/src/archutils/Win32/SpecialDirs.h @@ -4,6 +4,9 @@ namespace SpecialDirs { RString GetAppDataDir(); + RString GetLocalAppDataDir(); + RString GetCommonAppDataDir(); + RString GetPicturesDir(); RString GetDesktopDir(); }; diff --git a/src/archutils/Win32/WindowsResources.rc b/src/archutils/Win32/WindowsResources.rc index ad20d9749a..fea25b16fb 100644 --- a/src/archutils/Win32/WindowsResources.rc +++ b/src/archutils/Win32/WindowsResources.rc @@ -180,8 +180,8 @@ IDI_ICON1 ICON "smzip.ico" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,1 - PRODUCTVERSION 1,2,4,1 + FILEVERSION 5,0,0,2 + PRODUCTVERSION 5,0,0,2 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -196,14 +196,14 @@ BEGIN BEGIN BLOCK "040904b0" BEGIN - VALUE "CompanyName", "the spinal shark collective\nhttp://ssc.ajworld.net/" - VALUE "FileDescription", "sm-ssc" - VALUE "FileVersion", "1, 2, 4, 0" + VALUE "CompanyName", "StepMania Team\nhttp://www.stepmania.com/" + VALUE "FileDescription", "StepMania" + VALUE "FileVersion", "5, 0, 0, 2" VALUE "InternalName", "sm-ssc" VALUE "LegalCopyright", "Copyright © 2001-2011" VALUE "OriginalFilename", "StepMania.exe" - VALUE "ProductName", "sm-ssc" - VALUE "ProductVersion", "1, 2, 4, 0" + VALUE "ProductName", "StepMania" + VALUE "ProductVersion", "5, 0, 0, 2" END END BLOCK "VarFileInfo" diff --git a/src/archutils/Win32/verinc.sln b/src/archutils/Win32/verinc.sln index fc522ddeb2..8415c10de0 100644 --- a/src/archutils/Win32/verinc.sln +++ b/src/archutils/Win32/verinc.sln @@ -1,21 +1,19 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mapconv", "verinc.vcproj", "{46C1AA00-F02C-4E0A-8150-542C9728474C}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "verinc", "verinc.vcxproj", "{46C1AA00-F02C-4E0A-8150-542C9728474C}" EndProject Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {46C1AA00-F02C-4E0A-8150-542C9728474C}.Debug.ActiveCfg = Debug|Win32 - {46C1AA00-F02C-4E0A-8150-542C9728474C}.Debug.Build.0 = Debug|Win32 - {46C1AA00-F02C-4E0A-8150-542C9728474C}.Release.ActiveCfg = Release|Win32 - {46C1AA00-F02C-4E0A-8150-542C9728474C}.Release.Build.0 = Release|Win32 + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {46C1AA00-F02C-4E0A-8150-542C9728474C}.Debug|Win32.ActiveCfg = Debug|Win32 + {46C1AA00-F02C-4E0A-8150-542C9728474C}.Debug|Win32.Build.0 = Debug|Win32 + {46C1AA00-F02C-4E0A-8150-542C9728474C}.Release|Win32.ActiveCfg = Release|Win32 + {46C1AA00-F02C-4E0A-8150-542C9728474C}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE EndGlobalSection EndGlobal diff --git a/src/libtomcrypt/libtomcrypt-net2010.vcxproj b/src/libtomcrypt/libtomcrypt-net2010.vcxproj index 549b9f5dbe..e1749dcd1f 100644 --- a/src/libtomcrypt/libtomcrypt-net2010.vcxproj +++ b/src/libtomcrypt/libtomcrypt-net2010.vcxproj @@ -95,6 +95,7 @@ Level2 EditAndContinue + true diff --git a/src/libtommath/libtommath-net2010.vcxproj b/src/libtommath/libtommath-net2010.vcxproj index 2b3119da9b..c79329b343 100644 --- a/src/libtommath/libtommath-net2010.vcxproj +++ b/src/libtommath/libtommath-net2010.vcxproj @@ -95,6 +95,7 @@ Level2 EditAndContinue + true