diff --git a/background/wiibk.psd b/background/wiibk.psd index 724a91d..d237bd4 100644 Binary files a/background/wiibk.psd and b/background/wiibk.psd differ diff --git a/hbc/meta.xml b/hbc/meta.xml index a7d55ee..b8e71c4 100644 --- a/hbc/meta.xml +++ b/hbc/meta.xml @@ -2,8 +2,8 @@ GCMM Suloku - 1.3 - 20120914000000 + 1.4 + 20121008000000 Memory Card Manager A memory card manager for Wii/GC. diff --git a/readme.txt b/readme.txt index 5a36a25..dc54dfb 100644 --- a/readme.txt +++ b/readme.txt @@ -1,5 +1,5 @@ ח–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•Ĵ -|0O×ĝo· GCMM 1.3 ·oĝ×O0| +|0O×ĝo· GCMM 1.4 by suloku ·oĝ×O0| | http://code.google.com/p/gcmm | | (Under GPL License) | `¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨' @@ -22,7 +22,7 @@ I (suloku) have updated the code to newest libraries to port it to the Wii syste * Wiimote and GameCube controller support * Power button support * Front SD and FAT32 USB device (wii) and SDGecko (gamecube) support -* Shows savegame information, alongside Icon and Banner! +* Shows savegame information, alongside animated Icon and Banner! * A (somewhat) nice UI * Open Source! @@ -30,6 +30,23 @@ I (suloku) have updated the code to newest libraries to port it to the Wii syste |0O×ĝo· UPDATE HISTORY ·oĝ×O0| `¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨' +[What's New 1.4 - october 08, 2012 - By suloku] +* Animated icon alongside several (minor) graphical improvements +* Ability to select SD Gecko slot in GameCube mode (just like Wii mode SD/USB prompt) +* Moved "Backup All" to Backup Mode (press R/1 when in Backup Mode) +* Added an analog "Restore All" in Restore Mode (overwriting is supported) +* Shows filename when prompted to overwrite (also in "Restore All") +* Savegame permisions are shown in a more explicit and user friendly way +* Shows memory card freeblocks +* Page number display in file selector +* Left and right now scroll 5 file entries at once +* Scrolling of file entries can be done holding the button (up/down/left/right) +* Added security checks to Raw Restore Mode +* Added some special characters to the font (needed for savegame comments) +* Minor code tweaks + +Lots of thanks to bm123456 and themanuel for beta testing and support! + [What's New 1.3 - september 14, 2012 - By suloku] * Shows card/image serial number in Raw Restore Mode @@ -218,7 +235,7 @@ This document doesn't cover how to do any of that. A good source for information They are shown at the screen. -Raw mode controls: +Raw mode controls: hold L (gamecube pad) or B (wiimote) then press the corresponding button * Raw Backup Mode: GC_pad L+Y , Wiimote B+Minus * Raw Restore Mode: GC_pad L+X , Wiimote B+Plus * Format Card Mode: GC_pad L+Z , Wiimote B+2 @@ -249,6 +266,7 @@ Currently gcmm uses: * dronesplitter for banner and icon implementation * PlabloACZ and Picachu025 for updating the source. * Nano(Excelsiior), for inspiring me to finally working again on GCMM +* bm123456 and themanuel for beta testing and support ח–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•Ĵ |0O×ĝo· ·oĝ×O0| diff --git a/source/bitmap.c b/source/bitmap.c index 095d2b3..171546e 100644 --- a/source/bitmap.c +++ b/source/bitmap.c @@ -14,7 +14,8 @@ #include #include #include -#include "bitmap.h" +#include "bitmap.h" +#include "freetype.h" #include "gci.h" extern GCI gci; @@ -99,6 +100,7 @@ u32 ShowBMP(u8 * bmpfile) { u8 *bgr; u32 fboffset; u32 rows, cols; + static u8 firstcall = 1; bitmap = (WINBITMAP *) bmpfile; @@ -146,16 +148,45 @@ u32 ShowBMP(u8 * bmpfile) { /*** Move to NEXT framebuffer ***/ whichfb ^= 1; - for (rows = 0; rows < height; rows++) { - for (cols = 0; cols < (fbwidth >> 1); cols++) { - xfb[whichfb][fboffset + cols] =CvtRGB (bgr[2], bgr[1], bgr[0], - bgr[5], bgr[4], bgr[3]); - bgr += 6; - } + if (firstcall) + { + DrawBoxFilled(0,0,vmode->fbWidth-1,vmode->xfbHeight-1,0xFF80FF80); + for (rows = 0; rows < height; rows++) { + for (cols = 0; cols < (fbwidth >> 1); cols++) { + if (rows < 64 || rows > 398 || cols < (31>>1) || cols > (341>>1)) + { + //xfb[whichfb][fboffset + cols] =CvtRGB (255,255,255,255,255,255); + } + else + { + xfb[whichfb][fboffset-(320*20) + (66)+cols] =CvtRGB (bgr[2], bgr[1], bgr[0], + bgr[5], bgr[4], bgr[3]); + } - fboffset -= 320; /*** Go up one row ***/ + bgr += 6; + } - } /*** Outer row loop ***/ + fboffset -= 320; /*** Go up one row ***/ + + } /*** Outer row loop ***/ + } + else + { + for (rows = 0; rows < height; rows++) { + for (cols = 0; cols < (fbwidth >> 1); cols++) { + xfb[whichfb][fboffset + cols] =CvtRGB (bgr[2], bgr[1], bgr[0], + bgr[5], bgr[4], bgr[3]); + bgr += 6; + } + + fboffset -= 320; /*** Go up one row ***/ + + } /*** Outer row loop ***/ + } + if (firstcall) + { + firstcall = 0; + } /*** Setup the video to display this picture ***/ /*VIDEO_SetNextFramebuffer (xfb[whichfb]); @@ -188,7 +219,7 @@ void ShowBanner(u8 *banner) { fboffset = ((640 - fbwidth) >> 1) >> 1; fboffset += (((vmode->xfbHeight - height) >> 1) * 320); fboffset -= (height * 320 * 2); - fboffset -= (height * 90); + fboffset += (height * 10); fboffset += width/2+3; //at this point the banner is perfectly aligned with right window fboffset += ((height *320)>>1)+3; @@ -231,7 +262,7 @@ void ShowIcon(u8 *icon) { fbwidth = CARD_ICON_W; fboffset += (((vmode->xfbHeight - height) >> 1) * 320); fboffset -= (height * 320 * 2); - fboffset -= (height * 90); + fboffset += (height * 10); fboffset += width/2+3; fboffset += ((height *320)>>1)+3; diff --git a/source/fontface.s b/source/fontface.s index 2fc931b..7d0ddb1 100644 --- a/source/fontface.s +++ b/source/fontface.s @@ -8,5 +8,5 @@ fontface: .globl fontsize -fontsize: .long 42604 +fontsize: .long 50824 diff --git a/source/freetype.c b/source/freetype.c index e1d6aa8..6fd2862 100644 --- a/source/freetype.c +++ b/source/freetype.c @@ -810,7 +810,7 @@ void showCardInfo(int sel){ void showSaveInfo(int sel) { - int y = 160, x = 378, j; + int y = 165, x = 378, j; char gamecode[5], company[3], txt[1024]; //clear right pane, but just the save info @@ -846,17 +846,17 @@ void showSaveInfo(int sel) //Draw nice gradient background for banner and icon if(SDCARD_GetBannerFmt(gci.banner_fmt) == 1 || SDCARD_GetBannerFmt(gci.banner_fmt) == 2){ //Box for icon+banner - DrawHLine (410, 410+160, 162, getcolour (255,255,255)); - DrawBox (410, 163, 410+160, 163+39, getcolour (255,255,255)); - DrawHLine (410, 410+160, 164+39, getcolour (255,255,255)); - DrawBoxFilledGradient(412, 164, (410+158), (164+37), BLUECOL, PURPLECOL, LOCATION); + DrawHLine (410, 410+160, 172, getcolour (255,255,255)); + DrawBox (410, 173, 410+160, 173+39, getcolour (255,255,255)); + DrawHLine (410, 410+160, 174+39, getcolour (255,255,255)); + DrawBoxFilledGradient(412, 174, (410+158), (174+37), BLUECOL, PURPLECOL, LOCATION); }else { //Box for icon - DrawHLine (468, 468+42, 162, getcolour (255,255,255)); - DrawBox (468, 163, 468+42, 163+39, getcolour (255,255,255)); - DrawHLine (468, 468+42, 164+39, getcolour (255,255,255)); - DrawBoxFilledGradient(468+2, 164, (468+40), (164+37), BLUECOL, PURPLECOL, LOCATION); + DrawHLine (468, 468+42, 172, getcolour (255,255,255)); + DrawBox (468, 173, 468+42, 173+39, getcolour (255,255,255)); + DrawHLine (468, 468+42, 174+39, getcolour (255,255,255)); + DrawBoxFilledGradient(468+2, 174, (468+40), (174+37), BLUECOL, PURPLECOL, LOCATION); } //Show banner if there is one @@ -870,7 +870,7 @@ void showSaveInfo(int sel) /*** Display relevant info for this save ***/ sprintf(txt, "#%d %s/%s", sel, gamecode, company); DrawText(x, y-4, txt); - y += 65; + y += 70; //DrawText(x, y, "File Description:"); //y += 20; @@ -975,7 +975,7 @@ void showSaveInfo(int sel) DrawText(x, y, txt); #ifdef DEBUG_VALUES - /*** Uncomment to print some debug info ***/ + /*** Print some debug info ***/ y+=20; sprintf(comment2, "%x %x %x %d", gci.icon_addr, gci.icon_fmt, gci.banner_fmt, numicons); DrawText(x, y, comment2); @@ -1410,7 +1410,7 @@ int ShowSelector (int saveinfo) void writeStatusBar( char *line1, char *line2) { int bgcolor = getcolour(0xff,0xff,0xff); - DrawBoxFilled(10, 404, 640, 455, bgcolor); + DrawBoxFilled(0, 404, vmode->fbWidth-1, vmode->xfbHeight-1, bgcolor); //setfontcolour(84,174,211); setfontcolour(28,28,28); DrawText(40, 425, line1); diff --git a/source/gcbk.bmp b/source/gcbk.bmp index 930b95e..1fb0b3e 100644 Binary files a/source/gcbk.bmp and b/source/gcbk.bmp differ diff --git a/source/main.c b/source/main.c index ef71511..25f33b1 100644 --- a/source/main.c +++ b/source/main.c @@ -299,17 +299,19 @@ void SD_BackupMode () char buffer[256], text[64]; clearRightPane(); - DrawText(380,130,"B a c k u p M o d e"); - writeStatusBar("Pick a file using UP or DOWN ", "Press A to backup to SD Card ") ; - setfontsize (14); -#ifdef HW_RVL - DrawText(40, 60, "Press R/1 to backup ALL savegames"); -#else - DrawText(40, 60, "Press R to backup ALL savegames"); -#endif - + DrawText(386,130,"B a c k u p M o d e"); + DrawText(386,134,"_____________________"); + writeStatusBar("Reading memory card... ", ""); /*** Get the directory listing from the memory card ***/ memitems = CardGetDirectory (MEM_CARD); + + writeStatusBar("Pick a file using UP or DOWN ", "Press A to backup to SD Card ") ; + setfontsize (14); +#ifdef HW_RVL + DrawText(40, 60, "Press R/1 to backup ALL savegames"); +#else + DrawText(40, 60, "Press R to backup ALL savegames"); +#endif /*** If it's a blank card, get out of here ***/ if (!memitems) @@ -409,7 +411,8 @@ void SD_BackupModeAllFiles () char buffer[128]; clearRightPane(); - DrawText(380,130," B a c k u p A l l "); + DrawText(386,130," B a c k u p A l l "); + DrawText(386,134,"_____________________"); writeStatusBar("Backing up all files.", "This may take a while."); /*** Get the directory listing from the memory card ***/ memitems = CardGetDirectory (MEM_CARD); @@ -458,16 +461,19 @@ void SD_RestoreMode () clearRightPane(); DrawText(380,130,"R e s t o r e M o d e"); + DrawText(380,134,"______________________"); writeStatusBar("Pick a file using UP or DOWN", "Press A to restore to Memory Card ") ; - setfontsize (14); -#ifdef HW_RVL - DrawText(40, 60, "Press R/1 to restore ALL savegames"); -#else - DrawText(40, 60, "Press R to restore ALL savegames"); -#endif - + writeStatusBar("Reading files... ", ""); files = SDGetFileList (1); + + setfontsize (14); +#ifdef HW_RVL + DrawText(40, 60, "Press R/1 to restore ALL savegames"); +#else + DrawText(40, 60, "Press R to restore ALL savegames"); +#endif + if (!files) { WaitPrompt ("No saved games in SD Card to restore !"); @@ -557,7 +563,11 @@ void SD_RawBackupMode () s32 writen = 0; char msg[64]; clearRightPane(); - DrawText(40, 230, "R A W B a c k u p M o d e"); + + DrawText(394,224,"___________________"); + DrawText(394,248,"R A W B a c k u p"); + DrawText(454,268,"M o d e"); + DrawText(394,272,"___________________"); writeStatusBar("Reading memory card... ", ""); if (BackupRawImage(MEM_CARD, &writen) == 1) @@ -587,9 +597,14 @@ void SD_RawRestoreMode () clearRightPane(); DrawText(380,130,"R A W R e s t o r e"); DrawText(450,150,"M o d e"); + DrawText(380,154,"_____________________"); + + writeStatusBar("Reading files... ", ""); + + files = SDGetFileList (0); + writeStatusBar("Pick a file using UP or DOWN", "Press A to restore to Memory Card "); - files = SDGetFileList (0); if (!files) { WaitPrompt ("No raw backups in SD Card to restore !"); @@ -640,10 +655,11 @@ int main () Initialise (); /*** Start video ***/ FT_Init (); /*** Start FreeType ***/ - + ClearScreen(); + ShowScreen(); #ifdef HW_RVL initialise_power(); - have_sd = initFAT(WaitPromptChoice ("Use internal SD or FAT 32 USB device?", "USB", "SD")); + have_sd = initFAT(WaitPromptChoice ("Use internal SD or FAT32 USB device?", "USB", "SD")); #else //Returns 1 (memory card in slot B, sd gecko in slot A) if A button was pressed and 0 if B button was pressed MEM_CARD = WaitPromptChoice ("Please select the slot where SD Gecko is inserted", "SLOT B", "SLOT A"); @@ -711,7 +727,6 @@ int main () case 700 : //Raw backup mode if (have_sd) { - DrawText(40, 230, "R A W B a c k u p M o d e"); SD_RawBackupMode(); }else { @@ -741,9 +756,11 @@ int main () VIDEO_WaitVSync (); if (CARD_Probe(MEM_CARD) > 0) { - DrawText(70, 230, "F o r m a t C a r d"); - DrawText(150, 250, "M o d e"); clearRightPane(); + DrawText(390,224,"____________________"); + DrawText(390,248,"F o r m a t C a r d"); + DrawText(460,268,"M o d e"); + DrawText(390,272,"____________________"); MC_FormatMode(MEM_CARD); }else if (MEM_CARD) diff --git a/source/mcard.c b/source/mcard.c index 6a0c698..5523010 100644 --- a/source/mcard.c +++ b/source/mcard.c @@ -796,12 +796,15 @@ void MC_DeleteMode(int slot) int selected = 0; int erase; clearRightPane(); - DrawText(390,130,"D e l e t e M o d e"); - writeStatusBar("Choose a file with UP button or DOWN button ", "Press A button to delete ") ; + DrawText(386,130,"D e l e t e M o d e"); + DrawText(386,134,"_____________________"); char msg[1024]; + writeStatusBar("Reading memory card... ", ""); /*** Get the directory listing from the memory card ***/ memitems = CardGetDirectory (slot); + + writeStatusBar("Choose a file with UP button or DOWN button ", "Press A button to delete ") ; /*** If it's a blank card, get out of here ***/ if (!memitems) diff --git a/source/sdsupp.c b/source/sdsupp.c index 007b33f..8803ce1 100644 --- a/source/sdsupp.c +++ b/source/sdsupp.c @@ -380,7 +380,7 @@ int SDLoadMCImageHeader(char *sdfilename) u16 l2 =(u16)(FileBuffer[0x38] << 8) | FileBuffer[0x39]; if (length != l2) { - sprintf(msg, "l1 = %x l2 = %x", length,l2); + sprintf(msg, "File length does not equal file size. Wrong extension? (l1 = %x l2 = %x)", length,l2); WaitPrompt (msg);//"File Length does not equal filesize"); return 0; } diff --git a/source/ttf/font.ttf b/source/ttf/font.ttf index 50de218..7d68f69 100644 Binary files a/source/ttf/font.ttf and b/source/ttf/font.ttf differ diff --git a/source/wiibk.bmp b/source/wiibk.bmp index 1cf2fc7..f8dd149 100644 Binary files a/source/wiibk.bmp and b/source/wiibk.bmp differ