add support for 4 player inputs

This commit is contained in:
kub 2022-01-26 19:36:32 +00:00
parent cfb49ab909
commit 25cfdf0a34
3 changed files with 26 additions and 7 deletions

View file

@ -92,6 +92,22 @@ void config_write_keys(FILE *f)
} }
} }
kbinds = binds[IN_BIND_OFFS(k, IN_BINDTYPE_PLAYER34)];
for (i = 0; kbinds && me_ctrl_actions[i].name != NULL; i++) {
mask = me_ctrl_actions[i].mask;
if (mask & kbinds) {
strncpy(act, me_ctrl_actions[i].name, 31);
fprintf(f, "bind %s = player3 %s\n", name, mystrip(act));
kbinds &= ~mask;
}
mask = me_ctrl_actions[i].mask << 16;
if (mask & kbinds) {
strncpy(act, me_ctrl_actions[i].name, 31);
fprintf(f, "bind %s = player4 %s\n", name, mystrip(act));
kbinds &= ~mask;
}
}
kbinds = binds[IN_BIND_OFFS(k, IN_BINDTYPE_EMU)]; kbinds = binds[IN_BIND_OFFS(k, IN_BINDTYPE_EMU)];
for (i = 0; kbinds && emuctrl_actions[i].name != NULL; i++) { for (i = 0; kbinds && emuctrl_actions[i].name != NULL; i++) {
mask = emuctrl_actions[i].mask; mask = emuctrl_actions[i].mask;
@ -126,12 +142,12 @@ static int parse_bind_val(const char *val, int *type)
int player, shift = 0; int player, shift = 0;
player = atoi(val + 6) - 1; player = atoi(val + 6) - 1;
if ((unsigned int)player > 1) if ((unsigned int)player > 3)
return -1; return -1;
if (player == 1) if (player & 1)
shift = 16; shift = 16;
*type = IN_BINDTYPE_PLAYER12; *type = IN_BINDTYPE_PLAYER12 + (player >> 1);
for (i = 0; me_ctrl_actions[i].name != NULL; i++) { for (i = 0; me_ctrl_actions[i].name != NULL; i++) {
if (strncasecmp(me_ctrl_actions[i].name, val + 8, strlen(val + 8)) == 0) if (strncasecmp(me_ctrl_actions[i].name, val + 8, strlen(val + 8)) == 0)
return me_ctrl_actions[i].mask << shift; return me_ctrl_actions[i].mask << shift;

View file

@ -70,6 +70,7 @@ enum {
IN_BINDTYPE_NONE = -1, IN_BINDTYPE_NONE = -1,
IN_BINDTYPE_EMU = 0, IN_BINDTYPE_EMU = 0,
IN_BINDTYPE_PLAYER12, IN_BINDTYPE_PLAYER12,
IN_BINDTYPE_PLAYER34,
IN_BINDTYPE_COUNT IN_BINDTYPE_COUNT
}; };

10
menu.c
View file

@ -1319,9 +1319,9 @@ static char *action_binds(int player_idx, int action_mask, int dev_id)
type = IN_BINDTYPE_EMU; type = IN_BINDTYPE_EMU;
if (player_idx >= 0) { if (player_idx >= 0) {
can_combo = 0; can_combo = 0;
type = IN_BINDTYPE_PLAYER12; type = IN_BINDTYPE_PLAYER12 + (player_idx >> 1);
} }
if (player_idx == 1) if (player_idx & 1)
action_mask <<= 16; action_mask <<= 16;
if (dev_id >= 0) if (dev_id >= 0)
@ -1459,9 +1459,11 @@ static void key_config_loop(const me_bind_action *opts, int opt_cnt, int player_
dev_id = -1; // show all dev_id = -1; // show all
mask_shift = 0; mask_shift = 0;
if (player_idx == 1) if (player_idx & 1)
mask_shift = 16; mask_shift = 16;
bindtype = player_idx >= 0 ? IN_BINDTYPE_PLAYER12 : IN_BINDTYPE_EMU; bindtype = IN_BINDTYPE_EMU;
if (player_idx >= 0)
bindtype = IN_BINDTYPE_PLAYER12 + (player_idx >> 1);
for (;;) for (;;)
{ {