Add resetting support. (About time, ey?! :D)

This commit is contained in:
Themaister 2011-03-24 20:41:28 +01:00
parent 6c85e6e702
commit 48dcd174a7
9 changed files with 30 additions and 1 deletions

View File

@ -220,6 +220,7 @@ static const struct snes_keybind snes_keybinds_1[] = {
{ SSNES_REWIND, SDLK_r, NO_BTN, AXIS_NONE },
{ SSNES_MOVIE_RECORD_TOGGLE, SDLK_o, NO_BTN, AXIS_NONE },
{ SSNES_PAUSE_TOGGLE, SDLK_p, NO_BTN, AXIS_NONE },
{ SSNES_RESET, SDLK_h, NO_BTN, AXIS_NONE },
{ -1 }
};

View File

@ -39,6 +39,7 @@ enum
SSNES_REWIND,
SSNES_MOVIE_RECORD_TOGGLE,
SSNES_PAUSE_TOGGLE,
SSNES_RESET,
};

View File

@ -54,6 +54,7 @@ void (*psnes_set_audio_sample)(snes_audio_sample_t);
void (*psnes_set_input_poll)(snes_input_poll_t);
void (*psnes_set_input_state)(snes_input_state_t);
void (*psnes_reset)(void);
void (*psnes_run)(void);
const char *(*psnes_library_id)(void) = NULL;
@ -110,6 +111,7 @@ static void load_dynamic(void)
OPT_SYM(snes_library_id);
SYM(snes_library_revision_minor);
SYM(snes_library_revision_major);
SYM(snes_reset);
SYM(snes_run);
SYM(snes_get_region);
SYM(snes_load_cartridge_normal);
@ -143,6 +145,7 @@ static void set_statics(void)
SSYM(snes_set_input_state);
SSYM(snes_library_revision_minor);
SSYM(snes_library_revision_major);
SSYM(snes_reset);
SSYM(snes_run);
SSYM(snes_get_region);
SSYM(snes_load_cartridge_normal);

View File

@ -64,6 +64,7 @@ extern unsigned (*psnes_serialize_size)(void);
extern bool (*psnes_serialize)(uint8_t*, unsigned);
extern bool (*psnes_unserialize)(const uint8_t*, unsigned);
extern void (*psnes_reset)(void);
extern void (*psnes_run)(void);
extern void (*psnes_set_cartridge_basename)(const char*);

View File

@ -42,7 +42,7 @@
#define MAX_PLAYERS 5
#define MAX_BINDS 25 // Needs to be increased every time there are new binds added.
#define MAX_BINDS 26 // Needs to be increased every time there are new binds added.
#define SSNES_NO_JOYPAD 0xFFFF
enum ssnes_shader_type

View File

@ -408,6 +408,7 @@ static const struct bind_map bind_maps[MAX_PLAYERS][MAX_BINDS - 1] = {
DECLARE_BIND(rewind, SSNES_REWIND)
DECLARE_BIND(movie_record_toggle, SSNES_MOVIE_RECORD_TOGGLE)
DECLARE_BIND(pause_toggle, SSNES_PAUSE_TOGGLE)
DECLARE_BIND(reset, SSNES_RESET)
},
{
DECLARE_BIND(player2_a, SNES_DEVICE_ID_JOYPAD_A)
@ -434,6 +435,7 @@ static const struct bind_map bind_maps[MAX_PLAYERS][MAX_BINDS - 1] = {
DECLARE_BIND(rewind, SSNES_REWIND)
DECLARE_BIND(movie_record_toggle, SSNES_MOVIE_RECORD_TOGGLE)
DECLARE_BIND(pause_toggle, SSNES_PAUSE_TOGGLE)
DECLARE_BIND(reset, SSNES_RESET)
},
{
DECLARE_BIND(player3_a, SNES_DEVICE_ID_JOYPAD_A)
@ -460,6 +462,7 @@ static const struct bind_map bind_maps[MAX_PLAYERS][MAX_BINDS - 1] = {
DECLARE_BIND(rewind, SSNES_REWIND)
DECLARE_BIND(movie_record_toggle, SSNES_MOVIE_RECORD_TOGGLE)
DECLARE_BIND(pause_toggle, SSNES_PAUSE_TOGGLE)
DECLARE_BIND(reset, SSNES_RESET)
},
{
DECLARE_BIND(player4_a, SNES_DEVICE_ID_JOYPAD_A)
@ -486,6 +489,7 @@ static const struct bind_map bind_maps[MAX_PLAYERS][MAX_BINDS - 1] = {
DECLARE_BIND(rewind, SSNES_REWIND)
DECLARE_BIND(movie_record_toggle, SSNES_MOVIE_RECORD_TOGGLE)
DECLARE_BIND(pause_toggle, SSNES_PAUSE_TOGGLE)
DECLARE_BIND(reset, SSNES_RESET)
},
{
DECLARE_BIND(player5_a, SNES_DEVICE_ID_JOYPAD_A)
@ -512,6 +516,7 @@ static const struct bind_map bind_maps[MAX_PLAYERS][MAX_BINDS - 1] = {
DECLARE_BIND(rewind, SSNES_REWIND)
DECLARE_BIND(movie_record_toggle, SSNES_MOVIE_RECORD_TOGGLE)
DECLARE_BIND(pause_toggle, SSNES_PAUSE_TOGGLE)
DECLARE_BIND(reset, SSNES_RESET)
},
};

13
ssnes.c
View File

@ -1146,10 +1146,23 @@ static void check_pause(void)
old_state = new_state;
}
static void check_reset(void)
{
if (driver.input->key_pressed(driver.input_data, SSNES_RESET))
{
SSNES_LOG("Resetting game!\n");
msg_queue_clear(g_extern.msg_queue);
msg_queue_push(g_extern.msg_queue, "Reset!", 1, 120);
psnes_reset();
init_controllers(); // bSNES since v073r01 resets controllers to JOYPAD after a reset, so just enforce it here.
}
}
static void do_state_checks(void)
{
if (!g_extern.netplay)
{
check_reset();
check_pause();
if (g_extern.is_paused)
return;

View File

@ -232,6 +232,9 @@
# Toggle between paused and non-paused state
# input_pause_toggle = p
# Reset the emulated SNES.
# input_reset = h
# Pause gameplay when window focus is lost.
# pause_nonactive = true
@ -241,3 +244,4 @@
# When being client over netplay, use keybinds for player 1.
# netplay_client_swap_input = false

View File

@ -91,6 +91,7 @@ static struct bind binds[] = {
MISC_BIND("Rewind", rewind)
MISC_BIND("Movie recording toggle", movie_record_toggle)
MISC_BIND("Pause", pause_toggle)
MISC_BIND("Reset", reset)
};
static void get_binds(config_file_t *conf, int player, int joypad)