input: fix default config restore, option for paddle/spinner button allocation from core.

This commit is contained in:
sorgelig
2020-03-08 23:52:42 +08:00
parent 1dfd580722
commit 1ba97325e4
4 changed files with 35 additions and 34 deletions

View File

@@ -56,7 +56,7 @@ static void read_buttons()
substrcpy(joy_names[n], p, n);
if (!joy_names[n][0]) break;
printf("joy_bname[%d] = %s\n", n, joy_names[n]);
printf("joy_name[%d] = %s\n", n, joy_names[n]);
memcpy(joy_nnames[n], joy_names[n], sizeof(joy_nnames[0]));
char *sstr = strchr(joy_nnames[n], '(');
@@ -101,15 +101,6 @@ static void read_buttons()
}
}
static int has_X_button()
{
for (int i = 0; i < joy_count; i++)
{
if (!strcasecmp(joy_nnames[i], "X")) return 1;
}
return 0;
}
static int is_fire(char* name)
{
if (!strncasecmp(name, "fire", 4) || !strncasecmp(name, "button", 6))
@@ -161,31 +152,32 @@ void map_joystick(uint32_t *map, uint32_t *mmap)
if (!strcmp(joy_names[i], "-")) continue;
int idx = i+DPAD_COUNT;
char *btn_name = defaults ? joy_pnames[n] : joy_nnames[n];
char btn_name[32];
strcpy(btn_name, defaults ? joy_pnames[n] : joy_nnames[n]);
char *p = strchr(btn_name, '|');
if (p) *p = 0;
int mapped = 1;
if(!strcasecmp(btn_name, "A")
|| !strcasecmp(btn_name, "Jump")
|| is_fire(btn_name) == 1
|| !strcasecmp(btn_name, "Button I"))
|| is_fire(btn_name) == 1)
{
map[idx] = mmap[SYS_BTN_A];
strcat(mapinfo, "\n[A]");
}
else if(!strcasecmp(btn_name, "B")
|| is_fire(btn_name) == 2
|| !strcasecmp(btn_name, "Button II"))
|| is_fire(btn_name) == 2)
{
map[idx] = mmap[SYS_BTN_B];
strcat(mapinfo, "\n[B]");
}
else if(!strcasecmp(btn_name, "X")
|| (!strcasecmp(btn_name, "C") && !has_X_button())
|| is_fire(btn_name) == 3
|| !strcasecmp(btn_name, "Button III"))
|| !strcasecmp(btn_name, "C")
|| is_fire(btn_name) == 3)
{
map[idx] = mmap[SYS_BTN_X];
strcat(mapinfo, "\n[X]");
@@ -193,8 +185,7 @@ void map_joystick(uint32_t *map, uint32_t *mmap)
else if(!strcasecmp(btn_name, "Y")
|| !strcasecmp(btn_name, "D")
|| is_fire(btn_name) == 4
|| !strcasecmp(btn_name, "Button IV"))
|| is_fire(btn_name) == 4)
{
map[idx] = mmap[SYS_BTN_Y];
strcat(mapinfo, "\n[Y]");
@@ -202,9 +193,7 @@ void map_joystick(uint32_t *map, uint32_t *mmap)
// Genesis C and Z and TG16 V and VI
else if(!strcasecmp(btn_name, "R")
|| !strcasecmp(btn_name, "C")
|| !strcasecmp(btn_name, "RT")
|| !strcasecmp(btn_name, "Button V")
|| !strcasecmp(btn_name, "Coin"))
{
map[idx] = mmap[SYS_BTN_R];
@@ -212,9 +201,7 @@ void map_joystick(uint32_t *map, uint32_t *mmap)
}
else if(!strcasecmp(btn_name, "L")
|| !strcasecmp(btn_name, "Z")
|| !strcasecmp(btn_name, "LT")
|| !strcasecmp(btn_name, "Button VI"))
|| !strcasecmp(btn_name, "LT"))
{
map[idx] = mmap[SYS_BTN_L];
strcat(mapinfo, "\n[L]");
@@ -255,6 +242,19 @@ void map_joystick(uint32_t *map, uint32_t *mmap)
}
}
int map_paddle_btn()
{
read_buttons();
for (int i = 0, n = 0; i < joy_count; i++)
{
if (!strcmp(joy_names[i], "-")) continue;
char *p = strchr(defaults ? joy_pnames[n] : joy_nnames[n], '|');
if (p && !strcasecmp(p, "|P")) return i + DPAD_COUNT;
n++;
}
return DPAD_COUNT;
}
static const char* get_std_name(uint16_t code, uint32_t *mmap)
{
if (code == mmap[SYS_BTN_A ]) return "[A]";