diff --git a/library/Core.cpp b/library/Core.cpp index 0dd02f12d..380f37965 100644 --- a/library/Core.cpp +++ b/library/Core.cpp @@ -138,6 +138,7 @@ struct Core::Private std::thread hotkeythread; bool last_autosave_request{false}; + bool was_load_save{false}; }; struct CommandDepthCounter @@ -1967,18 +1968,17 @@ void Core::doUpdate(color_ostream &out, bool first_update) vs_changed = true; } + bool is_load_save = + strict_virtual_cast(screen) || + strict_virtual_cast(screen) || + strict_virtual_cast(screen); + // save data (do this before updating last_world_data_ptr and triggering unload events) if ((df::global::ui->main.autosave_request && !d->last_autosave_request) || - (vs_changed && strict_virtual_cast(screen))) + (is_load_save && !d->was_load_save && strict_virtual_cast(screen))) { doSaveData(out); } - d->last_autosave_request = df::global::ui->main.autosave_request; - - bool is_load_save = - strict_virtual_cast(screen) || - strict_virtual_cast(screen) || - strict_virtual_cast(screen); // detect if the game was loaded or unloaded in the meantime void *new_wdata = NULL; @@ -2036,6 +2036,9 @@ void Core::doUpdate(color_ostream &out, bool first_update) // Execute per-frame handlers onUpdate(out); + d->last_autosave_request = df::global::ui->main.autosave_request; + d->was_load_save = is_load_save; + out << std::flush; }