add DI_Close, don't wait for net init before entering game, add filename text scrolling, improved efficiency on text wrapping, add reset button for mappings, change video callbacks to avoid over-reading pads

This commit is contained in:
dborth 2009-06-27 20:06:26 +00:00
parent c3440eb8b2
commit 3e76213c96
22 changed files with 397 additions and 193 deletions

View File

@ -31,6 +31,8 @@ With it you can play GBA/Game Boy Color/Game Boy games on your Wii/GameCube.
[2.0.4] [2.0.4]
* Increase file browser listing to 10 entries, decrease font size * Increase file browser listing to 10 entries, decrease font size
* Added text scrolling on file browser
* Added reset button for controller mappings
* Settings are now loaded from USB when loading the app from USB on HBC * Settings are now loaded from USB when loading the app from USB on HBC
* Fixed menu crashes caused by ogg player bugs * Fixed menu crashes caused by ogg player bugs
* Fixed memory card saving verification bug * Fixed memory card saving verification bug

View File

@ -680,6 +680,7 @@ void FreeTypeGX::copyTextureToFramebuffer(GXTexObj *texObj, f32 texWidth, f32 te
GX_Color4u8(color.r, color.g, color.b, color.a); GX_Color4u8(color.r, color.g, color.b, color.a);
GX_TexCoord2f32(0.0f, 1.0f); GX_TexCoord2f32(0.0f, 1.0f);
GX_End(); GX_End();
GX_DrawDone();
this->setDefaultMode(); this->setDefaultMode();
} }
@ -713,6 +714,7 @@ void FreeTypeGX::copyFeatureToFramebuffer(f32 featureWidth, f32 featureHeight, i
GX_Position2s16(screenX, featureHeight + screenY); GX_Position2s16(screenX, featureHeight + screenY);
GX_Color4u8(color.r, color.g, color.b, color.a); GX_Color4u8(color.r, color.g, color.b, color.a);
GX_End(); GX_End();
GX_DrawDone();
this->setDefaultMode(); this->setDefaultMode();
} }

View File

@ -16,9 +16,7 @@
#include <malloc.h> #include <malloc.h>
#ifdef HW_RVL #ifdef HW_RVL
extern "C" {
#include <di/di.h> #include <di/di.h>
}
#endif #endif
#include "vba.h" #include "vba.h"
@ -364,7 +362,6 @@ static int
getentry (int entrycount, unsigned char dvdbuffer[]) getentry (int entrycount, unsigned char dvdbuffer[])
{ {
char fname[512]; /* Huge, but experience has determined this */ char fname[512]; /* Huge, but experience has determined this */
char tmpname[512];
char *ptr; char *ptr;
char *filename; char *filename;
char *filenamelength; char *filenamelength;
@ -466,8 +463,7 @@ getentry (int entrycount, unsigned char dvdbuffer[])
} }
else else
{ {
StripExt(tmpname, fname); // hide file extension StripExt(browserList[entrycount].displayname, browserList[entrycount].filename); // hide file extension
strncpy (browserList[entrycount].displayname, tmpname, MAXDISPLAY);
} }
memcpy (&offset32, &dvdbuffer[diroffset + EXTENT], 4); memcpy (&offset32, &dvdbuffer[diroffset + EXTENT], 4);

View File

@ -352,7 +352,7 @@ void StripExt(char* returnstring, char * inputstring)
{ {
char* loc_dot; char* loc_dot;
strncpy (returnstring, inputstring, 255); strncpy (returnstring, inputstring, MAXJOLIET);
if(inputstring == NULL || strlen(inputstring) < 4) if(inputstring == NULL || strlen(inputstring) < 4)
return; return;

View File

@ -15,7 +15,6 @@
#include <gccore.h> #include <gccore.h>
#define MAXJOLIET 255 #define MAXJOLIET 255
#define MAXDISPLAY 37
typedef struct typedef struct
{ {
@ -32,7 +31,7 @@ typedef struct
time_t mtime; // file modified time time_t mtime; // file modified time
char isdir; // 0 - file, 1 - directory char isdir; // 0 - file, 1 - directory
char filename[MAXJOLIET + 1]; // full filename char filename[MAXJOLIET + 1]; // full filename
char displayname[MAXDISPLAY + 1]; // name for browser display char displayname[MAXJOLIET + 1]; // name for browser display
} BROWSERENTRY; } BROWSERENTRY;
extern BROWSERINFO browser; extern BROWSERINFO browser;

View File

@ -89,6 +89,12 @@ extern const u32 button_png_size;
extern const u8 button_over_png[]; extern const u8 button_over_png[];
extern const u32 button_over_png_size; extern const u32 button_over_png_size;
extern const u8 button_short_png[];
extern const u32 button_short_png_size;
extern const u8 button_short_over_png[];
extern const u32 button_short_over_png_size;
extern const u8 button_small_png[]; extern const u8 button_small_png[];
extern const u32 button_small_png_size; extern const u32 button_small_png_size;

View File

@ -75,6 +75,11 @@ HaltDeviceThread()
{ {
deviceHalt = true; deviceHalt = true;
#ifdef HW_RVL
if(inNetworkInit) // don't wait for network to initialize
return;
#endif
// wait for thread to finish // wait for thread to finish
while(!LWP_ThreadIsSuspended(devicethread)) while(!LWP_ThreadIsSuspended(devicethread))
usleep(100); usleep(100);
@ -120,8 +125,8 @@ devicecallback (void *arg)
} }
} }
InitializeNetwork(SILENT);
UpdateCheck(); UpdateCheck();
InitializeNetwork(SILENT);
#else #else
if(isMounted[METHOD_SD_SLOTA]) if(isMounted[METHOD_SD_SLOTA])
{ {
@ -318,7 +323,6 @@ ParseDirectory(int method)
DIR_ITER *dir = NULL; DIR_ITER *dir = NULL;
char fulldir[MAXPATHLEN]; char fulldir[MAXPATHLEN];
char filename[MAXPATHLEN]; char filename[MAXPATHLEN];
char tmpname[MAXPATHLEN];
struct stat filestat; struct stat filestat;
char msg[128]; char msg[128];
int retry = 1; int retry = 1;
@ -390,8 +394,7 @@ ParseDirectory(int method)
} }
else else
{ {
ShortenFilename(tmpname, filename); // hide file extension StripExt(browserList[entryNum].displayname, browserList[entryNum].filename); // hide file extension
strncpy(browserList[entryNum].displayname, tmpname, MAXDISPLAY); // crop name for display
} }
browserList[entryNum].length = filestat.st_size; browserList[entryNum].length = filestat.st_size;

View File

