diff --git a/Announcers/instructions.txt b/Announcers/instructions.txt index a9a2af9a95..d580481e3f 100644 --- a/Announcers/instructions.txt +++ b/Announcers/instructions.txt @@ -1,7 +1,7 @@ Place announcer folders in this directory. [Announcer format] -sm-ssc's announcers look for certain names. These can either be a single sound, +StepMania's announcers look for certain names. These can either be a single sound, or a folder containing many sounds (of which one is picked at random). [Announcer calls] diff --git a/Data/RandomAttacks.txt b/Data/RandomAttacks.txt index a0af0a7832..6c54536b68 100644 --- a/Data/RandomAttacks.txt +++ b/Data/RandomAttacks.txt @@ -1,32 +1,23 @@ // File for specifying Random Attacks, used by the Random Attacks mod and Attack Mines mod. -// Only specify one modifier per attack. // // Sample lines: -// // #ATTACK:drunk; // #ATTACK:30% tornado; // #ATTACK:-20% beat; -// -// // Speed Mods -// #ATTACK:0.5x; #ATTACK:1x; #ATTACK:1.5x; #ATTACK:2x; -// // Accel Mods -// #ATTACK:boost; #ATTACK:brake; #ATTACK:wave; #ATTACK:expand; -// // Effect Mods -// #ATTACK:drunk; #ATTACK:dizzy; #ATTACK:confusion; @@ -38,34 +29,24 @@ #ATTACK:beat; #ATTACK:bumpy; -// // Appearance Mods -// #ATTACK:50% hidden; #ATTACK:50% sudden; #ATTACK:30% blink; -// // Hide Mods -// #ATTACK:dark; #ATTACK:blind; -// // Transform Mods -// #ATTACK:mines; -// // Scroll -// #ATTACK:30% reverse; #ATTACK:reverse; #ATTACK:centered; -// // Perspective Mods -// #ATTACK:hallway; #ATTACK:space; #ATTACK:incoming; diff --git a/Docs/Changelog_SSCformat.txt b/Docs/Changelog_SSCformat.txt index 4f752bf679..de70721e81 100644 --- a/Docs/Changelog_SSCformat.txt +++ b/Docs/Changelog_SSCformat.txt @@ -9,6 +9,9 @@ change to JSON, but it is unsure if this will be done. Implement .ssc at your own risk. _______________________________________________________________________________ +[v0.79] - freem +* Back to three significant decimal places. + [v0.78] - Wolfman2000 * Use the step timing/attack tags only when required. The presence of even ONE timing tag causes all to be used, so be careful with it. diff --git a/Docs/Changelog_sm5.txt b/Docs/Changelog_sm5.txt index cede3f83a6..09b2e7353f 100644 --- a/Docs/Changelog_sm5.txt +++ b/Docs/Changelog_sm5.txt @@ -8,6 +8,11 @@ ________________________________________________________________________________ StepMania 5.0 $next | 2011???? -------------------------------------------------------------------------------- +2011/09/07 +---------- +* [Model] Added GetDefaultAnimation() Lua binding. [AJ] +* [GameState] Added GetEarnedExtraStage() Lua binding. [AJ] + 2011/09/02 ---------- * [MenuTimer] Added start(), disable() Lua bindings. Also renamed setseconds to diff --git a/Docs/WindowsNotes.txt b/Docs/WindowsNotes.txt index 81d6261bc2..b37f725aa1 100644 --- a/Docs/WindowsNotes.txt +++ b/Docs/WindowsNotes.txt @@ -1,6 +1,3 @@ -[IMPORTANT INSTALL NOTE] -If you are using Windows Vista or Windows 7, please do not install StepMania 5 into the Program Files directory. - [Using Google Chrome?] If you are using Google Chrome as your primary web browser, you will have to perform some extra steps to get stepmania:// URI handling to work: diff --git a/Themes/_fallback/BGAnimations/ScreenCredits overlay.lua b/Themes/_fallback/BGAnimations/ScreenCredits overlay.lua index 36350d307c..9018cef21f 100644 --- a/Themes/_fallback/BGAnimations/ScreenCredits overlay.lua +++ b/Themes/_fallback/BGAnimations/ScreenCredits overlay.lua @@ -38,34 +38,41 @@ local stepmania = { -- and various other contributors } +local oitg = { + "infamouspat", + "Mark Cannon (vyhd)", +} + local contrib = { "Aldo Fregoso (Aldo_MX)", -- delays "cerbo", "cesarmades", -- pump/cmd* noteskins "Chris Eldridge (kurisu)", -- dance-threepanel - "Christophe Goulet-LeBlanc (Kommisar)", + "Christophe Goulet-LeBlanc (Kommisar)", -- songs "corec", -- various fixes "galopin", -- piu PlayStation2 usb mat support "gholms", -- automake 1.11 support "juanelote", -- SongManager:GetSongGroupByIndex, JumpToNext/PrevGroup logic mods "Kaox", -- pump/default noteskin + "Petriform", -- Music "NitroX72", -- pump/frame noteskin "sy567", -- beginner helper fix "v1toko", -- x-mode from StepNXA "waiei", -- custom scoring fixes + Hybrid scoring } +local translators = { + "John Reactor (Polish)", +} + local thanks = { "A Pseudonymous Coder", -- support "Bill Shillito (DM Ashura)", -- Music (not yet though) "cpubasic13", -- testing (a lot) "Dreamwoods", - "Infamouspat", -- oitg bro "Jason Bolt (LightningXCE)", "Jousway", -- Noteskins "Matt1360", -- Automake magic + oitg bro - "Mark Cannon (vyhd)", -- oitg bro + twirl/roll - "Petriform", -- Music "Renard", "Ryan McKanna (Plaguefox)", } @@ -92,6 +99,8 @@ local sections = { { "the spinal shark collective (project lead)", ssc }, { "sm-ssc Team", sm_ssc }, { "StepMania Team", stepmania }, + { "OpenITG Team", oitg }, + { "Translators", translators }, { "Other Contributors", contrib }, { "Special Thanks", thanks }, { "Shoutouts", shoutout }, diff --git a/Themes/_fallback/metrics.ini b/Themes/_fallback/metrics.ini index 04c2dfd0a9..65fed6206f 100644 --- a/Themes/_fallback/metrics.ini +++ b/Themes/_fallback/metrics.ini @@ -3611,12 +3611,12 @@ PlayRecordHelpOnCommand=halign,0;valign,0;shadowlength,1 LoopOnChartEnd=true -CurrentBeatFormat="%s:\n %.6f\n" -CurrentSecondFormat="%s:\n %.6f\n" +CurrentBeatFormat="%s:\n %.3f\n" +CurrentSecondFormat="%s:\n %.3f\n" SnapToFormat="%s: %s\n" -SelectionBeatBeginFormat="%s:\n %.6f" +SelectionBeatBeginFormat="%s:\n %.3f" SelectionBeatUnfinishedFormat=" ...\n" -SelectionBeatEndFormat="-%.6f\n" +SelectionBeatEndFormat="-%.3f\n" DifficultyFormat="%s:\n %s\n" RoutinePlayerFormat="%s: %d\n" DescriptionFormat="%s:\n %s\n" @@ -3644,9 +3644,9 @@ NumRollsFormatTwoPlayer="%s: %d/%d\n" NumLiftsFormatTwoPlayer="%s: %d/%d\n" NumFakesFormatTwoPlayer="%s: %d/%d\n" TimingModeFormat="%s:\n %s\n" -Beat0OffsetFormat="%s:\n %.6f secs\n" -PreviewStartFormat="%s:\n %.6f secs\n" -PreviewLengthFormat="%s:\n %.6f secs\n" +Beat0OffsetFormat="%s:\n %.3f secs\n" +PreviewStartFormat="%s:\n %.3f secs\n" +PreviewLengthFormat="%s:\n %.3f secs\n" [ScreenPracticeMenu] Fallback="ScreenEditMenu" diff --git a/Themes/default/BGAnimations/ScreenCredits overlay.lua b/Themes/default/BGAnimations/ScreenCredits overlay.lua index 3dc16427a0..86028fc183 100644 --- a/Themes/default/BGAnimations/ScreenCredits overlay.lua +++ b/Themes/default/BGAnimations/ScreenCredits overlay.lua @@ -38,18 +38,24 @@ local stepmania = { -- and various other contributors } +local oitg = { + "infamouspat", + "Mark Cannon (vyhd)", +} + local contrib = { "Aldo Fregoso (Aldo_MX)", -- delays "cerbo", "cesarmades", -- pump/cmd* noteskins "Chris Eldridge (kurisu)", -- dance-threepanel - "Christophe Goulet-LeBlanc (Kommisar)", + "Christophe Goulet-LeBlanc (Kommisar)", -- songs "corec", -- various fixes "galopin", -- piu PlayStation2 usb mat support "gholms", -- automake 1.11 support "juanelote", -- SongManager:GetSongGroupByIndex, JumpToNext/PrevGroup logic mods "Kaox", -- pump/default noteskin "NitroX72", -- pump/frame noteskin + "Petriform", -- Music "sy567", -- beginner helper fix "v1toko", -- x-mode from StepNXA "waiei", -- custom scoring fixes + Hybrid scoring @@ -57,19 +63,16 @@ local contrib = { local translators = { "John Reactor (Polish)", - } +} local thanks = { "A Pseudonymous Coder", -- support "Bill Shillito (DM Ashura)", -- Music (not yet though) "cpubasic13", -- testing (a lot) "Dreamwoods", - "Infamouspat", -- oitg bro "Jason Bolt (LightningXCE)", "Jousway", -- Noteskins "Matt1360", -- Automake magic + oitg bro - "Mark Cannon (vyhd)", -- oitg bro + twirl/roll - "Petriform", -- Music "Renard", "Ryan McKanna (Plaguefox)", } @@ -81,10 +84,10 @@ local shoutout = { "NAKET Coder", "Ciera Boyd", -- you bet your ass I'm putting my girlfriend in the credits --Image(), -- we should have some logos probably to look super pro - -- "Can't stop crying... buckets of tears!" "#KBO", - "AJ Kelly, without which this game would have never been.", + "Celestia Radio", -- LOVE AND TOLERANCE "You showed us... your ultimate dance", + -- "Can't stop crying... buckets of tears!" } local copyright = { @@ -97,15 +100,14 @@ local sections = { { "the spinal shark collective (project lead)", ssc }, { "sm-ssc Team", sm_ssc }, { "StepMania Team", stepmania }, - { "Other Contributors", contrib }, + { "OpenITG Team", oitg }, { "Translators", translators }, + { "Other Contributors", contrib }, { "Special Thanks", thanks }, { "Shoutouts", shoutout }, { "Copyright", copyright }, } - - -- To add people or sections modify the above. local lineOn = cmd(zoom,0.875;strokecolor,color("#444444");shadowcolor,color("#444444");shadowlength,3) diff --git a/Themes/default/BGAnimations/ScreenGameplay decorations/default.lua b/Themes/default/BGAnimations/ScreenGameplay decorations/default.lua index a717ffbc2d..8d884f7e80 100644 --- a/Themes/default/BGAnimations/ScreenGameplay decorations/default.lua +++ b/Themes/default/BGAnimations/ScreenGameplay decorations/default.lua @@ -18,122 +18,124 @@ local function CreateSegments(Player) -- Straight rip off NCRX local song = GAMESTATE:GetCurrentSong(); local steps = GAMESTATE:GetCurrentSteps( Player ); - local timingData = steps:GetTimingData(); - -- if we're using SSC, might as well use the StepsSeconds, which will - -- almost always be more proper than a r21'd file. - if song then - local songLen = song:MusicLengthSeconds(); + if steps then + local timingData = steps:GetTimingData(); + -- if we're using SSC, might as well use the StepsSeconds, which will + -- almost always be more proper than a r21'd file. + if song then + local songLen = song:MusicLengthSeconds(); - local firstBeatSecs = song:GetFirstSecond(); - local lastBeatSecs = song:GetLastSecond(); + local firstBeatSecs = song:GetFirstSecond(); + local lastBeatSecs = song:GetLastSecond(); - local bpms = timingData:GetBPMsAndTimes(); - local stops = timingData:GetStops(); - local delays = timingData:GetDelays(); - local warps = timingData:GetWarps(); - local fakes = timingData:GetFakes(); - local scrolls = timingData:GetScrolls(); - local speeds = timingData:GetSpeeds(); - - local function CreateLine(beat, secs, firstShadow, firstDiffuse, secondShadow, firstEffect, secondEffect) - local beatTime = timingData:GetElapsedTimeFromBeat(beat); - if beatTime < 0 then beatTime = 0; end; - return Def.ActorFrame { - Def.Quad { - InitCommand=function(self) - self:shadowlength(0); - self:shadowcolor(color(firstShadow)); - -- set width - self:zoomto(math.max((secs/songLen)*fFrameWidth, 1), fFrameHeight); - -- find location - self:x((scale(beatTime,firstBeatSecs,lastBeatSecs,-fFrameWidth/2,fFrameWidth/2))); - end; - OnCommand=function(self) - self:diffuse(color(firstDiffuse)); - self:sleep(beatTime+1); - self:linear(2); - self:diffusealpha(0); - end; + local bpms = timingData:GetBPMsAndTimes(); + local stops = timingData:GetStops(); + local delays = timingData:GetDelays(); + local warps = timingData:GetWarps(); + local fakes = timingData:GetFakes(); + local scrolls = timingData:GetScrolls(); + local speeds = timingData:GetSpeeds(); + + local function CreateLine(beat, secs, firstShadow, firstDiffuse, secondShadow, firstEffect, secondEffect) + local beatTime = timingData:GetElapsedTimeFromBeat(beat); + if beatTime < 0 then beatTime = 0; end; + return Def.ActorFrame { + Def.Quad { + InitCommand=function(self) + self:shadowlength(0); + self:shadowcolor(color(firstShadow)); + -- set width + self:zoomto(math.max((secs/songLen)*fFrameWidth, 1), fFrameHeight); + -- find location + self:x((scale(beatTime,firstBeatSecs,lastBeatSecs,-fFrameWidth/2,fFrameWidth/2))); + end; + OnCommand=function(self) + self:diffuse(color(firstDiffuse)); + self:sleep(beatTime+1); + self:linear(2); + self:diffusealpha(0); + end; + }; + Def.Quad { + InitCommand=function(self) + --self:diffuse(HSVA(192,1,0.8,0.8)); + self:shadowlength(0); + self:shadowcolor(color(secondShadow)); + -- set width + self:zoomto(math.max((secs/songLen)*fFrameWidth, 1),fFrameHeight); + -- find location + self:x((scale(beatTime,firstBeatSecs,lastBeatSecs,-fFrameWidth/2,fFrameWidth/2))); + end; + OnCommand=function(self) + self:diffusealpha(1); + self:diffuseshift(); + self:effectcolor1(color(firstEffect)); + self:effectcolor2(color(secondEffect)); + self:effectclock('beat'); + self:effectperiod(1/8); + -- + self:diffusealpha(0); + self:sleep(beatTime+1); + self:diffusealpha(1); + self:linear(4); + self:diffusealpha(0); + end; + }; }; - Def.Quad { - InitCommand=function(self) - --self:diffuse(HSVA(192,1,0.8,0.8)); - self:shadowlength(0); - self:shadowcolor(color(secondShadow)); - -- set width - self:zoomto(math.max((secs/songLen)*fFrameWidth, 1),fFrameHeight); - -- find location - self:x((scale(beatTime,firstBeatSecs,lastBeatSecs,-fFrameWidth/2,fFrameWidth/2))); - end; - OnCommand=function(self) - self:diffusealpha(1); - self:diffuseshift(); - self:effectcolor1(color(firstEffect)); - self:effectcolor2(color(secondEffect)); - self:effectclock('beat'); - self:effectperiod(1/8); - -- - self:diffusealpha(0); - self:sleep(beatTime+1); - self:diffusealpha(1); - self:linear(4); - self:diffusealpha(0); - end; - }; - }; + end; + + for i=1,#bpms do + local data = split("=",bpms[i]); + bpmFrame[#bpmFrame+1] = CreateLine(data[1], 0, + "#00808077", "#00808077", "#00808077", "#FF634777", "#FF000077"); + end; + + for i=1,#delays do + local data = split("=",delays[i]); + delayFrame[#delayFrame+1] = CreateLine(data[1], data[2], + "#FFFF0077", "#FFFF0077", "#FFFF0077", "#00FF0077", "#FF000077"); + end; + + for i=1,#stops do + local data = split("=",stops[i]); + stopFrame[#stopFrame+1] = CreateLine(data[1], data[2], + "#FFFFFF77", "#FFFFFF77", "#FFFFFF77", "#FFA50077", "#FF000077"); + end; + + for i=1,#scrolls do + local data = split("=",scrolls[i]); + scrollFrame[#scrollFrame+1] = CreateLine(data[1], 0, + "#4169E177", "#4169E177", "#4169E177", "#0000FF77", "#FF000077"); + end; + + for i=1,#speeds do + local data = split("=",speeds[i]); + -- TODO: Turn beats into seconds for this calculation? + speedFrame[#speedFrame+1] = CreateLine(data[1], 0, + "#ADFF2F77", "#ADFF2F77", "#ADFF2F77", "#7CFC0077", "#FF000077"); + end; + + for i=1,#warps do + local data = split("=",warps[i]); + warpFrame[#warpFrame+1] = CreateLine(data[1], 0, + "#CC00CC77", "#CC00CC77", "#CC00CC77", "#FF33CC77", "#FF000077"); + end; + + for i=1,#fakes do + local data = split("=",fakes[i]); + fakeFrame[#fakeFrame+1] = CreateLine(data[1], 0, + "#BC8F8F77", "#BC8F8F77", "#BC8F8F77", "#F4A46077", "#FF000077"); + end; end; - - for i=1,#bpms do - local data = split("=",bpms[i]); - bpmFrame[#bpmFrame+1] = CreateLine(data[1], 0, - "#00808077", "#00808077", "#00808077", "#FF634777", "#FF000077"); - end; - - for i=1,#delays do - local data = split("=",delays[i]); - delayFrame[#delayFrame+1] = CreateLine(data[1], data[2], - "#FFFF0077", "#FFFF0077", "#FFFF0077", "#00FF0077", "#FF000077"); - end; - - for i=1,#stops do - local data = split("=",stops[i]); - stopFrame[#stopFrame+1] = CreateLine(data[1], data[2], - "#FFFFFF77", "#FFFFFF77", "#FFFFFF77", "#FFA50077", "#FF000077"); - end; - - for i=1,#scrolls do - local data = split("=",scrolls[i]); - scrollFrame[#scrollFrame+1] = CreateLine(data[1], 0, - "#4169E177", "#4169E177", "#4169E177", "#0000FF77", "#FF000077"); - end; - - for i=1,#speeds do - local data = split("=",speeds[i]); - -- TODO: Turn beats into seconds for this calculation? - speedFrame[#speedFrame+1] = CreateLine(data[1], 0, - "#ADFF2F77", "#ADFF2F77", "#ADFF2F77", "#7CFC0077", "#FF000077"); - end; - - for i=1,#warps do - local data = split("=",warps[i]); - warpFrame[#warpFrame+1] = CreateLine(data[1], 0, - "#CC00CC77", "#CC00CC77", "#CC00CC77", "#FF33CC77", "#FF000077"); - end; - - for i=1,#fakes do - local data = split("=",fakes[i]); - fakeFrame[#fakeFrame+1] = CreateLine(data[1], 0, - "#BC8F8F77", "#BC8F8F77", "#BC8F8F77", "#F4A46077", "#FF000077"); - end; - end; - bars[#bars+1] = bpmFrame; - bars[#bars+1] = scrollFrame; - bars[#bars+1] = speedFrame; - bars[#bars+1] = stopFrame; - bars[#bars+1] = delayFrame; - bars[#bars+1] = warpFrame; - bars[#bars+1] = fakeFrame; - t[#t+1] = bars; + bars[#bars+1] = bpmFrame; + bars[#bars+1] = scrollFrame; + bars[#bars+1] = speedFrame; + bars[#bars+1] = stopFrame; + bars[#bars+1] = delayFrame; + bars[#bars+1] = warpFrame; + bars[#bars+1] = fakeFrame; + t[#t+1] = bars; + end end return t end diff --git a/Themes/default/Graphics/Common splash.png b/Themes/default/Graphics/Common splash.png new file mode 100644 index 0000000000..3b425e3249 Binary files /dev/null and b/Themes/default/Graphics/Common splash.png differ diff --git a/Themes/default/Graphics/ScreenTitleMenu logo/_arrow.png b/Themes/default/Graphics/ScreenTitleMenu logo/_arrow.png new file mode 100644 index 0000000000..a4ed9a0577 Binary files /dev/null and b/Themes/default/Graphics/ScreenTitleMenu logo/_arrow.png differ diff --git a/Themes/default/Graphics/ScreenTitleMenu logo/_logo.png b/Themes/default/Graphics/ScreenTitleMenu logo/_logo.png deleted file mode 100644 index fdd95379f3..0000000000 Binary files a/Themes/default/Graphics/ScreenTitleMenu logo/_logo.png and /dev/null differ diff --git a/Themes/default/Graphics/ScreenTitleMenu logo/_text.png b/Themes/default/Graphics/ScreenTitleMenu logo/_text.png new file mode 100644 index 0000000000..bab66f6770 Binary files /dev/null and b/Themes/default/Graphics/ScreenTitleMenu logo/_text.png differ diff --git a/Themes/default/Graphics/ScreenTitleMenu logo/default.lua b/Themes/default/Graphics/ScreenTitleMenu logo/default.lua index d15b1bc77c..4c80c37b0d 100644 --- a/Themes/default/Graphics/ScreenTitleMenu logo/default.lua +++ b/Themes/default/Graphics/ScreenTitleMenu logo/default.lua @@ -1,8 +1,15 @@ --- comments show how this compares to a StepMania 3.9 BGAnimation.ini. --- It should be noted that additional commands on the ActorFrame as a whole for --- this file are in metrics.ini ([ScreenTitleMenu] ShowLogo, etc.) -local t = Def.ActorFrame{ -- [BGAnimation] - LoadActor("_logo"); -- [Layer1] Type=0 File=_ball.png +local t = Def.ActorFrame{ + InitCommand=cmd(fov,70); + LoadActor("_arrow")..{ + InitCommand=cmd(x,225;); + OnCommand=cmd(wag;effectmagnitude,0,0,16;effectperiod,2.5;); + }; + LoadActor("_text"); + LoadActor("_text")..{ + Name="TextGlow"; + InitCommand=cmd(blend,Blend.Add;diffusealpha,0.05;); + OnCommand=cmd(glowshift;effectperiod,2.5;effectcolor1,color("1,1,1,0.25");effectcolor2,color("1,1,1,1");); + }; }; return t; diff --git a/Themes/default/metrics.ini b/Themes/default/metrics.ini index 76b1e6f468..4876a901d2 100644 --- a/Themes/default/metrics.ini +++ b/Themes/default/metrics.ini @@ -604,8 +604,8 @@ ScrollerOnCommand=zoom,0;bounceend,0.35;zoom,1 ShowLogo=true LogoX=SCREEN_CENTER_X LogoY=SCREEN_CENTER_Y-68 -LogoOnCommand=bob;effectperiod,4;effectmagnitude,0,5.25,0;zoom,0;bounceend,0.35;zoom,0.75 -LogoOffCommand=stopeffect;bouncebegin,0.35;zoom,0 +LogoOnCommand= +LogoOffCommand= # ShowCurrentGametype=true CurrentGametypeX=SCREEN_WIDTH*0.01 diff --git a/Utils/NSIS/GetVersion.zip b/Utils/NSIS/GetVersion.zip deleted file mode 100644 index 0300f2f0e7..0000000000 Binary files a/Utils/NSIS/GetVersion.zip and /dev/null differ diff --git a/Utils/NSIS/Nsisos.zip b/Utils/NSIS/Nsisos.zip new file mode 100644 index 0000000000..9f2fd74195 Binary files /dev/null and b/Utils/NSIS/Nsisos.zip differ diff --git a/Utils/NSIS/readme.txt b/Utils/NSIS/readme.txt index 19a3023b90..c2ed71fd70 100644 --- a/Utils/NSIS/readme.txt +++ b/Utils/NSIS/readme.txt @@ -1,8 +1,8 @@ In this folder are local copies of things required to properly build the StepMania installer. -Right now, this is just the GetVersion plugin (so that we can write the files +Right now, this is just the NSIS-OS plugin (so that we can write the files to somewhere that isn't Program Files on Windows Vista/7). -The GetVersion plugin can alternatively be downloaded from here: -http://nsis.sourceforge.net/GetVersion_%28Windows%29_plug-in \ No newline at end of file +The NSIS-OS plugin can be alternatively downloaded from here: +http://nsis.sourceforge.net/NSIS-OS_plug-in \ No newline at end of file diff --git a/_assets/splash.psd b/_assets/splash.psd index c2861af8eb..ef1973a819 100644 Binary files a/_assets/splash.psd and b/_assets/splash.psd differ diff --git a/sm-ssc.nsi b/sm-ssc.nsi index 8b8e8f4ad0..22b2e9c652 100644 --- a/sm-ssc.nsi +++ b/sm-ssc.nsi @@ -54,14 +54,6 @@ ; I think it may need actual admin privs for writing to the registry... -aj ;RequestExecutionLevel user - ;GetVersion::WindowsServicePackMajor - ;Pop $R0 - ;${If} $R0 >= 6 - ; vista & 7 - ;${Else} - ; xp and below - ;${EndIf} - InstallDir "$PROGRAMFILES\${PRODUCT_ID}" InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\${PRODUCT_ID}" "" @@ -97,9 +89,6 @@ !insertmacro MUI_PAGE_WELCOME - ; include various Windows-only notices - !insertmacro MUI_PAGE_LICENSE ".\Docs\WindowsNotes.txt" - ;!insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES @@ -681,6 +670,12 @@ FunctionEnd Function .onInit + nsisos::osversion + ${If} $R0 >= 6 + ;vista & win7 + StrCpy $INSTDIR "%HOMEPATH%\${PRODUCT_ID}" + ${EndIf} + ; Force show language selection for debugging ;!define MUI_LANGDLL_ALWAYSSHOW !insertmacro MUI_LANGDLL_DISPLAY diff --git a/src/GameManager.cpp b/src/GameManager.cpp index bc0e138de1..7e1f8ec5a9 100644 --- a/src/GameManager.cpp +++ b/src/GameManager.cpp @@ -2791,8 +2791,8 @@ static const Game g_Game_Lights = static const Game *g_Games[] = { - &g_Game_Pump, &g_Game_Dance, + &g_Game_Pump, &g_Game_KB7, &g_Game_Ez2, &g_Game_Para, diff --git a/src/GameState.cpp b/src/GameState.cpp index 72f5fcebbb..d9caa4f9b6 100644 --- a/src/GameState.cpp +++ b/src/GameState.cpp @@ -2261,6 +2261,7 @@ public: DEFINE_METHOD( IsExtraStage2, IsExtraStage2() ) DEFINE_METHOD( GetCurrentStage, GetCurrentStage() ) DEFINE_METHOD( HasEarnedExtraStage, HasEarnedExtraStage() ) + DEFINE_METHOD( GetEarnedExtraStage, GetEarnedExtraStage() ) DEFINE_METHOD( GetEasiestStepsDifficulty, GetEasiestStepsDifficulty() ) DEFINE_METHOD( GetHardestStepsDifficulty, GetHardestStepsDifficulty() ) DEFINE_METHOD( IsEventMode, IsEventMode() ) @@ -2476,6 +2477,7 @@ public: ADD_METHOD( IsExtraStage2 ); ADD_METHOD( GetCurrentStage ); ADD_METHOD( HasEarnedExtraStage ); + ADD_METHOD( GetEarnedExtraStage ); ADD_METHOD( GetEasiestStepsDifficulty ); ADD_METHOD( GetHardestStepsDifficulty ); ADD_METHOD( IsEventMode ); diff --git a/src/GameState.h b/src/GameState.h index d0edf2ee18..c78f4ce7f2 100644 --- a/src/GameState.h +++ b/src/GameState.h @@ -310,6 +310,7 @@ public: Character* m_pCurCharacters[NUM_PLAYERS]; bool HasEarnedExtraStage() const { return m_bEarnedExtraStage; } + EarnedExtraStage GetEarnedExtraStage() const { return CalculateEarnedExtraStage(); } // Ranking Stuff struct RankingFeat @@ -390,7 +391,7 @@ private: EarnedExtraStage CalculateEarnedExtraStage() const; int m_iAwardedExtraStages[NUM_PLAYERS]; bool m_bEarnedExtraStage; - + GameState(const GameState& rhs); GameState& operator=(const GameState& rhs); diff --git a/src/Model.cpp b/src/Model.cpp index 070783de83..af1da0d951 100644 --- a/src/Model.cpp +++ b/src/Model.cpp @@ -778,6 +778,7 @@ public: static int position( T* p, lua_State *L ) { p->SetPosition( FArg(1) ); return 0; } static int playanimation( T* p, lua_State *L ) { p->PlayAnimation(SArg(1),FArg(2)); return 0; } static int SetDefaultAnimation( T* p, lua_State *L ) { p->SetDefaultAnimation(SArg(1),FArg(2)); return 0; } + static int GetDefaultAnimation( T* p, lua_State *L ) { lua_pushstring( L, p->GetDefaultAnimation() ); return 1; } static int loop( T* p, lua_State *L ) { p->SetLoop(BArg(1)); return 0; } static int rate( T* p, lua_State *L ) { p->SetRate(FArg(1)); return 0; } static int GetNumStates( T* p, lua_State *L ) { lua_pushnumber( L, p->GetNumStates() ); return 1; } @@ -788,11 +789,13 @@ public: ADD_METHOD( position ); ADD_METHOD( playanimation ); ADD_METHOD( SetDefaultAnimation ); + ADD_METHOD( GetDefaultAnimation ); ADD_METHOD( loop ); ADD_METHOD( rate ); // sm-ssc adds: ADD_METHOD( GetNumStates ); //ADD_METHOD( CelShading ); + // LoadMilkshapeAsciiBones? } }; diff --git a/src/Model.h b/src/Model.h index d9ce8e343b..afb70cc738 100644 --- a/src/Model.h +++ b/src/Model.h @@ -83,7 +83,7 @@ private: float m_fCurAnimationRate; bool m_bLoop; bool m_bDrawCelShaded; // for Lua models - + Model& operator=(const Model& rhs); }; diff --git a/src/NotesWriterSSC.cpp b/src/NotesWriterSSC.cpp index 036c06781a..ff07a77cb3 100644 --- a/src/NotesWriterSSC.cpp +++ b/src/NotesWriterSSC.cpp @@ -44,16 +44,16 @@ struct TimingTagWriter { void Write( const int row, const char *value ) { - m_pvsLines->push_back( m_sNext + ssprintf( "%.6f=%s", NoteRowToBeat(row), value ) ); + m_pvsLines->push_back( m_sNext + ssprintf( "%.3f=%s", NoteRowToBeat(row), value ) ); m_sNext = ","; } - void Write( const int row, const float value ) { Write( row, ssprintf( "%.6f", value ) ); } + void Write( const int row, const float value ) { Write( row, ssprintf( "%.3f", value ) ); } void Write( const int row, const int value ) { Write( row, ssprintf( "%d", value ) ); } void Write( const int row, const int a, const int b ) { Write( row, ssprintf( "%d=%d", a, b ) ); } - void Write( const int row, const float a, const float b ) { Write( row, ssprintf( "%.6f=%.6f", a, b) ); } + void Write( const int row, const float a, const float b ) { Write( row, ssprintf( "%.3f=%.3f", a, b) ); } void Write( const int row, const float a, const float b, const unsigned short c ) - { Write( row, ssprintf( "%.6f=%.6f=%hd", a, b, c) ); } + { Write( row, ssprintf( "%.3f=%.3f=%hd", a, b, c) ); } void Init( const RString sTag ) { m_sNext = "#" + sTag + ":"; } void Finish( ) { m_pvsLines->push_back( ( m_sNext != "," ? m_sNext : "" ) + ";" ); } @@ -235,9 +235,9 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) f.PutLine( "#INSTRUMENTTRACK:" + s + ";\n" ); } } - f.PutLine( ssprintf( "#OFFSET:%.6f;", out.m_SongTiming.m_fBeat0OffsetInSeconds ) ); - f.PutLine( ssprintf( "#SAMPLESTART:%.6f;", out.m_fMusicSampleStartSeconds ) ); - f.PutLine( ssprintf( "#SAMPLELENGTH:%.6f;", out.m_fMusicSampleLengthSeconds ) ); + f.PutLine( ssprintf( "#OFFSET:%.3f;", out.m_SongTiming.m_fBeat0OffsetInSeconds ) ); + f.PutLine( ssprintf( "#SAMPLESTART:%.3f;", out.m_fMusicSampleStartSeconds ) ); + f.PutLine( ssprintf( "#SAMPLELENGTH:%.3f;", out.m_fMusicSampleLengthSeconds ) ); f.Write( "#SELECTABLE:" ); switch(out.m_SelectionDisplay) @@ -256,9 +256,9 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) break; case DISPLAY_BPM_SPECIFIED: if( out.m_fSpecifiedBPMMin == out.m_fSpecifiedBPMMax ) - f.PutLine( ssprintf( "#DISPLAYBPM:%.6f;", out.m_fSpecifiedBPMMin ) ); + f.PutLine( ssprintf( "#DISPLAYBPM:%.3f;", out.m_fSpecifiedBPMMin ) ); else - f.PutLine( ssprintf( "#DISPLAYBPM:%.6f:%.6f;", out.m_fSpecifiedBPMMin, out.m_fSpecifiedBPMMax ) ); + f.PutLine( ssprintf( "#DISPLAYBPM:%.3f:%.3f;", out.m_fSpecifiedBPMMin, out.m_fSpecifiedBPMMax ) ); break; case DISPLAY_BPM_RANDOM: f.PutLine( ssprintf( "#DISPLAYBPM:*;" ) ); @@ -268,7 +268,7 @@ static void WriteGlobalTags( RageFile &f, const Song &out ) WriteTimingTags( f, out.m_SongTiming, true ); if( out.GetSpecifiedLastSecond() > 0 ) - f.PutLine( ssprintf("#LASTSECONDHINT:%.6f;", out.GetSpecifiedLastSecond()) ); + f.PutLine( ssprintf("#LASTSECONDHINT:%.3f;", out.GetSpecifiedLastSecond()) ); FOREACH_BackgroundLayer( b ) { @@ -349,7 +349,7 @@ static RString GetSSCNoteData( const Song &song, const Steps &in, bool bSavingCa // XXX: Is there a better way to write this? if (const_cast(song.m_SongTiming) != in.m_Timing) { - lines.push_back( ssprintf( "#OFFSET:%.6f;", in.m_Timing.m_fBeat0OffsetInSeconds ) ); + lines.push_back( ssprintf( "#OFFSET:%.3f;", in.m_Timing.m_fBeat0OffsetInSeconds ) ); GetTimingTags( lines, in.m_Timing ); } if (song.GetAttackString() != in.GetAttackString()) @@ -365,9 +365,9 @@ static RString GetSSCNoteData( const Song &song, const Steps &in, bool bSavingCa float small = in.GetMinBPM(); float big = in.GetMaxBPM(); if (small == big) - lines.push_back( ssprintf( "#DISPLAYBPM:%.6f;", small ) ); + lines.push_back( ssprintf( "#DISPLAYBPM:%.3f;", small ) ); else - lines.push_back( ssprintf( "#DISPLAYBPM:%.6f:%.6f;", small, big ) ); + lines.push_back( ssprintf( "#DISPLAYBPM:%.3f:%.3f;", small, big ) ); break; } case DISPLAY_BPM_RANDOM: @@ -414,12 +414,12 @@ bool NotesWriterSSC::Write( RString sPath, const Song &out, const vector if( bSavingCache ) { f.PutLine( ssprintf( "// cache tags:" ) ); - f.PutLine( ssprintf( "#FIRSTSECOND:%.6f;", out.GetFirstSecond() ) ); - f.PutLine( ssprintf( "#LASTSECOND:%.6f;", out.GetLastSecond() ) ); + f.PutLine( ssprintf( "#FIRSTSECOND:%.3f;", out.GetFirstSecond() ) ); + f.PutLine( ssprintf( "#LASTSECOND:%.3f;", out.GetLastSecond() ) ); f.PutLine( ssprintf( "#SONGFILENAME:%s;", out.m_sSongFileName.c_str() ) ); f.PutLine( ssprintf( "#HASMUSIC:%i;", out.m_bHasMusic ) ); f.PutLine( ssprintf( "#HASBANNER:%i;", out.m_bHasBanner ) ); - f.PutLine( ssprintf( "#MUSICLENGTH:%.6f;", out.m_fMusicLengthSeconds ) ); + f.PutLine( ssprintf( "#MUSICLENGTH:%.3f;", out.m_fMusicLengthSeconds ) ); f.PutLine( ssprintf( "// end cache tags" ) ); } diff --git a/src/ScreenSelectMusic.cpp b/src/ScreenSelectMusic.cpp index 404f06a882..2e3e3b03b4 100644 --- a/src/ScreenSelectMusic.cpp +++ b/src/ScreenSelectMusic.cpp @@ -501,6 +501,21 @@ void ScreenSelectMusic::Input( const InputEventPlus &input ) return; // ignore // todo: Allow mousewheel to scroll MusicWheel -aj + /* + if( input.DeviceI.device == DEVICE_MOUSE ) + { + if( input.DeviceI.button == MOUSE_WHEELUP ) + { + MESSAGEMAN->Broadcast( "PreviousSong" ); + m_MusicWheel.Move( -1 ); + } + else if( input.DeviceI.button == MOUSE_WHEELDOWN ) + { + MESSAGEMAN->Broadcast( "NextSong" ); + m_MusicWheel.Move( +1 ); + } + } + */ if( USE_PLAYER_SELECT_MENU ) { diff --git a/src/Song.h b/src/Song.h index 9916f6fe77..bf4c2f07e9 100644 --- a/src/Song.h +++ b/src/Song.h @@ -20,7 +20,7 @@ void FixupPath( RString &path, const RString &sSongPath ); RString GetSongAssetPath( RString sPath, const RString &sSongPath ); /** @brief The version of the .ssc file format. */ -const static float STEPFILE_VERSION_NUMBER = 0.78f; +const static float STEPFILE_VERSION_NUMBER = 0.79f; /** @brief How many edits for this song can each profile have? */ const int MAX_EDITS_PER_SONG_PER_PROFILE = 15; diff --git a/src/SongManager.cpp b/src/SongManager.cpp index a3795a8206..5c72e4454d 100644 --- a/src/SongManager.cpp +++ b/src/SongManager.cpp @@ -59,7 +59,6 @@ static Preference g_bHideIncompleteCourses( "HideIncompleteCourses", false RString SONG_GROUP_COLOR_NAME( size_t i ) { return ssprintf( "SongGroupColor%i", (int) i+1 ); } RString COURSE_GROUP_COLOR_NAME( size_t i ) { return ssprintf( "CourseGroupColor%i", (int) i+1 ); } - SongManager::SongManager() { // Register with Lua. @@ -246,10 +245,10 @@ void SongManager::LoadStepManiaSongDir( RString sDir, LoadingWindow *ld ) SortRStringArray( arrayGroupDirs ); StripCvsAndSvn( arrayGroupDirs ); StripMacResourceForks( arrayGroupDirs ); - + vector< vector > arrayGroupSongDirs; int groupIndex, songCount, songIndex; - + groupIndex = 0; songCount = 0; FOREACH_CONST( RString, arrayGroupDirs, s ) // foreach dir in /Songs/ @@ -263,19 +262,19 @@ void SongManager::LoadStepManiaSongDir( RString sDir, LoadingWindow *ld ) StripCvsAndSvn( arraySongDirs ); StripMacResourceForks( arraySongDirs ); SortRStringArray( arraySongDirs ); - + arrayGroupSongDirs.push_back(arraySongDirs); songCount += arraySongDirs.size(); } if( songCount==0 ) return; - + if( ld ) { ld->SetIndeterminate( false ); ld->SetTotalWork( songCount ); } - + groupIndex = 0; songIndex = 0; FOREACH_CONST( RString, arrayGroupDirs, s ) // foreach dir in /Songs/ @@ -573,7 +572,7 @@ RageColor SongManager::GetCourseGroupColor( const RString &sCourseGroup ) const return SONG_GROUP_COLOR.GetValue( iIndex%NUM_SONG_GROUP_COLORS ); iIndex++; } - + ASSERT_M( 0, ssprintf("requested color for course group '%s' that doesn't exist",sCourseGroup.c_str()) ); return RageColor(1,1,1,1); } @@ -585,7 +584,6 @@ RageColor SongManager::GetCourseColor( const Course* pCourse ) const if( pUE && USE_UNLOCK_COLOR.GetValue() ) return UNLOCK_COLOR.GetValue(); - if( USE_PREFERRED_SORT_COLOR ) { FOREACH_CONST( CoursePointerVector, m_vPreferredCourseSort, v ) @@ -627,7 +625,7 @@ void SongManager::ResetGroupColors() const vector &SongManager::GetSongs( const RString &sGroupName ) const { static const vector vEmpty; - + if( sGroupName == GROUP_ALL ) return m_pSongs; map::const_iterator iter = m_mapSongGroupIndex.find( sGroupName ); @@ -780,6 +778,7 @@ void SongManager::InitCoursesFromDisk( LoadingWindow *ld ) vsCourseGroupNames.push_back( SpecialFiles::COURSES_DIR ); SortRStringArray( vsCourseGroupNames ); + int courseIndex = 0; FOREACH_CONST( RString, vsCourseGroupNames, sCourseGroup ) // for each dir in /Courses/ { // Find all CRS files in this group directory @@ -787,10 +786,17 @@ void SongManager::InitCoursesFromDisk( LoadingWindow *ld ) GetDirListing( *sCourseGroup + "/*.crs", vsCoursePaths, false, true ); SortRStringArray( vsCoursePaths ); + if( ld ) + { + ld->SetIndeterminate( false ); + ld->SetTotalWork( vsCoursePaths.size() ); + } + FOREACH_CONST( RString, vsCoursePaths, sCoursePath ) { if( ld ) { + ld->SetProgress(courseIndex); ld->SetText( LOADING_COURSES.GetValue()+ssprintf("\n%s\n%s", Basename(*sCourseGroup).c_str(), Basename(*sCoursePath).c_str())); @@ -806,9 +812,14 @@ void SongManager::InitCoursesFromDisk( LoadingWindow *ld ) } m_pCourses.push_back( pCourse ); + courseIndex++; } } + if( ld ) { + ld->SetIndeterminate( true ); + } + RefreshCourseGroupInfo(); } @@ -880,7 +891,7 @@ void SongManager::InitAutogenCourses() } aSongs.clear(); - + if( i < apSongs.size() ) { sCurArtist = sArtist; diff --git a/src/arch/LowLevelWindow/LowLevelWindow_X11.cpp b/src/arch/LowLevelWindow/LowLevelWindow_X11.cpp index b1b2f523a4..4986db4a4e 100644 --- a/src/arch/LowLevelWindow/LowLevelWindow_X11.cpp +++ b/src/arch/LowLevelWindow/LowLevelWindow_X11.cpp @@ -44,7 +44,6 @@ LowLevelWindow_X11::LowLevelWindow_X11() int iRevision = iXServerVersion / 1000; iXServerVersion %= 1000; int iPatch = iXServerVersion; - LOG->Info( "Display: %s (screen %i)", DisplayString(Dpy), iScreen ); LOG->Info( "X server vendor: %s [%i.%i.%i.%i]", XServerVendor( Dpy ), iMajor, iMinor, iRevision, iPatch ); LOG->Info( "Server GLX vendor: %s [%s]", glXQueryServerString( Dpy, iScreen, GLX_VENDOR ), glXQueryServerString( Dpy, iScreen, GLX_VERSION ) ); @@ -86,8 +85,8 @@ LowLevelWindow_X11::~LowLevelWindow_X11() void *LowLevelWindow_X11::GetProcAddress( RString s ) { // XXX: We should check whether glXGetProcAddress or - // glXGetProcAddressARB is available, and go by that, instead of - // assuming like this. + // glXGetProcAddressARB is available/not NULL, and go by that, + // instead of assuming like this. return (void*) glXGetProcAddressARB( (const GLubyte*) s.c_str() ); } @@ -95,11 +94,9 @@ RString LowLevelWindow_X11::TryVideoMode( const VideoModeParams &p, bool &bNewDe { #if defined(UNIX) /* nVidia cards: - * * This only works the first time we set up a window; after that, the * drivers appear to cache the value, so you have to actually restart - * the program to change it again. - */ + * the program to change it again. */ static char buf[128]; strcpy( buf, "__GL_SYNC_TO_VBLANK=" ); strcat( buf, p.vsync?"1":"0" ); @@ -173,7 +170,6 @@ RString LowLevelWindow_X11::TryVideoMode( const VideoModeParams &p, bool &bNewDe break; } XSelectInput( Dpy, Win, winAttrib.your_event_mask ); - } else { @@ -243,9 +239,11 @@ RString LowLevelWindow_X11::TryVideoMode( const VideoModeParams &p, bool &bNewDe XSetWMNormalHints( Dpy, Win, &hints ); } - // Workaround for metacity and compiz, if the window have the same resolution or higher than the screen - // it gets automaximized even when the window is set to don't let do it. - // This happens changing from fullscreen to window mode and our screen resolution is bigger. + /* Workaround for metacity and compiz: if the window have the same + * resolution or higher than the screen, it gets automaximized even + * when the window is set to not let it happen. This happens when + * changing from fullscreen to window mode and our screen resolution + * is bigger. */ { XEvent xev; Atom wm_state = XInternAtom(Dpy, "_NET_WM_STATE", False); @@ -392,8 +390,8 @@ RenderTarget_X11::~RenderTarget_X11() glDeleteTextures( 1, reinterpret_cast(&m_iTexHandle) ); } -/* Note that although the texture size may need to be a power of 2, the Pbuffer - * does not. */ +/* Note that although the texture size may need to be a power of 2, + * the Pbuffer does not. */ void RenderTarget_X11::Create( const RenderTargetParam ¶m, int &iTextureWidthOut, int &iTextureHeightOut ) { //ASSERT( param.iWidth == power_of_two(param.iWidth) && param.iHeight == power_of_two(param.iHeight) ); @@ -410,7 +408,7 @@ void RenderTarget_X11::Create( const RenderTargetParam ¶m, int &iTextureWidt GLX_GREEN_SIZE, 8, GLX_BLUE_SIZE, 8, GLX_ALPHA_SIZE, param.bWithAlpha? 8:GLX_DONT_CARE, - + GLX_DOUBLEBUFFER, False, GLX_DEPTH_SIZE, param.bWithDepthBuffer? 16:GLX_DONT_CARE, None @@ -515,9 +513,9 @@ RenderTarget *LowLevelWindow_X11::CreateRenderTarget() void LowLevelWindow_X11::BeginConcurrentRenderingMainThread() { - /* Move the main thread, which is going to be loading textures, etc. but - * not rendering, to an undisplayed window. This results in smoother - * rendering. */ + /* Move the main thread, which is going to be loading textures, etc. + * but not rendering, to an undisplayed window. This results in + * smoother rendering. */ bool b = glXMakeCurrent( Dpy, g_AltWindow, g_pContext ); ASSERT(b); } diff --git a/src/arch/Threads/Threads.h b/src/arch/Threads/Threads.h index 9318c4479c..734940732f 100644 --- a/src/arch/Threads/Threads.h +++ b/src/arch/Threads/Threads.h @@ -12,9 +12,10 @@ public: virtual void Halt( bool Kill ) = 0; virtual void Resume() = 0; - /* Get the identifier for this thread. The actual meaning of this is implementation- - * defined, except that each thread has exactly one ID and each ID corresponds to - * one thread. (This means that Win32 thread handles are not acceptable as ThreadIds.) */ + /* Get the identifier for this thread. The actual meaning of this is + * implementation-defined, except that each thread has exactly one ID + * and each ID corresponds to one thread. (This means that Win32 + * thread handles are not acceptable as ThreadIds.) */ virtual uint64_t GetThreadId() const = 0; virtual int Wait() = 0; @@ -28,19 +29,20 @@ public: MutexImpl( RageMutex *pParent ): m_Parent(pParent) {} virtual ~MutexImpl() { } - /* Lock the mutex. If mutex timeouts are implemented, and the mutex times out, - * return false and do not lock the mutex. No other failure return is allowed; - * all other errors should fail with an assertion. */ + /* Lock the mutex. If mutex timeouts are implemented, and the mutex + * times out, return false and do not lock the mutex. No other failure + * return is allowed; all other errors should fail with an assertion. */ virtual bool Lock() = 0; - /* Non-blocking lock. If locking the mutex would block because the mutex is already - * locked by another thread, return false; otherwise return true and lock the mutex. */ + /* Non-blocking lock. If locking the mutex would block because the mutex + * is already locked by another thread, return false; otherwise + * return true and lock the mutex. */ virtual bool TryLock() = 0; - /* Unlock the mutex. This must only be called when the mutex is locked; implementations - * may fail with an assertion if the mutex is not locked. */ + /* Unlock the mutex. This must only be called when the mutex is locked; + * implementations may fail with an assertion if the mutex is not locked. */ virtual void Unlock() = 0; - + private: MutexImpl(const MutexImpl& rhs); MutexImpl& operator=(const MutexImpl& rhs); @@ -74,8 +76,8 @@ EventImpl *MakeEvent( MutexImpl *pMutex ); SemaImpl *MakeSemaphore( int iInitialValue ); uint64_t GetThisThreadId(); -/* Since ThreadId is implementation-defined, we can't define a universal invalid - * value. Return the invalid value for this implementation. */ +/* Since ThreadId is implementation-defined, we can't define a universal + * invalid value. Return the invalid value for this implementation. */ uint64_t GetInvalidThreadId(); #endif diff --git a/src/arch/Threads/Threads_Pthreads.cpp b/src/arch/Threads/Threads_Pthreads.cpp index a17004c922..44c076aa59 100644 --- a/src/arch/Threads/Threads_Pthreads.cpp +++ b/src/arch/Threads/Threads_Pthreads.cpp @@ -17,19 +17,17 @@ void ThreadImpl_Pthreads::Halt( bool Kill ) { /* Linux: - * Send a SIGSTOP to the thread. If we send a SIGKILL, pthreads will + * Send a SIGSTOP to the thread. If we send a SIGKILL, pthreads will * "helpfully" propagate it to the other threads, and we'll get killed, too. - * * This isn't ideal, since it can cause the process to background as far as * the shell is concerned, so the shell prompt can display before the crash - * handler actually displays a message. - */ + * handler actually displays a message. */ SuspendThread( threadHandle ); } void ThreadImpl_Pthreads::Resume() { - /* Linux: Send a SIGCONT to the thread. */ + // Linux: Send a SIGCONT to the thread. ResumeThread( threadHandle ); } @@ -65,12 +63,12 @@ static void *StartThread( void *pData ) pThis->threadHandle = GetCurrentThreadId(); *pThis->m_piThreadID = pThis->threadHandle; - - /* Tell MakeThread that we've set m_piThreadID, so it's safe to return. */ + + // Tell MakeThread that we've set m_piThreadID, so it's safe to return. pThis->m_StartFinishedSem->Post(); int iRet = pThis->m_pFunc( pThis->m_pData ); - + return new int(iRet); } @@ -86,10 +84,10 @@ ThreadImpl *MakeThread( int (*pFunc)(void *pData), void *pData, uint64_t *piThre int ret = pthread_create( &thread->thread, NULL, StartThread, thread ); ASSERT_M( ret == 0, ssprintf( "MakeThread: pthread_create: %s", strerror(errno)) ); - /* Don't return until StartThread sets m_piThreadID. */ + // Don't return until StartThread sets m_piThreadID. thread->m_StartFinishedSem->Wait(); delete thread->m_StartFinishedSem; - + return thread; } @@ -105,12 +103,11 @@ MutexImpl_Pthreads::~MutexImpl_Pthreads() ASSERT_M( ret == 0, ssprintf("Error deleting mutex: %s", strerror(errno)) ); } - #if defined(HAVE_PTHREAD_MUTEX_TIMEDLOCK) || defined(HAVE_PTHREAD_COND_TIMEDWAIT) static bool UseTimedlock() { #if defined(LINUX) - /* Valgrind crashes and burns on pthread_mutex_timedlock. */ + // Valgrind crashes and burns on pthread_mutex_timedlock. if( RunningUnderValgrind() ) return false; #endif @@ -124,12 +121,12 @@ bool MutexImpl_Pthreads::Lock() #if defined(HAVE_PTHREAD_MUTEX_TIMEDLOCK) if( UseTimedlock() ) { - int len = 10; /* seconds */ + int len = 10; // seconds int tries = 2; while( tries-- ) { - /* Wait for ten seconds. If it takes longer than that, we're + /* Wait for ten seconds. If it takes longer than that, we're * probably deadlocked. */ timeval tv; gettimeofday( &tv, NULL ); @@ -149,9 +146,9 @@ bool MutexImpl_Pthreads::Lock() continue; case ETIMEDOUT: - /* Timed out. Probably deadlocked. Try again one more time, with a smaller - * timeout, just in case we're debugging and happened to stop while waiting - * on the mutex. */ + /* Timed out. Probably deadlocked. Try again one more time, + * with a smaller timeout, just in case we're debugging + * and happened to stop while waiting on the mutex. */ len = 1; break; @@ -205,8 +202,8 @@ MutexImpl *MakeMutex( RageMutex *pParent ) return new MutexImpl_Pthreads( pParent ); } -/* Check if condattr_setclock is supported, and supports the clock that RageTimer - * selected. */ +/* Check if condattr_setclock is supported, and supports the clock that + * RageTimer selected. */ #if defined(UNIX) #include #include "arch/ArchHooks/ArchHooks_Unix.h" @@ -247,7 +244,7 @@ namespace break; } - /* Make sure that we can set up the clock attribute. */ + // Make sure that we can set up the clock attribute. pthread_condattr_t condattr; pthread_condattr_init( &condattr ); @@ -314,21 +311,21 @@ bool EventImpl_Pthreads::Wait( RageTimer *pTimeout ) return true; } - /* If the clock is not CLOCK_MONOTONIC, or we can't change the wait clock (no - * condattr_setclock), pthread_cond_timedwait has an inherent race condition: - * the system clock may change before we call it. */ + /* If the clock is not CLOCK_MONOTONIC, or we can't change the wait clock + * (no condattr_setclock), pthread_cond_timedwait has an inherent race + * condition: the system clock may change before we call it. */ timespec abstime; if( g_CondattrSetclock != NULL || GetClock() == CLOCK_REALTIME ) { - /* If we support condattr_setclock, we'll set the condition to use the same - * clock as RageTimer and can use it directly. If the clock is CLOCK_REALTIME, - * that's the default anyway. */ + /* If we support condattr_setclock, we'll set the condition to use + * the same clock as RageTimer and can use it directly. If the + * clock is CLOCK_REALTIME, that's the default anyway. */ abstime.tv_sec = pTimeout->m_secs; abstime.tv_nsec = pTimeout->m_us * 1000; } else { - /* The RageTimer clock is different than the wait clock; convert it. */ + // The RageTimer clock is different than the wait clock; convert it. timeval tv; gettimeofday( &tv, NULL ); @@ -427,7 +424,7 @@ bool SemaImpl_Pthreads::TryWait() return true; } #else -/* Use conditions, to work around OS X "forgetting" to implement semaphores. */ +// Use conditions, to work around OS X "forgetting" to implement semaphores. SemaImpl_Pthreads::SemaImpl_Pthreads( int iInitialValue ) { int ret = pthread_cond_init( &m_Cond, NULL ); @@ -480,9 +477,9 @@ bool SemaImpl_Pthreads::Wait() break; case ETIMEDOUT: - /* Timed out. Probably deadlocked. Try again one more time, with a smaller - * timeout, just in case we're debugging and happened to stop while waiting - * on the mutex. */ + /* Timed out. Probably deadlocked. Try again one more time, + * with a smaller timeout, just in case we're debugging and + * happened to stop while waiting on the mutex. */ ++ts.tv_sec; tries--; break; @@ -525,7 +522,7 @@ bool SemaImpl_Pthreads::TryWait() pthread_mutex_unlock( &m_Mutex); return false; } - + --m_iValue; pthread_mutex_unlock( &m_Mutex); diff --git a/src/arch/Threads/Threads_Pthreads.h b/src/arch/Threads/Threads_Pthreads.h index 38dcfe9714..5a3969399f 100644 --- a/src/arch/Threads/Threads_Pthreads.h +++ b/src/arch/Threads/Threads_Pthreads.h @@ -12,13 +12,12 @@ public: pthread_t thread; /* Linux: - * Keep a list of child PIDs, so we can send them SIGKILL. This has an - * added bonus: if this is corrupted, we'll just send signals and they'll - * fail; we won't blow up (unless we're root). - */ + * Keep a list of child PIDs, so we can send them SIGKILL. This has + * an added bonus: if this is corrupted, we'll just send signals and + * they'll fail; we won't blow up (unless we're root). */ uint64_t threadHandle; - /* These are only used during initialization. */ + // These are only used during initialization. int (*m_pFunc)( void *pData ); void *m_pData; uint64_t *m_piThreadID; diff --git a/src/arch/Threads/Threads_Win32.cpp b/src/arch/Threads/Threads_Win32.cpp index 3fd4a72795..acb13c1c8f 100644 --- a/src/arch/Threads/Threads_Win32.cpp +++ b/src/arch/Threads/Threads_Win32.cpp @@ -219,9 +219,9 @@ bool MutexImpl_Win32::Lock() if( SimpleWaitForSingleObject( mutex, len ) ) return true; - /* Timed out; probably deadlocked. Try a couple more times, with a smaller - * timeout, just in case we're debugging and happened to stop while waiting - * on the mutex. */ + /* Timed out; probably deadlocked. Try a couple more times, with + * a smaller timeout, just in case we're debugging and happened + * to stop while waiting on the mutex. */ len = 1000; } @@ -238,8 +238,8 @@ void MutexImpl_Win32::Unlock() { const bool ret = !!ReleaseMutex( mutex ); - /* We can't ASSERT here, since this is called from checkpoints, which is - * called from ASSERT. */ + /* We can't ASSERT here, since this is called from checkpoints, + * which is called from ASSERT. */ if( !ret ) sm_crash( werr_ssprintf( GetLastError(), "ReleaseMutex failed" ) ); } @@ -278,10 +278,11 @@ EventImpl_Win32::~EventImpl_Win32() CloseHandle( m_WaitersDone ); } -/* SignalObjectAndWait is atomic, which leads to more fair event handling. However, - * we don't guarantee or depend upon fair events, and SignalObjectAndWait is only - * available in NT. I also can't find a single function to signal an object like - * SignalObjectAndWait, so we need to know if the object is a mutex or an event. */ +/* SignalObjectAndWait is atomic, which leads to more fair event handling. + * However, we don't guarantee or depend upon fair events, and + * SignalObjectAndWait is only available in NT. I also can't find a single + * function to signal an object like SignalObjectAndWait, so we need to + * know if the object is a mutex or an event. */ static bool PortableSignalObjectAndWait( HANDLE hObjectToSignal, HANDLE hObjectToWaitOn, bool bFirstParamIsMutex, unsigned iMilliseconds = INFINITE ) { static bool bSignalObjectAndWaitUnavailable = false; @@ -364,8 +365,9 @@ bool EventImpl_Win32::Wait( RageTimer *pTimeout ) EnterCriticalSection( &m_iNumWaitingLock ); if( !bSuccess ) { - /* Avoid a race condition: someone may have signalled the object between PortableSignalObjectAndWait - * and EnterCriticalSection. While we hold m_iNumWaitingLock, poll (with a zero timeout) the + /* Avoid a race condition: someone may have signalled the object + * between PortableSignalObjectAndWait and EnterCriticalSection. + * While we hold m_iNumWaitingLock, poll (with a zero timeout) the * object one last time. */ if( WaitForSingleObject( m_WakeupSema, 0 ) == WAIT_OBJECT_0 ) bSuccess = true; @@ -374,8 +376,8 @@ bool EventImpl_Win32::Wait( RageTimer *pTimeout ) bool bLastWaiting = m_iNumWaiting == 0; LeaveCriticalSection( &m_iNumWaitingLock ); - /* If we're the last waiter to wake up, and we were actually woken by another - * thread (not by timeout), wake up the signaller. */ + /* If we're the last waiter to wake up, and we were actually woken by + * another thread (not by timeout), wake up the signaller. */ if( bLastWaiting && bSuccess ) PortableSignalObjectAndWait( m_WaitersDone, m_pParent->mutex, false ); else @@ -416,8 +418,8 @@ void EventImpl_Win32::Broadcast() LeaveCriticalSection( &m_iNumWaitingLock ); - /* The last waiter will touch m_WaitersDone, so we wait for all waiters to - * wake up and start waiting for the mutex before returning. */ + /* The last waiter will touch m_WaitersDone, so we wait for all waiters + * to wake up and start waiting for the mutex before returning. */ WaitForSingleObject( m_WaitersDone, INFINITE ); } @@ -452,7 +454,7 @@ bool SemaImpl_Win32::Wait() while( tries-- ) { - /* Wait for 15 seconds. If it takes longer than that, we're + /* Wait for 15 seconds. If it takes longer than that, we're * probably deadlocked. */ if( SimpleWaitForSingleObject( sem, len ) ) { @@ -460,9 +462,9 @@ bool SemaImpl_Win32::Wait() return true; } - /* Timed out; probably deadlocked. Try again a few more times, with a smaller - * timeout, just in case we're debugging and happened to stop while waiting - * on the mutex. */ + /* Timed out; probably deadlocked. Try again a few more times, + * with a smaller timeout, just in case we're debugging and + * happened to stop while waiting on the mutex. */ len = 1000; } diff --git a/src/archutils/Win32/WindowsResources.rc b/src/archutils/Win32/WindowsResources.rc index 9f6be062d6..a214592b7c 100644 --- a/src/archutils/Win32/WindowsResources.rc +++ b/src/archutils/Win32/WindowsResources.rc @@ -43,16 +43,15 @@ BEGIN CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,0,34,332,1 END -IDD_LOADING_DIALOG DIALOGEX 0, 0, 317, 94 -STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_MINIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +IDD_LOADING_DIALOG DIALOGEX 0, 0, 320, 94 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE EXSTYLE WS_EX_APPWINDOW -CAPTION "Stepmania" FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN CTEXT "line1",IDC_STATIC_MESSAGE1,7,43,303,10,SS_NOPREFIX | SS_CENTERIMAGE CTEXT "line2",IDC_STATIC_MESSAGE2,7,52,303,10,SS_NOPREFIX | SS_CENTERIMAGE CTEXT "line3",IDC_STATIC_MESSAGE3,7,61,303,10,SS_NOPREFIX | SS_CENTERIMAGE - CONTROL "",IDC_SPLASH,"Static",SS_BITMAP,0,0,310,25 + CONTROL "",IDC_SPLASH,"Static",SS_BITMAP,0,0,316,25 CONTROL "",IDC_PROGRESS,"msctls_progress32",0x0,7,73,303,14 END