src/industry_cmd.cpp
changeset 7338 00527f7584a2
parent 7337 b6b77a60343a
child 7390 16fb97ba8133
--- a/src/industry_cmd.cpp	Fri Jul 27 02:41:29 2007 +0000
+++ b/src/industry_cmd.cpp	Fri Jul 27 03:07:05 2007 +0000
@@ -1612,7 +1612,12 @@
 	return CreateNewIndustryHelper(tile, type, DC_EXEC, indspec, RandomRange(indspec->num_table));
 }
 
-static const byte _numof_industry_table[5][11] = {
+enum {
+	NB_NUMOFINDUSTRY = 11,
+	NB_DIFFICULTY_LEVEL = 5,
+};
+
+static const byte _numof_industry_table[NB_DIFFICULTY_LEVEL][NB_NUMOFINDUSTRY] = {
 	/* difficulty settings for number of industries */
 	{0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0},   //none
 	{0, 1, 1, 1, 1, 1, 1, 1,  1,  1,  1},   //very low
@@ -1627,7 +1632,9 @@
  * @param amount of industries that need to be built */
 static void PlaceInitialIndustry(IndustryType type, int amount)
 {
-	int num = _numof_industry_table[_opt.diff.number_industries][amount];
+	/* We need to bypass the amount given in parameter if it exceeds the maximum dimension of the
+	 * _numof_industry_table.  newgrf can specify a big amount */
+	int num = (amount > NB_NUMOFINDUSTRY) ? amount : _numof_industry_table[_opt.diff.number_industries][amount];
 	const IndustrySpec *ind_spc = GetIndustrySpec(type);
 
 	/* These are always placed next to the coastline, so we scale by the perimeter instead. */
@@ -1676,7 +1683,7 @@
 				/* once the chance of appearance is determind, it have to be scaled by
 				 * the difficulty level. The "chance" in question is more an index into
 				 * the _numof_industry_table,in fact */
-				int num = (chance < 11) ? chance : _numof_industry_table[_opt.diff.number_industries][chance];
+				int num = (chance > NB_NUMOFINDUSTRY) ? chance : _numof_industry_table[_opt.diff.number_industries][chance];
 
 				/* These are always placed next to the coastline, so we scale by the perimeter instead. */
 				num = (ind_spc->check_proc == CHECK_REFINERY || ind_spc->check_proc == CHECK_OIL_RIG) ? ScaleByMapSize1D(num) : ScaleByMapSize(num);