@ -3,7 +3,7 @@
* *
* Tantric September 2008 * Tantric September 2008
* *
* unzip.cpp * gcunzip.cpp
* *
* File unzip routines * File unzip routines
***************************************************************************/ ***************************************************************************/
@ -482,11 +482,9 @@ int SzParse(char * filepath, int method)
} }
memset(&(browserList[SzJ]), 0, sizeof(BROWSERENTRY)); // clear the new entry memset(&(browserList[SzJ]), 0, sizeof(BROWSERENTRY)); // clear the new entry
// parse information about this file to the dvd file list structure // parse information about this file to the file list structure
strncpy(browserList[SzJ].filename, SzF->Name, MAXJOLIET); // copy joliet name (useless...) strncpy(browserList[SzJ].filename, SzF->Name, MAXJOLIET);
char tmpname[MAXJOLIET+1] = ""; StripExt(browserList[SzJ].displayname, browserList[SzJ].filename);
ShortenFilename(tmpname, browserList[SzJ].filename);
strncpy(browserList[SzJ].displayname, tmpname, MAXDISPLAY); // crop name for display
browserList[SzJ].length = SzF->Size; // filesize browserList[SzJ].length = SzF->Size; // filesize
browserList[SzJ].offset = SzI; // the extraction function identifies the file with this number browserList[SzJ].offset = SzI; // the extraction function identifies the file with this number
browserList[SzJ].isdir = 0; // only files will be displayed (-> no flags) browserList[SzJ].isdir = 0; // only files will be displayed (-> no flags)

View File

@ -102,6 +102,12 @@ enum
TRIGGER_BUTTON_ONLY_IN_FOCUS TRIGGER_BUTTON_ONLY_IN_FOCUS
}; };
enum
{
SCROLL_NONE,
SCROLL_HORIZONTAL
};
typedef struct _paddata { typedef struct _paddata {
u16 btns_d; u16 btns_d;
u16 btns_u; u16 btns_u;
@ -613,7 +619,9 @@ class GuiText : public GuiElement
//!Sets the maximum width of the drawn texture image //!Sets the maximum width of the drawn texture image
//!If the text exceeds this, it is wrapped to the next line //!If the text exceeds this, it is wrapped to the next line
//!\param w Maximum width //!\param w Maximum width
void SetMaxWidth(int w); void SetMaxWidth(int width);
void SetScroll(int s);
void SetWrap(bool w, int width = 0);
//!Sets the font color //!Sets the font color
//!\param c Font color //!\param c Font color
void SetColor(GXColor c); void SetColor(GXColor c);
@ -627,9 +635,16 @@ class GuiText : public GuiElement
//!Constantly called to draw the text //!Constantly called to draw the text
void Draw(); void Draw();
protected: protected:
char * origText;
wchar_t* text; //!< Unicode text value wchar_t* text; //!< Unicode text value
int size; //!< Font size int size; //!< Font size
int maxWidth; //!< Maximum width of the generated text object (for text wrapping) int maxWidth; //!< Maximum width of the generated text object (for text wrapping)
bool wrap;
wchar_t* textDyn;
int textScroll;
int textScrollPos;
int textScrollInitialDelay;
int textScrollDelay;
u16 style; //!< FreeTypeGX style attributes u16 style; //!< FreeTypeGX style attributes
GXColor color; //!< Font color GXColor color; //!< Font color
}; };
@ -930,4 +945,3 @@ class GuiFileBrowser : public GuiElement
}; };
#endif #endif

View File

@ -103,6 +103,7 @@ GuiFileBrowser::GuiFileBrowser(int w, int h)
fileListText[i] = new GuiText(NULL, 20, (GXColor){0, 0, 0, 0xff}); fileListText[i] = new GuiText(NULL, 20, (GXColor){0, 0, 0, 0xff});
fileListText[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE); fileListText[i]->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
fileListText[i]->SetPosition(5,0); fileListText[i]->SetPosition(5,0);
fileListText[i]->SetMaxWidth(380);
fileListBg[i] = new GuiImage(bgGameSelectionEntry); fileListBg[i] = new GuiImage(bgGameSelectionEntry);
fileListFolder[i] = new GuiImage(gameFolder); fileListFolder[i] = new GuiImage(gameFolder);
@ -375,6 +376,11 @@ void GuiFileBrowser::Update(GuiTrigger * t)
selectedItem = i; selectedItem = i;
browser.selIndex = browser.pageIndex + i; browser.selIndex = browser.pageIndex + i;
} }
if(selectedItem == i)
fileListText[i]->SetScroll(SCROLL_HORIZONTAL);
else
fileListText[i]->SetScroll(SCROLL_NONE);
} }
// update the location of the scroll box based on the position in the file list // update the location of the scroll box based on the position in the file list

View File

