From 98a226ab636dad8e191cfbb85d2b6bb22254d026 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Fri, 9 Mar 2012 08:26:41 +0100 Subject: [PATCH] Add a lair sub-command to tweak. This allows setting the whole map as monster lair, effectively locking items in place so they don't scatter on abandon/reclaim. --- plugins/tweak.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/plugins/tweak.cpp b/plugins/tweak.cpp index c244553ad..ba0fa72d2 100644 --- a/plugins/tweak.cpp +++ b/plugins/tweak.cpp @@ -46,6 +46,8 @@ DFhackCExport command_result plugin_init (Core *c, std::vector & "tweak", "Various tweaks for minor bugs.", tweak, false, " tweak clear-missing\n" " Remove the missing status from the selected unit.\n" + " lair\n" + " Mark the map as monster lair\n" )); return CR_OK; } @@ -54,7 +56,7 @@ DFhackCExport command_result plugin_shutdown ( Core * c ) { return CR_OK; } - +command_result lair(DFHack::Core * c, std::vector & params); static command_result tweak(Core * c, vector ¶meters) { CoreSuspender suspend(c); @@ -81,8 +83,47 @@ static command_result tweak(Core * c, vector ¶meters) crime->flags.bits.discovered = true; } } - else - return CR_WRONG_USAGE; + else if(cmd == "lair") + { + return lair(c,parameters); + } + else return CR_WRONG_USAGE; return CR_OK; } + +#include "modules/Maps.h" +command_result lair(DFHack::Core * c, std::vector & params) +{ + for(size_t i = 0; i < params.size();i++) + { + if(params[i] == "help" || params[i] == "?") + { + c->con.print("Makes the map a smonster lair, hopefully preventing item scatter.\n"); + return CR_OK; + } + } + Console & con = c->con; + + //CoreSuspender suspend(c); + if (!Maps::IsValid()) + { + c->con.printerr("Map is not available!\n"); + return CR_FAILURE; + } + uint32_t x_max,y_max,z_max; + Maps::getSize(x_max,y_max,z_max); + for (size_t i = 0; i < world->map.map_blocks.size(); i++) + { + df::map_block *block = world->map.map_blocks[i]; + DFHack::occupancies40d & occupancies = block->occupancy; + // for each tile in block + for (uint32_t x = 0; x < 16; x++) for (uint32_t y = 0; y < 16; y++) + { + // set to revealed + occupancies[x][y].bits.monster_lair = true; + } + } + con.print("Map monsterized.\n"); + return CR_OK; +} \ No newline at end of file