Macros and Keymaps
Dwarf Fortress требует активного использования клавиатуры. Но в распоряжении дварфовода также имеется встроенная система макросов. Благодаря ей или какой-либо внешней программе, Вы можете сэкономить много времени, когда требуется сделать множество указаний, перестроек, выбрасываний и т.д.
Встроенная система макросов DF
Создание макросов
В самом DF управление макросами следующее:
- Ctrl+r = начать/прекратить запись макроса
- Ctrl+p = воспроизвести макрос
- Ctrl+s = сохранить макрос
- Ctrl+l = загрузить макрос
- Ctrl+u + число = повторить макрос [число] раз
Чтобы создать макрос нажмите Ctrl+r, для начала записи Ваших действий. Бывает удобно начинать запись, находясь в меню указаний, когда Вы можете видеть позицию игрового курсора. Когда Вы произвели все необходимые действия и хотите остановить запись, снова нажмите Ctrl+r. Сохраните макрос, нажав Ctrl+s и введя название. Тогда макрос будет добавлен в ваш список макросов. Чтобы загрузить макрос из списка нажмите Ctrl+l и выберите макрос. Воспроизвести выбранный макрос можно нажатием Ctrl+p где бы вы не находились. Так же Вы можете повторить макрос требуемое число раз нажав Ctrl+u, введя двухзначное число (количество повторов) и затем нажав Ctrl+p для запуска макроса. Движение вашей мыши в окне или любое другое действие, в результате которого окно DwarfFortress потеряет фокус, является раздражающим хорошим способом для прерывания работы макроса (так же, это единственно известный способ).
Сохранённые макросы находятся в data/init/macros в .mak-файлах. Даже простейший макрос — например, создание пандуса(Ramp) шириной в 3-тайла — может содержать до 50 команд, так как все возможные назначения клавиш включаются в макрос и помещаются в его блок (r для создания пандуса используется многими по умолчанию).
pressing_enter_recorded SELECT CLOSE_MEGA_ANNOUNCEMENT WORLD_PARAM_ENTER_VALUE SETUPGAME_SAVE_PROFILE_GO D_BURROWS_DEFINE D_MILITARY_ALERTS_SET End of group CUSTOM_CTRL_R End of group End of macro
Для данного примера после записи макроса был нажат Enter после чего запись макроса была остановлена. При использовании этого макроса каждая команда, находящаяся в файле будет вызвана, если это возможно. Если вы находитесь в меню назначений данный макрос выполнит лишь команду Выбор (Select), все остальные команды будут проигнорированы. Если же вы находитесь в меню нор он сработает так, как будто бы вы нажали Enter здесь. Макрос всегда заканчивается блоком, содержащим конец (End of macro) его записи. Если Вы изменили назначение клавиш, вы получите другой результат, потому что записываются команды, а не нажатые клавиши.
При создании (или редактировании) макросов рекомендуется использовать только те команды, которые действительно нужны.
ramping_created DESIGNATE_RAMP End of group CURSOR_DOWN_Z End of group SELECT End of group CURSOR_RIGHT End of group CURSOR_RIGHT End of group SELECT End of group CURSOR_LEFT End of group CURSOR_LEFT End of group CURSOR_UP End of group End of macro
Этот макросы был написан вручную и предназначен для создания пандуса шириной в 3 тайла на один уровень ниже и размещающем курсор для повторного запуска макроса и быстрого создания пандуса ниже. Первая строчка - название файла. Каждое нажатие клавиши "закрывается" группирующим тэгом (End of group). Это необходимо для работы макроса.
Неизвестно, можно ли использовать циклы/итерации, а так же другие возможности программирования или комментирования.
Редактирование, удаление или добавление макросов при запущенной игре является нелогичным. После редактирования файла макроса вы должны удалить и заново загрузить макрос. Для этого выберите Select Options>KeyBindings>Macros. Удалите макрос и загрузите его используя Ctrl+l.
Тонкая настройка макросов
Чем меньше команд содержит макрос, тем быстрее он работает. Это означает, что нужно избегать лишних шагов, оптимизируя "путь" Ваших указаний.
Второй и самый эффективный способ увеличить скорость состоит в том, чтобы удалить все ненужные команды DF из макроса, при помощи текстового редактора. Несмотря на то, что дополнительные команды игнорируются игрой, они отнимают время на обработку. Например для движения курсора вверх/вниз будет записано 3 команды, а для движения налево/направо - 4, большинство остальных клавиш запишут в макрос гораздо больше. Нажатие d, для примера, запишет более 30 команд.
После редактирования макроса требуется загрузить его заново в игре, смотрите выше
Для примера ниже представлен код простого макроса, который переходит в меню Назначений, выбирает команду копать d,d, затем двигается на один квадрат вправо и назначает этот тайл для раскопок.
example OPTION4 CUSTOM_D WORLD_PARAM_DELETE LEGENDS_EXPORT_DETAILED_MAP A_COMBAT_DODGE A_STATUS_DESC A_SLEEP_DAWN A_INV_DROP SETUP_NOTES_DELETE_NOTE BUILDJOB_TARGET_RIGHT BUILDJOB_BED_DORMITORY BUILDJOB_FARM_WINTER BUILDJOB_RACKSTAND_KILL2 HOTKEY_BUILDING_DOOR HOTKEY_BUILDING_CONSTRUCTION_STAIR_DOWN HOTKEY_BUILDING_WORKSHOP_DYER BUILDING_ORIENT_RIGHT BUILDING_ADVANCE_STAGE BUILDING_TRIGGER_MAX_SIZE_DOWN BUILDING_TRACK_STOP_DUMP HOTKEY_GLASS_DOOR HOTKEY_CARPENTER_DOOR HOTKEY_MASON_DOOR HOTKEY_TRAP_DOOR BUILDJOB_STOCKPILE_DELETE_CHILD STOCKPILE_ARMOR STOCKPILE_SETTINGS_DISABLE STORES_DUMP ORDERS_DYED_CLOTH ORDERS_ZONE_DRINKING D_DESIGNATE D_HAULING_STOP_LC_DIR D_BURROWS_DELETE D_NOTE_DELETE D_NOTE_ROUTE_DELETE D_BITEM_DUMP D_LOOK_DUMP ARENA_CREATURE_SIDE_UP ASSIGNTRADE_SORT DESIGNATE_DUMP DESIGNATE_DIG ITEM_DUMP D_MILITARY_DISBAND_SQUAD D_MILITARY_ALERTS_DELETE D_MILITARY_AMMUNITION_REMOVE_ITEM D_MILITARY_DELETE_UNIFORM STRING_A100 End of group STANDARDSCROLL_RIGHT CURSOR_RIGHT WORLD_PARAM_INCREASE A_MOVE_E End of group SELECT CLOSE_MEGA_ANNOUNCEMENT WORLD_PARAM_ENTER_VALUE SETUPGAME_SAVE_PROFILE_GO D_BURROWS_DEFINE D_MILITARY_ALERTS_SET End of group SELECT CLOSE_MEGA_ANNOUNCEMENT WORLD_PARAM_ENTER_VALUE SETUPGAME_SAVE_PROFILE_GO D_BURROWS_DEFINE D_MILITARY_ALERTS_SET End of group CUSTOM_CTRL_R End of group End of macro
Ниже представлен макрос, выполняющий те же самые действия, только оптимизированный путем удаления ненужных (избыточных) команд. Так же каждый макрос содержит дополнительную команду CUSTOM_CTRL_R в конце, которая может быть удалена без проблем.
example DESIGNATE_DIG End of group CURSOR_RIGHT End of group SELECT End of group SELECT End of group End of macro
Третий способ увеличения скорости работы макроса заключается в редактировании файлов настроек. В основном файле настроек (data/init/init.txt) вы можете увидеть следующие строки: The third way is to change settings in the init-files. In the base init file (data/init/init.txt) you will find the follow lines:
If you set KEY_REPEAT_ACCEL_LIMIT above one, then after KEY_REPEAT_ACCEL_START repetitions the repetition delay will smoothly decrease until repetition is this number of times faster than at the start. [KEY_REPEAT_ACCEL_LIMIT:8] [KEY_REPEAT_ACCEL_START:10] This controls the number of milliseconds between macro instructions. [MACRO_MS:15]
MACRO_MS
регулирует время (в миллисекундах) между командами макроса. (Значение по умолчанию, 15, дает 1000/15 команд в секунду, т.е. около 66). Уменьшение этого значения увеличивает скорость выполнению макроса. При значительном снижении этого параметра игра может не отвечать при выполнении макроса.KEY_REPEAT_ACCEL_START
иKEY_REPEAT_ACCEL_LIMIT
не связаны с выполнением макросов (за исключением записи).
Внешние утилиты
QuickFort
Дополнительная утилита для Dwarf Fortress основанная на таблицах. Переводит CSV файлы, содержащие "графическое" (или как минимум двумерное) представление Ваших желаний в обычные макросы DF. Включает в себя некоторое количество скриптов для быстрого старта, некоторые из них довольно сложны. Входит в состав Lazy Newb Pack.
AutoHotKey
- Скачайте AutoHotKey в Utilities#AutoHotKey. Установка проста и утилита использует мало системных ресурсов.
- Запишите макрос (сохраняется в формате .ahk), содержащий любое количество команд. Скрипт запускается двойным кликом по файлу .ahk и выключается кликом правой кнопки мыши по иконке AutoHotKey в трее. Это можно сделать в любое время - даже посреди игры. AutoHotKey также способен сам запускать скрипты.
Полезные идеи для макросов
Далее идут идеи для макросов, которые сделают управление Вашим фортом значительно легче. При запуске большинства макросов рекомендуется поставить игру на паузу (Space) до запуска макроса, чтобы при неожиданном поведение гномов (например при рождении ребенка) или по другой причине не сработала авто-фокусировка и макрос не выполнился бы в другом месте.
Комплекс спален
Спальни, особенно большие или другие блоки идентичных построек требуют большое количество назначений и операций по постройке. Эти макросы предназначены для ускорения процесса. Для всех макросов, включающих в себя размещение большого количества мебели или других объектов рекомендуется временно заблокировать артефакты и предметы высокого качества чтобы они не доставлись для обычных дворфов.
Размещение кроватей
Итак, вы записали макрос для раскопки комплекса спален, теперь необходимо разместить в них мебель. Перейдите в меню строительства (build menu), выберите кровати (bed) и перейдите на первую клетку, где Вы хотите разместить кровать.
Начните запись макроса (Ctrl+r) и разместите первую кровать (выберите первую кровать из списка), затем перейдите к следующей спальне последовательно. Повторяйте требуемое количество раз,например, если Вы выкопали несколько горизонтальных рядов спален, то, разместите кровати до конца первого рядя и переместите курсор в начало второго, для ускорения. Выключите запись макроса (Ctrl+r), но не выходите из меню Строительства. Вы можете сохранить макрос (Ctrl+s), хотя это и не обязательно. Воспроизведите макрос (Ctrl+p) и в результате у вас будут кровати во втором ряду. Повторяйте требуемое количество раз.
Размещение других предметов
Можно записать дополнительные макросы для размещение шкафов, столов, стульев или дверей или воспользоваться предыдущим. Для размещения других предметов по такой же сетке можно воспользоваться предыдущим макросом. Именно для этого выбор предмета для установки был сделан до записи макроса. Выберите другой предмет, например шкаф (cabinet) и запустите макрос. Если вы хотите записать другой макрос выберите требуемый предмет в меню строительства и повторите запись и воспроизведение, как в предыдущем пункте.
Данная статья помечена как не оконченная. Вы можете прочитать эту статью на английском или помочь проекту её переводом. |
Размещение гробов
Размещение гробов (а не мешков) требует дополнительного шага. Поставьте игру на паузу (Вы ведь делаете это всегда, до запуска макроса) и перейдите в меню настройки запасов. Запретите (forbid) все сумки (Bags) независимо от содержимого или предназначения (это временная мера). Выйдите в основное меню и повторите шаги выше, размещая в ваших комнатах контейнеры.
(but not bags) requires an extra step. Pause the game (you did remember to pause before playing macros, didn't you?) and go to the Stocks menu. Forbid all bags, regardless of what's inside them or what they're being used for (this is temporary). Exit to main screen and repeat the steps above, this time placing containers in your rooms. You will end up placing only chests / coffers / boxes, ignoring any bags. Repeat and play back for the rest of your bedrooms, then un-forbid your bags before un-pausing the game.
Resizing Rooms
If the bedroom is finished (at least all the beds are hauled to place), you may want to create a new macro to designate each room as a bedroom. query the building and select the first bed. Start a new macro and press r to designate it as a bedroom, then press + a few times to fill the available space. If you are fine with the size of the bedroom you can press enter, move on to the next bed, and repeat this for the whole row. If you want bedrooms that fill all the room and not all your bedrooms are the same size, you may have to press + a bit more or less for the larger cases. Repeat this for the rest of the rows as above.
Mass Selector
With this macro you can select a lot of things at once. Extremely helpful if you want to sell a lot of junk to the caravans. Record enter, then down about 10-25 times in a row. (For some menus you may wish to use enter, then +) When the caravan arrives, your dwarves haul all the bins to your Trade Depot for sale as normal. At the trade menu, load the macro and play it as many times as you like. The macro will select all the items in your "for sale" list, saving the bins you carried them in for later use. Be sure to at least browse through the final list once you're done to avoid selling items you didn't wish to sell, i.e. items that were in the same bin as your trade goods that you wish to keep, or wood items if you're trading with the Elves.
Mass Trap Builder
It's basically just the same as building items in bedrooms, but for traps. Useful for populating entire hallways with weapon or stone-fall traps.
Custom Uniforms
Since custom uniforms are not saved from one fortress to another, it can be tedious to remake them after each new embark. Instead, you can record a few macros to create each of your custom uniforms (Axedwarves with full armor, Wrestlers with light armor, Archers, Civilians, etc.) It is recommended to start recording each macro from the main window, before entering the (m)ilitary screen, and to avoid naming the uniform as part of the macro. Because of the way the uniform menu is set up, you should also be careful not to move the cursor back into the uniform list during the recording of your macro, or problems may arise. As always, pause the game before you start recording or playback.
Digging in Odd Directions/Shapes
While it is very simple and fast to designate mining in any of the 6 possible linear directions (North, East, South, West, Up, and Down) in very long sections, specialized mining, such as diagonal hallways, circular rooms, etc., are more difficult. It may be worth, for example, recording 4 macros that dig a short section of 3-tile wide hallway in non-standard directions (NE, NW, SW, and SE). This way, when you want a hallway dug at a 45 degree angle you just load the appropriate macro and keep playing it until the hallway is the desired length.
Downshafts
Simple up/down stairs are easy to do, but if your standard fort layout includes stairs with empty spaces around them, like so...
(rooms) %%..%% %....% (more ..XX.. (still rooms) ..XX.. more %....% rooms) %%..%% (etc...)
...it can be cumbersome to designate all of that for multiple Z-levels at once. Instead, create a macro from one reference point (say, the top-left staircase of the 2x2 shaft or some such) and hit record, then designate the staircase area as you see fit. Move the cursor back to your reference point and move down one Z-level, then stop recording. You can now load it up and play it wherever you need it.
For added awesomeness, trim out the extra commands in a text editor as described above. Then highlight the whole macro and copy/paste it into a new file, copying the commands 5 times or as many as you want. Then save the new macro as a separate file (be sure to rename it at the top of the macro text as well). In this way you can have easy-to-use macros for digging your own standard stairwell. Separate macros for 1 level, 5 levels, and 20 levels seem to work well.
Troubleshooting Scripts
Users may experience some issues in getting external scripts to work, particularly when using looping scripts when experiencing low frame-rates.
- If experiencing low frame-rates, try adding delays ("Sleep 100" to pause for 100 milliseconds for example) within macros to allow the interface to keep up. If there are nested loops, sometimes adding a pause at the end of an inner loop is all that is needed to flush the keyboard buffer.
- Another way to add delay during and after each simulated key press is to put SetKeyDelay, 40, 40 at the start of the macro.
- Make sure that Dwarf Fortress maintains focus. IM windows are the enemy! Who needs friends anyhow? You've got Dwarf Fortress.
- This may go without saying, but most macros assume standard key-mappings. If you're using non-standard ones, you may have to edit the macro to get it to work.
- Visiting liaisons can bring up screens that eat keystrokes, throwing a long-looping script out-of-phase with where it expects the game to be. Wait for the farewell screen before running a long script, or just pause the game beforehand.
- The SendPlay function supports keys that the Send function does not, for example Shift-Enter. According to the AutoHotKey documentation, SendPlay may also be better at preventing dropped keystrokes.
General Fortress Mode Hotkeys Script
An attempt at speeding up various designations. Includes an up/down stair builder, a fast move up/down, and some select-and-advance keys. Please see user:DDR#Dwarf_Fortress_General_AHK_Script.