mirror of
https://github.com/dborth/vbagx.git
synced 2024-11-25 12:06:53 +01:00
if arguments are passed to the emu to autoboot a game, then the main
menu button should be labelled Exit, and leave the emu instead of going back to the main menu. cleanup autoboot code.
This commit is contained in:
parent
eabe325fb0
commit
c64e7a2f70
@ -31,6 +31,10 @@
|
|||||||
#include "input.h"
|
#include "input.h"
|
||||||
#include "gcunzip.h"
|
#include "gcunzip.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
extern char* strcasestr(const char *, const char *);
|
||||||
|
}
|
||||||
|
|
||||||
BROWSERINFO browser;
|
BROWSERINFO browser;
|
||||||
BROWSERENTRY * browserList = NULL; // list of files/folders in browser
|
BROWSERENTRY * browserList = NULL; // list of files/folders in browser
|
||||||
|
|
||||||
@ -654,3 +658,32 @@ OpenGameList ()
|
|||||||
BrowserChangeFolder();
|
BrowserChangeFolder();
|
||||||
return browser.numEntries;
|
return browser.numEntries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AutoloadGame(char* filepath, char* filename) {
|
||||||
|
ResetBrowser();
|
||||||
|
|
||||||
|
selectLoadedFile = 1;
|
||||||
|
std::string dir(filepath);
|
||||||
|
dir.assign(&dir[dir.find_last_of(":") + 2]);
|
||||||
|
strncpy(GCSettings.LoadFolder, dir.c_str(), sizeof(GCSettings.LoadFolder));
|
||||||
|
OpenGameList();
|
||||||
|
|
||||||
|
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, filename) != NULL) {
|
||||||
|
browser.selIndex = i;
|
||||||
|
if(IsSz()) {
|
||||||
|
BrowserLoadSz();
|
||||||
|
browser.selIndex = 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(BrowserLoadFile() > 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
@ -73,5 +73,6 @@ bool IsDeviceRoot(char * path);
|
|||||||
int BrowserLoadSz();
|
int BrowserLoadSz();
|
||||||
int BrowserChangeFolder();
|
int BrowserChangeFolder();
|
||||||
int BrowserLoadFile();
|
int BrowserLoadFile();
|
||||||
|
bool AutoloadGame(char* filepath, char* filename);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1227,6 +1227,9 @@ static int MenuGame()
|
|||||||
gameSettingsBtn.SetEffectGrow();
|
gameSettingsBtn.SetEffectGrow();
|
||||||
|
|
||||||
GuiText mainmenuBtnTxt("Main Menu", 22, (GXColor){0, 0, 0, 255});
|
GuiText mainmenuBtnTxt("Main Menu", 22, (GXColor){0, 0, 0, 255});
|
||||||
|
if(GCSettings.AutoloadGame) {
|
||||||
|
mainmenuBtnTxt.SetText("Exit");
|
||||||
|
}
|
||||||
GuiImage mainmenuBtnImg(&btnOutline);
|
GuiImage mainmenuBtnImg(&btnOutline);
|
||||||
GuiImage mainmenuBtnImgOver(&btnOutlineOver);
|
GuiImage mainmenuBtnImgOver(&btnOutlineOver);
|
||||||
GuiButton mainmenuBtn(btnOutline.GetWidth(), btnOutline.GetHeight());
|
GuiButton mainmenuBtn(btnOutline.GetWidth(), btnOutline.GetHeight());
|
||||||
@ -1454,14 +1457,19 @@ static int MenuGame()
|
|||||||
gameScreen = NULL;
|
gameScreen = NULL;
|
||||||
free(gameScreenPng);
|
free(gameScreenPng);
|
||||||
gameScreenPng = NULL;
|
gameScreenPng = NULL;
|
||||||
gameScreenImg = new GuiImage(screenwidth, screenheight, (GXColor){236, 226, 238, 255});
|
if(GCSettings.AutoloadGame) {
|
||||||
gameScreenImg->ColorStripe(10);
|
ExitApp();
|
||||||
mainWindow->Insert(gameScreenImg, 0);
|
}
|
||||||
ResumeGui();
|
else {
|
||||||
#ifndef NO_SOUND
|
gameScreenImg = new GuiImage(screenwidth, screenheight, (GXColor){236, 226, 238, 255});
|
||||||
bgMusic->Play(); // startup music
|
gameScreenImg->ColorStripe(10);
|
||||||
#endif
|
mainWindow->Insert(gameScreenImg, 0);
|
||||||
menu = MENU_GAMESELECTION;
|
ResumeGui();
|
||||||
|
#ifndef NO_SOUND
|
||||||
|
bgMusic->Play(); // startup music
|
||||||
|
#endif
|
||||||
|
menu = MENU_GAMESELECTION;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(closeBtn.GetState() == STATE_CLICKED)
|
else if(closeBtn.GetState() == STATE_CLICKED)
|
||||||
|
@ -665,6 +665,7 @@ DefaultSettings ()
|
|||||||
|
|
||||||
GCSettings.WiimoteOrientation = 0;
|
GCSettings.WiimoteOrientation = 0;
|
||||||
GCSettings.ExitAction = 0;
|
GCSettings.ExitAction = 0;
|
||||||
|
GCSettings.AutoloadGame = 0;
|
||||||
GCSettings.MusicVolume = 20;
|
GCSettings.MusicVolume = 20;
|
||||||
GCSettings.SFXVolume = 40;
|
GCSettings.SFXVolume = 40;
|
||||||
GCSettings.Rumble = 1;
|
GCSettings.Rumble = 1;
|
||||||
|
181
source/vbagx.cpp
181
source/vbagx.cpp
@ -78,26 +78,6 @@ static void ExitCleanup()
|
|||||||
void (*PSOReload) () = (void (*)()) 0x80001800;
|
void (*PSOReload) () = (void (*)()) 0x80001800;
|
||||||
#endif
|
#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()
|
void ExitApp()
|
||||||
{
|
{
|
||||||
#ifdef HW_RVL
|
#ifdef HW_RVL
|
||||||
@ -111,49 +91,63 @@ void ExitApp()
|
|||||||
|
|
||||||
ExitCleanup();
|
ExitCleanup();
|
||||||
|
|
||||||
if(ShutdownRequested)
|
if(ShutdownRequested) {
|
||||||
SYS_ResetSystem(SYS_POWEROFF_STANDBY, 0, 0);
|
SYS_ResetSystem(SYS_POWEROFF_STANDBY, 0, 0);
|
||||||
|
}
|
||||||
#ifdef HW_RVL
|
else if(GCSettings.AutoloadGame) {
|
||||||
if(GCSettings.ExitAction == 0) // Auto
|
if( !!*(u32*)0x80001800 )
|
||||||
{
|
{
|
||||||
char * sig = (char *)0x80001804;
|
// Were we launched via HBC? (or via wiiflows stub replacement? :P)
|
||||||
if(
|
exit(1);
|
||||||
sig[0] == 'S' &&
|
}
|
||||||
sig[1] == 'T' &&
|
|
||||||
sig[2] == 'U' &&
|
|
||||||
sig[3] == 'B' &&
|
|
||||||
sig[4] == 'H' &&
|
|
||||||
sig[5] == 'A' &&
|
|
||||||
sig[6] == 'X' &&
|
|
||||||
sig[7] == 'X')
|
|
||||||
GCSettings.ExitAction = 3; // Exit to HBC
|
|
||||||
else
|
else
|
||||||
GCSettings.ExitAction = 1; // HBC not found
|
{
|
||||||
|
// Wii channel support
|
||||||
|
SYS_ResetSystem( SYS_RETURNTOMENU, 0, 0 );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
else {
|
||||||
|
#ifdef HW_RVL
|
||||||
|
if(GCSettings.ExitAction == 0) // Auto
|
||||||
|
{
|
||||||
|
char * sig = (char *)0x80001804;
|
||||||
|
if(
|
||||||
|
sig[0] == 'S' &&
|
||||||
|
sig[1] == 'T' &&
|
||||||
|
sig[2] == 'U' &&
|
||||||
|
sig[3] == 'B' &&
|
||||||
|
sig[4] == 'H' &&
|
||||||
|
sig[5] == 'A' &&
|
||||||
|
sig[6] == 'X' &&
|
||||||
|
sig[7] == 'X')
|
||||||
|
GCSettings.ExitAction = 3; // Exit to HBC
|
||||||
|
else
|
||||||
|
GCSettings.ExitAction = 1; // HBC not found
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if(GCSettings.ExitAction == 1) // Exit to Menu
|
if(GCSettings.ExitAction == 1) // Exit to Menu
|
||||||
{
|
{
|
||||||
#ifdef HW_RVL
|
#ifdef HW_RVL
|
||||||
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
|
SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);
|
||||||
#else
|
#else
|
||||||
#define SOFTRESET_ADR ((volatile u32*)0xCC003024)
|
#define SOFTRESET_ADR ((volatile u32*)0xCC003024)
|
||||||
*SOFTRESET_ADR = 0x00000000;
|
*SOFTRESET_ADR = 0x00000000;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else if(GCSettings.ExitAction == 2) // Shutdown Wii
|
else if(GCSettings.ExitAction == 2) // Shutdown Wii
|
||||||
{
|
{
|
||||||
SYS_ResetSystem(SYS_POWEROFF_STANDBY, 0, 0);
|
SYS_ResetSystem(SYS_POWEROFF_STANDBY, 0, 0);
|
||||||
}
|
}
|
||||||
else // Exit to Loader
|
else // Exit to Loader
|
||||||
{
|
{
|
||||||
#ifdef HW_RVL
|
#ifdef HW_RVL
|
||||||
exit(0);
|
exit(0);
|
||||||
#else
|
#else
|
||||||
if (psoid[0] == PSOSDLOADID)
|
if (psoid[0] == PSOSDLOADID)
|
||||||
PSOReload();
|
PSOReload();
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -399,10 +393,7 @@ int main(int argc, char *argv[])
|
|||||||
InitGUIThreads();
|
InitGUIThreads();
|
||||||
|
|
||||||
bool autoboot = false;
|
bool autoboot = false;
|
||||||
if(argc > 2 && argv[1] != NULL && argv[2] != NULL)
|
if(argc > 2 && argv[1] != NULL && argv[2] != NULL) {
|
||||||
{
|
|
||||||
autoboot = true;
|
|
||||||
ResetBrowser();
|
|
||||||
LoadPrefs();
|
LoadPrefs();
|
||||||
if(strcasestr(argv[1], "sd:/") != NULL)
|
if(strcasestr(argv[1], "sd:/") != NULL)
|
||||||
{
|
{
|
||||||
@ -415,69 +406,29 @@ int main(int argc, char *argv[])
|
|||||||
GCSettings.LoadMethod = DEVICE_USB;
|
GCSettings.LoadMethod = DEVICE_USB;
|
||||||
}
|
}
|
||||||
SavePrefs(SILENT);
|
SavePrefs(SILENT);
|
||||||
selectLoadedFile = 1;
|
|
||||||
std::string dir(argv[1]);
|
GCSettings.AutoloadGame = AutoloadGame(argv[1], argv[2]);
|
||||||
dir.assign(&dir[dir.find_last_of(":") + 2]);
|
autoboot = GCSettings.AutoloadGame;
|
||||||
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, argc > 3 && argv[3] != NULL ? 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
|
while(1) // main loop
|
||||||
{
|
{
|
||||||
// go back to checking if devices were inserted/removed
|
if(!autoboot) {
|
||||||
// since we're entering the menu
|
// go back to checking if devices were inserted/removed
|
||||||
ResumeDeviceThread();
|
// since we're entering the menu
|
||||||
|
ResumeDeviceThread();
|
||||||
|
|
||||||
SwitchAudioMode(1);
|
SwitchAudioMode(1);
|
||||||
|
|
||||||
if(!autoboot)
|
|
||||||
{
|
|
||||||
if(!ROMLoaded)
|
if(!ROMLoaded)
|
||||||
MainMenu(MENU_GAMESELECTION);
|
MainMenu(MENU_GAMESELECTION);
|
||||||
else
|
else
|
||||||
MainMenu(MENU_GAME);
|
MainMenu(MENU_GAME);
|
||||||
|
|
||||||
ConfigRequested = 0;
|
|
||||||
ScreenshotRequested = 0;
|
|
||||||
}
|
}
|
||||||
else if(ROMLoaded && autoboot)
|
|
||||||
autoboot = false;
|
autoboot = false;
|
||||||
else
|
ConfigRequested = 0;
|
||||||
ExitApp();
|
ScreenshotRequested = 0;
|
||||||
|
|
||||||
SwitchAudioMode(0);
|
SwitchAudioMode(0);
|
||||||
|
|
||||||
|
@ -94,6 +94,7 @@ struct SGCSettings
|
|||||||
int Rumble;
|
int Rumble;
|
||||||
int language;
|
int language;
|
||||||
int PreviewImage;
|
int PreviewImage;
|
||||||
|
int AutoloadGame;
|
||||||
|
|
||||||
int OffsetMinutesUTC; // Used for clock on MBC3 and TAMA5
|
int OffsetMinutesUTC; // Used for clock on MBC3 and TAMA5
|
||||||
int GBHardware; // Mapped to gbEmulatorType in VBA
|
int GBHardware; // Mapped to gbEmulatorType in VBA
|
||||||
@ -109,10 +110,6 @@ struct SGCSettings
|
|||||||
char ImageFolder[MAXPATHLEN]; //Saved image folder path
|
char ImageFolder[MAXPATHLEN]; //Saved image folder path
|
||||||
char BorderFolder[MAXPATHLEN]; // Path to Super Game Boy border files
|
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 smbip[80];
|
||||||
char smbuser[20];
|
char smbuser[20];
|
||||||
char smbpwd[20];
|
char smbpwd[20];
|
||||||
|
Loading…
Reference in New Issue
Block a user