(svn r2201) - Fix: Crash in scenario-editor with terraforming out-of-map bounds.

pull/155/head
Darkvater 19 years ago
parent 371d8f8386
commit 1e13bf3d27

@ -1152,7 +1152,7 @@ static void AskResetLandscape(uint mode)
*/ */
static void CommonRaiseLowerBigLand(uint tile, int mode) static void CommonRaiseLowerBigLand(uint tile, int mode)
{ {
int size; int sizex, sizey;
byte h; byte h;
_error_message_2 = mode ? STR_0808_CAN_T_RAISE_LAND_HERE : STR_0809_CAN_T_LOWER_LAND_HERE; _error_message_2 = mode ? STR_0808_CAN_T_RAISE_LAND_HERE : STR_0809_CAN_T_LOWER_LAND_HERE;
@ -1164,27 +1164,32 @@ static void CommonRaiseLowerBigLand(uint tile, int mode)
} else { } else {
SndPlayTileFx(SND_1F_SPLAT, tile); SndPlayTileFx(SND_1F_SPLAT, tile);
size = _terraform_size; assert(_terraform_size != 0);
assert(size != 0); // check out for map overflows
sizex = min(MapSizeX() - TileX(tile) - 1, _terraform_size);
sizey = min(MapSizeY() - TileY(tile) - 1, _terraform_size);
if (sizex == 0 || sizey == 0) return;
if (mode != 0) { if (mode != 0) {
/* Raise land */ /* Raise land */
h = 15; // XXX - max height h = 15; // XXX - max height
BEGIN_TILE_LOOP(tile2, size, size, tile) BEGIN_TILE_LOOP(tile2, sizex, sizey, tile) {
h = min(h, TileHeight(tile2)); h = min(h, TileHeight(tile2));
END_TILE_LOOP(tile2, size, size, tile) } END_TILE_LOOP(tile2, sizex, sizey, tile)
} else { } else {
/* Lower land */ /* Lower land */
h = 0; h = 0;
BEGIN_TILE_LOOP(tile2, size, size, tile) BEGIN_TILE_LOOP(tile2, sizex, sizey, tile) {
h = max(h, TileHeight(tile2)); h = max(h, TileHeight(tile2));
END_TILE_LOOP(tile2, size, size, tile) } END_TILE_LOOP(tile2, sizex, sizey, tile)
} }
BEGIN_TILE_LOOP(tile2, size, size, tile) BEGIN_TILE_LOOP(tile2, sizex, sizey, tile) {
if (TileHeight(tile2) == h) { if (TileHeight(tile2) == h) {
DoCommandP(tile2, 8, (uint32)mode, NULL, CMD_TERRAFORM_LAND | CMD_AUTO); DoCommandP(tile2, 8, (uint32)mode, NULL, CMD_TERRAFORM_LAND | CMD_AUTO);
} }
END_TILE_LOOP(tile2, size, size, tile) } END_TILE_LOOP(tile2, sizex, sizey, tile)
} }
_generating_world = false; _generating_world = false;

Loading…
Cancel
Save