mirror of
https://github.com/libretro/RetroArch
synced 2025-02-27 00:40:20 +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 "net_http_special.h"
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include "performance.h"
|
#include "performance.h"
|
||||||
|
#include "msg_hash.h"
|
||||||
#include "runloop.h"
|
#include "runloop.h"
|
||||||
#include "libretro_version_1.h"
|
#include "libretro_version_1.h"
|
||||||
|
|
||||||
@ -239,6 +240,7 @@ static cheevos_locals_t cheevos_locals =
|
|||||||
{0},
|
{0},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static bool last_hardcore_mode_value = false;
|
||||||
|
|
||||||
/* forward declaration */
|
/* forward declaration */
|
||||||
|
|
||||||
@ -1369,7 +1371,7 @@ static void cheevos_unlocker(void *payload)
|
|||||||
snprintf(
|
snprintf(
|
||||||
request, sizeof(request),
|
request, sizeof(request),
|
||||||
"http://retroachievements.org/dorequest.php?r=awardachievement&u=%s&t=%s&a=%u&h=%d",
|
"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;
|
request[sizeof(request) - 1] = 0;
|
||||||
@ -2197,6 +2199,8 @@ bool cheevos_ctl(enum cheevos_ctl_state state, void *data)
|
|||||||
case CHEEVOS_CTL_LOAD:
|
case CHEEVOS_CTL_LOAD:
|
||||||
if (!cheevos_load((const void*)data))
|
if (!cheevos_load((const void*)data))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
last_hardcore_mode_value = settings->cheevos.hardcore_mode_enable;
|
||||||
break;
|
break;
|
||||||
case CHEEVOS_CTL_UNLOAD:
|
case CHEEVOS_CTL_UNLOAD:
|
||||||
if (!cheevos_locals.loaded)
|
if (!cheevos_locals.loaded)
|
||||||
@ -2216,6 +2220,18 @@ bool cheevos_ctl(enum cheevos_ctl_state state, void *data)
|
|||||||
if (!settings->cheevos.enable)
|
if (!settings->cheevos.enable)
|
||||||
return false;
|
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);
|
cheevos_test_cheevo_set(&cheevos_locals.core);
|
||||||
|
|
||||||
if (settings->cheevos.test_unofficial)
|
if (settings->cheevos.test_unofficial)
|
||||||
|
@ -465,6 +465,11 @@ static void event_load_auto_state(void)
|
|||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CHEEVOS
|
||||||
|
if (settings->cheevos.hardcore_mode_enable)
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!settings->savestate_auto_load)
|
if (!settings->savestate_auto_load)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -628,6 +633,11 @@ static bool event_save_auto_state(void)
|
|||||||
if (content_ctl(CONTENT_CTL_DOES_NOT_NEED_CONTENT, NULL))
|
if (content_ctl(CONTENT_CTL_DOES_NOT_NEED_CONTENT, NULL))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
#ifdef HAVE_CHEEVOS
|
||||||
|
if (settings->cheevos.hardcore_mode_enable)
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
|
||||||
fill_pathname_noext(savestate_name_auto, global->name.savestate,
|
fill_pathname_noext(savestate_name_auto, global->name.savestate,
|
||||||
".auto", sizeof(savestate_name_auto));
|
".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))
|
if (netplay_driver_ctl(RARCH_NETPLAY_CTL_IS_DATA_INITED, NULL))
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CHEEVOS
|
||||||
|
if (settings->cheevos.hardcore_mode_enable)
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
|
||||||
event_main_state(cmd);
|
event_main_state(cmd);
|
||||||
break;
|
break;
|
||||||
case EVENT_CMD_RESIZE_WINDOWED_SCALE:
|
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);
|
core_ctl(CORE_CTL_RETRO_RESET, NULL);
|
||||||
break;
|
break;
|
||||||
case EVENT_CMD_SAVE_STATE:
|
case EVENT_CMD_SAVE_STATE:
|
||||||
|
#ifdef HAVE_CHEEVOS
|
||||||
|
if (settings->cheevos.hardcore_mode_enable)
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (settings->savestate_auto_index)
|
if (settings->savestate_auto_index)
|
||||||
settings->state_slot++;
|
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))
|
if (netplay_driver_ctl(RARCH_NETPLAY_CTL_IS_DATA_INITED, NULL))
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_CHEEVOS
|
||||||
|
if (settings->cheevos.hardcore_mode_enable)
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
|
||||||
state_manager_event_deinit();
|
state_manager_event_deinit();
|
||||||
break;
|
break;
|
||||||
case EVENT_CMD_REWIND_INIT:
|
case EVENT_CMD_REWIND_INIT:
|
||||||
|
#ifdef HAVE_CHEEVOS
|
||||||
|
if (settings->cheevos.hardcore_mode_enable)
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
#ifdef HAVE_NETPLAY
|
#ifdef HAVE_NETPLAY
|
||||||
if (!netplay_driver_ctl(RARCH_NETPLAY_CTL_IS_DATA_INITED, NULL))
|
if (!netplay_driver_ctl(RARCH_NETPLAY_CTL_IS_DATA_INITED, NULL))
|
||||||
#endif
|
#endif
|
||||||
|
@ -630,6 +630,7 @@ static void config_set_defaults(void)
|
|||||||
#ifdef HAVE_CHEEVOS
|
#ifdef HAVE_CHEEVOS
|
||||||
settings->cheevos.enable = false;
|
settings->cheevos.enable = false;
|
||||||
settings->cheevos.test_unofficial = false;
|
settings->cheevos.test_unofficial = false;
|
||||||
|
settings->cheevos.hardcore_mode_enable = false;
|
||||||
*settings->cheevos.username = '\0';
|
*settings->cheevos.username = '\0';
|
||||||
*settings->cheevos.password = '\0';
|
*settings->cheevos.password = '\0';
|
||||||
#endif
|
#endif
|
||||||
@ -1512,6 +1513,7 @@ static bool config_load_file(const char *path, bool set_defaults)
|
|||||||
#ifdef HAVE_CHEEVOS
|
#ifdef HAVE_CHEEVOS
|
||||||
CONFIG_GET_BOOL_BASE(conf, settings, cheevos.enable, "cheevos_enable");
|
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.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_username", settings->cheevos.username, sizeof(settings->cheevos.username));
|
||||||
config_get_array(conf, "cheevos_password", settings->cheevos.password, sizeof(settings->cheevos.password));
|
config_get_array(conf, "cheevos_password", settings->cheevos.password, sizeof(settings->cheevos.password));
|
||||||
#endif
|
#endif
|
||||||
@ -2668,6 +2670,7 @@ bool config_save_file(const char *path)
|
|||||||
#ifdef HAVE_CHEEVOS
|
#ifdef HAVE_CHEEVOS
|
||||||
config_set_bool(conf, "cheevos_enable", settings->cheevos.enable);
|
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_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_username", settings->cheevos.username);
|
||||||
config_set_string(conf, "cheevos_password", settings->cheevos.password);
|
config_set_string(conf, "cheevos_password", settings->cheevos.password);
|
||||||
#endif
|
#endif
|
||||||
|
@ -302,6 +302,7 @@ typedef struct settings
|
|||||||
{
|
{
|
||||||
bool enable;
|
bool enable;
|
||||||
bool test_unofficial;
|
bool test_unofficial;
|
||||||
|
bool hardcore_mode_enable;
|
||||||
char username[32];
|
char username[32];
|
||||||
char password[32];
|
char password[32];
|
||||||
} cheevos;
|
} cheevos;
|
||||||
|
@ -194,6 +194,8 @@ const char *msg_hash_to_str_es(uint32_t hash)
|
|||||||
return "Rebobinando.";
|
return "Rebobinando.";
|
||||||
case MSG_REWIND_REACHED_END:
|
case MSG_REWIND_REACHED_END:
|
||||||
return "Se ha llegado al final del búfer de rebobinado.";
|
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:
|
case MSG_TASK_FAILED:
|
||||||
return "Error";
|
return "Error";
|
||||||
case MSG_DOWNLOADING:
|
case MSG_DOWNLOADING:
|
||||||
|
@ -181,6 +181,8 @@ const char *msg_hash_to_str_us(uint32_t hash)
|
|||||||
return "Rewinding.";
|
return "Rewinding.";
|
||||||
case MSG_REWIND_REACHED_END:
|
case MSG_REWIND_REACHED_END:
|
||||||
return "Reached end of rewind buffer.";
|
return "Reached end of rewind buffer.";
|
||||||
|
case MSG_CHEEVOS_HARDCORE_MODE_ENABLE:
|
||||||
|
return "Hardcore Mode Enabled: savestate & rewind were disabled.";
|
||||||
case MSG_TASK_FAILED:
|
case MSG_TASK_FAILED:
|
||||||
return "Failed";
|
return "Failed";
|
||||||
case MSG_DOWNLOADING:
|
case MSG_DOWNLOADING:
|
||||||
|
@ -54,6 +54,8 @@ const char *menu_hash_to_str_es(uint32_t hash)
|
|||||||
return "Guardar configuración actual";
|
return "Guardar configuración actual";
|
||||||
case MENU_LABEL_VALUE_STATE_SLOT:
|
case MENU_LABEL_VALUE_STATE_SLOT:
|
||||||
return "Ranura de guardado";
|
return "Ranura de guardado";
|
||||||
|
case MENU_LABEL_VALUE_CHEEVOS_HARDCORE_MODE_ENABLE:
|
||||||
|
return "Modo Extremo";
|
||||||
case MENU_LABEL_VALUE_ACCOUNTS_CHEEVOS_SETTINGS:
|
case MENU_LABEL_VALUE_ACCOUNTS_CHEEVOS_SETTINGS:
|
||||||
return "Cuenta Cheevos";
|
return "Cuenta Cheevos";
|
||||||
case MENU_LABEL_VALUE_ACCOUNTS_CHEEVOS_USERNAME:
|
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";
|
return "menu_throttle_framerate";
|
||||||
case MENU_LABEL_START_CORE:
|
case MENU_LABEL_START_CORE:
|
||||||
return "start_core";
|
return "start_core";
|
||||||
|
case MENU_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE:
|
||||||
|
return "cheevos_hardcore_mode_enable";
|
||||||
case MENU_LABEL_CHEEVOS_TEST_UNOFFICIAL:
|
case MENU_LABEL_CHEEVOS_TEST_UNOFFICIAL:
|
||||||
return "cheevos_test_unofficial";
|
return "cheevos_test_unofficial";
|
||||||
case MENU_LABEL_CHEEVOS_ENABLE:
|
case MENU_LABEL_CHEEVOS_ENABLE:
|
||||||
@ -738,6 +740,8 @@ const char *menu_hash_to_str_us(uint32_t hash)
|
|||||||
return "Menu Linear Filter";
|
return "Menu Linear Filter";
|
||||||
case MENU_LABEL_VALUE_MENU_THROTTLE_FRAMERATE:
|
case MENU_LABEL_VALUE_MENU_THROTTLE_FRAMERATE:
|
||||||
return "Throttle Menu Framerate";
|
return "Throttle Menu Framerate";
|
||||||
|
case MENU_LABEL_VALUE_CHEEVOS_HARDCORE_MODE_ENABLE:
|
||||||
|
return "Hardcore Mode";
|
||||||
case MENU_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL:
|
case MENU_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL:
|
||||||
return "Test unofficial";
|
return "Test unofficial";
|
||||||
case MENU_LABEL_VALUE_CHEEVOS_SETTINGS:
|
case MENU_LABEL_VALUE_CHEEVOS_SETTINGS:
|
||||||
|
@ -36,6 +36,9 @@ extern "C" {
|
|||||||
#define MENU_LABEL_UI_COMPANION_ENABLE 0xb2d7a20cU
|
#define MENU_LABEL_UI_COMPANION_ENABLE 0xb2d7a20cU
|
||||||
#define MENU_LABEL_VALUE_UI_COMPANION_ENABLE 0xee4933ceU
|
#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_CHEEVOS_TEST_UNOFFICIAL 0xa1ae28f0U
|
||||||
#define MENU_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL 0x0698e665U
|
#define MENU_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL 0x0698e665U
|
||||||
|
|
||||||
|
@ -6243,6 +6243,20 @@ static bool setting_append_list_cheevos_options(
|
|||||||
general_write_handler,
|
general_write_handler,
|
||||||
general_read_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_SUB_GROUP(list, list_info, parent_group);
|
||||||
END_GROUP(list, list_info, parent_group);
|
END_GROUP(list, list_info, parent_group);
|
||||||
#endif
|
#endif
|
||||||
|
@ -86,6 +86,8 @@
|
|||||||
#define MSG_REWIND_REACHED_END 0x4f1aab8fU
|
#define MSG_REWIND_REACHED_END 0x4f1aab8fU
|
||||||
#define MSG_FAILED_TO_START_MOVIE_RECORD 0x61221776U
|
#define MSG_FAILED_TO_START_MOVIE_RECORD 0x61221776U
|
||||||
|
|
||||||
|
#define MSG_CHEEVOS_HARDCORE_MODE_ENABLE 0x0d212ca9U
|
||||||
|
|
||||||
#define MSG_STATE_SLOT 0x27b67f67U
|
#define MSG_STATE_SLOT 0x27b67f67U
|
||||||
#define MSG_STARTING_MOVIE_RECORD_TO 0x6a7e0d50U
|
#define MSG_STARTING_MOVIE_RECORD_TO 0x6a7e0d50U
|
||||||
#define MSG_FAILED_TO_START_MOVIE_RECORD 0x61221776U
|
#define MSG_FAILED_TO_START_MOVIE_RECORD 0x61221776U
|
||||||
|
Loading…
x
Reference in New Issue
Block a user