changeset 11339:a41eac9012e2 draft

(svn r15689) -Fix [FS#2720]: do not crash when the generate map doesn't contain a suitable location for a town.
author rubidium <rubidium@openttd.org>
date Thu, 12 Mar 2009 15:14:22 +0000
parents 7ca8e78f1712
children 68be07dcdebb
files src/genworld.cpp src/lang/english.txt src/town_cmd.cpp
diffstat 3 files changed, 13 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/genworld.cpp
+++ b/src/genworld.cpp
@@ -141,7 +141,10 @@
 
 			/* only generate towns, tree and industries in newgame mode. */
 			if (_game_mode != GM_EDITOR) {
-				GenerateTowns(_settings_game.economy.town_layout);
+				if (!GenerateTowns(_settings_game.economy.town_layout)) {
+					HandleGeneratingWorldAbortion();
+					return;
+				}
 				GenerateIndustries();
 				GenerateUnmovables();
 				GenerateTrees();
@@ -255,7 +258,10 @@
 
 	CleanupGeneration();
 
-	_gw.thread->Exit();
+	if (_gw.thread != NULL) _gw.thread->Exit();
+
+	extern void SwitchToMode(SwitchMode new_mode);
+	SwitchToMode(_switch_mode);
 }
 
 /**
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -1197,6 +1197,7 @@
 STR_BUILD_AUTORAIL_TIP                                          :{BLACK}Build railway track using the Autorail mode
 
 STR_NO_TOWN_IN_SCENARIO                                         :{WHITE}...there is no town in this scenario
+STR_COULD_NOT_CREATE_TOWN                                       :{WHITE}Map generation aborted...{}...no suitable town locations
 
 STR_MANY_RANDOM_TOWNS                                           :{BLACK}Many random towns
 STR_RANDOM_TOWNS_TIP                                            :{BLACK}Cover the map with randomly placed towns
--- a/src/town_cmd.cpp
+++ b/src/town_cmd.cpp
@@ -1648,8 +1648,10 @@
 	/* give it a last try, but now more aggressive */
 	if (num == 0 && CreateRandomTown(10000, TS_RANDOM, false, layout) == NULL) {
 		if (GetNumTowns() == 0) {
-			/* XXX - can we handle that more gracefully? */
-			if (_game_mode != GM_EDITOR) usererror("Could not generate any town");
+			if (_game_mode != GM_EDITOR) {
+				extern StringID _switch_mode_errorstr;
+				_switch_mode_errorstr = STR_COULD_NOT_CREATE_TOWN;
+			}
 
 			return false;
 		}