mirror of https://github.com/OpenTTD/OpenTTD
(svn r18850) -Fix [FS#3540]: don't allow screen redraw when the landscape contains broken slopes
parent
75395dc8ce
commit
3850b5912f
|
@ -1250,6 +1250,7 @@ static void _SetGeneratingWorldProgress(gwp_class cls, uint progress, uint total
|
||||||
if (total == 0) {
|
if (total == 0) {
|
||||||
assert(_tp.cls == _generation_class_table[cls]);
|
assert(_tp.cls == _generation_class_table[cls]);
|
||||||
_tp.current += progress;
|
_tp.current += progress;
|
||||||
|
assert(_tp.current <= _tp.total);
|
||||||
} else {
|
} else {
|
||||||
_tp.cls = _generation_class_table[cls];
|
_tp.cls = _generation_class_table[cls];
|
||||||
_tp.current = progress;
|
_tp.current = progress;
|
||||||
|
|
|
@ -860,11 +860,11 @@ void GenerateLandscape(byte mode)
|
||||||
static const int gwp_desert_amount = 4 + 8;
|
static const int gwp_desert_amount = 4 + 8;
|
||||||
|
|
||||||
if (mode == GW_HEIGHTMAP) {
|
if (mode == GW_HEIGHTMAP) {
|
||||||
SetGeneratingWorldProgress(GWP_LANDSCAPE, (_settings_game.game_creation.landscape == LT_TROPIC) ? 1 + gwp_desert_amount : 1);
|
SetGeneratingWorldProgress(GWP_LANDSCAPE, (_settings_game.game_creation.landscape == LT_TROPIC) ? 3 + gwp_desert_amount : 3);
|
||||||
LoadHeightmap(_file_to_saveload.name);
|
LoadHeightmap(_file_to_saveload.name);
|
||||||
IncreaseGeneratingWorldProgress(GWP_LANDSCAPE);
|
IncreaseGeneratingWorldProgress(GWP_LANDSCAPE);
|
||||||
} else if (_settings_game.game_creation.land_generator == LG_TERRAGENESIS) {
|
} else if (_settings_game.game_creation.land_generator == LG_TERRAGENESIS) {
|
||||||
SetGeneratingWorldProgress(GWP_LANDSCAPE, (_settings_game.game_creation.landscape == LT_TROPIC) ? 3 + gwp_desert_amount : 3);
|
SetGeneratingWorldProgress(GWP_LANDSCAPE, (_settings_game.game_creation.landscape == LT_TROPIC) ? 5 + gwp_desert_amount : 5);
|
||||||
GenerateTerrainPerlin();
|
GenerateTerrainPerlin();
|
||||||
} else {
|
} else {
|
||||||
if (_settings_game.construction.freeform_edges) {
|
if (_settings_game.construction.freeform_edges) {
|
||||||
|
@ -874,47 +874,41 @@ void GenerateLandscape(byte mode)
|
||||||
switch (_settings_game.game_creation.landscape) {
|
switch (_settings_game.game_creation.landscape) {
|
||||||
case LT_ARCTIC: {
|
case LT_ARCTIC: {
|
||||||
SetGeneratingWorldProgress(GWP_LANDSCAPE, 2);
|
SetGeneratingWorldProgress(GWP_LANDSCAPE, 2);
|
||||||
|
|
||||||
uint32 r = Random();
|
uint32 r = Random();
|
||||||
|
|
||||||
for (uint i = ScaleByMapSize(GB(r, 0, 7) + 950); i != 0; --i) {
|
for (uint i = ScaleByMapSize(GB(r, 0, 7) + 950); i != 0; --i) {
|
||||||
GenerateTerrain(2, 0);
|
GenerateTerrain(2, 0);
|
||||||
}
|
}
|
||||||
IncreaseGeneratingWorldProgress(GWP_LANDSCAPE);
|
|
||||||
|
|
||||||
uint flag = GB(r, 7, 2) | 4;
|
uint flag = GB(r, 7, 2) | 4;
|
||||||
for (uint i = ScaleByMapSize(GB(r, 9, 7) + 450); i != 0; --i) {
|
for (uint i = ScaleByMapSize(GB(r, 9, 7) + 450); i != 0; --i) {
|
||||||
GenerateTerrain(4, flag);
|
GenerateTerrain(4, flag);
|
||||||
}
|
}
|
||||||
IncreaseGeneratingWorldProgress(GWP_LANDSCAPE);
|
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case LT_TROPIC: {
|
case LT_TROPIC: {
|
||||||
SetGeneratingWorldProgress(GWP_LANDSCAPE, 3 + gwp_desert_amount);
|
SetGeneratingWorldProgress(GWP_LANDSCAPE, 2 + gwp_desert_amount);
|
||||||
|
|
||||||
uint32 r = Random();
|
uint32 r = Random();
|
||||||
|
|
||||||
for (uint i = ScaleByMapSize(GB(r, 0, 7) + 170); i != 0; --i) {
|
for (uint i = ScaleByMapSize(GB(r, 0, 7) + 170); i != 0; --i) {
|
||||||
GenerateTerrain(0, 0);
|
GenerateTerrain(0, 0);
|
||||||
}
|
}
|
||||||
IncreaseGeneratingWorldProgress(GWP_LANDSCAPE);
|
|
||||||
|
|
||||||
uint flag = GB(r, 7, 2) | 4;
|
uint flag = GB(r, 7, 2) | 4;
|
||||||
for (uint i = ScaleByMapSize(GB(r, 9, 8) + 1700); i != 0; --i) {
|
for (uint i = ScaleByMapSize(GB(r, 9, 8) + 1700); i != 0; --i) {
|
||||||
GenerateTerrain(0, flag);
|
GenerateTerrain(0, flag);
|
||||||
}
|
}
|
||||||
IncreaseGeneratingWorldProgress(GWP_LANDSCAPE);
|
|
||||||
|
|
||||||
flag ^= 2;
|
flag ^= 2;
|
||||||
|
|
||||||
for (uint i = ScaleByMapSize(GB(r, 17, 7) + 410); i != 0; --i) {
|
for (uint i = ScaleByMapSize(GB(r, 17, 7) + 410); i != 0; --i) {
|
||||||
GenerateTerrain(3, flag);
|
GenerateTerrain(3, flag);
|
||||||
}
|
}
|
||||||
IncreaseGeneratingWorldProgress(GWP_LANDSCAPE);
|
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
SetGeneratingWorldProgress(GWP_LANDSCAPE, 1);
|
SetGeneratingWorldProgress(GWP_LANDSCAPE, 2);
|
||||||
|
|
||||||
uint32 r = Random();
|
uint32 r = Random();
|
||||||
|
|
||||||
|
@ -922,13 +916,16 @@ void GenerateLandscape(byte mode)
|
||||||
for (; i != 0; --i) {
|
for (; i != 0; --i) {
|
||||||
GenerateTerrain(_settings_game.difficulty.terrain_type, 0);
|
GenerateTerrain(_settings_game.difficulty.terrain_type, 0);
|
||||||
}
|
}
|
||||||
IncreaseGeneratingWorldProgress(GWP_LANDSCAPE);
|
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Do not call IncreaseGeneratingWorldProgress() before FixSlopes(),
|
||||||
|
* it allows screen redraw. Drawing of broken slopes crashes the game */
|
||||||
FixSlopes();
|
FixSlopes();
|
||||||
|
IncreaseGeneratingWorldProgress(GWP_LANDSCAPE);
|
||||||
ConvertGroundTilesIntoWaterTiles();
|
ConvertGroundTilesIntoWaterTiles();
|
||||||
|
IncreaseGeneratingWorldProgress(GWP_LANDSCAPE);
|
||||||
|
|
||||||
if (_settings_game.game_creation.landscape == LT_TROPIC) CreateDesertOrRainForest();
|
if (_settings_game.game_creation.landscape == LT_TROPIC) CreateDesertOrRainForest();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue