mirror of
https://github.com/libretro/RetroArch
synced 2025-02-26 15:39:55 +00:00
cheevos - added hardcore mode, in this mode savestates and rewind are disabled.
This commit is contained in:
parent
8f867427db
commit
91361f26de
18
cheevos.c
18
cheevos.c
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -302,6 +302,7 @@ typedef struct settings
|
||||
{
|
||||
bool enable;
|
||||
bool test_unofficial;
|
||||
bool hardcore_mode_enable;
|
||||
char username[32];
|
||||
char password[32];
|
||||
} cheevos;
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user