Skip to content

Commit 38e7a0e

Browse files
authored
Add a core option for opposite directions (#85)
1 parent 1275bd7 commit 38e7a0e

2 files changed

Lines changed: 40 additions & 0 deletions

File tree

libretro.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,23 @@ static const uint32 AnaglyphPreset_Colors[][2] =
8080
};
8181

8282
#define STICK_DEADZONE 0x4000
83+
#define LEFT_DPAD_LEFT 0x0080
84+
#define LEFT_DPAD_RIGHT 0x0040
85+
#define LEFT_DPAD_UP 0x0200
86+
#define LEFT_DPAD_DOWN 0x0100
8387
#define RIGHT_DPAD_LEFT 0x1000
8488
#define RIGHT_DPAD_RIGHT 0x0020
8589
#define RIGHT_DPAD_UP 0x0010
8690
#define RIGHT_DPAD_DOWN 0x2000
8791

92+
// D-Pads opposite directions
93+
#define LEFT_DPAD_LEFT_RIGHT (LEFT_DPAD_LEFT | LEFT_DPAD_RIGHT)
94+
#define LEFT_DPAD_UP_DOWN (LEFT_DPAD_UP | LEFT_DPAD_DOWN)
95+
#define RIGHT_DPAD_LEFT_RIGHT (RIGHT_DPAD_LEFT | RIGHT_DPAD_RIGHT)
96+
#define RIGHT_DPAD_UP_DOWN (RIGHT_DPAD_UP | RIGHT_DPAD_DOWN)
97+
98+
static bool opposite_directions = false;
99+
88100
static uint32 VB3DMode;
89101

90102
static Blip_Buffer sbuf[2];
@@ -2213,6 +2225,11 @@ static void check_variables(void)
22132225
setting_vb_right_analog_to_digital = false;
22142226
}
22152227

2228+
var.key = "vb_opposite_directions";
2229+
2230+
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
2231+
opposite_directions = !strcmp(var.value, "enabled");
2232+
22162233
var.key = "vb_cpu_emulation";
22172234

22182235
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
@@ -2409,6 +2426,18 @@ static void update_input(void)
24092426
input_buf[j] |= (analog_y < 0) ^ !setting_vb_right_invert_y ? RIGHT_DPAD_DOWN : RIGHT_DPAD_UP;
24102427
}
24112428

2429+
if (!opposite_directions)
2430+
{
2431+
if ((input_buf[j] & LEFT_DPAD_LEFT_RIGHT) == LEFT_DPAD_LEFT_RIGHT)
2432+
input_buf[j] &= ~LEFT_DPAD_LEFT_RIGHT;
2433+
if ((input_buf[j] & LEFT_DPAD_UP_DOWN) == LEFT_DPAD_UP_DOWN)
2434+
input_buf[j] &= ~LEFT_DPAD_UP_DOWN;
2435+
if ((input_buf[j] & RIGHT_DPAD_LEFT_RIGHT) == RIGHT_DPAD_LEFT_RIGHT)
2436+
input_buf[j] &= ~RIGHT_DPAD_LEFT_RIGHT;
2437+
if ((input_buf[j] & RIGHT_DPAD_UP_DOWN) == RIGHT_DPAD_UP_DOWN)
2438+
input_buf[j] &= ~RIGHT_DPAD_UP_DOWN;
2439+
}
2440+
24122441
#ifdef MSB_FIRST
24132442
union {
24142443
uint8_t b[2];

libretro_core_options.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,17 @@ struct retro_core_option_definition option_defs_us[] = {
183183
},
184184
"disabled",
185185
},
186+
{
187+
"vb_opposite_directions",
188+
"Allow Opposite Directions",
189+
"Allow pressing up and down or left and right directions at the same time. This may cause glitches.",
190+
{
191+
{ "disabled", NULL },
192+
{ "enabled", NULL },
193+
{ NULL, NULL },
194+
},
195+
"disabled",
196+
},
186197
{
187198
"vb_cpu_emulation",
188199
"CPU emulation (Restart)",

0 commit comments

Comments
 (0)