@ -18,66 +18,101 @@ static int presetAlignmentVert = 0;
static u16 presetStyle = 0; static u16 presetStyle = 0;
static GXColor presetColor = (GXColor){255, 255, 255, 255}; static GXColor presetColor = (GXColor){255, 255, 255, 255};
#define TEXT_SCROLL_DELAY 8
#define TEXT_SCROLL_INITIAL_DELAY 6
/** /**
* Constructor for the GuiText class. * Constructor for the GuiText class.
*/ */
GuiText::GuiText(const char * t, int s, GXColor c) GuiText::GuiText(const char * t, int s, GXColor c)
{ {
origText = NULL;
text = NULL; text = NULL;
size = s; size = s;
color = c; color = c;
alpha = c.a; alpha = c.a;
style = FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE; style = FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE;
maxWidth = 0; maxWidth = 0;
wrap = false;
textDyn = NULL;
textScroll = SCROLL_NONE;
textScrollPos = 0;
textScrollInitialDelay = TEXT_SCROLL_INITIAL_DELAY;
textScrollDelay = TEXT_SCROLL_DELAY;
alignmentHor = ALIGN_CENTRE; alignmentHor = ALIGN_CENTRE;
alignmentVert = ALIGN_MIDDLE; alignmentVert = ALIGN_MIDDLE;
if(t) if(t)
{
origText = strdup(t);
text = fontSystem->charToWideChar((char *)t); text = fontSystem->charToWideChar((char *)t);
} }
}
/** /**
* Constructor for the GuiText class, uses presets * Constructor for the GuiText class, uses presets
*/ */
GuiText::GuiText(const char * t) GuiText::GuiText(const char * t)
{ {
origText = NULL;
text = NULL; text = NULL;
size = presetSize; size = presetSize;
color = presetColor; color = presetColor;
alpha = presetColor.a; alpha = presetColor.a;
style = presetStyle; style = presetStyle;
maxWidth = presetMaxWidth; maxWidth = presetMaxWidth;
wrap = false;
textDyn = NULL;
textScroll = SCROLL_NONE;
textScrollPos = 0;
textScrollInitialDelay = TEXT_SCROLL_INITIAL_DELAY;
textScrollDelay = TEXT_SCROLL_DELAY;
alignmentHor = presetAlignmentHor; alignmentHor = presetAlignmentHor;
alignmentVert = presetAlignmentVert; alignmentVert = presetAlignmentVert;
if(t) if(t)
{
origText = strdup(t);
text = fontSystem->charToWideChar((char *)t); text = fontSystem->charToWideChar((char *)t);
} }
}
/** /**
* Destructor for the GuiText class. * Destructor for the GuiText class.
*/ */
GuiText::~GuiText() GuiText::~GuiText()
{ {
if(origText)
free(origText);
if(text) if(text)
{
delete text; delete text;
text = NULL; if(textDyn)
} delete textDyn;
} }
void GuiText::SetText(const char * t) void GuiText::SetText(const char * t)
{ {
if(origText)
free(origText);
if(text) if(text)
delete text; delete text;
if(textDyn)
delete textDyn;
origText = NULL;
text = NULL; text = NULL;
textDyn = NULL;
textScrollPos = 0;
textScrollInitialDelay = TEXT_SCROLL_INITIAL_DELAY;
if(t) if(t)
{
origText = strdup(t);
text = fontSystem->charToWideChar((char *)t); text = fontSystem->charToWideChar((char *)t);
} }
}
void GuiText::SetPresets(int sz, GXColor c, int w, u16 s, int h, int v) void GuiText::SetPresets(int sz, GXColor c, int w, u16 s, int h, int v)
{ {
@ -94,9 +129,31 @@ void GuiText::SetFontSize(int s)
size = s; size = s;
} }
void GuiText::SetMaxWidth(int w) void GuiText::SetMaxWidth(int width)
{ {
maxWidth = w; maxWidth = width;
}
void GuiText::SetWrap(bool w, int width)
{
wrap = w;
maxWidth = width;
}
void GuiText::SetScroll(int s)
{
if(textScroll == s)
return;
if(textDyn)
{
delete(textDyn);
textDyn = NULL;
}
textScroll = s;
textScrollPos = 0;
textScrollInitialDelay = TEXT_SCROLL_INITIAL_DELAY;
textScrollDelay = TEXT_SCROLL_DELAY;
} }
void GuiText::SetColor(GXColor c) void GuiText::SetColor(GXColor c)
@ -170,32 +227,81 @@ void GuiText::Draw()
if(alignmentVert == ALIGN_MIDDLE) if(alignmentVert == ALIGN_MIDDLE)
voffset = -newSize/2 + 2; voffset = -newSize/2 + 2;
if(maxWidth > 0) // text wrapping if(maxWidth > 0)
{
char * tmpText = strdup(origText);
u8 maxChar = (maxWidth*2.0) / newSize;
if(!textDyn)
{
if(strlen(tmpText) > maxChar)
tmpText[maxChar] = 0;
textDyn = fontSystem->charToWideChar(tmpText);
}
if(textScroll == SCROLL_HORIZONTAL)
{
int textlen = strlen(origText);
if(textlen > maxChar && (FrameTimer % textScrollDelay == 0))
{
if(textScrollInitialDelay)
{
textScrollInitialDelay--;
}
else
{
textScrollPos++;
if(textScrollPos > textlen-1)
{
textScrollPos = 0;
textScrollInitialDelay = TEXT_SCROLL_INITIAL_DELAY;
}
strncpy(tmpText, &origText[textScrollPos], maxChar-1);
tmpText[maxChar-1] = 0;
int dynlen = strlen(tmpText);
if(dynlen+2 < maxChar)
{
tmpText[dynlen] = ' ';
tmpText[dynlen+1] = ' ';
strncat(&tmpText[dynlen+2], origText, maxChar - dynlen - 2);
}
if(textDyn) delete textDyn;
textDyn = fontSystem->charToWideChar(tmpText);
}
}
if(textDyn)
fontSystem->drawText(this->GetLeft(), this->GetTop()+voffset, textDyn, c, style);
}
else if(wrap)
{ {
int lineheight = newSize + 6; int lineheight = newSize + 6;
int strlen = wcslen(text); int txtlen = wcslen(text);
int i = 0; int i = 0;
int ch = 0; int ch = 0;
int linenum = 0; int linenum = 0;
int lastSpace = -1; int lastSpace = -1;
int lastSpaceIndex = -1; int lastSpaceIndex = -1;
wchar_t * tmptext[20]; wchar_t * textrow[20];
while(ch < strlen) while(ch < txtlen)
{ {
if(i == 0) if(i == 0)
tmptext[linenum] = new wchar_t[strlen + 1]; textrow[linenum] = new wchar_t[txtlen + 1];
tmptext[linenum][i] = text[ch]; textrow[linenum][i] = text[ch];
tmptext[linenum][i+1] = 0; textrow[linenum][i+1] = 0;
if(text[ch] == ' ' || ch == strlen-1) if(text[ch] == ' ' || ch == txtlen-1)
{ {
if(fontSystem->getWidth(tmptext[linenum]) >= maxWidth) if(wcslen(textrow[linenum]) >= maxChar)
{ {
if(lastSpace >= 0) if(lastSpace >= 0)
{ {
tmptext[linenum][lastSpaceIndex] = 0; // discard space, and everything after textrow[linenum][lastSpaceIndex] = 0; // discard space, and everything after
ch = lastSpace; // go backwards to the last space ch = lastSpace; // go backwards to the last space
lastSpace = -1; // we have used this space lastSpace = -1; // we have used this space
lastSpaceIndex = -1; lastSpaceIndex = -1;
@ -203,7 +309,7 @@ void GuiText::Draw()
linenum++; linenum++;
i = -1; i = -1;
} }
else if(ch == strlen-1) else if(ch == txtlen-1)
{ {
linenum++; linenum++;
} }
@ -222,11 +328,17 @@ void GuiText::Draw()
for(i=0; i < linenum; i++) for(i=0; i < linenum; i++)
{ {
fontSystem->drawText(this->GetLeft(), this->GetTop()+voffset+i*lineheight, tmptext[i], c, style); fontSystem->drawText(this->GetLeft(), this->GetTop()+voffset+i*lineheight, textrow[i], c, style);
delete tmptext[i]; delete textrow[i];
} }
} }
else else
{
fontSystem->drawText(this->GetLeft(), this->GetTop()+voffset, textDyn, c, style);
}
free(tmpText);
}
else
{ {
fontSystem->drawText(this->GetLeft(), this->GetTop()+voffset, text, c, style); fontSystem->drawText(this->GetLeft(), this->GetTop()+voffset, text, c, style);
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -43,10 +43,8 @@ int gameRumbleCount = 0, menuRumbleCount = 0, rumbleCountAlready = 0;
unsigned int vbapadmap[10]; // VBA controller buttons unsigned int vbapadmap[10]; // VBA controller buttons
u32 btnmap[5][10]; // button mapping u32 btnmap[5][10]; // button mapping
void ResetControls() void ResetControls(int wiiCtrl)
{ {
memset(btnmap, 0, sizeof(btnmap));
int i; int i;
// VBA controller buttons // VBA controller buttons
@ -64,6 +62,8 @@ void ResetControls()
vbapadmap[i++] = VBA_BUTTON_R; vbapadmap[i++] = VBA_BUTTON_R;
/*** Gamecube controller Padmap ***/ /*** Gamecube controller Padmap ***/
if(wiiCtrl == CTRLR_GCPAD || wiiCtrl == 0)
{
i=0; i=0;
btnmap[CTRLR_GCPAD][i++] = PAD_BUTTON_B; btnmap[CTRLR_GCPAD][i++] = PAD_BUTTON_B;
btnmap[CTRLR_GCPAD][i++] = PAD_BUTTON_A; btnmap[CTRLR_GCPAD][i++] = PAD_BUTTON_A;
@ -75,8 +75,11 @@ void ResetControls()
btnmap[CTRLR_GCPAD][i++] = PAD_BUTTON_RIGHT; btnmap[CTRLR_GCPAD][i++] = PAD_BUTTON_RIGHT;
btnmap[CTRLR_GCPAD][i++] = PAD_TRIGGER_L; btnmap[CTRLR_GCPAD][i++] = PAD_TRIGGER_L;
btnmap[CTRLR_GCPAD][i++] = PAD_TRIGGER_R; btnmap[CTRLR_GCPAD][i++] = PAD_TRIGGER_R;
}
/*** Wiimote Padmap ***/ /*** Wiimote Padmap ***/
if(wiiCtrl == CTRLR_WIIMOTE || wiiCtrl == 0)
{
i=0; i=0;
btnmap[CTRLR_WIIMOTE][i++] = WPAD_BUTTON_1; btnmap[CTRLR_WIIMOTE][i++] = WPAD_BUTTON_1;
btnmap[CTRLR_WIIMOTE][i++] = WPAD_BUTTON_2; btnmap[CTRLR_WIIMOTE][i++] = WPAD_BUTTON_2;
@ -88,8 +91,11 @@ void ResetControls()
btnmap[CTRLR_WIIMOTE][i++] = WPAD_BUTTON_DOWN; btnmap[CTRLR_WIIMOTE][i++] = WPAD_BUTTON_DOWN;
btnmap[CTRLR_WIIMOTE][i++] = WPAD_BUTTON_B; btnmap[CTRLR_WIIMOTE][i++] = WPAD_BUTTON_B;
btnmap[CTRLR_WIIMOTE][i++] = WPAD_BUTTON_A; btnmap[CTRLR_WIIMOTE][i++] = WPAD_BUTTON_A;
}
/*** Classic Controller Padmap ***/ /*** Classic Controller Padmap ***/
if(wiiCtrl == CTRLR_CLASSIC || wiiCtrl == 0)
{
i=0; i=0;
btnmap[CTRLR_CLASSIC][i++] = WPAD_CLASSIC_BUTTON_Y; btnmap[CTRLR_CLASSIC][i++] = WPAD_CLASSIC_BUTTON_Y;
btnmap[CTRLR_CLASSIC][i++] = WPAD_CLASSIC_BUTTON_B; btnmap[CTRLR_CLASSIC][i++] = WPAD_CLASSIC_BUTTON_B;
@ -101,8 +107,11 @@ void ResetControls()
btnmap[CTRLR_CLASSIC][i++] = WPAD_CLASSIC_BUTTON_RIGHT; btnmap[CTRLR_CLASSIC][i++] = WPAD_CLASSIC_BUTTON_RIGHT;
btnmap[CTRLR_CLASSIC][i++] = WPAD_CLASSIC_BUTTON_FULL_L; btnmap[CTRLR_CLASSIC][i++] = WPAD_CLASSIC_BUTTON_FULL_L;
btnmap[CTRLR_CLASSIC][i++] = WPAD_CLASSIC_BUTTON_FULL_R; btnmap[CTRLR_CLASSIC][i++] = WPAD_CLASSIC_BUTTON_FULL_R;
}
/*** Nunchuk + wiimote Padmap ***/ /*** Nunchuk + wiimote Padmap ***/
if(wiiCtrl == CTRLR_NUNCHUK || wiiCtrl == 0)
{
i=0; i=0;
btnmap[CTRLR_NUNCHUK][i++] = WPAD_NUNCHUK_BUTTON_C; btnmap[CTRLR_NUNCHUK][i++] = WPAD_NUNCHUK_BUTTON_C;
btnmap[CTRLR_NUNCHUK][i++] = WPAD_NUNCHUK_BUTTON_Z; btnmap[CTRLR_NUNCHUK][i++] = WPAD_NUNCHUK_BUTTON_Z;
@ -114,8 +123,11 @@ void ResetControls()
btnmap[CTRLR_NUNCHUK][i++] = WPAD_BUTTON_RIGHT; btnmap[CTRLR_NUNCHUK][i++] = WPAD_BUTTON_RIGHT;
btnmap[CTRLR_NUNCHUK][i++] = WPAD_BUTTON_2; btnmap[CTRLR_NUNCHUK][i++] = WPAD_BUTTON_2;
btnmap[CTRLR_NUNCHUK][i++] = WPAD_BUTTON_1; btnmap[CTRLR_NUNCHUK][i++] = WPAD_BUTTON_1;
}
/*** Keyboard map ***/ /*** Keyboard map ***/
if(wiiCtrl == CTRLR_KEYBOARD || wiiCtrl == 0)
{
i=0; i=0;
btnmap[CTRLR_KEYBOARD][i++] = KB_X; // VBA stupidly has B on the right instead of left btnmap[CTRLR_KEYBOARD][i++] = KB_X; // VBA stupidly has B on the right instead of left
btnmap[CTRLR_KEYBOARD][i++] = KB_Z; btnmap[CTRLR_KEYBOARD][i++] = KB_Z;
@ -128,6 +140,39 @@ void ResetControls()
btnmap[CTRLR_KEYBOARD][i++] = KB_A; btnmap[CTRLR_KEYBOARD][i++] = KB_A;
btnmap[CTRLR_KEYBOARD][i++] = KB_S; btnmap[CTRLR_KEYBOARD][i++] = KB_S;
} }
}
/****************************************************************************
* UpdatePads
*
* called by PostRetraceCallback in InitGCVideo - scans pad and wpad
***************************************************************************/
void
UpdatePads()
{
#ifdef HW_RVL
WPAD_ScanPads();
#endif
PAD_ScanPads();
for(int i=3; i >= 0; i--)
{
#ifdef HW_RVL
memcpy(&userInput[i].wpad, WPAD_Data(i), sizeof(WPADData));
#endif
userInput[i].chan = i;
userInput[i].pad.btns_d = PAD_ButtonsDown(i);
userInput[i].pad.btns_u = PAD_ButtonsUp(i);
userInput[i].pad.btns_h = PAD_ButtonsHeld(i);
userInput[i].pad.stickX = PAD_StickX(i);
userInput[i].pad.stickY = PAD_StickY(i);
userInput[i].pad.substickX = PAD_SubStickX(i);
userInput[i].pad.substickY = PAD_SubStickY(i);
userInput[i].pad.triggerL = PAD_TriggerL(i);
userInput[i].pad.triggerR = PAD_TriggerR(i);
}
}
#ifdef HW_RVL #ifdef HW_RVL
@ -959,6 +1004,8 @@ bool MenuRequested()
u32 GetJoy(int pad) u32 GetJoy(int pad)
{ {
UpdatePads();
// request to go back to menu // request to go back to menu
if (MenuRequested()) if (MenuRequested())
{ {

View File

@ -34,7 +34,7 @@
extern int rumbleRequest[4]; extern int rumbleRequest[4];
extern u32 btnmap[5][10]; extern u32 btnmap[5][10];
void ResetControls(); void ResetControls(int wc = 0);
void ShutoffRumble(); void ShutoffRumble();
void DoRumble(int i); void DoRumble(int i);
void systemGameRumble(int RumbleForFrames); void systemGameRumble(int RumbleForFrames);
@ -43,5 +43,6 @@ void updateRumbleFrame();
s8 WPAD_Stick(u8 chan,u8 right, int axis); s8 WPAD_Stick(u8 chan,u8 right, int axis);
u32 GetJoy(int which); u32 GetJoy(int which);
bool MenuRequested(); bool MenuRequested();
void UpdatePads();
#endif #endif

View File

@ -99,7 +99,6 @@ ParseMCDirectory (int slot)
card_dir CardDir; card_dir CardDir;
int CardError; int CardError;
int entryNum = 0; int entryNum = 0;
char tmpname[MAXPATHLEN];
// Try to mount the card // Try to mount the card
CardError = MountMC(slot, NOTSILENT); CardError = MountMC(slot, NOTSILENT);
@ -125,8 +124,7 @@ ParseMCDirectory (int slot)
memset(&(browserList[entryNum]), 0, sizeof(BROWSERENTRY)); // clear the new entry memset(&(browserList[entryNum]), 0, sizeof(BROWSERENTRY)); // clear the new entry
strncpy(browserList[entryNum].filename, (char *)CardDir.filename, MAXJOLIET); strncpy(browserList[entryNum].filename, (char *)CardDir.filename, MAXJOLIET);
ShortenFilename(tmpname, (char *)CardDir.filename); // hide file extension StripExt(browserList[entryNum].displayname, browserList[entryNum].filename); // hide file extension
strncpy(browserList[entryNum].displayname, tmpname, MAXDISPLAY); // crop name for display
browserList[entryNum].length = CardDir.filelen; browserList[entryNum].length = CardDir.filelen;
entryNum++; entryNum++;

View File

@ -141,7 +141,7 @@ WindowPrompt(const char *title, const char *msg, const char *btn1Label, const ch
GuiText msgTxt(msg, 26, (GXColor){0, 0, 0, 255}); GuiText msgTxt(msg, 26, (GXColor){0, 0, 0, 255});
msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
msgTxt.SetPosition(0,-20); msgTxt.SetPosition(0,-20);
msgTxt.SetMaxWidth(430); msgTxt.SetWrap(true, 430);
GuiText btn1Txt(btn1Label, 24, (GXColor){0, 0, 0, 255}); GuiText btn1Txt(btn1Label, 24, (GXColor){0, 0, 0, 255});
GuiImage btn1Img(&btnOutline); GuiImage btn1Img(&btnOutline);
@ -1087,7 +1087,7 @@ static int MenuGame()
sprintf(s, "Weather: Night Time"); sprintf(s, "Weather: Night Time");
} else sprintf(s, "Weather: %d%% sun", SunBars*10); } else sprintf(s, "Weather: %d%% sun", SunBars*10);
sunBtnTxt = new GuiText(s, 24, (GXColor){0, 0, 0, 255}); sunBtnTxt = new GuiText(s, 24, (GXColor){0, 0, 0, 255});
sunBtnTxt->SetMaxWidth(btnLargeOutline.GetWidth()-30); sunBtnTxt->SetWrap(true, btnLargeOutline.GetWidth()-30);
sunBtnImg = new GuiImage(&btnLargeOutline); sunBtnImg = new GuiImage(&btnLargeOutline);
sunBtnImgOver = new GuiImage(&btnLargeOutlineOver); sunBtnImgOver = new GuiImage(&btnLargeOutlineOver);
sunBtn = new GuiButton(btnLargeOutline.GetWidth(), btnLargeOutline.GetHeight()); sunBtn = new GuiButton(btnLargeOutline.GetWidth(), btnLargeOutline.GetHeight());
@ -1119,7 +1119,7 @@ static int MenuGame()
resetBtn.SetEffectGrow(); resetBtn.SetEffectGrow();
GuiText gameSettingsBtnTxt("Game Settings", 24, (GXColor){0, 0, 0, 255}); GuiText gameSettingsBtnTxt("Game Settings", 24, (GXColor){0, 0, 0, 255});
gameSettingsBtnTxt.SetMaxWidth(btnLargeOutline.GetWidth()-30); gameSettingsBtnTxt.SetWrap(true, btnLargeOutline.GetWidth()-30);
GuiImage gameSettingsBtnImg(&btnLargeOutline); GuiImage gameSettingsBtnImg(&btnLargeOutline);
GuiImage gameSettingsBtnImgOver(&btnLargeOutlineOver); GuiImage gameSettingsBtnImgOver(&btnLargeOutlineOver);
GuiImage gameSettingsBtnIcon(&iconGameSettings); GuiImage gameSettingsBtnIcon(&iconGameSettings);
@ -1466,7 +1466,7 @@ static int MenuGameSaves(int action)
GuiImage backBtnImgOver(&btnOutlineOver); GuiImage backBtnImgOver(&btnOutlineOver);
GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight());
backBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); backBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
backBtn.SetPosition(100, -35); backBtn.SetPosition(50, -35);
backBtn.SetLabel(&backBtnTxt); backBtn.SetLabel(&backBtnTxt);
backBtn.SetImage(&backBtnImg); backBtn.SetImage(&backBtnImg);
backBtn.SetImageOver(&backBtnImgOver); backBtn.SetImageOver(&backBtnImgOver);
@ -1736,7 +1736,7 @@ static int MenuGameSettings()
trigHome.SetButtonOnlyTrigger(-1, WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME, 0); trigHome.SetButtonOnlyTrigger(-1, WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME, 0);
GuiText mappingBtnTxt("Button Mappings", 24, (GXColor){0, 0, 0, 255}); GuiText mappingBtnTxt("Button Mappings", 24, (GXColor){0, 0, 0, 255});
mappingBtnTxt.SetMaxWidth(btnLargeOutline.GetWidth()-30); mappingBtnTxt.SetWrap(true, btnLargeOutline.GetWidth()-30);
GuiImage mappingBtnImg(&btnLargeOutline); GuiImage mappingBtnImg(&btnLargeOutline);
GuiImage mappingBtnImgOver(&btnLargeOutlineOver); GuiImage mappingBtnImgOver(&btnLargeOutlineOver);
GuiImage mappingBtnIcon(&iconMappings); GuiImage mappingBtnIcon(&iconMappings);
@ -1753,7 +1753,7 @@ static int MenuGameSettings()
mappingBtn.SetEffectGrow(); mappingBtn.SetEffectGrow();
GuiText videoBtnTxt("Video", 24, (GXColor){0, 0, 0, 255}); GuiText videoBtnTxt("Video", 24, (GXColor){0, 0, 0, 255});
videoBtnTxt.SetMaxWidth(btnLargeOutline.GetWidth()-30); videoBtnTxt.SetWrap(true, btnLargeOutline.GetWidth()-30);
GuiImage videoBtnImg(&btnLargeOutline); GuiImage videoBtnImg(&btnLargeOutline);
GuiImage videoBtnImgOver(&btnLargeOutlineOver); GuiImage videoBtnImgOver(&btnLargeOutlineOver);
GuiImage videoBtnIcon(&iconVideo); GuiImage videoBtnIcon(&iconVideo);
@ -1834,7 +1834,7 @@ static int MenuGameSettings()
GuiImage backBtnImgOver(&btnOutlineOver); GuiImage backBtnImgOver(&btnOutlineOver);
GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight());
backBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); backBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
backBtn.SetPosition(100, -35); backBtn.SetPosition(50, -35);
backBtn.SetLabel(&backBtnTxt); backBtn.SetLabel(&backBtnTxt);
backBtn.SetImage(&backBtnImg); backBtn.SetImage(&backBtnImg);
backBtn.SetImageOver(&backBtnImgOver); backBtn.SetImageOver(&backBtnImgOver);
@ -1957,7 +1957,7 @@ static int MenuGameSettings()
GuiImage backBtnImgOver(&btnOutlineOver); GuiImage backBtnImgOver(&btnOutlineOver);
GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight());
backBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); backBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
backBtn.SetPosition(100, -35); backBtn.SetPosition(50, -35);
backBtn.SetLabel(&backBtnTxt); backBtn.SetLabel(&backBtnTxt);
backBtn.SetImage(&backBtnImg); backBtn.SetImage(&backBtnImg);
backBtn.SetImageOver(&backBtnImgOver); backBtn.SetImageOver(&backBtnImgOver);
@ -2034,7 +2034,7 @@ static int MenuSettingsMappings()
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
GuiText gamecubeBtnTxt("GameCube Controller", 24, (GXColor){0, 0, 0, 255}); GuiText gamecubeBtnTxt("GameCube Controller", 24, (GXColor){0, 0, 0, 255});
gamecubeBtnTxt.SetMaxWidth(btnLargeOutline.GetWidth()-30); gamecubeBtnTxt.SetWrap(true, btnLargeOutline.GetWidth()-30);
GuiImage gamecubeBtnImg(&btnLargeOutline); GuiImage gamecubeBtnImg(&btnLargeOutline);
GuiImage gamecubeBtnImgOver(&btnLargeOutlineOver); GuiImage gamecubeBtnImgOver(&btnLargeOutlineOver);
GuiImage gamecubeBtnIcon(&iconGamecube); GuiImage gamecubeBtnIcon(&iconGamecube);
@ -2067,7 +2067,7 @@ static int MenuSettingsMappings()
wiimoteBtn.SetEffectGrow(); wiimoteBtn.SetEffectGrow();
GuiText classicBtnTxt("Classic Controller", 24, (GXColor){0, 0, 0, 255}); GuiText classicBtnTxt("Classic Controller", 24, (GXColor){0, 0, 0, 255});
classicBtnTxt.SetMaxWidth(btnLargeOutline.GetWidth()-30); classicBtnTxt.SetWrap(true, btnLargeOutline.GetWidth()-30);
GuiImage classicBtnImg(&btnLargeOutline); GuiImage classicBtnImg(&btnLargeOutline);
GuiImage classicBtnImgOver(&btnLargeOutlineOver); GuiImage classicBtnImgOver(&btnLargeOutlineOver);
GuiImage classicBtnIcon(&iconClassic); GuiImage classicBtnIcon(&iconClassic);
@ -2132,7 +2132,7 @@ static int MenuSettingsMappings()
GuiImage backBtnImgOver(&btnOutlineOver); GuiImage backBtnImgOver(&btnOutlineOver);
GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight());
backBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); backBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
backBtn.SetPosition(100, -35); backBtn.SetPosition(50, -35);
backBtn.SetLabel(&backBtnTxt); backBtn.SetLabel(&backBtnTxt);
backBtn.SetImage(&backBtnImg); backBtn.SetImage(&backBtnImg);
backBtn.SetImageOver(&backBtnImgOver); backBtn.SetImageOver(&backBtnImgOver);
@ -2248,7 +2248,7 @@ ButtonMappingWindow()
GuiText msgTxt(msg, 26, (GXColor){0, 0, 0, 255}); GuiText msgTxt(msg, 26, (GXColor){0, 0, 0, 255});
msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); msgTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
msgTxt.SetPosition(0,-20); msgTxt.SetPosition(0,-20);
msgTxt.SetMaxWidth(430); msgTxt.SetWrap(true, 430);
promptWindow.Append(&dialogBoxImg); promptWindow.Append(&dialogBoxImg);
promptWindow.Append(&titleTxt); promptWindow.Append(&titleTxt);
@ -2359,6 +2359,8 @@ static int MenuSettingsMappingsMap()
GuiSound btnSoundClick(button_click_pcm, button_click_pcm_size, SOUND_PCM); GuiSound btnSoundClick(button_click_pcm, button_click_pcm_size, SOUND_PCM);
GuiImageData btnOutline(button_png); GuiImageData btnOutline(button_png);
GuiImageData btnOutlineOver(button_over_png); GuiImageData btnOutlineOver(button_over_png);
GuiImageData btnShortOutline(button_short_png);
GuiImageData btnShortOutlineOver(button_short_over_png);
GuiTrigger trigA; GuiTrigger trigA;
if(GCSettings.WiimoteOrientation) if(GCSettings.WiimoteOrientation)
@ -2371,7 +2373,7 @@ static int MenuSettingsMappingsMap()
GuiImage backBtnImgOver(&btnOutlineOver); GuiImage backBtnImgOver(&btnOutlineOver);
GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight());
backBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); backBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
backBtn.SetPosition(100, -35); backBtn.SetPosition(50, -35);
backBtn.SetLabel(&backBtnTxt); backBtn.SetLabel(&backBtnTxt);
backBtn.SetImage(&backBtnImg); backBtn.SetImage(&backBtnImg);
backBtn.SetImageOver(&backBtnImgOver); backBtn.SetImageOver(&backBtnImgOver);
@ -2380,6 +2382,20 @@ static int MenuSettingsMappingsMap()
backBtn.SetTrigger(&trigA); backBtn.SetTrigger(&trigA);
backBtn.SetEffectGrow(); backBtn.SetEffectGrow();
GuiText resetBtnTxt("Reset", 24, (GXColor){0, 0, 0, 255});
GuiImage resetBtnImg(&btnShortOutline);
GuiImage resetBtnImgOver(&btnShortOutlineOver);
GuiButton resetBtn(btnShortOutline.GetWidth(), btnShortOutline.GetHeight());
resetBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
resetBtn.SetPosition(260, -35);
resetBtn.SetLabel(&resetBtnTxt);
resetBtn.SetImage(&resetBtnImg);
resetBtn.SetImageOver(&resetBtnImgOver);
resetBtn.SetSoundOver(&btnSoundOver);
resetBtn.SetSoundClick(&btnSoundClick);
resetBtn.SetTrigger(&trigA);
resetBtn.SetEffectGrow();
i=0; i=0;
sprintf(options.name[i++], "B"); sprintf(options.name[i++], "B");
sprintf(options.name[i++], "A"); sprintf(options.name[i++], "A");
@ -2393,6 +2409,9 @@ static int MenuSettingsMappingsMap()
sprintf(options.name[i++], "R"); sprintf(options.name[i++], "R");
options.length = i; options.length = i;
for(i=0; i < options.length; i++)
options.value[i][0] = 0;
GuiOptionBrowser optionBrowser(552, 248, &options); GuiOptionBrowser optionBrowser(552, 248, &options);
optionBrowser.SetPosition(0, 108); optionBrowser.SetPosition(0, 108);
optionBrowser.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); optionBrowser.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
@ -2401,6 +2420,7 @@ static int MenuSettingsMappingsMap()
HaltGui(); HaltGui();
GuiWindow w(screenwidth, screenheight); GuiWindow w(screenwidth, screenheight);
w.Append(&backBtn); w.Append(&backBtn);
w.Append(&resetBtn);
mainWindow->Append(&optionBrowser); mainWindow->Append(&optionBrowser);
mainWindow->Append(&w); mainWindow->Append(&w);
mainWindow->Append(&titleTxt); mainWindow->Append(&titleTxt);
@ -2413,13 +2433,16 @@ static int MenuSettingsMappingsMap()
for(i=0; i < options.length; i++) for(i=0; i < options.length; i++)
{ {
options.value[i][0] = 0;
for(j=0; j < ctrlr_def[mapMenuCtrl].num_btns; j++) for(j=0; j < ctrlr_def[mapMenuCtrl].num_btns; j++)
{ {
if(btnmap[mapMenuCtrl][i] == if(btnmap[mapMenuCtrl][i] == 0)
{
options.value[i][0] = 0;
}
else if(btnmap[mapMenuCtrl][i] ==
ctrlr_def[mapMenuCtrl].map[j].btn) ctrlr_def[mapMenuCtrl].map[j].btn)
{ {
if(strcmp(options.value[i], ctrlr_def[mapMenuCtrl].map[j].name) != 0)
sprintf(options.value[i], ctrlr_def[mapMenuCtrl].map[j].name); sprintf(options.value[i], ctrlr_def[mapMenuCtrl].map[j].name);
break; break;
} }
@ -2430,13 +2453,27 @@ static int MenuSettingsMappingsMap()
if(ret >= 0) if(ret >= 0)
{ {
btnmap[mapMenuCtrl][ret] = ButtonMappingWindow(); // get a button selection from user // get a button selection from user
btnmap[mapMenuCtrl][ret] = ButtonMappingWindow();
} }
if(backBtn.GetState() == STATE_CLICKED) if(backBtn.GetState() == STATE_CLICKED)
{ {
menu = MENU_GAMESETTINGS_MAPPINGS; menu = MENU_GAMESETTINGS_MAPPINGS;
} }
else if(resetBtn.GetState() == STATE_CLICKED)
{
resetBtn.ResetState();
int choice = WindowPrompt(
"Reset Mappings",
"Are you sure that you want to reset your mappings?",
"Yes",
"No");
if(choice == 1)
ResetControls(mapMenuCtrl);
}
} }
HaltGui(); HaltGui();
mainWindow->Remove(&optionBrowser); mainWindow->Remove(&optionBrowser);
@ -2669,6 +2706,9 @@ static int MenuSettingsVideo()
sprintf(options.name[i++], "GB Palette"); sprintf(options.name[i++], "GB Palette");
options.length = i; options.length = i;
for(i=0; i < options.length; i++)
options.value[i][0] = 0;
if(!IsGameboyGame()) if(!IsGameboyGame())
options.name[6][0] = 0; // disable palette option for GBA/GBC options.name[6][0] = 0; // disable palette option for GBA/GBC
@ -2692,7 +2732,7 @@ static int MenuSettingsVideo()
GuiImage backBtnImgOver(&btnOutlineOver); GuiImage backBtnImgOver(&btnOutlineOver);
GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight());
backBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); backBtn.SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
backBtn.SetPosition(100, -35); backBtn.SetPosition(50, -35);
backBtn.SetLabel(&backBtnTxt); backBtn.SetLabel(&backBtnTxt);
backBtn.SetImage(&backBtnImg); backBtn.SetImage(&backBtnImg);
backBtn.SetImageOver(&backBtnImgOver); backBtn.SetImageOver(&backBtnImgOver);
@ -2868,7 +2908,7 @@ static int MenuSettings()
savingBtn.SetEffectGrow(); savingBtn.SetEffectGrow();
GuiText menuBtnTxt("Menu", 24, (GXColor){0, 0, 0, 255}); GuiText menuBtnTxt("Menu", 24, (GXColor){0, 0, 0, 255});
menuBtnTxt.SetMaxWidth(btnLargeOutline.GetWidth()-30); menuBtnTxt.SetWrap(true, btnLargeOutline.GetWidth()-30);
GuiImage menuBtnImg(&btnLargeOutline); GuiImage menuBtnImg(&btnLargeOutline);
GuiImage menuBtnImgOver(&btnLargeOutlineOver); GuiImage menuBtnImgOver(&btnLargeOutlineOver);
GuiImage menuBtnIcon(&iconMenu); GuiImage menuBtnIcon(&iconMenu);
@ -2885,7 +2925,7 @@ static int MenuSettings()
menuBtn.SetEffectGrow(); menuBtn.SetEffectGrow();
GuiText networkBtnTxt("Network", 24, (GXColor){0, 0, 0, 255}); GuiText networkBtnTxt("Network", 24, (GXColor){0, 0, 0, 255});
networkBtnTxt.SetMaxWidth(btnLargeOutline.GetWidth()-30); networkBtnTxt.SetWrap(true, btnLargeOutline.GetWidth()-30);
GuiImage networkBtnImg(&btnLargeOutline); GuiImage networkBtnImg(&btnLargeOutline);
GuiImage networkBtnImgOver(&btnLargeOutlineOver); GuiImage networkBtnImgOver(&btnLargeOutlineOver);
GuiImage networkBtnIcon(&iconNetwork); GuiImage networkBtnIcon(&iconNetwork);
@ -3010,6 +3050,9 @@ static int MenuSettingsFile()
options.length = i; options.length = i;
options.name[4][0] = 0; // hide cheats folder (not implemented) options.name[4][0] = 0; // hide cheats folder (not implemented)
for(i=0; i < options.length; i++)
options.value[i][0] = 0;
GuiText titleTxt("Settings - Saving & Loading", 28, (GXColor){255, 255, 255, 255}); GuiText titleTxt("Settings - Saving & Loading", 28, (GXColor){255, 255, 255, 255});
titleTxt.SetAlignment(ALIGN_LEFT, ALIGN_TOP); titleTxt.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
titleTxt.SetPosition(50,50); titleTxt.SetPosition(50,50);
@ -3198,6 +3241,9 @@ static int MenuSettingsMenu()
sprintf(options.name[i++], "Rumble"); sprintf(options.name[i++], "Rumble");
options.length = i; options.length = i;
for(i=0; i < options.length; i++)
options.value[i][0] = 0;
GuiText titleTxt("Settings - Menu", 28, (GXColor){255, 255, 255, 255}); GuiText titleTxt("Settings - Menu", 28, (GXColor){255, 255, 255, 255});
titleTxt.SetAlignment(ALIGN_LEFT, ALIGN_TOP); titleTxt.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
titleTxt.SetPosition(50,50); titleTxt.SetPosition(50,50);
@ -3342,6 +3388,9 @@ static int MenuSettingsNetwork()
sprintf(options.name[i++], "SMB Share Password"); sprintf(options.name[i++], "SMB Share Password");
options.length = i; options.length = i;
for(i=0; i < options.length; i++)
options.value[i][0] = 0;
GuiText titleTxt("Settings - Network", 28, (GXColor){255, 255, 255, 255}); GuiText titleTxt("Settings - Network", 28, (GXColor){255, 255, 255, 255});
titleTxt.SetAlignment(ALIGN_LEFT, ALIGN_TOP); titleTxt.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
titleTxt.SetPosition(50,50); titleTxt.SetPosition(50,50);
@ -3863,7 +3912,7 @@ static int MenuPalette()
spr2Btn.SetEffectGrow(); spr2Btn.SetEffectGrow();
GuiText importBtnTxt("Load / Save", 24, (GXColor){0, 0, 0, 255}); GuiText importBtnTxt("Load / Save", 24, (GXColor){0, 0, 0, 255});
importBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); importBtnTxt.SetWrap(true, btnOutline.GetWidth()-30);
GuiImage importBtnImg(&btnOutline); GuiImage importBtnImg(&btnOutline);
GuiImage importBtnImgOver(&btnOutlineOver); GuiImage importBtnImgOver(&btnOutlineOver);
GuiButton importBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); GuiButton importBtn(btnOutline.GetWidth(), btnOutline.GetHeight());

