Skip to content

Commit

Permalink
standalone: update gun support
Browse files Browse the repository at this point in the history
  • Loading branch information
notaz committed Dec 14, 2023
1 parent 0c2126b commit fb640dd
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 14 deletions.
4 changes: 4 additions & 0 deletions frontend/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,10 @@ void do_emu_action(void)
SysMessage("GPU_open returned %d", ret);
}
return;
case SACTION_ANALOG_TOGGLE:
ret = padToggleAnalog(0);
snprintf(hud_msg, sizeof(hud_msg), "ANALOG %s", ret ? "ON" : "OFF");
break;
#endif
default:
return;
Expand Down
1 change: 1 addition & 0 deletions frontend/main.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ enum sched_action {
SACTION_GUN_A,
SACTION_GUN_B,
SACTION_GUN_TRIGGER2,
SACTION_ANALOG_TOGGLE,
};

#define SACTION_GUN_MASK (0x0f << SACTION_GUN_TRIGGER)
Expand Down
12 changes: 8 additions & 4 deletions frontend/menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -316,14 +316,16 @@ static void menu_sync_config(void)

switch (in_type_sel1) {
case 1: in_type[0] = PSE_PAD_TYPE_ANALOGPAD; break;
case 2: in_type[0] = PSE_PAD_TYPE_NEGCON; break;
case 3: in_type[0] = PSE_PAD_TYPE_NONE; break;
case 2: in_type[0] = PSE_PAD_TYPE_GUNCON; break;
case 3: in_type[0] = PSE_PAD_TYPE_GUN; break;
case 4: in_type[0] = PSE_PAD_TYPE_NONE; break;
default: in_type[0] = PSE_PAD_TYPE_STANDARD;
}
switch (in_type_sel2) {
case 1: in_type[1] = PSE_PAD_TYPE_ANALOGPAD; break;
case 2: in_type[1] = PSE_PAD_TYPE_NEGCON; break;
case 3: in_type[1] = PSE_PAD_TYPE_NONE; break;
case 2: in_type[1] = PSE_PAD_TYPE_GUNCON; break;
case 3: in_type[1] = PSE_PAD_TYPE_GUN; break;
case 4: in_type[1] = PSE_PAD_TYPE_NONE; break;
default: in_type[1] = PSE_PAD_TYPE_STANDARD;
}
if (in_evdev_allow_abs_only != allow_abs_only_old) {
Expand Down Expand Up @@ -901,6 +903,7 @@ me_bind_action emuctrl_actions[] =
{ "Volume Up ", 1 << SACTION_VOLUME_UP },
{ "Volume Down ", 1 << SACTION_VOLUME_DOWN },
#endif
{ "Analog toggle ", 1 << SACTION_ANALOG_TOGGLE },
{ NULL, 0 }
};

Expand Down Expand Up @@ -1217,6 +1220,7 @@ static const char *men_in_type_sel[] = {
"Standard (SCPH-1080)",
"Analog (SCPH-1150)",
"GunCon",
"Konami Gun",
"None",
NULL
};
Expand Down
4 changes: 2 additions & 2 deletions frontend/pl_gun_ts.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ int pl_gun_ts_update_raw(struct tsdev *ts, int *x, int *y, int *p)
gun_y = (sy - ts_offs_y) * ts_multiplier_y >> 10;
limit(gun_x, 0, 1023);
limit(gun_y, 0, 1023);
if (sp && !(g_opts & OPT_TSGUN_NOTRIGGER))
if (sp)
gun_in |= 1;
else
gun_in &= ~1;
Expand All @@ -78,7 +78,7 @@ void pl_gun_ts_update(struct tsdev *ts, int *x, int *y, int *in)

*x = gun_x;
*y = gun_y;
*in = gun_in | in_state_gun;
*in = gun_in;
}

void pl_set_gun_rect(int x, int y, int w, int h)
Expand Down
46 changes: 39 additions & 7 deletions frontend/plugin_lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
#include "../libpcsxcore/new_dynarec/new_dynarec.h"
#include "../libpcsxcore/psxmem_map.h"
#include "../libpcsxcore/gpu.h"
#include "../libpcsxcore/r3000a.h"

