diff --git a/changelog.txt b/changelog.txt index ba1435d045..6bcec1b704 100644 --- a/changelog.txt +++ b/changelog.txt @@ -27,6 +27,7 @@ Template for new versions: # Future ## New Tools +- `sync-windmills`: synchronize or randomize movement of active windmills ## New Features diff --git a/docs/sync-windmills.rst b/docs/sync-windmills.rst new file mode 100644 index 0000000000..5696b82694 --- /dev/null +++ b/docs/sync-windmills.rst @@ -0,0 +1,32 @@ +sync-windmills +============== + +.. dfhack-tool:: + :summary: Synchronize or randomize windmill movement. + :tags: fort buildings + +This tool can adjust the appearance of running windmills so that they are +either all in synchronization or are all completely randomized. + +Usage +----- + +:: + + sync-windmills [] + +Examples +-------- + +``sync-windmills`` + Make all active windmills synchronize their turning. +``sync-windmills -r`` + Randomize the movement of all active windmills. + +Options +------- + +``-q``, ``--quiet`` + Suppress non-error console output. +``-r``, ``--randomize`` + Randomize windmill state. diff --git a/sync-windmills.lua b/sync-windmills.lua new file mode 100644 index 0000000000..a50e6fdbe1 --- /dev/null +++ b/sync-windmills.lua @@ -0,0 +1,32 @@ +local argparse = require('argparse') + +local function process_windmills(rotate_fn, timer_fn) + for _, bld in ipairs(df.global.world.buildings.other.WINDMILL) do + if bld.is_working ~= 0 then + bld.visual_rotated = rotate_fn() + bld.rotate_timer = timer_fn() + end + end +end + +local opts = {} +argparse.processArgsGetopt({...}, { + { 'h', 'help', handler = function() opts.help = true end }, + { 'q', 'quiet', handler = function() opts.quiet = true end }, + { 'r', 'randomize', handler = function() opts.randomize = true end }, +}) + +if opts.help then + print(dfhack.script_help()) + return +end + +process_windmills( + opts.randomize and function() return math.random(1, 2) == 1 end or function() return false end, + opts.randomize and function() return math.random(0, 74) end or function() return 0 end) + +if not opts.quiet then + print(('%d windmills %s'):format( + #df.global.world.buildings.other.WINDMILL, + opts.randomize and 'randomized' or 'synchronized')) +end