From 53a7b8741403af1f47a60bec24387d53e385df5c Mon Sep 17 00:00:00 2001 From: Yaroslav Tretyakov Date: Fri, 5 Aug 2016 15:46:19 -0600 Subject: [PATCH] Fix #4204: Client trying to get sprite 65535 Caused by a conflict between a multiplayer map download and the title loading a different map. --- src/game.c | 10 +++++++--- src/rct2/S6Importer.cpp | 5 ----- src/scenario.c | 3 +++ src/title.c | 1 + 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/game.c b/src/game.c index c942d398cd..e131ddca2f 100644 --- a/src/game.c +++ b/src/game.c @@ -806,13 +806,13 @@ bool game_load_save(const utf8 *path) SDL_RWclose(rw); if (result) { + if (network_get_mode() == NETWORK_MODE_CLIENT) { + network_close(); + } game_load_init(); if (network_get_mode() == NETWORK_MODE_SERVER) { network_send_map(); } - if (network_get_mode() == NETWORK_MODE_CLIENT) { - network_close(); - } return true; } else { // If loading the SV6 or SV4 failed, the current park state will be corrupted @@ -851,6 +851,10 @@ void game_load_init() mainWindow->saved_view_y -= mainWindow->viewport->view_height >> 1; window_invalidate(mainWindow); + if (network_get_mode() != NETWORK_MODE_CLIENT) + { + reset_sprite_spatial_index(); + } reset_all_sprite_quadrant_placements(); scenery_set_default_placement_configuration(); window_new_ride_init_vars(); diff --git a/src/rct2/S6Importer.cpp b/src/rct2/S6Importer.cpp index 1792e73b29..959f4ef7c7 100644 --- a/src/rct2/S6Importer.cpp +++ b/src/rct2/S6Importer.cpp @@ -366,11 +366,6 @@ void S6Importer::Import() throw ObjectLoadException(); } map_update_tile_pointers(); - reset_all_sprite_quadrant_placements(); - if (network_get_mode() != NETWORK_MODE_CLIENT) - { - reset_sprite_spatial_index(); - } game_convert_strings_to_utf8(); if (FixIssues) { diff --git a/src/scenario.c b/src/scenario.c index c45a44bdd9..4c2cba8b37 100644 --- a/src/scenario.c +++ b/src/scenario.c @@ -119,6 +119,9 @@ int scenario_load_and_play_from_path(const char *path) if (!scenario_load(path)) return 0; + reset_sprite_spatial_index(); + reset_all_sprite_quadrant_placements(); + int len = strnlen(path, MAX_PATH) + 1; safe_strcpy(_scenarioPath, path, len); if (len - 1 == MAX_PATH) diff --git a/src/title.c b/src/title.c index 67488463b9..8e813af596 100644 --- a/src/title.c +++ b/src/title.c @@ -209,6 +209,7 @@ static int title_load_park(const char *path) } window_invalidate(w); + reset_sprite_spatial_index(); reset_all_sprite_quadrant_placements(); window_new_ride_init_vars(); if (_strcmpi(path_get_extension(path), ".sv6") != 0)