#define HUD_HEIGHT 10

Expand All @@ -46,7 +47,6 @@ int in_adev[2] = { -1, -1 }, in_adev_axis[2][2] = {{ 0, 1 }, { 0, 1 }};
int in_adev_is_nublike[2];
unsigned short in_keystate[8];
int in_mouse[8][2];
int in_state_gun;
int in_enable_vibration;
void *tsdev;
void *pl_vout_buf;
Expand Down Expand Up @@ -613,12 +613,14 @@ static void update_input(void)
{
int actions[IN_BINDTYPE_COUNT] = { 0, };
unsigned int emu_act;
int in_state_gun;
int i;

in_update(actions);
if (in_type[0] == PSE_PAD_TYPE_ANALOGJOY || in_type[0] == PSE_PAD_TYPE_ANALOGPAD)
update_analogs();
emu_act = actions[IN_BINDTYPE_EMU];
in_state_gun = (emu_act & SACTION_GUN_MASK) >> SACTION_GUN_TRIGGER;
in_state_gun = emu_act & SACTION_GUN_MASK;

emu_act &= ~SACTION_GUN_MASK;
if (emu_act) {
Expand All @@ -629,19 +631,49 @@ static void update_input(void)
}
emu_set_action(emu_act);

in_keystate[0] = actions[IN_BINDTYPE_PLAYER12];
in_keystate[0] = actions[IN_BINDTYPE_PLAYER12] & 0xffff;
in_keystate[1] = (actions[IN_BINDTYPE_PLAYER12] >> 16) & 0xffff;

// fixme
//if (in_type[0] == PSE_PAD_TYPE_GUNCON && tsdev)
// pl_gun_ts_update(tsdev, xn, yn, in);
// in_analog_left[0][0] = xn
if (tsdev) for (i = 0; i < 2; i++) {
int in = 0, x = 0, y = 0, trigger;;
if (in_type[i] != PSE_PAD_TYPE_GUN
&& in_type[i] != PSE_PAD_TYPE_GUNCON)
continue;
trigger = in_type[i] == PSE_PAD_TYPE_GUN
? (1 << DKEY_SQUARE) : (1 << DKEY_CIRCLE);

pl_gun_ts_update(tsdev, &x, &y, &in);
in_analog_left[i][0] = 65536;
in_analog_left[i][1] = 65536;
if (in && !(in_state_gun & (1 << SACTION_GUN_TRIGGER2))) {
in_analog_left[i][0] = x;
in_analog_left[i][1] = y;
if (!(g_opts & OPT_TSGUN_NOTRIGGER))
in_state_gun |= (1 << SACTION_GUN_TRIGGER);
}
in_keystate[i] = 0;
if (in_state_gun & ((1 << SACTION_GUN_TRIGGER)
| (1 << SACTION_GUN_TRIGGER2)))
in_keystate[i] |= trigger;
if (in_state_gun & (1 << SACTION_GUN_A))
in_keystate[i] |= (1 << DKEY_START);
if (in_state_gun & (1 << SACTION_GUN_B))
in_keystate[i] |= (1 << DKEY_CROSS);
}
}
#else /* MAEMO */
extern void update_input(void);
#endif

void pl_gun_byte2(int port, unsigned char byte)
{
if (!tsdev || in_type[port] != PSE_PAD_TYPE_GUN || !(byte & 0x10))
return;
if (in_analog_left[port][0] == 65536)
return;

psxScheduleIrq10(4, in_analog_left[port][0] * 1629 / 1024,
in_analog_left[port][1] * psx_h / 1024);
}

#define MAX_LAG_FRAMES 3
Expand Down
1 change: 0 additions & 1 deletion frontend/plugin_lib.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ enum {
DKEY_CROSS,
DKEY_SQUARE,
};
extern int in_state_gun;
extern int in_type[8];
extern int multitap1;
extern int multitap2;
Expand Down

0 comments on commit fb640dd

Please sign in to comment.