usbloadergx/source/prompts/gameinfo.cpp

1254 lines
51 KiB
C++
Raw Normal View History

#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 "listfiles.h"
#include "prompts/PromptWindows.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 );
char imgPath[100];
snprintf( imgPath, sizeof( imgPath ), "%sbutton_dialogue_box.png", Settings.theme_path );
GuiImageData btnOutline( imgPath, button_dialogue_box_png );
snprintf( imgPath, sizeof( imgPath ), "%sgameinfo1_png.png", Settings.theme_path );
GuiImageData dialogBox1( imgPath, gameinfo1_png );
snprintf( imgPath, sizeof( imgPath ), "%sgameinfo1a_png.png", Settings.theme_path );
GuiImageData dialogBox2( imgPath, gameinfo1a_png );
snprintf( imgPath, sizeof( imgPath ), "%sgameinfo2_png.png", Settings.theme_path );
GuiImageData dialogBox3( imgPath, gameinfo2_png );
snprintf( imgPath, sizeof( imgPath ), "%sgameinfo2a_png.png", Settings.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( Settings.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( 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 (vitalitysensor==1) {
vitalitysensorImg = new GuiImage(vitalitysensorImgData);
vitalitysensorImg->SetWidescreen(Settings.widescreen);
vitalitysensorImg->SetPosition(intputX , inputY);
vitalitysensorImg->SetAlignment(0,4);
gameinfoWindow.Append(vitalitysensorImg);
intputX += (Settings.widescreen ? vitalitysensorImg->GetWidth() * .8 : vitalitysensorImg->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 = 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( 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 = 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( 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();
}