View File

@ -22,7 +22,7 @@
#include "http.h" #include "http.h"
#include "filebrowser.h" #include "filebrowser.h"
static bool inNetworkInit = false; bool inNetworkInit = false;
static bool networkInit = false; static bool networkInit = false;
static bool autoNetworkInit = true; static bool autoNetworkInit = true;
static bool networkShareInit = false; static bool networkShareInit = false;

View File

@ -18,5 +18,6 @@ bool ConnectShare (bool silent);
void CloseShare(); void CloseShare();
extern bool updateFound; extern bool updateFound;
extern bool inNetworkInit;
#endif #endif

View File

@ -211,6 +211,7 @@ int main(int argc, char *argv[])
#endif #endif
#ifdef HW_RVL #ifdef HW_RVL
DI_Close(); // fixes some black screen issues
DI_Init(); // first DI_Init(); // first
#endif #endif

View File

@ -15,7 +15,6 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#include <wiiuse/wpad.h>
#include "vba.h" #include "vba.h"
#include "menu.h" #include "menu.h"
@ -300,39 +299,6 @@ void StopGX()
VIDEO_Flush(); VIDEO_Flush();
} }
/****************************************************************************
* UpdatePadsCB
*
* called by postRetraceCallback in InitGCVideo - scans gcpad and wpad
***************************************************************************/
static void
UpdatePadsCB ()
{
#ifdef HW_RVL
WPAD_ScanPads();
#endif
PAD_ScanPads();
for(int i=3; i >= 0; i--)
{
#ifdef HW_RVL
memcpy(&userInput[i].wpad, WPAD_Data(i), sizeof(WPADData));
#endif
userInput[i].chan = i;
userInput[i].pad.btns_d = PAD_ButtonsDown(i);
userInput[i].pad.btns_u = PAD_ButtonsUp(i);
userInput[i].pad.btns_h = PAD_ButtonsHeld(i);
userInput[i].pad.stickX = PAD_StickX(i);
userInput[i].pad.stickY = PAD_StickY(i);
userInput[i].pad.substickX = PAD_SubStickX(i);
userInput[i].pad.substickY = PAD_SubStickY(i);
userInput[i].pad.triggerL = PAD_TriggerL(i);
userInput[i].pad.triggerR = PAD_TriggerR(i);
}
}
/**************************************************************************** /****************************************************************************
* SetupVideoMode * SetupVideoMode
* *
@ -437,9 +403,7 @@ InitializeVideo ()
VIDEO_ClearFrameBuffer (vmode, xfb[1], COLOR_BLACK); VIDEO_ClearFrameBuffer (vmode, xfb[1], COLOR_BLACK);
VIDEO_SetNextFramebuffer (xfb[0]); VIDEO_SetNextFramebuffer (xfb[0]);
// video callbacks VIDEO_SetPostRetraceCallback ((VIRetraceCallback)copy_to_xfb);
VIDEO_SetPostRetraceCallback ((VIRetraceCallback)UpdatePadsCB);
VIDEO_SetPreRetraceCallback ((VIRetraceCallback)copy_to_xfb);
VIDEO_SetBlack (FALSE); VIDEO_SetBlack (FALSE);
@ -556,6 +520,8 @@ ResetVideo_Emu ()
while (VIDEO_GetNextField()) while (VIDEO_GetNextField())
VIDEO_WaitVSync(); VIDEO_WaitVSync();
VIDEO_SetPreRetraceCallback(NULL);
// reconfigure GX // reconfigure GX
GX_SetViewport (0, 0, rmode->fbWidth, rmode->efbHeight, 0, 1); GX_SetViewport (0, 0, rmode->fbWidth, rmode->efbHeight, 0, 1);
GX_SetDispCopyYScale ((f32) rmode->xfbHeight / (f32) rmode->efbHeight); GX_SetDispCopyYScale ((f32) rmode->xfbHeight / (f32) rmode->efbHeight);
@ -770,6 +736,8 @@ ResetVideo_Menu ()
while (VIDEO_GetNextField()) while (VIDEO_GetNextField())
VIDEO_WaitVSync(); VIDEO_WaitVSync();
VIDEO_SetPreRetraceCallback((VIRetraceCallback)UpdatePads);
// clears the bg to color and clears the z buffer // clears the bg to color and clears the z buffer
GXColor background = {0, 0, 0, 255}; GXColor background = {0, 0, 0, 255};
GX_SetCopyClear (background, 0x00ffffff); GX_SetCopyClear (background, 0x00ffffff);
@ -827,8 +795,6 @@ ResetVideo_Menu ()
***************************************************************************/ ***************************************************************************/
void Menu_Render() void Menu_Render()
{ {
GX_DrawDone ();
whichfb ^= 1; // flip framebuffer whichfb ^= 1; // flip framebuffer
GX_SetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); GX_SetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);
GX_SetColorUpdate(GX_TRUE); GX_SetColorUpdate(GX_TRUE);
@ -888,6 +854,7 @@ void Menu_DrawImg(f32 xpos, f32 ypos, u16 width, u16 height, u8 data[],
GX_Color4u8(0xFF,0xFF,0xFF,alpha); GX_Color4u8(0xFF,0xFF,0xFF,alpha);
GX_TexCoord2f32(0, 1); GX_TexCoord2f32(0, 1);
GX_End(); GX_End();
GX_DrawDone();
GX_LoadPosMtxImm (GXmodelView2D, GX_PNMTX0); GX_LoadPosMtxImm (GXmodelView2D, GX_PNMTX0);
GX_SetTevOp (GX_TEVSTAGE0, GX_PASSCLR); GX_SetTevOp (GX_TEVSTAGE0, GX_PASSCLR);
@ -926,4 +893,5 @@ void Menu_DrawRectangle(f32 x, f32 y, f32 width, f32 height, GXColor color, u8 f
GX_Color4u8(color.r, color.g, color.b, color.a); GX_Color4u8(color.r, color.g, color.b, color.a);
} }
GX_End(); GX_End();
GX_DrawDone();
} }

View File

@ -37,5 +37,6 @@ extern bool TiltScreen;
extern float TiltAngle; extern float TiltAngle;
extern u8 * gameScreenTex; extern u8 * gameScreenTex;
extern u8 * gameScreenTex2; extern u8 * gameScreenTex2;
extern u32 FrameTimer;
#endif #endif