From 2458a29fd0287259522e3a7c642efe22d646c43f Mon Sep 17 00:00:00 2001 From: frosch Date: Tue, 17 Jan 2012 18:46:09 +0000 Subject: [PATCH] (svn r23819) -Fix [FS#4951]: Removal of towns with 0 population failed during map generation. --- src/town_cmd.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 5b0494f911..986000b2d0 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -1820,6 +1820,8 @@ static TileIndex FindNearestGoodCoastalTownSpot(TileIndex tile, TownLayout layou static Town *CreateRandomTown(uint attempts, uint32 townnameparts, TownSize size, bool city, TownLayout layout) { + assert(_game_mode == GM_EDITOR || _generating_world); // These are the preconditions for CMD_DELETE_TOWN + if (!Town::CanAllocateItem()) return NULL; do { @@ -1844,7 +1846,8 @@ static Town *CreateRandomTown(uint attempts, uint32 townnameparts, TownSize size /* if the population is still 0 at the point, then the * placement is so bad it couldn't grow at all */ if (t->population > 0) return t; - DoCommand(t->xy, t->index, 0, DC_EXEC, CMD_DELETE_TOWN); + CommandCost rc = DoCommand(t->xy, t->index, 0, DC_EXEC, CMD_DELETE_TOWN); + assert(rc.Succeeded()); /* We already know that we can allocate a single town when * entering this function. However, we create and delete @@ -2564,7 +2567,7 @@ CommandCost CmdExpandTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 } /** - * Delete a town (scenario editor only). + * Delete a town (scenario editor or worldgen only). * @param tile Unused. * @param flags Type of operation. * @param p1 Town ID to delete. @@ -2574,7 +2577,7 @@ CommandCost CmdExpandTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 */ CommandCost CmdDeleteTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { - if (_game_mode != GM_EDITOR) return CMD_ERROR; + if (_game_mode != GM_EDITOR && !_generating_world) return CMD_ERROR; Town *t = Town::GetIfValid(p1); if (t == NULL) return CMD_ERROR;