mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-25 20:56:53 +01:00
*Skip spaces at the end of a category in WiiTDB (e.g 'Rhythm ')
*Change in nand title search (fixed bug which can find wrong nand title and set it as return to) *Fixed bug when a wiimote leaves the game list choice and returns to it without going over another game that game was not clickable (Issue 1918) *Changed search bar to clear text on [X] button click. search bar is now closed by pressing B
This commit is contained in:
parent
f98b9d02d0
commit
74181ae5bc
@ -2,8 +2,8 @@
|
|||||||
<app version="1">
|
<app version="1">
|
||||||
<name> USB Loader GX</name>
|
<name> USB Loader GX</name>
|
||||||
<coder>USB Loader GX Team</coder>
|
<coder>USB Loader GX Team</coder>
|
||||||
<version>2.1 r1086</version>
|
<version>2.1 r1087</version>
|
||||||
<release_date>201106032029</release_date>
|
<release_date>201106041627</release_date>
|
||||||
<no_ios_reload/>
|
<no_ios_reload/>
|
||||||
<short_description>Loads games from USB-devices</short_description>
|
<short_description>Loads games from USB-devices</short_description>
|
||||||
<long_description>USB Loader GX is a libwiigui based USB iso loader with a wii-like GUI. You can install games to your HDDs and boot them with shorter loading times.
|
<long_description>USB Loader GX is a libwiigui based USB iso loader with a wii-like GUI. You can install games to your HDDs and boot them with shorter loading times.
|
||||||
|
@ -380,7 +380,7 @@ void GuiGameBrowser::Update(GuiTrigger * t)
|
|||||||
if (i != selectedItem && game[i]->GetState() == STATE_SELECTED)
|
if (i != selectedItem && game[i]->GetState() == STATE_SELECTED)
|
||||||
game[i]->ResetState();
|
game[i]->ResetState();
|
||||||
else if (i == selectedItem && game[i]->GetState() == STATE_DEFAULT)
|
else if (i == selectedItem && game[i]->GetState() == STATE_DEFAULT)
|
||||||
game[selectedItem]->SetState(STATE_SELECTED, t->chan);
|
game[selectedItem]->SetState(STATE_SELECTED, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
game[i]->Update(t);
|
game[i]->Update(t);
|
||||||
|
@ -36,6 +36,7 @@ GuiSearchBar::GuiSearchBar(const wchar_t *SearchChars) :
|
|||||||
keyOverImageData(Resources::GetFile("keyboard_key_over.png"), Resources::GetFileSize("keyboard_key_over.png"))
|
keyOverImageData(Resources::GetFile("keyboard_key_over.png"), Resources::GetFileSize("keyboard_key_over.png"))
|
||||||
{
|
{
|
||||||
trig.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
trig.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||||
|
trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B);
|
||||||
SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
||||||
|
|
||||||
cnt = wcslen(SearchChars);
|
cnt = wcslen(SearchChars);
|
||||||
@ -83,6 +84,10 @@ GuiSearchBar::GuiSearchBar(const wchar_t *SearchChars) :
|
|||||||
ClearBtn = new GuiButton(ClearBtnImg, ClearBtnImg_Over, ALIGN_RIGHT, ALIGN_TOP, -10, 10, &trig, btnSoundOver, btnSoundClick, 1);
|
ClearBtn = new GuiButton(ClearBtnImg, ClearBtnImg_Over, ALIGN_RIGHT, ALIGN_TOP, -10, 10, &trig, btnSoundOver, btnSoundClick, 1);
|
||||||
this->Append(ClearBtn);
|
this->Append(ClearBtn);
|
||||||
|
|
||||||
|
CloseBtn = new GuiButton(0, 0);
|
||||||
|
CloseBtn->SetTrigger(&trigB);
|
||||||
|
this->Append(CloseBtn);
|
||||||
|
|
||||||
// SetPosition(100,100);
|
// SetPosition(100,100);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -99,6 +104,8 @@ GuiSearchBar::~GuiSearchBar()
|
|||||||
delete ClearBtnImg_Over;
|
delete ClearBtnImg_Over;
|
||||||
delete imgClearBtn;
|
delete imgClearBtn;
|
||||||
|
|
||||||
|
delete CloseBtn;
|
||||||
|
|
||||||
delete BacspaceBtn;
|
delete BacspaceBtn;
|
||||||
delete BacspaceBtnImg;
|
delete BacspaceBtnImg;
|
||||||
delete BacspaceBtnImg_Over;
|
delete BacspaceBtnImg_Over;
|
||||||
@ -151,7 +158,8 @@ wchar_t GuiSearchBar::GetClicked()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (BacspaceBtn->GetState() == STATE_CLICKED) return 8;
|
if (BacspaceBtn->GetState() == STATE_CLICKED) return 8;
|
||||||
if (ClearBtn->GetState() == STATE_CLICKED) return 7;
|
else if (ClearBtn->GetState() == STATE_CLICKED) return 7;
|
||||||
|
else if (CloseBtn->GetState() == STATE_CLICKED) return 27;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -27,12 +27,15 @@ class GuiSearchBar: public GuiWindow
|
|||||||
GuiImage* ClearBtnImg_Over;
|
GuiImage* ClearBtnImg_Over;
|
||||||
GuiButton* ClearBtn;
|
GuiButton* ClearBtn;
|
||||||
|
|
||||||
|
GuiButton* CloseBtn;
|
||||||
|
|
||||||
cSearchButton **buttons;
|
cSearchButton **buttons;
|
||||||
int cnt;
|
int cnt;
|
||||||
GuiImageData keyImageData;
|
GuiImageData keyImageData;
|
||||||
GuiImageData keyOverImageData;
|
GuiImageData keyOverImageData;
|
||||||
GuiTrigger trig;
|
GuiTrigger trig;
|
||||||
|
GuiTrigger trigB;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -193,6 +193,7 @@ GameBrowseMenu::GameBrowseMenu()
|
|||||||
favoriteBtnImg_g->SetWidescreen(Settings.widescreen);
|
favoriteBtnImg_g->SetWidescreen(Settings.widescreen);
|
||||||
favoriteBtn = new GuiButton(favoriteBtnImg_g, favoriteBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0,
|
favoriteBtn = new GuiButton(favoriteBtnImg_g, favoriteBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0,
|
||||||
trigA, btnSoundOver, btnSoundClick2, 1, favoriteBtnTT, -15, 52, 0, 3);
|
trigA, btnSoundOver, btnSoundClick2, 1, favoriteBtnTT, -15, 52, 0, 3);
|
||||||
|
favoriteBtn->SetSelectable(false);
|
||||||
|
|
||||||
searchBtnTT = new GuiTooltip(tr( "Set Search-Filter" ));
|
searchBtnTT = new GuiTooltip(tr( "Set Search-Filter" ));
|
||||||
if (Settings.wsprompt) searchBtnTT->SetWidescreen(Settings.widescreen);
|
if (Settings.wsprompt) searchBtnTT->SetWidescreen(Settings.widescreen);
|
||||||
@ -203,6 +204,7 @@ GameBrowseMenu::GameBrowseMenu()
|
|||||||
searchBtnImg_g->SetWidescreen(Settings.widescreen);
|
searchBtnImg_g->SetWidescreen(Settings.widescreen);
|
||||||
searchBtn = new GuiButton(searchBtnImg_g, searchBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0,
|
searchBtn = new GuiButton(searchBtnImg_g, searchBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0,
|
||||||
trigA, btnSoundOver, btnSoundClick2, 1, searchBtnTT, -15, 52, 0, 3);
|
trigA, btnSoundOver, btnSoundClick2, 1, searchBtnTT, -15, 52, 0, 3);
|
||||||
|
searchBtn->SetSelectable(false);
|
||||||
|
|
||||||
sortBtnTT = new GuiTooltip(" ");
|
sortBtnTT = new GuiTooltip(" ");
|
||||||
if (Settings.wsprompt) sortBtnTT->SetWidescreen(Settings.widescreen);
|
if (Settings.wsprompt) sortBtnTT->SetWidescreen(Settings.widescreen);
|
||||||
@ -211,6 +213,7 @@ GameBrowseMenu::GameBrowseMenu()
|
|||||||
sortBtnImg = new GuiImage(imgabcIcon);
|
sortBtnImg = new GuiImage(imgabcIcon);
|
||||||
sortBtnImg->SetWidescreen(Settings.widescreen);
|
sortBtnImg->SetWidescreen(Settings.widescreen);
|
||||||
sortBtn = new GuiButton(sortBtnImg, sortBtnImg, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, sortBtnTT, -15, 52, 0, 3);
|
sortBtn = new GuiButton(sortBtnImg, sortBtnImg, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, sortBtnTT, -15, 52, 0, 3);
|
||||||
|
sortBtn->SetSelectable(false);
|
||||||
|
|
||||||
categBtnTT = new GuiTooltip(tr("Select game categories"));
|
categBtnTT = new GuiTooltip(tr("Select game categories"));
|
||||||
if (Settings.wsprompt) sortBtnTT->SetWidescreen(Settings.widescreen);
|
if (Settings.wsprompt) sortBtnTT->SetWidescreen(Settings.widescreen);
|
||||||
@ -221,6 +224,7 @@ GameBrowseMenu::GameBrowseMenu()
|
|||||||
categBtnImg_g = new GuiImage(imgCategory_gray);
|
categBtnImg_g = new GuiImage(imgCategory_gray);
|
||||||
categBtnImg_g->SetWidescreen(Settings.widescreen);
|
categBtnImg_g->SetWidescreen(Settings.widescreen);
|
||||||
categBtn = new GuiButton(categBtnImg, categBtnImg, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, categBtnTT, -15, 52, 0, 3);
|
categBtn = new GuiButton(categBtnImg, categBtnImg, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, categBtnTT, -15, 52, 0, 3);
|
||||||
|
categBtn->SetSelectable(false);
|
||||||
|
|
||||||
listBtnTT = new GuiTooltip(tr( "Display as a list" ));
|
listBtnTT = new GuiTooltip(tr( "Display as a list" ));
|
||||||
if (Settings.wsprompt) listBtnTT->SetWidescreen(Settings.widescreen);
|
if (Settings.wsprompt) listBtnTT->SetWidescreen(Settings.widescreen);
|
||||||
@ -230,6 +234,7 @@ GameBrowseMenu::GameBrowseMenu()
|
|||||||
listBtnImg_g = new GuiImage(imgarrangeList_gray);
|
listBtnImg_g = new GuiImage(imgarrangeList_gray);
|
||||||
listBtnImg_g->SetWidescreen(Settings.widescreen);
|
listBtnImg_g->SetWidescreen(Settings.widescreen);
|
||||||
listBtn = new GuiButton(listBtnImg_g, listBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, listBtnTT, 15, 52, 1, 3);
|
listBtn = new GuiButton(listBtnImg_g, listBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, listBtnTT, 15, 52, 1, 3);
|
||||||
|
listBtn->SetSelectable(false);
|
||||||
|
|
||||||
gridBtnTT = new GuiTooltip(tr( "Display as a grid" ));
|
gridBtnTT = new GuiTooltip(tr( "Display as a grid" ));
|
||||||
if (Settings.wsprompt) gridBtnTT->SetWidescreen(Settings.widescreen);
|
if (Settings.wsprompt) gridBtnTT->SetWidescreen(Settings.widescreen);
|
||||||
@ -239,6 +244,7 @@ GameBrowseMenu::GameBrowseMenu()
|
|||||||
gridBtnImg_g = new GuiImage(imgarrangeGrid_gray);
|
gridBtnImg_g = new GuiImage(imgarrangeGrid_gray);
|
||||||
gridBtnImg_g->SetWidescreen(Settings.widescreen);
|
gridBtnImg_g->SetWidescreen(Settings.widescreen);
|
||||||
gridBtn = new GuiButton(gridBtnImg_g, gridBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, gridBtnTT, 15, 52, 1, 3);
|
gridBtn = new GuiButton(gridBtnImg_g, gridBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, gridBtnTT, 15, 52, 1, 3);
|
||||||
|
gridBtn->SetSelectable(false);
|
||||||
|
|
||||||
carouselBtnTT = new GuiTooltip(tr( "Display as a carousel" ));
|
carouselBtnTT = new GuiTooltip(tr( "Display as a carousel" ));
|
||||||
if (Settings.wsprompt) carouselBtnTT->SetWidescreen(Settings.widescreen);
|
if (Settings.wsprompt) carouselBtnTT->SetWidescreen(Settings.widescreen);
|
||||||
@ -248,6 +254,7 @@ GameBrowseMenu::GameBrowseMenu()
|
|||||||
carouselBtnImg_g = new GuiImage(imgarrangeCarousel_gray);
|
carouselBtnImg_g = new GuiImage(imgarrangeCarousel_gray);
|
||||||
carouselBtnImg_g->SetWidescreen(Settings.widescreen);
|
carouselBtnImg_g->SetWidescreen(Settings.widescreen);
|
||||||
carouselBtn = new GuiButton(carouselBtnImg_g, carouselBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, carouselBtnTT, 15, 52, 1, 3);
|
carouselBtn = new GuiButton(carouselBtnImg_g, carouselBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, carouselBtnTT, 15, 52, 1, 3);
|
||||||
|
carouselBtn->SetSelectable(false);
|
||||||
|
|
||||||
lockBtnTT = new GuiTooltip(NULL);
|
lockBtnTT = new GuiTooltip(NULL);
|
||||||
if (Settings.wsprompt) lockBtnTT->SetWidescreen(Settings.widescreen);
|
if (Settings.wsprompt) lockBtnTT->SetWidescreen(Settings.widescreen);
|
||||||
@ -257,6 +264,7 @@ GameBrowseMenu::GameBrowseMenu()
|
|||||||
lockBtnImg_g = new GuiImage(imgLock_gray);
|
lockBtnImg_g = new GuiImage(imgLock_gray);
|
||||||
lockBtnImg_g->SetWidescreen(Settings.widescreen);
|
lockBtnImg_g->SetWidescreen(Settings.widescreen);
|
||||||
lockBtn = new GuiButton(lockBtnImg_g, lockBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, lockBtnTT, 15, 52, 1, 3);
|
lockBtn = new GuiButton(lockBtnImg_g, lockBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0, trigA, btnSoundOver, btnSoundClick2, 1, lockBtnTT, 15, 52, 1, 3);
|
||||||
|
lockBtn->SetSelectable(false);
|
||||||
|
|
||||||
unlockBtnImg = new GuiImage(imgUnlock);
|
unlockBtnImg = new GuiImage(imgUnlock);
|
||||||
unlockBtnImg->SetWidescreen(Settings.widescreen);
|
unlockBtnImg->SetWidescreen(Settings.widescreen);
|
||||||
@ -272,6 +280,7 @@ GameBrowseMenu::GameBrowseMenu()
|
|||||||
dvdBtnImg_g->SetWidescreen(Settings.widescreen);
|
dvdBtnImg_g->SetWidescreen(Settings.widescreen);
|
||||||
dvdBtn = new GuiButton(dvdBtnImg_g, dvdBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0,
|
dvdBtn = new GuiButton(dvdBtnImg_g, dvdBtnImg_g, ALIGN_LEFT, ALIGN_TOP, 0, 0,
|
||||||
trigA, btnSoundOver, btnSoundClick2, 1, dvdBtnTT, 15, 52, 1, 3);
|
trigA, btnSoundOver, btnSoundClick2, 1, dvdBtnTT, 15, 52, 1, 3);
|
||||||
|
dvdBtn->SetSelectable(false);
|
||||||
|
|
||||||
homebrewBtnTT = new GuiTooltip(tr( "Homebrew Launcher" ));
|
homebrewBtnTT = new GuiTooltip(tr( "Homebrew Launcher" ));
|
||||||
if (Settings.wsprompt) homebrewBtnTT->SetWidescreen(Settings.widescreen);
|
if (Settings.wsprompt) homebrewBtnTT->SetWidescreen(Settings.widescreen);
|
||||||
@ -293,6 +302,7 @@ GameBrowseMenu::GameBrowseMenu()
|
|||||||
DownloadBtn->SetTrigger(0, trigA);
|
DownloadBtn->SetTrigger(0, trigA);
|
||||||
DownloadBtn->SetTrigger(1, trig1);
|
DownloadBtn->SetTrigger(1, trig1);
|
||||||
DownloadBtn->SetToolTip(DownloadBtnTT, 205, -30);
|
DownloadBtn->SetToolTip(DownloadBtnTT, 205, -30);
|
||||||
|
DownloadBtn->SetSelectable(false);
|
||||||
|
|
||||||
gameCoverImg = new GuiImage();
|
gameCoverImg = new GuiImage();
|
||||||
gameCoverImg->SetPosition(thInt("26 - cover/download btn pos x"), thInt("58 - cover/download btn pos y"));
|
gameCoverImg->SetPosition(thInt("26 - cover/download btn pos x"), thInt("58 - cover/download btn pos y"));
|
||||||
@ -307,6 +317,7 @@ GameBrowseMenu::GameBrowseMenu()
|
|||||||
idBtn->SetSoundOver(btnSoundOver);
|
idBtn->SetSoundOver(btnSoundOver);
|
||||||
idBtn->SetTrigger(0, trigA);
|
idBtn->SetTrigger(0, trigA);
|
||||||
idBtn->SetToolTip(IDBtnTT, 205, -30);
|
idBtn->SetToolTip(IDBtnTT, 205, -30);
|
||||||
|
idBtn->SetSelectable(false);
|
||||||
|
|
||||||
GXColor clockColor = thColor("r=138 g=138 b=138 a=240 - clock color");
|
GXColor clockColor = thColor("r=138 g=138 b=138 a=240 - clock color");
|
||||||
clockTimeBack = new GuiText("88:88", 40, (GXColor) {clockColor.r, clockColor.g, clockColor.b, clockColor.a / 6});
|
clockTimeBack = new GuiText("88:88", 40, (GXColor) {clockColor.r, clockColor.g, clockColor.b, clockColor.a / 6});
|
||||||
@ -917,11 +928,16 @@ int GameBrowseMenu::MainLoop()
|
|||||||
|
|
||||||
gameList.FilterList(newFilter);
|
gameList.FilterList(newFilter);
|
||||||
}
|
}
|
||||||
else if (searchChar == 7) //! Close
|
else if (searchChar == 27) //! Close
|
||||||
{
|
{
|
||||||
show_searchwindow = false;
|
show_searchwindow = false;
|
||||||
searchBtn->StopEffect();
|
searchBtn->StopEffect();
|
||||||
}
|
}
|
||||||
|
else if (searchChar == 7) //! Clear
|
||||||
|
{
|
||||||
|
gameList.FilterList(L"");
|
||||||
|
Settings.gridRows = GridRowsPreSearch; //! restore old rows amount so we don't stay on one row
|
||||||
|
}
|
||||||
else if (searchChar == 8) //! Backspace
|
else if (searchChar == 8) //! Backspace
|
||||||
{
|
{
|
||||||
int len = wcslen(gameList.GetCurrentFilter());
|
int len = wcslen(gameList.GetCurrentFilter());
|
||||||
|
@ -209,9 +209,9 @@ void GameLoadSM::SetOptionValues()
|
|||||||
if(GameConfig.returnTo)
|
if(GameConfig.returnTo)
|
||||||
{
|
{
|
||||||
const char* TitleName = NULL;
|
const char* TitleName = NULL;
|
||||||
int haveTitle = NandTitles.FindU32(Settings.returnTo);
|
u64 tid = NandTitles.FindU32(Settings.returnTo);
|
||||||
if (haveTitle >= 0)
|
if (tid > 0)
|
||||||
TitleName = NandTitles.NameFromIndex(haveTitle);
|
TitleName = NandTitles.NameOf(tid);
|
||||||
Options->SetValue(Idx++, "%s", TitleName ? TitleName : strlen(Settings.returnTo) > 0 ?
|
Options->SetValue(Idx++, "%s", TitleName ? TitleName : strlen(Settings.returnTo) > 0 ?
|
||||||
Settings.returnTo : tr( OnOffText[0] ));
|
Settings.returnTo : tr( OnOffText[0] ));
|
||||||
}
|
}
|
||||||
|
@ -228,9 +228,9 @@ void LoaderSettings::SetOptionValues()
|
|||||||
|
|
||||||
//! Settings: Return To
|
//! Settings: Return To
|
||||||
const char* TitleName = NULL;
|
const char* TitleName = NULL;
|
||||||
int haveTitle = NandTitles.FindU32(Settings.returnTo);
|
u64 tid = NandTitles.FindU32(Settings.returnTo);
|
||||||
if (haveTitle >= 0)
|
if (tid > 0)
|
||||||
TitleName = NandTitles.NameFromIndex(haveTitle);
|
TitleName = NandTitles.NameOf(tid);
|
||||||
TitleName = TitleName ? TitleName : strlen(Settings.returnTo) > 0 ? Settings.returnTo : tr(OnOffText[0]);
|
TitleName = TitleName ? TitleName : strlen(Settings.returnTo) > 0 ? Settings.returnTo : tr(OnOffText[0]);
|
||||||
Options->SetValue(Idx++, "%s", TitleName);
|
Options->SetValue(Idx++, "%s", TitleName);
|
||||||
|
|
||||||
|
@ -193,7 +193,7 @@ int GameBooter::BootGame(const char * gameID)
|
|||||||
u8 alternatedol = game_cfg->loadalternatedol;
|
u8 alternatedol = game_cfg->loadalternatedol;
|
||||||
u32 alternatedoloffset = game_cfg->alternatedolstart;
|
u32 alternatedoloffset = game_cfg->alternatedolstart;
|
||||||
u8 reloadblock = game_cfg->iosreloadblock;
|
u8 reloadblock = game_cfg->iosreloadblock;
|
||||||
u64 returnToChoice = game_cfg->returnTo ? NandTitles.At(NandTitles.FindU32(Settings.returnTo)) : 0;
|
u64 returnToChoice = game_cfg->returnTo ? NandTitles.FindU32(Settings.returnTo) : 0;
|
||||||
|
|
||||||
//! Prepare alternate dol settings
|
//! Prepare alternate dol settings
|
||||||
SetupAltDOL(gameHeader.id, alternatedol, alternatedoloffset);
|
SetupAltDOL(gameHeader.id, alternatedol, alternatedoloffset);
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include <ogc/isfs.h>
|
#include <ogc/isfs.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include "nandtitle.h"
|
#include "nandtitle.h"
|
||||||
#include "usbloader/playlog.h"
|
#include "usbloader/playlog.h"
|
||||||
#include "utils/tools.h"
|
#include "utils/tools.h"
|
||||||
@ -8,28 +9,6 @@ NandTitle NandTitles;
|
|||||||
|
|
||||||
static u8 tmd_buf[MAX_SIGNED_TMD_SIZE] ATTRIBUTE_ALIGN( 32 );
|
static u8 tmd_buf[MAX_SIGNED_TMD_SIZE] ATTRIBUTE_ALIGN( 32 );
|
||||||
|
|
||||||
//based on one from comex's nand formatter
|
|
||||||
static u64 atoi_hex(const char *s)
|
|
||||||
{
|
|
||||||
u64 ret = 0;
|
|
||||||
u32 n = strlen(s);
|
|
||||||
|
|
||||||
for (u32 i = 0; i < n; i++)
|
|
||||||
{
|
|
||||||
if (s[i] > 0x39)
|
|
||||||
{
|
|
||||||
ret += (s[i] & ~0x20) - 0x37;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ret += (s[i] - 0x30);
|
|
||||||
}
|
|
||||||
if (i != (n - 1)) ret *= 16;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
NandTitle::NandTitle()
|
NandTitle::NandTitle()
|
||||||
{
|
{
|
||||||
currentIndex = 0;
|
currentIndex = 0;
|
||||||
@ -97,25 +76,21 @@ s32 NandTitle::Get()
|
|||||||
|
|
||||||
tmd* NandTitle::GetTMD(u64 tid)
|
tmd* NandTitle::GetTMD(u64 tid)
|
||||||
{
|
{
|
||||||
//gprintf("GetTMD( %016llx ): ", tid );
|
|
||||||
signed_blob *s_tmd = (signed_blob *) tmd_buf;
|
signed_blob *s_tmd = (signed_blob *) tmd_buf;
|
||||||
u32 tmd_size;
|
u32 tmd_size;
|
||||||
|
|
||||||
if (ES_GetStoredTMDSize(tid, &tmd_size) < 0)
|
if (ES_GetStoredTMDSize(tid, &tmd_size) < 0)
|
||||||
{
|
{
|
||||||
//gprintf("!size\n");
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 ret = ES_GetStoredTMD(tid, s_tmd, tmd_size);
|
s32 ret = ES_GetStoredTMD(tid, s_tmd, tmd_size);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
//gprintf("!tmd - %04x\n", ret );
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
tmd *t = (tmd*) SIGNATURE_PAYLOAD(s_tmd);
|
tmd *t = (tmd*) SIGNATURE_PAYLOAD(s_tmd);
|
||||||
//gprintf("ok\n");
|
|
||||||
|
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
@ -420,20 +395,31 @@ s32 NandTitle::GetTicketViews(u64 tid, tikview **outbuf, u32 *outlen)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int NandTitle::FindU64(const char *s)
|
u64 NandTitle::FindU64(const char *s)
|
||||||
{
|
{
|
||||||
u64 tid = atoi_hex(s);
|
u64 tid = strtoull(s, NULL, 16);
|
||||||
return IndexOf(tid);
|
|
||||||
}
|
|
||||||
|
|
||||||
int NandTitle::FindU32(const char *s)
|
|
||||||
{
|
|
||||||
u64 tid = atoi_hex(s);
|
|
||||||
for (u32 i = 0; i < titleIds.size(); i++)
|
for (u32 i = 0; i < titleIds.size(); i++)
|
||||||
{
|
{
|
||||||
if (TITLE_LOWER( titleIds.at( i ) ) == TITLE_LOWER( tid )) return i;
|
if(titleIds[i] == tid)
|
||||||
|
return titleIds[i];
|
||||||
}
|
}
|
||||||
return WII_EINSTALL;
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 NandTitle::FindU32(const char *s)
|
||||||
|
{
|
||||||
|
u32 tid = (u32) strtoull(s, NULL, 16);
|
||||||
|
if(!tid)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (u32 i = 0; i < titleIds.size(); i++)
|
||||||
|
{
|
||||||
|
if (TITLE_LOWER(titleIds[i]) == tid)
|
||||||
|
return titleIds[i];
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int NandTitle::LoadFileFromNand(const char *filepath, u8 **outbuffer, u32 *outfilesize)
|
int NandTitle::LoadFileFromNand(const char *filepath, u8 **outbuffer, u32 *outfilesize)
|
||||||
|
@ -88,15 +88,12 @@ class NandTitle
|
|||||||
bool Exists(u64 tid);
|
bool Exists(u64 tid);
|
||||||
bool ExistsFromIndex(u32 i);
|
bool ExistsFromIndex(u32 i);
|
||||||
|
|
||||||
int FindU64(const char *s);
|
u64 FindU64(const char *s);
|
||||||
int FindU32(const char *s);
|
u64 FindU32(const char *s);
|
||||||
|
|
||||||
s32 GetTicketViews(u64 tid, tikview **outbuf, u32 *outlen);
|
s32 GetTicketViews(u64 tid, tikview **outbuf, u32 *outlen);
|
||||||
|
|
||||||
u64 operator[](u32 i)
|
u64 operator[](u32 i) { return At(i); }
|
||||||
{
|
|
||||||
return At(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int LoadFileFromNand(const char *filepath, u8 **outbuffer, u32 *outfilesize);
|
static int LoadFileFromNand(const char *filepath, u8 **outbuffer, u32 *outfilesize);
|
||||||
private:
|
private:
|
||||||
|
@ -650,7 +650,7 @@ bool WiiTDB::GetGenreList(const char * id, vector<string> & genre)
|
|||||||
ptr++;
|
ptr++;
|
||||||
while(*ptr == ' ') ptr++;
|
while(*ptr == ' ') ptr++;
|
||||||
|
|
||||||
while(genre[genre_num][genre[genre_num].size()-1] == ' ')
|
while(genre[genre_num].size() > 0 && genre[genre_num][genre[genre_num].size()-1] == ' ')
|
||||||
genre[genre_num].erase(genre[genre_num].size()-1);
|
genre[genre_num].erase(genre[genre_num].size()-1);
|
||||||
|
|
||||||
genre_num++;
|
genre_num++;
|
||||||
@ -665,6 +665,9 @@ bool WiiTDB::GetGenreList(const char * id, vector<string> & genre)
|
|||||||
++ptr;
|
++ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while(genre[genre_num].size() > 0 && genre[genre_num][genre[genre_num].size()-1] == ' ')
|
||||||
|
genre[genre_num].erase(genre[genre_num].size()-1);
|
||||||
|
|
||||||
delete [] data;
|
delete [] data;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user