diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini
index a9a1be3c3d..920201240c 100644
--- a/stepmania/Themes/default/metrics.ini
+++ b/stepmania/Themes/default/metrics.ini
@@ -3788,7 +3788,7 @@ PrevScreen=ScreenTitleMenu
# when using entries that change the screen; otherwise, the only way to
# exit the screen when in arcade mode is "exit".
-LineNames=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
+LineNames=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
OptionMenuFlags=together;forceallplayers;smnavigation
# This NextScreen is only used for the "exit" choice.
Line1=list,Appearance Options
@@ -3797,15 +3797,16 @@ Line3=list,Bookkeeping
Line4=list,Center Image
Line5=list,Coin Options
Line6=list,Config Key/Joy Mappings
-Line7=list,Input Options
-Line8=list,Gameplay Options
-Line9=list,Graphic Options
-Line10=list,Machine Options
-Line11=list,Sound Options
-Line12=list,Profile Options
-Line13=list,Other Options
-Line14=list,Reload Songs/Courses
-Line15=list,Test Input
+Line7=list,Download Machine Stats
+Line8=list,Input Options
+Line9=list,Gameplay Options
+Line10=list,Graphic Options
+Line11=list,Machine Options
+Line12=list,Sound Options
+Line13=list,Profile Options
+Line14=list,Other Options
+Line15=list,Reload Songs/Courses
+Line16=list,Test Input
[TextBanner]
TitleX=-90
@@ -4243,6 +4244,9 @@ Coin Options,1=screen,ScreenCoinOptions;name,CoinOptions
Config Key/Joy Mappings=1,together
Config Key/Joy MappingsDefault=
Config Key/Joy Mappings,1=screen,ScreenMapControllers;name,KeyJoyMappings
+Download Machine Stats=1,together
+Download Machine StatsDefault=
+Download Machine Stats,1=screen,ScreenDownloadMachineStats;name,DownloadMachineStats
Input Options=1,together
Input OptionsDefault=
Input Options,1=screen,ScreenInputOptions;name,InputOptions
@@ -4314,5 +4318,7 @@ Failed=E
[HighScore]
EmptyName=STEP
+[ScreenDownloadMachineStats]
+NextScreen=ScreenOptionsMenu
diff --git a/stepmania/src/Makefile.am b/stepmania/src/Makefile.am
index c87c464817..543627e327 100644
--- a/stepmania/src/Makefile.am
+++ b/stepmania/src/Makefile.am
@@ -37,7 +37,7 @@ $(srcdir)/libresample/libresample.a:
Screens = \
Screen.cpp Screen.h ScreenAttract.cpp ScreenAttract.h ScreenAward.cpp ScreenAward.h ScreenBookkeeping.h ScreenBookkeeping.cpp \
ScreenBranch.cpp ScreenBranch.h ScreenCaution.cpp ScreenCaution.h ScreencenterImage.h ScreenCenterImage.cpp ScreenCredits.cpp ScreenCredits.h ScreenDemonstration.cpp ScreenDemonstration.h \
-ScreenDimensions.h ScreenEdit.cpp ScreenEdit.h ScreenEditCoursesMenu.cpp ScreenEditCoursesMenu.h \
+ScreenDimensions.h ScreenDownloadMachineStats.cpp ScreenDownloadMachineStats.h ScreenEdit.cpp ScreenEdit.h ScreenEditCoursesMenu.cpp ScreenEditCoursesMenu.h \
ScreenEditMenu.cpp ScreenEditMenu.h ScreenEnding.cpp ScreenEnding.h ScreenEndlessBreak.cpp ScreenEndlessBreak.h ScreenEvaluation.cpp ScreenEvaluation.h \
ScreenExit.cpp ScreenExit.h ScreenEz2SelectMusic.cpp ScreenEz2SelectMusic.h ScreenEz2SelectPlayer.cpp ScreenEz2SelectPlayer.h \
ScreenGameOver.cpp ScreenGameOver.h ScreenGameplay.cpp ScreenGameplay.h \
diff --git a/stepmania/src/Screen.cpp b/stepmania/src/Screen.cpp
index f25d081cf3..d23e34d2e8 100644
--- a/stepmania/src/Screen.cpp
+++ b/stepmania/src/Screen.cpp
@@ -292,6 +292,7 @@ void Screen::ClearMessageQueue( const ScreenMessage SM )
#include "ScreenBranch.h"
#include "ScreenEnding.h"
#include "ScreenAward.h"
+#include "ScreenDownloadMachineStats.h"
Screen* Screen::Create( CString sClassName )
{
@@ -355,6 +356,7 @@ Screen* Screen::Create( CString sClassName )
IF_RETURN( ScreenBranch );
IF_RETURN( ScreenEnding );
IF_RETURN( ScreenAward );
+ IF_RETURN( ScreenDownloadMachineStats );
RageException::Throw( "Invalid Screen class name '%s'", sClassName.c_str() );
}
diff --git a/stepmania/src/ScreenDownloadMachineStats.cpp b/stepmania/src/ScreenDownloadMachineStats.cpp
new file mode 100644
index 0000000000..436cf6af16
--- /dev/null
+++ b/stepmania/src/ScreenDownloadMachineStats.cpp
@@ -0,0 +1,34 @@
+#include "global.h"
+
+#include "ScreenDownloadMachineStats.h"
+#include "ProfileManager.h"
+#include "ScreenManager.h"
+#include "MemoryCardManager.h"
+#include "ThemeManager.h"
+
+#define NEXT_SCREEN THEME->GetMetric(m_sName,"NextScreen")
+
+static void SaveMachineStatsToFirstMemCard()
+{
+ FOREACH_PlayerNumber( pn )
+ {
+ if( MEMCARDMAN->GetCardState(pn) != MEMORY_CARD_STATE_READY )
+ continue; // skip
+
+ CString sDir = MEM_CARD_MOUNT_POINT[pn];
+ sDir += "MachineProfile/";
+ PROFILEMAN->GetMachineProfile()->SaveAllToDir( sDir );
+ SCREENMAN->SystemMessage( ssprintf("Machine stats saved to P%d card.",pn+1) );
+ return;
+ }
+
+ SCREENMAN->SystemMessage( "Stats not saved - No memory cards ready." );
+}
+
+ScreenDownloadMachineStats::ScreenDownloadMachineStats( CString sName ): Screen( sName )
+{
+ SaveMachineStatsToFirstMemCard();
+
+ SCREENMAN->SetNewScreen( NEXT_SCREEN );
+}
+
diff --git a/stepmania/src/ScreenDownloadMachineStats.h b/stepmania/src/ScreenDownloadMachineStats.h
new file mode 100644
index 0000000000..6ef6998b3a
--- /dev/null
+++ b/stepmania/src/ScreenDownloadMachineStats.h
@@ -0,0 +1,14 @@
+#ifndef ScreenDownloadMachineStats_H
+#define ScreenDownloadMachineStats_H
+
+#include "Screen.h"
+#include "RageTimer.h"
+
+class ScreenDownloadMachineStats: public Screen
+{
+public:
+ ScreenDownloadMachineStats( CString sName );
+};
+
+
+#endif
diff --git a/stepmania/src/StepMania.dsp b/stepmania/src/StepMania.dsp
index 34ed38ff8d..4e1bccade9 100644
--- a/stepmania/src/StepMania.dsp
+++ b/stepmania/src/StepMania.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="StepMania" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# Microsoft Developer Studio Generated Build File, Format Version 60000
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Application" 0x0101
@@ -62,10 +62,10 @@ LINK32=link.exe
# SUBTRACT LINK32 /verbose /profile /pdb:none /incremental:no /nodefaultlib
# Begin Special Build Tool
IntDir=.\../Debug6
-TargetDir=\projects\stepmania\stepmania\Program
+TargetDir=\stepmania\stepmania\Program
TargetName=StepMania-debug
SOURCE="$(InputPath)"
-PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
+PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi
# End Special Build Tool
@@ -82,23 +82,27 @@ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania
# PROP Intermediate_Dir "../Debug_Xbox"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-XBCP=xbecopy.exe
-# ADD BASE XBCP /NOLOGO
-# ADD XBCP /NOLOGO
-XBE=imagebld.exe
-# ADD BASE XBE /nologo /stack:0x10000 /debug
-# ADD XBE /nologo /stack:0x10000 /debug /out:"../default.xbe"
+CPP=cl.exe
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_XBOX" /D "_DEBUG" /YX /FD /G6 /Ztmp /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /I "vorbis" /D "WIN32" /D "_DEBUG" /D "_XBOX" /D "OGG_ONLY" /D "DEBUG" /FR /YX"global.h" /FD /G6 /Ztmp /c
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /incremental:no /debug /machine:I386 /subsystem:xbox /fixed:no /TMP
# ADD LINK32 $(intdir)\verstub.obj xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /map /debug /machine:I386 /nodefaultlib:"libcd" /nodefaultlib:"libcmt" /out:"../StepManiaXbox-debug.exe" /subsystem:xbox /fixed:no /TMP
# SUBTRACT LINK32 /incremental:no
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-CPP=cl.exe
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_XBOX" /D "_DEBUG" /YX /FD /G6 /Ztmp /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /I "vorbis" /D "WIN32" /D "_DEBUG" /D "_XBOX" /D "OGG_ONLY" /D "DEBUG" /FR /YX"global.h" /FD /G6 /Ztmp /c
+XBE=imagebld.exe
+# ADD BASE XBE /nologo /stack:0x10000 /debug
+# ADD XBE /nologo /stack:0x10000 /debug /out:"../default.xbe"
+XBCP=xbecopy.exe
+# ADD BASE XBCP /NOLOGO
+# ADD XBCP /NOLOGO
# Begin Special Build Tool
+IntDir=.\../Debug_Xbox
+TargetDir=\stepmania\stepmania
+TargetName=default
+SOURCE="$(InputPath)"
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi
# End Special Build Tool
@@ -135,10 +139,10 @@ LINK32=link.exe
# SUBTRACT LINK32 /verbose /pdb:none /debug
# Begin Special Build Tool
IntDir=.\../Release6
-TargetDir=\projects\stepmania\stepmania\Program
+TargetDir=\stepmania\stepmania\Program
TargetName=StepMania
SOURCE="$(InputPath)"
-PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
+PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi
# End Special Build Tool
@@ -156,24 +160,28 @@ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania
# PROP Intermediate_Dir "../Release_Xbox"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-XBCP=xbecopy.exe
-# ADD BASE XBCP /NOLOGO
-# ADD XBCP /NOLOGO
-XBE=imagebld.exe
-# ADD BASE XBE /nologo /stack:0x10000 /debug
-# ADD XBE /nologo /testid:"123456" /stack:0x10000 /debug /out:"../default.xbe"
+CPP=cl.exe
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /D "WIN32" /D "_XBOX" /D "_DEBUG" /Fr /YX"global.h" /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /I "vorbis" /D "WIN32" /D "NDEBUG" /D "_XBOX" /FR /YX /FD /c
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 $(intdir)\verstub.obj xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /pdb:"../debug6/StepMania-debug.pdb" /map /debug /machine:IX86 /nodefaultlib:"libcmtd.lib" /out:"../StepMania-debug.exe"
# SUBTRACT BASE LINK32 /verbose /profile /pdb:none /incremental:no /nodefaultlib
# ADD LINK32 $(intdir)\verstub.obj xapilib.lib d3d8.lib d3dx8.lib xgraphics.lib dsound.lib dmusic.lib xnet.lib xboxkrnl.lib libcmt.lib /nologo /incremental:no /map /machine:I386 /nodefaultlib:"libc" /nodefaultlib:"libcmtd" /out:"../StepManiaXbox.exe" /subsystem:xbox /fixed:no /TMP /OPT:REF
# SUBTRACT LINK32 /pdb:none /debug
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-CPP=cl.exe
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /D "WIN32" /D "_XBOX" /D "_DEBUG" /Fr /YX"global.h" /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /I "vorbis" /D "WIN32" /D "NDEBUG" /D "_XBOX" /FR /YX /FD /c
+XBE=imagebld.exe
+# ADD BASE XBE /nologo /stack:0x10000 /debug
+# ADD XBE /nologo /testid:"123456" /stack:0x10000 /debug /out:"../default.xbe"
+XBCP=xbecopy.exe
+# ADD BASE XBCP /NOLOGO
+# ADD XBCP /NOLOGO
# Begin Special Build Tool
+IntDir=.\../Release_Xbox
+TargetDir=\stepmania\stepmania
+TargetName=default
+SOURCE="$(InputPath)"
PreLink_Cmds=disasm\verinc cl /Zl /nologo /c PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi
# End Special Build Tool
@@ -4850,6 +4858,25 @@ SOURCE=.\ScreenDemonstration.h
# End Source File
# Begin Source File
+SOURCE=.\ScreenDownloadMachineStats.cpp
+
+!IF "$(CFG)" == "StepMania - Win32 Debug"
+
+!ELSEIF "$(CFG)" == "StepMania - Xbox Debug"
+
+!ELSEIF "$(CFG)" == "StepMania - Win32 Release"
+
+!ELSEIF "$(CFG)" == "StepMania - Xbox Release"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\ScreenDownloadMachineStats.h
+# End Source File
+# Begin Source File
+
SOURCE=.\ScreenEdit.cpp
!IF "$(CFG)" == "StepMania - Win32 Debug"
diff --git a/stepmania/src/StepMania.vcproj b/stepmania/src/StepMania.vcproj
index 6f4199aa3b..1c711ad965 100644
--- a/stepmania/src/StepMania.vcproj
+++ b/stepmania/src/StepMania.vcproj
@@ -220,6 +220,12 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
+
+
+
+