2009-06-24 09:33:31 +02:00
|
|
|
#include <string.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
|
2009-11-15 22:30:44 +01:00
|
|
|
#include "libfat/fat.h"
|
2009-06-24 09:33:31 +02:00
|
|
|
#include "libwiigui/gui.h"
|
|
|
|
#include "libwiigui/gui_customoptionbrowser.h"
|
|
|
|
#include "prompts/PromptWindows.h"
|
|
|
|
#include "language/gettext.h"
|
2009-11-15 22:30:44 +01:00
|
|
|
#include "fatmounter.h"
|
2009-08-02 00:40:01 +02:00
|
|
|
#include "listfiles.h"
|
2009-06-24 09:33:31 +02:00
|
|
|
#include "menu.h"
|
|
|
|
#include "filelist.h"
|
|
|
|
#include "sys.h"
|
|
|
|
#include "gct.h"
|
2010-01-19 11:48:50 +01:00
|
|
|
|
|
|
|
/*** Extern functions ***/
|
|
|
|
extern void ResumeGui();
|
|
|
|
extern void HaltGui();
|
|
|
|
|
2009-06-24 09:33:31 +02:00
|
|
|
/*** Extern variables ***/
|
|
|
|
extern GuiWindow * mainWindow;
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
* CheatMenu
|
|
|
|
***************************************************************************/
|
2010-09-19 01:16:05 +02:00
|
|
|
int CheatMenu( const char * gameID )
|
|
|
|
{
|
|
|
|
int choice = 0;
|
|
|
|
bool exit = false;
|
|
|
|
int ret = 1;
|
|
|
|
|
|
|
|
// because destroy GuiSound must wait while sound playing is finished, we use a global sound
|
|
|
|
if ( !btnClick2 ) btnClick2 = new GuiSound( button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume );
|
|
|
|
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
|
|
|
|
|
|
|
char imgPath[100];
|
2010-09-19 22:25:12 +02:00
|
|
|
snprintf( imgPath, sizeof( imgPath ), "%sbutton_dialogue_box.png", Settings.theme_path );
|
2010-09-19 01:16:05 +02:00
|
|
|
GuiImageData btnOutline( imgPath, button_dialogue_box_png );
|
2010-09-19 22:25:12 +02:00
|
|
|
snprintf( imgPath, sizeof( imgPath ), "%ssettings_background.png", Settings.theme_path );
|
2010-09-19 01:16:05 +02:00
|
|
|
GuiImageData settingsbg( imgPath, settings_background_png );
|
|
|
|
GuiImage settingsbackground( &settingsbg );
|
|
|
|
|
|
|
|
GuiTrigger trigA;
|
|
|
|
trigA.SetSimpleTrigger( -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 );
|
|
|
|
|
|
|
|
GuiText backBtnTxt( tr( "Back" ) , 22, THEME.prompttext );
|
|
|
|
backBtnTxt.SetMaxWidth( btnOutline.GetWidth() - 30 );
|
|
|
|
GuiImage backBtnImg( &btnOutline );
|
|
|
|
GuiButton backBtn( &backBtnImg, &backBtnImg, 2, 3, -140, 400, &trigA, NULL, btnClick2, 1 );
|
|
|
|
backBtn.SetLabel( &backBtnTxt );
|
|
|
|
backBtn.SetTrigger( &trigB );
|
|
|
|
|
|
|
|
GuiText createBtnTxt( tr( "Create" ) , 22, THEME.prompttext );
|
|
|
|
createBtnTxt.SetMaxWidth( btnOutline.GetWidth() - 30 );
|
|
|
|
GuiImage createBtnImg( &btnOutline );
|
|
|
|
GuiButton createBtn( &createBtnImg, &createBtnImg, 2, 3, 160, 400, &trigA, NULL, btnClick2, 1 );
|
|
|
|
createBtn.SetLabel( &createBtnTxt );
|
|
|
|
|
|
|
|
char txtfilename[55];
|
|
|
|
snprintf( txtfilename, sizeof( txtfilename ), "%s%s.txt", Settings.TxtCheatcodespath, gameID );
|
|
|
|
|
|
|
|
GCTCheats c;
|
|
|
|
int check = c.openTxtfile( txtfilename );
|
|
|
|
|
|
|
|
int download = 0;
|
|
|
|
|
|
|
|
switch ( check )
|
|
|
|
{
|
|
|
|
case -1:
|
|
|
|
WindowPrompt( tr( "Error" ), tr( "Cheatfile is blank" ), tr( "OK" ) );
|
|
|
|
break;
|
|
|
|
case 0:
|
|
|
|
download = WindowPrompt( tr( "Error" ), tr( "No Cheatfile found" ), tr( "Download Now" ), tr( "Cancel" ) );
|
|
|
|
if ( download == 1 )
|
|
|
|
{
|
|
|
|
download = CodeDownload( gameID );
|
|
|
|
if ( download < 0 || c.openTxtfile( txtfilename ) != 1 )
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
int cntcheats = c.getCnt();
|
|
|
|
customOptionList cheatslst( cntcheats );
|
2010-09-19 22:25:12 +02:00
|
|
|
GuiCustomOptionBrowser chtBrowser( 400, 280, &cheatslst, Settings.theme_path, "bg_options_settings.png", bg_options_settings_png, 1, 90 );
|
2010-09-19 01:16:05 +02:00
|
|
|
chtBrowser.SetPosition( 0, 90 );
|
|
|
|
chtBrowser.SetAlignment( ALIGN_CENTRE, ALIGN_TOP );
|
|
|
|
chtBrowser.SetClickable( true );
|
|
|
|
|
|
|
|
GuiText titleTxt( c.getGameName().c_str(), 28, ( GXColor ) {0, 0, 0, 255} );
|
|
|
|
titleTxt.SetAlignment( ALIGN_CENTRE, ALIGN_TOP );
|
|
|
|
titleTxt.SetMaxWidth( 350, SCROLL_HORIZONTAL );
|
|
|
|
titleTxt.SetPosition( 12, 40 );
|
|
|
|
|
|
|
|
for ( int i = 0; i <= cntcheats; i++ )
|
|
|
|
{
|
|
|
|
cheatslst.SetValue( i, "%s", c.getCheatName( i ).c_str() );
|
|
|
|
cheatslst.SetName( i, "OFF" );
|
|
|
|
}
|
|
|
|
|
|
|
|
HaltGui();
|
|
|
|
GuiWindow w( screenwidth, screenheight );
|
|
|
|
w.Append( &settingsbackground );
|
|
|
|
w.Append( &titleTxt );
|
|
|
|
w.Append( &backBtn );
|
|
|
|
w.Append( &createBtn );
|
|
|
|
w.Append( &chtBrowser );
|
|
|
|
mainWindow->SetState( STATE_DISABLED );
|
|
|
|
mainWindow->ChangeFocus( &w );
|
|
|
|
mainWindow->Append( &w );
|
|
|
|
ResumeGui();
|
|
|
|
|
|
|
|
while ( !exit )
|
|
|
|
{
|
|
|
|
VIDEO_WaitVSync ();
|
|
|
|
|
|
|
|
ret = chtBrowser.GetClickedOption();
|
|
|
|
if ( ret != -1 )
|
|
|
|
{
|
|
|
|
const char *strCheck = cheatslst.GetName( ret );
|
|
|
|
if ( strncmp( strCheck, "ON", 2 ) == 0 )
|
|
|
|
{
|
|
|
|
cheatslst.SetName( ret, "%s", "OFF" );
|
|
|
|
}
|
|
|
|
else if ( strncmp( strCheck, "OFF", 3 ) == 0 )
|
|
|
|
{
|
|
|
|
cheatslst.SetName( ret, "%s", "ON" );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( createBtn.GetState() == STATE_CLICKED )
|
|
|
|
{
|
|
|
|
createBtn.ResetState();
|
|
|
|
if ( cntcheats > 0 )
|
|
|
|
{
|
|
|
|
int selectednrs[30];
|
|
|
|
int x = 0;
|
|
|
|
for ( int i = 0; i <= cntcheats; i++ )
|
|
|
|
{
|
|
|
|
const char *strCheck = cheatslst.GetName( i );
|
|
|
|
if ( strncmp( strCheck, "ON", 2 ) == 0 )
|
|
|
|
{
|
|
|
|
selectednrs[x] = i;
|
|
|
|
x++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ( x == 0 )
|
|
|
|
{
|
|
|
|
WindowPrompt( tr( "Error" ), tr( "No cheats were selected" ), tr( "OK" ) );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
subfoldercreate( Settings.Cheatcodespath );
|
|
|
|
string chtpath = Settings.Cheatcodespath;
|
|
|
|
string gctfname = chtpath + c.getGameID() + ".gct";
|
|
|
|
c.createGCT( selectednrs, x, gctfname.c_str() );
|
|
|
|
WindowPrompt( tr( "GCT File created" ), NULL, tr( "OK" ) );
|
|
|
|
exit = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else WindowPrompt( tr( "Error" ), tr( "Could not create GCT file" ), tr( "OK" ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( backBtn.GetState() == STATE_CLICKED )
|
|
|
|
{
|
|
|
|
backBtn.ResetState();
|
|
|
|
exit = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
HaltGui();
|
|
|
|
mainWindow->SetState( STATE_DEFAULT );
|
|
|
|
mainWindow->Remove( &w );
|
|
|
|
ResumeGui();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return choice;
|
2009-06-24 09:33:31 +02:00
|
|
|
}
|