diff --git a/build/generate-MSVC-2010.bat b/build/generate-MSVC-2010.bat new file mode 100644 index 000000000..588051bc6 --- /dev/null +++ b/build/generate-MSVC-2010.bat @@ -0,0 +1,4 @@ +mkdir build-real +cd build-real +cmake ..\.. -G"Visual Studio 10" +pause \ No newline at end of file diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 4534481e7..2be94dc20 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -50,8 +50,8 @@ TARGET_LINK_LIBRARIES(dfdigger dfhack) # a magma creation tool # Author: Aleric -ADD_EXECUTABLE(dfmagma_create magma_create.cpp) -TARGET_LINK_LIBRARIES(dfmagma_create dfhack) +ADD_EXECUTABLE(dfliquids liquids.cpp) +TARGET_LINK_LIBRARIES(dfliquids dfhack) IF(UNIX) install(TARGETS diff --git a/tools/liquids.cpp b/tools/liquids.cpp new file mode 100644 index 000000000..0894449ff --- /dev/null +++ b/tools/liquids.cpp @@ -0,0 +1,175 @@ +// This will create 7 deep magama on the square the cursor is on. It does not +// enable magma buildings at this time. + +#include +#include +#include +using namespace std; + +#include +#include +#include +#include + +int main (void) +{ + int32_t x,y,z; + DFHack::designations40d designations; + + DFHack::API DF("Memory.xml"); + DFHack::Maps * Maps; + DFHack::Position * Position; + try + { + DF.Attach(); + Maps = DF.getMaps(); + Position = DF.getPosition(); + } + catch (exception& e) + { + cerr << e.what() << endl; + #ifndef LINUX_BUILD + cin.ignore(); + #endif + return 1; + } + bool end = false; + cout << "Welcome to the liquid spawner. type 'help' for a list of available commands, 'q' to quit." << endl; + string mode="magma"; + string flowmode="f+"; + int amount = 7; + while(!end) + { + DF.Resume(); + string command = ""; + cout <<"[" << mode << ":" << amount << ":" << flowmode << "]# "; + getline(cin, command); + if(command=="help") + { + cout << "Modes:" << endl + << "m - switch to magma" << endl + << "w - switch to water" << endl + << "f - flow bits only" << endl + << "Properties:" << endl + << "f+ - make the spawned liquid flow" << endl + << "f. - don't change flow state (read state in flow mode)" << endl + << "f- - make the spawned liquid static" << endl + << "0-7 - set liquid amount" << endl + << "Other:" << endl + << "q - quit" << endl + << "help - print this list of commands" << endl + << "empty line - put liquid" << endl + << endl + << "Usage: point the DF cursor at a tile you want to modify" << endl + << "and use the commands available :)" << endl; + + } + else if(command == "m") + { + mode = "magma"; + } + else if(command == "w") + { + mode = "water"; + } + else if(command == "f") + { + mode = "flowbits"; + } + else if(command == "q") + { + end = true; + } + else if(command == "f+") + { + flowmode = "f+"; + } + else if(command == "f-") + { + flowmode = "f-"; + } + else if(command == "f.") + { + flowmode = "f."; + } + // blah blah, bad code, bite me. + else if(command == "0") + amount = 0; + else if(command == "1") + amount = 1; + else if(command == "2") + amount = 2; + else if(command == "3") + amount = 3; + else if(command == "4") + amount = 4; + else if(command == "5") + amount = 5; + else if(command == "6") + amount = 6; + else if(command == "7") + amount = 7; + else if(command.empty()) + { + DF.Suspend(); + do + { + if(!Maps->Start()) + { + cout << "Can't see any DF map loaded." << endl; + break; + } + if(!Position->getCursorCoords(x,y,z)) + { + cout << "Can't get cursor coords! Make sure you have a cursor active in DF." << endl; + break; + } + cout << "cursor coords: " << x << "/" << y << "/" << z << endl; + if(!Maps->isValidBlock(x/16,y/16,z)) + { + cout << "Not a valid block." << endl; + break; + } + // place the magma + Maps->ReadDesignations((x/16),(y/16),z, &designations); + if(mode != "flowbits") + designations[x%16][y%16].bits.flow_size = amount; + if(mode == "magma") + designations[x%16][y%16].bits.liquid_type = DFHack::liquid_magma; + else if(mode == "water") + designations[x%16][y%16].bits.liquid_type = DFHack::liquid_water; + Maps->WriteDesignations(x/16,y/16,z, &designations); + + // make the magma flow :) + DFHack::t_blockflags bflags; + Maps->ReadBlockFlags((x/16),(y/16),z,bflags); + // 0x00000001 = job-designated + // 0x0000000C = run flows? - both bit 3 and 4 required for making magma placed on a glacier flow + if(flowmode == "f+") + { + bflags.bits.liquid_1 = true; + bflags.bits.liquid_2 = true; + } + else if(flowmode == "f-") + { + bflags.bits.liquid_1 = false; + bflags.bits.liquid_2 = false; + } + else + { + cout << "flow bit 1 = " << bflags.bits.liquid_1 << endl; + cout << "flow bit 2 = " << bflags.bits.liquid_2 << endl; + } + Maps->WriteBlockFlags((x/16),(y/16),z,bflags); + cout << "OK" << endl; + Maps->Finish(); + } while (0); + } + } + DF.Detach(); + #ifndef LINUX_BUILD + cout << "Done. Press any key to continue" << endl; + cin.ignore(); + #endif + return 0; +} diff --git a/tools/magma_create.cpp b/tools/magma_create.cpp deleted file mode 100644 index 8b25fdc1d..000000000 --- a/tools/magma_create.cpp +++ /dev/null @@ -1,127 +0,0 @@ -// This will create 7 deep magama on the square the cursor is on. It does not -// enable magma buildings at this time. - -#include -#include -#include -using namespace std; - -#include -#include -#include -#include - -int main (void) -{ - int32_t x,y,z; - DFHack::designations40d designations; - - DFHack::API DF("Memory.xml"); - DFHack::Maps * Maps; - DFHack::Position * Position; - try - { - DF.Attach(); - Maps = DF.getMaps(); - Position = DF.getPosition(); - } - catch (exception& e) - { - cerr << e.what() << endl; - #ifndef LINUX_BUILD - cin.ignore(); - #endif - return 1; - } - bool end = false; - cout << "Welcome to the liquid spawner. type 'help' for a list of available commands." << endl; - string mode="magma"; - int amount = 7; - while(!end) - { - DF.Resume(); - string command = ""; - cout << mode << ":" << amount << " >"; - getline(cin, command); - if(command=="help") - { - cout << "m - switch to magma" << endl - << "w - switch to water" << endl - << "return - put liquid" << endl - << "0-7 - set liquid amount" << endl - << "q - quit" << endl - << "help - print this list of commands" << endl; - } - else if(command == "m") - { - mode = "magma"; - } - else if(command == "w") - { - mode = "water"; - } - else if(command == "q") - { - end = true; - } - // blah blah, bad code, bite me. - else if(command == "0") - amount = 0; - else if(command == "1") - amount = 1; - else if(command == "2") - amount = 2; - else if(command == "3") - amount = 3; - else if(command == "4") - amount = 4; - else if(command == "5") - amount = 5; - else if(command == "6") - amount = 6; - else if(command == "7") - amount = 7; - else// if(command.empty()) - { - DF.Suspend(); - Maps->Start(); - if(Position->getCursorCoords(x,y,z)) - { - cout << "cursor coords: " << x << "/" << y << "/" << z << endl; - if(Maps->isValidBlock(x/16,y/16,z)) - { - // place the magma - Maps->ReadDesignations((x/16),(y/16),z, &designations); - designations[x%16][y%16].bits.flow_size = amount; - if(mode == "magma") - designations[x%16][y%16].bits.liquid_type = DFHack::liquid_magma; - if(mode == "water") - designations[x%16][y%16].bits.liquid_type = DFHack::liquid_water; - Maps->WriteDesignations(x/16,y/16,z, &designations); - - // make the magma flow :) - DFHack::t_blockflags bflags; - Maps->ReadBlockFlags((x/16),(y/16),z,bflags); - // 0x00000001 = job-designated - // 0x0000000C = run flows? - both bit 3 and 4 required for making magma placed on a glacier flow - bflags.bits.liquid_1 = true; - bflags.bits.liquid_2 = true; - Maps->WriteBlockFlags((x/16),(y/16),z,bflags); - Maps->Finish(); - cout << "OK" << endl; - } - else - cout << "Not a valid block." << endl; - } - else - cout << "NO" << endl; - Maps->Finish(); - } - } - DF.Detach(); - #ifndef LINUX_BUILD - cout << "Done. Press any key to continue" << endl; - cin.ignore(); - #endif - return 0; -}