Add Archery training masterclass by Mech
With loads of gifs.
14
index.rst
|
@ -56,6 +56,20 @@ and the Bay12 Forums will be your best friends.
|
||||||
tutorials/*
|
tutorials/*
|
||||||
|
|
||||||
|
|
||||||
|
Masterclass
|
||||||
|
===========
|
||||||
|
A masterclass is a tutorial on an advanced topic, aimed at experienced
|
||||||
|
players. You'll be taken through some of the most difficult challenges
|
||||||
|
DF offers, and see how an expert does things.
|
||||||
|
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
:glob:
|
||||||
|
|
||||||
|
masterclass/*
|
||||||
|
|
||||||
|
|
||||||
Other Information
|
Other Information
|
||||||
=================
|
=================
|
||||||
|
|
||||||
|
|
161
masterclass/archery-training.rst
Normal file
|
@ -0,0 +1,161 @@
|
||||||
|
################
|
||||||
|
Training Archers
|
||||||
|
################
|
||||||
|
|
||||||
|
|
||||||
|
Source: :reddit:`Mechanixm's Archery Training Primer <2k65yc>`
|
||||||
|
|
||||||
|
.. image:: images/archery01.gif
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
I've had several requests to create a guide as to how I set up the
|
||||||
|
Archery Training Room of Highsteppes. I'll go through the core steps
|
||||||
|
to train crossbow dwarves. I assume you have some DF experience, so I won't
|
||||||
|
tell you literally everything.
|
||||||
|
|
||||||
|
|
||||||
|
Building the training room
|
||||||
|
==========================
|
||||||
|
Dig out a simple 11x11 room and seal it off with doors. There is
|
||||||
|
nothing special about this... it's just a room. Then build the targets
|
||||||
|
(:kbd:`b`, :kbd:`A`) in a vertical line, one space from the walls.
|
||||||
|
|
||||||
|
.. image:: images/archery03.gif
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
The material of the blocks used has no effect on anything. Dwarves
|
||||||
|
with Masonry enabled will come and build the targets.
|
||||||
|
|
||||||
|
Dig a channel next to the walls, to save any bolts that miss a target.
|
||||||
|
|
||||||
|
.. image:: images/archery04.gif
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
This way, if a bolt flies and hits the north or south wall,
|
||||||
|
it will be saved - bolts that are fired from one z-level and land
|
||||||
|
on another are not destroyed when they hit the ground.
|
||||||
|
Reclaiming ammunition like this is more useful for combat (ie metal)
|
||||||
|
bolts, so this is just to demonstrate the technique.
|
||||||
|
|
||||||
|
:kbd:`q`, :kbd:`r` each target and set its room size. Yes, you have
|
||||||
|
to do this for each of them.
|
||||||
|
|
||||||
|
.. image:: images/archery05.gif
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
If you're not planning to shoot from left to right, press
|
||||||
|
:kbd:`w`/:kbd:`a`/:kbd:`s`/:kbd:`d` to change the firing direction.
|
||||||
|
|
||||||
|
Creating the squad
|
||||||
|
==================
|
||||||
|
In my example, I haven't created any squads yet. I assign them
|
||||||
|
:guilabel:`No Uniforms` because I literally have no armor in this
|
||||||
|
fortress. Rename your squad if you wish. Assign all of your
|
||||||
|
Crossbow dwarves to the squad.
|
||||||
|
|
||||||
|
.. image:: images/archery06.gif
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
If you have uniforms created that contain crossbows, you should be
|
||||||
|
able to just assign your guys that uniform. Otherwise, manually
|
||||||
|
assign a crossbow to each dwarf as the example shows.
|
||||||
|
|
||||||
|
.. image:: images/archery07.gif
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
.. image:: images/archery08.gif
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
Highlight the squad name and press :kbd:`c` to add a new item.
|
||||||
|
Add Wood Bolts and Bone Bolts and set the amounts to 600 of each.
|
||||||
|
I've never had an issues with ammo when setting 100 bolts per
|
||||||
|
dwarf. The bolts are set for both Combat and Training.
|
||||||
|
|
||||||
|
When you graduate your dwarves out of a Training Squad to a Legit
|
||||||
|
Crossbow squad, only use metal ammo. Crappy materials are for
|
||||||
|
training.
|
||||||
|
|
||||||
|
You'll need some other supplies - waterskins, quivers, and backpacks.
|
||||||
|
|
||||||
|
.. image:: images/archery09.gif
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
Quivers are mandatory - marksdwarves won't train if they can't carry
|
||||||
|
ammo! Waterskins or flasks are optional, but your military dwarves need
|
||||||
|
them to carry booze and thus avoid drink breaks. Backpacks are used to
|
||||||
|
carry food with them, so they don't need a dining room to eat.
|
||||||
|
|
||||||
|
Make some crossbows and wooden bolts. I hardly ever
|
||||||
|
ever ever use wooden crossbows, but use whatever you want.
|
||||||
|
|
||||||
|
.. image:: images/archery10.gif
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
I have 6 dwarves in this Training Squad, so I'm going to create
|
||||||
|
minimum training orders. I then delete that unnecessary Train 10
|
||||||
|
minimum order by pressing :kbd:`Tab`, :kbd:`x`.
|
||||||
|
|
||||||
|
.. image:: images/archery11.gif
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
Press :kbd:`Tab` to get back up to the schedule grid where
|
||||||
|
it says :guilabel:`Train for each Month`. On the month I created
|
||||||
|
the 6 Train 1 Soldier minimum orders, I press :kbd:`c` to copy,
|
||||||
|
then :kbd:`p` paste those orders for each month of
|
||||||
|
the year. :guilabel:`Sleep in room` and :guilabel:`uniformed inactive`
|
||||||
|
stay at default settings.
|
||||||
|
|
||||||
|
Finally, :kbd:`s` for squads, :kbd:`a` to choose my squad, :kbd:`t`
|
||||||
|
to set active.
|
||||||
|
|
||||||
|
Assign your squad to the Archery Training Room.
|
||||||
|
===============================================
|
||||||
|
|
||||||
|
.. image:: images/archery14.gif
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
Yes. You need to do this for the room set from every target, individually.
|
||||||
|
Press :kbd:`q` and highlight an Archery Target Training Room,
|
||||||
|
highlight your squad and press :kbd:`t`. My squad is already highlighted
|
||||||
|
because I only have one squad right now. Set your squad to train
|
||||||
|
for each target... and let the training begin!
|
||||||
|
|
||||||
|
.. image:: images/archery15.gif
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
If you've done everything correctly, the dwarves will come in
|
||||||
|
and shoot. Once they are done, they will go on break.
|
||||||
|
It is not unusual for your dwarves to shoot an entire quiver while
|
||||||
|
training and then just sort of hang around for a month.
|
||||||
|
|
||||||
|
Instead, you can give the squad a Kill command to go kill some
|
||||||
|
helpless animal. After they kill it, they should go right back
|
||||||
|
to the training to train some more. Be patient, and your dwarves
|
||||||
|
will continue to train. They just like to take breaks after emptying
|
||||||
|
each quiver.
|
||||||
|
|
||||||
|
You'll need to create an ammunition stockpile in the room. DO NOT try to
|
||||||
|
store ammunition in bins; it's very buggy. Use a quantum stockpile or
|
||||||
|
learn to live with it.
|
||||||
|
|
||||||
|
Reclaim ammo from the channel with :kbd:`d`, :kbd:`b`, :kbd:`c`
|
||||||
|
and select the items to recover.
|
||||||
|
|
||||||
|
.. image:: images/archery19.gif
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
Your dwarves will grab the bolts and bring it over
|
||||||
|
to your ammo stockpile. In my case, it gets quantum stockpiled
|
||||||
|
which allows for easy grabbing when refilling quivers. Here is a
|
||||||
|
gif showing ammo reclamation during training. Notice how no one
|
||||||
|
gets hit in the crossfire. That is normal:
|
||||||
|
|
||||||
|
.. image:: images/archery20.gif
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
Slowly but surely their skills will rise.
|
||||||
|
|
||||||
|
Thanks for taking the time to read. A complete list of my other guides
|
||||||
|
can be `found here <http://mechguides.reddit.com>`_. If you have any
|
||||||
|
questions or comments, please let me know. **-Mech**
|
||||||
|
|
BIN
masterclass/images/archery01.gif
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
masterclass/images/archery03.gif
Normal file
After Width: | Height: | Size: 218 KiB |
BIN
masterclass/images/archery04.gif
Normal file
After Width: | Height: | Size: 253 KiB |
BIN
masterclass/images/archery05.gif
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
masterclass/images/archery06.gif
Normal file
After Width: | Height: | Size: 412 KiB |
BIN
masterclass/images/archery07.gif
Normal file
After Width: | Height: | Size: 301 KiB |
BIN
masterclass/images/archery08.gif
Normal file
After Width: | Height: | Size: 107 KiB |
BIN
masterclass/images/archery09.gif
Normal file
After Width: | Height: | Size: 189 KiB |
BIN
masterclass/images/archery10.gif
Normal file
After Width: | Height: | Size: 249 KiB |
BIN
masterclass/images/archery11.gif
Normal file
After Width: | Height: | Size: 550 KiB |
BIN
masterclass/images/archery14.gif
Normal file
After Width: | Height: | Size: 623 KiB |
BIN
masterclass/images/archery15.gif
Normal file
After Width: | Height: | Size: 167 KiB |
BIN
masterclass/images/archery19.gif
Normal file
After Width: | Height: | Size: 225 KiB |
BIN
masterclass/images/archery20.gif
Normal file
After Width: | Height: | Size: 366 KiB |
|
@ -11,6 +11,7 @@ from os.path import *
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
text_extensions = ('rst', 'md', 'txt', 'html', 'css', 'js')
|
text_extensions = ('rst', 'md', 'txt', 'html', 'css', 'js')
|
||||||
|
dirs = ['chapters', 'tutorials', 'masterclass']
|
||||||
|
|
||||||
|
|
||||||
def error(fname, lineno, issue):
|
def error(fname, lineno, issue):
|
||||||
|
@ -48,7 +49,6 @@ def unused_images(path):
|
||||||
"""Check that all files in image subdirs are references in the text."""
|
"""Check that all files in image subdirs are references in the text."""
|
||||||
print('Checking for unused images...')
|
print('Checking for unused images...')
|
||||||
failed = False
|
failed = False
|
||||||
dirs = ['chapters', 'tutorials']
|
|
||||||
for d in dirs:
|
for d in dirs:
|
||||||
text = ''
|
text = ''
|
||||||
for fname in glob(os.path.join(d, '*.rst')):
|
for fname in glob(os.path.join(d, '*.rst')):
|
||||||
|
@ -71,4 +71,6 @@ def unused_images(path):
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
# lint everything in the parent directory, wherever the script is run from.
|
# lint everything in the parent directory, wherever the script is run from.
|
||||||
p = relpath(join(dirname(__file__), '..'))
|
p = relpath(join(dirname(__file__), '..'))
|
||||||
sys.exit(lint(p) or unused_images(p))
|
failed = lint(p)
|
||||||
|
failed |= unused_images(p)
|
||||||
|
sys.exit(failed)
|
||||||
|
|