mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-18 09:19:17 +01:00
8bec876889
*Lot's of changes in image processing *Added use of libgd and ImageData class from WiiXplorer. No more crashes with corrupted images and no more restriction to images sizes that are devidable by 4 :). *Added a recource file manager for better access of all files/images for internal files and theme files. Some themes will have to adjust some filenames because we want to use the same filenames for themes and internal source files.
1217 lines
47 KiB
C++
1217 lines
47 KiB
C++
#include <gccore.h>
|
|
#include <stdio.h>
|
|
#include <unistd.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <dirent.h>
|
|
|
|
#include "usbloader/wbfs.h"
|
|
#include "language/gettext.h"
|
|
#include "libwiigui/gui.h"
|
|
#include "libwiigui/Text.hpp"
|
|
#include "../xml/xml.h"
|
|
#include "menu.h"
|
|
#include "menu/menus.h"
|
|
#include "filelist.h"
|
|
#include "sys.h"
|
|
#include "wpad.h"
|
|
#include "fatmounter.h"
|
|
#include "FileOperations/fileops.h"
|
|
#include "prompts/PromptWindows.h"
|
|
#include "themes/CTheme.h"
|
|
#include "gameinfo.h"
|
|
#include "usbloader/GameList.h"
|
|
#include "../gecko.h"
|
|
|
|
/*** Extern variables ***/
|
|
extern u8 shutdown;
|
|
extern u8 reset;
|
|
extern struct gameXMLinfo gameinfo;
|
|
extern struct gameXMLinfo gameinfo_reset;
|
|
|
|
/*** Extern functions ***/
|
|
extern void ResumeGui();
|
|
extern void HaltGui();
|
|
|
|
/****************************************************************************
|
|
* gameinfo
|
|
***************************************************************************/
|
|
int showGameInfo(char *ID)
|
|
{
|
|
HaltGui();//put this first to try to get rid of the code dump caused by loading this window at the same time as loading images from the SD card
|
|
mainWindow->SetState(STATE_DISABLED);
|
|
ResumeGui();
|
|
|
|
bool databaseopened = true;
|
|
if (databaseopened)
|
|
{
|
|
|
|
LoadGameInfoFromXML(ID, Settings.db_language);
|
|
|
|
bool showmeminfo = false;
|
|
|
|
int choice = -1;
|
|
int titley = 10;
|
|
int marginY = titley + 40;
|
|
int indexy = marginY;
|
|
int wifiY = 0;
|
|
int intputX = 200, inputY = -30, txtXOffset = 90;
|
|
u8 nunchuk = 0, classiccontroller = 0, balanceboard = 0, dancepad = 0, guitar = 0, gamecube = 0, wheel = 0,
|
|
motionplus = 0, drums = 0, microphone = 0, zapper = 0, nintendods = 0,
|
|
//vitalitysensor=0,
|
|
wiispeak = 0;
|
|
int newline = 1;
|
|
u8 page = 1;
|
|
|
|
GuiImageData * playersImgData = NULL;
|
|
GuiImage * playersImg = NULL;
|
|
|
|
GuiImageData * wifiplayersImgData = NULL;
|
|
GuiImage * wifiplayersImg = NULL;
|
|
GuiImage * ratingImg = NULL;
|
|
|
|
GuiImage * classiccontrollerImg = NULL;
|
|
GuiImage * nunchukImg = NULL;
|
|
GuiImage * guitarImg = NULL;
|
|
GuiImage * drumsImg = NULL;
|
|
GuiImage * dancepadImg = NULL;
|
|
GuiImage * motionplusImg = NULL;
|
|
GuiImage * wheelImg = NULL;
|
|
GuiImage * balanceboardImg = NULL;
|
|
GuiImage * microphoneImg = NULL;
|
|
GuiImage * zapperImg = NULL;
|
|
GuiImage * nintendodsImg = NULL;
|
|
GuiImage * wiispeakImg = NULL;
|
|
//GuiImage * vitalitysensorImg = NULL;
|
|
GuiImage * gcImg = NULL;
|
|
GuiImage * dialogBoxImg1 = NULL;
|
|
GuiImage * dialogBoxImg2 = NULL;
|
|
GuiImage * dialogBoxImg3 = NULL;
|
|
GuiImage * dialogBoxImg4 = NULL;
|
|
GuiImage * dialogBoxImg11 = NULL;
|
|
GuiImage * dialogBoxImg22 = NULL;
|
|
GuiImage * dialogBoxImg33 = NULL;
|
|
GuiImage * dialogBoxImg44 = NULL;
|
|
GuiImage * coverImg = NULL;
|
|
GuiImage * coverImg2 = NULL;
|
|
|
|
GuiImageData * classiccontrollerImgData = NULL;
|
|
GuiImageData * nunchukImgData = NULL;
|
|
GuiImageData * guitarImgData = NULL;
|
|
GuiImageData * drumsImgData = NULL;
|
|
GuiImageData * motionplusImgData = NULL;
|
|
GuiImageData * wheelImgData = NULL;
|
|
GuiImageData * balanceboardImgData = NULL;
|
|
GuiImageData * dancepadImgData = NULL;
|
|
GuiImageData * microphoneImgData = NULL;
|
|
GuiImageData * zapperImgData = NULL;
|
|
GuiImageData * nintendodsImgData = NULL;
|
|
GuiImageData * wiispeakImgData = NULL;
|
|
//GuiImageData * vitalitysensorImgData = NULL;
|
|
GuiImageData * gamecubeImgData = NULL;
|
|
GuiImageData * ratingImgData = NULL;
|
|
GuiImageData * cover = NULL;
|
|
|
|
GuiText * releasedTxt = NULL;
|
|
GuiText * publisherTxt = NULL;
|
|
GuiText * developerTxt = NULL;
|
|
GuiText * titleTxt = NULL;
|
|
Text * synopsisTxt = NULL;
|
|
GuiText ** genreTxt = NULL;
|
|
GuiText ** wifiTxt = NULL;
|
|
GuiText * wiitdb1Txt = NULL;
|
|
GuiText * wiitdb2Txt = NULL;
|
|
GuiText * wiitdb3Txt = NULL;
|
|
GuiText * memTxt = NULL;
|
|
|
|
GuiWindow gameinfoWindow(600, 308);
|
|
gameinfoWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
|
gameinfoWindow.SetPosition(0, -50);
|
|
|
|
GuiWindow gameinfoWindow2(600, 308);
|
|
gameinfoWindow2.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
|
gameinfoWindow2.SetPosition(0, -50);
|
|
|
|
GuiWindow txtWindow(350, 270);
|
|
txtWindow.SetAlignment(ALIGN_CENTRE, ALIGN_RIGHT);
|
|
txtWindow.SetPosition(95, 55);
|
|
|
|
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, Settings.sfxvolume);
|
|
GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
|
|
|
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
|
GuiImageData dialogBox1(Resources::GetFile("gameinfo1.png"), Resources::GetFileSize("gameinfo1.png"));
|
|
GuiImageData dialogBox2(Resources::GetFile("gameinfo1a.png"), Resources::GetFileSize("gameinfo1a.png"));
|
|
GuiImageData dialogBox3(Resources::GetFile("gameinfo2.png"), Resources::GetFileSize("gameinfo2.png"));
|
|
GuiImageData dialogBox4(Resources::GetFile("gameinfo2a.png"), Resources::GetFileSize("gameinfo2a.png"));
|
|
|
|
GuiTrigger trig1;
|
|
trig1.SetButtonOnlyTrigger(-1, WPAD_BUTTON_1 | WPAD_CLASSIC_BUTTON_X, 0);
|
|
GuiTrigger trigA;
|
|
trigA.SetButtonOnlyTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
|
GuiTrigger trigB;
|
|
trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B);
|
|
GuiTrigger trigU;
|
|
trigU.SetButtonOnlyTrigger(-1, WPAD_BUTTON_UP | WPAD_CLASSIC_BUTTON_UP, PAD_BUTTON_UP);
|
|
GuiTrigger trigD;
|
|
trigD.SetButtonOnlyTrigger(-1, WPAD_BUTTON_DOWN | WPAD_CLASSIC_BUTTON_DOWN, PAD_BUTTON_DOWN);
|
|
GuiTrigger trigH;
|
|
trigH.SetButtonOnlyTrigger(-1, WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME, 0);
|
|
|
|
//buttons for changing between synopsis and other info
|
|
GuiButton backBtn(0, 0);
|
|
backBtn.SetPosition(-20, -20);
|
|
backBtn.SetTrigger(&trigB);
|
|
gameinfoWindow.Append(&backBtn);
|
|
|
|
GuiButton nextBtn(0, 0);
|
|
nextBtn.SetPosition(20, 20);
|
|
nextBtn.SetTrigger(&trigA);
|
|
gameinfoWindow.Append(&nextBtn);
|
|
|
|
//buttons for scrolling the synopsis
|
|
GuiButton upBtn(0, 0);
|
|
upBtn.SetPosition(0, 0);
|
|
upBtn.SetTrigger(&trigU);
|
|
|
|
GuiButton dnBtn(0, 0);
|
|
dnBtn.SetPosition(0, 0);
|
|
dnBtn.SetTrigger(&trigD);
|
|
|
|
GuiButton homeBtn(0, 0);
|
|
homeBtn.SetPosition(0, 0);
|
|
homeBtn.SetTrigger(&trigH);
|
|
|
|
// button to save the url for the zip file for poor people without wifi
|
|
GuiButton urlBtn(0, 0);
|
|
urlBtn.SetPosition(0, 0);
|
|
urlBtn.SetTrigger(&trig1);
|
|
gameinfoWindow.Append(&urlBtn);
|
|
|
|
char linebuf[XML_SYNOPSISLEN] = "";
|
|
char linebuf2[100] = "";
|
|
|
|
// enable icons for required accessories
|
|
for (int i = 1; i <= XML_ELEMMAX; i++)
|
|
{
|
|
if (strcmp(gameinfo.accessoriesReq[i], "classiccontroller") == 0) classiccontroller = 1;
|
|
if (strcmp(gameinfo.accessoriesReq[i], "nunchuk") == 0) nunchuk = 1;
|
|
if (strcmp(gameinfo.accessoriesReq[i], "guitar") == 0) guitar = 1;
|
|
if (strcmp(gameinfo.accessoriesReq[i], "drums") == 0) drums = 1;
|
|
if (strcmp(gameinfo.accessoriesReq[i], "dancepad") == 0) dancepad = 1;
|
|
if (strcmp(gameinfo.accessoriesReq[i], "motionplus") == 0) motionplus = 1;
|
|
if (strcmp(gameinfo.accessoriesReq[i], "wheel") == 0) wheel = 1;
|
|
if (strcmp(gameinfo.accessoriesReq[i], "balanceboard") == 0) balanceboard = 1;
|
|
if (strcmp(gameinfo.accessoriesReq[i], "microphone") == 0) microphone = 1;
|
|
if (strcmp(gameinfo.accessoriesReq[i], "zapper") == 0) zapper = 1;
|
|
if (strcmp(gameinfo.accessoriesReq[i], "nintendods") == 0) nintendods = 1;
|
|
if (strcmp(gameinfo.accessoriesReq[i], "wiispeak") == 0) wiispeak = 1;
|
|
//if (strcmp(gameinfo.accessoriesReq[i],"vitalitysensor")==0)
|
|
// vitalitysensor=1;
|
|
if (strcmp(gameinfo.accessoriesReq[i], "gamecube") == 0) gamecube = 1;
|
|
}
|
|
|
|
// switch icons
|
|
if (nunchuk)
|
|
nunchukImgData = Resources::GetImageData("nunchukR.png");
|
|
else nunchukImgData = Resources::GetImageData("nunchuk.png");
|
|
|
|
if (classiccontroller)
|
|
classiccontrollerImgData = Resources::GetImageData("classiccontrollerR.png");
|
|
else classiccontrollerImgData = Resources::GetImageData("classiccontroller.png");
|
|
|
|
if (guitar)
|
|
guitarImgData = Resources::GetImageData("guitarR.png");
|
|
else guitarImgData = Resources::GetImageData("guitar.png");
|
|
|
|
if (gamecube)
|
|
gamecubeImgData = Resources::GetImageData("gcncontrollerR.png");
|
|
else gamecubeImgData = Resources::GetImageData("gcncontroller.png");
|
|
|
|
if (wheel)
|
|
wheelImgData = Resources::GetImageData("wheelR.png");
|
|
else wheelImgData = Resources::GetImageData("wheel.png");
|
|
|
|
if (motionplus)
|
|
motionplusImgData = Resources::GetImageData("motionplusR.png");
|
|
else motionplusImgData = Resources::GetImageData("motionplus.png");
|
|
|
|
if (drums)
|
|
drumsImgData = Resources::GetImageData("drumsR.png");
|
|
else drumsImgData = Resources::GetImageData("drums.png");
|
|
|
|
if (microphone)
|
|
microphoneImgData = Resources::GetImageData("microphoneR.png");
|
|
else microphoneImgData = Resources::GetImageData("microphone.png");
|
|
|
|
if (zapper)
|
|
zapperImgData = Resources::GetImageData("zapperR.png");
|
|
else zapperImgData = Resources::GetImageData("zapper.png");
|
|
|
|
if (wiispeak)
|
|
wiispeakImgData = Resources::GetImageData("wiispeakR.png");
|
|
else wiispeakImgData = Resources::GetImageData("wiispeak.png");
|
|
|
|
if (nintendods)
|
|
nintendodsImgData = Resources::GetImageData("nintendodsR.png");
|
|
else nintendodsImgData = Resources::GetImageData("nintendods.png");
|
|
|
|
if (balanceboard)
|
|
balanceboardImgData = Resources::GetImageData("balanceboardR.png");
|
|
else balanceboardImgData = Resources::GetImageData("balanceboard.png");
|
|
|
|
if (dancepad)
|
|
dancepadImgData = Resources::GetImageData("dancepadR.png");
|
|
else dancepadImgData = Resources::GetImageData("dancepad.png");
|
|
|
|
// look for optional accessories
|
|
for (int i = 1; i <= XML_ELEMMAX; i++)
|
|
{
|
|
if (strcmp(gameinfo.accessories[i], "classiccontroller") == 0) classiccontroller = 1;
|
|
if (strcmp(gameinfo.accessories[i], "nunchuk") == 0) nunchuk = 1;
|
|
if (strcmp(gameinfo.accessories[i], "guitar") == 0) guitar = 1;
|
|
if (strcmp(gameinfo.accessories[i], "drums") == 0) drums = 1;
|
|
if (strcmp(gameinfo.accessories[i], "dancepad") == 0) dancepad = 1;
|
|
if (strcmp(gameinfo.accessories[i], "motionplus") == 0) motionplus = 1;
|
|
if (strcmp(gameinfo.accessories[i], "wheel") == 0) wheel = 1;
|
|
if (strcmp(gameinfo.accessories[i], "balanceboard") == 0) balanceboard = 1;
|
|
if (strcmp(gameinfo.accessories[i], "microphone") == 0) microphone = 1;
|
|
if (strcmp(gameinfo.accessories[i], "zapper") == 0) zapper = 1;
|
|
if (strcmp(gameinfo.accessories[i], "nintendods") == 0) nintendods = 1;
|
|
if (strcmp(gameinfo.accessories[i], "wiispeak") == 0) wiispeak = 1;
|
|
//if (strcmp(gameinfo.accessories[i],"vitalitysensor")==0)
|
|
// vitalitysensor=1;
|
|
if (strcmp(gameinfo.accessories[i], "gamecube") == 0) gamecube = 1;
|
|
}
|
|
|
|
dialogBoxImg1 = new GuiImage(&dialogBox1);
|
|
dialogBoxImg1->SetAlignment(0, 3);
|
|
dialogBoxImg1->SetPosition(-9, 0);
|
|
|
|
dialogBoxImg2 = new GuiImage(&dialogBox2);
|
|
dialogBoxImg2->SetAlignment(0, 3);
|
|
dialogBoxImg2->SetPosition(145, 0);
|
|
|
|
dialogBoxImg3 = new GuiImage(&dialogBox3);
|
|
dialogBoxImg3->SetAlignment(0, 3);
|
|
dialogBoxImg3->SetPosition(301, 0);
|
|
|
|
dialogBoxImg4 = new GuiImage(&dialogBox4);
|
|
dialogBoxImg4->SetAlignment(0, 3);
|
|
dialogBoxImg4->SetPosition(457, 0);
|
|
|
|
gameinfoWindow.Append(dialogBoxImg1);
|
|
gameinfoWindow.Append(dialogBoxImg2);
|
|
gameinfoWindow.Append(dialogBoxImg3);
|
|
gameinfoWindow.Append(dialogBoxImg4);
|
|
|
|
char imgPath[150];
|
|
snprintf(imgPath, sizeof(imgPath), "%s%s.png", Settings.covers_path, ID);
|
|
cover = new GuiImageData(imgPath); //load full id image
|
|
if (!cover->GetImage())
|
|
{
|
|
delete cover;
|
|
cover = Resources::GetImageData("nocover.png");
|
|
}
|
|
delete coverImg;
|
|
coverImg = NULL;
|
|
|
|
coverImg = new GuiImage(cover);
|
|
coverImg->SetWidescreen(Settings.widescreen);
|
|
coverImg->SetPosition(15, 30);
|
|
gameinfoWindow.Append(coverImg);
|
|
|
|
// # of players
|
|
if (strcmp(gameinfo.players, "") != 0)
|
|
{
|
|
playersImgData = Resources::GetImageData("wiimote1.png");
|
|
if (atoi(gameinfo.players) > 1)
|
|
{
|
|
playersImgData = Resources::GetImageData("wiimote2.png");
|
|
}
|
|
if (atoi(gameinfo.players) > 2)
|
|
{
|
|
playersImgData = Resources::GetImageData("wiimote4.png");
|
|
}
|
|
|
|
playersImg = new GuiImage(playersImgData);
|
|
playersImg->SetWidescreen(Settings.widescreen);
|
|
playersImg->SetPosition(intputX, inputY);
|
|
playersImg->SetAlignment(0, 4);
|
|
gameinfoWindow.Append(playersImg);
|
|
intputX += (Settings.widescreen ? playersImg->GetWidth() * .8 : playersImg->GetWidth()) + 5;
|
|
}
|
|
|
|
//draw the input types for this game
|
|
if (motionplus == 1)
|
|
{
|
|
motionplusImg = new GuiImage(motionplusImgData);
|
|
motionplusImg->SetWidescreen(Settings.widescreen);
|
|
motionplusImg->SetPosition(intputX, inputY);
|
|
motionplusImg->SetAlignment(0, 4);
|
|
gameinfoWindow.Append(motionplusImg);
|
|
intputX += (Settings.widescreen ? motionplusImg->GetWidth() * .8 : motionplusImg->GetWidth()) + 5;
|
|
}
|
|
if (nunchuk == 1)
|
|
{
|
|
nunchukImg = new GuiImage(nunchukImgData);
|
|
nunchukImg->SetWidescreen(Settings.widescreen);
|
|
nunchukImg->SetPosition(intputX, inputY);
|
|
nunchukImg->SetAlignment(0, 4);
|
|
gameinfoWindow.Append(nunchukImg);
|
|
intputX += (Settings.widescreen ? nunchukImg->GetWidth() * .8 : nunchukImg->GetWidth()) + 5;
|
|
}
|
|
if (classiccontroller == 1)
|
|
{
|
|
classiccontrollerImg = new GuiImage(classiccontrollerImgData);
|
|
classiccontrollerImg->SetWidescreen(Settings.widescreen);
|
|
classiccontrollerImg->SetPosition(intputX, inputY);
|
|
classiccontrollerImg->SetAlignment(0, 4);
|
|
gameinfoWindow.Append(classiccontrollerImg);
|
|
intputX += (Settings.widescreen ? classiccontrollerImg->GetWidth() * .8 : classiccontrollerImg->GetWidth())
|
|
+ 5;
|
|
}
|
|
if (gamecube == 1)
|
|
{
|
|
gcImg = new GuiImage(gamecubeImgData);
|
|
gcImg->SetWidescreen(Settings.widescreen);
|
|
gcImg->SetPosition(intputX, inputY);
|
|
gcImg->SetAlignment(0, 4);
|
|
gameinfoWindow.Append(gcImg);
|
|
intputX += (Settings.widescreen ? gcImg->GetWidth() * .8 : gcImg->GetWidth()) + 5;
|
|
}
|
|
if (wheel == 1)
|
|
{
|
|
wheelImg = new GuiImage(wheelImgData);
|
|
wheelImg->SetWidescreen(Settings.widescreen);
|
|
wheelImg->SetPosition(intputX, inputY);
|
|
wheelImg->SetAlignment(0, 4);
|
|
gameinfoWindow.Append(wheelImg);
|
|
intputX += (Settings.widescreen ? wheelImg->GetWidth() * .8 : wheelImg->GetWidth()) + 5;
|
|
}
|
|
if (guitar == 1)
|
|
{
|
|
guitarImg = new GuiImage(guitarImgData);
|
|
guitarImg->SetWidescreen(Settings.widescreen);
|
|
guitarImg->SetPosition(intputX, inputY);
|
|
guitarImg->SetAlignment(0, 4);
|
|
gameinfoWindow.Append(guitarImg);
|
|
intputX += (Settings.widescreen ? guitarImg->GetWidth() * .8 : guitarImg->GetWidth()) + 5;
|
|
}
|
|
if (drums == 1)
|
|
{
|
|
drumsImg = new GuiImage(drumsImgData);
|
|
drumsImg->SetWidescreen(Settings.widescreen);
|
|
drumsImg->SetPosition(intputX, inputY);
|
|
drumsImg->SetAlignment(0, 4);
|
|
gameinfoWindow.Append(drumsImg);
|
|
intputX += (Settings.widescreen ? drumsImg->GetWidth() * .8 : drumsImg->GetWidth()) + 5;
|
|
}
|
|
if (microphone == 1)
|
|
{
|
|
microphoneImg = new GuiImage(microphoneImgData);
|
|
microphoneImg->SetWidescreen(Settings.widescreen);
|
|
microphoneImg->SetPosition(intputX, inputY);
|
|
microphoneImg->SetAlignment(0, 4);
|
|
gameinfoWindow.Append(microphoneImg);
|
|
intputX += (Settings.widescreen ? microphoneImg->GetWidth() * .8 : microphoneImg->GetWidth()) + 5;
|
|
}
|
|
if (zapper == 1)
|
|
{
|
|
zapperImg = new GuiImage(zapperImgData);
|
|
zapperImg->SetWidescreen(Settings.widescreen);
|
|
zapperImg->SetPosition(intputX, inputY);
|
|
zapperImg->SetAlignment(0, 4);
|
|
gameinfoWindow.Append(zapperImg);
|
|
intputX += (Settings.widescreen ? zapperImg->GetWidth() * .8 : zapperImg->GetWidth()) + 5;
|
|
}
|
|
if (wiispeak == 1)
|
|
{
|
|
wiispeakImg = new GuiImage(wiispeakImgData);
|
|
wiispeakImg->SetWidescreen(Settings.widescreen);
|
|
wiispeakImg->SetPosition(intputX, inputY);
|
|
wiispeakImg->SetAlignment(0, 4);
|
|
gameinfoWindow.Append(wiispeakImg);
|
|
intputX += (Settings.widescreen ? wiispeakImg->GetWidth() * .8 : wiispeakImg->GetWidth()) + 5;
|
|
}
|
|
if (nintendods == 1)
|
|
{
|
|
nintendodsImg = new GuiImage(nintendodsImgData);
|
|
nintendodsImg->SetWidescreen(Settings.widescreen);
|
|
nintendodsImg->SetPosition(intputX, inputY);
|
|
nintendodsImg->SetAlignment(0, 4);
|
|
gameinfoWindow.Append(nintendodsImg);
|
|
intputX += (Settings.widescreen ? nintendodsImg->GetWidth() * .8 : nintendodsImg->GetWidth()) + 5;
|
|
}
|
|
if (dancepad == 1)
|
|
{
|
|
dancepadImg = new GuiImage(dancepadImgData);
|
|
dancepadImg->SetWidescreen(Settings.widescreen);
|
|
dancepadImg->SetPosition(intputX, inputY);
|
|
dancepadImg->SetAlignment(0, 4);
|
|
gameinfoWindow.Append(dancepadImg);
|
|
intputX += (Settings.widescreen ? dancepadImg->GetWidth() * .8 : dancepadImg->GetWidth()) + 5;
|
|
}
|
|
if (balanceboard == 1)
|
|
{
|
|
balanceboardImg = new GuiImage(balanceboardImgData);
|
|
balanceboardImg->SetWidescreen(Settings.widescreen);
|
|
balanceboardImg->SetPosition(intputX, inputY);
|
|
balanceboardImg->SetAlignment(0, 4);
|
|
gameinfoWindow.Append(balanceboardImg);
|
|
intputX += (Settings.widescreen ? balanceboardImg->GetWidth() * .8 : balanceboardImg->GetWidth()) + 5;
|
|
}
|
|
|
|
// # online players
|
|
if ((strcmp(gameinfo.wifiplayers, "") != 0) && (strcmp(gameinfo.wifiplayers, "0") != 0))
|
|
{
|
|
wifiplayersImgData = Resources::GetImageData("wifi1.png");
|
|
if (atoi(gameinfo.wifiplayers) > 1)
|
|
{
|
|
wifiplayersImgData = Resources::GetImageData("wifi2.png");
|
|
}
|
|
if (atoi(gameinfo.wifiplayers) > 2)
|
|
{
|
|
wifiplayersImgData = Resources::GetImageData("wifi4.png");
|
|
}
|
|
if (atoi(gameinfo.wifiplayers) > 4)
|
|
{
|
|
wifiplayersImgData =Resources::GetImageData("wifi8.png");
|
|
}
|
|
if (atoi(gameinfo.wifiplayers) > 8)
|
|
{
|
|
wifiplayersImgData = Resources::GetImageData("wifi12.png");
|
|
}
|
|
if (atoi(gameinfo.wifiplayers) > 12)
|
|
{
|
|
wifiplayersImgData = Resources::GetImageData("wifi16.png");
|
|
}
|
|
if (atoi(gameinfo.wifiplayers) > 16)
|
|
{
|
|
wifiplayersImgData = Resources::GetImageData("wifi32.png");
|
|
}
|
|
wifiplayersImg = new GuiImage(wifiplayersImgData);
|
|
wifiplayersImg->SetWidescreen(Settings.widescreen);
|
|
wifiplayersImg->SetPosition(intputX, inputY);
|
|
wifiplayersImg->SetAlignment(0, 4);
|
|
gameinfoWindow.Append(wifiplayersImg);
|
|
intputX += (Settings.widescreen ? wifiplayersImg->GetWidth() * .8 : wifiplayersImg->GetWidth()) + 5;
|
|
}
|
|
|
|
// ratings
|
|
if (strcmp(gameinfo.ratingtype, "") != 0)
|
|
{
|
|
if (strcmp(gameinfo.ratingtype, "ESRB") == 0)
|
|
{
|
|
if (strcmp(gameinfo.ratingvalueESRB, "EC") == 0)
|
|
ratingImgData = Resources::GetImageData("esrb_ec.png");
|
|
else if (strcmp(gameinfo.ratingvalueESRB, "E") == 0)
|
|
ratingImgData = Resources::GetImageData("esrb_e.png");
|
|
else if (strcmp(gameinfo.ratingvalueESRB, "E10+") == 0)
|
|
ratingImgData = Resources::GetImageData("esrb_eten.png");
|
|
else if (strcmp(gameinfo.ratingvalueESRB, "T") == 0)
|
|
ratingImgData = Resources::GetImageData("esrb_t.png");
|
|
else if (strcmp(gameinfo.ratingvalueESRB, "M") == 0)
|
|
ratingImgData = Resources::GetImageData("esrb_m.png");
|
|
else if (strcmp(gameinfo.ratingvalueESRB, "AO") == 0)
|
|
ratingImgData = Resources::GetImageData("esrb_ao.png");
|
|
else
|
|
{
|
|
ratingImgData = Resources::GetImageData("norating.png");
|
|
}
|
|
} //there are 2 values here cause some countries are stupid and
|
|
else if (strcmp(gameinfo.ratingtype, "PEGI") == 0) //can't use the same as everybody else
|
|
{
|
|
if ((strcmp(gameinfo.ratingvaluePEGI, "3") == 0) || (strcmp(gameinfo.ratingvaluePEGI, "4") == 0))
|
|
ratingImgData = Resources::GetImageData("pegi_3.png");
|
|
else if ((strcmp(gameinfo.ratingvaluePEGI, "7") == 0) || (strcmp(gameinfo.ratingvaluePEGI, "7") == 0))
|
|
ratingImgData = Resources::GetImageData("pegi_7.png");
|
|
else if (strcmp(gameinfo.ratingvaluePEGI, "12") == 0)
|
|
ratingImgData = Resources::GetImageData("pegi_12.png");
|
|
else if ((strcmp(gameinfo.ratingvaluePEGI, "16") == 0) || (strcmp(gameinfo.ratingvaluePEGI, "15") == 0))
|
|
ratingImgData = Resources::GetImageData("pegi_16.png");
|
|
else if (strcmp(gameinfo.ratingvaluePEGI, "18") == 0)
|
|
ratingImgData = Resources::GetImageData("pegi_18.png");
|
|
else
|
|
{
|
|
ratingImgData = Resources::GetImageData("norating.png");
|
|
}
|
|
}
|
|
else if (strcmp(gameinfo.ratingtype, "CERO") == 0)
|
|
{
|
|
if (strcmp(gameinfo.ratingvalueCERO, "A") == 0)
|
|
ratingImgData = Resources::GetImageData("cero_a.png");
|
|
else if (strcmp(gameinfo.ratingvalueCERO, "B") == 0)
|
|
ratingImgData = Resources::GetImageData("cero_b.png");
|
|
else if (strcmp(gameinfo.ratingvalueCERO, "C") == 0)
|
|
ratingImgData = Resources::GetImageData("cero_c.png");
|
|
else if (strcmp(gameinfo.ratingvalueCERO, "D") == 0)
|
|
ratingImgData = Resources::GetImageData("cero_d.png");
|
|
else if (strcmp(gameinfo.ratingvalueCERO, "Z") == 0)
|
|
ratingImgData = Resources::GetImageData("cero_z.png");
|
|
else
|
|
{
|
|
ratingImgData = Resources::GetImageData("norating.png");
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
ratingImgData = Resources::GetImageData("norating.png");
|
|
}
|
|
ratingImg = new GuiImage(ratingImgData);
|
|
ratingImg->SetWidescreen(Settings.widescreen);
|
|
ratingImg->SetPosition(-25, inputY);
|
|
ratingImg->SetAlignment(1, 4);
|
|
gameinfoWindow.Append(ratingImg);
|
|
intputX += (Settings.widescreen ? ratingImg->GetWidth() * .8 : ratingImg->GetWidth()) + 5;
|
|
}
|
|
|
|
// memory info
|
|
if (showmeminfo)
|
|
{
|
|
char meminfotxt[200];
|
|
strlcpy(meminfotxt, MemInfo(), sizeof(meminfotxt));
|
|
snprintf(linebuf, sizeof(linebuf), "%s", meminfotxt);
|
|
memTxt = new GuiText(linebuf, 18, ( GXColor )
|
|
{ 0, 0, 0, 255});
|
|
memTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
|
memTxt->SetPosition(0, 0);
|
|
gameinfoWindow.Append(memTxt);
|
|
}
|
|
|
|
// title
|
|
int titlefontsize = 25;
|
|
if (strcmp(gameinfo.title, "") != 0)
|
|
{
|
|
snprintf(linebuf, sizeof(linebuf), "%s", gameinfo.title);
|
|
titleTxt = new GuiText(linebuf, titlefontsize, ( GXColor )
|
|
{ 0, 0, 0, 255});
|
|
titleTxt->SetMaxWidth(350, SCROLL_HORIZONTAL);
|
|
//while (titleTxt->GetWidth()>250) { titleTxt->SetFontSize(titlefontsize-=2); }
|
|
titleTxt->SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
|
titleTxt->SetPosition(txtXOffset, 12 + titley);
|
|
gameinfoWindow.Append(titleTxt);
|
|
}
|
|
|
|
//date
|
|
snprintf(linebuf2, sizeof(linebuf2), " ");
|
|
if (strcmp(gameinfo.day, "") != 0)
|
|
{
|
|
snprintf(linebuf2, sizeof(linebuf2), "%s ", gameinfo.day);
|
|
}
|
|
if (strcmp(gameinfo.month, "") != 0)
|
|
{
|
|
switch (atoi(gameinfo.month))
|
|
{
|
|
case 1:
|
|
snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Jan" ));
|
|
break;
|
|
case 2:
|
|
snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Feb" ));
|
|
break;
|
|
case 3:
|
|
snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Mar" ));
|
|
break;
|
|
case 4:
|
|
snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Apr" ));
|
|
break;
|
|
case 5:
|
|
snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "May" ));
|
|
break;
|
|
case 6:
|
|
snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "June" ));
|
|
break;
|
|
case 7:
|
|
snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "July" ));
|
|
break;
|
|
case 8:
|
|
snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Aug" ));
|
|
break;
|
|
case 9:
|
|
snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Sept" ));
|
|
break;
|
|
case 10:
|
|
snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Oct" ));
|
|
break;
|
|
case 11:
|
|
snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Nov" ));
|
|
break;
|
|
case 12:
|
|
snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Dec" ));
|
|
break;
|
|
}
|
|
}
|
|
if (strcmp(gameinfo.year, "") != 0)
|
|
{
|
|
snprintf(linebuf, sizeof(linebuf), "%s : %s%s", tr( "Released" ), linebuf2, gameinfo.year);
|
|
releasedTxt = new GuiText(linebuf, 16, ( GXColor )
|
|
{ 0, 0, 0, 255});
|
|
if (releasedTxt->GetWidth() > 300) newline = 2;
|
|
releasedTxt->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
|
releasedTxt->SetPosition(-17, 12 + indexy);
|
|
indexy += (20 * newline);
|
|
newline = 1;
|
|
gameinfoWindow.Append(releasedTxt);
|
|
}
|
|
|
|
//publisher
|
|
if (strcmp(gameinfo.publisher, "") != 0)
|
|
{
|
|
snprintf(linebuf, sizeof(linebuf), "%s %s", tr( "Published by" ), gameinfo.publisher);
|
|
publisherTxt = new GuiText(linebuf, 16, ( GXColor )
|
|
{ 0, 0, 0, 255});
|
|
if (publisherTxt->GetWidth() > 250) newline = 2;
|
|
publisherTxt->SetMaxWidth(250, WRAP);
|
|
publisherTxt->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
|
publisherTxt->SetPosition(-17, 12 + indexy);
|
|
indexy += (20 * newline);
|
|
newline = 1;
|
|
gameinfoWindow.Append(publisherTxt);
|
|
}
|
|
|
|
//developer
|
|
if (strcmp(gameinfo.developer, "") != 0 && strcasecmp(gameinfo.developer, gameinfo.publisher) != 0)
|
|
{
|
|
snprintf(linebuf, sizeof(linebuf), "%s %s", tr( "Developed by" ), gameinfo.developer);
|
|
developerTxt = new GuiText(linebuf, 16, ( GXColor )
|
|
{ 0, 0, 0, 255});
|
|
if (developerTxt->GetWidth() > 250) newline = 2;
|
|
developerTxt->SetMaxWidth(250, WRAP);
|
|
developerTxt->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
|
developerTxt->SetPosition(-17, 12 + indexy);
|
|
indexy += (20 * newline);
|
|
newline = 1;
|
|
gameinfoWindow.Append(developerTxt);
|
|
}
|
|
|
|
//genre
|
|
int genreY = marginY;
|
|
genreTxt = new GuiText *[gameinfo.genreCnt + 1];
|
|
for (int i = 1; i <= gameinfo.genreCnt; i++)
|
|
{
|
|
snprintf(linebuf, sizeof(linebuf), "%s", gameinfo.genresplit[i]);
|
|
genreTxt[i] = new GuiText(linebuf, 16, ( GXColor )
|
|
{ 0, 0, 0, 255});
|
|
genreTxt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
|
genreTxt[i]->SetPosition(205, 12 + genreY);
|
|
genreY += 20;
|
|
gameinfoWindow.Append(genreTxt[i]);
|
|
}
|
|
|
|
//online
|
|
wifiTxt = new GuiText *[gameinfo.wifiCnt + 1];
|
|
for (int i = gameinfo.wifiCnt; i >= 1; i--)
|
|
{
|
|
if (strcmp(gameinfo.wififeatures[i], "Nintendods") == 0)
|
|
{
|
|
snprintf(linebuf, sizeof(linebuf), "Nintendo DS");
|
|
}
|
|
else
|
|
{
|
|
snprintf(linebuf, sizeof(linebuf), "%s", gameinfo.wififeatures[i]);
|
|
}
|
|
wifiTxt[i] = new GuiText(linebuf, 16, ( GXColor )
|
|
{ 0, 0, 0, 255});
|
|
wifiTxt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
|
wifiTxt[i]->SetPosition(215, 200 + wifiY);
|
|
wifiY -= 20;
|
|
gameinfoWindow.Append(wifiTxt[i]);
|
|
}
|
|
if (strcmp(gameinfo.wififeatures[1], "") != 0)
|
|
{
|
|
snprintf(linebuf, sizeof(linebuf), "%s:", tr( "WiFi Features" ));
|
|
}
|
|
else
|
|
{
|
|
strcpy(linebuf, "");
|
|
}
|
|
wifiTxt[0] = new GuiText(linebuf, 16, ( GXColor )
|
|
{ 0, 0, 0, 255});
|
|
wifiTxt[0]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
|
wifiTxt[0]->SetPosition(205, 200 + wifiY);
|
|
gameinfoWindow.Append(wifiTxt[0]);
|
|
|
|
//synopsis
|
|
int pagesize = 12;
|
|
if (strcmp(gameinfo.synopsis, "") != 0)
|
|
{
|
|
snprintf(linebuf, sizeof(linebuf), "%s", gameinfo.synopsis);
|
|
synopsisTxt = new Text(linebuf, 16, ( GXColor )
|
|
{ 0, 0, 0, 255});
|
|
synopsisTxt->SetMaxWidth(350);
|
|
synopsisTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
|
synopsisTxt->SetPosition(0, 0);
|
|
synopsisTxt->SetLinesToDraw(pagesize);
|
|
synopsisTxt->Refresh();
|
|
|
|
dialogBoxImg11 = new GuiImage(&dialogBox1);
|
|
dialogBoxImg11->SetAlignment(0, 3);
|
|
dialogBoxImg11->SetPosition(-9, 0);
|
|
|
|
dialogBoxImg22 = new GuiImage(&dialogBox2);
|
|
dialogBoxImg22->SetAlignment(0, 3);
|
|
dialogBoxImg22->SetPosition(145, 0);
|
|
|
|
dialogBoxImg33 = new GuiImage(&dialogBox3);
|
|
dialogBoxImg33->SetAlignment(0, 3);
|
|
dialogBoxImg33->SetPosition(301, 0);
|
|
|
|
dialogBoxImg44 = new GuiImage(&dialogBox4);
|
|
dialogBoxImg44->SetAlignment(0, 3);
|
|
dialogBoxImg44->SetPosition(457, 0);
|
|
|
|
gameinfoWindow2.Append(dialogBoxImg11);
|
|
gameinfoWindow2.Append(dialogBoxImg22);
|
|
gameinfoWindow2.Append(dialogBoxImg33);
|
|
gameinfoWindow2.Append(dialogBoxImg44);
|
|
|
|
txtWindow.Append(synopsisTxt);
|
|
txtWindow.Append(&upBtn);
|
|
txtWindow.Append(&dnBtn);
|
|
coverImg2 = new GuiImage(cover);
|
|
coverImg2->SetWidescreen(Settings.widescreen);
|
|
coverImg2->SetPosition(15, 30);
|
|
gameinfoWindow2.Append(coverImg2);
|
|
gameinfoWindow2.Append(&txtWindow);
|
|
}
|
|
|
|
snprintf(linebuf, sizeof(linebuf), "http://wiitdb.com");
|
|
//snprintf(linebuf, sizeof(linebuf), tr("Don't bother the USB Loader GX Team about errors in this file."));
|
|
wiitdb1Txt = new GuiText(linebuf, 16, ( GXColor )
|
|
{ 0, 0, 0, 255});
|
|
wiitdb1Txt->SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
|
|
wiitdb1Txt->SetPosition(40, -15);
|
|
gameinfoWindow.Append(wiitdb1Txt);
|
|
snprintf(linebuf, sizeof(linebuf), tr( "If you don't have WiFi, press 1 to get an URL to get your WiiTDB.zip" ));
|
|
wiitdb2Txt = new GuiText(linebuf, 14, ( GXColor )
|
|
{ 0, 0, 0, 255});
|
|
wiitdb2Txt->SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
|
|
wiitdb2Txt->SetPosition(202, -15);
|
|
gameinfoWindow.Append(wiitdb2Txt);
|
|
snprintf(linebuf, sizeof(linebuf), " ");
|
|
wiitdb3Txt = new GuiText(linebuf, 14, ( GXColor )
|
|
{ 0, 0, 0, 255});
|
|
wiitdb3Txt->SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
|
|
wiitdb3Txt->SetPosition(202, -4);
|
|
gameinfoWindow.Append(wiitdb3Txt);
|
|
|
|
gameinfoWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 100);
|
|
|
|
GuiTrigger trigZ;
|
|
trigZ.SetButtonOnlyTrigger(-1, WPAD_NUNCHUK_BUTTON_Z | WPAD_CLASSIC_BUTTON_ZL, PAD_TRIGGER_Z);
|
|
|
|
GuiButton screenShotBtn(0, 0);
|
|
screenShotBtn.SetPosition(0, 0);
|
|
screenShotBtn.SetTrigger(&trigZ);
|
|
gameinfoWindow.Append(&screenShotBtn);
|
|
HaltGui();
|
|
//mainWindow->SetState(STATE_DISABLED);
|
|
mainWindow->Append(&gameinfoWindow);
|
|
mainWindow->ChangeFocus(&gameinfoWindow);
|
|
ResumeGui();
|
|
|
|
bool savedURL = false;
|
|
|
|
while (choice == -1)
|
|
{
|
|
|
|
VIDEO_WaitVSync();
|
|
if (shutdown == 1)
|
|
{
|
|
wiilight(0);
|
|
Sys_Shutdown();
|
|
}
|
|
else if (reset == 1)
|
|
Sys_Reboot();
|
|
|
|
else if ((backBtn.GetState() == STATE_CLICKED) || (backBtn.GetState() == STATE_HELD))
|
|
{
|
|
backBtn.ResetState();
|
|
if (page == 1)
|
|
{
|
|
choice = 1;
|
|
if (synopsisTxt) delete synopsisTxt;
|
|
synopsisTxt = NULL;
|
|
break;
|
|
}
|
|
else if (page == 2)
|
|
{
|
|
HaltGui();
|
|
gameinfoWindow2.Remove(&nextBtn);
|
|
gameinfoWindow2.Remove(&backBtn);
|
|
gameinfoWindow2.Remove(&homeBtn);
|
|
gameinfoWindow2.Remove(&screenShotBtn);
|
|
gameinfoWindow2.SetVisible(false);
|
|
gameinfoWindow.SetVisible(true);
|
|
gameinfoWindow.Append(&backBtn);
|
|
gameinfoWindow.Append(&nextBtn);
|
|
gameinfoWindow.Append(&homeBtn);
|
|
gameinfoWindow.Append(&screenShotBtn);
|
|
mainWindow->Remove(&gameinfoWindow2);
|
|
ResumeGui();
|
|
page = 1;
|
|
}
|
|
}
|
|
else if (((nextBtn.GetState() == STATE_CLICKED) || (nextBtn.GetState() == STATE_HELD)) && (strcmp(
|
|
gameinfo.synopsis, "") != 0))
|
|
{
|
|
nextBtn.ResetState();
|
|
|
|
if (page == 1)
|
|
{
|
|
HaltGui();
|
|
gameinfoWindow.Remove(&nextBtn);
|
|
gameinfoWindow.Remove(&backBtn);
|
|
gameinfoWindow.Remove(&homeBtn);
|
|
gameinfoWindow.Remove(&screenShotBtn);
|
|
gameinfoWindow.SetVisible(false);
|
|
gameinfoWindow2.SetVisible(true);
|
|
coverImg->SetPosition(15, 30);
|
|
gameinfoWindow2.Append(&nextBtn);
|
|
gameinfoWindow2.Append(&backBtn);
|
|
gameinfoWindow2.Append(&homeBtn);
|
|
gameinfoWindow2.Append(&screenShotBtn);
|
|
mainWindow->Append(&gameinfoWindow2);
|
|
ResumeGui();
|
|
page = 2;
|
|
}
|
|
else
|
|
{
|
|
HaltGui();
|
|
gameinfoWindow2.Remove(&nextBtn);
|
|
gameinfoWindow2.Remove(&backBtn);
|
|
gameinfoWindow2.Remove(&homeBtn);
|
|
gameinfoWindow2.Remove(&screenShotBtn);
|
|
gameinfoWindow2.SetVisible(false);
|
|
gameinfoWindow.SetVisible(true);
|
|
gameinfoWindow.Append(&backBtn);
|
|
gameinfoWindow.Append(&nextBtn);
|
|
gameinfoWindow.Append(&homeBtn);
|
|
gameinfoWindow.Append(&screenShotBtn);
|
|
mainWindow->Remove(&gameinfoWindow2);
|
|
ResumeGui();
|
|
page = 1;
|
|
}
|
|
|
|
}
|
|
else if ((upBtn.GetState() == STATE_CLICKED || upBtn.GetState() == STATE_HELD) && page == 2)
|
|
{
|
|
synopsisTxt->PreviousLine();
|
|
|
|
usleep(60000);
|
|
if (!((ButtonsHold() & WPAD_BUTTON_UP) || (ButtonsHold() & PAD_BUTTON_UP))) upBtn.ResetState();
|
|
|
|
}
|
|
else if ((dnBtn.GetState() == STATE_CLICKED || dnBtn.GetState() == STATE_HELD) && page == 2)
|
|
{
|
|
synopsisTxt->NextLine();
|
|
|
|
usleep(60000);
|
|
if (!((ButtonsHold() & WPAD_BUTTON_DOWN) || (ButtonsHold() & PAD_BUTTON_DOWN))) dnBtn.ResetState();
|
|
}
|
|
else if (homeBtn.GetState() == STATE_CLICKED)
|
|
{
|
|
if (page == 1)
|
|
{
|
|
choice = 2;
|
|
if (synopsisTxt) delete synopsisTxt;
|
|
synopsisTxt = NULL;
|
|
break;
|
|
}
|
|
else if (page == 2)
|
|
{
|
|
HaltGui();
|
|
gameinfoWindow2.SetVisible(false);
|
|
gameinfoWindow.SetVisible(true);
|
|
mainWindow->Remove(&gameinfoWindow2);
|
|
ResumeGui();
|
|
page = 1;
|
|
}
|
|
}
|
|
else if (urlBtn.GetState() == STATE_CLICKED && !savedURL)
|
|
{
|
|
snprintf(linebuf, sizeof(linebuf), tr( "Please wait..." ));
|
|
wiitdb2Txt->SetText(linebuf);
|
|
gameinfoWindow.Append(wiitdb2Txt);
|
|
if (save_XML_URL())
|
|
{
|
|
snprintf(linebuf, sizeof(linebuf), tr( "Your URL has been saved in %sWiiTDB_URL.txt." ),
|
|
Settings.update_path);
|
|
wiitdb2Txt->SetText(linebuf);
|
|
gameinfoWindow.Append(wiitdb2Txt);
|
|
snprintf(linebuf, sizeof(linebuf), tr( "Paste it into your browser to get your WiiTDB.zip." ));
|
|
wiitdb3Txt->SetText(linebuf);
|
|
gameinfoWindow.Append(wiitdb3Txt);
|
|
savedURL = true;
|
|
}
|
|
else
|
|
{
|
|
snprintf(linebuf, sizeof(linebuf), tr( "Could not save." ));
|
|
wiitdb2Txt->SetText(linebuf);
|
|
gameinfoWindow.Append(wiitdb2Txt);
|
|
}
|
|
urlBtn.ResetState();
|
|
}
|
|
else if (screenShotBtn.GetState() == STATE_CLICKED)
|
|
{
|
|
gprintf("\n\tscreenShotBtn clicked");
|
|
screenShotBtn.ResetState();
|
|
ScreenShot();
|
|
gprintf("...It's easy, mmmmmmKay");
|
|
}
|
|
}
|
|
if (page == 1)
|
|
{
|
|
gameinfoWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 100);
|
|
while (gameinfoWindow.GetEffect() > 0)
|
|
usleep(50);
|
|
HaltGui();
|
|
mainWindow->Remove(&gameinfoWindow);
|
|
mainWindow->SetState(STATE_DEFAULT);
|
|
|
|
delete playersImgData;
|
|
delete playersImg;
|
|
|
|
delete wifiplayersImgData;
|
|
delete wifiplayersImg;
|
|
delete ratingImg;
|
|
|
|
delete classiccontrollerImg;
|
|
delete nunchukImg;
|
|
delete guitarImg;
|
|
delete drumsImg;
|
|
delete dancepadImg;
|
|
delete motionplusImg;
|
|
delete wheelImg;
|
|
delete balanceboardImg;
|
|
delete microphoneImg;
|
|
delete zapperImg;
|
|
delete wiispeakImg;
|
|
delete nintendodsImg;
|
|
//delete vitalitysensorImg;
|
|
delete gcImg;
|
|
delete dialogBoxImg1;
|
|
delete dialogBoxImg2;
|
|
delete dialogBoxImg3;
|
|
delete dialogBoxImg4;
|
|
delete dialogBoxImg11;
|
|
delete dialogBoxImg22;
|
|
delete dialogBoxImg33;
|
|
delete dialogBoxImg44;
|
|
delete coverImg;
|
|
delete coverImg2;
|
|
|
|
delete classiccontrollerImgData;
|
|
delete nunchukImgData;
|
|
delete guitarImgData;
|
|
delete drumsImgData;
|
|
delete motionplusImgData;
|
|
delete wheelImgData;
|
|
delete balanceboardImgData;
|
|
delete dancepadImgData;
|
|
delete microphoneImgData;
|
|
delete zapperImgData;
|
|
delete wiispeakImgData;
|
|
delete nintendodsImgData;
|
|
//delete vitalitysensorImgData;
|
|
delete gamecubeImgData;
|
|
delete ratingImgData;
|
|
delete cover;
|
|
delete releasedTxt;
|
|
delete publisherTxt;
|
|
delete developerTxt;
|
|
delete titleTxt;
|
|
delete synopsisTxt;
|
|
delete wiitdb1Txt;
|
|
delete wiitdb2Txt;
|
|
delete wiitdb3Txt;
|
|
delete memTxt;
|
|
if (gameinfo.genreCnt > 0)
|
|
{
|
|
for (int i = 1; i <= gameinfo.genreCnt; i++)
|
|
{
|
|
delete genreTxt[i];
|
|
}
|
|
}
|
|
if (gameinfo.wifiCnt > 0)
|
|
{
|
|
for (int i = 0; i <= gameinfo.wifiCnt; i++)
|
|
{
|
|
delete wifiTxt[i];
|
|
}
|
|
}
|
|
ResumeGui();
|
|
}
|
|
else
|
|
{
|
|
gameinfoWindow2.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 100);
|
|
while (gameinfoWindow2.GetEffect() > 0)
|
|
usleep(50);
|
|
HaltGui();
|
|
mainWindow->Remove(&gameinfoWindow2);
|
|
mainWindow->SetState(STATE_DEFAULT);
|
|
ResumeGui();
|
|
}
|
|
|
|
if (savedURL) return 3;
|
|
return choice;
|
|
|
|
/* File not found */
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
bool save_gamelist(int txt) // save gamelist
|
|
{
|
|
mainWindow->SetState(STATE_DISABLED);
|
|
char tmp[200];
|
|
sprintf(tmp, "%s", Settings.update_path);
|
|
struct stat st;
|
|
if (stat(tmp, &st) != 0)
|
|
{
|
|
mkdir(tmp, 0777);
|
|
}
|
|
FILE *f;
|
|
sprintf(tmp, "%sGameList.txt", Settings.update_path);
|
|
if (txt == 1) sprintf(tmp, "%sGameList.csv", Settings.update_path);
|
|
f = fopen(tmp, "w");
|
|
if (!f)
|
|
{
|
|
sleep(1);
|
|
mainWindow->SetState(STATE_DEFAULT);
|
|
return false;
|
|
}
|
|
//make sure that all games are added to the gamelist
|
|
gameList.LoadUnfiltered();
|
|
|
|
f32 size = 0.0;
|
|
f32 freespace, used;
|
|
int i;
|
|
|
|
WBFS_DiskSpace(&used, &freespace);
|
|
|
|
fprintf(f, "# USB Loader Has Saved this file\n");
|
|
fprintf(f, "# This file was created based on your list of games and language settings.\n");
|
|
fclose(f);
|
|
/* Closing and reopening because of a write issue we are having right now */
|
|
f = fopen(tmp, "w");
|
|
|
|
if (txt == 0)
|
|
{
|
|
fprintf(f, "# USB Loader Has Saved this file\n");
|
|
fprintf(f, "# This file was created based on your list of games and language settings.\n\n");
|
|
|
|
fprintf(f, "%.2fGB %s %.2fGB %s\n\n", freespace, tr( "of" ), (freespace + used), tr( "free" ));
|
|
fprintf(f, "ID Size(GB) Name\n");
|
|
|
|
for (i = 0; i < gameList.size(); i++)
|
|
{
|
|
struct discHdr* header = gameList[i];
|
|
WBFS_GameSize(header->id, &size);
|
|
if (i < 500)
|
|
{
|
|
fprintf(f, "%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2], header->id[3], header->id[4],
|
|
header->id[5]);
|
|
fprintf(f, " [%.2f] ", size);
|
|
fprintf(f, " %s", get_title(header));
|
|
}
|
|
fprintf(f, "\n");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
fprintf(f, "\"ID\",\"Size(GB)\",\"Name\"\n");
|
|
|
|
for (i = 0; i < gameList.size(); i++)
|
|
{
|
|
struct discHdr* header = gameList[i];
|
|
WBFS_GameSize(header->id, &size);
|
|
if (i < 500)
|
|
{
|
|
fprintf(f, "\"%c%c%c%c%c%c\",\"%.2f\",\"%s\"\n", header->id[0], header->id[1], header->id[2],
|
|
header->id[3], header->id[4], header->id[5], size, get_title(header));
|
|
//fprintf(f, "\"%.2f\",", size);
|
|
//fprintf(f, "\"%s\"",get_title(header));
|
|
}
|
|
//fprintf(f, "\n");
|
|
}
|
|
}
|
|
fclose(f);
|
|
|
|
gameList.FilterList();
|
|
mainWindow->SetState(STATE_DEFAULT);
|
|
return true;
|
|
}
|
|
|
|
bool save_XML_URL() // save xml url as as txt file for people without wifi
|
|
{
|
|
char tmp[200];
|
|
sprintf(tmp, "%s", Settings.update_path);
|
|
struct stat st;
|
|
if (stat(tmp, &st) != 0)
|
|
{
|
|
mkdir(tmp, 0777);
|
|
}
|
|
FILE *f;
|
|
sprintf(tmp, "%sWiiTDB_URL.txt", Settings.update_path);
|
|
f = fopen(tmp, "w");
|
|
if (!f)
|
|
{
|
|
sleep(1);
|
|
return false;
|
|
}
|
|
|
|
char XMLurl[3540];
|
|
build_XML_URL(XMLurl, sizeof(XMLurl));
|
|
|
|
fprintf(f, "# USB Loader Has Saved this file\n");
|
|
fprintf(f, "# This URL was created based on your list of games and language settings.\n");
|
|
fclose(f);
|
|
// Closing and reopening because of a write issue we are having right now
|
|
f = fopen(tmp, "w");
|
|
fprintf(f, "# USB Loader Has Saved this file\n");
|
|
fprintf(f, "# This URL was created based on your list of games and language settings.\n");
|
|
fprintf(f,
|
|
"# Copy and paste this URL into your web browser and you should get a zip file that will work for you.\n");
|
|
fprintf(f, "%s\n\n\n ", XMLurl);
|
|
|
|
fclose(f);
|
|
|
|
return true;
|
|
}
|
|
|
|
void MemInfoPrompt()
|
|
{
|
|
char meminfotxt[200];
|
|
strlcpy(meminfotxt, MemInfo(), sizeof(meminfotxt));
|
|
WindowPrompt(0, meminfotxt, tr( "OK" ));
|
|
}
|
|
|
|
void build_XML_URL(char *XMLurl, int XMLurlsize)
|
|
{
|
|
gameList.LoadUnfiltered();
|
|
// NET_BUFFER_SIZE in http.c needs to be set to size of XMLurl + headerformat
|
|
char url[3540];
|
|
char filename[10];
|
|
snprintf(url, sizeof(url), "http://wiitdb.com/wiitdb.zip?LANG=%s&ID=", Settings.db_language);
|
|
int i;
|
|
for (i = 0; i < gameList.size(); i++)
|
|
{
|
|
struct discHdr* header = gameList[i];
|
|
if (i < 500)
|
|
{
|
|
snprintf(filename, sizeof(filename), "%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],
|
|
header->id[3], header->id[4], header->id[5]);
|
|
strncat(url, filename, 6);
|
|
if ((i != gameList.size() - 1) && (i < 500)) strncat(url, ",", 1);
|
|
}
|
|
}
|
|
strlcpy(XMLurl, url, XMLurlsize);
|
|
gameList.FilterList();
|
|
}
|