summaryrefslogtreecommitdiff
path: root/plugins/fixveins.cpp
diff options
context:
space:
mode:
authorQuietust2012-01-27 11:33:51 -0600
committerQuietust2012-01-27 11:33:51 -0600
commit331be2c821a01ae4e49cac538c13936af085a03a (patch)
treea838a25cac40d03f9f568505dadc45aaa35b8c06 /plugins/fixveins.cpp
parentccad6efeb8d2a73d547c6e141219cb43b1f88b69 (diff)
downloaddfhack-331be2c821a01ae4e49cac538c13936af085a03a.tar.gz
dfhack-331be2c821a01ae4e49cac538c13936af085a03a.tar.bz2
dfhack-331be2c821a01ae4e49cac538c13936af085a03a.tar.xz
Update fixveins to also handle feature stones (e.g. adamantine vein floors)
Diffstat (limited to 'plugins/fixveins.cpp')
-rw-r--r--plugins/fixveins.cpp48
1 files changed, 25 insertions, 23 deletions
diff --git a/plugins/fixveins.cpp b/plugins/fixveins.cpp
index 092630f3..29215c7b 100644
--- a/plugins/fixveins.cpp
+++ b/plugins/fixveins.cpp
@@ -22,6 +22,19 @@ using namespace df::enums;
using df::global::world;
+bool setTileMaterial(int16_t &tile, const TileMaterial mat)
+{
+ int16_t newTile = findTileType(tileShape(tile), mat, tileVariant(tile), tileSpecial(tile), tileDirection(tile));
+ if (newTile == -1)
+ return false;
+ if (newTile != tile)
+ {
+ tile = newTile;
+ return true;
+ }
+ return false;
+}
+
DFhackCExport command_result df_fixveins (Core * c, vector <string> & parameters)
{
if (parameters.size())
@@ -35,8 +48,8 @@ DFhackCExport command_result df_fixveins (Core * c, vector <string> & parameters
return CR_FAILURE;
}
- int removed = 0;
- int added = 0;
+ int mineral_removed = 0, feature_removed = 0;
+ int mineral_added = 0, feature_added = 0;
int num_blocks = 0, blocks_total = world->map.map_blocks.size();
for (int i = 0; i < blocks_total; i++)
@@ -57,33 +70,22 @@ DFhackCExport command_result df_fixveins (Core * c, vector <string> & parameters
for (int y = 0; y < 16; y++)
{
int16_t oldT = block->tiletype[x][y];
- int16_t newT = oldT;
TileMaterial mat = tileMaterial(oldT);
if ((mat == VEIN) && !(has_mineral[y] & (1 << x)))
- {
- newT = findTileType(tileShape(oldT), STONE, tileVariant(oldT), tileSpecial(oldT), tileDirection(oldT));
- if ((newT != -1) && (newT != oldT))
- {
- block->tiletype[x][y] = newT;
- removed++;
- }
- }
+ mineral_removed += setTileMaterial(block->tiletype[x][y], STONE);
if ((mat == STONE) && (has_mineral[y] & (1 << x)))
- {
- newT = findTileType(tileShape(oldT), VEIN, tileVariant(oldT), tileSpecial(oldT), tileDirection(oldT));
- if ((newT != -1) && (newT != oldT))
- {
- block->tiletype[x][y] = newT;
- added++;
- }
- }
+ mineral_added += setTileMaterial(block->tiletype[x][y], VEIN);
+ if ((mat == FEATSTONE) && !(block->designation[x][y].bits.feature_local || block->designation[x][y].bits.feature_global))
+ feature_removed += setTileMaterial(block->tiletype[x][y], STONE);
+ if ((mat == STONE) && (block->designation[x][y].bits.feature_local || block->designation[x][y].bits.feature_global))
+ feature_added += setTileMaterial(block->tiletype[x][y], FEATSTONE);
}
}
}
- if (removed)
- c->con.print("Removed %i invalid references to mineral inclusions.\n", removed);
- if (added)
- c->con.print("Restored %i missing references to mineral inclusions.\n", added);
+ if (mineral_removed || feature_removed)
+ c->con.print("Removed invalid references from %i mineral inclusion and %i map feature tiles.\n", mineral_removed, feature_removed);
+ if (mineral_added || feature_added)
+ c->con.print("Restored missing references to %i mineral inclusion and %i map feature tiles.\n", mineral_added, feature_added);
return CR_OK;
}