cheevos - added hardcore mode, in this mode savestates and rewind are disabled.

This commit is contained in:
David Skywalker 2016-03-14 11:51:54 +01:00
parent 8f867427db
commit 91361f26de
11 changed files with 80 additions and 1 deletions

View File

@ -27,6 +27,7 @@
#include "net_http_special.h"
#include "configuration.h"
#include "performance.h"
#include "msg_hash.h"
#include "runloop.h"
#include "libretro_version_1.h"
@ -239,6 +240,7 @@ static cheevos_locals_t cheevos_locals =
{0},
};
static bool last_hardcore_mode_value = false;
/* forward declaration */
@ -1369,7 +1371,7 @@ static void cheevos_unlocker(void *payload)
snprintf(
request, sizeof(request),
"http://retroachievements.org/dorequest.php?r=awardachievement&u=%s&t=%s&a=%u&h=%d",
settings->cheevos.username, cheevos_locals.token, cheevo_id, 0
settings->cheevos.username, cheevos_locals.token, cheevo_id, settings->cheevos.hardcore_mode_enable
);
request[sizeof(request) - 1] = 0;
@ -2197,6 +2199,8 @@ bool cheevos_ctl(enum cheevos_ctl_state state, void *data)
case CHEEVOS_CTL_LOAD:
if (!cheevos_load((const void*)data))
return false;
last_hardcore_mode_value = settings->cheevos.hardcore_mode_enable;
break;
case CHEEVOS_CTL_UNLOAD:
if (!cheevos_locals.loaded)
@ -2216,6 +2220,18 @@ bool cheevos_ctl(enum cheevos_ctl_state state, void *data)
if (!settings->cheevos.enable)
return false;
/* just a quick check on hardcore last value to avoid cheat the score */
if (last_hardcore_mode_value == false
&& last_hardcore_mode_value != settings->cheevos.hardcore_mode_enable)
{
last_hardcore_mode_value = settings->cheevos.hardcore_mode_enable;
/* send reset core cmd to avoid any user savestate previusly loaded */
event_cmd_ctl(EVENT_CMD_RESET, NULL);
RARCH_LOG("%s\n", msg_hash_to_str(MSG_CHEEVOS_HARDCORE_MODE_ENABLE));
runloop_msg_queue_push(msg_hash_to_str(MSG_CHEEVOS_HARDCORE_MODE_ENABLE), 0, 3 * 60, true);
}
cheevos_test_cheevo_set(&cheevos_locals.core);
if (settings->cheevos.test_unofficial)

View File

@ -465,6 +465,11 @@ static void event_load_auto_state(void)
return;
#endif
#ifdef HAVE_CHEEVOS
if (settings->cheevos.hardcore_mode_enable)
return;
#endif
if (!settings->savestate_auto_load)
return;
@ -628,6 +633,11 @@ static bool event_save_auto_state(void)
if (content_ctl(CONTENT_CTL_DOES_NOT_NEED_CONTENT, NULL))
return false;
#ifdef HAVE_CHEEVOS
if (settings->cheevos.hardcore_mode_enable)
return false;
#endif
fill_pathname_noext(savestate_name_auto, global->name.savestate,
".auto", sizeof(savestate_name_auto));
@ -1029,6 +1039,12 @@ bool event_cmd_ctl(enum event_command cmd, void *data)
if (netplay_driver_ctl(RARCH_NETPLAY_CTL_IS_DATA_INITED, NULL))
return false;
#endif
#ifdef HAVE_CHEEVOS
if (settings->cheevos.hardcore_mode_enable)
return false;
#endif
event_main_state(cmd);
break;
case EVENT_CMD_RESIZE_WINDOWED_SCALE:
@ -1070,6 +1086,11 @@ bool event_cmd_ctl(enum event_command cmd, void *data)
core_ctl(CORE_CTL_RETRO_RESET, NULL);
break;
case EVENT_CMD_SAVE_STATE:
#ifdef HAVE_CHEEVOS
if (settings->cheevos.hardcore_mode_enable)
return false;
#endif
if (settings->savestate_auto_index)
settings->state_slot++;
@ -1139,9 +1160,18 @@ bool event_cmd_ctl(enum event_command cmd, void *data)
if (netplay_driver_ctl(RARCH_NETPLAY_CTL_IS_DATA_INITED, NULL))
return false;
#endif
#ifdef HAVE_CHEEVOS
if (settings->cheevos.hardcore_mode_enable)
return false;
#endif
state_manager_event_deinit();
break;
case EVENT_CMD_REWIND_INIT:
#ifdef HAVE_CHEEVOS
if (settings->cheevos.hardcore_mode_enable)
return false;
#endif
#ifdef HAVE_NETPLAY
if (!netplay_driver_ctl(RARCH_NETPLAY_CTL_IS_DATA_INITED, NULL))
#endif

View File

