mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2024-12-25 02:31:49 +01:00
fixed DVD file parsing bug
modified some of the menu helpers, added J-CART indication improved & more flexible input device selection (ensure we have at least one connected device)
This commit is contained in:
parent
51ba38b6a1
commit
a54f743cb4
@ -157,7 +157,7 @@ static int getentry (int entrycount)
|
|||||||
if (strlen (fname) == 0) fname[0] = filename[0];
|
if (strlen (fname) == 0) fname[0] = filename[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen (fname) == 0) return -1;
|
if (strlen (fname) == 0) strcpy (fname, ".");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (fname[0] == 1) strcpy (fname, "..");
|
if (fname[0] == 1) strcpy (fname, "..");
|
||||||
@ -248,7 +248,6 @@ int DVD_ParseDirectory ()
|
|||||||
u64 rdoffset;
|
u64 rdoffset;
|
||||||
int len = 0;
|
int len = 0;
|
||||||
int filecount = 0;
|
int filecount = 0;
|
||||||
int ret;
|
|
||||||
|
|
||||||
pdoffset = rdoffset = rootdir;
|
pdoffset = rdoffset = rootdir;
|
||||||
pdlength = rootdirlength;
|
pdlength = rootdirlength;
|
||||||
@ -260,16 +259,14 @@ int DVD_ParseDirectory ()
|
|||||||
/*** Get as many files as possible ***/
|
/*** Get as many files as possible ***/
|
||||||
while (len < pdlength)
|
while (len < pdlength)
|
||||||
{
|
{
|
||||||
if (dvd_read (&dvdbuffer, 2048, pdoffset) == 0)
|
if (dvd_read (&dvdbuffer, 2048, pdoffset) == 0) return 0;
|
||||||
return 0;
|
|
||||||
|
|
||||||
diroffset = 0;
|
diroffset = 0;
|
||||||
|
|
||||||
ret = getentry (filecount);
|
while (getentry (filecount))
|
||||||
while (ret != 0)
|
|
||||||
{
|
{
|
||||||
if ((ret > 0) && (filecount < MAXFILES)) filecount++;
|
if (!strcmp(filelist[filecount].filename,".") && (filecount < MAXFILES))
|
||||||
ret = getentry (filecount);
|
filecount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
len += 2048;
|
len += 2048;
|
||||||
|
@ -238,6 +238,16 @@ int FileSelector(unsigned char *buffer)
|
|||||||
if (bg_filesel[8].texture) bg_filesel[8].state |= IMAGE_VISIBLE;
|
if (bg_filesel[8].texture) bg_filesel[8].state |= IMAGE_VISIBLE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* update helper */
|
||||||
|
if (!strcmp(filelist[selection].filename,".."))
|
||||||
|
strcpy(action_select.comment,"Previous Directory");
|
||||||
|
else
|
||||||
|
strcpy(action_select.comment,"Open Directory");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
strcpy(action_select.comment,"Load ROM File");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Draw menu*/
|
/* Draw menu*/
|
||||||
@ -266,6 +276,7 @@ int FileSelector(unsigned char *buffer)
|
|||||||
gxDrawTexture(dir_icon.texture,dir_icon.x-1,yoffset-1,dir_icon.w+2,dir_icon.h+2,255);
|
gxDrawTexture(dir_icon.texture,dir_icon.x-1,yoffset-1,dir_icon.w+2,dir_icon.h+2,255);
|
||||||
if (FONT_write(text,18,dir_icon.x+dir_icon.w+6,yoffset+16,bar_over.w-dir_icon.w-14,(GXColor)WHITE))
|
if (FONT_write(text,18,dir_icon.x+dir_icon.w+6,yoffset+16,bar_over.w-dir_icon.w-14,(GXColor)WHITE))
|
||||||
{
|
{
|
||||||
|
/* text scrolling */
|
||||||
filelist[i].filename_offset ++;
|
filelist[i].filename_offset ++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -273,6 +284,7 @@ int FileSelector(unsigned char *buffer)
|
|||||||
{
|
{
|
||||||
if (FONT_write(text,18,dir_icon.x,yoffset+16,bar_over.w-8,(GXColor)WHITE))
|
if (FONT_write(text,18,dir_icon.x,yoffset+16,bar_over.w-8,(GXColor)WHITE))
|
||||||
{
|
{
|
||||||
|
/* text scrolling */
|
||||||
filelist[i].filename_offset ++;
|
filelist[i].filename_offset ++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -422,7 +434,7 @@ int FileSelector(unsigned char *buffer)
|
|||||||
{
|
{
|
||||||
/* go up one directory or quit */
|
/* go up one directory or quit */
|
||||||
go_up = 1;
|
go_up = 1;
|
||||||
selection = useFAT ? 0 : 1;
|
selection = 0;
|
||||||
}
|
}
|
||||||
#ifdef HW_RVL
|
#ifdef HW_RVL
|
||||||
else
|
else
|
||||||
|
@ -205,23 +205,23 @@ static gui_item items_ctrls[13] =
|
|||||||
{NULL,NULL,"","",304, 0, 24, 0},
|
{NULL,NULL,"","",304, 0, 24, 0},
|
||||||
{NULL,NULL,"","", 0, 0, 0, 0},
|
{NULL,NULL,"","", 0, 0, 0, 0},
|
||||||
{NULL,NULL,"","", 0, 0, 0, 0},
|
{NULL,NULL,"","", 0, 0, 0, 0},
|
||||||
{NULL,Ctrl_config_png,"Keys\nConfig","Configure Controller Keys",530,306,32,32}
|
{NULL,Ctrl_config_png,"Keys\nConfig","Reconfigure Controller Keys",530,306,32,32}
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef HW_RVL
|
#ifdef HW_RVL
|
||||||
static gui_item items_load[4] =
|
static gui_item items_load[4] =
|
||||||
{
|
{
|
||||||
{NULL,Load_recent_png,"","Load recent files", 276,120,88,96},
|
{NULL,Load_recent_png,"","Load recent ROM files (USB/SD)" ,276,120,88,96},
|
||||||
{NULL,Load_sd_png ,"","Load ROM files from SDCARD", 110,266,88,96},
|
{NULL,Load_sd_png ,"","Load ROM files from SDCARD" ,110,266,88,96},
|
||||||
{NULL,Load_usb_png ,"","Load ROM files from USB device",276,266,88,96},
|
{NULL,Load_usb_png ,"","Load ROM files from USB device" ,276,266,88,96},
|
||||||
{NULL,Load_dvd_png ,"","Load ROM files from DVD", 442,266,88,96}
|
{NULL,Load_dvd_png ,"","Load ROM files from DVD" ,442,266,88,96}
|
||||||
};
|
};
|
||||||
#else
|
#else
|
||||||
static gui_item items_load[3] =
|
static gui_item items_load[3] =
|
||||||
{
|
{
|
||||||
{NULL,Load_recent_png,"","Load recent files", 110,198,88,96},
|
{NULL,Load_recent_png,"","Load recent ROM files (SD)" ,110,198,88,96},
|
||||||
{NULL,Load_sd_png ,"","Load ROM files from SDCARD",276,198,88,96},
|
{NULL,Load_sd_png ,"","Load ROM files from SDCARD" ,276,198,88,96},
|
||||||
{NULL,Load_dvd_png ,"","Load ROM files from DVD", 442,198,88,96}
|
{NULL,Load_dvd_png ,"","Load ROM files from DVD" ,442,198,88,96}
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -448,7 +448,7 @@ static gui_menu menu_video =
|
|||||||
/* Sound Options menu */
|
/* Sound Options menu */
|
||||||
static gui_menu menu_audio =
|
static gui_menu menu_audio =
|
||||||
{
|
{
|
||||||
"Sound Settings",
|
"Audio Settings",
|
||||||
0,0,
|
0,0,
|
||||||
5,4,6,
|
5,4,6,
|
||||||
items_audio,
|
items_audio,
|
||||||
@ -1629,11 +1629,10 @@ static void soundmenu ()
|
|||||||
else sprintf (items[4].text, "HQ YM2612: SINC");
|
else sprintf (items[4].text, "HQ YM2612: SINC");
|
||||||
|
|
||||||
GUI_InitMenu(m);
|
GUI_InitMenu(m);
|
||||||
GUI_SlideMenuTitle(m,strlen("Sound "));
|
GUI_SlideMenuTitle(m,strlen("Audio "));
|
||||||
|
|
||||||
while (quit == 0)
|
while (quit == 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
ret = GUI_RunMenu(m);
|
ret = GUI_RunMenu(m);
|
||||||
|
|
||||||
switch (ret)
|
switch (ret)
|
||||||
@ -1817,7 +1816,6 @@ static void videomenu ()
|
|||||||
|
|
||||||
while (quit == 0)
|
while (quit == 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
ret = GUI_RunMenu(m);
|
ret = GUI_RunMenu(m);
|
||||||
|
|
||||||
switch (ret)
|
switch (ret)
|
||||||
@ -2013,8 +2011,8 @@ static void ctrlmenu(void)
|
|||||||
{
|
{
|
||||||
{
|
{
|
||||||
/* Gamepad options */
|
/* Gamepad options */
|
||||||
{NULL,Ctrl_pad3b_png,"Pad\nType","Use 6-buttons or 3-buttons Pad",528,180,44,28},
|
{NULL,Ctrl_pad3b_png,"Pad\nType","Use 3-buttons Pad",528,180,44,28},
|
||||||
{NULL,Ctrl_pad6b_png,"Pad\nType","Use 6-buttons or 3-buttons Pad",528,180,44,28}
|
{NULL,Ctrl_pad6b_png,"Pad\nType","Use 6-buttons Pad",528,180,44,28}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
/* Mouse options */
|
/* Mouse options */
|
||||||
@ -2284,6 +2282,9 @@ static void ctrlmenu(void)
|
|||||||
GUI_DrawMenuFX(m, 20, 0);
|
GUI_DrawMenuFX(m, 20, 0);
|
||||||
|
|
||||||
/* update title */
|
/* update title */
|
||||||
|
if (j_cart && (player > 1))
|
||||||
|
sprintf(m->title,"Controller Settings (Player %d) (J-CART)",player+1);
|
||||||
|
else
|
||||||
sprintf(m->title,"Controller Settings (Player %d)",player+1);
|
sprintf(m->title,"Controller Settings (Player %d)",player+1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -2301,20 +2302,40 @@ static void ctrlmenu(void)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 11: /* input controller selection */
|
case 11: /* input controller selection */
|
||||||
#ifdef HW_RVL
|
|
||||||
if (config.input[player].device > 0)
|
/* no input device */
|
||||||
|
if (config.input[player].device < 0)
|
||||||
{
|
{
|
||||||
/* WPAD controllers, use next port */
|
/* use gamecube pad */
|
||||||
config.input[player].port ++;
|
config.input[player].device = 0;
|
||||||
|
config.input[player].port = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Otherwise, use next device */
|
/* use next port */
|
||||||
config.input[player].device ++;
|
config.input[player].port ++;
|
||||||
if (config.input[player].device == 1)
|
|
||||||
config.input[player].port = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* autodetect connected gamepads */
|
||||||
|
if (config.input[player].device == 0)
|
||||||
|
{
|
||||||
|
while ((config.input[player].port<4) && !(PAD_ScanPads() & (1<<config.input[player].port)))
|
||||||
|
{
|
||||||
|
/* try next port */
|
||||||
|
config.input[player].port ++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config.input[player].port >= 4)
|
||||||
|
{
|
||||||
|
config.input[player].port = 0;
|
||||||
|
#ifdef HW_RVL
|
||||||
|
/* no gamecube pad found, try wiimote+nunchuks */
|
||||||
|
config.input[player].device = 1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HW_RVL
|
||||||
/* autodetect connected wiimotes (without nunchuk) */
|
/* autodetect connected wiimotes (without nunchuk) */
|
||||||
if (config.input[player].device == 1)
|
if (config.input[player].device == 1)
|
||||||
{
|
{
|
||||||
@ -2333,8 +2354,7 @@ static void ctrlmenu(void)
|
|||||||
{
|
{
|
||||||
exp = 4;
|
exp = 4;
|
||||||
WPAD_Probe(config.input[player].port,&exp);
|
WPAD_Probe(config.input[player].port,&exp);
|
||||||
if (exp == WPAD_EXP_NUNCHUK)
|
if (exp == WPAD_EXP_NUNCHUK) exp = 4;
|
||||||
exp = 4;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2397,7 +2417,7 @@ static void ctrlmenu(void)
|
|||||||
if (config.input[player].port >= 4)
|
if (config.input[player].port >= 4)
|
||||||
{
|
{
|
||||||
/* no classic controller found, use default gamecube pad */
|
/* no classic controller found, use default gamecube pad */
|
||||||
config.input[player].port = player % 4;
|
config.input[player].port = 0;
|
||||||
config.input[player].device = 0;
|
config.input[player].device = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2408,10 +2428,6 @@ static void ctrlmenu(void)
|
|||||||
config.input[player].padtype = DEVICE_3BUTTON;
|
config.input[player].padtype = DEVICE_3BUTTON;
|
||||||
memcpy(&m->items[10],&items[*special],sizeof(gui_item));
|
memcpy(&m->items[10],&items[*special],sizeof(gui_item));
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
/* use default gamecube pad */
|
|
||||||
config.input[player].device = 0;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* update menu items */
|
/* update menu items */
|
||||||
@ -2419,8 +2435,7 @@ static void ctrlmenu(void)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 12: /* Controller Keys Configuration */
|
case 12: /* Controller Keys Configuration */
|
||||||
if (config.input[player].device != -1)
|
if (config.input[player].device < 0) break;
|
||||||
{
|
|
||||||
if (config.input[player].padtype == DEVICE_6BUTTON)
|
if (config.input[player].padtype == DEVICE_6BUTTON)
|
||||||
{
|
{
|
||||||
/* 6-buttons gamepad */
|
/* 6-buttons gamepad */
|
||||||
@ -2439,13 +2454,12 @@ static void ctrlmenu(void)
|
|||||||
/* 3-Buttons gamepad, mouse, lightgun */
|
/* 3-Buttons gamepad, mouse, lightgun */
|
||||||
gx_input_Config(config.input[player].port, config.input[player].device, 4);
|
gx_input_Config(config.input[player].port, config.input[player].device, 4);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* remove duplicate assigned inputs */
|
/* remove duplicate assigned inputs before leaving */
|
||||||
for (i=0; i<8; i++)
|
for (i=0; i<8; i++)
|
||||||
{
|
{
|
||||||
if ((i!=player) && (config.input[i].device == config.input[player].device) && (config.input[i].port == config.input[player].port))
|
if ((i!=player) && (config.input[i].device == config.input[player].device) && (config.input[i].port == config.input[player].port))
|
||||||
|
Loading…
Reference in New Issue
Block a user