src/tgp.cpp
changeset 9615 d532e3ba44c0
parent 9613 75ca8f0c8c78
child 10438 51bff16a04c9
--- a/src/tgp.cpp	Tue Jul 01 00:04:09 2008 +0000
+++ b/src/tgp.cpp	Tue Jul 01 18:56:40 2008 +0000
@@ -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 */