Mercurial > hg > openttd
changeset 9615:5657445ea7ee draft
(svn r13671) -Cleanup: Zeros for sell.
author | frosch <frosch@openttd.org> |
---|---|
date | Tue, 01 Jul 2008 18:56:40 +0000 |
parents | 93067a7ac4de |
children | e183bfef543f |
files | src/tgp.cpp |
diffstat | 1 files changed, 18 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/tgp.cpp +++ b/src/tgp.cpp @@ -205,17 +205,21 @@ /** Walk through all items of _height_map.h */ #define FOR_ALL_TILES_IN_HEIGHT(h) for (h = _height_map.h; h < &_height_map.h[_height_map.total_size]; h++) +/** Maximum index into array of noise amplitudes */ +static const int TGP_FREQUENCY_MAX = 6; + /** Noise amplitudes (multiplied by 1024) * - indexed by "smoothness setting" and log2(frequency) */ -static const amplitude_t _amplitudes_by_smoothness_and_frequency[4][12] = { +static const amplitude_t _amplitudes_by_smoothness_and_frequency[4][TGP_FREQUENCY_MAX + 1] = { + /* lowest frequncy.... ...highest (every corner) */ /* Very smooth */ - {16000, 5600, 1968, 688, 240, 16, 16, 0, 0, 0, 0, 0}, + {16000, 5600, 1968, 688, 240, 16, 16}, /* Smooth */ - {16000, 16000, 6448, 3200, 1024, 128, 16, 0, 0, 0, 0, 0}, + {16000, 16000, 6448, 3200, 1024, 128, 16}, /* Rough */ - {16000, 19200, 12800, 8000, 3200, 256, 64, 0, 0, 0, 0, 0}, + {16000, 19200, 12800, 8000, 3200, 256, 64}, /* Very Rough */ - {24000, 16000, 19200, 16000, 8000, 512, 320, 0, 0, 0, 0, 0}, + {24000, 16000, 19200, 16000, 8000, 512, 320}, }; /** Desired water percentage (100% == 1024) - indexed by _settings_game.difficulty.quantity_sea_lakes */ @@ -364,18 +368,22 @@ uint iteration_round = 0; amplitude_t amplitude; bool continue_iteration; - uint log_size_min, log_frequency_min; + int log_size_min, log_frequency_min; int log_frequency; - /* Find first power of two that fits */ - for (log_size_min = 6; (1U << log_size_min) < size_min; log_size_min++) { } - log_frequency_min = log_size_min - 6; + /* Find first power of two that fits, so that later log_frequency == TGP_FREQUENCY_MAX in the last iteration */ + for (log_size_min = TGP_FREQUENCY_MAX; (1U << log_size_min) < size_min; log_size_min++) { } + log_frequency_min = log_size_min - TGP_FREQUENCY_MAX; + + /* Zero must be part of the iteration, else initialization will fail. */ + assert(log_frequency_min >= 0); /* Keep increasing the frequency until we reach the step size equal to one tile */ do { log_frequency = iteration_round - log_frequency_min; if (log_frequency >= 0) { /* Apply noise for the next frequency */ + assert(log_frequency <= TGP_FREQUENCY_MAX); amplitude = _amplitudes_by_smoothness_and_frequency[_settings_game.game_creation.tgen_smoothness][log_frequency]; } else { /* Amplitude for the low frequencies on big maps is 0, i.e. initialise with zero height */ @@ -384,6 +392,7 @@ continue_iteration = ApplyNoise(iteration_round, amplitude); iteration_round++; } while (continue_iteration); + assert(log_frequency == TGP_FREQUENCY_MAX); } /** Returns min, max and average height from height map */