diff --git a/src/openrct2/Game.cpp b/src/openrct2/Game.cpp index 1348b92e2e..57429537c2 100644 --- a/src/openrct2/Game.cpp +++ b/src/openrct2/Game.cpp @@ -435,6 +435,11 @@ int32_t game_do_command_p( *ebx &= ~GAME_COMMAND_FLAG_APPLY; + // Make sure the camera position won't change if the command skips setting them. + gCommandPosition.x = LOCATION_NULL; + gCommandPosition.y = LOCATION_NULL; + gCommandPosition.z = LOCATION_NULL; + // First call for validity and price check new_game_command_table[command](eax, ebx, ecx, edx, esi, edi, ebp); cost = *ebx; diff --git a/src/openrct2/actions/GameAction.h b/src/openrct2/actions/GameAction.h index 5cecd7b41a..daeb95cbb5 100644 --- a/src/openrct2/actions/GameAction.h +++ b/src/openrct2/actions/GameAction.h @@ -69,7 +69,7 @@ public: rct_string_id ErrorTitle = STR_NONE; rct_string_id ErrorMessage = STR_NONE; std::array ErrorMessageArgs; - CoordsXYZ Position = {}; + CoordsXYZ Position = { LOCATION_NULL, LOCATION_NULL, LOCATION_NULL }; money32 Cost = 0; uint16_t ExpenditureType = 0;