diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 1eb6da59c1..eb9c38a289 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -234,8 +234,9 @@ * 168 23637 * 169 23816 * 170 23826 + * 171 23835 */ -extern const uint16 SAVEGAME_VERSION = 170; ///< Current savegame version of OpenTTD. +extern const uint16 SAVEGAME_VERSION = 171; ///< Current savegame version of OpenTTD. SavegameType _savegame_type; ///< type of savegame we are loading diff --git a/src/saveload/signs_sl.cpp b/src/saveload/signs_sl.cpp index 918f9e2139..d5ea26d65d 100644 --- a/src/saveload/signs_sl.cpp +++ b/src/saveload/signs_sl.cpp @@ -11,6 +11,7 @@ #include "../stdafx.h" #include "../signs_base.h" +#include "../fios.h" #include "saveload.h" @@ -55,6 +56,11 @@ static void Load_SIGN() if (IsSavegameVersionBefore(6, 1) || (IsSavegameVersionBefore(83) && si->owner == INVALID_OWNER)) { si->owner = OWNER_NONE; } + + /* Signs placed in scenario editor shall now be OWNER_DEITY */ + if (IsSavegameVersionBefore(171) && si->owner == OWNER_NONE && _saveload_mode == SLD_LOAD_SCENARIO) { + si->owner = OWNER_DEITY; + } } } diff --git a/src/signs_cmd.cpp b/src/signs_cmd.cpp index 033ddf123e..3109d1ef03 100644 --- a/src/signs_cmd.cpp +++ b/src/signs_cmd.cpp @@ -45,7 +45,7 @@ CommandCost CmdPlaceSign(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 /* When we execute, really make the sign */ if (flags & DC_EXEC) { - Sign *si = new Sign(_current_company); + Sign *si = new Sign(_game_mode == GM_EDITOR ? OWNER_DEITY : _current_company); int x = TileX(tile) * TILE_SIZE; int y = TileY(tile) * TILE_SIZE; @@ -78,7 +78,7 @@ CommandCost CmdRenameSign(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 { Sign *si = Sign::GetIfValid(p1); if (si == NULL) return CMD_ERROR; - if (si->owner == OWNER_DEITY && _current_company != OWNER_DEITY) return CMD_ERROR; + if (si->owner == OWNER_DEITY && _current_company != OWNER_DEITY && _game_mode != GM_EDITOR) return CMD_ERROR; /* Rename the signs when empty, otherwise remove it */ if (!StrEmpty(text)) { @@ -89,7 +89,7 @@ CommandCost CmdRenameSign(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 free(si->name); /* Assign the new one */ si->name = strdup(text); - si->owner = _current_company; + if (_game_mode != GM_EDITOR) si->owner = _current_company; si->UpdateVirtCoord(); InvalidateWindowData(WC_SIGN_LIST, 0, 1); diff --git a/src/viewport.cpp b/src/viewport.cpp index 2388443d0d..2f134056f8 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1872,8 +1872,8 @@ static bool CheckClickOnSign(const ViewPort *vp, int x, int y) const Sign *si; FOR_ALL_SIGNS(si) { /* If competitor signs are hidden, don't check signs that aren't owned by local company */ - if (!HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS) && _local_company != si->owner) continue; - if (si->owner == OWNER_DEITY) continue; + if (!HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS) && _local_company != si->owner && si->owner != OWNER_DEITY) continue; + if (si->owner == OWNER_DEITY && _game_mode != GM_EDITOR) continue; if (CheckClickOnViewportSign(vp, x, y, &si->sign)) { HandleClickOnSign(si);