diff --git a/src/saveload/misc_sl.cpp b/src/saveload/misc_sl.cpp index d0c04daa05..f50cab48b5 100644 --- a/src/saveload/misc_sl.cpp +++ b/src/saveload/misc_sl.cpp @@ -37,11 +37,18 @@ ZoomLevel _saved_scrollpos_zoom; void SaveViewportBeforeSaveGame() { - const Window *w = GetMainWindow(); - - _saved_scrollpos_x = w->viewport->scrollpos_x; - _saved_scrollpos_y = w->viewport->scrollpos_y; - _saved_scrollpos_zoom = w->viewport->zoom; + /* Don't use GetMainWindow() in case the window does not exist. */ + const Window *w = FindWindowById(WC_MAIN_WINDOW, 0); + if (w == nullptr || w->viewport == nullptr) { + /* Ensure saved position is clearly invalid. */ + _saved_scrollpos_x = INT_MAX; + _saved_scrollpos_y = INT_MAX; + _saved_scrollpos_zoom = ZOOM_LVL_END; + } else { + _saved_scrollpos_x = w->viewport->scrollpos_x; + _saved_scrollpos_y = w->viewport->scrollpos_y; + _saved_scrollpos_zoom = w->viewport->zoom; + } } void ResetViewportAfterLoadGame()