@ -630,6 +630,7 @@ static void config_set_defaults(void)
#ifdef HAVE_CHEEVOS
settings->cheevos.enable = false;
settings->cheevos.test_unofficial = false;
settings->cheevos.hardcore_mode_enable = false;
*settings->cheevos.username = '\0';
*settings->cheevos.password = '\0';
#endif
@ -1512,6 +1513,7 @@ static bool config_load_file(const char *path, bool set_defaults)
#ifdef HAVE_CHEEVOS
CONFIG_GET_BOOL_BASE(conf, settings, cheevos.enable, "cheevos_enable");
CONFIG_GET_BOOL_BASE(conf, settings, cheevos.test_unofficial, "cheevos_test_unofficial");
CONFIG_GET_BOOL_BASE(conf, settings, cheevos.hardcore_mode_enable, "cheevos_hardcore_mode_enable");
config_get_array(conf, "cheevos_username", settings->cheevos.username, sizeof(settings->cheevos.username));
config_get_array(conf, "cheevos_password", settings->cheevos.password, sizeof(settings->cheevos.password));
#endif
@ -2668,6 +2670,7 @@ bool config_save_file(const char *path)
#ifdef HAVE_CHEEVOS
config_set_bool(conf, "cheevos_enable", settings->cheevos.enable);
config_set_bool(conf, "cheevos_test_unofficial", settings->cheevos.test_unofficial);
config_set_bool(conf, "cheevos_hardcore_mode_enable", settings->cheevos.hardcore_mode_enable);
config_set_string(conf, "cheevos_username", settings->cheevos.username);
config_set_string(conf, "cheevos_password", settings->cheevos.password);
#endif

View File

@ -302,6 +302,7 @@ typedef struct settings
{
bool enable;
bool test_unofficial;
bool hardcore_mode_enable;
char username[32];
char password[32];
} cheevos;

View File

@ -194,6 +194,8 @@ const char *msg_hash_to_str_es(uint32_t hash)
return "Rebobinando.";
case MSG_REWIND_REACHED_END:
return "Se ha llegado al final del búfer de rebobinado.";
case MSG_CHEEVOS_HARDCORE_MODE_ENABLE:
return "Modo Extremo Activado: guardar estado y reboninar se han desactivado.";
case MSG_TASK_FAILED:
return "Error";
case MSG_DOWNLOADING:

View File

@ -181,6 +181,8 @@ const char *msg_hash_to_str_us(uint32_t hash)
return "Rewinding.";
case MSG_REWIND_REACHED_END:
return "Reached end of rewind buffer.";
case MSG_CHEEVOS_HARDCORE_MODE_ENABLE:
return "Hardcore Mode Enabled: savestate & rewind were disabled.";
case MSG_TASK_FAILED:
return "Failed";
case MSG_DOWNLOADING:

View File

@ -54,6 +54,8 @@ const char *menu_hash_to_str_es(uint32_t hash)
return "Guardar configuración actual";
case MENU_LABEL_VALUE_STATE_SLOT:
return "Ranura de guardado";
case MENU_LABEL_VALUE_CHEEVOS_HARDCORE_MODE_ENABLE:
return "Modo Extremo";
case MENU_LABEL_VALUE_ACCOUNTS_CHEEVOS_SETTINGS:
return "Cuenta Cheevos";
case MENU_LABEL_VALUE_ACCOUNTS_CHEEVOS_USERNAME:

View File

@ -32,6 +32,8 @@ static const char *menu_hash_to_str_us_label(uint32_t hash)
return "menu_throttle_framerate";
case MENU_LABEL_START_CORE:
return "start_core";
case MENU_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE:
return "cheevos_hardcore_mode_enable";
case MENU_LABEL_CHEEVOS_TEST_UNOFFICIAL:
return "cheevos_test_unofficial";
case MENU_LABEL_CHEEVOS_ENABLE:
@ -738,6 +740,8 @@ const char *menu_hash_to_str_us(uint32_t hash)
return "Menu Linear Filter";
case MENU_LABEL_VALUE_MENU_THROTTLE_FRAMERATE:
return "Throttle Menu Framerate";
case MENU_LABEL_VALUE_CHEEVOS_HARDCORE_MODE_ENABLE:
return "Hardcore Mode";
case MENU_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL:
return "Test unofficial";
case MENU_LABEL_VALUE_CHEEVOS_SETTINGS:

View File

@ -36,6 +36,9 @@ extern "C" {
#define MENU_LABEL_UI_COMPANION_ENABLE 0xb2d7a20cU
#define MENU_LABEL_VALUE_UI_COMPANION_ENABLE 0xee4933ceU
#define MENU_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE 0xf71b3b16U
#define MENU_LABEL_VALUE_CHEEVOS_HARDCORE_MODE_ENABLE 0xa4d69592U
#define MENU_LABEL_CHEEVOS_TEST_UNOFFICIAL 0xa1ae28f0U
#define MENU_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL 0x0698e665U

View File

@ -6243,6 +6243,20 @@ static bool setting_append_list_cheevos_options(
general_write_handler,
general_read_handler);
CONFIG_BOOL(
list, list_info,
&settings->cheevos.hardcore_mode_enable,
menu_hash_to_str(MENU_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE),
menu_hash_to_str(MENU_LABEL_VALUE_CHEEVOS_HARDCORE_MODE_ENABLE),
false,
menu_hash_to_str(MENU_VALUE_OFF),
menu_hash_to_str(MENU_VALUE_ON),
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
END_SUB_GROUP(list, list_info, parent_group);
END_GROUP(list, list_info, parent_group);
#endif

View File

@ -86,6 +86,8 @@
#define MSG_REWIND_REACHED_END 0x4f1aab8fU
#define MSG_FAILED_TO_START_MOVIE_RECORD 0x61221776U
#define MSG_CHEEVOS_HARDCORE_MODE_ENABLE 0x0d212ca9U
#define MSG_STATE_SLOT 0x27b67f67U
#define MSG_STARTING_MOVIE_RECORD_TO 0x6a7e0d50U
#define MSG_FAILED_TO_START_MOVIE_RECORD 0x61221776U