summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralberth <alberth@openttd.org>2014-08-13 19:31:45 +0000
committeralberth <alberth@openttd.org>2014-08-13 19:31:45 +0000
commit87dd209784d44a60805ef071423f8de9052cec97 (patch)
tree657b28d304dd7a1010419b1d865b1d190eb67e3d
parentaaf44731fb60114fd1670a36d17c0c6d14e592a4 (diff)
downloadopenttd-87dd209784d44a60805ef071423f8de9052cec97.tar.xz
(svn r26729) -Feature: Warn about missing industries after generating a map.
-rw-r--r--src/industry_cmd.cpp21
-rw-r--r--src/industry_type.h2
-rw-r--r--src/lang/english.txt3
-rw-r--r--src/openttd.cpp1
4 files changed, 27 insertions, 0 deletions
diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp
index 9deb04363..34bf1ffcb 100644
--- a/src/industry_cmd.cpp
+++ b/src/industry_cmd.cpp
@@ -40,6 +40,7 @@
#include "core/backup_type.hpp"
#include "object_base.h"
#include "game/game.hpp"
+#include "error.h"
#include "table/strings.h"
#include "table/industry_land.h"
@@ -2741,6 +2742,26 @@ void InitializeIndustries()
_industry_builder.Reset();
}
+/** Verify whether the generated industries are complete, and warn the user if not. */
+void CheckIndustries()
+{
+ int count = 0;
+ for (IndustryType it = 0; it < NUM_INDUSTRYTYPES; it++) {
+ if (Industry::GetIndustryTypeCount(it) > 0) continue; // Types of existing industries can be skipped.
+
+ bool force_at_least_one;
+ uint32 chance = GetScaledIndustryGenerationProbability(it, &force_at_least_one);
+ if (chance == 0 || !force_at_least_one) continue; // Types that are not available can be skipped.
+
+ const IndustrySpec *is = GetIndustrySpec(it);
+ SetDParam(0, is->name);
+ ShowErrorMessage(STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES, STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION, WL_WARNING);
+
+ count++;
+ if (count >= 3) break; // Don't swamp the user with errors.
+ }
+}
+
/**
* Is an industry with the spec a raw industry?
* @return true if it should be handled as a raw industry
diff --git a/src/industry_type.h b/src/industry_type.h
index 11828c530..12525fbbf 100644
--- a/src/industry_type.h
+++ b/src/industry_type.h
@@ -37,4 +37,6 @@ static const IndustryGfx INVALID_INDUSTRYTILE = NUM_INDUSTRYTILES; ///< one a
static const int INDUSTRY_COMPLETED = 3; ///< final stage of industry construction.
+void CheckIndustries();
+
#endif /* INDUSTRY_TYPE_H */
diff --git a/src/lang/english.txt b/src/lang/english.txt
index 6977f6b8a..6baf4558a 100644
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -4143,6 +4143,9 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... fore
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... can only be built above the snow-line
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... can only be built below the snow-line
+STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}There were no suitable places for '{STRING}' industries
+STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Change the map generation parameters to get a better map
+
# Station construction related errors
STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Can't build railway station here...
STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Can't build bus station...
diff --git a/src/openttd.cpp b/src/openttd.cpp
index f289545ec..c430cf67e 100644
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -958,6 +958,7 @@ static void MakeNewGameDone()
if (_settings_client.gui.pause_on_newgame) DoCommandP(0, PM_PAUSED_NORMAL, 1, CMD_PAUSE);
CheckEngines();
+ CheckIndustries();
MarkWholeScreenDirty();
}