diff options
author | frosch <frosch@openttd.org> | 2010-04-16 21:21:54 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2010-04-16 21:21:54 +0000 |
commit | 2141ca23687b538ad5c537fc468b61bfc3b01bc2 (patch) | |
tree | e3283f1151ac31f0a09f2469d2063748ff415a93 /src | |
parent | d1c3234918fce4aae945eded5ecf0ed527bb000b (diff) | |
download | openttd-2141ca23687b538ad5c537fc468b61bfc3b01bc2.tar.xz |
(svn r19643) -Fix (r19120): Industry generation failed for large maps and lots of industry types.
Diffstat (limited to 'src')
-rw-r--r-- | src/core/random_func.cpp | 1 | ||||
-rw-r--r-- | src/core/random_func.hpp | 3 | ||||
-rw-r--r-- | src/industry_cmd.cpp | 3 |
3 files changed, 5 insertions, 2 deletions
diff --git a/src/core/random_func.cpp b/src/core/random_func.cpp index dfdf9c869..588bcb7b2 100644 --- a/src/core/random_func.cpp +++ b/src/core/random_func.cpp @@ -57,6 +57,7 @@ uint32 DoRandom(int line, const char *file) uint DoRandomRange(uint max, int line, const char *file) { + assert(max <= UINT16_MAX); return GB(DoRandom(line, file), 0, 16) * max >> 16; } #endif /* RANDOM_DEBUG */ diff --git a/src/core/random_func.hpp b/src/core/random_func.hpp index d0e12ba92..03d49d718 100644 --- a/src/core/random_func.hpp +++ b/src/core/random_func.hpp @@ -99,8 +99,9 @@ void SetRandomSeed(uint32 seed); return _random.Next(); } - static FORCEINLINE uint32 RandomRange(uint16 max) + static FORCEINLINE uint32 RandomRange(uint max) { + assert(max <= UINT16_MAX); return _random.Next(max); } #endif diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index f25ada8c3..2b1170aba 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1923,7 +1923,8 @@ void GenerateIndustries() /* Add the remaining industries according to their probabilities */ for (uint i = 0; i < total_amount; i++) { - uint32 r = RandomRange(total_prob); + /* RandomRange() can only deal with 16 bit, which is not enough here. */ + uint32 r = ((uint64)Random() * (uint64)total_prob) >> 32; IndustryType it = 0; while (it < NUM_INDUSTRYTYPES && r >= industry_probs[it]) { r -= industry_probs[it]; |