summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2012-01-22 13:54:02 +0000
committerfrosch <frosch@openttd.org>2012-01-22 13:54:02 +0000
commit5bf1710a28021f7eef8dcc91cbfe08dd1ad0c215 (patch)
treecfeedeaa0ef1f8efa0fd2442fec3ac9f591db3b2
parentb9192ac432bf915d3020c6d23e6368903b805061 (diff)
downloadopenttd-5bf1710a28021f7eef8dcc91cbfe08dd1ad0c215.tar.xz
(svn r23835) -Change [FS#4999]: Make signs placed in scenario editor belong to the GS. That way they are always shown in game and are not editable.
-rw-r--r--src/saveload/saveload.cpp3
-rw-r--r--src/saveload/signs_sl.cpp6
-rw-r--r--src/signs_cmd.cpp6
-rw-r--r--src/viewport.cpp4
4 files changed, 13 insertions, 6 deletions
diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp
index 1eb6da59c..eb9c38a28 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 918f9e213..d5ea26d65 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 033ddf123..3109d1ef0 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 2388443d0..2f134056f 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);