mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2024-11-30 15:14:18 +01:00
- fixed the playing of All banners
- changed the order of bootup settings - beta 9
This commit is contained in:
parent
aa89fb6eb6
commit
1bc0279056
Binary file not shown.
BIN
out/boot.dol
BIN
out/boot.dol
Binary file not shown.
Before Width: | Height: | Size: 4.4 MiB After Width: | Height: | Size: 4.4 MiB |
@ -92,7 +92,7 @@ int GCTCheats::createGCT(const char * filename)
|
|||||||
int GCTCheats::createTXT(const char * filename)
|
int GCTCheats::createTXT(const char * filename)
|
||||||
{
|
{
|
||||||
|
|
||||||
// save gct file
|
// save txt file
|
||||||
std::fstream file;
|
std::fstream file;
|
||||||
file.open(filename, std::ios::out);
|
file.open(filename, std::ios::out);
|
||||||
|
|
||||||
|
@ -14,61 +14,62 @@
|
|||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
//!Handles Ocarina TXT Cheatfiles
|
//!Handles Ocarina TXT Cheatfiles
|
||||||
class GCTCheats {
|
class GCTCheats
|
||||||
private:
|
{
|
||||||
string sGameID;
|
private:
|
||||||
string sGameTitle;
|
string sGameID;
|
||||||
string sCheatName[MAXCHEATS];
|
string sGameTitle;
|
||||||
string sCheats[MAXCHEATS];
|
string sCheatName[MAXCHEATS];
|
||||||
string sCheatComment[MAXCHEATS];
|
string sCheatComment[MAXCHEATS];
|
||||||
unsigned int iCntCheats;
|
string sCheats[MAXCHEATS];
|
||||||
|
unsigned int iCntCheats;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//!Array which shows which cheat is selected
|
//!Array which shows which cheat is selected
|
||||||
bool sCheatSelected[MAXCHEATS];
|
bool sCheatSelected[MAXCHEATS];
|
||||||
//!Constructor
|
//!Constructor
|
||||||
GCTCheats(void);
|
GCTCheats(void);
|
||||||
//!Destructor
|
//!Destructor
|
||||||
~GCTCheats(void);
|
~GCTCheats(void);
|
||||||
//!Open txt file with cheats
|
//!Open txt file with cheats
|
||||||
//!\param filename name of TXT file
|
//!\param filename name of TXT file
|
||||||
//!\return error code
|
//!\return error code
|
||||||
int openTxtfile(const char * filename);
|
int openTxtfile(const char * filename);
|
||||||
//!Creates GCT file
|
//!Creates GCT file
|
||||||
//!\param filename name of GCT file
|
//!\param filename name of GCT file
|
||||||
//!\return error code
|
//!\return error code
|
||||||
int createGCT(const char * filename);
|
int createGCT(const char * filename);
|
||||||
//!Creates TXT file
|
//!Creates TXT file
|
||||||
//!\param filename name of GCT file
|
//!\param filename name of GCT file
|
||||||
//!\return error code
|
//!\return error code
|
||||||
int createTXT(const char * filename);
|
int createTXT(const char * filename);
|
||||||
//!Gets Count cheats
|
//!Gets Count cheats
|
||||||
//!\return Count cheats
|
//!\return Count cheats
|
||||||
unsigned int getCnt();
|
unsigned int getCnt();
|
||||||
//!Gets Game Name
|
//!Gets Game Name
|
||||||
//!\return Game Name
|
//!\return Game Name
|
||||||
string getGameName(void);
|
string getGameName(void);
|
||||||
//!Gets GameID
|
//!Gets GameID
|
||||||
//!\return GameID
|
//!\return GameID
|
||||||
string getGameID(void);
|
string getGameID(void);
|
||||||
//!Gets cheat data
|
//!Gets cheat data
|
||||||
//!\return cheat data
|
//!\return cheat data
|
||||||
string getCheat(unsigned int nr);
|
string getCheat(unsigned int nr);
|
||||||
//!Gets Cheat Name
|
//!Gets Cheat Name
|
||||||
//!\return Cheat Name
|
//!\return Cheat Name
|
||||||
string getCheatName(unsigned int nr);
|
string getCheatName(unsigned int nr);
|
||||||
//!Gets Cheat Comment
|
//!Gets Cheat Comment
|
||||||
//!\return Cheat Comment
|
//!\return Cheat Comment
|
||||||
string getCheatComment(unsigned int nr);
|
string getCheatComment(unsigned int nr);
|
||||||
//!Check if string is a code
|
//!Check if string is a code
|
||||||
//!\return true/false
|
//!\return true/false
|
||||||
bool IsCode(const std::string& s);
|
bool IsCode(const std::string& s);
|
||||||
//!Check if string is a code
|
//!Check if string is a code
|
||||||
//!\return 0=ok, 1="X", 2=no code
|
//!\return 0=ok, 1="X", 2=no code
|
||||||
int IsCodeEx(const std::string& s);
|
int IsCodeEx(const std::string& s);
|
||||||
private:
|
private:
|
||||||
//!Resets the internal state, as if no file was loaded
|
//!Resets the internal state, as if no file was loaded
|
||||||
void Reset();
|
void Reset();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* _GCT_H */
|
#endif /* _GCT_H */
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
#define APP_NAME "WiiFlow WFL"
|
#define APP_NAME "WiiFlow WFL"
|
||||||
#define APP_VERSION "5.5.0 beta 8"
|
#define APP_VERSION "5.5.0 beta 9"
|
||||||
|
|
||||||
#define APP_DATA_DIR "wiiflow"
|
#define APP_DATA_DIR "wiiflow"
|
||||||
#define APPS_DIR "apps/wiiflow"
|
#define APPS_DIR "apps/wiiflow"
|
||||||
|
@ -105,14 +105,11 @@ CMenu::CMenu()
|
|||||||
|
|
||||||
bool CMenu::init(bool usb_mounted)
|
bool CMenu::init(bool usb_mounted)
|
||||||
{
|
{
|
||||||
SoundHandle.Init();
|
|
||||||
m_gameSound.SetVoice(1);
|
|
||||||
/* Clear Playlog to prevent wiiflow from being added to it */
|
/* Clear Playlog to prevent wiiflow from being added to it */
|
||||||
Playlog_Delete();
|
Playlog_Delete();
|
||||||
|
|
||||||
/* Find the first partition with apps/wiiflow folder */
|
/* Find the first partition with apps/wiiflow folder */
|
||||||
const char *drive = "empty";
|
const char *drive = NULL;
|
||||||
const char *check = "empty";
|
|
||||||
struct stat dummy;
|
struct stat dummy;
|
||||||
for(int i = SD; i <= USB8; i++)
|
for(int i = SD; i <= USB8; i++)
|
||||||
{
|
{
|
||||||
@ -122,21 +119,24 @@ bool CMenu::init(bool usb_mounted)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(drive == check) // Should not happen
|
if(drive == NULL) // Could not find apps/wiiflow so we can't go on
|
||||||
{
|
|
||||||
/* Could not find a device to save configuration files on! */
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
_loadDefaultFont();// load default font
|
|
||||||
|
|
||||||
/* Handle apps dir first, so handling wiiflow.ini does not fail */
|
|
||||||
m_appDir = fmt("%s:/%s", drive, APPS_DIR);
|
m_appDir = fmt("%s:/%s", drive, APPS_DIR);
|
||||||
gprintf("Wiiflow boot.dol Location: %s\n", m_appDir.c_str());
|
gprintf("Wiiflow boot.dol Location: %s\n", m_appDir.c_str());
|
||||||
fsop_MakeFolder(m_appDir.c_str());
|
|
||||||
|
m_imgsDir = fmt("%s/imgs", m_appDir.c_str());
|
||||||
|
m_binsDir = fmt("%s/bins", m_appDir.c_str());
|
||||||
|
|
||||||
|
/* Set data folder on same device as the apps/wiiflow folder */
|
||||||
|
m_dataDir = fmt("%s:/%s", drive, APP_DATA_DIR);
|
||||||
|
gprintf("Data Directory: %s\n", m_dataDir.c_str());
|
||||||
|
|
||||||
/* Load/Create wiiflow.ini so we can get settings to start Gecko and Network */
|
/* Load/Create wiiflow.ini so we can get settings to start Gecko and Network */
|
||||||
m_cfg.load(fmt("%s/" CFG_FILENAME, m_appDir.c_str()));
|
m_cfg.load(fmt("%s/" CFG_FILENAME, m_appDir.c_str()));
|
||||||
|
|
||||||
|
/* ------------------------------------------------------*/
|
||||||
|
/* setup debugging stuff after loading wiiflow.ini */
|
||||||
show_mem = m_cfg.getBool("DEBUG", "show_mem", false);
|
show_mem = m_cfg.getBool("DEBUG", "show_mem", false);
|
||||||
|
|
||||||
/* Check if we want WiFi Gecko */
|
/* Check if we want WiFi Gecko */
|
||||||
@ -148,12 +148,13 @@ bool CMenu::init(bool usb_mounted)
|
|||||||
/* Check if we want SD Gecko */
|
/* Check if we want SD Gecko */
|
||||||
m_use_sd_logging = m_cfg.getBool("DEBUG", "sd_write_log", false);
|
m_use_sd_logging = m_cfg.getBool("DEBUG", "sd_write_log", false);
|
||||||
LogToSD_SetBuffer(m_use_sd_logging);
|
LogToSD_SetBuffer(m_use_sd_logging);
|
||||||
|
/* ------------------------------------------------------*/
|
||||||
|
|
||||||
/* Init gamer tags now in case we need to init network on boot */
|
/* Init gamer tags now in case we need to init network on boot */
|
||||||
m_cfg.setString("GAMERCARD", "gamercards", "wiinnertag");
|
m_cfg.setString("GAMERCARD", "gamercards", "wiinnertag");
|
||||||
m_cfg.getString("GAMERCARD", "wiinnertag_url", WIINNERTAG_URL);
|
m_cfg.getString("GAMERCARD", "wiinnertag_url", WIINNERTAG_URL);
|
||||||
m_cfg.getString("GAMERCARD", "wiinnertag_key", "");
|
m_cfg.getString("GAMERCARD", "wiinnertag_key", "");
|
||||||
if (m_cfg.getBool("GAMERCARD", "gamercards_enable", false))
|
if(m_cfg.getBool("GAMERCARD", "gamercards_enable", false))
|
||||||
{
|
{
|
||||||
vector<string> gamercards = stringToVector(m_cfg.getString("GAMERCARD", "gamercards"), '|');
|
vector<string> gamercards = stringToVector(m_cfg.getString("GAMERCARD", "gamercards"), '|');
|
||||||
if (gamercards.size() == 0)
|
if (gamercards.size() == 0)
|
||||||
@ -173,6 +174,7 @@ bool CMenu::init(bool usb_mounted)
|
|||||||
/* Init Network if wanted for gamercard if it isn't already inited */
|
/* Init Network if wanted for gamercard if it isn't already inited */
|
||||||
if(has_enabled_providers())
|
if(has_enabled_providers())
|
||||||
_initAsyncNetwork();
|
_initAsyncNetwork();
|
||||||
|
|
||||||
/* Set the proxy settings */
|
/* Set the proxy settings */
|
||||||
proxyUseSystem = m_cfg.getBool("PROXY", "proxy_use_system", true);
|
proxyUseSystem = m_cfg.getBool("PROXY", "proxy_use_system", true);
|
||||||
memset(proxyAddress, 0, sizeof(proxyAddress));
|
memset(proxyAddress, 0, sizeof(proxyAddress));
|
||||||
@ -184,58 +186,74 @@ bool CMenu::init(bool usb_mounted)
|
|||||||
strncpy(proxyPassword, m_cfg.getString("PROXY", "proxy_password", "").c_str(), sizeof(proxyPassword) - 1);
|
strncpy(proxyPassword, m_cfg.getString("PROXY", "proxy_password", "").c_str(), sizeof(proxyPassword) - 1);
|
||||||
getProxyInfo();
|
getProxyInfo();
|
||||||
|
|
||||||
/* Set SD only to off if any usb device is attached and format is FAT, NTFS, WBFS, or LINUX */
|
/* Set SD only to off if any usb device is attached */
|
||||||
m_cfg.getBool("GENERAL", "sd_only", true);// will only set it true if this doesn't already exist
|
m_cfg.getBool("GENERAL", "sd_only", usb_mounted ? false : true);// will only set it if this doesn't already exist - very first boot up
|
||||||
for(int i = USB1; i <= USB8; i++)
|
|
||||||
{
|
|
||||||
if(DeviceHandle.IsInserted(i) && DeviceHandle.GetFSType(i) >= 0)
|
|
||||||
m_cfg.setBool("GENERAL", "sd_only", false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set data folder on same device as the apps/wiiflow folder */
|
/* set default wii games partition in case this is the first boot */
|
||||||
m_dataDir = fmt("%s:/%s", drive, APP_DATA_DIR);
|
if(!m_cfg.has(WII_DOMAIN, "partition"))
|
||||||
gprintf("Data Directory: %s\n", m_dataDir.c_str());
|
{
|
||||||
|
int wp = -1;
|
||||||
|
if(!m_cfg.getBool("GENERAL", "sd_only"))
|
||||||
|
{
|
||||||
|
for(int i = SD; i <= USB8; i++) // Find first wbfs folder or a partition of wbfs file system
|
||||||
|
{
|
||||||
|
if(DeviceHandle.IsInserted(i) && (DeviceHandle.GetFSType(i) == PART_FS_WBFS || stat(fmt(GAMES_DIR, DeviceName[i]), &dummy) == 0))
|
||||||
|
{
|
||||||
|
wp = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(wp < 0)// not found
|
||||||
|
{
|
||||||
|
if(DeviceHandle.IsInserted(SD))// set to sd if inserted otherwise USB1
|
||||||
|
wp = 0;
|
||||||
|
else
|
||||||
|
wp = 1;
|
||||||
|
}
|
||||||
|
m_cfg.setInt(WII_DOMAIN, "partition", wp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* preferred partition setting - negative 1 means not set by user so skip this */
|
||||||
|
int pp;
|
||||||
|
if((pp = m_cfg.getInt(WII_DOMAIN, "preferred_partition", -1)) >= 0)
|
||||||
|
{
|
||||||
|
if(usb_mounted && pp > 0)
|
||||||
|
m_cfg.setInt(WII_DOMAIN, "partition", pp);
|
||||||
|
else
|
||||||
|
m_cfg.setInt(WII_DOMAIN, "partition", SD);
|
||||||
|
}
|
||||||
|
if((pp = m_cfg.getInt(GC_DOMAIN, "preferred_partition", -1)) >= 0)
|
||||||
|
{
|
||||||
|
if(usb_mounted && pp > 0)
|
||||||
|
m_cfg.setInt(GC_DOMAIN, "partition", USB1);
|
||||||
|
else
|
||||||
|
m_cfg.setInt(GC_DOMAIN, "partition", SD);
|
||||||
|
}
|
||||||
|
|
||||||
/* Our Wii games dir */
|
/* Our Wii games dir */
|
||||||
|
u8 partition = m_cfg.getInt(WII_DOMAIN, "partition");
|
||||||
|
gprintf("Setting Wii games partition to: %i\n", partition);
|
||||||
|
|
||||||
memset(wii_games_dir, 0, 64);
|
memset(wii_games_dir, 0, 64);
|
||||||
strncpy(wii_games_dir, m_cfg.getString(WII_DOMAIN, "wii_games_dir", GAMES_DIR).c_str(), 63);
|
strncpy(wii_games_dir, m_cfg.getString(WII_DOMAIN, "wii_games_dir", GAMES_DIR).c_str(), 63);
|
||||||
if(strncmp(wii_games_dir, "%s:/", 4) != 0)
|
if(strncmp(wii_games_dir, "%s:/", 4) != 0)
|
||||||
strcpy(wii_games_dir, GAMES_DIR);
|
strcpy(wii_games_dir, GAMES_DIR);
|
||||||
gprintf("Wii Games Directory: %s\n", wii_games_dir);
|
gprintf("Wii Games Directory: %s\n", wii_games_dir);
|
||||||
|
|
||||||
if(m_cfg.getBool(WII_DOMAIN, "prefer_usb", false))
|
|
||||||
{
|
|
||||||
if(usb_mounted)
|
|
||||||
m_cfg.setInt(WII_DOMAIN, "partition", USB1);
|
|
||||||
else
|
|
||||||
m_cfg.setInt(WII_DOMAIN, "partition", SD);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* GameCube stuff */
|
/* GameCube stuff */
|
||||||
m_devo_installed = DEVO_Installed(m_dataDir.c_str());
|
|
||||||
m_nintendont_installed = Nintendont_Installed();
|
|
||||||
memset(gc_games_dir, 0, 64);
|
memset(gc_games_dir, 0, 64);
|
||||||
strncpy(gc_games_dir, m_cfg.getString(GC_DOMAIN, "gc_games_dir", DF_GC_GAMES_DIR).c_str(), 63);
|
strncpy(gc_games_dir, m_cfg.getString(GC_DOMAIN, "gc_games_dir", DF_GC_GAMES_DIR).c_str(), 63);
|
||||||
if(strncmp(gc_games_dir, "%s:/", 4) != 0)
|
if(strncmp(gc_games_dir, "%s:/", 4) != 0)
|
||||||
strcpy(gc_games_dir, DF_GC_GAMES_DIR);
|
strcpy(gc_games_dir, DF_GC_GAMES_DIR);
|
||||||
gprintf("GameCube Games Directory: %s\n", gc_games_dir);
|
gprintf("GameCube Games Directory: %s\n", gc_games_dir);
|
||||||
|
|
||||||
|
m_devo_installed = DEVO_Installed(m_dataDir.c_str());
|
||||||
|
m_nintendont_installed = Nintendont_Installed();
|
||||||
m_gc_play_banner_sound = m_cfg.getBool(GC_DOMAIN, "play_banner_sound", true);
|
m_gc_play_banner_sound = m_cfg.getBool(GC_DOMAIN, "play_banner_sound", true);
|
||||||
m_gc_play_default_sound = m_cfg.getBool(GC_DOMAIN, "play_default_sound", true);
|
m_gc_play_default_sound = m_cfg.getBool(GC_DOMAIN, "play_default_sound", true);
|
||||||
if(m_cfg.getBool(GC_DOMAIN, "prefer_usb", false))
|
|
||||||
{
|
|
||||||
if(usb_mounted)
|
|
||||||
m_cfg.setInt(GC_DOMAIN, "partition", USB1);
|
|
||||||
else
|
|
||||||
m_cfg.setInt(GC_DOMAIN, "partition", SD);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Load cIOS Map */
|
/* init directories */
|
||||||
_installed_cios.clear();
|
|
||||||
_load_installed_cioses();
|
|
||||||
|
|
||||||
m_imgsDir = fmt("%s/imgs", m_appDir.c_str());
|
|
||||||
m_binsDir = fmt("%s/bins", m_appDir.c_str());
|
|
||||||
|
|
||||||
m_cacheDir = m_cfg.getString("GENERAL", "dir_cache", fmt("%s/cache", m_dataDir.c_str()));
|
m_cacheDir = m_cfg.getString("GENERAL", "dir_cache", fmt("%s/cache", m_dataDir.c_str()));
|
||||||
m_listCacheDir = m_cfg.getString("GENERAL", "dir_list_cache", fmt("%s/lists", m_cacheDir.c_str()));
|
m_listCacheDir = m_cfg.getString("GENERAL", "dir_list_cache", fmt("%s/lists", m_cacheDir.c_str()));
|
||||||
m_bnrCacheDir = m_cfg.getString("GENERAL", "dir_banner_cache", fmt("%s/banners", m_cacheDir.c_str()));
|
m_bnrCacheDir = m_cfg.getString("GENERAL", "dir_banner_cache", fmt("%s/banners", m_cacheDir.c_str()));
|
||||||
@ -265,7 +283,6 @@ bool CMenu::init(bool usb_mounted)
|
|||||||
m_cartDir = m_cfg.getString("GENERAL", "dir_cart", fmt("%s/cart_disk", m_dataDir.c_str()));
|
m_cartDir = m_cfg.getString("GENERAL", "dir_cart", fmt("%s/cart_disk", m_dataDir.c_str()));
|
||||||
m_snapDir = m_cfg.getString("GENERAL", "dir_snap", fmt("%s/snapshots", m_dataDir.c_str()));
|
m_snapDir = m_cfg.getString("GENERAL", "dir_snap", fmt("%s/snapshots", m_dataDir.c_str()));
|
||||||
|
|
||||||
|
|
||||||
/* Create our Folder Structure */
|
/* Create our Folder Structure */
|
||||||
fsop_MakeFolder(m_dataDir.c_str()); //D'OH!
|
fsop_MakeFolder(m_dataDir.c_str()); //D'OH!
|
||||||
|
|
||||||
@ -298,42 +315,36 @@ bool CMenu::init(bool usb_mounted)
|
|||||||
fsop_MakeFolder(m_cartDir.c_str());
|
fsop_MakeFolder(m_cartDir.c_str());
|
||||||
fsop_MakeFolder(m_snapDir.c_str());
|
fsop_MakeFolder(m_snapDir.c_str());
|
||||||
|
|
||||||
/* set default wii games partition in case this is the first boot */
|
|
||||||
int dp = -1;
|
|
||||||
for(int i = SD; i <= USB8; i++) // Find a wbfs folder or a partition of wbfs file system
|
|
||||||
{
|
|
||||||
if(DeviceHandle.IsInserted(i) && (DeviceHandle.GetFSType(i) == PART_FS_WBFS || stat(fmt(GAMES_DIR, DeviceName[i]), &dummy) == 0))
|
|
||||||
{
|
|
||||||
dp = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(dp < 0)// not found
|
|
||||||
{
|
|
||||||
if(DeviceHandle.IsInserted(SD))// set to sd if inserted otherwise USB1
|
|
||||||
dp = 0;
|
|
||||||
else
|
|
||||||
dp = 1;
|
|
||||||
}
|
|
||||||
u8 partition = m_cfg.getInt(WII_DOMAIN, "partition", dp);
|
|
||||||
gprintf("Setting Wii games partition to: %i\n", partition);
|
|
||||||
|
|
||||||
/* Emu nands init even if not being used */
|
/* Emu nands init even if not being used */
|
||||||
memset(emu_nands_dir, 0, sizeof(emu_nands_dir));
|
memset(emu_nands_dir, 0, sizeof(emu_nands_dir));
|
||||||
strncpy(emu_nands_dir, IsOnWiiU() ? "vwiinands" : "nands", sizeof(emu_nands_dir) - 1);
|
strncpy(emu_nands_dir, IsOnWiiU() ? "vwiinands" : "nands", sizeof(emu_nands_dir) - 1);
|
||||||
_checkEmuNandSettings();
|
_checkEmuNandSettings();
|
||||||
|
|
||||||
CoverFlow.init(m_base_font, m_base_font_size, m_vid.vid_50hz());
|
/* misc. setup */
|
||||||
|
SoundHandle.Init();
|
||||||
|
m_gameSound.SetVoice(1);
|
||||||
|
_loadDefaultFont();// load default font
|
||||||
|
LWP_MutexInit(&m_mutex, 0);
|
||||||
|
|
||||||
/* Load categories and theme INI files */
|
/* Load cIOS Map */
|
||||||
|
_installed_cios.clear();
|
||||||
|
_load_installed_cioses();
|
||||||
|
|
||||||
|
/* Check if wiiflow is parental locked */
|
||||||
|
m_locked = m_cfg.getString("GENERAL", "parent_code", "").size() >= 4;
|
||||||
|
|
||||||
|
/* Switch WFLA to DWFA in case they were using old wiiflow lite */
|
||||||
|
if(m_cfg.getString("GENERAL", "returnto") == "WFLA")
|
||||||
|
m_cfg.setString("GENERAL", "returnto", "DWFA");
|
||||||
|
|
||||||
|
/* set WIIFLOW_DEF exit to option */
|
||||||
|
/* 0 thru 2 of exit to enum (EXIT_TO_MENU, EXIT_TO_HBC, EXIT_TO_WIIU) in sys.h */
|
||||||
|
int exit_to = min(max(0, m_cfg.getInt("GENERAL", "exit_to", 0)), (int)ARRAY_SIZE(CMenu::_exitTo) - 1);
|
||||||
|
Sys_ExitTo(exit_to);
|
||||||
|
|
||||||
|
/* load misc config files */
|
||||||
m_cat.load(fmt("%s/" CAT_FILENAME, m_settingsDir.c_str()));
|
m_cat.load(fmt("%s/" CAT_FILENAME, m_settingsDir.c_str()));
|
||||||
m_gcfg1.load(fmt("%s/" GAME_SETTINGS1_FILENAME, m_settingsDir.c_str()));
|
m_gcfg1.load(fmt("%s/" GAME_SETTINGS1_FILENAME, m_settingsDir.c_str()));
|
||||||
m_themeName = m_cfg.getString("GENERAL", "theme", "default");
|
|
||||||
m_themeDataDir = fmt("%s/%s", m_themeDir.c_str(), m_themeName.c_str());
|
|
||||||
m_theme.load(fmt("%s.ini", m_themeDataDir.c_str()));
|
|
||||||
m_coverflow.load(fmt("%s/%s.ini", m_coverflowsDir.c_str(), m_themeName.c_str()));
|
|
||||||
if(!m_coverflow.loaded())
|
|
||||||
m_coverflow.load(fmt("%s/default.ini", m_coverflowsDir.c_str()));
|
|
||||||
m_platform.load(fmt("%s/platform.ini", m_pluginDataDir.c_str()));
|
m_platform.load(fmt("%s/platform.ini", m_pluginDataDir.c_str()));
|
||||||
|
|
||||||
/* Init plugins */
|
/* Init plugins */
|
||||||
@ -408,8 +419,19 @@ bool CMenu::init(bool usb_mounted)
|
|||||||
|
|
||||||
/* Init gametdb and custom titles for game list making */
|
/* Init gametdb and custom titles for game list making */
|
||||||
m_cacheList.Init(m_settingsDir.c_str(), m_loc.getString(m_curLanguage, "gametdb_code", "EN").c_str(), m_pluginDataDir.c_str(),
|
m_cacheList.Init(m_settingsDir.c_str(), m_loc.getString(m_curLanguage, "gametdb_code", "EN").c_str(), m_pluginDataDir.c_str(),
|
||||||
m_cfg.getString(CONFIG_FILENAME_SKIP_DOMAIN,CONFIG_FILENAME_SKIP_KEY,CONFIG_FILENAME_SKIP_DEFAULT));
|
m_cfg.getString(CONFIG_FILENAME_SKIP_DOMAIN, CONFIG_FILENAME_SKIP_KEY, CONFIG_FILENAME_SKIP_DEFAULT));
|
||||||
|
|
||||||
|
/* Coverflow init */
|
||||||
|
CoverFlow.init(m_base_font, m_base_font_size, m_vid.vid_50hz());
|
||||||
|
|
||||||
|
/* Load theme and coverflow files */
|
||||||
|
m_themeName = m_cfg.getString("GENERAL", "theme", "default");
|
||||||
|
m_themeDataDir = fmt("%s/%s", m_themeDir.c_str(), m_themeName.c_str());
|
||||||
|
m_theme.load(fmt("%s.ini", m_themeDataDir.c_str()));
|
||||||
|
m_coverflow.load(fmt("%s/%s.ini", m_coverflowsDir.c_str(), m_themeName.c_str()));
|
||||||
|
if(!m_coverflow.loaded())
|
||||||
|
m_coverflow.load(fmt("%s/default.ini", m_coverflowsDir.c_str()));
|
||||||
|
|
||||||
/* Init the onscreen pointer */
|
/* Init the onscreen pointer */
|
||||||
m_aa = 3;
|
m_aa = 3;
|
||||||
CColor pShadowColor = m_theme.getColor("GENERAL", "pointer_shadow_color", CColor(0x3F000000));
|
CColor pShadowColor = m_theme.getColor("GENERAL", "pointer_shadow_color", CColor(0x3F000000));
|
||||||
@ -429,34 +451,19 @@ bool CMenu::init(bool usb_mounted)
|
|||||||
m_music_info = m_cfg.getBool("GENERAL", "display_music_info", false);
|
m_music_info = m_cfg.getBool("GENERAL", "display_music_info", false);
|
||||||
MusicPlayer.SetResampleSetting(m_cfg.getBool("general", "resample_to_48khz", false));
|
MusicPlayer.SetResampleSetting(m_cfg.getBool("general", "resample_to_48khz", false));
|
||||||
|
|
||||||
/* Init Button Manager and build the menus */
|
|
||||||
_buildMenus();
|
|
||||||
|
|
||||||
/* Check if locked, set return to, set exit to, and init multi threading */
|
|
||||||
m_locked = m_cfg.getString("GENERAL", "parent_code", "").size() >= 4;
|
|
||||||
|
|
||||||
/* Switch WFLA to DWFA in case they were using old wiiflow lite */
|
|
||||||
if(m_cfg.getString("GENERAL", "returnto") == "WFLA")
|
|
||||||
m_cfg.setString("GENERAL", "returnto", "DWFA");
|
|
||||||
|
|
||||||
/* set WIIFLOW_DEF exit to option */
|
|
||||||
/* 0 thru 2 of exit to enum (EXIT_TO_MENU, EXIT_TO_HBC, EXIT_TO_WIIU) in sys.h */
|
|
||||||
int exit_to = min(max(0, m_cfg.getInt("GENERAL", "exit_to", 0)), (int)ARRAY_SIZE(CMenu::_exitTo) - 1);
|
|
||||||
Sys_ExitTo(exit_to);
|
|
||||||
|
|
||||||
LWP_MutexInit(&m_mutex, 0);
|
|
||||||
|
|
||||||
/* set sound volumes */
|
/* set sound volumes */
|
||||||
CoverFlow.setSoundVolume(m_cfg.getInt("GENERAL", "sound_volume_coverflow", 255));
|
CoverFlow.setSoundVolume(m_cfg.getInt("GENERAL", "sound_volume_coverflow", 255));
|
||||||
m_btnMgr.setSoundVolume(m_cfg.getInt("GENERAL", "sound_volume_gui", 255));
|
m_btnMgr.setSoundVolume(m_cfg.getInt("GENERAL", "sound_volume_gui", 255));
|
||||||
m_bnrSndVol = m_cfg.getInt("GENERAL", "sound_volume_bnr", 255);
|
m_bnrSndVol = m_cfg.getInt("GENERAL", "sound_volume_bnr", 255);
|
||||||
m_bnr_settings = m_cfg.getBool("GENERAL", "banner_in_settings", true);
|
m_bnr_settings = m_cfg.getBool("GENERAL", "banner_in_settings", true);
|
||||||
|
|
||||||
|
/* Init Button Manager and build the menus */
|
||||||
|
_buildMenus();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cleaned_up = false;
|
bool cleaned_up = false;
|
||||||
|
|
||||||
void CMenu::cleanup()
|
void CMenu::cleanup()
|
||||||
{
|
{
|
||||||
if(cleaned_up)
|
if(cleaned_up)
|
||||||
@ -1723,7 +1730,12 @@ void CMenu::_mainLoopCommon(bool withCF, bool adjusting)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(m_banner.GetSelectedGame() && (!m_banner.GetInGameSettings() || (m_banner.GetInGameSettings() && m_bnr_settings)))
|
else if(m_banner.GetSelectedGame() && (!m_banner.GetInGameSettings() || (m_banner.GetInGameSettings() && m_bnr_settings)))
|
||||||
m_banner.Draw();
|
{
|
||||||
|
if(!m_soundThrdBusy)// banner loaded
|
||||||
|
m_banner.Draw();
|
||||||
|
else if(m_banner.GetZoomSetting())// banner not loaded but in full zoom mode
|
||||||
|
DrawRectangle(0.0f, 0.0f, m_vid.width(), m_vid.height(), (GXColor) {0, 0, 0, 0xFF});// to prevent coverflow from showing
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* gui buttons and text drawing */
|
/* gui buttons and text drawing */
|
||||||
@ -1753,14 +1765,14 @@ void CMenu::_mainLoopCommon(bool withCF, bool adjusting)
|
|||||||
// m_gamesound_changed means a new game sound is loaded and ready to play
|
// m_gamesound_changed means a new game sound is loaded and ready to play
|
||||||
// the previous game sound needs to stop before playing new sound
|
// the previous game sound needs to stop before playing new sound
|
||||||
// and the bg music volume needs to be 0 before playing game sound
|
// and the bg music volume needs to be 0 before playing game sound
|
||||||
if(withCF && m_gameSelected && m_gamesound_changed && !m_gameSound.IsPlaying() && MusicPlayer.GetVolume() == 0)
|
if(!m_soundThrdBusy && withCF && m_gameSelected && m_gamesound_changed && !m_gameSound.IsPlaying() && MusicPlayer.GetVolume() == 0)
|
||||||
{
|
{
|
||||||
_stopGameSoundThread();// stop game sound loading thread
|
_stopGameSoundThread();// stop game sound loading thread
|
||||||
m_gameSound.Play(m_bnrSndVol);// play game sound
|
m_gameSound.Play(m_bnrSndVol);// play game sound
|
||||||
m_gamesound_changed = false;
|
m_gamesound_changed = false;
|
||||||
}
|
}
|
||||||
// stop game/banner sound from playing if we exited game selected menu or if we move to new game
|
// stop game/banner sound from playing if we exited game selected menu or if we move to new game
|
||||||
else if((withCF && m_gameSelected && m_gamesound_changed && m_gameSound.IsPlaying()) || (!m_gameSelected && m_gameSound.IsPlaying()))
|
else if((!m_soundThrdBusy && withCF && m_gameSelected && m_gamesound_changed && m_gameSound.IsPlaying()) || (!m_gameSelected && m_gameSound.IsPlaying()))
|
||||||
m_gameSound.Stop();
|
m_gameSound.Stop();
|
||||||
|
|
||||||
/* decrease music volume to zero if any of these are true:
|
/* decrease music volume to zero if any of these are true:
|
||||||
|
@ -672,7 +672,6 @@ private:
|
|||||||
s16 m_cheatLblItem[4];
|
s16 m_cheatLblItem[4];
|
||||||
s16 m_cheatBtnItem[4];
|
s16 m_cheatBtnItem[4];
|
||||||
s16 m_cheatLblUser[4];
|
s16 m_cheatLblUser[4];
|
||||||
GCTCheats m_cheatfile;
|
|
||||||
// Gameinfo menu
|
// Gameinfo menu
|
||||||
s16 m_gameinfoLblTitle;
|
s16 m_gameinfoLblTitle;
|
||||||
s16 m_gameinfoLblID;
|
s16 m_gameinfoLblID;
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
u8 m_cheatSettingsPage = 0;
|
u8 m_cheatSettingsPage = 0;
|
||||||
int txtavailable;
|
int txtavailable;
|
||||||
|
GCTCheats m_cheatfile;
|
||||||
|
|
||||||
int CMenu::_downloadCheatFileAsync()
|
int CMenu::_downloadCheatFileAsync()
|
||||||
{
|
{
|
||||||
|
@ -1145,9 +1145,14 @@ void * CMenu::_gameSoundThread(void *obj)
|
|||||||
if(cached_bnr_file == NULL && custom_bnr_file == NULL)
|
if(cached_bnr_file == NULL && custom_bnr_file == NULL)
|
||||||
fsop_WriteFile(cached_banner, CurrentBanner.GetBannerFile(), CurrentBanner.GetBannerFileSize());
|
fsop_WriteFile(cached_banner, CurrentBanner.GetBannerFile(), CurrentBanner.GetBannerFileSize());
|
||||||
|
|
||||||
|
//load and init banner
|
||||||
|
m_banner.LoadBanner(m->m_wbf1_font, m->m_wbf2_font);
|
||||||
|
|
||||||
//get sound from wii, channel, or custom banner and load it to play with the banner
|
//get sound from wii, channel, or custom banner and load it to play with the banner
|
||||||
u32 sndSize = 0;
|
u32 sndSize = 0;
|
||||||
u8 *soundBin = CurrentBanner.GetFile("sound.bin", &sndSize);
|
u8 *soundBin = CurrentBanner.GetFile("sound.bin", &sndSize);
|
||||||
|
CurrentBanner.ClearBanner();// got sound.bin and banner for displaying is loaded so no longer need current banner.
|
||||||
|
|
||||||
if(soundBin != NULL && (GameHdr->type != TYPE_GC_GAME || m->m_gc_play_banner_sound))
|
if(soundBin != NULL && (GameHdr->type != TYPE_GC_GAME || m->m_gc_play_banner_sound))
|
||||||
{
|
{
|
||||||
if(memcmp(&((IMD5Header *)soundBin)->fcc, "IMD5", 4) == 0)
|
if(memcmp(&((IMD5Header *)soundBin)->fcc, "IMD5", 4) == 0)
|
||||||
@ -1155,8 +1160,13 @@ void * CMenu::_gameSoundThread(void *obj)
|
|||||||
u32 newSize = 0;
|
u32 newSize = 0;
|
||||||
u8 *newSound = DecompressCopy(soundBin, sndSize, &newSize);
|
u8 *newSound = DecompressCopy(soundBin, sndSize, &newSize);
|
||||||
free(soundBin);// no longer needed, now using decompressed newSound
|
free(soundBin);// no longer needed, now using decompressed newSound
|
||||||
if(newSound != NULL && newSize != 0)
|
if(newSound == NULL || newSize == 0 || !m->m_gameSound.Load(newSound, newSize))
|
||||||
m->m_gameSound.Load(newSound, newSize);
|
{
|
||||||
|
m->m_gameSound.FreeMemory();// frees newSound
|
||||||
|
m_banner.DeleteBanner();// the same as UnloadBanner
|
||||||
|
m->m_soundThrdBusy = false;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
m->m_gameSound.Load(soundBin, sndSize);
|
m->m_gameSound.Load(soundBin, sndSize);
|
||||||
@ -1164,18 +1174,19 @@ void * CMenu::_gameSoundThread(void *obj)
|
|||||||
if(m->m_gameSound.IsLoaded())
|
if(m->m_gameSound.IsLoaded())
|
||||||
m->m_gamesound_changed = true;
|
m->m_gamesound_changed = true;
|
||||||
else
|
else
|
||||||
m->m_gameSound.FreeMemory();// frees soundBin or newSound
|
{
|
||||||
|
m->m_gameSound.FreeMemory();// frees soundBin
|
||||||
|
m_banner.DeleteBanner();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else // no sound.bin or gc banner sound disabled
|
else
|
||||||
{
|
{
|
||||||
if(soundBin != NULL)
|
if(soundBin != NULL)
|
||||||
free(soundBin);
|
free(soundBin);
|
||||||
|
//gprintf("WARNING: No sound found in banner!\n");
|
||||||
m->m_gamesound_changed = true;
|
m->m_gamesound_changed = true;
|
||||||
m->m_gameSound.FreeMemory();// frees previous game sound
|
m->m_gameSound.FreeMemory();// frees previous game sound
|
||||||
}
|
}
|
||||||
//load and init banner here after getting game sound so that DecompressCopy() doesn't conflict with the DecompressCopy() in AnimatedBanner.cpp
|
|
||||||
m_banner.LoadBanner(m->m_wbf1_font, m->m_wbf2_font);
|
|
||||||
CurrentBanner.ClearBanner();
|
|
||||||
m->m_soundThrdBusy = false;
|
m->m_soundThrdBusy = false;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user