texlive[64522] Master: wargame (26sep22)

commits+karl at tug.org commits+karl at tug.org
Mon Sep 26 23:48:39 CEST 2022


Revision: 64522
          http://tug.org/svn/texlive?view=revision&revision=64522
Author:   karl
Date:     2022-09-26 23:48:39 +0200 (Mon, 26 Sep 2022)
Log Message:
-----------
wargame (26sep22)

Modified Paths:
--------------
    trunk/Master/tlpkg/bin/tlpkg-ctan-check
    trunk/Master/tlpkg/tlpsrc/collection-games.tlpsrc

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/wargame/
    trunk/Master/texmf-dist/doc/latex/wargame/README.md
    trunk/Master/texmf-dist/doc/latex/wargame/compat.pdf
    trunk/Master/texmf-dist/doc/latex/wargame/symbols.pdf
    trunk/Master/texmf-dist/doc/latex/wargame/tutorial/
    trunk/Master/texmf-dist/doc/latex/wargame/tutorial/Makefile
    trunk/Master/texmf-dist/doc/latex/wargame/tutorial/README.md
    trunk/Master/texmf-dist/doc/latex/wargame/tutorial/export.tex
    trunk/Master/texmf-dist/doc/latex/wargame/tutorial/game.pdf
    trunk/Master/texmf-dist/doc/latex/wargame/tutorial/game.sty
    trunk/Master/texmf-dist/doc/latex/wargame/tutorial/game.tex
    trunk/Master/texmf-dist/doc/latex/wargame/tutorial/patch.py
    trunk/Master/texmf-dist/doc/latex/wargame/wargame.pdf
    trunk/Master/texmf-dist/source/latex/wargame/
    trunk/Master/texmf-dist/source/latex/wargame/Makefile
    trunk/Master/texmf-dist/source/latex/wargame/chit/
    trunk/Master/texmf-dist/source/latex/wargame/chit/core.dtx
    trunk/Master/texmf-dist/source/latex/wargame/chit/elements.dtx
    trunk/Master/texmf-dist/source/latex/wargame/chit/misc.dtx
    trunk/Master/texmf-dist/source/latex/wargame/chit/shape.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/
    trunk/Master/texmf-dist/source/latex/wargame/hex/board.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/coord.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/core.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/extra.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/labels.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/paths.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/ridges.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/shape.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/
    trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/beach.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/city.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/light_woods.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/mountain.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/mountains.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/rough.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/swamp.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/town.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/tree.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/village.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/woods.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/terrain.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/tile.dtx
    trunk/Master/texmf-dist/source/latex/wargame/hex/towns.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/activity.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/air.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/equipment.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/installation.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/land.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/missile.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/seamine.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/seasurface.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/space.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/subsurface.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/core.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/echelon.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/base.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/friendly.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/hostile.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/neutral.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/unknown.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/list.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/shape.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/symbols.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/text.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/util.dtx
    trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/weaponry.dtx
    trunk/Master/texmf-dist/source/latex/wargame/package.dtx
    trunk/Master/texmf-dist/source/latex/wargame/tests/
    trunk/Master/texmf-dist/source/latex/wargame/tests/chits.dtx
    trunk/Master/texmf-dist/source/latex/wargame/tests/map.dtx
    trunk/Master/texmf-dist/source/latex/wargame/tests/test.tex
    trunk/Master/texmf-dist/source/latex/wargame/util/
    trunk/Master/texmf-dist/source/latex/wargame/util/core.dtx
    trunk/Master/texmf-dist/source/latex/wargame/utils/
    trunk/Master/texmf-dist/source/latex/wargame/utils/wgexport.py
    trunk/Master/texmf-dist/source/latex/wargame/utils/wgsvg2tikz.py
    trunk/Master/texmf-dist/source/latex/wargame/wargame.dtx
    trunk/Master/texmf-dist/source/latex/wargame/wargame.ins
    trunk/Master/texmf-dist/tex/latex/wargame/
    trunk/Master/texmf-dist/tex/latex/wargame/tikzlibrarywargame.chit.code.tex
    trunk/Master/texmf-dist/tex/latex/wargame/tikzlibrarywargame.hex.code.tex
    trunk/Master/texmf-dist/tex/latex/wargame/tikzlibrarywargame.natoapp6c.code.tex
    trunk/Master/texmf-dist/tex/latex/wargame/tikzlibrarywargame.util.code.tex
    trunk/Master/texmf-dist/tex/latex/wargame/wargame.beach.pdf
    trunk/Master/texmf-dist/tex/latex/wargame/wargame.city.pdf
    trunk/Master/texmf-dist/tex/latex/wargame/wargame.light_woods.pdf
    trunk/Master/texmf-dist/tex/latex/wargame/wargame.mountains.pdf
    trunk/Master/texmf-dist/tex/latex/wargame/wargame.rough.pdf
    trunk/Master/texmf-dist/tex/latex/wargame/wargame.sty
    trunk/Master/texmf-dist/tex/latex/wargame/wargame.swamp.pdf
    trunk/Master/texmf-dist/tex/latex/wargame/wargame.town.pdf
    trunk/Master/texmf-dist/tex/latex/wargame/wargame.village.pdf
    trunk/Master/texmf-dist/tex/latex/wargame/wargame.woods.pdf
    trunk/Master/texmf-dist/tex/latex/wargame/wgexport.cls
    trunk/Master/texmf-dist/tex/latex/wargame/wgexport.py
    trunk/Master/texmf-dist/tex/latex/wargame/wgsvg2tikz.py
    trunk/Master/tlpkg/tlpsrc/wargame.tlpsrc

