usbloadergx/source/prompts/gameinfo.cpp
2009-10-19 20:34:54 +00:00

1132 lines
45 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 "../xml/xml.h"
#include "menu.h"
#include "filelist.h"
#include "sys.h"
#include "wpad.h"
#include "fatmounter.h"
#include "listfiles.h"
#include "prompts/PromptWindows.h"
#include "gameinfo.h"
#include "usbloader/getentries.h"
/*** Extern variables ***/
extern GuiWindow * mainWindow;
extern GuiSound * bgMusic;
extern u8 shutdown;
extern u8 reset;
extern struct gameXMLinfo gameinfo;
extern struct gameXMLinfo gameinfo_reset;
extern u32 gameCnt;
extern struct discHdr * gameList;
/*** 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();
//load the xml shit
bool databaseopened = true;
//OpenXMLDatabase(Settings.titlestxt_path, Settings.db_language, Settings.db_JPtoEN, true, false, true); // open file, do not load titles, keep in memory
if (databaseopened) {
LoadGameInfoFromXML(ID, Settings.db_language);
//CloseXMLDatabase();
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;
GuiText * 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, SOUND_PCM, Settings.sfxvolume);
GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, Settings.sfxvolume);
char imgPath[100];
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path);
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
snprintf(imgPath, sizeof(imgPath), "%sgameinfo1_png.png", CFG.theme_path);
GuiImageData dialogBox1(imgPath, gameinfo1_png);
snprintf(imgPath, sizeof(imgPath), "%sgameinfo1a_png.png", CFG.theme_path);
GuiImageData dialogBox2(imgPath, gameinfo1a_png);
snprintf(imgPath, sizeof(imgPath), "%sgameinfo2_png.png", CFG.theme_path);
GuiImageData dialogBox3(imgPath, gameinfo2_png);
snprintf(imgPath, sizeof(imgPath), "%sgameinfo2a_png.png", CFG.theme_path);
GuiImageData dialogBox4(imgPath, 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 = new GuiImageData(nunchukR_png);
else nunchukImgData = new GuiImageData(nunchuk_png);
if (classiccontroller) classiccontrollerImgData = new GuiImageData(classiccontrollerR_png);
else classiccontrollerImgData = new GuiImageData(classiccontroller_png);
if (guitar) guitarImgData = new GuiImageData(guitarR_png);
else guitarImgData = new GuiImageData(guitar_png);
if (gamecube) gamecubeImgData = new GuiImageData(gcncontrollerR_png);
else gamecubeImgData = new GuiImageData(gcncontroller_png);
if (wheel) wheelImgData = new GuiImageData(wheelR_png);
else wheelImgData = new GuiImageData(wheel_png);
if (motionplus) motionplusImgData = new GuiImageData(motionplusR_png);
else motionplusImgData = new GuiImageData(motionplus_png);
if (drums) drumsImgData = new GuiImageData(drumsR_png);
else drumsImgData = new GuiImageData(drums_png);
if (microphone) microphoneImgData = new GuiImageData(microphoneR_png);
else microphoneImgData = new GuiImageData(microphone_png);
if (zapper) zapperImgData = new GuiImageData(zapperR_png);
else zapperImgData = new GuiImageData(zapper_png);
if (wiispeak) wiispeakImgData = new GuiImageData(wiispeakR_png);
else wiispeakImgData = new GuiImageData(wiispeak_png);
if (nintendods) nintendodsImgData = new GuiImageData(nintendodsR_png);
else nintendodsImgData = new GuiImageData(nintendods_png);
//if (vitalitysensor) vitalitysensorImgData = new GuiImageData(vitalitysensorR_png);
//else vitalitysensorImgData = new GuiImageData(vitalitysensor_png);
if (balanceboard) balanceboardImgData = new GuiImageData(balanceboardR_png);
else balanceboardImgData = new GuiImageData(balanceboard_png);
if (dancepad) dancepadImgData = new GuiImageData(dancepadR_png);
else dancepadImgData = new GuiImageData(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);
snprintf(imgPath, sizeof(imgPath), "%s%s.png", Settings.covers_path, ID);
cover = new GuiImageData(imgPath, 0); //load full id image
if (!cover->GetImage()) {
delete cover;
snprintf(imgPath, sizeof(imgPath), "%snoimage.png", Settings.covers_path);
cover = new GuiImageData(imgPath, nocover_png); //load no image
}
delete coverImg;
coverImg = NULL;
coverImg = new GuiImage(cover);
coverImg->SetWidescreen(CFG.widescreen);
coverImg->SetPosition(15,30);
gameinfoWindow.Append(coverImg);
// # of players
if (strcmp(gameinfo.players,"") != 0) {
playersImgData = new GuiImageData(Wiimote1_png);
if (atoi(gameinfo.players)>1) {
playersImgData= new GuiImageData(Wiimote2_png);
}
if (atoi(gameinfo.players)>2) {
playersImgData= new GuiImageData(Wiimote4_png);
}
playersImg = new GuiImage(playersImgData);
playersImg->SetWidescreen(CFG.widescreen);
playersImg->SetPosition(intputX , inputY);
playersImg->SetAlignment(0,4);
gameinfoWindow.Append(playersImg);
intputX += (CFG.widescreen ? playersImg->GetWidth() * .8 : playersImg->GetWidth())+5;
}
//draw the input types for this game
if (motionplus==1) {
motionplusImg = new GuiImage(motionplusImgData);
motionplusImg->SetWidescreen(CFG.widescreen);
motionplusImg->SetPosition(intputX , inputY);
motionplusImg->SetAlignment(0,4);
gameinfoWindow.Append(motionplusImg);
intputX += (CFG.widescreen ? motionplusImg->GetWidth() * .8 : motionplusImg->GetWidth())+5;
}
if (nunchuk==1) {
nunchukImg = new GuiImage(nunchukImgData);
nunchukImg->SetWidescreen(CFG.widescreen);
nunchukImg->SetPosition(intputX , inputY);
nunchukImg->SetAlignment(0,4);
gameinfoWindow.Append(nunchukImg);
intputX += (CFG.widescreen ? nunchukImg->GetWidth() * .8 : nunchukImg->GetWidth())+5;
}
if (classiccontroller==1) {
classiccontrollerImg = new GuiImage(classiccontrollerImgData);
classiccontrollerImg->SetWidescreen(CFG.widescreen);
classiccontrollerImg->SetPosition(intputX , inputY);
classiccontrollerImg->SetAlignment(0,4);
gameinfoWindow.Append(classiccontrollerImg);
intputX += (CFG.widescreen ? classiccontrollerImg->GetWidth() * .8 : classiccontrollerImg->GetWidth())+5;
}
if (gamecube==1) {
gcImg = new GuiImage(gamecubeImgData);
gcImg->SetWidescreen(CFG.widescreen);
gcImg->SetPosition(intputX , inputY);
gcImg->SetAlignment(0,4);
gameinfoWindow.Append(gcImg);
intputX += (CFG.widescreen ? gcImg->GetWidth() * .8 : gcImg->GetWidth())+5;
}
if (wheel==1) {
wheelImg = new GuiImage(wheelImgData);
wheelImg->SetWidescreen(CFG.widescreen);
wheelImg->SetPosition(intputX , inputY);
wheelImg->SetAlignment(0,4);
gameinfoWindow.Append(wheelImg);
intputX += (CFG.widescreen ? wheelImg->GetWidth() * .8 : wheelImg->GetWidth())+5;
}
if (guitar==1) {
guitarImg = new GuiImage(guitarImgData);
guitarImg->SetWidescreen(CFG.widescreen);
guitarImg->SetPosition(intputX , inputY);
guitarImg->SetAlignment(0,4);
gameinfoWindow.Append(guitarImg);
intputX += (CFG.widescreen ? guitarImg->GetWidth() * .8 : guitarImg->GetWidth())+5;
}
if (drums==1) {
drumsImg = new GuiImage(drumsImgData);
drumsImg->SetWidescreen(CFG.widescreen);
drumsImg->SetPosition(intputX , inputY);
drumsImg->SetAlignment(0,4);
gameinfoWindow.Append(drumsImg);
intputX += (CFG.widescreen ? drumsImg->GetWidth() * .8 : drumsImg->GetWidth())+5;
}
if (microphone==1) {
microphoneImg = new GuiImage(microphoneImgData);
microphoneImg->SetWidescreen(CFG.widescreen);
microphoneImg->SetPosition(intputX , inputY);
microphoneImg->SetAlignment(0,4);
gameinfoWindow.Append(microphoneImg);
intputX += (CFG.widescreen ? microphoneImg->GetWidth() * .8 : microphoneImg->GetWidth())+5;
}
if (zapper==1) {
zapperImg = new GuiImage( zapperImgData);
zapperImg->SetWidescreen(CFG.widescreen);
zapperImg->SetPosition(intputX , inputY);
zapperImg->SetAlignment(0,4);
gameinfoWindow.Append(zapperImg);
intputX += (CFG.widescreen ? zapperImg->GetWidth() * .8 : zapperImg->GetWidth())+5;
}
if (wiispeak==1) {
wiispeakImg = new GuiImage(wiispeakImgData);
wiispeakImg->SetWidescreen(CFG.widescreen);
wiispeakImg->SetPosition(intputX , inputY);
wiispeakImg->SetAlignment(0,4);
gameinfoWindow.Append(wiispeakImg);
intputX += (CFG.widescreen ? wiispeakImg->GetWidth() * .8 : wiispeakImg->GetWidth())+5;
}
if (nintendods==1) {
nintendodsImg = new GuiImage(nintendodsImgData);
nintendodsImg->SetWidescreen(CFG.widescreen);
nintendodsImg->SetPosition(intputX , inputY);
nintendodsImg->SetAlignment(0,4);
gameinfoWindow.Append(nintendodsImg);
intputX += (CFG.widescreen ? nintendodsImg->GetWidth() * .8 : nintendodsImg->GetWidth())+5;
}
/*
if (vitalitysensor==1) {
vitalitysensorImg = new GuiImage(vitalitysensorImgData);
vitalitysensorImg->SetWidescreen(CFG.widescreen);
vitalitysensorImg->SetPosition(intputX , inputY);
vitalitysensorImg->SetAlignment(0,4);
gameinfoWindow.Append(vitalitysensorImg);
intputX += (CFG.widescreen ? vitalitysensorImg->GetWidth() * .8 : vitalitysensorImg->GetWidth())+5;
}
*/
if (dancepad==1) {
dancepadImg = new GuiImage(dancepadImgData);
dancepadImg->SetWidescreen(CFG.widescreen);
dancepadImg->SetPosition(intputX , inputY);
dancepadImg->SetAlignment(0,4);
gameinfoWindow.Append(dancepadImg);
intputX += (CFG.widescreen ? dancepadImg->GetWidth() * .8 : dancepadImg->GetWidth())+5;
}
if (balanceboard==1) {
balanceboardImg = new GuiImage(balanceboardImgData);
balanceboardImg->SetWidescreen(CFG.widescreen);
balanceboardImg->SetPosition(intputX , inputY);
balanceboardImg->SetAlignment(0,4);
gameinfoWindow.Append(balanceboardImg);
intputX += (CFG.widescreen ? balanceboardImg->GetWidth() * .8 : balanceboardImg->GetWidth())+5;
}
// # online players
if ((strcmp(gameinfo.wifiplayers,"") != 0) && (strcmp(gameinfo.wifiplayers,"0") != 0)) {
wifiplayersImgData = new GuiImageData(wifi1_png);
if (atoi(gameinfo.wifiplayers)>1) {
wifiplayersImgData= new GuiImageData(wifi2_png);
}
if (atoi(gameinfo.wifiplayers)>2) {
wifiplayersImgData= new GuiImageData(wifi4_png);
}
if (atoi(gameinfo.wifiplayers)>4) {
//wifiplayersImgData= new GuiImageData(wifi6_png);
wifiplayersImgData= new GuiImageData(wifi8_png);
}
/*
if (atoi(gameinfo.wifiplayers)>6) {
wifiplayersImgData= new GuiImageData(wifi8_png);
}
*/
if (atoi(gameinfo.wifiplayers)>8) {
wifiplayersImgData= new GuiImageData(wifi12_png);
}
if (atoi(gameinfo.wifiplayers)>12) {
wifiplayersImgData= new GuiImageData(wifi16_png);
}
if (atoi(gameinfo.wifiplayers)>16) {
wifiplayersImgData= new GuiImageData(wifi32_png);
}
wifiplayersImg = new GuiImage(wifiplayersImgData);
wifiplayersImg->SetWidescreen(CFG.widescreen);
wifiplayersImg->SetPosition(intputX , inputY);
wifiplayersImg->SetAlignment(0,4);
gameinfoWindow.Append(wifiplayersImg);
intputX += (CFG.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 = new GuiImageData(esrb_ec_png);
else if (strcmp(gameinfo.ratingvalueESRB,"E")==0)
ratingImgData = new GuiImageData(esrb_e_png);
else if (strcmp(gameinfo.ratingvalueESRB,"E10+")==0)
ratingImgData = new GuiImageData(esrb_eten_png);
else if (strcmp(gameinfo.ratingvalueESRB,"T")==0)
ratingImgData = new GuiImageData(esrb_t_png);
else if (strcmp(gameinfo.ratingvalueESRB,"M")==0)
ratingImgData = new GuiImageData(esrb_m_png);
else if (strcmp(gameinfo.ratingvalueESRB,"AO")==0)
ratingImgData = new GuiImageData(esrb_ao_png);
else {
ratingImgData = new GuiImageData(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 = new GuiImageData(pegi_3_png);
else if ((strcmp(gameinfo.ratingvaluePEGI,"7")==0)||(strcmp(gameinfo.ratingvaluePEGI,"7")==0))
ratingImgData = new GuiImageData(pegi_7_png);
else if (strcmp(gameinfo.ratingvaluePEGI,"12")==0)
ratingImgData = new GuiImageData(pegi_12_png);
else if ((strcmp(gameinfo.ratingvaluePEGI,"16")==0)||(strcmp(gameinfo.ratingvaluePEGI,"15")==0))
ratingImgData = new GuiImageData(pegi_16_png);
else if (strcmp(gameinfo.ratingvaluePEGI,"18")==0)
ratingImgData = new GuiImageData(pegi_18_png);
else {
ratingImgData = new GuiImageData(norating_png);
}
} else if (strcmp(gameinfo.ratingtype,"CERO")==0) {
if (strcmp(gameinfo.ratingvalueCERO,"A")==0)
ratingImgData = new GuiImageData(cero_a_png);
else if (strcmp(gameinfo.ratingvalueCERO,"B")==0)
ratingImgData = new GuiImageData(cero_b_png);
else if (strcmp(gameinfo.ratingvalueCERO,"C")==0)
ratingImgData = new GuiImageData(cero_c_png);
else if (strcmp(gameinfo.ratingvalueCERO,"D")==0)
ratingImgData = new GuiImageData(cero_d_png);
else if (strcmp(gameinfo.ratingvalueCERO,"Z")==0)
ratingImgData = new GuiImageData(cero_z_png);
else {
ratingImgData = new GuiImageData(norating_png);
}
}
else {
ratingImgData = new GuiImageData(norating_png);
}
ratingImg = new GuiImage(ratingImgData);
ratingImg->SetWidescreen(CFG.widescreen);
ratingImg->SetPosition(-25 , inputY);
ratingImg->SetAlignment(1,4);
gameinfoWindow.Append(ratingImg);
intputX += (CFG.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, GuiText::SCROLL);
//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,GuiText::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,GuiText::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"));
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 GuiText(linebuf, 16, (GXColor) {0,0,0, 255});
synopsisTxt->SetMaxWidth(350,GuiText::WRAP);
synopsisTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
synopsisTxt->SetPosition(0,0);
synopsisTxt->SetNumLines(pagesize);
//synopsisTxt->SetFirstLine(12);
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(CFG.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);
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;
synopsisTxt = NULL;
break;
} else if (page==2) {
HaltGui();
gameinfoWindow2.Remove(&nextBtn);
gameinfoWindow2.Remove(&backBtn);
gameinfoWindow2.Remove(&homeBtn);
gameinfoWindow2.SetVisible(false);
gameinfoWindow.SetVisible(true);
gameinfoWindow.Append(&backBtn);
gameinfoWindow.Append(&nextBtn);
gameinfoWindow.Append(&homeBtn);
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.SetVisible(false);
gameinfoWindow2.SetVisible(true);
coverImg->SetPosition(15,30);
gameinfoWindow2.Append(&nextBtn);
gameinfoWindow2.Append(&backBtn);
gameinfoWindow2.Append(&homeBtn);
mainWindow->Append(&gameinfoWindow2);
ResumeGui();
page=2;
} else {
HaltGui();
gameinfoWindow2.Remove(&nextBtn);
gameinfoWindow2.Remove(&backBtn);
gameinfoWindow2.Remove(&homeBtn);
gameinfoWindow2.SetVisible(false);
gameinfoWindow.SetVisible(true);
gameinfoWindow.Append(&backBtn);
gameinfoWindow.Append(&nextBtn);
gameinfoWindow.Append(&homeBtn);
mainWindow->Remove(&gameinfoWindow2);
ResumeGui();
page=1;
}
} else if ((upBtn.GetState()==STATE_CLICKED||upBtn.GetState()==STATE_HELD) && page==2) {
//int l=synopsisTxt->GetFirstLine()-1;
if (synopsisTxt->GetFirstLine()>1)
synopsisTxt->SetFirstLine(synopsisTxt->GetFirstLine()-1);
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->GetTotalLines()>pagesize
&&synopsisTxt->GetFirstLine()-1<synopsisTxt->GetTotalLines()-pagesize) {
int l=0;
//if(synopsisTxt->GetTotalLines()>pagesize)
l=synopsisTxt->GetFirstLine()+1;
//if (l>(synopsisTxt->GetTotalLines()+1)-pagesize)
//l=(synopsisTxt->GetTotalLines()+1)-pagesize;
synopsisTxt->SetFirstLine(l);
usleep(60000);
if (!((ButtonsHold() & WPAD_BUTTON_DOWN)||(ButtonsHold() & PAD_BUTTON_DOWN)))
dnBtn.ResetState();
} else if (homeBtn.GetState()==STATE_CLICKED) {
if (page==1) {
choice=2;
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();
}
}
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
__Menu_GetEntries(1);
f32 size = 0.0;
f32 freespace, used;
unsigned 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 < gameCnt ; 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 < gameCnt ; 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);
__Menu_GetEntries();
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) {
__Menu_GetEntries(1);
// NET_BUFFER_SIZE in http.c needs to be set to size of XMLurl + 40
char url[3540];
char filename[10];
snprintf(url,sizeof(url),"http://wiitdb.com/wiitdb.zip?LANG=%s&ID=", Settings.db_language);
unsigned int i;
for (i = 0; i < gameCnt ; 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!=gameCnt-1)&&(i<500))
strncat(url, ",",1);
}
}
strlcpy(XMLurl,url,XMLurlsize);
__Menu_GetEntries();
}