diff --git a/src/droid.cpp b/src/droid.cpp index 23f42e6acb7..ce6eac08c4e 100644 --- a/src/droid.cpp +++ b/src/droid.cpp @@ -982,6 +982,7 @@ static void addConstructorEffect(STRUCTURE *psStruct) { /* This needs fixing - it's an arse effect! */ const Vector2i size = psStruct->size() * TILE_UNITS / 4; + ASSERT_OR_RETURN(, size.x > 0 && size.y > 0, "Zero-size building?: %s", (psStruct && psStruct->pStructureType) ? psStruct->pStructureType->id.toUtf8().c_str() : ""); Vector3i temp; temp.x = psStruct->pos.x + ((rand() % (2 * size.x)) - size.x); temp.y = map_TileHeight(map_coord(psStruct->pos.x), map_coord(psStruct->pos.y)) + (psStruct->sDisplay.imd->max.y / 6); diff --git a/src/order.cpp b/src/order.cpp index 51eed889a54..d38e46066c3 100644 --- a/src/order.cpp +++ b/src/order.cpp @@ -1525,16 +1525,19 @@ void orderDroidBase(DROID *psDroid, DROID_ORDER_DATA *psOrder) objTrace(psDroid->id, "Starting new construction effort of %s", psOrder->psStats ? getStatsName(psOrder->psStats) : "NULL"); break; case DORDER_BUILDMODULE: - //build a module onto the structure - if (!isConstructionDroid(psDroid) || psOrder->index < nextModuleToBuild((STRUCTURE *)psOrder->psObj, -1)) { - break; + //build a module onto the structure + if (!isConstructionDroid(psDroid) || psOrder->index < nextModuleToBuild((STRUCTURE *)psOrder->psObj, -1)) + { + break; + } + STRUCTURE_STATS *psStats = getModuleStat((STRUCTURE *)psOrder->psObj); + ASSERT_OR_RETURN(, psStats != nullptr, "should have found a module stats"); + psDroid->order = DroidOrder(DORDER_BUILD, psStats, psOrder->psObj->pos.xy(), 0); + ASSERT_OR_RETURN(, !psDroid->order.psStats || psDroid->order.psStats->type != REF_DEMOLISH, "Cannot build demolition"); + actionDroid(psDroid, DACTION_BUILD, psOrder->psObj->pos.x, psOrder->psObj->pos.y); + objTrace(psDroid->id, "Starting new upgrade of %s", psOrder->psStats ? getStatsName(psOrder->psStats) : "NULL"); } - psDroid->order = DroidOrder(DORDER_BUILD, getModuleStat((STRUCTURE *)psOrder->psObj), psOrder->psObj->pos.xy(), 0); - ASSERT_OR_RETURN(, psDroid->order.psStats != nullptr, "should have found a module stats"); - ASSERT_OR_RETURN(, !psDroid->order.psStats || psDroid->order.psStats->type != REF_DEMOLISH, "Cannot build demolition"); - actionDroid(psDroid, DACTION_BUILD, psOrder->psObj->pos.x, psOrder->psObj->pos.y); - objTrace(psDroid->id, "Starting new upgrade of %s", psOrder->psStats ? getStatsName(psOrder->psStats) : "NULL"); break; case DORDER_HELPBUILD: // help to build a structure that is starting to be built