Added: trunk/Master/texmf-dist/doc/latex/wargame/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/wargame/README.md	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/wargame/README.md	2022-09-26 21:48:39 UTC (rev 64522)
@@ -0,0 +1,304 @@
+A package to make Hex'n'Counter wargames in LaTeX
+=================================================
+
+Version 0.3.2
+-------------
+
+This package can help make classic [Hex'n'Counter
+wargames](https://en.wikipedia.org/wiki/Wargame) 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 "Section below") symbology
+    for units.
+-   The package uses [TikZ](https://github.com/pgf-tikz/pgf) for most
+    things.
+-   The package support exporting the game to a
+    [VASSAL](#vassal-support%20'Section%20below') module
+
+Sources
+-------
+
+The sources of the package are kept at
+[GitLab](https://gitlab.com/wargames_tex/wargame_tex)
+
+Download from GitLab
+--------------------
+
+-   [Zip file of package and support
+    files](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/download?job=dist)
+-   [Browse content of
+    package](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/browse?job=dist)
+-   [Documentation](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/wargame.pdf?job=dist)
+-   [Tutorial](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/tutorial.pdf?job=dist)
+    (and associated VASSAL
+    [module](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/Game.vmod?job=dist))
+-   [Table of
+    symbols](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/symbols.pdf?job=dist)
+-   [Compatibility](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/compat.pdf?job=dist)
+
+To install, get the ([zip
+file](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/download?job=dist))
+and unzip into your TeX tree, for example
+
+    mkdir -p ~/texmf
+    (cd ~/texmf && unzip ../artifacts.zip)
+
+on Un\*x like systems.
+
+If you clone from GitLab
+(`git clone https://gitlab.com/wargames_tex/wargame_tex.git`) to get the
+sources, then you can do
+
+    cd wargame
+    make install 
+
+to install in `~/texmf`. If you prefer another destination, say
+`/usr/local/share/texmf`, do
+
+    make install DESTDIR=/usr/local/share/texmf
+
+Download from CTAN
+------------------
+
+The package is available from
+[CTAN](https://ctan.org/tex-archive/macros/latex/contrib/wargame) in the
+directory `/macros/latex/contrib/wargame`. As of this writing, the
+package has not hit any of the major distributions (e.g.,
+[TeXLive](https://tug.org/texlive/index.html)).
+
+### From TDS zip archive
+
+You can get the *TDS* [zip
+file](https://mirrors.ctan.org/install/macros/latex/contrib/wargame.tds.zip)
+and unpack that into your desired destination, e.g., `~/texmf`
+
+    unzip wargame.tds.zip -d ~/texmf
+
+### From sources
+
+If you get the source (`wargame.ins`, all `.dtx`,`.py`, and `Makefile`)
+files, then do
+
+    make install 
+
+to install into `~/texmf`. If you prefer to install somewhere else, say
+`/usr/local/share/texmf`, then do
+
+    make install DESTDIR=/usr/local/share/texmf 
+
+If you do not have `make` (or `gmake` on MacOSX), or because you are on
+some system which does not have that tool (e.g., Windows), then do (the
+equivalent of)
+
+    latex wargame.ins
+    pdflatex wargame.beach
+    pdflatex wargame.city
+    pdflatex wargame.light_woods
+    pdflatex wargame.mountains
+    pdflatex wargame.rough
+    pdflatex wargame.swamp
+    pdflatex wargame.town
+    pdflatex wargame.village
+    pdflatex wargame.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 wgexport.cls             ~/texmf/tex/latex/wargame/
+    cp wargame.*.pdf            ~/texmf/tex/latex/wargame/
+    cp wgexport.py              ~/texmf/tex/latex/wargame/
+    cp wgsvg2tikz.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 
+    make 
+
+or
+
+    cd tutorial
+    pdflatex game
+    pdflatex game 
+
+If you also want to make the tutorial VASSAL module, do (also in
+`tutorial`), do
+
+    pdflatex export.tex 
+    ../wgexport.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
+        
+
+Note, you need `pdfinfo` and `pdftocairo` from Poppler, and Python with
+the module `PIL` for this. On Debian based systems, do
+
+    sudo apt install poppler-utils python3-pil
+
+Tutorial
+--------
+
+See the [tutorial](tutorial/README.md "Link works on GitLab only") page
+for more
+([here](https://ctan.org/tex-archive/macros/latex/contrib/wargame/doc/tutorial/)
+if you browse from CTAN).
+
+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](https://gitlab.com/wargames_tex/bfm_tex)
+            (classic introductory game)
+    -   Western Front
+        -   [D-Day](https://gitlab.com/wargames_tex/dday_tex) (Avalon
+            Hill classic)
+        -   [Paul Koenig's Market
+            Garden](https://gitlab.com/wargames_tex/pkmg_tex)
+        -   [Paul Koenig's
+            D-Day](https://gitlab.com/wargames_tex/pkdday_tex)
+    -   Pacific theatre
+        -   [First
+            Blood](https://gitlab.com/wargames_tex/firstblood_tex)
+            (Avalon Hill International Kriegspiel Association classic)
+    -   Africa
+        -   [Afrika
+            Korps](https://gitlab.com/wargames_tex/afrikakorps_tex)
+            (Avalon Hill classic)
+-   Modern/Speculative
+    -   [Strike Force One](https://gitlab.com/wargames_tex/sfo_tex)
+    -   [Kriegspiel](https://gitlab.com/wargames_tex/kriegspiel_tex)
+        (Avalon Hill classic)
+
+VASSAL support
+--------------
+
+The packages has the script [`wgexport.py`](utils/wgexport.py) to
+generate a draft [VASSAL](https://vassalengine.org) 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](https://gitlab.com/wargames_tex/bfm_tex) project, and of course
+in the [tutorial](tutorial/ "Link works on GitLab only")
+
+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](https://en.wikipedia.org/wiki/NATO_Joint_Military_Symbology)
+    on NATO Joint Military Symbology
+-   The [NATO
+    page](https://nso.nato.int/nso/nsdd/main/standards/ap-details/1912/EN).
+    If this does not work for you, then try to go to the [standards
+    page](https://nso.nato.int/nso/nsdd/main/standards) 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](https://github.com/ralphieraccoon/MilSymb)
+
+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](http://creativecommons.org/licenses/by-sa/4.0/) 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](https://boardgamegeek.com/thread/493249/)). 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](https://en.wikipedia.org/wiki/SNAFU). If in doubt, seek
+professional help.


Property changes on: trunk/Master/texmf-dist/doc/latex/wargame/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/wargame/compat.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/wargame/compat.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/wargame/compat.pdf	2022-09-26 20:31:16 UTC (rev 64521)
+++ trunk/Master/texmf-dist/doc/latex/wargame/compat.pdf	2022-09-26 21:48:39 UTC (rev 64522)

Property changes on: trunk/Master/texmf-dist/doc/latex/wargame/compat.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/wargame/symbols.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/wargame/symbols.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/wargame/symbols.pdf	2022-09-26 20:31:16 UTC (rev 64521)
+++ trunk/Master/texmf-dist/doc/latex/wargame/symbols.pdf	2022-09-26 21:48:39 UTC (rev 64522)

Property changes on: trunk/Master/texmf-dist/doc/latex/wargame/symbols.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/wargame/tutorial/Makefile
===================================================================
--- trunk/Master/texmf-dist/doc/latex/wargame/tutorial/Makefile	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/wargame/tutorial/Makefile	2022-09-26 21:48:39 UTC (rev 64522)
@@ -0,0 +1,51 @@
+#
+#
+#
+LATEX		:= pdflatex
+LATEX_FLAGS	:= -interaction=nonstopmode 	\
+		   -file-line-error		\
+		   --synctex=15			\
+		   -shell-escape
+EXPORT		:= ../utils/wgexport.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__ 


Property changes on: trunk/Master/texmf-dist/doc/latex/wargame/tutorial/Makefile
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/wargame/tutorial/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/wargame/tutorial/README.md	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/wargame/tutorial/README.md	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 wgexport.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
+
+


Property changes on: trunk/Master/texmf-dist/doc/latex/wargame/tutorial/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/wargame/tutorial/export.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/wargame/tutorial/export.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/wargame/tutorial/export.tex	2022-09-26 21:48:39 UTC (rev 64522)
@@ -0,0 +1,384 @@
+% \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{wgexport.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{wgexport.py} script used the \emph{undo} mage
+% 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{wgexport.py} Python script to get the draft VASSAL module
+% \texttt{Draft.vmod}.
+%
+% \begin{verbatim}
+% `kpsewhich wgexport.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 wgexport.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 wgexport.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{wgexport.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{wgexport.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 wgexport.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 wgexport as wg
+% 
+%     # Get the game and last free GPID
+%     game = wg.get_game(build)
+%     gpid = int(game.getAttribute('nextPieceSlotId'))
+% 
+%     # Get all boards 
+%     maps = wg.get_maps(build)
+%     board = maps['Board']
+% 
+%     mkeys = wg.get_masskey(board,'name')
+%     wg.set_node_attr(mkeys['Eliminate'],icon='eliminate-icon.png')
+%     wg.set_node_attr(mkeys['Flip'],icon='flip-icon.png')
+%     
+%     # Get main map
+%     pool = maps['DeadMap']
+%     wg.set_node_attr(pool,icon='pool-icon.png')
+% 
+%     mkeys = wg.get_masskey(pool,'name')
+%     wg.set_node_attr(mkeys['Restore'],icon='restore-icon.png')
+%     
+%     # Get the OOB map
+%     oob = wg.get_chartwindows(game)['OOBs']
+%     wg.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{wgexport.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


Property changes on: trunk/Master/texmf-dist/doc/latex/wargame/tutorial/export.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/wargame/tutorial/game.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/wargame/tutorial/game.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/wargame/tutorial/game.pdf	2022-09-26 20:31:16 UTC (rev 64521)
+++ trunk/Master/texmf-dist/doc/latex/wargame/tutorial/game.pdf	2022-09-26 21:48:39 UTC (rev 64522)

Property changes on: trunk/Master/texmf-dist/doc/latex/wargame/tutorial/game.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/wargame/tutorial/game.sty
===================================================================
--- trunk/Master/texmf-dist/doc/latex/wargame/tutorial/game.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/wargame/tutorial/game.sty	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at clip@a{#2}
+  \def\tmp at 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 at clip@a)
+    rectangle (\tmp at 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


Property changes on: trunk/Master/texmf-dist/doc/latex/wargame/tutorial/game.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/wargame/tutorial/game.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/wargame/tutorial/game.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/wargame/tutorial/game.tex	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at 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 at 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:


Property changes on: trunk/Master/texmf-dist/doc/latex/wargame/tutorial/game.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/wargame/tutorial/patch.py
===================================================================
--- trunk/Master/texmf-dist/doc/latex/wargame/tutorial/patch.py	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/wargame/tutorial/patch.py	2022-09-26 21:48:39 UTC (rev 64522)
@@ -0,0 +1,31 @@
+def patch(build,data,vmod,verbose=False):
+    # We need to import the export module :-)
+    import wgexport as wg
+
+    # Get the game and last free GPID
+    game = wg.get_game(build)
+    gpid = int(game.getAttribute('nextPieceSlotId'))
+
+    # Get all boards 
+    maps = wg.get_maps(build)
+    board = maps['Board']
+
+    mkeys = wg.get_masskey(board,'name')
+    wg.set_node_attr(mkeys['Eliminate'],icon='eliminate-icon.png')
+    wg.set_node_attr(mkeys['Flip'],icon='flip-icon.png')
+    
+    # Get main map
+    pool = maps['DeadMap']
+    wg.set_node_attr(pool,icon='pool-icon.png')
+
+    mkeys = wg.get_masskey(pool,'name')
+    wg.set_node_attr(mkeys['Restore'],icon='restore-icon.png')
+    
+    # Get the OOB map
+    oob = wg.get_chartwindows(game)['OOBs']
+    wg.set_node_attr(oob,icon='oob-icon.png')
+    
+    
+
+   
+    


Property changes on: trunk/Master/texmf-dist/doc/latex/wargame/tutorial/patch.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/wargame/wargame.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/wargame/wargame.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/wargame/wargame.pdf	2022-09-26 20:31:16 UTC (rev 64521)
+++ trunk/Master/texmf-dist/doc/latex/wargame/wargame.pdf	2022-09-26 21:48:39 UTC (rev 64522)

Property changes on: trunk/Master/texmf-dist/doc/latex/wargame/wargame.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/Makefile
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/Makefile	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/Makefile	2022-09-26 21:48:39 UTC (rev 64522)
@@ -0,0 +1,336 @@
+#
+#
+#
+NAME		:= wargame
+VERSION		:= 0.3
+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/wgsvg2tikz.py utils/wgexport.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
+TILES_PDF	:= $(TILES:%=wargame.%.pdf)
+TILES_TEX	:= $(TILES:%=wargame.%.tex)
+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)/' \
+		< $< | pandoc --to markdown > $@
+
+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 pandoc zip \
+		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
+#


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/Makefile
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/chit/core.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/chit/core.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/chit/core.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at 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 at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/chit/core.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/chit/elements.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/chit/elements.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/chit/elements.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at 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 at 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 at 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 at 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 at 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 at dbg{4}{  Chit identifier: `#1'}% 
+    \node[chit/identifier,pic actions]{#1};
+  },
+  chit/small identifier/.pic={
+    \chit at dbg{4}{  Chit small identifier: `#1'}% 
+    \node[chit/small identifier,pic actions]{#1};
+  },
+  chit/identifier macro/.pic={%
+    \chit at dbg{4}{ Chit identifier macro: \meaning#1}
+    \edef\chit at i@tmp{#1}
+    \node[chit/identifier,pic actions]{\chit at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/chit/elements.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/chit/misc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/chit/misc.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/chit/misc.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -0,0 +1,461 @@
+% \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 at stack@dir,
+  chit/stack direction/.initial={(.3,.3)},
+}
+%    \end{macrocode}
+%
+% Now the code 
+%
+%    \begin{macrocode}
+\def\chit at stack@dir{(.3,.3)}
+\def\stackchits(#1){%
+  \@ifnextchar({\st at ckchits{#1}}{\st at ckchits{#1}(.3,.3)}%)
+}
+\def\st at ckchits#1(#2)#3{
+  \chit at dbg{2}{Stacking chits `#1', `#2', `#3'}
+  \edef\xy{#1}
+  \chit at dbg{4}{Stack start at \xy}
+  \foreach[count=\i from 0] \c/\o in {#3} {%
+    \ifx\c\empty\else%
+      \edef\ccc{\c}
+      \chit at dbg{2}{Adding \meaning\ccc\space to stack at (\xy)' `\o'}
+      \expandafter\ccc(\xy)
+      %%
+      \ifx\c\o\else
+        %\chit at 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 at oob@cellupdate(#1,#2)#3#4#5{%
+  \edef\f{\ifwg at oob@inv-1\else1\fi}%
+  \chit at 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 at 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 at oob@rowupdate(#1,#2)#3#4{%
+  \chit at 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 at dbg{2}{ \space\space-> update `\string#2'=#2}
+}
+%    \end{macrocode}
+% current c, current r,  cell size, extra spacing
+%
+%    \begin{macrocode}
+\def\chit at oob@turnupdate(#1,#2)#3#4{%
+  \chit at 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 at 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 at oob@inv\wg at oob@invfalse
+\def\wg at star@oob{\wg at oob@invtrue\wg at oob}
+\def\wg at nostar@oob{\wg at oob@invfalse\wg at oob}
+\def\oob{%
+  \@ifstar{\wg at star@oob%
+  }{\wg at nostar@oob%
+  }%
+}
+\def\wg at oob#1#2#3#4{
+  \def\r{0}
+  \chit at 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 at dbg{1}{Turn \ti\space(\r,\t,y=\y):'}
+    \ifwg at 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 at 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 at blank\else
+              \chit[\u=\ti,zone oob point={\u}{\c}{\r}](\c,\r);
+            \fi
+            \chit at oob@cellupdate(\c,\r){#2}{#3}{\y}
+          }
+        \fi
+      }
+    \fi
+    \chit at 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 at oob@turnupdate increments the row 
+    \ifx\t\@empty
+      \def\c{#3}
+      \chit at dbg{2}{ Turn is empty, set c=`\c'}
+    \fi
+    %\ifnum\y<0% No explicit number of rows given
+    %  \def\c{#3}
+    %  \chit at 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 at 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 at dbg{2}{ \space Breaking loop \rr\space > \y}%
+        %  \breakforeach%
+        %\else%
+          \chit at 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 at oob@turnupdate(\c,\r){#3}{#4}
+    \chit at dbg{1}{End of turn \ti\space(c=`\c',r=`\r',o='\o',y='\y')} 
+  }
+  \chit at 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 at blank{blank chit}
+\def\chit at cellbg(#1,#2)#3{%
+  \draw[chit/cell background](#1-#3/2,#2-#3/2) rectangle++(#3,#3);
+}
+%    \end{macrocode}
+% 
+% \begin{Macro}{\ifchits at 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 at reset\chits at resettrue
+%    \end{macrocode}
+% \end{Macro}
+% 
+% \begin{Macro}{\chits,\@chits,\chit at sng@cellupdate}
+%    \begin{macrocode}
+\def\chit at sng@cellupdate(#1,#2)#3#4{%
+  \chit at 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 at resetfalse\@chits}{\chits at resettrue\@chits}}
+%    \end{macrocode}
+% 
+%    \begin{macrocode}
+\def\@chits#1#2#3{
+  \ifchits at reset
+    \def\r{0}%
+    \def\c{0}%
+  \fi
+  \chit at dbg{1}{Chits to make: #1}%
+  \foreach[count=\ti from 0] \t/\x in #1{%
+    \chit at dbg{2}{Turn `\t' with option `\x'}
+    \ifx\t\empty\else%
+      \foreach \u/\m in \t{%
+        \ifx\u\empty\else%
+          \chit at dbg{2}{Next chit `\u' with possible multiplicity `\m'}%
+          \ifx\m\@empty\def\m{1}\fi%
+          \ifx\u\m\def\m{1}\fi%
+          \chit at dbg{2}{Next chit `\u' multiplicity `\m'}%
+          \foreach \n in {1,...,\m}{%
+            \ifx\u\chit at blank%
+              \chit at dbg{3}{Ignoring blank chit:\u}%
+            \else%
+              \chit at cellbg(\c,\r){#3}%
+              \chit[\u=\ti](\c,\r)%
+              \chit at sng@cellupdate(\c,\r){#2}{#3}%
+            \fi%
+          }%
+        \fi%
+      }%
+    \fi%
+  }%
+}
+%    \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\doublechits,
+%   \@doublechits,
+%   \chit at dbl@cellupdate,
+%   \chit at dbl@flip}
+% \begin{enumerate}
+% \item coordinates
+% \item coordinates
+% \item cell-size
+% \end{enumerate}
+% 
+%    \begin{macrocode}
+\def\chit at 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 at 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 at resetfalse\@doublechits}{\chits at resettrue\@doublechits}}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\def\@doublechits#1#2#3{%
+  \chit at dbg{1}{Setting double-sided chits: #1}
+  \ifchits at 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 at dbg{2}{`\u'=`\m' (\c,\r)}
+          \foreach \n in {1,...,\m}{%
+            \ifx\u\chit at blank
+              \chit at dbg{3}{Ignoring blank chit:\u}
+            \else
+              \chit at cellbg(\c,\r){#3}
+              \chit[\u=\ti](\c,\r)
+              \chit at dbl@flip(\c,\r){#3}
+              \chit at cellbg(\mc,\r){#3}
+              \chit[\u\space flipped=\ti,zone turn=\t,zone mult=\n](\mc,\r)
+              \chit at 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}{},
+  zone oob point/.code n args={3}{}}
+%    \end{macrocode}
+%
+% \iffalse
+%</chit>
+% \fi


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/chit/misc.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/chit/shape.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/chit/shape.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/chit/shape.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at full,               full/.initial=,%
+  symbol/.store in=\chit at symbol,           symbol/.initial=,%
+  left/.store in=\chit at left,               left/.initial=,%
+  unique/.style={/chit/left={#1}},%
+  right/.store in=\chit at right,             right/.initial=,%
+  parent/.style={/chit/right={#1}},%
+  upper left/.store in=\chit at upper@left,   upper left/.initial=,%
+  upper right/.store in=\chit at upper@right, upper right/.initial=,%
+  lower left/.store in=\chit at lower@left,   lower left/.initial=,%
+  lower right/.store in=\chit at lower@right, lower right/.initial=,%
+  factors/.store in=\chit at factors,         factors/.initial=,%
+  setup/.store in=\chit at setup,             setup/.initial=,%
+  id/.store in=\chit at id,                   id/.initial=,%
+  frame/.store in=\chit at 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 at id}\setcounter{chit at id}{0}
+%    \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{The \cs{chit} shape}
+%
+% \begin{Macro}{\chit at n@to,\@chit at n@to,\@@chit at n@to,\@chit at 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 at n@to@}).  Otherwise, we may also need
+%   to scan for an offset given as \parg{delta-x,delta-y}.
+% 
+%    \begin{macrocode}
+\def\chit at n@to#1#2{%
+  %% Without a following start square bracket '[' by-pass to final
+  \chit at dbg{4}{Chit NATO App6(c) first step `#1' `#2'}
+  \@ifnextchar[{%
+    %\message{^^JStart square bracket}%
+    \@chit at n@to{#1}{#2}}{%
+    %\message{^^JNo start square bracket}%
+    \@chit at n@to@{#1}{#2}}%]]
+}
+%    \end{macrocode}
+%
+% The following macro is called if we had no options.
+% 
+%    \begin{macrocode}
+\def\@chit at n@to@#1#2#3\@end at chit@n at to{%
+  \chit at 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 at 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 at n@to#1#2[#3]{%
+  \chit at dbg{4}{Chit NATO App6(c) second step `#1' `#2' `#3'}
+  \@ifnextchar({\@@chit at n@to{#1}{#2}{#3}}{\@@chit at n@to{#1}{#2}{#3}(0,0)}%)
+}
+%    \end{macrocode}
+%
+% This called if we had option-like argument.
+% 
+%    \begin{macrocode}
+\def\@@chit at n@to#1#2#3(#4)\@end at chit@n at to{%
+  \chit at 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 at tr@ns at nchor,\chit at 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 at tr@ns at nchor#1{%
+  \pgf at x=0.4\pgf at x%
+  \pgf at y=0.4\pgf at y\advance\pgf at y#1}
+%    \end{macrocode}
+%    
+%    \begin{macrocode}
+\def\chit at nchor#1#2#3{%
+  \wg at sub@nchor{#1}{#2}
+  \chit at tr@ns at nchor{#3}}
+\def\chit at 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 at x=0cm\pgf at y=0cm}
+  \savedanchor\northeast{\pgf at x=0.6cm\pgf at y=0.6cm}
+  \savedanchor\symbol{\pgf at x=0cm\pgf at y=0.2cm}
+  \savedanchor\factors{\pgf at x=0cm\pgf at y=-0.5cm}
+  \saveddimen\margin{\pgf at 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 at dbg{4}{Chit ID: \meaning\chit at id}%
+    \@ifundefined{chit at id}{\let\chit at id\pgfutil at empty}{}%
+    \ifx\chit at id\pgfutil at empty%
+      \wg at r@ndom at id%
+      \edef\id{chit\wg at uuid}%
+    \else%
+      \edef\id{\chit at id}%
+    \fi%
+    \chit at dbg{4}{Chit ID stored: \meaning\chit at id}
+  }
+  \savedmacro\chitframeopt{%
+    \let\chitframeopt\pgfutil at empty%
+    \@ifundefined{chit at frame}{}{%
+      \edef\chitframeopt{\chit at frame}}
+    \n at to@pp at 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 at x=-\pgf at x}
+  \anchor{south west}{\northeast\pgf at x=-\pgf at x\pgf at y=-\pgf at y}
+  \anchor{south east}{\northeast\pgf at y=-\pgf at y}
+  \anchor{north}     {\northeast\pgf at x=0cm}
+  \anchor{south}     {\northeast\pgf at x=0cm\pgf at y=-\pgf at y}
+  \anchor{east}      {\northeast\pgf at y=0cm}
+  \anchor{west}      {\northeast\pgf at x=-\pgf at x\pgf at 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 at nchor{M\id symbol}{north east}{0.2cm}}
+  \anchor{symbol north west}{\chit at nchor{M\id symbol}{north west}{0.2cm}}
+  \anchor{symbol south east}{\chit at nchor{M\id symbol}{south east}{0.2cm}}
+  \anchor{symbol south west}{\chit at nchor{M\id symbol}{south west}{0.2cm}}
+  \anchor{symbol north}     {\chit at nchor{M\id symbol}{north}{0.2cm}}
+  \anchor{symbol west}      {\chit at nchor{M\id symbol}{west}{0.2cm}}
+  \anchor{symbol south}     {\chit at nchor{M\id symbol}{south}{0.2cm}}
+  \anchor{symbol east}      {\chit at nchor{M\id symbol}{east}{0.2cm}}
+  \anchor{symbol upper}     {\chit at nchor{M\id symbol}{upper}{0.2cm}}
+  \anchor{symbol lower}     {\chit at nchor{M\id symbol}{lower}{0.2cm}}
+  \anchor{symbol left}      {\chit at nchor{M\id symbol}{left}{0.2cm}}
+  \anchor{symbol right}     {\chit at nchor{M\id symbol}{right}{0.2cm}}
+  \anchor{symbol echelon}   {\chit at nchor{M\id symbol}{north}{0.2cm}}
+  \anchor{symbol below}     {\chit at 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 at nchor{M\id symbol}{west}{.2cm}\advance\pgf at x-\margin}
+  \anchor{right}{\chit at nchor{M\id symbol}{east}{.2cm}\advance\pgf at x+\margin}
+  \anchor{upper right} {%
+    \northeast \advance\pgf at x-\margin \advance\pgf at y-\margin%
+  }
+  \anchor{upper left}{
+    \northeast \advance\pgf at x-\margin \advance\pgf at y-\margin \pgf at x=-\pgf at x%
+  }
+  \anchor{lower right} {%
+    \northeast \advance\pgf at x-\margin \advance\pgf at y-\margin \pgf at y=-\pgf at y%
+  }
+  \anchor{lower left}{
+    \northeast \advance\pgf at x-\margin \advance\pgf at y-\margin%
+    \pgf at x=-\pgf at x \pgf at y=-\pgf at 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 at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+    \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \wg at tmpa=-\wg at tmpa \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \wg at tmpb=-\wg at tmpb \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \wg at tmpa=-\wg at tmpa \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at 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 at dbg{4}{%
+      Chit foreground: \meaning\id
+      ^^J  ID (set):    \meaning\chit at id
+      ^^J  Symbol:      \meaning\chit at symbol
+      ^^J  Full:        \meaning\chit at full
+      ^^J  Factors:     \meaning\chit at factors
+      ^^J  Left:        \meaning\chit at left
+      ^^J  Right:       \meaning\chit at right
+      ^^J  Upper left:  \meaning\chit at upper@left
+      ^^J  Lower left:  \meaning\chit at lower@left
+      ^^J  Upper right: \meaning\chit at upper@right
+      ^^J  Lower right: \meaning\chit at lower@right}
+    \chit at report{}
+    \pgfscope
+    %
+    \northeast%
+    \wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+    \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \wg at tmpa=-\wg at tmpa \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \wg at tmpb=-\wg at tmpb \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \wg at tmpa=-\wg at tmpa \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at 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 at symbol}{%
+      %% Draw full stuff
+      \@ifundefined{chit at full}{}{%
+        \center\wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+        \wg at pic@all{\chit at full}{}{\the\wg at tmpa,\the\wg at 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 at x,\the\pgf at y}\chit at symbol}%
+      \chit at dbg{6}{Arguments to chit NATO symbol: \meaning\args}%
+      \expandafter\chit at n@to\args\@end at chit@n at to%
+      \chit at 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 at left}{}{%
+        \begin{scope}[]
+          \pgfpointanchor{\symid}{west}%
+          \wg at tmpa=\pgf at x\advance\wg at tmpa-\margin%
+          \wg at tmpb=\pgf at y%
+          \wg at pic@all{\chit at left}{}{\the\wg at tmpa,\the\wg at tmpb}{chit/left}%
+        \end{scope}}%
+      % Put in right of symbol
+      \@ifundefined{chit at right}{}{%
+        \begin{scope}[]
+          \pgfpointanchor{\symid}{east}%
+          \wg at tmpa=\pgf at x\advance\wg at tmpa+\margin%
+          \wg at tmpb=\pgf at y%
+          \wg at pic@all{\chit at right}{}{\the\wg at tmpa,\the\wg at 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 at tmpa=\pgf at x%
+      \wg at tmpb=\pgf at y%
+      \advance\wg at tmpa-\margin%
+      \advance\wg at 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 at upper@left}{}{%
+        \begin{scope}[]
+          \wg at pic@all{\chit at upper@left}{}{-\the\wg at tmpa,\the\wg at tmpb}{%
+            chit/upper left}%
+        \end{scope}}
+      % Put in upper right corner
+      \@ifundefined{chit at upper@right}{}{%
+        \begin{scope}[]
+          \wg at pic@all{\chit at upper@right}{}{\the\wg at tmpa,\the\wg at tmpb}{%
+            chit/upper right}%
+        \end{scope}}
+      % Put in lower left corner
+      \@ifundefined{chit at lower@left}{}{%
+        \begin{scope}[]
+          \wg at pic@all{\chit at lower@left}{}{-\the\wg at tmpa,-\the\wg at tmpb}{%
+            chit/lower left}%
+        \end{scope}}
+      % Put in lower right corner
+      \@ifundefined{chit at lower@right}{}{%
+        \begin{scope}[]
+          \wg at pic@all{\chit at lower@right}{}{\the\wg at tmpa,-\the\wg at 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 at factors}{}{%
+        \advance\wg at tmpb-\margin%
+        \begin{scope}[]
+          \wg at pic@all{\chit at factors}{}{0,-\the\wg at tmpb}{chit/factors}%
+        \end{scope}}%
+    }%
+    \endpgfscope%
+    % Draw frame?
+    \edef\tmp at opt{[\chitframeopt]}
+    \expandafter\scope\tmp at opt
+    \northeast%
+    \wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+    \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \wg at tmpa=-\wg at tmpa \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \wg at tmpb=-\wg at tmpb \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \wg at tmpa=-\wg at tmpa \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at 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 at dbg{5}{Chit}
+  \@ifnextchar[{\chit@}{\chit@[]}%]
+}
+%    \end{macrocode}
+% 
+% Parse for coordinates. 
+%
+%    \begin{macrocode}
+\def\chit@[#1]{%
+  \chit at 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 at dbg{5}{Chit final:
+    ^^J  Options:    #1
+    ^^J  Position:   #2
+    ^^J  Name:       `#3'}
+  \let\name\pgfutil at empty%
+  \chit at dbg{1}{=== Before chit node}%
+  \node[draw,chit={every chit/.try,id=#3,#1}] (tmp) at (#2) {};
+  \chit at dbg{2}{=== After chit node}%
+  \ifx|#3|\relax%
+  \else%
+    \chit at dbg{3}{=== Renaming chit to user defined name `#3'}%
+    \pgfnoderename{#3}{tmp}%
+  \fi%
+  \@ifnextchar;{\@gobble}{}%
+}
+%    \end{macrocode}
+% \end{Macro}
+% \iffalse
+% </chit>
+% --------------------------------------------------------------------
+% \fi


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/chit/shape.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/board.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/board.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/board.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at rdframe}{\bo at rdframe[0]}%}
+}
+\def\bo at rdframe[#1](#2)(#3){%
+  \hex at coords@conv{#2}
+  \edef\llx{\hex at x}
+  \edef\lly{\hex at y}
+  \edef\llc{\hex at col}
+  \edef\llr{\hex at row}
+  \edef\ellc{\hex at eff@col}
+  \edef\ellr{\hex at eff@row}
+  %
+  \hex at coords@conv{#3}
+  \edef\urx{\hex at x}
+  \edef\ury{\hex at y}
+  \edef\urc{\hex at col}
+  \edef\urr{\hex at row}
+  \edef\eurc{\hex at eff@col}
+  \edef\eurr{\hex at eff@row}
+  %
+  \def\margin{#1}
+  %
+  \hex at 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 at coords@row at fac<0\def\oddeven{iseven}\fi%
+  \pgfmathparse{
+    ifthenelse(\hex at got@bot at short(\ellc),
+     ifthenelse(\hex at bot@short at col(\llc)*not(\oddeven(\ellc)),2,
+      ifthenelse(\hex at bot@short at col(\llc),0,1)),
+     ifthenelse(\oddeven(\ellc),1,2))}
+  \edef\olly{\pgfmathresult}%
+  \hex at dbg{2}{Delta lly: \olly half heights}
+  % Calculate how many half hex heights to add to the "top"
+  \def\oddeven{iseven}
+  \ifnum\hex at coords@row at fac<0\def\oddeven{isodd}\fi%
+  %
+  \pgfmathparse{
+    ifthenelse(\hex at got@top at short(\urc),
+     ifthenelse(\hex at top@short at col(\urc)*\oddeven(\eurc),0,
+      ifthenelse(\hex at top@short at col(\urc),2,1)),
+     ifthenelse(\oddeven(\eurc),1,2))}
+  \edef\oury{\pgfmathresult}%
+  \hex at dbg{2}{Delta ury: \oury half heights}
+  % Calculate new LLY and URY
+  \pgfmathparse{\lly-\hex at coords@row at fac*(\olly*\hex at yy+\margin)}
+  \edef\lly{\pgfmathresult}
+  \pgfmathparse{\ury+\hex at coords@row at fac*(\oury*\hex at 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 at 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 at coords@reset%
+  \tikzset{/hex/coords/.cd, #1}
+  \edef\llx{\hex at col}
+  \edef\lly{\hex at row}
+  %%
+  \hex at coords@reset%
+  \tikzset{/hex/coords/.cd, #2}
+  \edef\urx{\hex at col}
+  \edef\ury{\hex at row}
+  \let\board at odd\@undefined%
+  \hex at dbg{1}{Board BB in hex: (\llx,\lly)x(\urx,\ury)}
+  %%
+  \def\fv{south}
+  \def\sv{north}
+  \ifnum\hex at coords@row at fac<0
+    \def\fv{north}
+    \def\sv{south}
+  \fi
+
+  \edef\hex at 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 at addto@macro{\hex at board@path}{\t}}
+  %% Then for top of board
+  \foreach \c in {\llx,...,\urx} {%
+    % To be done
+    %\pgfmathparse{int(ifthenelse(\hex at bot@short at 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 at addto@macro{\hex at 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 at addto@macro{\hex at board@path}{\t}}
+      
+  %% Then for bottom of board
+  \edef\t{--(hex cs:r=\lly,c=\urx,v=\fv\space west)}
+  \wg at addto@macro{\hex at board@path}{\t}
+  \foreach \c in {\urx,...,\llx} {%
+    \pgfmathparse{int(ifthenelse(\hex at bot@short at 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 at addto@macro{\hex at board@path}{\t}}
+    
+  \def\t{--cycle}
+  \wg at addto@macro{\hex at board@path}{\t}
+  \global\let\hexboardpath\hex at board@path
+}
+%\def\boardclip#1#2#3{%
+%  \pgfmathparse{int(#1-1)}\xdef\board at range{\pgfmathresult,...,0}%
+%  %% \show\board at 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 at 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 at x{\pgfmathresult}%
+    \draw [very thin,gray](\debug at x,\boardYmin) --
+    (\debug at x,\boardYmax) node [below,rotate=90] at
+    (\debug at 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 at x{\pgfmathresult}%
+    \draw [very thin,gray] (\boardXmin,\debug at x) --
+    (\boardXmax,\debug at x) node [left,rotate=90] at
+    (\boardXmin,\debug at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/board.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/coord.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/coord.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/coord.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -0,0 +1,350 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% 
+% \subsubsection{Hex coordinate system}
+%
+% \begin{Macro}{\hex at xx,\hex at 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 at xx{\pgfmathresult}
+\pgfmathparse{sin(60)}        \xdef\hex at yy{\pgfmathresult}
+\pgfmathparse{\hex at yy*cos(30)}\xdef\hex at e@xx{\pgfmathresult}
+\pgfmathparse{\hex at yy*sin(30)}\xdef\hex at e@yy{\pgfmathresult}
+\newdimen\hex at radius\hex at radius=1cm
+\newdimen\hex at dx    \expandafter\hex at dx=\hex at xx cm
+\newdimen\hex at dy    \expandafter\hex at dy=\hex at yy cm
+\newdimen\hex at e@dx  \expandafter\hex at e@dx=\hex at e@xx cm
+\newdimen\hex at e@dy  \expandafter\hex at e@dy=\hex at e@yy cm
+
+%    \end{macrocode}
+% \end{Macro}
+%
+% Some code we need for some options
+%
+%    \begin{macrocode}
+\newif\ifhex at label@is at name\hex at label@is at namefalse
+\def\hex at short@col{isfalse}
+\def\hex at got@short{isfalse}
+\pgfmathdeclarefunction{isfalse}{1}{%
+  \begingroup
+  \def\pgfmathresult{0}%
+  \pgfmath at smuggleone\pgfmathresult
+  \endgroup}
+\pgfmathdeclarefunction{istrue}{1}{%
+  \begingroup
+  \def\pgfmathresult{1}%
+  \pgfmath at 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 at coords@row at off{0}},
+  hex/first row is/1/.code={\def\hex at coords@row at off{-1}},
+  hex/first row is=0,
+  hex/first column is/.is choice,
+  hex/first column is/0/.code={\def\hex at coords@col at off{0}},
+  hex/first column is/1/.code={\def\hex at coords@col at 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 at coords@row at fac{1}},
+  hex/row direction is/reversed/.code={\def\hex at coords@row at 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 at coords@col at fac{1}},
+  hex/column direction is/reversed/.code={\def\hex at coords@col at 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 at label@is at 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 at bot@short at col{isodd}
+    \def\hex at got@bot at short{istrue}
+    \hex at dbg{4}{Short columns (odd): \meaning\hex at bot@short at col}},
+  hex/short bottom columns/even/.code={
+    \def\hex at bot@short at col{iseven}
+    \def\hex at got@bot at short{istrue}
+    \hex at dbg{4}{Short column (even): \meaning\hex at bot@short at col}},
+  hex/short bottom columns/none/.code={
+    \def\hex at bot@short at col{isfalse}
+    \def\hex at got@bot at short{isfalse}
+    \hex at dbg{4}{Short columns (none): \meaning\hex at bot@short at 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 at top@short at col{isodd}
+    \def\hex at got@top at short{istrue}
+    \hex at dbg{4}{Short columns (odd): \meaning\hex at top@short at col}},
+  hex/short top columns/even/.code={
+    \def\hex at top@short at col{iseven}
+    \def\hex at got@top at short{istrue}
+    \hex at dbg{4}{Short column (even): \meaning\hex at top@short at col}},
+  hex/short top columns/none/.code={
+    \def\hex at top@short at col{isfalse}
+    \def\hex at got@top at short{isfalse}
+    \hex at dbg{4}{Short columns (none): \meaning\hex at top@short at col}},
+  hex/short top columns=none,
+}
+\message{^^JInitial hex coordinate setup:
+  Rows: factor=\hex at coords@row at fac, offset=\hex at coords@row at off
+  Columns: factor=\hex at coords@col at fac, offset=\hex at coords@col at 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 at col,
+  c/.store in=\hex at col,
+  row/.store in=\hex at row,
+  r/.store in=\hex at row,
+  offset/.store in=\hex at off,
+  o/.store in=\hex at off,
+  vertex/.is choice,
+  vertex/none/.code={\global\let\hex at vtx\@empty},
+  vertex/east/.code={\def\hex at vtx{0}},
+  vertex/north east/.code={\def\hex at vtx{60}},
+  vertex/north west/.code={\def\hex at vtx{120}},
+  vertex/west/.code={\def\hex at vtx{180}},
+  vertex/south west/.code={\def\hex at vtx{240}},
+  vertex/south east/.code={\def\hex at vtx{300}},
+  vertex/E/.code={\def\hex at vtx{0}},
+  vertex/NE/.code={\def\hex at vtx{60}},
+  vertex/NW/.code={\def\hex at vtx{120}},
+  vertex/W/.code={\def\hex at vtx{180}},
+  vertex/SW/.code={\def\hex at vtx{240}},
+  vertex/SE/.code={\def\hex at vtx{300}},
+  vertex/.default=none,
+  v/.forward to=/hex/coords/vertex=#1,
+  edge/.is choice,
+  edge/none/.code={\global\let\hex at edg\@empty},
+  edge/north east/.code={\def\hex at edg{30}},
+  edge/north/.code={\def\hex at edg{90}},
+  edge/north west/.code={\def\hex at edg{150}},
+  edge/south west/.code={\def\hex at edg{210}},
+  edge/south/.code={\def\hex at edg{270}},
+  edge/south east/.code={\def\hex at edg{330}},
+  edge/NE/.code={\def\hex at edg{30}},
+  edge/N/.code={\def\hex at edg{90}},
+  edge/NW/.code={\def\hex at edg{150}},
+  edge/SW/.code={\def\hex at edg{210}},
+  edge/S/.code={\def\hex at edg{270}},
+  edge/SE/.code={\def\hex at edg{330}},
+  edge/.default=none,
+  e/.forward to=/hex/coords/edge,
+}
+%    \end{macrocode}
+% \end{HexKey*}
+%
+% \begin{Macro}{\hex at 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 at 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 at coords@conv#1{%
+  \hex at coords@reset%
+  \tikzset{/hex/coords/.cd, #1}%
+%    \end{macrocode}
+%
+% Then we calculate the $x$ coordinate and set the dimension
+% \cs{pgf at 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 at 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 at coords@col at fac*(\hex at col+\hex at coords@col at off))}%
+  \xdef\hex at eff@col{\pgfmathresult}%
+  \hex at dbg{2}{Effective column: \hex at coords@col at fac * (\hex at col -
+    \hex at coords@col at off) -> \hex at eff@col}%
+  \pgfmathparse{\hex at eff@col*1.5}%
+  \xdef\hex at x{\pgfmathresult}%
+  \expandafter\pgf at x=\hex at x cm%
+%    \end{macrocode}
+%
+% And then for the $y$ coordinate and set the dimension \cs{pgf at 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 at 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 at coords@row at fac*(\hex at row+\hex at coords@row at off))}%
+  \xdef\hex at eff@row{\pgfmathresult}%
+  \hex at dbg{2}{Effective row: \hex at coords@row at fac * (\hex at row +
+    \hex at coords@row at off) -> \hex at eff@row}%
+  \pgfmathparse{(2*\hex at eff@row-mod(round((\hex at col+\hex at coords@col at off)),2))*\hex at yy}%
+  \xdef\hex at y{\pgfmathresult}%
+  \expandafter\pgf at x=\hex at 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 at vtx\@empty\pgfpointxy{\hex at x}{\hex at y}\else%
+  \pgfpointadd{\pgfpointxy{\hex at x}{\hex at y}}{%
+    \pgfpointscale{\hex at off}{\pgfpointpolarxy{\hex at vtx}{1}}}\fi%
+%    \end{macrocode}
+%
+% If we have an edge specification add that location to the current
+% coordinates.  
+% 
+%    \begin{macrocode}
+  \ifx\hex at edg\@empty\else%
+  \pgfpointadd{\pgfpointxy{\hex at x}{\hex at y}}{%
+    \pgfpointscale{\hex at off}{\pgfpointpolarxy{\hex at edg}{\hex at yy}}}\fi
+%    \end{macrocode}
+%
+% For debugging, we can print out stuff. 
+% 
+%    \begin{macrocode}
+  \hex at dbg{2}{Hex coordinates: #1
+    ^^J c=\hex at col
+    ^^J r=\hex at row
+    ^^J v=\hex at vtx
+    ^^J e=\hex at edg
+    ^^J x=\hex at x
+    ^^J y=\hex at y}%
+  \global\let\hex at x\hex at x%
+  \global\let\hex at y\hex at y%
+  \global\let\hex at row\hex at row%
+  \global\let\hex at col\hex at col%
+}
+\tikzdeclarecoordinatesystem{hex}{%
+  \hex at coords@conv{#1}}
+%    \end{macrocode}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi 


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/coord.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/core.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/core.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/core.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -0,0 +1,95 @@
+% \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 at dbg} prints out (conditionally) debug messages.
+% 
+% \begin{Macro}{\hexdbglvl,\hex at dbg}
+%    \begin{macrocode}
+\newcount\hexdbglvl\hexdbglvl=\wargamedbglvl
+\def\hex at 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 at terrain@pic}{%
+  \newif\ifhex at terrain@pic
+  \hex at terrain@pictrue}{}
+\def\markpos#1(#2){}
+%    \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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/core.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/extra.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/extra.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/extra.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/extra.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/labels.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/labels.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/labels.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at l@c}
+\newcounter{hex at 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 at max@row{-1} 
+\tikzset{ 
+  max hex row/.store in=\hex at 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 at col} and \cs{hex at row} defined by the hex coordinate
+% system.
+%
+%    \begin{macrocode}
+\tikzset{%
+  /hex/label/.search also={/tikz},
+  /hex/label/.cd,
+  none/.code={\global\let\hex at l@text\@empty},
+  auto/.is choice,
+  auto/none/.code={\global\let\hex at l@text\@empty},
+  auto/numbers/.code={%
+    \hex at l@abs%
+    \xdef\hex at l@text{%
+      \hex at l@n at pad{\the\c at hex@l at c}%
+      \hex at l@n at pad{\the\c at hex@l at r}}},
+  auto/alpha column/.code={%
+    \xdef\hex at l@text{%
+      \ifnum0>\hex at col\AlphAlph{-\hex at col}\else\AlphAlph{\hex at col}\fi%
+      \hex at row}},
+  auto/alpha 2 column/.code={%
+    \hex at l@abs%
+    \advance\c at hex@l at c27\relax%
+    \xdef\hex at l@text{%
+      \AlphAlph{\value{hex at l@c}}%
+      \hex at l@n at pad{\hex at row}}},
+  auto/inv y x plus 1/.code={%
+    \hex at dbg{3}{Inverse row, add one to column with arg `#1'}
+    \let\hex at l@text\@empty%
+    \ifnum\hex at max@row>0%
+      \pgfmathtruncatemacro{\hex at l@row}{\hex at max@row-\hex at row}
+      \pgfmathtruncatemacro{\hex at l@col}{1+\hex at col}
+      \xdef\hex at l@text{%
+        \hex at l@n at pad{\hex at l@col}%
+        \hex at l@n at pad{\hex at l@row}}
+    \else\message{Max row number not set}\fi},
+  auto/x and y plus 1/.code={%
+    \hex at dbg{3}{Inverse row, add one to column with arg `#1'}
+    \pgfmathtruncatemacro{\hex at l@row}{1+\hex at row}
+    \pgfmathtruncatemacro{\hex at l@col}{1+\hex at col}
+    \xdef\hex at l@text{%
+      \hex at l@n at pad{\hex at l@col}%
+      \hex at l@n at pad{\hex at l@row}}},
+  auto/.default=numbers,
+  %text/.store in=\hex at l@text,
+  text/.code={\gdef\hex at l@text{#1}},
+  place/.store in=\hex at l@pos,
+  location/.forward to=/hex/label/place,
+  rotate/.store in=\hex at l@rot
+}
+%    \end{macrocode}
+% \begin{Macro}{\hex at l@abs}
+%
+%   This takes the absolute value of row and column numbers.
+%   
+%    \begin{macrocode}
+\def\hex at l@abs{
+  \setcounter{hex at l@c}{\hex at col}
+  \setcounter{hex at l@r}{\hex at row}
+  \expandafter\ifnum\value{hex at l@c}<0\multiply\c at hex@l at c by-1\fi%
+  \expandafter\ifnum\value{hex at l@r}<0\multiply\c at hex@l at r by-1\fi%
+  % \hex at dbg{0}{\hex at col->\the\c at hex@l at c\space\hex at row->\the\c at hex@l at r}
+}
+%    \end{macrocode}
+% \end{Macro}
+% 
+% \begin{Macro}{\hex at l@n at pad}
+%   This will pad a number with a 0 if the number is smaller than 10.
+%
+%    \begin{macrocode}
+\long\def\hex at l@n at pad#1{%
+  \ifnum#1<10 0\fi%
+  #1}
+%    \end{macrocode}
+% \end{Macro}
+% 
+%
+% \begin{Macro}{\hex at 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 at l@text} to be non-empty, then we set the label via a
+%   \TikZ{} \spec{node}.
+%
+%    \begin{macrocode}
+\def\hex at do@label{%
+  \hex at dbg{1}{Hex label: `\meaning\hex at label'}%
+  \edef\hex at l@tmp{[%
+    /hex/label/.cd,%
+    rotate=0,%
+    place={(90:.8)},%
+    /tikz/hex/label/.try,%
+    /tikz/every hex label/.try,%
+    \hex at label]}%
+  \expandafter\scope\hex at l@tmp%
+    \hex at dbg{1}{Label:
+      ^^J  Text: `\meaning\hex at l@text'
+      ^^J  Location: `\meaning\hex at l@pos'
+      ^^J  Rotation: `\meaning\hex at l@rot'
+    }%
+    \@ifundefined{hex at l@text}{\let\hex at l@text\empty}{}%
+    \ifx\hex at l@text\empty\else%
+    \node[rotate=\hex at l@rot] at \hex at l@pos {\hex at l@text};%
+    \fi%
+  \endscope%
+}
+%    \end{macrocode}
+% \end{Macro}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/labels.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/paths.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/paths.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/paths.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at xa=\pgf at x
+    \pgf at ya=\pgf at y
+    \message{^^J\the\pgf at x,\the\pgf at y}
+    \pgfpointadd{\pgfpointorigin}{
+      \pgfpointpolar{-\pgfdecorationsegmentangle}{
+        \pgfdecorationsegmentamplitude}}
+    \pgfpointtransformed{\pgfpoint{\pgf at x}{\pgf at y}}%
+    \message{^^J\the\pgf at x,\the\pgf at y}
+    \xdef\outlinerev{\the\pgf at x/\the\pgf at y,\outlinerev}
+    \pgf at x=\pgf at xa
+    \pgf at y=\pgf at ya
+  }%
+  \state{final}
+  {
+    \pgfpathlineto{\pgfpointdecoratedpathlast}
+    \foreach \x/\y in \outlinerev{
+      \ifx\x\empty\else
+         \ifx\y\empty\else
+           \pgf at xa=\x
+           \pgf at ya=\y
+           \pgf at nlt@lineto{\pgf at xa}{\pgf at 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 at dbg{3}{Road}
+  \@ifnextchar[{\road@}{\road@[]}%]
+}
+\def\road@[#1]{\draw[hex/road,every hex road/.try,#1]}
+\def\railroad{%
+  \hex at dbg{3}{Rail road}
+  \@ifnextchar[{\railroad@}{\railroad@[]}%]
+}
+\def\railroad@[#1]{\draw[hex/railroad,every hex railroad/.try,#1]}
+\def\river{%
+  \hex at dbg{3}{River}
+  \@ifnextchar[{\river@}{\river@[]}%]
+}
+\def\river@[#1]{\draw[hex/river,every hex river/.try,#1]}
+\def\border{%
+  \hex at 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 at path\@undefined%
+  \foreach \x/\y in {#2}{%
+    \pgfmathparse{\x*\boardW+\boardXmin}\xdef\tmp at x{\pgfmathresult}%
+    \pgfmathparse{\y*\boardH+\boardYmin}\xdef\tmp at y{\pgfmathresult}%
+    \@ifundefined{tmp at path}{\def\tmp at path{}}{\xdef\tmp at path{\tmp at path--}}%
+    \xdef\tmp at path{\tmp at path(\tmp at x,\tmp at y)}}%
+  \expandafter\xdef\csname #1\endcsname{\tmp at path}}
+%    \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% 
+% \subsubsection{Move, attacks, retreats from hex to hex}
+%
+% \begin{Macro}{\hex at getscale}
+%
+% Get current scaling factor.
+% 
+%    \begin{macrocode}
+\def\hex at 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 at getscale{\hex at 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 at scale*\hex at dy with {
+        \node [single arrow,
+               single arrow head extend=3pt,
+               fill=#1,
+               inner sep=\hex at scale*.5mm,
+               minimum width=\hex at scale*2mm,
+               minimum height=\hex at scale*\hex at 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 at scale*\hex at dy with {
+        \node [single arrow,
+               single arrow head extend=3pt,
+               fill=#1,
+               inner sep=\hex at scale*.5mm,
+               minimum width=\hex at scale*2mm,
+               minimum height=\hex at scale*\hex at 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 at scale*\hex at dy
+      step 2*\hex at scale*\hex at dy with {
+        \node [single arrow,
+               single arrow head extend=3pt,
+               fill=#1,
+               anchor=west,
+               inner sep=\hex at scale*.25mm,
+               outer sep=.3*\hex at scale*\hex at dy,
+               minimum width=\hex at scale*2mm,
+               minimum height=1.4*\hex at scale*\hex at 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 at scale*5mm,
+        fill=#1,
+        transform shape] {};},
+      mark=between positions 0 and 1 step 0.75*\hex at scale*\hex at dy with {
+        \node [single arrow,
+               single arrow head extend=\hex at scale*3pt,
+               fill=#1,
+               inner sep=\hex at scale*1mm,
+               minimum width=\hex at scale*3mm,
+               minimum height=\hex at scale*\hex at 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 at options\endcsname},
+    inherit options,
+    decorate,
+    decoration={
+      markings,
+      mark=between positions \hex at scale*\hex at dy
+      and 1 step 2*\hex at scale*\hex at dy with {
+        \node [single arrow,draw=black,fill=#1,
+        single arrow head extend=\hex at scale*3pt,
+        inner sep=1mm,
+        minimum width=0.75*\hex at scale*\hex at dy,
+        minimum height=\hex at scale*\hex at 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 at options\endcsname},
+    inherit options,
+    decorate,
+    decoration={
+      markings,
+      mark=between positions \hex at scale*\hex at dy
+      and 1 step 2*\hex at scale*\hex at dy with {
+        \node [regular polygon,
+        fill=#1,
+        draw=#1,
+        regular polygon sides=3,
+        inner sep=0,
+        minimum size=0.75*\hex at scale*\hex at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/paths.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/ridges.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/ridges.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/ridges.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at r@ne
+\newif\ifhex at r@n
+\newif\ifhex at r@nw
+\newif\ifhex at r@sw
+\newif\ifhex at r@s
+\newif\ifhex at 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 at r@ne,
+  north/.is if=hex at r@n,
+  north west/.is if=hex at r@nw,
+  south west/.is if=hex at r@sw,
+  south/.is if=hex at r@s,
+  south east/.is if=hex at r@se,
+  radius/.store in=\hex at r@r,
+  NE/.is if=hex at r@ne,
+  N/.is if=hex at r@n,
+  NW/.is if=hex at r@nw,
+  SW/.is if=hex at r@sw,
+  S/.is if=hex at r@s,
+  SE/.is if=hex at r@se,
+  r/.store in=\hex at r@r,
+}
+%    \end{macrocode}
+%
+% \begin{Macro}{\hex at 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 at do@ridges{%
+  \edef\hex at r@tmp{[
+    /hex/ridges/.cd,%
+    radius=0.8,%
+    /tikz/every hex ridges/.try,
+    \hex at ridges]}
+  \expandafter\scope\hex at r@tmp%
+    \hex at dbg{3}{Ridges: `\meaning\hex at ridges', `\meaning\hex at r@tmp'
+      ^^Jnorth east=\ifhex at r@ne yes\else no\fi
+      ^^Jnorth     =\ifhex at r@n  yes\else no\fi
+      ^^Jnorth west=\ifhex at r@nw yes\else no\fi
+      ^^Jsouth west=\ifhex at r@sw yes\else no\fi
+      ^^Jsouth     =\ifhex at r@s  yes\else no\fi
+      ^^Jsouth east=\ifhex at r@se yes\else no\fi
+      ^^Jradius    =\hex at r@r
+    }
+    \def\hex at r@p{}
+    % Hand written algorithm
+    \ifhex at r@ne
+      \def\hex at r@p{(0:\hex at r@r)--(60:\hex at r@r)}
+    \fi
+    \ifhex at r@n
+      \hex at dbg{4}{Ridge along north edge: `\hex at r@p'}
+      \ifhex at r@ne\else
+        \xdef\hex at r@p{\hex at r@p ( 60:\hex at r@r)}
+      \fi
+      \xdef\hex at r@p{\hex at r@p --(120:\hex at r@r)}
+    \fi
+    \ifhex at r@nw
+      \ifhex at r@n\else
+        \xdef\hex at r@p{\hex at r@p (120:\hex at r@r)}
+      \fi
+      \xdef\hex at r@p{\hex at r@p --(180:\hex at r@r)}
+    \fi
+    \ifhex at r@sw
+      \ifhex at r@nw\else
+        \xdef\hex at r@p{\hex at r@p (180:\hex at r@r)}
+      \fi
+      \xdef\hex at r@p{\hex at r@p --(240:\hex at r@r)}
+    \fi
+    \ifhex at r@s
+      \ifhex at r@sw\else
+        \xdef\hex at r@p{\hex at r@p (240:\hex at r@r)}
+      \fi
+      \xdef\hex at r@p{\hex at r@p --(300:\hex at r@r)}
+    \fi
+    \ifhex at r@se
+      \ifhex at r@s\else
+        \xdef\hex at r@p{\hex at r@p (300:\hex at r@r)}
+      \fi
+      \xdef\hex at r@p{\hex at r@p --(360:\hex at r@r)}
+    \fi
+    \hex at dbg{3}{ Ridges path: \hex at r@p}
+    \draw[hex/ridges] \hex at r@p;
+  \endscope% End of ridges scope 
+}
+%    \end{macrocode}
+% \end{Macro}
+% 
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi 


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/ridges.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/shape.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/shape.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/shape.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at dbg{5}{Base vertex: \hex at xx,\hex at yy}
+\hex at dbg{5}{Base edges: \hex at e@xx,\hex at e@yy}
+\pgfdeclareshape{hex/hex}{%
+  \saveddimen\radius{\pgf at x=\hex at radius}
+  \savedanchor{\east}{         \pgfqpoint{ \hex at radius}{0cm}}
+  \savedanchor{\west}{         \pgfqpoint{-\hex at radius}{0cm}}
+  \savedanchor{\northeast}{    \pgfqpoint{ \hex at dx}{ \hex at dy}}
+  \savedanchor{\northwest}{    \pgfqpoint{-\hex at dx}{ \hex at dy}}
+  \savedanchor{\southwest}{    \pgfqpoint{-\hex at dx}{-\hex at dy}}
+  \savedanchor{\southeast}{    \pgfqpoint{ \hex at dx}{-\hex at dy}}
+  \savedanchor{\northedge}{    \pgfqpoint{     0cm}{ \hex at dy}}
+  \savedanchor{\southedge}{    \pgfqpoint{     0cm}{-\hex at dy}}
+  \savedanchor{\northeastedge}{\pgfqpoint{ \hex at e@dx}{ \hex at e@dy}}
+  \savedanchor{\northwestedge}{\pgfqpoint{-\hex at e@dx}{ \hex at e@dy}}
+  \savedanchor{\southwestedge}{\pgfqpoint{-\hex at e@dx}{-\hex at e@dy}}
+  \savedanchor{\southeastedge}{\pgfqpoint{ \hex at e@dx}{-\hex at 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 at dbg{2}{Hex behind foreground path:
+      ^^JTerrain:       `\meaning\hex at terrain'
+      ^^JRidges:        `\meaning\hex at ridges'
+      ^^JTown:          `\meaning\hex at town'
+      ^^JExtra clipped: `\meaning\hex at extra@clip'
+      ^^JLabel:         `\meaning\hex at label'
+      ^^JExtra:         `\meaning\hex at extra'
+      ^^JLast node name:`\meaning\tikzlastnode'
+      ^^JHex row:       `\meaning\hex at row'
+      ^^JHex col:       `\meaning\hex at 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 at terrain}{\let\hex at terrain\empty}{}%
+      \ifx\hex at terrain\empty\else\hex at 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 at ridges}{\let\hex at ridges\empty}{}%
+      \ifx\hex at ridges\empty\else\hex at 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 at extra@clip}{\let\hex at extra@clip\empty}{}
+      \ifx\hex at extra@clip\empty\else%
+         \hex at dbg{5}{Extra clipped: `\meaning\hex at extra'}
+         \pgfpointorigin\wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+         \wg at pic@all{\hex at extra@clip}{}{\the\wg at tmpa,\the\wg at 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 at row} and \cs{hex at 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 at label}{\let\hex at label\empty}{}
+      \ifx\hex at label\empty\else\hex at 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 at town}{\let\hex at town\empty}{}
+    \@ifundefined{hex at c@pic}{\let\hex at c@pic\empty}{}
+    \ifx\hex at town\empty\else\hex at 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 at extra}{\let\hex at extra\empty}{}
+    \ifx\hex at extra\empty\else%
+       \hex at dbg{5}{Extra: `\meaning\hex at extra'}
+       \pgfpointorigin\wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+       \wg at pic@all{\hex at extra}{}{\the\wg at tmpa,\the\wg at 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 at terrain,%
+  ridges/.store in=\hex at ridges,%
+  town/.store in=\hex at town,%
+  extra/.store in=\hex at extra,%
+  label/.store in=\hex at label,%
+  extra clipped/.store in=\hex at 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 at 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 at dbg{8}{=== Label text: `\meaning\hex at l@text'}
+  \ifx|#3|\relax%
+    \@ifundefined{hex at l@text}{%
+      \hex at dbg{8}{=== Label text of hex (#2) not defined}%
+      \let\hex at l@text\empty%
+    }{}
+    \ifhex at label@is at name%
+      \hex at dbg{5}{=== Use label text of hex (#2) as name}%
+      \ifx\hex at l@text\@empty%
+        \hex at dbg{8}{=== Argh! Label text is empty! `\meaning\hex at l@text'}
+      \else%
+        \hex at dbg{3}{=== Renaming hex to label text `\hex at l@text'}
+        \pgfnoderename{\hex at l@text}{tmp}%
+      \fi%
+    \fi%
+  \else%
+    \hex at dbg{3}{=== Renaming hex to user defined name `#3'}%
+    \pgfnoderename{#3}{tmp}%
+  \fi%
+  \@ifnextchar;{\@gobble}{}%
+}
+%    \end{macrocode}
+% \end{Macro}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/shape.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/beach.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/beach.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/beach.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/beach.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/city.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/city.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/city.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -0,0 +1,5138 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/city}
+%   And finally a city  
+% 
+%
+%    \begin{macrocode}
+\ifhex at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/city.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/light_woods.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/light_woods.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/light_woods.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/light_woods.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/mountain.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/mountain.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/mountain.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/mountain.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/mountains.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/mountains.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/mountains.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/mountains.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/rough.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/rough.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/rough.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/rough.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/swamp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/swamp.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/swamp.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/swamp.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/town.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/town.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/town.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -0,0 +1,1061 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/town}
+%   A town.
+% 
+%
+%    \begin{macrocode}
+\ifhex at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/town.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/tree.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/tree.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/tree.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/tree.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/village.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/village.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/village.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/village.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/woods.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/woods.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/woods.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain/woods.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/terrain.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/terrain.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at t@pic,%
+  image/.store in=\hex at t@image,%
+  code/.store in=\hex at t@code,%
+  clip/.store in=\hex at 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=wargame.beach},
+  light woods/.style={image=wargame.light_woods},
+  woods/.style={image=wargame.woods},
+  swamp/.style={image=wargame.swamp},
+  rough/.style={image=wargame.rough},
+  mountains/.style={image=wargame.mountains},
+  village/.style={image=wargame.village},
+  town/.style={image=wargame.town},
+  city/.style={image=wargame.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 at 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 at do@terrain{%
+  \hex at dbg{5}{Terrain: \meaning\hex at terrain}%
+  \edef\hex at t@tmp{[/hex/terrain/.cd,\hex at terrain]}%
+  \expandafter\scope\hex at t@tmp% Scope for terrain clipping.
+    \hex at dbg{5}{Terrain:
+      ^^J  pic:   \meaning\hex at t@pic
+      ^^J  image: \meaning\hex at t@image
+      ^^J  code:  \meaning\hex at t@code
+      ^^J  clip:  \meaning\hex at 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 at t@clip}{\let\hex at t@clip\empty}{}
+    \ifx\hex at t@clip\empty\else%
+      \def\hex at t@c{}
+      \foreach \c in \hex at t@clip{%
+        \hex at dbg{5}{Clipping to `\c'}
+        \expandafter\wg at pic\c\@endwg at pic {}{\wg at tmpa,\wg at tmpb}{%
+          save path=\hex at t@tmp}%
+        \wg at addto@macro\hex at t@c\hex at t@tmp % Append to clippping
+      }%
+      \pgfsyssoftpath at setcurrentpath{\hex at 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 at t@pic}{\let\hex at t@pic\empty}{}
+    \@ifundefined{hex at t@image}{\let\hex at 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 at t@image\empty%
+      \hex at dbg{8}{No terrain images}%
+      \ifx\hex at t@pic\empty\else%
+        % We have pictures
+        \hex at dbg{5}{Terrain pictures}%
+        \pgfpointorigin\wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+        \wg at pic@all{\hex at t@pic}{}{\the\wg at tmpa,\the\wg at 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 at dbg{5}{Terrain images}%
+        \pgfpointorigin\wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+        \foreach \i in \hex at t@image{%
+          \hex at dbg{10}{Terrain image: `\meaning\i'}
+          \expandafter\wg at node{%
+            \includegraphics[width=2cm]{\i}}\@endwg at node %
+          {}{\wg at tmpa,\wg at 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 at 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 at x@r{.7}
+\def\hex at 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 at make@sextants{.7}{}
+\hex at make@sextants{.3}{large }
+\hex at make@sextants{0}{full }
+%    \end{macrocode}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi 


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/terrain.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/tile.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/tile.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/tile.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/tile.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/hex/towns.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/hex/towns.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/hex/towns.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at c@pic,
+  type/.store in=\hex at c@pic,
+  place/.store in=\hex at c@pos,
+  location/.store in=\hex at c@pos,
+  name/.store in=\hex at 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 at do@town}
+%
+%   The macro to make the towns.  This uses same tricks as above.
+%   
+%    \begin{macrocode}
+\def\hex at c@nameparse{%
+  \@ifnextchar[{\hex at c@namep at rse}{\hex at c@namep at rse[]}%]
+}
+\def\hex at c@namep at rse[#1]#2\endhex at c@nameparse{%
+  \def\hex at c@node{node[shape=rectangle,hex/town name,#1]{#2}}}
+  
+\def\hex at do@town{%
+  \edef\hex at c@tmp{[
+    /hex/town/.cd,%
+    town,%
+    /tikz/hex/town,%
+    /tikz/every hex town/.try,
+    \hex at town]}
+  \expandafter\scope\hex at c@tmp%
+    \ifx\hex at c@pic\empty\else%
+      \@ifundefined{hex at c@pos}{\let\hex at c@pos\empty}{}
+      \@ifundefined{hex at c@name}{\let\hex at c@name\empty}{}
+      \expandafter\hex at c@nameparse\hex at c@name\endhex at c@nameparse%
+      \ifx\hex at c@pos\empty\def\hex at c@pos{(0,0)}\fi
+      \hex at dbg{2}{Town:
+        ^^J text=\hex at c@name
+        ^^J pic=\hex at c@pic
+        ^^J place=\hex at c@pos
+        ^^J node=\hex at c@node
+      }
+      \filldraw \hex at c@pos pic{\hex at c@pic} \hex at c@node;
+    \fi%
+  \endscope%
+}
+%    \end{macrocode}
+% \end{Macro}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/hex/towns.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/activity.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/activity.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/activity.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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>


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/activity.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/air.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/air.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/air.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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>
+%


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/air.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/equipment.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/equipment.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/equipment.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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>
+%


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/equipment.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/installation.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/installation.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/installation.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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>


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/installation.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/land.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/land.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/land.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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>
+%


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/land.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/missile.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/missile.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/missile.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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>
+%


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/missile.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/seamine.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/seamine.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/seamine.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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>
+%


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/seamine.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/seasurface.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/seasurface.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/seasurface.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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>


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/seasurface.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/space.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/space.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/space.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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>


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/space.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/subsurface.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/subsurface.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/subsurface.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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>


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/compat/subsurface.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/core.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/core.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/core.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at to@pp at 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 at to@pp at dbg#1#2{%
+  \ifnum#1>\natoappdbglvl\relax\else\message{^^J#2}\fi}
+%    \end{macrocode}
+% \end{Macro}
+% 
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Colours}
+%
+% \begin{Macro}{\c at friendly,
+%               \c at hostile,
+%               \c at neutral,
+%               \c at 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 at fac}{%
+    }{\tikzset{fill=\natoapp at 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 at to@pp at inst@x\n at to@pp at inst@x=0.2cm
+\newdimen\n at to@pp at inst@h\n at to@pp at inst@h=0.15cm
+\newdimen\n at to@pp at act@w\n at to@pp at act@w=0.15cm
+\newdimen\n at to@pp at space@h\n at to@pp at space@h=0.1cm
+\newdimen\n at to@pp at r\n at to@pp at r=0.5cm
+%    \end{macrocode}
+% 
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Some utilities}
+%
+% \begin{Macro}{\n at to@pp at isclip}
+%   This detects if we're in a node that is being used for clipping
+%
+%    \begin{macrocode}
+%\def\n at to@pp at cliptoken{clip}
+%\def\n at to@pp at isclip{FF\fi%
+%  % \message{^^Jclip is \meaning\pgf at up@clip}%
+%  \ifx\pgf at up@clip\n at to@pp at cliptoken}
+\newif\ifn at to@pp at isclip\n at to@pp at isclipfalse
+%    \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\n at to@pp at saved@fill at color,\n at to@pp at saved@stroke at color}
+%
+%   Macros to hold saved colours.
+
+%    \begin{macrocode}
+\let\n at to@pp at saved@stroke at color\relax
+\let\n at to@pp at saved@fill at color\relax
+%    \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\n at to@pp at stroke@to at fill,\n at to@pp at 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 at to@pp at stroke@to at fill{%
+  %
+  \expandafter\let\expandafter\n at to@pp at saved@stroke at color%
+  \csname\string\color at pgfstrokecolor\endcsname%
+  %                           
+  \expandafter\let\expandafter\n at to@pp at saved@fill at color%
+  \csname\string\color at pgffillcolor\endcsname%
+  %
+  \expandafter\pgf at setfillcolor\n at to@pp at saved@stroke at color%
+  %
+  % \message{^^J=== Set fill to stroke color
+  %   ^^J  Old fill:   \meaning\n at to@pp at saved@fill at color
+  %   ^^J  Old stroke: \meaning\n at to@pp at saved@stroke at color}
+}
+%    \end{macrocode}
+%
+%
+% 
+%    \begin{macrocode}
+\newcommand\n at to@pp at restore@fill{%
+  % \message{^^J=== Restore fill color
+  %   ^^J  Old fill:   \meaning\n at to@pp at saved@fill at color
+  %   ^^J  Old stroke: \meaning\n at to@pp at saved@stroke at color}
+  %
+  \ifx\n at to@pp at saved@fill at color\relax\else%
+    \expandafter\pgf at setfillcolor\n at to@pp at saved@fill at color%
+  \fi%
+  \global\let\n at to@pp at saved@fill at color\relax
+  \global\let\n at to@pp at saved@stroke at color\relax
+}
+%    \end{macrocode}
+%
+% We also make an environment, just to simplify the use
+% 
+%    \begin{macrocode}
+\newenvironment{n at to@pp at stroketofill}{%
+  \pgfscope%
+  \n at to@pp at stroke@to at fill%
+}{%
+  \n at to@pp at restore@fill%
+  \endpgfscope%
+}
+%    \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Faction names as macros}
+% 
+%    \begin{macrocode}
+\def\n at to@pp at friendly{friendly}
+\def\n at to@pp at hostile{hostile}
+\def\n at to@pp at neutral{neutral}
+\def\n at to@pp at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/core.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/echelon.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/echelon.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/echelon.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -0,0 +1,82 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{Echelons}
+%
+%
+% Dimensions
+% 
+%    \begin{macrocode}
+\def\n at to@pp at e@y{.12}
+\def\n at to@pp at e@yy{.24}
+%    \end{macrocode}
+%
+% Paths as macros
+% 
+%    \begin{macrocode}
+\def\n at to@pp at e@d#1{($(#1*\n at to@pp at e@y,0)$) circle(0.09)}
+\def\n at to@pp at e@b#1{%
+  ($(#1*\n at to@pp at e@y,-\n at to@pp at e@y)$) -- ($(#1*\n at to@pp at e@y,\n at to@pp at e@y)$)}
+\def\n at to@pp at e@x#1{%
+  ($(-\n at to@pp at e@y,-\n at to@pp at e@y)+(#1*\n at to@pp at e@y,0)$)--
+  ++(\n at to@pp at e@yy,\n at to@pp at e@yy)
+  ($(-\n at to@pp at e@y, \n at to@pp at e@y)+(#1*\n at to@pp at e@y,0)$)--
+  ++(\n at to@pp at e@yy,-\n at to@pp at 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 at to@pp at e@d{\o}};}},
+  pics/natoapp6c/s/echelon/section/.style={code={
+      \path[draw,fill=pgfstrokecolor,pic actions]
+      \foreach \o in {-1,1}{\n at to@pp at e@d{\o}};}},
+  pics/natoapp6c/s/echelon/platoon/.style={code={
+      \path[draw,fill=pgfstrokecolor,pic actions]
+      \foreach \o in {-2,0,2}{\n at to@pp at e@d{\o}};}},
+  pics/natoapp6c/s/echelon/company/.style={code={
+      \path[draw,pic actions]
+      \foreach \o in {0}{\n at to@pp at e@b{\o}};}},
+  pics/natoapp6c/s/echelon/battalion/.style={code={
+      \path[draw,pic actions]
+      \foreach \o in {-1,1}{\n at to@pp at e@b{\o}};}},
+  pics/natoapp6c/s/echelon/regiment/.style={code={
+      \path[draw,pic actions]
+      \foreach \o in {-2,0,2}{\n at to@pp at e@b{\o}};}},
+  pics/natoapp6c/s/echelon/brigade/.style={code={
+      \path[draw,pic actions]
+      \foreach \o in {0}{\n at to@pp at e@x{\o}};}},
+  pics/natoapp6c/s/echelon/division/.style={code={
+      \path[draw,pic actions]
+      \foreach \o in {-1,1}{\n at to@pp at e@x{\o}};}},
+  pics/natoapp6c/s/echelon/corps/.style={code={
+      \path[draw,pic actions]
+      \foreach \o in {-2,0,2}{\n at to@pp at e@x{\o}};}},
+  pics/natoapp6c/s/echelon/army/.style={code={
+      \path[draw,pic actions]
+      \foreach \o in {-3,-1,1,3}{\n at to@pp at e@x{\o}};}},
+  pics/natoapp6c/s/echelon/army group/.style={code={
+      \path[draw,pic actions]
+      \foreach \o in {-4,-2,0,2,4}{\n at to@pp at e@x{\o}};}},
+  pics/natoapp6c/s/echelon/theatre/.style={code={
+      \path[draw,pic actions]
+      \foreach \o in {-5,-3,-1,1,3,5}{\n at to@pp at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/echelon.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/base.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/base.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/base.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at x=\n at to@pp at r}
+  \saveddimen\liney{\pgf at x=.2cm}
+  \saveddimen\linex{\pgf at x=0.41cm}
+  \savedanchor\center{\pgf at x=0cm\pgf at y=0cm}
+  \savedanchor\upper{\pgf at x=0cm\pgf at y=0.35cm}
+  \anchor{north east}{\pgf at x=\radius\pgf at y=\radius}
+  \anchor{south west}{\pgf at x=-\radius\pgf at y=-\radius}
+  \anchor{north west}{\pgf at x=-\radius\pgf at y=\radius}
+  \anchor{south east}{\pgf at x=\radius\pgf at y=-\radius}
+  \anchor{south}{\pgf at x=0cm\pgf at y=-\radius}
+  \anchor{north}{\pgf at x=0cm\pgf at y=\radius}
+  \anchor{west}{\pgf at x=-\radius\pgf at y=0cm}
+  \anchor{east}{\pgf at x=\radius\pgf at y=0cm}
+  \anchor{center}{\center}
+  \anchor{upper}{\upper}
+  \anchor{lower}{\upper\pgf at y=-\pgf at y}
+  \anchor{left}{\upper\pgf at x=-\pgf at y\pgf at y=0cm}
+  \anchor{right}{\upper\pgf at x=\pgf at y\pgf at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/base.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/friendly.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/friendly.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/friendly.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at to@friendly@@ir{%
+  \southeast \wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+  \pgfpathmoveto{\pgfqpoint{-\wg at tmpa}{\wg at tmpb}}%
+  \cntrl \wg at tmpb=\pgf at y%
+  \pgfpatharc{180}{0}{\wg at tmpa and \wg at tmpb}}
+%    \end{macrocode}
+% 
+% The friendly air command.
+%
+%    \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly air}{%
+  \inheritsavedanchors[from=natoapp6c base]
+  \savedanchor\southeast{%
+    \pgf at x=1.1\n at to@pp at r%
+    \pgf at y=-\n at to@pp at r}
+  \savedanchor\cntrl{\pgf at x=0cm\pgf at y=2.6\n at to@pp at r}
+  \savedanchor\north{\pgf at x=0cm\pgf at y=1.6\n at to@pp at r}
+  \anchor{south east}{\southeast}
+  \anchor{south west}{\southeast\pgf at x=-\pgf at x}
+  \anchor{north east}{\southeast\wg at tmpa=\pgf at x\north\pgf at x=\wg at tmpa}
+  \anchor{north west}{\southeast\wg at tmpa=\pgf at x\north\pgf at x=-\wg at tmpa}
+  \anchor{north}{\north}
+  \anchor{east}{%
+    \north\wg at tmpb\pgf at y%
+    \southeast\wg at tmpc=\pgf at y\wg at tmpa=\pgf at x%
+    \advance\wg at tmpb-\wg at tmpc
+    \divide\wg at tmpb2%
+    \advance\wg at tmpb\wg at tmpc%
+    \pgf at x=\wg at tmpa%
+    \pgf at y=\wg at tmpb}    
+  \anchor{west}{%
+    \north\wg at tmpb\pgf at y%
+    \southeast\wg at tmpc=\pgf at y\wg at tmpa=\pgf at x%
+    \advance\wg at tmpb-\wg at tmpc
+    \divide\wg at tmpb2%
+    \advance\wg at tmpb\wg at tmpc%
+    \pgf at x=-\wg at tmpa%
+    \pgf at y=\wg at tmpb}
+  \anchor{south}{\southeast\pgf at 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 at to@friendly@@ir%
+  }
+  \behindforegroundpath{%
+    \n at 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 at to@friendly at l@nd{%
+  \northeast \wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+  \pgfpathmoveto{\pgfqpoint{ \wg at tmpa}{ \wg at tmpb}}%
+  \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{ \wg at tmpb}}%
+  \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{-\wg at tmpb}}%
+  \pgfpathlineto{\pgfqpoint{ \wg at tmpa}{-\wg at 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 at x=1.5\n at to@pp at r%
+    \pgf at y=\n at to@pp at r}
+  \anchor{north east}{\northeast}
+  \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+  \anchor{south east}{\northeast\pgf at y=-\pgf at y}
+  \anchor{south west}{\northeast\pgf at x=-\pgf at x\pgf at y=-\pgf at y}
+  \anchor{north}{\northeast\pgf at x=0cm}
+  \anchor{south}{\northeast\pgf at x=0cm\pgf at y=-\pgf at y}
+  \anchor{east}{\northeast\pgf at y=0cm}
+  \anchor{west}{\northeast\pgf at x=-\pgf at x\pgf at 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 at to@friendly at l@nd%
+  }
+  \behindforegroundpath{%
+    \n at to@friendly at 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 at to@pp at stroketofill}
+      \n at to@friendly at l@nd%
+      \pgfusepath{stroke}
+      %
+      \northeast \wg at tmpa=\pgf at x\wg at tmpb\pgf at y%
+      \wg at tmpc=\wg at tmpa\advance\wg at tmpc-\n at to@pp at act@w
+      \wg at tmpd=\wg at tmpb\advance\wg at tmpd-\n at to@pp at act@w
+      %
+      \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{\wg at tmpc}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{\wg at tmpc}{\wg at tmpd}}%
+      \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpd}}%
+      \pgfclosepath
+      %
+      \pgfusepath{fill}%
+      \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{-\wg at tmpd}}%
+      \pgfpathlineto{\pgfqpoint{\wg at tmpc}{-\wg at tmpd}}%
+      \pgfpathlineto{\pgfqpoint{\wg at tmpc}{-\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{\wg at tmpa}{-\wg at tmpb}}%
+      \pgfclosepath      
+      \pgfusepath{fill}%
+      %
+      \pgfpathmoveto{\pgfqpoint{-\wg at tmpc}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{\wg at tmpd}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpc}{\wg at tmpd}}%
+      \pgfclosepath
+      \pgfusepath{fill}%
+      %
+      \pgfpathmoveto{\pgfqpoint{-\wg at tmpc}{-\wg at tmpd}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{-\wg at tmpd}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{-\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpc}{-\wg at tmpb}}%
+      \pgfclosepath
+      \pgfusepath{fill}%
+    \end{n at to@pp at 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 at x=\n at to@pp at r%
+    \pgf at y=\n at to@pp at r}
+  \anchor{north east}{\northeast}
+  \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+  \anchor{south east}{\northeast\pgf at y=-\pgf at y}
+  \anchor{south west}{\northeast\pgf at x=-\pgf at x\pgf at y=-\pgf at y}
+  \anchor{north}{\northeast\pgf at x=0cm}
+  \anchor{south}{\northeast\pgf at x=0cm\pgf at y=-\pgf at y}
+  \anchor{east}{\northeast\pgf at y=0cm}
+  \anchor{west}{\northeast\pgf at x=-\pgf at x\pgf at 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 at tmpa\pgf at x%
+    \pgfpathcircle{\pgfqpoint{0cm}{0cm}}{\wg at tmpa}
+  }
+  \behindforegroundpath{%
+    \northeast\wg at tmpa\pgf at x%
+    \pgfpathcircle{\pgfqpoint{0cm}{0cm}}{\wg at 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 at to@pp at stroketofill}
+      \n at to@friendly at l@nd%
+      \pgfusepath{stroke}
+      %
+      \northeast \wg at tmpa=\pgf at y%
+      \wg at tmpb=\wg at tmpa\advance\wg at tmpb\n at to@pp at inst@h%
+      %
+      \pgfpathmoveto{\pgfqpoint{ \n at to@pp at inst@x}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{-\n at to@pp at inst@x}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{-\n at to@pp at inst@x}{\wg at tmpa}}%
+      \pgfpathlineto{\pgfqpoint{ \n at to@pp at inst@x}{\wg at tmpa}}%
+      \pgfclosepath
+      \pgfusepath{fill}%
+    \end{n at to@pp at 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 at to@pp at stroketofill}
+      \n at to@friendly@@ir%
+      \pgfusepath{stroke,clip}%
+      %
+      \cntrl\wg at tmpa=\pgf at y%
+      \north\wg at tmpb=\pgf at y
+      \advance\wg at tmpb-\n at to@pp at space@h
+      %
+      \pgfpathmoveto{\pgfqpoint{ \n at to@pp at r}{\wg at tmpa}}%
+      \pgfpathlineto{\pgfqpoint{-\n at to@pp at r}{\wg at tmpa}}%
+      \pgfpathlineto{\pgfqpoint{-\n at to@pp at r}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{ \n at to@pp at r}{\wg at tmpb}}%
+      \pgfclosepath%
+      \pgfusepath{fill}%
+    \end{n at to@pp at stroketofill}
+  }
+}
+%    \end{macrocode}
+% \end{NatoAppFrame}
+% 
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly sub surface}
+%
+%   Macro for friendly sub surface command
+%
+%    \begin{macrocode}
+\def\n at to@friendly at sub{%
+  \northeast \wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+  \pgfpathmoveto{\pgfqpoint{-\wg at tmpa}{\wg at tmpb}}%
+  \cntrl \wg at tmpb=\pgf at y%
+  \pgfpatharc{180}{0}{\wg at tmpa and \wg at tmpb}}
+%    \end{macrocode}
+% 
+%  The friendly sub surface command.
+%
+%
+%    \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly sub surface}{%
+  \inheritsavedanchors[from=natoapp6c base]
+  \savedanchor\northeast{%
+    \pgf at x=1.1\n at to@pp at r%
+    \pgf at y=\n at to@pp at r}
+  \savedanchor\cntrl{\pgf at x=0cm\pgf at y=-2.6\n at to@pp at r}
+  \savedanchor\south{\pgf at x=0cm\pgf at y=-1.6\n at to@pp at r}
+  \anchor{north east}{\northeast}
+  \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+  \anchor{south east}{\northeast\wg at tmpa=\pgf at x\south\pgf at x=\wg at tmpa}
+  \anchor{south west}{\northeast\wg at tmpa=\pgf at x\south\pgf at x=-\wg at tmpa}
+  \anchor{south}{\south}
+  \anchor{east}{
+    \northeast\wg at tmpb=\pgf at y\wg at tmpa=\pgf at x%
+    \south\wg at tmpc\pgf at y%
+    \advance\wg at tmpb-\wg at tmpc
+    \divide\wg at tmpb2%
+    \advance\wg at tmpb\wg at tmpc%
+    \pgf at x=\wg at tmpa%
+    \pgf at y=\wg at tmpb}
+  \anchor{west}{
+    \northeast\wg at tmpb=\pgf at y\wg at tmpa=\pgf at x%
+    \south\wg at tmpc\pgf at y%
+    \advance\wg at tmpb-\wg at tmpc
+    \divide\wg at tmpb2%
+    \advance\wg at tmpb\wg at tmpc%
+    \pgf at x=-\wg at tmpa%
+    \pgf at y=\wg at tmpb}
+  \anchor{north}{\northeast\pgf at 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 at to@friendly at sub%
+  }
+  \behindforegroundpath{%
+    \n at to@friendly at sub%
+    \pgfusepath{stroke}%
+  }
+}
+%    \end{macrocode}
+% \end{NatoAppFrame}
+% 
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/friendly.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/hostile.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/hostile.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/hostile.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at to@hostile@@ir{%
+  \southeast \wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+  \cntrl \wg at tmpc=\pgf at y%
+  \north \wg at tmpd=\pgf at y%
+  \pgfpathmoveto{\pgfqpoint{-\wg at tmpa}{\wg at tmpb}}%
+  \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{\wg at tmpc}}%
+  \pgfpathlineto{\pgfqpoint{ 0cm}{\wg at tmpd}}%
+  \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpc}}%
+  \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+}
+%    \end{macrocode}
+% 
+%
+%  The hostile air command. 
+%
+%
+%    \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile air}{%
+  \inheritsavedanchors[from=natoapp6c base]
+  \savedanchor\southeast{%
+    \pgf at x=\n at to@pp at r%
+    \pgf at y=-\n at to@pp at r}
+  \savedanchor\cntrl{%
+    \pgf at x=\n at to@pp at r%
+    \pgf at y=0.414\n at to@pp at r% (sqrt(2)-1)
+  }
+  \savedanchor\north{\pgf at x=0cm\pgf at y=1.414\n at to@pp at r}
+  \anchor{south east}{\southeast}
+  \anchor{south west}{\southeast\pgf at x=-\pgf at x}
+  \anchor{north east}{\southeast\wg at tmpa=\pgf at x\north\pgf at x=\wg at tmpa}
+  \anchor{north west}{\southeast\wg at tmpa=\pgf at x\north\pgf at x=-\wg at tmpa}
+  \anchor{north}{\north}
+  \anchor{east}{%
+    \north\wg at tmpb\pgf at y%
+    \southeast\wg at tmpc=\pgf at y\wg at tmpa=\pgf at x%
+    \advance\wg at tmpb-\wg at tmpc
+    \divide\wg at tmpb2%
+    \advance\wg at tmpb\wg at tmpc%
+    \pgf at x=\wg at tmpa%
+    \pgf at y=\wg at tmpb}    
+  \anchor{west}{%
+    \north\wg at tmpb\pgf at y%
+    \southeast\wg at tmpc=\pgf at y\wg at tmpa=\pgf at x%
+    \advance\wg at tmpb-\wg at tmpc
+    \divide\wg at tmpb2%
+    \advance\wg at tmpb\wg at tmpc%
+    \pgf at x=-\wg at tmpa%
+    \pgf at y=\wg at tmpb}
+  \anchor{south}{\southeast\pgf at 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 at to@hostile@@ir%
+  }
+  \behindforegroundpath{%
+    \n at 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 at to@hostile at l@nd{%
+  \northeast \wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+  \pgfpathmoveto{\pgfqpoint{ \wg at tmpa}{ 0cm}}%
+  \pgfpathlineto{\pgfqpoint{ 0cm}{ \wg at tmpb}}%
+  \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{ 0cm}}%
+  \pgfpathlineto{\pgfqpoint{ 0cm}{-\wg at tmpb}}%
+  \pgfclosepath}
+%    \end{macrocode}
+%    
+%   The hostile land command.
+%   
+%    \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile land}{%
+  \inheritsavedanchors[from=natoapp6c base]
+  \savedanchor\northeast{%
+    \pgf at x=1.414\n at to@pp at r%
+    \pgf at y=1.414\n at to@pp at r}
+  \anchor{north east}{\northeast}
+  \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+  \anchor{south east}{\northeast\pgf at y=-\pgf at y}
+  \anchor{south west}{\northeast\pgf at x=-\pgf at x\pgf at y=-\pgf at y}
+  \anchor{north}{\northeast\pgf at x=0cm}
+  \anchor{south}{\northeast\pgf at x=0cm\pgf at y=-\pgf at y}
+  \anchor{east}{\northeast\pgf at y=0cm}
+  \anchor{west}{\northeast\pgf at x=-\pgf at x\pgf at 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 at to@hostile at l@nd%
+  }
+  \behindforegroundpath{%
+    \n at to@hostile at 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 at to@pp at stroketofill}
+      \n at to@hostile at l@nd%
+      \pgfusepath{stroke}
+      %
+      \northeast \wg at tmpb=\pgf at y%
+      \wg at tmpa=0.707\n at to@pp at act@w
+      \wg at tmpc=\wg at tmpb\advance\wg at tmpc-1.414\n at to@pp at act@w
+      \wg at tmpd=\wg at tmpb\advance\wg at tmpd-\wg at tmpa
+      %
+      \pgfpathmoveto{\pgfqpoint{ \wg at tmpa}{\wg at tmpd}}%
+      \pgfpathlineto{\pgfqpoint{      0cm}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{\wg at tmpd}}%
+      \pgfpathlineto{\pgfqpoint{      0cm}{\wg at tmpc}}%
+      \pgfclosepath
+      \pgfusepath{fill}%
+      %
+      \pgfpathmoveto{\pgfqpoint{-\wg at tmpc}{0cm}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpd}{\wg at tmpa}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpb}{0cm}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpd}{-\wg at tmpa}}%
+      \pgfclosepath
+      \pgfusepath{fill}%
+      %
+      \pgfpathmoveto{\pgfqpoint{ \wg at tmpa}{-\wg at tmpd}}%
+      \pgfpathlineto{\pgfqpoint{      0cm}{-\wg at tmpc}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{-\wg at tmpd}}%
+      \pgfpathlineto{\pgfqpoint{      0cm}{-\wg at tmpb}}%
+      \pgfclosepath
+      \pgfusepath{fill}%
+      %
+      \pgfpathmoveto{\pgfqpoint{\wg at tmpb}{0cm}}%
+      \pgfpathlineto{\pgfqpoint{\wg at tmpd}{\wg at tmpa}}%
+      \pgfpathlineto{\pgfqpoint{\wg at tmpc}{0cm}}%
+      \pgfpathlineto{\pgfqpoint{\wg at tmpd}{-\wg at tmpa}}%
+      \pgfclosepath
+      \pgfusepath{fill}%
+    \end{n at to@pp at 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 at to@pp at stroketofill}
+      \n at to@hostile at l@nd%
+      \pgfusepath{stroke}
+      %
+      \northeast \wg at tmpa=\pgf at x\wg at tmpb\pgf at y%
+      \wg at tmpc=\wg at tmpb
+      \advance\wg at tmpc\n at to@pp at inst@h%
+      \advance\wg at tmpc-0.05cm%
+      %
+      \pgfpathmoveto{\pgfqpoint{ \wg at tmpa}{0cm}}
+      \pgfpathlineto{\pgfqpoint{ \wg at tmpa}{\wg at tmpc}}
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{\wg at tmpc}}
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{0cm}}
+      \pgfpathlineto{\pgfqpoint{ 0cm}{\wg at tmpb}}
+      \pgfclosepath%
+      \pgfusepath{clip}
+      %
+      \wg at tmpd=\wg at tmpb%
+      \advance\wg at tmpd-\n at to@pp at inst@h%
+      %
+      \pgfpathmoveto{\pgfqpoint{ \n at to@pp at inst@x}{\wg at tmpc}}%
+      \pgfpathlineto{\pgfqpoint{-\n at to@pp at inst@x}{\wg at tmpc}}%
+      \pgfpathlineto{\pgfqpoint{-\n at to@pp at inst@x}{\wg at tmpd}}%
+      \pgfpathlineto{\pgfqpoint{ \n at to@pp at inst@x}{\wg at tmpd}}%
+      \pgfclosepath
+      \pgfusepath{fill}%
+    \end{n at to@pp at 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 at to@pp at stroketofill}
+      \n at to@hostile@@ir%
+      \pgfusepath{stroke,clip}%
+      %
+      \north\wg at tmpa=\pgf at y\wg at tmpb=\pgf at y
+      \advance\wg at tmpb-\n at to@pp at space@h
+      %
+      \pgfpathmoveto{\pgfqpoint{ \n at to@pp at r}{\wg at tmpa}}%
+      \pgfpathlineto{\pgfqpoint{-\n at to@pp at r}{\wg at tmpa}}%
+      \pgfpathlineto{\pgfqpoint{-\n at to@pp at r}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{ \n at to@pp at r}{\wg at tmpb}}%
+      \pgfclosepath%
+      \pgfusepath{fill}%
+    \end{n at to@pp at stroketofill}
+  }
+}
+%    \end{macrocode}
+% \end{NatoAppFrame}
+% 
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile sub surface}
+%
+% Macro for hostile sub surface command
+%
+%    \begin{macrocode}
+\def\n at to@hostile at sub{%
+  \northeast \wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+  \cntrl \wg at tmpc=\pgf at y%
+  \south \wg at tmpd=\pgf at y%
+  \pgfpathmoveto{\pgfqpoint{-\wg at tmpa}{\wg at tmpb}}%
+  \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{\wg at tmpc}}%
+  \pgfpathlineto{\pgfqpoint{ 0cm}{\wg at tmpd}}%
+  \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpc}}%
+  \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+}
+%    \end{macrocode}
+%    
+%   The hostile sub surface command
+%   
+%    \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile sub surface}{%
+  \inheritsavedanchors[from=natoapp6c base]
+  \savedanchor\northeast{%
+    \pgf at x=\n at to@pp at r%
+    \pgf at y=\n at to@pp at r}
+  \savedanchor\cntrl{\pgf at x=\n at to@pp at r\pgf at y=-0.414\n at to@pp at r}
+  \savedanchor\south{\pgf at x=0cm\pgf at y=-1.414\n at to@pp at r}
+  \anchor{north east}{\northeast}
+  \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+  \anchor{south east}{\northeast\wg at tmpa=\pgf at x\south\pgf at x=\wg at tmpa}
+  \anchor{south west}{\northeast\wg at tmpa=\pgf at x\south\pgf at x=-\wg at tmpa}
+  \anchor{south}{\south}
+  \anchor{east}{
+    \northeast\wg at tmpb=\pgf at y\wg at tmpa=\pgf at x%
+    \south\wg at tmpc\pgf at y%
+    \advance\wg at tmpb-\wg at tmpc
+    \divide\wg at tmpb2%
+    \advance\wg at tmpb\wg at tmpc%
+    \pgf at x=\wg at tmpa%
+    \pgf at y=\wg at tmpb}
+  \anchor{west}{
+    \northeast\wg at tmpb=\pgf at y\wg at tmpa=\pgf at x%
+    \south\wg at tmpc\pgf at y%
+    \advance\wg at tmpb-\wg at tmpc
+    \divide\wg at tmpb2%
+    \advance\wg at tmpb\wg at tmpc%
+    \pgf at x=-\wg at tmpa%
+    \pgf at y=\wg at tmpb}
+  \anchor{north}{\northeast\pgf at 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 at to@hostile at sub%
+  }
+  \behindforegroundpath{%
+    \n at to@hostile at sub%
+    \pgfusepath{stroke}%
+  }
+}
+%    \end{macrocode}
+% \end{NatoAppFrame}
+% 
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/hostile.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/neutral.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/neutral.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/neutral.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -0,0 +1,405 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{`Neutral' node shapes}
+%
+%
+% Macro for neutral shapes
+%
+%    \begin{macrocode}
+\def\n at to@pp at neutr@l at init{%
+  \northeast\wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+  \def\n at to@pp at neutr@l at left  {\pgflineto{\pgfqpoint{-\wg at tmpa}{-\wg at tmpb}}}%
+  \def\n at to@pp at neutr@l at right {\pgflineto{\pgfqpoint{ \wg at tmpa}{ \wg at tmpb}}}%
+  \def\n at to@pp at neutr@l at top   {\pgflineto{\pgfqpoint{-\wg at tmpa}{ \wg at tmpb}}}%
+  \def\n at to@pp at neutr@l at bottom{\pgflineto{\pgfqpoint{ \wg at tmpa}{-\wg at tmpb}}}%
+  \def\n at to@pp at neutr@l at nw    {\pgfmoveto{\pgfqpoint{-\wg at tmpa}{ \wg at tmpb}}}%
+  \def\n at to@pp at neutr@l at ne    {\pgfmoveto{\pgfqpoint{ \wg at tmpa}{ \wg at tmpb}}}%
+  \def\n at to@pp at neutr@l at se    {\pgfmoveto{\pgfqpoint{ \wg at tmpa}{-\wg at tmpb}}}%
+  \def\n at to@pp at neutr@l at sw    {\pgfmoveto{\pgfqpoint{-\wg at tmpa}{-\wg at 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 at x=\n at to@pp at r\pgf at y=\n at to@pp at r}
+  \anchor{north east}{\northeast}
+  \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+  \anchor{south east}{\northeast\pgf at y=-\pgf at y}
+  \anchor{south west}{\northeast\pgf at x=-\pgf at x\pgf at y=-\pgf at y}
+  \anchor{north}{\northeast\pgf at x=0cm}
+  \anchor{east}{\northeast\pgf at y=0cm}
+  \anchor{west}{\northeast\pgf at x=-\pgf at x\pgf at y=0cm}
+  \anchor{south}{\northeast\pgf at x=0cm\pgf at y=-\pgf at 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 at to@pp at neutr@l at init%
+    \n at to@pp at neutr@l at se
+    \n at to@pp at neutr@l at right%
+    \n at to@pp at neutr@l at top%
+    \n at to@pp at neutr@l at left%
+  }
+  \behindforegroundpath{%
+    \n at to@pp at neutr@l at init%
+    \n at to@pp at neutr@l at se
+    \n at to@pp at neutr@l at right%
+    \n at to@pp at neutr@l at top%
+    \n at to@pp at neutr@l at 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 at to@pp at neutr@l at init%
+    \n at to@pp at neutr@l at ne
+    \n at to@pp at neutr@l at top%
+    \n at to@pp at neutr@l at left%
+    \n at to@pp at neutr@l at bottom%
+    \pgfclosepath
+  }
+  \behindforegroundpath{%
+    \n at to@pp at neutr@l at init%
+    \n at to@pp at neutr@l at ne
+    \n at to@pp at neutr@l at top%
+    \n at to@pp at neutr@l at left%
+    \n at to@pp at neutr@l at 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 at to@pp at stroketofill}
+      \n at to@pp at neutr@l at init%
+      \n at to@pp at neutr@l at ne
+      \n at to@pp at neutr@l at top%
+      \n at to@pp at neutr@l at left%
+      \n at to@pp at neutr@l at bottom%
+      \pgfclosepath
+      \pgfusepath{stroke}
+      %
+      \northeast \wg at tmpa=\pgf at x\wg at tmpb\pgf at y%
+      \wg at tmpc=\wg at tmpa\advance\wg at tmpc-\n at to@pp at act@w
+      \wg at tmpd=\wg at tmpb\advance\wg at tmpd-\n at to@pp at act@w
+      %
+      \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{\wg at tmpc}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{\wg at tmpc}{\wg at tmpd}}%
+      \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpd}}%
+      \pgfclosepath
+      \pgfusepath{fill}%
+      %
+      \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{-\wg at tmpd}}%
+      \pgfpathlineto{\pgfqpoint{\wg at tmpc}{-\wg at tmpd}}%
+      \pgfpathlineto{\pgfqpoint{\wg at tmpc}{-\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{\wg at tmpa}{-\wg at tmpb}}%
+      \pgfclosepath
+      \pgfusepath{fill}%
+      %
+      \pgfpathmoveto{\pgfqpoint{-\wg at tmpc}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{\wg at tmpd}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpc}{\wg at tmpd}}%
+      \pgfclosepath
+      \pgfusepath{fill}%
+      %
+      \pgfpathmoveto{\pgfqpoint{-\wg at tmpc}{-\wg at tmpd}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{-\wg at tmpd}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{-\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpc}{-\wg at tmpb}}%
+      \pgfclosepath
+      \pgfusepath{fill}%
+    \end{n at to@pp at 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 at to@pp at stroketofill}
+      \n at to@pp at neutr@l at init%
+      \n at to@pp at neutr@l at ne
+      \n at to@pp at neutr@l at top%
+      \n at to@pp at neutr@l at left%
+      \n at to@pp at neutr@l at bottom%
+      \pgfclosepath
+      \pgfusepath{stroke}
+      %
+      \northeast \wg at tmpa=\pgf at y%
+      \wg at tmpb=\wg at tmpa\advance\wg at tmpb\n at to@pp at inst@h%
+      %
+      \pgfpathmoveto{\pgfqpoint{ \n at to@pp at inst@x}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{-\n at to@pp at inst@x}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{-\n at to@pp at inst@x}{\wg at tmpa}}%
+      \pgfpathlineto{\pgfqpoint{ \n at to@pp at inst@x}{\wg at tmpa}}%
+      \pgfclosepath
+      \pgfusepath{fill}%
+    \end{n at to@pp at 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 at to@pp at stroketofill}
+      \n at to@pp at neutr@l at init%
+      \n at to@pp at neutr@l at se
+      \n at to@pp at neutr@l at right%
+      \n at to@pp at neutr@l at top%
+      \n at to@pp at neutr@l at left%
+      \pgfusepath{stroke}%
+      %
+      \n at to@pp at neutr@l at ne
+      \n at to@pp at neutr@l at top%
+      \northeast\wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+      \advance\wg at tmpb-\n at to@pp at space@h
+      %
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{\wg at tmpc}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{ \wg at tmpa}{\wg at tmpb}}%
+      \pgfclosepath%
+      \pgfusepath{fill}%
+    \end{n at to@pp at 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 at to@pp at neutr@l at init%
+    \n at to@pp at neutr@l at nw
+    \n at to@pp at neutr@l at left%
+    \n at to@pp at neutr@l at bottom%
+    \n at to@pp at neutr@l at right%
+  }
+  \behindforegroundpath{%
+    \n at to@pp at neutr@l at init%
+    \n at to@pp at neutr@l at nw
+    \n at to@pp at neutr@l at left%
+    \n at to@pp at neutr@l at bottom%
+    \n at to@pp at neutr@l at right%
+    \pgfusepath{stroke}%
+  }
+}
+%    \end{macrocode}
+% \end{NatoAppFrame}
+% 
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/neutral.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/unknown.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/unknown.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/unknown.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -0,0 +1,483 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{`Unknown' node shapes}
+%
+%
+% Macro to define unknown path elements
+%
+%    \begin{macrocode}
+\def\n at to@pp at unknown@init{%
+  \def\n at to@pp at unknown@top{%
+    \innernortheast \wg at tmpa=\pgf at x%
+    \cntrlnortheast \wg at tmpb=\pgf at x%
+    \pgfpathcurveto{%
+      \pgfqpoint{ \wg at tmpa}{\wg at tmpb}}{%
+      \pgfqpoint{-\wg at tmpa}{\wg at tmpb}}{%
+      \pgfqpoint{-\wg at tmpa}{\wg at tmpa}}}
+  \def\n at to@pp at unknown@left{%
+    \innernortheast \wg at tmpa=\pgf at x%
+    \cntrlnortheast \wg at tmpb=\pgf at x%
+    \pgfpathcurveto{%
+      \pgfqpoint{-\wg at tmpb}{ \wg at tmpa}}{%
+      \pgfqpoint{-\wg at tmpb}{-\wg at tmpa}}{%
+      \pgfqpoint{-\wg at tmpa}{-\wg at tmpa}}}
+  \def\n at to@pp at unknown@bottom{%
+    \innernortheast \wg at tmpa=\pgf at x%
+    \cntrlnortheast \wg at tmpb=\pgf at x%
+    \pgfpathcurveto{%
+      \pgfqpoint{-\wg at tmpa}{-\wg at tmpb}}{%
+      \pgfqpoint{ \wg at tmpa}{-\wg at tmpb}}{%
+      \pgfqpoint{ \wg at tmpa}{-\wg at tmpa}}}
+  \def\n at to@pp at unknown@right{%
+    \innernortheast \wg at tmpa=\pgf at x%
+    \cntrlnortheast \wg at tmpb=\pgf at x%
+    \pgfpathcurveto{%
+      \pgfqpoint{ \wg at tmpb}{-\wg at tmpa}}{%
+      \pgfqpoint{ \wg at tmpb}{ \wg at tmpa}}{%
+      \pgfqpoint{ \wg at tmpa}{ \wg at 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 at x=.7\n at to@pp at r\pgf at y=.7\n at to@pp at r}
+  \savedanchor\cntrlnortheast{\pgf at x=1.6\n at to@pp at r\pgf at y=1.6\n at to@pp at r}
+  \savedanchor\northeast{\pgf at x=1.4\n at to@pp at r\pgf at y=1.4\n at to@pp at r}
+  \anchor{inner north east}{\innernortheast}
+  \anchor{inner north west}{\innernortheast\pgf at x=-\pgf at x}
+  \anchor{inner south west}{\innernortheast\pgf at x=-\pgf at x\pgf at y=-\pgf at y}
+  \anchor{inner south east}{\innernortheast\pgf at y=-\pgf at y}
+  \anchor{north east}{\northeast}
+  \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+  \anchor{south west}{\northeast\pgf at x=-\pgf at x\pgf at y=-\pgf at y}
+  \anchor{south east}{\northeast\pgf at y=-\pgf at y}
+  \anchor{north}{\northeast\pgf at x=0cm}
+  \anchor{east}{\northeast\pgf at y=0cm}
+  \anchor{south}{\northeast\pgf at x=0cm\pgf at y=-\pgf at y}
+  \anchor{west}{\northeast\pgf at x=-\pgf at x\pgf at 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 at to@pp at unknown@init
+    \innernortheast \wg at tmpa=\pgf at x%
+    \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{-\wg at tmpa}}%
+    \n at to@pp at unknown@right %
+    \n at to@pp at unknown@top   %
+    \n at to@pp at unknown@left  %
+    \n at to@pp at unknown@bottom%
+  }
+  \behindforegroundpath{%
+    \n at to@pp at unknown@init
+    \innernortheast \wg at tmpa=\pgf at x%
+    \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{-\wg at tmpa}}%
+    \n at to@pp at unknown@right %
+    \n at to@pp at unknown@top   %
+    \n at to@pp at unknown@left  %
+    \n at to@pp at 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 at x=0cm\pgf at y=-\pgf at y}
+  \anchor{south east}{
+    \northeast\wg at tmpa=\pgf at x
+    \innernortheast\pgf at y=-\pgf at y
+    \pgf at x=\wg at tmpa}
+  \anchor{south west}{
+    \northeast\wg at tmpa=\pgf at x
+    \innernortheast\pgf at y=-\pgf at y
+    \pgf at x=-\wg at tmpa}
+  \backgroundpath{%
+    \n at to@pp at unknown@init
+    \innernortheast \wg at tmpa=\pgf at x%
+    \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{-\wg at tmpa}}%
+    \n at to@pp at unknown@right %
+    \n at to@pp at unknown@top   %
+    \n at to@pp at unknown@left  %
+    \ifn at to@pp at isclip
+    \pgfpathlineto{\pgfqpoint{0cm}{-\radius}}
+    \pgfpathclose
+    \fi
+  }
+  \behindforegroundpath{%
+    \n at to@pp at unknown@init
+    \innernortheast \wg at tmpa=\pgf at x%
+    \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{-\wg at tmpa}}%
+    \n at to@pp at unknown@right %
+    \n at to@pp at unknown@top   %
+    \n at to@pp at 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 at to@pp at unknown@init
+    \innernortheast \wg at tmpa=\pgf at x%
+    \begin{n at to@pp at stroketofill}
+      \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{-\wg at tmpa}}%
+      \n at to@pp at unknown@right %
+      \n at to@pp at unknown@top   %
+      \n at to@pp at unknown@left  %
+      \n at to@pp at unknown@bottom%
+      \pgfusepath{stroke,clip}
+      %
+      \northeast\wg at tmpa\pgf at x
+      \advance\wg at tmpa0.005cm
+      \wg at tmpb=\wg at tmpa
+      \advance\wg at tmpb-\n at to@pp at act@w
+      \wg at tmpc=\n at to@pp at act@w
+      \divide\wg at tmpc2
+      %
+      \pgfpathmoveto{\pgfqpoint{ \wg at tmpc}{\wg at tmpa}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpc}{\wg at tmpa}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpc}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{ \wg at tmpc}{\wg at tmpb}}%
+      \pgfclosepath%
+      \pgfusepath{fill}
+      %
+      \pgfpathmoveto{\pgfqpoint{ \wg at tmpc}{-\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpc}{-\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpc}{-\wg at tmpa}}%
+      \pgfpathlineto{\pgfqpoint{ \wg at tmpc}{-\wg at tmpa}}%
+      \pgfclosepath%
+      \pgfusepath{fill}
+      %
+      \pgfpathmoveto{\pgfqpoint{ \wg at tmpa}{ \wg at tmpc}}%
+      \pgfpathlineto{\pgfqpoint{ \wg at tmpb}{ \wg at tmpc}}%
+      \pgfpathlineto{\pgfqpoint{ \wg at tmpb}{-\wg at tmpc}}%
+      \pgfpathlineto{\pgfqpoint{ \wg at tmpa}{-\wg at tmpc}}%
+      \pgfclosepath%
+      \pgfusepath{fill}
+      %
+      \pgfpathmoveto{\pgfqpoint{-\wg at tmpb}{ \wg at tmpc}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{ \wg at tmpc}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{-\wg at tmpc}}%
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpb}{-\wg at tmpc}}%
+      \pgfclosepath%
+      \pgfusepath{fill}
+    \end{n at to@pp at 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 at to@pp at unknown@init
+    \innernortheast \wg at tmpa=\pgf at x%
+
+    \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{-\wg at tmpa}}%
+    \n at to@pp at unknown@right %
+    \n at to@pp at unknown@top   %
+    \n at to@pp at unknown@left  %
+    \n at to@pp at unknown@bottom%
+    \pgfusepath{stroke}
+    % 
+    \begin{n at to@pp at stroketofill}
+      \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{\wg at tmpa}}%
+      \n at to@pp at unknown@top   %
+      %
+      \northeast\wg at tmpb=\pgf at y\wg at tmpc=\pgf at y%
+      \advance\wg at tmpb\n at to@pp at inst@h%
+      \advance\wg at tmpb-0.05cm%
+      \advance\wg at tmpc-\n at to@pp at inst@h%
+      \advance\wg at tmpc-\n at to@pp at inst@h%
+      %
+      \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{ \wg at tmpa}{\wg at tmpb}}%
+      \pgfclosepath%
+      \pgfusepath{clip}%
+      %
+      \pgfpathmoveto{\pgfqpoint{ \n at to@pp at inst@x}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{-\n at to@pp at inst@x}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{-\n at to@pp at inst@x}{\wg at tmpc}}%
+      \pgfpathlineto{\pgfqpoint{ \n at to@pp at inst@x}{\wg at tmpc}}%
+      \pgfclosepath%
+      \pgfusepath{fill}%
+    \end{n at to@pp at 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 at to@pp at unknown@init
+    \innernortheast \wg at tmpa=\pgf at x%
+    \begin{n at to@pp at stroketofill}
+      \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{-\wg at tmpa}}%
+      \n at to@pp at unknown@right %
+      \n at to@pp at unknown@top   %
+      \n at to@pp at unknown@left  %
+      \pgfusepath{stroke,clip}%
+      % 
+      \northeast\wg at tmpa=\pgf at y\wg at tmpb=\pgf at y
+      \advance\wg at tmpb-\n at to@pp at space@h
+      %
+      \pgfpathmoveto{\pgfqpoint{ \radius}{\wg at tmpa}}%
+      \pgfpathlineto{\pgfqpoint{-\radius}{\wg at tmpa}}%
+      \pgfpathlineto{\pgfqpoint{-\radius}{\wg at tmpb}}%
+      \pgfpathlineto{\pgfqpoint{ \radius}{\wg at tmpb}}%
+      \pgfclosepath%
+      \pgfusepath{fill}%
+    \end{n at to@pp at 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 at x=0cm}
+  \anchor{north east}{
+    \northeast\wg at tmpa=\pgf at x
+    \innernortheast\pgf at y=\pgf at y
+    \pgf at x=\wg at tmpa}
+  \anchor{north west}{
+    \northeast\wg at tmpa=\pgf at x
+    \innernortheast\pgf at y=\pgf at y
+    \pgf at x=-\wg at tmpa}
+  \backgroundpath{%
+    \n at to@pp at unknown@init
+    \innernortheast \wg at tmpa=\pgf at x%
+    \pgfpathmoveto{\pgfqpoint{-\wg at tmpa}{\wg at tmpa}}%
+    \n at to@pp at unknown@left %
+    \n at to@pp at unknown@bottom   %
+    \n at to@pp at unknown@right  %
+    \ifn at to@pp at isclip
+    \pgfpathlineto{\pgfqpoint{0cm}{\radius}}
+    \pgfpathclose
+    \fi
+  }
+  \behindforegroundpath{%
+    \n at to@pp at unknown@init
+    \innernortheast \wg at tmpa=\pgf at x%
+    \pgfpathmoveto{\pgfqpoint{-\wg at tmpa}{\wg at tmpa}}%
+    \n at to@pp at unknown@left %
+    \n at to@pp at unknown@bottom   %
+    \n at to@pp at unknown@right  %
+    \pgfusepath{stroke}}
+}
+%    \end{macrocode}
+% \end{NatoAppFrame}
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/frames/unknown.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/list.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/list.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/list.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -0,0 +1,266 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \begin{Macro}{\n at to@pp at s@ll}
+%
+%   A list of all defined symbols
+%
+%    \begin{macrocode}
+\def\n at to@pp at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/list.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/shape.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/shape.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/shape.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at 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 at id,
+  fac/.store in=\natoapp at fac,
+  cmd/.store in=\natoapp at cmd,
+  ech/.store in=\natoapp at 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 at 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 at main,
+%               \natoapp at left,
+%               \natoapp at right,
+%               \natoapp at upper,
+%               \natoapp at lower,
+%               \natoapp at 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 at decoy\natoapp at decoyfalse
+\tikzset{
+  /natoapp6c/.cd,
+  main/.store in=\natoapp at main,   main/.initial=,%
+  left/.store in=\natoapp at left,   left/.initial=,%    
+  right/.store in=\natoapp at right, right/.initial=,%
+  upper/.store in=\natoapp at upper, upper/.initial=,%
+  lower/.store in=\natoapp at lower, lower/.initial=,%
+  top/.store in=\natoapp at upper,%   
+  bottom/.store in=\natoapp at lower,%
+  below/.store in=\natoapp at below, below/.initial=,%
+  frame/.store in=\natoapp at frame, frame/.initial=,%
+  decoy/.is if=natoapp at 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 at to@pp at below,\ifn at to@pp at mod}
+%
+%   We define an \cs{if} to allow us to detect if something is
+%   rendered below the frame
+% 
+%    \begin{macrocode}
+\newif\ifn at to@pp at below\n at to@pp at belowfalse%
+\newif\ifn at to@pp at mod\n at to@pp at 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 at x=0cm\pgf at y=0cm}
+  \savedmacro\id{%
+    \n at to@pp at dbg{3}{NATO App6(c) id (set): \meaning\natoapp at id}
+    \@ifundefined{natoapp at id}{\let\natoapp at id\pgfutil at empty}{}%
+    \ifx\natoapp at id\pgfutil at empty\relax%
+      \wg at r@ndom at id%
+      \edef\id{natoapp6c\wg at uuid}%
+    \else%
+      \edef\id{\natoapp at id}%
+    \fi%
+    \n at to@pp at dbg{3}{NATO App6(c) id: \meaning\id}}      
+  \savedmacro\frameshape{%
+    \let\frameshape\pgfutil at empty%
+    \@ifundefined{natoapp at cmd}{\def\frameshape{base}}{%
+      \edef\frameshape{\natoapp at cmd}
+      \@ifundefined{natoapp at fac}{\def\frameshape{base}}{%
+        \edef\frameshape{\natoapp at fac\space\frameshape}}}
+    \n at to@pp at dbg{3}{NATO App6(c) frame shape: \meaning\frameshape}}
+  \savedmacro\frameopt{%
+    \let\frameopt\pgfutil at empty%
+    \@ifundefined{natoapp at frame}{}{%
+      \edef\frameopt{\natoapp at frame}}
+    \n at to@pp at 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 at sub@nchor{M\id}{north east}}
+  \anchor{north west}{\wg at sub@nchor{M\id}{north west}}
+  \anchor{south east}{\wg at sub@nchor{M\id}{south east}}
+  \anchor{south west}{\wg at sub@nchor{M\id}{south west}}
+  \anchor{north}     {\wg at sub@nchor{M\id}{north}}
+  \anchor{west}      {\wg at sub@nchor{M\id}{west}}
+  \anchor{south}     {\wg at sub@nchor{M\id}{south}}
+  \anchor{east}      {\wg at sub@nchor{M\id}{east}}
+  \anchor{upper}     {\wg at sub@nchor{M\id}{upper}}
+  \anchor{lower}     {\wg at sub@nchor{M\id}{lower}}
+  \anchor{left}      {\wg at sub@nchor{M\id}{left}}
+  \anchor{right}     {\wg at sub@nchor{M\id}{right}}
+%    \end{macrocode}
+%
+%  The next two anchors are a little funny.
+%
+%    \begin{macrocode}
+  \anchor{echelon}   {%
+    \n at to@pp at dbg{3}{NATO App6(c) get echelon anchor}%
+    \wg at sub@nchor{M\id}{north}%
+    \wg at tmpa=\n at to@pp at e@y cm%
+    \advance\pgf at y\wg at tmpa%
+  }%
+  \anchor{below}     {%
+    \n at to@pp at dbg{3}{NATO App6(c) get below anchor}%
+    \wg at sub@nchor{M\id}{south}
+    \wg at tmpa=\n at to@pp at e@yy cm%
+    \advance\pgf at y-\wg at 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 at to@pp at dbg{3}{NATO App6(c) background path: \meaning\id
+      ^^J  ID:      \meaning\natoapp at id
+      ^^J  Faction: \meaning\natoapp at fac
+      ^^J  Command: \meaning\natoapp at cmd
+      ^^J  Echelon: \meaning\natoapp at ech
+      ^^J  Main:    \meaning\natoapp at main
+      ^^J  Left:    \meaning\natoapp at left
+      ^^J  Right:   \meaning\natoapp at right
+      ^^J  Upper:   \meaning\natoapp at upper
+      ^^J  Lower:   \meaning\natoapp at lower
+      ^^J  Below:   \meaning\natoapp at below
+      ^^J  Shape:   \meaning\frameshape
+      ^^J  Options: \meaning\frameopt}
+    \natoapp at report
+    \n at to@pp at modfalse
+    \n at to@pp at belowfalse
+%    \end{macrocode}
+%
+% If the symbol is empty, then do nothing.
+%
+%    \begin{macrocode}
+    \ifx\frameshape\pgfutil at empty%
+    \n at to@pp at 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 at to@pp at iscliptrue%
+      \n at to@pp at dbg{2}{NATO App6(c) frame node M (clip)}
+      \pgfnode{natoapp6c \frameshape}{center}{}{M}{\pgfusepath{clip}}
+      \n at to@pp at 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 at opt{[\frameopt]}
+      \expandafter\scope\tmp at opt
+      % Get fill color {possibly from frame key}
+      \expandafter\let\expandafter\tmp at fill%
+      \csname\string\color at 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 at fill\relax\else%
+      \n at to@pp at 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 at main}{}{
+        \n at to@pp at dbg{2}{NATO App6(c) mains: \meaning\natoapp at main}
+        \begin{scope}[natoapp6c/main]
+          \wg at pic@all{\natoapp at 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 at to@pp at modtrue
+      \n at to@pp at 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 at lower}{}{%
+        \begin{scope}%
+          \wg at pic@all{\natoapp at lower}{natoapp6c/s/}{M.lower}{%
+            natoapp6c/modifiers,natoapp6c/lower}%
+        \end{scope}}%     
+      % Render uppers
+      \@ifundefined{natoapp at upper}{}{%
+        \begin{scope}[]
+          \wg at pic@all{\natoapp at upper}{natoapp6c/s/}{M.upper}{%
+            natoapp6c/modifiers,natoapp6c/upper}%
+        \end{scope}}%
+      % Render lefts
+      \@ifundefined{natoapp at left}{}{%
+        \begin{scope}[]
+          \wg at pic@all{\natoapp at left}{natoapp6c/s/}{M.left}{%
+            natoapp6c/modifiers,natoapp6c/left}%
+        \end{scope}}%
+      % Render rights
+      \@ifundefined{natoapp at right}{}{%
+        \begin{scope}[]
+          \wg at pic@all{\natoapp at right}{natoapp6c/s/}{M.right}{%
+            natoapp6c/modifiers,natoapp6c/right}%
+        \end{scope}}%     
+      % Modififiers end 
+      \n at to@pp at 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 at to@pp at dbg{2}{NATO App6(c) foreground path:
+      ^^J  Echelon: \meaning\natoapp at ech
+      ^^J  Symbol:  \meaning\frameshape
+      ^^J  Below:   \meaning\natoapp at below
+      ^^J  Frame:   \meaning\frameopt}
+    %
+%    \end{macrocode}
+%
+% We check if we have a frame.  If not, stop.
+% 
+%    \begin{macrocode}
+    \ifx\frameshape\pgfutil at empty%
+      \n at to@pp at 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 at opt{[\frameopt]}
+    \expandafter\scope\tmp at 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 at to@pp at 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 at ech}{}{%
+      \ifx\natoapp at ech\pgfutil at empty\else%
+      \def\args{echelon=\natoapp at ech}
+      \expandafter\wg at pic\args\@endwg at pic%
+      {natoapp6c/s/}{$(M.north)+(0,1.2*\n at to@pp at 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 at below}{}{%
+      \n at to@pp at belowtrue
+      \begin{scope}
+        \wg at pic@all{\natoapp at below}{natoapp6c/s/}{%
+          $(M.south)+(0,-\n at to@pp at e@yy)$}{%
+          natoapp6c/below}%
+      \end{scope}%
+      \n at to@pp at belowfalse}
+%    \end{macrocode}
+%
+% If the \spec{decoy} flag was set, we draw that.
+% 
+%    \begin{macrocode}
+    \ifnatoapp at decoy%
+      \scope[dash pattern=on 3\pgflinewidth off 2\pgflinewidth]%
+        \n at to@pp at dbg{1}{Drawing decoy modifier}%
+        \wg at sub@nchor{M\id}{north east}
+        \wg at tmpa=\pgf at x%
+        \wg at tmpb=\pgf at y%
+        \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+        \wg at tmpc=\n at to@pp at e@yy cm%
+        \advance\wg at tmpc\n at to@pp at e@yy cm%
+        \advance\wg at tmpc\wg at tmpb%
+        \pgfpathlineto{\pgfqpoint{0cm}{\wg at tmpc}}%
+        \pgfpathlineto{\pgfqpoint{-\wg at tmpa}{\wg at 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 at toapp}.
+%
+%    \begin{macrocode}
+\newcommand\natoapp[1][]{%
+  \n at to@pp at dbg{2}{NATO App6(c) macro -> `#1'}
+  \tikzset{/natoapp6c/.cd,faction=friendly,command=land}%
+  \@ifnextchar({\n at toapp{#1}}{\n at toapp{#1}(0,0)}%)
+}
+%    \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\n at toapp}
+%
+%   This macro takes care to parse the location argument --- if any.
+%   It forwards to \cs{n at to@pp}.
+%
+%    \begin{macrocode}
+\def\n at toapp#1(#2){%
+  \n at to@pp at dbg{2}{NATO App6(c) second macro -> `#1', `#2'}
+  \@ifnextchar({\n at to@pp{#1}{#2}}{\n at to@pp{#1}{#2}()}%)
+}
+%    \end{macrocode}
+% \end{Macro}
+%
+% 
+% \begin{Macro}{\n at 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 at to@pp#1#2(#3){%
+  %\let\name\pgfutil at empty%
+  %\ifx|#3|\else\edef\name{(#3)}\fi%
+  %\n at to@pp at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/shape.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/symbols.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/symbols.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/symbols.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at toapp@path{\n at toapp@corps at support{\natoapp at fac}}
+    \expandafter\path[draw] \n at toapp@path;
+    \expandafter\path[draw,xscale=-1] \n at 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 at to@pp at hostile\natoapp at fac%
+    \def\n at toapp@path{(-.75,-.2)--(-.15,-.2)--(0,-.5)--(.15,-.2)--(.75,-.2)}
+    \else
+    \def\n at toapp@path{(-.75,-.2)--(-.1,-.2)--(0,-.325)--(.1,-.2)--(.75,-.2)}
+    \fi
+    \path[draw] \n at 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 at fac\n at to@pp at friendly%
+    \def\n at toapp@opt{[out=90,in=90,looseness=.675]}%
+    \else\ifx\natoapp at fac\n at to@pp at neutral%
+    \def\n at toapp@opt{[out=90,in=90,looseness=1]}%
+    \else%
+    \def\n at toapp@opt{[out=45,in=135,looseness=1.5]}%
+    \fi\fi%
+    \edef\n at toapp@path{(M.south west) to\n at toapp@opt (M.south east)}
+    \path[draw] \n at 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 at to@pp at neutral\natoapp at 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 at to@pp at tmp{0}
+    \ifn at to@pp at below\def\n at to@pp at tmp{-.1}\fi
+    \ifn at to@pp at mod
+    \path[draw,shift={(0,\n at to@pp at 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 at to@pp at 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 at fac\n at to@pp at 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 at toapp@path{\n at toapp@corps at support{\natoapp at fac}}
+    \expandafter\path[draw] \n at 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 at to@pp at 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 at to@pp at tmp{0}
+    \ifn at to@pp at below\def\n at to@pp at tmp{-.15}\fi
+    \path[draw,shift={(0,\n at to@pp at 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 at to@pp at 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 at to@pp at 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 at mode@fill
+      \def\n at to@pp at next{\path[draw,fill=pgfstrokecolor,pic actions]}
+      \else
+      \def\n at to@pp at next{\path[pic actions]}
+      \fi
+      \n at to@pp at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at to@pp at 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 at to@pp at 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 at to@pp at 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 at to@pp at 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 at to@pp at dbg{3}{Text: `#1'}%
+      \n at to@pp at 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 at to@pp at 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 at to@pp at 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 at to@pp at 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 at to@pp at 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 at to@pp at 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 at to@pp at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/symbols.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/text.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/text.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/text.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at 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 at to@ppfont{12}},
+  natoapp6c/squashed text/.style={font=\n at to@ppfont[bc]{12}},
+  natoapp6c/small text/.style={font=\n at to@ppfont{10}},
+  natoapp6c/squashed small text/.style={font=\n at to@ppfont[bc]{10}},
+}
+%    \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{Macro}{\n at to@pp at text@normal,
+%   \n at to@pp at text@squashed,
+%   \n at to@pp at text@small,
+%   \n at to@pp at text@smallsquashed}
+%
+% These macros are short-hands for making a node at $(0,0)$ in the
+% local scope.
+%
+%    \begin{macrocode}
+\newcommand\n at to@pp at text@normal[2][]  {%
+  \node[natoapp6c/text,natoapp6c/normal text,#1]{#2}}
+\newcommand\n at to@pp at text@squashed[2][]{%
+  \node[natoapp6c/text,natoapp6c/squashed text,#1]{#2}}
+\newcommand\n at to@pp at text@small[2][]   {%
+  \node[natoapp6c/text,natoapp6c/small text,#1]{#2}}
+\newcommand\n at to@pp at text@smallsquashed[2][]{%
+  \node[natoapp6c/text,natoapp6c/squashed small text,#1]{#2}}
+%    \end{macrocode}
+% \end{Macro}
+% 
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/text.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/util.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/util.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/util.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at toapp@#1\endcsname}
+%    \end{macrocode}
+% \end{Macro}
+%
+% Corps support for \spec{friendly}, \spec{hostile},
+% \spec{neutral}, and \spec{unknown} factions.
+%
+% \begin{Macro}{\n at toapp@corps at sup@friendly,
+%              \n at toapp@corps at sup@hostile,
+%              \n at toapp@corps at sup@neutral,
+%              \n at toapp@corps at sup@unknown}
+%    \begin{macrocode}
+\def\n at toapp@corps at sup@friendly{(.75,.5)--(.5,0)--(.75,-.5)}
+% (M.north east)--(M.east-.25,0)--(M.south east)}
+\def\n at toapp@corps at sup@hostile{(.95,.5)--(.45,0)--(.95,-.5)}
+\def\n at toapp@corps at sup@neutral{(.5,.5)--(.35,0)--(.5,-.5)}
+\def\n at toapp@corps at sup@unknown{(.75,.5)--(.5,0)--(.75,-.5)}
+%    \end{macrocode}
+% \end{Macro}
+%
+% Corps support, base
+%
+% \begin{Macro}{\n at toapp@corps at support}
+%    \begin{macrocode}
+\def\n at toapp@corps at support#1{
+  \ifx\n at to@pp at friendly#1\n at toapp@corps at sup@friendly%  
+  \else\ifx\n at to@pp at hostile#1\n at toapp@corps at sup@hostile%
+  \else\ifx\n at to@pp at neutral#1\n at toapp@corps at sup@neutral%
+  \else\ifx\n at to@pp at unknown#1\n at toapp@corps at 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 at to@pp at text@normal{\color{magenta}TBD};}
+}
+%    \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/util.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/weaponry.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/weaponry.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/weaponry.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/natoapp6c/weaponry.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/package.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/package.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/package.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at terrain@pic}{%
+  \newif\ifhex at terrain@pic
+  \hex at terrain@picfalse}{}
+%    \end{macrocode}
+%
+% Options
+%
+%    \begin{macrocode}
+\DeclareOption{noterrainpic}{%
+  \hex at terrain@picfalse}
+\DeclareOption{terrainpic}{%
+  \hex at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/package.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/tests/chits.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/tests/chits.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/tests/chits.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at chit}{\second at chit(0,0)}%)
+}
+\def\second at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/tests/chits.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/tests/map.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/tests/map.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/tests/map.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/tests/map.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/tests/test.tex
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/tests/test.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/tests/test.tex	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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}


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/tests/test.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/util/core.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/util/core.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/util/core.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -0,0 +1,1353 @@
+% \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 at dbg}
+% Debugging support.  The counter \cs{wargamedbglvl} sets the debug
+% level.  The package code then uses \cs{wg at 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 at dbg#1#2{%
+  \ifnum#1>\wargamedbglvl\relax\else\message{^^J#2}\fi}
+%    \end{macrocode}
+% \end{Macro}
+% 
+% \begin{Macro}{\wg at addto@macro}
+%
+%   The macro \cs{wg at 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 at addto@macro#1#2{%
+  \begingroup
+  \toks@\expandafter\expandafter\expandafter{\expandafter#1#2}%
+  \xdef#1{\the\toks@}%
+  \endgroup}
+%    \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\wg at 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 at sub@nchor#1#2{%
+  \wg at dbg{3}{^^JGet `#2' in `#1'}%
+  \@ifundefined{pgf at sh@ns@#1}{%
+    \pgf at x=0cm\pgf at y=0cm}{%
+    \pgf at process{%
+      \csname pgf at sh@ma@#1\endcsname% MW
+      \csname pgf at sh@np@#1\endcsname%
+      \pgf at sh@reanchor{\csname pgf at sh@ns@#1\endcsname}{#2}}}%
+  \wg at dbg{10}{-> \the\pgf at x,\the\pgf at y}%
+}
+%    \end{macrocode}
+% \end{Macro}
+% 
+% 
+% Scratch dimensions
+%
+%    \begin{macrocode}
+\newdimen\wg at tmpa
+\newdimen\wg at tmpb
+\newdimen\wg at tmpc
+\newdimen\wg at tmpd
+%    \end{macrocode}
+%
+%
+% Macro to easy restore a saved path
+%
+%    \begin{macrocode}
+\def\settosave#1{
+  \pgfsyssoftpath at setcurrentpath{#1}}
+%    \end{macrocode}
+%    
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% 
+% \subsubsection{Pictures in compound nodes}
+%
+% \begin{Macro}{\wg at pic}
+%   The macro \cs{wg at 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 at pic}\oarg{options}\meta{picture}\cs{@endwg at pic}\marg{prefix}\marg{position}\marg{options}
+%   \end{Syntax}
+%
+%    Note the \cs{@endwg at 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 at pic}\cs{args}\cs{@endwg at 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 at pic} that looks for user
+%    options.
+%    
+%    \begin{macrocode}
+\def\wg at 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 at pic{%
+  \wg at 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 at dbg{3}{No picture given}%
+  \else%
+    \wg at dbg{3}{^^JWG Pic:
+      ^^J  User options:  #1
+      ^^J  Picture:       #2
+      ^^J  Prefix:        #3
+      ^^J  Coordinates:   #4
+      ^^J  Fixed options: #5}%
+    % \wg at dbg{2}{\string\pic[#5,#1] at (#4) {#3#2}}%
+    \pic[#5,#1] at (#4) {#3#2};%
+    \ifwg at s@ve%
+      \pgf at relevantforpicturesizetrue%
+      \begin{getbbl}%
+        \pic[draw=none,fill=none,transform shape] at (#4) {#3#2};%
+      \end{getbbl}%
+      \wg at dbg{5}{Clipping to local bounding box}%
+      \clip (L.south west) rectangle (L.north east);%
+      \pgf at relevantforpicturesizefalse \global\wg at s@vefalse%
+    \fi
+  \fi%
+  \wg at dbg{3}{End of WG Pic}
+}
+%    \end{macrocode}
+% \end{Macro}
+% 
+%
+% \begin{Macro}{\wg at 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 at pic@all#1#2#3#4{%
+  \wg at dbg{2}{WG picture loop
+    ^^J  List:    \meaning#1
+    ^^J  Prefix:  `#2'
+    ^^J  Position: `#3'
+    ^^J  Styles:   `#4'}
+  \foreach \p in #1{%
+    \wg at dbg{2}{WG picture element: \meaning\p}%
+    \expandafter\wg at pic\p\@endwg at pic {#2}{#3}{#4}%
+  }%
+}
+%    \end{macrocode}
+% \end{Macro}
+% 
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% 
+% \subsubsection{Nodes in compound nodes}
+%
+% \begin{Macro}{\wg at node}
+%   The macro \cs{wg at 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 at node}\oarg{options}\meta{body}\cs{@endwg at node}\marg{prefix}\marg{position}\marg{options}
+%   \end{Syntax}
+%
+%    Note the \cs{@endwg at 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 at node}\cs{args}\cs{@endwg at 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 at node} that looks for user
+%    options.
+%    
+%    \begin{macrocode}
+\def\wg at 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 at node{%
+  \wg at 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 at dbg{3}{No body given}%
+  \else%
+    \wg at dbg{3}{^^JWG Pic:
+      ^^J  User options:  #1
+      ^^J  Body:          #2
+      ^^J  Prefix:        #3
+      ^^J  Coordinates:   #4
+      ^^J  Fixed options: #5}%
+    % \wg at dbg{2}{\string\pic[#5,#1] at (#4) {#3#2}}%
+    \node[#5,#1] at (#4) {#3#2};%
+  \fi%
+  \wg at dbg{3}{End of WG Node}
+}
+%    \end{macrocode}
+% \end{Macro}
+% 
+%
+% \begin{Macro}{\wg at 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 at node@all#1#2#3#4{%
+  \wg at dbg{2}{WG picture loop
+    ^^J  List:    \meaning#1
+    ^^J  Prefix:  `#2'
+    ^^J  Position: `#3'
+    ^^J  Styles:   `#4'}
+  \foreach \p in #1{%
+    \wg at dbg{2}{WG picture element: \meaning\p}%
+    \expandafter\wg at node\p\@endwg at node {#2}{#3}{#4}%
+  }%
+}
+%    \end{macrocode}
+% \end{Macro}
+% 
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% 
+% \subsubsection{Bounding boxes}
+% 
+%  Bounding box dimensions
+%
+%
+%    \begin{macrocode}
+\newdimen\wg at bb@minx
+\newdimen\wg at bb@miny
+\newdimen\wg at bb@maxx
+\newdimen\wg at bb@maxy
+%    \end{macrocode}
+%
+%
+%
+% Enable or disable bounding box tracking 
+%
+%    \begin{macrocode}
+\newif\ifwg at notrelevantforpathsize\wg at notrelevantforpathsizefalse
+%    \end{macrocode}
+% 
+%
+% \begin{Macro}{wg at resetbb}
+% Reset the bounding box tracking dimensions
+%
+% \begin{macrocode}
+\def\wg at resetbb{%
+  \global\wg at bb@minx=16000pt\relax%
+  \global\wg at bb@miny=16000pt\relax%
+  \global\wg at bb@maxx=-16000pt\relax%
+  \global\wg at bb@maxy=-16000pt\relax%
+}
+%    \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\old at pgf@protocolsize}
+%   Save PGF's bounding box algorithm
+%   
+%    \begin{macrocode}
+\let\old at pgf@protocolsize\pgf at protocolsizes
+%    \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\wg at protocolsizes}
+%   Our bounding box algorithm
+%
+%    \begin{macrocode}
+\def\wg at protocolsizes#1#2{%
+  \old at pgf@protocolsize{#1}{#2}
+  \ifwg at notrelevantforpathsize\else%
+  \ifdim#1<\wg at bb@minx\global\wg at bb@minx#1\fi%
+  \ifdim#1>\wg at bb@maxx\global\wg at bb@maxx#1\fi%
+  \ifdim#2<\wg at bb@miny\global\wg at bb@miny#2\fi%
+  \ifdim#2>\wg at bb@maxy\global\wg at bb@maxy#2\fi%
+  \fi
+}
+%    \end{macrocode}
+% \end{Macro}
+%
+% % \begin{environment}{getbbl}
+%   Environment that tracks the local bounding box
+%
+%    \begin{macrocode}
+\newenvironment{getbbl}{%
+  \wg at resetbb%
+  \wg at notrelevantforpathsizefalse%
+  \global\let\pgf at protocolsizes\wg at protocolsizes}{%
+  \gdef\pgf at sh@ns at L{rectangle}
+  \gdef\pgf at sh@np at L{%
+    \def\southwest{\pgfqpoint{\the\wg at bb@minx}{\the\wg at bb@miny}}%
+    \def\northeast{\pgfqpoint{\the\wg at bb@maxx}{\the\wg at bb@maxy}}%
+  }
+  \gdef\pgf at sh@nt at L{{1}{0}{0}{1}{0pt}{0pt}}
+  \gdef\pgf at sh@pi at L{\pgfpictureid}
+  \global\let\pgf at protocolsizes\old at pgf@protocolsize
+}
+%    \end{macrocode}
+% \end{environment}
+% 
+% \begin{environment}{getbb}
+%   Environment to track global bounding box
+%   
+%    \begin{macrocode}
+\newenvironment{getbb}{%
+  \wg at resetbb%
+  \wg at notrelevantforpathsizefalse%
+  \global\let\pgf at protocolsizes\wg at protocolsizes}{%
+  \gdef\pgf at sh@ns at M{rectangle}
+  \gdef\pgf at sh@np at M{%
+    \def\southwest{\pgfqpoint{\the\wg at bb@minx}{\the\wg at bb@miny}}%
+    \def\northeast{\pgfqpoint{\the\wg at bb@maxx}{\the\wg at bb@maxy}}%
+  }
+  \gdef\pgf at sh@nt at M{{1}{0}{0}{1}{0pt}{0pt}}
+  % \pgfgettransform\pgf at temp%
+  % \xdef\pgf at sh@nt at M{\pgf at temp}
+  % \pgfgettransformentries{\wg at tmp@a}{\wg at tmp@b}{\wg at tmp@c}{\wg at tmp@d}{\pgf at temp}{\pgf at temp}
+  % \message{^^JTransform of M: \meaning\pgf at temp}
+  % \xdef\pgf at sh@nt at M{{\wg at tmp@a}{\wg at tmp@b}{\wg at tmp@c}{\wg at tmp@d}{0pt}{0pt}}%
+  % \message{^^JTransform of M: \meaning\pgf at sh@nt at M}
+  \gdef\pgf at sh@pi at M{\pgfpictureid}
+  \global\let\pgf at protocolsizes\old at 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 at s@ve\wg at s@vefalse
+\tikzset{
+  save clip/.is choice,
+  save clip/true/.code={\global\wg at s@vetrue},
+  save clip/false/.code={\global\wg at 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 at semiaddlinewidth##1{%
+      \pgfgettransformentries{%
+        \wg at jaca}{%
+        \wg at jacb}{%
+        \wg at jacc}{%
+        \wg at jacd}{%
+        \wg at tmp}{%
+        \wg at tmp}%
+      \pgfmathsetmacro{\wg at jac}{sqrt(abs(\wg at jaca*\wg at jacd-\wg at jacb*\wg at jacc))}%
+      \wg at dbg{4}{Scaling line width ##1 by \wg at jac}
+      \pgfmathsetmacro{\wg at lw}{\wg at jac*##1}%
+      \wg at dbg{4}{Scaled ##1 -> \wg at lw}
+      \tikz at addoption{\pgfsetlinewidth{\wg at lw pt}}%
+      \wg at dbg{4}{Added scaled option \wg at lw}
+      \pgfmathsetlength\pgflinewidth{\wg at lw pt}
+      \wg at dbg{4}{Did set line width \wg at lw pt}
+    }},
+  relative line width/.style={%
+    /utils/exec=\def\tikz at semiaddlinewidth##1{%
+      \wg at dbg{4}{Relative line width #1 times ##1}%
+      \pgfmathsetmacro{\wg at lv}{#1*##1}%
+      \tikz at addoption{\pgfsetlinewidth{\wg at lw pt}}%
+      \pgfmathsetlength\pgflinewidth{\wg at 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 at picmode%
+    \edef\opts{%
+      \iftikz at mode@draw draw,\else draw=none,\fi 
+      \iftikz at mode@fill fill\else fill=none\fi}
+    \wg at dbg{5}{^^JSub Mode: \meaning\tikz at 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 at tmp@fg}
+    \def\wg at tmp@bg{none}
+    \@ifundefinedcolor{pgffillcolor}{}{
+      \extractcolorspec{pgffillcolor}{\wg at tmp@bg}}
+    \begingroup
+    \tikz at mode
+    \wargamedbglvl=#1
+    \wg at dbg{3}{Drawing with w/stroke `\wg at tmp@fg'
+      (\tikz at strokecolor,\iftikz at mode@draw\else not\space\fi drawing)
+      and fill `\wg at tmp@bg' (\tikz at fillcolor,\iftikz at mode@fill\else
+      not\space\fi  filling)}
+    \endgroup
+  }
+}
+%    \end{macrocode}
+% \end{TikzKey}
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% 
+% \subsubsection{Random IDs}
+%
+%
+%    \begin{macrocode}
+\def\wg at r@ndom at id{%
+  \def\wg at uuid{}
+  \foreach \i in {1,...,8}{%
+    \pgfmathparse{Hex(random(0,15))}
+    \xdef\wg at uuid{\wg at 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 at out%
+  \def\mk at i{}%
+  \def\mk at w{\immediate\write\mk at out}%
+  \immediate\openout\mk at out=#1.json
+  \mk at w{[}
+}{
+  \mk at w{\mk at i \@lbchar "name":"End of list", "category": "<<eol>>",
+      "subcategory": "" \@rbchar }
+  \mk at w{]}
+  \immediate\closeout\mk at 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 at dbg{2}{Making image `#2' of type `#3'/`#4' on page \thepage}%
+  \mk at w{ \@lbchar}%
+  \mk at w{ \space "name": "#2",}%
+  \mk at w{ \space "category": "#3",}%
+  \mk at w{ \space "subcategory": "#4", }%
+  \mk at w{ \space "number": \thepage #1}%
+  \let\oldmk at i\mk at i%
+  \ifx#1,\relax\edef\mk at i{\mk at i\space\space}\fi}
+\def\end at info{%
+  \let\mk at i\oldmk at i%
+  \mk at w{ \space \@rbchar,}}
+%    \end{macrocode}
+% 
+% Make separate images for each counter (single sided).
+% 
+%    \begin{macrocode}
+\newcommand\chitimages[2][]{%
+  \begingroup%
+  \let\chit at report\do at chit@report%
+  \let\natoapp at report\do at natoapp@report%
+  \chit at dbg{2}{chits to make images of `#2'}%
+  \foreach[count=\ti from 0] \t/\x in #2{%
+    \ifx\t\empty\else% Ignore empty rows
+      \chit at dbg{5}{^^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 at 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 at 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 at info%
+          %% \foreach \n in {1,...,\m}{% Make a number of copies 
+          %%   \ifx\u\chit at blank%
+          %%     \chit at dbg{3}{Ignoring blank chit:\u}%
+          %%   \else%
+          %%     \info{\u}{counter}{#2}
+          %%     \begin{tikzpicture}
+          %%       \chit[\u=\ti](\c,\r)%
+          %%     \end{tikzpicture}
+          %%   \fi%
+          %% }%
+        \fi%
+      }%
+      \chit at dbg{2}{End of inner loop}%  
+    \fi%
+  }%
+  \chit at 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 at report\do at chit@report%
+  \let\natoapp at report\do at natoapp@report%
+  \foreach[count=\ti from 0] \t/\x in #2{%
+    \ifx\t\empty\else% Ignore empty rows
+      \chit at dbg{5}{^^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 at 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 at 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 at info%
+          \info*{\s}{counter}{\x}%
+          \begin{tikzpicture}%
+            \chit[\s=\ti]%
+          \end{tikzpicture}%
+          \end at info%
+          %% \foreach \n in {1,...,\m}{% Make a number of copies 
+          %%   \ifx\u\chit at blank%
+          %%     \chit at 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 at to@cm#1{\pgfmathparse{#1 * 0.0351460}}
+\def\pt at to@cm#1{\pgfmathparse{#1 * 0.0351367}}
+\def\ptpoint at to@cm#1#2{%
+  \pt at to@cm{#1}\edef\x{\pgfmathresult}%
+  \pt at to@cm{#2}\edef\y{\pgfmathresult}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\mk at get@anchor#1#2{%
+  \pgfpointanchor{#1}{#2}%
+  \pgfgetlastxy\tmp at x\tmp at y%
+  \pt at to@cm{\tmp at x}\edef\tmp at x{\pgfmathresult}
+  \pt at to@cm{\tmp at y}\edef\tmp at y{\pgfmathresult}
+}
+\def\mk at get@global at anchor#1#2{%
+  \pgfpointanchor{#1}{#2}%
+  \pgfgetlastxy\tmp at x\tmp at y%
+  \pgfpointtransformed{\pgfpoint{\tmp at x}{\tmp at y}}
+  \pgf at xa=\pgf at x
+  \pgf at ya=\pgf at y
+  \pt at to@cm{\the\pgf at xa}\edef\tmp at x{\pgfmathresult}
+  \pt at to@cm{\the\pgf at ya}\edef\tmp at y{\pgfmathresult}
+}
+\def\get at bb#1{%
+  % \pgfpointanchor{#1}{south west}%
+  % \pgfgetlastxy\tmp at llx\tmp at lly%
+  % \pgfpointanchor{#1}{north east}%
+  % \pgfgetlastxy\tmp at urx\tmp at ury%
+  % \pt at to@cm{\tmp at llx}\edef\llx{\pgfmathresult}
+  % \pt at to@cm{\tmp at lly}\edef\lly{\pgfmathresult}
+  % \pt at to@cm{\tmp at urx}\edef\urx{\pgfmathresult}
+  % \pt at to@cm{\tmp at ury}\edef\ury{\pgfmathresult}
+  \mk at get@anchor{#1}{south west}
+  \edef\llx{\tmp at x}
+  \edef\lly{\tmp at y}
+  \mk at get@anchor{#1}{north east}
+  \edef\urx{\tmp at x}
+  \edef\ury{\tmp at y}
+}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\mk at transform{%
+  \pgfgettransformentries{\mxx}{\mxy}{\myx}{\myy}{\ptdx}{\ptdy}
+  \pt at to@cm{\ptdx}\edef\dx{\pgfmathresult}
+  \pt at to@cm{\ptdy}\edef\dy{\pgfmathresult}
+  \mk at w{ \mk at i "xx": \mxx,}
+  \mk at w{ \mk at i "xy": \mxy,}
+  \mk at w{ \mk at i "yx": \myx,}
+  \mk at w{ \mk at i "yy": \myy,}
+  \mk at w{ \mk at i "dx": \dx,}
+  \mk at w{ \mk at i "dy": \dy,}
+}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\mk at bb#1{%
+  \get at bb{#1}
+  \mk at w{ \mk at i "lower left":  [\llx,\lly],}
+  \mk at w{ \mk at i "upper right": [\urx,\ury],}
+  \begingroup  
+   % \pgftransforminvert
+   % \pgfpointanchor{#1}{south west}%
+   % \pgfgetlastxy\tmp at llx\tmp at lly%
+   % \pgfpointtransformed{\pgfpoint{\tmp at llx}{\tmp at lly}}
+   % \pgf at xa=\pgf at x
+   % \pgf at ya=\pgf at y
+   % %
+   % \pgfpointanchor{#1}{north east}%
+   % \pgfgetlastxy\tmp at urx\tmp at ury%
+   % \pgfgetlastxy\tmp at llx\tmp at lly%
+   % \pgfpointtransformed{\pgfpoint{\tmp at urx}{\tmp at ury}}
+   % \pgf at xb=\pgf at x
+   % \pgf at yb=\pgf at y
+   % \pt at to@cm{\the\pgf at xa}\edef\llx{\pgfmathresult}
+   % \pt at to@cm{\the\pgf at ya}\edef\lly{\pgfmathresult}
+   % \pt at to@cm{\the\pgf at xb}\edef\urx{\pgfmathresult}
+   % \pt at to@cm{\the\pgf at yb}\edef\ury{\pgfmathresult}x
+   \mk at get@global at anchor{#1}{south west}
+   \mk at w{ \mk at i "global lower left":  [\tmp at x,\tmp at y],}
+   \mk at get@global at anchor{#1}{north east}
+   \mk at w{ \mk at i "global upper right": [\tmp at x,\tmp at y]}
+ \endgroup
+}
+\def\mk at pos#1(#2){%
+  \hex at dbg{10}{^^JMarking `#2' with `#1' - start}
+  \coordinate[transform shape] (tmp) at (#2) {};
+  \mk at get@anchor{tmp}{center}
+  \hex at dbg{3}{^^JMarking `#2' with `#1' - `\tmp at x',\tmp at y'}
+  \tikzset{zone point={#1}{\tmp at x}{\tmp at y}}
+}
+%    \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 at decorate@inputsegment at first
+      \ptpoint at to@cm{\the\pgf at x}{\the\pgf at y}
+      \xdef\wg at path{[\x,\y]}
+    \endgroup
+  }%
+  \state{more}[width=\pgfdecoratedinputsegmentremainingdistance]{%
+    \begingroup
+      \pgf at decorate@inputsegment at last
+      \ptpoint at to@cm{\the\pgf at x}{\the\pgf at y}
+      \xdef\wg at path{\wg at path,[\x,\y]}
+    \endgroup
+  }
+  \state{final}{%
+    \begingroup
+      \pgf at decorate@inputsegment at last
+      \ptpoint at to@cm{\the\pgf at x}{\the\pgf at y}
+      \xdef\wg at path{\wg at path,[\x,\y]}
+    \endgroup
+    \mk at w{ \mk at i "zone path \wg at record@path at name": \@lbchar}
+    \mk at w{ \mk at i\space "path": [\wg at 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 at i} records the current
+% indention (which is important in JSON)
+% 
+%    \begin{macrocode}
+\newenvironment{boardimage}[3][board]{%
+  \def\bd at n{#2}
+  \newcount\mk at point
+  \mk at point=0
+  \let\oomk at i\mk at i%
+  \let\markpos\mk at pos%
+%    \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 at label\hex at 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 at w{ \mk at i "zones": \@lbchar}%
+  \edef\mk at i{\mk at i\space}
+  %% Everything is made into centimeters
+  \mk at w{ \mk at i "units": "cm",}
+  \@ifundefined{mk at label}{}{\mk at w{ \mk at i "labels": "\mk at label",}}
+  %% Write out coordinate options as "coords" object
+  \mk at w{ \mk at i"coords": \@lbchar}%
+  \mk at w{ \mk at i "row": \@lbchar}%
+  \mk at w{ \mk at i\space "offset": \hex at coords@row at off,}%
+  \mk at w{ \mk at i\space "factor": \hex at coords@row at fac \@rbchar,}%
+  \mk at w{ \mk at i "column": \@lbchar}%
+  \mk at w{ \mk at i\space "offset": \hex at coords@col at off,}%
+  \mk at w{ \mk at i\space "factor": \hex at coords@col at fac,}%
+  \mk at w{ \mk at i\space "top short": "\hex at top@short at col",}%
+  \mk at w{ \mk at i\space "bottom short": "\hex at bot@short at col" \@rbchar}%
+  \mk at w{ \mk at 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 at rdframe\bo at rdframe%
+  \def\bo at rdframe[##1](##2)(##3){%
+    \oldbo at rdframe[##1](##2)(##3)%
+    \mk at w{ \mk at i"board frame": \@lbchar}
+    \mk at w{ \mk at i\space "lower left": [\llx,\lly],}
+    \mk at w{ \mk at i\space "upper right": [\urx,\ury],}
+    \mk at w{ \mk at i\space "margin": \margin,}
+    \mk at w{ \mk at i\space "width": \w,}
+    \mk at w{ \mk at 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 at w{ \mk at i "zoned": \@lbchar}
+          \mk at transform%
+          \mk at bb{current bounding box}
+          \mk at w{ \mk at 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 at w{ \mk at i"zone scope ##1": \@lbchar}
+      \let\omk at i\mk at i
+      \edef\mk at i{\mk at i\space}
+      \mk at transform%
+      %\bd at w{ \@rbchar,}
+      \gdef\wg at export@box{##1}%
+      \pgfkeys{%
+        /tikz/local bounding box=wg export box,
+        /tikz/execute at end scope={
+          \mk at bb{wg export box}
+          \let\mk at i\omk at i
+          \mk at w{ \mk at 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}{
+      \pgf at xa=##2 cm
+      \pgf at ya=##3 cm
+      \pgfpointtransformed{\pgfpoint{\pgf at xa}{\pgf at ya}}
+      % \pgfpointtransformed{\pgfpoint{0pt}{0pt}}
+      \pgf at xa=\pgf at x
+      \pgf at ya=\pgf at y
+      \pt at to@cm{\the\pgf at xa}\edef\px{\pgfmathresult}
+      \pt at to@cm{\the\pgf at ya}\edef\py{\pgfmathresult}
+      \advance\mk at point1
+      \global\mk at point=\mk at point
+      \mk at w{ \mk at i "point\the\mk at point": \@lbchar "name": "##1", "type": "point", "coords":  [\px,\py]
+        \@rbchar, }
+      %\message{^^JZone point \the\mk at point\space ##1: ##2,##3 -> \px,\py}
+    },
+    zone oob point/.code n args={3}{
+      \pgf at xa=##2 cm
+      \pgf at ya=##3 cm
+      \advance\pgf at xa.1cm
+      \advance\pgf at ya.1cm
+      \pgfpointtransformed{\pgfpoint{\pgf at xa}{\pgf at ya}}
+      % \pgfpointtransformed{\pgfpoint{0pt}{0pt}}
+      \pgf at xa=\pgf at x
+      \pgf at ya=\pgf at y
+      \pt at to@cm{\the\pgf at xa}\edef\px{\pgfmathresult}
+      \pt at to@cm{\the\pgf at ya}\edef\py{\pgfmathresult}
+      \advance\mk at point1
+      \global\mk at point=\mk at point
+      \mk at w{ \mk at i "point\the\mk at point": \@lbchar "name": "##1", "type": "point", "coords":  [\px,\py]
+        \@rbchar, }
+      %\message{^^JZone point \the\mk at point\space ##1: ##2,##3 -> \px,\py}
+    },
+    zone global point/.code n args={3}{
+      \advance\mk at point1
+      \global\mk at point=\mk at point
+      \mk at w{ \mk at i "point\the\mk at point": \@lbchar "name": "##1", "type": "point", "coords":  [\px,\py]
+        \@rbchar, }
+    },      
+%    \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 at record@path at 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 at w{ \mk at i "name": "\bd at n" }%
+  \let\mk at i\oomk at i%
+  \mk at w{ \mk at i\@rbchar}%
+  \end at 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 at turn,
+  zone mult/.store in=\zone at mult
+}
+\def\do at chit@report{%
+  \mk at w{ \mk at i "chit": \@lbchar}
+  \@ifundefined{id}{}         {\mk at w{ \mk at i\space "id":      "\id", }}%
+  \@ifundefined{chit at symbol}{}     {\mk at w{ \mk at i\space "symbol":  "true", }}%
+  \@ifundefined{chit at full}{}       {\mk at w{ \mk at i\space "full":    "\chit at full", }}
+  \@ifundefined{chit at factors}{}    {\mk at w{ \mk at i\space "factors": "\chit at factors", }}%
+  \@ifundefined{chit at left}{}       {\mk at w{ \mk at i\space "left":    "\chit at left", }}%
+  \@ifundefined{chit at right}{}      {\mk at w{ \mk at i\space "right":   "\chit at right", }}%
+  \@ifundefined{chit at upper@left}{} {\mk at w{ \mk at i\space "upper left":  "\chit at upper@left", }}%
+  \@ifundefined{chit at lower@left}{} {\mk at w{ \mk at i\space "lower left":  "\chit at lower@left", }}%
+  \@ifundefined{chit at upper@right}{}{\mk at w{ \mk at i\space "upper right": "\chit at upper@right", }}%
+  \@ifundefined{chit at lower@right}{}{\mk at w{ \mk at i\space "lower right": "\chit at lower@right}", }%
+  \mk at w{ \mk at i\space "end": 0}
+  \@ifundefined{chit at symbol}{
+    \mk at w{ \mk at i \@rbchar }
+  }{
+    \mk at w{ \mk at i \@rbchar, }% NATOAPP6c will follow
+  }%
+}
+\def\do at natoapp@report{%
+  \mk at w{ \mk at i "natoapp6c": \@lbchar}
+  \@ifundefined{id}{}{\mk at w{ \mk at i\space "id": "\id", }}
+  \@ifundefined{natoapp at fac}{}{\mk at w{ \mk at i\space "faction": "\natoapp at fac", }}
+  \@ifundefined{natoapp at cmd}{}{\mk at w{ \mk at i\space "command": "\natoapp at cmd", }}
+  \@ifundefined{natoapp at ech}{}{\mk at w{ \mk at i\space "echelon": "\natoapp at ech", }}
+  \@ifundefined{natoapp at main}{}{\mk at w{ \mk at i\space "main": "\natoapp at main", }}
+  \@ifundefined{natoapp at left}{}{\mk at w{ \mk at i\space "left": "\natoapp at left", }}
+  \@ifundefined{natoapp at right}{}{\mk at w{ \mk at i\space "right": "\natoapp at right", }}
+  \@ifundefined{natoapp at upper}{}{\mk at w{ \mk at i\space "upper": "\natoapp at upper", }}
+  \@ifundefined{natoapp at lower}{}{\mk at w{ \mk at i\space "lower": "\natoapp at lower", }}
+  \@ifundefined{natoapp at below}{}{\mk at w{ \mk at i\space "below": "\natoapp at below", }}
+  \mk at w{ \mk at i\space "end": 0}
+  \mk at w{ \mk at i \@rbchar}
+}
+%    \end{macrocode}
+% \iffalse
+%</exportcls>
+%\fi
+%


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/util/core.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/utils/wgexport.py
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/utils/wgexport.py	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/utils/wgexport.py	2022-09-26 21:48:39 UTC (rev 64522)
@@ -0,0 +1,3750 @@
+#!/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_globalproperties(doc,one=True):
+    return get_asone(doc,MODULE+'properties.GlobalProperties',one)
+
+# --------------------------------------------------------------------
+def get_globalproperty(doc,asdict=True):
+    '''A little confusing - this returns a dictionary'''
+    return get_asdict(doc,MODULE+'properties.GlobalProperty','name',asdict)
+
+# --------------------------------------------------------------------
+def get_turntrack(doc,asdict=True):
+    return get_asdict(doc,MODULE+'turn.TurnTracker','name',asdict)
+
+# --------------------------------------------------------------------
+def get_turncounter(doc,asdict=True):
+    return get_asdict(doc,MODULE+'turn.CounterTurnLevel','property',asdict)
+
+# --------------------------------------------------------------------
+def get_turnlist(doc,asdict=True):
+    return get_asdict(doc,MODULE+'turn.ListTurnLevel','property',asdict)
+
+# --------------------------------------------------------------------
+def get_turnhotkey(doc,asdict=True):
+    return get_asdict(doc,MODULE+'turn.TurnGlobalHotkey','hotkey',asdict)
+
+# --------------------------------------------------------------------
+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_tutorials(doc,key='name',asdict=True):
+    return get_asdict(doc,MODULE+'documentation.Tutorial',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_prototypecontainer(doc,one=True):
+    return get_asone(doc,MODULE+'PrototypesContainer',one)
+
+# --------------------------------------------------------------------
+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
+SHIFT = 65
+CTRL = 130
+ALT   = 520
+CTRL_SHIFT = CTRL+SHIFT
+ALT_SHIFT = ALT+SHIFT
+NONE = '\ue004'
+NONE_MOD = 0
+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,*props,**named):
+    gp = add_node(root,elem,MODULE+'properties.GlobalProperties')
+    # Add elements where each is a dict with _at least_
+    # "{'name':NAME, 'initialValue':VALUE}"
+    for p in props:
+        add_globalproperty(root,gp,**p)
+    # Add elements where each is a named dict with _at least_
+    # "{'initialValue':VALUE}"
+    for n, p in named:
+        add_globalproperty(root,gp,name=n,**p)
+
+    return gp
+        
+
+# --------------------------------------------------------------------
+def add_globalproperty(root,elem,name,initialValue,
+                       isNumeric   = False,
+                       min         = "null",
+                       max         = "null",
+                       wrap        = False,
+                       description = ""):
+    return add_node(root,elem,MODULE+'properties.GlobalProperty',
+                    name         = name,
+                    initialValue = initialValue,
+                    isNumeric    = isNumeric,
+                    min          = min,
+                    max          = max,
+                    wrap         = wrap,
+                    description  = description)
+
+# --------------------------------------------------------------------
+def add_turntrack(root, elem, name,
+                  buttonText       = 'Turn',
+                  hotkey           = '',
+                  icon             = '',
+                  length           = -1,
+                  lengthStyle      = 'Maximum',
+                  nexthotkey       = key('T',ALT),
+                  plusButtonSize   = 22,
+                  prevhotkey       = key('T',ALT_SHIFT),
+                  reportFormat     = '<$PlayerId$> Turn updated from $oldTurn$ to $newTurn$',
+                  turnButtonHeight = 22,
+                  turnFormat       = None,
+                  counter          = None,
+                  phases           = None):
+
+    levels = (counter if counter is not None else
+              phases if phases is not None else None)
+    if levels is not None:
+        lvl = 1
+        lvls = [f'$level{lvl}$']
+        sub  = levels
+        while True:
+            sub = sub.get('counter',sub.get('phases',None))
+            if sub is None:
+                break
+            lvl += 1
+            lvls.append(f'$level{lvl}$')
+            
+        turnFormat = ' '.join(lvls)
+        
+    if turnFormat is None:
+        turnFormat = '$level1$ $level2$ $level3$ $level4$'        
+        
+    t = add_node(root, elem, MODULE+'turn.TurnTracker',
+                 name             = name,
+                 buttonText       = buttonText,
+                 hotkey           = hotkey,
+                 icon             = icon,
+                 length           = length,
+                 lengthStyle      = lengthStyle,
+                 nexthotkey       = nexthotkey,
+                 plusButtonSize   = plusButtonSize,
+                 prevhotkey       = prevhotkey,
+                 reportFormat     = reportFormat,
+                 turnButtonHeight = turnButtonHeight,
+                 turnFormat       = turnFormat)
+
+    add_turnlevel(root, t, counter=counter, phases=phases)
+    
+    return t
+
+# --------------------------------------------------------------------
+def add_turnlevel(root,parent,counter=None,phases=None):
+    f,s = ((add_turncounter,counter) if counter is not None else
+           (add_turnlist,phases)     if phases  is not None else (None,None))
+    if f is None: return parent
+
+    subcounter = s.pop('counter',None)
+    subphases  = s.pop('phases',None)
+
+    sub = f(root,parent,**s)
+
+    return add_turnlevel(root,sub,counter=subcounter,phases=subphases)
+
+# --------------------------------------------------------------------
+def add_turncounter(root,elem,property,
+                    incr          = 1,
+                    loop          = False,
+                    loopLimit     = -1,
+                    turnFormat    = "$value$"):
+    c = add_node(root,elem,MODULE+"turn.CounterTurnLevel",
+                 property       = property,
+                 incr           = incr,
+                 loop           = loop,
+                 loopLimit      = loopLimit,
+                 turnFormat     = turnFormat)
+    return c
+                    
+# --------------------------------------------------------------------
+def add_turnlist(root,elem,property,names,
+                 configFirst   = False,
+                 configList    = False,
+                 turnFormat    = '$value$'):
+    c = add_node(root,elem,MODULE+"turn.ListTurnLevel",
+                 property       = property,
+                 list           = ','.join([str(p) for p in names]),
+                 configFirst    = configFirst,
+                 configList     = configList,
+                 turnFormat     = turnFormat)
+    return c
+                  
+# --------------------------------------------------------------------
+def add_turnhotkey(root,elem,
+                   hotkey,
+                   match        = '{phase=="first"}',
+                   reportFormat = '{PlayerName}',
+                   name         = ''):
+    return add_node(root,elem,MODULE+'turn.TurnGlobalHotkey',
+                    hotkey       = hotkey,
+                    match        = match,
+                    reportFormat = reportFormat,
+                    name         = name)
+
+                   
+                  
+# --------------------------------------------------------------------
+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_tutorial(root,doc,
+                 name            = 'Tutorial',
+                 logfile         = 'tutorial.vlog',
+                 promptMessage   = 'Load the tutorial?',
+                 welcomeMessage  = 'Press "Step forward" (PnDn) to step through the tutorial',
+                 launchOnStartup = True):
+    return add_node(root,doc,MODULE+'documentation.Tutorial',
+                    name            = name,
+                    logfile         = logfile,
+                    promptMessage   = promptMessage,
+                    welcomeMessage  = welcomeMessage,
+                    launchOnStartup = launchOnStartup)
+
+# --------------------------------------------------------------------
+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 == "Board"
+def add_inventory(root,doc,
+                  canDisable          = False,
+                  centerOnPiece       = True,
+                  disabledIcon        = '',
+                  drawPieces          = True,
+                  foldersOnly         = False,
+                  forwardKeystroke    = True,
+                  groupBy             = '',
+                  hotkey              = key('I',ALT),
+                  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',ALT_SHIFT),
+                  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$ &rarr; $location$ *',
+            moveWithinFormat     = '$pieceName$ moves $previousLocation$ &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        = nam,
+                          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               = key('O',CTRL_SHIFT),
+                  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            = key('=',CTRL_SHIFT),
+               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)
+    return d
+    
+# --------------------------------------------------------------------
+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           = '>',
+             lockAdd              = False,
+             lockDice             = False,
+             lockPlus             = False,
+             lockSides            = False,
+             nDice                = 1,
+             nSides               = 6,
+             name                 = '1d6',
+             plus                 = 0,
+             prompt               = False,
+             propertyGate         = '',
+             reportFormat         = '** $name$ = $result$ *** &lt;$PlayerName$&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        = '',
+                 key         = key('E'),
+                 restoreName = 'Restore',
+                 restoreKey  = key('R'),
+                 x           = 200,
+                 y           = 200,
+                 xidx        = 0,
+                 yidx        = 0,
+                 xoff        = 1,
+                 yoff        = 1,
+                 description = '',
+                 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)
+                      
+
+# --------------------------------------------------------------------
+def add_proto_code(decs):
+    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)
+
+# ====================================================================
+#
+# 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','Eliminate',key('E'),
+                          'Restore',key('R'),description="Eliminate unit"),
+             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>wgexport.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>wgexport.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 ("<faction> 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>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.
+    </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-I</td>
+      <td>-</td>
+      <td>Show/refresh inventory window</td>
+     </tr>
+     <tr>
+      <td>Alt-M</td>
+      <td>-</td>
+      <td>Show map</td>
+     </tr>
+     <tr>
+      <td>Alt-T</td>
+      <td>-</td>
+      <td>Increase turn track</td>
+     </tr>
+     <tr>
+      <td>Alt-Shift-T</td>
+      <td>-</td>
+      <td>Decrease turn track</td>
+     </tr>
+     <tr>
+      <td>Alt-6</td>
+      <td>-</td>
+      <td>Roll the dice</td>
+     </tr>
+     <tr>
+      <td>Ctrl-D</td>
+      <td>Board,Counter</td>
+      <td>Delete selected counters</td>
+     </tr>
+     <tr>
+      <td>Ctrl-E</td>
+      <td>Board,Counter</td>
+      <td>Eliminate selected counters</td>
+     </tr>
+     <tr>
+      <td>Ctrl-F</td>
+      <td>Board,Counter</td>
+      <td>Flip selected counters</td>
+     </tr>
+     <tr>
+      <td>Ctrl-M</td>
+      <td>Board,Counter</td>
+      <td>Toggle "moved" markers on selected counters</td>
+     </tr>
+     <tr>
+      <td>Ctrl-O</td>
+      <td>Board</td>
+      <td>Hide/show counters</td>
+     </tr>
+     <tr>
+      <td>Ctrl-R</td>
+      <td>Board,Counter</td>
+      <td>Restore unit (from dead pool)</td>
+     </tr>
+     <tr>
+      <td>Ctrl-T</td>
+      <td>Board,Counter</td>
+      <td>Toggle move trail</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>←,→,↑↓</td>
+      <td>Board</td>
+      <td>Scroll board left, right, up, down (slowly)</td>
+     </tr>
+     <tr>
+      <td>PnUp,PnDn</td>
+      <td>Board</td>
+      <td>Scroll board up/down (fast)</td>
+     </tr>
+     <tr>
+      <td>Ctrl-PnUp,Ctrl-PnDn</td>
+      <td>Board</td>
+      <td>Scroll board left/right (fast)</td>
+     </tr>
+     <tr>
+      <td>Mouse-scroll up/down</td>
+      <td>Board</td>
+      <td>Scroll board up//down</td>
+     </tr>
+     <tr>
+      <td>Shift-Mouse-scroll up/down</td>
+      <td>Board</td>
+      <td>Scroll board right/leftown</td>
+     </tr>
+     <tr>
+      <td>Ctrl-Mouse-scroll up/down</td>
+      <td>Board</td>
+      <td>Zoom board out/in</td>
+     </tr>
+     <tr>
+      <td>Mouse-2</td>
+      <td>Board</td>
+      <td>Centre on mouse</td>
+     </tr>
+    </table>
+    </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_tut(root,doc,zipfile,tutorial,verbose=False):
+    if tutorial is None:
+        return None
+
+    if verbose:
+        print(f'Adding tutorial {tutorial}')
+    zipfile.write(tutorial,'tutorial.vlog')
+    
+    return add_tutorial(root,doc,name='Tutorial',logfile='tutorial.vlog')
+
+# --------------------------------------------------------------------
+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)
+    add_zoomer               (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
+    tll = picture['lower left']
+    tur = 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 + pc * y, pb * x + pd * y)
+    # Globally transform (rotate) picture bounding box 
+    pll  = pr(*tll)
+    pur  = pr(*tur)
+    # 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_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_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,
+                 tutorial = 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)
+    add_tut(root, doc, zipfile, tutorial, 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 global properties
+    gp = add_globalproperties(root,game)
+    # Add a turn tracker
+    tt = add_turntrack(root,game,'Turn',counter={
+        'property': 'Turn',
+        'phases': {
+            'property': 'Phase',
+            'names': sides }})
+    add_globalproperty(root,gp,'TurnTracker.defaultDocked',True)
+    
+    # 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,
+                tutorial = 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'
+            imgfn = 'images/'+i['filename']
+            if imgfn not in vmod.namelist():
+                vmod.writestr(imgfn,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,
+                                    tutorial,
+                                    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,
+           tutorial     = 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'
+              f'Tutorial    : {tutorial}')
+    info = convert_pages(pdfname=pdfname,infoname=infoname)
+    return create_vmod(vmodname = vmodname,
+                       info     = info,
+                       title    = title,
+                       version  = version,
+                       desc     = desc,
+                       rules    = rules,
+                       tutorial = tutorial,
+                       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('-T','--tutorial',
+                    help='Tutorial (v)log 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
+    tutname   = args.tutorial.name if args.tutorial 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,
+                       tutorial = tutname,
+                       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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/utils/wgexport.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/utils/wgsvg2tikz.py
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/utils/wgsvg2tikz.py	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/utils/wgsvg2tikz.py	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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)
+    
+
+
+
+    
+
+


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/utils/wgsvg2tikz.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/wargame.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/wargame.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/wargame.dtx	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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 at key,\pgf at x,\pgf at 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 at pathmaxx,\pgf at pathminx,\pgf at pathmaxy,\pgf at pathminy,
+  \pgf at picmaxx,\pgf at picminx,\pgf at picmaxy,\pgf at picminy,
+  \pgf at relevantforpicturesizefalse,\pgf at relevantforpicturesizetrue,
+  \pic,\r,\setkeys,\setlength,\show,\t,\temp,\the,
+  \tikzdeclarecoordinatesystem,\tmp at x,\tmp at 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 at 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=wargame.beach}](r=0,c=0) }
+%     & Beach
+%     & \texttt{\{image=wargame.beach\}}\\
+%     \tikz{\hex[terrain={image=wargame.light_woods}](r=0,c=0) }
+%     & Light woods
+%     & \texttt{\{image=wargame.light\_woods\}}
+%     & \tikz{\hex[terrain={image=wargame.woods}](r=0,c=0)}
+%     & Woods
+%     & \texttt{\{image=wargame.woods\}}\\
+%     \tikz{\hex[terrain={image=wargame.rough}](r=0,c=0) }
+%     & Rough
+%     & \texttt{\{image=wargame.rough\}}
+%     & \tikz{\hex[terrain={image=wargame.swamp}](r=0,c=0) }
+%     & Swamp
+%     & \texttt{\{image=wargame.swamp\}}\\
+%     \tikz{\hex[terrain={image=wargame.mountains}](r=0,c=0) }
+%     & Mountains
+%     & \texttt{\{image=wargame.mountains\}}
+%     & \tikz{\hex[fill=blue!40!white](r=0,c=0) }
+%     & Sea
+%     & \texttt{\{image=wargame.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 at xappto\tabledata{\spec{\c}}
+%   \foreach \f in {friendly,hostile,neutral,unknown}{%
+%     \protected at 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 at 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 at to@pp at 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 at xappto\tabledata{\spec{\m}}
+    \foreach \f in {friendly,hostile,neutral,unknown}{%
+      \protected at xappto\tabledata{
+        &\noexpand\tikz[scale=.8]{%
+          \noexpand\natoapp[faction=\f,%
+                            command=#2,%
+                            main={\m},%
+                            frame={faction},%
+                            #1]}}}
+    \protected at 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 at to@pp at dbg{2}{Compatibility: `\m' -> `\s'}
+    \protected at xappto\tabledata{\tspec{\m} & \tspec{\s}}
+    \foreach \f in {{none,frame={draw=lightgray}},%
+      friendly,hostile,neutral,unknown}{%
+      \protected at xappto\tabledata{
+        &\noexpand\tikz[scale=.5]{%
+          \noexpand\natoapp[faction=\f,command=#1,\s,frame={faction}]}}}
+    \protected at 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 at croSyntax}
+\def\M at croSyntax#1{\endgroup%
+  \foreach \k in {#1}{\expandafter\Special at Usage@Index\k}
+  \Syntax}
+\let\endMacroSyntax\endSyntax
+%
+\@ifundefined{SpecialIndex@}{
+  \gdef\SpecialIndex@#1#2{%
+    \@SpecialIndexHelper@#1\@nil
+    \def\@tempb{ }%
+    \ifcat \@tempb\@gtempa
+    \special at 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 at index{\quotechar##1\actualchar
+          \string\verb\quotechar*\verbatimchar
+          \quotechar\bslash\quotechar##1\verbatimchar#2}}%
+      \else
+      \def\@tempc{\special at index{##1##2\actualchar
+          \string\verb\quotechar*\verbatimchar
+          \bslash##1##2\verbatimchar#2}}%
+      \fi}%
+    \expandafter\@tempb\@gtempa\relax
+    \@tempc
+    \fi}}{}
+%
+\def\Special at Usage@Index#1{\@bsphack
+  {\let\special at index\index\SpecialIndex@{#1}{}}%
+  \@esphack}
+%    
+\def\Speci at lIndex#1#2#3#4{%
+  \@bsphack\special at index{%
+    #1\actualchar
+    {\string\ttfamily\space#1}
+    (#3)%
+    \encapchar main}%
+  \special at index{#4:\levelchar#2\actualchar{%
+      \string\ttfamily\space#2}\encapchar main}\@esphack}
+%
+\def\SpecialHexKeyIndex#1#2{\Speci at lIndex{#1}{#2}{key}{Hex keys}}
+\def\SpecialNatoSymbolIndex#1#2{%
+  \Speci at lIndex{#1}{#2}{symbol}{NATO App6(c) symbols}}
+\def\SpecialNatoFrameIndex#1#2{\Speci at lIndex{#1}{#2}{frame}{NATO App6(c) frame}}
+\def\SpecialNatoKeyIndex#1#2{\Speci at lIndex{#1}{#2}{key}{NATO App6(c) keys}}
+\def\SpecialKeyIndex#1{\Speci at lIndex{#1}{#1}{key}{TikZ keys}}
+%  
+\def\get at third #1/#2/#3/{\gdef\curr at third{#3}}
+\def\get at second #1/#2/#3/{\gdef\curr at second{#2}}
+%
+\def\KeyT at ble#1#2{
+  \leavevmode
+  \par
+  \vspace{1ex}
+  \hspace*{-1cm}
+  \begin{tabular}{#1}
+    \hline
+    #2
+    \hline
+  \end{tabular}\par}
+%
+\def\ShowKeyT at ble#1{
+  \KeyT at ble{|p{.1\textwidth}|>{\columncolor{altcol}}p{.7\textwidth}|}{#1}}
+%
+\def\Macro{%
+  \begingroup%
+  \catcode`\\12
+  \MakePrivateLetters\M at cro}
+%
+\def\M at cro#1{%
+  \endgroup
+  \def\tabledata{}
+  \foreach \k in {#1}{%
+    \protected at xappto\tabledata{%
+      \noexpand\spec{\noexpand\string\k}\noexpand\SpecialMainIndex{\k}\\}}
+  \KeyT at ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\noexpand\tabledata}}
+\def\endMacro{}
+%
+\newenvironment{NatoAppSymbol}[1]{%
+  \def\tabledata{}
+  \foreach \k in {#1}{%
+    \expandafter\get at third\k/
+    \protected at xappto\tabledata{%
+      \noexpand\tikz[scale=.5]{\noexpand\natoapp[main=\curr at third,
+        faction=none,command=base,frame={draw=lightgray}]}
+      &\noexpand\spec{\k}
+      \noexpand\SpecialNatoSymbolIndex{\k}{\curr at third}\\}}
+  \ShowKeyT at ble{\tabledata}}{}
+\newenvironment{NatoAppFrame}[1]{%
+  \def\tabledata{}
+  \foreach \k in {#1}{%
+    %\expandafter\get at third\k/
+    %\expandafter\get at second\k/
+    \protected at xappto\tabledata{%
+      \noexpand\tikz[scale=.5]{\noexpand\node[shape=\k] {};}
+      &\noexpand\spec{\k}
+      \noexpand\SpecialNatoFrameIndex{\k}{\k}\\}}
+  \ShowKeyT at ble{\tabledata}}{}
+\newenvironment{NatoAppKey}[1]{%
+  \def\tabledata{}
+  \foreach \k in {#1}{%
+    \expandafter\get at second\k//
+    \protected at xappto\tabledata{%
+      \noexpand\spec{\k}\noexpand\SpecialNatoKeyIndex{\k}{\curr at second}\\}}
+  \KeyT at ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{}
+%
+\newenvironment{HexKey}[1]{%
+  \def\tabledata{}
+  \foreach \k in {#1}{%
+    \expandafter\get at second\k//
+    \protected at xappto\tabledata{%
+      \noexpand\spec{\k}\noexpand\SpecialHexKeyIndex{\k}{\curr at second}\\}}
+  \KeyT at ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{}
+\newenvironment{HexKey*}[1]{%
+  \def\tabledata{}
+  \foreach \k in {#1}{%
+    \expandafter\get at second\k/
+    \expandafter\get at third\k/
+    \protected at xappto\tabledata{%
+      \noexpand\spec{\k}\noexpand\SpecialHexKeyIndex{\k}{\curr at second/\curr at third}\\}}
+  \KeyT at ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{}
+%
+\newenvironment{TikzKey}[1]{%
+  \def\tabledata{}
+  \foreach \k in {#1}{%
+    \protected at xappto\tabledata{%
+      \noexpand\spec{\k}\noexpand\SpecialKeyIndex{\k}\\}}
+  \KeyT at 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 at to@pp at 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


Property changes on: trunk/Master/texmf-dist/source/latex/wargame/wargame.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/wargame/wargame.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/wargame/wargame.ins	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/wargame/wargame.ins	2022-09-26 21:48:39 UTC (rev 64522)
@@ -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{wargame.beach.tex}	{\from{hex/tile.dtx}{tile,beach}}
+  \file{wargame.city.tex}	{\from{hex/tile.dtx}{tile,city}}
+  \file{wargame.light_woods.tex}{\from{hex/tile.dtx}{tile,lightwoods}}
+  \file{wargame.mountains.tex}	{\from{hex/tile.dtx}{tile,mountains}}
+  \file{wargame.rough.tex}	{\from{hex/tile.dtx}{tile,rough}}
+  \file{wargame.swamp.tex}	{\from{hex/tile.dtx}{tile,swamp}}
+  \file{wargame.town.tex}	{\from{hex/tile.dtx}{tile,town}}
+  \file{wargame.village.tex}	{\from{hex/tile.dtx}{tile,village}}
+  \file{wargame.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

Added: trunk/Master/texmf-dist/tex/latex/wargame/tikzlibrarywargame.chit.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/wargame/tikzlibrarywargame.chit.code.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/wargame/tikzlibrarywargame.chit.code.tex	2022-09-26 21:48:39 UTC (rev 64522)
@@ -0,0 +1,674 @@
+%%
+%% This is file `tikzlibrarywargame.chit.code.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% chit/core.dtx  (with options: `chit')
+%% chit/shape.dtx  (with options: `chit')
+%% chit/elements.dtx  (with options: `chit')
+%% chit/misc.dtx  (with options: `chit')
+%% 
+%% 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.
+%% 
+\RequirePackage{amsmath}
+\RequirePackage{amstext}
+\usetikzlibrary{wargame.util,wargame.natoapp6c,math}
+\newcount\chitdbglvl\chitdbglvl=\wargamedbglvl
+\def\chit at dbg#1#2{%
+  \ifnum#1>\chitdbglvl\relax\else\message{^^J#2}\fi}
+\tikzset{%
+  /chit/.search also={/tikz},
+  /chit/.cd,
+  full/.store in=\chit at full,               full/.initial=,%
+  symbol/.store in=\chit at symbol,           symbol/.initial=,%
+  left/.store in=\chit at left,               left/.initial=,%
+  unique/.style={/chit/left={#1}},%
+  right/.store in=\chit at right,             right/.initial=,%
+  parent/.style={/chit/right={#1}},%
+  upper left/.store in=\chit at upper@left,   upper left/.initial=,%
+  upper right/.store in=\chit at upper@right, upper right/.initial=,%
+  lower left/.store in=\chit at lower@left,   lower left/.initial=,%
+  lower right/.store in=\chit at lower@right, lower right/.initial=,%
+  factors/.store in=\chit at factors,         factors/.initial=,%
+  setup/.store in=\chit at setup,             setup/.initial=,%
+  id/.store in=\chit at id,                   id/.initial=,%
+  frame/.store in=\chit at frame,             frame/.initial=,%
+}
+\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},
+}
+\tikzset{%
+  chit/.code={%
+    \pgfkeys{/tikz/transform shape,/tikz/shape=chit}
+    \pgfkeys{/chit/.cd,#1}}}
+\newcounter{chit at id}\setcounter{chit at id}{0}
+\def\chit at n@to#1#2{%
+  %% Without a following start square bracket '[' by-pass to final
+  \chit at dbg{4}{Chit NATO App6(c) first step `#1' `#2'}
+  \@ifnextchar[{%
+    %\message{^^JStart square bracket}%
+    \@chit at n@to{#1}{#2}}{%
+    %\message{^^JNo start square bracket}%
+    \@chit at n@to@{#1}{#2}}%]]
+}
+\def\@chit at n@to@#1#2#3\@end at chit@n at to{%
+  \chit at 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 at dbg{4}{Chit NATO App6(c) ended}%
+}
+\def\@chit at n@to#1#2[#3]{%
+  \chit at dbg{4}{Chit NATO App6(c) second step `#1' `#2' `#3'}
+  \@ifnextchar({\@@chit at n@to{#1}{#2}{#3}}{\@@chit at n@to{#1}{#2}{#3}(0,0)}%)
+}
+\def\@@chit at n@to#1#2#3(#4)\@end at chit@n at to{%
+  \chit at 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)$) {};}
+\def\chit at tr@ns at nchor#1{%
+  \pgf at x=0.4\pgf at x%
+  \pgf at y=0.4\pgf at y\advance\pgf at y#1}
+\def\chit at nchor#1#2#3{%
+  \wg at sub@nchor{#1}{#2}
+  \chit at tr@ns at nchor{#3}}
+\def\chit at report{}
+\tikzset{
+  zone turn/.style={},
+  zone mult/.style={}
+}
+\pgfdeclareshape{chit}{
+  \savedanchor\center{\pgf at x=0cm\pgf at y=0cm}
+  \savedanchor\northeast{\pgf at x=0.6cm\pgf at y=0.6cm}
+  \savedanchor\symbol{\pgf at x=0cm\pgf at y=0.2cm}
+  \savedanchor\factors{\pgf at x=0cm\pgf at y=-0.5cm}
+  \saveddimen\margin{\pgf at x=0.04cm}
+  \savedmacro\id{%
+    \chit at dbg{4}{Chit ID: \meaning\chit at id}%
+    \@ifundefined{chit at id}{\let\chit at id\pgfutil at empty}{}%
+    \ifx\chit at id\pgfutil at empty%
+      \wg at r@ndom at id%
+      \edef\id{chit\wg at uuid}%
+    \else%
+      \edef\id{\chit at id}%
+    \fi%
+    \chit at dbg{4}{Chit ID stored: \meaning\chit at id}
+  }
+  \savedmacro\chitframeopt{%
+    \let\chitframeopt\pgfutil at empty%
+    \@ifundefined{chit at frame}{}{%
+      \edef\chitframeopt{\chit at frame}}
+    \n at to@pp at dbg{3}{Chit Frame options: \meaning\chitframeopt}%
+  }
+  \anchor{center}{\center}
+  \anchor{north east}{\northeast}
+  \anchor{north west}{\northeast\pgf at x=-\pgf at x}
+  \anchor{south west}{\northeast\pgf at x=-\pgf at x\pgf at y=-\pgf at y}
+  \anchor{south east}{\northeast\pgf at y=-\pgf at y}
+  \anchor{north}     {\northeast\pgf at x=0cm}
+  \anchor{south}     {\northeast\pgf at x=0cm\pgf at y=-\pgf at y}
+  \anchor{east}      {\northeast\pgf at y=0cm}
+  \anchor{west}      {\northeast\pgf at x=-\pgf at x\pgf at y=0cm}
+  \anchor{symbol north east}{\chit at nchor{M\id symbol}{north east}{0.2cm}}
+  \anchor{symbol north west}{\chit at nchor{M\id symbol}{north west}{0.2cm}}
+  \anchor{symbol south east}{\chit at nchor{M\id symbol}{south east}{0.2cm}}
+  \anchor{symbol south west}{\chit at nchor{M\id symbol}{south west}{0.2cm}}
+  \anchor{symbol north}     {\chit at nchor{M\id symbol}{north}{0.2cm}}
+  \anchor{symbol west}      {\chit at nchor{M\id symbol}{west}{0.2cm}}
+  \anchor{symbol south}     {\chit at nchor{M\id symbol}{south}{0.2cm}}
+  \anchor{symbol east}      {\chit at nchor{M\id symbol}{east}{0.2cm}}
+  \anchor{symbol upper}     {\chit at nchor{M\id symbol}{upper}{0.2cm}}
+  \anchor{symbol lower}     {\chit at nchor{M\id symbol}{lower}{0.2cm}}
+  \anchor{symbol left}      {\chit at nchor{M\id symbol}{left}{0.2cm}}
+  \anchor{symbol right}     {\chit at nchor{M\id symbol}{right}{0.2cm}}
+  \anchor{symbol echelon}   {\chit at nchor{M\id symbol}{north}{0.2cm}}
+  \anchor{symbol below}     {\chit at nchor{M\id symbol}{south}{0.1cm}}
+  \anchor{symbol}    {\symbol}
+  \anchor{factors}   {\factors}
+  \anchor{left} {\chit at nchor{M\id symbol}{west}{.2cm}\advance\pgf at x-\margin}
+  \anchor{right}{\chit at nchor{M\id symbol}{east}{.2cm}\advance\pgf at x+\margin}
+  \anchor{upper right} {%
+    \northeast \advance\pgf at x-\margin \advance\pgf at y-\margin%
+  }
+  \anchor{upper left}{
+    \northeast \advance\pgf at x-\margin \advance\pgf at y-\margin \pgf at x=-\pgf at x%
+  }
+  \anchor{lower right} {%
+    \northeast \advance\pgf at x-\margin \advance\pgf at y-\margin \pgf at y=-\pgf at y%
+  }
+  \anchor{lower left}{
+    \northeast \advance\pgf at x-\margin \advance\pgf at y-\margin%
+    \pgf at x=-\pgf at x \pgf at y=-\pgf at y%
+  }
+  \backgroundpath{%
+    %% This is the outline of the chit only.  The rest of the chit is
+    %% made on the foreground "path".
+    \northeast%
+    \wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+    \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \wg at tmpa=-\wg at tmpa \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \wg at tmpb=-\wg at tmpb \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \wg at tmpa=-\wg at tmpa \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \pgfclosepath
+  }
+  \behindforegroundpath{%
+    \chit at dbg{4}{%
+      Chit foreground: \meaning\id
+      ^^J  ID (set):    \meaning\chit at id
+      ^^J  Symbol:      \meaning\chit at symbol
+      ^^J  Full:        \meaning\chit at full
+      ^^J  Factors:     \meaning\chit at factors
+      ^^J  Left:        \meaning\chit at left
+      ^^J  Right:       \meaning\chit at right
+      ^^J  Upper left:  \meaning\chit at upper@left
+      ^^J  Lower left:  \meaning\chit at lower@left
+      ^^J  Upper right: \meaning\chit at upper@right
+      ^^J  Lower right: \meaning\chit at lower@right}
+    \chit at report{}
+    \pgfscope
+    %
+    \northeast%
+    \wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+    \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \wg at tmpa=-\wg at tmpa \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \wg at tmpb=-\wg at tmpb \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \wg at tmpa=-\wg at tmpa \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \pgfclosepath
+    \pgfusepath{clip}
+    \@ifundefined{chit at symbol}{%
+      %% Draw full stuff
+      \@ifundefined{chit at full}{}{%
+        \center\wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+        \wg at pic@all{\chit at full}{}{\the\wg at tmpa,\the\wg at tmpb}{chit/full}}%
+    }{%
+      \edef\symid{\id symbol}%
+      \symbol%
+      \edef\args{{\symid}{\the\pgf at x,\the\pgf at y}\chit at symbol}%
+      \chit at dbg{6}{Arguments to chit NATO symbol: \meaning\args}%
+      \expandafter\chit at n@to\args\@end at chit@n at to%
+      \chit at dbg{6}{After making NATO symbol in chit}%
+      % Put in left of symbol
+      \@ifundefined{chit at left}{}{%
+        \begin{scope}[]
+          \pgfpointanchor{\symid}{west}%
+          \wg at tmpa=\pgf at x\advance\wg at tmpa-\margin%
+          \wg at tmpb=\pgf at y%
+          \wg at pic@all{\chit at left}{}{\the\wg at tmpa,\the\wg at tmpb}{chit/left}%
+        \end{scope}}%
+      % Put in right of symbol
+      \@ifundefined{chit at right}{}{%
+        \begin{scope}[]
+          \pgfpointanchor{\symid}{east}%
+          \wg at tmpa=\pgf at x\advance\wg at tmpa+\margin%
+          \wg at tmpb=\pgf at y%
+          \wg at pic@all{\chit at right}{}{\the\wg at tmpa,\the\wg at tmpb}{chit/right}%
+        \end{scope}}%
+      % Get coordinates
+      \northeast%
+      \wg at tmpa=\pgf at x%
+      \wg at tmpb=\pgf at y%
+      \advance\wg at tmpa-\margin%
+      \advance\wg at tmpb-\margin%
+      % Put in upper left corner
+      \@ifundefined{chit at upper@left}{}{%
+        \begin{scope}[]
+          \wg at pic@all{\chit at upper@left}{}{-\the\wg at tmpa,\the\wg at tmpb}{%
+            chit/upper left}%
+        \end{scope}}
+      % Put in upper right corner
+      \@ifundefined{chit at upper@right}{}{%
+        \begin{scope}[]
+          \wg at pic@all{\chit at upper@right}{}{\the\wg at tmpa,\the\wg at tmpb}{%
+            chit/upper right}%
+        \end{scope}}
+      % Put in lower left corner
+      \@ifundefined{chit at lower@left}{}{%
+        \begin{scope}[]
+          \wg at pic@all{\chit at lower@left}{}{-\the\wg at tmpa,-\the\wg at tmpb}{%
+            chit/lower left}%
+        \end{scope}}
+      % Put in lower right corner
+      \@ifundefined{chit at lower@right}{}{%
+        \begin{scope}[]
+          \wg at pic@all{\chit at lower@right}{}{\the\wg at tmpa,-\the\wg at tmpb}{%
+            chit/lower right}%
+        \end{scope}}
+      % Put in factors
+      \@ifundefined{chit at factors}{}{%
+        \advance\wg at tmpb-\margin%
+        \begin{scope}[]
+          \wg at pic@all{\chit at factors}{}{0,-\the\wg at tmpb}{chit/factors}%
+        \end{scope}}%
+    }%
+    \endpgfscope%
+    % Draw frame?
+    \edef\tmp at opt{[\chitframeopt]}
+    \expandafter\scope\tmp at opt
+    \northeast%
+    \wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+    \pgfpathmoveto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \wg at tmpa=-\wg at tmpa \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \wg at tmpb=-\wg at tmpb \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \wg at tmpa=-\wg at tmpa \pgfpathlineto{\pgfqpoint{\wg at tmpa}{\wg at tmpb}}%
+    \pgfclosepath
+    \pgfusepath{stroke}
+    \endscope
+  }
+}
+\def\chit{%
+  \chit at dbg{5}{Chit}
+  \@ifnextchar[{\chit@}{\chit@[]}%]
+}
+\def\chit@[#1]{%
+  \chit at dbg{5}{Chit second: `#1'}
+  \@ifnextchar({\chit@@{#1}}{\chit@@{#1}(0,0)}%)
+}
+\def\chit@@#1(#2){%
+  \@ifnextchar({\chit@@@{#1}{#2}}{\chit@@@{#1}{#2}()}%)
+}
+\def\chit@@@#1#2(#3){%
+  \chit at dbg{5}{Chit final:
+    ^^J  Options:    #1
+    ^^J  Position:   #2
+    ^^J  Name:       `#3'}
+  \let\name\pgfutil at empty%
+  \chit at dbg{1}{=== Before chit node}%
+  \node[draw,chit={every chit/.try,id=#3,#1}] (tmp) at (#2) {};
+  \chit at dbg{2}{=== After chit node}%
+  \ifx|#3|\relax%
+  \else%
+    \chit at dbg{3}{=== Renaming chit to user defined name `#3'}%
+    \pgfnoderename{#3}{tmp}%
+  \fi%
+  \@ifnextchar;{\@gobble}{}%
+}
+\tikzset{%
+  chit/1 factor/.pic={
+    \chit at 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 at 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 at 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 at 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 at 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 at dbg{4}{  Chit identifier: `#1'}%
+    \node[chit/identifier,pic actions]{#1};
+  },
+  chit/small identifier/.pic={
+    \chit at dbg{4}{  Chit small identifier: `#1'}%
+    \node[chit/small identifier,pic actions]{#1};
+  },
+  chit/identifier macro/.pic={%
+    \chit at dbg{4}{ Chit identifier macro: \meaning#1}
+    \edef\chit at i@tmp{#1}
+    \node[chit/identifier,pic actions]{\chit at i@tmp};},
+}
+\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,
+  },
+}
+\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};}
+\tikzset{%
+  chit/stack direction/.store in=\chit at stack@dir,
+  chit/stack direction/.initial={(.3,.3)},
+}
+\def\chit at stack@dir{(.3,.3)}
+\def\stackchits(#1){%
+  \@ifnextchar({\st at ckchits{#1}}{\st at ckchits{#1}(.3,.3)}%)
+}
+\def\st at ckchits#1(#2)#3{
+  \chit at dbg{2}{Stacking chits `#1', `#2', `#3'}
+  \edef\xy{#1}
+  \chit at dbg{4}{Stack start at \xy}
+  \foreach[count=\i from 0] \c/\o in {#3} {%
+    \ifx\c\empty\else%
+      \edef\ccc{\c}
+      \chit at dbg{2}{Adding \meaning\ccc\space to stack at (\xy)' `\o'}
+      \expandafter\ccc(\xy)
+      %%
+      \ifx\c\o\else
+        %\chit at dbg{0}{Option: \o}
+        \edef\ccc{\o}
+        \expandafter\ccc(\xy)
+      \fi
+      \expandafter\ccc(\xy)
+      \tikzmath{%
+        coordinate \cc;
+        \cc = (\xy) + (#2);}
+      \xdef\xy{\cc}
+    \fi
+  }
+}
+\tikzset{
+  chit/oob turn/.pic={\node[pic actions]{#1};}}
+\def\chit at oob@cellupdate(#1,#2)#3#4#5{%
+  \edef\f{\ifwg at oob@inv-1\else1\fi}%
+  \chit at 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 at dbg{1}{ \space\space-> `\string#5'=#5 `\string#2'=#2 `\string#1'=#1}
+}
+\def\chit at oob@rowupdate(#1,#2)#3#4{%
+  \chit at 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 at dbg{2}{ \space\space-> update `\string#2'=#2}
+}
+\def\chit at oob@turnupdate(#1,#2)#3#4{%
+  \chit at 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 at dbg{2}{ \space\space-> update `\string#1'=#1,`\string#2'=#2}
+}
+\newif\ifwg at oob@inv\wg at oob@invfalse
+\def\wg at star@oob{\wg at oob@invtrue\wg at oob}
+\def\wg at nostar@oob{\wg at oob@invfalse\wg at oob}
+\def\oob{%
+  \@ifstar{\wg at star@oob%
+  }{\wg at nostar@oob%
+  }%
+}
+\def\wg at oob#1#2#3#4{
+  \def\r{0}
+  \chit at 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 at dbg{1}{Turn \ti\space(\r,\t,y=\y):'}
+    \ifwg at 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 at 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 at blank\else
+              \chit[\u=\ti,zone oob point={\u}{\c}{\r}](\c,\r);
+            \fi
+            \chit at oob@cellupdate(\c,\r){#2}{#3}{\y}
+          }
+        \fi
+      }
+    \fi
+    \chit at 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 at oob@turnupdate increments the row
+    \ifx\t\@empty
+      \def\c{#3}
+      \chit at dbg{2}{ Turn is empty, set c=`\c'}
+    \fi
+    %\ifnum\y<0% No explicit number of rows given
+    %  \def\c{#3}
+    %  \chit at 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 at 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 at dbg{2}{ \space Breaking loop \rr\space > \y}%
+        %  \breakforeach%
+        %\else%
+          \chit at 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 at oob@turnupdate(\c,\r){#3}{#4}
+    \chit at dbg{1}{End of turn \ti\space(c=`\c',r=`\r',o='\o',y='\y')}
+  }
+  \chit at dbg{2}{End of OOB (c=`\c',r=`\r',y=`\y')}
+}
+\tikzset{
+  chit/cell background/.style={fill=black},
+  blank chit/.style={/chit/frame={draw=none,fill=none}},
+}
+\def\chit at blank{blank chit}
+\def\chit at cellbg(#1,#2)#3{%
+  \draw[chit/cell background](#1-#3/2,#2-#3/2) rectangle++(#3,#3);
+}
+\newif\ifchits at reset\chits at resettrue
+\def\chit at sng@cellupdate(#1,#2)#3#4{%
+  \chit at 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}%
+}
+\def\chits{%
+  \@ifstar{\chits at resetfalse\@chits}{\chits at resettrue\@chits}}
+\def\@chits#1#2#3{
+  \ifchits at reset
+    \def\r{0}%
+    \def\c{0}%
+  \fi
+  \chit at dbg{1}{Chits to make: #1}%
+  \foreach[count=\ti from 0] \t/\x in #1{%
+    \chit at dbg{2}{Turn `\t' with option `\x'}
+    \ifx\t\empty\else%
+      \foreach \u/\m in \t{%
+        \ifx\u\empty\else%
+          \chit at dbg{2}{Next chit `\u' with possible multiplicity `\m'}%
+          \ifx\m\@empty\def\m{1}\fi%
+          \ifx\u\m\def\m{1}\fi%
+          \chit at dbg{2}{Next chit `\u' multiplicity `\m'}%
+          \foreach \n in {1,...,\m}{%
+            \ifx\u\chit at blank%
+              \chit at dbg{3}{Ignoring blank chit:\u}%
+            \else%
+              \chit at cellbg(\c,\r){#3}%
+              \chit[\u=\ti](\c,\r)%
+              \chit at sng@cellupdate(\c,\r){#2}{#3}%
+            \fi%
+          }%
+        \fi%
+      }%
+    \fi%
+  }%
+}
+\def\chit at dbl@flip(#1,#2)#3{%
+  \pgfmathparse{-#1}%
+  \xdef\mc{\pgfmathresult}%
+}
+\def\chit at 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}%
+}
+\def\doublechits{%
+  \@ifstar{\chits at resetfalse\@doublechits}{\chits at resettrue\@doublechits}}
+\def\@doublechits#1#2#3{%
+  \chit at dbg{1}{Setting double-sided chits: #1}
+  \ifchits at 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 at dbg{2}{`\u'=`\m' (\c,\r)}
+          \foreach \n in {1,...,\m}{%
+            \ifx\u\chit at blank
+              \chit at dbg{3}{Ignoring blank chit:\u}
+            \else
+              \chit at cellbg(\c,\r){#3}
+              \chit[\u=\ti](\c,\r)
+              \chit at dbl@flip(\c,\r){#3}
+              \chit at cellbg(\mc,\r){#3}
+              \chit[\u\space flipped=\ti,zone turn=\t,zone mult=\n](\mc,\r)
+              \chit at 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};
+}
+\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},
+}
+\providecommand\chitmark[2][]{\tikz[scale=.25,#1]{\chit[#2]}}
+\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]}}}
+\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}}}
+\tikzset{
+  zone point/.code n args={3}{},
+  zone oob point/.code n args={3}{}}
+%% Local Variables:
+%%   mode: LaTeX
+%% End:
+%%
+%% End of file `tikzlibrarywargame.chit.code.tex'.


Property changes on: trunk/Master/texmf-dist/tex/latex/wargame/tikzlibrarywargame.chit.code.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/wargame/tikzlibrarywargame.hex.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/wargame/tikzlibrarywargame.hex.code.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/wargame/tikzlibrarywargame.hex.code.tex	2022-09-26 21:48:39 UTC (rev 64522)
@@ -0,0 +1,12813 @@
+%%
+%% This is file `tikzlibrarywargame.hex.code.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% hex/core.dtx  (with options: `hex')
+%% hex/coord.dtx  (with options: `hex')
+%% hex/shape.dtx  (with options: `hex')
+%% hex/terrain.dtx  (with options: `hex')
+%% hex/terrain/beach.dtx  (with options: `hex')
+%% hex/terrain/light_woods.dtx  (with options: `hex')
+%% hex/terrain/woods.dtx  (with options: `hex')
+%% hex/terrain/swamp.dtx  (with options: `hex')
+%% hex/terrain/rough.dtx  (with options: `hex')
+%% hex/terrain/mountains.dtx  (with options: `hex')
+%% hex/terrain/village.dtx  (with options: `hex')
+%% hex/terrain/town.dtx  (with options: `hex')
+%% hex/terrain/city.dtx  (with options: `hex')
+%% hex/terrain/mountain.dtx  (with options: `hex')
+%% hex/terrain/tree.dtx  (with options: `hex')
+%% hex/ridges.dtx  (with options: `hex')
+%% hex/towns.dtx  (with options: `hex')
+%% hex/labels.dtx  (with options: `hex')
+%% hex/extra.dtx  (with options: `hex')
+%% hex/paths.dtx  (with options: `hex')
+%% hex/board.dtx  (with options: `hex')
+%% 
+%% 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.
+%% 
+\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}
+\def\@ifempty#1{\def\temp{#1}\ifx\temp\@empty}
+\newcount\hexdbglvl\hexdbglvl=\wargamedbglvl
+\def\hex at dbg#1#2{%
+  \ifnum#1>\hexdbglvl\relax\else\message{^^J#2}\fi}
+\@ifundefined{ifhex at terrain@pic}{%
+  \newif\ifhex at terrain@pic
+  \hex at terrain@pictrue}{}
+\def\markpos#1(#2){}
+\pgfmathparse{cos(60)}        \xdef\hex at xx{\pgfmathresult}
+\pgfmathparse{sin(60)}        \xdef\hex at yy{\pgfmathresult}
+\pgfmathparse{\hex at yy*cos(30)}\xdef\hex at e@xx{\pgfmathresult}
+\pgfmathparse{\hex at yy*sin(30)}\xdef\hex at e@yy{\pgfmathresult}
+\newdimen\hex at radius\hex at radius=1cm
+\newdimen\hex at dx    \expandafter\hex at dx=\hex at xx cm
+\newdimen\hex at dy    \expandafter\hex at dy=\hex at yy cm
+\newdimen\hex at e@dx  \expandafter\hex at e@dx=\hex at e@xx cm
+\newdimen\hex at e@dy  \expandafter\hex at e@dy=\hex at e@yy cm
+
+\newif\ifhex at label@is at name\hex at label@is at namefalse
+\def\hex at short@col{isfalse}
+\def\hex at got@short{isfalse}
+\pgfmathdeclarefunction{isfalse}{1}{%
+  \begingroup
+  \def\pgfmathresult{0}%
+  \pgfmath at smuggleone\pgfmathresult
+  \endgroup}
+\pgfmathdeclarefunction{istrue}{1}{%
+  \begingroup
+  \def\pgfmathresult{1}%
+  \pgfmath at smuggleone\pgfmathresult
+  \endgroup}
+\tikzset{
+  hex/first row is/.is choice,
+  hex/first row is/0/.code={\def\hex at coords@row at off{0}},
+  hex/first row is/1/.code={\def\hex at coords@row at off{-1}},
+  hex/first row is=0,
+  hex/first column is/.is choice,
+  hex/first column is/0/.code={\def\hex at coords@col at off{0}},
+  hex/first column is/1/.code={\def\hex at coords@col at 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},
+  hex/row direction is/.is choice,
+  hex/row direction is/normal/.code={\def\hex at coords@row at fac{1}},
+  hex/row direction is/reversed/.code={\def\hex at coords@row at 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 at coords@col at fac{1}},
+  hex/column direction is/reversed/.code={\def\hex at coords@col at 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,
+  hex/label is name/.is if=hex at label@is at name,
+  hex/short bottom columns/.is choice,
+  hex/short bottom columns/odd/.code={%
+    \def\hex at bot@short at col{isodd}
+    \def\hex at got@bot at short{istrue}
+    \hex at dbg{4}{Short columns (odd): \meaning\hex at bot@short at col}},
+  hex/short bottom columns/even/.code={
+    \def\hex at bot@short at col{iseven}
+    \def\hex at got@bot at short{istrue}
+    \hex at dbg{4}{Short column (even): \meaning\hex at bot@short at col}},
+  hex/short bottom columns/none/.code={
+    \def\hex at bot@short at col{isfalse}
+    \def\hex at got@bot at short{isfalse}
+    \hex at dbg{4}{Short columns (none): \meaning\hex at bot@short at 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 at top@short at col{isodd}
+    \def\hex at got@top at short{istrue}
+    \hex at dbg{4}{Short columns (odd): \meaning\hex at top@short at col}},
+  hex/short top columns/even/.code={
+    \def\hex at top@short at col{iseven}
+    \def\hex at got@top at short{istrue}
+    \hex at dbg{4}{Short column (even): \meaning\hex at top@short at col}},
+  hex/short top columns/none/.code={
+    \def\hex at top@short at col{isfalse}
+    \def\hex at got@top at short{isfalse}
+    \hex at dbg{4}{Short columns (none): \meaning\hex at top@short at col}},
+  hex/short top columns=none,
+}
+\message{^^JInitial hex coordinate setup:
+  Rows: factor=\hex at coords@row at fac, offset=\hex at coords@row at off
+  Columns: factor=\hex at coords@col at fac, offset=\hex at coords@col at off}
+\tikzset{
+  /hex/coords/.cd,
+  column/.store in=\hex at col,
+  c/.store in=\hex at col,
+  row/.store in=\hex at row,
+  r/.store in=\hex at row,
+  offset/.store in=\hex at off,
+  o/.store in=\hex at off,
+  vertex/.is choice,
+  vertex/none/.code={\global\let\hex at vtx\@empty},
+  vertex/east/.code={\def\hex at vtx{0}},
+  vertex/north east/.code={\def\hex at vtx{60}},
+  vertex/north west/.code={\def\hex at vtx{120}},
+  vertex/west/.code={\def\hex at vtx{180}},
+  vertex/south west/.code={\def\hex at vtx{240}},
+  vertex/south east/.code={\def\hex at vtx{300}},
+  vertex/E/.code={\def\hex at vtx{0}},
+  vertex/NE/.code={\def\hex at vtx{60}},
+  vertex/NW/.code={\def\hex at vtx{120}},
+  vertex/W/.code={\def\hex at vtx{180}},
+  vertex/SW/.code={\def\hex at vtx{240}},
+  vertex/SE/.code={\def\hex at vtx{300}},
+  vertex/.default=none,
+  v/.forward to=/hex/coords/vertex=#1,
+  edge/.is choice,
+  edge/none/.code={\global\let\hex at edg\@empty},
+  edge/north east/.code={\def\hex at edg{30}},
+  edge/north/.code={\def\hex at edg{90}},
+  edge/north west/.code={\def\hex at edg{150}},
+  edge/south west/.code={\def\hex at edg{210}},
+  edge/south/.code={\def\hex at edg{270}},
+  edge/south east/.code={\def\hex at edg{330}},
+  edge/NE/.code={\def\hex at edg{30}},
+  edge/N/.code={\def\hex at edg{90}},
+  edge/NW/.code={\def\hex at edg{150}},
+  edge/SW/.code={\def\hex at edg{210}},
+  edge/S/.code={\def\hex at edg{270}},
+  edge/SE/.code={\def\hex at edg{330}},
+  edge/.default=none,
+  e/.forward to=/hex/coords/edge,
+}
+\def\hex at coords@reset{%
+  \tikzset{%
+    /hex/coords/.cd,
+    column=0,
+    row=0,
+    edge=none,
+    vertex=none,
+    offset=1}}
+\def\hex at coords@conv#1{%
+  \hex at coords@reset%
+  \tikzset{/hex/coords/.cd, #1}%
+  \pgfmathparse{int(\hex at coords@col at fac*(\hex at col+\hex at coords@col at off))}%
+  \xdef\hex at eff@col{\pgfmathresult}%
+  \hex at dbg{2}{Effective column: \hex at coords@col at fac * (\hex at col -
+    \hex at coords@col at off) -> \hex at eff@col}%
+  \pgfmathparse{\hex at eff@col*1.5}%
+  \xdef\hex at x{\pgfmathresult}%
+  \expandafter\pgf at x=\hex at x cm%
+  \pgfmathparse{int(\hex at coords@row at fac*(\hex at row+\hex at coords@row at off))}%
+  \xdef\hex at eff@row{\pgfmathresult}%
+  \hex at dbg{2}{Effective row: \hex at coords@row at fac * (\hex at row +
+    \hex at coords@row at off) -> \hex at eff@row}%
+  \pgfmathparse{(2*\hex at eff@row-mod(round((\hex at col+\hex at coords@col at off)),2))*\hex at yy}%
+  \xdef\hex at y{\pgfmathresult}%
+  \expandafter\pgf at x=\hex at y cm%
+  \ifx\hex at vtx\@empty\pgfpointxy{\hex at x}{\hex at y}\else%
+  \pgfpointadd{\pgfpointxy{\hex at x}{\hex at y}}{%
+    \pgfpointscale{\hex at off}{\pgfpointpolarxy{\hex at vtx}{1}}}\fi%
+  \ifx\hex at edg\@empty\else%
+  \pgfpointadd{\pgfpointxy{\hex at x}{\hex at y}}{%
+    \pgfpointscale{\hex at off}{\pgfpointpolarxy{\hex at edg}{\hex at yy}}}\fi
+  \hex at dbg{2}{Hex coordinates: #1
+    ^^J c=\hex at col
+    ^^J r=\hex at row
+    ^^J v=\hex at vtx
+    ^^J e=\hex at edg
+    ^^J x=\hex at x
+    ^^J y=\hex at y}%
+  \global\let\hex at x\hex at x%
+  \global\let\hex at y\hex at y%
+  \global\let\hex at row\hex at row%
+  \global\let\hex at col\hex at col%
+}
+\tikzdeclarecoordinatesystem{hex}{%
+  \hex at coords@conv{#1}}
+\hex at dbg{5}{Base vertex: \hex at xx,\hex at yy}
+\hex at dbg{5}{Base edges: \hex at e@xx,\hex at e@yy}
+\pgfdeclareshape{hex/hex}{%
+  \saveddimen\radius{\pgf at x=\hex at radius}
+  \savedanchor{\east}{         \pgfqpoint{ \hex at radius}{0cm}}
+  \savedanchor{\west}{         \pgfqpoint{-\hex at radius}{0cm}}
+  \savedanchor{\northeast}{    \pgfqpoint{ \hex at dx}{ \hex at dy}}
+  \savedanchor{\northwest}{    \pgfqpoint{-\hex at dx}{ \hex at dy}}
+  \savedanchor{\southwest}{    \pgfqpoint{-\hex at dx}{-\hex at dy}}
+  \savedanchor{\southeast}{    \pgfqpoint{ \hex at dx}{-\hex at dy}}
+  \savedanchor{\northedge}{    \pgfqpoint{     0cm}{ \hex at dy}}
+  \savedanchor{\southedge}{    \pgfqpoint{     0cm}{-\hex at dy}}
+  \savedanchor{\northeastedge}{\pgfqpoint{ \hex at e@dx}{ \hex at e@dy}}
+  \savedanchor{\northwestedge}{\pgfqpoint{-\hex at e@dx}{ \hex at e@dy}}
+  \savedanchor{\southwestedge}{\pgfqpoint{-\hex at e@dx}{-\hex at e@dy}}
+  \savedanchor{\southeastedge}{\pgfqpoint{ \hex at e@dx}{-\hex at e@dy}}
+  \savedmacro\init{%
+    \def\hexpath{%
+      \pgfpathmoveto{\east}%
+      \pgfpathlineto{\northeast}%
+      \pgfpathlineto{\northwest}%
+      \pgfpathlineto{\west}%
+      \pgfpathlineto{\southwest}%
+      \pgfpathlineto{\southeast}%
+      \pgfpathclose}
+  }
+%%
+  \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}
+  \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}
+  %%
+  \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}
+  %
+  \backgroundpath{\init\hexpath}
+  \behindforegroundpath{%
+    \hex at dbg{2}{Hex behind foreground path:
+      ^^JTerrain:       `\meaning\hex at terrain'
+      ^^JRidges:        `\meaning\hex at ridges'
+      ^^JTown:          `\meaning\hex at town'
+      ^^JExtra clipped: `\meaning\hex at extra@clip'
+      ^^JLabel:         `\meaning\hex at label'
+      ^^JExtra:         `\meaning\hex at extra'
+      ^^JLast node name:`\meaning\tikzlastnode'
+      ^^JHex row:       `\meaning\hex at row'
+      ^^JHex col:       `\meaning\hex at col'
+    }%
+    \init%
+    \scope%
+      \hexpath%
+      \pgfusepath{clip}%
+      \@ifundefined{hex at terrain}{\let\hex at terrain\empty}{}%
+      \ifx\hex at terrain\empty\else\hex at do@terrain\fi%
+      \@ifundefined{hex at ridges}{\let\hex at ridges\empty}{}%
+      \ifx\hex at ridges\empty\else\hex at do@ridges\fi%
+      \@ifundefined{hex at extra@clip}{\let\hex at extra@clip\empty}{}
+      \ifx\hex at extra@clip\empty\else%
+         \hex at dbg{5}{Extra clipped: `\meaning\hex at extra'}
+         \pgfpointorigin\wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+         \wg at pic@all{\hex at extra@clip}{}{\the\wg at tmpa,\the\wg at tmpb}{}%
+      \fi%
+      \@ifundefined{hex at label}{\let\hex at label\empty}{}
+      \ifx\hex at label\empty\else\hex at do@label\fi%
+    \endscope%
+    \@ifundefined{hex at town}{\let\hex at town\empty}{}
+    \@ifundefined{hex at c@pic}{\let\hex at c@pic\empty}{}
+    \ifx\hex at town\empty\else\hex at do@town\fi%
+    \@ifundefined{hex at extra}{\let\hex at extra\empty}{}
+    \ifx\hex at extra\empty\else%
+       \hex at dbg{5}{Extra: `\meaning\hex at extra'}
+       \pgfpointorigin\wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+       \wg at pic@all{\hex at extra}{}{\the\wg at tmpa,\the\wg at tmpb}{}%
+    \fi%
+  }
+}
+\tikzset{%
+  /hex/.search also={/tikz},%
+  /hex/.cd,%
+  terrain/.store in=\hex at terrain,%
+  ridges/.store in=\hex at ridges,%
+  town/.store in=\hex at town,%
+  extra/.store in=\hex at extra,%
+  label/.store in=\hex at label,%
+  extra clipped/.store in=\hex at extra@clip%
+}
+\tikzset{%
+  hex/hex/.style={
+    transform shape,
+    anchor=center,
+    draw=pgfstrokecolor,
+    fill=none,
+    thick,
+    solid},
+  hex/.code={%
+    \hex at 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}}}
+\def\hex{%
+  \@ifnextchar[{\hex@}{\hex@[]}%]
+}
+\def\hex@[#1]{%
+  \@ifnextchar({\hex@@{#1}}{%
+    \hex@@{#1}(c=0,r=0)}%)
+}
+\def\hex@@#1(#2){%
+  \@ifnextchar({\hex@@@{#1}{#2}}{\hex@@@{#1}{#2}()}%)
+}
+\def\hex@@@#1#2(#3){%
+  \node[hex={#1}] (tmp) at (hex cs:#2) {};%
+  \hex at dbg{8}{=== Label text: `\meaning\hex at l@text'}
+  \ifx|#3|\relax%
+    \@ifundefined{hex at l@text}{%
+      \hex at dbg{8}{=== Label text of hex (#2) not defined}%
+      \let\hex at l@text\empty%
+    }{}
+    \ifhex at label@is at name%
+      \hex at dbg{5}{=== Use label text of hex (#2) as name}%
+      \ifx\hex at l@text\@empty%
+        \hex at dbg{8}{=== Argh! Label text is empty! `\meaning\hex at l@text'}
+      \else%
+        \hex at dbg{3}{=== Renaming hex to label text `\hex at l@text'}
+        \pgfnoderename{\hex at l@text}{tmp}%
+      \fi%
+    \fi%
+  \else%
+    \hex at dbg{3}{=== Renaming hex to user defined name `#3'}%
+    \pgfnoderename{#3}{tmp}%
+  \fi%
+  \@ifnextchar;{\@gobble}{}%
+}
+\tikzset{%
+  /hex/terrain/.search also={/tikz},%
+  /hex/terrain/.cd,%
+  pic/.store in=\hex at t@pic,%
+  image/.store in=\hex at t@image,%
+  code/.store in=\hex at t@code,%
+  clip/.store in=\hex at 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=wargame.beach},
+  light woods/.style={image=wargame.light_woods},
+  woods/.style={image=wargame.woods},
+  swamp/.style={image=wargame.swamp},
+  rough/.style={image=wargame.rough},
+  mountains/.style={image=wargame.mountains},
+  village/.style={image=wargame.village},
+  town/.style={image=wargame.town},
+  city/.style={image=wargame.city},
+}
+\fi
+\def\hex at do@terrain{%
+  \hex at dbg{5}{Terrain: \meaning\hex at terrain}%
+  \edef\hex at t@tmp{[/hex/terrain/.cd,\hex at terrain]}%
+  \expandafter\scope\hex at t@tmp% Scope for terrain clipping.
+    \hex at dbg{5}{Terrain:
+      ^^J  pic:   \meaning\hex at t@pic
+      ^^J  image: \meaning\hex at t@image
+      ^^J  code:  \meaning\hex at t@code
+      ^^J  clip:  \meaning\hex at t@clip}
+    \@ifundefined{hex at t@clip}{\let\hex at t@clip\empty}{}
+    \ifx\hex at t@clip\empty\else%
+      \def\hex at t@c{}
+      \foreach \c in \hex at t@clip{%
+        \hex at dbg{5}{Clipping to `\c'}
+        \expandafter\wg at pic\c\@endwg at pic {}{\wg at tmpa,\wg at tmpb}{%
+          save path=\hex at t@tmp}%
+        \wg at addto@macro\hex at t@c\hex at t@tmp % Append to clippping
+      }%
+      \pgfsyssoftpath at setcurrentpath{\hex at t@c}% Set path
+      \clip;% Clip to the path
+    \fi % End of clipping terrain
+    %% Now switch between how to draw the terrain.  If some of the
+    %% macros are undefined, define them to be empty
+    \@ifundefined{hex at t@pic}{\let\hex at t@pic\empty}{}
+    \@ifundefined{hex at t@image}{\let\hex at t@image\empty}{}
+    % If we have no image, check if we have pictures.
+    \ifx\hex at t@image\empty%
+      \hex at dbg{8}{No terrain images}%
+      \ifx\hex at t@pic\empty\else%
+        % We have pictures
+        \hex at dbg{5}{Terrain pictures}%
+        \pgfpointorigin\wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+        \wg at pic@all{\hex at t@pic}{}{\the\wg at tmpa,\the\wg at tmpb}{}%
+      \fi% We have pictures.
+      \else % We have images
+        \hex at dbg{5}{Terrain images}%
+        \pgfpointorigin\wg at tmpa=\pgf at x\wg at tmpb=\pgf at y%
+        \foreach \i in \hex at t@image{%
+          \hex at dbg{10}{Terrain image: `\meaning\i'}
+          \expandafter\wg at node{%
+            \includegraphics[width=2cm]{\i}}\@endwg at node %
+          {}{\wg at tmpa,\wg at tmpb}{%
+            shape=rectangle,%
+            anchor=center,%
+            transform shape,%
+            draw=none}%
+        }
+    \fi%
+  \endscope% End of terrain scope
+}% End of terrain
+
+\def\hex at x@r{.7}
+\def\hex at 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,
+  }
+}
+\hex at make@sextants{.7}{}
+\hex at make@sextants{.3}{large }
+\hex at make@sextants{0}{full }
+\tikzset{
+  hex/terrain/beach/.style={%
+    fill={rgb,100:red,93;green,73;blue,35},%
+    draw=none%
+  }%
+}
+\ifhex at 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)

@@ Diff output truncated at 1234567 characters. @@


More information about the tex-live-commits mailing list.