diff --git a/docs/plugins/alltraffic.rst b/docs/plugins/alltraffic.rst deleted file mode 100644 index 1e9116954..000000000 --- a/docs/plugins/alltraffic.rst +++ /dev/null @@ -1,11 +0,0 @@ -alltraffic -========== -Set traffic designations for every single tile of the map - useful for resetting -traffic designations. See also `filltraffic`, `restrictice`, and `restrictliquids`. - -Options: - -:H: High Traffic -:N: Normal Traffic -:L: Low Traffic -:R: Restricted Traffic diff --git a/docs/plugins/autobutcher.rst b/docs/plugins/autobutcher.rst deleted file mode 100644 index d761cbdbe..000000000 --- a/docs/plugins/autobutcher.rst +++ /dev/null @@ -1,91 +0,0 @@ -autobutcher -=========== -Assigns lifestock for slaughter once it reaches a specific count. Requires that -you add the target race(s) to a watch list. Only tame units will be processed. - -Units will be ignored if they are: - -* Nicknamed (for custom protection; you can use the `rename` ``unit`` tool - individually, or `zone` ``nick`` for groups) -* Caged, if and only if the cage is defined as a room (to protect zoos) -* Trained for war or hunting - -Creatures who will not reproduce (because they're not interested in the -opposite sex or have been gelded) will be butchered before those who will. -Older adults and younger children will be butchered first if the population -is above the target (default 1 male, 5 female kids and adults). Note that -you may need to set a target above 1 to have a reliable breeding population -due to asexuality etc. See `fix-ster` if this is a problem. - -Options: - -:example: Print some usage examples. -:start: Start running every X frames (df simulation ticks). - Default: X=6000, which would be every 60 seconds at 100fps. -:stop: Stop running automatically. -:sleep : Changes the timer to sleep X frames between runs. -:watch R: Start watching a race. R can be a valid race RAW id (ALPACA, - BIRD_TURKEY, etc) or a list of ids seperated by spaces or - the keyword 'all' which affects all races on your current - watchlist. -:unwatch R: Stop watching race(s). The current target settings will be - remembered. R can be a list of ids or the keyword 'all'. -:forget R: Stop watching race(s) and forget it's/their target settings. - R can be a list of ids or the keyword 'all'. -:autowatch: Automatically adds all new races (animals you buy from merchants, - tame yourself or get from migrants) to the watch list using - default target count. -:noautowatch: Stop auto-adding new races to the watchlist. -:list: Print the current status and watchlist. -:list_export: Print the commands needed to set up status and watchlist, - which can be used to import them to another save (see notes). -:target : - Set target count for specified race(s). The first four arguments - are the number of female and male kids, and female and male adults. - R can be a list of spceies ids, or the keyword ``all`` or ``new``. - ``R = 'all'``: change target count for all races on watchlist - and set the new default for the future. ``R = 'new'``: don't touch - current settings on the watchlist, only set the new default - for future entries. -:list_export: Print the commands required to rebuild your current settings. - -.. note:: - - Settings and watchlist are stored in the savegame, so that you can have - different settings for each save. If you want to copy your watchlist to - another savegame you must export the commands required to recreate your settings. - - To export, open an external terminal in the DF directory, and run - ``dfhack-run autobutcher list_export > filename.txt``. To import, load your - new save and run ``script filename.txt`` in the DFHack terminal. - - -Examples: - -You want to keep max 7 kids (4 female, 3 male) and max 3 adults (2 female, -1 male) of the race alpaca. Once the kids grow up the oldest adults will get -slaughtered. Excess kids will get slaughtered starting with the youngest -to allow that the older ones grow into adults. Any unnamed cats will -be slaughtered as soon as possible. :: - - autobutcher target 4 3 2 1 ALPACA BIRD_TURKEY - autobutcher target 0 0 0 0 CAT - autobutcher watch ALPACA BIRD_TURKEY CAT - autobutcher start - -Automatically put all new races onto the watchlist and mark unnamed tame units -for slaughter as soon as they arrive in your fort. Settings already made -for specific races will be left untouched. :: - - autobutcher target 0 0 0 0 new - autobutcher autowatch - autobutcher start - -Stop watching the races alpaca and cat, but remember the target count -settings so that you can use 'unwatch' without the need to enter the -values again. Note: 'autobutcher unwatch all' works, but only makes sense -if you want to keep the plugin running with the 'autowatch' feature or manually -add some new races with 'watch'. If you simply want to stop it completely use -'autobutcher stop' instead. :: - - autobutcher unwatch ALPACA CAT diff --git a/docs/plugins/autonestbox.rst b/docs/plugins/autonestbox.rst deleted file mode 100644 index f19cad42c..000000000 --- a/docs/plugins/autonestbox.rst +++ /dev/null @@ -1,19 +0,0 @@ -autonestbox -=========== -Assigns unpastured female egg-layers to nestbox zones. Requires that you create -pen/pasture zones above nestboxes. If the pen is bigger than 1x1 the nestbox -must be in the top left corner. Only 1 unit will be assigned per pen, regardless -of the size. The age of the units is currently not checked, most birds grow up -quite fast. Egglayers who are also grazers will be ignored, since confining them -to a 1x1 pasture is not a good idea. Only tame and domesticated own units are -processed since pasturing half-trained wild egglayers could destroy your neat -nestbox zones when they revert to wild. When called without options autonestbox -will instantly run once. - -Options: - -:start: Start running every X frames (df simulation ticks). - Default: X=6000, which would be every 60 seconds at 100fps. -:stop: Stop running automatically. -:sleep: Must be followed by number X. Changes the timer to sleep X - frames between runs. diff --git a/docs/plugins/digcircle.rst b/docs/plugins/digcircle.rst deleted file mode 100644 index fc31b65df..000000000 --- a/docs/plugins/digcircle.rst +++ /dev/null @@ -1,35 +0,0 @@ -digcircle -========= -A command for easy designation of filled and hollow circles. -It has several types of options. - -Shape: - -:hollow: Set the circle to hollow (default) -:filled: Set the circle to filled -:#: Diameter in tiles (default = 0, does nothing) - -Action: - -:set: Set designation (default) -:unset: Unset current designation -:invert: Invert designations already present - -Designation types: - -:dig: Normal digging designation (default) -:ramp: Ramp digging -:ustair: Staircase up -:dstair: Staircase down -:xstair: Staircase up/down -:chan: Dig channel - -After you have set the options, the command called with no options -repeats with the last selected parameters. - -Examples: - -``digcircle filled 3`` - Dig a filled circle with diameter = 3. -``digcircle`` - Do it again. diff --git a/docs/plugins/digexp.rst b/docs/plugins/digexp.rst deleted file mode 100644 index e4412d051..000000000 --- a/docs/plugins/digexp.rst +++ /dev/null @@ -1,31 +0,0 @@ -digexp -====== -This command is for :wiki:`exploratory mining `. - -There are two variables that can be set: pattern and filter. - -Patterns: - -:diag5: diagonals separated by 5 tiles -:diag5r: diag5 rotated 90 degrees -:ladder: A 'ladder' pattern -:ladderr: ladder rotated 90 degrees -:clear: Just remove all dig designations -:cross: A cross, exactly in the middle of the map. - -Filters: - -:all: designate whole z-level -:hidden: designate only hidden tiles of z-level (default) -:designated: Take current designation and apply pattern to it. - -After you have a pattern set, you can use ``expdig`` to apply it again. - -Examples: - -``expdig diag5 hidden`` - Designate the diagonal 5 patter over all hidden tiles -``expdig`` - Apply last used pattern and filter -``expdig ladder designated`` - Take current designations and replace them with the ladder pattern diff --git a/docs/plugins/digtype.rst b/docs/plugins/digtype.rst deleted file mode 100644 index 1c2d49eaa..000000000 --- a/docs/plugins/digtype.rst +++ /dev/null @@ -1,19 +0,0 @@ -digtype -======= -For every tile on the map of the same vein type as the selected tile, -this command designates it to have the same designation as the -selected tile. If the selected tile has no designation, they will be -dig designated. -If an argument is given, the designation of the selected tile is -ignored, and all appropriate tiles are set to the specified -designation. - -Options: - -:dig: -:channel: -:ramp: -:updown: up/down stairs -:up: up stairs -:down: down stairs -:clear: clear designation diff --git a/plugins/dfstream.cpp b/plugins/dfstream.cpp deleted file mode 100644 index eb98c181b..000000000 --- a/plugins/dfstream.cpp +++ /dev/null @@ -1,316 +0,0 @@ -#include "Core.h" -#include "Console.h" -#include "Export.h" -#include "PluginManager.h" - -#include "DataDefs.h" -#include "df/graphic.h" -#include "df/enabler.h" -#include "df/renderer.h" - -#include -#include -#include "PassiveSocket.h" -#include "tinythread.h" - -using namespace DFHack; -using namespace df::enums; - -using std::string; -using std::vector; - -DFHACK_PLUGIN("dfstream"); -REQUIRE_GLOBAL(gps); -REQUIRE_GLOBAL(enabler); - -// Owns the thread that accepts TCP connections and forwards messages to clients; -// has a mutex -class client_pool { - typedef tthread::mutex mutex; - - mutex clients_lock; - std::vector clients; - - // TODO - delete this at some point - tthread::thread * accepter; - - static void accept_clients(void * client_pool_pointer) { - client_pool * p = reinterpret_cast(client_pool_pointer); - CPassiveSocket socket; - socket.Initialize(); - if (socket.Listen((const uint8_t *)"0.0.0.0", 8008)) { - std::cout << "Listening on a socket" << std::endl; - } else { - std::cout << "Not listening: " << socket.GetSocketError() << std::endl; - std::cout << socket.DescribeError() << std::endl; - } - while (true) { - CActiveSocket * client = socket.Accept(); - if (client != 0) { - lock l(*p); - p->clients.push_back(client); - } - } - } - -public: - class lock { - tthread::lock_guard l; - public: - lock(client_pool & p) - : l(p.clients_lock) - { - } - }; - friend class client_pool::lock; - - client_pool() { - accepter = new tthread::thread(accept_clients, this); - } - - // MUST have lock - bool has_clients() { - return !clients.empty(); - } - - // MUST have lock - void add_client(CActiveSocket * sock) { - clients.push_back(sock); - } - - // MUST have lock - void broadcast(const std::string & message) { - unsigned int sz = htonl(message.size()); - for (size_t i = 0; i < clients.size(); ++i) { - clients[i]->Send(reinterpret_cast(&sz), sizeof(sz)); - clients[i]->Send((const uint8_t *) message.c_str(), message.size()); - } - } -}; - -// A decorator (in the design pattern sense) of the DF renderer class. -// Sends the screen contents to a client_pool. -class renderer_decorator : public df::renderer { - // the renderer we're decorating - df::renderer * inner; - - // how many frames have passed since we last sent a frame - int framesNotPrinted; - - // set to false in the destructor - bool * alive; - - // clients to which we send the frame - client_pool clients; - - // The following three methods facilitate copying of state to the inner object - void set_to_null() { - screen = NULL; - screentexpos = NULL; - screentexpos_addcolor = NULL; - screentexpos_grayscale = NULL; - screentexpos_cf = NULL; - screentexpos_cbr = NULL; - screen_old = NULL; - screentexpos_old = NULL; - screentexpos_addcolor_old = NULL; - screentexpos_grayscale_old = NULL; - screentexpos_cf_old = NULL; - screentexpos_cbr_old = NULL; - } - - void copy_from_inner() { - screen = inner->screen; - screentexpos = inner->screentexpos; - screentexpos_addcolor = inner->screentexpos_addcolor; - screentexpos_grayscale = inner->screentexpos_grayscale; - screentexpos_cf = inner->screentexpos_cf; - screentexpos_cbr = inner->screentexpos_cbr; - screen_old = inner->screen_old; - screentexpos_old = inner->screentexpos_old; - screentexpos_addcolor_old = inner->screentexpos_addcolor_old; - screentexpos_grayscale_old = inner->screentexpos_grayscale_old; - screentexpos_cf_old = inner->screentexpos_cf_old; - screentexpos_cbr_old = inner->screentexpos_cbr_old; - } - - void copy_to_inner() { - inner->screen = screen; - inner->screentexpos = screentexpos; - inner->screentexpos_addcolor = screentexpos_addcolor; - inner->screentexpos_grayscale = screentexpos_grayscale; - inner->screentexpos_cf = screentexpos_cf; - inner->screentexpos_cbr = screentexpos_cbr; - inner->screen_old = screen_old; - inner->screentexpos_old = screentexpos_old; - inner->screentexpos_addcolor_old = screentexpos_addcolor_old; - inner->screentexpos_grayscale_old = screentexpos_grayscale_old; - inner->screentexpos_cf_old = screentexpos_cf_old; - inner->screentexpos_cbr_old = screentexpos_cbr_old; - } - -public: - renderer_decorator(df::renderer * inner, bool * alive) - : inner(inner) - , framesNotPrinted(0) - , alive(alive) - { - copy_from_inner(); - } - virtual void update_tile(int x, int y) { - copy_to_inner(); - inner->update_tile(x, y); - } - virtual void update_all() { - copy_to_inner(); - inner->update_all(); - } - virtual void render() { - copy_to_inner(); - inner->render(); - - ++framesNotPrinted; - int gfps = enabler->calculated_gfps; - if (gfps == 0) gfps = 1; - // send a frame roughly every 128 mibiseconds (1 second = 1024 mibiseconds) - if ((framesNotPrinted * 1024) / gfps <= 128) return; - - client_pool::lock lock(clients); - if (!clients.has_clients()) return; - framesNotPrinted = 0; - std::stringstream frame; - frame << gps->dimx << ' ' << gps->dimy << " 0 0 " << gps->dimx << ' ' << gps->dimy << '\n'; - unsigned char * sc_ = gps->screen; - for (int y = 0; y < gps->dimy; ++y) { - unsigned char * sc = sc_; - for (int x = 0; x < gps->dimx; ++x) { - unsigned char ch = sc[0]; - unsigned char bold = (sc[3] != 0) * 8; - unsigned char translate[] = - { 0, 4, 2, 6, 1, 5, 3, 7, 8, 12, 10, 14, 9, 13, 11, 15 }; - unsigned char fg = translate[(sc[1] + bold) % 16]; - unsigned char bg = translate[sc[2] % 16]*16; - frame.put(ch); - frame.put(fg+bg); - sc += 4*gps->dimy; - } - sc_ += 4; - } - clients.broadcast(frame.str()); - } - virtual void set_fullscreen() { inner->set_fullscreen(); } - virtual void zoom(df::zoom_commands cmd) { - copy_to_inner(); - inner->zoom(cmd); - } - virtual void resize(int w, int h) { - copy_to_inner(); - inner->resize(w, h); - copy_from_inner(); - } - virtual void grid_resize(int w, int h) { - copy_to_inner(); - inner->grid_resize(w, h); - copy_from_inner(); - } - virtual ~renderer_decorator() { - *alive = false; - if (inner) { - copy_to_inner(); - delete inner; - inner = 0; - } - set_to_null(); - } - virtual bool get_mouse_coords(int *x, int *y) { return inner->get_mouse_coords(x, y); } - virtual bool uses_opengl() { return inner->uses_opengl(); } - - static renderer_decorator * hook(df::renderer *& ptr, bool * alive) { - renderer_decorator * r = new renderer_decorator(ptr, alive); - ptr = r; - return r; - } - - static void unhook(df::renderer *& ptr, renderer_decorator * dec, color_ostream & out) { - dec->copy_to_inner(); - ptr = dec->inner; - dec->inner = 0; - delete dec; - } -}; - -inline df::renderer *& active_renderer() { - return enabler->renderer; -} - -// This class is a smart pointer around a renderer_decorator. -// It should only be assigned r_d pointers that use the alive-pointer of this -// instance. -// If the r_d has been deleted by an external force, this smart pointer doesn't -// redelete it. -class auto_renderer_decorator { - renderer_decorator * p; -public: - // pass this member to the ctor of renderer_decorator - bool alive; - - auto_renderer_decorator() - : p(0) - { - } - - ~auto_renderer_decorator() { - reset(); - } - - void reset() { - if (*this) { - delete p; - p = 0; - } - } - - operator bool() { - return (p != 0) && alive; - } - - auto_renderer_decorator & operator=(renderer_decorator *p) { - reset(); - this->p = p; - return *this; - } - - renderer_decorator * get() { - return p; - } - - renderer_decorator * operator->() { - return get(); - } -}; - -auto_renderer_decorator decorator; - -DFhackCExport command_result plugin_init ( color_ostream &out, vector &commands) -{ - if (!df::renderer::_identity.can_instantiate()) - { - out.printerr("Cannot allocate a renderer\n"); - return CR_OK; - } - if (!decorator) { - decorator = renderer_decorator::hook(active_renderer(), &decorator.alive); - } - return CR_OK; -} - -DFhackCExport command_result plugin_shutdown ( color_ostream &out ) -{ - if (decorator && active_renderer() == decorator.get()) - { - renderer_decorator::unhook(active_renderer(), decorator.get(), out); - } - decorator.reset(); - return CR_OK; -} -// vim:set sw=4 sts=4 et: