From bc3cda6ae8166fe9c1ccaf515c5ca56a4e10ed81 Mon Sep 17 00:00:00 2001 From: Askot Date: Sat, 10 Dec 2016 21:20:35 -0700 Subject: [PATCH] -Restored Wiiflow mode plugin by fix94 -Restored fix filebrowser window overlapping -Change all files End Of Line to windows mode -Remove update check for updates --- .gitignore | 8 +- hbc/meta.xml | 4 +- readme.txt | 9 +- source/fileop.cpp | 1 - source/gui/gui_filebrowser.cpp | 13 +-- source/images/bg_game_selection.png | Bin 1409 -> 1506 bytes source/images/bg_game_selection_entry.png | Bin 35487 -> 251 bytes source/images/button_gamesave.png | Bin 10727 -> 3252 bytes source/images/button_gamesave_over.png | Bin 11512 -> 3262 bytes source/menu.cpp | 5 +- source/preferences.cpp | 55 +++++++++--- source/utils/FreeTypeGX.cpp | 12 +-- source/vba/apu/Gb_Apu_State.cpp | 1 + source/vbagx.cpp | 99 ++++++++++++++++++++-- source/vbagx.h | 30 ++++--- 15 files changed, 188 insertions(+), 49 deletions(-) diff --git a/.gitignore b/.gitignore index cae7e55..5623cd5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -/snes9x-gx.pnps -/snes9x-gx.pnproj -/build_wii -/executables +executables +build_wii +build_gc +dist diff --git a/hbc/meta.xml b/hbc/meta.xml index 7008792..7e65633 100644 --- a/hbc/meta.xml +++ b/hbc/meta.xml @@ -2,8 +2,8 @@ Visual Boy Advance GX Tantric - 2.3.5 - 20161210 + 2.3.6 + 20161211 GBA/GBC/GB Emulator A port of Visual Boy Advance - M to the Wii. diff --git a/readme.txt b/readme.txt index c911307..70a3e48 100644 --- a/readme.txt +++ b/readme.txt @@ -38,6 +38,13 @@ https://github.com/dborth/vbagx/releases |0Oื๘oท UPDATE HISTORY ทo๘ืO0| `จ•จจจจจ จจจจจจจจจจจจจจจจ จจจจจจจจจจจจจจจ จจจจจจจจจจจจจจจจจจจจ จจจจจจจจจจจจจ' +[2.3.6 - December 11, 2016] + +* Restored Wiiflow mode plugin by fix94 +* Restored fix filebrowser window overlapping +* Change all files End Of Line to windows mode +* Remove update check for updates + [2.3.5 - December 10, 2016] * Hide saving dialog that pops up briefly when returning from a game @@ -1159,7 +1166,7 @@ switched items since then. Additional coding Carl Kenner, dancinninjac Menu artwork the3seashells Menu sound Peter de Man - + จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ VBA GameCube/Wii SoftDev, emukidid diff --git a/source/fileop.cpp b/source/fileop.cpp index 94e7b42..e9ac29c 100644 --- a/source/fileop.cpp +++ b/source/fileop.cpp @@ -156,7 +156,6 @@ devicecallback (void *arg) usleep(THREAD_SLEEP); devsleep -= THREAD_SLEEP; } - UpdateCheck(); } return NULL; } diff --git a/source/gui/gui_filebrowser.cpp b/source/gui/gui_filebrowser.cpp index f91fa83..a3ea6e0 100644 --- a/source/gui/gui_filebrowser.cpp +++ b/source/gui/gui_filebrowser.cpp @@ -39,7 +39,7 @@ GuiFileBrowser::GuiFileBrowser(int w, int h) bgFileSelectionImg = new GuiImage(bgFileSelection); bgFileSelectionImg->SetParent(this); bgFileSelectionImg->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); - + bgFileSelectionEntry = new GuiImageData(bg_game_selection_entry_png); iconFolder = new GuiImageData(icon_folder_png); @@ -52,7 +52,7 @@ GuiFileBrowser::GuiFileBrowser(int w, int h) scrollbarImg = new GuiImage(scrollbar); scrollbarImg->SetParent(this); scrollbarImg->SetAlignment(ALIGN_RIGHT, ALIGN_TOP); - scrollbarImg->SetPosition(0, 30); + scrollbarImg->SetPosition(5, 30); arrowDown = new GuiImageData(scrollbar_arrowdown_png); arrowDownImg = new GuiImage(arrowDown); @@ -78,6 +78,7 @@ GuiFileBrowser::GuiFileBrowser(int w, int h) arrowUpBtn->SetTrigger(trigHeldA); arrowUpBtn->SetSoundOver(btnSoundOver); arrowUpBtn->SetSoundClick(btnSoundClick); + arrowUpBtn->SetPosition(5, 0); arrowDownBtn = new GuiButton(arrowDownImg->GetWidth(), arrowDownImg->GetHeight()); arrowDownBtn->SetParent(this); @@ -90,6 +91,7 @@ GuiFileBrowser::GuiFileBrowser(int w, int h) arrowDownBtn->SetTrigger(trigHeldA); arrowDownBtn->SetSoundOver(btnSoundOver); arrowDownBtn->SetSoundClick(btnSoundClick); + arrowDownBtn->SetPosition(5, 0); scrollbarBoxBtn = new GuiButton(scrollbarBoxImg->GetWidth(), scrollbarBoxImg->GetHeight()); scrollbarBoxBtn->SetParent(this); @@ -102,6 +104,7 @@ GuiFileBrowser::GuiFileBrowser(int w, int h) scrollbarBoxBtn->SetClickable(false); scrollbarBoxBtn->SetHoldable(true); scrollbarBoxBtn->SetTrigger(trigHeldA); + scrollbarBoxBtn->SetPosition(5, 30); for(int i=0; i 0) { position = positionWiimote; // follow wiimote cursor - scrollbarBoxBtn->SetPosition(0,position+36); + scrollbarBoxBtn->SetPosition(5,position+36); } else if(listChanged || numEntries != browser.numEntries) { @@ -446,7 +449,7 @@ void GuiFileBrowser::Update(GuiTrigger * t) { position = 156 * (browser.pageIndex + FILE_PAGESIZE/2) / (float)browser.numEntries; } - scrollbarBoxBtn->SetPosition(0,position+36); + scrollbarBoxBtn->SetPosition(5,position+36); } listChanged = false; @@ -454,4 +457,4 @@ void GuiFileBrowser::Update(GuiTrigger * t) if(updateCB) updateCB(this); -} \ No newline at end of file +} diff --git a/source/images/bg_game_selection.png b/source/images/bg_game_selection.png index 7978d45ec479936e51af36d6bce983ac618de3d4..f900327a3ddaea97e6e642a285d142b5203116ff 100644 GIT binary patch literal 1506 zcmeAS@N?(olHy`uVBq!ia0y~yU|ayiJREF5k){_(XMmJsiEBhjaDG}zd16s2gJVj5 zQmTSyZen_BP-hhPjd=@& z1bjA@6me=a1!NpN>-r+Vap_VEkLaw0dT)c4bk9~0nZi@1#nsxSxNx?DN4vz<0A5Zn zp?TY%@45He;=N$^Ebm=4b|1Lk&p91^?$gtIca|*I=we`yUTgo?!hCz>+U(jwzN3~> z&*xgapH|KALFuf;=E8SJb_zYu+Ijuqn-iPsnYXlw%<(S#X6elk=eR3SQvdm4i|vnO zw41LiEbrBy-(#$7$8aSf{^pd)cg1(TZ`jvctaabQqQvfvl!ZW>d2g$n{{w~}{H_^o z?5pcr?5F3q#fzN_x&89H&Hba2eZ^I48ER)7Pd~nFZ(`By?}_QjcRHCq1YPR&dgVTA zyY&0kmFn|beqNpVswnGB$(+-ffwoQAQ%bWWZ+|MZ_;)S;5%Ym;Z(dJbPv4U@k!H(f z7kpWE+vC@UwfW^1f1dUG@ijy(S(fwmcAT#J>1SJ*O(J7wO8mLM^A zu=ZD#)XzS?kK) z>;8YWgkeQ!c=WQ*48Ebe&BgZfxn@}DGGtAhRaE@3W}oR)_7`4rcE3Cv^f__Iw;wIS z%nQU;YTi`dQJq?Ri!rM6vukPTx0g#lT#jcy^ygL2WabB3&#XVUEo#!NNk7-*_#Mx_ zG5vAO3bA7C?T3%L3qSn6RKA6yA)Mp9&uUq5`M3F7Rf-qp_vVMb@tTKzb2=^D zAIbC@OQqkjWcnaUg&zJ~ut?U{HO4EX0~1m9Lt Q0~Xp0p00i_>zopr07JFEA^-pY literal 1409 zcmeAS@N?(olHy`uVBq!ia0y~yV6+Be9u793$nM30mw*&olDE4H!+#K5uy^@npa^Gy zM`SSr1Gg{;GcwGYBLNg-FY)wsWxvlN#ILO9$EaktaqI0Z`;0lI497k` z*Q@uLJ< zC9c+@W{lgKU7~ zXHPz}=%eE0y|K&h{!loneYf2C@NVOh|MR}^+a)+99R6AR^|{V}v)NB)7w?s?y^$lj z{-1K$+_J~LD(U01|Lf`cPnU0&Z`xI}^LN#*n_Bn&YJ-$s zRJpJI(tFa!PVr6IpSFJC?}-vvaW4Aat=<@$?{#9&>~+`YsaNi~sg?GsK2Ap0+1$o# zYUkhfR=yQ;{xx3od1F84;l`DpR;~YYEb8?ZX?``!_+#rnUP-@cWt3^UU{l`TD!rrT z=garswT(#Sae%K3GJG@~y!iPo(STk&7#vsrX!MIpd0(E1U3096_ zCfFXBNoaZ~HTcLmmWCUQ9kOVILK#C6I|hNK2*$;t5~v%)Ot5kcGr{)2OhVH`sljN* zLAi8wfM|drA|`cJzwVb*O+ZNwV#Z9OTc$h-*c`g&dTr$I?dsNVk0}F-7Rv0`ytvbEw`*}tN$xGEdZ&P>~PB9ymZ8l{%acu_Baz+OS1_1#E78Vd9 zn%A&@>GvCbSEU$IRx3ZUo3@v~m?1z$fI;ISJJSL6mdK II;Vst04)c=^`%T;wsodbWq#`w+`aV;O3^E zp!fk4Tt!5k1rdZQh@z>`5CYlbIe*3GCM|NG-wDqY=-zy_oJkF)j4>IfVlNnDO}guR zZ`^$y>dJk)hxp2D*)~7z-_zzK=G* G%e%jiW;N~r diff --git a/source/images/button_gamesave.png b/source/images/button_gamesave.png index e5ba780520cfef3c08921f49e9f4ee5efc14b9f4..389e920a90b8bfa9b38ccdc49180fe7a9b330dbe 100644 GIT binary patch literal 3252 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 Z`oGTfXPil4=0gAg002ovPDHLkV1n?!PYVD5 diff --git a/source/images/button_gamesave_over.png b/source/images/button_gamesave_over.png index 7c4abbb140b8ac6082873137b8468740a6e0b601..28bb6779bedefcf0b0724b5e28cb3c8befeefada 100644 GIT binary patch literal 3262 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 literal 11512 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 > 21 || newtime->tm_hour < 5) { sprintf(s, "Weather: Night Time"); @@ -3213,6 +3212,10 @@ static int MenuSettingsEmulation() sprintf (options.value[0], "Super Game Boy"); else if (GCSettings.GBHardware == 3) sprintf (options.value[0], "Game Boy"); + else if (GCSettings.GBHardware == 4) + sprintf (options.value[0], "Game Boy Advance"); + else if (GCSettings.GBHardware == 5) + sprintf (options.value[0], "Super Game Boy 2"); if (GCSettings.SGBBorder == 0) sprintf (options.value[1], "Off"); diff --git a/source/preferences.cpp b/source/preferences.cpp index ddb3852..e7ca24b 100644 --- a/source/preferences.cpp +++ b/source/preferences.cpp @@ -166,12 +166,16 @@ preparePrefsData () createXMLSetting("LoadMethod", "Load Method", toStr(GCSettings.LoadMethod)); createXMLSetting("SaveMethod", "Save Method", toStr(GCSettings.SaveMethod)); createXMLSetting("LoadFolder", "Load Folder", GCSettings.LoadFolder); + createXMLSetting("LastFileLoaded", "Last File Loaded", GCSettings.LastFileLoaded); createXMLSetting("SaveFolder", "Save Folder", GCSettings.SaveFolder); + createXMLSetting("AppendAuto", "Append Auto to .SAV Files", toStr(GCSettings.AppendAuto)); + //createXMLSetting("CheatFolder", "Cheats Folder", GCSettings.CheatFolder); createXMLSetting("ScreenshotsFolder", "Screenshots Folder", GCSettings.ScreenshotsFolder); + createXMLSetting("BorderFolder", "SGB Borders Folder", GCSettings.BorderFolder); createXMLSetting("CoverFolder", "Covers Folder", GCSettings.CoverFolder); createXMLSetting("ArtworkFolder", "Artworks Folder", GCSettings.ArtworkFolder); createXMLSetting("ImageFolder", "Image Folder", GCSettings.ImageFolder); - + createXMLSection("Network", "Network Settings"); createXMLSetting("smbip", "Share Computer IP", GCSettings.smbip); @@ -186,11 +190,14 @@ preparePrefsData () createXMLSetting("gbaZoomVert", "GBA Vertical Zoom Level", FtoStr(GCSettings.gbaZoomVert)); createXMLSetting("gbZoomHor", "GB Horizontal Zoom Level", FtoStr(GCSettings.gbZoomHor)); createXMLSetting("gbZoomVert", "GB Vertical Zoom Level", FtoStr(GCSettings.gbZoomVert)); + createXMLSetting("gbFixed", "GB Fixed Pixel Ratio", toStr(GCSettings.gbFixed)); + createXMLSetting("gbaFixed", "GBA Fixed Pixel Ratio", toStr(GCSettings.gbaFixed)); createXMLSetting("render", "Video Filtering", toStr(GCSettings.render)); createXMLSetting("scaling", "Aspect Ratio Correction", toStr(GCSettings.scaling)); createXMLSetting("xshift", "Horizontal Video Shift", toStr(GCSettings.xshift)); createXMLSetting("yshift", "Vertical Video Shift", toStr(GCSettings.yshift)); createXMLSetting("colorize", "Colorize Mono Gameboy", toStr(GCSettings.colorize)); + createXMLSetting("gbaFrameskip", "GBA Frameskip", toStr(GCSettings.gbaFrameskip)); createXMLSection("Menu", "Menu Settings"); @@ -214,6 +221,12 @@ preparePrefsData () createXMLController(btnmap[CTRLR_CLASSIC], "ccpadmap", "Classic Controller"); createXMLController(btnmap[CTRLR_NUNCHUK], "ncpadmap", "Nunchuk"); + createXMLSection("Emulation", "Emulation Settings"); + + createXMLSetting("OffsetMinutesUTC", "Offset from UTC (minutes)", toStr(GCSettings.OffsetMinutesUTC)); + createXMLSetting("GBHardware", "Hardware (GB/GBC)", toStr(GCSettings.GBHardware)); + createXMLSetting("SGBBorder", "Border (GB/GBC)", toStr(GCSettings.SGBBorder)); + int datasize = mxmlSaveString(xml, (char *)savebuffer, SAVEBUFFERSIZE, XMLSaveCallback); mxmlDelete(xml); @@ -456,6 +469,9 @@ decodePrefsData () result = false; else if(verMajor < 2) // less than version 2.0.0 result = false; // reset settings (sorry, should update settings instead) + else if((verMajor*100 + verMinor*10 + verPoint) > + (curMajor*100 + curMinor*10 + curPoint)) // some future version + result = false; // reset settings else result = true; } @@ -470,12 +486,16 @@ decodePrefsData () loadXMLSetting(&GCSettings.LoadMethod, "LoadMethod"); loadXMLSetting(&GCSettings.SaveMethod, "SaveMethod"); loadXMLSetting(GCSettings.LoadFolder, "LoadFolder", sizeof(GCSettings.LoadFolder)); + loadXMLSetting(GCSettings.LastFileLoaded, "LastFileLoaded", sizeof(GCSettings.LastFileLoaded)); loadXMLSetting(GCSettings.SaveFolder, "SaveFolder", sizeof(GCSettings.SaveFolder)); + loadXMLSetting(&GCSettings.AppendAuto, "AppendAuto"); + //loadXMLSetting(GCSettings.CheatFolder, "CheatFolder", sizeof(GCSettings.CheatFolder)); loadXMLSetting(GCSettings.ScreenshotsFolder, "ScreenshotsFolder", sizeof(GCSettings.ScreenshotsFolder)); + loadXMLSetting(GCSettings.BorderFolder, "BorderFolder", sizeof(GCSettings.BorderFolder)); loadXMLSetting(GCSettings.CoverFolder, "CoverFolder", sizeof(GCSettings.CoverFolder)); loadXMLSetting(GCSettings.ArtworkFolder, "ArtworkFolder", sizeof(GCSettings.ArtworkFolder)); loadXMLSetting(GCSettings.ImageFolder, "ImageFolder", sizeof(GCSettings.ImageFolder)); - + // Network Settings loadXMLSetting(GCSettings.smbip, "smbip", sizeof(GCSettings.smbip)); @@ -490,11 +510,14 @@ decodePrefsData () loadXMLSetting(&GCSettings.gbaZoomVert, "gbaZoomVert"); loadXMLSetting(&GCSettings.gbZoomHor, "gbZoomHor"); loadXMLSetting(&GCSettings.gbZoomVert, "gbZoomVert"); + loadXMLSetting(&GCSettings.gbaFixed, "gbaFixed"); + loadXMLSetting(&GCSettings.gbFixed, "gbFixed"); loadXMLSetting(&GCSettings.render, "render"); loadXMLSetting(&GCSettings.scaling, "scaling"); loadXMLSetting(&GCSettings.xshift, "xshift"); loadXMLSetting(&GCSettings.yshift, "yshift"); loadXMLSetting(&GCSettings.colorize, "colorize"); + loadXMLSetting(&GCSettings.gbaFrameskip, "gbaFrameskip"); // Menu Settings @@ -506,11 +529,6 @@ decodePrefsData () loadXMLSetting(&GCSettings.language, "language"); loadXMLSetting(&GCSettings.PreviewImage, "PreviewImage"); - // Emulation Settings - - loadXMLSetting(&GCSettings.BasicPalette, "BasicPalette"); - - // Controller Settings loadXMLSetting(&GCSettings.WiiControls, "WiiControls"); @@ -518,6 +536,14 @@ decodePrefsData () loadXMLController(btnmap[CTRLR_WIIMOTE], "wmpadmap"); loadXMLController(btnmap[CTRLR_CLASSIC], "ccpadmap"); loadXMLController(btnmap[CTRLR_NUNCHUK], "ncpadmap"); + + // Emulation Settings + + loadXMLSetting(&GCSettings.OffsetMinutesUTC, "OffsetMinutesUTC"); + loadXMLSetting(&GCSettings.GBHardware, "GBHardware"); + loadXMLSetting(&GCSettings.SGBBorder, "SGBBorder"); + loadXMLSetting(&GCSettings.BasicPalette, "BasicPalette"); + } mxmlDelete(xml); } @@ -592,9 +618,9 @@ void FixInvalidSettings() GCSettings.SFXVolume = 40; if(GCSettings.language < 0 || GCSettings.language >= LANG_LENGTH) GCSettings.language = LANG_ENGLISH; - if(!(GCSettings.render >= 0 && GCSettings.render < 3)) + if(!(GCSettings.render >= 0 && GCSettings.render < 5)) GCSettings.render = 1; - if(!(GCSettings.videomode >= 0 && GCSettings.videomode < 5)) + if(!(GCSettings.videomode >= 0 && GCSettings.videomode < 7)) GCSettings.videomode = 0; } @@ -613,13 +639,16 @@ DefaultSettings () GCSettings.SaveMethod = DEVICE_AUTO; // Auto, SD, USB, Network (SMB) sprintf (GCSettings.LoadFolder, "%s/roms", APPFOLDER); // Path to game files sprintf (GCSettings.SaveFolder, "%s/saves", APPFOLDER); // Path to save files - sprintf (GCSettings.ScreenshotsFolder, "%s/screenshots", APPFOLDER); // Path to screenshot files + sprintf (GCSettings.CheatFolder, "%s/cheats", APPFOLDER); // Path to cheat files + sprintf (GCSettings.ScreenshotsFolder, "%s/screenshots", APPFOLDER); + sprintf (GCSettings.BorderFolder, "%s/borders", APPFOLDER); sprintf (GCSettings.CoverFolder, "%s/covers", APPFOLDER); // Path to cover files sprintf (GCSettings.ArtworkFolder, "%s/artworks", APPFOLDER); // Path to artwork files sprintf (GCSettings.ImageFolder, "%s/screenshots", APPFOLDER); GCSettings.AutoLoad = 1; GCSettings.AutoSave = 1; + GCSettings.AppendAuto = 1; GCSettings.WiimoteOrientation = 0; @@ -627,6 +656,8 @@ DefaultSettings () GCSettings.gbaZoomVert = 1.0; // GBA vertical zoom level GCSettings.gbZoomHor = 1.0; // GBA horizontal zoom level GCSettings.gbZoomVert = 1.0; // GBA vertical zoom level + GCSettings.gbFixed = 0; // not fixed - use zoom level + GCSettings.gbaFixed = 0; // not fixed - use zoom level GCSettings.videomode = 0; // automatic video mode detection GCSettings.render = 1; // Filtered GCSettings.scaling = 1; // partial stretch @@ -635,6 +666,7 @@ DefaultSettings () GCSettings.xshift = 0; // horizontal video shift GCSettings.yshift = 0; // vertical video shift GCSettings.colorize = 0; // Colorize mono gameboy games + GCSettings.gbaFrameskip = 1; // Turn auto-frameskip on for GBA games GCSettings.WiimoteOrientation = 0; GCSettings.ExitAction = 0; @@ -656,6 +688,9 @@ DefaultSettings () #else GCSettings.language = LANG_ENGLISH; #endif + GCSettings.OffsetMinutesUTC = 0; + GCSettings.GBHardware = 0; + GCSettings.SGBBorder = 0; } diff --git a/source/utils/FreeTypeGX.cpp b/source/utils/FreeTypeGX.cpp index 8c2f936..1fa9306 100644 --- a/source/utils/FreeTypeGX.cpp +++ b/source/utils/FreeTypeGX.cpp @@ -244,14 +244,14 @@ ftgxCharData *FreeTypeGX::cacheGlyphData(wchar_t charCode) textureHeight = adjustTextureHeight(glyphBitmap->rows); this->fontData[charCode] = (ftgxCharData){ - ftSlot->bitmap_left, - ftSlot->advance.x >> 6, - gIndex, + (s16)(ftSlot->bitmap_left), + (u16)(ftSlot->advance.x >> 6), + (u16)(gIndex), textureWidth, textureHeight, - ftSlot->bitmap_top, - ftSlot->bitmap_top, - glyphBitmap->rows - ftSlot->bitmap_top, + (s16)(ftSlot->bitmap_top), + (s16)(ftSlot->bitmap_top), + (s16)(glyphBitmap->rows - ftSlot->bitmap_top), NULL }; this->loadGlyphData(glyphBitmap, &this->fontData[charCode]); diff --git a/source/vba/apu/Gb_Apu_State.cpp b/source/vba/apu/Gb_Apu_State.cpp index 7dedcc3..75c8018 100644 --- a/source/vba/apu/Gb_Apu_State.cpp +++ b/source/vba/apu/Gb_Apu_State.cpp @@ -116,3 +116,4 @@ blargg_err_t Gb_Apu::load_state( gb_apu_state_t const& in ) return 0; } + diff --git a/source/vbagx.cpp b/source/vbagx.cpp index 224a1db..da2af7c 100644 --- a/source/vbagx.cpp +++ b/source/vbagx.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #ifdef HW_RVL #include @@ -77,6 +78,26 @@ static void ExitCleanup() void (*PSOReload) () = (void (*)()) 0x80001800; #endif +void ExitToWiiflow() +{ + ShutoffRumble(); + SavePrefs(SILENT); + if (ROMLoaded && !ConfigRequested && GCSettings.AutoSave == 1) + SaveBatteryOrStateAuto(FILE_SRAM, SILENT); + ExitCleanup(); + + if( !!*(u32*)0x80001800 ) + { + // Were we launched via HBC? (or via wiiflows stub replacement? :P) + exit(1); + } + else + { + // Wii channel support + SYS_ResetSystem( SYS_RETURNTOMENU, 0, 0 ); + } +} + void ExitApp() { #ifdef HW_RVL @@ -379,6 +400,64 @@ int main(int argc, char *argv[]) gameScreenPng = (u8 *)malloc(512*1024); InitGUIThreads(); + bool autoboot = false; + if(argc > 3 && argv[1] != NULL && argv[2] != NULL && argv[3] != NULL) + { + autoboot = true; + ResetBrowser(); + LoadPrefs(); + if(strcasestr(argv[1], "sd:/") != NULL) + { + GCSettings.SaveMethod = DEVICE_SD; + GCSettings.LoadMethod = DEVICE_SD; + } + else + { + GCSettings.SaveMethod = DEVICE_USB; + GCSettings.LoadMethod = DEVICE_USB; + } + SavePrefs(SILENT); + selectLoadedFile = 1; + std::string dir(argv[1]); + dir.assign(&dir[dir.find_last_of(":") + 2]); + char arg_filename[1024]; + strncpy(arg_filename, argv[2], sizeof(arg_filename)); + strncpy(GCSettings.LoadFolder, dir.c_str(), sizeof(GCSettings.LoadFolder)); + OpenGameList(); + strncpy(GCSettings.Exit_Dol_File, argv[3], sizeof(GCSettings.Exit_Dol_File)); + if(argc > 5 && argv[4] != NULL && argv[5] != NULL) + { + sscanf(argv[4], "%08x", &GCSettings.Exit_Channel[0]); + sscanf(argv[5], "%08x", &GCSettings.Exit_Channel[1]); + } + else + { + GCSettings.Exit_Channel[0] = 0x00010008; + GCSettings.Exit_Channel[1] = 0x57494948; + } + if(argc > 6 && argv[6] != NULL) + strncpy(GCSettings.LoaderName, argv[6], sizeof(GCSettings.LoaderName)); + else + snprintf(GCSettings.LoaderName, sizeof(GCSettings.LoaderName), "WiiFlow"); + for(int i = 0; i < browser.numEntries; i++) + { + // Skip it + if (strcmp(browserList[i].filename, ".") == 0 || strcmp(browserList[i].filename, "..") == 0) + continue; + if(strcasestr(browserList[i].filename, arg_filename) != NULL) + { + browser.selIndex = i; + if(IsSz()) + { + BrowserLoadSz(); + browser.selIndex = 1; + } + break; + } + } + BrowserLoadFile(); + } + while(1) // main loop { // go back to checking if devices were inserted/removed @@ -387,13 +466,21 @@ int main(int argc, char *argv[]) SwitchAudioMode(1); - if(!ROMLoaded) - MainMenu(MENU_GAMESELECTION); - else - MainMenu(MENU_GAME); + if(!autoboot) + { + if(!ROMLoaded) + MainMenu(MENU_GAMESELECTION); + else + MainMenu(MENU_GAME); + + ConfigRequested = 0; + ScreenshotRequested = 0; + } + else if(ROMLoaded && autoboot) + autoboot = false; + else + ExitApp(); - ConfigRequested = 0; - ScreenshotRequested = 0; SwitchAudioMode(0); // stop checking if devices were removed/inserted diff --git a/source/vbagx.h b/source/vbagx.h index 988706f..0b59f90 100644 --- a/source/vbagx.h +++ b/source/vbagx.h @@ -16,7 +16,7 @@ #include "utils/FreeTypeGX.h" #define APPNAME "Visual Boy Advance GX" -#define APPVERSION "2.3.5" +#define APPVERSION "2.3.6" #define APPFOLDER "vbagx" #define PREF_FILE_NAME "settings.xml" #define PAL_FILE_NAME "palettes.xml" @@ -68,23 +68,23 @@ enum struct SGCSettings { float gbaZoomHor; // GBA horizontal zoom amount - float gbaZoomVert; // GBA vertical zoom amount - float gbZoomHor; // GB horizontal zoom amount - float gbZoomVert; // GB vertical zoom amount - int gbFixed; - int gbaFixed; + float gbaZoomVert; // GBA vertical zoom amount + float gbZoomHor; // GB horizontal zoom amount + float gbZoomVert; // GB vertical zoom amount + int gbFixed; + int gbaFixed; int AutoLoad; - int AutoSave; - int LoadMethod; // For ROMS: Auto, SD, DVD, USB, Network (SMB) + int AutoSave; + int LoadMethod; // For ROMS: Auto, SD, DVD, USB, Network (SMB) int SaveMethod; // For SRAM, Freeze, Prefs: Auto, SD, USB, SMB - int AppendAuto; // 0 - no, 1 - yes - int videomode; // 0 - automatic, 1 - NTSC (480i), 2 - Progressive (480p), 3 - PAL (50Hz), 4 - PAL (60Hz) - int scaling; // 0 - default, 1 - partial stretch, 2 - stretch to fit, 3 - widescreen correction + int AppendAuto; // 0 - no, 1 - yes + int videomode; // 0 - automatic, 1 - NTSC (480i), 2 - Progressive (480p), 3 - PAL (50Hz), 4 - PAL (60Hz) + int scaling; // 0 - default, 1 - partial stretch, 2 - stretch to fit, 3 - widescreen correction int render; // 0 - original, 1 - filtered, 2 - unfiltered int xshift; // video output shift int yshift; - int colorize; // colorize Mono Gameboy games - int gbaFrameskip; // turn on auto-frameskip for GBA games + int colorize; // colorize Mono Gameboy games + int gbaFrameskip; // turn on auto-frameskip for GBA games int WiiControls; // Match Wii Game int WiimoteOrientation; int ExitAction; @@ -108,6 +108,10 @@ struct SGCSettings char ImageFolder[MAXPATHLEN]; //Saved image folder path char BorderFolder[MAXPATHLEN]; // Path to Super Game Boy border files + char Exit_Dol_File[MAXPATHLEN]; // Exit Path + char LoaderName[20]; // Menu Loader Name + u32 Exit_Channel[2]; // Exit Channel + char smbip[80]; char smbuser[20]; char smbpwd[20];