From d0a6176e13b857b8e463bc5be1d6204b1b24a85a Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Fri, 19 Dec 2003 04:52:07 +0000 Subject: [PATCH] better memory card assignment logic, add memory card icons, more memory card sounds --- .../Graphics/MemoryCardDisplay error p1.png | Bin 0 -> 1339 bytes .../Graphics/MemoryCardDisplay error p2.png | Bin 0 -> 1409 bytes .../Graphics/MemoryCardDisplay late p1.png | Bin 0 -> 1805 bytes .../Graphics/MemoryCardDisplay late p2.png | Bin 0 -> 1863 bytes .../Graphics/MemoryCardDisplay none p1.png | Bin 0 -> 357 bytes .../Graphics/MemoryCardDisplay none p2.png | Bin 0 -> 357 bytes .../Graphics/MemoryCardDisplay ready p1.png | Bin 0 -> 696 bytes .../Graphics/MemoryCardDisplay ready p2.png | Bin 0 -> 766 bytes .../Sounds/MemoryCardManager ready.ogg | Bin 0 -> 4845 bytes stepmania/Themes/default/metrics.ini | 73 +++++++- stepmania/src/GameConstantsAndTypes.cpp | 13 ++ stepmania/src/GameConstantsAndTypes.h | 12 ++ stepmania/src/GameState.cpp | 2 + stepmania/src/Makefile.am | 2 +- stepmania/src/MemoryCardManager.cpp | 170 +++++++++--------- stepmania/src/MemoryCardManager.h | 11 +- stepmania/src/MenuElements.cpp | 22 +++ stepmania/src/MenuElements.h | 2 + stepmania/src/ModeChoice.cpp | 2 + stepmania/src/StepMania.dsp | 91 ++++++---- stepmania/src/StepMania.vcproj | 6 + .../src/arch/MemoryCard/MemoryCardDriver.h | 2 + .../MemoryCard/MemoryCardDriver_Windows.cpp | 11 +- 23 files changed, 288 insertions(+), 131 deletions(-) create mode 100644 stepmania/Themes/default/Graphics/MemoryCardDisplay error p1.png create mode 100644 stepmania/Themes/default/Graphics/MemoryCardDisplay error p2.png create mode 100644 stepmania/Themes/default/Graphics/MemoryCardDisplay late p1.png create mode 100644 stepmania/Themes/default/Graphics/MemoryCardDisplay late p2.png create mode 100644 stepmania/Themes/default/Graphics/MemoryCardDisplay none p1.png create mode 100644 stepmania/Themes/default/Graphics/MemoryCardDisplay none p2.png create mode 100644 stepmania/Themes/default/Graphics/MemoryCardDisplay ready p1.png create mode 100644 stepmania/Themes/default/Graphics/MemoryCardDisplay ready p2.png create mode 100644 stepmania/Themes/default/Sounds/MemoryCardManager ready.ogg diff --git a/stepmania/Themes/default/Graphics/MemoryCardDisplay error p1.png b/stepmania/Themes/default/Graphics/MemoryCardDisplay error p1.png new file mode 100644 index 0000000000000000000000000000000000000000..7f6b5d1bcee0b6fd29bb15ce1e724d169ac90eb0 GIT binary patch literal 1339 zcmV-B1;qM^P)f#5oMaI>_<>0fek@2M&X=VQZ+K z-!-NP2XM}W8!=&~)0jEp~ti9dh=Kz|e@Z-mi8yp-Q3;+Ryo=g?o)YNV&{r=4cWG^Pi#abdFU&MKMzD(b- z!xPB801!a%ATm@^0#SG8KX{;I0A$4S@iC}oWH5Lml|%Tz=g*%R>a(&Kif`Otumkcv z#l&9BKXAYiAb{Yd>HKx;KsY!OXyFHt^FMuJxIJSA!&ao?0-xcPiHQu2K*Rlj{1dFK z3=&F8_Y@Qq9smRoJUN{|e;$lM$<10s&j%4=(zfxTYhX x1v00B_y7S!^Hv2w05LJp7ytwi%`E^3FaV!2+LT|?3TyxX002ovPDHLkV1io#H(CGy literal 0 HcmV?d00001 diff --git a/stepmania/Themes/default/Graphics/MemoryCardDisplay error p2.png b/stepmania/Themes/default/Graphics/MemoryCardDisplay error p2.png new file mode 100644 index 0000000000000000000000000000000000000000..3c5ac07505231d60475bd9d5da7bb8418145b239 GIT binary patch literal 1409 zcmV-{1%CR8P)G#Q(A2dqBJph<%`H^MLp;nwrBk&APf*d$cFzX5}za>{~CyO zU={!b5X=Iw%g>xS^B)_yd-v}Dj*gE1f`WozLyV1$|F2rL3PlZw9~v5pYzf#W009KE z04xCm@7}%pzkBy?Fb1(eZ_m_Uze%p$3T!W&i{bRv&;|400(5 zBgYG}&yanHtOhBF@<3(-1Q1pWumO5ZeHQ zfdPb(0Wc51*=Nt5WvHmA05L&|wg3bW%m<(thleL9(?DIZ8mTC$Ko1&h0AvPK?|YCw zfB=H|0OWmN6B82#B_$=WE0Dxd*qxo7$nqEfmW*NQ0Rjl-I%y!@ffk0#kqa%TI%^=l zMMQZ8GD{ky2OxkLp&G$}k&#guNGXAW669NKE(EIK08+Mi;_V(NVZk^60fb@!EdW3O z!Bf$L2M=IOg%gJl+a$-uE%`==Kz|e@Z-mi8yp-Q3;+Ryo=g?o)YNV&{r=4c zWG^Pi#abdFU&MKMzD(b-!xPB801!a%ATm?}1wF&v`41i_82}lve0&V585s=Tp`k<> z{Q2`|hWe~5hT(2Pcg9<^A8+w1PCB_X*z%1IuH(y1X}n3)Q22iys(vF72UuDj1;qsrGXMk-avFz$|I3ywBgztx;SL%aaKqW3K)!T?RaU!XN_!#KpmufG~&+5(68K6f7{qL3*G$84dsf2(JYofXxyMY3cv>p@z@r=7t-N z%>sY`B2-*6c=-8&=}2G^z5LZHFb1VE2_Rm;#l>*Y*_olbt`4VufB<45CXItEu`elM zs013w0W%zkH=3C-%-^^XuU>!vBFcgb7cMYt?CoW!|Ar_$0)Y6#_3L0cd;lPT@LB*W z_m?kU&XD8k%CP?BO9la;SS=3^IG2OiATf~Kty{NnngI|%cr5^FoSK)%u;uMrxZ!Vo ze85Er%o30sNDVGa00IbSDnid}G5q}hGb1D6sihHEb%Mk|av(Lvz0(pI_&%rdP*oUbB2q5%0@G}NACEmRQCr4t6Y;;TZGcqzHIy&x$ zSppD1@cQ7xhYtdVii-EofBYx_GCWjBh`}@^h3NWVE-)DjZ`s1o{N)P+sBZKW7k_d7 z{(VJ&07CY`hv^F!#(M!R1R3s8T}`y%$UZ3m>TeVjd{M7Il2TVh P00000NkvXXu0mjf+0#J8 literal 0 HcmV?d00001 diff --git a/stepmania/Themes/default/Graphics/MemoryCardDisplay late p1.png b/stepmania/Themes/default/Graphics/MemoryCardDisplay late p1.png new file mode 100644 index 0000000000000000000000000000000000000000..1f44418ae56ce09c2a7530e89a346e9b5bbcb0c6 GIT binary patch literal 1805 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 B2A==` literal 0 HcmV?d00001 diff --git a/stepmania/Themes/default/Graphics/MemoryCardDisplay none p1.png b/stepmania/Themes/default/Graphics/MemoryCardDisplay none p1.png new file mode 100644 index 0000000000000000000000000000000000000000..9c720b4244de4485675777db4de877b401264e98 GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^56Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx&hVR_H=O!skoK&=l_3uW?e=H21COO5)3Q?XLT7k6lO&;2soH*XHaO!$OB4Uyu;MM ruxKYM1EWhZHv?10GqJ&}kd0x>c4l9n*4SX6HyJ!#{an^LB{Ts5DKlH5 literal 0 HcmV?d00001 diff --git a/stepmania/Themes/default/Graphics/MemoryCardDisplay none p2.png b/stepmania/Themes/default/Graphics/MemoryCardDisplay none p2.png new file mode 100644 index 0000000000000000000000000000000000000000..9c720b4244de4485675777db4de877b401264e98 GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^56Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx&hVR_H=O!skoK&=l_3uW?e=H21COO5)3Q?XLT7k6lO&;2soH*XHaO!$OB4Uyu;MM ruxKYM1EWhZHv?10GqJ&}kd0x>c4l9n*4SX6HyJ!#{an^LB{Ts5DKlH5 literal 0 HcmV?d00001 diff --git a/stepmania/Themes/default/Graphics/MemoryCardDisplay ready p1.png b/stepmania/Themes/default/Graphics/MemoryCardDisplay ready p1.png new file mode 100644 index 0000000000000000000000000000000000000000..29deb939421793097c03a63ac50f1b138c18afe7 GIT binary patch literal 696 zcmeAS@N?(olHy`uVBq!ia0vp^5$$gYz}NqA8u|=KPVBYYsMhpVDXqinqileva90jgJSFqj7OUE z`NG!6^*$<6dBE-U-rt@~+Cl zxB~~+*w~&=Jj=|XkWL31SQ^0%w>u zoIXFt^0U13j_U94{`d9u{cmb&N^tJ!?ft(#YAcs3Z-=~;R96n?4Rr=amdy-0jLh%v z?ft#K`g@)M+s4F%XJ=+6cuzR$kTrpElImB5&5TSOt63F%4GbqVD##yjsI0V{^Y+mr zrtgAcd#fGNm{|mbnHfL)`&%vYZ*TSY17BWUT`l?T&CTY8Y@NJmK<9+XH^lH1X>uqZ z=iYRFLT$$yHqDMtV0~fS8yF`%+~CocI3e-G$BEOXwF#bNU~IX{G@;w!A@|`IY|REm zF%305-TVswm{042Jjc$LoitaRX)%3(-h3wd8X!LEU! z=_kXJ+IV4MVK!A&)eYJcjs)JAJ9qAhPZA8%dJvV6vS-p&=uW(Sc#( zgxUK#SwYI=aj3X>hpB;K(N3V6mcUdl4vsy`mz-jG>2AgkG~wPVkcsSqAiIF7m>G^Q XxmbUD>$6^90%q`Z^>bP0l+XkKCb$}P literal 0 HcmV?d00001 diff --git a/stepmania/Themes/default/Sounds/MemoryCardManager ready.ogg b/stepmania/Themes/default/Sounds/MemoryCardManager ready.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a76181dcf17d53b1d9d4d2c754936f71a0d68631 GIT binary patch literal 4845 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 literal 0 HcmV?d00001 diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index eabac8ef14..81e112e1e1 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -58,6 +58,7 @@ Choice8=screen,ScreenTest Name8=SANDBOX TimerSeconds=-1 // none StyleIcon=0 +MemoryCardIcons=0 LogoHomeOnCommand=x,320;y,240;zoomy,0;sleep,0.5;bounceend,0.5;zoomy,1;glowshift;effectperiod,2.5;effectcolor1,1,1,1,0.1;effectcolor2,1,1,1,0.3 LogoOnCommand=x,320;y,240;zoomy,0;sleep,0.5;bounceend,0.5;zoomy,1;glowshift;effectperiod,2.5;effectcolor1,1,1,1,0.1;effectcolor2,1,1,1,0.3 VersionOnCommand=horizalign,right;x,620;y,20;diffuse,0.6,0.6,0.6,1;zoom,0.5;shadowlength,2 @@ -92,6 +93,7 @@ JoinMessageP2X=520 JoinMessageP2Y=336 TimerSeconds=40 StyleIcon=1 +MemoryCardIcons=1 NextScreen=ScreenSelectGroup SilentWait=1 BounceJoinMessage=1 @@ -107,6 +109,7 @@ Choice4=Style,double;name,double Choice5=Style,solo;name,solo TimerSeconds=40 StyleIcon=1 +MemoryCardIcons=1 NextScreen1=ScreenSelectDifficulty NextScreen2=ScreenSelectDifficulty NextScreen3=ScreenSelectDifficulty @@ -175,6 +178,7 @@ PictureOffCommand=linear,0.5;diffusealpha,0;glow,1,1,1,0 [ScreenSelectStyle5th] TimerSeconds=40 StyleIcon=1 +MemoryCardIcons=1 NextScreen=ScreenSelectDifficulty PadX1=70 PadY1=300 @@ -226,6 +230,7 @@ GuideX=320 GuideY=374 TimerSeconds=30 StyleIcon=1 +MemoryCardIcons=1 NextScreen=ScreenSelectGroup ScrollingListX=320 ScrollingListY=250 @@ -250,6 +255,7 @@ CharacterIconP2OffCommand=linear,0.3;diffusealpha,0;sleep,10 [ScreenStyleSplash] NextScreen=ScreenSelectGroup StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 [ScreenSelectDifficulty] @@ -265,6 +271,7 @@ Choice8=PlayMode,rave;name,rave NumChoicesOnPage1=4 TimerSeconds=40 StyleIcon=1 +MemoryCardIcons=1 NextScreen1=ScreenSelectGroup NextScreen2=ScreenSelectGroup NextScreen3=ScreenSelectGroup @@ -484,6 +491,7 @@ SleepAfterChoiceSeconds=0.3 SleepAfterTweenOffSeconds=0.8 TimerSeconds=60 StyleIcon=1 +MemoryCardIcons=1 [ScreenSelectGroup] FrameX=180 @@ -519,6 +527,7 @@ MusicListOffCommand= SleepAfterTweenOffSeconds=0.8 TimerSeconds=40 StyleIcon=1 +MemoryCardIcons=1 NextScreen=ScreenInstructions [GroupList] @@ -554,6 +563,7 @@ NextScreenBattle=ScreenSelectCharacter NextScreenRave=ScreenSelectCharacter TimerSeconds=15 StyleIcon=1 +MemoryCardIcons=1 [ScreenSelectMusic] DefaultSort=GROUP @@ -717,6 +727,7 @@ CourseContentsShowCommand= CourseContentsHideCommand= TimerSeconds=60 StyleIcon=1 +MemoryCardIcons=1 SampleMusicDelay=0.25 PrevScreenArcade=ScreenTitleMenu PrevScreenNonstop=ScreenTitleMenu @@ -808,6 +819,7 @@ NextOptionsScreenBattle=ScreenPlayerOptions NextOptionsScreenRave=ScreenRaveOptions TimerSeconds=60 StyleIcon=0 +MemoryCardIcons=0 [ScreenSelectCourse] ExplanationX=132 @@ -833,6 +845,7 @@ ScoreP2Y=286 ScoreZoom=0.8 TimerSeconds=60 StyleIcon=1 +MemoryCardIcons=1 [ScreenStage] NextScreen=ScreenGameplay @@ -1474,6 +1487,7 @@ ShowComboArea=0 ShowFullCombo=0 TimerSeconds=15 StyleIcon=1 +MemoryCardIcons=1 FailedSoundTime=0 PassedSoundTime=0 NumSequenceSounds=0 @@ -1509,6 +1523,7 @@ ShowComboArea=0 ShowFullCombo=0 TimerSeconds=30 StyleIcon=1 +MemoryCardIcons=1 [ScreenEvaluationNonstop] NextScreen=ScreenNameEntry @@ -1541,6 +1556,7 @@ ShowComboArea=0 ShowFullCombo=0 TimerSeconds=30 StyleIcon=1 +MemoryCardIcons=1 [ScreenEvaluationOni] NextScreen=ScreenNameEntry @@ -1573,6 +1589,7 @@ ShowComboArea=0 ShowFullCombo=0 TimerSeconds=30 StyleIcon=1 +MemoryCardIcons=1 [ScreenEvaluationEndless] NextScreen=ScreenNameEntry @@ -1605,6 +1622,7 @@ ShowComboArea=0 ShowFullCombo=0 TimerSeconds=30 StyleIcon=1 +MemoryCardIcons=1 [ScreenEvaluationBattle] @@ -1638,6 +1656,7 @@ ShowComboArea=0 ShowFullCombo=0 TimerSeconds=15 StyleIcon=1 +MemoryCardIcons=1 FailedSoundTime=0 PassedSoundTime=0 NumSequenceSounds=0 @@ -1673,6 +1692,7 @@ ShowComboArea=0 ShowFullCombo=0 TimerSeconds=15 StyleIcon=1 +MemoryCardIcons=1 FailedSoundTime=0 PassedSoundTime=0 NumSequenceSounds=0 @@ -1687,18 +1707,21 @@ NextScreen=ScreenRanking ExplanationX=320 ExplanationY=410 StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 [ScreenJukeboxMenu] ExplanationX=320 ExplanationY=410 StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 [ScreenEditCoursesMenu] ExplanationX=320 ExplanationY=410 StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 [ScreenSystemLayer] @@ -1813,15 +1836,33 @@ StopMusicOnNext=0 KeepAliveType=0 // 0 for MAX, 1 for 5th [MenuElements] -HeaderOnCommand=x,320;y,22;addx,640;spring,0.5;addx,-640 +HeaderX=320 +HeaderY=22 +HeaderOnCommand=addx,640;spring,0.5;addx,-640 HeaderOffCommand=bouncebegin,0.5;addx,640; -FooterOnCommand=x,320;y,464 +FooterX=320 +FooterY=464 +FooterOnCommand= FooterOffCommand= -HelpOnCommand=x,320;y,456;zoom,0.5;zoomy,0;linear,0.5;zoomy,0.5 +HelpX=320 +HelpY=456 +HelpOnCommand=zoom,0.5;zoomy,0;linear,0.5;zoomy,0.5 HelpOffCommand=linear,0.5;zoomy,0 -StyleIconOnCommand=x,440;y,26;addx,640;spring,0.5;addx,-640 +StyleIconX=440 +StyleIconY=26 +StyleIconOnCommand=addx,640;spring,0.5;addx,-640 StyleIconOffCommand=bouncebegin,0.5;addx,640; -TimerOnCommand=x,590;y,22;addx,640;spring,0.5;addx,-640 +MemoryCardDisplayP1X=460 +MemoryCardDisplayP1Y=20 +MemoryCardDisplayP1OnCommand=addx,640;spring,0.5;addx,-640 +MemoryCardDisplayP1OffCommand=bouncebegin,0.5;addx,640; +MemoryCardDisplayP2X=480 +MemoryCardDisplayP2Y=20 +MemoryCardDisplayP2OnCommand=addx,640;spring,0.5;addx,-640 +MemoryCardDisplayP2OffCommand=bouncebegin,0.5;addx,640; +TimerX=590 +TimerY=22 +TimerOnCommand=addx,640;spring,0.5;addx,-640 TimerOffCommand=bouncebegin,0.5;addx,640; [MenuTimer] @@ -1877,18 +1918,22 @@ OddLineIn=addx,640;decelerate,0.5;addx,-640; EvenLineOut=stoptweening;accelerate,0.3;addx,-640; OddLineOut=stoptweening;accelerate,0.3;addx,640; StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 [ScreenCenterImage] StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 [ScreenTestInput] StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 [ScreenBookkeeping] StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 [HoldGhostArrow] @@ -2200,9 +2245,11 @@ AttackDurationSeconds=10 [ScreenSelectMaster] TimerSeconds=20 StyleIcon=1 +MemoryCardIcons=1 [ScreenInputOptions] StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 PrevScreen=ScreenOptionsMenu@ScreenOptionsMaster NextScreen=ScreenOptionsMenu@ScreenOptionsMaster @@ -2217,6 +2264,7 @@ Line6=conf,WheelSpeed [ScreenCoinOptions] StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 PrevScreen=ScreenOptionsMenu@ScreenOptionsMaster NextScreen=ScreenOptionsMenu@ScreenOptionsMaster @@ -2229,6 +2277,7 @@ Line4=conf,Premium [ScreenMachineOptions] StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 PrevScreen=ScreenOptionsMenu@ScreenOptionsMaster NextScreen=ScreenOptionsMenu@ScreenOptionsMaster @@ -2247,6 +2296,7 @@ Line10=conf,ShowNameEntry [ScreenGraphicOptions] StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 PrevScreen=ScreenOptionsMenu@ScreenOptionsMaster NextScreen=ScreenOptionsMenu@ScreenOptionsMaster @@ -2267,6 +2317,7 @@ Line12=conf,ShowBanners [ScreenGameplayOptions] StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 PrevScreen=ScreenOptionsMenu@ScreenOptionsMaster NextScreen=ScreenOptionsMenu@ScreenOptionsMaster @@ -2282,6 +2333,7 @@ Line7=conf,UnlockSystem [ScreenBackgroundOptions] StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 PrevScreen=ScreenOptionsMenu@ScreenOptionsMaster NextScreen=ScreenOptionsMenu@ScreenOptionsMaster @@ -2296,6 +2348,7 @@ Line6=conf,RandomBackgrounds [ScreenAppearanceOptions] StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 @@ -2320,6 +2373,7 @@ Line14=conf,Lyrics [ScreenAutogenOptions] StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 PrevScreen=ScreenOptionsMenu@ScreenOptionsMaster NextScreen=ScreenOptionsMenu@ScreenOptionsMaster @@ -2337,6 +2391,7 @@ Rename= CardDirPlayer1= CardDirPlayer2= StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 [ScreenUnlock] @@ -2599,6 +2654,7 @@ TextColor5=1.0,1,1.0,1 [ScreenSoundOptions] StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 PrevScreen=ScreenOptionsMenu@ScreenOptionsMaster @@ -2667,6 +2723,7 @@ FakeBeatsPerSec=2.5 TimerSeconds=24 MaxRankingNameLength=4 StyleIcon=1 +MemoryCardIcons=1 [EditMenu] Arrows1X=190 @@ -2747,6 +2804,7 @@ Row8Y=360 [ScreenOptionsMenu] StyleIcon=0 +MemoryCardIcons=1 TimerSeconds=0 # "Rows" sets the number of rows; this field is required. @@ -2836,6 +2894,7 @@ TipY=0 [ScreenSelectGame] StyleIcon=0 +MemoryCardIcons=0 TimerSeconds=0 PrevScreen=ScreenTitleMenu NextScreen=ScreenTitleMenu @@ -2859,6 +2918,7 @@ NextScreenBattle=ScreenSongOptions NextScreenRave=ScreenSongOptions TimerSeconds=30 StyleIcon=0 +MemoryCardIcons=0 PrevScreen= NextScreen= @@ -2886,6 +2946,7 @@ PrevScreen=ScreenSelectMusic NextScreen=ScreenStage TimerSeconds=30 StyleIcon=0 +MemoryCardIcons=0 OptionMenuFlags=rows,5 @@ -2911,6 +2972,7 @@ NextScreenRave=ScreenStage Game=Change the current game type with this option. TimerSeconds=30 StyleIcon=0 +MemoryCardIcons=0 PrevScreen=ScreenOptionsMenu@ScreenOptionsMaster NextScreen=ScreenOptionsMenu@ScreenOptionsMaster @@ -2992,6 +3054,7 @@ IconsP2OffCommand=sleep,0.2;bouncebegin,0.5;addx,400 SleepAfterTweenOffSeconds=0.8 TimerSeconds=40 StyleIcon=1 +MemoryCardIcons=1 PrevScreenArcade=ScreenTitleMenu PrevScreenNonstop=ScreenTitleMenu PrevScreenOni=ScreenTitleMenu diff --git a/stepmania/src/GameConstantsAndTypes.cpp b/stepmania/src/GameConstantsAndTypes.cpp index 932ce1c0ce..df158a3807 100644 --- a/stepmania/src/GameConstantsAndTypes.cpp +++ b/stepmania/src/GameConstantsAndTypes.cpp @@ -164,3 +164,16 @@ CString TapNoteScoreToString( TapNoteScore tns ) default: ASSERT(0); return ""; // invalid Difficulty } } + +CString MemoryCardStateToString( MemoryCardState mcs ) +{ + switch( mcs ) + { + case MEMORY_CARD_STATE_READY: return "ready"; + case MEMORY_CARD_STATE_TOO_LATE: return "late"; + case MEMORY_CARD_STATE_WRITE_ERROR: return "error"; + case MEMORY_CARD_STATE_NO_CARD: return "none"; + default: ASSERT(0); return ""; + } +} + diff --git a/stepmania/src/GameConstantsAndTypes.h b/stepmania/src/GameConstantsAndTypes.h index f1587b2423..983109da62 100644 --- a/stepmania/src/GameConstantsAndTypes.h +++ b/stepmania/src/GameConstantsAndTypes.h @@ -195,6 +195,18 @@ enum MemoryCard NUM_MEMORY_CARDS }; +enum MemoryCardState +{ + MEMORY_CARD_STATE_READY, + MEMORY_CARD_STATE_TOO_LATE, + MEMORY_CARD_STATE_WRITE_ERROR, + MEMORY_CARD_STATE_NO_CARD, + NUM_MEMORY_CARD_STATES, + MEMORY_CARD_STATE_INVALID, +}; + +CString MemoryCardStateToString( MemoryCardState mcs ); + // // Ranking stuff diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 644c7d546d..1026e13f5a 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -35,6 +35,7 @@ #include "RageFile.h" #include "Bookkeeper.h" #include +#include "MemoryCardManager.h" #define DEFAULT_MODIFIERS THEME->GetMetric( "Common","DefaultModifiers" ) @@ -148,6 +149,7 @@ void GameState::Reset() PROFILEMAN->SaveProfile( (PlayerNumber)p ); PROFILEMAN->UnloadProfile( (PlayerNumber)p ); } + MEMCARDMAN->LockCards( false ); LIGHTSMAN->SetLightMode( LIGHTMODE_ATTRACT ); diff --git a/stepmania/src/Makefile.am b/stepmania/src/Makefile.am index cd20b9ff8a..bc9b8f7e36 100644 --- a/stepmania/src/Makefile.am +++ b/stepmania/src/Makefile.am @@ -152,7 +152,7 @@ CourseEntryDisplay.cpp CourseEntryDisplay.h DifficultyDisplay.cpp DifficultyDisp DifficultyMeter.cpp DifficultyMeter.h DifficultyRating.cpp DifficultyRating.h EditCoursesMenu.cpp EditCoursesMenu.h \ EditMenu.cpp EditMenu.h FadingBanner.cpp FadingBanner.h GradeDisplay.cpp GradeDisplay.h GraphDisplay.cpp GraphDisplay.h \ GrooveGraph.cpp GrooveGraph.h GrooveRadar.cpp GrooveRadar.h GroupList.cpp GroupList.h HelpDisplay.cpp HelpDisplay.h \ -JukeboxMenu.cpp JukeboxMenu.h MenuElements.cpp MenuElements.h MenuTimer.cpp MenuTimer.h ModeSwitcher.cpp ModeSwitcher.h \ +JukeboxMenu.cpp JukeboxMenu.h MemoryCardDisplay.cpp MemoryCardDisplay.h MenuElements.cpp MenuElements.h MenuTimer.cpp MenuTimer.h ModeSwitcher.cpp ModeSwitcher.h \ MusicBannerWheel.cpp MusicBannerWheel.h MusicList.cpp MusicList.h MusicSortDisplay.cpp MusicSortDisplay.h \ MusicWheel.cpp MusicWheel.h MusicWheelItem.cpp MusicWheelItem.h OptionIcon.cpp OptionIcon.h OptionIconRow.cpp OptionIconRow.h \ OptionsCursor.cpp OptionsCursor.h PaneDisplay.cpp PaneDisplay.h ScrollBar.cpp ScrollBar.h ScrollingList.cpp ScrollingList.h \ diff --git a/stepmania/src/MemoryCardManager.cpp b/stepmania/src/MemoryCardManager.cpp index 00aa817f58..5f012d9fac 100644 --- a/stepmania/src/MemoryCardManager.cpp +++ b/stepmania/src/MemoryCardManager.cpp @@ -28,14 +28,17 @@ MemoryCardManager::MemoryCardManager() m_bCardsLocked = false; for( int p=0; pGetStorageDevices( m_vStorageDevices ); - ReassignCards(); - m_soundConnect.Load( THEME->GetPathToS("MemoryCardManager connect") ); + m_soundReady.Load( THEME->GetPathToS("MemoryCardManager ready") ); + m_soundError.Load( THEME->GetPathToS("MemoryCardManager error") ); + m_soundTooLate.Load( THEME->GetPathToS("MemoryCardManager too late") ); m_soundDisconnect.Load( THEME->GetPathToS("MemoryCardManager disconnect") ); + + AssignUnassignedCards(); } MemoryCardManager::~MemoryCardManager() @@ -77,47 +80,33 @@ void MemoryCardManager::Update( float fDelta ) } } - if( m_bCardsLocked ) // Cards are locked and play has begun. + // unassign cards that were disconnected + for( int p=0; pMountAndTestWrite( &m_Device[p] ); - } - } - else - { - // clear error flags - for( int p=0; p vDevices = m_vStorageDevices; // copy - for( int p=0; p vUnassignedDevices = m_vStorageDevices; // copy + + // remove cards that are already assigned { - m_Device[p].MakeBlank(); - - unsigned i; - - // search for card dir match - if( !PREFSMAN->m_sMemoryCardDir[p].empty() ) + for( int p=0; p::iterator it = find(vUnassignedDevices.begin(),vUnassignedDevices.end(),m_Device[p]); + ASSERT( it != vUnassignedDevices.end() ) // the assigned card better be connected! + vUnassignedDevices.erase( it ); + } + } + + // try to assign each device to a player + { + for( int p=0; pm_sMemoryCardDir[p].empty() ) { - UsbStorageDevice &usd = vDevices[i]; - if( usd.sOsMountDir.CompareNoCase(PREFSMAN->m_sMemoryCardDir[p]) == 0 ) // match - goto match; + for( i=0; im_sMemoryCardDir[p]) == 0 ) // match + goto match; + } } - } - // search for USB bus match - for( i=0; im_iMemoryCardUsbBus[p] != -1 && - PREFSMAN->m_iMemoryCardUsbBus[p] != usd.iBus ) - continue; // not a match + // search for USB bus match + for( i=0; im_iMemoryCardUsbPort[p] != -1 && - PREFSMAN->m_iMemoryCardUsbPort[p] != usd.iPortOnHub ) - continue; // not a match + if( PREFSMAN->m_iMemoryCardUsbBus[p] != -1 && + PREFSMAN->m_iMemoryCardUsbBus[p] != usd.iBus ) + continue; // not a match - goto match; - } - - LOG->Trace( "Player %d memory card: none", p+1 ); - continue; // no matches + if( PREFSMAN->m_iMemoryCardUsbPort[p] != -1 && + PREFSMAN->m_iMemoryCardUsbPort[p] != usd.iPortOnHub ) + continue; // not a match + + goto match; + } + + LOG->Trace( "Player %d memory card: none", p+1 ); + continue; // no matches match: - m_Device[p] = vDevices[i]; // save a copy - LOG->Trace( "Player %d memory card: '%s'", p+1, m_Device[p].sOsMountDir.c_str() ); - vDevices.erase( vDevices.begin()+i ); // remove the device so we don't match it for another player + m_Device[p] = vUnassignedDevices[i]; // save a copy + LOG->Trace( "Player %d memory card: '%s'", p+1, m_Device[p].sOsMountDir.c_str() ); + vUnassignedDevices.erase( vUnassignedDevices.begin()+i ); // remove the device so we don't match it for another player + m_bTooLate[p] = m_bCardsLocked; + m_bWriteError[p] = false; + if( !m_bCardsLocked ) + if( !m_pDriver->MountAndTestWrite(&m_Device[p]) ) + m_bWriteError[p] = true; + + // play sound + if( m_bWriteError[p] ) + m_soundError.Play(); + else if( m_bTooLate[p] ) + m_soundTooLate.Play(); + else + m_soundReady.Play(); + } } } \ No newline at end of file diff --git a/stepmania/src/MemoryCardManager.h b/stepmania/src/MemoryCardManager.h index 242d24a72e..35746ee682 100644 --- a/stepmania/src/MemoryCardManager.h +++ b/stepmania/src/MemoryCardManager.h @@ -10,6 +10,7 @@ Chris Danford ----------------------------------------------------------------------------- */ +#include "GameConstantsAndTypes.h" // for MemoryCardState #include "PlayerNumber.h" #include "RageSound.h" #include "arch/MemoryCard/MemoryCardDriver.h" @@ -22,16 +23,14 @@ public: void Update( float fDelta ); - enum CardState { ready, too_late, write_error, no_card }; - - CardState GetCardState( PlayerNumber pn ); + MemoryCardState GetCardState( PlayerNumber pn ); CString GetOsMountDir( PlayerNumber pn ); // only valid when ready void LockCards( bool bLock ); // prevent removing or changing of memory cards protected: - void ReassignCards(); // do our best to assign a Device to each player + void AssignUnassignedCards(); // do our best to assign a Device to each player MemoryCardDriver *m_pDriver; @@ -42,7 +41,9 @@ protected: bool m_bWriteError[NUM_PLAYERS]; // couldn't write to the card UsbStorageDevice m_Device[NUM_PLAYERS]; // device in the memory card slot, NULL if none - RageSound m_soundConnect; + RageSound m_soundReady; + RageSound m_soundError; + RageSound m_soundTooLate; RageSound m_soundDisconnect; }; diff --git a/stepmania/src/MenuElements.cpp b/stepmania/src/MenuElements.cpp index c5d87faf17..750b1ec0ff 100644 --- a/stepmania/src/MenuElements.cpp +++ b/stepmania/src/MenuElements.cpp @@ -25,6 +25,7 @@ #define TIMER_SECONDS THEME->GetMetricI(m_sName,"TimerSeconds") #define STYLE_ICON THEME->GetMetricB(m_sName,"StyleIcon") +#define MEMORY_CARD_ICONS THEME->GetMetricB(m_sName,"MemoryCardIcons") MenuElements::MenuElements() @@ -52,6 +53,7 @@ void MenuElements::Load( CString sClassName ) m_autoHeader.Load( THEME->GetPathToG(m_sName+" header") ); m_autoHeader->SetName("Header"); + UtilSetXY( m_autoHeader, "MenuElements" ); UtilOnCommand( m_autoHeader, "MenuElements" ); this->AddChild( m_autoHeader ); @@ -61,14 +63,28 @@ void MenuElements::Load( CString sClassName ) m_sprStyleIcon.SetName( "StyleIcon" ); m_sprStyleIcon.Load( THEME->GetPathToG(sIconFileName) ); m_sprStyleIcon.StopAnimating(); + UtilSetXY( m_sprStyleIcon, "MenuElements" ); UtilOnCommand( m_sprStyleIcon, "MenuElements" ); this->AddChild( &m_sprStyleIcon ); } + if( MEMORY_CARD_ICONS ) + { + for( int p=0; pAddChild( &m_MemoryCardDisplay[p] ); + } + } + m_bTimerEnabled = (TIMER_SECONDS != -1); if( m_bTimerEnabled ) { m_MenuTimer->SetName( "Timer" ); + UtilSetXY( m_MenuTimer, "MenuElements" ); UtilOnCommand( m_MenuTimer, "MenuElements" ); if( TIMER_SECONDS > 0 && PREFSMAN->m_bMenuTimer && !GAMESTATE->m_bEditing ) m_MenuTimer->SetSeconds( TIMER_SECONDS ); @@ -79,11 +95,13 @@ void MenuElements::Load( CString sClassName ) m_autoFooter.Load( THEME->GetPathToG(m_sName+" footer") ); m_autoFooter->SetName("Footer"); + UtilSetXY( m_autoFooter, "MenuElements" ); UtilOnCommand( m_autoFooter, "MenuElements" ); this->AddChild( m_autoFooter ); m_textHelp->SetName( "HelpDisplay", "Help" ); m_textHelp->Load(); + UtilSetXY( m_textHelp, "MenuElements" ); UtilOnCommand( m_textHelp, "MenuElements" ); CStringArray asHelpTips; split( THEME->GetMetric(m_sName,"HelpText"), "\n", asHelpTips ); @@ -122,6 +140,8 @@ void MenuElements::StartTransitioning( ScreenMessage smSendWhenDone ) UtilOffCommand( m_autoHeader, "MenuElements" ); UtilOffCommand( m_sprStyleIcon, "MenuElements" ); + for( int p=0; pDraw(); m_sprStyleIcon.Draw(); + for( int p=0; pDraw(); m_autoFooter->Draw(); diff --git a/stepmania/src/MenuElements.h b/stepmania/src/MenuElements.h index fffb2a12c6..dbbad62062 100644 --- a/stepmania/src/MenuElements.h +++ b/stepmania/src/MenuElements.h @@ -18,6 +18,7 @@ #include "BGAnimation.h" #include "ActorUtil.h" #include "RageSound.h" +#include "MemoryCardDisplay.h" class MenuTimer; class HelpDisplay; @@ -47,6 +48,7 @@ public: // let owner tinker with these objects AutoActor m_autoHeader; Sprite m_sprStyleIcon; + MemoryCardDisplay m_MemoryCardDisplay[NUM_PLAYERS]; MenuTimer *m_MenuTimer; AutoActor m_autoFooter; HelpDisplay *m_textHelp; diff --git a/stepmania/src/ModeChoice.cpp b/stepmania/src/ModeChoice.cpp index 8dd9b4440b..3dc8e73ada 100644 --- a/stepmania/src/ModeChoice.cpp +++ b/stepmania/src/ModeChoice.cpp @@ -12,6 +12,7 @@ #include "SongManager.h" #include "PrefsManager.h" #include "arch/ArchHooks/ArchHooks.h" +#include "MemoryCardManager.h" void ModeChoice::Init() { @@ -288,6 +289,7 @@ void ModeChoice::Apply( PlayerNumber pn ) const if( m_style != STYLE_INVALID ) { PROFILEMAN->LoadFirstAvailableProfile( pn ); + MEMCARDMAN->LockCards( true ); } } diff --git a/stepmania/src/StepMania.dsp b/stepmania/src/StepMania.dsp index 68f370f45e..9683e4b16e 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 @@ -65,7 +65,7 @@ IntDir=.\../Debug6 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,24 +82,28 @@ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania # PROP Intermediate_Dir "Debug" # 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" -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 xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /incremental:no /debug /machine:I386 /nodefaultlib:"libcd" /nodefaultlib:"libcmt" /out:"../StepManiaXbox-debug.exe" /subsystem:xbox /fixed:no /TMP -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" /D "WIN32" /D "_XBOX" /D "_DEBUG" /D "OGG_ONLY" /YX /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 xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /incremental:no /debug /machine:I386 /nodefaultlib:"libcd" /nodefaultlib:"libcmt" /out:"../StepManiaXbox-debug.exe" /subsystem:xbox /fixed:no /TMP +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 -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp \ - /Fo$(IntDir)\ +IntDir=.\Debug +TargetDir=\stepmania\stepmania +TargetName=default +SOURCE="$(InputPath)" +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp \ + /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool @@ -139,7 +143,7 @@ IntDir=.\../Release6 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 @@ -157,27 +161,31 @@ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania # PROP Intermediate_Dir "StepMania___Xbox_Release" # 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" /D "WIN32" /D "_XBOX" /D "NDEBUG" /YX"global.h" /FD /c +# SUBTRACT CPP /Fr +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 /pdb:"../release6xbox/StepMania.pdb" /machine:I386 /nodefaultlib:"libc" /nodefaultlib:"libcmtd" /out:"../StepManiaXbox.exe" /subsystem:xbox /fixed:no /TMP /OPT:REF # SUBTRACT LINK32 /pdb:none /map /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" /D "WIN32" /D "_XBOX" /D "NDEBUG" /YX"global.h" /FD /c -# SUBTRACT CPP /Fr +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 -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp \ - /Fo$(IntDir)\ +IntDir=.\StepMania___Xbox_Release +TargetDir=\stepmania\stepmania +TargetName=default +SOURCE="$(InputPath)" +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp \ + /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool @@ -4018,6 +4026,25 @@ SOURCE=.\JukeboxMenu.h # End Source File # Begin Source File +SOURCE=.\MemoryCardDisplay.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=.\MemoryCardDisplay.h +# End Source File +# Begin Source File + SOURCE=.\MenuElements.cpp !IF "$(CFG)" == "StepMania - Win32 Debug" diff --git a/stepmania/src/StepMania.vcproj b/stepmania/src/StepMania.vcproj index ff2f2154bb..0bf3e0f51e 100644 --- a/stepmania/src/StepMania.vcproj +++ b/stepmania/src/StepMania.vcproj @@ -1231,6 +1231,12 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\ + + + + diff --git a/stepmania/src/arch/MemoryCard/MemoryCardDriver.h b/stepmania/src/arch/MemoryCard/MemoryCardDriver.h index 2560a13301..b85a575907 100644 --- a/stepmania/src/arch/MemoryCard/MemoryCardDriver.h +++ b/stepmania/src/arch/MemoryCard/MemoryCardDriver.h @@ -12,6 +12,8 @@ struct UsbStorageDevice iDeviceOnBus = -1; iPortOnHub = -1; iUsbStorageIndex = -1; + sSerial = ""; + sOsMountDir = ""; }; int iBus; int iDeviceOnBus; diff --git a/stepmania/src/arch/MemoryCard/MemoryCardDriver_Windows.cpp b/stepmania/src/arch/MemoryCard/MemoryCardDriver_Windows.cpp index fe7153cadd..6fa3a396a0 100644 --- a/stepmania/src/arch/MemoryCard/MemoryCardDriver_Windows.cpp +++ b/stepmania/src/arch/MemoryCard/MemoryCardDriver_Windows.cpp @@ -51,7 +51,7 @@ void MemoryCardDriver_Windows::GetStorageDevices( vector& vDev bool MemoryCardDriver_Windows::MountAndTestWrite( UsbStorageDevice* pDevice ) { - if( !pDevice->sOsMountDir.empty() ) + if( pDevice->sOsMountDir.empty() ) return false; // TODO: Use RageFileDirect here to detect ready state? @@ -74,12 +74,11 @@ bool MemoryCardDriver_Windows::MountAndTestWrite( UsbStorageDevice* pDevice ) // Try to write a file. // TODO: Can we use RageFile for this? - CString sFile = pDevice->sOsMountDir; - sFile += "temp"; - int fd = open( sFile, _O_WRONLY|_O_CREAT|_O_TRUNC ); - if( fd == -1 ) + CString sFile = pDevice->sOsMountDir + "temp"; + FILE* fp = fopen( sFile, "w" ); + if( fp == NULL ) return false; - close( fd ); + fclose( fp ); remove( sFile ); return true;