changeset 18979:28e825d4710c draft

(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.
author frosch <frosch@openttd.org>
date Sun, 22 Jan 2012 13:54:02 +0000
parents 8c191e59b103
children 256497218375
files src/saveload/saveload.cpp src/saveload/signs_sl.cpp src/signs_cmd.cpp src/viewport.cpp
diffstat 4 files changed, 13 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- 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
 
--- 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 @@
 		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;
+		}
 	}
 }
 
--- a/src/signs_cmd.cpp
+++ b/src/signs_cmd.cpp
@@ -45,7 +45,7 @@
 
 	/* 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 @@
 {
 	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 @@
 			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);
--- a/src/viewport.cpp
+++ b/src/viewport.cpp
@@ -1872,8 +1872,8 @@
 	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);