summaryrefslogtreecommitdiff
path: root/needs_porting/lair.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'needs_porting/lair.cpp')
-rw-r--r--needs_porting/lair.cpp74
1 files changed, 74 insertions, 0 deletions
diff --git a/needs_porting/lair.cpp b/needs_porting/lair.cpp
new file mode 100644
index 00000000..7bf3ddc2
--- /dev/null
+++ b/needs_porting/lair.cpp
@@ -0,0 +1,74 @@
+// This is a simple bit writer... it marks the whole map as a creature lair, preventing item scatter.
+
+#include <iostream>
+#include <vector>
+#include <map>
+using namespace std;
+#include <DFHack.h>
+#include <extra/termutil.h>
+
+int main (void)
+{
+ bool temporary_terminal = TemporaryTerminal();
+ uint32_t x_max,y_max,z_max;
+ DFHack::occupancies40d occupancies;
+
+ DFHack::ContextManager DFMgr("Memory.xml");
+ DFHack::Context *DF;
+ try
+ {
+ DF = DFMgr.getSingleContext();
+ DF->Attach();
+ }
+ catch (exception& e)
+ {
+ cerr << e.what() << endl;
+ if(temporary_terminal)
+ cin.ignore();
+ return 1;
+ }
+
+ DFHack::Maps *Maps =DF->getMaps();
+
+ // init the map
+ if(!Maps->Start())
+ {
+ cerr << "Can't init map." << endl;
+ if(temporary_terminal)
+ cin.ignore();
+ return 1;
+ }
+
+ cout << "Designating, please wait..." << endl;
+
+ Maps->getSize(x_max,y_max,z_max);
+ for(uint32_t x = 0; x< x_max;x++)
+ {
+ for(uint32_t y = 0; y< y_max;y++)
+ {
+ for(uint32_t z = 0; z< z_max;z++)
+ {
+ if(Maps->isValidBlock(x,y,z))
+ {
+ // read block designations
+ Maps->ReadOccupancy(x,y,z, &occupancies);
+ //Maps->ReadTileTypes(x,y,z, &tiles);
+ // change the monster_lair flag to 1
+ for (uint32_t i = 0; i < 16;i++) for (uint32_t j = 0; j < 16;j++)
+ {
+ // add tile type chack here
+ occupancies[i][j].bits.monster_lair = 1;
+ }
+ // write the designations back
+ Maps->WriteOccupancy(x,y,z, &occupancies);
+ }
+ }
+ }
+ }
+ if(temporary_terminal)
+ {
+ cout << "The map has been marked as a creature lair. Items shouldn't scatter." << endl;
+ cin.ignore();
+ }
+ return 0;
+}