diff options
author | belugas <belugas@openttd.org> | 2007-07-27 03:07:05 +0000 |
---|---|---|
committer | belugas <belugas@openttd.org> | 2007-07-27 03:07:05 +0000 |
commit | 3f7a7261d6b1b8d5b94d9fe8a6aa5652e3303b58 (patch) | |
tree | 29d9ba5e03d9596e95009c9a2d59381ee8bef5dd | |
parent | 8ad3a6f8fdf6d0a67e060121463aae10a6f0c3a5 (diff) | |
download | openttd-3f7a7261d6b1b8d5b94d9fe8a6aa5652e3303b58.tar.xz |
(svn r10701) -Codechange: Make sure to not use an out of bound index when the index is specified by a grf file. It has a different meaning then.
-rw-r--r-- | src/industry_cmd.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 25228fe95..417d04c91 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1612,7 +1612,12 @@ Industry *CreateNewIndustry(TileIndex tile, IndustryType type) 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 @@ static const byte _numof_industry_table[5][11] = { * @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 @@ void GenerateIndustries() /* 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); |