summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/wargame
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-09-25 03:00:53 +0000
committerNorbert Preining <norbert@preining.info>2022-09-25 03:00:53 +0000
commitce8083552e0d948bf495e72d5c4d2680b505c90b (patch)
tree6c741e76b2a9e41d5c1b57a15ffa28d74c5317d8 /macros/latex/contrib/wargame
parent41d1be12f4963b0f5bf9903116883f1458b58960 (diff)
CTAN sync 202209250300
Diffstat (limited to 'macros/latex/contrib/wargame')
-rw-r--r--macros/latex/contrib/wargame/README.md270
-rw-r--r--macros/latex/contrib/wargame/doc/README.md270
-rw-r--r--macros/latex/contrib/wargame/doc/compat.pdfbin0 -> 432846 bytes
-rw-r--r--macros/latex/contrib/wargame/doc/symbols.pdfbin0 -> 184526 bytes
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/Makefile51
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/README.md41
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/export.tex385
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/game.pdfbin0 -> 583710 bytes
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/game.sty2042
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/game.tex200
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/patch.py31
-rw-r--r--macros/latex/contrib/wargame/doc/wargame.pdfbin0 -> 1305909 bytes
-rw-r--r--macros/latex/contrib/wargame/source/Makefile334
-rw-r--r--macros/latex/contrib/wargame/source/chit/core.dtx47
-rw-r--r--macros/latex/contrib/wargame/source/chit/elements.dtx105
-rw-r--r--macros/latex/contrib/wargame/source/chit/misc.dtx460
-rw-r--r--macros/latex/contrib/wargame/source/chit/shape.dtx544
-rw-r--r--macros/latex/contrib/wargame/source/hex/board.dtx253
-rw-r--r--macros/latex/contrib/wargame/source/hex/coord.dtx350
-rw-r--r--macros/latex/contrib/wargame/source/hex/core.dtx94
-rw-r--r--macros/latex/contrib/wargame/source/hex/extra.dtx83
-rw-r--r--macros/latex/contrib/wargame/source/hex/labels.dtx160
-rw-r--r--macros/latex/contrib/wargame/source/hex/paths.dtx416
-rw-r--r--macros/latex/contrib/wargame/source/hex/ridges.dtx139
-rw-r--r--macros/latex/contrib/wargame/source/hex/shape.dtx368
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain.dtx248
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/beach.dtx698
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/city.dtx5138
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/light_woods.dtx848
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/mountain.dtx26
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/mountains.dtx695
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/rough.dtx1570
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/swamp.dtx317
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/town.dtx1061
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/tree.dtx31
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/village.dtx352
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/woods.dtx1011
-rw-r--r--macros/latex/contrib/wargame/source/hex/tile.dtx25
-rw-r--r--macros/latex/contrib/wargame/source/hex/towns.dtx96
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/activity.dtx39
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/air.dtx87
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/equipment.dtx99
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/installation.dtx43
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/land.dtx266
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/missile.dtx14
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/seamine.dtx18
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/seasurface.dtx131
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/space.dtx51
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/subsurface.dtx67
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/core.dtx226
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/echelon.dtx82
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/frames/base.dtx70
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/frames/friendly.dtx427
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/frames/hostile.dtx453
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/frames/neutral.dtx405
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/frames/unknown.dtx483
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/list.dtx266
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/shape.dtx647
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/symbols.dtx3165
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/text.dtx57
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/util.dtx60
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/weaponry.dtx88
-rw-r--r--macros/latex/contrib/wargame/source/package.dtx48
-rw-r--r--macros/latex/contrib/wargame/source/tests/chits.dtx74
-rw-r--r--macros/latex/contrib/wargame/source/tests/map.dtx57
-rw-r--r--macros/latex/contrib/wargame/source/tests/test.tex172
-rw-r--r--macros/latex/contrib/wargame/source/util/core.dtx1299
-rwxr-xr-xmacros/latex/contrib/wargame/source/utils/export.py3562
-rwxr-xr-xmacros/latex/contrib/wargame/source/utils/svg2tikz.py365
-rw-r--r--macros/latex/contrib/wargame/source/wargame.dtx2455
-rw-r--r--macros/latex/contrib/wargame/source/wargame.ins176
71 files changed, 34211 insertions, 0 deletions
diff --git a/macros/latex/contrib/wargame/README.md b/macros/latex/contrib/wargame/README.md
new file mode 100644
index 0000000000..e5fd92458c
--- /dev/null
+++ b/macros/latex/contrib/wargame/README.md
@@ -0,0 +1,270 @@
+# A package to make Hex'n'Counter wargames in LaTeX
+## Version 0.2
+
+This package can help make classic [Hex'n'Counter wargames][1] using
+LaTeX. The package provide tools for generating
+
+- Hex maps and boards
+- Counters (called _chits_ since TeX have already taken _counters_)
+ for units, markers, and so on
+- Counter sheets
+- Order of Battle charts
+- Illustrations in the rules using the defined maps and counters
+
+The result will often be a PDF (or set of PDFs) that contain
+everything one will need for a game (rules, charts, boards, counter
+sheets).
+
+- The package uses [NATO App6](#NATO-App6) symbology for units.
+- The package uses [TikZ][2] for most things.
+- The package support exporting the game to a
+ [VASSAL](#VASSAL-support) module
+
+## Sources
+
+The sources of the package are kept at [GitLab][3]
+
+## CTAN
+
+The package is available from [CTAN][4] in the directory
+`/macros/latex/contrib/wargame`. As of this writing, the package has
+not hit any of the major distributions (e.g., [TeXLive][5]).
+
+If you get the sources (`wargame.ins`, all `.dtx` and `.py`) files,
+then to install do
+
+ latex wargame.ins
+ pdflatex beach
+ pdflatex city
+ pdflatex light_woods
+ pdflatex mountains
+ pdflatex rough
+ pdflatex swamp
+ pdflatex town
+ pdflatex village
+ pdflatex woods
+
+(You need to use `pdflatex`, `xelatex`, or `lualatex` - plain `latex`
+with DVI output will not work)
+
+Then copy the relevant files to your TeX tree (e.g., `~/texmf/`)
+as
+
+ mkdir ~/texmf/tex/latex/wargame
+ cp tikzlibrary*.tex ~/texmf/tex/latex/wargame/
+ cp wargame.sty ~/texmf/tex/latex/wargame/
+ cp wgexpor.sty ~/texmf/tex/latex/wargame/
+ cp city.pdf ~/texmf/tex/latex/wargame/
+ cp light_woods.pdf ~/texmf/tex/latex/wargame/
+ cp mountains.pdf ~/texmf/tex/latex/wargame/
+ cp rough.pdf ~/texmf/tex/latex/wargame/
+ cp swamp.pdf ~/texmf/tex/latex/wargame/
+ cp town.pdf ~/texmf/tex/latex/wargame/
+ cp village.pdf ~/texmf/tex/latex/wargame/
+ cp woods.pdf ~/texmf/tex/latex/wargame/
+ cp export.py ~/texmf/tex/latex/wargame/
+ cp svg2tikz.py ~/texmf/tex/latex/wargame/
+
+To generate the documentation, after having done the above, do
+
+ pdflatex wargame.dtx
+ makeindex -s gind -o wargame.ind wargame.idx
+ pdflatex wargame.dtx
+ pdflatex wargame.dtx
+ pdflatex symbols.tex
+ pdflatex compat.tex
+ pdflatex compat.tex
+
+(You need to use `pdflatex`, `xelatex`, or `lualatex` - plain `latex`
+with DVI output will not work)
+
+You can install these into your TeX tree with (e.g., `~/texmf/`)
+
+ mkdir -p ~/texmf/doc/latex/wargame/
+ cp wargame.pdf ~/texmf/doc/latex/wargame/
+ cp symbols.py ~/texmf/doc/latex/wargame/
+ cp compat.py ~/texmf/doc/latex/wargame/
+
+If you want to generate the tutorial document, do
+
+ cd tutorial
+ pdflatex game
+ pdflatex game
+
+If you also want to make the tutorial VASSAL module, do (also in
+`tutorial`), do
+
+ pdflatex export.tex
+ ../export.py export.pdf export.json -o Game.vmod \
+ -d "Example module from LaTeX PnP game" \
+ -t "LaTeX wargame tutorial" -v 0.1 \
+ -p patch.py
+
+
+
+
+## Download from GitLab
+
+- [Zip file of package and support files][artifacts.zip]
+- [Browse content of package][browse]
+- [Documentation][wargame.pdf]
+- [Tutorial][tutorial.pdf] (and associated VASSAL [module][Game.vmod])
+- [Table of symbols][symbols.pdf]
+- [Compatibility][compat.pdf]
+
+To install, get the ([zip file][artifacts.zip]) and unzip into your
+TeX tree, for example
+
+ mkdir -p ~/texmf
+ (cd ~/texmf && unzip ../artifacts.zip)
+
+on Un*x like systems.
+
+## Tutorial
+
+See the [tutorial](tutorial/README.md) page for more.
+
+## Examples
+
+Below are some print'n'play board wargames made with this package.
+These are not original games but rather revamps of existing games.
+All credits goes to the original authors of these games.
+
+- WWII
+ - Eastern Front
+ - [Battle for Moscow][bfm_tex]
+ - [Hell's Gate][hellsgate_tex] (private)
+ - [Unternehmung 25][unternehmung_tex] (private)
+ - Western Front
+ - [D-Day][dday_tex] (Avalon Hill classic)
+ - [Paul Koenig's Market Garden][pkmg_tex]
+ - [Paul Koenig's D-Day][pkdday_tex]
+ - Pacific theatre
+ - [First Blood][firstblood_tex] (Avalon Hill International
+ Kriegspiel Association classic)
+ - [Malaya][malaya_tex] (private)
+ - Africa
+ - [Afrika Korps][afrikakorps_tex] (Avalon Hill classic)
+ - [Battles of El Alamein][boel_tex] (private)
+- Modern/Speculative
+ - [Strike Force One][sfo_tex]
+ - [Kriegspiel][kriegspiel_tex] (Avalon Hill classic)
+
+## VASSAL support
+
+The packages has the script [`export.py`](utils/export.py) to
+generate a draft [VASSAL][5] module from the defined charts, boards,
+counters, OOBs, and so on. More about this is given in the
+documentation.
+
+The script will generate a first draft of a module, which then can be
+edited in the VASSAL editor for the final thing.
+
+Alternatively, one can provide a Python script to do more on the
+generated module, such as defining starting positions, fixing grid
+layouts, and so on. Using such a patch script, one can get an
+(almost) final module. This means, that even if one makes changes to
+the original content, it is easy to remake the module without much
+need for the VASSAL editor.
+
+An example of this is given in the [Battle for Moscow][bfm_tex]
+project, and of course in the [tutorial](tutorial/)
+
+## NATO App6
+
+The package supports
+
+- All air, equipment, installation, land, sea surface, sub surface,
+ and space command symbols, including amplifiers and modifiers
+- All friendly, hostile, neutral, and unknown faction frame.
+ Undecided faction frames can be made by specifying `dashed` line
+ styles.
+- Some, but very few, other kinds of symbology.
+
+Here are some references for more information on the NATO App6
+symbology standard.
+
+- The [Wikipedia page][6] on NATO Joint Military Symbology
+- The [NATO page][7]. If this does not work for you, then try to go
+ to the [standards page][8] and put in and write in `SYMBOLOGY` in
+ the _Document Title Contains Words_ field and press _Start_.
+- Other LaTeX package for making NATO symbology [XMilSymb][9]
+
+## Copyright and license
+
+(c) 2022 Christian Holm Christensen
+
+This work is licensed under the Creative Commons
+Attribution-ShareAlike 4.0 International License (CC-BY-SA-4.0). To
+view a copy of this license, visit [CC][10] or send a letter to
+Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+### Some comments on copyright
+
+_Caveat_: I am not a lawyer.
+
+Note that this license applies to the `wargame` package as such. What
+you generate using the package is _not_ required to be licensed
+according to the _ShareAlike_ clause of CC-BY-SA-4.0. That is, you
+can license your materials _any way you want_.
+
+However, that copyright rights on games is not as prohibitive as you
+may think (see [this thread on BGG][11]). What you _can_ copyright is
+original, artistic expression. That is, the copyrighted work must not
+be a copy of something else (originality) and must be some form of
+expression. One _cannot_ copyright ideas, only their expression in so
+far as it is _artistic_ (i.e., not a trivial expression that anyone
+knowledgeable within the field can do with rudimentary effort).
+
+So you _can not_ copyright your game mechanics, for example, only how
+you described them. You _can not_ copyright a title (but you may be
+able to claim trademark on it). You _can_ copyright the wording of
+the rules, the graphics that you use, and so on.
+
+This also means, that you are essentially free to make your own
+version of previously published game, _as long as_
+
+- you do not copy existing text
+- you do not copy existing graphics
+- you respect any kind of trademark claims
+
+However, it is advisable to contact the copyright holders of the
+previously published game to avoid [SNAFU][12]. If in doubt, seek
+professional help.
+
+[1]: https://en.wikipedia.org/wiki/Wargame
+[2]: https://github.com/pgf-tikz/pgf
+[3]: https://gitlab.com/wargames_tex/wargame_tex
+[4]: https://ctan.org/tex-archive/macros/latex/contrib/wargame
+[5]: https://tug.org/texlive/index.html
+[6]: https://vassalengine.org
+[7]: https://en.wikipedia.org/wiki/NATO_Joint_Military_Symbology
+[8]: https://nso.nato.int/nso/nsdd/main/standards/ap-details/1912/EN
+[9]: https://nso.nato.int/nso/nsdd/main/standards
+[10]: https://github.com/ralphieraccoon/MilSymb
+[11]: http://creativecommons.org/licenses/by-sa/4.0/
+[12]: https://boardgamegeek.com/thread/493249/
+[13]: https://en.wikipedia.org/wiki/SNAFU
+
+
+[artifacts.zip]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/download?job=dist
+[browse]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/browse?job=dist
+[wargame.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/wargame.pdf?job=dist
+[tutorial.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/tutorial.pdf?job=dist
+[Game.vmod]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/Game.vmod?job=dist
+[symbols.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/symbols.pdf?job=dist
+[compat.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/compat.pdf?job=dist
+
+[bfm_tex]: https://gitlab.com/wargames_tex/bfm_tex
+[hellsgate_tex]: https://gitlab.com/wargames_tex/hellsgate_tex
+[unternehmung_tex]: https://gitlab.com/wargames_tex/unternehmung_tex
+[dday_tex]: https://gitlab.com/wargames_tex/dday_tex
+[pkmg_tex]: https://gitlab.com/wargames_tex/pkmg_tex
+[pkdday_tex]: https://gitlab.com/wargames_tex/pkdday_tex
+[firstblood_tex]: https://gitlab.com/wargames_tex/firstblood_tex
+[malaya_tex]: https://gitlab.com/wargames_tex/malaya_tex
+[afrikakorps_tex]: https://gitlab.com/wargames_tex/afrikakorps_tex
+[boel_tex]: https://gitlab.com/wargames_tex/boel_tex
+[sfo_tex]: https://gitlab.com/wargames_tex/sfo_tex
+[kriegspiel_tex]: https://gitlab.com/wargames_tex/kriegspiel_tex
+
diff --git a/macros/latex/contrib/wargame/doc/README.md b/macros/latex/contrib/wargame/doc/README.md
new file mode 100644
index 0000000000..e5fd92458c
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/README.md
@@ -0,0 +1,270 @@
+# A package to make Hex'n'Counter wargames in LaTeX
+## Version 0.2
+
+This package can help make classic [Hex'n'Counter wargames][1] using
+LaTeX. The package provide tools for generating
+
+- Hex maps and boards
+- Counters (called _chits_ since TeX have already taken _counters_)
+ for units, markers, and so on
+- Counter sheets
+- Order of Battle charts
+- Illustrations in the rules using the defined maps and counters
+
+The result will often be a PDF (or set of PDFs) that contain
+everything one will need for a game (rules, charts, boards, counter
+sheets).
+
+- The package uses [NATO App6](#NATO-App6) symbology for units.
+- The package uses [TikZ][2] for most things.
+- The package support exporting the game to a
+ [VASSAL](#VASSAL-support) module
+
+## Sources
+
+The sources of the package are kept at [GitLab][3]
+
+## CTAN
+
+The package is available from [CTAN][4] in the directory
+`/macros/latex/contrib/wargame`. As of this writing, the package has
+not hit any of the major distributions (e.g., [TeXLive][5]).
+
+If you get the sources (`wargame.ins`, all `.dtx` and `.py`) files,
+then to install do
+
+ latex wargame.ins
+ pdflatex beach
+ pdflatex city
+ pdflatex light_woods
+ pdflatex mountains
+ pdflatex rough
+ pdflatex swamp
+ pdflatex town
+ pdflatex village
+ pdflatex woods
+
+(You need to use `pdflatex`, `xelatex`, or `lualatex` - plain `latex`
+with DVI output will not work)
+
+Then copy the relevant files to your TeX tree (e.g., `~/texmf/`)
+as
+
+ mkdir ~/texmf/tex/latex/wargame
+ cp tikzlibrary*.tex ~/texmf/tex/latex/wargame/
+ cp wargame.sty ~/texmf/tex/latex/wargame/
+ cp wgexpor.sty ~/texmf/tex/latex/wargame/
+ cp city.pdf ~/texmf/tex/latex/wargame/
+ cp light_woods.pdf ~/texmf/tex/latex/wargame/
+ cp mountains.pdf ~/texmf/tex/latex/wargame/
+ cp rough.pdf ~/texmf/tex/latex/wargame/
+ cp swamp.pdf ~/texmf/tex/latex/wargame/
+ cp town.pdf ~/texmf/tex/latex/wargame/
+ cp village.pdf ~/texmf/tex/latex/wargame/
+ cp woods.pdf ~/texmf/tex/latex/wargame/
+ cp export.py ~/texmf/tex/latex/wargame/
+ cp svg2tikz.py ~/texmf/tex/latex/wargame/
+
+To generate the documentation, after having done the above, do
+
+ pdflatex wargame.dtx
+ makeindex -s gind -o wargame.ind wargame.idx
+ pdflatex wargame.dtx
+ pdflatex wargame.dtx
+ pdflatex symbols.tex
+ pdflatex compat.tex
+ pdflatex compat.tex
+
+(You need to use `pdflatex`, `xelatex`, or `lualatex` - plain `latex`
+with DVI output will not work)
+
+You can install these into your TeX tree with (e.g., `~/texmf/`)
+
+ mkdir -p ~/texmf/doc/latex/wargame/
+ cp wargame.pdf ~/texmf/doc/latex/wargame/
+ cp symbols.py ~/texmf/doc/latex/wargame/
+ cp compat.py ~/texmf/doc/latex/wargame/
+
+If you want to generate the tutorial document, do
+
+ cd tutorial
+ pdflatex game
+ pdflatex game
+
+If you also want to make the tutorial VASSAL module, do (also in
+`tutorial`), do
+
+ pdflatex export.tex
+ ../export.py export.pdf export.json -o Game.vmod \
+ -d "Example module from LaTeX PnP game" \
+ -t "LaTeX wargame tutorial" -v 0.1 \
+ -p patch.py
+
+
+
+
+## Download from GitLab
+
+- [Zip file of package and support files][artifacts.zip]
+- [Browse content of package][browse]
+- [Documentation][wargame.pdf]
+- [Tutorial][tutorial.pdf] (and associated VASSAL [module][Game.vmod])
+- [Table of symbols][symbols.pdf]
+- [Compatibility][compat.pdf]
+
+To install, get the ([zip file][artifacts.zip]) and unzip into your
+TeX tree, for example
+
+ mkdir -p ~/texmf
+ (cd ~/texmf && unzip ../artifacts.zip)
+
+on Un*x like systems.
+
+## Tutorial
+
+See the [tutorial](tutorial/README.md) page for more.
+
+## Examples
+
+Below are some print'n'play board wargames made with this package.
+These are not original games but rather revamps of existing games.
+All credits goes to the original authors of these games.
+
+- WWII
+ - Eastern Front
+ - [Battle for Moscow][bfm_tex]
+ - [Hell's Gate][hellsgate_tex] (private)
+ - [Unternehmung 25][unternehmung_tex] (private)
+ - Western Front
+ - [D-Day][dday_tex] (Avalon Hill classic)
+ - [Paul Koenig's Market Garden][pkmg_tex]
+ - [Paul Koenig's D-Day][pkdday_tex]
+ - Pacific theatre
+ - [First Blood][firstblood_tex] (Avalon Hill International
+ Kriegspiel Association classic)
+ - [Malaya][malaya_tex] (private)
+ - Africa
+ - [Afrika Korps][afrikakorps_tex] (Avalon Hill classic)
+ - [Battles of El Alamein][boel_tex] (private)
+- Modern/Speculative
+ - [Strike Force One][sfo_tex]
+ - [Kriegspiel][kriegspiel_tex] (Avalon Hill classic)
+
+## VASSAL support
+
+The packages has the script [`export.py`](utils/export.py) to
+generate a draft [VASSAL][5] module from the defined charts, boards,
+counters, OOBs, and so on. More about this is given in the
+documentation.
+
+The script will generate a first draft of a module, which then can be
+edited in the VASSAL editor for the final thing.
+
+Alternatively, one can provide a Python script to do more on the
+generated module, such as defining starting positions, fixing grid
+layouts, and so on. Using such a patch script, one can get an
+(almost) final module. This means, that even if one makes changes to
+the original content, it is easy to remake the module without much
+need for the VASSAL editor.
+
+An example of this is given in the [Battle for Moscow][bfm_tex]
+project, and of course in the [tutorial](tutorial/)
+
+## NATO App6
+
+The package supports
+
+- All air, equipment, installation, land, sea surface, sub surface,
+ and space command symbols, including amplifiers and modifiers
+- All friendly, hostile, neutral, and unknown faction frame.
+ Undecided faction frames can be made by specifying `dashed` line
+ styles.
+- Some, but very few, other kinds of symbology.
+
+Here are some references for more information on the NATO App6
+symbology standard.
+
+- The [Wikipedia page][6] on NATO Joint Military Symbology
+- The [NATO page][7]. If this does not work for you, then try to go
+ to the [standards page][8] and put in and write in `SYMBOLOGY` in
+ the _Document Title Contains Words_ field and press _Start_.
+- Other LaTeX package for making NATO symbology [XMilSymb][9]
+
+## Copyright and license
+
+(c) 2022 Christian Holm Christensen
+
+This work is licensed under the Creative Commons
+Attribution-ShareAlike 4.0 International License (CC-BY-SA-4.0). To
+view a copy of this license, visit [CC][10] or send a letter to
+Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+### Some comments on copyright
+
+_Caveat_: I am not a lawyer.
+
+Note that this license applies to the `wargame` package as such. What
+you generate using the package is _not_ required to be licensed
+according to the _ShareAlike_ clause of CC-BY-SA-4.0. That is, you
+can license your materials _any way you want_.
+
+However, that copyright rights on games is not as prohibitive as you
+may think (see [this thread on BGG][11]). What you _can_ copyright is
+original, artistic expression. That is, the copyrighted work must not
+be a copy of something else (originality) and must be some form of
+expression. One _cannot_ copyright ideas, only their expression in so
+far as it is _artistic_ (i.e., not a trivial expression that anyone
+knowledgeable within the field can do with rudimentary effort).
+
+So you _can not_ copyright your game mechanics, for example, only how
+you described them. You _can not_ copyright a title (but you may be
+able to claim trademark on it). You _can_ copyright the wording of
+the rules, the graphics that you use, and so on.
+
+This also means, that you are essentially free to make your own
+version of previously published game, _as long as_
+
+- you do not copy existing text
+- you do not copy existing graphics
+- you respect any kind of trademark claims
+
+However, it is advisable to contact the copyright holders of the
+previously published game to avoid [SNAFU][12]. If in doubt, seek
+professional help.
+
+[1]: https://en.wikipedia.org/wiki/Wargame
+[2]: https://github.com/pgf-tikz/pgf
+[3]: https://gitlab.com/wargames_tex/wargame_tex
+[4]: https://ctan.org/tex-archive/macros/latex/contrib/wargame
+[5]: https://tug.org/texlive/index.html
+[6]: https://vassalengine.org
+[7]: https://en.wikipedia.org/wiki/NATO_Joint_Military_Symbology
+[8]: https://nso.nato.int/nso/nsdd/main/standards/ap-details/1912/EN
+[9]: https://nso.nato.int/nso/nsdd/main/standards
+[10]: https://github.com/ralphieraccoon/MilSymb
+[11]: http://creativecommons.org/licenses/by-sa/4.0/
+[12]: https://boardgamegeek.com/thread/493249/
+[13]: https://en.wikipedia.org/wiki/SNAFU
+
+
+[artifacts.zip]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/download?job=dist
+[browse]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/browse?job=dist
+[wargame.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/wargame.pdf?job=dist
+[tutorial.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/tutorial.pdf?job=dist
+[Game.vmod]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/Game.vmod?job=dist
+[symbols.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/symbols.pdf?job=dist
+[compat.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/compat.pdf?job=dist
+
+[bfm_tex]: https://gitlab.com/wargames_tex/bfm_tex
+[hellsgate_tex]: https://gitlab.com/wargames_tex/hellsgate_tex
+[unternehmung_tex]: https://gitlab.com/wargames_tex/unternehmung_tex
+[dday_tex]: https://gitlab.com/wargames_tex/dday_tex
+[pkmg_tex]: https://gitlab.com/wargames_tex/pkmg_tex
+[pkdday_tex]: https://gitlab.com/wargames_tex/pkdday_tex
+[firstblood_tex]: https://gitlab.com/wargames_tex/firstblood_tex
+[malaya_tex]: https://gitlab.com/wargames_tex/malaya_tex
+[afrikakorps_tex]: https://gitlab.com/wargames_tex/afrikakorps_tex
+[boel_tex]: https://gitlab.com/wargames_tex/boel_tex
+[sfo_tex]: https://gitlab.com/wargames_tex/sfo_tex
+[kriegspiel_tex]: https://gitlab.com/wargames_tex/kriegspiel_tex
+
diff --git a/macros/latex/contrib/wargame/doc/compat.pdf b/macros/latex/contrib/wargame/doc/compat.pdf
new file mode 100644
index 0000000000..02dbab19cd
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/compat.pdf
Binary files differ
diff --git a/macros/latex/contrib/wargame/doc/symbols.pdf b/macros/latex/contrib/wargame/doc/symbols.pdf
new file mode 100644
index 0000000000..0f0ace1efb
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/symbols.pdf
Binary files differ
diff --git a/macros/latex/contrib/wargame/doc/tutorial/Makefile b/macros/latex/contrib/wargame/doc/tutorial/Makefile
new file mode 100644
index 0000000000..5d4061c347
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/Makefile
@@ -0,0 +1,51 @@
+#
+#
+#
+LATEX := pdflatex
+LATEX_FLAGS := -interaction=nonstopmode \
+ -file-line-error \
+ --synctex=15 \
+ -shell-escape
+EXPORT := ../utils/export.py
+EXPORT_FLAGS :=
+
+ifdef VERBOSE
+MUTE :=
+REDIR :=
+LATEX_FLAGS :=
+EXPORT_FLAGS := -V
+else
+MUTE := @
+REDIR := > /dev/null 2>&1
+endif
+
+
+%.aux:%.tex
+ @echo "LATEX $< -> $@"
+ $(MUTE)TEXINPUTS=:..: $(LATEX) $(LATEX_FLAGS) $< $(REDIR)
+
+%.pdf:%.aux
+ @echo "LATEX $*.tex -> $@ (via $*.aux)"
+ $(MUTE)TEXINPUTS=:..: $(LATEX) $(LATEX_FLAGS) $*.tex $(REDIR)
+
+%.pdf:%.tex
+ @echo "LATEX $< -> $@"
+ $(MUTE)TEXINPUTS=:..: $(LATEX) $(LATEX_FLAGS) $< $(REDIR)
+
+%.json:%.pdf
+
+all: game.pdf Game.vmod
+
+game.aux:game.tex game.sty export.tex
+export.pdf:export.tex game.sty
+
+Game.vmod:export.pdf export.json patch.py game.pdf
+ @echo "$(EXPORT) $< -> $@"
+ $(MUTE)$(EXPORT) export.pdf export.json -p patch.py -r game.pdf \
+ -d "Example module from LaTeX PnP game" \
+ -t "LaTeX wargame tutorial" -v 0.1 -o $@
+
+clean:
+ rm -f *~ *.log *.out *.aux *.pdf *.vmod *.json
+ rm -f *.synctex* *.hd
+ rm -rf __pycache__
diff --git a/macros/latex/contrib/wargame/doc/tutorial/README.md b/macros/latex/contrib/wargame/doc/tutorial/README.md
new file mode 100644
index 0000000000..92c884f6ef
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/README.md
@@ -0,0 +1,41 @@
+# Tutorial on how to use the `wargame` package
+
+This directory contains a tutorial on how to use the `wargame` package
+to make a hex'n'counter (Print'n'Play) wargame.
+
+It also contains information on how to make a VASSAL module from a
+game.
+
+## The PDF and VASSAL module
+-
+ [PDF](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/tutorial.pdf?job=dist)
+- [VASSAL
+ module](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/Game.vmod?job=dist)
+
+## Content
+
+- [`game.tex`](game.tex) The tutorial and game
+- [`game.sty`](game.sty) Package defining most stuff for the game
+- [`export.tex`](export.tex) Export graphics to VASSAL
+- [`patch.py`](patch.py) Patch VASSAL module
+
+## How to build
+
+To build the tutorial, simple do
+
+ pdflatex game
+ pdflatex game
+
+Alternatively, if you use some sort of LaTeX Integrated Development
+Environment (IDE), load [`game.tex`](game.tex) into your IDE and run
+LaTeX from there.
+
+To build the VASSAL module, simply do
+
+ pdflatex export.tex
+ `kpsewhich export.py` export.pdf export.json -o Game.vmod \
+ -d "Example module from LaTeX PnP game" \
+ -t "LaTeX wargame tutorial" -v 0.1 \
+ -p patch.py
+
+
diff --git a/macros/latex/contrib/wargame/doc/tutorial/export.tex b/macros/latex/contrib/wargame/doc/tutorial/export.tex
new file mode 100644
index 0000000000..adbb65ba6e
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/export.tex
@@ -0,0 +1,385 @@
+% \section{VASSAL module}
+% \label{sec:vassal}
+%
+% As already mentioned several times in this tutorial, we can use the
+% definitions of maps, counters, and charts to generate a VASSAL
+% module.
+%
+% \begin{quote}
+% VASSAL\footnote{\url{https://vassalengine.org}} is a
+% cross-platform\footnote{It is written in Java, meaning it runs
+% almost everywhere, except on iOS and Android} tool for playing
+% wargames against other humans or solitaire. One can do
+% Play-By-E-Mail (PBEM) or online.
+% \end{quote}
+%
+% The trick is to prepare a separate \LaTeX{} document, say
+% \texttt{export.tex} as in this tutorial, which exports the images as
+% single pages. Then, the Python script \texttt{export.py}
+% distributed with the \textsf{wargame} package picks up this output
+% (\texttt{export.pdf} and \texttt{export.json}) and generates a draft
+% VASSAL module.
+%
+% In addition, you can supply a Python script, say \texttt{patch.py},
+% which will be run on the draft module so that you fix things up in
+% the VASSAL module. In this way, your VASSAL module will likely need
+% very little hand editing (if at all), and will be robust against
+% changes in the \LaTeX{} code\footnote{Assuming you keep your Python
+% \texttt{patch.py} script up to date.}. This of course requires a
+% bit of familiarity with Python, which is time well spent.
+%
+% Let us get into it.
+%
+% \subsection{The \texttt{export.tex} file}.
+% \label{sec:export:tex}
+%
+% This file will output all the images to a PDF,
+% \meta{export}\texttt{.pdf} along with meta information to a
+% JSON\footnote{JavaScript Object Notation} file
+% \meta{export}\texttt{.json}. This is relatively simple to do.
+%
+% We need to use the document class \texttt{wgexport}, so lets go a
+% head and load that.
+%
+% \begin{macrocode}
+\documentclass[11pt]{wgexport}
+% \end{macrocode}
+%
+% Make sure you give the right font size as argument.
+%
+% This is where it pays off that we put all our definitions of
+% counters, board, charts, etc. into a separate package. To import
+% these, we simply use that package here\footnote{If we hadn't made
+% that package, we would have to repeat the definitions in some
+% way. Very error prone}. So we load the package and start our
+% document.
+%
+% \begin{macrocode}
+\usepackage{game}
+\begin{document}
+% \end{macrocode}
+%
+% Now the body of the document will simply consist of a list of
+% images, one for each side of each counter, the board, charts, and so
+% on. We need to put everything into the environment
+% \texttt{imagelist} which will keep track of our meta data.
+%
+% \begin{macrocode}
+\begin{imagelist}
+% \end{macrocode}
+%
+% So far so good. The first thing we will output are the counters.
+% For that we will use the macro \verb+\doublechitimages+ (if we had
+% single sided counters, we would use \verb+\chitimages+). This macro
+% takes two arguments: The list of counter definitions and the faction
+% of the chits. So lets go ahead and make those for factions A and B,
+% and the special faction ``Markers'' which will only be the game turn
+% counter.
+%
+% \begin{macrocode}
+\doublechitimages[A]{\alla}
+\doublechitimages[B]{\allb}
+\doublechitimages[Markers]{{game turn}}
+% \end{macrocode}
+%
+% Again, the macros we made for the counters comes in handy. Note
+% that we have used it twice so far: For the OOBs and here for the
+% VASSAL module. We will, in fact, use them one more time to create
+% the counter sheet.
+%
+% Right, so that made our counter images and the associated meta
+% data. Next thing is to add our board. For that, we use the
+% environment \texttt{boardimage}. Inside that environment we must
+% draw the board. The environment takes one optional argument which
+% classifies the board. Meaningful classifications are \texttt{board}
+% (default) and \texttt{oob} for OOBs. The first mandatory argument
+% is the name of the board (more or less free form text, except any of
+% ``\texttt{./\textbackslash '"}'' should not be used. The second
+% mandatory argument is a sub-category, and is mainly reserved for
+% future use.
+%
+% \begin{macrocode}
+\begin{boardimage}{Board}{}
+ \begin{board}
+ \end{board}
+\end{boardimage}
+% \end{macrocode}
+%
+% We will make another board image for our OOB, since that component
+% should hold counters in VASSAL. We pass the optional argument
+% \texttt{oob} in this case.
+%
+% \begin{macrocode}
+\begin{boardimage}[oob]{OOB}{}%
+ \fulloob
+\end{boardimage}
+% \end{macrocode}
+%
+% We have two charts that we would also like to be put in: The CRT and
+% the TE. These \emph{must} be put into \Tikz{} pictures, and we
+% precede those with the macro \verb+\info+. This macro takes three
+% arguments: The name of the next image, the category, and
+% sub-category. Again, the name is more or less free form, and the
+% category in some sense dictates how it will present in the VASSAL
+% module. For charts we should use the category \texttt{chart}. The
+% sub-category isn't really used at this point.
+%
+% \begin{macrocode}
+\info{CRT}{chart}{}
+\begin{tikzpicture}
+ \node{\crt};
+\end{tikzpicture}
+%
+\info{TEC}{chart}{}
+\begin{tikzpicture}
+ \node{\tec};
+\end{tikzpicture}
+% \end{macrocode}
+%
+% We also want background images for our pools of eliminated units in
+% VASSAL. This will be enlarged version of main headquarter unit of
+% each faction, overlayed with a white semi-transparent background.
+%
+% \begin{macrocode}
+\info{A}{pool}{}
+\begin{tikzpicture}[scale=7]
+ \chit[a hq];
+ \fill[white,opacity=.5](-.6,-.6)rectangle++(1.2,1.2);
+\end{tikzpicture}
+\info{B}{pool}{}
+\begin{tikzpicture}[scale=7]
+ \chit[b hq];
+ \fill[white,opacity=.5](-.6,-.6)rectangle++(1.2,1.2);
+\end{tikzpicture}
+% \end{macrocode}
+%
+% We can a splash page image. We have not defined such an image in
+% the \texttt{game} package, but we could have, so we will make it
+% here. Again, it should be a \Tikz{} picture. For this, we need to
+% use the category \texttt{front}.
+%
+% \begin{macrocode}
+\info{Splash}{front}{}
+\begin{tikzpicture}
+ \node[board frame,title,
+ minimum width=5cm,minimum height=5cm]
+ {A Game};
+\end{tikzpicture}
+% \end{macrocode}
+%
+% We could continue to add more if we wanted to. Basically anything
+% can be added. For example, one might want custom button icons or
+% the like. We will add a few such icons here, mainly to show how
+% the \texttt{patch.py} script works.
+%
+% First, a button icon for the pool window.
+%
+% \begin{macrocode}
+\info{pool-icon}{icon}{}
+\begin{tikzpicture}[scale=.15]
+ \draw[scale line widths,line width=4mm]
+ (0,1)--(0,-1) (-.7,.2)--(.7,.2);
+\end{tikzpicture}
+% \end{macrocode}
+%
+% The category \texttt{icon} has no special meaning. The icon will
+% look like \tikz[scale=.3]{\draw[scale line widths,line width=4mm]
+% (0,1)--(0,-1) (-.7,.2)--(.7,.2);}
+%
+% We also want to add a custom icon for the OOB button. VASSAL has a
+% button icon for the piece inventory which is really quite
+% appropriate, but alas it is already in use, so we will make our own
+% (albeit similar).
+%
+% \begin{macrocode}
+\info{oob-icon}{icon}{}
+\begin{tikzpicture}[scale=.6]
+ \draw[fill=friendly] (.1,0) rectangle(.5,-.1);
+ \draw[fill=friendly] (.1,-.15) rectangle(.3,-.25);
+ \draw[fill=friendly] (.1,-.3) rectangle(.2,-.4);
+ \draw[fill=hostile] (-.1,0) rectangle(-.3,-.25);
+\end{tikzpicture}
+% \end{macrocode}
+%
+% This looks like
+% \tikz{\draw[fill=friendly] (.1,0) rectangle(.5,-.1);
+% \draw[fill=friendly] (.1,-.15) rectangle(.3,-.25);
+% \draw[fill=friendly] (.1,-.3) rectangle(.2,-.4);
+% \draw[fill=hostile] (-.1,0) rectangle(-.3,-.25);}
+%
+% Normally the \texttt{export.py} script used the \emph{undo} image
+% for the flip button. However, that may be a bit confusing, so we
+% will use a large ``F'' instead. \tikz{\node[color=blue!75!black,font=\sffamily\bfseries\LARGE]{F}}
+%
+% And similarly for the ``Eliminate''\tikz{\node[color=red!75!black,font=\sffamily\bfseries\LARGE]{E}}
+%
+% and ``Restore'' buttons. \tikz{\node[color=green!75!black,font=\sffamily\bfseries\LARGE]{R}}
+%
+% \begin{macrocode}
+\info{flip-icon}{icon}{}
+\begin{tikzpicture}
+ \node[color=blue!75!black,inner sep=0pt,
+ font=\sffamily\bfseries\large]{F};
+\end{tikzpicture}
+%
+\info{eliminate-icon}{icon}{}
+\begin{tikzpicture}
+ \node[color=red!75!black,inner sep=0pt,
+ font=\sffamily\bfseries\large]{E};
+\end{tikzpicture}
+%
+\info{restore-icon}{icon}{}
+\begin{tikzpicture}
+ \node[color=green!75!black,inner sep=0pt,
+ font=\sffamily\bfseries\large]{R};
+\end{tikzpicture}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\end{imagelist}
+\end{document}
+% \end{macrocode}
+%
+% \subsection{Make the draft module}
+%
+% We run \LaTeX{} on the above \texttt{export.tex} file (the source of
+% this section) to generate \texttt{export.pdf} and
+% \texttt{export.json}. We then process these with the
+% \texttt{export.py} Python script to get the draft VASSAL module
+% \texttt{Draft.vmod}.
+%
+% \begin{verbatim}
+% `kpsewhich export.py` export.pdf export.json
+% \end{verbatim}
+%
+% The utility \texttt{kpsewhich}\footnotemark{\TeX{}Live and similar
+% \TeX{} distributions.} will report the location of a file in the
+% \TeX{} installation tree(s). Note that the \texttt{`} above are
+% what is typically called `back-ticks' (i.e., what you typically put
+% as the leading character of scare-crows in \LaTeX{}). This is of
+% course Un*x-like syntax. For other OSs, consult your \TeX{}
+% distribution's documentation for how to find files in the \TeX{}
+% installation.
+
+% You can open the module in the VASSAL editor and see what was
+% generated. On the board, all areas marked with the \texttt{zone
+% scope} (or \texttt{zone path}) should be defined as zones. In the
+% OOB, we should have two zones, one for the A faction and one for the
+% B faction. We should also have three groups of counters --- one
+% for each faction and one for ``Markers''. Finally, we should have a
+% window with tabs, one for each defined chart.
+%
+% We can add the rules to the module. So suppose the rules are in
+% \texttt{game.pdf}, then we can do
+%
+% \begin{verbatim}
+% `kpsewhich export.py` export.pdf export.json \
+% -r game.pdf -o Game.vmod
+% \end{verbatim}
+%
+% to add the rules to the ``Help'' menu. Other information is added
+% to that menu too, such as key-bindings and a short note on how the
+% module was generated. Of course, you should also see the splash
+% image that we defined. The option \texttt{-o}~\meta{filename}
+% writes the module to \meta{filename} rather than the default
+% \texttt{Draft.vmod}.
+%
+% We define the version of the module by passing the option
+% \texttt{-v}~\meta{version} to the Python script. By default, the
+% version is set to \texttt{draft}, and a note on the draft is added
+% to the module and the grids are drawn. Any other version string
+% will suppress these.
+%
+% Also, the default module name is \texttt{Draft} and a similar
+% description is likewise the default. We can change this by passing
+% the options \texttt{-t}~\meta{title} and
+% \texttt{-d}~\meta{description}. Note, you may want to quote the
+% arguments if they contain spaces or the like. Thus, to make a more
+% complete module, we would do something like
+%
+% \begin{verbatim}
+% `kpsewhich export.py` export.pdf export.json \
+% -r game.pdf -o Game.vmod \
+% -t "LaTeX Wargame tutorial" \
+% -d "Example of using wargame to make a module" \
+% -v 0.1
+% \end{verbatim}
+%
+% Note that you typically need to quote (\texttt{"}) longer strings
+% that contain spaces and other special characters.
+%
+% \subsection{Going the extra mile}
+% \label{sec:vassal:patch}
+%
+% We will take one more step on the VASSAL module, and then we will
+% get back to the Print'n'Play version of the game. We can provide
+% the \texttt{export.py} script with an additional Python script that
+% can tweak the VASSAL module any way we like. We can for example
+% move counters into their starting positions, to the OOB, adjust
+% grids, add more materials, and so on. It is only your imagination,
+% and Python programming skills, that sets the limits on what you can
+% do.
+%
+% Here we will make a simple \texttt{patch.py} Python script which
+% does very little. The \textsf{wargame} package,
+% \textsf{wgexport} class, and \texttt{export.py} script has already
+% done the heavy work for us. Not least be because we have taken care
+% to add in \texttt{zone} styles where needed.
+%
+% We will
+% put all the counters on the OOB chart, and adjust some grids - most
+% notably the OOB and turn track grids. Other than that, we will not
+% do much.
+%
+% \begin{verbatim}
+% `kpsewhich export.py` export.pdf export.json \
+% -r game.pdf -o Game.vmod
+% -t "LaTeX Wargame tutorial" \
+% -d "Example of using wargame to make a module" \
+% -v 0.1 -p patch.py
+% \end{verbatim}
+%
+% Now for the script:
+%
+% \begin{verbatim}
+% def patch(build,data,vmod,verbose=False):
+% # We need to import the export module :-)
+% import export
+%
+% # Get the game and last free GPID
+% game = export.get_game(build)
+% gpid = int(game.getAttribute('nextPieceSlotId'))
+%
+% # Get all boards
+% maps = export.get_maps(build)
+% board = maps['Board']
+%
+% mkeys = export.get_masskey(board,'name')
+% export.set_node_attr(mkeys['Eliminate'],
+% icon='eliminate-icon.png')
+% export.set_node_attr(mkeys['Flip'],
+% icon='flip-icon.png')
+%
+% # Get main map
+% pool = maps['DeadMap']
+% export.set_node_attr(pool,icon='pool-icon.png')
+%
+% mkeys = export.get_masskey(pool,'name')
+% export.set_node_attr(mkeys['Restore'],
+% icon='restore-icon.png')
+%
+% # Get the OOB map
+% oob = export.get_chartwindows(game)['OOBs']
+% export.set_node_attr(oob,icon='oob-icon.png')
+% \end{verbatim}
+%
+% In the \texttt{patch.py} script we can use all the functionality
+% provided by \texttt{export.py}. Elements are XML elements that we
+% apply \texttt{xml.dom.minidom} operations on.
+%
+% \iffalse
+% Local Variables:
+% mode: docTeX
+% TeX-master: "game.tex"
+% End:
+% \fi
diff --git a/macros/latex/contrib/wargame/doc/tutorial/game.pdf b/macros/latex/contrib/wargame/doc/tutorial/game.pdf
new file mode 100644
index 0000000000..875523b4d4
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/game.pdf
Binary files differ
diff --git a/macros/latex/contrib/wargame/doc/tutorial/game.sty b/macros/latex/contrib/wargame/doc/tutorial/game.sty
new file mode 100644
index 0000000000..0c8fcc0165
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/game.sty
@@ -0,0 +1,2042 @@
+% \section{The \texttt{game} package}
+% \label{sec:package}
+%
+% To make our game components re-usable (in particular when we want to
+% make a VASSAL module), we will put our definitions of counters,
+% board, and charts into a package file called
+% \texttt{game.sty}\footnote{In fact, most of this document is in that
+% file, because it allows us to document the code using \LaTeX{}'s
+% \texttt{ltxdoc} class.}
+%
+% Code shown below is in the package.
+%
+% The first thing we do in the package is to identify the package and
+% load the \textsf{wargame} package.
+%
+% \begin{macrocode}
+\ProvidesPackage{game}
+\RequirePackage{wargame}
+\RequirePackage{colortbl}
+% \end{macrocode}
+% \section{The units}
+% \label{sec:units}
+%
+% We will set-up our units for the game. As noted above, we will make
+% two factions which we will call \emph{A} and \emph{B}.
+%
+% \begin{quote}
+% The NATO
+% App6(d)\footnote{\url{https://nso.nato.int/nso/nsdd/main/standards/ap-details/1912/EN}}
+% symbology defines that friendly and hostile units should have
+% different symbol frames, but as we will make a game for two
+% players, and it seems unfair to label one as \emph{hostile} and
+% the other \emph{friendly}, we will stick with the
+% \texttt{friendly} base frames.
+%
+% Of course, if we were to make a solitaire or cooperative game, we
+% might want to use the \texttt{hostile} base frame for the opponent
+% units.
+% \end{quote}
+%
+% \subsection{Faction styles}
+% \label{sec:package:factions}
+%
+% We will start by defining two \Tikz{}\footnote{The \textsf{wargame}
+% package relies heavily on \Tikz{}. It is highly recommended that you
+% acquaint yourself with \Tikz{}. The manual, including tutorials, is
+% available from \url{https://ctan.org/pkg/pgf}.} styles for our two
+% factions. We will call these \texttt{a} and \texttt{b} (obviously).
+% These will define the colours of all counters of those sides.
+%
+% \begin{macrocode}
+\colorlet{a-bg}{hostile}
+\colorlet{b-bg}{friendly}
+\tikzset{%
+ a/.style={fill=a-bg,draw=black},
+ b/.style={fill=b-bg,draw=black}}
+% \end{macrocode}
+% Note that we made the colours \texttt{a-bg} and \texttt{b-bg}.
+% Since we will use these colours a few times, it makes sense to make
+% a single definition which we can then freely change at any point and
+% then automatically have that change propagate everywhere.
+%
+% These styles are shown in \figurename~\ref{fig:faction-colors}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \draw[a] (0,0) rectangle ++(1,1) node[above]{\texttt{a}};%
+% \draw[b] (3,0) rectangle ++(1,1) node[above]{\texttt{b}};%
+% \end{tikzpicture}
+% \caption{Faction colours}
+% \label{fig:faction-colors}
+% \end{figure}
+%
+% Here we have used the colours \texttt{friendly} and \texttt{hostile}
+% defined by the \textsf{wargame} package, even though we said we
+% would not use the corresponding \texttt{hostile} base frame.
+% However, we can use any colours we can define in \LaTeX{} with the
+% \textsf{xcolor}\footnote{\url{https://ctan.org/pkg/xcolor}} package,
+% for example,
+%
+% \begin{verbatim}
+% \definecolor{a-bg}{HTML}{3333ff}
+% \end{verbatim}
+%
+% which will make a light blue colour.
+%
+% Since we intent to make \emph{double-sided} counters, so that units
+% will have two steps (front and back), we also define styles for the
+% back side. These will have lighter backgrounds than the front
+% side.
+%
+% \begin{macrocode}
+\tikzset{%
+ a flipped/.style={a,fill=pgffillcolor!50!white},
+ b flipped/.style={b,fill=pgffillcolor!50!white}}
+% \end{macrocode}
+% Note that we use the styles \texttt{a} and \texttt{b} as bases for
+% these styles. Thus, if we make changes to the base styles, they
+% automatically propagate to our flipped styles.
+%
+% \begin{quote}
+% By convention, it is best to name your back-sides of counters and
+% so on the same as the front side, but with `\texttt{ flipped}'
+% appended. It is therefore also a good idea to use that convention
+% for styles and such.
+% \end{quote}
+%
+% The colour \texttt{pgffillcolor} is what ever the current fill
+% colour is (i.e., set by the \texttt{a} and \texttt{b} styles).
+%
+% These styles are shown in
+% \figurename~\ref{fig:faction-colors-flipped}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \draw[a flipped] (0,0) rectangle ++(1,1) node[above]{\texttt{a flippped}};%
+% \draw[b flipped] (3,0) rectangle ++(1,1) node[above]{\texttt{b flipped}};%
+% \end{tikzpicture}
+% \caption{Faction flipped colours}
+% \label{fig:faction-colors-flipped}
+% \end{figure}
+%
+% \subsection{Unit templates}
+% \label{sec:units:templates}
+%
+% In our game we will have two kinds of units: land, and air.
+%
+% Land units represent ground types of different kinds (infantry,
+% armoured, etc.) and have two \emph{factors}: A combat factor (CF)
+% and a movement factor (MF). In addition, for artillery units, we
+% will also specify a range. Each unit will also have a unique
+% identifier, and possibly parent organisational identifier, starting
+% hex, and turn of appearance.
+%
+% Air units provide different kinds of support for the ground units.
+% Since we will make a game on an \emph{operational} level (armies,
+% divisions, brigades), we will give air units a single factor --- the
+% odds column shift (see the combat resolution table later on).
+%
+% Let us first define a template for the ground units. We will call
+% this \texttt{gu} (for ground unit), and it will take 8\footnote{Yes,
+% that's a lot, but we may leave some of them blank. Don't worry,
+% we'll make more short-hands.} arguments:
+% \begin{enumerate}\tightlist
+% \item The unit type
+% \item The lower unit type (e.g., airborne)
+% \item The unit size (echelon)
+% \item The unit identifier
+% \item The parent unit identifier
+% \item The factors (more on this later)
+% \item The starting hex
+% \item The turn of appearance
+% \end{enumerate}
+%
+% \begin{macrocode}
+\tikzset{
+ gu/.style args={#1,#2,#3,#4,#5,#6,#7,#8}{%
+ chit={%
+ symbol={% Defines the NATO symbol
+ faction=friendly, % See note
+ command=land, % Ground units
+ main={#1},% Unit type(s) (e.g., infantry)
+ lower=#2,% Lower type
+ echelon=#3,% Size (e.g., division)
+ scale line widths,
+ line width=1pt,
+ },
+ unique={chit/small identifier=#4}, % Unit ID
+ parent={chit/small identifier=#5}, % Parent ID
+ factors={#6}, % The unit factors
+ upper left={chit/small identifier=#7}, % Hex
+ upper right={gu turn=#8} % Turn
+ } % end of chit
+ } % end of gu
+}
+% \end{macrocode}
+%
+% Note the \texttt{unique}, \texttt{parent}, and \texttt{upper left}
+% keys of \texttt{chit} are set to contain a \texttt{chit/identifier}
+% (or \texttt{chit/small identifier}) picture. In general, all the
+% keys of a \texttt{chit} and (and \texttt{natoapp6c}) \Tikz{} node
+% need to be \texttt{pic}\footnote{A small re-usable picture. See the
+% \Tikz{} manual, Chapter~18.} objects. The \texttt{chit/identifier}
+% picture outputs the text (the argument after the \texttt{=}).
+%
+% Note that for \texttt{upper left}, we used the \texttt{pic}
+% \texttt{gu~turn}, which we have not defined yet. Let us define that
+% now. This will be a picture that puts in the turn number when a
+% unit appears. Turn number ``0'' is the ``At-start'' turn, and so we
+% will deal with that specifically. Other turns should just be done
+% normally --- that is, we use another \texttt{chit/small identifier} picture
+%
+% \begin{macrocode}
+\tikzset{
+ gu turn/.pic={%
+ \ifx#1\empty\else
+ \ifnum0=#1\else%
+ \pic{chit/small identifier={#1}};\fi\fi},
+ pics/gu turn/.default=0
+}
+% \end{macrocode}
+% Note that we set the default value in case we get no turn number.
+%
+% We have put the keys \texttt{scale~line~widths} and
+% \texttt{line~width=1pt} into the \texttt{symbol} (the NATO symbol)
+% part. The latter sets the line width to be a little thicker than
+% usual. This is to make the counters more easily read. The former
+% ensures that if we scale our counters up or done, then the line
+% width will likewise scale\footnote{Other elements scale
+% automatically because of \Tikz{}'s \texttt{transform shape} key}.
+%
+% For the factors, we will use two different \texttt{pic}:
+% \texttt{chit/2 factors} for regular ground units, and \texttt{chit/2
+% factors artillery} for artillery units.
+%
+% The template is shown in \figurename~\ref{fig:ground-unit}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \chit[gu={infantry,,division,23,2,
+% {chit/2 factors={2,4}},D3,2}];%
+% \end{tikzpicture}
+% \caption{Ground unit template}
+% \label{fig:ground-unit}
+% \end{figure}
+%
+% The image above was made with
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \chit[gu={infantry,,division,23,2,
+% {chit/2 factors={2,4}},D3,2}];
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% As said above, we will have artillery ground units and other kinds
+% of ground units. Let us make two templates --- one for
+% field-artillery ground units (\texttt{fu}), which has a range, and
+% regular combat units (\texttt{cu}).
+%
+% First the artillery unit type: \texttt{fu}. This takes 8 arguments
+%
+% \begin{enumerate}\tightlist
+% \item The echelon
+% \item The identifier
+% \item The parent identifier
+% \item The combat factor (CF)
+% \item The movement factor (MF)
+% \item The range
+% \item The starting hex
+% \item The turn of appearance
+%
+% \end{enumerate}
+% \begin{macrocode}
+\tikzset{
+ fu/.style args={#1,#2,#3,#4,#5,#6,#7,#8}{
+ gu={%
+ {{[fill=pgfstrokecolor]artillery}}, % Type
+ ,%lower
+ #1, % echelon
+ #2, % ID
+ #3, % Parent ID
+ {chit/2 factors artillery={#4,#5,#6}},
+ #7, % Hex
+ #8 % Turn
+ }
+ }
+}
+% \end{macrocode}
+%
+% Note that we pass the options \texttt{[fill=pgfstrokecolor]} to the
+% \texttt{pic} \texttt{artillery}\footnote{To be explicit
+% \texttt{natoapp6c/s/artillery}.} to fill in the artillery symbol.
+% Note that we need to protect this by putting in curly brackets (2 in
+% this case). Similarly, we protect the
+% \texttt{chit/2~factors~artillery} call.
+%
+% \begin{quote}
+% In general, we may pass options (or keys) to a \texttt{pic} by
+% preceeding its name with \oarg{keys}. However, we then
+% \emph{must} protect the it as in
+% \texttt{\{\oarg{keys}\meta{pic}\}}. Further, if \oarg{keys}
+% contains a list of keys, separated by commas, then we need to
+% protect \meta{keys} too, as in
+% \texttt{\{[\{\oarg{keys}\}]\meta{pic}\}}. A little clunky, but
+% that's how \TeX{} works sometimes.
+% \end{quote}
+%
+% And now the combat unit template: \texttt{cu}. This takes 9
+% arguments.
+%
+% \begin{enumerate}\tightlist
+% \item The type
+% \item The lower type
+% \item The echelon
+% \item The identifier
+% \item The parent identifier
+% \item The combat factor (CF)
+% \item The movement factor (MF)
+% \item The starting hex
+% \item The turn of appearance
+% \end{enumerate}
+% \begin{macrocode}
+\tikzset{
+ cu/.style args={#1,#2,#3,#4,#5,#6,#7,#8,#9}{
+ gu={%
+ {#1}, % Type
+ #2, % lower
+ #3, % echelon
+ #4, % ID
+ #5, % Parent
+ {chit/2 factors={#6,#7}},
+ #8, % Hex
+ #9 % Turn
+ }
+ }
+}
+% \end{macrocode}
+%
+% Again, let us see what that looks like (\figurename~\ref{fig:fu-cu}).
+
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \chit[cu={infantry,airborne,regiment,
+% 21,2,6,4,E2,}](0,0);%
+% \chit[fu={battalion,23,21,1,3,4,E2,}](2,0);%
+% \end{tikzpicture}
+% \caption{Combat and field artillery templates}
+% \label{fig:fu-cu}
+% \end{figure}
+%
+% The above was made with
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \chit[fu={battalion,23,21,1,3,4,E2,}](0,0);
+% \chit[cu={infantry,airborne,regiment,21,2,6,4,E2,}]
+% (2,0);
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% Finally, we make a template for air units. We will have
+% Close-combat Air Support (CAS \texttt{cas}) and strategic bombers
+% (\texttt{sb}). To make things a little easier for us, we first
+% define a template for all air units. This takes 7 arguments:
+% \begin{enumerate}\tightlist
+% \item The unit type (e.g., \texttt{fixed wing}, \texttt{rotary
+% wing}).
+% \item The upper modifier (e.g., \texttt{F} for fighter)
+% \item The lower modifier (e.g., \texttt{H} for `heavy')
+% \item The unit identifier
+% \item The parent unit identifier
+% \item The factor (column shift)
+% \item The turn of appearance
+% \end{enumerate}
+% \begin{macrocode}
+\tikzset{
+ au/.style args={#1,#2,#3,#4,#5,#6,#7}{%
+ chit={%
+ symbol={% Defines the NATO symbol
+ faction=friendly, % See note
+ command=air, % Air units
+ main=#1,% Unit type
+ upper={text=#2},
+ lower={text=#3},
+ scale line widths,
+ line width=1pt,
+ },
+ unique={chit/identifier=#4}, % Unit ID
+ parent={chit/identifier=#5}, % Parent ID
+ factors={#6}, % The unit factors
+ upper right={gu turn=#7} % Turn
+ } % end of chit
+ } % end of gu
+}
+% \end{macrocode}
+% Here, \texttt{text}\footnote{really \texttt{/natoapp6c/s/text}.} for
+% \texttt{lower} and \texttt{upper} is a picture that puts the text
+% given as the argument after the \texttt{=}. The template is shown in
+% \figurename~\ref{fig:au}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \chit[au={fixed wing,B,,A,1,%
+% {chit/1 factor=+2},3}](0,0);%
+% \end{tikzpicture}
+% \caption{Air unit template}
+% \label{fig:au}
+% \end{figure}
+% %
+% The above was made with
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \chit[au={fixed wing,B,,A,1,
+% {chit/1 factor=+2},3}](0,0);
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% As we said, we will have CAS and strategic bomber wings in this
+% game, so we make templates for these. Our CAS will be helicopters
+% (\texttt{rotery wing}) while the strategic bombers are planes. CAS
+% gives a 1 CF, while strategic bombers gives 1 column shift.
+% Arguments are
+%
+% \begin{enumerate}\tightlist
+% \item The identifier
+% \item The parent identifier
+% \item The turn of appearance
+% \end{enumerate}
+% \begin{macrocode}
+\tikzset{
+ cas/.style args={#1,#2,#3}{ % Close air support
+ au={% Air unit
+ rotary wing, % Helicopter
+ ,, % No lower, upper
+ #1, % ID
+ #2, % Parent ID
+ {chit/2 factors={1,0}},
+ #3 %Turn
+ }
+ },
+ sb/.style args={#1,#2,#3}{% strategic bomber
+ au={% Air unit
+ fixed wing, %Planes
+ B, % Bomber
+ M, % Medium
+ #1, % ID
+ #2, % Parent
+ {chit/1 factor={+1}},
+ #3 % Turn
+ }
+ }
+}
+% \end{macrocode}
+%
+% The templates are shown in \figurename~\ref{fig:cas-sb}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \chit[cas={1,2,10}](0,0);%
+% \chit[sb={3,4,}](2,0);%
+% \end{tikzpicture}
+% \caption{CAS and SB templates}
+% \label{fig:cas-sb}
+% \end{figure}
+%
+% The above was made with
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \chit[cas={1,2,10}(0,0);
+% \chit[sb={3,4,}(2,0);
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% \subsection{Specialisations}
+% \label{sec:units:specialisations}
+%
+% We will now make some specialisations of the \texttt{gu} style.
+% These represent headquarters \texttt{hq}, mechanised infantry
+% \texttt{mi}, infantry \texttt{in}, and so
+% on. We do this because we want units of the same kind to have
+% similar factors and so on. Since almost all of our units are
+% battalions, we also code that in.
+%
+%
+% All of these, except \texttt{ff} for field artillery units, take 4
+% arguments
+% \begin{enumerate}\tightlist
+% \item The identifier
+% \item The parent identifier
+% \item The starting hex
+% \item The turn of appearance
+% \end{enumerate}
+%
+% The style \texttt{ff} precedes these arguments with a single
+% argument for the unit size (echelon).
+%
+% \begin{macrocode}
+\tikzset{
+ in/.style args={#1,#2,#3,#4}{%
+ cu={infantry,,battalion,#1,#2,2,3,#3,#4}},
+ mi/.style args={#1,#2,#3,#4}{%
+ cu={{armoured,infantry},,battalion,#1,#2,4,4,#3,#4}},
+ ab/.style args={#1,#2,#3,#4}{%
+ cu={infantry,airborne,battalion,#1,#2,1,3,#3,#4}},
+ ca/.style args={#1,#2,#3,#4}{%
+ cu={combined arms,,battalion,#1,#2,3,3,#3,#4}},
+ ar/.style args={#1,#2,#3,#4}{%
+ cu={armoured,,battalion,#1,#2,6,4,#3,#4}},
+ re/.style args={#1,#2,#3,#4}{%
+ cu={reconnaissance,,battalion,#1,#2,6,5,#3,#4}},
+ ff/.style args={#1,#2,#3,#4,#5}{%
+ fu={#1,#2,#3,2,5,3,#4,#5}},
+ hq/.style args={#1,#2,#3,#4,#5}{
+ cu={headquarters,,#1,#2,#3,0,1,#4,#5}},%
+ hqbg/.style args={#1,#2,#3,#4}{
+ hq={brigade,#1,#2,#3,#4}},
+ hqregt/.style args={#1,#2,#3,#4}{
+ hq={regiment,#1,#2,#3,#4}},
+}
+
+% \end{macrocode}
+% \subsection{The actual units}
+% \label{sec:units:actual}
+%
+% Above we defined templates for the various units. These templates
+% saves us a lot of trouble when defining the \emph{actual} units.
+% Below we will make the units for each faction in the game. We will
+% define them as \Tikz{} styles, just like we did for the templates.
+%
+% \begin{quote}
+% Above we said we want to make double sided counters. We will get
+% back to the back-side (flipped) versions of the counters in a
+% moment.
+% \end{quote}
+%
+% \subsubsection{Side A}
+%
+% Below we will define the units without much commentary. Note that
+% we use the style \texttt{a} for all our units so that they get the
+% right style. Note that we pass the single argument \texttt{\#1} as
+% the turn of appearance to all units. This will be used when
+% generating an \emph{Order of Battle} later on.
+%
+% \begin{macrocode}
+\tikzset{
+ a hq/.style ={a,hq={corps,,,A2,#1}},
+ a 1 hqbg/.style ={a,hqbg={1,,A2,#1}},
+ a 1 1lg ibn/.style={a,mi={I-LG,1,D3,#1}},
+ a 1 1gh ibn/.style={a,mi={I-GH,1,C2,#1}},
+ a 1 2jd ibn/.style={a,mi={II-JD,1,A2,#1}},
+ a 1 1 abn/.style ={a,ff={battalion,1,1,A1,#1}},
+ a 2 hqbg/.style ={a,hqbg={2,,C2,#1}},%
+ a 2 1jd abn/.style={a,ar={I-JD,2,A2,#1}},%
+ a 2 3gh rbn/.style={a,re={I-JD,2,D2,#1}},%
+ a aregt/.style={a,ff={regiment,,,A1,#1}},%
+ a f/.style={a,cas={,,#1}},%VR
+ a b/.style={a,sb={,,#1}}%SK
+}
+% \end{macrocode}
+% \iffalse
+% KA: A2 Karup
+% HO: A2 Holsterbro
+% HV: D3 Høvelte
+% SL: C2 Slagelse
+% OK: A1 Oksbøl
+% RO: D2 Rønne
+% VR: D3 Værløse
+% SK: B2 Skydstrup
+% \fi
+% Let us draw these units in what looks like an organisational
+% diagram (\figurename~\ref{fig:a-org}).
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \node[a hq] (a hq) {};
+% \node[a aregt, below right=10mm and 10mm of a hq] (a aregt) {};
+% \node[a 1 hqbg, below left=10mm and 10mm of a hq] (a 1 hqbg) {};
+% \node[a 1 1lg ibn,below right=5mm and -8mm of a 1 hqbg] (a 1 1lg ibn){};
+% \node[a 1 1gh ibn,below=5mm of a 1 1lg ibn] (a 1 1gh ibn){};
+% \node[a 1 2jd ibn,below=5mm of a 1 1gh ibn] (a 1 2jd ibn){};
+% \node[a 1 1 abn, below=5mm of a 1 2jd ibn] (a 1 1 abn) {};
+% \node[a 2 hqbg, below=10mm of a hq] (a 2 hqbg) {};
+% \node[a 2 1jd abn,below right=5mm and -8mm of a 2 hqbg] (a 2 1jd abn){};
+% \node[a 2 3gh rbn,below=5mm of a 2 1jd abn] (a 2 3gh rbn){};
+% \node[a f, right=10mm of a aregt] (a f) {};
+% \node[a b, below=5mm of a f] (a b) {};
+% \draw(a 1 hqbg.south west) |- (a 1 1lg ibn.west);
+% \draw(a 1 hqbg.south west) |- (a 1 1gh ibn.west);
+% \draw(a 1 hqbg.south west) |- (a 1 2jd ibn.west);
+% \draw(a 1 hqbg.south west) |- (a 1 1 abn.west);
+% \draw(a 2 hqbg.south west) |- (a 2 1jd abn.west);
+% \draw(a 2 hqbg.south west) |- (a 2 3gh rbn.west);
+% \coordinate (mid) at ($(a hq.south)+(0,-.5)$) {};
+% \coordinate (off) at ($(mid)+(1.5,0)$) {};
+% \draw(a hq.south) -- (mid);
+% \draw(mid) -| (a 1 hqbg.north);
+% \draw(mid) -- (a 2 hqbg.north);
+% \draw(mid) -| (a aregt.north);
+% \end{tikzpicture}
+% \caption{Faction A organisational chart}
+% \label{fig:a-org}
+% \end{figure}
+%
+% Before we go on to side B, we will make a macro that contains a list
+% of all our A side counters.
+%
+% \begin{macrocode}
+\def\alla{{%
+ a hq,
+ a 1 hqbg,
+ a 1 1lg ibn,
+ a 1 1gh ibn,
+ a 1 2jd ibn,
+ a 1 1 abn,
+ a 2 hqbg,
+ a 2 1jd abn,
+ a 2 3gh rbn,
+ a aregt,
+ a f,
+ a b}}
+% \end{macrocode}
+%
+% \subsubsection{Side B}
+%
+% Below we will define the units without much commentary. Note that
+% we use the style \texttt{b} for all our units so that they get the
+% right style. Note that we pass the single argument \texttt{\#1} as
+% the turn of appearance to all units. This will be used when
+% generating an \emph{Order of Battle} later on.
+%`
+% \begin{macrocode}
+\tikzset{
+ b hq/.style= {b,hq= {corps,,,F6,#1}},
+ b lg hqregt/.style= {b,hqregt={LG,,F6,#1}},
+ b lg ibn/.style= {b,in= {LG,,F6,#1}},
+ b k3 hqregt/.style= {b,hqregt={K3,,E7,#1}},
+ b k3 31 abibn/.style= {b,ab= {31,K3,E7,#1}},
+ b k4 hqregt/.style= {b,hqregt={K4,,F10,#1}},
+ b k4 abibn/.style= {b,ab= {NL,K4,F10,#1}},
+ b p4 hqregt/.style= {b,hqregt={P4,,D7,#1}},
+ b p4 41 cabn/.style= {b,ca= {41,P4,D7,#1}},
+ b p4 42 cabn/.style= {b,ca= {42,P4,D7,#1}},
+ b p7 hqregt/.style= {b,hqregt={P7,,D4,#1}},
+ b p7 71 ibn/.style= {b,mi= {71,P7,D4,#1}},
+ b p7 72 cabn/.style= {b,ca= {72,P7,D4,#1}},
+ b i13 hqregt/.style= {b,hqregt={I13,,D8,#1}},
+ b i13 131 ibn/.style= {b,in= {131,I13,D8,#1}},
+ b i13 132 ibn/.style= {b,in= {132,I13,D8,#1}},
+ b p18 hqregt/.style= {b,hqregt={P18,,F5,#1}},
+ b p18 181 cabn/.style={b,ca= {181,P18,F5,#1}},
+ b i19 hqregt/.style= {b,hqregt={I19,,F10,#1}},
+ b i19 191 cabn/.style={b,ca= {191,I19,F10,#1}},
+ b i19 192 cabn/.style={b,ca= {192,I19,F10,#1}},
+ b i21 hqregt/.style= {b,hqregt={I21,,D10,#1}},
+ b i21 211 ibn/.style= {b,in= {211,I21,D10,#1}},
+ b i21 212 ibn/.style= {b,in= {212,I21,D10,#1}},
+ b f/.style= {b,cas= {F17,BL,#1}},
+ b b/.style= {b,sb= {F7,SA,#1}}
+}
+% \end{macrocode}
+% \iffalse
+% SH: F6 Stockholm
+% KU: F6 Kungsängen near stockholm F6
+% KA: E7 Karlsborg
+% AR: Off Arvisjaur (top of baltic)
+% SK: D7 Skövde
+% RE: D3 Revingehed
+% FA: D8 Falun
+% VI: F5 Visby (delay from island)
+% BO: Off Boden (top of baltic)
+% SO: Off (D10) Sollefteå
+% \fi
+% Let us draw these units in what looks like an organisational
+% diagram (\figurename~\ref{fig:b-org}).
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \node[b hq] (b hq) {};
+% \node[b lg hqregt, below left=10mm and 20mm of b hq] (b lg hqregt){};
+% \node[b lg ibn, below right=5mm and -8mm of b lg hqregt] (b lg ibn){};
+% \node[b k3 hqregt, below left=10mm and -1mm of b hq] (b k3 hqregt){};
+% \node[b k3 31 abibn, below right=5mm and -8mm of b k3 hqregt] (b k3 31 abibn){};
+% \node[b k4 hqregt, below right=10mm and -1mm of b hq] (b k4 hqregt){};
+% \node[b k4 abibn, below right=5mm and -8mm of b k4 hqregt] (b k4 abibn){};
+% \node[b p4 hqregt, below right=10mm and 20mm of b hq] (b p4 hqregt){};
+% \node[b p4 41 cabn, below right=5mm and -8mm of b p4 hqregt] (b p4 41 cabn){};
+% \node[b p4 42 cabn, below=5mm of b p4 41 cabn] (b p4 42 cabn){};
+% \node[b p7 hqregt, below left=65mm and 20mm of b hq] (b p7 hqregt){};
+% \node[b p7 71 ibn, below right=5mm and -8mm of b p7 hqregt] (b p7 71 ibn){};
+% \node[b p7 72 cabn, below=5mm of b p7 71 ibn] (b p7 72 cabn){};
+% \node[b i13 hqregt, below left=65mm and -1mm of b hq] (b i13 hqregt){};
+% \node[b i13 131 ibn, below right=5mm and -8mm of b i13 hqregt](b i13 131 ibn){};
+% \node[b i13 132 ibn, below=5mm of b i13 131 ibn] (b i13 132 ibn){};
+% \node[b p18 hqregt, below right=65mm and -1mm of b hq] (b p18 hqregt){};
+% \node[b p18 181 cabn,below right=5mm and -8mm of b p18 hqregt](b p18 181 cabn){};
+% \node[b i19 hqregt, below right=65mm and -1mm of b hq] (b i19 hqregt){};
+% \node[b i19 191 cabn,below right=5mm and -8mm of b i19 hqregt](b i19 191 cabn){};
+% \node[b i19 192 cabn,below=5mm of b i19 191 cabn] (b i19 192 cabn){};
+% \node[b i21 hqregt, below right=65mm and 20mm of b hq] (b i21 hqregt){};
+% \node[b i21 211 ibn, below right=5mm and -8mm of b i21 hqregt] (b i21 211 ibn){};
+% \node[b i21 212 ibn, below=5mm of b i21 211 ibn] (b i21 212 ibn){};
+% \node[b f, right=15mm of b hq] (b f){};
+% \node[b b, right=5mm of b f] (b b){};
+%
+% \draw(b lg hqregt.south west) |- (b lg ibn.west);
+% \draw(b k3 hqregt.south west) |- (b k3 31 abibn.west);
+% \draw(b k4 hqregt.south west) |- (b k4 abibn.west);
+% \draw(b p4 hqregt.south west) |- (b p4 41 cabn.west);
+% \draw(b p4 hqregt.south west) |- (b p4 42 cabn.west);
+% \draw(b p7 hqregt.south west) |- (b p7 71 ibn.west);
+% \draw(b p7 hqregt.south west) |- (b p7 72 cabn.west);
+% \draw(b p18 hqregt.south west) |- (b p18 181 cabn.west);
+% \draw(b i19 hqregt.south west) |- (b i19 191 cabn.west);
+% \draw(b i19 hqregt.south west) |- (b i19 192 cabn.west);
+% \draw(b i13 hqregt.south west) |- (b i13 131 ibn.west);
+% \draw(b i13 hqregt.south west) |- (b i13 132 ibn.west);
+% \draw(b i21 hqregt.south west) |- (b i21 211 ibn.west);
+% \draw(b i21 hqregt.south west) |- (b i21 212 ibn.west);
+%
+% \coordinate (mid) at ($(b hq.south)+(0,.-.5)$);
+%
+% \draw(b hq.south) -- (mid);
+% \draw(mid) -| (b lg hqregt.north);
+% \draw(mid) -| (b k3 hqregt.north);
+% \draw(mid) -| (b k4 hqregt.north);
+% \draw(mid) -| (b p4 hqregt.north);
+%
+% \coordinate (mid2) at ($(b hq.south)+(0,.-6)$);
+% \draw(mid) -- (mid2);
+% \draw(mid2) -| (b p7 hqregt.north);
+% \draw(mid2) -| (b i13 hqregt.north);
+% \draw(mid2) -| (b i19 hqregt.north);
+% \draw(mid2) -| (b i21 hqregt.north);
+%
+% \end{tikzpicture}
+% \caption{Faction B organisational chart}
+% \label{fig:b-org}
+% \end{figure}
+%
+% As before, we will make a macro that contains all B counters.
+%
+% \begin{macrocode}
+\def\allb{{
+ b hq, b lg hqregt, b lg ibn,
+ b k3 hqregt, b k3 31 abibn,
+ b p4 hqregt, b p4 41 cabn, b p4 42 cabn,
+ b p7 hqregt, b p7 71 ibn, b p7 72 cabn,
+ b i13 hqregt, b i13 131 ibn,b i13 132 ibn,%
+ b f, b b%
+ },{},{},{% Empty turns
+ b p18 hqregt, b p18 181 cabn%
+ },{
+ b i21 hqregt, b i21 211 ibn, b i21 212 ibn%
+ },{},{
+ b k4 hqregt, b k4 abibn%
+ },{
+ b i19 hqregt, b i19 191 cabn, b i19 192 cabn%
+ }}
+% \end{macrocode}
+%
+% Note that this is defined as a list of lists, and some of the lists
+% are a little special. This is because we will reuse this list over
+% and over again, and in particular for the Order of Battle charts.
+% The point is that each element of the outer most list correspond to
+% a turn, starting with turn ``0'', or ``At start''. Empty elements
+% are thus turns where there will be no reinforcements for the faction.
+%
+% \subsection{The \texttt{flipped} side of things}
+% \label{sec:units:flipped}
+%
+% Well, really the \texttt{flipped} definitions of the units. The
+% flipped side of our unit counters will represent a ``spent'' state,
+% i.e., a state where the unit cannot attack and only do limited
+% manoeuvres. In this state, all units will have a combat factor or
+% zero and movement factor of 1. Thus, we define a simple style that
+% sets the factors
+%
+% \begin{macrocode}
+\tikzset{
+ flipped/.style={%
+ /chit/factors={chit/2 factors={0,1}},
+ /chit/upper left={},
+ /chit/upper right={}
+ }
+}
+% \end{macrocode}
+% Note that we give the \emph{explicit full} path to the chits factors
+% key. This is because we want to \emph{monkey patch} our units to
+% have these new factors. We also clear the upper left and right
+% corners on the flip side.
+%
+% Now, we'll do a little hack. Previously, we defined the
+% \texttt{a~flipped} and \texttt{b~flipped} styles, but if you look
+% closely, we can see how we can automatically define the flipped fill
+% colours. Thus we make another style that does this.
+%
+% \begin{macrocode}
+\tikzset{%
+ f/.style={%
+ flipped,fill=pgffillcolor!50!white}}
+% \end{macrocode}
+%
+% With this, we can define the \texttt{flipped} state of all A
+% counters.
+%
+% \begin{macrocode}
+\tikzset{%
+ a hq flipped/.style= {a hq ,f},
+ a 1 hqbg flipped/.style= {a 1 hqbg ,f},
+ a 1 1lg ibn flipped/.style= {a 1 1lg ibn,f},
+ a 1 1gh ibn flipped/.style= {a 1 1gh ibn,f},
+ a 1 2jd ibn flipped/.style= {a 1 2jd ibn,f},
+ a 1 1 abn flipped/.style= {a 1 1 abn ,f},
+ a 2 hqbg flipped/.style= {a 2 hqbg ,f},
+ a 2 1jd abn flipped/.style= {a 2 1jd abn,f},
+ a 2 3gh rbn flipped/.style= {a 2 3gh rbn,f},
+ a aregt flipped/.style= {a aregt ,f},
+ a f flipped/.style= {a,f},
+ a b flipped/.style= {a,f},
+}
+% \end{macrocode}
+%
+% Let us draw the A side counters, front and back, using the macro
+% \verb+doublechits+ (\figurename~\ref{fig:a-all}).
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \doublechits{\alla}{3}{1.24}
+% \end{tikzpicture}
+% \caption{All faction A counters, front and back}
+% \label{fig:a-all}
+% \end{figure}
+%
+% The above was produced by
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \doublechits{\alla}{3}{1.24}
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% We will use the macro \verb+\doublechits+ later on to make our chit
+% sheets. This works \emph{only} because we define the back sides of
+% our chits to have the style `\meta{front} \texttt{flipped}', which
+% is why it is \emph{highly} recommended to follow this convention.
+%
+% We do the same thing for the faction B counters.
+%
+%
+% \begin{macrocode}
+\tikzset{%
+ b hq flipped/.style= {b hq, f},
+ b lg hqregt flipped/.style= {b lg hqregt, f},
+ b lg ibn flipped/.style= {b lg ibn, f},
+ b k3 hqregt flipped/.style= {b k3 hqregt, f},
+ b k3 31 abibn flipped/.style= {b k3 31 abibn, f},
+ b k4 hqregt flipped/.style= {b k4 hqregt, f},
+ b k4 abibn flipped/.style= {b k4 abibn, f},
+ b p4 hqregt flipped/.style= {b p4 hqregt, f},
+ b p4 41 cabn flipped/.style= {b p4 41 cabn, f},
+ b p4 42 cabn flipped/.style= {b p4 42 cabn, f},
+ b p7 hqregt flipped/.style= {b p7 hqregt, f},
+ b p7 71 ibn flipped/.style= {b p7 71 ibn, f},
+ b p7 72 cabn flipped/.style= {b p7 72 cabn, f},
+ b i13 hqregt flipped/.style= {b i13 hqregt, f},
+ b i13 131 ibn flipped/.style= {b i13 131 ibn, f},
+ b i13 132 ibn flipped/.style= {b i13 132 ibn, f},
+ b p18 hqregt flipped/.style= {b p18 hqregt, f},
+ b p18 181 cabn flipped/.style={b p18 181 cabn,f},
+ b i19 hqregt flipped/.style= {b i19 hqregt, f},
+ b i19 191 cabn flipped/.style={b i19 191 cabn,f},
+ b i19 192 cabn flipped/.style={b i19 192 cabn,f},
+ b i21 hqregt flipped/.style= {b i21 hqregt, f},
+ b i21 211 ibn flipped/.style= {b i21 211 ibn, f},
+ b i21 212 ibn flipped/.style= {b i21 212 ibn, f},
+ b f flipped/.style= {b,f},
+ b b flipped/.style= {b,f}}
+% \end{macrocode}
+%
+% Let us draw the faction B counters, front and back, using the macro
+% \verb+doublechits+ (\figurename~\ref{fig:b-all}).
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \doublechits{\allb}{3}{1.24}
+% \end{tikzpicture}
+% \caption{All faction B counters, front and back}
+% \label{fig:b-all}
+% \end{figure}
+%
+% The above was produced by
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \doublechits{\allb}{3}{1.24}
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% \subsection{Other counters}
+% \label{sec:units:other}
+%
+% In principle one can make as many and different counters and markers
+% as needed. Here, we will keep things simple and only define a game
+% turn marker. The package \textsf{wargame} already defines one as
+% shown in \figurename~\ref{fig:plain-game-turn}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \chit[game turn]
+% \end{tikzpicture}
+% \caption{The \textsf{wargame} game turn counter}
+% \label{fig:plain-game-turn}
+% \end{figure}
+%
+% However, this has no flip side and we would like the side to reflect
+% the faction currently in turn
+%
+% \begin{macrocode}
+\tikzset{
+ game turn/.append style={a},
+ game turn flipped/.style={game turn,b}
+}
+% \end{macrocode}
+%
+% This modified game turn is shown in \figurename~\ref{fig:game-turn}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \doublechits{{game turn}}{1}{1.24}
+% \end{tikzpicture}
+% \caption{Modified game turn, front and back}
+% \label{fig:game-turn}
+% \end{figure}
+%
+% \section{The board}
+% \label{sec:board}
+%
+% Designing the board is probably where one will spend the most time.
+% The \textsf{wargame} package is not omnipotent, but tries to make it
+% as simple as possible. However, some artistic streak is a good
+% thing, and familiarity with \Tikz{} is highly recommended.
+%
+% The simplest thing one can do is to import an image and superimpose
+% hexes on top of that image. While often a good solution, it does
+% not always give the most pleasing board.
+%
+% The \textsf{wargame} package does not, in and of it self, provide
+% fancy ``modern'' graphics (though it can be done). Rather, off the
+% shelf, it mimics classic wargames of yore (Afrika Korps, D-Day,
+% Russian Campaign, and so on). That is, it uses rather simplified
+% graphics.
+%
+% For our game, we will have three kinds of terrain: Clear, woods, and
+% mountains. The map will have a lot of coastline, but the scale of
+% the game is such that naval units are not really called for.
+% Indeed, the game focuses on land combat with abstracted aerial
+% support.
+%
+% The first thing we do, is to decide a few things about the map. We
+% want to have the hexes automatically label with alphabetic columns
+% and numerical rows. We want to start our rows and columns at 1 (the
+% default is starting at 0). By default, we want the hexes to be white
+% (for clear terrain). To set this up, we define some more
+% keys.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/short bottom columns=even,
+ hex/short top columns=odd,
+ hex/label is name,
+ hex/first row and column are=1,
+ every hex/.style={
+ /hex/label={auto=alpha column},
+ fill=white},
+}%
+% \end{macrocode}
+%
+% Note how we used the \emph{full} path for the \texttt{/hex/label}
+% key. This will be important when we generate a VASSAL module later
+% on.
+%
+% The key \texttt{hex/label is name} makes it so that every hex on the
+% board will be a named \texttt{node}. This means we can refer to a
+% hex in \Tikz{} simply by its label. In fact, we can use various
+% anchors of the hex if we want to --- it is a \texttt{node} like any
+% other node in \Tikz{}.
+%
+% The keys \texttt{hex/short bottom column=even} and
+% \texttt{hex/short~top~column=odd} is mainly used by the
+% \verb+\boardframe+ macro to generate a proper frame.
+%
+% Having defined the settings, we can move on to the board itself. We
+% will do this in parts. This makes it easier to get an overview of,
+% and helps us in this tutorial to explain what is going on.
+%
+% The first thing we do, is define a macro that defines the coast line
+% of our map. We use the hexagonal coordinate system provided by the
+% \textsf{wargame} package, but we could also have used general
+% Cartesian coordinates.
+%
+% \begin{quote}
+% Defining the coastline of a map can be quite tedious. You may
+% want to use some vector graphics editor, say Inkscape, to do
+% this. In the \textsf{wargame} package you will find a Python
+% script to convert an SVG to \Tikz{} paths.
+% \end{quote}
+%
+% Alright, let's make our macro to define the coastline.
+%
+% \begin{macrocode}
+\newcommand\coastline{%
+ (hex cs:c=1,r=1,v=SE)
+ --(hex cs:c=1,r=1,e=SE)
+ --(hex cs:c=1,r=1,e=NE,o=.5)
+ --(hex cs:c=1,r=1,v=NW,o=.7)
+ --(hex cs:c=1,r=2,v=W,o=.6)
+ --(hex cs:c=1,r=2,v=NW,o=.7)
+ --(hex cs:c=1,r=3,v=SE,o=.9)
+ --(hex cs:c=1,r=3,e=SE,o=.9)
+ --(hex cs:c=2,r=4,e=S,o=.7)
+ --(hex cs:c=2,r=3,v=NE,o=.4)
+ --(hex cs:c=2,r=3,e=S,o=.1)
+ --(hex cs:c=2,r=3,v=E,o=.8)
+ --(hex cs:c=2,r=3,e=SE,o=.8)
+ --(hex cs:c=2,r=3,v=SE,o=.6)
+ --(hex cs:c=2,r=2,v=NW,o=.2)
+ --(hex cs:c=2,r=2,e=SE)
+ --(hex cs:c=3,r=1,e=NE)
+ --(hex cs:c=4,r=2,e=N,o=.3)
+ --(hex cs:c=5,r=2,e=S,o=.6)
+ --(hex cs:c=5,r=2,v=SE,o=.9)
+ --(hex cs:c=7,r=3,v=E)
+ --(hex cs:c=7,r=1,v=E)
+ --(hex cs:c=6,r=1,v=E,o=2.5)
+ --cycle
+ (hex cs:c=3,r=2,v=W,o=.5)
+ --(hex cs:c=4,r=3,e=NW,o=.75)
+ --(hex cs:c=4,r=3,e=SW,o=.3)
+ --(hex cs:c=4,r=2,e=NW,o=.7)
+ --(hex cs:c=3,r=2,v=SW,o=.4)
+ --cycle
+ (hex cs:c=2,r=4,e=N,o=.8)
+ --(hex cs:c=2,r=4,v=E,o=.7)
+ --(hex cs:c=3,r=3,v=E,o=.8)
+ --(hex cs:c=4,r=3,v=NW,o=.6)
+ --(hex cs:c=4,r=3,e=NW,o=.1)
+ --(hex cs:c=4,r=3,v=SE,o=.4)
+ --(hex cs:c=5,r=3,v=SW,o=.6)
+ --(hex cs:c=5,r=3,v=NE,o=.2)
+ --(hex cs:c=5,r=3,e=NE)
+ --(hex cs:c=6,r=4,v=SW,o=.3)
+ --(hex cs:c=5,r=4,v=E,o=1.7)
+ --(hex cs:c=6,r=5,e=N)
+ --(hex cs:c=6,r=6,v=E)
+ --(hex cs:c=7,r=6,v=NW,o=.4)
+ --(hex cs:c=6,r=7,e=S,o=.2)
+ --(hex cs:c=6,r=7,e=NW)
+ --(hex cs:c=6,r=8,e=NW,o=.7)
+ --(hex cs:c=7,r=9,e=NE)
+ --(hex cs:c=6,r=10,v=E,o=2.5)
+ --(hex cs:c=7,r=10,v=E)
+ --(hex cs:c=1,r=10,v=W)
+ --(hex cs:c=2,r=4,v=W,o=2.5)
+ --(hex cs:c=2,r=5,v=SW)
+ --cycle
+ ;
+}
+% \end{macrocode}
+%
+% The coast line is shown in \figurename~\ref{fig:coast}\footnote{Any
+% resemblance to any actual location is, erhm, accidental?}
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}[scale=.7]
+% \draw[fill=gray] \coastline;
+% \end{tikzpicture}
+% \caption{The coast line}
+% \label{fig:coast}
+% \end{figure}
+%
+% As you can see, it is pretty simple. Not too many details about the
+% nooks and crannies. Now we want to define some colours that we will
+% use on the map. As mentioned above, we will have some sea, and we
+% will have some surrounding neutral countries. Let us define some
+% colours for these things.
+%
+% \begin{macrocode}
+\definecolor{sea}{HTML}{18b5db}
+\colorlet{neutral}{gray!25!white}
+\colorlet{coast}{black}
+% \end{macrocode}
+%
+% OK, with that out of the way, we start on the hexes in earnest. We
+% define the macro \verb+\hexes+ to produce our hexes within our map.
+%
+% \begin{macrocode}
+\newcommand\hexes[1][]{
+% \end{macrocode}
+%
+% We have defined this macro to take a single optional argument. We
+% wont use that here, but it might come in handy at some later point.
+%
+% The first thing we do, is to fill the entire map with \texttt{sea}.
+%
+% \begin{macrocode}
+ \fill[sea](-1.000,-0.866) rectangle(10.,15.580);
+% \end{macrocode}
+%
+% Then we use the macro \verb+\coastline+ to define a path that we may
+% use over and over again.
+%
+% \begin{macrocode}
+ \path[save path=\coast]\coastline;
+% \end{macrocode}
+%
+% Next up, we want to draw hexes that are on the coast line but also
+% has land parts in it. This is so that the hexes are complete and
+% get a proper label on it. We define the fill to be the sea
+% colour, and the lines labels to be white
+%
+% \begin{macrocode}
+ \begin{scope}[
+ every hex/.append style={white,fill=sea},
+ hex/label/.append style={color=white}]
+ \hex(c=1,r=1); \hex(c=1,r=2);
+ \hex(c=1,r=3);
+ \hex(c=2,r=2); \hex(c=2,r=3);
+ \hex(c=2,r=4);
+ \hex(c=3,r=2); \hex(c=3,r=3);
+ \hex(c=4,r=2); \hex(c=4,r=3);
+ \hex(c=5,r=3); \hex(c=5,r=7);
+ \hex(c=6,r=4); \hex(c=6,r=5);
+ \hex(c=6,r=6); \hex(c=6,r=7);
+ \hex(c=6,r=8); \hex(c=6,r=9);
+ \hex(c=7,r=6); \hex(c=7,r=9);
+ \end{scope}
+% \end{macrocode}
+% Note that we use the \texttt{.append style} handler so that we get
+% the setting from above here too (labels, among other things). These
+% amended styles only have effect inside the \texttt{scope}. Once we
+% leave the scope, then the old settings are restored.
+%
+% We draw a compass needle.
+%
+% \begin{macrocode}
+ \draw[white,-{Stealth[]},
+ scale line widths,
+ line width=1mm]
+ (hex cs:c=7,r=4,v=SE) -- ++(110:2)
+ node[midway,
+ font=\sffamily\bfseries\LARGE,
+ transform shape,
+ rotate=-90,sloped]{N};
+% \end{macrocode}
+%
+% Since the areas where we do not add hexes are considered neutral
+% countries in this game, we fill the whole coast line with the
+% previously defined \texttt{neutral} colour.
+%
+% \begin{macrocode}
+ \settosave{\coast}
+ \fill[neutral];
+% \end{macrocode}
+%
+% Here we have the first use of the saved path \verb+\coast+. We make
+% that the current path by calling \verb+\setosave+ --- a small
+% utility in the \textsf{wargame} package.
+%
+% We can now add the actual hexes. Some of the hexes will represent
+% different terrain, and that will be clear from the definitions. We
+% will put our definitions inside a scope, and the first thing we do
+% in that scope is to clip everything to our coast line. This will be
+% the second use of \verb+\coast+.
+%
+% \begin{macrocode}
+ \begin{scope}
+ \settosave{\coast}
+ \clip;
+
+ \hex(c=1,r=1);\hex(c=1,r=2);\hex(c=1,r=3);
+% \end{macrocode}
+%
+% Note that we use the \texttt{hex cs} coordinate system. We specify
+% the column (\texttt{c}) and the row (\texttt{r}) of each hex. We can
+% use longer forms, of the keys if we want.
+%
+% The southern border of A factions country needs a little special
+% attention. We clip the drawn hex, and draw the border. In fact, we
+% draw the hex twice, first time with a white outline and the neutral
+% fill colour. This is so that the full hex will be drawn, even it is
+% only partially within the map area.
+%
+% \begin{macrocode}
+ \hex[white,fill=neutral,label=](c=2,r=2);
+ \begin{scope}
+ \clip(hex cs:c=2,r=2,v=SW)
+ --(hex cs:c=2,r=2,v=E)
+ --(hex cs:c=2,r=2,v=NE)
+ --(hex cs:c=2,r=2,v=NW)
+ --(hex cs:c=2,r=2,v=W)
+ --cycle;
+ \hex(c=2,r=2);
+ \end{scope}
+ \draw[coast] (hex cs:c=2,r=2,v=SW)
+ --(hex cs:c=2,r=2,v=E);
+% \end{macrocode}
+% Note that our clipping path is defined in the \texttt{hex cs}
+% coordinate system, and how we have retrieved vertex coordinates via
+% the key \texttt{v}.
+%
+% Now we come to some other terrain: woods and mountains.
+%
+% \begin{macrocode}
+ \hex(c=2,r=3);\hex(c=2,r=4);\hex(c=2,r=5);
+ \hex[terrain=mountains](c=2,r=6);
+ \hex[terrain=mountains](c=2,r=7);
+ \hex[terrain=mountains](c=2,r=8);
+% \end{macrocode}
+%
+% Again, we do not want to draw the hex in the neutral country to
+% the south, so we clip this hex too.
+%
+%
+%
+%
+% \begin{macrocode}
+ \hex[white,fill=neutral,label=](c=4,r=2);
+ \begin{scope}
+ \clip(hex cs:c=4,r=2,v=W)
+ --(hex cs:c=4,r=2,v=NE)
+ --(hex cs:c=4,r=2,v=NW)
+ --cycle;
+ \hex(c=4,r=2);
+ \end{scope}
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \hex(c=3,r=2); \hex(c=3,r=3);
+ \hex[terrain=woods](c=3,r=4);
+ \hex(c=3,r=5);
+ \hex[terrain=woods](c=3,r=6);
+ \hex[terrain=woods](c=3,r=7);
+ \hex[terrain=mountains](c=3,r=8);
+ \hex[terrain=mountains](c=3,r=9);
+% \end{macrocode}
+%
+% In the next step, we will add a town to the map.
+%
+% \begin{macrocode}
+ \hex[town={
+ place={(hex cs:c=1,r=1,e=SW,o=.5)}}]
+ (c=4,r=3);
+ \hex[terrain=woods](c=4,r=4);
+ \hex(c=4,r=5);
+ \hex[terrain=woods](c=4,r=6);
+ \hex[terrain=woods](c=4,r=7);
+ \hex[terrain=woods](c=4,r=8);
+ \hex[terrain=woods](c=4,r=9);
+ \hex(c=4,r=10);
+% \end{macrocode}
+% The \texttt{place} key specifies the placement of the town relative
+% to the hex centre.
+%
+% For the rest of the map, there isn't much new.
+%
+% \begin{macrocode}
+ \hex(c=5,r=3);
+ \hex[terrain=woods](c=5,r=4);
+ \hex[](c=5,r=5);
+ \hex[terrain=woods](c=5,r=6);
+ \hex[terrain=woods](c=5,r=7);
+ \hex[terrain=woods](c=5,r=8);
+ \hex[terrain=woods](c=5,r=9);
+
+ \hex[terrain=woods](c=6,r=4);
+ \hex[terrain=woods](c=6,r=5);
+ \hex[town={
+ place={(hex cs:c=1,r=1,v=E,o=.3)}}]
+ (c=6,r=6);
+ \hex(c=6,r=7); \hex(c=6,r=8);
+ \hex[terrain=woods](c=6,r=9);
+ \hex[terrain=woods](c=6,r=10);
+
+ \hex(c=7,r=4); \hex(c=7,r=5);
+ \hex(c=7,r=6); \hex(c=7,r=7);
+ \hex(c=7,r=8); \hex(c=7,r=9);
+ \end{scope}
+}
+% \end{macrocode}
+%
+% That concludes our hexes. Let us draw it (\figurename~\ref{fig:hexes}).
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}[scale=.7]
+% \hexes
+% \end{tikzpicture}
+% \caption{Our hexes}
+% \label{fig:hexes}
+% \end{figure}
+%
+% This only defines the map. Now we would like to make the full
+% board. Typically one want to add a turn track and some other stuff.
+% Here, we will keep it fairly simple and just add a turn track.
+%
+% \begin{quote}
+% This is where we need to start to consider VASSAL. Essentially,
+% VASSAL can split a board into \emph{zones}. These zones can be
+% different game specific places, e.g., a place to keep eliminated
+% units, a place for the turn track, and so on. We will take
+% advantage of this in our board definition by applying some
+% specific styles.
+% \end{quote}
+%
+% Below we customise the board frame, and some other things on the
+% board.
+%
+% \begin{macrocode}
+\colorlet{framebg}{gray!50!white}
+\colorlet{titlefg}{gray!50!black}
+\tikzset{
+ hex/board frame/.style={
+ scale line widths,
+ line width=.5pt,
+ draw=black},
+ board frame/.style={%
+ anchor=south west,
+ transform shape,
+ scale line widths,
+ line width=1pt,
+ draw=black,
+ fill=framebg,
+ minimum width=14cm,%
+ minimum height=19cm
+ },
+ turn/.style={
+ scale line widths,
+ line width=.5pt,
+ fill=white,
+ draw=black,
+ text=gray,
+ minimum width=1.4cm,
+ minimum height=1.4cm,
+ text width=1.2cm,
+ align=center,
+ font=\sffamily\bfseries\huge,
+ transform shape,
+ anchor=north east
+ },
+ title/.style={
+ text=titlefg,
+ font=\sffamily\bfseries\Huge,
+ scale=1.5,
+ transform shape,
+ },
+ sub title/.style={
+ text=titlefg!75!white,
+ font=\sffamily\bfseries\normalsize,
+ scale=1.5,
+ transform shape,
+ text width=5cm,
+ align=right
+ }
+}
+% \end{macrocode}
+%
+% Let us start the board. The \textsf{wargame} package has a tool
+% \verb+\boardrame+ which will put a frame around the map as defined
+% by hex coordinates. It also output the map bounding box to the
+% standard log file. So running \LaTeX{} once with this macro in
+% effect will give us some useful information.
+%
+% We will define the board in two steps. First we define an
+% \emph{environment} which holds the map, turn track, and title of the
+% game, and after that we will add an environment that wraps it in a
+% \Tikz{} picture.
+%
+% We define the board as an environment, so that we may put
+% things on the board in our explanations of the rules.
+%
+% \begin{macrocode}
+\newenvironment{innerboard}[1][]{%
+ \node[board frame] (frame) {};
+% \end{macrocode}
+%
+% This adds in our frame of the whole map as defined by the style
+% above.
+%
+% Also note that we made our outer frame a \texttt{node}. This is so
+% that we can refer to its anchors without too much knowledge of its
+% size.
+%
+% We have made our frame a little bigger than the hex, so that we may
+% add a turn track. We will at it at the top, and we will add 10
+% turns. Here, we make use of \Tikz{} loops, and they do the trick for
+% us.
+%
+% We will make use the style \texttt{zone scope} with the name
+% \texttt{Turns}. This will be made into a VASSAL zone that has a
+% coordinate system that identifies it (at least by convention) as
+% turn track. We will in fact deploy a little trick here to make the
+% module even more complete. This is because we add the style
+% \texttt{zone~point} to the turn number nodes below, and the first
+% one will have the name of the game turn marker. This means that the
+% game turn marker will \emph{automatically} be placed there. If the
+% below is a little complicated for you, take a look at the
+% alternative below the code
+%
+% \begin{macrocode}
+ \begin{scope}[
+ shift={($(frame.south east)+(-0.5,.5)$)}]
+ \begin{scope}[zone scope=Turns]
+ \foreach \i in {1,...,10}{%
+ \pgfmathparse{\i*1.65-.225-.7}
+ \edef\y{\pgfmathresult}
+ \ifnum1=\i
+ \def\tname{game turn}
+ \else
+ \def\tname{T\i}
+ \fi
+ \node[turn,zone point={\tname}{-.7}{\y}]
+ at (0,\y+.7) {\i};
+ }
+ \end{scope}
+ \end{scope}
+% \end{macrocode}
+%
+% A simpler alternative would be
+%
+% \begin{verbatim}
+% \begin{scope}[
+% shift={($(frame.south east)+(-0.5,.5)$)}]
+% \begin{scope}[zone scope=Turns]
+% \foreach \i in {1,...,10}{%
+% \node[turn] at (0,\i*1.65-.225) {\i};
+% }
+% \end{scope}
+% \end{scope}
+% \end{verbatim}
+% We also add a title using the styles we defined above. Note,
+% consistent use of \Tikz{} styles makes it very easy to change things
+% consistently throughout the game.
+%
+% \begin{macrocode}
+ \node[below right=5mm and 5mm of
+ frame.north west,title]{A Game};
+ \node[below left=5mm and 5mm of
+ frame.north east,sub title]{A tutorial in the\\
+ {\color{white}wargame} package};
+% \end{macrocode}
+%
+% With this, we are left with adding in the map.
+%
+% \begin{macrocode}
+ \scope[shift={(.5,.5)}]
+ \scope[shift={(1,0.86603)},
+ zone scope=Hex]
+ \hexes
+ \boardframe(c=1,r=1)(c=7,r=10)
+ % Reported by the above
+ % Board Frame:
+ % BBox: (-1.0,-0.86603)x(10.0,15.5885)
+ % WxH: (11.0x16.45453)
+ % NCxNR (1,1)x(7,10)
+% \end{macrocode}
+%
+% Above, we see the output from \verb+\boardframe+. This in turn
+% informs us how to set the offset of the inner most scope. We also
+% see that the map is $11\times 16.45453\,\textrm{cm}$ big, which means
+% our board will easily fit on standard paper (A4 or, less standard,
+% Letter).
+%
+% \begin{quote}
+% The offset of $(-1,0.86603)$ is not surprising when you know that
+% the radius $r$ of the circumscribed circle of the hexes is 1\,cm,
+% and that the first hex centre is placed in $(0,0)$. The horizontal
+% offset of -1 is just that radius $r$, and the vertical offset is
+% $r\sin60^{\circ}=\sqrt{3}/2=0.86603$.
+% \end{quote}
+%
+% The outer most scope translates the hex 5mm in from both edges so
+% that we may draw a nice frame around the map.
+%
+% The style \texttt{zone scope=Hex} will make this area a zone in
+% VASSAL and it will have a hex grid (because its argument contains
+% the sub string \texttt{hex}) attached to it.
+%
+% This end the start of the environment. Next, we define the end of
+% it. This simply closes the scopes and the \Tikz{} picture.
+%
+% \begin{macrocode}
+}{
+ \endscope%
+ \endscope%
+}
+% \end{macrocode}
+%
+% This ends the environment that defines the board proper. Now we
+% wrap it in another environment that will put the map inside a
+% \Tikz{} picture.
+%
+% \begin{macrocode}
+\newenvironment{board}[1][]{%
+ \tikzpicture[#1,zoned]
+ \innerboard}{%
+ \endinnerboard%
+ \endtikzpicture}
+% \end{macrocode}
+%
+% The style \texttt{zoned} on the \Tikz{} picture ensures that we will
+% get a zoned map when generating the VASSAL module. Note that we
+% used the \TeX{}-like form of the environment \verb+\tikzpicture+,
+% rather than \verb+\begin{tikzpicture}+, so that the various
+% \verb+\end+s does not mess up things.
+%
+%
+% We can draw the final board (\figurename~\ref{fig:board}).
+% \begin{figure}
+% \centering
+% \begin{board}[scale=.5]
+% \end{board}
+% \caption{The final board}
+% \label{fig:board}
+% \end{figure}
+%
+% \subsection{Adding units to the board}
+% \label{sec:board:units}
+%
+% We have defined our board as a environment so we can add units to it
+% without much hassle. Let us add the starting units at the starting
+% positions. Since we will be \emph{stacking} chits, we will use the
+% \verb+\chitstack+ macro for this. Note that this macro expects code
+% to produce the chits (rather than the unit styles). Therefore we
+% must add in some \verb+\noexpand+ in front of the \verb+\chit+
+% command.
+%
+% \begin{figure}
+% \centering
+% \begin{board}[scale=.5]%
+% \stackchits(A2)(.2,.2){%%
+% \noexpand\chit[a hq],%
+% \noexpand\chit[a 1 hqbg],%
+% \noexpand\chit[a 1 2jd ibn],%
+% \noexpand\chit[a 2 1jd abn]}%
+% \chit[a 1 1lg ibn](D3);%
+% \stackchits(C2)(.2,.2){%%
+% \noexpand\chit[a 2 hqbg],%
+% \noexpand\chit[a 1 1gh ibn]}%
+% \stackchits(A1)(.2,.2){%%
+% \noexpand\chit[a aregt],%
+% \noexpand\chit[a 1 1 abn]}%
+% \chit[a 2 3gh rbn](D2);%
+%
+% \stackchits(F6)(.2,.2){%%
+% \noexpand\chit[b hq],%
+% \noexpand\chit[b lg hqregt],%
+% \noexpand\chit[b lg ibn]}%
+% \stackchits(E7)(.2,.2){%%
+% \noexpand\chit[b k3 hqregt],%
+% \noexpand\chit[b k3 31 abibn]}%
+% \stackchits(D7)(.2,.2){%%
+% \noexpand\chit[b p4 hqregt],%
+% \noexpand\chit[b p4 41 cabn],%
+% \noexpand\chit[b p4 42 cabn]}%
+% \stackchits(E3)(.2,.2){%%
+% \noexpand\chit[b p7 hqregt],%
+% \noexpand\chit[b p7 71 ibn],%
+% \noexpand\chit[b p7 72 cabn]}%
+% \stackchits(D4)(.2,.2){%%
+% \noexpand\chit[b i13 hqregt],%
+% \noexpand\chit[b i13 131 ibn],%
+% \noexpand\chit[b i13 132 ibn]}%
+% \end{board}
+% \caption{The board with units at their starting positions}
+% \label{fig:board-start}
+% \end{figure}
+%
+% The board with the ``At-start'' units in place are shown in
+% \figurename~\ref{fig:board-start}. The first part of this was made
+% with
+%
+% \begin{verbatim}
+% \begin{board}
+% \stackchits(A2)(.2,.2){%
+% \noexpand\chit[a hq],
+% \noexpand\chit[a 1 hqbg],
+% \noexpand\chit[a 1 2jd ibn],
+% \noexpand\chit[a 2 1jd abn]}
+% \chit[a 1 1lg ibn](D3);
+% \end{verbatim}
+%
+% The first argument to \verb+\stackchits+ is where to put the
+% stack. The second is the offset applied to each stack unit in
+% succession (obviously the first offset is $(0,0)$). The third
+% argument is the list of chits to add to the stack.
+%
+% Note that we use the hex labels, rather than the hex coordinates, to
+% place the units and stacks of units, thanks to \texttt{hex/label is
+% name}.
+%
+% We have made the counters and board for the game. What remains is
+% the various tables (and or of course the rules).
+%
+% \subsection{Clipped boards}
+% \label{sec:board:clipped}
+%
+% We are not quite done with the board just yet. We want to make
+% \emph{another} environment which will clip to a specified area of
+% the map. We will reuse our \texttt{innerboard} environment so that
+% everything is consistent. Let us go ahead and define the
+% environment, and then see later how it is used. We define our
+% environment as two macros \verb+\clipped+ and \verb+\endclipped+ so
+% that we can use parenthesis for our arguments.
+%
+% \begin{macrocode}
+\tikzset{
+ clip board/.style={gray,line width=.5pt}}
+\newcommand\clipped[1][]{\doclipped[#1]}
+\def\doclipped[#1](#2)(#3){
+ \def\tmp@clip@a{#2}
+ \def\tmp@clip@b{#3}
+ \tikzpicture[#1]
+ \scope
+ \clip (#2) rectangle (#3);
+ \scope[shift={(-.5-1,-.5-0.86603)}]
+ \innerboard}
+\def\endclipped{%
+ \endinnerboard
+ \endscope
+ \endscope
+ \draw[clip board](\tmp@clip@a)
+ rectangle (\tmp@clip@b);
+ \endtikzpicture}
+% \end{macrocode}
+%
+% Our environment \texttt{clipped} takes 3 arguments. One is optional
+% and is keys to pass to the \Tikz{} picture environment. The two
+% others are the coordinates (relative to the hexes) of our clipping
+% rectangle. Let us illustrate this with an example --- see
+% \figurename~\ref{fig:clipped}.
+%
+% \begin{figure}
+% \centering
+% \begin{clipped}(hex cs:c=2,r=2)(hex cs:c=5,r=5)
+% \end{clipped}
+% \caption{Example of using \texttt{clipped}.}
+% \label{fig:clipped}
+% \end{figure}
+%
+% The figure was produced by the code
+%
+% \begin{verbatim}
+% \begin{clipped}(hex cs:c=2,r=2)(hex cs:c=5,r=5)
+% \end{clipped}
+% \end{verbatim}
+%
+% Note that we \emph{must} use the hex coordinate system. When we
+% make the clipping path, the nodes of the hex map has not yet been
+% defined. We can use this to illustrate things on the map. For
+% example, \figurename~\ref{fig:clipped-attack} show that B P7/72 CABN
+% attacks A 2/1JD ABN with the code
+%
+% \begin{verbatim}
+% \begin{clipped}(hex cs:c=2,r=3)(hex cs:c=5,r=5)
+% \chit[b p7 72 cabn](D5);
+% \chit[a 2 1jd abn](C4);
+% \draw[hex/attack] (D5)--(C4);
+% \end{clipped}
+% \end{verbatim}
+%
+% \begin{figure}
+% \centering
+% \begin{clipped}(hex cs:c=2,r=3)(hex cs:c=5,r=5)
+% \chit[b p7 72 cabn](D5);
+% \chit[a 2 1jd abn](C4);
+% \draw[hex/attack] (D5)--(C4);
+% \end{clipped}
+% \caption{Example of using \texttt{clipped}.}
+% \label{fig:clipped-attack}
+% \end{figure}
+%
+% Note that \emph{inside} the environment we \emph{can} use hex
+% labels as coordinates.
+%
+% \section{The charts}
+% \label{sec:charts}
+%
+% We will not go into details about how to make tables in
+% \LaTeX{}. There are plenty of excellent resources out there for that
+% purpose. Here we will make three tables: The combat resolution
+% table (CRT), the terrain effects chart (TEC), and the Order of Battle
+% (OOB) chart\footnote{In some games this is called the Order of
+% Appearance (OOA) chart.} --- all of which in some respect uses
+% elements of the
+% \textsf{wargame} package.
+%
+% For all the tables, we would like to use the \textsf{colortbl}
+% package to colour the rows. Here, we make some short hands for
+% doing just that.
+%
+% \begin{macrocode}
+\colorlet{headbg}{gray!50!white}
+\colorlet{altbg}{gray!15!white}
+\newcommand\headrow{\rowcolor{headbg}}
+\newcommand\defrow{\rowcolor{white}}
+\newcommand\altrow{\rowcolor{altbg}}
+% \end{macrocode}
+%
+% \subsection{The CRT}
+% \label{sec:charts:crt}
+%
+% The combat resolution table is in some sense a straight forward
+% \LaTeX{} table. Here's the definition
+%
+% \begin{macrocode}
+\newcommand\crt{%
+ \begin{tabular}{|c|cccccc|}
+ \hline
+ \headrow
+ \textbf{Die}
+ & \multicolumn{6}{c|}{\textbf{Odds}}
+ \\
+ \headrow
+ \textbf{roll}
+ & \textbf{1:3}
+ & \textbf{1:2}
+ & \textbf{1:1}
+ & \textbf{2:1}
+ & \textbf{3:1}
+ & \textbf{4:1}
+ \\
+ \hline
+ \defrow
+ 1 & AE & AR & AR & EX & DR & DR \\
+ \altrow
+ 2 & AE & AR & EX & EX & DR & DR \\
+ \defrow
+ 3 & AR & EX & EX & DR & DR & DE \\
+ \altrow
+ 4 & AR & EX & EX & DR & DR & DE \\
+ \defrow
+ 5 & EX & EX & DR & DR & DE & DE \\
+ \altrow
+ 5 & EX & DR & DR & DE & DE & DE \\
+ \hline
+ \end{tabular}}
+% \end{macrocode}
+%
+% And what it looks like is shown in \tablename~\ref{tab:crt}
+%
+% \begin{table}
+% \centering
+% \crt{}
+% \caption{The combat resolution table}
+% \label{tab:crt}
+% \end{table}
+%
+% \subsection{The TEC}
+% \label{sec:charts:te}
+%
+% In this table we will use small version of hexes to make a nice
+% table. The definition is as follows.
+%
+% \begin{macrocode}
+\newcommand\tec{%
+ \begin{tabular}{|cl|cc|}
+ \hline
+ \headrow
+ \multicolumn{2}{|c|}{\textbf{Terrain}}
+ & MF
+ & CF\textsuperscript{\dag}
+ \\
+ \hline
+ \defrow
+ \tikz[scale=.5]{\hex[label=]}
+ & Clear
+ & 1
+ & ---
+ \\
+ \altrow
+ \tikz[scale=.5]{\hex[label=,terrain=woods]}
+ & Woods
+ & 2
+ & \texttimes 2\textsuperscript{*}
+ \\
+ \defrow
+ \tikz[scale=.5]{\hex[label=,terrain=mountains]}
+ & Mountains
+ & Stop
+ & \texttimes 2\textsuperscript{*}
+ \\
+ \altrow
+ \tikz[scale=.5]{
+ \hex[label=,fill=sea](c=1,r=1);
+ \begin{scope}
+ \clip
+ (hex cs:c=1,r=1,v=NW)
+ --(hex cs:c=1,r=1,v=W)
+ --(hex cs:c=1,r=1,v=SW)
+ --(hex cs:c=1,r=1,e=S)
+ --(hex cs:c=1,r=1,v=W,o=.5)
+ --cycle
+ (hex cs:c=1,r=1,e=N)
+ --(hex cs:c=1,r=1,v=NE)
+ --(hex cs:c=1,r=1,v=E)
+ --(hex cs:c=1,r=1,e=SE)
+ --(hex cs:c=1,r=1,v=E,o=.4)
+ --cycle
+ ;
+ \hex[label=](c=1,r=1);
+ \end{scope}
+ }
+ & Coastal
+ & 2
+ & \texttimes2\phantom{\textsuperscript{*}}
+ \\
+ \hline
+ \multicolumn{4}{l}{\textsuperscript{\dag}
+ \emph{Defender} modifier}\\
+ \multicolumn{4}{l}{\textsuperscript{*}
+ \infantrymark{}\,\pgmark{} \emph{only},
+ unless \artillerymark}
+ \\
+ \end{tabular}
+}
+% \end{macrocode}
+%
+% The result is in \tablename~\ref{tab:te}. Note the use of
+% \verb+\infantrymark+ to put in \infantrymark{} in the table. The
+% \textsf{wargame} package defines a number of macros like this.
+%
+% \begin{table}
+% \centering
+% \tec
+% \caption{The terrain effects table}
+% \label{tab:te}
+% \end{table}
+%
+% \subsection{The OOB}
+% \label{sec:charts:oob}
+%
+% We like to make an OOB chart that we can place our unit counter on
+% so we can keep track of which units are available when. In our
+% game, all A faction units start already on the board. The B faction,
+% however, has most of its reinforcement troops way up north, and will
+% therefore bring them on the map piecemeal.
+%
+% We will use the \textsf{wargame} macro \verb+\oob+ to make our
+% OOBs. This macro uses the \texttt{pic} \texttt{chits/oob~turn} to
+% make the turns. The default setting is not what we want, so we
+% redefine that picture. In particular, we want turn ``0'' to say
+% ``At start''.
+%
+% We also want to reuse the style \texttt{turn} we used
+% to make the turn track on the board, but modify it a bit to fit our
+% purposes here. We therefore define the style \texttt{oob~turn}
+% which derives from \texttt{turn}, but scale it down 70\%, change the
+% anchor, and add some extra space outside of it
+% (\texttt{outer~sep}).
+%
+% \begin{macrocode}
+\tikzset{
+ oob turn/.style={
+ turn,
+ transform shape,
+ anchor=east,
+ outer sep=5mm,
+ scale=.7},
+}
+% \end{macrocode}
+%
+% Our modified \texttt{chit/oob~turn} picture will check if we get an
+% empty turn number, or the special ``0'' turn, and then put in a node
+% with the appropriate contents. Note that we define two pictures,
+% one which actually puts in the turn, and one that puts in nothing,
+% so when we make the combined OOB we only output the turns once. We
+% then default \texttt{chit/oob~turn} to the first picture
+%
+% \begin{macrocode}
+\tikzset{
+ oob turn real/.pic={%
+ \def\tmp{{\Large At start}}
+ \ifx|#1|\else%
+ \ifnum0=#1\else%
+ \def\tmp{#1}%
+ \fi%
+ \fi%
+ \node[oob turn,transform shape]{\tmp};
+ },
+ oob turn empty/.pic={},
+}
+\newcommand\oobrealturn{%
+ \tikzset{
+ pics/chit/oob turn/.style=%
+ {oob turn real=##1}}}
+\newcommand\oobemptyturn{%
+ \tikzset{
+ pics/chit/oob turn/.style=%
+ {oob turn empty=##1}}}
+\oobrealturn
+% \end{macrocode}
+%
+% Let us see how this looks for both factions. Factions A and B are
+% shown in \figurename~\ref{fig:a-oob} and \ref{fig:b-oob},
+% respectively.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}[oob turn/.append style={anchor=west}]
+% \oob*{\alla}{4}{1.24}{0}
+% \end{tikzpicture}
+% \caption{Faction A OOB}
+% \label{fig:a-oob}
+% \end{figure}
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \oob{\allb}{4}{1.24}{0}
+% \end{tikzpicture}
+% \caption{Faction B OOB}
+% \label{fig:b-oob}
+% \end{figure}
+%
+% These were done with
+%
+% \begin{verbatim}
+% \begin{tikzpicture}[oob turn/.append style={anchor=west}]
+% \oob{\alla}{4}{1.24}{0}
+% \end{tikzpicture}
+% \begin{tikzpicture}
+% \oob{\allb}{4}{1.24}{0}
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% Note that the stared version \verb+\oob*+ puts out the counters
+% right aligned. This is also why we append the style
+% \texttt{oob~turn} to be anchored to the west.
+%
+% The first argument to \verb+\oob+ is the list of lists of counters.
+% This is why we defined \verb+\alla+ and \verb+\allb+ in the way we
+% did. The second argument is the distance between each counter.
+% Since the counters are 1.2\,cm wide, we gave them a little extra
+% space between them by setting the second argument to 1.24\,(cm).
+% The third argument is the spacing between turn rows. Above we have
+% set that to 0\,(cm), but that we will change in the real OOB chart.
+%
+% And that's what we will do next. This will be rather wide, so we
+% when we show it in a minute, we will do so in a wide table (leaving
+% the two-column layout for a minute).
+%
+% \begin{macrocode}
+\newcommand\inneroob[1][]{%
+ \node[board frame,anchor=north] (oob frame)
+ at (0,2.5) {};%
+ % Game title
+ \node[%
+ below right=5mm and 5mm of oob frame.north west,
+ title,scale=.8]{A Game};
+ % Chart title
+ \node[%
+ below left=5mm and 5mm of oob frame.north east,
+ sub title,scale=1.2,transform shape]{%
+ Order of Battle};
+ % Turn title
+ \node[font=\sffamily\bfseries\Large,
+ white,transform shape]
+ at (0,1) {Turn};
+ %
+ \begin{scope}[%
+ transform shape,
+ oob turn/.append style={anchor=west},%
+ shift={(-1.35,0)},
+ zone scope=A OOB]%
+ \oobemptyturn%
+ \oob*{\alla}{4}{1.4}{.2}%
+ \end{scope}%
+ %
+ \begin{scope}[%
+ transform shape,
+ shift={(1.35,0)},
+ zone scope=B OOB]%
+ \oobrealturn%
+ \oob{\allb}{4}{1.4}{.2}%
+ \end{scope}%
+ %
+}
+\newcommand\fulloob[1][]{%
+ \begin{tikzpicture}[#1,zoned]%
+ \inneroob
+ \end{tikzpicture}}
+% \end{macrocode}
+% A couple of things to note.
+%
+% We put everything inside a \Tikz{} picture with the option
+% \texttt{zoned} so that we will get a zoned
+% map in VASSAL. We also add the zones \texttt{A OOB} and \texttt{B
+% OOB} via the key \texttt{zone scope}. We will need to adjust the
+% grids of the zones later on. Another side effect of using
+% \verb+\oob+ is that each turn will be marked as a ``region'' of a
+% ``region grid'' in in VASSAL, so that the each counter will be
+% automatically placed in its place on the OOB in the VASSAL module.
+%
+% Secondly, we reuse our \texttt{board frame}, \texttt{title}, and
+% \texttt{sub~title} styles to make the OOB come out in similar manner
+% as the board. We do adjust the font sizes a bit though. We have
+% also made the OOB the same size as the board so that they stack
+% nicely.
+%
+% Finally, when we make the faction A oob, we turn off generation of
+% the turn numbers. This is so we do note produce those twice.
+%
+%
+% The final OOB is shown in \figurename~\ref{fig:oob}. This was
+% produced with
+%
+% \begin{verbatim}
+% \fulloob
+% \end{verbatim}
+%
+% \begin{figure}
+% \centering
+% \fulloob[scale=.5]
+% \caption{The OOB}
+% \label{fig:oob}
+% \end{figure}
+%
+% \section{Ending the package}
+% \label{sec:end:package}
+%
+% At the end of the package we should end with the marker
+% \verb+\endinput+.
+%
+% \begin{macrocode}
+\endinput
+% \end{macrocode}
+%
+% This is the end of the package. We will do a little more in the
+% main document.
+%
+%
+% \iffalse
+% Local Variables:
+% mode: docTeX
+% TeX-master: "game.tex"
+% End:
+% \fi \ No newline at end of file
diff --git a/macros/latex/contrib/wargame/doc/tutorial/game.tex b/macros/latex/contrib/wargame/doc/tutorial/game.tex
new file mode 100644
index 0000000000..6db72bff27
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/game.tex
@@ -0,0 +1,200 @@
+\documentclass[11pt,twoside]{ltxdoc}
+
+\usepackage{game}
+\usepackage[margin=1cm,bottom=2cm,top=2cm,a4paper]{geometry}
+\newcommand\Tikz{Ti{\itshape k}Z/PGF}
+\setlength{\parskip}{.5ex}
+\setlength{\parindent}{0em}
+\newcommand\tightlist{\setlength{\itemsep}{3pt}
+ \setlength{\parskip}{0pt}}
+\newcommand\copyleftnotice{{%
+ \footnotesize \copyright{} 2022, Christian Holm Christensen,
+ licensed under the CC-BY-SA 4.0}}
+\makeatletter
+\def\ps@game{%
+ \def\@oddfoot{\hfill\copyleftnotice\hfill}%
+ \def\@evenfoot{\hfill\copyleftnotice\hfill}%
+ \def\@oddhead{The \textsf{wargame} tutorial\hfill\thepage}%
+ \def\@evenhead{\thepage\hfill\rightmark}
+ \def\sectionmark##1{%
+ \markright{\ifnum\c@secnumdepth>\z@%
+ \thesection. \ \fi##1}}}
+\makeatother
+\pagestyle{game}
+
+\title{The \LaTeX{} \textsf{wargame} package\\
+ {\large A tutorial}}
+\author{Christian Holm Christensen}
+\date{\today}
+
+\def\MacroFont{%
+ \fontencoding{\encodingdefault}%
+ \fontfamily{\ttdefault}%
+ \fontseries{\mddefault}%
+ \fontshape{\shapedefault}%
+ \footnotesize}
+\let\theCodelineNo\empty
+\begin{document}
+\thispagestyle{plain}
+\twocolumn
+\maketitle
+
+\section{Introduction}
+
+This is a short tutorial on how to use the \LaTeX{} \textsf{wargame}
+package. We will walk through the definition materials for a game.
+We will \emph{not} give actual rules for the game. That is a whole
+different topic and I refer you to the literature, for example
+
+\begin{description}\tightlist
+\item[\href{https://www.bloomsbury.com/uk/simulating-war-9781472533913/}{\textit{Simulating war}}] by P.Sabin
+\item[\href{https://www.professionalwargaming.co.uk/Complete-Wargames-Handbook-Dunnigan.pdf}{\textit{The
+ Complete Wargames Handbook}}] by J.F.Dunnigan
+\item[\href{https://www.scribd.com/book/220336866/Designing-Wargames-Introduction}{Designing
+ Wargames: Introduction}] by G.Phillies (and associated
+ \href{https://www.youtube.com/playlist?list=PLjnA1DE9KX645eBC2gDWHkSlCPvpb4JAQ}{Youtube
+ lecture series})
+
+\end{description}
+
+\section{The game}
+
+The game we will create is a small game with two factions (sides, or
+players). The game is \emph{not} supposed to be play-able, and we'll
+leave out a lot of details which we would need in a full game.
+
+\DocInput{game.sty}
+
+\section{Rules}
+
+We will not write any rules for this demonstration game. The focus of
+this tutorial is how to use the \textsf{wargame} package, not how to
+design a game.
+
+The \textsf{wargame} package does however have a number of tools that
+helps the developer write the rules. We've already seen some of them
+in action. For example, we saw how to add stacks of units to a board
+in Section~\ref{sec:board:units} or how to make board clippings to
+show a zoom of the map (Section~\ref{sec:board:clipped}).
+
+Figure~\ref{fig:clipped-attack} showed how we can illustrate an attack,
+for example. The package also provides means to indicate eliminated
+units, movement, retreats, advances, and much more. The manual gives
+a lot more information about this.
+
+\DocInput{export.tex}
+
+\section{The materials}
+
+Next, we will make some materials for printing. The next few pages
+will contain only the materials and no text, so we will summarise what
+we do here.
+
+The first thing we put out is the map. That is pretty simple. We do
+
+\begin{verbatim}
+ \begin{board}
+ \end{board}
+\end{verbatim}
+
+Then comes the OOB. We simply use the \verb+\fulloob+ macro.
+
+After that are the two tables put into one page.
+
+\begin{verbatim}
+ \crt \tec
+\end{verbatim}
+
+And the final part are the counter sheets. We will take advantage of
+the macros \verb+\alla+ and \verb+\allb+ yet again.
+
+\begin{verbatim}
+ \doublechits{\allb}{4}{1.24}
+\end{verbatim}
+
+As a final bonus, we also make a board that includes our three charts:
+The OOB, CRT, and TE. We will not demonstrate the code here, but take
+a look in the sources if you are curious.
+
+\newcommand\fullboard[1][]{%
+ \begin{tikzpicture}[#1,rotate=90]%
+ \begin{scope}
+ \begin{innerboard}
+ \end{innerboard}
+ \end{scope}
+ \begin{scope}[shift={($(frame.north east)+(7,-2.5)$)}]
+ \inneroob
+ \end{scope}
+ %
+ \node[anchor=south west,minimum width=6.2cm,minimum height=10cm,
+ line width=1pt,sub title,scale=.66,draw,align=center,
+ text depth=9.7cm,fill=neutral,transform shape]
+ at (oob frame.south west)
+ {{\LARGE Charts}};
+ %
+ \node[above right=5mm and 4mm of oob frame.south west,
+ inner sep=0pt,
+ transform shape,scale=.75,anchor=south west] (crt) {\crt};
+ %
+ \node[above=5mm of crt.north west,anchor=south west,inner sep=0pt,
+ transform shape,scale=.9] (tec) {\tec};
+ %
+ % \end{scope}
+ \node[below=1mm of frame.south west,anchor=north west,
+ transform shape]{%
+ \copyleftnotice};
+ \end{tikzpicture}}
+
+We put in \verb+\cleardoublepage+ between all this so that we can
+print directly on a duplex printer.
+
+\section{Epilogue}
+
+I hope that this short tutorial has helped you. Suggestions,
+corrections, and so on are very welcomed.
+
+\begin{flushright}
+ \textit{Christian}
+\end{flushright}
+\onecolumn
+\cleardoublepage
+
+\begin{center}
+ \begin{board}
+ \end{board}
+\end{center}
+\cleardoublepage
+
+\begin{center}
+ \fulloob
+\end{center}
+\cleardoublepage
+
+\begin{center}
+ \crt\space\space\tec
+\end{center}
+\cleardoublepage
+
+\begin{center}
+ \begin{tikzpicture}
+ \doublechits{\allb}{7}{1.24}
+ \end{tikzpicture}
+
+ \begin{tikzpicture}
+ \doublechits{\alla}{6}{1.24}
+ \end{tikzpicture}
+
+ \begin{tikzpicture}
+ \doublechits{{game turn}}{1}{1.24}
+ \end{tikzpicture}
+\end{center}
+
+\cleardoublepage
+\newgeometry{margin=7mm}
+\pagestyle{empty}
+\fullboard
+
+\end{document}
+%% Local Variables:
+%% mode: LaTeX
+%% End:
diff --git a/macros/latex/contrib/wargame/doc/tutorial/patch.py b/macros/latex/contrib/wargame/doc/tutorial/patch.py
new file mode 100644
index 0000000000..71785252bb
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/patch.py
@@ -0,0 +1,31 @@
+def patch(build,data,vmod,verbose=False):
+ # We need to import the export module :-)
+ import export
+
+ # Get the game and last free GPID
+ game = export.get_game(build)
+ gpid = int(game.getAttribute('nextPieceSlotId'))
+
+ # Get all boards
+ maps = export.get_maps(build)
+ board = maps['Board']
+
+ mkeys = export.get_masskey(board,'name')
+ export.set_node_attr(mkeys['Eliminate'],icon='eliminate-icon.png')
+ export.set_node_attr(mkeys['Flip'],icon='flip-icon.png')
+
+ # Get main map
+ pool = maps['DeadMap']
+ export.set_node_attr(pool,icon='pool-icon.png')
+
+ mkeys = export.get_masskey(pool,'name')
+ export.set_node_attr(mkeys['Restore'],icon='restore-icon.png')
+
+ # Get the OOB map
+ oob = export.get_chartwindows(game)['OOBs']
+ export.set_node_attr(oob,icon='oob-icon.png')
+
+
+
+
+
diff --git a/macros/latex/contrib/wargame/doc/wargame.pdf b/macros/latex/contrib/wargame/doc/wargame.pdf
new file mode 100644
index 0000000000..aeb06a386d
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/wargame.pdf
Binary files differ
diff --git a/macros/latex/contrib/wargame/source/Makefile b/macros/latex/contrib/wargame/source/Makefile
new file mode 100644
index 0000000000..656439e408
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/Makefile
@@ -0,0 +1,334 @@
+#
+#
+#
+NAME := wargame
+VERSION := 0.2
+LATEX_FLAGS := -interaction=nonstopmode \
+ -file-line-error \
+ --synctex=15 \
+ -shell-escape
+LATEX := pdflatex
+MAKEINDEX := makeindex
+SED := sed
+CTANOMAT := ctan-o-mat
+CTANOMAT_FLAGS := -n
+SOURCES := wargame.ins \
+ wargame.dtx \
+ package.dtx \
+ util/core.dtx \
+ chit/shape.dtx \
+ chit/misc.dtx \
+ chit/elements.dtx \
+ chit/core.dtx \
+ hex/shape.dtx \
+ hex/tile.dtx \
+ hex/ridges.dtx \
+ hex/towns.dtx \
+ hex/terrain.dtx \
+ hex/paths.dtx \
+ hex/core.dtx \
+ hex/labels.dtx \
+ hex/extra.dtx \
+ hex/terrain/woods.dtx \
+ hex/terrain/town.dtx \
+ hex/terrain/tree.dtx \
+ hex/terrain/beach.dtx \
+ hex/terrain/mountain.dtx \
+ hex/terrain/light_woods.dtx \
+ hex/terrain/mountains.dtx \
+ hex/terrain/village.dtx \
+ hex/terrain/city.dtx \
+ hex/terrain/swamp.dtx \
+ hex/terrain/rough.dtx \
+ hex/board.dtx \
+ hex/coord.dtx \
+ natoapp6c/shape.dtx \
+ natoapp6c/symbols.dtx \
+ natoapp6c/list.dtx \
+ natoapp6c/compat/seasurface.dtx \
+ natoapp6c/compat/activity.dtx \
+ natoapp6c/compat/subsurface.dtx \
+ natoapp6c/compat/missile.dtx \
+ natoapp6c/compat/air.dtx \
+ natoapp6c/compat/seamine.dtx \
+ natoapp6c/compat/land.dtx \
+ natoapp6c/compat/equipment.dtx \
+ natoapp6c/compat/installation.dtx \
+ natoapp6c/compat/space.dtx \
+ natoapp6c/frames/hostile.dtx \
+ natoapp6c/frames/base.dtx \
+ natoapp6c/frames/friendly.dtx \
+ natoapp6c/frames/neutral.dtx \
+ natoapp6c/frames/unknown.dtx \
+ natoapp6c/weaponry.dtx \
+ natoapp6c/core.dtx \
+ natoapp6c/text.dtx \
+ natoapp6c/echelon.dtx \
+ natoapp6c/util.dtx \
+ tests/map.dtx \
+ tests/chits.dtx
+SCRIPTS := utils/svg2tikz.py utils/export.py
+
+DESTDIR := $(HOME)/texmf/
+instdir := tex/latex/$(NAME)
+docdir := doc/latex/$(NAME)
+srcdir := source/latex/$(NAME)
+ctandir := ctan
+distsdir := $(NAME)-$(VERSION)
+
+TILES := beach \
+ city \
+ light_woods \
+ mountains \
+ rough \
+ swamp \
+ town \
+ village \
+ woods
+TABLES := air \
+ missile \
+ land \
+ equipment \
+ installation \
+ seasurface \
+ subsurface \
+ seamine \
+ space \
+ activity
+PKG_FILES := wargame.sty \
+ tikzlibrarywargame.util.code.tex \
+ tikzlibrarywargame.hex.code.tex \
+ tikzlibrarywargame.natoapp6c.code.tex \
+ tikzlibrarywargame.chit.code.tex \
+ wgexport.cls \
+ $(TILES:%=%.pdf)
+
+# beach.png \
+# city.png \
+# mountains.png \
+# sea.png \
+# woods.png \
+# light_woods.png \
+# rough.png \
+# swamp.png \
+# town.png
+DOC_FILES := wargame.pdf symbols.pdf compat.pdf
+
+ifdef VERBOSE
+MUTE :=
+REDIR :=
+LATEX_FLAGS :=
+else
+MUTE := @
+REDIR := > /dev/null 2>&1
+endif
+ifdef CI_COMMIT_REF_NAME
+VERSION := $(CI_COMMIT_REF_NAME)
+else
+ifdef := $(CI_JOB_ID)
+endif
+
+%.aux:%.tex
+ @echo "LATEX $< -> $@"
+ $(MUTE)$(LATEX) $(LATEX_FLAGS) $< $(REDIR)
+
+%.idx:%.dtx
+ @echo "LATEX $< -> $@"
+ $(MUTE)$(LATEX) $(LATEX_FLAGS) $< $(REDIR)
+
+%.aux:%.idx
+ @echo "LATEX $*.dtx -> $@ (via $<)"
+ $(MUTE)$(LATEX) $(LATEX_FLAGS) $*.dtx $(REDIR)
+ $(MUTE)touch $< $@
+
+%.pdf:%.aux %.ind
+ @echo "LATEX $*.dtx -> $@ (via $<)"
+ $(MUTE)$(LATEX) $(LATEX_FLAGS) $*.dtx $(REDIR)
+ $(MUTE)touch $^ $@
+
+%.pdf:%.aux %.tex
+ @echo "LATEX $*.tex -> $@ (via $<)"
+ $(MUTE)$(LATEX) $(LATEX_FLAGS) $*.tex $(REDIR)
+
+%.pdf:%.tex
+ @echo "LATEX $< -> $@"
+ $(MUTE)$(LATEX) $(LATEX_FLAGS) $< $(REDIR)
+
+
+%.ind:%.idx
+ @echo "INDEX $< -> $@ $<"
+ $(MUTE)$(MAKEINDEX) -s gind -o $@ $< $(REDIR)
+ $(MUTE)touch $^ $@
+
+%.gls:%.glo
+ @echo "GLOSSAY $< -> $@"
+ $(MUTE)$(MAKEINDEX) -s gglo -o $@ $< $(REDIR)
+ $(MUTE)touch $^ $@
+
+all: wargame.pdf
+
+package: $(PKG_FILES)
+
+everything: all symbols.pdf compat.pdf tests/test.pdf
+
+tutorial: tutorial/game.pdf
+tutorial/game.pdf: all
+ $(MUTE)$(MAKE) -C tutorial Game.vmod $(REDIR)
+
+clean:
+ @echo "CLEAN"
+ $(MUTE)rm -f *~ *.log* *.aux *.toc *.lof *.lot *.out *.ilg *.idx *.ind
+ $(MUTE)rm -f cmp_*.tex *.synctex* *.hd
+ $(MUTE)rm -f symbols.tex compat.tex testmap.tex testchits.tex
+ $(MUTE)rm -f wargame.sty wgdoc.sty logo.png logo.pdf
+ $(MUTE)rm -f symbols.pdf compat.pdf test.pdf wargame.pdf
+ $(MUTE)rm -f tikzlibrarywargame.util.code.tex
+ $(MUTE)rm -f tikzlibrarywargame.hex.code.tex
+ $(MUTE)rm -f tikzlibrarywargame.natoapp6c.code.tex
+ $(MUTE)rm -f tikzlibrarywargame.chit.code.tex
+ $(MUTE)rm -f wgexport.cls mksvg.pdf README.md.version
+ $(MUTE)rm -f $(TILES:%=%.tex) $(TILES:%=%.pdf)
+ $(MUTE)rm -rf public texmf
+ $(MUTE)rm -rf $(distsdir)
+ $(MUTE)rm -f $(distsdir).tar.gz
+ $(MUTE)rm -f $(distsdir).zip
+ $(MUTE)rm -f $(NAME).tar.gz
+ $(MUTE)rm -rf __pycache__
+ $(MUTE)rm -rf $(ctandir) tmp
+ $(MUTE)rm -f ctan.tex $(NAME).ctan.tar.gz
+
+
+
+wargame.sty \
+testmap.tex \
+testchits.tex \
+wgdoc.sty \
+compat.tex \
+symbols.tex \
+tikzlibrarywargame.hex.code.tex \
+tikzlibrarywargame.natoapp6c.code.tex \
+tikzlibrarywargame.chit.code.tex \
+wgexport.cls \
+$(TILES:%=%.tex) \
+$(TABLES:%=cmp_%.tex): $(SOURCES)
+ @echo "DOCSTRIP $<"
+ $(MUTE)$(LATEX) $< $(REDIR)
+
+wargame.idx: wargame.dtx wargame.sty $(TILES:%=%.pdf)
+wargame.pdf: wargame.aux wargame.ind
+fast: wargame.idx
+symbols.aux: symbols.tex wargame.sty
+compat.aux: compat.tex $(TABLES:%=cmp_%.tex) wargame.sty
+test.aux: test.tex wargame.sty
+
+beach.pdf: beach.tex
+city.pdf: city.tex
+light_woods.pdf:light_woods.tex
+mountains.pdf: mountains.tex
+rough.pdf: rough.tex
+swamp.pdf: swamp.tex
+town.pdf: town.tex
+village.pdf: village.tex
+woods.pdf: woods.tex
+
+install-devel: all
+ (cd $(dir $(DESTDIR)/$(instdir)) && \
+ rm -f $(notdir $(instdir)) && \
+ ln -fs $(PWD) $(notdir $(instdir)))
+
+install:$(PKG_FILES) $(DOC_FILES) $(SCRIPTS)
+ @echo "Installing DESTDIR=$(DESTDIR)"
+ $(MUTE)mkdir -p $(DESTDIR)$(instdir)
+ $(MUTE)mkdir -p $(DESTDIR)$(docdir)
+ $(MUTE)cp $(PKG_FILES) $(DESTDIR)$(instdir)
+ $(MUTE)cp $(DOC_FILES) $(DESTDIR)$(docdir)
+ $(MUTE)cp $(SCRIPTS) $(DESTDIR)$(instdir)
+
+uninstall:
+ rm -rf $(DESTDIR)$(instdir)
+ rm -rf $(DESTDIR)$(docdir)
+
+distdir:$(SOURCES) $(SCRIPTS) Makefile tests/test.tex
+ $(MUTE)rm -rf $(distsdir)
+ $(MUTE)mkdir -p $(distsdir)
+ $(foreach s, $^, \
+ mkdir -p $(distsdir)/$(shell dirname $(s)); \
+ cp $(s) $(distsdir)/$(s);)
+
+distcheck:distdir
+ $(MAKE) $(MAKEFLAGS) -C $(distsdir) everything
+
+dist:distdir
+ zip -r $(distsdir).zip $(distsdir)
+
+bindist: DESTDIR:=$(distsdir)/
+bindist:install
+ zip -r $(distsdir).zip $(distsdir)
+
+
+logo.png:logo.pdf
+ pdftocairo -png $<
+ mv logo-1.png logo.png
+
+README.md.version:README.md
+ @echo "Versioned README.md"
+ $(MUTE)$(SED) 's/^# \(.*\)/# \1\n## Version $(VERSION)/' \
+ < $< > $@
+
+ctandir: all tutorial/game.pdf README.md.version
+ @echo "Preparing CTAN directory"
+ $(MUTE)$(MAKE) install DESTDIR:=tmp/
+ $(MUTE)mkdir -p tmp/$(docdir)/tutorial
+ $(MUTE)cp $(foreach i, game.tex game.sty export.tex patch.py \
+ README.md Makefile game.pdf,\
+ tutorial/$(i)) tmp/$(docdir)/tutorial
+ $(MUTE)cp README.md.version tmp/$(docdir)/README.md
+ $(MUTE)$(MAKE) distdir distsdir:=tmp/$(srcdir) $(REDIR)
+ $(MUTE)mkdir -p $(ctandir)/$(NAME)
+ $(MUTE)cp tmp/$(docdir)/README.md $(ctandir)/$(NAME)/
+ #$(MUTE)(cd tmp && zip -q -r ../$(ctandir)/$(NAME).tds.zip *)
+ $(MUTE)(cd tmp && cp -a $(docdir) ../$(ctandir)/$(NAME)/doc)
+ $(MUTE)(cd tmp && cp -a $(srcdir) ../$(ctandir)/$(NAME)/source)
+ $(MUTE) rm -rf tmp
+
+ctan.tex:ctan.tex.in
+ @echo "SED $< -> $@"
+ $(MUTE)$(SED) -e 's/@NAME@/$(NAME)/g' \
+ -e 's/@VERSION@/$(VERSION)/' \
+ < $< > $@
+
+ctandist: $(NAME).ctan.tar.gz
+$(NAME).ctan.tar.gz: ctandir
+ @echo "TAR $@"
+ $(MUTE)rm -f $@
+ $(MUTE)(cd $(ctandir) && tar -czf ../$(NAME).ctan.tar.gz *)
+ $(MUTE)rm -rf $(ctandir) tmp
+
+
+ctan-upload:ctan.tex $(NAME).ctan.tar.gz
+ @echo "CTAN $< -> CTAN ($(CTANOMAT_FLAGS))"
+ $(MUTE)$(CTANOMAT) $(CTANOMAT_FLAGS) -c $<
+
+
+docker:
+ docker run --user root --group-add users -e GRANT_SUDO=yes -it --rm \
+ -v $(PWD):/root/$(notdir $(PWD)) texlive/texlive \
+ /bin/bash
+
+docker-prep:
+ apt update
+ apt install -y poppler-utils python3-pil \
+ libwww-mechanize-perl libfile-copy-recursive-perl
+ pwd
+ ls
+ make clean
+
+docker-artifacts: DESTDIR=$(PWD)/public/
+docker-artifacts: install tutorial/game.pdf
+ cp tutorial/game.pdf $(DESTDIR)$(docdir)/tutorial.pdf
+ cp tutorial/Game.vmod $(DESTDIR)$(docdir)/Game.vmod
+
+
+#
+# EOF
+#
diff --git a/macros/latex/contrib/wargame/source/chit/core.dtx b/macros/latex/contrib/wargame/source/chit/core.dtx
new file mode 100644
index 0000000000..7a0189074e
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/chit/core.dtx
@@ -0,0 +1,47 @@
+% \iffalse
+% ====================================================================
+% \fi
+%
+% \subsection{The \texttt{wargame.chit} \TikZ{} library}
+% \label{sec:impl:natoapp6c}
+%
+% We define the library for making chits. We load the hex \TikZ{}
+% \spec{wargame.natoapp6c} library and the \textsf{amsmath} and
+% \textsf{amstext} packages as we need those.
+%
+% \iffalse
+%<*chit>
+% \fi
+%
+% \begin{macrocode}
+\RequirePackage{amsmath}
+\RequirePackage{amstext}
+\usetikzlibrary{wargame.util,wargame.natoapp6c,math}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Debugging}
+%
+% \begin{Macro}{\chitdbglvl,\chit@dbg}
+%
+% Some macros for debugging. Similar to what we have in
+% \spec{wargame.hex} (see \sectionname~\ref{sec:impl:hex}.
+%
+% \begin{macrocode}
+\newcount\chitdbglvl\chitdbglvl=\wargamedbglvl
+\def\chit@dbg#1#2{%
+ \ifnum#1>\chitdbglvl\relax\else\message{^^J#2}\fi}
+% \end{macrocode}
+% \end{Macro}
+%
+% \input{chit/shape.dtx}
+% \input{chit/elements.dtx}
+% \input{chit/misc.dtx}
+%
+% \iffalse
+%</chit>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/chit/elements.dtx b/macros/latex/contrib/wargame/source/chit/elements.dtx
new file mode 100644
index 0000000000..8708ca2a15
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/chit/elements.dtx
@@ -0,0 +1,105 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*chit>
+% \fi
+%
+% \subsubsection{Predefined \texttt{chit} element pictures}
+%
+% \begin{TikzKey}{/tikz/pics/chit/1 factor,
+% /tikz/pics/chit/2 factors,
+% /tikz/pics/chit/2 factors artillery,
+% /tikz/pics/chit/3 factors,
+% /tikz/pics/chit/4 factors,
+% /tikz/pics/chit/identifier,
+% /tikz/pics/chit/small identifier,
+% /tikz/pics/chit/identifier macro}
+%
+% These pictures can be used as the value of \texttt{chit} keys.
+%
+% \begin{macrocode}
+\tikzset{%
+ chit/1 factor/.pic={
+ \chit@dbg{4}{ Chit 1 factor: #1}%
+ \node[chit/factor,chit/1 factor,pic actions]{#1};},
+ pics/chit/2 factors/.style args={#1,#2}{%
+ code={%
+ \chit@dbg{4}{ Chit 2 factors: #1 and #2}%
+ \node[chit/factor,chit/2 factors,pic actions]{#1--#2};}},
+ pics/chit/2 factors artillery/.style args={#1,#2,#3}{%
+ code={
+ \chit@dbg{4}{ Chit 2 factors w/artillery: `#1' `#2' `#3'}%
+ \node[chit/factor,chit/2 factors,pic actions]{%
+ #1$\overset{\text{\scriptsize #3}}{\text{--}}$#2};}},
+ pics/chit/3 factors/.style args={#1,#2,#3}{%
+ code={
+ \chit@dbg{4}{ Chit 3 factors: `#1' `#2' `#3'}%
+ \node[chit/factor,chit/3 factors,pic actions]{#1-#2-#3};}},
+ pics/chit/4 factors/.style args={#1,#2,#3,#4}{%
+ code={
+ \chit@dbg{4}{ Chit 3 factors: `#1' `#2' `#3' `#4'}%
+ \node[chit/factor,chit/4 factors,pic actions]{#1-#2-#3-#4};}},
+ chit/identifier/.pic={
+ \chit@dbg{4}{ Chit identifier: `#1'}%
+ \node[chit/identifier,pic actions]{#1};
+ },
+ chit/small identifier/.pic={
+ \chit@dbg{4}{ Chit small identifier: `#1'}%
+ \node[chit/small identifier,pic actions]{#1};
+ },
+ chit/identifier macro/.pic={%
+ \chit@dbg{4}{ Chit identifier macro: \meaning#1}
+ \edef\chit@i@tmp{#1}
+ \node[chit/identifier,pic actions]{\chit@i@tmp};},
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{/tikz/chit/factor,
+% /tikz/chit/1 factor,
+% /tikz/chit/2 factors,
+% /tikz/chit/3 factors,
+% /tikz/chit/4 factors,
+% /tikz/chit/identifier,
+% /tikz/chit/small identifier}
+%
+% Styles used by the above pictures. Users can change these as they
+% see fit.
+%
+% \begin{macrocode}
+\tikzset{%
+ chit/factor/.style={
+ shape=rectangle,
+ font=\sffamily\bfseries\large,
+ anchor=base,
+ inner sep=0,
+ %text=pgfstrokecolor,
+ draw=none,
+ fill=none,
+ },
+ chit/1 factor/.style={},
+ chit/2 factors/.style={},
+ chit/3 factors/.style={},
+ chit/4 factors/.style={text/.append style=\small},
+ chit/identifier/.style={
+ shape=rectangle,
+ font=\sffamily\bfseries\scriptsize,
+ inner sep=0,
+ % text=pgfstrokecolor,
+ draw=none,
+ fill=none,
+ },
+ chit/small identifier/.style={
+ shape=rectangle,
+ font=\sffamily\bfseries\tiny,
+ inner sep=0,
+ % text=pgfstrokecolor,
+ draw=none,
+ fill=none,
+ },
+}
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</chit>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/chit/misc.dtx b/macros/latex/contrib/wargame/source/chit/misc.dtx
new file mode 100644
index 0000000000..6c406af3f8
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/chit/misc.dtx
@@ -0,0 +1,460 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*chit>
+% \fi
+% \subsubsection{Other pictures}
+% Pictures for frame, factors, left, right, and below.
+% \begin{macrocode}
+\tikzset{
+ pics/chit/shade/.style={
+ code={%
+ \path[fill=white,opacity=#1,pic actions] (-.6,-.6) rectangle(.6,.6);}},
+ pics/chit/eliminate/.style={
+ code={%
+ \path[fill=red,opacity=#1,pic actions] (-.6,-.6) rectangle(.6,.6);}},
+ pics/chit/shade/.default=0.5,
+ pics/chit/eliminate/.default=0.25,
+}
+\def\shadechit(#1){%
+ \pic at (#1) {chit/shade};}
+\def\eliminatechit(#1){%
+ \pic at (#1) {chit/eliminate};}
+% \end{macrocode}
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Stacking of chits}
+%
+% Stacking of chits. The key \spec{chit/stack direction} sets the
+% default direction to make the stack in.
+%
+% \begin{macrocode}
+% offset, location, direction, list
+\tikzset{%
+ chit/stack direction/.store in=\chit@stack@dir,
+ chit/stack direction/.initial={(.3,.3)},
+}
+% \end{macrocode}
+%
+% Now the code
+%
+% \begin{macrocode}
+\def\chit@stack@dir{(.3,.3)}
+\def\stackchits(#1){%
+ \@ifnextchar({\st@ckchits{#1}}{\st@ckchits{#1}(.3,.3)}%)
+}
+\def\st@ckchits#1(#2)#3{
+ \chit@dbg{2}{Stacking chits `#1', `#2', `#3'}
+ \edef\xy{#1}
+ \chit@dbg{4}{Stack start at \xy}
+ \foreach[count=\i from 0] \c/\o in {#3} {%
+ \ifx\c\empty\else%
+ \edef\ccc{\c}
+ \chit@dbg{2}{Adding \meaning\ccc\space to stack at (\xy)' `\o'}
+ \expandafter\ccc(\xy)
+ %%
+ \ifx\c\o\else
+ %\chit@dbg{0}{Option: \o}
+ \edef\ccc{\o}
+ \expandafter\ccc(\xy)
+ \fi
+ \expandafter\ccc(\xy)
+ \tikzmath{%
+ coordinate \cc;
+ \cc = (\xy) + (#2);}
+ \xdef\xy{\cc}
+ \fi
+ }
+}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Making order of battle charts}
+%
+%
+% Macros for making OOBs
+%
+% Style for turns
+%
+% \begin{macrocode}
+\tikzset{
+ chit/oob turn/.pic={\node[pic actions]{#1};}}
+% \end{macrocode}
+%
+%
+% current c, current r, n-columns, cell size, y
+%
+% \begin{macrocode}
+\def\chit@oob@cellupdate(#1,#2)#3#4#5{%
+ \edef\f{\ifwg@oob@inv-1\else1\fi}%
+ \chit@dbg{1}{ \space Cell update `c=|#1|' vs `#4'*(`#3'-1)}
+ \pgfmathparse{int(ifthenelse(abs(#1)>=#4*(#3-1),#5-1,#5))}%
+ \xdef#5{\pgfmathresult}
+ \pgfmathparse{ifthenelse(abs(#1)>=#4*(#3-1),#2-#4,#2)}%
+ \xdef#2{\pgfmathresult}%
+ \pgfmathparse{ifthenelse(abs(#1)>=#4*(#3-1),0,#1+\f*#4)}%
+ \xdef#1{\pgfmathresult}%
+ \chit@dbg{1}{ \space\space-> `\string#5'=#5 `\string#2'=#2 `\string#1'=#1}
+}
+% \end{macrocode}
+%
+% current c, current r, cell size, extra vertical spacing
+%
+% \begin{macrocode}
+\def\chit@oob@rowupdate(#1,#2)#3#4{%
+ \chit@dbg{2}{ Row update c=`#1',r=`#2',s=`#3',e=`#4'}
+ %\pgfmathparse{ifthenelse(#1>0,#2-#3,#2)}%
+ \pgfmathparse{#2-#3)}%
+ \xdef#2{\pgfmathresult}%
+ %\xdef#1{0}
+ \chit@dbg{2}{ \space\space-> update `\string#2'=#2}
+}
+% \end{macrocode}
+% current c, current r, cell size, extra spacing
+%
+% \begin{macrocode}
+\def\chit@oob@turnupdate(#1,#2)#3#4{%
+ \chit@dbg{2}{ Turn update c=`#1',r=`#2',s=`#3',e=`#4'}
+ % \pgfmathparse{#2-ifthenelse(#1>0,#3,0)-#4}%
+ \pgfmathparse{#2-#4-ifthenelse(abs(#1)>0.0001,#3,0)}
+ \xdef#2{\pgfmathresult}%
+ \xdef#1{0}%
+ \chit@dbg{2}{ \space\space-> update `\string#1'=#1,`\string#2'=#2}
+}
+% \end{macrocode}
+% chit list, n-colls, cell size, extra vertical spacing
+%
+% This expects a list of lists of chits, one list per turn; the
+% maximum number of columns; the size of cells, extra spacing between
+% turns.
+%
+% Note, the list of lists leaf elements should be styles for the
+% chits.
+%
+% This depends on the Tikz pic \texttt{chit/oob~turn} which takes the
+% number as argument.
+%
+%
+% \begin{macrocode}
+\newif\ifwg@oob@inv\wg@oob@invfalse
+\def\wg@star@oob{\wg@oob@invtrue\wg@oob}
+\def\wg@nostar@oob{\wg@oob@invfalse\wg@oob}
+\def\oob{%
+ \@ifstar{\wg@star@oob%
+ }{\wg@nostar@oob%
+ }%
+}
+\def\wg@oob#1#2#3#4{
+ \def\r{0}
+ \chit@dbg{1}{OOB: `#1'}
+ \foreach[count=\ti from 0] \t/\y in #1{
+ \xdef\o{\r}
+ \def\c{0}
+ \ifx\t\y\def\y{0}\fi
+ \chit@dbg{1}{Turn \ti\space(\r,\t,y=\y):'}
+ \ifwg@oob@inv%
+ \pic at ( .5,\r) {chit/oob turn=\ti};%
+ \else
+ \pic at (-.5,\r) {chit/oob turn=\ti};%
+ \fi%
+ \ifx\t\empty\else%
+ \foreach \u/\m in \t{
+ %% \chit@dbg{2}{ `\u'=`\m'}
+ \ifx\u\empty\else
+ \ifx\m\@empty\def\m{1}\fi
+ \ifx\u\m\def\m{1}\fi
+ \foreach \n in {1,...,\m}{%
+ \ifx\u\chit@blank\else
+ \chit[\u=\ti,zone point={\u}{\c}{\r}](\c,\r)
+ \fi
+ \chit@oob@cellupdate(\c,\r){#2}{#3}{\y}
+ }
+ \fi
+ }
+ \fi
+ \chit@dbg{1}{ End of chits in turn
+ \ti\space(c=`\c',r=`\r',o='\o',y='\y')}
+ % IF no units where given, then we force \c to be non-zero so that
+ % \chit@oob@turnupdate increments the row
+ \ifx\t\@empty
+ \def\c{#3}
+ \chit@dbg{2}{ Turn is empty, set c=`\c'}
+ \fi
+ %\ifnum\y<0% No explicit number of rows given
+ % \def\c{#3}
+ % \chit@dbg{2}{ No explicit number of rows given, set c=`\c'}
+ %\fi
+ % In case the user gave and explicit number of rows, add the rows
+ % that are missing. \y is initially set to the number of
+ % requested rows, and then decremented every time we go down one
+ % row. So if the number of rows we did so far is N, and the
+ % requested number of rows is M, then the loop below adds M-N
+ % rows.
+ \ifnum\y>0%
+ \chit@dbg{2}{ Looping rows from 2 to \y, break when row > \y}%
+ \foreach \rr in {2,...,\y}{
+ %\ifnum\rr>\y% A little funny, but \y can be negative!
+ % \chit@dbg{2}{ \space Breaking loop \rr\space > \y}%
+ % \breakforeach%
+ %\else%
+ \chit@oob@rowupdate(\c,\r){#3}{#4}
+ %\fi
+ }
+ \fi
+ % This will zero \c. However, if on entry |\c|>0, then we also
+ % increment the row
+ \chit@oob@turnupdate(\c,\r){#3}{#4}
+ \chit@dbg{1}{End of turn \ti\space(c=`\c',r=`\r',o='\o',y='\y')}
+ }
+ \chit@dbg{2}{End of OOB (c=`\c',r=`\r',y=`\y')}
+}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Table of chits}
+%
+% \begin{macrocode}
+\tikzset{
+ chit/cell background/.style={fill=black},
+ blank chit/.style={/chit/frame={draw=none,fill=none}},
+}
+% \end{macrocode}
+%
+% These macros are used when we set tables of chits. This allows us
+% to define blank spaces in the table by giving the element
+% \texttt{blank~chit}.
+%
+% \begin{macrocode}
+\def\chit@blank{blank chit}
+\def\chit@cellbg(#1,#2)#3{%
+ \draw[chit/cell background](#1-#3/2,#2-#3/2) rectangle++(#3,#3);
+}
+% \end{macrocode}
+%
+% \begin{Macro}{\ifchits@reset}
+%
+% This `if' controls whether to reset the coordinates to the origin
+% when \cs{chits} is called. If true, then reset for a new table.
+%
+% \begin{macrocode}
+\newif\ifchits@reset\chits@resettrue
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\chits,\@chits,\chit@sng@cellupdate}
+% \begin{macrocode}
+\def\chit@sng@cellupdate(#1,#2)#3#4{%
+ \chit@dbg{2}{Current `#1' vs `#4'*(`#3'+1)}
+ \pgfmathparse{ifthenelse(#1>=#4*(#3-1),#2-#4,#2)}%
+ \xdef#2{\pgfmathresult}%
+ \pgfmathparse{ifthenelse(#1>=#4*(#3-1),0,#1+#4)}%
+ \xdef#1{\pgfmathresult}%
+}
+% \end{macrocode}
+%
+% The stared version (\cs{chits*}) of this macro continues the
+% previously set chit table.
+%
+% \begin{macrocode}
+\def\chits{%
+ \@ifstar{\chits@resetfalse\@chits}{\chits@resettrue\@chits}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@chits#1#2#3{
+ \ifchits@reset
+ \def\r{0}%
+ \def\c{0}%
+ \fi
+ \chit@dbg{1}{Chits to make: #1}%
+ \foreach[count=\ti from 0] \t/\x in #1{%
+ \chit@dbg{2}{Turn `\t' with option `\x'}
+ \ifx\t\empty\else%
+ \foreach \u/\m in \t{%
+ \ifx\u\empty\else%
+ \chit@dbg{2}{Next chit `\u' with possible multiplicity `\m'}%
+ \ifx\m\@empty\def\m{1}\fi%
+ \ifx\u\m\def\m{1}\fi%
+ \chit@dbg{2}{Next chit `\u' multiplicity `\m'}%
+ \foreach \n in {1,...,\m}{%
+ \ifx\u\chit@blank%
+ \chit@dbg{3}{Ignoring blank chit:\u}%
+ \else%
+ \chit@cellbg(\c,\r){#3}%
+ \chit[\u=\ti](\c,\r)%
+ \chit@sng@cellupdate(\c,\r){#2}{#3}%
+ \fi%
+ }%
+ \fi%
+ }%
+ \fi%
+ }%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\doublechits,
+% \@doublechits,
+% \chit@dbl@cellupdate,
+% \chit@dbl@flip}
+% \begin{enumerate}
+% \item coordinates
+% \item coordinates
+% \item cell-size
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\chit@dbl@flip(#1,#2)#3{%
+ \pgfmathparse{-#1}%
+ \xdef\mc{\pgfmathresult}%
+}
+% \end{macrocode}
+%
+% \begin{enumerate}
+% \item coordinates
+% \item coordinates
+% \item Number of columns
+% \item cell-size
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\chit@dbl@cellupdate(#1,#2)#3#4{%
+ \pgfmathparse{ifthenelse(#1<-#4/2,#2,#4+#2)}%
+ \xdef#2{\pgfmathresult}%
+ \pgfmathparse{ifthenelse(#1<-#4/2,#4+#1,-(#3-.5)*#4)}%
+ \xdef#1{\pgfmathresult}%
+}
+% \end{macrocode}
+%
+% \begin{enumerate}
+% \item List of list of keys
+% \item Number of columns
+% \item size of each cell
+% \end{enumerate}
+%
+% The stared version (\cs{doublechits*}) of this macro continues the
+% previously set chit table.
+%
+% \begin{macrocode}
+\def\doublechits{%
+ \@ifstar{\chits@resetfalse\@doublechits}{\chits@resettrue\@doublechits}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@doublechits#1#2#3{%
+ \chit@dbg{1}{Setting double-sided chits: #1}
+ \ifchits@reset
+ \pgfmathparse{-(#2-.5)*#3}
+ \xdef\c{\pgfmathresult}
+ \def\r{0}
+ \fi
+
+ \foreach[count=\ti from 0] \t/\x in #1{
+ \ifx\t\empty\else%
+ \foreach \u/\m in \t{
+ \ifx\u\empty\else
+ \ifx\m\@empty\def\m{1}\else%
+ \ifx\u\m\def\m{1}\fi\fi
+ \chit@dbg{2}{`\u'=`\m' (\c,\r)}
+ \foreach \n in {1,...,\m}{%
+ \ifx\u\chit@blank
+ \chit@dbg{3}{Ignoring blank chit:\u}
+ \else
+ \chit@cellbg(\c,\r){#3}
+ \chit[\u=\ti](\c,\r)
+ \chit@dbl@flip(\c,\r){#3}
+ \chit@cellbg(\mc,\r){#3}
+ \chit[\u\space flipped=\ti,zone turn=\t,zone mult=\n](\mc,\r)
+ \chit@dbl@cellupdate(\c,\r){#2}{#3}
+ \fi
+ }
+ \fi
+ }
+ \fi
+ }
+ \draw[dashed](0,-3*#3/4)--(0,\r-#3/4);
+ \draw[dashed,<-] (#3/5,-2*#3/3)--(#3/2,-2*#3/3) node[anchor=west]{Back};
+ \draw[dashed,<-] (-#3/5,-2*#3/3)--(-#3/2,-2*#3/3) node[anchor=east]{Front};
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Some utilities}
+%
+%
+% Game turn marker
+%
+% \begin{macrocode}
+\tikzset{
+ number chit/.pic={
+ \node[shape=rectangle,font=\sffamily\bfseries\LARGE]{%
+ \begin{tabular}{c} #1\end{tabular}};},
+ game turn/.pic={
+ \node[shape=rectangle,font=\sffamily\bfseries]{%
+ \begin{tabular}{c} Game\\Turn\end{tabular}};},
+ game turn/.style={
+ /chit/full={game turn},
+ color=black,
+ fill=white},
+ game turn flipped/.style={game turn},
+ dummy chit/.style={fill=white},
+}
+% \end{macrocode}
+%
+% Marks of chits
+%
+% \begin{macrocode}
+\providecommand\chitmark[2][]{\tikz[scale=.25,#1]{\chit[#2]}}
+% \end{macrocode}
+%
+% Stacking mark
+%
+% \begin{macrocode}
+\tikzset{
+ wg stacking/.style={fill=white,
+ /chit/symbol={[faction=friendly,command=land]}},
+}
+\DeclareRobustCommand\stackmark[1][]{%
+ \tikz[baseline=(current bounding box.center),scale=.3,#1]{
+ \stackchits(0,0)(.3,-.3){%
+ \noexpand\chit[wg stacking],
+ \noexpand\chit[wg stacking],
+ \noexpand\chit[wg stacking]}}}
+% \end{macrocode}
+%
+% ZOC mark
+%
+% \begin{macrocode}
+\DeclareRobustCommand\zocmark[1][]{%
+ \tikz[baseline=(current bounding box.center),scale=.1,#1]{%
+ \begin{scope}[hex/first row and column are=0,
+ hex/row direction is=normal,
+ hex/column direction is=normal,
+ hex/short columns=none]
+ \hex[label=,fill=gray](c=1,r=1)%
+ \hex[label=,fill=white](c=1,r=2)%
+ \hex[label=,fill=white](c=1,r=0)%
+ \hex[label=,fill=white](c=0,r=0)%
+ \hex[label=,fill=white](c=0,r=1)%
+ \hex[label=,fill=white](c=2,r=1)%
+ \hex[label=,fill=white](c=2,r=0)
+ \end{scope}}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tikzset{
+ zone point/.code n args={3}{}}
+% \end{macrocode}
+%
+% \iffalse
+%</chit>
+% \fi
diff --git a/macros/latex/contrib/wargame/source/chit/shape.dtx b/macros/latex/contrib/wargame/source/chit/shape.dtx
new file mode 100644
index 0000000000..8ad0614cb8
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/chit/shape.dtx
@@ -0,0 +1,544 @@
+% \iffalse
+% --------------------------------------------------------------------
+% <*chit>
+% \fi
+%
+% \subsubsection{The \texttt{chit} key namespace}
+% \begin{TikzKey}{/chit/full,
+% /chit/symbol,
+% /chit/left,
+% /chit/right,
+% /chit/upper left,
+% /chit/upper right,
+% /chit/lower left,
+% /chit/lower right,
+% /chit/factors,
+% /chit/setup,
+% /chit/id}
+%
+% The parts of a chit
+%
+% \begin{macrocode}
+\tikzset{%
+ /chit/.search also={/tikz},
+ /chit/.cd,
+ full/.store in=\chit@full, full/.initial=,%
+ symbol/.store in=\chit@symbol, symbol/.initial=,%
+ left/.store in=\chit@left, left/.initial=,%
+ unique/.style={/chit/left={#1}},%
+ right/.store in=\chit@right, right/.initial=,%
+ parent/.style={/chit/right={#1}},%
+ upper left/.store in=\chit@upper@left, upper left/.initial=,%
+ upper right/.store in=\chit@upper@right, upper right/.initial=,%
+ lower left/.store in=\chit@lower@left, lower left/.initial=,%
+ lower right/.store in=\chit@lower@right, lower right/.initial=,%
+ factors/.store in=\chit@factors, factors/.initial=,%
+ setup/.store in=\chit@setup, setup/.initial=,%
+ id/.store in=\chit@id, id/.initial=,%
+ frame/.store in=\chit@frame, frame/.initial=,%
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{/tikz/chit/full,
+% /tikz/chit/symbol,
+% /tikz/chit/left,
+% /tikz/chit/right,
+% /tikz/chit/upper left,
+% /tikz/chit/upper right,
+% /tikz/chit/lower left,
+% /tikz/chit/lower right,
+% /tikz/chit/factors,
+% /tikz/chit/setup,
+% /tikz/chit/id}
+%
+% Styles of each element in a chit. Users may override these at their
+% own peril. That is, it is OK to override them, but the user should
+% be careful.
+%
+% \begin{macrocode}
+\tikzset{
+ chit/symbol/.style={scale=.4,transform shape},
+ chit/parts/.style={shape=rectangle,transform shape},
+ chit/factors/.style={chit/parts,anchor=south},
+ chit/left/.style={chit/parts,anchor=south,rotate=90},
+ chit/right/.style={chit/parts,anchor=north,rotate=90},
+ chit/upper left/.style={chit/parts,anchor=north west},
+ chit/upper right/.style={chit/parts,anchor=north east},
+ chit/lower left/.style={chit/parts,anchor=south west},
+ chit/lower right/.style={chit/parts,anchor=south east},
+ chit/setup/.style={chit/parts},
+ chit/full/.style={chit/parts},
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{The \texttt{chit} styles}
+%
+% \begin{TikzKey}{/tikz/chit}
+% This key sets up a node to make a chit. The key takes a single
+% argument which in turn must contain key--value pairs in the
+% \texttt{/chit} (or \texttt{/tikz}) namespace(s). We set the
+% \texttt{shape} parameter of the node, and calls the passed keys in
+% the \texttt{/chit} namespace to set-up elements of the chit.
+%
+% \begin{macrocode}
+\tikzset{%
+ chit/.code={%
+ \pgfkeys{/tikz/transform shape,/tikz/shape=chit}
+ \pgfkeys{/chit/.cd,#1}}}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% We define a counter to set-up unique names for chit nodes.
+%
+% \begin{macrocode}
+\newcounter{chit@id}\setcounter{chit@id}{0}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{The \cs{chit} shape}
+%
+% \begin{Macro}{\chit@n@to,\@chit@n@to,\@@chit@n@to,\@chit@n@to@}
+%
+% These macros puts the NATO App6(c) symbol into a chit. The first
+% macro takes the identifier and position of the symbol, and then
+% scans for options. If no options are given, then we go directly
+% to the rendering (\cs{@chit@n@to@}). Otherwise, we may also need
+% to scan for an offset given as \parg{delta-x,delta-y}.
+%
+% \begin{macrocode}
+\def\chit@n@to#1#2{%
+ %% Without a following start square bracket '[' by-pass to final
+ \chit@dbg{4}{Chit NATO App6(c) first step `#1' `#2'}
+ \@ifnextchar[{%
+ %\message{^^JStart square bracket}%
+ \@chit@n@to{#1}{#2}}{%
+ %\message{^^JNo start square bracket}%
+ \@chit@n@to@{#1}{#2}}%]]
+}
+% \end{macrocode}
+%
+% The following macro is called if we had no options.
+%
+% \begin{macrocode}
+\def\@chit@n@to@#1#2#3\@end@chit@n@to{%
+ \chit@dbg{4}{Chit NATO App6(c) w/o offset:
+ ^^J Options: #3
+ ^^J ID: #1
+ ^^J Position: #2}
+ \node[chit/symbol,natoapp6c={#3,id=#1}] (#1) at (#2) {};
+ \chit@dbg{4}{Chit NATO App6(c) ended}%
+}
+% \end{macrocode}
+%
+% This is called if we had an option-like argument. Check if we have
+% an offset
+%
+% \begin{macrocode}
+\def\@chit@n@to#1#2[#3]{%
+ \chit@dbg{4}{Chit NATO App6(c) second step `#1' `#2' `#3'}
+ \@ifnextchar({\@@chit@n@to{#1}{#2}{#3}}{\@@chit@n@to{#1}{#2}{#3}(0,0)}%)
+}
+% \end{macrocode}
+%
+% This called if we had option-like argument.
+%
+% \begin{macrocode}
+\def\@@chit@n@to#1#2#3(#4)\@end@chit@n@to{%
+ \chit@dbg{4}{Chit NATO App6(c) w/offset:
+ ^^J Options: #3
+ ^^J ID: #1
+ ^^J Position: #2
+ ^^J Offset: #4}
+ \node[chit/symbol,natoapp6c={#3,id=#1}] (#1) at ($(#2)+(#4)$) {};}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\chit@tr@ns@nchor,\chit@nchor}
+%
+% Get anchor of sub-symbol element in chit. We need to do this,
+% because the symbol is translated and scaled.
+%
+% \begin{macrocode}
+\def\chit@tr@ns@nchor#1{%
+ \pgf@x=0.4\pgf@x%
+ \pgf@y=0.4\pgf@y\advance\pgf@y#1}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\chit@nchor#1#2#3{%
+ \wg@sub@nchor{#1}{#2}
+ \chit@tr@ns@nchor{#3}}
+\def\chit@report{}
+\tikzset{
+ zone turn/.style={},
+ zone mult/.style={}
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% Now follows the actual \text{chit} shape. This is rather long, so
+% we will break it up a bit
+%
+%
+% The first thing is we declare some saved anchors. These are
+% computed (and defined as internal macros) when the shape is
+% instantised. The anchors give the centre and north east corner of
+% the node, the place to put the NATO App6(c) symbol and factors. We
+% also set a dimension for the margins (corner and factors elements).
+%
+% \begin{macrocode}
+\pgfdeclareshape{chit}{
+ \savedanchor\center{\pgf@x=0cm\pgf@y=0cm}
+ \savedanchor\northeast{\pgf@x=0.6cm\pgf@y=0.6cm}
+ \savedanchor\symbol{\pgf@x=0cm\pgf@y=0.2cm}
+ \savedanchor\factors{\pgf@x=0cm\pgf@y=-0.5cm}
+ \saveddimen\margin{\pgf@x=0.04cm}
+% \end{macrocode}
+%
+% Next, we define some saved macros. These are called (and declares
+% internal macros) when the shape is instantised. We define macros
+% for the identifier,
+%
+%
+% \begin{macrocode}
+ \savedmacro\id{%
+ \chit@dbg{4}{Chit ID: \meaning\chit@id}%
+ \@ifundefined{chit@id}{\let\chit@id\pgfutil@empty}{}%
+ \ifx\chit@id\pgfutil@empty%
+ \wg@r@ndom@id%
+ \edef\id{chit\wg@uuid}%
+ \else%
+ \edef\id{\chit@id}%
+ \fi%
+ \chit@dbg{4}{Chit ID stored: \meaning\chit@id}
+ }
+ \savedmacro\chitframeopt{%
+ \let\chitframeopt\pgfutil@empty%
+ \@ifundefined{chit@frame}{}{%
+ \edef\chitframeopt{\chit@frame}}
+ \n@to@pp@dbg{3}{Chit Frame options: \meaning\chitframeopt}%
+ }
+% \end{macrocode}
+%
+% We define the regular anchors of the shape. That is, the centre,
+% corners, and edges.
+%
+% \begin{macrocode}
+ \anchor{center}{\center}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{north} {\northeast\pgf@x=0cm}
+ \anchor{south} {\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{east} {\northeast\pgf@y=0cm}
+ \anchor{west} {\northeast\pgf@x=-\pgf@x\pgf@y=0cm}
+% \end{macrocode}
+%
+% Next, we want to be able to reference the symbol anchors too. So we
+% define these anchors from the embedded node anchors. Note, these
+% anchors will not exist if the chit is made with
+% \texttt{full=}\meta{args}.
+%
+% \begin{macrocode}
+ \anchor{symbol north east}{\chit@nchor{M\id symbol}{north east}{0.2cm}}
+ \anchor{symbol north west}{\chit@nchor{M\id symbol}{north west}{0.2cm}}
+ \anchor{symbol south east}{\chit@nchor{M\id symbol}{south east}{0.2cm}}
+ \anchor{symbol south west}{\chit@nchor{M\id symbol}{south west}{0.2cm}}
+ \anchor{symbol north} {\chit@nchor{M\id symbol}{north}{0.2cm}}
+ \anchor{symbol west} {\chit@nchor{M\id symbol}{west}{0.2cm}}
+ \anchor{symbol south} {\chit@nchor{M\id symbol}{south}{0.2cm}}
+ \anchor{symbol east} {\chit@nchor{M\id symbol}{east}{0.2cm}}
+ \anchor{symbol upper} {\chit@nchor{M\id symbol}{upper}{0.2cm}}
+ \anchor{symbol lower} {\chit@nchor{M\id symbol}{lower}{0.2cm}}
+ \anchor{symbol left} {\chit@nchor{M\id symbol}{left}{0.2cm}}
+ \anchor{symbol right} {\chit@nchor{M\id symbol}{right}{0.2cm}}
+ \anchor{symbol echelon} {\chit@nchor{M\id symbol}{north}{0.2cm}}
+ \anchor{symbol below} {\chit@nchor{M\id symbol}{south}{0.1cm}}
+% \end{macrocode}
+%
+% Some anchors to sub-elements. Some of them only exists if we have
+% NATO App6(c) symbol in the chit.
+%
+% \begin{macrocode}
+ \anchor{symbol} {\symbol}
+ \anchor{factors} {\factors}
+ \anchor{left} {\chit@nchor{M\id symbol}{west}{.2cm}\advance\pgf@x-\margin}
+ \anchor{right}{\chit@nchor{M\id symbol}{east}{.2cm}\advance\pgf@x+\margin}
+ \anchor{upper right} {%
+ \northeast \advance\pgf@x-\margin \advance\pgf@y-\margin%
+ }
+ \anchor{upper left}{
+ \northeast \advance\pgf@x-\margin \advance\pgf@y-\margin \pgf@x=-\pgf@x%
+ }
+ \anchor{lower right} {%
+ \northeast \advance\pgf@x-\margin \advance\pgf@y-\margin \pgf@y=-\pgf@y%
+ }
+ \anchor{lower left}{
+ \northeast \advance\pgf@x-\margin \advance\pgf@y-\margin%
+ \pgf@x=-\pgf@x \pgf@y=-\pgf@y%
+ }
+% \end{macrocode}
+%
+% Now for the actual path. For the background path, we simply specify
+% the frame. This is so that this will get drawn (and possibly
+% filled) using the appropriate options.
+%
+% \begin{macrocode}
+ \backgroundpath{%
+ %% This is the outline of the chit only. The rest of the chit is
+ %% made on the foreground "path".
+ \northeast%
+ \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpa=-\wg@tmpa \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpb=-\wg@tmpb \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpa=-\wg@tmpa \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \pgfclosepath
+ }
+% \end{macrocode}
+%
+% Finally, we make the foreground rendered path. This is where we do
+% the most stuff. We do it in the \emph{behind} foreground path so
+% that we can ensure things are drawn the way we want it.
+%
+% The first thing is to set-up the clipping to the chit frame.
+%
+% \begin{macrocode}
+ \behindforegroundpath{%
+ \chit@dbg{4}{%
+ Chit foreground: \meaning\id
+ ^^J ID (set): \meaning\chit@id
+ ^^J Symbol: \meaning\chit@symbol
+ ^^J Full: \meaning\chit@full
+ ^^J Factors: \meaning\chit@factors
+ ^^J Left: \meaning\chit@left
+ ^^J Right: \meaning\chit@right
+ ^^J Upper left: \meaning\chit@upper@left
+ ^^J Lower left: \meaning\chit@lower@left
+ ^^J Upper right: \meaning\chit@upper@right
+ ^^J Lower right: \meaning\chit@lower@right}
+ \chit@report{}
+ \pgfscope
+ %
+ \northeast%
+ \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpa=-\wg@tmpa \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpb=-\wg@tmpb \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpa=-\wg@tmpa \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{clip}
+% \end{macrocode}
+%
+% If we do not have the \texttt{symbol} key set, then we set the
+% \texttt{full} key as a picture.
+%
+% \begin{macrocode}
+ \@ifundefined{chit@symbol}{%
+ %% Draw full stuff
+ \@ifundefined{chit@full}{}{%
+ \center\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \wg@pic@all{\chit@full}{}{\the\wg@tmpa,\the\wg@tmpb}{chit/full}}%
+ }{%
+% \end{macrocode}
+%
+% Otherwise, we put in a node with shape \texttt{natoapp6c} and pass
+% the \texttt{symbol} key--value pairs as options.
+%
+% \begin{macrocode}
+ \edef\symid{\id symbol}%
+ \symbol%
+ \edef\args{{\symid}{\the\pgf@x,\the\pgf@y}\chit@symbol}%
+ \chit@dbg{6}{Arguments to chit NATO symbol: \meaning\args}%
+ \expandafter\chit@n@to\args\@end@chit@n@to%
+ \chit@dbg{6}{After making NATO symbol in chit}%
+% \end{macrocode}
+%
+% Having made the NATO App6(c) symbol, which we gave the node name
+% \meta{id}\texttt{symbol} where \meta{id} is the ID of this chit, we
+% can make the rest of the chit elements. These are the left and
+% right elements, which are set west and east of the symbol,
+% respectively; the factors; and the four corner elements.
+%
+% If the respective elements have not been specified, we do not make
+% them.
+%
+% First the left and right elements. Note that these uses the anchors
+% of the embedded \texttt{natoapp6c} node for placement.
+%
+% \begin{macrocode}
+ % Put in left of symbol
+ \@ifundefined{chit@left}{}{%
+ \begin{scope}[]
+ \pgfpointanchor{\symid}{west}%
+ \wg@tmpa=\pgf@x\advance\wg@tmpa-\margin%
+ \wg@tmpb=\pgf@y%
+ \wg@pic@all{\chit@left}{}{\the\wg@tmpa,\the\wg@tmpb}{chit/left}%
+ \end{scope}}%
+ % Put in right of symbol
+ \@ifundefined{chit@right}{}{%
+ \begin{scope}[]
+ \pgfpointanchor{\symid}{east}%
+ \wg@tmpa=\pgf@x\advance\wg@tmpa+\margin%
+ \wg@tmpb=\pgf@y%
+ \wg@pic@all{\chit@right}{}{\the\wg@tmpa,\the\wg@tmpb}{chit/right}%
+ \end{scope}}%
+% \end{macrocode}
+%
+% Next, we want to put in the corner elements. But before we do
+% that, we use our saved anchors and dimensions to calculate the
+% coordinates. Note that the corner elements are anchored to the
+% corners (plus margin) of the chit frame.
+%
+% \begin{macrocode}
+ % Get coordinates
+ \northeast%
+ \wg@tmpa=\pgf@x%
+ \wg@tmpb=\pgf@y%
+ \advance\wg@tmpa-\margin%
+ \advance\wg@tmpb-\margin%
+% \end{macrocode}
+%
+% With the coordinates extracted, we set the four corner
+% elements. Note, for the anchoring to work, we should specify
+% pictures that have anchors (e.g., nodes). If not, we must take care
+% to give offsets or the like.
+%
+% \begin{macrocode}
+ % Put in upper left corner
+ \@ifundefined{chit@upper@left}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\chit@upper@left}{}{-\the\wg@tmpa,\the\wg@tmpb}{%
+ chit/upper left}%
+ \end{scope}}
+ % Put in upper right corner
+ \@ifundefined{chit@upper@right}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\chit@upper@right}{}{\the\wg@tmpa,\the\wg@tmpb}{%
+ chit/upper right}%
+ \end{scope}}
+ % Put in lower left corner
+ \@ifundefined{chit@lower@left}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\chit@lower@left}{}{-\the\wg@tmpa,-\the\wg@tmpb}{%
+ chit/lower left}%
+ \end{scope}}
+ % Put in lower right corner
+ \@ifundefined{chit@lower@right}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\chit@lower@right}{}{\the\wg@tmpa,-\the\wg@tmpb}{%
+ chit/lower right}%
+ \end{scope}}
+% \end{macrocode}
+%
+% Finally, we put in the unit factors. They are put at the bottom of
+% the chit frame (plus margin) and are typically anchored to the south
+% anchor of the element. Note, we can put in several factors if need
+% be.
+%
+% \begin{macrocode}
+ % Put in factors
+ \@ifundefined{chit@factors}{}{%
+ \advance\wg@tmpb-\margin%
+ \begin{scope}[]
+ \wg@pic@all{\chit@factors}{}{0,-\the\wg@tmpb}{chit/factors}%
+ \end{scope}}%
+ }%
+ \endpgfscope%
+ % Draw frame?
+ \edef\tmp@opt{[\chitframeopt]}
+ \expandafter\scope\tmp@opt
+ \northeast%
+ \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpa=-\wg@tmpa \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpb=-\wg@tmpb \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpa=-\wg@tmpa \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{stroke}
+ \endscope
+ }
+}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{The \cs{chit} wrapper macro}
+%
+% \begin{Macro}{\chit,\chit@,\chit@@}
+%
+% The macro to make the chits. This is a wrapper around a
+% \texttt{node} with shape \texttt{chit}. The syntax of this macro
+% is
+%
+% \begin{Syntax}
+% \cs{chit}\oarg{chit options}\parg{position}\parg{identifier};
+% \end{Syntax}
+%
+% Note that the trailing semi-colon is optional. Here \meta{chit
+% options} are any key-value pairs in the \texttt{/chit} (and
+% \texttt{/tikz}) namespace.
+%
+% The first macro parses for options.
+%
+% \begin{macrocode}
+\def\chit{%
+ \chit@dbg{5}{Chit}
+ \@ifnextchar[{\chit@}{\chit@[]}%]
+}
+% \end{macrocode}
+%
+% Parse for coordinates.
+%
+% \begin{macrocode}
+\def\chit@[#1]{%
+ \chit@dbg{5}{Chit second: `#1'}
+ \@ifnextchar({\chit@@{#1}}{\chit@@{#1}(0,0)}%)
+}
+% \end{macrocode}
+%
+% Parse for name.
+%
+% \begin{macrocode}
+\def\chit@@#1(#2){%
+ \@ifnextchar({\chit@@@{#1}{#2}}{\chit@@@{#1}{#2}()}%)
+}
+% \end{macrocode}
+%
+% The work horse. This simply makes a \cs{node} with the shape
+% \texttt{chit}. Note, we allow for a trailing semi-colon
+% (\texttt{;}) to have a similar feel to other \TikZ{} macros.
+%
+% \begin{macrocode}
+\def\chit@@@#1#2(#3){%
+ \chit@dbg{5}{Chit final:
+ ^^J Options: #1
+ ^^J Position: #2
+ ^^J Name: `#3'}
+ \let\name\pgfutil@empty%
+ \chit@dbg{1}{=== Before chit node}%
+ \node[draw,chit={every chit/.try,id=#3,#1}] (tmp) at (#2) {};
+ \chit@dbg{2}{=== After chit node}%
+ \ifx|#3|\relax%
+ \else%
+ \chit@dbg{3}{=== Renaming chit to user defined name `#3'}%
+ \pgfnoderename{#3}{tmp}%
+ \fi%
+ \@ifnextchar;{\@gobble}{}%
+}
+% \end{macrocode}
+% \end{Macro}
+% \iffalse
+% </chit>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/board.dtx b/macros/latex/contrib/wargame/source/hex/board.dtx
new file mode 100644
index 0000000000..fd0af295fb
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/board.dtx
@@ -0,0 +1,253 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Board clipping and frame}
+%
+% \begin{Macro}{\boardframe}
+%
+% Define the bounding box around the board
+%
+% \begin{Syntax}
+% \cs{boardframe}\oarg{margin}\parg{lower=left}\parg{upper-right}\marg{margin}
+% \end{Syntax}
+%
+% where \meta{lower-left} and \meta{upper-right} specifies the lower
+% left and upper right hexes (inclusive) of the board.
+%
+%
+% \begin{macrocode}
+\tikzset{
+ hex/board frame/.style={draw}
+}
+\def\boardframe{%
+ \@ifnextchar[{\bo@rdframe}{\bo@rdframe[0]}%}
+}
+\def\bo@rdframe[#1](#2)(#3){%
+ \hex@coords@conv{#2}
+ \edef\llx{\hex@x}
+ \edef\lly{\hex@y}
+ \edef\llc{\hex@col}
+ \edef\llr{\hex@row}
+ \edef\ellc{\hex@eff@col}
+ \edef\ellr{\hex@eff@row}
+ %
+ \hex@coords@conv{#3}
+ \edef\urx{\hex@x}
+ \edef\ury{\hex@y}
+ \edef\urc{\hex@col}
+ \edef\urr{\hex@row}
+ \edef\eurc{\hex@eff@col}
+ \edef\eurr{\hex@eff@row}
+ %
+ \def\margin{#1}
+ %
+ \hex@dbg{2}{%
+ Board Hex range: (\llc,\llr)x(\urc,\urr)
+ ^^JEffective range: (\ellc,\ellr)x(\eurc,\eurr)
+ ^^JBB: (\llx,\lly)x(\urx,\ury)}%
+ \ifnum\hexdbglvl>1
+ %\draw[red,very thick](hex cs:c=\llc,r=\llr) rectangle(hex cs:c=\urc,r=\urr);
+ \draw[red,ultra thick,dashed](\llx,\lly) rectangle(\urx,\ury);
+ \draw[->,very thick,blue] (0,0) -- (0,1) (0,0) -- (1,0);
+ \fi
+ % Calculate how many half hex hides to add to the "bottom"
+ %
+ \def\oddeven{isodd}
+ \ifnum\hex@coords@row@fac<0\def\oddeven{iseven}\fi%
+ \pgfmathparse{
+ ifthenelse(\hex@got@bot@short(\ellc),
+ ifthenelse(\hex@bot@short@col(\llc)*not(\oddeven(\ellc)),2,
+ ifthenelse(\hex@bot@short@col(\llc),0,1)),
+ ifthenelse(\oddeven(\ellc),1,2))}
+ \edef\olly{\pgfmathresult}%
+ \hex@dbg{2}{Delta lly: \olly half heights}
+ % Calculate how many half hex heights to add to the "top"
+ \def\oddeven{iseven}
+ \ifnum\hex@coords@row@fac<0\def\oddeven{isodd}\fi%
+ %
+ \pgfmathparse{
+ ifthenelse(\hex@got@top@short(\urc),
+ ifthenelse(\hex@top@short@col(\urc)*\oddeven(\eurc),0,
+ ifthenelse(\hex@top@short@col(\urc),2,1)),
+ ifthenelse(\oddeven(\eurc),1,2))}
+ \edef\oury{\pgfmathresult}%
+ \hex@dbg{2}{Delta ury: \oury half heights}
+ % Calculate new LLY and URY
+ \pgfmathparse{\lly-\hex@coords@row@fac*(\olly*\hex@yy+\margin)}
+ \edef\lly{\pgfmathresult}
+ \pgfmathparse{\ury+\hex@coords@row@fac*(\oury*\hex@yy+\margin)}
+ \edef\ury{\pgfmathresult}
+ % Calculate new LLX and URX
+ \pgfmathparse{\llx-1-\margin}\edef\llx{\pgfmathresult}
+ \pgfmathparse{\urx+1+\margin}\edef\urx{\pgfmathresult}
+ % Calculate width and height
+ \pgfmathparse{\urx-\llx}\edef\w{\pgfmathresult}
+ \pgfmathparse{\ury-\lly}\edef\h{\pgfmathresult}
+ \hex@dbg{0}{Board Frame: (\llx,\lly)x(\urx,\ury) (\w x\h) (\llc,\llr)x(\urc,\urr)}
+ \draw[hex/board frame/.try](\llx,\lly) rectangle(\urx,\ury);
+ \xdef\boardXmin{\llx}%
+ \xdef\boardYmin{\lly}%
+ \xdef\boardXmax{\urx}%
+ \xdef\boardYmax{\ury}%
+}
+
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\boardclip}
+%
+% Clip the board to not show incomplete hexes
+%
+% \begin{Syntax}
+% \cs{boardclip}\marg{nx}\marg{ny}\marg{preaction}
+% \end{Syntax}
+% \begin{macrocode}
+\def\boardpath(#1)(#2){%
+ \hex@coords@reset%
+ \tikzset{/hex/coords/.cd, #1}
+ \edef\llx{\hex@col}
+ \edef\lly{\hex@row}
+ %%
+ \hex@coords@reset%
+ \tikzset{/hex/coords/.cd, #2}
+ \edef\urx{\hex@col}
+ \edef\ury{\hex@row}
+ \let\board@odd\@undefined%
+ \hex@dbg{1}{Board BB in hex: (\llx,\lly)x(\urx,\ury)}
+ %%
+ \def\fv{south}
+ \def\sv{north}
+ \ifnum\hex@coords@row@fac<0
+ \def\fv{north}
+ \def\sv{south}
+ \fi
+
+ \edef\hex@board@path{(hex cs:c=\llx,r=\lly,v=\fv\space west)}
+ %% First the left side
+ \foreach \r in {\lly,...,\ury} {%
+ \edef\t{
+ --(hex cs:c=\llx,r=\r,v=west)
+ --(hex cs:c=\llx,r=\r,v=\sv\space west)}
+ \wg@addto@macro{\hex@board@path}{\t}}
+ %% Then for top of board
+ \foreach \c in {\llx,...,\urx} {%
+ % To be done
+ %\pgfmathparse{int(ifthenelse(\hex@bot@short@col(\c),1,0))}
+ %\edef\tmp{\pgfmathresult}
+ %\ifnum\tmp>0
+ %\edef\t{
+ % --(hex cs:c=\c,r=\ury,v=\sv\space west)
+ % --(hex cs:c=\c,r=\ury,v=\sv\space east)}
+ %\else
+ \edef\t{
+ --(hex cs:c=\c,r=\ury,v=\fv\space east)
+ --(hex cs:c=\c,r=\ury,v=\fv\space west)}
+ %\fi
+ \wg@addto@macro{\hex@board@path}{\t}}
+ %% Then for right of board
+ \foreach \r in {\ury,...,\lly} {%
+ \edef\t{
+ --(hex cs:c=\urx,r=\r,v=east)
+ --(hex cs:c=\urx,r=\r,v=\fv\space east)}
+ \wg@addto@macro{\hex@board@path}{\t}}
+
+ %% Then for bottom of board
+ \edef\t{--(hex cs:r=\lly,c=\urx,v=\fv\space west)}
+ \wg@addto@macro{\hex@board@path}{\t}
+ \foreach \c in {\urx,...,\llx} {%
+ \pgfmathparse{int(ifthenelse(\hex@bot@short@col(\c),1,0))}
+ \edef\tmp{\pgfmathresult}
+ \ifnum\tmp>0
+ \edef\t{
+ --(hex cs:c=\c,r=\lly,v=\sv\space east)
+ --(hex cs:c=\c,r=\lly,v=\sv\space west)}
+ \else
+ \edef\t{
+ --(hex cs:c=\c,r=\lly,v=\fv\space east)
+ --(hex cs:c=\c,r=\lly,v=\fv\space west)}
+ \fi
+ \wg@addto@macro{\hex@board@path}{\t}}
+
+ \def\t{--cycle}
+ \wg@addto@macro{\hex@board@path}{\t}
+ \global\let\hexboardpath\hex@board@path
+}
+%\def\boardclip#1#2#3{%
+% \pgfmathparse{int(#1-1)}\xdef\board@range{\pgfmathresult,...,0}%
+% %% \show\board@range
+% \draw \ifx|#3|\else[preaction={#3}]\fi%
+% [clip]
+% % [decorate,decoration={show path construction,
+% % moveto code={\fill[red](\tikzinputsegmentfirst) circle(2pt)
+% % node [fill=none,below]{moveto};},
+% % lineto code={\draw[thick,blue,->](\tikzinputsegmentfirst)--
+% % (\tikzinputsegmentlast) node [above] {lineto};},
+% % curveto code={\draw[thick,green,->](\tikzinputsegmentfirst)..
+% % controls(\tikzinputsegmentsupporta) and
+% % (\tikzinputsegmentsupportb)
+% % ..(\tikzinputsegmentlast) node[above]{curveto};},
+% % closepath code={\draw[thick,orange,->](\tikzinputsegmentfirst)--
+% % (\tikzinputsegmentlast) node [above] {closepath};}
+% % }]
+% (hex cs:r=0,c=0,v=south west)
+% %% First the left side
+% \foreach \r in {0,1,...,#2} {%
+% --(hex cs:c=0,r=\r,v=west)--(hex cs:c=0,r=\r,v=north west)}
+% %% Then for top of board
+% \foreach \c in {0,1,...,#1} {%
+% --(hex cs:r=#2,c=\c,v=north west)--(hex cs:c=\c,r=#2,v=north east)}
+% %% Then for right of board
+% \foreach \r in {#2,...,0} {%
+% --(hex cs:c=#1,r=\r,v=east)--(hex cs:c=#1,r=\r,v=south east)}
+% %% Then for bottom of board
+% --(hex cs:r=0,c=#1,v=south west) \foreach \c in \board@range {%
+% --(hex cs:r=0,c=\c,v=south east) --(hex cs:c=\c,r=0,v=south west) }
+% --cycle; }
+%% New definition - much simpler
+\def\boardclip(#1)(#2)#3{%
+ \boardpath(#1)(#2)
+ \draw \ifx|#3|\else[preaction={#3}]\fi%
+ [clip] \hexboardpath;
+}
+
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\debuggrid}
+%
+% Show a debug grid. This requires \cs{boardframe}.
+%
+% \begin{macrocode}
+\def\debuggrid{%
+ \foreach \i in {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1} {%
+ \pgfmathparse{\i*\boardW+\boardXmin}%
+ \edef\debug@x{\pgfmathresult}%
+ \draw [very thin,gray](\debug@x,\boardYmin) --
+ (\debug@x,\boardYmax) node [below,rotate=90] at
+ (\debug@x,\boardYmin) {$\i$}; }%
+ \foreach \i in {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1} {%
+ \pgfmathparse{\i*\boardH+\boardYmin}%
+ \edef\debug@x{\pgfmathresult}%
+ \draw [very thin,gray] (\boardXmin,\debug@x) --
+ (\boardXmax,\debug@x) node [left,rotate=90] at
+ (\boardXmin,\debug@x) {$\i$}; } }
+% \end{macrocode}
+% \end{Macro}
+%
+% Some dummy styles. These will be defined by the export class to
+% facilitate getting information from the board.
+%
+% \begin{macrocode}
+\tikzset{%
+ zoned/.style={},
+ zone scope/.style={},
+ zone path/.style={}
+}
+% \end{macrocode}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/coord.dtx b/macros/latex/contrib/wargame/source/hex/coord.dtx
new file mode 100644
index 0000000000..b996ffa3c2
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/coord.dtx
@@ -0,0 +1,350 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Hex coordinate system}
+%
+% \begin{Macro}{\hex@xx,\hex@yy}
+%
+% Some offsets along $x$ and $y$ due to offset of every second hex
+% column.
+%
+% \begin{align*}
+% \delta_x &= \cos60^{\circ}\\
+% \delta_y &= \sin60^{\circ}\\
+% \end{align*}
+%
+% These numbers are calculated once here and then used several times
+% in the following code.
+%
+% \begin{macrocode}
+\pgfmathparse{cos(60)} \xdef\hex@xx{\pgfmathresult}
+\pgfmathparse{sin(60)} \xdef\hex@yy{\pgfmathresult}
+\pgfmathparse{\hex@yy*cos(30)}\xdef\hex@e@xx{\pgfmathresult}
+\pgfmathparse{\hex@yy*sin(30)}\xdef\hex@e@yy{\pgfmathresult}
+\newdimen\hex@radius\hex@radius=1cm
+\newdimen\hex@dx \expandafter\hex@dx=\hex@xx cm
+\newdimen\hex@dy \expandafter\hex@dy=\hex@yy cm
+\newdimen\hex@e@dx \expandafter\hex@e@dx=\hex@e@xx cm
+\newdimen\hex@e@dy \expandafter\hex@e@dy=\hex@e@yy cm
+
+% \end{macrocode}
+% \end{Macro}
+%
+% Some code we need for some options
+%
+% \begin{macrocode}
+\newif\ifhex@label@is@name\hex@label@is@namefalse
+\def\hex@short@col{isfalse}
+\def\hex@got@short{isfalse}
+\pgfmathdeclarefunction{isfalse}{1}{%
+ \begingroup
+ \def\pgfmathresult{0}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup}
+\pgfmathdeclarefunction{istrue}{1}{%
+ \begingroup
+ \def\pgfmathresult{1}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup}
+% \end{macrocode}
+%
+% What follows is a way to configure the hex coordinate system. For
+% example, if the rows goes down, then we can flag that, but still add
+% hexes straightforwardly. Similar for columns. We can also specify
+% that the first row or column has number 1 (instead of 0). Since
+% this is dealt with a the coordinate level, it means most of the rest
+% of the code is agnostic to these choices.
+%
+% Which is the first coordinate (0 or 1)
+%
+% \begin{macrocode}
+\tikzset{
+ hex/first row is/.is choice,
+ hex/first row is/0/.code={\def\hex@coords@row@off{0}},
+ hex/first row is/1/.code={\def\hex@coords@row@off{-1}},
+ hex/first row is=0,
+ hex/first column is/.is choice,
+ hex/first column is/0/.code={\def\hex@coords@col@off{0}},
+ hex/first column is/1/.code={\def\hex@coords@col@off{-1}},
+ hex/first column is=0,
+ hex/first row and column are/.is choice,
+ hex/first row and column are/0/.style={
+ hex/first row is=0,%
+ hex/first column is=0},
+ hex/first row and column are/1/.style={
+ hex/first row is=1,%
+ hex/first column is=1},
+% \end{macrocode}
+%
+% Which way does the column and row numbers go
+%
+% \begin{macrocode}
+ hex/row direction is/.is choice,
+ hex/row direction is/normal/.code={\def\hex@coords@row@fac{1}},
+ hex/row direction is/reversed/.code={\def\hex@coords@row@fac{-1}},
+ hex/row direction is/up/.style={hex/row direction is=normal},
+ hex/row direction is/down/.style={hex/row direction is=reversed},
+ hex/row direction is/positive/.style={hex/row direction is=normal},
+ hex/row direction is/negative/.style={hex/row direction is=reversed},
+ hex/row direction is=normal,
+ hex/column direction is/.is choice,
+ hex/column direction is/normal/.code={\def\hex@coords@col@fac{1}},
+ hex/column direction is/reversed/.code={\def\hex@coords@col@fac{-1}},
+ hex/column direction is/right/.style={hex/column direction is=normal},
+ hex/column direction is/left/.style={hex/column direction is=reversed},
+ hex/column direction is/positive/.style={hex/column direction is=normal},
+ hex/column direction is/negative/.style={hex/column direction is=reversed},
+ hex/column direction is=normal,
+% \end{macrocode}
+%
+% Make labels names of shapes of the hexes so we can use labels to
+% place stuff
+%
+% \begin{macrocode}
+ hex/label is name/.is if=hex@label@is@name,
+% \end{macrocode}
+%
+% If we have uneven number of rows in some columns.
+%
+% \begin{macrocode}
+ hex/short bottom columns/.is choice,
+ hex/short bottom columns/odd/.code={%
+ \def\hex@bot@short@col{isodd}
+ \def\hex@got@bot@short{istrue}
+ \hex@dbg{4}{Short columns (odd): \meaning\hex@bot@short@col}},
+ hex/short bottom columns/even/.code={
+ \def\hex@bot@short@col{iseven}
+ \def\hex@got@bot@short{istrue}
+ \hex@dbg{4}{Short column (even): \meaning\hex@bot@short@col}},
+ hex/short bottom columns/none/.code={
+ \def\hex@bot@short@col{isfalse}
+ \def\hex@got@bot@short{isfalse}
+ \hex@dbg{4}{Short columns (none): \meaning\hex@bot@short@col}},
+ hex/short bottom columns=none,
+ hex/short columns/.forward to=hex/short bottom columns,
+ hex/short top columns/.is choice,
+ hex/short top columns/odd/.code={%
+ \def\hex@top@short@col{isodd}
+ \def\hex@got@top@short{istrue}
+ \hex@dbg{4}{Short columns (odd): \meaning\hex@top@short@col}},
+ hex/short top columns/even/.code={
+ \def\hex@top@short@col{iseven}
+ \def\hex@got@top@short{istrue}
+ \hex@dbg{4}{Short column (even): \meaning\hex@top@short@col}},
+ hex/short top columns/none/.code={
+ \def\hex@top@short@col{isfalse}
+ \def\hex@got@top@short{isfalse}
+ \hex@dbg{4}{Short columns (none): \meaning\hex@top@short@col}},
+ hex/short top columns=none,
+}
+\message{^^JInitial hex coordinate setup:
+ Rows: factor=\hex@coords@row@fac, offset=\hex@coords@row@off
+ Columns: factor=\hex@coords@col@fac, offset=\hex@coords@col@off}
+% \end{macrocode}
+%
+% \begin{HexKey*}{
+% hex/coords/column,
+% hex/coords/row,
+% hex/coords/vertex,
+% hex/coords/edge,
+% hex/coords/offset}
+%
+% We define the keys for hexagon coordinates. These are the
+% \spec{row}, \spec{column}, possible \spec{vertex} or
+% \spec{edge}. Vertexes and edges are defined as
+% multiple-choice. \spec{offset} specifies the offset from the
+% centre in the direction of a vertex or edge. By default, the
+% offset is one, meaning all the way to the vertex or edge.
+%
+% The key \spec{inverse row} specifies that the rows are given from
+% the top down, but coordinates should be calculated as if the row
+% was negative. This (should) allow us to design boards where rows
+% increase downward, while still keeping the interface and remaining
+% code somewhat reasonable and agnostic.
+%
+% Similarly, the key \spec{column 1}, will allow us to start the
+% columns with 1.
+%
+%
+%
+% \begin{macrocode}
+\tikzset{
+ /hex/coords/.cd,
+ column/.store in=\hex@col,
+ c/.store in=\hex@col,
+ row/.store in=\hex@row,
+ r/.store in=\hex@row,
+ offset/.store in=\hex@off,
+ o/.store in=\hex@off,
+ vertex/.is choice,
+ vertex/none/.code={\global\let\hex@vtx\@empty},
+ vertex/east/.code={\def\hex@vtx{0}},
+ vertex/north east/.code={\def\hex@vtx{60}},
+ vertex/north west/.code={\def\hex@vtx{120}},
+ vertex/west/.code={\def\hex@vtx{180}},
+ vertex/south west/.code={\def\hex@vtx{240}},
+ vertex/south east/.code={\def\hex@vtx{300}},
+ vertex/E/.code={\def\hex@vtx{0}},
+ vertex/NE/.code={\def\hex@vtx{60}},
+ vertex/NW/.code={\def\hex@vtx{120}},
+ vertex/W/.code={\def\hex@vtx{180}},
+ vertex/SW/.code={\def\hex@vtx{240}},
+ vertex/SE/.code={\def\hex@vtx{300}},
+ vertex/.default=none,
+ v/.forward to=/hex/coords/vertex=#1,
+ edge/.is choice,
+ edge/none/.code={\global\let\hex@edg\@empty},
+ edge/north east/.code={\def\hex@edg{30}},
+ edge/north/.code={\def\hex@edg{90}},
+ edge/north west/.code={\def\hex@edg{150}},
+ edge/south west/.code={\def\hex@edg{210}},
+ edge/south/.code={\def\hex@edg{270}},
+ edge/south east/.code={\def\hex@edg{330}},
+ edge/NE/.code={\def\hex@edg{30}},
+ edge/N/.code={\def\hex@edg{90}},
+ edge/NW/.code={\def\hex@edg{150}},
+ edge/SW/.code={\def\hex@edg{210}},
+ edge/S/.code={\def\hex@edg{270}},
+ edge/SE/.code={\def\hex@edg{330}},
+ edge/.default=none,
+ e/.forward to=/hex/coords/edge,
+}
+% \end{macrocode}
+% \end{HexKey*}
+%
+% \begin{Macro}{\hex@coords@reset}
+%
+% This macro resets the hex coordinates to default values. That is
+% row and column 0, no vertex or edge.
+%
+% \begin{macrocode}
+\def\hex@coords@reset{%
+ \tikzset{%
+ /hex/coords/.cd,
+ column=0,
+ row=0,
+ edge=none,
+ vertex=none,
+ offset=1}}
+% \end{macrocode}
+% \end{Macro}
+%
+% The following calculates the Cartesian coordinates from Hex
+% coordinates
+%
+% \begin{Syntax}
+% (cs:hex column=\meta{C},row=\meta{R},vertex=\meta{V},edge=\meta{E})
+% \end{Syntax}
+%
+% Given the hexagon column $C$ and row $R$ with hexagon radius $r$,
+% the centre of the hexagon is at
+%
+% \begin{eqnarray*}
+% x &=& 2C\frac{3}{4}r\\
+% y &=& r(R - (C \% 2)\sin60^{\circ})
+% \end{eqnarray*}
+%
+% If \meta{V} or \meta{E} are given, then these are added to the
+% centre point.
+%
+% Note, $C$ and $R$ may be fractional numbers, which will specify a
+% point inside a hex.
+%
+% We set-up the translation to Cartesian coordinates. First
+% thing is to reset keys in \spec{/hex/coords}, and then parse out the
+% keys given.
+%
+% \begin{macrocode}
+\def\hex@coords@conv#1{%
+ \hex@coords@reset%
+ \tikzset{/hex/coords/.cd, #1}%
+% \end{macrocode}
+%
+% Then we calculate the $x$ coordinate and set the dimension
+% \cs{pgf@x}. We do this by
+%
+% $$x=c_e \frac{3}{2}\quad,$$
+%
+% where
+%
+% $$c_e = f_c (c+o_c)\quad,$$
+%
+% is the effective column (stored in \cs{hex@eff@col}) calculated from
+% is the direction factor $f_c$ (set by \spec{hex/column direction
+% is}) and the offset $o_c$ (set by \spec{hex/first column is}).
+%
+% \begin{macrocode}
+ \pgfmathparse{int(\hex@coords@col@fac*(\hex@col+\hex@coords@col@off))}%
+ \xdef\hex@eff@col{\pgfmathresult}%
+ \hex@dbg{2}{Effective column: \hex@coords@col@fac * (\hex@col -
+ \hex@coords@col@off) -> \hex@eff@col}%
+ \pgfmathparse{\hex@eff@col*1.5}%
+ \xdef\hex@x{\pgfmathresult}%
+ \expandafter\pgf@x=\hex@x cm%
+% \end{macrocode}
+%
+% And then for the $y$ coordinate and set the dimension \cs{pgf@y}.
+%
+% $$y = 2\left(r_e - c_e \operatorname{mod} 2\right) \cos60^{\circ}\quad,$$
+%
+% where
+%
+% $$r_e= 2 f_r (r+o_r) - (c+o_c) \operatorname{mod} 2\quad,$$
+%
+% is the effective row (stored as \cs{hex@eff@row}) calculated from
+% the the direction factor $f_r$ (set by \spec{hex/row
+% direction is}) and the offset $o_r$ (set by \spec{hex/first
+% row is}).
+%
+% \begin{macrocode}
+ \pgfmathparse{int(\hex@coords@row@fac*(\hex@row+\hex@coords@row@off))}%
+ \xdef\hex@eff@row{\pgfmathresult}%
+ \hex@dbg{2}{Effective row: \hex@coords@row@fac * (\hex@row +
+ \hex@coords@row@off) -> \hex@eff@row}%
+ \pgfmathparse{(2*\hex@eff@row-mod(round((\hex@col+\hex@coords@col@off)),2))*\hex@yy}%
+ \xdef\hex@y{\pgfmathresult}%
+ \expandafter\pgf@x=\hex@y cm%
+% \end{macrocode}
+%
+% If we have a vertex specification add that location to the current
+% coordinates. If not, set the point.
+%
+% \begin{macrocode}
+ \ifx\hex@vtx\@empty\pgfpointxy{\hex@x}{\hex@y}\else%
+ \pgfpointadd{\pgfpointxy{\hex@x}{\hex@y}}{%
+ \pgfpointscale{\hex@off}{\pgfpointpolarxy{\hex@vtx}{1}}}\fi%
+% \end{macrocode}
+%
+% If we have an edge specification add that location to the current
+% coordinates.
+%
+% \begin{macrocode}
+ \ifx\hex@edg\@empty\else%
+ \pgfpointadd{\pgfpointxy{\hex@x}{\hex@y}}{%
+ \pgfpointscale{\hex@off}{\pgfpointpolarxy{\hex@edg}{\hex@yy}}}\fi
+% \end{macrocode}
+%
+% For debugging, we can print out stuff.
+%
+% \begin{macrocode}
+ \hex@dbg{2}{Hex coordinates: #1
+ ^^J c=\hex@col
+ ^^J r=\hex@row
+ ^^J v=\hex@vtx
+ ^^J e=\hex@edg
+ ^^J x=\hex@x
+ ^^J y=\hex@y}%
+ \global\let\hex@x\hex@x%
+ \global\let\hex@y\hex@y%
+ \global\let\hex@row\hex@row%
+ \global\let\hex@col\hex@col%
+}
+\tikzdeclarecoordinatesystem{hex}{%
+ \hex@coords@conv{#1}}
+% \end{macrocode}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/core.dtx b/macros/latex/contrib/wargame/source/hex/core.dtx
new file mode 100644
index 0000000000..1847ad42c8
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/core.dtx
@@ -0,0 +1,94 @@
+% \iffalse
+% ====================================================================
+% \fi
+%
+% \subsection{The \texttt{wargame.hex} \TikZ{} library}
+% \label{sec:impl:hex}
+%
+% \iffalse
+%<*hex>
+% \fi
+%
+% Used \TikZ{} libraries
+%
+% \begin{macrocode}
+\RequirePackage{alphalph}
+\usetikzlibrary{calc}
+\usetikzlibrary{arrows.meta}
+\usetikzlibrary{arrows}
+\usetikzlibrary{shapes.geometric}
+\usetikzlibrary{shapes.symbols}
+\usetikzlibrary{shapes.arrows}
+\usetikzlibrary{decorations}
+\usetikzlibrary{decorations.pathmorphing}
+\usetikzlibrary{decorations.pathreplacing}
+\usetikzlibrary{decorations.markings}
+\usetikzlibrary{wargame.util}
+% \end{macrocode}
+%
+%
+% \begin{Macro}{\@ifempty}
+%
+% This is a utility macro we will use below.
+%
+% \begin{macrocode}
+\def\@ifempty#1{\def\temp{#1}\ifx\temp\@empty}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Debugging}
+%
+% The counter \cs{hexdbglvl} sets the debug level, and the macro
+% \cs{hex@dbg} prints out (conditionally) debug messages.
+%
+% \begin{Macro}{\hexdbglvl,\hex@dbg}
+% \begin{macrocode}
+\newcount\hexdbglvl\hexdbglvl=\wargamedbglvl
+\def\hex@dbg#1#2{%
+ \ifnum#1>\hexdbglvl\relax\else\message{^^J#2}\fi}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Suppress terrain pictures}
+%
+% \begin{macrocode}
+\@ifundefined{ifhex@terrain@pic}{%
+ \newif\ifhex@terrain@pic
+ \hex@terrain@pictrue}{}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \input{hex/coord.dtx}
+% \input{hex/shape.dtx}
+% \input{hex/terrain.dtx}
+% \input{hex/terrain/beach.dtx}
+% \input{hex/terrain/light_woods.dtx}
+% \input{hex/terrain/woods.dtx}
+% \input{hex/terrain/swamp.dtx}
+% \input{hex/terrain/rough.dtx}
+% \input{hex/terrain/mountains.dtx}
+% \input{hex/terrain/village.dtx}
+% \input{hex/terrain/town.dtx}
+% \input{hex/terrain/city.dtx}
+% \input{hex/terrain/mountain.dtx}
+% \input{hex/terrain/tree.dtx}
+% \input{hex/ridges.dtx}
+% \input{hex/towns.dtx}
+% \input{hex/labels.dtx}
+% \input{hex/extra.dtx}
+% \input{hex/paths.dtx}
+% \input{hex/board.dtx}
+% \iffalse
+%</hex>
+% \fi
+% \ No newline at end of file
diff --git a/macros/latex/contrib/wargame/source/hex/extra.dtx b/macros/latex/contrib/wargame/source/hex/extra.dtx
new file mode 100644
index 0000000000..05f7215297
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/extra.dtx
@@ -0,0 +1,83 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Extra graphics}
+% \label{sec:impl:hex:extra}
+%
+% To make the interface a bit more flexible we allow for adding
+% arbitrary stuff to the hexes.
+%
+% Some examples of \spec{pic}tures to add in the \spec{extra} stuff.
+%
+% \begin{HexKey}{hex/fortress}
+%
+% Draw a fortress. An example of a extra graphics entity.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/fortress/.pic={
+ \path[draw,pic actions]
+ (0: .9) --
+ (0: .7) --
+ (60: .7) -- ( 60:.9) -- ( 60:.7) --
+ (120:.7) -- (120:.9) -- (120:.7) --
+ (180:.7) -- (180:.9) -- (180:.7) --
+ (240:.7) -- (240:.9) -- (240:.7) --
+ (300:.7) -- (300:.9) -- (300:.7) --
+ (0: .7) -- cycle;}}
+% \end{macrocode}
+% \end{HexKey}
+%
+% \begin{HexKey}{hex/fortress 2}
+%
+% Draw a fortress. An example of a extra graphics entity.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/fortress 2/.pic={%
+ \draw[pic actions,transform shape] (0:0.64)
+ foreach \a in {15,45,...,345}{
+ --(\a:0.64)
+ --(\a:0.80)
+ --(\a+15:0.80)
+ --(\a+15:0.64)}
+ --cycle;
+ },
+}
+% \end{macrocode}
+% \end{HexKey}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Some macros}
+%
+%
+% \begin{macrocode}
+\DeclareRobustCommand\fortmark[1][scale=.25]{\tikz[#1,transform shape]{%
+ \pic{hex/fortress 2}}}
+\providecommand\terrainmark[2][scale=.2]{%
+ \tikz[#1]{\hex[label=,terrain=#2]}}
+\providecommand\clearhex[1][scale=.2]{\tikz[#1]{\hex[label=]}}
+\providecommand\woodshex[1][scale=.2]{\terrainmark[#1]{woods}}
+\providecommand\mountainhex[1][scale=.2]{\terrainmark[#1]{mountains}}
+\providecommand\cityhex[1][scale=.2]{\terrainmark[#1]{city}}
+\providecommand\beachhex[1][scale=.2]{\terrainmark[#1]{beach}}
+\providecommand\seahex[1][scale=.2]{\tikz[#1]{\hex[label=,fill=sea]}}
+\providecommand\riverhex[1][scale=.2]{%
+ \tikz[#1]{%
+ \hex[label=](c=0,r=0)%
+ \river[](hex cs:e=SW)--(hex cs:e=NE);}}
+\providecommand\roadhex[1][scale=.2]{%
+ \tikz[#1]{%
+ \hex[label=](c=0,r=0)%
+ \road(hex cs:e=SW)--(hex cs:e=NE);}}
+% \end{macrocode}
+%
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/labels.dtx b/macros/latex/contrib/wargame/source/hex/labels.dtx
new file mode 100644
index 0000000000..7767dcc661
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/labels.dtx
@@ -0,0 +1,160 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Labels}
+% \label{sec:impl:hex:label}
+%
+% Like terrains, we will set up some macros for dealing with labels.
+%
+% To process coordinates and turn them into labels, we set up two
+% counters.
+%
+% \begin{macrocode}
+\newcounter{hex@l@c}
+\newcounter{hex@l@r}
+% \end{macrocode}
+%
+% In case we want to invert the row axis, we set-up a key to set the
+% maximum row number.
+%
+% \begin{macrocode}
+\def\hex@max@row{-1}
+\tikzset{
+ max hex row/.store in=\hex@max@row,
+}
+% \end{macrocode}
+%
+% Again, we will make a separate namespace/family for the handling
+% labels. We also define a counter which we will use to typeset
+% alphabetic column numbers.
+%
+% First a graphics style.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/label/.style={%
+ draw=none,%
+ shape=rectangle,%
+ anchor=north,%
+ color=gray,%
+ font=\sffamily\bfseries\scriptsize,%
+ inner sep=0},
+}
+% \end{macrocode}
+%
+% Next, the choices of how to make a label. These are put in the
+% \spec{/hex/label} family to make it easy to parse out only these
+% keys. This uses some macros defined below. Note, this uses the
+% macros \cs{hex@col} and \cs{hex@row} defined by the hex coordinate
+% system.
+%
+% \begin{macrocode}
+\tikzset{%
+ /hex/label/.search also={/tikz},
+ /hex/label/.cd,
+ none/.code={\global\let\hex@l@text\@empty},
+ auto/.is choice,
+ auto/none/.code={\global\let\hex@l@text\@empty},
+ auto/numbers/.code={%
+ \hex@l@abs%
+ \xdef\hex@l@text{%
+ \hex@l@n@pad{\the\c@hex@l@c}%
+ \hex@l@n@pad{\the\c@hex@l@r}}},
+ auto/alpha column/.code={%
+ \xdef\hex@l@text{%
+ \ifnum0>\hex@col\AlphAlph{-\hex@col}\else\AlphAlph{\hex@col}\fi%
+ \hex@row}},
+ auto/alpha 2 column/.code={%
+ \hex@l@abs%
+ \advance\c@hex@l@c27\relax%
+ \xdef\hex@l@text{%
+ \AlphAlph{\value{hex@l@c}}%
+ \hex@l@n@pad{\hex@row}}},
+ auto/inv y x plus 1/.code={%
+ \hex@dbg{3}{Inverse row, add one to column with arg `#1'}
+ \let\hex@l@text\@empty%
+ \ifnum\hex@max@row>0%
+ \pgfmathtruncatemacro{\hex@l@row}{\hex@max@row-\hex@row}
+ \pgfmathtruncatemacro{\hex@l@col}{1+\hex@col}
+ \xdef\hex@l@text{%
+ \hex@l@n@pad{\hex@l@col}%
+ \hex@l@n@pad{\hex@l@row}}
+ \else\message{Max row number not set}\fi},
+ auto/x and y plus 1/.code={%
+ \hex@dbg{3}{Inverse row, add one to column with arg `#1'}
+ \pgfmathtruncatemacro{\hex@l@row}{1+\hex@row}
+ \pgfmathtruncatemacro{\hex@l@col}{1+\hex@col}
+ \xdef\hex@l@text{%
+ \hex@l@n@pad{\hex@l@col}%
+ \hex@l@n@pad{\hex@l@row}}},
+ auto/.default=numbers,
+ %text/.store in=\hex@l@text,
+ text/.code={\gdef\hex@l@text{#1}},
+ place/.store in=\hex@l@pos,
+ location/.forward to=/hex/label/place,
+ rotate/.store in=\hex@l@rot
+}
+% \end{macrocode}
+% \begin{Macro}{\hex@l@abs}
+%
+% This takes the absolute value of row and column numbers.
+%
+% \begin{macrocode}
+\def\hex@l@abs{
+ \setcounter{hex@l@c}{\hex@col}
+ \setcounter{hex@l@r}{\hex@row}
+ \expandafter\ifnum\value{hex@l@c}<0\multiply\c@hex@l@c by-1\fi%
+ \expandafter\ifnum\value{hex@l@r}<0\multiply\c@hex@l@r by-1\fi%
+ % \hex@dbg{0}{\hex@col->\the\c@hex@l@c\space\hex@row->\the\c@hex@l@r}
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\hex@l@n@pad}
+% This will pad a number with a 0 if the number is smaller than 10.
+%
+% \begin{macrocode}
+\long\def\hex@l@n@pad#1{%
+ \ifnum#1<10 0\fi%
+ #1}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\hex@do@label}
+%
+% This macro puts in the label. First, we reset label keys, then we
+% read in the keys from the argument. If this results in the macro
+% \cs{hex@l@text} to be non-empty, then we set the label via a
+% \TikZ{} \spec{node}.
+%
+% \begin{macrocode}
+\def\hex@do@label{%
+ \hex@dbg{1}{Hex label: `\meaning\hex@label'}%
+ \edef\hex@l@tmp{[%
+ /hex/label/.cd,%
+ rotate=0,%
+ place={(90:.8)},%
+ /tikz/hex/label/.try,%
+ /tikz/every hex label/.try,%
+ \hex@label]}%
+ \expandafter\scope\hex@l@tmp%
+ \hex@dbg{1}{Label:
+ ^^J Text: `\meaning\hex@l@text'
+ ^^J Location: `\meaning\hex@l@pos'
+ ^^J Rotation: `\meaning\hex@l@rot'
+ }%
+ \@ifundefined{hex@l@text}{\let\hex@l@text\empty}{}%
+ \ifx\hex@l@text\empty\else%
+ \node[rotate=\hex@l@rot] at \hex@l@pos {\hex@l@text};%
+ \fi%
+ \endscope%
+}
+% \end{macrocode}
+% \end{Macro}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/paths.dtx b/macros/latex/contrib/wargame/source/hex/paths.dtx
new file mode 100644
index 0000000000..833a4a245a
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/paths.dtx
@@ -0,0 +1,416 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Edges, borders, roads, rivers, and so on}
+%
+% Styles of drawing edges, borders, rivers, roads, and railroads.
+%
+% \begin{macrocode}
+% A decoration to extract outline of a path
+\pgfdeclaredecoration{outline}{init}
+{%
+ \state{init}[next state=tick,width=0pt]{
+ \xdef\outlinerev{}}
+ \state{tick}[%
+ width=+\pgfdecorationsegmentlength]%
+ {
+ \pgfpathlineto{\pgfpointadd{\pgfpointorigin}{
+ \pgfpointpolar{\pgfdecorationsegmentangle}{
+ +\pgfdecorationsegmentamplitude}}}
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \message{^^J\the\pgf@x,\the\pgf@y}
+ \pgfpointadd{\pgfpointorigin}{
+ \pgfpointpolar{-\pgfdecorationsegmentangle}{
+ \pgfdecorationsegmentamplitude}}
+ \pgfpointtransformed{\pgfpoint{\pgf@x}{\pgf@y}}%
+ \message{^^J\the\pgf@x,\the\pgf@y}
+ \xdef\outlinerev{\the\pgf@x/\the\pgf@y,\outlinerev}
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@ya
+ }%
+ \state{final}
+ {
+ \pgfpathlineto{\pgfpointdecoratedpathlast}
+ \foreach \x/\y in \outlinerev{
+ \ifx\x\empty\else
+ \ifx\y\empty\else
+ \pgf@xa=\x
+ \pgf@ya=\y
+ \pgf@nlt@lineto{\pgf@xa}{\pgf@ya}
+ \fi
+ \fi
+ }
+ }%
+}%
+
+\tikzset{
+ hex/road/.style={
+ rounded corners=3\pgflinewidth,% .25cm,
+ color=black,
+ transform shape,
+ scale line widths,
+ thick},
+ hex/railroad/.style={
+ %scale line widths,
+ rounded corners=.25cm,
+ color=gray!50!black,
+ transform shape,
+ postaction={draw,decorate},
+ decoration={ticks,
+ segment length=9\pgflinewidth,
+ amplitude=3\pgflinewidth,%.1cm
+ }
+ },
+ hex/river/.style={
+ color=blue,
+ scale line widths,
+ line width=3pt,
+ transform shape,
+ decorate,
+ decoration={random steps,
+ segment length=.3cm,
+ amplitude=.15cm,
+ pre=lineto,
+ post=lineto,
+ pre length=.05cm,
+ post length=.05cm},
+ rounded corners=.08cm},
+ hex/border/.style={
+ color=gray,
+ rounded corners=3pt,
+ dashed,
+ transform shape,
+ scale line widths,
+ very thick
+ },
+ every river/.style={},
+ every road/.style={},
+ every railroad/.style={},
+ every border/.style={},
+}
+% \end{macrocode}
+%
+% \begin{Macro}{\road,\railroad,\river,\border}
+%
+% \begin{macrocode}
+\def\road{%
+ \hex@dbg{3}{Road}
+ \@ifnextchar[{\road@}{\road@[]}%]
+}
+\def\road@[#1]{\draw[hex/road,every hex road/.try,#1]}
+\def\railroad{%
+ \hex@dbg{3}{Rail road}
+ \@ifnextchar[{\railroad@}{\railroad@[]}%]
+}
+\def\railroad@[#1]{\draw[hex/railroad,every hex railroad/.try,#1]}
+\def\river{%
+ \hex@dbg{3}{River}
+ \@ifnextchar[{\river@}{\river@[]}%]
+}
+\def\river@[#1]{\draw[hex/river,every hex river/.try,#1]}
+\def\border{%
+ \hex@dbg{3}{Border}
+ \@ifnextchar[{\border@}{\border@[]}%]
+}
+\def\border@[#1]{\draw[hex/border,every hex border/.try,#1]}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Other paths}
+%
+% \begin{Macro}{\shiftScalePath}
+% Shifts and scales a path and defines a macro to contain the path
+%
+% \begin{Syntax}
+% \cs{shiftScalePath}\marg{macro}\marg{relative-coordinates}
+% \end{Syntax}
+%
+% where \meta{relative-coordinates} is a comma separated list of
+% relative coordinates (to the lower-left and upper-right corners)
+%
+% \begin{Syntax}
+% \meta{x}/\meta{y}
+% \end{Syntax}
+%
+% Note, this requires that \cs{boardXmin},\cs{boardYmin} and
+% \cs{boardXmax},\cs{boardYmax} is defined. This can be done using
+% the \cs{boardframe} macro.
+%
+% \begin{macrocode}
+\def\shiftScalePath#1#2{%
+ \let\tmp@path\@undefined%
+ \foreach \x/\y in {#2}{%
+ \pgfmathparse{\x*\boardW+\boardXmin}\xdef\tmp@x{\pgfmathresult}%
+ \pgfmathparse{\y*\boardH+\boardYmin}\xdef\tmp@y{\pgfmathresult}%
+ \@ifundefined{tmp@path}{\def\tmp@path{}}{\xdef\tmp@path{\tmp@path--}}%
+ \xdef\tmp@path{\tmp@path(\tmp@x,\tmp@y)}}%
+ \expandafter\xdef\csname #1\endcsname{\tmp@path}}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Move, attacks, retreats from hex to hex}
+%
+% \begin{Macro}{\hex@getscale}
+%
+% Get current scaling factor.
+%
+% \begin{macrocode}
+\def\hex@getscale#1{%
+ \begingroup
+ \pgfgettransformentries{%
+ \scaleA}{%
+ \scaleB}{%
+ \scaleC}{%
+ \scaleD}{%
+ \whatevs}{%
+ \whatevs}%
+ \pgfmathsetmacro{#1}{sqrt(abs(\scaleA*\scaleD-\scaleB*\scaleC))}%
+ \expandafter
+ \endgroup
+ \expandafter\def\expandafter#1\expandafter{#1}%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% Key to get the scale
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/get scale/.code={
+ \hex@getscale{\hex@scale}},
+}
+% \end{macrocode}
+%
+% Style for moves. Use like
+%
+% \begin{Syntax}
+% \cs{path}[move] \meta{coordinates};
+% \end{Syntax}
+%
+% \begin{macrocode}
+\tikzset{%
+ % Argument is colour
+ hex/move/.style={
+ hex/get scale,
+ decorate,
+ decoration={
+ markings,
+ mark=between positions 0 and 1 step 0.75*\hex@scale*\hex@dy with {
+ \node [single arrow,
+ single arrow head extend=3pt,
+ fill=#1,
+ inner sep=\hex@scale*.5mm,
+ minimum width=\hex@scale*2mm,
+ minimum height=\hex@scale*\hex@dy/2,
+ transform shape]{};
+ }
+ },
+ },
+% \end{macrocode}
+%
+% A short move style
+%
+% \begin{Syntax}
+% \cs{path}[short move] \meta{coordinates};
+% \end{Syntax}
+%
+%
+% \begin{macrocode}
+ % Argument is colour
+ hex/short move/.style={
+ hex/get scale,
+ decorate,
+ decoration={
+ markings,
+ mark=between positions 0 and 1 step 0.5*\hex@scale*\hex@dy with {
+ \node [single arrow,
+ single arrow head extend=3pt,
+ fill=#1,
+ inner sep=\hex@scale*.5mm,
+ minimum width=\hex@scale*2mm,
+ minimum height=\hex@scale*\hex@dy/3,
+ transform shape]{};
+ }
+ },
+ },
+% \end{macrocode}
+%
+% A short move style
+%
+% \begin{Syntax}
+% \cs{path}[long move] \meta{coordinates};
+% \end{Syntax}
+%
+%
+% \begin{macrocode}
+ % Argument is colour
+ hex/long move/.style={
+ hex/get scale,
+ transform shape,
+ decorate,
+ decoration={
+ markings,
+ mark=between positions 0 and -.7*\hex@scale*\hex@dy
+ step 2*\hex@scale*\hex@dy with {
+ \node [single arrow,
+ single arrow head extend=3pt,
+ fill=#1,
+ anchor=west,
+ inner sep=\hex@scale*.25mm,
+ outer sep=.3*\hex@scale*\hex@dy,
+ minimum width=\hex@scale*2mm,
+ minimum height=1.4*\hex@scale*\hex@dy,
+ transform shape]{};
+ }
+ },
+ },
+% \end{macrocode}
+%
+% A short move style
+%
+% \begin{Syntax}
+% \cs{path}[move with start] \meta{coordinates};
+% \end{Syntax}
+%
+%
+% \begin{macrocode}
+ % Argument is colour
+ hex/move with start/.style={
+ hex/get scale,
+ decorate,
+ decoration={
+ markings,
+ mark=at position 0 with {
+ \node [inner sep=0,
+ circle,
+ minimum size=\hex@scale*5mm,
+ fill=#1,
+ transform shape] {};},
+ mark=between positions 0 and 1 step 0.75*\hex@scale*\hex@dy with {
+ \node [single arrow,
+ single arrow head extend=\hex@scale*3pt,
+ fill=#1,
+ inner sep=\hex@scale*1mm,
+ minimum width=\hex@scale*3mm,
+ minimum height=\hex@scale*\hex@dy/2,
+ transform shape]{};
+ }
+ },
+ },
+ % Default fill colour is black
+ hex/move/.default=black,
+ hex/move with start/.default=black,
+ hex/short move/.default=black,
+ hex/long move/.default=black,
+ % Arguments are draw and fill color
+% \end{macrocode}
+%
+% A move cost style
+%
+% \begin{Syntax}
+% \cs{path}[move] ...(coordinate)node[hex/move cost]{} ...;
+% \end{Syntax}
+%
+% \begin{macrocode}
+ hex/move cost/.style 2 args={
+ minimum size=1mm,
+ inner sep=0.1mm,
+ circle,
+ fill=#2,
+ transform shape,
+ text=#1,
+ font=\sffamily\bfseries\Large},
+ hex/move cost/.default={black}{none},
+ % Argument is fill colour
+% \end{macrocode}
+%
+% A short line style for retreates, advances, and so on
+%
+% \begin{Syntax}
+% \cs{path}[short line] (start)--(end);
+% \end{Syntax}
+%
+% \begin{macrocode}
+ hex/short line/.style={%
+ hex/get scale,
+ inherit options/.code={\csname tikz@options\endcsname},
+ inherit options,
+ decorate,
+ decoration={
+ markings,
+ mark=between positions \hex@scale*\hex@dy
+ and 1 step 2*\hex@scale*\hex@dy with {
+ \node [single arrow,draw=black,fill=#1,
+ single arrow head extend=\hex@scale*3pt,
+ inner sep=1mm,
+ minimum width=0.75*\hex@scale*\hex@dy,
+ minimum height=\hex@scale*\hex@dy,
+ transform shape]{};
+ }
+ },
+ },
+% \end{macrocode}
+%
+% An attack indication style
+%
+% \begin{Syntax}
+% \cs{path}[attack] (start)--(end);
+% \end{Syntax}
+%
+% \begin{macrocode}
+ % Argument is fill color
+ hex/attack/.style={
+ hex/get scale,
+ inherit options/.code={\csname tikz@options\endcsname},
+ inherit options,
+ decorate,
+ decoration={
+ markings,
+ mark=between positions \hex@scale*\hex@dy
+ and 1 step 2*\hex@scale*\hex@dy with {
+ \node [regular polygon,
+ fill=#1,
+ draw=#1,
+ regular polygon sides=3,
+ inner sep=0,
+ minimum size=0.75*\hex@scale*\hex@dy,
+ rotate=-90,
+ transform shape]{};
+ }
+ },
+ },
+% \end{macrocode}
+%
+% Short hands
+%
+% \begin{Syntax}
+% \cs{path}[attack] (start)--(end);
+% \end{Syntax}
+%
+% \begin{macrocode}
+ % Default colour is red for attachs
+ hex/attack/.default=red!70!black,
+ %%
+ hex/retreat/.style={hex/short line=#1},
+ hex/retreat/.default=white,
+ %%
+ hex/advance/.style={hex/short line=#1},
+ hex/advance/.default={green!70!black},
+}
+% \end{macrocode}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/ridges.dtx b/macros/latex/contrib/wargame/source/hex/ridges.dtx
new file mode 100644
index 0000000000..3914ff6ce5
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/ridges.dtx
@@ -0,0 +1,139 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Ridges}
+% \label{sec:impl:hex:ridges}
+%
+% A hex can be decorated with up to 6 ridges --- one for each edge of
+% the hexagon. The first thing is to set up the graphics style to use
+% for the ridges. We use the \spec{wave} decoration.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/ridges/.style={
+ line cap=round,
+ draw=pgfstrokecolor,
+ rounded corners=.25cm,
+ scale line widths,
+ decoration={
+ path has corners=true,
+ pre=waves,
+ post=waves,
+ pre length=-.1cm,
+ post length=0cm,
+ waves,
+ radius=.2cm,
+ segment length=.2cm},
+ decorate}}
+% \end{macrocode}
+%
+% To properly set up the ridges, we need to concatenate ridge paths in
+% order. To facilitate that, we define 6 \cs{if}s --- one for each
+% edge.
+%
+% \begin{macrocode}
+\newif\ifhex@r@ne
+\newif\ifhex@r@n
+\newif\ifhex@r@nw
+\newif\ifhex@r@sw
+\newif\ifhex@r@s
+\newif\ifhex@r@se
+% \end{macrocode}
+%
+% Next is the keys for each edge. These will set the above \cs{if}s
+% to \spec{true}. We put these into the family \spec{/hex/r} so that
+% we can parse them separately.
+%
+% \begin{macrocode}
+\tikzset{%
+ /hex/ridges/.search also={/tikz},
+ /hex/ridges/.cd,
+ north east/.is if=hex@r@ne,
+ north/.is if=hex@r@n,
+ north west/.is if=hex@r@nw,
+ south west/.is if=hex@r@sw,
+ south/.is if=hex@r@s,
+ south east/.is if=hex@r@se,
+ radius/.store in=\hex@r@r,
+ NE/.is if=hex@r@ne,
+ N/.is if=hex@r@n,
+ NW/.is if=hex@r@nw,
+ SW/.is if=hex@r@sw,
+ S/.is if=hex@r@s,
+ SE/.is if=hex@r@se,
+ r/.store in=\hex@r@r,
+}
+% \end{macrocode}
+%
+% \begin{Macro}{\hex@do@ridges}
+%
+% This is the macro that actually generates the ridge. We use the
+% same \textsc{pgf} filtered key parsing trick as above. Note that
+% the routine below is handcrafted since it is relatively simple.
+%
+% \begin{macrocode}
+\def\hex@do@ridges{%
+ \edef\hex@r@tmp{[
+ /hex/ridges/.cd,%
+ radius=0.8,%
+ /tikz/every hex ridges/.try,
+ \hex@ridges]}
+ \expandafter\scope\hex@r@tmp%
+ \hex@dbg{3}{Ridges: `\meaning\hex@ridges', `\meaning\hex@r@tmp'
+ ^^Jnorth east=\ifhex@r@ne yes\else no\fi
+ ^^Jnorth =\ifhex@r@n yes\else no\fi
+ ^^Jnorth west=\ifhex@r@nw yes\else no\fi
+ ^^Jsouth west=\ifhex@r@sw yes\else no\fi
+ ^^Jsouth =\ifhex@r@s yes\else no\fi
+ ^^Jsouth east=\ifhex@r@se yes\else no\fi
+ ^^Jradius =\hex@r@r
+ }
+ \def\hex@r@p{}
+ % Hand written algorithm
+ \ifhex@r@ne
+ \def\hex@r@p{(0:\hex@r@r)--(60:\hex@r@r)}
+ \fi
+ \ifhex@r@n
+ \hex@dbg{4}{Ridge along north edge: `\hex@r@p'}
+ \ifhex@r@ne\else
+ \xdef\hex@r@p{\hex@r@p ( 60:\hex@r@r)}
+ \fi
+ \xdef\hex@r@p{\hex@r@p --(120:\hex@r@r)}
+ \fi
+ \ifhex@r@nw
+ \ifhex@r@n\else
+ \xdef\hex@r@p{\hex@r@p (120:\hex@r@r)}
+ \fi
+ \xdef\hex@r@p{\hex@r@p --(180:\hex@r@r)}
+ \fi
+ \ifhex@r@sw
+ \ifhex@r@nw\else
+ \xdef\hex@r@p{\hex@r@p (180:\hex@r@r)}
+ \fi
+ \xdef\hex@r@p{\hex@r@p --(240:\hex@r@r)}
+ \fi
+ \ifhex@r@s
+ \ifhex@r@sw\else
+ \xdef\hex@r@p{\hex@r@p (240:\hex@r@r)}
+ \fi
+ \xdef\hex@r@p{\hex@r@p --(300:\hex@r@r)}
+ \fi
+ \ifhex@r@se
+ \ifhex@r@s\else
+ \xdef\hex@r@p{\hex@r@p (300:\hex@r@r)}
+ \fi
+ \xdef\hex@r@p{\hex@r@p --(360:\hex@r@r)}
+ \fi
+ \hex@dbg{3}{ Ridges path: \hex@r@p}
+ \draw[hex/ridges] \hex@r@p;
+ \endscope% End of ridges scope
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/shape.dtx b/macros/latex/contrib/wargame/source/hex/shape.dtx
new file mode 100644
index 0000000000..0d31da837f
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/shape.dtx
@@ -0,0 +1,368 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Hexes}
+% \label{sec:impl:hex:hex}
+%
+% In this part, we make macros etc. for the hexes.
+%
+% A hex shape. We make a node of this shape if we are to give a name
+% to the hex added. We add a bunch of anchors to it so we may easily
+% refer to it. This is also where we actual fill stuff into the hex,
+% such as terrain and so on.
+%
+% \begin{macrocode}
+\hex@dbg{5}{Base vertex: \hex@xx,\hex@yy}
+\hex@dbg{5}{Base edges: \hex@e@xx,\hex@e@yy}
+\pgfdeclareshape{hex/hex}{%
+ \saveddimen\radius{\pgf@x=\hex@radius}
+ \savedanchor{\east}{ \pgfqpoint{ \hex@radius}{0cm}}
+ \savedanchor{\west}{ \pgfqpoint{-\hex@radius}{0cm}}
+ \savedanchor{\northeast}{ \pgfqpoint{ \hex@dx}{ \hex@dy}}
+ \savedanchor{\northwest}{ \pgfqpoint{-\hex@dx}{ \hex@dy}}
+ \savedanchor{\southwest}{ \pgfqpoint{-\hex@dx}{-\hex@dy}}
+ \savedanchor{\southeast}{ \pgfqpoint{ \hex@dx}{-\hex@dy}}
+ \savedanchor{\northedge}{ \pgfqpoint{ 0cm}{ \hex@dy}}
+ \savedanchor{\southedge}{ \pgfqpoint{ 0cm}{-\hex@dy}}
+ \savedanchor{\northeastedge}{\pgfqpoint{ \hex@e@dx}{ \hex@e@dy}}
+ \savedanchor{\northwestedge}{\pgfqpoint{-\hex@e@dx}{ \hex@e@dy}}
+ \savedanchor{\southwestedge}{\pgfqpoint{-\hex@e@dx}{-\hex@e@dy}}
+ \savedanchor{\southeastedge}{\pgfqpoint{ \hex@e@dx}{-\hex@e@dy}}
+ \savedmacro\init{%
+ \def\hexpath{%
+ \pgfpathmoveto{\east}%
+ \pgfpathlineto{\northeast}%
+ \pgfpathlineto{\northwest}%
+ \pgfpathlineto{\west}%
+ \pgfpathlineto{\southwest}%
+ \pgfpathlineto{\southeast}%
+ \pgfpathclose}
+ }
+% \end{macrocode}
+%
+% These are the actual user callable anchors. We make anchors for
+% each vertex and mid points on each edge.
+%
+% \begin{macrocode}
+%%
+ \anchor{center}{ \pgfpointorigin}
+ \anchor{east}{ \east}
+ \anchor{west}{ \west}
+ \anchor{north east}{ \northeast}
+ \anchor{north west}{ \northwest}
+ \anchor{south west}{ \southwest}
+ \anchor{south east}{ \southeast}
+ \anchor{north edge}{ \northedge}
+ \anchor{south edge}{ \southedge}
+ \anchor{north east edge}{\northeastedge}
+ \anchor{north west edge}{\northwestedge}
+ \anchor{south west edge}{\southwestedge}
+ \anchor{south east edge}{\southeastedge}
+% \end{macrocode}
+%
+% Next we make some short hand aliases for each of these anchors.
+%
+% \begin{macrocode}
+ \anchor{E}{ \east}
+ \anchor{W}{ \west}
+ \anchor{NE}{ \northeast}
+ \anchor{NW}{ \northwest}
+ \anchor{SW}{ \southwest}
+ \anchor{SE}{ \southeast}
+ \anchor{N edge}{ \northedge}
+ \anchor{S edge}{ \southedge}
+ \anchor{NE edge}{\northeastedge}
+ \anchor{NW edge}{\northwestedge}
+ \anchor{SW edge}{\southwestedge}
+ \anchor{SE edge}{\southeastedge}
+% \end{macrocode}
+%
+% The next part is commented out because its not obvious we'll use
+% these.
+%
+% \begin{macrocode}
+ %%
+ \savedanchor{\chitnorth}{ \pgfqpoint{ 0cm}{ 0.6cm}}
+ \savedanchor{\chitsouth}{ \pgfqpoint{ 0cm}{ -0.6cm}}
+ \savedanchor{\chiteast}{ \pgfqpoint{ 0.6cm}{ 0cm}}
+ \savedanchor{\chitwest}{ \pgfqpoint{-0.6cm}{ 0cm}}
+ \savedanchor{\chitnortheast}{\pgfqpoint{ 0.6cm}{ 0.6cm}}
+ \savedanchor{\chitnorthwest}{\pgfqpoint{-0.6cm}{ 0.6cm}}
+ \savedanchor{\chitsouthwest}{\pgfqpoint{-0.6cm}{-0.6cm}}
+ \savedanchor{\chitsoutheast}{\pgfqpoint{ 0.6cm}{-0.6cm}}
+ %
+ \anchor{chit north}{\chitnorth}
+ \anchor{chit south}{\chitsouth}
+ \anchor{chit east}{\chiteast}
+ \anchor{chit west}{\chitwest}
+ \anchor{chit north east}{\chitnortheast}
+ \anchor{chit north west}{\chitnorthwest}
+ \anchor{chit south west}{\chitsouthwest}
+ \anchor{chit south east}{\chitsoutheast}
+ %
+ \anchor{chit N}{\chitnorth}
+ \anchor{chit S}{\chitsouth}
+ \anchor{chit E}{\chiteast}
+ \anchor{chit W}{\chitwest}
+ \anchor{chit NE}{\chitnortheast}
+ \anchor{chit NW}{\chitnorthwest}
+ \anchor{chit SW}{\chitsouthwest}
+ \anchor{chit SE}{\chitsoutheast}
+ %
+% \end{macrocode}
+%
+% The background path. This path may be drawn when the node is
+% drawn. However, we will do most of the work in the
+% \cs{behindbackgroundpath} which gets drawn \emph{after} this path.
+%
+% \begin{macrocode}
+ \backgroundpath{\init\hexpath}
+% \end{macrocode}
+%
+% The \emph{behind} background path, where we do most of the work.
+%
+% \begin{macrocode}
+ \behindforegroundpath{%
+ \hex@dbg{2}{Hex behind foreground path:
+ ^^JTerrain: `\meaning\hex@terrain'
+ ^^JRidges: `\meaning\hex@ridges'
+ ^^JTown: `\meaning\hex@town'
+ ^^JExtra clipped: `\meaning\hex@extra@clip'
+ ^^JLabel: `\meaning\hex@label'
+ ^^JExtra: `\meaning\hex@extra'
+ ^^JLast node name:`\meaning\tikzlastnode'
+ ^^JHex row: `\meaning\hex@row'
+ ^^JHex col: `\meaning\hex@col'
+ }%
+ \init%
+% \end{macrocode}
+%
+% We start a scope and clip to the hex path first.
+%
+% \begin{macrocode}
+ \scope%
+ \hexpath%
+ \pgfusepath{clip}%
+% \end{macrocode}
+%
+% Anything inside this scope is clipped to the hex path. The next
+% step is to see if we have a specified terrain for the hex.
+%
+% \begin{macrocode}
+ \@ifundefined{hex@terrain}{\let\hex@terrain\empty}{}%
+ \ifx\hex@terrain\empty\else\hex@do@terrain\fi%
+% \end{macrocode}
+%
+% This concludes the processing of the terrain of the hex. Next, we
+% must see if the user specified ridges.
+%
+% \begin{macrocode}
+ \@ifundefined{hex@ridges}{\let\hex@ridges\empty}{}%
+ \ifx\hex@ridges\empty\else\hex@do@ridges\fi%
+% \end{macrocode}
+%
+% This concludes the processing of the ridges of the hex. Next, we
+% should process any extra (clipped) stuff specified. The user may
+% pass options to each \spec{pic}ture by preceding it with
+% \oarg{options}.
+%
+% \begin{macrocode}
+ \@ifundefined{hex@extra@clip}{\let\hex@extra@clip\empty}{}
+ \ifx\hex@extra@clip\empty\else%
+ \hex@dbg{5}{Extra clipped: `\meaning\hex@extra'}
+ \pgfpointorigin\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \wg@pic@all{\hex@extra@clip}{}{\the\wg@tmpa,\the\wg@tmpb}{}%
+ \fi%
+% \end{macrocode}
+%
+% This concludes the extra stuff put in the hex. Next, we should
+% place the label is specified. Note, we may know the hex row and
+% column at this point, stored in \cs{hex@row} and \cs{hex@column},
+% respectively. We may want to name the generated node from these if
+% the user specified that option (perhaps use \cs{pgfnoderename} or
+% similar).
+%
+% \begin{macrocode}
+ \@ifundefined{hex@label}{\let\hex@label\empty}{}
+ \ifx\hex@label\empty\else\hex@do@label\fi%
+ \endscope%
+% \end{macrocode}
+%
+% This concludes the label processing, and stuff that should be
+% clipped to the hex shape. If the user specified a town, we can now
+% make that.
+%
+% \begin{macrocode}
+ \@ifundefined{hex@town}{\let\hex@town\empty}{}
+ \@ifundefined{hex@c@pic}{\let\hex@c@pic\empty}{}
+ \ifx\hex@town\empty\else\hex@do@town\fi%
+% \end{macrocode}
+%
+% We can now add extra (non-clipped) stuff. We assume that extra
+% stuff is \spec{pic}tures. The user may pass options to each
+% \spec{pic}ture by preceding it with \oarg{options}.
+%
+% \begin{macrocode}
+ \@ifundefined{hex@extra}{\let\hex@extra\empty}{}
+ \ifx\hex@extra\empty\else%
+ \hex@dbg{5}{Extra: `\meaning\hex@extra'}
+ \pgfpointorigin\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \wg@pic@all{\hex@extra}{}{\the\wg@tmpa,\the\wg@tmpb}{}%
+ \fi%
+ }
+}
+% \end{macrocode}
+%
+% \begin{HexKey*}{
+% /hex/terrain,
+% /hex/town,
+% /hex/label,
+% /hex/ridges,
+% /hex/extra,
+% /hex/extra clipped}
+%
+% Next, we set up the name space for hex keys. This is the top level
+% name space for hexes. Sub keys \spec{terrain}, \spec{ridges},
+% \spec{town}, \spec{extra}, \spec{label}, and \spec{extra clipped},
+% store their arguments in macros and we expand these later on. This
+% allows us to scope some of the keys given to those specific parts.
+%
+% Define keys for hexagon options. These are
+%
+% \begin{tabular}{|l|p{.7\linewidth}|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Name}}
+% & {\color{headfg}\textbf{Description}}\\
+% \hline
+% \spec{terrain} & Terrain\\
+% \spec{label} & Label on hex\\
+% \spec{town} & Town in hex. Optionally with a name\\
+% \spec{ridges} & Ridge markings on hex\\
+% \spec{extra} & More \\
+% \spec{extra clipped} & More clipped to hex\\
+% \hline
+% \end{tabular}
+%
+% \begin{macrocode}
+\tikzset{%
+ /hex/.search also={/tikz},%
+ /hex/.cd,%
+ terrain/.store in=\hex@terrain,%
+ ridges/.store in=\hex@ridges,%
+ town/.store in=\hex@town,%
+ extra/.store in=\hex@extra,%
+ label/.store in=\hex@label,%
+ extra clipped/.store in=\hex@extra@clip%
+}
+% \end{macrocode}
+% \end{HexKey*}
+%
+% \begin{TikzKey}{hex}
+% The next key is the real work horse of the show. Specifying the
+% \spec{hex} key to a node effectively creates a hex for us. Now,
+% there are some things we cannot do outright in the node shape
+% code. For example, we cannot set the name of the node created
+% from the shape code. Therefore, the use of \cs{hex} is often the
+% right choice.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/hex/.style={
+ transform shape,
+ anchor=center,
+ draw=pgfstrokecolor,
+ fill=none,
+ thick,
+ solid},
+ hex/.code={%
+ \hex@dbg{1}{=== Hex with options: `#1'}%
+ \pgfkeys{/tikz/transform shape,/tikz/shape=hex/hex}
+ \pgfkeys{/hex/.cd,/tikz/hex/hex,/tikz/every hex/.try,#1}}}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% The first thing is to set the default graphics options. The key
+% \spec{every hex} can be set to hex options to be used for all hexes.
+% For example, if one want to label all hexes with an auto-generated
+% label, one can do
+%
+% \begin{Syntax}
+% \cs{tikzset}\{every hex/.style=\{label=\{auto=numbered\}\}\}
+% \end{Syntax}
+%
+% This, coupled with the \spec{hex/label is name} option allows us to
+% set up the board with really minimal effort. We can then use the
+% board coordinates when placing units, and other things.
+%
+%
+% Now we have set up these tools we can go on and define the user
+% facing macro.
+%
+% \begin{Macro}{\hex,\hex@,\hex@@}
+%
+% This will add a hex to the output graphics. Note, the macro
+% need not be followed by a semi-colon (\spec{;}).
+%
+% First argument is optional options.
+%
+% \begin{macrocode}
+\def\hex{%
+ \@ifnextchar[{\hex@}{\hex@[]}%]
+}
+% \end{macrocode}
+%
+% Second optional argument is the coordinates. These should be given
+% in the hex coordinate system.
+%
+% \begin{macrocode}
+\def\hex@[#1]{%
+ \@ifnextchar({\hex@@{#1}}{%
+ \hex@@{#1}(c=0,r=0)}%)
+}
+% \end{macrocode}
+%
+% Third argument is the name to be used.
+%
+% \begin{macrocode}
+\def\hex@@#1(#2){%
+ \@ifnextchar({\hex@@@{#1}{#2}}{\hex@@@{#1}{#2}()}%)
+}
+% \end{macrocode}
+%
+% Now for the real work-horse. First thing is to reset keys and parse
+% them out from the arguments.
+%
+% \begin{macrocode}
+% Third argument is name
+\def\hex@@@#1#2(#3){%
+ \node[hex={#1}] (tmp) at (hex cs:#2) {};%
+ \hex@dbg{8}{=== Label text: `\meaning\hex@l@text'}
+ \ifx|#3|\relax%
+ \@ifundefined{hex@l@text}{%
+ \hex@dbg{8}{=== Label text of hex (#2) not defined}%
+ \let\hex@l@text\empty%
+ }{}
+ \ifhex@label@is@name%
+ \hex@dbg{5}{=== Use label text of hex (#2) as name}%
+ \ifx\hex@l@text\@empty%
+ \hex@dbg{8}{=== Argh! Label text is empty! `\meaning\hex@l@text'}
+ \else%
+ \hex@dbg{3}{=== Renaming hex to label text `\hex@l@text'}
+ \pgfnoderename{\hex@l@text}{tmp}%
+ \fi%
+ \fi%
+ \else%
+ \hex@dbg{3}{=== Renaming hex to user defined name `#3'}%
+ \pgfnoderename{#3}{tmp}%
+ \fi%
+ \@ifnextchar;{\@gobble}{}%
+}
+% \end{macrocode}
+% \end{Macro}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain.dtx b/macros/latex/contrib/wargame/source/hex/terrain.dtx
new file mode 100644
index 0000000000..765b38e759
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain.dtx
@@ -0,0 +1,248 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Terrain}
+% \label{sec:impl:hex:terrain}
+%
+% With the above main routine for making hexes, we turn to decorating
+% a hex with a terrain.
+%
+% \begin{HexKey*}{hex/terrain/image,
+% hex/terrain/pic,
+% hex/terrain/code,
+% hex/terrain/clip}
+%
+% We make the namespace \spec{/hex/terrain} to hold the
+% specific terrain keys. Keys used by terrain identifiers are
+%
+% \begin{tabular}{|l|p{.7\linewidth}|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Name}}
+% & {\color{headfg}\textbf{Description}}\\
+% \hline
+% \spec{image} & Terrain tile image\\
+% \spec{pic} & Terrain \TikZ{} \spec{pic}ture\\
+% \spec{code} & Arbitary \TikZ{} code\\
+% \spec{clip} & \TikZ{} path to clip terrain\\
+% \hline
+% \end{tabular}
+%
+% Now, we have the keys we'll need for selecting the terrain. These
+% live in the namespace \spec{/hex/terrain}, and we can select
+% between \spec{pic}tures or \spec{image}s (external graphics files)
+% for making the terrain. We define some short hands to easily
+% select the common terrains.
+%
+% \begin{macrocode}
+\tikzset{%
+ /hex/terrain/.search also={/tikz},%
+ /hex/terrain/.cd,%
+ pic/.store in=\hex@t@pic,%
+ image/.store in=\hex@t@image,%
+ code/.store in=\hex@t@code,%
+ clip/.store in=\hex@t@clip,%
+ pic/.default=,
+ image/.default=,
+ code/.default=,
+ clip/.default,
+}
+\iffalse
+\tikzset{
+ /hex/terrain/.cd,%
+ beach/.style={pic=hex/terrain/beach},
+ light woods/.style={pic=hex/terrain/light woods},
+ woods/.style={pic=hex/terrain/woods},
+ swamp/.style={pic=hex/terrain/swamp},
+ rough/.style={pic=hex/terrain/rough},
+ mountains/.style={pic=hex/terrain/mountains},
+ village/.style={pic=hex/terrain/village},
+ town/.style={pic=hex/terrain/town},
+ city/.style={pic=hex/terrain/city},
+}
+\else
+\tikzset{
+ /hex/terrain/.cd,%
+ beach/.style={image=beach},
+ light woods/.style={image=light_woods},
+ woods/.style={image=woods},
+ swamp/.style={image=swamp},
+ rough/.style={image=rough},
+ mountains/.style={image=mountains},
+ village/.style={image=village},
+ town/.style={image=town},
+ city/.style={image=city},
+}
+\fi
+% \end{macrocode}
+% \end{HexKey*}
+%
+%
+% Before we go on, we define the macro that actually generates the
+% terrain of a hex.
+%
+% \begin{Macro}{\hex@do@terrain}
+% If we do have a terrain specified, we start a new scope, this time
+% to clip the terrain by the clipping path specified by
+% \spec{hex=\{terrain=\{clip=...\}\}}. The first thing into the new
+% scope is to process the keys specified in
+% \spec{hex=\{terrain=...\}}. This will set the terrain and the
+% clipping of the terrain.
+%
+% \begin{macrocode}
+\def\hex@do@terrain{%
+ \hex@dbg{5}{Terrain: \meaning\hex@terrain}%
+ \edef\hex@t@tmp{[/hex/terrain/.cd,\hex@terrain]}%
+ \expandafter\scope\hex@t@tmp% Scope for terrain clipping.
+ \hex@dbg{5}{Terrain:
+ ^^J pic: \meaning\hex@t@pic
+ ^^J image: \meaning\hex@t@image
+ ^^J code: \meaning\hex@t@code
+ ^^J clip: \meaning\hex@t@clip}
+% \end{macrocode}
+%
+% We check to see if we have any clipping \spec{pic}tures. If so, we
+% process these in turn and append the soft path to a macro. Once
+% this is done, we use the soft path as a clipping path for the rest
+% of the (terrain) scope.
+%
+% \begin{macrocode}
+ \@ifundefined{hex@t@clip}{\let\hex@t@clip\empty}{}
+ \ifx\hex@t@clip\empty\else%
+ \def\hex@t@c{}
+ \foreach \c in \hex@t@clip{%
+ \hex@dbg{5}{Clipping to `\c'}
+ \expandafter\wg@pic\c\@endwg@pic {}{\wg@tmpa,\wg@tmpb}{%
+ save path=\hex@t@tmp}%
+ \wg@addto@macro\hex@t@c\hex@t@tmp % Append to clippping
+ }%
+ \pgfsyssoftpath@setcurrentpath{\hex@t@c}% Set path
+ \clip;% Clip to the path
+ \fi % End of clipping terrain
+% \end{macrocode}
+%
+% We're new ready to make the terrain. First, we check to see if the
+% relevant storage macros are undefined and if so, \cs{let} them to
+% \cs{empty} so that we can deal more easily with the various cases.
+%
+% \begin{macrocode}
+ %% Now switch between how to draw the terrain. If some of the
+ %% macros are undefined, define them to be empty
+ \@ifundefined{hex@t@pic}{\let\hex@t@pic\empty}{}
+ \@ifundefined{hex@t@image}{\let\hex@t@image\empty}{}
+% \end{macrocode}
+%
+% First we check if we have not got terrain images, but terrain
+% pictures. If we have that, we process these in turn. Note, the
+% user can give options to each terrain picture by preceding the
+% \spec{pic}ture name with \oarg{options}.
+%
+% \begin{macrocode}
+ % If we have no image, check if we have pictures.
+ \ifx\hex@t@image\empty%
+ \hex@dbg{8}{No terrain images}%
+ \ifx\hex@t@pic\empty\else%
+ % We have pictures
+ \hex@dbg{5}{Terrain pictures}%
+ \pgfpointorigin\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \wg@pic@all{\hex@t@pic}{}{\the\wg@tmpa,\the\wg@tmpb}{}%
+ \fi% We have pictures.
+% \end{macrocode}
+%
+%
+% If the user specified images rather than \spec{pic}tures, then we
+% process these in turn. Again, the user can specify options to each
+% terrain image by preceding the image file name with \oarg{options}.
+%
+% \begin{macrocode}
+ \else % We have images
+ \hex@dbg{5}{Terrain images}%
+ \pgfpointorigin\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \foreach \i in \hex@t@image{%
+ \hex@dbg{10}{Terrain image: `\meaning\i'}
+ \expandafter\wg@node{%
+ \includegraphics[width=2cm]{\i}}\@endwg@node %
+ {}{\wg@tmpa,\wg@tmpb}{%
+ shape=rectangle,%
+ anchor=center,%
+ transform shape,%
+ draw=none}%
+ }
+ \fi%
+ \endscope% End of terrain scope
+}% End of terrain
+% \end{macrocode}
+% \end{Macro}
+%
+%
+%
+%
+
+%
+% Next, we define some example clippings of the terrain images.
+% Specifcally, we make clippings to sextants. We do this by first
+% defining a macro.
+%
+% \begin{Macro}{\hex@make@sextants}
+%
+% When executed this macro will generate some paths that will clip
+% to sextants. The first argument is the inner radius of the
+% sextant and the second argument is the (possible empty) prefix to
+% put in front of the \spec{sextant} name.
+%
+% \begin{macrocode}
+\def\hex@x@r{.7}
+\def\hex@make@sextants#1#2{%
+ \tikzset{%
+ pics/hex/#2sextant/.is choice,
+ pics/hex/#2sextant/north east/.style={
+ code={
+ \path[pic actions]( 0:1)--( 60:1)--( 60:#1)--( 0:#1)--cycle;}},
+ pics/hex/#2sextant/north/.style={
+ code={
+ \path[pic actions]( 60:1)--(120:1)--(120:#1)--( 60:#1)--cycle;}},
+ pics/hex/#2sextant/north west/.style={
+ code={
+ \path[pic actions](120:1)--(180:1)--(180:#1)--(120:#1)--cycle;}},
+ pics/hex/#2sextant/south west/.style={
+ code={
+ \path[pic actions](180:1)--(240:1)--(240:#1)--(180:#1)--cycle;}},
+ pics/hex/#2sextant/south/.style={
+ code={
+ \path[pic actions](240:1)--(300:1)--(300:#1)--(240:#1)--cycle;}},
+ pics/hex/#2sextant/south east/.style={
+ code={
+ \path[pic actions](300:1)--(360:1)--(360:#1)--(300:#1)--cycle;}},
+ pics/hex/#2sextant/center/.style={
+ code={
+ \path[pic actions]
+ (0:#1)--
+ (60:#1)--
+ (120:#1)--
+ (180:#1)--
+ (240:#1)--
+ (300:#1)--cycle;}},
+ pics/hex/#2sextant/NE/.style=hex/#2sextant/north east,
+ pics/hex/#2sextant/NE/.style=hex/#2sextant/north east,
+ pics/hex/#2sextant/N/.style=hex/#2sextant/north,
+ pics/hex/#2sextant/NW/.style=hex/#2sextant/north west,
+ pics/hex/#2sextant/SW/.style=hex/#2sextant/south west,
+ pics/hex/#2sextant/S/.style=hex/#2sextant/south,
+ pics/hex/#2sextant/SE/.style=hex/#2sextant/south east,
+ pics/hex/#2sextant/C/.style=hex/#2sextant/center,
+ }
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{macrocode}
+\hex@make@sextants{.7}{}
+\hex@make@sextants{.3}{large }
+\hex@make@sextants{0}{full }
+% \end{macrocode}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/beach.dtx b/macros/latex/contrib/wargame/source/hex/terrain/beach.dtx
new file mode 100644
index 0000000000..98e990c15c
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/beach.dtx
@@ -0,0 +1,698 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% Next, we define some styles for styling the terrain pictures. Users
+% can change these styles (e.g., by appending to them) to change say
+% the colour of the terrain graphics.
+%
+%
+% \begin{TikzKey}{hex/terrain/beach}
+% The style for beach hexes. The pattern is filled with a yellowish
+% colour, and drawing of the outline is disabled.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/beach/.style={%
+ fill={rgb,100:red,93;green,73;blue,35},%
+ draw=none%
+ }%
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% Now for the actual patterns. We go in the same order as above ---
+% i.e, we start with the beach pattern. This is rather long.
+%
+% \begin{TikzKey}{hex/terrain/beach}
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/beach/.pic={
+ \path[hex/terrain/beach,pic actions,draw=none]
+ (-0.4931, 0.8848)
+ -- (-0.4998, 0.8734)
+ .. controls (-0.4908, 0.8731) and (-0.4813, 0.8762) .. (-0.4762, 0.8847)
+ --cycle
+ (-0.4032, 0.8841)
+ .. controls (-0.4004, 0.8804) and (-0.3988, 0.8794) .. (-0.3956, 0.8745)
+ .. controls (-0.3760, 0.8443) and (-0.3811, 0.8330) .. (-0.3456, 0.8112)
+ .. controls (-0.3250, 0.7986) and (-0.2712, 0.7770) .. (-0.2531, 0.8032)
+ .. controls (-0.2294, 0.8375) and (-0.2984, 0.8503) .. (-0.3193, 0.8690)
+ .. controls (-0.3243, 0.8735) and (-0.3281, 0.8785) .. (-0.3321, 0.8835)
+ --cycle
+ (-0.2462, 0.8828)
+ .. controls (-0.2425, 0.8681) and (-0.2383, 0.8546) .. (-0.2293, 0.8461)
+ .. controls (-0.2102, 0.8280) and (-0.1892, 0.8390) .. (-0.1859, 0.8669)
+ .. controls (-0.1854, 0.8711) and (-0.1871, 0.8772) .. (-0.1875, 0.8822)
+ --cycle
+ (-0.0997, 0.8815)
+ .. controls (-0.0971, 0.8706) and (-0.0941, 0.8597) .. (-0.0907, 0.8493)
+ -- (-0.0570, 0.8578)
+ .. controls (-0.0570, 0.8629) and (-0.0560, 0.8730) .. (-0.0553, 0.8812)
+ --cycle
+ ( 0.0213, 0.8805)
+ .. controls ( 0.0222, 0.8725) and ( 0.0235, 0.8650) .. ( 0.0262, 0.8587)
+ .. controls ( 0.0391, 0.8281) and ( 0.0706, 0.8199) .. ( 0.0917, 0.7894)
+ .. controls ( 0.1112, 0.7609) and ( 0.1058, 0.7286) .. ( 0.1050, 0.6961)
+ -- ( 0.1731, 0.7216)
+ -- ( 0.1203, 0.8649)
+ -- ( 0.1097, 0.8797)
+ --cycle
+ ( 0.2978, 0.8781)
+ .. controls ( 0.2985, 0.8773) and ( 0.3002, 0.8756) .. ( 0.3008, 0.8749)
+ .. controls ( 0.2854, 0.8687) and ( 0.2549, 0.8572) .. ( 0.2421, 0.8487)
+ .. controls ( 0.2026, 0.8224) and ( 0.1905, 0.7567) .. ( 0.2046, 0.7132)
+ .. controls ( 0.2146, 0.6819) and ( 0.2330, 0.6680) .. ( 0.2394, 0.6280)
+ .. controls ( 0.2413, 0.6160) and ( 0.2468, 0.5527) .. ( 0.2446, 0.5437)
+ .. controls ( 0.2396, 0.5232) and ( 0.2211, 0.5122) .. ( 0.2231, 0.4913)
+ .. controls ( 0.2261, 0.4603) and ( 0.2686, 0.4388) .. ( 0.2891, 0.4194)
+ .. controls ( 0.3020, 0.4071) and ( 0.3136, 0.3895) .. ( 0.3281, 0.3799)
+ .. controls ( 0.3688, 0.3533) and ( 0.3905, 0.3863) .. ( 0.4199, 0.3902)
+ .. controls ( 0.4350, 0.3921) and ( 0.4560, 0.3849) .. ( 0.4710, 0.3812)
+ -- ( 0.4795, 0.4067)
+ -- ( 0.4965, 0.4067)
+ .. controls ( 0.5008, 0.3961) and ( 0.5009, 0.3893) .. ( 0.5112, 0.3811)
+ .. controls ( 0.5112, 0.3811) and ( 0.6172, 0.3385) .. ( 0.6481, 0.3037)
+ .. controls ( 0.6729, 0.2758) and ( 0.6641, 0.2532) .. ( 0.6667, 0.2206)
+ -- ( 0.7004, 0.2206)
+ .. controls ( 0.7839, 0.2118) and ( 0.7047, 0.0740) .. ( 0.7057, 0.0568)
+ .. controls ( 0.7067, 0.0396) and ( 0.7865,-0.0424) .. ( 0.8032,-0.0520)
+ .. controls ( 0.8251,-0.0644) and ( 0.8703,-0.0686) .. ( 0.8572,-0.0293)
+ .. controls ( 0.8518,-0.0131) and ( 0.7996, 0.0474) .. ( 0.7843, 0.0564)
+ .. controls ( 0.7724, 0.0633) and ( 0.7645, 0.0636) .. ( 0.7518, 0.0664)
+ .. controls ( 0.7688, 0.1093) and ( 0.7993, 0.1905) .. ( 0.7930, 0.2362)
+ .. controls ( 0.7869, 0.2804) and ( 0.7252, 0.2982) .. ( 0.6946, 0.3268)
+ .. controls ( 0.6664, 0.3531) and ( 0.6746, 0.3662) .. ( 0.6323, 0.3966)
+ .. controls ( 0.5760, 0.4371) and ( 0.5386, 0.4324) .. ( 0.5250, 0.4601)
+ .. controls ( 0.5090, 0.4927) and ( 0.5578, 0.6035) .. ( 0.5969, 0.5911)
+ .. controls ( 0.6199, 0.5839) and ( 0.6224, 0.5471) .. ( 0.6341, 0.5291)
+ .. controls ( 0.6488, 0.5064) and ( 0.7020, 0.4614) .. ( 0.7263, 0.4493)
+ -- ( 0.7373, 0.4768)
+ -- ( 0.6866, 0.5671)
+ -- ( 0.6756, 0.5720)
+ -- ( 0.6766, 0.5850)
+ -- ( 0.6331, 0.6627)
+ .. controls ( 0.6280, 0.6613) and ( 0.6239, 0.6599) .. ( 0.6157, 0.6589)
+ -- ( 0.5646, 0.6589)
+ .. controls ( 0.5375, 0.6557) and ( 0.5277, 0.6432) .. ( 0.4965, 0.6489)
+ .. controls ( 0.4716, 0.6520) and ( 0.4306, 0.6774) .. ( 0.4104, 0.6489)
+ .. controls ( 0.3809, 0.6093) and ( 0.4627, 0.6240) .. ( 0.4837, 0.5772)
+ .. controls ( 0.4958, 0.5502) and ( 0.4652, 0.4811) .. ( 0.4429, 0.4648)
+ -- ( 0.3523, 0.4350)
+ .. controls ( 0.3178, 0.4372) and ( 0.3207, 0.4766) .. ( 0.3153, 0.5004)
+ .. controls ( 0.3090, 0.5282) and ( 0.2968, 0.5398) .. ( 0.2922, 0.5684)
+ .. controls ( 0.2896, 0.6035) and ( 0.3061, 0.6276) .. ( 0.2922, 0.6621)
+ .. controls ( 0.2756, 0.6961) and ( 0.2422, 0.7190) .. ( 0.2525, 0.7640)
+ .. controls ( 0.2650, 0.8188) and ( 0.3165, 0.7932) .. ( 0.3324, 0.8417)
+ .. controls ( 0.3359, 0.8522) and ( 0.3385, 0.8648) .. ( 0.3399, 0.8778)
+ --cycle
+ ( 0.4261, 0.8770)
+ -- ( 0.4333, 0.8493)
+ -- ( 0.4845, 0.7440)
+ .. controls ( 0.4963, 0.7304) and ( 0.5450, 0.6930) .. ( 0.5630, 0.6989)
+ .. controls ( 0.5735, 0.7024) and ( 0.5838, 0.7169) .. ( 0.5932, 0.7337)
+ -- ( 0.5612, 0.7909)
+ .. controls ( 0.5537, 0.7875) and ( 0.5468, 0.7852) .. ( 0.5403, 0.7864)
+ .. controls ( 0.5078, 0.7926) and ( 0.5191, 0.8406) .. ( 0.5145, 0.8567)
+ .. controls ( 0.5121, 0.8651) and ( 0.5076, 0.8710) .. ( 0.5025, 0.8764)
+ --cycle
+ ( 0.3773, 0.8153)
+ .. controls ( 0.3625, 0.7892) and ( 0.2993, 0.7161) .. ( 0.3316, 0.6877)
+ .. controls ( 0.3432, 0.6774) and ( 0.3866, 0.6728) .. ( 0.4029, 0.6706)
+ -- ( 0.3973, 0.7472)
+ -- ( 0.4029, 0.8153)
+ --cycle
+ (-0.4224, 0.8088)
+ .. controls (-0.4416, 0.8077) and (-0.4585, 0.7826) .. (-0.4275, 0.7562)
+ -- (-0.3971, 0.7387)
+ .. controls (-0.4780, 0.6942) and (-0.4752, 0.6640) .. (-0.4591, 0.5855)
+ .. controls (-0.4391, 0.4887) and (-0.4527, 0.5347) .. (-0.4103, 0.4493)
+ .. controls (-0.3870, 0.4026) and (-0.4070, 0.3747) .. (-0.3460, 0.3642)
+ -- (-0.3352, 0.4823)
+ .. controls (-0.3409, 0.5024) and (-0.3617, 0.5113) .. (-0.3739, 0.5281)
+ -- (-0.4164, 0.6287)
+ .. controls (-0.4188, 0.6375) and (-0.4186, 0.6444) .. (-0.4164, 0.6528)
+ .. controls (-0.4067, 0.6807) and (-0.3521, 0.7255) .. (-0.3274, 0.6931)
+ .. controls (-0.3070, 0.6694) and (-0.3336, 0.6432) .. (-0.3274, 0.6221)
+ .. controls (-0.3249, 0.6055) and (-0.3059, 0.6028) .. (-0.2950, 0.6162)
+ .. controls (-0.2867, 0.6265) and (-0.2838, 0.6558) .. (-0.2829, 0.6692)
+ .. controls (-0.2775, 0.7444) and (-0.3333, 0.7652) .. (-0.3955, 0.7472)
+ .. controls (-0.3950, 0.7586) and (-0.3916, 0.7684) .. (-0.3955, 0.7803)
+ .. controls (-0.3986, 0.8016) and (-0.4109, 0.8096) .. (-0.4224, 0.8088)
+ --cycle
+ (-0.1391, 0.8077)
+ .. controls (-0.1634, 0.8024) and (-0.1582, 0.7647) .. (-0.1487, 0.7492)
+ .. controls (-0.1306, 0.7190) and (-0.1004, 0.7270) .. (-0.0652, 0.7073)
+ -- (-0.0226, 0.6801)
+ -- ( 0.0282, 0.6560)
+ .. controls ( 0.0622, 0.6331) and ( 0.0955, 0.5639) .. ( 0.1219, 0.5259)
+ .. controls ( 0.2125, 0.5714) and ( 0.1427, 0.6114) .. ( 0.1219, 0.6453)
+ -- ( 0.1054, 0.6768)
+ .. controls ( 0.0862, 0.7028) and ( 0.0448, 0.7080) .. ( 0.0115, 0.7299)
+ .. controls (-0.0377, 0.7622) and (-0.0173, 0.7726) .. (-0.0822, 0.7918)
+ .. controls (-0.0961, 0.7958) and (-0.1270, 0.8103) .. (-0.1391, 0.8077)
+ --cycle
+ (-0.5460, 0.7940)
+ -- (-0.5911, 0.7166)
+ .. controls (-0.5649, 0.7015) and (-0.5397, 0.7188) .. (-0.5308, 0.7556)
+ .. controls (-0.5251, 0.7788) and (-0.5335, 0.7873) .. (-0.5460, 0.7940)
+ --cycle
+ (-0.2382, 0.7423)
+ .. controls (-0.2453, 0.7424) and (-0.2512, 0.7383) .. (-0.2550, 0.7274)
+ .. controls (-0.2635, 0.7026) and (-0.2353, 0.6726) .. (-0.2229, 0.6536)
+ .. controls (-0.2031, 0.6234) and (-0.2020, 0.6105) .. (-0.1928, 0.5770)
+ .. controls (-0.1763, 0.5803) and (-0.1499, 0.5890) .. (-0.1342, 0.5831)
+ .. controls (-0.1112, 0.5745) and (-0.1047, 0.5481) .. (-0.0866, 0.5338)
+ -- (-0.0397, 0.5102)
+ -- ( 0.0664, 0.4219)
+ .. controls ( 0.0874, 0.3954) and ( 0.0785, 0.3655) .. ( 0.1070, 0.3502)
+ .. controls ( 0.1367, 0.3343) and ( 0.1690, 0.3592) .. ( 0.1732, 0.3899)
+ .. controls ( 0.1755, 0.4075) and ( 0.1545, 0.4554) .. ( 0.1475, 0.4748)
+ .. controls ( 0.0838, 0.4666) and ( 0.0509, 0.4836) .. ( 0.0454, 0.5515)
+ .. controls (-0.0576, 0.5778) and (-0.0955, 0.6323) .. (-0.1754, 0.6949)
+ .. controls (-0.1861, 0.7034) and (-0.2171, 0.7418) .. (-0.2382, 0.7423)
+ --cycle
+ (-0.5068, 0.6706)
+ .. controls (-0.5119, 0.6724) and (-0.5194, 0.6726) .. (-0.5299, 0.6701)
+ .. controls (-0.5512, 0.6413) and (-0.5242, 0.6333) .. (-0.5102, 0.6400)
+ .. controls (-0.4981, 0.6457) and (-0.4916, 0.6653) .. (-0.5068, 0.6706)
+ --cycle
+ (-0.6356, 0.6402)
+ -- (-0.6681, 0.5845)
+ -- (-0.6588, 0.5684)
+ .. controls (-0.6473, 0.5521) and (-0.6323, 0.5371) .. (-0.6265, 0.5174)
+ .. controls (-0.6174, 0.4865) and (-0.6614, 0.4161) .. (-0.6950, 0.4206)
+ .. controls (-0.7111, 0.4226) and (-0.7174, 0.4376) .. (-0.7460, 0.4507)
+ -- (-0.7632, 0.4212)
+ .. controls (-0.7629, 0.4042) and (-0.7611, 0.3875) .. (-0.7546, 0.3789)
+ .. controls (-0.7424, 0.3626) and (-0.7129, 0.3612) .. (-0.6966, 0.3297)
+ .. controls (-0.6823, 0.3022) and (-0.6963, 0.2741) .. (-0.6808, 0.2598)
+ .. controls (-0.6602, 0.2410) and (-0.6495, 0.2720) .. (-0.6484, 0.2878)
+ .. controls (-0.6461, 0.3229) and (-0.6488, 0.4046) .. (-0.6080, 0.4204)
+ .. controls (-0.5750, 0.4330) and (-0.4980, 0.3514) .. (-0.4929, 0.3217)
+ .. controls (-0.4895, 0.3019) and (-0.5044, 0.2671) .. (-0.4860, 0.2550)
+ .. controls (-0.4691, 0.2439) and (-0.4582, 0.2679) .. (-0.4535, 0.2796)
+ .. controls (-0.4450, 0.3015) and (-0.4273, 0.3562) .. (-0.4401, 0.3771)
+ .. controls (-0.4495, 0.3922) and (-0.5019, 0.4172) .. (-0.5296, 0.4507)
+ .. controls (-0.5656, 0.4941) and (-0.5734, 0.5631) .. (-0.5973, 0.6021)
+ .. controls (-0.6099, 0.6226) and (-0.6226, 0.6316) .. (-0.6356, 0.6402)
+ --cycle
+ ( 0.2242, 0.6110)
+ -- ( 0.1816, 0.6025)
+ -- ( 0.1816, 0.5855)
+ .. controls ( 0.2117, 0.5815) and ( 0.2140, 0.5821) .. ( 0.2242, 0.6110)
+ --cycle
+ ( 0.3924, 0.6049)
+ .. controls ( 0.3895, 0.6048) and ( 0.3860, 0.6036) .. ( 0.3820, 0.6011)
+ .. controls ( 0.3535, 0.5835) and ( 0.3670, 0.5238) .. ( 0.3773, 0.5004)
+ -- ( 0.3944, 0.5004)
+ -- ( 0.4061, 0.5429)
+ .. controls ( 0.4082, 0.5540) and ( 0.4130, 0.6056) .. ( 0.3924, 0.6049)
+ --cycle
+ (-0.2864, 0.5940)
+ .. controls (-0.2904, 0.5793) and (-0.2950, 0.5676) .. (-0.2919, 0.5518)
+ .. controls (-0.2769, 0.4768) and (-0.1616, 0.5041) .. (-0.2162, 0.5623)
+ .. controls (-0.2236, 0.5702) and (-0.2346, 0.5747) .. (-0.2443, 0.5790)
+ --cycle
+ (-0.7010, 0.5280)
+ -- (-0.7269, 0.4835)
+ .. controls (-0.7207, 0.4876) and (-0.7144, 0.4952) .. (-0.7081, 0.5094)
+ --cycle
+ (-0.0992, 0.4748)
+ -- (-0.2099, 0.4556)
+ -- (-0.2888, 0.3790)
+ -- (-0.3460, 0.3557)
+ -- (-0.3389, 0.3218)
+ .. controls (-0.3310, 0.2959) and (-0.3026, 0.2636) .. (-0.2781, 0.2927)
+ .. controls (-0.2745, 0.2971) and (-0.2504, 0.3947) .. (-0.1948, 0.3764)
+ .. controls (-0.1607, 0.3651) and (-0.1697, 0.2984) .. (-0.1588, 0.2536)
+ -- (-0.1503, 0.2536)
+ -- (-0.1503, 0.2450)
+ -- (-0.1163, 0.2366)
+ .. controls (-0.0968, 0.3059) and (-0.1262, 0.3371) .. (-0.1239, 0.3982)
+ .. controls (-0.1229, 0.4261) and (-0.1067, 0.4484) .. (-0.0992, 0.4748)
+ --cycle
+ (-0.1503, 0.2450)
+ -- (-0.1588, 0.2536)
+ .. controls (-0.2292, 0.2544) and (-0.2730, 0.2893) .. (-0.2677, 0.2195)
+ -- (-0.2609, 0.1855)
+ .. controls (-0.2393, 0.1890) and (-0.2005, 0.2039) .. (-0.1909, 0.1753)
+ .. controls (-0.1709, 0.1163) and (-0.2582, 0.0953) .. (-0.2387, 0.0533)
+ .. controls (-0.2275, 0.0292) and (-0.1430, 0.0537) .. (-0.1361, 0.0692)
+ .. controls (-0.1250, 0.0859) and (-0.1359, 0.1083) .. (-0.1361, 0.1259)
+ .. controls (-0.1437, 0.1788) and (-0.1186, 0.1766) .. (-0.1503, 0.2450)
+ --cycle
+ ( 0.7348, 0.4408)
+ .. controls ( 0.7113, 0.3774) and ( 0.7569, 0.3513) .. ( 0.7901, 0.3824)
+ -- ( 0.7585, 0.4390)
+ --cycle
+ ( 0.2071, 0.4153)
+ .. controls ( 0.1984, 0.3706) and ( 0.2118, 0.3204) .. ( 0.2582, 0.3046)
+ .. controls ( 0.2685, 0.3631) and ( 0.2706, 0.3931) .. ( 0.2071, 0.4153)
+ --cycle
+ (-0.0567, 0.3982)
+ .. controls (-0.0558, 0.3230) and (-0.0460, 0.3456) .. (-0.0210, 0.2876)
+ -- ( 0.0067, 0.1940)
+ .. controls ( 0.0180, 0.1513) and ( 0.0026, 0.1332) .. ( 0.0454, 0.1089)
+ -- ( 0.0767, 0.1940)
+ -- ( 0.0546, 0.2621)
+ -- ( 0.0406, 0.3185)
+ -- (-0.0258, 0.3896)
+ --cycle
+ (-0.7969, 0.3634)
+ -- (-0.8570, 0.2602)
+ .. controls (-0.8515, 0.2550) and (-0.8469, 0.2514) .. (-0.8414, 0.2450)
+ .. controls (-0.8020, 0.1990) and (-0.8201, 0.1971) .. (-0.7629, 0.1540)
+ .. controls (-0.7462, 0.1414) and (-0.7054, 0.1023) .. (-0.6834, 0.1181)
+ .. controls (-0.6662, 0.1304) and (-0.6813, 0.1625) .. (-0.6882, 0.1768)
+ .. controls (-0.7213, 0.2456) and (-0.7865, 0.2417) .. (-0.8004, 0.2965)
+ .. controls (-0.8052, 0.3154) and (-0.7990, 0.3413) .. (-0.7969, 0.3634)
+ --cycle
+ ( 0.8244, 0.3214)
+ .. controls ( 0.8136, 0.3128) and ( 0.8080, 0.2984) .. ( 0.8114, 0.2706)
+ .. controls ( 0.8314, 0.2739) and ( 0.8424, 0.2735) .. ( 0.8526, 0.2710)
+ --cycle
+ ( 0.5015, 0.3207)
+ .. controls ( 0.4943, 0.3196) and ( 0.4861, 0.3171) .. ( 0.4766, 0.3130)
+ .. controls ( 0.4611, 0.2827) and ( 0.4839, 0.2747) .. ( 0.5028, 0.2521)
+ -- ( 0.5376, 0.1972)
+ .. controls ( 0.5529, 0.1772) and ( 0.5728, 0.1698) .. ( 0.5845, 0.1426)
+ .. controls ( 0.5979, 0.1115) and ( 0.5837, 0.0732) .. ( 0.5987, 0.0532)
+ .. controls ( 0.6095, 0.0384) and ( 0.6236, 0.0428) .. ( 0.6350, 0.0532)
+ .. controls ( 0.6681, 0.0842) and ( 0.6456, 0.1087) .. ( 0.6482, 0.1429)
+ .. controls ( 0.6481, 0.1614) and ( 0.6596, 0.1802) .. ( 0.6482, 0.1967)
+ .. controls ( 0.6390, 0.2131) and ( 0.5992, 0.2239) .. ( 0.5768, 0.2483)
+ .. controls ( 0.5547, 0.2722) and ( 0.5524, 0.3288) .. ( 0.5015, 0.3207)
+ --cycle
+ (-0.5678, 0.3115)
+ .. controls (-0.5832, 0.3118) and (-0.6140, 0.2810) .. (-0.6269, 0.2706)
+ .. controls (-0.6185, 0.2412) and (-0.5926, 0.1953) .. (-0.5973, 0.1685)
+ .. controls (-0.6029, 0.1373) and (-0.6320, 0.1239) .. (-0.6369, 0.0996)
+ .. controls (-0.6406, 0.0816) and (-0.6303, 0.0652) .. (-0.6237, 0.0493)
+ .. controls (-0.6147, 0.0275) and (-0.6000,-0.0443) .. (-0.5641,-0.0258)
+ .. controls (-0.5134,-0.0018) and (-0.5902, 0.0606) .. (-0.5641, 0.1074)
+ .. controls (-0.5332, 0.1697) and (-0.4913, 0.1444) .. (-0.4481, 0.1593)
+ .. controls (-0.3913, 0.1792) and (-0.3439, 0.2446) .. (-0.3545, 0.3046)
+ -- (-0.4568, 0.2201)
+ -- (-0.5588, 0.2201)
+ .. controls (-0.5549, 0.2390) and (-0.5305, 0.3109) .. (-0.5678, 0.3115)
+ --cycle
+ ( 0.2243, 0.2813)
+ -- ( 0.1631, 0.2450)
+ -- ( 0.0965, 0.2281)
+ -- ( 0.1689, 0.1131)
+ -- ( 0.2065, 0.0861)
+ .. controls ( 0.2453, 0.0564) and ( 0.2384, 0.0410) .. ( 0.2923, 0.0323)
+ -- ( 0.2988,-0.0188)
+ .. controls ( 0.2994,-0.0695) and ( 0.2657,-0.0796) .. ( 0.2249,-0.0579)
+ .. controls ( 0.1337,-0.0093) and ( 0.1545, 0.0219) .. ( 0.1102, 0.0744)
+ .. controls ( 0.0914, 0.0967) and ( 0.0807, 0.1010) .. ( 0.0539, 0.1089)
+ .. controls ( 0.0562, 0.0613) and ( 0.0756,-0.0434) .. ( 0.0403,-0.0825)
+ .. controls ( 0.0293,-0.0948) and (-0.0336,-0.1168) .. (-0.0567,-0.1294)
+ .. controls (-0.0615,-0.1087) and (-0.0777,-0.0729) .. (-0.0703,-0.0546)
+ .. controls (-0.0586,-0.0251) and ( 0.0562, 0.0040) .. (-0.0152, 0.0389)
+ -- (-0.0397, 0.0480)
+ -- (-0.0737, 0.0578)
+ .. controls (-0.0806, 0.0391) and (-0.0849, 0.0192) .. (-0.1018, 0.0068)
+ .. controls (-0.1154,-0.0032) and (-0.1352,-0.0018) .. (-0.1438,-0.0212)
+ .. controls (-0.1562,-0.0491) and (-0.1117,-0.1243) .. (-0.0874,-0.1373)
+ .. controls (-0.0745,-0.1434) and (-0.0687,-0.1394) .. (-0.0567,-0.1373)
+ .. controls (-0.0358,-0.2033) and (-0.0062,-0.1612) .. ( 0.0370,-0.1500)
+ -- ( 0.1050,-0.1379)
+ .. controls ( 0.0882,-0.0871) and ( 0.0808,-0.0999) .. ( 0.0965,-0.0443)
+ .. controls ( 0.1454,-0.0619) and ( 0.1336,-0.0743) .. ( 0.1664,-0.0940)
+ .. controls ( 0.1897,-0.1081) and ( 0.2226,-0.1052) .. ( 0.2361,-0.1388)
+ .. controls ( 0.2495,-0.1724) and ( 0.2245,-0.1963) .. ( 0.2412,-0.2584)
+ .. controls ( 0.2526,-0.2569) and ( 0.2622,-0.2548) .. ( 0.2735,-0.2584)
+ .. controls ( 0.2987,-0.2708) and ( 0.3225,-0.3241) .. ( 0.3212,-0.3506)
+ .. controls ( 0.3203,-0.3711) and ( 0.3053,-0.3950) .. ( 0.3008,-0.4443)
+ -- ( 0.2497,-0.4187)
+ .. controls ( 0.2599,-0.4479) and ( 0.2621,-0.4475) .. ( 0.2905,-0.4528)
+ .. controls ( 0.2877,-0.4715) and ( 0.2799,-0.4998) .. ( 0.2905,-0.5182)
+ .. controls ( 0.2991,-0.5392) and ( 0.3228,-0.5357) .. ( 0.3346,-0.5182)
+ .. controls ( 0.3506,-0.4943) and ( 0.3355,-0.4515) .. ( 0.3532,-0.4203)
+ .. controls ( 0.3716,-0.3881) and ( 0.4096,-0.3844) .. ( 0.4084,-0.3499)
+ .. controls ( 0.4074,-0.3241) and ( 0.3866,-0.3087) .. ( 0.3728,-0.2897)
+ -- ( 0.3426,-0.2337)
+ -- ( 0.2989,-0.1879)
+ .. controls ( 0.2810,-0.1587) and ( 0.2976,-0.1327) .. ( 0.3187,-0.1323)
+ .. controls ( 0.3342,-0.1319) and ( 0.3489,-0.1451) .. ( 0.3603,-0.1541)
+ .. controls ( 0.3817,-0.1712) and ( 0.4026,-0.1894) .. ( 0.4144,-0.2146)
+ .. controls ( 0.4299,-0.2477) and ( 0.4289,-0.2977) .. ( 0.4712,-0.3110)
+ .. controls ( 0.4957,-0.3188) and ( 0.5167,-0.3024) .. ( 0.5044,-0.2753)
+ .. controls ( 0.4967,-0.2585) and ( 0.4769,-0.2471) .. ( 0.4676,-0.2227)
+ .. controls ( 0.4582,-0.1981) and ( 0.4681,-0.1743) .. ( 0.4488,-0.1492)
+ .. controls ( 0.4286,-0.1227) and ( 0.3809,-0.1095) .. ( 0.3621,-0.0696)
+ .. controls ( 0.3402,-0.0230) and ( 0.3896, 0.0270) .. ( 0.3092, 0.0408)
+ -- ( 0.3532, 0.1933)
+ -- ( 0.3944, 0.2536)
+ -- ( 0.3433, 0.2765)
+ --cycle
+ ( 0.2497, 0.2450)
+ -- ( 0.2782, 0.2025)
+ .. controls ( 0.2843, 0.1911) and ( 0.2884, 0.1815) .. ( 0.2900, 0.1685)
+ .. controls ( 0.3021, 0.0654) and ( 0.1495, 0.1479) .. ( 0.2135, 0.2245)
+ .. controls ( 0.2246, 0.2378) and ( 0.2346, 0.2396) .. ( 0.2497, 0.2450)
+ --cycle
+ ( 0.8836, 0.2157)
+ .. controls ( 0.8688, 0.2061) and ( 0.8571, 0.1889) .. ( 0.8687, 0.1736)
+ .. controls ( 0.8785, 0.1608) and ( 0.8967, 0.1613) .. ( 0.9161, 0.1578)
+ --cycle
+ (-0.3035, 0.1940)
+ .. controls (-0.3340, 0.1390) and (-0.3508, 0.1491) .. (-0.3624, 0.1300)
+ .. controls (-0.3738, 0.1112) and (-0.3588, 0.0896) .. (-0.3288, 0.0972)
+ .. controls (-0.2842, 0.1084) and (-0.2392, 0.1714) .. (-0.3035, 0.1940)
+ --cycle
+ ( 0.4710, 0.1940)
+ .. controls ( 0.4330, 0.1525) and ( 0.3961, 0.1447) .. ( 0.4114, 0.0833)
+ .. controls ( 0.4294, 0.0897) and ( 0.4596, 0.1056) .. ( 0.4776, 0.0984)
+ .. controls ( 0.5010, 0.0888) and ( 0.5182, 0.0420) .. ( 0.4925, 0.0231)
+ .. controls ( 0.4698, 0.0064) and ( 0.4500, 0.0299) .. ( 0.3944, 0.0153)
+ .. controls ( 0.4243,-0.0189) and ( 0.4618,-0.0333) .. ( 0.4765,-0.0621)
+ .. controls ( 0.4928,-0.0939) and ( 0.4729,-0.1183) .. ( 0.4881,-0.1406)
+ .. controls ( 0.4977,-0.1549) and ( 0.5241,-0.1630) .. ( 0.5425,-0.1894)
+ .. controls ( 0.5557,-0.2085) and ( 0.5562,-0.2282) .. ( 0.5657,-0.2485)
+ -- ( 0.6122,-0.3251)
+ .. controls ( 0.6335,-0.3720) and ( 0.6160,-0.3973) .. ( 0.6323,-0.4443)
+ .. controls ( 0.6532,-0.5042) and ( 0.6754,-0.5231) .. ( 0.6973,-0.5440)
+ -- ( 0.7289,-0.4899)
+ .. controls ( 0.7138,-0.4739) and ( 0.6992,-0.4579) .. ( 0.6886,-0.4358)
+ -- ( 0.6489,-0.2690)
+ .. controls ( 0.6485,-0.2445) and ( 0.6654,-0.2180) .. ( 0.6598,-0.2002)
+ .. controls ( 0.6522,-0.1752) and ( 0.6202,-0.1899) .. ( 0.5938,-0.1612)
+ .. controls ( 0.5619,-0.1263) and ( 0.5907,-0.0980) .. ( 0.5797,-0.0720)
+ .. controls ( 0.5714,-0.0525) and ( 0.5434,-0.0441) .. ( 0.5374,-0.0184)
+ .. controls ( 0.5319, 0.0056) and ( 0.5522, 0.0300) .. ( 0.5533, 0.0578)
+ .. controls ( 0.5548, 0.0943) and ( 0.4981, 0.1701) .. ( 0.4710, 0.1940)
+ --cycle
+ (-0.9001, 0.1862)
+ -- (-0.9386, 0.1201)
+ .. controls (-0.9374, 0.1181) and (-0.9371, 0.1158) .. (-0.9356, 0.1139)
+ .. controls (-0.9242, 0.0996) and (-0.9046, 0.0893) .. (-0.8911, 0.0660)
+ .. controls (-0.8684, 0.0268) and (-0.8960, 0.0297) .. (-0.8592,-0.0296)
+ .. controls (-0.8262,-0.0830) and (-0.8655,-0.1092) .. (-0.7971,-0.1209)
+ -- (-0.7875, 0.0068)
+ -- (-0.8579, 0.1174)
+ --cycle
+ (-0.4453, 0.0979)
+ .. controls (-0.4922, 0.0916) and (-0.4988, 0.0347) .. (-0.4759, 0.0116)
+ .. controls (-0.4491,-0.0149) and (-0.4165, 0.0208) .. (-0.3900, 0.0116)
+ .. controls (-0.3555,-0.0011) and (-0.3800,-0.0410) .. (-0.3751,-0.0698)
+ -- (-0.3537,-0.1294)
+ .. controls (-0.3428,-0.1879) and (-0.4042,-0.1777) .. (-0.3801,-0.2656)
+ .. controls (-0.3617,-0.2531) and (-0.3352,-0.2292) .. (-0.3122,-0.2330)
+ .. controls (-0.2845,-0.2375) and (-0.2669,-0.2694) .. (-0.2543,-0.2911)
+ .. controls (-0.2183,-0.3533) and (-0.2004,-0.3613) .. (-0.2184,-0.4358)
+ .. controls (-0.3300,-0.4097) and (-0.2723,-0.5065) .. (-0.2483,-0.5549)
+ -- (-0.2129,-0.6314)
+ .. controls (-0.2017,-0.6508) and (-0.1900,-0.6661) .. (-0.1670,-0.6712)
+ .. controls (-0.1211,-0.6813) and (-0.1100,-0.6527) .. (-0.1163,-0.6145)
+ .. controls (-0.1327,-0.6119) and (-0.1427,-0.6118) .. (-0.1568,-0.6009)
+ .. controls (-0.1780,-0.5845) and (-0.2123,-0.5041) .. (-0.2042,-0.4783)
+ .. controls (-0.1947,-0.4484) and (-0.1575,-0.4121) .. (-0.1333,-0.3932)
+ -- (-0.1527,-0.3251)
+ -- (-0.1588,-0.2656)
+ .. controls (-0.2187,-0.2715) and (-0.2083,-0.2536) .. (-0.2457,-0.2163)
+ .. controls (-0.2684,-0.1935) and (-0.2911,-0.1886) .. (-0.2996,-0.1546)
+ -- (-0.2996,-0.1209)
+ -- (-0.3232,-0.0698)
+ .. controls (-0.3283,-0.0435) and (-0.3124,-0.0260) .. (-0.3175,-0.0041)
+ .. controls (-0.3251, 0.0283) and (-0.3891, 0.0917) .. (-0.4227, 0.0973)
+ .. controls (-0.4311, 0.0987) and (-0.4386, 0.0989) .. (-0.4453, 0.0979)
+ --cycle
+ (-0.1163,-0.6145)
+ -- (-0.0812,-0.6009)
+ -- (-0.0509,-0.4868)
+ -- (-0.0567,-0.4528)
+ .. controls (-0.1227,-0.4845) and (-0.1350,-0.5483) .. (-0.1163,-0.6145)
+ --cycle
+ ( 0.9165, 0.0573)
+ .. controls ( 0.8982, 0.0512) and ( 0.8800, 0.0260) .. ( 0.8880,-0.0013)
+ .. controls ( 0.8973,-0.0334) and ( 0.9330,-0.0408) .. ( 0.9466,-0.0703)
+ .. controls ( 0.9528,-0.0838) and ( 0.9514,-0.0964) .. ( 0.9506,-0.1091)
+ -- ( 1.0000,-0.0243)
+ .. controls ( 0.9816,-0.0179) and ( 0.9678,-0.0119) .. ( 0.9563, 0.0077)
+ .. controls ( 0.9465, 0.0244) and ( 0.9476, 0.0488) .. ( 0.9340, 0.0564)
+ .. controls ( 0.9288, 0.0593) and ( 0.9227, 0.0593) .. ( 0.9165, 0.0573)
+ --cycle
+ (-0.7064, 0.0069)
+ .. controls (-0.7128, 0.0077) and (-0.7187, 0.0075) .. (-0.7237, 0.0061)
+ .. controls (-0.7255, 0.0030) and (-0.7310, 0.0025) .. (-0.7316,-0.0115)
+ .. controls (-0.7321,-0.0230) and (-0.7071,-0.1058) .. (-0.6984,-0.1096)
+ .. controls (-0.6872,-0.1176) and (-0.6721,-0.1116) .. (-0.6609,-0.1096)
+ .. controls (-0.6502,-0.1046) and (-0.6316,-0.0986) .. (-0.6242,-0.0900)
+ .. controls (-0.5901,-0.0507) and (-0.6615, 0.0017) .. (-0.7064, 0.0069)
+ --cycle
+ (-1.0000, 0.0068)
+ -- (-1.0000, 0.0020)
+ -- (-0.9548,-0.0788)
+ .. controls (-0.9170,-0.0310) and (-0.9342,-0.0158) .. (-1.0000, 0.0068)
+ --cycle
+ (-0.2643, 0.0054)
+ .. controls (-0.2853,-0.0295) and (-0.2523,-0.0713) .. (-0.2182,-0.0843)
+ .. controls (-0.2024,-0.0902) and (-0.1781,-0.0944) .. (-0.1687,-0.0757)
+ .. controls (-0.1530,-0.0441) and (-0.2378, 0.0095) .. (-0.2643, 0.0054)
+ --cycle
+ ( 0.6299,-0.0102)
+ .. controls ( 0.6155,-0.0145) and ( 0.6071,-0.0342) .. ( 0.6128,-0.0510)
+ .. controls ( 0.6198,-0.0721) and ( 0.6440,-0.0790) .. ( 0.6606,-0.0986)
+ .. controls ( 0.6738,-0.1143) and ( 0.6761,-0.1328) .. ( 0.6948,-0.1437)
+ .. controls ( 0.7092,-0.1520) and ( 0.7311,-0.1484) .. ( 0.7401,-0.1664)
+ .. controls ( 0.7461,-0.1784) and ( 0.7351,-0.2363) .. ( 0.7348,-0.2570)
+ .. controls ( 0.7336,-0.3524) and ( 0.7289,-0.3324) .. ( 0.7620,-0.4187)
+ .. controls ( 0.7631,-0.4216) and ( 0.7642,-0.4246) .. ( 0.7652,-0.4275)
+ -- ( 0.8003,-0.3672)
+ .. controls ( 0.7976,-0.3636) and ( 0.7942,-0.3606) .. ( 0.7918,-0.3568)
+ .. controls ( 0.7778,-0.3349) and ( 0.7645,-0.2537) .. ( 0.7970,-0.2417)
+ .. controls ( 0.8206,-0.2330) and ( 0.8347,-0.2671) .. ( 0.8432,-0.2822)
+ -- ( 0.8469,-0.2872)
+ -- ( 0.8787,-0.2326)
+ -- ( 0.8594,-0.1993)
+ .. controls ( 0.8496,-0.1847) and ( 0.7996,-0.1314) .. ( 0.7847,-0.1281)
+ .. controls ( 0.7712,-0.1229) and ( 0.7642,-0.1268) .. ( 0.7518,-0.1281)
+ .. controls ( 0.7451,-0.1148) and ( 0.7397,-0.1014) .. ( 0.7293,-0.0886)
+ -- ( 0.6461,-0.0117)
+ .. controls ( 0.6402,-0.0090) and ( 0.6347,-0.0087) .. ( 0.6299,-0.0102)
+ --cycle
+ (-0.5178,-0.0844)
+ .. controls (-0.5451,-0.0820) and (-0.5852,-0.0947) .. (-0.5902,-0.1144)
+ .. controls (-0.6007,-0.1557) and (-0.5621,-0.1731) .. (-0.5414,-0.1997)
+ .. controls (-0.5274,-0.2177) and (-0.5229,-0.2355) .. (-0.5044,-0.2525)
+ .. controls (-0.4888,-0.2669) and (-0.4706,-0.2705) .. (-0.4543,-0.2923)
+ .. controls (-0.4420,-0.3087) and (-0.4220,-0.3707) .. (-0.4141,-0.3932)
+ .. controls (-0.3620,-0.3875) and (-0.3060,-0.4031) .. (-0.3060,-0.3592)
+ .. controls (-0.3060,-0.3272) and (-0.3358,-0.3272) .. (-0.3716,-0.3008)
+ .. controls (-0.4367,-0.2529) and (-0.4253,-0.2451) .. (-0.4621,-0.1914)
+ .. controls (-0.4700,-0.1800) and (-0.4814,-0.1685) .. (-0.4867,-0.1556)
+ .. controls (-0.4970,-0.1308) and (-0.4804,-0.1088) .. (-0.4966,-0.0923)
+ .. controls (-0.5011,-0.0877) and (-0.5087,-0.0853) .. (-0.5178,-0.0844)
+ --cycle
+ (-0.4165,-0.0846)
+ .. controls (-0.4357,-0.0807) and (-0.4622,-0.1075) .. (-0.4395,-0.1440)
+ .. controls (-0.4316,-0.1566) and (-0.4254,-0.1571) .. (-0.4141,-0.1634)
+ .. controls (-0.4094,-0.1522) and (-0.4042,-0.1415) .. (-0.4019,-0.1294)
+ .. controls (-0.3960,-0.1004) and (-0.4049,-0.0870) .. (-0.4165,-0.0846)
+ --cycle
+ (-0.9358,-0.1125)
+ -- (-0.8813,-0.2098)
+ .. controls (-0.8768,-0.1903) and (-0.8656,-0.1673) .. (-0.8723,-0.1485)
+ .. controls (-0.8801,-0.1269) and (-0.9022,-0.1274) .. (-0.9358,-0.1125)
+ --cycle
+ ( 0.1455,-0.1458)
+ .. controls ( 0.1402,-0.1449) and ( 0.1336,-0.1452) .. ( 0.1255,-0.1471)
+ .. controls ( 0.0901,-0.1850) and ( 0.1064,-0.2454) .. ( 0.1360,-0.2301)
+ .. controls ( 0.1569,-0.2194) and ( 0.1827,-0.1522) .. ( 0.1455,-0.1458)
+ --cycle
+ (-0.1477,-0.1474)
+ .. controls (-0.1646,-0.1458) and (-0.1813,-0.1543) .. (-0.1847,-0.1659)
+ .. controls (-0.1889,-0.1806) and (-0.1612,-0.2953) .. (-0.1163,-0.2315)
+ -- (-0.0420,-0.4418)
+ .. controls (-0.0291,-0.4661) and (-0.0068,-0.4600) .. ( 0.0136,-0.4880)
+ .. controls ( 0.0294,-0.5097) and ( 0.0259,-0.5331) .. ( 0.0419,-0.5487)
+ .. controls ( 0.0694,-0.5755) and ( 0.1462,-0.5710) .. ( 0.1798,-0.6001)
+ -- ( 0.2188,-0.6436)
+ .. controls ( 0.2392,-0.6605) and ( 0.2566,-0.6577) .. ( 0.2804,-0.6838)
+ .. controls ( 0.3122,-0.7186) and ( 0.3037,-0.7586) .. ( 0.3603,-0.7592)
+ .. controls ( 0.3537,-0.7217) and ( 0.3358,-0.6781) .. ( 0.3603,-0.6427)
+ .. controls ( 0.3743,-0.6222) and ( 0.3978,-0.6232) .. ( 0.4032,-0.6039)
+ .. controls ( 0.4084,-0.5852) and ( 0.3901,-0.5654) .. ( 0.3712,-0.5741)
+ .. controls ( 0.3573,-0.5804) and ( 0.3558,-0.5936) .. ( 0.3518,-0.6044)
+ .. controls ( 0.3319,-0.6046) and ( 0.2996,-0.6092) .. ( 0.2842,-0.6044)
+ .. controls ( 0.2568,-0.5917) and ( 0.2515,-0.5648) .. ( 0.2231,-0.5501)
+ .. controls ( 0.1960,-0.5359) and ( 0.1632,-0.5421) .. ( 0.1413,-0.5292)
+ -- ( 0.0626,-0.4601)
+ .. controls ( 0.0525,-0.4430) and ( 0.0547,-0.4207) .. ( 0.0440,-0.4065)
+ .. controls ( 0.0320,-0.3906) and ( 0.0076,-0.3898) .. (-0.0104,-0.3714)
+ .. controls (-0.0515,-0.3289) and ( 0.0146,-0.2721) .. (-0.0737,-0.2358)
+ .. controls (-0.0903,-0.2290) and (-0.0917,-0.2313) .. (-0.1098,-0.2315)
+ -- (-0.1098,-0.1892)
+ .. controls (-0.1137,-0.1607) and (-0.1308,-0.1491) .. (-0.1477,-0.1474)
+ --cycle
+ (-0.7679,-0.1481)
+ .. controls (-0.8119,-0.1523) and (-0.8157,-0.2051) .. (-0.8303,-0.2401)
+ -- (-0.8453,-0.2740)
+ -- (-0.8299,-0.3015)
+ .. controls (-0.7861,-0.2968) and (-0.8116,-0.2403) .. (-0.7732,-0.2278)
+ .. controls (-0.7561,-0.2223) and (-0.7349,-0.2415) .. (-0.7204,-0.2497)
+ .. controls (-0.6711,-0.2774) and (-0.6473,-0.2864) .. (-0.6524,-0.3506)
+ -- (-0.6787,-0.3422)
+ .. controls (-0.6786,-0.3475) and (-0.6826,-0.3544) .. (-0.6787,-0.3655)
+ .. controls (-0.6635,-0.4244) and (-0.5943,-0.3658) .. (-0.5763,-0.3760)
+ .. controls (-0.5586,-0.3861) and (-0.5497,-0.4251) .. (-0.5357,-0.4418)
+ .. controls (-0.5118,-0.4701) and (-0.4694,-0.4662) .. (-0.4504,-0.5047)
+ .. controls (-0.4231,-0.5599) and (-0.4535,-0.6772) .. (-0.4451,-0.7421)
+ .. controls (-0.4389,-0.7901) and (-0.4023,-0.8005) .. (-0.3912,-0.8443)
+ .. controls (-0.3883,-0.8558) and (-0.3874,-0.8667) .. (-0.3869,-0.8774)
+ -- (-0.3386,-0.8778)
+ .. controls (-0.3371,-0.8645) and (-0.3342,-0.8523) .. (-0.3394,-0.8358)
+ .. controls (-0.3448,-0.8167) and (-0.3914,-0.7567) .. (-0.3962,-0.6996)
+ .. controls (-0.4039,-0.6074) and (-0.3294,-0.5871) .. (-0.3545,-0.4954)
+ -- (-0.3886,-0.5039)
+ -- (-0.4196,-0.4442)
+ -- (-0.4864,-0.4090)
+ -- (-0.5345,-0.3241)
+ -- (-0.6106,-0.2802)
+ -- (-0.6106,-0.1975)
+ .. controls (-0.6301,-0.2027) and (-0.6486,-0.2101) .. (-0.6694,-0.2022)
+ .. controls (-0.7004,-0.1904) and (-0.7133,-0.1559) .. (-0.7464,-0.1495)
+ .. controls (-0.7544,-0.1479) and (-0.7616,-0.1475) .. (-0.7679,-0.1481)
+ --cycle
+ ( 0.0029,-0.2060)
+ .. controls (-0.0139,-0.2731) and ( 0.0196,-0.2608) .. ( 0.0476,-0.3014)
+ .. controls ( 0.0682,-0.3314) and ( 0.0511,-0.3569) .. ( 0.0750,-0.3784)
+ .. controls ( 0.0974,-0.3988) and ( 0.1304,-0.3876) .. ( 0.1549,-0.4019)
+ .. controls ( 0.1795,-0.4164) and ( 0.1878,-0.4529) .. ( 0.1987,-0.4783)
+ .. controls ( 0.2461,-0.4539) and ( 0.2519,-0.4021) .. ( 0.2180,-0.3618)
+ .. controls ( 0.1964,-0.3362) and ( 0.1652,-0.3426) .. ( 0.1414,-0.3257)
+ .. controls ( 0.1198,-0.3103) and ( 0.1183,-0.2881) .. ( 0.1007,-0.2689)
+ .. controls ( 0.0838,-0.2504) and ( 0.0265,-0.2166) .. ( 0.0029,-0.2060)
+ --cycle
+ ( 0.2327,-0.2826)
+ .. controls ( 0.1961,-0.2955) and ( 0.1961,-0.3123) .. ( 0.2327,-0.3251)
+ --cycle
+ (-0.7548,-0.3137)
+ .. controls (-0.7774,-0.3164) and (-0.7890,-0.3323) .. (-0.7986,-0.3573)
+ -- (-0.7759,-0.3979)
+ .. controls (-0.7735,-0.3968) and (-0.7711,-0.3964) .. (-0.7688,-0.3946)
+ -- (-0.7205,-0.3166)
+ .. controls (-0.7341,-0.3135) and (-0.7454,-0.3126) .. (-0.7548,-0.3137)
+ --cycle
+ ( 0.4114,-0.3847)
+ .. controls ( 0.4216,-0.4136) and ( 0.4238,-0.4142) .. ( 0.4540,-0.4102)
+ -- ( 0.4540,-0.3932)
+ --cycle
+ ( 0.5395,-0.3997)
+ .. controls ( 0.5263,-0.3990) and ( 0.5044,-0.4032) .. ( 0.4625,-0.4018)
+ -- ( 0.4780,-0.4954)
+ .. controls ( 0.4757,-0.5287) and ( 0.4518,-0.5542) .. ( 0.4648,-0.5776)
+ .. controls ( 0.4852,-0.6142) and ( 0.5202,-0.5603) .. ( 0.5614,-0.5929)
+ .. controls ( 0.5752,-0.6038) and ( 0.6063,-0.6359) .. ( 0.6275,-0.6638)
+ -- ( 0.6570,-0.6132)
+ .. controls ( 0.6460,-0.6042) and ( 0.6347,-0.5954) .. ( 0.6268,-0.5865)
+ -- ( 0.5937,-0.5346)
+ .. controls ( 0.5648,-0.5023) and ( 0.5031,-0.4880) .. ( 0.5646,-0.4273)
+ .. controls ( 0.5574,-0.4062) and ( 0.5528,-0.4005) .. ( 0.5395,-0.3997)
+ --cycle
+ (-0.6609,-0.4273)
+ .. controls (-0.7027,-0.4247) and (-0.7300,-0.4414) .. (-0.7397,-0.4624)
+ -- (-0.7047,-0.5249)
+ .. controls (-0.7013,-0.5263) and (-0.6989,-0.5282) .. (-0.6950,-0.5294)
+ .. controls (-0.6935,-0.4878) and (-0.6933,-0.4806) .. (-0.6609,-0.4528)
+ --cycle
+ (-0.5689,-0.4528)
+ .. controls (-0.6368,-0.4677) and (-0.6352,-0.5020) .. (-0.6354,-0.5634)
+ -- (-0.5757,-0.6071)
+ -- (-0.5162,-0.6826)
+ .. controls (-0.5073,-0.6508) and (-0.5037,-0.6125) .. (-0.5241,-0.5838)
+ .. controls (-0.5384,-0.5639) and (-0.5622,-0.5584) .. (-0.5689,-0.5361)
+ .. controls (-0.5775,-0.5167) and (-0.5648,-0.4918) .. (-0.5689,-0.4528)
+ --cycle
+ (-0.6354,-0.5634)
+ .. controls (-0.6583,-0.5576) and (-0.6713,-0.5579) .. (-0.6839,-0.5619)
+ -- (-0.6487,-0.6248)
+ .. controls (-0.6395,-0.6053) and (-0.6326,-0.5852) .. (-0.6354,-0.5634)
+ --cycle
+ (-0.0056,-0.5890)
+ .. controls (-0.0554,-0.6155) and (-0.0426,-0.6370) .. (-0.0606,-0.6818)
+ -- (-0.1199,-0.7847)
+ .. controls (-0.1298,-0.8015) and (-0.1531,-0.8317) .. (-0.1499,-0.8510)
+ .. controls (-0.1482,-0.8615) and (-0.1397,-0.8702) .. (-0.1295,-0.8795)
+ -- (-0.0507,-0.8802)
+ .. controls (-0.0629,-0.8583) and (-0.0745,-0.8380) .. (-0.0742,-0.8358)
+ .. controls (-0.0792,-0.8239) and (-0.0776,-0.8135) .. (-0.0742,-0.8027)
+ .. controls (-0.0460,-0.7520) and ( 0.0016,-0.7834) .. ( 0.0277,-0.7780)
+ .. controls ( 0.0760,-0.7679) and ( 0.1284,-0.6914) .. ( 0.1207,-0.6405)
+ .. controls ( 0.1150,-0.6017) and ( 0.0841,-0.6082) .. ( 0.0711,-0.6267)
+ .. controls ( 0.0620,-0.6397) and ( 0.0556,-0.7141) .. ( 0.0539,-0.7336)
+ .. controls (-0.0413,-0.7085) and ( 0.0139,-0.6637) .. (-0.0056,-0.5890)
+ --cycle
+ ( 0.4284,-0.6571)
+ .. controls ( 0.4285,-0.7307) and ( 0.4284,-0.7652) .. ( 0.5135,-0.7336)
+ .. controls ( 0.5170,-0.7469) and ( 0.5220,-0.7585) .. ( 0.5179,-0.7726)
+ .. controls ( 0.5091,-0.8019) and ( 0.4473,-0.8546) .. ( 0.4851,-0.8847)
+ -- ( 0.4987,-0.8848)
+ -- ( 0.5768,-0.7509)
+ .. controls ( 0.5767,-0.7509) and ( 0.5767,-0.7507) .. ( 0.5767,-0.7507)
+ .. controls ( 0.5412,-0.6652) and ( 0.5083,-0.6726) .. ( 0.4284,-0.6571)
+ --cycle
+ (-0.2914,-0.6672)
+ .. controls (-0.2998,-0.6666) and (-0.3106,-0.6686) .. (-0.3250,-0.6743)
+ .. controls (-0.3545,-0.7128) and (-0.3081,-0.7358) .. (-0.2850,-0.7678)
+ .. controls (-0.2710,-0.7873) and (-0.2601,-0.8137) .. (-0.2351,-0.8216)
+ .. controls (-0.2083,-0.8301) and (-0.1916,-0.8105) .. (-0.1960,-0.7845)
+ .. controls (-0.2008,-0.7566) and (-0.2232,-0.7418) .. (-0.2396,-0.7216)
+ .. controls (-0.2612,-0.6950) and (-0.2660,-0.6690) .. (-0.2914,-0.6672)
+ --cycle
+ (-0.5641,-0.6998)
+ .. controls (-0.5850,-0.6984) and (-0.5808,-0.7367) .. (-0.5766,-0.7507)
+ .. controls (-0.5748,-0.7566) and (-0.5723,-0.7598) .. (-0.5702,-0.7648)
+ -- (-0.5492,-0.8022)
+ .. controls (-0.5310,-0.8247) and (-0.5120,-0.8367) .. (-0.5052,-0.8613)
+ .. controls (-0.5044,-0.8642) and (-0.5062,-0.8717) .. (-0.5063,-0.8763)
+ -- (-0.4585,-0.8767)
+ .. controls (-0.4596,-0.7984) and (-0.5013,-0.7963) .. (-0.5234,-0.7583)
+ .. controls (-0.5344,-0.7394) and (-0.5352,-0.7120) .. (-0.5535,-0.7030)
+ .. controls (-0.5576,-0.7010) and (-0.5611,-0.7000) .. (-0.5641,-0.6998)
+ --cycle
+ ( 0.1990,-0.7341)
+ .. controls ( 0.1094,-0.7768) and ( 0.2330,-0.8330) .. ( 0.2586,-0.8828)
+ -- ( 0.3183,-0.8833)
+ .. controls ( 0.3165,-0.8684) and ( 0.3066,-0.8565) .. ( 0.2991,-0.8428)
+ .. controls ( 0.2762,-0.8010) and ( 0.2508,-0.7418) .. ( 0.1990,-0.7341)
+ --cycle
+ ( 0.3603,-0.7592)
+ -- ( 0.3859,-0.8188)
+ .. controls ( 0.4178,-0.7853) and ( 0.4108,-0.7527) .. ( 0.3603,-0.7592)
+ --cycle
+ ( 0.4369,-0.8443)
+ .. controls ( 0.4147,-0.8480) and ( 0.3837,-0.8661) .. ( 0.3628,-0.8837)
+ -- ( 0.4240,-0.8842)
+ .. controls ( 0.4307,-0.8690) and ( 0.4358,-0.8541) .. ( 0.4369,-0.8443)
+ --cycle
+ (-0.3205,-0.8528)
+ -- (-0.3266,-0.8779)
+ -- (-0.2773,-0.8783)
+ .. controls (-0.2800,-0.8719) and (-0.2850,-0.8655) .. (-0.2963,-0.8600)
+ --cycle
+ ( 0.1093,-0.8568)
+ .. controls ( 0.0964,-0.8568) and ( 0.0834,-0.8587) .. ( 0.0710,-0.8600)
+ .. controls ( 0.0605,-0.8611) and ( 0.0403,-0.8617) .. ( 0.0312,-0.8664)
+ .. controls ( 0.0240,-0.8701) and ( 0.0203,-0.8751) .. ( 0.0184,-0.8808)
+ -- ( 0.1002,-0.8815)
+ -- ( 0.1050,-0.8698)
+ -- ( 0.1085,-0.8815)
+ -- ( 0.1641,-0.8820)
+ .. controls ( 0.1606,-0.8757) and ( 0.1553,-0.8698) .. ( 0.1463,-0.8649)
+ .. controls ( 0.1347,-0.8586) and ( 0.1221,-0.8568) .. ( 0.1093,-0.8568)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/city.dtx b/macros/latex/contrib/wargame/source/hex/terrain/city.dtx
new file mode 100644
index 0000000000..1d373ea19d
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/city.dtx
@@ -0,0 +1,5138 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/city}
+% And finally a city
+%
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/city/.pic={
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.6475, 0.4068)
+ -- ( 0.7314,-0.0575)
+ -- ( 0.7314,-0.0575)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.3200,-0.0497)
+ -- ( 0.7360,-0.0572)
+ -- ( 0.9222,-0.0903)
+ -- ( 0.7082,-0.4210)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.3828, 0.1855)
+ -- ( 0.0279, 0.1945)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0433, 0.3473)
+ -- ( 0.0217, 0.1444)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.1413, 0.1884)
+ -- ( 0.3369,-0.0066)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.1278, 0.7257)
+ -- (-0.2203, 0.4496)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.1602, 0.6526)
+ -- ( 0.0382, 0.6110)
+ -- (-0.1527, 0.6534)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.1688, 0.6051)
+ -- (-0.4768, 0.7222)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.3602,-0.4159)
+ .. controls ( 0.4139,-0.2355) and ( 0.4139,-0.2352) .. ( 0.4139,-0.2352)
+ -- ( 0.4838,-0.2184)
+ -- ( 0.5251,-0.0570)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.5443,-0.6880)
+ -- ( 0.5887,-0.5618)
+ -- ( 0.4781,-0.4650)
+ -- ( 0.4781,-0.4650)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0671,-0.6564)
+ -- ( 0.2799,-0.7025)
+ -- ( 0.4360,-0.4711)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.2023,-0.8374)
+ -- ( 0.2231,-0.6909)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0433,-0.3639)
+ -- (-0.0931,-0.5036)
+ -- (-0.3798,-0.4049)
+ -- (-0.4436,-0.4630)
+ -- (-0.5468,-0.5027)
+ -- (-0.6442,-0.3540)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.3296,-0.7486)
+ -- (-0.3153,-0.6107)
+ -- (-0.4388,-0.4598)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.3247,-0.6883)
+ -- (-0.0201,-0.7169)
+ -- ( 0.0501,-0.7042)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0616,-0.6541)
+ -- (-0.0427,-0.6505)
+ -- (-0.0229,-0.5387)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0040,-0.2086)
+ -- (-0.1956,-0.1835)
+ -- (-0.2290,-0.2265)
+ -- (-0.5068,-0.1372)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.3396, 0.0437)
+ -- (-0.2201, 0.4506)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.0066, 0.8705)
+ -- ( 0.3952, 0.3367)
+ -- ( 0.3885, 0.2021)
+ -- ( 0.3555, 0.1368)
+ -- ( 0.3751, 0.0869)
+ -- ( 0.2511,-0.2014)
+ -- ( 0.1393,-0.4528)
+ -- ( 0.0636,-0.6538)
+ -- ( 0.0063,-0.8731)
+ -- ( 0.0063,-0.8731)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.1775, 0.6355)
+ -- ( 0.4288, 0.7459)
+ -- ( 0.5543, 0.5148)
+ -- ( 0.5543, 0.5148)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.7584, 0.4363)
+ -- ( 0.3946, 0.3369)
+ -- ( 0.3946, 0.3369)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.1428,-0.4540)
+ -- (-0.0329,-0.2925)
+ -- ( 0.0739,-0.0364)
+ -- ( 0.1645,-0.0483)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.0723,-0.0367)
+ -- (-0.5150, 0.0791)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.1911,-0.0821)
+ -- (-0.0760, 0.3934)
+ -- (-0.0774, 0.3920)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.0439, 0.3452)
+ -- (-0.3449, 0.4978)
+ -- (-0.4614, 0.2954)
+ -- (-0.4614, 0.2954)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.4152, 0.2683)
+ -- (-0.7626, 0.4390)
+ -- (-0.7626, 0.4390)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.5846, 0.3486)
+ -- (-0.8106,-0.1286)
+ -- (-0.7727,-0.2079)
+ -- (-0.7053,-0.1745)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.7161,-0.1542)
+ -- (-0.6166,-0.3381)
+ -- (-0.7630,-0.4349)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.6697,-0.2422)
+ -- (-0.4615,-0.1081)
+ -- (-0.4615,-0.1081)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.2080,-0.3022)
+ -- ( 0.4581,-0.4878)
+ -- ( 0.5919,-0.3695)
+ -- ( 0.7615,-0.4441)
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1146, 0.0405)
+ -- ( 0.1598, 0.0323)
+ -- ( 0.1489,-0.0277)
+ -- ( 0.1036,-0.0196)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1146, 0.0405)
+ -- ( 0.1598, 0.0323)
+ -- ( 0.1489,-0.0277)
+ -- ( 0.1036,-0.0196)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0844, 0.4998)
+ -- (-0.0599, 0.4835)
+ -- (-0.0898, 0.4389)
+ -- (-0.1141, 0.4551)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0844, 0.4998)
+ -- (-0.0599, 0.4835)
+ -- (-0.0898, 0.4389)
+ -- (-0.1141, 0.4551)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6143,-0.0454)
+ -- (-0.6005,-0.0196)
+ -- (-0.5531,-0.0447)
+ -- (-0.5668,-0.0707)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6143,-0.0454)
+ -- (-0.6005,-0.0196)
+ -- (-0.5531,-0.0447)
+ -- (-0.5668,-0.0707)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3809,-0.0792)
+ -- (-0.3371,-0.0929)
+ -- (-0.3553,-0.1511)
+ -- (-0.3991,-0.1375)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3809,-0.0792)
+ -- (-0.3371,-0.0929)
+ -- (-0.3553,-0.1511)
+ -- (-0.3991,-0.1375)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5133, 0.1838)
+ -- (-0.4733, 0.1613)
+ -- (-0.5032, 0.1081)
+ -- (-0.5433, 0.1307)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5133, 0.1838)
+ -- (-0.4733, 0.1613)
+ -- (-0.5032, 0.1081)
+ -- (-0.5433, 0.1307)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3878, 0.1398)
+ -- (-0.3421, 0.1442)
+ -- (-0.3362, 0.0834)
+ -- (-0.3819, 0.0790)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3878, 0.1398)
+ -- (-0.3421, 0.1442)
+ -- (-0.3362, 0.0834)
+ -- (-0.3819, 0.0790)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5622, 0.0806)
+ -- (-0.5234, 0.0560)
+ -- (-0.5559, 0.0044)
+ -- (-0.5948, 0.0290)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5622, 0.0806)
+ -- (-0.5234, 0.0560)
+ -- (-0.5559, 0.0044)
+ -- (-0.5948, 0.0290)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6218, 0.1903)
+ -- (-0.6097, 0.2346)
+ -- (-0.5508, 0.2185)
+ -- (-0.5629, 0.1742)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6218, 0.1903)
+ -- (-0.6097, 0.2346)
+ -- (-0.5508, 0.2185)
+ -- (-0.5629, 0.1742)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2884, 0.7423)
+ -- (-0.2596, 0.7372)
+ -- (-0.2691, 0.6843)
+ -- (-0.2980, 0.6895)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2884, 0.7423)
+ -- (-0.2596, 0.7372)
+ -- (-0.2691, 0.6843)
+ -- (-0.2980, 0.6895)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1219, 0.8731)
+ -- ( 0.1475, 0.8350)
+ -- ( 0.0970, 0.8008)
+ -- ( 0.0712, 0.8389)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1219, 0.8731)
+ -- ( 0.1475, 0.8350)
+ -- ( 0.0970, 0.8008)
+ -- ( 0.0712, 0.8389)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3659, 0.5557)
+ -- ( 0.3913, 0.5175)
+ -- ( 0.3405, 0.4837)
+ -- ( 0.3150, 0.5219)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3659, 0.5557)
+ -- ( 0.3913, 0.5175)
+ -- ( 0.3405, 0.4837)
+ -- ( 0.3150, 0.5219)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0626, 0.4298)
+ -- ( 0.0896, 0.4184)
+ -- ( 0.0686, 0.3690)
+ -- ( 0.0416, 0.3804)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0626, 0.4298)
+ -- ( 0.0896, 0.4184)
+ -- ( 0.0686, 0.3690)
+ -- ( 0.0416, 0.3804)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4510,-0.3094)
+ -- (-0.4058,-0.2887)
+ -- (-0.3725,-0.3614)
+ -- (-0.4176,-0.3821)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4510,-0.3094)
+ -- (-0.4058,-0.2887)
+ -- (-0.3725,-0.3614)
+ -- (-0.4176,-0.3821)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5282,-0.1080)
+ -- (-0.5533,-0.0695)
+ -- (-0.5021,-0.0363)
+ -- (-0.4770,-0.0749)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5282,-0.1080)
+ -- (-0.5533,-0.0695)
+ -- (-0.5021,-0.0363)
+ -- (-0.4770,-0.0749)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0108,-0.2602)
+ -- ( 0.0173,-0.2316)
+ -- ( 0.0696,-0.2435)
+ -- ( 0.0632,-0.2721)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0108,-0.2602)
+ -- ( 0.0173,-0.2316)
+ -- ( 0.0696,-0.2435)
+ -- ( 0.0632,-0.2721)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1989, 0.1654)
+ -- (-0.1544, 0.1540)
+ -- (-0.1696, 0.0948)
+ -- (-0.2141, 0.1063)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1989, 0.1654)
+ -- (-0.1544, 0.1540)
+ -- (-0.1696, 0.0948)
+ -- (-0.2141, 0.1063)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0216,-0.0407)
+ -- ( 0.0230,-0.0521)
+ -- ( 0.0078,-0.1112)
+ -- (-0.0368,-0.0997)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0216,-0.0407)
+ -- ( 0.0230,-0.0521)
+ -- ( 0.0078,-0.1112)
+ -- (-0.0368,-0.0997)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1936, 0.5180)
+ -- ( 0.2045, 0.4909)
+ -- ( 0.1547, 0.4709)
+ -- ( 0.1437, 0.4981)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1936, 0.5180)
+ -- ( 0.2045, 0.4909)
+ -- ( 0.1547, 0.4709)
+ -- ( 0.1437, 0.4981)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1903, 0.4858)
+ -- (-0.1678, 0.5258)
+ -- (-0.1146, 0.4960)
+ -- (-0.1371, 0.4559)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1903, 0.4858)
+ -- (-0.1678, 0.5258)
+ -- (-0.1146, 0.4960)
+ -- (-0.1371, 0.4559)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1470, 0.3493)
+ -- ( 0.1689, 0.3567)
+ -- ( 0.1775, 0.3315)
+ -- ( 0.1555, 0.3241)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1470, 0.3493)
+ -- ( 0.1689, 0.3567)
+ -- ( 0.1775, 0.3315)
+ -- ( 0.1555, 0.3241)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1892, 0.2562)
+ -- ( 0.2118, 0.2510)
+ -- ( 0.2058, 0.2251)
+ -- ( 0.1833, 0.2303)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1892, 0.2562)
+ -- ( 0.2118, 0.2510)
+ -- ( 0.2058, 0.2251)
+ -- ( 0.1833, 0.2303)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8016, 0.0292)
+ -- ( 0.8235, 0.0367)
+ -- ( 0.8321, 0.0116)
+ -- ( 0.8103, 0.0040)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8016, 0.0292)
+ -- ( 0.8235, 0.0367)
+ -- ( 0.8321, 0.0116)
+ -- ( 0.8103, 0.0040)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7392, 0.1737)
+ -- ( 0.7609, 0.1816)
+ -- ( 0.7702, 0.1568)
+ -- ( 0.7485, 0.1487)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7392, 0.1737)
+ -- ( 0.7609, 0.1816)
+ -- ( 0.7702, 0.1568)
+ -- ( 0.7485, 0.1487)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3736, 0.7805)
+ -- ( 0.3937, 0.7921)
+ -- ( 0.4071, 0.7691)
+ -- ( 0.3870, 0.7575)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3736, 0.7805)
+ -- ( 0.3937, 0.7921)
+ -- ( 0.4071, 0.7691)
+ -- ( 0.3870, 0.7575)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4808,-0.6251)
+ -- (-0.4706,-0.6459)
+ -- (-0.4946,-0.6576)
+ -- (-0.5047,-0.6368)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4808,-0.6251)
+ -- (-0.4706,-0.6459)
+ -- (-0.4946,-0.6576)
+ -- (-0.5047,-0.6368)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4514,-0.6075)
+ -- (-0.4393,-0.6272)
+ -- (-0.4620,-0.6412)
+ -- (-0.4740,-0.6215)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4514,-0.6075)
+ -- (-0.4393,-0.6272)
+ -- (-0.4620,-0.6412)
+ -- (-0.4740,-0.6215)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2390,-0.7174)
+ -- (-0.2175,-0.7260)
+ -- (-0.2273,-0.7508)
+ -- (-0.2489,-0.7421)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2390,-0.7174)
+ -- (-0.2175,-0.7260)
+ -- (-0.2273,-0.7508)
+ -- (-0.2489,-0.7421)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2386,-0.5506)
+ -- (-0.2108,-0.5598)
+ -- (-0.2277,-0.6108)
+ -- (-0.2555,-0.6015)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2386,-0.5506)
+ -- (-0.2108,-0.5598)
+ -- (-0.2277,-0.6108)
+ -- (-0.2555,-0.6015)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3574, 0.2226)
+ -- (-0.3530, 0.2515)
+ -- (-0.2999, 0.2435)
+ -- (-0.3043, 0.2145)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3574, 0.2226)
+ -- (-0.3530, 0.2515)
+ -- (-0.2999, 0.2435)
+ -- (-0.3043, 0.2145)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3315, 0.3242)
+ -- (-0.3271, 0.3532)
+ -- (-0.2740, 0.3451)
+ -- (-0.2783, 0.3162)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3315, 0.3242)
+ -- (-0.3271, 0.3532)
+ -- (-0.2740, 0.3451)
+ -- (-0.2783, 0.3162)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2256, 0.4895)
+ -- ( 0.2451, 0.4676)
+ -- ( 0.2049, 0.4320)
+ -- ( 0.1854, 0.4539)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2256, 0.4895)
+ -- ( 0.2451, 0.4676)
+ -- ( 0.2049, 0.4320)
+ -- ( 0.1854, 0.4539)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1717, 0.5777)
+ -- ( 0.1903, 0.5551)
+ -- ( 0.1488, 0.5210)
+ -- ( 0.1302, 0.5436)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1717, 0.5777)
+ -- ( 0.1903, 0.5551)
+ -- ( 0.1488, 0.5210)
+ -- ( 0.1302, 0.5436)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0995, 0.2545)
+ -- (-0.0891, 0.2819)
+ -- (-0.0389, 0.2629)
+ -- (-0.0492, 0.2355)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0995, 0.2545)
+ -- (-0.0891, 0.2819)
+ -- (-0.0389, 0.2629)
+ -- (-0.0492, 0.2355)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0828, 0.2371)
+ -- ( 0.0883, 0.2659)
+ -- ( 0.1411, 0.2559)
+ -- ( 0.1357, 0.2271)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0828, 0.2371)
+ -- ( 0.0883, 0.2659)
+ -- ( 0.1411, 0.2559)
+ -- ( 0.1357, 0.2271)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1049, 0.1819)
+ -- (-0.0945, 0.2094)
+ -- (-0.0443, 0.1904)
+ -- (-0.0546, 0.1629)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1049, 0.1819)
+ -- (-0.0945, 0.2094)
+ -- (-0.0443, 0.1904)
+ -- (-0.0546, 0.1629)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0889,-0.0631)
+ -- (-0.0785,-0.0357)
+ -- (-0.0283,-0.0549)
+ -- (-0.0388,-0.0823)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0889,-0.0631)
+ -- (-0.0785,-0.0357)
+ -- (-0.0283,-0.0549)
+ -- (-0.0388,-0.0823)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2282,-0.7907)
+ -- (-0.1823,-0.7907)
+ -- (-0.1823,-0.8518)
+ -- (-0.2282,-0.8518)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2282,-0.7907)
+ -- (-0.1823,-0.7907)
+ -- (-0.1823,-0.8518)
+ -- (-0.2282,-0.8518)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2275,-0.7989)
+ -- ( 0.2734,-0.7989)
+ -- ( 0.2734,-0.8599)
+ -- ( 0.2275,-0.8599)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2275,-0.7989)
+ -- ( 0.2734,-0.7989)
+ -- ( 0.2734,-0.8599)
+ -- ( 0.2275,-0.8599)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2516,-0.7126)
+ -- ( 0.2808,-0.7126)
+ -- ( 0.2808,-0.7663)
+ -- ( 0.2516,-0.7663)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2516,-0.7126)
+ -- ( 0.2808,-0.7126)
+ -- ( 0.2808,-0.7663)
+ -- ( 0.2516,-0.7663)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1669,-0.7129)
+ -- ( 0.1954,-0.7199)
+ -- ( 0.1826,-0.7721)
+ -- ( 0.1542,-0.7650)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1669,-0.7129)
+ -- ( 0.1954,-0.7199)
+ -- ( 0.1826,-0.7721)
+ -- ( 0.1542,-0.7650)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1222,-0.7854)
+ -- ( 0.1514,-0.7854)
+ -- ( 0.1514,-0.8390)
+ -- ( 0.1222,-0.8390)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1222,-0.7854)
+ -- ( 0.1514,-0.7854)
+ -- ( 0.1514,-0.8390)
+ -- ( 0.1222,-0.8390)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3031,-0.7156)
+ -- ( 0.3325,-0.7156)
+ -- ( 0.3325,-0.7693)
+ -- ( 0.3031,-0.7693)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3031,-0.7156)
+ -- ( 0.3325,-0.7156)
+ -- ( 0.3325,-0.7693)
+ -- ( 0.3031,-0.7693)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3574,-0.7174)
+ -- ( 0.3867,-0.7174)
+ -- ( 0.3867,-0.7712)
+ -- ( 0.3574,-0.7712)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3574,-0.7174)
+ -- ( 0.3867,-0.7174)
+ -- ( 0.3867,-0.7712)
+ -- ( 0.3574,-0.7712)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3742,-0.8016)
+ -- ( 0.4036,-0.8016)
+ -- ( 0.4036,-0.8554)
+ -- ( 0.3742,-0.8554)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3742,-0.8016)
+ -- ( 0.4036,-0.8016)
+ -- ( 0.4036,-0.8554)
+ -- ( 0.3742,-0.8554)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4107,-0.8072)
+ -- ( 0.4400,-0.8072)
+ -- ( 0.4400,-0.8610)
+ -- ( 0.4107,-0.8610)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4107,-0.8072)
+ -- ( 0.4400,-0.8072)
+ -- ( 0.4400,-0.8610)
+ -- ( 0.4107,-0.8610)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4612,-0.7886)
+ -- ( 0.4905,-0.7886)
+ -- ( 0.4905,-0.8423)
+ -- ( 0.4612,-0.8423)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4612,-0.7886)
+ -- ( 0.4905,-0.7886)
+ -- ( 0.4905,-0.8423)
+ -- ( 0.4612,-0.8423)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5733,-0.6570)
+ -- ( 0.6007,-0.6675)
+ -- ( 0.5814,-0.7176)
+ -- ( 0.5540,-0.7071)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5733,-0.6570)
+ -- ( 0.6007,-0.6675)
+ -- ( 0.5814,-0.7176)
+ -- ( 0.5540,-0.7071)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6698,-0.4454)
+ -- ( 0.6958,-0.4589)
+ -- ( 0.6710,-0.5065)
+ -- ( 0.6450,-0.4930)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6698,-0.4454)
+ -- ( 0.6958,-0.4589)
+ -- ( 0.6710,-0.5065)
+ -- ( 0.6450,-0.4930)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5789,-0.4658)
+ -- ( 0.6009,-0.4851)
+ -- ( 0.5654,-0.5254)
+ -- ( 0.5434,-0.5061)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5789,-0.4658)
+ -- ( 0.6009,-0.4851)
+ -- ( 0.5654,-0.5254)
+ -- ( 0.5434,-0.5061)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6025,-0.4876)
+ -- ( 0.6259,-0.5054)
+ -- ( 0.5934,-0.5481)
+ -- ( 0.5701,-0.5304)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6025,-0.4876)
+ -- ( 0.6259,-0.5054)
+ -- ( 0.5934,-0.5481)
+ -- ( 0.5701,-0.5304)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6466,-0.5044)
+ -- ( 0.6729,-0.5172)
+ -- ( 0.6493,-0.5654)
+ -- ( 0.6230,-0.5526)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6466,-0.5044)
+ -- ( 0.6729,-0.5172)
+ -- ( 0.6493,-0.5654)
+ -- ( 0.6230,-0.5526)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4854,-0.5939)
+ -- ( 0.5002,-0.5686)
+ -- ( 0.5466,-0.5955)
+ -- ( 0.5320,-0.6208)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4854,-0.5939)
+ -- ( 0.5002,-0.5686)
+ -- ( 0.5466,-0.5955)
+ -- ( 0.5320,-0.6208)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4577,-0.6299)
+ -- ( 0.4750,-0.6063)
+ -- ( 0.5183,-0.6380)
+ -- ( 0.5010,-0.6617)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4577,-0.6299)
+ -- ( 0.4750,-0.6063)
+ -- ( 0.5183,-0.6380)
+ -- ( 0.5010,-0.6617)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4354,-0.6506)
+ -- ( 0.4568,-0.6305)
+ -- ( 0.4935,-0.6697)
+ -- ( 0.4721,-0.6898)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4354,-0.6506)
+ -- ( 0.4568,-0.6305)
+ -- ( 0.4935,-0.6697)
+ -- ( 0.4721,-0.6898)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3580,-0.4631)
+ -- ( 0.3837,-0.4771)
+ -- ( 0.3581,-0.5243)
+ -- ( 0.3323,-0.5103)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3580,-0.4631)
+ -- ( 0.3837,-0.4771)
+ -- ( 0.3581,-0.5243)
+ -- ( 0.3323,-0.5103)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5131,-0.3580)
+ -- ( 0.5345,-0.3780)
+ -- ( 0.4978,-0.4172)
+ -- ( 0.4763,-0.3972)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5131,-0.3580)
+ -- ( 0.5345,-0.3780)
+ -- ( 0.4978,-0.4172)
+ -- ( 0.4763,-0.3972)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2116,-0.3904)
+ -- ( 0.2243,-0.3641)
+ -- ( 0.2726,-0.3875)
+ -- ( 0.2598,-0.4139)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2116,-0.3904)
+ -- ( 0.2243,-0.3641)
+ -- ( 0.2726,-0.3875)
+ -- ( 0.2598,-0.4139)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1786,-0.4343)
+ -- ( 0.1889,-0.4069)
+ -- ( 0.2391,-0.4259)
+ -- ( 0.2289,-0.4532)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1786,-0.4343)
+ -- ( 0.1889,-0.4069)
+ -- ( 0.2391,-0.4259)
+ -- ( 0.2289,-0.4532)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1647,-0.4763)
+ -- ( 0.1772,-0.4497)
+ -- ( 0.2258,-0.4725)
+ -- ( 0.2134,-0.4990)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1647,-0.4763)
+ -- ( 0.1772,-0.4497)
+ -- ( 0.2258,-0.4725)
+ -- ( 0.2134,-0.4990)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2335,-0.5197)
+ -- ( 0.2460,-0.4932)
+ -- ( 0.2946,-0.5160)
+ -- ( 0.2821,-0.5425)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2335,-0.5197)
+ -- ( 0.2460,-0.4932)
+ -- ( 0.2946,-0.5160)
+ -- ( 0.2821,-0.5425)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2832,-0.4218)
+ -- ( 0.2956,-0.3952)
+ -- ( 0.3443,-0.4180)
+ -- ( 0.3318,-0.4445)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2832,-0.4218)
+ -- ( 0.2956,-0.3952)
+ -- ( 0.3443,-0.4180)
+ -- ( 0.3318,-0.4445)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2064,-0.6136)
+ -- ( 0.2189,-0.5871)
+ -- ( 0.2675,-0.6099)
+ -- ( 0.2551,-0.6364)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2064,-0.6136)
+ -- ( 0.2189,-0.5871)
+ -- ( 0.2675,-0.6099)
+ -- ( 0.2551,-0.6364)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1443,-0.5195)
+ -- ( 0.1550,-0.4922)
+ -- ( 0.2050,-0.5120)
+ -- ( 0.1942,-0.5392)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1443,-0.5195)
+ -- ( 0.1550,-0.4922)
+ -- ( 0.2050,-0.5120)
+ -- ( 0.1942,-0.5392)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3128,-0.5333)
+ -- ( 0.3394,-0.5455)
+ -- ( 0.3173,-0.5943)
+ -- ( 0.2906,-0.5823)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3128,-0.5333)
+ -- ( 0.3394,-0.5455)
+ -- ( 0.3173,-0.5943)
+ -- ( 0.2906,-0.5823)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1781,-0.6526)
+ -- ( 0.1883,-0.6250)
+ -- ( 0.2386,-0.6435)
+ -- ( 0.2286,-0.6710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1781,-0.6526)
+ -- ( 0.1883,-0.6250)
+ -- ( 0.2386,-0.6435)
+ -- ( 0.2286,-0.6710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0147,-0.5695)
+ -- ( 0.0238,-0.5417)
+ -- ( 0.0749,-0.5582)
+ -- ( 0.0658,-0.5861)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0147,-0.5695)
+ -- ( 0.0238,-0.5417)
+ -- ( 0.0749,-0.5582)
+ -- ( 0.0658,-0.5861)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0205,-0.5124)
+ -- ( 0.0287,-0.4843)
+ -- ( 0.0803,-0.4994)
+ -- ( 0.0720,-0.5275)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0205,-0.5124)
+ -- ( 0.0287,-0.4843)
+ -- ( 0.0803,-0.4994)
+ -- ( 0.0720,-0.5275)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0719,-0.6560)
+ -- (-0.0678,-0.6849)
+ -- (-0.1209,-0.6925)
+ -- (-0.1250,-0.6635)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0719,-0.6560)
+ -- (-0.0678,-0.6849)
+ -- (-0.1209,-0.6925)
+ -- (-0.1250,-0.6635)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1330,-0.6411)
+ -- (-0.1375,-0.6700)
+ -- (-0.1906,-0.6618)
+ -- (-0.1861,-0.6329)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1330,-0.6411)
+ -- (-0.1375,-0.6700)
+ -- (-0.1906,-0.6618)
+ -- (-0.1861,-0.6329)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0334,-0.7381)
+ -- (-0.0042,-0.7381)
+ -- (-0.0042,-0.7917)
+ -- (-0.0334,-0.7917)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0334,-0.7381)
+ -- (-0.0042,-0.7381)
+ -- (-0.0042,-0.7917)
+ -- (-0.0334,-0.7917)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0998,-0.7315)
+ -- (-0.0706,-0.7315)
+ -- (-0.0706,-0.7852)
+ -- (-0.0998,-0.7852)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0998,-0.7315)
+ -- (-0.0706,-0.7315)
+ -- (-0.0706,-0.7852)
+ -- (-0.0998,-0.7852)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2018,-0.7234)
+ -- (-0.1730,-0.7180)
+ -- (-0.1631,-0.7708)
+ -- (-0.1919,-0.7762)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2018,-0.7234)
+ -- (-0.1730,-0.7180)
+ -- (-0.1631,-0.7708)
+ -- (-0.1919,-0.7762)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2956,-0.7184)
+ -- (-0.2667,-0.7229)
+ -- (-0.2750,-0.7760)
+ -- (-0.3039,-0.7714)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2956,-0.7184)
+ -- (-0.2667,-0.7229)
+ -- (-0.2750,-0.7760)
+ -- (-0.3039,-0.7714)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1661,-0.8014)
+ -- (-0.1372,-0.8060)
+ -- (-0.1454,-0.8590)
+ -- (-0.1744,-0.8545)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1661,-0.8014)
+ -- (-0.1372,-0.8060)
+ -- (-0.1454,-0.8590)
+ -- (-0.1744,-0.8545)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1269,-0.8074)
+ -- (-0.0977,-0.8054)
+ -- (-0.0940,-0.8590)
+ -- (-0.1232,-0.8610)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1269,-0.8074)
+ -- (-0.0977,-0.8054)
+ -- (-0.0940,-0.8590)
+ -- (-0.1232,-0.8610)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2787,-0.7975)
+ -- (-0.2495,-0.7956)
+ -- (-0.2459,-0.8492)
+ -- (-0.2751,-0.8511)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2787,-0.7975)
+ -- (-0.2495,-0.7956)
+ -- (-0.2459,-0.8492)
+ -- (-0.2751,-0.8511)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3966,-0.5592)
+ -- (-0.3802,-0.5834)
+ -- (-0.4246,-0.6135)
+ -- (-0.4411,-0.5892)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3966,-0.5592)
+ -- (-0.3802,-0.5834)
+ -- (-0.4246,-0.6135)
+ -- (-0.4411,-0.5892)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4189,-0.5000)
+ -- (-0.4033,-0.5248)
+ -- (-0.4488,-0.5534)
+ -- (-0.4644,-0.5286)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4189,-0.5000)
+ -- (-0.4033,-0.5248)
+ -- (-0.4488,-0.5534)
+ -- (-0.4644,-0.5286)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3561,-0.4332)
+ -- (-0.3310,-0.4483)
+ -- (-0.3586,-0.4944)
+ -- (-0.3837,-0.4793)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3561,-0.4332)
+ -- (-0.3310,-0.4483)
+ -- (-0.3586,-0.4944)
+ -- (-0.3837,-0.4793)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3120,-0.4787)
+ -- (-0.2896,-0.4976)
+ -- (-0.3241,-0.5386)
+ -- (-0.3466,-0.5198)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3120,-0.4787)
+ -- (-0.2896,-0.4976)
+ -- (-0.3241,-0.5386)
+ -- (-0.3466,-0.5198)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2660,-0.5113)
+ -- (-0.2456,-0.5323)
+ -- (-0.2840,-0.5697)
+ -- (-0.3045,-0.5487)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2660,-0.5113)
+ -- (-0.2456,-0.5323)
+ -- (-0.2840,-0.5697)
+ -- (-0.3045,-0.5487)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3939,-0.2212)
+ -- (-0.3666,-0.2319)
+ -- (-0.3863,-0.2819)
+ -- (-0.4135,-0.2712)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3939,-0.2212)
+ -- (-0.3666,-0.2319)
+ -- (-0.3863,-0.2819)
+ -- (-0.4135,-0.2712)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3038,-0.2403)
+ -- (-0.2765,-0.2509)
+ -- (-0.2961,-0.3010)
+ -- (-0.3234,-0.2902)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3038,-0.2403)
+ -- (-0.2765,-0.2509)
+ -- (-0.2961,-0.3010)
+ -- (-0.3234,-0.2902)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3532,-0.2251)
+ -- (-0.3255,-0.2346)
+ -- (-0.3428,-0.2854)
+ -- (-0.3705,-0.2760)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3532,-0.2251)
+ -- (-0.3255,-0.2346)
+ -- (-0.3428,-0.2854)
+ -- (-0.3705,-0.2760)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3482,-0.3198)
+ -- (-0.3204,-0.3293)
+ -- (-0.3377,-0.3801)
+ -- (-0.3655,-0.3706)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3482,-0.3198)
+ -- (-0.3204,-0.3293)
+ -- (-0.3377,-0.3801)
+ -- (-0.3655,-0.3706)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5006,-0.1767)
+ -- (-0.4737,-0.1885)
+ -- (-0.4953,-0.2376)
+ -- (-0.5221,-0.2258)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5006,-0.1767)
+ -- (-0.4737,-0.1885)
+ -- (-0.4953,-0.2376)
+ -- (-0.5221,-0.2258)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5739,-0.2312)
+ -- (-0.5595,-0.2568)
+ -- (-0.6065,-0.2830)
+ -- (-0.6207,-0.2575)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5739,-0.2312)
+ -- (-0.5595,-0.2568)
+ -- (-0.6065,-0.2830)
+ -- (-0.6207,-0.2575)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5929,-0.3943)
+ -- (-0.5696,-0.3765)
+ -- (-0.5369,-0.4192)
+ -- (-0.5602,-0.4370)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5929,-0.3943)
+ -- (-0.5696,-0.3765)
+ -- (-0.5369,-0.4192)
+ -- (-0.5602,-0.4370)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5005,-0.3312)
+ -- (-0.4775,-0.3129)
+ -- (-0.4441,-0.3550)
+ -- (-0.4670,-0.3733)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5005,-0.3312)
+ -- (-0.4775,-0.3129)
+ -- (-0.4441,-0.3550)
+ -- (-0.4670,-0.3733)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5523,-0.3618)
+ -- (-0.5293,-0.3436)
+ -- (-0.4960,-0.3857)
+ -- (-0.5189,-0.4038)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5523,-0.3618)
+ -- (-0.5293,-0.3436)
+ -- (-0.4960,-0.3857)
+ -- (-0.5189,-0.4038)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4383,-0.3880)
+ -- (-0.4249,-0.4140)
+ -- (-0.4726,-0.4386)
+ -- (-0.4861,-0.4126)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4383,-0.3880)
+ -- (-0.4249,-0.4140)
+ -- (-0.4726,-0.4386)
+ -- (-0.4861,-0.4126)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6626,-0.4293)
+ -- (-0.6510,-0.4562)
+ -- (-0.7003,-0.4775)
+ -- (-0.7119,-0.4506)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6626,-0.4293)
+ -- (-0.6510,-0.4562)
+ -- (-0.7003,-0.4775)
+ -- (-0.7119,-0.4506)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6449,-0.4759)
+ -- (-0.6280,-0.4998)
+ -- (-0.6717,-0.5309)
+ -- (-0.6887,-0.5069)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6449,-0.4759)
+ -- (-0.6280,-0.4998)
+ -- (-0.6717,-0.5309)
+ -- (-0.6887,-0.5069)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5766,-0.5683)
+ -- (-0.5643,-0.5948)
+ -- (-0.6130,-0.6174)
+ -- (-0.6254,-0.5909)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5766,-0.5683)
+ -- (-0.5643,-0.5948)
+ -- (-0.6130,-0.6174)
+ -- (-0.6254,-0.5909)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4733,-0.5728)
+ -- (-0.4590,-0.5983)
+ -- (-0.5061,-0.6244)
+ -- (-0.5202,-0.5988)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4733,-0.5728)
+ -- (-0.4590,-0.5983)
+ -- (-0.5061,-0.6244)
+ -- (-0.5202,-0.5988)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4272,-0.6520)
+ -- (-0.4128,-0.6774)
+ -- (-0.4595,-0.7039)
+ -- (-0.4740,-0.6785)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4272,-0.6520)
+ -- (-0.4128,-0.6774)
+ -- (-0.4595,-0.7039)
+ -- (-0.4740,-0.6785)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5374,-0.6782)
+ -- (-0.5236,-0.7040)
+ -- (-0.5710,-0.7292)
+ -- (-0.5848,-0.7034)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5374,-0.6782)
+ -- (-0.5236,-0.7040)
+ -- (-0.5710,-0.7292)
+ -- (-0.5848,-0.7034)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5214,-0.7131)
+ -- (-0.5038,-0.7365)
+ -- (-0.5468,-0.7687)
+ -- (-0.5644,-0.7453)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5214,-0.7131)
+ -- (-0.5038,-0.7365)
+ -- (-0.5468,-0.7687)
+ -- (-0.5644,-0.7453)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2847,-0.1917)
+ -- ( 0.2954,-0.1644)
+ -- ( 0.3454,-0.1841)
+ -- ( 0.3347,-0.2114)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2847,-0.1917)
+ -- ( 0.2954,-0.1644)
+ -- ( 0.3454,-0.1841)
+ -- ( 0.3347,-0.2114)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2692,-0.2397)
+ -- ( 0.2775,-0.2116)
+ -- ( 0.3291,-0.2268)
+ -- ( 0.3208,-0.2548)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2692,-0.2397)
+ -- ( 0.2775,-0.2116)
+ -- ( 0.3291,-0.2268)
+ -- ( 0.3208,-0.2548)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2587,-0.2944)
+ -- ( 0.2585,-0.2651)
+ -- ( 0.3123,-0.2648)
+ -- ( 0.3125,-0.2941)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2587,-0.2944)
+ -- ( 0.2585,-0.2651)
+ -- ( 0.3123,-0.2648)
+ -- ( 0.3125,-0.2941)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1269,-0.2581)
+ -- ( 0.1359,-0.2303)
+ -- ( 0.1871,-0.2468)
+ -- ( 0.1780,-0.2746)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1269,-0.2581)
+ -- ( 0.1359,-0.2303)
+ -- ( 0.1871,-0.2468)
+ -- ( 0.1780,-0.2746)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1127,-0.3153)
+ -- ( 0.1232,-0.2880)
+ -- ( 0.1733,-0.3074)
+ -- ( 0.1626,-0.3348)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1127,-0.3153)
+ -- ( 0.1232,-0.2880)
+ -- ( 0.1733,-0.3074)
+ -- ( 0.1626,-0.3348)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1928,-0.0951)
+ -- ( 0.2055,-0.0687)
+ -- ( 0.2539,-0.0920)
+ -- ( 0.2412,-0.1184)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1928,-0.0951)
+ -- ( 0.2055,-0.0687)
+ -- ( 0.2539,-0.0920)
+ -- ( 0.2412,-0.1184)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2202,-0.0375)
+ -- ( 0.2335,-0.0113)
+ -- ( 0.2814,-0.0356)
+ -- ( 0.2682,-0.0617)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2202,-0.0375)
+ -- ( 0.2335,-0.0113)
+ -- ( 0.2814,-0.0356)
+ -- ( 0.2682,-0.0617)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2582, 0.0509)
+ -- ( 0.2736, 0.0259)
+ -- ( 0.2278,-0.0022)
+ -- ( 0.2125, 0.0227)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2582, 0.0509)
+ -- ( 0.2736, 0.0259)
+ -- ( 0.2278,-0.0022)
+ -- ( 0.2125, 0.0227)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2111, 0.0849)
+ -- ( 0.2307, 0.0632)
+ -- ( 0.1908, 0.0273)
+ -- ( 0.1712, 0.0490)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2111, 0.0849)
+ -- ( 0.2307, 0.0632)
+ -- ( 0.1908, 0.0273)
+ -- ( 0.1712, 0.0490)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1776, 0.1187)
+ -- ( 0.1982, 0.0978)
+ -- ( 0.1599, 0.0601)
+ -- ( 0.1394, 0.0810)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1776, 0.1187)
+ -- ( 0.1982, 0.0978)
+ -- ( 0.1599, 0.0601)
+ -- ( 0.1394, 0.0810)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2760, 0.3987)
+ -- ( 0.2946, 0.3760)
+ -- ( 0.2531, 0.3420)
+ -- ( 0.2345, 0.3646)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2760, 0.3987)
+ -- ( 0.2946, 0.3760)
+ -- ( 0.2531, 0.3420)
+ -- ( 0.2345, 0.3646)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3226, 0.3543)
+ -- ( 0.3420, 0.3323)
+ -- ( 0.3018, 0.2967)
+ -- ( 0.2824, 0.3185)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3226, 0.3543)
+ -- ( 0.3420, 0.3323)
+ -- ( 0.3018, 0.2967)
+ -- ( 0.2824, 0.3185)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2277, 0.3599)
+ -- (-0.2171, 0.3872)
+ -- (-0.1671, 0.3676)
+ -- (-0.1777, 0.3404)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2277, 0.3599)
+ -- (-0.2171, 0.3872)
+ -- (-0.1671, 0.3676)
+ -- (-0.1777, 0.3404)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1722, 0.5368)
+ -- (-0.1616, 0.5642)
+ -- (-0.1116, 0.5446)
+ -- (-0.1223, 0.5174)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1722, 0.5368)
+ -- (-0.1616, 0.5642)
+ -- (-0.1116, 0.5446)
+ -- (-0.1223, 0.5174)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2400, 0.3081)
+ -- (-0.2307, 0.3359)
+ -- (-0.1797, 0.3189)
+ -- (-0.1890, 0.2912)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2400, 0.3081)
+ -- (-0.2307, 0.3359)
+ -- (-0.1797, 0.3189)
+ -- (-0.1890, 0.2912)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2735, 0.1997)
+ -- (-0.2631, 0.2270)
+ -- (-0.2129, 0.2080)
+ -- (-0.2233, 0.1807)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2735, 0.1997)
+ -- (-0.2631, 0.2270)
+ -- (-0.2129, 0.2080)
+ -- (-0.2233, 0.1807)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3047, 0.1045)
+ -- (-0.2975, 0.1329)
+ -- (-0.2455, 0.1200)
+ -- (-0.2525, 0.0915)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3047, 0.1045)
+ -- (-0.2975, 0.1329)
+ -- (-0.2455, 0.1200)
+ -- (-0.2525, 0.0915)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1406, 0.3596)
+ -- (-0.1136, 0.3482)
+ -- (-0.1345, 0.2988)
+ -- (-0.1615, 0.3102)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1406, 0.3596)
+ -- (-0.1136, 0.3482)
+ -- (-0.1345, 0.2988)
+ -- (-0.1615, 0.3102)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0597, 0.5878)
+ -- (-0.0327, 0.5763)
+ -- (-0.0536, 0.5269)
+ -- (-0.0806, 0.5383)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0597, 0.5878)
+ -- (-0.0327, 0.5763)
+ -- (-0.0536, 0.5269)
+ -- (-0.0806, 0.5383)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0206, 0.5864)
+ -- ( 0.0064, 0.5749)
+ -- (-0.0146, 0.5255)
+ -- (-0.0416, 0.5369)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0206, 0.5864)
+ -- ( 0.0064, 0.5749)
+ -- (-0.0146, 0.5255)
+ -- (-0.0416, 0.5369)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1653, 0.2738)
+ -- (-0.1360, 0.2738)
+ -- (-0.1360, 0.2200)
+ -- (-0.1653, 0.2200)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1653, 0.2738)
+ -- (-0.1360, 0.2738)
+ -- (-0.1360, 0.2200)
+ -- (-0.1653, 0.2200)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1782, 0.2207)
+ -- (-0.1501, 0.2122)
+ -- (-0.1657, 0.1608)
+ -- (-0.1937, 0.1693)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1782, 0.2207)
+ -- (-0.1501, 0.2122)
+ -- (-0.1657, 0.1608)
+ -- (-0.1937, 0.1693)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2343, 0.0622)
+ -- (-0.2239, 0.0896)
+ -- (-0.1737, 0.0706)
+ -- (-0.1840, 0.0432)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2343, 0.0622)
+ -- (-0.2239, 0.0896)
+ -- (-0.1737, 0.0706)
+ -- (-0.1840, 0.0432)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1289, 0.0933)
+ -- (-0.1186, 0.1207)
+ -- (-0.0683, 0.1017)
+ -- (-0.0787, 0.0743)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1289, 0.0933)
+ -- (-0.1186, 0.1207)
+ -- (-0.0683, 0.1017)
+ -- (-0.0787, 0.0743)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2223, 0.7399)
+ -- ( 0.2483, 0.7532)
+ -- ( 0.2727, 0.7054)
+ -- ( 0.2467, 0.6920)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2223, 0.7399)
+ -- ( 0.2483, 0.7532)
+ -- ( 0.2727, 0.7054)
+ -- ( 0.2467, 0.6920)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5440, 0.7476)
+ -- ( 0.5576, 0.7217)
+ -- ( 0.5102, 0.6965)
+ -- ( 0.4965, 0.7224)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5440, 0.7476)
+ -- ( 0.5576, 0.7217)
+ -- ( 0.5102, 0.6965)
+ -- ( 0.4965, 0.7224)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5919, 0.6377)
+ -- ( 0.6068, 0.6125)
+ -- ( 0.5604, 0.5853)
+ -- ( 0.5456, 0.6106)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5919, 0.6377)
+ -- ( 0.6068, 0.6125)
+ -- ( 0.5604, 0.5853)
+ -- ( 0.5456, 0.6106)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6224, 0.5979)
+ -- ( 0.6382, 0.5732)
+ -- ( 0.5930, 0.5443)
+ -- ( 0.5772, 0.5690)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6224, 0.5979)
+ -- ( 0.6382, 0.5732)
+ -- ( 0.5930, 0.5443)
+ -- ( 0.5772, 0.5690)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4104, 0.6743)
+ -- ( 0.4255, 0.6491)
+ -- ( 0.3795, 0.6215)
+ -- ( 0.3644, 0.6466)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4104, 0.6743)
+ -- ( 0.4255, 0.6491)
+ -- ( 0.3795, 0.6215)
+ -- ( 0.3644, 0.6466)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4437, 0.6203)
+ -- ( 0.4592, 0.5954)
+ -- ( 0.4136, 0.5671)
+ -- ( 0.3981, 0.5918)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4437, 0.6203)
+ -- ( 0.4592, 0.5954)
+ -- ( 0.4136, 0.5671)
+ -- ( 0.3981, 0.5918)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5275, 0.4892)
+ -- ( 0.5449, 0.4656)
+ -- ( 0.5018, 0.4337)
+ -- ( 0.4844, 0.4571)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5275, 0.4892)
+ -- ( 0.5449, 0.4656)
+ -- ( 0.5018, 0.4337)
+ -- ( 0.4844, 0.4571)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2900, 0.6234)
+ -- ( 0.3087, 0.6008)
+ -- ( 0.2671, 0.5666)
+ -- ( 0.2485, 0.5892)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2900, 0.6234)
+ -- ( 0.3087, 0.6008)
+ -- ( 0.2671, 0.5666)
+ -- ( 0.2485, 0.5892)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3295, 0.5855)
+ -- ( 0.3477, 0.5626)
+ -- ( 0.3058, 0.5291)
+ -- ( 0.2875, 0.5519)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3295, 0.5855)
+ -- ( 0.3477, 0.5626)
+ -- ( 0.3058, 0.5291)
+ -- ( 0.2875, 0.5519)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3915, 0.5035)
+ -- ( 0.4098, 0.4807)
+ -- ( 0.3680, 0.4471)
+ -- ( 0.3497, 0.4699)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3915, 0.5035)
+ -- ( 0.4098, 0.4807)
+ -- ( 0.3680, 0.4471)
+ -- ( 0.3497, 0.4699)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4274, 0.4691)
+ -- ( 0.4472, 0.4474)
+ -- ( 0.4075, 0.4112)
+ -- ( 0.3878, 0.4327)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4274, 0.4691)
+ -- ( 0.4472, 0.4474)
+ -- ( 0.4075, 0.4112)
+ -- ( 0.3878, 0.4327)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0465, 0.7243)
+ -- ( 0.0751, 0.7305)
+ -- ( 0.0864, 0.6779)
+ -- ( 0.0578, 0.6717)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0465, 0.7243)
+ -- ( 0.0751, 0.7305)
+ -- ( 0.0864, 0.6779)
+ -- ( 0.0578, 0.6717)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0312, 0.7116)
+ -- (-0.0338, 0.7407)
+ -- ( 0.0197, 0.7456)
+ -- ( 0.0223, 0.7164)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0312, 0.7116)
+ -- (-0.0338, 0.7407)
+ -- ( 0.0197, 0.7456)
+ -- ( 0.0223, 0.7164)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1044, 0.7143)
+ -- (-0.1084, 0.7434)
+ -- (-0.0552, 0.7507)
+ -- (-0.0512, 0.7216)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1044, 0.7143)
+ -- (-0.1084, 0.7434)
+ -- (-0.0552, 0.7507)
+ -- (-0.0512, 0.7216)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1250, 0.6753)
+ -- (-0.1169, 0.7034)
+ -- (-0.0653, 0.6887)
+ -- (-0.0733, 0.6605)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1250, 0.6753)
+ -- (-0.1169, 0.7034)
+ -- (-0.0653, 0.6887)
+ -- (-0.0733, 0.6605)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2293, 0.7263)
+ -- (-0.2016, 0.7170)
+ -- (-0.2185, 0.6660)
+ -- (-0.2463, 0.6753)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2293, 0.7263)
+ -- (-0.2016, 0.7170)
+ -- (-0.2185, 0.6660)
+ -- (-0.2463, 0.6753)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4164, 0.8019)
+ -- (-0.3886, 0.7926)
+ -- (-0.4056, 0.7417)
+ -- (-0.4335, 0.7510)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4164, 0.8019)
+ -- (-0.3886, 0.7926)
+ -- (-0.4056, 0.7417)
+ -- (-0.4335, 0.7510)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3769, 0.7827)
+ -- (-0.3486, 0.7746)
+ -- (-0.3636, 0.7230)
+ -- (-0.3918, 0.7311)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3769, 0.7827)
+ -- (-0.3486, 0.7746)
+ -- (-0.3636, 0.7230)
+ -- (-0.3918, 0.7311)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2690, 0.8085)
+ -- (-0.2696, 0.8379)
+ -- (-0.2159, 0.8389)
+ -- (-0.2153, 0.8097)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2690, 0.8085)
+ -- (-0.2696, 0.8379)
+ -- (-0.2159, 0.8389)
+ -- (-0.2153, 0.8097)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0864, 0.8532)
+ -- (-0.0767, 0.8256)
+ -- (-0.1273, 0.8076)
+ -- (-0.1371, 0.8352)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0864, 0.8532)
+ -- (-0.0767, 0.8256)
+ -- (-0.1273, 0.8076)
+ -- (-0.1371, 0.8352)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3699, 0.6041)
+ -- (-0.3425, 0.5939)
+ -- (-0.3609, 0.5436)
+ -- (-0.3885, 0.5537)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3699, 0.6041)
+ -- (-0.3425, 0.5939)
+ -- (-0.3609, 0.5436)
+ -- (-0.3885, 0.5537)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4770, 0.6412)
+ -- (-0.4500, 0.6299)
+ -- (-0.4707, 0.5804)
+ -- (-0.4978, 0.5918)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4770, 0.6412)
+ -- (-0.4500, 0.6299)
+ -- (-0.4707, 0.5804)
+ -- (-0.4978, 0.5918)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4348, 0.4860)
+ -- (-0.4060, 0.4806)
+ -- (-0.4159, 0.4278)
+ -- (-0.4447, 0.4332)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4348, 0.4860)
+ -- (-0.4060, 0.4806)
+ -- (-0.4159, 0.4278)
+ -- (-0.4447, 0.4332)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4771, 0.4952)
+ -- (-0.4520, 0.4800)
+ -- (-0.4799, 0.4341)
+ -- (-0.5050, 0.4493)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4771, 0.4952)
+ -- (-0.4520, 0.4800)
+ -- (-0.4799, 0.4341)
+ -- (-0.5050, 0.4493)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5175, 0.4232)
+ -- (-0.4917, 0.4092)
+ -- (-0.5176, 0.3620)
+ -- (-0.5433, 0.3761)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5175, 0.4232)
+ -- (-0.4917, 0.4092)
+ -- (-0.5176, 0.3620)
+ -- (-0.5433, 0.3761)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5739, 0.5614)
+ -- (-0.5487, 0.5464)
+ -- (-0.5762, 0.5003)
+ -- (-0.6013, 0.5152)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5739, 0.5614)
+ -- (-0.5487, 0.5464)
+ -- (-0.5762, 0.5003)
+ -- (-0.6013, 0.5152)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6244, 0.4780)
+ -- (-0.5977, 0.4661)
+ -- (-0.6195, 0.4170)
+ -- (-0.6463, 0.4289)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6244, 0.4780)
+ -- (-0.5977, 0.4661)
+ -- (-0.6195, 0.4170)
+ -- (-0.6463, 0.4289)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6236, 0.1401)
+ -- (-0.6192, 0.1691)
+ -- (-0.5661, 0.1611)
+ -- (-0.5705, 0.1321)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6236, 0.1401)
+ -- (-0.6192, 0.1691)
+ -- (-0.5661, 0.1611)
+ -- (-0.5705, 0.1321)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3872, 0.3590)
+ -- (-0.3829, 0.3880)
+ -- (-0.3297, 0.3800)
+ -- (-0.3341, 0.3510)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3872, 0.3590)
+ -- (-0.3829, 0.3880)
+ -- (-0.3297, 0.3800)
+ -- (-0.3341, 0.3510)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6525, 0.1021)
+ -- (-0.6404, 0.1288)
+ -- (-0.5915, 0.1066)
+ -- (-0.6036, 0.0799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6525, 0.1021)
+ -- (-0.6404, 0.1288)
+ -- (-0.5915, 0.1066)
+ -- (-0.6036, 0.0799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4323, 0.3237)
+ -- (-0.4202, 0.3503)
+ -- (-0.3713, 0.3280)
+ -- (-0.3834, 0.3014)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4323, 0.3237)
+ -- (-0.4202, 0.3503)
+ -- (-0.3713, 0.3280)
+ -- (-0.3834, 0.3014)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3470, 0.2846)
+ -- (-0.3349, 0.3113)
+ -- (-0.2859, 0.2891)
+ -- (-0.2981, 0.2624)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3470, 0.2846)
+ -- (-0.3349, 0.3113)
+ -- (-0.2859, 0.2891)
+ -- (-0.2981, 0.2624)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3053, 0.3741)
+ -- (-0.2932, 0.4008)
+ -- (-0.2443, 0.3786)
+ -- (-0.2564, 0.3519)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3053, 0.3741)
+ -- (-0.2932, 0.4008)
+ -- (-0.2443, 0.3786)
+ -- (-0.2564, 0.3519)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6751, 0.0465)
+ -- (-0.6666, 0.0746)
+ -- (-0.6152, 0.0590)
+ -- (-0.6237, 0.0310)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6751, 0.0465)
+ -- (-0.6666, 0.0746)
+ -- (-0.6152, 0.0590)
+ -- (-0.6237, 0.0310)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7316,-0.0595)
+ -- (-0.7215,-0.0320)
+ -- (-0.6711,-0.0505)
+ -- (-0.6812,-0.0780)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7316,-0.0595)
+ -- (-0.7215,-0.0320)
+ -- (-0.6711,-0.0505)
+ -- (-0.6812,-0.0780)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7748,-0.1355)
+ -- (-0.7629,-0.1088)
+ -- (-0.7138,-0.1305)
+ -- (-0.7257,-0.1573)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7748,-0.1355)
+ -- (-0.7629,-0.1088)
+ -- (-0.7138,-0.1305)
+ -- (-0.7257,-0.1573)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6698,-0.1385)
+ -- (-0.6512,-0.1159)
+ -- (-0.6098,-0.1501)
+ -- (-0.6284,-0.1727)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6698,-0.1385)
+ -- (-0.6512,-0.1159)
+ -- (-0.6098,-0.1501)
+ -- (-0.6284,-0.1727)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3325,-0.1175)
+ -- (-0.3067,-0.1313)
+ -- (-0.3320,-0.1787)
+ -- (-0.3579,-0.1649)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3325,-0.1175)
+ -- (-0.3067,-0.1313)
+ -- (-0.3320,-0.1787)
+ -- (-0.3579,-0.1649)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4097,-0.0630)
+ -- (-0.3827,-0.0741)
+ -- (-0.4031,-0.1238)
+ -- (-0.4302,-0.1127)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4097,-0.0630)
+ -- (-0.3827,-0.0741)
+ -- (-0.4031,-0.1238)
+ -- (-0.4302,-0.1127)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3028, 0.0016)
+ -- (-0.2734, 0.0016)
+ -- (-0.2734,-0.0522)
+ -- (-0.3028,-0.0522)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3028, 0.0016)
+ -- (-0.2734, 0.0016)
+ -- (-0.2734,-0.0522)
+ -- (-0.3028,-0.0522)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2492,-0.0037)
+ -- (-0.2198,-0.0037)
+ -- (-0.2198,-0.0574)
+ -- (-0.2492,-0.0574)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2492,-0.0037)
+ -- (-0.2198,-0.0037)
+ -- (-0.2198,-0.0574)
+ -- (-0.2492,-0.0574)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4151, 0.0294)
+ -- (-0.3858, 0.0294)
+ -- (-0.3858,-0.0243)
+ -- (-0.4151,-0.0243)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4151, 0.0294)
+ -- (-0.3858, 0.0294)
+ -- (-0.3858,-0.0243)
+ -- (-0.4151,-0.0243)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4687, 0.0340)
+ -- (-0.4394, 0.0340)
+ -- (-0.4394,-0.0197)
+ -- (-0.4687,-0.0197)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4687, 0.0340)
+ -- (-0.4394, 0.0340)
+ -- (-0.4394,-0.0197)
+ -- (-0.4687,-0.0197)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5170, 0.0545)
+ -- (-0.4876, 0.0545)
+ -- (-0.4876, 0.0008)
+ -- (-0.5170, 0.0008)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5170, 0.0545)
+ -- (-0.4876, 0.0545)
+ -- (-0.4876, 0.0008)
+ -- (-0.5170, 0.0008)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4695, 0.1540)
+ -- (-0.4413, 0.1461)
+ -- (-0.4557, 0.0943)
+ -- (-0.4839, 0.1022)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4695, 0.1540)
+ -- (-0.4413, 0.1461)
+ -- (-0.4557, 0.0943)
+ -- (-0.4839, 0.1022)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4511, 0.2320)
+ -- (-0.4227, 0.2241)
+ -- (-0.4372, 0.1724)
+ -- (-0.4654, 0.1803)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4511, 0.2320)
+ -- (-0.4227, 0.2241)
+ -- (-0.4372, 0.1724)
+ -- (-0.4654, 0.1803)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4191, 0.1396)
+ -- (-0.3904, 0.1335)
+ -- (-0.4017, 0.0809)
+ -- (-0.4304, 0.0871)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4191, 0.1396)
+ -- (-0.3904, 0.1335)
+ -- (-0.4017, 0.0809)
+ -- (-0.4304, 0.0871)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0048,-0.2963)
+ -- ( 0.0056,-0.2689)
+ -- ( 0.0558,-0.2881)
+ -- ( 0.0453,-0.3155)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0048,-0.2963)
+ -- ( 0.0056,-0.2689)
+ -- ( 0.0558,-0.2881)
+ -- ( 0.0453,-0.3155)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0804,-0.1001)
+ -- ( 0.0908,-0.0728)
+ -- ( 0.1410,-0.0919)
+ -- ( 0.1305,-0.1192)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0804,-0.1001)
+ -- ( 0.0908,-0.0728)
+ -- ( 0.1410,-0.0919)
+ -- ( 0.1305,-0.1192)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1027,-0.2588)
+ -- (-0.0979,-0.2299)
+ -- (-0.0449,-0.2387)
+ -- (-0.0498,-0.2676)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1027,-0.2588)
+ -- (-0.0979,-0.2299)
+ -- (-0.0449,-0.2387)
+ -- (-0.0498,-0.2676)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1889,-0.2314)
+ -- (-0.1776,-0.2043)
+ -- (-0.1281,-0.2251)
+ -- (-0.1394,-0.2521)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1889,-0.2314)
+ -- (-0.1776,-0.2043)
+ -- (-0.1281,-0.2251)
+ -- (-0.1394,-0.2521)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1180,-0.3033)
+ -- (-0.1077,-0.2759)
+ -- (-0.0575,-0.2947)
+ -- (-0.0677,-0.3221)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1180,-0.3033)
+ -- (-0.1077,-0.2759)
+ -- (-0.0575,-0.2947)
+ -- (-0.0677,-0.3221)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2120,-0.2801)
+ -- (-0.2010,-0.2529)
+ -- (-0.1512,-0.2729)
+ -- (-0.1622,-0.3002)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2120,-0.2801)
+ -- (-0.2010,-0.2529)
+ -- (-0.1512,-0.2729)
+ -- (-0.1622,-0.3002)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2265,-0.3343)
+ -- (-0.2161,-0.3069)
+ -- (-0.1659,-0.3259)
+ -- (-0.1762,-0.3533)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2265,-0.3343)
+ -- (-0.2161,-0.3069)
+ -- (-0.1659,-0.3259)
+ -- (-0.1762,-0.3533)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0728,-0.3520)
+ -- (-0.0436,-0.3488)
+ -- (-0.0379,-0.4022)
+ -- (-0.0670,-0.4054)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0728,-0.3520)
+ -- (-0.0436,-0.3488)
+ -- (-0.0379,-0.4022)
+ -- (-0.0670,-0.4054)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3598,-0.6299)
+ -- ( 0.3752,-0.6051)
+ -- ( 0.4209,-0.6334)
+ -- ( 0.4054,-0.6583)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3598,-0.6299)
+ -- ( 0.3752,-0.6051)
+ -- ( 0.4209,-0.6334)
+ -- ( 0.4054,-0.6583)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3284,-0.6582)
+ -- ( 0.3482,-0.6365)
+ -- ( 0.3879,-0.6727)
+ -- ( 0.3681,-0.6944)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3284,-0.6582)
+ -- ( 0.3482,-0.6365)
+ -- ( 0.3879,-0.6727)
+ -- ( 0.3681,-0.6944)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8159,-0.3188)
+ -- (-0.7892,-0.3067)
+ -- (-0.7670,-0.3556)
+ -- (-0.7937,-0.3677)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8159,-0.3188)
+ -- (-0.7892,-0.3067)
+ -- (-0.7670,-0.3556)
+ -- (-0.7937,-0.3677)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8755, 0.1805)
+ -- (-0.8623, 0.2066)
+ -- (-0.8144, 0.1824)
+ -- (-0.8276, 0.1562)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8755, 0.1805)
+ -- (-0.8623, 0.2066)
+ -- (-0.8144, 0.1824)
+ -- (-0.8276, 0.1562)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9400, 0.0507)
+ -- (-0.9275, 0.0771)
+ -- (-0.8789, 0.0541)
+ -- (-0.8916, 0.0276)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9400, 0.0507)
+ -- (-0.9275, 0.0771)
+ -- (-0.8789, 0.0541)
+ -- (-0.8916, 0.0276)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9500,-0.0171)
+ -- (-0.9467, 0.0120)
+ -- (-0.8934, 0.0060)
+ -- (-0.8966,-0.0232)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9500,-0.0171)
+ -- (-0.9467, 0.0120)
+ -- (-0.8934, 0.0060)
+ -- (-0.8966,-0.0232)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0374, 0.6594)
+ -- (-0.0376, 0.6887)
+ -- ( 0.0161, 0.6890)
+ -- ( 0.0162, 0.6598)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0374, 0.6594)
+ -- (-0.0376, 0.6887)
+ -- ( 0.0161, 0.6890)
+ -- ( 0.0162, 0.6598)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1600, 0.8267)
+ -- ( 0.1793, 0.8046)
+ -- ( 0.1388, 0.7692)
+ -- ( 0.1195, 0.7913)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1600, 0.8267)
+ -- ( 0.1793, 0.8046)
+ -- ( 0.1388, 0.7692)
+ -- ( 0.1195, 0.7913)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4284, 0.3107)
+ -- ( 0.4572, 0.3163)
+ -- ( 0.4672, 0.2634)
+ -- ( 0.4384, 0.2580)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4284, 0.3107)
+ -- ( 0.4572, 0.3163)
+ -- ( 0.4672, 0.2634)
+ -- ( 0.4384, 0.2580)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4721, 0.3149)
+ -- ( 0.5003, 0.3230)
+ -- ( 0.5151, 0.2714)
+ -- ( 0.4870, 0.2633)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4721, 0.3149)
+ -- ( 0.5003, 0.3230)
+ -- ( 0.5151, 0.2714)
+ -- ( 0.4870, 0.2633)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5761, 0.3388)
+ -- ( 0.6049, 0.3443)
+ -- ( 0.6150, 0.2916)
+ -- ( 0.5862, 0.2860)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5761, 0.3388)
+ -- ( 0.6049, 0.3443)
+ -- ( 0.6150, 0.2916)
+ -- ( 0.5862, 0.2860)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6283, 0.3369)
+ -- ( 0.6567, 0.3296)
+ -- ( 0.6432, 0.2775)
+ -- ( 0.6148, 0.2849)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6283, 0.3369)
+ -- ( 0.6567, 0.3296)
+ -- ( 0.6432, 0.2775)
+ -- ( 0.6148, 0.2849)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5378, 0.2581)
+ -- ( 0.5670, 0.2616)
+ -- ( 0.5734, 0.2083)
+ -- ( 0.5443, 0.2047)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5378, 0.2581)
+ -- ( 0.5670, 0.2616)
+ -- ( 0.5734, 0.2083)
+ -- ( 0.5443, 0.2047)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4853, 0.2500)
+ -- ( 0.5140, 0.2555)
+ -- ( 0.5241, 0.2028)
+ -- ( 0.4953, 0.1973)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4853, 0.2500)
+ -- ( 0.5140, 0.2555)
+ -- ( 0.5241, 0.2028)
+ -- ( 0.4953, 0.1973)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4028, 0.0895)
+ -- ( 0.4321, 0.0895)
+ -- ( 0.4321, 0.0358)
+ -- ( 0.4028, 0.0358)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4028, 0.0895)
+ -- ( 0.4321, 0.0895)
+ -- ( 0.4321, 0.0358)
+ -- ( 0.4028, 0.0358)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4612, 0.0957)
+ -- ( 0.4899, 0.0898)
+ -- ( 0.4793, 0.0371)
+ -- ( 0.4506, 0.0430)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4612, 0.0957)
+ -- ( 0.4899, 0.0898)
+ -- ( 0.4793, 0.0371)
+ -- ( 0.4506, 0.0430)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5422,-0.0041)
+ -- ( 0.5437,-0.0333)
+ -- ( 0.4900,-0.0361)
+ -- ( 0.4885,-0.0068)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5422,-0.0041)
+ -- ( 0.5437,-0.0333)
+ -- ( 0.4900,-0.0361)
+ -- ( 0.4885,-0.0068)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6654,-0.0050)
+ -- ( 0.6664,-0.0343)
+ -- ( 0.6128,-0.0361)
+ -- ( 0.6117,-0.0068)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6654,-0.0050)
+ -- ( 0.6664,-0.0343)
+ -- ( 0.6128,-0.0361)
+ -- ( 0.6117,-0.0068)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7573, 0.2817)
+ -- ( 0.7646, 0.2533)
+ -- ( 0.7124, 0.2402)
+ -- ( 0.7053, 0.2686)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7573, 0.2817)
+ -- ( 0.7646, 0.2533)
+ -- ( 0.7124, 0.2402)
+ -- ( 0.7053, 0.2686)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7393, 0.3502)
+ -- ( 0.7456, 0.3216)
+ -- ( 0.6931, 0.3101)
+ -- ( 0.6868, 0.3387)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7393, 0.3502)
+ -- ( 0.7456, 0.3216)
+ -- ( 0.6931, 0.3101)
+ -- ( 0.6868, 0.3387)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8114, 0.0963)
+ -- ( 0.8188, 0.0679)
+ -- ( 0.7668, 0.0543)
+ -- ( 0.7594, 0.0826)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8114, 0.0963)
+ -- ( 0.8188, 0.0679)
+ -- ( 0.7668, 0.0543)
+ -- ( 0.7594, 0.0826)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8247,-0.0115)
+ -- ( 0.8312,-0.0401)
+ -- ( 0.7788,-0.0521)
+ -- ( 0.7723,-0.0235)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8247,-0.0115)
+ -- ( 0.8312,-0.0401)
+ -- ( 0.7788,-0.0521)
+ -- ( 0.7723,-0.0235)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.9279, 0.0392)
+ -- ( 0.9358, 0.0110)
+ -- ( 0.8842,-0.0036)
+ -- ( 0.8762, 0.0245)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.9279, 0.0392)
+ -- ( 0.9358, 0.0110)
+ -- ( 0.8842,-0.0036)
+ -- ( 0.8762, 0.0245)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.9473,-0.0199)
+ -- ( 0.9500,-0.0490)
+ -- ( 0.8965,-0.0540)
+ -- ( 0.8939,-0.0248)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.9473,-0.0199)
+ -- ( 0.9500,-0.0490)
+ -- ( 0.8965,-0.0540)
+ -- ( 0.8939,-0.0248)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8832, 0.1513)
+ -- ( 0.8949, 0.1245)
+ -- ( 0.8456, 0.1031)
+ -- ( 0.8339, 0.1300)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8832, 0.1513)
+ -- ( 0.8949, 0.1245)
+ -- ( 0.8456, 0.1031)
+ -- ( 0.8339, 0.1300)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8604, 0.2135)
+ -- ( 0.8734, 0.1872)
+ -- ( 0.8254, 0.1634)
+ -- ( 0.8123, 0.1896)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8604, 0.2135)
+ -- ( 0.8734, 0.1872)
+ -- ( 0.8254, 0.1634)
+ -- ( 0.8123, 0.1896)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7675, 0.2368)
+ -- ( 0.7736, 0.2082)
+ -- ( 0.7210, 0.1970)
+ -- ( 0.7150, 0.2257)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7675, 0.2368)
+ -- ( 0.7736, 0.2082)
+ -- ( 0.7210, 0.1970)
+ -- ( 0.7150, 0.2257)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7696,-0.1796)
+ -- ( 0.7978,-0.1875)
+ -- ( 0.7835,-0.2392)
+ -- ( 0.7552,-0.2314)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7696,-0.1796)
+ -- ( 0.7978,-0.1875)
+ -- ( 0.7835,-0.2392)
+ -- ( 0.7552,-0.2314)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7546,-0.0830)
+ -- ( 0.7838,-0.0830)
+ -- ( 0.7838,-0.1367)
+ -- ( 0.7546,-0.1367)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7546,-0.0830)
+ -- ( 0.7838,-0.0830)
+ -- ( 0.7838,-0.1367)
+ -- ( 0.7546,-0.1367)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7114,-0.1735)
+ -- ( 0.7402,-0.1784)
+ -- ( 0.7313,-0.2313)
+ -- ( 0.7024,-0.2265)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7114,-0.1735)
+ -- ( 0.7402,-0.1784)
+ -- ( 0.7313,-0.2313)
+ -- ( 0.7024,-0.2265)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6398,-0.0896)
+ -- ( 0.6691,-0.0896)
+ -- ( 0.6691,-0.1433)
+ -- ( 0.6398,-0.1433)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6398,-0.0896)
+ -- ( 0.6691,-0.0896)
+ -- ( 0.6691,-0.1433)
+ -- ( 0.6398,-0.1433)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5390,-0.1093)
+ -- ( 0.5377,-0.0801)
+ -- ( 0.5913,-0.0776)
+ -- ( 0.5927,-0.1069)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5390,-0.1093)
+ -- ( 0.5377,-0.0801)
+ -- ( 0.5913,-0.0776)
+ -- ( 0.5927,-0.1069)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5171,-0.2250)
+ -- ( 0.5252,-0.1968)
+ -- ( 0.5767,-0.2117)
+ -- ( 0.5687,-0.2399)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5171,-0.2250)
+ -- ( 0.5252,-0.1968)
+ -- ( 0.5767,-0.2117)
+ -- ( 0.5687,-0.2399)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5024,-0.2807)
+ -- ( 0.5066,-0.2517)
+ -- ( 0.5597,-0.2597)
+ -- ( 0.5555,-0.2887)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5024,-0.2807)
+ -- ( 0.5066,-0.2517)
+ -- ( 0.5597,-0.2597)
+ -- ( 0.5555,-0.2887)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6783,-0.2717)
+ -- ( 0.7056,-0.2824)
+ -- ( 0.6858,-0.3324)
+ -- ( 0.6585,-0.3216)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6783,-0.2717)
+ -- ( 0.7056,-0.2824)
+ -- ( 0.6858,-0.3324)
+ -- ( 0.6585,-0.3216)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4010,-0.3903)
+ -- ( 0.4019,-0.3609)
+ -- ( 0.4556,-0.3627)
+ -- ( 0.4547,-0.3921)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4010,-0.3903)
+ -- ( 0.4019,-0.3609)
+ -- ( 0.4556,-0.3627)
+ -- ( 0.4547,-0.3921)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6576,-0.1610)
+ -- ( 0.6852,-0.1708)
+ -- ( 0.6672,-0.2214)
+ -- ( 0.6396,-0.2116)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6576,-0.1610)
+ -- ( 0.6852,-0.1708)
+ -- ( 0.6672,-0.2214)
+ -- ( 0.6396,-0.2116)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4024,-0.7175)
+ -- ( 0.4484,-0.7175)
+ -- ( 0.4484,-0.7785)
+ -- ( 0.4024,-0.7785)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4024,-0.7175)
+ -- ( 0.4484,-0.7175)
+ -- ( 0.4484,-0.7785)
+ -- ( 0.4024,-0.7785)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3999,-0.7917)
+ -- (-0.3540,-0.7917)
+ -- (-0.3540,-0.8527)
+ -- (-0.3999,-0.8527)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3999,-0.7917)
+ -- (-0.3540,-0.7917)
+ -- (-0.3540,-0.8527)
+ -- (-0.3999,-0.8527)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7770,-0.2886)
+ -- (-0.7319,-0.2679)
+ -- (-0.6985,-0.3406)
+ -- (-0.7437,-0.3613)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7770,-0.2886)
+ -- (-0.7319,-0.2679)
+ -- (-0.6985,-0.3406)
+ -- (-0.7437,-0.3613)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1783,-0.5367)
+ -- (-0.1339,-0.5483)
+ -- (-0.1492,-0.6074)
+ -- (-0.1937,-0.5958)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1783,-0.5367)
+ -- (-0.1339,-0.5483)
+ -- (-0.1492,-0.6074)
+ -- (-0.1937,-0.5958)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3106,-0.7770)
+ -- ( 0.3564,-0.7770)
+ -- ( 0.3564,-0.8380)
+ -- ( 0.3106,-0.8380)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3106,-0.7770)
+ -- ( 0.3564,-0.7770)
+ -- ( 0.3564,-0.8380)
+ -- ( 0.3106,-0.8380)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0626,-0.7954)
+ -- (-0.0196,-0.8113)
+ -- (-0.0406,-0.8686)
+ -- (-0.0837,-0.8527)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0626,-0.7954)
+ -- (-0.0196,-0.8113)
+ -- (-0.0406,-0.8686)
+ -- (-0.0837,-0.8527)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0570,-0.7843)
+ -- ( 0.1025,-0.7910)
+ -- ( 0.0936,-0.8514)
+ -- ( 0.0481,-0.8446)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0570,-0.7843)
+ -- ( 0.1025,-0.7910)
+ -- ( 0.0936,-0.8514)
+ -- ( 0.0481,-0.8446)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0906,-0.6908)
+ -- ( 0.1345,-0.7046)
+ -- ( 0.1161,-0.7629)
+ -- ( 0.0723,-0.7490)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0906,-0.6908)
+ -- ( 0.1345,-0.7046)
+ -- ( 0.1161,-0.7629)
+ -- ( 0.0723,-0.7490)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4731,-0.7998)
+ -- (-0.4283,-0.7899)
+ -- (-0.4151,-0.8496)
+ -- (-0.4600,-0.8595)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4731,-0.7998)
+ -- (-0.4283,-0.7899)
+ -- (-0.4151,-0.8496)
+ -- (-0.4600,-0.8595)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4125,-0.0879)
+ -- ( 0.4578,-0.0951)
+ -- ( 0.4483,-0.1553)
+ -- ( 0.4029,-0.1481)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4125,-0.0879)
+ -- ( 0.4578,-0.0951)
+ -- ( 0.4483,-0.1553)
+ -- ( 0.4029,-0.1481)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2078, 0.8568)
+ -- ( 0.2536, 0.8583)
+ -- ( 0.2555, 0.7973)
+ -- ( 0.2097, 0.7958)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2078, 0.8568)
+ -- ( 0.2536, 0.8583)
+ -- ( 0.2555, 0.7973)
+ -- ( 0.2097, 0.7958)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5829,-0.2493)
+ -- ( 0.6289,-0.2493)
+ -- ( 0.6289,-0.3104)
+ -- ( 0.5829,-0.3104)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5829,-0.2493)
+ -- ( 0.6289,-0.2493)
+ -- ( 0.6289,-0.3104)
+ -- ( 0.5829,-0.3104)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2923,-0.1390)
+ -- ( 0.3109,-0.0970)
+ -- ( 0.3667,-0.1218)
+ -- ( 0.3481,-0.1638)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2923,-0.1390)
+ -- ( 0.3109,-0.0970)
+ -- ( 0.3667,-0.1218)
+ -- ( 0.3481,-0.1638)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6866,-0.0789)
+ -- ( 0.7324,-0.0789)
+ -- ( 0.7324,-0.1400)
+ -- ( 0.6866,-0.1400)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6866,-0.0789)
+ -- ( 0.7324,-0.0789)
+ -- ( 0.7324,-0.1400)
+ -- ( 0.6866,-0.1400)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8206,-0.0922)
+ -- ( 0.8649,-0.1044)
+ -- ( 0.8487,-0.1632)
+ -- ( 0.8045,-0.1511)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8206,-0.0922)
+ -- ( 0.8649,-0.1044)
+ -- ( 0.8487,-0.1632)
+ -- ( 0.8045,-0.1511)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3075, 0.5809)
+ -- (-0.2648, 0.5640)
+ -- (-0.2872, 0.5072)
+ -- (-0.3299, 0.5241)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3075, 0.5809)
+ -- (-0.2648, 0.5640)
+ -- (-0.2872, 0.5072)
+ -- (-0.3299, 0.5241)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7746, 0.3900)
+ -- (-0.7312, 0.3750)
+ -- (-0.7511, 0.3173)
+ -- (-0.7945, 0.3322)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7746, 0.3900)
+ -- (-0.7312, 0.3750)
+ -- (-0.7511, 0.3173)
+ -- (-0.7945, 0.3322)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8224, 0.3024)
+ -- (-0.7807, 0.2831)
+ -- (-0.8064, 0.2277)
+ -- (-0.8481, 0.2470)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8224, 0.3024)
+ -- (-0.7807, 0.2831)
+ -- (-0.8064, 0.2277)
+ -- (-0.8481, 0.2470)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7172, 0.2999)
+ -- (-0.6959, 0.3406)
+ -- (-0.6418, 0.3122)
+ -- (-0.6632, 0.2715)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7172, 0.2999)
+ -- (-0.6959, 0.3406)
+ -- (-0.6418, 0.3122)
+ -- (-0.6632, 0.2715)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7505, 0.2368)
+ -- (-0.7273, 0.2764)
+ -- (-0.6746, 0.2456)
+ -- (-0.6979, 0.2060)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7505, 0.2368)
+ -- (-0.7273, 0.2764)
+ -- (-0.6746, 0.2456)
+ -- (-0.6979, 0.2060)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7726, 0.1668)
+ -- (-0.7521, 0.2080)
+ -- (-0.6975, 0.1808)
+ -- (-0.7180, 0.1396)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7726, 0.1668)
+ -- (-0.7521, 0.2080)
+ -- (-0.6975, 0.1808)
+ -- (-0.7180, 0.1396)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8067, 0.1033)
+ -- (-0.7877, 0.1452)
+ -- (-0.7322, 0.1199)
+ -- (-0.7512, 0.0781)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8067, 0.1033)
+ -- (-0.7877, 0.1452)
+ -- (-0.7322, 0.1199)
+ -- (-0.7512, 0.0781)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8292, 0.0434)
+ -- (-0.8106, 0.0854)
+ -- (-0.7548, 0.0608)
+ -- (-0.7733, 0.0188)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8292, 0.0434)
+ -- (-0.8106, 0.0854)
+ -- (-0.7548, 0.0608)
+ -- (-0.7733, 0.0188)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8479,-0.0238)
+ -- (-0.8336, 0.0199)
+ -- (-0.7757, 0.0009)
+ -- (-0.7899,-0.0427)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8479,-0.0238)
+ -- (-0.8336, 0.0199)
+ -- (-0.7757, 0.0009)
+ -- (-0.7899,-0.0427)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9015,-0.0795)
+ -- (-0.8746,-0.0423)
+ -- (-0.8252,-0.0782)
+ -- (-0.8521,-0.1153)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9015,-0.0795)
+ -- (-0.8746,-0.0423)
+ -- (-0.8252,-0.0782)
+ -- (-0.8521,-0.1153)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5616,-0.6142)
+ -- (-0.5431,-0.6563)
+ -- (-0.5990,-0.6808)
+ -- (-0.6175,-0.6387)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5616,-0.6142)
+ -- (-0.5431,-0.6563)
+ -- (-0.5990,-0.6808)
+ -- (-0.6175,-0.6387)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0094,-0.6230)
+ -- ( 0.0047,-0.5793)
+ -- ( 0.0627,-0.5978)
+ -- ( 0.0487,-0.6416)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0094,-0.6230)
+ -- ( 0.0047,-0.5793)
+ -- ( 0.0627,-0.5978)
+ -- ( 0.0487,-0.6416)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0303,-0.4683)
+ -- ( 0.0443,-0.4246)
+ -- ( 0.1024,-0.4432)
+ -- ( 0.0884,-0.4869)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0303,-0.4683)
+ -- ( 0.0443,-0.4246)
+ -- ( 0.1024,-0.4432)
+ -- ( 0.0884,-0.4869)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2507,-0.3956)
+ -- (-0.2367,-0.3518)
+ -- (-0.1786,-0.3704)
+ -- (-0.1926,-0.4142)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2507,-0.3956)
+ -- (-0.2367,-0.3518)
+ -- (-0.1786,-0.3704)
+ -- (-0.1926,-0.4142)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3208,-0.3936)
+ -- (-0.3069,-0.3498)
+ -- (-0.2487,-0.3684)
+ -- (-0.2627,-0.4122)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3208,-0.3936)
+ -- (-0.3069,-0.3498)
+ -- (-0.2487,-0.3684)
+ -- (-0.2627,-0.4122)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1634,-0.1430)
+ -- ( 0.1790,-0.0997)
+ -- ( 0.2365,-0.1205)
+ -- ( 0.2209,-0.1637)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1634,-0.1430)
+ -- ( 0.1790,-0.0997)
+ -- ( 0.2365,-0.1205)
+ -- ( 0.2209,-0.1637)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1520,-0.2030)
+ -- ( 0.1715,-0.1614)
+ -- ( 0.2268,-0.1873)
+ -- ( 0.2072,-0.2289)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1520,-0.2030)
+ -- ( 0.1715,-0.1614)
+ -- ( 0.2268,-0.1873)
+ -- ( 0.2072,-0.2289)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0852,-0.3696)
+ -- ( 0.1047,-0.3280)
+ -- ( 0.1600,-0.3540)
+ -- ( 0.1404,-0.3956)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0852,-0.3696)
+ -- ( 0.1047,-0.3280)
+ -- ( 0.1600,-0.3540)
+ -- ( 0.1404,-0.3956)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0197,-0.2063)
+ -- ( 0.0392,-0.1647)
+ -- ( 0.0944,-0.1907)
+ -- ( 0.0750,-0.2323)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0197,-0.2063)
+ -- ( 0.0392,-0.1647)
+ -- ( 0.0944,-0.1907)
+ -- ( 0.0750,-0.2323)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3100, 0.7769)
+ -- ( 0.3513, 0.7971)
+ -- ( 0.3781, 0.7423)
+ -- ( 0.3369, 0.7221)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3100, 0.7769)
+ -- ( 0.3513, 0.7971)
+ -- ( 0.3781, 0.7423)
+ -- ( 0.3369, 0.7221)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5097, 0.3286)
+ -- ( 0.5510, 0.3488)
+ -- ( 0.5778, 0.2940)
+ -- ( 0.5366, 0.2738)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5097, 0.3286)
+ -- ( 0.5510, 0.3488)
+ -- ( 0.5778, 0.2940)
+ -- ( 0.5366, 0.2738)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4014, 0.8173)
+ -- ( 0.4429, 0.8369)
+ -- ( 0.4689, 0.7817)
+ -- ( 0.4274, 0.7621)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4014, 0.8173)
+ -- ( 0.4429, 0.8369)
+ -- ( 0.4689, 0.7817)
+ -- ( 0.4274, 0.7621)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2627, 0.7599)
+ -- ( 0.3055, 0.7765)
+ -- ( 0.3276, 0.7196)
+ -- ( 0.2848, 0.7030)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2627, 0.7599)
+ -- ( 0.3055, 0.7765)
+ -- ( 0.3276, 0.7196)
+ -- ( 0.2848, 0.7030)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1763, 0.7193)
+ -- ( 0.2174, 0.7400)
+ -- ( 0.2448, 0.6855)
+ -- ( 0.2038, 0.6648)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1763, 0.7193)
+ -- ( 0.2174, 0.7400)
+ -- ( 0.2448, 0.6855)
+ -- ( 0.2038, 0.6648)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0655, 0.4707)
+ -- (-0.0222, 0.4555)
+ -- (-0.0424, 0.3979)
+ -- (-0.0858, 0.4131)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0655, 0.4707)
+ -- (-0.0222, 0.4555)
+ -- (-0.0424, 0.3979)
+ -- (-0.0858, 0.4131)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0019, 0.5606)
+ -- ( 0.0452, 0.5454)
+ -- ( 0.0251, 0.4878)
+ -- (-0.0183, 0.5030)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0019, 0.5606)
+ -- ( 0.0452, 0.5454)
+ -- ( 0.0251, 0.4878)
+ -- (-0.0183, 0.5030)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0634, 0.0555)
+ -- ( 0.1067, 0.0403)
+ -- ( 0.0865,-0.0174)
+ -- ( 0.0432,-0.0022)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0634, 0.0555)
+ -- ( 0.1067, 0.0403)
+ -- ( 0.0865,-0.0174)
+ -- ( 0.0432,-0.0022)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0445, 0.0687)
+ -- (-0.0010, 0.0535)
+ -- (-0.0213,-0.0041)
+ -- (-0.0646, 0.0110)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0445, 0.0687)
+ -- (-0.0010, 0.0535)
+ -- (-0.0213,-0.0041)
+ -- (-0.0646, 0.0110)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0541, 0.5519)
+ -- ( 0.0966, 0.5344)
+ -- ( 0.0732, 0.4779)
+ -- ( 0.0308, 0.4956)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0541, 0.5519)
+ -- ( 0.0966, 0.5344)
+ -- ( 0.0732, 0.4779)
+ -- ( 0.0308, 0.4956)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0096, 0.8274)
+ -- ( 0.0163, 0.7820)
+ -- (-0.0441, 0.7731)
+ -- (-0.0508, 0.8185)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0096, 0.8274)
+ -- ( 0.0163, 0.7820)
+ -- (-0.0441, 0.7731)
+ -- (-0.0508, 0.8185)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0878, 0.6237)
+ -- (-0.0810, 0.5783)
+ -- (-0.1415, 0.5693)
+ -- (-0.1482, 0.6147)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0878, 0.6237)
+ -- (-0.0810, 0.5783)
+ -- (-0.1415, 0.5693)
+ -- (-0.1482, 0.6147)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0678, 0.8193)
+ -- (-0.0575, 0.7745)
+ -- (-0.1168, 0.7608)
+ -- (-0.1273, 0.8055)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0678, 0.8193)
+ -- (-0.0575, 0.7745)
+ -- (-0.1168, 0.7608)
+ -- (-0.1273, 0.8055)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1958, 0.8007)
+ -- (-0.1517, 0.7877)
+ -- (-0.1688, 0.7292)
+ -- (-0.2129, 0.7420)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1958, 0.8007)
+ -- (-0.1517, 0.7877)
+ -- (-0.1688, 0.7292)
+ -- (-0.2129, 0.7420)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6001, 0.0672)
+ -- ( 0.6452, 0.0758)
+ -- ( 0.6566, 0.0159)
+ -- ( 0.6115, 0.0072)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6001, 0.0672)
+ -- ( 0.6452, 0.0758)
+ -- ( 0.6566, 0.0159)
+ -- ( 0.6115, 0.0072)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8357, 0.2798)
+ -- ( 0.8514, 0.2365)
+ -- ( 0.7940, 0.2158)
+ -- ( 0.7783, 0.2591)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8357, 0.2798)
+ -- ( 0.8514, 0.2365)
+ -- ( 0.7940, 0.2158)
+ -- ( 0.7783, 0.2591)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4450, 0.0292)
+ -- ( 0.4606,-0.0141)
+ -- ( 0.4032,-0.0348)
+ -- ( 0.3876, 0.0085)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4450, 0.0292)
+ -- ( 0.4606,-0.0141)
+ -- ( 0.4032,-0.0348)
+ -- ( 0.3876, 0.0085)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.9043, 0.1125)
+ -- ( 0.9184, 0.0687)
+ -- ( 0.8603, 0.0500)
+ -- ( 0.8462, 0.0937)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.9043, 0.1125)
+ -- ( 0.9184, 0.0687)
+ -- ( 0.8603, 0.0500)
+ -- ( 0.8462, 0.0937)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7148,-0.2814)
+ -- ( 0.7591,-0.2935)
+ -- ( 0.7430,-0.3524)
+ -- ( 0.6987,-0.3402)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7148,-0.2814)
+ -- ( 0.7591,-0.2935)
+ -- ( 0.7430,-0.3524)
+ -- ( 0.6987,-0.3402)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5891,-0.1425)
+ -- ( 0.5806,-0.1876)
+ -- ( 0.5207,-0.1764)
+ -- ( 0.5291,-0.1313)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5891,-0.1425)
+ -- ( 0.5806,-0.1876)
+ -- ( 0.5207,-0.1764)
+ -- ( 0.5291,-0.1313)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5865, 0.0684)
+ -- ( 0.5782, 0.0233)
+ -- ( 0.5181, 0.0345)
+ -- ( 0.5266, 0.0796)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5865, 0.0684)
+ -- ( 0.5782, 0.0233)
+ -- ( 0.5181, 0.0345)
+ -- ( 0.5266, 0.0796)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4044,-0.3422)
+ -- ( 0.4189,-0.2987)
+ -- ( 0.4768,-0.3180)
+ -- ( 0.4623,-0.3616)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4044,-0.3422)
+ -- ( 0.4189,-0.2987)
+ -- ( 0.4768,-0.3180)
+ -- ( 0.4623,-0.3616)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4665,-0.7188)
+ -- ( 0.5125,-0.7188)
+ -- ( 0.5125,-0.7799)
+ -- ( 0.4665,-0.7799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4665,-0.7188)
+ -- ( 0.5125,-0.7188)
+ -- ( 0.5125,-0.7799)
+ -- ( 0.4665,-0.7799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1285,-0.5747)
+ -- (-0.0826,-0.5747)
+ -- (-0.0826,-0.6356)
+ -- (-0.1285,-0.6356)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1285,-0.5747)
+ -- (-0.0826,-0.5747)
+ -- (-0.0826,-0.6356)
+ -- (-0.1285,-0.6356)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2861,-0.6694)
+ -- (-0.2789,-0.6240)
+ -- (-0.2186,-0.6336)
+ -- (-0.2258,-0.6789)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2861,-0.6694)
+ -- (-0.2789,-0.6240)
+ -- (-0.2186,-0.6336)
+ -- (-0.2258,-0.6789)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1486,-0.3725)
+ -- (-0.1414,-0.3271)
+ -- (-0.0811,-0.3367)
+ -- (-0.0883,-0.3820)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1486,-0.3725)
+ -- (-0.1414,-0.3271)
+ -- (-0.0811,-0.3367)
+ -- (-0.0883,-0.3820)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3576,-0.5916)
+ -- (-0.3319,-0.6297)
+ -- (-0.3826,-0.6638)
+ -- (-0.4082,-0.6256)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3576,-0.5916)
+ -- (-0.3319,-0.6297)
+ -- (-0.3826,-0.6638)
+ -- (-0.4082,-0.6256)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5468,-0.2716)
+ -- (-0.5213,-0.3098)
+ -- (-0.5719,-0.3438)
+ -- (-0.5976,-0.3056)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5468,-0.2716)
+ -- (-0.5213,-0.3098)
+ -- (-0.5719,-0.3438)
+ -- (-0.5976,-0.3056)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4969,-0.5222)
+ -- (-0.4767,-0.5634)
+ -- (-0.5315,-0.5902)
+ -- (-0.5518,-0.5490)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4969,-0.5222)
+ -- (-0.4767,-0.5634)
+ -- (-0.5315,-0.5902)
+ -- (-0.5518,-0.5490)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3963,-0.6922)
+ -- (-0.3778,-0.7343)
+ -- (-0.4338,-0.7588)
+ -- (-0.4522,-0.7168)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3963,-0.6922)
+ -- (-0.3778,-0.7343)
+ -- (-0.4338,-0.7588)
+ -- (-0.4522,-0.7168)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6145,-0.5157)
+ -- (-0.5944,-0.5570)
+ -- (-0.6493,-0.5836)
+ -- (-0.6694,-0.5423)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6145,-0.5157)
+ -- (-0.5944,-0.5570)
+ -- (-0.6493,-0.5836)
+ -- (-0.6694,-0.5423)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8791,-0.2053)
+ -- (-0.8402,-0.1810)
+ -- (-0.8079,-0.2327)
+ -- (-0.8468,-0.2571)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8791,-0.2053)
+ -- (-0.8402,-0.1810)
+ -- (-0.8079,-0.2327)
+ -- (-0.8468,-0.2571)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9144, 0.1039)
+ -- (-0.8919, 0.1439)
+ -- (-0.8388, 0.1140)
+ -- (-0.8613, 0.0740)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9144, 0.1039)
+ -- (-0.8919, 0.1439)
+ -- (-0.8388, 0.1140)
+ -- (-0.8613, 0.0740)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4095, 0.2277)
+ -- (-0.3639, 0.2229)
+ -- (-0.3703, 0.1622)
+ -- (-0.4159, 0.1670)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4095, 0.2277)
+ -- (-0.3639, 0.2229)
+ -- (-0.3703, 0.1622)
+ -- (-0.4159, 0.1670)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3590, 0.4200)
+ -- (-0.3365, 0.4600)
+ -- (-0.2833, 0.4302)
+ -- (-0.3058, 0.3901)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3590, 0.4200)
+ -- (-0.3365, 0.4600)
+ -- (-0.2833, 0.4302)
+ -- (-0.3058, 0.3901)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0764, 0.3204)
+ -- (-0.0539, 0.3604)
+ -- (-0.0007, 0.3306)
+ -- (-0.0232, 0.2905)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0764, 0.3204)
+ -- (-0.0539, 0.3604)
+ -- (-0.0007, 0.3306)
+ -- (-0.0232, 0.2905)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1364, 0.0430)
+ -- (-0.1139, 0.0831)
+ -- (-0.0607, 0.0532)
+ -- (-0.0832, 0.0131)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1364, 0.0430)
+ -- (-0.1139, 0.0831)
+ -- (-0.0607, 0.0532)
+ -- (-0.0832, 0.0131)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1269, 0.1239)
+ -- (-0.1149, 0.1681)
+ -- (-0.0560, 0.1521)
+ -- (-0.0681, 0.1078)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1269, 0.1239)
+ -- (-0.1149, 0.1681)
+ -- (-0.0560, 0.1521)
+ -- (-0.0681, 0.1078)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6443,-0.1022)
+ -- (-0.6321,-0.0579)
+ -- (-0.5733,-0.0740)
+ -- (-0.5854,-0.1183)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6443,-0.1022)
+ -- (-0.6321,-0.0579)
+ -- (-0.5733,-0.0740)
+ -- (-0.5854,-0.1183)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6032, 0.2357)
+ -- (-0.5912, 0.2800)
+ -- (-0.5323, 0.2639)
+ -- (-0.5443, 0.2196)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6032, 0.2357)
+ -- (-0.5912, 0.2800)
+ -- (-0.5323, 0.2639)
+ -- (-0.5443, 0.2196)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7230, 0.0020)
+ -- (-0.7026, 0.0432)
+ -- (-0.6479, 0.0162)
+ -- (-0.6682,-0.0250)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7230, 0.0020)
+ -- (-0.7026, 0.0432)
+ -- (-0.6479, 0.0162)
+ -- (-0.6682,-0.0250)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5055, 0.2596)
+ -- (-0.4629, 0.2423)
+ -- (-0.4859, 0.1858)
+ -- (-0.5285, 0.2031)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5055, 0.2596)
+ -- (-0.4629, 0.2423)
+ -- (-0.4859, 0.1858)
+ -- (-0.5285, 0.2031)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1337, 0.3296)
+ -- ( 0.1283, 0.2840)
+ -- ( 0.0677, 0.2911)
+ -- ( 0.0731, 0.3367)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1337, 0.3296)
+ -- ( 0.1283, 0.2840)
+ -- ( 0.0677, 0.2911)
+ -- ( 0.0731, 0.3367)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1476, 0.4414)
+ -- ( 0.1506, 0.3955)
+ -- ( 0.0897, 0.3916)
+ -- ( 0.0867, 0.4375)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1476, 0.4414)
+ -- ( 0.1506, 0.3955)
+ -- ( 0.0897, 0.3916)
+ -- ( 0.0867, 0.4375)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0539,-0.1542)
+ -- ( 0.0687,-0.1107)
+ -- ( 0.1264,-0.1304)
+ -- ( 0.1116,-0.1738)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0539,-0.1542)
+ -- ( 0.0687,-0.1107)
+ -- ( 0.1264,-0.1304)
+ -- ( 0.1116,-0.1738)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0962,-0.1436)
+ -- (-0.0814,-0.1001)
+ -- (-0.0237,-0.1198)
+ -- (-0.0385,-0.1633)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0962,-0.1436)
+ -- (-0.0814,-0.1001)
+ -- (-0.0237,-0.1198)
+ -- (-0.0385,-0.1633)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1683,-0.0622)
+ -- (-0.1535,-0.0188)
+ -- (-0.0958,-0.0385)
+ -- (-0.1106,-0.0820)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1683,-0.0622)
+ -- (-0.1535,-0.0188)
+ -- (-0.0958,-0.0385)
+ -- (-0.1106,-0.0820)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1842,-0.1310)
+ -- (-0.1694,-0.0876)
+ -- (-0.1116,-0.1073)
+ -- (-0.1264,-0.1508)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1842,-0.1310)
+ -- (-0.1694,-0.0876)
+ -- (-0.1116,-0.1073)
+ -- (-0.1264,-0.1508)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1167,-0.5813)
+ -- ( 0.1315,-0.5379)
+ -- ( 0.1892,-0.5576)
+ -- ( 0.1744,-0.6011)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1167,-0.5813)
+ -- ( 0.1315,-0.5379)
+ -- ( 0.1892,-0.5576)
+ -- ( 0.1744,-0.6011)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0916,-0.6322)
+ -- ( 0.1064,-0.5888)
+ -- ( 0.1642,-0.6085)
+ -- ( 0.1493,-0.6520)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0916,-0.6322)
+ -- ( 0.1064,-0.5888)
+ -- ( 0.1642,-0.6085)
+ -- ( 0.1493,-0.6520)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3791,-0.5978)
+ -- ( 0.3941,-0.5544)
+ -- ( 0.4518,-0.5741)
+ -- ( 0.4369,-0.6176)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3791,-0.5978)
+ -- ( 0.3941,-0.5544)
+ -- ( 0.4518,-0.5741)
+ -- ( 0.4369,-0.6176)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4116,-0.5397)
+ -- ( 0.4392,-0.5029)
+ -- ( 0.4880,-0.5396)
+ -- ( 0.4604,-0.5764)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4116,-0.5397)
+ -- ( 0.4392,-0.5029)
+ -- ( 0.4880,-0.5396)
+ -- ( 0.4604,-0.5764)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2218,-0.5853)
+ -- ( 0.2366,-0.5418)
+ -- ( 0.2944,-0.5615)
+ -- ( 0.2796,-0.6051)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2218,-0.5853)
+ -- ( 0.2366,-0.5418)
+ -- ( 0.2944,-0.5615)
+ -- ( 0.2796,-0.6051)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3094, 0.1262)
+ -- ( 0.3519, 0.1085)
+ -- ( 0.3284, 0.0522)
+ -- ( 0.2860, 0.0698)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3094, 0.1262)
+ -- ( 0.3519, 0.1085)
+ -- ( 0.3284, 0.0522)
+ -- ( 0.2860, 0.0698)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2797, 0.1784)
+ -- ( 0.3041, 0.1395)
+ -- ( 0.2524, 0.1070)
+ -- ( 0.2280, 0.1459)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2797, 0.1784)
+ -- ( 0.3041, 0.1395)
+ -- ( 0.2524, 0.1070)
+ -- ( 0.2280, 0.1459)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7950, 0.1548)
+ -- ( 0.8065, 0.1103)
+ -- ( 0.7475, 0.0949)
+ -- ( 0.7359, 0.1394)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7950, 0.1548)
+ -- ( 0.8065, 0.1103)
+ -- ( 0.7475, 0.0949)
+ -- ( 0.7359, 0.1394)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5739, 0.6926)
+ -- ( 0.5961, 0.6525)
+ -- ( 0.5427, 0.6229)
+ -- ( 0.5205, 0.6632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5739, 0.6926)
+ -- ( 0.5961, 0.6525)
+ -- ( 0.5427, 0.6229)
+ -- ( 0.5205, 0.6632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6499, 0.5535)
+ -- ( 0.6714, 0.5129)
+ -- ( 0.6174, 0.4844)
+ -- ( 0.5959, 0.5250)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6499, 0.5535)
+ -- ( 0.6714, 0.5129)
+ -- ( 0.6174, 0.4844)
+ -- ( 0.5959, 0.5250)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4994, 0.7998)
+ -- (-0.4558, 0.8143)
+ -- (-0.4364, 0.7565)
+ -- (-0.4800, 0.7419)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4994, 0.7998)
+ -- (-0.4558, 0.8143)
+ -- (-0.4364, 0.7565)
+ -- (-0.4800, 0.7419)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3350, 0.7630)
+ -- (-0.2917, 0.7475)
+ -- (-0.3125, 0.6901)
+ -- (-0.3558, 0.7057)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3350, 0.7630)
+ -- (-0.2917, 0.7475)
+ -- (-0.3125, 0.6901)
+ -- (-0.3558, 0.7057)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4472, 0.6282)
+ -- (-0.4040, 0.6124)
+ -- (-0.4252, 0.5551)
+ -- (-0.4683, 0.5710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4472, 0.6282)
+ -- (-0.4040, 0.6124)
+ -- (-0.4252, 0.5551)
+ -- (-0.4683, 0.5710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5200, 0.6603)
+ -- (-0.4792, 0.6394)
+ -- (-0.5070, 0.5851)
+ -- (-0.5480, 0.6061)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5200, 0.6603)
+ -- (-0.4792, 0.6394)
+ -- (-0.5070, 0.5851)
+ -- (-0.5480, 0.6061)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5301, 0.5359)
+ -- (-0.4915, 0.5109)
+ -- (-0.5247, 0.4597)
+ -- (-0.5633, 0.4846)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5301, 0.5359)
+ -- (-0.4915, 0.5109)
+ -- (-0.5247, 0.4597)
+ -- (-0.5633, 0.4846)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6860, 0.5063)
+ -- (-0.6426, 0.4914)
+ -- (-0.6624, 0.4337)
+ -- (-0.7058, 0.4486)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6860, 0.5063)
+ -- (-0.6426, 0.4914)
+ -- (-0.6624, 0.4337)
+ -- (-0.7058, 0.4486)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5849, 0.4574)
+ -- (-0.5414, 0.4425)
+ -- (-0.5613, 0.3847)
+ -- (-0.6047, 0.3997)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5849, 0.4574)
+ -- (-0.5414, 0.4425)
+ -- (-0.5613, 0.3847)
+ -- (-0.6047, 0.3997)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4531,-0.1794)
+ -- (-0.4094,-0.1941)
+ -- (-0.4289,-0.2518)
+ -- (-0.4725,-0.2372)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4531,-0.1794)
+ -- (-0.4094,-0.1941)
+ -- (-0.4289,-0.2518)
+ -- (-0.4725,-0.2372)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3573, 0.0277)
+ -- (-0.3138, 0.0131)
+ -- (-0.3333,-0.0447)
+ -- (-0.3768,-0.0300)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3573, 0.0277)
+ -- (-0.3138, 0.0131)
+ -- (-0.3333,-0.0447)
+ -- (-0.3768,-0.0300)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3354,-0.4695)
+ -- ( 0.3141,-0.5101)
+ -- ( 0.2601,-0.4816)
+ -- ( 0.2815,-0.4410)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3354,-0.4695)
+ -- ( 0.3141,-0.5101)
+ -- ( 0.2601,-0.4816)
+ -- ( 0.2815,-0.4410)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6206,-0.4111)
+ -- ( 0.6599,-0.4350)
+ -- ( 0.6281,-0.4872)
+ -- ( 0.5889,-0.4632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6206,-0.4111)
+ -- ( 0.6599,-0.4350)
+ -- ( 0.6281,-0.4872)
+ -- ( 0.5889,-0.4632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6061,-0.5834)
+ -- ( 0.6495,-0.5984)
+ -- ( 0.6296,-0.6561)
+ -- ( 0.5861,-0.6411)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6061,-0.5834)
+ -- ( 0.6495,-0.5984)
+ -- ( 0.6296,-0.6561)
+ -- ( 0.5861,-0.6411)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2902, 0.2707)
+ -- ( 0.3361, 0.2673)
+ -- ( 0.3317, 0.2065)
+ -- ( 0.2859, 0.2098)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2902, 0.2707)
+ -- ( 0.3361, 0.2673)
+ -- ( 0.3317, 0.2065)
+ -- ( 0.2859, 0.2098)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2215, 0.2766)
+ -- ( 0.2673, 0.2733)
+ -- ( 0.2630, 0.2124)
+ -- ( 0.2172, 0.2157)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2215, 0.2766)
+ -- ( 0.2673, 0.2733)
+ -- ( 0.2630, 0.2124)
+ -- ( 0.2172, 0.2157)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0159, 0.4498)
+ -- ( 0.0299, 0.4466)
+ -- ( 0.0256, 0.3857)
+ -- (-0.0202, 0.3889)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0159, 0.4498)
+ -- ( 0.0299, 0.4466)
+ -- ( 0.0256, 0.3857)
+ -- (-0.0202, 0.3889)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0377, 0.1701)
+ -- ( 0.0835, 0.1668)
+ -- ( 0.0791, 0.1060)
+ -- ( 0.0333, 0.1092)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0377, 0.1701)
+ -- ( 0.0835, 0.1668)
+ -- ( 0.0791, 0.1060)
+ -- ( 0.0333, 0.1092)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0944, 0.1648)
+ -- ( 0.1403, 0.1657)
+ -- ( 0.1415, 0.1047)
+ -- ( 0.0955, 0.1038)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0944, 0.1648)
+ -- ( 0.1403, 0.1657)
+ -- ( 0.1415, 0.1047)
+ -- ( 0.0955, 0.1038)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2434, 0.4429)
+ -- ( 0.2698, 0.4054)
+ -- ( 0.2199, 0.3702)
+ -- ( 0.1935, 0.4077)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2434, 0.4429)
+ -- ( 0.2698, 0.4054)
+ -- ( 0.2199, 0.3702)
+ -- ( 0.1935, 0.4077)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4777, 0.5914)
+ -- ( 0.4980, 0.5501)
+ -- ( 0.4432, 0.5232)
+ -- ( 0.4229, 0.5644)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4777, 0.5914)
+ -- ( 0.4980, 0.5501)
+ -- ( 0.4432, 0.5232)
+ -- ( 0.4229, 0.5644)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4936, 0.5331)
+ -- ( 0.5191, 0.4949)
+ -- ( 0.4683, 0.4611)
+ -- ( 0.4428, 0.4993)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4936, 0.5331)
+ -- ( 0.5191, 0.4949)
+ -- ( 0.4683, 0.4611)
+ -- ( 0.4428, 0.4993)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4667, 0.4393)
+ -- ( 0.4871, 0.3980)
+ -- ( 0.4323, 0.3711)
+ -- ( 0.4120, 0.4123)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4667, 0.4393)
+ -- ( 0.4871, 0.3980)
+ -- ( 0.4323, 0.3711)
+ -- ( 0.4120, 0.4123)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2446,-0.1495)
+ -- (-0.2153,-0.1488)
+ -- (-0.2138,-0.2024)
+ -- (-0.2431,-0.2032)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2446,-0.1495)
+ -- (-0.2153,-0.1488)
+ -- (-0.2138,-0.2024)
+ -- (-0.2431,-0.2032)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1018, 0.2179)
+ -- (-0.0915, 0.2454)
+ -- (-0.0412, 0.2264)
+ -- (-0.0516, 0.1989)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1018, 0.2179)
+ -- (-0.0915, 0.2454)
+ -- (-0.0412, 0.2264)
+ -- (-0.0516, 0.1989)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4189, 0.2515)
+ -- ( 0.4645, 0.2567)
+ -- ( 0.4714, 0.1960)
+ -- ( 0.4257, 0.1909)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4189, 0.2515)
+ -- ( 0.4645, 0.2567)
+ -- ( 0.4714, 0.1960)
+ -- ( 0.4257, 0.1909)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5784, 0.2650)
+ -- ( 0.6240, 0.2702)
+ -- ( 0.6308, 0.2095)
+ -- ( 0.5852, 0.2043)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5784, 0.2650)
+ -- ( 0.6240, 0.2702)
+ -- ( 0.6308, 0.2095)
+ -- ( 0.5852, 0.2043)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5509, 0.4874)
+ -- ( 0.5966, 0.4925)
+ -- ( 0.6034, 0.4319)
+ -- ( 0.5577, 0.4267)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5509, 0.4874)
+ -- ( 0.5966, 0.4925)
+ -- ( 0.6034, 0.4319)
+ -- ( 0.5577, 0.4267)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1390, 0.6195)
+ -- ( 0.1654, 0.5820)
+ -- ( 0.1155, 0.5468)
+ -- ( 0.0890, 0.5843)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1390, 0.6195)
+ -- ( 0.1654, 0.5820)
+ -- ( 0.1155, 0.5468)
+ -- ( 0.0890, 0.5843)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1780,-0.4082)
+ -- (-0.1533,-0.3695)
+ -- (-0.1018,-0.4023)
+ -- (-0.1265,-0.4410)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1780,-0.4082)
+ -- (-0.1533,-0.3695)
+ -- (-0.1018,-0.4023)
+ -- (-0.1265,-0.4410)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2611,-0.2396)
+ -- (-0.2175,-0.2543)
+ -- (-0.2370,-0.3121)
+ -- (-0.2805,-0.2974)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2611,-0.2396)
+ -- (-0.2175,-0.2543)
+ -- (-0.2370,-0.3121)
+ -- (-0.2805,-0.2974)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1640,-0.8299)
+ -- ( 0.1872,-0.8299)
+ -- ( 0.1872,-0.8565)
+ -- ( 0.1640,-0.8565)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1640,-0.8299)
+ -- ( 0.1872,-0.8299)
+ -- ( 0.1872,-0.8565)
+ -- ( 0.1640,-0.8565)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1330,-0.7413)
+ -- (-0.1099,-0.7413)
+ -- (-0.1099,-0.7679)
+ -- (-0.1330,-0.7679)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1330,-0.7413)
+ -- (-0.1099,-0.7413)
+ -- (-0.1099,-0.7679)
+ -- (-0.1330,-0.7679)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3280,-0.8061)
+ -- (-0.3049,-0.8061)
+ -- (-0.3049,-0.8327)
+ -- (-0.3280,-0.8327)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3280,-0.8061)
+ -- (-0.3049,-0.8061)
+ -- (-0.3049,-0.8327)
+ -- (-0.3280,-0.8327)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7302,-0.0754)
+ -- (-0.7099,-0.0866)
+ -- (-0.7228,-0.1099)
+ -- (-0.7430,-0.0988)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7302,-0.0754)
+ -- (-0.7099,-0.0866)
+ -- (-0.7228,-0.1099)
+ -- (-0.7430,-0.0988)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0147, 0.1985)
+ -- ( 0.0078, 0.1934)
+ -- ( 0.0020, 0.1675)
+ -- (-0.0206, 0.1726)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0147, 0.1985)
+ -- ( 0.0078, 0.1934)
+ -- ( 0.0020, 0.1675)
+ -- (-0.0206, 0.1726)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7613, 0.0272)
+ -- ( 0.7841, 0.0313)
+ -- ( 0.7889, 0.0050)
+ -- ( 0.7661, 0.0009)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7613, 0.0272)
+ -- ( 0.7841, 0.0313)
+ -- ( 0.7889, 0.0050)
+ -- ( 0.7661, 0.0009)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0160, 0.0427)
+ -- ( 0.0379, 0.0352)
+ -- ( 0.0294, 0.0100)
+ -- ( 0.0075, 0.0174)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0160, 0.0427)
+ -- ( 0.0379, 0.0352)
+ -- ( 0.0294, 0.0100)
+ -- ( 0.0075, 0.0174)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3515,-0.2403)
+ -- ( 0.3743,-0.2442)
+ -- ( 0.3697,-0.2705)
+ -- ( 0.3469,-0.2665)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3515,-0.2403)
+ -- ( 0.3743,-0.2442)
+ -- ( 0.3697,-0.2705)
+ -- ( 0.3469,-0.2665)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0718, 0.3637)
+ -- ( 0.0933, 0.3723)
+ -- ( 0.1032, 0.3476)
+ -- ( 0.0817, 0.3390)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0718, 0.3637)
+ -- ( 0.0933, 0.3723)
+ -- ( 0.1032, 0.3476)
+ -- ( 0.0817, 0.3390)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2555, 0.2647)
+ -- (-0.2413, 0.2902)
+ -- (-0.1944, 0.2641)
+ -- (-0.2086, 0.2385)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2555, 0.2647)
+ -- (-0.2413, 0.2902)
+ -- (-0.1944, 0.2641)
+ -- (-0.2086, 0.2385)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2832, 0.1509)
+ -- (-0.2826, 0.1802)
+ -- (-0.2289, 0.1792)
+ -- (-0.2295, 0.1498)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2832, 0.1509)
+ -- (-0.2826, 0.1802)
+ -- (-0.2289, 0.1792)
+ -- (-0.2295, 0.1498)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5694, 0.6977)
+ -- (-0.5248, 0.6870)
+ -- (-0.5390, 0.6277)
+ -- (-0.5837, 0.6384)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5694, 0.6977)
+ -- (-0.5248, 0.6870)
+ -- (-0.5390, 0.6277)
+ -- (-0.5837, 0.6384)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6046, 0.6071)
+ -- (-0.5747, 0.5723)
+ -- (-0.6210, 0.5326)
+ -- (-0.6509, 0.5674)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6046, 0.6071)
+ -- (-0.5747, 0.5723)
+ -- (-0.6210, 0.5326)
+ -- (-0.6509, 0.5674)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2915,-0.1208)
+ -- (-0.2462,-0.1288)
+ -- (-0.2569,-0.1889)
+ -- (-0.3021,-0.1809)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2915,-0.1208)
+ -- (-0.2462,-0.1288)
+ -- (-0.2569,-0.1889)
+ -- (-0.3021,-0.1809)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1636, 0.0236)
+ -- ( 0.2095, 0.0215)
+ -- ( 0.2067,-0.0394)
+ -- ( 0.1608,-0.0374)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1636, 0.0236)
+ -- ( 0.2095, 0.0215)
+ -- ( 0.2067,-0.0394)
+ -- ( 0.1608,-0.0374)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0653,-0.5296)
+ -- (-0.0423,-0.5269)
+ -- (-0.0391,-0.5533)
+ -- (-0.0621,-0.5560)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0653,-0.5296)
+ -- (-0.0423,-0.5269)
+ -- (-0.0391,-0.5533)
+ -- (-0.0621,-0.5560)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3393, 0.1912)
+ -- (-0.3173, 0.1843)
+ -- (-0.3254, 0.1589)
+ -- (-0.3474, 0.1659)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3393, 0.1912)
+ -- (-0.3173, 0.1843)
+ -- (-0.3254, 0.1589)
+ -- (-0.3474, 0.1659)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2247, 0.5875)
+ -- (-0.2027, 0.5801)
+ -- (-0.2113, 0.5549)
+ -- (-0.2332, 0.5623)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2247, 0.5875)
+ -- (-0.2027, 0.5801)
+ -- (-0.2113, 0.5549)
+ -- (-0.2332, 0.5623)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3747, 0.1590)
+ -- ( 0.4022, 0.1690)
+ -- ( 0.4206, 0.1185)
+ -- ( 0.3930, 0.1085)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3747, 0.1590)
+ -- ( 0.4022, 0.1690)
+ -- ( 0.4206, 0.1185)
+ -- ( 0.3930, 0.1085)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/light_woods.dtx b/macros/latex/contrib/wargame/source/hex/terrain/light_woods.dtx
new file mode 100644
index 0000000000..ee15f5ce78
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/light_woods.dtx
@@ -0,0 +1,848 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/light woods}
+% The draw style for light woods. The pattern is filled with light
+% green, and outline is not drawn.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/light woods/.style={
+ draw=none,
+ fill={rgb,100:red,69;green,98;blue,69}
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{hex/terrain/light woods}
+% Next, we have light woods.
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/light woods/.pic={
+ \path[hex/terrain/light woods,pic actions,draw=none]
+ (-0.4795, 0.8736)
+ -- (-0.5104, 0.8207)
+ .. controls (-0.5041, 0.8191) and (-0.4967, 0.8182) .. (-0.4854, 0.8192)
+ -- (-0.4770, 0.8108)
+ -- (-0.4854, 0.7856)
+ -- (-0.5190, 0.8023)
+ .. controls (-0.5219, 0.7975) and (-0.5245, 0.7958) .. (-0.5272, 0.7916)
+ -- (-0.5881, 0.6872)
+ .. controls (-0.5849, 0.6876) and (-0.5819, 0.6876) .. (-0.5782, 0.6885)
+ .. controls (-0.5524, 0.6946) and (-0.5387, 0.7153) .. (-0.5182, 0.7298)
+ .. controls (-0.4841, 0.7540) and (-0.4420, 0.7539) .. (-0.4346, 0.7864)
+ .. controls (-0.4295, 0.8088) and (-0.4470, 0.8265) .. (-0.4572, 0.8444)
+ .. controls (-0.4631, 0.8549) and (-0.4670, 0.8646) .. (-0.4707, 0.8736)
+ --cycle
+ (-0.3185, 0.8722)
+ .. controls (-0.3478, 0.8487) and (-0.3526, 0.8080) .. (-0.3290, 0.7808)
+ .. controls (-0.3140, 0.7633) and (-0.2394, 0.7433) .. (-0.2165, 0.7459)
+ .. controls (-0.1895, 0.7488) and (-0.1787, 0.7643) .. (-0.1561, 0.7725)
+ .. controls (-0.1380, 0.7791) and (-0.1179, 0.7766) .. (-0.1025, 0.7906)
+ .. controls (-0.0719, 0.8182) and (-0.0936, 0.8427) .. (-0.1240, 0.8528)
+ -- (-0.1323, 0.8192)
+ -- (-0.1912, 0.8359)
+ .. controls (-0.1985, 0.8023) and (-0.1999, 0.7965) .. (-0.2332, 0.7856)
+ .. controls (-0.2512, 0.8363) and (-0.2775, 0.8009) .. (-0.2909, 0.8240)
+ .. controls (-0.2975, 0.8355) and (-0.2884, 0.8535) .. (-0.2756, 0.8719)
+ --cycle
+ (-0.1660, 0.8709)
+ .. controls (-0.1609, 0.8538) and (-0.1460, 0.8596) .. (-0.1371, 0.8707)
+ --cycle
+ ( 0.0768, 0.8689)
+ .. controls ( 0.0767, 0.8688) and ( 0.0765, 0.8686) .. ( 0.0764, 0.8685)
+ .. controls ( 0.0704, 0.8503) and ( 0.0779, 0.7592) .. ( 0.1533, 0.7700)
+ .. controls ( 0.1955, 0.7761) and ( 0.1956, 0.8018) .. ( 0.1871, 0.8359)
+ -- ( 0.1366, 0.8108)
+ -- ( 0.1510, 0.8683)
+ --cycle
+ ( 0.1840, 0.8680)
+ .. controls ( 0.1910, 0.8650) and ( 0.1993, 0.8662) .. ( 0.2081, 0.8678)
+ --cycle
+ ( 0.2214, 0.8677)
+ -- ( 0.2459, 0.7939)
+ .. controls ( 0.1903, 0.7716) and ( 0.2267, 0.7399) .. ( 0.2534, 0.7490)
+ .. controls ( 0.2925, 0.7624) and ( 0.2842, 0.8066) .. ( 0.2735, 0.8359)
+ .. controls ( 0.2690, 0.8483) and ( 0.2655, 0.8586) .. ( 0.2619, 0.8674)
+ --cycle
+ ( 0.4057, 0.8661)
+ .. controls ( 0.4149, 0.8349) and ( 0.4483, 0.8068) .. ( 0.4873, 0.8349)
+ .. controls ( 0.4993, 0.8436) and ( 0.5001, 0.8496) .. ( 0.5065, 0.8612)
+ .. controls ( 0.5170, 0.8447) and ( 0.5269, 0.8297) .. ( 0.5405, 0.8189)
+ -- ( 0.5145, 0.8652)
+ --cycle
+ (-0.0288, 0.8391)
+ .. controls (-0.0335, 0.8388) and (-0.0390, 0.8377) .. (-0.0453, 0.8356)
+ .. controls (-0.0698, 0.8019) and (-0.0347, 0.7882) .. (-0.0173, 0.7966)
+ .. controls ( 0.0001, 0.8052) and ( 0.0042, 0.8413) .. (-0.0288, 0.8391)
+ --cycle
+ ( 0.3888, 0.7856)
+ -- ( 0.3719, 0.7687)
+ -- ( 0.3719, 0.7604)
+ -- ( 0.3888, 0.7435)
+ -- ( 0.3972, 0.7435)
+ -- ( 0.4140, 0.7604)
+ --cycle
+ (-0.0821, 0.7138)
+ .. controls (-0.0999, 0.7158) and (-0.1171, 0.7050) .. (-0.1211, 0.6922)
+ .. controls (-0.1297, 0.6650) and (-0.0695, 0.6250) .. (-0.0468, 0.6186)
+ .. controls (-0.0352, 0.6169) and (-0.0107, 0.6175) .. ( 0.0022, 0.6186)
+ .. controls (-0.0326, 0.5765) and (-0.0411, 0.5767) .. (-0.0909, 0.5922)
+ .. controls (-0.0924, 0.5799) and (-0.0959, 0.5731) .. (-0.0909, 0.5597)
+ .. controls (-0.0591, 0.4605) and ( 0.1221, 0.6255) .. ( 0.0020, 0.6581)
+ .. controls (-0.0090, 0.6597) and (-0.0281, 0.6592) .. (-0.0399, 0.6581)
+ .. controls (-0.0462, 0.6969) and (-0.0645, 0.7118) .. (-0.0821, 0.7138)
+ --cycle
+ ( 0.3704, 0.7106)
+ .. controls ( 0.3510, 0.7072) and ( 0.3332, 0.6943) .. ( 0.3224, 0.6679)
+ .. controls ( 0.3172, 0.6530) and ( 0.3220, 0.6121) .. ( 0.3224, 0.5922)
+ -- ( 0.3056, 0.6154)
+ .. controls ( 0.2531, 0.6742) and ( 0.2322, 0.5554) .. ( 0.2966, 0.5454)
+ .. controls ( 0.3239, 0.5412) and ( 0.3417, 0.5630) .. ( 0.3972, 0.5670)
+ .. controls ( 0.4005, 0.5473) and ( 0.4019, 0.5314) .. ( 0.4237, 0.5231)
+ .. controls ( 0.4541, 0.5116) and ( 0.4961, 0.5392) .. ( 0.4841, 0.5736)
+ .. controls ( 0.4794, 0.5870) and ( 0.4556, 0.5991) .. ( 0.4331, 0.6106)
+ .. controls ( 0.4972, 0.6497) and ( 0.4277, 0.7210) .. ( 0.3704, 0.7106)
+ --cycle
+ (-0.4679, 0.7004)
+ .. controls (-0.5116, 0.6983) and (-0.4629, 0.6153) .. (-0.4266, 0.6632)
+ .. controls (-0.4200, 0.6718) and (-0.4201, 0.6786) .. (-0.4182, 0.6846)
+ -- (-0.4434, 0.6958)
+ .. controls (-0.4536, 0.6993) and (-0.4618, 0.7007) .. (-0.4679, 0.7004)
+ --cycle
+ ( 0.5653, 0.7002)
+ .. controls ( 0.5661, 0.6911) and ( 0.5658, 0.6799) .. ( 0.5704, 0.6702)
+ .. controls ( 0.5856, 0.6381) and ( 0.6183, 0.6504) .. ( 0.6246, 0.6688)
+ -- ( 0.6102, 0.6944)
+ .. controls ( 0.6066, 0.6965) and ( 0.6036, 0.6986) .. ( 0.5984, 0.7002)
+ .. controls ( 0.5884, 0.7016) and ( 0.5757, 0.7012) .. ( 0.5653, 0.7002)
+ --cycle
+ ( 0.1310, 0.6925)
+ .. controls ( 0.1003, 0.6568) and ( 0.1392, 0.6414) .. ( 0.1582, 0.6530)
+ .. controls ( 0.1772, 0.6646) and ( 0.1778, 0.7030) .. ( 0.1310, 0.6925)
+ --cycle
+ (-0.3425, 0.6846)
+ .. controls (-0.3485, 0.6703) and (-0.3540, 0.6584) .. (-0.3564, 0.6427)
+ .. controls (-0.3714, 0.5438) and (-0.2673, 0.5839) .. (-0.3103, 0.6583)
+ .. controls (-0.3198, 0.6747) and (-0.3272, 0.6765) .. (-0.3425, 0.6846)
+ --cycle
+ (-0.1828, 0.6763)
+ .. controls (-0.2468, 0.6411) and (-0.2396, 0.5532) .. (-0.1659, 0.5602)
+ .. controls (-0.1273, 0.5639) and (-0.0946, 0.6066) .. (-0.1492, 0.6258)
+ -- (-0.1828, 0.6006)
+ --cycle
+ ( 0.3972, 0.6763)
+ -- ( 0.4287, 0.6131)
+ .. controls ( 0.4206, 0.6173) and ( 0.4113, 0.6217) .. ( 0.4056, 0.6258)
+ -- ( 0.3719, 0.6006)
+ .. controls ( 0.3635, 0.6415) and ( 0.3652, 0.6489) .. ( 0.3972, 0.6763)
+ --cycle
+ ( 0.5737, 0.6319)
+ -- ( 0.5485, 0.6258)
+ .. controls ( 0.5516, 0.6201) and ( 0.5520, 0.6138) .. ( 0.5614, 0.6043)
+ .. controls ( 0.6074, 0.5569) and ( 0.6453, 0.6371) .. ( 0.5737, 0.6319)
+ --cycle
+ (-0.6211, 0.6305)
+ -- (-0.6755, 0.5370)
+ -- (-0.6787, 0.5166)
+ .. controls (-0.6809, 0.5180) and (-0.6832, 0.5188) .. (-0.6854, 0.5203)
+ -- (-0.7191, 0.4623)
+ -- (-0.7291, 0.4073)
+ .. controls (-0.7367, 0.4126) and (-0.7403, 0.4136) .. (-0.7456, 0.4169)
+ -- (-0.7651, 0.3834)
+ .. controls (-0.7455, 0.3798) and (-0.7239, 0.3727) .. (-0.7052, 0.3845)
+ .. controls (-0.6739, 0.3993) and (-0.6763, 0.4662) .. (-0.6703, 0.4998)
+ .. controls (-0.6178, 0.4665) and (-0.6044, 0.4826) .. (-0.5611, 0.5204)
+ .. controls (-0.5440, 0.5353) and (-0.5267, 0.5491) .. (-0.5345, 0.5748)
+ .. controls (-0.5466, 0.6149) and (-0.5841, 0.6243) .. (-0.6211, 0.6305)
+ --cycle
+ (-0.6450, 0.5670)
+ -- (-0.5862, 0.5670)
+ .. controls (-0.6029, 0.5328) and (-0.6086, 0.5274) .. (-0.6450, 0.5166)
+ --cycle
+ ( 0.5940, 0.5141)
+ .. controls ( 0.5876, 0.5135) and ( 0.5814, 0.5119) .. ( 0.5737, 0.5105)
+ .. controls ( 0.5529, 0.5005) and ( 0.5203, 0.4878) .. ( 0.5123, 0.4644)
+ .. controls ( 0.5022, 0.4349) and ( 0.5312, 0.3332) .. ( 0.5982, 0.3551)
+ .. controls ( 0.6173, 0.3612) and ( 0.6614, 0.3963) .. ( 0.6651, 0.4168)
+ .. controls ( 0.6700, 0.4432) and ( 0.6406, 0.5019) .. ( 0.6149, 0.5105)
+ .. controls ( 0.6066, 0.5139) and ( 0.6003, 0.5146) .. ( 0.5940, 0.5141)
+ --cycle
+ ( 0.0525, 0.5036)
+ .. controls ( 0.0223, 0.5016) and ( 0.0014, 0.4715) .. (-0.0147, 0.4493)
+ .. controls (-0.0480, 0.4823) and (-0.1271, 0.5502) .. (-0.1240, 0.4493)
+ -- (-0.0819, 0.4661)
+ .. controls (-0.0631, 0.4289) and ( 0.0054, 0.3259) .. ( 0.0443, 0.3176)
+ .. controls ( 0.1031, 0.3051) and ( 0.1431, 0.3862) .. ( 0.0694, 0.3989)
+ .. controls ( 0.0551, 0.3118) and ( 0.0044, 0.4056) .. ( 0.0316, 0.4326)
+ .. controls ( 0.0741, 0.4748) and ( 0.1233, 0.3699) .. ( 0.1388, 0.4261)
+ .. controls ( 0.1477, 0.4584) and ( 0.0813, 0.5057) .. ( 0.0525, 0.5036)
+ --cycle
+ ( 0.6073, 0.4745)
+ -- ( 0.6242, 0.4241)
+ -- ( 0.5569, 0.3989)
+ -- ( 0.5569, 0.4493)
+ --cycle
+ (-0.3498, 0.4626)
+ .. controls (-0.3744, 0.4586) and (-0.3998, 0.4069) .. (-0.3941, 0.3847)
+ .. controls (-0.3893, 0.3661) and (-0.3650, 0.3651) .. (-0.3503, 0.3798)
+ -- (-0.3257, 0.4157)
+ .. controls (-0.3295, 0.3698) and (-0.2940, 0.3485) .. (-0.2697, 0.3592)
+ .. controls (-0.2492, 0.3684) and (-0.2611, 0.3898) .. (-0.2697, 0.4024)
+ .. controls (-0.2865, 0.4277) and (-0.3149, 0.4682) .. (-0.3498, 0.4626)
+ --cycle
+ ( 0.7488, 0.4472)
+ .. controls ( 0.7446, 0.4429) and ( 0.7413, 0.4378) .. ( 0.7395, 0.4315)
+ .. controls ( 0.7338, 0.4111) and ( 0.7612, 0.3277) .. ( 0.8087, 0.3352)
+ .. controls ( 0.8094, 0.3354) and ( 0.8102, 0.3361) .. ( 0.8109, 0.3364)
+ --cycle
+ (-0.1492, 0.4409)
+ .. controls (-0.1577, 0.3701) and (-0.1298, 0.3577) .. (-0.0651, 0.3568)
+ .. controls (-0.0461, 0.3027) and (-0.0025, 0.3462) .. (-0.0567, 0.3652)
+ -- (-0.0567, 0.3568)
+ -- (-0.0651, 0.3652)
+ -- (-0.0567, 0.3652)
+ -- (-0.0567, 0.3989)
+ -- (-0.0988, 0.3905)
+ .. controls (-0.1116, 0.4252) and (-0.1112, 0.4344) .. (-0.1492, 0.4409)
+ --cycle
+ ( 0.2869, 0.4351)
+ .. controls ( 0.2475, 0.4293) and ( 0.2234, 0.3681) .. ( 0.2795, 0.3485)
+ -- ( 0.3048, 0.3905)
+ .. controls ( 0.3028, 0.3760) and ( 0.3013, 0.3442) .. ( 0.3278, 0.3583)
+ .. controls ( 0.3557, 0.3731) and ( 0.3437, 0.4227) .. ( 0.3046, 0.4338)
+ .. controls ( 0.2985, 0.4356) and ( 0.2925, 0.4359) .. ( 0.2869, 0.4351)
+ --cycle
+ (-0.5352, 0.4038)
+ .. controls (-0.5519, 0.4042) and (-0.5689, 0.3932) .. (-0.5778, 0.3652)
+ -- (-0.5358, 0.3652)
+ -- (-0.5442, 0.3149)
+ -- (-0.6030, 0.3401)
+ .. controls (-0.6099, 0.3078) and (-0.5933, 0.2580) .. (-0.5523, 0.2636)
+ .. controls (-0.5251, 0.2673) and (-0.4980, 0.3070) .. (-0.4910, 0.3316)
+ .. controls (-0.4799, 0.3705) and (-0.5072, 0.4030) .. (-0.5352, 0.4038)
+ --cycle
+ ( 0.4056, 0.3989)
+ .. controls ( 0.4011, 0.3650) and ( 0.4064, 0.3627) .. ( 0.4392, 0.3568)
+ .. controls ( 0.4340, 0.3865) and ( 0.4336, 0.3876) .. ( 0.4056, 0.3989)
+ --cycle
+ (-0.2248, 0.3737)
+ -- (-0.2164, 0.3401)
+ -- (-0.1828, 0.3568)
+ --cycle
+ ( 0.4558, 0.3414)
+ .. controls ( 0.4424, 0.3419) and ( 0.4339, 0.3363) .. ( 0.4224, 0.3316)
+ -- ( 0.4340, 0.2885)
+ .. controls ( 0.4635, 0.2154) and ( 0.5405, 0.3381) .. ( 0.4558, 0.3414)
+ --cycle
+ (-0.3179, 0.3382)
+ .. controls (-0.3270, 0.3401) and (-0.3357, 0.3403) .. (-0.3425, 0.3381)
+ .. controls (-0.3762, 0.3275) and (-0.3957, 0.2970) .. (-0.4013, 0.2644)
+ -- (-0.3341, 0.2892)
+ .. controls (-0.3207, 0.2121) and (-0.2456, 0.2402) .. (-0.2545, 0.2892)
+ .. controls (-0.2586, 0.3110) and (-0.2906, 0.3324) .. (-0.3179, 0.3382)
+ --cycle
+ ( 0.3611, 0.3359)
+ .. controls ( 0.3110, 0.3372) and ( 0.2179, 0.3015) .. ( 0.2626, 0.2392)
+ -- ( 0.2207, 0.2056)
+ -- ( 0.2123, 0.2308)
+ -- ( 0.1955, 0.2308)
+ .. controls ( 0.1691, 0.1342) and ( 0.2461, 0.1660) .. ( 0.2711, 0.1678)
+ .. controls ( 0.3105, 0.1704) and ( 0.3525, 0.1635) .. ( 0.3836, 0.2013)
+ .. controls ( 0.4000, 0.2213) and ( 0.3935, 0.2469) .. ( 0.3552, 0.2434)
+ .. controls ( 0.3256, 0.2408) and ( 0.3193, 0.2282) .. ( 0.3048, 0.2056)
+ .. controls ( 0.2927, 0.2510) and ( 0.2970, 0.2476) .. ( 0.3131, 0.2897)
+ -- ( 0.3552, 0.2728)
+ -- ( 0.3636, 0.2980)
+ -- ( 0.3719, 0.2644)
+ .. controls ( 0.4287, 0.2825) and ( 0.4092, 0.3226) .. ( 0.3795, 0.3331)
+ .. controls ( 0.3746, 0.3349) and ( 0.3683, 0.3357) .. ( 0.3611, 0.3359)
+ --cycle
+ (-0.7326, 0.3304)
+ .. controls (-0.7558, 0.2996) and (-0.7303, 0.2839) .. (-0.7147, 0.2917)
+ .. controls (-0.6982, 0.3000) and (-0.6941, 0.3349) .. (-0.7326, 0.3304)
+ --cycle
+ ( 0.5316, 0.3064)
+ .. controls ( 0.5417, 0.2779) and ( 0.5439, 0.2772) .. ( 0.5737, 0.2813)
+ .. controls ( 0.5591, 0.3056) and ( 0.5600, 0.3049) .. ( 0.5316, 0.3064)
+ --cycle
+ ( 0.7063, 0.2870)
+ .. controls ( 0.6995, 0.2880) and ( 0.6923, 0.2874) .. ( 0.6840, 0.2844)
+ .. controls ( 0.6531, 0.2731) and ( 0.6307, 0.2270) .. ( 0.6242, 0.1972)
+ -- ( 0.6914, 0.2056)
+ -- ( 0.6914, 0.2475)
+ -- ( 0.7166, 0.2139)
+ -- ( 0.7670, 0.2224)
+ -- ( 0.7670, 0.1887)
+ -- ( 0.8091, 0.1804)
+ -- ( 0.7755, 0.1047)
+ -- ( 0.8343, 0.1131)
+ .. controls ( 0.8409, 0.1435) and ( 0.8409, 0.1473) .. ( 0.8679, 0.1636)
+ .. controls ( 0.8652, 0.1490) and ( 0.8470, 0.0581) .. ( 0.8896, 0.0809)
+ .. controls ( 0.9211, 0.0965) and ( 0.9103, 0.1720) .. ( 0.8896, 0.1909)
+ .. controls ( 0.8668, 0.2094) and ( 0.8421, 0.2029) .. ( 0.8174, 0.1972)
+ .. controls ( 0.8135, 0.2098) and ( 0.8137, 0.2162) .. ( 0.8041, 0.2272)
+ .. controls ( 0.7922, 0.2408) and ( 0.7748, 0.2458) .. ( 0.7601, 0.2552)
+ .. controls ( 0.7419, 0.2667) and ( 0.7266, 0.2841) .. ( 0.7063, 0.2870)
+ --cycle
+ ( 0.6242, 0.1972)
+ .. controls ( 0.6061, 0.1985) and ( 0.5845, 0.2023) .. ( 0.5690, 0.1902)
+ .. controls ( 0.5426, 0.1695) and ( 0.5550, 0.1248) .. ( 0.5909, 0.1110)
+ .. controls ( 0.6168, 0.1011) and ( 0.6421, 0.1125) .. ( 0.6679, 0.1215)
+ .. controls ( 0.6663, 0.1076) and ( 0.6658, 0.0850) .. ( 0.6679, 0.0720)
+ .. controls ( 0.6961,-0.0135) and ( 0.8163, 0.0895) .. ( 0.7250, 0.1215)
+ -- ( 0.6998, 0.0795)
+ -- ( 0.7166, 0.1299)
+ -- ( 0.6830, 0.1804)
+ -- ( 0.6578, 0.1636)
+ --cycle
+ ( 0.0950, 0.2671)
+ .. controls ( 0.0367, 0.2427) and ( 0.0851, 0.1985) .. ( 0.1112, 0.2040)
+ .. controls ( 0.1427, 0.2110) and ( 0.1597, 0.2672) .. ( 0.0950, 0.2671)
+ --cycle
+ (-0.0988, 0.2609)
+ .. controls (-0.1426, 0.2672) and (-0.2761, 0.1879) .. (-0.1828, 0.1551)
+ -- (-0.1743, 0.1972)
+ -- (-0.1240, 0.1804)
+ -- (-0.0904, 0.2308)
+ -- (-0.1071, 0.1720)
+ .. controls (-0.0221, 0.1543) and (-0.0435, 0.2528) .. (-0.0988, 0.2609)
+ --cycle
+ (-0.8142, 0.2071)
+ .. controls (-0.8258, 0.2070) and (-0.8375, 0.2012) .. (-0.8466, 0.1869)
+ .. controls (-0.8534, 0.1760) and (-0.8533, 0.1669) .. (-0.8551, 0.1551)
+ -- (-0.7963, 0.1636)
+ -- (-0.8132, 0.1215)
+ .. controls (-0.8020, 0.1234) and (-0.7923, 0.1232) .. (-0.7821, 0.1301)
+ .. controls (-0.7447, 0.1557) and (-0.7793, 0.2072) .. (-0.8142, 0.2071)
+ --cycle
+ (-0.2584, 0.2056)
+ -- (-0.2584, 0.1636)
+ .. controls (-0.2445, 0.1848) and (-0.2445, 0.1843) .. (-0.2584, 0.2056)
+ --cycle
+ (-0.7132, 0.1953)
+ .. controls (-0.7373, 0.1910) and (-0.7568, 0.1647) .. (-0.7459, 0.1215)
+ -- (-0.6955, 0.1551)
+ .. controls (-0.7015, 0.1043) and (-0.7057, 0.0835) .. (-0.6450, 0.0963)
+ -- (-0.6535, 0.0711)
+ .. controls (-0.5898, 0.0580) and (-0.5907, 0.1071) .. (-0.6081, 0.1249)
+ .. controls (-0.6203, 0.1374) and (-0.6375, 0.1370) .. (-0.6535, 0.1383)
+ .. controls (-0.6607, 0.1823) and (-0.6892, 0.1997) .. (-0.7132, 0.1953)
+ --cycle
+ (-0.4097, 0.1720)
+ -- (-0.3845, 0.1215)
+ -- (-0.4097, 0.0963)
+ -- (-0.4349, 0.1047)
+ .. controls (-0.4598,-0.0134) and (-0.2772, 0.1076) .. (-0.3690, 0.1621)
+ .. controls (-0.3821, 0.1699) and (-0.3951, 0.1703) .. (-0.4097, 0.1720)
+ --cycle
+ ( 0.4374, 0.1711)
+ .. controls ( 0.4200, 0.1682) and ( 0.4016, 0.1543) .. ( 0.3888, 0.1299)
+ -- ( 0.4477, 0.1299)
+ .. controls ( 0.4703, 0.1056) and ( 0.4891, 0.1252) .. ( 0.4798, 0.1463)
+ .. controls ( 0.4711, 0.1661) and ( 0.4548, 0.1741) .. ( 0.4374, 0.1711)
+ --cycle
+ (-0.4594, 0.1707)
+ .. controls (-0.4648, 0.1719) and (-0.4705, 0.1718) .. (-0.4752, 0.1698)
+ .. controls (-0.4878, 0.1646) and (-0.4954, 0.1508) .. (-0.4982, 0.1382)
+ .. controls (-0.5096, 0.0875) and (-0.4448, 0.0609) .. (-0.4602, 0.1299)
+ .. controls (-0.4304, 0.1504) and (-0.4433, 0.1669) .. (-0.4594, 0.1707)
+ --cycle
+ (-0.0230, 0.1592)
+ .. controls (-0.0727, 0.1609) and (-0.0799, 0.1002) .. (-0.1492, 0.0795)
+ -- (-0.1576, 0.0374)
+ .. controls (-0.1940, 0.0779) and (-0.1965, 0.0894) .. (-0.2500, 0.0711)
+ -- (-0.2584, 0.0795)
+ -- (-0.2332, 0.1383)
+ .. controls (-0.2779, 0.1347) and (-0.3158, 0.0997) .. (-0.2855, 0.0563)
+ .. controls (-0.2695, 0.0332) and (-0.2481, 0.0337) .. (-0.2256, 0.0248)
+ .. controls (-0.1803, 0.0069) and (-0.1541,-0.0311) .. (-0.1155, 0.0290)
+ .. controls (-0.0607, 0.0067) and (-0.0553,-0.0150) .. (-0.0307,-0.0232)
+ .. controls ( 0.0157,-0.0389) and ( 0.0524, 0.0035) .. ( 0.0442, 0.0543)
+ .. controls ( 0.0843, 0.0613) and ( 0.1010, 0.0937) .. ( 0.0727, 0.1263)
+ .. controls ( 0.0598, 0.1414) and (-0.0030, 0.1586) .. (-0.0230, 0.1592)
+ --cycle
+ (-0.0230, 0.1215)
+ -- ( 0.0442, 0.1131)
+ .. controls ( 0.0289, 0.0705) and ( 0.0228, 0.0356) .. (-0.0230, 0.0207)
+ .. controls (-0.0339, 0.0543) and (-0.0383, 0.0572) .. (-0.0735, 0.0543)
+ -- (-0.0819, 0.0627)
+ --cycle
+ (-0.8973, 0.1131)
+ .. controls (-0.9051, 0.0492) and (-0.8679, 0.0676) .. (-0.8321, 0.0457)
+ .. controls (-0.7996, 0.0258) and (-0.7906,-0.0272) .. (-0.7039,-0.0046)
+ .. controls (-0.6977,-0.0167) and (-0.6964,-0.0237) .. (-0.6846,-0.0331)
+ .. controls (-0.6146,-0.0891) and (-0.5741, 0.0485) .. (-0.6619, 0.0396)
+ .. controls (-0.6723, 0.0384) and (-0.6856, 0.0326) .. (-0.6955, 0.0290)
+ .. controls (-0.7145, 0.0487) and (-0.7442, 0.0435) .. (-0.7712, 0.0459)
+ -- (-0.7771, 0.0746)
+ --cycle
+ ( 0.7839, 0.0627)
+ .. controls ( 0.7798, 0.0513) and ( 0.7748, 0.0421) .. ( 0.7752, 0.0292)
+ .. controls ( 0.7776,-0.0409) and ( 0.8888, 0.0073) .. ( 0.8169, 0.0493)
+ .. controls ( 0.8064, 0.0555) and ( 0.7952, 0.0587) .. ( 0.7839, 0.0627)
+ --cycle
+ ( 0.6399, 0.0543)
+ .. controls ( 0.6341, 0.0555) and ( 0.6275, 0.0553) .. ( 0.6207, 0.0536)
+ .. controls ( 0.5899, 0.0092) and ( 0.6489,-0.0145) .. ( 0.6606, 0.0149)
+ .. controls ( 0.6690, 0.0359) and ( 0.6576, 0.0510) .. ( 0.6399, 0.0543)
+ --cycle
+ ( 0.2228, 0.0528)
+ .. controls ( 0.1887, 0.0319) and ( 0.2131,-0.0076) .. ( 0.2361,-0.0078)
+ .. controls ( 0.2619,-0.0080) and ( 0.2726, 0.0432) .. ( 0.2228, 0.0528)
+ --cycle
+ ( 0.4509, 0.0479)
+ .. controls ( 0.4394, 0.0460) and ( 0.4290, 0.0332) .. ( 0.4224, 0.0038)
+ .. controls ( 0.3826, 0.0304) and ( 0.3797, 0.0371) .. ( 0.3300, 0.0301)
+ .. controls ( 0.3175, 0.0283) and ( 0.3021, 0.0266) .. ( 0.2915, 0.0192)
+ .. controls ( 0.2691, 0.0036) and ( 0.2444,-0.0690) .. ( 0.3552,-0.0718)
+ -- ( 0.3131,-0.0046)
+ .. controls ( 0.3436,-0.0165) and ( 0.3418,-0.0171) .. ( 0.3719,-0.0046)
+ .. controls ( 0.3961,-0.0513) and ( 0.4113,-0.0431) .. ( 0.4560,-0.0298)
+ -- ( 0.4560, 0.0038)
+ -- ( 0.4812,-0.0466)
+ .. controls ( 0.4281,-0.0863) and ( 0.4953,-0.1091) .. ( 0.5137,-0.0706)
+ .. controls ( 0.5296,-0.0376) and ( 0.4853, 0.0538) .. ( 0.4509, 0.0479)
+ --cycle
+ (-0.9381, 0.0440)
+ .. controls (-0.9573, 0.0465) and (-0.9752, 0.0361) .. (-0.9800, 0.0016)
+ -- (-0.9774,-0.0032)
+ -- (-0.9308, 0.0123)
+ .. controls (-0.9260, 0.0012) and (-0.9218,-0.0135) .. (-0.9103,-0.0200)
+ .. controls (-0.8939,-0.0290) and (-0.8783,-0.0112) .. (-0.8895, 0.0115)
+ .. controls (-0.8962, 0.0252) and (-0.9176, 0.0414) .. (-0.9381, 0.0440)
+ --cycle
+ ( 0.9435, 0.0207)
+ -- ( 0.9184, 0.0123)
+ -- ( 0.9435,-0.0046)
+ --cycle
+ ( 0.8999,-0.0129)
+ .. controls ( 0.9000,-0.0216) and ( 0.8974,-0.0282) .. ( 0.8999,-0.0376)
+ .. controls ( 0.9043,-0.0955) and ( 0.9800,-0.0453) .. ( 0.9254,-0.0191)
+ .. controls ( 0.9173,-0.0151) and ( 0.9098,-0.0148) .. ( 0.8999,-0.0129)
+ --cycle
+ (-0.5187,-0.0249)
+ .. controls (-0.5448,-0.0284) and (-0.5586,-0.0592) .. (-0.5611,-0.0886)
+ -- (-0.5022,-0.0718)
+ .. controls (-0.5038,-0.1199) and (-0.4832,-0.1244) .. (-0.4434,-0.1054)
+ -- (-0.4349,-0.1139)
+ -- (-0.5106,-0.1811)
+ -- (-0.5442,-0.1475)
+ -- (-0.5274,-0.1139)
+ .. controls (-0.5482,-0.1103) and (-0.5717,-0.1068) .. (-0.5806,-0.1326)
+ .. controls (-0.5943,-0.1714) and (-0.5235,-0.2179) .. (-0.5014,-0.2194)
+ .. controls (-0.4612,-0.2223) and (-0.4187,-0.1658) .. (-0.4108,-0.1306)
+ .. controls (-0.4075,-0.1185) and (-0.4054,-0.1026) .. (-0.4108,-0.0911)
+ .. controls (-0.4193,-0.0753) and (-0.4422,-0.0688) .. (-0.4571,-0.0576)
+ -- (-0.4884,-0.0315)
+ .. controls (-0.4999,-0.0256) and (-0.5100,-0.0237) .. (-0.5187,-0.0249)
+ --cycle
+ ( 0.2098,-0.0382)
+ .. controls ( 0.1959,-0.0434) and ( 0.1851,-0.0663) .. ( 0.1925,-0.0882)
+ .. controls ( 0.2035,-0.1206) and ( 0.2830,-0.1639) .. ( 0.2964,-0.0882)
+ .. controls ( 0.2773,-0.0896) and ( 0.2586,-0.0934) .. ( 0.2447,-0.0768)
+ .. controls ( 0.2363,-0.0666) and ( 0.2352,-0.0463) .. ( 0.2242,-0.0396)
+ .. controls ( 0.2194,-0.0367) and ( 0.2145,-0.0365) .. ( 0.2098,-0.0382)
+ --cycle
+ (-0.2960,-0.0452)
+ .. controls (-0.3231,-0.0465) and (-0.3530,-0.0602) .. (-0.3592,-0.0683)
+ .. controls (-0.3758,-0.0903) and (-0.3560,-0.1221) .. (-0.3845,-0.1979)
+ -- (-0.4013,-0.1727)
+ -- (-0.4182,-0.1727)
+ .. controls (-0.4336,-0.2291) and (-0.4124,-0.2782) .. (-0.3803,-0.2577)
+ .. controls (-0.3601,-0.2446) and (-0.3538,-0.2099) .. (-0.3392,-0.1970)
+ .. controls (-0.3137,-0.1743) and (-0.2596,-0.2064) .. (-0.2752,-0.1306)
+ -- (-0.3257,-0.1558)
+ -- (-0.3341,-0.1475)
+ -- (-0.3341,-0.0970)
+ -- (-0.2500,-0.0970)
+ .. controls (-0.2447,-0.0551) and (-0.2689,-0.0439) .. (-0.2960,-0.0452)
+ --cycle
+ ( 0.6563,-0.0662)
+ .. controls ( 0.6458,-0.0662) and ( 0.6374,-0.0668) .. ( 0.6332,-0.0685)
+ .. controls ( 0.5970,-0.0835) and ( 0.6057,-0.1189) .. ( 0.6332,-0.1391)
+ -- ( 0.6493,-0.0970)
+ -- ( 0.6662,-0.0970)
+ .. controls ( 0.6850,-0.1248) and ( 0.6940,-0.1204) .. ( 0.7250,-0.1139)
+ -- ( 0.7081,-0.1475)
+ .. controls ( 0.7837,-0.1829) and ( 0.7876,-0.1033) .. ( 0.7490,-0.0804)
+ .. controls ( 0.7374,-0.0735) and ( 0.6877,-0.0664) .. ( 0.6563,-0.0662)
+ --cycle
+ ( 0.7081,-0.1475)
+ .. controls ( 0.6742,-0.1429) and ( 0.6720,-0.1483) .. ( 0.6662,-0.1811)
+ .. controls ( 0.6162,-0.1289) and ( 0.6115,-0.1833) .. ( 0.6244,-0.2044)
+ .. controls ( 0.6426,-0.2346) and ( 0.6823,-0.2320) .. ( 0.7016,-0.2044)
+ .. controls ( 0.7147,-0.1858) and ( 0.7107,-0.1681) .. ( 0.7081,-0.1475)
+ --cycle
+ ( 0.0544,-0.0769)
+ .. controls ( 0.0466,-0.0773) and ( 0.0382,-0.0797) .. ( 0.0297,-0.0845)
+ -- (-0.0147,-0.1139)
+ .. controls (-0.0057,-0.1396) and (-0.0069,-0.1385) .. ( 0.0189,-0.1475)
+ .. controls (-0.0074,-0.2147) and ( 0.0346,-0.2081) .. ( 0.0553,-0.1870)
+ .. controls ( 0.0667,-0.1752) and ( 0.0961,-0.1299) .. ( 0.0958,-0.1139)
+ .. controls ( 0.0955,-0.0925) and ( 0.0776,-0.0759) .. ( 0.0544,-0.0769)
+ --cycle
+ ( 0.3572,-0.0881)
+ .. controls ( 0.3447,-0.0867) and ( 0.3392,-0.1053) .. ( 0.3450,-0.1208)
+ .. controls ( 0.3587,-0.1579) and ( 0.4169,-0.1493) .. ( 0.4239,-0.1208)
+ .. controls ( 0.4287,-0.1010) and ( 0.4113,-0.0745) .. ( 0.3888,-0.0970)
+ -- ( 0.3719,-0.0970)
+ .. controls ( 0.3663,-0.0912) and ( 0.3613,-0.0886) .. ( 0.3572,-0.0881)
+ --cycle
+ ( 0.7250,-0.1054)
+ -- ( 0.7333,-0.1054)
+ -- ( 0.7333,-0.1139)
+ --cycle
+ (-0.7357,-0.1221)
+ .. controls (-0.7405,-0.1203) and (-0.7472,-0.1201) .. (-0.7562,-0.1227)
+ .. controls (-0.7721,-0.1527) and (-0.7463,-0.1606) .. (-0.7339,-0.1532)
+ .. controls (-0.7244,-0.1475) and (-0.7214,-0.1275) .. (-0.7357,-0.1221)
+ --cycle
+ (-0.8606,-0.1378)
+ .. controls (-0.8718,-0.1386) and (-0.8832,-0.1446) .. (-0.8941,-0.1518)
+ -- (-0.8728,-0.1897)
+ -- (-0.8468,-0.1811)
+ -- (-0.8613,-0.2102)
+ -- (-0.8317,-0.2631)
+ .. controls (-0.7953,-0.2270) and (-0.7967,-0.1536) .. (-0.8471,-0.1391)
+ .. controls (-0.8514,-0.1378) and (-0.8560,-0.1374) .. (-0.8606,-0.1378)
+ --cycle
+ ( 0.9187,-0.1555)
+ .. controls ( 0.9083,-0.1585) and ( 0.8971,-0.1627) .. ( 0.8847,-0.1675)
+ .. controls ( 0.8669,-0.1743) and ( 0.8469,-0.1785) .. ( 0.8399,-0.1989)
+ .. controls ( 0.8307,-0.2247) and ( 0.8481,-0.2329) .. ( 0.8679,-0.2399)
+ -- ( 0.8847,-0.2063)
+ .. controls ( 0.8863,-0.2068) and ( 0.8871,-0.2069) .. ( 0.8886,-0.2074)
+ --cycle
+ ( 0.8679,-0.2399)
+ .. controls ( 0.8663,-0.2432) and ( 0.8651,-0.2468) .. ( 0.8637,-0.2502)
+ -- ( 0.8693,-0.2405)
+ .. controls ( 0.8687,-0.2402) and ( 0.8685,-0.2401) .. ( 0.8679,-0.2399)
+ --cycle
+ ( 0.4392,-0.1558)
+ -- ( 0.4332,-0.1807)
+ .. controls ( 0.4281,-0.2431) and ( 0.5089,-0.2120) .. ( 0.4618,-0.1688)
+ .. controls ( 0.4519,-0.1597) and ( 0.4457,-0.1593) .. ( 0.4392,-0.1558)
+ --cycle
+ (-0.6846,-0.1952)
+ .. controls (-0.6966,-0.1951) and (-0.7082,-0.2013) .. (-0.7157,-0.2171)
+ .. controls (-0.7203,-0.2268) and (-0.7199,-0.2378) .. (-0.7207,-0.2483)
+ -- (-0.6787,-0.2399)
+ -- (-0.6703,-0.2735)
+ .. controls (-0.6096,-0.2523) and (-0.6488,-0.1955) .. (-0.6846,-0.1952)
+ --cycle
+ (-0.1120,-0.2035)
+ .. controls (-0.1188,-0.2048) and (-0.1255,-0.2071) .. (-0.1323,-0.2089)
+ .. controls (-0.1785,-0.2217) and (-0.2021,-0.2285) .. (-0.1912,-0.2819)
+ -- (-0.0988,-0.2483)
+ -- (-0.0651,-0.2740)
+ .. controls (-0.0333,-0.3228) and (-0.0165,-0.2917) .. (-0.0209,-0.2740)
+ .. controls (-0.0243,-0.2616) and (-0.0384,-0.2481) .. (-0.0474,-0.2386)
+ .. controls (-0.0590,-0.2264) and (-0.0744,-0.2085) .. (-0.0911,-0.2040)
+ .. controls (-0.0982,-0.2021) and (-0.1052,-0.2023) .. (-0.1120,-0.2035)
+ --cycle
+ ( 0.1647,-0.2053)
+ .. controls ( 0.1471,-0.2058) and ( 0.1297,-0.2092) .. ( 0.1164,-0.2148)
+ .. controls ( 0.0833,-0.2632) and ( 0.1207,-0.3872) .. ( 0.1933,-0.3346)
+ .. controls ( 0.2031,-0.3275) and ( 0.2109,-0.3165) .. ( 0.2178,-0.3068)
+ .. controls ( 0.2722,-0.2297) and ( 0.2177,-0.2039) .. ( 0.1647,-0.2053)
+ --cycle
+ ( 0.3262,-0.2328)
+ .. controls ( 0.3073,-0.2617) and ( 0.3314,-0.2707) .. ( 0.3420,-0.2638)
+ .. controls ( 0.3522,-0.2572) and ( 0.3585,-0.2285) .. ( 0.3262,-0.2328)
+ --cycle
+ ( 0.1534,-0.2399)
+ -- ( 0.2039,-0.2483)
+ -- ( 0.1534,-0.2987)
+ --cycle
+ ( 0.5217,-0.2636)
+ .. controls ( 0.5071,-0.2632) and ( 0.4918,-0.2708) .. ( 0.4798,-0.2909)
+ .. controls ( 0.4713,-0.3051) and ( 0.4736,-0.3094) .. ( 0.4728,-0.3240)
+ -- ( 0.4812,-0.3240)
+ -- ( 0.4812,-0.3324)
+ -- ( 0.5232,-0.2987)
+ -- ( 0.5232,-0.3492)
+ .. controls ( 0.6028,-0.3358) and ( 0.5655,-0.2645) .. ( 0.5217,-0.2636)
+ --cycle
+ ( 0.4812,-0.3324)
+ -- ( 0.4728,-0.3240)
+ .. controls ( 0.4525,-0.3209) and ( 0.4056,-0.3074) .. ( 0.3892,-0.3106)
+ .. controls ( 0.3596,-0.3163) and ( 0.3503,-0.3437) .. ( 0.3892,-0.3660)
+ -- ( 0.3972,-0.3407)
+ .. controls ( 0.4281,-0.3611) and ( 0.4279,-0.3612) .. ( 0.4644,-0.3576)
+ -- ( 0.4560,-0.4080)
+ .. controls ( 0.5104,-0.3986) and ( 0.5053,-0.3736) .. ( 0.4812,-0.3324)
+ --cycle
+ ( 0.7282,-0.2775)
+ .. controls ( 0.7176,-0.2768) and ( 0.7066,-0.2782) .. ( 0.6965,-0.2822)
+ .. controls ( 0.6458,-0.3532) and ( 0.7574,-0.3899) .. ( 0.7782,-0.3306)
+ .. controls ( 0.7887,-0.3013) and ( 0.7602,-0.2797) .. ( 0.7282,-0.2775)
+ --cycle
+ (-0.2465,-0.2903)
+ .. controls (-0.2987,-0.3042) and (-0.2344,-0.4071) .. (-0.2306,-0.4102)
+ .. controls (-0.1938,-0.4396) and (-0.1663,-0.4010) .. (-0.1299,-0.4027)
+ .. controls (-0.1140,-0.4034) and (-0.0666,-0.4182) .. (-0.0557,-0.3820)
+ .. controls (-0.0504,-0.3644) and (-0.0676,-0.3334) .. (-0.0988,-0.3744)
+ -- (-0.1181,-0.3407)
+ -- (-0.1308,-0.3168)
+ .. controls (-0.1675,-0.2582) and (-0.1759,-0.3435) .. (-0.1781,-0.3492)
+ .. controls (-0.1841,-0.3653) and (-0.1898,-0.3700) .. (-0.1996,-0.3828)
+ -- (-0.2164,-0.2903)
+ .. controls (-0.2291,-0.2881) and (-0.2389,-0.2883) .. (-0.2465,-0.2903)
+ --cycle
+ (-0.5947,-0.3156)
+ -- (-0.6030,-0.3407)
+ -- (-0.5778,-0.3240)
+ --cycle
+ (-0.0014,-0.3194)
+ .. controls (-0.0278,-0.3131) and (-0.0544,-0.3497) .. (-0.0058,-0.3694)
+ .. controls ( 0.0049,-0.3738) and ( 0.0162,-0.3735) .. ( 0.0273,-0.3744)
+ .. controls ( 0.0265,-0.3636) and ( 0.0269,-0.3522) .. ( 0.0223,-0.3420)
+ .. controls ( 0.0163,-0.3283) and ( 0.0074,-0.3214) .. (-0.0014,-0.3194)
+ --cycle
+ (-0.6508,-0.3284)
+ .. controls (-0.6656,-0.3290) and (-0.6816,-0.3373) .. (-0.6955,-0.3576)
+ .. controls (-0.7159,-0.3441) and (-0.7363,-0.3292) .. (-0.7624,-0.3378)
+ .. controls (-0.7705,-0.3405) and (-0.7771,-0.3450) .. (-0.7829,-0.3501)
+ -- (-0.7599,-0.3912)
+ -- (-0.7543,-0.3744)
+ -- (-0.6619,-0.4164)
+ -- (-0.6619,-0.3660)
+ -- (-0.6367,-0.4164)
+ .. controls (-0.5723,-0.3945) and (-0.6064,-0.3266) .. (-0.6508,-0.3284)
+ --cycle
+ (-0.5287,-0.3512)
+ .. controls (-0.5489,-0.3498) and (-0.5690,-0.3591) .. (-0.5764,-0.3751)
+ .. controls (-0.5966,-0.4192) and (-0.5398,-0.3912) .. (-0.5274,-0.3828)
+ -- (-0.5190,-0.4500)
+ -- (-0.5358,-0.4333)
+ -- (-0.5358,-0.4248)
+ -- (-0.5611,-0.4248)
+ .. controls (-0.5664,-0.4641) and (-0.5605,-0.4735) .. (-0.5442,-0.5088)
+ -- (-0.5274,-0.5088)
+ .. controls (-0.4972,-0.4701) and (-0.4647,-0.4466) .. (-0.4806,-0.3915)
+ .. controls (-0.4882,-0.3649) and (-0.5085,-0.3527) .. (-0.5287,-0.3512)
+ --cycle
+ ( 0.5485,-0.3594)
+ .. controls ( 0.5504,-0.3686) and ( 0.5513,-0.3797) .. ( 0.5560,-0.3899)
+ .. controls ( 0.5831,-0.4490) and ( 0.6446,-0.3809) .. ( 0.5811,-0.3594)
+ .. controls ( 0.5706,-0.3579) and ( 0.5594,-0.3583) .. ( 0.5485,-0.3594)
+ --cycle
+ ( 0.3311,-0.3646)
+ .. controls ( 0.3201,-0.3659) and ( 0.3103,-0.3791) .. ( 0.3084,-0.3917)
+ .. controls ( 0.3035,-0.4255) and ( 0.3481,-0.5315) .. ( 0.4140,-0.4669)
+ .. controls ( 0.4439,-0.4932) and ( 0.4962,-0.5278) .. ( 0.5388,-0.5107)
+ .. controls ( 0.5684,-0.4989) and ( 0.5806,-0.4516) .. ( 0.5232,-0.4333)
+ -- ( 0.5232,-0.4669)
+ .. controls ( 0.4932,-0.4550) and ( 0.4949,-0.4563) .. ( 0.4644,-0.4669)
+ -- ( 0.4560,-0.4248)
+ -- ( 0.4224,-0.4417)
+ -- ( 0.3888,-0.4080)
+ -- ( 0.3617,-0.4500)
+ -- ( 0.3617,-0.4080)
+ .. controls ( 0.3546,-0.3735) and ( 0.3422,-0.3632) .. ( 0.3311,-0.3646)
+ --cycle
+ ( 0.0862,-0.3828)
+ .. controls ( 0.0086,-0.4104) and ( 0.1258,-0.4856) .. ( 0.1453,-0.4236)
+ .. controls ( 0.1495,-0.4116) and ( 0.1465,-0.4028) .. ( 0.1453,-0.3912)
+ -- ( 0.0946,-0.4080)
+ --cycle
+ (-0.3761,-0.4056)
+ .. controls (-0.4460,-0.4310) and (-0.4022,-0.4833) .. (-0.3686,-0.4756)
+ .. controls (-0.3385,-0.4686) and (-0.3150,-0.4102) .. (-0.3761,-0.4056)
+ --cycle
+ (-0.1407,-0.4164)
+ .. controls (-0.1510,-0.4360) and (-0.1606,-0.4518) .. (-0.1524,-0.4748)
+ .. controls (-0.1401,-0.5093) and (-0.0958,-0.5218) .. (-0.0687,-0.4961)
+ .. controls (-0.0363,-0.4652) and (-0.0685,-0.4086) .. (-0.0988,-0.4753)
+ --cycle
+ (-0.7345,-0.4223)
+ .. controls (-0.7375,-0.4223) and (-0.7393,-0.4233) .. (-0.7417,-0.4237)
+ -- (-0.7259,-0.4519)
+ -- (-0.7123,-0.4248)
+ .. controls (-0.7212,-0.4230) and (-0.7284,-0.4222) .. (-0.7345,-0.4223)
+ --cycle
+ (-0.6450,-0.4333)
+ -- (-0.6283,-0.4753)
+ -- (-0.6959,-0.5053)
+ -- (-0.6728,-0.5467)
+ .. controls (-0.6597,-0.5415) and (-0.6464,-0.5310) .. (-0.6353,-0.5238)
+ .. controls (-0.6229,-0.5161) and (-0.6029,-0.5082) .. (-0.5949,-0.4962)
+ .. controls (-0.5673,-0.4552) and (-0.6118,-0.4359) .. (-0.6450,-0.4333)
+ --cycle
+ ( 0.7515,-0.4421)
+ .. controls ( 0.7404,-0.4518) and ( 0.7330,-0.4660) .. ( 0.7289,-0.4814)
+ -- ( 0.7518,-0.4421)
+ .. controls ( 0.7518,-0.4422) and ( 0.7516,-0.4421) .. ( 0.7515,-0.4421)
+ --cycle
+ (-0.7203,-0.4618)
+ -- (-0.7004,-0.4973)
+ .. controls (-0.6944,-0.4774) and (-0.6993,-0.4695) .. (-0.7203,-0.4618)
+ --cycle
+ ( 0.1694,-0.4873)
+ .. controls ( 0.1182,-0.4851) and ( 0.0606,-0.5165) .. ( 0.1114,-0.5509)
+ .. controls ( 0.1043,-0.5681) and ( 0.0968,-0.5809) .. ( 0.1030,-0.6004)
+ .. controls ( 0.1160,-0.6424) and ( 0.2092,-0.6560) .. ( 0.1955,-0.5761)
+ -- ( 0.1450,-0.6013)
+ -- ( 0.1199,-0.5425)
+ -- ( 0.1282,-0.5341)
+ .. controls ( 0.1602,-0.5459) and ( 0.1584,-0.5438) .. ( 0.1871,-0.5257)
+ .. controls ( 0.1977,-0.5856) and ( 0.2311,-0.5564) .. ( 0.2301,-0.5337)
+ .. controls ( 0.2287,-0.5019) and ( 0.2002,-0.4885) .. ( 0.1694,-0.4873)
+ --cycle
+ ( 0.3143,-0.5168)
+ .. controls ( 0.2653,-0.5233) and ( 0.3123,-0.5809) .. ( 0.3334,-0.5398)
+ .. controls ( 0.3375,-0.5319) and ( 0.3370,-0.5251) .. ( 0.3384,-0.5168)
+ --cycle
+ ( 0.5821,-0.5172)
+ -- ( 0.5905,-0.5425)
+ .. controls ( 0.5223,-0.5546) and ( 0.5461,-0.6299) .. ( 0.5965,-0.6187)
+ .. controls ( 0.6116,-0.6153) and ( 0.6642,-0.5952) .. ( 0.6693,-0.5808)
+ .. controls ( 0.6859,-0.5354) and ( 0.6147,-0.5138) .. ( 0.5821,-0.5172)
+ --cycle
+ (-0.2667,-0.5315)
+ .. controls (-0.3091,-0.5364) and (-0.3818,-0.5868) .. (-0.3173,-0.6098)
+ .. controls (-0.3409,-0.7049) and (-0.2257,-0.7182) .. (-0.2332,-0.6265)
+ -- (-0.2752,-0.6434)
+ -- (-0.3173,-0.6013)
+ .. controls (-0.2964,-0.5962) and (-0.2716,-0.5851) .. (-0.2511,-0.5945)
+ .. controls (-0.2356,-0.6015) and (-0.2239,-0.6203) .. (-0.2131,-0.6252)
+ .. controls (-0.1929,-0.6345) and (-0.1822,-0.6134) .. (-0.1883,-0.5942)
+ .. controls (-0.1944,-0.5749) and (-0.2315,-0.5384) .. (-0.2508,-0.5323)
+ .. controls (-0.2552,-0.5310) and (-0.2606,-0.5308) .. (-0.2667,-0.5315)
+ --cycle
+ ( 0.5989,-0.5509)
+ -- ( 0.6073,-0.5509)
+ -- ( 0.6073,-0.5593)
+ --cycle
+ (-0.0485,-0.5624)
+ .. controls (-0.0662,-0.5623) and (-0.0842,-0.5741) .. (-0.0904,-0.6098)
+ -- (-0.0483,-0.6013)
+ .. controls (-0.0229,-0.6296) and ( 0.0007,-0.6067) .. (-0.0083,-0.5860)
+ .. controls (-0.0134,-0.5744) and (-0.0308,-0.5625) .. (-0.0485,-0.5624)
+ --cycle
+ (-0.4918,-0.5707)
+ .. controls (-0.5107,-0.5708) and (-0.5309,-0.5802) .. (-0.5442,-0.6013)
+ -- (-0.5778,-0.5846)
+ -- (-0.5862,-0.6181)
+ .. controls (-0.5249,-0.6353) and (-0.5439,-0.6523) .. (-0.4854,-0.6098)
+ -- (-0.4937,-0.6770)
+ -- (-0.5442,-0.6854)
+ -- (-0.5442,-0.7022)
+ .. controls (-0.4313,-0.7520) and (-0.4409,-0.6069) .. (-0.4465,-0.5962)
+ .. controls (-0.4550,-0.5800) and (-0.4728,-0.5707) .. (-0.4918,-0.5707)
+ --cycle
+ ( 0.3300,-0.5846)
+ -- ( 0.3300,-0.6098)
+ -- ( 0.3552,-0.6098)
+ -- ( 0.3552,-0.5846)
+ --cycle
+ ( 0.3726,-0.6221)
+ .. controls ( 0.2948,-0.6226) and ( 0.2995,-0.7351) .. ( 0.3726,-0.7632)
+ .. controls ( 0.4265,-0.7841) and ( 0.4818,-0.7181) .. ( 0.4056,-0.6938)
+ -- ( 0.3719,-0.7275)
+ -- ( 0.3719,-0.7027)
+ .. controls ( 0.3796,-0.6524) and ( 0.4200,-0.6879) .. ( 0.4450,-0.6792)
+ .. controls ( 0.4638,-0.6728) and ( 0.4659,-0.6470) .. ( 0.4510,-0.6352)
+ .. controls ( 0.4434,-0.6293) and ( 0.3843,-0.6220) .. ( 0.3726,-0.6221)
+ --cycle
+ ( 0.0022,-0.6349)
+ -- ( 0.0189,-0.6686)
+ -- ( 0.0189,-0.6349)
+ --cycle
+ (-0.1244,-0.6794)
+ .. controls (-0.1314,-0.6810) and (-0.1382,-0.6846) .. (-0.1441,-0.6904)
+ .. controls (-0.1605,-0.7066) and (-0.1526,-0.7279) .. (-0.1607,-0.7464)
+ -- (-0.1786,-0.7721)
+ .. controls (-0.1852,-0.7840) and (-0.1929,-0.8079) .. (-0.1728,-0.8122)
+ .. controls (-0.1636,-0.8142) and (-0.1224,-0.7844) .. (-0.1071,-0.7778)
+ -- (-0.1155,-0.7106)
+ -- (-0.0735,-0.7275)
+ .. controls (-0.0800,-0.6898) and (-0.1033,-0.6748) .. (-0.1244,-0.6794)
+ --cycle
+ ( 0.1863,-0.6829)
+ .. controls ( 0.1792,-0.6828) and ( 0.1712,-0.6837) .. ( 0.1618,-0.6854)
+ -- ( 0.1618,-0.7022)
+ -- ( 0.2123,-0.7442)
+ -- ( 0.1282,-0.7190)
+ .. controls ( 0.1336,-0.7372) and ( 0.1344,-0.7442) .. ( 0.1476,-0.7594)
+ .. controls ( 0.1538,-0.7664) and ( 0.1626,-0.7738) .. ( 0.1704,-0.7788)
+ .. controls ( 0.2127,-0.8054) and ( 0.2462,-0.7806) .. ( 0.2481,-0.7530)
+ .. controls ( 0.2492,-0.7403) and ( 0.2417,-0.7279) .. ( 0.2353,-0.7175)
+ .. controls ( 0.2199,-0.6926) and ( 0.2075,-0.6832) .. ( 0.1863,-0.6829)
+ --cycle
+ ( 0.5905,-0.6889)
+ .. controls ( 0.5769,-0.6869) and ( 0.5692,-0.6908) .. ( 0.5569,-0.6938)
+ -- ( 0.5569,-0.7106)
+ -- ( 0.5821,-0.7190)
+ .. controls ( 0.5823,-0.7234) and ( 0.5836,-0.7260) .. ( 0.5844,-0.7296)
+ -- ( 0.6046,-0.6948)
+ .. controls ( 0.6001,-0.6927) and ( 0.5958,-0.6898) .. ( 0.5905,-0.6889)
+ --cycle
+ (-0.0391,-0.7245)
+ .. controls (-0.0667,-0.7229) and (-0.0839,-0.7453) .. (-0.0753,-0.7947)
+ .. controls (-0.0651,-0.8529) and (-0.0367,-0.8483) .. (-0.0106,-0.8698)
+ -- ( 0.0547,-0.8704)
+ .. controls ( 0.0548,-0.8616) and ( 0.0567,-0.8516) .. ( 0.0610,-0.8367)
+ -- ( 0.0189,-0.8367)
+ .. controls ( 0.0024,-0.8190) and ( 0.0000,-0.8231) .. (-0.0230,-0.8283)
+ .. controls (-0.0380,-0.7923) and (-0.0454,-0.7840) .. (-0.0399,-0.7442)
+ -- (-0.0230,-0.7442)
+ -- (-0.0147,-0.7778)
+ -- ( 0.0694,-0.7778)
+ -- ( 0.0525,-0.8199)
+ -- ( 0.1424,-0.8295)
+ .. controls ( 0.1612,-0.8227) and ( 0.1619,-0.8006) .. ( 0.1424,-0.7877)
+ .. controls ( 0.1265,-0.7801) and ( 0.1112,-0.7837) .. ( 0.0946,-0.7877)
+ .. controls ( 0.0866,-0.7388) and ( 0.0598,-0.7228) .. ( 0.0189,-0.7526)
+ .. controls (-0.0021,-0.7351) and (-0.0224,-0.7255) .. (-0.0391,-0.7245)
+ --cycle
+ (-0.5605,-0.7471)
+ -- (-0.5242,-0.8116)
+ .. controls (-0.5223,-0.8116) and (-0.5211,-0.8114) .. (-0.5190,-0.8115)
+ -- (-0.5201,-0.8191)
+ -- (-0.4998,-0.8552)
+ .. controls (-0.4770,-0.8370) and (-0.4696,-0.8098) .. (-0.4974,-0.7815)
+ --cycle
+ (-0.3761,-0.7611)
+ -- (-0.3845,-0.7694)
+ -- (-0.3845,-0.7863)
+ -- (-0.3761,-0.7947)
+ -- (-0.3593,-0.7947)
+ -- (-0.3508,-0.7863)
+ -- (-0.3508,-0.7694)
+ -- (-0.3593,-0.7611)
+ --cycle
+ ( 0.3384,-0.8347)
+ .. controls ( 0.3106,-0.8395) and ( 0.2888,-0.8533) .. ( 0.2775,-0.8723)
+ -- ( 0.3442,-0.8729)
+ -- ( 0.3467,-0.8702)
+ -- ( 0.3561,-0.8730)
+ -- ( 0.4348,-0.8736)
+ .. controls ( 0.4345,-0.8731) and ( 0.4345,-0.8727) .. ( 0.4341,-0.8721)
+ .. controls ( 0.4186,-0.8512) and ( 0.3640,-0.8304) .. ( 0.3384,-0.8347)
+ --cycle
+ (-0.0904,-0.8535)
+ .. controls (-0.1018,-0.8579) and (-0.1087,-0.8586) .. (-0.1185,-0.8680)
+ .. controls (-0.1188,-0.8683) and (-0.1189,-0.8687) .. (-0.1192,-0.8690)
+ -- (-0.0904,-0.8692)
+ --cycle
+ (-0.3081,-0.8645)
+ .. controls (-0.3140,-0.8641) and (-0.3192,-0.8651) .. (-0.3238,-0.8672)
+ -- (-0.2954,-0.8675)
+ .. controls (-0.2996,-0.8660) and (-0.3039,-0.8648) .. (-0.3081,-0.8645)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/mountain.dtx b/macros/latex/contrib/wargame/source/hex/terrain/mountain.dtx
new file mode 100644
index 0000000000..0ea308c2f8
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/mountain.dtx
@@ -0,0 +1,26 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/mountain}
+% This is an example of a terrain \spec{pic}ture.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/mountain/.pic={%
+ \path[draw=black,fill=white] (0,0) -- (.3,.9)--(.45,0) -- cycle;
+ \path[draw=black,fill=lightgray,pic actions]
+ (-.6 ,- .9) --
+ (-.3 , .3) --
+ ( 0, 0) --
+ ( .45, 0) --
+ ( .6 , -.9) -- cycle;
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/mountains.dtx b/macros/latex/contrib/wargame/source/hex/terrain/mountains.dtx
new file mode 100644
index 0000000000..04f935bd92
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/mountains.dtx
@@ -0,0 +1,695 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/mountains}
+% The style for mountains. The pattern is filled with a darker
+% brown, and outlines are not drawn. Note that the mountain pattern
+% is the same as the beach pattern, just with a different colour.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/mountains/.style={
+ draw=none,
+ fill={rgb,100:red,49;green,35;blue,1}
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{hex/terrain/mountains}
+% And the mountains pattern. This is the same as the beach pattern,
+% only filled with a darker brown colour.
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/mountains/.pic={
+ \path[hex/terrain/mountains,pic actions,draw=none]
+ (-0.4931, 0.8848)
+ -- (-0.4998, 0.8734)
+ .. controls (-0.4908, 0.8731) and (-0.4813, 0.8762) .. (-0.4762, 0.8847)
+ --cycle
+ (-0.4032, 0.8841)
+ .. controls (-0.4004, 0.8804) and (-0.3988, 0.8794) .. (-0.3956, 0.8745)
+ .. controls (-0.3760, 0.8443) and (-0.3811, 0.8330) .. (-0.3456, 0.8112)
+ .. controls (-0.3250, 0.7986) and (-0.2712, 0.7770) .. (-0.2531, 0.8032)
+ .. controls (-0.2294, 0.8375) and (-0.2984, 0.8503) .. (-0.3193, 0.8690)
+ .. controls (-0.3243, 0.8735) and (-0.3281, 0.8785) .. (-0.3321, 0.8835)
+ --cycle
+ (-0.2462, 0.8828)
+ .. controls (-0.2425, 0.8681) and (-0.2383, 0.8546) .. (-0.2293, 0.8461)
+ .. controls (-0.2102, 0.8280) and (-0.1892, 0.8390) .. (-0.1859, 0.8669)
+ .. controls (-0.1854, 0.8711) and (-0.1871, 0.8772) .. (-0.1875, 0.8822)
+ --cycle
+ (-0.0997, 0.8815)
+ .. controls (-0.0971, 0.8706) and (-0.0941, 0.8597) .. (-0.0907, 0.8493)
+ -- (-0.0570, 0.8578)
+ .. controls (-0.0570, 0.8629) and (-0.0560, 0.8730) .. (-0.0553, 0.8812)
+ --cycle
+ ( 0.0213, 0.8805)
+ .. controls ( 0.0222, 0.8725) and ( 0.0235, 0.8650) .. ( 0.0262, 0.8587)
+ .. controls ( 0.0391, 0.8281) and ( 0.0706, 0.8199) .. ( 0.0917, 0.7894)
+ .. controls ( 0.1112, 0.7609) and ( 0.1058, 0.7286) .. ( 0.1050, 0.6961)
+ -- ( 0.1731, 0.7216)
+ -- ( 0.1203, 0.8649)
+ -- ( 0.1097, 0.8797)
+ --cycle
+ ( 0.2978, 0.8781)
+ .. controls ( 0.2985, 0.8773) and ( 0.3002, 0.8756) .. ( 0.3008, 0.8749)
+ .. controls ( 0.2854, 0.8687) and ( 0.2549, 0.8572) .. ( 0.2421, 0.8487)
+ .. controls ( 0.2026, 0.8224) and ( 0.1905, 0.7567) .. ( 0.2046, 0.7132)
+ .. controls ( 0.2146, 0.6819) and ( 0.2330, 0.6680) .. ( 0.2394, 0.6280)
+ .. controls ( 0.2413, 0.6160) and ( 0.2468, 0.5527) .. ( 0.2446, 0.5437)
+ .. controls ( 0.2396, 0.5232) and ( 0.2211, 0.5122) .. ( 0.2231, 0.4913)
+ .. controls ( 0.2261, 0.4603) and ( 0.2686, 0.4388) .. ( 0.2891, 0.4194)
+ .. controls ( 0.3020, 0.4071) and ( 0.3136, 0.3895) .. ( 0.3281, 0.3799)
+ .. controls ( 0.3688, 0.3533) and ( 0.3905, 0.3863) .. ( 0.4199, 0.3902)
+ .. controls ( 0.4350, 0.3921) and ( 0.4560, 0.3849) .. ( 0.4710, 0.3812)
+ -- ( 0.4795, 0.4067)
+ -- ( 0.4965, 0.4067)
+ .. controls ( 0.5008, 0.3961) and ( 0.5009, 0.3893) .. ( 0.5112, 0.3811)
+ .. controls ( 0.5112, 0.3811) and ( 0.6172, 0.3385) .. ( 0.6481, 0.3037)
+ .. controls ( 0.6729, 0.2758) and ( 0.6641, 0.2532) .. ( 0.6667, 0.2206)
+ -- ( 0.7004, 0.2206)
+ .. controls ( 0.7839, 0.2118) and ( 0.7047, 0.0740) .. ( 0.7057, 0.0568)
+ .. controls ( 0.7067, 0.0396) and ( 0.7865,-0.0424) .. ( 0.8032,-0.0520)
+ .. controls ( 0.8251,-0.0644) and ( 0.8703,-0.0686) .. ( 0.8572,-0.0293)
+ .. controls ( 0.8518,-0.0131) and ( 0.7996, 0.0474) .. ( 0.7843, 0.0564)
+ .. controls ( 0.7724, 0.0633) and ( 0.7645, 0.0636) .. ( 0.7518, 0.0664)
+ .. controls ( 0.7688, 0.1093) and ( 0.7993, 0.1905) .. ( 0.7930, 0.2362)
+ .. controls ( 0.7869, 0.2804) and ( 0.7252, 0.2982) .. ( 0.6946, 0.3268)
+ .. controls ( 0.6664, 0.3531) and ( 0.6746, 0.3662) .. ( 0.6323, 0.3966)
+ .. controls ( 0.5760, 0.4371) and ( 0.5386, 0.4324) .. ( 0.5250, 0.4601)
+ .. controls ( 0.5090, 0.4927) and ( 0.5578, 0.6035) .. ( 0.5969, 0.5911)
+ .. controls ( 0.6199, 0.5839) and ( 0.6224, 0.5471) .. ( 0.6341, 0.5291)
+ .. controls ( 0.6488, 0.5064) and ( 0.7020, 0.4614) .. ( 0.7263, 0.4493)
+ -- ( 0.7373, 0.4768)
+ -- ( 0.6866, 0.5671)
+ -- ( 0.6756, 0.5720)
+ -- ( 0.6766, 0.5850)
+ -- ( 0.6331, 0.6627)
+ .. controls ( 0.6280, 0.6613) and ( 0.6239, 0.6599) .. ( 0.6157, 0.6589)
+ -- ( 0.5646, 0.6589)
+ .. controls ( 0.5375, 0.6557) and ( 0.5277, 0.6432) .. ( 0.4965, 0.6489)
+ .. controls ( 0.4716, 0.6520) and ( 0.4306, 0.6774) .. ( 0.4104, 0.6489)
+ .. controls ( 0.3809, 0.6093) and ( 0.4627, 0.6240) .. ( 0.4837, 0.5772)
+ .. controls ( 0.4958, 0.5502) and ( 0.4652, 0.4811) .. ( 0.4429, 0.4648)
+ -- ( 0.3523, 0.4350)
+ .. controls ( 0.3178, 0.4372) and ( 0.3207, 0.4766) .. ( 0.3153, 0.5004)
+ .. controls ( 0.3090, 0.5282) and ( 0.2968, 0.5398) .. ( 0.2922, 0.5684)
+ .. controls ( 0.2896, 0.6035) and ( 0.3061, 0.6276) .. ( 0.2922, 0.6621)
+ .. controls ( 0.2756, 0.6961) and ( 0.2422, 0.7190) .. ( 0.2525, 0.7640)
+ .. controls ( 0.2650, 0.8188) and ( 0.3165, 0.7932) .. ( 0.3324, 0.8417)
+ .. controls ( 0.3359, 0.8522) and ( 0.3385, 0.8648) .. ( 0.3399, 0.8778)
+ --cycle
+ ( 0.4261, 0.8770)
+ -- ( 0.4333, 0.8493)
+ -- ( 0.4845, 0.7440)
+ .. controls ( 0.4963, 0.7304) and ( 0.5450, 0.6930) .. ( 0.5630, 0.6989)
+ .. controls ( 0.5735, 0.7024) and ( 0.5838, 0.7169) .. ( 0.5932, 0.7337)
+ -- ( 0.5612, 0.7909)
+ .. controls ( 0.5537, 0.7875) and ( 0.5468, 0.7852) .. ( 0.5403, 0.7864)
+ .. controls ( 0.5078, 0.7926) and ( 0.5191, 0.8406) .. ( 0.5145, 0.8567)
+ .. controls ( 0.5121, 0.8651) and ( 0.5076, 0.8710) .. ( 0.5025, 0.8764)
+ --cycle
+ ( 0.3773, 0.8153)
+ .. controls ( 0.3625, 0.7892) and ( 0.2993, 0.7161) .. ( 0.3316, 0.6877)
+ .. controls ( 0.3432, 0.6774) and ( 0.3866, 0.6728) .. ( 0.4029, 0.6706)
+ -- ( 0.3973, 0.7472)
+ -- ( 0.4029, 0.8153)
+ --cycle
+ (-0.4224, 0.8088)
+ .. controls (-0.4416, 0.8077) and (-0.4585, 0.7826) .. (-0.4275, 0.7562)
+ -- (-0.3971, 0.7387)
+ .. controls (-0.4780, 0.6942) and (-0.4752, 0.6640) .. (-0.4591, 0.5855)
+ .. controls (-0.4391, 0.4887) and (-0.4527, 0.5347) .. (-0.4103, 0.4493)
+ .. controls (-0.3870, 0.4026) and (-0.4070, 0.3747) .. (-0.3460, 0.3642)
+ -- (-0.3352, 0.4823)
+ .. controls (-0.3409, 0.5024) and (-0.3617, 0.5113) .. (-0.3739, 0.5281)
+ -- (-0.4164, 0.6287)
+ .. controls (-0.4188, 0.6375) and (-0.4186, 0.6444) .. (-0.4164, 0.6528)
+ .. controls (-0.4067, 0.6807) and (-0.3521, 0.7255) .. (-0.3274, 0.6931)
+ .. controls (-0.3070, 0.6694) and (-0.3336, 0.6432) .. (-0.3274, 0.6221)
+ .. controls (-0.3249, 0.6055) and (-0.3059, 0.6028) .. (-0.2950, 0.6162)
+ .. controls (-0.2867, 0.6265) and (-0.2838, 0.6558) .. (-0.2829, 0.6692)
+ .. controls (-0.2775, 0.7444) and (-0.3333, 0.7652) .. (-0.3955, 0.7472)
+ .. controls (-0.3950, 0.7586) and (-0.3916, 0.7684) .. (-0.3955, 0.7803)
+ .. controls (-0.3986, 0.8016) and (-0.4109, 0.8096) .. (-0.4224, 0.8088)
+ --cycle
+ (-0.1391, 0.8077)
+ .. controls (-0.1634, 0.8024) and (-0.1582, 0.7647) .. (-0.1487, 0.7492)
+ .. controls (-0.1306, 0.7190) and (-0.1004, 0.7270) .. (-0.0652, 0.7073)
+ -- (-0.0226, 0.6801)
+ -- ( 0.0282, 0.6560)
+ .. controls ( 0.0622, 0.6331) and ( 0.0955, 0.5639) .. ( 0.1219, 0.5259)
+ .. controls ( 0.2125, 0.5714) and ( 0.1427, 0.6114) .. ( 0.1219, 0.6453)
+ -- ( 0.1054, 0.6768)
+ .. controls ( 0.0862, 0.7028) and ( 0.0448, 0.7080) .. ( 0.0115, 0.7299)
+ .. controls (-0.0377, 0.7622) and (-0.0173, 0.7726) .. (-0.0822, 0.7918)
+ .. controls (-0.0961, 0.7958) and (-0.1270, 0.8103) .. (-0.1391, 0.8077)
+ --cycle
+ (-0.5460, 0.7940)
+ -- (-0.5911, 0.7166)
+ .. controls (-0.5649, 0.7015) and (-0.5397, 0.7188) .. (-0.5308, 0.7556)
+ .. controls (-0.5251, 0.7788) and (-0.5335, 0.7873) .. (-0.5460, 0.7940)
+ --cycle
+ (-0.2382, 0.7423)
+ .. controls (-0.2453, 0.7424) and (-0.2512, 0.7383) .. (-0.2550, 0.7274)
+ .. controls (-0.2635, 0.7026) and (-0.2353, 0.6726) .. (-0.2229, 0.6536)
+ .. controls (-0.2031, 0.6234) and (-0.2020, 0.6105) .. (-0.1928, 0.5770)
+ .. controls (-0.1763, 0.5803) and (-0.1499, 0.5890) .. (-0.1342, 0.5831)
+ .. controls (-0.1112, 0.5745) and (-0.1047, 0.5481) .. (-0.0866, 0.5338)
+ -- (-0.0397, 0.5102)
+ -- ( 0.0664, 0.4219)
+ .. controls ( 0.0874, 0.3954) and ( 0.0785, 0.3655) .. ( 0.1070, 0.3502)
+ .. controls ( 0.1367, 0.3343) and ( 0.1690, 0.3592) .. ( 0.1732, 0.3899)
+ .. controls ( 0.1755, 0.4075) and ( 0.1545, 0.4554) .. ( 0.1475, 0.4748)
+ .. controls ( 0.0838, 0.4666) and ( 0.0509, 0.4836) .. ( 0.0454, 0.5515)
+ .. controls (-0.0576, 0.5778) and (-0.0955, 0.6323) .. (-0.1754, 0.6949)
+ .. controls (-0.1861, 0.7034) and (-0.2171, 0.7418) .. (-0.2382, 0.7423)
+ --cycle
+ (-0.5068, 0.6706)
+ .. controls (-0.5119, 0.6724) and (-0.5194, 0.6726) .. (-0.5299, 0.6701)
+ .. controls (-0.5512, 0.6413) and (-0.5242, 0.6333) .. (-0.5102, 0.6400)
+ .. controls (-0.4981, 0.6457) and (-0.4916, 0.6653) .. (-0.5068, 0.6706)
+ --cycle
+ (-0.6356, 0.6402)
+ -- (-0.6681, 0.5845)
+ -- (-0.6588, 0.5684)
+ .. controls (-0.6473, 0.5521) and (-0.6323, 0.5371) .. (-0.6265, 0.5174)
+ .. controls (-0.6174, 0.4865) and (-0.6614, 0.4161) .. (-0.6950, 0.4206)
+ .. controls (-0.7111, 0.4226) and (-0.7174, 0.4376) .. (-0.7460, 0.4507)
+ -- (-0.7632, 0.4212)
+ .. controls (-0.7629, 0.4042) and (-0.7611, 0.3875) .. (-0.7546, 0.3789)
+ .. controls (-0.7424, 0.3626) and (-0.7129, 0.3612) .. (-0.6966, 0.3297)
+ .. controls (-0.6823, 0.3022) and (-0.6963, 0.2741) .. (-0.6808, 0.2598)
+ .. controls (-0.6602, 0.2410) and (-0.6495, 0.2720) .. (-0.6484, 0.2878)
+ .. controls (-0.6461, 0.3229) and (-0.6488, 0.4046) .. (-0.6080, 0.4204)
+ .. controls (-0.5750, 0.4330) and (-0.4980, 0.3514) .. (-0.4929, 0.3217)
+ .. controls (-0.4895, 0.3019) and (-0.5044, 0.2671) .. (-0.4860, 0.2550)
+ .. controls (-0.4691, 0.2439) and (-0.4582, 0.2679) .. (-0.4535, 0.2796)
+ .. controls (-0.4450, 0.3015) and (-0.4273, 0.3562) .. (-0.4401, 0.3771)
+ .. controls (-0.4495, 0.3922) and (-0.5019, 0.4172) .. (-0.5296, 0.4507)
+ .. controls (-0.5656, 0.4941) and (-0.5734, 0.5631) .. (-0.5973, 0.6021)
+ .. controls (-0.6099, 0.6226) and (-0.6226, 0.6316) .. (-0.6356, 0.6402)
+ --cycle
+ ( 0.2242, 0.6110)
+ -- ( 0.1816, 0.6025)
+ -- ( 0.1816, 0.5855)
+ .. controls ( 0.2117, 0.5815) and ( 0.2140, 0.5821) .. ( 0.2242, 0.6110)
+ --cycle
+ ( 0.3924, 0.6049)
+ .. controls ( 0.3895, 0.6048) and ( 0.3860, 0.6036) .. ( 0.3820, 0.6011)
+ .. controls ( 0.3535, 0.5835) and ( 0.3670, 0.5238) .. ( 0.3773, 0.5004)
+ -- ( 0.3944, 0.5004)
+ -- ( 0.4061, 0.5429)
+ .. controls ( 0.4082, 0.5540) and ( 0.4130, 0.6056) .. ( 0.3924, 0.6049)
+ --cycle
+ (-0.2864, 0.5940)
+ .. controls (-0.2904, 0.5793) and (-0.2950, 0.5676) .. (-0.2919, 0.5518)
+ .. controls (-0.2769, 0.4768) and (-0.1616, 0.5041) .. (-0.2162, 0.5623)
+ .. controls (-0.2236, 0.5702) and (-0.2346, 0.5747) .. (-0.2443, 0.5790)
+ --cycle
+ (-0.7010, 0.5280)
+ -- (-0.7269, 0.4835)
+ .. controls (-0.7207, 0.4876) and (-0.7144, 0.4952) .. (-0.7081, 0.5094)
+ --cycle
+ (-0.0992, 0.4748)
+ -- (-0.2099, 0.4556)
+ -- (-0.2888, 0.3790)
+ -- (-0.3460, 0.3557)
+ -- (-0.3389, 0.3218)
+ .. controls (-0.3310, 0.2959) and (-0.3026, 0.2636) .. (-0.2781, 0.2927)
+ .. controls (-0.2745, 0.2971) and (-0.2504, 0.3947) .. (-0.1948, 0.3764)
+ .. controls (-0.1607, 0.3651) and (-0.1697, 0.2984) .. (-0.1588, 0.2536)
+ -- (-0.1503, 0.2536)
+ -- (-0.1503, 0.2450)
+ -- (-0.1163, 0.2366)
+ .. controls (-0.0968, 0.3059) and (-0.1262, 0.3371) .. (-0.1239, 0.3982)
+ .. controls (-0.1229, 0.4261) and (-0.1067, 0.4484) .. (-0.0992, 0.4748)
+ --cycle
+ (-0.1503, 0.2450)
+ -- (-0.1588, 0.2536)
+ .. controls (-0.2292, 0.2544) and (-0.2730, 0.2893) .. (-0.2677, 0.2195)
+ -- (-0.2609, 0.1855)
+ .. controls (-0.2393, 0.1890) and (-0.2005, 0.2039) .. (-0.1909, 0.1753)
+ .. controls (-0.1709, 0.1163) and (-0.2582, 0.0953) .. (-0.2387, 0.0533)
+ .. controls (-0.2275, 0.0292) and (-0.1430, 0.0537) .. (-0.1361, 0.0692)
+ .. controls (-0.1250, 0.0859) and (-0.1359, 0.1083) .. (-0.1361, 0.1259)
+ .. controls (-0.1437, 0.1788) and (-0.1186, 0.1766) .. (-0.1503, 0.2450)
+ --cycle
+ ( 0.7348, 0.4408)
+ .. controls ( 0.7113, 0.3774) and ( 0.7569, 0.3513) .. ( 0.7901, 0.3824)
+ -- ( 0.7585, 0.4390)
+ --cycle
+ ( 0.2071, 0.4153)
+ .. controls ( 0.1984, 0.3706) and ( 0.2118, 0.3204) .. ( 0.2582, 0.3046)
+ .. controls ( 0.2685, 0.3631) and ( 0.2706, 0.3931) .. ( 0.2071, 0.4153)
+ --cycle
+ (-0.0567, 0.3982)
+ .. controls (-0.0558, 0.3230) and (-0.0460, 0.3456) .. (-0.0210, 0.2876)
+ -- ( 0.0067, 0.1940)
+ .. controls ( 0.0180, 0.1513) and ( 0.0026, 0.1332) .. ( 0.0454, 0.1089)
+ -- ( 0.0767, 0.1940)
+ -- ( 0.0546, 0.2621)
+ -- ( 0.0406, 0.3185)
+ -- (-0.0258, 0.3896)
+ --cycle
+ (-0.7969, 0.3634)
+ -- (-0.8570, 0.2602)
+ .. controls (-0.8515, 0.2550) and (-0.8469, 0.2514) .. (-0.8414, 0.2450)
+ .. controls (-0.8020, 0.1990) and (-0.8201, 0.1971) .. (-0.7629, 0.1540)
+ .. controls (-0.7462, 0.1414) and (-0.7054, 0.1023) .. (-0.6834, 0.1181)
+ .. controls (-0.6662, 0.1304) and (-0.6813, 0.1625) .. (-0.6882, 0.1768)
+ .. controls (-0.7213, 0.2456) and (-0.7865, 0.2417) .. (-0.8004, 0.2965)
+ .. controls (-0.8052, 0.3154) and (-0.7990, 0.3413) .. (-0.7969, 0.3634)
+ --cycle
+ ( 0.8244, 0.3214)
+ .. controls ( 0.8136, 0.3128) and ( 0.8080, 0.2984) .. ( 0.8114, 0.2706)
+ .. controls ( 0.8314, 0.2739) and ( 0.8424, 0.2735) .. ( 0.8526, 0.2710)
+ --cycle
+ ( 0.5015, 0.3207)
+ .. controls ( 0.4943, 0.3196) and ( 0.4861, 0.3171) .. ( 0.4766, 0.3130)
+ .. controls ( 0.4611, 0.2827) and ( 0.4839, 0.2747) .. ( 0.5028, 0.2521)
+ -- ( 0.5376, 0.1972)
+ .. controls ( 0.5529, 0.1772) and ( 0.5728, 0.1698) .. ( 0.5845, 0.1426)
+ .. controls ( 0.5979, 0.1115) and ( 0.5837, 0.0732) .. ( 0.5987, 0.0532)
+ .. controls ( 0.6095, 0.0384) and ( 0.6236, 0.0428) .. ( 0.6350, 0.0532)
+ .. controls ( 0.6681, 0.0842) and ( 0.6456, 0.1087) .. ( 0.6482, 0.1429)
+ .. controls ( 0.6481, 0.1614) and ( 0.6596, 0.1802) .. ( 0.6482, 0.1967)
+ .. controls ( 0.6390, 0.2131) and ( 0.5992, 0.2239) .. ( 0.5768, 0.2483)
+ .. controls ( 0.5547, 0.2722) and ( 0.5524, 0.3288) .. ( 0.5015, 0.3207)
+ --cycle
+ (-0.5678, 0.3115)
+ .. controls (-0.5832, 0.3118) and (-0.6140, 0.2810) .. (-0.6269, 0.2706)
+ .. controls (-0.6185, 0.2412) and (-0.5926, 0.1953) .. (-0.5973, 0.1685)
+ .. controls (-0.6029, 0.1373) and (-0.6320, 0.1239) .. (-0.6369, 0.0996)
+ .. controls (-0.6406, 0.0816) and (-0.6303, 0.0652) .. (-0.6237, 0.0493)
+ .. controls (-0.6147, 0.0275) and (-0.6000,-0.0443) .. (-0.5641,-0.0258)
+ .. controls (-0.5134,-0.0018) and (-0.5902, 0.0606) .. (-0.5641, 0.1074)
+ .. controls (-0.5332, 0.1697) and (-0.4913, 0.1444) .. (-0.4481, 0.1593)
+ .. controls (-0.3913, 0.1792) and (-0.3439, 0.2446) .. (-0.3545, 0.3046)
+ -- (-0.4568, 0.2201)
+ -- (-0.5588, 0.2201)
+ .. controls (-0.5549, 0.2390) and (-0.5305, 0.3109) .. (-0.5678, 0.3115)
+ --cycle
+ ( 0.2243, 0.2813)
+ -- ( 0.1631, 0.2450)
+ -- ( 0.0965, 0.2281)
+ -- ( 0.1689, 0.1131)
+ -- ( 0.2065, 0.0861)
+ .. controls ( 0.2453, 0.0564) and ( 0.2384, 0.0410) .. ( 0.2923, 0.0323)
+ -- ( 0.2988,-0.0188)
+ .. controls ( 0.2994,-0.0695) and ( 0.2657,-0.0796) .. ( 0.2249,-0.0579)
+ .. controls ( 0.1337,-0.0093) and ( 0.1545, 0.0219) .. ( 0.1102, 0.0744)
+ .. controls ( 0.0914, 0.0967) and ( 0.0807, 0.1010) .. ( 0.0539, 0.1089)
+ .. controls ( 0.0562, 0.0613) and ( 0.0756,-0.0434) .. ( 0.0403,-0.0825)
+ .. controls ( 0.0293,-0.0948) and (-0.0336,-0.1168) .. (-0.0567,-0.1294)
+ .. controls (-0.0615,-0.1087) and (-0.0777,-0.0729) .. (-0.0703,-0.0546)
+ .. controls (-0.0586,-0.0251) and ( 0.0562, 0.0040) .. (-0.0152, 0.0389)
+ -- (-0.0397, 0.0480)
+ -- (-0.0737, 0.0578)
+ .. controls (-0.0806, 0.0391) and (-0.0849, 0.0192) .. (-0.1018, 0.0068)
+ .. controls (-0.1154,-0.0032) and (-0.1352,-0.0018) .. (-0.1438,-0.0212)
+ .. controls (-0.1562,-0.0491) and (-0.1117,-0.1243) .. (-0.0874,-0.1373)
+ .. controls (-0.0745,-0.1434) and (-0.0687,-0.1394) .. (-0.0567,-0.1373)
+ .. controls (-0.0358,-0.2033) and (-0.0062,-0.1612) .. ( 0.0370,-0.1500)
+ -- ( 0.1050,-0.1379)
+ .. controls ( 0.0882,-0.0871) and ( 0.0808,-0.0999) .. ( 0.0965,-0.0443)
+ .. controls ( 0.1454,-0.0619) and ( 0.1336,-0.0743) .. ( 0.1664,-0.0940)
+ .. controls ( 0.1897,-0.1081) and ( 0.2226,-0.1052) .. ( 0.2361,-0.1388)
+ .. controls ( 0.2495,-0.1724) and ( 0.2245,-0.1963) .. ( 0.2412,-0.2584)
+ .. controls ( 0.2526,-0.2569) and ( 0.2622,-0.2548) .. ( 0.2735,-0.2584)
+ .. controls ( 0.2987,-0.2708) and ( 0.3225,-0.3241) .. ( 0.3212,-0.3506)
+ .. controls ( 0.3203,-0.3711) and ( 0.3053,-0.3950) .. ( 0.3008,-0.4443)
+ -- ( 0.2497,-0.4187)
+ .. controls ( 0.2599,-0.4479) and ( 0.2621,-0.4475) .. ( 0.2905,-0.4528)
+ .. controls ( 0.2877,-0.4715) and ( 0.2799,-0.4998) .. ( 0.2905,-0.5182)
+ .. controls ( 0.2991,-0.5392) and ( 0.3228,-0.5357) .. ( 0.3346,-0.5182)
+ .. controls ( 0.3506,-0.4943) and ( 0.3355,-0.4515) .. ( 0.3532,-0.4203)
+ .. controls ( 0.3716,-0.3881) and ( 0.4096,-0.3844) .. ( 0.4084,-0.3499)
+ .. controls ( 0.4074,-0.3241) and ( 0.3866,-0.3087) .. ( 0.3728,-0.2897)
+ -- ( 0.3426,-0.2337)
+ -- ( 0.2989,-0.1879)
+ .. controls ( 0.2810,-0.1587) and ( 0.2976,-0.1327) .. ( 0.3187,-0.1323)
+ .. controls ( 0.3342,-0.1319) and ( 0.3489,-0.1451) .. ( 0.3603,-0.1541)
+ .. controls ( 0.3817,-0.1712) and ( 0.4026,-0.1894) .. ( 0.4144,-0.2146)
+ .. controls ( 0.4299,-0.2477) and ( 0.4289,-0.2977) .. ( 0.4712,-0.3110)
+ .. controls ( 0.4957,-0.3188) and ( 0.5167,-0.3024) .. ( 0.5044,-0.2753)
+ .. controls ( 0.4967,-0.2585) and ( 0.4769,-0.2471) .. ( 0.4676,-0.2227)
+ .. controls ( 0.4582,-0.1981) and ( 0.4681,-0.1743) .. ( 0.4488,-0.1492)
+ .. controls ( 0.4286,-0.1227) and ( 0.3809,-0.1095) .. ( 0.3621,-0.0696)
+ .. controls ( 0.3402,-0.0230) and ( 0.3896, 0.0270) .. ( 0.3092, 0.0408)
+ -- ( 0.3532, 0.1933)
+ -- ( 0.3944, 0.2536)
+ -- ( 0.3433, 0.2765)
+ --cycle
+ ( 0.2497, 0.2450)
+ -- ( 0.2782, 0.2025)
+ .. controls ( 0.2843, 0.1911) and ( 0.2884, 0.1815) .. ( 0.2900, 0.1685)
+ .. controls ( 0.3021, 0.0654) and ( 0.1495, 0.1479) .. ( 0.2135, 0.2245)
+ .. controls ( 0.2246, 0.2378) and ( 0.2346, 0.2396) .. ( 0.2497, 0.2450)
+ --cycle
+ ( 0.8836, 0.2157)
+ .. controls ( 0.8688, 0.2061) and ( 0.8571, 0.1889) .. ( 0.8687, 0.1736)
+ .. controls ( 0.8785, 0.1608) and ( 0.8967, 0.1613) .. ( 0.9161, 0.1578)
+ --cycle
+ (-0.3035, 0.1940)
+ .. controls (-0.3340, 0.1390) and (-0.3508, 0.1491) .. (-0.3624, 0.1300)
+ .. controls (-0.3738, 0.1112) and (-0.3588, 0.0896) .. (-0.3288, 0.0972)
+ .. controls (-0.2842, 0.1084) and (-0.2392, 0.1714) .. (-0.3035, 0.1940)
+ --cycle
+ ( 0.4710, 0.1940)
+ .. controls ( 0.4330, 0.1525) and ( 0.3961, 0.1447) .. ( 0.4114, 0.0833)
+ .. controls ( 0.4294, 0.0897) and ( 0.4596, 0.1056) .. ( 0.4776, 0.0984)
+ .. controls ( 0.5010, 0.0888) and ( 0.5182, 0.0420) .. ( 0.4925, 0.0231)
+ .. controls ( 0.4698, 0.0064) and ( 0.4500, 0.0299) .. ( 0.3944, 0.0153)
+ .. controls ( 0.4243,-0.0189) and ( 0.4618,-0.0333) .. ( 0.4765,-0.0621)
+ .. controls ( 0.4928,-0.0939) and ( 0.4729,-0.1183) .. ( 0.4881,-0.1406)
+ .. controls ( 0.4977,-0.1549) and ( 0.5241,-0.1630) .. ( 0.5425,-0.1894)
+ .. controls ( 0.5557,-0.2085) and ( 0.5562,-0.2282) .. ( 0.5657,-0.2485)
+ -- ( 0.6122,-0.3251)
+ .. controls ( 0.6335,-0.3720) and ( 0.6160,-0.3973) .. ( 0.6323,-0.4443)
+ .. controls ( 0.6532,-0.5042) and ( 0.6754,-0.5231) .. ( 0.6973,-0.5440)
+ -- ( 0.7289,-0.4899)
+ .. controls ( 0.7138,-0.4739) and ( 0.6992,-0.4579) .. ( 0.6886,-0.4358)
+ -- ( 0.6489,-0.2690)
+ .. controls ( 0.6485,-0.2445) and ( 0.6654,-0.2180) .. ( 0.6598,-0.2002)
+ .. controls ( 0.6522,-0.1752) and ( 0.6202,-0.1899) .. ( 0.5938,-0.1612)
+ .. controls ( 0.5619,-0.1263) and ( 0.5907,-0.0980) .. ( 0.5797,-0.0720)
+ .. controls ( 0.5714,-0.0525) and ( 0.5434,-0.0441) .. ( 0.5374,-0.0184)
+ .. controls ( 0.5319, 0.0056) and ( 0.5522, 0.0300) .. ( 0.5533, 0.0578)
+ .. controls ( 0.5548, 0.0943) and ( 0.4981, 0.1701) .. ( 0.4710, 0.1940)
+ --cycle
+ (-0.9001, 0.1862)
+ -- (-0.9386, 0.1201)
+ .. controls (-0.9374, 0.1181) and (-0.9371, 0.1158) .. (-0.9356, 0.1139)
+ .. controls (-0.9242, 0.0996) and (-0.9046, 0.0893) .. (-0.8911, 0.0660)
+ .. controls (-0.8684, 0.0268) and (-0.8960, 0.0297) .. (-0.8592,-0.0296)
+ .. controls (-0.8262,-0.0830) and (-0.8655,-0.1092) .. (-0.7971,-0.1209)
+ -- (-0.7875, 0.0068)
+ -- (-0.8579, 0.1174)
+ --cycle
+ (-0.4453, 0.0979)
+ .. controls (-0.4922, 0.0916) and (-0.4988, 0.0347) .. (-0.4759, 0.0116)
+ .. controls (-0.4491,-0.0149) and (-0.4165, 0.0208) .. (-0.3900, 0.0116)
+ .. controls (-0.3555,-0.0011) and (-0.3800,-0.0410) .. (-0.3751,-0.0698)
+ -- (-0.3537,-0.1294)
+ .. controls (-0.3428,-0.1879) and (-0.4042,-0.1777) .. (-0.3801,-0.2656)
+ .. controls (-0.3617,-0.2531) and (-0.3352,-0.2292) .. (-0.3122,-0.2330)
+ .. controls (-0.2845,-0.2375) and (-0.2669,-0.2694) .. (-0.2543,-0.2911)
+ .. controls (-0.2183,-0.3533) and (-0.2004,-0.3613) .. (-0.2184,-0.4358)
+ .. controls (-0.3300,-0.4097) and (-0.2723,-0.5065) .. (-0.2483,-0.5549)
+ -- (-0.2129,-0.6314)
+ .. controls (-0.2017,-0.6508) and (-0.1900,-0.6661) .. (-0.1670,-0.6712)
+ .. controls (-0.1211,-0.6813) and (-0.1100,-0.6527) .. (-0.1163,-0.6145)
+ .. controls (-0.1327,-0.6119) and (-0.1427,-0.6118) .. (-0.1568,-0.6009)
+ .. controls (-0.1780,-0.5845) and (-0.2123,-0.5041) .. (-0.2042,-0.4783)
+ .. controls (-0.1947,-0.4484) and (-0.1575,-0.4121) .. (-0.1333,-0.3932)
+ -- (-0.1527,-0.3251)
+ -- (-0.1588,-0.2656)
+ .. controls (-0.2187,-0.2715) and (-0.2083,-0.2536) .. (-0.2457,-0.2163)
+ .. controls (-0.2684,-0.1935) and (-0.2911,-0.1886) .. (-0.2996,-0.1546)
+ -- (-0.2996,-0.1209)
+ -- (-0.3232,-0.0698)
+ .. controls (-0.3283,-0.0435) and (-0.3124,-0.0260) .. (-0.3175,-0.0041)
+ .. controls (-0.3251, 0.0283) and (-0.3891, 0.0917) .. (-0.4227, 0.0973)
+ .. controls (-0.4311, 0.0987) and (-0.4386, 0.0989) .. (-0.4453, 0.0979)
+ --cycle
+ (-0.1163,-0.6145)
+ -- (-0.0812,-0.6009)
+ -- (-0.0509,-0.4868)
+ -- (-0.0567,-0.4528)
+ .. controls (-0.1227,-0.4845) and (-0.1350,-0.5483) .. (-0.1163,-0.6145)
+ --cycle
+ ( 0.9165, 0.0573)
+ .. controls ( 0.8982, 0.0512) and ( 0.8800, 0.0260) .. ( 0.8880,-0.0013)
+ .. controls ( 0.8973,-0.0334) and ( 0.9330,-0.0408) .. ( 0.9466,-0.0703)
+ .. controls ( 0.9528,-0.0838) and ( 0.9514,-0.0964) .. ( 0.9506,-0.1091)
+ -- ( 1.0000,-0.0243)
+ .. controls ( 0.9816,-0.0179) and ( 0.9678,-0.0119) .. ( 0.9563, 0.0077)
+ .. controls ( 0.9465, 0.0244) and ( 0.9476, 0.0488) .. ( 0.9340, 0.0564)
+ .. controls ( 0.9288, 0.0593) and ( 0.9227, 0.0593) .. ( 0.9165, 0.0573)
+ --cycle
+ (-0.7064, 0.0069)
+ .. controls (-0.7128, 0.0077) and (-0.7187, 0.0075) .. (-0.7237, 0.0061)
+ .. controls (-0.7255, 0.0030) and (-0.7310, 0.0025) .. (-0.7316,-0.0115)
+ .. controls (-0.7321,-0.0230) and (-0.7071,-0.1058) .. (-0.6984,-0.1096)
+ .. controls (-0.6872,-0.1176) and (-0.6721,-0.1116) .. (-0.6609,-0.1096)
+ .. controls (-0.6502,-0.1046) and (-0.6316,-0.0986) .. (-0.6242,-0.0900)
+ .. controls (-0.5901,-0.0507) and (-0.6615, 0.0017) .. (-0.7064, 0.0069)
+ --cycle
+ (-1.0000, 0.0068)
+ -- (-1.0000, 0.0020)
+ -- (-0.9548,-0.0788)
+ .. controls (-0.9170,-0.0310) and (-0.9342,-0.0158) .. (-1.0000, 0.0068)
+ --cycle
+ (-0.2643, 0.0054)
+ .. controls (-0.2853,-0.0295) and (-0.2523,-0.0713) .. (-0.2182,-0.0843)
+ .. controls (-0.2024,-0.0902) and (-0.1781,-0.0944) .. (-0.1687,-0.0757)
+ .. controls (-0.1530,-0.0441) and (-0.2378, 0.0095) .. (-0.2643, 0.0054)
+ --cycle
+ ( 0.6299,-0.0102)
+ .. controls ( 0.6155,-0.0145) and ( 0.6071,-0.0342) .. ( 0.6128,-0.0510)
+ .. controls ( 0.6198,-0.0721) and ( 0.6440,-0.0790) .. ( 0.6606,-0.0986)
+ .. controls ( 0.6738,-0.1143) and ( 0.6761,-0.1328) .. ( 0.6948,-0.1437)
+ .. controls ( 0.7092,-0.1520) and ( 0.7311,-0.1484) .. ( 0.7401,-0.1664)
+ .. controls ( 0.7461,-0.1784) and ( 0.7351,-0.2363) .. ( 0.7348,-0.2570)
+ .. controls ( 0.7336,-0.3524) and ( 0.7289,-0.3324) .. ( 0.7620,-0.4187)
+ .. controls ( 0.7631,-0.4216) and ( 0.7642,-0.4246) .. ( 0.7652,-0.4275)
+ -- ( 0.8003,-0.3672)
+ .. controls ( 0.7976,-0.3636) and ( 0.7942,-0.3606) .. ( 0.7918,-0.3568)
+ .. controls ( 0.7778,-0.3349) and ( 0.7645,-0.2537) .. ( 0.7970,-0.2417)
+ .. controls ( 0.8206,-0.2330) and ( 0.8347,-0.2671) .. ( 0.8432,-0.2822)
+ -- ( 0.8469,-0.2872)
+ -- ( 0.8787,-0.2326)
+ -- ( 0.8594,-0.1993)
+ .. controls ( 0.8496,-0.1847) and ( 0.7996,-0.1314) .. ( 0.7847,-0.1281)
+ .. controls ( 0.7712,-0.1229) and ( 0.7642,-0.1268) .. ( 0.7518,-0.1281)
+ .. controls ( 0.7451,-0.1148) and ( 0.7397,-0.1014) .. ( 0.7293,-0.0886)
+ -- ( 0.6461,-0.0117)
+ .. controls ( 0.6402,-0.0090) and ( 0.6347,-0.0087) .. ( 0.6299,-0.0102)
+ --cycle
+ (-0.5178,-0.0844)
+ .. controls (-0.5451,-0.0820) and (-0.5852,-0.0947) .. (-0.5902,-0.1144)
+ .. controls (-0.6007,-0.1557) and (-0.5621,-0.1731) .. (-0.5414,-0.1997)
+ .. controls (-0.5274,-0.2177) and (-0.5229,-0.2355) .. (-0.5044,-0.2525)
+ .. controls (-0.4888,-0.2669) and (-0.4706,-0.2705) .. (-0.4543,-0.2923)
+ .. controls (-0.4420,-0.3087) and (-0.4220,-0.3707) .. (-0.4141,-0.3932)
+ .. controls (-0.3620,-0.3875) and (-0.3060,-0.4031) .. (-0.3060,-0.3592)
+ .. controls (-0.3060,-0.3272) and (-0.3358,-0.3272) .. (-0.3716,-0.3008)
+ .. controls (-0.4367,-0.2529) and (-0.4253,-0.2451) .. (-0.4621,-0.1914)
+ .. controls (-0.4700,-0.1800) and (-0.4814,-0.1685) .. (-0.4867,-0.1556)
+ .. controls (-0.4970,-0.1308) and (-0.4804,-0.1088) .. (-0.4966,-0.0923)
+ .. controls (-0.5011,-0.0877) and (-0.5087,-0.0853) .. (-0.5178,-0.0844)
+ --cycle
+ (-0.4165,-0.0846)
+ .. controls (-0.4357,-0.0807) and (-0.4622,-0.1075) .. (-0.4395,-0.1440)
+ .. controls (-0.4316,-0.1566) and (-0.4254,-0.1571) .. (-0.4141,-0.1634)
+ .. controls (-0.4094,-0.1522) and (-0.4042,-0.1415) .. (-0.4019,-0.1294)
+ .. controls (-0.3960,-0.1004) and (-0.4049,-0.0870) .. (-0.4165,-0.0846)
+ --cycle
+ (-0.9358,-0.1125)
+ -- (-0.8813,-0.2098)
+ .. controls (-0.8768,-0.1903) and (-0.8656,-0.1673) .. (-0.8723,-0.1485)
+ .. controls (-0.8801,-0.1269) and (-0.9022,-0.1274) .. (-0.9358,-0.1125)
+ --cycle
+ ( 0.1455,-0.1458)
+ .. controls ( 0.1402,-0.1449) and ( 0.1336,-0.1452) .. ( 0.1255,-0.1471)
+ .. controls ( 0.0901,-0.1850) and ( 0.1064,-0.2454) .. ( 0.1360,-0.2301)
+ .. controls ( 0.1569,-0.2194) and ( 0.1827,-0.1522) .. ( 0.1455,-0.1458)
+ --cycle
+ (-0.1477,-0.1474)
+ .. controls (-0.1646,-0.1458) and (-0.1813,-0.1543) .. (-0.1847,-0.1659)
+ .. controls (-0.1889,-0.1806) and (-0.1612,-0.2953) .. (-0.1163,-0.2315)
+ -- (-0.0420,-0.4418)
+ .. controls (-0.0291,-0.4661) and (-0.0068,-0.4600) .. ( 0.0136,-0.4880)
+ .. controls ( 0.0294,-0.5097) and ( 0.0259,-0.5331) .. ( 0.0419,-0.5487)
+ .. controls ( 0.0694,-0.5755) and ( 0.1462,-0.5710) .. ( 0.1798,-0.6001)
+ -- ( 0.2188,-0.6436)
+ .. controls ( 0.2392,-0.6605) and ( 0.2566,-0.6577) .. ( 0.2804,-0.6838)
+ .. controls ( 0.3122,-0.7186) and ( 0.3037,-0.7586) .. ( 0.3603,-0.7592)
+ .. controls ( 0.3537,-0.7217) and ( 0.3358,-0.6781) .. ( 0.3603,-0.6427)
+ .. controls ( 0.3743,-0.6222) and ( 0.3978,-0.6232) .. ( 0.4032,-0.6039)
+ .. controls ( 0.4084,-0.5852) and ( 0.3901,-0.5654) .. ( 0.3712,-0.5741)
+ .. controls ( 0.3573,-0.5804) and ( 0.3558,-0.5936) .. ( 0.3518,-0.6044)
+ .. controls ( 0.3319,-0.6046) and ( 0.2996,-0.6092) .. ( 0.2842,-0.6044)
+ .. controls ( 0.2568,-0.5917) and ( 0.2515,-0.5648) .. ( 0.2231,-0.5501)
+ .. controls ( 0.1960,-0.5359) and ( 0.1632,-0.5421) .. ( 0.1413,-0.5292)
+ -- ( 0.0626,-0.4601)
+ .. controls ( 0.0525,-0.4430) and ( 0.0547,-0.4207) .. ( 0.0440,-0.4065)
+ .. controls ( 0.0320,-0.3906) and ( 0.0076,-0.3898) .. (-0.0104,-0.3714)
+ .. controls (-0.0515,-0.3289) and ( 0.0146,-0.2721) .. (-0.0737,-0.2358)
+ .. controls (-0.0903,-0.2290) and (-0.0917,-0.2313) .. (-0.1098,-0.2315)
+ -- (-0.1098,-0.1892)
+ .. controls (-0.1137,-0.1607) and (-0.1308,-0.1491) .. (-0.1477,-0.1474)
+ --cycle
+ (-0.7679,-0.1481)
+ .. controls (-0.8119,-0.1523) and (-0.8157,-0.2051) .. (-0.8303,-0.2401)
+ -- (-0.8453,-0.2740)
+ -- (-0.8299,-0.3015)
+ .. controls (-0.7861,-0.2968) and (-0.8116,-0.2403) .. (-0.7732,-0.2278)
+ .. controls (-0.7561,-0.2223) and (-0.7349,-0.2415) .. (-0.7204,-0.2497)
+ .. controls (-0.6711,-0.2774) and (-0.6473,-0.2864) .. (-0.6524,-0.3506)
+ -- (-0.6787,-0.3422)
+ .. controls (-0.6786,-0.3475) and (-0.6826,-0.3544) .. (-0.6787,-0.3655)
+ .. controls (-0.6635,-0.4244) and (-0.5943,-0.3658) .. (-0.5763,-0.3760)
+ .. controls (-0.5586,-0.3861) and (-0.5497,-0.4251) .. (-0.5357,-0.4418)
+ .. controls (-0.5118,-0.4701) and (-0.4694,-0.4662) .. (-0.4504,-0.5047)
+ .. controls (-0.4231,-0.5599) and (-0.4535,-0.6772) .. (-0.4451,-0.7421)
+ .. controls (-0.4389,-0.7901) and (-0.4023,-0.8005) .. (-0.3912,-0.8443)
+ .. controls (-0.3883,-0.8558) and (-0.3874,-0.8667) .. (-0.3869,-0.8774)
+ -- (-0.3386,-0.8778)
+ .. controls (-0.3371,-0.8645) and (-0.3342,-0.8523) .. (-0.3394,-0.8358)
+ .. controls (-0.3448,-0.8167) and (-0.3914,-0.7567) .. (-0.3962,-0.6996)
+ .. controls (-0.4039,-0.6074) and (-0.3294,-0.5871) .. (-0.3545,-0.4954)
+ -- (-0.3886,-0.5039)
+ -- (-0.4196,-0.4442)
+ -- (-0.4864,-0.4090)
+ -- (-0.5345,-0.3241)
+ -- (-0.6106,-0.2802)
+ -- (-0.6106,-0.1975)
+ .. controls (-0.6301,-0.2027) and (-0.6486,-0.2101) .. (-0.6694,-0.2022)
+ .. controls (-0.7004,-0.1904) and (-0.7133,-0.1559) .. (-0.7464,-0.1495)
+ .. controls (-0.7544,-0.1479) and (-0.7616,-0.1475) .. (-0.7679,-0.1481)
+ --cycle
+ ( 0.0029,-0.2060)
+ .. controls (-0.0139,-0.2731) and ( 0.0196,-0.2608) .. ( 0.0476,-0.3014)
+ .. controls ( 0.0682,-0.3314) and ( 0.0511,-0.3569) .. ( 0.0750,-0.3784)
+ .. controls ( 0.0974,-0.3988) and ( 0.1304,-0.3876) .. ( 0.1549,-0.4019)
+ .. controls ( 0.1795,-0.4164) and ( 0.1878,-0.4529) .. ( 0.1987,-0.4783)
+ .. controls ( 0.2461,-0.4539) and ( 0.2519,-0.4021) .. ( 0.2180,-0.3618)
+ .. controls ( 0.1964,-0.3362) and ( 0.1652,-0.3426) .. ( 0.1414,-0.3257)
+ .. controls ( 0.1198,-0.3103) and ( 0.1183,-0.2881) .. ( 0.1007,-0.2689)
+ .. controls ( 0.0838,-0.2504) and ( 0.0265,-0.2166) .. ( 0.0029,-0.2060)
+ --cycle
+ ( 0.2327,-0.2826)
+ .. controls ( 0.1961,-0.2955) and ( 0.1961,-0.3123) .. ( 0.2327,-0.3251)
+ --cycle
+ (-0.7548,-0.3137)
+ .. controls (-0.7774,-0.3164) and (-0.7890,-0.3323) .. (-0.7986,-0.3573)
+ -- (-0.7759,-0.3979)
+ .. controls (-0.7735,-0.3968) and (-0.7711,-0.3964) .. (-0.7688,-0.3946)
+ -- (-0.7205,-0.3166)
+ .. controls (-0.7341,-0.3135) and (-0.7454,-0.3126) .. (-0.7548,-0.3137)
+ --cycle
+ ( 0.4114,-0.3847)
+ .. controls ( 0.4216,-0.4136) and ( 0.4238,-0.4142) .. ( 0.4540,-0.4102)
+ -- ( 0.4540,-0.3932)
+ --cycle
+ ( 0.5395,-0.3997)
+ .. controls ( 0.5263,-0.3990) and ( 0.5044,-0.4032) .. ( 0.4625,-0.4018)
+ -- ( 0.4780,-0.4954)
+ .. controls ( 0.4757,-0.5287) and ( 0.4518,-0.5542) .. ( 0.4648,-0.5776)
+ .. controls ( 0.4852,-0.6142) and ( 0.5202,-0.5603) .. ( 0.5614,-0.5929)
+ .. controls ( 0.5752,-0.6038) and ( 0.6063,-0.6359) .. ( 0.6275,-0.6638)
+ -- ( 0.6570,-0.6132)
+ .. controls ( 0.6460,-0.6042) and ( 0.6347,-0.5954) .. ( 0.6268,-0.5865)
+ -- ( 0.5937,-0.5346)
+ .. controls ( 0.5648,-0.5023) and ( 0.5031,-0.4880) .. ( 0.5646,-0.4273)
+ .. controls ( 0.5574,-0.4062) and ( 0.5528,-0.4005) .. ( 0.5395,-0.3997)
+ --cycle
+ (-0.6609,-0.4273)
+ .. controls (-0.7027,-0.4247) and (-0.7300,-0.4414) .. (-0.7397,-0.4624)
+ -- (-0.7047,-0.5249)
+ .. controls (-0.7013,-0.5263) and (-0.6989,-0.5282) .. (-0.6950,-0.5294)
+ .. controls (-0.6935,-0.4878) and (-0.6933,-0.4806) .. (-0.6609,-0.4528)
+ --cycle
+ (-0.5689,-0.4528)
+ .. controls (-0.6368,-0.4677) and (-0.6352,-0.5020) .. (-0.6354,-0.5634)
+ -- (-0.5757,-0.6071)
+ -- (-0.5162,-0.6826)
+ .. controls (-0.5073,-0.6508) and (-0.5037,-0.6125) .. (-0.5241,-0.5838)
+ .. controls (-0.5384,-0.5639) and (-0.5622,-0.5584) .. (-0.5689,-0.5361)
+ .. controls (-0.5775,-0.5167) and (-0.5648,-0.4918) .. (-0.5689,-0.4528)
+ --cycle
+ (-0.6354,-0.5634)
+ .. controls (-0.6583,-0.5576) and (-0.6713,-0.5579) .. (-0.6839,-0.5619)
+ -- (-0.6487,-0.6248)
+ .. controls (-0.6395,-0.6053) and (-0.6326,-0.5852) .. (-0.6354,-0.5634)
+ --cycle
+ (-0.0056,-0.5890)
+ .. controls (-0.0554,-0.6155) and (-0.0426,-0.6370) .. (-0.0606,-0.6818)
+ -- (-0.1199,-0.7847)
+ .. controls (-0.1298,-0.8015) and (-0.1531,-0.8317) .. (-0.1499,-0.8510)
+ .. controls (-0.1482,-0.8615) and (-0.1397,-0.8702) .. (-0.1295,-0.8795)
+ -- (-0.0507,-0.8802)
+ .. controls (-0.0629,-0.8583) and (-0.0745,-0.8380) .. (-0.0742,-0.8358)
+ .. controls (-0.0792,-0.8239) and (-0.0776,-0.8135) .. (-0.0742,-0.8027)
+ .. controls (-0.0460,-0.7520) and ( 0.0016,-0.7834) .. ( 0.0277,-0.7780)
+ .. controls ( 0.0760,-0.7679) and ( 0.1284,-0.6914) .. ( 0.1207,-0.6405)
+ .. controls ( 0.1150,-0.6017) and ( 0.0841,-0.6082) .. ( 0.0711,-0.6267)
+ .. controls ( 0.0620,-0.6397) and ( 0.0556,-0.7141) .. ( 0.0539,-0.7336)
+ .. controls (-0.0413,-0.7085) and ( 0.0139,-0.6637) .. (-0.0056,-0.5890)
+ --cycle
+ ( 0.4284,-0.6571)
+ .. controls ( 0.4285,-0.7307) and ( 0.4284,-0.7652) .. ( 0.5135,-0.7336)
+ .. controls ( 0.5170,-0.7469) and ( 0.5220,-0.7585) .. ( 0.5179,-0.7726)
+ .. controls ( 0.5091,-0.8019) and ( 0.4473,-0.8546) .. ( 0.4851,-0.8847)
+ -- ( 0.4987,-0.8848)
+ -- ( 0.5768,-0.7509)
+ .. controls ( 0.5767,-0.7509) and ( 0.5767,-0.7507) .. ( 0.5767,-0.7507)
+ .. controls ( 0.5412,-0.6652) and ( 0.5083,-0.6726) .. ( 0.4284,-0.6571)
+ --cycle
+ (-0.2914,-0.6672)
+ .. controls (-0.2998,-0.6666) and (-0.3106,-0.6686) .. (-0.3250,-0.6743)
+ .. controls (-0.3545,-0.7128) and (-0.3081,-0.7358) .. (-0.2850,-0.7678)
+ .. controls (-0.2710,-0.7873) and (-0.2601,-0.8137) .. (-0.2351,-0.8216)
+ .. controls (-0.2083,-0.8301) and (-0.1916,-0.8105) .. (-0.1960,-0.7845)
+ .. controls (-0.2008,-0.7566) and (-0.2232,-0.7418) .. (-0.2396,-0.7216)
+ .. controls (-0.2612,-0.6950) and (-0.2660,-0.6690) .. (-0.2914,-0.6672)
+ --cycle
+ (-0.5641,-0.6998)
+ .. controls (-0.5850,-0.6984) and (-0.5808,-0.7367) .. (-0.5766,-0.7507)
+ .. controls (-0.5748,-0.7566) and (-0.5723,-0.7598) .. (-0.5702,-0.7648)
+ -- (-0.5492,-0.8022)
+ .. controls (-0.5310,-0.8247) and (-0.5120,-0.8367) .. (-0.5052,-0.8613)
+ .. controls (-0.5044,-0.8642) and (-0.5062,-0.8717) .. (-0.5063,-0.8763)
+ -- (-0.4585,-0.8767)
+ .. controls (-0.4596,-0.7984) and (-0.5013,-0.7963) .. (-0.5234,-0.7583)
+ .. controls (-0.5344,-0.7394) and (-0.5352,-0.7120) .. (-0.5535,-0.7030)
+ .. controls (-0.5576,-0.7010) and (-0.5611,-0.7000) .. (-0.5641,-0.6998)
+ --cycle
+ ( 0.1990,-0.7341)
+ .. controls ( 0.1094,-0.7768) and ( 0.2330,-0.8330) .. ( 0.2586,-0.8828)
+ -- ( 0.3183,-0.8833)
+ .. controls ( 0.3165,-0.8684) and ( 0.3066,-0.8565) .. ( 0.2991,-0.8428)
+ .. controls ( 0.2762,-0.8010) and ( 0.2508,-0.7418) .. ( 0.1990,-0.7341)
+ --cycle
+ ( 0.3603,-0.7592)
+ -- ( 0.3859,-0.8188)
+ .. controls ( 0.4178,-0.7853) and ( 0.4108,-0.7527) .. ( 0.3603,-0.7592)
+ --cycle
+ ( 0.4369,-0.8443)
+ .. controls ( 0.4147,-0.8480) and ( 0.3837,-0.8661) .. ( 0.3628,-0.8837)
+ -- ( 0.4240,-0.8842)
+ .. controls ( 0.4307,-0.8690) and ( 0.4358,-0.8541) .. ( 0.4369,-0.8443)
+ --cycle
+ (-0.3205,-0.8528)
+ -- (-0.3266,-0.8779)
+ -- (-0.2773,-0.8783)
+ .. controls (-0.2800,-0.8719) and (-0.2850,-0.8655) .. (-0.2963,-0.8600)
+ --cycle
+ ( 0.1093,-0.8568)
+ .. controls ( 0.0964,-0.8568) and ( 0.0834,-0.8587) .. ( 0.0710,-0.8600)
+ .. controls ( 0.0605,-0.8611) and ( 0.0403,-0.8617) .. ( 0.0312,-0.8664)
+ .. controls ( 0.0240,-0.8701) and ( 0.0203,-0.8751) .. ( 0.0184,-0.8808)
+ -- ( 0.1002,-0.8815)
+ -- ( 0.1050,-0.8698)
+ -- ( 0.1085,-0.8815)
+ -- ( 0.1641,-0.8820)
+ .. controls ( 0.1606,-0.8757) and ( 0.1553,-0.8698) .. ( 0.1463,-0.8649)
+ .. controls ( 0.1347,-0.8586) and ( 0.1221,-0.8568) .. ( 0.1093,-0.8568)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/rough.dtx b/macros/latex/contrib/wargame/source/hex/terrain/rough.dtx
new file mode 100644
index 0000000000..fe716add2f
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/rough.dtx
@@ -0,0 +1,1570 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/rough}
+% The style for rough hexes. The pattern is filled with a light
+% brown, and outlines are not drawn.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/rough/.style={
+ draw=none,
+ fill={rgb,100:red,79;green,68;blue,41}
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{hex/terrain/rough}
+% Roughs. Again, a bit long.
+%
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/rough/.pic={
+ \path[hex/terrain/rough,pic actions,draw=none]
+ (-0.2701, 0.8873)
+ .. controls (-0.2982, 0.8927) and (-0.3250, 0.8675) .. (-0.3296, 0.8537)
+ .. controls (-0.3363, 0.8337) and (-0.3058, 0.8263) .. (-0.2820, 0.8610)
+ .. controls (-0.2717, 0.8450) and (-0.2591, 0.8228) .. (-0.2441, 0.8112)
+ .. controls (-0.2057, 0.7817) and (-0.1394, 0.7709) .. (-0.1208, 0.8270)
+ -- (-0.2226, 0.8355)
+ .. controls (-0.2359, 0.8698) and (-0.2532, 0.8840) .. (-0.2701, 0.8873)
+ --cycle
+ (-0.1081, 0.8792)
+ .. controls (-0.1371, 0.8680) and (-0.1265, 0.8900) .. (-0.1377, 0.8610)
+ .. controls (-0.1121, 0.8691) and (-0.1163, 0.8536) .. (-0.1081, 0.8792)
+ --cycle
+ ( 0.1762, 0.8752)
+ -- ( 0.1761, 0.8710)
+ .. controls ( 0.1746, 0.8556) and ( 0.1707, 0.8704) .. ( 0.1822, 0.8575)
+ .. controls ( 0.1958, 0.8423) and ( 0.2514, 0.8065) .. ( 0.2435, 0.8694)
+ --cycle
+ ( 0.3216, 0.8740)
+ .. controls ( 0.3061, 0.8744) and ( 0.2932, 0.8668) .. ( 0.2896, 0.8414)
+ .. controls ( 0.2869, 0.8222) and ( 0.3049, 0.8110) .. ( 0.3122, 0.7930)
+ -- ( 0.3292, 0.7930)
+ -- ( 0.3377, 0.8440)
+ -- ( 0.3874, 0.8438)
+ -- ( 0.3702, 0.8584)
+ .. controls ( 0.3556, 0.8652) and ( 0.3372, 0.8736) .. ( 0.3216, 0.8740)
+ --cycle
+ ( 0.4696, 0.8697)
+ .. controls ( 0.4362, 0.8687) and ( 0.4116, 0.8113) .. ( 0.4594, 0.7865)
+ -- ( 0.4565, 0.8238)
+ -- ( 0.5034, 0.8485)
+ .. controls ( 0.4927, 0.8641) and ( 0.4807, 0.8700) .. ( 0.4696, 0.8697)
+ --cycle
+ (-0.0783, 0.8695)
+ -- (-0.0698, 0.8185)
+ -- (-0.0528, 0.8185)
+ .. controls (-0.0488, 0.8507) and (-0.0499, 0.8533) .. (-0.0783, 0.8695)
+ --cycle
+ ( 0.0321, 0.8695)
+ .. controls (-0.0074, 0.8534) and (-0.0195, 0.8453) .. (-0.0104, 0.8015)
+ .. controls ( 0.0252, 0.8183) and ( 0.0356, 0.8295) .. ( 0.0321, 0.8695)
+ --cycle
+ (-0.4155, 0.8596)
+ .. controls (-0.4417, 0.8307) and (-0.4165, 0.8213) .. (-0.4032, 0.8284)
+ .. controls (-0.3903, 0.8353) and (-0.3789, 0.8639) .. (-0.4155, 0.8596)
+ --cycle
+ (-0.4857, 0.8525)
+ .. controls (-0.4972, 0.8321) and (-0.5172, 0.8207) .. (-0.5389, 0.8116)
+ -- (-0.5595, 0.7763)
+ .. controls (-0.5377, 0.7748) and (-0.5144, 0.7944) .. (-0.4942, 0.8100)
+ -- (-0.4857, 0.7845)
+ .. controls (-0.4503, 0.8051) and (-0.4552, 0.8169) .. (-0.4688, 0.8525)
+ --cycle
+ ( 0.1002, 0.8511)
+ .. controls ( 0.0869, 0.8528) and ( 0.0769, 0.8478) .. ( 0.0696, 0.8260)
+ -- ( 0.1509, 0.8185)
+ -- ( 0.1509, 0.8355)
+ .. controls ( 0.1302, 0.8408) and ( 0.1135, 0.8493) .. ( 0.1002, 0.8511)
+ --cycle
+ ( 0.2485, 0.8268)
+ .. controls ( 0.2378, 0.8296) and ( 0.2250, 0.8213) .. ( 0.2103, 0.7930)
+ .. controls ( 0.2410, 0.7676) and ( 0.2451, 0.7555) .. ( 0.2867, 0.7591)
+ .. controls ( 0.2791, 0.7861) and ( 0.2665, 0.8220) .. ( 0.2485, 0.8268)
+ --cycle
+ (-0.3754, 0.8100)
+ -- (-0.3754, 0.7930)
+ -- (-0.3330, 0.7930)
+ -- (-0.3330, 0.8100)
+ --cycle
+ ( 0.5066, 0.8010)
+ -- ( 0.5131, 0.7667)
+ -- ( 0.5443, 0.7538)
+ -- ( 0.5566, 0.7611)
+ -- ( 0.5392, 0.7958)
+ --cycle
+ (-0.4008, 0.7930)
+ -- (-0.4348, 0.7591)
+ --cycle
+ ( 0.1509, 0.7930)
+ -- ( 0.1254, 0.7676)
+ .. controls ( 0.1432, 0.7361) and ( 0.1497, 0.7365) .. ( 0.1849, 0.7336)
+ .. controls ( 0.1820, 0.7688) and ( 0.1824, 0.7753) .. ( 0.1509, 0.7930)
+ --cycle
+ ( 0.0301, 0.7854)
+ .. controls ( 0.0240, 0.7861) and ( 0.0162, 0.7858) .. ( 0.0066, 0.7845)
+ -- ( 0.0490, 0.7421)
+ .. controls ( 0.0527, 0.7709) and ( 0.0486, 0.7831) .. ( 0.0301, 0.7854)
+ --cycle
+ (-0.2757, 0.7847)
+ .. controls (-0.2819, 0.7857) and (-0.2896, 0.7857) .. (-0.2990, 0.7845)
+ -- (-0.2820, 0.7411)
+ .. controls (-0.3010, 0.7423) and (-0.3576, 0.7485) .. (-0.3704, 0.7411)
+ .. controls (-0.3832, 0.7314) and (-0.3819, 0.7137) .. (-0.3644, 0.7089)
+ .. controls (-0.3522, 0.7029) and (-0.3199, 0.7069) .. (-0.3075, 0.7089)
+ .. controls (-0.2647, 0.7227) and (-0.2326, 0.7776) .. (-0.2757, 0.7847)
+ --cycle
+ ( 0.3631, 0.7676)
+ -- ( 0.3122, 0.7479)
+ .. controls ( 0.3064, 0.6995) and ( 0.3021, 0.7030) .. ( 0.3546, 0.7166)
+ .. controls ( 0.3550, 0.6777) and ( 0.3499, 0.6644) .. ( 0.3886, 0.6488)
+ .. controls ( 0.3854, 0.7398) and ( 0.3467, 0.6989) .. ( 0.3631, 0.7676)
+ --cycle
+ ( 0.5753, 0.7676)
+ .. controls ( 0.5837, 0.7354) and ( 0.5927, 0.7219) .. ( 0.6097, 0.7131)
+ -- ( 0.5796, 0.7669)
+ .. controls ( 0.5781, 0.7670) and ( 0.5768, 0.7674) .. ( 0.5753, 0.7676)
+ --cycle
+ (-0.5536, 0.7591)
+ -- (-0.5706, 0.7082)
+ -- (-0.5621, 0.6997)
+ -- (-0.5027, 0.6997)
+ .. controls (-0.5136, 0.7365) and (-0.5192, 0.7422) .. (-0.5536, 0.7591)
+ --cycle
+ (-0.1361, 0.7534)
+ .. controls (-0.1512, 0.7509) and (-0.1612, 0.7304) .. (-0.1462, 0.6912)
+ -- (-0.0953, 0.7082)
+ .. controls (-0.1007, 0.7406) and (-0.1210, 0.7560) .. (-0.1361, 0.7534)
+ --cycle
+ (-0.4655, 0.7519)
+ .. controls (-0.4811, 0.7476) and (-0.4887, 0.7146) .. (-0.4551, 0.6911)
+ .. controls (-0.4447, 0.6838) and (-0.4376, 0.6846) .. (-0.4263, 0.6827)
+ -- (-0.4362, 0.7201)
+ .. controls (-0.4440, 0.7466) and (-0.4562, 0.7544) .. (-0.4655, 0.7519)
+ --cycle
+ (-0.2311, 0.7421)
+ -- (-0.2480, 0.7082)
+ -- (-0.1971, 0.6827)
+ -- (-0.2141, 0.7421)
+ --cycle
+ ( 0.4819, 0.7421)
+ -- ( 0.5244, 0.7082)
+ -- ( 0.5329, 0.7166)
+ -- ( 0.5329, 0.7336)
+ --cycle
+ ( 0.4140, 0.7336)
+ .. controls ( 0.4091, 0.6951) and ( 0.4180, 0.6863) .. ( 0.4565, 0.6912)
+ --cycle
+ ( 0.1000, 0.7166)
+ .. controls ( 0.0969, 0.7064) and ( 0.0893, 0.6845) .. ( 0.0896, 0.6747)
+ .. controls ( 0.0911, 0.6142) and ( 0.1603, 0.6571) .. ( 0.1849, 0.6658)
+ -- ( 0.2260, 0.6725)
+ .. controls ( 0.2381, 0.6766) and ( 0.2515, 0.6891) .. ( 0.2429, 0.7019)
+ .. controls ( 0.2330, 0.7185) and ( 0.1897, 0.7058) .. ( 0.1756, 0.7019)
+ -- ( 0.1339, 0.6827)
+ --cycle
+ ( 0.0321, 0.7082)
+ -- (-0.0019, 0.6318)
+ .. controls ( 0.0528, 0.6362) and ( 0.0992, 0.6731) .. ( 0.0321, 0.7082)
+ --cycle
+ ( 0.5074, 0.6997)
+ .. controls ( 0.5090, 0.6563) and ( 0.5107, 0.6351) .. ( 0.5584, 0.6572)
+ --cycle
+ (-0.6116, 0.6867)
+ -- (-0.6413, 0.6359)
+ .. controls (-0.6321, 0.6229) and (-0.6158, 0.6171) .. (-0.6009, 0.6289)
+ .. controls (-0.5820, 0.6437) and (-0.5846, 0.6623) .. (-0.5876, 0.6827)
+ --cycle
+ (-0.3414, 0.6742)
+ .. controls (-0.3515, 0.6371) and (-0.3559, 0.6083) .. (-0.3075, 0.6148)
+ -- (-0.3245, 0.6742)
+ --cycle
+ (-0.5112, 0.6657)
+ -- (-0.5112, 0.6318)
+ -- (-0.4772, 0.6233)
+ -- (-0.5027, 0.5893)
+ -- (-0.5027, 0.5808)
+ -- (-0.4857, 0.5638)
+ .. controls (-0.4400, 0.6074) and (-0.4373, 0.6597) .. (-0.5112, 0.6657)
+ --cycle
+ (-0.2905, 0.6657)
+ .. controls (-0.2682, 0.6064) and (-0.2058, 0.5997) .. (-0.2141, 0.6657)
+ --cycle
+ (-0.0953, 0.6488)
+ -- (-0.1547, 0.6403)
+ -- (-0.1377, 0.5553)
+ -- (-0.1208, 0.5553)
+ .. controls (-0.0926, 0.5982) and (-0.0954, 0.5977) .. (-0.0953, 0.6488)
+ --cycle
+ ( 0.0915, 0.6403)
+ .. controls ( 0.0497, 0.6269) and ( 0.0505, 0.6133) .. ( 0.0490, 0.5723)
+ .. controls ( 0.0796, 0.5913) and ( 0.0822, 0.6066) .. ( 0.0915, 0.6403)
+ --cycle
+ ( 0.4310, 0.6403)
+ .. controls ( 0.4211, 0.6043) and ( 0.4125, 0.5931) .. ( 0.4480, 0.5723)
+ -- ( 0.4819, 0.6148)
+ -- ( 0.4819, 0.6318)
+ --cycle
+ ( 0.5838, 0.6403)
+ .. controls ( 0.5923, 0.5846) and ( 0.5925, 0.5918) .. ( 0.6362, 0.5668)
+ -- ( 0.6521, 0.5663)
+ -- ( 0.6615, 0.5890)
+ .. controls ( 0.6340, 0.6304) and ( 0.6328, 0.6347) .. ( 0.5838, 0.6403)
+ --cycle
+ ( 0.2018, 0.6233)
+ -- ( 0.2018, 0.5808)
+ -- ( 0.2358, 0.5808)
+ .. controls ( 0.2306, 0.6108) and ( 0.2301, 0.6119) .. ( 0.2018, 0.6233)
+ --cycle
+ ( 0.3200, 0.6175)
+ .. controls ( 0.3147, 0.6171) and ( 0.3095, 0.6162) .. ( 0.3037, 0.6159)
+ -- ( 0.3144, 0.5906)
+ .. controls ( 0.3494, 0.5385) and ( 0.3913, 0.6066) .. ( 0.3367, 0.6159)
+ .. controls ( 0.3306, 0.6176) and ( 0.3252, 0.6178) .. ( 0.3200, 0.6175)
+ --cycle
+ ( 0.1254, 0.6148)
+ -- ( 0.1169, 0.5553)
+ -- ( 0.1339, 0.5553)
+ -- ( 0.1594, 0.5808)
+ --cycle
+ (-0.0188, 0.6063)
+ .. controls (-0.0629, 0.5361) and (-0.0925, 0.5785) .. (-0.1038, 0.5044)
+ -- (-0.0528, 0.4875)
+ .. controls (-0.0307, 0.5232) and (-0.0275, 0.5285) .. ( 0.0151, 0.5299)
+ .. controls ( 0.0257, 0.5724) and ( 0.0206, 0.5860) .. (-0.0188, 0.6063)
+ --cycle
+ (-0.2820, 0.5893)
+ .. controls (-0.2753, 0.5073) and (-0.2107, 0.5185) .. (-0.1801, 0.5808)
+ --cycle
+ ( 0.5244, 0.5893)
+ .. controls ( 0.5408, 0.5621) and ( 0.5447, 0.5620) .. ( 0.5753, 0.5553)
+ .. controls ( 0.5625, 0.5873) and ( 0.5579, 0.5867) .. ( 0.5244, 0.5893)
+ --cycle
+ (-0.4023, 0.5839)
+ .. controls (-0.4095, 0.5826) and (-0.4161, 0.5794) .. (-0.4210, 0.5751)
+ .. controls (-0.4340, 0.5638) and (-0.4334, 0.5376) .. (-0.4348, 0.5214)
+ .. controls (-0.3835, 0.5433) and (-0.4044, 0.5361) .. (-0.3499, 0.5299)
+ .. controls (-0.3537, 0.5756) and (-0.3808, 0.5879) .. (-0.4023, 0.5839)
+ --cycle
+ (-0.6717, 0.5836)
+ -- (-0.7007, 0.5338)
+ .. controls (-0.6810, 0.5286) and (-0.6639, 0.5441) .. (-0.6717, 0.5836)
+ --cycle
+ (-0.5683, 0.5760)
+ .. controls (-0.5775, 0.5769) and (-0.5875, 0.5722) .. (-0.6045, 0.5638)
+ -- (-0.5876, 0.5214)
+ -- (-0.5367, 0.5553)
+ .. controls (-0.5506, 0.5688) and (-0.5590, 0.5752) .. (-0.5683, 0.5760)
+ --cycle
+ ( 0.2527, 0.5638)
+ -- ( 0.2782, 0.5129)
+ -- ( 0.2867, 0.5129)
+ -- ( 0.3037, 0.5299)
+ .. controls ( 0.2852, 0.5566) and ( 0.2848, 0.5585) .. ( 0.2527, 0.5638)
+ --cycle
+ ( 0.6946, 0.5616)
+ .. controls ( 0.6944, 0.5600) and ( 0.6921, 0.5548) .. ( 0.6787, 0.5413)
+ -- ( 0.6878, 0.5061)
+ .. controls ( 0.6794, 0.4976) and ( 0.6747, 0.5161) .. ( 0.6694, 0.5045)
+ -- ( 0.6262, 0.5469)
+ .. controls ( 0.6001, 0.4510) and ( 0.6708, 0.4762) .. ( 0.6776, 0.4804)
+ .. controls ( 0.6913, 0.4889) and ( 0.7003, 0.4848) .. ( 0.7078, 0.4982)
+ -- ( 0.7283, 0.4862)
+ -- ( 0.7151, 0.5087)
+ -- ( 0.6995, 0.5381)
+ .. controls ( 0.6915, 0.5505) and ( 0.6933, 0.5583) .. ( 0.6948, 0.5614)
+ --cycle
+ ( 0.1764, 0.5469)
+ .. controls ( 0.1765, 0.5023) and ( 0.1718, 0.4964) .. ( 0.2018, 0.4620)
+ -- ( 0.2443, 0.4790)
+ .. controls ( 0.2287, 0.5015) and ( 0.2286, 0.4995) .. ( 0.2018, 0.4960)
+ -- ( 0.1934, 0.5044)
+ -- ( 0.1934, 0.5469)
+ --cycle
+ ( 0.3971, 0.5384)
+ -- ( 0.4056, 0.5044)
+ -- ( 0.4649, 0.4875)
+ -- ( 0.4904, 0.5384)
+ -- ( 0.4395, 0.5214)
+ --cycle
+ ( 0.5668, 0.5384)
+ .. controls ( 0.5368, 0.5332) and ( 0.5357, 0.5327) .. ( 0.5244, 0.5044)
+ -- ( 0.5329, 0.4960)
+ -- ( 0.5668, 0.5044)
+ -- ( 0.5499, 0.4620)
+ .. controls ( 0.5250, 0.4718) and ( 0.5240, 0.4756) .. ( 0.5074, 0.4535)
+ -- ( 0.5584, 0.4280)
+ .. controls ( 0.6164, 0.4608) and ( 0.5800, 0.4918) .. ( 0.5668, 0.5384)
+ --cycle
+ ( 0.0770, 0.5310)
+ .. controls ( 0.0682, 0.5304) and ( 0.0588, 0.5222) .. ( 0.0538, 0.5053)
+ .. controls ( 0.0343, 0.4401) and ( 0.0794, 0.3794) .. ( 0.1169, 0.4450)
+ -- ( 0.0830, 0.4535)
+ .. controls ( 0.0904, 0.4711) and ( 0.1010, 0.4920) .. ( 0.0968, 0.5117)
+ .. controls ( 0.0941, 0.5249) and ( 0.0858, 0.5317) .. ( 0.0770, 0.5310)
+ --cycle
+ (-0.3075, 0.5299)
+ -- (-0.3414, 0.4790)
+ -- (-0.3330, 0.4705)
+ .. controls (-0.2926, 0.4813) and (-0.2724, 0.4931) .. (-0.3075, 0.5299)
+ --cycle
+ (-0.6105, 0.5210)
+ .. controls (-0.6292, 0.5286) and (-0.6359, 0.5102) .. (-0.6385, 0.4790)
+ -- (-0.5876, 0.5044)
+ .. controls (-0.5967, 0.5132) and (-0.6043, 0.5185) .. (-0.6105, 0.5210)
+ --cycle
+ (-0.6810, 0.5129)
+ .. controls (-0.6924, 0.5121) and (-0.7036, 0.5121) .. (-0.7147, 0.5086)
+ .. controls (-0.7151, 0.5085) and (-0.7153, 0.5083) .. (-0.7157, 0.5081)
+ -- (-0.7430, 0.4612)
+ .. controls (-0.7297, 0.4478) and (-0.7007, 0.4457) .. (-0.6860, 0.4801)
+ .. controls (-0.6815, 0.4906) and (-0.6819, 0.5019) .. (-0.6810, 0.5129)
+ --cycle
+ (-0.1462, 0.5129)
+ .. controls (-0.1949, 0.5129) and (-0.2098, 0.5207) .. (-0.2480, 0.4875)
+ -- (-0.2480, 0.4790)
+ -- (-0.2311, 0.4620)
+ -- (-0.1801, 0.4790)
+ -- (-0.1801, 0.4535)
+ -- (-0.1462, 0.4535)
+ --cycle
+ ( 0.0066, 0.5044)
+ -- (-0.0019, 0.4620)
+ .. controls (-0.0908, 0.4424) and (-0.0252, 0.3738) .. ( 0.0185, 0.4370)
+ .. controls ( 0.0238, 0.4448) and ( 0.0272, 0.4527) .. ( 0.0290, 0.4620)
+ .. controls ( 0.0322, 0.4784) and ( 0.0277, 0.4893) .. ( 0.0236, 0.5044)
+ --cycle
+ (-0.5118, 0.4944)
+ .. controls (-0.5315, 0.4962) and (-0.5506, 0.4944) .. (-0.5676, 0.4798)
+ .. controls (-0.5973, 0.4546) and (-0.5662, 0.4306) .. (-0.5676, 0.4033)
+ .. controls (-0.5682, 0.3806) and (-0.5896, 0.3679) .. (-0.5934, 0.3509)
+ .. controls (-0.6001, 0.3209) and (-0.5656, 0.2986) .. (-0.5452, 0.2838)
+ -- (-0.5621, 0.2498)
+ -- (-0.5282, 0.2498)
+ .. controls (-0.5165, 0.2920) and (-0.5111, 0.3040) .. (-0.5536, 0.3262)
+ .. controls (-0.5263, 0.3959) and (-0.5223, 0.3799) .. (-0.5452, 0.4535)
+ -- (-0.4857, 0.4705)
+ -- (-0.4518, 0.4535)
+ -- (-0.4518, 0.4875)
+ .. controls (-0.4715, 0.4873) and (-0.4920, 0.4926) .. (-0.5118, 0.4944)
+ --cycle
+ ( 0.3588, 0.4802)
+ .. controls ( 0.3533, 0.4806) and ( 0.3465, 0.4801) .. ( 0.3377, 0.4790)
+ -- ( 0.3801, 0.4365)
+ -- ( 0.3886, 0.4450)
+ .. controls ( 0.3795, 0.4694) and ( 0.3752, 0.4789) .. ( 0.3588, 0.4802)
+ --cycle
+ (-0.3923, 0.4620)
+ .. controls (-0.3995, 0.4156) and (-0.3752, 0.3562) .. (-0.3330, 0.3347)
+ -- (-0.3245, 0.3431)
+ -- (-0.3172, 0.4229)
+ -- (-0.3754, 0.4620)
+ --cycle
+ ( 0.1254, 0.4620)
+ .. controls ( 0.1311, 0.4303) and ( 0.1371, 0.3466) .. ( 0.1909, 0.3657)
+ .. controls ( 0.2082, 0.3718) and ( 0.2132, 0.3929) .. ( 0.2274, 0.4041)
+ .. controls ( 0.2376, 0.4123) and ( 0.2569, 0.4158) .. ( 0.2697, 0.4196)
+ .. controls ( 0.2404, 0.4707) and ( 0.2211, 0.4375) .. ( 0.1594, 0.4196)
+ --cycle
+ ( 0.6347, 0.4620)
+ .. controls ( 0.5865, 0.3970) and ( 0.5594, 0.4145) .. ( 0.5753, 0.3516)
+ .. controls ( 0.6248, 0.3639) and ( 0.6190, 0.3659) .. ( 0.6687, 0.3516)
+ .. controls ( 0.6624, 0.3942) and ( 0.6392, 0.4050) .. ( 0.6772, 0.4280)
+ --cycle
+ (-0.2735, 0.4535)
+ .. controls (-0.2776, 0.4212) and (-0.2764, 0.4187) .. (-0.2480, 0.4026)
+ -- (-0.2565, 0.4535)
+ --cycle
+ ( 0.4565, 0.4535)
+ -- ( 0.4395, 0.4365)
+ -- ( 0.4395, 0.4280)
+ -- ( 0.4565, 0.4111)
+ -- ( 0.4649, 0.4111)
+ -- ( 0.4819, 0.4280)
+ --cycle
+ ( 0.7558, 0.4524)
+ .. controls ( 0.7494, 0.4473) and ( 0.7430, 0.4394) .. ( 0.7366, 0.4280)
+ .. controls ( 0.7552, 0.4225) and ( 0.7653, 0.4183) .. ( 0.7753, 0.4176)
+ --cycle
+ (-0.4518, 0.4450)
+ -- (-0.4772, 0.4365)
+ -- (-0.4518, 0.4196)
+ --cycle
+ (-0.6423, 0.4300)
+ .. controls (-0.6532, 0.4307) and (-0.6637, 0.4304) .. (-0.6690, 0.4274)
+ .. controls (-0.6866, 0.4158) and (-0.6850, 0.3910) .. (-0.6630, 0.3848)
+ -- (-0.6130, 0.3848)
+ -- (-0.6130, 0.4274)
+ .. controls (-0.6201, 0.4279) and (-0.6314, 0.4294) .. (-0.6423, 0.4300)
+ --cycle
+ ( 0.7111, 0.4196)
+ -- ( 0.7451, 0.3771)
+ .. controls ( 0.7399, 0.4071) and ( 0.7394, 0.4082) .. ( 0.7111, 0.4196)
+ --cycle
+ (-0.7404, 0.4111)
+ -- (-0.7574, 0.3347)
+ -- (-0.7065, 0.3262)
+ -- (-0.7234, 0.4111)
+ --cycle
+ (-0.1547, 0.4111)
+ -- (-0.1462, 0.3601)
+ -- (-0.1038, 0.3856)
+ .. controls (-0.0885, 0.3562) and (-0.0864, 0.3520) .. (-0.0528, 0.3516)
+ -- (-0.0783, 0.4026)
+ --cycle
+ ( 0.3886, 0.4111)
+ .. controls ( 0.3213, 0.4055) and ( 0.3289, 0.3610) .. ( 0.3801, 0.3347)
+ --cycle
+ ( 0.3801, 0.3347)
+ -- ( 0.3801, 0.3262)
+ -- ( 0.3631, 0.3092)
+ -- ( 0.3801, 0.2753)
+ -- ( 0.3971, 0.2753)
+ .. controls ( 0.4050, 0.3067) and ( 0.4083, 0.3157) .. ( 0.3801, 0.3347)
+ --cycle
+ ( 0.5074, 0.4026)
+ -- ( 0.4565, 0.3516)
+ .. controls ( 0.4935, 0.3518) and ( 0.5571, 0.3505) .. ( 0.5074, 0.4026)
+ --cycle
+ (-0.4348, 0.3941)
+ -- (-0.4433, 0.3856)
+ -- (-0.4348, 0.3516)
+ -- (-0.4008, 0.3856)
+ --cycle
+ (-0.5112, 0.3856)
+ -- (-0.5027, 0.3347)
+ -- (-0.4518, 0.3856)
+ --cycle
+ ( 0.0405, 0.3856)
+ .. controls ( 0.0481, 0.3444) and ( 0.0444, 0.3224) .. ( 0.0830, 0.3007)
+ -- ( 0.1169, 0.3686)
+ --cycle
+ ( 0.2586, 0.3821)
+ .. controls ( 0.2327, 0.3759) and ( 0.2165, 0.3319) .. ( 0.2699, 0.3440)
+ -- ( 0.2952, 0.3516)
+ .. controls ( 0.2928, 0.3578) and ( 0.2924, 0.3646) .. ( 0.2856, 0.3722)
+ .. controls ( 0.2770, 0.3820) and ( 0.2672, 0.3842) .. ( 0.2586, 0.3821)
+ --cycle
+ (-0.2650, 0.3686)
+ .. controls (-0.2695, 0.3349) and (-0.2648, 0.3302) .. (-0.2311, 0.3347)
+ --cycle
+ ( 0.8037, 0.3670)
+ .. controls ( 0.7958, 0.3549) and ( 0.8002, 0.3405) .. ( 0.8215, 0.3262)
+ -- ( 0.8225, 0.3334)
+ --cycle
+ (-0.0104, 0.3601)
+ -- (-0.0273, 0.3007)
+ -- (-0.0698, 0.3007)
+ .. controls (-0.0385, 0.2465) and ( 0.0057, 0.2824) .. ( 0.0066, 0.3601)
+ --cycle
+ (-0.4348, 0.3431)
+ -- (-0.4348, 0.3007)
+ .. controls (-0.4123, 0.3163) and (-0.4143, 0.3163) .. (-0.4178, 0.3431)
+ --cycle
+ (-0.8185, 0.3317)
+ -- (-0.8365, 0.3007)
+ -- (-0.7998, 0.3007)
+ -- (-0.7998, 0.3177)
+ --cycle
+ ( 0.4649, 0.3315)
+ .. controls ( 0.4219, 0.3238) and ( 0.4094, 0.2904) .. ( 0.4395, 0.2583)
+ -- ( 0.4565, 0.2922)
+ -- ( 0.5414, 0.2922)
+ -- ( 0.5414, 0.3092)
+ .. controls ( 0.5190, 0.3194) and ( 0.4902, 0.3361) .. ( 0.4649, 0.3315)
+ --cycle
+ (-0.6388, 0.3309)
+ .. controls (-0.6527, 0.3328) and (-0.6597, 0.3256) .. (-0.6674, 0.3156)
+ -- (-0.6895, 0.2838)
+ .. controls (-0.6839, 0.2742) and (-0.6820, 0.2649) .. (-0.6700, 0.2597)
+ .. controls (-0.6290, 0.2418) and (-0.5917, 0.3244) .. (-0.6388, 0.3309)
+ --cycle
+ (-0.1462, 0.3262)
+ .. controls (-0.1623, 0.2693) and (-0.1610, 0.2418) .. (-0.0953, 0.2498)
+ -- (-0.1292, 0.3262)
+ --cycle
+ ( 0.2103, 0.3262)
+ -- ( 0.1849, 0.2753)
+ .. controls ( 0.2243, 0.2757) and ( 0.2321, 0.2881) .. ( 0.2273, 0.3262)
+ --cycle
+ ( 0.3292, 0.3262)
+ -- ( 0.2782, 0.2668)
+ -- ( 0.2782, 0.2498)
+ -- ( 0.3390, 0.2109)
+ .. controls ( 0.3506, 0.1937) and ( 0.3360, 0.1683) .. ( 0.3513, 0.1579)
+ .. controls ( 0.3686, 0.1461) and ( 0.4096, 0.1877) .. ( 0.3631, 0.2073)
+ -- ( 0.3801, 0.2243)
+ -- ( 0.3377, 0.2583)
+ -- ( 0.3546, 0.3007)
+ --cycle
+ ( 0.6941, 0.3262)
+ -- ( 0.6941, 0.2838)
+ -- ( 0.7111, 0.2838)
+ -- ( 0.7111, 0.3262)
+ --cycle
+ ( 0.7706, 0.3177)
+ -- ( 0.7366, 0.3092)
+ -- ( 0.7366, 0.2922)
+ -- ( 0.7451, 0.2838)
+ -- ( 0.7621, 0.2838)
+ --cycle
+ (-0.7913, 0.3092)
+ -- (-0.7828, 0.2583)
+ -- (-0.7658, 0.2583)
+ -- (-0.7574, 0.2668)
+ -- (-0.7743, 0.3092)
+ --cycle
+ ( 0.6093, 0.3092)
+ -- ( 0.5838, 0.2413)
+ -- ( 0.6093, 0.2668)
+ -- ( 0.6347, 0.2583)
+ -- ( 0.6432, 0.3092)
+ --cycle
+ (-0.3494, 0.3079)
+ .. controls (-0.4142, 0.2885) and (-0.3452, 0.2195) .. (-0.3258, 0.2842)
+ -- (-0.3258, 0.3079)
+ --cycle
+ ( 0.1084, 0.3007)
+ .. controls ( 0.1005, 0.2885) and ( 0.0956, 0.2764) .. ( 0.0807, 0.2708)
+ .. controls ( 0.0663, 0.2653) and ( 0.0431, 0.2752) .. ( 0.0335, 0.2617)
+ .. controls ( 0.0200, 0.2427) and ( 0.0540, 0.2322) .. ( 0.0660, 0.2298)
+ .. controls ( 0.1034, 0.2226) and ( 0.1204, 0.2407) .. ( 0.1509, 0.2583)
+ --cycle
+ (-0.2201, 0.2946)
+ .. controls (-0.2487, 0.2922) and (-0.2701, 0.2767) .. (-0.2990, 0.2583)
+ -- (-0.2565, 0.2073)
+ -- (-0.1886, 0.2922)
+ .. controls (-0.2003, 0.2947) and (-0.2106, 0.2954) .. (-0.2201, 0.2946)
+ --cycle
+ (-0.4772, 0.2583)
+ .. controls (-0.5022, 0.2481) and (-0.5267, 0.2367) .. (-0.5427, 0.2138)
+ .. controls (-0.5681, 0.1773) and (-0.5547, 0.1549) .. (-0.5112, 0.1575)
+ .. controls (-0.4976, 0.1584) and (-0.4899, 0.1613) .. (-0.4772, 0.1649)
+ -- (-0.4688, 0.1564)
+ -- (-0.4688, 0.1225)
+ -- (-0.4518, 0.1225)
+ .. controls (-0.4302, 0.1774) and (-0.4489, 0.1866) .. (-0.5027, 0.1988)
+ --cycle
+ (-0.4433, 0.2583)
+ -- (-0.4348, 0.2073)
+ -- (-0.4263, 0.2073)
+ -- (-0.4093, 0.2243)
+ -- (-0.4263, 0.2583)
+ --cycle
+ (-0.8446, 0.2512)
+ .. controls (-0.8626, 0.2459) and (-0.8672, 0.2066) .. (-0.8677, 0.1903)
+ .. controls (-0.8362, 0.1909) and (-0.8333, 0.1924) .. (-0.8168, 0.1649)
+ -- (-0.7913, 0.1734)
+ .. controls (-0.7979, 0.1888) and (-0.8118, 0.2347) .. (-0.8218, 0.2431)
+ .. controls (-0.8311, 0.2510) and (-0.8386, 0.2530) .. (-0.8446, 0.2512)
+ --cycle
+ (-0.6130, 0.2498)
+ -- (-0.6385, 0.1988)
+ .. controls (-0.5969, 0.2023) and (-0.5781, 0.2132) .. (-0.6130, 0.2498)
+ --cycle
+ ( 0.7209, 0.2469)
+ .. controls ( 0.7057, 0.2498) and ( 0.6918, 0.2452) .. ( 0.6875, 0.2241)
+ .. controls ( 0.6832, 0.1844) and ( 0.7333, 0.1800) .. ( 0.6875, 0.1309)
+ .. controls ( 0.6935, 0.1147) and ( 0.6966, 0.1050) .. ( 0.7123, 0.0936)
+ .. controls ( 0.7287, 0.0815) and ( 0.7996, 0.0650) .. ( 0.8166, 0.0782)
+ .. controls ( 0.8441, 0.0997) and ( 0.8443, 0.1468) .. ( 0.7875, 0.1564)
+ -- ( 0.8130, 0.1055)
+ -- ( 0.7706, 0.0970)
+ .. controls ( 0.7537, 0.1222) and ( 0.7493, 0.1200) .. ( 0.7196, 0.1225)
+ -- ( 0.7621, 0.2241)
+ .. controls ( 0.7526, 0.2335) and ( 0.7361, 0.2440) .. ( 0.7209, 0.2469)
+ --cycle
+ ( 0.5029, 0.2452)
+ .. controls ( 0.4837, 0.2409) and ( 0.4663, 0.2223) .. ( 0.4749, 0.2012)
+ .. controls ( 0.4861, 0.1737) and ( 0.5371, 0.1377) .. ( 0.5668, 0.1819)
+ .. controls ( 0.5276, 0.2081) and ( 0.5495, 0.2337) .. ( 0.5218, 0.2442)
+ .. controls ( 0.5159, 0.2464) and ( 0.5093, 0.2466) .. ( 0.5029, 0.2452)
+ --cycle
+ (-0.7065, 0.2328)
+ .. controls (-0.7174, 0.2318) and (-0.7287, 0.2323) .. (-0.7391, 0.2277)
+ .. controls (-0.7803, 0.2096) and (-0.7474, 0.1632) .. (-0.7171, 0.2086)
+ --cycle
+ (-0.0188, 0.2328)
+ .. controls (-0.0280, 0.2283) and (-0.0341, 0.2273) .. (-0.0430, 0.2197)
+ .. controls (-0.1097, 0.1629) and ( 0.0304, 0.1216) .. (-0.0010, 0.2037)
+ --cycle
+ ( 0.2612, 0.2328)
+ -- ( 0.1849, 0.2073)
+ .. controls ( 0.2210, 0.1548) and ( 0.2532, 0.1800) .. ( 0.2612, 0.2328)
+ --cycle
+ (-0.3330, 0.2243)
+ -- (-0.3958, 0.1938)
+ .. controls (-0.4203, 0.1689) and (-0.3928, 0.1505) .. (-0.4518, 0.0970)
+ -- (-0.4518, 0.0800)
+ .. controls (-0.4010, 0.0738) and (-0.3851, 0.1024) .. (-0.3754, 0.1479)
+ .. controls (-0.3297, 0.1544) and (-0.3165, 0.1646) .. (-0.2990, 0.2073)
+ --cycle
+ (-0.1971, 0.2243)
+ -- (-0.2056, 0.1479)
+ -- (-0.1462, 0.1394)
+ -- (-0.1462, 0.1564)
+ -- (-0.1801, 0.2243)
+ --cycle
+ ( 0.8384, 0.2243)
+ .. controls ( 0.8324, 0.1770) and ( 0.8519, 0.1318) .. ( 0.8979, 0.1140)
+ -- ( 0.9064, 0.1225)
+ .. controls ( 0.8952, 0.1805) and ( 0.8898, 0.1922) .. ( 0.8384, 0.2243)
+ --cycle
+ ( 0.0151, 0.2073)
+ -- ( 0.0151, 0.1903)
+ -- ( 0.0405, 0.1819)
+ -- ( 0.0405, 0.1479)
+ -- ( 0.0575, 0.1479)
+ -- ( 0.0575, 0.1564)
+ -- ( 0.0745, 0.1734)
+ .. controls ( 0.0548, 0.2031) and ( 0.0517, 0.2101) .. ( 0.0151, 0.2073)
+ --cycle
+ ( 0.6262, 0.2073)
+ -- ( 0.6347, 0.1734)
+ -- ( 0.6517, 0.1734)
+ -- ( 0.6602, 0.1819)
+ -- ( 0.6602, 0.1988)
+ --cycle
+ ( 0.7621, 0.2073)
+ -- ( 0.7621, 0.1649)
+ .. controls ( 0.7903, 0.1763) and ( 0.7908, 0.1774) .. ( 0.7960, 0.2073)
+ --cycle
+ (-0.8988, 0.1938)
+ -- (-0.9014, 0.1893)
+ .. controls (-0.9006, 0.1906) and (-0.8994, 0.1914) .. (-0.8988, 0.1930)
+ .. controls (-0.8987, 0.1933) and (-0.8989, 0.1936) .. (-0.8988, 0.1938)
+ --cycle
+ (-0.1292, 0.1903)
+ -- (-0.1292, 0.1479)
+ -- (-0.0953, 0.1819)
+ --cycle
+ ( 0.2952, 0.1903)
+ .. controls ( 0.2890, 0.1611) and ( 0.2867, 0.1567) .. ( 0.3122, 0.1394)
+ -- ( 0.3122, 0.1903)
+ --cycle
+ (-0.6895, 0.1819)
+ -- (-0.6895, 0.1479)
+ -- (-0.6640, 0.1564)
+ -- (-0.6640, 0.1734)
+ -- (-0.6725, 0.1819)
+ --cycle
+ ( 0.1480, 0.1735)
+ .. controls ( 0.1310, 0.1697) and ( 0.1252, 0.1423) .. ( 0.1594, 0.1225)
+ -- ( 0.1849, 0.1479)
+ .. controls ( 0.1726, 0.1694) and ( 0.1583, 0.1757) .. ( 0.1480, 0.1735)
+ --cycle
+ (-0.6300, 0.1734)
+ .. controls (-0.6429, 0.1238) and (-0.6284, 0.1142) .. (-0.5876, 0.0885)
+ -- (-0.6215, 0.0461)
+ -- (-0.6640, 0.0800)
+ .. controls (-0.6670, 0.0697) and (-0.6746, 0.0478) .. (-0.6743, 0.0381)
+ .. controls (-0.6736, 0.0066) and (-0.6456, 0.0044) .. (-0.6219, 0.0135)
+ .. controls (-0.5925, 0.0247) and (-0.5281, 0.0777) .. (-0.5319, 0.1120)
+ .. controls (-0.5350, 0.1399) and (-0.5677, 0.1315) .. (-0.5853, 0.1410)
+ .. controls (-0.5998, 0.1487) and (-0.6048, 0.1603) .. (-0.6130, 0.1734)
+ --cycle
+ (-0.6640, 0.0800)
+ .. controls (-0.6595, 0.1137) and (-0.6643, 0.1185) .. (-0.6980, 0.1140)
+ --cycle
+ (-0.2565, 0.1734)
+ -- (-0.3584, 0.1309)
+ -- (-0.3330, 0.0800)
+ -- (-0.2990, 0.1140)
+ .. controls (-0.2519, 0.1142) and (-0.2453, 0.1302) .. (-0.2565, 0.1734)
+ --cycle
+ ( 0.2271, 0.1407)
+ .. controls ( 0.1925, 0.1328) and ( 0.1533, 0.0767) .. ( 0.2190, 0.0890)
+ -- ( 0.2612, 0.0970)
+ .. controls ( 0.2604, 0.1073) and ( 0.2611, 0.1186) .. ( 0.2562, 0.1281)
+ .. controls ( 0.2497, 0.1405) and ( 0.2386, 0.1433) .. ( 0.2271, 0.1407)
+ --cycle
+ (-0.0698, 0.1394)
+ .. controls (-0.0981, 0.1280) and (-0.0986, 0.1270) .. (-0.1038, 0.0970)
+ -- (-0.0698, 0.0970)
+ --cycle
+ ( 0.3971, 0.1394)
+ -- ( 0.3971, 0.1225)
+ -- ( 0.4056, 0.1140)
+ -- ( 0.4395, 0.1225)
+ -- ( 0.4395, 0.1394)
+ --cycle
+ ( 0.6090, 0.1316)
+ .. controls ( 0.5968, 0.1320) and ( 0.5847, 0.1313) .. ( 0.5753, 0.1309)
+ .. controls ( 0.5937, 0.1034) and ( 0.6031, 0.1066) .. ( 0.6347, 0.1055)
+ .. controls ( 0.5863, 0.0654) and ( 0.5849, 0.0269) .. ( 0.6432,-0.0049)
+ -- ( 0.6262, 0.0461)
+ -- ( 0.6488, 0.0715)
+ .. controls ( 0.6828, 0.1212) and ( 0.6456, 0.1307) .. ( 0.6090, 0.1316)
+ --cycle
+ (-0.9354, 0.1309)
+ -- (-0.9422, 0.1193)
+ -- (-0.9356, 0.0800)
+ -- (-0.8847, 0.0970)
+ -- (-0.8847, 0.1309)
+ --cycle
+ (-0.8507, 0.1309)
+ .. controls (-0.8417, 0.0965) and (-0.8401, 0.0890) .. (-0.8083, 0.0715)
+ .. controls (-0.8126, 0.1087) and (-0.8139, 0.1187) .. (-0.8507, 0.1309)
+ --cycle
+ ( 0.1084, 0.1309)
+ -- ( 0.0575, 0.1225)
+ .. controls ( 0.0537, 0.0923) and ( 0.0510, 0.0922) .. ( 0.0236, 0.0800)
+ .. controls ( 0.0578, 0.0292) and ( 0.1015, 0.0713) .. ( 0.1084, 0.1309)
+ --cycle
+ ( 0.4819, 0.1309)
+ -- ( 0.5028, 0.0739)
+ -- ( 0.4819,-0.0049)
+ .. controls ( 0.4993,-0.0102) and ( 0.5299,-0.0233) .. ( 0.5472,-0.0163)
+ .. controls ( 0.5677,-0.0081) and ( 0.5663, 0.0195) .. ( 0.5644, 0.0376)
+ .. controls ( 0.5592, 0.0860) and ( 0.5308, 0.1235) .. ( 0.4819, 0.1309)
+ --cycle
+ ( 0.3461, 0.1140)
+ .. controls ( 0.3108, 0.0951) and ( 0.3082, 0.0849) .. ( 0.3037, 0.0461)
+ .. controls ( 0.3481, 0.0535) and ( 0.3552, 0.0713) .. ( 0.3461, 0.1140)
+ --cycle
+ (-0.4857, 0.0970)
+ .. controls (-0.5241, 0.0326) and (-0.4983, 0.0214) .. (-0.4348, 0.0206)
+ .. controls (-0.4420,-0.0343) and (-0.4036,-0.0413) .. (-0.3728,-0.0186)
+ .. controls (-0.3557,-0.0061) and (-0.3442, 0.0265) .. (-0.3330, 0.0461)
+ .. controls (-0.3807, 0.0916) and (-0.3834, 0.0423) .. (-0.3839, 0.0036)
+ --cycle
+ (-0.2480, 0.0970)
+ -- (-0.2480, 0.0800)
+ -- (-0.2056, 0.0800)
+ -- (-0.2056, 0.0970)
+ --cycle
+ (-0.1292, 0.0970)
+ -- (-0.1462, 0.0800)
+ -- (-0.1462, 0.0715)
+ -- (-0.1292, 0.0546)
+ -- (-0.1208, 0.0546)
+ -- (-0.1038, 0.0715)
+ --cycle
+ ( 0.3801, 0.0800)
+ -- ( 0.3801, 0.0206)
+ -- ( 0.3971, 0.0206)
+ -- ( 0.4056, 0.0291)
+ -- ( 0.4140, 0.0800)
+ --cycle
+ ( 0.4225, 0.0800)
+ .. controls ( 0.4316, 0.0456) and ( 0.4332, 0.0381) .. ( 0.4649, 0.0206)
+ .. controls ( 0.4618, 0.0591) and ( 0.4606, 0.0679) .. ( 0.4225, 0.0800)
+ --cycle
+ ( 0.8809, 0.0759)
+ .. controls ( 0.8722, 0.0759) and ( 0.8634, 0.0659) .. ( 0.8554, 0.0461)
+ -- ( 0.9064, 0.0461)
+ .. controls ( 0.8984, 0.0659) and ( 0.8897, 0.0759) .. ( 0.8809, 0.0759)
+ --cycle
+ ( 0.1413, 0.0752)
+ .. controls ( 0.1324, 0.0761) and ( 0.1215, 0.0749) .. ( 0.1084, 0.0715)
+ .. controls ( 0.1253, 0.0362) and ( 0.1326, 0.0290) .. ( 0.1679, 0.0121)
+ .. controls ( 0.1762, 0.0511) and ( 0.1679, 0.0726) .. ( 0.1413, 0.0752)
+ --cycle
+ (-0.7409, 0.0649)
+ .. controls (-0.7448, 0.0648) and (-0.7485, 0.0639) .. (-0.7518, 0.0618)
+ .. controls (-0.7690, 0.0508) and (-0.7544,-0.0147) .. (-0.7438,-0.0279)
+ .. controls (-0.7341,-0.0398) and (-0.7273,-0.0409) .. (-0.7149,-0.0473)
+ -- (-0.7065, 0.0546)
+ .. controls (-0.7159, 0.0583) and (-0.7292, 0.0653) .. (-0.7409, 0.0649)
+ --cycle
+ ( 0.9762, 0.0591)
+ -- ( 0.9564, 0.0203)
+ .. controls ( 0.9517,-0.0013) and ( 0.9637,-0.0270) .. ( 0.9761,-0.0510)
+ -- ( 0.9997,-0.0105)
+ .. controls ( 1.0000,-0.0010) and ( 1.0000, 0.0075) .. ( 0.9998, 0.0171)
+ --cycle
+ (-0.1717, 0.0546)
+ .. controls (-0.2038, 0.0492) and (-0.2042, 0.0472) .. (-0.2226, 0.0206)
+ -- (-0.1717, 0.0206)
+ --cycle
+ ( 0.7281, 0.0546)
+ -- ( 0.6687, 0.0461)
+ -- ( 0.6687, 0.0291)
+ .. controls ( 0.7027, 0.0233) and ( 0.7100, 0.0245) .. ( 0.7281, 0.0546)
+ --cycle
+ (-0.9726, 0.0477)
+ .. controls (-0.9758, 0.0477) and (-0.9806, 0.0473) .. (-0.9843, 0.0471)
+ -- (-1.0000, 0.0201)
+ -- (-0.9912, 0.0044)
+ -- (-0.9696, 0.0206)
+ -- (-0.9448,-0.0784)
+ -- (-0.9432,-0.0812)
+ -- (-0.8422,-0.0728)
+ -- (-0.8677,-0.0982)
+ -- (-0.8677,-0.1322)
+ .. controls (-0.8159,-0.1280) and (-0.7904,-0.1016) .. (-0.8308,-0.0569)
+ .. controls (-0.8618,-0.0226) and (-0.8917,-0.0142) .. (-0.9356,-0.0049)
+ .. controls (-0.9393, 0.0402) and (-0.9477, 0.0479) .. (-0.9726, 0.0477)
+ --cycle
+ (-0.0273, 0.0430)
+ .. controls (-0.1037, 0.0283) and (-0.0659,-0.0617) .. (-0.0043, 0.0049)
+ .. controls ( 0.0066, 0.0167) and ( 0.0086, 0.0240) .. ( 0.0151, 0.0376)
+ .. controls ( 0.0001, 0.0416) and (-0.0110, 0.0461) .. (-0.0273, 0.0430)
+ --cycle
+ ( 0.2361, 0.0409)
+ .. controls ( 0.2189, 0.0454) and ( 0.2022, 0.0366) .. ( 0.2018, 0.0036)
+ .. controls ( 0.2379, 0.0017) and ( 0.2409,-0.0057) .. ( 0.2527,-0.0388)
+ .. controls ( 0.2946,-0.0103) and ( 0.2647, 0.0336) .. ( 0.2361, 0.0409)
+ --cycle
+ (-0.2852, 0.0389)
+ .. controls (-0.3005, 0.0379) and (-0.3023, 0.0289) .. (-0.2990, 0.0036)
+ -- (-0.2650, 0.0376)
+ .. controls (-0.2735, 0.0387) and (-0.2801, 0.0393) .. (-0.2852, 0.0389)
+ --cycle
+ ( 0.3037, 0.0291)
+ .. controls ( 0.3231,-0.0055) and ( 0.3338,-0.0035) .. ( 0.3716,-0.0049)
+ .. controls ( 0.3519, 0.0279) and ( 0.3402, 0.0269) .. ( 0.3037, 0.0291)
+ --cycle
+ (-0.8206, 0.0192)
+ .. controls (-0.8430,-0.0126) and (-0.8179,-0.0291) .. (-0.8045,-0.0204)
+ .. controls (-0.7923,-0.0127) and (-0.7854, 0.0239) .. (-0.8206, 0.0192)
+ --cycle
+ (-0.1371, 0.0134)
+ .. controls (-0.1438, 0.0114) and (-0.1493, 0.0019) .. (-0.1547,-0.0134)
+ -- (-0.1123,-0.0049)
+ .. controls (-0.1224, 0.0099) and (-0.1303, 0.0154) .. (-0.1371, 0.0134)
+ --cycle
+ ( 0.7536, 0.0121)
+ -- ( 0.7111, 0.0036)
+ -- ( 0.7111,-0.0304)
+ .. controls ( 0.7469,-0.0274) and ( 0.7588,-0.0268) .. ( 0.7536, 0.0121)
+ --cycle
+ ( 0.0750, 0.0106)
+ .. controls ( 0.0661, 0.0093) and ( 0.0570, 0.0067) .. ( 0.0490, 0.0036)
+ .. controls ( 0.0651,-0.0248) and ( 0.0680,-0.0250) .. ( 0.1000,-0.0304)
+ .. controls ( 0.0590,-0.0732) and ( 0.0241,-0.0913) .. ( 0.0745,-0.1492)
+ .. controls ( 0.1110,-0.1331) and ( 0.1272,-0.1362) .. ( 0.1424,-0.0982)
+ -- ( 0.1339,-0.0897)
+ -- ( 0.1000,-0.0982)
+ .. controls ( 0.1057,-0.0835) and ( 0.1261,-0.0416) .. ( 0.1266,-0.0304)
+ .. controls ( 0.1284, 0.0069) and ( 0.1019, 0.0144) .. ( 0.0750, 0.0106)
+ --cycle
+ (-0.2311, 0.0036)
+ -- (-0.2311,-0.0049)
+ -- (-0.2480,-0.0219)
+ .. controls (-0.2373,-0.0386) and (-0.2259,-0.0581) .. (-0.2054,-0.0643)
+ .. controls (-0.1781,-0.0725) and (-0.1665,-0.0457) .. (-0.1984,-0.0158)
+ .. controls (-0.2100,-0.0050) and (-0.2177,-0.0027) .. (-0.2311, 0.0036)
+ --cycle
+ ( 0.8469, 0.0036)
+ .. controls ( 0.8030,-0.0174) and ( 0.7970,-0.0343) .. ( 0.7706,-0.0728)
+ .. controls ( 0.7934,-0.1060) and ( 0.7994,-0.1083) .. ( 0.8384,-0.0982)
+ -- ( 0.8384,-0.0813)
+ -- ( 0.8130,-0.0728)
+ -- ( 0.8130,-0.0558)
+ .. controls ( 0.8448,-0.0370) and ( 0.8501,-0.0340) .. ( 0.8469, 0.0036)
+ --cycle
+ (-0.4603,-0.0049)
+ .. controls (-0.4831,-0.0157) and (-0.5088,-0.0301) .. (-0.5182,-0.0557)
+ .. controls (-0.5278,-0.0816) and (-0.5057,-0.0969) .. (-0.4907,-0.0883)
+ .. controls (-0.4763,-0.0802) and (-0.4829,-0.0617) .. (-0.4518,-0.0304)
+ -- (-0.4518,-0.0134)
+ --cycle
+ ( 0.4264,-0.0112)
+ .. controls ( 0.3999,-0.0108) and ( 0.3834,-0.0280) .. ( 0.4056,-0.0728)
+ -- ( 0.4565,-0.0558)
+ -- ( 0.4649,-0.1237)
+ -- ( 0.4819,-0.1237)
+ -- ( 0.5074,-0.0558)
+ .. controls ( 0.4895,-0.0297) and ( 0.4529,-0.0116) .. ( 0.4264,-0.0112)
+ --cycle
+ (-0.5706,-0.0134)
+ -- (-0.6045,-0.0388)
+ .. controls (-0.6509,-0.0147) and (-0.6809,-0.0236) .. (-0.6725,-0.0813)
+ -- (-0.6980,-0.0897)
+ .. controls (-0.6821,-0.1195) and (-0.6788,-0.1210) .. (-0.6470,-0.1322)
+ .. controls (-0.6222,-0.0713) and (-0.6544,-0.0848) .. (-0.6130,-0.0473)
+ .. controls (-0.5953,-0.0788) and (-0.5888,-0.0784) .. (-0.5536,-0.0813)
+ --cycle
+ ( 0.1679,-0.0219)
+ .. controls ( 0.1573,-0.0941) and ( 0.2349,-0.1063) .. ( 0.2526,-0.0847)
+ .. controls ( 0.2609,-0.0744) and ( 0.2602,-0.0596) .. ( 0.2612,-0.0473)
+ --cycle
+ (-0.3112,-0.0274)
+ .. controls (-0.3586,-0.0281) and (-0.4163,-0.0558) .. (-0.4212,-0.0609)
+ .. controls (-0.4295,-0.0692) and (-0.4319,-0.0787) .. (-0.4327,-0.0899)
+ -- (-0.4327,-0.1492)
+ -- (-0.4327,-0.2086)
+ .. controls (-0.3777,-0.1999) and (-0.3244,-0.1312) .. (-0.4008,-0.1067)
+ -- (-0.3823,-0.0879)
+ .. controls (-0.3347,-0.0526) and (-0.3277,-0.1099) .. (-0.2903,-0.1163)
+ .. controls (-0.2612,-0.1213) and (-0.2444,-0.0914) .. (-0.2507,-0.0659)
+ .. controls (-0.2581,-0.0362) and (-0.2828,-0.0269) .. (-0.3112,-0.0274)
+ --cycle
+ ( 0.9234,-0.0304)
+ -- ( 0.9149,-0.0643)
+ -- ( 0.9488,-0.0558)
+ -- ( 0.9488,-0.0388)
+ -- ( 0.9403,-0.0304)
+ --cycle
+ ( 0.6406,-0.0369)
+ .. controls ( 0.6333,-0.0375) and ( 0.6251,-0.0419) .. ( 0.6177,-0.0522)
+ .. controls ( 0.6105,-0.0620) and ( 0.6112,-0.0704) .. ( 0.6093,-0.0799)
+ -- ( 0.6342,-0.0799)
+ .. controls ( 0.6760,-0.0673) and ( 0.6625,-0.0350) .. ( 0.6406,-0.0369)
+ --cycle
+ (-0.0016,-0.0449)
+ .. controls (-0.0461,-0.0548) and (-0.0410,-0.0663) .. (-0.0297,-0.1043)
+ .. controls (-0.0250,-0.1199) and (-0.0232,-0.1440) .. (-0.0016,-0.1422)
+ .. controls ( 0.0349,-0.1392) and ( 0.0554,-0.0537) .. (-0.0016,-0.0449)
+ --cycle
+ (-0.1123,-0.0473)
+ -- (-0.1208,-0.1067)
+ .. controls (-0.0719,-0.1062) and (-0.0661,-0.0635) .. (-0.1123,-0.0473)
+ --cycle
+ ( 0.3037,-0.0473)
+ .. controls ( 0.3198,-0.0756) and ( 0.3223,-0.0769) .. ( 0.3546,-0.0728)
+ .. controls ( 0.3383,-0.0447) and ( 0.3358,-0.0446) .. ( 0.3037,-0.0473)
+ --cycle
+ ( 0.5329,-0.0473)
+ .. controls ( 0.5004,-0.0966) and ( 0.4981,-0.1266) .. ( 0.5668,-0.1322)
+ -- ( 0.5499,-0.0473)
+ --cycle
+ (-0.1632,-0.0728)
+ -- (-0.1462,-0.1067)
+ -- (-0.1462,-0.0728)
+ --cycle
+ ( 0.7090,-0.0817)
+ .. controls ( 0.6987,-0.0843) and ( 0.6911,-0.0952) .. ( 0.6894,-0.1068)
+ .. controls ( 0.6863,-0.1276) and ( 0.7043,-0.1387) .. ( 0.7111,-0.1831)
+ .. controls ( 0.7499,-0.1786) and ( 0.7602,-0.1760) .. ( 0.7791,-0.1407)
+ -- ( 0.7196,-0.1322)
+ -- ( 0.7451,-0.1068)
+ .. controls ( 0.7324,-0.0850) and ( 0.7193,-0.0791) .. ( 0.7090,-0.0817)
+ --cycle
+ ( 0.9485,-0.0984)
+ .. controls ( 0.9284,-0.1094) and ( 0.8781,-0.1542) .. ( 0.8706,-0.1754)
+ .. controls ( 0.8655,-0.1897) and ( 0.8704,-0.2051) .. ( 0.8817,-0.2131)
+ --cycle
+ (-0.9323,-0.1007)
+ -- (-0.9101,-0.1405)
+ .. controls (-0.9101,-0.1287) and (-0.9146,-0.1173) .. (-0.9187,-0.1067)
+ --cycle
+ (-0.0528,-0.1067)
+ .. controls (-0.0616,-0.1167) and (-0.0681,-0.1217) .. (-0.0735,-0.1348)
+ .. controls (-0.0802,-0.1513) and (-0.0835,-0.2032) .. (-0.0603,-0.2082)
+ .. controls (-0.0462,-0.2108) and (-0.0167,-0.1971) .. (-0.0603,-0.1577)
+ .. controls (-0.0459,-0.1339) and (-0.0396,-0.1326) .. (-0.0528,-0.1067)
+ --cycle
+ (-0.4876,-0.1114)
+ .. controls (-0.4992,-0.1127) and (-0.5150,-0.1170) .. (-0.5367,-0.1237)
+ -- (-0.5367,-0.1577)
+ -- (-0.4433,-0.1916)
+ .. controls (-0.4544,-0.1299) and (-0.4526,-0.1074) .. (-0.4876,-0.1114)
+ --cycle
+ (-0.7635,-0.1120)
+ .. controls (-0.7788,-0.1114) and (-0.7890,-0.1295) .. (-0.7913,-0.1577)
+ -- (-0.7574,-0.1577)
+ .. controls (-0.7442,-0.2093) and (-0.7301,-0.2080) .. (-0.6810,-0.2086)
+ -- (-0.6810,-0.1746)
+ -- (-0.7149,-0.1916)
+ .. controls (-0.7175,-0.1714) and (-0.7177,-0.1520) .. (-0.7311,-0.1350)
+ .. controls (-0.7433,-0.1194) and (-0.7544,-0.1124) .. (-0.7635,-0.1120)
+ --cycle
+ (-0.2082,-0.1145)
+ .. controls (-0.2215,-0.1126) and (-0.2378,-0.1199) .. (-0.2495,-0.1410)
+ .. controls (-0.2530,-0.1510) and (-0.2546,-0.1612) .. (-0.2495,-0.1721)
+ .. controls (-0.2475,-0.1840) and (-0.2388,-0.1913) .. (-0.2311,-0.2001)
+ .. controls (-0.2202,-0.1931) and (-0.2111,-0.1884) .. (-0.2020,-0.1785)
+ .. controls (-0.1722,-0.1464) and (-0.1860,-0.1177) .. (-0.2082,-0.1145)
+ --cycle
+ ( 0.4225,-0.1152)
+ -- ( 0.3631,-0.1492)
+ -- ( 0.3801,-0.1831)
+ .. controls ( 0.4160,-0.1656) and ( 0.4276,-0.1565) .. ( 0.4225,-0.1152)
+ --cycle
+ (-0.5925,-0.1174)
+ .. controls (-0.6021,-0.1151) and (-0.6144,-0.1208) .. (-0.6203,-0.1336)
+ .. controls (-0.6283,-0.1508) and (-0.6192,-0.1674) .. (-0.6130,-0.1831)
+ -- (-0.5961,-0.1831)
+ .. controls (-0.5903,-0.1723) and (-0.5831,-0.1615) .. (-0.5803,-0.1494)
+ .. controls (-0.5758,-0.1301) and (-0.5828,-0.1197) .. (-0.5925,-0.1174)
+ --cycle
+ ( 0.2952,-0.1237)
+ -- ( 0.3292,-0.1746)
+ -- ( 0.3377,-0.1746)
+ -- ( 0.3546,-0.1577)
+ .. controls ( 0.3339,-0.1275) and ( 0.3315,-0.1266) .. ( 0.2952,-0.1237)
+ --cycle
+ ( 0.1832,-0.1240)
+ .. controls ( 0.1608,-0.1263) and ( 0.1298,-0.1544) .. ( 0.1254,-0.2086)
+ .. controls ( 0.1747,-0.2011) and ( 0.2191,-0.1503) .. ( 0.2015,-0.1301)
+ .. controls ( 0.1972,-0.1252) and ( 0.1907,-0.1232) .. ( 0.1832,-0.1240)
+ --cycle
+ (-0.3330,-0.1407)
+ .. controls (-0.3325,-0.1552) and (-0.3330,-0.1683) .. (-0.3280,-0.1824)
+ .. controls (-0.3221,-0.1993) and (-0.2907,-0.2626) .. (-0.2674,-0.2496)
+ .. controls (-0.2290,-0.2283) and (-0.2939,-0.1556) .. (-0.3330,-0.1407)
+ --cycle
+ (-0.8677,-0.1492)
+ .. controls (-0.8906,-0.2074) and (-0.8704,-0.2079) .. (-0.8168,-0.2086)
+ -- (-0.8168,-0.2341)
+ -- (-0.7828,-0.2341)
+ .. controls (-0.7876,-0.1754) and (-0.8159,-0.1679) .. (-0.8677,-0.1492)
+ --cycle
+ ( 0.6507,-0.1523)
+ .. controls ( 0.6150,-0.1514) and ( 0.5790,-0.1648) .. ( 0.5634,-0.2019)
+ .. controls ( 0.5467,-0.2418) and ( 0.5701,-0.2915) .. ( 0.6347,-0.2595)
+ -- ( 0.5923,-0.2426)
+ .. controls ( 0.6167,-0.1901) and ( 0.6349,-0.1909) .. ( 0.6857,-0.1746)
+ -- ( 0.6857,-0.1577)
+ .. controls ( 0.6745,-0.1545) and ( 0.6627,-0.1526) .. ( 0.6507,-0.1523)
+ --cycle
+ ( 0.4992,-0.1530)
+ .. controls ( 0.4893,-0.1544) and ( 0.4788,-0.1613) .. ( 0.4723,-0.1757)
+ .. controls ( 0.4601,-0.2024) and ( 0.4716,-0.2265) .. ( 0.4819,-0.2510)
+ -- ( 0.4310,-0.2510)
+ .. controls ( 0.4659,-0.3129) and ( 0.5002,-0.2692) .. ( 0.5329,-0.2341)
+ .. controls ( 0.5195,-0.1890) and ( 0.5320,-0.1766) .. ( 0.5232,-0.1628)
+ .. controls ( 0.5186,-0.1555) and ( 0.5091,-0.1515) .. ( 0.4992,-0.1530)
+ --cycle
+ (-0.1462,-0.1577)
+ -- (-0.1462,-0.2001)
+ -- (-0.1292,-0.2001)
+ -- (-0.1292,-0.1577)
+ --cycle
+ ( 0.0490,-0.1577)
+ -- ( 0.0066,-0.1831)
+ -- ( 0.0066,-0.2001)
+ .. controls ( 0.0224,-0.2077) and ( 0.0639,-0.2307) .. ( 0.0802,-0.2267)
+ .. controls ( 0.1236,-0.2159) and ( 0.0615,-0.1657) .. ( 0.0490,-0.1577)
+ --cycle
+ ( 0.2527,-0.1577)
+ -- ( 0.2358,-0.1746)
+ -- ( 0.2273,-0.1746)
+ -- ( 0.2273,-0.1916)
+ .. controls ( 0.2817,-0.2389) and ( 0.2612,-0.2548) .. ( 0.3207,-0.2595)
+ -- ( 0.2952,-0.2341)
+ .. controls ( 0.2952,-0.1946) and ( 0.2813,-0.1829) .. ( 0.2527,-0.1577)
+ --cycle
+ ( 0.4124,-0.1906)
+ .. controls ( 0.3901,-0.1934) and ( 0.3801,-0.2077) .. ( 0.3631,-0.2341)
+ .. controls ( 0.4031,-0.2391) and ( 0.4075,-0.2303) .. ( 0.4395,-0.2086)
+ -- ( 0.4395,-0.1916)
+ .. controls ( 0.4286,-0.1900) and ( 0.4198,-0.1897) .. ( 0.4124,-0.1906)
+ --cycle
+ (-0.5282,-0.1916)
+ -- (-0.5536,-0.2001)
+ -- (-0.5282,-0.2171)
+ --cycle
+ (-0.6045,-0.2001)
+ .. controls (-0.6700,-0.2056) and (-0.6485,-0.2287) .. (-0.6330,-0.2741)
+ .. controls (-0.6243,-0.2991) and (-0.6268,-0.3013) .. (-0.6130,-0.3274)
+ .. controls (-0.5769,-0.3048) and (-0.5602,-0.2946) .. (-0.5536,-0.2510)
+ -- (-0.6045,-0.2510)
+ --cycle
+ (-0.3584,-0.2086)
+ .. controls (-0.3921,-0.2259) and (-0.3939,-0.2318) .. (-0.4008,-0.2680)
+ .. controls (-0.4235,-0.2397) and (-0.4237,-0.2318) .. (-0.4603,-0.2256)
+ -- (-0.4603,-0.2850)
+ .. controls (-0.4267,-0.2892) and (-0.3194,-0.3199) .. (-0.3429,-0.2424)
+ --cycle
+ ( 0.7960,-0.2086)
+ -- ( 0.8384,-0.2510)
+ .. controls ( 0.8428,-0.2169) and ( 0.8301,-0.2042) .. ( 0.7960,-0.2086)
+ --cycle
+ ( 0.1928,-0.2162)
+ .. controls ( 0.1816,-0.2174) and ( 0.1689,-0.2258) .. ( 0.1598,-0.2322)
+ .. controls ( 0.1191,-0.2606) and ( 0.1214,-0.2831) .. ( 0.1339,-0.3274)
+ -- ( 0.1509,-0.3274)
+ .. controls ( 0.1561,-0.3114) and ( 0.1614,-0.2848) .. ( 0.1729,-0.2730)
+ .. controls ( 0.1867,-0.2591) and ( 0.2098,-0.2594) .. ( 0.2174,-0.2461)
+ .. controls ( 0.2253,-0.2321) and ( 0.2130,-0.2142) .. ( 0.1928,-0.2162)
+ --cycle
+ (-0.1905,-0.2188)
+ .. controls (-0.1970,-0.2195) and (-0.2037,-0.2233) .. (-0.2087,-0.2284)
+ .. controls (-0.2248,-0.2451) and (-0.2297,-0.2881) .. (-0.2311,-0.3104)
+ -- (-0.1801,-0.3104)
+ .. controls (-0.1960,-0.2531) and (-0.1611,-0.2530) .. (-0.1738,-0.2284)
+ .. controls (-0.1778,-0.2206) and (-0.1840,-0.2181) .. (-0.1905,-0.2188)
+ --cycle
+ (-0.5112,-0.2256)
+ -- (-0.5112,-0.2595)
+ -- (-0.4772,-0.2595)
+ -- (-0.4772,-0.2256)
+ --cycle
+ ( 0.7451,-0.2256)
+ -- ( 0.6687,-0.2341)
+ -- ( 0.6602,-0.2426)
+ .. controls ( 0.6862,-0.3159) and ( 0.7361,-0.2848) .. ( 0.7451,-0.2256)
+ --cycle
+ (-0.8578,-0.2336)
+ -- (-0.8203,-0.3006)
+ .. controls (-0.7747,-0.3108) and (-0.8112,-0.2349) .. (-0.8578,-0.2336)
+ --cycle
+ (-0.0280,-0.2369)
+ .. controls (-0.0529,-0.2386) and (-0.0646,-0.2625) .. (-0.0273,-0.3019)
+ -- ( 0.0236,-0.2595)
+ .. controls ( 0.0068,-0.2430) and (-0.0130,-0.2359) .. (-0.0280,-0.2369)
+ --cycle
+ (-0.7234,-0.2510)
+ .. controls (-0.7141,-0.2750) and (-0.7050,-0.2842) .. (-0.6810,-0.2935)
+ -- (-0.6725,-0.2850)
+ .. controls (-0.6853,-0.2530) and (-0.6899,-0.2536) .. (-0.7234,-0.2510)
+ --cycle
+ ( 0.0504,-0.2510)
+ -- ( 0.0504,-0.2760)
+ .. controls ( 0.0689,-0.3381) and ( 0.1243,-0.2780) .. ( 0.0804,-0.2561)
+ .. controls ( 0.0707,-0.2513) and ( 0.0594,-0.2519) .. ( 0.0504,-0.2510)
+ --cycle
+ (-0.1292,-0.2595)
+ -- (-0.1462,-0.2765)
+ -- (-0.1038,-0.3274)
+ -- (-0.0953,-0.3274)
+ -- (-0.0783,-0.3104)
+ --cycle
+ ( 0.7877,-0.2632)
+ .. controls ( 0.7523,-0.2682) and ( 0.7335,-0.3052) .. ( 0.7960,-0.3359)
+ .. controls ( 0.8015,-0.3335) and ( 0.8068,-0.3333) .. ( 0.8122,-0.3324)
+ -- ( 0.8442,-0.2774)
+ .. controls ( 0.8248,-0.2696) and ( 0.8026,-0.2612) .. ( 0.7877,-0.2632)
+ --cycle
+ ( 0.5329,-0.2765)
+ .. controls ( 0.5358,-0.3116) and ( 0.5353,-0.3182) .. ( 0.5668,-0.3359)
+ .. controls ( 0.5639,-0.3008) and ( 0.5644,-0.2942) .. ( 0.5329,-0.2765)
+ --cycle
+ ( 0.3385,-0.2820)
+ .. controls ( 0.3148,-0.2878) and ( 0.2673,-0.3492) .. ( 0.3385,-0.3614)
+ -- ( 0.3122,-0.4038)
+ .. controls ( 0.3574,-0.4463) and ( 0.3787,-0.4004) .. ( 0.3701,-0.3806)
+ .. controls ( 0.3644,-0.3672) and ( 0.3492,-0.3602) .. ( 0.3377,-0.3529)
+ -- ( 0.3886,-0.3019)
+ .. controls ( 0.3746,-0.2928) and ( 0.3572,-0.2777) .. ( 0.3385,-0.2820)
+ --cycle
+ (-0.3075,-0.2850)
+ -- (-0.3669,-0.3359)
+ .. controls (-0.3237,-0.3346) and (-0.3194,-0.3327) .. (-0.2820,-0.3104)
+ --cycle
+ ( 0.6347,-0.2850)
+ -- ( 0.6093,-0.3359)
+ -- ( 0.6687,-0.3359)
+ .. controls ( 0.6634,-0.3038) and ( 0.6614,-0.3034) .. ( 0.6347,-0.2850)
+ --cycle
+ ( 0.2482,-0.2927)
+ .. controls ( 0.2430,-0.2922) and ( 0.2370,-0.2926) .. ( 0.2301,-0.2942)
+ .. controls ( 0.1967,-0.3336) and ( 0.2478,-0.3609) .. ( 0.2647,-0.3515)
+ .. controls ( 0.2796,-0.3431) and ( 0.2843,-0.2960) .. ( 0.2482,-0.2927)
+ --cycle
+ (-0.5371,-0.2933)
+ .. controls (-0.5481,-0.2970) and (-0.5577,-0.3098) .. (-0.5621,-0.3359)
+ -- (-0.5112,-0.3869)
+ .. controls (-0.4600,-0.3526) and (-0.5043,-0.2822) .. (-0.5371,-0.2933)
+ --cycle
+ (-0.4433,-0.3019)
+ .. controls (-0.4430,-0.3328) and (-0.4401,-0.3356) .. (-0.4093,-0.3359)
+ -- (-0.4263,-0.3019)
+ --cycle
+ ( 0.0236,-0.3104)
+ -- ( 0.0066,-0.3274)
+ -- ( 0.0066,-0.3359)
+ -- ( 0.0236,-0.3529)
+ -- ( 0.0321,-0.3529)
+ -- ( 0.0490,-0.3359)
+ --cycle
+ ( 0.4140,-0.3104)
+ -- ( 0.4140,-0.3274)
+ -- ( 0.4565,-0.3274)
+ -- ( 0.4565,-0.3104)
+ --cycle
+ (-0.6555,-0.3189)
+ .. controls (-0.7282,-0.3463) and (-0.7047,-0.4238) .. (-0.6385,-0.3614)
+ --cycle
+ (-0.7635,-0.3203)
+ .. controls (-0.7897,-0.3491) and (-0.7645,-0.3586) .. (-0.7512,-0.3515)
+ .. controls (-0.7383,-0.3446) and (-0.7269,-0.3159) .. (-0.7635,-0.3203)
+ --cycle
+ (-0.1547,-0.3359)
+ .. controls (-0.2375,-0.3951) and (-0.1886,-0.3975) .. (-0.2106,-0.4536)
+ .. controls (-0.2221,-0.4826) and (-0.2548,-0.4886) .. (-0.2435,-0.5309)
+ .. controls (-0.2373,-0.5540) and (-0.1692,-0.6520) .. (-0.1548,-0.5893)
+ .. controls (-0.1503,-0.5696) and (-0.1713,-0.5323) .. (-0.1801,-0.5141)
+ -- (-0.2141,-0.5141)
+ -- (-0.1801,-0.4836)
+ -- (-0.1632,-0.3784)
+ -- (-0.1292,-0.3614)
+ --cycle
+ ( 0.5838,-0.3444)
+ -- ( 0.6178,-0.3869)
+ .. controls ( 0.6126,-0.3569) and ( 0.6121,-0.3558) .. ( 0.5838,-0.3444)
+ --cycle
+ (-0.5876,-0.3529)
+ -- (-0.5876,-0.3869)
+ -- (-0.5536,-0.3869)
+ --cycle
+ (-0.3075,-0.3529)
+ .. controls (-0.3075,-0.4259) and (-0.3150,-0.4459) .. (-0.2480,-0.4378)
+ .. controls (-0.2520,-0.3893) and (-0.2634,-0.3741) .. (-0.3075,-0.3529)
+ --cycle
+ ( 0.0745,-0.3529)
+ .. controls ( 0.0603,-0.3977) and ( 0.0512,-0.3786) .. ( 0.0066,-0.3869)
+ .. controls ( 0.0321,-0.4377) and ( 0.0562,-0.4373) .. ( 0.1084,-0.4378)
+ -- ( 0.1254,-0.3614)
+ --cycle
+ ( 0.1868,-0.3534)
+ .. controls ( 0.1605,-0.3550) and ( 0.1563,-0.3921) .. ( 0.1681,-0.4095)
+ .. controls ( 0.1887,-0.4397) and ( 0.2596,-0.3970) .. ( 0.2782,-0.3784)
+ .. controls ( 0.2016,-0.3640) and ( 0.2352,-0.3656) .. ( 0.1995,-0.3551)
+ .. controls ( 0.1948,-0.3537) and ( 0.1906,-0.3532) .. ( 0.1868,-0.3534)
+ --cycle
+ (-0.0650,-0.3585)
+ .. controls (-0.0712,-0.3584) and (-0.0783,-0.3594) .. (-0.0865,-0.3617)
+ .. controls (-0.1407,-0.4045) and (-0.1029,-0.4414) .. (-0.0731,-0.4301)
+ .. controls (-0.0250,-0.4118) and (-0.0217,-0.3591) .. (-0.0650,-0.3585)
+ --cycle
+ (-0.4008,-0.3614)
+ -- (-0.3584,-0.4293)
+ .. controls (-0.3814,-0.4389) and (-0.3792,-0.4389) .. (-0.3839,-0.4632)
+ .. controls (-0.3078,-0.4504) and (-0.3334,-0.3529) .. (-0.4008,-0.3614)
+ --cycle
+ ( 0.7706,-0.3784)
+ -- ( 0.6689,-0.4004)
+ -- ( 0.6602,-0.4378)
+ .. controls ( 0.6990,-0.4346) and ( 0.7019,-0.4328) .. ( 0.7281,-0.4038)
+ .. controls ( 0.7344,-0.4232) and ( 0.7382,-0.4373) .. ( 0.7461,-0.4460)
+ -- ( 0.7747,-0.3969)
+ --cycle
+ (-0.7404,-0.3869)
+ -- (-0.7574,-0.4038)
+ .. controls (-0.7352,-0.4249) and (-0.7368,-0.4246) .. (-0.7065,-0.4208)
+ -- (-0.7065,-0.4038)
+ --cycle
+ ( 0.3971,-0.3953)
+ -- ( 0.3801,-0.4378)
+ -- ( 0.4140,-0.4378)
+ -- ( 0.4140,-0.3953)
+ --cycle
+ (-0.6640,-0.4038)
+ .. controls (-0.6429,-0.4478) and (-0.6261,-0.4537) .. (-0.5876,-0.4802)
+ -- (-0.5367,-0.4378)
+ .. controls (-0.5592,-0.4163) and (-0.5680,-0.4098) .. (-0.5876,-0.4378)
+ .. controls (-0.6195,-0.4110) and (-0.6224,-0.4072) .. (-0.6640,-0.4038)
+ --cycle
+ (-0.4603,-0.4038)
+ -- (-0.4603,-0.4378)
+ -- (-0.4263,-0.4378)
+ -- (-0.4263,-0.4038)
+ --cycle
+ ( 0.5584,-0.4038)
+ .. controls ( 0.5189,-0.4043) and ( 0.5111,-0.4167) .. ( 0.5159,-0.4548)
+ -- ( 0.5329,-0.4548)
+ --cycle
+ ( 0.6093,-0.4123)
+ -- ( 0.6008,-0.4378)
+ -- ( 0.6262,-0.4378)
+ --cycle
+ ( 0.2273,-0.4293)
+ -- ( 0.2273,-0.4632)
+ -- ( 0.2612,-0.4632)
+ -- ( 0.2612,-0.4293)
+ --cycle
+ ( 0.1339,-0.4378)
+ .. controls ( 0.1294,-0.4715) and ( 0.1342,-0.4762) .. ( 0.1679,-0.4717)
+ --cycle
+ (-0.1337,-0.4435)
+ .. controls (-0.1394,-0.4438) and (-0.1452,-0.4454) .. (-0.1547,-0.4474)
+ -- (-0.1547,-0.4632)
+ -- (-0.1038,-0.4972)
+ -- (-0.1547,-0.5057)
+ .. controls (-0.1508,-0.5315) and (-0.1180,-0.5928) .. (-0.0833,-0.5723)
+ .. controls (-0.0768,-0.5684) and (-0.0244,-0.4827) .. (-0.1123,-0.4474)
+ .. controls (-0.1220,-0.4442) and (-0.1279,-0.4432) .. (-0.1337,-0.4435)
+ --cycle
+ (-0.0033,-0.4457)
+ .. controls (-0.0284,-0.4445) and (-0.0459,-0.4662) .. (-0.0273,-0.5141)
+ -- ( 0.0660,-0.5141)
+ .. controls ( 0.0545,-0.4708) and ( 0.0219,-0.4468) .. (-0.0033,-0.4457)
+ --cycle
+ (-0.7383,-0.4470)
+ -- (-0.7101,-0.4972)
+ .. controls (-0.7099,-0.4756) and (-0.7233,-0.4577) .. (-0.7383,-0.4470)
+ --cycle
+ (-0.4942,-0.4548)
+ -- (-0.4857,-0.5065)
+ .. controls (-0.4998,-0.5043) and (-0.5212,-0.5004) .. (-0.5329,-0.5065)
+ .. controls (-0.5629,-0.5229) and (-0.5515,-0.5662) .. (-0.5329,-0.5843)
+ .. controls (-0.5068,-0.6075) and (-0.4879,-0.6033) .. (-0.4603,-0.5906)
+ .. controls (-0.4787,-0.5639) and (-0.4791,-0.5620) .. (-0.5112,-0.5566)
+ -- (-0.5112,-0.5396)
+ .. controls (-0.4518,-0.5306) and (-0.4206,-0.4773) .. (-0.4942,-0.4548)
+ --cycle
+ ( 0.3377,-0.4548)
+ .. controls ( 0.3023,-0.4717) and ( 0.2951,-0.4788) .. ( 0.2782,-0.5141)
+ .. controls ( 0.3342,-0.5180) and ( 0.3822,-0.5526) .. ( 0.3886,-0.4717)
+ -- ( 0.3631,-0.4972)
+ --cycle
+ ( 0.5663,-0.4671)
+ .. controls ( 0.5583,-0.4668) and ( 0.5478,-0.4680) .. ( 0.5329,-0.4717)
+ -- ( 0.5329,-0.4887)
+ .. controls ( 0.5814,-0.5209) and ( 0.6607,-0.5778) .. ( 0.6687,-0.4802)
+ -- ( 0.6201,-0.4852)
+ .. controls ( 0.5908,-0.4828) and ( 0.5901,-0.4680) .. ( 0.5663,-0.4671)
+ --cycle
+ (-0.6640,-0.4802)
+ .. controls (-0.6763,-0.5067) and (-0.6845,-0.5204) .. (-0.6886,-0.5355)
+ -- (-0.6647,-0.5782)
+ -- (-0.5876,-0.5396)
+ .. controls (-0.6003,-0.5515) and (-0.6232,-0.5710) .. (-0.6310,-0.5860)
+ .. controls (-0.6373,-0.5982) and (-0.6388,-0.6155) .. (-0.6360,-0.6294)
+ -- (-0.6224,-0.6537)
+ .. controls (-0.5951,-0.6768) and (-0.5385,-0.6561) .. (-0.5112,-0.6415)
+ .. controls (-0.5400,-0.5996) and (-0.5579,-0.6048) .. (-0.6045,-0.6161)
+ -- (-0.5621,-0.5651)
+ -- (-0.5621,-0.5566)
+ -- (-0.5791,-0.5481)
+ -- (-0.5621,-0.5141)
+ --cycle
+ ( 0.1000,-0.4802)
+ -- ( 0.0745,-0.5396)
+ .. controls ( 0.1186,-0.5345) and ( 0.1548,-0.5114) .. ( 0.1000,-0.4802)
+ --cycle
+ ( 0.2188,-0.4802)
+ -- ( 0.2358,-0.5141)
+ -- ( 0.2358,-0.4802)
+ --cycle
+ ( 0.4310,-0.4802)
+ -- ( 0.4140,-0.5311)
+ -- ( 0.4140,-0.5396)
+ -- ( 0.4310,-0.5566)
+ .. controls ( 0.4679,-0.5313) and ( 0.4644,-0.5230) .. ( 0.4649,-0.4802)
+ --cycle
+ ( 0.7111,-0.4802)
+ -- ( 0.7111,-0.5059)
+ -- ( 0.7261,-0.4802)
+ --cycle
+ (-0.3414,-0.4972)
+ .. controls (-0.3911,-0.5256) and (-0.3704,-0.5729) .. (-0.3075,-0.5566)
+ -- (-0.3075,-0.5396)
+ --cycle
+ (-0.4348,-0.5057)
+ -- (-0.4348,-0.5736)
+ .. controls (-0.4068,-0.5549) and (-0.4098,-0.5369) .. (-0.4008,-0.5057)
+ --cycle
+ ( 0.1509,-0.5311)
+ -- ( 0.1254,-0.5736)
+ -- ( 0.1849,-0.5651)
+ --cycle
+ ( 0.2273,-0.5311)
+ -- ( 0.2103,-0.5975)
+ .. controls ( 0.1971,-0.5957) and ( 0.1843,-0.5904) .. ( 0.1705,-0.5975)
+ .. controls ( 0.1304,-0.6124) and ( 0.1679,-0.7346) .. ( 0.2142,-0.6893)
+ .. controls ( 0.2226,-0.6812) and ( 0.2236,-0.6741) .. ( 0.2273,-0.6670)
+ -- ( 0.1849,-0.6330)
+ .. controls ( 0.2427,-0.6183) and ( 0.2598,-0.5884) .. ( 0.2443,-0.5311)
+ --cycle
+ ( 0.5074,-0.5311)
+ .. controls ( 0.5252,-0.5626) and ( 0.5317,-0.5622) .. ( 0.5668,-0.5651)
+ .. controls ( 0.5491,-0.5336) and ( 0.5426,-0.5340) .. ( 0.5074,-0.5311)
+ --cycle
+ ( 0.0269,-0.5388)
+ .. controls ( 0.0166,-0.5396) and ( 0.0072,-0.5496) .. ( 0.0090,-0.5738)
+ -- ( 0.0151,-0.5991)
+ .. controls ( 0.0222,-0.5954) and ( 0.0287,-0.5947) .. ( 0.0377,-0.5860)
+ .. controls ( 0.0637,-0.5611) and ( 0.0441,-0.5373) .. ( 0.0269,-0.5388)
+ --cycle
+ ( 0.2782,-0.5481)
+ -- ( 0.2612,-0.5821)
+ -- ( 0.3122,-0.6245)
+ .. controls ( 0.3120,-0.5837) and ( 0.3197,-0.5648) .. ( 0.2782,-0.5481)
+ --cycle
+ (-0.2820,-0.5566)
+ .. controls (-0.2791,-0.5918) and (-0.2795,-0.5983) .. (-0.2480,-0.6161)
+ .. controls (-0.2450,-0.5789) and (-0.2492,-0.5737) .. (-0.2820,-0.5566)
+ --cycle
+ ( 0.3631,-0.5651)
+ .. controls ( 0.3595,-0.5776) and ( 0.3566,-0.5855) .. ( 0.3557,-0.5990)
+ .. controls ( 0.3500,-0.6875) and ( 0.4541,-0.6501) .. ( 0.3934,-0.5846)
+ .. controls ( 0.3826,-0.5729) and ( 0.3761,-0.5717) .. ( 0.3631,-0.5651)
+ --cycle
+ ( 0.4330,-0.5736)
+ -- ( 0.4330,-0.6379)
+ .. controls ( 0.4274,-0.6731) and ( 0.3959,-0.6885) .. ( 0.4395,-0.7179)
+ .. controls ( 0.4751,-0.6405) and ( 0.4954,-0.6629) .. ( 0.4480,-0.5736)
+ --cycle
+ ( 0.5329,-0.5821)
+ .. controls ( 0.5362,-0.6232) and ( 0.5740,-0.6869) .. ( 0.6222,-0.6585)
+ -- ( 0.6513,-0.6086)
+ .. controls ( 0.6095,-0.6116) and ( 0.5939,-0.6354) .. ( 0.5668,-0.5821)
+ --cycle
+ ( 0.1000,-0.5906)
+ -- ( 0.0830,-0.6245)
+ -- ( 0.0575,-0.6161)
+ .. controls ( 0.0477,-0.6898) and ( 0.1617,-0.6541) .. ( 0.1000,-0.5906)
+ --cycle
+ (-0.3245,-0.5991)
+ .. controls (-0.3790,-0.5920) and (-0.3824,-0.6312) .. (-0.3839,-0.6754)
+ -- (-0.3245,-0.6161)
+ --cycle
+ (-0.4348,-0.6076)
+ -- (-0.4603,-0.6670)
+ -- (-0.4942,-0.6585)
+ -- (-0.5027,-0.6670)
+ .. controls (-0.4589,-0.7510) and (-0.3531,-0.6544) .. (-0.4348,-0.6076)
+ --cycle
+ (-0.1377,-0.6076)
+ .. controls (-0.1554,-0.6464) and (-0.1574,-0.6512) .. (-0.1292,-0.6839)
+ -- (-0.1208,-0.6839)
+ -- (-0.1038,-0.6670)
+ -- (-0.1208,-0.6076)
+ --cycle
+ (-0.0698,-0.6161)
+ -- (-0.0698,-0.6330)
+ -- (-0.0019,-0.6330)
+ -- (-0.0019,-0.6161)
+ --cycle
+ (-0.2735,-0.6330)
+ .. controls (-0.3246,-0.6408) and (-0.3550,-0.6906) .. (-0.3754,-0.7356)
+ -- (-0.3510,-0.7356)
+ -- (-0.2786,-0.6658)
+ --cycle
+ (-0.1971,-0.6330)
+ .. controls (-0.2393,-0.6535) and (-0.2774,-0.6931) .. (-0.2226,-0.7264)
+ --cycle
+ ( 0.2782,-0.6415)
+ -- ( 0.2612,-0.6585)
+ .. controls ( 0.2834,-0.6795) and ( 0.2819,-0.6792) .. ( 0.3122,-0.6754)
+ -- ( 0.3122,-0.6585)
+ --cycle
+ ( 0.5244,-0.6630)
+ .. controls ( 0.5103,-0.6630) and ( 0.4934,-0.6765) .. ( 0.4819,-0.6839)
+ .. controls ( 0.4916,-0.7019) and ( 0.4915,-0.7036) .. ( 0.5078,-0.7175)
+ -- ( 0.5293,-0.7332)
+ .. controls ( 0.6028,-0.7786) and ( 0.5789,-0.6636) .. ( 0.5244,-0.6630)
+ --cycle
+ (-0.0698,-0.6839)
+ -- (-0.0613,-0.7433)
+ -- (-0.0528,-0.7518)
+ .. controls (-0.0005,-0.7307) and (-0.0190,-0.6844) .. (-0.0698,-0.6839)
+ --cycle
+ ( 0.1339,-0.6839)
+ .. controls ( 0.0648,-0.6945) and ( 0.0512,-0.7734) .. ( 0.1169,-0.7943)
+ .. controls ( 0.1059,-0.7314) and ( 0.1116,-0.7410) .. ( 0.1339,-0.6839)
+ --cycle
+ ( 0.3546,-0.6839)
+ .. controls ( 0.3575,-0.7191) and ( 0.3571,-0.7256) .. ( 0.3886,-0.7433)
+ -- ( 0.3716,-0.6839)
+ --cycle
+ ( 0.3886,-0.7433)
+ -- ( 0.3886,-0.7603)
+ -- ( 0.3546,-0.7943)
+ -- ( 0.3631,-0.7943)
+ -- ( 0.3801,-0.8113)
+ .. controls ( 0.4252,-0.7878) and ( 0.4333,-0.7840) .. ( 0.4140,-0.7349)
+ --cycle
+ (-0.5653,-0.6922)
+ .. controls (-0.5767,-0.6913) and (-0.5873,-0.6939) .. (-0.5981,-0.6969)
+ -- (-0.5741,-0.7399)
+ .. controls (-0.5528,-0.7446) and (-0.5350,-0.7433) .. (-0.5027,-0.7433)
+ .. controls (-0.5172,-0.7077) and (-0.5409,-0.6942) .. (-0.5653,-0.6922)
+ --cycle
+ (-0.1547,-0.7099)
+ .. controls (-0.1719,-0.7103) and (-0.1811,-0.7133) .. (-0.1971,-0.7179)
+ .. controls (-0.1923,-0.7317) and (-0.1881,-0.7454) .. (-0.1792,-0.7574)
+ .. controls (-0.1162,-0.8422) and (-0.0444,-0.7079) .. (-0.1547,-0.7099)
+ --cycle
+ (-0.4348,-0.7179)
+ .. controls (-0.4394,-0.7549) and (-0.4359,-0.7636) .. (-0.4008,-0.7773)
+ --cycle
+ ( 0.2358,-0.7179)
+ -- ( 0.2358,-0.7349)
+ -- ( 0.3037,-0.7349)
+ -- ( 0.3037,-0.7179)
+ --cycle
+ ( 0.4649,-0.7179)
+ -- ( 0.4734,-0.7858)
+ .. controls ( 0.4612,-0.7900) and ( 0.4516,-0.7918) .. ( 0.4409,-0.8004)
+ .. controls ( 0.3964,-0.8360) and ( 0.4585,-0.8927) .. ( 0.4819,-0.8198)
+ -- ( 0.5159,-0.8283)
+ .. controls ( 0.5142,-0.8359) and ( 0.5131,-0.8417) .. ( 0.5125,-0.8468)
+ -- ( 0.5398,-0.8000)
+ .. controls ( 0.5329,-0.7638) and ( 0.5138,-0.7350) .. ( 0.4649,-0.7179)
+ --cycle
+ ( 0.2103,-0.7264)
+ -- ( 0.1509,-0.7349)
+ -- ( 0.1509,-0.7688)
+ .. controls ( 0.1894,-0.7657) and ( 0.1982,-0.7645) .. ( 0.2103,-0.7264)
+ --cycle
+ (-0.2905,-0.7349)
+ .. controls (-0.3009,-0.7717) and (-0.3009,-0.7829) .. (-0.2905,-0.8198)
+ -- (-0.2480,-0.8028)
+ -- (-0.2311,-0.8367)
+ .. controls (-0.1820,-0.7845) and (-0.2454,-0.7805) .. (-0.2735,-0.7349)
+ --cycle
+ (-0.0019,-0.7349)
+ .. controls (-0.0202,-0.7845) and (-0.0471,-0.8007) .. (-0.0358,-0.8537)
+ -- ( 0.0066,-0.8113)
+ -- ( 0.0236,-0.8113)
+ .. controls ( 0.0412,-0.8384) and ( 0.0421,-0.8410) .. ( 0.0745,-0.8367)
+ .. controls ( 0.0599,-0.7914) and ( 0.0500,-0.7437) .. (-0.0019,-0.7349)
+ --cycle
+ (-0.5282,-0.7688)
+ .. controls (-0.5349,-0.8205) and (-0.5012,-0.8219) .. (-0.4603,-0.8113)
+ -- (-0.4603,-0.7943)
+ --cycle
+ ( 0.3122,-0.7688)
+ -- ( 0.3037,-0.7773)
+ .. controls ( 0.3122,-0.8236) and ( 0.3093,-0.8598) .. ( 0.3608,-0.8698)
+ -- ( 0.3628,-0.8698)
+ -- ( 0.3292,-0.7688)
+ --cycle
+ (-0.3584,-0.7858)
+ -- (-0.3770,-0.8622)
+ .. controls (-0.3770,-0.8627) and (-0.3768,-0.8631) .. (-0.3768,-0.8636)
+ -- (-0.3401,-0.8639)
+ -- (-0.3245,-0.7858)
+ --cycle
+ ( 0.2612,-0.7858)
+ .. controls ( 0.2125,-0.7858) and ( 0.1976,-0.7780) .. ( 0.1594,-0.8113)
+ .. controls ( 0.2029,-0.8570) and ( 0.2552,-0.8596) .. ( 0.2612,-0.7858)
+ --cycle
+ (-0.1292,-0.7943)
+ -- (-0.1886,-0.8537)
+ .. controls (-0.1453,-0.8604) and (-0.1341,-0.8487) .. (-0.1038,-0.8198)
+ --cycle
+ (-0.4348,-0.8367)
+ -- (-0.4479,-0.8630)
+ -- (-0.4228,-0.8632)
+ .. controls (-0.4191,-0.8583) and (-0.4180,-0.8505) .. (-0.4178,-0.8367)
+ --cycle
+ (-0.0783,-0.8452)
+ .. controls (-0.0928,-0.8536) and (-0.0996,-0.8588) .. (-0.1026,-0.8659)
+ -- (-0.0748,-0.8661)
+ -- (-0.0698,-0.8537)
+ --cycle
+ ( 0.1503,-0.8501)
+ .. controls ( 0.1440,-0.8514) and ( 0.1387,-0.8545) .. ( 0.1353,-0.8602)
+ .. controls ( 0.1334,-0.8621) and ( 0.1330,-0.8649) .. ( 0.1333,-0.8679)
+ -- ( 0.2103,-0.8685)
+ -- ( 0.2103,-0.8602)
+ .. controls ( 0.1968,-0.8575) and ( 0.1690,-0.8460) .. ( 0.1503,-0.8501)
+ --cycle
+ (-0.2396,-0.8622)
+ -- (-0.2421,-0.8647)
+ -- (-0.2217,-0.8649)
+ .. controls (-0.2221,-0.8638) and (-0.2222,-0.8633) .. (-0.2226,-0.8622)
+ --cycle
+ ( 0.2867,-0.8622)
+ .. controls ( 0.2782,-0.8636) and ( 0.2734,-0.8665) .. ( 0.2676,-0.8690)
+ -- ( 0.2859,-0.8691)
+ --cycle
+ ( 0.3942,-0.8639)
+ .. controls ( 0.3909,-0.8650) and ( 0.3884,-0.8678) .. ( 0.3855,-0.8700)
+ -- ( 0.4192,-0.8703)
+ .. controls ( 0.4168,-0.8684) and ( 0.4154,-0.8656) .. ( 0.4124,-0.8643)
+ .. controls ( 0.4062,-0.8618) and ( 0.4000,-0.8619) .. ( 0.3942,-0.8639)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/swamp.dtx b/macros/latex/contrib/wargame/source/hex/terrain/swamp.dtx
new file mode 100644
index 0000000000..b361789fa3
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/swamp.dtx
@@ -0,0 +1,317 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/swamp}
+% The pattern for swamps. The pattern is filled with a light blue.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/swamp/.style={
+ draw=none,
+ fill={rgb,100:red,26;green,55;blue,70}
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{hex/terrain/swamp}
+% Swamps. This is probably the shortest of the terrain patterns.
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/swamp/.pic={
+ \path[hex/terrain/swamp,pic actions,draw=none]
+ (-0.5026, 0.8699)
+ -- (-0.5041, 0.8672)
+ .. controls (-0.3586, 0.8441) and (-0.1148, 0.8722) .. ( 0.0006, 0.8697)
+ -- ( 0.2386, 0.8529)
+ -- ( 0.2386, 0.8699)
+ --cycle
+ ( 0.4257, 0.8699)
+ -- ( 0.4257, 0.8529)
+ -- ( 0.5112, 0.8558)
+ -- ( 0.5033, 0.8699)
+ --cycle
+ ( 0.3067, 0.8359)
+ -- ( 0.2897, 0.7848)
+ -- ( 0.2726, 0.8188)
+ -- ( 0.2556, 0.8188)
+ -- ( 0.2217, 0.7509)
+ -- ( 0.5719, 0.7509)
+ -- ( 0.5621, 0.7679)
+ -- ( 0.5617, 0.7679)
+ -- ( 0.3746, 0.7848)
+ -- ( 0.3746, 0.8359)
+ --cycle
+ (-0.3225, 0.7848)
+ -- (-0.3225, 0.7509)
+ -- ( 0.0856, 0.7509)
+ -- ( 0.0856, 0.7848)
+ --cycle
+ (-0.5555, 0.7782)
+ -- (-0.5713, 0.7509)
+ -- (-0.5097, 0.7509)
+ --cycle
+ ( 0.2789, 0.6696)
+ .. controls ( 0.2234, 0.6713) and ( 0.1659, 0.6658) .. ( 0.1195, 0.6658)
+ -- (-0.6117, 0.6658)
+ -- (-0.6117, 0.6318)
+ -- ( 0.4257, 0.6318)
+ .. controls ( 0.3878, 0.6597) and ( 0.3344, 0.6681) .. ( 0.2789, 0.6696)
+ --cycle
+ ( 0.6297, 0.6318)
+ -- ( 0.6297, 0.5468)
+ -- ( 0.5617, 0.5807)
+ .. controls ( 0.5449, 0.5387) and ( 0.5194, 0.5474) .. ( 0.4764, 0.5468)
+ -- ( 0.2047, 0.5468)
+ .. controls ( 0.2857, 0.5146) and ( 0.5508, 0.5135) .. ( 0.7089, 0.5136)
+ -- ( 0.6740, 0.5740)
+ -- ( 0.6638, 0.5637)
+ --cycle
+ (-0.6684, 0.5591)
+ .. controls (-0.6731, 0.5588) and (-0.6784, 0.5577) .. (-0.6832, 0.5571)
+ -- (-0.6990, 0.5298)
+ -- (-0.5777, 0.5298)
+ .. controls (-0.6139, 0.5561) and (-0.6407, 0.5608) .. (-0.6684, 0.5591)
+ --cycle
+ (-0.3396, 0.5468)
+ .. controls (-0.2194, 0.4991) and (-0.1285, 0.5826) .. (-0.0845, 0.4447)
+ -- (-0.1525, 0.4957)
+ -- (-0.1525, 0.4277)
+ .. controls (-0.0482, 0.4023) and ( 0.2732, 0.3989) .. ( 0.3746, 0.4277)
+ .. controls ( 0.2597, 0.4733) and ( 0.2397, 0.4045) .. ( 0.1026, 0.4957)
+ -- ( 0.0686, 0.4617)
+ -- ( 0.0516, 0.4617)
+ -- ( 0.0686, 0.5298)
+ -- ( 0.0006, 0.4447)
+ -- ( 0.0006, 0.5468)
+ --cycle
+ (-0.0675, 0.5127)
+ -- (-0.0164, 0.5127)
+ -- (-0.0505, 0.4447)
+ --cycle
+ (-0.7435, 0.4527)
+ -- (-0.7580, 0.4277)
+ -- (-0.6797, 0.4277)
+ .. controls (-0.6982, 0.4394) and (-0.7200, 0.4471) .. (-0.7435, 0.4527)
+ --cycle
+ (-0.5266, 0.4447)
+ .. controls (-0.4681, 0.4018) and (-0.4413, 0.4086) .. (-0.3736, 0.4277)
+ --cycle
+ ( 0.5787, 0.4277)
+ -- ( 0.5447, 0.3257)
+ -- ( 0.5108, 0.3257)
+ -- ( 0.4597, 0.4107)
+ -- ( 0.4597, 0.3257)
+ -- ( 0.4257, 0.3937)
+ -- ( 0.4087, 0.3257)
+ -- ( 0.2897, 0.3257)
+ .. controls ( 0.3725, 0.2928) and ( 0.6913, 0.3087) .. ( 0.7998, 0.3087)
+ .. controls ( 0.7426, 0.3376) and ( 0.7264, 0.3382) .. ( 0.6638, 0.3257)
+ -- ( 0.6638, 0.3767)
+ -- ( 0.5787, 0.3257)
+ --cycle
+ (-0.7817, 0.3257)
+ -- (-0.7137, 0.2407)
+ -- (-0.7988, 0.2746)
+ .. controls (-0.8162, 0.2534) and (-0.8404, 0.2432) .. (-0.8672, 0.2385)
+ -- (-0.8857, 0.2066)
+ -- (-0.6627, 0.2066)
+ .. controls (-0.5059, 0.2059) and (-0.2690, 0.1655) .. (-0.1185, 0.2066)
+ .. controls (-0.2358, 0.2532) and (-0.4834, 0.1773) .. (-0.5607, 0.2746)
+ -- (-0.6287, 0.2237)
+ -- (-0.6457, 0.2407)
+ .. controls (-0.5823, 0.3108) and (-0.5667, 0.3074) .. (-0.4756, 0.3087)
+ --cycle
+ ( 0.8338, 0.2576)
+ -- ( 0.7998, 0.2066)
+ -- ( 0.8906, 0.1990)
+ -- ( 0.8567, 0.2576)
+ --cycle
+ (-0.0164, 0.2237)
+ .. controls ( 0.0715, 0.1799) and ( 0.3189, 0.1896) .. ( 0.4257, 0.1896)
+ -- ( 0.4257, 0.2237)
+ --cycle
+ (-0.2716, 0.1216)
+ -- (-0.2716, 0.0876)
+ -- ( 0.1501, 0.0876)
+ -- ( 0.1434, 0.1042)
+ -- ( 0.0345, 0.1216)
+ --cycle
+ ( 0.1501, 0.0876)
+ -- ( 0.1536, 0.0789)
+ -- ( 0.1536, 0.0876)
+ --cycle
+ ( 0.1536, 0.0789)
+ -- ( 0.1536, 0.0196)
+ -- ( 0.0856, 0.0534)
+ -- ( 0.0686,-0.0145)
+ -- ( 0.7658,-0.0145)
+ .. controls ( 0.6332, 0.0380) and ( 0.4479,-0.0524) .. ( 0.3406, 0.0534)
+ -- ( 0.3236, 0.0534)
+ -- ( 0.2897, 0.0196)
+ -- ( 0.2897, 0.0876)
+ -- ( 0.2556, 0.0196)
+ -- ( 0.2386, 0.0876)
+ -- ( 0.1705, 0.0365)
+ --cycle
+ ( 0.3917, 0.1216)
+ -- ( 0.3917, 0.0876)
+ -- ( 0.8678, 0.0876)
+ .. controls ( 0.7768, 0.1266) and ( 0.5022, 0.1216) .. ( 0.3917, 0.1216)
+ --cycle
+ (-0.9351, 0.1208)
+ -- (-0.9518, 0.0921)
+ -- (-0.9518, 0.0876)
+ -- (-0.6117, 0.1045)
+ --cycle
+ (-0.9144, 0.0213)
+ .. controls (-0.9468, 0.0204) and (-0.9775, 0.0109) .. (-0.9996,-0.0116)
+ -- (-0.9982,-0.0141)
+ -- (-0.8158, 0.0026)
+ .. controls (-0.8449, 0.0142) and (-0.8804, 0.0222) .. (-0.9144, 0.0213)
+ --cycle
+ (-0.6287, 0.0196)
+ .. controls (-0.5470,-0.0404) and (-0.2796,-0.0145) .. (-0.1695,-0.0145)
+ -- (-0.1695, 0.0196)
+ --cycle
+ (-0.9488,-0.0996)
+ -- (-0.9292,-0.1335)
+ -- (-0.4756,-0.1335)
+ -- (-0.4756,-0.0996)
+ --cycle
+ (-0.2886,-0.0996)
+ -- (-0.2886,-0.1335)
+ -- ( 0.2726,-0.1335)
+ .. controls ( 0.2164,-0.0920) and ( 0.1871,-0.0997) .. ( 0.1195,-0.0996)
+ --cycle
+ ( 0.5478,-0.1025)
+ .. controls ( 0.5070,-0.1018) and ( 0.4651,-0.1086) .. ( 0.4257,-0.1165)
+ -- ( 0.6638,-0.1335)
+ .. controls ( 0.6286,-0.1113) and ( 0.5887,-0.1031) .. ( 0.5478,-0.1025)
+ --cycle
+ ( 0.8928,-0.1132)
+ .. controls ( 0.8481,-0.1114) and ( 0.8007,-0.1165) .. ( 0.7658,-0.1165)
+ -- ( 0.9264,-0.1394)
+ -- ( 0.9384,-0.1186)
+ .. controls ( 0.9238,-0.1157) and ( 0.9087,-0.1137) .. ( 0.8928,-0.1132)
+ --cycle
+ (-0.2982,-0.2002)
+ .. controls (-0.3469,-0.2010) and (-0.3950,-0.2053) .. (-0.4416,-0.2185)
+ -- (-0.0505,-0.2355)
+ -- ( 0.7827,-0.2355)
+ .. controls ( 0.6739,-0.1909) and ( 0.4335,-0.2017) .. ( 0.3067,-0.2016)
+ -- (-0.1525,-0.2016)
+ .. controls (-0.2005,-0.2016) and (-0.2496,-0.1992) .. (-0.2982,-0.2002)
+ --cycle
+ (-0.8328,-0.2016)
+ .. controls (-0.7894,-0.2498) and (-0.7244,-0.2355) .. (-0.6627,-0.2355)
+ -- (-0.6627,-0.3034)
+ -- (-0.6967,-0.2696)
+ -- (-0.7137,-0.2696)
+ .. controls (-0.7385,-0.3064) and (-0.7772,-0.3191) .. (-0.8200,-0.3227)
+ -- (-0.8113,-0.3377)
+ .. controls (-0.6682,-0.3440) and (-0.4684,-0.3376) .. (-0.3906,-0.3376)
+ -- (-0.4586,-0.2696)
+ -- (-0.5266,-0.3034)
+ -- (-0.5097,-0.2355)
+ -- (-0.5607,-0.3206)
+ -- (-0.5777,-0.2355)
+ -- (-0.6457,-0.3034)
+ -- (-0.6287,-0.2185)
+ --cycle
+ ( 0.8169,-0.2866)
+ -- ( 0.7489,-0.3206)
+ .. controls ( 0.7652,-0.3284) and ( 0.7871,-0.3345) .. ( 0.8114,-0.3386)
+ -- ( 0.8324,-0.3020)
+ --cycle
+ ( 0.2076,-0.3170)
+ .. controls ( 0.0913,-0.3168) and (-0.0288,-0.3206) .. (-0.0845,-0.3206)
+ -- ( 0.2509,-0.3621)
+ -- ( 0.2897,-0.4056)
+ -- ( 0.2556,-0.3716)
+ -- ( 0.2386,-0.3716)
+ -- ( 0.2386,-0.4566)
+ -- ( 0.4257,-0.4566)
+ -- ( 0.3746,-0.3716)
+ -- ( 0.3067,-0.4226)
+ -- ( 0.3067,-0.3547)
+ -- ( 0.4766,-0.3376)
+ .. controls ( 0.4363,-0.3215) and ( 0.3237,-0.3172) .. ( 0.2076,-0.3170)
+ --cycle
+ (-0.7622,-0.4226)
+ -- (-0.7427,-0.4566)
+ -- (-0.5607,-0.4566)
+ -- (-0.5607,-0.4226)
+ --cycle
+ (-0.3396,-0.4226)
+ -- (-0.3396,-0.4566)
+ -- (-0.0164,-0.4566)
+ -- (-0.0164,-0.4226)
+ --cycle
+ ( 0.5787,-0.4226)
+ .. controls ( 0.6179,-0.4661) and ( 0.6835,-0.4595) .. ( 0.7407,-0.4607)
+ -- ( 0.7528,-0.4400)
+ .. controls ( 0.6947,-0.4396) and ( 0.6370,-0.4368) .. ( 0.5787,-0.4226)
+ --cycle
+ (-0.2496,-0.5239)
+ .. controls (-0.2827,-0.5212) and (-0.3176,-0.5246) .. (-0.3566,-0.5246)
+ -- (-0.7034,-0.5246)
+ -- (-0.6873,-0.5524)
+ .. controls (-0.6429,-0.5639) and (-0.5972,-0.5587) .. (-0.5436,-0.5587)
+ -- (-0.1525,-0.5587)
+ .. controls (-0.1848,-0.5349) and (-0.2163,-0.5263) .. (-0.2496,-0.5239)
+ --cycle
+ (-0.0164,-0.5417)
+ .. controls ( 0.0514,-0.5917) and ( 0.1065,-0.5717) .. ( 0.1876,-0.5736)
+ .. controls ( 0.2932,-0.5761) and ( 0.5300,-0.5848) .. ( 0.6766,-0.5720)
+ -- ( 0.6872,-0.5538)
+ -- ( 0.4937,-0.5417)
+ --cycle
+ (-0.6255,-0.6593)
+ -- (-0.6248,-0.6607)
+ -- (-0.6117,-0.6607)
+ --cycle
+ (-0.5777,-0.6607)
+ -- (-0.5777,-0.7287)
+ -- (-0.5856,-0.7287)
+ -- (-0.5659,-0.7627)
+ -- (-0.3906,-0.7627)
+ -- (-0.1695,-0.7627)
+ -- (-0.4246,-0.7287)
+ -- (-0.4076,-0.6607)
+ -- (-0.4416,-0.7287)
+ -- (-0.4756,-0.7287)
+ -- (-0.4756,-0.6607)
+ -- (-0.5097,-0.6607)
+ -- (-0.5097,-0.7287)
+ --cycle
+ ( 0.0686,-0.7457)
+ .. controls ( 0.1464,-0.8028) and ( 0.3428,-0.7798) .. ( 0.4427,-0.7798)
+ -- ( 0.4427,-0.7457)
+ --cycle
+ (-0.3736,-0.8478)
+ -- (-0.3736,-0.8722)
+ -- (-0.2203,-0.8722)
+ .. controls (-0.2708,-0.8419) and (-0.3097,-0.8478) .. (-0.3736,-0.8478)
+ --cycle
+ (-0.0172,-0.8544)
+ .. controls (-0.0398,-0.8556) and (-0.0623,-0.8586) .. (-0.0845,-0.8648)
+ .. controls (-0.0753,-0.8684) and (-0.0664,-0.8700) .. (-0.0573,-0.8722)
+ -- ( 0.5033,-0.8722)
+ -- ( 0.5088,-0.8626)
+ .. controls ( 0.3892,-0.8602) and ( 0.2527,-0.8649) .. ( 0.1876,-0.8648)
+ .. controls ( 0.1186,-0.8647) and ( 0.0502,-0.8509) .. (-0.0172,-0.8544)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/town.dtx b/macros/latex/contrib/wargame/source/hex/terrain/town.dtx
new file mode 100644
index 0000000000..1186b54c81
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/town.dtx
@@ -0,0 +1,1061 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/town}
+% A town.
+%
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/town/.pic={
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.1432,-0.4518)
+ -- (-0.0320,-0.2906)
+ -- ( 0.0745,-0.0351)
+ -- ( 0.1130,-0.0387)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0729,-0.0352)
+ -- (-0.1716, 0.0254)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.2493, 0.5648)
+ -- (-0.2192, 0.4501)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0677,-0.6538)
+ -- ( 0.1754,-0.7052)
+ -- ( 0.4358,-0.4688)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0439,-0.3617)
+ -- (-0.0921,-0.5012)
+ -- (-0.2865,-0.3243)
+ -- (-0.4420,-0.4608)
+ -- (-0.5795,-0.4446)
+ -- (-0.6421,-0.3520)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0622,-0.6515)
+ -- (-0.0316,-0.6176)
+ -- (-0.0221,-0.5364)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0048,-0.2069)
+ -- (-0.1945,-0.1818)
+ -- (-0.2278,-0.2247)
+ -- (-0.5051,-0.1356)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.3383, 0.0449)
+ -- (-0.2189, 0.4510)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.0073, 0.8700)
+ -- ( 0.3952, 0.3373)
+ -- ( 0.3884, 0.2029)
+ -- ( 0.3555, 0.1378)
+ -- ( 0.3751, 0.0880)
+ -- ( 0.2513,-0.1997)
+ -- ( 0.1396,-0.4505)
+ -- ( 0.0641,-0.6512)
+ -- ( 0.0070,-0.8700)
+ -- ( 0.0070,-0.8700)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.7575, 0.4367)
+ -- ( 0.3945, 0.3375)
+ -- ( 0.3945, 0.3375)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.1900,-0.0806)
+ -- (-0.0751, 0.3938)
+ -- (-0.0765, 0.3925)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.1308, 0.1580)
+ -- (-0.7603, 0.4394)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.7139,-0.1526)
+ -- (-0.6147,-0.3362)
+ -- (-0.7607,-0.4327)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.6676,-0.2405)
+ -- (-0.4599,-0.1067)
+ -- (-0.1877,-0.0679)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.2082,-0.3003)
+ -- ( 0.4578,-0.4855)
+ -- ( 0.5914,-0.3675)
+ -- ( 0.7607,-0.4420)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.3827, 0.1864)
+ -- (-0.1290, 0.1576)
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4493,-0.3075)
+ -- (-0.4043,-0.2868)
+ -- (-0.3710,-0.3593)
+ -- (-0.4160,-0.3799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4493,-0.3075)
+ -- (-0.4043,-0.2868)
+ -- (-0.3710,-0.3593)
+ -- (-0.4160,-0.3799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5264,-0.1066)
+ -- (-0.5514,-0.0681)
+ -- (-0.5002,-0.0349)
+ -- (-0.4753,-0.0733)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5264,-0.1066)
+ -- (-0.5514,-0.0681)
+ -- (-0.5002,-0.0349)
+ -- (-0.4753,-0.0733)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1978, 0.1663)
+ -- (-0.1534, 0.1549)
+ -- (-0.1685, 0.0960)
+ -- (-0.2130, 0.1074)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1978, 0.1663)
+ -- (-0.1534, 0.1549)
+ -- (-0.1685, 0.0960)
+ -- (-0.2130, 0.1074)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2259, 0.4898)
+ -- ( 0.2453, 0.4680)
+ -- ( 0.2052, 0.4324)
+ -- ( 0.1858, 0.4542)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2259, 0.4898)
+ -- ( 0.2453, 0.4680)
+ -- ( 0.2052, 0.4324)
+ -- ( 0.1858, 0.4542)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0986, 0.2553)
+ -- (-0.0882, 0.2827)
+ -- (-0.0380, 0.2637)
+ -- (-0.0484, 0.2363)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0986, 0.2553)
+ -- (-0.0882, 0.2827)
+ -- (-0.0380, 0.2637)
+ -- (-0.0484, 0.2363)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0834, 0.2379)
+ -- ( 0.0888, 0.2667)
+ -- ( 0.1415, 0.2566)
+ -- ( 0.1361, 0.2279)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0834, 0.2379)
+ -- ( 0.0888, 0.2667)
+ -- ( 0.1415, 0.2566)
+ -- ( 0.1361, 0.2279)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0207,-0.0604)
+ -- (-0.0103,-0.0331)
+ -- ( 0.0398,-0.0521)
+ -- ( 0.0294,-0.0794)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0207,-0.0604)
+ -- (-0.0103,-0.0331)
+ -- ( 0.0398,-0.0521)
+ -- ( 0.0294,-0.0794)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3580,-0.4608)
+ -- ( 0.3837,-0.4748)
+ -- ( 0.3581,-0.5219)
+ -- ( 0.3324,-0.5080)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3580,-0.4608)
+ -- ( 0.3837,-0.4748)
+ -- ( 0.3581,-0.5219)
+ -- ( 0.3324,-0.5080)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5127,-0.3559)
+ -- ( 0.5341,-0.3759)
+ -- ( 0.4975,-0.4151)
+ -- ( 0.4761,-0.3951)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5127,-0.3559)
+ -- ( 0.5341,-0.3759)
+ -- ( 0.4975,-0.4151)
+ -- ( 0.4761,-0.3951)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2118,-0.3884)
+ -- ( 0.2245,-0.3620)
+ -- ( 0.2728,-0.3854)
+ -- ( 0.2600,-0.4118)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2118,-0.3884)
+ -- ( 0.2245,-0.3620)
+ -- ( 0.2728,-0.3854)
+ -- ( 0.2600,-0.4118)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1651,-0.4740)
+ -- ( 0.1775,-0.4475)
+ -- ( 0.2260,-0.4702)
+ -- ( 0.2137,-0.4968)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1651,-0.4740)
+ -- ( 0.1775,-0.4475)
+ -- ( 0.2260,-0.4702)
+ -- ( 0.2137,-0.4968)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2834,-0.4196)
+ -- ( 0.2957,-0.3932)
+ -- ( 0.3443,-0.4159)
+ -- ( 0.3319,-0.4423)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2834,-0.4196)
+ -- ( 0.2957,-0.3932)
+ -- ( 0.3443,-0.4159)
+ -- ( 0.3319,-0.4423)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1447,-0.5170)
+ -- ( 0.1555,-0.4899)
+ -- ( 0.2053,-0.5096)
+ -- ( 0.1945,-0.5368)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1447,-0.5170)
+ -- ( 0.1555,-0.4899)
+ -- ( 0.2053,-0.5096)
+ -- ( 0.1945,-0.5368)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0154,-0.5671)
+ -- ( 0.0244,-0.5392)
+ -- ( 0.0754,-0.5558)
+ -- ( 0.0664,-0.5836)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0154,-0.5671)
+ -- ( 0.0244,-0.5392)
+ -- ( 0.0754,-0.5558)
+ -- ( 0.0664,-0.5836)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2958,-0.3614)
+ -- (-0.2707,-0.3764)
+ -- (-0.2983,-0.4224)
+ -- (-0.3234,-0.4073)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2958,-0.3614)
+ -- (-0.2707,-0.3764)
+ -- (-0.2983,-0.4224)
+ -- (-0.3234,-0.4073)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3024,-0.2385)
+ -- (-0.2753,-0.2491)
+ -- (-0.2948,-0.2990)
+ -- (-0.3220,-0.2883)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3024,-0.2385)
+ -- (-0.2753,-0.2491)
+ -- (-0.2948,-0.2990)
+ -- (-0.3220,-0.2883)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5719,-0.2295)
+ -- (-0.5577,-0.2550)
+ -- (-0.6045,-0.2811)
+ -- (-0.6187,-0.2556)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5719,-0.2295)
+ -- (-0.5577,-0.2550)
+ -- (-0.6045,-0.2811)
+ -- (-0.6187,-0.2556)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5909,-0.3922)
+ -- (-0.5677,-0.3744)
+ -- (-0.5351,-0.4170)
+ -- (-0.5584,-0.4348)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5909,-0.3922)
+ -- (-0.5677,-0.3744)
+ -- (-0.5351,-0.4170)
+ -- (-0.5584,-0.4348)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4367,-0.3858)
+ -- (-0.4233,-0.4119)
+ -- (-0.4709,-0.4364)
+ -- (-0.4843,-0.4105)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4367,-0.3858)
+ -- (-0.4233,-0.4119)
+ -- (-0.4709,-0.4364)
+ -- (-0.4843,-0.4105)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6605,-0.4272)
+ -- (-0.6489,-0.4540)
+ -- (-0.6982,-0.4752)
+ -- (-0.7097,-0.4483)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6605,-0.4272)
+ -- (-0.6489,-0.4540)
+ -- (-0.6982,-0.4752)
+ -- (-0.7097,-0.4483)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2694,-0.2379)
+ -- ( 0.2777,-0.2098)
+ -- ( 0.3291,-0.2250)
+ -- ( 0.3209,-0.2530)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2694,-0.2379)
+ -- ( 0.2777,-0.2098)
+ -- ( 0.3291,-0.2250)
+ -- ( 0.3209,-0.2530)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1131,-0.3134)
+ -- ( 0.1237,-0.2861)
+ -- ( 0.1737,-0.3055)
+ -- ( 0.1630,-0.3328)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1131,-0.3134)
+ -- ( 0.1237,-0.2861)
+ -- ( 0.1737,-0.3055)
+ -- ( 0.1630,-0.3328)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1931,-0.0936)
+ -- ( 0.2058,-0.0673)
+ -- ( 0.2541,-0.0904)
+ -- ( 0.2415,-0.1168)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1931,-0.0936)
+ -- ( 0.2058,-0.0673)
+ -- ( 0.2541,-0.0904)
+ -- ( 0.2415,-0.1168)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1779, 0.1198)
+ -- ( 0.1984, 0.0990)
+ -- ( 0.1603, 0.0613)
+ -- ( 0.1398, 0.0821)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1779, 0.1198)
+ -- ( 0.1984, 0.0990)
+ -- ( 0.1603, 0.0613)
+ -- ( 0.1398, 0.0821)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2761, 0.3992)
+ -- ( 0.2947, 0.3765)
+ -- ( 0.2533, 0.3425)
+ -- ( 0.2347, 0.3651)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2761, 0.3992)
+ -- ( 0.2947, 0.3765)
+ -- ( 0.2533, 0.3425)
+ -- ( 0.2347, 0.3651)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3227, 0.3548)
+ -- ( 0.3421, 0.3329)
+ -- ( 0.3020, 0.2974)
+ -- ( 0.2826, 0.3192)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3227, 0.3548)
+ -- ( 0.3421, 0.3329)
+ -- ( 0.3020, 0.2974)
+ -- ( 0.2826, 0.3192)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2473, 0.2770)
+ -- (-0.2380, 0.3048)
+ -- (-0.1871, 0.2879)
+ -- (-0.1964, 0.2601)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2473, 0.2770)
+ -- (-0.2380, 0.3048)
+ -- (-0.1871, 0.2879)
+ -- (-0.1964, 0.2601)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1395, 0.3602)
+ -- (-0.1127, 0.3488)
+ -- (-0.1335, 0.2995)
+ -- (-0.1604, 0.3109)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1395, 0.3602)
+ -- (-0.1127, 0.3488)
+ -- (-0.1335, 0.2995)
+ -- (-0.1604, 0.3109)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2901, 0.6234)
+ -- ( 0.3088, 0.6008)
+ -- ( 0.2674, 0.5667)
+ -- ( 0.2487, 0.5893)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2901, 0.6234)
+ -- ( 0.3088, 0.6008)
+ -- ( 0.2674, 0.5667)
+ -- ( 0.2487, 0.5893)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3456, 0.2854)
+ -- (-0.3335, 0.3120)
+ -- (-0.2847, 0.2898)
+ -- (-0.2968, 0.2632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3456, 0.2854)
+ -- (-0.3335, 0.3120)
+ -- (-0.2847, 0.2898)
+ -- (-0.2968, 0.2632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3040, 0.3746)
+ -- (-0.2919, 0.4012)
+ -- (-0.2431, 0.3791)
+ -- (-0.2552, 0.3524)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3040, 0.3746)
+ -- (-0.2919, 0.4012)
+ -- (-0.2431, 0.3791)
+ -- (-0.2552, 0.3524)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7420,-0.2456)
+ -- (-0.7302,-0.2189)
+ -- (-0.6812,-0.2407)
+ -- (-0.6930,-0.2674)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7420,-0.2456)
+ -- (-0.7302,-0.2189)
+ -- (-0.6812,-0.2407)
+ -- (-0.6930,-0.2674)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6678,-0.1369)
+ -- (-0.6492,-0.1143)
+ -- (-0.6078,-0.1484)
+ -- (-0.6264,-0.1710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6678,-0.1369)
+ -- (-0.6492,-0.1143)
+ -- (-0.6078,-0.1484)
+ -- (-0.6264,-0.1710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2252,-0.0023)
+ -- (-0.1960,-0.0023)
+ -- (-0.1960,-0.0559)
+ -- (-0.2252,-0.0559)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2252,-0.0023)
+ -- (-0.1960,-0.0023)
+ -- (-0.1960,-0.0559)
+ -- (-0.2252,-0.0559)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0041,-0.2944)
+ -- ( 0.0064,-0.2671)
+ -- ( 0.0564,-0.2862)
+ -- ( 0.0460,-0.3135)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0041,-0.2944)
+ -- ( 0.0064,-0.2671)
+ -- ( 0.0564,-0.2862)
+ -- ( 0.0460,-0.3135)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1877,-0.2296)
+ -- (-0.1764,-0.2026)
+ -- (-0.1270,-0.2233)
+ -- (-0.1383,-0.2503)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1877,-0.2296)
+ -- (-0.1764,-0.2026)
+ -- (-0.1270,-0.2233)
+ -- (-0.1383,-0.2503)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1170,-0.3014)
+ -- (-0.1067,-0.2740)
+ -- (-0.0566,-0.2928)
+ -- (-0.0668,-0.3202)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1170,-0.3014)
+ -- (-0.1067,-0.2740)
+ -- (-0.0566,-0.2928)
+ -- (-0.0668,-0.3202)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0719,-0.3499)
+ -- (-0.0428,-0.3468)
+ -- (-0.0371,-0.4001)
+ -- (-0.0661,-0.4032)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0719,-0.3499)
+ -- (-0.0428,-0.3468)
+ -- (-0.0371,-0.4001)
+ -- (-0.0661,-0.4032)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4610, 0.0967)
+ -- ( 0.4896, 0.0909)
+ -- ( 0.4790, 0.0384)
+ -- ( 0.4503, 0.0442)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4610, 0.0967)
+ -- ( 0.4896, 0.0909)
+ -- ( 0.4790, 0.0384)
+ -- ( 0.4503, 0.0442)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1944,-0.4810)
+ -- (-0.1500,-0.4925)
+ -- (-0.1653,-0.5515)
+ -- (-0.2097,-0.5399)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1944,-0.4810)
+ -- (-0.1500,-0.4925)
+ -- (-0.1653,-0.5515)
+ -- (-0.2097,-0.5399)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2924,-0.1375)
+ -- ( 0.3110,-0.0955)
+ -- ( 0.3667,-0.1202)
+ -- ( 0.3481,-0.1621)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2924,-0.1375)
+ -- ( 0.3110,-0.0955)
+ -- ( 0.3667,-0.1202)
+ -- ( 0.3481,-0.1621)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3062, 0.5810)
+ -- (-0.2635, 0.5641)
+ -- (-0.2859, 0.5075)
+ -- (-0.3285, 0.5243)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3062, 0.5810)
+ -- (-0.2635, 0.5641)
+ -- (-0.2859, 0.5075)
+ -- (-0.3285, 0.5243)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0310,-0.4661)
+ -- ( 0.0449,-0.4224)
+ -- ( 0.1029,-0.4409)
+ -- ( 0.0889,-0.4846)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0310,-0.4661)
+ -- ( 0.0449,-0.4224)
+ -- ( 0.1029,-0.4409)
+ -- ( 0.0889,-0.4846)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1523,-0.2013)
+ -- ( 0.1718,-0.1598)
+ -- ( 0.2270,-0.1857)
+ -- ( 0.2075,-0.2272)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1523,-0.2013)
+ -- ( 0.1718,-0.1598)
+ -- ( 0.2270,-0.1857)
+ -- ( 0.2075,-0.2272)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0857,-0.3676)
+ -- ( 0.1052,-0.3261)
+ -- ( 0.1603,-0.3520)
+ -- ( 0.1409,-0.3935)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0857,-0.3676)
+ -- ( 0.1052,-0.3261)
+ -- ( 0.1603,-0.3520)
+ -- ( 0.1409,-0.3935)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0204,-0.2046)
+ -- ( 0.0398,-0.1631)
+ -- ( 0.0950,-0.1890)
+ -- ( 0.0755,-0.2305)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0204,-0.2046)
+ -- ( 0.0398,-0.1631)
+ -- ( 0.0950,-0.1890)
+ -- ( 0.0755,-0.2305)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5094, 0.3292)
+ -- ( 0.5505, 0.3494)
+ -- ( 0.5773, 0.2947)
+ -- ( 0.5362, 0.2746)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5094, 0.3292)
+ -- ( 0.5505, 0.3494)
+ -- ( 0.5773, 0.2947)
+ -- ( 0.5362, 0.2746)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0647, 0.4710)
+ -- (-0.0215, 0.4559)
+ -- (-0.0416, 0.3984)
+ -- (-0.0848, 0.4135)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0647, 0.4710)
+ -- (-0.0215, 0.4559)
+ -- (-0.0416, 0.3984)
+ -- (-0.0848, 0.4135)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1476,-0.3704)
+ -- (-0.1403,-0.3251)
+ -- (-0.0802,-0.3347)
+ -- (-0.0873,-0.3799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1476,-0.3704)
+ -- (-0.1403,-0.3251)
+ -- (-0.0802,-0.3347)
+ -- (-0.0873,-0.3799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0755, 0.3210)
+ -- (-0.0531, 0.3610)
+ -- ( 0.0001, 0.3312)
+ -- (-0.0224, 0.2912)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0755, 0.3210)
+ -- (-0.0531, 0.3610)
+ -- ( 0.0001, 0.3312)
+ -- (-0.0224, 0.2912)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1354, 0.0442)
+ -- (-0.1129, 0.0842)
+ -- (-0.0599, 0.0544)
+ -- (-0.0823, 0.0144)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1354, 0.0442)
+ -- (-0.1129, 0.0842)
+ -- (-0.0599, 0.0544)
+ -- (-0.0823, 0.0144)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1672,-0.0608)
+ -- (-0.1524,-0.0175)
+ -- (-0.0948,-0.0371)
+ -- (-0.1096,-0.0805)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1672,-0.0608)
+ -- (-0.1524,-0.0175)
+ -- (-0.0948,-0.0371)
+ -- (-0.1096,-0.0805)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0920,-0.6296)
+ -- ( 0.1069,-0.5863)
+ -- ( 0.1645,-0.6060)
+ -- ( 0.1497,-0.6493)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0920,-0.6296)
+ -- ( 0.1069,-0.5863)
+ -- ( 0.1645,-0.6060)
+ -- ( 0.1497,-0.6493)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4115,-0.5373)
+ -- ( 0.4390,-0.5006)
+ -- ( 0.4877,-0.5372)
+ -- ( 0.4601,-0.5739)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4115,-0.5373)
+ -- ( 0.4390,-0.5006)
+ -- ( 0.4877,-0.5372)
+ -- ( 0.4601,-0.5739)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3095, 0.1272)
+ -- ( 0.3519, 0.1095)
+ -- ( 0.3284, 0.0533)
+ -- ( 0.2861, 0.0710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3095, 0.1272)
+ -- ( 0.3519, 0.1095)
+ -- ( 0.3284, 0.0533)
+ -- ( 0.2861, 0.0710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3558, 0.0291)
+ -- (-0.3124, 0.0144)
+ -- (-0.3318,-0.0433)
+ -- (-0.3753,-0.0287)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3558, 0.0291)
+ -- (-0.3124, 0.0144)
+ -- (-0.3318,-0.0433)
+ -- (-0.3753,-0.0287)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2904, 0.2714)
+ -- ( 0.3361, 0.2681)
+ -- ( 0.3318, 0.2074)
+ -- ( 0.2861, 0.2106)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2904, 0.2714)
+ -- ( 0.3361, 0.2681)
+ -- ( 0.3318, 0.2074)
+ -- ( 0.2861, 0.2106)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0124, 0.1558)
+ -- ( 0.0333, 0.1525)
+ -- ( 0.0290, 0.0918)
+ -- (-0.0167, 0.0950)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0124, 0.1558)
+ -- ( 0.0333, 0.1525)
+ -- ( 0.0290, 0.0918)
+ -- (-0.0167, 0.0950)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4665, 0.4396)
+ -- ( 0.4868, 0.3985)
+ -- ( 0.4321, 0.3716)
+ -- ( 0.4119, 0.4127)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4665, 0.4396)
+ -- ( 0.4868, 0.3985)
+ -- ( 0.4321, 0.3716)
+ -- ( 0.4119, 0.4127)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2433,-0.1480)
+ -- (-0.2141,-0.1472)
+ -- (-0.2127,-0.2008)
+ -- (-0.2419,-0.2015)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2433,-0.1480)
+ -- (-0.2141,-0.1472)
+ -- (-0.2127,-0.2008)
+ -- (-0.2419,-0.2015)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4187, 0.2523)
+ -- ( 0.4643, 0.2574)
+ -- ( 0.4711, 0.1969)
+ -- ( 0.4256, 0.1917)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4187, 0.2523)
+ -- ( 0.4643, 0.2574)
+ -- ( 0.4711, 0.1969)
+ -- ( 0.4256, 0.1917)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2599,-0.2379)
+ -- (-0.2164,-0.2525)
+ -- (-0.2358,-0.3102)
+ -- (-0.2793,-0.2955)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2599,-0.2379)
+ -- (-0.2164,-0.2525)
+ -- (-0.2358,-0.3102)
+ -- (-0.2793,-0.2955)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0167, 0.0438)
+ -- ( 0.0385, 0.0365)
+ -- ( 0.0301, 0.0113)
+ -- ( 0.0082, 0.0187)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0167, 0.0438)
+ -- ( 0.0385, 0.0365)
+ -- ( 0.0301, 0.0113)
+ -- ( 0.0082, 0.0187)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2901,-0.1193)
+ -- (-0.2450,-0.1273)
+ -- (-0.2556,-0.1872)
+ -- (-0.3008,-0.1792)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2901,-0.1193)
+ -- (-0.2450,-0.1273)
+ -- (-0.2556,-0.1872)
+ -- (-0.3008,-0.1792)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1275,-0.0001)
+ -- ( 0.1734,-0.0022)
+ -- ( 0.1707,-0.0630)
+ -- ( 0.1248,-0.0610)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1275,-0.0001)
+ -- ( 0.1734,-0.0022)
+ -- ( 0.1707,-0.0630)
+ -- ( 0.1248,-0.0610)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0645,-0.5272)
+ -- (-0.0415,-0.5245)
+ -- (-0.0383,-0.5509)
+ -- (-0.0612,-0.5536)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0645,-0.5272)
+ -- (-0.0415,-0.5245)
+ -- (-0.0383,-0.5509)
+ -- (-0.0612,-0.5536)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3209, 0.2176)
+ -- (-0.2989, 0.2105)
+ -- (-0.3069, 0.1853)
+ -- (-0.3289, 0.1923)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3209, 0.2176)
+ -- (-0.2989, 0.2105)
+ -- (-0.3069, 0.1853)
+ -- (-0.3289, 0.1923)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3746, 0.1600)
+ -- ( 0.4021, 0.1699)
+ -- ( 0.4204, 0.1195)
+ -- ( 0.3929, 0.1095)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3746, 0.1600)
+ -- ( 0.4021, 0.1699)
+ -- ( 0.4204, 0.1195)
+ -- ( 0.3929, 0.1095)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/tree.dtx b/macros/latex/contrib/wargame/source/hex/terrain/tree.dtx
new file mode 100644
index 0000000000..93c2987227
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/tree.dtx
@@ -0,0 +1,31 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/tree}
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/tree/.pic={
+ \path[draw,very thick,pic actions]
+ (-.15,.0)
+ arc (269:135:.1)
+ arc (215: 90:.1)
+ arc (180: 45:.1)
+ arc (135: 0:.1)
+ arc ( 90:-45:.1)
+ arc ( 45:-90:.1)
+ (-.15,.025)
+ arc (60:-60:.25)
+ arc (150:30:.075)
+ arc (150:30:.075)
+ arc (150:30:.075)
+ arc (-120:-240:.25);
+
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/village.dtx b/macros/latex/contrib/wargame/source/hex/terrain/village.dtx
new file mode 100644
index 0000000000..837b92642c
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/village.dtx
@@ -0,0 +1,352 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/town/road,
+% hex/terrain/town/small road,
+% hex/terrain/town/house}
+% For villages, towns, and cities, we need three styles: one for
+% houses, and separate styles for regular and small roads. Note
+% that we draw using the stroke colour for roads and houses.
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/town/road/.style={
+ fill=none,
+ draw=gray!50!black,
+ scale line widths,
+ line width=.3mm
+ },
+ hex/terrain/town/small road/.style={
+ fill=none,
+ draw=gray!75!black,
+ scale line widths,
+ line width=.15mm
+ },
+ hex/terrain/town/post road/.style={
+ fill=none
+ },
+ hex/terrain/town/house/.style={
+ draw=none,
+ fill=gray!75!black,
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+%
+% \begin{TikzKey}{hex/terrain/village}
+% Now for village, town, and city patterns.
+%
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/village/.pic={
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.0073, 0.8700)
+ -- ( 0.3952, 0.3373)
+ -- ( 0.3884, 0.2029)
+ -- ( 0.3555, 0.1378)
+ -- ( 0.3751, 0.0880)
+ -- ( 0.2513,-0.1997)
+ -- ( 0.1396,-0.4505)
+ -- ( 0.0641,-0.6512)
+ -- ( 0.0070,-0.8700)
+ -- ( 0.0070,-0.8700)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.7575, 0.4367)
+ -- ( 0.3945, 0.3375)
+ -- ( 0.3945, 0.3375)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.1900,-0.0806)
+ -- (-0.1155, 0.1588)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.1308, 0.1580)
+ -- (-0.7603, 0.4394)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.6615,-0.2309)
+ -- (-0.6777,-0.3255)
+ -- (-0.7607,-0.4327)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.6676,-0.2405)
+ -- (-0.4599,-0.1067)
+ -- (-0.1877,-0.0679)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.2082,-0.3003)
+ -- ( 0.4578,-0.4855)
+ -- ( 0.5914,-0.3675)
+ -- ( 0.7607,-0.4420)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.3827, 0.1864)
+ -- (-0.1290, 0.1576)
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2259, 0.4898)
+ -- ( 0.2453, 0.4680)
+ -- ( 0.2052, 0.4324)
+ -- ( 0.1858, 0.4542)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2259, 0.4898)
+ -- ( 0.2453, 0.4680)
+ -- ( 0.2052, 0.4324)
+ -- ( 0.1858, 0.4542)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1978, 0.1663)
+ -- (-0.1534, 0.1549)
+ -- (-0.1685, 0.0960)
+ -- (-0.2130, 0.1074)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1978, 0.1663)
+ -- (-0.1534, 0.1549)
+ -- (-0.1685, 0.0960)
+ -- (-0.2130, 0.1074)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5127,-0.3559)
+ -- ( 0.5341,-0.3759)
+ -- ( 0.4975,-0.4151)
+ -- ( 0.4761,-0.3951)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5127,-0.3559)
+ -- ( 0.5341,-0.3759)
+ -- ( 0.4975,-0.4151)
+ -- ( 0.4761,-0.3951)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2761, 0.3992)
+ -- ( 0.2947, 0.3765)
+ -- ( 0.2533, 0.3425)
+ -- ( 0.2347, 0.3651)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2761, 0.3992)
+ -- ( 0.2947, 0.3765)
+ -- ( 0.2533, 0.3425)
+ -- ( 0.2347, 0.3651)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3227, 0.3548)
+ -- ( 0.3421, 0.3329)
+ -- ( 0.3020, 0.2974)
+ -- ( 0.2826, 0.3192)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3227, 0.3548)
+ -- ( 0.3421, 0.3329)
+ -- ( 0.3020, 0.2974)
+ -- ( 0.2826, 0.3192)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2901, 0.6234)
+ -- ( 0.3088, 0.6008)
+ -- ( 0.2674, 0.5667)
+ -- ( 0.2487, 0.5893)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2901, 0.6234)
+ -- ( 0.3088, 0.6008)
+ -- ( 0.2674, 0.5667)
+ -- ( 0.2487, 0.5893)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3456, 0.2854)
+ -- (-0.3335, 0.3120)
+ -- (-0.2847, 0.2898)
+ -- (-0.2968, 0.2632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3456, 0.2854)
+ -- (-0.3335, 0.3120)
+ -- (-0.2847, 0.2898)
+ -- (-0.2968, 0.2632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6678,-0.1369)
+ -- (-0.6492,-0.1143)
+ -- (-0.6078,-0.1484)
+ -- (-0.6264,-0.1710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6678,-0.1369)
+ -- (-0.6492,-0.1143)
+ -- (-0.6078,-0.1484)
+ -- (-0.6264,-0.1710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4610, 0.0967)
+ -- ( 0.4896, 0.0909)
+ -- ( 0.4790, 0.0384)
+ -- ( 0.4503, 0.0442)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4610, 0.0967)
+ -- ( 0.4896, 0.0909)
+ -- ( 0.4790, 0.0384)
+ -- ( 0.4503, 0.0442)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2924,-0.1375)
+ -- ( 0.3110,-0.0955)
+ -- ( 0.3667,-0.1202)
+ -- ( 0.3481,-0.1621)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2924,-0.1375)
+ -- ( 0.3110,-0.0955)
+ -- ( 0.3667,-0.1202)
+ -- ( 0.3481,-0.1621)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5094, 0.3292)
+ -- ( 0.5505, 0.3494)
+ -- ( 0.5773, 0.2947)
+ -- ( 0.5362, 0.2746)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5094, 0.3292)
+ -- ( 0.5505, 0.3494)
+ -- ( 0.5773, 0.2947)
+ -- ( 0.5362, 0.2746)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1323, 0.2640)
+ -- (-0.0890, 0.2489)
+ -- (-0.1092, 0.1914)
+ -- (-0.1524, 0.2065)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1323, 0.2640)
+ -- (-0.0890, 0.2489)
+ -- (-0.1092, 0.1914)
+ -- (-0.1524, 0.2065)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4115,-0.5373)
+ -- ( 0.4390,-0.5006)
+ -- ( 0.4877,-0.5372)
+ -- ( 0.4601,-0.5739)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4115,-0.5373)
+ -- ( 0.4390,-0.5006)
+ -- ( 0.4877,-0.5372)
+ -- ( 0.4601,-0.5739)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3095, 0.1272)
+ -- ( 0.3519, 0.1095)
+ -- ( 0.3284, 0.0533)
+ -- ( 0.2861, 0.0710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3095, 0.1272)
+ -- ( 0.3519, 0.1095)
+ -- ( 0.3284, 0.0533)
+ -- ( 0.2861, 0.0710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2904, 0.2714)
+ -- ( 0.3361, 0.2681)
+ -- ( 0.3318, 0.2074)
+ -- ( 0.2861, 0.2106)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2904, 0.2714)
+ -- ( 0.3361, 0.2681)
+ -- ( 0.3318, 0.2074)
+ -- ( 0.2861, 0.2106)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4665, 0.4396)
+ -- ( 0.4868, 0.3985)
+ -- ( 0.4321, 0.3716)
+ -- ( 0.4119, 0.4127)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4665, 0.4396)
+ -- ( 0.4868, 0.3985)
+ -- ( 0.4321, 0.3716)
+ -- ( 0.4119, 0.4127)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4187, 0.2523)
+ -- ( 0.4643, 0.2574)
+ -- ( 0.4711, 0.1969)
+ -- ( 0.4256, 0.1917)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4187, 0.2523)
+ -- ( 0.4643, 0.2574)
+ -- ( 0.4711, 0.1969)
+ -- ( 0.4256, 0.1917)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3746, 0.1600)
+ -- ( 0.4021, 0.1699)
+ -- ( 0.4204, 0.1195)
+ -- ( 0.3929, 0.1095)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3746, 0.1600)
+ -- ( 0.4021, 0.1699)
+ -- ( 0.4204, 0.1195)
+ -- ( 0.3929, 0.1095)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/woods.dtx b/macros/latex/contrib/wargame/source/hex/terrain/woods.dtx
new file mode 100644
index 0000000000..9b0d08499b
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/woods.dtx
@@ -0,0 +1,1011 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/woods}
+% The style for woods. The pattern is filled with a darker green,
+% and outlines are not drawn.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/woods/.style={
+ draw=none,
+ fill={rgb,100:red,27;green,67;blue,27}
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{hex/terrain/woods}
+% Regular woods.
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/woods/.pic={
+ \path[hex/terrain/woods,pic actions,draw=none]
+ (-0.2656, 0.8694)
+ .. controls (-0.3133, 0.8640) and (-0.3608, 0.8400) .. (-0.3541, 0.8219)
+ .. controls (-0.3417, 0.7629) and (-0.2512, 0.7779) .. (-0.2082, 0.7875)
+ -- (-0.2424, 0.6937)
+ .. controls (-0.2916, 0.7000) and (-0.3535, 0.6915) .. (-0.3950, 0.6606)
+ .. controls (-0.4299, 0.6330) and (-0.4373, 0.5909) .. (-0.3950, 0.5657)
+ .. controls (-0.4092, 0.5022) and (-0.3694, 0.4908) .. (-0.3191, 0.4633)
+ .. controls (-0.3291, 0.3852) and (-0.2535, 0.3866) .. (-0.2935, 0.4633)
+ .. controls (-0.2488, 0.4801) and (-0.2488, 0.5071) .. (-0.2778, 0.5156)
+ .. controls (-0.2888, 0.5201) and (-0.3300, 0.5153) .. (-0.3447, 0.5156)
+ -- (-0.3191, 0.6255)
+ -- (-0.2680, 0.6425)
+ -- (-0.2253, 0.5657)
+ .. controls (-0.2136, 0.5780) and (-0.2023, 0.5853) .. (-0.2092, 0.6046)
+ .. controls (-0.2132, 0.6161) and (-0.2403, 0.6366) .. (-0.2260, 0.6502)
+ .. controls (-0.2044, 0.6711) and (-0.1779, 0.6203) .. (-0.1564, 0.6147)
+ .. controls (-0.1363, 0.6094) and (-0.1262, 0.6240) .. (-0.1328, 0.6430)
+ .. controls (-0.1449, 0.6778) and (-0.1661, 0.6737) .. (-0.1741, 0.7278)
+ .. controls (-0.1213, 0.6943) and (-0.1063, 0.7287) .. (-0.1485, 0.7534)
+ -- (-0.1058, 0.7875)
+ -- (-0.0718, 0.7789)
+ -- (-0.0633, 0.8046)
+ .. controls (-0.0937, 0.8085) and (-0.0917, 0.8079) .. (-0.1143, 0.7875)
+ -- (-0.1311, 0.8194)
+ .. controls (-0.0764, 0.8223) and (-0.0450, 0.8485) .. (-0.0671, 0.8554)
+ .. controls (-0.1156, 0.8701) and (-0.1015, 0.8233) .. (-0.1806, 0.8398)
+ .. controls (-0.1900, 0.8580) and (-0.2089, 0.8664) .. (-0.2307, 0.8694)
+ --cycle
+ ( 0.3814, 0.8694)
+ .. controls ( 0.3767, 0.8683) and ( 0.3712, 0.8666) .. ( 0.3632, 0.8643)
+ -- ( 0.3974, 0.8387)
+ .. controls ( 0.3974, 0.8591) and ( 0.3972, 0.8674) .. ( 0.3911, 0.8694)
+ --cycle
+ (-0.2452, 0.8541)
+ .. controls (-0.2324, 0.8571) and (-0.2266, 0.8501) .. (-0.2079, 0.8422)
+ -- (-0.2167, 0.8284)
+ .. controls (-0.2397, 0.8309) and (-0.2848, 0.8202) .. (-0.2983, 0.8284)
+ .. controls (-0.3215, 0.8378) and (-0.2860, 0.8342) .. (-0.2614, 0.8473)
+ .. controls (-0.2547, 0.8509) and (-0.2496, 0.8531) .. (-0.2452, 0.8541)
+ --cycle
+ (-0.4331, 0.8427)
+ .. controls (-0.4534, 0.8538) and (-0.5066, 0.7937) .. (-0.5170, 0.7773)
+ .. controls (-0.5802, 0.6871) and (-0.6279, 0.5503) .. (-0.6704, 0.5650)
+ .. controls (-0.6703, 0.5117) and (-0.7322, 0.4917) .. (-0.7340, 0.4547)
+ .. controls (-0.7365, 0.4053) and (-0.6948, 0.3832) .. (-0.6621, 0.3593)
+ .. controls (-0.6271, 0.3335) and (-0.6254, 0.2860) .. (-0.5409, 0.3014)
+ -- (-0.5409, 0.3184)
+ -- (-0.5750, 0.3099)
+ -- (-0.5836, 0.3524)
+ -- (-0.4898, 0.3184)
+ -- (-0.5068, 0.3696)
+ .. controls (-0.4593, 0.3586) and (-0.4552, 0.3659) .. (-0.4214, 0.3269)
+ .. controls (-0.3754, 0.3528) and (-0.3794, 0.4022) .. (-0.4295, 0.4177)
+ .. controls (-0.4450, 0.4224) and (-0.4931, 0.4354) .. (-0.5068, 0.4333)
+ .. controls (-0.5383, 0.4284) and (-0.6200, 0.3557) .. (-0.6774, 0.4548)
+ -- (-0.6432, 0.4548)
+ -- (-0.6603, 0.4975)
+ .. controls (-0.6019, 0.4851) and (-0.6021, 0.5053) .. (-0.5921, 0.5572)
+ .. controls (-0.4969, 0.5307) and (-0.5431, 0.5224) .. (-0.4812, 0.4890)
+ .. controls (-0.4749, 0.5293) and (-0.4896, 0.5637) .. (-0.5068, 0.5998)
+ .. controls (-0.4948, 0.6064) and (-0.4850, 0.6107) .. (-0.4746, 0.6204)
+ .. controls (-0.4177, 0.6740) and (-0.4877, 0.7151) .. (-0.5154, 0.6423)
+ .. controls (-0.5225, 0.6240) and (-0.5189, 0.6174) .. (-0.5154, 0.5998)
+ -- (-0.5889, 0.6190)
+ .. controls (-0.5889, 0.6190) and (-0.5470, 0.6607) .. (-0.5396, 0.6879)
+ .. controls (-0.5254, 0.7392) and (-0.4740, 0.7624) .. (-0.4378, 0.7960)
+ .. controls (-0.4256, 0.8071) and (-0.3322, 0.7872) .. (-0.4331, 0.8427)
+ --cycle
+ ( 0.1374, 0.8418)
+ .. controls ( 0.1320, 0.8428) and ( 0.1261, 0.8424) .. ( 0.1202, 0.8403)
+ .. controls ( 0.1031, 0.8066) and ( 0.1641, 0.7460) .. ( 0.1812, 0.7545)
+ .. controls ( 0.1999, 0.7639) and ( 0.1758, 0.8354) .. ( 0.1374, 0.8418)
+ --cycle
+ (-0.0462, 0.8217)
+ -- (-0.0462, 0.7789)
+ -- (-0.0121, 0.7961)
+ --cycle
+ ( 0.3717, 0.8217)
+ -- ( 0.3717, 0.8046)
+ -- ( 0.4059, 0.7961)
+ -- ( 0.4144, 0.8217)
+ --cycle
+ ( 0.4898, 0.8122)
+ .. controls ( 0.4741, 0.8124) and ( 0.4748, 0.7893) .. ( 0.4981, 0.7754)
+ .. controls ( 0.5017, 0.7550) and ( 0.5313, 0.6452) .. ( 0.5686, 0.6689)
+ .. controls ( 0.5928, 0.6844) and ( 0.5339, 0.7103) .. ( 0.5653, 0.7412)
+ .. controls ( 0.5710, 0.7471) and ( 0.5728, 0.7507) .. ( 0.5731, 0.7536)
+ -- ( 0.5703, 0.7583)
+ .. controls ( 0.5582, 0.7647) and ( 0.5121, 0.7531) .. ( 0.5343, 0.7796)
+ .. controls ( 0.5145, 0.8036) and ( 0.4992, 0.8122) .. ( 0.4898, 0.8122)
+ --cycle
+ ( 0.3291, 0.7997)
+ .. controls ( 0.3112, 0.7975) and ( 0.2934, 0.7843) .. ( 0.2780, 0.7757)
+ .. controls ( 0.2235, 0.7455) and ( 0.1913, 0.7199) .. ( 0.2438, 0.6595)
+ .. controls ( 0.2287, 0.6542) and ( 0.2176, 0.6521) .. ( 0.2063, 0.6389)
+ .. controls ( 0.1704, 0.5968) and ( 0.2192, 0.5413) .. ( 0.2430, 0.5712)
+ .. controls ( 0.2494, 0.5791) and ( 0.2509, 0.6061) .. ( 0.2523, 0.6170)
+ .. controls ( 0.2545, 0.6376) and ( 0.2547, 0.6388) .. ( 0.2523, 0.6595)
+ -- ( 0.2865, 0.6681)
+ .. controls ( 0.3094, 0.6426) and ( 0.3194, 0.6608) .. ( 0.3291, 0.6852)
+ -- ( 0.2865, 0.6937)
+ .. controls ( 0.3061, 0.7101) and ( 0.3276, 0.7308) .. ( 0.3547, 0.7322)
+ .. controls ( 0.3792, 0.7335) and ( 0.4787, 0.6707) .. ( 0.4596, 0.7446)
+ .. controls ( 0.4487, 0.7866) and ( 0.4132, 0.7751) .. ( 0.3912, 0.7800)
+ .. controls ( 0.3681, 0.7853) and ( 0.3549, 0.8026) .. ( 0.3291, 0.7997)
+ --cycle
+ ( 0.0971, 0.7996)
+ .. controls ( 0.0971, 0.7996) and (-0.0371, 0.7713) .. (-0.0393, 0.7247)
+ .. controls (-0.0408, 0.6927) and ( 0.0217, 0.7175) .. ( 0.0521, 0.7277)
+ .. controls ( 0.0789, 0.7366) and ( 0.0971, 0.7996) .. ( 0.0971, 0.7996)
+ --cycle
+ (-0.1571, 0.7961)
+ -- (-0.1485, 0.7961)
+ -- (-0.1485, 0.7875)
+ -- (-0.1400, 0.7875)
+ -- (-0.1400, 0.7789)
+ -- (-0.1485, 0.7875)
+ --cycle
+ (-0.3689, 0.7733)
+ .. controls (-0.3791, 0.7835) and (-0.4247, 0.7612) .. (-0.4247, 0.7612)
+ .. controls (-0.4247, 0.7612) and (-0.4258, 0.7138) .. (-0.4104, 0.7184)
+ .. controls (-0.3965, 0.7227) and (-0.3586, 0.7631) .. (-0.3689, 0.7733)
+ --cycle
+ ( 0.3462, 0.7278)
+ -- ( 0.3462, 0.6766)
+ -- ( 0.3804, 0.7107)
+ --cycle
+ ( 0.1142, 0.7077)
+ .. controls ( 0.1016, 0.7065) and ( 0.0878, 0.7029) .. ( 0.0733, 0.6974)
+ .. controls ( 0.0595, 0.6920) and ( 0.0449, 0.6883) .. ( 0.0332, 0.6789)
+ .. controls ( 0.0192, 0.6678) and ( 0.0113, 0.6500) .. ( 0.0014, 0.6354)
+ .. controls (-0.0079, 0.6219) and (-0.0221, 0.6074) .. (-0.0243, 0.5905)
+ .. controls (-0.0267, 0.5713) and ( 0.0128, 0.4923) .. ( 0.0326, 0.4877)
+ .. controls ( 0.0455, 0.4824) and ( 0.0530, 0.4866) .. ( 0.0647, 0.4877)
+ .. controls ( 0.0870, 0.4591) and ( 0.0975, 0.4638) .. ( 0.1331, 0.4633)
+ .. controls ( 0.1499, 0.4110) and ( 0.1908, 0.4198) .. ( 0.1671, 0.4890)
+ .. controls ( 0.1267, 0.5142) and ( 0.1094, 0.5105) .. ( 0.0647, 0.4975)
+ .. controls ( 0.0889, 0.5509) and ( 0.0981, 0.5486) .. ( 0.0733, 0.6084)
+ .. controls ( 0.1221, 0.6144) and ( 0.1333, 0.6047) .. ( 0.1415, 0.6510)
+ -- ( 0.1927, 0.6425)
+ .. controls ( 0.1814, 0.6932) and ( 0.1526, 0.7111) .. ( 0.1142, 0.7077)
+ --cycle
+ ( 0.1671, 0.4890)
+ -- ( 0.2182, 0.4890)
+ .. controls ( 0.2474, 0.4580) and ( 0.2982, 0.5061) .. ( 0.2981, 0.5238)
+ .. controls ( 0.2981, 0.5425) and ( 0.2721, 0.5720) .. ( 0.2418, 0.5318)
+ -- ( 0.2182, 0.4975)
+ .. controls ( 0.1923, 0.5152) and ( 0.1850, 0.5158) .. ( 0.1671, 0.4890)
+ --cycle
+ (-0.1058, 0.6937)
+ -- (-0.0973, 0.6595)
+ -- (-0.0802, 0.6595)
+ -- (-0.0718, 0.6937)
+ --cycle
+ ( 0.3889, 0.6852)
+ .. controls ( 0.3954, 0.6469) and ( 0.4108, 0.6416) .. ( 0.4314, 0.6766)
+ --cycle
+ ( 0.4826, 0.6852)
+ -- ( 0.4562, 0.6475)
+ .. controls ( 0.4460, 0.6335) and ( 0.4249, 0.5852) .. ( 0.4639, 0.5976)
+ .. controls ( 0.4953, 0.6076) and ( 0.5058, 0.6583) .. ( 0.4998, 0.6852)
+ --cycle
+ (-0.0879, 0.6326)
+ .. controls (-0.1189, 0.6139) and (-0.0956, 0.5976) .. (-0.0822, 0.6003)
+ .. controls (-0.0699, 0.6027) and (-0.0544, 0.6253) .. (-0.0879, 0.6326)
+ --cycle
+ ( 0.3034, 0.6255)
+ -- ( 0.2694, 0.6170)
+ -- ( 0.2694, 0.5998)
+ -- ( 0.3034, 0.5913)
+ --cycle
+ ( 0.6085, 0.6015)
+ .. controls ( 0.5969, 0.6043) and ( 0.5796, 0.6004) .. ( 0.5688, 0.5964)
+ .. controls ( 0.5189, 0.5780) and ( 0.5216, 0.5317) .. ( 0.5338, 0.4890)
+ .. controls ( 0.5892, 0.5200) and ( 0.5513, 0.5451) .. ( 0.6191, 0.5657)
+ .. controls ( 0.6318, 0.5296) and ( 0.6176, 0.4979) .. ( 0.6703, 0.5572)
+ .. controls ( 0.6580, 0.5662) and ( 0.6196, 0.5989) .. ( 0.6085, 0.6015)
+ --cycle
+ ( 0.6703, 0.5572)
+ .. controls ( 0.6650, 0.4639) and ( 0.7377, 0.4434) .. ( 0.6703, 0.5572)
+ --cycle
+ ( 0.2950, 0.5828)
+ -- ( 0.3034, 0.5487)
+ -- ( 0.3206, 0.5487)
+ -- ( 0.3291, 0.5572)
+ -- ( 0.3291, 0.5743)
+ --cycle
+ (-0.2167, 0.5572)
+ .. controls (-0.2524, 0.4984) and (-0.2378, 0.4949) .. (-0.1997, 0.4463)
+ -- (-0.1656, 0.4548)
+ -- (-0.1656, 0.4719)
+ -- (-0.1997, 0.4804)
+ -- (-0.1997, 0.4719)
+ -- (-0.2082, 0.4804)
+ -- (-0.1997, 0.4804)
+ .. controls (-0.1944, 0.5170) and (-0.1913, 0.5288) .. (-0.2167, 0.5572)
+ --cycle
+ ( 0.4528, 0.5567)
+ .. controls ( 0.4208, 0.5591) and ( 0.3875, 0.5291) .. ( 0.3974, 0.4804)
+ -- ( 0.4998, 0.5146)
+ .. controls ( 0.4909, 0.5422) and ( 0.4721, 0.5552) .. ( 0.4528, 0.5567)
+ --cycle
+ (-0.5836, 0.5401)
+ .. controls (-0.5724, 0.5036) and (-0.5428, 0.4697) .. (-0.5238, 0.5231)
+ --cycle
+ (-0.0890, 0.5163)
+ .. controls (-0.1486, 0.4959) and (-0.1212, 0.4523) .. (-0.0806, 0.4615)
+ .. controls (-0.0429, 0.4702) and (-0.0388, 0.5108) .. (-0.0890, 0.5163)
+ --cycle
+ ( 0.3494, 0.5160)
+ .. controls ( 0.3442, 0.5162) and ( 0.3376, 0.5157) .. ( 0.3291, 0.5146)
+ -- ( 0.3632, 0.4804)
+ .. controls ( 0.3666, 0.5059) and ( 0.3648, 0.5149) .. ( 0.3494, 0.5160)
+ --cycle
+ ( 0.6832, 0.4635)
+ .. controls ( 0.6577, 0.4592) and ( 0.6354, 0.4224) .. ( 0.6277, 0.3866)
+ -- ( 0.6618, 0.3781)
+ .. controls ( 0.6758, 0.4215) and ( 0.6897, 0.4164) .. ( 0.7299, 0.4293)
+ .. controls ( 0.7150, 0.4573) and ( 0.6984, 0.4662) .. ( 0.6832, 0.4635)
+ --cycle
+ ( 0.3846, 0.4569)
+ .. controls ( 0.3643, 0.4547) and ( 0.3427, 0.4484) .. ( 0.3206, 0.4379)
+ .. controls ( 0.2993, 0.4278) and ( 0.2743, 0.4198) .. ( 0.2665, 0.3948)
+ .. controls ( 0.2602, 0.3747) and ( 0.2710, 0.3497) .. ( 0.2940, 0.3491)
+ .. controls ( 0.3208, 0.3484) and ( 0.3628, 0.4037) .. ( 0.4059, 0.3999)
+ .. controls ( 0.4648, 0.3948) and ( 0.4817, 0.3238) .. ( 0.5508, 0.3184)
+ -- ( 0.5594, 0.2842)
+ .. controls ( 0.6325, 0.3301) and ( 0.6184, 0.4000) .. ( 0.5253, 0.3610)
+ .. controls ( 0.4966, 0.4310) and ( 0.4457, 0.4630) .. ( 0.3846, 0.4569)
+ --cycle
+ ( 0.0020, 0.4093)
+ .. controls (-0.0096, 0.4099) and (-0.0218, 0.4039) .. (-0.0547, 0.3920)
+ .. controls (-0.0742, 0.3851) and (-0.1009, 0.3815) .. (-0.1085, 0.3591)
+ .. controls (-0.1143, 0.3413) and (-0.1036, 0.3179) .. (-0.0973, 0.3014)
+ .. controls (-0.1114, 0.2946) and (-0.1334, 0.2825) .. (-0.1485, 0.2820)
+ .. controls (-0.1767, 0.2809) and (-0.1949, 0.3055) .. (-0.2182, 0.3110)
+ .. controls (-0.2417, 0.3165) and (-0.3307, 0.2833) .. (-0.3437, 0.2635)
+ .. controls (-0.3530, 0.2471) and (-0.3474, 0.2253) .. (-0.3437, 0.2075)
+ .. controls (-0.4324, 0.1756) and (-0.3706, 0.0831) .. (-0.2765, 0.0710)
+ .. controls (-0.2795, 0.0550) and (-0.2801, 0.0364) .. (-0.2860, 0.0213)
+ .. controls (-0.2997,-0.0142) and (-0.3382,-0.0416) .. (-0.2680,-0.0825)
+ -- (-0.2424, 0.0027)
+ -- (-0.1997,-0.0143)
+ .. controls (-0.1918, 0.0295) and (-0.2082, 0.0371) .. (-0.1741, 0.0710)
+ .. controls (-0.1600, 0.0270) and (-0.1316, 0.0212) .. (-0.1230, 0.0710)
+ -- (-0.0547, 0.0710)
+ -- (-0.0547, 0.0198)
+ .. controls (-0.0089, 0.0346) and (-0.0127, 0.0528) .. (-0.0121, 0.0966)
+ .. controls ( 0.0434, 0.0981) and ( 0.0809, 0.1179) .. ( 0.0988, 0.1733)
+ -- ( 0.0561, 0.1477)
+ -- ( 0.0647, 0.1477)
+ -- ( 0.0647, 0.1392)
+ -- ( 0.0561, 0.1477)
+ -- (-0.0333, 0.1681)
+ -- (-0.0973, 0.1990)
+ .. controls (-0.1035, 0.1519) and (-0.0915, 0.1406) .. (-0.0462, 0.1307)
+ -- (-0.0547, 0.1051)
+ .. controls (-0.0809, 0.1134) and (-0.1575, 0.1376) .. (-0.1816, 0.1275)
+ .. controls (-0.1979, 0.1207) and (-0.2008, 0.1105) .. (-0.2082, 0.0966)
+ -- (-0.2765, 0.0796)
+ .. controls (-0.2913, 0.1042) and (-0.2904, 0.1037) .. (-0.3191, 0.1051)
+ -- (-0.3277, 0.1307)
+ -- (-0.3020, 0.1392)
+ -- (-0.3191, 0.1733)
+ -- (-0.2680, 0.2416)
+ .. controls (-0.2555, 0.2025) and (-0.2434, 0.1999) .. (-0.2082, 0.1819)
+ .. controls (-0.2103, 0.2198) and (-0.2204, 0.2217) .. (-0.2509, 0.2416)
+ -- (-0.1571, 0.2416)
+ -- (-0.0973, 0.1990)
+ .. controls (-0.0622, 0.2159) and (-0.0506, 0.2107) .. (-0.0376, 0.2501)
+ -- (-0.0718, 0.2672)
+ -- (-0.0121, 0.2842)
+ -- (-0.0121, 0.3014)
+ -- (-0.0462, 0.3184)
+ -- ( 0.0221, 0.3439)
+ .. controls ( 0.0070, 0.2950) and ( 0.0355, 0.2771) .. ( 0.0818, 0.2757)
+ -- ( 0.0561, 0.3354)
+ .. controls ( 0.1139, 0.3092) and ( 0.1160, 0.3517) .. ( 0.0949, 0.3683)
+ -- ( 0.0561, 0.3859)
+ .. controls ( 0.0248, 0.4010) and ( 0.0136, 0.4085) .. ( 0.0020, 0.4093)
+ --cycle
+ (-0.2680,-0.0825)
+ .. controls (-0.2752,-0.1245) and (-0.2656,-0.1332) .. (-0.2253,-0.1423)
+ .. controls (-0.2780,-0.1694) and (-0.3487,-0.1517) .. (-0.3277,-0.2360)
+ -- (-0.3958,-0.2275)
+ .. controls (-0.3850,-0.1662) and (-0.4133,-0.1372) .. (-0.4727,-0.1337)
+ -- (-0.4727,-0.0910)
+ .. controls (-0.5590,-0.0763) and (-0.5042,-0.0134) .. (-0.5750,-0.0228)
+ .. controls (-0.5589,-0.0849) and (-0.5477,-0.0819) .. (-0.5750,-0.1423)
+ .. controls (-0.6476,-0.1314) and (-0.6815,-0.1792) .. (-0.6262,-0.2360)
+ .. controls (-0.6614,-0.2507) and (-0.6863,-0.2704) .. (-0.6674,-0.3120)
+ .. controls (-0.6596,-0.3292) and (-0.6399,-0.3442) .. (-0.6461,-0.3629)
+ .. controls (-0.6528,-0.3836) and (-0.7224,-0.4151) .. (-0.6960,-0.4711)
+ .. controls (-0.6692,-0.5273) and (-0.5938,-0.5008) .. (-0.6603,-0.4579)
+ -- (-0.6262,-0.4237)
+ -- (-0.5921,-0.4579)
+ .. controls (-0.5645,-0.3552) and (-0.5902,-0.3724) .. (-0.6177,-0.2872)
+ -- (-0.5750,-0.2531)
+ -- (-0.6177,-0.2446)
+ -- (-0.6006,-0.2190)
+ .. controls (-0.5707,-0.2398) and (-0.5626,-0.2347) .. (-0.5494,-0.2019)
+ -- (-0.5836,-0.1848)
+ -- (-0.5153,-0.1592)
+ .. controls (-0.5297,-0.1903) and (-0.5326,-0.1983) .. (-0.4983,-0.2105)
+ -- (-0.4983,-0.1763)
+ .. controls (-0.4268,-0.1951) and (-0.4189,-0.2337) .. (-0.3789,-0.2872)
+ .. controls (-0.4036,-0.3020) and (-0.4028,-0.3012) .. (-0.4044,-0.3299)
+ -- (-0.3362,-0.3299)
+ .. controls (-0.3465,-0.3786) and (-0.3284,-0.3796) .. (-0.2850,-0.3811)
+ -- (-0.2850,-0.4151)
+ .. controls (-0.2401,-0.4035) and (-0.1731,-0.3767) .. (-0.1571,-0.3299)
+ .. controls (-0.1233,-0.3324) and (-0.1022,-0.3221) .. (-0.1230,-0.2872)
+ -- (-0.1143,-0.2360)
+ -- (-0.1741,-0.2531)
+ -- (-0.1741,-0.2701)
+ -- (-0.1485,-0.2787)
+ -- (-0.1571,-0.3214)
+ -- (-0.2765,-0.3640)
+ .. controls (-0.2785,-0.3286) and (-0.2853,-0.3271) .. (-0.3191,-0.3214)
+ -- (-0.3191,-0.3299)
+ -- (-0.3277,-0.3214)
+ -- (-0.3191,-0.3214)
+ .. controls (-0.3191,-0.3214) and (-0.2922,-0.3221) .. (-0.2850,-0.3128)
+ .. controls (-0.2781,-0.3038) and (-0.2850,-0.2787) .. (-0.2850,-0.2787)
+ .. controls (-0.2850,-0.2462) and (-0.2522,-0.2669) .. (-0.2424,-0.2360)
+ -- (-0.2935,-0.2360)
+ -- (-0.2509,-0.2019)
+ -- (-0.2424,-0.2360)
+ .. controls (-0.1852,-0.2624) and (-0.2046,-0.2259) .. (-0.1740,-0.2170)
+ .. controls (-0.1599,-0.2119) and (-0.1427,-0.2266) .. (-0.1281,-0.2170)
+ .. controls (-0.1166,-0.2109) and (-0.1070,-0.1747) .. (-0.1656,-0.1848)
+ -- (-0.2082,-0.0228)
+ -- (-0.2253,-0.0228)
+ .. controls (-0.2307,-0.0463) and (-0.2347,-0.0485) .. (-0.2167,-0.0654)
+ -- (-0.2253,-0.0910)
+ --cycle
+ ( 0.7385, 0.3781)
+ .. controls ( 0.7464, 0.3334) and ( 0.7712, 0.3235) .. ( 0.7897, 0.3696)
+ --cycle
+ ( 0.3825, 0.3684)
+ .. controls ( 0.3722, 0.3709) and ( 0.3598, 0.3638) .. ( 0.3547, 0.3341)
+ -- ( 0.3712, 0.3341)
+ .. controls ( 0.4107, 0.3328) and ( 0.3998, 0.3641) .. ( 0.3825, 0.3684)
+ --cycle
+ ( 0.3547, 0.3341)
+ -- ( 0.3034, 0.3280)
+ .. controls ( 0.2587, 0.3223) and ( 0.2449, 0.3331) .. ( 0.2267, 0.2842)
+ -- ( 0.1515, 0.2970)
+ .. controls ( 0.1395, 0.3001) and ( 0.1217, 0.3113) .. ( 0.1096, 0.3062)
+ .. controls ( 0.0947, 0.3000) and ( 0.0955, 0.2804) .. ( 0.0944, 0.2671)
+ .. controls ( 0.0897, 0.2118) and ( 0.0889, 0.2059) .. ( 0.1158, 0.1563)
+ -- ( 0.1331, 0.1563)
+ -- ( 0.1415, 0.1648)
+ -- ( 0.1415, 0.2501)
+ -- ( 0.2449, 0.2446)
+ .. controls ( 0.2870, 0.2248) and ( 0.2549, 0.1801) .. ( 0.3376, 0.1733)
+ -- ( 0.3376, 0.2245)
+ -- ( 0.3889, 0.2075)
+ .. controls ( 0.3692, 0.2680) and ( 0.3319, 0.2493) .. ( 0.3034, 0.2928)
+ .. controls ( 0.3440, 0.2858) and ( 0.3561, 0.2934) .. ( 0.3547, 0.3341)
+ --cycle
+ ( 0.4285, 0.3341)
+ .. controls ( 0.4111, 0.3048) and ( 0.4418, 0.2997) .. ( 0.4508, 0.3082)
+ .. controls ( 0.4603, 0.3170) and ( 0.4582, 0.3376) .. ( 0.4285, 0.3341)
+ --cycle
+ ( 0.7199, 0.3309)
+ .. controls ( 0.7120, 0.3311) and ( 0.7041, 0.3301) .. ( 0.6963, 0.3276)
+ .. controls ( 0.6516, 0.3141) and ( 0.5998, 0.2127) .. ( 0.6788, 0.2075)
+ -- ( 0.6874, 0.1819)
+ .. controls ( 0.6908, 0.1882) and ( 0.6948, 0.1871) .. ( 0.6958, 0.2009)
+ .. controls ( 0.6967, 0.2152) and ( 0.6850, 0.2341) .. ( 0.6875, 0.2482)
+ .. controls ( 0.6912, 0.2697) and ( 0.7185, 0.2790) .. ( 0.7404, 0.2558)
+ -- ( 0.7556, 0.2330)
+ .. controls ( 0.8209, 0.2699) and ( 0.7743, 0.3292) .. ( 0.7199, 0.3309)
+ --cycle
+ (-0.4641, 0.3269)
+ -- (-0.4556, 0.2928)
+ -- (-0.4386, 0.2928)
+ -- (-0.4300, 0.3269)
+ --cycle
+ (-0.3532, 0.3269)
+ .. controls (-0.3838, 0.3252) and (-0.3857, 0.3233) .. (-0.3874, 0.2928)
+ .. controls (-0.3613, 0.3019) and (-0.3623, 0.3007) .. (-0.3532, 0.3269)
+ --cycle
+ (-0.7723, 0.3114)
+ .. controls (-0.9303, 0.2491) and (-0.8236, 0.1766) .. (-0.9066, 0.1318)
+ .. controls (-0.9222, 0.1231) and (-0.9315, 0.1156) .. (-0.9385, 0.1084)
+ -- (-0.9505, 0.0875)
+ .. controls (-0.9537, 0.0757) and (-0.9542, 0.0621) .. (-0.9542, 0.0410)
+ -- (-0.9333, 0.0454)
+ .. controls (-0.9116, 0.1020) and (-0.8383, 0.0970) .. (-0.8943, 0.1349)
+ .. controls (-0.8577, 0.1472) and (-0.8473, 0.1249) .. (-0.8748, 0.1652)
+ -- (-0.8414, 0.1559)
+ .. controls (-0.8055, 0.1614) and (-0.8119, 0.2075) .. (-0.8279, 0.2170)
+ .. controls (-0.8020, 0.2197) and (-0.8300, 0.2698) .. (-0.8062, 0.2572)
+ .. controls (-0.7862, 0.2467) and (-0.7713, 0.2258) .. (-0.7547, 0.2261)
+ .. controls (-0.7211, 0.2267) and (-0.7384, 0.2895) .. (-0.7723, 0.3114)
+ --cycle
+ ( 0.5167, 0.2928)
+ -- ( 0.5083, 0.2842)
+ -- ( 0.5083, 0.2672)
+ -- ( 0.5167, 0.2587)
+ -- ( 0.5338, 0.2587)
+ -- ( 0.5423, 0.2672)
+ -- ( 0.5423, 0.2842)
+ -- ( 0.5338, 0.2928)
+ --cycle
+ ( 0.8233, 0.2914)
+ .. controls ( 0.8159, 0.2897) and ( 0.8101, 0.2823) .. ( 0.8101, 0.2664)
+ .. controls ( 0.8101, 0.2592) and ( 0.7901, 0.2245) .. ( 0.7943, 0.2184)
+ .. controls ( 0.8010, 0.2085) and ( 0.8177, 0.1916) .. ( 0.8341, 0.1843)
+ -- ( 0.7897, 0.1051)
+ .. controls ( 0.7638, 0.1109) and ( 0.6977, 0.1143) .. ( 0.6790, 0.0913)
+ .. controls ( 0.6678, 0.0772) and ( 0.6727, 0.0528) .. ( 0.6644, 0.0283)
+ .. controls ( 0.6511,-0.0104) and ( 0.6263,-0.0275) .. ( 0.5936,-0.0484)
+ .. controls ( 0.5977,-0.0521) and ( 0.6009,-0.0593) .. ( 0.6125,-0.0633)
+ .. controls ( 0.6432,-0.0738) and ( 0.6954,-0.0310) .. ( 0.7067,-0.0043)
+ .. controls ( 0.7123, 0.0088) and ( 0.7121, 0.0229) .. ( 0.7130, 0.0368)
+ .. controls ( 0.7585, 0.0333) and ( 0.7707, 0.0484) .. ( 0.7897, 0.0881)
+ -- ( 0.8409, 0.0027)
+ .. controls ( 0.7828,-0.0157) and ( 0.7583,-0.0941) .. ( 0.8409,-0.1337)
+ .. controls ( 0.8561,-0.0647) and ( 0.8176,-0.0742) .. ( 0.8836,-0.0143)
+ -- ( 0.9348,-0.0654)
+ .. controls ( 0.9443,-0.0311) and ( 0.9398,-0.0319) .. ( 0.9430,-0.0008)
+ .. controls ( 0.9475, 0.0433) and ( 0.9603, 0.0556) .. ( 0.8921, 0.0796)
+ -- ( 0.8836, 0.0710)
+ -- ( 0.8836, 0.0540)
+ -- ( 0.9006, 0.0198)
+ .. controls ( 0.8705, 0.0555) and ( 0.8589, 0.0671) .. ( 0.8494, 0.1137)
+ -- ( 0.8921, 0.0881)
+ .. controls ( 0.9100, 0.1275) and ( 0.9093, 0.1211) .. ( 0.9077, 0.1641)
+ .. controls ( 0.8502, 0.2199) and ( 0.8502, 0.2055) .. ( 0.8245, 0.2294)
+ .. controls ( 0.8511, 0.2387) and ( 0.8571, 0.2533) .. ( 0.8546, 0.2660)
+ -- ( 0.8445, 0.2834)
+ .. controls ( 0.8380, 0.2892) and ( 0.8301, 0.2928) .. ( 0.8233, 0.2914)
+ --cycle
+ (-0.6221, 0.2851)
+ .. controls (-0.6403, 0.2814) and (-0.6578, 0.2533) .. (-0.6578, 0.2330)
+ .. controls (-0.6578, 0.2083) and (-0.6228, 0.1685) .. (-0.6090, 0.1392)
+ .. controls (-0.6712, 0.1174) and (-0.6013, 0.0486) .. (-0.5914, 0.0454)
+ .. controls (-0.5625, 0.0361) and (-0.5594, 0.0690) .. (-0.5384, 0.0751)
+ .. controls (-0.5161, 0.0820) and (-0.5142, 0.0619) .. (-0.4641, 0.0796)
+ .. controls (-0.4838, 0.1372) and (-0.5135, 0.1504) .. (-0.5665, 0.1733)
+ -- (-0.5323, 0.2075)
+ -- (-0.5665, 0.2160)
+ -- (-0.5665, 0.1819)
+ -- (-0.5921, 0.2245)
+ -- (-0.6006, 0.2330)
+ -- (-0.6090, 0.2416)
+ -- (-0.6006, 0.2416)
+ -- (-0.6006, 0.2330)
+ -- (-0.5921, 0.2330)
+ -- (-0.5921, 0.2245)
+ .. controls (-0.5591, 0.2361) and (-0.5513, 0.2585) .. (-0.5921, 0.2587)
+ .. controls (-0.5999, 0.2809) and (-0.6112, 0.2874) .. (-0.6221, 0.2851)
+ --cycle
+ (-0.4001, 0.2659)
+ -- (-0.4398, 0.2231)
+ -- (-0.4713, 0.1989)
+ .. controls (-0.5030, 0.1708) and (-0.4873, 0.1496) .. (-0.4486, 0.1607)
+ .. controls (-0.4215, 0.1683) and (-0.3832, 0.1951) .. (-0.3704, 0.2199)
+ .. controls (-0.3565, 0.2464) and (-0.3702, 0.2690) .. (-0.4001, 0.2659)
+ --cycle
+ ( 0.5167, 0.2501)
+ .. controls ( 0.4726, 0.2275) and ( 0.4751, 0.2109) .. ( 0.4771, 0.1648)
+ .. controls ( 0.4776, 0.1495) and ( 0.4771, 0.1247) .. ( 0.4946, 0.1178)
+ .. controls ( 0.5149, 0.1096) and ( 0.5288, 0.1359) .. ( 0.5681, 0.1435)
+ .. controls ( 0.6164, 0.1530) and ( 0.6391, 0.1274) .. ( 0.6568, 0.1214)
+ .. controls ( 0.6669, 0.1180) and ( 0.6795, 0.1163) .. ( 0.6862, 0.1272)
+ .. controls ( 0.7003, 0.1512) and ( 0.6673, 0.1556) .. ( 0.6532, 0.1563)
+ .. controls ( 0.6261, 0.2314) and ( 0.5966, 0.1859) .. ( 0.5605, 0.1960)
+ .. controls ( 0.5390, 0.2022) and ( 0.5268, 0.2319) .. ( 0.5167, 0.2501)
+ --cycle
+ (-0.0462, 0.2075)
+ -- (-0.0462, 0.1819)
+ -- (-0.0206, 0.1819)
+ -- (-0.0206, 0.2075)
+ --cycle
+ (-0.7371, 0.1990)
+ -- (-0.7371, 0.1563)
+ -- (-0.7115, 0.1905)
+ -- (-0.7200, 0.1990)
+ --cycle
+ (-0.1656, 0.1905)
+ -- (-0.1400, 0.1648)
+ --cycle
+ (-0.7797, 0.1819)
+ -- (-0.7883, 0.1733)
+ -- (-0.7883, 0.1563)
+ -- (-0.7542, 0.1477)
+ -- (-0.7627, 0.1819)
+ --cycle
+ ( 0.1671, 0.1819)
+ -- ( 0.1841, 0.1477)
+ --cycle
+ ( 0.6447, 0.1477)
+ -- ( 0.6532, 0.1477)
+ -- ( 0.6532, 0.1392)
+ --cycle
+ (-0.7081, 0.1437)
+ .. controls (-0.7387, 0.1429) and (-0.7462, 0.1254) .. (-0.7593, 0.0844)
+ .. controls (-0.7628, 0.0670) and (-0.7720, 0.0499) .. (-0.7593, 0.0321)
+ .. controls (-0.7496, 0.0145) and (-0.7241, 0.0137) .. (-0.7173, 0.0321)
+ .. controls (-0.7114, 0.0479) and (-0.7222, 0.0657) .. (-0.7285, 0.0796)
+ .. controls (-0.6938, 0.0968) and (-0.6811, 0.1011) .. (-0.6688, 0.1392)
+ .. controls (-0.6852, 0.1425) and (-0.6979, 0.1439) .. (-0.7081, 0.1437)
+ --cycle
+ ( 0.8921, 0.1392)
+ -- ( 0.9006, 0.1392)
+ -- ( 0.9006, 0.1307)
+ --cycle
+ ( 0.5765, 0.1222)
+ -- ( 0.5850, 0.0881)
+ -- ( 0.6021, 0.0881)
+ -- ( 0.6106, 0.1222)
+ --cycle
+ ( 0.2872, 0.1175)
+ .. controls ( 0.2767, 0.1166) and ( 0.2651, 0.1135) .. ( 0.2533, 0.1071)
+ .. controls ( 0.2151, 0.0867) and ( 0.2220, 0.0479) .. ( 0.2267, 0.0113)
+ .. controls ( 0.2625, 0.0237) and ( 0.2504, 0.0254) .. ( 0.2701, 0.0519)
+ .. controls ( 0.2958, 0.0863) and ( 0.3249, 0.0559) .. ( 0.3338, 0.0822)
+ .. controls ( 0.3402, 0.1009) and ( 0.3185, 0.1198) .. ( 0.2872, 0.1175)
+ --cycle
+ ( 0.4845, 0.1051)
+ .. controls ( 0.4706, 0.1009) and ( 0.4616, 0.0995) .. ( 0.4512, 0.0905)
+ .. controls ( 0.4040, 0.0493) and ( 0.4796,-0.0172) .. ( 0.4845, 0.0710)
+ .. controls ( 0.4877, 0.0867) and ( 0.4856, 0.0907) .. ( 0.4845, 0.1051)
+ --cycle
+ ( 0.6362, 0.1051)
+ -- ( 0.6277, 0.0966)
+ -- ( 0.6277, 0.0796)
+ -- ( 0.6618, 0.0710)
+ -- ( 0.6532, 0.1051)
+ --cycle
+ ( 0.0988, 0.0966)
+ -- ( 0.0647, 0.0881)
+ -- ( 0.0647, 0.0710)
+ -- ( 0.0902, 0.0625)
+ .. controls ( 0.0813, 0.0194) and ( 0.0842, 0.0065) .. ( 0.1244,-0.0143)
+ -- ( 0.1331, 0.0283)
+ -- ( 0.1671, 0.0368)
+ -- ( 0.1671, 0.0540)
+ .. controls ( 0.1326, 0.0659) and ( 0.1186, 0.0637) .. ( 0.0988, 0.0966)
+ --cycle
+ (-0.8125, 0.0621)
+ .. controls (-0.8490, 0.0401) and (-0.8237, 0.0162) .. (-0.8062, 0.0190)
+ .. controls (-0.7883, 0.0219) and (-0.7704, 0.0544) .. (-0.8125, 0.0621)
+ --cycle
+ ( 0.5167, 0.0540)
+ -- ( 0.5083, 0.0198)
+ -- ( 0.5423, 0.0283)
+ -- ( 0.5423, 0.0454)
+ -- ( 0.5338, 0.0540)
+ --cycle
+ (-0.0973, 0.0454)
+ -- (-0.1058, 0.0368)
+ -- (-0.1058, 0.0198)
+ -- (-0.0718, 0.0113)
+ -- (-0.0802, 0.0454)
+ --cycle
+ (-0.0035, 0.0368)
+ -- (-0.0210, 0.0109)
+ .. controls (-0.0655,-0.0708) and ( 0.0385,-0.0566) .. ( 0.0166, 0.0109)
+ .. controls ( 0.0120, 0.0245) and ( 0.0056, 0.0275) .. (-0.0035, 0.0368)
+ --cycle
+ (-0.4977, 0.0207)
+ .. controls (-0.5147, 0.0204) and (-0.5312, 0.0080) .. (-0.5211,-0.0096)
+ .. controls (-0.5118,-0.0261) and (-0.4926,-0.0166) .. (-0.4645,-0.0487)
+ .. controls (-0.4440,-0.0720) and (-0.4524,-0.0706) .. (-0.4214,-0.0825)
+ .. controls (-0.4050,-0.0235) and (-0.4308, 0.0217) .. (-0.4977, 0.0207)
+ --cycle
+ ( 0.3756, 0.0075)
+ .. controls ( 0.3646, 0.0069) and ( 0.3522, 0.0045) .. ( 0.3376, 0.0002)
+ .. controls ( 0.3227,-0.0042) and ( 0.3054,-0.0075) .. ( 0.2946,-0.0193)
+ -- ( 0.2742,-0.0568)
+ .. controls ( 0.2649,-0.0745) and ( 0.2554,-0.0861) .. ( 0.2571,-0.1073)
+ .. controls ( 0.2601,-0.1471) and ( 0.2967,-0.2295) .. ( 0.3408,-0.1666)
+ .. controls ( 0.3653,-0.1317) and ( 0.3284,-0.1299) .. ( 0.3717,-0.0654)
+ .. controls ( 0.4033,-0.0789) and ( 0.4049,-0.0788) .. ( 0.4314,-0.0568)
+ .. controls ( 0.4664,-0.1165) and ( 0.5153,-0.0409) .. ( 0.5152,-0.0308)
+ .. controls ( 0.5148,-0.0111) and ( 0.4690, 0.0277) .. ( 0.4571,-0.0399)
+ .. controls ( 0.4280,-0.0054) and ( 0.4082, 0.0095) .. ( 0.3756, 0.0075)
+ --cycle
+ (-0.9801, 0.0047)
+ -- (-0.9427,-0.0792)
+ -- (-0.8931,-0.0669)
+ -- (-0.8538,-0.0818)
+ .. controls (-0.8464,-0.0219) and (-0.9339,-0.0180) .. (-0.9801, 0.0047)
+ --cycle
+ ( 0.5423,-0.0484)
+ -- ( 0.5594,-0.0997)
+ .. controls ( 0.5416,-0.1040) and ( 0.4986,-0.1096) .. ( 0.4864,-0.1181)
+ .. controls ( 0.4658,-0.1324) and ( 0.4601,-0.1677) .. ( 0.4793,-0.1854)
+ .. controls ( 0.4883,-0.1938) and ( 0.5053,-0.1981) .. ( 0.5167,-0.2019)
+ .. controls ( 0.4933,-0.2045) and ( 0.4609,-0.2005) .. ( 0.4427,-0.2156)
+ .. controls ( 0.4166,-0.2372) and ( 0.4089,-0.2872) .. ( 0.4826,-0.2957)
+ -- ( 0.4826,-0.2446)
+ .. controls ( 0.5217,-0.2597) and ( 0.5287,-0.2486) .. ( 0.5167,-0.2105)
+ .. controls ( 0.5424,-0.2023) and ( 0.5512,-0.1934) .. ( 0.5594,-0.1677)
+ -- ( 0.6191,-0.1848)
+ -- ( 0.6788,-0.3042)
+ -- ( 0.6532,-0.3128)
+ -- ( 0.6532,-0.3299)
+ -- ( 0.7385,-0.3214)
+ -- ( 0.7130,-0.2617)
+ .. controls ( 0.7337,-0.2558) and ( 0.7608,-0.2439) .. ( 0.7812,-0.2454)
+ .. controls ( 0.7973,-0.2453) and ( 0.8226,-0.2581) .. ( 0.8346,-0.2454)
+ .. controls ( 0.8523,-0.2285) and ( 0.8216,-0.2043) .. ( 0.8067,-0.1989)
+ .. controls ( 0.7691,-0.1854) and ( 0.7439,-0.2093) .. ( 0.6805,-0.1933)
+ -- ( 0.6805,-0.1448)
+ -- ( 0.6017,-0.0907)
+ -- ( 0.5680,-0.0907)
+ -- ( 0.5765,-0.0484)
+ --cycle
+ (-0.7372,-0.0610)
+ .. controls (-0.7812,-0.0612) and (-0.8222,-0.0885) .. (-0.7969,-0.1508)
+ -- (-0.8546,-0.1518)
+ .. controls (-0.8578,-0.0809) and (-0.9199,-0.0961) .. (-0.9322,-0.1220)
+ -- (-0.9145,-0.1528)
+ .. controls (-0.9119,-0.1539) and (-0.9110,-0.1554) .. (-0.9080,-0.1566)
+ .. controls (-0.8746,-0.1628) and (-0.8911,-0.2081) .. (-0.8709,-0.2184)
+ .. controls (-0.8479,-0.2301) and (-0.8289,-0.2160) .. (-0.8075,-0.2238)
+ .. controls (-0.7880,-0.2309) and (-0.7418,-0.2959) .. (-0.7285,-0.2190)
+ -- (-0.7712,-0.2105)
+ .. controls (-0.7608,-0.1935) and (-0.7474,-0.1633) .. (-0.7309,-0.1535)
+ .. controls (-0.7132,-0.1433) and (-0.6647,-0.1458) .. (-0.6532,-0.1225)
+ .. controls (-0.6410,-0.0974) and (-0.6763,-0.0776) .. (-0.6945,-0.0697)
+ .. controls (-0.7075,-0.0641) and (-0.7225,-0.0610) .. (-0.7372,-0.0610)
+ --cycle
+ ( 0.0790,-0.0703)
+ .. controls ( 0.0586,-0.0724) and ( 0.0391,-0.0799) .. ( 0.0314,-0.0938)
+ .. controls ( 0.0258,-0.1059) and ( 0.0293,-0.1207) .. ( 0.0314,-0.1337)
+ .. controls (-0.0051,-0.1451) and (-0.0235,-0.1672) .. ( 0.0136,-0.1933)
+ -- ( 0.0050,-0.2190)
+ -- ( 0.0647,-0.2360)
+ -- ( 0.0561,-0.2019)
+ -- ( 0.0391,-0.2105)
+ -- ( 0.0307,-0.2019)
+ -- ( 0.0818,-0.1251)
+ -- ( 0.0988,-0.1251)
+ .. controls ( 0.1190,-0.1566) and ( 0.1311,-0.1660) .. ( 0.1671,-0.1763)
+ .. controls ( 0.1712,-0.1381) and ( 0.1680,-0.1029) .. ( 0.1325,-0.0792)
+ .. controls ( 0.1208,-0.0715) and ( 0.0994,-0.0682) .. ( 0.0790,-0.0703)
+ --cycle
+ (-0.0347,-0.0729)
+ .. controls (-0.0400,-0.0723) and (-0.0465,-0.0725) .. (-0.0547,-0.0739)
+ .. controls (-0.1154,-0.1097) and (-0.0914,-0.1419) .. (-0.0629,-0.1331)
+ .. controls (-0.0318,-0.1235) and ( 0.0014,-0.0769) .. (-0.0347,-0.0729)
+ --cycle
+ (-0.1485,-0.0997)
+ -- (-0.1656,-0.1166)
+ -- (-0.1656,-0.1251)
+ .. controls (-0.1656,-0.1251) and (-0.1284,-0.1383) .. (-0.1230,-0.1251)
+ .. controls (-0.1184,-0.1140) and (-0.1485,-0.0997) .. (-0.1485,-0.0997)
+ --cycle
+ ( 0.8579,-0.1251)
+ -- ( 0.8579,-0.1508)
+ -- ( 0.8921,-0.1508)
+ -- ( 0.8921,-0.1251)
+ --cycle
+ ( 0.3462,-0.1848)
+ .. controls ( 0.3553,-0.2111) and ( 0.3541,-0.2099) .. ( 0.3804,-0.2190)
+ .. controls ( 0.3789,-0.1929) and ( 0.3722,-0.1863) .. ( 0.3462,-0.1848)
+ --cycle
+ ( 0.5680,-0.2105)
+ -- ( 0.5680,-0.2360)
+ -- ( 0.5936,-0.2360)
+ -- ( 0.5936,-0.2105)
+ --cycle
+ ( 0.2429,-0.2175)
+ .. controls ( 0.2301,-0.2183) and ( 0.2146,-0.2250) .. ( 0.2042,-0.2351)
+ .. controls ( 0.1851,-0.2515) and ( 0.1867,-0.2802) .. ( 0.1841,-0.3042)
+ -- ( 0.2267,-0.3128)
+ .. controls ( 0.2366,-0.2535) and ( 0.2673,-0.2625) .. ( 0.2665,-0.2351)
+ .. controls ( 0.2661,-0.2218) and ( 0.2558,-0.2167) .. ( 0.2429,-0.2175)
+ --cycle
+ (-0.8394,-0.2360)
+ .. controls (-0.8657,-0.2452) and (-0.8037,-0.2814) .. (-0.8128,-0.3076)
+ .. controls (-0.7841,-0.3060) and (-0.8155,-0.2595) .. (-0.8394,-0.2360)
+ --cycle
+ (-0.3106,-0.2446)
+ .. controls (-0.3061,-0.2411) and (-0.2935,-0.2446) .. (-0.2935,-0.2446)
+ .. controls (-0.2935,-0.2446) and (-0.3063,-0.2847) .. (-0.3191,-0.2787)
+ .. controls (-0.3297,-0.2736) and (-0.3199,-0.2518) .. (-0.3106,-0.2446)
+ --cycle
+ ( 0.0809,-0.2495)
+ .. controls ( 0.0629,-0.2468) and ( 0.0475,-0.2563) .. ( 0.0307,-0.2602)
+ .. controls ( 0.0102,-0.2651) and (-0.0913,-0.2616) .. (-0.0376,-0.3640)
+ .. controls (-0.1141,-0.3685) and (-0.1262,-0.4016) .. (-0.0926,-0.4664)
+ .. controls (-0.0856,-0.4795) and (-0.0758,-0.5040) .. (-0.0668,-0.5138)
+ .. controls (-0.0449,-0.5377) and ( 0.0001,-0.5440) .. ( 0.0307,-0.5431)
+ -- ( 0.0221,-0.4579)
+ -- (-0.0206,-0.4833)
+ .. controls (-0.0180,-0.4388) and (-0.0055,-0.4140) .. (-0.0633,-0.4237)
+ .. controls (-0.0215,-0.3935) and (-0.0083,-0.4022) .. ( 0.0050,-0.3640)
+ -- ( 0.0476,-0.3555)
+ -- ( 0.0476,-0.3384)
+ .. controls ( 0.0149,-0.3341) and ( 0.0150,-0.3375) .. (-0.0035,-0.3640)
+ .. controls (-0.0031,-0.3175) and ( 0.0507,-0.3021) .. ( 0.0895,-0.3132)
+ .. controls ( 0.0967,-0.3153) and ( 0.1020,-0.3182) .. ( 0.1069,-0.3214)
+ -- ( 0.0733,-0.3214)
+ -- ( 0.0733,-0.3555)
+ -- ( 0.1073,-0.3555)
+ -- ( 0.1073,-0.3217)
+ .. controls ( 0.1209,-0.3306) and ( 0.1314,-0.3431) .. ( 0.1671,-0.3555)
+ .. controls ( 0.1861,-0.3011) and ( 0.1658,-0.3044) .. ( 0.1276,-0.2793)
+ .. controls ( 0.1121,-0.2692) and ( 0.1003,-0.2524) .. ( 0.0809,-0.2495)
+ --cycle
+ ( 0.5253,-0.2617)
+ .. controls ( 0.5159,-0.2894) and ( 0.5137,-0.2935) .. ( 0.5423,-0.3042)
+ --cycle
+ (-0.5836,-0.2872)
+ -- (-0.5921,-0.3299)
+ .. controls (-0.5632,-0.3196) and (-0.5624,-0.3175) .. (-0.5665,-0.2872)
+ --cycle
+ ( 0.4825,-0.3113)
+ .. controls ( 0.4709,-0.3098) and ( 0.4621,-0.3187) .. ( 0.4571,-0.3470)
+ .. controls ( 0.4065,-0.2945) and ( 0.3565,-0.3080) .. ( 0.3141,-0.3613)
+ .. controls ( 0.3029,-0.3754) and ( 0.2880,-0.3874) .. ( 0.2903,-0.4075)
+ .. controls ( 0.2921,-0.4247) and ( 0.3027,-0.4361) .. ( 0.3120,-0.4493)
+ .. controls ( 0.2945,-0.4516) and ( 0.2350,-0.4574) .. ( 0.2234,-0.4665)
+ .. controls ( 0.2011,-0.4843) and ( 0.2099,-0.5378) .. ( 0.2182,-0.5602)
+ -- ( 0.2352,-0.5602)
+ .. controls ( 0.2421,-0.5417) and ( 0.2492,-0.5116) .. ( 0.2706,-0.5071)
+ .. controls ( 0.3048,-0.4961) and ( 0.3439,-0.5674) .. ( 0.3618,-0.5071)
+ -- ( 0.3618,-0.4833)
+ -- ( 0.3974,-0.4919)
+ -- ( 0.4059,-0.4579)
+ -- ( 0.3376,-0.4493)
+ -- ( 0.3717,-0.3896)
+ .. controls ( 0.4306,-0.3991) and ( 0.4623,-0.4570) .. ( 0.4656,-0.3640)
+ .. controls ( 0.4971,-0.3707) and ( 0.5062,-0.3751) .. ( 0.5253,-0.3470)
+ -- ( 0.5451,-0.3694)
+ .. controls ( 0.6171,-0.4271) and ( 0.5795,-0.2610) .. ( 0.5253,-0.3384)
+ .. controls ( 0.5089,-0.3248) and ( 0.4943,-0.3128) .. ( 0.4825,-0.3113)
+ --cycle
+ ( 0.6371,-0.3426)
+ .. controls ( 0.6165,-0.3414) and ( 0.6075,-0.3499) .. ( 0.6021,-0.3811)
+ .. controls ( 0.6375,-0.3781) and ( 0.6440,-0.3786) .. ( 0.6618,-0.3470)
+ .. controls ( 0.6521,-0.3447) and ( 0.6439,-0.3431) .. ( 0.6371,-0.3426)
+ --cycle
+ ( 0.1158,-0.3640)
+ -- ( 0.1073,-0.3981)
+ -- ( 0.1415,-0.3981)
+ -- ( 0.1331,-0.3640)
+ --cycle
+ (-0.4660,-0.3701)
+ .. controls (-0.4757,-0.3670) and (-0.4894,-0.3727) .. (-0.4983,-0.3981)
+ -- (-0.5580,-0.3811)
+ .. controls (-0.5508,-0.4276) and (-0.5277,-0.4685) .. (-0.4812,-0.4833)
+ -- (-0.4898,-0.4066)
+ .. controls (-0.4444,-0.4042) and (-0.4498,-0.3750) .. (-0.4660,-0.3701)
+ --cycle
+ ( 0.1671,-0.3724)
+ -- ( 0.1585,-0.3811)
+ -- ( 0.1671,-0.4407)
+ -- ( 0.1927,-0.4322)
+ -- ( 0.1927,-0.3811)
+ -- ( 0.1841,-0.3724)
+ --cycle
+ (-0.4061,-0.3746)
+ .. controls (-0.4337,-0.3682) and (-0.4432,-0.4275) .. (-0.3933,-0.4421)
+ .. controls (-0.3807,-0.4474) and (-0.3733,-0.4433) .. (-0.3617,-0.4421)
+ .. controls (-0.3654,-0.4287) and (-0.3677,-0.4184) .. (-0.3740,-0.4070)
+ .. controls (-0.3858,-0.3861) and (-0.3969,-0.3767) .. (-0.4061,-0.3746)
+ --cycle
+ (-0.2091,-0.4066)
+ -- (-0.2091,-0.4298)
+ -- (-0.1315,-0.5004)
+ .. controls (-0.1221,-0.4446) and (-0.1606,-0.4228) .. (-0.2091,-0.4066)
+ --cycle
+ ( 0.6634,-0.4202)
+ .. controls ( 0.6063,-0.4164) and ( 0.5403,-0.4628) .. ( 0.5936,-0.5175)
+ .. controls ( 0.5533,-0.5676) and ( 0.6039,-0.5913) .. ( 0.6362,-0.5261)
+ -- ( 0.6021,-0.5175)
+ -- ( 0.6618,-0.5004)
+ -- ( 0.6874,-0.5261)
+ -- ( 0.6532,-0.4749)
+ -- ( 0.6618,-0.4664)
+ .. controls ( 0.6767,-0.4763) and ( 0.6924,-0.4939) .. ( 0.7031,-0.4938)
+ .. controls ( 0.7482,-0.4516) and ( 0.7588,-0.4217) .. ( 0.6869,-0.4249)
+ .. controls ( 0.6795,-0.4222) and ( 0.6716,-0.4207) .. ( 0.6634,-0.4202)
+ --cycle
+ (-0.2595,-0.4322)
+ -- (-0.2680,-0.4407)
+ -- (-0.2680,-0.4579)
+ -- (-0.2595,-0.4664)
+ -- (-0.2424,-0.4664)
+ -- (-0.2338,-0.4579)
+ -- (-0.2338,-0.4407)
+ -- (-0.2424,-0.4322)
+ --cycle
+ (-0.3947,-0.4820)
+ .. controls (-0.4064,-0.4819) and (-0.4202,-0.4884) .. (-0.4300,-0.4906)
+ .. controls (-0.4705,-0.5000) and (-0.4926,-0.4888) .. (-0.4812,-0.5431)
+ .. controls (-0.4962,-0.5405) and (-0.5172,-0.5356) .. (-0.5319,-0.5380)
+ .. controls (-0.5497,-0.5409) and (-0.6218,-0.5786) .. (-0.6276,-0.5954)
+ .. controls (-0.6443,-0.6458) and (-0.5896,-0.6294) .. (-0.5665,-0.6198)
+ -- (-0.5750,-0.6455)
+ -- (-0.5409,-0.6540)
+ -- (-0.5409,-0.6198)
+ -- (-0.4727,-0.5943)
+ -- (-0.4812,-0.6370)
+ -- (-0.4641,-0.6028)
+ -- (-0.4214,-0.6796)
+ -- (-0.4044,-0.6796)
+ .. controls (-0.3922,-0.6110) and (-0.4199,-0.5974) .. (-0.4386,-0.5431)
+ -- (-0.4053,-0.5384)
+ .. controls (-0.3682,-0.5271) and (-0.3698,-0.4934) .. (-0.3840,-0.4848)
+ .. controls (-0.3872,-0.4829) and (-0.3908,-0.4821) .. (-0.3947,-0.4820)
+ --cycle
+ (-0.2509,-0.4833)
+ .. controls (-0.2897,-0.5056) and (-0.2886,-0.5289) .. (-0.2509,-0.5516)
+ -- (-0.2509,-0.5688)
+ .. controls (-0.3046,-0.5780) and (-0.3807,-0.5721) .. (-0.3362,-0.6796)
+ .. controls (-0.3905,-0.7060) and (-0.4127,-0.7567) .. (-0.3447,-0.7820)
+ -- (-0.3305,-0.8084)
+ .. controls (-0.3952,-0.8150) and (-0.4330,-0.7851) .. (-0.3796,-0.8551)
+ .. controls (-0.3707,-0.8560) and (-0.2665,-0.8846) .. (-0.3191,-0.8587)
+ .. controls (-0.2670,-0.8376) and (-0.2955,-0.8083) .. (-0.3191,-0.7735)
+ .. controls (-0.2852,-0.7626) and (-0.2805,-0.7579) .. (-0.2850,-0.7222)
+ -- (-0.3277,-0.7393)
+ -- (-0.3277,-0.6796)
+ .. controls (-0.2965,-0.6680) and (-0.3000,-0.6597) .. (-0.3020,-0.6285)
+ .. controls (-0.2349,-0.6402) and (-0.2059,-0.6119) .. (-0.1513,-0.6666)
+ .. controls (-0.1144,-0.7033) and (-0.1214,-0.7764) .. (-0.0716,-0.7828)
+ .. controls (-0.0398,-0.7870) and (-0.0581,-0.7438) .. (-0.0633,-0.7307)
+ .. controls (-0.0105,-0.7419) and (-0.0101,-0.7107) .. (-0.0259,-0.6944)
+ .. controls (-0.0416,-0.6781) and (-0.0638,-0.6847) .. (-0.0920,-0.6613)
+ .. controls (-0.1363,-0.6245) and (-0.1312,-0.5893) .. (-0.2253,-0.5516)
+ --cycle
+ ( 0.0893,-0.4928)
+ .. controls ( 0.0854,-0.4941) and ( 0.0816,-0.4977) .. ( 0.0781,-0.5045)
+ .. controls ( 0.0717,-0.5167) and ( 0.0733,-0.5538) .. ( 0.0733,-0.5688)
+ .. controls (-0.0068,-0.5661) and ( 0.0229,-0.6522) .. ( 0.0360,-0.6661)
+ .. controls ( 0.0456,-0.6761) and ( 0.0531,-0.6759) .. ( 0.0647,-0.6796)
+ -- ( 0.0647,-0.6198)
+ -- ( 0.1244,-0.6113)
+ -- ( 0.1073,-0.5773)
+ -- ( 0.1331,-0.5688)
+ .. controls ( 0.1502,-0.5983) and ( 0.1514,-0.6011) .. ( 0.1841,-0.6113)
+ .. controls ( 0.1815,-0.5647) and ( 0.1767,-0.5414) .. ( 0.1244,-0.5431)
+ -- ( 0.1174,-0.5185)
+ .. controls ( 0.1127,-0.5047) and ( 0.1008,-0.4886) .. ( 0.0893,-0.4928)
+ --cycle
+ ( 0.0647,-0.6796)
+ .. controls ( 0.0651,-0.7162) and ( 0.0755,-0.7152) .. ( 0.1073,-0.7052)
+ .. controls ( 0.0927,-0.6800) and ( 0.0939,-0.6798) .. ( 0.0647,-0.6796)
+ --cycle
+ ( 0.4429,-0.5307)
+ .. controls ( 0.4305,-0.5311) and ( 0.4171,-0.5380) .. ( 0.4059,-0.5558)
+ .. controls ( 0.3999,-0.5655) and ( 0.3989,-0.5750) .. ( 0.3994,-0.5861)
+ .. controls ( 0.3998,-0.5978) and ( 0.4033,-0.6088) .. ( 0.4059,-0.6198)
+ .. controls ( 0.4351,-0.6096) and ( 0.4347,-0.6075) .. ( 0.4400,-0.5773)
+ .. controls ( 0.5088,-0.5860) and ( 0.4802,-0.5296) .. ( 0.4429,-0.5307)
+ --cycle
+ ( 0.6296,-0.5636)
+ .. controls ( 0.6201,-0.5648) and ( 0.6129,-0.5872) .. ( 0.5850,-0.6007)
+ .. controls ( 0.5662,-0.6071) and ( 0.5466,-0.6101) .. ( 0.5358,-0.6303)
+ .. controls ( 0.5238,-0.6524) and ( 0.5014,-0.6717) .. ( 0.5092,-0.6929)
+ .. controls ( 0.4879,-0.7051) and ( 0.4594,-0.7105) .. ( 0.4574,-0.7383)
+ .. controls ( 0.4557,-0.7622) and ( 0.5198,-0.8058) .. ( 0.5459,-0.7885)
+ .. controls ( 0.5602,-0.7791) and ( 0.4924,-0.7612) .. ( 0.5176,-0.7262)
+ -- ( 0.5713,-0.7309)
+ .. controls ( 0.6461,-0.7123) and ( 0.5265,-0.6556) .. ( 0.6262,-0.6344)
+ .. controls ( 0.6303,-0.6340) and ( 0.6389,-0.6314) .. ( 0.6474,-0.6278)
+ -- ( 0.6629,-0.6006)
+ .. controls ( 0.6611,-0.5976) and ( 0.6583,-0.5944) .. ( 0.6541,-0.5908)
+ .. controls ( 0.6418,-0.5698) and ( 0.6353,-0.5628) .. ( 0.6296,-0.5636)
+ --cycle
+ ( 0.2723,-0.5991)
+ .. controls ( 0.2592,-0.6003) and ( 0.2468,-0.6028) .. ( 0.2363,-0.6064)
+ .. controls ( 0.1997,-0.6189) and ( 0.1915,-0.6622) .. ( 0.2438,-0.6796)
+ -- ( 0.2524,-0.6540)
+ -- ( 0.2694,-0.6540)
+ -- ( 0.2438,-0.6796)
+ -- ( 0.2352,-0.7052)
+ .. controls ( 0.1815,-0.6689) and ( 0.1445,-0.7418) .. ( 0.2182,-0.7649)
+ .. controls ( 0.2103,-0.7956) and ( 0.2084,-0.7983) .. ( 0.2267,-0.8246)
+ .. controls ( 0.1155,-0.7748) and ( 0.1095,-0.9097) .. ( 0.1942,-0.8505)
+ -- ( 0.2141,-0.8675)
+ .. controls ( 0.2535,-0.8323) and ( 0.2056,-0.8655) .. ( 0.2756,-0.8643)
+ -- ( 0.2903,-0.8720)
+ -- ( 0.3279,-0.8720)
+ -- ( 0.3427,-0.8612)
+ .. controls ( 0.3869,-0.8663) and ( 0.4661,-0.8748) .. ( 0.4741,-0.8502)
+ .. controls ( 0.5431,-0.8855) and ( 0.5233,-0.7888) .. ( 0.5039,-0.8143)
+ .. controls ( 0.4752,-0.7958) and ( 0.5046,-0.8131) .. ( 0.4741,-0.8331)
+ .. controls ( 0.3949,-0.7997) and ( 0.4522,-0.8406) .. ( 0.3683,-0.8327)
+ .. controls ( 0.3744,-0.7942) and ( 0.4288,-0.7829) .. ( 0.4051,-0.7307)
+ .. controls ( 0.4260,-0.7007) and ( 0.4185,-0.6946) .. ( 0.4051,-0.6626)
+ .. controls ( 0.3990,-0.6503) and ( 0.3940,-0.6359) .. ( 0.3839,-0.6265)
+ .. controls ( 0.3585,-0.6027) and ( 0.3119,-0.5953) .. ( 0.2723,-0.5991)
+ --cycle
+ (-0.2424,-0.6455)
+ -- (-0.2424,-0.6796)
+ -- (-0.1997,-0.6711)
+ -- (-0.1997,-0.6540)
+ --cycle
+ ( 0.2950,-0.6455)
+ .. controls ( 0.3615,-0.6477) and ( 0.3567,-0.6705) .. ( 0.3974,-0.7222)
+ .. controls ( 0.3592,-0.8249) and ( 0.3353,-0.7947) .. ( 0.2609,-0.7990)
+ -- ( 0.2438,-0.7649)
+ .. controls ( 0.2681,-0.7474) and ( 0.2638,-0.7424) .. ( 0.2609,-0.7137)
+ -- ( 0.2950,-0.6881)
+ .. controls ( 0.3035,-0.6916) and ( 0.3102,-0.6959) .. ( 0.3198,-0.6974)
+ .. controls ( 0.3496,-0.7020) and ( 0.3487,-0.6665) .. ( 0.3120,-0.6881)
+ --cycle
+ (-0.6122,-0.6460)
+ .. controls (-0.6202,-0.6484) and (-0.6222,-0.6534) .. (-0.6220,-0.6591)
+ -- (-0.6084,-0.6829)
+ .. controls (-0.6039,-0.6880) and (-0.6001,-0.6940) .. (-0.5958,-0.6974)
+ .. controls (-0.5822,-0.7078) and (-0.5979,-0.7175) .. (-0.5836,-0.7137)
+ -- (-0.5557,-0.7397)
+ .. controls (-0.5863,-0.7181) and (-0.4852,-0.7770) .. (-0.5233,-0.7812)
+ .. controls (-0.4643,-0.7650) and (-0.4542,-0.8172) .. (-0.4400,-0.7940)
+ .. controls (-0.4310,-0.7794) and (-0.4454,-0.7672) .. (-0.4569,-0.7609)
+ .. controls (-0.5042,-0.7356) and (-0.5468,-0.7364) .. (-0.5580,-0.6711)
+ .. controls (-0.5740,-0.6662) and (-0.5960,-0.6410) .. (-0.6122,-0.6460)
+ --cycle
+ (-0.2799,-0.6723)
+ .. controls (-0.2946,-0.6977) and (-0.2726,-0.7009) .. (-0.2645,-0.6954)
+ .. controls (-0.2563,-0.6899) and (-0.2508,-0.6683) .. (-0.2799,-0.6723)
+ --cycle
+ (-0.1741,-0.6796)
+ -- (-0.1826,-0.6881)
+ -- (-0.1826,-0.7052)
+ -- (-0.1571,-0.6796)
+ --cycle
+ ( 0.0647,-0.7393)
+ -- ( 0.0733,-0.7735)
+ -- ( 0.0902,-0.7735)
+ -- ( 0.0988,-0.7649)
+ -- ( 0.0988,-0.7478)
+ --cycle
+ ( 0.2267,-0.7564)
+ -- ( 0.2352,-0.7564)
+ -- ( 0.2352,-0.7649)
+ --cycle
+ (-0.2765,-0.7649)
+ -- (-0.2850,-0.7990)
+ -- (-0.2509,-0.7905)
+ -- (-0.2595,-0.7649)
+ --cycle
+ (-0.1620,-0.7999)
+ .. controls (-0.1665,-0.7994) and (-0.1723,-0.7994) .. (-0.1792,-0.8003)
+ .. controls (-0.2378,-0.8436) and (-0.2549,-0.8217) .. (-0.2658,-0.8441)
+ .. controls (-0.2799,-0.8733) and (-0.2098,-0.8685) .. (-0.1746,-0.8466)
+ .. controls (-0.1557,-0.8347) and (-0.1302,-0.8033) .. (-0.1620,-0.7999)
+ --cycle
+ (-0.0021,-0.8033)
+ .. controls (-0.0289,-0.7979) and (-0.0697,-0.8240) .. (-0.0817,-0.8284)
+ .. controls (-0.1018,-0.8361) and (-0.1245,-0.8333) .. (-0.1384,-0.8539)
+ .. controls (-0.1534,-0.8760) and (-0.1093,-0.8641) .. (-0.0866,-0.8639)
+ .. controls (-0.0704,-0.8637) and (-0.0573,-0.8695) .. (-0.0331,-0.8549)
+ .. controls ( 0.0004,-0.8348) and (-0.0157,-0.8559) .. ( 0.0221,-0.8587)
+ .. controls ( 0.0252,-0.8212) and ( 0.0141,-0.8066) .. (-0.0021,-0.8033)
+ --cycle
+ ( 0.1096,-0.8160)
+ .. controls ( 0.1044,-0.8138) and ( 0.0965,-0.8137) .. ( 0.0850,-0.8167)
+ .. controls ( 0.0624,-0.8514) and ( 0.0794,-0.8648) .. ( 0.0988,-0.8546)
+ .. controls ( 0.1148,-0.8462) and ( 0.1249,-0.8224) .. ( 0.1096,-0.8160)
+ --cycle
+ (-0.4386,-0.8161)
+ -- (-0.4386,-0.8587)
+ .. controls (-0.3929,-0.8508) and (-0.3929,-0.8240) .. (-0.4386,-0.8161)
+ --cycle
+ (-0.4898,-0.8246)
+ -- (-0.5227,-0.8312)
+ -- (-0.5082,-0.8563)
+ .. controls (-0.5034,-0.8573) and (-0.4999,-0.8586) .. (-0.4898,-0.8587)
+ -- (-0.4878,-0.8720)
+ -- (-0.4837,-0.8720)
+ -- (-0.4565,-0.8673)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/tile.dtx b/macros/latex/contrib/wargame/source/hex/tile.dtx
new file mode 100644
index 0000000000..76eceb27c4
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/tile.dtx
@@ -0,0 +1,25 @@
+% \iffalse
+% ====================================================================
+% This is simply to create tile images.
+%
+%<*tile>
+\documentclass{standalone}
+\usepackage[terrainpic]{wargame}
+\begin{document}%
+\begin{tikzpicture}%
+ \pic{hex/terrain/%
+%<beach>beach
+%<city>city
+%<lightwoods>light woods
+%<mountains>mountains
+%<rough>rough
+%<sea>sea
+%<swamp>swamp
+%<town>town
+%<village>village
+%<woods>woods
+};%
+\end{tikzpicture}
+\end{document}
+%</tile>
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/towns.dtx b/macros/latex/contrib/wargame/source/hex/towns.dtx
new file mode 100644
index 0000000000..a73c5eed5c
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/towns.dtx
@@ -0,0 +1,96 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Towns}
+% \label{sec:impl:hex:town}
+%
+% Similar to above, we define a namespace and family for towns. First
+% thing is the graphics style for towns.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/town/.style={
+ scale line widths,
+ thin,
+ fill=pgfstrokecolor,
+ color=pgfstrokecolor},
+ hex/town name/.style={
+ transform shape,
+ shape=rectangle,
+ above right=.1,
+ color=pgfstrokecolor,
+ font=\sffamily\normalsize}
+}
+% \end{macrocode}
+%
+% Next is the namespace for dealing with towns.
+%
+% \begin{macrocode}
+\tikzset{%
+ /hex/town/.search also={/tikz},%
+ /hex/town/.cd,
+ pic/.store in=\hex@c@pic,
+ type/.store in=\hex@c@pic,
+ place/.store in=\hex@c@pos,
+ location/.store in=\hex@c@pos,
+ name/.store in=\hex@c@name,
+ village/.style={pic=hex/town/village},
+ town/.style={pic=hex/town/town},
+ city/.style={pic=hex/town/city}
+}
+% \end{macrocode}
+%
+% And some \spec{pic}tures for making the towns.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/town/village/.pic={\path[fill,pic actions] circle(.1);},
+ hex/town/town/.pic={\path[fill,pic actions] circle(.2);},
+ hex/town/city/.pic={%
+ \path[fill,pic actions] circle(.25);
+ \path[draw,pic actions] circle(.35);}
+}
+% \end{macrocode}
+%
+% \begin{Macro}{\hex@do@town}
+%
+% The macro to make the towns. This uses same tricks as above.
+%
+% \begin{macrocode}
+\def\hex@c@nameparse{%
+ \@ifnextchar[{\hex@c@namep@rse}{\hex@c@namep@rse[]}%]
+}
+\def\hex@c@namep@rse[#1]#2\endhex@c@nameparse{%
+ \def\hex@c@node{node[shape=rectangle,hex/town name,#1]{#2}}}
+
+\def\hex@do@town{%
+ \edef\hex@c@tmp{[
+ /hex/town/.cd,%
+ town,%
+ /tikz/hex/town,%
+ /tikz/every hex town/.try,
+ \hex@town]}
+ \expandafter\scope\hex@c@tmp%
+ \ifx\hex@c@pic\empty\else%
+ \@ifundefined{hex@c@pos}{\let\hex@c@pos\empty}{}
+ \@ifundefined{hex@c@name}{\let\hex@c@name\empty}{}
+ \expandafter\hex@c@nameparse\hex@c@name\endhex@c@nameparse%
+ \ifx\hex@c@pos\empty\def\hex@c@pos{(0,0)}\fi
+ \hex@dbg{2}{Town:
+ ^^J text=\hex@c@name
+ ^^J pic=\hex@c@pic
+ ^^J place=\hex@c@pos
+ ^^J node=\hex@c@node
+ }
+ \filldraw \hex@c@pos pic{\hex@c@pic} \hex@c@node;
+ \fi%
+ \endscope%
+}
+% \end{macrocode}
+% \end{Macro}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/activity.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/activity.dtx
new file mode 100644
index 0000000000..c59e685b20
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/activity.dtx
@@ -0,0 +1,39 @@
+%<*cmp>
+\CompatSection{\spec{activity}}
+\CompatTable{activity}{main}{{
+ arrest/{main={arrest}},
+ attempted criminal activity/{main={crime,individual}},
+ automobile/{main={automobile}},
+ demonstration/{main={squashed text=MASS}},
+ drive by shooting/{main={rifle},lower={wheeled}},
+ drug related activities/{main={squashed text=DRUG}},
+ explosion/{main={explosion}},
+ extortion 1/{main={text=\textdollar}},
+ extortion 2/{main={text=\pounds}},
+ extortion 3/{main={text=\texteuro}},
+ extortion 4/{main={text=\textyen}},
+ fire/{main={squashed text=FIRE}},
+ graffiti/{main={graffiti}},
+ improvised explosive device explosion/{main={explosion,small text=IED}},
+ individual/{main={individual}},
+ killing/{main={killing,individual}},
+ patrolling/{main={patrolling}},
+ pleasure craft/{main={sailing boat}},
+ poisoning/{main={poisoning}},
+ psychological operations/{main={psychological}},
+ radio and television psychological operations/{main={psychological,signal}},
+ riot/{main={squashed text=RIOT}},
+ searching/{main={searching}},
+}}
+\CompatTable{activity}{upper}{{
+ assassination/{upper={text=AS}},
+ execution/{upper={text=EX}},
+ hijack/{upper={text=H}},
+ house to house/{upper={house}},
+ kidnapping/{upper={text=K}},
+ murder/{upper={text=MU}},
+ piracy/{upper={text=PI}},
+ rape/{upper={text=RA}},
+ written/{upper={text=W}},
+}}
+%</cmp>
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/air.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/air.dtx
new file mode 100644
index 0000000000..286366f81a
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/air.dtx
@@ -0,0 +1,87 @@
+%<*cmp>
+\CompatSection{\spec{air}}
+\CompatTable{air}{main}{{
+ air decoy/{main={air decoy}},
+ airborne command post/{main={squashed text=ACP}},
+ airborne early warning/{main={squashed text=AEW}},
+ anti submarine warfare/{main={squashed text=ASW}},
+ anti surface warfare/{main={squashed text=ASUW}},
+ attack/{main={text=A}},
+ bomber/{main={text=B}},
+ cargo/{main={text=C}},
+ civilian airship/{main={airship}},
+ civilian balloon/{main={balloon}},
+ civilian fixed wing/{main={fixed wing}},
+ civilian rotary wing/{main={rotary wing}},
+ civilian/{main={squashed text=CIV}},
+ combat search and rescue/{main={squashed text=CSAR}},
+ communications/{main={squashed text=COM}},
+ electronic support measures/{main={squashed text=ESM}},
+ fighter/{main={text=F}},
+ government/{main={squashed text=GOV}},
+ jammer/{main={text=J}},
+ medic/{main={[fill]medic}},
+ military airship/{main={[fill]airship}},
+ military balloon/{main={[fill]balloon}},
+ military fixed wing/{main={[fill]fixed wing}},
+ military rotary wing/{main={[fill]rotary wing}},
+ military/{main={squashed text=MIL}},
+ mine countermeasures/{main={squashed text=MCM}},
+ passenger/{main={text=PX}},
+ patrol/{main={text=P}},
+ personnel recovery/{main={text=PR}},
+ reconnaissance/{main={text=R}},
+ search and rescue/{main={squashed text=SAR}},
+ special operations forces/{main={squashed text=SOF}},
+ suppression of enemy air defence/{main={squashed text=SEAD}},
+ tanker/{main={text=K}},
+ trainer/{main={text=T}},
+ ultra light/{main={text=UL}},
+ unmanned aerial vehicle/{main={[fill]unmanned}},
+ utility/{main={text=U}},
+ vertical short takeoff and landing/{main={text=V}},
+ very important person/{main={squashed text=VIP}},
+}}
+\CompatTable{air}{upper}{{
+ airborne command post/{upper={squashed text=ACP}},
+ airborne early warning/{upper={squashed text=AEW}},
+ anti submarine warfare/{upper={squashed text=ASW}},
+ anti surface warfare/{upper={squashed text=ASUW}},
+ cargo/{upper={text=C}},
+ combat search and rescue/{upper={squashed text=CSAR}},
+ communications/{upper={squashed text=COM}},
+ electronic support measures/{upper={squashed text=ESM}},
+ escort/{upper={text=E}},
+ government flight/{upper={squashed text=GOV}},
+ intensive care/{upper={text=IC}},
+ jammer/{upper={text=R}},
+ medical evacuation/{upper={[fill]medic}},
+ mine countermeasures/{upper={squashed text=MCM}},
+ passenger plane/{upper={text=PX}},
+ patrol/{upper={text=J}},
+ photography/{upper={text=PH}},
+ reconnaissance/{upper={text=P}},
+ search and rescue/{upper={squashed text=SAR}},
+ special operations forces/{upper={squashed text=SOF}},
+ suppression of enemy air defence/{upper={squashed text=SEAD}},
+ tanker/{upper={text=K}},
+ trainer/{upper={text=T}},
+ ultra light/{upper={text=UL}},
+ utility/{upper={text=U}},
+ very important person/{upper={squashed text=VIP}},
+}}
+
+\CompatTable{air}{lower}{{
+ boom and drogue/{lower={squashed text=B/D}},
+ boom only/{lower={text=B}},
+ close range/{lower={text=CR}},
+ drogue only/{lower={text=D}},
+ heavy/{lower={text=H}},
+ light/{lower={text=L}},
+ long range/{lower={text=LR}},
+ medium range/{lower={text=MR}},
+ medium/{lower={text=M}},
+ short range/{lower={text=SR}},
+}}
+%</cmp>
+%
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/equipment.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/equipment.dtx
new file mode 100644
index 0000000000..d38cb93dbc
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/equipment.dtx
@@ -0,0 +1,99 @@
+%<*cmp>
+\CompatSection{\spec{equipment}}
+\CompatTable{equipment}{main}{{
+ air defence gun/{main={gun=air defence}},
+ air defence missile launcher/{main={missile launcher=air defence}},
+ antennae/{main={antenna}},
+ anti tank gun/{main={gun=anti tank}},
+ anti tank missile launcher/{main={missile launcher=anti tank}},
+ anti tank rocket launcher/{main={rocket launcher=anti tank}},
+ antipersonnel land mine/{main={land mine=personnel}},
+ antitank land mine/{main={land mine=tank}},
+ armoured fighting vehicle command and control/{main={armoured fighting vehicle,small text=C2}},
+ armoured fighting vehicle/{main={armoured fighting vehicle}},
+ armoured medical personnel carrier/{main={{[save clip]armoured personnel carrier},{[scale=.7]medical}}},
+ armoured personnel carrier/{main={armoured personnel carrier}},
+ armoured protected recovery vehicle/{main={armoured,[scale=.7]maintenance}},
+ armoured protected vehicle/{main={armoured}},
+ automatic rifle/{main={rifle,type=heavy}},
+ bomb/{main={squashed text=BOMB}},
+ booby trap/{main={booby trap}},
+ bridge mounted on utility vehicle/{main={utility vehicle,[scale=.7]bridge}},
+ bridge/{main={bridge}},
+ bus/{main={utility vehicle,text=B}},
+ chemical biological radiological nuclear equipment/{main={chemical biological radiological nuclear}},
+ computer system/{main={computer system}},
+ direct fire gun/{main={gun=direct}},
+ drill mounted on vehicle/{main={utility vehicle,{[scale=.6,yshift=-3]drilling}}},
+ drill/{main={drilling}},
+ earthmover/{main={earthmover}},
+ fixed bridge/{main={bridge=fixed}},
+ flame thrower/{main={flame thrower}},
+ folding girder bridge/{main={bridge=folding}},
+ generator set/{main={text=G}},
+ grenade launcher/{main={grenade launcher}},
+ heavy grenade launcher/{main={grenade launcher,[yshift=-.2]type=heavy}},
+ heavy machine gun/{main={machine gun,type=heavy}},
+ heavy tank/{main={tank,type=vheavy}},
+ hollow deck bridge/{main={bridge=hollow}},
+ howitzer/{main={howitzer}},
+ improvised explosive device/{main={squashed text=IED}},
+ land mine/{main={land mine}},
+ laser/{main={laser}},
+ light grenade launcher/{main={grenade launcher,[yshift=-.2]type=light}},
+ light machine gun/{main={machine gun,type=light}},
+ light tank/{main={tank,type=vlight}},
+ machine gun/{main={machine gun}},
+ medical evacuation armoured protected vehicle/{main={armoured,[fill]medic}},
+ medical evacuation medical vehicle/{main={utility vehicle,[fill]medical}},
+ medium grenade launcher/{main={grenade launcher,[yshift=-.2]type=medium}},
+ medium machine gun/{main={machine gun,type=medium}},
+ medium tank/{main={tank,type=vmedium}},
+ mine clearing equipment/{main={mine clearing equipment}},
+ mine clearing vehicle/{main={tank,mine clearing equipment}},
+ mine laying equipment/{main={mine},upper={type=light}},
+ mine laying vehicle/{main={utility vehicle,mine},upper={type=light}},
+ missile launcher/{main={missile launcher}},
+ mobile emergency physician/{main={[save clip]utility vehicle,physician}},
+ mortar/{main={mortar}},
+ multifunctional earthmover/{main={earthmover,text=MF}},
+ multiple rocket launcher/{main={rocket launcher=multiple}},
+ non lethal grenade launcher/{main={grenade launcher=non lethal}},
+ non lethal weapon/{main={non lethal weapon}},
+ petroleum oil and lubricants vehicle/{main={utility vehicle,[scale=.6]fuel}},
+ psychological operations equipment/{main={psychological}},
+ radar/{main={radar}},
+ recoilless gun/{main={gun=recoilless}},
+ rifle/{main={rifle}},
+ semi automatic rifle/{main={rifle,type=medium}},
+ semi trailer truck/{main={semi trailer truck}},
+ sensor emplaced/{main={sensor},upper={jagged wave}},
+ sensor/{main={sensor}},
+ single rocket launcher/{main={rocket launcher=single}},
+ single shot rifle/{main={rifle,type=light}},
+ surface to surface missile launcher/{main={missile launcher=surface to surface}},
+ tank recovery vehicle/{main={tank,[scale=.8]maintenance}},
+ tank/{main={tank}},
+ taser/{main={non lethal weapon,text=Z}},
+ train locomotive/{main={train locomotive}},
+ utility vehicle/{main={utility vehicle}},
+ water cannon/{main={non lethal weapon,text=W}},
+ water vehicle/{main={utility vehicle,{[yshift=-3,scale=.6]water}}},
+}}
+
+\CompatTable{equipment}{lower}{{
+ amphibious/{below={amphibious}},
+ barge/{below={riverine}},
+ over snow/{below={over snow}},
+ pack animal/{below={pack animal}},
+ railroad/{below={railroad}},
+ sled/{below={sled}},
+ towed/{below={towed}},
+ tracked/{below={tracked}},
+ wheeled and tracked/{below={wheeled=and tracked}},
+ wheeled cross country/{below={wheeled=cross country}},
+ wheeled limited mobility/{below={wheeled=limited}},
+ wheeled semi trailer/{below={wheeled=semi}},
+}}
+%</cmp>
+%
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/installation.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/installation.dtx
new file mode 100644
index 0000000000..0686c01cb0
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/installation.dtx
@@ -0,0 +1,43 @@
+%<*cmp>
+\CompatSection{\spec{installation}}
+\CompatTable{installation}{main}{{
+ airport/{main={base},upper={air strip}},
+ ammunition cache/{main={ammunition,supply}},
+ black list location/{main={squashed text=BLK}},
+ broadcast transmitter antenna/{main={antenna}},
+ chemical biological radiological nuclear/{main={chemical biological radiological nuclear}},
+ civilian telecommunications/{main={civilian telecommunications}},
+ electric power/{main={electric power}},
+ food distribution/{main={food,supply}},
+ grey list location/{main={squashed text=GRAY}},
+ mass grave site/{main={{[scale=.7,yshift=-.05]mortuary affairs},{[scale=.7,shift={(-.22,.05)}]mortuary affairs},{[scale=.7,shift={(.22,.05)}]mortuary affairs}}},
+ medical treatment facility/{main={medical treatment}},
+ medical/{main={medical}},
+ mine/{main={quarry}},
+ naval/{main={naval}},
+ nuclear/{main={nuclear}},
+ printed media/{main={printed media}},
+ safe house/{main={squashed text=SAFE}},
+ transportation/{main={transportation}},
+ water treatment/{main={water,{[shift={(-.2,.-.1)}]small squashed text=PURE}}},
+ water/{main={water}},
+ white list location/{main={squashed text=WHT}},
+}}
+
+\CompatTable{installation}{upper}{{
+ biological/{upper={text=B}},
+ chemical/{upper={text=C}},
+ coal/{upper={text=CO}},
+ geothermal/{upper={text=GT}},
+ hydroelectric/{upper={text=HY}},
+ natural gas/{upper={text=NG}},
+ nuclear energy/{upper={nuclear}},
+ nuclear/{upper={text=N}},
+ petroleum/{upper={fuel}},
+ radio/{upper={text=R}},
+ railroad/{upper={railroad}},
+ telephone/{upper={text=T}},
+ television/{upper={text=TV}},
+ yard/{upper={squashed text=YRD}},
+}}
+%</cmp>
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/land.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/land.dtx
new file mode 100644
index 0000000000..38c3951376
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/land.dtx
@@ -0,0 +1,266 @@
+%<*cmp>
+\CompatSection{\spec{land}}
+\CompatTable{land}{main}{{
+ above corps support/{main={above corps support}},
+ administrative/{main={squashed text=ADM}},
+ air and naval gunfire liaison company/{main={[fill]artillery,reconnaissance,air traffic},upper={naval}},
+ air assault with organic lift/{main={air assault with organic lift}},
+ air defence/{main={air defence}},
+ air traffic services/{main={air traffic,[fill]individual}},
+ ammunition/{main={ammunition}},
+ amphibious/{main={amphibious}},
+ analysis electronic warfare/{main={analysis,electronic warfare wide}},
+ analysis/{main={analysis}},
+ anti tank anti armour/{main={anti tank anti armour}},
+ armoured engineer/{main={armoured,[scale=.7]engineer}},
+ armoured/{main={armoured}},
+ aviation composite fixed wing and rotary wing/{main={[fill]fixed and rotary wing}},
+ aviation fixed wing/{main={fixed wing}},
+ aviation rotary wing/{main={rotary wing}},
+ band/{main={squashed text=BAND}},
+ broadcast transmitter antenna/{main={antenna}},
+ chemical biological radiological nuclear defence/{main={chemical biological radiological nuclear}},
+ civil affairs/{main={text=CA}},
+ civilian military cooperation/{main={civilian military cooperation}},
+ civilian police/{main={civilian police}},
+ combat service support/{main={squashed text=CSS}},
+ combat support/{main={combat support}},
+ combat/{main={squashed text=CBT}},
+ combined arms/{main={combined arms}},
+ corps support/{main={corps support}},
+ counter intelligence/{main={text=CI}},
+ criminal investigation division/{main={squashed text=CID}},
+ direction finding electronic warfare/{main={direction finding,electronic warfare wide}},
+ diving/{main={diving}},
+ dog/{main={squashed text=DOG}},
+ drilling/{main={drilling}},
+ electronic ordinance disposal/{main={squashed text=EOD}},
+ electronic ranging/{main={electronic ranging}},
+ electronic warfare/{main={text=EW}},
+ engineer/{main={engineer}},
+ environmental protection/{main={environmental protection}},
+ field artillery observer/{main={{[clip]observer},{[scale=.7,shift={(0,-.1)},fill]artillery},reconnaissance}},
+ field artillery/{main={[fill]artillery}},
+ finance/{main={finance}},
+ fire protection/{main={fire protection}},
+ geospatial support/{main={squashed text=GEO}},
+ government organization/{main={text=GO}},
+ headquarters/{main={headquarters}},
+ individual/{main={individual}},
+ infantry/{main={infantry}},
+ information operations/{main={text=IO}},
+ intercept electronic warfare/{main={[fill]analysis,electronic warfare wide}},
+ intercept/{main={[fill]analysis}},
+ internal security force/{main={squashed text=ISF}},
+ interrogation/{main={squashed text=IPW}},
+ jamming electronic warfare/{main={jamming,text=EW}},
+ jamming/{main={jamming}},
+ joint fire support/{main={squashed text=JFS}},
+ judge advocate general/{main={squashed text=JAG}},
+ killing victim/{main={killing,individual}},
+ killing victims/{main={killing,group}},
+ labour/{main={labour}},
+ laundry/{main={laundry}},
+ liaison/{main={text=LO}},
+ main gun system/{main={main gun}},
+ maintenance/{main={maintenance=fill}},
+ material/{main={squashed text=MAT}},
+ medical treatment facility/{main={medical treatment}},
+ medical/{main={medical}},
+ meteorological/{main={squashed text=MET}},
+ military intelligence/{main={text=MI}},
+ military police/{main={text=MP}},
+ mine/{main={mine}},
+ missile/{main={land missile}},
+ morale welfare and recreation/{main={squashed text=MWE}},
+ mortar/{main={mortar}},
+ mortuary affairs/{main={mortuary affairs}},
+ motorized/{main={motorized}},
+ naval/{main={naval}},
+ observer/{main={observer}},
+ ordnance/{main={ordnance}},
+ organisation or group/{main={organisation}},
+ personnel services/{main={text=PS}},
+ petroleum oil and lubricants/{main={fuel}},
+ pipeline/{main={pipeline}},
+ postal/{main={postal}},
+ psychological operations broadcast/{main={antenna,{[scale=.7,fill]psychological}}},
+ psychological/{main={psychological}},
+ public affairs/{main={text=PA}},
+ quartermaster/{main={quartermaster}},
+ radar/{main={radar}},
+ radio relay:/{main={radio relay}},
+ radio teletype centre/{main={radio teletype}},
+ radio/{main={radio}},
+ reconnaissance/{main={reconnaissance}},
+ religious support/{main={squashed text=REL}},
+ replacement holding unit/{main={squashed text=RHU}},
+ sea air land/{main={squashed text=SEAL}},
+ search electronic warfare/{main={search,electronic warfare wide}},
+ search/{main={search}},
+ security/{main={squashed text=SEC}},
+ self propelled field artillery/{main={motorized,artillery}},
+ sensor/{main={sensor}},
+ shore patrol security police/{main={text=SP}},
+ signal radio relay/{main={signal,radio relay}},
+ signal radio teletype centre/{main={signal,radio teletype}},
+ signal radio/{main={signal,radio}},
+ signal tactical satellite/{main={signal,tactical satellite}},
+ signal/{main={signal}},
+ sniper:/{main={sniper}},
+ special forces/{main={text=SF}},
+ special operations forces/{main={squashed text=SOF}},
+ spy:/{main={squashed text=SPY}},
+ supply/{main={supply}},
+ surveillance/{main={[fill]observer}},
+ survey/{main={survey}},
+ sustainment/{main={squashed text=SUST}},
+ tactical mortar/{main={armoured,[scale=.6]mortar}},
+ tactical satellite/{main={tactical satellite}},
+ topographic/{main={topographic}},
+ transportation/{main={transportation}},
+ unmanned systems/{main={unmanned}},
+ victim of an attempted crime/{main={individual,crime}},
+ video imagery/{main={video imagery}},
+ water purification/{main={water,{[shift={(-.2,.-.1)}]small squashed text=PURE}}},
+ water/{main={water}},
+}}
+
+\CompatTable{land}{upper}{{
+ Mil medical role 1/{upper={text=1}},
+ Mil medical role 2/{upper={text=2}},
+ Mil medical role 3/{upper={text=3}},
+ Mil medical role 4/{upper={text=4}},
+ air assault/{upper={air assault}},
+ area/{upper={squashed text=AREA}},
+ assassination/{upper={text=AS}},
+ attack/{upper={text=A}},
+ biological/{upper={text=B}},
+ border/{upper={squashed text=BOR}},
+ bridging/{upper={bridge}},
+ chemical/{upper={text=C}},
+ close protection/{upper={squashed text=CLP}},
+ coerced or impressed recruit/{upper={text=C}},
+ combat/{upper={squashed text=CBT}},
+ command and control/{upper={text=C2}},
+ communications contingency package/{upper={squashed text=CCP}},
+ construction/{upper={squashed text=CONST}},
+ cross cultural communication/{upper={squashed text=CCC}},
+ crowd and riot control/{upper={squashed text=CRC}},
+ decontamination/{upper={text=D}},
+ detention/{upper={squashed text=DET}},
+ direct communications/{upper={direct communications}},
+ displaced persons refugees and evacuees/{upper={squashed text=DPRE}},
+ diving/{upper={diving}},
+ division/{upper={text=XX}},
+ dog/{upper={squashed text=DOG}},
+ drilling/{upper={drilling}},
+ electro optical/{upper={text=EO}},
+ enhanced/{upper={squashed text=ENH}},
+ execution/{upper={text=EX}},
+ explosive ordnance disposal/{upper={squashed text=EOD}},
+ fire direction centre/{upper={squashed text=FDC}},
+ force/{upper={text=F}},
+ foreign fighters/{upper={text=FF}},
+ forward/{upper={squashed text=FWD}},
+ gang member or gang/{upper={squashed text=GANG}},
+ government organisation/{upper={text=GO}},
+ ground station module/{upper={squashed text=GSM}},
+ hijacking/{upper={text=H}},
+ kidnapping/{upper={text=K}},
+ landing support/{upper={text=LS}},
+ large extension node/{upper={squashed text=LEN}},
+ leader or leadership/{upper={squashed text=LDR}},
+ maintenance:/{upper={maintenance}},
+ mine countermeasuure/{upper={squashed text=MCM}},
+ missile:/{upper={land missile}},
+ mobile advisor and support/{upper={mobile advisor and support}},
+ mobile subscriber equipment/{upper={squashed text=MSE}},
+ mobility support/{upper={text=MS}},
+ movement control centre/{upper={squashed text=MCC}},
+ multinational specialized unit/{upper={squashed text=MSU}},
+ multinational/{upper={text=MN}},
+ multiple rocket launcher/{upper={rocket launcher=multiple head}},
+ murder victims/{upper={text=MU}},
+ naval/{upper={naval}},
+ node centre/{upper={text=NC}},
+ non-governmental organization member or non-governmental/{upper={organisation}},
+ nuclear:/{upper={text=N}},
+ operations:/{upper={squashed text=OPS}},
+ piracy:/{upper={text=PI}},
+ radar:/{upper={radar}},
+ radiological/{upper={squashed text=RAD}},
+ rape/{upper={text=RA}},
+ religious or religious organisation/{upper={squashed text=REL}},
+ runway/{upper={runway}},
+ search and rescue/{upper={squashed text=SAR}},
+ security/{upper={squashed text=SEC}},
+ sensor control module/{upper={squashed text=SEM}},
+ sensor/{upper={sensor}},
+ signals intelligence/{upper={signals intelligence}},
+ single rocket launcher/{upper={rocket launcher=single head}},
+ single shelter switch/{upper={squashed text=SSS}},
+ smoke/{upper={text=S}},
+ sniper/{upper={sniper}},
+ sound ranging/{upper={squashed text=SDR}},
+ special weapons and tactics/{upper={squashed text=SWAT}},
+ survey:/{upper={survey}},
+ tactical exploitation/{upper={text=TE}},
+ target acquisition/{upper={text=TA}},
+ targeted individual or organisation/{upper={squashed text=TGT}},
+ terrorist or terrorist organisation/{upper={squashed text=TER}},
+ topographic/{upper={topographic}},
+ utility/{upper={text=U}},
+ video imagery/{upper={video imagery}},
+ willing recruit/{upper={text=W}},
+}}
+
+\CompatTable{land}{lower}{{
+ airborne/{lower={airborne}},
+ arctic/{lower={arctic}},
+ battle damage repair/{lower={squashed text=BDR}},
+ bicycle equipped/{lower={bicycle equipped}},
+ clearing/{lower={squashed text=CLR}},
+ close range/{lower={text=CR}},
+ control/{lower={control}},
+ decontamination/{lower={text=D}},
+ demolition/{lower={squashed text=DEM}},
+ dental/{lower={text=D}},
+ digital/{lower={squashed text=DIG}},
+ enhanced location reporting system/{lower={enhanced location reporting system}},
+ equipment/{lower={text=E}},
+ heavy/{lower={text=H}},
+ intensive care/{lower={text=IC}},
+ intermodal/{lower={intermodal}},
+ laboratory/{lower={squashed text=LAB}},
+ launcher/{lower={launcher}},
+ light/{lower={text=L}},
+ long range/{lower={text=LR}},
+ medium range/{lower={text=MR}},
+ mountain/{lower={mountain}},
+ multi channel/{lower={text=MC}},
+ optical/{lower={squashed text=OPT}},
+ pack animal/{lower={pack animal}},
+ patient evacuation coordination/{lower={squashed text=PEC}},
+ preventative maintenance/{lower={text=PM}},
+ psychological/{lower={text=P}},
+ radio relay line of sight/{lower={radio relay line of sight}},
+ railroad/{lower={railroad}},
+ recovery maintenance/{lower={maintenance}},
+ recovery unmanned systems/{lower={recovery unmanned systems}},
+ rescue coordination centre/{lower={squashed text=RCC}},
+ riverine/{lower={riverine}},
+ short range/{lower={text=SR}},
+ single channel/{lower={text=SC}},
+ ski/{lower={ski}},
+ strategic/{lower={squashed text=STR}},
+ support/{lower={squashed text=SPT}},
+ tactical/{lower={squashed text=TAC}},
+ towed/{lower={towed}},
+ troop/{lower={text=T}},
+ vertical of short takeoff and landing/{lower={squashed text=VSTOL}},
+ veterinary/{lower={text=V}},
+ wheeled/{lower={wheeled}},
+}}
+%</cmp>
+%
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/missile.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/missile.dtx
new file mode 100644
index 0000000000..db7ea7176d
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/missile.dtx
@@ -0,0 +1,14 @@
+%<*cmp>
+\CompatSection{\spec{missile}}
+\CompatTable{missile}{main}{{
+ missile/{main={missile}},
+ air/{main={missile},left={text=A}},
+ anti ballistic/{main={missile},left={text=AB}},
+ ballistic/{main={missile},left={text=B}},
+ cruise/{main={missile},left={text=C}},
+ space/{main={missile},left={text=SP}},
+ sub surface/{main={missile},left={text=SU}},
+ surface/{main={missile},left={text=S}},
+}}
+%</cmp>
+%
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/seamine.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/seamine.dtx
new file mode 100644
index 0000000000..f4bdbd9d2f
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/seamine.dtx
@@ -0,0 +1,18 @@
+%<*cmp>
+\CompatSection{\spec{sea mine}}
+\CompatTable{sea mine}{main}{{
+ free/{main={sea mine}},
+ free-neutralised/{main={sea mine=neutralised}},
+ bottomed/{main={sea mine},lower={bottomed}},
+ bottomed-neutralised/{main={sea mine=neutralised},lower={bottomed}},
+ moored/{main={sea mine},lower={moored}},
+ moored-neutralised/{main={sea mine=neutralized},lower={moored}},
+ floating/{main={sea mine},lower={floating}},
+ floating-neutralised/{main={sea mine=neutralised},lower={floating}},
+ in other position/{main={sea mine,in position}},
+ in other position-neutralised/{main={sea mine=neutralised,in position}},
+ rising/{main={sea mine},lower={rising}},
+ rising-neutralised/{main={sea mine=neutralised},lower={rising}},
+}}
+%</cmp>
+%
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/seasurface.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/seasurface.dtx
new file mode 100644
index 0000000000..2470da3a4b
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/seasurface.dtx
@@ -0,0 +1,131 @@
+%<*cmp>
+\CompatSection{\spec{sea surface}}
+\CompatTable{sea surface}{main}{{
+ ammunition ship/{main={text=AE}},
+ amphibious assault ship/{main={squashed text=LHA}},
+ amphibious assault/{main={text=LA}},
+ amphibious assualt ship helicopter/{main={squashed text=LPH}},
+ amphibious command ship/{main={squashed text=LCC}},
+ amphibious transport/{main={squashed text=LPD}},
+ amphibious warfare ship/{main={amphibious warfare ship}},
+ auxiliary flag ship/{main={squashed text=AGF}},
+ auxiliary ship/{main={text=AA}},
+ barge/{main={ship,[shift={(0,-.05)}]small text=YB}},
+ battleship/{main={text=BB}},
+ cargo/{main={ship,text=A}},
+ carrier/{main={carrier}},
+ civilian boat/{main={boat}},
+ civilian jetski/{main={jetski}},
+ civilian rigid hull inflatable boat/{main={boat,[shift={(0,-.05)}]small text=RB}},
+ civilian speedboat/{main={boat,[shift={(0,-.05)}]small text=SP}},
+ civilian unmanned surface water vehicle/{main={unmanned}},
+ civilian/{main={squashed text=CIV}},
+ combat support ship/{main={squashed text=AOE}},
+ combatant/{main={combatant}},
+ container ship/{main={ship,text=C}},
+ convoy/{main={convoy}},
+ corvette/{main={text=FS}},
+ cruiser guided missile/{main={text=CG}},
+ destroyer/{main={text=DD}},
+ dredge/{main={ship,text=D}},
+ drifter/{main={fishing vessel,text=DF}},
+ ferry/{main={ship,text=F}},
+ fishing vessel/{main={fishing vessel}},
+ frigate/{main={text=FF}},
+ harbour tug/{main={text=YT}},
+ hazardous material transport ship/{main={ship,[yshift=.-.07]small text=HZ}},
+ heavy lift/{main={ship,text=H}},
+ hospital ship/{main={text=AH}},
+ hovercraft/{main={ship,text=J}},
+ intelligence collector/{main={squashed text=AGI}},
+ junk/{main={ship,[yshift=-.07]small text=QJ}},
+ landing craft/{main={text=LC}},
+ landing ship/{main={text=LS}},
+ lash carrier/{main={ship,text=L}},
+ launch/{main={squashed text=YFT}},
+ law enforcement vessel/{main={coast guard vessel}},
+ littoral combatant ship/{main={squashed text=LCS}},
+ military jetski/{main={[fill]jetski}},
+ military rigid hull inflatable boat/{main={{[fill]boat},{[white,scale=.5,yshift=-1.2]small text=RB}}},
+ military speedboat/{main={[fill]boat}},
+ military unmanned surface water vehicle/{main={[fill]unmanned}},
+ military/{main={squashed text=MIL}},
+ mine countermeasure support ship/{main={squashed text=MCS}},
+ mine countermeasures/{main={squashed text=MCM}},
+ mine warfare vessel/{main={mine warfare vessel}},
+ minehunter/{main={text=MH}},
+ minelayer/{main={text=ML}},
+ minesweeper drone/{main={squashed text=MSD}},
+ minesweeper/{main={text=MS}},
+ multi purpose amphibious assualt ship/{main={squashed text=LHD}},
+ naval cargo ship/{main={text=AK}},
+ navy task element/{main={navy task,squashed text=TE}},
+ navy task force/{main={navy task,squashed text=TF}},
+ navy task group/{main={navy task,squashed text=TG}},
+ navy task organisation unit/{main={navy task}},
+ navy task unit/{main={navy task,squashed text=TU}},
+ non combatant/{main={non combatant}},
+ non self propelled barge/{main={text=YB}},
+ ocean going tug/{main={text=AT}},
+ ocean research ship/{main={squashed text=AGO}},
+ oiler/{main={squashed text=AOR}},
+ passenger ship/{main={ship,text=P}},
+ patrol craft/{main={text=PC}},
+ patrol ship/{main={text=PG}},
+ patrol/{main={patrol}},
+ repair ship/{main={text=AR}},
+ roll on roll off/{main={ship,text=E}},
+ sailing boat/{main={sailing boat}},
+ sea surface decoy/{main={decoy}},
+ self propelled barge/{main={text=YS}},
+ service craft/{main={text=YY}},
+ ship/{main={ship}},
+ stores ship/{main={text=AF}},
+ submarine tender/{main={text=AS}},
+ surface combatant/{main={surface combatant}},
+ survey ship/{main={squashed text=AGS}},
+ tanker/{main={ship,text=O}},
+ tow/{main={ship,[yshift=-.09]small text=TW}},
+ trawler/{main={fishing vessel,[yshift=-.09]small text=TR}},
+ tug/{main={ship,text=T}},
+}}
+
+\CompatTable{sea surface}{upper}{{
+ anti air warfare/{upper={squashed text=AAW}},
+ anti submarine warfare/{upper={squashed text=ASW}},
+ ballistic missile/{upper={text=B}},
+ drone equipped/{upper={[fill]unmanned}},
+ electronic warfare/{upper={text=EW}},
+ escort/{upper={text=E}},
+ guided missile/{upper={text=G}},
+ helicopter equipped/{upper={text=H}},
+ intelligence surveillance reconnaissance/{upper={squashed text=ISR}},
+ medical/{upper={text=ME}},
+ mine counter measures/{upper={squashed text=MCM}},
+ mine warfare/{upper={text=MW}},
+ missile defence/{upper={text=MD}},
+ other guided missile/{upper={text=M}},
+ remote multi mission vehicle/{upper={squashed text=RMV}},
+ special operations force/{upper={squashed text=SOF}},
+ surface warfare/{upper={squashed text=SUW}},
+ torpedo/{upper={text=T}},
+}}
+
+\CompatTable{sea surface}{lower}{{
+ air cushioned alternate/{lower={text=AC}},
+ air cushioned/{lower={text=J}},
+ autonomous control/{lower={squashed text=AUT}},
+ dock/{lower={text=D}},
+ expendable/{lower={squashed text=EXP}},
+ fast/{lower={text=F}},
+ heavy/{lower={text=H}},
+ hydrofoil/{lower={text=K}},
+ light/{lower={text=L}},
+ logistics/{lower={squashed text=LOG}},
+ medium/{lower={text=M}},
+ nuclear powered/{lower={text=N}},
+ remotely piloted/{lower={text=RP}},
+ tank/{lower={text=T}},
+ vehicle/{lower={text=V}},
+}}
+%</cmp>
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/space.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/space.dtx
new file mode 100644
index 0000000000..4a1a421911
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/space.dtx
@@ -0,0 +1,51 @@
+%<*cmp>
+\CompatSection{\spec{space}}
+\CompatTable{space}{main}{{
+ anti satellite weapon/{main={[fill]satellite,[scale=.6]rifle}},
+ civilian astronomical satellite/{main={satellite=astronomical}},
+ civilian bio satellite/{main={satellite=bio}},
+ civilian capsule/{main={capsule}},
+ civilian communications satellite/{main={satellite=communications}},
+ civilian earth observation satellite/{main={satellite=earth observing}},
+ civilian miniaturised satellite/{main={satellite=small}},
+ civilian navigational satellite/{main={satellite=navigation}},
+ civilian orbiter shuttle/{main={orbiter shuttle}},
+ civilian satellite/{main={satellite}},
+ civilian space station/{main={space station}},
+ civilian tether satellite/{main={satellite=tether}},
+ civilian weather satellite/{main={[yshift=-4]satellite,text=WX}},
+ military astronomical satellite/{main={[fill]satellite=astronomical}},
+ military bio satellite/{main={[fill]satellite=bio}},
+ military capsule/{main={[fill]capsule}},
+ military communications satellite/{main={[fill]satellite=communications}},
+ military earth observation satellite/{main={[fill]satellite=earth observing}},
+ military miniaturised satellite/{main={[fill]satellite=small}},
+ military navigational satellite/{main={[fill]satellite=navigation}},
+ military orbiter shuttle/{main={[fill]orbiter shuttle}},
+ military satellite/{main={[fill]satellite=none}},
+ military space station/{main={[fill]space station}},
+ military tether satellite/{main={[fill]satellite=tether}},
+ military weather satellite/{main={{[fill,yshift=-4]satellite},text=WX}},
+ planet lander/{main={text=PL}},
+ reconnaissance satellite/{main={satellite=reconnaissance}},
+ reentry vehicle/{main={text=RV}},
+ satellite/{main={squashed text=SAT}},
+ space vehicle/{main={text=SV}},
+}}
+
+\CompatTable{space}{upper}{{
+ geostationary orbit/{upper={text=GO}},
+ geosynchronous orbit/{upper={squashed text=GSO}},
+ high earth orbit/{upper={squashed text=HEO}},
+ low earth orbit/{upper={squashed text=LEO}},
+ medium earth orbit/{upper={squashed text=MEO}},
+ molinya orbit/{upper={text=MO}},
+}}
+
+\CompatTable{space}{lower}{{
+ infra red/{lower={text=IR}},
+ optical/{lower={text=O}},
+ radar=/{lower={text=R}},
+ signals instelligence/{lower={text=SI}},
+}}
+%</cmp>
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/subsurface.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/subsurface.dtx
new file mode 100644
index 0000000000..38a867bdcd
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/subsurface.dtx
@@ -0,0 +1,67 @@
+%<*cmp>
+\CompatSection{\spec{sub surface}}
+\CompatTable{sub surface}{main}{{
+ autonomous underwater vehicle/{main={[fill]unmanned}},
+ bottomed sea mine decoy/{main={[fill]sea mine=top half,{[scale=.6,yshift=-6]decoy}},lower={bottomed}},
+ bottomed submarine/{main={submarine},lower={bottomed}},
+ civilian autonomous underwatervehicle/{main={unmanned}},
+ civilian diver/{main={diving}},
+ civilian seabed installation/{main={seabed installation}},
+ civilian submersible/{main={submersible}},
+ civilian/{main={squashed text=CIV}},
+ improvised explosive device/{main={squashed text=IED}},
+ military diver/{main={diving=military}},
+ military seabed installation/{main={[fill]seabed installation}},
+ military/{main={squashed text=MIL}},
+ moored sea mine decoy/{main={[fill]sea mine=top half,{[yshift=-4,scale=.6]decoy}},lower={[yshift=-2]bottomed,moored}},
+ non submarine/{main={small squashed text=NON SUB}},
+ other submersible/{main={[fill]submersible}},
+ sea mine decoy/{main={[fill]sea mine=top half,{[scale=.6,yshift=-6]decoy}}},
+ snorkelling submarine/{main={submarine},upper={[yshift=-8]surfaced,[yshift=-2]type=vlight}},
+ submarine/{main={submarine}},
+ surfaced submarine/{main={submarine},lower={surfaced}},
+ torpedo/{main={torpedo}},
+ underwater decoy/{main={decoy},upper={[yshift=-4]bottomed}},
+ underwater weapon/{main={squashed text=WPN}},
+ unexploded ordnance/{main={unexploded ordnance}},
+}}
+
+\CompatTable{sub surface}{upper}{{
+ anti submarine warfare/{upper={squashed text=ASW}},
+ attack/{upper={text=A}},
+ auxiliary/{upper={squashed text=AUX}},
+ ballistic missile/{upper={text=B}},
+ certain submarine/{upper={text=CT}},
+ command and control/{upper={text=C2}},
+ guided missile/{upper={text=G}},
+ intelligence surveillance reconnaissance/{upper={squashed text=ISR}},
+ mine countermeasures/{upper={squashed text=MCM}},
+ mine warfare/{upper={text=MW}},
+ other guided missile/{upper={text=M}},
+ possible submarine high 3/{upper={text=P3}},
+ possible submarine high 4/{upper={text=P4}},
+ possible submarine low 1/{upper={text=P1}},
+ possible submarine low 2/{upper={text=P2}},
+ probable submarine/{upper={text=PB}},
+ special operations force/{upper={squashed text=SOF}},
+ surface warfare/{upper={squashed text=SUW}},
+}}
+
+\CompatTable{sub surface}{lower}{{
+ air independent propulsion/{lower={text=AI}},
+ autonomous control/{lower={squashed text=AUT}},
+ diesel propulsion/{lower={text=D}},
+ diesel type 1/{lower={text=D1}},
+ diesel type 2/{lower={text=D2}},
+ diesel type 3/{lower={text=D3}},
+ expendable/{lower={squashed text=EXP}},
+ nuclear propulsion/{lower={text=N}},
+ nuclear type 1/{lower={text=N1}},
+ nuclear type 2/{lower={text=N2}},
+ nuclear type 3/{lower={text=N3}},
+ nuclear type 4/{lower={text=N4}},
+ nuclear type 5/{lower={text=N5}},
+ nuclear type 6/{lower={text=N6}},
+ remotely piloted/{lower={text=RP}},
+}}
+%</cmp>
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/core.dtx b/macros/latex/contrib/wargame/source/natoapp6c/core.dtx
new file mode 100644
index 0000000000..8a2caf322e
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/core.dtx
@@ -0,0 +1,226 @@
+% \iffalse
+% ====================================================================
+% \fi
+%
+% \subsection{The \texttt{wargame.natoapp6c} \TikZ{} library}
+%
+% In this section we define the code for the Tikz library. The
+% library defines a number of \spec{pic} keys we can use to draw
+% various parts of a marker. The markers conform to NATO App~6(c)
+% specification. The implementation here is heavily inspired by the
+% package \textsf{milsymb} \cite{milsymb} available at CTAN.
+%
+% \iffalse
+%<*natoapp6c>
+% \fi
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Debugging}
+% \begin{Macro}{\natoappdbglvl,\n@to@pp@dbg}
+%
+% Set the debug level, and make debug message.
+%
+% \begin{macrocode}
+\usetikzlibrary{wargame.util}
+\usetikzlibrary{calc}
+\usetikzlibrary{arrows.meta}
+\usetikzlibrary{shapes.symbols}
+\usetikzlibrary{positioning,intersections}
+\newcount\natoappdbglvl\natoappdbglvl=\wargamedbglvl
+\def\n@to@pp@dbg#1#2{%
+ \ifnum#1>\natoappdbglvl\relax\else\message{^^J#2}\fi}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Colours}
+%
+% \begin{Macro}{\c@friendly,
+% \c@hostile,
+% \c@neutral,
+% \c@unknown}
+%
+% Define standard colours for marker affiliations.
+%
+% \begin{tabular}{|l|c|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Name}}
+% & {}\\
+% \hline
+% \spec{friendly} & \tikz{\draw[fill=friendly] (0,0) rectangle(1,.2);}\\
+% \spec{hostile} & \tikz{\draw[fill=hostile ] (0,0) rectangle(1,.2);}\\
+% \spec{neutral} & \tikz{\draw[fill=neutral ] (0,0) rectangle(1,.2);}\\
+% \spec{unknown} & \tikz{\draw[fill=unknown ] (0,0) rectangle(1,.2);}\\
+% \hline
+% \end{tabular}
+%
+% \begin{macrocode}
+\definecolor{friendly}{RGB}{128, 224, 255}
+\definecolor{hostile}{RGB}{255, 128, 128}
+\definecolor{neutral}{RGB}{170, 255, 170}
+\definecolor{unknown}{RGB}{255, 255, 128}
+\tikzset{%
+ faction/.code={%
+ \@ifundefined{natoapp@fac}{%
+ }{\tikzset{fill=\natoapp@fac}}}}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Some dimensions}
+%
+% We define a number of dimensions which we will use in the
+% following. They provide a rough parameterisation of the node
+% shapes, but shouldn't really be changed. We have them here so that
+% the code uses as few hard coded numbers as possible.
+%
+% The dimensions are
+% \begin{itemize}
+% \item Installation `hat' $x$ coordinate
+% \item Installation `hat' height
+% \item Activity width of boxes
+% \item Height of space bar
+% \item Radius of the symbol
+% \end{itemize}
+%
+% \begin{macrocode}
+\newdimen\n@to@pp@inst@x\n@to@pp@inst@x=0.2cm
+\newdimen\n@to@pp@inst@h\n@to@pp@inst@h=0.15cm
+\newdimen\n@to@pp@act@w\n@to@pp@act@w=0.15cm
+\newdimen\n@to@pp@space@h\n@to@pp@space@h=0.1cm
+\newdimen\n@to@pp@r\n@to@pp@r=0.5cm
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Some utilities}
+%
+% \begin{Macro}{\n@to@pp@isclip}
+% This detects if we're in a node that is being used for clipping
+%
+% \begin{macrocode}
+%\def\n@to@pp@cliptoken{clip}
+%\def\n@to@pp@isclip{FF\fi%
+% % \message{^^Jclip is \meaning\pgf@up@clip}%
+% \ifx\pgf@up@clip\n@to@pp@cliptoken}
+\newif\ifn@to@pp@isclip\n@to@pp@isclipfalse
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\n@to@pp@saved@fill@color,\n@to@pp@saved@stroke@color}
+%
+% Macros to hold saved colours.
+
+% \begin{macrocode}
+\let\n@to@pp@saved@stroke@color\relax
+\let\n@to@pp@saved@fill@color\relax
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\n@to@pp@stroke@to@fill,\n@to@pp@restore@fill}
+% Macro to get stroke and fill colours and set the fill colour to
+% the stroke colour, and to restore to the old setting. This is
+% used by the frame shapes below to make sure that filled elements
+% of the frame uses the same colour as the for strokes.
+%
+% \begin{macrocode}
+\newcommand\n@to@pp@stroke@to@fill{%
+ %
+ \expandafter\let\expandafter\n@to@pp@saved@stroke@color%
+ \csname\string\color@pgfstrokecolor\endcsname%
+ %
+ \expandafter\let\expandafter\n@to@pp@saved@fill@color%
+ \csname\string\color@pgffillcolor\endcsname%
+ %
+ \expandafter\pgf@setfillcolor\n@to@pp@saved@stroke@color%
+ %
+ % \message{^^J=== Set fill to stroke color
+ % ^^J Old fill: \meaning\n@to@pp@saved@fill@color
+ % ^^J Old stroke: \meaning\n@to@pp@saved@stroke@color}
+}
+% \end{macrocode}
+%
+%
+%
+% \begin{macrocode}
+\newcommand\n@to@pp@restore@fill{%
+ % \message{^^J=== Restore fill color
+ % ^^J Old fill: \meaning\n@to@pp@saved@fill@color
+ % ^^J Old stroke: \meaning\n@to@pp@saved@stroke@color}
+ %
+ \ifx\n@to@pp@saved@fill@color\relax\else%
+ \expandafter\pgf@setfillcolor\n@to@pp@saved@fill@color%
+ \fi%
+ \global\let\n@to@pp@saved@fill@color\relax
+ \global\let\n@to@pp@saved@stroke@color\relax
+}
+% \end{macrocode}
+%
+% We also make an environment, just to simplify the use
+%
+% \begin{macrocode}
+\newenvironment{n@to@pp@stroketofill}{%
+ \pgfscope%
+ \n@to@pp@stroke@to@fill%
+}{%
+ \n@to@pp@restore@fill%
+ \endpgfscope%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Faction names as macros}
+%
+% \begin{macrocode}
+\def\n@to@pp@friendly{friendly}
+\def\n@to@pp@hostile{hostile}
+\def\n@to@pp@neutral{neutral}
+\def\n@to@pp@unknown{unknown}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Node shapes}
+%
+% Here we define bases for all commands and affiliations. These are
+% defined as node shapes. This means we will render the NATO App6(c)
+% symbols as nodes with embedded nodes of the relevant shape.
+%
+%
+%
+% \input{natoapp6c/frames/base.dtx}
+% \input{natoapp6c/frames/friendly.dtx}
+% \input{natoapp6c/frames/hostile.dtx}
+% \input{natoapp6c/frames/neutral.dtx}
+% \input{natoapp6c/frames/unknown.dtx}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \input{natoapp6c/echelon.dtx}
+% \input{natoapp6c/text.dtx}
+% \input{natoapp6c/shape.dtx}
+% \input{natoapp6c/util.dtx}
+% \input{natoapp6c/weaponry.dtx}
+% \input{natoapp6c/symbols.dtx}
+% \input{natoapp6c/list.dtx}
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/echelon.dtx b/macros/latex/contrib/wargame/source/natoapp6c/echelon.dtx
new file mode 100644
index 0000000000..a63be2ae47
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/echelon.dtx
@@ -0,0 +1,82 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{Echelons}
+%
+%
+% Dimensions
+%
+% \begin{macrocode}
+\def\n@to@pp@e@y{.12}
+\def\n@to@pp@e@yy{.24}
+% \end{macrocode}
+%
+% Paths as macros
+%
+% \begin{macrocode}
+\def\n@to@pp@e@d#1{($(#1*\n@to@pp@e@y,0)$) circle(0.09)}
+\def\n@to@pp@e@b#1{%
+ ($(#1*\n@to@pp@e@y,-\n@to@pp@e@y)$) -- ($(#1*\n@to@pp@e@y,\n@to@pp@e@y)$)}
+\def\n@to@pp@e@x#1{%
+ ($(-\n@to@pp@e@y,-\n@to@pp@e@y)+(#1*\n@to@pp@e@y,0)$)--
+ ++(\n@to@pp@e@yy,\n@to@pp@e@yy)
+ ($(-\n@to@pp@e@y, \n@to@pp@e@y)+(#1*\n@to@pp@e@y,0)$)--
+ ++(\n@to@pp@e@yy,-\n@to@pp@e@yy)}
+% \end{macrocode}
+%
+% Pictures
+%
+% \begin{macrocode}
+\tikzset{
+ pics/natoapp6c/s/echelon/.is choice,
+ pics/natoapp6c/s/echelon/squad/.style={code={
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ \foreach \o in {0}{\n@to@pp@e@d{\o}};}},
+ pics/natoapp6c/s/echelon/section/.style={code={
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ \foreach \o in {-1,1}{\n@to@pp@e@d{\o}};}},
+ pics/natoapp6c/s/echelon/platoon/.style={code={
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ \foreach \o in {-2,0,2}{\n@to@pp@e@d{\o}};}},
+ pics/natoapp6c/s/echelon/company/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {0}{\n@to@pp@e@b{\o}};}},
+ pics/natoapp6c/s/echelon/battalion/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-1,1}{\n@to@pp@e@b{\o}};}},
+ pics/natoapp6c/s/echelon/regiment/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-2,0,2}{\n@to@pp@e@b{\o}};}},
+ pics/natoapp6c/s/echelon/brigade/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {0}{\n@to@pp@e@x{\o}};}},
+ pics/natoapp6c/s/echelon/division/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-1,1}{\n@to@pp@e@x{\o}};}},
+ pics/natoapp6c/s/echelon/corps/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-2,0,2}{\n@to@pp@e@x{\o}};}},
+ pics/natoapp6c/s/echelon/army/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-3,-1,1,3}{\n@to@pp@e@x{\o}};}},
+ pics/natoapp6c/s/echelon/army group/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-4,-2,0,2,4}{\n@to@pp@e@x{\o}};}},
+ pics/natoapp6c/s/echelon/theatre/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-5,-3,-1,1,3,5}{\n@to@pp@e@x{\o}};}},
+ pics/natoapp6c/s/echelon/command/.style={code={
+ \path[draw,pic actions]
+ (-.3,-.1) -- (-.3,.1) (-.4, 0) -- (-.2, 0)
+ ( .3,-.1) -- ( .3,.1) ( .4, 0) -- ( .2, 0);}},
+ pics/natoapp6c/s/echelon/dummy/.style={code={%
+ \path[draw,pic actions] (M.north west) rectangle
+ ($(M.north east)+(0,.1)$);}},
+}
+% \end{macrocode}
+%
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/frames/base.dtx b/macros/latex/contrib/wargame/source/natoapp6c/frames/base.dtx
new file mode 100644
index 0000000000..614bf8f95c
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/frames/base.dtx
@@ -0,0 +1,70 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+%
+% First, the generic bounding box symbol for all markers.
+%
+% \begin{NatoAppFrame}{natoapp6c base}
+%
+% Place-holder symbol. This shape will form the basis of many of
+% the other frame shapes. We define the relevant sizes and
+% anchors.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c base}{%
+ \saveddimen\radius{\pgf@x=\n@to@pp@r}
+ \saveddimen\liney{\pgf@x=.2cm}
+ \saveddimen\linex{\pgf@x=0.41cm}
+ \savedanchor\center{\pgf@x=0cm\pgf@y=0cm}
+ \savedanchor\upper{\pgf@x=0cm\pgf@y=0.35cm}
+ \anchor{north east}{\pgf@x=\radius\pgf@y=\radius}
+ \anchor{south west}{\pgf@x=-\radius\pgf@y=-\radius}
+ \anchor{north west}{\pgf@x=-\radius\pgf@y=\radius}
+ \anchor{south east}{\pgf@x=\radius\pgf@y=-\radius}
+ \anchor{south}{\pgf@x=0cm\pgf@y=-\radius}
+ \anchor{north}{\pgf@x=0cm\pgf@y=\radius}
+ \anchor{west}{\pgf@x=-\radius\pgf@y=0cm}
+ \anchor{east}{\pgf@x=\radius\pgf@y=0cm}
+ \anchor{center}{\center}
+ \anchor{upper}{\upper}
+ \anchor{lower}{\upper\pgf@y=-\pgf@y}
+ \anchor{left}{\upper\pgf@x=-\pgf@y\pgf@y=0cm}
+ \anchor{right}{\upper\pgf@x=\pgf@y\pgf@y=0cm}
+ \savedmacro\init{
+ \def\octagon{%
+ \pgfpathmoveto{\pgfqpointpolar{0} {\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{45} {\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{90} {\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{135}{\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{180}{\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{225}{\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{270}{\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{315}{\radius}}%
+ \pgfpathclose}
+ \def\topline{%
+ \pgfpathmoveto{\pgfqpoint{\linex}{\liney}}%
+ \pgfpathlineto{\pgfqpoint{-\linex}{\liney}}}
+ \def\bottomline{%
+ \pgfpathmoveto{\pgfqpoint{\linex}{-\liney}}%
+ \pgfpathlineto{\pgfqpoint{-\linex}{-\liney}}}
+ }
+ \backgroundpath{%
+ \init%
+ \octagon}
+ \behindforegroundpath{%
+ \init%
+ \octagon%
+ \pgfusepath{stroke}%
+ \topline%
+ \pgfusepath{stroke}%
+ \bottomline%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/frames/friendly.dtx b/macros/latex/contrib/wargame/source/natoapp6c/frames/friendly.dtx
new file mode 100644
index 0000000000..d8d0c4fba7
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/frames/friendly.dtx
@@ -0,0 +1,427 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{`Friendly' node shapes}
+%
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly air}
+%
+% Macro for friendly air shape
+%
+% \begin{macrocode}
+\def\n@to@friendly@@ir{%
+ \southeast \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \cntrl \wg@tmpb=\pgf@y%
+ \pgfpatharc{180}{0}{\wg@tmpa and \wg@tmpb}}
+% \end{macrocode}
+%
+% The friendly air command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly air}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\southeast{%
+ \pgf@x=1.1\n@to@pp@r%
+ \pgf@y=-\n@to@pp@r}
+ \savedanchor\cntrl{\pgf@x=0cm\pgf@y=2.6\n@to@pp@r}
+ \savedanchor\north{\pgf@x=0cm\pgf@y=1.6\n@to@pp@r}
+ \anchor{south east}{\southeast}
+ \anchor{south west}{\southeast\pgf@x=-\pgf@x}
+ \anchor{north east}{\southeast\wg@tmpa=\pgf@x\north\pgf@x=\wg@tmpa}
+ \anchor{north west}{\southeast\wg@tmpa=\pgf@x\north\pgf@x=-\wg@tmpa}
+ \anchor{north}{\north}
+ \anchor{east}{%
+ \north\wg@tmpb\pgf@y%
+ \southeast\wg@tmpc=\pgf@y\wg@tmpa=\pgf@x%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{west}{%
+ \north\wg@tmpb\pgf@y%
+ \southeast\wg@tmpc=\pgf@y\wg@tmpa=\pgf@x%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=-\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{south}{\southeast\pgf@x=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@friendly@@ir%
+ }
+ \behindforegroundpath{%
+ \n@to@friendly@@ir%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly land}
+%
+% Macro for friendly land command
+%
+% \begin{macrocode}
+\def\n@to@friendly@l@nd{%
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpa}{ \wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{ \wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpa}{-\wg@tmpb}}%
+ \pgfclosepath}
+% \end{macrocode}
+%
+% The friendly land command. The most used command frame.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly land}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\northeast{%
+ \pgf@x=1.5\n@to@pp@r%
+ \pgf@y=\n@to@pp@r}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \anchor{south}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{east}{\northeast\pgf@y=0cm}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@friendly@l@nd%
+ }
+ \behindforegroundpath{%
+ \n@to@friendly@l@nd%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly activity}
+%
+% The friendly activity command. Similar to land command, but with
+% boxes in the corners.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly activity}{%
+ \inheritsavedanchors[from=natoapp6c friendly land]
+ \inheritanchor[from=natoapp6c friendly land]{center}
+ \inheritanchor[from=natoapp6c friendly land]{inner north east}
+ \inheritanchor[from=natoapp6c friendly land]{inner north west}
+ \inheritanchor[from=natoapp6c friendly land]{inner south west}
+ \inheritanchor[from=natoapp6c friendly land]{inner south east}
+ \inheritanchor[from=natoapp6c friendly land]{north east}
+ \inheritanchor[from=natoapp6c friendly land]{north west}
+ \inheritanchor[from=natoapp6c friendly land]{south east}
+ \inheritanchor[from=natoapp6c friendly land]{south west}
+ \inheritanchor[from=natoapp6c friendly land]{north}
+ \inheritanchor[from=natoapp6c friendly land]{west}
+ \inheritanchor[from=natoapp6c friendly land]{east}
+ \inheritanchor[from=natoapp6c friendly land]{south}
+ \inheritanchor[from=natoapp6c friendly land]{upper}
+ \inheritanchor[from=natoapp6c friendly land]{lower}
+ \inheritanchor[from=natoapp6c friendly land]{left}
+ \inheritanchor[from=natoapp6c friendly land]{right}
+ \inheritanchor[from=natoapp6c friendly land]{center}
+ \inheritbackgroundpath[from=natoapp6c friendly land]
+ \behindforegroundpath{
+ \begin{n@to@pp@stroketofill}
+ \n@to@friendly@l@nd%
+ \pgfusepath{stroke}
+ %
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb\pgf@y%
+ \wg@tmpc=\wg@tmpa\advance\wg@tmpc-\n@to@pp@act@w
+ \wg@tmpd=\wg@tmpb\advance\wg@tmpd-\n@to@pp@act@w
+ %
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpd}}%
+ \pgfclosepath
+ %
+ \pgfusepath{fill}%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{-\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpc}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{\wg@tmpd}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpc}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{-\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly equipment}
+%
+% The friendly equipment command. A circle.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly equipment}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\northeast{%
+ \pgf@x=\n@to@pp@r%
+ \pgf@y=\n@to@pp@r}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \anchor{south}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{east}{\northeast\pgf@y=0cm}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \northeast\wg@tmpa\pgf@x%
+ \pgfpathcircle{\pgfqpoint{0cm}{0cm}}{\wg@tmpa}
+ }
+ \behindforegroundpath{%
+ \northeast\wg@tmpa\pgf@x%
+ \pgfpathcircle{\pgfqpoint{0cm}{0cm}}{\wg@tmpa}
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly installation}
+%
+% The friendly installation command. Similar to the land command, but
+% with a `hat' on top.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly installation}{%
+ \inheritsavedanchors[from=natoapp6c friendly land]
+ \inheritanchor[from=natoapp6c friendly land]{center}
+ \inheritanchor[from=natoapp6c friendly land]{inner north east}
+ \inheritanchor[from=natoapp6c friendly land]{inner north west}
+ \inheritanchor[from=natoapp6c friendly land]{inner south west}
+ \inheritanchor[from=natoapp6c friendly land]{inner south east}
+ \inheritanchor[from=natoapp6c friendly land]{north east}
+ \inheritanchor[from=natoapp6c friendly land]{north west}
+ \inheritanchor[from=natoapp6c friendly land]{south east}
+ \inheritanchor[from=natoapp6c friendly land]{south west}
+ \inheritanchor[from=natoapp6c friendly land]{north}
+ \inheritanchor[from=natoapp6c friendly land]{west}
+ \inheritanchor[from=natoapp6c friendly land]{east}
+ \inheritanchor[from=natoapp6c friendly land]{south}
+ \inheritanchor[from=natoapp6c friendly land]{upper}
+ \inheritanchor[from=natoapp6c friendly land]{lower}
+ \inheritanchor[from=natoapp6c friendly land]{left}
+ \inheritanchor[from=natoapp6c friendly land]{right}
+ \inheritanchor[from=natoapp6c friendly land]{center}
+ \inheritbackgroundpath[from=natoapp6c friendly land]
+ \behindforegroundpath{
+ \begin{n@to@pp@stroketofill}
+ \n@to@friendly@l@nd%
+ \pgfusepath{stroke}
+ %
+ \northeast \wg@tmpa=\pgf@y%
+ \wg@tmpb=\wg@tmpa\advance\wg@tmpb\n@to@pp@inst@h%
+ %
+ \pgfpathmoveto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpa}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly sea surface}
+%
+% The friendly sea surface command. Same as equipment command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly sea surface}{%
+ \inheritsavedanchors[from=natoapp6c friendly equipment]
+ \inheritanchor[from=natoapp6c friendly equipment]{inner north east}
+ \inheritanchor[from=natoapp6c friendly equipment]{inner north west}
+ \inheritanchor[from=natoapp6c friendly equipment]{inner south west}
+ \inheritanchor[from=natoapp6c friendly equipment]{inner south east}
+ \inheritanchor[from=natoapp6c friendly equipment]{north east}
+ \inheritanchor[from=natoapp6c friendly equipment]{north west}
+ \inheritanchor[from=natoapp6c friendly equipment]{south east}
+ \inheritanchor[from=natoapp6c friendly equipment]{south west}
+ \inheritanchor[from=natoapp6c friendly equipment]{north}
+ \inheritanchor[from=natoapp6c friendly equipment]{west}
+ \inheritanchor[from=natoapp6c friendly equipment]{east}
+ \inheritanchor[from=natoapp6c friendly equipment]{south}
+ \inheritanchor[from=natoapp6c friendly equipment]{upper}
+ \inheritanchor[from=natoapp6c friendly equipment]{lower}
+ \inheritanchor[from=natoapp6c friendly equipment]{left}
+ \inheritanchor[from=natoapp6c friendly equipment]{right}
+ \inheritanchor[from=natoapp6c friendly equipment]{center}
+ \inheritbackgroundpath[from=natoapp6c friendly equipment]
+ \inheritbehindforegroundpath[from=natoapp6c friendly equipment]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly space}
+%
+% The friendly space command. Similar to air command, but with a
+% bar on top.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly space}{%
+ \inheritsavedanchors[from=natoapp6c friendly air]
+ \inheritanchor[from=natoapp6c friendly air]{north east}
+ \inheritanchor[from=natoapp6c friendly air]{north west}
+ \inheritanchor[from=natoapp6c friendly air]{south east}
+ \inheritanchor[from=natoapp6c friendly air]{south west}
+ \inheritanchor[from=natoapp6c friendly air]{north}
+ \inheritanchor[from=natoapp6c friendly air]{west}
+ \inheritanchor[from=natoapp6c friendly air]{east}
+ \inheritanchor[from=natoapp6c friendly air]{south}
+ \inheritanchor[from=natoapp6c friendly air]{upper}
+ \inheritanchor[from=natoapp6c friendly air]{lower}
+ \inheritanchor[from=natoapp6c friendly air]{left}
+ \inheritanchor[from=natoapp6c friendly air]{right}
+ \inheritanchor[from=natoapp6c friendly air]{center}
+ \inheritbackgroundpath[from=natoapp6c friendly air]
+ \behindforegroundpath{%
+ \begin{n@to@pp@stroketofill}
+ \n@to@friendly@@ir%
+ \pgfusepath{stroke,clip}%
+ %
+ \cntrl\wg@tmpa=\pgf@y%
+ \north\wg@tmpb=\pgf@y
+ \advance\wg@tmpb-\n@to@pp@space@h
+ %
+ \pgfpathmoveto{\pgfqpoint{ \n@to@pp@r}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@r}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@r}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \n@to@pp@r}{\wg@tmpb}}%
+ \pgfclosepath%
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly sub surface}
+%
+% Macro for friendly sub surface command
+%
+% \begin{macrocode}
+\def\n@to@friendly@sub{%
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \cntrl \wg@tmpb=\pgf@y%
+ \pgfpatharc{180}{0}{\wg@tmpa and \wg@tmpb}}
+% \end{macrocode}
+%
+% The friendly sub surface command.
+%
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly sub surface}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\northeast{%
+ \pgf@x=1.1\n@to@pp@r%
+ \pgf@y=\n@to@pp@r}
+ \savedanchor\cntrl{\pgf@x=0cm\pgf@y=-2.6\n@to@pp@r}
+ \savedanchor\south{\pgf@x=0cm\pgf@y=-1.6\n@to@pp@r}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\wg@tmpa=\pgf@x\south\pgf@x=\wg@tmpa}
+ \anchor{south west}{\northeast\wg@tmpa=\pgf@x\south\pgf@x=-\wg@tmpa}
+ \anchor{south}{\south}
+ \anchor{east}{
+ \northeast\wg@tmpb=\pgf@y\wg@tmpa=\pgf@x%
+ \south\wg@tmpc\pgf@y%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{west}{
+ \northeast\wg@tmpb=\pgf@y\wg@tmpa=\pgf@x%
+ \south\wg@tmpc\pgf@y%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=-\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@friendly@sub%
+ }
+ \behindforegroundpath{%
+ \n@to@friendly@sub%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/frames/hostile.dtx b/macros/latex/contrib/wargame/source/natoapp6c/frames/hostile.dtx
new file mode 100644
index 0000000000..c3df3f6525
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/frames/hostile.dtx
@@ -0,0 +1,453 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{`Hostile' node shapes}
+%
+%
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile air}
+%
+% The hostile air command
+%
+%
+% Macro for hostile air shape
+%
+%
+% \begin{macrocode}
+\def\n@to@hostile@@ir{%
+ \southeast \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \cntrl \wg@tmpc=\pgf@y%
+ \north \wg@tmpd=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+}
+% \end{macrocode}
+%
+%
+% The hostile air command.
+%
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile air}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\southeast{%
+ \pgf@x=\n@to@pp@r%
+ \pgf@y=-\n@to@pp@r}
+ \savedanchor\cntrl{%
+ \pgf@x=\n@to@pp@r%
+ \pgf@y=0.414\n@to@pp@r% (sqrt(2)-1)
+ }
+ \savedanchor\north{\pgf@x=0cm\pgf@y=1.414\n@to@pp@r}
+ \anchor{south east}{\southeast}
+ \anchor{south west}{\southeast\pgf@x=-\pgf@x}
+ \anchor{north east}{\southeast\wg@tmpa=\pgf@x\north\pgf@x=\wg@tmpa}
+ \anchor{north west}{\southeast\wg@tmpa=\pgf@x\north\pgf@x=-\wg@tmpa}
+ \anchor{north}{\north}
+ \anchor{east}{%
+ \north\wg@tmpb\pgf@y%
+ \southeast\wg@tmpc=\pgf@y\wg@tmpa=\pgf@x%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{west}{%
+ \north\wg@tmpb\pgf@y%
+ \southeast\wg@tmpc=\pgf@y\wg@tmpa=\pgf@x%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=-\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{south}{\southeast\pgf@x=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@hostile@@ir%
+ }
+ \behindforegroundpath{%
+ \n@to@hostile@@ir%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile land}
+%
+% Macro for hostile land command
+%
+% \begin{macrocode}
+\def\n@to@hostile@l@nd{%
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpa}{ 0cm}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{ \wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{ 0cm}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{-\wg@tmpb}}%
+ \pgfclosepath}
+% \end{macrocode}
+%
+% The hostile land command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile land}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\northeast{%
+ \pgf@x=1.414\n@to@pp@r%
+ \pgf@y=1.414\n@to@pp@r}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \anchor{south}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{east}{\northeast\pgf@y=0cm}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@hostile@l@nd%
+ }
+ \behindforegroundpath{%
+ \n@to@hostile@l@nd%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile activity}
+%
+% The hostile activity command. Similar to land command, but with
+% boxes in the corners.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile activity}{%
+ \inheritsavedanchors[from=natoapp6c hostile land]
+ \inheritanchor[from=natoapp6c hostile land]{center}
+ \inheritanchor[from=natoapp6c hostile land]{inner north east}
+ \inheritanchor[from=natoapp6c hostile land]{inner north west}
+ \inheritanchor[from=natoapp6c hostile land]{inner south west}
+ \inheritanchor[from=natoapp6c hostile land]{inner south east}
+ \inheritanchor[from=natoapp6c hostile land]{north east}
+ \inheritanchor[from=natoapp6c hostile land]{north west}
+ \inheritanchor[from=natoapp6c hostile land]{south east}
+ \inheritanchor[from=natoapp6c hostile land]{south west}
+ \inheritanchor[from=natoapp6c hostile land]{north}
+ \inheritanchor[from=natoapp6c hostile land]{west}
+ \inheritanchor[from=natoapp6c hostile land]{east}
+ \inheritanchor[from=natoapp6c hostile land]{south}
+ \inheritanchor[from=natoapp6c hostile land]{upper}
+ \inheritanchor[from=natoapp6c hostile land]{lower}
+ \inheritanchor[from=natoapp6c hostile land]{left}
+ \inheritanchor[from=natoapp6c hostile land]{right}
+ \inheritanchor[from=natoapp6c hostile land]{center}
+ \inheritbackgroundpath[from=natoapp6c hostile land]
+ \behindforegroundpath{
+ \begin{n@to@pp@stroketofill}
+ \n@to@hostile@l@nd%
+ \pgfusepath{stroke}
+ %
+ \northeast \wg@tmpb=\pgf@y%
+ \wg@tmpa=0.707\n@to@pp@act@w
+ \wg@tmpc=\wg@tmpb\advance\wg@tmpc-1.414\n@to@pp@act@w
+ \wg@tmpd=\wg@tmpb\advance\wg@tmpd-\wg@tmpa
+ %
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpa}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{\wg@tmpc}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpc}{0cm}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpd}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpb}{0cm}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpd}{-\wg@tmpa}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpa}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{-\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{-\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpb}{0cm}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpd}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{0cm}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpd}{-\wg@tmpa}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile equipment}
+%
+% The hostile equipment command. Same as land command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile equipment}{%
+ \inheritsavedanchors[from=natoapp6c hostile land]
+ \inheritanchor[from=natoapp6c hostile land]{inner north east}
+ \inheritanchor[from=natoapp6c hostile land]{inner north west}
+ \inheritanchor[from=natoapp6c hostile land]{inner south west}
+ \inheritanchor[from=natoapp6c hostile land]{inner south east}
+ \inheritanchor[from=natoapp6c hostile land]{north east}
+ \inheritanchor[from=natoapp6c hostile land]{north west}
+ \inheritanchor[from=natoapp6c hostile land]{south east}
+ \inheritanchor[from=natoapp6c hostile land]{south west}
+ \inheritanchor[from=natoapp6c hostile land]{north}
+ \inheritanchor[from=natoapp6c hostile land]{west}
+ \inheritanchor[from=natoapp6c hostile land]{east}
+ \inheritanchor[from=natoapp6c hostile land]{south}
+ \inheritanchor[from=natoapp6c hostile land]{upper}
+ \inheritanchor[from=natoapp6c hostile land]{lower}
+ \inheritanchor[from=natoapp6c hostile land]{left}
+ \inheritanchor[from=natoapp6c hostile land]{right}
+ \inheritanchor[from=natoapp6c hostile land]{center}
+ \inheritbackgroundpath[from=natoapp6c hostile land]
+ \inheritbehindforegroundpath[from=natoapp6c hostile land]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile installation}
+%
+% The hostile installation command. Similar to land command, but
+% with a `hat' on top.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile installation}{%
+ \inheritsavedanchors[from=natoapp6c hostile land]
+ \inheritanchor[from=natoapp6c hostile land]{center}
+ \inheritanchor[from=natoapp6c hostile land]{inner north east}
+ \inheritanchor[from=natoapp6c hostile land]{inner north west}
+ \inheritanchor[from=natoapp6c hostile land]{inner south west}
+ \inheritanchor[from=natoapp6c hostile land]{inner south east}
+ \inheritanchor[from=natoapp6c hostile land]{north east}
+ \inheritanchor[from=natoapp6c hostile land]{north west}
+ \inheritanchor[from=natoapp6c hostile land]{south east}
+ \inheritanchor[from=natoapp6c hostile land]{south west}
+ \inheritanchor[from=natoapp6c hostile land]{north}
+ \inheritanchor[from=natoapp6c hostile land]{west}
+ \inheritanchor[from=natoapp6c hostile land]{east}
+ \inheritanchor[from=natoapp6c hostile land]{south}
+ \inheritanchor[from=natoapp6c hostile land]{upper}
+ \inheritanchor[from=natoapp6c hostile land]{lower}
+ \inheritanchor[from=natoapp6c hostile land]{left}
+ \inheritanchor[from=natoapp6c hostile land]{right}
+ \inheritanchor[from=natoapp6c hostile land]{center}
+ \inheritbackgroundpath[from=natoapp6c hostile land]
+ \behindforegroundpath{
+ \begin{n@to@pp@stroketofill}
+ \n@to@hostile@l@nd%
+ \pgfusepath{stroke}
+ %
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb\pgf@y%
+ \wg@tmpc=\wg@tmpb
+ \advance\wg@tmpc\n@to@pp@inst@h%
+ \advance\wg@tmpc-0.05cm%
+ %
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpa}{0cm}}
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpa}{\wg@tmpc}}
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpc}}
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{0cm}}
+ \pgfpathlineto{\pgfqpoint{ 0cm}{\wg@tmpb}}
+ \pgfclosepath%
+ \pgfusepath{clip}
+ %
+ \wg@tmpd=\wg@tmpb%
+ \advance\wg@tmpd-\n@to@pp@inst@h%
+ %
+ \pgfpathmoveto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpd}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile sea surface}
+%
+% The hostile sea surface command. Same as land command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile sea surface}{%
+ \inheritsavedanchors[from=natoapp6c hostile equipment]
+ \inheritanchor[from=natoapp6c hostile equipment]{inner north east}
+ \inheritanchor[from=natoapp6c hostile equipment]{inner north west}
+ \inheritanchor[from=natoapp6c hostile equipment]{inner south west}
+ \inheritanchor[from=natoapp6c hostile equipment]{inner south east}
+ \inheritanchor[from=natoapp6c hostile equipment]{north east}
+ \inheritanchor[from=natoapp6c hostile equipment]{north west}
+ \inheritanchor[from=natoapp6c hostile equipment]{south east}
+ \inheritanchor[from=natoapp6c hostile equipment]{south west}
+ \inheritanchor[from=natoapp6c hostile equipment]{north}
+ \inheritanchor[from=natoapp6c hostile equipment]{west}
+ \inheritanchor[from=natoapp6c hostile equipment]{east}
+ \inheritanchor[from=natoapp6c hostile equipment]{south}
+ \inheritanchor[from=natoapp6c hostile equipment]{upper}
+ \inheritanchor[from=natoapp6c hostile equipment]{lower}
+ \inheritanchor[from=natoapp6c hostile equipment]{left}
+ \inheritanchor[from=natoapp6c hostile equipment]{right}
+ \inheritanchor[from=natoapp6c hostile equipment]{center}
+ \inheritbackgroundpath[from=natoapp6c hostile equipment]
+ \inheritbehindforegroundpath[from=natoapp6c hostile equipment]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile space}
+%
+% The hostile space command. Similar to air command, but with bar on
+% top.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile space}{%
+ \inheritsavedanchors[from=natoapp6c hostile air]
+ \inheritanchor[from=natoapp6c hostile air]{north east}
+ \inheritanchor[from=natoapp6c hostile air]{north west}
+ \inheritanchor[from=natoapp6c hostile air]{south east}
+ \inheritanchor[from=natoapp6c hostile air]{south west}
+ \inheritanchor[from=natoapp6c hostile air]{north}
+ \inheritanchor[from=natoapp6c hostile air]{west}
+ \inheritanchor[from=natoapp6c hostile air]{east}
+ \inheritanchor[from=natoapp6c hostile air]{south}
+ \inheritanchor[from=natoapp6c hostile air]{upper}
+ \inheritanchor[from=natoapp6c hostile air]{lower}
+ \inheritanchor[from=natoapp6c hostile air]{left}
+ \inheritanchor[from=natoapp6c hostile air]{right}
+ \inheritanchor[from=natoapp6c hostile air]{center}
+ \inheritbackgroundpath[from=natoapp6c hostile air]
+ \behindforegroundpath{%
+ \begin{n@to@pp@stroketofill}
+ \n@to@hostile@@ir%
+ \pgfusepath{stroke,clip}%
+ %
+ \north\wg@tmpa=\pgf@y\wg@tmpb=\pgf@y
+ \advance\wg@tmpb-\n@to@pp@space@h
+ %
+ \pgfpathmoveto{\pgfqpoint{ \n@to@pp@r}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@r}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@r}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \n@to@pp@r}{\wg@tmpb}}%
+ \pgfclosepath%
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile sub surface}
+%
+% Macro for hostile sub surface command
+%
+% \begin{macrocode}
+\def\n@to@hostile@sub{%
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \cntrl \wg@tmpc=\pgf@y%
+ \south \wg@tmpd=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+}
+% \end{macrocode}
+%
+% The hostile sub surface command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile sub surface}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\northeast{%
+ \pgf@x=\n@to@pp@r%
+ \pgf@y=\n@to@pp@r}
+ \savedanchor\cntrl{\pgf@x=\n@to@pp@r\pgf@y=-0.414\n@to@pp@r}
+ \savedanchor\south{\pgf@x=0cm\pgf@y=-1.414\n@to@pp@r}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\wg@tmpa=\pgf@x\south\pgf@x=\wg@tmpa}
+ \anchor{south west}{\northeast\wg@tmpa=\pgf@x\south\pgf@x=-\wg@tmpa}
+ \anchor{south}{\south}
+ \anchor{east}{
+ \northeast\wg@tmpb=\pgf@y\wg@tmpa=\pgf@x%
+ \south\wg@tmpc\pgf@y%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{west}{
+ \northeast\wg@tmpb=\pgf@y\wg@tmpa=\pgf@x%
+ \south\wg@tmpc\pgf@y%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=-\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@hostile@sub%
+ }
+ \behindforegroundpath{%
+ \n@to@hostile@sub%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/frames/neutral.dtx b/macros/latex/contrib/wargame/source/natoapp6c/frames/neutral.dtx
new file mode 100644
index 0000000000..b0b18780a9
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/frames/neutral.dtx
@@ -0,0 +1,405 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{`Neutral' node shapes}
+%
+%
+% Macro for neutral shapes
+%
+% \begin{macrocode}
+\def\n@to@pp@neutr@l@init{%
+ \northeast\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \def\n@to@pp@neutr@l@left {\pgflineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@right {\pgflineto{\pgfqpoint{ \wg@tmpa}{ \wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@top {\pgflineto{\pgfqpoint{-\wg@tmpa}{ \wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@bottom{\pgflineto{\pgfqpoint{ \wg@tmpa}{-\wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@nw {\pgfmoveto{\pgfqpoint{-\wg@tmpa}{ \wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@ne {\pgfmoveto{\pgfqpoint{ \wg@tmpa}{ \wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@se {\pgfmoveto{\pgfqpoint{ \wg@tmpa}{-\wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@sw {\pgfmoveto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpb}}}%
+}
+% \end{macrocode}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral air}
+%
+% The neutral air command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral air}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\northeast{\pgf@x=\n@to@pp@r\pgf@y=\n@to@pp@r}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \anchor{east}{\northeast\pgf@y=0cm}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0cm}
+ \anchor{south}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@se
+ \n@to@pp@neutr@l@right%
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ }
+ \behindforegroundpath{%
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@se
+ \n@to@pp@neutr@l@right%
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral land}
+%
+% The neutral land command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral land}{%
+ \inheritsavedanchors[from=natoapp6c neutral air]
+ \inheritanchor[from=natoapp6c neutral air]{north east}
+ \inheritanchor[from=natoapp6c neutral air]{north west}
+ \inheritanchor[from=natoapp6c neutral air]{south east}
+ \inheritanchor[from=natoapp6c neutral air]{south west}
+ \inheritanchor[from=natoapp6c neutral air]{north}
+ \inheritanchor[from=natoapp6c neutral air]{west}
+ \inheritanchor[from=natoapp6c neutral air]{east}
+ \inheritanchor[from=natoapp6c neutral air]{south}
+ \inheritanchor[from=natoapp6c neutral air]{upper}
+ \inheritanchor[from=natoapp6c neutral air]{lower}
+ \inheritanchor[from=natoapp6c neutral air]{left}
+ \inheritanchor[from=natoapp6c neutral air]{right}
+ \inheritanchor[from=natoapp6c neutral air]{center}
+ \backgroundpath{%
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@ne
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ \n@to@pp@neutr@l@bottom%
+ \pgfclosepath
+ }
+ \behindforegroundpath{%
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@ne
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ \n@to@pp@neutr@l@bottom%
+ \pgfclosepath
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral activity}
+%
+% The neutral activity command. Similar to land command but with
+% boxes added in the corners.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral activity}{%
+ \inheritsavedanchors[from=natoapp6c neutral land]
+ \inheritanchor[from=natoapp6c neutral land]{center}
+ \inheritanchor[from=natoapp6c neutral land]{inner north east}
+ \inheritanchor[from=natoapp6c neutral land]{inner north west}
+ \inheritanchor[from=natoapp6c neutral land]{inner south west}
+ \inheritanchor[from=natoapp6c neutral land]{inner south east}
+ \inheritanchor[from=natoapp6c neutral land]{north east}
+ \inheritanchor[from=natoapp6c neutral land]{north west}
+ \inheritanchor[from=natoapp6c neutral land]{south east}
+ \inheritanchor[from=natoapp6c neutral land]{south west}
+ \inheritanchor[from=natoapp6c neutral land]{north}
+ \inheritanchor[from=natoapp6c neutral land]{west}
+ \inheritanchor[from=natoapp6c neutral land]{east}
+ \inheritanchor[from=natoapp6c neutral land]{south}
+ \inheritanchor[from=natoapp6c neutral land]{upper}
+ \inheritanchor[from=natoapp6c neutral land]{lower}
+ \inheritanchor[from=natoapp6c neutral land]{left}
+ \inheritanchor[from=natoapp6c neutral land]{right}
+ \inheritanchor[from=natoapp6c neutral land]{center}
+ \inheritbackgroundpath[from=natoapp6c neutral land]
+ \behindforegroundpath{
+ \begin{n@to@pp@stroketofill}
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@ne
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ \n@to@pp@neutr@l@bottom%
+ \pgfclosepath
+ \pgfusepath{stroke}
+ %
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb\pgf@y%
+ \wg@tmpc=\wg@tmpa\advance\wg@tmpc-\n@to@pp@act@w
+ \wg@tmpd=\wg@tmpb\advance\wg@tmpd-\n@to@pp@act@w
+ %
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpd}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{-\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpc}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{\wg@tmpd}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpc}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{-\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral equipment}
+%
+% The neutral equipment command. Same as land command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral equipment}{%
+ \inheritsavedanchors[from=natoapp6c neutral land]
+ \inheritanchor[from=natoapp6c neutral land]{center}
+ \inheritanchor[from=natoapp6c neutral land]{inner north east}
+ \inheritanchor[from=natoapp6c neutral land]{inner north west}
+ \inheritanchor[from=natoapp6c neutral land]{inner south west}
+ \inheritanchor[from=natoapp6c neutral land]{inner south east}
+ \inheritanchor[from=natoapp6c neutral land]{north east}
+ \inheritanchor[from=natoapp6c neutral land]{north west}
+ \inheritanchor[from=natoapp6c neutral land]{south east}
+ \inheritanchor[from=natoapp6c neutral land]{south west}
+ \inheritanchor[from=natoapp6c neutral land]{north}
+ \inheritanchor[from=natoapp6c neutral land]{west}
+ \inheritanchor[from=natoapp6c neutral land]{east}
+ \inheritanchor[from=natoapp6c neutral land]{south}
+ \inheritanchor[from=natoapp6c neutral land]{upper}
+ \inheritanchor[from=natoapp6c neutral land]{lower}
+ \inheritanchor[from=natoapp6c neutral land]{left}
+ \inheritanchor[from=natoapp6c neutral land]{right}
+ \inheritanchor[from=natoapp6c neutral land]{center}
+ \inheritbackgroundpath[from=natoapp6c neutral land]
+ \inheritbehindbackgroundpath[from=natoapp6c neutral land]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral installation}
+%
+% The neutral installation command. Similar to land command but
+% with a `hat' on top.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral installation}{%
+ \inheritsavedanchors[from=natoapp6c neutral land]
+ \inheritanchor[from=natoapp6c neutral land]{center}
+ \inheritanchor[from=natoapp6c neutral land]{inner north east}
+ \inheritanchor[from=natoapp6c neutral land]{inner north west}
+ \inheritanchor[from=natoapp6c neutral land]{inner south west}
+ \inheritanchor[from=natoapp6c neutral land]{inner south east}
+ \inheritanchor[from=natoapp6c neutral land]{north east}
+ \inheritanchor[from=natoapp6c neutral land]{north west}
+ \inheritanchor[from=natoapp6c neutral land]{south east}
+ \inheritanchor[from=natoapp6c neutral land]{south west}
+ \inheritanchor[from=natoapp6c neutral land]{north}
+ \inheritanchor[from=natoapp6c neutral land]{west}
+ \inheritanchor[from=natoapp6c neutral land]{east}
+ \inheritanchor[from=natoapp6c neutral land]{south}
+ \inheritanchor[from=natoapp6c neutral land]{upper}
+ \inheritanchor[from=natoapp6c neutral land]{lower}
+ \inheritanchor[from=natoapp6c neutral land]{left}
+ \inheritanchor[from=natoapp6c neutral land]{right}
+ \inheritanchor[from=natoapp6c neutral land]{center}
+ \inheritbackgroundpath[from=natoapp6c neutral land]
+ \behindforegroundpath{
+ \begin{n@to@pp@stroketofill}
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@ne
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ \n@to@pp@neutr@l@bottom%
+ \pgfclosepath
+ \pgfusepath{stroke}
+ %
+ \northeast \wg@tmpa=\pgf@y%
+ \wg@tmpb=\wg@tmpa\advance\wg@tmpb\n@to@pp@inst@h%
+ %
+ \pgfpathmoveto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpa}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral sea surface}
+%
+% The neutral sea surface command. Same as land command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral sea surface}{%
+ \inheritsavedanchors[from=natoapp6c neutral equipment]
+ \inheritanchor[from=natoapp6c neutral equipment]{inner north east}
+ \inheritanchor[from=natoapp6c neutral equipment]{inner north west}
+ \inheritanchor[from=natoapp6c neutral equipment]{inner south west}
+ \inheritanchor[from=natoapp6c neutral equipment]{inner south east}
+ \inheritanchor[from=natoapp6c neutral equipment]{north east}
+ \inheritanchor[from=natoapp6c neutral equipment]{north west}
+ \inheritanchor[from=natoapp6c neutral equipment]{south east}
+ \inheritanchor[from=natoapp6c neutral equipment]{south west}
+ \inheritanchor[from=natoapp6c neutral equipment]{north}
+ \inheritanchor[from=natoapp6c neutral equipment]{west}
+ \inheritanchor[from=natoapp6c neutral equipment]{east}
+ \inheritanchor[from=natoapp6c neutral equipment]{south}
+ \inheritanchor[from=natoapp6c neutral equipment]{upper}
+ \inheritanchor[from=natoapp6c neutral equipment]{lower}
+ \inheritanchor[from=natoapp6c neutral equipment]{left}
+ \inheritanchor[from=natoapp6c neutral equipment]{right}
+ \inheritanchor[from=natoapp6c neutral equipment]{center}
+ \inheritbackgroundpath[from=natoapp6c neutral equipment]
+ \inheritbehindforegroundpath[from=natoapp6c neutral equipment]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral space}
+%
+% The neutral space command. Similar to air command but with a
+% bar.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral space}{%
+ \inheritsavedanchors[from=natoapp6c neutral air]
+ \inheritanchor[from=natoapp6c neutral air]{north east}
+ \inheritanchor[from=natoapp6c neutral air]{north west}
+ \inheritanchor[from=natoapp6c neutral air]{south east}
+ \inheritanchor[from=natoapp6c neutral air]{south west}
+ \inheritanchor[from=natoapp6c neutral air]{north}
+ \inheritanchor[from=natoapp6c neutral air]{west}
+ \inheritanchor[from=natoapp6c neutral air]{east}
+ \inheritanchor[from=natoapp6c neutral air]{south}
+ \inheritanchor[from=natoapp6c neutral air]{upper}
+ \inheritanchor[from=natoapp6c neutral air]{lower}
+ \inheritanchor[from=natoapp6c neutral air]{left}
+ \inheritanchor[from=natoapp6c neutral air]{right}
+ \inheritanchor[from=natoapp6c neutral air]{center}
+ \inheritbackgroundpath[from=natoapp6c neutral air]
+ \behindforegroundpath{%
+ \begin{n@to@pp@stroketofill}
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@se
+ \n@to@pp@neutr@l@right%
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ \pgfusepath{stroke}%
+ %
+ \n@to@pp@neutr@l@ne
+ \n@to@pp@neutr@l@top%
+ \northeast\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \advance\wg@tmpb-\n@to@pp@space@h
+ %
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpa}{\wg@tmpb}}%
+ \pgfclosepath%
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral sub surface}
+%
+% The neutral sub surface command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral sub surface}{%
+ \inheritsavedanchors[from=natoapp6c neutral air]
+ \inheritanchor[from=natoapp6c neutral air]{north east}
+ \inheritanchor[from=natoapp6c neutral air]{north west}
+ \inheritanchor[from=natoapp6c neutral air]{south east}
+ \inheritanchor[from=natoapp6c neutral air]{south west}
+ \inheritanchor[from=natoapp6c neutral air]{north}
+ \inheritanchor[from=natoapp6c neutral air]{west}
+ \inheritanchor[from=natoapp6c neutral air]{east}
+ \inheritanchor[from=natoapp6c neutral air]{south}
+ \inheritanchor[from=natoapp6c neutral air]{upper}
+ \inheritanchor[from=natoapp6c neutral air]{lower}
+ \inheritanchor[from=natoapp6c neutral air]{left}
+ \inheritanchor[from=natoapp6c neutral air]{right}
+ \inheritanchor[from=natoapp6c neutral air]{center}
+ \backgroundpath{%
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@nw
+ \n@to@pp@neutr@l@left%
+ \n@to@pp@neutr@l@bottom%
+ \n@to@pp@neutr@l@right%
+ }
+ \behindforegroundpath{%
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@nw
+ \n@to@pp@neutr@l@left%
+ \n@to@pp@neutr@l@bottom%
+ \n@to@pp@neutr@l@right%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/frames/unknown.dtx b/macros/latex/contrib/wargame/source/natoapp6c/frames/unknown.dtx
new file mode 100644
index 0000000000..e6bd3aec38
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/frames/unknown.dtx
@@ -0,0 +1,483 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{`Unknown' node shapes}
+%
+%
+% Macro to define unknown path elements
+%
+% \begin{macrocode}
+\def\n@to@pp@unknown@init{%
+ \def\n@to@pp@unknown@top{%
+ \innernortheast \wg@tmpa=\pgf@x%
+ \cntrlnortheast \wg@tmpb=\pgf@x%
+ \pgfpathcurveto{%
+ \pgfqpoint{ \wg@tmpa}{\wg@tmpb}}{%
+ \pgfqpoint{-\wg@tmpa}{\wg@tmpb}}{%
+ \pgfqpoint{-\wg@tmpa}{\wg@tmpa}}}
+ \def\n@to@pp@unknown@left{%
+ \innernortheast \wg@tmpa=\pgf@x%
+ \cntrlnortheast \wg@tmpb=\pgf@x%
+ \pgfpathcurveto{%
+ \pgfqpoint{-\wg@tmpb}{ \wg@tmpa}}{%
+ \pgfqpoint{-\wg@tmpb}{-\wg@tmpa}}{%
+ \pgfqpoint{-\wg@tmpa}{-\wg@tmpa}}}
+ \def\n@to@pp@unknown@bottom{%
+ \innernortheast \wg@tmpa=\pgf@x%
+ \cntrlnortheast \wg@tmpb=\pgf@x%
+ \pgfpathcurveto{%
+ \pgfqpoint{-\wg@tmpa}{-\wg@tmpb}}{%
+ \pgfqpoint{ \wg@tmpa}{-\wg@tmpb}}{%
+ \pgfqpoint{ \wg@tmpa}{-\wg@tmpa}}}
+ \def\n@to@pp@unknown@right{%
+ \innernortheast \wg@tmpa=\pgf@x%
+ \cntrlnortheast \wg@tmpb=\pgf@x%
+ \pgfpathcurveto{%
+ \pgfqpoint{ \wg@tmpb}{-\wg@tmpa}}{%
+ \pgfqpoint{ \wg@tmpb}{ \wg@tmpa}}{%
+ \pgfqpoint{ \wg@tmpa}{ \wg@tmpa}}}
+}
+% \end{macrocode}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown land}
+%
+% The unknown land command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown land}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\innernortheast{\pgf@x=.7\n@to@pp@r\pgf@y=.7\n@to@pp@r}
+ \savedanchor\cntrlnortheast{\pgf@x=1.6\n@to@pp@r\pgf@y=1.6\n@to@pp@r}
+ \savedanchor\northeast{\pgf@x=1.4\n@to@pp@r\pgf@y=1.4\n@to@pp@r}
+ \anchor{inner north east}{\innernortheast}
+ \anchor{inner north west}{\innernortheast\pgf@x=-\pgf@x}
+ \anchor{inner south west}{\innernortheast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{inner south east}{\innernortheast\pgf@y=-\pgf@y}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \anchor{east}{\northeast\pgf@y=0cm}
+ \anchor{south}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0cm}
+ \inheritanchor[from=natoapp6c base]{center}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \backgroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \n@to@pp@unknown@bottom%
+ }
+ \behindforegroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \n@to@pp@unknown@bottom%
+ \pgfusepath{stroke}}
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown air}
+%
+% The unknown air command. To consider: Should clipping path extend
+% below the actual symbol to include that part of the base symbol?
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown air}{%
+ \inheritsavedanchors[from=natoapp6c unknown land]
+ \inheritanchor[from=natoapp6c unknown land]{inner north east}
+ \inheritanchor[from=natoapp6c unknown land]{inner north west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south east}
+ \inheritanchor[from=natoapp6c unknown land]{north east}
+ \inheritanchor[from=natoapp6c unknown land]{north west}
+ \inheritanchor[from=natoapp6c unknown land]{north}
+ \inheritanchor[from=natoapp6c unknown land]{west}
+ \inheritanchor[from=natoapp6c unknown land]{east}
+ \inheritanchor[from=natoapp6c unknown land]{upper}
+ \inheritanchor[from=natoapp6c unknown land]{lower}
+ \inheritanchor[from=natoapp6c unknown land]{left}
+ \inheritanchor[from=natoapp6c unknown land]{right}
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \anchor{south}{\innernortheast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{south east}{
+ \northeast\wg@tmpa=\pgf@x
+ \innernortheast\pgf@y=-\pgf@y
+ \pgf@x=\wg@tmpa}
+ \anchor{south west}{
+ \northeast\wg@tmpa=\pgf@x
+ \innernortheast\pgf@y=-\pgf@y
+ \pgf@x=-\wg@tmpa}
+ \backgroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \ifn@to@pp@isclip
+ \pgfpathlineto{\pgfqpoint{0cm}{-\radius}}
+ \pgfpathclose
+ \fi
+ }
+ \behindforegroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown activity}
+%
+% The unknown activity command. Similar to land command, but with
+% boxes in the the `corners'.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown activity}{%
+ \inheritsavedanchors[from=natoapp6c unknown land]
+ \inheritanchor[from=natoapp6c unknown land]{inner north east}
+ \inheritanchor[from=natoapp6c unknown land]{inner north west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south east}
+ \inheritanchor[from=natoapp6c unknown land]{north east}
+ \inheritanchor[from=natoapp6c unknown land]{north west}
+ \inheritanchor[from=natoapp6c unknown land]{south east}
+ \inheritanchor[from=natoapp6c unknown land]{south west}
+ \inheritanchor[from=natoapp6c unknown land]{north}
+ \inheritanchor[from=natoapp6c unknown land]{west}
+ \inheritanchor[from=natoapp6c unknown land]{east}
+ \inheritanchor[from=natoapp6c unknown land]{south}
+ \inheritanchor[from=natoapp6c unknown land]{upper}
+ \inheritanchor[from=natoapp6c unknown land]{lower}
+ \inheritanchor[from=natoapp6c unknown land]{left}
+ \inheritanchor[from=natoapp6c unknown land]{right}
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \inheritbackgroundpath[from=natoapp6c unknown land]
+ \behindforegroundpath{
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \begin{n@to@pp@stroketofill}
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \n@to@pp@unknown@bottom%
+ \pgfusepath{stroke,clip}
+ %
+ \northeast\wg@tmpa\pgf@x
+ \advance\wg@tmpa0.005cm
+ \wg@tmpb=\wg@tmpa
+ \advance\wg@tmpb-\n@to@pp@act@w
+ \wg@tmpc=\n@to@pp@act@w
+ \divide\wg@tmpc2
+ %
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpc}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpc}{\wg@tmpb}}%
+ \pgfclosepath%
+ \pgfusepath{fill}
+ %
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpc}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{-\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpc}{-\wg@tmpa}}%
+ \pgfclosepath%
+ \pgfusepath{fill}
+ %
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpa}{ \wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpb}{ \wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpb}{-\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpa}{-\wg@tmpc}}%
+ \pgfclosepath%
+ \pgfusepath{fill}
+ %
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpb}{ \wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{ \wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpb}{-\wg@tmpc}}%
+ \pgfclosepath%
+ \pgfusepath{fill}
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown equipment}
+%
+% The unknown equipment command. Same as land command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown equipment}{%
+ \inheritsavedanchors[from=natoapp6c unknown land]
+ \inheritanchor[from=natoapp6c unknown land]{inner north east}
+ \inheritanchor[from=natoapp6c unknown land]{inner north west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south east}
+ \inheritanchor[from=natoapp6c unknown land]{north east}
+ \inheritanchor[from=natoapp6c unknown land]{north west}
+ \inheritanchor[from=natoapp6c unknown land]{south east}
+ \inheritanchor[from=natoapp6c unknown land]{south west}
+ \inheritanchor[from=natoapp6c unknown land]{north}
+ \inheritanchor[from=natoapp6c unknown land]{west}
+ \inheritanchor[from=natoapp6c unknown land]{east}
+ \inheritanchor[from=natoapp6c unknown land]{south}
+ \inheritanchor[from=natoapp6c unknown land]{upper}
+ \inheritanchor[from=natoapp6c unknown land]{lower}
+ \inheritanchor[from=natoapp6c unknown land]{left}
+ \inheritanchor[from=natoapp6c unknown land]{right}
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \inheritbackgroundpath[from=natoapp6c unknown land]
+ \inheritbehindforegroundpath[from=natoapp6c unknown land]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown installation}
+%
+% The unknown installation command. Similar to land command, but
+% with a `hat' on top. Note, NATO App6(d) makes the `hat' lower
+% part disconnected from the main symbol. I find that ugly, so we
+% do it like NATO App6(c).
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown installation}{%
+ \inheritsavedanchors[from=natoapp6c unknown land]
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \inheritanchor[from=natoapp6c unknown land]{inner north east}
+ \inheritanchor[from=natoapp6c unknown land]{inner north west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south east}
+ \inheritanchor[from=natoapp6c unknown land]{north east}
+ \inheritanchor[from=natoapp6c unknown land]{north west}
+ \inheritanchor[from=natoapp6c unknown land]{south east}
+ \inheritanchor[from=natoapp6c unknown land]{south west}
+ \inheritanchor[from=natoapp6c unknown land]{north}
+ \inheritanchor[from=natoapp6c unknown land]{west}
+ \inheritanchor[from=natoapp6c unknown land]{east}
+ \inheritanchor[from=natoapp6c unknown land]{south}
+ \inheritanchor[from=natoapp6c unknown land]{upper}
+ \inheritanchor[from=natoapp6c unknown land]{lower}
+ \inheritanchor[from=natoapp6c unknown land]{left}
+ \inheritanchor[from=natoapp6c unknown land]{right}
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \inheritbackgroundpath[from=natoapp6c unknown land]
+ \behindforegroundpath{
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \n@to@pp@unknown@bottom%
+ \pgfusepath{stroke}
+ %
+ \begin{n@to@pp@stroketofill}
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpa}}%
+ \n@to@pp@unknown@top %
+ %
+ \northeast\wg@tmpb=\pgf@y\wg@tmpc=\pgf@y%
+ \advance\wg@tmpb\n@to@pp@inst@h%
+ \advance\wg@tmpb-0.05cm%
+ \advance\wg@tmpc-\n@to@pp@inst@h%
+ \advance\wg@tmpc-\n@to@pp@inst@h%
+ %
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpa}{\wg@tmpb}}%
+ \pgfclosepath%
+ \pgfusepath{clip}%
+ %
+ \pgfpathmoveto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpc}}%
+ \pgfclosepath%
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown sea surface}
+%
+% The unknown sea surface command. Same as land command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown sea surface}{%
+ \inheritsavedanchors[from=natoapp6c unknown land]
+ \inheritanchor[from=natoapp6c unknown land]{inner north east}
+ \inheritanchor[from=natoapp6c unknown land]{inner north west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south east}
+ \inheritanchor[from=natoapp6c unknown land]{north east}
+ \inheritanchor[from=natoapp6c unknown land]{north west}
+ \inheritanchor[from=natoapp6c unknown land]{south east}
+ \inheritanchor[from=natoapp6c unknown land]{south west}
+ \inheritanchor[from=natoapp6c unknown land]{north}
+ \inheritanchor[from=natoapp6c unknown land]{west}
+ \inheritanchor[from=natoapp6c unknown land]{east}
+ \inheritanchor[from=natoapp6c unknown land]{south}
+ \inheritanchor[from=natoapp6c unknown land]{upper}
+ \inheritanchor[from=natoapp6c unknown land]{lower}
+ \inheritanchor[from=natoapp6c unknown land]{left}
+ \inheritanchor[from=natoapp6c unknown land]{right}
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \inheritbackgroundpath[from=natoapp6c unknown land]
+ \inheritbehindforegroundpath[from=natoapp6c unknown land]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown space}
+%
+% The unknown space command. Similar to air command, but with a top
+% bar.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown space}{%
+ \inheritsavedanchors[from=natoapp6c unknown air]
+ \inheritanchor[from=natoapp6c unknown air]{inner north east}
+ \inheritanchor[from=natoapp6c unknown air]{inner north west}
+ \inheritanchor[from=natoapp6c unknown air]{inner south west}
+ \inheritanchor[from=natoapp6c unknown air]{inner south east}
+ \inheritanchor[from=natoapp6c unknown air]{north east}
+ \inheritanchor[from=natoapp6c unknown air]{north west}
+ \inheritanchor[from=natoapp6c unknown air]{south east}
+ \inheritanchor[from=natoapp6c unknown air]{south west}
+ \inheritanchor[from=natoapp6c unknown air]{north}
+ \inheritanchor[from=natoapp6c unknown air]{west}
+ \inheritanchor[from=natoapp6c unknown air]{east}
+ \inheritanchor[from=natoapp6c unknown air]{south}
+ \inheritanchor[from=natoapp6c unknown air]{upper}
+ \inheritanchor[from=natoapp6c unknown air]{lower}
+ \inheritanchor[from=natoapp6c unknown air]{left}
+ \inheritanchor[from=natoapp6c unknown air]{right}
+ \inheritanchor[from=natoapp6c unknown air]{center}
+ \inheritbackgroundpath[from=natoapp6c unknown air]
+ \behindforegroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \begin{n@to@pp@stroketofill}
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \pgfusepath{stroke,clip}%
+ %
+ \northeast\wg@tmpa=\pgf@y\wg@tmpb=\pgf@y
+ \advance\wg@tmpb-\n@to@pp@space@h
+ %
+ \pgfpathmoveto{\pgfqpoint{ \radius}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\radius}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\radius}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \radius}{\wg@tmpb}}%
+ \pgfclosepath%
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown sub surface}
+%
+% The unknown sub surface command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown sub surface}{%
+ \inheritsavedanchors[from=natoapp6c unknown land]
+ \inheritanchor[from=natoapp6c unknown land]{inner north east}
+ \inheritanchor[from=natoapp6c unknown land]{inner north west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south east}
+ \inheritanchor[from=natoapp6c unknown land]{south east}
+ \inheritanchor[from=natoapp6c unknown land]{south west}
+ \inheritanchor[from=natoapp6c unknown land]{south}
+ \inheritanchor[from=natoapp6c unknown land]{west}
+ \inheritanchor[from=natoapp6c unknown land]{east}
+ \inheritanchor[from=natoapp6c unknown land]{upper}
+ \inheritanchor[from=natoapp6c unknown land]{lower}
+ \inheritanchor[from=natoapp6c unknown land]{left}
+ \inheritanchor[from=natoapp6c unknown land]{right}
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \anchor{north}{\innernortheast\pgf@x=0cm}
+ \anchor{north east}{
+ \northeast\wg@tmpa=\pgf@x
+ \innernortheast\pgf@y=\pgf@y
+ \pgf@x=\wg@tmpa}
+ \anchor{north west}{
+ \northeast\wg@tmpa=\pgf@x
+ \innernortheast\pgf@y=\pgf@y
+ \pgf@x=-\wg@tmpa}
+ \backgroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpa}{\wg@tmpa}}%
+ \n@to@pp@unknown@left %
+ \n@to@pp@unknown@bottom %
+ \n@to@pp@unknown@right %
+ \ifn@to@pp@isclip
+ \pgfpathlineto{\pgfqpoint{0cm}{\radius}}
+ \pgfpathclose
+ \fi
+ }
+ \behindforegroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpa}{\wg@tmpa}}%
+ \n@to@pp@unknown@left %
+ \n@to@pp@unknown@bottom %
+ \n@to@pp@unknown@right %
+ \pgfusepath{stroke}}
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/list.dtx b/macros/latex/contrib/wargame/source/natoapp6c/list.dtx
new file mode 100644
index 0000000000..0500f01326
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/list.dtx
@@ -0,0 +1,266 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \begin{Macro}{\n@to@pp@s@ll}
+%
+% A list of all defined symbols
+%
+% \begin{macrocode}
+\def\n@to@pp@s@ll{
+ weapon=base,
+ weapon=top,
+ weapon=bottom,
+ weapon=rifle,
+ weapon=machine gun,
+ weapon=grenade launcher,
+ weapon=missile launcher,
+ weapon=non lethal,
+ weapon=multi fire,
+ weapon=air defence,
+ weapon=anti tank,
+ weapon=full,
+ weapon,
+ type=light,
+ type=medium,
+ type=heavy,
+ type=vlight,
+ type=vmedium,
+ type=vheavy,
+ type,
+ above corps support,
+ air assault with organic lift,
+ air decoy,
+ air assault,
+ air defence,
+ air strip,
+ air traffic,
+ airship,
+ airborne,
+ ammunition,
+ amphibious,
+ amphibious warfare ship,
+ analysis,
+ arrest,
+ artillery,
+ anti tank anti armour,
+ antenna,
+ armoured,
+ armoured fighting vehicle,
+ armoured personnel carrier,
+ arctic,
+ automobile,
+ balloon,
+ bar,
+ base,
+ bicycle equipped,
+ boat,
+ booby trap,
+ bottomed,
+ bridge=none,
+ bridge=fixed,
+ bridge=folding,
+ bridge=hollow,
+ bridge,
+ capsule,
+ carrier,
+ chemical biological radiological nuclear,
+ civilian military cooperation,
+ civilian police,
+ civilian telecommunications,
+ coast guard vessel,
+ combat support,
+ combatant,
+ combined arms,
+ computer system,
+ control,
+ convoy,
+ corps support,
+ crime,
+ decoy,
+ direct communications,
+ direction finding,
+ diving=none,
+ diving=military,
+ diving,
+ drilling,
+ earthmover,
+ electric power,
+ electronic ranging,
+ electronic warfare wide,
+ engineer,
+ enhanced location reporting system,
+ environmental protection,
+ explosion,
+ finance,
+ fishing vessel,
+ fire protection,
+ fixed and rotary wing,
+ fixed wing,
+ flame thrower,
+ floating,
+ surfaced,
+ food,
+ fuel,
+ grenade launcher=none,
+ grenade launcher=non lethal,
+ grenade launcher,
+ graffiti,
+ group,
+ gun=base,
+ gun=air defence,
+ gun=anti tank,
+ gun=direct,
+ gun=recoilless,
+ gun,
+ headquarters,
+ house,
+ howitzer,
+ in position,
+ individual,
+ infantry,
+ intermodal,
+ jagged wave,
+ jam,
+ jamming,
+ jetski,
+ killing,
+ labour,
+ land mine=personnel,
+ land mine=tank,
+ land mine=none,
+ land mine,
+ land missile,
+ laser,
+ launcher,
+ laundry,
+ machine gun,
+ main gun,
+ maintenance,
+ medic,
+ medical,
+ medical treatment,
+ mine,
+ mine clearing equipment,
+ mine warfare vessel,
+ missile,
+ missile launcher=base,
+ missile launcher=none,
+ missile launcher=air defence,
+ missile launcher=anti tank,
+ missile launcher=surface to surface,
+ missile launcher,
+ mobile advisor and support,
+ moored,
+ mortar,
+ motorized,
+ mortuary affairs,
+ mountain,
+ naval,
+ navigation,
+ navy task,
+ non combatant,
+ non lethal weapon,
+ nuclear,
+ observer,
+ orbiter shuttle,
+ ordnance,
+ organisation,
+ over snow,
+ pack animal,
+ patrol,
+ patrolling,
+ physician,
+ pipeline,
+ poisoning,
+ postal,
+ printed media,
+ psychological,
+ quarry,
+ quartermaster,
+ radar,
+ radio,
+ radio relay,
+ radio relay line of sight,
+ radio teletype,
+ railroad,
+ reconnaissance,
+ recovery unmanned systems,
+ rifle,
+ rising,
+ riverine,
+ rocket launcher=base,
+ rocket launcher=anti tank,
+ rocket launcher=single,
+ rocket launcher=multiple,
+ rocket launcher=single head,
+ rocket launcher=multiple head,
+ rocket launcher,
+ rotary wing,
+ runway,
+ sailing boat,
+ satellite=none,
+ satellite=astronomical,
+ satellite=bio,
+ satellite=communications,
+ satellite=navigation,
+ satellite=earth observing,
+ satellite=tether,
+ satellite=small,
+ satellite=reconnaissance,
+ satellite,
+ sea mine=top half,
+ sea mine=bottom half,
+ sea mine=full,
+ sea mine=neutralised,
+ sea mine=neutralized,
+ sea mine,
+ seabed installation,
+ search,
+ searching,
+ semi trailer truck,
+ sensor,
+ ship,
+ signal,
+ signals intelligence,
+ ski,
+ sled,
+ small squashed text=TXT,
+ small text=TXT,
+ sniper,
+ space station,
+ squashed text=TXT,
+ submarine,
+ submersible,
+ supply,
+ surface combatant,
+ survey,
+ tactical satellite,
+ tank,
+ text=TXT,
+ topographic,
+ torpedo,
+ towed,
+ tracked,
+ train locomotive,
+ transportation,
+ unexploded ordnance,
+ unmanned,
+ utility vehicle,
+ vehicle,
+ video imagery,
+ warfare vessel,
+ water,
+ wheeled=and tracked,
+ wheeled=limited,
+ wheeled=cross country,
+ wheeled=semi,
+ wheeled
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/shape.dtx b/macros/latex/contrib/wargame/source/natoapp6c/shape.dtx
new file mode 100644
index 0000000000..029be911b7
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/shape.dtx
@@ -0,0 +1,647 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{Text \texttt{natoapp6c} namespace}
+%
+% \begin{NatoAppKey}{/natoapp6c}
+%
+% Here, we set up the key path \spec{/natoapp6c}
+%
+% \begin{macrocode}
+\def\natoapp@report{}
+\tikzset{
+ /natoapp6c/.search also={/tikz},
+ /natoapp6c/.cd,
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \subsubsubsection{Choices of faction, command, and echelon}
+%
+% \begin{NatoAppKey}{natoapp6c/id,
+% natoapp6c/fac,
+% natoapp6c/cmd,
+% natoapp6c/ech}
+%
+% The keys \spec{id}, spec{fac}, \spec{cmd}, and \spec{ech} are
+% internal keys used to store the choice of faction, command, and
+% echelon, respectively, in.
+%
+% \begin{macrocode}
+\tikzset{
+ /natoapp6c/.cd,
+ id/.store in=\natoapp@id,
+ fac/.store in=\natoapp@fac,
+ cmd/.store in=\natoapp@cmd,
+ ech/.store in=\natoapp@ech,
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \begin{NatoAppKey}{natoapp6c/faction}
+%
+% Choice of \meta{faction}. This is limited to predefined values.
+% The choice is stored in the key \spec{natoapp6c/fac}.
+%
+% \begin{macrocode}
+\tikzset{
+ /natoapp6c/.cd,
+ faction/.is choice,
+ faction/none/.code={\let\natoapp@fac\@undefined},
+ faction/friendly/.style={fac=friendly},
+ faction/friend/.style={fac=friendly},
+ faction/hostile/.style={fac=hostile},
+ faction/enemy/.style={fac=hostile},
+ faction/neutral/.style={fac=neutral},
+ faction/unknown/.style={fac=unknown},
+ faction/?/.style={fac=unknown},
+ faction/.initial=friendly,
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \begin{NatoAppKey}{natoapp6c/command}
+%
+% Choice of \meta{command}. This is limited to predefined values.
+% The choice is stored in the key \spec{natoapp6c/cmd}.
+%
+% \begin{macrocode}
+\tikzset{
+ /natoapp6c/.cd,
+ command/.is choice,
+ command/base/.style={cmd=base},
+ command/activity/.style={cmd=activity},
+ command/air/.style={cmd=air},
+ command/missile/.style={cmd=air},
+ command/equipment/.style={cmd=equipment},
+ command/installation/.style={cmd=installation},
+ command/land/.style={cmd=land},
+ command/sea surface/.style={cmd=sea surface},
+ command/space/.style={cmd=space},
+ command/sub surface/.style={cmd=sub surface},
+ command/sea mine/.style={cmd=sub surface},
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \begin{NatoAppKey}{natoapp6c/echolon}
+%
+% Unit size. The choice is limited to one of the below. The choice
+% is stored in the key \spec{natoapp6c/ech}.
+%
+% \begin{macrocode}
+\tikzset{
+ /natoapp6c/.cd,
+ echelon/.is choice,
+ echelon/none/.style={ech=},
+ echelon/team/.style={ech=},
+ echelon/squad/.style={ech=squad},
+ echelon/section/.style={ech=section},
+ echelon/platoon/.style={ech=platoon},
+ echelon/company/.style={ech=company},
+ echelon/battalion/.style={ech=battalion},
+ echelon/regiment/.style={ech=regiment},
+ echelon/brigade/.style={ech=brigade},
+ echelon/division/.style={ech=division},
+ echelon/corps/.style={ech=corps},
+ echelon/army/.style={ech=army},
+ echelon/army group/.style={ech=army group},
+ echelon/theatre/.style={ech=theatre},
+ echelon/command/.style={ech=command},
+ echelon/dummy/.style={ech=dummy},
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \begin{NatoAppKey}{natoapp6c/main,
+% natoapp6c/left,
+% natoapp6c/right,
+% natoapp6c/top,
+% natoapp6c/bottom,
+% natoapp6c/below,
+% natoapp6c/frame}
+% \begin{Macro}{\natoapp@main,
+% \natoapp@left,
+% \natoapp@right,
+% \natoapp@upper,
+% \natoapp@lower,
+% \natoapp@below}
+%
+% The various parts of the symbols. The keys \spec{upper} and
+% \spec{lower} are aliases for \spec{top} and \spec{bottom},
+% respectively. The choices are stored in macros
+%
+% \begin{macrocode}
+\newif\ifnatoapp@decoy\natoapp@decoyfalse
+\tikzset{
+ /natoapp6c/.cd,
+ main/.store in=\natoapp@main, main/.initial=,%
+ left/.store in=\natoapp@left, left/.initial=,%
+ right/.store in=\natoapp@right, right/.initial=,%
+ upper/.store in=\natoapp@upper, upper/.initial=,%
+ lower/.store in=\natoapp@lower, lower/.initial=,%
+ top/.store in=\natoapp@upper,%
+ bottom/.store in=\natoapp@lower,%
+ below/.store in=\natoapp@below, below/.initial=,%
+ frame/.store in=\natoapp@frame, frame/.initial=,%
+ decoy/.is if=natoapp@decoy,%
+}
+% \end{macrocode}
+% \end{Macro}
+% \end{NatoAppKey}
+%
+% \begin{TikzKey}{/tikz/natoapp6c/main,
+% /tikz/natoapp6c/modifiers,
+% /tikz/natoapp6c/lower,
+% /tikz/natoapp6c/upper,
+% /tikz/natoapp6c/left,
+% /tikz/natoapp6c/right,
+% /tikz/natoapp6c/echelon,
+% /tikz/natoapp6c/below}
+%
+% Styles used by the various parts of the symbol.
+%
+% \begin{macrocode}
+\tikzset{
+ natoapp6c/parts/.style={draw,shape=rectangle,transform shape},
+ natoapp6c/main/.style={natoapp6c/parts},
+ natoapp6c/modifiers/.style={natoapp6c/parts,scale=.6},
+ natoapp6c/lower/.style={natoapp6c/parts},
+ natoapp6c/upper/.style={natoapp6c/parts},
+ natoapp6c/left/.style={natoapp6c/parts},
+ natoapp6c/right/.style={natoapp6c/parts},
+ natoapp6c/echelon/.style={natoapp6c/parts},
+ natoapp6c/below/.style={natoapp6c/parts}
+}
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{The \texttt{natoapp6c} styles}
+%
+% \begin{TikzKey}{/tikz/natoapp6c}
+% This key sets up a node to make a NATO App6(c) symbol. The key
+% takes a single argument which in turn must contain key--value
+% pairs in the \texttt{/natoapp6c} (or \texttt{/tikz}) namespace(s). We
+% set the \texttt{shape} parameter of the node, and calls the passed
+% keys in the \texttt{/natoapp6c} namespace to set-up elements of the
+% chit.
+%
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/.code={%
+ \pgfkeys{/tikz/transform shape,/tikz/shape=natoapp6c}
+ \pgfkeys{/natoapp6c/.cd,#1}}}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% We define a counter to set-up unique names for symbol nodes.
+%
+% \begin{macrocode}
+\newcounter{natoappid}\setcounter{natoappid}{0}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{The \cs{natoapp6c} shape}
+%
+% \begin{Macro}{\ifn@to@pp@below,\ifn@to@pp@mod}
+%
+% We define an \cs{if} to allow us to detect if something is
+% rendered below the frame
+%
+% \begin{macrocode}
+\newif\ifn@to@pp@below\n@to@pp@belowfalse%
+\newif\ifn@to@pp@mod\n@to@pp@modfalse%
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{NatoAppFrame}{natoapp6c}
+%
+% Next, we define the mother shape of NATO App6(c) nodes. This is a
+% composite node with sub-nodes for the various parts (including the
+% frame) of the symbol.
+%
+% It is quite complex so we will go through the implementation in
+% bits.
+%
+% First, we make some saved anchors (the centre) and macros
+% (identifier, frame type, and frame options).
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c}{%
+ \savedanchor\center{\pgf@x=0cm\pgf@y=0cm}
+ \savedmacro\id{%
+ \n@to@pp@dbg{3}{NATO App6(c) id (set): \meaning\natoapp@id}
+ \@ifundefined{natoapp@id}{\let\natoapp@id\pgfutil@empty}{}%
+ \ifx\natoapp@id\pgfutil@empty\relax%
+ \wg@r@ndom@id%
+ \edef\id{natoapp6c\wg@uuid}%
+ \else%
+ \edef\id{\natoapp@id}%
+ \fi%
+ \n@to@pp@dbg{3}{NATO App6(c) id: \meaning\id}}
+ \savedmacro\frameshape{%
+ \let\frameshape\pgfutil@empty%
+ \@ifundefined{natoapp@cmd}{\def\frameshape{base}}{%
+ \edef\frameshape{\natoapp@cmd}
+ \@ifundefined{natoapp@fac}{\def\frameshape{base}}{%
+ \edef\frameshape{\natoapp@fac\space\frameshape}}}
+ \n@to@pp@dbg{3}{NATO App6(c) frame shape: \meaning\frameshape}}
+ \savedmacro\frameopt{%
+ \let\frameopt\pgfutil@empty%
+ \@ifundefined{natoapp@frame}{}{%
+ \edef\frameopt{\natoapp@frame}}
+ \n@to@pp@dbg{3}{NATO App6(c) Frame options: \meaning\frameopt}%
+ }
+% \end{macrocode}
+%
+% Then we define a number of regular anchors
+%
+% \begin{macrocode}
+ \anchor{center} {\center}
+% \end{macrocode}
+%
+% The remaining anchors depend on the shape being used. We reference
+% the anchors of the embedded node of the frame.
+%
+% \begin{macrocode}
+ \anchor{north east}{\wg@sub@nchor{M\id}{north east}}
+ \anchor{north west}{\wg@sub@nchor{M\id}{north west}}
+ \anchor{south east}{\wg@sub@nchor{M\id}{south east}}
+ \anchor{south west}{\wg@sub@nchor{M\id}{south west}}
+ \anchor{north} {\wg@sub@nchor{M\id}{north}}
+ \anchor{west} {\wg@sub@nchor{M\id}{west}}
+ \anchor{south} {\wg@sub@nchor{M\id}{south}}
+ \anchor{east} {\wg@sub@nchor{M\id}{east}}
+ \anchor{upper} {\wg@sub@nchor{M\id}{upper}}
+ \anchor{lower} {\wg@sub@nchor{M\id}{lower}}
+ \anchor{left} {\wg@sub@nchor{M\id}{left}}
+ \anchor{right} {\wg@sub@nchor{M\id}{right}}
+% \end{macrocode}
+%
+% The next two anchors are a little funny.
+%
+% \begin{macrocode}
+ \anchor{echelon} {%
+ \n@to@pp@dbg{3}{NATO App6(c) get echelon anchor}%
+ \wg@sub@nchor{M\id}{north}%
+ \wg@tmpa=\n@to@pp@e@y cm%
+ \advance\pgf@y\wg@tmpa%
+ }%
+ \anchor{below} {%
+ \n@to@pp@dbg{3}{NATO App6(c) get below anchor}%
+ \wg@sub@nchor{M\id}{south}
+ \wg@tmpa=\n@to@pp@e@yy cm%
+ \advance\pgf@y-\wg@tmpa}
+% \end{macrocode}
+%
+% All right, so time to make the actual frame. Note that we do this
+% in a `behind' path so we can actually draw stuff. First, we flag
+% that we're not in a modifier, nor in the `below' part.
+%
+% \begin{macrocode}
+ \behindbackgroundpath{%
+ \n@to@pp@dbg{3}{NATO App6(c) background path: \meaning\id
+ ^^J ID: \meaning\natoapp@id
+ ^^J Faction: \meaning\natoapp@fac
+ ^^J Command: \meaning\natoapp@cmd
+ ^^J Echelon: \meaning\natoapp@ech
+ ^^J Main: \meaning\natoapp@main
+ ^^J Left: \meaning\natoapp@left
+ ^^J Right: \meaning\natoapp@right
+ ^^J Upper: \meaning\natoapp@upper
+ ^^J Lower: \meaning\natoapp@lower
+ ^^J Below: \meaning\natoapp@below
+ ^^J Shape: \meaning\frameshape
+ ^^J Options: \meaning\frameopt}
+ \natoapp@report
+ \n@to@pp@modfalse
+ \n@to@pp@belowfalse
+% \end{macrocode}
+%
+% If the symbol is empty, then do nothing.
+%
+% \begin{macrocode}
+ \ifx\frameshape\pgfutil@empty%
+ \n@to@pp@dbg{2}{NATO App6(c) has no frame!}
+ \else
+% \end{macrocode}
+%
+% We start a scope because we want to do some clipping here. Then, we
+% use the frame to clip the remaining part. Note that we do this via
+% a node which we give the identifier \spec{M}. Various elements of
+% the symbol can then refer to this shape to define paths, etc.
+%
+% \begin{macrocode}
+ \begin{scope}
+ \pgfinterruptboundingbox
+ %% Clip to shape in scope
+ %% \message{^^JClipping to NATO App6(c) shape}
+ \n@to@pp@iscliptrue%
+ \n@to@pp@dbg{2}{NATO App6(c) frame node M (clip)}
+ \pgfnode{natoapp6c \frameshape}{center}{}{M}{\pgfusepath{clip}}
+ \n@to@pp@isclipfalse%
+% \end{macrocode}
+%
+% Next, we should see if we need to fill the frame. We do that by
+% expanding the passed \spec{frame} key-values in a scope, and
+% \emph{then} get the fill colour.
+%
+% \begin{macrocode}
+ %% Start new scope including frame key options
+ \edef\tmp@opt{[\frameopt]}
+ \expandafter\scope\tmp@opt
+ % Get fill color {possibly from frame key}
+ \expandafter\let\expandafter\tmp@fill%
+ \csname\string\color@pgffillcolor\endcsname%
+% \end{macrocode}
+%
+% If the fill colour is not \cs{relax}, then we fill the frame. Note
+% that this is done in the background, so when we draw in the
+% foreground we will render on top of the fill.
+%
+% \begin{macrocode}
+ % Check if we need to fill shape (fill colour us not \relax)
+ \ifx\tmp@fill\relax\else%
+ \n@to@pp@dbg{2}{NATO App6(c) frame fill}
+ \pgfnode{natoapp6c \frameshape}{center}{}{}{\pgfusepath{fill}}%
+ \fi%
+ % End the fill scope
+ \endscope%
+% \end{macrocode}
+%
+% Now we need to render some of the elements of the symbol. We start
+% with the main elements. We can specify many main elements (to make
+% composite symbols).
+%
+% \begin{macrocode}
+ % Render mains
+ \@ifundefined{natoapp@main}{}{
+ \n@to@pp@dbg{2}{NATO App6(c) mains: \meaning\natoapp@main}
+ \begin{scope}[natoapp6c/main]
+ \wg@pic@all{\natoapp@main}{natoapp6c/s/}{M.center}{natoapp6c/main}%
+ \end{scope}}%
+ % Modififiers flagged
+% \end{macrocode}
+%
+% The next thing is to render the various modifiers. We start by
+% flagging this globally.
+%
+% \begin{macrocode}
+ \n@to@pp@modtrue
+ \n@to@pp@dbg{2}{NATO App6(c) modifiers}
+% \end{macrocode}
+%
+% Below we render the lower, upper, left, and right elements. This is
+% all done in the same way. Note that the elements positions are
+% dictated by anchors of the frame shape (via shape identifier
+% \spec{M}).
+%
+% \begin{macrocode}
+ % Render lowers
+ \@ifundefined{natoapp@lower}{}{%
+ \begin{scope}%
+ \wg@pic@all{\natoapp@lower}{natoapp6c/s/}{M.lower}{%
+ natoapp6c/modifiers,natoapp6c/lower}%
+ \end{scope}}%
+ % Render uppers
+ \@ifundefined{natoapp@upper}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\natoapp@upper}{natoapp6c/s/}{M.upper}{%
+ natoapp6c/modifiers,natoapp6c/upper}%
+ \end{scope}}%
+ % Render lefts
+ \@ifundefined{natoapp@left}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\natoapp@left}{natoapp6c/s/}{M.left}{%
+ natoapp6c/modifiers,natoapp6c/left}%
+ \end{scope}}%
+ % Render rights
+ \@ifundefined{natoapp@right}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\natoapp@right}{natoapp6c/s/}{M.right}{%
+ natoapp6c/modifiers,natoapp6c/right}%
+ \end{scope}}%
+ % Modififiers end
+ \n@to@pp@modfalse%
+ \endpgfinterruptboundingbox
+ \end{scope}%
+ \fi%
+ }
+% \end{macrocode}
+%
+% That concludes rendering most of the symbol. We have not put in the
+% echelon, below element, or drawn the frame yet. That we will do on
+% the foreground path.
+%
+% \begin{macrocode}
+% \end{macrocode}
+%
+% In the foreground `behind' path we render the echelon, below
+% element, and draw the frame.
+%
+% \begin{macrocode}
+ \behindforegroundpath{%
+ \n@to@pp@dbg{2}{NATO App6(c) foreground path:
+ ^^J Echelon: \meaning\natoapp@ech
+ ^^J Symbol: \meaning\frameshape
+ ^^J Below: \meaning\natoapp@below
+ ^^J Frame: \meaning\frameopt}
+ %
+% \end{macrocode}
+%
+% We check if we have a frame. If not, stop.
+%
+% \begin{macrocode}
+ \ifx\frameshape\pgfutil@empty%
+ \n@to@pp@dbg{2}{NATO App6(c) has no frame shape!}%
+ \else%
+% \end{macrocode}
+%
+% We want to draw the rest of the symbol as a part of the frame, so we
+% expand the \spec{frame} options in a scope.
+%
+% \begin{macrocode}
+
+ \edef\tmp@opt{[\frameopt]}
+ \expandafter\scope\tmp@opt
+% \end{macrocode}
+%
+% First thing in this scope is to draw the actual frame. Again, this
+% is done via a node with the right shape. Note that we label this
+% node as \spec{M}\meta{id} so we way refer to it later on.
+%
+% \begin{macrocode}
+ \n@to@pp@dbg{2}{NATO App6(c) inner node `M\id' ===}
+ \pgfnode{natoapp6c \frameshape}{center}{}{M\id}{\pgfusepath{stroke}}
+% \end{macrocode}
+%
+% If the user gave an echelon, then put that in. Note that echelons
+% are limited to predefined values.
+%
+% \begin{macrocode}
+ % Put in the echelon
+ \@ifundefined{natoapp@ech}{}{%
+ \ifx\natoapp@ech\pgfutil@empty\else%
+ \def\args{echelon=\natoapp@ech}
+ \expandafter\wg@pic\args\@endwg@pic%
+ {natoapp6c/s/}{$(M.north)+(0,1.2*\n@to@pp@e@y)$}{natoapp6c/echelon}
+ \fi%
+ }
+% \end{macrocode}
+%
+% If the user want something under the frame, put that in.
+%
+% \begin{macrocode}
+ % Put in stuff below main
+ \@ifundefined{natoapp@below}{}{%
+ \n@to@pp@belowtrue
+ \begin{scope}
+ \wg@pic@all{\natoapp@below}{natoapp6c/s/}{%
+ $(M.south)+(0,-\n@to@pp@e@yy)$}{%
+ natoapp6c/below}%
+ \end{scope}%
+ \n@to@pp@belowfalse}
+% \end{macrocode}
+%
+% If the \spec{decoy} flag was set, we draw that.
+%
+% \begin{macrocode}
+ \ifnatoapp@decoy%
+ \scope[dash pattern=on 3\pgflinewidth off 2\pgflinewidth]%
+ \n@to@pp@dbg{1}{Drawing decoy modifier}%
+ \wg@sub@nchor{M\id}{north east}
+ \wg@tmpa=\pgf@x%
+ \wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpc=\n@to@pp@e@yy cm%
+ \advance\wg@tmpc\n@to@pp@e@yy cm%
+ \advance\wg@tmpc\wg@tmpb%
+ \pgfpathlineto{\pgfqpoint{0cm}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfusepath{stroke}%
+ \endscope%
+ \fi%
+ \endscope%
+ \fi%
+ }
+}
+% \end{macrocode}
+%
+% That finished the shape for NATO App6(c) symbols. We could stop
+% here, but for convenience we define a wrapper macro.
+%
+% \end{NatoAppFrame}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{The \cs{natoapp} wrapper macro}
+%
+% \begin{Macro}{\natoapp}
+%
+% This is a wrapper macro for inserting a node with a NATO App6(c)
+% symbol in it. The syntax of the macro is
+%
+% \begin{Syntax}
+% \cs{natoapp}\oarg{natoapp6c options}\parg{position}\parg{identifier};
+% \end{Syntax}
+%
+% Note that the trailing semi-colon (\spec{;}) is optional.
+%
+% This macro forwards to \cs{n@toapp}.
+%
+% \begin{macrocode}
+\newcommand\natoapp[1][]{%
+ \n@to@pp@dbg{2}{NATO App6(c) macro -> `#1'}
+ \tikzset{/natoapp6c/.cd,faction=friendly,command=land}%
+ \@ifnextchar({\n@toapp{#1}}{\n@toapp{#1}(0,0)}%)
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\n@toapp}
+%
+% This macro takes care to parse the location argument --- if any.
+% It forwards to \cs{n@to@pp}.
+%
+% \begin{macrocode}
+\def\n@toapp#1(#2){%
+ \n@to@pp@dbg{2}{NATO App6(c) second macro -> `#1', `#2'}
+ \@ifnextchar({\n@to@pp{#1}{#2}}{\n@to@pp{#1}{#2}()}%)
+}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\n@to@pp}
+% This is the main work-horse of the wrapper. It makes a node with
+% the shape \spec{natoapp6c} passing the relevant parameters. The
+% syntax of the macro is
+%
+% \begin{macrocode}
+\def\n@to@pp#1#2(#3){%
+ %\let\name\pgfutil@empty%
+ %\ifx|#3|\else\edef\name{(#3)}\fi%
+ %\n@to@pp@dbg{3}{Arguments: #1}%
+ %\edef\args{[natoapp6c={#1},transform shape] \name at (#2) {}}
+ %\expandafter\node\args;%
+ \node[draw,transform shape,natoapp6c={#1}] (#3) at (#2) {};%
+ \@ifnextchar;{\@gobble}{}}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Macros for markings}
+%
+% \begin{Macro}{\natoappmark}
+%
+% A macro for making NATO App6(c) markings.
+%
+% \begin{macrocode}
+\providecommand\natoappmark[2][]{%
+ \tikz[scale=.25,#1]{\natoapp[faction=friendly,command=land,main=#2]}}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\echelonmark}
+% \begin{macrocode}
+\providecommand\echelonmark[2][]{\tikz[scale=.5,#1]{%
+ \pic[scale line widths,line width=1pt] {natoapp6c/s/echelon=#2};}}
+% \end{macrocode}
+% \end{Macro}
+%
+% Some specific NATO App6(c) markers.
+%
+% \begin{macrocode}
+\DeclareRobustCommand\armouredmark[1][]{\natoappmark[#1]{armoured}}
+\DeclareRobustCommand\infantrymark[1][]{\natoappmark[#1]{infantry}}
+\DeclareRobustCommand\artillerymark[1][]{%
+ \natoappmark[#1]{{[fill=pgfstrokecolor]artillery}}}
+\DeclareRobustCommand\combinedmark[1][]{\natoappmark[#1]{combined arms}}
+\DeclareRobustCommand\pgmark[1][] {\natoappmark[#1]{{armoured,infantry}}}
+\DeclareRobustCommand\reconnaissancemark[1][]{\natoappmark[#1]{reconnaissance}}
+\DeclareRobustCommand\corpsmark[1][]{\natoappmark[#1]{,echelon=corps}}
+\DeclareRobustCommand\divisionmark[1][]{\natoappmark[#1]{,echelon=division}}
+\DeclareRobustCommand\brigademark[1][] {\natoappmark[#1]{,echelon=brigade}}
+\DeclareRobustCommand\regimentmark[1][]{\natoappmark[#1]{,echelon=regiment}}
+\DeclareRobustCommand\sofmark[1][] {\natoappmark[#1]{{infantry,text=SOF}}}
+\DeclareRobustCommand\mountaineermark[1][]{%
+ \natoappmark[#1]{infantry,lower=mountain}}
+\DeclareRobustCommand\airbornemark[1][]{%
+ \natoappmark[#1]{infantry,lower=airborne}}
+\DeclareRobustCommand\amphibiousmark[1][]{\natoappmark[#1]{,lower=amphibious}}
+\DeclareRobustCommand\airassaultmark[1][]{%
+ \natoappmark[#1]{infantry,upper=air assault}}
+% \end{macrocode}
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/symbols.dtx b/macros/latex/contrib/wargame/source/natoapp6c/symbols.dtx
new file mode 100644
index 0000000000..19b41da5cf
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/symbols.dtx
@@ -0,0 +1,3165 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{The symbols}
+%
+% Next, we define all the symbols. Note that we define them all as if
+% they are in the \spec{main} section of the symbol, since \spec{top},
+% \spec{bottom}, and \spec{below} symbols are automatically scaled.
+%
+% \begin{NatoAppSymbol}{natoapp6c/s/above corps support}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/above corps support/.pic={%
+ \edef\n@toapp@path{\n@toapp@corps@support{\natoapp@fac}}
+ \expandafter\path[draw] \n@toapp@path;
+ \expandafter\path[draw,xscale=-1] \n@toapp@path;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/air assault with organic lift}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/air assault with organic lift/.pic={%
+ \ifx\n@to@pp@hostile\natoapp@fac%
+ \def\n@toapp@path{(-.75,-.2)--(-.15,-.2)--(0,-.5)--(.15,-.2)--(.75,-.2)}
+ \else
+ \def\n@toapp@path{(-.75,-.2)--(-.1,-.2)--(0,-.325)--(.1,-.2)--(.75,-.2)}
+ \fi
+ \path[draw] \n@toapp@path;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/air decoy}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/air decoy/.pic={%
+ \pic[pic actions]{natoapp6c/s/decoy};
+ \path[fill=pgfstrokecolor,pic actions] (0.4, -0.2) rectangle (-0.4, -0.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/air assault}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/air assault/.pic={%
+ \path[draw] ([shift={(150:.4)}]0,-.1)--(0,-.1)--([shift={(30:.4)}]0,-.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/air defence}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/air defence/.pic={%
+ \ifx\natoapp@fac\n@to@pp@friendly%
+ \def\n@toapp@opt{[out=90,in=90,looseness=.675]}%
+ \else\ifx\natoapp@fac\n@to@pp@neutral%
+ \def\n@toapp@opt{[out=90,in=90,looseness=1]}%
+ \else%
+ \def\n@toapp@opt{[out=45,in=135,looseness=1.5]}%
+ \fi\fi%
+ \edef\n@toapp@path{(M.south west) to\n@toapp@opt (M.south east)}
+ \path[draw] \n@toapp@path;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/air strip}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/air strip/.pic={%
+ \path[fill=pgfstrokecolor] (-.4,-.1) rectangle(.4,0);
+ \path[rotate=45,fill=pgfstrokecolor] (-.4,0) rectangle (.4,.1);
+ }
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/air traffic}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/air traffic/.pic={
+ \path[fill=pgfstrokecolor]
+ (0.33,0.21)--
+ (0.33, -0.21)--
+ (-0.33, 0.21)--
+ (-0.33,-0.21)--
+ cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/airship}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/airship/.pic={%
+ % \path (0.45, 0.175) rectangle (-0.45, -0.175);
+ \path[pic actions] (0, 0) ellipse (0.45 and 0.15);
+ \begin{scope}
+ \clip (0, 0) ellipse (0.45 and 0.15) [reverseclip];
+ \path[pic actions]
+ (0.2,0)--(0.3,0.175)--(0.4,0.175)--(0.375,0)
+ --(0.4,-0.175)--(0.3, -0.175)--cycle;
+ \end{scope}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/airborne}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/airborne/.pic={%
+ \ifx\n@to@pp@neutral\natoapp@fac%
+ \draw (0,-0.05) arc(0:180:0.15);
+ \draw (0,-0.05) arc(180:0:0.15);
+ \else%
+ \draw (0,-0.05) arc(0:180:0.2);
+ \draw (0,-0.05) arc(180:0:0.2);
+ \fi},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/ammunition}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/ammunition/.pic={\path[draw]
+ (0.175,-0.175)--(-0.175,-0.175)
+ (0.125,-0.175)--(0.125, 0) to[out=90,in=90,looseness=2.75]
+ (-0.125, 0)--(-0.125, -0.175);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/amphibious}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/amphibious/.pic={
+ \def\n@to@pp@tmp{0}
+ \ifn@to@pp@below\def\n@to@pp@tmp{-.1}\fi
+ \ifn@to@pp@mod
+ \path[draw,shift={(0,\n@to@pp@tmp)}](1.21,0)
+ to[out=-90,in=-90, looseness=2.25] (1.05, 0)
+ to[out= 90,in= 90, looseness=2.25] (0.89, 0)
+ to[out=-90,in=-90, looseness=2.25] (0.73, 0)
+ to[out= 90,in= 90, looseness=2.25] (0.57, 0)
+ to[out=-90,in=-90, looseness=2.25] (0.41, 0)
+ to[out= 90,in= 90, looseness=2.25] (0.25, 0)
+ to[out=-90,in=-90, looseness=2.25] (0.08, 0)
+ to[out= 90,in= 90, looseness=2.25] (-0.08, 0)
+ to[out=-90,in=-90, looseness=2.25] (-0.25, 0)
+ to[out= 90,in= 90, looseness=2.25] (-0.41, 0)
+ to[out=-90,in=-90, looseness=2.25] (-0.57, 0)
+ to[out= 90,in= 90, looseness=2.25] (-0.73, 0)
+ to[out=-90,in=-90, looseness=2.25] (-0.89, 0)
+ to[out= 90,in= 90, looseness=2.25] (-1.05, 0)
+ to[out=-90,in=-90, looseness=2.25] (-1.21, 0)
+ \else
+ \path[draw,shift={(0,\n@to@pp@tmp)}](0.73, 0)
+ to[out= 90,in= 90, looseness=2.25] (0.57, 0)
+ to[out=-90,in=-90, looseness=2.25] (0.41, 0)
+ to[out= 90,in= 90, looseness=2.25] (0.25, 0)
+ to[out=-90,in=-90, looseness=2.25] (0.08, 0)
+ to[out= 90,in= 90, looseness=2.25] (-0.08, 0)
+ to[out=-90,in=-90, looseness=2.25] (-0.25, 0)
+ to[out= 90,in= 90, looseness=2.25] (-0.41, 0)
+ to[out=-90,in=-90, looseness=2.25] (-0.57, 0)
+ to[out= 90,in= 90, looseness=2.25] (-0.73, 0)
+ \fi
+ ;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/amphibious warfare ship}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/amphibious warfare ship/.pic={
+ \pic{natoapp6c/s/warfare vessel};
+ \path[draw,fill=pgfstrokecolor]
+ (0.15, 0.05) --
+ (0.15, 0.2) --
+ (-0.15, 0.2) --
+ (-0.15, 0.05) -- cycle
+ (0, -0.2) rectangle (0.25, -0.175);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/analysis}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/analysis/.pic={
+ \path[pic actions]
+ (-0.3,-0.2)--(0.3,-0.2)--(0, -0.4)--cycle (0,-0.2)--(0,0.4);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/arrest}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/arrest/.pic={
+ \path[pic actions] circle(0.2);
+ \pic[scale=.8]{natoapp6c/s/individual};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/artillery}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/artillery/.pic={
+ \path[pic actions] circle(0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/anti tank anti armour}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/anti tank anti armour/.pic={%
+ \ifx\natoapp@fac\n@to@pp@unknown%
+ \path[draw,pic actions] (225:.5)--(M.north)--(315:.5);
+ \else%
+ \path[draw,pic actions] (M.south west)--(M.north)--(M.south east);%
+ \fi},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/antenna}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/antenna/.pic={\path[draw]
+ (0, -0.3) -- (0, 0.3) (-0.125, 0.3) -- (0, 0.2) -- (0.125, 0.3);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/armoured}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/armoured/.pic={\path[draw]
+ (-0.275,0.2) arc(90:270:0.2)--(0.275, -0.2) arc(270:450:0.2)--cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/armoured fighting vehicle}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/armoured fighting vehicle/.pic={
+ \path[fill=pgfstrokecolor] (-.4,-.2) rectangle (-.3,.2) (.3,-.2) rectangle (.4,.2);
+ \path[pic actions] (-.3,0) -- (0,.2) -- (.3,0) -- (0,-.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/armoured personnel carrier}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/armoured personnel carrier/.pic={
+ \pic[sub pic actions,draw]{natoapp6c/s/vehicle};
+ \path[pic actions] (.35,.15)--(0,.3)--(-.35,.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/arctic}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/arctic/.pic={
+ \draw (-0.325,0.135) arc(180:270:0.075 and 0.15) --
+ +(0.5, 0) arc(-90:0:0.075 and 0.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/automobile}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/automobile/.pic={
+ \begin{scope}
+ \clip (0.2,-0.15) circle(0.05) (-0.2,-0.15) circle(0.05) [reverseclip];
+ \path[pic actions]
+ (0.3, -0.15) --
+ (-0.3, -0.15) --
+ (-0.3, 0.025) --
+ (-0.1, 0.025) --
+ (-0.1, 0.2) --
+ ( 0.1, 0.2) --
+ ( 0.1, 0.025) --
+ ( 0.3, 0.025) -- cycle
+ ( 0.075, 0.025) rectangle (-0.075, 0.175);
+ \end{scope}
+ \path[pic actions]
+ ( 0.2, -0.15) circle (0.05)
+ (-0.2, -0.15) circle (0.05);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/balloon}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/balloon/.pic={%
+ \path[pic actions] (0, 0.025) circle (0.175);
+ \begin{scope}
+ \clip (0, 0.025) circle (0.175) [reverseclip];
+ \path[pic actions] (-0.05,0) rectangle (0.05,-0.2)--(0.05,0);
+ \end{scope}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/bar}
+% \begin{macrocode}
+\tikzset{
+ natoapp6c/s/bar/.pic={
+ \path[fill=pgfstrokecolor] (-.3,-.1) rectangle (.3,.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/base}
+% \begin{macrocode}
+\tikzset{
+ natoapp6c/s/base/.pic={
+ \path[pic actions] circle(.2);
+ \path[pic actions]
+ (-.2,0) -- (.2,0)
+ ( 0,-.2) -- (0 ,.2)
+ (225:.2) -- (45:.2)
+ (135:.2) -- (-45:.2);
+ }
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/bicycle equipped}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/bicycle equipped/.pic={\draw(0,0) circle(.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/boat}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/boat/.pic={
+ \path[pic actions]
+ (-0.2, -0.2) --
+ ( 0.2, -0.2) --
+ ( 0.35, 0.05) --
+ (-0.15, 0.05) --
+ (-0.075, 0.2) --
+ (-0.175, 0.2) --
+ (-0.25, 0.05) --
+ (-0.35, 0.05) --
+ cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/booby trap}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/booby trap/.pic={
+ \path[draw] (0, -0.2) ellipse(0.2 and 0.065);
+ \begin{scope}
+ \clip (0, -0.2) ellipse(0.2 and 0.065) [reverseclip];
+ \path[draw] (-0.2, -0.2) -- (0, 0.2) -- (0.2, -0.2);
+ \end{scope}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/bottomed}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/bottomed/.pic={
+ \path[draw,fill=pgfstrokecolor] (-0.33,.1) rectangle(0.33,.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/bridge}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/bridge/.is choice,
+ pics/natoapp6c/s/bridge/none/.style={
+ code={\path[pic actions]
+ (0.35,-0.15)--(0.25,-0.05)--(-0.25,-0.05)--(-0.35,-0.15)
+ (0.35, 0.15)--(0.25, 0.05)--(-0.25, 0.05)--(-0.35, 0.15);}},
+ pics/natoapp6c/s/bridge/fixed/.style={
+ code={\pic{natoapp6c/s/bridge};\pic{natoapp6c/s/type=vlight};}},
+ pics/natoapp6c/s/bridge/folding/.style={
+ code={\pic{natoapp6c/s/bridge=none};
+ \path[draw] (.1,-.2) -- (-.1,-.2) -- (-.1,.2) -- (.1,.2);}},
+ pics/natoapp6c/s/bridge/hollow/.style={
+ code={\pic{natoapp6c/s/bridge=none};
+ \path[draw] (.1,-.2) -- (-.1,-.2) -- (-.1,.2) -- (.1,.2) -- cycle;}},
+ pics/natoapp6c/s/bridge/.default=none,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/capsule}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/capsule/.pic={
+ \path[pic actions]
+ ($(0.25, -0.2)!0.1!(0, 0.5)$) --
+ ($(0.25, -0.2)!0.5!(0, 0.5)$) to[in=75, out=105, looseness=0.75]
+ ($(0, 0.5)!0.5!(-0.25, -0.2)$) --
+ ($(0, 0.5)!0.9!(-0.25, -0.2)$) to[in=285, out=255, looseness=0.55]
+ cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/carrier}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/carrier/.pic={
+ \pic{natoapp6c/s/warfare vessel};
+ \path[draw,fill=pgfstrokecolor]
+ (-0.15, 0.05) --
+ (-0.15, 0.2) --
+ (-0.3, 0.2) --
+ (-0.3, 0.05) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/chemical biological radiological nuclear}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/chemical biological radiological nuclear/.pic={
+ \path[draw,fill=pgfstrokecolor] (-0.29,0.1) circle(0.096) (0.29,0.1) circle(0.096);
+ \path[pic actions] (0.15,-0.2) arc(0:90:0.45 and 0.375)
+ (-0.15,-0.2) arc(180:90:0.45 and 0.375);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/civilian military cooperation}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/civilian military cooperation/.pic={%
+ \path[draw] (.375,.2)--(-.375,.2)--(-.375,-.025)
+ to[in=270, out=270, looseness=0.75] (.375,-.025)--cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/civilian police}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/civilian police/.pic={%
+ \path[draw] (0.225, 0.2)
+ to[in=270, out=270, looseness=3] (-0.225, 0.2)
+ to [in=270, out=270, looseness=1.5] (0,0.2)
+ to [in=270, out=270, looseness=1.5] (0.225, 0.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/civilian telecommunications}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/civilian telecommunications/.pic={
+ \path[draw] (0.075, -0.2){[line join=bevel] -- (0, 0.1) -- (-0.075, -0.2)}
+ (0.065, -0.05) -- (-0.065, -0.05)
+ (-0.325, 0.2) -- (-0.15, 0.125) -- (-0.15, 0.175) -- (0, 0.1) -- (0.15, 0.175) -- (0.15, 0.125) -- (0.325, 0.2);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/coast guard vessel}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/coast guard vessel/.pic={%
+ \pic[draw] {natoapp6c/s/ship};
+ \path[pic actions] (0.15, 0.05) -- (0, -0.2) (0.2, 0.05)--(0.05, -0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/combat support}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/combat support/.pic={%
+ \path[fill=pgfstrokecolor]
+ (.15,.2)--(-.15,.2)--(-.15,-.05)--(0,-.2)--(.15,-.05) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/combatant}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/combatant/.pic={%
+ \begin{scope}[xshift=-4.5, yshift=-5]
+ \path[pic actions]
+ (0.3213,0.0534) .. controls (0.3186,0.0295) and (0.3072,0.0136) ..
+ (0.2925,0.0063) .. controls (0.2777,-0.0010) and (0.2605,0.0001) ..
+ (0.2461,0.0068) .. controls (0.2317,0.0136) and (0.2198,0.0265) ..
+ (0.2163,0.0433) .. controls (0.2147,0.0513) and (0.2150,0.0601) ..
+ (0.2179,0.0694) .. controls (0.1304,0.1129) and (0.0223,0.1961) ..
+ (0.0013,0.3209) .. controls (0.0601,0.1809) and (0.1770,0.0912) ..
+ (0.3213,0.0534) -- cycle
+ (0.2304,0.0633) .. controls (0.2287,0.0570) and (0.2287,0.0513) ..
+ (0.2298,0.0461) .. controls (0.2323,0.0340) and (0.2409,0.0245) ..
+ (0.2520,0.0193) .. controls (0.2630,0.0141) and (0.2760,0.0135) ..
+ (0.2864,0.0186) .. controls (0.2932,0.0220) and (0.2992,0.0277) ..
+ (0.3033,0.0370) .. controls (0.2845,0.0413) and (0.2597,0.0498) ..
+ (0.2304,0.0633) -- cycle
+ (0.1785,0.1137) .. controls (0.2446,0.1612) and (0.3061,0.2300) ..
+ (0.3214,0.3209) .. controls (0.2864,0.2377) and (0.2310,0.1723) ..
+ (0.1614,0.1249)
+ (0.1443,0.1138) .. controls (0.1011,0.0871) and (0.0530,0.0670) ..
+ (0.0014,0.0535) .. controls (0.0041,0.0295) and (0.0154,0.0136) ..
+ (0.0302,0.0063) .. controls (0.0449,-0.0010) and (0.0621,0.0001) ..
+ (0.0765,0.0069) .. controls (0.0909,0.0137) and (0.1028,0.0265) ..
+ (0.1063,0.0433) .. controls (0.1079,0.0513) and (0.1076,0.0602) ..
+ (0.1047,0.0694) .. controls (0.1230,0.0785) and (0.1422,0.0893) ..
+ (0.1613,0.1019)
+ (0.0928,0.0461) .. controls (0.0903,0.0340) and (0.0816,0.0245) ..
+ (0.0706,0.0193) .. controls (0.0596,0.0141) and (0.0466,0.0135) ..
+ (0.0362,0.0186) .. controls (0.0294,0.0220) and (0.0234,0.0277) ..
+ (0.0193,0.0370) .. controls (0.0381,0.0413) and (0.0629,0.0498) ..
+ (0.0921,0.0633) --
+ (0.0921,0.0633) .. controls (0.0938,0.0570) and (0.0938,0.0512) ..
+ (0.0928,0.0461) -- cycle;
+ \end{scope}
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/combined arms}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/combined arms/.pic={%
+ \path[draw] pic {natoapp6c/s/armoured};
+ \path[draw] (0.275, 0.2) -- (-0.275, -0.2) (0.275, -0.2) -- (-0.275, 0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/computer system}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/computer system/.pic={
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ (-.3, .28) rectangle ( .3, .3)
+ (-.3, -.18) rectangle ( .3, -.2)
+ (-.3, -.18) rectangle (-.3, .28)
+ ( .3, -.18) rectangle ( .3, .28)
+ (-.3, -.3) rectangle ( .3, -.28)
+ (-.05,-.28) rectangle ( .05,-.18);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/control}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/control/.pic={
+ \path[pic actions]
+ [{Stealth[inset=0pt,scale=0.5]}-{Stealth[inset=0pt,scale=0.5]}]
+ (0, .2) -- (0, -.2);
+ \path[pic actions]
+ [{Stealth[inset=0pt,scale=0.5]}-{Stealth[inset=0pt,scale=0.5]}]
+ (-.2, 0) -- (.2, 0);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/convoy}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/convoy/.pic={
+ \path[draw,fill=pgfstrokecolor]
+ (0.35, 0.175) --
+ (-0.35, 0.175) --
+ (-0.35, -0.175) --
+ (-0.2, -0.175) --
+ (-0.2, 0.025) --
+ (0.2, 0.025) --
+ (0.2, -0.175) --
+ (0.35, -0.175) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/corps support}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/corps support/.pic={%
+ \edef\n@toapp@path{\n@toapp@corps@support{\natoapp@fac}}
+ \expandafter\path[draw] \n@toapp@path;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/crime}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/crime/.pic={\path[draw,dashed] (-.45,.25)--(.45,-.25);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/decoy}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/decoy/.pic={%
+ \path[fill=pgfstrokecolor,draw,yshift=1.5]
+ (0.2, 0) -- (0.4, 0.15) -- (0.4, -0.15) -- cycle
+ (-0.1, 0) -- (0.1, 0.15) -- (0.1, -0.15) -- cycle
+ (-0.4, 0) -- (-0.2, 0.15) -- (-0.2, -0.15) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/direct communications}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/direct communications/.pic={
+ \path[draw] (-.35,0) circle(.1) (.35,0) circle(.1);
+ \pic[fill=pgfstrokecolor]{natoapp6c/s/intermodal};
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/direction finding}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/direction finding/.pic={%
+ \path[draw] (-.3,.2)--(0,.4)--(.3,.2) (0,.4)--(0,-.4);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/diving}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/diving/.is choice,
+ pics/natoapp6c/s/diving/none/.style={
+ code={
+ \path[pic actions] (0,0) circle(.1) (0,0) circle(.25);
+ \begin{scope}
+ \clip (0,0) circle(.25) [reverseclip];
+ \path[pic actions] (-.3,-.1) rectangle(.3,.1)
+ (0,0) -- (-45:.4) -- (-135:.4) -- cycle;
+ \end{scope}}},
+ pics/natoapp6c/s/diving/military/.style={
+ code={
+ \begin{scope}[even odd rule]
+ \clip (0,0) circle(0.1)[reverseclip];
+ \pic[fill=pgfstrokecolor]{natoapp6c/s/diving=none};
+ \end{scope}
+ \path[fill=pgfstrokecolor] (0,0) circle(0.08);
+ }},
+ pics/natoapp6c/s/diving/.default=none,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/drilling}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/drilling/.pic={\path[fill=pgfstrokecolor]
+ (-0.1,-0.2) -- (0.1,-0.2) -- (0.2, 0.2) -- (-0.2, 0.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/earthmover}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/earthmover/.pic={
+ \pic{natoapp6c/s/tank};
+ \path[pic actions] (.3,
+ .3)--(.175,.35)--(-.175,.35)--(-.3,.3)
+ (0,.2)--(0,.35);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/electric power}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/electric power/.pic={
+ \path[pic actions]
+ (-0.05, 0) .. controls(-0.06, 0.14) ..
+ ( 0, 0.09) .. controls( 0.03, 0.06) ..
+ ( 0, 0.06) .. controls(-0.03, 0.06) ..
+ ( 0, 0.09) .. controls( 0.06, 0.14) ..
+ (0.05, 0)
+ ($(-55:0.125) + (0, 0.075)$) arc(-55:235:0.125) arc(415:360:0.05) --
+ +(0, -0.08) arc(180:360:0.05035) --
+ +(0, 0.08) arc(180:125:0.05) -- cycle;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/electronic ranging}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/electronic ranging/.pic={%
+ \path[draw] (135:.225) arc (135:315:.225)--cycle (0,0)--(225:-.225);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/electronic warfare wide}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/electronic warfare wide/.pic={%
+ % OBS
+ \node[natoapp6c/text,natoapp6c/normal text] at(-.25,0){E};
+ \node[natoapp6c/text,natoapp6c/normal text] at(.25,0){W};
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/engineer}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/engineer/.pic={\path[draw]
+ (.4,-.2)--(.4,.2)--(-.4,.2)--(-.4,-.2) (0,.2)--(0,-.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/enhanced location reporting system}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/enhanced location reporting system/.pic={\path[draw]
+ (0, -0.3) -- (0, 0.3) (-0.2, -.3) -- (0, 0.-.1) -- (0.2, -.3);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/environmental protection}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/environmental protection/.pic={%
+ \path[draw] (0, 0.2)
+ -- (0.1, 0.05)
+ -- (0.05, 0.05)
+ -- (0.15, -0.05)
+ -- (0.1, -0.05)
+ -- (0.2, -0.15)
+ -- (0.15, -0.15)
+ -- (0.05, -0.15)
+ -- (0.05, -0.2)
+ -- (-0.05, -0.2)
+ -- (-0.05, -0.15)
+ -- (-0.2, -0.15)
+ -- (-0.1, -0.05)
+ -- (-0.15, -0.05)
+ -- (-0.05, 0.05)
+ -- (-0.1, 0.05)
+ -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/explosion}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/explosion/.pic={%
+ \node [shape=rectangle,
+ starburst,
+ draw,
+ minimum width=0.9cm,
+ minimum height=0.9cm,
+ starburst point height=0.25cm,
+ starburst points=12] {};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/finance}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/finance/.pic={%
+ \path[draw] (-.3,-.25) rectangle(.3,0)
+ (-.3,0) -- ++(60:.28) -- ([shift=(120:.28)].3,0) -- (.3,0);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/fishing vessel}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/fishing vessel/.pic={
+ \path[pic actions]
+ (-0.15, -0.2) --
+ ( 0.15, -0.2) --
+ ( 0.25, 0.025) --
+ (-0.05, 0.025) --
+ (-0.05, 0.125) --
+ (-0.2, 0.125) --
+ (-0.2, 0.025) --
+ (-0.25, 0.025) -- cycle
+ (0.025, 0.025) -- (0.025, 0.2)
+ (0.025, 0.025) -- +(45:0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/fire protection}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/fire protection/.pic={%
+ \path[fill=pgfstrokecolor] (0,0) circle(.2)
+ (0,0) -- (60:.3) -- (120:.3) -- cycle
+ (0,0) -- (-30:.3) -- (30:.3) -- cycle
+ (0,0) -- (150:.3) -- (210:.3) -- cycle
+ (0,0) -- (240:.3) -- (300:.3) -- cycle;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/fixed and rotary wing}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/fixed and rotary wing/.pic={%
+ \path[xscale=.45,yscale=.75,pic actions] pic {natoapp6c/s/fixed wing};
+ \path[yscale=.45,xscale=.7,rotate=90, pic actions] pic {
+ natoapp6c/s/rotary wing};
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/fixed wing}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/fixed wing/.pic={
+ \path[pic actions]
+ (-0.36,0.125) arc (77:275:0.075 and 0.125) -- (0,0) -- cycle
+ ( 0.36,0.125) arc (-275:-77:-0.075 and 0.125) -- (0,0)
+ --cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/flame thrower}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/flame thrower/.pic={
+ \path[pic actions]
+ (-0.1, -0.4) -- (-0.1, 0.3) to[out=90,in=90,looseness=2]
+ (0.1, 0.3) -- (0.1, 0.275);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/floating}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/floating/.pic={
+ \path[draw]
+ (-0.5, 0.100) --
+ (-0.417, 0.242) --
+ (-0.333, 0.100) --
+ (-0.250, 0.242) --
+ (-0.167, 0.100) --
+ (-0.083, 0.242) --
+ (0.0, 0.100) --
+ (0.083, 0.242) --
+ (0.167, 0.100) --
+ (0.250, 0.242) --
+ (0.333, 0.100) --
+ (0.417, 0.242) --
+ (0.5, 0.100);},
+ pics/natoapp6c/s/surfaced/.style=natoapp6c/s/floating,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/food}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/food/.pic={
+ \path[pic actions]
+ (0.075, 0.2) to[out=210, in=150, looseness=1]
+ (0.075, -0.2) to[out=180, in=180, looseness=1.5]
+ (0.075, 0.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/fuel}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/fuel/.pic={
+ \path[draw] (0,0) -- (135:.3) -- (45:.3) -- cycle (0,0) -- (0,-.3);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/grenade launcher}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/grenade launcher/.is choice,%
+ pics/natoapp6c/s/grenade launcher/none/.style={%
+ code={%
+ \pic[draw]{natoapp6c/s/rifle};
+ \pic[draw]{natoapp6c/s/weapon=grenade launcher};}},%
+ pics/natoapp6c/s/grenade launcher/non lethal/.style={
+ code={%
+ \pic[draw]{natoapp6c/s/non lethal weapon};
+ \pic[draw]{natoapp6c/s/weapon=grenade launcher};}},
+ pics/natoapp6c/s/grenade launcher/.default=none,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/graffiti}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/graffiti/.pic={
+ \path[pic actions]
+ (0.05, 0.2)
+ arc (90:270:0.05)
+ arc (450:270:0.05)
+ arc (90:270:0.05)
+ arc (450:270:0.05)
+ (-0.05, 0.2)
+ arc (90:270:0.05)
+ arc (450:270:0.05)
+ arc (90:270:0.05)
+ arc (450:270:0.05);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/group}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/group/.pic={
+ \path(-.23,.05) pic [draw,scale=.8] {natoapp6c/s/individual};
+ \path(0,-.05) pic [draw,scale=.8] {natoapp6c/s/individual};
+ \path(.23,.05) pic [draw,scale=.8] {natoapp6c/s/individual};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/gun}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/gun/.is choice,
+ pics/natoapp6c/s/gun/base/.style={
+ code={
+ \pic[draw]{natoapp6c/s/weapon=base};
+ \pic[draw]{natoapp6c/s/weapon=top};
+ \pic[draw]{natoapp6c/s/weapon=multi fire};}},
+ pics/natoapp6c/s/gun/air defence/.style={
+ code={
+ \pic[draw]{natoapp6c/s/gun/base};
+ \pic[draw]{natoapp6c/s/weapon=air defence};}},
+ pics/natoapp6c/s/gun/anti tank/.style={
+ code={
+ \pic[draw]{natoapp6c/s/gun/base};
+ \pic[draw]{natoapp6c/s/weapon/anti tank};}},
+ pics/natoapp6c/s/gun/direct/.style={
+ code={
+ \pic[draw]{natoapp6c/s/gun/base};
+ \pic[draw]{natoapp6c/s/weapon=bottom};}},
+ pics/natoapp6c/s/gun/recoilless/.style={
+ code={
+ \pic[draw]{natoapp6c/s/rifle};
+ \pic[yshift=-4,draw]{natoapp6c/s/weapon=multi fire};}},
+ pics/natoapp6c/s/gun/.default=direct,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/headquarters}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/headquarters/.pic={
+ \path[pic actions] (M.north west) -- ++(0,-.3) --
+ ([shift=(-90:.3)]M.north east) -- (M.north east) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/house}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/house/.pic={
+ \path[pic actions]
+ (-.125,-.175) rectangle (.125,.075)
+ (-.167,.075) -- (0,.225) -- (.167,.075) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/howitzer}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/howitzer/.pic={
+ \pic[draw]{natoapp6c/s/weapon=base};
+ \pic[draw]{natoapp6c/s/weapon=top};
+ \pic[draw]{natoapp6c/s/weapon=multi fire};
+ \pic[yshift=-8,draw]{natoapp6c/s/weapon=grenade launcher};
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/in position}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/in position/.pic={
+ \path[draw,fill=pgfstrokecolor]
+ (-.3,-.01) rectangle (-.2,.01) (.2,-.01) rectangle (.3,.01);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/individual}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/individual/.pic={
+ \path[pic actions]
+ (0,.08) -- (0,-.3) (-.15,0) -- (.15,0) (0,.18) circle(.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/infantry}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/infantry/.pic={
+ \path[draw] (-.75,.5) -- (.75,-.5) (-.75,-.5) -- (.75,.5);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/intermodal}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/intermodal/.pic={
+ \path[pic actions]
+ ( 0.15, 0.025) --
+ (-0.15, 0.025) --
+ (-0.15, 0.075) --
+ (-0.25, 0) --
+ (-0.15, -0.075) --
+ (-0.15, -0.025) --
+ ( 0.15, -0.025) --
+ ( 0.15, -0.075) --
+ ( 0.25, 0) --
+ ( 0.15, 0.075) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/jagged wave}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/jagged wave/.pic={
+ \draw (0.3, -0.05) --
+ (0.2, 0.05) --
+ (0.1, -0.05) --
+ (0, 0.05) --
+ (-0.1, -0.05) --
+ (-0.2, 0.05) --
+ (-0.3, -0.05);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/jam}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/jam/.pic={%
+ \path[draw]
+ (0.75, 0)
+ to[out=90, in=90, looseness=2.25] ( 0.65, 0)
+ to[out=-90,in=-90,looseness=2.25] ( 0.55, 0)
+ to[out=90, in=90, looseness=2.25] ( 0.45, 0)
+ to[out=-90,in=-90,looseness=2.25] ( 0.35, 0)
+ to[out=90, in=90, looseness=2.25] ( 0.25, 0)
+ to[out=-90,in=-90,looseness=2.25] ( 0.15, 0)
+ to[out=90, in=90, looseness=2.25] ( 0.05, 0)
+ to[out=-90,in=-90,looseness=2.25] (-0.05, 0)
+ to[out=90, in=90, looseness=2.25] (-0.15, 0)
+ to[out=-90,in=-90,looseness=2.25] (-0.25, 0)
+ to[out=90, in=90, looseness=2.25] (-0.35, 0)
+ to[out=-90,in=-90,looseness=2.25] (-0.45, 0)
+ to[out=90, in=90, looseness=2.25] (-0.55, 0)
+ to[out=-90,in=-90,looseness=2.25] (-0.65, 0)
+ to[out=90, in=90, looseness=2.25] (-0.75, 0)
+ ;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/jamming}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/jamming/.pic={%
+ \path(0,.4) pic {natoapp6c/s/jam} (0,.26) pic {natoapp6c/s/jam};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/jetski}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/jetski/.pic={
+ \path[pic actions]
+ ( 0.3, -0.2) --
+ (-0.3, -0.2) --
+ (-0.35,-0.1) --
+ (-0.1, 0.2) --
+ ( 0, 0.2) --
+ ( 0, 0.1) --
+ (-0.05, 0.1) --
+ (-0.1, -0.05) --
+ ( 0.3, -0.05) --
+ ( 0.3, -0.2) -- cycle;
+},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/killing}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/killing/.pic={\path[draw] (-.45,.25)--(.45,-.25);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/labour}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/labour/.pic={%
+ \path[draw] (-.15,.2) -- (.15,.2) (0,.2) -- (0,0)
+ (-.15,0) -- ++(300:.3) -- ++(60:.3) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/land mine}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/land mine/.is choice,
+ pics/natoapp6c/s/land mine/personnel/.style={
+ code={\pic[fill=pgfstrokecolor]{natoapp6c/s/land mine=none};
+ \path[pic actions] (135:0.35) -- (0, 0) -- (45:0.35);}},
+ pics/natoapp6c/s/land mine/tank/.style={
+ code={\pic[fill=pgfstrokecolor]{natoapp6c/s/land mine=none};}},
+ pics/natoapp6c/s/land mine/none/.style={
+ code={\path[pic actions] (0,0) circle(0.25);}},
+ pics/natoapp6c/s/land mine/.default=none,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/land missile}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/land missile/.pic={\pic{natoapp6c/s/missile launcher};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/laser}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/laser/.pic={
+ \path[draw,line join=round,line cap=round,pic actions]
+ ( 0.1, -0.25) --
+ (-0.1, -0.225) --
+ ( 0.1, -0.2) --
+ (-0.1, -0.175) --
+ ( 0.1, -0.15) --
+ ( 0, -0.1375) --
+ ( 0, -0.0125) --
+ (-0.1, 0) --
+ ( 0.1, 0.025) --
+ (-0.1, 0.05) --
+ ( 0.1, 0.075) --
+ ( 0, 0.0875) --
+ ( 0, 0.25)
+ ( 0.1, 0.2) --
+ ( 0, 0.25) --
+ (-0.1, 0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/launcher}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/launcher/.pic={
+ \path[draw] (-.3,-.2) -- (.3,.2) -- (.3,-.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/laundry}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/laundry/.pic={%
+ \path[draw] (0,-.3) -- (0,.1)
+ (0,.1) -- ++(150:.25)
+ (0,.1) -- ++(180:.2)
+ (0,.1) -- ++(210:.25);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/machine gun}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/machine gun/.pic={%
+ \pic[draw]{natoapp6c/s/rifle};
+ \pic[draw]{natoapp6c/s/weapon=machine gun};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/main gun}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/main gun/.pic={
+ \path[pic actions] (M.north west) -- ++(.25,0) --
+ ([shift=(0:.25)]M.south west) -- (M.south west) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/maintenance}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/maintenance/.pic={
+ \path[fill=pgfstrokecolor]
+ (-.38,.25)
+ to[out=0,in=90,looseness=1.5] (-.2,.05) -- (.2,.05)
+ to [out=90,in=180,looseness=1.5] (.38,.25) -- ++(0,-.08)
+ to [out=180,in=90,looseness=1.5] (.28,0)
+ to [out=-90,in=180,looseness=1.5] (.38,-.17) -- ++(0,-.08)
+ to [out=180,in=-90,looseness=1.5] (.2,-.05) -- (-.2,-.05)
+ to [out=-90,in=0,looseness=1.5] (-.38,-.25) -- ++(0,.08)
+ to [out=0,in=-90,looseness=1.5] (-.28,0)
+ to [out=90,in=0,looseness=1.5] (-.38,.17) -- cycle;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/medic}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/medic/.pic={
+ \path[pic actions]
+ (-0.075,-0.2)
+ --(0.075,-.2)
+ --(.075,-.075)
+ --(.2,-.075)
+ --(.2,.075)
+ --(.075,.075)
+ --(.075,.2)
+ --(-0.075,.2)
+ --(-0.075,.075)
+ --(-.2,.075)
+ --(-.2,-.075)
+ --(-.075,-.075)
+ --cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/medical}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/medical/.pic={\path[draw] (-1,0) -- (1,0) (0,-1) -- (0,1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/medical treatment}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/medical treatment/.pic={
+ \path[draw] (0,0) pic {natoapp6c/s/medical}
+ ([xscale=.5,shift={(0,-.2)}]M.west) -- ([xscale=.5,shift={(0,.2)}]M.west)
+ ([xscale=.5,shift={(0,-.2)}]M.east) -- ([xscale=.5,shift={(0,.2)}]M.east);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mine}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mine/.pic={
+ \path[fill=pgfstrokecolor,draw] (0,0) ellipse(.2 and .15)
+ (0,0) -- ++(60:.3)
+ (0,0) -- ++(90:.3)
+ (0,0) -- ++(120:.3)
+ (0,0) -- ++(240:.3)
+ (0,0) -- ++(270:.3)
+ (0,0) -- ++(300:.3)
+ ;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mine clearing equipment}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mine clearing equipment/.pic={
+ \path[pic actions]
+ (0, 0.2) -- (0, 0) -- (0.35, -0.2) -- (-0.35, -0.2) -- (0, 0);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mine warfare vessel}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mine warfare vessel/.pic={%
+ \pic[scale=.8,fill=pgfstrokecolor,yshift=2.5]{natoapp6c/s/sea mine=top half};
+ \pic {natoapp6c/s/warfare vessel};
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/missile}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/missile/.pic={%
+ \path[pic actions,draw]
+ (0, 0.3)
+ -- (-0.05, 0.2)
+ -- (-0.05, -0.2)
+ -- (-0.125,-0.3)
+ -- (-0.125,-0.4)
+ -- (0, -0.265)
+ -- (0.125,-0.4)
+ -- (0.125,-0.3)
+ -- (0.05,-0.2)
+ -- (0.05,0.2)
+ -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/missile launcher}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/missile launcher/.is choice,
+ pics/natoapp6c/s/missile launcher/base/.style={
+ code={
+ \pic[draw]{natoapp6c/s/weapon=base};
+ \pic[draw]{natoapp6c/s/weapon=top};
+ \pic[draw]{natoapp6c/s/weapon=multi fire};
+ \pic[draw]{natoapp6c/s/weapon=missile launcher};}},
+ pics/natoapp6c/s/missile launcher/none/.style={
+ code={
+ \pic[draw]{natoapp6c/s/missile launcher=base};
+ \path[pic actions] (-.2,-.2)--(-.2,-.35) (.2,-.2)--(.2,-.35);}},
+ pics/natoapp6c/s/missile launcher/air defence/.style={
+ code={
+ \pic[draw]{natoapp6c/s/missile launcher=none};
+ \pic[draw]{natoapp6c/s/weapon=air defence};}},
+ pics/natoapp6c/s/missile launcher/anti tank/.style={
+ code={
+ \pic[draw]{natoapp6c/s/missile launcher=base};
+ \pic[draw]{natoapp6c/s/weapon=anti tank};}},
+ pics/natoapp6c/s/missile launcher/surface to surface/.style={
+ code={%
+ \pic[draw]{natoapp6c/s/missile launcher=none};
+ \pic[draw]{natoapp6c/s/weapon=bottom};
+ \pic[draw]{natoapp6c/s/weapon=machine gun};
+ }},
+ pics/natoapp6c/s/missile launcher/.default=none,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mobile advisor and support}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mobile advisor and support/.pic={
+ \path[draw] (-.35,0) circle(.1) (.35,0) circle(.1);
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ ( 0.15, 0.025) --
+ (-0.25, 0.025) --
+ (-0.25, -0.025) --
+ ( 0.15, -0.025) --
+ ( 0.15, -0.075) --
+ ( 0.25, 0) --
+ ( 0.15, 0.075) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/moored}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/moored/.pic={
+ \path[draw] (0,.2) -- (0,-.05) (-.3,-.05) -- (.3,-.05);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mortar}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mortar/.pic={
+ \path[draw] (0,-.15) circle(.05) (0,.-.1) -- (0,.2)
+ ([shift=(225:.1)]0,.2) -- (0,.2) -- ([shift=(-45:.1)]0,.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/motorized}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/motorized/.pic={\path[draw] (M.north) -- (M.south);},
+ pics/natoapp6c/s/motorised/.style={natoapp6c/s/motorized},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mortuary affairs}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mortuary affairs/.pic={
+ \path[draw] (-.1,-.2) rectangle (.1,.2)
+ (0,-.17) -- (0,.17) (-.07,.1) -- (.07,.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mountain}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mountain/.pic={
+ \path[draw,fill=pgfstrokecolor] (0,.2) -- ++(-60:.7) -- ++(180:.7) -- cycle;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/naval}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/naval/.pic={
+ \def\arrow{(0,0) -- (-.02,0) -- ++(60:.04) -- ++(-60:.04) -- cycle}
+ \begin{scope}[pic actions]
+ \path[draw]
+ (0,.13) circle (.08) (-.2,.04) -- (.2,.04) (0,.04)
+ -- (0,-.25) (210:.25) arc (210:340:.25);
+ \path[draw,shift=(210:.25),rotate=30] \arrow;
+ \path[draw,shift=(340:.25),rotate=-30] \arrow;
+ \end{scope}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/navigation}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/navigation/.pic={
+ \path[draw]
+ (.17,-.2) -- (0,.2) -- (-.17,-.2)
+ ($(-180:.17)+(0,.05)$) arc[radius=.17,start angle=-180,end angle=0];},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/navy task}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/navy task/.pic={
+ \path[pic actions]
+ (-0.25, -0.2) -- (-0.25, 0.1) -- (-0.15, 0.2)
+ ( 0.25, -0.2) -- ( 0.25, 0.1) -- ( 0.15, 0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/non combatant}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/non combatant/.pic={
+ \path[draw,fill=pgfstrokecolor]
+ (-0.25, -0.2) --
+ (-0.25, 0.05) --
+ (-0.15, 0.05) --
+ (-0.15, 0.2) --
+ (0.15, 0.2) --
+ (0.15, 0.05) --
+ (0.25, 0.05) --
+ (0.25, -0.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/non lethal weapon}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/non lethal weapon/.pic={%
+ \pic[draw]{natoapp6c/s/weapon};%
+ \pic[draw]{natoapp6c/s/weapon=non lethal};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/nuclear}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/nuclear/.pic={
+ \path[fill=pgfstrokecolor,pic actions] (0,0) circle(.05)
+ (0: .3) arc(0 : 60:.3) -- ( 60:.1) arc( 60: 0: .1) -- cycle
+ (180:.3) arc(180: 120:.3) -- ( 120:.1) arc( 120: 180:.1) -- cycle
+ (-60:.3) arc(-60:-120:.3) -- (-120:.1) arc(-120:-60: .1) -- cycle;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/observer}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/observer/.pic={
+ \path[pic actions] (0.25,-.2)--(-.25,-.2)--(0,.2)--cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/orbiter shuttle}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/orbiter shuttle/.pic={
+ \path[pic actions]
+ ($(0, 0.3)!0.35!(0.125, -0.15)$) --
+ (0.125, -0.15) -- (-0.125, -0.15) --
+ ($(-0.125, -0.15)!0.65!(0, 0.3)$)
+ to[in=105, out=75] cycle
+ (0, -0.20) -- (0, -0.15); },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/ordnance}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/ordnance/.pic={
+ \path[draw] (0,0) ellipse(.2 and .15);
+ \begin{scope}
+ \clip (0,0) ellipse(.2 and .15) [reverseclip];
+ \path[draw] (0,0) -- ++(50:.3)
+ (0,0) -- ++(70:.3)
+ (0,0) -- ++(110:.3)
+ (0,0) -- ++(130:.3)
+ ;
+ \end{scope}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/organisation}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/organisation/.style={natoapp6c/s/group},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/over snow}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/over snow/.pic={
+ \ifn@to@pp@below%
+ \draw ([shift={(-.15,.15)}]M.south west) to[in=180, out=270]
+ ++(.15,-.15) -- (M.south east);
+ \else%
+ \draw ([shift={(.3,.1)}]M.west) to[in=180, out=-90]
+ ([shift={(.5,-.1)}]M.west) --
+ ([shift={(-.3,-.1)}]M.east);
+ \fi},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/pack animal}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/pack animal/.pic={
+ \def\n@to@pp@tmp{0}
+ \ifn@to@pp@below\def\n@to@pp@tmp{-.15}\fi
+ \path[draw,shift={(0,\n@to@pp@tmp)}]
+ (-.3,-.15) -- (-.15,.15) -- (0,-.15) -- (.15,.15) -- (.3,-.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/patrol}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/patrol/.pic={
+ \pic{natoapp6c/s/warfare vessel};
+ \path[draw,fill=pgfstrokecolor] (0.125, 0) -- (0, 0.2) -- (-0.125, 0) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/patrolling}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/patrolling/.pic={
+ % OBS
+ \path[draw]
+ (0.25, 0.05) -- (-0.05, 0.05) -- (0.05, -0.05) -- (-0.4, -0.05)
+ (-0.3, 0) -- (-0.4, -0.05) -- (-0.3, -0.1)
+ node [natoapp6c/text,natoapp6c/small text,
+ scale=.5,anchor=west,inner sep=0] at (0.25, 0.05) {P};
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/physician}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/physician/.pic={
+ \pic{natoapp6c/s/medical};
+ \path[draw] (0.1, 0.05) -- (-0.1, 0.05);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/pipeline}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/pipeline/.pic={
+ \path[draw] (-.15,-.15) rectangle (.15,.15)
+ (-.3,.1) -- (-.15,.1) (-.3,-.1) -- (-.15,-.1)
+ (.3,.1) -- (.15,.1) (.3,-.1) -- (.15,-.1)
+ (-.05,.15) rectangle (.05,.25) (-.1,.25) rectangle (.1,.30);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/poisoning}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/poisoning/.pic={
+ \path[pic actions] (0, 0.055) circle (0.145)
+ (0.3, 0) -- (-0.3, -0.2)
+ (-0.3, 0) -- (0.3, -0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/postal}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/postal/.pic={
+ \path[draw] (-.25,.25) -- (.08,.25)
+ to [out=-90,in=120,looseness=1] (.25,-.25)
+ to [out=150,in=-90,looseness=1] (-.25,.25);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/printed media}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/printed media/.pic={
+ \path[pic actions] (0.2, 0) -- (-0.2, 0)
+ (0, 0.1) circle (0.085)
+ (0, -0.1) circle (0.085);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/psychological}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/psychological/.pic={
+ \path[pic actions] (-.25,.15) -- (-.1,.15) -- (.1,.25)
+ -- ++(0,-.5) -- (-.1,-.15) -- (-.25,-.15) -- cycle
+ (.1,.15) -- (.25,.15)
+ (.1,.05) -- (.25,.05)
+ (.1,-.05) -- (.25,-.05)
+ (.1,-.15) -- (.25,-.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/quarry}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/quarry/.pic={
+ \path[draw] (-.2,-.2) -- (.18,.18) (.2,-.2) -- (-.18,.18)
+ (25:.255) arc(25:65:.255)
+ (115:.255) arc(115:155:.255);
+ %([shift={(115:.08)}]-.1,.1) arc (115:155:.08)
+ %([shift={(70:.08)}].1,.1) arc (70:110:.08);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/quartermaster}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/quartermaster/.pic={
+ \path[draw] (-.4,.1) -- (.1,.1) (.25,.1) circle(.15)
+ (-.3,.1) -- (-.3,-.15) (-.15,.1) -- (-.15,-.15)
+ (-.3,-.08) -- (-.15,-.08);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/radar}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/radar/.pic={%
+ \path[draw] (-.2,.2) arc (150:300:.25) (-.24,.01) -- (0,.2) --
+ (0,0) -- (.2,.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/radio}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/radio/.pic={%
+ \path[draw] (-.2,.2) -- (-.13,.25) -- (-.07,.2) -- (0,.25) --
+ (.07,.2) -- (.13,.25) -- (.2,.2) (0,.25) -- (0,-.05) (0,-.15) circle(.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/radio relay}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/radio relay/.pic={%
+ \path[draw] (-.2,.25) -- (.2,.25) (0,.25) -- (0,-.05) (0,-.15) circle(.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/radio relay line of sight}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/radio relay line of sight/.pic={%
+ \path[draw] (0,0) circle(.2);
+ \path[fill=pgfstrokecolor] (0,0) -- (45:.2) arc(45:-45:.2) -- cycle;
+ \path[fill=pgfstrokecolor] (0,0) -- (135:.2) arc(135:225:.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/radio teletype}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/radio teletype/.pic={%
+ \path[draw] (-.2,.25) -- (.2,.25) (-.15,.18) -- (.15,.18)
+ (0,.25) -- (0,-.25)
+ ([shift=(30:.1)]0,-.15) arc(30:330:.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/railroad}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/railroad/.pic={%
+ \ifn@to@pp@below%
+ \path[pic actions] (M.south west) -- (M.south east)
+ ([shift={(.08,-0.08)}]M.south west) circle(.08)
+ ([shift={(.24,-0.08)}]M.south west) circle(.08)
+ ([shift={(-.08,-0.08)}]M.south east) circle(.08)
+ ([shift={(-.24,-0.08)}]M.south east) circle(.08);
+ \else
+ \path[pic actions] (-.45,.08) -- (.45,.08)
+ (-.37,0) circle(0.08)
+ (-.21,0) circle(0.08)
+ (.21,0) circle(0.08)
+ (.37,0) circle(0.08);
+ \fi
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/reconnaissance}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/reconnaissance/.pic={%
+ \path[draw] (M.north east)--(M.south west);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/recovery unmanned systems}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/recovery unmanned systems/.pic={%
+ \path[draw] (-.5,.15) to [out=-80,in=180] (0,-.15) to
+ [out=0,in=260] (.5,.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/rifle}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/rifle/.pic={%
+ \pic[draw]{natoapp6c/s/weapon=full};
+ \pic[draw]{natoapp6c/s/weapon=rifle};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/rising}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/rising/.pic={
+ \path[draw,fill=pgfstrokecolor] (0, 0.2) -- (0, -0.167)
+ (0.1, -0.2) -- (-0.1, -0.2) -- (0, 0.0);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/riverine}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/riverine/.pic={%
+ \ifn@to@pp@below%
+ \path[pic actions] (M.south west)
+ to [out=-90,in=-90,looseness=.5] (M.south east) -- cycle;
+ \else%
+ \path[pic actions] (-.5,.15) to [out=-80,in=180] (0,-.15) to
+ [out=0,in=260] (.5,.15) -- cycle;
+ \fi},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/rocket launcher}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/rocket launcher/.is choice,
+ pics/natoapp6c/s/rocket launcher/base/.style={
+ code={
+ \pic[draw]{natoapp6c/s/weapon=base};
+ \pic[draw]{natoapp6c/s/weapon=rifle};
+ \pic[yshift=-4,draw]{natoapp6c/s/weapon=rifle};
+ }},
+ pics/natoapp6c/s/rocket launcher/anti tank/.style={
+ code={
+ \pic[draw]{natoapp6c/s/rocket launcher=base};
+ \pic[draw]{natoapp6c/s/weapon=anti tank};
+ }},
+ pics/natoapp6c/s/rocket launcher/single/.style={
+ code={
+ \pic[draw]{natoapp6c/s/rocket launcher=base};
+ \pic[draw]{natoapp6c/s/weapon=bottom};}},
+ pics/natoapp6c/s/rocket launcher/multiple/.style={
+ code={
+ \pic[draw]{natoapp6c/s/rocket launcher=single};
+ \pic[yshift=-6,draw]{natoapp6c/s/weapon=multi fire};}},
+ pics/natoapp6c/s/rocket launcher/single head/.style={
+ code={%
+ \pic[yshift=4,draw]{natoapp6c/s/weapon=rifle};}},
+ pics/natoapp6c/s/rocket launcher/multiple head/.style={
+ code={
+ \pic[yshift=-4,draw]{natoapp6c/s/weapon=rifle};
+ \pic[yshift=-6,draw]{natoapp6c/s/weapon=rifle};
+ }},
+ pics/natoapp6c/s/rocket launcher/.default=single,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/rotary wing}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/rotary wing/.pic={
+ \path[pic actions]
+ (0.44, 0.15) -- (0.44, -0.15) -- (-0.44, 0.15) -- (-0.44, -0.15) --
+ cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/runway}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/runway/.pic={%
+ \path[draw] (-.3,-.15) -- (.3,-.15) (-.2,-.2) -- (.2,.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/sailing boat}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/sailing boat/.pic={%
+ \path[draw]
+ (-0.15, -0.2) --
+ ( 0.15, -0.2) --
+ ( 0.25, -0.025) --
+ (-0.25, -0.025) -- cycle
+ ( 0, -0.025) -- (0, 0.2)
+ (0.025, 0) -- (0.025, 0.19) -- (0.225, 0) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/satellite}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/satellite/.is choice,
+ pics/natoapp6c/s/satellite/none/.style={
+ code={
+ \iftikz@mode@fill
+ \def\n@to@pp@next{\path[draw,fill=pgfstrokecolor,pic actions]}
+ \else
+ \def\n@to@pp@next{\path[pic actions]}
+ \fi
+ \n@to@pp@next
+ ( 0.45, 0.075) rectangle ( 0.15, -0.075)
+ ( 0.075, 0.075) rectangle (-0.075, -0.075)
+ (-0.45, 0.075) rectangle (-0.15, -0.075)
+ ( 0.15, 0) -- (0.075, 0)
+ (-0.15, 0) -- (-0.075, 0);
+ }},
+ pics/natoapp6c/s/satellite/astronomical/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic{natoapp6c/s/satellite=none};
+ \endgroup
+ \path[pic actions]
+ (0.04, 0.075) rectangle (-0.04, 0.2)
+ (0.02, -0.075) rectangle (-0.02, -0.2);}},
+ pics/natoapp6c/s/satellite/bio/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic[yshift=-1]{natoapp6c/s/satellite=none};
+ \endgroup
+ \path[pic actions]
+ (-0.075, 0.13) circle (0.07)
+ ($(-0.075, 0.13) + (60:0.07)$) --
+ ++(-30:0.22) -- ++(0, -0.025) -- (-0.005, 0.13) -- cycle;
+ }},
+ pics/natoapp6c/s/satellite/communications/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic[yshift=-1]{natoapp6c/s/satellite=none};
+ \endgroup
+ \path[pic actions]
+ (0, 0.075) -- (0, 0.125)
+ (0, 0.125) arc (270:340:0.25 and 0.1)
+ (0, 0.125) arc (270:200:0.25 and 0.1);
+ }},
+ pics/natoapp6c/s/satellite/navigation/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic[yshift=-3.75,scale=.9]{natoapp6c/s/satellite=none};
+ \endgroup
+ \pic[scale=.5,yshift=3.5]{natoapp6c/s/navigation};
+ }},
+ pics/natoapp6c/s/satellite/earth observing/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic[yshift=3.75, scale=0.9]{natoapp6c/s/satellite=none};
+ \endgroup
+ \path[pic actions]
+ (0, 0.065) -- +(315:0.125)
+ (0, 0.065) -- +(225:0.125)
+ (0, -0.12) circle (0.08);
+ }},
+ pics/natoapp6c/s/satellite/tether/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic[yshift=-3.75, scale=0.9]{natoapp6c/s/satellite=none};
+ \endgroup
+ \path[pic actions]
+ (0, -0.066) -- +(30:0.3)
+ (0, -0.066) +(30:0.375) circle(0.075);
+ }},
+ pics/natoapp6c/s/satellite/small/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic[scale=0.6]{natoapp6c/s/satellite=none};
+ \endgroup
+ \path[pic actions]
+ (0.05, 0.2) -- ( 0, 0.1) -- (-0.05, 0.2)
+ (0.05, -0.2) -- ( 0, -0.1) -- (-0.05, -0.2)
+ (-0.4, 0.05) -- (-0.3, 0) -- (-0.4, -0.05)
+ ( 0.4, 0.05) -- ( 0.3, 0) -- ( 0.4, -0.05);
+ }},
+ pics/natoapp6c/s/satellite/reconnaissance/.style={
+ code={
+ \pic[yshift=-1,fill=pgfstrokecolor]{natoapp6c/s/satellite=none};
+ \path[pic actions]
+ (-0.075, -0.05) -- +(250:0.1)
+ (-0.025, -0.05) -- +(260:0.1)
+ ( 0.025, -0.05) -- +(280:0.1)
+ ( 0.075, -0.05) -- +(290:0.1);
+ }},
+ pics/natoapp6c/s/satellite/.default=none,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/sea mine}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/sea mine/.is choice,
+ pics/natoapp6c/s/sea mine/top half/.style={
+ code={\path[draw,join=bevel,pic actions]
+ (.2,0) arc(0:35:.2 and .175) --
+ (42:.34 and .3) -- (48:.34 and .3) --
+ % ($(45:.1) + (40:.2)$) -- ($(45:.1)+(50:.2)$) --
+ (55:.2 and .175) arc(50:75:.2 and .175) --
+ (80:.26 and .23) -- (100:.26 and .23) --
+ (105:.2 and .175) arc(100:125:.2 and .175) --
+ (132:.34 and .3) -- (138:.34 and .3) --
+ %($(135:.1)+(130:.2)$) -- ($(135:.1)+(140:.2)$) --
+ (145:.2 and .175) arc(145:180:.2 and .175);
+ }},
+ pics/natoapp6c/s/sea mine/bottom half/.style={
+ code={
+ \path[pic actions] (.2,0) arc(0:-180:.2);}},
+ pics/natoapp6c/s/sea mine/full/.style={
+ code={
+ \pic[fill=pgfstrokecolor]{natoapp6c/s/sea mine/top half};
+ \pic[fill=pgfstrokecolor]{natoapp6c/s/sea mine/bottom half};}},
+ pics/natoapp6c/s/sea mine/neutralised/.style={
+ code={
+ \begin{scope}[even odd rule]
+ \clip [rotate=42] (-.4,-.015) rectangle (.4,.015) [reverseclip];
+ \clip [rotate=-42] (-.4,-.015) rectangle (.4,.015) [reverseclip];
+ \pic {natoapp6c/s/sea mine=full};
+ \end{scope}
+ }},
+ pics/natoapp6c/s/sea mine/neutralized/.style=natoapp6c/s/sea mine/neutralised,
+ pics/natoapp6c/s/sea mine/.default=full,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/seabed installation}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/seabed installation/.pic={%
+ \path[pic actions]
+ (-0.25, -0.2) --
+ ( 0.25, -0.2) --
+ ( 0.25, -0.075) --
+ ( 0.05, -0.075) --
+ ( 0.05, 0.025) --
+ (-0.125, 0.025) --
+ (-0.125, 0.2) --
+ (-0.25, 0.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/search}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/search/.pic={%
+ \path[draw] (-.3,-.2)--(0,-.4)--(.3,-.2) (0,.4)--(0,-.4);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/searching}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/searching/.pic={%
+ \path[pic actions]
+ (-0.4, 0)
+ arc (180:0:0.1)
+ arc (180:360:0.1)
+ arc (180:0:0.1)
+ arc (180:270:0.1) -- +(0.1, 0)
+ (0.3, -0.05) -- (0.4, -0.1) -- (0.3, -0.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/semi trailer truck}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/semi trailer truck/.pic={
+ \pic[scale=.75,xshift=-2,draw]{natoapp6c/s/utility vehicle};
+ \path[pic actions] (0.21, -0.025) -- (0.35, -0.025)
+ (0.35, 0.05) -- (0.35, -0.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/sensor}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/sensor/.pic={%
+ \path[fill=pgfstrokecolor] (-.3,0) arc (270:360:.3) arc (180:270:.3) arc
+ (90:180:.3) arc (0:90:.3);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/ship}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/ship/.pic={%
+ \path[pic actions]
+ (-0.2, -0.2) --
+ ( 0.2, -0.2) --
+ ( 0.35, 0.05) --
+ ( 0.15, 0.05) --
+ ( 0.15, 0.2) --
+ (-0.15, 0.2) --
+ (-0.15, 0.05) --
+ (-0.35, 0.05) --
+ cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/signal}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/signal/.pic={%
+ \path[draw] (M.north west) -- (0,-.1) -- (0,.1) -- (M.south east);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/signals intelligence}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/signals intelligence/.pic={%
+ \path[draw] (-.2,.2) -- (-.13,.25) -- (-.07,.2) -- (0,.25) --
+ (.07,.2) -- (.13,.25) -- (.2,.2) (0,.25) -- (0,-.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/ski}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/ski/.pic={
+ \path[draw] (-.15,-.15) -- (.1,.2) (.15,-.15) -- (-.1,.2)
+ (-.1,-.2) -- (-.2,-.1)
+ (.1,-.2) -- (.2,-.1);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/sled}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/sled/.pic={
+ \ifn@to@pp@below%
+ \draw ([shift={(-.15,.15)}]M.south west) to[in=180, out=-90]
+ ++(.15,-.15) -- (M.south east) to[in=-90, out=0]
+ ([shift={(.15,.15)}]M.south east);
+ \else%
+ \draw ([shift={(.3,.1)}]M.west) to[in=180, out=-90]
+ ([shift={(.5,-.1)}]M.west) --
+ ([shift={(-.5,-.1)}]M.east) to[in=-90, out=0]
+ ([shift={(-.3,.1)}]M.east);
+ \fi
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/small squashed text}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/small squashed text/.style={
+ code={\n@to@pp@text@smallsquashed{#1};}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/small text}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/small text/.style={code={\n@to@pp@text@small{#1};}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/sniper}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/sniper/.pic={%
+ \path[draw] (-.2,.2)--(-.05,.2) (.05,.2)--(.2,.2) (0,.15)--(0,-.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/space station}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/space station/.pic={
+ \path[join=bevel,pic actions]
+ (-80:.15 and .06) -- (0.025, 0.175) arc(0:180:0.025) -- (-100:.15 and .06)
+ ($(80:.25 and 0.1)+(0,-.0125)$) arc(80:-260:.25 and .1) --
+ (-260:.15 and .06) arc (-260:80:.15 and .06) -- cycle
+ (-82:.25 and .1) -- (0.025, -0.175) arc(360:180:0.025) -- (-98:.25 and .1);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/squashed text}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/squashed text/.style={code={\n@to@pp@text@squashed{#1};}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/submarine}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/submarine/.pic={
+ \path[fill=pgfstrokecolor,pic actions]
+ (0.4, 0) --
+ (0.25, 0.15) --
+ (-0.25, 0.15) --
+ (-0.4, 0) --
+ (-0.25, -0.15) --
+ (0.25, -0.15) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/submersible}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/submersible/.pic={
+ \path[pic actions]
+ ($(0, -0.05) + (106.6:0.35 and 0.15)$)
+ arc (106.6:433.4:0.35 and 0.15) |- (0, 0.2) -| cycle;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/supply}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/supply/.pic={
+ \path[pic actions]
+ ($(M.east)-(0,.25)$)--($(M.west)-(0,.25)$);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/surface combatant}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/surface combatant/.pic={
+ \pic {natoapp6c/s/warfare vessel};
+ \path[draw,fill=pgfstrokecolor]
+ (0.12, 0.05) --
+ (0.12, 0.14) --
+ (0.06, 0.14) --
+ (0.06, 0.2) --
+ (0.24, 0.2) --
+ (0.24, 0.272) --
+ (0.06, 0.272) --
+ (0.06, 0.35) --
+ (-0.06, 0.35) --
+ (-0.06, 0.272) --
+ (-0.24, 0.272) --
+ (-0.24, 0.2) --
+ (-0.06, 0.2) --
+ (-0.06, 0.14) --
+ (-0.12, 0.14) --
+ (-0.12, 0.05) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/survey}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/survey/.pic={
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ (0, -0.1) -- (0, 0.195) -- (0.25, 0.0475) -- cycle;
+ \path[pic actions] (0.1, -0.2) -- (0, -0.1) -- (-0.1, -0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/tactical satellite}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/tactical satellite/.pic={
+ \path[fill=pgfstrokecolor,draw]
+ (-.3,-.2) rectangle(-.15,.2)
+ (.15,-.2) rectangle( .3,.2)
+ (-.075,-.15) rectangle (.075,.15)
+ (-.15,0) -- (.15,0)
+ (0,-.15) -- (0,-.3);
+ \path[draw] (-.2,-.35) to [out=40,in=140,looseness=1] (.2,-.35);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/tank}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/tank/.pic={%
+ \pic[draw]{natoapp6c/s/vehicle};
+ \path[pic actions] ( 0.35, 0.2) -- (-0.35, 0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/text}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/text/.style={code={%
+ \n@to@pp@dbg{3}{Text: `#1'}%
+ \n@to@pp@text@normal{#1};}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/topographic}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/topographic/.pic={
+ \path[draw] (0,.05) -- (0,.2)
+ (0,.05) -- (-.1,-.2)
+ (0,.05) -- (.1,-.2)
+ (-30:.15) arc[radius=.15,start angle=-30,end angle=-150];},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/torpedo}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/torpedo/.pic={
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ (-0.35, 0) --
+ (-0.3, 0.075) --
+ ( 0.25, 0.075) --
+ ( 0.35, -0.075) --
+ ( 0.35, 0.075) --
+ ( 0.25, -0.075) --
+ (-0.3, -0.075) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/towed}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/towed/.pic={
+ \ifn@to@pp@below%
+ \path[pic actions] (M.south east) -- (M.south west)
+ ([shift={(.08,0)}]M.south east) circle(.08)
+ ([shift={(-.08,0)}]M.south west) circle(.08);
+ \else%
+ \path[draw] (-.32,0) -- (.32,0) (-.4,0) circle(.08) (.4,0) circle(.08);%
+ \fi},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/tracked}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/tracked/.pic={
+ \ifn@to@pp@below%
+ \path[pic actions]
+ ([shift={(.08,-.16)}]M.south west)
+ arc [radius=.08,start angle=-90,end angle=-270]
+ -- ([shift={(-.08,0)}]M.south east)
+ arc [radius=.08,start angle=90,end angle=-90]
+ -- cycle;
+ \else%
+ \path[pic actions]
+ (-.3,-.1) arc [radius=.1,start angle=-90,end angle=-270]
+ -- (.3,.1) arc [radius=.1,start angle=90,end angle=-90]
+ -- cycle;
+ \fi},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/train locomotive}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/train locomotive/.pic={
+ \path[pic actions]
+ (.35,-.3)--(-.35,-.3)--(-.35,.3)--(0,.3)--(0,0)--(0.35, 0)--cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/transportation}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/transportation/.pic={
+ \path[pic actions] (0,0) circle(.2)
+ (180:.2) -- (0:.2)
+ (225:.2) -- (45:.2)
+ (270:.2) -- (90:.2)
+ (315:.2) -- (135:.2) ;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/unexploded ordnance}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/unexploded ordnance/.pic={
+ \begin{scope}[transparency group=knockout]
+ \path[draw,fill=pgfstrokecolor,pic actions] (0,0) circle(.2);
+ \pic[opacity=0]{natoapp6c/s/small squashed text=UXO};
+ \end{scope}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/unmanned}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/unmanned/.pic={
+ \path[pic actions]
+ (0,-0.1)
+ --(0.45,0.05)
+ --(0.45,0.1)
+ --(0,0.025)
+ --(-0.45,0.1)
+ --(-0.45,0.05)
+ --cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/utility vehicle}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/utility vehicle/.pic={%
+ \pic[draw]{natoapp6c/s/vehicle};
+ \path[pic actions]
+ (0.35, 0.3) to[in=-90, out=-90, looseness=1] (-0.35, 0.3); },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/vehicle}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/vehicle/.pic={
+ \path[pic actions]
+ (-0.35, 0.2) -- (-0.35, -0.2) -- ( 0.35, -0.2) -- ( 0.35, 0.2)
+ (-0.35, -0.2) -- (-0.35, -0.3)
+ (0.35, -0.2) -- ( 0.35, -0.3)
+ (-0.35, 0.2) -- (-0.35, 0.3)
+ (0.35, 0.2) -- ( 0.35, 0.3);}
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/video imagery}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/video imagery/.pic={
+ \path[pic actions]
+ (-0.4, 0.2) -- (-0.4, -0.2) -- (0.05, -0.2) -- (0.2, 0.2) -- cycle
+ (0.075, -0.15) -- (0.4, -0.15)
+ (0.16, 0.1) -- (0.4, 0.1);
+ \path[draw,fill=pgfstrokecolor,pic actions](0.38,-.2) rectangle (0.42,.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/warfare vessel}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/warfare vessel/.pic={
+ \path[draw,fill=pgfstrokecolor] (0, -0.2) -- (0.3, 0.05) -- (-0.3, 0.05) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/water}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/water/.pic={
+ \path[pic actions]
+ (-0.3, 0.05) -- (0, 0.05) to[in=90, out=0] (0.3, -0.2)
+ (0, 0.05) -- (0, 0.2)
+ (0.075, 0.2) -- (-0.075, 0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/wheeled}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/wheeled/.is choice,
+ pics/natoapp6c/s/wheeled/and tracked/.style={
+ code={
+ \ifn@to@pp@below%
+ \path[pic actions]
+ ([shift={(.4,-.16)}]M.south west)
+ arc [radius=.08,start angle=-90,end angle=-270]
+ -- ([shift={(-.08,0)}]M.south east)
+ arc [radius=.08,start angle=90,end angle=-90]
+ -- cycle
+ ([shift={(.08,-.08)}]M.south west) circle(.08);
+ \else%
+ \path[pic actions]
+ (-.1,-.08) arc [radius=.08,start angle=-90,end angle=-270]
+ -- (.32,.08) arc [radius=.08,start angle=90,end angle=-90]
+ -- cycle
+ (-.4,0) circle(0.08);
+ \fi}},
+ pics/natoapp6c/s/wheeled/limited/.style={
+ code={
+ \ifn@to@pp@below%
+ \path[pic actions] (M.south west) -- (M.south east)
+ ([shift={(.08,-.08)}]M.south west) circle(.08)
+ ([shift={(-.08,-.08)}]M.south east) circle(.08);
+ \else
+ \path[pic actions] (-.4,.08) -- (.4,.08)
+ (-.32,0) circle(0.08) (.32,0) circle(0.08);
+ \fi}},
+ pics/natoapp6c/s/wheeled/cross country/.style={
+ code={\pic{natoapp6c/s/wheeled=limited};
+ \ifn@to@pp@below%
+ \path[pic actions] ([shift={(0,-.08)}]M.south) circle(.08);
+ \else
+ \path[pic actions] (0,0) circle(0.08);
+ \fi}},
+ pics/natoapp6c/s/wheeled/semi/.style={
+ code={\pic{natoapp6c/s/wheeled=limited};
+ \ifn@to@pp@below%
+ \path[pic actions] ([shift={(.24,-.08)}]M.south west) circle(.08);
+ \else
+ \path[pic actions] (-.16,0) circle(0.08);
+ \fi}},
+ pics/natoapp6c/s/wheeled/.default=limited,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \subsubsection{Some extra MIL-STD symbols}
+%
+% Extra NATO App6(c) symbol (from MIL-STD)
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/prison}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/prison/.pic={
+ \path[pic actions] (-.3,-.3)rectangle(.3,.3)
+ (-.23,-.30)--(-.23, .3)
+ ( .23,-.30)--( .23, .3)
+ (-.08,-.30)--(-.08,-.2)
+ (-.08,-.15) circle (.05)
+ (-.08,-.1) --(-.08, .3)
+ ( .08,-.30)--( .08,-.2)
+ ( .08,-.15) circle (.05)
+ ( .08,-.1) --( .08, .3)
+ (0,.15) circle(.07 and .1);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/text.dtx b/macros/latex/contrib/wargame/source/natoapp6c/text.dtx
new file mode 100644
index 0000000000..5a441dc482
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/text.dtx
@@ -0,0 +1,57 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+%\subsubsection{Text on symbols}
+%
+% \begin{TikzKey}{/tikz/natoapp6c/normal text,
+% /tikz/natoapp6c/squashed text,
+% /tikz/natoapp6c/small text,
+% /tikz/natoapp6c/small squashed text}
+%
+% NATO App6 does not specify any particular font for text symbols
+% (main, modifiers, or amplifiers) but here we choose to use \TeX{}
+% Gyro Heros (a Gothic font, i.e., Helvetica-like).
+%
+% \begin{macrocode}
+\newcommand\n@to@ppfont[2][b]{%
+ \fontencoding{T1}\fontfamily{qhv}\fontseries{#1}\fontsize{#2}{0}\selectfont}
+\tikzset{%
+ natoapp6c/text/.style={%
+ shape=rectangle,%
+ draw=none,%
+ fill=none,%
+ transform shape,%
+ anchor=center},
+ natoapp6c/normal text/.style={font=\n@to@ppfont{12}},
+ natoapp6c/squashed text/.style={font=\n@to@ppfont[bc]{12}},
+ natoapp6c/small text/.style={font=\n@to@ppfont{10}},
+ natoapp6c/squashed small text/.style={font=\n@to@ppfont[bc]{10}},
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{Macro}{\n@to@pp@text@normal,
+% \n@to@pp@text@squashed,
+% \n@to@pp@text@small,
+% \n@to@pp@text@smallsquashed}
+%
+% These macros are short-hands for making a node at $(0,0)$ in the
+% local scope.
+%
+% \begin{macrocode}
+\newcommand\n@to@pp@text@normal[2][] {%
+ \node[natoapp6c/text,natoapp6c/normal text,#1]{#2}}
+\newcommand\n@to@pp@text@squashed[2][]{%
+ \node[natoapp6c/text,natoapp6c/squashed text,#1]{#2}}
+\newcommand\n@to@pp@text@small[2][] {%
+ \node[natoapp6c/text,natoapp6c/small text,#1]{#2}}
+\newcommand\n@to@pp@text@smallsquashed[2][]{%
+ \node[natoapp6c/text,natoapp6c/squashed small text,#1]{#2}}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/util.dtx b/macros/latex/contrib/wargame/source/natoapp6c/util.dtx
new file mode 100644
index 0000000000..18c7689878
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/util.dtx
@@ -0,0 +1,60 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{Utility macros used in the symbols}
+%
+% Here, we define the main symbols used when making markers. Since
+% some of these symbols share code, we will create some regular \TeX{}
+% macros to hold the path definitions. This is by far the simplest
+% way of storing just the path specifications.
+%
+% \begin{Macro}{\testpath}
+% \begin{macrocode}
+\def\testpath#1{\csname n@toapp@#1\endcsname}
+% \end{macrocode}
+% \end{Macro}
+%
+% Corps support for \spec{friendly}, \spec{hostile},
+% \spec{neutral}, and \spec{unknown} factions.
+%
+% \begin{Macro}{\n@toapp@corps@sup@friendly,
+% \n@toapp@corps@sup@hostile,
+% \n@toapp@corps@sup@neutral,
+% \n@toapp@corps@sup@unknown}
+% \begin{macrocode}
+\def\n@toapp@corps@sup@friendly{(.75,.5)--(.5,0)--(.75,-.5)}
+% (M.north east)--(M.east-.25,0)--(M.south east)}
+\def\n@toapp@corps@sup@hostile{(.95,.5)--(.45,0)--(.95,-.5)}
+\def\n@toapp@corps@sup@neutral{(.5,.5)--(.35,0)--(.5,-.5)}
+\def\n@toapp@corps@sup@unknown{(.75,.5)--(.5,0)--(.75,-.5)}
+% \end{macrocode}
+% \end{Macro}
+%
+% Corps support, base
+%
+% \begin{Macro}{\n@toapp@corps@support}
+% \begin{macrocode}
+\def\n@toapp@corps@support#1{
+ \ifx\n@to@pp@friendly#1\n@toapp@corps@sup@friendly%
+ \else\ifx\n@to@pp@hostile#1\n@toapp@corps@sup@hostile%
+ \else\ifx\n@to@pp@neutral#1\n@toapp@corps@sup@neutral%
+ \else\ifx\n@to@pp@unknown#1\n@toapp@corps@sup@unknown%
+ \fi\fi\fi\fi}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{NatoAppSymbol}{natoapp6c/s/TBD}
+% Special placeholder for symbols To Be Done.
+%
+% \begin{macrocode}
+\tikzset{
+ natoapp6c/s/TBD/.pic={\n@to@pp@text@normal{\color{magenta}TBD};}
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/weaponry.dtx b/macros/latex/contrib/wargame/source/natoapp6c/weaponry.dtx
new file mode 100644
index 0000000000..3138da9e75
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/weaponry.dtx
@@ -0,0 +1,88 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{Symbols used when defining weaponry}
+%
+%
+% \begin{NatoAppSymbol}{natoapp6c/s/weapon}
+% \begin{macrocode}
+\tikzset{
+ pics/natoapp6c/s/weapon/.is choice,
+ pics/natoapp6c/s/weapon/base/.style={
+ code={\path [pic actions] (0,-0.2)--(0,.2);}},
+ pics/natoapp6c/s/weapon/top/.style={
+ code={\path [pic actions] (0,.2)--(0,.35);}},
+ pics/natoapp6c/s/weapon/bottom/.style={
+ code={\path [pic actions] (0,.-.35)--(0,-.2);}},
+ pics/natoapp6c/s/weapon/rifle/.style={
+ code={\path [pic actions] (0.2, 0.1)--(0, 0.35)--(-0.2,0.1);}},
+ pics/natoapp6c/s/weapon/machine gun/.style={
+ code={\path [pic actions] (0.2, -0.35)--(-0.2, -0.35);}},
+ pics/natoapp6c/s/weapon/grenade launcher/.style={
+ code={\path [pic actions] (0,0) circle (0.1);}},
+ pics/natoapp6c/s/weapon/missile launcher/.style={
+ code={%
+ \path [pic actions] (0.2, 0.15)
+ to[out=90,in=90,looseness=1.75] (-0.2, 0.15);}},
+ pics/natoapp6c/s/weapon/non lethal/.style={
+ code={\path [pic actions] (-.2,.35) -- (.2,.35);}},
+ pics/natoapp6c/s/weapon/multi fire/.style={
+ code={\path[pic actions] (.2,-.2)--(.2, .2) (-.2,-.2)--(-.2,0.2);}},
+ pics/natoapp6c/s/weapon/air defence/.style={
+ code={%
+ \path[pic actions] (0.2, -0.4)
+ to[out=90,in=90,looseness=1.7] (-0.2, -0.4) -- cycle;}},
+ pics/natoapp6c/s/weapon/anti tank/.style={
+ code={\path[pic actions] (0.2, -0.4)--(0,-0.2)--(-0.2,-0.4);}},
+ pics/natoapp6c/s/weapon/full/.style={
+ code={%
+ \pic[draw]{natoapp6c/s/weapon=base};
+ \pic[draw]{natoapp6c/s/weapon=top};
+ \pic[draw]{natoapp6c/s/weapon=bottom};}},
+ pics/natoapp6c/s/weapon/.default=full
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+%
+% \begin{NatoAppSymbol}{natoapp6c/s/type}
+%
+% (Weight) class of weapons: light, medium, heavy
+%
+% \begin{macrocode}
+\tikzset{
+ pics/natoapp6c/s/type/.is choice,
+ pics/natoapp6c/s/type/light/.style={
+ code={\path [fill=pgfstrokecolor,pic actions] (-0.2, -0.12) rectangle (.2,-.08);}},
+ pics/natoapp6c/s/type/medium/.style={
+ code={
+ \path [fill=pgfstrokecolor,pic actions]
+ (-0.2, -0.12) rectangle (.2,-.08)
+ (-0.2, -0.22) rectangle (.2,-.18);}},
+ pics/natoapp6c/s/type/heavy/.style={
+ code={
+ \path [fill=pgfstrokecolor,pic actions]
+ (-0.2, -0.12) rectangle (.2,-.08)
+ (-0.2, -0.22) rectangle (.2,-.18)
+ (-0.2, -0.32) rectangle (.2,-.28);}},
+ pics/natoapp6c/s/type/vlight/.style={
+ code={\path [fill=pgfstrokecolor,pic actions]
+ (-.025,-0.2) rectangle (.025,.2);}},
+ pics/natoapp6c/s/type/vmedium/.style={
+ code={\path [fill=pgfstrokecolor,pic actions]
+ (-.075,-0.2) rectangle (-.025,.2)
+ ( .025, -0.2) rectangle (.075,.2);}},
+ pics/natoapp6c/s/type/vheavy/.style={
+ code={\path [fill=pgfstrokecolor,pic actions]
+ (-.125,-0.2) rectangle (-.075,.2)
+ (-.025,-0.2) rectangle ( .025,.2)
+ ( .075,-0.2) rectangle ( .125,.2);}},
+ pics/natoapp6c/s/type/.default=light,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/package.dtx b/macros/latex/contrib/wargame/source/package.dtx
new file mode 100644
index 0000000000..908be36b32
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/package.dtx
@@ -0,0 +1,48 @@
+% \subsection{The \texttt{wargame} package}
+% \label{sec:impl:sty}
+%
+% \iffalse
+%<*package>
+% \fi
+%
+% First, package identification
+%
+% \begin{macrocode}
+\ProvidesPackage{wargame}
+% \end{macrocode}
+%
+% Then needed packages
+%
+% \begin{macrocode}
+\RequirePackage[svgnames]{xcolor}
+\RequirePackage{tikz}
+% \end{macrocode}
+%
+% A switch to include terrain pictures (which take a lot of memory for
+% some reason).
+%
+% \begin{macrocode}
+\@ifundefined{ifhex@terrain@pic}{%
+ \newif\ifhex@terrain@pic
+ \hex@terrain@picfalse}{}
+% \end{macrocode}
+%
+% Options
+%
+% \begin{macrocode}
+\DeclareOption{noterrainpic}{%
+ \hex@terrain@picfalse}
+\DeclareOption{terrainpic}{%
+ \hex@terrain@pictrue}
+\ProcessOptions\relax
+% \end{macrocode}
+%
+% Finally, the used \TikZ{} libraries
+%
+% \begin{macrocode}
+\usetikzlibrary{wargame.hex,wargame.natoapp6c,wargame.chit}
+% \end{macrocode}
+%
+% \iffalse
+%</package>
+% \fi
diff --git a/macros/latex/contrib/wargame/source/tests/chits.dtx b/macros/latex/contrib/wargame/source/tests/chits.dtx
new file mode 100644
index 0000000000..7dcf26c50d
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/tests/chits.dtx
@@ -0,0 +1,74 @@
+% \section{Some test chits}
+%
+% \iffalse
+%<*testchits>
+% \fi
+% Some chits for testing stuff
+%
+% \begin{macrocode}
+\def\firstchit{
+ % \chitdbglvl=5
+ % \natoappdbglvl=5
+ \chit[symbol={
+ echelon=army,
+ main=infantry,
+ lower=mountain,
+ faction=friendly,
+ left={text=A},
+ frame={fill=yellow!50!black},
+ ultra thick,
+ command=land},
+ left={chit/identifier={1}},
+ right={chit/identifier={2}},
+ factors={chit/2 factors={4,8}},
+ frame={draw=black},
+ color=white,text=yellow,fill={blue}]}
+\makeatletter
+\def\secondchit{%
+ \@ifnextchar({\second@chit}{\second@chit(0,0)}%)
+}
+\def\second@chit(#1){
+ \node[draw, chit={symbol={[main=fixed wing,
+ faction=friendly,
+ lower={text=F},
+ command=air](0,-.15)},
+ left={[{red,font=\noexpand\sffamily}]chit/identifier={Fighter}},
+ right={chit/identifier={USAF}},
+ factors={chit/1 factor=3}}] at (#1){};}
+\def\thirdchit{
+ \chit[symbol={[echelon=battalion,
+ main={[fill]artillery},
+ faction=friendly,
+ command=land,
+ below=wheeled]},
+ left={chit/identifier={XVII}},
+ right={chit/identifier={IJA}},
+ factors={chit/2 factors artillery={2,6,5}}]}
+\def\fourthchit{
+ \chit[symbol={[main=fixed wing,
+ faction=friendly,
+ lower={text=F},
+ command=air](0,-.15)},
+ left={[{red,font=\noexpand\sffamily}]chit/identifier={Fighter}},
+ right={chit/identifier={USAF}},
+ factors={chit/1 factor=3}]}
+\tikzset{
+ wg/big text/.pic={
+ \node[shape=rectangle,
+ font=\sffamily\fontsize{18}{0}\selectfont]{#1};}}
+\def\turnchit{
+ \chit[full={wg/big text={Turn}},black,fill=yellow!20!white]}
+\tikzset{
+ my chit/.style={/chit/symbol={[
+ faction=friendly,
+ command=land,
+ bottom=amphibious,
+ main={armoured}]},
+ /chit/left={chit/identifier={Mine}},
+ /chit/factors={chit/2 factors={2,4}}}}
+\tikzset{
+ fort/.style={/chit/full={[scale=.625]hex/fortress 2}}}
+% \end{macrocode}
+% \iffalse
+%</testchits>
+% \fi
diff --git a/macros/latex/contrib/wargame/source/tests/map.dtx b/macros/latex/contrib/wargame/source/tests/map.dtx
new file mode 100644
index 0000000000..e685aa6179
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/tests/map.dtx
@@ -0,0 +1,57 @@
+% \section{A test map}
+%
+% \iffalse
+%<*testmap>
+% \fi
+% \begin{Macro}{\testmap}
+%
+% A map for testing stuff
+%
+% \begin{macrocode}
+\def\testmap{
+ \hex[] (r=0,c=0)
+ \hex[] (r=0,c=1)
+ \hex[] (r=0,c=2)
+ \hex[] (r=0,c=3)
+ \hex[] (r=1,c=0)
+ \hex[town={pic=hex/town/city,name=London,font=\noexpand\bfseries}] (r=1,c=1)
+ \hex[terrain={woods}] (r=1,c=2)
+ \hex[] (r=1,c=3)
+ \hex[] (r=2,c=0)
+ \hex[] (r=2,c=1)
+ \hex[town={name=Oxford,red}] (r=2,c=2)
+ \hex[] (r=2,c=3)
+ \hex[] (r=3,c=0)
+ \hex[town={name=Cambridge}] (r=3,c=1)
+ \hex[] (r=3,c=2)
+ \hex[] (r=3,c=3)
+ \river
+ (hex cs:r=0,c=0,v=north west)--
+ (hex cs:r=0,c=0,v=north east)--
+ (hex cs:r=1,c=1,v=north west)--
+ (hex cs:r=2,c=1,v=west)--
+ (hex cs:r=2,c=1,v=north west)--
+ (hex cs:r=2,c=1,v=north east)--
+ (hex cs:r=3,c=1,v=east)--
+ (hex cs:r=2,c=2,v=north east)--
+ (hex cs:r=3,c=3,v=north west);
+ \river
+ (hex cs:r=2,c=0,v=east)--
+ (hex cs:r=2,c=0,v=north east);
+ \border[dashed,line width=3pt,red]
+ (hex cs:r=0,c=3,v=west)--
+ (hex cs:r=0,c=3,v=north west)--
+ (hex cs:r=1,c=3,v=west)--
+ (hex cs:r=1,c=3,v=north west)--
+ (hex cs:r=1,c=3,v=north east);
+ \road (hex cs:r=0,c=0,e=S)--(hex cs:r=0,c=0)--(hex cs:r=1,c=1);
+ \road (hex cs:r=1,c=1)--(hex cs:r=0,c=2)--(hex cs:r=1,c=3);
+ \road (hex cs:r=1,c=1)--(hex cs:r=2,c=1)--(hex cs:r=2,c=2);
+ \road (hex cs:r=1,c=3)--(hex cs:r=1,c=4);
+ \railroad (hex cs:r=2,c=2)--(hex cs:r=3,c=2)--(hex cs:r=4,c=3);
+}
+% \end{macrocode}
+% \end{Macro}
+% \iffalse
+%</testmap>
+% \fi
diff --git a/macros/latex/contrib/wargame/source/tests/test.tex b/macros/latex/contrib/wargame/source/tests/test.tex
new file mode 100644
index 0000000000..5833d679f2
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/tests/test.tex
@@ -0,0 +1,172 @@
+\documentclass{article}
+
+\usepackage{wargame}
+\usetikzlibrary{decorations.markings}
+\title{A test of \textsf{wargame}}
+\author{}
+\date{}
+\input{testmap}
+\input{testchits}
+\begin{document}
+\maketitle
+%\chitdbglvl=6
+%\wargamedbglvl=5
+\natoappdbglvl=1
+
+\section{A board}
+
+\begin{tikzpicture}
+ \begin{scope}[every hex/.style={/hex/label=auto},
+ hex/board frame/.style={fill=Tan}]
+ \boardframe[0.5](c=0,r=0)(c=3,r=3)
+ \boardpath(c=0,r=0)(c=3,r=3)
+ \draw[fill=white,very thick] \hexboardpath;
+ \boardclip(c=0,r=0)(c=3,r=3){fill=white}
+ \testmap{}
+ \end{scope}
+\end{tikzpicture}
+
+\section{Some chits}
+
+\begin{tikzpicture}
+ \fill[red!50] (1,-1) rectangle (3,1);
+ \firstchit(0,0)%
+ %\secondchit(2,0)%
+ \fourthchit(2,0)%
+ \thirdchit(4,0)%
+ \turnchit(6,0)%
+% \chitdbglvl=4
+ \chit[my chit](0,-2)
+ \chit[my chit,color=white,fill=red,right={chit/identifier=1}](2,-2)
+% \chitdbglvl=0
+ \chit[fort](4,-2)
+ \node[chit={my chit},/chit/left={[font=\noexpand\rmfamily]chit/identifier={foo}},draw] at (6,-2) {};
+%
+\end{tikzpicture}
+
+\section{Chits on a board}
+\begin{tikzpicture}
+ \begin{scope}[every hex/.style={/hex/label=auto},transform shape]
+ \boardframe[0.5](c=0,r=0)(c=3,r=3)
+ \boardclip(c=0,r=0)(c=3,r=3){fill=white}
+ \testmap{}
+ \firstchit(hex cs:c=2,r=1)
+ \secondchit(hex cs:c=3,r=0)
+ \thirdchit(hex cs:c=0,r=3)
+
+ \stackchits(hex cs:c=0,r=1)(.3,.3){
+ \noexpand\firstchit,
+ \noexpand\secondchit/\noexpand\chit[{full=chit/eliminate}]}
+
+ \begin{scope}[m/.style={hex/long move=green}]
+ \path[m] (hex cs:c=3,r=0) -- (hex cs:c=3,r=1)--(hex cs:c=3,r=2);
+ \end{scope}
+ \begin{scope}[a/.style={hex/attack}]
+ \path[a] (hex cs:c=1,r=0) -- (hex cs:c=1,r=1);
+ \end{scope}
+ \end{scope}
+ \turnchit(7,3)
+\end{tikzpicture}
+
+\section{NATO App6(C) symbols}
+
+\begin{tikzpicture}
+ \natoapp[faction=friendly,frame={faction},command=land,main=infantry](0,0)
+ %
+ \natoapp[faction=friendly,
+ frame={faction},
+ main={infantry,engineer},
+ lower=mountain,
+ color=red](2,0)
+ %
+ \natoapp[faction=unknown,
+ command=sea surface,
+ main={diving=military},color=blue](4,0)
+ %
+ \natoapp[faction=unknown,
+ command=space,
+ main={[fill]satellite},
+ color=green](6,0)
+ %
+ \natoapp[
+ faction=none,
+ command=base,
+ echelon=army,
+ main={text=M},
+ top={text=T},
+ bottom={text=B},
+ left={text=L},
+ right={text=R},
+ below={text=V}](8,0)
+ %
+ \natoapp[faction=hostile,
+ frame={faction},
+ command=land,
+ echelon=company,
+ main=rifle](10,0)
+ \begin{scope}[scale=.5]
+ \natoapp[faction=hostile,
+ command=land,
+ echelon=platoon,
+ main={rifle}](24,0)
+ \end{scope}
+
+ \natoapp[faction=friendly,frame={faction},
+ command=land,main=infantry,decoy](0,-2)
+
+ \natoapp[faction=friendly,frame={faction},
+ command=land,main=infantry,decoy,scale line widths,line
+ width=1pt](2,-2)
+
+ \begin{scope}[scale=.5]
+ \natoapp[faction=friendly,frame={faction},
+ command=land,main=infantry,decoy,scale line widths,line
+ width=1pt](8,-4)
+ \end{scope}
+\end{tikzpicture}
+
+\section{Rotations}
+
+%\chitdbglvl=5
+%\natoappdbglvl=11
+\begin{tikzpicture}
+ \begin{scope}[rotate=45,transform shape]
+ \message{^^J======= Chit rotated 45}
+ \chit[symbol={[faction=friendly,command=land,echelon=division,
+ main=anti tank anti armour]}](0,0)
+
+ \message{^^J======= NATO App6(D) rotated 45}
+ \natoapp[faction=friendly,command=land,echelon=division,
+ main=anti tank anti armour](0,2)
+
+ \message{^^J======= NATO App6(D) rotated 45}
+ \natoapp[faction=friendly,command=land,echelon=division,
+ main=air defence](0,4)
+ \end{scope}
+
+ \begin{scope}[shift={(4,0)}]
+ \message{^^J==== Normal chit}
+ \chit[symbol={[faction=friendly,command=land,echelon=division,
+ main=anti tank anti armour]}](0,0)
+
+ \message{^^J==== Normal NATO App6(D)}
+ \natoapp[faction=friendly,command=land,echelon=division,
+ main=anti tank anti armour](0,2)
+
+ \message{^^J==== Normal NATO App6(D)}
+ \natoapp[faction=friendly,command=land,echelon=division,
+ main=air defence](0,4)
+
+ \end{scope}
+\end{tikzpicture}
+
+\begin{tikzpicture}
+ \begin{scope}[]
+ \node[draw,chit={symbol={faction=friendly,command=land,main=infantry}}]
+ (A) {};
+ \foreach \a in {north,west,south,east}{%
+ \draw[fill=red] (A.\a) circle(.1);}
+ \draw[thick,green] circle(.2);
+ \end{scope}
+\end{tikzpicture}
+\end{document}
diff --git a/macros/latex/contrib/wargame/source/util/core.dtx b/macros/latex/contrib/wargame/source/util/core.dtx
new file mode 100644
index 0000000000..a3c656a2b3
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/util/core.dtx
@@ -0,0 +1,1299 @@
+% \iffalse
+% ====================================================================
+% \fi
+%
+% \subsection{The \texttt{wargame.util} \TikZ{} library}
+% \label{sec:impl:util}
+%
+% This library contains some utilities for use in the other
+% libraries.
+%
+% \iffalse
+%<*utils>
+%\fi
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Miscellaneous macros}
+%
+% \begin{Macro}{\wg@dbg}
+% Debugging support. The counter \cs{wargamedbglvl} sets the debug
+% level. The package code then uses \cs{wg@dbg} to print out
+% debugging messages. This macro takes two arguments --- the first
+% is the \emph{least} debug level at which the message is printed, and
+% the second is the message it self.
+%
+% \begin{macrocode}
+\newcount\wargamedbglvl\wargamedbglvl=0
+\def\wg@dbg#1#2{%
+ \ifnum#1>\wargamedbglvl\relax\else\message{^^J#2}\fi}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\wg@addto@macro}
+%
+% The macro \cs{wg@addto@macro}\marg{macro}\marg{other} adds the
+% definition of the macro \meta{other} to the macro \meta{macro}.
+% This uses the \cs{toks} trick of storing the \emph{tokens} of the
+% definition of a \meta{macro} and \meta{other} into \spec{@} and
+% expanding that token into the definition of \meta{macro}.
+% Effectively, this means that the top-level definition of
+% \meta{macro} and \meta{other} are expanded (i.e., macros used in
+% the definition of either macro is \emph{not} expanded) and then
+% that becomes the new definition of \meta{macro}.
+%
+% We will use this macro to do \emph{shallow} definitions of macros
+% to contain keys and such.
+%
+% \begin{macrocode}
+\long\def\wg@addto@macro#1#2{%
+ \begingroup
+ \toks@\expandafter\expandafter\expandafter{\expandafter#1#2}%
+ \xdef#1{\the\toks@}%
+ \endgroup}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\wg@sub@nchor}
+% Get anchor from sub node. We cannot use \cs{pgfpointanchor} since
+% that returns the anchor coordinates in the global coordinate
+% system.
+%
+% \begin{macrocode}
+\def\wg@sub@nchor#1#2{%
+ \wg@dbg{3}{^^JGet `#2' in `#1'}%
+ \@ifundefined{pgf@sh@ns@#1}{%
+ \pgf@x=0cm\pgf@y=0cm}{%
+ \pgf@process{%
+ \csname pgf@sh@ma@#1\endcsname% MW
+ \csname pgf@sh@np@#1\endcsname%
+ \pgf@sh@reanchor{\csname pgf@sh@ns@#1\endcsname}{#2}}}%
+ \wg@dbg{10}{-> \the\pgf@x,\the\pgf@y}%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% Scratch dimensions
+%
+% \begin{macrocode}
+\newdimen\wg@tmpa
+\newdimen\wg@tmpb
+\newdimen\wg@tmpc
+\newdimen\wg@tmpd
+% \end{macrocode}
+%
+%
+% Macro to easy restore a saved path
+%
+% \begin{macrocode}
+\def\settosave#1{
+ \pgfsyssoftpath@setcurrentpath{#1}}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Pictures in compound nodes}
+%
+% \begin{Macro}{\wg@pic}
+% The macro \cs{wg@pic} will render a \texttt{pic}. This is used by
+% the \texttt{natoapp6cs}, \texttt{chit}, and \texttt{hex} node
+% shapes extensively.
+%
+% The arguments are
+% \begin{enumerate}
+% \item Prefix
+% \item Position
+% \item Fixed options
+% \item User options
+% \item Picture.
+% \end{enumerate}
+%
+% That is, the macro expects calls like
+% \begin{Syntax}
+% \cs{wg@pic}\oarg{options}\meta{picture}\cs{@endwg@pic}\marg{prefix}\marg{position}\marg{options}
+% \end{Syntax}
+%
+% Note the \cs{@endwg@pic} at the end of the call to swallow up
+% \meta{picture}. Typically this macro is used as
+%
+% \begin{Syntax}
+% \cs{edef}\cs{args}\{\meta{something}\}
+% \cs{expandafter}\cs{wg@pic}\cs{args}\cs{@endwg@pic}\marg{prefix}\parg{position}\marg{options}
+% \end{Syntax}
+%
+% where \meta{something} typically expands to \oarg{user
+% option}\meta{picture}
+%
+% First, the top-level macro \cs{wg@pic} that looks for user
+% options.
+%
+% \begin{macrocode}
+\def\wg@pic{%
+ \@ifnextchar[{\wg@@pic}{\wg@@pic[]}%]
+}
+% \end{macrocode}
+%
+% This macro then forwards to \cs{wg@@pic} to gobble up
+% \meta{picture}.
+%
+% \begin{enumerate}
+% \item User options
+% \item Arguments
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\wg@@pic[#1]#2\@endwg@pic{%
+ \wg@dbg{2}{Options: `#1', picture: `#2'}%
+ \wg@@@pic{#1}{#2}%
+}
+% \end{macrocode}
+%
+% \begin{enumerate}
+% \item User options
+% \item Arguments
+% \item Prefix
+% \item Coordinates
+% \item Fixed options
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\wg@@@pic#1#2#3#4#5{%
+ \ifx|#2|\wg@dbg{3}{No picture given}%
+ \else%
+ \wg@dbg{3}{^^JWG Pic:
+ ^^J User options: #1
+ ^^J Picture: #2
+ ^^J Prefix: #3
+ ^^J Coordinates: #4
+ ^^J Fixed options: #5}%
+ % \wg@dbg{2}{\string\pic[#5,#1] at (#4) {#3#2}}%
+ \pic[#5,#1] at (#4) {#3#2};%
+ \ifwg@s@ve%
+ \pgf@relevantforpicturesizetrue%
+ \begin{getbbl}%
+ \pic[draw=none,fill=none,transform shape] at (#4) {#3#2};%
+ \end{getbbl}%
+ \wg@dbg{5}{Clipping to local bounding box}%
+ \clip (L.south west) rectangle (L.north east);%
+ \pgf@relevantforpicturesizefalse \global\wg@s@vefalse%
+ \fi
+ \fi%
+ \wg@dbg{3}{End of WG Pic}
+}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\wg@pic@all}
+%
+% This macro sets all pictures in a list.
+%
+% \begin{enumerate}
+% \item List
+% \item Prefix
+% \item Position
+% \item Styles
+% \end{enumerate}
+%
+%
+% \begin{macrocode}
+\def\wg@pic@all#1#2#3#4{%
+ \wg@dbg{2}{WG picture loop
+ ^^J List: \meaning#1
+ ^^J Prefix: `#2'
+ ^^J Position: `#3'
+ ^^J Styles: `#4'}
+ \foreach \p in #1{%
+ \wg@dbg{2}{WG picture element: \meaning\p}%
+ \expandafter\wg@pic\p\@endwg@pic {#2}{#3}{#4}%
+ }%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Nodes in compound nodes}
+%
+% \begin{Macro}{\wg@node}
+% The macro \cs{wg@node} will render a \texttt{node}. This can be
+% used by the \texttt{natoapp6cs}, \texttt{chit}, and \texttt{hex}
+% node shapes.
+%
+% The arguments are
+% \begin{enumerate}
+% \item Prefix
+% \item Position
+% \item Fixed options
+% \item User options
+% \item Body.
+% \end{enumerate}
+%
+% That is, the macro expects calls like
+% \begin{Syntax}
+% \cs{wg@node}\oarg{options}\meta{body}\cs{@endwg@node}\marg{prefix}\marg{position}\marg{options}
+% \end{Syntax}
+%
+% Note the \cs{@endwg@node} at the end of the call to swallow up
+% \meta{body}. Typically this macro is used as
+%
+% \begin{Syntax}
+% \cs{edef}\cs{args}\{\meta{something}\}
+% \cs{expandafter}\cs{wg@node}\cs{args}\cs{@endwg@node}\marg{prefix}\parg{position}\marg{options}
+% \end{Syntax}
+%
+% where \meta{something} typically expands to \oarg{user
+% option}\meta{body}
+%
+% First, the top-level macro \cs{wg@node} that looks for user
+% options.
+%
+% \begin{macrocode}
+\def\wg@node{%
+ \@ifnextchar[{\wg@@node}{\wg@@node[]}%]
+}
+% \end{macrocode}
+%
+% This macro then forwards to \cs{wg@@node} to gobble up
+% \meta{body}.
+%
+% \begin{enumerate}
+% \item User options
+% \item Arguments
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\wg@@node[#1]#2\@endwg@node{%
+ \wg@dbg{2}{Options: `#1', body: `#2'}%
+ \wg@@@node{#1}{#2}%
+}
+% \end{macrocode}
+%
+% \begin{enumerate}
+% \item User options
+% \item Arguments
+% \item Prefix
+% \item Coordinates
+% \item Fixed options
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\wg@@@node#1#2#3#4#5{%
+ \ifx|#2|\wg@dbg{3}{No body given}%
+ \else%
+ \wg@dbg{3}{^^JWG Pic:
+ ^^J User options: #1
+ ^^J Body: #2
+ ^^J Prefix: #3
+ ^^J Coordinates: #4
+ ^^J Fixed options: #5}%
+ % \wg@dbg{2}{\string\pic[#5,#1] at (#4) {#3#2}}%
+ \node[#5,#1] at (#4) {#3#2};%
+ \fi%
+ \wg@dbg{3}{End of WG Node}
+}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\wg@node@all}
+%
+% This macro sets all pictures in a list.
+%
+% \begin{enumerate}
+% \item List
+% \item Prefix
+% \item Position
+% \item Styles
+% \end{enumerate}
+%
+%
+% \begin{macrocode}
+\def\wg@node@all#1#2#3#4{%
+ \wg@dbg{2}{WG picture loop
+ ^^J List: \meaning#1
+ ^^J Prefix: `#2'
+ ^^J Position: `#3'
+ ^^J Styles: `#4'}
+ \foreach \p in #1{%
+ \wg@dbg{2}{WG picture element: \meaning\p}%
+ \expandafter\wg@node\p\@endwg@node {#2}{#3}{#4}%
+ }%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Bounding boxes}
+%
+% Bounding box dimensions
+%
+%
+% \begin{macrocode}
+\newdimen\wg@bb@minx
+\newdimen\wg@bb@miny
+\newdimen\wg@bb@maxx
+\newdimen\wg@bb@maxy
+% \end{macrocode}
+%
+%
+%
+% Enable or disable bounding box tracking
+%
+% \begin{macrocode}
+\newif\ifwg@notrelevantforpathsize\wg@notrelevantforpathsizefalse
+% \end{macrocode}
+%
+%
+% \begin{Macro}{wg@resetbb}
+% Reset the bounding box tracking dimensions
+%
+% \begin{macrocode}
+\def\wg@resetbb{%
+ \global\wg@bb@minx=16000pt\relax%
+ \global\wg@bb@miny=16000pt\relax%
+ \global\wg@bb@maxx=-16000pt\relax%
+ \global\wg@bb@maxy=-16000pt\relax%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\old@pgf@protocolsize}
+% Save PGF's bounding box algorithm
+%
+% \begin{macrocode}
+\let\old@pgf@protocolsize\pgf@protocolsizes
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\wg@protocolsizes}
+% Our bounding box algorithm
+%
+% \begin{macrocode}
+\def\wg@protocolsizes#1#2{%
+ \old@pgf@protocolsize{#1}{#2}
+ \ifwg@notrelevantforpathsize\else%
+ \ifdim#1<\wg@bb@minx\global\wg@bb@minx#1\fi%
+ \ifdim#1>\wg@bb@maxx\global\wg@bb@maxx#1\fi%
+ \ifdim#2<\wg@bb@miny\global\wg@bb@miny#2\fi%
+ \ifdim#2>\wg@bb@maxy\global\wg@bb@maxy#2\fi%
+ \fi
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% % \begin{environment}{getbbl}
+% Environment that tracks the local bounding box
+%
+% \begin{macrocode}
+\newenvironment{getbbl}{%
+ \wg@resetbb%
+ \wg@notrelevantforpathsizefalse%
+ \global\let\pgf@protocolsizes\wg@protocolsizes}{%
+ \gdef\pgf@sh@ns@L{rectangle}
+ \gdef\pgf@sh@np@L{%
+ \def\southwest{\pgfqpoint{\the\wg@bb@minx}{\the\wg@bb@miny}}%
+ \def\northeast{\pgfqpoint{\the\wg@bb@maxx}{\the\wg@bb@maxy}}%
+ }
+ \gdef\pgf@sh@nt@L{{1}{0}{0}{1}{0pt}{0pt}}
+ \gdef\pgf@sh@pi@L{\pgfpictureid}
+ \global\let\pgf@protocolsizes\old@pgf@protocolsize
+}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{getbb}
+% Environment to track global bounding box
+%
+% \begin{macrocode}
+\newenvironment{getbb}{%
+ \wg@resetbb%
+ \wg@notrelevantforpathsizefalse%
+ \global\let\pgf@protocolsizes\wg@protocolsizes}{%
+ \gdef\pgf@sh@ns@M{rectangle}
+ \gdef\pgf@sh@np@M{%
+ \def\southwest{\pgfqpoint{\the\wg@bb@minx}{\the\wg@bb@miny}}%
+ \def\northeast{\pgfqpoint{\the\wg@bb@maxx}{\the\wg@bb@maxy}}%
+ }
+ \gdef\pgf@sh@nt@M{{1}{0}{0}{1}{0pt}{0pt}}
+ % \pgfgettransform\pgf@temp%
+ % \xdef\pgf@sh@nt@M{\pgf@temp}
+ % \pgfgettransformentries{\wg@tmp@a}{\wg@tmp@b}{\wg@tmp@c}{\wg@tmp@d}{\pgf@temp}{\pgf@temp}
+ % \message{^^JTransform of M: \meaning\pgf@temp}
+ % \xdef\pgf@sh@nt@M{{\wg@tmp@a}{\wg@tmp@b}{\wg@tmp@c}{\wg@tmp@d}{0pt}{0pt}}%
+ % \message{^^JTransform of M: \meaning\pgf@sh@nt@M}
+ \gdef\pgf@sh@pi@M{\pgfpictureid}
+ \global\let\pgf@protocolsizes\old@pgf@protocolsize
+}
+% \end{macrocode}
+% \end{environment}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Other Tikz utilities}
+%
+% \begin{TikzKey}{tikz/reverseclip}
+%
+% A reverse clipping path. This is used to cut out stuff outside of
+% path defined.
+%
+% \begin{macrocode}
+\tikzstyle{reverseclip}=[insert path={(current bounding box.north east) --
+ (current bounding box.south east) --
+ (current bounding box.south west) --
+ (current bounding box.north west) --
+ (current bounding box.north east)}]
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{tikz/clip even odd rule}
+% A reverse clipping path
+%
+% \begin{macrocode}
+\tikzset{
+ clip even odd rule/.code={\pgfseteorule}, % Credit to Andrew Stacey
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+%
+% \begin{TikzKey}{tikz/invclip}
+%
+% Inverse clipping. This should be an option \emph{after} the path to
+% do the inverse clipping by. This works by adding a \emph{large}
+% (page) path to the current path, and then use that as clipping.
+%
+% \begin{macrocode}
+\tikzset{
+ invclip/.style={
+ clip,insert path=
+ [clip even odd rule]{
+ [reset cm](-\maxdimen,-\maxdimen)rectangle(\maxdimen,\maxdimen)
+ }
+ },
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{save clip}
+%
+% An option for use with sub-elements of NATO App 6(c) or chit
+% nodes. This will save the current path as a clipping path for the
+% next paths to be drawn in the sub-element
+%
+% \begin{macrocode}
+\newif\ifwg@s@ve\wg@s@vefalse
+\tikzset{
+ save clip/.is choice,
+ save clip/true/.code={\global\wg@s@vetrue},
+ save clip/false/.code={\global\wg@s@vefalse},
+ save clip/.default={true},
+ save clip/.initial={false},
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{scale line widths}
+%
+% Scales any line width specified in the node options.
+%
+% Use like
+%
+% \begin{verbatim}
+% \tikzset{
+% some/.style={
+% scale line widths,
+% line width=1pt}
+% }
+% \end{verbatim}
+%
+% Note that the order is important.
+%
+% \begin{macrocode}
+\tikzset{
+ scale line widths/.style={%
+ /utils/exec=\def\tikz@semiaddlinewidth##1{%
+ \pgfgettransformentries{%
+ \wg@jaca}{%
+ \wg@jacb}{%
+ \wg@jacc}{%
+ \wg@jacd}{%
+ \wg@tmp}{%
+ \wg@tmp}%
+ \pgfmathsetmacro{\wg@jac}{sqrt(abs(\wg@jaca*\wg@jacd-\wg@jacb*\wg@jacc))}%
+ \wg@dbg{4}{Scaling line width ##1 by \wg@jac}
+ \pgfmathsetmacro{\wg@lw}{\wg@jac*##1}%
+ \wg@dbg{4}{Scaled ##1 -> \wg@lw}
+ \tikz@addoption{\pgfsetlinewidth{\wg@lw pt}}%
+ \wg@dbg{4}{Added scaled option \wg@lw}
+ \pgfmathsetlength\pgflinewidth{\wg@lw pt}
+ \wg@dbg{4}{Did set line width \wg@lw pt}
+ }},
+ relative line width/.style={%
+ /utils/exec=\def\tikz@semiaddlinewidth##1{%
+ \wg@dbg{4}{Relative line width #1 times ##1}%
+ \pgfmathsetmacro{\wg@lv}{#1*##1}%
+ \tikz@addoption{\pgfsetlinewidth{\wg@lw pt}}%
+ \pgfmathsetlength\pgflinewidth{\wg@lw pt}}}
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{sub pic actions}
+%
+% This is key that propagates actions to sub pictures of pictures.
+% The normal \texttt{pic actions} cannot be used as it causes an
+% infinite loop.
+%
+% \begin{macrocode}
+\tikzset{
+ sub pic actions/.code={%
+ \tikz@picmode%
+ \edef\opts{%
+ \iftikz@mode@draw draw,\else draw=none,\fi
+ \iftikz@mode@fill fill\else fill=none\fi}
+ \wg@dbg{5}{^^JSub Mode: \meaning\tikz@picmode \meaning\opts}
+ \pgfset{/tikz/.cd}
+ \pgfkeysalsofrom{\opts}
+ }}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{wg/debug show}
+%
+% Show debugging information
+%
+% \begin{macrocode}
+\tikzset{
+ wg/debug show/.code={%
+ \extractcolorspec{pgfstrokecolor}{\wg@tmp@fg}
+ \def\wg@tmp@bg{none}
+ \@ifundefinedcolor{pgffillcolor}{}{
+ \extractcolorspec{pgffillcolor}{\wg@tmp@bg}}
+ \begingroup
+ \tikz@mode
+ \wargamedbglvl=#1
+ \wg@dbg{3}{Drawing with w/stroke `\wg@tmp@fg'
+ (\tikz@strokecolor,\iftikz@mode@draw\else not\space\fi drawing)
+ and fill `\wg@tmp@bg' (\tikz@fillcolor,\iftikz@mode@fill\else
+ not\space\fi filling)}
+ \endgroup
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Random IDs}
+%
+%
+% \begin{macrocode}
+\def\wg@r@ndom@id{%
+ \def\wg@uuid{}
+ \foreach \i in {1,...,8}{%
+ \pgfmathparse{Hex(random(0,15))}
+ \xdef\wg@uuid{\wg@uuid\pgfmathresult}}}
+% \end{macrocode}
+%
+% \iffalse
+%</utils>
+%\fi
+% \iffalse
+% ====================================================================
+% \fi
+%
+% \subsection{The \texttt{wgexport} class}
+% \label{sec:impl:util}
+%
+% This document class is used for exporting game component to be used
+% in a VASSAL module
+% libraries.
+%
+% \iffalse
+%<*exportcls>
+%\fi
+%
+% Class identification and load \texttt{wargame} package
+%
+% \begin{macrocode}
+\ProvidesClass{wgexport}
+\PassOptionsToClass{multi=tikzpicture,varwidth=false}{standalone}
+\DeclareOption{noterrainpic}{%
+ \PassOptionsToPackage{\CurrentOption}{wargame}}
+\DeclareOption{terrainpic}{%
+ \PassOptionsToPackage{\CurrentOption}{wargame}}
+\DeclareOption*{%
+ \PassOptionsToClass{\CurrentOption}{standalone}}
+\ProcessOptions\relax
+\LoadClass{standalone}
+\RequirePackage{wargame}
+% \end{macrocode}
+%
+% We need a few utilities before we get to the actual environment.
+% First, we need a tools to write out literal left and right curly
+% braces. We do a bit of catcode hackery to accomplish that.
+%
+% \begin{macrocode}
+\begingroup
+\catcode`\^^I=12
+\def\@tabchar{^^I}
+\catcode`<=1 \catcode`>=2
+\catcode`{=12 \catcode`}=12
+\gdef\@lbchar<{>
+\gdef\@rbchar<}>
+\endgroup
+% \end{macrocode}
+%
+% Above, we temporarily set the tab, and left and right curly brace
+% characters to be regular letters (12), and the catcodes of less than
+% and greater than to be those of left and right curly braces
+% respectively. We then define the macros \cs{@tabchar},
+% \cs{@lbchar}, and \cs{@rbchar} to produce literal characters.
+% \LaTeX already has \cs{@percentchar}.
+%
+% Everything we do should go inside this environment. The single
+% optional argument is the file name stem of the output JSON file.
+%
+% \begin{macrocode}
+\newenvironment{imagelist}[1][\jobname]{%
+ \newwrite\mk@out%
+ \def\mk@i{}%
+ \def\mk@w{\immediate\write\mk@out}%
+ \immediate\openout\mk@out=#1.json
+ \mk@w{[}
+}{
+ \mk@w{\mk@i \@lbchar "name":"End of list", "category": "<<eol>>",
+ "subcategory": "" \@rbchar }
+ \mk@w{]}
+ \immediate\closeout\mk@out
+}
+% \end{macrocode}
+%
+%
+% Preceed all images (\textsf{tikzpicture}) with this command
+%
+% First argument is the name of the image. This can be anything.
+% Note that for counters, if the name ends in \texttt{flipped} then it
+% is considered the backside of a counter.
+%
+% Second argument is the type of image. Recognised types are
+%
+% \begin{itemize}
+% \item \texttt{board} for boards
+% \item \texttt{oob} for OOBs
+% \item \texttt{chart} for charts
+% \item \texttt{counter} for counters
+% \item \texttt{front} for front page
+% \end{itemize}
+%
+% Other types can be used, and the images will be exported, but the
+% Python script pays no particular attention to those then. Use for
+% example to prepare images for help or the like.
+%
+% The third argument is the sub type. This is most relevant for the
+% counters. Sub types can be anything, but since the counters will
+% receive different prototypes based on the sub type, it makes sense
+% to divide into sub types a la
+%
+% \begin{itemize}
+% \item factions
+% \item common markers
+% \end{itemize}
+%
+% The faction sub types should just be the name of the faction.
+% E.g., Allies, Axis, Soviet, NATO, Warsaw Pact. Spaces should not
+% matter.
+%
+% For common markers, there are a few names that are recognised
+% specifically by the Python script. These are
+%
+% \begin{itemize}
+% \item \texttt{common}
+% \item \texttt{all}
+% \item \texttt{marker}
+% \item \texttt{markers}
+% \end{itemize}
+%
+% Counters that has these sub-types will no be considered to belong
+% to any faction.
+%
+% Note that the Python script uses the faction names to guess the
+% players of the game, and uses them in several places.
+%
+%
+% \begin{macrocode}
+\def\info{%
+ \@ifstar{\@@info{,}}{\@@info{\@rbchar,}}}
+\def\@@info#1#2#3#4{%
+ \chit@dbg{2}{Making image `#2' of type `#3'/`#4' on page \thepage}%
+ \mk@w{ \@lbchar}%
+ \mk@w{ \space "name": "#2",}%
+ \mk@w{ \space "category": "#3",}%
+ \mk@w{ \space "subcategory": "#4", }%
+ \mk@w{ \space "number": \thepage #1}%
+ \let\oldmk@i\mk@i%
+ \ifx#1,\relax\edef\mk@i{\mk@i\space\space}\fi}
+\def\end@info{%
+ \let\mk@i\oldmk@i%
+ \mk@w{ \space \@rbchar,}}
+% \end{macrocode}
+%
+% Make separate images for each counter (single sided).
+%
+% \begin{macrocode}
+\newcommand\chitimages[2][]{%
+ \begingroup%
+ \let\chit@report\do@chit@report%
+ \let\natoapp@report\do@natoapp@report%
+ \chit@dbg{2}{chits to make images of `#2'}%
+ \foreach[count=\ti from 0] \t/\x in #2{%
+ \ifx\t\empty\else% Ignore empty rows
+ \message{^^JSubcategory: `\x' (default `#1')}
+ \ifx\t\x\def\x{#1}\fi% Take sub-category or default
+ \foreach \u/\m in \t{%
+ \ifx\u\empty\else% Ignore empty cells
+ \chit@dbg{2}{Next chit `\u' with possible multiplicity `\m'}%
+ \ifx\m\@empty\def\m{1}\fi% If not multiplicity defined
+ \ifx\u\m\def\m{1}\fi% If the same as unit
+ \chit@dbg{2}{Next chit `\u' multiplicity `\m'}%
+ %% We only make one copy of the chit, since we can duplicate
+ %% it in VASSAL
+ \info*{\u}{counter}{\x}
+ \begin{tikzpicture}
+ \chit[\u=\ti]%
+ \end{tikzpicture}
+ \end@info%
+ %% \foreach \n in {1,...,\m}{% Make a number of copies
+ %% \ifx\u\chit@blank%
+ %% \chit@dbg{3}{Ignoring blank chit:\u}%
+ %% \else%
+ %% \info{\u}{counter}{#2}
+ %% \begin{tikzpicture}
+ %% \chit[\u=\ti](\c,\r)%
+ %% \end{tikzpicture}
+ %% \fi%
+ %% }%
+ \fi%
+ }%
+ \chit@dbg{2}{End of inner loop}%
+ \fi%
+ }%
+ \chit@dbg{2}{End of outer loop}%
+ \endgroup%
+}
+% \end{macrocode}
+%
+% Make separate images for each counter (double sided). The back-side
+% counters must be defined by append `\texttt{ flipped}' the front
+% face name
+%
+% \begin{macrocode}
+\newcommand\doublechitimages[2][]{%
+ \begingroup%
+ \let\chit@report\do@chit@report%
+ \let\natoapp@report\do@natoapp@report%
+ \foreach[count=\ti from 0] \t/\x in #2{%
+ \ifx\t\empty\else% Ignore empty rows
+ \message{^^JSubcategory: `\x' (default `#1')}
+ \ifx\t\x\def\x{#1}\fi% Take sub-category or default
+ \foreach \u/\m in \t{%
+ \ifx\u\empty\else% Ignore empty cells
+ \chit@dbg{2}{Next chit `\u' with possible multiplicity `\m'}%
+ \ifx\m\@empty\def\m{1}\fi% If not multiplicity defined
+ \ifx\u\m\def\m{1}\fi% If the same as unit
+ \chit@dbg{2}{Next chit `\u' multiplicity `\m'}%
+ %% Flipped chit
+ \edef\s{\u\space flipped}%
+ %% We only make one copy of the chit, since we can duplicate
+ %% it in VASSAL
+ \info*{\u}{counter}{\x}%
+ \begin{tikzpicture}%
+ \chit[\u=\ti]%
+ \end{tikzpicture}%
+ \end@info%
+ \info*{\s}{counter}{\x}%
+ \begin{tikzpicture}%
+ \chit[\s=\ti]%
+ \end{tikzpicture}%
+ \end@info%
+ %% \foreach \n in {1,...,\m}{% Make a number of copies
+ %% \ifx\u\chit@blank%
+ %% \chit@dbg{3}{Ignoring blank chit:\u}%
+ %% \else%
+ %% \info{\u}{counter}{#2}
+ %% \begin{tikzpicture}
+ %% \chit[\u=\ti](\c,\r)%
+ %% \end{tikzpicture}
+ %% \fi%
+ %% }%
+ \fi%
+ }%
+ \fi%
+ }%
+ \endgroup%
+}
+% \end{macrocode}
+%
+% Special for boards, we have the environment \textsf{boardimage}.
+% Like \cs{info} we must specify the name and sub-category of the
+% board, but the category is assumed to be \texttt{board} (though the
+% optional argument can specify a different category).
+%
+% Within this environment some specific styles are defined that allows
+% the user to specify VASSAL zones on the board. For this to work
+% properly, the parent \textsf{tikzpicture} \emph{must} have the style
+% \texttt{zoned}. This style will record the bounding box of the
+% picture which we will need to calculate VASSAL coordinates later
+% on.
+%
+% Other styles are \texttt{zone scope}, to be applied to
+% \texttt{scope}s in the picture, and \texttt{zone path} to be applied
+% to \texttt{path}s (or \cs{draw}, \cs{fill}, or the like) in the
+% picture. These will record coordinates of these elements in side
+% the picture. The Python script will then define VASSAL zones based
+% on these coordinates.
+%
+% For \texttt{zone scope} applied to a \texttt{scope}, what is
+% recorded are
+%
+% \begin{itemize}
+% \item The current coordinate transformation matrix
+% \item The current translation
+% \item The bounding box, within the current transformation and
+% translation.
+% \end{itemize}
+%
+% To define a zone in the board, simply enclose it in a
+%
+% \begin{verbatim}
+% \begin{scope}[zone scope=name]
+% ...
+% \end{scope}
+% \end{verbatim}
+%
+% The \meta{name} will be the name of the scope. If this contains the
+% sub-string \texttt{hex} (upper, lower, or mixed case), then the zone
+% will get a hex grid with numbering attached to it.
+%
+% If the \meta{name} contains the sub-string \texttt{turn} (any case),
+% then it is assumed to be a turn track and a rectangular grid will be
+% attached. The column and row separator will be set to \texttt{T},
+% so that it won't collide with the main zone. Similar if \meta{name}
+% contains \texttt{oob}, except the separator is set to \texttt{O}.
+%
+% If \meta{name} contains the sub-string \texttt{pool}, then it is
+% assumed to be a pool of counters, and \emph{no} grid is attached.
+%
+% For \texttt{zone path} applied to a \texttt{path}, what is recorded
+% is the path coordinates (as straight line segments) in the global
+% coordinate system.
+%
+% Both styles take one argument --- the name of the zone. If that
+% name contains the sub-string \texttt{hex} anywhere in the name, then
+% the zone is assumed to contain a hex grid. Otherwise, a rectangular
+% grid (of fixed size) will be applied to it.
+%
+% The environment \texttt{boardimage} also records the coordinate
+% options currently in use (keys \texttt{hex/first row is},
+% \texttt{hex/row direction is}, and so on), as well as the current
+% label option (as defined by \texttt{every hex} or \texttt{every hex
+% node}).
+%
+% All coordinates, and such are recorded in centimetres. It is worth
+% remembering that the Tikz coordinate system has the $y$ axis point
+% upward, while typical image software has the $y$ axis point down.
+% \texttt{pdftocairo} typically assumes a 150 PPI (pixels-per-inch)
+% resolution.
+%
+% That means that scaling factor becomes
+%
+% $$\frac{150\mathrm{pixel}}{2.54\mathrm{cm}}=59.055\frac{\mathrm{pixel}}{\mathrm{cm}}$$
+%
+% \iffalse
+% Using definition in terms of printers feet - the one to use!
+%
+% PNG: 1674 x 1101
+% PDF: "lower left": [-0.02107,-0.02107],
+% "upper right": [28.31705,18.60843]
+% Width: 28.31705+0.02107 = 28.33812
+% Height: 18.60843+0.02107 = 18.62950
+% Pixel / cm: 1674 / 28.33812 = 59.07237318495369488166
+% 1101 / 18.62950 = 59.09981480984460130438
+% Average = 59.08609399739914809302
+%
+% Calculated = 150 / 2.54 = 59.05511811023622047244
+%
+% Using 1/72.27
+%
+% "lower left": [-0.02109,-0.02109],
+% "upper right": [28.321,18.61102]
+% Width: 28.321+0.02109=28.34209
+% Height: 18.61102+0.02109=18.63211
+% Pixel / cm: 1674 / 28.34209 = 59.06409866033168337267
+% 1101 / 18.63211 = 59.09153606328000425072
+% Average = 59.07781736180584381169
+% \fi
+%
+% The information extracted is written to the
+% \cs{jobname}\texttt{.json} file as a sub-object (with name given by
+% the first optional argument) of the image object. In that way, we
+% can later on easily get the information from our catalogue of
+% images.
+%
+% Note, the styles \texttt{zoned}, \texttt{zone scope}, and
+% \texttt{zone path} are defined in \texttt{wargame} to be dummies so
+% that one can have them in the definition of the board without
+% impact.
+%
+% Since we want to write all dimensions in centimetres, we need to be
+% able to convert \texttt{pt} dimensions to centimetres. We make two
+% macros to do that for us.
+%
+% The exact definition of 1pt is
+%
+% $$1\,\mathrm{pt} = \frac{249}{250}12"\frac{1}{864}=\frac{83}{6000}1"
+% = 0.03513\overline{6}$$
+%
+% \begin{macrocode}
+% 2.54 / 72.27 = .03514598035145980351
+% \def\pt@to@cm#1{\pgfmathparse{#1 * 0.0351460}}
+\def\pt@to@cm#1{\pgfmathparse{#1 * 0.0351367}}
+\def\ptpoint@to@cm#1#2{%
+ \pt@to@cm{#1}\edef\x{\pgfmathresult}%
+ \pt@to@cm{#2}\edef\y{\pgfmathresult}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\get@bb#1{%
+ \pgfpointanchor{#1}{south west}%
+ \pgfgetlastxy\tmp@llx\tmp@lly%
+ \pgfpointanchor{#1}{north east}%
+ \pgfgetlastxy\tmp@urx\tmp@ury%
+ \pt@to@cm{\tmp@llx}\edef\llx{\pgfmathresult}
+ \pt@to@cm{\tmp@lly}\edef\lly{\pgfmathresult}
+ \pt@to@cm{\tmp@urx}\edef\urx{\pgfmathresult}
+ \pt@to@cm{\tmp@ury}\edef\ury{\pgfmathresult}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\mk@transform{%
+ \pgfgettransformentries{\mxx}{\mxy}{\myx}{\myy}{\ptdx}{\ptdy}
+ \pt@to@cm{\ptdx}\edef\dx{\pgfmathresult}
+ \pt@to@cm{\ptdy}\edef\dy{\pgfmathresult}
+ \mk@w{ \mk@i "xx": \mxx,}
+ \mk@w{ \mk@i "xy": \mxy,}
+ \mk@w{ \mk@i "yx": \myx,}
+ \mk@w{ \mk@i "yy": \myy,}
+ \mk@w{ \mk@i "dx": \dx,}
+ \mk@w{ \mk@i "dy": \dy,}
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\mk@bb#1{%
+ \get@bb{#1}
+ \mk@w{ \mk@i "lower left": [\llx,\lly],}
+ \mk@w{ \mk@i "upper right": [\urx,\ury],}
+ \begingroup
+ % \pgftransforminvert
+ \pgfpointanchor{#1}{south west}%
+ \pgfgetlastxy\tmp@llx\tmp@lly%
+ \pgfpointtransformed{\pgfpoint{\tmp@llx}{\tmp@lly}}
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ %
+ \pgfpointanchor{#1}{north east}%
+ \pgfgetlastxy\tmp@urx\tmp@ury%
+ \pgfgetlastxy\tmp@llx\tmp@lly%
+ \pgfpointtransformed{\pgfpoint{\tmp@urx}{\tmp@ury}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \pt@to@cm{\the\pgf@xa}\edef\llx{\pgfmathresult}
+ \pt@to@cm{\the\pgf@ya}\edef\lly{\pgfmathresult}
+ \pt@to@cm{\the\pgf@xb}\edef\urx{\pgfmathresult}
+ \pt@to@cm{\the\pgf@yb}\edef\ury{\pgfmathresult}x
+ \mk@w{ \mk@i "global lower left": [\llx,\lly],}
+ \mk@w{ \mk@i "global upper right": [\urx,\ury]}
+ \endgroup
+}
+% \end{macrocode}
+%
+% For the key \texttt{zone path} to work, we need to be able to record
+% the path as it moves along. To that end, we make a custom
+% decoration that will do that for us, and, once the path is finished,
+% write the path to our JSON file.
+%
+% \begin{macrocode}
+\pgfdeclaredecoration{record path construction}{initial}{%
+ \state{initial}[width=0pt,next state=more]{
+ \begingroup
+ \pgf@decorate@inputsegment@first
+ \ptpoint@to@cm{\the\pgf@x}{\the\pgf@y}
+ \xdef\wg@path{[\x,\y]}
+ \endgroup
+ }%
+ \state{more}[width=\pgfdecoratedinputsegmentremainingdistance]{%
+ \begingroup
+ \pgf@decorate@inputsegment@last
+ \ptpoint@to@cm{\the\pgf@x}{\the\pgf@y}
+ \xdef\wg@path{\wg@path,[\x,\y]}
+ \endgroup
+ }
+ \state{final}{%
+ \begingroup
+ \pgf@decorate@inputsegment@last
+ \ptpoint@to@cm{\the\pgf@x}{\the\pgf@y}
+ \xdef\wg@path{\wg@path,[\x,\y]}
+ \endgroup
+ \mk@w{ \mk@i "zone path \wg@record@path@name": \@lbchar}
+ \mk@w{ \mk@i\space "path": [\wg@path] \@rbchar,}
+ }
+}%
+% \end{macrocode}
+%
+% Now we can make our environment
+%
+% The first thing we do is to use the \cs{info} macro to mark the
+% image. Then we open our JSON file. We make a short-hand macro for
+% writing to that file. The macro \cs{bd@i} records the current
+% indention (which is important in JSON)
+%
+% \begin{macrocode}
+\newenvironment{boardimage}[3][board]{%
+ \def\bd@n{#2}
+ \newcount\mk@point
+ \mk@point=0
+ \let\oomk@i\mk@i%
+% \end{macrocode}
+%
+%
+% Then, to extract the label option, we make a dummy \texttt{node}
+% with the styles \texttt{every hex} and \texttt{every hex node}, so
+% we can extract that option.
+%
+% \begin{macrocode}
+ \info{dummy}{<<dummy>>}{}%
+ %\tikz{}%
+ \tikz{\scoped[every hex/.try,every hex node/.try]{%
+ \node[inner sep=0,outer sep=0]{%
+ \global\let\mk@label\hex@label}}}%
+% \end{macrocode}
+%
+% The next thing we do is to make an object. The first things we put
+% in are the units used (``cm''), and the grid options.
+%
+% \begin{macrocode}
+ \info*{#2}{#1}{#3}%
+ \mk@w{ \mk@i "zones": \@lbchar}%
+ \edef\mk@i{\mk@i\space}
+ %% Everything is made into centimeters
+ \mk@w{ \mk@i "units": "cm",}
+ \message{^^Jlabel: \meaning\mk@label}
+ \@ifundefined{mk@label}{}{\mk@w{ \mk@i "labels": "\mk@label",}}
+ %% Write out coordinate options as "coords" object
+ \mk@w{ \mk@i"coords": \@lbchar}%
+ \mk@w{ \mk@i "row": \@lbchar}%
+ \mk@w{ \mk@i\space "offset": \hex@coords@row@off,}%
+ \mk@w{ \mk@i\space "factor": \hex@coords@row@fac \@rbchar,}%
+ \mk@w{ \mk@i "column": \@lbchar}%
+ \mk@w{ \mk@i\space "offset": \hex@coords@col@off,}%
+ \mk@w{ \mk@i\space "factor": \hex@coords@col@fac,}%
+ \mk@w{ \mk@i\space "top short": "\hex@top@short@col",}%
+ \mk@w{ \mk@i\space "bottom short": "\hex@bot@short@col" \@rbchar}%
+ \mk@w{ \mk@i\@rbchar,}%
+% \end{macrocode}
+%
+% We then monkey-patch \cs{boardframe} to also output coordinates to
+% our JSON file. Note that this will probably be embedded in a
+% different object.
+%
+% \begin{macrocode}
+ %%
+ \let\oldbo@rdframe\bo@rdframe%
+ \def\bo@rdframe[##1](##2)(##3){%
+ \oldbo@rdframe[##1](##2)(##3)%
+ \mk@w{ \mk@i"board frame": \@lbchar}
+ \mk@w{ \mk@i\space "lower left": [\llx,\lly],}
+ \mk@w{ \mk@i\space "upper right": [\urx,\ury],}
+ \mk@w{ \mk@i\space "margin": \margin,}
+ \mk@w{ \mk@i\space "width": \w,}
+ \mk@w{ \mk@i\space "height": \h \@rbchar,}}%
+% \end{macrocode}
+%
+% Next, we make the style \texttt{zoned} to be applied to the
+% \texttt{tikzpicture} environment. This records the bounding box of
+% the full picture.
+%
+% \begin{macrocode}
+ \tikzset{
+ zoned/.code={% Apply to whole picture
+ \pgfkeys{%
+ % This needs to be done in the picture!
+ /tikz/execute at end picture={%
+ \mk@w{ \mk@i "zoned": \@lbchar}
+ \mk@transform%
+ \mk@bb{current bounding box}
+ \mk@w{ \mk@i \@rbchar,}
+ }
+ }
+ },
+% \end{macrocode}
+%
+% The next style is the \texttt{zone scope}. At the start of the
+% scope we record the current transformation matrix. Then we install
+% a handler to extract the bounding box at the end of the scope. Note
+% that we increase indention here.
+%
+% \begin{macrocode}
+ zone scope/.code={%
+ \mk@w{ \mk@i"zone scope ##1": \@lbchar}
+ \let\omk@i\mk@i
+ \edef\mk@i{\mk@i\space}
+ \mk@transform%
+ %\bd@w{ \@rbchar,}
+ \gdef\wg@export@box{##1}%
+ \pgfkeys{%
+ /tikz/local bounding box=wg export box,
+ /tikz/execute at end scope={
+ \mk@bb{wg export box}
+ \let\mk@i\omk@i
+ \mk@w{ \mk@i\@rbchar,}},
+ } % pgfkeys
+ }, % zone scope
+% \end{macrocode}
+% The next style gets the global coordinates of the current (0,0)
+% point - f.ex. in a node - and outputs that
+% \begin{macrocode}
+ zone point/.code n args={3}{
+ \advance\mk@point1
+ \global\mk@point=\mk@point
+ \pgf@xa=##2 cm
+ \pgf@ya=##3 cm
+ \pgfpointtransformed{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ % \pgfpointtransformed{\pgfpoint{0pt}{0pt}}
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pt@to@cm{\the\pgf@xa}\edef\px{\pgfmathresult}
+ \pt@to@cm{\the\pgf@ya}\edef\py{\pgfmathresult}
+ \mk@w{ \mk@i "point\the\mk@point": \@lbchar "name": "##1", "type": "point", "coords": [\px,\py]
+ \@rbchar, }
+ %\message{^^JZone point \the\mk@point\space ##1: ##2,##3 -> \px,\py}
+ },
+% \end{macrocode}
+%
+% The \texttt{zone path} style is a bit more simple, but only because
+% the bulk of the work is done in a decoration. We need to be able to
+% pass a name to that decoration, s we make a key for that. The user
+% need not think about that though.
+%
+% \begin{macrocode}
+ /pgf/decoration/record path name/.store in=\wg@record@path@name,
+ zone path/.style={%
+ postaction={decorate,decoration={
+ record path construction,
+ record path name=##1}}
+ } % zone path
+ }% tikzset
+}
+% \end{macrocode}
+%
+% That finishes the first part of the environment. At the end of the
+% environment, we simple write the name of the picture, and close our
+% JSON output.
+%
+% \begin{macrocode}
+{%
+ \mk@w{ \mk@i "name": "\bd@n" }%
+ \let\mk@i\oomk@i%
+ \mk@w{ \mk@i\@rbchar}%
+ \end@info%
+}
+% \end{macrocode}
+%
+%
+% TO BE DONE: We could add hooks to both the \texttt{hex} and
+% \texttt{chit} shapes that would allow us to write out the settings
+% for each of these. This would allow us to make data files that
+% contain the information available in the \LaTeX{} code. For
+% example, we could write a counters
+%
+% \begin{itemize}
+% \item Left and right identifiers
+% \item Upper left, upper right, lower left, and lower right
+% identifiers. (some care must be taken if these contains graphics
+% and not just text.)
+% \item Factors
+% \item NATO symbol
+% \begin{itemize}
+% \item Faction, command, echelon
+% \item Mains
+% \item Left, right, top, and bottom attributes and modifiers
+% \item Below attribute
+% \end{itemize}
+% \end{itemize}
+%
+% If one then assumed that for example the upper left corner holds the
+% start-up hex, then one could use that information.
+%
+% The code below exports the chit information to the JSON file. Not
+% sure how to use it though.
+%
+% \begin{macrocode}
+\tikzset{
+ zone turn/.store in=\zone@turn,
+ zone mult/.store in=\zone@mult
+}
+\def\do@chit@report{%
+ \mk@w{ \mk@i "chit": \@lbchar}
+ \@ifundefined{id}{} {\mk@w{ \mk@i\space "id": "\id", }}%
+ \@ifundefined{chit@symbol}{} {\mk@w{ \mk@i\space "symbol": "true", }}%
+ \@ifundefined{chit@full}{} {\mk@w{ \mk@i\space "full": "\chit@full", }}
+ \@ifundefined{chit@factors}{} {\mk@w{ \mk@i\space "factors": "\chit@factors", }}%
+ \@ifundefined{chit@left}{} {\mk@w{ \mk@i\space "left": "\chit@left", }}%
+ \@ifundefined{chit@right}{} {\mk@w{ \mk@i\space "right": "\chit@right", }}%
+ \@ifundefined{chit@upper@left}{} {\mk@w{ \mk@i\space "upper left": "\chit@upper@left", }}%
+ \@ifundefined{chit@lower@left}{} {\mk@w{ \mk@i\space "lower left": "\chit@lower@left", }}%
+ \@ifundefined{chit@upper@right}{}{\mk@w{ \mk@i\space "upper right": "\chit@upper@right", }}%
+ \@ifundefined{chit@lower@right}{}{\mk@w{ \mk@i\space "lower right": "\chit@lower@right}", }%
+ \mk@w{ \mk@i\space "end": 0}
+ \@ifundefined{chit@symbol}{
+ \mk@w{ \mk@i \@rbchar }
+ }{
+ \mk@w{ \mk@i \@rbchar, }% NATOAPP6c will follow
+ }%
+}
+\def\do@natoapp@report{%
+ \mk@w{ \mk@i "natoapp6c": \@lbchar}
+ \@ifundefined{id}{}{\mk@w{ \mk@i\space "id": "\id", }}
+ \@ifundefined{natoapp@fac}{}{\mk@w{ \mk@i\space "faction": "\natoapp@fac", }}
+ \@ifundefined{natoapp@cmd}{}{\mk@w{ \mk@i\space "command": "\natoapp@cmd", }}
+ \@ifundefined{natoapp@ech}{}{\mk@w{ \mk@i\space "echelon": "\natoapp@ech", }}
+ \@ifundefined{natoapp@main}{}{\mk@w{ \mk@i\space "main": "\natoapp@main", }}
+ \@ifundefined{natoapp@left}{}{\mk@w{ \mk@i\space "left": "\natoapp@left", }}
+ \@ifundefined{natoapp@right}{}{\mk@w{ \mk@i\space "right": "\natoapp@right", }}
+ \@ifundefined{natoapp@upper}{}{\mk@w{ \mk@i\space "upper": "\natoapp@upper", }}
+ \@ifundefined{natoapp@lower}{}{\mk@w{ \mk@i\space "lower": "\natoapp@lower", }}
+ \@ifundefined{natoapp@below}{}{\mk@w{ \mk@i\space "below": "\natoapp@below", }}
+ \mk@w{ \mk@i\space "end": 0}
+ \mk@w{ \mk@i \@rbchar}
+}
+% \end{macrocode}
+% \iffalse
+%</exportcls>
+%\fi
+%
diff --git a/macros/latex/contrib/wargame/source/utils/export.py b/macros/latex/contrib/wargame/source/utils/export.py
new file mode 100755
index 0000000000..b60cbb0fc5
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/utils/export.py
@@ -0,0 +1,3562 @@
+#!/usr/bin/env python
+#
+from pprint import pprint
+
+# ====================================================================
+def add_pws(opw=None,upw=None):
+ '''Add password options to the poppler commands
+
+ Parameters
+ ----------
+ opw : str
+ Owner password
+ upw : str
+ User password
+
+ Returns
+ -------
+ opts : list
+ List of arguments
+ '''
+ args = []
+ if upw is not None:
+ args.extend(['-upw',upw])
+
+ if opw is not None:
+ args.extend(['-opw',opw])
+
+ return args
+
+# --------------------------------------------------------------------
+def create_proc(args):
+ '''Create a process
+
+ Parameters
+ ----------
+ args : list
+ List of commmand line arguments
+
+ Returns
+ -------
+ proc : subprocess.Process
+ Process handle
+ '''
+ from os import environ
+ from subprocess import Popen, PIPE, TimeoutExpired
+
+ return Popen(args,env=environ.copy(),stdout=PIPE,stderr=PIPE)
+
+# --------------------------------------------------------------------
+def get_pdf_info(pdfname='export.pdf',upw=None,opw=None,timeout=None):
+ '''Get dictionary of PDF information
+
+ Parameters
+ ----------
+ pdfname : str
+ File name
+ opw : str
+ Owner password
+ upw : str
+ User password
+ timeout : int
+ Timeout in seconds or None
+
+ Returns
+ -------
+ info : dict
+ PDF information
+ '''
+ from subprocess import TimeoutExpired
+
+ args = ['pdfinfo', pdfname]
+ args.extend(add_pws(opw=opw,upw=upw))
+
+ proc = create_proc(args)
+
+ try:
+ out, err = proc.communicate(timeout=timeout)
+ except Exception as e:
+ proc.kill()
+ proc.communicate()
+ raise RuntimeError(f'Failed to get PDF info: {e}')
+
+ d = {}
+ for field in out.decode("utf8", "ignore").split("\n"):
+ sf = field.split(":")
+ key, value = sf[0], ":".join(sf[1:])
+ if key != "":
+ d[key] = (int(value.strip()) if key == 'Pages' else value.strip())
+
+ if "Pages" not in d:
+ raise ValueError
+
+ return d
+
+# --------------------------------------------------------------------
+def get_images_info(infofile):
+ '''Read in image information from file
+
+ Parameters
+ ----------
+ infofile : str
+ file name
+
+ Returns
+ -------
+ images : list
+ List of image information
+ '''
+ #from csv import DictReader
+ from json import load
+
+ with open(infofile,'r') as file:
+ info = load(file)
+ #reader = DictReader(file,fieldnames=['page','name','type','sub type'])
+ #return [l for l in reader]
+
+ return info
+
+
+# --------------------------------------------------------------------
+def convert_page(pdfname,page,opw=None,upw=None,timeout=None):
+ '''Convert a single PDF page to an image
+
+ Parameters
+ ----------
+ pdfname : str
+ File name
+ page : int
+ Page number
+ opw : str
+ Owner password
+ upw : str
+ User password
+ timeout : int
+ Timeout in seconds or None
+
+ Returns
+ -------
+ img : bytes
+ The bytes of the image
+ '''
+ args = ['pdftocairo',
+ '-singlefile',
+ '-f', str(page),
+ '-l', str(page),
+ '-png']
+ args.extend(add_pws(opw=opw,upw=upw))
+ args.append(pdfname)
+ args.append('-')
+
+ proc = create_proc(args)
+
+ try:
+ out, err = proc.communicate(timeout=timeout)
+ except Exception as e:
+ proc.kill()
+ proc.communicate()
+ raise RuntimeError(f'Failed to convert page {page} of {pdfname}: {e}')
+
+ from io import BytesIO
+ from PIL import Image
+
+ img = out #Image.open(BytesIO(out))
+
+ return img
+
+# --------------------------------------------------------------------
+def ignore_entry(entry):
+ return entry['category'] in ['<<dummy>>','<<eol>>']
+
+# --------------------------------------------------------------------
+def convert_pages(pdfname,infoname,
+ opw=None,upw=None,timeout=None):
+ '''Convert pages in a PDF to images
+
+ This creates a list of dictionaries with the image name and data
+ (as bytes)
+
+ Parameters
+ ----------
+ pdfname : str
+ File name of PDF to read images from
+ infoname : str
+ File name of CSV to read image info from
+ opw : str
+ Owner password
+ upw : str
+ User password
+ timeout : int
+ Timeout in seconds or None
+
+ Returns
+ -------
+ imgs : list
+ List of images as dicts, info and the bytes of the images
+ '''
+
+ oargs = {'opw':opw,'upw':upw,'timeout':timeout}
+ docinfo = get_pdf_info(pdfname,**oargs)
+ info = get_images_info(infoname)
+
+ if len(info)-1 != docinfo['Pages']:
+ raise RuntimeError(f'Number of pages in {pdfname} '
+ f'({docinfo["Pages"]}) not {len(info)-1}')
+
+ for i in info:
+ if ignore_entry(i): continue
+ i['img'] = convert_page(pdfname,i['number'],**oargs)
+
+ return info
+
+# ====================================================================
+def remove_and_get(zipfname,*filenames):
+ '''Open zip file, and make a copy of it without the files listed
+ in entries. Return the data of files listed in entry.'''
+ from tempfile import mkdtemp
+ from zipfile import ZipFile
+ from shutil import move, rmtree
+ from os import path
+
+ tempdir = mkdtemp()
+ ret = {}
+ try:
+ tempname = path.join(tempdir, 'new.zip')
+ with ZipFile(zipfname, 'r') as zipread:
+
+ with ZipFile(tempname, 'w') as zipwrite:
+
+ for item in zipread.infolist():
+ data = zipread.read(item.filename)
+
+ if item.filename not in filenames:
+ zipwrite.writestr(item, data)
+ else:
+ ret[item.filename] = data
+
+ move(tempname, zipfname)
+ finally:
+ rmtree(tempdir)
+
+ return ret
+
+# --------------------------------------------------------------------
+def add_back(zipfname,files):
+ '''Open a zip file for appending and add data in files
+
+ Files is a dictionary of filenames mapping to file content,
+ as returned by remove_and_get
+ '''
+ from zipfile import ZipFile
+
+ with ZipFile(zipfname, 'a') as zipadd:
+ for filename,data in files.items():
+ zipadd.writestr(filename,data)
+
+# ====================================================================
+# Contants used for tag names
+BUILD = 'VASSAL.build.'
+MODULE = BUILD + 'module.'
+WIDGET = BUILD + 'widget.'
+MAP = MODULE + 'map.'
+PICKER = MAP + 'boardPicker.'
+
+# ====================================================================
+def get_asdict(elem,tag,key,enable=True):
+ cont = elem.getElementsByTagName(tag)
+ if not enable:
+ return cont
+
+ return {e.getAttribute(key): e for e in cont}
+
+# --------------------------------------------------------------------
+def get_asone(elem,tag,enable=True):
+ cont = elem.getElementsByTagName(tag)
+ if enable and len(cont) != 1:
+ return None
+ return cont
+
+# --------------------------------------------------------------------
+def get_doc(string):
+ from xml.dom.minidom import parseString
+
+ return parseString(string)
+
+# --------------------------------------------------------------------
+def get_game(doc):
+ return doc.getElementsByTagName('VASSAL.build.GameModule')[0]
+
+# --------------------------------------------------------------------
+def get_documentation(doc,one=True):
+ return get_asone(doc,MODULE+'Documentation',one)
+
+# --------------------------------------------------------------------
+def get_helpfiles(doc,key='fileName',asdict=True):
+ return get_asdict(doc,MODULE+'documentation.HelpFile',key,asdict)
+
+# --------------------------------------------------------------------
+def get_inventories(doc,key='name',asdict=False):
+ return get_asdict(doc,MODULE+'Inventory',key,asdict)
+
+# --------------------------------------------------------------------
+def get_maps(doc,asdict=True):
+ return get_asdict(doc,MODULE+'Map','mapName',asdict)
+
+# --------------------------------------------------------------------
+def get_widgetmap(doc,asdict=True):
+ return get_asdict(doc,WIDGET+'WidgetMap','mapName',asdict)
+
+# --------------------------------------------------------------------
+def get_chartwindows(doc,asdict=True):
+ return get_asdict(doc,MODULE+'ChartWindow','name',asdict)
+
+# --------------------------------------------------------------------
+def get_map(doc,name):
+ maps = get_maps(doc,True)
+ return maps.get(name, None) if maps else None
+
+# --------------------------------------------------------------------
+def get_boards(doc,asdict=True):
+ return get_asdict(doc,PICKER+'Board','name',asdict)
+
+# --------------------------------------------------------------------
+def get_zoned(doc,one=True):
+ return get_asone(doc,PICKER+'board.ZonedGrid',one)
+
+# --------------------------------------------------------------------
+def get_zone(doc,asdict=True):
+ return get_asdict(doc,PICKER+'board.mapgrid.Zone','name',asdict)
+
+# --------------------------------------------------------------------
+def get_hexgrid(doc,one=True):
+ return get_asone(doc,PICKER+'board.HexGrid',one)
+
+# --------------------------------------------------------------------
+def get_squaregrid(doc,one=True):
+ return get_asone(doc,PICKER+'board.SquareGrid',one)
+
+# --------------------------------------------------------------------
+def get_regiongrid(doc,one=True):
+ return get_asone(doc,PICKER+'board.RegionGrid',one)
+
+# --------------------------------------------------------------------
+def get_hexnumbering(doc,one=True):
+ return get_asone(doc,PICKER+'board.mapgrid.HexGridNumbering',one)
+
+# --------------------------------------------------------------------
+def get_regions(doc,asdict=True):
+ return get_asdict(doc,PICKER+'board.Region', 'name', asdict)
+
+# --------------------------------------------------------------------
+def get_squarenumbering(doc,one=True):
+ return get_asone(doc,PICKER+'board.mapgrid.SquareGridNumbering', one)
+
+# --------------------------------------------------------------------
+def get_pieces(doc,asdict=True):
+ return get_asdict(doc,WIDGET+'PieceSlot','entryName',asdict)
+
+# --------------------------------------------------------------------
+def get_prototypes(doc,asdict=True):
+ return get_asdict(doc,MODULE+'PrototypeDefinition', 'name',asdict)
+
+# --------------------------------------------------------------------
+def get_masskey(map,asdict=True):
+ return get_asdict(map,MAP+'MassKeyCommand','name', asdict)
+
+# --------------------------------------------------------------------
+def get_masskey(map,asdict=True):
+ return get_asdict(map,MAP+'MassKeyCommand','name', asdict)
+
+
+# --------------------------------------------------------------------
+def get_piece_parts(code):
+ '''Takes the code part of a pieceslot (the text node) and decodes
+ it into traits.
+
+ One can use this to modify the pieces. One could for example
+ remove a trait by calling this function, and remove the element
+ corresponding to the trait from the returned list. Then one must
+ collect up the definitions and states separately and pass each of
+ them to `enc_parts', which gives us two strings that can be passed
+ to `add_piece' (or `add_proto') function to get the new text node
+ content of the piece slot or prototype definition. For example
+
+ piece = get_pieceslots(root,pieces)['foo']
+ code = piece.childNodes[0].nodeValue
+ traits = get_piece_parts(code)
+ ... # Modify the list
+
+ # Separate out definitions and states
+ defs = [enc_def(e['def']) for e in traits]
+ states = [enc_def(e['state']) for e in traits]
+
+ # Encode definitions and states as a single string, and then form body
+ def = enc_parts(*defs)
+ state = enc_parts(*states)
+ body = add_piece(def,state)
+
+ # Set new definition
+ piece.childNodes[0].nodeValue = body
+
+ See also dicts_to_piece
+
+ Parameters
+ ----------
+ code : str
+ Text node content of <PieceSlot> or <PrototypeDefinition> tags
+
+ Returns
+ -------
+ traits : list of dict
+ All the traits in a list. Each element of the list is a
+ dictionary with the keys 'def' and 'status'.
+
+ The key 'def' points to a list of the trait attributes used to
+ define the trait type. The first element of the 'def' list is
+ the trait identifier. The rest are the arguments for that
+ trait type. Note, all fields are encoded as strings.
+
+ The key 'status' encodes the status of the trait. The format
+ of this depends on the trait.Note, all fields are encoded as
+ strings.
+
+ '''
+ cmd,iden,typ,sta = code.split('/')
+ defs = typ.split(r' ')
+ stas = sta.split(r' ')
+ defs = [d.rstrip("\\").split(';') for d in defs]
+ stas = [s.rstrip("\\").split(';') for s in stas]
+ ret = [{'def': d, 'state': s} for d,s in zip(defs,stas)]
+ return ret
+
+# --------------------------------------------------------------------
+def dicts_to_piece(traits):
+ # Separate out definitions and states
+ defs = [enc_def(e['def']) for e in traits]
+ states = [enc_def(e['state']) for e in traits]
+
+ # Encode definitions and states as a single string, and then form body
+ df = enc_parts(*defs)
+ state = enc_parts(*states)
+ body = add_piece(df,state)
+
+ return body
+
+
+# ====================================================================
+# Key encoding
+CTRL = 130
+ALT = 520
+def key(let,mod=CTRL):
+
+ '''Encode a key sequence
+
+ Parameters
+ ----------
+ let : str
+ Key code (Letter)
+ mod : int
+ Modifier mask
+ '''
+ return f'{ord(let)},{mod}'
+# Colour encoding
+def rgb(r,g,b):
+ return ','.join([str(r),str(g),str(b)])
+
+def rgba(r,g,b,a):
+ return ','.join([str(r),str(g),str(b),str(a)])
+
+
+# --------------------------------------------------------------------
+def set_node_attr(node,**attr):
+ for k,v in attr.items():
+ node.setAttribute(k,str(v).lower() if isinstance(v,bool) else str(v))
+
+# --------------------------------------------------------------------
+def add_node(root,parent,tag,**attr):
+ e = root.createElement(tag)
+ if parent: parent.appendChild(e)
+ set_node_attr(e,**attr)
+
+ return e
+
+
+# --------------------------------------------------------------------
+def add_text(root,parent,text):
+ t = root.createTextNode(text)
+ parent.appendChild(t)
+ return t
+
+# --------------------------------------------------------------------
+def add_game(root,doc,
+ name,
+ version,
+ ModuleOther1 = "",
+ ModuleOther2 = "",
+ VassalVersion = "3.6.7",
+ description = "",
+ nextPieceSlotId = 0):
+ return add_node(root,doc,BUILD+'GameModule',
+ name = name,
+ version = version,
+ ModuleOther1 = ModuleOther1,
+ ModuleOther2 = ModuleOther2,
+ VassalVersion = VassalVersion,
+ description = description,
+ nextPieceSlotId = nextPieceSlotId)
+
+# --------------------------------------------------------------------
+def add_basiccommandencoder(root,doc):
+ return add_node(root,doc,MODULE+'BasicCommandEncoder')
+
+# --------------------------------------------------------------------
+def add_globalproperties(root,elem):
+ return add_node(root,elem,MODULE+'properties.GlobalProperties')
+
+# --------------------------------------------------------------------
+def add_translatable(root,elem):
+ return add_node(root,elem,MODULE+'properties.GlobalTranslatableMessages')
+
+# --------------------------------------------------------------------
+def add_language(root,elem):
+ return add_node(root,elem,'VASSAL.i18n.Language')
+
+# --------------------------------------------------------------------
+def add_chatter(root,elem):
+ return add_node(root,elem,MODULE+'Chatter')
+
+# --------------------------------------------------------------------
+def add_keynamer(root,elem):
+ return add_node(root,elem,MODULE+'KeyNamer')
+
+# --------------------------------------------------------------------
+def add_documentation(root,doc):
+ return add_node(root,doc,MODULE+'Documentation')
+
+# --------------------------------------------------------------------
+def add_about(root,doc,title,fileName=""):
+ return add_node(root,doc,MODULE+'documentation.AboutScreen',
+ fileName = fileName,
+ title = title)
+# --------------------------------------------------------------------
+def add_pdffile(root,doc,title,pdfFile):
+ return add_node(root,doc,MODULE+'documentation.BrowserPDFFile',
+ pdfFile = pdfFile, title=title)
+# --------------------------------------------------------------------
+def add_helpfile(root,doc,title,fileName,fileType="archive"):
+ return add_node(root,doc,MODULE+'documentation.HelpFile',
+ fileName = fileName,
+ fileType = fileType,
+ title = title)
+
+# --------------------------------------------------------------------
+def add_htmlfile(root,doc,title,startingPage='index.html'):
+ return add_node(root,doc,MODULE+'documentation.BrowserHelpFile',
+ startingPage=startingPage,
+ title=title)
+
+# --------------------------------------------------------------------
+def add_roster(root,doc,buttonKeyStroke='',
+ buttonText='Retire',
+ buttonToolTip='Switch sides, become observer, or release faction'):
+ return add_node(root,doc,MODULE+'PlayerRoster',
+ buttonKeyStroke = buttonKeyStroke,
+ buttonText = buttonText,
+ buttonToolTip = buttonToolTip)
+
+# --------------------------------------------------------------------
+def add_entry(root,doc,text):
+ n = add_node(root,doc,'entry')
+ add_text(root,n,text)
+ return n
+
+# --------------------------------------------------------------------
+def add_globaloptions(root,doc,
+ autoReport = "Use Preferences Setting",
+ centerOnMove = "Use Preferences Setting",
+ chatterHTMLSupport = "Always",
+ hotKeysOnClosedWindows = "Never",
+ inventoryForAll = "Always",
+ nonOwnerUnmaskable = "Use Preferences Setting",
+ playerIdFormat = "$playerName$",
+ promptString = "Opponents can unmask pieces",
+ sendToLocationMoveTrails = "Never"):
+ return add_node(root,doc,MODULE+'GlobalOptions',
+ autoReport = autoReport,
+ centerOnMove = centerOnMove,
+ chatterHTMLSupport = chatterHTMLSupport,
+ hotKeysOnClosedWindows = hotKeysOnClosedWindows,
+ inventoryForAll = inventoryForAll,
+ nonOwnerUnmaskable = nonOwnerUnmaskable,
+ playerIdFormat = playerIdFormat,
+ promptString = promptString,
+ sendToLocationMoveTrails = sendToLocationMoveTrails)
+
+# --------------------------------------------------------------------
+def add_option(root,doc,name,value):
+ n = add_node(root,doc,'option',name=name)
+ add_text(n,root,value)
+ return n
+
+# --------------------------------------------------------------------
+# CurrentMap == &quot;Board&quot;
+def add_inventory(root,doc,
+ canDisable = False,
+ centerOnPiece = True,
+ disabledIcon = '',
+ drawPieces = True,
+ foldersOnly = False,
+ forwardKeystroke = True,
+ groupBy = '',
+ hotkey = key('I'),
+ icon = '/images/inventory.gif',
+ include = '{}',
+ launchFunction = 'functionHide',
+ leafFormat = '$PieceName$',
+ name = '',
+ nonLeafFormat = '$PropertyValue$',
+ pieceZoom = '0.33',
+ pieceZoom2 = '0.5',
+ pieceZoom3 = '0.6',
+ propertyGate = '',
+ refreshHotkey = key('I',195),
+ showMenu = True,
+ sides = '',
+ sortFormat = '$PieceName$',
+ sortPieces = True,
+ sorting = 'alpha',
+ text = '',
+ tooltip = 'Show inventory of all pieces',
+ zoomOn = False):
+ return add_node(root,doc,MODULE+'Inventory',
+ canDisable = canDisable,
+ centerOnPiece = centerOnPiece,
+ disabledIcon = disabledIcon,
+ drawPieces = drawPieces,
+ foldersOnly = foldersOnly,
+ forwardKeystroke = forwardKeystroke,
+ groupBy = groupBy,
+ hotkey = hotkey,
+ icon = icon,
+ include = include,
+ launchFunction = launchFunction,
+ leafFormat = leafFormat,
+ name = name,
+ nonLeafFormat = nonLeafFormat,
+ pieceZoom = pieceZoom,
+ pieceZoom2 = pieceZoom2,
+ pieceZoom3 = pieceZoom3,
+ propertyGate = propertyGate,
+ refreshHotkey = refreshHotkey,
+ showMenu = showMenu,
+ sides = sides,
+ sortFormat = sortFormat,
+ sortPieces = sortPieces,
+ sorting = sorting,
+ text = text,
+ tooltip = tooltip,
+ zoomOn = zoomOn)
+
+
+
+# --------------------------------------------------------------------
+def add_map(root,doc,
+ mapName,
+ allowMultiple = 'false',
+ backgroundcolor = rgb(255,255,255),
+ buttonName = '',
+ changeFormat = '$message$',
+ color = rgb(0,0,0),
+ createFormat = '$pieceName$ created in $location$ *',
+ edgeHeight = '0',
+ edgeWidth = '0',
+ hideKey = '',
+ hotkey = key('M',ALT),
+ icon = '/images/map.gif',
+ launch = 'false',
+ markMoved = 'Always',
+ markUnmovedHotkey = '',
+ markUnmovedIcon = '/images/unmoved.gif',
+ markUnmovedReport = '',
+ markUnmovedText = '',
+ markUnmovedTooltip = 'Mark all pieces on this map as not moved',
+ moveKey = '',
+ moveToFormat = '$pieceName$ moves $previousLocation$ &amp;rarr; $location$ *',
+ moveWithinFormat = '$pieceName$ moves $previousLocation$ &amp;rarr; $location$ *',
+ showKey = '',
+ thickness = '3',
+ cls = MODULE+'Map'):
+ return add_node(root,doc,cls,
+ allowMultiple = allowMultiple,
+ backgroundcolor = backgroundcolor,
+ buttonName = buttonName,
+ changeFormat = changeFormat,
+ color = color,
+ createFormat = createFormat,
+ edgeHeight = edgeHeight,
+ edgeWidth = edgeWidth,
+ hideKey = hideKey,
+ hotkey = hotkey,
+ icon = icon,
+ launch = launch,
+ mapName = mapName,
+ markMoved = markMoved,
+ markUnmovedHotkey = markUnmovedHotkey,
+ markUnmovedIcon = markUnmovedIcon,
+ markUnmovedReport = markUnmovedReport,
+ markUnmovedText = markUnmovedText,
+ markUnmovedTooltip = markUnmovedTooltip,
+ moveKey = moveKey,
+ moveToFormat = moveToFormat,
+ moveWithinFormat = moveWithinFormat,
+ showKey = showKey,
+ thickness = thickness)
+
+# --------------------------------------------------------------------
+def add_widgetmap(root,doc, mapName,**attr):
+ return add_map(root,doc,mapName,cls=WIDGET+'WidgetMap',**attr)
+
+# --------------------------------------------------------------------
+def add_boardpicker(root,doc,
+ addColumnText = 'Add column',
+ addRowText = 'Add row',
+ boardPrompt = 'Select board',
+ slotHeight = 125,
+ slotScale = 0.2,
+ slotWidth = 350,
+ title = 'Choose Boards'):
+ return add_node(root,doc,MAP+'BoardPicker',
+ addColumnText = addColumnText,
+ addRowText = addRowText,
+ boardPrompt = boardPrompt,
+ slotHeight = slotHeight,
+ slotScale = slotScale,
+ slotWidth = slotWidth,
+ title = title)
+
+# --------------------------------------------------------------------
+def add_setup(root,picker,mapName,maxColumns,boardNames):
+ '''Add given boards in row-first up to maxColumns per row'''
+ s = add_node(root,picker,'setup')
+ col = 0
+ row = 0
+ lst = [f'{mapName}BoardPicker']
+ for bn in boardNames:
+ lst.extend([bn,str(col),str(row)])
+ col += 1
+ if col >= maxColumns:
+ col = 0
+ row += 1
+ txt = r' '.join(lst)
+ add_text(root,s,txt)
+
+# --------------------------------------------------------------------
+def add_board(root,picker,name,
+ image = '',
+ reversible = False,
+ color = rgb(255,255,255),
+ width = 0,
+ height = 0):
+ return add_node(root,picker,PICKER+'Board',
+ image = image,
+ name = name,
+ reversible = reversible,
+ color = color,
+ width = width,
+ height = height)
+
+# --------------------------------------------------------------------
+def add_zoned(root,board):
+ return add_node(root,board,PICKER+'board.ZonedGrid')
+
+# --------------------------------------------------------------------
+def add_zonehighlighter(root,zoned):
+ return add_node(root,zoned,PICKER+'board.mapgrid.ZonedGridHighlighter')
+
+# --------------------------------------------------------------------
+def add_zone(root,zoned,
+ name = "",
+ highlightProperty = "",
+ locationFormat = "$gridLocation$",
+ path = "0,0;976,0;976,976;0,976",
+ useHighlight = False,
+ useParentGrid = False):
+ return add_node(root,zoned,PICKER+'board.mapgrid.Zone',
+ name = name,
+ highlightProperty = highlightProperty,
+ locationFormat = locationFormat,
+ path = path,
+ useHighlight = useHighlight,
+ useParentGrid = useParentGrid)
+
+# --------------------------------------------------------------------
+HEX_WIDTH = 88.50779626676963
+HEX_HEIGHT = 102.2
+def add_hexgrid(root,zone,
+ color = rgb(0,0,0),
+ cornersLegal = False,
+ dotsVisible = False,
+ dx = HEX_WIDTH,
+ dy = HEX_HEIGHT,
+ edgesLegal = False,
+ sideways = False,
+ snapTo = True,
+ visible = True,
+ x0 = 0,
+ y0 = 32,
+ cls = PICKER+'board.HexGrid'):
+ return add_node(root,zone,cls,
+ color = color,
+ cornersLegal = cornersLegal,
+ dotsVisible = dotsVisible,
+ dx = dx,
+ dy = dy,
+ edgesLegal = edgesLegal,
+ sideways = sideways,
+ snapTo = snapTo,
+ visible = visible,
+ x0 = x0,
+ y0 = y0)
+
+# --------------------------------------------------------------------
+def add_hexnumbering(root,grid,
+ color = rgb(255,0,0),
+ first = 'H',
+ fontSize = 24,
+ hDescend = False,
+ hDrawOff = 0,
+ hLeading = 1,
+ hOff = 0,
+ hType = 'A',
+ locationFormat = '$gridLocation$',
+ rotateText = 0,
+ sep = '',
+ stagger = True,
+ vDescend = False,
+ vDrawOff = 32,
+ vLeading = 0,
+ vOff = 0,
+ vType = 'N',
+ visible = True,
+ cls = PICKER+'board.mapgrid.HexGridNumbering'):
+ return add_node(root,grid,cls,
+ color = color,
+ first = first,
+ fontSize = fontSize,
+ hDescend = hDescend,
+ hDrawOff = hDrawOff,
+ hLeading = hLeading,
+ hOff = hOff,
+ hType = hType,
+ locationFormat = locationFormat,
+ rotateText = rotateText,
+ sep = sep,
+ stagger = stagger,
+ vDescend = vDescend,
+ vDrawOff = vDrawOff,
+ vLeading = vLeading,
+ vOff = vOff,
+ vType = vType,
+ visible = visible)
+
+# --------------------------------------------------------------------
+RECT_WIDTH = 80
+RECT_HEIGHT = 80
+def add_squaregrid(root,zone,
+ dx = RECT_WIDTH,
+ dy = RECT_HEIGHT,
+ edgesLegal = False,
+ x0 = 0,
+ y0 = int(0.4*RECT_HEIGHT),
+ **attr):
+ return add_hexgrid(root,zone,cls=PICKER+'board.SquareGrid',
+ dx = dx,
+ dy = dy,
+ edgesLegal = edgesLegal,
+ x0 = x0,
+ y0 = y0,
+ **attr)
+
+# --------------------------------------------------------------------
+def add_squarenumbering(root,grid,
+ hType = 'N',
+ **attr):
+ return add_hexnumbering(root,grid,
+ cls=PICKER+'board.mapgrid.SquareGridNumbering',
+ hType = hType,
+ **attr)
+
+# --------------------------------------------------------------------
+def add_regiongrid(root,zone,snapto=True,fontsize=9,visible=True):
+ print(f'Make region grid visible: {visible}')
+ return add_node(root,zone,PICKER+'board.RegionGrid',
+ fontsize = fontsize,
+ snapto = snapto,
+ visble = visible)
+
+# --------------------------------------------------------------------
+def get_region_piece(root,grid,name,alsoPiece=True,piece=None,verbose=False):
+ if not alsoPiece:
+ return None, None
+
+ # Find the parent map element by stepping up the tree
+ from functools import reduce
+
+ map = reduce(lambda nn, _: None if nn is None else nn.parentNode,
+ range(5), grid)
+ if map is None or \
+ map.tagName not in [MODULE+'Map',WIDGET+'WidgetMap']:
+ if map is None:
+ print(f' = Map not found from grid')
+ return None, None
+
+ if piece is not None:
+ print(f' Using supplied piece')
+ return piece, map
+
+ # Find the piece by searching from the top of the tree
+ piece = get_pieces(root,root).get(name,None)
+ if piece is None:
+ print(list(get_pieces(root,root).keys()))
+ if verbose:
+ print(f' Possible piece for region {name}: {piece}')
+ return piece, map
+
+# --------------------------------------------------------------------
+def check_region_name(grid,name):
+ post = ''
+ targ = name
+ same = 0
+ regs = list(get_regions(grid).keys())
+ poss = len([e for e in regs if e.startswith(name)])
+ if poss == 0:
+ return name
+
+ return name + f' {poss}'
+ # Loop over keys, sorted
+ # regs.sort()
+ # for r in regs:
+ # if targ == r:
+ # same += 1
+ # targ = name + f' {same:02d}'
+ # print(f' Found region named {r} -> {targ}')
+
+ return targ
+
+# --------------------------------------------------------------------
+def add_region(root,grid,name,originx,originy,gpid,
+ alsoPiece=True,piece=None,verbose=True):
+ # First thing is to check if we have a piece
+ piece, map = get_region_piece(root,grid,name,alsoPiece,piece,verbose)
+ if verbose:
+ print(f' Region {name} -> piece {piece}')
+
+
+ nam = check_region_name(grid,name)
+ if verbose:
+ print(f' Region {name} -> real name {nam}')
+ n = add_node(root,grid,PICKER+'board.Region',
+ name = nam,
+ originx = originx,
+ originy = originy)
+ if piece is None:
+ return n, gpid
+
+ if verbose:
+ print(f' Add piece {name} to region')
+ _, gpid = add_atstart(root,map,name,piece,
+ location = name,
+ useGridLocation = True,
+ owningBoard = map.getAttribute('mapName'),
+ x = 0,
+ y = 0,
+ gpid = gpid)
+ return n, gpid
+
+
+# --------------------------------------------------------------------
+def add_stacking(root,map,
+ bottom = '40,0',
+ disabled = False,
+ down = '37,0',
+ exSepX = 6,
+ exSepY = 18,
+ top = '38,0',
+ unexSepX = 8,
+ unexSepY = 16,
+ up = '39,0'):
+ return add_node(root,map,MAP+'StackMetrics',
+ bottom = bottom,
+ disabled = disabled,
+ down = down,
+ exSepX = exSepX,
+ exSepY = exSepY,
+ top = top,
+ unexSepX = unexSepX,
+ unexSepY = unexSepY,
+ up = up)
+
+# --------------------------------------------------------------------
+def add_camera(root,map,
+ buttonText = '',
+ canDisable = False,
+ hotkey = '',
+ icon = '/images/camera.gif',
+ propertyGate = '',
+ tooltip = 'Save map as PNG image'):
+ return add_node(root,map,MAP+'ImageSaver',
+ buttonText = buttonText,
+ canDisable = canDisable,
+ hotkey = hotkey,
+ icon = icon,
+ propertyGate = propertyGate,
+ tooltip = tooltip)
+
+# --------------------------------------------------------------------
+def add_forwardtochatter(root,map):
+ return add_node(root,map,MAP+'ForwardToChatter')
+
+# --------------------------------------------------------------------
+def add_menudisplayer(root,map):
+ return add_node(root,map,MAP+'MenuDisplayer')
+
+# --------------------------------------------------------------------
+def add_mapcenterer(root,map):
+ return add_node(root,map,MAP+'MapCenterer')
+
+# --------------------------------------------------------------------
+def add_stackexpander(root,map):
+ return add_node(root,map,MAP+'StackExpander')
+
+# --------------------------------------------------------------------
+def add_piecemover(root,map):
+ return add_node(root,map,MAP+'PieceMover')
+
+# --------------------------------------------------------------------
+def add_selectionhighlighters(root,map):
+ return add_node(root,map,MAP+'SelectionHighlighters')
+
+# --------------------------------------------------------------------
+def add_keybufferer(root,map):
+ return add_node(root,map,MAP+'KeyBufferer')
+
+# --------------------------------------------------------------------
+def add_highlightlastmoved(root,map,color=rgb(255,0,0),enabled=True,thickness=2):
+ return add_node(root,map,MAP+'HighlightLastMoved',
+ color=color,enabled=enabled,thickness=thickness)
+
+# --------------------------------------------------------------------
+def add_counterviewer(root,map,
+ borderWidth = 0,
+ centerAll = False,
+ centerText = False,
+ combineCounterSummary = False,
+ counterReportFormat = '',
+ delay = 700,
+ description = '',
+ display = 'from top-most layer only',
+ emptyHexReportForma = '$LocationName$',
+ enableHTML = True,
+ extraTextPadding = 0,
+ fgColor = rgb(0,0,0),
+ fontSize = 9,
+ graphicsZoom = 1.0,
+ hotkey = key('\n',0),
+ layerList = '',
+ minDisplayPieces = 2,
+ propertyFilter = '',
+ showDeck = False,
+ showDeckDepth = 1,
+ showDeckMasked = False,
+ showMoveSelectde = False,
+ showNoStack = False,
+ showNonMovable = False,
+ showOverlap = False,
+ showgraph = True,
+ showgraphsingle = False,
+ showtext = False,
+ showtextsingle = False,
+ stretchWidthSummary = False,
+ summaryReportFormat = '$LocationName$',
+ unrotatePieces = False,
+ version = 3,
+ verticalOffset = 0,
+ verticalTopText = 5,
+ zoomlevel = 1.0):
+ return add_node(root,map,MAP+'CounterDetailViewer',
+ borderWidth = borderWidth,
+ centerAll = centerAll,
+ centerText = centerText,
+ combineCounterSummary = combineCounterSummary,
+ counterReportFormat = counterReportFormat,
+ delay = delay,
+ description = description,
+ display = display,
+ emptyHexReportForma = emptyHexReportForma,
+ enableHTML = enableHTML,
+ extraTextPadding = extraTextPadding,
+ fgColor = fgColor,
+ fontSize = fontSize,
+ graphicsZoom = graphicsZoom,
+ hotkey = hotkey,
+ layerList = layerList,
+ minDisplayPieces = minDisplayPieces,
+ propertyFilter = propertyFilter,
+ showDeck = showDeck,
+ showDeckDepth = showDeckDepth,
+ showDeckMasked = showDeckMasked,
+ showMoveSelectde = showMoveSelectde,
+ showNoStack = showNoStack,
+ showNonMovable = showNonMovable,
+ showOverlap = showOverlap,
+ showgraph = showgraph,
+ showgraphsingle = showgraphsingle,
+ showtext = showtext,
+ showtextsingle = showtextsingle,
+ stretchWidthSummary = stretchWidthSummary,
+ summaryReportFormat = summaryReportFormat,
+ unrotatePieces = unrotatePieces,
+ version = version,
+ verticalOffset = verticalOffset,
+ verticalTopText = verticalTopText,
+ zoomlevel = zoomlevel)
+
+# --------------------------------------------------------------------
+def add_globalmap(root,map,
+ buttonText = '',
+ color = rgb(255,0,0),
+ hotkey = '79,195',
+ icon = '/images/overview.gif',
+ scale = 0.2,
+ tooltip = 'Show/Hide overview window'):
+ return add_node(root,map,MAP+'GlobalMap',
+ buttonText = buttonText,
+ color = color,
+ hotkey = hotkey,
+ icon = icon,
+ scale = scale,
+ tooltip = 'Show/Hide overview window')
+
+# --------------------------------------------------------------------
+def add_zoomer(root,map,
+ inButtonText = '',
+ inIconName = '/images/zoomIn.gif',
+ inTooltip = 'Zoom in',
+ outButtonText = '',
+ outIconName = '/images/zoomOut.gif',
+ outTooltip = 'Zoom out',
+ pickButtonText = '',
+ pickIconName = '/images/zoom.png',
+ pickTooltip = 'Select Zoom',
+ zoomInKey = '61,195',
+ zoomLevels = [0.2,0.25,0.333,0.4,0.5,0.555,0.625,0.75,1.0,1.25,1.6],
+ zoomOutKey = key('-'),
+ zoomPickKey = key('='),
+ zoomStart = 3):
+ '''Zoom start is counting from the back (with default zoom levels,
+ and zoom start, the default zoom is 1'''
+ lvls = ','.join([str(z) for z in zoomLevels])
+ return add_node(root,map,MAP+'Zoomer',
+ inButtonText = inButtonText,
+ inIconName = inIconName,
+ inTooltip = inTooltip,
+ outButtonText = outButtonText,
+ outIconName = outIconName,
+ outTooltip = outTooltip,
+ pickButtonText = pickButtonText,
+ pickIconName = pickIconName,
+ pickTooltip = pickTooltip,
+ zoomInKey = zoomInKey,
+ zoomLevels = lvls,
+ zoomOutKey = zoomOutKey,
+ zoomPickKey = zoomPickKey,
+ zoomStart = zoomStart)
+
+# --------------------------------------------------------------------
+def add_hidepieces(root,map,
+ buttonText = '',
+ hiddenIcon = '/images/globe_selected.gif',
+ hotkey = key('O'),
+ showingIcon = '/images/globe_unselected.gif',
+ tooltip = 'Hide all pieces on this map'):
+ return add_node(root,map,MAP+'HidePiecesButton',
+ buttonText = buttonText,
+ hiddenIcon = hiddenIcon,
+ hotkey = hotkey,
+ showingIcon = showingIcon,
+ tooltip = tooltip)
+# --------------------------------------------------------------------
+def add_masskey(root,map,
+ name,
+ buttonHotkey,
+ hotkey,
+ buttonText = '',
+ canDisable = False,
+ deckCount = '-1',
+ filter = '',
+ propertyGate = '',
+ reportFormat = '',
+ reportSingle = False,
+ singleMap = True,
+ target = 'MAP|false|MAP|||||0|0||true|Selected|true|EQUALS',
+ tooltip = '',
+ icon = ''):
+ '''Default targets are selected units'''
+ return add_node(root,map,MAP+'MassKeyCommand',
+ name = name,
+ buttonHotkey = buttonHotkey, # This hot key
+ hotkey = hotkey, # Target hot key
+ buttonText = buttonText,
+ canDisable = canDisable,
+ deckCount = deckCount,
+ filter = filter,
+ propertyGate = propertyGate,
+ reportFormat = reportFormat,
+ reportSingle = reportSingle,
+ singleMap = singleMap,
+ target = target,
+ tooltip = tooltip,
+ icon = icon)
+
+
+# --------------------------------------------------------------------
+def add_flare(root,map,
+ circleColor = rgb(255,0,0),
+ circleScale = True,
+ circleSize = 100,
+ flareKey = 'keyAlt',
+ flareName = 'Map Flare',
+ flarePulses = 6,
+ flarePulsesPerSec = 3,
+ reportFormat = ''):
+ return add_node(root,map,MAP+'Flare',
+ circleColor = circleColor,
+ circleScale = circleScale,
+ circleSize = circleSize,
+ flareKey = flareKey,
+ flareName = flareName,
+ flarePulses = flarePulses,
+ flarePulsesPerSec = flarePulsesPerSec,
+ reportFormat = '')
+
+# --------------------------------------------------------------------
+def add_atstart(root,map,name,*pieces,
+ location = '',
+ useGridLocation = True,
+ owningBoard = '',
+ x = 0,
+ y = 0,
+ gpid = None):
+ '''Pieces are existing PieceSlot elements'''
+ a = add_node(root,map,MODULE+'map.SetupStack',
+ name = name,
+ location = location,
+ owningBoard = owningBoard,
+ useGridLocation = useGridLocation,
+ x = x,
+ y = y)
+ # copy pieces here
+ for p in pieces:
+ c = p.cloneNode(True)
+ a.appendChild(c)
+ if gpid is not None:
+ # Update gpid in element
+ c.setAttribute('gpid',str(gpid))
+ # Update gpid in traits state
+ traits = get_piece_parts(p.childNodes[0].nodeValue)
+ for t in traits:
+ code = t['def']
+ stat = t['state']
+ if code[0] == 'piece':
+ stat[3] = gpid
+ # Put back the traits
+ c.childNodes[0].nodeValue = dicts_to_piece(traits)
+
+ gpid += 1
+
+ return a, gpid
+
+# --------------------------------------------------------------------
+def add_pieceslot(root,elem,
+ entryName,
+ gpid,
+ code,
+ height=72,
+ width=72,
+ icon = ''):
+ p = add_node(root,elem,WIDGET+'PieceSlot',
+ entryName = entryName,
+ gpid = gpid,
+ height = height,
+ width = width,
+ icon = icon)
+ add_text(root,p,code)
+ return p
+
+# --------------------------------------------------------------------
+def add_prototypes(root,elem,*defs):
+ '''Defs are existing definition elements'''
+ p = add_node(root,elem,MODULE+'PrototypesContainer')
+
+ for d in defs:
+ c = d.cloneNode(True)
+ p.appendChild(c)
+
+ return p
+
+# --------------------------------------------------------------------
+def add_prototype(root,elem,name,code,description=''):
+ d = add_node(root,elem,MODULE+'PrototypeDefinition',
+ name = name,
+ description = description)
+ add_text(root,d,code)
+
+# --------------------------------------------------------------------
+def add_piecewindow(root,elem,name,
+ defaultWidth = 0,
+ hidden = False,
+ hotkey = key('C',ALT),
+ scale = 1.,
+ text = '',
+ tooltip = 'Show/hide piece window',
+ icon = '/images/counter.gif'):
+ return add_node(root,elem,MODULE+'PieceWindow',
+ name = name,
+ defaultWidth = defaultWidth,
+ hidden = hidden,
+ hotkey = hotkey,
+ scale = scale,
+ text = text,
+ tooltip = tooltip,
+ icon = icon)
+
+# --------------------------------------------------------------------
+def add_tabs(root,elem,entryName):
+ return add_node(root,elem,WIDGET+'TabWidget',entryName=entryName)
+
+# --------------------------------------------------------------------
+def add_list(root,elem,
+ entryName,
+ height = 0,
+ width = 0,
+ scale = 1.,
+ divider = 100):
+ return add_node(root,elem,WIDGET+'ListWidget',
+ entryName = entryName,
+ height = height,
+ width = width,
+ scale = scale,
+ divider = divider)
+
+# --------------------------------------------------------------------
+def add_panel(root,elem,
+ entryName,
+ fixed = False,
+ nColumns = 1,
+ vert = False):
+ return add_node(root,elem,WIDGET+'PanelWidget',
+ entryName = entryName,
+ fixed = fixed,
+ nColumns = nColumns,
+ vert = vert)
+
+# --------------------------------------------------------------------
+def add_mapwidget(root,elem,entryName=''):
+ return add_node(root,elem,WIDGET+'MapWidget',entryName=entryName)
+
+# --------------------------------------------------------------------
+def add_chartwindow(root,elem,
+ name,
+ hotkey = key('A',ALT),
+ description = '',
+ text = '',
+ tooltip = 'Show/hide Charts',
+ icon = '/images/chart.gif'):
+ return add_node(root,elem,MODULE+'ChartWindow',
+ name = name,
+ hotkey = hotkey,
+ description = description,
+ text = text,
+ tooltip = tooltip,
+ icon = icon)
+
+# --------------------------------------------------------------------
+def add_chart(root,elem,
+ chartName,
+ fileName,
+ description = ''):
+ return add_node(root,elem,WIDGET+'Chart',
+ chartName = chartName,
+ description = description,
+ fileName = fileName)
+
+# --------------------------------------------------------------------
+def add_dice(root,elem,
+ addToTotal = 0,
+ canDisable = False,
+ hotkey = key('6',ALT),
+ icon = '/images/die.gif',
+ keepCount = 1,
+ keepDice = False,
+ keepOption = '&gt;',
+ lockAdd = False,
+ lockDice = False,
+ lockPlus = False,
+ lockSides = False,
+ nDice = 1,
+ nSides = 6,
+ name = '1d6',
+ plus = 0,
+ prompt = False,
+ propertyGate = '',
+ reportFormat = '** $name$ = $result$ *** &amp;lt;$PlayerName$&amp;gt;',
+ reportTotal = False,
+ sortDice = False,
+ text = '1d6',
+ tooltip = 'Roll a 1d6'):
+ return add_node(root,elem,MODULE+'DiceButton',
+ addToTotal = addToTotal,
+ canDisable = canDisable,
+ hotkey = hotkey,
+ icon = icon,
+ keepCount = keepCount,
+ keepDice = keepDice,
+ keepOption = keepOption,
+ lockAdd = lockAdd,
+ lockDice = lockDice,
+ lockPlus = lockPlus,
+ lockSides = lockSides,
+ nDice = nDice,
+ nSides = nSides,
+ name = name,
+ plus = plus,
+ prompt = prompt,
+ propertyGate = propertyGate,
+ reportFormat = reportFormat,
+ reportTotal = reportTotal,
+ sortDice = sortDice,
+ text = text,
+ tooltip = tooltip)
+
+# ====================================================================
+def enc_def(args,term=False):
+ '''Encode a piece (decorator) definition
+
+ Parameters
+ ----------
+ args : list
+ List of fields
+ term : bool
+ If true, add terminating ';'
+
+ Returns
+ -------
+ code : str
+ The encoded definition
+ '''
+ return ';'.join([str(e).lower() if isinstance(e,bool) else str(e)
+ for e in args])+(';' if term else '')
+
+# --------------------------------------------------------------------
+def layer_trait(images,
+ newNames = None,
+ activateName = 'Activate',
+ activateMask = CTRL,
+ activateChar = 'A',
+ increaseName = 'Increase',
+ increaseMask = CTRL,
+ increaseChar = '[',
+ decreaseName = '',
+ decreaseMask = CTRL,
+ decreaseChar = ']',
+ resetName = '',
+ resetKey = '',
+ resetLevel = 1,
+ under = False,
+ underXoff = 0,
+ underYoff = 0,
+ loop = True,
+ name = '',
+ description = '',
+ randomKey = '',
+ randomName = '',
+ follow = False,
+ expression = '',
+ first = 1,
+ version = 1, # 1:new, 0:old
+ always = 'true',
+ activateKey = key('A'),
+ increaseKey = key('['),
+ decreaseKey = key(']'),
+ scale = 1.):
+ '''Create a layer trait (VASSAL.counter.Embellishment)
+
+ Parameters
+ ----------
+ main : dict
+ Main image dictionary
+ flipped : dict
+ Flipped image dictionary
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state
+ '''
+ if newNames is None:
+ newNames = ['']*len(images)
+ args = ['emb2', # Code
+ activateName, activateMask, activateChar, # ACTIVATE ; MASK ; KEY
+ increaseName, increaseMask, increaseChar,
+ decreaseName, decreaseMask, decreaseChar,
+ resetName, resetKey, resetLevel,
+ under, underXoff, underYoff,
+ ','.join(images),
+ ','.join(newNames),
+ loop,
+ name,
+ randomKey, randomName,
+ follow, expression,
+ first,
+ version,
+ always,
+ activateKey,
+ increaseKey,
+ decreaseKey,
+ description,
+ scale ]
+ stat = '1' # CURRENT LEVEL
+ return enc_def(args), stat
+
+# --------------------------------------------------------------------
+def prototype_trait(name):
+ '''Create a prototype trait (VASSAL.counter.UsePrototype)
+
+ Parameters
+ ----------
+ family : str
+ Side in game
+
+ Return
+ ------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ args = ['prototype', name ]
+ stat = '' # State is nothing
+ return enc_def(args), stat
+
+# --------------------------------------------------------------------
+def mark_trait(key,value):
+ '''Create a marker trait (VASSAL.counter.Marker)
+
+ Parameters
+ ----------
+ family : str
+ Side in game
+
+ Return
+ ------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ args = ['mark', key ]
+ stat = value # State is nothing
+ return enc_def(args), stat
+
+# --------------------------------------------------------------------
+def report_trait(*keys,
+ nosuppress = True,
+ description = '',
+ report = '$location$: $newPieceName$ $menuCommand$ *',
+ cyclekeys = '',
+ cyclereps = ''):
+ '''Create a report trait (VASSAL.counters.ReportActon)
+
+ Parameters
+ ----------
+ *keys : tuple of str
+ The keys to report actions for
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ esckeys = ','.join([k.replace(',',r'\,') for k in keys])
+ esccycl = ','.join([k.replace(',',r'\,') for k in cyclekeys])
+ escreps = ','.join([k.replace(',',r'\,') for k in cyclereps])
+ args = ['report', # CODE
+ esckeys, # ESCAPED KEYS (commas escaped)
+ report, # REPORT
+ esccycl, # CYCLE KEYS (commas escaped)
+ escreps, # CYCKE REPORTS (commas escaped)
+ description, # DESCRIPTION
+ nosuppress] # NOSUPPRESS
+ stat = '-1' # CYCLE STATE
+ return enc_def(args), stat
+
+# --------------------------------------------------------------------
+def moved_trait(image='moved.gif',
+ xoff = 36,
+ yoff = -38,
+ name = 'Mark Moved',
+ key = key('M')):
+ '''Create a moved trait (VASSAL.counters.MovementMarkable)
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ args = ['markmoved', # CODE
+ image, # IMAGE
+ xoff, yoff, # XOFF ; YOFF
+ name, # MENU
+ key, # KEY, MODIFIER
+ ''] # ?
+ stat = False # MOVED?
+ return enc_def(args), stat
+
+# --------------------------------------------------------------------
+def trail_trait(key = key('T'),
+ name = 'Movement Trail',
+ localVisible = False,
+ globalVisible = False,
+ radius = 10,
+ fillColor = rgb(255,255,255),
+ lineColor = rgb(0,0,0),
+ activeOpacity = 100,
+ inactiveOpacity = 50,
+ edgesBuffer = 20,
+ displayBuffer = 30,
+ lineWidth = 1,
+ turnOn = '',
+ turnOff = '',
+ reset = '',
+ description = ''):
+ ''' Create a movement trail trait ( VASSAL.counters.Footprint)
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state
+ '''
+ args = ['footprint', # CODE
+ key, # ENABLE KEY
+ name, # MENU
+ localVisible, # LOCAL VISABLE
+ globalVisible, # GLOBAL VISABLE
+ radius, # RADIUS
+ fillColor, # FILL COLOR
+ lineColor, # LINE COLOR
+ activeOpacity, # ACTIVE OPACITY
+ inactiveOpacity, # INACTIVE OPACITY
+ edgesBuffer, # EDGES BUFFER
+ displayBuffer, # DISPLAY BUFFER
+ lineWidth, # LINE WIDTH
+ turnOn, # TURN ON KEY
+ turnOff, # TURN OFF KEY
+ reset, # RESET KEY
+ description] # DESC
+ stat = [False, # GLOBAL VIS
+ '', # MAP
+ 0] # POINTS (followed by [; [X,Y]*]
+ return enc_def(args), enc_def(stat)
+
+# --------------------------------------------------------------------
+def delete_trait(name = 'Delete', key = key('D')):
+ '''Create a delete trait (VASSAL.counters.Delete)
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ args = ['delete', name, key, '']
+ stat = '' # Nothing
+ return enc_def(args), stat
+
+# --------------------------------------------------------------------
+def sendto_trait(mapName,
+ boardName,
+ name = 'Eliminate',
+ key = key('E'),
+ restoreName = 'Restore',
+ restoreKey = key('R'),
+ x = 200,
+ y = 200,
+ xidx = 0,
+ yidx = 0,
+ xoff = 1,
+ yoff = 1,
+ description = 'Eliminate this unit',
+ destination = 'L',
+ zone = '',
+ region = '',
+ expression = '',
+ position = ''):
+ '''Create a send to trait (VASSAL.counter.SendToLocation)
+
+ Parameters
+ ----------
+ side : str
+ Sub-map to move to
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ args = ['sendto', # CODE
+ name, # NAME
+ key, # KEY , MODIFIER
+ mapName, # MAP
+ boardName, # BOARD
+ x, y, # X ; Y
+ restoreName, # BACK
+ restoreKey, # KEY , MODIFIER
+ xidx, yidx, # XIDX ; YIDX
+ xoff, yoff, # XOFF ; YOFF
+ description, # DESC
+ destination, # DEST
+ zone, # ZONE
+ region, # REGION
+ expression, # EXPRESSION
+ position ] # GRIDPOS
+ stat = ['', # BACKMAP
+ '', # X
+ ''] # Y
+ return enc_def(args), enc_def(stat)
+
+# --------------------------------------------------------------------
+def basic_trait(name,
+ filename, # Can be empty
+ gpid, # Can be empty
+ cloneKey='', # Deprecated
+ deleteKey=''):# Deprecated
+ '''Create a basic unit (VASSAL.counters.BasicPiece)
+
+ Parameters
+ ----------
+ main : dict
+ Information
+ gpid : int
+ Piece global identifier
+ image : bool
+ If true, add image
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ args = ['piece', # CODE
+ cloneKey, # CLONEKEY
+ deleteKey, # DELETEKEY
+ filename, # IMAGE
+ name] # NAME
+ stat = ['null', # MAPID (possibly 'null')
+ 0, # X
+ 0, # Y
+ gpid, # GLOBAL PIECE ID
+ 0] # PROPERTY COUNT (followed by [; KEY; VALUE]+)
+ return enc_def(args), enc_def(stat)
+
+# --------------------------------------------------------------------
+def enc_parts(*parts):
+ '''Encode parts of a full piece definition
+
+ Each trait (VASSAL.counter.Decorator, VASSAL.counter.BasicPiece)
+ definition or state is separated by a litteral TAB character.
+ Beyond the first TAB separator, additional escape characters
+ (BACKSLAH) are added in front of the separator. This is to that
+ VASSAL.utils.SequenceDecoder does not see consequitive TABs as a
+ single TAB.
+
+ Parameters
+ ----------
+ parts : tuple
+ The various trait definitions or states
+
+ Returns
+ -------
+ code : str
+ The encoded piece
+ '''
+ ret = ''
+ sep = r' '
+ for i, p in enumerate(parts):
+ if i != 0:
+ ret += '\\'*(i-1) + sep
+ ret += str(p)
+
+ return ret
+
+# --------------------------------------------------------------------
+def add_piece(typ, state):
+ '''Create and add piece command (VASSAL.command.AddPiece)
+
+ Each part is separated by a SLASH ('/'). The first part is the
+ command type (PLUS '+') to perform. Second is the IDENTIFIER,
+ possibly 'null'. Then comes the fully encoded type of the piece,
+ followed by the state of the piece (also fully encoded).
+
+ Parameters
+ ----------
+ typ : str
+ Encoded piece definition
+ state : str
+ Encoded state definition
+
+ Returns
+ -------
+ cmd : str
+ The add command encoded
+ '''
+ args = ['+', # Type
+ 'null', # IDENTIFER
+ typ, # DEFINITION
+ state] # STATE
+ return '/'.join(args)
+
+# --------------------------------------------------------------------
+def add_proto(typ,state):
+ '''Create an add prototype command. This is the same as 'add_piece'
+
+ Parameters
+ ----------
+ typ : str
+ Encoded piece definition
+ state : str
+ Encoded state definition
+
+ Returns
+ -------
+ cmd : str
+ The add command encoded
+ '''
+ return add_piece(typ,state)
+
+
+# ====================================================================
+#
+# Below specific to the export app
+#
+# ====================================================================
+def get_bb(buffer):
+ '''Get bounding box of image
+
+ Parameters
+ ----------
+ buffer : bytes
+ The image bytes
+
+ Returns
+ -------
+ ulx, uly, lrx, lry : tuple
+ The coordinates of the bounding box
+ '''
+ from PIL import Image
+ from io import BytesIO
+
+ with Image.open(BytesIO(buffer)) as img:
+ bb = img.getbbox()
+
+ return bb
+
+# ====================================================================
+def piece_body(family,main,flipped,gpid):
+ '''Create an full add piece command from the side, image, and ID
+ information. This adds (in reverse order)
+
+ - BasicPiece
+ - Side prototype
+ - Flip layer (if 'flipped' is not none)
+
+ Parameters
+ ----------
+ family : str
+ Side in the game
+ main : dict
+ Main image information
+ flipped : dict
+ Flipped image information, possibly None
+ gpid : int
+ Global piece identifier
+
+ Returns
+ -------
+ cmd : str
+ The command to add the piece
+ '''
+ # Create the layer, prototype, and basic piece traits
+ decs = []
+ if flipped is not None:
+ imgs = [ main['filename'], flipped['filename'] ]
+ decs.extend([ layer_trait(images=imgs,
+ newNames=['','Reduced +'],
+ activateName = '',
+ decreaseName = '',
+ increaseName = 'Flip',
+ increaseKey = key('F'),
+ decreaseKey = '',
+ name='Step'),
+ report_trait(key('F')) ])
+ for m in main.get('mains',[]):
+ decs.append(prototype_trait(m + ' prototype'))
+ ech = main.get('echelon',None)
+ cmd = main.get('command',None)
+ if ech is not None: decs.append(prototype_trait(ech + ' prototype'))
+ if cmd is not None: decs.append(prototype_trait(cmd + ' prototype'))
+
+ decs.extend([ prototype_trait(family+' prototype'),
+ basic_trait(main['name'], main['filename'],gpid)
+ ])
+
+ typs = [d[0] for d in decs]
+ stts = [d[1] for d in decs]
+ typ = enc_parts(*typs)
+ stt = enc_parts(*stts)
+
+ return add_piece(typ,stt)
+
+# --------------------------------------------------------------------
+def proto_body(family):
+ '''Create an full add prototype com from the side information.
+ This adds (in reverse order)
+
+ - An empty BasicPiece
+ - An eliminate (or sendto) trait
+ - A delete trait
+ - A mark moved trait
+ - A move trail trait
+
+ Parameters
+ ----------
+ family : str
+ Side in the game
+
+ Returns
+ -------
+ cmd : str
+ The command to add the piece
+ '''
+ # Dummy image
+ decs = [ report_trait(key('E'),key('R'),key('M')),
+ moved_trait(),
+ trail_trait(),
+ delete_trait(),
+ sendto_trait('DeadMap',family+' pool'),
+ mark_trait('Faction',family),
+ basic_trait('','','') ]
+ typs = [d[0] for d in decs]
+ stts = [d[1] for d in decs]
+ typ = enc_parts(*typs)
+ stt = enc_parts(*stts)
+
+ return add_proto(typ,stt)
+
+# --------------------------------------------------------------------
+def add_splash(root,doc,categories,title='',verbose=False):
+ '''Add an about page
+
+ Parametersg
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ doc : xml.dom.minidom.Element
+ The documentation element
+ categories : dict
+ Catalog of images
+ title : str
+ Title of the game
+ '''
+ fronts = categories.get('front',{}).get('all',[])
+ front = list(fronts.values())[0] if len(fronts) > 0 else None
+ if front is None:
+ return
+
+ if verbose:
+ print(f'Adding about page with {title}')
+
+ add_about(root,doc, f'About {title}', fileName = front['filename'])
+
+# --------------------------------------------------------------------
+def add_rules(root,doc,zipfile,rules,verbose=False):
+ '''Add rules to the module
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ doc : xml.dom.minidom.Element
+ The documentation element
+ zipfile : zipfile.ZipFile
+ The module archive
+ rules : str
+ File name of rules (PDF)
+ '''
+ if rules is None or rules == '':
+ return
+
+ if verbose:
+ print('Adding rules PDF to module')
+
+ zipfile.write(rules,'rules.pdf')
+
+ add_pdffile(root,doc,title='Show rules',pdfFile='rules.pdf')
+
+# --------------------------------------------------------------------
+def add_notes(root,doc,zipfile,title,version,sides,pdffile,infofile,rules,
+ verbose=False):
+ '''Add rules to the module
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ doc : xml.dom.minidom.Element
+ The documentation element
+ zipfile : zipfile.ZipFile
+ The module archive
+ sides : list
+ Sides in the game
+ pdffile : str
+ The images PDF
+ infofile : str
+ The images information
+ rules : str
+ File name of rules (PDF)
+ '''
+ factions = "".join([f'<li>{s}</li>' for s in sides])
+ notes = f'''
+ <html>
+ <body>
+ <h1>Draft VASSAL module of {title} (Version {version})</h1>
+ <p>
+ This is a draft VASSAL module of {title} generated from
+ </p>
+ <ul>
+ <li>images in {pdffile}, and</li>
+ <li>information in {infofile}</li>
+ </ul>
+ <p>
+ both generated by LaTeX using the <b>wargame</b> [1] package, and
+ processed by the Python script <code>export.py</code> from that
+ package.
+ </p>
+ <p>
+ The module is <i>not</i> complete and the developer should edit
+ the module as needed in the VASSAL module editor.
+ </p>
+ <p>
+ [1] <code>https://gitlab.com/wargames_tex/wargame_tex</code>
+ </p>
+ <h2>Content of the module</h2>
+ <p>
+ The <code>export.py</code> Python script has identified the
+ factions of the game to be
+ </p>
+ <ul>
+ '''+factions+f'''
+ </ul>
+ <p>
+ and generated prototype pieces for these (along with possible
+ non-faction pieces. The script also generated a map ("dead map")
+ that contains boards for each faction and is meant to store
+ eliminated units ("&lt;faction&gt; pool"). These pools have a
+ generic shape and colour, and the developer should take care to
+ correct these as needed.
+ </p>
+ <p>
+ Boards of the game present in the {pdffile} and {infofile} files
+ have been generated. Each board has a single zone in it that
+ encompasses the full board, and a hex grid is added to that
+ zone. The module developer should adjust the zone and embedded
+ hex grid according to the actual map, using the VASSAL module
+ editor. The hex grid (as well as coordinates) is drawn by
+ default so as to make this obvious to the developer. The hex
+ sizes should be correct, and mainly the offset needs to be
+ adjusted.
+ </p>
+ <p>
+ Images marked as OOBs have also been added as maps to the
+ module. These also have a single zone with a rectangular grid
+ imposed in it. This grid, and the grid coordinates are drawn by
+ default, so it is easier to see and to remember to adjust it. The
+ module developer should adjust this, possibly adding zones, so
+ that it matches up with the graphics. The developer can add
+ units to the OOB via 'At-start' stacks in the VASSAL editor.
+ </p>
+ <p>
+ All pieces identified by {infofile} and present in {pdffile} have
+ been generated. Double sided pieces (identified by images which
+ also has a suffix-"flipped" image) are created as such.
+ </p>
+ <p>
+ Charts identified by the {infofile} and {pdffile} have been added
+ to the module. The are added as separate (pop-up) frames, but
+ the module developer can change this in the VASSAL module editor.
+ </p>
+ <p>
+ If the {infofile} and {pdffile} identified a front page, then that
+ has been added to module as the splash screen.
+ </p>
+ <p>
+ If a PDF rules file ({rules}) was passed to the Python script,
+ then that has been included in the module and is accessible from
+ the "Help" menu.
+ </p>
+ <h2>Key-bindings</h2>
+ <p>
+ The following key bindings have been defined
+ </p>
+ <table>
+ <tr>
+ <td>Alt-A</td>
+ <td>Show the charts panel</td>
+ </tr>
+ <tr>
+ <td>Alt-B</td>
+ <td>Show the OOBs</td>
+ </tr>
+ <tr>
+ <td>Alt-C</td>
+ <td>Show the counters panel</td>
+ </tr>
+ <tr>
+ <td>Alt-E</td>
+ <td>Show the eliminated units</td>
+ </tr>
+ <tr>
+ <td>Alt-6</td>
+ <td>Roll the die</td>
+ </tr>
+ <tr>
+ <td>Ctrl-O</td>
+ <td>Hide/show counters</td>
+ </tr>
+ <tr>
+ <td>Ctrl-F</td>
+ <td>Flip selected counters</td>
+ </tr>
+ <tr>
+ <td>Ctrl-E</td>
+ <td>Eliminate selected counters</td>
+ </tr>
+ <tr>
+ <td>Ctrl-+</td>
+ <td>Zoom in</td>
+ </tr>
+ <tr>
+ <td>Ctrl--</td>
+ <td>Zoom out</td>
+ </tr>
+ <tr>
+ <td>Ctrl-=</td>
+ <td>Select zoom</td>
+ </tr>
+ <tr>
+ <td>Ctrl-Shift-O</td>
+ <td>Show overview map</td>
+ </tr>
+ </table>
+
+ Counter short cuts (may not work, right click and use context menu)
+ <table>
+ <tr>
+ <td>Ctrl-F</td>
+ <td>Flip counter</td>
+ </tr>
+ <tr>
+ <td>Ctrl-D</td>
+ <td>Delete counter</td>
+ </tr>
+ <tr>
+ <td>Ctrl-M</td>
+ <td>Toggle "moved" marker</td>
+ </tr>
+ <tr>
+ <td>Ctrl-T</td>
+ <td>Toggle move trail</td>
+ </tr>
+ <tr>
+ <td>Ctrl-E</td>
+ <td>Eliminate unit</td>
+ </tr>
+ <tr>
+ <td>Ctrl-R</td>
+ <td>Restore unit (from dead pool)</td>
+ </tr>
+ </table>
+ <h2>After finalising the module</h2>
+ <p>
+ After the developer has finalised the module (added more pieces,
+ fixed board zones a and grids, add in more commands), then this
+ Help menu entry should be deleted. You may want to keep key
+ bindings information in some help file.
+ </p>
+ </body>
+ </html>
+ '''
+ if version.lower() == 'draft':
+ if verbose:
+ print(f' Adding draft notes {version}')
+ zipfile.writestr('help/notes.html',notes)
+ add_helpfile(root,doc,title='Draft Module notes',
+ fileName='help/notes.html')
+
+ keys = f'''
+ <html>
+ <body>
+ <h1>{title} (Version {version}) Key bindings</h1>
+
+ <table>
+ <tr>
+ <th>Key </th>
+ <th>Where </th>
+ <th>Effect</th>
+ </tr>
+ <tr>
+ <td>Alt-A</td>
+ <td>-</td>
+ <td>Show the charts panel</td>
+ </tr>
+ <tr>
+ <td>Alt-B</td>
+ <td>-</td>
+ <td>Show the OOBs</td>
+ </tr>
+ <tr>
+ <td>Alt-C</td>
+ <td>-</td>
+ <td>Show the counters panel</td>
+ </tr>
+ <tr>
+ <td>Alt-E</td>
+ <td>-</td>
+ <td>Show the eliminated units</td>
+ </tr>
+ <tr>
+ <td>Alt-6</td>
+ <td>-</td>
+ <td>Roll the dice</td>
+ </tr>
+ <tr>
+ <td>Ctrl-O</td>
+ <td>Board</td>
+ <td>Hide/show counters</td>
+ </tr>
+ <tr>
+ <td>Ctrl-F</td>
+ <td>Board</td>
+ <td>Flip selected counters</td>
+ </tr>
+ <tr>
+ <td>Ctrl-E</td>
+ <td>Board</td>
+ <td>Eliminate selected counters</td>
+ </tr>
+ <tr>
+ <td>Ctrl-+</td>
+ <td>Board</td>
+ <td>Zoom in</td>
+ </tr>
+ <tr>
+ <td>Ctrl--</td>
+ <td>Board</td>
+ <td>Zoom out</td>
+ </tr>
+ <tr>
+ <td>Ctrl-=</td>
+ <td>Board</td>
+ <td>Select zoom</td>
+ </tr>
+ <tr>
+ <td>Ctrl-Shift-O</td>
+ <td>Board</td>
+ <td>Show overview map</td>
+ </tr>
+ <tr>
+ <td>Ctrl-F</td>
+ <td>Counter</td>
+ <td>Flip counter</td>
+ </tr>
+ <tr>
+ <td>Ctrl-D</td>
+ <td>Counter</td>
+ <td>Delete counter</td>
+ </tr>
+ <tr>
+ <td>Ctrl-M</td>
+ <td>Counter</td>
+ <td>Toggle "moved" marker</td>
+ </tr>
+ <tr>
+ <td>Ctrl-T</td>
+ <td>Counter</td>
+ <td>Toggle move trail</td>
+ </tr>
+ <tr>
+ <td>Ctrl-E</td>
+ <td>Counter</td>
+ <td>Eliminate unit</td>
+ </tr>
+ <tr>
+ <td>Ctrl-R</td>
+ <td>Counter</td>
+ <td>Restore unit (from dead pool)</td>
+ </tr>
+ </table>
+ <p>
+ Counter short cuts (may not work, right click and use context
+ menu)
+ </p>
+ </body>
+ </html>
+ '''
+ if verbose:
+ print(f'Add key bindings help file')
+ zipfile.writestr('help/keys.html',keys)
+ add_helpfile(root,doc,title='Key bindings',
+ fileName='help/keys.html')
+
+ return notes
+
+# --------------------------------------------------------------------
+def add_basics_to_map(root,map,**attr):
+ '''Add a map to the document
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ parent : xml.dom.minidom.Element
+ The parent element
+ button : str
+ Button text
+ name : str
+ Name of the map
+ stacking : bool
+ Whether to enable stacking
+
+ Returns
+ -------
+ map : xml.dom.minidom.Element
+ The map element
+ bpicker : xml.dom.minidom.Element
+ The board picker in map
+ '''
+ stacking = add_stacking(root,map)
+ add_camera (root,map)
+ add_forwardtochatter (root,map)
+ add_menudisplayer (root,map)
+ add_mapcenterer (root,map)
+ add_stackexpander (root,map)
+ add_piecemover (root,map)
+ add_keybufferer (root,map)
+ add_selectionhighlighters(root,map) # TBD
+ add_highlightlastmoved (root,map)
+
+ return stacking
+
+# --------------------------------------------------------------------
+def add_elim(root,game,sides,categories,verbose=False):
+ '''Add an eliminated map
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ game : xml.dom.minidom.Element
+ The parent element
+ sides : list of str
+ List of sides in the game
+ '''
+ if verbose:
+ print(' Adding eliminated map and boards')
+
+ if sides is None or len(sides) == 0:
+ return
+
+ map = add_map(root,game,'DeadMap',
+ buttonName = '', #'Eliminated units',
+ icon = '/images/playerAway.gif',
+ markMoved = 'Never',
+ launch = True,
+ allowMultiple = True,
+ hotkey=key('E',ALT))
+ bpicker = add_boardpicker(root,map,
+ slotHeight = 400,
+ slotWidth = 400)
+ add_setup(root,bpicker,'DeadMap',2,[s+' pool' for s in sides])
+ add_masskey(root,map,'Restore',
+ key('R'),
+ key('R'),
+ icon = '/images/Undo16.gif',
+ tooltip = "Restore selected units")
+
+ for i,s in enumerate(sides):
+ if verbose:
+ print(f' Adding {s} pool')
+
+ color = [0,0,0,64]
+ color[i % 3] = 255
+
+ w = 400
+ h = 400
+ c = ','.join([str(c) for c in color])
+ dimg = categories.get('pool',{}).get('all',{}).get(s,None)
+ img = ''
+
+ if dimg:
+ bb = get_bb(dimg['img'])
+ w = bb[2] - bb[0]
+ h = bb[3] - bb[1]
+ c = ''
+ img = dimg['filename']
+ if verbose:
+ print(f' Using image provided by the user: {img}')
+
+ add_board(root,bpicker,f'{s} pool',
+ image = img,
+ color = c,
+ width = w,
+ height = h)
+
+ add_basics_to_map(root,map)
+
+# --------------------------------------------------------------------
+def add_hex_grid(root,parent,color=rgb(255,0,0),visible=True,grid=True):
+ '''Add a hex grid, either to a zone or to the multizone container'''
+
+ hexes = add_hexgrid(root,parent,color=color,visible=visible,
+ edgesLegal=True)
+ if not grid:
+ return hexes
+
+ add_hexnumbering(root,hexes,
+ color = color,
+ hType = 'A',
+ hOff = -1,
+ vType = 'N',
+ vOff = -1,
+ visible = visible)
+
+ return hexes
+
+# --------------------------------------------------------------------
+def get_picture_info(picture,name,width,height,verbose):
+ '''
+ Returns
+ -------
+ hex_width, hex_height : float, float
+ Scale hex width
+ scx, scy : float, float, float, float
+ Scale to image and picture (x,y)
+ rot90 : bool
+ True if rotated +/-90 degrees
+ tran : callable
+ Translation function
+ '''
+ if picture is None:
+ print(f'WARNING: No Tikz picture information.'
+ f"Are you sure you used the `[zoned]' option for the "
+ f"tikzpicture environment of {name}?")
+ f = lambda x,y: (x,y)
+ return HEX_WIDTH,HEX_HEIGHT,1,1,False,f
+
+ # Get picture bounding box
+ pll = picture['lower left']
+ pur = picture['upper right']
+ # Get picture transformation
+ pa = picture['xx']
+ pb = picture['xy']
+ pc = picture['yx']
+ pd = picture['yy']
+ # Get picture offset (always 0,0?)
+ pdx = picture['dx']
+ pdy = picture['dy']
+ # Define picture global transformation
+ #pr = lambda x,y: (pa * x + pb * y, pc * x + pd * y)
+ pr = lambda x,y: (pa * x + pc * y, pb * x + pd * y)
+ # Globally transform (rotate) picture bounding box
+ pll = pr(*pll)
+ pur = pr(*pur)
+ # Calculate widht, height, and scaling factors
+ pw = pur[0] - pll[0]
+ ph = pur[1] - pll[1]
+ scw = width / pw
+ sch = height / ph
+ # Extract picture scales and rotation
+ # Courtesy of
+ # https://math.stackexchange.com/questions/13150/extracting-rotation-scale-values-from-2d-transformation-matrix
+ from math import sqrt, atan2, degrees, isclose
+ psx = sqrt(pa**2 + pb**2) # * (-1 if pa < 0 else 1)
+ psy = sqrt(pc**2 + pd**2) # * (-1 if pd < 0 else 1)
+ prt = degrees(atan2(pc,pd))
+ if not any([isclose(abs(prt),a) for a in [0,90,180,270]]):
+ raise RuntimeException('Rotations of Tikz pictures other than '
+ '0 or +/-90,+/- 180, or +/-270 not supported. '
+ 'found {prt}')
+ rot90 = isclose(abs(prt),90)
+ if any([isclose(prt,a) for a in [90,270,180,-180]]):
+ print(f'WARNING: rotations by {prt} not fully supported')
+
+ hex_width = psx * HEX_WIDTH
+ hex_height = psy * HEX_HEIGHT
+ if verbose:
+ print(f' Picture transformations: {pa},{pb},{pc},{pd}\n'
+ f' Scale (x,y): {psx},{psy}\n'
+ f' Rotation (degrees): {prt}')
+
+ # When translating the Tikz coordinates, it is important to note
+ # that the Tikz y-axis point upwards, while the picture y-axis
+ # point downwards. This means that the upper right corner is at
+ # (width,0) and the lower left corner is at (0,height).
+ def tranx(x,off=-pll[0]):
+ # print(f'x: {x} + {off} -> {x+off} -> {int(scw*(x+off))}')
+ return int(scw * (x + off)+.5)
+ def trany(y,off=-pur[1]):
+ # print(f'y: {y} + {off} -> {y+off} -> {-int(sch*(y+off))}')
+ return -int(sch * (y + off)+.5)
+ tran = lambda x,y : (tranx(x), trany(y))
+
+ return hex_width, hex_height, scw * psx, sch * psy, rot90, tran
+
+# --------------------------------------------------------------------
+def get_hexparams(i,llx,ury,hex_width,hex_height,scx,scy,rot90,
+ labels,coords,targs,nargs):
+ targs['dx'] = hex_width
+ targs['dy'] = hex_height
+ if labels is not None:
+ labmap = {
+ 'auto': {
+ 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N' },
+ 'auto=numbers' : {
+ 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N' },
+ 'auto=alpha column': {
+ 'hLeading': 0, 'vLeading': 0, 'hType': 'A', 'vType': 'N',
+ 'hOff': -1 },
+ 'auto=alpha 2 column': {# Not supported
+ 'hLeading': 1, 'vLeading': 1, 'hType': 'A', 'vType': 'N' },
+ 'auto=inv y x plus 1': {
+ 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N',
+ 'hOff': 0, 'vDescend': True },
+ 'auto=x and y plus 1': {
+ 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N',
+ 'hOff': 0, 'vOff': 0 }
+ }
+ for l in labels.split(','):
+ nargs.update(labmap.get(l,{}))
+
+ # Field/Direction | Normal | Rotated |
+ # ----------------|--------|---------|
+ # hOff | column | column |
+ # vOff | row | row |
+ # hDescend | column | row | True, incr to left
+ # vDescend | row | column | True, incr upward
+ # First='H' | column | column |
+
+ # In wargame offset=0 means that the first coordinates are 0,0.
+ # But offset 0,0 in VASSAL means start at 1,1
+ horiz = 'column'
+ vert = 'row'
+ nargs['vOff'] = nargs.get('vOff',0)-coords[vert] ['offset']-1
+ nargs['hOff'] = nargs.get('hOff',0)-coords[horiz]['offset']-1
+
+ # In VASSAL, vDesend=False means rows increase downward,
+ # while in wargame, factor=-1 means rows increase downward
+ horiz = 'row' if rot90 else 'column'
+ vert = 'column' if rot90 else 'row'
+ nargs['hDescend'] = coords[horiz]['factor'] != 1
+ nargs['vDescend'] = coords[vert] ['factor'] != -1 # flipped y
+ targs['edgesLegal'] = True
+
+ # Check for inversed columns
+ inv_col = coords['column']['factor'] == -1
+ ell = hex_width if inv_col else 0
+
+ # Some special stuff in case of 90 degree rotation
+ if rot90:
+ targs.update({'sideways': True})
+ nargs['hOff'] -= 1
+ nargs['hDescend'] = not nargs['hDescend']
+ if inv_col:
+ nargs['hOff'] += 3
+
+ margin = i.get('board frame',{}).get('margin',0)
+ mx = scx * margin
+ my = scy * margin
+ if inv_col: mx = 0 # Bug in wargame?
+
+ # Grid offset is defined relative to the full image,
+ # not the zone:
+ #
+ # X,Y offset: The horizontal and vertical position of
+ # the center of the first hex of the grid.
+ #
+ # That is, (x,y)=(0,0) is in the top-left corner of the
+ # image, while in TikZ it is in the bottom left corner.
+ # This means we shift by the boudning box offsets plus
+ # some stuff to align with the zone.
+ #
+ # In case of inversed columns, we need to add some extra stuff.
+ x0, y0 = llx-hex_width/3 + ell + mx, ury + my
+
+ # Rotated?
+ if rot90:
+ x0, y0 = ury+2*hex_width/3 + ell + mx, llx + my
+
+ # Below should be double-checked.
+
+ if not rot90:
+ if coords.get('column',{}).get('top short','') == 'isodd' \
+ and coords.get('column',{}).get('offset',0) == -1:
+ y0 -= hex_width/2
+ elif coords.get('column',{}).get('top short','') == 'iseven' \
+ and coords.get('column',{}).get('offset',-1) == 0:
+ y0 -= hex_width/2
+
+ targs.update({'x0': int(x0),'y0': int(y0)})
+
+# --------------------------------------------------------------------
+def get_rectparams(i,llx,ury,width,height,rot90,targs,nargs):
+ targs['dx'] = width
+ targs['dy'] = height
+ targs['x0'] = int(llx - width/2)
+ targs['y0'] = int(ury + height/2)
+ targs['color'] = rgb(0,255,0)
+ nargs['color'] = rgb(0,255,0)
+ nargs['vDescend'] = True
+ nargs['vOff'] = -3
+ nargs.update({'sep':',','vLeading':0,'hLeading':0})
+
+# --------------------------------------------------------------------
+def add_zones(root,zoned,name,board,width,height,gpid,
+ labels=None,coords=None,picinfo=None,
+ verbose=False,visible=True):
+ grids = []
+ picture = None
+ if verbose:
+ print(f' Adding zones to {name} zoned={"zoned" in board}')
+
+ for k, v in board.items():
+ if k == 'labels': labels = v
+ if k == 'coords': coords = v
+ if k == 'zoned': picture = v
+ if 'zone' not in k or k == 'zoned':
+ continue
+
+ gridtype = (add_hexgrid
+ if 'hex' in k.lower()
+ else add_squaregrid)
+ gridnum = (add_hexnumbering
+ if 'hex' in k.lower()
+ else add_squarenumbering)
+ grids.append([k,v,gridtype,gridnum])
+
+ if len(grids) < 1: return gpid
+ if verbose:
+ print(f' Got zones: {[k[0] for k in grids]}')
+ # Either get picture information from argument, or deduce from the
+ # found 'zoned' key.
+ if picinfo is None:
+ picinfo = get_picture_info(picture,name,width,height,verbose)
+
+ hex_width, hex_height, scx, scy, rot90, tran = picinfo
+
+
+ for g in grids:
+ n, i, typ, num = g
+ if verbose:
+ print(f' Adding zone {n}')
+ if 'scope' in n:
+ llx,lly = tran(*i['global lower left'])
+ urx,ury = tran(*i['global upper right'])
+ path = [[llx,ury],[urx,ury],[urx,lly],[llx,lly]]
+ nm = n.replace('zone scope ','')
+ elif 'path' in n:
+ path = [tran(*ii) for ii in i['path']]
+ llx = min([px for px,py in path])
+ ury = max([py for px,py in path])
+ nm = n.replace('zone path ','')
+
+ # Checkf if we have "point" type elements in this object and
+ # add them to dict.
+ points = [ v for k,v in i.items()
+ if (k.startswith('point') and
+ isinstance(v,dict) and \
+ v.get('type','') == 'point')]
+
+ pathstr = ';'.join([f'{s[0]},{s[1]}' for s in path])
+ if verbose:
+ print(f' Zone path ({llx},{ury}): {pathstr}')
+ zone = add_zone(root,zoned,
+ name=nm,
+ locationFormat = ("$name$"
+ if 'pool' in n.lower() else
+ "$gridLocation$"),
+ useParentGrid=False,
+ path=pathstr)
+
+ # Do not add grids to pools
+ if 'pool' in n.lower():
+ continue
+
+ targs = {'color':rgb(255,0,0),'visible':visible}
+ nargs = {'color':rgb(255,0,0),'visible':visible}
+ if 'hex' in n.lower():
+ get_hexparams(i,llx,ury,hex_width,hex_height,scx,scy,rot90,
+ labels,coords,targs,nargs)
+ else:
+ width = hex_width / HEX_WIDTH * RECT_WIDTH
+ height = hex_height / HEX_HEIGHT * RECT_HEIGHT
+ get_rectparams(i,llx,ury,width,height,rot90,targs,nargs)
+
+ # print(targs,nargs)
+ if 'turn' in n.lower(): nargs['sep'] = 'T'
+ if 'oob' in n.lower(): nargs['sep'] = 'O'
+
+ if verbose:
+ print(f' Adding grid')
+
+ if len(points) <= 0:
+ grid = typ(root,zone,**targs)
+ num(root,grid,**nargs)
+ else:
+ if verbose:
+ print(f' Use a region grid')
+ grid = add_regiongrid(root,zone,snapto=True,visible=visible)
+ for p in points:
+ pn = p["name"]
+ pc = p["coords"]
+ if verbose:
+ print(f' Add region {pn} {p}')
+
+ n, gpid = add_region(root,grid,pn,*tran(*pc),gpid,
+ alsoPiece=True,verbose=verbose)
+
+
+ # Once we've dealt with this grid, we should see if we have
+ # any embedded zones we should deal with.
+ add_zones(root,zoned,name,i,width,height,gpid,
+ labels=labels,coords=coords,picinfo=picinfo,
+ verbose=verbose)
+
+ # Adding a global grid
+ #targs['color'] = rgb(0,255,0)
+ #nargs['color'] = rgb(0,255,0)
+ #grid = typ(root,zoned,**targs)
+ #num(root,grid,**nargs)
+
+ return gpid
+
+
+# --------------------------------------------------------------------
+def add_inv(root,game,sides,**attr):
+ '''Add inventory to module'''
+ filt = '{' + '||'.join([f'Faction=="{s}"' for s in sides])+'}'
+ grp = 'Faction,Command,Echelon,Type'
+ inv = add_inventory(root,game,
+ include = filt,
+ groupBy = grp,
+ sortFormat = '$PieceName$',
+ tooltip = 'Show inventory of all pieces',
+ zoomOn = True,
+ **attr)
+ return inv
+
+
+# --------------------------------------------------------------------
+def add_map_board(root,game,name,board,gpid,verbose=False,visible=False):
+ '''A add a single board to the module
+ '''
+
+ map = add_map(root,game, name)
+ bpicker = add_boardpicker(root,map)
+
+ add_counterviewer (root,map)
+ add_hidepieces (root,map)
+ add_globalmap (root,map)
+ add_zoomer (root,map)
+ add_basics_to_map (root,map)
+ add_masskey (root,map,'Flip', key('F'),key('F'),
+ icon = '/images/Undo16.gif',
+ tooltip='Flip selected units')
+ add_masskey (root,map,'Eliminate',key('E'),key('E'),
+ icon = '/images/playerAway.gif',
+ tooltip='Eliminate selected units')
+
+ # Get the image so we may make a rectangle
+ if verbose:
+ print(f' Adding board {board["name"]} -> {board["filename"]}')
+ ulx,uly,lrx,lry = get_bb(board['img'])
+ eboard = add_board(root,bpicker,name,image=board['filename'])
+ zoned = add_zoned(root,eboard)
+ #hexes = add_hexgrid(root,zoned)
+ add_zonehighlighter(root,zoned)
+
+ if not 'zones' in board:
+ full = add_zone(root,zoned,
+ name='full',
+ useParentGrid=False,
+ path=(f'{ulx},{uly};' +
+ f'{lrx},{uly};' +
+ f'{lrx},{lry};' +
+ f'{ulx},{lry}'))
+
+ # We do not have board info, so add a grid to the whole thing
+ add_hex_grid(root,full,rgb(255,0,0),True,True,visible=visible)
+ return
+
+ # If we get here, we have board info!
+ w = abs(ulx-lrx)
+ h = abs(uly-lry)
+ return add_zones(root,zoned,name,board['zones'],w,h,gpid,
+ verbose=verbose,visible=visible)
+
+# --------------------------------------------------------------------
+def add_boards(root,game,categories,sides,gpid,verbose=False,visible=False):
+ '''Add all boards to the module, including eliminated map
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ game : xml.dom.minidom.Element
+ The parent element
+ categories : dict
+ Catalogue of images
+ sides : list of str
+ List of sides in the game
+ Name of the map
+ '''
+ if verbose:
+ print('Adding maps and boards')
+
+ # Loop over defined boards
+ for bn, b in categories.get('board',{}).get('all',{}).items():
+ gpid = add_map_board(root,game,bn,b,gpid,verbose,visible)
+
+ add_elim(root,game,sides,categories,verbose)
+
+ return gpid
+
+# --------------------------------------------------------------------
+def add_oob(root,widget,name,oob,gpid,hotkey='',verbose=False,visible=False):
+ '''A add a single board to the module
+ '''
+ # Short hand
+ cr = lambda parent,tag,**attr : create_elem(root,parent,vn(tag),**attr)
+
+ if verbose:
+ print(f' Adding oob {name}')
+
+ map = add_widgetmap(root,widget, name,markMoved='Never',hotkey='')
+ bpicker = add_boardpicker(root,map)
+
+ add_counterviewer (root,map)
+ add_zoomer (root,map)
+ add_basics_to_map (root,map)
+
+
+ # Get the image so we may make a rectangle
+ if verbose:
+ print(f' Adding OOB {oob["name"]} -> {oob["filename"]}')
+
+ ulx,uly,lrx,lry = get_bb(oob['img'])
+ board = add_board(root,bpicker,name,image=oob['filename'])
+ zoned = add_zoned(root,board)
+ add_zonehighlighter(root,zoned)
+
+ if not 'zones' in oob:
+ zone = add_zone(root,zoned,
+ name='full',
+ useParentGrid=False,
+ path=(f'{ulx},{uly};' +
+ f'{lrx},{uly};' +
+ f'{lrx},{lry};' +
+ f'{ulx},{lry}'))
+ # We do not have board info, so add a grid to the whole thing
+ grid = add_squaregrid(root,zone,visible=visible)
+ add_squarenumbering(root,grid,visible=visible)
+ return
+
+ # If we get here, we have board info!
+ w = abs(ulx-lrx)
+ h = abs(uly-lry)
+ return add_zones(root,zoned,name,oob['zones'],w,h,gpid,
+ verbose=verbose,visible=visible)
+
+# --------------------------------------------------------------------
+def add_oobs(root,game,categories,gpid,verbose=False,visible=False):
+ '''Add all OObs to the module
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ game : xml.dom.minidom.Element
+ The parent element
+ categories : dict
+ Catalogue of images
+ '''
+ # Short hand
+ oobc = categories.get('oob',{}).get('all',{}).items()
+ if len(oobc) < 1:
+ return gpid
+
+ oobs = add_chartwindow(root,game, 'OOBs',
+ hotkey = key('B',ALT),
+ description = 'OOBs',
+ text = '',
+ icon = '/images/inventory.gif',
+ tooltip = 'Show/hide OOBs')
+ tabs = add_tabs(root,oobs,'OOBs')
+
+ if verbose:
+ print('Adding OOBs')
+
+ # Loop over defined boards
+ for on, o in oobc:
+ widget = add_mapwidget(root,tabs, entryName=on)
+ gpid = add_oob(root,widget,on,o,gpid,
+ verbose = verbose,
+ hotkey = key('B',ALT),
+ visible = visible)
+
+ return gpid
+
+# --------------------------------------------------------------------
+def add_markproto(root,protos,key,value):
+ decs = [ mark_trait(key,value.capitalize()),
+ basic_trait('','','') ]
+ typs = [d[0] for d in decs]
+ stts = [d[1] for d in decs]
+ typ = enc_parts(*typs)
+ stt = enc_parts(*stts)
+ body = add_proto(typ,stt)
+ add_prototype(root,protos,value+' prototype',body)
+
+# --------------------------------------------------------------------
+def add_counters(root,game,categories,
+ unittypes,echelons,commands,verbose=False):
+ '''Add all counters to the module.
+
+ This will add all counters to the module, as well as prototypes
+ for each sub-category.
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ game : xml.dom.minidom.Element
+ The game element
+ categories : dict
+ Catalogue of images
+ '''
+ # Short hand
+ # Create prototypes container before adding pieces
+ protos = add_prototypes(root,game)
+ for utype in unittypes: add_markproto(root,protos,'Type',utype)
+ for ech in echelons: add_markproto(root,protos,'Echelon',ech)
+ for cmd in commands: add_markproto(root,protos,'Command',cmd)
+
+ # Stating global piece ID
+ gpid = 20
+
+ # A window to hold the pieces
+ piecew = add_piecewindow(root,game,'Counters',
+ hotkey = key('C',ALT))
+ # Tab container for each sub-category
+ piecet = add_tabs(root,piecew,entryName='Counters')
+
+ if verbose:
+ print('Adding counters and prototypes')
+
+ # Loop over sub-categories
+ for subn, subc in categories.get('counter',{}).items():
+ # Friendly message
+ if verbose:
+ print(f' Adding {subn} counters and prototype')
+
+ # Create a panel for this sub-category
+ piecep = add_panel(root,piecet,
+ entryName = subn,
+ fixed = False)
+ # Add a list to the panel
+ piecel = add_list(root,piecep,
+ entryName=f'{subn} counters')
+
+ if verbose:
+ print(f' Prototype: {subn} prototype')
+ # Create prototype for this sub-category
+ proto = add_prototype(root,protos,
+ name = f'{subn} prototype',
+ code = proto_body(subn),
+ description = f'Prototype for {subn} counters')
+
+ # Loop over counters in this sub-category
+ for cn, c in subc.items():
+ # Flipped counters are not added directly
+ if cn.endswith('flipped'): continue
+
+ if verbose:
+ print(f' counter: {cn}')
+
+ # Get image bounding box
+ bb = get_bb(c['img'])
+
+ # Get flipped image, if any
+ cf = subc.get(cn + ' flipped', None)
+
+ # Create a slot for this piece
+ sl = add_pieceslot(root,piecel,
+ entryName = cn,
+ gpid = gpid,
+ code = piece_body(subn,c,cf,gpid),
+ height = bb[3]-bb[1],
+ width = bb[2]-bb[0])
+
+ # Store the global piece identifier - do we need this?
+ c['gpid'] = gpid
+
+ # Increment global piece identifier
+ gpid += 1
+
+ # Return next free piece identifier
+ return gpid
+
+# --------------------------------------------------------------------
+def add_charts(root,game,categories,verbose=False):
+ '''Add all boards to the module
+
+ This will select all 'chart' elements from the catalogue and add
+ them as individual (popup) panels to the module.
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ game : xml.dom.minidom.Element
+ The game element
+ categories : dict
+ Catalogue of images
+
+ '''
+ chartc = categories.get('chart',{}).get('all',{}).items()
+ if len(chartc) < 1:
+ return
+
+ # Short hand
+ cr = lambda parent,tag,**attr : create_elem(root,parent,vn(tag),**attr)
+ cw = lambda parent,tag,**attr : create_elem(root,parent,vw(tag),**attr)
+
+ if verbose:
+ print('Adding charts')
+
+ charts = add_chartwindow(root,game, 'Charts',
+ hotkey = key('A',ALT),
+ description = 'Charts',
+ tooltip = 'Show/hide Charts')
+ tabs = add_tabs(root,charts,'Charts')
+
+
+ # Loop over defined charts
+ for cn, c in chartc:
+ if verbose:
+ print(f' Chart {cn} ({c["filename"]})')
+ add_chart(root,tabs,
+ chartName = cn,
+ description = cn,
+ fileName = c['filename'])
+
+# --------------------------------------------------------------------
+def add_diceroll(root,game,categories,verbose=False):
+ '''Add a dice button (1d6)
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ game : xml.dom.minidom.Element
+ The game element
+ categories : dict
+ Catalogue of images
+ '''
+ if verbose:
+ print('Adding dice')
+
+ add_dice(root,game,
+ hotkey = key('6',ALT),
+ nDice = 1,
+ nSides = 6,
+ text = '1d6',
+ tooltip = 'Roll a 1d6',
+ name = '1d6')
+
+
+# ====================================================================
+def create_build(info,
+ categories,
+ unittypes,
+ echelons,
+ commands,
+ zipfile,
+ title,
+ version,
+ desc = '',
+ rules = None,
+ pdffile = '',
+ infofile = '',
+ verbose = False,
+ visible = False):
+ '''Create the buildFile.xml document
+
+ Parameters
+ ----------
+ info : dict
+ Information dicationary
+ categories : dict
+ Catalogue of images
+ unittypes : set
+ Set of used unit types
+ zipfile : zipfile.ZipFile
+ Module archive
+ title : str
+ Title of module
+ version : str
+ Version number of module
+ desc : str
+ Short description of the game
+ rules : str
+ Filename of PDF rules document (if any)
+
+ Returns
+ -------
+ xml : str
+ The encoded document
+ '''
+ from xml.dom.minidom import Document
+
+ if verbose:
+ print(f'Creating buildFile.xml: {title},{version}')
+
+ # Create document
+ root = Document()
+
+ # Add game element
+ game = add_game(root,root,
+ name = title,
+ version = version,
+ description = desc)
+
+ # Extract the sides of the game from the counter sub-categories
+ # Should be a little more clever about the case here
+ dsides = {k.lower() : k for k in categories.get('counter',{}).keys()}
+ sides = None
+ for skip in ['all','common', 'marker', 'markers']:
+ if skip in dsides: del dsides[skip]
+ sides = list(dsides.values())
+ if verbose:
+ print('Identified factions: ',sides)
+
+ # Use the standard command encoder
+ add_basiccommandencoder(root,game)
+
+ # Add document parts
+ doc = add_documentation(root,game)
+ add_splash(root, doc, categories, title,verbose)
+ add_rules(root, doc, zipfile, rules,verbose)
+ notes = add_notes(root,doc,zipfile,title,version,
+ sides,pdffile,infofile,rules,verbose)
+
+
+ # Create roster or player sides
+ roster = add_roster(root,game)
+ for s in sides:
+ add_entry(root,roster,s)
+
+ # Add global options - mainly defer to user settings
+ add_globaloptions(root,game,
+ autoReport = 'Use Preferences Setting',
+ centerOnMove = 'Use Preferences Setting',
+ nonOwnerUnmaskable = 'Use Preferences Setting',
+ playerIdFormat = '$playerName$')
+ # Add all pieces to the module (including prototypes)
+ gpid = add_counters(root,game,categories,
+ unittypes,echelons,commands,verbose)
+ # Add an inventory
+ add_inv(root,game,sides)
+ # Add all boards to the module (including eliminated map)
+ gpid = add_boards(root,game,categories,sides,gpid,
+ verbose=verbose,visible=visible)
+ # Add all OOBs to the module
+ gpid = add_oobs(root,game,categories,gpid,
+ verbose=verbose,visible=visible)
+ # Add charts to the module
+ add_charts(root,game,categories,verbose=verbose)
+ # Add a dice rool
+ add_diceroll(root,game,categories,verbose=verbose)
+
+ # Set next available piece identifier on the game
+ game.setAttribute('nextPieceSlotId',str(gpid+1))
+
+ # Return the document
+ return root, notes
+
+# --------------------------------------------------------------------
+def create_data(title,version,desc='',verbose=False):
+ '''Create the module data XML
+
+ Parameters
+ ----------
+ title : str
+ Title of the game
+ version : str
+ Version number of the module
+ desc : str
+ Short description
+
+ Returns
+ -------
+ xml : str
+ The encoded document
+ '''
+ from xml.dom.minidom import Document
+ from time import time
+
+ if verbose:
+ print('Create module data')
+
+ # The document
+ root = Document()
+
+ # Top of the document
+ data = root.createElement('data')
+ data.setAttribute("version","1")
+ root.appendChild(data)
+
+ # Version number of module
+ vers = root.createElement('version')
+ vers.appendChild(root.createTextNode(str(version)))
+ data.appendChild(vers)
+
+ # Name of the game
+ name = root.createElement('name')
+ name.appendChild(root.createTextNode(title))
+ data.appendChild(name)
+
+ # VASSAL version (should get this in some other way)
+ vvers = root.createElement('VassalVersion')
+ vvers.appendChild(root.createTextNode("3.6.7"))
+ data.appendChild(vvers)
+
+ # Description, if any
+ desc = root.createElement('description')
+ data.appendChild(desc)
+
+ # Automatically set the save data
+ save = root.createElement('dateSaved')
+ save.appendChild(root.createTextNode(f'{int(time())}'))
+ data.appendChild(save)
+
+ return root
+
+
+# ====================================================================
+def create_vmod(vmodname,
+ info,
+ title,
+ version,
+ desc = '',
+ rules = None,
+ pdfname = '',
+ infoname = '',
+ patch = None,
+ verbose = False,
+ visible = False):
+ '''Create a VASSAL module from the information passed
+
+ Parameters
+ ----------
+ vmodname : str
+ Name of the module
+ info : list
+ List of images and image data
+ title : str
+ Name of the game
+ version : str
+ Version of the module
+ desc : str
+ Short description of the game
+ rules : str
+ Rules PDF (optional)
+
+ Returns
+ -------
+ '''
+ from zipfile import ZipFile, ZIP_DEFLATED
+ from pprint import pprint
+
+ categories = {}
+ unittypes = []
+ echelons = []
+ commands = []
+ with ZipFile(vmodname,'w',compression=ZIP_DEFLATED) as vmod:
+ # Create images in ZIP file
+ for i in info:
+ if ignore_entry(i): continue
+
+ # Store the name of the image file in catalogue
+ i['filename'] = i['name'].replace(' ','_') + '.png'
+ vmod.writestr('images/'+i['filename'],i['img'])
+
+ # Categorize - assume counter
+ typ = i.get('category','counter')
+ sub = i.get('subcategory','all')
+ if sub == '':
+ i['subcategory'] = 'all'
+ sub = 'all'
+
+ # Add to catalogue
+ if typ not in categories:
+ categories[typ] = {}
+ cat = categories[typ]
+
+ if sub not in cat:
+ cat[sub] = {}
+ tgt = cat[sub]
+
+ tgt[i['name']] = i
+
+ natoapp6c = i.get('natoapp6c',None)
+ if natoapp6c is not None:
+ from re import sub
+ mains = natoapp6c.get('main',None)
+ echelon = natoapp6c.get('echelon',None)
+ command = natoapp6c.get('command',None)
+
+ if mains is not None:
+ mains = sub(r'\[[^]]+\]','',mains)\
+ .replace('{','').replace('}','').split(',')
+ unittypes.extend(mains)
+ i['mains'] = mains
+
+ if echelon is not None:
+ echelons.append(natoapp6c['echelon'])
+ i['echelon'] = echelon
+
+ if command is not None:
+ commands.append(command)
+ i['command'] = command
+
+ # Friendly message
+ # if verbose:
+ # print(f'{i["name"]} -> {i["type"]}/{i["sub type"]} {typ}/{sub}')
+
+ unittypes = set(unittypes)
+ echelons = set(echelons)
+ commands = set(commands)
+
+ # Now create the `buildFile.xml` file
+ build, notes = create_build(info,
+ categories,
+ unittypes,
+ echelons,
+ commands,
+ vmod,
+ title,
+ version,
+ desc,
+ rules,
+ pdfname,
+ infoname,
+ verbose,
+ visible)
+ # Now create the `moduledata` file
+ data = create_data(title, version, desc,verbose)
+
+
+ if patch:
+ from importlib.util import spec_from_file_location, \
+ module_from_spec
+ from pathlib import Path
+ from sys import modules
+
+ p = Path(patch)
+ if verbose:
+ pn = str(p.stem)
+ print(f'Will patch module with {pn}.patch function')
+
+ spec = spec_from_file_location(p.stem, p.absolute())
+ module = module_from_spec(spec)
+ spec.loader.exec_module(module)
+ modules[p.stem] = module
+
+
+ # Patch must accept xml.dom.document,xml.dom.document,ZipFile
+ module.patch(build,data,vmod,verbose)
+
+ buildstr = build.toprettyxml(indent=' ',
+ encoding="UTF-8",
+ standalone=False)
+ datastr = data.toprettyxml(indent=' ',
+ encoding="UTF-8",
+ standalone=False)
+
+ vmod.writestr('buildFile.xml',buildstr)
+ vmod.writestr('moduledata',datastr)
+
+ return notes
+
+# ====================================================================
+def export(vmodname = 'Draft.vmod',
+ pdfname = 'export.pdf',
+ infoname = 'export.json',
+ title = 'Test',
+ version = 'Draft',
+ desc = '',
+ rules = None,
+ patch = None,
+ verbose = False,
+ visible = False):
+ '''Do the whole thing
+
+ - Read in information form the 'infoname' file (a CSV file
+ generated by LaTeX)
+
+ - Convert each page in the 'pdfname' file (a PDF generated by
+ LaTex) into images
+
+ - Create the VASSAL module
+
+ '''
+ if verbose:
+ print(f'Module name : {vmodname}\n'
+ f'PDF name : {pdfname}\n'
+ f'Info name : {infoname}\n'
+ f'Title : {title}\n'
+ f'Version : {version}\n'
+ f'Description : {desc}\n'
+ f'Rules : {rules}\n')
+ info = convert_pages(pdfname=pdfname,infoname=infoname)
+ return create_vmod(vmodname = vmodname,
+ info = info,
+ title = title,
+ version = version,
+ desc = desc,
+ rules = rules,
+ pdfname = pdfname,
+ infoname = infoname,
+ patch = patch,
+ verbose = verbose,
+ visible = visible)
+
+# ====================================================================
+if __name__ == '__main__':
+ from argparse import ArgumentParser, FileType
+
+ ap = ArgumentParser(description='Create draft VASSAL module')
+ ap.add_argument('pdffile',
+ help='The PDF file to read images from',
+ type=FileType('r'),
+ default='export.pdf',
+ nargs='?')
+ ap.add_argument('infofile',
+ help='The JSON file to read image information from',
+ type=FileType('r'),
+ default='export.json',
+ nargs='?')
+ ap.add_argument('-p','--patch',
+ help='A python script to patch generated module',
+ type=FileType('r'))
+ ap.add_argument('-o','--output',
+ help='Output file to write module to',
+ type=FileType('w'),
+ default='Draft.vmod')
+ ap.add_argument('-t','--title',
+ help='Module title', default='Draft',
+ type=str)
+ ap.add_argument('-v','--version',
+ help='Module version',
+ type=str,
+ default='draft')
+ ap.add_argument('-r','--rules',
+ help='Rules PDF file',
+ type=FileType('r'))
+ ap.add_argument('-d','--description',
+ help='Short description of module',
+ type=str,
+ default='draft of module')
+ ap.add_argument('-V','--verbose',
+ help='Be verbose',
+ action='store_true')
+ ap.add_argument('-G','--visible-grids',
+ action='store_true',
+ help='Make grids visible in the module')
+ ap.add_argument('-n','--notes',
+ help='Show notes',
+ action='store_true')
+
+
+ args = ap.parse_args()
+
+ vmodname = args.output.name
+ rulesname = args.rules.name if args.rules is not None else None
+ args.output.close()
+
+ patchname = args.patch.name if args.patch is not None else None
+ if args.patch is not None:
+ args.patch.close()
+
+ if args.version.lower() == 'draft':
+ args.visible_grids = True
+
+ try:
+ notes = export(vmodname = vmodname,
+ pdfname = args.pdffile.name,
+ infoname = args.infofile.name,
+ title = args.title,
+ version = args.version,
+ desc = args.description,
+ rules = rulesname,
+ patch = patchname,
+ verbose = args.verbose,
+ visible = args.visible_grids)
+
+ if args.notes:
+ print(f'Module {vmodname} created. '
+ 'Here are the notes from the module')
+ print(notes)
+
+ except Exception as e:
+ from sys import stderr
+ print(f'Failed to build {vmodname}: e',file=stderr)
+ from os import unlink
+ try:
+ unlink(vmodname)
+ except:
+ pass
+
+ raise e
diff --git a/macros/latex/contrib/wargame/source/utils/svg2tikz.py b/macros/latex/contrib/wargame/source/utils/svg2tikz.py
new file mode 100755
index 0000000000..a9f3c60203
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/utils/svg2tikz.py
@@ -0,0 +1,365 @@
+#!/usr/bin/env python3
+
+from sys import stderr, stdout
+
+def monkey_patch():
+ from svgelements import SVGElement
+
+ def SVGElement__imatmul__(self,other):
+ print('Dummy SVGElement.__imatmul__')
+ return self
+
+ SVGElement.__imatmul__ = SVGElement__imatmul__
+
+monkey_patch()
+
+# --------------------------------------------------------------------
+def open_svg(input):
+ from svgelements import SVG
+
+ svg = SVG.parse(input,reify=False)
+ print(type(svg[0]),file=stderr)
+ return svg
+
+# --------------------------------------------------------------------
+def get_bb(svg):
+ llx,lly,urx,ury = svg.bbox()
+ # print(llx,lly,urx,ury)
+ return llx,lly,urx,ury
+
+# --------------------------------------------------------------------
+def flush_left(svg):
+ from svgelements import Matrix
+
+ llx,lly,urx,ury = get_bb(svg)
+ svg *= Matrix.translate(-llx,-lly)
+ return svg
+
+# --------------------------------------------------------------------
+def scale_unit(svg):
+ from svgelements import Matrix
+
+ llx,lly,urx,ury = get_bb(svg)
+ scale = 1 / max(urx,ury)
+ svg *= Matrix.scale(scale)
+
+ return svg
+
+# --------------------------------------------------------------------
+def scale_to_cm(svg,px_per_cm = 37.79531157367762334497):
+ from svgelements import Matrix
+
+ scale = 1 / px_per_cm
+ svg *= Matrix.scale(scale)
+
+ return svg
+
+# --------------------------------------------------------------------
+def shift_to_centre(svg):
+ from svgelements import Matrix
+
+ llx,lly,urx,ury = get_bb(svg)
+ svg *= Matrix.translate(-urx/2,-ury/2)
+ svg *= Matrix.scale(1,-1)
+ svg.reify()
+ svg.render()
+ return svg
+
+# --------------------------------------------------------------------
+def flipy(svg):
+ from svgelements import Matrix
+
+ llx,lly,urx,ury = get_bb(svg)
+ svg *= Matrix.translate(-llx,-lly)
+ svg *= Matrix.scale(1,-1)
+ svg.reify()
+ svg.render()
+ llx,lly,urx,ury = get_bb(svg)
+ svg *= Matrix.translate(0,-lly)
+ return svg
+
+# ====================================================================
+def get_paths(svg):
+ '''Read in paths from the SVG image
+
+ This will recurse down groups for path operations
+
+ Returns
+ -------
+ paths : list
+ List of svg.path.Path objects
+ '''
+ from svgelements import Path, Group
+ from svg.path import parse_path
+
+ paths = []
+
+ for e in svg:
+ if isinstance(e,Path):
+ print('Parse path',file=stderr)
+ p = parse_path(e.d())
+ paths.append(p)
+ if isinstance(e,Group):
+ print('Parse group',file=stderr)
+ paths.append(get_paths(e))
+
+ return paths
+
+# ====================================================================
+def tikz_point(e,f):
+ '''Ouput a point
+
+ Parameters
+ ----------
+ e : complex
+ The point
+ f : str
+ Floating point format
+
+ Return
+ ------
+ coord : str
+ The point formatted for Tikz
+ '''
+ return f'({e.real:{f}},{e.imag:{f}})'
+
+# --------------------------------------------------------------------
+def tikz_move(e,f):
+ '''Output a move-to operation
+
+ Parameters
+ ----------
+ e : complex
+ The point to move to
+ f : str
+ Floating point format
+
+ Return
+ ------
+ coord : str
+ The point formatted for Tikz
+ '''
+ return tikz_point(e.start,f)
+
+# --------------------------------------------------------------------
+def tikz_line(e,f):
+ '''Output a line-to operation
+
+ Parameters
+ ----------
+ e : complex
+ The point to draw line to
+ f : str
+ Floating point format
+
+ Return
+ ------
+ line : str
+ The line-to operation to point
+ '''
+ return '-- '+tikz_point(e.end,f)
+
+# --------------------------------------------------------------------
+def tikz_curve(e,f):
+ '''Output a curve-to operation
+
+ Parameters
+ ----------
+ e : curve operation (3 complex numbers)
+ The control points (2 of them) and the point to draw curve to
+ f : str
+ Floating point format
+
+ Return
+ ------
+ curve : str
+ The curve-to operation to point
+ '''
+ return \
+ '.. controls '+tikz_point(e.control1,f) + \
+ ' and ' +tikz_point(e.control2,f) + \
+ ' ..' +tikz_point(e.end,f)
+
+# --------------------------------------------------------------------
+def tikz_close(e,f):
+ '''Ouput a close (or cycle) operation
+ '''
+ return '-- cycle'
+
+# ====================================================================
+def path_to_tikz(path,f='8.5f'):
+ '''Convert a svt.path.Path to a TikZ path
+
+ Parameters
+ ----------
+ path : svg.path.Path
+ Path to convert
+ f : str
+ floating point format to use
+
+ Returns
+ -------
+ code : list
+ List of Tikz path operations as strings
+ '''
+ from svg.path import Line, Move, Close, CubicBezier, Path
+
+ code = []
+ for e in path:
+ if isinstance(e, Move): code.append(tikz_move(e, f))
+ elif isinstance(e, Line): code.append(tikz_line(e, f))
+ elif isinstance(e, Close): code.append(tikz_close(e,f))
+ elif isinstance(e, CubicBezier): code.append(tikz_curve(e,f))
+ elif isinstance(e, Path): code.extend(path_to_tikz(e,f))
+ else:
+ print(f'Unknown type: {type(e)}',file=stderr)
+
+ return code
+
+# ====================================================================
+def doc_header(output=stdout):
+ '''Prinout put standalone document header
+ '''
+ print(r'''%
+\documentclass{standalone}
+\usepackage{tikz}
+\begin{document}%''',file=output)
+
+# --------------------------------------------------------------------
+def doc_footer(output=stdout):
+ '''Prinout put standalone document footer
+ '''
+ print(r'''%
+\end{document}''',file=output)
+
+# --------------------------------------------------------------------
+def path_to_pic(path,name,output,format):
+ '''Output a Tikz pic definition from the path
+
+ Parameters
+ ----------
+ path : Path
+ The path to convert
+ name : str
+ The name of the pic
+ output : File
+ Output file
+ format : str
+ Floating point format
+ '''
+ print(fr'''\tikzset{{%
+ {name}/.pic={{%
+ \path[pic actions]''',file=output,end='\n ')
+
+ code = path_to_tikz(path,format)
+ print('\n '.join(code),file=output)
+ print(' ;\n }',file=output)
+ print('}%',file=output)
+
+# ====================================================================
+
+# ====================================================================
+def doit(input='soldier_side.svg',
+ centre=True,
+ unit=True,
+ output=stdout,
+ standalone=False,
+ format='8.5f'):
+ svg = open_svg(input)
+ orig_bb = get_bb(svg)
+
+ if centre or unit:
+ svg = flush_left(svg)
+ if unit:
+ svg = scale_unit(svg)
+ else:
+ svg = scale_to_cm(svg)
+ if centre:
+ svg = shift_to_centre(svg)
+ else:
+ svg = flipy(svg)
+ new_bb = get_bb(svg)
+
+ paths = get_paths(svg)
+
+ if standalone:
+ doc_header(output)
+ print(f'% Original bounding box: ({orig_bb[0]},{orig_bb[1]}) ({orig_bb[2]},{orig_bb[3]})',
+ file=output)
+ print(f'% New bounding box: ({new_bb[0]},{new_bb[1]}) ({new_bb[2]},{new_bb[3]})',
+ file=output)
+ pics = []
+ for i, path in enumerate(paths):
+ name = f'pic_{i:03d}'
+ path_to_pic(path,name,output,format)
+ pics.append(name)
+
+ if standalone:
+ print(r'\begin{tikzpicture}%',file=output)
+ x = 0
+ y = 0
+ for i, name in enumerate(pics):
+ if x > 10:
+ x = 0
+ y += 2
+
+ print(fr' \pic[draw,fill=red] at ({x},{y}) {{{name}}};%',
+ file=output)
+ x += 2
+
+ print(r'\end{tikzpicture}%',file=output)
+ doc_footer(output)
+
+# ====================================================================
+def test(svgfile='soldier_side.svg',tikzfile=stdout,standalone=True):
+ with open(svgfile,'r') as input:
+ with open(tikzfile,'w') if isinstance(tikzfile,str) else tikzfile as output:
+ doit(input=input,output=output,standalone=standalone)
+
+
+# ====================================================================
+if __name__ == '__main__':
+ from argparse import ArgumentParser, FileType
+
+ ap = ArgumentParser(description='Convert SVG to unit Tikz picture')
+ ap.add_argument('input',type=FileType('r'),nargs='?',default='soldier_side.svg',
+ help='Input SVG file')
+ ap.add_argument('-o','--output',type=FileType('w'),default=None,
+ help='Output Tikz file')
+ ap.add_argument('-s','--standalone',action='store_true',default=True,
+ help='Write standalone document')
+ ap.add_argument('-p','--picture',action='store_false',dest='standalone',
+ help='Only write picture')
+ ap.add_argument('-f','--format',type=str,default='8.5f',
+ help='Format for coordinates')
+ ap.add_argument('-O','--original-size',dest='unit',action='store_false',
+ help='Do no scale paths to unit size')
+ ap.add_argument('-S','--unit-size',dest='unit',action='store_true',
+ help='Scale paths to unit size')
+ ap.add_argument('-Z','--no-centre',dest='centre',action='store_false',
+ help='Do not centre paths')
+ ap.add_argument('-C','--centre',dest='centre',action='store_true',
+ help='Centre paths')
+
+ args = ap.parse_args()
+
+ if args.output is None:
+ from pathlib import Path
+ inname = Path(args.input.name)
+ outname = inname.with_suffix('.tex')
+ args.output = open(outname,'w')
+
+
+ doit(input = args.input,
+ unit = args.unit,
+ centre = args.centre,
+ output = args.output,
+ standalone = args.standalone,
+ format = args.format)
+
+
+
+
+
+
+
diff --git a/macros/latex/contrib/wargame/source/wargame.dtx b/macros/latex/contrib/wargame/source/wargame.dtx
new file mode 100644
index 0000000000..a2e7d06a94
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/wargame.dtx
@@ -0,0 +1,2455 @@
+% \iffalse
+%<*driver>
+% This is the preamp used in various documents
+\documentclass{ltxdoc}
+%<symbols>\usepackage[noterrainpic]{wgdoc}
+%<!symbols>\usepackage{wgdoc}
+%</driver>
+%\fi
+%\iffalse
+%<*doc>
+% This is for the main documentation
+\usepackage{wgdoc}
+\input{testmap}
+\input{testchits}
+\usetikzlibrary{external}
+\tikzexternalize[prefix=cache/]
+\CodelineIndex
+\EnableCrossrefs
+\DisableCrossrefs
+\DoNotIndex{\a,\advance,\args,\bfseries,\breakforeach,\cc,\ccc,
+ \divide,\def,\h,\filldraw,\node,\path,\RequirePackage,\ProvidesPackage,
+ \Large,\large,\huge,\Huge,\normalsize,\tiny,
+ \long,\n,\mc,\o,\p,
+ \usetikzlibrary,\draw,\foreach,\fv,\tikzinputsegmentfirst,
+ \tikzinputsegmentsupporta,\tikzinputsegmentsupportb,
+ \tikzinputsegmentlast,\pgfmathparse,\pgfpoint,\edef,\pgfmathresult,
+ \relax,\ifx,\else,\fi,\definecolor,\tikz,\tikzset,\tikzstyle,
+ \maxdimen,\pgfseteorule,\message,\global,\clip,\let,\end,\begin,
+ \sffamily,\selectfont,\fontsize,\DeclareTextFontCommand,
+ \selectfont,\define@key,\pgf@x,\pgf@y,\xdef,\expandafter,\@ifundefined,
+ \pgfpointxy,\csname,\endcsname,\pgfpointadd,\fill,\@empty,\@ifnextchar,
+ \@undefined,\@undefinedb,\arrow,\b,\c,\color,\fontfamily,\fontseries,
+ \gdef,\i,\k,\m,\newcommand,\newcount,\newif,\newlength
+ \pgf@pathmaxx,\pgf@pathminx,\pgf@pathmaxy,\pgf@pathminy,
+ \pgf@picmaxx,\pgf@picminx,\pgf@picmaxy,\pgf@picminy,
+ \pgf@relevantforpicturesizefalse,\pgf@relevantforpicturesizetrue,
+ \pic,\r,\setkeys,\setlength,\show,\t,\temp,\the,
+ \tikzdeclarecoordinatesystem,\tmp@x,\tmp@y,\v,\x,\y}
+%% \OnlyDescription
+\def\PrintMacroName#1{}
+\def\PrintEnvName#1{}
+\title{The \textsf{wargame} package}
+\author{Christian Holm Christensen}
+\date{\today}
+\begin{document}
+\maketitle
+\begin{abstract}
+ This package provides tools to typesetting manuals, board, and
+ counters for wargames using \LaTeX{}.
+
+ Licensed under
+ \href{http://creativecommons.org/licenses/by-sa/4.0}{Creative
+ Commons Attribution-ShareAlike International License, version 4}
+ \tikz[scale=.2,transform shape]{\pic{cc by sa};}.
+\end{abstract}
+\tableofcontents
+\wargamedbglvl=0
+\hexdbglvl=0
+\chitdbglvl=0
+\natoappdbglvl=0
+% To avoid: Package multicol Error: Error saving partial page.
+\setlength{\IndexMin}{100pt}
+\DocInput{wargame.dtx}
+\end{document}
+%</doc>
+%\fi
+%
+% \iffalse
+% ====================================================================
+%
+% Documentation
+%
+% ====================================================================
+% \fi
+%
+% \newif\ifShowSymbols\ShowSymbolsfalse
+% \newif\ifShowCompat\ShowCompatfalse
+%
+% \iffalse
+% --------------------------------------------------------------------
+%
+% Introduction
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \section{Introduction}
+%
+% This package provides tools for typesetting classic, hex-based
+% wargames. The package allows an author to design a board, or map,
+% comprised of hex, using a relatively simple interface. Units are
+% typeset using a similar interface. Unit types are identified using
+% the NATO Joint Military Symbology \cite{app6c} standard.
+%
+% \iffalse
+% --------------------------------------------------------------------
+%
+% Hexes
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \section{Hex Boards}
+%
+% The package provides a number of facilities to set-up a board
+% comprised of hexagon fields (``hexes'').
+%
+% \subsection{Placing hexes}
+%
+% A hex can be added to the current \texttt{tikzpicture} using the
+% macro \cs{hex}. It takes up to 4 arguments
+%
+% \begin{MacroSyntax}{\hex}
+% \cs{hex}\oarg{key-value-pairs}\parg{location}\parg{name}
+% \end{MacroSyntax}
+%
+% The \meta{key-value-pairs} specify the hex. Valid options are
+% \begin{description}
+% \item[\keyval{terrain}{\meta{terrain-keys}}] specifies the terrain
+% of the hex. More on in this in
+% \sectionname~\ref{sec:hex:terrain}.
+% \item[\keyval{ridges}{\meta{ridges-keys}}] specifies where ridges
+% are drawn in the hex. \sectionname~\ref{sec:hex:ridges}.
+% \item[\keyval{label}{\meta{label-keys}}] specifies the how to output
+% the hex label, if any. This is expanded upon in
+% \sectionname~\ref{sec:hex:label}.
+% \item[\keyval{town}{\meta{town-keys}}] specifies that a town (or
+% similar) is present in the hex. The various keys are described in
+% \sectionname~\ref{sec:hex:town}.
+% \item[\keyval{extra}{\meta{extra-keyx}} \textrm{and} \keyval{extra
+% clipped}{\meta{extra-keyx}}] allows the user to put custom
+% graphics in the hexes. See also \sectionname~\ref{sec:hex:extra}
+% for more.
+% \item any style key defined for \TikZ{} pictures.
+% \end{description}
+%
+% The \meta{location} argument specifies the coordinates, in the hex
+% coordinate system where to put the hex. More about the coordinate
+% system is given in \sectionname~\ref{sec:hex:cs}. Note, the numbers
+% starts from the lower--left corner.
+%
+% The elements are rendered in the following order
+% \begin{enumerate}
+% \item The terrain, clipped to the hex shape.
+% \item The hex, including circumference and fill
+% \item The ridges, if any
+% \item The label, if any
+% \item Extra graphics clipped to the hex
+% \item Town, if any
+% \item Extra graphics which may extend beyond the confines of the
+% hex.
+% \end{enumerate}
+%
+% \figurename~\ref{fig:hex:parts} illustrates some of the components
+% of a hex. The hexes are 2 unit lengths wide. Typically, the unit
+% length is one centimetre, which means the hexes are roughly
+% $2\,\text{cm}\times 1.86\,\text{cmm}$ --- or roughly $3/4"\times
+% 3/4"$ --- big. This allows the hexes to fit chits (see
+% Section~\ref{sec:chit}) of size $12\,\mathrm{mm}\times12\,\mathrm{mm}$
+% --- or roughly $1/2"\times1/2"$ --- nicely. If one wants larger
+% chits or hexes one should take care to scale both by a similar
+% amount.
+%
+% {\makeatletter\global\let\hexyy\hex@yy}
+% \tikzset{wg arrow/.style={red!50!black,thick,<-}}
+% \begin{figure}[htbp]
+% \centering
+% \begin{tikzpicture}[scale=2]
+% \hex[terrain={woods},label={text=A1},color=blue](r=0,c=0)
+% \draw[red]($(hex cs:e=N)-(0,.2)$)
+% ellipse [x radius=.8, y radius=.4] node(label){};
+% \draw[wg arrow] (label)--(1.3,1.2)
+% node[align=right,anchor=south]{\texttt{label=\{text=A1\}}};
+% \draw[wg arrow] (0,0)--(-2,-1)node[align=right,anchor=base east]{
+% \texttt{terrain=\{woods\}}};
+% \pic[draw,transform shape]{wg/x axis={-1,1, -1.2,{0},}};
+% \pic[draw,transform shape]{wg/y axis={1.2, -1,1, {0},{-\hexyy,\hexyy}}};
+% \end{tikzpicture}
+% \caption{Hex parts. The bar on the bottom and to the right
+% indicate two units of length.}
+% \label{fig:hex:parts}
+% \end{figure}
+%
+% \subsection{Styling hexes}
+%
+% Typical \TikZ{} options can be passed to the \cs{hex} macro. For
+% example, if you want to draw the hex borders in red, simply pass
+% \spec{draw=red} in the \oarg{optional} arguments to
+% \cs{hex}. Individual parts of the hexes can be styled separately.
+% the default style used by \cs{hex} is \spec{tikz/hex/hex}. Users
+% can redefine this style to suit their needs. If one does not want
+% to change the default style, or pass the same argument to all
+% \cs{hex}s one can define the style \spec{tikz/every hex}. For example,
+% if one wants to auto label all hexes, one can do
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \begin{scope}[every hex/.style={label=auto}]
+% % Hexes
+% \end{scope}
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% \subsection{Hex coordinate system}
+% \label{sec:hex:cs}
+%
+% The package defines a coordinate system based on hexes. The centre
+% of a hex is specified as \meta{column}-\meta{row} pairs, while
+% vertexes and mid-point on edges can be specified separately. The
+% syntax of the coordinates is
+%
+% \begin{Syntax}
+% (hex cs:row=\meta{hex-row},column=\meta{hex-column},vertex=\meta{vertex},edge=\meta{edge})
+% \end{Syntax}
+%
+% where \meta{vertex} and \meta{edge} are optional. The hex row and
+% column defaults both to 0 and can be decimal numbers. The
+% \spec{row}, \spec{column}, \spec{vertex}, and \spec{edge} keywords
+% may be shorted to \spec{r}, \spec{c}, \spec{v}, and \spec{e},
+% respectively. Possible vertexes and edges are listed in
+% \tablename~\ref{tab:hex:ve}.
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{m{.3\linewidth}m{.65\linewidth}}
+% \begin{tikzpicture}
+% \hex(r=0,c=0)
+% \foreach \v in {E,NE,NW,W,SW,SE}{
+% \fill(hex cs:v=\v) circle(0.05);
+% \node[inner sep=2pt] (v\v) at ($1.6*(hex cs:v=\v)$){\spec{v=\v}};
+% \draw[<-](hex cs:v=\v)--(v\v); }
+% \foreach \e in {NE,N,NW,SW,S,SE}{
+% \fill(hex cs:e=\e) circle(0.05);
+% \node[inner sep=2pt] (e\e) at ($1.6*(hex cs:e=\e)$) {\spec{e=\e}};
+% \draw[<-](hex cs:e=\e) -- (e\e);}
+% \end{tikzpicture}
+% &
+% \begin{tabular}{|ccr|ccr|}
+% \hline
+% \rowcolor{headbg}
+% \multicolumn{2}{c}{\color{headfg}\spec{vertex=}}
+% & {\color{headfg}\textbf{Angle}}
+% & \multicolumn{2}{c}{\color{headfg}\spec{edge=}}
+% & {\color{headfg}\textbf{Angle}}
+% \\
+% \hline
+% \rowcolor{white}
+% \spec{east} & \spec{E} & $ 0^{\circ}$ &
+% \spec{north east} & \spec{NE} & $ 30^{\circ}$\\
+% \spec{north east} & \spec{NE} & $ 60^{\circ}$ &
+% \spec{north} & \spec{N} & $ 90^{\circ}$\\
+% \spec{north west} & \spec{NW} & $120^{\circ}$ &
+% \spec{north west} & \spec{NW} & $150^{\circ}$\\
+% \spec{west} & \spec{W} & $180^{\circ}$ &
+% \spec{south west} & \spec{SW} & $210^{\circ}$\\
+% \spec{south west} & \spec{SW} & $240^{\circ}$ &
+% \spec{south} & \spec{S} & $270^{\circ}$\\
+% \spec{south east} & \spec{SE} & $300^{\circ}$ &
+% \spec{south east} & \spec{SE} & $330^{\circ}$\\
+% \hline
+% \end{tabular}
+% \end{tabular}
+% \caption{Vertex and edge positions}
+% \label{tab:hex:ve}
+% \end{table}
+%
+% In \figurename~\ref{fig:hex:cs} is an example of a picture drawn in
+% this coordinate system.
+%
+% \begin{figure}[htbp]
+% \begin{tabular}{m{.3\linewidth}m{.65\linewidth}}
+% \begin{tikzpicture}[]
+% \hex[color=lightgray](r=0,c=0)
+% \hex[color=lightgray](r=0,c=1)
+% \hex[color=lightgray](r=1,c=0)
+% \hex[color=lightgray](r=1,c=1)
+% \draw[blue!50!black] (hex cs:r=0,c=0) -- (hex cs:r=1,c=1);
+% \draw[red!50!black] (hex cs:r=0,c=0,vertex=E) --
+% (hex cs:r=1,c=1,edge=north west);
+% \fill (hex cs:r=0,c=0) circle(.1)
+% node[color=gray,anchor=north] {\spec{(r=0,c=0)}};
+% \fill (hex cs:r=1,c=1) circle(.1)
+% node[color=gray,anchor=west] {\spec{(r=1,c=1)}};
+% \fill (hex cs:r=0,c=0,v=east) circle(.1)
+% node[color=gray,anchor=north west]{\spec{(r=0,c=0,v=E)}};
+% \fill (hex cs:r=1,c=1,e=north west) circle(.1)
+% node[color=gray,anchor=south]{
+% \spec{(r=1,c=1,e=NW)}};
+% \fill[lightgray](hex cs:r= .3,c= .3) circle(0.1)
+% node[anchor=south,inner sep=0]{(0.3,0.3)};
+% \fill[lightgray](hex cs:r=1.3,c= .3) circle(0.1)
+% node[anchor=south,inner sep=0]{(1.3,0.3)};
+% \fill[lightgray](hex cs:r=0.3,c=1.3) circle(0.1)
+% node[anchor=south,inner sep=0]{(0.3,1.3)};
+% \fill[lightgray](hex cs:r=1.3,c=1.3) circle(0.1)
+% node[anchor=south,inner sep=0]{(1.3,1.3)};
+% \end{tikzpicture}
+% &
+% Hexes and lines drawn with
+% \begin{verbatim}
+% \hex(0,0)\hex(0,1)\hex(1,0)\hex(1,1)
+% \draw[blue!50!black] (hex cs:r=0,c=0) --
+% (hex cs:r=1,c=1);
+% \draw[red!50!black] (hex cs:r=0,c=0,vertex=E) --
+% (hex cs:r=1,c=1,edge=NW);
+% \fill[lightgray](hex cs:r= .3,c= .3) circle(0.1);
+% \fill[lightgray](hex cs:r=1.3,c= .3) circle(0.1);
+% \fill[lightgray](hex cs:r=0.3,c=1.3) circle(0.1);
+% \fill[lightgray](hex cs:r=1.3,c=1.3) circle(0.1);
+% \end{verbatim}
+% \end{tabular}
+% \caption{Hex coordinate system}
+% \label{fig:hex:cs}
+% \end{figure}
+%
+%
+% \textbf{Important}: When the horizontal distance to the centre of a
+% hex becomes less than $-\cos60^{\circ}$ or larger than
+% $b-\cos60^{\circ}$ we effectively have a new hex column, and the
+% coordinates are shifted upward or downward for smaller or larger
+% numbers. Figure~\ref{fig:hex:coord:nb} illustrates. this. This can
+% make it a little hard to specify coordinates relative to a hex
+% centre. Alternatively one may use vertex or edge specifciations
+% together with a relative offset in those directions.
+% \
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \begin{scope}[scale=2,every node/.style={inner sep=0}]
+% \hex
+%
+% \begin{scope}[red,fill]
+% \draw[anchor=south east](hex cs:c=-0.66,r=-0.67)circle(.01)node{(-2/3,-2/3)};
+% \draw[anchor=south east](hex cs:c=-0.67,r=-0.33)circle(.01)node{(-2/3,-1/3)};
+% \draw[anchor=south east](hex cs:c=-0.67,r=0)circle(.01)node{(-2/3,0)};
+% \draw[anchor=south east](hex cs:c=-0.67,r=0.33)circle(.01)node{(-2/3,1/3)};
+% \draw[anchor=north](hex cs:c=-0.33,r=-0.67)circle(.01)node{(-1/3,-2/3)};
+% \draw[anchor=north](hex cs:c=-0.33,r=-0.33)circle(.01)node{(-1/3,-1/3)};
+% \draw[anchor=south](hex cs:c=-0.33,r=0.33)circle(.01)node{(-1/3,1/3)};
+% \draw[anchor=south](hex cs:c=-0.33,r=0.67)circle(.01)node{(-1/3,2/3)};
+% \draw[anchor=south](hex cs:c=0.33,r=-0.67)circle(.01)node{(1/3,-2/3)};
+% \draw[anchor=south](hex cs:c=0.33,r=-0.33)circle(.01)node{(1/3,-1/3)};
+% \draw[anchor=north](hex cs:c=0.33,r=0.33)circle(.01)node{(1/3,1/3)};
+% \draw[anchor=north](hex cs:c=0.33,r=0.67)circle(.01)node{(1/3,2/3)};
+% \draw[anchor=north west](hex cs:c=0.67,r=-0.33)circle(.01)node{(2/3,-1/3)};
+% \draw[anchor=north west](hex cs:c=0.67,r=0)circle(.01)node{(2/3,0)};
+% \draw[anchor=north west](hex cs:c=0.67,r=0.33)circle(.01)node{(2/3,1/3)};
+% \draw[anchor=north west](hex cs:c=0.67,r=0.67)circle(.01)node{(2/3,2/3)};
+% \end{scope}
+%
+% \hex(c=2)
+% \begin{scope}[blue,fill]
+% \draw[anchor=south west](hex cs:c=2,v=NE,o=0.5)circle(.01)node{NE by 1/2};
+% \draw[anchor=south west](hex cs:c=2,v=NE,o=1.0)circle(.01)node{NE by 1};
+% \draw[anchor=south west](hex cs:c=2,v=NE,o=1.5)circle(.01)node{NE by 3/2};
+% \draw[anchor=south east](hex cs:c=2,v=NW,o=0.5)circle(.01)node{NW by 1/2};
+% \draw[anchor=south east](hex cs:c=2,v=NW,o=1.0)circle(.01)node{NW by 1};
+% \draw[anchor=south east](hex cs:c=2,v=NW,o=1.5)circle(.01)node{NW by 3/2};
+% \draw[anchor=north](hex cs:c=2,v=W,o=0.5)circle(.01)node{W by 1/2};
+% \draw[anchor=south](hex cs:c=2,v=W,o=1.0)circle(.01)node{W by 1};
+% \draw[anchor=north](hex cs:c=2,v=W,o=1.5)circle(.01)node{W by 3/2};
+% \draw[anchor=north east](hex cs:c=2,v=SW,o=0.5)circle(.01)node{SW by 1/2};
+% \draw[anchor=north east](hex cs:c=2,v=SW,o=1.0)circle(.01)node{SW by 1};
+% \draw[anchor=north east](hex cs:c=2,v=SW,o=1.5)circle(.01)node{SW by 3/2};
+% \draw[anchor=north west](hex cs:c=2,v=SE,o=0.5)circle(.01)node{SE by 1/2};
+% \draw[anchor=north west](hex cs:c=2,v=SE,o=1.0)circle(.01)node{SE by 1};
+% \draw[anchor=north west](hex cs:c=2,v=SE,o=1.5)circle(.01)node{SE by 3/2};
+% \draw[anchor=north](hex cs:c=2,v=E,o=0.5)circle(.01)node{E by 1/2};
+% \draw[anchor=south](hex cs:c=2,v=E,o=1.0)circle(.01)node{E by 1};
+% \draw[anchor=north](hex cs:c=2,v=E,o=1.5)circle(.01)node{E by 3/2};
+% \end{scope}
+% \end{scope}
+% \end{tikzpicture}
+% \caption{Relative coordinates}
+% \label{fig:hex:coords:nb}
+% \end{figure}
+% \subsection{Terrains}
+% \label{sec:hex:terrain}
+%
+% Terrains are rendered using tile images or \TikZ{}
+% \texttt{pic}tures. The available terrains are shown in
+% \tablename{}s~\ref{tab:hex:terrain:image}
+% and~\ref{tab:hex:terrain:pic}. Users can provide their own tile
+% images and select those via \texttt{terrain=\{image=\meta{image}\}}
+% or defined \TikZ{} \texttt{pic}tures and select those via
+% \texttt{terrain=\{pic=\meta{pic-name}\}}. In all cases, the terrain
+% graphics is clipped to the hex.
+%
+% The terrain of a hex is selected via the multi-valued key
+% \spec{terrain}. Sub-keys of this key are
+%
+% \begin{description}
+% \item[\spec{image=}\meta{graphics-file}] Specifies terrain tile
+% image \meta{graphics-file}.
+% \item[\spec{pic=}\meta{picture-key}] Specifies terrain tile \TikZ{}
+% \spec{pic}ture.
+% \item[\spec{code=}\meta{tikz-code}] Any valid \TikZ{} code
+% \item[\spec{clip=}\meta{path(s)}] \TikZ{} path specification to clip
+% the terrain within the hex.
+% \end{description}
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}|ll|m{2cm}|ll|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\textbf{Name}}
+% & {\color{headfg}\texttt{terrain=\{image=\meta{image}\}}}
+% & {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\textbf{Name}}
+% & {\color{headfg}\texttt{terrain=\{image=\meta{image}\}}}\\
+% \hline
+% &&&&&\\[-1ex]
+% \tikz{\hex[](r=0,c=0) }
+% & Clear
+% & \texttt{}
+% & \tikz{\hex[terrain={image=beach}](r=0,c=0) }
+% & Beach
+% & \texttt{\{image=beach\}}\\
+% \tikz{\hex[terrain={image=light_woods}](r=0,c=0) }
+% & Light woods
+% & \texttt{\{image=light\_woods\}}
+% & \tikz{\hex[terrain={image=woods}](r=0,c=0)}
+% & Woods
+% & \texttt{\{image=woods\}}\\
+% \tikz{\hex[terrain={image=rough}](r=0,c=0) }
+% & Rough
+% & \texttt{\{image=rough\}}
+% & \tikz{\hex[terrain={image=swamp}](r=0,c=0) }
+% & Swamp
+% & \texttt{\{image=swamp\}}\\
+% \tikz{\hex[terrain={image=mountains}](r=0,c=0) }
+% & Mountains
+% & \texttt{\{image=mountains\}}
+% & \tikz{\hex[fill=blue!40!white](r=0,c=0) }
+% & Sea
+% & \texttt{\{image=sea\}}\\
+% \hline
+% \end{tabular}
+% \caption{Terrains specified via tile images}
+% \label{tab:hex:terrain:image}
+% \end{table}
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}|l|l|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\textbf{Name}}
+% & {\color{headfg}\texttt{terrain=\{pic=\meta{image}\}}}\\
+% \hline
+% &&\\[-1ex]
+% \tikz{\hex[terrain={pic=hex/terrain/mountain,line width=3pt}](r=0,c=0) }
+% & Mountains
+% & \texttt{\{pic=hex/terrain/mountain,line width=3pt\}}\\
+% \hline
+% \end{tabular}
+% \caption{Terrains specified via \TikZ{} \spec{pic}tures}
+% \label{tab:hex:terrain:pic}
+% \end{table}
+%
+% The terrain can be clipped by the sub-key \spec{clip}. This can be
+% useful if the game specifies movement costs in terms of hex-edge
+% crossing, for example \emph{First Blood}~\cite{fb}. In that case, a
+% hex may be, for example, a jungle hex, but some edges a clear. Thus
+% movements across such an edge would count as moving into clear
+% territory while moving over other edges will count as moving into a
+% jungle. This is, of course, not how most games count movement
+% costs, but this package nonetheless facilitates such rules.
+% \tablename~\ref{tab:hex:terrain:clip} shows a few examples of
+% predefined clippings of terrain.
+%
+% Users can define \TikZ{} \spec{pic}tures that specify clipping paths
+% as needed. For example, one could add clipping to the terrain to
+% ensure that other graphics in the hex stands out.
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}m{.3\linewidth}|m{2cm}m{.3\linewidth}|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\texttt{terrain=\{clip=,...\}}}
+% & {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\texttt{terrain=\{clip=,...\}}}\\
+% \hline
+% &&&\\
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE\}}
+% & \tikz{\hex[terrain={woods,
+% clip={
+% hex/large sextant=NE,
+% hex/large sextant=N}}](r=0,c=0) }
+% & \spec{\{hex/large sextant=NE,hex/large sextant=N\}}\\
+% \hline
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=N}}](r=0,c=0) }
+% & \spec{\{hex/sextant=N\}}
+% & \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW\}}\\
+% \hline
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NW}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NW\}}
+% & \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW\}}\\
+% \hline
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=SW}}](r=0,c=0) }
+% & \spec{\{hex/sextant=SW\}}
+% & \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW,
+% hex/sextant=S}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW,
+% hex/sextant=S\}}\\
+% \hline
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=S}}](r=0,c=0) }
+% & \spec{\{hex/sextant=S\}}
+% & \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW,
+% hex/sextant=S,
+% hex/sextant=SE}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW,
+% hex/sextant=S,
+% hex/sextant=SE\}}\\
+% \hline
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=SE}}](r=0,c=0) }
+% & \spec{\{hex/sextant=SE\}}
+% & \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW,
+% hex/sextant=S,
+% hex/sextant=SE,
+% hex/sextant=C}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW,
+% hex/sextant=S,
+% hex/sextant=SE,
+% hex/sextant=C\}}\\
+% \hline
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=C}}](r=0,c=0) }
+% & \spec{\{hex/sextant=C\}}
+% & \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=S,
+% hex/sextant=SE,
+% hex/sextant=C}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=S,
+% hex/sextant=SE,
+% hex/sextant=C\}}\\
+% \hline
+% \end{tabular}
+% \caption{Terrain clipped via \spec{clip} sub-key}
+% \label{tab:hex:terrain:clip}
+% \end{table}
+%
+% \subsubsection{Styling terrains}
+%
+% Terrains use the key \spec{tikz/hex/terrain} to render the
+% terrains. This is mainly useful for terrains made from \TikZ{}
+% \spec{pic}tures.
+%
+% \subsection{Ridges}
+% \label{sec:hex:ridges}
+%
+% Ridges, or hill or mountain slopes, can be added to a hex via the
+% keyword \spec{ridges}. The keyword takes a list of hex edges and
+% generates symbology for the ridge on the chosen edges. Note that
+% the edges does not have to be continuous, as illustrated in the
+% bottom right of \tablename~\ref{tab:hex:ridges}, nor in any
+% particular order. The edges are specified as compass direction
+%
+% \begin{Syntax}
+% north east, north, north west, south west, south, south east.\\
+% NE, N, NW, SW, S, SE
+% \end{Syntax}
+%
+% \tablename~\ref{tab:hex:ridges} shows some examples.
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}|c|m{2cm}|c|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\spec{ridges=}}
+% & {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\spec{ridges=}}\\
+% \hline
+% &&&\\[-1ex]
+% \tikz{\hex[ridges=NE]}
+% & \spec{NE}
+% & \tikz{\hex[ridges={NE,N}]}
+% & \spec{NE,N}\\
+% \tikz{\hex[ridges=N]}
+% & \spec{N}
+% & \tikz{\hex[ridges={NE,N,NW}]}
+% & \spec{NE,N,NW}\\
+% \tikz{\hex[ridges=NW]}
+% & \spec{NW}
+% & \tikz{\hex[ridges={NE,N,NW,SW}]}
+% & \spec{NE,N,NW,SW}\\
+% \tikz{\hex[ridges=SW]}
+% & \spec{SW}
+% & \tikz{\hex[ridges={NE,N,NW,SW,S,line width=3pt}]}
+% & \spec{NE,N,NW,SW,S,line width=3pt}\\
+% \tikz{\hex[ridges=S]}
+% & \spec{S}
+% & \tikz{\hex[ridges={NE,N,NW,SW,S,SE,color=brown!70!black}]}
+% & \spec{NE,N,NW,SW,S,SE,color=brown!70!black}\\
+% \tikz{\hex[ridges=SE]}
+% & \spec{SE}
+% & \tikz{\hex[ridges={N,S,NW,SE},terrain={rough}]}
+% & \spec{N,S,NW,SE}\\
+% \hline
+% \end{tabular}
+% \caption{Ridges}
+% \label{tab:hex:ridges}
+% \end{table}
+%
+% \subsubsection{Styling ridges}
+%
+% Every ridge is drawn with the style \spec{tikz/hex/ridges}. Users
+% can customise this style. The default is to draw thin black wave
+% lines (\TikZ{} decoration \spec{waves}). The default style also
+% takes care to auto scale line widths.
+%
+% \subsection{Labels}
+% \label{sec:hex:label}
+%
+% Labels can be placed on the hexes via the keyword \spec{label}. The
+% label can either be auto-generated or given explicitly.
+% \tablename~\ref{tab:hex:label} shows the various choices.
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}|l|c|m{6cm}|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\textbf{Name}}
+% & {\color{headfg}\textbf{Column/Row}}
+% & {\color{headfg}\spec{label=}}\\
+% \hline
+% &&&\\[-1ex]
+% \tikz{\hex[label=none](r=0,c=0) }
+% & No label
+% & n/a
+% & \spec{none}\\
+% \tikz{\hex[label={text=B10}](r=0,c=0) }
+% & User specified
+% & n/a
+% & \spec{text=B10}\\
+% \tikz{\hex[label={color=blue,text=A1}](r=0,c=0) }
+% & User specified
+% & n/a
+% & \spec{\{color=blue,text=A1\}}\\
+% \tikz{\hex[label=auto](r=3,c=9) }
+% & Two-digit, zero padded numbers
+% & 9/3
+% & \spec{auto}\\
+% \tikz{\hex[label={auto=alpha column,font=\noexpand\rmfamily}](r=3,c=2)}
+% & Column letter, number row
+% & 2/3
+% & \spec{\{auto=alpha column,font=\cs{noexpand}\cs{rmfamily}\}}
+% \textsuperscript{$\dag$}\\
+% \tikz{\hex[label={auto=alpha 2 column,anchor=north east}](r=24,c=6) }
+% & Two letter column, two digit row
+% & 6/24
+% & \spec{\{auto=alpha 2 column,anchor=north east\}}\\
+% \hline
+% \end{tabular}
+% \caption{Labels\newline
+% \textsuperscript{$\dag$}When specifying macros as key values in
+% the options, for example the value \cs{rmfamily} for the key
+% \spec{font} above, we have to put a \cs{noexpand} in front if the
+% macro. This is to prevent early expansion of the macro, which
+% would cause errors. A minor nuisance.}
+% \label{tab:hex:label}
+% \end{table}
+%
+% The option \spec{auto=inv y x plus 1} will label the rows
+% inversely, and add one to the column number. This requires that the
+% key \spec{tikz/max hex row} has been set to the largest row number
+% used.
+%
+% In addition to the sub-keys \spec{none}, \spec{auto}, and
+% \spec{text}, one can also specify the following keys
+%
+% \begin{description}
+% \item[\keyval{place}{\meta{coordinates}}] specifies the Location of
+% label within the hex. The anchor point of the text will be placed
+% at this point.
+% \item[\oarg[options]] at the start of the option (but inside braces
+% \spec{\{\textellipsis\}}) can be used to give additional style
+% options.
+% \end{description}
+%
+% \subsubsection{Styling labels}
+%
+% All labels use the style \spec{tikz/hex/label}. By default, this
+% places the label at the top of the hex, and renders the text as gray
+% script sized text. Users can customise this style. If a user does
+% not want to change the default style, or want to pass the same
+% option to all labels, then one can set the key \spec{tikz/every
+% label} to those options.
+%
+%
+% \subsection{Towns}
+% \label{sec:hex:town}
+%
+% Towns in hexes are made via the key \spec{town}. This key takes
+% several sub-keys, as illustrated in \tablename~\ref{tab:hex:town}
+%
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}l|m{2cm}l|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\spec{town=}}
+% & {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\spec{town=}}\\
+% \hline
+% &&&\\[-1ex]
+% \tikz{\hex[town](r=0,c=0) }
+% & \spec{}
+% & \tikz{\hex[town={name=Copenhagen}](r=0,c=0) }
+% & \spec{\{name=Copenhagen\}}\\
+% \tikz{\hex[town={pic=hex/town/city}](r=0,c=0) }
+% & \spec{\{pic=hex/town/city\}}
+% & \tikz{\hex[town={red,pic=hex/town/city}](r=0,c=0) }
+% & \spec{\{red,pic=hex/town/city\}}\\
+% \tikz{\hex[town={fill=red}](r=0,c=0) }
+% & \spec{\{fill=red\}}
+% & \tikz{\hex[town={pic=hex/town/city,name=London}](r=0,c=0) }
+% & \spec{\{name=London\}}\\
+% \tikz{\hex[town={color=red,name=Paris}](r=0,c=0) }
+% & \spec{\{red,name=Paris\}}
+% &\tikz{\hex[town={above=0.8,name=Berlin}](r=0,c=0) }
+% & \spec{\{above=0.8,name=Berlin\}}\\
+% \tikz{\hex[town={place={(.2,.2)}}](r=0,c=0) }
+% & \spec{\{place=\{(.2,.2)\}\}}
+% &\tikz{\hex[town={font=\noexpand\itshape,name=Amsterdam}](r=0,c=0) }
+% & \spec{\{font=\cs{noexpand}\cs{itshape},name=Amsterdam\}}
+% \textsuperscript{$\dag$}\\
+% \hline
+% \end{tabular}
+% \caption{Towns\newline
+% \textsuperscript{$\dag$}When specifying macros as key values in
+% the options, for example the value \cs{rmfamily} for the key
+% \spec{font} above, we have to put a \cs{noexpand} in front if the
+% macro. This is to prevent early expansion of the macro, which
+% would cause errors. A minor nuisance.}
+% \label{tab:hex:town}
+% \end{table}
+%
+% The sub-keys available for the \spec{town} key are
+%
+% \begin{description}
+% \item[\keyval{pic}{\meta{town-pic}}] The name of a \TikZ{}
+% \spec{pic}ture. Currently defined are \spec{hex/town/town} and
+% \spec{hex/town/city}. Users can provide alternate definitions or new types
+% by defining \TikZ{} \spec{pic}tures.
+% \item[\keyval{place}{\meta{coordinates}}] Location of label within
+% the hex. The anchor point of the text will be placed at this
+% point.
+% \item[\keyval{name}{\meta{name}}] Name of town
+% \end{description}
+%
+% \subsubsection{Styling towns}
+%
+% Towns uses two styles: \spec{tikz/hex/town} for the town graphics,
+% and \spec{tikz/hex/town name} for the name of the town. In addition,
+% a user may set the key \spec{tikz/every hex town} to contain options
+% to be passed to all towns.
+%
+% \subsection{Extra graphics for hexes}
+% \label{sec:hex:extra}
+%
+% Additional graphics for hexes can be added by the two keys
+% \spec{extra} and \spec{extra clipped}. The difference between the
+% two are that graphics specified by \spec{extra clipped} are clipped
+% (restricted) to the hex, while graphics given by \spec{extra} may
+% extend beyond the hex. Both keys accept a comma separated list of
+% arguments, where each element has the syntax
+%
+% \begin{Syntax}
+% \oarg{options}\parg{placement}\meta{picture}
+% \end{Syntax}
+%
+% Both \meta{options} and \meta{placement} are optional, and specifies
+% keys to draw \meta{picture} with and the relative location in the
+% hex, respectively. The required argument \meta{picture} must name a
+% \TikZ{} \spec{pic}ture, for example \spec{hex/fortress}. This can
+% be useful for marking hexes on the board. For example to mark a
+% set-up hex for one faction of the game.
+%
+% One could for example define the following pictures to define set-up
+% points for a Sovjet and German faction
+%
+% \tikzset{
+% setup/sovjet/.pic={
+% \path[fill=red,draw=yellow,pic actions]
+% ( 90:.4)--(126:.15)--
+% (162:.4)--(198:.15)--
+% (234:.4)--(270:.15)--
+% (306:.4)--(342:.15)--
+% ( 18:.4)--( 54:.15)--cycle;},
+% setup/german/.pic={
+% \path[fill,pic actions]
+% (-.4, -.1) rectangle(.4,.1)
+% (-.1, -.4) rectangle(.1,.4);
+% \path[draw,pic actions]
+% (-.4,-.2) -- (-.2,-.2) -- (-.2,-.4)
+% (-.4, .2) -- (-.2, .2) -- (-.2, .4)
+% ( .4, .2) -- ( .2, .2) -- ( .2, .4)
+% ( .4,-.2) -- ( .2,-.2) -- ( .2,-.4);},
+% foo/large/.pic={
+% \path[fill=gray,pic actions] (-1,-.5) rectangle(1,.5);},
+% }
+% \begin{verbatim}
+% setup/sovjet/.pic={
+% \path[fill=red,draw=yellow,pic actions]
+% ( 90:.4)--(126:.15)--
+% (162:.4)--(198:.15)--
+% (234:.4)--(270:.15)--
+% (306:.4)--(342:.15)--
+% ( 18:.4)--( 54:.15)--cycle;},
+% setup/german/.pic={
+% \path[fill,pic actions]
+% (-.4, -.1) rectangle(.4,.1)
+% (-.1, -.4) rectangle(.1,.4);
+% \path[draw,pic actions]
+% (-.4,-.2) -- (-.2,-.2) -- (-.2,-.4)
+% (-.4, .2) -- (-.2, .2) -- (-.2, .4)
+% ( .4, .2) -- ( .2, .2) -- ( .2, .4)
+% ( .4,-.2) -- ( .2,-.2) -- ( .2,-.4);}
+% foo/large/.pic={
+% \path[fill=gray,pic actions] (-1,-.5) rectangle(1,.5);},
+% }
+% \end{verbatim}
+%
+% We can place extra graphics in hexes as shown in
+% \tablename~\ref{tab:hex:extra}.
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}l|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\spec{extra=}}\\
+% \hline
+% &\\[-1ex]
+% \tikz{\hex[extra=hex/fortress](r=0,c=0) }
+% & \spec{hex/fortress}\\
+% \tikz{\hex[extra=setup/sovjet](r=0,c=0) }
+% & \spec{setup/sovjet}\\
+% \tikz{\hex[extra=setup/german](r=0,c=0) }
+% & \spec{setup/german}\\
+% \tikz{\hex[extra={setup/german,hex/fortress}](r=0,c=0) }
+% & \spec{\{setup/german,hex/fortress\}}\textsuperscript{$\dag$}\\
+% \tikz{\hex[extra={[{line width=2pt,color=brown}]hex/fortress 2}](r=0,c=0) }
+% & \spec{\{[\{line width=2pt,brown\}]
+% fortress 2\}}\textsuperscript{$\ddag$}\\
+% \tikz{\hex[extra={[shift={(.2,.2)}]setup/sovjet}](r=0,c=0) }
+% & \spec{\{[shift=\{(.2,.2)\}]setup/sovjet\}}\textsuperscript{$\ddag$}\\
+% \tikz{\hex[extra={[{shift={(.2,.2)},scale=.5,color=gray}]setup/german}](r=0,c=0) }
+% & \spec{\{[\{shift=\{(.2,.2)\},scale=.5,color=gray\}]
+% setup/german\}}\textsuperscript{$\ddag$}\\
+% \tikz{\hex[extra=foo/large]} & \spec{foo/large}\\
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\spec{extra clipped=}}\\
+% \hline
+% &\\[-1ex]
+% \iftrue
+% \tikz{\hex[extra clipped=foo/large]} & \spec{foo/large}\\
+% \fi
+% \hline
+% \end{tabular}
+% \caption{Hex extra graphics. Note that in the last line we use
+% the graphics \spec{foo/large} with \spec{extra clipped} (compare
+% to line just above) to restrict the graphics to the hex.\newline%
+% \textsuperscript{$\dag$}When specifying more than one item, the
+% list must be enclosed in braces
+% (\spec{\{\textellipsis\}})\newline%
+% \textsuperscript{$\ddag$}When an item in the list of \spec{extra}
+% contains a comma (\spec{,}), for example in a list of graphics
+% options, then we need to enclose the inner list \emph{and} the
+% whole list in braces (\spec{\{\textellipsis\}}) to protect against
+% unwanted expansion.}
+% \label{tab:hex:extra}
+% \end{table}
+%
+% To finish off this part on hexes and what we can do with those, we
+% generate a map in \figurename~\ref{fig:hex:placing}.
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tabular}{m{.3\linewidth}m{.68\linewidth}}
+% \begin{tikzpicture}[scale=.8]
+% \hex[town={pic=hex/town/city,name=Berlin}](r=0,c=0)
+% \hex[] (r=0,c=1)
+% \hex[] (r=0,c=2)
+% \hex[terrain={swamp},label=auto] (r=0,c=3)
+% \hex[] (r=1,c=0)
+% \hex[terrain={light woods}] (r=1,c=1)
+% \hex[terrain={woods}] (r=1,c=2)
+% \hex[terrain={swamp}] (r=1,c=3)
+% \hex[town={name=Freiburg},extra=hex/fortress](r=2,c=0)
+% \hex[extra=hex/fortress] (r=2,c=1)
+% \hex[terrain={rough}] (r=2,c=2)
+% \hex[] (r=2,c=3)
+% \hex[terrain={mountains}] (r=3,c=0)
+% \hex[terrain={mountains}] (r=3,c=1)
+% \hex[terrain={mountains}] (r=3,c=2)
+% \hex[] (r=3,c=3)
+% \end{tikzpicture}
+% &
+% \begin{verbatim}
+% \hex[town={pic=hex/town/city,name=Berlin}] (r=0,c=0)
+% \hex[] (r=0,c=1)
+% \hex[] (r=0,c=2)
+% \hex[terrain={swamp},label=auto] (r=0,c=3)
+% \hex[] (r=1,c=0)
+% \hex[terrain={light woods}] (r=1,c=1)
+% \hex[terrain={woods}] (r=1,c=2)
+% \hex[terrain={swamp}] (r=1,c=3)
+% \hex[town={name=Freiburg},extra=hex/fortress](r=2,c=0)
+% \hex[extra=hex/fortress] (r=2,c=1)
+% \hex[terrain={rough}] (r=2,c=2)
+% \hex[] (r=2,c=3)
+% \hex[terrain={mountains}] (r=3,c=0)
+% \hex[terrain={mountains}] (r=3,c=1)
+% \hex[terrain={mountains}] (r=3,c=2)
+% \hex[] (r=3,c=3)
+% \end{verbatim}
+% \end{tabular}
+% \caption{Placing hexes}
+% \label{fig:hex:placing}
+% \end{figure}
+%
+% \subsection{Rivers, borders, and roads}
+%
+% Rivers and borders follow the hex sides and are added to the current
+% \spec{tikkzpicture} using \cs{river} and \cs{border} macros
+% respectively. They are specified as regular \TikZ{} paths. It is
+% useful to utilise the hex coordinate system for this.
+%
+% \begin{MacroSyntax}{\river,\border}
+% \cs{river}\oarg{options} \meta{path};\\
+% \cs{border}\oarg{options} \meta{path};
+% \end{MacroSyntax}
+%
+% Rivers are essentially borders, but are randomized to giver a more
+% aesthetically pleasing output.
+%
+% Roads and railroads typically go from hex--center to hex--center,
+% and are added using the macro \cs{road}. The road or railroad is
+% specified via a regular \TikZ{} path.
+%
+% \begin{MacroSyntax}{\addriver}
+% \cs{road}\oarg{options} \meta{path};\\
+% \cs{railroad}\oarg{options} \meta{path};
+% \end{MacroSyntax}
+%
+% Towns and cities conveniently serve as places to split up a road at.
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tikzpicture}
+% \testmap
+% \end{tikzpicture}
+% \caption{Adding rivers, boarders, and roads}
+% \end{figure}
+%
+% \subsection{Board clipping and frame}
+%
+% In the river, border, and road example above, the roads extend beyond
+% the hexes, which does not look very nice. One way to deal with this,
+% is to draw a clipping box around the hexes
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tabular}{m{.\linewidth}m{.\linewidth}}
+% \begin{tikzpicture}
+% \draw[clip](-.5,-.5) rectangle (5,5);
+% \testmap
+% \end{tikzpicture}
+% &
+% \begin{verbatim}
+% \draw[clip](-.5,-.5) rectangle (5,5);
+% \testmap
+% \end{verbatim}
+% \end{tabular}
+% \caption{Clipping for a manual using a \TikZ{}
+% \cs{draw}\spec{[clip]} command.}
+% \label{fig:hex:boxclip}
+% \end{figure}
+%
+% This technique works fine for examples in a manual, it has a
+% somewhat displeasing effect for a full board. The package therefor
+% defines the macro \cs{boardclip} which clips the graphics
+% according to the defined hexes.
+%
+% \begin{MacroSyntax}{\boardclip}
+% \cs{boardclip}\parg{lower-left}\parg{upper-right}\marg{options}
+% \end{MacroSyntax}
+%
+% A clipping path of that spans from the hex at \meta{lower-lest} to
+% \meta{upper-right}. Note, that both of these arguments should only
+% specify the column and row keys. If \meta{options} is non-empty,
+% then the clipping path is drawn with those options.
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tabular}{m{.4\linewidth}m{.4\linewidth}}
+% \begin{tikzpicture}
+% \begin{scope}
+% \boardclip(c=0,r=0)(c=3,r=3){}
+% \testmap
+% \end{scope}
+% \end{tikzpicture}
+% &
+% \begin{verbatim}
+% \begin{scope}
+% \boardclip(c=0,r=0)(c=3,r=3){}
+% \testmap
+% \end{scope}
+% \end{verbatim}
+% \end{tabular}
+% \caption{Snug--fit clipping of board using the macro \cs{boardclip}}
+% \label{fig:hex:clip}
+% \end{figure}
+%
+% This is particularly useful together with the \cs{boardframe} macro.
+% This macro will put a frame around the board, optionally with a
+% margin.
+%
+% \begin{MacroSyntax}{\boardframe}
+% \cs{boardframe}\oarg{margin}\parg{lower-left}{upper-right}
+% \end{MacroSyntax}
+%
+% where \meta{lower-left} and \meta{upper-right} are as for
+% \cs{boardclip}. The \meta{margin} must be a number, and specifies an
+% optional margin around the hexes, The argument \meta{options}
+% specifies how the frame is drawn. The idea is to first draw the
+% frame, then the clipping shape, and then the hexes. One should take
+% care to use the \meta{options} argument to \cs{boardclip} to specify
+% a default background color. The frame is drawn with the style
+% \spec{hex/board frame}
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tabular}{m{4.\linewidth}m{4.\linewidth}}
+% \begin{tikzpicture}[hex/border/.append style={color=red},
+% hex/board frame/.style={fill=Tan}]
+% \begin{scope}[every hex/.style={label=auto}]
+% \boardframe[0.5](c=0,r=0)(c=3,r=3){0.5}
+% \boardclip(c=0,r=0)(c=3,r=3){fill=white}
+% \testmap{}
+% \end{scope}
+% \end{tikzpicture}
+% &
+% \begin{verbatim}
+% \begin{scope}[every hex/.style={label=auto}]
+% \boardframe[0.5](c=0,r=0)(c=3,r=3)
+% \boardclip(c=0,r=0)(c=3,r=3){fill=white}
+% \testmap{}
+% \end{scope}
+% \end{verbatim}
+% \end{tabular}
+% \caption{Combining a frame and clipping}
+% \label{fig:hex:frame}
+% \end{figure}
+%
+% The \cs{boardframe} macro prints the position of the rectangle to
+% the log output, if one needs to do some more stuff around the board.
+%
+% \iffalse
+% --------------------------------------------------------------------
+%
+% Chits
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \cleardoublepage
+% \section{Chits}
+%
+% Chits, or playing counters\footnote{Since \TeX{} has the concept of
+% counters as in `\cs{count}' and \LaTeX{}'s `\cs{newcounter}', we
+% choose the name `chit' for playing pieces instead.}, can be made
+% with the macro \cs{chit}. The syntax for rendering a chit is
+%
+% \begin{MacroSyntax}{\chit}
+% \cs{chit}\oarg{key-value-pairs}\parg{location}\parg{name}
+% \end{MacroSyntax}
+%
+% \figurename~\ref{fig:chit:overview} shows an example of a chit.
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tikzpicture}[scale=2]
+% \firstchit
+% \pic[draw,transform shape]{wg/x axis={-1,1, -1.2,{0},{-.6,.6}}};
+% \pic[draw,transform shape]{wg/y axis={1.2,-1,1, {0},{-.6,.6}}};
+% \draw[wg arrow] (-.2,-.4)--(-0.9,-.6)
+% node[anchor=east]{\spec{factors=\{chit/2 factors=\{4,8\}\}}};
+% \draw[wg arrow] (-.5,.2)--(-1.1,.6)
+% node[anchor=east]{\spec{left=\{chit/identifier=\{1\}\}}};
+% \draw[wg arrow] (.5,.2)--(.7,1.2)
+% node[anchor=south west]{\spec{right=\{chit/identifier=\{2\}\}}};
+% \draw[wg arrow] (-.2,.4)--(-1,1)
+% node[anchor=east]{\spec{symbol=\{\meta{nato app 6(c) spec}\}}};
+% \end{tikzpicture}
+% \caption{An example of a chit. The lines below and to the right
+% shows two unit lengths. Other global options used are
+% \spec{color=white} to set the foreground colour, \spec{fill=blue}
+% for the background, and \spec{text=yellow} to set the font colour
+% to yellow. The \spec{symbol} key also contains
+% \spec{frame=\{fill=yellow!50!black} to set the frame fill colour,
+% and \spec{ultra thick} to set the line width of the NATO App6(C)
+% symbol. Note that the line width is automatically scaled.}
+% \label{fig:chit:overview}
+% \end{figure}
+%
+%
+% The example in \figurename~\ref{fig:chit:overview} shows an infantry
+% mountaineer army unit with attack factor 4, and movement factor 8.
+% The NATO App6(c) symbol is given in terms of keywords for the
+% \cs{natoapp} macro (see \sectionname~\ref{sec:nateoapp6c}). The
+% other parts of the chit (\spec{factors}, \spec{left}, \spec{right},
+% and \spec{below}) are rendered onto the chit via \TikZ{}
+% \spec{pic}tures. This allows for a great deal of flexibility in
+% generating chits. For example, above we use the \spec{pic}tures
+% \spec{chit/identifier} and \spec{chit/2 factors} to render the left-
+% and right-hand identifiers, and the factors, respectively.
+%
+% Full frame chits --- that is chits which are not typically
+% designating units or faction specific chits, e.g., a turn marker ---
+% can be made by using the key \spec{full}. In that case, all other
+% keys (\spec{symbol}, \spec{factors}, \spec{left}, \spec{right},
+% and \spec{below}) are ignored. \figurename~\ref{fig:chit:full} shows
+% such an example.
+%
+% \begin{figure}[tbp]
+% \centering
+% \begin{tabular}{m{.45\linewidth}m{.45\linewidth}}
+% \begin{tikzpicture}[scale=2]
+% \turnchit
+% \end{tikzpicture}
+% &
+% chit made with
+% \begin{verbatim}
+% \tikzset{
+% wg/big text/.pic={
+% \node[font=\sffamily\fontsize{18}{0}%
+% \selectfont]{#1};}}
+% \tikz{
+% \chit[full={wg/big text={Turn}},
+% black,fill=yellow!20!white](0,0)}
+% \end{tikzpicture}
+% \end{verbatim}
+% \end{tabular}
+% \caption{An example of a full-frame chit. }
+% \label{fig:chit:full}
+% \end{figure}
+%
+% The size of the chits are $1.2\times1.2$ unit lengths squared. This
+% is tuned so that the chits will fit within the hexes produced by the
+% \cs{hex} command (see \sectionname~\label{sec:hex}). In
+% \figurename~\ref{fig:chit:hex} we illustrate this. Typically the
+% unit is one centimetre. which means the chits are
+% $12\,\text{mm}\times12\,\text{mm}$ --- or roughly $1/2"\times1/2"$,
+% which is a fairly good size for most games.
+%
+% \begin{figure}[tbp]
+% \centering
+% \begin{tikzpicture}
+% \hex
+% \firstchit(hex cs:r=0,c=0)
+% \hex(c=1,r=0)
+% \secondchit(hex cs:r=0,c=1)
+% \hex(c=2,r=0)
+% \thirdchit(hex cs:r=0,c=2)
+% \end{tikzpicture}
+% \caption{Example of chits fit within hexes. }
+% \label{fig:chit:hex}
+% \end{figure}
+%
+% \subsection{Styling chits}
+%
+% Typical \TikZ{} options can be passed to the \cs{chit} macro. For
+% example, if you want to draw the chit with a red foreground, simply pass
+% \spec{draw=red} in the \oarg{optional} arguments to
+% \cs{chits}. Individual parts of the hexes can be styled separately.
+%
+% \paragraph{Important:} To set the colours of the various elements,
+%
+% one should use
+% \begin{description}
+% \item[\spec{color}=\meta{foreground and text}] Selects the
+% foreground colour of lines, text, and so on, including for the
+% NATO App6(C) symbol.
+% \item[\spec{fill}=\meta{background}] Selects the background colour
+% of the full chit. By default this is transparent.
+% \item[\spec{text}=\meta{text foreground}] Selects the colour used
+% for text in the chit. This overrides \spec{color} for text.
+% \item[\spec{draw}=\meta{foreground}] This sets the colour for
+% foreground elements, excluding text.
+% \end{description}
+% \TikZ{} allows one to pass a \meta{colour} as arguments for drawing
+% and understands that as giving the foreground and text colours.
+% However, that key is \emph{deprecated} for this library, as it does
+% not properly propagate through\footnote{The colour
+% \spec{pgfstrokecolor} is not modified by that.}.
+%
+% The styles used by the \spec{left}, \spec{right}, \spec{setup},
+% \spec{factors}, and \spec{symbol} elements are
+% \spec{tikz/chit/left}, \spec{tikz/chit/right}, \spec{tikz/setup},
+% \spec{tikz/factors}, and \spec{tikz/symbol} respectively. A user can
+% redefine these to change the appearance of the chits. For example,
+% one could make the symbol larger by setting a different
+% \spec{scale}, move the factors to the side by changing \spec{shift},
+% and so on.
+%
+% Pictures used by these elements are also styled by
+% similar keys. For example, the picture \spec{chit/identifier} is
+% styled by \spec{tikz/chit/identifier}.
+%
+% In addition, one can define the key \spec{tikz/every chit} to be the
+% default options for all chits.
+%
+% \subsection{Defining preset chit types}
+%
+% One can conveniently pre-define some chit styles. For example,
+% given the style definition
+%
+% \begin{verbatim}
+% \tikzset{
+% my chit/.style={/chit/symbol={[
+% faction=friendly,
+% command=land,
+% main=armoured]},
+% /chit/left={chit/identifier={Mine}},
+% /chit/factors={chit/2 factors={2,4}}}}
+% \end{verbatim}
+%
+% We can use that to make different chits with some commonalities
+% defined by that style. For example
+%
+% \begin{tikzpicture}
+% \chit[my chit](0,-2)
+% \chit[my chit,color=white,fill=red,right={chit/identifier=1}](2,-2)
+% \end{tikzpicture}
+%
+% where, in the second example, we have passed additional options to
+% \cs{chit}. Note that we \emph{must} give the full path to the
+% \spec{chit} keys when defining a style like this.
+%
+% \iffalse
+% --------------------------------------------------------------------
+%
+% NATO App6(c) symbols
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \cleardoublepage
+% \section{NATO App 6(c) symbols}
+% \label{sec:nateoapp6c}
+%
+% The NATO markers are designed to fit within the template shown in
+% \figurename~\ref{fig:natoapp:template}. The template is serves as a
+% placement guide of the the various parts of the NATO marker as
+% illustrated in \figurename{fig:natoapp:usage}.
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tikzpicture}[scale=2]
+% \node[natoapp6c={command=base}] {};
+% \end{tikzpicture}
+% \caption{Template for NATO symbols}
+% \label{fig:natoapp:template}
+% \end{figure}
+%
+% \begin{MacroSyntax}{\natoapp}
+% \cs{natoapp}\oarg{key-value-pairs}\parg{location}\parg{name}
+% \end{MacroSyntax}
+%
+% where all arguments are optional.
+% Keys are defined to fill in the various parts of the markers. These
+% keys are
+% \begin{description}
+% \item[\keyval{faction}{\meta{faction}}] Selects the faction used for
+% the symbol. See also
+% \sectionname~\ref{sec:natoapp:faction:command}.
+% \item[\keyval{command}{\meta{command}}] Selects the command used for
+% the symbol. See also
+% \sectionname~\ref{sec:natoapp:faction:command}.
+% \item[\keyval{main}{\meta{mains}}] Specifies the main symbol(s).
+% This can be a comma separated list of specifiers (delimited by
+% braces \marg{first,second,\textellipsis}), and each symbol can be
+% preceeded by an optional argument to shift, scale, rotate, etc.,
+% the individual symbols. \ifShowSymbols See also
+% \sectionname~\ref{sec:natoapp:mains}\fi.
+% \item[\keyval{left}{\meta{lefts}}, \keyval{right}{\meta{rights}},
+% \keyval{top}{\meta{tops}}, \keyval{bottom}{\meta{bottoms}},
+% \keyval{below}{\meta{belows}}] Specifies the left-, right-hand,
+% top, bottom, and lower symbol(s). The format of the arguments
+% \meta{lefts}, \meta{rights}, \meta{tops}, \meta{bottoms}, and
+% \meta{belows} has the same format as \meta{mains}.
+% \end{description}
+%
+% \begin{figure}[htbp]
+% \begin{tabular}{m{.45\linewidth}m{.45\linewidth}}
+% \begin{center}
+% \begin{tikzpicture}[scale=2]
+% \natoapp[
+% faction=none,
+% command=base,
+% echelon=army,
+% main={text=M},
+% top={text=T},
+% bottom={text=B},
+% left={text=L},
+% right={text=R},
+% below={text=V}]
+% \pic[draw,transform shape]{wg/x axis={-.5,.5,-.7,,}};
+% \pic[draw,transform shape]{wg/y axis={.7,-.62,.74,,{-.5,.5,-.2,.2}}};
+% \end{tikzpicture}
+% \end{center}
+% & The figure is typeset by
+% \begin{verbatim}
+% \natoapp[faction=none,
+% command=base,
+% echelon=army,
+% main={text=M},
+% top={text=T},
+% bottom={text=B},
+% left={text=L},
+% right={text=R},
+% below={text=V}]
+% \end{verbatim}
+% \end{tabular}
+% \caption{Main keys of \cs{natoapp}. The bottom and right hand
+% bars indicate one unit of length.}
+% \label{fig:natoapp:usage}
+% \end{figure}
+%
+% Other keys are available to further customise the appearance of the
+% symbols
+%
+% \begin{description}
+% \item[\keyval{echelon}{\meta{size}}] The size of the unit described.
+% Possible values are \spec{team}, \spec{squad}, \spec{section},
+% \spec{platoon}, \spec{company}, \spec{battalion}, \spec{regiment},
+% \spec{brigade}, \spec{division}, \spec{corps}, \spec{army},
+% \spec{army group}, \spec{theatre}, and \spec{command}.
+% \item[\keyval{frame}{\meta{keys}}] Extra keys for frame.
+% \end{description}
+%
+% \subsection{Faction and Command Selection}
+% \label{sec:natoapp:faction:command}
+%
+% Table~\ref{tab:frames} shows the various bases used for the various
+% {\ttfamily{\itshape faction}/{\itshape command}} combinations. Also
+% shown in the table is the base template for main identifiers.
+%
+% \makeatletter
+% \def\tabledata{}
+% \foreach \c in {air,land,equipment,installation,sea surface,sub surface,space,activity}{%
+% \protected@xappto\tabledata{\spec{\c}}
+% \foreach \f in {friendly,hostile,neutral,unknown}{%
+% \protected@xappto\tabledata{
+% &\noexpand\tikz[scale=.8]{%
+% \noexpand\path (-.75,-.75) rectangle (.75,.75);
+% \noexpand\node[natoapp6c={faction=\f,command=\c},fill=\f]{};
+% \noexpand\node[natoapp6c={command=base},draw=lightgray]{};
+% }}}
+% \protected@xappto\tabledata{\\ \noexpand\hline}}
+% \makeatother
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|l|m{2cm}m{2cm}m{2cm}m{2cm}|}
+% \hline
+% \rowcolor{headbg}
+% & \multicolumn{4}{c|}{{\color{headfg}\meta{faction}}}\\
+% \rowcolor{headbg}
+% {\color{headfg}\meta{command}}
+% & {\color{headfg}\spec{friendly}}
+% & {\color{headfg}\spec{hostile}}
+% & {\color{headfg}\spec{neutral}}
+% & {\color{headfg}\spec{unknown}}
+% \\
+% \hline
+% \tabledata
+% \end{tabular}
+% \caption{Frames for various combinations of \meta{faction} and
+% \meta{command} combinations. These are drawn with the
+% \spec{pic} given by
+% \spec{natoapp6c/\meta{faction}/\meta{command}} with the options
+% \spec{draw=blue,fill=\meta{faction}}. If no \spec{fill} is
+% specified, then the background will be transparent. Note, the
+% template for main identifiers is also shown on top of each frame.}
+% \label{tab:frames}
+% \end{table}
+%
+% The fill color of the frame is set by the key \spec{frame}. If
+% this is or contains the special value \spec{faction}, then the
+% frame fill colour will be the standard for the faction as
+% illustrated in figure~\ref{fig:faction:color}.
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tikzpicture}
+% \foreach[count=\i] \f in {friendly,hostile,neutral,unknown}{
+% \natoapp[frame=faction,faction=\f,
+% command=space,main={infantry}](2*\i-2,0)}
+% \end{tikzpicture}
+% \caption{Illustration of using the special value \spec{faction}
+% for the \spec{frame} key}
+% \label{fig:faction:color}
+% \end{figure}
+%
+% Elements of the frame can be controlled by the key \spec{frame}.
+% \begin{description}
+% \item[\keyval{frame}{\meta{keys}}] Additional keys to pass to the
+% frame drawing. The special option \spec{faction} will make the
+% frame be filled with the standard faction color.
+% \end{description}
+%
+% \tablename~\ref{tab:frame:color} illustrates this.
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|c|cccc|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Example}}
+% & {\color{headfg}\textbf{\spec{frame=\{color,...\}}}}
+% & {\color{headfg}\textbf{\spec{frame=\{fill,...\}}}}
+% & {\color{headfg}\textbf{\spec{frame=\{draw,...\}}}}
+% & {\color{headfg}\textbf{\spec{frame=\{line width,...\}}}}
+% \\
+% \hline
+% \cellcolor{white}
+% \tikz{\natoapp[main={fixed wing},command=air]}
+% &
+% &
+% &
+% &
+% \\
+% \hline
+% \rowcolor{altcol}
+% \cellcolor{white}
+% \tikz{\natoapp[main={fixed wing},command=air,color=red,
+% frame={line width=2pt}]}
+% & \spec{red}
+% &
+% &
+% & \spec{thick}
+% \\
+% \hline
+% \cellcolor{white}
+% \tikz{\natoapp[main={fixed wing},command=air,
+% frame={fill=yellow,line width=.5pt}]}
+% &
+% & \spec{yellow}
+% &
+% & \spec{thin}
+% \\
+% \hline
+% \rowcolor{altcol}
+% \cellcolor{white}
+% \tikz{\natoapp[main={fixed wing},command=air,frame={blue}]}
+% &
+% &
+% & \spec{blue}
+% &
+% \\
+% \hline
+% \cellcolor{white}
+% \tikz{\natoapp[main={fixed wing},command=air,frame={fill=pink,magenta}]}
+% &
+% & \spec{pink}
+% & \spec{magenta}
+% &
+% \\
+% \hline
+% \rowcolor{altcol}
+% \cellcolor{white}
+% \tikz{\natoapp[main={fixed wing},command=air,color=red,
+% frame={fill=green,draw=blue,line width=3pt}]}
+% & \spec{red}
+% & \spec{green}
+% & \spec{blue}
+% & \spec{ultra thick}
+% \\
+% \hline
+% \end{tabular}
+% \caption{Illustration of frame colour choices}
+% \label{tab:frame:color}
+% \end{table}
+%
+% \subsection{Unit Size (\spec{echelon})}
+%
+% The size of a unit a marker represents is given by the
+% \spec{echelon} keyword. \tablename~\ref{tab:natoapp6c:echelon}
+% shows the various markers and approximate unit sizes.
+%
+% \let\foo\empty
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{1.2cm}|cr@{--}lm{.27\linewidth}m{.27\linewidth}|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Example}}
+% & {\color{headfg}\spec{echelon}}
+% & \multicolumn{2}{c}{{\color{headfg}\textbf{Approx.~size}}}
+% & \foo{} {\color{headfg}\textbf{Sub-units}}
+% & \foo{} {\color{headfg}\textbf{Officer}}
+% \\
+% \hline
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=team,lower=airborne]}
+% & \spec{team}
+% & 3
+% & 5
+% & \foo{} none
+% & \foo{} Corporal or Sergeant
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=squad]}
+% & \spec{squad}
+% & 5
+% & 10
+% & \foo{} 1--2 teams
+% & \foo{} Sergeant
+% \\
+% \hline
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=section]}
+% & \spec{section}
+% & 7
+% & 13
+% & \foo{} 2--3 teams
+% & \foo{} Sergeant
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=platoon]}
+% & \spec{platoon}
+% & $25$
+% & $40$
+% & \foo{} Several squads/sections
+% & \foo{} Second Lieutenant
+% \\
+% \hline\tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=company]}
+% & \spec{company}
+% & $60$
+% & $250$
+% & \foo{} Several platoons
+% & \foo{} Captain
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=battalion]}
+% & \spec{battalion}
+% & $300$
+% & $1\,000$
+% & \foo{} 2--6 companies
+% & \foo{} Lieutenant colonel
+% \\
+% \hline
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=regiment]}
+% & \spec{regiment}
+% & $500$
+% & $2\,000$
+% & \foo{} 3--7 battalions
+% & \foo{} Colonel
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=brigade]}
+% & \spec{brigade}
+% & $2\,000$
+% & $5\,000$
+% & \foo{} Several battalions
+% & \foo{} Colonel
+% \\
+% \hline
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=division]}
+% & \spec{division}
+% & $10\,000$
+% & $20\,000$
+% & \foo{} Several brigades/regiments
+% & \foo{} Major General
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=corps]}
+% & \spec{corps}
+% & $30\,000$
+% & $60\,000$
+% & \foo{} Several divisions
+% & \foo{} Lieutenant General
+% \\
+% \hline
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=army]}
+% & \spec{army}
+% & \multicolumn{2}{c}{$100\,000$}
+% & \foo{} Several corps (5--10 divisions)
+% & \foo{} General
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=army group]}
+% & \spec{army group}
+% & $120\,000$
+% & $500\,000$
+% & \foo{} Several armies
+% & \foo{} Field Marshal
+% \\
+% \hline
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=theatre]}
+% & \spec{theatre}
+% & \multicolumn{2}{c}{$250\,000+$}
+% & \foo{} Several army groups
+% & \foo{} Field Marshal
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=command]}
+% & \spec{command}
+% & \multicolumn{4}{c|}{Not a unit size, but designator}
+% \\
+% \hline
+% \end{tabular}
+% \caption{Illustration of echelon values. Approximate sizes and
+% command officer titles are typical modern day United States of
+% America army values and identifiers. Historically the unit
+% sizes have changed, as has officer titles. Furthermore, both
+% the unit sizes, names, and command officer titles may vary from
+% country to country, even across command.}
+% \label{tab:natoapp6c:echelon}
+% \end{table}
+%
+% \subsection{Unit type identification}
+%
+% \begin{table}
+% \centering%
+% \def\typemark#1{%
+% \tikz[scale=.3]{\natoapp[faction=friendly,command=land,#1]}}
+% \def\sizemark#1{%
+% \tikz[scale=.2]{\pic{natoapp6c/s/echelon=#1};}}
+% \begin{tabular}{|clc|}
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & \multicolumn{2}{c|}{\color{headfg}\textbf{Type \& Abbreviation}}
+% \\
+% \hline
+% \typemark{upper=air assault}
+% & Air assault
+% & AA\\
+% \rowcolor{altcol}
+% \typemark{upper=air defence}
+% & Air defence
+% & ADA\\
+% \typemark{lower=airborne}
+% & Airborne
+% & AB\\
+% \rowcolor{altcol}
+% \typemark{lower=amphibious}
+% & Amphibious
+% & AM\\
+% \typemark{main=anti tank anti armour}
+% & Anti tank/armoured
+% & AT\\
+% \rowcolor{altcol}
+% \typemark{main=armoured}
+% & Armoured
+% & AR\\
+% \typemark{main=chemical biological radiological nuclear}
+% & Chemical biological radiological nuclear
+% & CB\\
+% \rowcolor{altcol}
+% \typemark{main=combined arms}
+% & Combined arms
+% & CAR\\
+% \typemark{main=engineer}
+% & Engineer
+% & ENG\\
+% \rowcolor{altcol}
+% \typemark{main={[fill=pgfstrokecolor]artillery}}
+% & Field artillery
+% & FA\\
+% \typemark{main=infantry}
+% & Infantry
+% & IN\\
+% \rowcolor{altcol}
+% \typemark{main={infantry,armoured}}
+% & Mechanised infantry
+% & M\\
+% \typemark{lower=mountain}
+% & Mountaineer
+% & MTN\\
+% \rowcolor{altcol}
+% \typemark{upper=naval}
+% & Naval
+% & N\\
+% \typemark{main=reconnaissance}
+% & Reconnaissance
+% & REC\\
+% \rowcolor{altcol}
+% \typemark{main={text=sof}}
+% & Special Operations Forces
+% & SOF\\
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & \multicolumn{2}{c|}{\color{headfg}\textbf{Echelon \& Abbreviation}}
+% \\
+% \hline
+% \sizemark{army group}
+% & Army group
+% & AG\\
+% \rowcolor{altcol}
+% \sizemark{army}
+% & Army
+% & A\\
+% \sizemark{corps}
+% & Corps
+% & -\\
+% \rowcolor{altcol}
+% \sizemark{division}
+% & Division
+% & D\\
+% \sizemark{brigade}
+% & Brigade
+% & BD\\
+% \rowcolor{altcol}
+% \sizemark{regiment}
+% & Regiment
+% & REGT\\
+% \sizemark{battalion}
+% & Battalion
+% & BN\\
+% \rowcolor{altcol}
+% \sizemark{company}
+% & Company
+% & COY\\
+% \sizemark{platoon}
+% & Platoon
+% & PLT\\
+% \rowcolor{altcol}
+% \sizemark{section}
+% & Section
+% & \\
+% \sizemark{squad}
+% & Squad
+% & \\
+% \hline
+% \end{tabular}
+% \caption{Some abbreviations of unit type identifications}
+% \label{tab:natoapp6c:abbr}
+% \end{table}
+%
+%
+% \ifShowSymbols
+% \subsection{Symbols Available}
+% \label{sec:natoapp:mains}
+%
+% \tablename~\ref{tab:natoapp6c:main:symbols} lists all the symbols
+% defined. Note, these do \emph{not} correspond to \emph{all} the
+% symbols defined in NATO APP-6(C) \cite{app6c}. However, using
+% combinations of these symbols one can construct \emph{all} of
+% those symbols (and so more if so desired).
+%
+% \ifShowCompat
+% See also
+% Appendix~\ref{app:natoapp6c:compat} for compatibility charts
+% between this library and \textsf{milsymb} \cite{milsymb}.
+% \fi
+%
+% {\makeatletter\SymbolTable{land}{\n@to@pp@s@ll}}
+% \fi
+%
+% \begin{thebibliography}{99}
+% \bibitem{fb} Hanover,C., Hendrix,C.E., \& Llewelyn,S.,
+% \textit{First Blood}, 1997, \url{https://grognard.com/fb/}
+% \bibitem{app6c} \textit{NATO Joint Military Symbology}, APP-6(C),
+% May 2011,
+% \url{https://en.wikipedia.org/wiki/NATO_Joint_Military_Symbology}.
+% \bibitem{app6d} \textit{NATO Joint Military Symbology}, APP-6(D),
+% October 2017,
+% \url{https://nso.nato.int/nso/nsdd/main/standards/ap-details/1912/EN}
+% \bibitem{milsymb} \textsf{milsymb} package,
+% \url{https://www.ctan.org/pkg/MilSymb}.
+% \end{thebibliography}
+%
+% \StopEventually{}
+%
+%
+% \iffalse
+% ====================================================================
+%
+% Implementation
+%
+% ====================================================================
+%
+% The wargame main package
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \section{Implementation}
+% \label{sec:impl}
+%
+% \input{package.dtx}
+% \input{util/core.dtx}
+% \input{hex/core.dtx}
+% \input{chit/core.dtx}
+% \input{natoapp6c/core.dtx}
+%
+% \appendix
+%
+% \iffalse
+% ====================================================================
+%
+% Appendices
+%
+% ====================================================================
+%
+% Compat tables
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \ifShowCompat
+% \section{Compatibility tables}
+% \label{app:natoapp6c:compat}
+%
+% The following tables provides compatibility with the the
+% \textsf{milsymb} package available from CTAN.
+%
+% \let\CompatSection\subsection
+% \let\CompatSubSection\subsubsection
+% \input{cmp_air}
+% \input{cmp_missile}
+% \input{cmp_land}
+% \input{cmp_equipment}
+% \input{cmp_installation}
+% \input{cmp_seasurface}
+% \input{cmp_subsurface}
+% \input{cmp_seamine}
+% \input{cmp_space}
+% \input{cmp_activity}
+% \fi
+%
+% \iffalse
+% ====================================================================
+%
+% Draft VASSAL module
+%
+% --------------------------------------------------------------------
+% \fi
+% \section{Generate draft VASSAL module}
+% \label{app:vassal}
+%
+% We can use the code you wrote for your game pieces (counters, maps,
+% tables), to generate a draft VASSAL module. To that end, use the
+% document class \textsf{wgexport}, and some simple macros to export
+% your graphics to a single PDF. A provided Python script then
+% processes this to generate the draft VASSAL module.
+%
+% The generated VASSAL module is not the final thing, but it is a good
+% start.
+%
+% \subsection{Example}
+%
+% Suppose we have defined counters and markers like
+% \begin{verbatim}
+% allied 1 id axis 1 ad out of supply
+% allied 2 ad axis 2 ad game turn
+% allied 3 abid axis 3 ic
+% \end{verbatim}
+% via Tikz styles. Also assume that we have macros
+% \begin{verbatim}
+% \board \oob \charts \front
+% \end{verbatim}
+% which produces \textsf{tikzpicture}s to the board, OOBs, charts, and
+% cover, respectively. All this is defined in our package
+% \texttt{mygame}. Of course that we have our rules in the file
+% \texttt{game.pdf}.
+%
+% We prepare a simple \LaTeX{} source file
+%
+% \begin{verbatim}
+% \documentclass{wgexport}
+% \usepackage{mygame}
+% \begin{document}
+% \begin{imagelist} %% Records image meta info
+% \chitimages{{%
+% {allied 1 id,allied 2 ad,allied 3 abid}/Allied,%
+% {axis 1 ad,axis 2 ad,axis 3 ic}/Axis,%
+% {out of supply, game turn}/Markers}}
+% \info{Board}{board}{} \board
+% \info{OOB}{oob}{} \oob
+% \info{Charts}{chart}{}\chart
+% \info{Cover}{front}{} \front
+% \end{imagelist}
+% \end{document}
+% \end{verbatim}
+%
+% When we run \LaTeX{} on this, we will get a PDF where each page is a
+% separate image and the page is cropped to image. \emph{In addition}
+% we will get a CSV (comma-separated-values) file \texttt{export.csv}
+% which contains some meta information about each page. In
+% particular, it identifies the name of each page, the category, and
+% sub category of the image.
+%
+% For chits, the name of the image is the style name (e.g., \texttt{game
+% turn}). For other images, it is the first argument to \cs{info}
+% above.
+%
+% The category is for chits is always \texttt{counter}. For other
+% images, it is the second argument to the \cs{info} macro (e.g.,
+% \texttt{board}).
+%
+% The category of an image is important later on when we generate the
+% VASSAL module. Recognised categories are
+%
+% \begin{itemize}
+% \item \texttt{counter} for counter images. Such an image will
+% trigger the creation of a VASSAL game piece.
+% \item \texttt{board} for board images. Images of this kind will
+% result in VASSAL board (or Map) elements.
+% \item \texttt{oob} for Order of Battle tables. This will also
+% result in a VASSAL map being created, but one that is displayed as
+% a pop-up and with a rectangular grid. This is useful for placing
+% units in an Order of Battle chart.
+% \item \texttt{chart} for charts. These images will be made VASSAL
+% charts --- i.e., pop-up windows which contains some graphics for the
+% players reference.
+% \item \texttt{front} for the cover image. This will become the
+% module splash image. Only one such image (the first) will be used.
+% \end{itemize}
+%
+% Other categories may be used, and the corresponding image will be
+% added to the VASSAL module. However, they will no be processed in
+% any specific way.
+%
+% The \emph{sub-category} is mainly used for counters. Above, we gave
+% the sub-categories \texttt{Allied}, \texttt{Axis}, and
+% \texttt{Markers}. The sub-categories will help to identify the
+% factions of the game, and counter prototypes will be made for each
+% category. The sub-categories of \texttt{board}, \texttt{charts},
+% \texttt{oob}, and \texttt{front} has no or little effect.
+%
+% One we have processed the file above to generate our PDF (Say
+% \texttt{export.pdf}), then we can process it (and the CSV file) with
+% a Python script to make our draft VASSAL module
+%
+% \begin{verbatim}
+% export.py export.pdf export.csv -o Game.vmod -t Game -v 0.1 \
+% -d "My game" -r rules.pdf
+% \end{verbatim}
+%
+% This will generate the draft module \texttt{Game.vmod}. Note that
+% we add the rules (\texttt{-r rules.pdf}) to the module so that the
+% module is complete.
+%
+% Once the module has been generated, one can open it in the VASSAL
+% editor and further customise it. For example, the grids used in
+% the boards needs to be adjusted, and one may want to make initial
+% set-ups or add all counters to the OOB.
+%
+% Of course, running the Python script will overwrite all changes, so
+% perhaps it is a good idea to work on a copy of the output file.
+%
+% \iffalse
+% This is the package used by the documentation
+%<*docsty>
+\ProvidesPackage{wgdoc}
+\DeclareOption{noterrainpic}{%
+ \PassOptionsToPackage{noterrainpic}{wargame}}
+\ProcessOptions\relax
+%
+\RequirePackage{etoolbox}
+\RequirePackage{wargame}
+\RequirePackage{longtable}
+\RequirePackage{colortbl}
+\RequirePackage{hyperref}
+\RequirePackage{textcomp}
+\RequirePackage{float}
+\RequirePackage[a4paper,right=1cm,left=2cm]{geometry}
+%
+\usetikzlibrary{external}
+\tikzexternalize[mode=graphics if exists,prefix=.cache-]
+%
+\newcommand\TikZ{{\mdseries Ti{\itshape k}Z}}
+\newcommand\sectionname{Section}
+\let\subsubsubsection\paragraph
+%
+\colorlet{headbg}{LightSlateGrey!50}
+\colorlet{headfg}{black}
+\colorlet{altcol}{LightSteelBlue!50}
+\newcommand\spec[1]{{\obeyspaces\ttfamily #1}}
+\newcommand\tspec[1]{{\ttfamily\footnotesize\obeyspaces #1}}
+\newcommand\keyval[2]{\spec{#1}=#2}
+%
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{1ex}
+\setlength\hfuzz{15pt}
+\hbadness=7000
+%
+\tikzset{
+ cc name/.pic={
+ \draw[fill=pgfstrokecolor,draw=none,even odd rule]
+ (0,0) circle(.5) circle(.41)
+ node[fill=none,transform shape,
+ font=\sffamily\bfseries\fontsize{16}{0}\selectfont] {cc}
+ ;
+ },
+ cc by/.pic={
+ \draw[fill=pgfstrokecolor,draw=none,even odd rule]
+ (0,0) circle(.5) circle(.41) (0,.26) circle(.07)
+ (0,.15)
+ --++(.11,0)
+ to[bend left] ++(.02,-.02)
+ --++(0,-.20)
+ --++(-.05,0)
+ --++(0,-.25)
+ --++(-.15,0)
+ --++(0,.25)
+ --++(-.05,0)
+ --++(0,.2)
+ to[bend left] ++(.02,.02)
+ --cycle
+ ;
+ },
+ cc sa/.pic={
+ \draw[fill=pgfstrokecolor,draw=none,even odd rule]
+ (0,0) circle(.5) circle(.41)
+ (-.22,-.08)
+ to[bend right=40] ++(.23,-.20)
+ to[bend right=40] ++(.23, .20)
+ to[bend right=10] ++(0, .16)
+ to[bend right=40] ++(-.23, .20)
+ to[bend right=40] ++(-.23, -.20)
+ --++(-.05,0)
+ --++(-45:.15)
+ --++( 45:.15)
+ --++(-.05,0)
+ to[bend left=40] ++(.12, .1)
+ to[bend left=40] ++(.12, -.1)
+ to[bend left=10] ++(0, -.16)
+ to[bend left=40] ++(-.12, -.1)
+ to[bend left=40] ++(-.12, .1)
+ --cycle
+ ;
+ },
+ cc by sa/.pic={
+ \pic at(-1,0) {cc name};
+ \pic at( 0,0) {cc by};
+ \pic at( 1,0) {cc sa};
+ }
+}
+
+%
+\newcommand\Continued[1]{\multicolumn{#1}{c}{%
+ \textit{\small continued from previous page}}\\}
+\newcommand\Continues[1]{\multicolumn{#1}{c}{%
+ \textit{\small continues on next page}}\\}
+\newcommand\SymbolTable[3][]{%
+ \setlength{\LTcapwidth}{\linewidth}
+ \def\tabledata{}
+ \foreach \m in #3{%
+ \protected@xappto\tabledata{\spec{\m}}
+ \foreach \f in {friendly,hostile,neutral,unknown}{%
+ \protected@xappto\tabledata{
+ &\noexpand\tikz[scale=.8]{%
+ \noexpand\natoapp[faction=\f,%
+ command=#2,%
+ main={\m},%
+ frame={faction},%
+ #1]}}}
+ \protected@xappto\tabledata{\\ \noexpand\hline}}
+ \def\colheaders{%
+ \hline%
+ & \multicolumn{4}{c|}{\meta{faction}}\\%
+ \meta{symbol}%
+ & \spec{friendly}%
+ & \spec{hostile}%
+ & \spec{neutral}%
+ & \spec{unknown}%
+ \\%
+ \hline}
+ \begin{longtable}{|l|
+ m{.1\linewidth}
+ m{.1\linewidth}
+ m{.1\linewidth}
+ m{.1\linewidth}|}
+ \caption{Symbols\label{tab:natoapp6c:main:symbols}}\\
+ \colheaders
+ \endfirsthead
+ \Continued{5}
+ \colheaders
+ \endhead
+ \Continues{5}
+ \endfoot
+ \endlastfoot
+ \tabledata
+ \end{longtable}
+}
+%
+\def\CompatSection#1{}
+\def\CompatSubSection#1{}
+\newcommand\CompatTable[3]{% command, where, list
+ \CompatSubSection{\spec{#2}}
+ \setlength{\LTcapwidth}{\linewidth}
+ \def\tabledata{}
+ \foreach \m/\s in #3{%
+ \n@to@pp@dbg{2}{Compatibility: `\m' -> `\s'}
+ \protected@xappto\tabledata{\tspec{\m} & \tspec{\s}}
+ \foreach \f in {{none,frame={draw=lightgray}},%
+ friendly,hostile,neutral,unknown}{%
+ \protected@xappto\tabledata{
+ &\noexpand\tikz[scale=.5]{%
+ \noexpand\natoapp[faction=\f,command=#1,\s,frame={faction}]}}}
+ \protected@xappto\tabledata{\\ \noexpand\hline}}
+ \def\colheaders{%
+ \hline%
+ &
+ & \multicolumn{5}{c|}{\meta{faction}}\\%
+ \textsf{milsymb}%
+ &\textsf{wargame}%
+ & \spec{none}%
+ & \spec{friendly}%
+ & \spec{hostile}%
+ & \spec{neutral}%
+ & \spec{unknown}%
+ \\%
+ \hline}
+ \begin{longtable}{|
+ m{.15\linewidth}|
+ m{.20\linewidth}|
+ m{.08\linewidth}
+ m{.08\linewidth}
+ m{.08\linewidth}
+ m{.08\linewidth}
+ m{.08\linewidth}|}
+ \caption{Compatibility with \textsf{milsymb} \spec{#1},\spec{#2}
+ symbols\label{tab:compat:#1:#2}}\\
+ \colheaders
+ \endfirsthead
+ \Continues{7}
+ \colheaders
+ \endhead
+ \Continues{7}
+ \endfoot
+ \endlastfoot
+ \tabledata
+ \end{longtable}
+}
+%
+\newenvironment{Syntax}{%
+ \par
+ \vspace{1ex}
+ \hspace*{-1cm}
+ \ttfamily
+ \begin{tabular}{|>{\columncolor{altcol}}p{.8\textwidth}|}
+ \hline}{\\\hline\end{tabular}\par\vskip 1ex}
+\def\MacroSyntax{%
+ \leavevmode\begingroup%
+ %\catcode`\\12
+ \MakePrivateLetters\M@croSyntax}
+\def\M@croSyntax#1{\endgroup%
+ \foreach \k in {#1}{\expandafter\Special@Usage@Index\k}
+ \Syntax}
+\let\endMacroSyntax\endSyntax
+%
+\@ifundefined{SpecialIndex@}{
+ \gdef\SpecialIndex@#1#2{%
+ \@SpecialIndexHelper@#1\@nil
+ \def\@tempb{ }%
+ \ifcat \@tempb\@gtempa
+ \special@index{\quotechar\space\actualchar
+ \string\verb\quotechar*\verbatimchar
+ \quotechar\bslash\quotechar\space\verbatimchar#2}%
+ \else
+ \def\@tempb##1##2\relax{\ifx\relax##2\relax
+ \def\@tempc{\special@index{\quotechar##1\actualchar
+ \string\verb\quotechar*\verbatimchar
+ \quotechar\bslash\quotechar##1\verbatimchar#2}}%
+ \else
+ \def\@tempc{\special@index{##1##2\actualchar
+ \string\verb\quotechar*\verbatimchar
+ \bslash##1##2\verbatimchar#2}}%
+ \fi}%
+ \expandafter\@tempb\@gtempa\relax
+ \@tempc
+ \fi}}{}
+%
+\def\Special@Usage@Index#1{\@bsphack
+ {\let\special@index\index\SpecialIndex@{#1}{}}%
+ \@esphack}
+%
+\def\Speci@lIndex#1#2#3#4{%
+ \@bsphack\special@index{%
+ #1\actualchar
+ {\string\ttfamily\space#1}
+ (#3)%
+ \encapchar main}%
+ \special@index{#4:\levelchar#2\actualchar{%
+ \string\ttfamily\space#2}\encapchar main}\@esphack}
+%
+\def\SpecialHexKeyIndex#1#2{\Speci@lIndex{#1}{#2}{key}{Hex keys}}
+\def\SpecialNatoSymbolIndex#1#2{%
+ \Speci@lIndex{#1}{#2}{symbol}{NATO App6(c) symbols}}
+\def\SpecialNatoFrameIndex#1#2{\Speci@lIndex{#1}{#2}{frame}{NATO App6(c) frame}}
+\def\SpecialNatoKeyIndex#1#2{\Speci@lIndex{#1}{#2}{key}{NATO App6(c) keys}}
+\def\SpecialKeyIndex#1{\Speci@lIndex{#1}{#1}{key}{TikZ keys}}
+%
+\def\get@third #1/#2/#3/{\gdef\curr@third{#3}}
+\def\get@second #1/#2/#3/{\gdef\curr@second{#2}}
+%
+\def\KeyT@ble#1#2{
+ \leavevmode
+ \par
+ \vspace{1ex}
+ \hspace*{-1cm}
+ \begin{tabular}{#1}
+ \hline
+ #2
+ \hline
+ \end{tabular}\par}
+%
+\def\ShowKeyT@ble#1{
+ \KeyT@ble{|p{.1\textwidth}|>{\columncolor{altcol}}p{.7\textwidth}|}{#1}}
+%
+\def\Macro{%
+ \begingroup%
+ \catcode`\\12
+ \MakePrivateLetters\M@cro}
+%
+\def\M@cro#1{%
+ \endgroup
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ \protected@xappto\tabledata{%
+ \noexpand\spec{\noexpand\string\k}\noexpand\SpecialMainIndex{\k}\\}}
+ \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\noexpand\tabledata}}
+\def\endMacro{}
+%
+\newenvironment{NatoAppSymbol}[1]{%
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ \expandafter\get@third\k/
+ \protected@xappto\tabledata{%
+ \noexpand\tikz[scale=.5]{\noexpand\natoapp[main=\curr@third,
+ faction=none,command=base,frame={draw=lightgray}]}
+ &\noexpand\spec{\k}
+ \noexpand\SpecialNatoSymbolIndex{\k}{\curr@third}\\}}
+ \ShowKeyT@ble{\tabledata}}{}
+\newenvironment{NatoAppFrame}[1]{%
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ %\expandafter\get@third\k/
+ %\expandafter\get@second\k/
+ \protected@xappto\tabledata{%
+ \noexpand\tikz[scale=.5]{\noexpand\node[shape=\k] {};}
+ &\noexpand\spec{\k}
+ \noexpand\SpecialNatoFrameIndex{\k}{\k}\\}}
+ \ShowKeyT@ble{\tabledata}}{}
+\newenvironment{NatoAppKey}[1]{%
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ \expandafter\get@second\k//
+ \protected@xappto\tabledata{%
+ \noexpand\spec{\k}\noexpand\SpecialNatoKeyIndex{\k}{\curr@second}\\}}
+ \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{}
+%
+\newenvironment{HexKey}[1]{%
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ \expandafter\get@second\k//
+ \protected@xappto\tabledata{%
+ \noexpand\spec{\k}\noexpand\SpecialHexKeyIndex{\k}{\curr@second}\\}}
+ \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{}
+\newenvironment{HexKey*}[1]{%
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ \expandafter\get@second\k/
+ \expandafter\get@third\k/
+ \protected@xappto\tabledata{%
+ \noexpand\spec{\k}\noexpand\SpecialHexKeyIndex{\k}{\curr@second/\curr@third}\\}}
+ \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{}
+%
+\newenvironment{TikzKey}[1]{%
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ \protected@xappto\tabledata{%
+ \noexpand\spec{\k}\noexpand\SpecialKeyIndex{\k}\\}}
+ \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{}
+%
+\tikzset{
+ pics/wg/x axis/.style args={#1,#2,#3,#4,#5}{
+ code={
+ \begin{scope}[/pgf/number format/.cd,fixed,precision=2]
+ \path[pic actions] (#1,#3)--(#2,#3)
+ \foreach \t in {#1,#2,#4}{
+ \ifx\t\@empty\else
+ (\t,#3)--++(0,-.2)
+ node[anchor=north]{$\pgfmathprintnumber{\t}$}\fi}
+ \foreach \t in {#5}{
+ \ifx\t\@empty\else
+ (\t,#3)--++(0,-.1)
+ node[anchor=north,font=\small]{$\pgfmathprintnumber{\t}$}\fi};
+ \end{scope}}},
+ pics/wg/y axis/.style args={#1,#2,#3,#4,#5}{
+ code={
+ \begin{scope}[/pgf/number format/.cd,fixed,precision=2]
+ \path[pic actions] (#1,#2)--(#1,#3)
+ \foreach \t in {#2,#3,#4}{
+ \ifx\t\@empty\else
+ (#1,\t)--++(.2,0)
+ node[anchor=west]{$\pgfmathprintnumber{\t}$}\fi}
+ \foreach \t in {#5}{
+ \ifx\t\@empty\else
+ (#1,\t)--++(.1,0)
+ node[anchor=west,font=\small]{$\pgfmathprintnumber{\t}$}\fi};
+ \end{scope}}},
+ pics/wg/xaxis/.style args={#1,#2,#3,#4}{%
+ code={
+ \pic[draw]{wg/x axis={-#1,#1,#2,#3,#4}};}},
+ pics/wg/yaxis/.style args={#1,#2,#3,#4}{%
+ code={
+ \pic[draw]{wg/y axis={#1,-#2,#2,#3,#4}};}},
+}
+%</docsty>
+%
+% \iffalse
+% --------------------------------------------------------------------
+%
+% Symbols documentation driver
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% Driver for symbols only document
+%<*symbols>
+\title{The \textsf{wargame} package\\
+ Symbols}
+\author{Christian Holm Christensen}
+\date{\today}
+\begin{document}
+\maketitle
+% \natoappdbglvl=3
+{\makeatletter\SymbolTable{land}{\n@to@pp@s@ll}}
+\end{document}
+%</symbols>
+%
+%
+%
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+%
+% Compatibility documentation driver
+%
+% --------------------------------------------------------------------
+% \fi
+%
+%
+%<*compat>
+% Driver for compatibility only document
+\title{The \textsf{wargame} package\\
+ \textsf{milsymb} Compatibility}
+\author{Christian Holm Christensen}
+\date{\today}
+\begin{document}
+\newgeometry{margin=1cm}
+\maketitle
+% \natoappdbglvl=1
+\let\CompatSection\section
+\let\CompatSubSection\subsection
+\input{cmp_air}
+\input{cmp_missile}
+\input{cmp_land}
+\input{cmp_equipment}
+\input{cmp_installation}
+\input{cmp_seasurface}
+\input{cmp_subsurface}
+\input{cmp_seamine}
+\input{cmp_space}
+\input{cmp_activity}
+\restoregeometry
+\end{document}
+%</compat>
+% \fi
+%
+% \PrintIndex
+% \Finale
+%
+%
+%
+% \iffalse
+% EOF
+% Local Variables:
+% TeX-command-extra-options: "-shell-escape"
+% End:
+% \fi
diff --git a/macros/latex/contrib/wargame/source/wargame.ins b/macros/latex/contrib/wargame/source/wargame.ins
new file mode 100644
index 0000000000..0ab9ec5a74
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/wargame.ins
@@ -0,0 +1,176 @@
+%% This is file `wargame.ins', the installation file for the
+%% `wargame' package.
+%%
+%% Copyright (C) 2019 Christian Holm.
+%%
+%% The wargame package is free software; you can redistribute it
+%% and/or modify it under the terms of the GNU General Public License
+%% as published by the Free Software Foundation; either version 2 of
+%% the License, or (at your option) any later version.
+%%
+%% The universal package is distributed in the hope that it will be
+%% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+%% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%% GNU General Public License for more details.
+%%
+%% You should have received a copy of the GNU General Public License
+%% along with this package; if not, write to the Free Software
+%% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+%%
+
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\declarepreamble\long
+
+Copyright (C) 2019 Christian Holm.
+
+This file is NOT the source for wargame, because almost all comments
+have been stripped from it. It is NOT the preferred form of universal
+for making modifications to it.
+
+Therefore you can NOT redistribute and/or modify THIS file. You can
+however redistribute the complete source (wargame.dtx and wargame.ins)
+and/or modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version 2, or (at
+your option) any later version.
+
+The wargame package is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this package; if not, write to the
+ Free Software Foundation, Inc.,
+ 675 Mass Ave, Cambridge,
+ MA 02139, USA.
+
+See the file wargame.dtx for further comments and documentation.
+
+\endpreamble
+
+\declarepreamble\short
+
+Copyright (C) 2019 Christian Holm.
+
+The wargame package is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+See the file wargame.dtx for further comments and documentation.
+
+\endpreamble
+
+\postamble
+Local Variables:
+ mode: LaTeX
+End:
+\endpostamble
+
+\usepreamble\long
+\usedir{tex/latex/wargame}
+\Msg{***********************************************************}
+\Msg{* Generating LaTeX files}
+\Msg{***********************************************************}
+\generate{%
+ \file{wargame.sty} {\from{package.dtx}{package}}
+ \file{wgdoc.sty} {\from{wargame.dtx}{docsty}}
+ \file{compat.tex} {\from{wargame.dtx}{driver,compat}}
+ \file{symbols.tex} {\from{wargame.dtx}{driver,symbols}}
+ %
+ \file{tikzlibrarywargame.util.code.tex}{%
+ \from{util/core.dtx}{utils}}
+ %
+ \file{wgexport.cls}{%
+ \from{util/core.dtx}{exportcls}}
+ %
+ \file{tikzlibrarywargame.hex.code.tex}{
+ \from{hex/core.dtx} {hex}
+ \from{hex/coord.dtx} {hex}
+ \from{hex/shape.dtx} {hex}
+ \from{hex/terrain.dtx} {hex}
+ \from{hex/terrain/beach.dtx} {hex}
+ \from{hex/terrain/light_woods.dtx}{hex}
+ \from{hex/terrain/woods.dtx} {hex}
+ \from{hex/terrain/swamp.dtx} {hex}
+ \from{hex/terrain/rough.dtx} {hex}
+ \from{hex/terrain/mountains.dtx} {hex}
+ \from{hex/terrain/village.dtx} {hex}
+ \from{hex/terrain/town.dtx} {hex}
+ \from{hex/terrain/city.dtx} {hex}
+ \from{hex/terrain/mountain.dtx} {hex}
+ \from{hex/terrain/tree.dtx} {hex}
+ \from{hex/ridges.dtx} {hex}
+ \from{hex/towns.dtx} {hex}
+ \from{hex/labels.dtx} {hex}
+ \from{hex/extra.dtx} {hex}
+ \from{hex/paths.dtx} {hex}
+ \from{hex/board.dtx} {hex}}
+ %
+ \file{tikzlibrarywargame.natoapp6c.code.tex}{
+ \from{natoapp6c/core.dtx} {natoapp6c}
+ \from{natoapp6c/frames/base.dtx} {natoapp6c}
+ \from{natoapp6c/frames/friendly.dtx}{natoapp6c}
+ \from{natoapp6c/frames/hostile.dtx} {natoapp6c}
+ \from{natoapp6c/frames/neutral.dtx} {natoapp6c}
+ \from{natoapp6c/frames/unknown.dtx} {natoapp6c}
+ \from{natoapp6c/echelon.dtx} {natoapp6c}
+ \from{natoapp6c/text.dtx} {natoapp6c}
+ \from{natoapp6c/shape.dtx} {natoapp6c}
+ \from{natoapp6c/util.dtx} {natoapp6c}
+ \from{natoapp6c/weaponry.dtx} {natoapp6c}
+ \from{natoapp6c/symbols.dtx} {natoapp6c}
+ \from{natoapp6c/list.dtx} {natoapp6c}}
+ %
+ \file{tikzlibrarywargame.chit.code.tex}{
+ \from{chit/core.dtx} {chit}
+ \from{chit/shape.dtx} {chit}
+ \from{chit/elements.dtx}{chit}
+ \from{chit/misc.dtx} {chit}}
+ %
+ \file{beach.tex} {\from{hex/tile.dtx}{tile,beach}}
+ \file{city.tex} {\from{hex/tile.dtx}{tile,city}}
+ \file{light_woods.tex}{\from{hex/tile.dtx}{tile,lightwoods}}
+ \file{mountains.tex} {\from{hex/tile.dtx}{tile,mountains}}
+ \file{rough.tex} {\from{hex/tile.dtx}{tile,rough}}
+ \file{swamp.tex} {\from{hex/tile.dtx}{tile,swamp}}
+ \file{town.tex} {\from{hex/tile.dtx}{tile,town}}
+ \file{village.tex} {\from{hex/tile.dtx}{tile,village}}
+ \file{woods.tex} {\from{hex/tile.dtx}{tile,woods}}
+ %
+ \file{testmap.tex} {\from{tests/map.dtx}{testmap}}
+ \file{testchits.tex} {\from{tests/chits.dtx}{testchits}}
+ %
+ \file{cmp_air.tex} {\from{natoapp6c/compat/air.dtx} {cmp}}
+ \file{cmp_missile.tex} {\from{natoapp6c/compat/missile.dtx} {cmp}}
+ \file{cmp_land.tex} {\from{natoapp6c/compat/land.dtx} {cmp}}
+ \file{cmp_equipment.tex} {\from{natoapp6c/compat/equipment.dtx} {cmp}}
+ \file{cmp_installation.tex}{\from{natoapp6c/compat/installation.dtx}{cmp}}
+ \file{cmp_seasurface.tex} {\from{natoapp6c/compat/seasurface.dtx} {cmp}}
+ \file{cmp_subsurface.tex} {\from{natoapp6c/compat/subsurface.dtx} {cmp}}
+ \file{cmp_seamine.tex} {\from{natoapp6c/compat/seamine.dtx} {cmp}}
+ \file{cmp_space.tex} {\from{natoapp6c/compat/space.dtx} {cmp}}
+ \file{cmp_activity.tex} {\from{natoapp6c/compat/activity.dtx} {cmp}}
+ %
+}
+
+\Msg{***********************************************************}
+\Msg{* To finish the installation you have to move the files}
+\Msg{* `wargame.sty' `*.code.tex' into a directory searched by TeX.}
+\Msg{*}
+\Msg{* To produce the documentation do:}
+\Msg{*\space\space latex wargame.dtx}
+\Msg{*\space\space latex wargame.dtx}
+\Msg{*\space\space makeindex -s gind -o wargame.ind wargame.idx}
+\Msg{*\space\space makeindex -s gglo -o wargame.gls wargame.glo}
+\Msg{*\space\space latex wargame.dtx}
+\Msg{*\space\space latex wargame.dtx}
+\Msg{* or whatever appropiate for your system.}
+\Msg{***********************************************************}
+\endbatchfile
+
+%% Local Variables:
+%% mode: docTeX
+%% End: \ No newline at end of file