Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

reinitialize rewind buffer after loading game with achievements #15934

Merged
merged 2 commits into from
Nov 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions cheevos/cheevos.c
Original file line number Diff line number Diff line change
Expand Up @@ -586,6 +586,8 @@ static void rcheevos_progress_hide(rcheevos_locals_t* locals)
gfx_widget_set_achievement_progress(NULL, NULL);
}

#endif

static void rcheevos_client_log_message(const char* message, const rc_client_t* client)
{
CHEEVOS_LOG(RCHEEVOS_TAG "%s\n", message);
Expand Down Expand Up @@ -668,8 +670,6 @@ static void rcheevos_client_event_handler(const rc_client_event_t* event, rc_cli
}
}

#endif

int rcheevos_get_richpresence(char* s, size_t len)
{
if (!rcheevos_is_player_active())
Expand Down Expand Up @@ -2433,13 +2433,13 @@ static void rcheevos_client_load_game_callback(int result,
#ifdef HAVE_THREADS
if (!task_is_on_main_thread())
{
/* Have to "schedule" this. CMD_EVENT_REWIND_INIT should
/* Have to "schedule" this. CMD_EVENT_REWIND_REINIT should
* only be called on the main thread */
rcheevos_locals.queued_command = CMD_EVENT_REWIND_INIT;
rcheevos_locals.queued_command = CMD_EVENT_REWIND_REINIT;
}
else
#endif
command_event(CMD_EVENT_REWIND_INIT, NULL);
command_event(CMD_EVENT_REWIND_REINIT, NULL);
}
#endif
}
Expand Down Expand Up @@ -3144,6 +3144,7 @@ bool rcheevos_load(const void *data)
{
rcheevos_enforce_hardcore_settings();
}
#ifndef HAVE_RC_CLIENT
else
{
#if HAVE_REWIND
Expand All @@ -3167,6 +3168,7 @@ bool rcheevos_load(const void *data)
}
#endif
}
#endif

/* provide hooks for reading files */
rc_hash_reset_cdreader_hooks();
Expand Down
2 changes: 2 additions & 0 deletions command.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@ enum event_command
CMD_EVENT_REWIND_DEINIT,
/* Initializes rewind. */
CMD_EVENT_REWIND_INIT,
/* Reinitializes rewind (primarily if the state size changes). */
CMD_EVENT_REWIND_REINIT,
/* Toggles rewind. */
CMD_EVENT_REWIND_TOGGLE,
/* Initializes autosave. */
Expand Down
11 changes: 11 additions & 0 deletions retroarch.c
Original file line number Diff line number Diff line change
Expand Up @@ -2995,6 +2995,17 @@ bool command_event(enum event_command cmd, void *data)
}
}
}
#endif
break;
case CMD_EVENT_REWIND_REINIT:
#ifdef HAVE_REWIND
/* to reinitialize the the rewind state manager, we have to recreate it.
* the easiest way to do that is a full deinit followed by an init. */
if (runloop_st->rewind_st.state != NULL)
{
command_event(CMD_EVENT_REWIND_DEINIT, NULL);
command_event(CMD_EVENT_REWIND_INIT, NULL);
}
#endif
break;
case CMD_EVENT_REWIND_TOGGLE:
Expand Down