summaryrefslogtreecommitdiff
path: root/macros/latex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-09-25 03:00:53 +0000
committerNorbert Preining <norbert@preining.info>2022-09-25 03:00:53 +0000
commitce8083552e0d948bf495e72d5c4d2680b505c90b (patch)
tree6c741e76b2a9e41d5c1b57a15ffa28d74c5317d8 /macros/latex
parent41d1be12f4963b0f5bf9903116883f1458b58960 (diff)
CTAN sync 202209250300
Diffstat (limited to 'macros/latex')
-rw-r--r--macros/latex/contrib/crefthe/crefthe-doc.pdfbin53358 -> 53458 bytes
-rw-r--r--macros/latex/contrib/crefthe/crefthe-doc.tex2
-rw-r--r--macros/latex/contrib/crefthe/crefthe.sty4
-rw-r--r--macros/latex/contrib/udes-genie-these/README.md21
-rw-r--r--macros/latex/contrib/udes-genie-these/analyse.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/conception.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/conclusion-anglaise.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/conclusion-francaise.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/document.tex61
-rw-r--r--macros/latex/contrib/udes-genie-these/donnees.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/introduction.tex33
-rw-r--r--macros/latex/contrib/udes-genie-these/realisation.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/revue.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/tests.tex1
-rw-r--r--macros/latex/contrib/udes-genie-these/udes-genie-these.dtx120
-rw-r--r--macros/latex/contrib/udes-genie-these/udes-genie-these.pdfbin113355 -> 124734 bytes
-rw-r--r--macros/latex/contrib/wargame/README.md270
-rw-r--r--macros/latex/contrib/wargame/doc/README.md270
-rw-r--r--macros/latex/contrib/wargame/doc/compat.pdfbin0 -> 432846 bytes
-rw-r--r--macros/latex/contrib/wargame/doc/symbols.pdfbin0 -> 184526 bytes
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/Makefile51
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/README.md41
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/export.tex385
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/game.pdfbin0 -> 583710 bytes
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/game.sty2042
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/game.tex200
-rw-r--r--macros/latex/contrib/wargame/doc/tutorial/patch.py31
-rw-r--r--macros/latex/contrib/wargame/doc/wargame.pdfbin0 -> 1305909 bytes
-rw-r--r--macros/latex/contrib/wargame/source/Makefile334
-rw-r--r--macros/latex/contrib/wargame/source/chit/core.dtx47
-rw-r--r--macros/latex/contrib/wargame/source/chit/elements.dtx105
-rw-r--r--macros/latex/contrib/wargame/source/chit/misc.dtx460
-rw-r--r--macros/latex/contrib/wargame/source/chit/shape.dtx544
-rw-r--r--macros/latex/contrib/wargame/source/hex/board.dtx253
-rw-r--r--macros/latex/contrib/wargame/source/hex/coord.dtx350
-rw-r--r--macros/latex/contrib/wargame/source/hex/core.dtx94
-rw-r--r--macros/latex/contrib/wargame/source/hex/extra.dtx83
-rw-r--r--macros/latex/contrib/wargame/source/hex/labels.dtx160
-rw-r--r--macros/latex/contrib/wargame/source/hex/paths.dtx416
-rw-r--r--macros/latex/contrib/wargame/source/hex/ridges.dtx139
-rw-r--r--macros/latex/contrib/wargame/source/hex/shape.dtx368
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain.dtx248
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/beach.dtx698
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/city.dtx5138
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/light_woods.dtx848
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/mountain.dtx26
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/mountains.dtx695
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/rough.dtx1570
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/swamp.dtx317
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/town.dtx1061
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/tree.dtx31
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/village.dtx352
-rw-r--r--macros/latex/contrib/wargame/source/hex/terrain/woods.dtx1011
-rw-r--r--macros/latex/contrib/wargame/source/hex/tile.dtx25
-rw-r--r--macros/latex/contrib/wargame/source/hex/towns.dtx96
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/activity.dtx39
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/air.dtx87
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/equipment.dtx99
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/installation.dtx43
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/land.dtx266
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/missile.dtx14
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/seamine.dtx18
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/seasurface.dtx131
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/space.dtx51
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/compat/subsurface.dtx67
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/core.dtx226
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/echelon.dtx82
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/frames/base.dtx70
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/frames/friendly.dtx427
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/frames/hostile.dtx453
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/frames/neutral.dtx405
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/frames/unknown.dtx483
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/list.dtx266
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/shape.dtx647
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/symbols.dtx3165
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/text.dtx57
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/util.dtx60
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/weaponry.dtx88
-rw-r--r--macros/latex/contrib/wargame/source/package.dtx48
-rw-r--r--macros/latex/contrib/wargame/source/tests/chits.dtx74
-rw-r--r--macros/latex/contrib/wargame/source/tests/map.dtx57
-rw-r--r--macros/latex/contrib/wargame/source/tests/test.tex172
-rw-r--r--macros/latex/contrib/wargame/source/util/core.dtx1299
-rwxr-xr-xmacros/latex/contrib/wargame/source/utils/export.py3562
-rwxr-xr-xmacros/latex/contrib/wargame/source/utils/svg2tikz.py365
-rw-r--r--macros/latex/contrib/wargame/source/wargame.dtx2455
-rw-r--r--macros/latex/contrib/wargame/source/wargame.ins176
87 files changed, 34374 insertions, 86 deletions
diff --git a/macros/latex/contrib/crefthe/crefthe-doc.pdf b/macros/latex/contrib/crefthe/crefthe-doc.pdf
index d6a42c38e7..a91ff44b53 100644
--- a/macros/latex/contrib/crefthe/crefthe-doc.pdf
+++ b/macros/latex/contrib/crefthe/crefthe-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/crefthe/crefthe-doc.tex b/macros/latex/contrib/crefthe/crefthe-doc.tex
index af156ef65d..44cd81fd5e 100644
--- a/macros/latex/contrib/crefthe/crefthe-doc.tex
+++ b/macros/latex/contrib/crefthe/crefthe-doc.tex
@@ -116,7 +116,7 @@
\begin{document}
-\def\PackageVersion{2022/09/03}
+\def\PackageVersion{2022/09/24}
\title{\crefthepackage{}\\\smallskip\itshape Cross referencing with proper definite articles}
\author{Jinwen XU}
diff --git a/macros/latex/contrib/crefthe/crefthe.sty b/macros/latex/contrib/crefthe/crefthe.sty
index 40456ebd51..a561c4e1de 100644
--- a/macros/latex/contrib/crefthe/crefthe.sty
+++ b/macros/latex/contrib/crefthe/crefthe.sty
@@ -12,7 +12,7 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplPackage
{crefthe}
- {2022/09/03} {}
+ {2022/09/24} {}
{Cross referencing with proper definite articles}
\keys_define:nn { crefthe }
@@ -112,9 +112,11 @@
}
}
}
+ \group_begin:
\bool_if:NTF #1
{ #6 * { #5 } } % here #6 is \crefthe_cref_original:w or \crefthe_Cref_original:w
{ #6 { #5 } }
+ \group_end:
\tl_gclear:N \l__crefthe_prep_each_tl
}
diff --git a/macros/latex/contrib/udes-genie-these/README.md b/macros/latex/contrib/udes-genie-these/README.md
index 173096c7fb..b0caad3982 100644
--- a/macros/latex/contrib/udes-genie-these/README.md
+++ b/macros/latex/contrib/udes-genie-these/README.md
@@ -8,10 +8,29 @@ The class file documentation is in French, the language of the typical user at t
Copyright (C) 2017-2022 Charles-Antoine Brunet
## Authors and maintainers
-Charles-Antoine Brunet (<Charles-Antoine.Brunet@USherbrooke.ca>)
+Charles-Antoine Brunet (Charles-Antoine.Brunet@USherbrooke.ca)
## License
The contents are distributed under the LaTeX Project Public License, version 1.3c or later.
## History
See the change log in the documentation.
+
+## Distribution
+CTAN: [udes-genie-these](https://www.ctan.org/pkg/udes-genie-these)
+
+TDS archive: [udes-genie-these.tds.zip](https://mirrors.ctan.org/install/macros/latex/contrib/udes-genie-these.tds.zip)
+
+### File description
+
+#### Documentation
+- udes-genie-these.pdf: package documentation
+- README.md: this file
+
+#### Source files
+- udes-genie-these.dtx: source file
+- udes-genie-these.ins: installation file
+
+#### Usage example
+- document.tex: main file
+- \*.tex, \*.bib: files used by main file
diff --git a/macros/latex/contrib/udes-genie-these/analyse.tex b/macros/latex/contrib/udes-genie-these/analyse.tex
deleted file mode 100644
index 6ef4a0f95a..0000000000
--- a/macros/latex/contrib/udes-genie-these/analyse.tex
+++ /dev/null
@@ -1 +0,0 @@
-\chapter{ANALYSE}
diff --git a/macros/latex/contrib/udes-genie-these/conception.tex b/macros/latex/contrib/udes-genie-these/conception.tex
deleted file mode 100644
index 83b56eb755..0000000000
--- a/macros/latex/contrib/udes-genie-these/conception.tex
+++ /dev/null
@@ -1 +0,0 @@
-\chapter{CONCEPTION}
diff --git a/macros/latex/contrib/udes-genie-these/conclusion-anglaise.tex b/macros/latex/contrib/udes-genie-these/conclusion-anglaise.tex
deleted file mode 100644
index d8a234314f..0000000000
--- a/macros/latex/contrib/udes-genie-these/conclusion-anglaise.tex
+++ /dev/null
@@ -1 +0,0 @@
-\chapter{ENGLISH CONCLUSION} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/conclusion-francaise.tex b/macros/latex/contrib/udes-genie-these/conclusion-francaise.tex
deleted file mode 100644
index e1b06616bd..0000000000
--- a/macros/latex/contrib/udes-genie-these/conclusion-francaise.tex
+++ /dev/null
@@ -1 +0,0 @@
-\chapter{CONCLUSION FRANÇAISE} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/document.tex b/macros/latex/contrib/udes-genie-these/document.tex
index 9b82193ecf..88b1c28de5 100644
--- a/macros/latex/contrib/udes-genie-these/document.tex
+++ b/macros/latex/contrib/udes-genie-these/document.tex
@@ -12,7 +12,7 @@
liste-figures,
liste-tableaux,
fichier-resume-francais = {resume-francais},
- fichier-resume-anglais = {resume-anglais},
+ %fichier-resume-anglais = {resume-anglais},
fichier-remerciements = {merci},
fichier-lexique = {lexique},
fichier-symboles = {symboles},
@@ -21,12 +21,12 @@
}
\TitreFrancais{CECI EST LE TITRE FRANÇAIS\\DU DOCUMENT}
-\TitreAnglais{DOCUMENT ENGLISH TITLE}
+%\TitreAnglais{DOCUMENT ENGLISH TITLE}
\Auteur{Prénom}{NOM}
\Date{Septembre}{2022}
\Dedicace{À mon chien préféré, Pitou, et à mon chat préféré, Minou.}
\MotsClesFrancais{3 à 8 mots-clés français}
-\MotsClesAnglais{3 to 8 english keywords}
+%\MotsClesAnglais{3 to 8 english keywords}
\Directeur{Prénom1}{NOM1}
\Codirectrice{Prénom2}{NOM1}
@@ -36,20 +36,57 @@
% Le contenu du document doit respecter le protocole de rédaction.
% Le contenu fourni ici n'est qu'un exemple afin d'illustre l'utilisation de la classe.
-\bibliographystyle{plain}
\begin{document}
-\include{introduction}
-\include{conception}
-\include{realisation}
-\include{tests}
-\include{analyse}
-\include{conclusion-francaise}
-\include{conclusion-anglaise}
+\chapter{INTRODUCTION}
+
+Ce document est uniquement un exemple d'utilisation de la classe \LaTeX\ pour la rédaction de documents conforme au \textit{Protocole de rédaction aux études supérieures} de la Faculté de génie de l'Université de Sherbrooke. Le contenu de cet exemple n'est pas représentatif de ce que devrait contenir un vrai document. Pour connaître le contenu éventuel d'un vrai document, il faut se référer au protocole.
+
+Les références bibliographiques qui suivent ne sont que des exemples. Il faut se référer au protocole pour plus de détails à ce sujet afin de s'assurer que les références sont complètes et qu'elles sont conformes aux exigences.
+
+\begin{description}
+ \item[Article de périodique:]
+ il y a quatre exemples \cite{burke1995,pattamatta2009,roy2009,vasu2009}.
+
+ \item[Articles d'actes de conférence:]
+ il y a un exemple court~\cite{prevenslik2009}
+ et deux exemples longs~\cite{coronado2005,yeung2006}.
+
+ \item[Livre:]
+ il y a un exemple court~\cite{russell2003}
+ et trois exemples longs~\cite{kececioglu1991,knuth1998-num,meriam2010}.
+
+ \item[Livre, une partie:]
+ il y a deux exemples courts~\cite{cormen2001,gaddis2009}
+ et trois exemples longs~\cite{kececioglu1991-partie,knuth1998-sort,meriam2010-dist}.
+
+ \item[Essai, mémoire et thèse:]
+ il y a un exemple de chacun \cite{belanger2009,chafei2009,francoeur2009}.
+
+ \item[Rapport technique:]
+ il y a un exemple court~\cite{belley2008}
+ et un exemple long~\cite{kernighan1991}.
+
+\end{description}
+
+\chapter{CONCEPTION}
+Le texte de la conception.
+
+\chapter{RÉALISATION}
+Le texte de la réalisation.
+
+\chapter{TESTS}
+Le texte des tests.
+
+\chapter{ANALYSE}
+Le texte de l'analyse.
+
+\chapter{CONCLUSION}
+Le texte de la conclusion.
\appendix
-\include{donnees}
+\chapter{DONNÉES}
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/donnees.tex b/macros/latex/contrib/udes-genie-these/donnees.tex
deleted file mode 100644
index 18e57d0601..0000000000
--- a/macros/latex/contrib/udes-genie-these/donnees.tex
+++ /dev/null
@@ -1 +0,0 @@
-\chapter{DONNÉES} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/introduction.tex b/macros/latex/contrib/udes-genie-these/introduction.tex
deleted file mode 100644
index 8e1a76e9fa..0000000000
--- a/macros/latex/contrib/udes-genie-these/introduction.tex
+++ /dev/null
@@ -1,33 +0,0 @@
-
-\chapter{INTRODUCTION}
-
-Ce document est uniquement un exemple d'utilisation de la classe \LaTeX\ pour la rédaction de documents conforme au \textit{Protocole de rédaction aux études supérieures} de la Faculté de génie de l'Université de Sherbrooke. Le contenu de cet exemple n'est pas représentatif de ce que devrait contenir un vrai document. Pour connaître le contenu éventuel d'un vrai document, il faut se référer au protocole.
-
-Les références bibliographiques qui suivent ne sont que des exemples. Il faut se référer au protocole pour plus de détails à ce sujet afin de s'assurer que les références sont complètes et qu'elles sont conformes aux exigences.
-
-\begin{description}
- \item[Article de périodique:]
- il y a quatre exemples \cite{burke1995,pattamatta2009,roy2009,vasu2009}.
-
- \item[Articles d'actes de conférence:]
- il y a un exemple court~\cite{prevenslik2009}
- et deux exemples longs~\cite{coronado2005,yeung2006}.
-
- \item[Livre:]
- il y a un exemple court~\cite{russell2003}
- et trois exemples longs~\cite{kececioglu1991,knuth1998-num,meriam2010}.
-
- \item[Livre, une partie:]
- il y a deux exemples courts~\cite{cormen2001,gaddis2009}
- et trois exemples longs~\cite{kececioglu1991-partie,knuth1998-sort,meriam2010-dist}.
-
- \item[Essai, mémoire et thèse:]
- il y a un exemple de chacun \cite{belanger2009,chafei2009,francoeur2009}.
-
- \item[Rapport technique:]
- il y a un exemple court~\cite{belley2008}
- et un exemple long~\cite{kernighan1991}.
-
-\end{description}
-
-
diff --git a/macros/latex/contrib/udes-genie-these/realisation.tex b/macros/latex/contrib/udes-genie-these/realisation.tex
deleted file mode 100644
index 191e529570..0000000000
--- a/macros/latex/contrib/udes-genie-these/realisation.tex
+++ /dev/null
@@ -1 +0,0 @@
-\chapter{RÉALISATION} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/revue.tex b/macros/latex/contrib/udes-genie-these/revue.tex
deleted file mode 100644
index 356175d490..0000000000
--- a/macros/latex/contrib/udes-genie-these/revue.tex
+++ /dev/null
@@ -1 +0,0 @@
-\chapter{REVUE DE LA LITTÉRATURE} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/tests.tex b/macros/latex/contrib/udes-genie-these/tests.tex
deleted file mode 100644
index 065e9d103d..0000000000
--- a/macros/latex/contrib/udes-genie-these/tests.tex
+++ /dev/null
@@ -1 +0,0 @@
-\chapter{TESTS} \ No newline at end of file
diff --git a/macros/latex/contrib/udes-genie-these/udes-genie-these.dtx b/macros/latex/contrib/udes-genie-these/udes-genie-these.dtx
index ccdaae0838..9b8282eb1b 100644
--- a/macros/latex/contrib/udes-genie-these/udes-genie-these.dtx
+++ b/macros/latex/contrib/udes-genie-these/udes-genie-these.dtx
@@ -26,18 +26,18 @@
%<these|protocole>%%--- IDENTIFICATION ------------------------------------------------------
%<these|protocole>%%-----------------------------------------------------------------------------
%<these|protocole>
-%<these>\ProvidesExplClass{udes-genie-these}{2022/09/15}{2.0.1}
-%<these> {Universite de Sherbrooke, Faculte de genie: classe de document pour theses, memoires, DPR et essais}
-%<protocole>\ProvidesExplClass{udes-genie-protocole}{2022/09/15}{2.0.1}
-%<protocole> {Universite de Sherbrooke, Faculte de genie: classe de document pour le protocole de redaction}
+%<these>\ProvidesExplClass{udes-genie-these}{2022/09/19}{3.0}
+%<these> {Université de Sherbrooke, Faculté de génie: classe de document pour thèses, mémoires, DPR et essais}
+%<protocole>\ProvidesExplClass{udes-genie-protocole}{2022/09/19}{3.0}
+%<protocole> {Université de Sherbrooke, Faculté de génie: classe de document pour le protocole de rédaction}
%<these|protocole>
%<*driver>
\documentclass[12pt,letterpaper,french]{l3doc}
\usepackage[T1]{fontenc}
-\usepackage[notextcomp]{kpfonts}
+\usepackage{kpfonts}
\usepackage[scaled=0.7881]{DejaVuSansMono}
\usepackage[french]{babel}
-\usepackage{hologo,setspace,parskip,microtype,xspace,tabularx,xcolor,pifont}
+\usepackage{hologo,setspace,parskip,microtype,xspace,tabularx,xcolor,pifont,bookmark}
\hypersetup{colorlinks=true,linkcolor=blue,citecolor=blue,urlcolor=blue,linktocpage=true}
\setlength{\parskip}{1ex plus0.25ex minus0ex}
\setlength{\parindent}{0em}
@@ -128,10 +128,11 @@
% \changes{v2.0}{2018/09/26}{Adaptations pour respecter la nouvelle version du protocole de rédaction.}
% \changes{v2.0.1}{2020/04/17}{(Aussi connue comme v2.0a) Correction de bugs. Changements internes. Changements à la documentation.}
% \changes{v2.0.2}{2022/09/15}{Maintenance (LaTeX2e 2020-02-02 à 2022-06-01). Distribution sur CTAN. Adaptations à la documentation.}
+% \changes{v3.0}{2022/09/19}{Support pour \pkg{biblatex}. Ajustements à la documentation.}
%
% \GetFileInfo{udes-genie-these.dtx}
%
-% \title{CLASSE DE DOCUMENT \latex POUR LA RÉDACTION AUX ÉTUDES SUPÉRIEURES À LA FACULTÉ DE GÉNIE DE L'UNIVERSITÉ DE SHERBROOKE\\{\large \laclassetitre, version 2.0.2}}
+% \title{CLASSE DE DOCUMENT \latex POUR LA RÉDACTION AUX ÉTUDES SUPÉRIEURES À LA FACULTÉ DE GÉNIE DE L'UNIVERSITÉ DE SHERBROOKE\\{\large \laclassetitre, version 3.0}}
% \author{Charles-Antoine Brunet}
% \date{\today}
% \maketitle
@@ -147,8 +148,14 @@
%
% Ce document détaille l'utilisation de \laclasse afin de faciliter son utilisation. Un exemple complet est distribué avec \laclasse. Le but de ce document n'est pas d'expliquer l'utilisation générale de \latex ou de \bibtex. Pour cela, il faut consulter d'autres ouvrages. D'ailleurs, ce document assume une connaissance préalable fonctionnelle de \latex et de \bibtex.
%
+% \subsection*{De la version~2 à la version~3}
+%
+% La version 3 contient un changement incompatible avec la version~2. Le changement répond à des demandes faites à plusieurs reprises au cours des années: supporter le \package |biblatex|. Heureusement, si vous utilisiez la version~2, la transition devrait vous prendre moins de deux minutes. Le paragraphe qui suit vous donne tous les détails.
+%
+% Le style de références est maintenant spécifié par le nouveau champ de configuration |style-references| et non plus dans le préambule avec la macro |\bibliographystyle|. Il faut donc retirer une macro du style |\bibliographystyle{AAA}| et la remplacer par un champ de configuration du genre |style-references = AAA|. C'est tout!
+%
%\section{Installation et vérification}\label{sec:inst}
-% La classe \laclasse peut être installée comme tout autre \package \latex avec le gestionnaire de \packages de votre distribution, comme avec la console de \miktex ou le \tlmgr. Du même coup, il faut s'assurer d'avoir une version à jour de la distribution \latex, car \laclasse utilise des fonctionnalités qui sont relativement récentes. Si vous optez pour une installation manuelle, la classe \laclasse est disponible sur \ctan et s'installe en accord avec les procédures spécifiées dans la documentation de votre distribution \latex.
+% La classe \laclasse peut être installée comme tout autre \package \latex avec le gestionnaire de \packages de votre distribution, comme avec la console de \miktex ou le \tlmgr. Du même coup, il faut s'assurer d'avoir une version à jour de la distribution \latex, car \laclasse utilise des fonctionnalités qui sont relativement récentes. Si vous optez pour une installation manuelle, la classe \laclasse est disponible sur \href{https://www.ctan.org/pkg/udes-genie-these/}{\ctan} et s'installe en accord avec les procédures spécifiées dans la documentation de votre distribution \latex.
%
% Afin de vérifier que l'installation s'est bien passée, il vous est suggéré de compiler l'exemple distribué avec \laclasse. C'est le meilleur moyen de savoir si votre installation \latex a tout ce qu'il faut pour utiliser \laclasse. L'exemple se trouve dans le même répertoire que la documentation.
%
@@ -199,6 +206,7 @@
\bool_new:N \g_@@_listeDesTableaux_bool
\clist_new:N \g_@@_dedicace_cl
+\clist_new:N \g_@@_fichiers_references_cl
\clist_new:N \g_@@_jury_codirecteurs_cl
\clist_new:N \g_@@_jury_evaluateurs_cl
\clist_new:N \g_@@_pas_jury_cl
@@ -231,7 +239,6 @@
\tl_new:N \g_@@_fichier_resume_anglais_tl
\tl_new:N \g_@@_fichier_resume_francais_tl
\tl_new:N \g_@@_fichier_symboles_tl
-\tl_new:N \g_@@_fichiers_references_tl
\tl_new:N \g_@@_format_tl
\tl_new:N \g_@@_juryname_tl
\tl_new:N \g_@@_jury_codirname_tl
@@ -250,8 +257,10 @@
\tl_new:N \g_@@_mots_cles_francais_tl
\tl_new:N \g_@@_motsclesname_tl
\tl_new:N \g_@@_programme_tl
+\tl_new:N \g_@@_references_engin_tl
\tl_new:N \g_@@_specialite_tl
\tl_new:N \g_@@_specialityname_tl
+\tl_new:N \g_@@_style_references_tl
\tl_new:N \g_@@_these_tl
\tl_new:N \g_@@_titre_anglais_tl
\tl_new:N \g_@@_titre_francais_tl
@@ -281,6 +290,8 @@
\tl_const:Nn \c_@@_programme_meca_tl {mecanique}
%<protocole>\tl_const:Nn \c_@@_protocole_droits_tl {Tous~droits~réservés.\ Faculté~de~génie,~Université~de~Sherbrooke.}
%<protocole>\tl_const:Nn \c_@@_protocole_notice_tl {Document~adopté~à~la~Faculté~de~génie~de~l'Université~de~Sherbrooke~par~le~Comité~de~la~recherche~et~des~études~supérieures~(\g_@@_date_cres_tl)~et~le~Comité~des~études~de~la~faculté~de~génie~(\g_@@_date_cefg_tl).}
+\tl_const:Nn \c_@@_references_biblatex_tl {biblatex}
+\tl_const:Nn \c_@@_references_bibtex_tl {bibtex}
\tl_const:Nn \c_@@_type_dprdoctorat_tl {dprdoctorat}
\tl_const:Nn \c_@@_type_dprmaitrise_tl {dprmaitrise}
\tl_const:Nn \c_@@_type_essai_tl {essai}
@@ -291,6 +302,9 @@
%%-----------------------------------------------------------------------------
%%--- INITIALISATION DE VARIABLES -----------------------------------------
%%-----------------------------------------------------------------------------
+\tl_gset_eq:NN \g_@@_references_engin_tl \c_@@_references_bibtex_tl
+\tl_gset:Nn \g_@@_style_references_tl {plain}
+
%% Identifie les types de documents avec dedicace (optionnelle)
\clist_gput_right:Nx \g_@@_dedicace_cl
{\c_@@_type_essai_tl, \c_@@_type_memoire_tl, \c_@@_type_these_tl}
@@ -306,34 +320,50 @@
%\end{implementation}
%
-% \subsection{Options}
-% Pour utiliser \laclasse, il faut spécifier son utilisation avec la macro \cs{documentclass} de \latex. La classe \laclasse a deux options qui permettent de spécifier le style du document, tel que spécifié par le \protocole. Le style choisi est spécifié dans le paramètre optionnel de \cs{documentclass}.
+% \subsection{Options} \label{class-options}
+% Pour utiliser \laclasse, il faut spécifier son utilisation avec la macro \cs{documentclass} de \latex. La classe \laclasse a deux types d'options qui sont spécifiées dans le paramètre optionnel de \cs{documentclass}.
%
%\begin{variable}{livre,simple}
%\begin{syntax}
% |\documentclass| \oarg{style} \{\laclassename\}
%\end{syntax}
-% La valeur de \meta{style} est |livre| ou |simple|. Si le paramètre est absent, le style |livre| est utilisé par défaut.
+% La valeur de \meta{style} est |livre| ou |simple|, tel que spécifié dans le \protocole. Si le paramètre est absent, le style |livre| est utilisé par défaut.
+%
%\end{variable}
%
+%\begin{variable}[added=2022-09-19]{bibtex,biblatex}
+%\begin{syntax}
+% |\documentclass| \oarg{engin-bib} \{\laclassename\}
+%\end{syntax}
+% La valeur de \meta{engin-bib} est |bibtex| ou |biblatex|, selon ce que vous voulez utiliser. Si rien n'est spécifié, |bibtex| est utilisé par défaut.
+%
+% Si le choix est |bibtex|, le style bibliographique est spécifié avec le champ de configuration |style-references| et les fichiers de références utilisés par |bibtex| sont ceux spécifiés avec le champ |references| (voir la section~\ref{sec:config}). La liste des références est générée automatiquement par \laclasse avec la macro |\bibliography|.
+%
+% Si le choix est de |biblatex|, la personne qui rédige le document est responsable de charger le \package |biblatex| avec la macro |\usepackage| dans le préambule, car trop de cas de figures peuvent survenir afin d'assurer un chargement correct. La liste des références est gérérée automatiquement par \laclasse avec la macro |\printbibliography| et les fichiers de références sont spécifiés avec le champs de configuration |references| (voir la section~\ref{sec:config}). Les fichiers de références sont fournis automatiquement par \laclasse avec la macro |\addbibresource|. Le champ de configuration |references-style| est ignoré, car le style est géré par la personne qui rédige avec avec l'aide de |biblatex|.
+%
+%\end{variable}
%\begin{implementation}
%%-----------------------------------------------------------------------------
%%--- OPTIONS DE CLASSE ---------------------------------------------------
%%-----------------------------------------------------------------------------
\DeclareKeys {
- livre.code:n = {
+ biblatex .code:n = {\tl_gset_eq:NN \g_@@_references_engin_tl \c_@@_references_biblatex_tl},
+ biblatex .usage:n = load,
+ bibtex .code:n = {\tl_gset_eq:NN \g_@@_references_engin_tl \c_@@_references_bibtex_tl},
+ bibtex .usage:n = load,
+ livre .code:n = {
\PassOptionsToClass{twoside,openright}{book}
\PassOptionsToPackage{twoside=true}{geometry}
\tl_gset_eq:NN \g_@@_format_tl \c_@@_format_livre_tl
},
- livre.usage:n = load,
- simple.code:n = {
+ livre .usage:n = load,
+ simple .code:n = {
\PassOptionsToClass{oneside,openany}{book}
\PassOptionsToPackage{twoside=false}{geometry}
\tl_gset_eq:NN \g_@@_format_tl \c_@@_format_simple_tl
},
- simple.usage:n = load,
- unknown.code:n = {\PassOptionsToClass{\CurrentOption}{book}},
+ simple .usage:n = load,
+ unknown .code:n = {\PassOptionsToClass{\CurrentOption}{book}},
}
\SetKeys{livre}
@@ -444,7 +474,14 @@
%\begin{syntax}
% |fichiers-references =| \marg{valeur}
%\end{syntax}
-% Ce champ spécifie les fichiers de bibliographie \bibtex à être inclus pour la construction de la liste des références par \bibtex ou un autre utilitaire équivalent. \meta{valeur} est une liste de noms de fichiers et l'extension |.bib| est assumé pour chacun. Chaque nom de fichier est séparé par une virgule. Ce champ ne doit pas contenir d'espaces superflus. D'autres détails au sujet des références bibliographiques sont donnés dans la section~\ref{sec:bibtex}.
+% Ce champ spécifie les fichiers de bibliographie \bibtex à être inclus pour la construction de la liste des références par \bibtex ou un autre utilitaire équivalent. La liste des fichiers à utiliser est spécifiée par \meta{valeur}, une liste de noms de fichiers. Chaque nom de fichier est séparé par une virgule. Ce champ ne doit pas contenir d'espaces superflus. D'autres détails au sujet des références bibliographiques sont donnés dans la section~\ref{sec:refbib}.
+%\end{variable}
+%
+%\begin{variable}[added=2022-09-19]{style-references}
+%\begin{syntax}
+% |style-references =| \marg{valeur}
+%\end{syntax}
+% Ce champ spécifie le style bibliographique à utiliser pour la construction de la liste des références, tel que requis par \bibtex ou un autres engins bibliographiques équivalents. Comme ce champ spécifie le style à utiliser, il n'est pas nécessaire de mettre la macro |\bibliographystyle| dans le préambule, car la classe \laclasse automatise cette étape. Ce champ est ignoré, si l'option de classe |biblatex| a été spécifié (voir la section~\ref{class-options}). Consultez le protocole au sujet des styles bibliographiques. D'autres détails au sujet des références bibliographiques sont donnés dans la section~\ref{sec:refbib}.
%\end{variable}
%
%\begin{implementation}
@@ -481,8 +518,10 @@
fichier-symboles .value_required:n = true,
fichier-acronymes .tl_gset:N = \g_@@_fichier_acronymes_tl,
fichier-acronymes .value_required:n = true,
- fichiers-references .tl_gset:N = \g_@@_fichiers_references_tl,
+ fichiers-references .clist_gset:N = \g_@@_fichiers_references_cl,
fichiers-references .value_required:n = true,
+ style-references .tl_gset:N = \g_@@_style_references_tl,
+ style-references .value_required:n = true,
}
%\end{implementation}
@@ -644,8 +683,10 @@
%
% La gestion du passage d'une langue à une autre dans les parties principales est laissée à la personne qui rédige le document. Cependant, la classe \laclasse est basée, entre autres, sur le \package \babel qui permet de gérer des documents multilingues. Pour plus de détail sur le passage d'une langue à une autre dans un document, la lecture de la documentation de \babel est suggérée. Avec un bon usage des macros de \babel, la typographie sera ajustée en accord avec la langue de ces différentes parties du document.
%
-%\subsection{Références bibliographiques et \bibtex}\label{sec:bibtex}
-% L'utilisation de \bibtex, ou autre utilitaire semblable, avec \laclasse se fait de la même manière que tout autre document \latex. Le style bibliographique est spécifié dans le document avec la commande |\bibliographystyle|, comme il est usuel de le faire. Il est important de noter que le style bibliographique choisi doit respecter les exigences du \protocole. Les fichiers de bibliographie (fichiers |.bib|) sont spécifiés avec le champ |fichiers-references| de la configuration du document, comme mentionné dans la section~\ref{sec:config}. Ils ne sont pas spécifiés avec la commande |\bibliography|, comme cela est fait habituellement, car le placement de la liste des références dans le document est géré par \laclasse.
+%\subsection{Références bibliographiques}\label{sec:refbib}
+% L'utilisation de \bibtex, ou autre utilitaires similaires, avec \laclasse est évidemment possible.
+%
+% Le style bibliographique est spécifié dans le document avec le champ |style-references| de la configuration du document et les fichiers de références (fichiers |.bib|) sont spécifiés avec le champ |fichiers-references|. Il est important de noter que le style bibliographique choisi doit respecter les exigences du \protocole. La section~\ref{sec:config} discute de ces champs et la section~\ref{class-options} discute aussi des options pour \bibtex et |biblatex|.
%
%\begin{implementation}
%<*protocole>
@@ -905,9 +946,6 @@
\tl_if_blank:VT \g_@@_fichier_acronymes_tl
{ \tl_gclear:N \g_@@_fichier_acronymes_tl }
- \tl_if_blank:VT \g_@@_fichiers_references_tl
- { \tl_gclear:N \g_@@_fichiers_references_tl }
-
\tl_if_blank:VT \g_@@_titre_francais_tl
{ \tl_gclear:N \g_@@_titre_francais_tl }
@@ -947,7 +985,7 @@
%<these> \tl_if_empty:NT \g_@@_programme_tl
%<these> { \msg_error:nn {udesgeniethese}{config_programme_vide}{type} }
%<these>
- \tl_if_empty:NT \g_@@_fichiers_references_tl
+ \clist_if_empty:NT \g_@@_fichiers_references_cl
{ \msg_error:nnnn {udesgeniethese}{config_fichiers_vides}{la~bibliographie}{fichiersReferences} }
\tl_if_empty:NT \g_@@_auteur_nom_tl
@@ -1302,7 +1340,7 @@
{
\chapter*{\g_@@_acknowledgementsname_tl}
\int_set:Nn \l_@@_tmp_int {\value{page}}
- \input{\g_@@_fichier_remerciements_tl}
+ \input{\g_@@_fichier_remerciements_tl}\par
\thispagestyle{empty}\clearpage
\int_sub:Nn \l_@@_tmp_int {\value{page}}
\int_compare:nNnT {\l_@@_tmp_int} < {-1}
@@ -1359,7 +1397,7 @@
{
\chapter*{\glossaryname}
\markboth{\glossaryname}{\glossaryname}
- \input{\g_@@_fichier_lexique_tl}
+ \input{\g_@@_fichier_lexique_tl}\par
\if@openright\cleardoublepage\else\clearpage\fi
}
@@ -1367,7 +1405,7 @@
{
\chapter*{\g_@@_listsymbolsname_tl}
\markboth{\g_@@_listsymbolsname_tl}{\g_@@_listsymbolsname_tl}
- \input{\g_@@_fichier_symboles_tl}
+ \input{\g_@@_fichier_symboles_tl}\par
\if@openright\cleardoublepage\else\clearpage\fi
}
@@ -1375,7 +1413,7 @@
{
\chapter*{\g_@@_listacronymsname_tl}
\markboth{\g_@@_listacronymsname_tl}{\g_@@_listacronymsname_tl}
- \input{\g_@@_fichier_acronymes_tl}
+ \input{\g_@@_fichier_acronymes_tl}\par
\if@openright\cleardoublepage\else\clearpage\fi
}
%</these>
@@ -1385,13 +1423,35 @@
{
\refstepcounter{chapter}
\addcontentsline{toc}{chapter}{\bibname}
- \bibliography{\g_@@_fichiers_references_tl}
+
+ \tl_case:Nn \g_@@_references_engin_tl
+ {
+ \c_@@_references_bibtex_tl
+ { \bibliography{\g_@@_fichiers_references_cl} }
+ \c_@@_references_biblatex_tl
+ { \printbibliography }
+ }
+
\if@openright\cleardoublepage\else\clearpage\fi
}
%%-----------------------------------------------------------------------------
%%--- GESTION AUTOMATISEE -------------------------------------------------
%%-----------------------------------------------------------------------------
+\AtEndPreamble
+{
+ \tl_case:Nn \g_@@_references_engin_tl
+ {
+ \c_@@_references_bibtex_tl
+ { \bibliographystyle{\g_@@_style_references_tl} }
+ \c_@@_references_biblatex_tl
+ {
+ \clist_map_inline:Nn \g_@@_fichiers_references_cl
+ {\addbibresource{#1}}
+ }
+ }
+}
+
\AfterEndPreamble{
\@@_validation
\@@_setup
diff --git a/macros/latex/contrib/udes-genie-these/udes-genie-these.pdf b/macros/latex/contrib/udes-genie-these/udes-genie-these.pdf
index ecd7d6287d..2e39e9516a 100644
--- a/macros/latex/contrib/udes-genie-these/udes-genie-these.pdf
+++ b/macros/latex/contrib/udes-genie-these/udes-genie-these.pdf
Binary files differ
diff --git a/macros/latex/contrib/wargame/README.md b/macros/latex/contrib/wargame/README.md
new file mode 100644
index 0000000000..e5fd92458c
--- /dev/null
+++ b/macros/latex/contrib/wargame/README.md
@@ -0,0 +1,270 @@
+# A package to make Hex'n'Counter wargames in LaTeX
+## Version 0.2
+
+This package can help make classic [Hex'n'Counter wargames][1] using
+LaTeX. The package provide tools for generating
+
+- Hex maps and boards
+- Counters (called _chits_ since TeX have already taken _counters_)
+ for units, markers, and so on
+- Counter sheets
+- Order of Battle charts
+- Illustrations in the rules using the defined maps and counters
+
+The result will often be a PDF (or set of PDFs) that contain
+everything one will need for a game (rules, charts, boards, counter
+sheets).
+
+- The package uses [NATO App6](#NATO-App6) symbology for units.
+- The package uses [TikZ][2] for most things.
+- The package support exporting the game to a
+ [VASSAL](#VASSAL-support) module
+
+## Sources
+
+The sources of the package are kept at [GitLab][3]
+
+## CTAN
+
+The package is available from [CTAN][4] in the directory
+`/macros/latex/contrib/wargame`. As of this writing, the package has
+not hit any of the major distributions (e.g., [TeXLive][5]).
+
+If you get the sources (`wargame.ins`, all `.dtx` and `.py`) files,
+then to install do
+
+ latex wargame.ins
+ pdflatex beach
+ pdflatex city
+ pdflatex light_woods
+ pdflatex mountains
+ pdflatex rough
+ pdflatex swamp
+ pdflatex town
+ pdflatex village
+ pdflatex woods
+
+(You need to use `pdflatex`, `xelatex`, or `lualatex` - plain `latex`
+with DVI output will not work)
+
+Then copy the relevant files to your TeX tree (e.g., `~/texmf/`)
+as
+
+ mkdir ~/texmf/tex/latex/wargame
+ cp tikzlibrary*.tex ~/texmf/tex/latex/wargame/
+ cp wargame.sty ~/texmf/tex/latex/wargame/
+ cp wgexpor.sty ~/texmf/tex/latex/wargame/
+ cp city.pdf ~/texmf/tex/latex/wargame/
+ cp light_woods.pdf ~/texmf/tex/latex/wargame/
+ cp mountains.pdf ~/texmf/tex/latex/wargame/
+ cp rough.pdf ~/texmf/tex/latex/wargame/
+ cp swamp.pdf ~/texmf/tex/latex/wargame/
+ cp town.pdf ~/texmf/tex/latex/wargame/
+ cp village.pdf ~/texmf/tex/latex/wargame/
+ cp woods.pdf ~/texmf/tex/latex/wargame/
+ cp export.py ~/texmf/tex/latex/wargame/
+ cp svg2tikz.py ~/texmf/tex/latex/wargame/
+
+To generate the documentation, after having done the above, do
+
+ pdflatex wargame.dtx
+ makeindex -s gind -o wargame.ind wargame.idx
+ pdflatex wargame.dtx
+ pdflatex wargame.dtx
+ pdflatex symbols.tex
+ pdflatex compat.tex
+ pdflatex compat.tex
+
+(You need to use `pdflatex`, `xelatex`, or `lualatex` - plain `latex`
+with DVI output will not work)
+
+You can install these into your TeX tree with (e.g., `~/texmf/`)
+
+ mkdir -p ~/texmf/doc/latex/wargame/
+ cp wargame.pdf ~/texmf/doc/latex/wargame/
+ cp symbols.py ~/texmf/doc/latex/wargame/
+ cp compat.py ~/texmf/doc/latex/wargame/
+
+If you want to generate the tutorial document, do
+
+ cd tutorial
+ pdflatex game
+ pdflatex game
+
+If you also want to make the tutorial VASSAL module, do (also in
+`tutorial`), do
+
+ pdflatex export.tex
+ ../export.py export.pdf export.json -o Game.vmod \
+ -d "Example module from LaTeX PnP game" \
+ -t "LaTeX wargame tutorial" -v 0.1 \
+ -p patch.py
+
+
+
+
+## Download from GitLab
+
+- [Zip file of package and support files][artifacts.zip]
+- [Browse content of package][browse]
+- [Documentation][wargame.pdf]
+- [Tutorial][tutorial.pdf] (and associated VASSAL [module][Game.vmod])
+- [Table of symbols][symbols.pdf]
+- [Compatibility][compat.pdf]
+
+To install, get the ([zip file][artifacts.zip]) and unzip into your
+TeX tree, for example
+
+ mkdir -p ~/texmf
+ (cd ~/texmf && unzip ../artifacts.zip)
+
+on Un*x like systems.
+
+## Tutorial
+
+See the [tutorial](tutorial/README.md) page for more.
+
+## Examples
+
+Below are some print'n'play board wargames made with this package.
+These are not original games but rather revamps of existing games.
+All credits goes to the original authors of these games.
+
+- WWII
+ - Eastern Front
+ - [Battle for Moscow][bfm_tex]
+ - [Hell's Gate][hellsgate_tex] (private)
+ - [Unternehmung 25][unternehmung_tex] (private)
+ - Western Front
+ - [D-Day][dday_tex] (Avalon Hill classic)
+ - [Paul Koenig's Market Garden][pkmg_tex]
+ - [Paul Koenig's D-Day][pkdday_tex]
+ - Pacific theatre
+ - [First Blood][firstblood_tex] (Avalon Hill International
+ Kriegspiel Association classic)
+ - [Malaya][malaya_tex] (private)
+ - Africa
+ - [Afrika Korps][afrikakorps_tex] (Avalon Hill classic)
+ - [Battles of El Alamein][boel_tex] (private)
+- Modern/Speculative
+ - [Strike Force One][sfo_tex]
+ - [Kriegspiel][kriegspiel_tex] (Avalon Hill classic)
+
+## VASSAL support
+
+The packages has the script [`export.py`](utils/export.py) to
+generate a draft [VASSAL][5] module from the defined charts, boards,
+counters, OOBs, and so on. More about this is given in the
+documentation.
+
+The script will generate a first draft of a module, which then can be
+edited in the VASSAL editor for the final thing.
+
+Alternatively, one can provide a Python script to do more on the
+generated module, such as defining starting positions, fixing grid
+layouts, and so on. Using such a patch script, one can get an
+(almost) final module. This means, that even if one makes changes to
+the original content, it is easy to remake the module without much
+need for the VASSAL editor.
+
+An example of this is given in the [Battle for Moscow][bfm_tex]
+project, and of course in the [tutorial](tutorial/)
+
+## NATO App6
+
+The package supports
+
+- All air, equipment, installation, land, sea surface, sub surface,
+ and space command symbols, including amplifiers and modifiers
+- All friendly, hostile, neutral, and unknown faction frame.
+ Undecided faction frames can be made by specifying `dashed` line
+ styles.
+- Some, but very few, other kinds of symbology.
+
+Here are some references for more information on the NATO App6
+symbology standard.
+
+- The [Wikipedia page][6] on NATO Joint Military Symbology
+- The [NATO page][7]. If this does not work for you, then try to go
+ to the [standards page][8] and put in and write in `SYMBOLOGY` in
+ the _Document Title Contains Words_ field and press _Start_.
+- Other LaTeX package for making NATO symbology [XMilSymb][9]
+
+## Copyright and license
+
+(c) 2022 Christian Holm Christensen
+
+This work is licensed under the Creative Commons
+Attribution-ShareAlike 4.0 International License (CC-BY-SA-4.0). To
+view a copy of this license, visit [CC][10] or send a letter to
+Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+### Some comments on copyright
+
+_Caveat_: I am not a lawyer.
+
+Note that this license applies to the `wargame` package as such. What
+you generate using the package is _not_ required to be licensed
+according to the _ShareAlike_ clause of CC-BY-SA-4.0. That is, you
+can license your materials _any way you want_.
+
+However, that copyright rights on games is not as prohibitive as you
+may think (see [this thread on BGG][11]). What you _can_ copyright is
+original, artistic expression. That is, the copyrighted work must not
+be a copy of something else (originality) and must be some form of
+expression. One _cannot_ copyright ideas, only their expression in so
+far as it is _artistic_ (i.e., not a trivial expression that anyone
+knowledgeable within the field can do with rudimentary effort).
+
+So you _can not_ copyright your game mechanics, for example, only how
+you described them. You _can not_ copyright a title (but you may be
+able to claim trademark on it). You _can_ copyright the wording of
+the rules, the graphics that you use, and so on.
+
+This also means, that you are essentially free to make your own
+version of previously published game, _as long as_
+
+- you do not copy existing text
+- you do not copy existing graphics
+- you respect any kind of trademark claims
+
+However, it is advisable to contact the copyright holders of the
+previously published game to avoid [SNAFU][12]. If in doubt, seek
+professional help.
+
+[1]: https://en.wikipedia.org/wiki/Wargame
+[2]: https://github.com/pgf-tikz/pgf
+[3]: https://gitlab.com/wargames_tex/wargame_tex
+[4]: https://ctan.org/tex-archive/macros/latex/contrib/wargame
+[5]: https://tug.org/texlive/index.html
+[6]: https://vassalengine.org
+[7]: https://en.wikipedia.org/wiki/NATO_Joint_Military_Symbology
+[8]: https://nso.nato.int/nso/nsdd/main/standards/ap-details/1912/EN
+[9]: https://nso.nato.int/nso/nsdd/main/standards
+[10]: https://github.com/ralphieraccoon/MilSymb
+[11]: http://creativecommons.org/licenses/by-sa/4.0/
+[12]: https://boardgamegeek.com/thread/493249/
+[13]: https://en.wikipedia.org/wiki/SNAFU
+
+
+[artifacts.zip]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/download?job=dist
+[browse]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/browse?job=dist
+[wargame.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/wargame.pdf?job=dist
+[tutorial.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/tutorial.pdf?job=dist
+[Game.vmod]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/Game.vmod?job=dist
+[symbols.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/symbols.pdf?job=dist
+[compat.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/compat.pdf?job=dist
+
+[bfm_tex]: https://gitlab.com/wargames_tex/bfm_tex
+[hellsgate_tex]: https://gitlab.com/wargames_tex/hellsgate_tex
+[unternehmung_tex]: https://gitlab.com/wargames_tex/unternehmung_tex
+[dday_tex]: https://gitlab.com/wargames_tex/dday_tex
+[pkmg_tex]: https://gitlab.com/wargames_tex/pkmg_tex
+[pkdday_tex]: https://gitlab.com/wargames_tex/pkdday_tex
+[firstblood_tex]: https://gitlab.com/wargames_tex/firstblood_tex
+[malaya_tex]: https://gitlab.com/wargames_tex/malaya_tex
+[afrikakorps_tex]: https://gitlab.com/wargames_tex/afrikakorps_tex
+[boel_tex]: https://gitlab.com/wargames_tex/boel_tex
+[sfo_tex]: https://gitlab.com/wargames_tex/sfo_tex
+[kriegspiel_tex]: https://gitlab.com/wargames_tex/kriegspiel_tex
+
diff --git a/macros/latex/contrib/wargame/doc/README.md b/macros/latex/contrib/wargame/doc/README.md
new file mode 100644
index 0000000000..e5fd92458c
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/README.md
@@ -0,0 +1,270 @@
+# A package to make Hex'n'Counter wargames in LaTeX
+## Version 0.2
+
+This package can help make classic [Hex'n'Counter wargames][1] using
+LaTeX. The package provide tools for generating
+
+- Hex maps and boards
+- Counters (called _chits_ since TeX have already taken _counters_)
+ for units, markers, and so on
+- Counter sheets
+- Order of Battle charts
+- Illustrations in the rules using the defined maps and counters
+
+The result will often be a PDF (or set of PDFs) that contain
+everything one will need for a game (rules, charts, boards, counter
+sheets).
+
+- The package uses [NATO App6](#NATO-App6) symbology for units.
+- The package uses [TikZ][2] for most things.
+- The package support exporting the game to a
+ [VASSAL](#VASSAL-support) module
+
+## Sources
+
+The sources of the package are kept at [GitLab][3]
+
+## CTAN
+
+The package is available from [CTAN][4] in the directory
+`/macros/latex/contrib/wargame`. As of this writing, the package has
+not hit any of the major distributions (e.g., [TeXLive][5]).
+
+If you get the sources (`wargame.ins`, all `.dtx` and `.py`) files,
+then to install do
+
+ latex wargame.ins
+ pdflatex beach
+ pdflatex city
+ pdflatex light_woods
+ pdflatex mountains
+ pdflatex rough
+ pdflatex swamp
+ pdflatex town
+ pdflatex village
+ pdflatex woods
+
+(You need to use `pdflatex`, `xelatex`, or `lualatex` - plain `latex`
+with DVI output will not work)
+
+Then copy the relevant files to your TeX tree (e.g., `~/texmf/`)
+as
+
+ mkdir ~/texmf/tex/latex/wargame
+ cp tikzlibrary*.tex ~/texmf/tex/latex/wargame/
+ cp wargame.sty ~/texmf/tex/latex/wargame/
+ cp wgexpor.sty ~/texmf/tex/latex/wargame/
+ cp city.pdf ~/texmf/tex/latex/wargame/
+ cp light_woods.pdf ~/texmf/tex/latex/wargame/
+ cp mountains.pdf ~/texmf/tex/latex/wargame/
+ cp rough.pdf ~/texmf/tex/latex/wargame/
+ cp swamp.pdf ~/texmf/tex/latex/wargame/
+ cp town.pdf ~/texmf/tex/latex/wargame/
+ cp village.pdf ~/texmf/tex/latex/wargame/
+ cp woods.pdf ~/texmf/tex/latex/wargame/
+ cp export.py ~/texmf/tex/latex/wargame/
+ cp svg2tikz.py ~/texmf/tex/latex/wargame/
+
+To generate the documentation, after having done the above, do
+
+ pdflatex wargame.dtx
+ makeindex -s gind -o wargame.ind wargame.idx
+ pdflatex wargame.dtx
+ pdflatex wargame.dtx
+ pdflatex symbols.tex
+ pdflatex compat.tex
+ pdflatex compat.tex
+
+(You need to use `pdflatex`, `xelatex`, or `lualatex` - plain `latex`
+with DVI output will not work)
+
+You can install these into your TeX tree with (e.g., `~/texmf/`)
+
+ mkdir -p ~/texmf/doc/latex/wargame/
+ cp wargame.pdf ~/texmf/doc/latex/wargame/
+ cp symbols.py ~/texmf/doc/latex/wargame/
+ cp compat.py ~/texmf/doc/latex/wargame/
+
+If you want to generate the tutorial document, do
+
+ cd tutorial
+ pdflatex game
+ pdflatex game
+
+If you also want to make the tutorial VASSAL module, do (also in
+`tutorial`), do
+
+ pdflatex export.tex
+ ../export.py export.pdf export.json -o Game.vmod \
+ -d "Example module from LaTeX PnP game" \
+ -t "LaTeX wargame tutorial" -v 0.1 \
+ -p patch.py
+
+
+
+
+## Download from GitLab
+
+- [Zip file of package and support files][artifacts.zip]
+- [Browse content of package][browse]
+- [Documentation][wargame.pdf]
+- [Tutorial][tutorial.pdf] (and associated VASSAL [module][Game.vmod])
+- [Table of symbols][symbols.pdf]
+- [Compatibility][compat.pdf]
+
+To install, get the ([zip file][artifacts.zip]) and unzip into your
+TeX tree, for example
+
+ mkdir -p ~/texmf
+ (cd ~/texmf && unzip ../artifacts.zip)
+
+on Un*x like systems.
+
+## Tutorial
+
+See the [tutorial](tutorial/README.md) page for more.
+
+## Examples
+
+Below are some print'n'play board wargames made with this package.
+These are not original games but rather revamps of existing games.
+All credits goes to the original authors of these games.
+
+- WWII
+ - Eastern Front
+ - [Battle for Moscow][bfm_tex]
+ - [Hell's Gate][hellsgate_tex] (private)
+ - [Unternehmung 25][unternehmung_tex] (private)
+ - Western Front
+ - [D-Day][dday_tex] (Avalon Hill classic)
+ - [Paul Koenig's Market Garden][pkmg_tex]
+ - [Paul Koenig's D-Day][pkdday_tex]
+ - Pacific theatre
+ - [First Blood][firstblood_tex] (Avalon Hill International
+ Kriegspiel Association classic)
+ - [Malaya][malaya_tex] (private)
+ - Africa
+ - [Afrika Korps][afrikakorps_tex] (Avalon Hill classic)
+ - [Battles of El Alamein][boel_tex] (private)
+- Modern/Speculative
+ - [Strike Force One][sfo_tex]
+ - [Kriegspiel][kriegspiel_tex] (Avalon Hill classic)
+
+## VASSAL support
+
+The packages has the script [`export.py`](utils/export.py) to
+generate a draft [VASSAL][5] module from the defined charts, boards,
+counters, OOBs, and so on. More about this is given in the
+documentation.
+
+The script will generate a first draft of a module, which then can be
+edited in the VASSAL editor for the final thing.
+
+Alternatively, one can provide a Python script to do more on the
+generated module, such as defining starting positions, fixing grid
+layouts, and so on. Using such a patch script, one can get an
+(almost) final module. This means, that even if one makes changes to
+the original content, it is easy to remake the module without much
+need for the VASSAL editor.
+
+An example of this is given in the [Battle for Moscow][bfm_tex]
+project, and of course in the [tutorial](tutorial/)
+
+## NATO App6
+
+The package supports
+
+- All air, equipment, installation, land, sea surface, sub surface,
+ and space command symbols, including amplifiers and modifiers
+- All friendly, hostile, neutral, and unknown faction frame.
+ Undecided faction frames can be made by specifying `dashed` line
+ styles.
+- Some, but very few, other kinds of symbology.
+
+Here are some references for more information on the NATO App6
+symbology standard.
+
+- The [Wikipedia page][6] on NATO Joint Military Symbology
+- The [NATO page][7]. If this does not work for you, then try to go
+ to the [standards page][8] and put in and write in `SYMBOLOGY` in
+ the _Document Title Contains Words_ field and press _Start_.
+- Other LaTeX package for making NATO symbology [XMilSymb][9]
+
+## Copyright and license
+
+(c) 2022 Christian Holm Christensen
+
+This work is licensed under the Creative Commons
+Attribution-ShareAlike 4.0 International License (CC-BY-SA-4.0). To
+view a copy of this license, visit [CC][10] or send a letter to
+Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+### Some comments on copyright
+
+_Caveat_: I am not a lawyer.
+
+Note that this license applies to the `wargame` package as such. What
+you generate using the package is _not_ required to be licensed
+according to the _ShareAlike_ clause of CC-BY-SA-4.0. That is, you
+can license your materials _any way you want_.
+
+However, that copyright rights on games is not as prohibitive as you
+may think (see [this thread on BGG][11]). What you _can_ copyright is
+original, artistic expression. That is, the copyrighted work must not
+be a copy of something else (originality) and must be some form of
+expression. One _cannot_ copyright ideas, only their expression in so
+far as it is _artistic_ (i.e., not a trivial expression that anyone
+knowledgeable within the field can do with rudimentary effort).
+
+So you _can not_ copyright your game mechanics, for example, only how
+you described them. You _can not_ copyright a title (but you may be
+able to claim trademark on it). You _can_ copyright the wording of
+the rules, the graphics that you use, and so on.
+
+This also means, that you are essentially free to make your own
+version of previously published game, _as long as_
+
+- you do not copy existing text
+- you do not copy existing graphics
+- you respect any kind of trademark claims
+
+However, it is advisable to contact the copyright holders of the
+previously published game to avoid [SNAFU][12]. If in doubt, seek
+professional help.
+
+[1]: https://en.wikipedia.org/wiki/Wargame
+[2]: https://github.com/pgf-tikz/pgf
+[3]: https://gitlab.com/wargames_tex/wargame_tex
+[4]: https://ctan.org/tex-archive/macros/latex/contrib/wargame
+[5]: https://tug.org/texlive/index.html
+[6]: https://vassalengine.org
+[7]: https://en.wikipedia.org/wiki/NATO_Joint_Military_Symbology
+[8]: https://nso.nato.int/nso/nsdd/main/standards/ap-details/1912/EN
+[9]: https://nso.nato.int/nso/nsdd/main/standards
+[10]: https://github.com/ralphieraccoon/MilSymb
+[11]: http://creativecommons.org/licenses/by-sa/4.0/
+[12]: https://boardgamegeek.com/thread/493249/
+[13]: https://en.wikipedia.org/wiki/SNAFU
+
+
+[artifacts.zip]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/download?job=dist
+[browse]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/browse?job=dist
+[wargame.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/wargame.pdf?job=dist
+[tutorial.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/tutorial.pdf?job=dist
+[Game.vmod]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/Game.vmod?job=dist
+[symbols.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/symbols.pdf?job=dist
+[compat.pdf]: https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/compat.pdf?job=dist
+
+[bfm_tex]: https://gitlab.com/wargames_tex/bfm_tex
+[hellsgate_tex]: https://gitlab.com/wargames_tex/hellsgate_tex
+[unternehmung_tex]: https://gitlab.com/wargames_tex/unternehmung_tex
+[dday_tex]: https://gitlab.com/wargames_tex/dday_tex
+[pkmg_tex]: https://gitlab.com/wargames_tex/pkmg_tex
+[pkdday_tex]: https://gitlab.com/wargames_tex/pkdday_tex
+[firstblood_tex]: https://gitlab.com/wargames_tex/firstblood_tex
+[malaya_tex]: https://gitlab.com/wargames_tex/malaya_tex
+[afrikakorps_tex]: https://gitlab.com/wargames_tex/afrikakorps_tex
+[boel_tex]: https://gitlab.com/wargames_tex/boel_tex
+[sfo_tex]: https://gitlab.com/wargames_tex/sfo_tex
+[kriegspiel_tex]: https://gitlab.com/wargames_tex/kriegspiel_tex
+
diff --git a/macros/latex/contrib/wargame/doc/compat.pdf b/macros/latex/contrib/wargame/doc/compat.pdf
new file mode 100644
index 0000000000..02dbab19cd
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/compat.pdf
Binary files differ
diff --git a/macros/latex/contrib/wargame/doc/symbols.pdf b/macros/latex/contrib/wargame/doc/symbols.pdf
new file mode 100644
index 0000000000..0f0ace1efb
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/symbols.pdf
Binary files differ
diff --git a/macros/latex/contrib/wargame/doc/tutorial/Makefile b/macros/latex/contrib/wargame/doc/tutorial/Makefile
new file mode 100644
index 0000000000..5d4061c347
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/Makefile
@@ -0,0 +1,51 @@
+#
+#
+#
+LATEX := pdflatex
+LATEX_FLAGS := -interaction=nonstopmode \
+ -file-line-error \
+ --synctex=15 \
+ -shell-escape
+EXPORT := ../utils/export.py
+EXPORT_FLAGS :=
+
+ifdef VERBOSE
+MUTE :=
+REDIR :=
+LATEX_FLAGS :=
+EXPORT_FLAGS := -V
+else
+MUTE := @
+REDIR := > /dev/null 2>&1
+endif
+
+
+%.aux:%.tex
+ @echo "LATEX $< -> $@"
+ $(MUTE)TEXINPUTS=:..: $(LATEX) $(LATEX_FLAGS) $< $(REDIR)
+
+%.pdf:%.aux
+ @echo "LATEX $*.tex -> $@ (via $*.aux)"
+ $(MUTE)TEXINPUTS=:..: $(LATEX) $(LATEX_FLAGS) $*.tex $(REDIR)
+
+%.pdf:%.tex
+ @echo "LATEX $< -> $@"
+ $(MUTE)TEXINPUTS=:..: $(LATEX) $(LATEX_FLAGS) $< $(REDIR)
+
+%.json:%.pdf
+
+all: game.pdf Game.vmod
+
+game.aux:game.tex game.sty export.tex
+export.pdf:export.tex game.sty
+
+Game.vmod:export.pdf export.json patch.py game.pdf
+ @echo "$(EXPORT) $< -> $@"
+ $(MUTE)$(EXPORT) export.pdf export.json -p patch.py -r game.pdf \
+ -d "Example module from LaTeX PnP game" \
+ -t "LaTeX wargame tutorial" -v 0.1 -o $@
+
+clean:
+ rm -f *~ *.log *.out *.aux *.pdf *.vmod *.json
+ rm -f *.synctex* *.hd
+ rm -rf __pycache__
diff --git a/macros/latex/contrib/wargame/doc/tutorial/README.md b/macros/latex/contrib/wargame/doc/tutorial/README.md
new file mode 100644
index 0000000000..92c884f6ef
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/README.md
@@ -0,0 +1,41 @@
+# Tutorial on how to use the `wargame` package
+
+This directory contains a tutorial on how to use the `wargame` package
+to make a hex'n'counter (Print'n'Play) wargame.
+
+It also contains information on how to make a VASSAL module from a
+game.
+
+## The PDF and VASSAL module
+-
+ [PDF](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/tutorial.pdf?job=dist)
+- [VASSAL
+ module](https://gitlab.com/wargames_tex/wargame_tex/-/jobs/artifacts/master/file/public/doc/latex/wargame/Game.vmod?job=dist)
+
+## Content
+
+- [`game.tex`](game.tex) The tutorial and game
+- [`game.sty`](game.sty) Package defining most stuff for the game
+- [`export.tex`](export.tex) Export graphics to VASSAL
+- [`patch.py`](patch.py) Patch VASSAL module
+
+## How to build
+
+To build the tutorial, simple do
+
+ pdflatex game
+ pdflatex game
+
+Alternatively, if you use some sort of LaTeX Integrated Development
+Environment (IDE), load [`game.tex`](game.tex) into your IDE and run
+LaTeX from there.
+
+To build the VASSAL module, simply do
+
+ pdflatex export.tex
+ `kpsewhich export.py` export.pdf export.json -o Game.vmod \
+ -d "Example module from LaTeX PnP game" \
+ -t "LaTeX wargame tutorial" -v 0.1 \
+ -p patch.py
+
+
diff --git a/macros/latex/contrib/wargame/doc/tutorial/export.tex b/macros/latex/contrib/wargame/doc/tutorial/export.tex
new file mode 100644
index 0000000000..adbb65ba6e
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/export.tex
@@ -0,0 +1,385 @@
+% \section{VASSAL module}
+% \label{sec:vassal}
+%
+% As already mentioned several times in this tutorial, we can use the
+% definitions of maps, counters, and charts to generate a VASSAL
+% module.
+%
+% \begin{quote}
+% VASSAL\footnote{\url{https://vassalengine.org}} is a
+% cross-platform\footnote{It is written in Java, meaning it runs
+% almost everywhere, except on iOS and Android} tool for playing
+% wargames against other humans or solitaire. One can do
+% Play-By-E-Mail (PBEM) or online.
+% \end{quote}
+%
+% The trick is to prepare a separate \LaTeX{} document, say
+% \texttt{export.tex} as in this tutorial, which exports the images as
+% single pages. Then, the Python script \texttt{export.py}
+% distributed with the \textsf{wargame} package picks up this output
+% (\texttt{export.pdf} and \texttt{export.json}) and generates a draft
+% VASSAL module.
+%
+% In addition, you can supply a Python script, say \texttt{patch.py},
+% which will be run on the draft module so that you fix things up in
+% the VASSAL module. In this way, your VASSAL module will likely need
+% very little hand editing (if at all), and will be robust against
+% changes in the \LaTeX{} code\footnote{Assuming you keep your Python
+% \texttt{patch.py} script up to date.}. This of course requires a
+% bit of familiarity with Python, which is time well spent.
+%
+% Let us get into it.
+%
+% \subsection{The \texttt{export.tex} file}.
+% \label{sec:export:tex}
+%
+% This file will output all the images to a PDF,
+% \meta{export}\texttt{.pdf} along with meta information to a
+% JSON\footnote{JavaScript Object Notation} file
+% \meta{export}\texttt{.json}. This is relatively simple to do.
+%
+% We need to use the document class \texttt{wgexport}, so lets go a
+% head and load that.
+%
+% \begin{macrocode}
+\documentclass[11pt]{wgexport}
+% \end{macrocode}
+%
+% Make sure you give the right font size as argument.
+%
+% This is where it pays off that we put all our definitions of
+% counters, board, charts, etc. into a separate package. To import
+% these, we simply use that package here\footnote{If we hadn't made
+% that package, we would have to repeat the definitions in some
+% way. Very error prone}. So we load the package and start our
+% document.
+%
+% \begin{macrocode}
+\usepackage{game}
+\begin{document}
+% \end{macrocode}
+%
+% Now the body of the document will simply consist of a list of
+% images, one for each side of each counter, the board, charts, and so
+% on. We need to put everything into the environment
+% \texttt{imagelist} which will keep track of our meta data.
+%
+% \begin{macrocode}
+\begin{imagelist}
+% \end{macrocode}
+%
+% So far so good. The first thing we will output are the counters.
+% For that we will use the macro \verb+\doublechitimages+ (if we had
+% single sided counters, we would use \verb+\chitimages+). This macro
+% takes two arguments: The list of counter definitions and the faction
+% of the chits. So lets go ahead and make those for factions A and B,
+% and the special faction ``Markers'' which will only be the game turn
+% counter.
+%
+% \begin{macrocode}
+\doublechitimages[A]{\alla}
+\doublechitimages[B]{\allb}
+\doublechitimages[Markers]{{game turn}}
+% \end{macrocode}
+%
+% Again, the macros we made for the counters comes in handy. Note
+% that we have used it twice so far: For the OOBs and here for the
+% VASSAL module. We will, in fact, use them one more time to create
+% the counter sheet.
+%
+% Right, so that made our counter images and the associated meta
+% data. Next thing is to add our board. For that, we use the
+% environment \texttt{boardimage}. Inside that environment we must
+% draw the board. The environment takes one optional argument which
+% classifies the board. Meaningful classifications are \texttt{board}
+% (default) and \texttt{oob} for OOBs. The first mandatory argument
+% is the name of the board (more or less free form text, except any of
+% ``\texttt{./\textbackslash '"}'' should not be used. The second
+% mandatory argument is a sub-category, and is mainly reserved for
+% future use.
+%
+% \begin{macrocode}
+\begin{boardimage}{Board}{}
+ \begin{board}
+ \end{board}
+\end{boardimage}
+% \end{macrocode}
+%
+% We will make another board image for our OOB, since that component
+% should hold counters in VASSAL. We pass the optional argument
+% \texttt{oob} in this case.
+%
+% \begin{macrocode}
+\begin{boardimage}[oob]{OOB}{}%
+ \fulloob
+\end{boardimage}
+% \end{macrocode}
+%
+% We have two charts that we would also like to be put in: The CRT and
+% the TE. These \emph{must} be put into \Tikz{} pictures, and we
+% precede those with the macro \verb+\info+. This macro takes three
+% arguments: The name of the next image, the category, and
+% sub-category. Again, the name is more or less free form, and the
+% category in some sense dictates how it will present in the VASSAL
+% module. For charts we should use the category \texttt{chart}. The
+% sub-category isn't really used at this point.
+%
+% \begin{macrocode}
+\info{CRT}{chart}{}
+\begin{tikzpicture}
+ \node{\crt};
+\end{tikzpicture}
+%
+\info{TEC}{chart}{}
+\begin{tikzpicture}
+ \node{\tec};
+\end{tikzpicture}
+% \end{macrocode}
+%
+% We also want background images for our pools of eliminated units in
+% VASSAL. This will be enlarged version of main headquarter unit of
+% each faction, overlayed with a white semi-transparent background.
+%
+% \begin{macrocode}
+\info{A}{pool}{}
+\begin{tikzpicture}[scale=7]
+ \chit[a hq];
+ \fill[white,opacity=.5](-.6,-.6)rectangle++(1.2,1.2);
+\end{tikzpicture}
+\info{B}{pool}{}
+\begin{tikzpicture}[scale=7]
+ \chit[b hq];
+ \fill[white,opacity=.5](-.6,-.6)rectangle++(1.2,1.2);
+\end{tikzpicture}
+% \end{macrocode}
+%
+% We can a splash page image. We have not defined such an image in
+% the \texttt{game} package, but we could have, so we will make it
+% here. Again, it should be a \Tikz{} picture. For this, we need to
+% use the category \texttt{front}.
+%
+% \begin{macrocode}
+\info{Splash}{front}{}
+\begin{tikzpicture}
+ \node[board frame,title,
+ minimum width=5cm,minimum height=5cm]
+ {A Game};
+\end{tikzpicture}
+% \end{macrocode}
+%
+% We could continue to add more if we wanted to. Basically anything
+% can be added. For example, one might want custom button icons or
+% the like. We will add a few such icons here, mainly to show how
+% the \texttt{patch.py} script works.
+%
+% First, a button icon for the pool window.
+%
+% \begin{macrocode}
+\info{pool-icon}{icon}{}
+\begin{tikzpicture}[scale=.15]
+ \draw[scale line widths,line width=4mm]
+ (0,1)--(0,-1) (-.7,.2)--(.7,.2);
+\end{tikzpicture}
+% \end{macrocode}
+%
+% The category \texttt{icon} has no special meaning. The icon will
+% look like \tikz[scale=.3]{\draw[scale line widths,line width=4mm]
+% (0,1)--(0,-1) (-.7,.2)--(.7,.2);}
+%
+% We also want to add a custom icon for the OOB button. VASSAL has a
+% button icon for the piece inventory which is really quite
+% appropriate, but alas it is already in use, so we will make our own
+% (albeit similar).
+%
+% \begin{macrocode}
+\info{oob-icon}{icon}{}
+\begin{tikzpicture}[scale=.6]
+ \draw[fill=friendly] (.1,0) rectangle(.5,-.1);
+ \draw[fill=friendly] (.1,-.15) rectangle(.3,-.25);
+ \draw[fill=friendly] (.1,-.3) rectangle(.2,-.4);
+ \draw[fill=hostile] (-.1,0) rectangle(-.3,-.25);
+\end{tikzpicture}
+% \end{macrocode}
+%
+% This looks like
+% \tikz{\draw[fill=friendly] (.1,0) rectangle(.5,-.1);
+% \draw[fill=friendly] (.1,-.15) rectangle(.3,-.25);
+% \draw[fill=friendly] (.1,-.3) rectangle(.2,-.4);
+% \draw[fill=hostile] (-.1,0) rectangle(-.3,-.25);}
+%
+% Normally the \texttt{export.py} script used the \emph{undo} image
+% for the flip button. However, that may be a bit confusing, so we
+% will use a large ``F'' instead. \tikz{\node[color=blue!75!black,font=\sffamily\bfseries\LARGE]{F}}
+%
+% And similarly for the ``Eliminate''\tikz{\node[color=red!75!black,font=\sffamily\bfseries\LARGE]{E}}
+%
+% and ``Restore'' buttons. \tikz{\node[color=green!75!black,font=\sffamily\bfseries\LARGE]{R}}
+%
+% \begin{macrocode}
+\info{flip-icon}{icon}{}
+\begin{tikzpicture}
+ \node[color=blue!75!black,inner sep=0pt,
+ font=\sffamily\bfseries\large]{F};
+\end{tikzpicture}
+%
+\info{eliminate-icon}{icon}{}
+\begin{tikzpicture}
+ \node[color=red!75!black,inner sep=0pt,
+ font=\sffamily\bfseries\large]{E};
+\end{tikzpicture}
+%
+\info{restore-icon}{icon}{}
+\begin{tikzpicture}
+ \node[color=green!75!black,inner sep=0pt,
+ font=\sffamily\bfseries\large]{R};
+\end{tikzpicture}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\end{imagelist}
+\end{document}
+% \end{macrocode}
+%
+% \subsection{Make the draft module}
+%
+% We run \LaTeX{} on the above \texttt{export.tex} file (the source of
+% this section) to generate \texttt{export.pdf} and
+% \texttt{export.json}. We then process these with the
+% \texttt{export.py} Python script to get the draft VASSAL module
+% \texttt{Draft.vmod}.
+%
+% \begin{verbatim}
+% `kpsewhich export.py` export.pdf export.json
+% \end{verbatim}
+%
+% The utility \texttt{kpsewhich}\footnotemark{\TeX{}Live and similar
+% \TeX{} distributions.} will report the location of a file in the
+% \TeX{} installation tree(s). Note that the \texttt{`} above are
+% what is typically called `back-ticks' (i.e., what you typically put
+% as the leading character of scare-crows in \LaTeX{}). This is of
+% course Un*x-like syntax. For other OSs, consult your \TeX{}
+% distribution's documentation for how to find files in the \TeX{}
+% installation.
+
+% You can open the module in the VASSAL editor and see what was
+% generated. On the board, all areas marked with the \texttt{zone
+% scope} (or \texttt{zone path}) should be defined as zones. In the
+% OOB, we should have two zones, one for the A faction and one for the
+% B faction. We should also have three groups of counters --- one
+% for each faction and one for ``Markers''. Finally, we should have a
+% window with tabs, one for each defined chart.
+%
+% We can add the rules to the module. So suppose the rules are in
+% \texttt{game.pdf}, then we can do
+%
+% \begin{verbatim}
+% `kpsewhich export.py` export.pdf export.json \
+% -r game.pdf -o Game.vmod
+% \end{verbatim}
+%
+% to add the rules to the ``Help'' menu. Other information is added
+% to that menu too, such as key-bindings and a short note on how the
+% module was generated. Of course, you should also see the splash
+% image that we defined. The option \texttt{-o}~\meta{filename}
+% writes the module to \meta{filename} rather than the default
+% \texttt{Draft.vmod}.
+%
+% We define the version of the module by passing the option
+% \texttt{-v}~\meta{version} to the Python script. By default, the
+% version is set to \texttt{draft}, and a note on the draft is added
+% to the module and the grids are drawn. Any other version string
+% will suppress these.
+%
+% Also, the default module name is \texttt{Draft} and a similar
+% description is likewise the default. We can change this by passing
+% the options \texttt{-t}~\meta{title} and
+% \texttt{-d}~\meta{description}. Note, you may want to quote the
+% arguments if they contain spaces or the like. Thus, to make a more
+% complete module, we would do something like
+%
+% \begin{verbatim}
+% `kpsewhich export.py` export.pdf export.json \
+% -r game.pdf -o Game.vmod \
+% -t "LaTeX Wargame tutorial" \
+% -d "Example of using wargame to make a module" \
+% -v 0.1
+% \end{verbatim}
+%
+% Note that you typically need to quote (\texttt{"}) longer strings
+% that contain spaces and other special characters.
+%
+% \subsection{Going the extra mile}
+% \label{sec:vassal:patch}
+%
+% We will take one more step on the VASSAL module, and then we will
+% get back to the Print'n'Play version of the game. We can provide
+% the \texttt{export.py} script with an additional Python script that
+% can tweak the VASSAL module any way we like. We can for example
+% move counters into their starting positions, to the OOB, adjust
+% grids, add more materials, and so on. It is only your imagination,
+% and Python programming skills, that sets the limits on what you can
+% do.
+%
+% Here we will make a simple \texttt{patch.py} Python script which
+% does very little. The \textsf{wargame} package,
+% \textsf{wgexport} class, and \texttt{export.py} script has already
+% done the heavy work for us. Not least be because we have taken care
+% to add in \texttt{zone} styles where needed.
+%
+% We will
+% put all the counters on the OOB chart, and adjust some grids - most
+% notably the OOB and turn track grids. Other than that, we will not
+% do much.
+%
+% \begin{verbatim}
+% `kpsewhich export.py` export.pdf export.json \
+% -r game.pdf -o Game.vmod
+% -t "LaTeX Wargame tutorial" \
+% -d "Example of using wargame to make a module" \
+% -v 0.1 -p patch.py
+% \end{verbatim}
+%
+% Now for the script:
+%
+% \begin{verbatim}
+% def patch(build,data,vmod,verbose=False):
+% # We need to import the export module :-)
+% import export
+%
+% # Get the game and last free GPID
+% game = export.get_game(build)
+% gpid = int(game.getAttribute('nextPieceSlotId'))
+%
+% # Get all boards
+% maps = export.get_maps(build)
+% board = maps['Board']
+%
+% mkeys = export.get_masskey(board,'name')
+% export.set_node_attr(mkeys['Eliminate'],
+% icon='eliminate-icon.png')
+% export.set_node_attr(mkeys['Flip'],
+% icon='flip-icon.png')
+%
+% # Get main map
+% pool = maps['DeadMap']
+% export.set_node_attr(pool,icon='pool-icon.png')
+%
+% mkeys = export.get_masskey(pool,'name')
+% export.set_node_attr(mkeys['Restore'],
+% icon='restore-icon.png')
+%
+% # Get the OOB map
+% oob = export.get_chartwindows(game)['OOBs']
+% export.set_node_attr(oob,icon='oob-icon.png')
+% \end{verbatim}
+%
+% In the \texttt{patch.py} script we can use all the functionality
+% provided by \texttt{export.py}. Elements are XML elements that we
+% apply \texttt{xml.dom.minidom} operations on.
+%
+% \iffalse
+% Local Variables:
+% mode: docTeX
+% TeX-master: "game.tex"
+% End:
+% \fi
diff --git a/macros/latex/contrib/wargame/doc/tutorial/game.pdf b/macros/latex/contrib/wargame/doc/tutorial/game.pdf
new file mode 100644
index 0000000000..875523b4d4
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/game.pdf
Binary files differ
diff --git a/macros/latex/contrib/wargame/doc/tutorial/game.sty b/macros/latex/contrib/wargame/doc/tutorial/game.sty
new file mode 100644
index 0000000000..0c8fcc0165
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/game.sty
@@ -0,0 +1,2042 @@
+% \section{The \texttt{game} package}
+% \label{sec:package}
+%
+% To make our game components re-usable (in particular when we want to
+% make a VASSAL module), we will put our definitions of counters,
+% board, and charts into a package file called
+% \texttt{game.sty}\footnote{In fact, most of this document is in that
+% file, because it allows us to document the code using \LaTeX{}'s
+% \texttt{ltxdoc} class.}
+%
+% Code shown below is in the package.
+%
+% The first thing we do in the package is to identify the package and
+% load the \textsf{wargame} package.
+%
+% \begin{macrocode}
+\ProvidesPackage{game}
+\RequirePackage{wargame}
+\RequirePackage{colortbl}
+% \end{macrocode}
+% \section{The units}
+% \label{sec:units}
+%
+% We will set-up our units for the game. As noted above, we will make
+% two factions which we will call \emph{A} and \emph{B}.
+%
+% \begin{quote}
+% The NATO
+% App6(d)\footnote{\url{https://nso.nato.int/nso/nsdd/main/standards/ap-details/1912/EN}}
+% symbology defines that friendly and hostile units should have
+% different symbol frames, but as we will make a game for two
+% players, and it seems unfair to label one as \emph{hostile} and
+% the other \emph{friendly}, we will stick with the
+% \texttt{friendly} base frames.
+%
+% Of course, if we were to make a solitaire or cooperative game, we
+% might want to use the \texttt{hostile} base frame for the opponent
+% units.
+% \end{quote}
+%
+% \subsection{Faction styles}
+% \label{sec:package:factions}
+%
+% We will start by defining two \Tikz{}\footnote{The \textsf{wargame}
+% package relies heavily on \Tikz{}. It is highly recommended that you
+% acquaint yourself with \Tikz{}. The manual, including tutorials, is
+% available from \url{https://ctan.org/pkg/pgf}.} styles for our two
+% factions. We will call these \texttt{a} and \texttt{b} (obviously).
+% These will define the colours of all counters of those sides.
+%
+% \begin{macrocode}
+\colorlet{a-bg}{hostile}
+\colorlet{b-bg}{friendly}
+\tikzset{%
+ a/.style={fill=a-bg,draw=black},
+ b/.style={fill=b-bg,draw=black}}
+% \end{macrocode}
+% Note that we made the colours \texttt{a-bg} and \texttt{b-bg}.
+% Since we will use these colours a few times, it makes sense to make
+% a single definition which we can then freely change at any point and
+% then automatically have that change propagate everywhere.
+%
+% These styles are shown in \figurename~\ref{fig:faction-colors}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \draw[a] (0,0) rectangle ++(1,1) node[above]{\texttt{a}};%
+% \draw[b] (3,0) rectangle ++(1,1) node[above]{\texttt{b}};%
+% \end{tikzpicture}
+% \caption{Faction colours}
+% \label{fig:faction-colors}
+% \end{figure}
+%
+% Here we have used the colours \texttt{friendly} and \texttt{hostile}
+% defined by the \textsf{wargame} package, even though we said we
+% would not use the corresponding \texttt{hostile} base frame.
+% However, we can use any colours we can define in \LaTeX{} with the
+% \textsf{xcolor}\footnote{\url{https://ctan.org/pkg/xcolor}} package,
+% for example,
+%
+% \begin{verbatim}
+% \definecolor{a-bg}{HTML}{3333ff}
+% \end{verbatim}
+%
+% which will make a light blue colour.
+%
+% Since we intent to make \emph{double-sided} counters, so that units
+% will have two steps (front and back), we also define styles for the
+% back side. These will have lighter backgrounds than the front
+% side.
+%
+% \begin{macrocode}
+\tikzset{%
+ a flipped/.style={a,fill=pgffillcolor!50!white},
+ b flipped/.style={b,fill=pgffillcolor!50!white}}
+% \end{macrocode}
+% Note that we use the styles \texttt{a} and \texttt{b} as bases for
+% these styles. Thus, if we make changes to the base styles, they
+% automatically propagate to our flipped styles.
+%
+% \begin{quote}
+% By convention, it is best to name your back-sides of counters and
+% so on the same as the front side, but with `\texttt{ flipped}'
+% appended. It is therefore also a good idea to use that convention
+% for styles and such.
+% \end{quote}
+%
+% The colour \texttt{pgffillcolor} is what ever the current fill
+% colour is (i.e., set by the \texttt{a} and \texttt{b} styles).
+%
+% These styles are shown in
+% \figurename~\ref{fig:faction-colors-flipped}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \draw[a flipped] (0,0) rectangle ++(1,1) node[above]{\texttt{a flippped}};%
+% \draw[b flipped] (3,0) rectangle ++(1,1) node[above]{\texttt{b flipped}};%
+% \end{tikzpicture}
+% \caption{Faction flipped colours}
+% \label{fig:faction-colors-flipped}
+% \end{figure}
+%
+% \subsection{Unit templates}
+% \label{sec:units:templates}
+%
+% In our game we will have two kinds of units: land, and air.
+%
+% Land units represent ground types of different kinds (infantry,
+% armoured, etc.) and have two \emph{factors}: A combat factor (CF)
+% and a movement factor (MF). In addition, for artillery units, we
+% will also specify a range. Each unit will also have a unique
+% identifier, and possibly parent organisational identifier, starting
+% hex, and turn of appearance.
+%
+% Air units provide different kinds of support for the ground units.
+% Since we will make a game on an \emph{operational} level (armies,
+% divisions, brigades), we will give air units a single factor --- the
+% odds column shift (see the combat resolution table later on).
+%
+% Let us first define a template for the ground units. We will call
+% this \texttt{gu} (for ground unit), and it will take 8\footnote{Yes,
+% that's a lot, but we may leave some of them blank. Don't worry,
+% we'll make more short-hands.} arguments:
+% \begin{enumerate}\tightlist
+% \item The unit type
+% \item The lower unit type (e.g., airborne)
+% \item The unit size (echelon)
+% \item The unit identifier
+% \item The parent unit identifier
+% \item The factors (more on this later)
+% \item The starting hex
+% \item The turn of appearance
+% \end{enumerate}
+%
+% \begin{macrocode}
+\tikzset{
+ gu/.style args={#1,#2,#3,#4,#5,#6,#7,#8}{%
+ chit={%
+ symbol={% Defines the NATO symbol
+ faction=friendly, % See note
+ command=land, % Ground units
+ main={#1},% Unit type(s) (e.g., infantry)
+ lower=#2,% Lower type
+ echelon=#3,% Size (e.g., division)
+ scale line widths,
+ line width=1pt,
+ },
+ unique={chit/small identifier=#4}, % Unit ID
+ parent={chit/small identifier=#5}, % Parent ID
+ factors={#6}, % The unit factors
+ upper left={chit/small identifier=#7}, % Hex
+ upper right={gu turn=#8} % Turn
+ } % end of chit
+ } % end of gu
+}
+% \end{macrocode}
+%
+% Note the \texttt{unique}, \texttt{parent}, and \texttt{upper left}
+% keys of \texttt{chit} are set to contain a \texttt{chit/identifier}
+% (or \texttt{chit/small identifier}) picture. In general, all the
+% keys of a \texttt{chit} and (and \texttt{natoapp6c}) \Tikz{} node
+% need to be \texttt{pic}\footnote{A small re-usable picture. See the
+% \Tikz{} manual, Chapter~18.} objects. The \texttt{chit/identifier}
+% picture outputs the text (the argument after the \texttt{=}).
+%
+% Note that for \texttt{upper left}, we used the \texttt{pic}
+% \texttt{gu~turn}, which we have not defined yet. Let us define that
+% now. This will be a picture that puts in the turn number when a
+% unit appears. Turn number ``0'' is the ``At-start'' turn, and so we
+% will deal with that specifically. Other turns should just be done
+% normally --- that is, we use another \texttt{chit/small identifier} picture
+%
+% \begin{macrocode}
+\tikzset{
+ gu turn/.pic={%
+ \ifx#1\empty\else
+ \ifnum0=#1\else%
+ \pic{chit/small identifier={#1}};\fi\fi},
+ pics/gu turn/.default=0
+}
+% \end{macrocode}
+% Note that we set the default value in case we get no turn number.
+%
+% We have put the keys \texttt{scale~line~widths} and
+% \texttt{line~width=1pt} into the \texttt{symbol} (the NATO symbol)
+% part. The latter sets the line width to be a little thicker than
+% usual. This is to make the counters more easily read. The former
+% ensures that if we scale our counters up or done, then the line
+% width will likewise scale\footnote{Other elements scale
+% automatically because of \Tikz{}'s \texttt{transform shape} key}.
+%
+% For the factors, we will use two different \texttt{pic}:
+% \texttt{chit/2 factors} for regular ground units, and \texttt{chit/2
+% factors artillery} for artillery units.
+%
+% The template is shown in \figurename~\ref{fig:ground-unit}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \chit[gu={infantry,,division,23,2,
+% {chit/2 factors={2,4}},D3,2}];%
+% \end{tikzpicture}
+% \caption{Ground unit template}
+% \label{fig:ground-unit}
+% \end{figure}
+%
+% The image above was made with
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \chit[gu={infantry,,division,23,2,
+% {chit/2 factors={2,4}},D3,2}];
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% As said above, we will have artillery ground units and other kinds
+% of ground units. Let us make two templates --- one for
+% field-artillery ground units (\texttt{fu}), which has a range, and
+% regular combat units (\texttt{cu}).
+%
+% First the artillery unit type: \texttt{fu}. This takes 8 arguments
+%
+% \begin{enumerate}\tightlist
+% \item The echelon
+% \item The identifier
+% \item The parent identifier
+% \item The combat factor (CF)
+% \item The movement factor (MF)
+% \item The range
+% \item The starting hex
+% \item The turn of appearance
+%
+% \end{enumerate}
+% \begin{macrocode}
+\tikzset{
+ fu/.style args={#1,#2,#3,#4,#5,#6,#7,#8}{
+ gu={%
+ {{[fill=pgfstrokecolor]artillery}}, % Type
+ ,%lower
+ #1, % echelon
+ #2, % ID
+ #3, % Parent ID
+ {chit/2 factors artillery={#4,#5,#6}},
+ #7, % Hex
+ #8 % Turn
+ }
+ }
+}
+% \end{macrocode}
+%
+% Note that we pass the options \texttt{[fill=pgfstrokecolor]} to the
+% \texttt{pic} \texttt{artillery}\footnote{To be explicit
+% \texttt{natoapp6c/s/artillery}.} to fill in the artillery symbol.
+% Note that we need to protect this by putting in curly brackets (2 in
+% this case). Similarly, we protect the
+% \texttt{chit/2~factors~artillery} call.
+%
+% \begin{quote}
+% In general, we may pass options (or keys) to a \texttt{pic} by
+% preceeding its name with \oarg{keys}. However, we then
+% \emph{must} protect the it as in
+% \texttt{\{\oarg{keys}\meta{pic}\}}. Further, if \oarg{keys}
+% contains a list of keys, separated by commas, then we need to
+% protect \meta{keys} too, as in
+% \texttt{\{[\{\oarg{keys}\}]\meta{pic}\}}. A little clunky, but
+% that's how \TeX{} works sometimes.
+% \end{quote}
+%
+% And now the combat unit template: \texttt{cu}. This takes 9
+% arguments.
+%
+% \begin{enumerate}\tightlist
+% \item The type
+% \item The lower type
+% \item The echelon
+% \item The identifier
+% \item The parent identifier
+% \item The combat factor (CF)
+% \item The movement factor (MF)
+% \item The starting hex
+% \item The turn of appearance
+% \end{enumerate}
+% \begin{macrocode}
+\tikzset{
+ cu/.style args={#1,#2,#3,#4,#5,#6,#7,#8,#9}{
+ gu={%
+ {#1}, % Type
+ #2, % lower
+ #3, % echelon
+ #4, % ID
+ #5, % Parent
+ {chit/2 factors={#6,#7}},
+ #8, % Hex
+ #9 % Turn
+ }
+ }
+}
+% \end{macrocode}
+%
+% Again, let us see what that looks like (\figurename~\ref{fig:fu-cu}).
+
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \chit[cu={infantry,airborne,regiment,
+% 21,2,6,4,E2,}](0,0);%
+% \chit[fu={battalion,23,21,1,3,4,E2,}](2,0);%
+% \end{tikzpicture}
+% \caption{Combat and field artillery templates}
+% \label{fig:fu-cu}
+% \end{figure}
+%
+% The above was made with
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \chit[fu={battalion,23,21,1,3,4,E2,}](0,0);
+% \chit[cu={infantry,airborne,regiment,21,2,6,4,E2,}]
+% (2,0);
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% Finally, we make a template for air units. We will have
+% Close-combat Air Support (CAS \texttt{cas}) and strategic bombers
+% (\texttt{sb}). To make things a little easier for us, we first
+% define a template for all air units. This takes 7 arguments:
+% \begin{enumerate}\tightlist
+% \item The unit type (e.g., \texttt{fixed wing}, \texttt{rotary
+% wing}).
+% \item The upper modifier (e.g., \texttt{F} for fighter)
+% \item The lower modifier (e.g., \texttt{H} for `heavy')
+% \item The unit identifier
+% \item The parent unit identifier
+% \item The factor (column shift)
+% \item The turn of appearance
+% \end{enumerate}
+% \begin{macrocode}
+\tikzset{
+ au/.style args={#1,#2,#3,#4,#5,#6,#7}{%
+ chit={%
+ symbol={% Defines the NATO symbol
+ faction=friendly, % See note
+ command=air, % Air units
+ main=#1,% Unit type
+ upper={text=#2},
+ lower={text=#3},
+ scale line widths,
+ line width=1pt,
+ },
+ unique={chit/identifier=#4}, % Unit ID
+ parent={chit/identifier=#5}, % Parent ID
+ factors={#6}, % The unit factors
+ upper right={gu turn=#7} % Turn
+ } % end of chit
+ } % end of gu
+}
+% \end{macrocode}
+% Here, \texttt{text}\footnote{really \texttt{/natoapp6c/s/text}.} for
+% \texttt{lower} and \texttt{upper} is a picture that puts the text
+% given as the argument after the \texttt{=}. The template is shown in
+% \figurename~\ref{fig:au}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \chit[au={fixed wing,B,,A,1,%
+% {chit/1 factor=+2},3}](0,0);%
+% \end{tikzpicture}
+% \caption{Air unit template}
+% \label{fig:au}
+% \end{figure}
+% %
+% The above was made with
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \chit[au={fixed wing,B,,A,1,
+% {chit/1 factor=+2},3}](0,0);
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% As we said, we will have CAS and strategic bomber wings in this
+% game, so we make templates for these. Our CAS will be helicopters
+% (\texttt{rotery wing}) while the strategic bombers are planes. CAS
+% gives a 1 CF, while strategic bombers gives 1 column shift.
+% Arguments are
+%
+% \begin{enumerate}\tightlist
+% \item The identifier
+% \item The parent identifier
+% \item The turn of appearance
+% \end{enumerate}
+% \begin{macrocode}
+\tikzset{
+ cas/.style args={#1,#2,#3}{ % Close air support
+ au={% Air unit
+ rotary wing, % Helicopter
+ ,, % No lower, upper
+ #1, % ID
+ #2, % Parent ID
+ {chit/2 factors={1,0}},
+ #3 %Turn
+ }
+ },
+ sb/.style args={#1,#2,#3}{% strategic bomber
+ au={% Air unit
+ fixed wing, %Planes
+ B, % Bomber
+ M, % Medium
+ #1, % ID
+ #2, % Parent
+ {chit/1 factor={+1}},
+ #3 % Turn
+ }
+ }
+}
+% \end{macrocode}
+%
+% The templates are shown in \figurename~\ref{fig:cas-sb}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \chit[cas={1,2,10}](0,0);%
+% \chit[sb={3,4,}](2,0);%
+% \end{tikzpicture}
+% \caption{CAS and SB templates}
+% \label{fig:cas-sb}
+% \end{figure}
+%
+% The above was made with
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \chit[cas={1,2,10}(0,0);
+% \chit[sb={3,4,}(2,0);
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% \subsection{Specialisations}
+% \label{sec:units:specialisations}
+%
+% We will now make some specialisations of the \texttt{gu} style.
+% These represent headquarters \texttt{hq}, mechanised infantry
+% \texttt{mi}, infantry \texttt{in}, and so
+% on. We do this because we want units of the same kind to have
+% similar factors and so on. Since almost all of our units are
+% battalions, we also code that in.
+%
+%
+% All of these, except \texttt{ff} for field artillery units, take 4
+% arguments
+% \begin{enumerate}\tightlist
+% \item The identifier
+% \item The parent identifier
+% \item The starting hex
+% \item The turn of appearance
+% \end{enumerate}
+%
+% The style \texttt{ff} precedes these arguments with a single
+% argument for the unit size (echelon).
+%
+% \begin{macrocode}
+\tikzset{
+ in/.style args={#1,#2,#3,#4}{%
+ cu={infantry,,battalion,#1,#2,2,3,#3,#4}},
+ mi/.style args={#1,#2,#3,#4}{%
+ cu={{armoured,infantry},,battalion,#1,#2,4,4,#3,#4}},
+ ab/.style args={#1,#2,#3,#4}{%
+ cu={infantry,airborne,battalion,#1,#2,1,3,#3,#4}},
+ ca/.style args={#1,#2,#3,#4}{%
+ cu={combined arms,,battalion,#1,#2,3,3,#3,#4}},
+ ar/.style args={#1,#2,#3,#4}{%
+ cu={armoured,,battalion,#1,#2,6,4,#3,#4}},
+ re/.style args={#1,#2,#3,#4}{%
+ cu={reconnaissance,,battalion,#1,#2,6,5,#3,#4}},
+ ff/.style args={#1,#2,#3,#4,#5}{%
+ fu={#1,#2,#3,2,5,3,#4,#5}},
+ hq/.style args={#1,#2,#3,#4,#5}{
+ cu={headquarters,,#1,#2,#3,0,1,#4,#5}},%
+ hqbg/.style args={#1,#2,#3,#4}{
+ hq={brigade,#1,#2,#3,#4}},
+ hqregt/.style args={#1,#2,#3,#4}{
+ hq={regiment,#1,#2,#3,#4}},
+}
+
+% \end{macrocode}
+% \subsection{The actual units}
+% \label{sec:units:actual}
+%
+% Above we defined templates for the various units. These templates
+% saves us a lot of trouble when defining the \emph{actual} units.
+% Below we will make the units for each faction in the game. We will
+% define them as \Tikz{} styles, just like we did for the templates.
+%
+% \begin{quote}
+% Above we said we want to make double sided counters. We will get
+% back to the back-side (flipped) versions of the counters in a
+% moment.
+% \end{quote}
+%
+% \subsubsection{Side A}
+%
+% Below we will define the units without much commentary. Note that
+% we use the style \texttt{a} for all our units so that they get the
+% right style. Note that we pass the single argument \texttt{\#1} as
+% the turn of appearance to all units. This will be used when
+% generating an \emph{Order of Battle} later on.
+%
+% \begin{macrocode}
+\tikzset{
+ a hq/.style ={a,hq={corps,,,A2,#1}},
+ a 1 hqbg/.style ={a,hqbg={1,,A2,#1}},
+ a 1 1lg ibn/.style={a,mi={I-LG,1,D3,#1}},
+ a 1 1gh ibn/.style={a,mi={I-GH,1,C2,#1}},
+ a 1 2jd ibn/.style={a,mi={II-JD,1,A2,#1}},
+ a 1 1 abn/.style ={a,ff={battalion,1,1,A1,#1}},
+ a 2 hqbg/.style ={a,hqbg={2,,C2,#1}},%
+ a 2 1jd abn/.style={a,ar={I-JD,2,A2,#1}},%
+ a 2 3gh rbn/.style={a,re={I-JD,2,D2,#1}},%
+ a aregt/.style={a,ff={regiment,,,A1,#1}},%
+ a f/.style={a,cas={,,#1}},%VR
+ a b/.style={a,sb={,,#1}}%SK
+}
+% \end{macrocode}
+% \iffalse
+% KA: A2 Karup
+% HO: A2 Holsterbro
+% HV: D3 Høvelte
+% SL: C2 Slagelse
+% OK: A1 Oksbøl
+% RO: D2 Rønne
+% VR: D3 Værløse
+% SK: B2 Skydstrup
+% \fi
+% Let us draw these units in what looks like an organisational
+% diagram (\figurename~\ref{fig:a-org}).
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \node[a hq] (a hq) {};
+% \node[a aregt, below right=10mm and 10mm of a hq] (a aregt) {};
+% \node[a 1 hqbg, below left=10mm and 10mm of a hq] (a 1 hqbg) {};
+% \node[a 1 1lg ibn,below right=5mm and -8mm of a 1 hqbg] (a 1 1lg ibn){};
+% \node[a 1 1gh ibn,below=5mm of a 1 1lg ibn] (a 1 1gh ibn){};
+% \node[a 1 2jd ibn,below=5mm of a 1 1gh ibn] (a 1 2jd ibn){};
+% \node[a 1 1 abn, below=5mm of a 1 2jd ibn] (a 1 1 abn) {};
+% \node[a 2 hqbg, below=10mm of a hq] (a 2 hqbg) {};
+% \node[a 2 1jd abn,below right=5mm and -8mm of a 2 hqbg] (a 2 1jd abn){};
+% \node[a 2 3gh rbn,below=5mm of a 2 1jd abn] (a 2 3gh rbn){};
+% \node[a f, right=10mm of a aregt] (a f) {};
+% \node[a b, below=5mm of a f] (a b) {};
+% \draw(a 1 hqbg.south west) |- (a 1 1lg ibn.west);
+% \draw(a 1 hqbg.south west) |- (a 1 1gh ibn.west);
+% \draw(a 1 hqbg.south west) |- (a 1 2jd ibn.west);
+% \draw(a 1 hqbg.south west) |- (a 1 1 abn.west);
+% \draw(a 2 hqbg.south west) |- (a 2 1jd abn.west);
+% \draw(a 2 hqbg.south west) |- (a 2 3gh rbn.west);
+% \coordinate (mid) at ($(a hq.south)+(0,-.5)$) {};
+% \coordinate (off) at ($(mid)+(1.5,0)$) {};
+% \draw(a hq.south) -- (mid);
+% \draw(mid) -| (a 1 hqbg.north);
+% \draw(mid) -- (a 2 hqbg.north);
+% \draw(mid) -| (a aregt.north);
+% \end{tikzpicture}
+% \caption{Faction A organisational chart}
+% \label{fig:a-org}
+% \end{figure}
+%
+% Before we go on to side B, we will make a macro that contains a list
+% of all our A side counters.
+%
+% \begin{macrocode}
+\def\alla{{%
+ a hq,
+ a 1 hqbg,
+ a 1 1lg ibn,
+ a 1 1gh ibn,
+ a 1 2jd ibn,
+ a 1 1 abn,
+ a 2 hqbg,
+ a 2 1jd abn,
+ a 2 3gh rbn,
+ a aregt,
+ a f,
+ a b}}
+% \end{macrocode}
+%
+% \subsubsection{Side B}
+%
+% Below we will define the units without much commentary. Note that
+% we use the style \texttt{b} for all our units so that they get the
+% right style. Note that we pass the single argument \texttt{\#1} as
+% the turn of appearance to all units. This will be used when
+% generating an \emph{Order of Battle} later on.
+%`
+% \begin{macrocode}
+\tikzset{
+ b hq/.style= {b,hq= {corps,,,F6,#1}},
+ b lg hqregt/.style= {b,hqregt={LG,,F6,#1}},
+ b lg ibn/.style= {b,in= {LG,,F6,#1}},
+ b k3 hqregt/.style= {b,hqregt={K3,,E7,#1}},
+ b k3 31 abibn/.style= {b,ab= {31,K3,E7,#1}},
+ b k4 hqregt/.style= {b,hqregt={K4,,F10,#1}},
+ b k4 abibn/.style= {b,ab= {NL,K4,F10,#1}},
+ b p4 hqregt/.style= {b,hqregt={P4,,D7,#1}},
+ b p4 41 cabn/.style= {b,ca= {41,P4,D7,#1}},
+ b p4 42 cabn/.style= {b,ca= {42,P4,D7,#1}},
+ b p7 hqregt/.style= {b,hqregt={P7,,D4,#1}},
+ b p7 71 ibn/.style= {b,mi= {71,P7,D4,#1}},
+ b p7 72 cabn/.style= {b,ca= {72,P7,D4,#1}},
+ b i13 hqregt/.style= {b,hqregt={I13,,D8,#1}},
+ b i13 131 ibn/.style= {b,in= {131,I13,D8,#1}},
+ b i13 132 ibn/.style= {b,in= {132,I13,D8,#1}},
+ b p18 hqregt/.style= {b,hqregt={P18,,F5,#1}},
+ b p18 181 cabn/.style={b,ca= {181,P18,F5,#1}},
+ b i19 hqregt/.style= {b,hqregt={I19,,F10,#1}},
+ b i19 191 cabn/.style={b,ca= {191,I19,F10,#1}},
+ b i19 192 cabn/.style={b,ca= {192,I19,F10,#1}},
+ b i21 hqregt/.style= {b,hqregt={I21,,D10,#1}},
+ b i21 211 ibn/.style= {b,in= {211,I21,D10,#1}},
+ b i21 212 ibn/.style= {b,in= {212,I21,D10,#1}},
+ b f/.style= {b,cas= {F17,BL,#1}},
+ b b/.style= {b,sb= {F7,SA,#1}}
+}
+% \end{macrocode}
+% \iffalse
+% SH: F6 Stockholm
+% KU: F6 Kungsängen near stockholm F6
+% KA: E7 Karlsborg
+% AR: Off Arvisjaur (top of baltic)
+% SK: D7 Skövde
+% RE: D3 Revingehed
+% FA: D8 Falun
+% VI: F5 Visby (delay from island)
+% BO: Off Boden (top of baltic)
+% SO: Off (D10) Sollefteå
+% \fi
+% Let us draw these units in what looks like an organisational
+% diagram (\figurename~\ref{fig:b-org}).
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \node[b hq] (b hq) {};
+% \node[b lg hqregt, below left=10mm and 20mm of b hq] (b lg hqregt){};
+% \node[b lg ibn, below right=5mm and -8mm of b lg hqregt] (b lg ibn){};
+% \node[b k3 hqregt, below left=10mm and -1mm of b hq] (b k3 hqregt){};
+% \node[b k3 31 abibn, below right=5mm and -8mm of b k3 hqregt] (b k3 31 abibn){};
+% \node[b k4 hqregt, below right=10mm and -1mm of b hq] (b k4 hqregt){};
+% \node[b k4 abibn, below right=5mm and -8mm of b k4 hqregt] (b k4 abibn){};
+% \node[b p4 hqregt, below right=10mm and 20mm of b hq] (b p4 hqregt){};
+% \node[b p4 41 cabn, below right=5mm and -8mm of b p4 hqregt] (b p4 41 cabn){};
+% \node[b p4 42 cabn, below=5mm of b p4 41 cabn] (b p4 42 cabn){};
+% \node[b p7 hqregt, below left=65mm and 20mm of b hq] (b p7 hqregt){};
+% \node[b p7 71 ibn, below right=5mm and -8mm of b p7 hqregt] (b p7 71 ibn){};
+% \node[b p7 72 cabn, below=5mm of b p7 71 ibn] (b p7 72 cabn){};
+% \node[b i13 hqregt, below left=65mm and -1mm of b hq] (b i13 hqregt){};
+% \node[b i13 131 ibn, below right=5mm and -8mm of b i13 hqregt](b i13 131 ibn){};
+% \node[b i13 132 ibn, below=5mm of b i13 131 ibn] (b i13 132 ibn){};
+% \node[b p18 hqregt, below right=65mm and -1mm of b hq] (b p18 hqregt){};
+% \node[b p18 181 cabn,below right=5mm and -8mm of b p18 hqregt](b p18 181 cabn){};
+% \node[b i19 hqregt, below right=65mm and -1mm of b hq] (b i19 hqregt){};
+% \node[b i19 191 cabn,below right=5mm and -8mm of b i19 hqregt](b i19 191 cabn){};
+% \node[b i19 192 cabn,below=5mm of b i19 191 cabn] (b i19 192 cabn){};
+% \node[b i21 hqregt, below right=65mm and 20mm of b hq] (b i21 hqregt){};
+% \node[b i21 211 ibn, below right=5mm and -8mm of b i21 hqregt] (b i21 211 ibn){};
+% \node[b i21 212 ibn, below=5mm of b i21 211 ibn] (b i21 212 ibn){};
+% \node[b f, right=15mm of b hq] (b f){};
+% \node[b b, right=5mm of b f] (b b){};
+%
+% \draw(b lg hqregt.south west) |- (b lg ibn.west);
+% \draw(b k3 hqregt.south west) |- (b k3 31 abibn.west);
+% \draw(b k4 hqregt.south west) |- (b k4 abibn.west);
+% \draw(b p4 hqregt.south west) |- (b p4 41 cabn.west);
+% \draw(b p4 hqregt.south west) |- (b p4 42 cabn.west);
+% \draw(b p7 hqregt.south west) |- (b p7 71 ibn.west);
+% \draw(b p7 hqregt.south west) |- (b p7 72 cabn.west);
+% \draw(b p18 hqregt.south west) |- (b p18 181 cabn.west);
+% \draw(b i19 hqregt.south west) |- (b i19 191 cabn.west);
+% \draw(b i19 hqregt.south west) |- (b i19 192 cabn.west);
+% \draw(b i13 hqregt.south west) |- (b i13 131 ibn.west);
+% \draw(b i13 hqregt.south west) |- (b i13 132 ibn.west);
+% \draw(b i21 hqregt.south west) |- (b i21 211 ibn.west);
+% \draw(b i21 hqregt.south west) |- (b i21 212 ibn.west);
+%
+% \coordinate (mid) at ($(b hq.south)+(0,.-.5)$);
+%
+% \draw(b hq.south) -- (mid);
+% \draw(mid) -| (b lg hqregt.north);
+% \draw(mid) -| (b k3 hqregt.north);
+% \draw(mid) -| (b k4 hqregt.north);
+% \draw(mid) -| (b p4 hqregt.north);
+%
+% \coordinate (mid2) at ($(b hq.south)+(0,.-6)$);
+% \draw(mid) -- (mid2);
+% \draw(mid2) -| (b p7 hqregt.north);
+% \draw(mid2) -| (b i13 hqregt.north);
+% \draw(mid2) -| (b i19 hqregt.north);
+% \draw(mid2) -| (b i21 hqregt.north);
+%
+% \end{tikzpicture}
+% \caption{Faction B organisational chart}
+% \label{fig:b-org}
+% \end{figure}
+%
+% As before, we will make a macro that contains all B counters.
+%
+% \begin{macrocode}
+\def\allb{{
+ b hq, b lg hqregt, b lg ibn,
+ b k3 hqregt, b k3 31 abibn,
+ b p4 hqregt, b p4 41 cabn, b p4 42 cabn,
+ b p7 hqregt, b p7 71 ibn, b p7 72 cabn,
+ b i13 hqregt, b i13 131 ibn,b i13 132 ibn,%
+ b f, b b%
+ },{},{},{% Empty turns
+ b p18 hqregt, b p18 181 cabn%
+ },{
+ b i21 hqregt, b i21 211 ibn, b i21 212 ibn%
+ },{},{
+ b k4 hqregt, b k4 abibn%
+ },{
+ b i19 hqregt, b i19 191 cabn, b i19 192 cabn%
+ }}
+% \end{macrocode}
+%
+% Note that this is defined as a list of lists, and some of the lists
+% are a little special. This is because we will reuse this list over
+% and over again, and in particular for the Order of Battle charts.
+% The point is that each element of the outer most list correspond to
+% a turn, starting with turn ``0'', or ``At start''. Empty elements
+% are thus turns where there will be no reinforcements for the faction.
+%
+% \subsection{The \texttt{flipped} side of things}
+% \label{sec:units:flipped}
+%
+% Well, really the \texttt{flipped} definitions of the units. The
+% flipped side of our unit counters will represent a ``spent'' state,
+% i.e., a state where the unit cannot attack and only do limited
+% manoeuvres. In this state, all units will have a combat factor or
+% zero and movement factor of 1. Thus, we define a simple style that
+% sets the factors
+%
+% \begin{macrocode}
+\tikzset{
+ flipped/.style={%
+ /chit/factors={chit/2 factors={0,1}},
+ /chit/upper left={},
+ /chit/upper right={}
+ }
+}
+% \end{macrocode}
+% Note that we give the \emph{explicit full} path to the chits factors
+% key. This is because we want to \emph{monkey patch} our units to
+% have these new factors. We also clear the upper left and right
+% corners on the flip side.
+%
+% Now, we'll do a little hack. Previously, we defined the
+% \texttt{a~flipped} and \texttt{b~flipped} styles, but if you look
+% closely, we can see how we can automatically define the flipped fill
+% colours. Thus we make another style that does this.
+%
+% \begin{macrocode}
+\tikzset{%
+ f/.style={%
+ flipped,fill=pgffillcolor!50!white}}
+% \end{macrocode}
+%
+% With this, we can define the \texttt{flipped} state of all A
+% counters.
+%
+% \begin{macrocode}
+\tikzset{%
+ a hq flipped/.style= {a hq ,f},
+ a 1 hqbg flipped/.style= {a 1 hqbg ,f},
+ a 1 1lg ibn flipped/.style= {a 1 1lg ibn,f},
+ a 1 1gh ibn flipped/.style= {a 1 1gh ibn,f},
+ a 1 2jd ibn flipped/.style= {a 1 2jd ibn,f},
+ a 1 1 abn flipped/.style= {a 1 1 abn ,f},
+ a 2 hqbg flipped/.style= {a 2 hqbg ,f},
+ a 2 1jd abn flipped/.style= {a 2 1jd abn,f},
+ a 2 3gh rbn flipped/.style= {a 2 3gh rbn,f},
+ a aregt flipped/.style= {a aregt ,f},
+ a f flipped/.style= {a,f},
+ a b flipped/.style= {a,f},
+}
+% \end{macrocode}
+%
+% Let us draw the A side counters, front and back, using the macro
+% \verb+doublechits+ (\figurename~\ref{fig:a-all}).
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \doublechits{\alla}{3}{1.24}
+% \end{tikzpicture}
+% \caption{All faction A counters, front and back}
+% \label{fig:a-all}
+% \end{figure}
+%
+% The above was produced by
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \doublechits{\alla}{3}{1.24}
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% We will use the macro \verb+\doublechits+ later on to make our chit
+% sheets. This works \emph{only} because we define the back sides of
+% our chits to have the style `\meta{front} \texttt{flipped}', which
+% is why it is \emph{highly} recommended to follow this convention.
+%
+% We do the same thing for the faction B counters.
+%
+%
+% \begin{macrocode}
+\tikzset{%
+ b hq flipped/.style= {b hq, f},
+ b lg hqregt flipped/.style= {b lg hqregt, f},
+ b lg ibn flipped/.style= {b lg ibn, f},
+ b k3 hqregt flipped/.style= {b k3 hqregt, f},
+ b k3 31 abibn flipped/.style= {b k3 31 abibn, f},
+ b k4 hqregt flipped/.style= {b k4 hqregt, f},
+ b k4 abibn flipped/.style= {b k4 abibn, f},
+ b p4 hqregt flipped/.style= {b p4 hqregt, f},
+ b p4 41 cabn flipped/.style= {b p4 41 cabn, f},
+ b p4 42 cabn flipped/.style= {b p4 42 cabn, f},
+ b p7 hqregt flipped/.style= {b p7 hqregt, f},
+ b p7 71 ibn flipped/.style= {b p7 71 ibn, f},
+ b p7 72 cabn flipped/.style= {b p7 72 cabn, f},
+ b i13 hqregt flipped/.style= {b i13 hqregt, f},
+ b i13 131 ibn flipped/.style= {b i13 131 ibn, f},
+ b i13 132 ibn flipped/.style= {b i13 132 ibn, f},
+ b p18 hqregt flipped/.style= {b p18 hqregt, f},
+ b p18 181 cabn flipped/.style={b p18 181 cabn,f},
+ b i19 hqregt flipped/.style= {b i19 hqregt, f},
+ b i19 191 cabn flipped/.style={b i19 191 cabn,f},
+ b i19 192 cabn flipped/.style={b i19 192 cabn,f},
+ b i21 hqregt flipped/.style= {b i21 hqregt, f},
+ b i21 211 ibn flipped/.style= {b i21 211 ibn, f},
+ b i21 212 ibn flipped/.style= {b i21 212 ibn, f},
+ b f flipped/.style= {b,f},
+ b b flipped/.style= {b,f}}
+% \end{macrocode}
+%
+% Let us draw the faction B counters, front and back, using the macro
+% \verb+doublechits+ (\figurename~\ref{fig:b-all}).
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \doublechits{\allb}{3}{1.24}
+% \end{tikzpicture}
+% \caption{All faction B counters, front and back}
+% \label{fig:b-all}
+% \end{figure}
+%
+% The above was produced by
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \doublechits{\allb}{3}{1.24}
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% \subsection{Other counters}
+% \label{sec:units:other}
+%
+% In principle one can make as many and different counters and markers
+% as needed. Here, we will keep things simple and only define a game
+% turn marker. The package \textsf{wargame} already defines one as
+% shown in \figurename~\ref{fig:plain-game-turn}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \chit[game turn]
+% \end{tikzpicture}
+% \caption{The \textsf{wargame} game turn counter}
+% \label{fig:plain-game-turn}
+% \end{figure}
+%
+% However, this has no flip side and we would like the side to reflect
+% the faction currently in turn
+%
+% \begin{macrocode}
+\tikzset{
+ game turn/.append style={a},
+ game turn flipped/.style={game turn,b}
+}
+% \end{macrocode}
+%
+% This modified game turn is shown in \figurename~\ref{fig:game-turn}.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \doublechits{{game turn}}{1}{1.24}
+% \end{tikzpicture}
+% \caption{Modified game turn, front and back}
+% \label{fig:game-turn}
+% \end{figure}
+%
+% \section{The board}
+% \label{sec:board}
+%
+% Designing the board is probably where one will spend the most time.
+% The \textsf{wargame} package is not omnipotent, but tries to make it
+% as simple as possible. However, some artistic streak is a good
+% thing, and familiarity with \Tikz{} is highly recommended.
+%
+% The simplest thing one can do is to import an image and superimpose
+% hexes on top of that image. While often a good solution, it does
+% not always give the most pleasing board.
+%
+% The \textsf{wargame} package does not, in and of it self, provide
+% fancy ``modern'' graphics (though it can be done). Rather, off the
+% shelf, it mimics classic wargames of yore (Afrika Korps, D-Day,
+% Russian Campaign, and so on). That is, it uses rather simplified
+% graphics.
+%
+% For our game, we will have three kinds of terrain: Clear, woods, and
+% mountains. The map will have a lot of coastline, but the scale of
+% the game is such that naval units are not really called for.
+% Indeed, the game focuses on land combat with abstracted aerial
+% support.
+%
+% The first thing we do, is to decide a few things about the map. We
+% want to have the hexes automatically label with alphabetic columns
+% and numerical rows. We want to start our rows and columns at 1 (the
+% default is starting at 0). By default, we want the hexes to be white
+% (for clear terrain). To set this up, we define some more
+% keys.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/short bottom columns=even,
+ hex/short top columns=odd,
+ hex/label is name,
+ hex/first row and column are=1,
+ every hex/.style={
+ /hex/label={auto=alpha column},
+ fill=white},
+}%
+% \end{macrocode}
+%
+% Note how we used the \emph{full} path for the \texttt{/hex/label}
+% key. This will be important when we generate a VASSAL module later
+% on.
+%
+% The key \texttt{hex/label is name} makes it so that every hex on the
+% board will be a named \texttt{node}. This means we can refer to a
+% hex in \Tikz{} simply by its label. In fact, we can use various
+% anchors of the hex if we want to --- it is a \texttt{node} like any
+% other node in \Tikz{}.
+%
+% The keys \texttt{hex/short bottom column=even} and
+% \texttt{hex/short~top~column=odd} is mainly used by the
+% \verb+\boardframe+ macro to generate a proper frame.
+%
+% Having defined the settings, we can move on to the board itself. We
+% will do this in parts. This makes it easier to get an overview of,
+% and helps us in this tutorial to explain what is going on.
+%
+% The first thing we do, is define a macro that defines the coast line
+% of our map. We use the hexagonal coordinate system provided by the
+% \textsf{wargame} package, but we could also have used general
+% Cartesian coordinates.
+%
+% \begin{quote}
+% Defining the coastline of a map can be quite tedious. You may
+% want to use some vector graphics editor, say Inkscape, to do
+% this. In the \textsf{wargame} package you will find a Python
+% script to convert an SVG to \Tikz{} paths.
+% \end{quote}
+%
+% Alright, let's make our macro to define the coastline.
+%
+% \begin{macrocode}
+\newcommand\coastline{%
+ (hex cs:c=1,r=1,v=SE)
+ --(hex cs:c=1,r=1,e=SE)
+ --(hex cs:c=1,r=1,e=NE,o=.5)
+ --(hex cs:c=1,r=1,v=NW,o=.7)
+ --(hex cs:c=1,r=2,v=W,o=.6)
+ --(hex cs:c=1,r=2,v=NW,o=.7)
+ --(hex cs:c=1,r=3,v=SE,o=.9)
+ --(hex cs:c=1,r=3,e=SE,o=.9)
+ --(hex cs:c=2,r=4,e=S,o=.7)
+ --(hex cs:c=2,r=3,v=NE,o=.4)
+ --(hex cs:c=2,r=3,e=S,o=.1)
+ --(hex cs:c=2,r=3,v=E,o=.8)
+ --(hex cs:c=2,r=3,e=SE,o=.8)
+ --(hex cs:c=2,r=3,v=SE,o=.6)
+ --(hex cs:c=2,r=2,v=NW,o=.2)
+ --(hex cs:c=2,r=2,e=SE)
+ --(hex cs:c=3,r=1,e=NE)
+ --(hex cs:c=4,r=2,e=N,o=.3)
+ --(hex cs:c=5,r=2,e=S,o=.6)
+ --(hex cs:c=5,r=2,v=SE,o=.9)
+ --(hex cs:c=7,r=3,v=E)
+ --(hex cs:c=7,r=1,v=E)
+ --(hex cs:c=6,r=1,v=E,o=2.5)
+ --cycle
+ (hex cs:c=3,r=2,v=W,o=.5)
+ --(hex cs:c=4,r=3,e=NW,o=.75)
+ --(hex cs:c=4,r=3,e=SW,o=.3)
+ --(hex cs:c=4,r=2,e=NW,o=.7)
+ --(hex cs:c=3,r=2,v=SW,o=.4)
+ --cycle
+ (hex cs:c=2,r=4,e=N,o=.8)
+ --(hex cs:c=2,r=4,v=E,o=.7)
+ --(hex cs:c=3,r=3,v=E,o=.8)
+ --(hex cs:c=4,r=3,v=NW,o=.6)
+ --(hex cs:c=4,r=3,e=NW,o=.1)
+ --(hex cs:c=4,r=3,v=SE,o=.4)
+ --(hex cs:c=5,r=3,v=SW,o=.6)
+ --(hex cs:c=5,r=3,v=NE,o=.2)
+ --(hex cs:c=5,r=3,e=NE)
+ --(hex cs:c=6,r=4,v=SW,o=.3)
+ --(hex cs:c=5,r=4,v=E,o=1.7)
+ --(hex cs:c=6,r=5,e=N)
+ --(hex cs:c=6,r=6,v=E)
+ --(hex cs:c=7,r=6,v=NW,o=.4)
+ --(hex cs:c=6,r=7,e=S,o=.2)
+ --(hex cs:c=6,r=7,e=NW)
+ --(hex cs:c=6,r=8,e=NW,o=.7)
+ --(hex cs:c=7,r=9,e=NE)
+ --(hex cs:c=6,r=10,v=E,o=2.5)
+ --(hex cs:c=7,r=10,v=E)
+ --(hex cs:c=1,r=10,v=W)
+ --(hex cs:c=2,r=4,v=W,o=2.5)
+ --(hex cs:c=2,r=5,v=SW)
+ --cycle
+ ;
+}
+% \end{macrocode}
+%
+% The coast line is shown in \figurename~\ref{fig:coast}\footnote{Any
+% resemblance to any actual location is, erhm, accidental?}
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}[scale=.7]
+% \draw[fill=gray] \coastline;
+% \end{tikzpicture}
+% \caption{The coast line}
+% \label{fig:coast}
+% \end{figure}
+%
+% As you can see, it is pretty simple. Not too many details about the
+% nooks and crannies. Now we want to define some colours that we will
+% use on the map. As mentioned above, we will have some sea, and we
+% will have some surrounding neutral countries. Let us define some
+% colours for these things.
+%
+% \begin{macrocode}
+\definecolor{sea}{HTML}{18b5db}
+\colorlet{neutral}{gray!25!white}
+\colorlet{coast}{black}
+% \end{macrocode}
+%
+% OK, with that out of the way, we start on the hexes in earnest. We
+% define the macro \verb+\hexes+ to produce our hexes within our map.
+%
+% \begin{macrocode}
+\newcommand\hexes[1][]{
+% \end{macrocode}
+%
+% We have defined this macro to take a single optional argument. We
+% wont use that here, but it might come in handy at some later point.
+%
+% The first thing we do, is to fill the entire map with \texttt{sea}.
+%
+% \begin{macrocode}
+ \fill[sea](-1.000,-0.866) rectangle(10.,15.580);
+% \end{macrocode}
+%
+% Then we use the macro \verb+\coastline+ to define a path that we may
+% use over and over again.
+%
+% \begin{macrocode}
+ \path[save path=\coast]\coastline;
+% \end{macrocode}
+%
+% Next up, we want to draw hexes that are on the coast line but also
+% has land parts in it. This is so that the hexes are complete and
+% get a proper label on it. We define the fill to be the sea
+% colour, and the lines labels to be white
+%
+% \begin{macrocode}
+ \begin{scope}[
+ every hex/.append style={white,fill=sea},
+ hex/label/.append style={color=white}]
+ \hex(c=1,r=1); \hex(c=1,r=2);
+ \hex(c=1,r=3);
+ \hex(c=2,r=2); \hex(c=2,r=3);
+ \hex(c=2,r=4);
+ \hex(c=3,r=2); \hex(c=3,r=3);
+ \hex(c=4,r=2); \hex(c=4,r=3);
+ \hex(c=5,r=3); \hex(c=5,r=7);
+ \hex(c=6,r=4); \hex(c=6,r=5);
+ \hex(c=6,r=6); \hex(c=6,r=7);
+ \hex(c=6,r=8); \hex(c=6,r=9);
+ \hex(c=7,r=6); \hex(c=7,r=9);
+ \end{scope}
+% \end{macrocode}
+% Note that we use the \texttt{.append style} handler so that we get
+% the setting from above here too (labels, among other things). These
+% amended styles only have effect inside the \texttt{scope}. Once we
+% leave the scope, then the old settings are restored.
+%
+% We draw a compass needle.
+%
+% \begin{macrocode}
+ \draw[white,-{Stealth[]},
+ scale line widths,
+ line width=1mm]
+ (hex cs:c=7,r=4,v=SE) -- ++(110:2)
+ node[midway,
+ font=\sffamily\bfseries\LARGE,
+ transform shape,
+ rotate=-90,sloped]{N};
+% \end{macrocode}
+%
+% Since the areas where we do not add hexes are considered neutral
+% countries in this game, we fill the whole coast line with the
+% previously defined \texttt{neutral} colour.
+%
+% \begin{macrocode}
+ \settosave{\coast}
+ \fill[neutral];
+% \end{macrocode}
+%
+% Here we have the first use of the saved path \verb+\coast+. We make
+% that the current path by calling \verb+\setosave+ --- a small
+% utility in the \textsf{wargame} package.
+%
+% We can now add the actual hexes. Some of the hexes will represent
+% different terrain, and that will be clear from the definitions. We
+% will put our definitions inside a scope, and the first thing we do
+% in that scope is to clip everything to our coast line. This will be
+% the second use of \verb+\coast+.
+%
+% \begin{macrocode}
+ \begin{scope}
+ \settosave{\coast}
+ \clip;
+
+ \hex(c=1,r=1);\hex(c=1,r=2);\hex(c=1,r=3);
+% \end{macrocode}
+%
+% Note that we use the \texttt{hex cs} coordinate system. We specify
+% the column (\texttt{c}) and the row (\texttt{r}) of each hex. We can
+% use longer forms, of the keys if we want.
+%
+% The southern border of A factions country needs a little special
+% attention. We clip the drawn hex, and draw the border. In fact, we
+% draw the hex twice, first time with a white outline and the neutral
+% fill colour. This is so that the full hex will be drawn, even it is
+% only partially within the map area.
+%
+% \begin{macrocode}
+ \hex[white,fill=neutral,label=](c=2,r=2);
+ \begin{scope}
+ \clip(hex cs:c=2,r=2,v=SW)
+ --(hex cs:c=2,r=2,v=E)
+ --(hex cs:c=2,r=2,v=NE)
+ --(hex cs:c=2,r=2,v=NW)
+ --(hex cs:c=2,r=2,v=W)
+ --cycle;
+ \hex(c=2,r=2);
+ \end{scope}
+ \draw[coast] (hex cs:c=2,r=2,v=SW)
+ --(hex cs:c=2,r=2,v=E);
+% \end{macrocode}
+% Note that our clipping path is defined in the \texttt{hex cs}
+% coordinate system, and how we have retrieved vertex coordinates via
+% the key \texttt{v}.
+%
+% Now we come to some other terrain: woods and mountains.
+%
+% \begin{macrocode}
+ \hex(c=2,r=3);\hex(c=2,r=4);\hex(c=2,r=5);
+ \hex[terrain=mountains](c=2,r=6);
+ \hex[terrain=mountains](c=2,r=7);
+ \hex[terrain=mountains](c=2,r=8);
+% \end{macrocode}
+%
+% Again, we do not want to draw the hex in the neutral country to
+% the south, so we clip this hex too.
+%
+%
+%
+%
+% \begin{macrocode}
+ \hex[white,fill=neutral,label=](c=4,r=2);
+ \begin{scope}
+ \clip(hex cs:c=4,r=2,v=W)
+ --(hex cs:c=4,r=2,v=NE)
+ --(hex cs:c=4,r=2,v=NW)
+ --cycle;
+ \hex(c=4,r=2);
+ \end{scope}
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \hex(c=3,r=2); \hex(c=3,r=3);
+ \hex[terrain=woods](c=3,r=4);
+ \hex(c=3,r=5);
+ \hex[terrain=woods](c=3,r=6);
+ \hex[terrain=woods](c=3,r=7);
+ \hex[terrain=mountains](c=3,r=8);
+ \hex[terrain=mountains](c=3,r=9);
+% \end{macrocode}
+%
+% In the next step, we will add a town to the map.
+%
+% \begin{macrocode}
+ \hex[town={
+ place={(hex cs:c=1,r=1,e=SW,o=.5)}}]
+ (c=4,r=3);
+ \hex[terrain=woods](c=4,r=4);
+ \hex(c=4,r=5);
+ \hex[terrain=woods](c=4,r=6);
+ \hex[terrain=woods](c=4,r=7);
+ \hex[terrain=woods](c=4,r=8);
+ \hex[terrain=woods](c=4,r=9);
+ \hex(c=4,r=10);
+% \end{macrocode}
+% The \texttt{place} key specifies the placement of the town relative
+% to the hex centre.
+%
+% For the rest of the map, there isn't much new.
+%
+% \begin{macrocode}
+ \hex(c=5,r=3);
+ \hex[terrain=woods](c=5,r=4);
+ \hex[](c=5,r=5);
+ \hex[terrain=woods](c=5,r=6);
+ \hex[terrain=woods](c=5,r=7);
+ \hex[terrain=woods](c=5,r=8);
+ \hex[terrain=woods](c=5,r=9);
+
+ \hex[terrain=woods](c=6,r=4);
+ \hex[terrain=woods](c=6,r=5);
+ \hex[town={
+ place={(hex cs:c=1,r=1,v=E,o=.3)}}]
+ (c=6,r=6);
+ \hex(c=6,r=7); \hex(c=6,r=8);
+ \hex[terrain=woods](c=6,r=9);
+ \hex[terrain=woods](c=6,r=10);
+
+ \hex(c=7,r=4); \hex(c=7,r=5);
+ \hex(c=7,r=6); \hex(c=7,r=7);
+ \hex(c=7,r=8); \hex(c=7,r=9);
+ \end{scope}
+}
+% \end{macrocode}
+%
+% That concludes our hexes. Let us draw it (\figurename~\ref{fig:hexes}).
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}[scale=.7]
+% \hexes
+% \end{tikzpicture}
+% \caption{Our hexes}
+% \label{fig:hexes}
+% \end{figure}
+%
+% This only defines the map. Now we would like to make the full
+% board. Typically one want to add a turn track and some other stuff.
+% Here, we will keep it fairly simple and just add a turn track.
+%
+% \begin{quote}
+% This is where we need to start to consider VASSAL. Essentially,
+% VASSAL can split a board into \emph{zones}. These zones can be
+% different game specific places, e.g., a place to keep eliminated
+% units, a place for the turn track, and so on. We will take
+% advantage of this in our board definition by applying some
+% specific styles.
+% \end{quote}
+%
+% Below we customise the board frame, and some other things on the
+% board.
+%
+% \begin{macrocode}
+\colorlet{framebg}{gray!50!white}
+\colorlet{titlefg}{gray!50!black}
+\tikzset{
+ hex/board frame/.style={
+ scale line widths,
+ line width=.5pt,
+ draw=black},
+ board frame/.style={%
+ anchor=south west,
+ transform shape,
+ scale line widths,
+ line width=1pt,
+ draw=black,
+ fill=framebg,
+ minimum width=14cm,%
+ minimum height=19cm
+ },
+ turn/.style={
+ scale line widths,
+ line width=.5pt,
+ fill=white,
+ draw=black,
+ text=gray,
+ minimum width=1.4cm,
+ minimum height=1.4cm,
+ text width=1.2cm,
+ align=center,
+ font=\sffamily\bfseries\huge,
+ transform shape,
+ anchor=north east
+ },
+ title/.style={
+ text=titlefg,
+ font=\sffamily\bfseries\Huge,
+ scale=1.5,
+ transform shape,
+ },
+ sub title/.style={
+ text=titlefg!75!white,
+ font=\sffamily\bfseries\normalsize,
+ scale=1.5,
+ transform shape,
+ text width=5cm,
+ align=right
+ }
+}
+% \end{macrocode}
+%
+% Let us start the board. The \textsf{wargame} package has a tool
+% \verb+\boardrame+ which will put a frame around the map as defined
+% by hex coordinates. It also output the map bounding box to the
+% standard log file. So running \LaTeX{} once with this macro in
+% effect will give us some useful information.
+%
+% We will define the board in two steps. First we define an
+% \emph{environment} which holds the map, turn track, and title of the
+% game, and after that we will add an environment that wraps it in a
+% \Tikz{} picture.
+%
+% We define the board as an environment, so that we may put
+% things on the board in our explanations of the rules.
+%
+% \begin{macrocode}
+\newenvironment{innerboard}[1][]{%
+ \node[board frame] (frame) {};
+% \end{macrocode}
+%
+% This adds in our frame of the whole map as defined by the style
+% above.
+%
+% Also note that we made our outer frame a \texttt{node}. This is so
+% that we can refer to its anchors without too much knowledge of its
+% size.
+%
+% We have made our frame a little bigger than the hex, so that we may
+% add a turn track. We will at it at the top, and we will add 10
+% turns. Here, we make use of \Tikz{} loops, and they do the trick for
+% us.
+%
+% We will make use the style \texttt{zone scope} with the name
+% \texttt{Turns}. This will be made into a VASSAL zone that has a
+% coordinate system that identifies it (at least by convention) as
+% turn track. We will in fact deploy a little trick here to make the
+% module even more complete. This is because we add the style
+% \texttt{zone~point} to the turn number nodes below, and the first
+% one will have the name of the game turn marker. This means that the
+% game turn marker will \emph{automatically} be placed there. If the
+% below is a little complicated for you, take a look at the
+% alternative below the code
+%
+% \begin{macrocode}
+ \begin{scope}[
+ shift={($(frame.south east)+(-0.5,.5)$)}]
+ \begin{scope}[zone scope=Turns]
+ \foreach \i in {1,...,10}{%
+ \pgfmathparse{\i*1.65-.225-.7}
+ \edef\y{\pgfmathresult}
+ \ifnum1=\i
+ \def\tname{game turn}
+ \else
+ \def\tname{T\i}
+ \fi
+ \node[turn,zone point={\tname}{-.7}{\y}]
+ at (0,\y+.7) {\i};
+ }
+ \end{scope}
+ \end{scope}
+% \end{macrocode}
+%
+% A simpler alternative would be
+%
+% \begin{verbatim}
+% \begin{scope}[
+% shift={($(frame.south east)+(-0.5,.5)$)}]
+% \begin{scope}[zone scope=Turns]
+% \foreach \i in {1,...,10}{%
+% \node[turn] at (0,\i*1.65-.225) {\i};
+% }
+% \end{scope}
+% \end{scope}
+% \end{verbatim}
+% We also add a title using the styles we defined above. Note,
+% consistent use of \Tikz{} styles makes it very easy to change things
+% consistently throughout the game.
+%
+% \begin{macrocode}
+ \node[below right=5mm and 5mm of
+ frame.north west,title]{A Game};
+ \node[below left=5mm and 5mm of
+ frame.north east,sub title]{A tutorial in the\\
+ {\color{white}wargame} package};
+% \end{macrocode}
+%
+% With this, we are left with adding in the map.
+%
+% \begin{macrocode}
+ \scope[shift={(.5,.5)}]
+ \scope[shift={(1,0.86603)},
+ zone scope=Hex]
+ \hexes
+ \boardframe(c=1,r=1)(c=7,r=10)
+ % Reported by the above
+ % Board Frame:
+ % BBox: (-1.0,-0.86603)x(10.0,15.5885)
+ % WxH: (11.0x16.45453)
+ % NCxNR (1,1)x(7,10)
+% \end{macrocode}
+%
+% Above, we see the output from \verb+\boardframe+. This in turn
+% informs us how to set the offset of the inner most scope. We also
+% see that the map is $11\times 16.45453\,\textrm{cm}$ big, which means
+% our board will easily fit on standard paper (A4 or, less standard,
+% Letter).
+%
+% \begin{quote}
+% The offset of $(-1,0.86603)$ is not surprising when you know that
+% the radius $r$ of the circumscribed circle of the hexes is 1\,cm,
+% and that the first hex centre is placed in $(0,0)$. The horizontal
+% offset of -1 is just that radius $r$, and the vertical offset is
+% $r\sin60^{\circ}=\sqrt{3}/2=0.86603$.
+% \end{quote}
+%
+% The outer most scope translates the hex 5mm in from both edges so
+% that we may draw a nice frame around the map.
+%
+% The style \texttt{zone scope=Hex} will make this area a zone in
+% VASSAL and it will have a hex grid (because its argument contains
+% the sub string \texttt{hex}) attached to it.
+%
+% This end the start of the environment. Next, we define the end of
+% it. This simply closes the scopes and the \Tikz{} picture.
+%
+% \begin{macrocode}
+}{
+ \endscope%
+ \endscope%
+}
+% \end{macrocode}
+%
+% This ends the environment that defines the board proper. Now we
+% wrap it in another environment that will put the map inside a
+% \Tikz{} picture.
+%
+% \begin{macrocode}
+\newenvironment{board}[1][]{%
+ \tikzpicture[#1,zoned]
+ \innerboard}{%
+ \endinnerboard%
+ \endtikzpicture}
+% \end{macrocode}
+%
+% The style \texttt{zoned} on the \Tikz{} picture ensures that we will
+% get a zoned map when generating the VASSAL module. Note that we
+% used the \TeX{}-like form of the environment \verb+\tikzpicture+,
+% rather than \verb+\begin{tikzpicture}+, so that the various
+% \verb+\end+s does not mess up things.
+%
+%
+% We can draw the final board (\figurename~\ref{fig:board}).
+% \begin{figure}
+% \centering
+% \begin{board}[scale=.5]
+% \end{board}
+% \caption{The final board}
+% \label{fig:board}
+% \end{figure}
+%
+% \subsection{Adding units to the board}
+% \label{sec:board:units}
+%
+% We have defined our board as a environment so we can add units to it
+% without much hassle. Let us add the starting units at the starting
+% positions. Since we will be \emph{stacking} chits, we will use the
+% \verb+\chitstack+ macro for this. Note that this macro expects code
+% to produce the chits (rather than the unit styles). Therefore we
+% must add in some \verb+\noexpand+ in front of the \verb+\chit+
+% command.
+%
+% \begin{figure}
+% \centering
+% \begin{board}[scale=.5]%
+% \stackchits(A2)(.2,.2){%%
+% \noexpand\chit[a hq],%
+% \noexpand\chit[a 1 hqbg],%
+% \noexpand\chit[a 1 2jd ibn],%
+% \noexpand\chit[a 2 1jd abn]}%
+% \chit[a 1 1lg ibn](D3);%
+% \stackchits(C2)(.2,.2){%%
+% \noexpand\chit[a 2 hqbg],%
+% \noexpand\chit[a 1 1gh ibn]}%
+% \stackchits(A1)(.2,.2){%%
+% \noexpand\chit[a aregt],%
+% \noexpand\chit[a 1 1 abn]}%
+% \chit[a 2 3gh rbn](D2);%
+%
+% \stackchits(F6)(.2,.2){%%
+% \noexpand\chit[b hq],%
+% \noexpand\chit[b lg hqregt],%
+% \noexpand\chit[b lg ibn]}%
+% \stackchits(E7)(.2,.2){%%
+% \noexpand\chit[b k3 hqregt],%
+% \noexpand\chit[b k3 31 abibn]}%
+% \stackchits(D7)(.2,.2){%%
+% \noexpand\chit[b p4 hqregt],%
+% \noexpand\chit[b p4 41 cabn],%
+% \noexpand\chit[b p4 42 cabn]}%
+% \stackchits(E3)(.2,.2){%%
+% \noexpand\chit[b p7 hqregt],%
+% \noexpand\chit[b p7 71 ibn],%
+% \noexpand\chit[b p7 72 cabn]}%
+% \stackchits(D4)(.2,.2){%%
+% \noexpand\chit[b i13 hqregt],%
+% \noexpand\chit[b i13 131 ibn],%
+% \noexpand\chit[b i13 132 ibn]}%
+% \end{board}
+% \caption{The board with units at their starting positions}
+% \label{fig:board-start}
+% \end{figure}
+%
+% The board with the ``At-start'' units in place are shown in
+% \figurename~\ref{fig:board-start}. The first part of this was made
+% with
+%
+% \begin{verbatim}
+% \begin{board}
+% \stackchits(A2)(.2,.2){%
+% \noexpand\chit[a hq],
+% \noexpand\chit[a 1 hqbg],
+% \noexpand\chit[a 1 2jd ibn],
+% \noexpand\chit[a 2 1jd abn]}
+% \chit[a 1 1lg ibn](D3);
+% \end{verbatim}
+%
+% The first argument to \verb+\stackchits+ is where to put the
+% stack. The second is the offset applied to each stack unit in
+% succession (obviously the first offset is $(0,0)$). The third
+% argument is the list of chits to add to the stack.
+%
+% Note that we use the hex labels, rather than the hex coordinates, to
+% place the units and stacks of units, thanks to \texttt{hex/label is
+% name}.
+%
+% We have made the counters and board for the game. What remains is
+% the various tables (and or of course the rules).
+%
+% \subsection{Clipped boards}
+% \label{sec:board:clipped}
+%
+% We are not quite done with the board just yet. We want to make
+% \emph{another} environment which will clip to a specified area of
+% the map. We will reuse our \texttt{innerboard} environment so that
+% everything is consistent. Let us go ahead and define the
+% environment, and then see later how it is used. We define our
+% environment as two macros \verb+\clipped+ and \verb+\endclipped+ so
+% that we can use parenthesis for our arguments.
+%
+% \begin{macrocode}
+\tikzset{
+ clip board/.style={gray,line width=.5pt}}
+\newcommand\clipped[1][]{\doclipped[#1]}
+\def\doclipped[#1](#2)(#3){
+ \def\tmp@clip@a{#2}
+ \def\tmp@clip@b{#3}
+ \tikzpicture[#1]
+ \scope
+ \clip (#2) rectangle (#3);
+ \scope[shift={(-.5-1,-.5-0.86603)}]
+ \innerboard}
+\def\endclipped{%
+ \endinnerboard
+ \endscope
+ \endscope
+ \draw[clip board](\tmp@clip@a)
+ rectangle (\tmp@clip@b);
+ \endtikzpicture}
+% \end{macrocode}
+%
+% Our environment \texttt{clipped} takes 3 arguments. One is optional
+% and is keys to pass to the \Tikz{} picture environment. The two
+% others are the coordinates (relative to the hexes) of our clipping
+% rectangle. Let us illustrate this with an example --- see
+% \figurename~\ref{fig:clipped}.
+%
+% \begin{figure}
+% \centering
+% \begin{clipped}(hex cs:c=2,r=2)(hex cs:c=5,r=5)
+% \end{clipped}
+% \caption{Example of using \texttt{clipped}.}
+% \label{fig:clipped}
+% \end{figure}
+%
+% The figure was produced by the code
+%
+% \begin{verbatim}
+% \begin{clipped}(hex cs:c=2,r=2)(hex cs:c=5,r=5)
+% \end{clipped}
+% \end{verbatim}
+%
+% Note that we \emph{must} use the hex coordinate system. When we
+% make the clipping path, the nodes of the hex map has not yet been
+% defined. We can use this to illustrate things on the map. For
+% example, \figurename~\ref{fig:clipped-attack} show that B P7/72 CABN
+% attacks A 2/1JD ABN with the code
+%
+% \begin{verbatim}
+% \begin{clipped}(hex cs:c=2,r=3)(hex cs:c=5,r=5)
+% \chit[b p7 72 cabn](D5);
+% \chit[a 2 1jd abn](C4);
+% \draw[hex/attack] (D5)--(C4);
+% \end{clipped}
+% \end{verbatim}
+%
+% \begin{figure}
+% \centering
+% \begin{clipped}(hex cs:c=2,r=3)(hex cs:c=5,r=5)
+% \chit[b p7 72 cabn](D5);
+% \chit[a 2 1jd abn](C4);
+% \draw[hex/attack] (D5)--(C4);
+% \end{clipped}
+% \caption{Example of using \texttt{clipped}.}
+% \label{fig:clipped-attack}
+% \end{figure}
+%
+% Note that \emph{inside} the environment we \emph{can} use hex
+% labels as coordinates.
+%
+% \section{The charts}
+% \label{sec:charts}
+%
+% We will not go into details about how to make tables in
+% \LaTeX{}. There are plenty of excellent resources out there for that
+% purpose. Here we will make three tables: The combat resolution
+% table (CRT), the terrain effects chart (TEC), and the Order of Battle
+% (OOB) chart\footnote{In some games this is called the Order of
+% Appearance (OOA) chart.} --- all of which in some respect uses
+% elements of the
+% \textsf{wargame} package.
+%
+% For all the tables, we would like to use the \textsf{colortbl}
+% package to colour the rows. Here, we make some short hands for
+% doing just that.
+%
+% \begin{macrocode}
+\colorlet{headbg}{gray!50!white}
+\colorlet{altbg}{gray!15!white}
+\newcommand\headrow{\rowcolor{headbg}}
+\newcommand\defrow{\rowcolor{white}}
+\newcommand\altrow{\rowcolor{altbg}}
+% \end{macrocode}
+%
+% \subsection{The CRT}
+% \label{sec:charts:crt}
+%
+% The combat resolution table is in some sense a straight forward
+% \LaTeX{} table. Here's the definition
+%
+% \begin{macrocode}
+\newcommand\crt{%
+ \begin{tabular}{|c|cccccc|}
+ \hline
+ \headrow
+ \textbf{Die}
+ & \multicolumn{6}{c|}{\textbf{Odds}}
+ \\
+ \headrow
+ \textbf{roll}
+ & \textbf{1:3}
+ & \textbf{1:2}
+ & \textbf{1:1}
+ & \textbf{2:1}
+ & \textbf{3:1}
+ & \textbf{4:1}
+ \\
+ \hline
+ \defrow
+ 1 & AE & AR & AR & EX & DR & DR \\
+ \altrow
+ 2 & AE & AR & EX & EX & DR & DR \\
+ \defrow
+ 3 & AR & EX & EX & DR & DR & DE \\
+ \altrow
+ 4 & AR & EX & EX & DR & DR & DE \\
+ \defrow
+ 5 & EX & EX & DR & DR & DE & DE \\
+ \altrow
+ 5 & EX & DR & DR & DE & DE & DE \\
+ \hline
+ \end{tabular}}
+% \end{macrocode}
+%
+% And what it looks like is shown in \tablename~\ref{tab:crt}
+%
+% \begin{table}
+% \centering
+% \crt{}
+% \caption{The combat resolution table}
+% \label{tab:crt}
+% \end{table}
+%
+% \subsection{The TEC}
+% \label{sec:charts:te}
+%
+% In this table we will use small version of hexes to make a nice
+% table. The definition is as follows.
+%
+% \begin{macrocode}
+\newcommand\tec{%
+ \begin{tabular}{|cl|cc|}
+ \hline
+ \headrow
+ \multicolumn{2}{|c|}{\textbf{Terrain}}
+ & MF
+ & CF\textsuperscript{\dag}
+ \\
+ \hline
+ \defrow
+ \tikz[scale=.5]{\hex[label=]}
+ & Clear
+ & 1
+ & ---
+ \\
+ \altrow
+ \tikz[scale=.5]{\hex[label=,terrain=woods]}
+ & Woods
+ & 2
+ & \texttimes 2\textsuperscript{*}
+ \\
+ \defrow
+ \tikz[scale=.5]{\hex[label=,terrain=mountains]}
+ & Mountains
+ & Stop
+ & \texttimes 2\textsuperscript{*}
+ \\
+ \altrow
+ \tikz[scale=.5]{
+ \hex[label=,fill=sea](c=1,r=1);
+ \begin{scope}
+ \clip
+ (hex cs:c=1,r=1,v=NW)
+ --(hex cs:c=1,r=1,v=W)
+ --(hex cs:c=1,r=1,v=SW)
+ --(hex cs:c=1,r=1,e=S)
+ --(hex cs:c=1,r=1,v=W,o=.5)
+ --cycle
+ (hex cs:c=1,r=1,e=N)
+ --(hex cs:c=1,r=1,v=NE)
+ --(hex cs:c=1,r=1,v=E)
+ --(hex cs:c=1,r=1,e=SE)
+ --(hex cs:c=1,r=1,v=E,o=.4)
+ --cycle
+ ;
+ \hex[label=](c=1,r=1);
+ \end{scope}
+ }
+ & Coastal
+ & 2
+ & \texttimes2\phantom{\textsuperscript{*}}
+ \\
+ \hline
+ \multicolumn{4}{l}{\textsuperscript{\dag}
+ \emph{Defender} modifier}\\
+ \multicolumn{4}{l}{\textsuperscript{*}
+ \infantrymark{}\,\pgmark{} \emph{only},
+ unless \artillerymark}
+ \\
+ \end{tabular}
+}
+% \end{macrocode}
+%
+% The result is in \tablename~\ref{tab:te}. Note the use of
+% \verb+\infantrymark+ to put in \infantrymark{} in the table. The
+% \textsf{wargame} package defines a number of macros like this.
+%
+% \begin{table}
+% \centering
+% \tec
+% \caption{The terrain effects table}
+% \label{tab:te}
+% \end{table}
+%
+% \subsection{The OOB}
+% \label{sec:charts:oob}
+%
+% We like to make an OOB chart that we can place our unit counter on
+% so we can keep track of which units are available when. In our
+% game, all A faction units start already on the board. The B faction,
+% however, has most of its reinforcement troops way up north, and will
+% therefore bring them on the map piecemeal.
+%
+% We will use the \textsf{wargame} macro \verb+\oob+ to make our
+% OOBs. This macro uses the \texttt{pic} \texttt{chits/oob~turn} to
+% make the turns. The default setting is not what we want, so we
+% redefine that picture. In particular, we want turn ``0'' to say
+% ``At start''.
+%
+% We also want to reuse the style \texttt{turn} we used
+% to make the turn track on the board, but modify it a bit to fit our
+% purposes here. We therefore define the style \texttt{oob~turn}
+% which derives from \texttt{turn}, but scale it down 70\%, change the
+% anchor, and add some extra space outside of it
+% (\texttt{outer~sep}).
+%
+% \begin{macrocode}
+\tikzset{
+ oob turn/.style={
+ turn,
+ transform shape,
+ anchor=east,
+ outer sep=5mm,
+ scale=.7},
+}
+% \end{macrocode}
+%
+% Our modified \texttt{chit/oob~turn} picture will check if we get an
+% empty turn number, or the special ``0'' turn, and then put in a node
+% with the appropriate contents. Note that we define two pictures,
+% one which actually puts in the turn, and one that puts in nothing,
+% so when we make the combined OOB we only output the turns once. We
+% then default \texttt{chit/oob~turn} to the first picture
+%
+% \begin{macrocode}
+\tikzset{
+ oob turn real/.pic={%
+ \def\tmp{{\Large At start}}
+ \ifx|#1|\else%
+ \ifnum0=#1\else%
+ \def\tmp{#1}%
+ \fi%
+ \fi%
+ \node[oob turn,transform shape]{\tmp};
+ },
+ oob turn empty/.pic={},
+}
+\newcommand\oobrealturn{%
+ \tikzset{
+ pics/chit/oob turn/.style=%
+ {oob turn real=##1}}}
+\newcommand\oobemptyturn{%
+ \tikzset{
+ pics/chit/oob turn/.style=%
+ {oob turn empty=##1}}}
+\oobrealturn
+% \end{macrocode}
+%
+% Let us see how this looks for both factions. Factions A and B are
+% shown in \figurename~\ref{fig:a-oob} and \ref{fig:b-oob},
+% respectively.
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}[oob turn/.append style={anchor=west}]
+% \oob*{\alla}{4}{1.24}{0}
+% \end{tikzpicture}
+% \caption{Faction A OOB}
+% \label{fig:a-oob}
+% \end{figure}
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \oob{\allb}{4}{1.24}{0}
+% \end{tikzpicture}
+% \caption{Faction B OOB}
+% \label{fig:b-oob}
+% \end{figure}
+%
+% These were done with
+%
+% \begin{verbatim}
+% \begin{tikzpicture}[oob turn/.append style={anchor=west}]
+% \oob{\alla}{4}{1.24}{0}
+% \end{tikzpicture}
+% \begin{tikzpicture}
+% \oob{\allb}{4}{1.24}{0}
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% Note that the stared version \verb+\oob*+ puts out the counters
+% right aligned. This is also why we append the style
+% \texttt{oob~turn} to be anchored to the west.
+%
+% The first argument to \verb+\oob+ is the list of lists of counters.
+% This is why we defined \verb+\alla+ and \verb+\allb+ in the way we
+% did. The second argument is the distance between each counter.
+% Since the counters are 1.2\,cm wide, we gave them a little extra
+% space between them by setting the second argument to 1.24\,(cm).
+% The third argument is the spacing between turn rows. Above we have
+% set that to 0\,(cm), but that we will change in the real OOB chart.
+%
+% And that's what we will do next. This will be rather wide, so we
+% when we show it in a minute, we will do so in a wide table (leaving
+% the two-column layout for a minute).
+%
+% \begin{macrocode}
+\newcommand\inneroob[1][]{%
+ \node[board frame,anchor=north] (oob frame)
+ at (0,2.5) {};%
+ % Game title
+ \node[%
+ below right=5mm and 5mm of oob frame.north west,
+ title,scale=.8]{A Game};
+ % Chart title
+ \node[%
+ below left=5mm and 5mm of oob frame.north east,
+ sub title,scale=1.2,transform shape]{%
+ Order of Battle};
+ % Turn title
+ \node[font=\sffamily\bfseries\Large,
+ white,transform shape]
+ at (0,1) {Turn};
+ %
+ \begin{scope}[%
+ transform shape,
+ oob turn/.append style={anchor=west},%
+ shift={(-1.35,0)},
+ zone scope=A OOB]%
+ \oobemptyturn%
+ \oob*{\alla}{4}{1.4}{.2}%
+ \end{scope}%
+ %
+ \begin{scope}[%
+ transform shape,
+ shift={(1.35,0)},
+ zone scope=B OOB]%
+ \oobrealturn%
+ \oob{\allb}{4}{1.4}{.2}%
+ \end{scope}%
+ %
+}
+\newcommand\fulloob[1][]{%
+ \begin{tikzpicture}[#1,zoned]%
+ \inneroob
+ \end{tikzpicture}}
+% \end{macrocode}
+% A couple of things to note.
+%
+% We put everything inside a \Tikz{} picture with the option
+% \texttt{zoned} so that we will get a zoned
+% map in VASSAL. We also add the zones \texttt{A OOB} and \texttt{B
+% OOB} via the key \texttt{zone scope}. We will need to adjust the
+% grids of the zones later on. Another side effect of using
+% \verb+\oob+ is that each turn will be marked as a ``region'' of a
+% ``region grid'' in in VASSAL, so that the each counter will be
+% automatically placed in its place on the OOB in the VASSAL module.
+%
+% Secondly, we reuse our \texttt{board frame}, \texttt{title}, and
+% \texttt{sub~title} styles to make the OOB come out in similar manner
+% as the board. We do adjust the font sizes a bit though. We have
+% also made the OOB the same size as the board so that they stack
+% nicely.
+%
+% Finally, when we make the faction A oob, we turn off generation of
+% the turn numbers. This is so we do note produce those twice.
+%
+%
+% The final OOB is shown in \figurename~\ref{fig:oob}. This was
+% produced with
+%
+% \begin{verbatim}
+% \fulloob
+% \end{verbatim}
+%
+% \begin{figure}
+% \centering
+% \fulloob[scale=.5]
+% \caption{The OOB}
+% \label{fig:oob}
+% \end{figure}
+%
+% \section{Ending the package}
+% \label{sec:end:package}
+%
+% At the end of the package we should end with the marker
+% \verb+\endinput+.
+%
+% \begin{macrocode}
+\endinput
+% \end{macrocode}
+%
+% This is the end of the package. We will do a little more in the
+% main document.
+%
+%
+% \iffalse
+% Local Variables:
+% mode: docTeX
+% TeX-master: "game.tex"
+% End:
+% \fi \ No newline at end of file
diff --git a/macros/latex/contrib/wargame/doc/tutorial/game.tex b/macros/latex/contrib/wargame/doc/tutorial/game.tex
new file mode 100644
index 0000000000..6db72bff27
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/game.tex
@@ -0,0 +1,200 @@
+\documentclass[11pt,twoside]{ltxdoc}
+
+\usepackage{game}
+\usepackage[margin=1cm,bottom=2cm,top=2cm,a4paper]{geometry}
+\newcommand\Tikz{Ti{\itshape k}Z/PGF}
+\setlength{\parskip}{.5ex}
+\setlength{\parindent}{0em}
+\newcommand\tightlist{\setlength{\itemsep}{3pt}
+ \setlength{\parskip}{0pt}}
+\newcommand\copyleftnotice{{%
+ \footnotesize \copyright{} 2022, Christian Holm Christensen,
+ licensed under the CC-BY-SA 4.0}}
+\makeatletter
+\def\ps@game{%
+ \def\@oddfoot{\hfill\copyleftnotice\hfill}%
+ \def\@evenfoot{\hfill\copyleftnotice\hfill}%
+ \def\@oddhead{The \textsf{wargame} tutorial\hfill\thepage}%
+ \def\@evenhead{\thepage\hfill\rightmark}
+ \def\sectionmark##1{%
+ \markright{\ifnum\c@secnumdepth>\z@%
+ \thesection. \ \fi##1}}}
+\makeatother
+\pagestyle{game}
+
+\title{The \LaTeX{} \textsf{wargame} package\\
+ {\large A tutorial}}
+\author{Christian Holm Christensen}
+\date{\today}
+
+\def\MacroFont{%
+ \fontencoding{\encodingdefault}%
+ \fontfamily{\ttdefault}%
+ \fontseries{\mddefault}%
+ \fontshape{\shapedefault}%
+ \footnotesize}
+\let\theCodelineNo\empty
+\begin{document}
+\thispagestyle{plain}
+\twocolumn
+\maketitle
+
+\section{Introduction}
+
+This is a short tutorial on how to use the \LaTeX{} \textsf{wargame}
+package. We will walk through the definition materials for a game.
+We will \emph{not} give actual rules for the game. That is a whole
+different topic and I refer you to the literature, for example
+
+\begin{description}\tightlist
+\item[\href{https://www.bloomsbury.com/uk/simulating-war-9781472533913/}{\textit{Simulating war}}] by P.Sabin
+\item[\href{https://www.professionalwargaming.co.uk/Complete-Wargames-Handbook-Dunnigan.pdf}{\textit{The
+ Complete Wargames Handbook}}] by J.F.Dunnigan
+\item[\href{https://www.scribd.com/book/220336866/Designing-Wargames-Introduction}{Designing
+ Wargames: Introduction}] by G.Phillies (and associated
+ \href{https://www.youtube.com/playlist?list=PLjnA1DE9KX645eBC2gDWHkSlCPvpb4JAQ}{Youtube
+ lecture series})
+
+\end{description}
+
+\section{The game}
+
+The game we will create is a small game with two factions (sides, or
+players). The game is \emph{not} supposed to be play-able, and we'll
+leave out a lot of details which we would need in a full game.
+
+\DocInput{game.sty}
+
+\section{Rules}
+
+We will not write any rules for this demonstration game. The focus of
+this tutorial is how to use the \textsf{wargame} package, not how to
+design a game.
+
+The \textsf{wargame} package does however have a number of tools that
+helps the developer write the rules. We've already seen some of them
+in action. For example, we saw how to add stacks of units to a board
+in Section~\ref{sec:board:units} or how to make board clippings to
+show a zoom of the map (Section~\ref{sec:board:clipped}).
+
+Figure~\ref{fig:clipped-attack} showed how we can illustrate an attack,
+for example. The package also provides means to indicate eliminated
+units, movement, retreats, advances, and much more. The manual gives
+a lot more information about this.
+
+\DocInput{export.tex}
+
+\section{The materials}
+
+Next, we will make some materials for printing. The next few pages
+will contain only the materials and no text, so we will summarise what
+we do here.
+
+The first thing we put out is the map. That is pretty simple. We do
+
+\begin{verbatim}
+ \begin{board}
+ \end{board}
+\end{verbatim}
+
+Then comes the OOB. We simply use the \verb+\fulloob+ macro.
+
+After that are the two tables put into one page.
+
+\begin{verbatim}
+ \crt \tec
+\end{verbatim}
+
+And the final part are the counter sheets. We will take advantage of
+the macros \verb+\alla+ and \verb+\allb+ yet again.
+
+\begin{verbatim}
+ \doublechits{\allb}{4}{1.24}
+\end{verbatim}
+
+As a final bonus, we also make a board that includes our three charts:
+The OOB, CRT, and TE. We will not demonstrate the code here, but take
+a look in the sources if you are curious.
+
+\newcommand\fullboard[1][]{%
+ \begin{tikzpicture}[#1,rotate=90]%
+ \begin{scope}
+ \begin{innerboard}
+ \end{innerboard}
+ \end{scope}
+ \begin{scope}[shift={($(frame.north east)+(7,-2.5)$)}]
+ \inneroob
+ \end{scope}
+ %
+ \node[anchor=south west,minimum width=6.2cm,minimum height=10cm,
+ line width=1pt,sub title,scale=.66,draw,align=center,
+ text depth=9.7cm,fill=neutral,transform shape]
+ at (oob frame.south west)
+ {{\LARGE Charts}};
+ %
+ \node[above right=5mm and 4mm of oob frame.south west,
+ inner sep=0pt,
+ transform shape,scale=.75,anchor=south west] (crt) {\crt};
+ %
+ \node[above=5mm of crt.north west,anchor=south west,inner sep=0pt,
+ transform shape,scale=.9] (tec) {\tec};
+ %
+ % \end{scope}
+ \node[below=1mm of frame.south west,anchor=north west,
+ transform shape]{%
+ \copyleftnotice};
+ \end{tikzpicture}}
+
+We put in \verb+\cleardoublepage+ between all this so that we can
+print directly on a duplex printer.
+
+\section{Epilogue}
+
+I hope that this short tutorial has helped you. Suggestions,
+corrections, and so on are very welcomed.
+
+\begin{flushright}
+ \textit{Christian}
+\end{flushright}
+\onecolumn
+\cleardoublepage
+
+\begin{center}
+ \begin{board}
+ \end{board}
+\end{center}
+\cleardoublepage
+
+\begin{center}
+ \fulloob
+\end{center}
+\cleardoublepage
+
+\begin{center}
+ \crt\space\space\tec
+\end{center}
+\cleardoublepage
+
+\begin{center}
+ \begin{tikzpicture}
+ \doublechits{\allb}{7}{1.24}
+ \end{tikzpicture}
+
+ \begin{tikzpicture}
+ \doublechits{\alla}{6}{1.24}
+ \end{tikzpicture}
+
+ \begin{tikzpicture}
+ \doublechits{{game turn}}{1}{1.24}
+ \end{tikzpicture}
+\end{center}
+
+\cleardoublepage
+\newgeometry{margin=7mm}
+\pagestyle{empty}
+\fullboard
+
+\end{document}
+%% Local Variables:
+%% mode: LaTeX
+%% End:
diff --git a/macros/latex/contrib/wargame/doc/tutorial/patch.py b/macros/latex/contrib/wargame/doc/tutorial/patch.py
new file mode 100644
index 0000000000..71785252bb
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/tutorial/patch.py
@@ -0,0 +1,31 @@
+def patch(build,data,vmod,verbose=False):
+ # We need to import the export module :-)
+ import export
+
+ # Get the game and last free GPID
+ game = export.get_game(build)
+ gpid = int(game.getAttribute('nextPieceSlotId'))
+
+ # Get all boards
+ maps = export.get_maps(build)
+ board = maps['Board']
+
+ mkeys = export.get_masskey(board,'name')
+ export.set_node_attr(mkeys['Eliminate'],icon='eliminate-icon.png')
+ export.set_node_attr(mkeys['Flip'],icon='flip-icon.png')
+
+ # Get main map
+ pool = maps['DeadMap']
+ export.set_node_attr(pool,icon='pool-icon.png')
+
+ mkeys = export.get_masskey(pool,'name')
+ export.set_node_attr(mkeys['Restore'],icon='restore-icon.png')
+
+ # Get the OOB map
+ oob = export.get_chartwindows(game)['OOBs']
+ export.set_node_attr(oob,icon='oob-icon.png')
+
+
+
+
+
diff --git a/macros/latex/contrib/wargame/doc/wargame.pdf b/macros/latex/contrib/wargame/doc/wargame.pdf
new file mode 100644
index 0000000000..aeb06a386d
--- /dev/null
+++ b/macros/latex/contrib/wargame/doc/wargame.pdf
Binary files differ
diff --git a/macros/latex/contrib/wargame/source/Makefile b/macros/latex/contrib/wargame/source/Makefile
new file mode 100644
index 0000000000..656439e408
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/Makefile
@@ -0,0 +1,334 @@
+#
+#
+#
+NAME := wargame
+VERSION := 0.2
+LATEX_FLAGS := -interaction=nonstopmode \
+ -file-line-error \
+ --synctex=15 \
+ -shell-escape
+LATEX := pdflatex
+MAKEINDEX := makeindex
+SED := sed
+CTANOMAT := ctan-o-mat
+CTANOMAT_FLAGS := -n
+SOURCES := wargame.ins \
+ wargame.dtx \
+ package.dtx \
+ util/core.dtx \
+ chit/shape.dtx \
+ chit/misc.dtx \
+ chit/elements.dtx \
+ chit/core.dtx \
+ hex/shape.dtx \
+ hex/tile.dtx \
+ hex/ridges.dtx \
+ hex/towns.dtx \
+ hex/terrain.dtx \
+ hex/paths.dtx \
+ hex/core.dtx \
+ hex/labels.dtx \
+ hex/extra.dtx \
+ hex/terrain/woods.dtx \
+ hex/terrain/town.dtx \
+ hex/terrain/tree.dtx \
+ hex/terrain/beach.dtx \
+ hex/terrain/mountain.dtx \
+ hex/terrain/light_woods.dtx \
+ hex/terrain/mountains.dtx \
+ hex/terrain/village.dtx \
+ hex/terrain/city.dtx \
+ hex/terrain/swamp.dtx \
+ hex/terrain/rough.dtx \
+ hex/board.dtx \
+ hex/coord.dtx \
+ natoapp6c/shape.dtx \
+ natoapp6c/symbols.dtx \
+ natoapp6c/list.dtx \
+ natoapp6c/compat/seasurface.dtx \
+ natoapp6c/compat/activity.dtx \
+ natoapp6c/compat/subsurface.dtx \
+ natoapp6c/compat/missile.dtx \
+ natoapp6c/compat/air.dtx \
+ natoapp6c/compat/seamine.dtx \
+ natoapp6c/compat/land.dtx \
+ natoapp6c/compat/equipment.dtx \
+ natoapp6c/compat/installation.dtx \
+ natoapp6c/compat/space.dtx \
+ natoapp6c/frames/hostile.dtx \
+ natoapp6c/frames/base.dtx \
+ natoapp6c/frames/friendly.dtx \
+ natoapp6c/frames/neutral.dtx \
+ natoapp6c/frames/unknown.dtx \
+ natoapp6c/weaponry.dtx \
+ natoapp6c/core.dtx \
+ natoapp6c/text.dtx \
+ natoapp6c/echelon.dtx \
+ natoapp6c/util.dtx \
+ tests/map.dtx \
+ tests/chits.dtx
+SCRIPTS := utils/svg2tikz.py utils/export.py
+
+DESTDIR := $(HOME)/texmf/
+instdir := tex/latex/$(NAME)
+docdir := doc/latex/$(NAME)
+srcdir := source/latex/$(NAME)
+ctandir := ctan
+distsdir := $(NAME)-$(VERSION)
+
+TILES := beach \
+ city \
+ light_woods \
+ mountains \
+ rough \
+ swamp \
+ town \
+ village \
+ woods
+TABLES := air \
+ missile \
+ land \
+ equipment \
+ installation \
+ seasurface \
+ subsurface \
+ seamine \
+ space \
+ activity
+PKG_FILES := wargame.sty \
+ tikzlibrarywargame.util.code.tex \
+ tikzlibrarywargame.hex.code.tex \
+ tikzlibrarywargame.natoapp6c.code.tex \
+ tikzlibrarywargame.chit.code.tex \
+ wgexport.cls \
+ $(TILES:%=%.pdf)
+
+# beach.png \
+# city.png \
+# mountains.png \
+# sea.png \
+# woods.png \
+# light_woods.png \
+# rough.png \
+# swamp.png \
+# town.png
+DOC_FILES := wargame.pdf symbols.pdf compat.pdf
+
+ifdef VERBOSE
+MUTE :=
+REDIR :=
+LATEX_FLAGS :=
+else
+MUTE := @
+REDIR := > /dev/null 2>&1
+endif
+ifdef CI_COMMIT_REF_NAME
+VERSION := $(CI_COMMIT_REF_NAME)
+else
+ifdef := $(CI_JOB_ID)
+endif
+
+%.aux:%.tex
+ @echo "LATEX $< -> $@"
+ $(MUTE)$(LATEX) $(LATEX_FLAGS) $< $(REDIR)
+
+%.idx:%.dtx
+ @echo "LATEX $< -> $@"
+ $(MUTE)$(LATEX) $(LATEX_FLAGS) $< $(REDIR)
+
+%.aux:%.idx
+ @echo "LATEX $*.dtx -> $@ (via $<)"
+ $(MUTE)$(LATEX) $(LATEX_FLAGS) $*.dtx $(REDIR)
+ $(MUTE)touch $< $@
+
+%.pdf:%.aux %.ind
+ @echo "LATEX $*.dtx -> $@ (via $<)"
+ $(MUTE)$(LATEX) $(LATEX_FLAGS) $*.dtx $(REDIR)
+ $(MUTE)touch $^ $@
+
+%.pdf:%.aux %.tex
+ @echo "LATEX $*.tex -> $@ (via $<)"
+ $(MUTE)$(LATEX) $(LATEX_FLAGS) $*.tex $(REDIR)
+
+%.pdf:%.tex
+ @echo "LATEX $< -> $@"
+ $(MUTE)$(LATEX) $(LATEX_FLAGS) $< $(REDIR)
+
+
+%.ind:%.idx
+ @echo "INDEX $< -> $@ $<"
+ $(MUTE)$(MAKEINDEX) -s gind -o $@ $< $(REDIR)
+ $(MUTE)touch $^ $@
+
+%.gls:%.glo
+ @echo "GLOSSAY $< -> $@"
+ $(MUTE)$(MAKEINDEX) -s gglo -o $@ $< $(REDIR)
+ $(MUTE)touch $^ $@
+
+all: wargame.pdf
+
+package: $(PKG_FILES)
+
+everything: all symbols.pdf compat.pdf tests/test.pdf
+
+tutorial: tutorial/game.pdf
+tutorial/game.pdf: all
+ $(MUTE)$(MAKE) -C tutorial Game.vmod $(REDIR)
+
+clean:
+ @echo "CLEAN"
+ $(MUTE)rm -f *~ *.log* *.aux *.toc *.lof *.lot *.out *.ilg *.idx *.ind
+ $(MUTE)rm -f cmp_*.tex *.synctex* *.hd
+ $(MUTE)rm -f symbols.tex compat.tex testmap.tex testchits.tex
+ $(MUTE)rm -f wargame.sty wgdoc.sty logo.png logo.pdf
+ $(MUTE)rm -f symbols.pdf compat.pdf test.pdf wargame.pdf
+ $(MUTE)rm -f tikzlibrarywargame.util.code.tex
+ $(MUTE)rm -f tikzlibrarywargame.hex.code.tex
+ $(MUTE)rm -f tikzlibrarywargame.natoapp6c.code.tex
+ $(MUTE)rm -f tikzlibrarywargame.chit.code.tex
+ $(MUTE)rm -f wgexport.cls mksvg.pdf README.md.version
+ $(MUTE)rm -f $(TILES:%=%.tex) $(TILES:%=%.pdf)
+ $(MUTE)rm -rf public texmf
+ $(MUTE)rm -rf $(distsdir)
+ $(MUTE)rm -f $(distsdir).tar.gz
+ $(MUTE)rm -f $(distsdir).zip
+ $(MUTE)rm -f $(NAME).tar.gz
+ $(MUTE)rm -rf __pycache__
+ $(MUTE)rm -rf $(ctandir) tmp
+ $(MUTE)rm -f ctan.tex $(NAME).ctan.tar.gz
+
+
+
+wargame.sty \
+testmap.tex \
+testchits.tex \
+wgdoc.sty \
+compat.tex \
+symbols.tex \
+tikzlibrarywargame.hex.code.tex \
+tikzlibrarywargame.natoapp6c.code.tex \
+tikzlibrarywargame.chit.code.tex \
+wgexport.cls \
+$(TILES:%=%.tex) \
+$(TABLES:%=cmp_%.tex): $(SOURCES)
+ @echo "DOCSTRIP $<"
+ $(MUTE)$(LATEX) $< $(REDIR)
+
+wargame.idx: wargame.dtx wargame.sty $(TILES:%=%.pdf)
+wargame.pdf: wargame.aux wargame.ind
+fast: wargame.idx
+symbols.aux: symbols.tex wargame.sty
+compat.aux: compat.tex $(TABLES:%=cmp_%.tex) wargame.sty
+test.aux: test.tex wargame.sty
+
+beach.pdf: beach.tex
+city.pdf: city.tex
+light_woods.pdf:light_woods.tex
+mountains.pdf: mountains.tex
+rough.pdf: rough.tex
+swamp.pdf: swamp.tex
+town.pdf: town.tex
+village.pdf: village.tex
+woods.pdf: woods.tex
+
+install-devel: all
+ (cd $(dir $(DESTDIR)/$(instdir)) && \
+ rm -f $(notdir $(instdir)) && \
+ ln -fs $(PWD) $(notdir $(instdir)))
+
+install:$(PKG_FILES) $(DOC_FILES) $(SCRIPTS)
+ @echo "Installing DESTDIR=$(DESTDIR)"
+ $(MUTE)mkdir -p $(DESTDIR)$(instdir)
+ $(MUTE)mkdir -p $(DESTDIR)$(docdir)
+ $(MUTE)cp $(PKG_FILES) $(DESTDIR)$(instdir)
+ $(MUTE)cp $(DOC_FILES) $(DESTDIR)$(docdir)
+ $(MUTE)cp $(SCRIPTS) $(DESTDIR)$(instdir)
+
+uninstall:
+ rm -rf $(DESTDIR)$(instdir)
+ rm -rf $(DESTDIR)$(docdir)
+
+distdir:$(SOURCES) $(SCRIPTS) Makefile tests/test.tex
+ $(MUTE)rm -rf $(distsdir)
+ $(MUTE)mkdir -p $(distsdir)
+ $(foreach s, $^, \
+ mkdir -p $(distsdir)/$(shell dirname $(s)); \
+ cp $(s) $(distsdir)/$(s);)
+
+distcheck:distdir
+ $(MAKE) $(MAKEFLAGS) -C $(distsdir) everything
+
+dist:distdir
+ zip -r $(distsdir).zip $(distsdir)
+
+bindist: DESTDIR:=$(distsdir)/
+bindist:install
+ zip -r $(distsdir).zip $(distsdir)
+
+
+logo.png:logo.pdf
+ pdftocairo -png $<
+ mv logo-1.png logo.png
+
+README.md.version:README.md
+ @echo "Versioned README.md"
+ $(MUTE)$(SED) 's/^# \(.*\)/# \1\n## Version $(VERSION)/' \
+ < $< > $@
+
+ctandir: all tutorial/game.pdf README.md.version
+ @echo "Preparing CTAN directory"
+ $(MUTE)$(MAKE) install DESTDIR:=tmp/
+ $(MUTE)mkdir -p tmp/$(docdir)/tutorial
+ $(MUTE)cp $(foreach i, game.tex game.sty export.tex patch.py \
+ README.md Makefile game.pdf,\
+ tutorial/$(i)) tmp/$(docdir)/tutorial
+ $(MUTE)cp README.md.version tmp/$(docdir)/README.md
+ $(MUTE)$(MAKE) distdir distsdir:=tmp/$(srcdir) $(REDIR)
+ $(MUTE)mkdir -p $(ctandir)/$(NAME)
+ $(MUTE)cp tmp/$(docdir)/README.md $(ctandir)/$(NAME)/
+ #$(MUTE)(cd tmp && zip -q -r ../$(ctandir)/$(NAME).tds.zip *)
+ $(MUTE)(cd tmp && cp -a $(docdir) ../$(ctandir)/$(NAME)/doc)
+ $(MUTE)(cd tmp && cp -a $(srcdir) ../$(ctandir)/$(NAME)/source)
+ $(MUTE) rm -rf tmp
+
+ctan.tex:ctan.tex.in
+ @echo "SED $< -> $@"
+ $(MUTE)$(SED) -e 's/@NAME@/$(NAME)/g' \
+ -e 's/@VERSION@/$(VERSION)/' \
+ < $< > $@
+
+ctandist: $(NAME).ctan.tar.gz
+$(NAME).ctan.tar.gz: ctandir
+ @echo "TAR $@"
+ $(MUTE)rm -f $@
+ $(MUTE)(cd $(ctandir) && tar -czf ../$(NAME).ctan.tar.gz *)
+ $(MUTE)rm -rf $(ctandir) tmp
+
+
+ctan-upload:ctan.tex $(NAME).ctan.tar.gz
+ @echo "CTAN $< -> CTAN ($(CTANOMAT_FLAGS))"
+ $(MUTE)$(CTANOMAT) $(CTANOMAT_FLAGS) -c $<
+
+
+docker:
+ docker run --user root --group-add users -e GRANT_SUDO=yes -it --rm \
+ -v $(PWD):/root/$(notdir $(PWD)) texlive/texlive \
+ /bin/bash
+
+docker-prep:
+ apt update
+ apt install -y poppler-utils python3-pil \
+ libwww-mechanize-perl libfile-copy-recursive-perl
+ pwd
+ ls
+ make clean
+
+docker-artifacts: DESTDIR=$(PWD)/public/
+docker-artifacts: install tutorial/game.pdf
+ cp tutorial/game.pdf $(DESTDIR)$(docdir)/tutorial.pdf
+ cp tutorial/Game.vmod $(DESTDIR)$(docdir)/Game.vmod
+
+
+#
+# EOF
+#
diff --git a/macros/latex/contrib/wargame/source/chit/core.dtx b/macros/latex/contrib/wargame/source/chit/core.dtx
new file mode 100644
index 0000000000..7a0189074e
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/chit/core.dtx
@@ -0,0 +1,47 @@
+% \iffalse
+% ====================================================================
+% \fi
+%
+% \subsection{The \texttt{wargame.chit} \TikZ{} library}
+% \label{sec:impl:natoapp6c}
+%
+% We define the library for making chits. We load the hex \TikZ{}
+% \spec{wargame.natoapp6c} library and the \textsf{amsmath} and
+% \textsf{amstext} packages as we need those.
+%
+% \iffalse
+%<*chit>
+% \fi
+%
+% \begin{macrocode}
+\RequirePackage{amsmath}
+\RequirePackage{amstext}
+\usetikzlibrary{wargame.util,wargame.natoapp6c,math}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Debugging}
+%
+% \begin{Macro}{\chitdbglvl,\chit@dbg}
+%
+% Some macros for debugging. Similar to what we have in
+% \spec{wargame.hex} (see \sectionname~\ref{sec:impl:hex}.
+%
+% \begin{macrocode}
+\newcount\chitdbglvl\chitdbglvl=\wargamedbglvl
+\def\chit@dbg#1#2{%
+ \ifnum#1>\chitdbglvl\relax\else\message{^^J#2}\fi}
+% \end{macrocode}
+% \end{Macro}
+%
+% \input{chit/shape.dtx}
+% \input{chit/elements.dtx}
+% \input{chit/misc.dtx}
+%
+% \iffalse
+%</chit>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/chit/elements.dtx b/macros/latex/contrib/wargame/source/chit/elements.dtx
new file mode 100644
index 0000000000..8708ca2a15
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/chit/elements.dtx
@@ -0,0 +1,105 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*chit>
+% \fi
+%
+% \subsubsection{Predefined \texttt{chit} element pictures}
+%
+% \begin{TikzKey}{/tikz/pics/chit/1 factor,
+% /tikz/pics/chit/2 factors,
+% /tikz/pics/chit/2 factors artillery,
+% /tikz/pics/chit/3 factors,
+% /tikz/pics/chit/4 factors,
+% /tikz/pics/chit/identifier,
+% /tikz/pics/chit/small identifier,
+% /tikz/pics/chit/identifier macro}
+%
+% These pictures can be used as the value of \texttt{chit} keys.
+%
+% \begin{macrocode}
+\tikzset{%
+ chit/1 factor/.pic={
+ \chit@dbg{4}{ Chit 1 factor: #1}%
+ \node[chit/factor,chit/1 factor,pic actions]{#1};},
+ pics/chit/2 factors/.style args={#1,#2}{%
+ code={%
+ \chit@dbg{4}{ Chit 2 factors: #1 and #2}%
+ \node[chit/factor,chit/2 factors,pic actions]{#1--#2};}},
+ pics/chit/2 factors artillery/.style args={#1,#2,#3}{%
+ code={
+ \chit@dbg{4}{ Chit 2 factors w/artillery: `#1' `#2' `#3'}%
+ \node[chit/factor,chit/2 factors,pic actions]{%
+ #1$\overset{\text{\scriptsize #3}}{\text{--}}$#2};}},
+ pics/chit/3 factors/.style args={#1,#2,#3}{%
+ code={
+ \chit@dbg{4}{ Chit 3 factors: `#1' `#2' `#3'}%
+ \node[chit/factor,chit/3 factors,pic actions]{#1-#2-#3};}},
+ pics/chit/4 factors/.style args={#1,#2,#3,#4}{%
+ code={
+ \chit@dbg{4}{ Chit 3 factors: `#1' `#2' `#3' `#4'}%
+ \node[chit/factor,chit/4 factors,pic actions]{#1-#2-#3-#4};}},
+ chit/identifier/.pic={
+ \chit@dbg{4}{ Chit identifier: `#1'}%
+ \node[chit/identifier,pic actions]{#1};
+ },
+ chit/small identifier/.pic={
+ \chit@dbg{4}{ Chit small identifier: `#1'}%
+ \node[chit/small identifier,pic actions]{#1};
+ },
+ chit/identifier macro/.pic={%
+ \chit@dbg{4}{ Chit identifier macro: \meaning#1}
+ \edef\chit@i@tmp{#1}
+ \node[chit/identifier,pic actions]{\chit@i@tmp};},
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{/tikz/chit/factor,
+% /tikz/chit/1 factor,
+% /tikz/chit/2 factors,
+% /tikz/chit/3 factors,
+% /tikz/chit/4 factors,
+% /tikz/chit/identifier,
+% /tikz/chit/small identifier}
+%
+% Styles used by the above pictures. Users can change these as they
+% see fit.
+%
+% \begin{macrocode}
+\tikzset{%
+ chit/factor/.style={
+ shape=rectangle,
+ font=\sffamily\bfseries\large,
+ anchor=base,
+ inner sep=0,
+ %text=pgfstrokecolor,
+ draw=none,
+ fill=none,
+ },
+ chit/1 factor/.style={},
+ chit/2 factors/.style={},
+ chit/3 factors/.style={},
+ chit/4 factors/.style={text/.append style=\small},
+ chit/identifier/.style={
+ shape=rectangle,
+ font=\sffamily\bfseries\scriptsize,
+ inner sep=0,
+ % text=pgfstrokecolor,
+ draw=none,
+ fill=none,
+ },
+ chit/small identifier/.style={
+ shape=rectangle,
+ font=\sffamily\bfseries\tiny,
+ inner sep=0,
+ % text=pgfstrokecolor,
+ draw=none,
+ fill=none,
+ },
+}
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</chit>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/chit/misc.dtx b/macros/latex/contrib/wargame/source/chit/misc.dtx
new file mode 100644
index 0000000000..6c406af3f8
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/chit/misc.dtx
@@ -0,0 +1,460 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*chit>
+% \fi
+% \subsubsection{Other pictures}
+% Pictures for frame, factors, left, right, and below.
+% \begin{macrocode}
+\tikzset{
+ pics/chit/shade/.style={
+ code={%
+ \path[fill=white,opacity=#1,pic actions] (-.6,-.6) rectangle(.6,.6);}},
+ pics/chit/eliminate/.style={
+ code={%
+ \path[fill=red,opacity=#1,pic actions] (-.6,-.6) rectangle(.6,.6);}},
+ pics/chit/shade/.default=0.5,
+ pics/chit/eliminate/.default=0.25,
+}
+\def\shadechit(#1){%
+ \pic at (#1) {chit/shade};}
+\def\eliminatechit(#1){%
+ \pic at (#1) {chit/eliminate};}
+% \end{macrocode}
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Stacking of chits}
+%
+% Stacking of chits. The key \spec{chit/stack direction} sets the
+% default direction to make the stack in.
+%
+% \begin{macrocode}
+% offset, location, direction, list
+\tikzset{%
+ chit/stack direction/.store in=\chit@stack@dir,
+ chit/stack direction/.initial={(.3,.3)},
+}
+% \end{macrocode}
+%
+% Now the code
+%
+% \begin{macrocode}
+\def\chit@stack@dir{(.3,.3)}
+\def\stackchits(#1){%
+ \@ifnextchar({\st@ckchits{#1}}{\st@ckchits{#1}(.3,.3)}%)
+}
+\def\st@ckchits#1(#2)#3{
+ \chit@dbg{2}{Stacking chits `#1', `#2', `#3'}
+ \edef\xy{#1}
+ \chit@dbg{4}{Stack start at \xy}
+ \foreach[count=\i from 0] \c/\o in {#3} {%
+ \ifx\c\empty\else%
+ \edef\ccc{\c}
+ \chit@dbg{2}{Adding \meaning\ccc\space to stack at (\xy)' `\o'}
+ \expandafter\ccc(\xy)
+ %%
+ \ifx\c\o\else
+ %\chit@dbg{0}{Option: \o}
+ \edef\ccc{\o}
+ \expandafter\ccc(\xy)
+ \fi
+ \expandafter\ccc(\xy)
+ \tikzmath{%
+ coordinate \cc;
+ \cc = (\xy) + (#2);}
+ \xdef\xy{\cc}
+ \fi
+ }
+}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Making order of battle charts}
+%
+%
+% Macros for making OOBs
+%
+% Style for turns
+%
+% \begin{macrocode}
+\tikzset{
+ chit/oob turn/.pic={\node[pic actions]{#1};}}
+% \end{macrocode}
+%
+%
+% current c, current r, n-columns, cell size, y
+%
+% \begin{macrocode}
+\def\chit@oob@cellupdate(#1,#2)#3#4#5{%
+ \edef\f{\ifwg@oob@inv-1\else1\fi}%
+ \chit@dbg{1}{ \space Cell update `c=|#1|' vs `#4'*(`#3'-1)}
+ \pgfmathparse{int(ifthenelse(abs(#1)>=#4*(#3-1),#5-1,#5))}%
+ \xdef#5{\pgfmathresult}
+ \pgfmathparse{ifthenelse(abs(#1)>=#4*(#3-1),#2-#4,#2)}%
+ \xdef#2{\pgfmathresult}%
+ \pgfmathparse{ifthenelse(abs(#1)>=#4*(#3-1),0,#1+\f*#4)}%
+ \xdef#1{\pgfmathresult}%
+ \chit@dbg{1}{ \space\space-> `\string#5'=#5 `\string#2'=#2 `\string#1'=#1}
+}
+% \end{macrocode}
+%
+% current c, current r, cell size, extra vertical spacing
+%
+% \begin{macrocode}
+\def\chit@oob@rowupdate(#1,#2)#3#4{%
+ \chit@dbg{2}{ Row update c=`#1',r=`#2',s=`#3',e=`#4'}
+ %\pgfmathparse{ifthenelse(#1>0,#2-#3,#2)}%
+ \pgfmathparse{#2-#3)}%
+ \xdef#2{\pgfmathresult}%
+ %\xdef#1{0}
+ \chit@dbg{2}{ \space\space-> update `\string#2'=#2}
+}
+% \end{macrocode}
+% current c, current r, cell size, extra spacing
+%
+% \begin{macrocode}
+\def\chit@oob@turnupdate(#1,#2)#3#4{%
+ \chit@dbg{2}{ Turn update c=`#1',r=`#2',s=`#3',e=`#4'}
+ % \pgfmathparse{#2-ifthenelse(#1>0,#3,0)-#4}%
+ \pgfmathparse{#2-#4-ifthenelse(abs(#1)>0.0001,#3,0)}
+ \xdef#2{\pgfmathresult}%
+ \xdef#1{0}%
+ \chit@dbg{2}{ \space\space-> update `\string#1'=#1,`\string#2'=#2}
+}
+% \end{macrocode}
+% chit list, n-colls, cell size, extra vertical spacing
+%
+% This expects a list of lists of chits, one list per turn; the
+% maximum number of columns; the size of cells, extra spacing between
+% turns.
+%
+% Note, the list of lists leaf elements should be styles for the
+% chits.
+%
+% This depends on the Tikz pic \texttt{chit/oob~turn} which takes the
+% number as argument.
+%
+%
+% \begin{macrocode}
+\newif\ifwg@oob@inv\wg@oob@invfalse
+\def\wg@star@oob{\wg@oob@invtrue\wg@oob}
+\def\wg@nostar@oob{\wg@oob@invfalse\wg@oob}
+\def\oob{%
+ \@ifstar{\wg@star@oob%
+ }{\wg@nostar@oob%
+ }%
+}
+\def\wg@oob#1#2#3#4{
+ \def\r{0}
+ \chit@dbg{1}{OOB: `#1'}
+ \foreach[count=\ti from 0] \t/\y in #1{
+ \xdef\o{\r}
+ \def\c{0}
+ \ifx\t\y\def\y{0}\fi
+ \chit@dbg{1}{Turn \ti\space(\r,\t,y=\y):'}
+ \ifwg@oob@inv%
+ \pic at ( .5,\r) {chit/oob turn=\ti};%
+ \else
+ \pic at (-.5,\r) {chit/oob turn=\ti};%
+ \fi%
+ \ifx\t\empty\else%
+ \foreach \u/\m in \t{
+ %% \chit@dbg{2}{ `\u'=`\m'}
+ \ifx\u\empty\else
+ \ifx\m\@empty\def\m{1}\fi
+ \ifx\u\m\def\m{1}\fi
+ \foreach \n in {1,...,\m}{%
+ \ifx\u\chit@blank\else
+ \chit[\u=\ti,zone point={\u}{\c}{\r}](\c,\r)
+ \fi
+ \chit@oob@cellupdate(\c,\r){#2}{#3}{\y}
+ }
+ \fi
+ }
+ \fi
+ \chit@dbg{1}{ End of chits in turn
+ \ti\space(c=`\c',r=`\r',o='\o',y='\y')}
+ % IF no units where given, then we force \c to be non-zero so that
+ % \chit@oob@turnupdate increments the row
+ \ifx\t\@empty
+ \def\c{#3}
+ \chit@dbg{2}{ Turn is empty, set c=`\c'}
+ \fi
+ %\ifnum\y<0% No explicit number of rows given
+ % \def\c{#3}
+ % \chit@dbg{2}{ No explicit number of rows given, set c=`\c'}
+ %\fi
+ % In case the user gave and explicit number of rows, add the rows
+ % that are missing. \y is initially set to the number of
+ % requested rows, and then decremented every time we go down one
+ % row. So if the number of rows we did so far is N, and the
+ % requested number of rows is M, then the loop below adds M-N
+ % rows.
+ \ifnum\y>0%
+ \chit@dbg{2}{ Looping rows from 2 to \y, break when row > \y}%
+ \foreach \rr in {2,...,\y}{
+ %\ifnum\rr>\y% A little funny, but \y can be negative!
+ % \chit@dbg{2}{ \space Breaking loop \rr\space > \y}%
+ % \breakforeach%
+ %\else%
+ \chit@oob@rowupdate(\c,\r){#3}{#4}
+ %\fi
+ }
+ \fi
+ % This will zero \c. However, if on entry |\c|>0, then we also
+ % increment the row
+ \chit@oob@turnupdate(\c,\r){#3}{#4}
+ \chit@dbg{1}{End of turn \ti\space(c=`\c',r=`\r',o='\o',y='\y')}
+ }
+ \chit@dbg{2}{End of OOB (c=`\c',r=`\r',y=`\y')}
+}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Table of chits}
+%
+% \begin{macrocode}
+\tikzset{
+ chit/cell background/.style={fill=black},
+ blank chit/.style={/chit/frame={draw=none,fill=none}},
+}
+% \end{macrocode}
+%
+% These macros are used when we set tables of chits. This allows us
+% to define blank spaces in the table by giving the element
+% \texttt{blank~chit}.
+%
+% \begin{macrocode}
+\def\chit@blank{blank chit}
+\def\chit@cellbg(#1,#2)#3{%
+ \draw[chit/cell background](#1-#3/2,#2-#3/2) rectangle++(#3,#3);
+}
+% \end{macrocode}
+%
+% \begin{Macro}{\ifchits@reset}
+%
+% This `if' controls whether to reset the coordinates to the origin
+% when \cs{chits} is called. If true, then reset for a new table.
+%
+% \begin{macrocode}
+\newif\ifchits@reset\chits@resettrue
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\chits,\@chits,\chit@sng@cellupdate}
+% \begin{macrocode}
+\def\chit@sng@cellupdate(#1,#2)#3#4{%
+ \chit@dbg{2}{Current `#1' vs `#4'*(`#3'+1)}
+ \pgfmathparse{ifthenelse(#1>=#4*(#3-1),#2-#4,#2)}%
+ \xdef#2{\pgfmathresult}%
+ \pgfmathparse{ifthenelse(#1>=#4*(#3-1),0,#1+#4)}%
+ \xdef#1{\pgfmathresult}%
+}
+% \end{macrocode}
+%
+% The stared version (\cs{chits*}) of this macro continues the
+% previously set chit table.
+%
+% \begin{macrocode}
+\def\chits{%
+ \@ifstar{\chits@resetfalse\@chits}{\chits@resettrue\@chits}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@chits#1#2#3{
+ \ifchits@reset
+ \def\r{0}%
+ \def\c{0}%
+ \fi
+ \chit@dbg{1}{Chits to make: #1}%
+ \foreach[count=\ti from 0] \t/\x in #1{%
+ \chit@dbg{2}{Turn `\t' with option `\x'}
+ \ifx\t\empty\else%
+ \foreach \u/\m in \t{%
+ \ifx\u\empty\else%
+ \chit@dbg{2}{Next chit `\u' with possible multiplicity `\m'}%
+ \ifx\m\@empty\def\m{1}\fi%
+ \ifx\u\m\def\m{1}\fi%
+ \chit@dbg{2}{Next chit `\u' multiplicity `\m'}%
+ \foreach \n in {1,...,\m}{%
+ \ifx\u\chit@blank%
+ \chit@dbg{3}{Ignoring blank chit:\u}%
+ \else%
+ \chit@cellbg(\c,\r){#3}%
+ \chit[\u=\ti](\c,\r)%
+ \chit@sng@cellupdate(\c,\r){#2}{#3}%
+ \fi%
+ }%
+ \fi%
+ }%
+ \fi%
+ }%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\doublechits,
+% \@doublechits,
+% \chit@dbl@cellupdate,
+% \chit@dbl@flip}
+% \begin{enumerate}
+% \item coordinates
+% \item coordinates
+% \item cell-size
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\chit@dbl@flip(#1,#2)#3{%
+ \pgfmathparse{-#1}%
+ \xdef\mc{\pgfmathresult}%
+}
+% \end{macrocode}
+%
+% \begin{enumerate}
+% \item coordinates
+% \item coordinates
+% \item Number of columns
+% \item cell-size
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\chit@dbl@cellupdate(#1,#2)#3#4{%
+ \pgfmathparse{ifthenelse(#1<-#4/2,#2,#4+#2)}%
+ \xdef#2{\pgfmathresult}%
+ \pgfmathparse{ifthenelse(#1<-#4/2,#4+#1,-(#3-.5)*#4)}%
+ \xdef#1{\pgfmathresult}%
+}
+% \end{macrocode}
+%
+% \begin{enumerate}
+% \item List of list of keys
+% \item Number of columns
+% \item size of each cell
+% \end{enumerate}
+%
+% The stared version (\cs{doublechits*}) of this macro continues the
+% previously set chit table.
+%
+% \begin{macrocode}
+\def\doublechits{%
+ \@ifstar{\chits@resetfalse\@doublechits}{\chits@resettrue\@doublechits}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@doublechits#1#2#3{%
+ \chit@dbg{1}{Setting double-sided chits: #1}
+ \ifchits@reset
+ \pgfmathparse{-(#2-.5)*#3}
+ \xdef\c{\pgfmathresult}
+ \def\r{0}
+ \fi
+
+ \foreach[count=\ti from 0] \t/\x in #1{
+ \ifx\t\empty\else%
+ \foreach \u/\m in \t{
+ \ifx\u\empty\else
+ \ifx\m\@empty\def\m{1}\else%
+ \ifx\u\m\def\m{1}\fi\fi
+ \chit@dbg{2}{`\u'=`\m' (\c,\r)}
+ \foreach \n in {1,...,\m}{%
+ \ifx\u\chit@blank
+ \chit@dbg{3}{Ignoring blank chit:\u}
+ \else
+ \chit@cellbg(\c,\r){#3}
+ \chit[\u=\ti](\c,\r)
+ \chit@dbl@flip(\c,\r){#3}
+ \chit@cellbg(\mc,\r){#3}
+ \chit[\u\space flipped=\ti,zone turn=\t,zone mult=\n](\mc,\r)
+ \chit@dbl@cellupdate(\c,\r){#2}{#3}
+ \fi
+ }
+ \fi
+ }
+ \fi
+ }
+ \draw[dashed](0,-3*#3/4)--(0,\r-#3/4);
+ \draw[dashed,<-] (#3/5,-2*#3/3)--(#3/2,-2*#3/3) node[anchor=west]{Back};
+ \draw[dashed,<-] (-#3/5,-2*#3/3)--(-#3/2,-2*#3/3) node[anchor=east]{Front};
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Some utilities}
+%
+%
+% Game turn marker
+%
+% \begin{macrocode}
+\tikzset{
+ number chit/.pic={
+ \node[shape=rectangle,font=\sffamily\bfseries\LARGE]{%
+ \begin{tabular}{c} #1\end{tabular}};},
+ game turn/.pic={
+ \node[shape=rectangle,font=\sffamily\bfseries]{%
+ \begin{tabular}{c} Game\\Turn\end{tabular}};},
+ game turn/.style={
+ /chit/full={game turn},
+ color=black,
+ fill=white},
+ game turn flipped/.style={game turn},
+ dummy chit/.style={fill=white},
+}
+% \end{macrocode}
+%
+% Marks of chits
+%
+% \begin{macrocode}
+\providecommand\chitmark[2][]{\tikz[scale=.25,#1]{\chit[#2]}}
+% \end{macrocode}
+%
+% Stacking mark
+%
+% \begin{macrocode}
+\tikzset{
+ wg stacking/.style={fill=white,
+ /chit/symbol={[faction=friendly,command=land]}},
+}
+\DeclareRobustCommand\stackmark[1][]{%
+ \tikz[baseline=(current bounding box.center),scale=.3,#1]{
+ \stackchits(0,0)(.3,-.3){%
+ \noexpand\chit[wg stacking],
+ \noexpand\chit[wg stacking],
+ \noexpand\chit[wg stacking]}}}
+% \end{macrocode}
+%
+% ZOC mark
+%
+% \begin{macrocode}
+\DeclareRobustCommand\zocmark[1][]{%
+ \tikz[baseline=(current bounding box.center),scale=.1,#1]{%
+ \begin{scope}[hex/first row and column are=0,
+ hex/row direction is=normal,
+ hex/column direction is=normal,
+ hex/short columns=none]
+ \hex[label=,fill=gray](c=1,r=1)%
+ \hex[label=,fill=white](c=1,r=2)%
+ \hex[label=,fill=white](c=1,r=0)%
+ \hex[label=,fill=white](c=0,r=0)%
+ \hex[label=,fill=white](c=0,r=1)%
+ \hex[label=,fill=white](c=2,r=1)%
+ \hex[label=,fill=white](c=2,r=0)
+ \end{scope}}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tikzset{
+ zone point/.code n args={3}{}}
+% \end{macrocode}
+%
+% \iffalse
+%</chit>
+% \fi
diff --git a/macros/latex/contrib/wargame/source/chit/shape.dtx b/macros/latex/contrib/wargame/source/chit/shape.dtx
new file mode 100644
index 0000000000..8ad0614cb8
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/chit/shape.dtx
@@ -0,0 +1,544 @@
+% \iffalse
+% --------------------------------------------------------------------
+% <*chit>
+% \fi
+%
+% \subsubsection{The \texttt{chit} key namespace}
+% \begin{TikzKey}{/chit/full,
+% /chit/symbol,
+% /chit/left,
+% /chit/right,
+% /chit/upper left,
+% /chit/upper right,
+% /chit/lower left,
+% /chit/lower right,
+% /chit/factors,
+% /chit/setup,
+% /chit/id}
+%
+% The parts of a chit
+%
+% \begin{macrocode}
+\tikzset{%
+ /chit/.search also={/tikz},
+ /chit/.cd,
+ full/.store in=\chit@full, full/.initial=,%
+ symbol/.store in=\chit@symbol, symbol/.initial=,%
+ left/.store in=\chit@left, left/.initial=,%
+ unique/.style={/chit/left={#1}},%
+ right/.store in=\chit@right, right/.initial=,%
+ parent/.style={/chit/right={#1}},%
+ upper left/.store in=\chit@upper@left, upper left/.initial=,%
+ upper right/.store in=\chit@upper@right, upper right/.initial=,%
+ lower left/.store in=\chit@lower@left, lower left/.initial=,%
+ lower right/.store in=\chit@lower@right, lower right/.initial=,%
+ factors/.store in=\chit@factors, factors/.initial=,%
+ setup/.store in=\chit@setup, setup/.initial=,%
+ id/.store in=\chit@id, id/.initial=,%
+ frame/.store in=\chit@frame, frame/.initial=,%
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{/tikz/chit/full,
+% /tikz/chit/symbol,
+% /tikz/chit/left,
+% /tikz/chit/right,
+% /tikz/chit/upper left,
+% /tikz/chit/upper right,
+% /tikz/chit/lower left,
+% /tikz/chit/lower right,
+% /tikz/chit/factors,
+% /tikz/chit/setup,
+% /tikz/chit/id}
+%
+% Styles of each element in a chit. Users may override these at their
+% own peril. That is, it is OK to override them, but the user should
+% be careful.
+%
+% \begin{macrocode}
+\tikzset{
+ chit/symbol/.style={scale=.4,transform shape},
+ chit/parts/.style={shape=rectangle,transform shape},
+ chit/factors/.style={chit/parts,anchor=south},
+ chit/left/.style={chit/parts,anchor=south,rotate=90},
+ chit/right/.style={chit/parts,anchor=north,rotate=90},
+ chit/upper left/.style={chit/parts,anchor=north west},
+ chit/upper right/.style={chit/parts,anchor=north east},
+ chit/lower left/.style={chit/parts,anchor=south west},
+ chit/lower right/.style={chit/parts,anchor=south east},
+ chit/setup/.style={chit/parts},
+ chit/full/.style={chit/parts},
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{The \texttt{chit} styles}
+%
+% \begin{TikzKey}{/tikz/chit}
+% This key sets up a node to make a chit. The key takes a single
+% argument which in turn must contain key--value pairs in the
+% \texttt{/chit} (or \texttt{/tikz}) namespace(s). We set the
+% \texttt{shape} parameter of the node, and calls the passed keys in
+% the \texttt{/chit} namespace to set-up elements of the chit.
+%
+% \begin{macrocode}
+\tikzset{%
+ chit/.code={%
+ \pgfkeys{/tikz/transform shape,/tikz/shape=chit}
+ \pgfkeys{/chit/.cd,#1}}}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% We define a counter to set-up unique names for chit nodes.
+%
+% \begin{macrocode}
+\newcounter{chit@id}\setcounter{chit@id}{0}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{The \cs{chit} shape}
+%
+% \begin{Macro}{\chit@n@to,\@chit@n@to,\@@chit@n@to,\@chit@n@to@}
+%
+% These macros puts the NATO App6(c) symbol into a chit. The first
+% macro takes the identifier and position of the symbol, and then
+% scans for options. If no options are given, then we go directly
+% to the rendering (\cs{@chit@n@to@}). Otherwise, we may also need
+% to scan for an offset given as \parg{delta-x,delta-y}.
+%
+% \begin{macrocode}
+\def\chit@n@to#1#2{%
+ %% Without a following start square bracket '[' by-pass to final
+ \chit@dbg{4}{Chit NATO App6(c) first step `#1' `#2'}
+ \@ifnextchar[{%
+ %\message{^^JStart square bracket}%
+ \@chit@n@to{#1}{#2}}{%
+ %\message{^^JNo start square bracket}%
+ \@chit@n@to@{#1}{#2}}%]]
+}
+% \end{macrocode}
+%
+% The following macro is called if we had no options.
+%
+% \begin{macrocode}
+\def\@chit@n@to@#1#2#3\@end@chit@n@to{%
+ \chit@dbg{4}{Chit NATO App6(c) w/o offset:
+ ^^J Options: #3
+ ^^J ID: #1
+ ^^J Position: #2}
+ \node[chit/symbol,natoapp6c={#3,id=#1}] (#1) at (#2) {};
+ \chit@dbg{4}{Chit NATO App6(c) ended}%
+}
+% \end{macrocode}
+%
+% This is called if we had an option-like argument. Check if we have
+% an offset
+%
+% \begin{macrocode}
+\def\@chit@n@to#1#2[#3]{%
+ \chit@dbg{4}{Chit NATO App6(c) second step `#1' `#2' `#3'}
+ \@ifnextchar({\@@chit@n@to{#1}{#2}{#3}}{\@@chit@n@to{#1}{#2}{#3}(0,0)}%)
+}
+% \end{macrocode}
+%
+% This called if we had option-like argument.
+%
+% \begin{macrocode}
+\def\@@chit@n@to#1#2#3(#4)\@end@chit@n@to{%
+ \chit@dbg{4}{Chit NATO App6(c) w/offset:
+ ^^J Options: #3
+ ^^J ID: #1
+ ^^J Position: #2
+ ^^J Offset: #4}
+ \node[chit/symbol,natoapp6c={#3,id=#1}] (#1) at ($(#2)+(#4)$) {};}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\chit@tr@ns@nchor,\chit@nchor}
+%
+% Get anchor of sub-symbol element in chit. We need to do this,
+% because the symbol is translated and scaled.
+%
+% \begin{macrocode}
+\def\chit@tr@ns@nchor#1{%
+ \pgf@x=0.4\pgf@x%
+ \pgf@y=0.4\pgf@y\advance\pgf@y#1}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\chit@nchor#1#2#3{%
+ \wg@sub@nchor{#1}{#2}
+ \chit@tr@ns@nchor{#3}}
+\def\chit@report{}
+\tikzset{
+ zone turn/.style={},
+ zone mult/.style={}
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% Now follows the actual \text{chit} shape. This is rather long, so
+% we will break it up a bit
+%
+%
+% The first thing is we declare some saved anchors. These are
+% computed (and defined as internal macros) when the shape is
+% instantised. The anchors give the centre and north east corner of
+% the node, the place to put the NATO App6(c) symbol and factors. We
+% also set a dimension for the margins (corner and factors elements).
+%
+% \begin{macrocode}
+\pgfdeclareshape{chit}{
+ \savedanchor\center{\pgf@x=0cm\pgf@y=0cm}
+ \savedanchor\northeast{\pgf@x=0.6cm\pgf@y=0.6cm}
+ \savedanchor\symbol{\pgf@x=0cm\pgf@y=0.2cm}
+ \savedanchor\factors{\pgf@x=0cm\pgf@y=-0.5cm}
+ \saveddimen\margin{\pgf@x=0.04cm}
+% \end{macrocode}
+%
+% Next, we define some saved macros. These are called (and declares
+% internal macros) when the shape is instantised. We define macros
+% for the identifier,
+%
+%
+% \begin{macrocode}
+ \savedmacro\id{%
+ \chit@dbg{4}{Chit ID: \meaning\chit@id}%
+ \@ifundefined{chit@id}{\let\chit@id\pgfutil@empty}{}%
+ \ifx\chit@id\pgfutil@empty%
+ \wg@r@ndom@id%
+ \edef\id{chit\wg@uuid}%
+ \else%
+ \edef\id{\chit@id}%
+ \fi%
+ \chit@dbg{4}{Chit ID stored: \meaning\chit@id}
+ }
+ \savedmacro\chitframeopt{%
+ \let\chitframeopt\pgfutil@empty%
+ \@ifundefined{chit@frame}{}{%
+ \edef\chitframeopt{\chit@frame}}
+ \n@to@pp@dbg{3}{Chit Frame options: \meaning\chitframeopt}%
+ }
+% \end{macrocode}
+%
+% We define the regular anchors of the shape. That is, the centre,
+% corners, and edges.
+%
+% \begin{macrocode}
+ \anchor{center}{\center}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{north} {\northeast\pgf@x=0cm}
+ \anchor{south} {\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{east} {\northeast\pgf@y=0cm}
+ \anchor{west} {\northeast\pgf@x=-\pgf@x\pgf@y=0cm}
+% \end{macrocode}
+%
+% Next, we want to be able to reference the symbol anchors too. So we
+% define these anchors from the embedded node anchors. Note, these
+% anchors will not exist if the chit is made with
+% \texttt{full=}\meta{args}.
+%
+% \begin{macrocode}
+ \anchor{symbol north east}{\chit@nchor{M\id symbol}{north east}{0.2cm}}
+ \anchor{symbol north west}{\chit@nchor{M\id symbol}{north west}{0.2cm}}
+ \anchor{symbol south east}{\chit@nchor{M\id symbol}{south east}{0.2cm}}
+ \anchor{symbol south west}{\chit@nchor{M\id symbol}{south west}{0.2cm}}
+ \anchor{symbol north} {\chit@nchor{M\id symbol}{north}{0.2cm}}
+ \anchor{symbol west} {\chit@nchor{M\id symbol}{west}{0.2cm}}
+ \anchor{symbol south} {\chit@nchor{M\id symbol}{south}{0.2cm}}
+ \anchor{symbol east} {\chit@nchor{M\id symbol}{east}{0.2cm}}
+ \anchor{symbol upper} {\chit@nchor{M\id symbol}{upper}{0.2cm}}
+ \anchor{symbol lower} {\chit@nchor{M\id symbol}{lower}{0.2cm}}
+ \anchor{symbol left} {\chit@nchor{M\id symbol}{left}{0.2cm}}
+ \anchor{symbol right} {\chit@nchor{M\id symbol}{right}{0.2cm}}
+ \anchor{symbol echelon} {\chit@nchor{M\id symbol}{north}{0.2cm}}
+ \anchor{symbol below} {\chit@nchor{M\id symbol}{south}{0.1cm}}
+% \end{macrocode}
+%
+% Some anchors to sub-elements. Some of them only exists if we have
+% NATO App6(c) symbol in the chit.
+%
+% \begin{macrocode}
+ \anchor{symbol} {\symbol}
+ \anchor{factors} {\factors}
+ \anchor{left} {\chit@nchor{M\id symbol}{west}{.2cm}\advance\pgf@x-\margin}
+ \anchor{right}{\chit@nchor{M\id symbol}{east}{.2cm}\advance\pgf@x+\margin}
+ \anchor{upper right} {%
+ \northeast \advance\pgf@x-\margin \advance\pgf@y-\margin%
+ }
+ \anchor{upper left}{
+ \northeast \advance\pgf@x-\margin \advance\pgf@y-\margin \pgf@x=-\pgf@x%
+ }
+ \anchor{lower right} {%
+ \northeast \advance\pgf@x-\margin \advance\pgf@y-\margin \pgf@y=-\pgf@y%
+ }
+ \anchor{lower left}{
+ \northeast \advance\pgf@x-\margin \advance\pgf@y-\margin%
+ \pgf@x=-\pgf@x \pgf@y=-\pgf@y%
+ }
+% \end{macrocode}
+%
+% Now for the actual path. For the background path, we simply specify
+% the frame. This is so that this will get drawn (and possibly
+% filled) using the appropriate options.
+%
+% \begin{macrocode}
+ \backgroundpath{%
+ %% This is the outline of the chit only. The rest of the chit is
+ %% made on the foreground "path".
+ \northeast%
+ \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpa=-\wg@tmpa \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpb=-\wg@tmpb \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpa=-\wg@tmpa \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \pgfclosepath
+ }
+% \end{macrocode}
+%
+% Finally, we make the foreground rendered path. This is where we do
+% the most stuff. We do it in the \emph{behind} foreground path so
+% that we can ensure things are drawn the way we want it.
+%
+% The first thing is to set-up the clipping to the chit frame.
+%
+% \begin{macrocode}
+ \behindforegroundpath{%
+ \chit@dbg{4}{%
+ Chit foreground: \meaning\id
+ ^^J ID (set): \meaning\chit@id
+ ^^J Symbol: \meaning\chit@symbol
+ ^^J Full: \meaning\chit@full
+ ^^J Factors: \meaning\chit@factors
+ ^^J Left: \meaning\chit@left
+ ^^J Right: \meaning\chit@right
+ ^^J Upper left: \meaning\chit@upper@left
+ ^^J Lower left: \meaning\chit@lower@left
+ ^^J Upper right: \meaning\chit@upper@right
+ ^^J Lower right: \meaning\chit@lower@right}
+ \chit@report{}
+ \pgfscope
+ %
+ \northeast%
+ \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpa=-\wg@tmpa \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpb=-\wg@tmpb \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpa=-\wg@tmpa \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{clip}
+% \end{macrocode}
+%
+% If we do not have the \texttt{symbol} key set, then we set the
+% \texttt{full} key as a picture.
+%
+% \begin{macrocode}
+ \@ifundefined{chit@symbol}{%
+ %% Draw full stuff
+ \@ifundefined{chit@full}{}{%
+ \center\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \wg@pic@all{\chit@full}{}{\the\wg@tmpa,\the\wg@tmpb}{chit/full}}%
+ }{%
+% \end{macrocode}
+%
+% Otherwise, we put in a node with shape \texttt{natoapp6c} and pass
+% the \texttt{symbol} key--value pairs as options.
+%
+% \begin{macrocode}
+ \edef\symid{\id symbol}%
+ \symbol%
+ \edef\args{{\symid}{\the\pgf@x,\the\pgf@y}\chit@symbol}%
+ \chit@dbg{6}{Arguments to chit NATO symbol: \meaning\args}%
+ \expandafter\chit@n@to\args\@end@chit@n@to%
+ \chit@dbg{6}{After making NATO symbol in chit}%
+% \end{macrocode}
+%
+% Having made the NATO App6(c) symbol, which we gave the node name
+% \meta{id}\texttt{symbol} where \meta{id} is the ID of this chit, we
+% can make the rest of the chit elements. These are the left and
+% right elements, which are set west and east of the symbol,
+% respectively; the factors; and the four corner elements.
+%
+% If the respective elements have not been specified, we do not make
+% them.
+%
+% First the left and right elements. Note that these uses the anchors
+% of the embedded \texttt{natoapp6c} node for placement.
+%
+% \begin{macrocode}
+ % Put in left of symbol
+ \@ifundefined{chit@left}{}{%
+ \begin{scope}[]
+ \pgfpointanchor{\symid}{west}%
+ \wg@tmpa=\pgf@x\advance\wg@tmpa-\margin%
+ \wg@tmpb=\pgf@y%
+ \wg@pic@all{\chit@left}{}{\the\wg@tmpa,\the\wg@tmpb}{chit/left}%
+ \end{scope}}%
+ % Put in right of symbol
+ \@ifundefined{chit@right}{}{%
+ \begin{scope}[]
+ \pgfpointanchor{\symid}{east}%
+ \wg@tmpa=\pgf@x\advance\wg@tmpa+\margin%
+ \wg@tmpb=\pgf@y%
+ \wg@pic@all{\chit@right}{}{\the\wg@tmpa,\the\wg@tmpb}{chit/right}%
+ \end{scope}}%
+% \end{macrocode}
+%
+% Next, we want to put in the corner elements. But before we do
+% that, we use our saved anchors and dimensions to calculate the
+% coordinates. Note that the corner elements are anchored to the
+% corners (plus margin) of the chit frame.
+%
+% \begin{macrocode}
+ % Get coordinates
+ \northeast%
+ \wg@tmpa=\pgf@x%
+ \wg@tmpb=\pgf@y%
+ \advance\wg@tmpa-\margin%
+ \advance\wg@tmpb-\margin%
+% \end{macrocode}
+%
+% With the coordinates extracted, we set the four corner
+% elements. Note, for the anchoring to work, we should specify
+% pictures that have anchors (e.g., nodes). If not, we must take care
+% to give offsets or the like.
+%
+% \begin{macrocode}
+ % Put in upper left corner
+ \@ifundefined{chit@upper@left}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\chit@upper@left}{}{-\the\wg@tmpa,\the\wg@tmpb}{%
+ chit/upper left}%
+ \end{scope}}
+ % Put in upper right corner
+ \@ifundefined{chit@upper@right}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\chit@upper@right}{}{\the\wg@tmpa,\the\wg@tmpb}{%
+ chit/upper right}%
+ \end{scope}}
+ % Put in lower left corner
+ \@ifundefined{chit@lower@left}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\chit@lower@left}{}{-\the\wg@tmpa,-\the\wg@tmpb}{%
+ chit/lower left}%
+ \end{scope}}
+ % Put in lower right corner
+ \@ifundefined{chit@lower@right}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\chit@lower@right}{}{\the\wg@tmpa,-\the\wg@tmpb}{%
+ chit/lower right}%
+ \end{scope}}
+% \end{macrocode}
+%
+% Finally, we put in the unit factors. They are put at the bottom of
+% the chit frame (plus margin) and are typically anchored to the south
+% anchor of the element. Note, we can put in several factors if need
+% be.
+%
+% \begin{macrocode}
+ % Put in factors
+ \@ifundefined{chit@factors}{}{%
+ \advance\wg@tmpb-\margin%
+ \begin{scope}[]
+ \wg@pic@all{\chit@factors}{}{0,-\the\wg@tmpb}{chit/factors}%
+ \end{scope}}%
+ }%
+ \endpgfscope%
+ % Draw frame?
+ \edef\tmp@opt{[\chitframeopt]}
+ \expandafter\scope\tmp@opt
+ \northeast%
+ \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpa=-\wg@tmpa \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpb=-\wg@tmpb \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpa=-\wg@tmpa \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{stroke}
+ \endscope
+ }
+}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{The \cs{chit} wrapper macro}
+%
+% \begin{Macro}{\chit,\chit@,\chit@@}
+%
+% The macro to make the chits. This is a wrapper around a
+% \texttt{node} with shape \texttt{chit}. The syntax of this macro
+% is
+%
+% \begin{Syntax}
+% \cs{chit}\oarg{chit options}\parg{position}\parg{identifier};
+% \end{Syntax}
+%
+% Note that the trailing semi-colon is optional. Here \meta{chit
+% options} are any key-value pairs in the \texttt{/chit} (and
+% \texttt{/tikz}) namespace.
+%
+% The first macro parses for options.
+%
+% \begin{macrocode}
+\def\chit{%
+ \chit@dbg{5}{Chit}
+ \@ifnextchar[{\chit@}{\chit@[]}%]
+}
+% \end{macrocode}
+%
+% Parse for coordinates.
+%
+% \begin{macrocode}
+\def\chit@[#1]{%
+ \chit@dbg{5}{Chit second: `#1'}
+ \@ifnextchar({\chit@@{#1}}{\chit@@{#1}(0,0)}%)
+}
+% \end{macrocode}
+%
+% Parse for name.
+%
+% \begin{macrocode}
+\def\chit@@#1(#2){%
+ \@ifnextchar({\chit@@@{#1}{#2}}{\chit@@@{#1}{#2}()}%)
+}
+% \end{macrocode}
+%
+% The work horse. This simply makes a \cs{node} with the shape
+% \texttt{chit}. Note, we allow for a trailing semi-colon
+% (\texttt{;}) to have a similar feel to other \TikZ{} macros.
+%
+% \begin{macrocode}
+\def\chit@@@#1#2(#3){%
+ \chit@dbg{5}{Chit final:
+ ^^J Options: #1
+ ^^J Position: #2
+ ^^J Name: `#3'}
+ \let\name\pgfutil@empty%
+ \chit@dbg{1}{=== Before chit node}%
+ \node[draw,chit={every chit/.try,id=#3,#1}] (tmp) at (#2) {};
+ \chit@dbg{2}{=== After chit node}%
+ \ifx|#3|\relax%
+ \else%
+ \chit@dbg{3}{=== Renaming chit to user defined name `#3'}%
+ \pgfnoderename{#3}{tmp}%
+ \fi%
+ \@ifnextchar;{\@gobble}{}%
+}
+% \end{macrocode}
+% \end{Macro}
+% \iffalse
+% </chit>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/board.dtx b/macros/latex/contrib/wargame/source/hex/board.dtx
new file mode 100644
index 0000000000..fd0af295fb
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/board.dtx
@@ -0,0 +1,253 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Board clipping and frame}
+%
+% \begin{Macro}{\boardframe}
+%
+% Define the bounding box around the board
+%
+% \begin{Syntax}
+% \cs{boardframe}\oarg{margin}\parg{lower=left}\parg{upper-right}\marg{margin}
+% \end{Syntax}
+%
+% where \meta{lower-left} and \meta{upper-right} specifies the lower
+% left and upper right hexes (inclusive) of the board.
+%
+%
+% \begin{macrocode}
+\tikzset{
+ hex/board frame/.style={draw}
+}
+\def\boardframe{%
+ \@ifnextchar[{\bo@rdframe}{\bo@rdframe[0]}%}
+}
+\def\bo@rdframe[#1](#2)(#3){%
+ \hex@coords@conv{#2}
+ \edef\llx{\hex@x}
+ \edef\lly{\hex@y}
+ \edef\llc{\hex@col}
+ \edef\llr{\hex@row}
+ \edef\ellc{\hex@eff@col}
+ \edef\ellr{\hex@eff@row}
+ %
+ \hex@coords@conv{#3}
+ \edef\urx{\hex@x}
+ \edef\ury{\hex@y}
+ \edef\urc{\hex@col}
+ \edef\urr{\hex@row}
+ \edef\eurc{\hex@eff@col}
+ \edef\eurr{\hex@eff@row}
+ %
+ \def\margin{#1}
+ %
+ \hex@dbg{2}{%
+ Board Hex range: (\llc,\llr)x(\urc,\urr)
+ ^^JEffective range: (\ellc,\ellr)x(\eurc,\eurr)
+ ^^JBB: (\llx,\lly)x(\urx,\ury)}%
+ \ifnum\hexdbglvl>1
+ %\draw[red,very thick](hex cs:c=\llc,r=\llr) rectangle(hex cs:c=\urc,r=\urr);
+ \draw[red,ultra thick,dashed](\llx,\lly) rectangle(\urx,\ury);
+ \draw[->,very thick,blue] (0,0) -- (0,1) (0,0) -- (1,0);
+ \fi
+ % Calculate how many half hex hides to add to the "bottom"
+ %
+ \def\oddeven{isodd}
+ \ifnum\hex@coords@row@fac<0\def\oddeven{iseven}\fi%
+ \pgfmathparse{
+ ifthenelse(\hex@got@bot@short(\ellc),
+ ifthenelse(\hex@bot@short@col(\llc)*not(\oddeven(\ellc)),2,
+ ifthenelse(\hex@bot@short@col(\llc),0,1)),
+ ifthenelse(\oddeven(\ellc),1,2))}
+ \edef\olly{\pgfmathresult}%
+ \hex@dbg{2}{Delta lly: \olly half heights}
+ % Calculate how many half hex heights to add to the "top"
+ \def\oddeven{iseven}
+ \ifnum\hex@coords@row@fac<0\def\oddeven{isodd}\fi%
+ %
+ \pgfmathparse{
+ ifthenelse(\hex@got@top@short(\urc),
+ ifthenelse(\hex@top@short@col(\urc)*\oddeven(\eurc),0,
+ ifthenelse(\hex@top@short@col(\urc),2,1)),
+ ifthenelse(\oddeven(\eurc),1,2))}
+ \edef\oury{\pgfmathresult}%
+ \hex@dbg{2}{Delta ury: \oury half heights}
+ % Calculate new LLY and URY
+ \pgfmathparse{\lly-\hex@coords@row@fac*(\olly*\hex@yy+\margin)}
+ \edef\lly{\pgfmathresult}
+ \pgfmathparse{\ury+\hex@coords@row@fac*(\oury*\hex@yy+\margin)}
+ \edef\ury{\pgfmathresult}
+ % Calculate new LLX and URX
+ \pgfmathparse{\llx-1-\margin}\edef\llx{\pgfmathresult}
+ \pgfmathparse{\urx+1+\margin}\edef\urx{\pgfmathresult}
+ % Calculate width and height
+ \pgfmathparse{\urx-\llx}\edef\w{\pgfmathresult}
+ \pgfmathparse{\ury-\lly}\edef\h{\pgfmathresult}
+ \hex@dbg{0}{Board Frame: (\llx,\lly)x(\urx,\ury) (\w x\h) (\llc,\llr)x(\urc,\urr)}
+ \draw[hex/board frame/.try](\llx,\lly) rectangle(\urx,\ury);
+ \xdef\boardXmin{\llx}%
+ \xdef\boardYmin{\lly}%
+ \xdef\boardXmax{\urx}%
+ \xdef\boardYmax{\ury}%
+}
+
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\boardclip}
+%
+% Clip the board to not show incomplete hexes
+%
+% \begin{Syntax}
+% \cs{boardclip}\marg{nx}\marg{ny}\marg{preaction}
+% \end{Syntax}
+% \begin{macrocode}
+\def\boardpath(#1)(#2){%
+ \hex@coords@reset%
+ \tikzset{/hex/coords/.cd, #1}
+ \edef\llx{\hex@col}
+ \edef\lly{\hex@row}
+ %%
+ \hex@coords@reset%
+ \tikzset{/hex/coords/.cd, #2}
+ \edef\urx{\hex@col}
+ \edef\ury{\hex@row}
+ \let\board@odd\@undefined%
+ \hex@dbg{1}{Board BB in hex: (\llx,\lly)x(\urx,\ury)}
+ %%
+ \def\fv{south}
+ \def\sv{north}
+ \ifnum\hex@coords@row@fac<0
+ \def\fv{north}
+ \def\sv{south}
+ \fi
+
+ \edef\hex@board@path{(hex cs:c=\llx,r=\lly,v=\fv\space west)}
+ %% First the left side
+ \foreach \r in {\lly,...,\ury} {%
+ \edef\t{
+ --(hex cs:c=\llx,r=\r,v=west)
+ --(hex cs:c=\llx,r=\r,v=\sv\space west)}
+ \wg@addto@macro{\hex@board@path}{\t}}
+ %% Then for top of board
+ \foreach \c in {\llx,...,\urx} {%
+ % To be done
+ %\pgfmathparse{int(ifthenelse(\hex@bot@short@col(\c),1,0))}
+ %\edef\tmp{\pgfmathresult}
+ %\ifnum\tmp>0
+ %\edef\t{
+ % --(hex cs:c=\c,r=\ury,v=\sv\space west)
+ % --(hex cs:c=\c,r=\ury,v=\sv\space east)}
+ %\else
+ \edef\t{
+ --(hex cs:c=\c,r=\ury,v=\fv\space east)
+ --(hex cs:c=\c,r=\ury,v=\fv\space west)}
+ %\fi
+ \wg@addto@macro{\hex@board@path}{\t}}
+ %% Then for right of board
+ \foreach \r in {\ury,...,\lly} {%
+ \edef\t{
+ --(hex cs:c=\urx,r=\r,v=east)
+ --(hex cs:c=\urx,r=\r,v=\fv\space east)}
+ \wg@addto@macro{\hex@board@path}{\t}}
+
+ %% Then for bottom of board
+ \edef\t{--(hex cs:r=\lly,c=\urx,v=\fv\space west)}
+ \wg@addto@macro{\hex@board@path}{\t}
+ \foreach \c in {\urx,...,\llx} {%
+ \pgfmathparse{int(ifthenelse(\hex@bot@short@col(\c),1,0))}
+ \edef\tmp{\pgfmathresult}
+ \ifnum\tmp>0
+ \edef\t{
+ --(hex cs:c=\c,r=\lly,v=\sv\space east)
+ --(hex cs:c=\c,r=\lly,v=\sv\space west)}
+ \else
+ \edef\t{
+ --(hex cs:c=\c,r=\lly,v=\fv\space east)
+ --(hex cs:c=\c,r=\lly,v=\fv\space west)}
+ \fi
+ \wg@addto@macro{\hex@board@path}{\t}}
+
+ \def\t{--cycle}
+ \wg@addto@macro{\hex@board@path}{\t}
+ \global\let\hexboardpath\hex@board@path
+}
+%\def\boardclip#1#2#3{%
+% \pgfmathparse{int(#1-1)}\xdef\board@range{\pgfmathresult,...,0}%
+% %% \show\board@range
+% \draw \ifx|#3|\else[preaction={#3}]\fi%
+% [clip]
+% % [decorate,decoration={show path construction,
+% % moveto code={\fill[red](\tikzinputsegmentfirst) circle(2pt)
+% % node [fill=none,below]{moveto};},
+% % lineto code={\draw[thick,blue,->](\tikzinputsegmentfirst)--
+% % (\tikzinputsegmentlast) node [above] {lineto};},
+% % curveto code={\draw[thick,green,->](\tikzinputsegmentfirst)..
+% % controls(\tikzinputsegmentsupporta) and
+% % (\tikzinputsegmentsupportb)
+% % ..(\tikzinputsegmentlast) node[above]{curveto};},
+% % closepath code={\draw[thick,orange,->](\tikzinputsegmentfirst)--
+% % (\tikzinputsegmentlast) node [above] {closepath};}
+% % }]
+% (hex cs:r=0,c=0,v=south west)
+% %% First the left side
+% \foreach \r in {0,1,...,#2} {%
+% --(hex cs:c=0,r=\r,v=west)--(hex cs:c=0,r=\r,v=north west)}
+% %% Then for top of board
+% \foreach \c in {0,1,...,#1} {%
+% --(hex cs:r=#2,c=\c,v=north west)--(hex cs:c=\c,r=#2,v=north east)}
+% %% Then for right of board
+% \foreach \r in {#2,...,0} {%
+% --(hex cs:c=#1,r=\r,v=east)--(hex cs:c=#1,r=\r,v=south east)}
+% %% Then for bottom of board
+% --(hex cs:r=0,c=#1,v=south west) \foreach \c in \board@range {%
+% --(hex cs:r=0,c=\c,v=south east) --(hex cs:c=\c,r=0,v=south west) }
+% --cycle; }
+%% New definition - much simpler
+\def\boardclip(#1)(#2)#3{%
+ \boardpath(#1)(#2)
+ \draw \ifx|#3|\else[preaction={#3}]\fi%
+ [clip] \hexboardpath;
+}
+
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\debuggrid}
+%
+% Show a debug grid. This requires \cs{boardframe}.
+%
+% \begin{macrocode}
+\def\debuggrid{%
+ \foreach \i in {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1} {%
+ \pgfmathparse{\i*\boardW+\boardXmin}%
+ \edef\debug@x{\pgfmathresult}%
+ \draw [very thin,gray](\debug@x,\boardYmin) --
+ (\debug@x,\boardYmax) node [below,rotate=90] at
+ (\debug@x,\boardYmin) {$\i$}; }%
+ \foreach \i in {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1} {%
+ \pgfmathparse{\i*\boardH+\boardYmin}%
+ \edef\debug@x{\pgfmathresult}%
+ \draw [very thin,gray] (\boardXmin,\debug@x) --
+ (\boardXmax,\debug@x) node [left,rotate=90] at
+ (\boardXmin,\debug@x) {$\i$}; } }
+% \end{macrocode}
+% \end{Macro}
+%
+% Some dummy styles. These will be defined by the export class to
+% facilitate getting information from the board.
+%
+% \begin{macrocode}
+\tikzset{%
+ zoned/.style={},
+ zone scope/.style={},
+ zone path/.style={}
+}
+% \end{macrocode}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/coord.dtx b/macros/latex/contrib/wargame/source/hex/coord.dtx
new file mode 100644
index 0000000000..b996ffa3c2
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/coord.dtx
@@ -0,0 +1,350 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Hex coordinate system}
+%
+% \begin{Macro}{\hex@xx,\hex@yy}
+%
+% Some offsets along $x$ and $y$ due to offset of every second hex
+% column.
+%
+% \begin{align*}
+% \delta_x &= \cos60^{\circ}\\
+% \delta_y &= \sin60^{\circ}\\
+% \end{align*}
+%
+% These numbers are calculated once here and then used several times
+% in the following code.
+%
+% \begin{macrocode}
+\pgfmathparse{cos(60)} \xdef\hex@xx{\pgfmathresult}
+\pgfmathparse{sin(60)} \xdef\hex@yy{\pgfmathresult}
+\pgfmathparse{\hex@yy*cos(30)}\xdef\hex@e@xx{\pgfmathresult}
+\pgfmathparse{\hex@yy*sin(30)}\xdef\hex@e@yy{\pgfmathresult}
+\newdimen\hex@radius\hex@radius=1cm
+\newdimen\hex@dx \expandafter\hex@dx=\hex@xx cm
+\newdimen\hex@dy \expandafter\hex@dy=\hex@yy cm
+\newdimen\hex@e@dx \expandafter\hex@e@dx=\hex@e@xx cm
+\newdimen\hex@e@dy \expandafter\hex@e@dy=\hex@e@yy cm
+
+% \end{macrocode}
+% \end{Macro}
+%
+% Some code we need for some options
+%
+% \begin{macrocode}
+\newif\ifhex@label@is@name\hex@label@is@namefalse
+\def\hex@short@col{isfalse}
+\def\hex@got@short{isfalse}
+\pgfmathdeclarefunction{isfalse}{1}{%
+ \begingroup
+ \def\pgfmathresult{0}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup}
+\pgfmathdeclarefunction{istrue}{1}{%
+ \begingroup
+ \def\pgfmathresult{1}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup}
+% \end{macrocode}
+%
+% What follows is a way to configure the hex coordinate system. For
+% example, if the rows goes down, then we can flag that, but still add
+% hexes straightforwardly. Similar for columns. We can also specify
+% that the first row or column has number 1 (instead of 0). Since
+% this is dealt with a the coordinate level, it means most of the rest
+% of the code is agnostic to these choices.
+%
+% Which is the first coordinate (0 or 1)
+%
+% \begin{macrocode}
+\tikzset{
+ hex/first row is/.is choice,
+ hex/first row is/0/.code={\def\hex@coords@row@off{0}},
+ hex/first row is/1/.code={\def\hex@coords@row@off{-1}},
+ hex/first row is=0,
+ hex/first column is/.is choice,
+ hex/first column is/0/.code={\def\hex@coords@col@off{0}},
+ hex/first column is/1/.code={\def\hex@coords@col@off{-1}},
+ hex/first column is=0,
+ hex/first row and column are/.is choice,
+ hex/first row and column are/0/.style={
+ hex/first row is=0,%
+ hex/first column is=0},
+ hex/first row and column are/1/.style={
+ hex/first row is=1,%
+ hex/first column is=1},
+% \end{macrocode}
+%
+% Which way does the column and row numbers go
+%
+% \begin{macrocode}
+ hex/row direction is/.is choice,
+ hex/row direction is/normal/.code={\def\hex@coords@row@fac{1}},
+ hex/row direction is/reversed/.code={\def\hex@coords@row@fac{-1}},
+ hex/row direction is/up/.style={hex/row direction is=normal},
+ hex/row direction is/down/.style={hex/row direction is=reversed},
+ hex/row direction is/positive/.style={hex/row direction is=normal},
+ hex/row direction is/negative/.style={hex/row direction is=reversed},
+ hex/row direction is=normal,
+ hex/column direction is/.is choice,
+ hex/column direction is/normal/.code={\def\hex@coords@col@fac{1}},
+ hex/column direction is/reversed/.code={\def\hex@coords@col@fac{-1}},
+ hex/column direction is/right/.style={hex/column direction is=normal},
+ hex/column direction is/left/.style={hex/column direction is=reversed},
+ hex/column direction is/positive/.style={hex/column direction is=normal},
+ hex/column direction is/negative/.style={hex/column direction is=reversed},
+ hex/column direction is=normal,
+% \end{macrocode}
+%
+% Make labels names of shapes of the hexes so we can use labels to
+% place stuff
+%
+% \begin{macrocode}
+ hex/label is name/.is if=hex@label@is@name,
+% \end{macrocode}
+%
+% If we have uneven number of rows in some columns.
+%
+% \begin{macrocode}
+ hex/short bottom columns/.is choice,
+ hex/short bottom columns/odd/.code={%
+ \def\hex@bot@short@col{isodd}
+ \def\hex@got@bot@short{istrue}
+ \hex@dbg{4}{Short columns (odd): \meaning\hex@bot@short@col}},
+ hex/short bottom columns/even/.code={
+ \def\hex@bot@short@col{iseven}
+ \def\hex@got@bot@short{istrue}
+ \hex@dbg{4}{Short column (even): \meaning\hex@bot@short@col}},
+ hex/short bottom columns/none/.code={
+ \def\hex@bot@short@col{isfalse}
+ \def\hex@got@bot@short{isfalse}
+ \hex@dbg{4}{Short columns (none): \meaning\hex@bot@short@col}},
+ hex/short bottom columns=none,
+ hex/short columns/.forward to=hex/short bottom columns,
+ hex/short top columns/.is choice,
+ hex/short top columns/odd/.code={%
+ \def\hex@top@short@col{isodd}
+ \def\hex@got@top@short{istrue}
+ \hex@dbg{4}{Short columns (odd): \meaning\hex@top@short@col}},
+ hex/short top columns/even/.code={
+ \def\hex@top@short@col{iseven}
+ \def\hex@got@top@short{istrue}
+ \hex@dbg{4}{Short column (even): \meaning\hex@top@short@col}},
+ hex/short top columns/none/.code={
+ \def\hex@top@short@col{isfalse}
+ \def\hex@got@top@short{isfalse}
+ \hex@dbg{4}{Short columns (none): \meaning\hex@top@short@col}},
+ hex/short top columns=none,
+}
+\message{^^JInitial hex coordinate setup:
+ Rows: factor=\hex@coords@row@fac, offset=\hex@coords@row@off
+ Columns: factor=\hex@coords@col@fac, offset=\hex@coords@col@off}
+% \end{macrocode}
+%
+% \begin{HexKey*}{
+% hex/coords/column,
+% hex/coords/row,
+% hex/coords/vertex,
+% hex/coords/edge,
+% hex/coords/offset}
+%
+% We define the keys for hexagon coordinates. These are the
+% \spec{row}, \spec{column}, possible \spec{vertex} or
+% \spec{edge}. Vertexes and edges are defined as
+% multiple-choice. \spec{offset} specifies the offset from the
+% centre in the direction of a vertex or edge. By default, the
+% offset is one, meaning all the way to the vertex or edge.
+%
+% The key \spec{inverse row} specifies that the rows are given from
+% the top down, but coordinates should be calculated as if the row
+% was negative. This (should) allow us to design boards where rows
+% increase downward, while still keeping the interface and remaining
+% code somewhat reasonable and agnostic.
+%
+% Similarly, the key \spec{column 1}, will allow us to start the
+% columns with 1.
+%
+%
+%
+% \begin{macrocode}
+\tikzset{
+ /hex/coords/.cd,
+ column/.store in=\hex@col,
+ c/.store in=\hex@col,
+ row/.store in=\hex@row,
+ r/.store in=\hex@row,
+ offset/.store in=\hex@off,
+ o/.store in=\hex@off,
+ vertex/.is choice,
+ vertex/none/.code={\global\let\hex@vtx\@empty},
+ vertex/east/.code={\def\hex@vtx{0}},
+ vertex/north east/.code={\def\hex@vtx{60}},
+ vertex/north west/.code={\def\hex@vtx{120}},
+ vertex/west/.code={\def\hex@vtx{180}},
+ vertex/south west/.code={\def\hex@vtx{240}},
+ vertex/south east/.code={\def\hex@vtx{300}},
+ vertex/E/.code={\def\hex@vtx{0}},
+ vertex/NE/.code={\def\hex@vtx{60}},
+ vertex/NW/.code={\def\hex@vtx{120}},
+ vertex/W/.code={\def\hex@vtx{180}},
+ vertex/SW/.code={\def\hex@vtx{240}},
+ vertex/SE/.code={\def\hex@vtx{300}},
+ vertex/.default=none,
+ v/.forward to=/hex/coords/vertex=#1,
+ edge/.is choice,
+ edge/none/.code={\global\let\hex@edg\@empty},
+ edge/north east/.code={\def\hex@edg{30}},
+ edge/north/.code={\def\hex@edg{90}},
+ edge/north west/.code={\def\hex@edg{150}},
+ edge/south west/.code={\def\hex@edg{210}},
+ edge/south/.code={\def\hex@edg{270}},
+ edge/south east/.code={\def\hex@edg{330}},
+ edge/NE/.code={\def\hex@edg{30}},
+ edge/N/.code={\def\hex@edg{90}},
+ edge/NW/.code={\def\hex@edg{150}},
+ edge/SW/.code={\def\hex@edg{210}},
+ edge/S/.code={\def\hex@edg{270}},
+ edge/SE/.code={\def\hex@edg{330}},
+ edge/.default=none,
+ e/.forward to=/hex/coords/edge,
+}
+% \end{macrocode}
+% \end{HexKey*}
+%
+% \begin{Macro}{\hex@coords@reset}
+%
+% This macro resets the hex coordinates to default values. That is
+% row and column 0, no vertex or edge.
+%
+% \begin{macrocode}
+\def\hex@coords@reset{%
+ \tikzset{%
+ /hex/coords/.cd,
+ column=0,
+ row=0,
+ edge=none,
+ vertex=none,
+ offset=1}}
+% \end{macrocode}
+% \end{Macro}
+%
+% The following calculates the Cartesian coordinates from Hex
+% coordinates
+%
+% \begin{Syntax}
+% (cs:hex column=\meta{C},row=\meta{R},vertex=\meta{V},edge=\meta{E})
+% \end{Syntax}
+%
+% Given the hexagon column $C$ and row $R$ with hexagon radius $r$,
+% the centre of the hexagon is at
+%
+% \begin{eqnarray*}
+% x &=& 2C\frac{3}{4}r\\
+% y &=& r(R - (C \% 2)\sin60^{\circ})
+% \end{eqnarray*}
+%
+% If \meta{V} or \meta{E} are given, then these are added to the
+% centre point.
+%
+% Note, $C$ and $R$ may be fractional numbers, which will specify a
+% point inside a hex.
+%
+% We set-up the translation to Cartesian coordinates. First
+% thing is to reset keys in \spec{/hex/coords}, and then parse out the
+% keys given.
+%
+% \begin{macrocode}
+\def\hex@coords@conv#1{%
+ \hex@coords@reset%
+ \tikzset{/hex/coords/.cd, #1}%
+% \end{macrocode}
+%
+% Then we calculate the $x$ coordinate and set the dimension
+% \cs{pgf@x}. We do this by
+%
+% $$x=c_e \frac{3}{2}\quad,$$
+%
+% where
+%
+% $$c_e = f_c (c+o_c)\quad,$$
+%
+% is the effective column (stored in \cs{hex@eff@col}) calculated from
+% is the direction factor $f_c$ (set by \spec{hex/column direction
+% is}) and the offset $o_c$ (set by \spec{hex/first column is}).
+%
+% \begin{macrocode}
+ \pgfmathparse{int(\hex@coords@col@fac*(\hex@col+\hex@coords@col@off))}%
+ \xdef\hex@eff@col{\pgfmathresult}%
+ \hex@dbg{2}{Effective column: \hex@coords@col@fac * (\hex@col -
+ \hex@coords@col@off) -> \hex@eff@col}%
+ \pgfmathparse{\hex@eff@col*1.5}%
+ \xdef\hex@x{\pgfmathresult}%
+ \expandafter\pgf@x=\hex@x cm%
+% \end{macrocode}
+%
+% And then for the $y$ coordinate and set the dimension \cs{pgf@y}.
+%
+% $$y = 2\left(r_e - c_e \operatorname{mod} 2\right) \cos60^{\circ}\quad,$$
+%
+% where
+%
+% $$r_e= 2 f_r (r+o_r) - (c+o_c) \operatorname{mod} 2\quad,$$
+%
+% is the effective row (stored as \cs{hex@eff@row}) calculated from
+% the the direction factor $f_r$ (set by \spec{hex/row
+% direction is}) and the offset $o_r$ (set by \spec{hex/first
+% row is}).
+%
+% \begin{macrocode}
+ \pgfmathparse{int(\hex@coords@row@fac*(\hex@row+\hex@coords@row@off))}%
+ \xdef\hex@eff@row{\pgfmathresult}%
+ \hex@dbg{2}{Effective row: \hex@coords@row@fac * (\hex@row +
+ \hex@coords@row@off) -> \hex@eff@row}%
+ \pgfmathparse{(2*\hex@eff@row-mod(round((\hex@col+\hex@coords@col@off)),2))*\hex@yy}%
+ \xdef\hex@y{\pgfmathresult}%
+ \expandafter\pgf@x=\hex@y cm%
+% \end{macrocode}
+%
+% If we have a vertex specification add that location to the current
+% coordinates. If not, set the point.
+%
+% \begin{macrocode}
+ \ifx\hex@vtx\@empty\pgfpointxy{\hex@x}{\hex@y}\else%
+ \pgfpointadd{\pgfpointxy{\hex@x}{\hex@y}}{%
+ \pgfpointscale{\hex@off}{\pgfpointpolarxy{\hex@vtx}{1}}}\fi%
+% \end{macrocode}
+%
+% If we have an edge specification add that location to the current
+% coordinates.
+%
+% \begin{macrocode}
+ \ifx\hex@edg\@empty\else%
+ \pgfpointadd{\pgfpointxy{\hex@x}{\hex@y}}{%
+ \pgfpointscale{\hex@off}{\pgfpointpolarxy{\hex@edg}{\hex@yy}}}\fi
+% \end{macrocode}
+%
+% For debugging, we can print out stuff.
+%
+% \begin{macrocode}
+ \hex@dbg{2}{Hex coordinates: #1
+ ^^J c=\hex@col
+ ^^J r=\hex@row
+ ^^J v=\hex@vtx
+ ^^J e=\hex@edg
+ ^^J x=\hex@x
+ ^^J y=\hex@y}%
+ \global\let\hex@x\hex@x%
+ \global\let\hex@y\hex@y%
+ \global\let\hex@row\hex@row%
+ \global\let\hex@col\hex@col%
+}
+\tikzdeclarecoordinatesystem{hex}{%
+ \hex@coords@conv{#1}}
+% \end{macrocode}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/core.dtx b/macros/latex/contrib/wargame/source/hex/core.dtx
new file mode 100644
index 0000000000..1847ad42c8
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/core.dtx
@@ -0,0 +1,94 @@
+% \iffalse
+% ====================================================================
+% \fi
+%
+% \subsection{The \texttt{wargame.hex} \TikZ{} library}
+% \label{sec:impl:hex}
+%
+% \iffalse
+%<*hex>
+% \fi
+%
+% Used \TikZ{} libraries
+%
+% \begin{macrocode}
+\RequirePackage{alphalph}
+\usetikzlibrary{calc}
+\usetikzlibrary{arrows.meta}
+\usetikzlibrary{arrows}
+\usetikzlibrary{shapes.geometric}
+\usetikzlibrary{shapes.symbols}
+\usetikzlibrary{shapes.arrows}
+\usetikzlibrary{decorations}
+\usetikzlibrary{decorations.pathmorphing}
+\usetikzlibrary{decorations.pathreplacing}
+\usetikzlibrary{decorations.markings}
+\usetikzlibrary{wargame.util}
+% \end{macrocode}
+%
+%
+% \begin{Macro}{\@ifempty}
+%
+% This is a utility macro we will use below.
+%
+% \begin{macrocode}
+\def\@ifempty#1{\def\temp{#1}\ifx\temp\@empty}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Debugging}
+%
+% The counter \cs{hexdbglvl} sets the debug level, and the macro
+% \cs{hex@dbg} prints out (conditionally) debug messages.
+%
+% \begin{Macro}{\hexdbglvl,\hex@dbg}
+% \begin{macrocode}
+\newcount\hexdbglvl\hexdbglvl=\wargamedbglvl
+\def\hex@dbg#1#2{%
+ \ifnum#1>\hexdbglvl\relax\else\message{^^J#2}\fi}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Suppress terrain pictures}
+%
+% \begin{macrocode}
+\@ifundefined{ifhex@terrain@pic}{%
+ \newif\ifhex@terrain@pic
+ \hex@terrain@pictrue}{}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \input{hex/coord.dtx}
+% \input{hex/shape.dtx}
+% \input{hex/terrain.dtx}
+% \input{hex/terrain/beach.dtx}
+% \input{hex/terrain/light_woods.dtx}
+% \input{hex/terrain/woods.dtx}
+% \input{hex/terrain/swamp.dtx}
+% \input{hex/terrain/rough.dtx}
+% \input{hex/terrain/mountains.dtx}
+% \input{hex/terrain/village.dtx}
+% \input{hex/terrain/town.dtx}
+% \input{hex/terrain/city.dtx}
+% \input{hex/terrain/mountain.dtx}
+% \input{hex/terrain/tree.dtx}
+% \input{hex/ridges.dtx}
+% \input{hex/towns.dtx}
+% \input{hex/labels.dtx}
+% \input{hex/extra.dtx}
+% \input{hex/paths.dtx}
+% \input{hex/board.dtx}
+% \iffalse
+%</hex>
+% \fi
+% \ No newline at end of file
diff --git a/macros/latex/contrib/wargame/source/hex/extra.dtx b/macros/latex/contrib/wargame/source/hex/extra.dtx
new file mode 100644
index 0000000000..05f7215297
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/extra.dtx
@@ -0,0 +1,83 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Extra graphics}
+% \label{sec:impl:hex:extra}
+%
+% To make the interface a bit more flexible we allow for adding
+% arbitrary stuff to the hexes.
+%
+% Some examples of \spec{pic}tures to add in the \spec{extra} stuff.
+%
+% \begin{HexKey}{hex/fortress}
+%
+% Draw a fortress. An example of a extra graphics entity.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/fortress/.pic={
+ \path[draw,pic actions]
+ (0: .9) --
+ (0: .7) --
+ (60: .7) -- ( 60:.9) -- ( 60:.7) --
+ (120:.7) -- (120:.9) -- (120:.7) --
+ (180:.7) -- (180:.9) -- (180:.7) --
+ (240:.7) -- (240:.9) -- (240:.7) --
+ (300:.7) -- (300:.9) -- (300:.7) --
+ (0: .7) -- cycle;}}
+% \end{macrocode}
+% \end{HexKey}
+%
+% \begin{HexKey}{hex/fortress 2}
+%
+% Draw a fortress. An example of a extra graphics entity.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/fortress 2/.pic={%
+ \draw[pic actions,transform shape] (0:0.64)
+ foreach \a in {15,45,...,345}{
+ --(\a:0.64)
+ --(\a:0.80)
+ --(\a+15:0.80)
+ --(\a+15:0.64)}
+ --cycle;
+ },
+}
+% \end{macrocode}
+% \end{HexKey}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Some macros}
+%
+%
+% \begin{macrocode}
+\DeclareRobustCommand\fortmark[1][scale=.25]{\tikz[#1,transform shape]{%
+ \pic{hex/fortress 2}}}
+\providecommand\terrainmark[2][scale=.2]{%
+ \tikz[#1]{\hex[label=,terrain=#2]}}
+\providecommand\clearhex[1][scale=.2]{\tikz[#1]{\hex[label=]}}
+\providecommand\woodshex[1][scale=.2]{\terrainmark[#1]{woods}}
+\providecommand\mountainhex[1][scale=.2]{\terrainmark[#1]{mountains}}
+\providecommand\cityhex[1][scale=.2]{\terrainmark[#1]{city}}
+\providecommand\beachhex[1][scale=.2]{\terrainmark[#1]{beach}}
+\providecommand\seahex[1][scale=.2]{\tikz[#1]{\hex[label=,fill=sea]}}
+\providecommand\riverhex[1][scale=.2]{%
+ \tikz[#1]{%
+ \hex[label=](c=0,r=0)%
+ \river[](hex cs:e=SW)--(hex cs:e=NE);}}
+\providecommand\roadhex[1][scale=.2]{%
+ \tikz[#1]{%
+ \hex[label=](c=0,r=0)%
+ \road(hex cs:e=SW)--(hex cs:e=NE);}}
+% \end{macrocode}
+%
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/labels.dtx b/macros/latex/contrib/wargame/source/hex/labels.dtx
new file mode 100644
index 0000000000..7767dcc661
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/labels.dtx
@@ -0,0 +1,160 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Labels}
+% \label{sec:impl:hex:label}
+%
+% Like terrains, we will set up some macros for dealing with labels.
+%
+% To process coordinates and turn them into labels, we set up two
+% counters.
+%
+% \begin{macrocode}
+\newcounter{hex@l@c}
+\newcounter{hex@l@r}
+% \end{macrocode}
+%
+% In case we want to invert the row axis, we set-up a key to set the
+% maximum row number.
+%
+% \begin{macrocode}
+\def\hex@max@row{-1}
+\tikzset{
+ max hex row/.store in=\hex@max@row,
+}
+% \end{macrocode}
+%
+% Again, we will make a separate namespace/family for the handling
+% labels. We also define a counter which we will use to typeset
+% alphabetic column numbers.
+%
+% First a graphics style.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/label/.style={%
+ draw=none,%
+ shape=rectangle,%
+ anchor=north,%
+ color=gray,%
+ font=\sffamily\bfseries\scriptsize,%
+ inner sep=0},
+}
+% \end{macrocode}
+%
+% Next, the choices of how to make a label. These are put in the
+% \spec{/hex/label} family to make it easy to parse out only these
+% keys. This uses some macros defined below. Note, this uses the
+% macros \cs{hex@col} and \cs{hex@row} defined by the hex coordinate
+% system.
+%
+% \begin{macrocode}
+\tikzset{%
+ /hex/label/.search also={/tikz},
+ /hex/label/.cd,
+ none/.code={\global\let\hex@l@text\@empty},
+ auto/.is choice,
+ auto/none/.code={\global\let\hex@l@text\@empty},
+ auto/numbers/.code={%
+ \hex@l@abs%
+ \xdef\hex@l@text{%
+ \hex@l@n@pad{\the\c@hex@l@c}%
+ \hex@l@n@pad{\the\c@hex@l@r}}},
+ auto/alpha column/.code={%
+ \xdef\hex@l@text{%
+ \ifnum0>\hex@col\AlphAlph{-\hex@col}\else\AlphAlph{\hex@col}\fi%
+ \hex@row}},
+ auto/alpha 2 column/.code={%
+ \hex@l@abs%
+ \advance\c@hex@l@c27\relax%
+ \xdef\hex@l@text{%
+ \AlphAlph{\value{hex@l@c}}%
+ \hex@l@n@pad{\hex@row}}},
+ auto/inv y x plus 1/.code={%
+ \hex@dbg{3}{Inverse row, add one to column with arg `#1'}
+ \let\hex@l@text\@empty%
+ \ifnum\hex@max@row>0%
+ \pgfmathtruncatemacro{\hex@l@row}{\hex@max@row-\hex@row}
+ \pgfmathtruncatemacro{\hex@l@col}{1+\hex@col}
+ \xdef\hex@l@text{%
+ \hex@l@n@pad{\hex@l@col}%
+ \hex@l@n@pad{\hex@l@row}}
+ \else\message{Max row number not set}\fi},
+ auto/x and y plus 1/.code={%
+ \hex@dbg{3}{Inverse row, add one to column with arg `#1'}
+ \pgfmathtruncatemacro{\hex@l@row}{1+\hex@row}
+ \pgfmathtruncatemacro{\hex@l@col}{1+\hex@col}
+ \xdef\hex@l@text{%
+ \hex@l@n@pad{\hex@l@col}%
+ \hex@l@n@pad{\hex@l@row}}},
+ auto/.default=numbers,
+ %text/.store in=\hex@l@text,
+ text/.code={\gdef\hex@l@text{#1}},
+ place/.store in=\hex@l@pos,
+ location/.forward to=/hex/label/place,
+ rotate/.store in=\hex@l@rot
+}
+% \end{macrocode}
+% \begin{Macro}{\hex@l@abs}
+%
+% This takes the absolute value of row and column numbers.
+%
+% \begin{macrocode}
+\def\hex@l@abs{
+ \setcounter{hex@l@c}{\hex@col}
+ \setcounter{hex@l@r}{\hex@row}
+ \expandafter\ifnum\value{hex@l@c}<0\multiply\c@hex@l@c by-1\fi%
+ \expandafter\ifnum\value{hex@l@r}<0\multiply\c@hex@l@r by-1\fi%
+ % \hex@dbg{0}{\hex@col->\the\c@hex@l@c\space\hex@row->\the\c@hex@l@r}
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\hex@l@n@pad}
+% This will pad a number with a 0 if the number is smaller than 10.
+%
+% \begin{macrocode}
+\long\def\hex@l@n@pad#1{%
+ \ifnum#1<10 0\fi%
+ #1}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\hex@do@label}
+%
+% This macro puts in the label. First, we reset label keys, then we
+% read in the keys from the argument. If this results in the macro
+% \cs{hex@l@text} to be non-empty, then we set the label via a
+% \TikZ{} \spec{node}.
+%
+% \begin{macrocode}
+\def\hex@do@label{%
+ \hex@dbg{1}{Hex label: `\meaning\hex@label'}%
+ \edef\hex@l@tmp{[%
+ /hex/label/.cd,%
+ rotate=0,%
+ place={(90:.8)},%
+ /tikz/hex/label/.try,%
+ /tikz/every hex label/.try,%
+ \hex@label]}%
+ \expandafter\scope\hex@l@tmp%
+ \hex@dbg{1}{Label:
+ ^^J Text: `\meaning\hex@l@text'
+ ^^J Location: `\meaning\hex@l@pos'
+ ^^J Rotation: `\meaning\hex@l@rot'
+ }%
+ \@ifundefined{hex@l@text}{\let\hex@l@text\empty}{}%
+ \ifx\hex@l@text\empty\else%
+ \node[rotate=\hex@l@rot] at \hex@l@pos {\hex@l@text};%
+ \fi%
+ \endscope%
+}
+% \end{macrocode}
+% \end{Macro}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/paths.dtx b/macros/latex/contrib/wargame/source/hex/paths.dtx
new file mode 100644
index 0000000000..833a4a245a
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/paths.dtx
@@ -0,0 +1,416 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Edges, borders, roads, rivers, and so on}
+%
+% Styles of drawing edges, borders, rivers, roads, and railroads.
+%
+% \begin{macrocode}
+% A decoration to extract outline of a path
+\pgfdeclaredecoration{outline}{init}
+{%
+ \state{init}[next state=tick,width=0pt]{
+ \xdef\outlinerev{}}
+ \state{tick}[%
+ width=+\pgfdecorationsegmentlength]%
+ {
+ \pgfpathlineto{\pgfpointadd{\pgfpointorigin}{
+ \pgfpointpolar{\pgfdecorationsegmentangle}{
+ +\pgfdecorationsegmentamplitude}}}
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \message{^^J\the\pgf@x,\the\pgf@y}
+ \pgfpointadd{\pgfpointorigin}{
+ \pgfpointpolar{-\pgfdecorationsegmentangle}{
+ \pgfdecorationsegmentamplitude}}
+ \pgfpointtransformed{\pgfpoint{\pgf@x}{\pgf@y}}%
+ \message{^^J\the\pgf@x,\the\pgf@y}
+ \xdef\outlinerev{\the\pgf@x/\the\pgf@y,\outlinerev}
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@ya
+ }%
+ \state{final}
+ {
+ \pgfpathlineto{\pgfpointdecoratedpathlast}
+ \foreach \x/\y in \outlinerev{
+ \ifx\x\empty\else
+ \ifx\y\empty\else
+ \pgf@xa=\x
+ \pgf@ya=\y
+ \pgf@nlt@lineto{\pgf@xa}{\pgf@ya}
+ \fi
+ \fi
+ }
+ }%
+}%
+
+\tikzset{
+ hex/road/.style={
+ rounded corners=3\pgflinewidth,% .25cm,
+ color=black,
+ transform shape,
+ scale line widths,
+ thick},
+ hex/railroad/.style={
+ %scale line widths,
+ rounded corners=.25cm,
+ color=gray!50!black,
+ transform shape,
+ postaction={draw,decorate},
+ decoration={ticks,
+ segment length=9\pgflinewidth,
+ amplitude=3\pgflinewidth,%.1cm
+ }
+ },
+ hex/river/.style={
+ color=blue,
+ scale line widths,
+ line width=3pt,
+ transform shape,
+ decorate,
+ decoration={random steps,
+ segment length=.3cm,
+ amplitude=.15cm,
+ pre=lineto,
+ post=lineto,
+ pre length=.05cm,
+ post length=.05cm},
+ rounded corners=.08cm},
+ hex/border/.style={
+ color=gray,
+ rounded corners=3pt,
+ dashed,
+ transform shape,
+ scale line widths,
+ very thick
+ },
+ every river/.style={},
+ every road/.style={},
+ every railroad/.style={},
+ every border/.style={},
+}
+% \end{macrocode}
+%
+% \begin{Macro}{\road,\railroad,\river,\border}
+%
+% \begin{macrocode}
+\def\road{%
+ \hex@dbg{3}{Road}
+ \@ifnextchar[{\road@}{\road@[]}%]
+}
+\def\road@[#1]{\draw[hex/road,every hex road/.try,#1]}
+\def\railroad{%
+ \hex@dbg{3}{Rail road}
+ \@ifnextchar[{\railroad@}{\railroad@[]}%]
+}
+\def\railroad@[#1]{\draw[hex/railroad,every hex railroad/.try,#1]}
+\def\river{%
+ \hex@dbg{3}{River}
+ \@ifnextchar[{\river@}{\river@[]}%]
+}
+\def\river@[#1]{\draw[hex/river,every hex river/.try,#1]}
+\def\border{%
+ \hex@dbg{3}{Border}
+ \@ifnextchar[{\border@}{\border@[]}%]
+}
+\def\border@[#1]{\draw[hex/border,every hex border/.try,#1]}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Other paths}
+%
+% \begin{Macro}{\shiftScalePath}
+% Shifts and scales a path and defines a macro to contain the path
+%
+% \begin{Syntax}
+% \cs{shiftScalePath}\marg{macro}\marg{relative-coordinates}
+% \end{Syntax}
+%
+% where \meta{relative-coordinates} is a comma separated list of
+% relative coordinates (to the lower-left and upper-right corners)
+%
+% \begin{Syntax}
+% \meta{x}/\meta{y}
+% \end{Syntax}
+%
+% Note, this requires that \cs{boardXmin},\cs{boardYmin} and
+% \cs{boardXmax},\cs{boardYmax} is defined. This can be done using
+% the \cs{boardframe} macro.
+%
+% \begin{macrocode}
+\def\shiftScalePath#1#2{%
+ \let\tmp@path\@undefined%
+ \foreach \x/\y in {#2}{%
+ \pgfmathparse{\x*\boardW+\boardXmin}\xdef\tmp@x{\pgfmathresult}%
+ \pgfmathparse{\y*\boardH+\boardYmin}\xdef\tmp@y{\pgfmathresult}%
+ \@ifundefined{tmp@path}{\def\tmp@path{}}{\xdef\tmp@path{\tmp@path--}}%
+ \xdef\tmp@path{\tmp@path(\tmp@x,\tmp@y)}}%
+ \expandafter\xdef\csname #1\endcsname{\tmp@path}}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Move, attacks, retreats from hex to hex}
+%
+% \begin{Macro}{\hex@getscale}
+%
+% Get current scaling factor.
+%
+% \begin{macrocode}
+\def\hex@getscale#1{%
+ \begingroup
+ \pgfgettransformentries{%
+ \scaleA}{%
+ \scaleB}{%
+ \scaleC}{%
+ \scaleD}{%
+ \whatevs}{%
+ \whatevs}%
+ \pgfmathsetmacro{#1}{sqrt(abs(\scaleA*\scaleD-\scaleB*\scaleC))}%
+ \expandafter
+ \endgroup
+ \expandafter\def\expandafter#1\expandafter{#1}%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% Key to get the scale
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/get scale/.code={
+ \hex@getscale{\hex@scale}},
+}
+% \end{macrocode}
+%
+% Style for moves. Use like
+%
+% \begin{Syntax}
+% \cs{path}[move] \meta{coordinates};
+% \end{Syntax}
+%
+% \begin{macrocode}
+\tikzset{%
+ % Argument is colour
+ hex/move/.style={
+ hex/get scale,
+ decorate,
+ decoration={
+ markings,
+ mark=between positions 0 and 1 step 0.75*\hex@scale*\hex@dy with {
+ \node [single arrow,
+ single arrow head extend=3pt,
+ fill=#1,
+ inner sep=\hex@scale*.5mm,
+ minimum width=\hex@scale*2mm,
+ minimum height=\hex@scale*\hex@dy/2,
+ transform shape]{};
+ }
+ },
+ },
+% \end{macrocode}
+%
+% A short move style
+%
+% \begin{Syntax}
+% \cs{path}[short move] \meta{coordinates};
+% \end{Syntax}
+%
+%
+% \begin{macrocode}
+ % Argument is colour
+ hex/short move/.style={
+ hex/get scale,
+ decorate,
+ decoration={
+ markings,
+ mark=between positions 0 and 1 step 0.5*\hex@scale*\hex@dy with {
+ \node [single arrow,
+ single arrow head extend=3pt,
+ fill=#1,
+ inner sep=\hex@scale*.5mm,
+ minimum width=\hex@scale*2mm,
+ minimum height=\hex@scale*\hex@dy/3,
+ transform shape]{};
+ }
+ },
+ },
+% \end{macrocode}
+%
+% A short move style
+%
+% \begin{Syntax}
+% \cs{path}[long move] \meta{coordinates};
+% \end{Syntax}
+%
+%
+% \begin{macrocode}
+ % Argument is colour
+ hex/long move/.style={
+ hex/get scale,
+ transform shape,
+ decorate,
+ decoration={
+ markings,
+ mark=between positions 0 and -.7*\hex@scale*\hex@dy
+ step 2*\hex@scale*\hex@dy with {
+ \node [single arrow,
+ single arrow head extend=3pt,
+ fill=#1,
+ anchor=west,
+ inner sep=\hex@scale*.25mm,
+ outer sep=.3*\hex@scale*\hex@dy,
+ minimum width=\hex@scale*2mm,
+ minimum height=1.4*\hex@scale*\hex@dy,
+ transform shape]{};
+ }
+ },
+ },
+% \end{macrocode}
+%
+% A short move style
+%
+% \begin{Syntax}
+% \cs{path}[move with start] \meta{coordinates};
+% \end{Syntax}
+%
+%
+% \begin{macrocode}
+ % Argument is colour
+ hex/move with start/.style={
+ hex/get scale,
+ decorate,
+ decoration={
+ markings,
+ mark=at position 0 with {
+ \node [inner sep=0,
+ circle,
+ minimum size=\hex@scale*5mm,
+ fill=#1,
+ transform shape] {};},
+ mark=between positions 0 and 1 step 0.75*\hex@scale*\hex@dy with {
+ \node [single arrow,
+ single arrow head extend=\hex@scale*3pt,
+ fill=#1,
+ inner sep=\hex@scale*1mm,
+ minimum width=\hex@scale*3mm,
+ minimum height=\hex@scale*\hex@dy/2,
+ transform shape]{};
+ }
+ },
+ },
+ % Default fill colour is black
+ hex/move/.default=black,
+ hex/move with start/.default=black,
+ hex/short move/.default=black,
+ hex/long move/.default=black,
+ % Arguments are draw and fill color
+% \end{macrocode}
+%
+% A move cost style
+%
+% \begin{Syntax}
+% \cs{path}[move] ...(coordinate)node[hex/move cost]{} ...;
+% \end{Syntax}
+%
+% \begin{macrocode}
+ hex/move cost/.style 2 args={
+ minimum size=1mm,
+ inner sep=0.1mm,
+ circle,
+ fill=#2,
+ transform shape,
+ text=#1,
+ font=\sffamily\bfseries\Large},
+ hex/move cost/.default={black}{none},
+ % Argument is fill colour
+% \end{macrocode}
+%
+% A short line style for retreates, advances, and so on
+%
+% \begin{Syntax}
+% \cs{path}[short line] (start)--(end);
+% \end{Syntax}
+%
+% \begin{macrocode}
+ hex/short line/.style={%
+ hex/get scale,
+ inherit options/.code={\csname tikz@options\endcsname},
+ inherit options,
+ decorate,
+ decoration={
+ markings,
+ mark=between positions \hex@scale*\hex@dy
+ and 1 step 2*\hex@scale*\hex@dy with {
+ \node [single arrow,draw=black,fill=#1,
+ single arrow head extend=\hex@scale*3pt,
+ inner sep=1mm,
+ minimum width=0.75*\hex@scale*\hex@dy,
+ minimum height=\hex@scale*\hex@dy,
+ transform shape]{};
+ }
+ },
+ },
+% \end{macrocode}
+%
+% An attack indication style
+%
+% \begin{Syntax}
+% \cs{path}[attack] (start)--(end);
+% \end{Syntax}
+%
+% \begin{macrocode}
+ % Argument is fill color
+ hex/attack/.style={
+ hex/get scale,
+ inherit options/.code={\csname tikz@options\endcsname},
+ inherit options,
+ decorate,
+ decoration={
+ markings,
+ mark=between positions \hex@scale*\hex@dy
+ and 1 step 2*\hex@scale*\hex@dy with {
+ \node [regular polygon,
+ fill=#1,
+ draw=#1,
+ regular polygon sides=3,
+ inner sep=0,
+ minimum size=0.75*\hex@scale*\hex@dy,
+ rotate=-90,
+ transform shape]{};
+ }
+ },
+ },
+% \end{macrocode}
+%
+% Short hands
+%
+% \begin{Syntax}
+% \cs{path}[attack] (start)--(end);
+% \end{Syntax}
+%
+% \begin{macrocode}
+ % Default colour is red for attachs
+ hex/attack/.default=red!70!black,
+ %%
+ hex/retreat/.style={hex/short line=#1},
+ hex/retreat/.default=white,
+ %%
+ hex/advance/.style={hex/short line=#1},
+ hex/advance/.default={green!70!black},
+}
+% \end{macrocode}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/ridges.dtx b/macros/latex/contrib/wargame/source/hex/ridges.dtx
new file mode 100644
index 0000000000..3914ff6ce5
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/ridges.dtx
@@ -0,0 +1,139 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Ridges}
+% \label{sec:impl:hex:ridges}
+%
+% A hex can be decorated with up to 6 ridges --- one for each edge of
+% the hexagon. The first thing is to set up the graphics style to use
+% for the ridges. We use the \spec{wave} decoration.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/ridges/.style={
+ line cap=round,
+ draw=pgfstrokecolor,
+ rounded corners=.25cm,
+ scale line widths,
+ decoration={
+ path has corners=true,
+ pre=waves,
+ post=waves,
+ pre length=-.1cm,
+ post length=0cm,
+ waves,
+ radius=.2cm,
+ segment length=.2cm},
+ decorate}}
+% \end{macrocode}
+%
+% To properly set up the ridges, we need to concatenate ridge paths in
+% order. To facilitate that, we define 6 \cs{if}s --- one for each
+% edge.
+%
+% \begin{macrocode}
+\newif\ifhex@r@ne
+\newif\ifhex@r@n
+\newif\ifhex@r@nw
+\newif\ifhex@r@sw
+\newif\ifhex@r@s
+\newif\ifhex@r@se
+% \end{macrocode}
+%
+% Next is the keys for each edge. These will set the above \cs{if}s
+% to \spec{true}. We put these into the family \spec{/hex/r} so that
+% we can parse them separately.
+%
+% \begin{macrocode}
+\tikzset{%
+ /hex/ridges/.search also={/tikz},
+ /hex/ridges/.cd,
+ north east/.is if=hex@r@ne,
+ north/.is if=hex@r@n,
+ north west/.is if=hex@r@nw,
+ south west/.is if=hex@r@sw,
+ south/.is if=hex@r@s,
+ south east/.is if=hex@r@se,
+ radius/.store in=\hex@r@r,
+ NE/.is if=hex@r@ne,
+ N/.is if=hex@r@n,
+ NW/.is if=hex@r@nw,
+ SW/.is if=hex@r@sw,
+ S/.is if=hex@r@s,
+ SE/.is if=hex@r@se,
+ r/.store in=\hex@r@r,
+}
+% \end{macrocode}
+%
+% \begin{Macro}{\hex@do@ridges}
+%
+% This is the macro that actually generates the ridge. We use the
+% same \textsc{pgf} filtered key parsing trick as above. Note that
+% the routine below is handcrafted since it is relatively simple.
+%
+% \begin{macrocode}
+\def\hex@do@ridges{%
+ \edef\hex@r@tmp{[
+ /hex/ridges/.cd,%
+ radius=0.8,%
+ /tikz/every hex ridges/.try,
+ \hex@ridges]}
+ \expandafter\scope\hex@r@tmp%
+ \hex@dbg{3}{Ridges: `\meaning\hex@ridges', `\meaning\hex@r@tmp'
+ ^^Jnorth east=\ifhex@r@ne yes\else no\fi
+ ^^Jnorth =\ifhex@r@n yes\else no\fi
+ ^^Jnorth west=\ifhex@r@nw yes\else no\fi
+ ^^Jsouth west=\ifhex@r@sw yes\else no\fi
+ ^^Jsouth =\ifhex@r@s yes\else no\fi
+ ^^Jsouth east=\ifhex@r@se yes\else no\fi
+ ^^Jradius =\hex@r@r
+ }
+ \def\hex@r@p{}
+ % Hand written algorithm
+ \ifhex@r@ne
+ \def\hex@r@p{(0:\hex@r@r)--(60:\hex@r@r)}
+ \fi
+ \ifhex@r@n
+ \hex@dbg{4}{Ridge along north edge: `\hex@r@p'}
+ \ifhex@r@ne\else
+ \xdef\hex@r@p{\hex@r@p ( 60:\hex@r@r)}
+ \fi
+ \xdef\hex@r@p{\hex@r@p --(120:\hex@r@r)}
+ \fi
+ \ifhex@r@nw
+ \ifhex@r@n\else
+ \xdef\hex@r@p{\hex@r@p (120:\hex@r@r)}
+ \fi
+ \xdef\hex@r@p{\hex@r@p --(180:\hex@r@r)}
+ \fi
+ \ifhex@r@sw
+ \ifhex@r@nw\else
+ \xdef\hex@r@p{\hex@r@p (180:\hex@r@r)}
+ \fi
+ \xdef\hex@r@p{\hex@r@p --(240:\hex@r@r)}
+ \fi
+ \ifhex@r@s
+ \ifhex@r@sw\else
+ \xdef\hex@r@p{\hex@r@p (240:\hex@r@r)}
+ \fi
+ \xdef\hex@r@p{\hex@r@p --(300:\hex@r@r)}
+ \fi
+ \ifhex@r@se
+ \ifhex@r@s\else
+ \xdef\hex@r@p{\hex@r@p (300:\hex@r@r)}
+ \fi
+ \xdef\hex@r@p{\hex@r@p --(360:\hex@r@r)}
+ \fi
+ \hex@dbg{3}{ Ridges path: \hex@r@p}
+ \draw[hex/ridges] \hex@r@p;
+ \endscope% End of ridges scope
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/shape.dtx b/macros/latex/contrib/wargame/source/hex/shape.dtx
new file mode 100644
index 0000000000..0d31da837f
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/shape.dtx
@@ -0,0 +1,368 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Hexes}
+% \label{sec:impl:hex:hex}
+%
+% In this part, we make macros etc. for the hexes.
+%
+% A hex shape. We make a node of this shape if we are to give a name
+% to the hex added. We add a bunch of anchors to it so we may easily
+% refer to it. This is also where we actual fill stuff into the hex,
+% such as terrain and so on.
+%
+% \begin{macrocode}
+\hex@dbg{5}{Base vertex: \hex@xx,\hex@yy}
+\hex@dbg{5}{Base edges: \hex@e@xx,\hex@e@yy}
+\pgfdeclareshape{hex/hex}{%
+ \saveddimen\radius{\pgf@x=\hex@radius}
+ \savedanchor{\east}{ \pgfqpoint{ \hex@radius}{0cm}}
+ \savedanchor{\west}{ \pgfqpoint{-\hex@radius}{0cm}}
+ \savedanchor{\northeast}{ \pgfqpoint{ \hex@dx}{ \hex@dy}}
+ \savedanchor{\northwest}{ \pgfqpoint{-\hex@dx}{ \hex@dy}}
+ \savedanchor{\southwest}{ \pgfqpoint{-\hex@dx}{-\hex@dy}}
+ \savedanchor{\southeast}{ \pgfqpoint{ \hex@dx}{-\hex@dy}}
+ \savedanchor{\northedge}{ \pgfqpoint{ 0cm}{ \hex@dy}}
+ \savedanchor{\southedge}{ \pgfqpoint{ 0cm}{-\hex@dy}}
+ \savedanchor{\northeastedge}{\pgfqpoint{ \hex@e@dx}{ \hex@e@dy}}
+ \savedanchor{\northwestedge}{\pgfqpoint{-\hex@e@dx}{ \hex@e@dy}}
+ \savedanchor{\southwestedge}{\pgfqpoint{-\hex@e@dx}{-\hex@e@dy}}
+ \savedanchor{\southeastedge}{\pgfqpoint{ \hex@e@dx}{-\hex@e@dy}}
+ \savedmacro\init{%
+ \def\hexpath{%
+ \pgfpathmoveto{\east}%
+ \pgfpathlineto{\northeast}%
+ \pgfpathlineto{\northwest}%
+ \pgfpathlineto{\west}%
+ \pgfpathlineto{\southwest}%
+ \pgfpathlineto{\southeast}%
+ \pgfpathclose}
+ }
+% \end{macrocode}
+%
+% These are the actual user callable anchors. We make anchors for
+% each vertex and mid points on each edge.
+%
+% \begin{macrocode}
+%%
+ \anchor{center}{ \pgfpointorigin}
+ \anchor{east}{ \east}
+ \anchor{west}{ \west}
+ \anchor{north east}{ \northeast}
+ \anchor{north west}{ \northwest}
+ \anchor{south west}{ \southwest}
+ \anchor{south east}{ \southeast}
+ \anchor{north edge}{ \northedge}
+ \anchor{south edge}{ \southedge}
+ \anchor{north east edge}{\northeastedge}
+ \anchor{north west edge}{\northwestedge}
+ \anchor{south west edge}{\southwestedge}
+ \anchor{south east edge}{\southeastedge}
+% \end{macrocode}
+%
+% Next we make some short hand aliases for each of these anchors.
+%
+% \begin{macrocode}
+ \anchor{E}{ \east}
+ \anchor{W}{ \west}
+ \anchor{NE}{ \northeast}
+ \anchor{NW}{ \northwest}
+ \anchor{SW}{ \southwest}
+ \anchor{SE}{ \southeast}
+ \anchor{N edge}{ \northedge}
+ \anchor{S edge}{ \southedge}
+ \anchor{NE edge}{\northeastedge}
+ \anchor{NW edge}{\northwestedge}
+ \anchor{SW edge}{\southwestedge}
+ \anchor{SE edge}{\southeastedge}
+% \end{macrocode}
+%
+% The next part is commented out because its not obvious we'll use
+% these.
+%
+% \begin{macrocode}
+ %%
+ \savedanchor{\chitnorth}{ \pgfqpoint{ 0cm}{ 0.6cm}}
+ \savedanchor{\chitsouth}{ \pgfqpoint{ 0cm}{ -0.6cm}}
+ \savedanchor{\chiteast}{ \pgfqpoint{ 0.6cm}{ 0cm}}
+ \savedanchor{\chitwest}{ \pgfqpoint{-0.6cm}{ 0cm}}
+ \savedanchor{\chitnortheast}{\pgfqpoint{ 0.6cm}{ 0.6cm}}
+ \savedanchor{\chitnorthwest}{\pgfqpoint{-0.6cm}{ 0.6cm}}
+ \savedanchor{\chitsouthwest}{\pgfqpoint{-0.6cm}{-0.6cm}}
+ \savedanchor{\chitsoutheast}{\pgfqpoint{ 0.6cm}{-0.6cm}}
+ %
+ \anchor{chit north}{\chitnorth}
+ \anchor{chit south}{\chitsouth}
+ \anchor{chit east}{\chiteast}
+ \anchor{chit west}{\chitwest}
+ \anchor{chit north east}{\chitnortheast}
+ \anchor{chit north west}{\chitnorthwest}
+ \anchor{chit south west}{\chitsouthwest}
+ \anchor{chit south east}{\chitsoutheast}
+ %
+ \anchor{chit N}{\chitnorth}
+ \anchor{chit S}{\chitsouth}
+ \anchor{chit E}{\chiteast}
+ \anchor{chit W}{\chitwest}
+ \anchor{chit NE}{\chitnortheast}
+ \anchor{chit NW}{\chitnorthwest}
+ \anchor{chit SW}{\chitsouthwest}
+ \anchor{chit SE}{\chitsoutheast}
+ %
+% \end{macrocode}
+%
+% The background path. This path may be drawn when the node is
+% drawn. However, we will do most of the work in the
+% \cs{behindbackgroundpath} which gets drawn \emph{after} this path.
+%
+% \begin{macrocode}
+ \backgroundpath{\init\hexpath}
+% \end{macrocode}
+%
+% The \emph{behind} background path, where we do most of the work.
+%
+% \begin{macrocode}
+ \behindforegroundpath{%
+ \hex@dbg{2}{Hex behind foreground path:
+ ^^JTerrain: `\meaning\hex@terrain'
+ ^^JRidges: `\meaning\hex@ridges'
+ ^^JTown: `\meaning\hex@town'
+ ^^JExtra clipped: `\meaning\hex@extra@clip'
+ ^^JLabel: `\meaning\hex@label'
+ ^^JExtra: `\meaning\hex@extra'
+ ^^JLast node name:`\meaning\tikzlastnode'
+ ^^JHex row: `\meaning\hex@row'
+ ^^JHex col: `\meaning\hex@col'
+ }%
+ \init%
+% \end{macrocode}
+%
+% We start a scope and clip to the hex path first.
+%
+% \begin{macrocode}
+ \scope%
+ \hexpath%
+ \pgfusepath{clip}%
+% \end{macrocode}
+%
+% Anything inside this scope is clipped to the hex path. The next
+% step is to see if we have a specified terrain for the hex.
+%
+% \begin{macrocode}
+ \@ifundefined{hex@terrain}{\let\hex@terrain\empty}{}%
+ \ifx\hex@terrain\empty\else\hex@do@terrain\fi%
+% \end{macrocode}
+%
+% This concludes the processing of the terrain of the hex. Next, we
+% must see if the user specified ridges.
+%
+% \begin{macrocode}
+ \@ifundefined{hex@ridges}{\let\hex@ridges\empty}{}%
+ \ifx\hex@ridges\empty\else\hex@do@ridges\fi%
+% \end{macrocode}
+%
+% This concludes the processing of the ridges of the hex. Next, we
+% should process any extra (clipped) stuff specified. The user may
+% pass options to each \spec{pic}ture by preceding it with
+% \oarg{options}.
+%
+% \begin{macrocode}
+ \@ifundefined{hex@extra@clip}{\let\hex@extra@clip\empty}{}
+ \ifx\hex@extra@clip\empty\else%
+ \hex@dbg{5}{Extra clipped: `\meaning\hex@extra'}
+ \pgfpointorigin\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \wg@pic@all{\hex@extra@clip}{}{\the\wg@tmpa,\the\wg@tmpb}{}%
+ \fi%
+% \end{macrocode}
+%
+% This concludes the extra stuff put in the hex. Next, we should
+% place the label is specified. Note, we may know the hex row and
+% column at this point, stored in \cs{hex@row} and \cs{hex@column},
+% respectively. We may want to name the generated node from these if
+% the user specified that option (perhaps use \cs{pgfnoderename} or
+% similar).
+%
+% \begin{macrocode}
+ \@ifundefined{hex@label}{\let\hex@label\empty}{}
+ \ifx\hex@label\empty\else\hex@do@label\fi%
+ \endscope%
+% \end{macrocode}
+%
+% This concludes the label processing, and stuff that should be
+% clipped to the hex shape. If the user specified a town, we can now
+% make that.
+%
+% \begin{macrocode}
+ \@ifundefined{hex@town}{\let\hex@town\empty}{}
+ \@ifundefined{hex@c@pic}{\let\hex@c@pic\empty}{}
+ \ifx\hex@town\empty\else\hex@do@town\fi%
+% \end{macrocode}
+%
+% We can now add extra (non-clipped) stuff. We assume that extra
+% stuff is \spec{pic}tures. The user may pass options to each
+% \spec{pic}ture by preceding it with \oarg{options}.
+%
+% \begin{macrocode}
+ \@ifundefined{hex@extra}{\let\hex@extra\empty}{}
+ \ifx\hex@extra\empty\else%
+ \hex@dbg{5}{Extra: `\meaning\hex@extra'}
+ \pgfpointorigin\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \wg@pic@all{\hex@extra}{}{\the\wg@tmpa,\the\wg@tmpb}{}%
+ \fi%
+ }
+}
+% \end{macrocode}
+%
+% \begin{HexKey*}{
+% /hex/terrain,
+% /hex/town,
+% /hex/label,
+% /hex/ridges,
+% /hex/extra,
+% /hex/extra clipped}
+%
+% Next, we set up the name space for hex keys. This is the top level
+% name space for hexes. Sub keys \spec{terrain}, \spec{ridges},
+% \spec{town}, \spec{extra}, \spec{label}, and \spec{extra clipped},
+% store their arguments in macros and we expand these later on. This
+% allows us to scope some of the keys given to those specific parts.
+%
+% Define keys for hexagon options. These are
+%
+% \begin{tabular}{|l|p{.7\linewidth}|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Name}}
+% & {\color{headfg}\textbf{Description}}\\
+% \hline
+% \spec{terrain} & Terrain\\
+% \spec{label} & Label on hex\\
+% \spec{town} & Town in hex. Optionally with a name\\
+% \spec{ridges} & Ridge markings on hex\\
+% \spec{extra} & More \\
+% \spec{extra clipped} & More clipped to hex\\
+% \hline
+% \end{tabular}
+%
+% \begin{macrocode}
+\tikzset{%
+ /hex/.search also={/tikz},%
+ /hex/.cd,%
+ terrain/.store in=\hex@terrain,%
+ ridges/.store in=\hex@ridges,%
+ town/.store in=\hex@town,%
+ extra/.store in=\hex@extra,%
+ label/.store in=\hex@label,%
+ extra clipped/.store in=\hex@extra@clip%
+}
+% \end{macrocode}
+% \end{HexKey*}
+%
+% \begin{TikzKey}{hex}
+% The next key is the real work horse of the show. Specifying the
+% \spec{hex} key to a node effectively creates a hex for us. Now,
+% there are some things we cannot do outright in the node shape
+% code. For example, we cannot set the name of the node created
+% from the shape code. Therefore, the use of \cs{hex} is often the
+% right choice.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/hex/.style={
+ transform shape,
+ anchor=center,
+ draw=pgfstrokecolor,
+ fill=none,
+ thick,
+ solid},
+ hex/.code={%
+ \hex@dbg{1}{=== Hex with options: `#1'}%
+ \pgfkeys{/tikz/transform shape,/tikz/shape=hex/hex}
+ \pgfkeys{/hex/.cd,/tikz/hex/hex,/tikz/every hex/.try,#1}}}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% The first thing is to set the default graphics options. The key
+% \spec{every hex} can be set to hex options to be used for all hexes.
+% For example, if one want to label all hexes with an auto-generated
+% label, one can do
+%
+% \begin{Syntax}
+% \cs{tikzset}\{every hex/.style=\{label=\{auto=numbered\}\}\}
+% \end{Syntax}
+%
+% This, coupled with the \spec{hex/label is name} option allows us to
+% set up the board with really minimal effort. We can then use the
+% board coordinates when placing units, and other things.
+%
+%
+% Now we have set up these tools we can go on and define the user
+% facing macro.
+%
+% \begin{Macro}{\hex,\hex@,\hex@@}
+%
+% This will add a hex to the output graphics. Note, the macro
+% need not be followed by a semi-colon (\spec{;}).
+%
+% First argument is optional options.
+%
+% \begin{macrocode}
+\def\hex{%
+ \@ifnextchar[{\hex@}{\hex@[]}%]
+}
+% \end{macrocode}
+%
+% Second optional argument is the coordinates. These should be given
+% in the hex coordinate system.
+%
+% \begin{macrocode}
+\def\hex@[#1]{%
+ \@ifnextchar({\hex@@{#1}}{%
+ \hex@@{#1}(c=0,r=0)}%)
+}
+% \end{macrocode}
+%
+% Third argument is the name to be used.
+%
+% \begin{macrocode}
+\def\hex@@#1(#2){%
+ \@ifnextchar({\hex@@@{#1}{#2}}{\hex@@@{#1}{#2}()}%)
+}
+% \end{macrocode}
+%
+% Now for the real work-horse. First thing is to reset keys and parse
+% them out from the arguments.
+%
+% \begin{macrocode}
+% Third argument is name
+\def\hex@@@#1#2(#3){%
+ \node[hex={#1}] (tmp) at (hex cs:#2) {};%
+ \hex@dbg{8}{=== Label text: `\meaning\hex@l@text'}
+ \ifx|#3|\relax%
+ \@ifundefined{hex@l@text}{%
+ \hex@dbg{8}{=== Label text of hex (#2) not defined}%
+ \let\hex@l@text\empty%
+ }{}
+ \ifhex@label@is@name%
+ \hex@dbg{5}{=== Use label text of hex (#2) as name}%
+ \ifx\hex@l@text\@empty%
+ \hex@dbg{8}{=== Argh! Label text is empty! `\meaning\hex@l@text'}
+ \else%
+ \hex@dbg{3}{=== Renaming hex to label text `\hex@l@text'}
+ \pgfnoderename{\hex@l@text}{tmp}%
+ \fi%
+ \fi%
+ \else%
+ \hex@dbg{3}{=== Renaming hex to user defined name `#3'}%
+ \pgfnoderename{#3}{tmp}%
+ \fi%
+ \@ifnextchar;{\@gobble}{}%
+}
+% \end{macrocode}
+% \end{Macro}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain.dtx b/macros/latex/contrib/wargame/source/hex/terrain.dtx
new file mode 100644
index 0000000000..765b38e759
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain.dtx
@@ -0,0 +1,248 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Terrain}
+% \label{sec:impl:hex:terrain}
+%
+% With the above main routine for making hexes, we turn to decorating
+% a hex with a terrain.
+%
+% \begin{HexKey*}{hex/terrain/image,
+% hex/terrain/pic,
+% hex/terrain/code,
+% hex/terrain/clip}
+%
+% We make the namespace \spec{/hex/terrain} to hold the
+% specific terrain keys. Keys used by terrain identifiers are
+%
+% \begin{tabular}{|l|p{.7\linewidth}|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Name}}
+% & {\color{headfg}\textbf{Description}}\\
+% \hline
+% \spec{image} & Terrain tile image\\
+% \spec{pic} & Terrain \TikZ{} \spec{pic}ture\\
+% \spec{code} & Arbitary \TikZ{} code\\
+% \spec{clip} & \TikZ{} path to clip terrain\\
+% \hline
+% \end{tabular}
+%
+% Now, we have the keys we'll need for selecting the terrain. These
+% live in the namespace \spec{/hex/terrain}, and we can select
+% between \spec{pic}tures or \spec{image}s (external graphics files)
+% for making the terrain. We define some short hands to easily
+% select the common terrains.
+%
+% \begin{macrocode}
+\tikzset{%
+ /hex/terrain/.search also={/tikz},%
+ /hex/terrain/.cd,%
+ pic/.store in=\hex@t@pic,%
+ image/.store in=\hex@t@image,%
+ code/.store in=\hex@t@code,%
+ clip/.store in=\hex@t@clip,%
+ pic/.default=,
+ image/.default=,
+ code/.default=,
+ clip/.default,
+}
+\iffalse
+\tikzset{
+ /hex/terrain/.cd,%
+ beach/.style={pic=hex/terrain/beach},
+ light woods/.style={pic=hex/terrain/light woods},
+ woods/.style={pic=hex/terrain/woods},
+ swamp/.style={pic=hex/terrain/swamp},
+ rough/.style={pic=hex/terrain/rough},
+ mountains/.style={pic=hex/terrain/mountains},
+ village/.style={pic=hex/terrain/village},
+ town/.style={pic=hex/terrain/town},
+ city/.style={pic=hex/terrain/city},
+}
+\else
+\tikzset{
+ /hex/terrain/.cd,%
+ beach/.style={image=beach},
+ light woods/.style={image=light_woods},
+ woods/.style={image=woods},
+ swamp/.style={image=swamp},
+ rough/.style={image=rough},
+ mountains/.style={image=mountains},
+ village/.style={image=village},
+ town/.style={image=town},
+ city/.style={image=city},
+}
+\fi
+% \end{macrocode}
+% \end{HexKey*}
+%
+%
+% Before we go on, we define the macro that actually generates the
+% terrain of a hex.
+%
+% \begin{Macro}{\hex@do@terrain}
+% If we do have a terrain specified, we start a new scope, this time
+% to clip the terrain by the clipping path specified by
+% \spec{hex=\{terrain=\{clip=...\}\}}. The first thing into the new
+% scope is to process the keys specified in
+% \spec{hex=\{terrain=...\}}. This will set the terrain and the
+% clipping of the terrain.
+%
+% \begin{macrocode}
+\def\hex@do@terrain{%
+ \hex@dbg{5}{Terrain: \meaning\hex@terrain}%
+ \edef\hex@t@tmp{[/hex/terrain/.cd,\hex@terrain]}%
+ \expandafter\scope\hex@t@tmp% Scope for terrain clipping.
+ \hex@dbg{5}{Terrain:
+ ^^J pic: \meaning\hex@t@pic
+ ^^J image: \meaning\hex@t@image
+ ^^J code: \meaning\hex@t@code
+ ^^J clip: \meaning\hex@t@clip}
+% \end{macrocode}
+%
+% We check to see if we have any clipping \spec{pic}tures. If so, we
+% process these in turn and append the soft path to a macro. Once
+% this is done, we use the soft path as a clipping path for the rest
+% of the (terrain) scope.
+%
+% \begin{macrocode}
+ \@ifundefined{hex@t@clip}{\let\hex@t@clip\empty}{}
+ \ifx\hex@t@clip\empty\else%
+ \def\hex@t@c{}
+ \foreach \c in \hex@t@clip{%
+ \hex@dbg{5}{Clipping to `\c'}
+ \expandafter\wg@pic\c\@endwg@pic {}{\wg@tmpa,\wg@tmpb}{%
+ save path=\hex@t@tmp}%
+ \wg@addto@macro\hex@t@c\hex@t@tmp % Append to clippping
+ }%
+ \pgfsyssoftpath@setcurrentpath{\hex@t@c}% Set path
+ \clip;% Clip to the path
+ \fi % End of clipping terrain
+% \end{macrocode}
+%
+% We're new ready to make the terrain. First, we check to see if the
+% relevant storage macros are undefined and if so, \cs{let} them to
+% \cs{empty} so that we can deal more easily with the various cases.
+%
+% \begin{macrocode}
+ %% Now switch between how to draw the terrain. If some of the
+ %% macros are undefined, define them to be empty
+ \@ifundefined{hex@t@pic}{\let\hex@t@pic\empty}{}
+ \@ifundefined{hex@t@image}{\let\hex@t@image\empty}{}
+% \end{macrocode}
+%
+% First we check if we have not got terrain images, but terrain
+% pictures. If we have that, we process these in turn. Note, the
+% user can give options to each terrain picture by preceding the
+% \spec{pic}ture name with \oarg{options}.
+%
+% \begin{macrocode}
+ % If we have no image, check if we have pictures.
+ \ifx\hex@t@image\empty%
+ \hex@dbg{8}{No terrain images}%
+ \ifx\hex@t@pic\empty\else%
+ % We have pictures
+ \hex@dbg{5}{Terrain pictures}%
+ \pgfpointorigin\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \wg@pic@all{\hex@t@pic}{}{\the\wg@tmpa,\the\wg@tmpb}{}%
+ \fi% We have pictures.
+% \end{macrocode}
+%
+%
+% If the user specified images rather than \spec{pic}tures, then we
+% process these in turn. Again, the user can specify options to each
+% terrain image by preceding the image file name with \oarg{options}.
+%
+% \begin{macrocode}
+ \else % We have images
+ \hex@dbg{5}{Terrain images}%
+ \pgfpointorigin\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \foreach \i in \hex@t@image{%
+ \hex@dbg{10}{Terrain image: `\meaning\i'}
+ \expandafter\wg@node{%
+ \includegraphics[width=2cm]{\i}}\@endwg@node %
+ {}{\wg@tmpa,\wg@tmpb}{%
+ shape=rectangle,%
+ anchor=center,%
+ transform shape,%
+ draw=none}%
+ }
+ \fi%
+ \endscope% End of terrain scope
+}% End of terrain
+% \end{macrocode}
+% \end{Macro}
+%
+%
+%
+%
+
+%
+% Next, we define some example clippings of the terrain images.
+% Specifcally, we make clippings to sextants. We do this by first
+% defining a macro.
+%
+% \begin{Macro}{\hex@make@sextants}
+%
+% When executed this macro will generate some paths that will clip
+% to sextants. The first argument is the inner radius of the
+% sextant and the second argument is the (possible empty) prefix to
+% put in front of the \spec{sextant} name.
+%
+% \begin{macrocode}
+\def\hex@x@r{.7}
+\def\hex@make@sextants#1#2{%
+ \tikzset{%
+ pics/hex/#2sextant/.is choice,
+ pics/hex/#2sextant/north east/.style={
+ code={
+ \path[pic actions]( 0:1)--( 60:1)--( 60:#1)--( 0:#1)--cycle;}},
+ pics/hex/#2sextant/north/.style={
+ code={
+ \path[pic actions]( 60:1)--(120:1)--(120:#1)--( 60:#1)--cycle;}},
+ pics/hex/#2sextant/north west/.style={
+ code={
+ \path[pic actions](120:1)--(180:1)--(180:#1)--(120:#1)--cycle;}},
+ pics/hex/#2sextant/south west/.style={
+ code={
+ \path[pic actions](180:1)--(240:1)--(240:#1)--(180:#1)--cycle;}},
+ pics/hex/#2sextant/south/.style={
+ code={
+ \path[pic actions](240:1)--(300:1)--(300:#1)--(240:#1)--cycle;}},
+ pics/hex/#2sextant/south east/.style={
+ code={
+ \path[pic actions](300:1)--(360:1)--(360:#1)--(300:#1)--cycle;}},
+ pics/hex/#2sextant/center/.style={
+ code={
+ \path[pic actions]
+ (0:#1)--
+ (60:#1)--
+ (120:#1)--
+ (180:#1)--
+ (240:#1)--
+ (300:#1)--cycle;}},
+ pics/hex/#2sextant/NE/.style=hex/#2sextant/north east,
+ pics/hex/#2sextant/NE/.style=hex/#2sextant/north east,
+ pics/hex/#2sextant/N/.style=hex/#2sextant/north,
+ pics/hex/#2sextant/NW/.style=hex/#2sextant/north west,
+ pics/hex/#2sextant/SW/.style=hex/#2sextant/south west,
+ pics/hex/#2sextant/S/.style=hex/#2sextant/south,
+ pics/hex/#2sextant/SE/.style=hex/#2sextant/south east,
+ pics/hex/#2sextant/C/.style=hex/#2sextant/center,
+ }
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{macrocode}
+\hex@make@sextants{.7}{}
+\hex@make@sextants{.3}{large }
+\hex@make@sextants{0}{full }
+% \end{macrocode}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/beach.dtx b/macros/latex/contrib/wargame/source/hex/terrain/beach.dtx
new file mode 100644
index 0000000000..98e990c15c
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/beach.dtx
@@ -0,0 +1,698 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% Next, we define some styles for styling the terrain pictures. Users
+% can change these styles (e.g., by appending to them) to change say
+% the colour of the terrain graphics.
+%
+%
+% \begin{TikzKey}{hex/terrain/beach}
+% The style for beach hexes. The pattern is filled with a yellowish
+% colour, and drawing of the outline is disabled.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/beach/.style={%
+ fill={rgb,100:red,93;green,73;blue,35},%
+ draw=none%
+ }%
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% Now for the actual patterns. We go in the same order as above ---
+% i.e, we start with the beach pattern. This is rather long.
+%
+% \begin{TikzKey}{hex/terrain/beach}
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/beach/.pic={
+ \path[hex/terrain/beach,pic actions,draw=none]
+ (-0.4931, 0.8848)
+ -- (-0.4998, 0.8734)
+ .. controls (-0.4908, 0.8731) and (-0.4813, 0.8762) .. (-0.4762, 0.8847)
+ --cycle
+ (-0.4032, 0.8841)
+ .. controls (-0.4004, 0.8804) and (-0.3988, 0.8794) .. (-0.3956, 0.8745)
+ .. controls (-0.3760, 0.8443) and (-0.3811, 0.8330) .. (-0.3456, 0.8112)
+ .. controls (-0.3250, 0.7986) and (-0.2712, 0.7770) .. (-0.2531, 0.8032)
+ .. controls (-0.2294, 0.8375) and (-0.2984, 0.8503) .. (-0.3193, 0.8690)
+ .. controls (-0.3243, 0.8735) and (-0.3281, 0.8785) .. (-0.3321, 0.8835)
+ --cycle
+ (-0.2462, 0.8828)
+ .. controls (-0.2425, 0.8681) and (-0.2383, 0.8546) .. (-0.2293, 0.8461)
+ .. controls (-0.2102, 0.8280) and (-0.1892, 0.8390) .. (-0.1859, 0.8669)
+ .. controls (-0.1854, 0.8711) and (-0.1871, 0.8772) .. (-0.1875, 0.8822)
+ --cycle
+ (-0.0997, 0.8815)
+ .. controls (-0.0971, 0.8706) and (-0.0941, 0.8597) .. (-0.0907, 0.8493)
+ -- (-0.0570, 0.8578)
+ .. controls (-0.0570, 0.8629) and (-0.0560, 0.8730) .. (-0.0553, 0.8812)
+ --cycle
+ ( 0.0213, 0.8805)
+ .. controls ( 0.0222, 0.8725) and ( 0.0235, 0.8650) .. ( 0.0262, 0.8587)
+ .. controls ( 0.0391, 0.8281) and ( 0.0706, 0.8199) .. ( 0.0917, 0.7894)
+ .. controls ( 0.1112, 0.7609) and ( 0.1058, 0.7286) .. ( 0.1050, 0.6961)
+ -- ( 0.1731, 0.7216)
+ -- ( 0.1203, 0.8649)
+ -- ( 0.1097, 0.8797)
+ --cycle
+ ( 0.2978, 0.8781)
+ .. controls ( 0.2985, 0.8773) and ( 0.3002, 0.8756) .. ( 0.3008, 0.8749)
+ .. controls ( 0.2854, 0.8687) and ( 0.2549, 0.8572) .. ( 0.2421, 0.8487)
+ .. controls ( 0.2026, 0.8224) and ( 0.1905, 0.7567) .. ( 0.2046, 0.7132)
+ .. controls ( 0.2146, 0.6819) and ( 0.2330, 0.6680) .. ( 0.2394, 0.6280)
+ .. controls ( 0.2413, 0.6160) and ( 0.2468, 0.5527) .. ( 0.2446, 0.5437)
+ .. controls ( 0.2396, 0.5232) and ( 0.2211, 0.5122) .. ( 0.2231, 0.4913)
+ .. controls ( 0.2261, 0.4603) and ( 0.2686, 0.4388) .. ( 0.2891, 0.4194)
+ .. controls ( 0.3020, 0.4071) and ( 0.3136, 0.3895) .. ( 0.3281, 0.3799)
+ .. controls ( 0.3688, 0.3533) and ( 0.3905, 0.3863) .. ( 0.4199, 0.3902)
+ .. controls ( 0.4350, 0.3921) and ( 0.4560, 0.3849) .. ( 0.4710, 0.3812)
+ -- ( 0.4795, 0.4067)
+ -- ( 0.4965, 0.4067)
+ .. controls ( 0.5008, 0.3961) and ( 0.5009, 0.3893) .. ( 0.5112, 0.3811)
+ .. controls ( 0.5112, 0.3811) and ( 0.6172, 0.3385) .. ( 0.6481, 0.3037)
+ .. controls ( 0.6729, 0.2758) and ( 0.6641, 0.2532) .. ( 0.6667, 0.2206)
+ -- ( 0.7004, 0.2206)
+ .. controls ( 0.7839, 0.2118) and ( 0.7047, 0.0740) .. ( 0.7057, 0.0568)
+ .. controls ( 0.7067, 0.0396) and ( 0.7865,-0.0424) .. ( 0.8032,-0.0520)
+ .. controls ( 0.8251,-0.0644) and ( 0.8703,-0.0686) .. ( 0.8572,-0.0293)
+ .. controls ( 0.8518,-0.0131) and ( 0.7996, 0.0474) .. ( 0.7843, 0.0564)
+ .. controls ( 0.7724, 0.0633) and ( 0.7645, 0.0636) .. ( 0.7518, 0.0664)
+ .. controls ( 0.7688, 0.1093) and ( 0.7993, 0.1905) .. ( 0.7930, 0.2362)
+ .. controls ( 0.7869, 0.2804) and ( 0.7252, 0.2982) .. ( 0.6946, 0.3268)
+ .. controls ( 0.6664, 0.3531) and ( 0.6746, 0.3662) .. ( 0.6323, 0.3966)
+ .. controls ( 0.5760, 0.4371) and ( 0.5386, 0.4324) .. ( 0.5250, 0.4601)
+ .. controls ( 0.5090, 0.4927) and ( 0.5578, 0.6035) .. ( 0.5969, 0.5911)
+ .. controls ( 0.6199, 0.5839) and ( 0.6224, 0.5471) .. ( 0.6341, 0.5291)
+ .. controls ( 0.6488, 0.5064) and ( 0.7020, 0.4614) .. ( 0.7263, 0.4493)
+ -- ( 0.7373, 0.4768)
+ -- ( 0.6866, 0.5671)
+ -- ( 0.6756, 0.5720)
+ -- ( 0.6766, 0.5850)
+ -- ( 0.6331, 0.6627)
+ .. controls ( 0.6280, 0.6613) and ( 0.6239, 0.6599) .. ( 0.6157, 0.6589)
+ -- ( 0.5646, 0.6589)
+ .. controls ( 0.5375, 0.6557) and ( 0.5277, 0.6432) .. ( 0.4965, 0.6489)
+ .. controls ( 0.4716, 0.6520) and ( 0.4306, 0.6774) .. ( 0.4104, 0.6489)
+ .. controls ( 0.3809, 0.6093) and ( 0.4627, 0.6240) .. ( 0.4837, 0.5772)
+ .. controls ( 0.4958, 0.5502) and ( 0.4652, 0.4811) .. ( 0.4429, 0.4648)
+ -- ( 0.3523, 0.4350)
+ .. controls ( 0.3178, 0.4372) and ( 0.3207, 0.4766) .. ( 0.3153, 0.5004)
+ .. controls ( 0.3090, 0.5282) and ( 0.2968, 0.5398) .. ( 0.2922, 0.5684)
+ .. controls ( 0.2896, 0.6035) and ( 0.3061, 0.6276) .. ( 0.2922, 0.6621)
+ .. controls ( 0.2756, 0.6961) and ( 0.2422, 0.7190) .. ( 0.2525, 0.7640)
+ .. controls ( 0.2650, 0.8188) and ( 0.3165, 0.7932) .. ( 0.3324, 0.8417)
+ .. controls ( 0.3359, 0.8522) and ( 0.3385, 0.8648) .. ( 0.3399, 0.8778)
+ --cycle
+ ( 0.4261, 0.8770)
+ -- ( 0.4333, 0.8493)
+ -- ( 0.4845, 0.7440)
+ .. controls ( 0.4963, 0.7304) and ( 0.5450, 0.6930) .. ( 0.5630, 0.6989)
+ .. controls ( 0.5735, 0.7024) and ( 0.5838, 0.7169) .. ( 0.5932, 0.7337)
+ -- ( 0.5612, 0.7909)
+ .. controls ( 0.5537, 0.7875) and ( 0.5468, 0.7852) .. ( 0.5403, 0.7864)
+ .. controls ( 0.5078, 0.7926) and ( 0.5191, 0.8406) .. ( 0.5145, 0.8567)
+ .. controls ( 0.5121, 0.8651) and ( 0.5076, 0.8710) .. ( 0.5025, 0.8764)
+ --cycle
+ ( 0.3773, 0.8153)
+ .. controls ( 0.3625, 0.7892) and ( 0.2993, 0.7161) .. ( 0.3316, 0.6877)
+ .. controls ( 0.3432, 0.6774) and ( 0.3866, 0.6728) .. ( 0.4029, 0.6706)
+ -- ( 0.3973, 0.7472)
+ -- ( 0.4029, 0.8153)
+ --cycle
+ (-0.4224, 0.8088)
+ .. controls (-0.4416, 0.8077) and (-0.4585, 0.7826) .. (-0.4275, 0.7562)
+ -- (-0.3971, 0.7387)
+ .. controls (-0.4780, 0.6942) and (-0.4752, 0.6640) .. (-0.4591, 0.5855)
+ .. controls (-0.4391, 0.4887) and (-0.4527, 0.5347) .. (-0.4103, 0.4493)
+ .. controls (-0.3870, 0.4026) and (-0.4070, 0.3747) .. (-0.3460, 0.3642)
+ -- (-0.3352, 0.4823)
+ .. controls (-0.3409, 0.5024) and (-0.3617, 0.5113) .. (-0.3739, 0.5281)
+ -- (-0.4164, 0.6287)
+ .. controls (-0.4188, 0.6375) and (-0.4186, 0.6444) .. (-0.4164, 0.6528)
+ .. controls (-0.4067, 0.6807) and (-0.3521, 0.7255) .. (-0.3274, 0.6931)
+ .. controls (-0.3070, 0.6694) and (-0.3336, 0.6432) .. (-0.3274, 0.6221)
+ .. controls (-0.3249, 0.6055) and (-0.3059, 0.6028) .. (-0.2950, 0.6162)
+ .. controls (-0.2867, 0.6265) and (-0.2838, 0.6558) .. (-0.2829, 0.6692)
+ .. controls (-0.2775, 0.7444) and (-0.3333, 0.7652) .. (-0.3955, 0.7472)
+ .. controls (-0.3950, 0.7586) and (-0.3916, 0.7684) .. (-0.3955, 0.7803)
+ .. controls (-0.3986, 0.8016) and (-0.4109, 0.8096) .. (-0.4224, 0.8088)
+ --cycle
+ (-0.1391, 0.8077)
+ .. controls (-0.1634, 0.8024) and (-0.1582, 0.7647) .. (-0.1487, 0.7492)
+ .. controls (-0.1306, 0.7190) and (-0.1004, 0.7270) .. (-0.0652, 0.7073)
+ -- (-0.0226, 0.6801)
+ -- ( 0.0282, 0.6560)
+ .. controls ( 0.0622, 0.6331) and ( 0.0955, 0.5639) .. ( 0.1219, 0.5259)
+ .. controls ( 0.2125, 0.5714) and ( 0.1427, 0.6114) .. ( 0.1219, 0.6453)
+ -- ( 0.1054, 0.6768)
+ .. controls ( 0.0862, 0.7028) and ( 0.0448, 0.7080) .. ( 0.0115, 0.7299)
+ .. controls (-0.0377, 0.7622) and (-0.0173, 0.7726) .. (-0.0822, 0.7918)
+ .. controls (-0.0961, 0.7958) and (-0.1270, 0.8103) .. (-0.1391, 0.8077)
+ --cycle
+ (-0.5460, 0.7940)
+ -- (-0.5911, 0.7166)
+ .. controls (-0.5649, 0.7015) and (-0.5397, 0.7188) .. (-0.5308, 0.7556)
+ .. controls (-0.5251, 0.7788) and (-0.5335, 0.7873) .. (-0.5460, 0.7940)
+ --cycle
+ (-0.2382, 0.7423)
+ .. controls (-0.2453, 0.7424) and (-0.2512, 0.7383) .. (-0.2550, 0.7274)
+ .. controls (-0.2635, 0.7026) and (-0.2353, 0.6726) .. (-0.2229, 0.6536)
+ .. controls (-0.2031, 0.6234) and (-0.2020, 0.6105) .. (-0.1928, 0.5770)
+ .. controls (-0.1763, 0.5803) and (-0.1499, 0.5890) .. (-0.1342, 0.5831)
+ .. controls (-0.1112, 0.5745) and (-0.1047, 0.5481) .. (-0.0866, 0.5338)
+ -- (-0.0397, 0.5102)
+ -- ( 0.0664, 0.4219)
+ .. controls ( 0.0874, 0.3954) and ( 0.0785, 0.3655) .. ( 0.1070, 0.3502)
+ .. controls ( 0.1367, 0.3343) and ( 0.1690, 0.3592) .. ( 0.1732, 0.3899)
+ .. controls ( 0.1755, 0.4075) and ( 0.1545, 0.4554) .. ( 0.1475, 0.4748)
+ .. controls ( 0.0838, 0.4666) and ( 0.0509, 0.4836) .. ( 0.0454, 0.5515)
+ .. controls (-0.0576, 0.5778) and (-0.0955, 0.6323) .. (-0.1754, 0.6949)
+ .. controls (-0.1861, 0.7034) and (-0.2171, 0.7418) .. (-0.2382, 0.7423)
+ --cycle
+ (-0.5068, 0.6706)
+ .. controls (-0.5119, 0.6724) and (-0.5194, 0.6726) .. (-0.5299, 0.6701)
+ .. controls (-0.5512, 0.6413) and (-0.5242, 0.6333) .. (-0.5102, 0.6400)
+ .. controls (-0.4981, 0.6457) and (-0.4916, 0.6653) .. (-0.5068, 0.6706)
+ --cycle
+ (-0.6356, 0.6402)
+ -- (-0.6681, 0.5845)
+ -- (-0.6588, 0.5684)
+ .. controls (-0.6473, 0.5521) and (-0.6323, 0.5371) .. (-0.6265, 0.5174)
+ .. controls (-0.6174, 0.4865) and (-0.6614, 0.4161) .. (-0.6950, 0.4206)
+ .. controls (-0.7111, 0.4226) and (-0.7174, 0.4376) .. (-0.7460, 0.4507)
+ -- (-0.7632, 0.4212)
+ .. controls (-0.7629, 0.4042) and (-0.7611, 0.3875) .. (-0.7546, 0.3789)
+ .. controls (-0.7424, 0.3626) and (-0.7129, 0.3612) .. (-0.6966, 0.3297)
+ .. controls (-0.6823, 0.3022) and (-0.6963, 0.2741) .. (-0.6808, 0.2598)
+ .. controls (-0.6602, 0.2410) and (-0.6495, 0.2720) .. (-0.6484, 0.2878)
+ .. controls (-0.6461, 0.3229) and (-0.6488, 0.4046) .. (-0.6080, 0.4204)
+ .. controls (-0.5750, 0.4330) and (-0.4980, 0.3514) .. (-0.4929, 0.3217)
+ .. controls (-0.4895, 0.3019) and (-0.5044, 0.2671) .. (-0.4860, 0.2550)
+ .. controls (-0.4691, 0.2439) and (-0.4582, 0.2679) .. (-0.4535, 0.2796)
+ .. controls (-0.4450, 0.3015) and (-0.4273, 0.3562) .. (-0.4401, 0.3771)
+ .. controls (-0.4495, 0.3922) and (-0.5019, 0.4172) .. (-0.5296, 0.4507)
+ .. controls (-0.5656, 0.4941) and (-0.5734, 0.5631) .. (-0.5973, 0.6021)
+ .. controls (-0.6099, 0.6226) and (-0.6226, 0.6316) .. (-0.6356, 0.6402)
+ --cycle
+ ( 0.2242, 0.6110)
+ -- ( 0.1816, 0.6025)
+ -- ( 0.1816, 0.5855)
+ .. controls ( 0.2117, 0.5815) and ( 0.2140, 0.5821) .. ( 0.2242, 0.6110)
+ --cycle
+ ( 0.3924, 0.6049)
+ .. controls ( 0.3895, 0.6048) and ( 0.3860, 0.6036) .. ( 0.3820, 0.6011)
+ .. controls ( 0.3535, 0.5835) and ( 0.3670, 0.5238) .. ( 0.3773, 0.5004)
+ -- ( 0.3944, 0.5004)
+ -- ( 0.4061, 0.5429)
+ .. controls ( 0.4082, 0.5540) and ( 0.4130, 0.6056) .. ( 0.3924, 0.6049)
+ --cycle
+ (-0.2864, 0.5940)
+ .. controls (-0.2904, 0.5793) and (-0.2950, 0.5676) .. (-0.2919, 0.5518)
+ .. controls (-0.2769, 0.4768) and (-0.1616, 0.5041) .. (-0.2162, 0.5623)
+ .. controls (-0.2236, 0.5702) and (-0.2346, 0.5747) .. (-0.2443, 0.5790)
+ --cycle
+ (-0.7010, 0.5280)
+ -- (-0.7269, 0.4835)
+ .. controls (-0.7207, 0.4876) and (-0.7144, 0.4952) .. (-0.7081, 0.5094)
+ --cycle
+ (-0.0992, 0.4748)
+ -- (-0.2099, 0.4556)
+ -- (-0.2888, 0.3790)
+ -- (-0.3460, 0.3557)
+ -- (-0.3389, 0.3218)
+ .. controls (-0.3310, 0.2959) and (-0.3026, 0.2636) .. (-0.2781, 0.2927)
+ .. controls (-0.2745, 0.2971) and (-0.2504, 0.3947) .. (-0.1948, 0.3764)
+ .. controls (-0.1607, 0.3651) and (-0.1697, 0.2984) .. (-0.1588, 0.2536)
+ -- (-0.1503, 0.2536)
+ -- (-0.1503, 0.2450)
+ -- (-0.1163, 0.2366)
+ .. controls (-0.0968, 0.3059) and (-0.1262, 0.3371) .. (-0.1239, 0.3982)
+ .. controls (-0.1229, 0.4261) and (-0.1067, 0.4484) .. (-0.0992, 0.4748)
+ --cycle
+ (-0.1503, 0.2450)
+ -- (-0.1588, 0.2536)
+ .. controls (-0.2292, 0.2544) and (-0.2730, 0.2893) .. (-0.2677, 0.2195)
+ -- (-0.2609, 0.1855)
+ .. controls (-0.2393, 0.1890) and (-0.2005, 0.2039) .. (-0.1909, 0.1753)
+ .. controls (-0.1709, 0.1163) and (-0.2582, 0.0953) .. (-0.2387, 0.0533)
+ .. controls (-0.2275, 0.0292) and (-0.1430, 0.0537) .. (-0.1361, 0.0692)
+ .. controls (-0.1250, 0.0859) and (-0.1359, 0.1083) .. (-0.1361, 0.1259)
+ .. controls (-0.1437, 0.1788) and (-0.1186, 0.1766) .. (-0.1503, 0.2450)
+ --cycle
+ ( 0.7348, 0.4408)
+ .. controls ( 0.7113, 0.3774) and ( 0.7569, 0.3513) .. ( 0.7901, 0.3824)
+ -- ( 0.7585, 0.4390)
+ --cycle
+ ( 0.2071, 0.4153)
+ .. controls ( 0.1984, 0.3706) and ( 0.2118, 0.3204) .. ( 0.2582, 0.3046)
+ .. controls ( 0.2685, 0.3631) and ( 0.2706, 0.3931) .. ( 0.2071, 0.4153)
+ --cycle
+ (-0.0567, 0.3982)
+ .. controls (-0.0558, 0.3230) and (-0.0460, 0.3456) .. (-0.0210, 0.2876)
+ -- ( 0.0067, 0.1940)
+ .. controls ( 0.0180, 0.1513) and ( 0.0026, 0.1332) .. ( 0.0454, 0.1089)
+ -- ( 0.0767, 0.1940)
+ -- ( 0.0546, 0.2621)
+ -- ( 0.0406, 0.3185)
+ -- (-0.0258, 0.3896)
+ --cycle
+ (-0.7969, 0.3634)
+ -- (-0.8570, 0.2602)
+ .. controls (-0.8515, 0.2550) and (-0.8469, 0.2514) .. (-0.8414, 0.2450)
+ .. controls (-0.8020, 0.1990) and (-0.8201, 0.1971) .. (-0.7629, 0.1540)
+ .. controls (-0.7462, 0.1414) and (-0.7054, 0.1023) .. (-0.6834, 0.1181)
+ .. controls (-0.6662, 0.1304) and (-0.6813, 0.1625) .. (-0.6882, 0.1768)
+ .. controls (-0.7213, 0.2456) and (-0.7865, 0.2417) .. (-0.8004, 0.2965)
+ .. controls (-0.8052, 0.3154) and (-0.7990, 0.3413) .. (-0.7969, 0.3634)
+ --cycle
+ ( 0.8244, 0.3214)
+ .. controls ( 0.8136, 0.3128) and ( 0.8080, 0.2984) .. ( 0.8114, 0.2706)
+ .. controls ( 0.8314, 0.2739) and ( 0.8424, 0.2735) .. ( 0.8526, 0.2710)
+ --cycle
+ ( 0.5015, 0.3207)
+ .. controls ( 0.4943, 0.3196) and ( 0.4861, 0.3171) .. ( 0.4766, 0.3130)
+ .. controls ( 0.4611, 0.2827) and ( 0.4839, 0.2747) .. ( 0.5028, 0.2521)
+ -- ( 0.5376, 0.1972)
+ .. controls ( 0.5529, 0.1772) and ( 0.5728, 0.1698) .. ( 0.5845, 0.1426)
+ .. controls ( 0.5979, 0.1115) and ( 0.5837, 0.0732) .. ( 0.5987, 0.0532)
+ .. controls ( 0.6095, 0.0384) and ( 0.6236, 0.0428) .. ( 0.6350, 0.0532)
+ .. controls ( 0.6681, 0.0842) and ( 0.6456, 0.1087) .. ( 0.6482, 0.1429)
+ .. controls ( 0.6481, 0.1614) and ( 0.6596, 0.1802) .. ( 0.6482, 0.1967)
+ .. controls ( 0.6390, 0.2131) and ( 0.5992, 0.2239) .. ( 0.5768, 0.2483)
+ .. controls ( 0.5547, 0.2722) and ( 0.5524, 0.3288) .. ( 0.5015, 0.3207)
+ --cycle
+ (-0.5678, 0.3115)
+ .. controls (-0.5832, 0.3118) and (-0.6140, 0.2810) .. (-0.6269, 0.2706)
+ .. controls (-0.6185, 0.2412) and (-0.5926, 0.1953) .. (-0.5973, 0.1685)
+ .. controls (-0.6029, 0.1373) and (-0.6320, 0.1239) .. (-0.6369, 0.0996)
+ .. controls (-0.6406, 0.0816) and (-0.6303, 0.0652) .. (-0.6237, 0.0493)
+ .. controls (-0.6147, 0.0275) and (-0.6000,-0.0443) .. (-0.5641,-0.0258)
+ .. controls (-0.5134,-0.0018) and (-0.5902, 0.0606) .. (-0.5641, 0.1074)
+ .. controls (-0.5332, 0.1697) and (-0.4913, 0.1444) .. (-0.4481, 0.1593)
+ .. controls (-0.3913, 0.1792) and (-0.3439, 0.2446) .. (-0.3545, 0.3046)
+ -- (-0.4568, 0.2201)
+ -- (-0.5588, 0.2201)
+ .. controls (-0.5549, 0.2390) and (-0.5305, 0.3109) .. (-0.5678, 0.3115)
+ --cycle
+ ( 0.2243, 0.2813)
+ -- ( 0.1631, 0.2450)
+ -- ( 0.0965, 0.2281)
+ -- ( 0.1689, 0.1131)
+ -- ( 0.2065, 0.0861)
+ .. controls ( 0.2453, 0.0564) and ( 0.2384, 0.0410) .. ( 0.2923, 0.0323)
+ -- ( 0.2988,-0.0188)
+ .. controls ( 0.2994,-0.0695) and ( 0.2657,-0.0796) .. ( 0.2249,-0.0579)
+ .. controls ( 0.1337,-0.0093) and ( 0.1545, 0.0219) .. ( 0.1102, 0.0744)
+ .. controls ( 0.0914, 0.0967) and ( 0.0807, 0.1010) .. ( 0.0539, 0.1089)
+ .. controls ( 0.0562, 0.0613) and ( 0.0756,-0.0434) .. ( 0.0403,-0.0825)
+ .. controls ( 0.0293,-0.0948) and (-0.0336,-0.1168) .. (-0.0567,-0.1294)
+ .. controls (-0.0615,-0.1087) and (-0.0777,-0.0729) .. (-0.0703,-0.0546)
+ .. controls (-0.0586,-0.0251) and ( 0.0562, 0.0040) .. (-0.0152, 0.0389)
+ -- (-0.0397, 0.0480)
+ -- (-0.0737, 0.0578)
+ .. controls (-0.0806, 0.0391) and (-0.0849, 0.0192) .. (-0.1018, 0.0068)
+ .. controls (-0.1154,-0.0032) and (-0.1352,-0.0018) .. (-0.1438,-0.0212)
+ .. controls (-0.1562,-0.0491) and (-0.1117,-0.1243) .. (-0.0874,-0.1373)
+ .. controls (-0.0745,-0.1434) and (-0.0687,-0.1394) .. (-0.0567,-0.1373)
+ .. controls (-0.0358,-0.2033) and (-0.0062,-0.1612) .. ( 0.0370,-0.1500)
+ -- ( 0.1050,-0.1379)
+ .. controls ( 0.0882,-0.0871) and ( 0.0808,-0.0999) .. ( 0.0965,-0.0443)
+ .. controls ( 0.1454,-0.0619) and ( 0.1336,-0.0743) .. ( 0.1664,-0.0940)
+ .. controls ( 0.1897,-0.1081) and ( 0.2226,-0.1052) .. ( 0.2361,-0.1388)
+ .. controls ( 0.2495,-0.1724) and ( 0.2245,-0.1963) .. ( 0.2412,-0.2584)
+ .. controls ( 0.2526,-0.2569) and ( 0.2622,-0.2548) .. ( 0.2735,-0.2584)
+ .. controls ( 0.2987,-0.2708) and ( 0.3225,-0.3241) .. ( 0.3212,-0.3506)
+ .. controls ( 0.3203,-0.3711) and ( 0.3053,-0.3950) .. ( 0.3008,-0.4443)
+ -- ( 0.2497,-0.4187)
+ .. controls ( 0.2599,-0.4479) and ( 0.2621,-0.4475) .. ( 0.2905,-0.4528)
+ .. controls ( 0.2877,-0.4715) and ( 0.2799,-0.4998) .. ( 0.2905,-0.5182)
+ .. controls ( 0.2991,-0.5392) and ( 0.3228,-0.5357) .. ( 0.3346,-0.5182)
+ .. controls ( 0.3506,-0.4943) and ( 0.3355,-0.4515) .. ( 0.3532,-0.4203)
+ .. controls ( 0.3716,-0.3881) and ( 0.4096,-0.3844) .. ( 0.4084,-0.3499)
+ .. controls ( 0.4074,-0.3241) and ( 0.3866,-0.3087) .. ( 0.3728,-0.2897)
+ -- ( 0.3426,-0.2337)
+ -- ( 0.2989,-0.1879)
+ .. controls ( 0.2810,-0.1587) and ( 0.2976,-0.1327) .. ( 0.3187,-0.1323)
+ .. controls ( 0.3342,-0.1319) and ( 0.3489,-0.1451) .. ( 0.3603,-0.1541)
+ .. controls ( 0.3817,-0.1712) and ( 0.4026,-0.1894) .. ( 0.4144,-0.2146)
+ .. controls ( 0.4299,-0.2477) and ( 0.4289,-0.2977) .. ( 0.4712,-0.3110)
+ .. controls ( 0.4957,-0.3188) and ( 0.5167,-0.3024) .. ( 0.5044,-0.2753)
+ .. controls ( 0.4967,-0.2585) and ( 0.4769,-0.2471) .. ( 0.4676,-0.2227)
+ .. controls ( 0.4582,-0.1981) and ( 0.4681,-0.1743) .. ( 0.4488,-0.1492)
+ .. controls ( 0.4286,-0.1227) and ( 0.3809,-0.1095) .. ( 0.3621,-0.0696)
+ .. controls ( 0.3402,-0.0230) and ( 0.3896, 0.0270) .. ( 0.3092, 0.0408)
+ -- ( 0.3532, 0.1933)
+ -- ( 0.3944, 0.2536)
+ -- ( 0.3433, 0.2765)
+ --cycle
+ ( 0.2497, 0.2450)
+ -- ( 0.2782, 0.2025)
+ .. controls ( 0.2843, 0.1911) and ( 0.2884, 0.1815) .. ( 0.2900, 0.1685)
+ .. controls ( 0.3021, 0.0654) and ( 0.1495, 0.1479) .. ( 0.2135, 0.2245)
+ .. controls ( 0.2246, 0.2378) and ( 0.2346, 0.2396) .. ( 0.2497, 0.2450)
+ --cycle
+ ( 0.8836, 0.2157)
+ .. controls ( 0.8688, 0.2061) and ( 0.8571, 0.1889) .. ( 0.8687, 0.1736)
+ .. controls ( 0.8785, 0.1608) and ( 0.8967, 0.1613) .. ( 0.9161, 0.1578)
+ --cycle
+ (-0.3035, 0.1940)
+ .. controls (-0.3340, 0.1390) and (-0.3508, 0.1491) .. (-0.3624, 0.1300)
+ .. controls (-0.3738, 0.1112) and (-0.3588, 0.0896) .. (-0.3288, 0.0972)
+ .. controls (-0.2842, 0.1084) and (-0.2392, 0.1714) .. (-0.3035, 0.1940)
+ --cycle
+ ( 0.4710, 0.1940)
+ .. controls ( 0.4330, 0.1525) and ( 0.3961, 0.1447) .. ( 0.4114, 0.0833)
+ .. controls ( 0.4294, 0.0897) and ( 0.4596, 0.1056) .. ( 0.4776, 0.0984)
+ .. controls ( 0.5010, 0.0888) and ( 0.5182, 0.0420) .. ( 0.4925, 0.0231)
+ .. controls ( 0.4698, 0.0064) and ( 0.4500, 0.0299) .. ( 0.3944, 0.0153)
+ .. controls ( 0.4243,-0.0189) and ( 0.4618,-0.0333) .. ( 0.4765,-0.0621)
+ .. controls ( 0.4928,-0.0939) and ( 0.4729,-0.1183) .. ( 0.4881,-0.1406)
+ .. controls ( 0.4977,-0.1549) and ( 0.5241,-0.1630) .. ( 0.5425,-0.1894)
+ .. controls ( 0.5557,-0.2085) and ( 0.5562,-0.2282) .. ( 0.5657,-0.2485)
+ -- ( 0.6122,-0.3251)
+ .. controls ( 0.6335,-0.3720) and ( 0.6160,-0.3973) .. ( 0.6323,-0.4443)
+ .. controls ( 0.6532,-0.5042) and ( 0.6754,-0.5231) .. ( 0.6973,-0.5440)
+ -- ( 0.7289,-0.4899)
+ .. controls ( 0.7138,-0.4739) and ( 0.6992,-0.4579) .. ( 0.6886,-0.4358)
+ -- ( 0.6489,-0.2690)
+ .. controls ( 0.6485,-0.2445) and ( 0.6654,-0.2180) .. ( 0.6598,-0.2002)
+ .. controls ( 0.6522,-0.1752) and ( 0.6202,-0.1899) .. ( 0.5938,-0.1612)
+ .. controls ( 0.5619,-0.1263) and ( 0.5907,-0.0980) .. ( 0.5797,-0.0720)
+ .. controls ( 0.5714,-0.0525) and ( 0.5434,-0.0441) .. ( 0.5374,-0.0184)
+ .. controls ( 0.5319, 0.0056) and ( 0.5522, 0.0300) .. ( 0.5533, 0.0578)
+ .. controls ( 0.5548, 0.0943) and ( 0.4981, 0.1701) .. ( 0.4710, 0.1940)
+ --cycle
+ (-0.9001, 0.1862)
+ -- (-0.9386, 0.1201)
+ .. controls (-0.9374, 0.1181) and (-0.9371, 0.1158) .. (-0.9356, 0.1139)
+ .. controls (-0.9242, 0.0996) and (-0.9046, 0.0893) .. (-0.8911, 0.0660)
+ .. controls (-0.8684, 0.0268) and (-0.8960, 0.0297) .. (-0.8592,-0.0296)
+ .. controls (-0.8262,-0.0830) and (-0.8655,-0.1092) .. (-0.7971,-0.1209)
+ -- (-0.7875, 0.0068)
+ -- (-0.8579, 0.1174)
+ --cycle
+ (-0.4453, 0.0979)
+ .. controls (-0.4922, 0.0916) and (-0.4988, 0.0347) .. (-0.4759, 0.0116)
+ .. controls (-0.4491,-0.0149) and (-0.4165, 0.0208) .. (-0.3900, 0.0116)
+ .. controls (-0.3555,-0.0011) and (-0.3800,-0.0410) .. (-0.3751,-0.0698)
+ -- (-0.3537,-0.1294)
+ .. controls (-0.3428,-0.1879) and (-0.4042,-0.1777) .. (-0.3801,-0.2656)
+ .. controls (-0.3617,-0.2531) and (-0.3352,-0.2292) .. (-0.3122,-0.2330)
+ .. controls (-0.2845,-0.2375) and (-0.2669,-0.2694) .. (-0.2543,-0.2911)
+ .. controls (-0.2183,-0.3533) and (-0.2004,-0.3613) .. (-0.2184,-0.4358)
+ .. controls (-0.3300,-0.4097) and (-0.2723,-0.5065) .. (-0.2483,-0.5549)
+ -- (-0.2129,-0.6314)
+ .. controls (-0.2017,-0.6508) and (-0.1900,-0.6661) .. (-0.1670,-0.6712)
+ .. controls (-0.1211,-0.6813) and (-0.1100,-0.6527) .. (-0.1163,-0.6145)
+ .. controls (-0.1327,-0.6119) and (-0.1427,-0.6118) .. (-0.1568,-0.6009)
+ .. controls (-0.1780,-0.5845) and (-0.2123,-0.5041) .. (-0.2042,-0.4783)
+ .. controls (-0.1947,-0.4484) and (-0.1575,-0.4121) .. (-0.1333,-0.3932)
+ -- (-0.1527,-0.3251)
+ -- (-0.1588,-0.2656)
+ .. controls (-0.2187,-0.2715) and (-0.2083,-0.2536) .. (-0.2457,-0.2163)
+ .. controls (-0.2684,-0.1935) and (-0.2911,-0.1886) .. (-0.2996,-0.1546)
+ -- (-0.2996,-0.1209)
+ -- (-0.3232,-0.0698)
+ .. controls (-0.3283,-0.0435) and (-0.3124,-0.0260) .. (-0.3175,-0.0041)
+ .. controls (-0.3251, 0.0283) and (-0.3891, 0.0917) .. (-0.4227, 0.0973)
+ .. controls (-0.4311, 0.0987) and (-0.4386, 0.0989) .. (-0.4453, 0.0979)
+ --cycle
+ (-0.1163,-0.6145)
+ -- (-0.0812,-0.6009)
+ -- (-0.0509,-0.4868)
+ -- (-0.0567,-0.4528)
+ .. controls (-0.1227,-0.4845) and (-0.1350,-0.5483) .. (-0.1163,-0.6145)
+ --cycle
+ ( 0.9165, 0.0573)
+ .. controls ( 0.8982, 0.0512) and ( 0.8800, 0.0260) .. ( 0.8880,-0.0013)
+ .. controls ( 0.8973,-0.0334) and ( 0.9330,-0.0408) .. ( 0.9466,-0.0703)
+ .. controls ( 0.9528,-0.0838) and ( 0.9514,-0.0964) .. ( 0.9506,-0.1091)
+ -- ( 1.0000,-0.0243)
+ .. controls ( 0.9816,-0.0179) and ( 0.9678,-0.0119) .. ( 0.9563, 0.0077)
+ .. controls ( 0.9465, 0.0244) and ( 0.9476, 0.0488) .. ( 0.9340, 0.0564)
+ .. controls ( 0.9288, 0.0593) and ( 0.9227, 0.0593) .. ( 0.9165, 0.0573)
+ --cycle
+ (-0.7064, 0.0069)
+ .. controls (-0.7128, 0.0077) and (-0.7187, 0.0075) .. (-0.7237, 0.0061)
+ .. controls (-0.7255, 0.0030) and (-0.7310, 0.0025) .. (-0.7316,-0.0115)
+ .. controls (-0.7321,-0.0230) and (-0.7071,-0.1058) .. (-0.6984,-0.1096)
+ .. controls (-0.6872,-0.1176) and (-0.6721,-0.1116) .. (-0.6609,-0.1096)
+ .. controls (-0.6502,-0.1046) and (-0.6316,-0.0986) .. (-0.6242,-0.0900)
+ .. controls (-0.5901,-0.0507) and (-0.6615, 0.0017) .. (-0.7064, 0.0069)
+ --cycle
+ (-1.0000, 0.0068)
+ -- (-1.0000, 0.0020)
+ -- (-0.9548,-0.0788)
+ .. controls (-0.9170,-0.0310) and (-0.9342,-0.0158) .. (-1.0000, 0.0068)
+ --cycle
+ (-0.2643, 0.0054)
+ .. controls (-0.2853,-0.0295) and (-0.2523,-0.0713) .. (-0.2182,-0.0843)
+ .. controls (-0.2024,-0.0902) and (-0.1781,-0.0944) .. (-0.1687,-0.0757)
+ .. controls (-0.1530,-0.0441) and (-0.2378, 0.0095) .. (-0.2643, 0.0054)
+ --cycle
+ ( 0.6299,-0.0102)
+ .. controls ( 0.6155,-0.0145) and ( 0.6071,-0.0342) .. ( 0.6128,-0.0510)
+ .. controls ( 0.6198,-0.0721) and ( 0.6440,-0.0790) .. ( 0.6606,-0.0986)
+ .. controls ( 0.6738,-0.1143) and ( 0.6761,-0.1328) .. ( 0.6948,-0.1437)
+ .. controls ( 0.7092,-0.1520) and ( 0.7311,-0.1484) .. ( 0.7401,-0.1664)
+ .. controls ( 0.7461,-0.1784) and ( 0.7351,-0.2363) .. ( 0.7348,-0.2570)
+ .. controls ( 0.7336,-0.3524) and ( 0.7289,-0.3324) .. ( 0.7620,-0.4187)
+ .. controls ( 0.7631,-0.4216) and ( 0.7642,-0.4246) .. ( 0.7652,-0.4275)
+ -- ( 0.8003,-0.3672)
+ .. controls ( 0.7976,-0.3636) and ( 0.7942,-0.3606) .. ( 0.7918,-0.3568)
+ .. controls ( 0.7778,-0.3349) and ( 0.7645,-0.2537) .. ( 0.7970,-0.2417)
+ .. controls ( 0.8206,-0.2330) and ( 0.8347,-0.2671) .. ( 0.8432,-0.2822)
+ -- ( 0.8469,-0.2872)
+ -- ( 0.8787,-0.2326)
+ -- ( 0.8594,-0.1993)
+ .. controls ( 0.8496,-0.1847) and ( 0.7996,-0.1314) .. ( 0.7847,-0.1281)
+ .. controls ( 0.7712,-0.1229) and ( 0.7642,-0.1268) .. ( 0.7518,-0.1281)
+ .. controls ( 0.7451,-0.1148) and ( 0.7397,-0.1014) .. ( 0.7293,-0.0886)
+ -- ( 0.6461,-0.0117)
+ .. controls ( 0.6402,-0.0090) and ( 0.6347,-0.0087) .. ( 0.6299,-0.0102)
+ --cycle
+ (-0.5178,-0.0844)
+ .. controls (-0.5451,-0.0820) and (-0.5852,-0.0947) .. (-0.5902,-0.1144)
+ .. controls (-0.6007,-0.1557) and (-0.5621,-0.1731) .. (-0.5414,-0.1997)
+ .. controls (-0.5274,-0.2177) and (-0.5229,-0.2355) .. (-0.5044,-0.2525)
+ .. controls (-0.4888,-0.2669) and (-0.4706,-0.2705) .. (-0.4543,-0.2923)
+ .. controls (-0.4420,-0.3087) and (-0.4220,-0.3707) .. (-0.4141,-0.3932)
+ .. controls (-0.3620,-0.3875) and (-0.3060,-0.4031) .. (-0.3060,-0.3592)
+ .. controls (-0.3060,-0.3272) and (-0.3358,-0.3272) .. (-0.3716,-0.3008)
+ .. controls (-0.4367,-0.2529) and (-0.4253,-0.2451) .. (-0.4621,-0.1914)
+ .. controls (-0.4700,-0.1800) and (-0.4814,-0.1685) .. (-0.4867,-0.1556)
+ .. controls (-0.4970,-0.1308) and (-0.4804,-0.1088) .. (-0.4966,-0.0923)
+ .. controls (-0.5011,-0.0877) and (-0.5087,-0.0853) .. (-0.5178,-0.0844)
+ --cycle
+ (-0.4165,-0.0846)
+ .. controls (-0.4357,-0.0807) and (-0.4622,-0.1075) .. (-0.4395,-0.1440)
+ .. controls (-0.4316,-0.1566) and (-0.4254,-0.1571) .. (-0.4141,-0.1634)
+ .. controls (-0.4094,-0.1522) and (-0.4042,-0.1415) .. (-0.4019,-0.1294)
+ .. controls (-0.3960,-0.1004) and (-0.4049,-0.0870) .. (-0.4165,-0.0846)
+ --cycle
+ (-0.9358,-0.1125)
+ -- (-0.8813,-0.2098)
+ .. controls (-0.8768,-0.1903) and (-0.8656,-0.1673) .. (-0.8723,-0.1485)
+ .. controls (-0.8801,-0.1269) and (-0.9022,-0.1274) .. (-0.9358,-0.1125)
+ --cycle
+ ( 0.1455,-0.1458)
+ .. controls ( 0.1402,-0.1449) and ( 0.1336,-0.1452) .. ( 0.1255,-0.1471)
+ .. controls ( 0.0901,-0.1850) and ( 0.1064,-0.2454) .. ( 0.1360,-0.2301)
+ .. controls ( 0.1569,-0.2194) and ( 0.1827,-0.1522) .. ( 0.1455,-0.1458)
+ --cycle
+ (-0.1477,-0.1474)
+ .. controls (-0.1646,-0.1458) and (-0.1813,-0.1543) .. (-0.1847,-0.1659)
+ .. controls (-0.1889,-0.1806) and (-0.1612,-0.2953) .. (-0.1163,-0.2315)
+ -- (-0.0420,-0.4418)
+ .. controls (-0.0291,-0.4661) and (-0.0068,-0.4600) .. ( 0.0136,-0.4880)
+ .. controls ( 0.0294,-0.5097) and ( 0.0259,-0.5331) .. ( 0.0419,-0.5487)
+ .. controls ( 0.0694,-0.5755) and ( 0.1462,-0.5710) .. ( 0.1798,-0.6001)
+ -- ( 0.2188,-0.6436)
+ .. controls ( 0.2392,-0.6605) and ( 0.2566,-0.6577) .. ( 0.2804,-0.6838)
+ .. controls ( 0.3122,-0.7186) and ( 0.3037,-0.7586) .. ( 0.3603,-0.7592)
+ .. controls ( 0.3537,-0.7217) and ( 0.3358,-0.6781) .. ( 0.3603,-0.6427)
+ .. controls ( 0.3743,-0.6222) and ( 0.3978,-0.6232) .. ( 0.4032,-0.6039)
+ .. controls ( 0.4084,-0.5852) and ( 0.3901,-0.5654) .. ( 0.3712,-0.5741)
+ .. controls ( 0.3573,-0.5804) and ( 0.3558,-0.5936) .. ( 0.3518,-0.6044)
+ .. controls ( 0.3319,-0.6046) and ( 0.2996,-0.6092) .. ( 0.2842,-0.6044)
+ .. controls ( 0.2568,-0.5917) and ( 0.2515,-0.5648) .. ( 0.2231,-0.5501)
+ .. controls ( 0.1960,-0.5359) and ( 0.1632,-0.5421) .. ( 0.1413,-0.5292)
+ -- ( 0.0626,-0.4601)
+ .. controls ( 0.0525,-0.4430) and ( 0.0547,-0.4207) .. ( 0.0440,-0.4065)
+ .. controls ( 0.0320,-0.3906) and ( 0.0076,-0.3898) .. (-0.0104,-0.3714)
+ .. controls (-0.0515,-0.3289) and ( 0.0146,-0.2721) .. (-0.0737,-0.2358)
+ .. controls (-0.0903,-0.2290) and (-0.0917,-0.2313) .. (-0.1098,-0.2315)
+ -- (-0.1098,-0.1892)
+ .. controls (-0.1137,-0.1607) and (-0.1308,-0.1491) .. (-0.1477,-0.1474)
+ --cycle
+ (-0.7679,-0.1481)
+ .. controls (-0.8119,-0.1523) and (-0.8157,-0.2051) .. (-0.8303,-0.2401)
+ -- (-0.8453,-0.2740)
+ -- (-0.8299,-0.3015)
+ .. controls (-0.7861,-0.2968) and (-0.8116,-0.2403) .. (-0.7732,-0.2278)
+ .. controls (-0.7561,-0.2223) and (-0.7349,-0.2415) .. (-0.7204,-0.2497)
+ .. controls (-0.6711,-0.2774) and (-0.6473,-0.2864) .. (-0.6524,-0.3506)
+ -- (-0.6787,-0.3422)
+ .. controls (-0.6786,-0.3475) and (-0.6826,-0.3544) .. (-0.6787,-0.3655)
+ .. controls (-0.6635,-0.4244) and (-0.5943,-0.3658) .. (-0.5763,-0.3760)
+ .. controls (-0.5586,-0.3861) and (-0.5497,-0.4251) .. (-0.5357,-0.4418)
+ .. controls (-0.5118,-0.4701) and (-0.4694,-0.4662) .. (-0.4504,-0.5047)
+ .. controls (-0.4231,-0.5599) and (-0.4535,-0.6772) .. (-0.4451,-0.7421)
+ .. controls (-0.4389,-0.7901) and (-0.4023,-0.8005) .. (-0.3912,-0.8443)
+ .. controls (-0.3883,-0.8558) and (-0.3874,-0.8667) .. (-0.3869,-0.8774)
+ -- (-0.3386,-0.8778)
+ .. controls (-0.3371,-0.8645) and (-0.3342,-0.8523) .. (-0.3394,-0.8358)
+ .. controls (-0.3448,-0.8167) and (-0.3914,-0.7567) .. (-0.3962,-0.6996)
+ .. controls (-0.4039,-0.6074) and (-0.3294,-0.5871) .. (-0.3545,-0.4954)
+ -- (-0.3886,-0.5039)
+ -- (-0.4196,-0.4442)
+ -- (-0.4864,-0.4090)
+ -- (-0.5345,-0.3241)
+ -- (-0.6106,-0.2802)
+ -- (-0.6106,-0.1975)
+ .. controls (-0.6301,-0.2027) and (-0.6486,-0.2101) .. (-0.6694,-0.2022)
+ .. controls (-0.7004,-0.1904) and (-0.7133,-0.1559) .. (-0.7464,-0.1495)
+ .. controls (-0.7544,-0.1479) and (-0.7616,-0.1475) .. (-0.7679,-0.1481)
+ --cycle
+ ( 0.0029,-0.2060)
+ .. controls (-0.0139,-0.2731) and ( 0.0196,-0.2608) .. ( 0.0476,-0.3014)
+ .. controls ( 0.0682,-0.3314) and ( 0.0511,-0.3569) .. ( 0.0750,-0.3784)
+ .. controls ( 0.0974,-0.3988) and ( 0.1304,-0.3876) .. ( 0.1549,-0.4019)
+ .. controls ( 0.1795,-0.4164) and ( 0.1878,-0.4529) .. ( 0.1987,-0.4783)
+ .. controls ( 0.2461,-0.4539) and ( 0.2519,-0.4021) .. ( 0.2180,-0.3618)
+ .. controls ( 0.1964,-0.3362) and ( 0.1652,-0.3426) .. ( 0.1414,-0.3257)
+ .. controls ( 0.1198,-0.3103) and ( 0.1183,-0.2881) .. ( 0.1007,-0.2689)
+ .. controls ( 0.0838,-0.2504) and ( 0.0265,-0.2166) .. ( 0.0029,-0.2060)
+ --cycle
+ ( 0.2327,-0.2826)
+ .. controls ( 0.1961,-0.2955) and ( 0.1961,-0.3123) .. ( 0.2327,-0.3251)
+ --cycle
+ (-0.7548,-0.3137)
+ .. controls (-0.7774,-0.3164) and (-0.7890,-0.3323) .. (-0.7986,-0.3573)
+ -- (-0.7759,-0.3979)
+ .. controls (-0.7735,-0.3968) and (-0.7711,-0.3964) .. (-0.7688,-0.3946)
+ -- (-0.7205,-0.3166)
+ .. controls (-0.7341,-0.3135) and (-0.7454,-0.3126) .. (-0.7548,-0.3137)
+ --cycle
+ ( 0.4114,-0.3847)
+ .. controls ( 0.4216,-0.4136) and ( 0.4238,-0.4142) .. ( 0.4540,-0.4102)
+ -- ( 0.4540,-0.3932)
+ --cycle
+ ( 0.5395,-0.3997)
+ .. controls ( 0.5263,-0.3990) and ( 0.5044,-0.4032) .. ( 0.4625,-0.4018)
+ -- ( 0.4780,-0.4954)
+ .. controls ( 0.4757,-0.5287) and ( 0.4518,-0.5542) .. ( 0.4648,-0.5776)
+ .. controls ( 0.4852,-0.6142) and ( 0.5202,-0.5603) .. ( 0.5614,-0.5929)
+ .. controls ( 0.5752,-0.6038) and ( 0.6063,-0.6359) .. ( 0.6275,-0.6638)
+ -- ( 0.6570,-0.6132)
+ .. controls ( 0.6460,-0.6042) and ( 0.6347,-0.5954) .. ( 0.6268,-0.5865)
+ -- ( 0.5937,-0.5346)
+ .. controls ( 0.5648,-0.5023) and ( 0.5031,-0.4880) .. ( 0.5646,-0.4273)
+ .. controls ( 0.5574,-0.4062) and ( 0.5528,-0.4005) .. ( 0.5395,-0.3997)
+ --cycle
+ (-0.6609,-0.4273)
+ .. controls (-0.7027,-0.4247) and (-0.7300,-0.4414) .. (-0.7397,-0.4624)
+ -- (-0.7047,-0.5249)
+ .. controls (-0.7013,-0.5263) and (-0.6989,-0.5282) .. (-0.6950,-0.5294)
+ .. controls (-0.6935,-0.4878) and (-0.6933,-0.4806) .. (-0.6609,-0.4528)
+ --cycle
+ (-0.5689,-0.4528)
+ .. controls (-0.6368,-0.4677) and (-0.6352,-0.5020) .. (-0.6354,-0.5634)
+ -- (-0.5757,-0.6071)
+ -- (-0.5162,-0.6826)
+ .. controls (-0.5073,-0.6508) and (-0.5037,-0.6125) .. (-0.5241,-0.5838)
+ .. controls (-0.5384,-0.5639) and (-0.5622,-0.5584) .. (-0.5689,-0.5361)
+ .. controls (-0.5775,-0.5167) and (-0.5648,-0.4918) .. (-0.5689,-0.4528)
+ --cycle
+ (-0.6354,-0.5634)
+ .. controls (-0.6583,-0.5576) and (-0.6713,-0.5579) .. (-0.6839,-0.5619)
+ -- (-0.6487,-0.6248)
+ .. controls (-0.6395,-0.6053) and (-0.6326,-0.5852) .. (-0.6354,-0.5634)
+ --cycle
+ (-0.0056,-0.5890)
+ .. controls (-0.0554,-0.6155) and (-0.0426,-0.6370) .. (-0.0606,-0.6818)
+ -- (-0.1199,-0.7847)
+ .. controls (-0.1298,-0.8015) and (-0.1531,-0.8317) .. (-0.1499,-0.8510)
+ .. controls (-0.1482,-0.8615) and (-0.1397,-0.8702) .. (-0.1295,-0.8795)
+ -- (-0.0507,-0.8802)
+ .. controls (-0.0629,-0.8583) and (-0.0745,-0.8380) .. (-0.0742,-0.8358)
+ .. controls (-0.0792,-0.8239) and (-0.0776,-0.8135) .. (-0.0742,-0.8027)
+ .. controls (-0.0460,-0.7520) and ( 0.0016,-0.7834) .. ( 0.0277,-0.7780)
+ .. controls ( 0.0760,-0.7679) and ( 0.1284,-0.6914) .. ( 0.1207,-0.6405)
+ .. controls ( 0.1150,-0.6017) and ( 0.0841,-0.6082) .. ( 0.0711,-0.6267)
+ .. controls ( 0.0620,-0.6397) and ( 0.0556,-0.7141) .. ( 0.0539,-0.7336)
+ .. controls (-0.0413,-0.7085) and ( 0.0139,-0.6637) .. (-0.0056,-0.5890)
+ --cycle
+ ( 0.4284,-0.6571)
+ .. controls ( 0.4285,-0.7307) and ( 0.4284,-0.7652) .. ( 0.5135,-0.7336)
+ .. controls ( 0.5170,-0.7469) and ( 0.5220,-0.7585) .. ( 0.5179,-0.7726)
+ .. controls ( 0.5091,-0.8019) and ( 0.4473,-0.8546) .. ( 0.4851,-0.8847)
+ -- ( 0.4987,-0.8848)
+ -- ( 0.5768,-0.7509)
+ .. controls ( 0.5767,-0.7509) and ( 0.5767,-0.7507) .. ( 0.5767,-0.7507)
+ .. controls ( 0.5412,-0.6652) and ( 0.5083,-0.6726) .. ( 0.4284,-0.6571)
+ --cycle
+ (-0.2914,-0.6672)
+ .. controls (-0.2998,-0.6666) and (-0.3106,-0.6686) .. (-0.3250,-0.6743)
+ .. controls (-0.3545,-0.7128) and (-0.3081,-0.7358) .. (-0.2850,-0.7678)
+ .. controls (-0.2710,-0.7873) and (-0.2601,-0.8137) .. (-0.2351,-0.8216)
+ .. controls (-0.2083,-0.8301) and (-0.1916,-0.8105) .. (-0.1960,-0.7845)
+ .. controls (-0.2008,-0.7566) and (-0.2232,-0.7418) .. (-0.2396,-0.7216)
+ .. controls (-0.2612,-0.6950) and (-0.2660,-0.6690) .. (-0.2914,-0.6672)
+ --cycle
+ (-0.5641,-0.6998)
+ .. controls (-0.5850,-0.6984) and (-0.5808,-0.7367) .. (-0.5766,-0.7507)
+ .. controls (-0.5748,-0.7566) and (-0.5723,-0.7598) .. (-0.5702,-0.7648)
+ -- (-0.5492,-0.8022)
+ .. controls (-0.5310,-0.8247) and (-0.5120,-0.8367) .. (-0.5052,-0.8613)
+ .. controls (-0.5044,-0.8642) and (-0.5062,-0.8717) .. (-0.5063,-0.8763)
+ -- (-0.4585,-0.8767)
+ .. controls (-0.4596,-0.7984) and (-0.5013,-0.7963) .. (-0.5234,-0.7583)
+ .. controls (-0.5344,-0.7394) and (-0.5352,-0.7120) .. (-0.5535,-0.7030)
+ .. controls (-0.5576,-0.7010) and (-0.5611,-0.7000) .. (-0.5641,-0.6998)
+ --cycle
+ ( 0.1990,-0.7341)
+ .. controls ( 0.1094,-0.7768) and ( 0.2330,-0.8330) .. ( 0.2586,-0.8828)
+ -- ( 0.3183,-0.8833)
+ .. controls ( 0.3165,-0.8684) and ( 0.3066,-0.8565) .. ( 0.2991,-0.8428)
+ .. controls ( 0.2762,-0.8010) and ( 0.2508,-0.7418) .. ( 0.1990,-0.7341)
+ --cycle
+ ( 0.3603,-0.7592)
+ -- ( 0.3859,-0.8188)
+ .. controls ( 0.4178,-0.7853) and ( 0.4108,-0.7527) .. ( 0.3603,-0.7592)
+ --cycle
+ ( 0.4369,-0.8443)
+ .. controls ( 0.4147,-0.8480) and ( 0.3837,-0.8661) .. ( 0.3628,-0.8837)
+ -- ( 0.4240,-0.8842)
+ .. controls ( 0.4307,-0.8690) and ( 0.4358,-0.8541) .. ( 0.4369,-0.8443)
+ --cycle
+ (-0.3205,-0.8528)
+ -- (-0.3266,-0.8779)
+ -- (-0.2773,-0.8783)
+ .. controls (-0.2800,-0.8719) and (-0.2850,-0.8655) .. (-0.2963,-0.8600)
+ --cycle
+ ( 0.1093,-0.8568)
+ .. controls ( 0.0964,-0.8568) and ( 0.0834,-0.8587) .. ( 0.0710,-0.8600)
+ .. controls ( 0.0605,-0.8611) and ( 0.0403,-0.8617) .. ( 0.0312,-0.8664)
+ .. controls ( 0.0240,-0.8701) and ( 0.0203,-0.8751) .. ( 0.0184,-0.8808)
+ -- ( 0.1002,-0.8815)
+ -- ( 0.1050,-0.8698)
+ -- ( 0.1085,-0.8815)
+ -- ( 0.1641,-0.8820)
+ .. controls ( 0.1606,-0.8757) and ( 0.1553,-0.8698) .. ( 0.1463,-0.8649)
+ .. controls ( 0.1347,-0.8586) and ( 0.1221,-0.8568) .. ( 0.1093,-0.8568)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/city.dtx b/macros/latex/contrib/wargame/source/hex/terrain/city.dtx
new file mode 100644
index 0000000000..1d373ea19d
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/city.dtx
@@ -0,0 +1,5138 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/city}
+% And finally a city
+%
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/city/.pic={
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.6475, 0.4068)
+ -- ( 0.7314,-0.0575)
+ -- ( 0.7314,-0.0575)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.3200,-0.0497)
+ -- ( 0.7360,-0.0572)
+ -- ( 0.9222,-0.0903)
+ -- ( 0.7082,-0.4210)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.3828, 0.1855)
+ -- ( 0.0279, 0.1945)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0433, 0.3473)
+ -- ( 0.0217, 0.1444)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.1413, 0.1884)
+ -- ( 0.3369,-0.0066)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.1278, 0.7257)
+ -- (-0.2203, 0.4496)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.1602, 0.6526)
+ -- ( 0.0382, 0.6110)
+ -- (-0.1527, 0.6534)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.1688, 0.6051)
+ -- (-0.4768, 0.7222)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.3602,-0.4159)
+ .. controls ( 0.4139,-0.2355) and ( 0.4139,-0.2352) .. ( 0.4139,-0.2352)
+ -- ( 0.4838,-0.2184)
+ -- ( 0.5251,-0.0570)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.5443,-0.6880)
+ -- ( 0.5887,-0.5618)
+ -- ( 0.4781,-0.4650)
+ -- ( 0.4781,-0.4650)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0671,-0.6564)
+ -- ( 0.2799,-0.7025)
+ -- ( 0.4360,-0.4711)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.2023,-0.8374)
+ -- ( 0.2231,-0.6909)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0433,-0.3639)
+ -- (-0.0931,-0.5036)
+ -- (-0.3798,-0.4049)
+ -- (-0.4436,-0.4630)
+ -- (-0.5468,-0.5027)
+ -- (-0.6442,-0.3540)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.3296,-0.7486)
+ -- (-0.3153,-0.6107)
+ -- (-0.4388,-0.4598)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.3247,-0.6883)
+ -- (-0.0201,-0.7169)
+ -- ( 0.0501,-0.7042)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0616,-0.6541)
+ -- (-0.0427,-0.6505)
+ -- (-0.0229,-0.5387)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0040,-0.2086)
+ -- (-0.1956,-0.1835)
+ -- (-0.2290,-0.2265)
+ -- (-0.5068,-0.1372)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.3396, 0.0437)
+ -- (-0.2201, 0.4506)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.0066, 0.8705)
+ -- ( 0.3952, 0.3367)
+ -- ( 0.3885, 0.2021)
+ -- ( 0.3555, 0.1368)
+ -- ( 0.3751, 0.0869)
+ -- ( 0.2511,-0.2014)
+ -- ( 0.1393,-0.4528)
+ -- ( 0.0636,-0.6538)
+ -- ( 0.0063,-0.8731)
+ -- ( 0.0063,-0.8731)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.1775, 0.6355)
+ -- ( 0.4288, 0.7459)
+ -- ( 0.5543, 0.5148)
+ -- ( 0.5543, 0.5148)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.7584, 0.4363)
+ -- ( 0.3946, 0.3369)
+ -- ( 0.3946, 0.3369)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.1428,-0.4540)
+ -- (-0.0329,-0.2925)
+ -- ( 0.0739,-0.0364)
+ -- ( 0.1645,-0.0483)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.0723,-0.0367)
+ -- (-0.5150, 0.0791)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.1911,-0.0821)
+ -- (-0.0760, 0.3934)
+ -- (-0.0774, 0.3920)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.0439, 0.3452)
+ -- (-0.3449, 0.4978)
+ -- (-0.4614, 0.2954)
+ -- (-0.4614, 0.2954)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.4152, 0.2683)
+ -- (-0.7626, 0.4390)
+ -- (-0.7626, 0.4390)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.5846, 0.3486)
+ -- (-0.8106,-0.1286)
+ -- (-0.7727,-0.2079)
+ -- (-0.7053,-0.1745)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.7161,-0.1542)
+ -- (-0.6166,-0.3381)
+ -- (-0.7630,-0.4349)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.6697,-0.2422)
+ -- (-0.4615,-0.1081)
+ -- (-0.4615,-0.1081)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.2080,-0.3022)
+ -- ( 0.4581,-0.4878)
+ -- ( 0.5919,-0.3695)
+ -- ( 0.7615,-0.4441)
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1146, 0.0405)
+ -- ( 0.1598, 0.0323)
+ -- ( 0.1489,-0.0277)
+ -- ( 0.1036,-0.0196)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1146, 0.0405)
+ -- ( 0.1598, 0.0323)
+ -- ( 0.1489,-0.0277)
+ -- ( 0.1036,-0.0196)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0844, 0.4998)
+ -- (-0.0599, 0.4835)
+ -- (-0.0898, 0.4389)
+ -- (-0.1141, 0.4551)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0844, 0.4998)
+ -- (-0.0599, 0.4835)
+ -- (-0.0898, 0.4389)
+ -- (-0.1141, 0.4551)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6143,-0.0454)
+ -- (-0.6005,-0.0196)
+ -- (-0.5531,-0.0447)
+ -- (-0.5668,-0.0707)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6143,-0.0454)
+ -- (-0.6005,-0.0196)
+ -- (-0.5531,-0.0447)
+ -- (-0.5668,-0.0707)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3809,-0.0792)
+ -- (-0.3371,-0.0929)
+ -- (-0.3553,-0.1511)
+ -- (-0.3991,-0.1375)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3809,-0.0792)
+ -- (-0.3371,-0.0929)
+ -- (-0.3553,-0.1511)
+ -- (-0.3991,-0.1375)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5133, 0.1838)
+ -- (-0.4733, 0.1613)
+ -- (-0.5032, 0.1081)
+ -- (-0.5433, 0.1307)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5133, 0.1838)
+ -- (-0.4733, 0.1613)
+ -- (-0.5032, 0.1081)
+ -- (-0.5433, 0.1307)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3878, 0.1398)
+ -- (-0.3421, 0.1442)
+ -- (-0.3362, 0.0834)
+ -- (-0.3819, 0.0790)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3878, 0.1398)
+ -- (-0.3421, 0.1442)
+ -- (-0.3362, 0.0834)
+ -- (-0.3819, 0.0790)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5622, 0.0806)
+ -- (-0.5234, 0.0560)
+ -- (-0.5559, 0.0044)
+ -- (-0.5948, 0.0290)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5622, 0.0806)
+ -- (-0.5234, 0.0560)
+ -- (-0.5559, 0.0044)
+ -- (-0.5948, 0.0290)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6218, 0.1903)
+ -- (-0.6097, 0.2346)
+ -- (-0.5508, 0.2185)
+ -- (-0.5629, 0.1742)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6218, 0.1903)
+ -- (-0.6097, 0.2346)
+ -- (-0.5508, 0.2185)
+ -- (-0.5629, 0.1742)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2884, 0.7423)
+ -- (-0.2596, 0.7372)
+ -- (-0.2691, 0.6843)
+ -- (-0.2980, 0.6895)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2884, 0.7423)
+ -- (-0.2596, 0.7372)
+ -- (-0.2691, 0.6843)
+ -- (-0.2980, 0.6895)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1219, 0.8731)
+ -- ( 0.1475, 0.8350)
+ -- ( 0.0970, 0.8008)
+ -- ( 0.0712, 0.8389)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1219, 0.8731)
+ -- ( 0.1475, 0.8350)
+ -- ( 0.0970, 0.8008)
+ -- ( 0.0712, 0.8389)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3659, 0.5557)
+ -- ( 0.3913, 0.5175)
+ -- ( 0.3405, 0.4837)
+ -- ( 0.3150, 0.5219)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3659, 0.5557)
+ -- ( 0.3913, 0.5175)
+ -- ( 0.3405, 0.4837)
+ -- ( 0.3150, 0.5219)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0626, 0.4298)
+ -- ( 0.0896, 0.4184)
+ -- ( 0.0686, 0.3690)
+ -- ( 0.0416, 0.3804)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0626, 0.4298)
+ -- ( 0.0896, 0.4184)
+ -- ( 0.0686, 0.3690)
+ -- ( 0.0416, 0.3804)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4510,-0.3094)
+ -- (-0.4058,-0.2887)
+ -- (-0.3725,-0.3614)
+ -- (-0.4176,-0.3821)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4510,-0.3094)
+ -- (-0.4058,-0.2887)
+ -- (-0.3725,-0.3614)
+ -- (-0.4176,-0.3821)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5282,-0.1080)
+ -- (-0.5533,-0.0695)
+ -- (-0.5021,-0.0363)
+ -- (-0.4770,-0.0749)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5282,-0.1080)
+ -- (-0.5533,-0.0695)
+ -- (-0.5021,-0.0363)
+ -- (-0.4770,-0.0749)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0108,-0.2602)
+ -- ( 0.0173,-0.2316)
+ -- ( 0.0696,-0.2435)
+ -- ( 0.0632,-0.2721)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0108,-0.2602)
+ -- ( 0.0173,-0.2316)
+ -- ( 0.0696,-0.2435)
+ -- ( 0.0632,-0.2721)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1989, 0.1654)
+ -- (-0.1544, 0.1540)
+ -- (-0.1696, 0.0948)
+ -- (-0.2141, 0.1063)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1989, 0.1654)
+ -- (-0.1544, 0.1540)
+ -- (-0.1696, 0.0948)
+ -- (-0.2141, 0.1063)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0216,-0.0407)
+ -- ( 0.0230,-0.0521)
+ -- ( 0.0078,-0.1112)
+ -- (-0.0368,-0.0997)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0216,-0.0407)
+ -- ( 0.0230,-0.0521)
+ -- ( 0.0078,-0.1112)
+ -- (-0.0368,-0.0997)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1936, 0.5180)
+ -- ( 0.2045, 0.4909)
+ -- ( 0.1547, 0.4709)
+ -- ( 0.1437, 0.4981)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1936, 0.5180)
+ -- ( 0.2045, 0.4909)
+ -- ( 0.1547, 0.4709)
+ -- ( 0.1437, 0.4981)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1903, 0.4858)
+ -- (-0.1678, 0.5258)
+ -- (-0.1146, 0.4960)
+ -- (-0.1371, 0.4559)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1903, 0.4858)
+ -- (-0.1678, 0.5258)
+ -- (-0.1146, 0.4960)
+ -- (-0.1371, 0.4559)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1470, 0.3493)
+ -- ( 0.1689, 0.3567)
+ -- ( 0.1775, 0.3315)
+ -- ( 0.1555, 0.3241)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1470, 0.3493)
+ -- ( 0.1689, 0.3567)
+ -- ( 0.1775, 0.3315)
+ -- ( 0.1555, 0.3241)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1892, 0.2562)
+ -- ( 0.2118, 0.2510)
+ -- ( 0.2058, 0.2251)
+ -- ( 0.1833, 0.2303)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1892, 0.2562)
+ -- ( 0.2118, 0.2510)
+ -- ( 0.2058, 0.2251)
+ -- ( 0.1833, 0.2303)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8016, 0.0292)
+ -- ( 0.8235, 0.0367)
+ -- ( 0.8321, 0.0116)
+ -- ( 0.8103, 0.0040)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8016, 0.0292)
+ -- ( 0.8235, 0.0367)
+ -- ( 0.8321, 0.0116)
+ -- ( 0.8103, 0.0040)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7392, 0.1737)
+ -- ( 0.7609, 0.1816)
+ -- ( 0.7702, 0.1568)
+ -- ( 0.7485, 0.1487)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7392, 0.1737)
+ -- ( 0.7609, 0.1816)
+ -- ( 0.7702, 0.1568)
+ -- ( 0.7485, 0.1487)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3736, 0.7805)
+ -- ( 0.3937, 0.7921)
+ -- ( 0.4071, 0.7691)
+ -- ( 0.3870, 0.7575)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3736, 0.7805)
+ -- ( 0.3937, 0.7921)
+ -- ( 0.4071, 0.7691)
+ -- ( 0.3870, 0.7575)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4808,-0.6251)
+ -- (-0.4706,-0.6459)
+ -- (-0.4946,-0.6576)
+ -- (-0.5047,-0.6368)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4808,-0.6251)
+ -- (-0.4706,-0.6459)
+ -- (-0.4946,-0.6576)
+ -- (-0.5047,-0.6368)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4514,-0.6075)
+ -- (-0.4393,-0.6272)
+ -- (-0.4620,-0.6412)
+ -- (-0.4740,-0.6215)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4514,-0.6075)
+ -- (-0.4393,-0.6272)
+ -- (-0.4620,-0.6412)
+ -- (-0.4740,-0.6215)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2390,-0.7174)
+ -- (-0.2175,-0.7260)
+ -- (-0.2273,-0.7508)
+ -- (-0.2489,-0.7421)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2390,-0.7174)
+ -- (-0.2175,-0.7260)
+ -- (-0.2273,-0.7508)
+ -- (-0.2489,-0.7421)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2386,-0.5506)
+ -- (-0.2108,-0.5598)
+ -- (-0.2277,-0.6108)
+ -- (-0.2555,-0.6015)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2386,-0.5506)
+ -- (-0.2108,-0.5598)
+ -- (-0.2277,-0.6108)
+ -- (-0.2555,-0.6015)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3574, 0.2226)
+ -- (-0.3530, 0.2515)
+ -- (-0.2999, 0.2435)
+ -- (-0.3043, 0.2145)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3574, 0.2226)
+ -- (-0.3530, 0.2515)
+ -- (-0.2999, 0.2435)
+ -- (-0.3043, 0.2145)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3315, 0.3242)
+ -- (-0.3271, 0.3532)
+ -- (-0.2740, 0.3451)
+ -- (-0.2783, 0.3162)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3315, 0.3242)
+ -- (-0.3271, 0.3532)
+ -- (-0.2740, 0.3451)
+ -- (-0.2783, 0.3162)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2256, 0.4895)
+ -- ( 0.2451, 0.4676)
+ -- ( 0.2049, 0.4320)
+ -- ( 0.1854, 0.4539)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2256, 0.4895)
+ -- ( 0.2451, 0.4676)
+ -- ( 0.2049, 0.4320)
+ -- ( 0.1854, 0.4539)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1717, 0.5777)
+ -- ( 0.1903, 0.5551)
+ -- ( 0.1488, 0.5210)
+ -- ( 0.1302, 0.5436)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1717, 0.5777)
+ -- ( 0.1903, 0.5551)
+ -- ( 0.1488, 0.5210)
+ -- ( 0.1302, 0.5436)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0995, 0.2545)
+ -- (-0.0891, 0.2819)
+ -- (-0.0389, 0.2629)
+ -- (-0.0492, 0.2355)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0995, 0.2545)
+ -- (-0.0891, 0.2819)
+ -- (-0.0389, 0.2629)
+ -- (-0.0492, 0.2355)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0828, 0.2371)
+ -- ( 0.0883, 0.2659)
+ -- ( 0.1411, 0.2559)
+ -- ( 0.1357, 0.2271)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0828, 0.2371)
+ -- ( 0.0883, 0.2659)
+ -- ( 0.1411, 0.2559)
+ -- ( 0.1357, 0.2271)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1049, 0.1819)
+ -- (-0.0945, 0.2094)
+ -- (-0.0443, 0.1904)
+ -- (-0.0546, 0.1629)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1049, 0.1819)
+ -- (-0.0945, 0.2094)
+ -- (-0.0443, 0.1904)
+ -- (-0.0546, 0.1629)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0889,-0.0631)
+ -- (-0.0785,-0.0357)
+ -- (-0.0283,-0.0549)
+ -- (-0.0388,-0.0823)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0889,-0.0631)
+ -- (-0.0785,-0.0357)
+ -- (-0.0283,-0.0549)
+ -- (-0.0388,-0.0823)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2282,-0.7907)
+ -- (-0.1823,-0.7907)
+ -- (-0.1823,-0.8518)
+ -- (-0.2282,-0.8518)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2282,-0.7907)
+ -- (-0.1823,-0.7907)
+ -- (-0.1823,-0.8518)
+ -- (-0.2282,-0.8518)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2275,-0.7989)
+ -- ( 0.2734,-0.7989)
+ -- ( 0.2734,-0.8599)
+ -- ( 0.2275,-0.8599)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2275,-0.7989)
+ -- ( 0.2734,-0.7989)
+ -- ( 0.2734,-0.8599)
+ -- ( 0.2275,-0.8599)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2516,-0.7126)
+ -- ( 0.2808,-0.7126)
+ -- ( 0.2808,-0.7663)
+ -- ( 0.2516,-0.7663)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2516,-0.7126)
+ -- ( 0.2808,-0.7126)
+ -- ( 0.2808,-0.7663)
+ -- ( 0.2516,-0.7663)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1669,-0.7129)
+ -- ( 0.1954,-0.7199)
+ -- ( 0.1826,-0.7721)
+ -- ( 0.1542,-0.7650)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1669,-0.7129)
+ -- ( 0.1954,-0.7199)
+ -- ( 0.1826,-0.7721)
+ -- ( 0.1542,-0.7650)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1222,-0.7854)
+ -- ( 0.1514,-0.7854)
+ -- ( 0.1514,-0.8390)
+ -- ( 0.1222,-0.8390)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1222,-0.7854)
+ -- ( 0.1514,-0.7854)
+ -- ( 0.1514,-0.8390)
+ -- ( 0.1222,-0.8390)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3031,-0.7156)
+ -- ( 0.3325,-0.7156)
+ -- ( 0.3325,-0.7693)
+ -- ( 0.3031,-0.7693)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3031,-0.7156)
+ -- ( 0.3325,-0.7156)
+ -- ( 0.3325,-0.7693)
+ -- ( 0.3031,-0.7693)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3574,-0.7174)
+ -- ( 0.3867,-0.7174)
+ -- ( 0.3867,-0.7712)
+ -- ( 0.3574,-0.7712)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3574,-0.7174)
+ -- ( 0.3867,-0.7174)
+ -- ( 0.3867,-0.7712)
+ -- ( 0.3574,-0.7712)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3742,-0.8016)
+ -- ( 0.4036,-0.8016)
+ -- ( 0.4036,-0.8554)
+ -- ( 0.3742,-0.8554)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3742,-0.8016)
+ -- ( 0.4036,-0.8016)
+ -- ( 0.4036,-0.8554)
+ -- ( 0.3742,-0.8554)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4107,-0.8072)
+ -- ( 0.4400,-0.8072)
+ -- ( 0.4400,-0.8610)
+ -- ( 0.4107,-0.8610)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4107,-0.8072)
+ -- ( 0.4400,-0.8072)
+ -- ( 0.4400,-0.8610)
+ -- ( 0.4107,-0.8610)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4612,-0.7886)
+ -- ( 0.4905,-0.7886)
+ -- ( 0.4905,-0.8423)
+ -- ( 0.4612,-0.8423)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4612,-0.7886)
+ -- ( 0.4905,-0.7886)
+ -- ( 0.4905,-0.8423)
+ -- ( 0.4612,-0.8423)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5733,-0.6570)
+ -- ( 0.6007,-0.6675)
+ -- ( 0.5814,-0.7176)
+ -- ( 0.5540,-0.7071)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5733,-0.6570)
+ -- ( 0.6007,-0.6675)
+ -- ( 0.5814,-0.7176)
+ -- ( 0.5540,-0.7071)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6698,-0.4454)
+ -- ( 0.6958,-0.4589)
+ -- ( 0.6710,-0.5065)
+ -- ( 0.6450,-0.4930)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6698,-0.4454)
+ -- ( 0.6958,-0.4589)
+ -- ( 0.6710,-0.5065)
+ -- ( 0.6450,-0.4930)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5789,-0.4658)
+ -- ( 0.6009,-0.4851)
+ -- ( 0.5654,-0.5254)
+ -- ( 0.5434,-0.5061)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5789,-0.4658)
+ -- ( 0.6009,-0.4851)
+ -- ( 0.5654,-0.5254)
+ -- ( 0.5434,-0.5061)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6025,-0.4876)
+ -- ( 0.6259,-0.5054)
+ -- ( 0.5934,-0.5481)
+ -- ( 0.5701,-0.5304)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6025,-0.4876)
+ -- ( 0.6259,-0.5054)
+ -- ( 0.5934,-0.5481)
+ -- ( 0.5701,-0.5304)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6466,-0.5044)
+ -- ( 0.6729,-0.5172)
+ -- ( 0.6493,-0.5654)
+ -- ( 0.6230,-0.5526)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6466,-0.5044)
+ -- ( 0.6729,-0.5172)
+ -- ( 0.6493,-0.5654)
+ -- ( 0.6230,-0.5526)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4854,-0.5939)
+ -- ( 0.5002,-0.5686)
+ -- ( 0.5466,-0.5955)
+ -- ( 0.5320,-0.6208)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4854,-0.5939)
+ -- ( 0.5002,-0.5686)
+ -- ( 0.5466,-0.5955)
+ -- ( 0.5320,-0.6208)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4577,-0.6299)
+ -- ( 0.4750,-0.6063)
+ -- ( 0.5183,-0.6380)
+ -- ( 0.5010,-0.6617)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4577,-0.6299)
+ -- ( 0.4750,-0.6063)
+ -- ( 0.5183,-0.6380)
+ -- ( 0.5010,-0.6617)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4354,-0.6506)
+ -- ( 0.4568,-0.6305)
+ -- ( 0.4935,-0.6697)
+ -- ( 0.4721,-0.6898)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4354,-0.6506)
+ -- ( 0.4568,-0.6305)
+ -- ( 0.4935,-0.6697)
+ -- ( 0.4721,-0.6898)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3580,-0.4631)
+ -- ( 0.3837,-0.4771)
+ -- ( 0.3581,-0.5243)
+ -- ( 0.3323,-0.5103)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3580,-0.4631)
+ -- ( 0.3837,-0.4771)
+ -- ( 0.3581,-0.5243)
+ -- ( 0.3323,-0.5103)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5131,-0.3580)
+ -- ( 0.5345,-0.3780)
+ -- ( 0.4978,-0.4172)
+ -- ( 0.4763,-0.3972)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5131,-0.3580)
+ -- ( 0.5345,-0.3780)
+ -- ( 0.4978,-0.4172)
+ -- ( 0.4763,-0.3972)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2116,-0.3904)
+ -- ( 0.2243,-0.3641)
+ -- ( 0.2726,-0.3875)
+ -- ( 0.2598,-0.4139)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2116,-0.3904)
+ -- ( 0.2243,-0.3641)
+ -- ( 0.2726,-0.3875)
+ -- ( 0.2598,-0.4139)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1786,-0.4343)
+ -- ( 0.1889,-0.4069)
+ -- ( 0.2391,-0.4259)
+ -- ( 0.2289,-0.4532)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1786,-0.4343)
+ -- ( 0.1889,-0.4069)
+ -- ( 0.2391,-0.4259)
+ -- ( 0.2289,-0.4532)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1647,-0.4763)
+ -- ( 0.1772,-0.4497)
+ -- ( 0.2258,-0.4725)
+ -- ( 0.2134,-0.4990)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1647,-0.4763)
+ -- ( 0.1772,-0.4497)
+ -- ( 0.2258,-0.4725)
+ -- ( 0.2134,-0.4990)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2335,-0.5197)
+ -- ( 0.2460,-0.4932)
+ -- ( 0.2946,-0.5160)
+ -- ( 0.2821,-0.5425)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2335,-0.5197)
+ -- ( 0.2460,-0.4932)
+ -- ( 0.2946,-0.5160)
+ -- ( 0.2821,-0.5425)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2832,-0.4218)
+ -- ( 0.2956,-0.3952)
+ -- ( 0.3443,-0.4180)
+ -- ( 0.3318,-0.4445)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2832,-0.4218)
+ -- ( 0.2956,-0.3952)
+ -- ( 0.3443,-0.4180)
+ -- ( 0.3318,-0.4445)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2064,-0.6136)
+ -- ( 0.2189,-0.5871)
+ -- ( 0.2675,-0.6099)
+ -- ( 0.2551,-0.6364)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2064,-0.6136)
+ -- ( 0.2189,-0.5871)
+ -- ( 0.2675,-0.6099)
+ -- ( 0.2551,-0.6364)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1443,-0.5195)
+ -- ( 0.1550,-0.4922)
+ -- ( 0.2050,-0.5120)
+ -- ( 0.1942,-0.5392)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1443,-0.5195)
+ -- ( 0.1550,-0.4922)
+ -- ( 0.2050,-0.5120)
+ -- ( 0.1942,-0.5392)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3128,-0.5333)
+ -- ( 0.3394,-0.5455)
+ -- ( 0.3173,-0.5943)
+ -- ( 0.2906,-0.5823)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3128,-0.5333)
+ -- ( 0.3394,-0.5455)
+ -- ( 0.3173,-0.5943)
+ -- ( 0.2906,-0.5823)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1781,-0.6526)
+ -- ( 0.1883,-0.6250)
+ -- ( 0.2386,-0.6435)
+ -- ( 0.2286,-0.6710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1781,-0.6526)
+ -- ( 0.1883,-0.6250)
+ -- ( 0.2386,-0.6435)
+ -- ( 0.2286,-0.6710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0147,-0.5695)
+ -- ( 0.0238,-0.5417)
+ -- ( 0.0749,-0.5582)
+ -- ( 0.0658,-0.5861)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0147,-0.5695)
+ -- ( 0.0238,-0.5417)
+ -- ( 0.0749,-0.5582)
+ -- ( 0.0658,-0.5861)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0205,-0.5124)
+ -- ( 0.0287,-0.4843)
+ -- ( 0.0803,-0.4994)
+ -- ( 0.0720,-0.5275)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0205,-0.5124)
+ -- ( 0.0287,-0.4843)
+ -- ( 0.0803,-0.4994)
+ -- ( 0.0720,-0.5275)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0719,-0.6560)
+ -- (-0.0678,-0.6849)
+ -- (-0.1209,-0.6925)
+ -- (-0.1250,-0.6635)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0719,-0.6560)
+ -- (-0.0678,-0.6849)
+ -- (-0.1209,-0.6925)
+ -- (-0.1250,-0.6635)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1330,-0.6411)
+ -- (-0.1375,-0.6700)
+ -- (-0.1906,-0.6618)
+ -- (-0.1861,-0.6329)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1330,-0.6411)
+ -- (-0.1375,-0.6700)
+ -- (-0.1906,-0.6618)
+ -- (-0.1861,-0.6329)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0334,-0.7381)
+ -- (-0.0042,-0.7381)
+ -- (-0.0042,-0.7917)
+ -- (-0.0334,-0.7917)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0334,-0.7381)
+ -- (-0.0042,-0.7381)
+ -- (-0.0042,-0.7917)
+ -- (-0.0334,-0.7917)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0998,-0.7315)
+ -- (-0.0706,-0.7315)
+ -- (-0.0706,-0.7852)
+ -- (-0.0998,-0.7852)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0998,-0.7315)
+ -- (-0.0706,-0.7315)
+ -- (-0.0706,-0.7852)
+ -- (-0.0998,-0.7852)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2018,-0.7234)
+ -- (-0.1730,-0.7180)
+ -- (-0.1631,-0.7708)
+ -- (-0.1919,-0.7762)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2018,-0.7234)
+ -- (-0.1730,-0.7180)
+ -- (-0.1631,-0.7708)
+ -- (-0.1919,-0.7762)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2956,-0.7184)
+ -- (-0.2667,-0.7229)
+ -- (-0.2750,-0.7760)
+ -- (-0.3039,-0.7714)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2956,-0.7184)
+ -- (-0.2667,-0.7229)
+ -- (-0.2750,-0.7760)
+ -- (-0.3039,-0.7714)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1661,-0.8014)
+ -- (-0.1372,-0.8060)
+ -- (-0.1454,-0.8590)
+ -- (-0.1744,-0.8545)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1661,-0.8014)
+ -- (-0.1372,-0.8060)
+ -- (-0.1454,-0.8590)
+ -- (-0.1744,-0.8545)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1269,-0.8074)
+ -- (-0.0977,-0.8054)
+ -- (-0.0940,-0.8590)
+ -- (-0.1232,-0.8610)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1269,-0.8074)
+ -- (-0.0977,-0.8054)
+ -- (-0.0940,-0.8590)
+ -- (-0.1232,-0.8610)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2787,-0.7975)
+ -- (-0.2495,-0.7956)
+ -- (-0.2459,-0.8492)
+ -- (-0.2751,-0.8511)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2787,-0.7975)
+ -- (-0.2495,-0.7956)
+ -- (-0.2459,-0.8492)
+ -- (-0.2751,-0.8511)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3966,-0.5592)
+ -- (-0.3802,-0.5834)
+ -- (-0.4246,-0.6135)
+ -- (-0.4411,-0.5892)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3966,-0.5592)
+ -- (-0.3802,-0.5834)
+ -- (-0.4246,-0.6135)
+ -- (-0.4411,-0.5892)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4189,-0.5000)
+ -- (-0.4033,-0.5248)
+ -- (-0.4488,-0.5534)
+ -- (-0.4644,-0.5286)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4189,-0.5000)
+ -- (-0.4033,-0.5248)
+ -- (-0.4488,-0.5534)
+ -- (-0.4644,-0.5286)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3561,-0.4332)
+ -- (-0.3310,-0.4483)
+ -- (-0.3586,-0.4944)
+ -- (-0.3837,-0.4793)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3561,-0.4332)
+ -- (-0.3310,-0.4483)
+ -- (-0.3586,-0.4944)
+ -- (-0.3837,-0.4793)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3120,-0.4787)
+ -- (-0.2896,-0.4976)
+ -- (-0.3241,-0.5386)
+ -- (-0.3466,-0.5198)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3120,-0.4787)
+ -- (-0.2896,-0.4976)
+ -- (-0.3241,-0.5386)
+ -- (-0.3466,-0.5198)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2660,-0.5113)
+ -- (-0.2456,-0.5323)
+ -- (-0.2840,-0.5697)
+ -- (-0.3045,-0.5487)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2660,-0.5113)
+ -- (-0.2456,-0.5323)
+ -- (-0.2840,-0.5697)
+ -- (-0.3045,-0.5487)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3939,-0.2212)
+ -- (-0.3666,-0.2319)
+ -- (-0.3863,-0.2819)
+ -- (-0.4135,-0.2712)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3939,-0.2212)
+ -- (-0.3666,-0.2319)
+ -- (-0.3863,-0.2819)
+ -- (-0.4135,-0.2712)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3038,-0.2403)
+ -- (-0.2765,-0.2509)
+ -- (-0.2961,-0.3010)
+ -- (-0.3234,-0.2902)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3038,-0.2403)
+ -- (-0.2765,-0.2509)
+ -- (-0.2961,-0.3010)
+ -- (-0.3234,-0.2902)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3532,-0.2251)
+ -- (-0.3255,-0.2346)
+ -- (-0.3428,-0.2854)
+ -- (-0.3705,-0.2760)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3532,-0.2251)
+ -- (-0.3255,-0.2346)
+ -- (-0.3428,-0.2854)
+ -- (-0.3705,-0.2760)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3482,-0.3198)
+ -- (-0.3204,-0.3293)
+ -- (-0.3377,-0.3801)
+ -- (-0.3655,-0.3706)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3482,-0.3198)
+ -- (-0.3204,-0.3293)
+ -- (-0.3377,-0.3801)
+ -- (-0.3655,-0.3706)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5006,-0.1767)
+ -- (-0.4737,-0.1885)
+ -- (-0.4953,-0.2376)
+ -- (-0.5221,-0.2258)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5006,-0.1767)
+ -- (-0.4737,-0.1885)
+ -- (-0.4953,-0.2376)
+ -- (-0.5221,-0.2258)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5739,-0.2312)
+ -- (-0.5595,-0.2568)
+ -- (-0.6065,-0.2830)
+ -- (-0.6207,-0.2575)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5739,-0.2312)
+ -- (-0.5595,-0.2568)
+ -- (-0.6065,-0.2830)
+ -- (-0.6207,-0.2575)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5929,-0.3943)
+ -- (-0.5696,-0.3765)
+ -- (-0.5369,-0.4192)
+ -- (-0.5602,-0.4370)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5929,-0.3943)
+ -- (-0.5696,-0.3765)
+ -- (-0.5369,-0.4192)
+ -- (-0.5602,-0.4370)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5005,-0.3312)
+ -- (-0.4775,-0.3129)
+ -- (-0.4441,-0.3550)
+ -- (-0.4670,-0.3733)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5005,-0.3312)
+ -- (-0.4775,-0.3129)
+ -- (-0.4441,-0.3550)
+ -- (-0.4670,-0.3733)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5523,-0.3618)
+ -- (-0.5293,-0.3436)
+ -- (-0.4960,-0.3857)
+ -- (-0.5189,-0.4038)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5523,-0.3618)
+ -- (-0.5293,-0.3436)
+ -- (-0.4960,-0.3857)
+ -- (-0.5189,-0.4038)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4383,-0.3880)
+ -- (-0.4249,-0.4140)
+ -- (-0.4726,-0.4386)
+ -- (-0.4861,-0.4126)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4383,-0.3880)
+ -- (-0.4249,-0.4140)
+ -- (-0.4726,-0.4386)
+ -- (-0.4861,-0.4126)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6626,-0.4293)
+ -- (-0.6510,-0.4562)
+ -- (-0.7003,-0.4775)
+ -- (-0.7119,-0.4506)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6626,-0.4293)
+ -- (-0.6510,-0.4562)
+ -- (-0.7003,-0.4775)
+ -- (-0.7119,-0.4506)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6449,-0.4759)
+ -- (-0.6280,-0.4998)
+ -- (-0.6717,-0.5309)
+ -- (-0.6887,-0.5069)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6449,-0.4759)
+ -- (-0.6280,-0.4998)
+ -- (-0.6717,-0.5309)
+ -- (-0.6887,-0.5069)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5766,-0.5683)
+ -- (-0.5643,-0.5948)
+ -- (-0.6130,-0.6174)
+ -- (-0.6254,-0.5909)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5766,-0.5683)
+ -- (-0.5643,-0.5948)
+ -- (-0.6130,-0.6174)
+ -- (-0.6254,-0.5909)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4733,-0.5728)
+ -- (-0.4590,-0.5983)
+ -- (-0.5061,-0.6244)
+ -- (-0.5202,-0.5988)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4733,-0.5728)
+ -- (-0.4590,-0.5983)
+ -- (-0.5061,-0.6244)
+ -- (-0.5202,-0.5988)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4272,-0.6520)
+ -- (-0.4128,-0.6774)
+ -- (-0.4595,-0.7039)
+ -- (-0.4740,-0.6785)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4272,-0.6520)
+ -- (-0.4128,-0.6774)
+ -- (-0.4595,-0.7039)
+ -- (-0.4740,-0.6785)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5374,-0.6782)
+ -- (-0.5236,-0.7040)
+ -- (-0.5710,-0.7292)
+ -- (-0.5848,-0.7034)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5374,-0.6782)
+ -- (-0.5236,-0.7040)
+ -- (-0.5710,-0.7292)
+ -- (-0.5848,-0.7034)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5214,-0.7131)
+ -- (-0.5038,-0.7365)
+ -- (-0.5468,-0.7687)
+ -- (-0.5644,-0.7453)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5214,-0.7131)
+ -- (-0.5038,-0.7365)
+ -- (-0.5468,-0.7687)
+ -- (-0.5644,-0.7453)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2847,-0.1917)
+ -- ( 0.2954,-0.1644)
+ -- ( 0.3454,-0.1841)
+ -- ( 0.3347,-0.2114)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2847,-0.1917)
+ -- ( 0.2954,-0.1644)
+ -- ( 0.3454,-0.1841)
+ -- ( 0.3347,-0.2114)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2692,-0.2397)
+ -- ( 0.2775,-0.2116)
+ -- ( 0.3291,-0.2268)
+ -- ( 0.3208,-0.2548)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2692,-0.2397)
+ -- ( 0.2775,-0.2116)
+ -- ( 0.3291,-0.2268)
+ -- ( 0.3208,-0.2548)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2587,-0.2944)
+ -- ( 0.2585,-0.2651)
+ -- ( 0.3123,-0.2648)
+ -- ( 0.3125,-0.2941)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2587,-0.2944)
+ -- ( 0.2585,-0.2651)
+ -- ( 0.3123,-0.2648)
+ -- ( 0.3125,-0.2941)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1269,-0.2581)
+ -- ( 0.1359,-0.2303)
+ -- ( 0.1871,-0.2468)
+ -- ( 0.1780,-0.2746)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1269,-0.2581)
+ -- ( 0.1359,-0.2303)
+ -- ( 0.1871,-0.2468)
+ -- ( 0.1780,-0.2746)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1127,-0.3153)
+ -- ( 0.1232,-0.2880)
+ -- ( 0.1733,-0.3074)
+ -- ( 0.1626,-0.3348)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1127,-0.3153)
+ -- ( 0.1232,-0.2880)
+ -- ( 0.1733,-0.3074)
+ -- ( 0.1626,-0.3348)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1928,-0.0951)
+ -- ( 0.2055,-0.0687)
+ -- ( 0.2539,-0.0920)
+ -- ( 0.2412,-0.1184)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1928,-0.0951)
+ -- ( 0.2055,-0.0687)
+ -- ( 0.2539,-0.0920)
+ -- ( 0.2412,-0.1184)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2202,-0.0375)
+ -- ( 0.2335,-0.0113)
+ -- ( 0.2814,-0.0356)
+ -- ( 0.2682,-0.0617)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2202,-0.0375)
+ -- ( 0.2335,-0.0113)
+ -- ( 0.2814,-0.0356)
+ -- ( 0.2682,-0.0617)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2582, 0.0509)
+ -- ( 0.2736, 0.0259)
+ -- ( 0.2278,-0.0022)
+ -- ( 0.2125, 0.0227)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2582, 0.0509)
+ -- ( 0.2736, 0.0259)
+ -- ( 0.2278,-0.0022)
+ -- ( 0.2125, 0.0227)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2111, 0.0849)
+ -- ( 0.2307, 0.0632)
+ -- ( 0.1908, 0.0273)
+ -- ( 0.1712, 0.0490)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2111, 0.0849)
+ -- ( 0.2307, 0.0632)
+ -- ( 0.1908, 0.0273)
+ -- ( 0.1712, 0.0490)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1776, 0.1187)
+ -- ( 0.1982, 0.0978)
+ -- ( 0.1599, 0.0601)
+ -- ( 0.1394, 0.0810)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1776, 0.1187)
+ -- ( 0.1982, 0.0978)
+ -- ( 0.1599, 0.0601)
+ -- ( 0.1394, 0.0810)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2760, 0.3987)
+ -- ( 0.2946, 0.3760)
+ -- ( 0.2531, 0.3420)
+ -- ( 0.2345, 0.3646)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2760, 0.3987)
+ -- ( 0.2946, 0.3760)
+ -- ( 0.2531, 0.3420)
+ -- ( 0.2345, 0.3646)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3226, 0.3543)
+ -- ( 0.3420, 0.3323)
+ -- ( 0.3018, 0.2967)
+ -- ( 0.2824, 0.3185)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3226, 0.3543)
+ -- ( 0.3420, 0.3323)
+ -- ( 0.3018, 0.2967)
+ -- ( 0.2824, 0.3185)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2277, 0.3599)
+ -- (-0.2171, 0.3872)
+ -- (-0.1671, 0.3676)
+ -- (-0.1777, 0.3404)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2277, 0.3599)
+ -- (-0.2171, 0.3872)
+ -- (-0.1671, 0.3676)
+ -- (-0.1777, 0.3404)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1722, 0.5368)
+ -- (-0.1616, 0.5642)
+ -- (-0.1116, 0.5446)
+ -- (-0.1223, 0.5174)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1722, 0.5368)
+ -- (-0.1616, 0.5642)
+ -- (-0.1116, 0.5446)
+ -- (-0.1223, 0.5174)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2400, 0.3081)
+ -- (-0.2307, 0.3359)
+ -- (-0.1797, 0.3189)
+ -- (-0.1890, 0.2912)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2400, 0.3081)
+ -- (-0.2307, 0.3359)
+ -- (-0.1797, 0.3189)
+ -- (-0.1890, 0.2912)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2735, 0.1997)
+ -- (-0.2631, 0.2270)
+ -- (-0.2129, 0.2080)
+ -- (-0.2233, 0.1807)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2735, 0.1997)
+ -- (-0.2631, 0.2270)
+ -- (-0.2129, 0.2080)
+ -- (-0.2233, 0.1807)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3047, 0.1045)
+ -- (-0.2975, 0.1329)
+ -- (-0.2455, 0.1200)
+ -- (-0.2525, 0.0915)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3047, 0.1045)
+ -- (-0.2975, 0.1329)
+ -- (-0.2455, 0.1200)
+ -- (-0.2525, 0.0915)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1406, 0.3596)
+ -- (-0.1136, 0.3482)
+ -- (-0.1345, 0.2988)
+ -- (-0.1615, 0.3102)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1406, 0.3596)
+ -- (-0.1136, 0.3482)
+ -- (-0.1345, 0.2988)
+ -- (-0.1615, 0.3102)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0597, 0.5878)
+ -- (-0.0327, 0.5763)
+ -- (-0.0536, 0.5269)
+ -- (-0.0806, 0.5383)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0597, 0.5878)
+ -- (-0.0327, 0.5763)
+ -- (-0.0536, 0.5269)
+ -- (-0.0806, 0.5383)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0206, 0.5864)
+ -- ( 0.0064, 0.5749)
+ -- (-0.0146, 0.5255)
+ -- (-0.0416, 0.5369)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0206, 0.5864)
+ -- ( 0.0064, 0.5749)
+ -- (-0.0146, 0.5255)
+ -- (-0.0416, 0.5369)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1653, 0.2738)
+ -- (-0.1360, 0.2738)
+ -- (-0.1360, 0.2200)
+ -- (-0.1653, 0.2200)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1653, 0.2738)
+ -- (-0.1360, 0.2738)
+ -- (-0.1360, 0.2200)
+ -- (-0.1653, 0.2200)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1782, 0.2207)
+ -- (-0.1501, 0.2122)
+ -- (-0.1657, 0.1608)
+ -- (-0.1937, 0.1693)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1782, 0.2207)
+ -- (-0.1501, 0.2122)
+ -- (-0.1657, 0.1608)
+ -- (-0.1937, 0.1693)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2343, 0.0622)
+ -- (-0.2239, 0.0896)
+ -- (-0.1737, 0.0706)
+ -- (-0.1840, 0.0432)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2343, 0.0622)
+ -- (-0.2239, 0.0896)
+ -- (-0.1737, 0.0706)
+ -- (-0.1840, 0.0432)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1289, 0.0933)
+ -- (-0.1186, 0.1207)
+ -- (-0.0683, 0.1017)
+ -- (-0.0787, 0.0743)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1289, 0.0933)
+ -- (-0.1186, 0.1207)
+ -- (-0.0683, 0.1017)
+ -- (-0.0787, 0.0743)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2223, 0.7399)
+ -- ( 0.2483, 0.7532)
+ -- ( 0.2727, 0.7054)
+ -- ( 0.2467, 0.6920)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2223, 0.7399)
+ -- ( 0.2483, 0.7532)
+ -- ( 0.2727, 0.7054)
+ -- ( 0.2467, 0.6920)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5440, 0.7476)
+ -- ( 0.5576, 0.7217)
+ -- ( 0.5102, 0.6965)
+ -- ( 0.4965, 0.7224)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5440, 0.7476)
+ -- ( 0.5576, 0.7217)
+ -- ( 0.5102, 0.6965)
+ -- ( 0.4965, 0.7224)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5919, 0.6377)
+ -- ( 0.6068, 0.6125)
+ -- ( 0.5604, 0.5853)
+ -- ( 0.5456, 0.6106)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5919, 0.6377)
+ -- ( 0.6068, 0.6125)
+ -- ( 0.5604, 0.5853)
+ -- ( 0.5456, 0.6106)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6224, 0.5979)
+ -- ( 0.6382, 0.5732)
+ -- ( 0.5930, 0.5443)
+ -- ( 0.5772, 0.5690)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6224, 0.5979)
+ -- ( 0.6382, 0.5732)
+ -- ( 0.5930, 0.5443)
+ -- ( 0.5772, 0.5690)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4104, 0.6743)
+ -- ( 0.4255, 0.6491)
+ -- ( 0.3795, 0.6215)
+ -- ( 0.3644, 0.6466)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4104, 0.6743)
+ -- ( 0.4255, 0.6491)
+ -- ( 0.3795, 0.6215)
+ -- ( 0.3644, 0.6466)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4437, 0.6203)
+ -- ( 0.4592, 0.5954)
+ -- ( 0.4136, 0.5671)
+ -- ( 0.3981, 0.5918)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4437, 0.6203)
+ -- ( 0.4592, 0.5954)
+ -- ( 0.4136, 0.5671)
+ -- ( 0.3981, 0.5918)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5275, 0.4892)
+ -- ( 0.5449, 0.4656)
+ -- ( 0.5018, 0.4337)
+ -- ( 0.4844, 0.4571)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5275, 0.4892)
+ -- ( 0.5449, 0.4656)
+ -- ( 0.5018, 0.4337)
+ -- ( 0.4844, 0.4571)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2900, 0.6234)
+ -- ( 0.3087, 0.6008)
+ -- ( 0.2671, 0.5666)
+ -- ( 0.2485, 0.5892)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2900, 0.6234)
+ -- ( 0.3087, 0.6008)
+ -- ( 0.2671, 0.5666)
+ -- ( 0.2485, 0.5892)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3295, 0.5855)
+ -- ( 0.3477, 0.5626)
+ -- ( 0.3058, 0.5291)
+ -- ( 0.2875, 0.5519)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3295, 0.5855)
+ -- ( 0.3477, 0.5626)
+ -- ( 0.3058, 0.5291)
+ -- ( 0.2875, 0.5519)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3915, 0.5035)
+ -- ( 0.4098, 0.4807)
+ -- ( 0.3680, 0.4471)
+ -- ( 0.3497, 0.4699)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3915, 0.5035)
+ -- ( 0.4098, 0.4807)
+ -- ( 0.3680, 0.4471)
+ -- ( 0.3497, 0.4699)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4274, 0.4691)
+ -- ( 0.4472, 0.4474)
+ -- ( 0.4075, 0.4112)
+ -- ( 0.3878, 0.4327)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4274, 0.4691)
+ -- ( 0.4472, 0.4474)
+ -- ( 0.4075, 0.4112)
+ -- ( 0.3878, 0.4327)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0465, 0.7243)
+ -- ( 0.0751, 0.7305)
+ -- ( 0.0864, 0.6779)
+ -- ( 0.0578, 0.6717)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0465, 0.7243)
+ -- ( 0.0751, 0.7305)
+ -- ( 0.0864, 0.6779)
+ -- ( 0.0578, 0.6717)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0312, 0.7116)
+ -- (-0.0338, 0.7407)
+ -- ( 0.0197, 0.7456)
+ -- ( 0.0223, 0.7164)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0312, 0.7116)
+ -- (-0.0338, 0.7407)
+ -- ( 0.0197, 0.7456)
+ -- ( 0.0223, 0.7164)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1044, 0.7143)
+ -- (-0.1084, 0.7434)
+ -- (-0.0552, 0.7507)
+ -- (-0.0512, 0.7216)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1044, 0.7143)
+ -- (-0.1084, 0.7434)
+ -- (-0.0552, 0.7507)
+ -- (-0.0512, 0.7216)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1250, 0.6753)
+ -- (-0.1169, 0.7034)
+ -- (-0.0653, 0.6887)
+ -- (-0.0733, 0.6605)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1250, 0.6753)
+ -- (-0.1169, 0.7034)
+ -- (-0.0653, 0.6887)
+ -- (-0.0733, 0.6605)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2293, 0.7263)
+ -- (-0.2016, 0.7170)
+ -- (-0.2185, 0.6660)
+ -- (-0.2463, 0.6753)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2293, 0.7263)
+ -- (-0.2016, 0.7170)
+ -- (-0.2185, 0.6660)
+ -- (-0.2463, 0.6753)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4164, 0.8019)
+ -- (-0.3886, 0.7926)
+ -- (-0.4056, 0.7417)
+ -- (-0.4335, 0.7510)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4164, 0.8019)
+ -- (-0.3886, 0.7926)
+ -- (-0.4056, 0.7417)
+ -- (-0.4335, 0.7510)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3769, 0.7827)
+ -- (-0.3486, 0.7746)
+ -- (-0.3636, 0.7230)
+ -- (-0.3918, 0.7311)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3769, 0.7827)
+ -- (-0.3486, 0.7746)
+ -- (-0.3636, 0.7230)
+ -- (-0.3918, 0.7311)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2690, 0.8085)
+ -- (-0.2696, 0.8379)
+ -- (-0.2159, 0.8389)
+ -- (-0.2153, 0.8097)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2690, 0.8085)
+ -- (-0.2696, 0.8379)
+ -- (-0.2159, 0.8389)
+ -- (-0.2153, 0.8097)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0864, 0.8532)
+ -- (-0.0767, 0.8256)
+ -- (-0.1273, 0.8076)
+ -- (-0.1371, 0.8352)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0864, 0.8532)
+ -- (-0.0767, 0.8256)
+ -- (-0.1273, 0.8076)
+ -- (-0.1371, 0.8352)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3699, 0.6041)
+ -- (-0.3425, 0.5939)
+ -- (-0.3609, 0.5436)
+ -- (-0.3885, 0.5537)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3699, 0.6041)
+ -- (-0.3425, 0.5939)
+ -- (-0.3609, 0.5436)
+ -- (-0.3885, 0.5537)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4770, 0.6412)
+ -- (-0.4500, 0.6299)
+ -- (-0.4707, 0.5804)
+ -- (-0.4978, 0.5918)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4770, 0.6412)
+ -- (-0.4500, 0.6299)
+ -- (-0.4707, 0.5804)
+ -- (-0.4978, 0.5918)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4348, 0.4860)
+ -- (-0.4060, 0.4806)
+ -- (-0.4159, 0.4278)
+ -- (-0.4447, 0.4332)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4348, 0.4860)
+ -- (-0.4060, 0.4806)
+ -- (-0.4159, 0.4278)
+ -- (-0.4447, 0.4332)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4771, 0.4952)
+ -- (-0.4520, 0.4800)
+ -- (-0.4799, 0.4341)
+ -- (-0.5050, 0.4493)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4771, 0.4952)
+ -- (-0.4520, 0.4800)
+ -- (-0.4799, 0.4341)
+ -- (-0.5050, 0.4493)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5175, 0.4232)
+ -- (-0.4917, 0.4092)
+ -- (-0.5176, 0.3620)
+ -- (-0.5433, 0.3761)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5175, 0.4232)
+ -- (-0.4917, 0.4092)
+ -- (-0.5176, 0.3620)
+ -- (-0.5433, 0.3761)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5739, 0.5614)
+ -- (-0.5487, 0.5464)
+ -- (-0.5762, 0.5003)
+ -- (-0.6013, 0.5152)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5739, 0.5614)
+ -- (-0.5487, 0.5464)
+ -- (-0.5762, 0.5003)
+ -- (-0.6013, 0.5152)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6244, 0.4780)
+ -- (-0.5977, 0.4661)
+ -- (-0.6195, 0.4170)
+ -- (-0.6463, 0.4289)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6244, 0.4780)
+ -- (-0.5977, 0.4661)
+ -- (-0.6195, 0.4170)
+ -- (-0.6463, 0.4289)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6236, 0.1401)
+ -- (-0.6192, 0.1691)
+ -- (-0.5661, 0.1611)
+ -- (-0.5705, 0.1321)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6236, 0.1401)
+ -- (-0.6192, 0.1691)
+ -- (-0.5661, 0.1611)
+ -- (-0.5705, 0.1321)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3872, 0.3590)
+ -- (-0.3829, 0.3880)
+ -- (-0.3297, 0.3800)
+ -- (-0.3341, 0.3510)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3872, 0.3590)
+ -- (-0.3829, 0.3880)
+ -- (-0.3297, 0.3800)
+ -- (-0.3341, 0.3510)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6525, 0.1021)
+ -- (-0.6404, 0.1288)
+ -- (-0.5915, 0.1066)
+ -- (-0.6036, 0.0799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6525, 0.1021)
+ -- (-0.6404, 0.1288)
+ -- (-0.5915, 0.1066)
+ -- (-0.6036, 0.0799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4323, 0.3237)
+ -- (-0.4202, 0.3503)
+ -- (-0.3713, 0.3280)
+ -- (-0.3834, 0.3014)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4323, 0.3237)
+ -- (-0.4202, 0.3503)
+ -- (-0.3713, 0.3280)
+ -- (-0.3834, 0.3014)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3470, 0.2846)
+ -- (-0.3349, 0.3113)
+ -- (-0.2859, 0.2891)
+ -- (-0.2981, 0.2624)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3470, 0.2846)
+ -- (-0.3349, 0.3113)
+ -- (-0.2859, 0.2891)
+ -- (-0.2981, 0.2624)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3053, 0.3741)
+ -- (-0.2932, 0.4008)
+ -- (-0.2443, 0.3786)
+ -- (-0.2564, 0.3519)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3053, 0.3741)
+ -- (-0.2932, 0.4008)
+ -- (-0.2443, 0.3786)
+ -- (-0.2564, 0.3519)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6751, 0.0465)
+ -- (-0.6666, 0.0746)
+ -- (-0.6152, 0.0590)
+ -- (-0.6237, 0.0310)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6751, 0.0465)
+ -- (-0.6666, 0.0746)
+ -- (-0.6152, 0.0590)
+ -- (-0.6237, 0.0310)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7316,-0.0595)
+ -- (-0.7215,-0.0320)
+ -- (-0.6711,-0.0505)
+ -- (-0.6812,-0.0780)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7316,-0.0595)
+ -- (-0.7215,-0.0320)
+ -- (-0.6711,-0.0505)
+ -- (-0.6812,-0.0780)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7748,-0.1355)
+ -- (-0.7629,-0.1088)
+ -- (-0.7138,-0.1305)
+ -- (-0.7257,-0.1573)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7748,-0.1355)
+ -- (-0.7629,-0.1088)
+ -- (-0.7138,-0.1305)
+ -- (-0.7257,-0.1573)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6698,-0.1385)
+ -- (-0.6512,-0.1159)
+ -- (-0.6098,-0.1501)
+ -- (-0.6284,-0.1727)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6698,-0.1385)
+ -- (-0.6512,-0.1159)
+ -- (-0.6098,-0.1501)
+ -- (-0.6284,-0.1727)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3325,-0.1175)
+ -- (-0.3067,-0.1313)
+ -- (-0.3320,-0.1787)
+ -- (-0.3579,-0.1649)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3325,-0.1175)
+ -- (-0.3067,-0.1313)
+ -- (-0.3320,-0.1787)
+ -- (-0.3579,-0.1649)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4097,-0.0630)
+ -- (-0.3827,-0.0741)
+ -- (-0.4031,-0.1238)
+ -- (-0.4302,-0.1127)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4097,-0.0630)
+ -- (-0.3827,-0.0741)
+ -- (-0.4031,-0.1238)
+ -- (-0.4302,-0.1127)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3028, 0.0016)
+ -- (-0.2734, 0.0016)
+ -- (-0.2734,-0.0522)
+ -- (-0.3028,-0.0522)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3028, 0.0016)
+ -- (-0.2734, 0.0016)
+ -- (-0.2734,-0.0522)
+ -- (-0.3028,-0.0522)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2492,-0.0037)
+ -- (-0.2198,-0.0037)
+ -- (-0.2198,-0.0574)
+ -- (-0.2492,-0.0574)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2492,-0.0037)
+ -- (-0.2198,-0.0037)
+ -- (-0.2198,-0.0574)
+ -- (-0.2492,-0.0574)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4151, 0.0294)
+ -- (-0.3858, 0.0294)
+ -- (-0.3858,-0.0243)
+ -- (-0.4151,-0.0243)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4151, 0.0294)
+ -- (-0.3858, 0.0294)
+ -- (-0.3858,-0.0243)
+ -- (-0.4151,-0.0243)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4687, 0.0340)
+ -- (-0.4394, 0.0340)
+ -- (-0.4394,-0.0197)
+ -- (-0.4687,-0.0197)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4687, 0.0340)
+ -- (-0.4394, 0.0340)
+ -- (-0.4394,-0.0197)
+ -- (-0.4687,-0.0197)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5170, 0.0545)
+ -- (-0.4876, 0.0545)
+ -- (-0.4876, 0.0008)
+ -- (-0.5170, 0.0008)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5170, 0.0545)
+ -- (-0.4876, 0.0545)
+ -- (-0.4876, 0.0008)
+ -- (-0.5170, 0.0008)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4695, 0.1540)
+ -- (-0.4413, 0.1461)
+ -- (-0.4557, 0.0943)
+ -- (-0.4839, 0.1022)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4695, 0.1540)
+ -- (-0.4413, 0.1461)
+ -- (-0.4557, 0.0943)
+ -- (-0.4839, 0.1022)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4511, 0.2320)
+ -- (-0.4227, 0.2241)
+ -- (-0.4372, 0.1724)
+ -- (-0.4654, 0.1803)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4511, 0.2320)
+ -- (-0.4227, 0.2241)
+ -- (-0.4372, 0.1724)
+ -- (-0.4654, 0.1803)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4191, 0.1396)
+ -- (-0.3904, 0.1335)
+ -- (-0.4017, 0.0809)
+ -- (-0.4304, 0.0871)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4191, 0.1396)
+ -- (-0.3904, 0.1335)
+ -- (-0.4017, 0.0809)
+ -- (-0.4304, 0.0871)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0048,-0.2963)
+ -- ( 0.0056,-0.2689)
+ -- ( 0.0558,-0.2881)
+ -- ( 0.0453,-0.3155)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0048,-0.2963)
+ -- ( 0.0056,-0.2689)
+ -- ( 0.0558,-0.2881)
+ -- ( 0.0453,-0.3155)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0804,-0.1001)
+ -- ( 0.0908,-0.0728)
+ -- ( 0.1410,-0.0919)
+ -- ( 0.1305,-0.1192)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0804,-0.1001)
+ -- ( 0.0908,-0.0728)
+ -- ( 0.1410,-0.0919)
+ -- ( 0.1305,-0.1192)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1027,-0.2588)
+ -- (-0.0979,-0.2299)
+ -- (-0.0449,-0.2387)
+ -- (-0.0498,-0.2676)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1027,-0.2588)
+ -- (-0.0979,-0.2299)
+ -- (-0.0449,-0.2387)
+ -- (-0.0498,-0.2676)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1889,-0.2314)
+ -- (-0.1776,-0.2043)
+ -- (-0.1281,-0.2251)
+ -- (-0.1394,-0.2521)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1889,-0.2314)
+ -- (-0.1776,-0.2043)
+ -- (-0.1281,-0.2251)
+ -- (-0.1394,-0.2521)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1180,-0.3033)
+ -- (-0.1077,-0.2759)
+ -- (-0.0575,-0.2947)
+ -- (-0.0677,-0.3221)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1180,-0.3033)
+ -- (-0.1077,-0.2759)
+ -- (-0.0575,-0.2947)
+ -- (-0.0677,-0.3221)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2120,-0.2801)
+ -- (-0.2010,-0.2529)
+ -- (-0.1512,-0.2729)
+ -- (-0.1622,-0.3002)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2120,-0.2801)
+ -- (-0.2010,-0.2529)
+ -- (-0.1512,-0.2729)
+ -- (-0.1622,-0.3002)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2265,-0.3343)
+ -- (-0.2161,-0.3069)
+ -- (-0.1659,-0.3259)
+ -- (-0.1762,-0.3533)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2265,-0.3343)
+ -- (-0.2161,-0.3069)
+ -- (-0.1659,-0.3259)
+ -- (-0.1762,-0.3533)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0728,-0.3520)
+ -- (-0.0436,-0.3488)
+ -- (-0.0379,-0.4022)
+ -- (-0.0670,-0.4054)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0728,-0.3520)
+ -- (-0.0436,-0.3488)
+ -- (-0.0379,-0.4022)
+ -- (-0.0670,-0.4054)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3598,-0.6299)
+ -- ( 0.3752,-0.6051)
+ -- ( 0.4209,-0.6334)
+ -- ( 0.4054,-0.6583)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3598,-0.6299)
+ -- ( 0.3752,-0.6051)
+ -- ( 0.4209,-0.6334)
+ -- ( 0.4054,-0.6583)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3284,-0.6582)
+ -- ( 0.3482,-0.6365)
+ -- ( 0.3879,-0.6727)
+ -- ( 0.3681,-0.6944)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3284,-0.6582)
+ -- ( 0.3482,-0.6365)
+ -- ( 0.3879,-0.6727)
+ -- ( 0.3681,-0.6944)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8159,-0.3188)
+ -- (-0.7892,-0.3067)
+ -- (-0.7670,-0.3556)
+ -- (-0.7937,-0.3677)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8159,-0.3188)
+ -- (-0.7892,-0.3067)
+ -- (-0.7670,-0.3556)
+ -- (-0.7937,-0.3677)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8755, 0.1805)
+ -- (-0.8623, 0.2066)
+ -- (-0.8144, 0.1824)
+ -- (-0.8276, 0.1562)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8755, 0.1805)
+ -- (-0.8623, 0.2066)
+ -- (-0.8144, 0.1824)
+ -- (-0.8276, 0.1562)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9400, 0.0507)
+ -- (-0.9275, 0.0771)
+ -- (-0.8789, 0.0541)
+ -- (-0.8916, 0.0276)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9400, 0.0507)
+ -- (-0.9275, 0.0771)
+ -- (-0.8789, 0.0541)
+ -- (-0.8916, 0.0276)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9500,-0.0171)
+ -- (-0.9467, 0.0120)
+ -- (-0.8934, 0.0060)
+ -- (-0.8966,-0.0232)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9500,-0.0171)
+ -- (-0.9467, 0.0120)
+ -- (-0.8934, 0.0060)
+ -- (-0.8966,-0.0232)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0374, 0.6594)
+ -- (-0.0376, 0.6887)
+ -- ( 0.0161, 0.6890)
+ -- ( 0.0162, 0.6598)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0374, 0.6594)
+ -- (-0.0376, 0.6887)
+ -- ( 0.0161, 0.6890)
+ -- ( 0.0162, 0.6598)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1600, 0.8267)
+ -- ( 0.1793, 0.8046)
+ -- ( 0.1388, 0.7692)
+ -- ( 0.1195, 0.7913)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1600, 0.8267)
+ -- ( 0.1793, 0.8046)
+ -- ( 0.1388, 0.7692)
+ -- ( 0.1195, 0.7913)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4284, 0.3107)
+ -- ( 0.4572, 0.3163)
+ -- ( 0.4672, 0.2634)
+ -- ( 0.4384, 0.2580)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4284, 0.3107)
+ -- ( 0.4572, 0.3163)
+ -- ( 0.4672, 0.2634)
+ -- ( 0.4384, 0.2580)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4721, 0.3149)
+ -- ( 0.5003, 0.3230)
+ -- ( 0.5151, 0.2714)
+ -- ( 0.4870, 0.2633)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4721, 0.3149)
+ -- ( 0.5003, 0.3230)
+ -- ( 0.5151, 0.2714)
+ -- ( 0.4870, 0.2633)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5761, 0.3388)
+ -- ( 0.6049, 0.3443)
+ -- ( 0.6150, 0.2916)
+ -- ( 0.5862, 0.2860)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5761, 0.3388)
+ -- ( 0.6049, 0.3443)
+ -- ( 0.6150, 0.2916)
+ -- ( 0.5862, 0.2860)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6283, 0.3369)
+ -- ( 0.6567, 0.3296)
+ -- ( 0.6432, 0.2775)
+ -- ( 0.6148, 0.2849)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6283, 0.3369)
+ -- ( 0.6567, 0.3296)
+ -- ( 0.6432, 0.2775)
+ -- ( 0.6148, 0.2849)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5378, 0.2581)
+ -- ( 0.5670, 0.2616)
+ -- ( 0.5734, 0.2083)
+ -- ( 0.5443, 0.2047)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5378, 0.2581)
+ -- ( 0.5670, 0.2616)
+ -- ( 0.5734, 0.2083)
+ -- ( 0.5443, 0.2047)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4853, 0.2500)
+ -- ( 0.5140, 0.2555)
+ -- ( 0.5241, 0.2028)
+ -- ( 0.4953, 0.1973)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4853, 0.2500)
+ -- ( 0.5140, 0.2555)
+ -- ( 0.5241, 0.2028)
+ -- ( 0.4953, 0.1973)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4028, 0.0895)
+ -- ( 0.4321, 0.0895)
+ -- ( 0.4321, 0.0358)
+ -- ( 0.4028, 0.0358)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4028, 0.0895)
+ -- ( 0.4321, 0.0895)
+ -- ( 0.4321, 0.0358)
+ -- ( 0.4028, 0.0358)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4612, 0.0957)
+ -- ( 0.4899, 0.0898)
+ -- ( 0.4793, 0.0371)
+ -- ( 0.4506, 0.0430)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4612, 0.0957)
+ -- ( 0.4899, 0.0898)
+ -- ( 0.4793, 0.0371)
+ -- ( 0.4506, 0.0430)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5422,-0.0041)
+ -- ( 0.5437,-0.0333)
+ -- ( 0.4900,-0.0361)
+ -- ( 0.4885,-0.0068)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5422,-0.0041)
+ -- ( 0.5437,-0.0333)
+ -- ( 0.4900,-0.0361)
+ -- ( 0.4885,-0.0068)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6654,-0.0050)
+ -- ( 0.6664,-0.0343)
+ -- ( 0.6128,-0.0361)
+ -- ( 0.6117,-0.0068)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6654,-0.0050)
+ -- ( 0.6664,-0.0343)
+ -- ( 0.6128,-0.0361)
+ -- ( 0.6117,-0.0068)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7573, 0.2817)
+ -- ( 0.7646, 0.2533)
+ -- ( 0.7124, 0.2402)
+ -- ( 0.7053, 0.2686)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7573, 0.2817)
+ -- ( 0.7646, 0.2533)
+ -- ( 0.7124, 0.2402)
+ -- ( 0.7053, 0.2686)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7393, 0.3502)
+ -- ( 0.7456, 0.3216)
+ -- ( 0.6931, 0.3101)
+ -- ( 0.6868, 0.3387)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7393, 0.3502)
+ -- ( 0.7456, 0.3216)
+ -- ( 0.6931, 0.3101)
+ -- ( 0.6868, 0.3387)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8114, 0.0963)
+ -- ( 0.8188, 0.0679)
+ -- ( 0.7668, 0.0543)
+ -- ( 0.7594, 0.0826)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8114, 0.0963)
+ -- ( 0.8188, 0.0679)
+ -- ( 0.7668, 0.0543)
+ -- ( 0.7594, 0.0826)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8247,-0.0115)
+ -- ( 0.8312,-0.0401)
+ -- ( 0.7788,-0.0521)
+ -- ( 0.7723,-0.0235)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8247,-0.0115)
+ -- ( 0.8312,-0.0401)
+ -- ( 0.7788,-0.0521)
+ -- ( 0.7723,-0.0235)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.9279, 0.0392)
+ -- ( 0.9358, 0.0110)
+ -- ( 0.8842,-0.0036)
+ -- ( 0.8762, 0.0245)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.9279, 0.0392)
+ -- ( 0.9358, 0.0110)
+ -- ( 0.8842,-0.0036)
+ -- ( 0.8762, 0.0245)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.9473,-0.0199)
+ -- ( 0.9500,-0.0490)
+ -- ( 0.8965,-0.0540)
+ -- ( 0.8939,-0.0248)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.9473,-0.0199)
+ -- ( 0.9500,-0.0490)
+ -- ( 0.8965,-0.0540)
+ -- ( 0.8939,-0.0248)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8832, 0.1513)
+ -- ( 0.8949, 0.1245)
+ -- ( 0.8456, 0.1031)
+ -- ( 0.8339, 0.1300)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8832, 0.1513)
+ -- ( 0.8949, 0.1245)
+ -- ( 0.8456, 0.1031)
+ -- ( 0.8339, 0.1300)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8604, 0.2135)
+ -- ( 0.8734, 0.1872)
+ -- ( 0.8254, 0.1634)
+ -- ( 0.8123, 0.1896)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8604, 0.2135)
+ -- ( 0.8734, 0.1872)
+ -- ( 0.8254, 0.1634)
+ -- ( 0.8123, 0.1896)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7675, 0.2368)
+ -- ( 0.7736, 0.2082)
+ -- ( 0.7210, 0.1970)
+ -- ( 0.7150, 0.2257)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7675, 0.2368)
+ -- ( 0.7736, 0.2082)
+ -- ( 0.7210, 0.1970)
+ -- ( 0.7150, 0.2257)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7696,-0.1796)
+ -- ( 0.7978,-0.1875)
+ -- ( 0.7835,-0.2392)
+ -- ( 0.7552,-0.2314)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7696,-0.1796)
+ -- ( 0.7978,-0.1875)
+ -- ( 0.7835,-0.2392)
+ -- ( 0.7552,-0.2314)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7546,-0.0830)
+ -- ( 0.7838,-0.0830)
+ -- ( 0.7838,-0.1367)
+ -- ( 0.7546,-0.1367)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7546,-0.0830)
+ -- ( 0.7838,-0.0830)
+ -- ( 0.7838,-0.1367)
+ -- ( 0.7546,-0.1367)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7114,-0.1735)
+ -- ( 0.7402,-0.1784)
+ -- ( 0.7313,-0.2313)
+ -- ( 0.7024,-0.2265)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7114,-0.1735)
+ -- ( 0.7402,-0.1784)
+ -- ( 0.7313,-0.2313)
+ -- ( 0.7024,-0.2265)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6398,-0.0896)
+ -- ( 0.6691,-0.0896)
+ -- ( 0.6691,-0.1433)
+ -- ( 0.6398,-0.1433)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6398,-0.0896)
+ -- ( 0.6691,-0.0896)
+ -- ( 0.6691,-0.1433)
+ -- ( 0.6398,-0.1433)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5390,-0.1093)
+ -- ( 0.5377,-0.0801)
+ -- ( 0.5913,-0.0776)
+ -- ( 0.5927,-0.1069)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5390,-0.1093)
+ -- ( 0.5377,-0.0801)
+ -- ( 0.5913,-0.0776)
+ -- ( 0.5927,-0.1069)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5171,-0.2250)
+ -- ( 0.5252,-0.1968)
+ -- ( 0.5767,-0.2117)
+ -- ( 0.5687,-0.2399)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5171,-0.2250)
+ -- ( 0.5252,-0.1968)
+ -- ( 0.5767,-0.2117)
+ -- ( 0.5687,-0.2399)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5024,-0.2807)
+ -- ( 0.5066,-0.2517)
+ -- ( 0.5597,-0.2597)
+ -- ( 0.5555,-0.2887)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5024,-0.2807)
+ -- ( 0.5066,-0.2517)
+ -- ( 0.5597,-0.2597)
+ -- ( 0.5555,-0.2887)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6783,-0.2717)
+ -- ( 0.7056,-0.2824)
+ -- ( 0.6858,-0.3324)
+ -- ( 0.6585,-0.3216)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6783,-0.2717)
+ -- ( 0.7056,-0.2824)
+ -- ( 0.6858,-0.3324)
+ -- ( 0.6585,-0.3216)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4010,-0.3903)
+ -- ( 0.4019,-0.3609)
+ -- ( 0.4556,-0.3627)
+ -- ( 0.4547,-0.3921)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4010,-0.3903)
+ -- ( 0.4019,-0.3609)
+ -- ( 0.4556,-0.3627)
+ -- ( 0.4547,-0.3921)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6576,-0.1610)
+ -- ( 0.6852,-0.1708)
+ -- ( 0.6672,-0.2214)
+ -- ( 0.6396,-0.2116)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6576,-0.1610)
+ -- ( 0.6852,-0.1708)
+ -- ( 0.6672,-0.2214)
+ -- ( 0.6396,-0.2116)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4024,-0.7175)
+ -- ( 0.4484,-0.7175)
+ -- ( 0.4484,-0.7785)
+ -- ( 0.4024,-0.7785)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4024,-0.7175)
+ -- ( 0.4484,-0.7175)
+ -- ( 0.4484,-0.7785)
+ -- ( 0.4024,-0.7785)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3999,-0.7917)
+ -- (-0.3540,-0.7917)
+ -- (-0.3540,-0.8527)
+ -- (-0.3999,-0.8527)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3999,-0.7917)
+ -- (-0.3540,-0.7917)
+ -- (-0.3540,-0.8527)
+ -- (-0.3999,-0.8527)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7770,-0.2886)
+ -- (-0.7319,-0.2679)
+ -- (-0.6985,-0.3406)
+ -- (-0.7437,-0.3613)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7770,-0.2886)
+ -- (-0.7319,-0.2679)
+ -- (-0.6985,-0.3406)
+ -- (-0.7437,-0.3613)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1783,-0.5367)
+ -- (-0.1339,-0.5483)
+ -- (-0.1492,-0.6074)
+ -- (-0.1937,-0.5958)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1783,-0.5367)
+ -- (-0.1339,-0.5483)
+ -- (-0.1492,-0.6074)
+ -- (-0.1937,-0.5958)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3106,-0.7770)
+ -- ( 0.3564,-0.7770)
+ -- ( 0.3564,-0.8380)
+ -- ( 0.3106,-0.8380)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3106,-0.7770)
+ -- ( 0.3564,-0.7770)
+ -- ( 0.3564,-0.8380)
+ -- ( 0.3106,-0.8380)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0626,-0.7954)
+ -- (-0.0196,-0.8113)
+ -- (-0.0406,-0.8686)
+ -- (-0.0837,-0.8527)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0626,-0.7954)
+ -- (-0.0196,-0.8113)
+ -- (-0.0406,-0.8686)
+ -- (-0.0837,-0.8527)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0570,-0.7843)
+ -- ( 0.1025,-0.7910)
+ -- ( 0.0936,-0.8514)
+ -- ( 0.0481,-0.8446)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0570,-0.7843)
+ -- ( 0.1025,-0.7910)
+ -- ( 0.0936,-0.8514)
+ -- ( 0.0481,-0.8446)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0906,-0.6908)
+ -- ( 0.1345,-0.7046)
+ -- ( 0.1161,-0.7629)
+ -- ( 0.0723,-0.7490)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0906,-0.6908)
+ -- ( 0.1345,-0.7046)
+ -- ( 0.1161,-0.7629)
+ -- ( 0.0723,-0.7490)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4731,-0.7998)
+ -- (-0.4283,-0.7899)
+ -- (-0.4151,-0.8496)
+ -- (-0.4600,-0.8595)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4731,-0.7998)
+ -- (-0.4283,-0.7899)
+ -- (-0.4151,-0.8496)
+ -- (-0.4600,-0.8595)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4125,-0.0879)
+ -- ( 0.4578,-0.0951)
+ -- ( 0.4483,-0.1553)
+ -- ( 0.4029,-0.1481)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4125,-0.0879)
+ -- ( 0.4578,-0.0951)
+ -- ( 0.4483,-0.1553)
+ -- ( 0.4029,-0.1481)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2078, 0.8568)
+ -- ( 0.2536, 0.8583)
+ -- ( 0.2555, 0.7973)
+ -- ( 0.2097, 0.7958)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2078, 0.8568)
+ -- ( 0.2536, 0.8583)
+ -- ( 0.2555, 0.7973)
+ -- ( 0.2097, 0.7958)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5829,-0.2493)
+ -- ( 0.6289,-0.2493)
+ -- ( 0.6289,-0.3104)
+ -- ( 0.5829,-0.3104)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5829,-0.2493)
+ -- ( 0.6289,-0.2493)
+ -- ( 0.6289,-0.3104)
+ -- ( 0.5829,-0.3104)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2923,-0.1390)
+ -- ( 0.3109,-0.0970)
+ -- ( 0.3667,-0.1218)
+ -- ( 0.3481,-0.1638)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2923,-0.1390)
+ -- ( 0.3109,-0.0970)
+ -- ( 0.3667,-0.1218)
+ -- ( 0.3481,-0.1638)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6866,-0.0789)
+ -- ( 0.7324,-0.0789)
+ -- ( 0.7324,-0.1400)
+ -- ( 0.6866,-0.1400)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6866,-0.0789)
+ -- ( 0.7324,-0.0789)
+ -- ( 0.7324,-0.1400)
+ -- ( 0.6866,-0.1400)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8206,-0.0922)
+ -- ( 0.8649,-0.1044)
+ -- ( 0.8487,-0.1632)
+ -- ( 0.8045,-0.1511)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8206,-0.0922)
+ -- ( 0.8649,-0.1044)
+ -- ( 0.8487,-0.1632)
+ -- ( 0.8045,-0.1511)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3075, 0.5809)
+ -- (-0.2648, 0.5640)
+ -- (-0.2872, 0.5072)
+ -- (-0.3299, 0.5241)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3075, 0.5809)
+ -- (-0.2648, 0.5640)
+ -- (-0.2872, 0.5072)
+ -- (-0.3299, 0.5241)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7746, 0.3900)
+ -- (-0.7312, 0.3750)
+ -- (-0.7511, 0.3173)
+ -- (-0.7945, 0.3322)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7746, 0.3900)
+ -- (-0.7312, 0.3750)
+ -- (-0.7511, 0.3173)
+ -- (-0.7945, 0.3322)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8224, 0.3024)
+ -- (-0.7807, 0.2831)
+ -- (-0.8064, 0.2277)
+ -- (-0.8481, 0.2470)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8224, 0.3024)
+ -- (-0.7807, 0.2831)
+ -- (-0.8064, 0.2277)
+ -- (-0.8481, 0.2470)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7172, 0.2999)
+ -- (-0.6959, 0.3406)
+ -- (-0.6418, 0.3122)
+ -- (-0.6632, 0.2715)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7172, 0.2999)
+ -- (-0.6959, 0.3406)
+ -- (-0.6418, 0.3122)
+ -- (-0.6632, 0.2715)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7505, 0.2368)
+ -- (-0.7273, 0.2764)
+ -- (-0.6746, 0.2456)
+ -- (-0.6979, 0.2060)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7505, 0.2368)
+ -- (-0.7273, 0.2764)
+ -- (-0.6746, 0.2456)
+ -- (-0.6979, 0.2060)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7726, 0.1668)
+ -- (-0.7521, 0.2080)
+ -- (-0.6975, 0.1808)
+ -- (-0.7180, 0.1396)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7726, 0.1668)
+ -- (-0.7521, 0.2080)
+ -- (-0.6975, 0.1808)
+ -- (-0.7180, 0.1396)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8067, 0.1033)
+ -- (-0.7877, 0.1452)
+ -- (-0.7322, 0.1199)
+ -- (-0.7512, 0.0781)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8067, 0.1033)
+ -- (-0.7877, 0.1452)
+ -- (-0.7322, 0.1199)
+ -- (-0.7512, 0.0781)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8292, 0.0434)
+ -- (-0.8106, 0.0854)
+ -- (-0.7548, 0.0608)
+ -- (-0.7733, 0.0188)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8292, 0.0434)
+ -- (-0.8106, 0.0854)
+ -- (-0.7548, 0.0608)
+ -- (-0.7733, 0.0188)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8479,-0.0238)
+ -- (-0.8336, 0.0199)
+ -- (-0.7757, 0.0009)
+ -- (-0.7899,-0.0427)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8479,-0.0238)
+ -- (-0.8336, 0.0199)
+ -- (-0.7757, 0.0009)
+ -- (-0.7899,-0.0427)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9015,-0.0795)
+ -- (-0.8746,-0.0423)
+ -- (-0.8252,-0.0782)
+ -- (-0.8521,-0.1153)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9015,-0.0795)
+ -- (-0.8746,-0.0423)
+ -- (-0.8252,-0.0782)
+ -- (-0.8521,-0.1153)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5616,-0.6142)
+ -- (-0.5431,-0.6563)
+ -- (-0.5990,-0.6808)
+ -- (-0.6175,-0.6387)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5616,-0.6142)
+ -- (-0.5431,-0.6563)
+ -- (-0.5990,-0.6808)
+ -- (-0.6175,-0.6387)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0094,-0.6230)
+ -- ( 0.0047,-0.5793)
+ -- ( 0.0627,-0.5978)
+ -- ( 0.0487,-0.6416)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0094,-0.6230)
+ -- ( 0.0047,-0.5793)
+ -- ( 0.0627,-0.5978)
+ -- ( 0.0487,-0.6416)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0303,-0.4683)
+ -- ( 0.0443,-0.4246)
+ -- ( 0.1024,-0.4432)
+ -- ( 0.0884,-0.4869)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0303,-0.4683)
+ -- ( 0.0443,-0.4246)
+ -- ( 0.1024,-0.4432)
+ -- ( 0.0884,-0.4869)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2507,-0.3956)
+ -- (-0.2367,-0.3518)
+ -- (-0.1786,-0.3704)
+ -- (-0.1926,-0.4142)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2507,-0.3956)
+ -- (-0.2367,-0.3518)
+ -- (-0.1786,-0.3704)
+ -- (-0.1926,-0.4142)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3208,-0.3936)
+ -- (-0.3069,-0.3498)
+ -- (-0.2487,-0.3684)
+ -- (-0.2627,-0.4122)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3208,-0.3936)
+ -- (-0.3069,-0.3498)
+ -- (-0.2487,-0.3684)
+ -- (-0.2627,-0.4122)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1634,-0.1430)
+ -- ( 0.1790,-0.0997)
+ -- ( 0.2365,-0.1205)
+ -- ( 0.2209,-0.1637)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1634,-0.1430)
+ -- ( 0.1790,-0.0997)
+ -- ( 0.2365,-0.1205)
+ -- ( 0.2209,-0.1637)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1520,-0.2030)
+ -- ( 0.1715,-0.1614)
+ -- ( 0.2268,-0.1873)
+ -- ( 0.2072,-0.2289)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1520,-0.2030)
+ -- ( 0.1715,-0.1614)
+ -- ( 0.2268,-0.1873)
+ -- ( 0.2072,-0.2289)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0852,-0.3696)
+ -- ( 0.1047,-0.3280)
+ -- ( 0.1600,-0.3540)
+ -- ( 0.1404,-0.3956)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0852,-0.3696)
+ -- ( 0.1047,-0.3280)
+ -- ( 0.1600,-0.3540)
+ -- ( 0.1404,-0.3956)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0197,-0.2063)
+ -- ( 0.0392,-0.1647)
+ -- ( 0.0944,-0.1907)
+ -- ( 0.0750,-0.2323)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0197,-0.2063)
+ -- ( 0.0392,-0.1647)
+ -- ( 0.0944,-0.1907)
+ -- ( 0.0750,-0.2323)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3100, 0.7769)
+ -- ( 0.3513, 0.7971)
+ -- ( 0.3781, 0.7423)
+ -- ( 0.3369, 0.7221)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3100, 0.7769)
+ -- ( 0.3513, 0.7971)
+ -- ( 0.3781, 0.7423)
+ -- ( 0.3369, 0.7221)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5097, 0.3286)
+ -- ( 0.5510, 0.3488)
+ -- ( 0.5778, 0.2940)
+ -- ( 0.5366, 0.2738)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5097, 0.3286)
+ -- ( 0.5510, 0.3488)
+ -- ( 0.5778, 0.2940)
+ -- ( 0.5366, 0.2738)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4014, 0.8173)
+ -- ( 0.4429, 0.8369)
+ -- ( 0.4689, 0.7817)
+ -- ( 0.4274, 0.7621)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4014, 0.8173)
+ -- ( 0.4429, 0.8369)
+ -- ( 0.4689, 0.7817)
+ -- ( 0.4274, 0.7621)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2627, 0.7599)
+ -- ( 0.3055, 0.7765)
+ -- ( 0.3276, 0.7196)
+ -- ( 0.2848, 0.7030)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2627, 0.7599)
+ -- ( 0.3055, 0.7765)
+ -- ( 0.3276, 0.7196)
+ -- ( 0.2848, 0.7030)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1763, 0.7193)
+ -- ( 0.2174, 0.7400)
+ -- ( 0.2448, 0.6855)
+ -- ( 0.2038, 0.6648)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1763, 0.7193)
+ -- ( 0.2174, 0.7400)
+ -- ( 0.2448, 0.6855)
+ -- ( 0.2038, 0.6648)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0655, 0.4707)
+ -- (-0.0222, 0.4555)
+ -- (-0.0424, 0.3979)
+ -- (-0.0858, 0.4131)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0655, 0.4707)
+ -- (-0.0222, 0.4555)
+ -- (-0.0424, 0.3979)
+ -- (-0.0858, 0.4131)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0019, 0.5606)
+ -- ( 0.0452, 0.5454)
+ -- ( 0.0251, 0.4878)
+ -- (-0.0183, 0.5030)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0019, 0.5606)
+ -- ( 0.0452, 0.5454)
+ -- ( 0.0251, 0.4878)
+ -- (-0.0183, 0.5030)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0634, 0.0555)
+ -- ( 0.1067, 0.0403)
+ -- ( 0.0865,-0.0174)
+ -- ( 0.0432,-0.0022)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0634, 0.0555)
+ -- ( 0.1067, 0.0403)
+ -- ( 0.0865,-0.0174)
+ -- ( 0.0432,-0.0022)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0445, 0.0687)
+ -- (-0.0010, 0.0535)
+ -- (-0.0213,-0.0041)
+ -- (-0.0646, 0.0110)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0445, 0.0687)
+ -- (-0.0010, 0.0535)
+ -- (-0.0213,-0.0041)
+ -- (-0.0646, 0.0110)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0541, 0.5519)
+ -- ( 0.0966, 0.5344)
+ -- ( 0.0732, 0.4779)
+ -- ( 0.0308, 0.4956)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0541, 0.5519)
+ -- ( 0.0966, 0.5344)
+ -- ( 0.0732, 0.4779)
+ -- ( 0.0308, 0.4956)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0096, 0.8274)
+ -- ( 0.0163, 0.7820)
+ -- (-0.0441, 0.7731)
+ -- (-0.0508, 0.8185)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0096, 0.8274)
+ -- ( 0.0163, 0.7820)
+ -- (-0.0441, 0.7731)
+ -- (-0.0508, 0.8185)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0878, 0.6237)
+ -- (-0.0810, 0.5783)
+ -- (-0.1415, 0.5693)
+ -- (-0.1482, 0.6147)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0878, 0.6237)
+ -- (-0.0810, 0.5783)
+ -- (-0.1415, 0.5693)
+ -- (-0.1482, 0.6147)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0678, 0.8193)
+ -- (-0.0575, 0.7745)
+ -- (-0.1168, 0.7608)
+ -- (-0.1273, 0.8055)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0678, 0.8193)
+ -- (-0.0575, 0.7745)
+ -- (-0.1168, 0.7608)
+ -- (-0.1273, 0.8055)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1958, 0.8007)
+ -- (-0.1517, 0.7877)
+ -- (-0.1688, 0.7292)
+ -- (-0.2129, 0.7420)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1958, 0.8007)
+ -- (-0.1517, 0.7877)
+ -- (-0.1688, 0.7292)
+ -- (-0.2129, 0.7420)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6001, 0.0672)
+ -- ( 0.6452, 0.0758)
+ -- ( 0.6566, 0.0159)
+ -- ( 0.6115, 0.0072)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6001, 0.0672)
+ -- ( 0.6452, 0.0758)
+ -- ( 0.6566, 0.0159)
+ -- ( 0.6115, 0.0072)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8357, 0.2798)
+ -- ( 0.8514, 0.2365)
+ -- ( 0.7940, 0.2158)
+ -- ( 0.7783, 0.2591)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.8357, 0.2798)
+ -- ( 0.8514, 0.2365)
+ -- ( 0.7940, 0.2158)
+ -- ( 0.7783, 0.2591)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4450, 0.0292)
+ -- ( 0.4606,-0.0141)
+ -- ( 0.4032,-0.0348)
+ -- ( 0.3876, 0.0085)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4450, 0.0292)
+ -- ( 0.4606,-0.0141)
+ -- ( 0.4032,-0.0348)
+ -- ( 0.3876, 0.0085)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.9043, 0.1125)
+ -- ( 0.9184, 0.0687)
+ -- ( 0.8603, 0.0500)
+ -- ( 0.8462, 0.0937)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.9043, 0.1125)
+ -- ( 0.9184, 0.0687)
+ -- ( 0.8603, 0.0500)
+ -- ( 0.8462, 0.0937)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7148,-0.2814)
+ -- ( 0.7591,-0.2935)
+ -- ( 0.7430,-0.3524)
+ -- ( 0.6987,-0.3402)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7148,-0.2814)
+ -- ( 0.7591,-0.2935)
+ -- ( 0.7430,-0.3524)
+ -- ( 0.6987,-0.3402)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5891,-0.1425)
+ -- ( 0.5806,-0.1876)
+ -- ( 0.5207,-0.1764)
+ -- ( 0.5291,-0.1313)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5891,-0.1425)
+ -- ( 0.5806,-0.1876)
+ -- ( 0.5207,-0.1764)
+ -- ( 0.5291,-0.1313)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5865, 0.0684)
+ -- ( 0.5782, 0.0233)
+ -- ( 0.5181, 0.0345)
+ -- ( 0.5266, 0.0796)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5865, 0.0684)
+ -- ( 0.5782, 0.0233)
+ -- ( 0.5181, 0.0345)
+ -- ( 0.5266, 0.0796)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4044,-0.3422)
+ -- ( 0.4189,-0.2987)
+ -- ( 0.4768,-0.3180)
+ -- ( 0.4623,-0.3616)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4044,-0.3422)
+ -- ( 0.4189,-0.2987)
+ -- ( 0.4768,-0.3180)
+ -- ( 0.4623,-0.3616)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4665,-0.7188)
+ -- ( 0.5125,-0.7188)
+ -- ( 0.5125,-0.7799)
+ -- ( 0.4665,-0.7799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4665,-0.7188)
+ -- ( 0.5125,-0.7188)
+ -- ( 0.5125,-0.7799)
+ -- ( 0.4665,-0.7799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1285,-0.5747)
+ -- (-0.0826,-0.5747)
+ -- (-0.0826,-0.6356)
+ -- (-0.1285,-0.6356)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1285,-0.5747)
+ -- (-0.0826,-0.5747)
+ -- (-0.0826,-0.6356)
+ -- (-0.1285,-0.6356)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2861,-0.6694)
+ -- (-0.2789,-0.6240)
+ -- (-0.2186,-0.6336)
+ -- (-0.2258,-0.6789)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2861,-0.6694)
+ -- (-0.2789,-0.6240)
+ -- (-0.2186,-0.6336)
+ -- (-0.2258,-0.6789)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1486,-0.3725)
+ -- (-0.1414,-0.3271)
+ -- (-0.0811,-0.3367)
+ -- (-0.0883,-0.3820)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1486,-0.3725)
+ -- (-0.1414,-0.3271)
+ -- (-0.0811,-0.3367)
+ -- (-0.0883,-0.3820)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3576,-0.5916)
+ -- (-0.3319,-0.6297)
+ -- (-0.3826,-0.6638)
+ -- (-0.4082,-0.6256)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3576,-0.5916)
+ -- (-0.3319,-0.6297)
+ -- (-0.3826,-0.6638)
+ -- (-0.4082,-0.6256)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5468,-0.2716)
+ -- (-0.5213,-0.3098)
+ -- (-0.5719,-0.3438)
+ -- (-0.5976,-0.3056)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5468,-0.2716)
+ -- (-0.5213,-0.3098)
+ -- (-0.5719,-0.3438)
+ -- (-0.5976,-0.3056)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4969,-0.5222)
+ -- (-0.4767,-0.5634)
+ -- (-0.5315,-0.5902)
+ -- (-0.5518,-0.5490)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4969,-0.5222)
+ -- (-0.4767,-0.5634)
+ -- (-0.5315,-0.5902)
+ -- (-0.5518,-0.5490)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3963,-0.6922)
+ -- (-0.3778,-0.7343)
+ -- (-0.4338,-0.7588)
+ -- (-0.4522,-0.7168)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3963,-0.6922)
+ -- (-0.3778,-0.7343)
+ -- (-0.4338,-0.7588)
+ -- (-0.4522,-0.7168)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6145,-0.5157)
+ -- (-0.5944,-0.5570)
+ -- (-0.6493,-0.5836)
+ -- (-0.6694,-0.5423)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6145,-0.5157)
+ -- (-0.5944,-0.5570)
+ -- (-0.6493,-0.5836)
+ -- (-0.6694,-0.5423)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8791,-0.2053)
+ -- (-0.8402,-0.1810)
+ -- (-0.8079,-0.2327)
+ -- (-0.8468,-0.2571)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.8791,-0.2053)
+ -- (-0.8402,-0.1810)
+ -- (-0.8079,-0.2327)
+ -- (-0.8468,-0.2571)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9144, 0.1039)
+ -- (-0.8919, 0.1439)
+ -- (-0.8388, 0.1140)
+ -- (-0.8613, 0.0740)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.9144, 0.1039)
+ -- (-0.8919, 0.1439)
+ -- (-0.8388, 0.1140)
+ -- (-0.8613, 0.0740)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4095, 0.2277)
+ -- (-0.3639, 0.2229)
+ -- (-0.3703, 0.1622)
+ -- (-0.4159, 0.1670)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4095, 0.2277)
+ -- (-0.3639, 0.2229)
+ -- (-0.3703, 0.1622)
+ -- (-0.4159, 0.1670)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3590, 0.4200)
+ -- (-0.3365, 0.4600)
+ -- (-0.2833, 0.4302)
+ -- (-0.3058, 0.3901)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3590, 0.4200)
+ -- (-0.3365, 0.4600)
+ -- (-0.2833, 0.4302)
+ -- (-0.3058, 0.3901)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0764, 0.3204)
+ -- (-0.0539, 0.3604)
+ -- (-0.0007, 0.3306)
+ -- (-0.0232, 0.2905)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0764, 0.3204)
+ -- (-0.0539, 0.3604)
+ -- (-0.0007, 0.3306)
+ -- (-0.0232, 0.2905)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1364, 0.0430)
+ -- (-0.1139, 0.0831)
+ -- (-0.0607, 0.0532)
+ -- (-0.0832, 0.0131)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1364, 0.0430)
+ -- (-0.1139, 0.0831)
+ -- (-0.0607, 0.0532)
+ -- (-0.0832, 0.0131)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1269, 0.1239)
+ -- (-0.1149, 0.1681)
+ -- (-0.0560, 0.1521)
+ -- (-0.0681, 0.1078)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1269, 0.1239)
+ -- (-0.1149, 0.1681)
+ -- (-0.0560, 0.1521)
+ -- (-0.0681, 0.1078)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6443,-0.1022)
+ -- (-0.6321,-0.0579)
+ -- (-0.5733,-0.0740)
+ -- (-0.5854,-0.1183)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6443,-0.1022)
+ -- (-0.6321,-0.0579)
+ -- (-0.5733,-0.0740)
+ -- (-0.5854,-0.1183)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6032, 0.2357)
+ -- (-0.5912, 0.2800)
+ -- (-0.5323, 0.2639)
+ -- (-0.5443, 0.2196)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6032, 0.2357)
+ -- (-0.5912, 0.2800)
+ -- (-0.5323, 0.2639)
+ -- (-0.5443, 0.2196)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7230, 0.0020)
+ -- (-0.7026, 0.0432)
+ -- (-0.6479, 0.0162)
+ -- (-0.6682,-0.0250)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7230, 0.0020)
+ -- (-0.7026, 0.0432)
+ -- (-0.6479, 0.0162)
+ -- (-0.6682,-0.0250)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5055, 0.2596)
+ -- (-0.4629, 0.2423)
+ -- (-0.4859, 0.1858)
+ -- (-0.5285, 0.2031)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5055, 0.2596)
+ -- (-0.4629, 0.2423)
+ -- (-0.4859, 0.1858)
+ -- (-0.5285, 0.2031)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1337, 0.3296)
+ -- ( 0.1283, 0.2840)
+ -- ( 0.0677, 0.2911)
+ -- ( 0.0731, 0.3367)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1337, 0.3296)
+ -- ( 0.1283, 0.2840)
+ -- ( 0.0677, 0.2911)
+ -- ( 0.0731, 0.3367)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1476, 0.4414)
+ -- ( 0.1506, 0.3955)
+ -- ( 0.0897, 0.3916)
+ -- ( 0.0867, 0.4375)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1476, 0.4414)
+ -- ( 0.1506, 0.3955)
+ -- ( 0.0897, 0.3916)
+ -- ( 0.0867, 0.4375)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0539,-0.1542)
+ -- ( 0.0687,-0.1107)
+ -- ( 0.1264,-0.1304)
+ -- ( 0.1116,-0.1738)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0539,-0.1542)
+ -- ( 0.0687,-0.1107)
+ -- ( 0.1264,-0.1304)
+ -- ( 0.1116,-0.1738)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0962,-0.1436)
+ -- (-0.0814,-0.1001)
+ -- (-0.0237,-0.1198)
+ -- (-0.0385,-0.1633)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0962,-0.1436)
+ -- (-0.0814,-0.1001)
+ -- (-0.0237,-0.1198)
+ -- (-0.0385,-0.1633)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1683,-0.0622)
+ -- (-0.1535,-0.0188)
+ -- (-0.0958,-0.0385)
+ -- (-0.1106,-0.0820)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1683,-0.0622)
+ -- (-0.1535,-0.0188)
+ -- (-0.0958,-0.0385)
+ -- (-0.1106,-0.0820)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1842,-0.1310)
+ -- (-0.1694,-0.0876)
+ -- (-0.1116,-0.1073)
+ -- (-0.1264,-0.1508)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1842,-0.1310)
+ -- (-0.1694,-0.0876)
+ -- (-0.1116,-0.1073)
+ -- (-0.1264,-0.1508)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1167,-0.5813)
+ -- ( 0.1315,-0.5379)
+ -- ( 0.1892,-0.5576)
+ -- ( 0.1744,-0.6011)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1167,-0.5813)
+ -- ( 0.1315,-0.5379)
+ -- ( 0.1892,-0.5576)
+ -- ( 0.1744,-0.6011)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0916,-0.6322)
+ -- ( 0.1064,-0.5888)
+ -- ( 0.1642,-0.6085)
+ -- ( 0.1493,-0.6520)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0916,-0.6322)
+ -- ( 0.1064,-0.5888)
+ -- ( 0.1642,-0.6085)
+ -- ( 0.1493,-0.6520)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3791,-0.5978)
+ -- ( 0.3941,-0.5544)
+ -- ( 0.4518,-0.5741)
+ -- ( 0.4369,-0.6176)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3791,-0.5978)
+ -- ( 0.3941,-0.5544)
+ -- ( 0.4518,-0.5741)
+ -- ( 0.4369,-0.6176)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4116,-0.5397)
+ -- ( 0.4392,-0.5029)
+ -- ( 0.4880,-0.5396)
+ -- ( 0.4604,-0.5764)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4116,-0.5397)
+ -- ( 0.4392,-0.5029)
+ -- ( 0.4880,-0.5396)
+ -- ( 0.4604,-0.5764)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2218,-0.5853)
+ -- ( 0.2366,-0.5418)
+ -- ( 0.2944,-0.5615)
+ -- ( 0.2796,-0.6051)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2218,-0.5853)
+ -- ( 0.2366,-0.5418)
+ -- ( 0.2944,-0.5615)
+ -- ( 0.2796,-0.6051)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3094, 0.1262)
+ -- ( 0.3519, 0.1085)
+ -- ( 0.3284, 0.0522)
+ -- ( 0.2860, 0.0698)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3094, 0.1262)
+ -- ( 0.3519, 0.1085)
+ -- ( 0.3284, 0.0522)
+ -- ( 0.2860, 0.0698)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2797, 0.1784)
+ -- ( 0.3041, 0.1395)
+ -- ( 0.2524, 0.1070)
+ -- ( 0.2280, 0.1459)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2797, 0.1784)
+ -- ( 0.3041, 0.1395)
+ -- ( 0.2524, 0.1070)
+ -- ( 0.2280, 0.1459)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7950, 0.1548)
+ -- ( 0.8065, 0.1103)
+ -- ( 0.7475, 0.0949)
+ -- ( 0.7359, 0.1394)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7950, 0.1548)
+ -- ( 0.8065, 0.1103)
+ -- ( 0.7475, 0.0949)
+ -- ( 0.7359, 0.1394)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5739, 0.6926)
+ -- ( 0.5961, 0.6525)
+ -- ( 0.5427, 0.6229)
+ -- ( 0.5205, 0.6632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5739, 0.6926)
+ -- ( 0.5961, 0.6525)
+ -- ( 0.5427, 0.6229)
+ -- ( 0.5205, 0.6632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6499, 0.5535)
+ -- ( 0.6714, 0.5129)
+ -- ( 0.6174, 0.4844)
+ -- ( 0.5959, 0.5250)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6499, 0.5535)
+ -- ( 0.6714, 0.5129)
+ -- ( 0.6174, 0.4844)
+ -- ( 0.5959, 0.5250)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4994, 0.7998)
+ -- (-0.4558, 0.8143)
+ -- (-0.4364, 0.7565)
+ -- (-0.4800, 0.7419)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4994, 0.7998)
+ -- (-0.4558, 0.8143)
+ -- (-0.4364, 0.7565)
+ -- (-0.4800, 0.7419)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3350, 0.7630)
+ -- (-0.2917, 0.7475)
+ -- (-0.3125, 0.6901)
+ -- (-0.3558, 0.7057)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3350, 0.7630)
+ -- (-0.2917, 0.7475)
+ -- (-0.3125, 0.6901)
+ -- (-0.3558, 0.7057)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4472, 0.6282)
+ -- (-0.4040, 0.6124)
+ -- (-0.4252, 0.5551)
+ -- (-0.4683, 0.5710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4472, 0.6282)
+ -- (-0.4040, 0.6124)
+ -- (-0.4252, 0.5551)
+ -- (-0.4683, 0.5710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5200, 0.6603)
+ -- (-0.4792, 0.6394)
+ -- (-0.5070, 0.5851)
+ -- (-0.5480, 0.6061)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5200, 0.6603)
+ -- (-0.4792, 0.6394)
+ -- (-0.5070, 0.5851)
+ -- (-0.5480, 0.6061)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5301, 0.5359)
+ -- (-0.4915, 0.5109)
+ -- (-0.5247, 0.4597)
+ -- (-0.5633, 0.4846)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5301, 0.5359)
+ -- (-0.4915, 0.5109)
+ -- (-0.5247, 0.4597)
+ -- (-0.5633, 0.4846)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6860, 0.5063)
+ -- (-0.6426, 0.4914)
+ -- (-0.6624, 0.4337)
+ -- (-0.7058, 0.4486)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6860, 0.5063)
+ -- (-0.6426, 0.4914)
+ -- (-0.6624, 0.4337)
+ -- (-0.7058, 0.4486)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5849, 0.4574)
+ -- (-0.5414, 0.4425)
+ -- (-0.5613, 0.3847)
+ -- (-0.6047, 0.3997)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5849, 0.4574)
+ -- (-0.5414, 0.4425)
+ -- (-0.5613, 0.3847)
+ -- (-0.6047, 0.3997)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4531,-0.1794)
+ -- (-0.4094,-0.1941)
+ -- (-0.4289,-0.2518)
+ -- (-0.4725,-0.2372)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4531,-0.1794)
+ -- (-0.4094,-0.1941)
+ -- (-0.4289,-0.2518)
+ -- (-0.4725,-0.2372)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3573, 0.0277)
+ -- (-0.3138, 0.0131)
+ -- (-0.3333,-0.0447)
+ -- (-0.3768,-0.0300)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3573, 0.0277)
+ -- (-0.3138, 0.0131)
+ -- (-0.3333,-0.0447)
+ -- (-0.3768,-0.0300)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3354,-0.4695)
+ -- ( 0.3141,-0.5101)
+ -- ( 0.2601,-0.4816)
+ -- ( 0.2815,-0.4410)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3354,-0.4695)
+ -- ( 0.3141,-0.5101)
+ -- ( 0.2601,-0.4816)
+ -- ( 0.2815,-0.4410)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6206,-0.4111)
+ -- ( 0.6599,-0.4350)
+ -- ( 0.6281,-0.4872)
+ -- ( 0.5889,-0.4632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6206,-0.4111)
+ -- ( 0.6599,-0.4350)
+ -- ( 0.6281,-0.4872)
+ -- ( 0.5889,-0.4632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6061,-0.5834)
+ -- ( 0.6495,-0.5984)
+ -- ( 0.6296,-0.6561)
+ -- ( 0.5861,-0.6411)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.6061,-0.5834)
+ -- ( 0.6495,-0.5984)
+ -- ( 0.6296,-0.6561)
+ -- ( 0.5861,-0.6411)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2902, 0.2707)
+ -- ( 0.3361, 0.2673)
+ -- ( 0.3317, 0.2065)
+ -- ( 0.2859, 0.2098)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2902, 0.2707)
+ -- ( 0.3361, 0.2673)
+ -- ( 0.3317, 0.2065)
+ -- ( 0.2859, 0.2098)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2215, 0.2766)
+ -- ( 0.2673, 0.2733)
+ -- ( 0.2630, 0.2124)
+ -- ( 0.2172, 0.2157)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2215, 0.2766)
+ -- ( 0.2673, 0.2733)
+ -- ( 0.2630, 0.2124)
+ -- ( 0.2172, 0.2157)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0159, 0.4498)
+ -- ( 0.0299, 0.4466)
+ -- ( 0.0256, 0.3857)
+ -- (-0.0202, 0.3889)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0159, 0.4498)
+ -- ( 0.0299, 0.4466)
+ -- ( 0.0256, 0.3857)
+ -- (-0.0202, 0.3889)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0377, 0.1701)
+ -- ( 0.0835, 0.1668)
+ -- ( 0.0791, 0.1060)
+ -- ( 0.0333, 0.1092)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0377, 0.1701)
+ -- ( 0.0835, 0.1668)
+ -- ( 0.0791, 0.1060)
+ -- ( 0.0333, 0.1092)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0944, 0.1648)
+ -- ( 0.1403, 0.1657)
+ -- ( 0.1415, 0.1047)
+ -- ( 0.0955, 0.1038)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0944, 0.1648)
+ -- ( 0.1403, 0.1657)
+ -- ( 0.1415, 0.1047)
+ -- ( 0.0955, 0.1038)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2434, 0.4429)
+ -- ( 0.2698, 0.4054)
+ -- ( 0.2199, 0.3702)
+ -- ( 0.1935, 0.4077)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2434, 0.4429)
+ -- ( 0.2698, 0.4054)
+ -- ( 0.2199, 0.3702)
+ -- ( 0.1935, 0.4077)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4777, 0.5914)
+ -- ( 0.4980, 0.5501)
+ -- ( 0.4432, 0.5232)
+ -- ( 0.4229, 0.5644)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4777, 0.5914)
+ -- ( 0.4980, 0.5501)
+ -- ( 0.4432, 0.5232)
+ -- ( 0.4229, 0.5644)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4936, 0.5331)
+ -- ( 0.5191, 0.4949)
+ -- ( 0.4683, 0.4611)
+ -- ( 0.4428, 0.4993)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4936, 0.5331)
+ -- ( 0.5191, 0.4949)
+ -- ( 0.4683, 0.4611)
+ -- ( 0.4428, 0.4993)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4667, 0.4393)
+ -- ( 0.4871, 0.3980)
+ -- ( 0.4323, 0.3711)
+ -- ( 0.4120, 0.4123)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4667, 0.4393)
+ -- ( 0.4871, 0.3980)
+ -- ( 0.4323, 0.3711)
+ -- ( 0.4120, 0.4123)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2446,-0.1495)
+ -- (-0.2153,-0.1488)
+ -- (-0.2138,-0.2024)
+ -- (-0.2431,-0.2032)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2446,-0.1495)
+ -- (-0.2153,-0.1488)
+ -- (-0.2138,-0.2024)
+ -- (-0.2431,-0.2032)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1018, 0.2179)
+ -- (-0.0915, 0.2454)
+ -- (-0.0412, 0.2264)
+ -- (-0.0516, 0.1989)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1018, 0.2179)
+ -- (-0.0915, 0.2454)
+ -- (-0.0412, 0.2264)
+ -- (-0.0516, 0.1989)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4189, 0.2515)
+ -- ( 0.4645, 0.2567)
+ -- ( 0.4714, 0.1960)
+ -- ( 0.4257, 0.1909)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4189, 0.2515)
+ -- ( 0.4645, 0.2567)
+ -- ( 0.4714, 0.1960)
+ -- ( 0.4257, 0.1909)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5784, 0.2650)
+ -- ( 0.6240, 0.2702)
+ -- ( 0.6308, 0.2095)
+ -- ( 0.5852, 0.2043)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5784, 0.2650)
+ -- ( 0.6240, 0.2702)
+ -- ( 0.6308, 0.2095)
+ -- ( 0.5852, 0.2043)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5509, 0.4874)
+ -- ( 0.5966, 0.4925)
+ -- ( 0.6034, 0.4319)
+ -- ( 0.5577, 0.4267)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5509, 0.4874)
+ -- ( 0.5966, 0.4925)
+ -- ( 0.6034, 0.4319)
+ -- ( 0.5577, 0.4267)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1390, 0.6195)
+ -- ( 0.1654, 0.5820)
+ -- ( 0.1155, 0.5468)
+ -- ( 0.0890, 0.5843)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1390, 0.6195)
+ -- ( 0.1654, 0.5820)
+ -- ( 0.1155, 0.5468)
+ -- ( 0.0890, 0.5843)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1780,-0.4082)
+ -- (-0.1533,-0.3695)
+ -- (-0.1018,-0.4023)
+ -- (-0.1265,-0.4410)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1780,-0.4082)
+ -- (-0.1533,-0.3695)
+ -- (-0.1018,-0.4023)
+ -- (-0.1265,-0.4410)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2611,-0.2396)
+ -- (-0.2175,-0.2543)
+ -- (-0.2370,-0.3121)
+ -- (-0.2805,-0.2974)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2611,-0.2396)
+ -- (-0.2175,-0.2543)
+ -- (-0.2370,-0.3121)
+ -- (-0.2805,-0.2974)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1640,-0.8299)
+ -- ( 0.1872,-0.8299)
+ -- ( 0.1872,-0.8565)
+ -- ( 0.1640,-0.8565)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1640,-0.8299)
+ -- ( 0.1872,-0.8299)
+ -- ( 0.1872,-0.8565)
+ -- ( 0.1640,-0.8565)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1330,-0.7413)
+ -- (-0.1099,-0.7413)
+ -- (-0.1099,-0.7679)
+ -- (-0.1330,-0.7679)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1330,-0.7413)
+ -- (-0.1099,-0.7413)
+ -- (-0.1099,-0.7679)
+ -- (-0.1330,-0.7679)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3280,-0.8061)
+ -- (-0.3049,-0.8061)
+ -- (-0.3049,-0.8327)
+ -- (-0.3280,-0.8327)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3280,-0.8061)
+ -- (-0.3049,-0.8061)
+ -- (-0.3049,-0.8327)
+ -- (-0.3280,-0.8327)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7302,-0.0754)
+ -- (-0.7099,-0.0866)
+ -- (-0.7228,-0.1099)
+ -- (-0.7430,-0.0988)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7302,-0.0754)
+ -- (-0.7099,-0.0866)
+ -- (-0.7228,-0.1099)
+ -- (-0.7430,-0.0988)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0147, 0.1985)
+ -- ( 0.0078, 0.1934)
+ -- ( 0.0020, 0.1675)
+ -- (-0.0206, 0.1726)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0147, 0.1985)
+ -- ( 0.0078, 0.1934)
+ -- ( 0.0020, 0.1675)
+ -- (-0.0206, 0.1726)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7613, 0.0272)
+ -- ( 0.7841, 0.0313)
+ -- ( 0.7889, 0.0050)
+ -- ( 0.7661, 0.0009)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.7613, 0.0272)
+ -- ( 0.7841, 0.0313)
+ -- ( 0.7889, 0.0050)
+ -- ( 0.7661, 0.0009)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0160, 0.0427)
+ -- ( 0.0379, 0.0352)
+ -- ( 0.0294, 0.0100)
+ -- ( 0.0075, 0.0174)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0160, 0.0427)
+ -- ( 0.0379, 0.0352)
+ -- ( 0.0294, 0.0100)
+ -- ( 0.0075, 0.0174)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3515,-0.2403)
+ -- ( 0.3743,-0.2442)
+ -- ( 0.3697,-0.2705)
+ -- ( 0.3469,-0.2665)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3515,-0.2403)
+ -- ( 0.3743,-0.2442)
+ -- ( 0.3697,-0.2705)
+ -- ( 0.3469,-0.2665)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0718, 0.3637)
+ -- ( 0.0933, 0.3723)
+ -- ( 0.1032, 0.3476)
+ -- ( 0.0817, 0.3390)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0718, 0.3637)
+ -- ( 0.0933, 0.3723)
+ -- ( 0.1032, 0.3476)
+ -- ( 0.0817, 0.3390)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2555, 0.2647)
+ -- (-0.2413, 0.2902)
+ -- (-0.1944, 0.2641)
+ -- (-0.2086, 0.2385)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2555, 0.2647)
+ -- (-0.2413, 0.2902)
+ -- (-0.1944, 0.2641)
+ -- (-0.2086, 0.2385)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2832, 0.1509)
+ -- (-0.2826, 0.1802)
+ -- (-0.2289, 0.1792)
+ -- (-0.2295, 0.1498)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2832, 0.1509)
+ -- (-0.2826, 0.1802)
+ -- (-0.2289, 0.1792)
+ -- (-0.2295, 0.1498)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5694, 0.6977)
+ -- (-0.5248, 0.6870)
+ -- (-0.5390, 0.6277)
+ -- (-0.5837, 0.6384)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5694, 0.6977)
+ -- (-0.5248, 0.6870)
+ -- (-0.5390, 0.6277)
+ -- (-0.5837, 0.6384)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6046, 0.6071)
+ -- (-0.5747, 0.5723)
+ -- (-0.6210, 0.5326)
+ -- (-0.6509, 0.5674)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6046, 0.6071)
+ -- (-0.5747, 0.5723)
+ -- (-0.6210, 0.5326)
+ -- (-0.6509, 0.5674)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2915,-0.1208)
+ -- (-0.2462,-0.1288)
+ -- (-0.2569,-0.1889)
+ -- (-0.3021,-0.1809)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2915,-0.1208)
+ -- (-0.2462,-0.1288)
+ -- (-0.2569,-0.1889)
+ -- (-0.3021,-0.1809)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1636, 0.0236)
+ -- ( 0.2095, 0.0215)
+ -- ( 0.2067,-0.0394)
+ -- ( 0.1608,-0.0374)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1636, 0.0236)
+ -- ( 0.2095, 0.0215)
+ -- ( 0.2067,-0.0394)
+ -- ( 0.1608,-0.0374)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0653,-0.5296)
+ -- (-0.0423,-0.5269)
+ -- (-0.0391,-0.5533)
+ -- (-0.0621,-0.5560)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0653,-0.5296)
+ -- (-0.0423,-0.5269)
+ -- (-0.0391,-0.5533)
+ -- (-0.0621,-0.5560)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3393, 0.1912)
+ -- (-0.3173, 0.1843)
+ -- (-0.3254, 0.1589)
+ -- (-0.3474, 0.1659)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3393, 0.1912)
+ -- (-0.3173, 0.1843)
+ -- (-0.3254, 0.1589)
+ -- (-0.3474, 0.1659)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2247, 0.5875)
+ -- (-0.2027, 0.5801)
+ -- (-0.2113, 0.5549)
+ -- (-0.2332, 0.5623)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2247, 0.5875)
+ -- (-0.2027, 0.5801)
+ -- (-0.2113, 0.5549)
+ -- (-0.2332, 0.5623)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3747, 0.1590)
+ -- ( 0.4022, 0.1690)
+ -- ( 0.4206, 0.1185)
+ -- ( 0.3930, 0.1085)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3747, 0.1590)
+ -- ( 0.4022, 0.1690)
+ -- ( 0.4206, 0.1185)
+ -- ( 0.3930, 0.1085)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/light_woods.dtx b/macros/latex/contrib/wargame/source/hex/terrain/light_woods.dtx
new file mode 100644
index 0000000000..ee15f5ce78
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/light_woods.dtx
@@ -0,0 +1,848 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/light woods}
+% The draw style for light woods. The pattern is filled with light
+% green, and outline is not drawn.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/light woods/.style={
+ draw=none,
+ fill={rgb,100:red,69;green,98;blue,69}
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{hex/terrain/light woods}
+% Next, we have light woods.
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/light woods/.pic={
+ \path[hex/terrain/light woods,pic actions,draw=none]
+ (-0.4795, 0.8736)
+ -- (-0.5104, 0.8207)
+ .. controls (-0.5041, 0.8191) and (-0.4967, 0.8182) .. (-0.4854, 0.8192)
+ -- (-0.4770, 0.8108)
+ -- (-0.4854, 0.7856)
+ -- (-0.5190, 0.8023)
+ .. controls (-0.5219, 0.7975) and (-0.5245, 0.7958) .. (-0.5272, 0.7916)
+ -- (-0.5881, 0.6872)
+ .. controls (-0.5849, 0.6876) and (-0.5819, 0.6876) .. (-0.5782, 0.6885)
+ .. controls (-0.5524, 0.6946) and (-0.5387, 0.7153) .. (-0.5182, 0.7298)
+ .. controls (-0.4841, 0.7540) and (-0.4420, 0.7539) .. (-0.4346, 0.7864)
+ .. controls (-0.4295, 0.8088) and (-0.4470, 0.8265) .. (-0.4572, 0.8444)
+ .. controls (-0.4631, 0.8549) and (-0.4670, 0.8646) .. (-0.4707, 0.8736)
+ --cycle
+ (-0.3185, 0.8722)
+ .. controls (-0.3478, 0.8487) and (-0.3526, 0.8080) .. (-0.3290, 0.7808)
+ .. controls (-0.3140, 0.7633) and (-0.2394, 0.7433) .. (-0.2165, 0.7459)
+ .. controls (-0.1895, 0.7488) and (-0.1787, 0.7643) .. (-0.1561, 0.7725)
+ .. controls (-0.1380, 0.7791) and (-0.1179, 0.7766) .. (-0.1025, 0.7906)
+ .. controls (-0.0719, 0.8182) and (-0.0936, 0.8427) .. (-0.1240, 0.8528)
+ -- (-0.1323, 0.8192)
+ -- (-0.1912, 0.8359)
+ .. controls (-0.1985, 0.8023) and (-0.1999, 0.7965) .. (-0.2332, 0.7856)
+ .. controls (-0.2512, 0.8363) and (-0.2775, 0.8009) .. (-0.2909, 0.8240)
+ .. controls (-0.2975, 0.8355) and (-0.2884, 0.8535) .. (-0.2756, 0.8719)
+ --cycle
+ (-0.1660, 0.8709)
+ .. controls (-0.1609, 0.8538) and (-0.1460, 0.8596) .. (-0.1371, 0.8707)
+ --cycle
+ ( 0.0768, 0.8689)
+ .. controls ( 0.0767, 0.8688) and ( 0.0765, 0.8686) .. ( 0.0764, 0.8685)
+ .. controls ( 0.0704, 0.8503) and ( 0.0779, 0.7592) .. ( 0.1533, 0.7700)
+ .. controls ( 0.1955, 0.7761) and ( 0.1956, 0.8018) .. ( 0.1871, 0.8359)
+ -- ( 0.1366, 0.8108)
+ -- ( 0.1510, 0.8683)
+ --cycle
+ ( 0.1840, 0.8680)
+ .. controls ( 0.1910, 0.8650) and ( 0.1993, 0.8662) .. ( 0.2081, 0.8678)
+ --cycle
+ ( 0.2214, 0.8677)
+ -- ( 0.2459, 0.7939)
+ .. controls ( 0.1903, 0.7716) and ( 0.2267, 0.7399) .. ( 0.2534, 0.7490)
+ .. controls ( 0.2925, 0.7624) and ( 0.2842, 0.8066) .. ( 0.2735, 0.8359)
+ .. controls ( 0.2690, 0.8483) and ( 0.2655, 0.8586) .. ( 0.2619, 0.8674)
+ --cycle
+ ( 0.4057, 0.8661)
+ .. controls ( 0.4149, 0.8349) and ( 0.4483, 0.8068) .. ( 0.4873, 0.8349)
+ .. controls ( 0.4993, 0.8436) and ( 0.5001, 0.8496) .. ( 0.5065, 0.8612)
+ .. controls ( 0.5170, 0.8447) and ( 0.5269, 0.8297) .. ( 0.5405, 0.8189)
+ -- ( 0.5145, 0.8652)
+ --cycle
+ (-0.0288, 0.8391)
+ .. controls (-0.0335, 0.8388) and (-0.0390, 0.8377) .. (-0.0453, 0.8356)
+ .. controls (-0.0698, 0.8019) and (-0.0347, 0.7882) .. (-0.0173, 0.7966)
+ .. controls ( 0.0001, 0.8052) and ( 0.0042, 0.8413) .. (-0.0288, 0.8391)
+ --cycle
+ ( 0.3888, 0.7856)
+ -- ( 0.3719, 0.7687)
+ -- ( 0.3719, 0.7604)
+ -- ( 0.3888, 0.7435)
+ -- ( 0.3972, 0.7435)
+ -- ( 0.4140, 0.7604)
+ --cycle
+ (-0.0821, 0.7138)
+ .. controls (-0.0999, 0.7158) and (-0.1171, 0.7050) .. (-0.1211, 0.6922)
+ .. controls (-0.1297, 0.6650) and (-0.0695, 0.6250) .. (-0.0468, 0.6186)
+ .. controls (-0.0352, 0.6169) and (-0.0107, 0.6175) .. ( 0.0022, 0.6186)
+ .. controls (-0.0326, 0.5765) and (-0.0411, 0.5767) .. (-0.0909, 0.5922)
+ .. controls (-0.0924, 0.5799) and (-0.0959, 0.5731) .. (-0.0909, 0.5597)
+ .. controls (-0.0591, 0.4605) and ( 0.1221, 0.6255) .. ( 0.0020, 0.6581)
+ .. controls (-0.0090, 0.6597) and (-0.0281, 0.6592) .. (-0.0399, 0.6581)
+ .. controls (-0.0462, 0.6969) and (-0.0645, 0.7118) .. (-0.0821, 0.7138)
+ --cycle
+ ( 0.3704, 0.7106)
+ .. controls ( 0.3510, 0.7072) and ( 0.3332, 0.6943) .. ( 0.3224, 0.6679)
+ .. controls ( 0.3172, 0.6530) and ( 0.3220, 0.6121) .. ( 0.3224, 0.5922)
+ -- ( 0.3056, 0.6154)
+ .. controls ( 0.2531, 0.6742) and ( 0.2322, 0.5554) .. ( 0.2966, 0.5454)
+ .. controls ( 0.3239, 0.5412) and ( 0.3417, 0.5630) .. ( 0.3972, 0.5670)
+ .. controls ( 0.4005, 0.5473) and ( 0.4019, 0.5314) .. ( 0.4237, 0.5231)
+ .. controls ( 0.4541, 0.5116) and ( 0.4961, 0.5392) .. ( 0.4841, 0.5736)
+ .. controls ( 0.4794, 0.5870) and ( 0.4556, 0.5991) .. ( 0.4331, 0.6106)
+ .. controls ( 0.4972, 0.6497) and ( 0.4277, 0.7210) .. ( 0.3704, 0.7106)
+ --cycle
+ (-0.4679, 0.7004)
+ .. controls (-0.5116, 0.6983) and (-0.4629, 0.6153) .. (-0.4266, 0.6632)
+ .. controls (-0.4200, 0.6718) and (-0.4201, 0.6786) .. (-0.4182, 0.6846)
+ -- (-0.4434, 0.6958)
+ .. controls (-0.4536, 0.6993) and (-0.4618, 0.7007) .. (-0.4679, 0.7004)
+ --cycle
+ ( 0.5653, 0.7002)
+ .. controls ( 0.5661, 0.6911) and ( 0.5658, 0.6799) .. ( 0.5704, 0.6702)
+ .. controls ( 0.5856, 0.6381) and ( 0.6183, 0.6504) .. ( 0.6246, 0.6688)
+ -- ( 0.6102, 0.6944)
+ .. controls ( 0.6066, 0.6965) and ( 0.6036, 0.6986) .. ( 0.5984, 0.7002)
+ .. controls ( 0.5884, 0.7016) and ( 0.5757, 0.7012) .. ( 0.5653, 0.7002)
+ --cycle
+ ( 0.1310, 0.6925)
+ .. controls ( 0.1003, 0.6568) and ( 0.1392, 0.6414) .. ( 0.1582, 0.6530)
+ .. controls ( 0.1772, 0.6646) and ( 0.1778, 0.7030) .. ( 0.1310, 0.6925)
+ --cycle
+ (-0.3425, 0.6846)
+ .. controls (-0.3485, 0.6703) and (-0.3540, 0.6584) .. (-0.3564, 0.6427)
+ .. controls (-0.3714, 0.5438) and (-0.2673, 0.5839) .. (-0.3103, 0.6583)
+ .. controls (-0.3198, 0.6747) and (-0.3272, 0.6765) .. (-0.3425, 0.6846)
+ --cycle
+ (-0.1828, 0.6763)
+ .. controls (-0.2468, 0.6411) and (-0.2396, 0.5532) .. (-0.1659, 0.5602)
+ .. controls (-0.1273, 0.5639) and (-0.0946, 0.6066) .. (-0.1492, 0.6258)
+ -- (-0.1828, 0.6006)
+ --cycle
+ ( 0.3972, 0.6763)
+ -- ( 0.4287, 0.6131)
+ .. controls ( 0.4206, 0.6173) and ( 0.4113, 0.6217) .. ( 0.4056, 0.6258)
+ -- ( 0.3719, 0.6006)
+ .. controls ( 0.3635, 0.6415) and ( 0.3652, 0.6489) .. ( 0.3972, 0.6763)
+ --cycle
+ ( 0.5737, 0.6319)
+ -- ( 0.5485, 0.6258)
+ .. controls ( 0.5516, 0.6201) and ( 0.5520, 0.6138) .. ( 0.5614, 0.6043)
+ .. controls ( 0.6074, 0.5569) and ( 0.6453, 0.6371) .. ( 0.5737, 0.6319)
+ --cycle
+ (-0.6211, 0.6305)
+ -- (-0.6755, 0.5370)
+ -- (-0.6787, 0.5166)
+ .. controls (-0.6809, 0.5180) and (-0.6832, 0.5188) .. (-0.6854, 0.5203)
+ -- (-0.7191, 0.4623)
+ -- (-0.7291, 0.4073)
+ .. controls (-0.7367, 0.4126) and (-0.7403, 0.4136) .. (-0.7456, 0.4169)
+ -- (-0.7651, 0.3834)
+ .. controls (-0.7455, 0.3798) and (-0.7239, 0.3727) .. (-0.7052, 0.3845)
+ .. controls (-0.6739, 0.3993) and (-0.6763, 0.4662) .. (-0.6703, 0.4998)
+ .. controls (-0.6178, 0.4665) and (-0.6044, 0.4826) .. (-0.5611, 0.5204)
+ .. controls (-0.5440, 0.5353) and (-0.5267, 0.5491) .. (-0.5345, 0.5748)
+ .. controls (-0.5466, 0.6149) and (-0.5841, 0.6243) .. (-0.6211, 0.6305)
+ --cycle
+ (-0.6450, 0.5670)
+ -- (-0.5862, 0.5670)
+ .. controls (-0.6029, 0.5328) and (-0.6086, 0.5274) .. (-0.6450, 0.5166)
+ --cycle
+ ( 0.5940, 0.5141)
+ .. controls ( 0.5876, 0.5135) and ( 0.5814, 0.5119) .. ( 0.5737, 0.5105)
+ .. controls ( 0.5529, 0.5005) and ( 0.5203, 0.4878) .. ( 0.5123, 0.4644)
+ .. controls ( 0.5022, 0.4349) and ( 0.5312, 0.3332) .. ( 0.5982, 0.3551)
+ .. controls ( 0.6173, 0.3612) and ( 0.6614, 0.3963) .. ( 0.6651, 0.4168)
+ .. controls ( 0.6700, 0.4432) and ( 0.6406, 0.5019) .. ( 0.6149, 0.5105)
+ .. controls ( 0.6066, 0.5139) and ( 0.6003, 0.5146) .. ( 0.5940, 0.5141)
+ --cycle
+ ( 0.0525, 0.5036)
+ .. controls ( 0.0223, 0.5016) and ( 0.0014, 0.4715) .. (-0.0147, 0.4493)
+ .. controls (-0.0480, 0.4823) and (-0.1271, 0.5502) .. (-0.1240, 0.4493)
+ -- (-0.0819, 0.4661)
+ .. controls (-0.0631, 0.4289) and ( 0.0054, 0.3259) .. ( 0.0443, 0.3176)
+ .. controls ( 0.1031, 0.3051) and ( 0.1431, 0.3862) .. ( 0.0694, 0.3989)
+ .. controls ( 0.0551, 0.3118) and ( 0.0044, 0.4056) .. ( 0.0316, 0.4326)
+ .. controls ( 0.0741, 0.4748) and ( 0.1233, 0.3699) .. ( 0.1388, 0.4261)
+ .. controls ( 0.1477, 0.4584) and ( 0.0813, 0.5057) .. ( 0.0525, 0.5036)
+ --cycle
+ ( 0.6073, 0.4745)
+ -- ( 0.6242, 0.4241)
+ -- ( 0.5569, 0.3989)
+ -- ( 0.5569, 0.4493)
+ --cycle
+ (-0.3498, 0.4626)
+ .. controls (-0.3744, 0.4586) and (-0.3998, 0.4069) .. (-0.3941, 0.3847)
+ .. controls (-0.3893, 0.3661) and (-0.3650, 0.3651) .. (-0.3503, 0.3798)
+ -- (-0.3257, 0.4157)
+ .. controls (-0.3295, 0.3698) and (-0.2940, 0.3485) .. (-0.2697, 0.3592)
+ .. controls (-0.2492, 0.3684) and (-0.2611, 0.3898) .. (-0.2697, 0.4024)
+ .. controls (-0.2865, 0.4277) and (-0.3149, 0.4682) .. (-0.3498, 0.4626)
+ --cycle
+ ( 0.7488, 0.4472)
+ .. controls ( 0.7446, 0.4429) and ( 0.7413, 0.4378) .. ( 0.7395, 0.4315)
+ .. controls ( 0.7338, 0.4111) and ( 0.7612, 0.3277) .. ( 0.8087, 0.3352)
+ .. controls ( 0.8094, 0.3354) and ( 0.8102, 0.3361) .. ( 0.8109, 0.3364)
+ --cycle
+ (-0.1492, 0.4409)
+ .. controls (-0.1577, 0.3701) and (-0.1298, 0.3577) .. (-0.0651, 0.3568)
+ .. controls (-0.0461, 0.3027) and (-0.0025, 0.3462) .. (-0.0567, 0.3652)
+ -- (-0.0567, 0.3568)
+ -- (-0.0651, 0.3652)
+ -- (-0.0567, 0.3652)
+ -- (-0.0567, 0.3989)
+ -- (-0.0988, 0.3905)
+ .. controls (-0.1116, 0.4252) and (-0.1112, 0.4344) .. (-0.1492, 0.4409)
+ --cycle
+ ( 0.2869, 0.4351)
+ .. controls ( 0.2475, 0.4293) and ( 0.2234, 0.3681) .. ( 0.2795, 0.3485)
+ -- ( 0.3048, 0.3905)
+ .. controls ( 0.3028, 0.3760) and ( 0.3013, 0.3442) .. ( 0.3278, 0.3583)
+ .. controls ( 0.3557, 0.3731) and ( 0.3437, 0.4227) .. ( 0.3046, 0.4338)
+ .. controls ( 0.2985, 0.4356) and ( 0.2925, 0.4359) .. ( 0.2869, 0.4351)
+ --cycle
+ (-0.5352, 0.4038)
+ .. controls (-0.5519, 0.4042) and (-0.5689, 0.3932) .. (-0.5778, 0.3652)
+ -- (-0.5358, 0.3652)
+ -- (-0.5442, 0.3149)
+ -- (-0.6030, 0.3401)
+ .. controls (-0.6099, 0.3078) and (-0.5933, 0.2580) .. (-0.5523, 0.2636)
+ .. controls (-0.5251, 0.2673) and (-0.4980, 0.3070) .. (-0.4910, 0.3316)
+ .. controls (-0.4799, 0.3705) and (-0.5072, 0.4030) .. (-0.5352, 0.4038)
+ --cycle
+ ( 0.4056, 0.3989)
+ .. controls ( 0.4011, 0.3650) and ( 0.4064, 0.3627) .. ( 0.4392, 0.3568)
+ .. controls ( 0.4340, 0.3865) and ( 0.4336, 0.3876) .. ( 0.4056, 0.3989)
+ --cycle
+ (-0.2248, 0.3737)
+ -- (-0.2164, 0.3401)
+ -- (-0.1828, 0.3568)
+ --cycle
+ ( 0.4558, 0.3414)
+ .. controls ( 0.4424, 0.3419) and ( 0.4339, 0.3363) .. ( 0.4224, 0.3316)
+ -- ( 0.4340, 0.2885)
+ .. controls ( 0.4635, 0.2154) and ( 0.5405, 0.3381) .. ( 0.4558, 0.3414)
+ --cycle
+ (-0.3179, 0.3382)
+ .. controls (-0.3270, 0.3401) and (-0.3357, 0.3403) .. (-0.3425, 0.3381)
+ .. controls (-0.3762, 0.3275) and (-0.3957, 0.2970) .. (-0.4013, 0.2644)
+ -- (-0.3341, 0.2892)
+ .. controls (-0.3207, 0.2121) and (-0.2456, 0.2402) .. (-0.2545, 0.2892)
+ .. controls (-0.2586, 0.3110) and (-0.2906, 0.3324) .. (-0.3179, 0.3382)
+ --cycle
+ ( 0.3611, 0.3359)
+ .. controls ( 0.3110, 0.3372) and ( 0.2179, 0.3015) .. ( 0.2626, 0.2392)
+ -- ( 0.2207, 0.2056)
+ -- ( 0.2123, 0.2308)
+ -- ( 0.1955, 0.2308)
+ .. controls ( 0.1691, 0.1342) and ( 0.2461, 0.1660) .. ( 0.2711, 0.1678)
+ .. controls ( 0.3105, 0.1704) and ( 0.3525, 0.1635) .. ( 0.3836, 0.2013)
+ .. controls ( 0.4000, 0.2213) and ( 0.3935, 0.2469) .. ( 0.3552, 0.2434)
+ .. controls ( 0.3256, 0.2408) and ( 0.3193, 0.2282) .. ( 0.3048, 0.2056)
+ .. controls ( 0.2927, 0.2510) and ( 0.2970, 0.2476) .. ( 0.3131, 0.2897)
+ -- ( 0.3552, 0.2728)
+ -- ( 0.3636, 0.2980)
+ -- ( 0.3719, 0.2644)
+ .. controls ( 0.4287, 0.2825) and ( 0.4092, 0.3226) .. ( 0.3795, 0.3331)
+ .. controls ( 0.3746, 0.3349) and ( 0.3683, 0.3357) .. ( 0.3611, 0.3359)
+ --cycle
+ (-0.7326, 0.3304)
+ .. controls (-0.7558, 0.2996) and (-0.7303, 0.2839) .. (-0.7147, 0.2917)
+ .. controls (-0.6982, 0.3000) and (-0.6941, 0.3349) .. (-0.7326, 0.3304)
+ --cycle
+ ( 0.5316, 0.3064)
+ .. controls ( 0.5417, 0.2779) and ( 0.5439, 0.2772) .. ( 0.5737, 0.2813)
+ .. controls ( 0.5591, 0.3056) and ( 0.5600, 0.3049) .. ( 0.5316, 0.3064)
+ --cycle
+ ( 0.7063, 0.2870)
+ .. controls ( 0.6995, 0.2880) and ( 0.6923, 0.2874) .. ( 0.6840, 0.2844)
+ .. controls ( 0.6531, 0.2731) and ( 0.6307, 0.2270) .. ( 0.6242, 0.1972)
+ -- ( 0.6914, 0.2056)
+ -- ( 0.6914, 0.2475)
+ -- ( 0.7166, 0.2139)
+ -- ( 0.7670, 0.2224)
+ -- ( 0.7670, 0.1887)
+ -- ( 0.8091, 0.1804)
+ -- ( 0.7755, 0.1047)
+ -- ( 0.8343, 0.1131)
+ .. controls ( 0.8409, 0.1435) and ( 0.8409, 0.1473) .. ( 0.8679, 0.1636)
+ .. controls ( 0.8652, 0.1490) and ( 0.8470, 0.0581) .. ( 0.8896, 0.0809)
+ .. controls ( 0.9211, 0.0965) and ( 0.9103, 0.1720) .. ( 0.8896, 0.1909)
+ .. controls ( 0.8668, 0.2094) and ( 0.8421, 0.2029) .. ( 0.8174, 0.1972)
+ .. controls ( 0.8135, 0.2098) and ( 0.8137, 0.2162) .. ( 0.8041, 0.2272)
+ .. controls ( 0.7922, 0.2408) and ( 0.7748, 0.2458) .. ( 0.7601, 0.2552)
+ .. controls ( 0.7419, 0.2667) and ( 0.7266, 0.2841) .. ( 0.7063, 0.2870)
+ --cycle
+ ( 0.6242, 0.1972)
+ .. controls ( 0.6061, 0.1985) and ( 0.5845, 0.2023) .. ( 0.5690, 0.1902)
+ .. controls ( 0.5426, 0.1695) and ( 0.5550, 0.1248) .. ( 0.5909, 0.1110)
+ .. controls ( 0.6168, 0.1011) and ( 0.6421, 0.1125) .. ( 0.6679, 0.1215)
+ .. controls ( 0.6663, 0.1076) and ( 0.6658, 0.0850) .. ( 0.6679, 0.0720)
+ .. controls ( 0.6961,-0.0135) and ( 0.8163, 0.0895) .. ( 0.7250, 0.1215)
+ -- ( 0.6998, 0.0795)
+ -- ( 0.7166, 0.1299)
+ -- ( 0.6830, 0.1804)
+ -- ( 0.6578, 0.1636)
+ --cycle
+ ( 0.0950, 0.2671)
+ .. controls ( 0.0367, 0.2427) and ( 0.0851, 0.1985) .. ( 0.1112, 0.2040)
+ .. controls ( 0.1427, 0.2110) and ( 0.1597, 0.2672) .. ( 0.0950, 0.2671)
+ --cycle
+ (-0.0988, 0.2609)
+ .. controls (-0.1426, 0.2672) and (-0.2761, 0.1879) .. (-0.1828, 0.1551)
+ -- (-0.1743, 0.1972)
+ -- (-0.1240, 0.1804)
+ -- (-0.0904, 0.2308)
+ -- (-0.1071, 0.1720)
+ .. controls (-0.0221, 0.1543) and (-0.0435, 0.2528) .. (-0.0988, 0.2609)
+ --cycle
+ (-0.8142, 0.2071)
+ .. controls (-0.8258, 0.2070) and (-0.8375, 0.2012) .. (-0.8466, 0.1869)
+ .. controls (-0.8534, 0.1760) and (-0.8533, 0.1669) .. (-0.8551, 0.1551)
+ -- (-0.7963, 0.1636)
+ -- (-0.8132, 0.1215)
+ .. controls (-0.8020, 0.1234) and (-0.7923, 0.1232) .. (-0.7821, 0.1301)
+ .. controls (-0.7447, 0.1557) and (-0.7793, 0.2072) .. (-0.8142, 0.2071)
+ --cycle
+ (-0.2584, 0.2056)
+ -- (-0.2584, 0.1636)
+ .. controls (-0.2445, 0.1848) and (-0.2445, 0.1843) .. (-0.2584, 0.2056)
+ --cycle
+ (-0.7132, 0.1953)
+ .. controls (-0.7373, 0.1910) and (-0.7568, 0.1647) .. (-0.7459, 0.1215)
+ -- (-0.6955, 0.1551)
+ .. controls (-0.7015, 0.1043) and (-0.7057, 0.0835) .. (-0.6450, 0.0963)
+ -- (-0.6535, 0.0711)
+ .. controls (-0.5898, 0.0580) and (-0.5907, 0.1071) .. (-0.6081, 0.1249)
+ .. controls (-0.6203, 0.1374) and (-0.6375, 0.1370) .. (-0.6535, 0.1383)
+ .. controls (-0.6607, 0.1823) and (-0.6892, 0.1997) .. (-0.7132, 0.1953)
+ --cycle
+ (-0.4097, 0.1720)
+ -- (-0.3845, 0.1215)
+ -- (-0.4097, 0.0963)
+ -- (-0.4349, 0.1047)
+ .. controls (-0.4598,-0.0134) and (-0.2772, 0.1076) .. (-0.3690, 0.1621)
+ .. controls (-0.3821, 0.1699) and (-0.3951, 0.1703) .. (-0.4097, 0.1720)
+ --cycle
+ ( 0.4374, 0.1711)
+ .. controls ( 0.4200, 0.1682) and ( 0.4016, 0.1543) .. ( 0.3888, 0.1299)
+ -- ( 0.4477, 0.1299)
+ .. controls ( 0.4703, 0.1056) and ( 0.4891, 0.1252) .. ( 0.4798, 0.1463)
+ .. controls ( 0.4711, 0.1661) and ( 0.4548, 0.1741) .. ( 0.4374, 0.1711)
+ --cycle
+ (-0.4594, 0.1707)
+ .. controls (-0.4648, 0.1719) and (-0.4705, 0.1718) .. (-0.4752, 0.1698)
+ .. controls (-0.4878, 0.1646) and (-0.4954, 0.1508) .. (-0.4982, 0.1382)
+ .. controls (-0.5096, 0.0875) and (-0.4448, 0.0609) .. (-0.4602, 0.1299)
+ .. controls (-0.4304, 0.1504) and (-0.4433, 0.1669) .. (-0.4594, 0.1707)
+ --cycle
+ (-0.0230, 0.1592)
+ .. controls (-0.0727, 0.1609) and (-0.0799, 0.1002) .. (-0.1492, 0.0795)
+ -- (-0.1576, 0.0374)
+ .. controls (-0.1940, 0.0779) and (-0.1965, 0.0894) .. (-0.2500, 0.0711)
+ -- (-0.2584, 0.0795)
+ -- (-0.2332, 0.1383)
+ .. controls (-0.2779, 0.1347) and (-0.3158, 0.0997) .. (-0.2855, 0.0563)
+ .. controls (-0.2695, 0.0332) and (-0.2481, 0.0337) .. (-0.2256, 0.0248)
+ .. controls (-0.1803, 0.0069) and (-0.1541,-0.0311) .. (-0.1155, 0.0290)
+ .. controls (-0.0607, 0.0067) and (-0.0553,-0.0150) .. (-0.0307,-0.0232)
+ .. controls ( 0.0157,-0.0389) and ( 0.0524, 0.0035) .. ( 0.0442, 0.0543)
+ .. controls ( 0.0843, 0.0613) and ( 0.1010, 0.0937) .. ( 0.0727, 0.1263)
+ .. controls ( 0.0598, 0.1414) and (-0.0030, 0.1586) .. (-0.0230, 0.1592)
+ --cycle
+ (-0.0230, 0.1215)
+ -- ( 0.0442, 0.1131)
+ .. controls ( 0.0289, 0.0705) and ( 0.0228, 0.0356) .. (-0.0230, 0.0207)
+ .. controls (-0.0339, 0.0543) and (-0.0383, 0.0572) .. (-0.0735, 0.0543)
+ -- (-0.0819, 0.0627)
+ --cycle
+ (-0.8973, 0.1131)
+ .. controls (-0.9051, 0.0492) and (-0.8679, 0.0676) .. (-0.8321, 0.0457)
+ .. controls (-0.7996, 0.0258) and (-0.7906,-0.0272) .. (-0.7039,-0.0046)
+ .. controls (-0.6977,-0.0167) and (-0.6964,-0.0237) .. (-0.6846,-0.0331)
+ .. controls (-0.6146,-0.0891) and (-0.5741, 0.0485) .. (-0.6619, 0.0396)
+ .. controls (-0.6723, 0.0384) and (-0.6856, 0.0326) .. (-0.6955, 0.0290)
+ .. controls (-0.7145, 0.0487) and (-0.7442, 0.0435) .. (-0.7712, 0.0459)
+ -- (-0.7771, 0.0746)
+ --cycle
+ ( 0.7839, 0.0627)
+ .. controls ( 0.7798, 0.0513) and ( 0.7748, 0.0421) .. ( 0.7752, 0.0292)
+ .. controls ( 0.7776,-0.0409) and ( 0.8888, 0.0073) .. ( 0.8169, 0.0493)
+ .. controls ( 0.8064, 0.0555) and ( 0.7952, 0.0587) .. ( 0.7839, 0.0627)
+ --cycle
+ ( 0.6399, 0.0543)
+ .. controls ( 0.6341, 0.0555) and ( 0.6275, 0.0553) .. ( 0.6207, 0.0536)
+ .. controls ( 0.5899, 0.0092) and ( 0.6489,-0.0145) .. ( 0.6606, 0.0149)
+ .. controls ( 0.6690, 0.0359) and ( 0.6576, 0.0510) .. ( 0.6399, 0.0543)
+ --cycle
+ ( 0.2228, 0.0528)
+ .. controls ( 0.1887, 0.0319) and ( 0.2131,-0.0076) .. ( 0.2361,-0.0078)
+ .. controls ( 0.2619,-0.0080) and ( 0.2726, 0.0432) .. ( 0.2228, 0.0528)
+ --cycle
+ ( 0.4509, 0.0479)
+ .. controls ( 0.4394, 0.0460) and ( 0.4290, 0.0332) .. ( 0.4224, 0.0038)
+ .. controls ( 0.3826, 0.0304) and ( 0.3797, 0.0371) .. ( 0.3300, 0.0301)
+ .. controls ( 0.3175, 0.0283) and ( 0.3021, 0.0266) .. ( 0.2915, 0.0192)
+ .. controls ( 0.2691, 0.0036) and ( 0.2444,-0.0690) .. ( 0.3552,-0.0718)
+ -- ( 0.3131,-0.0046)
+ .. controls ( 0.3436,-0.0165) and ( 0.3418,-0.0171) .. ( 0.3719,-0.0046)
+ .. controls ( 0.3961,-0.0513) and ( 0.4113,-0.0431) .. ( 0.4560,-0.0298)
+ -- ( 0.4560, 0.0038)
+ -- ( 0.4812,-0.0466)
+ .. controls ( 0.4281,-0.0863) and ( 0.4953,-0.1091) .. ( 0.5137,-0.0706)
+ .. controls ( 0.5296,-0.0376) and ( 0.4853, 0.0538) .. ( 0.4509, 0.0479)
+ --cycle
+ (-0.9381, 0.0440)
+ .. controls (-0.9573, 0.0465) and (-0.9752, 0.0361) .. (-0.9800, 0.0016)
+ -- (-0.9774,-0.0032)
+ -- (-0.9308, 0.0123)
+ .. controls (-0.9260, 0.0012) and (-0.9218,-0.0135) .. (-0.9103,-0.0200)
+ .. controls (-0.8939,-0.0290) and (-0.8783,-0.0112) .. (-0.8895, 0.0115)
+ .. controls (-0.8962, 0.0252) and (-0.9176, 0.0414) .. (-0.9381, 0.0440)
+ --cycle
+ ( 0.9435, 0.0207)
+ -- ( 0.9184, 0.0123)
+ -- ( 0.9435,-0.0046)
+ --cycle
+ ( 0.8999,-0.0129)
+ .. controls ( 0.9000,-0.0216) and ( 0.8974,-0.0282) .. ( 0.8999,-0.0376)
+ .. controls ( 0.9043,-0.0955) and ( 0.9800,-0.0453) .. ( 0.9254,-0.0191)
+ .. controls ( 0.9173,-0.0151) and ( 0.9098,-0.0148) .. ( 0.8999,-0.0129)
+ --cycle
+ (-0.5187,-0.0249)
+ .. controls (-0.5448,-0.0284) and (-0.5586,-0.0592) .. (-0.5611,-0.0886)
+ -- (-0.5022,-0.0718)
+ .. controls (-0.5038,-0.1199) and (-0.4832,-0.1244) .. (-0.4434,-0.1054)
+ -- (-0.4349,-0.1139)
+ -- (-0.5106,-0.1811)
+ -- (-0.5442,-0.1475)
+ -- (-0.5274,-0.1139)
+ .. controls (-0.5482,-0.1103) and (-0.5717,-0.1068) .. (-0.5806,-0.1326)
+ .. controls (-0.5943,-0.1714) and (-0.5235,-0.2179) .. (-0.5014,-0.2194)
+ .. controls (-0.4612,-0.2223) and (-0.4187,-0.1658) .. (-0.4108,-0.1306)
+ .. controls (-0.4075,-0.1185) and (-0.4054,-0.1026) .. (-0.4108,-0.0911)
+ .. controls (-0.4193,-0.0753) and (-0.4422,-0.0688) .. (-0.4571,-0.0576)
+ -- (-0.4884,-0.0315)
+ .. controls (-0.4999,-0.0256) and (-0.5100,-0.0237) .. (-0.5187,-0.0249)
+ --cycle
+ ( 0.2098,-0.0382)
+ .. controls ( 0.1959,-0.0434) and ( 0.1851,-0.0663) .. ( 0.1925,-0.0882)
+ .. controls ( 0.2035,-0.1206) and ( 0.2830,-0.1639) .. ( 0.2964,-0.0882)
+ .. controls ( 0.2773,-0.0896) and ( 0.2586,-0.0934) .. ( 0.2447,-0.0768)
+ .. controls ( 0.2363,-0.0666) and ( 0.2352,-0.0463) .. ( 0.2242,-0.0396)
+ .. controls ( 0.2194,-0.0367) and ( 0.2145,-0.0365) .. ( 0.2098,-0.0382)
+ --cycle
+ (-0.2960,-0.0452)
+ .. controls (-0.3231,-0.0465) and (-0.3530,-0.0602) .. (-0.3592,-0.0683)
+ .. controls (-0.3758,-0.0903) and (-0.3560,-0.1221) .. (-0.3845,-0.1979)
+ -- (-0.4013,-0.1727)
+ -- (-0.4182,-0.1727)
+ .. controls (-0.4336,-0.2291) and (-0.4124,-0.2782) .. (-0.3803,-0.2577)
+ .. controls (-0.3601,-0.2446) and (-0.3538,-0.2099) .. (-0.3392,-0.1970)
+ .. controls (-0.3137,-0.1743) and (-0.2596,-0.2064) .. (-0.2752,-0.1306)
+ -- (-0.3257,-0.1558)
+ -- (-0.3341,-0.1475)
+ -- (-0.3341,-0.0970)
+ -- (-0.2500,-0.0970)
+ .. controls (-0.2447,-0.0551) and (-0.2689,-0.0439) .. (-0.2960,-0.0452)
+ --cycle
+ ( 0.6563,-0.0662)
+ .. controls ( 0.6458,-0.0662) and ( 0.6374,-0.0668) .. ( 0.6332,-0.0685)
+ .. controls ( 0.5970,-0.0835) and ( 0.6057,-0.1189) .. ( 0.6332,-0.1391)
+ -- ( 0.6493,-0.0970)
+ -- ( 0.6662,-0.0970)
+ .. controls ( 0.6850,-0.1248) and ( 0.6940,-0.1204) .. ( 0.7250,-0.1139)
+ -- ( 0.7081,-0.1475)
+ .. controls ( 0.7837,-0.1829) and ( 0.7876,-0.1033) .. ( 0.7490,-0.0804)
+ .. controls ( 0.7374,-0.0735) and ( 0.6877,-0.0664) .. ( 0.6563,-0.0662)
+ --cycle
+ ( 0.7081,-0.1475)
+ .. controls ( 0.6742,-0.1429) and ( 0.6720,-0.1483) .. ( 0.6662,-0.1811)
+ .. controls ( 0.6162,-0.1289) and ( 0.6115,-0.1833) .. ( 0.6244,-0.2044)
+ .. controls ( 0.6426,-0.2346) and ( 0.6823,-0.2320) .. ( 0.7016,-0.2044)
+ .. controls ( 0.7147,-0.1858) and ( 0.7107,-0.1681) .. ( 0.7081,-0.1475)
+ --cycle
+ ( 0.0544,-0.0769)
+ .. controls ( 0.0466,-0.0773) and ( 0.0382,-0.0797) .. ( 0.0297,-0.0845)
+ -- (-0.0147,-0.1139)
+ .. controls (-0.0057,-0.1396) and (-0.0069,-0.1385) .. ( 0.0189,-0.1475)
+ .. controls (-0.0074,-0.2147) and ( 0.0346,-0.2081) .. ( 0.0553,-0.1870)
+ .. controls ( 0.0667,-0.1752) and ( 0.0961,-0.1299) .. ( 0.0958,-0.1139)
+ .. controls ( 0.0955,-0.0925) and ( 0.0776,-0.0759) .. ( 0.0544,-0.0769)
+ --cycle
+ ( 0.3572,-0.0881)
+ .. controls ( 0.3447,-0.0867) and ( 0.3392,-0.1053) .. ( 0.3450,-0.1208)
+ .. controls ( 0.3587,-0.1579) and ( 0.4169,-0.1493) .. ( 0.4239,-0.1208)
+ .. controls ( 0.4287,-0.1010) and ( 0.4113,-0.0745) .. ( 0.3888,-0.0970)
+ -- ( 0.3719,-0.0970)
+ .. controls ( 0.3663,-0.0912) and ( 0.3613,-0.0886) .. ( 0.3572,-0.0881)
+ --cycle
+ ( 0.7250,-0.1054)
+ -- ( 0.7333,-0.1054)
+ -- ( 0.7333,-0.1139)
+ --cycle
+ (-0.7357,-0.1221)
+ .. controls (-0.7405,-0.1203) and (-0.7472,-0.1201) .. (-0.7562,-0.1227)
+ .. controls (-0.7721,-0.1527) and (-0.7463,-0.1606) .. (-0.7339,-0.1532)
+ .. controls (-0.7244,-0.1475) and (-0.7214,-0.1275) .. (-0.7357,-0.1221)
+ --cycle
+ (-0.8606,-0.1378)
+ .. controls (-0.8718,-0.1386) and (-0.8832,-0.1446) .. (-0.8941,-0.1518)
+ -- (-0.8728,-0.1897)
+ -- (-0.8468,-0.1811)
+ -- (-0.8613,-0.2102)
+ -- (-0.8317,-0.2631)
+ .. controls (-0.7953,-0.2270) and (-0.7967,-0.1536) .. (-0.8471,-0.1391)
+ .. controls (-0.8514,-0.1378) and (-0.8560,-0.1374) .. (-0.8606,-0.1378)
+ --cycle
+ ( 0.9187,-0.1555)
+ .. controls ( 0.9083,-0.1585) and ( 0.8971,-0.1627) .. ( 0.8847,-0.1675)
+ .. controls ( 0.8669,-0.1743) and ( 0.8469,-0.1785) .. ( 0.8399,-0.1989)
+ .. controls ( 0.8307,-0.2247) and ( 0.8481,-0.2329) .. ( 0.8679,-0.2399)
+ -- ( 0.8847,-0.2063)
+ .. controls ( 0.8863,-0.2068) and ( 0.8871,-0.2069) .. ( 0.8886,-0.2074)
+ --cycle
+ ( 0.8679,-0.2399)
+ .. controls ( 0.8663,-0.2432) and ( 0.8651,-0.2468) .. ( 0.8637,-0.2502)
+ -- ( 0.8693,-0.2405)
+ .. controls ( 0.8687,-0.2402) and ( 0.8685,-0.2401) .. ( 0.8679,-0.2399)
+ --cycle
+ ( 0.4392,-0.1558)
+ -- ( 0.4332,-0.1807)
+ .. controls ( 0.4281,-0.2431) and ( 0.5089,-0.2120) .. ( 0.4618,-0.1688)
+ .. controls ( 0.4519,-0.1597) and ( 0.4457,-0.1593) .. ( 0.4392,-0.1558)
+ --cycle
+ (-0.6846,-0.1952)
+ .. controls (-0.6966,-0.1951) and (-0.7082,-0.2013) .. (-0.7157,-0.2171)
+ .. controls (-0.7203,-0.2268) and (-0.7199,-0.2378) .. (-0.7207,-0.2483)
+ -- (-0.6787,-0.2399)
+ -- (-0.6703,-0.2735)
+ .. controls (-0.6096,-0.2523) and (-0.6488,-0.1955) .. (-0.6846,-0.1952)
+ --cycle
+ (-0.1120,-0.2035)
+ .. controls (-0.1188,-0.2048) and (-0.1255,-0.2071) .. (-0.1323,-0.2089)
+ .. controls (-0.1785,-0.2217) and (-0.2021,-0.2285) .. (-0.1912,-0.2819)
+ -- (-0.0988,-0.2483)
+ -- (-0.0651,-0.2740)
+ .. controls (-0.0333,-0.3228) and (-0.0165,-0.2917) .. (-0.0209,-0.2740)
+ .. controls (-0.0243,-0.2616) and (-0.0384,-0.2481) .. (-0.0474,-0.2386)
+ .. controls (-0.0590,-0.2264) and (-0.0744,-0.2085) .. (-0.0911,-0.2040)
+ .. controls (-0.0982,-0.2021) and (-0.1052,-0.2023) .. (-0.1120,-0.2035)
+ --cycle
+ ( 0.1647,-0.2053)
+ .. controls ( 0.1471,-0.2058) and ( 0.1297,-0.2092) .. ( 0.1164,-0.2148)
+ .. controls ( 0.0833,-0.2632) and ( 0.1207,-0.3872) .. ( 0.1933,-0.3346)
+ .. controls ( 0.2031,-0.3275) and ( 0.2109,-0.3165) .. ( 0.2178,-0.3068)
+ .. controls ( 0.2722,-0.2297) and ( 0.2177,-0.2039) .. ( 0.1647,-0.2053)
+ --cycle
+ ( 0.3262,-0.2328)
+ .. controls ( 0.3073,-0.2617) and ( 0.3314,-0.2707) .. ( 0.3420,-0.2638)
+ .. controls ( 0.3522,-0.2572) and ( 0.3585,-0.2285) .. ( 0.3262,-0.2328)
+ --cycle
+ ( 0.1534,-0.2399)
+ -- ( 0.2039,-0.2483)
+ -- ( 0.1534,-0.2987)
+ --cycle
+ ( 0.5217,-0.2636)
+ .. controls ( 0.5071,-0.2632) and ( 0.4918,-0.2708) .. ( 0.4798,-0.2909)
+ .. controls ( 0.4713,-0.3051) and ( 0.4736,-0.3094) .. ( 0.4728,-0.3240)
+ -- ( 0.4812,-0.3240)
+ -- ( 0.4812,-0.3324)
+ -- ( 0.5232,-0.2987)
+ -- ( 0.5232,-0.3492)
+ .. controls ( 0.6028,-0.3358) and ( 0.5655,-0.2645) .. ( 0.5217,-0.2636)
+ --cycle
+ ( 0.4812,-0.3324)
+ -- ( 0.4728,-0.3240)
+ .. controls ( 0.4525,-0.3209) and ( 0.4056,-0.3074) .. ( 0.3892,-0.3106)
+ .. controls ( 0.3596,-0.3163) and ( 0.3503,-0.3437) .. ( 0.3892,-0.3660)
+ -- ( 0.3972,-0.3407)
+ .. controls ( 0.4281,-0.3611) and ( 0.4279,-0.3612) .. ( 0.4644,-0.3576)
+ -- ( 0.4560,-0.4080)
+ .. controls ( 0.5104,-0.3986) and ( 0.5053,-0.3736) .. ( 0.4812,-0.3324)
+ --cycle
+ ( 0.7282,-0.2775)
+ .. controls ( 0.7176,-0.2768) and ( 0.7066,-0.2782) .. ( 0.6965,-0.2822)
+ .. controls ( 0.6458,-0.3532) and ( 0.7574,-0.3899) .. ( 0.7782,-0.3306)
+ .. controls ( 0.7887,-0.3013) and ( 0.7602,-0.2797) .. ( 0.7282,-0.2775)
+ --cycle
+ (-0.2465,-0.2903)
+ .. controls (-0.2987,-0.3042) and (-0.2344,-0.4071) .. (-0.2306,-0.4102)
+ .. controls (-0.1938,-0.4396) and (-0.1663,-0.4010) .. (-0.1299,-0.4027)
+ .. controls (-0.1140,-0.4034) and (-0.0666,-0.4182) .. (-0.0557,-0.3820)
+ .. controls (-0.0504,-0.3644) and (-0.0676,-0.3334) .. (-0.0988,-0.3744)
+ -- (-0.1181,-0.3407)
+ -- (-0.1308,-0.3168)
+ .. controls (-0.1675,-0.2582) and (-0.1759,-0.3435) .. (-0.1781,-0.3492)
+ .. controls (-0.1841,-0.3653) and (-0.1898,-0.3700) .. (-0.1996,-0.3828)
+ -- (-0.2164,-0.2903)
+ .. controls (-0.2291,-0.2881) and (-0.2389,-0.2883) .. (-0.2465,-0.2903)
+ --cycle
+ (-0.5947,-0.3156)
+ -- (-0.6030,-0.3407)
+ -- (-0.5778,-0.3240)
+ --cycle
+ (-0.0014,-0.3194)
+ .. controls (-0.0278,-0.3131) and (-0.0544,-0.3497) .. (-0.0058,-0.3694)
+ .. controls ( 0.0049,-0.3738) and ( 0.0162,-0.3735) .. ( 0.0273,-0.3744)
+ .. controls ( 0.0265,-0.3636) and ( 0.0269,-0.3522) .. ( 0.0223,-0.3420)
+ .. controls ( 0.0163,-0.3283) and ( 0.0074,-0.3214) .. (-0.0014,-0.3194)
+ --cycle
+ (-0.6508,-0.3284)
+ .. controls (-0.6656,-0.3290) and (-0.6816,-0.3373) .. (-0.6955,-0.3576)
+ .. controls (-0.7159,-0.3441) and (-0.7363,-0.3292) .. (-0.7624,-0.3378)
+ .. controls (-0.7705,-0.3405) and (-0.7771,-0.3450) .. (-0.7829,-0.3501)
+ -- (-0.7599,-0.3912)
+ -- (-0.7543,-0.3744)
+ -- (-0.6619,-0.4164)
+ -- (-0.6619,-0.3660)
+ -- (-0.6367,-0.4164)
+ .. controls (-0.5723,-0.3945) and (-0.6064,-0.3266) .. (-0.6508,-0.3284)
+ --cycle
+ (-0.5287,-0.3512)
+ .. controls (-0.5489,-0.3498) and (-0.5690,-0.3591) .. (-0.5764,-0.3751)
+ .. controls (-0.5966,-0.4192) and (-0.5398,-0.3912) .. (-0.5274,-0.3828)
+ -- (-0.5190,-0.4500)
+ -- (-0.5358,-0.4333)
+ -- (-0.5358,-0.4248)
+ -- (-0.5611,-0.4248)
+ .. controls (-0.5664,-0.4641) and (-0.5605,-0.4735) .. (-0.5442,-0.5088)
+ -- (-0.5274,-0.5088)
+ .. controls (-0.4972,-0.4701) and (-0.4647,-0.4466) .. (-0.4806,-0.3915)
+ .. controls (-0.4882,-0.3649) and (-0.5085,-0.3527) .. (-0.5287,-0.3512)
+ --cycle
+ ( 0.5485,-0.3594)
+ .. controls ( 0.5504,-0.3686) and ( 0.5513,-0.3797) .. ( 0.5560,-0.3899)
+ .. controls ( 0.5831,-0.4490) and ( 0.6446,-0.3809) .. ( 0.5811,-0.3594)
+ .. controls ( 0.5706,-0.3579) and ( 0.5594,-0.3583) .. ( 0.5485,-0.3594)
+ --cycle
+ ( 0.3311,-0.3646)
+ .. controls ( 0.3201,-0.3659) and ( 0.3103,-0.3791) .. ( 0.3084,-0.3917)
+ .. controls ( 0.3035,-0.4255) and ( 0.3481,-0.5315) .. ( 0.4140,-0.4669)
+ .. controls ( 0.4439,-0.4932) and ( 0.4962,-0.5278) .. ( 0.5388,-0.5107)
+ .. controls ( 0.5684,-0.4989) and ( 0.5806,-0.4516) .. ( 0.5232,-0.4333)
+ -- ( 0.5232,-0.4669)
+ .. controls ( 0.4932,-0.4550) and ( 0.4949,-0.4563) .. ( 0.4644,-0.4669)
+ -- ( 0.4560,-0.4248)
+ -- ( 0.4224,-0.4417)
+ -- ( 0.3888,-0.4080)
+ -- ( 0.3617,-0.4500)
+ -- ( 0.3617,-0.4080)
+ .. controls ( 0.3546,-0.3735) and ( 0.3422,-0.3632) .. ( 0.3311,-0.3646)
+ --cycle
+ ( 0.0862,-0.3828)
+ .. controls ( 0.0086,-0.4104) and ( 0.1258,-0.4856) .. ( 0.1453,-0.4236)
+ .. controls ( 0.1495,-0.4116) and ( 0.1465,-0.4028) .. ( 0.1453,-0.3912)
+ -- ( 0.0946,-0.4080)
+ --cycle
+ (-0.3761,-0.4056)
+ .. controls (-0.4460,-0.4310) and (-0.4022,-0.4833) .. (-0.3686,-0.4756)
+ .. controls (-0.3385,-0.4686) and (-0.3150,-0.4102) .. (-0.3761,-0.4056)
+ --cycle
+ (-0.1407,-0.4164)
+ .. controls (-0.1510,-0.4360) and (-0.1606,-0.4518) .. (-0.1524,-0.4748)
+ .. controls (-0.1401,-0.5093) and (-0.0958,-0.5218) .. (-0.0687,-0.4961)
+ .. controls (-0.0363,-0.4652) and (-0.0685,-0.4086) .. (-0.0988,-0.4753)
+ --cycle
+ (-0.7345,-0.4223)
+ .. controls (-0.7375,-0.4223) and (-0.7393,-0.4233) .. (-0.7417,-0.4237)
+ -- (-0.7259,-0.4519)
+ -- (-0.7123,-0.4248)
+ .. controls (-0.7212,-0.4230) and (-0.7284,-0.4222) .. (-0.7345,-0.4223)
+ --cycle
+ (-0.6450,-0.4333)
+ -- (-0.6283,-0.4753)
+ -- (-0.6959,-0.5053)
+ -- (-0.6728,-0.5467)
+ .. controls (-0.6597,-0.5415) and (-0.6464,-0.5310) .. (-0.6353,-0.5238)
+ .. controls (-0.6229,-0.5161) and (-0.6029,-0.5082) .. (-0.5949,-0.4962)
+ .. controls (-0.5673,-0.4552) and (-0.6118,-0.4359) .. (-0.6450,-0.4333)
+ --cycle
+ ( 0.7515,-0.4421)
+ .. controls ( 0.7404,-0.4518) and ( 0.7330,-0.4660) .. ( 0.7289,-0.4814)
+ -- ( 0.7518,-0.4421)
+ .. controls ( 0.7518,-0.4422) and ( 0.7516,-0.4421) .. ( 0.7515,-0.4421)
+ --cycle
+ (-0.7203,-0.4618)
+ -- (-0.7004,-0.4973)
+ .. controls (-0.6944,-0.4774) and (-0.6993,-0.4695) .. (-0.7203,-0.4618)
+ --cycle
+ ( 0.1694,-0.4873)
+ .. controls ( 0.1182,-0.4851) and ( 0.0606,-0.5165) .. ( 0.1114,-0.5509)
+ .. controls ( 0.1043,-0.5681) and ( 0.0968,-0.5809) .. ( 0.1030,-0.6004)
+ .. controls ( 0.1160,-0.6424) and ( 0.2092,-0.6560) .. ( 0.1955,-0.5761)
+ -- ( 0.1450,-0.6013)
+ -- ( 0.1199,-0.5425)
+ -- ( 0.1282,-0.5341)
+ .. controls ( 0.1602,-0.5459) and ( 0.1584,-0.5438) .. ( 0.1871,-0.5257)
+ .. controls ( 0.1977,-0.5856) and ( 0.2311,-0.5564) .. ( 0.2301,-0.5337)
+ .. controls ( 0.2287,-0.5019) and ( 0.2002,-0.4885) .. ( 0.1694,-0.4873)
+ --cycle
+ ( 0.3143,-0.5168)
+ .. controls ( 0.2653,-0.5233) and ( 0.3123,-0.5809) .. ( 0.3334,-0.5398)
+ .. controls ( 0.3375,-0.5319) and ( 0.3370,-0.5251) .. ( 0.3384,-0.5168)
+ --cycle
+ ( 0.5821,-0.5172)
+ -- ( 0.5905,-0.5425)
+ .. controls ( 0.5223,-0.5546) and ( 0.5461,-0.6299) .. ( 0.5965,-0.6187)
+ .. controls ( 0.6116,-0.6153) and ( 0.6642,-0.5952) .. ( 0.6693,-0.5808)
+ .. controls ( 0.6859,-0.5354) and ( 0.6147,-0.5138) .. ( 0.5821,-0.5172)
+ --cycle
+ (-0.2667,-0.5315)
+ .. controls (-0.3091,-0.5364) and (-0.3818,-0.5868) .. (-0.3173,-0.6098)
+ .. controls (-0.3409,-0.7049) and (-0.2257,-0.7182) .. (-0.2332,-0.6265)
+ -- (-0.2752,-0.6434)
+ -- (-0.3173,-0.6013)
+ .. controls (-0.2964,-0.5962) and (-0.2716,-0.5851) .. (-0.2511,-0.5945)
+ .. controls (-0.2356,-0.6015) and (-0.2239,-0.6203) .. (-0.2131,-0.6252)
+ .. controls (-0.1929,-0.6345) and (-0.1822,-0.6134) .. (-0.1883,-0.5942)
+ .. controls (-0.1944,-0.5749) and (-0.2315,-0.5384) .. (-0.2508,-0.5323)
+ .. controls (-0.2552,-0.5310) and (-0.2606,-0.5308) .. (-0.2667,-0.5315)
+ --cycle
+ ( 0.5989,-0.5509)
+ -- ( 0.6073,-0.5509)
+ -- ( 0.6073,-0.5593)
+ --cycle
+ (-0.0485,-0.5624)
+ .. controls (-0.0662,-0.5623) and (-0.0842,-0.5741) .. (-0.0904,-0.6098)
+ -- (-0.0483,-0.6013)
+ .. controls (-0.0229,-0.6296) and ( 0.0007,-0.6067) .. (-0.0083,-0.5860)
+ .. controls (-0.0134,-0.5744) and (-0.0308,-0.5625) .. (-0.0485,-0.5624)
+ --cycle
+ (-0.4918,-0.5707)
+ .. controls (-0.5107,-0.5708) and (-0.5309,-0.5802) .. (-0.5442,-0.6013)
+ -- (-0.5778,-0.5846)
+ -- (-0.5862,-0.6181)
+ .. controls (-0.5249,-0.6353) and (-0.5439,-0.6523) .. (-0.4854,-0.6098)
+ -- (-0.4937,-0.6770)
+ -- (-0.5442,-0.6854)
+ -- (-0.5442,-0.7022)
+ .. controls (-0.4313,-0.7520) and (-0.4409,-0.6069) .. (-0.4465,-0.5962)
+ .. controls (-0.4550,-0.5800) and (-0.4728,-0.5707) .. (-0.4918,-0.5707)
+ --cycle
+ ( 0.3300,-0.5846)
+ -- ( 0.3300,-0.6098)
+ -- ( 0.3552,-0.6098)
+ -- ( 0.3552,-0.5846)
+ --cycle
+ ( 0.3726,-0.6221)
+ .. controls ( 0.2948,-0.6226) and ( 0.2995,-0.7351) .. ( 0.3726,-0.7632)
+ .. controls ( 0.4265,-0.7841) and ( 0.4818,-0.7181) .. ( 0.4056,-0.6938)
+ -- ( 0.3719,-0.7275)
+ -- ( 0.3719,-0.7027)
+ .. controls ( 0.3796,-0.6524) and ( 0.4200,-0.6879) .. ( 0.4450,-0.6792)
+ .. controls ( 0.4638,-0.6728) and ( 0.4659,-0.6470) .. ( 0.4510,-0.6352)
+ .. controls ( 0.4434,-0.6293) and ( 0.3843,-0.6220) .. ( 0.3726,-0.6221)
+ --cycle
+ ( 0.0022,-0.6349)
+ -- ( 0.0189,-0.6686)
+ -- ( 0.0189,-0.6349)
+ --cycle
+ (-0.1244,-0.6794)
+ .. controls (-0.1314,-0.6810) and (-0.1382,-0.6846) .. (-0.1441,-0.6904)
+ .. controls (-0.1605,-0.7066) and (-0.1526,-0.7279) .. (-0.1607,-0.7464)
+ -- (-0.1786,-0.7721)
+ .. controls (-0.1852,-0.7840) and (-0.1929,-0.8079) .. (-0.1728,-0.8122)
+ .. controls (-0.1636,-0.8142) and (-0.1224,-0.7844) .. (-0.1071,-0.7778)
+ -- (-0.1155,-0.7106)
+ -- (-0.0735,-0.7275)
+ .. controls (-0.0800,-0.6898) and (-0.1033,-0.6748) .. (-0.1244,-0.6794)
+ --cycle
+ ( 0.1863,-0.6829)
+ .. controls ( 0.1792,-0.6828) and ( 0.1712,-0.6837) .. ( 0.1618,-0.6854)
+ -- ( 0.1618,-0.7022)
+ -- ( 0.2123,-0.7442)
+ -- ( 0.1282,-0.7190)
+ .. controls ( 0.1336,-0.7372) and ( 0.1344,-0.7442) .. ( 0.1476,-0.7594)
+ .. controls ( 0.1538,-0.7664) and ( 0.1626,-0.7738) .. ( 0.1704,-0.7788)
+ .. controls ( 0.2127,-0.8054) and ( 0.2462,-0.7806) .. ( 0.2481,-0.7530)
+ .. controls ( 0.2492,-0.7403) and ( 0.2417,-0.7279) .. ( 0.2353,-0.7175)
+ .. controls ( 0.2199,-0.6926) and ( 0.2075,-0.6832) .. ( 0.1863,-0.6829)
+ --cycle
+ ( 0.5905,-0.6889)
+ .. controls ( 0.5769,-0.6869) and ( 0.5692,-0.6908) .. ( 0.5569,-0.6938)
+ -- ( 0.5569,-0.7106)
+ -- ( 0.5821,-0.7190)
+ .. controls ( 0.5823,-0.7234) and ( 0.5836,-0.7260) .. ( 0.5844,-0.7296)
+ -- ( 0.6046,-0.6948)
+ .. controls ( 0.6001,-0.6927) and ( 0.5958,-0.6898) .. ( 0.5905,-0.6889)
+ --cycle
+ (-0.0391,-0.7245)
+ .. controls (-0.0667,-0.7229) and (-0.0839,-0.7453) .. (-0.0753,-0.7947)
+ .. controls (-0.0651,-0.8529) and (-0.0367,-0.8483) .. (-0.0106,-0.8698)
+ -- ( 0.0547,-0.8704)
+ .. controls ( 0.0548,-0.8616) and ( 0.0567,-0.8516) .. ( 0.0610,-0.8367)
+ -- ( 0.0189,-0.8367)
+ .. controls ( 0.0024,-0.8190) and ( 0.0000,-0.8231) .. (-0.0230,-0.8283)
+ .. controls (-0.0380,-0.7923) and (-0.0454,-0.7840) .. (-0.0399,-0.7442)
+ -- (-0.0230,-0.7442)
+ -- (-0.0147,-0.7778)
+ -- ( 0.0694,-0.7778)
+ -- ( 0.0525,-0.8199)
+ -- ( 0.1424,-0.8295)
+ .. controls ( 0.1612,-0.8227) and ( 0.1619,-0.8006) .. ( 0.1424,-0.7877)
+ .. controls ( 0.1265,-0.7801) and ( 0.1112,-0.7837) .. ( 0.0946,-0.7877)
+ .. controls ( 0.0866,-0.7388) and ( 0.0598,-0.7228) .. ( 0.0189,-0.7526)
+ .. controls (-0.0021,-0.7351) and (-0.0224,-0.7255) .. (-0.0391,-0.7245)
+ --cycle
+ (-0.5605,-0.7471)
+ -- (-0.5242,-0.8116)
+ .. controls (-0.5223,-0.8116) and (-0.5211,-0.8114) .. (-0.5190,-0.8115)
+ -- (-0.5201,-0.8191)
+ -- (-0.4998,-0.8552)
+ .. controls (-0.4770,-0.8370) and (-0.4696,-0.8098) .. (-0.4974,-0.7815)
+ --cycle
+ (-0.3761,-0.7611)
+ -- (-0.3845,-0.7694)
+ -- (-0.3845,-0.7863)
+ -- (-0.3761,-0.7947)
+ -- (-0.3593,-0.7947)
+ -- (-0.3508,-0.7863)
+ -- (-0.3508,-0.7694)
+ -- (-0.3593,-0.7611)
+ --cycle
+ ( 0.3384,-0.8347)
+ .. controls ( 0.3106,-0.8395) and ( 0.2888,-0.8533) .. ( 0.2775,-0.8723)
+ -- ( 0.3442,-0.8729)
+ -- ( 0.3467,-0.8702)
+ -- ( 0.3561,-0.8730)
+ -- ( 0.4348,-0.8736)
+ .. controls ( 0.4345,-0.8731) and ( 0.4345,-0.8727) .. ( 0.4341,-0.8721)
+ .. controls ( 0.4186,-0.8512) and ( 0.3640,-0.8304) .. ( 0.3384,-0.8347)
+ --cycle
+ (-0.0904,-0.8535)
+ .. controls (-0.1018,-0.8579) and (-0.1087,-0.8586) .. (-0.1185,-0.8680)
+ .. controls (-0.1188,-0.8683) and (-0.1189,-0.8687) .. (-0.1192,-0.8690)
+ -- (-0.0904,-0.8692)
+ --cycle
+ (-0.3081,-0.8645)
+ .. controls (-0.3140,-0.8641) and (-0.3192,-0.8651) .. (-0.3238,-0.8672)
+ -- (-0.2954,-0.8675)
+ .. controls (-0.2996,-0.8660) and (-0.3039,-0.8648) .. (-0.3081,-0.8645)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/mountain.dtx b/macros/latex/contrib/wargame/source/hex/terrain/mountain.dtx
new file mode 100644
index 0000000000..0ea308c2f8
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/mountain.dtx
@@ -0,0 +1,26 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/mountain}
+% This is an example of a terrain \spec{pic}ture.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/mountain/.pic={%
+ \path[draw=black,fill=white] (0,0) -- (.3,.9)--(.45,0) -- cycle;
+ \path[draw=black,fill=lightgray,pic actions]
+ (-.6 ,- .9) --
+ (-.3 , .3) --
+ ( 0, 0) --
+ ( .45, 0) --
+ ( .6 , -.9) -- cycle;
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/mountains.dtx b/macros/latex/contrib/wargame/source/hex/terrain/mountains.dtx
new file mode 100644
index 0000000000..04f935bd92
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/mountains.dtx
@@ -0,0 +1,695 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/mountains}
+% The style for mountains. The pattern is filled with a darker
+% brown, and outlines are not drawn. Note that the mountain pattern
+% is the same as the beach pattern, just with a different colour.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/mountains/.style={
+ draw=none,
+ fill={rgb,100:red,49;green,35;blue,1}
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{hex/terrain/mountains}
+% And the mountains pattern. This is the same as the beach pattern,
+% only filled with a darker brown colour.
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/mountains/.pic={
+ \path[hex/terrain/mountains,pic actions,draw=none]
+ (-0.4931, 0.8848)
+ -- (-0.4998, 0.8734)
+ .. controls (-0.4908, 0.8731) and (-0.4813, 0.8762) .. (-0.4762, 0.8847)
+ --cycle
+ (-0.4032, 0.8841)
+ .. controls (-0.4004, 0.8804) and (-0.3988, 0.8794) .. (-0.3956, 0.8745)
+ .. controls (-0.3760, 0.8443) and (-0.3811, 0.8330) .. (-0.3456, 0.8112)
+ .. controls (-0.3250, 0.7986) and (-0.2712, 0.7770) .. (-0.2531, 0.8032)
+ .. controls (-0.2294, 0.8375) and (-0.2984, 0.8503) .. (-0.3193, 0.8690)
+ .. controls (-0.3243, 0.8735) and (-0.3281, 0.8785) .. (-0.3321, 0.8835)
+ --cycle
+ (-0.2462, 0.8828)
+ .. controls (-0.2425, 0.8681) and (-0.2383, 0.8546) .. (-0.2293, 0.8461)
+ .. controls (-0.2102, 0.8280) and (-0.1892, 0.8390) .. (-0.1859, 0.8669)
+ .. controls (-0.1854, 0.8711) and (-0.1871, 0.8772) .. (-0.1875, 0.8822)
+ --cycle
+ (-0.0997, 0.8815)
+ .. controls (-0.0971, 0.8706) and (-0.0941, 0.8597) .. (-0.0907, 0.8493)
+ -- (-0.0570, 0.8578)
+ .. controls (-0.0570, 0.8629) and (-0.0560, 0.8730) .. (-0.0553, 0.8812)
+ --cycle
+ ( 0.0213, 0.8805)
+ .. controls ( 0.0222, 0.8725) and ( 0.0235, 0.8650) .. ( 0.0262, 0.8587)
+ .. controls ( 0.0391, 0.8281) and ( 0.0706, 0.8199) .. ( 0.0917, 0.7894)
+ .. controls ( 0.1112, 0.7609) and ( 0.1058, 0.7286) .. ( 0.1050, 0.6961)
+ -- ( 0.1731, 0.7216)
+ -- ( 0.1203, 0.8649)
+ -- ( 0.1097, 0.8797)
+ --cycle
+ ( 0.2978, 0.8781)
+ .. controls ( 0.2985, 0.8773) and ( 0.3002, 0.8756) .. ( 0.3008, 0.8749)
+ .. controls ( 0.2854, 0.8687) and ( 0.2549, 0.8572) .. ( 0.2421, 0.8487)
+ .. controls ( 0.2026, 0.8224) and ( 0.1905, 0.7567) .. ( 0.2046, 0.7132)
+ .. controls ( 0.2146, 0.6819) and ( 0.2330, 0.6680) .. ( 0.2394, 0.6280)
+ .. controls ( 0.2413, 0.6160) and ( 0.2468, 0.5527) .. ( 0.2446, 0.5437)
+ .. controls ( 0.2396, 0.5232) and ( 0.2211, 0.5122) .. ( 0.2231, 0.4913)
+ .. controls ( 0.2261, 0.4603) and ( 0.2686, 0.4388) .. ( 0.2891, 0.4194)
+ .. controls ( 0.3020, 0.4071) and ( 0.3136, 0.3895) .. ( 0.3281, 0.3799)
+ .. controls ( 0.3688, 0.3533) and ( 0.3905, 0.3863) .. ( 0.4199, 0.3902)
+ .. controls ( 0.4350, 0.3921) and ( 0.4560, 0.3849) .. ( 0.4710, 0.3812)
+ -- ( 0.4795, 0.4067)
+ -- ( 0.4965, 0.4067)
+ .. controls ( 0.5008, 0.3961) and ( 0.5009, 0.3893) .. ( 0.5112, 0.3811)
+ .. controls ( 0.5112, 0.3811) and ( 0.6172, 0.3385) .. ( 0.6481, 0.3037)
+ .. controls ( 0.6729, 0.2758) and ( 0.6641, 0.2532) .. ( 0.6667, 0.2206)
+ -- ( 0.7004, 0.2206)
+ .. controls ( 0.7839, 0.2118) and ( 0.7047, 0.0740) .. ( 0.7057, 0.0568)
+ .. controls ( 0.7067, 0.0396) and ( 0.7865,-0.0424) .. ( 0.8032,-0.0520)
+ .. controls ( 0.8251,-0.0644) and ( 0.8703,-0.0686) .. ( 0.8572,-0.0293)
+ .. controls ( 0.8518,-0.0131) and ( 0.7996, 0.0474) .. ( 0.7843, 0.0564)
+ .. controls ( 0.7724, 0.0633) and ( 0.7645, 0.0636) .. ( 0.7518, 0.0664)
+ .. controls ( 0.7688, 0.1093) and ( 0.7993, 0.1905) .. ( 0.7930, 0.2362)
+ .. controls ( 0.7869, 0.2804) and ( 0.7252, 0.2982) .. ( 0.6946, 0.3268)
+ .. controls ( 0.6664, 0.3531) and ( 0.6746, 0.3662) .. ( 0.6323, 0.3966)
+ .. controls ( 0.5760, 0.4371) and ( 0.5386, 0.4324) .. ( 0.5250, 0.4601)
+ .. controls ( 0.5090, 0.4927) and ( 0.5578, 0.6035) .. ( 0.5969, 0.5911)
+ .. controls ( 0.6199, 0.5839) and ( 0.6224, 0.5471) .. ( 0.6341, 0.5291)
+ .. controls ( 0.6488, 0.5064) and ( 0.7020, 0.4614) .. ( 0.7263, 0.4493)
+ -- ( 0.7373, 0.4768)
+ -- ( 0.6866, 0.5671)
+ -- ( 0.6756, 0.5720)
+ -- ( 0.6766, 0.5850)
+ -- ( 0.6331, 0.6627)
+ .. controls ( 0.6280, 0.6613) and ( 0.6239, 0.6599) .. ( 0.6157, 0.6589)
+ -- ( 0.5646, 0.6589)
+ .. controls ( 0.5375, 0.6557) and ( 0.5277, 0.6432) .. ( 0.4965, 0.6489)
+ .. controls ( 0.4716, 0.6520) and ( 0.4306, 0.6774) .. ( 0.4104, 0.6489)
+ .. controls ( 0.3809, 0.6093) and ( 0.4627, 0.6240) .. ( 0.4837, 0.5772)
+ .. controls ( 0.4958, 0.5502) and ( 0.4652, 0.4811) .. ( 0.4429, 0.4648)
+ -- ( 0.3523, 0.4350)
+ .. controls ( 0.3178, 0.4372) and ( 0.3207, 0.4766) .. ( 0.3153, 0.5004)
+ .. controls ( 0.3090, 0.5282) and ( 0.2968, 0.5398) .. ( 0.2922, 0.5684)
+ .. controls ( 0.2896, 0.6035) and ( 0.3061, 0.6276) .. ( 0.2922, 0.6621)
+ .. controls ( 0.2756, 0.6961) and ( 0.2422, 0.7190) .. ( 0.2525, 0.7640)
+ .. controls ( 0.2650, 0.8188) and ( 0.3165, 0.7932) .. ( 0.3324, 0.8417)
+ .. controls ( 0.3359, 0.8522) and ( 0.3385, 0.8648) .. ( 0.3399, 0.8778)
+ --cycle
+ ( 0.4261, 0.8770)
+ -- ( 0.4333, 0.8493)
+ -- ( 0.4845, 0.7440)
+ .. controls ( 0.4963, 0.7304) and ( 0.5450, 0.6930) .. ( 0.5630, 0.6989)
+ .. controls ( 0.5735, 0.7024) and ( 0.5838, 0.7169) .. ( 0.5932, 0.7337)
+ -- ( 0.5612, 0.7909)
+ .. controls ( 0.5537, 0.7875) and ( 0.5468, 0.7852) .. ( 0.5403, 0.7864)
+ .. controls ( 0.5078, 0.7926) and ( 0.5191, 0.8406) .. ( 0.5145, 0.8567)
+ .. controls ( 0.5121, 0.8651) and ( 0.5076, 0.8710) .. ( 0.5025, 0.8764)
+ --cycle
+ ( 0.3773, 0.8153)
+ .. controls ( 0.3625, 0.7892) and ( 0.2993, 0.7161) .. ( 0.3316, 0.6877)
+ .. controls ( 0.3432, 0.6774) and ( 0.3866, 0.6728) .. ( 0.4029, 0.6706)
+ -- ( 0.3973, 0.7472)
+ -- ( 0.4029, 0.8153)
+ --cycle
+ (-0.4224, 0.8088)
+ .. controls (-0.4416, 0.8077) and (-0.4585, 0.7826) .. (-0.4275, 0.7562)
+ -- (-0.3971, 0.7387)
+ .. controls (-0.4780, 0.6942) and (-0.4752, 0.6640) .. (-0.4591, 0.5855)
+ .. controls (-0.4391, 0.4887) and (-0.4527, 0.5347) .. (-0.4103, 0.4493)
+ .. controls (-0.3870, 0.4026) and (-0.4070, 0.3747) .. (-0.3460, 0.3642)
+ -- (-0.3352, 0.4823)
+ .. controls (-0.3409, 0.5024) and (-0.3617, 0.5113) .. (-0.3739, 0.5281)
+ -- (-0.4164, 0.6287)
+ .. controls (-0.4188, 0.6375) and (-0.4186, 0.6444) .. (-0.4164, 0.6528)
+ .. controls (-0.4067, 0.6807) and (-0.3521, 0.7255) .. (-0.3274, 0.6931)
+ .. controls (-0.3070, 0.6694) and (-0.3336, 0.6432) .. (-0.3274, 0.6221)
+ .. controls (-0.3249, 0.6055) and (-0.3059, 0.6028) .. (-0.2950, 0.6162)
+ .. controls (-0.2867, 0.6265) and (-0.2838, 0.6558) .. (-0.2829, 0.6692)
+ .. controls (-0.2775, 0.7444) and (-0.3333, 0.7652) .. (-0.3955, 0.7472)
+ .. controls (-0.3950, 0.7586) and (-0.3916, 0.7684) .. (-0.3955, 0.7803)
+ .. controls (-0.3986, 0.8016) and (-0.4109, 0.8096) .. (-0.4224, 0.8088)
+ --cycle
+ (-0.1391, 0.8077)
+ .. controls (-0.1634, 0.8024) and (-0.1582, 0.7647) .. (-0.1487, 0.7492)
+ .. controls (-0.1306, 0.7190) and (-0.1004, 0.7270) .. (-0.0652, 0.7073)
+ -- (-0.0226, 0.6801)
+ -- ( 0.0282, 0.6560)
+ .. controls ( 0.0622, 0.6331) and ( 0.0955, 0.5639) .. ( 0.1219, 0.5259)
+ .. controls ( 0.2125, 0.5714) and ( 0.1427, 0.6114) .. ( 0.1219, 0.6453)
+ -- ( 0.1054, 0.6768)
+ .. controls ( 0.0862, 0.7028) and ( 0.0448, 0.7080) .. ( 0.0115, 0.7299)
+ .. controls (-0.0377, 0.7622) and (-0.0173, 0.7726) .. (-0.0822, 0.7918)
+ .. controls (-0.0961, 0.7958) and (-0.1270, 0.8103) .. (-0.1391, 0.8077)
+ --cycle
+ (-0.5460, 0.7940)
+ -- (-0.5911, 0.7166)
+ .. controls (-0.5649, 0.7015) and (-0.5397, 0.7188) .. (-0.5308, 0.7556)
+ .. controls (-0.5251, 0.7788) and (-0.5335, 0.7873) .. (-0.5460, 0.7940)
+ --cycle
+ (-0.2382, 0.7423)
+ .. controls (-0.2453, 0.7424) and (-0.2512, 0.7383) .. (-0.2550, 0.7274)
+ .. controls (-0.2635, 0.7026) and (-0.2353, 0.6726) .. (-0.2229, 0.6536)
+ .. controls (-0.2031, 0.6234) and (-0.2020, 0.6105) .. (-0.1928, 0.5770)
+ .. controls (-0.1763, 0.5803) and (-0.1499, 0.5890) .. (-0.1342, 0.5831)
+ .. controls (-0.1112, 0.5745) and (-0.1047, 0.5481) .. (-0.0866, 0.5338)
+ -- (-0.0397, 0.5102)
+ -- ( 0.0664, 0.4219)
+ .. controls ( 0.0874, 0.3954) and ( 0.0785, 0.3655) .. ( 0.1070, 0.3502)
+ .. controls ( 0.1367, 0.3343) and ( 0.1690, 0.3592) .. ( 0.1732, 0.3899)
+ .. controls ( 0.1755, 0.4075) and ( 0.1545, 0.4554) .. ( 0.1475, 0.4748)
+ .. controls ( 0.0838, 0.4666) and ( 0.0509, 0.4836) .. ( 0.0454, 0.5515)
+ .. controls (-0.0576, 0.5778) and (-0.0955, 0.6323) .. (-0.1754, 0.6949)
+ .. controls (-0.1861, 0.7034) and (-0.2171, 0.7418) .. (-0.2382, 0.7423)
+ --cycle
+ (-0.5068, 0.6706)
+ .. controls (-0.5119, 0.6724) and (-0.5194, 0.6726) .. (-0.5299, 0.6701)
+ .. controls (-0.5512, 0.6413) and (-0.5242, 0.6333) .. (-0.5102, 0.6400)
+ .. controls (-0.4981, 0.6457) and (-0.4916, 0.6653) .. (-0.5068, 0.6706)
+ --cycle
+ (-0.6356, 0.6402)
+ -- (-0.6681, 0.5845)
+ -- (-0.6588, 0.5684)
+ .. controls (-0.6473, 0.5521) and (-0.6323, 0.5371) .. (-0.6265, 0.5174)
+ .. controls (-0.6174, 0.4865) and (-0.6614, 0.4161) .. (-0.6950, 0.4206)
+ .. controls (-0.7111, 0.4226) and (-0.7174, 0.4376) .. (-0.7460, 0.4507)
+ -- (-0.7632, 0.4212)
+ .. controls (-0.7629, 0.4042) and (-0.7611, 0.3875) .. (-0.7546, 0.3789)
+ .. controls (-0.7424, 0.3626) and (-0.7129, 0.3612) .. (-0.6966, 0.3297)
+ .. controls (-0.6823, 0.3022) and (-0.6963, 0.2741) .. (-0.6808, 0.2598)
+ .. controls (-0.6602, 0.2410) and (-0.6495, 0.2720) .. (-0.6484, 0.2878)
+ .. controls (-0.6461, 0.3229) and (-0.6488, 0.4046) .. (-0.6080, 0.4204)
+ .. controls (-0.5750, 0.4330) and (-0.4980, 0.3514) .. (-0.4929, 0.3217)
+ .. controls (-0.4895, 0.3019) and (-0.5044, 0.2671) .. (-0.4860, 0.2550)
+ .. controls (-0.4691, 0.2439) and (-0.4582, 0.2679) .. (-0.4535, 0.2796)
+ .. controls (-0.4450, 0.3015) and (-0.4273, 0.3562) .. (-0.4401, 0.3771)
+ .. controls (-0.4495, 0.3922) and (-0.5019, 0.4172) .. (-0.5296, 0.4507)
+ .. controls (-0.5656, 0.4941) and (-0.5734, 0.5631) .. (-0.5973, 0.6021)
+ .. controls (-0.6099, 0.6226) and (-0.6226, 0.6316) .. (-0.6356, 0.6402)
+ --cycle
+ ( 0.2242, 0.6110)
+ -- ( 0.1816, 0.6025)
+ -- ( 0.1816, 0.5855)
+ .. controls ( 0.2117, 0.5815) and ( 0.2140, 0.5821) .. ( 0.2242, 0.6110)
+ --cycle
+ ( 0.3924, 0.6049)
+ .. controls ( 0.3895, 0.6048) and ( 0.3860, 0.6036) .. ( 0.3820, 0.6011)
+ .. controls ( 0.3535, 0.5835) and ( 0.3670, 0.5238) .. ( 0.3773, 0.5004)
+ -- ( 0.3944, 0.5004)
+ -- ( 0.4061, 0.5429)
+ .. controls ( 0.4082, 0.5540) and ( 0.4130, 0.6056) .. ( 0.3924, 0.6049)
+ --cycle
+ (-0.2864, 0.5940)
+ .. controls (-0.2904, 0.5793) and (-0.2950, 0.5676) .. (-0.2919, 0.5518)
+ .. controls (-0.2769, 0.4768) and (-0.1616, 0.5041) .. (-0.2162, 0.5623)
+ .. controls (-0.2236, 0.5702) and (-0.2346, 0.5747) .. (-0.2443, 0.5790)
+ --cycle
+ (-0.7010, 0.5280)
+ -- (-0.7269, 0.4835)
+ .. controls (-0.7207, 0.4876) and (-0.7144, 0.4952) .. (-0.7081, 0.5094)
+ --cycle
+ (-0.0992, 0.4748)
+ -- (-0.2099, 0.4556)
+ -- (-0.2888, 0.3790)
+ -- (-0.3460, 0.3557)
+ -- (-0.3389, 0.3218)
+ .. controls (-0.3310, 0.2959) and (-0.3026, 0.2636) .. (-0.2781, 0.2927)
+ .. controls (-0.2745, 0.2971) and (-0.2504, 0.3947) .. (-0.1948, 0.3764)
+ .. controls (-0.1607, 0.3651) and (-0.1697, 0.2984) .. (-0.1588, 0.2536)
+ -- (-0.1503, 0.2536)
+ -- (-0.1503, 0.2450)
+ -- (-0.1163, 0.2366)
+ .. controls (-0.0968, 0.3059) and (-0.1262, 0.3371) .. (-0.1239, 0.3982)
+ .. controls (-0.1229, 0.4261) and (-0.1067, 0.4484) .. (-0.0992, 0.4748)
+ --cycle
+ (-0.1503, 0.2450)
+ -- (-0.1588, 0.2536)
+ .. controls (-0.2292, 0.2544) and (-0.2730, 0.2893) .. (-0.2677, 0.2195)
+ -- (-0.2609, 0.1855)
+ .. controls (-0.2393, 0.1890) and (-0.2005, 0.2039) .. (-0.1909, 0.1753)
+ .. controls (-0.1709, 0.1163) and (-0.2582, 0.0953) .. (-0.2387, 0.0533)
+ .. controls (-0.2275, 0.0292) and (-0.1430, 0.0537) .. (-0.1361, 0.0692)
+ .. controls (-0.1250, 0.0859) and (-0.1359, 0.1083) .. (-0.1361, 0.1259)
+ .. controls (-0.1437, 0.1788) and (-0.1186, 0.1766) .. (-0.1503, 0.2450)
+ --cycle
+ ( 0.7348, 0.4408)
+ .. controls ( 0.7113, 0.3774) and ( 0.7569, 0.3513) .. ( 0.7901, 0.3824)
+ -- ( 0.7585, 0.4390)
+ --cycle
+ ( 0.2071, 0.4153)
+ .. controls ( 0.1984, 0.3706) and ( 0.2118, 0.3204) .. ( 0.2582, 0.3046)
+ .. controls ( 0.2685, 0.3631) and ( 0.2706, 0.3931) .. ( 0.2071, 0.4153)
+ --cycle
+ (-0.0567, 0.3982)
+ .. controls (-0.0558, 0.3230) and (-0.0460, 0.3456) .. (-0.0210, 0.2876)
+ -- ( 0.0067, 0.1940)
+ .. controls ( 0.0180, 0.1513) and ( 0.0026, 0.1332) .. ( 0.0454, 0.1089)
+ -- ( 0.0767, 0.1940)
+ -- ( 0.0546, 0.2621)
+ -- ( 0.0406, 0.3185)
+ -- (-0.0258, 0.3896)
+ --cycle
+ (-0.7969, 0.3634)
+ -- (-0.8570, 0.2602)
+ .. controls (-0.8515, 0.2550) and (-0.8469, 0.2514) .. (-0.8414, 0.2450)
+ .. controls (-0.8020, 0.1990) and (-0.8201, 0.1971) .. (-0.7629, 0.1540)
+ .. controls (-0.7462, 0.1414) and (-0.7054, 0.1023) .. (-0.6834, 0.1181)
+ .. controls (-0.6662, 0.1304) and (-0.6813, 0.1625) .. (-0.6882, 0.1768)
+ .. controls (-0.7213, 0.2456) and (-0.7865, 0.2417) .. (-0.8004, 0.2965)
+ .. controls (-0.8052, 0.3154) and (-0.7990, 0.3413) .. (-0.7969, 0.3634)
+ --cycle
+ ( 0.8244, 0.3214)
+ .. controls ( 0.8136, 0.3128) and ( 0.8080, 0.2984) .. ( 0.8114, 0.2706)
+ .. controls ( 0.8314, 0.2739) and ( 0.8424, 0.2735) .. ( 0.8526, 0.2710)
+ --cycle
+ ( 0.5015, 0.3207)
+ .. controls ( 0.4943, 0.3196) and ( 0.4861, 0.3171) .. ( 0.4766, 0.3130)
+ .. controls ( 0.4611, 0.2827) and ( 0.4839, 0.2747) .. ( 0.5028, 0.2521)
+ -- ( 0.5376, 0.1972)
+ .. controls ( 0.5529, 0.1772) and ( 0.5728, 0.1698) .. ( 0.5845, 0.1426)
+ .. controls ( 0.5979, 0.1115) and ( 0.5837, 0.0732) .. ( 0.5987, 0.0532)
+ .. controls ( 0.6095, 0.0384) and ( 0.6236, 0.0428) .. ( 0.6350, 0.0532)
+ .. controls ( 0.6681, 0.0842) and ( 0.6456, 0.1087) .. ( 0.6482, 0.1429)
+ .. controls ( 0.6481, 0.1614) and ( 0.6596, 0.1802) .. ( 0.6482, 0.1967)
+ .. controls ( 0.6390, 0.2131) and ( 0.5992, 0.2239) .. ( 0.5768, 0.2483)
+ .. controls ( 0.5547, 0.2722) and ( 0.5524, 0.3288) .. ( 0.5015, 0.3207)
+ --cycle
+ (-0.5678, 0.3115)
+ .. controls (-0.5832, 0.3118) and (-0.6140, 0.2810) .. (-0.6269, 0.2706)
+ .. controls (-0.6185, 0.2412) and (-0.5926, 0.1953) .. (-0.5973, 0.1685)
+ .. controls (-0.6029, 0.1373) and (-0.6320, 0.1239) .. (-0.6369, 0.0996)
+ .. controls (-0.6406, 0.0816) and (-0.6303, 0.0652) .. (-0.6237, 0.0493)
+ .. controls (-0.6147, 0.0275) and (-0.6000,-0.0443) .. (-0.5641,-0.0258)
+ .. controls (-0.5134,-0.0018) and (-0.5902, 0.0606) .. (-0.5641, 0.1074)
+ .. controls (-0.5332, 0.1697) and (-0.4913, 0.1444) .. (-0.4481, 0.1593)
+ .. controls (-0.3913, 0.1792) and (-0.3439, 0.2446) .. (-0.3545, 0.3046)
+ -- (-0.4568, 0.2201)
+ -- (-0.5588, 0.2201)
+ .. controls (-0.5549, 0.2390) and (-0.5305, 0.3109) .. (-0.5678, 0.3115)
+ --cycle
+ ( 0.2243, 0.2813)
+ -- ( 0.1631, 0.2450)
+ -- ( 0.0965, 0.2281)
+ -- ( 0.1689, 0.1131)
+ -- ( 0.2065, 0.0861)
+ .. controls ( 0.2453, 0.0564) and ( 0.2384, 0.0410) .. ( 0.2923, 0.0323)
+ -- ( 0.2988,-0.0188)
+ .. controls ( 0.2994,-0.0695) and ( 0.2657,-0.0796) .. ( 0.2249,-0.0579)
+ .. controls ( 0.1337,-0.0093) and ( 0.1545, 0.0219) .. ( 0.1102, 0.0744)
+ .. controls ( 0.0914, 0.0967) and ( 0.0807, 0.1010) .. ( 0.0539, 0.1089)
+ .. controls ( 0.0562, 0.0613) and ( 0.0756,-0.0434) .. ( 0.0403,-0.0825)
+ .. controls ( 0.0293,-0.0948) and (-0.0336,-0.1168) .. (-0.0567,-0.1294)
+ .. controls (-0.0615,-0.1087) and (-0.0777,-0.0729) .. (-0.0703,-0.0546)
+ .. controls (-0.0586,-0.0251) and ( 0.0562, 0.0040) .. (-0.0152, 0.0389)
+ -- (-0.0397, 0.0480)
+ -- (-0.0737, 0.0578)
+ .. controls (-0.0806, 0.0391) and (-0.0849, 0.0192) .. (-0.1018, 0.0068)
+ .. controls (-0.1154,-0.0032) and (-0.1352,-0.0018) .. (-0.1438,-0.0212)
+ .. controls (-0.1562,-0.0491) and (-0.1117,-0.1243) .. (-0.0874,-0.1373)
+ .. controls (-0.0745,-0.1434) and (-0.0687,-0.1394) .. (-0.0567,-0.1373)
+ .. controls (-0.0358,-0.2033) and (-0.0062,-0.1612) .. ( 0.0370,-0.1500)
+ -- ( 0.1050,-0.1379)
+ .. controls ( 0.0882,-0.0871) and ( 0.0808,-0.0999) .. ( 0.0965,-0.0443)
+ .. controls ( 0.1454,-0.0619) and ( 0.1336,-0.0743) .. ( 0.1664,-0.0940)
+ .. controls ( 0.1897,-0.1081) and ( 0.2226,-0.1052) .. ( 0.2361,-0.1388)
+ .. controls ( 0.2495,-0.1724) and ( 0.2245,-0.1963) .. ( 0.2412,-0.2584)
+ .. controls ( 0.2526,-0.2569) and ( 0.2622,-0.2548) .. ( 0.2735,-0.2584)
+ .. controls ( 0.2987,-0.2708) and ( 0.3225,-0.3241) .. ( 0.3212,-0.3506)
+ .. controls ( 0.3203,-0.3711) and ( 0.3053,-0.3950) .. ( 0.3008,-0.4443)
+ -- ( 0.2497,-0.4187)
+ .. controls ( 0.2599,-0.4479) and ( 0.2621,-0.4475) .. ( 0.2905,-0.4528)
+ .. controls ( 0.2877,-0.4715) and ( 0.2799,-0.4998) .. ( 0.2905,-0.5182)
+ .. controls ( 0.2991,-0.5392) and ( 0.3228,-0.5357) .. ( 0.3346,-0.5182)
+ .. controls ( 0.3506,-0.4943) and ( 0.3355,-0.4515) .. ( 0.3532,-0.4203)
+ .. controls ( 0.3716,-0.3881) and ( 0.4096,-0.3844) .. ( 0.4084,-0.3499)
+ .. controls ( 0.4074,-0.3241) and ( 0.3866,-0.3087) .. ( 0.3728,-0.2897)
+ -- ( 0.3426,-0.2337)
+ -- ( 0.2989,-0.1879)
+ .. controls ( 0.2810,-0.1587) and ( 0.2976,-0.1327) .. ( 0.3187,-0.1323)
+ .. controls ( 0.3342,-0.1319) and ( 0.3489,-0.1451) .. ( 0.3603,-0.1541)
+ .. controls ( 0.3817,-0.1712) and ( 0.4026,-0.1894) .. ( 0.4144,-0.2146)
+ .. controls ( 0.4299,-0.2477) and ( 0.4289,-0.2977) .. ( 0.4712,-0.3110)
+ .. controls ( 0.4957,-0.3188) and ( 0.5167,-0.3024) .. ( 0.5044,-0.2753)
+ .. controls ( 0.4967,-0.2585) and ( 0.4769,-0.2471) .. ( 0.4676,-0.2227)
+ .. controls ( 0.4582,-0.1981) and ( 0.4681,-0.1743) .. ( 0.4488,-0.1492)
+ .. controls ( 0.4286,-0.1227) and ( 0.3809,-0.1095) .. ( 0.3621,-0.0696)
+ .. controls ( 0.3402,-0.0230) and ( 0.3896, 0.0270) .. ( 0.3092, 0.0408)
+ -- ( 0.3532, 0.1933)
+ -- ( 0.3944, 0.2536)
+ -- ( 0.3433, 0.2765)
+ --cycle
+ ( 0.2497, 0.2450)
+ -- ( 0.2782, 0.2025)
+ .. controls ( 0.2843, 0.1911) and ( 0.2884, 0.1815) .. ( 0.2900, 0.1685)
+ .. controls ( 0.3021, 0.0654) and ( 0.1495, 0.1479) .. ( 0.2135, 0.2245)
+ .. controls ( 0.2246, 0.2378) and ( 0.2346, 0.2396) .. ( 0.2497, 0.2450)
+ --cycle
+ ( 0.8836, 0.2157)
+ .. controls ( 0.8688, 0.2061) and ( 0.8571, 0.1889) .. ( 0.8687, 0.1736)
+ .. controls ( 0.8785, 0.1608) and ( 0.8967, 0.1613) .. ( 0.9161, 0.1578)
+ --cycle
+ (-0.3035, 0.1940)
+ .. controls (-0.3340, 0.1390) and (-0.3508, 0.1491) .. (-0.3624, 0.1300)
+ .. controls (-0.3738, 0.1112) and (-0.3588, 0.0896) .. (-0.3288, 0.0972)
+ .. controls (-0.2842, 0.1084) and (-0.2392, 0.1714) .. (-0.3035, 0.1940)
+ --cycle
+ ( 0.4710, 0.1940)
+ .. controls ( 0.4330, 0.1525) and ( 0.3961, 0.1447) .. ( 0.4114, 0.0833)
+ .. controls ( 0.4294, 0.0897) and ( 0.4596, 0.1056) .. ( 0.4776, 0.0984)
+ .. controls ( 0.5010, 0.0888) and ( 0.5182, 0.0420) .. ( 0.4925, 0.0231)
+ .. controls ( 0.4698, 0.0064) and ( 0.4500, 0.0299) .. ( 0.3944, 0.0153)
+ .. controls ( 0.4243,-0.0189) and ( 0.4618,-0.0333) .. ( 0.4765,-0.0621)
+ .. controls ( 0.4928,-0.0939) and ( 0.4729,-0.1183) .. ( 0.4881,-0.1406)
+ .. controls ( 0.4977,-0.1549) and ( 0.5241,-0.1630) .. ( 0.5425,-0.1894)
+ .. controls ( 0.5557,-0.2085) and ( 0.5562,-0.2282) .. ( 0.5657,-0.2485)
+ -- ( 0.6122,-0.3251)
+ .. controls ( 0.6335,-0.3720) and ( 0.6160,-0.3973) .. ( 0.6323,-0.4443)
+ .. controls ( 0.6532,-0.5042) and ( 0.6754,-0.5231) .. ( 0.6973,-0.5440)
+ -- ( 0.7289,-0.4899)
+ .. controls ( 0.7138,-0.4739) and ( 0.6992,-0.4579) .. ( 0.6886,-0.4358)
+ -- ( 0.6489,-0.2690)
+ .. controls ( 0.6485,-0.2445) and ( 0.6654,-0.2180) .. ( 0.6598,-0.2002)
+ .. controls ( 0.6522,-0.1752) and ( 0.6202,-0.1899) .. ( 0.5938,-0.1612)
+ .. controls ( 0.5619,-0.1263) and ( 0.5907,-0.0980) .. ( 0.5797,-0.0720)
+ .. controls ( 0.5714,-0.0525) and ( 0.5434,-0.0441) .. ( 0.5374,-0.0184)
+ .. controls ( 0.5319, 0.0056) and ( 0.5522, 0.0300) .. ( 0.5533, 0.0578)
+ .. controls ( 0.5548, 0.0943) and ( 0.4981, 0.1701) .. ( 0.4710, 0.1940)
+ --cycle
+ (-0.9001, 0.1862)
+ -- (-0.9386, 0.1201)
+ .. controls (-0.9374, 0.1181) and (-0.9371, 0.1158) .. (-0.9356, 0.1139)
+ .. controls (-0.9242, 0.0996) and (-0.9046, 0.0893) .. (-0.8911, 0.0660)
+ .. controls (-0.8684, 0.0268) and (-0.8960, 0.0297) .. (-0.8592,-0.0296)
+ .. controls (-0.8262,-0.0830) and (-0.8655,-0.1092) .. (-0.7971,-0.1209)
+ -- (-0.7875, 0.0068)
+ -- (-0.8579, 0.1174)
+ --cycle
+ (-0.4453, 0.0979)
+ .. controls (-0.4922, 0.0916) and (-0.4988, 0.0347) .. (-0.4759, 0.0116)
+ .. controls (-0.4491,-0.0149) and (-0.4165, 0.0208) .. (-0.3900, 0.0116)
+ .. controls (-0.3555,-0.0011) and (-0.3800,-0.0410) .. (-0.3751,-0.0698)
+ -- (-0.3537,-0.1294)
+ .. controls (-0.3428,-0.1879) and (-0.4042,-0.1777) .. (-0.3801,-0.2656)
+ .. controls (-0.3617,-0.2531) and (-0.3352,-0.2292) .. (-0.3122,-0.2330)
+ .. controls (-0.2845,-0.2375) and (-0.2669,-0.2694) .. (-0.2543,-0.2911)
+ .. controls (-0.2183,-0.3533) and (-0.2004,-0.3613) .. (-0.2184,-0.4358)
+ .. controls (-0.3300,-0.4097) and (-0.2723,-0.5065) .. (-0.2483,-0.5549)
+ -- (-0.2129,-0.6314)
+ .. controls (-0.2017,-0.6508) and (-0.1900,-0.6661) .. (-0.1670,-0.6712)
+ .. controls (-0.1211,-0.6813) and (-0.1100,-0.6527) .. (-0.1163,-0.6145)
+ .. controls (-0.1327,-0.6119) and (-0.1427,-0.6118) .. (-0.1568,-0.6009)
+ .. controls (-0.1780,-0.5845) and (-0.2123,-0.5041) .. (-0.2042,-0.4783)
+ .. controls (-0.1947,-0.4484) and (-0.1575,-0.4121) .. (-0.1333,-0.3932)
+ -- (-0.1527,-0.3251)
+ -- (-0.1588,-0.2656)
+ .. controls (-0.2187,-0.2715) and (-0.2083,-0.2536) .. (-0.2457,-0.2163)
+ .. controls (-0.2684,-0.1935) and (-0.2911,-0.1886) .. (-0.2996,-0.1546)
+ -- (-0.2996,-0.1209)
+ -- (-0.3232,-0.0698)
+ .. controls (-0.3283,-0.0435) and (-0.3124,-0.0260) .. (-0.3175,-0.0041)
+ .. controls (-0.3251, 0.0283) and (-0.3891, 0.0917) .. (-0.4227, 0.0973)
+ .. controls (-0.4311, 0.0987) and (-0.4386, 0.0989) .. (-0.4453, 0.0979)
+ --cycle
+ (-0.1163,-0.6145)
+ -- (-0.0812,-0.6009)
+ -- (-0.0509,-0.4868)
+ -- (-0.0567,-0.4528)
+ .. controls (-0.1227,-0.4845) and (-0.1350,-0.5483) .. (-0.1163,-0.6145)
+ --cycle
+ ( 0.9165, 0.0573)
+ .. controls ( 0.8982, 0.0512) and ( 0.8800, 0.0260) .. ( 0.8880,-0.0013)
+ .. controls ( 0.8973,-0.0334) and ( 0.9330,-0.0408) .. ( 0.9466,-0.0703)
+ .. controls ( 0.9528,-0.0838) and ( 0.9514,-0.0964) .. ( 0.9506,-0.1091)
+ -- ( 1.0000,-0.0243)
+ .. controls ( 0.9816,-0.0179) and ( 0.9678,-0.0119) .. ( 0.9563, 0.0077)
+ .. controls ( 0.9465, 0.0244) and ( 0.9476, 0.0488) .. ( 0.9340, 0.0564)
+ .. controls ( 0.9288, 0.0593) and ( 0.9227, 0.0593) .. ( 0.9165, 0.0573)
+ --cycle
+ (-0.7064, 0.0069)
+ .. controls (-0.7128, 0.0077) and (-0.7187, 0.0075) .. (-0.7237, 0.0061)
+ .. controls (-0.7255, 0.0030) and (-0.7310, 0.0025) .. (-0.7316,-0.0115)
+ .. controls (-0.7321,-0.0230) and (-0.7071,-0.1058) .. (-0.6984,-0.1096)
+ .. controls (-0.6872,-0.1176) and (-0.6721,-0.1116) .. (-0.6609,-0.1096)
+ .. controls (-0.6502,-0.1046) and (-0.6316,-0.0986) .. (-0.6242,-0.0900)
+ .. controls (-0.5901,-0.0507) and (-0.6615, 0.0017) .. (-0.7064, 0.0069)
+ --cycle
+ (-1.0000, 0.0068)
+ -- (-1.0000, 0.0020)
+ -- (-0.9548,-0.0788)
+ .. controls (-0.9170,-0.0310) and (-0.9342,-0.0158) .. (-1.0000, 0.0068)
+ --cycle
+ (-0.2643, 0.0054)
+ .. controls (-0.2853,-0.0295) and (-0.2523,-0.0713) .. (-0.2182,-0.0843)
+ .. controls (-0.2024,-0.0902) and (-0.1781,-0.0944) .. (-0.1687,-0.0757)
+ .. controls (-0.1530,-0.0441) and (-0.2378, 0.0095) .. (-0.2643, 0.0054)
+ --cycle
+ ( 0.6299,-0.0102)
+ .. controls ( 0.6155,-0.0145) and ( 0.6071,-0.0342) .. ( 0.6128,-0.0510)
+ .. controls ( 0.6198,-0.0721) and ( 0.6440,-0.0790) .. ( 0.6606,-0.0986)
+ .. controls ( 0.6738,-0.1143) and ( 0.6761,-0.1328) .. ( 0.6948,-0.1437)
+ .. controls ( 0.7092,-0.1520) and ( 0.7311,-0.1484) .. ( 0.7401,-0.1664)
+ .. controls ( 0.7461,-0.1784) and ( 0.7351,-0.2363) .. ( 0.7348,-0.2570)
+ .. controls ( 0.7336,-0.3524) and ( 0.7289,-0.3324) .. ( 0.7620,-0.4187)
+ .. controls ( 0.7631,-0.4216) and ( 0.7642,-0.4246) .. ( 0.7652,-0.4275)
+ -- ( 0.8003,-0.3672)
+ .. controls ( 0.7976,-0.3636) and ( 0.7942,-0.3606) .. ( 0.7918,-0.3568)
+ .. controls ( 0.7778,-0.3349) and ( 0.7645,-0.2537) .. ( 0.7970,-0.2417)
+ .. controls ( 0.8206,-0.2330) and ( 0.8347,-0.2671) .. ( 0.8432,-0.2822)
+ -- ( 0.8469,-0.2872)
+ -- ( 0.8787,-0.2326)
+ -- ( 0.8594,-0.1993)
+ .. controls ( 0.8496,-0.1847) and ( 0.7996,-0.1314) .. ( 0.7847,-0.1281)
+ .. controls ( 0.7712,-0.1229) and ( 0.7642,-0.1268) .. ( 0.7518,-0.1281)
+ .. controls ( 0.7451,-0.1148) and ( 0.7397,-0.1014) .. ( 0.7293,-0.0886)
+ -- ( 0.6461,-0.0117)
+ .. controls ( 0.6402,-0.0090) and ( 0.6347,-0.0087) .. ( 0.6299,-0.0102)
+ --cycle
+ (-0.5178,-0.0844)
+ .. controls (-0.5451,-0.0820) and (-0.5852,-0.0947) .. (-0.5902,-0.1144)
+ .. controls (-0.6007,-0.1557) and (-0.5621,-0.1731) .. (-0.5414,-0.1997)
+ .. controls (-0.5274,-0.2177) and (-0.5229,-0.2355) .. (-0.5044,-0.2525)
+ .. controls (-0.4888,-0.2669) and (-0.4706,-0.2705) .. (-0.4543,-0.2923)
+ .. controls (-0.4420,-0.3087) and (-0.4220,-0.3707) .. (-0.4141,-0.3932)
+ .. controls (-0.3620,-0.3875) and (-0.3060,-0.4031) .. (-0.3060,-0.3592)
+ .. controls (-0.3060,-0.3272) and (-0.3358,-0.3272) .. (-0.3716,-0.3008)
+ .. controls (-0.4367,-0.2529) and (-0.4253,-0.2451) .. (-0.4621,-0.1914)
+ .. controls (-0.4700,-0.1800) and (-0.4814,-0.1685) .. (-0.4867,-0.1556)
+ .. controls (-0.4970,-0.1308) and (-0.4804,-0.1088) .. (-0.4966,-0.0923)
+ .. controls (-0.5011,-0.0877) and (-0.5087,-0.0853) .. (-0.5178,-0.0844)
+ --cycle
+ (-0.4165,-0.0846)
+ .. controls (-0.4357,-0.0807) and (-0.4622,-0.1075) .. (-0.4395,-0.1440)
+ .. controls (-0.4316,-0.1566) and (-0.4254,-0.1571) .. (-0.4141,-0.1634)
+ .. controls (-0.4094,-0.1522) and (-0.4042,-0.1415) .. (-0.4019,-0.1294)
+ .. controls (-0.3960,-0.1004) and (-0.4049,-0.0870) .. (-0.4165,-0.0846)
+ --cycle
+ (-0.9358,-0.1125)
+ -- (-0.8813,-0.2098)
+ .. controls (-0.8768,-0.1903) and (-0.8656,-0.1673) .. (-0.8723,-0.1485)
+ .. controls (-0.8801,-0.1269) and (-0.9022,-0.1274) .. (-0.9358,-0.1125)
+ --cycle
+ ( 0.1455,-0.1458)
+ .. controls ( 0.1402,-0.1449) and ( 0.1336,-0.1452) .. ( 0.1255,-0.1471)
+ .. controls ( 0.0901,-0.1850) and ( 0.1064,-0.2454) .. ( 0.1360,-0.2301)
+ .. controls ( 0.1569,-0.2194) and ( 0.1827,-0.1522) .. ( 0.1455,-0.1458)
+ --cycle
+ (-0.1477,-0.1474)
+ .. controls (-0.1646,-0.1458) and (-0.1813,-0.1543) .. (-0.1847,-0.1659)
+ .. controls (-0.1889,-0.1806) and (-0.1612,-0.2953) .. (-0.1163,-0.2315)
+ -- (-0.0420,-0.4418)
+ .. controls (-0.0291,-0.4661) and (-0.0068,-0.4600) .. ( 0.0136,-0.4880)
+ .. controls ( 0.0294,-0.5097) and ( 0.0259,-0.5331) .. ( 0.0419,-0.5487)
+ .. controls ( 0.0694,-0.5755) and ( 0.1462,-0.5710) .. ( 0.1798,-0.6001)
+ -- ( 0.2188,-0.6436)
+ .. controls ( 0.2392,-0.6605) and ( 0.2566,-0.6577) .. ( 0.2804,-0.6838)
+ .. controls ( 0.3122,-0.7186) and ( 0.3037,-0.7586) .. ( 0.3603,-0.7592)
+ .. controls ( 0.3537,-0.7217) and ( 0.3358,-0.6781) .. ( 0.3603,-0.6427)
+ .. controls ( 0.3743,-0.6222) and ( 0.3978,-0.6232) .. ( 0.4032,-0.6039)
+ .. controls ( 0.4084,-0.5852) and ( 0.3901,-0.5654) .. ( 0.3712,-0.5741)
+ .. controls ( 0.3573,-0.5804) and ( 0.3558,-0.5936) .. ( 0.3518,-0.6044)
+ .. controls ( 0.3319,-0.6046) and ( 0.2996,-0.6092) .. ( 0.2842,-0.6044)
+ .. controls ( 0.2568,-0.5917) and ( 0.2515,-0.5648) .. ( 0.2231,-0.5501)
+ .. controls ( 0.1960,-0.5359) and ( 0.1632,-0.5421) .. ( 0.1413,-0.5292)
+ -- ( 0.0626,-0.4601)
+ .. controls ( 0.0525,-0.4430) and ( 0.0547,-0.4207) .. ( 0.0440,-0.4065)
+ .. controls ( 0.0320,-0.3906) and ( 0.0076,-0.3898) .. (-0.0104,-0.3714)
+ .. controls (-0.0515,-0.3289) and ( 0.0146,-0.2721) .. (-0.0737,-0.2358)
+ .. controls (-0.0903,-0.2290) and (-0.0917,-0.2313) .. (-0.1098,-0.2315)
+ -- (-0.1098,-0.1892)
+ .. controls (-0.1137,-0.1607) and (-0.1308,-0.1491) .. (-0.1477,-0.1474)
+ --cycle
+ (-0.7679,-0.1481)
+ .. controls (-0.8119,-0.1523) and (-0.8157,-0.2051) .. (-0.8303,-0.2401)
+ -- (-0.8453,-0.2740)
+ -- (-0.8299,-0.3015)
+ .. controls (-0.7861,-0.2968) and (-0.8116,-0.2403) .. (-0.7732,-0.2278)
+ .. controls (-0.7561,-0.2223) and (-0.7349,-0.2415) .. (-0.7204,-0.2497)
+ .. controls (-0.6711,-0.2774) and (-0.6473,-0.2864) .. (-0.6524,-0.3506)
+ -- (-0.6787,-0.3422)
+ .. controls (-0.6786,-0.3475) and (-0.6826,-0.3544) .. (-0.6787,-0.3655)
+ .. controls (-0.6635,-0.4244) and (-0.5943,-0.3658) .. (-0.5763,-0.3760)
+ .. controls (-0.5586,-0.3861) and (-0.5497,-0.4251) .. (-0.5357,-0.4418)
+ .. controls (-0.5118,-0.4701) and (-0.4694,-0.4662) .. (-0.4504,-0.5047)
+ .. controls (-0.4231,-0.5599) and (-0.4535,-0.6772) .. (-0.4451,-0.7421)
+ .. controls (-0.4389,-0.7901) and (-0.4023,-0.8005) .. (-0.3912,-0.8443)
+ .. controls (-0.3883,-0.8558) and (-0.3874,-0.8667) .. (-0.3869,-0.8774)
+ -- (-0.3386,-0.8778)
+ .. controls (-0.3371,-0.8645) and (-0.3342,-0.8523) .. (-0.3394,-0.8358)
+ .. controls (-0.3448,-0.8167) and (-0.3914,-0.7567) .. (-0.3962,-0.6996)
+ .. controls (-0.4039,-0.6074) and (-0.3294,-0.5871) .. (-0.3545,-0.4954)
+ -- (-0.3886,-0.5039)
+ -- (-0.4196,-0.4442)
+ -- (-0.4864,-0.4090)
+ -- (-0.5345,-0.3241)
+ -- (-0.6106,-0.2802)
+ -- (-0.6106,-0.1975)
+ .. controls (-0.6301,-0.2027) and (-0.6486,-0.2101) .. (-0.6694,-0.2022)
+ .. controls (-0.7004,-0.1904) and (-0.7133,-0.1559) .. (-0.7464,-0.1495)
+ .. controls (-0.7544,-0.1479) and (-0.7616,-0.1475) .. (-0.7679,-0.1481)
+ --cycle
+ ( 0.0029,-0.2060)
+ .. controls (-0.0139,-0.2731) and ( 0.0196,-0.2608) .. ( 0.0476,-0.3014)
+ .. controls ( 0.0682,-0.3314) and ( 0.0511,-0.3569) .. ( 0.0750,-0.3784)
+ .. controls ( 0.0974,-0.3988) and ( 0.1304,-0.3876) .. ( 0.1549,-0.4019)
+ .. controls ( 0.1795,-0.4164) and ( 0.1878,-0.4529) .. ( 0.1987,-0.4783)
+ .. controls ( 0.2461,-0.4539) and ( 0.2519,-0.4021) .. ( 0.2180,-0.3618)
+ .. controls ( 0.1964,-0.3362) and ( 0.1652,-0.3426) .. ( 0.1414,-0.3257)
+ .. controls ( 0.1198,-0.3103) and ( 0.1183,-0.2881) .. ( 0.1007,-0.2689)
+ .. controls ( 0.0838,-0.2504) and ( 0.0265,-0.2166) .. ( 0.0029,-0.2060)
+ --cycle
+ ( 0.2327,-0.2826)
+ .. controls ( 0.1961,-0.2955) and ( 0.1961,-0.3123) .. ( 0.2327,-0.3251)
+ --cycle
+ (-0.7548,-0.3137)
+ .. controls (-0.7774,-0.3164) and (-0.7890,-0.3323) .. (-0.7986,-0.3573)
+ -- (-0.7759,-0.3979)
+ .. controls (-0.7735,-0.3968) and (-0.7711,-0.3964) .. (-0.7688,-0.3946)
+ -- (-0.7205,-0.3166)
+ .. controls (-0.7341,-0.3135) and (-0.7454,-0.3126) .. (-0.7548,-0.3137)
+ --cycle
+ ( 0.4114,-0.3847)
+ .. controls ( 0.4216,-0.4136) and ( 0.4238,-0.4142) .. ( 0.4540,-0.4102)
+ -- ( 0.4540,-0.3932)
+ --cycle
+ ( 0.5395,-0.3997)
+ .. controls ( 0.5263,-0.3990) and ( 0.5044,-0.4032) .. ( 0.4625,-0.4018)
+ -- ( 0.4780,-0.4954)
+ .. controls ( 0.4757,-0.5287) and ( 0.4518,-0.5542) .. ( 0.4648,-0.5776)
+ .. controls ( 0.4852,-0.6142) and ( 0.5202,-0.5603) .. ( 0.5614,-0.5929)
+ .. controls ( 0.5752,-0.6038) and ( 0.6063,-0.6359) .. ( 0.6275,-0.6638)
+ -- ( 0.6570,-0.6132)
+ .. controls ( 0.6460,-0.6042) and ( 0.6347,-0.5954) .. ( 0.6268,-0.5865)
+ -- ( 0.5937,-0.5346)
+ .. controls ( 0.5648,-0.5023) and ( 0.5031,-0.4880) .. ( 0.5646,-0.4273)
+ .. controls ( 0.5574,-0.4062) and ( 0.5528,-0.4005) .. ( 0.5395,-0.3997)
+ --cycle
+ (-0.6609,-0.4273)
+ .. controls (-0.7027,-0.4247) and (-0.7300,-0.4414) .. (-0.7397,-0.4624)
+ -- (-0.7047,-0.5249)
+ .. controls (-0.7013,-0.5263) and (-0.6989,-0.5282) .. (-0.6950,-0.5294)
+ .. controls (-0.6935,-0.4878) and (-0.6933,-0.4806) .. (-0.6609,-0.4528)
+ --cycle
+ (-0.5689,-0.4528)
+ .. controls (-0.6368,-0.4677) and (-0.6352,-0.5020) .. (-0.6354,-0.5634)
+ -- (-0.5757,-0.6071)
+ -- (-0.5162,-0.6826)
+ .. controls (-0.5073,-0.6508) and (-0.5037,-0.6125) .. (-0.5241,-0.5838)
+ .. controls (-0.5384,-0.5639) and (-0.5622,-0.5584) .. (-0.5689,-0.5361)
+ .. controls (-0.5775,-0.5167) and (-0.5648,-0.4918) .. (-0.5689,-0.4528)
+ --cycle
+ (-0.6354,-0.5634)
+ .. controls (-0.6583,-0.5576) and (-0.6713,-0.5579) .. (-0.6839,-0.5619)
+ -- (-0.6487,-0.6248)
+ .. controls (-0.6395,-0.6053) and (-0.6326,-0.5852) .. (-0.6354,-0.5634)
+ --cycle
+ (-0.0056,-0.5890)
+ .. controls (-0.0554,-0.6155) and (-0.0426,-0.6370) .. (-0.0606,-0.6818)
+ -- (-0.1199,-0.7847)
+ .. controls (-0.1298,-0.8015) and (-0.1531,-0.8317) .. (-0.1499,-0.8510)
+ .. controls (-0.1482,-0.8615) and (-0.1397,-0.8702) .. (-0.1295,-0.8795)
+ -- (-0.0507,-0.8802)
+ .. controls (-0.0629,-0.8583) and (-0.0745,-0.8380) .. (-0.0742,-0.8358)
+ .. controls (-0.0792,-0.8239) and (-0.0776,-0.8135) .. (-0.0742,-0.8027)
+ .. controls (-0.0460,-0.7520) and ( 0.0016,-0.7834) .. ( 0.0277,-0.7780)
+ .. controls ( 0.0760,-0.7679) and ( 0.1284,-0.6914) .. ( 0.1207,-0.6405)
+ .. controls ( 0.1150,-0.6017) and ( 0.0841,-0.6082) .. ( 0.0711,-0.6267)
+ .. controls ( 0.0620,-0.6397) and ( 0.0556,-0.7141) .. ( 0.0539,-0.7336)
+ .. controls (-0.0413,-0.7085) and ( 0.0139,-0.6637) .. (-0.0056,-0.5890)
+ --cycle
+ ( 0.4284,-0.6571)
+ .. controls ( 0.4285,-0.7307) and ( 0.4284,-0.7652) .. ( 0.5135,-0.7336)
+ .. controls ( 0.5170,-0.7469) and ( 0.5220,-0.7585) .. ( 0.5179,-0.7726)
+ .. controls ( 0.5091,-0.8019) and ( 0.4473,-0.8546) .. ( 0.4851,-0.8847)
+ -- ( 0.4987,-0.8848)
+ -- ( 0.5768,-0.7509)
+ .. controls ( 0.5767,-0.7509) and ( 0.5767,-0.7507) .. ( 0.5767,-0.7507)
+ .. controls ( 0.5412,-0.6652) and ( 0.5083,-0.6726) .. ( 0.4284,-0.6571)
+ --cycle
+ (-0.2914,-0.6672)
+ .. controls (-0.2998,-0.6666) and (-0.3106,-0.6686) .. (-0.3250,-0.6743)
+ .. controls (-0.3545,-0.7128) and (-0.3081,-0.7358) .. (-0.2850,-0.7678)
+ .. controls (-0.2710,-0.7873) and (-0.2601,-0.8137) .. (-0.2351,-0.8216)
+ .. controls (-0.2083,-0.8301) and (-0.1916,-0.8105) .. (-0.1960,-0.7845)
+ .. controls (-0.2008,-0.7566) and (-0.2232,-0.7418) .. (-0.2396,-0.7216)
+ .. controls (-0.2612,-0.6950) and (-0.2660,-0.6690) .. (-0.2914,-0.6672)
+ --cycle
+ (-0.5641,-0.6998)
+ .. controls (-0.5850,-0.6984) and (-0.5808,-0.7367) .. (-0.5766,-0.7507)
+ .. controls (-0.5748,-0.7566) and (-0.5723,-0.7598) .. (-0.5702,-0.7648)
+ -- (-0.5492,-0.8022)
+ .. controls (-0.5310,-0.8247) and (-0.5120,-0.8367) .. (-0.5052,-0.8613)
+ .. controls (-0.5044,-0.8642) and (-0.5062,-0.8717) .. (-0.5063,-0.8763)
+ -- (-0.4585,-0.8767)
+ .. controls (-0.4596,-0.7984) and (-0.5013,-0.7963) .. (-0.5234,-0.7583)
+ .. controls (-0.5344,-0.7394) and (-0.5352,-0.7120) .. (-0.5535,-0.7030)
+ .. controls (-0.5576,-0.7010) and (-0.5611,-0.7000) .. (-0.5641,-0.6998)
+ --cycle
+ ( 0.1990,-0.7341)
+ .. controls ( 0.1094,-0.7768) and ( 0.2330,-0.8330) .. ( 0.2586,-0.8828)
+ -- ( 0.3183,-0.8833)
+ .. controls ( 0.3165,-0.8684) and ( 0.3066,-0.8565) .. ( 0.2991,-0.8428)
+ .. controls ( 0.2762,-0.8010) and ( 0.2508,-0.7418) .. ( 0.1990,-0.7341)
+ --cycle
+ ( 0.3603,-0.7592)
+ -- ( 0.3859,-0.8188)
+ .. controls ( 0.4178,-0.7853) and ( 0.4108,-0.7527) .. ( 0.3603,-0.7592)
+ --cycle
+ ( 0.4369,-0.8443)
+ .. controls ( 0.4147,-0.8480) and ( 0.3837,-0.8661) .. ( 0.3628,-0.8837)
+ -- ( 0.4240,-0.8842)
+ .. controls ( 0.4307,-0.8690) and ( 0.4358,-0.8541) .. ( 0.4369,-0.8443)
+ --cycle
+ (-0.3205,-0.8528)
+ -- (-0.3266,-0.8779)
+ -- (-0.2773,-0.8783)
+ .. controls (-0.2800,-0.8719) and (-0.2850,-0.8655) .. (-0.2963,-0.8600)
+ --cycle
+ ( 0.1093,-0.8568)
+ .. controls ( 0.0964,-0.8568) and ( 0.0834,-0.8587) .. ( 0.0710,-0.8600)
+ .. controls ( 0.0605,-0.8611) and ( 0.0403,-0.8617) .. ( 0.0312,-0.8664)
+ .. controls ( 0.0240,-0.8701) and ( 0.0203,-0.8751) .. ( 0.0184,-0.8808)
+ -- ( 0.1002,-0.8815)
+ -- ( 0.1050,-0.8698)
+ -- ( 0.1085,-0.8815)
+ -- ( 0.1641,-0.8820)
+ .. controls ( 0.1606,-0.8757) and ( 0.1553,-0.8698) .. ( 0.1463,-0.8649)
+ .. controls ( 0.1347,-0.8586) and ( 0.1221,-0.8568) .. ( 0.1093,-0.8568)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/rough.dtx b/macros/latex/contrib/wargame/source/hex/terrain/rough.dtx
new file mode 100644
index 0000000000..fe716add2f
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/rough.dtx
@@ -0,0 +1,1570 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/rough}
+% The style for rough hexes. The pattern is filled with a light
+% brown, and outlines are not drawn.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/rough/.style={
+ draw=none,
+ fill={rgb,100:red,79;green,68;blue,41}
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{hex/terrain/rough}
+% Roughs. Again, a bit long.
+%
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/rough/.pic={
+ \path[hex/terrain/rough,pic actions,draw=none]
+ (-0.2701, 0.8873)
+ .. controls (-0.2982, 0.8927) and (-0.3250, 0.8675) .. (-0.3296, 0.8537)
+ .. controls (-0.3363, 0.8337) and (-0.3058, 0.8263) .. (-0.2820, 0.8610)
+ .. controls (-0.2717, 0.8450) and (-0.2591, 0.8228) .. (-0.2441, 0.8112)
+ .. controls (-0.2057, 0.7817) and (-0.1394, 0.7709) .. (-0.1208, 0.8270)
+ -- (-0.2226, 0.8355)
+ .. controls (-0.2359, 0.8698) and (-0.2532, 0.8840) .. (-0.2701, 0.8873)
+ --cycle
+ (-0.1081, 0.8792)
+ .. controls (-0.1371, 0.8680) and (-0.1265, 0.8900) .. (-0.1377, 0.8610)
+ .. controls (-0.1121, 0.8691) and (-0.1163, 0.8536) .. (-0.1081, 0.8792)
+ --cycle
+ ( 0.1762, 0.8752)
+ -- ( 0.1761, 0.8710)
+ .. controls ( 0.1746, 0.8556) and ( 0.1707, 0.8704) .. ( 0.1822, 0.8575)
+ .. controls ( 0.1958, 0.8423) and ( 0.2514, 0.8065) .. ( 0.2435, 0.8694)
+ --cycle
+ ( 0.3216, 0.8740)
+ .. controls ( 0.3061, 0.8744) and ( 0.2932, 0.8668) .. ( 0.2896, 0.8414)
+ .. controls ( 0.2869, 0.8222) and ( 0.3049, 0.8110) .. ( 0.3122, 0.7930)
+ -- ( 0.3292, 0.7930)
+ -- ( 0.3377, 0.8440)
+ -- ( 0.3874, 0.8438)
+ -- ( 0.3702, 0.8584)
+ .. controls ( 0.3556, 0.8652) and ( 0.3372, 0.8736) .. ( 0.3216, 0.8740)
+ --cycle
+ ( 0.4696, 0.8697)
+ .. controls ( 0.4362, 0.8687) and ( 0.4116, 0.8113) .. ( 0.4594, 0.7865)
+ -- ( 0.4565, 0.8238)
+ -- ( 0.5034, 0.8485)
+ .. controls ( 0.4927, 0.8641) and ( 0.4807, 0.8700) .. ( 0.4696, 0.8697)
+ --cycle
+ (-0.0783, 0.8695)
+ -- (-0.0698, 0.8185)
+ -- (-0.0528, 0.8185)
+ .. controls (-0.0488, 0.8507) and (-0.0499, 0.8533) .. (-0.0783, 0.8695)
+ --cycle
+ ( 0.0321, 0.8695)
+ .. controls (-0.0074, 0.8534) and (-0.0195, 0.8453) .. (-0.0104, 0.8015)
+ .. controls ( 0.0252, 0.8183) and ( 0.0356, 0.8295) .. ( 0.0321, 0.8695)
+ --cycle
+ (-0.4155, 0.8596)
+ .. controls (-0.4417, 0.8307) and (-0.4165, 0.8213) .. (-0.4032, 0.8284)
+ .. controls (-0.3903, 0.8353) and (-0.3789, 0.8639) .. (-0.4155, 0.8596)
+ --cycle
+ (-0.4857, 0.8525)
+ .. controls (-0.4972, 0.8321) and (-0.5172, 0.8207) .. (-0.5389, 0.8116)
+ -- (-0.5595, 0.7763)
+ .. controls (-0.5377, 0.7748) and (-0.5144, 0.7944) .. (-0.4942, 0.8100)
+ -- (-0.4857, 0.7845)
+ .. controls (-0.4503, 0.8051) and (-0.4552, 0.8169) .. (-0.4688, 0.8525)
+ --cycle
+ ( 0.1002, 0.8511)
+ .. controls ( 0.0869, 0.8528) and ( 0.0769, 0.8478) .. ( 0.0696, 0.8260)
+ -- ( 0.1509, 0.8185)
+ -- ( 0.1509, 0.8355)
+ .. controls ( 0.1302, 0.8408) and ( 0.1135, 0.8493) .. ( 0.1002, 0.8511)
+ --cycle
+ ( 0.2485, 0.8268)
+ .. controls ( 0.2378, 0.8296) and ( 0.2250, 0.8213) .. ( 0.2103, 0.7930)
+ .. controls ( 0.2410, 0.7676) and ( 0.2451, 0.7555) .. ( 0.2867, 0.7591)
+ .. controls ( 0.2791, 0.7861) and ( 0.2665, 0.8220) .. ( 0.2485, 0.8268)
+ --cycle
+ (-0.3754, 0.8100)
+ -- (-0.3754, 0.7930)
+ -- (-0.3330, 0.7930)
+ -- (-0.3330, 0.8100)
+ --cycle
+ ( 0.5066, 0.8010)
+ -- ( 0.5131, 0.7667)
+ -- ( 0.5443, 0.7538)
+ -- ( 0.5566, 0.7611)
+ -- ( 0.5392, 0.7958)
+ --cycle
+ (-0.4008, 0.7930)
+ -- (-0.4348, 0.7591)
+ --cycle
+ ( 0.1509, 0.7930)
+ -- ( 0.1254, 0.7676)
+ .. controls ( 0.1432, 0.7361) and ( 0.1497, 0.7365) .. ( 0.1849, 0.7336)
+ .. controls ( 0.1820, 0.7688) and ( 0.1824, 0.7753) .. ( 0.1509, 0.7930)
+ --cycle
+ ( 0.0301, 0.7854)
+ .. controls ( 0.0240, 0.7861) and ( 0.0162, 0.7858) .. ( 0.0066, 0.7845)
+ -- ( 0.0490, 0.7421)
+ .. controls ( 0.0527, 0.7709) and ( 0.0486, 0.7831) .. ( 0.0301, 0.7854)
+ --cycle
+ (-0.2757, 0.7847)
+ .. controls (-0.2819, 0.7857) and (-0.2896, 0.7857) .. (-0.2990, 0.7845)
+ -- (-0.2820, 0.7411)
+ .. controls (-0.3010, 0.7423) and (-0.3576, 0.7485) .. (-0.3704, 0.7411)
+ .. controls (-0.3832, 0.7314) and (-0.3819, 0.7137) .. (-0.3644, 0.7089)
+ .. controls (-0.3522, 0.7029) and (-0.3199, 0.7069) .. (-0.3075, 0.7089)
+ .. controls (-0.2647, 0.7227) and (-0.2326, 0.7776) .. (-0.2757, 0.7847)
+ --cycle
+ ( 0.3631, 0.7676)
+ -- ( 0.3122, 0.7479)
+ .. controls ( 0.3064, 0.6995) and ( 0.3021, 0.7030) .. ( 0.3546, 0.7166)
+ .. controls ( 0.3550, 0.6777) and ( 0.3499, 0.6644) .. ( 0.3886, 0.6488)
+ .. controls ( 0.3854, 0.7398) and ( 0.3467, 0.6989) .. ( 0.3631, 0.7676)
+ --cycle
+ ( 0.5753, 0.7676)
+ .. controls ( 0.5837, 0.7354) and ( 0.5927, 0.7219) .. ( 0.6097, 0.7131)
+ -- ( 0.5796, 0.7669)
+ .. controls ( 0.5781, 0.7670) and ( 0.5768, 0.7674) .. ( 0.5753, 0.7676)
+ --cycle
+ (-0.5536, 0.7591)
+ -- (-0.5706, 0.7082)
+ -- (-0.5621, 0.6997)
+ -- (-0.5027, 0.6997)
+ .. controls (-0.5136, 0.7365) and (-0.5192, 0.7422) .. (-0.5536, 0.7591)
+ --cycle
+ (-0.1361, 0.7534)
+ .. controls (-0.1512, 0.7509) and (-0.1612, 0.7304) .. (-0.1462, 0.6912)
+ -- (-0.0953, 0.7082)
+ .. controls (-0.1007, 0.7406) and (-0.1210, 0.7560) .. (-0.1361, 0.7534)
+ --cycle
+ (-0.4655, 0.7519)
+ .. controls (-0.4811, 0.7476) and (-0.4887, 0.7146) .. (-0.4551, 0.6911)
+ .. controls (-0.4447, 0.6838) and (-0.4376, 0.6846) .. (-0.4263, 0.6827)
+ -- (-0.4362, 0.7201)
+ .. controls (-0.4440, 0.7466) and (-0.4562, 0.7544) .. (-0.4655, 0.7519)
+ --cycle
+ (-0.2311, 0.7421)
+ -- (-0.2480, 0.7082)
+ -- (-0.1971, 0.6827)
+ -- (-0.2141, 0.7421)
+ --cycle
+ ( 0.4819, 0.7421)
+ -- ( 0.5244, 0.7082)
+ -- ( 0.5329, 0.7166)
+ -- ( 0.5329, 0.7336)
+ --cycle
+ ( 0.4140, 0.7336)
+ .. controls ( 0.4091, 0.6951) and ( 0.4180, 0.6863) .. ( 0.4565, 0.6912)
+ --cycle
+ ( 0.1000, 0.7166)
+ .. controls ( 0.0969, 0.7064) and ( 0.0893, 0.6845) .. ( 0.0896, 0.6747)
+ .. controls ( 0.0911, 0.6142) and ( 0.1603, 0.6571) .. ( 0.1849, 0.6658)
+ -- ( 0.2260, 0.6725)
+ .. controls ( 0.2381, 0.6766) and ( 0.2515, 0.6891) .. ( 0.2429, 0.7019)
+ .. controls ( 0.2330, 0.7185) and ( 0.1897, 0.7058) .. ( 0.1756, 0.7019)
+ -- ( 0.1339, 0.6827)
+ --cycle
+ ( 0.0321, 0.7082)
+ -- (-0.0019, 0.6318)
+ .. controls ( 0.0528, 0.6362) and ( 0.0992, 0.6731) .. ( 0.0321, 0.7082)
+ --cycle
+ ( 0.5074, 0.6997)
+ .. controls ( 0.5090, 0.6563) and ( 0.5107, 0.6351) .. ( 0.5584, 0.6572)
+ --cycle
+ (-0.6116, 0.6867)
+ -- (-0.6413, 0.6359)
+ .. controls (-0.6321, 0.6229) and (-0.6158, 0.6171) .. (-0.6009, 0.6289)
+ .. controls (-0.5820, 0.6437) and (-0.5846, 0.6623) .. (-0.5876, 0.6827)
+ --cycle
+ (-0.3414, 0.6742)
+ .. controls (-0.3515, 0.6371) and (-0.3559, 0.6083) .. (-0.3075, 0.6148)
+ -- (-0.3245, 0.6742)
+ --cycle
+ (-0.5112, 0.6657)
+ -- (-0.5112, 0.6318)
+ -- (-0.4772, 0.6233)
+ -- (-0.5027, 0.5893)
+ -- (-0.5027, 0.5808)
+ -- (-0.4857, 0.5638)
+ .. controls (-0.4400, 0.6074) and (-0.4373, 0.6597) .. (-0.5112, 0.6657)
+ --cycle
+ (-0.2905, 0.6657)
+ .. controls (-0.2682, 0.6064) and (-0.2058, 0.5997) .. (-0.2141, 0.6657)
+ --cycle
+ (-0.0953, 0.6488)
+ -- (-0.1547, 0.6403)
+ -- (-0.1377, 0.5553)
+ -- (-0.1208, 0.5553)
+ .. controls (-0.0926, 0.5982) and (-0.0954, 0.5977) .. (-0.0953, 0.6488)
+ --cycle
+ ( 0.0915, 0.6403)
+ .. controls ( 0.0497, 0.6269) and ( 0.0505, 0.6133) .. ( 0.0490, 0.5723)
+ .. controls ( 0.0796, 0.5913) and ( 0.0822, 0.6066) .. ( 0.0915, 0.6403)
+ --cycle
+ ( 0.4310, 0.6403)
+ .. controls ( 0.4211, 0.6043) and ( 0.4125, 0.5931) .. ( 0.4480, 0.5723)
+ -- ( 0.4819, 0.6148)
+ -- ( 0.4819, 0.6318)
+ --cycle
+ ( 0.5838, 0.6403)
+ .. controls ( 0.5923, 0.5846) and ( 0.5925, 0.5918) .. ( 0.6362, 0.5668)
+ -- ( 0.6521, 0.5663)
+ -- ( 0.6615, 0.5890)
+ .. controls ( 0.6340, 0.6304) and ( 0.6328, 0.6347) .. ( 0.5838, 0.6403)
+ --cycle
+ ( 0.2018, 0.6233)
+ -- ( 0.2018, 0.5808)
+ -- ( 0.2358, 0.5808)
+ .. controls ( 0.2306, 0.6108) and ( 0.2301, 0.6119) .. ( 0.2018, 0.6233)
+ --cycle
+ ( 0.3200, 0.6175)
+ .. controls ( 0.3147, 0.6171) and ( 0.3095, 0.6162) .. ( 0.3037, 0.6159)
+ -- ( 0.3144, 0.5906)
+ .. controls ( 0.3494, 0.5385) and ( 0.3913, 0.6066) .. ( 0.3367, 0.6159)
+ .. controls ( 0.3306, 0.6176) and ( 0.3252, 0.6178) .. ( 0.3200, 0.6175)
+ --cycle
+ ( 0.1254, 0.6148)
+ -- ( 0.1169, 0.5553)
+ -- ( 0.1339, 0.5553)
+ -- ( 0.1594, 0.5808)
+ --cycle
+ (-0.0188, 0.6063)
+ .. controls (-0.0629, 0.5361) and (-0.0925, 0.5785) .. (-0.1038, 0.5044)
+ -- (-0.0528, 0.4875)
+ .. controls (-0.0307, 0.5232) and (-0.0275, 0.5285) .. ( 0.0151, 0.5299)
+ .. controls ( 0.0257, 0.5724) and ( 0.0206, 0.5860) .. (-0.0188, 0.6063)
+ --cycle
+ (-0.2820, 0.5893)
+ .. controls (-0.2753, 0.5073) and (-0.2107, 0.5185) .. (-0.1801, 0.5808)
+ --cycle
+ ( 0.5244, 0.5893)
+ .. controls ( 0.5408, 0.5621) and ( 0.5447, 0.5620) .. ( 0.5753, 0.5553)
+ .. controls ( 0.5625, 0.5873) and ( 0.5579, 0.5867) .. ( 0.5244, 0.5893)
+ --cycle
+ (-0.4023, 0.5839)
+ .. controls (-0.4095, 0.5826) and (-0.4161, 0.5794) .. (-0.4210, 0.5751)
+ .. controls (-0.4340, 0.5638) and (-0.4334, 0.5376) .. (-0.4348, 0.5214)
+ .. controls (-0.3835, 0.5433) and (-0.4044, 0.5361) .. (-0.3499, 0.5299)
+ .. controls (-0.3537, 0.5756) and (-0.3808, 0.5879) .. (-0.4023, 0.5839)
+ --cycle
+ (-0.6717, 0.5836)
+ -- (-0.7007, 0.5338)
+ .. controls (-0.6810, 0.5286) and (-0.6639, 0.5441) .. (-0.6717, 0.5836)
+ --cycle
+ (-0.5683, 0.5760)
+ .. controls (-0.5775, 0.5769) and (-0.5875, 0.5722) .. (-0.6045, 0.5638)
+ -- (-0.5876, 0.5214)
+ -- (-0.5367, 0.5553)
+ .. controls (-0.5506, 0.5688) and (-0.5590, 0.5752) .. (-0.5683, 0.5760)
+ --cycle
+ ( 0.2527, 0.5638)
+ -- ( 0.2782, 0.5129)
+ -- ( 0.2867, 0.5129)
+ -- ( 0.3037, 0.5299)
+ .. controls ( 0.2852, 0.5566) and ( 0.2848, 0.5585) .. ( 0.2527, 0.5638)
+ --cycle
+ ( 0.6946, 0.5616)
+ .. controls ( 0.6944, 0.5600) and ( 0.6921, 0.5548) .. ( 0.6787, 0.5413)
+ -- ( 0.6878, 0.5061)
+ .. controls ( 0.6794, 0.4976) and ( 0.6747, 0.5161) .. ( 0.6694, 0.5045)
+ -- ( 0.6262, 0.5469)
+ .. controls ( 0.6001, 0.4510) and ( 0.6708, 0.4762) .. ( 0.6776, 0.4804)
+ .. controls ( 0.6913, 0.4889) and ( 0.7003, 0.4848) .. ( 0.7078, 0.4982)
+ -- ( 0.7283, 0.4862)
+ -- ( 0.7151, 0.5087)
+ -- ( 0.6995, 0.5381)
+ .. controls ( 0.6915, 0.5505) and ( 0.6933, 0.5583) .. ( 0.6948, 0.5614)
+ --cycle
+ ( 0.1764, 0.5469)
+ .. controls ( 0.1765, 0.5023) and ( 0.1718, 0.4964) .. ( 0.2018, 0.4620)
+ -- ( 0.2443, 0.4790)
+ .. controls ( 0.2287, 0.5015) and ( 0.2286, 0.4995) .. ( 0.2018, 0.4960)
+ -- ( 0.1934, 0.5044)
+ -- ( 0.1934, 0.5469)
+ --cycle
+ ( 0.3971, 0.5384)
+ -- ( 0.4056, 0.5044)
+ -- ( 0.4649, 0.4875)
+ -- ( 0.4904, 0.5384)
+ -- ( 0.4395, 0.5214)
+ --cycle
+ ( 0.5668, 0.5384)
+ .. controls ( 0.5368, 0.5332) and ( 0.5357, 0.5327) .. ( 0.5244, 0.5044)
+ -- ( 0.5329, 0.4960)
+ -- ( 0.5668, 0.5044)
+ -- ( 0.5499, 0.4620)
+ .. controls ( 0.5250, 0.4718) and ( 0.5240, 0.4756) .. ( 0.5074, 0.4535)
+ -- ( 0.5584, 0.4280)
+ .. controls ( 0.6164, 0.4608) and ( 0.5800, 0.4918) .. ( 0.5668, 0.5384)
+ --cycle
+ ( 0.0770, 0.5310)
+ .. controls ( 0.0682, 0.5304) and ( 0.0588, 0.5222) .. ( 0.0538, 0.5053)
+ .. controls ( 0.0343, 0.4401) and ( 0.0794, 0.3794) .. ( 0.1169, 0.4450)
+ -- ( 0.0830, 0.4535)
+ .. controls ( 0.0904, 0.4711) and ( 0.1010, 0.4920) .. ( 0.0968, 0.5117)
+ .. controls ( 0.0941, 0.5249) and ( 0.0858, 0.5317) .. ( 0.0770, 0.5310)
+ --cycle
+ (-0.3075, 0.5299)
+ -- (-0.3414, 0.4790)
+ -- (-0.3330, 0.4705)
+ .. controls (-0.2926, 0.4813) and (-0.2724, 0.4931) .. (-0.3075, 0.5299)
+ --cycle
+ (-0.6105, 0.5210)
+ .. controls (-0.6292, 0.5286) and (-0.6359, 0.5102) .. (-0.6385, 0.4790)
+ -- (-0.5876, 0.5044)
+ .. controls (-0.5967, 0.5132) and (-0.6043, 0.5185) .. (-0.6105, 0.5210)
+ --cycle
+ (-0.6810, 0.5129)
+ .. controls (-0.6924, 0.5121) and (-0.7036, 0.5121) .. (-0.7147, 0.5086)
+ .. controls (-0.7151, 0.5085) and (-0.7153, 0.5083) .. (-0.7157, 0.5081)
+ -- (-0.7430, 0.4612)
+ .. controls (-0.7297, 0.4478) and (-0.7007, 0.4457) .. (-0.6860, 0.4801)
+ .. controls (-0.6815, 0.4906) and (-0.6819, 0.5019) .. (-0.6810, 0.5129)
+ --cycle
+ (-0.1462, 0.5129)
+ .. controls (-0.1949, 0.5129) and (-0.2098, 0.5207) .. (-0.2480, 0.4875)
+ -- (-0.2480, 0.4790)
+ -- (-0.2311, 0.4620)
+ -- (-0.1801, 0.4790)
+ -- (-0.1801, 0.4535)
+ -- (-0.1462, 0.4535)
+ --cycle
+ ( 0.0066, 0.5044)
+ -- (-0.0019, 0.4620)
+ .. controls (-0.0908, 0.4424) and (-0.0252, 0.3738) .. ( 0.0185, 0.4370)
+ .. controls ( 0.0238, 0.4448) and ( 0.0272, 0.4527) .. ( 0.0290, 0.4620)
+ .. controls ( 0.0322, 0.4784) and ( 0.0277, 0.4893) .. ( 0.0236, 0.5044)
+ --cycle
+ (-0.5118, 0.4944)
+ .. controls (-0.5315, 0.4962) and (-0.5506, 0.4944) .. (-0.5676, 0.4798)
+ .. controls (-0.5973, 0.4546) and (-0.5662, 0.4306) .. (-0.5676, 0.4033)
+ .. controls (-0.5682, 0.3806) and (-0.5896, 0.3679) .. (-0.5934, 0.3509)
+ .. controls (-0.6001, 0.3209) and (-0.5656, 0.2986) .. (-0.5452, 0.2838)
+ -- (-0.5621, 0.2498)
+ -- (-0.5282, 0.2498)
+ .. controls (-0.5165, 0.2920) and (-0.5111, 0.3040) .. (-0.5536, 0.3262)
+ .. controls (-0.5263, 0.3959) and (-0.5223, 0.3799) .. (-0.5452, 0.4535)
+ -- (-0.4857, 0.4705)
+ -- (-0.4518, 0.4535)
+ -- (-0.4518, 0.4875)
+ .. controls (-0.4715, 0.4873) and (-0.4920, 0.4926) .. (-0.5118, 0.4944)
+ --cycle
+ ( 0.3588, 0.4802)
+ .. controls ( 0.3533, 0.4806) and ( 0.3465, 0.4801) .. ( 0.3377, 0.4790)
+ -- ( 0.3801, 0.4365)
+ -- ( 0.3886, 0.4450)
+ .. controls ( 0.3795, 0.4694) and ( 0.3752, 0.4789) .. ( 0.3588, 0.4802)
+ --cycle
+ (-0.3923, 0.4620)
+ .. controls (-0.3995, 0.4156) and (-0.3752, 0.3562) .. (-0.3330, 0.3347)
+ -- (-0.3245, 0.3431)
+ -- (-0.3172, 0.4229)
+ -- (-0.3754, 0.4620)
+ --cycle
+ ( 0.1254, 0.4620)
+ .. controls ( 0.1311, 0.4303) and ( 0.1371, 0.3466) .. ( 0.1909, 0.3657)
+ .. controls ( 0.2082, 0.3718) and ( 0.2132, 0.3929) .. ( 0.2274, 0.4041)
+ .. controls ( 0.2376, 0.4123) and ( 0.2569, 0.4158) .. ( 0.2697, 0.4196)
+ .. controls ( 0.2404, 0.4707) and ( 0.2211, 0.4375) .. ( 0.1594, 0.4196)
+ --cycle
+ ( 0.6347, 0.4620)
+ .. controls ( 0.5865, 0.3970) and ( 0.5594, 0.4145) .. ( 0.5753, 0.3516)
+ .. controls ( 0.6248, 0.3639) and ( 0.6190, 0.3659) .. ( 0.6687, 0.3516)
+ .. controls ( 0.6624, 0.3942) and ( 0.6392, 0.4050) .. ( 0.6772, 0.4280)
+ --cycle
+ (-0.2735, 0.4535)
+ .. controls (-0.2776, 0.4212) and (-0.2764, 0.4187) .. (-0.2480, 0.4026)
+ -- (-0.2565, 0.4535)
+ --cycle
+ ( 0.4565, 0.4535)
+ -- ( 0.4395, 0.4365)
+ -- ( 0.4395, 0.4280)
+ -- ( 0.4565, 0.4111)
+ -- ( 0.4649, 0.4111)
+ -- ( 0.4819, 0.4280)
+ --cycle
+ ( 0.7558, 0.4524)
+ .. controls ( 0.7494, 0.4473) and ( 0.7430, 0.4394) .. ( 0.7366, 0.4280)
+ .. controls ( 0.7552, 0.4225) and ( 0.7653, 0.4183) .. ( 0.7753, 0.4176)
+ --cycle
+ (-0.4518, 0.4450)
+ -- (-0.4772, 0.4365)
+ -- (-0.4518, 0.4196)
+ --cycle
+ (-0.6423, 0.4300)
+ .. controls (-0.6532, 0.4307) and (-0.6637, 0.4304) .. (-0.6690, 0.4274)
+ .. controls (-0.6866, 0.4158) and (-0.6850, 0.3910) .. (-0.6630, 0.3848)
+ -- (-0.6130, 0.3848)
+ -- (-0.6130, 0.4274)
+ .. controls (-0.6201, 0.4279) and (-0.6314, 0.4294) .. (-0.6423, 0.4300)
+ --cycle
+ ( 0.7111, 0.4196)
+ -- ( 0.7451, 0.3771)
+ .. controls ( 0.7399, 0.4071) and ( 0.7394, 0.4082) .. ( 0.7111, 0.4196)
+ --cycle
+ (-0.7404, 0.4111)
+ -- (-0.7574, 0.3347)
+ -- (-0.7065, 0.3262)
+ -- (-0.7234, 0.4111)
+ --cycle
+ (-0.1547, 0.4111)
+ -- (-0.1462, 0.3601)
+ -- (-0.1038, 0.3856)
+ .. controls (-0.0885, 0.3562) and (-0.0864, 0.3520) .. (-0.0528, 0.3516)
+ -- (-0.0783, 0.4026)
+ --cycle
+ ( 0.3886, 0.4111)
+ .. controls ( 0.3213, 0.4055) and ( 0.3289, 0.3610) .. ( 0.3801, 0.3347)
+ --cycle
+ ( 0.3801, 0.3347)
+ -- ( 0.3801, 0.3262)
+ -- ( 0.3631, 0.3092)
+ -- ( 0.3801, 0.2753)
+ -- ( 0.3971, 0.2753)
+ .. controls ( 0.4050, 0.3067) and ( 0.4083, 0.3157) .. ( 0.3801, 0.3347)
+ --cycle
+ ( 0.5074, 0.4026)
+ -- ( 0.4565, 0.3516)
+ .. controls ( 0.4935, 0.3518) and ( 0.5571, 0.3505) .. ( 0.5074, 0.4026)
+ --cycle
+ (-0.4348, 0.3941)
+ -- (-0.4433, 0.3856)
+ -- (-0.4348, 0.3516)
+ -- (-0.4008, 0.3856)
+ --cycle
+ (-0.5112, 0.3856)
+ -- (-0.5027, 0.3347)
+ -- (-0.4518, 0.3856)
+ --cycle
+ ( 0.0405, 0.3856)
+ .. controls ( 0.0481, 0.3444) and ( 0.0444, 0.3224) .. ( 0.0830, 0.3007)
+ -- ( 0.1169, 0.3686)
+ --cycle
+ ( 0.2586, 0.3821)
+ .. controls ( 0.2327, 0.3759) and ( 0.2165, 0.3319) .. ( 0.2699, 0.3440)
+ -- ( 0.2952, 0.3516)
+ .. controls ( 0.2928, 0.3578) and ( 0.2924, 0.3646) .. ( 0.2856, 0.3722)
+ .. controls ( 0.2770, 0.3820) and ( 0.2672, 0.3842) .. ( 0.2586, 0.3821)
+ --cycle
+ (-0.2650, 0.3686)
+ .. controls (-0.2695, 0.3349) and (-0.2648, 0.3302) .. (-0.2311, 0.3347)
+ --cycle
+ ( 0.8037, 0.3670)
+ .. controls ( 0.7958, 0.3549) and ( 0.8002, 0.3405) .. ( 0.8215, 0.3262)
+ -- ( 0.8225, 0.3334)
+ --cycle
+ (-0.0104, 0.3601)
+ -- (-0.0273, 0.3007)
+ -- (-0.0698, 0.3007)
+ .. controls (-0.0385, 0.2465) and ( 0.0057, 0.2824) .. ( 0.0066, 0.3601)
+ --cycle
+ (-0.4348, 0.3431)
+ -- (-0.4348, 0.3007)
+ .. controls (-0.4123, 0.3163) and (-0.4143, 0.3163) .. (-0.4178, 0.3431)
+ --cycle
+ (-0.8185, 0.3317)
+ -- (-0.8365, 0.3007)
+ -- (-0.7998, 0.3007)
+ -- (-0.7998, 0.3177)
+ --cycle
+ ( 0.4649, 0.3315)
+ .. controls ( 0.4219, 0.3238) and ( 0.4094, 0.2904) .. ( 0.4395, 0.2583)
+ -- ( 0.4565, 0.2922)
+ -- ( 0.5414, 0.2922)
+ -- ( 0.5414, 0.3092)
+ .. controls ( 0.5190, 0.3194) and ( 0.4902, 0.3361) .. ( 0.4649, 0.3315)
+ --cycle
+ (-0.6388, 0.3309)
+ .. controls (-0.6527, 0.3328) and (-0.6597, 0.3256) .. (-0.6674, 0.3156)
+ -- (-0.6895, 0.2838)
+ .. controls (-0.6839, 0.2742) and (-0.6820, 0.2649) .. (-0.6700, 0.2597)
+ .. controls (-0.6290, 0.2418) and (-0.5917, 0.3244) .. (-0.6388, 0.3309)
+ --cycle
+ (-0.1462, 0.3262)
+ .. controls (-0.1623, 0.2693) and (-0.1610, 0.2418) .. (-0.0953, 0.2498)
+ -- (-0.1292, 0.3262)
+ --cycle
+ ( 0.2103, 0.3262)
+ -- ( 0.1849, 0.2753)
+ .. controls ( 0.2243, 0.2757) and ( 0.2321, 0.2881) .. ( 0.2273, 0.3262)
+ --cycle
+ ( 0.3292, 0.3262)
+ -- ( 0.2782, 0.2668)
+ -- ( 0.2782, 0.2498)
+ -- ( 0.3390, 0.2109)
+ .. controls ( 0.3506, 0.1937) and ( 0.3360, 0.1683) .. ( 0.3513, 0.1579)
+ .. controls ( 0.3686, 0.1461) and ( 0.4096, 0.1877) .. ( 0.3631, 0.2073)
+ -- ( 0.3801, 0.2243)
+ -- ( 0.3377, 0.2583)
+ -- ( 0.3546, 0.3007)
+ --cycle
+ ( 0.6941, 0.3262)
+ -- ( 0.6941, 0.2838)
+ -- ( 0.7111, 0.2838)
+ -- ( 0.7111, 0.3262)
+ --cycle
+ ( 0.7706, 0.3177)
+ -- ( 0.7366, 0.3092)
+ -- ( 0.7366, 0.2922)
+ -- ( 0.7451, 0.2838)
+ -- ( 0.7621, 0.2838)
+ --cycle
+ (-0.7913, 0.3092)
+ -- (-0.7828, 0.2583)
+ -- (-0.7658, 0.2583)
+ -- (-0.7574, 0.2668)
+ -- (-0.7743, 0.3092)
+ --cycle
+ ( 0.6093, 0.3092)
+ -- ( 0.5838, 0.2413)
+ -- ( 0.6093, 0.2668)
+ -- ( 0.6347, 0.2583)
+ -- ( 0.6432, 0.3092)
+ --cycle
+ (-0.3494, 0.3079)
+ .. controls (-0.4142, 0.2885) and (-0.3452, 0.2195) .. (-0.3258, 0.2842)
+ -- (-0.3258, 0.3079)
+ --cycle
+ ( 0.1084, 0.3007)
+ .. controls ( 0.1005, 0.2885) and ( 0.0956, 0.2764) .. ( 0.0807, 0.2708)
+ .. controls ( 0.0663, 0.2653) and ( 0.0431, 0.2752) .. ( 0.0335, 0.2617)
+ .. controls ( 0.0200, 0.2427) and ( 0.0540, 0.2322) .. ( 0.0660, 0.2298)
+ .. controls ( 0.1034, 0.2226) and ( 0.1204, 0.2407) .. ( 0.1509, 0.2583)
+ --cycle
+ (-0.2201, 0.2946)
+ .. controls (-0.2487, 0.2922) and (-0.2701, 0.2767) .. (-0.2990, 0.2583)
+ -- (-0.2565, 0.2073)
+ -- (-0.1886, 0.2922)
+ .. controls (-0.2003, 0.2947) and (-0.2106, 0.2954) .. (-0.2201, 0.2946)
+ --cycle
+ (-0.4772, 0.2583)
+ .. controls (-0.5022, 0.2481) and (-0.5267, 0.2367) .. (-0.5427, 0.2138)
+ .. controls (-0.5681, 0.1773) and (-0.5547, 0.1549) .. (-0.5112, 0.1575)
+ .. controls (-0.4976, 0.1584) and (-0.4899, 0.1613) .. (-0.4772, 0.1649)
+ -- (-0.4688, 0.1564)
+ -- (-0.4688, 0.1225)
+ -- (-0.4518, 0.1225)
+ .. controls (-0.4302, 0.1774) and (-0.4489, 0.1866) .. (-0.5027, 0.1988)
+ --cycle
+ (-0.4433, 0.2583)
+ -- (-0.4348, 0.2073)
+ -- (-0.4263, 0.2073)
+ -- (-0.4093, 0.2243)
+ -- (-0.4263, 0.2583)
+ --cycle
+ (-0.8446, 0.2512)
+ .. controls (-0.8626, 0.2459) and (-0.8672, 0.2066) .. (-0.8677, 0.1903)
+ .. controls (-0.8362, 0.1909) and (-0.8333, 0.1924) .. (-0.8168, 0.1649)
+ -- (-0.7913, 0.1734)
+ .. controls (-0.7979, 0.1888) and (-0.8118, 0.2347) .. (-0.8218, 0.2431)
+ .. controls (-0.8311, 0.2510) and (-0.8386, 0.2530) .. (-0.8446, 0.2512)
+ --cycle
+ (-0.6130, 0.2498)
+ -- (-0.6385, 0.1988)
+ .. controls (-0.5969, 0.2023) and (-0.5781, 0.2132) .. (-0.6130, 0.2498)
+ --cycle
+ ( 0.7209, 0.2469)
+ .. controls ( 0.7057, 0.2498) and ( 0.6918, 0.2452) .. ( 0.6875, 0.2241)
+ .. controls ( 0.6832, 0.1844) and ( 0.7333, 0.1800) .. ( 0.6875, 0.1309)
+ .. controls ( 0.6935, 0.1147) and ( 0.6966, 0.1050) .. ( 0.7123, 0.0936)
+ .. controls ( 0.7287, 0.0815) and ( 0.7996, 0.0650) .. ( 0.8166, 0.0782)
+ .. controls ( 0.8441, 0.0997) and ( 0.8443, 0.1468) .. ( 0.7875, 0.1564)
+ -- ( 0.8130, 0.1055)
+ -- ( 0.7706, 0.0970)
+ .. controls ( 0.7537, 0.1222) and ( 0.7493, 0.1200) .. ( 0.7196, 0.1225)
+ -- ( 0.7621, 0.2241)
+ .. controls ( 0.7526, 0.2335) and ( 0.7361, 0.2440) .. ( 0.7209, 0.2469)
+ --cycle
+ ( 0.5029, 0.2452)
+ .. controls ( 0.4837, 0.2409) and ( 0.4663, 0.2223) .. ( 0.4749, 0.2012)
+ .. controls ( 0.4861, 0.1737) and ( 0.5371, 0.1377) .. ( 0.5668, 0.1819)
+ .. controls ( 0.5276, 0.2081) and ( 0.5495, 0.2337) .. ( 0.5218, 0.2442)
+ .. controls ( 0.5159, 0.2464) and ( 0.5093, 0.2466) .. ( 0.5029, 0.2452)
+ --cycle
+ (-0.7065, 0.2328)
+ .. controls (-0.7174, 0.2318) and (-0.7287, 0.2323) .. (-0.7391, 0.2277)
+ .. controls (-0.7803, 0.2096) and (-0.7474, 0.1632) .. (-0.7171, 0.2086)
+ --cycle
+ (-0.0188, 0.2328)
+ .. controls (-0.0280, 0.2283) and (-0.0341, 0.2273) .. (-0.0430, 0.2197)
+ .. controls (-0.1097, 0.1629) and ( 0.0304, 0.1216) .. (-0.0010, 0.2037)
+ --cycle
+ ( 0.2612, 0.2328)
+ -- ( 0.1849, 0.2073)
+ .. controls ( 0.2210, 0.1548) and ( 0.2532, 0.1800) .. ( 0.2612, 0.2328)
+ --cycle
+ (-0.3330, 0.2243)
+ -- (-0.3958, 0.1938)
+ .. controls (-0.4203, 0.1689) and (-0.3928, 0.1505) .. (-0.4518, 0.0970)
+ -- (-0.4518, 0.0800)
+ .. controls (-0.4010, 0.0738) and (-0.3851, 0.1024) .. (-0.3754, 0.1479)
+ .. controls (-0.3297, 0.1544) and (-0.3165, 0.1646) .. (-0.2990, 0.2073)
+ --cycle
+ (-0.1971, 0.2243)
+ -- (-0.2056, 0.1479)
+ -- (-0.1462, 0.1394)
+ -- (-0.1462, 0.1564)
+ -- (-0.1801, 0.2243)
+ --cycle
+ ( 0.8384, 0.2243)
+ .. controls ( 0.8324, 0.1770) and ( 0.8519, 0.1318) .. ( 0.8979, 0.1140)
+ -- ( 0.9064, 0.1225)
+ .. controls ( 0.8952, 0.1805) and ( 0.8898, 0.1922) .. ( 0.8384, 0.2243)
+ --cycle
+ ( 0.0151, 0.2073)
+ -- ( 0.0151, 0.1903)
+ -- ( 0.0405, 0.1819)
+ -- ( 0.0405, 0.1479)
+ -- ( 0.0575, 0.1479)
+ -- ( 0.0575, 0.1564)
+ -- ( 0.0745, 0.1734)
+ .. controls ( 0.0548, 0.2031) and ( 0.0517, 0.2101) .. ( 0.0151, 0.2073)
+ --cycle
+ ( 0.6262, 0.2073)
+ -- ( 0.6347, 0.1734)
+ -- ( 0.6517, 0.1734)
+ -- ( 0.6602, 0.1819)
+ -- ( 0.6602, 0.1988)
+ --cycle
+ ( 0.7621, 0.2073)
+ -- ( 0.7621, 0.1649)
+ .. controls ( 0.7903, 0.1763) and ( 0.7908, 0.1774) .. ( 0.7960, 0.2073)
+ --cycle
+ (-0.8988, 0.1938)
+ -- (-0.9014, 0.1893)
+ .. controls (-0.9006, 0.1906) and (-0.8994, 0.1914) .. (-0.8988, 0.1930)
+ .. controls (-0.8987, 0.1933) and (-0.8989, 0.1936) .. (-0.8988, 0.1938)
+ --cycle
+ (-0.1292, 0.1903)
+ -- (-0.1292, 0.1479)
+ -- (-0.0953, 0.1819)
+ --cycle
+ ( 0.2952, 0.1903)
+ .. controls ( 0.2890, 0.1611) and ( 0.2867, 0.1567) .. ( 0.3122, 0.1394)
+ -- ( 0.3122, 0.1903)
+ --cycle
+ (-0.6895, 0.1819)
+ -- (-0.6895, 0.1479)
+ -- (-0.6640, 0.1564)
+ -- (-0.6640, 0.1734)
+ -- (-0.6725, 0.1819)
+ --cycle
+ ( 0.1480, 0.1735)
+ .. controls ( 0.1310, 0.1697) and ( 0.1252, 0.1423) .. ( 0.1594, 0.1225)
+ -- ( 0.1849, 0.1479)
+ .. controls ( 0.1726, 0.1694) and ( 0.1583, 0.1757) .. ( 0.1480, 0.1735)
+ --cycle
+ (-0.6300, 0.1734)
+ .. controls (-0.6429, 0.1238) and (-0.6284, 0.1142) .. (-0.5876, 0.0885)
+ -- (-0.6215, 0.0461)
+ -- (-0.6640, 0.0800)
+ .. controls (-0.6670, 0.0697) and (-0.6746, 0.0478) .. (-0.6743, 0.0381)
+ .. controls (-0.6736, 0.0066) and (-0.6456, 0.0044) .. (-0.6219, 0.0135)
+ .. controls (-0.5925, 0.0247) and (-0.5281, 0.0777) .. (-0.5319, 0.1120)
+ .. controls (-0.5350, 0.1399) and (-0.5677, 0.1315) .. (-0.5853, 0.1410)
+ .. controls (-0.5998, 0.1487) and (-0.6048, 0.1603) .. (-0.6130, 0.1734)
+ --cycle
+ (-0.6640, 0.0800)
+ .. controls (-0.6595, 0.1137) and (-0.6643, 0.1185) .. (-0.6980, 0.1140)
+ --cycle
+ (-0.2565, 0.1734)
+ -- (-0.3584, 0.1309)
+ -- (-0.3330, 0.0800)
+ -- (-0.2990, 0.1140)
+ .. controls (-0.2519, 0.1142) and (-0.2453, 0.1302) .. (-0.2565, 0.1734)
+ --cycle
+ ( 0.2271, 0.1407)
+ .. controls ( 0.1925, 0.1328) and ( 0.1533, 0.0767) .. ( 0.2190, 0.0890)
+ -- ( 0.2612, 0.0970)
+ .. controls ( 0.2604, 0.1073) and ( 0.2611, 0.1186) .. ( 0.2562, 0.1281)
+ .. controls ( 0.2497, 0.1405) and ( 0.2386, 0.1433) .. ( 0.2271, 0.1407)
+ --cycle
+ (-0.0698, 0.1394)
+ .. controls (-0.0981, 0.1280) and (-0.0986, 0.1270) .. (-0.1038, 0.0970)
+ -- (-0.0698, 0.0970)
+ --cycle
+ ( 0.3971, 0.1394)
+ -- ( 0.3971, 0.1225)
+ -- ( 0.4056, 0.1140)
+ -- ( 0.4395, 0.1225)
+ -- ( 0.4395, 0.1394)
+ --cycle
+ ( 0.6090, 0.1316)
+ .. controls ( 0.5968, 0.1320) and ( 0.5847, 0.1313) .. ( 0.5753, 0.1309)
+ .. controls ( 0.5937, 0.1034) and ( 0.6031, 0.1066) .. ( 0.6347, 0.1055)
+ .. controls ( 0.5863, 0.0654) and ( 0.5849, 0.0269) .. ( 0.6432,-0.0049)
+ -- ( 0.6262, 0.0461)
+ -- ( 0.6488, 0.0715)
+ .. controls ( 0.6828, 0.1212) and ( 0.6456, 0.1307) .. ( 0.6090, 0.1316)
+ --cycle
+ (-0.9354, 0.1309)
+ -- (-0.9422, 0.1193)
+ -- (-0.9356, 0.0800)
+ -- (-0.8847, 0.0970)
+ -- (-0.8847, 0.1309)
+ --cycle
+ (-0.8507, 0.1309)
+ .. controls (-0.8417, 0.0965) and (-0.8401, 0.0890) .. (-0.8083, 0.0715)
+ .. controls (-0.8126, 0.1087) and (-0.8139, 0.1187) .. (-0.8507, 0.1309)
+ --cycle
+ ( 0.1084, 0.1309)
+ -- ( 0.0575, 0.1225)
+ .. controls ( 0.0537, 0.0923) and ( 0.0510, 0.0922) .. ( 0.0236, 0.0800)
+ .. controls ( 0.0578, 0.0292) and ( 0.1015, 0.0713) .. ( 0.1084, 0.1309)
+ --cycle
+ ( 0.4819, 0.1309)
+ -- ( 0.5028, 0.0739)
+ -- ( 0.4819,-0.0049)
+ .. controls ( 0.4993,-0.0102) and ( 0.5299,-0.0233) .. ( 0.5472,-0.0163)
+ .. controls ( 0.5677,-0.0081) and ( 0.5663, 0.0195) .. ( 0.5644, 0.0376)
+ .. controls ( 0.5592, 0.0860) and ( 0.5308, 0.1235) .. ( 0.4819, 0.1309)
+ --cycle
+ ( 0.3461, 0.1140)
+ .. controls ( 0.3108, 0.0951) and ( 0.3082, 0.0849) .. ( 0.3037, 0.0461)
+ .. controls ( 0.3481, 0.0535) and ( 0.3552, 0.0713) .. ( 0.3461, 0.1140)
+ --cycle
+ (-0.4857, 0.0970)
+ .. controls (-0.5241, 0.0326) and (-0.4983, 0.0214) .. (-0.4348, 0.0206)
+ .. controls (-0.4420,-0.0343) and (-0.4036,-0.0413) .. (-0.3728,-0.0186)
+ .. controls (-0.3557,-0.0061) and (-0.3442, 0.0265) .. (-0.3330, 0.0461)
+ .. controls (-0.3807, 0.0916) and (-0.3834, 0.0423) .. (-0.3839, 0.0036)
+ --cycle
+ (-0.2480, 0.0970)
+ -- (-0.2480, 0.0800)
+ -- (-0.2056, 0.0800)
+ -- (-0.2056, 0.0970)
+ --cycle
+ (-0.1292, 0.0970)
+ -- (-0.1462, 0.0800)
+ -- (-0.1462, 0.0715)
+ -- (-0.1292, 0.0546)
+ -- (-0.1208, 0.0546)
+ -- (-0.1038, 0.0715)
+ --cycle
+ ( 0.3801, 0.0800)
+ -- ( 0.3801, 0.0206)
+ -- ( 0.3971, 0.0206)
+ -- ( 0.4056, 0.0291)
+ -- ( 0.4140, 0.0800)
+ --cycle
+ ( 0.4225, 0.0800)
+ .. controls ( 0.4316, 0.0456) and ( 0.4332, 0.0381) .. ( 0.4649, 0.0206)
+ .. controls ( 0.4618, 0.0591) and ( 0.4606, 0.0679) .. ( 0.4225, 0.0800)
+ --cycle
+ ( 0.8809, 0.0759)
+ .. controls ( 0.8722, 0.0759) and ( 0.8634, 0.0659) .. ( 0.8554, 0.0461)
+ -- ( 0.9064, 0.0461)
+ .. controls ( 0.8984, 0.0659) and ( 0.8897, 0.0759) .. ( 0.8809, 0.0759)
+ --cycle
+ ( 0.1413, 0.0752)
+ .. controls ( 0.1324, 0.0761) and ( 0.1215, 0.0749) .. ( 0.1084, 0.0715)
+ .. controls ( 0.1253, 0.0362) and ( 0.1326, 0.0290) .. ( 0.1679, 0.0121)
+ .. controls ( 0.1762, 0.0511) and ( 0.1679, 0.0726) .. ( 0.1413, 0.0752)
+ --cycle
+ (-0.7409, 0.0649)
+ .. controls (-0.7448, 0.0648) and (-0.7485, 0.0639) .. (-0.7518, 0.0618)
+ .. controls (-0.7690, 0.0508) and (-0.7544,-0.0147) .. (-0.7438,-0.0279)
+ .. controls (-0.7341,-0.0398) and (-0.7273,-0.0409) .. (-0.7149,-0.0473)
+ -- (-0.7065, 0.0546)
+ .. controls (-0.7159, 0.0583) and (-0.7292, 0.0653) .. (-0.7409, 0.0649)
+ --cycle
+ ( 0.9762, 0.0591)
+ -- ( 0.9564, 0.0203)
+ .. controls ( 0.9517,-0.0013) and ( 0.9637,-0.0270) .. ( 0.9761,-0.0510)
+ -- ( 0.9997,-0.0105)
+ .. controls ( 1.0000,-0.0010) and ( 1.0000, 0.0075) .. ( 0.9998, 0.0171)
+ --cycle
+ (-0.1717, 0.0546)
+ .. controls (-0.2038, 0.0492) and (-0.2042, 0.0472) .. (-0.2226, 0.0206)
+ -- (-0.1717, 0.0206)
+ --cycle
+ ( 0.7281, 0.0546)
+ -- ( 0.6687, 0.0461)
+ -- ( 0.6687, 0.0291)
+ .. controls ( 0.7027, 0.0233) and ( 0.7100, 0.0245) .. ( 0.7281, 0.0546)
+ --cycle
+ (-0.9726, 0.0477)
+ .. controls (-0.9758, 0.0477) and (-0.9806, 0.0473) .. (-0.9843, 0.0471)
+ -- (-1.0000, 0.0201)
+ -- (-0.9912, 0.0044)
+ -- (-0.9696, 0.0206)
+ -- (-0.9448,-0.0784)
+ -- (-0.9432,-0.0812)
+ -- (-0.8422,-0.0728)
+ -- (-0.8677,-0.0982)
+ -- (-0.8677,-0.1322)
+ .. controls (-0.8159,-0.1280) and (-0.7904,-0.1016) .. (-0.8308,-0.0569)
+ .. controls (-0.8618,-0.0226) and (-0.8917,-0.0142) .. (-0.9356,-0.0049)
+ .. controls (-0.9393, 0.0402) and (-0.9477, 0.0479) .. (-0.9726, 0.0477)
+ --cycle
+ (-0.0273, 0.0430)
+ .. controls (-0.1037, 0.0283) and (-0.0659,-0.0617) .. (-0.0043, 0.0049)
+ .. controls ( 0.0066, 0.0167) and ( 0.0086, 0.0240) .. ( 0.0151, 0.0376)
+ .. controls ( 0.0001, 0.0416) and (-0.0110, 0.0461) .. (-0.0273, 0.0430)
+ --cycle
+ ( 0.2361, 0.0409)
+ .. controls ( 0.2189, 0.0454) and ( 0.2022, 0.0366) .. ( 0.2018, 0.0036)
+ .. controls ( 0.2379, 0.0017) and ( 0.2409,-0.0057) .. ( 0.2527,-0.0388)
+ .. controls ( 0.2946,-0.0103) and ( 0.2647, 0.0336) .. ( 0.2361, 0.0409)
+ --cycle
+ (-0.2852, 0.0389)
+ .. controls (-0.3005, 0.0379) and (-0.3023, 0.0289) .. (-0.2990, 0.0036)
+ -- (-0.2650, 0.0376)
+ .. controls (-0.2735, 0.0387) and (-0.2801, 0.0393) .. (-0.2852, 0.0389)
+ --cycle
+ ( 0.3037, 0.0291)
+ .. controls ( 0.3231,-0.0055) and ( 0.3338,-0.0035) .. ( 0.3716,-0.0049)
+ .. controls ( 0.3519, 0.0279) and ( 0.3402, 0.0269) .. ( 0.3037, 0.0291)
+ --cycle
+ (-0.8206, 0.0192)
+ .. controls (-0.8430,-0.0126) and (-0.8179,-0.0291) .. (-0.8045,-0.0204)
+ .. controls (-0.7923,-0.0127) and (-0.7854, 0.0239) .. (-0.8206, 0.0192)
+ --cycle
+ (-0.1371, 0.0134)
+ .. controls (-0.1438, 0.0114) and (-0.1493, 0.0019) .. (-0.1547,-0.0134)
+ -- (-0.1123,-0.0049)
+ .. controls (-0.1224, 0.0099) and (-0.1303, 0.0154) .. (-0.1371, 0.0134)
+ --cycle
+ ( 0.7536, 0.0121)
+ -- ( 0.7111, 0.0036)
+ -- ( 0.7111,-0.0304)
+ .. controls ( 0.7469,-0.0274) and ( 0.7588,-0.0268) .. ( 0.7536, 0.0121)
+ --cycle
+ ( 0.0750, 0.0106)
+ .. controls ( 0.0661, 0.0093) and ( 0.0570, 0.0067) .. ( 0.0490, 0.0036)
+ .. controls ( 0.0651,-0.0248) and ( 0.0680,-0.0250) .. ( 0.1000,-0.0304)
+ .. controls ( 0.0590,-0.0732) and ( 0.0241,-0.0913) .. ( 0.0745,-0.1492)
+ .. controls ( 0.1110,-0.1331) and ( 0.1272,-0.1362) .. ( 0.1424,-0.0982)
+ -- ( 0.1339,-0.0897)
+ -- ( 0.1000,-0.0982)
+ .. controls ( 0.1057,-0.0835) and ( 0.1261,-0.0416) .. ( 0.1266,-0.0304)
+ .. controls ( 0.1284, 0.0069) and ( 0.1019, 0.0144) .. ( 0.0750, 0.0106)
+ --cycle
+ (-0.2311, 0.0036)
+ -- (-0.2311,-0.0049)
+ -- (-0.2480,-0.0219)
+ .. controls (-0.2373,-0.0386) and (-0.2259,-0.0581) .. (-0.2054,-0.0643)
+ .. controls (-0.1781,-0.0725) and (-0.1665,-0.0457) .. (-0.1984,-0.0158)
+ .. controls (-0.2100,-0.0050) and (-0.2177,-0.0027) .. (-0.2311, 0.0036)
+ --cycle
+ ( 0.8469, 0.0036)
+ .. controls ( 0.8030,-0.0174) and ( 0.7970,-0.0343) .. ( 0.7706,-0.0728)
+ .. controls ( 0.7934,-0.1060) and ( 0.7994,-0.1083) .. ( 0.8384,-0.0982)
+ -- ( 0.8384,-0.0813)
+ -- ( 0.8130,-0.0728)
+ -- ( 0.8130,-0.0558)
+ .. controls ( 0.8448,-0.0370) and ( 0.8501,-0.0340) .. ( 0.8469, 0.0036)
+ --cycle
+ (-0.4603,-0.0049)
+ .. controls (-0.4831,-0.0157) and (-0.5088,-0.0301) .. (-0.5182,-0.0557)
+ .. controls (-0.5278,-0.0816) and (-0.5057,-0.0969) .. (-0.4907,-0.0883)
+ .. controls (-0.4763,-0.0802) and (-0.4829,-0.0617) .. (-0.4518,-0.0304)
+ -- (-0.4518,-0.0134)
+ --cycle
+ ( 0.4264,-0.0112)
+ .. controls ( 0.3999,-0.0108) and ( 0.3834,-0.0280) .. ( 0.4056,-0.0728)
+ -- ( 0.4565,-0.0558)
+ -- ( 0.4649,-0.1237)
+ -- ( 0.4819,-0.1237)
+ -- ( 0.5074,-0.0558)
+ .. controls ( 0.4895,-0.0297) and ( 0.4529,-0.0116) .. ( 0.4264,-0.0112)
+ --cycle
+ (-0.5706,-0.0134)
+ -- (-0.6045,-0.0388)
+ .. controls (-0.6509,-0.0147) and (-0.6809,-0.0236) .. (-0.6725,-0.0813)
+ -- (-0.6980,-0.0897)
+ .. controls (-0.6821,-0.1195) and (-0.6788,-0.1210) .. (-0.6470,-0.1322)
+ .. controls (-0.6222,-0.0713) and (-0.6544,-0.0848) .. (-0.6130,-0.0473)
+ .. controls (-0.5953,-0.0788) and (-0.5888,-0.0784) .. (-0.5536,-0.0813)
+ --cycle
+ ( 0.1679,-0.0219)
+ .. controls ( 0.1573,-0.0941) and ( 0.2349,-0.1063) .. ( 0.2526,-0.0847)
+ .. controls ( 0.2609,-0.0744) and ( 0.2602,-0.0596) .. ( 0.2612,-0.0473)
+ --cycle
+ (-0.3112,-0.0274)
+ .. controls (-0.3586,-0.0281) and (-0.4163,-0.0558) .. (-0.4212,-0.0609)
+ .. controls (-0.4295,-0.0692) and (-0.4319,-0.0787) .. (-0.4327,-0.0899)
+ -- (-0.4327,-0.1492)
+ -- (-0.4327,-0.2086)
+ .. controls (-0.3777,-0.1999) and (-0.3244,-0.1312) .. (-0.4008,-0.1067)
+ -- (-0.3823,-0.0879)
+ .. controls (-0.3347,-0.0526) and (-0.3277,-0.1099) .. (-0.2903,-0.1163)
+ .. controls (-0.2612,-0.1213) and (-0.2444,-0.0914) .. (-0.2507,-0.0659)
+ .. controls (-0.2581,-0.0362) and (-0.2828,-0.0269) .. (-0.3112,-0.0274)
+ --cycle
+ ( 0.9234,-0.0304)
+ -- ( 0.9149,-0.0643)
+ -- ( 0.9488,-0.0558)
+ -- ( 0.9488,-0.0388)
+ -- ( 0.9403,-0.0304)
+ --cycle
+ ( 0.6406,-0.0369)
+ .. controls ( 0.6333,-0.0375) and ( 0.6251,-0.0419) .. ( 0.6177,-0.0522)
+ .. controls ( 0.6105,-0.0620) and ( 0.6112,-0.0704) .. ( 0.6093,-0.0799)
+ -- ( 0.6342,-0.0799)
+ .. controls ( 0.6760,-0.0673) and ( 0.6625,-0.0350) .. ( 0.6406,-0.0369)
+ --cycle
+ (-0.0016,-0.0449)
+ .. controls (-0.0461,-0.0548) and (-0.0410,-0.0663) .. (-0.0297,-0.1043)
+ .. controls (-0.0250,-0.1199) and (-0.0232,-0.1440) .. (-0.0016,-0.1422)
+ .. controls ( 0.0349,-0.1392) and ( 0.0554,-0.0537) .. (-0.0016,-0.0449)
+ --cycle
+ (-0.1123,-0.0473)
+ -- (-0.1208,-0.1067)
+ .. controls (-0.0719,-0.1062) and (-0.0661,-0.0635) .. (-0.1123,-0.0473)
+ --cycle
+ ( 0.3037,-0.0473)
+ .. controls ( 0.3198,-0.0756) and ( 0.3223,-0.0769) .. ( 0.3546,-0.0728)
+ .. controls ( 0.3383,-0.0447) and ( 0.3358,-0.0446) .. ( 0.3037,-0.0473)
+ --cycle
+ ( 0.5329,-0.0473)
+ .. controls ( 0.5004,-0.0966) and ( 0.4981,-0.1266) .. ( 0.5668,-0.1322)
+ -- ( 0.5499,-0.0473)
+ --cycle
+ (-0.1632,-0.0728)
+ -- (-0.1462,-0.1067)
+ -- (-0.1462,-0.0728)
+ --cycle
+ ( 0.7090,-0.0817)
+ .. controls ( 0.6987,-0.0843) and ( 0.6911,-0.0952) .. ( 0.6894,-0.1068)
+ .. controls ( 0.6863,-0.1276) and ( 0.7043,-0.1387) .. ( 0.7111,-0.1831)
+ .. controls ( 0.7499,-0.1786) and ( 0.7602,-0.1760) .. ( 0.7791,-0.1407)
+ -- ( 0.7196,-0.1322)
+ -- ( 0.7451,-0.1068)
+ .. controls ( 0.7324,-0.0850) and ( 0.7193,-0.0791) .. ( 0.7090,-0.0817)
+ --cycle
+ ( 0.9485,-0.0984)
+ .. controls ( 0.9284,-0.1094) and ( 0.8781,-0.1542) .. ( 0.8706,-0.1754)
+ .. controls ( 0.8655,-0.1897) and ( 0.8704,-0.2051) .. ( 0.8817,-0.2131)
+ --cycle
+ (-0.9323,-0.1007)
+ -- (-0.9101,-0.1405)
+ .. controls (-0.9101,-0.1287) and (-0.9146,-0.1173) .. (-0.9187,-0.1067)
+ --cycle
+ (-0.0528,-0.1067)
+ .. controls (-0.0616,-0.1167) and (-0.0681,-0.1217) .. (-0.0735,-0.1348)
+ .. controls (-0.0802,-0.1513) and (-0.0835,-0.2032) .. (-0.0603,-0.2082)
+ .. controls (-0.0462,-0.2108) and (-0.0167,-0.1971) .. (-0.0603,-0.1577)
+ .. controls (-0.0459,-0.1339) and (-0.0396,-0.1326) .. (-0.0528,-0.1067)
+ --cycle
+ (-0.4876,-0.1114)
+ .. controls (-0.4992,-0.1127) and (-0.5150,-0.1170) .. (-0.5367,-0.1237)
+ -- (-0.5367,-0.1577)
+ -- (-0.4433,-0.1916)
+ .. controls (-0.4544,-0.1299) and (-0.4526,-0.1074) .. (-0.4876,-0.1114)
+ --cycle
+ (-0.7635,-0.1120)
+ .. controls (-0.7788,-0.1114) and (-0.7890,-0.1295) .. (-0.7913,-0.1577)
+ -- (-0.7574,-0.1577)
+ .. controls (-0.7442,-0.2093) and (-0.7301,-0.2080) .. (-0.6810,-0.2086)
+ -- (-0.6810,-0.1746)
+ -- (-0.7149,-0.1916)
+ .. controls (-0.7175,-0.1714) and (-0.7177,-0.1520) .. (-0.7311,-0.1350)
+ .. controls (-0.7433,-0.1194) and (-0.7544,-0.1124) .. (-0.7635,-0.1120)
+ --cycle
+ (-0.2082,-0.1145)
+ .. controls (-0.2215,-0.1126) and (-0.2378,-0.1199) .. (-0.2495,-0.1410)
+ .. controls (-0.2530,-0.1510) and (-0.2546,-0.1612) .. (-0.2495,-0.1721)
+ .. controls (-0.2475,-0.1840) and (-0.2388,-0.1913) .. (-0.2311,-0.2001)
+ .. controls (-0.2202,-0.1931) and (-0.2111,-0.1884) .. (-0.2020,-0.1785)
+ .. controls (-0.1722,-0.1464) and (-0.1860,-0.1177) .. (-0.2082,-0.1145)
+ --cycle
+ ( 0.4225,-0.1152)
+ -- ( 0.3631,-0.1492)
+ -- ( 0.3801,-0.1831)
+ .. controls ( 0.4160,-0.1656) and ( 0.4276,-0.1565) .. ( 0.4225,-0.1152)
+ --cycle
+ (-0.5925,-0.1174)
+ .. controls (-0.6021,-0.1151) and (-0.6144,-0.1208) .. (-0.6203,-0.1336)
+ .. controls (-0.6283,-0.1508) and (-0.6192,-0.1674) .. (-0.6130,-0.1831)
+ -- (-0.5961,-0.1831)
+ .. controls (-0.5903,-0.1723) and (-0.5831,-0.1615) .. (-0.5803,-0.1494)
+ .. controls (-0.5758,-0.1301) and (-0.5828,-0.1197) .. (-0.5925,-0.1174)
+ --cycle
+ ( 0.2952,-0.1237)
+ -- ( 0.3292,-0.1746)
+ -- ( 0.3377,-0.1746)
+ -- ( 0.3546,-0.1577)
+ .. controls ( 0.3339,-0.1275) and ( 0.3315,-0.1266) .. ( 0.2952,-0.1237)
+ --cycle
+ ( 0.1832,-0.1240)
+ .. controls ( 0.1608,-0.1263) and ( 0.1298,-0.1544) .. ( 0.1254,-0.2086)
+ .. controls ( 0.1747,-0.2011) and ( 0.2191,-0.1503) .. ( 0.2015,-0.1301)
+ .. controls ( 0.1972,-0.1252) and ( 0.1907,-0.1232) .. ( 0.1832,-0.1240)
+ --cycle
+ (-0.3330,-0.1407)
+ .. controls (-0.3325,-0.1552) and (-0.3330,-0.1683) .. (-0.3280,-0.1824)
+ .. controls (-0.3221,-0.1993) and (-0.2907,-0.2626) .. (-0.2674,-0.2496)
+ .. controls (-0.2290,-0.2283) and (-0.2939,-0.1556) .. (-0.3330,-0.1407)
+ --cycle
+ (-0.8677,-0.1492)
+ .. controls (-0.8906,-0.2074) and (-0.8704,-0.2079) .. (-0.8168,-0.2086)
+ -- (-0.8168,-0.2341)
+ -- (-0.7828,-0.2341)
+ .. controls (-0.7876,-0.1754) and (-0.8159,-0.1679) .. (-0.8677,-0.1492)
+ --cycle
+ ( 0.6507,-0.1523)
+ .. controls ( 0.6150,-0.1514) and ( 0.5790,-0.1648) .. ( 0.5634,-0.2019)
+ .. controls ( 0.5467,-0.2418) and ( 0.5701,-0.2915) .. ( 0.6347,-0.2595)
+ -- ( 0.5923,-0.2426)
+ .. controls ( 0.6167,-0.1901) and ( 0.6349,-0.1909) .. ( 0.6857,-0.1746)
+ -- ( 0.6857,-0.1577)
+ .. controls ( 0.6745,-0.1545) and ( 0.6627,-0.1526) .. ( 0.6507,-0.1523)
+ --cycle
+ ( 0.4992,-0.1530)
+ .. controls ( 0.4893,-0.1544) and ( 0.4788,-0.1613) .. ( 0.4723,-0.1757)
+ .. controls ( 0.4601,-0.2024) and ( 0.4716,-0.2265) .. ( 0.4819,-0.2510)
+ -- ( 0.4310,-0.2510)
+ .. controls ( 0.4659,-0.3129) and ( 0.5002,-0.2692) .. ( 0.5329,-0.2341)
+ .. controls ( 0.5195,-0.1890) and ( 0.5320,-0.1766) .. ( 0.5232,-0.1628)
+ .. controls ( 0.5186,-0.1555) and ( 0.5091,-0.1515) .. ( 0.4992,-0.1530)
+ --cycle
+ (-0.1462,-0.1577)
+ -- (-0.1462,-0.2001)
+ -- (-0.1292,-0.2001)
+ -- (-0.1292,-0.1577)
+ --cycle
+ ( 0.0490,-0.1577)
+ -- ( 0.0066,-0.1831)
+ -- ( 0.0066,-0.2001)
+ .. controls ( 0.0224,-0.2077) and ( 0.0639,-0.2307) .. ( 0.0802,-0.2267)
+ .. controls ( 0.1236,-0.2159) and ( 0.0615,-0.1657) .. ( 0.0490,-0.1577)
+ --cycle
+ ( 0.2527,-0.1577)
+ -- ( 0.2358,-0.1746)
+ -- ( 0.2273,-0.1746)
+ -- ( 0.2273,-0.1916)
+ .. controls ( 0.2817,-0.2389) and ( 0.2612,-0.2548) .. ( 0.3207,-0.2595)
+ -- ( 0.2952,-0.2341)
+ .. controls ( 0.2952,-0.1946) and ( 0.2813,-0.1829) .. ( 0.2527,-0.1577)
+ --cycle
+ ( 0.4124,-0.1906)
+ .. controls ( 0.3901,-0.1934) and ( 0.3801,-0.2077) .. ( 0.3631,-0.2341)
+ .. controls ( 0.4031,-0.2391) and ( 0.4075,-0.2303) .. ( 0.4395,-0.2086)
+ -- ( 0.4395,-0.1916)
+ .. controls ( 0.4286,-0.1900) and ( 0.4198,-0.1897) .. ( 0.4124,-0.1906)
+ --cycle
+ (-0.5282,-0.1916)
+ -- (-0.5536,-0.2001)
+ -- (-0.5282,-0.2171)
+ --cycle
+ (-0.6045,-0.2001)
+ .. controls (-0.6700,-0.2056) and (-0.6485,-0.2287) .. (-0.6330,-0.2741)
+ .. controls (-0.6243,-0.2991) and (-0.6268,-0.3013) .. (-0.6130,-0.3274)
+ .. controls (-0.5769,-0.3048) and (-0.5602,-0.2946) .. (-0.5536,-0.2510)
+ -- (-0.6045,-0.2510)
+ --cycle
+ (-0.3584,-0.2086)
+ .. controls (-0.3921,-0.2259) and (-0.3939,-0.2318) .. (-0.4008,-0.2680)
+ .. controls (-0.4235,-0.2397) and (-0.4237,-0.2318) .. (-0.4603,-0.2256)
+ -- (-0.4603,-0.2850)
+ .. controls (-0.4267,-0.2892) and (-0.3194,-0.3199) .. (-0.3429,-0.2424)
+ --cycle
+ ( 0.7960,-0.2086)
+ -- ( 0.8384,-0.2510)
+ .. controls ( 0.8428,-0.2169) and ( 0.8301,-0.2042) .. ( 0.7960,-0.2086)
+ --cycle
+ ( 0.1928,-0.2162)
+ .. controls ( 0.1816,-0.2174) and ( 0.1689,-0.2258) .. ( 0.1598,-0.2322)
+ .. controls ( 0.1191,-0.2606) and ( 0.1214,-0.2831) .. ( 0.1339,-0.3274)
+ -- ( 0.1509,-0.3274)
+ .. controls ( 0.1561,-0.3114) and ( 0.1614,-0.2848) .. ( 0.1729,-0.2730)
+ .. controls ( 0.1867,-0.2591) and ( 0.2098,-0.2594) .. ( 0.2174,-0.2461)
+ .. controls ( 0.2253,-0.2321) and ( 0.2130,-0.2142) .. ( 0.1928,-0.2162)
+ --cycle
+ (-0.1905,-0.2188)
+ .. controls (-0.1970,-0.2195) and (-0.2037,-0.2233) .. (-0.2087,-0.2284)
+ .. controls (-0.2248,-0.2451) and (-0.2297,-0.2881) .. (-0.2311,-0.3104)
+ -- (-0.1801,-0.3104)
+ .. controls (-0.1960,-0.2531) and (-0.1611,-0.2530) .. (-0.1738,-0.2284)
+ .. controls (-0.1778,-0.2206) and (-0.1840,-0.2181) .. (-0.1905,-0.2188)
+ --cycle
+ (-0.5112,-0.2256)
+ -- (-0.5112,-0.2595)
+ -- (-0.4772,-0.2595)
+ -- (-0.4772,-0.2256)
+ --cycle
+ ( 0.7451,-0.2256)
+ -- ( 0.6687,-0.2341)
+ -- ( 0.6602,-0.2426)
+ .. controls ( 0.6862,-0.3159) and ( 0.7361,-0.2848) .. ( 0.7451,-0.2256)
+ --cycle
+ (-0.8578,-0.2336)
+ -- (-0.8203,-0.3006)
+ .. controls (-0.7747,-0.3108) and (-0.8112,-0.2349) .. (-0.8578,-0.2336)
+ --cycle
+ (-0.0280,-0.2369)
+ .. controls (-0.0529,-0.2386) and (-0.0646,-0.2625) .. (-0.0273,-0.3019)
+ -- ( 0.0236,-0.2595)
+ .. controls ( 0.0068,-0.2430) and (-0.0130,-0.2359) .. (-0.0280,-0.2369)
+ --cycle
+ (-0.7234,-0.2510)
+ .. controls (-0.7141,-0.2750) and (-0.7050,-0.2842) .. (-0.6810,-0.2935)
+ -- (-0.6725,-0.2850)
+ .. controls (-0.6853,-0.2530) and (-0.6899,-0.2536) .. (-0.7234,-0.2510)
+ --cycle
+ ( 0.0504,-0.2510)
+ -- ( 0.0504,-0.2760)
+ .. controls ( 0.0689,-0.3381) and ( 0.1243,-0.2780) .. ( 0.0804,-0.2561)
+ .. controls ( 0.0707,-0.2513) and ( 0.0594,-0.2519) .. ( 0.0504,-0.2510)
+ --cycle
+ (-0.1292,-0.2595)
+ -- (-0.1462,-0.2765)
+ -- (-0.1038,-0.3274)
+ -- (-0.0953,-0.3274)
+ -- (-0.0783,-0.3104)
+ --cycle
+ ( 0.7877,-0.2632)
+ .. controls ( 0.7523,-0.2682) and ( 0.7335,-0.3052) .. ( 0.7960,-0.3359)
+ .. controls ( 0.8015,-0.3335) and ( 0.8068,-0.3333) .. ( 0.8122,-0.3324)
+ -- ( 0.8442,-0.2774)
+ .. controls ( 0.8248,-0.2696) and ( 0.8026,-0.2612) .. ( 0.7877,-0.2632)
+ --cycle
+ ( 0.5329,-0.2765)
+ .. controls ( 0.5358,-0.3116) and ( 0.5353,-0.3182) .. ( 0.5668,-0.3359)
+ .. controls ( 0.5639,-0.3008) and ( 0.5644,-0.2942) .. ( 0.5329,-0.2765)
+ --cycle
+ ( 0.3385,-0.2820)
+ .. controls ( 0.3148,-0.2878) and ( 0.2673,-0.3492) .. ( 0.3385,-0.3614)
+ -- ( 0.3122,-0.4038)
+ .. controls ( 0.3574,-0.4463) and ( 0.3787,-0.4004) .. ( 0.3701,-0.3806)
+ .. controls ( 0.3644,-0.3672) and ( 0.3492,-0.3602) .. ( 0.3377,-0.3529)
+ -- ( 0.3886,-0.3019)
+ .. controls ( 0.3746,-0.2928) and ( 0.3572,-0.2777) .. ( 0.3385,-0.2820)
+ --cycle
+ (-0.3075,-0.2850)
+ -- (-0.3669,-0.3359)
+ .. controls (-0.3237,-0.3346) and (-0.3194,-0.3327) .. (-0.2820,-0.3104)
+ --cycle
+ ( 0.6347,-0.2850)
+ -- ( 0.6093,-0.3359)
+ -- ( 0.6687,-0.3359)
+ .. controls ( 0.6634,-0.3038) and ( 0.6614,-0.3034) .. ( 0.6347,-0.2850)
+ --cycle
+ ( 0.2482,-0.2927)
+ .. controls ( 0.2430,-0.2922) and ( 0.2370,-0.2926) .. ( 0.2301,-0.2942)
+ .. controls ( 0.1967,-0.3336) and ( 0.2478,-0.3609) .. ( 0.2647,-0.3515)
+ .. controls ( 0.2796,-0.3431) and ( 0.2843,-0.2960) .. ( 0.2482,-0.2927)
+ --cycle
+ (-0.5371,-0.2933)
+ .. controls (-0.5481,-0.2970) and (-0.5577,-0.3098) .. (-0.5621,-0.3359)
+ -- (-0.5112,-0.3869)
+ .. controls (-0.4600,-0.3526) and (-0.5043,-0.2822) .. (-0.5371,-0.2933)
+ --cycle
+ (-0.4433,-0.3019)
+ .. controls (-0.4430,-0.3328) and (-0.4401,-0.3356) .. (-0.4093,-0.3359)
+ -- (-0.4263,-0.3019)
+ --cycle
+ ( 0.0236,-0.3104)
+ -- ( 0.0066,-0.3274)
+ -- ( 0.0066,-0.3359)
+ -- ( 0.0236,-0.3529)
+ -- ( 0.0321,-0.3529)
+ -- ( 0.0490,-0.3359)
+ --cycle
+ ( 0.4140,-0.3104)
+ -- ( 0.4140,-0.3274)
+ -- ( 0.4565,-0.3274)
+ -- ( 0.4565,-0.3104)
+ --cycle
+ (-0.6555,-0.3189)
+ .. controls (-0.7282,-0.3463) and (-0.7047,-0.4238) .. (-0.6385,-0.3614)
+ --cycle
+ (-0.7635,-0.3203)
+ .. controls (-0.7897,-0.3491) and (-0.7645,-0.3586) .. (-0.7512,-0.3515)
+ .. controls (-0.7383,-0.3446) and (-0.7269,-0.3159) .. (-0.7635,-0.3203)
+ --cycle
+ (-0.1547,-0.3359)
+ .. controls (-0.2375,-0.3951) and (-0.1886,-0.3975) .. (-0.2106,-0.4536)
+ .. controls (-0.2221,-0.4826) and (-0.2548,-0.4886) .. (-0.2435,-0.5309)
+ .. controls (-0.2373,-0.5540) and (-0.1692,-0.6520) .. (-0.1548,-0.5893)
+ .. controls (-0.1503,-0.5696) and (-0.1713,-0.5323) .. (-0.1801,-0.5141)
+ -- (-0.2141,-0.5141)
+ -- (-0.1801,-0.4836)
+ -- (-0.1632,-0.3784)
+ -- (-0.1292,-0.3614)
+ --cycle
+ ( 0.5838,-0.3444)
+ -- ( 0.6178,-0.3869)
+ .. controls ( 0.6126,-0.3569) and ( 0.6121,-0.3558) .. ( 0.5838,-0.3444)
+ --cycle
+ (-0.5876,-0.3529)
+ -- (-0.5876,-0.3869)
+ -- (-0.5536,-0.3869)
+ --cycle
+ (-0.3075,-0.3529)
+ .. controls (-0.3075,-0.4259) and (-0.3150,-0.4459) .. (-0.2480,-0.4378)
+ .. controls (-0.2520,-0.3893) and (-0.2634,-0.3741) .. (-0.3075,-0.3529)
+ --cycle
+ ( 0.0745,-0.3529)
+ .. controls ( 0.0603,-0.3977) and ( 0.0512,-0.3786) .. ( 0.0066,-0.3869)
+ .. controls ( 0.0321,-0.4377) and ( 0.0562,-0.4373) .. ( 0.1084,-0.4378)
+ -- ( 0.1254,-0.3614)
+ --cycle
+ ( 0.1868,-0.3534)
+ .. controls ( 0.1605,-0.3550) and ( 0.1563,-0.3921) .. ( 0.1681,-0.4095)
+ .. controls ( 0.1887,-0.4397) and ( 0.2596,-0.3970) .. ( 0.2782,-0.3784)
+ .. controls ( 0.2016,-0.3640) and ( 0.2352,-0.3656) .. ( 0.1995,-0.3551)
+ .. controls ( 0.1948,-0.3537) and ( 0.1906,-0.3532) .. ( 0.1868,-0.3534)
+ --cycle
+ (-0.0650,-0.3585)
+ .. controls (-0.0712,-0.3584) and (-0.0783,-0.3594) .. (-0.0865,-0.3617)
+ .. controls (-0.1407,-0.4045) and (-0.1029,-0.4414) .. (-0.0731,-0.4301)
+ .. controls (-0.0250,-0.4118) and (-0.0217,-0.3591) .. (-0.0650,-0.3585)
+ --cycle
+ (-0.4008,-0.3614)
+ -- (-0.3584,-0.4293)
+ .. controls (-0.3814,-0.4389) and (-0.3792,-0.4389) .. (-0.3839,-0.4632)
+ .. controls (-0.3078,-0.4504) and (-0.3334,-0.3529) .. (-0.4008,-0.3614)
+ --cycle
+ ( 0.7706,-0.3784)
+ -- ( 0.6689,-0.4004)
+ -- ( 0.6602,-0.4378)
+ .. controls ( 0.6990,-0.4346) and ( 0.7019,-0.4328) .. ( 0.7281,-0.4038)
+ .. controls ( 0.7344,-0.4232) and ( 0.7382,-0.4373) .. ( 0.7461,-0.4460)
+ -- ( 0.7747,-0.3969)
+ --cycle
+ (-0.7404,-0.3869)
+ -- (-0.7574,-0.4038)
+ .. controls (-0.7352,-0.4249) and (-0.7368,-0.4246) .. (-0.7065,-0.4208)
+ -- (-0.7065,-0.4038)
+ --cycle
+ ( 0.3971,-0.3953)
+ -- ( 0.3801,-0.4378)
+ -- ( 0.4140,-0.4378)
+ -- ( 0.4140,-0.3953)
+ --cycle
+ (-0.6640,-0.4038)
+ .. controls (-0.6429,-0.4478) and (-0.6261,-0.4537) .. (-0.5876,-0.4802)
+ -- (-0.5367,-0.4378)
+ .. controls (-0.5592,-0.4163) and (-0.5680,-0.4098) .. (-0.5876,-0.4378)
+ .. controls (-0.6195,-0.4110) and (-0.6224,-0.4072) .. (-0.6640,-0.4038)
+ --cycle
+ (-0.4603,-0.4038)
+ -- (-0.4603,-0.4378)
+ -- (-0.4263,-0.4378)
+ -- (-0.4263,-0.4038)
+ --cycle
+ ( 0.5584,-0.4038)
+ .. controls ( 0.5189,-0.4043) and ( 0.5111,-0.4167) .. ( 0.5159,-0.4548)
+ -- ( 0.5329,-0.4548)
+ --cycle
+ ( 0.6093,-0.4123)
+ -- ( 0.6008,-0.4378)
+ -- ( 0.6262,-0.4378)
+ --cycle
+ ( 0.2273,-0.4293)
+ -- ( 0.2273,-0.4632)
+ -- ( 0.2612,-0.4632)
+ -- ( 0.2612,-0.4293)
+ --cycle
+ ( 0.1339,-0.4378)
+ .. controls ( 0.1294,-0.4715) and ( 0.1342,-0.4762) .. ( 0.1679,-0.4717)
+ --cycle
+ (-0.1337,-0.4435)
+ .. controls (-0.1394,-0.4438) and (-0.1452,-0.4454) .. (-0.1547,-0.4474)
+ -- (-0.1547,-0.4632)
+ -- (-0.1038,-0.4972)
+ -- (-0.1547,-0.5057)
+ .. controls (-0.1508,-0.5315) and (-0.1180,-0.5928) .. (-0.0833,-0.5723)
+ .. controls (-0.0768,-0.5684) and (-0.0244,-0.4827) .. (-0.1123,-0.4474)
+ .. controls (-0.1220,-0.4442) and (-0.1279,-0.4432) .. (-0.1337,-0.4435)
+ --cycle
+ (-0.0033,-0.4457)
+ .. controls (-0.0284,-0.4445) and (-0.0459,-0.4662) .. (-0.0273,-0.5141)
+ -- ( 0.0660,-0.5141)
+ .. controls ( 0.0545,-0.4708) and ( 0.0219,-0.4468) .. (-0.0033,-0.4457)
+ --cycle
+ (-0.7383,-0.4470)
+ -- (-0.7101,-0.4972)
+ .. controls (-0.7099,-0.4756) and (-0.7233,-0.4577) .. (-0.7383,-0.4470)
+ --cycle
+ (-0.4942,-0.4548)
+ -- (-0.4857,-0.5065)
+ .. controls (-0.4998,-0.5043) and (-0.5212,-0.5004) .. (-0.5329,-0.5065)
+ .. controls (-0.5629,-0.5229) and (-0.5515,-0.5662) .. (-0.5329,-0.5843)
+ .. controls (-0.5068,-0.6075) and (-0.4879,-0.6033) .. (-0.4603,-0.5906)
+ .. controls (-0.4787,-0.5639) and (-0.4791,-0.5620) .. (-0.5112,-0.5566)
+ -- (-0.5112,-0.5396)
+ .. controls (-0.4518,-0.5306) and (-0.4206,-0.4773) .. (-0.4942,-0.4548)
+ --cycle
+ ( 0.3377,-0.4548)
+ .. controls ( 0.3023,-0.4717) and ( 0.2951,-0.4788) .. ( 0.2782,-0.5141)
+ .. controls ( 0.3342,-0.5180) and ( 0.3822,-0.5526) .. ( 0.3886,-0.4717)
+ -- ( 0.3631,-0.4972)
+ --cycle
+ ( 0.5663,-0.4671)
+ .. controls ( 0.5583,-0.4668) and ( 0.5478,-0.4680) .. ( 0.5329,-0.4717)
+ -- ( 0.5329,-0.4887)
+ .. controls ( 0.5814,-0.5209) and ( 0.6607,-0.5778) .. ( 0.6687,-0.4802)
+ -- ( 0.6201,-0.4852)
+ .. controls ( 0.5908,-0.4828) and ( 0.5901,-0.4680) .. ( 0.5663,-0.4671)
+ --cycle
+ (-0.6640,-0.4802)
+ .. controls (-0.6763,-0.5067) and (-0.6845,-0.5204) .. (-0.6886,-0.5355)
+ -- (-0.6647,-0.5782)
+ -- (-0.5876,-0.5396)
+ .. controls (-0.6003,-0.5515) and (-0.6232,-0.5710) .. (-0.6310,-0.5860)
+ .. controls (-0.6373,-0.5982) and (-0.6388,-0.6155) .. (-0.6360,-0.6294)
+ -- (-0.6224,-0.6537)
+ .. controls (-0.5951,-0.6768) and (-0.5385,-0.6561) .. (-0.5112,-0.6415)
+ .. controls (-0.5400,-0.5996) and (-0.5579,-0.6048) .. (-0.6045,-0.6161)
+ -- (-0.5621,-0.5651)
+ -- (-0.5621,-0.5566)
+ -- (-0.5791,-0.5481)
+ -- (-0.5621,-0.5141)
+ --cycle
+ ( 0.1000,-0.4802)
+ -- ( 0.0745,-0.5396)
+ .. controls ( 0.1186,-0.5345) and ( 0.1548,-0.5114) .. ( 0.1000,-0.4802)
+ --cycle
+ ( 0.2188,-0.4802)
+ -- ( 0.2358,-0.5141)
+ -- ( 0.2358,-0.4802)
+ --cycle
+ ( 0.4310,-0.4802)
+ -- ( 0.4140,-0.5311)
+ -- ( 0.4140,-0.5396)
+ -- ( 0.4310,-0.5566)
+ .. controls ( 0.4679,-0.5313) and ( 0.4644,-0.5230) .. ( 0.4649,-0.4802)
+ --cycle
+ ( 0.7111,-0.4802)
+ -- ( 0.7111,-0.5059)
+ -- ( 0.7261,-0.4802)
+ --cycle
+ (-0.3414,-0.4972)
+ .. controls (-0.3911,-0.5256) and (-0.3704,-0.5729) .. (-0.3075,-0.5566)
+ -- (-0.3075,-0.5396)
+ --cycle
+ (-0.4348,-0.5057)
+ -- (-0.4348,-0.5736)
+ .. controls (-0.4068,-0.5549) and (-0.4098,-0.5369) .. (-0.4008,-0.5057)
+ --cycle
+ ( 0.1509,-0.5311)
+ -- ( 0.1254,-0.5736)
+ -- ( 0.1849,-0.5651)
+ --cycle
+ ( 0.2273,-0.5311)
+ -- ( 0.2103,-0.5975)
+ .. controls ( 0.1971,-0.5957) and ( 0.1843,-0.5904) .. ( 0.1705,-0.5975)
+ .. controls ( 0.1304,-0.6124) and ( 0.1679,-0.7346) .. ( 0.2142,-0.6893)
+ .. controls ( 0.2226,-0.6812) and ( 0.2236,-0.6741) .. ( 0.2273,-0.6670)
+ -- ( 0.1849,-0.6330)
+ .. controls ( 0.2427,-0.6183) and ( 0.2598,-0.5884) .. ( 0.2443,-0.5311)
+ --cycle
+ ( 0.5074,-0.5311)
+ .. controls ( 0.5252,-0.5626) and ( 0.5317,-0.5622) .. ( 0.5668,-0.5651)
+ .. controls ( 0.5491,-0.5336) and ( 0.5426,-0.5340) .. ( 0.5074,-0.5311)
+ --cycle
+ ( 0.0269,-0.5388)
+ .. controls ( 0.0166,-0.5396) and ( 0.0072,-0.5496) .. ( 0.0090,-0.5738)
+ -- ( 0.0151,-0.5991)
+ .. controls ( 0.0222,-0.5954) and ( 0.0287,-0.5947) .. ( 0.0377,-0.5860)
+ .. controls ( 0.0637,-0.5611) and ( 0.0441,-0.5373) .. ( 0.0269,-0.5388)
+ --cycle
+ ( 0.2782,-0.5481)
+ -- ( 0.2612,-0.5821)
+ -- ( 0.3122,-0.6245)
+ .. controls ( 0.3120,-0.5837) and ( 0.3197,-0.5648) .. ( 0.2782,-0.5481)
+ --cycle
+ (-0.2820,-0.5566)
+ .. controls (-0.2791,-0.5918) and (-0.2795,-0.5983) .. (-0.2480,-0.6161)
+ .. controls (-0.2450,-0.5789) and (-0.2492,-0.5737) .. (-0.2820,-0.5566)
+ --cycle
+ ( 0.3631,-0.5651)
+ .. controls ( 0.3595,-0.5776) and ( 0.3566,-0.5855) .. ( 0.3557,-0.5990)
+ .. controls ( 0.3500,-0.6875) and ( 0.4541,-0.6501) .. ( 0.3934,-0.5846)
+ .. controls ( 0.3826,-0.5729) and ( 0.3761,-0.5717) .. ( 0.3631,-0.5651)
+ --cycle
+ ( 0.4330,-0.5736)
+ -- ( 0.4330,-0.6379)
+ .. controls ( 0.4274,-0.6731) and ( 0.3959,-0.6885) .. ( 0.4395,-0.7179)
+ .. controls ( 0.4751,-0.6405) and ( 0.4954,-0.6629) .. ( 0.4480,-0.5736)
+ --cycle
+ ( 0.5329,-0.5821)
+ .. controls ( 0.5362,-0.6232) and ( 0.5740,-0.6869) .. ( 0.6222,-0.6585)
+ -- ( 0.6513,-0.6086)
+ .. controls ( 0.6095,-0.6116) and ( 0.5939,-0.6354) .. ( 0.5668,-0.5821)
+ --cycle
+ ( 0.1000,-0.5906)
+ -- ( 0.0830,-0.6245)
+ -- ( 0.0575,-0.6161)
+ .. controls ( 0.0477,-0.6898) and ( 0.1617,-0.6541) .. ( 0.1000,-0.5906)
+ --cycle
+ (-0.3245,-0.5991)
+ .. controls (-0.3790,-0.5920) and (-0.3824,-0.6312) .. (-0.3839,-0.6754)
+ -- (-0.3245,-0.6161)
+ --cycle
+ (-0.4348,-0.6076)
+ -- (-0.4603,-0.6670)
+ -- (-0.4942,-0.6585)
+ -- (-0.5027,-0.6670)
+ .. controls (-0.4589,-0.7510) and (-0.3531,-0.6544) .. (-0.4348,-0.6076)
+ --cycle
+ (-0.1377,-0.6076)
+ .. controls (-0.1554,-0.6464) and (-0.1574,-0.6512) .. (-0.1292,-0.6839)
+ -- (-0.1208,-0.6839)
+ -- (-0.1038,-0.6670)
+ -- (-0.1208,-0.6076)
+ --cycle
+ (-0.0698,-0.6161)
+ -- (-0.0698,-0.6330)
+ -- (-0.0019,-0.6330)
+ -- (-0.0019,-0.6161)
+ --cycle
+ (-0.2735,-0.6330)
+ .. controls (-0.3246,-0.6408) and (-0.3550,-0.6906) .. (-0.3754,-0.7356)
+ -- (-0.3510,-0.7356)
+ -- (-0.2786,-0.6658)
+ --cycle
+ (-0.1971,-0.6330)
+ .. controls (-0.2393,-0.6535) and (-0.2774,-0.6931) .. (-0.2226,-0.7264)
+ --cycle
+ ( 0.2782,-0.6415)
+ -- ( 0.2612,-0.6585)
+ .. controls ( 0.2834,-0.6795) and ( 0.2819,-0.6792) .. ( 0.3122,-0.6754)
+ -- ( 0.3122,-0.6585)
+ --cycle
+ ( 0.5244,-0.6630)
+ .. controls ( 0.5103,-0.6630) and ( 0.4934,-0.6765) .. ( 0.4819,-0.6839)
+ .. controls ( 0.4916,-0.7019) and ( 0.4915,-0.7036) .. ( 0.5078,-0.7175)
+ -- ( 0.5293,-0.7332)
+ .. controls ( 0.6028,-0.7786) and ( 0.5789,-0.6636) .. ( 0.5244,-0.6630)
+ --cycle
+ (-0.0698,-0.6839)
+ -- (-0.0613,-0.7433)
+ -- (-0.0528,-0.7518)
+ .. controls (-0.0005,-0.7307) and (-0.0190,-0.6844) .. (-0.0698,-0.6839)
+ --cycle
+ ( 0.1339,-0.6839)
+ .. controls ( 0.0648,-0.6945) and ( 0.0512,-0.7734) .. ( 0.1169,-0.7943)
+ .. controls ( 0.1059,-0.7314) and ( 0.1116,-0.7410) .. ( 0.1339,-0.6839)
+ --cycle
+ ( 0.3546,-0.6839)
+ .. controls ( 0.3575,-0.7191) and ( 0.3571,-0.7256) .. ( 0.3886,-0.7433)
+ -- ( 0.3716,-0.6839)
+ --cycle
+ ( 0.3886,-0.7433)
+ -- ( 0.3886,-0.7603)
+ -- ( 0.3546,-0.7943)
+ -- ( 0.3631,-0.7943)
+ -- ( 0.3801,-0.8113)
+ .. controls ( 0.4252,-0.7878) and ( 0.4333,-0.7840) .. ( 0.4140,-0.7349)
+ --cycle
+ (-0.5653,-0.6922)
+ .. controls (-0.5767,-0.6913) and (-0.5873,-0.6939) .. (-0.5981,-0.6969)
+ -- (-0.5741,-0.7399)
+ .. controls (-0.5528,-0.7446) and (-0.5350,-0.7433) .. (-0.5027,-0.7433)
+ .. controls (-0.5172,-0.7077) and (-0.5409,-0.6942) .. (-0.5653,-0.6922)
+ --cycle
+ (-0.1547,-0.7099)
+ .. controls (-0.1719,-0.7103) and (-0.1811,-0.7133) .. (-0.1971,-0.7179)
+ .. controls (-0.1923,-0.7317) and (-0.1881,-0.7454) .. (-0.1792,-0.7574)
+ .. controls (-0.1162,-0.8422) and (-0.0444,-0.7079) .. (-0.1547,-0.7099)
+ --cycle
+ (-0.4348,-0.7179)
+ .. controls (-0.4394,-0.7549) and (-0.4359,-0.7636) .. (-0.4008,-0.7773)
+ --cycle
+ ( 0.2358,-0.7179)
+ -- ( 0.2358,-0.7349)
+ -- ( 0.3037,-0.7349)
+ -- ( 0.3037,-0.7179)
+ --cycle
+ ( 0.4649,-0.7179)
+ -- ( 0.4734,-0.7858)
+ .. controls ( 0.4612,-0.7900) and ( 0.4516,-0.7918) .. ( 0.4409,-0.8004)
+ .. controls ( 0.3964,-0.8360) and ( 0.4585,-0.8927) .. ( 0.4819,-0.8198)
+ -- ( 0.5159,-0.8283)
+ .. controls ( 0.5142,-0.8359) and ( 0.5131,-0.8417) .. ( 0.5125,-0.8468)
+ -- ( 0.5398,-0.8000)
+ .. controls ( 0.5329,-0.7638) and ( 0.5138,-0.7350) .. ( 0.4649,-0.7179)
+ --cycle
+ ( 0.2103,-0.7264)
+ -- ( 0.1509,-0.7349)
+ -- ( 0.1509,-0.7688)
+ .. controls ( 0.1894,-0.7657) and ( 0.1982,-0.7645) .. ( 0.2103,-0.7264)
+ --cycle
+ (-0.2905,-0.7349)
+ .. controls (-0.3009,-0.7717) and (-0.3009,-0.7829) .. (-0.2905,-0.8198)
+ -- (-0.2480,-0.8028)
+ -- (-0.2311,-0.8367)
+ .. controls (-0.1820,-0.7845) and (-0.2454,-0.7805) .. (-0.2735,-0.7349)
+ --cycle
+ (-0.0019,-0.7349)
+ .. controls (-0.0202,-0.7845) and (-0.0471,-0.8007) .. (-0.0358,-0.8537)
+ -- ( 0.0066,-0.8113)
+ -- ( 0.0236,-0.8113)
+ .. controls ( 0.0412,-0.8384) and ( 0.0421,-0.8410) .. ( 0.0745,-0.8367)
+ .. controls ( 0.0599,-0.7914) and ( 0.0500,-0.7437) .. (-0.0019,-0.7349)
+ --cycle
+ (-0.5282,-0.7688)
+ .. controls (-0.5349,-0.8205) and (-0.5012,-0.8219) .. (-0.4603,-0.8113)
+ -- (-0.4603,-0.7943)
+ --cycle
+ ( 0.3122,-0.7688)
+ -- ( 0.3037,-0.7773)
+ .. controls ( 0.3122,-0.8236) and ( 0.3093,-0.8598) .. ( 0.3608,-0.8698)
+ -- ( 0.3628,-0.8698)
+ -- ( 0.3292,-0.7688)
+ --cycle
+ (-0.3584,-0.7858)
+ -- (-0.3770,-0.8622)
+ .. controls (-0.3770,-0.8627) and (-0.3768,-0.8631) .. (-0.3768,-0.8636)
+ -- (-0.3401,-0.8639)
+ -- (-0.3245,-0.7858)
+ --cycle
+ ( 0.2612,-0.7858)
+ .. controls ( 0.2125,-0.7858) and ( 0.1976,-0.7780) .. ( 0.1594,-0.8113)
+ .. controls ( 0.2029,-0.8570) and ( 0.2552,-0.8596) .. ( 0.2612,-0.7858)
+ --cycle
+ (-0.1292,-0.7943)
+ -- (-0.1886,-0.8537)
+ .. controls (-0.1453,-0.8604) and (-0.1341,-0.8487) .. (-0.1038,-0.8198)
+ --cycle
+ (-0.4348,-0.8367)
+ -- (-0.4479,-0.8630)
+ -- (-0.4228,-0.8632)
+ .. controls (-0.4191,-0.8583) and (-0.4180,-0.8505) .. (-0.4178,-0.8367)
+ --cycle
+ (-0.0783,-0.8452)
+ .. controls (-0.0928,-0.8536) and (-0.0996,-0.8588) .. (-0.1026,-0.8659)
+ -- (-0.0748,-0.8661)
+ -- (-0.0698,-0.8537)
+ --cycle
+ ( 0.1503,-0.8501)
+ .. controls ( 0.1440,-0.8514) and ( 0.1387,-0.8545) .. ( 0.1353,-0.8602)
+ .. controls ( 0.1334,-0.8621) and ( 0.1330,-0.8649) .. ( 0.1333,-0.8679)
+ -- ( 0.2103,-0.8685)
+ -- ( 0.2103,-0.8602)
+ .. controls ( 0.1968,-0.8575) and ( 0.1690,-0.8460) .. ( 0.1503,-0.8501)
+ --cycle
+ (-0.2396,-0.8622)
+ -- (-0.2421,-0.8647)
+ -- (-0.2217,-0.8649)
+ .. controls (-0.2221,-0.8638) and (-0.2222,-0.8633) .. (-0.2226,-0.8622)
+ --cycle
+ ( 0.2867,-0.8622)
+ .. controls ( 0.2782,-0.8636) and ( 0.2734,-0.8665) .. ( 0.2676,-0.8690)
+ -- ( 0.2859,-0.8691)
+ --cycle
+ ( 0.3942,-0.8639)
+ .. controls ( 0.3909,-0.8650) and ( 0.3884,-0.8678) .. ( 0.3855,-0.8700)
+ -- ( 0.4192,-0.8703)
+ .. controls ( 0.4168,-0.8684) and ( 0.4154,-0.8656) .. ( 0.4124,-0.8643)
+ .. controls ( 0.4062,-0.8618) and ( 0.4000,-0.8619) .. ( 0.3942,-0.8639)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/swamp.dtx b/macros/latex/contrib/wargame/source/hex/terrain/swamp.dtx
new file mode 100644
index 0000000000..b361789fa3
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/swamp.dtx
@@ -0,0 +1,317 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/swamp}
+% The pattern for swamps. The pattern is filled with a light blue.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/swamp/.style={
+ draw=none,
+ fill={rgb,100:red,26;green,55;blue,70}
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{hex/terrain/swamp}
+% Swamps. This is probably the shortest of the terrain patterns.
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/swamp/.pic={
+ \path[hex/terrain/swamp,pic actions,draw=none]
+ (-0.5026, 0.8699)
+ -- (-0.5041, 0.8672)
+ .. controls (-0.3586, 0.8441) and (-0.1148, 0.8722) .. ( 0.0006, 0.8697)
+ -- ( 0.2386, 0.8529)
+ -- ( 0.2386, 0.8699)
+ --cycle
+ ( 0.4257, 0.8699)
+ -- ( 0.4257, 0.8529)
+ -- ( 0.5112, 0.8558)
+ -- ( 0.5033, 0.8699)
+ --cycle
+ ( 0.3067, 0.8359)
+ -- ( 0.2897, 0.7848)
+ -- ( 0.2726, 0.8188)
+ -- ( 0.2556, 0.8188)
+ -- ( 0.2217, 0.7509)
+ -- ( 0.5719, 0.7509)
+ -- ( 0.5621, 0.7679)
+ -- ( 0.5617, 0.7679)
+ -- ( 0.3746, 0.7848)
+ -- ( 0.3746, 0.8359)
+ --cycle
+ (-0.3225, 0.7848)
+ -- (-0.3225, 0.7509)
+ -- ( 0.0856, 0.7509)
+ -- ( 0.0856, 0.7848)
+ --cycle
+ (-0.5555, 0.7782)
+ -- (-0.5713, 0.7509)
+ -- (-0.5097, 0.7509)
+ --cycle
+ ( 0.2789, 0.6696)
+ .. controls ( 0.2234, 0.6713) and ( 0.1659, 0.6658) .. ( 0.1195, 0.6658)
+ -- (-0.6117, 0.6658)
+ -- (-0.6117, 0.6318)
+ -- ( 0.4257, 0.6318)
+ .. controls ( 0.3878, 0.6597) and ( 0.3344, 0.6681) .. ( 0.2789, 0.6696)
+ --cycle
+ ( 0.6297, 0.6318)
+ -- ( 0.6297, 0.5468)
+ -- ( 0.5617, 0.5807)
+ .. controls ( 0.5449, 0.5387) and ( 0.5194, 0.5474) .. ( 0.4764, 0.5468)
+ -- ( 0.2047, 0.5468)
+ .. controls ( 0.2857, 0.5146) and ( 0.5508, 0.5135) .. ( 0.7089, 0.5136)
+ -- ( 0.6740, 0.5740)
+ -- ( 0.6638, 0.5637)
+ --cycle
+ (-0.6684, 0.5591)
+ .. controls (-0.6731, 0.5588) and (-0.6784, 0.5577) .. (-0.6832, 0.5571)
+ -- (-0.6990, 0.5298)
+ -- (-0.5777, 0.5298)
+ .. controls (-0.6139, 0.5561) and (-0.6407, 0.5608) .. (-0.6684, 0.5591)
+ --cycle
+ (-0.3396, 0.5468)
+ .. controls (-0.2194, 0.4991) and (-0.1285, 0.5826) .. (-0.0845, 0.4447)
+ -- (-0.1525, 0.4957)
+ -- (-0.1525, 0.4277)
+ .. controls (-0.0482, 0.4023) and ( 0.2732, 0.3989) .. ( 0.3746, 0.4277)
+ .. controls ( 0.2597, 0.4733) and ( 0.2397, 0.4045) .. ( 0.1026, 0.4957)
+ -- ( 0.0686, 0.4617)
+ -- ( 0.0516, 0.4617)
+ -- ( 0.0686, 0.5298)
+ -- ( 0.0006, 0.4447)
+ -- ( 0.0006, 0.5468)
+ --cycle
+ (-0.0675, 0.5127)
+ -- (-0.0164, 0.5127)
+ -- (-0.0505, 0.4447)
+ --cycle
+ (-0.7435, 0.4527)
+ -- (-0.7580, 0.4277)
+ -- (-0.6797, 0.4277)
+ .. controls (-0.6982, 0.4394) and (-0.7200, 0.4471) .. (-0.7435, 0.4527)
+ --cycle
+ (-0.5266, 0.4447)
+ .. controls (-0.4681, 0.4018) and (-0.4413, 0.4086) .. (-0.3736, 0.4277)
+ --cycle
+ ( 0.5787, 0.4277)
+ -- ( 0.5447, 0.3257)
+ -- ( 0.5108, 0.3257)
+ -- ( 0.4597, 0.4107)
+ -- ( 0.4597, 0.3257)
+ -- ( 0.4257, 0.3937)
+ -- ( 0.4087, 0.3257)
+ -- ( 0.2897, 0.3257)
+ .. controls ( 0.3725, 0.2928) and ( 0.6913, 0.3087) .. ( 0.7998, 0.3087)
+ .. controls ( 0.7426, 0.3376) and ( 0.7264, 0.3382) .. ( 0.6638, 0.3257)
+ -- ( 0.6638, 0.3767)
+ -- ( 0.5787, 0.3257)
+ --cycle
+ (-0.7817, 0.3257)
+ -- (-0.7137, 0.2407)
+ -- (-0.7988, 0.2746)
+ .. controls (-0.8162, 0.2534) and (-0.8404, 0.2432) .. (-0.8672, 0.2385)
+ -- (-0.8857, 0.2066)
+ -- (-0.6627, 0.2066)
+ .. controls (-0.5059, 0.2059) and (-0.2690, 0.1655) .. (-0.1185, 0.2066)
+ .. controls (-0.2358, 0.2532) and (-0.4834, 0.1773) .. (-0.5607, 0.2746)
+ -- (-0.6287, 0.2237)
+ -- (-0.6457, 0.2407)
+ .. controls (-0.5823, 0.3108) and (-0.5667, 0.3074) .. (-0.4756, 0.3087)
+ --cycle
+ ( 0.8338, 0.2576)
+ -- ( 0.7998, 0.2066)
+ -- ( 0.8906, 0.1990)
+ -- ( 0.8567, 0.2576)
+ --cycle
+ (-0.0164, 0.2237)
+ .. controls ( 0.0715, 0.1799) and ( 0.3189, 0.1896) .. ( 0.4257, 0.1896)
+ -- ( 0.4257, 0.2237)
+ --cycle
+ (-0.2716, 0.1216)
+ -- (-0.2716, 0.0876)
+ -- ( 0.1501, 0.0876)
+ -- ( 0.1434, 0.1042)
+ -- ( 0.0345, 0.1216)
+ --cycle
+ ( 0.1501, 0.0876)
+ -- ( 0.1536, 0.0789)
+ -- ( 0.1536, 0.0876)
+ --cycle
+ ( 0.1536, 0.0789)
+ -- ( 0.1536, 0.0196)
+ -- ( 0.0856, 0.0534)
+ -- ( 0.0686,-0.0145)
+ -- ( 0.7658,-0.0145)
+ .. controls ( 0.6332, 0.0380) and ( 0.4479,-0.0524) .. ( 0.3406, 0.0534)
+ -- ( 0.3236, 0.0534)
+ -- ( 0.2897, 0.0196)
+ -- ( 0.2897, 0.0876)
+ -- ( 0.2556, 0.0196)
+ -- ( 0.2386, 0.0876)
+ -- ( 0.1705, 0.0365)
+ --cycle
+ ( 0.3917, 0.1216)
+ -- ( 0.3917, 0.0876)
+ -- ( 0.8678, 0.0876)
+ .. controls ( 0.7768, 0.1266) and ( 0.5022, 0.1216) .. ( 0.3917, 0.1216)
+ --cycle
+ (-0.9351, 0.1208)
+ -- (-0.9518, 0.0921)
+ -- (-0.9518, 0.0876)
+ -- (-0.6117, 0.1045)
+ --cycle
+ (-0.9144, 0.0213)
+ .. controls (-0.9468, 0.0204) and (-0.9775, 0.0109) .. (-0.9996,-0.0116)
+ -- (-0.9982,-0.0141)
+ -- (-0.8158, 0.0026)
+ .. controls (-0.8449, 0.0142) and (-0.8804, 0.0222) .. (-0.9144, 0.0213)
+ --cycle
+ (-0.6287, 0.0196)
+ .. controls (-0.5470,-0.0404) and (-0.2796,-0.0145) .. (-0.1695,-0.0145)
+ -- (-0.1695, 0.0196)
+ --cycle
+ (-0.9488,-0.0996)
+ -- (-0.9292,-0.1335)
+ -- (-0.4756,-0.1335)
+ -- (-0.4756,-0.0996)
+ --cycle
+ (-0.2886,-0.0996)
+ -- (-0.2886,-0.1335)
+ -- ( 0.2726,-0.1335)
+ .. controls ( 0.2164,-0.0920) and ( 0.1871,-0.0997) .. ( 0.1195,-0.0996)
+ --cycle
+ ( 0.5478,-0.1025)
+ .. controls ( 0.5070,-0.1018) and ( 0.4651,-0.1086) .. ( 0.4257,-0.1165)
+ -- ( 0.6638,-0.1335)
+ .. controls ( 0.6286,-0.1113) and ( 0.5887,-0.1031) .. ( 0.5478,-0.1025)
+ --cycle
+ ( 0.8928,-0.1132)
+ .. controls ( 0.8481,-0.1114) and ( 0.8007,-0.1165) .. ( 0.7658,-0.1165)
+ -- ( 0.9264,-0.1394)
+ -- ( 0.9384,-0.1186)
+ .. controls ( 0.9238,-0.1157) and ( 0.9087,-0.1137) .. ( 0.8928,-0.1132)
+ --cycle
+ (-0.2982,-0.2002)
+ .. controls (-0.3469,-0.2010) and (-0.3950,-0.2053) .. (-0.4416,-0.2185)
+ -- (-0.0505,-0.2355)
+ -- ( 0.7827,-0.2355)
+ .. controls ( 0.6739,-0.1909) and ( 0.4335,-0.2017) .. ( 0.3067,-0.2016)
+ -- (-0.1525,-0.2016)
+ .. controls (-0.2005,-0.2016) and (-0.2496,-0.1992) .. (-0.2982,-0.2002)
+ --cycle
+ (-0.8328,-0.2016)
+ .. controls (-0.7894,-0.2498) and (-0.7244,-0.2355) .. (-0.6627,-0.2355)
+ -- (-0.6627,-0.3034)
+ -- (-0.6967,-0.2696)
+ -- (-0.7137,-0.2696)
+ .. controls (-0.7385,-0.3064) and (-0.7772,-0.3191) .. (-0.8200,-0.3227)
+ -- (-0.8113,-0.3377)
+ .. controls (-0.6682,-0.3440) and (-0.4684,-0.3376) .. (-0.3906,-0.3376)
+ -- (-0.4586,-0.2696)
+ -- (-0.5266,-0.3034)
+ -- (-0.5097,-0.2355)
+ -- (-0.5607,-0.3206)
+ -- (-0.5777,-0.2355)
+ -- (-0.6457,-0.3034)
+ -- (-0.6287,-0.2185)
+ --cycle
+ ( 0.8169,-0.2866)
+ -- ( 0.7489,-0.3206)
+ .. controls ( 0.7652,-0.3284) and ( 0.7871,-0.3345) .. ( 0.8114,-0.3386)
+ -- ( 0.8324,-0.3020)
+ --cycle
+ ( 0.2076,-0.3170)
+ .. controls ( 0.0913,-0.3168) and (-0.0288,-0.3206) .. (-0.0845,-0.3206)
+ -- ( 0.2509,-0.3621)
+ -- ( 0.2897,-0.4056)
+ -- ( 0.2556,-0.3716)
+ -- ( 0.2386,-0.3716)
+ -- ( 0.2386,-0.4566)
+ -- ( 0.4257,-0.4566)
+ -- ( 0.3746,-0.3716)
+ -- ( 0.3067,-0.4226)
+ -- ( 0.3067,-0.3547)
+ -- ( 0.4766,-0.3376)
+ .. controls ( 0.4363,-0.3215) and ( 0.3237,-0.3172) .. ( 0.2076,-0.3170)
+ --cycle
+ (-0.7622,-0.4226)
+ -- (-0.7427,-0.4566)
+ -- (-0.5607,-0.4566)
+ -- (-0.5607,-0.4226)
+ --cycle
+ (-0.3396,-0.4226)
+ -- (-0.3396,-0.4566)
+ -- (-0.0164,-0.4566)
+ -- (-0.0164,-0.4226)
+ --cycle
+ ( 0.5787,-0.4226)
+ .. controls ( 0.6179,-0.4661) and ( 0.6835,-0.4595) .. ( 0.7407,-0.4607)
+ -- ( 0.7528,-0.4400)
+ .. controls ( 0.6947,-0.4396) and ( 0.6370,-0.4368) .. ( 0.5787,-0.4226)
+ --cycle
+ (-0.2496,-0.5239)
+ .. controls (-0.2827,-0.5212) and (-0.3176,-0.5246) .. (-0.3566,-0.5246)
+ -- (-0.7034,-0.5246)
+ -- (-0.6873,-0.5524)
+ .. controls (-0.6429,-0.5639) and (-0.5972,-0.5587) .. (-0.5436,-0.5587)
+ -- (-0.1525,-0.5587)
+ .. controls (-0.1848,-0.5349) and (-0.2163,-0.5263) .. (-0.2496,-0.5239)
+ --cycle
+ (-0.0164,-0.5417)
+ .. controls ( 0.0514,-0.5917) and ( 0.1065,-0.5717) .. ( 0.1876,-0.5736)
+ .. controls ( 0.2932,-0.5761) and ( 0.5300,-0.5848) .. ( 0.6766,-0.5720)
+ -- ( 0.6872,-0.5538)
+ -- ( 0.4937,-0.5417)
+ --cycle
+ (-0.6255,-0.6593)
+ -- (-0.6248,-0.6607)
+ -- (-0.6117,-0.6607)
+ --cycle
+ (-0.5777,-0.6607)
+ -- (-0.5777,-0.7287)
+ -- (-0.5856,-0.7287)
+ -- (-0.5659,-0.7627)
+ -- (-0.3906,-0.7627)
+ -- (-0.1695,-0.7627)
+ -- (-0.4246,-0.7287)
+ -- (-0.4076,-0.6607)
+ -- (-0.4416,-0.7287)
+ -- (-0.4756,-0.7287)
+ -- (-0.4756,-0.6607)
+ -- (-0.5097,-0.6607)
+ -- (-0.5097,-0.7287)
+ --cycle
+ ( 0.0686,-0.7457)
+ .. controls ( 0.1464,-0.8028) and ( 0.3428,-0.7798) .. ( 0.4427,-0.7798)
+ -- ( 0.4427,-0.7457)
+ --cycle
+ (-0.3736,-0.8478)
+ -- (-0.3736,-0.8722)
+ -- (-0.2203,-0.8722)
+ .. controls (-0.2708,-0.8419) and (-0.3097,-0.8478) .. (-0.3736,-0.8478)
+ --cycle
+ (-0.0172,-0.8544)
+ .. controls (-0.0398,-0.8556) and (-0.0623,-0.8586) .. (-0.0845,-0.8648)
+ .. controls (-0.0753,-0.8684) and (-0.0664,-0.8700) .. (-0.0573,-0.8722)
+ -- ( 0.5033,-0.8722)
+ -- ( 0.5088,-0.8626)
+ .. controls ( 0.3892,-0.8602) and ( 0.2527,-0.8649) .. ( 0.1876,-0.8648)
+ .. controls ( 0.1186,-0.8647) and ( 0.0502,-0.8509) .. (-0.0172,-0.8544)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/town.dtx b/macros/latex/contrib/wargame/source/hex/terrain/town.dtx
new file mode 100644
index 0000000000..1186b54c81
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/town.dtx
@@ -0,0 +1,1061 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/town}
+% A town.
+%
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/town/.pic={
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.1432,-0.4518)
+ -- (-0.0320,-0.2906)
+ -- ( 0.0745,-0.0351)
+ -- ( 0.1130,-0.0387)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0729,-0.0352)
+ -- (-0.1716, 0.0254)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.2493, 0.5648)
+ -- (-0.2192, 0.4501)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0677,-0.6538)
+ -- ( 0.1754,-0.7052)
+ -- ( 0.4358,-0.4688)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0439,-0.3617)
+ -- (-0.0921,-0.5012)
+ -- (-0.2865,-0.3243)
+ -- (-0.4420,-0.4608)
+ -- (-0.5795,-0.4446)
+ -- (-0.6421,-0.3520)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0622,-0.6515)
+ -- (-0.0316,-0.6176)
+ -- (-0.0221,-0.5364)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ ( 0.0048,-0.2069)
+ -- (-0.1945,-0.1818)
+ -- (-0.2278,-0.2247)
+ -- (-0.5051,-0.1356)
+ ;
+ \path[hex/terrain/town/small road,pic actions,hex/terrain/town/post road]
+ (-0.3383, 0.0449)
+ -- (-0.2189, 0.4510)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.0073, 0.8700)
+ -- ( 0.3952, 0.3373)
+ -- ( 0.3884, 0.2029)
+ -- ( 0.3555, 0.1378)
+ -- ( 0.3751, 0.0880)
+ -- ( 0.2513,-0.1997)
+ -- ( 0.1396,-0.4505)
+ -- ( 0.0641,-0.6512)
+ -- ( 0.0070,-0.8700)
+ -- ( 0.0070,-0.8700)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.7575, 0.4367)
+ -- ( 0.3945, 0.3375)
+ -- ( 0.3945, 0.3375)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.1900,-0.0806)
+ -- (-0.0751, 0.3938)
+ -- (-0.0765, 0.3925)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.1308, 0.1580)
+ -- (-0.7603, 0.4394)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.7139,-0.1526)
+ -- (-0.6147,-0.3362)
+ -- (-0.7607,-0.4327)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.6676,-0.2405)
+ -- (-0.4599,-0.1067)
+ -- (-0.1877,-0.0679)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.2082,-0.3003)
+ -- ( 0.4578,-0.4855)
+ -- ( 0.5914,-0.3675)
+ -- ( 0.7607,-0.4420)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.3827, 0.1864)
+ -- (-0.1290, 0.1576)
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4493,-0.3075)
+ -- (-0.4043,-0.2868)
+ -- (-0.3710,-0.3593)
+ -- (-0.4160,-0.3799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4493,-0.3075)
+ -- (-0.4043,-0.2868)
+ -- (-0.3710,-0.3593)
+ -- (-0.4160,-0.3799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5264,-0.1066)
+ -- (-0.5514,-0.0681)
+ -- (-0.5002,-0.0349)
+ -- (-0.4753,-0.0733)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5264,-0.1066)
+ -- (-0.5514,-0.0681)
+ -- (-0.5002,-0.0349)
+ -- (-0.4753,-0.0733)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1978, 0.1663)
+ -- (-0.1534, 0.1549)
+ -- (-0.1685, 0.0960)
+ -- (-0.2130, 0.1074)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1978, 0.1663)
+ -- (-0.1534, 0.1549)
+ -- (-0.1685, 0.0960)
+ -- (-0.2130, 0.1074)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2259, 0.4898)
+ -- ( 0.2453, 0.4680)
+ -- ( 0.2052, 0.4324)
+ -- ( 0.1858, 0.4542)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2259, 0.4898)
+ -- ( 0.2453, 0.4680)
+ -- ( 0.2052, 0.4324)
+ -- ( 0.1858, 0.4542)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0986, 0.2553)
+ -- (-0.0882, 0.2827)
+ -- (-0.0380, 0.2637)
+ -- (-0.0484, 0.2363)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0986, 0.2553)
+ -- (-0.0882, 0.2827)
+ -- (-0.0380, 0.2637)
+ -- (-0.0484, 0.2363)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0834, 0.2379)
+ -- ( 0.0888, 0.2667)
+ -- ( 0.1415, 0.2566)
+ -- ( 0.1361, 0.2279)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0834, 0.2379)
+ -- ( 0.0888, 0.2667)
+ -- ( 0.1415, 0.2566)
+ -- ( 0.1361, 0.2279)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0207,-0.0604)
+ -- (-0.0103,-0.0331)
+ -- ( 0.0398,-0.0521)
+ -- ( 0.0294,-0.0794)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0207,-0.0604)
+ -- (-0.0103,-0.0331)
+ -- ( 0.0398,-0.0521)
+ -- ( 0.0294,-0.0794)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3580,-0.4608)
+ -- ( 0.3837,-0.4748)
+ -- ( 0.3581,-0.5219)
+ -- ( 0.3324,-0.5080)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3580,-0.4608)
+ -- ( 0.3837,-0.4748)
+ -- ( 0.3581,-0.5219)
+ -- ( 0.3324,-0.5080)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5127,-0.3559)
+ -- ( 0.5341,-0.3759)
+ -- ( 0.4975,-0.4151)
+ -- ( 0.4761,-0.3951)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5127,-0.3559)
+ -- ( 0.5341,-0.3759)
+ -- ( 0.4975,-0.4151)
+ -- ( 0.4761,-0.3951)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2118,-0.3884)
+ -- ( 0.2245,-0.3620)
+ -- ( 0.2728,-0.3854)
+ -- ( 0.2600,-0.4118)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2118,-0.3884)
+ -- ( 0.2245,-0.3620)
+ -- ( 0.2728,-0.3854)
+ -- ( 0.2600,-0.4118)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1651,-0.4740)
+ -- ( 0.1775,-0.4475)
+ -- ( 0.2260,-0.4702)
+ -- ( 0.2137,-0.4968)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1651,-0.4740)
+ -- ( 0.1775,-0.4475)
+ -- ( 0.2260,-0.4702)
+ -- ( 0.2137,-0.4968)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2834,-0.4196)
+ -- ( 0.2957,-0.3932)
+ -- ( 0.3443,-0.4159)
+ -- ( 0.3319,-0.4423)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2834,-0.4196)
+ -- ( 0.2957,-0.3932)
+ -- ( 0.3443,-0.4159)
+ -- ( 0.3319,-0.4423)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1447,-0.5170)
+ -- ( 0.1555,-0.4899)
+ -- ( 0.2053,-0.5096)
+ -- ( 0.1945,-0.5368)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1447,-0.5170)
+ -- ( 0.1555,-0.4899)
+ -- ( 0.2053,-0.5096)
+ -- ( 0.1945,-0.5368)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0154,-0.5671)
+ -- ( 0.0244,-0.5392)
+ -- ( 0.0754,-0.5558)
+ -- ( 0.0664,-0.5836)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0154,-0.5671)
+ -- ( 0.0244,-0.5392)
+ -- ( 0.0754,-0.5558)
+ -- ( 0.0664,-0.5836)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2958,-0.3614)
+ -- (-0.2707,-0.3764)
+ -- (-0.2983,-0.4224)
+ -- (-0.3234,-0.4073)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2958,-0.3614)
+ -- (-0.2707,-0.3764)
+ -- (-0.2983,-0.4224)
+ -- (-0.3234,-0.4073)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3024,-0.2385)
+ -- (-0.2753,-0.2491)
+ -- (-0.2948,-0.2990)
+ -- (-0.3220,-0.2883)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3024,-0.2385)
+ -- (-0.2753,-0.2491)
+ -- (-0.2948,-0.2990)
+ -- (-0.3220,-0.2883)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5719,-0.2295)
+ -- (-0.5577,-0.2550)
+ -- (-0.6045,-0.2811)
+ -- (-0.6187,-0.2556)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5719,-0.2295)
+ -- (-0.5577,-0.2550)
+ -- (-0.6045,-0.2811)
+ -- (-0.6187,-0.2556)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5909,-0.3922)
+ -- (-0.5677,-0.3744)
+ -- (-0.5351,-0.4170)
+ -- (-0.5584,-0.4348)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.5909,-0.3922)
+ -- (-0.5677,-0.3744)
+ -- (-0.5351,-0.4170)
+ -- (-0.5584,-0.4348)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4367,-0.3858)
+ -- (-0.4233,-0.4119)
+ -- (-0.4709,-0.4364)
+ -- (-0.4843,-0.4105)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.4367,-0.3858)
+ -- (-0.4233,-0.4119)
+ -- (-0.4709,-0.4364)
+ -- (-0.4843,-0.4105)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6605,-0.4272)
+ -- (-0.6489,-0.4540)
+ -- (-0.6982,-0.4752)
+ -- (-0.7097,-0.4483)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6605,-0.4272)
+ -- (-0.6489,-0.4540)
+ -- (-0.6982,-0.4752)
+ -- (-0.7097,-0.4483)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2694,-0.2379)
+ -- ( 0.2777,-0.2098)
+ -- ( 0.3291,-0.2250)
+ -- ( 0.3209,-0.2530)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2694,-0.2379)
+ -- ( 0.2777,-0.2098)
+ -- ( 0.3291,-0.2250)
+ -- ( 0.3209,-0.2530)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1131,-0.3134)
+ -- ( 0.1237,-0.2861)
+ -- ( 0.1737,-0.3055)
+ -- ( 0.1630,-0.3328)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1131,-0.3134)
+ -- ( 0.1237,-0.2861)
+ -- ( 0.1737,-0.3055)
+ -- ( 0.1630,-0.3328)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1931,-0.0936)
+ -- ( 0.2058,-0.0673)
+ -- ( 0.2541,-0.0904)
+ -- ( 0.2415,-0.1168)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1931,-0.0936)
+ -- ( 0.2058,-0.0673)
+ -- ( 0.2541,-0.0904)
+ -- ( 0.2415,-0.1168)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1779, 0.1198)
+ -- ( 0.1984, 0.0990)
+ -- ( 0.1603, 0.0613)
+ -- ( 0.1398, 0.0821)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1779, 0.1198)
+ -- ( 0.1984, 0.0990)
+ -- ( 0.1603, 0.0613)
+ -- ( 0.1398, 0.0821)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2761, 0.3992)
+ -- ( 0.2947, 0.3765)
+ -- ( 0.2533, 0.3425)
+ -- ( 0.2347, 0.3651)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2761, 0.3992)
+ -- ( 0.2947, 0.3765)
+ -- ( 0.2533, 0.3425)
+ -- ( 0.2347, 0.3651)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3227, 0.3548)
+ -- ( 0.3421, 0.3329)
+ -- ( 0.3020, 0.2974)
+ -- ( 0.2826, 0.3192)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3227, 0.3548)
+ -- ( 0.3421, 0.3329)
+ -- ( 0.3020, 0.2974)
+ -- ( 0.2826, 0.3192)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2473, 0.2770)
+ -- (-0.2380, 0.3048)
+ -- (-0.1871, 0.2879)
+ -- (-0.1964, 0.2601)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2473, 0.2770)
+ -- (-0.2380, 0.3048)
+ -- (-0.1871, 0.2879)
+ -- (-0.1964, 0.2601)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1395, 0.3602)
+ -- (-0.1127, 0.3488)
+ -- (-0.1335, 0.2995)
+ -- (-0.1604, 0.3109)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1395, 0.3602)
+ -- (-0.1127, 0.3488)
+ -- (-0.1335, 0.2995)
+ -- (-0.1604, 0.3109)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2901, 0.6234)
+ -- ( 0.3088, 0.6008)
+ -- ( 0.2674, 0.5667)
+ -- ( 0.2487, 0.5893)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2901, 0.6234)
+ -- ( 0.3088, 0.6008)
+ -- ( 0.2674, 0.5667)
+ -- ( 0.2487, 0.5893)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3456, 0.2854)
+ -- (-0.3335, 0.3120)
+ -- (-0.2847, 0.2898)
+ -- (-0.2968, 0.2632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3456, 0.2854)
+ -- (-0.3335, 0.3120)
+ -- (-0.2847, 0.2898)
+ -- (-0.2968, 0.2632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3040, 0.3746)
+ -- (-0.2919, 0.4012)
+ -- (-0.2431, 0.3791)
+ -- (-0.2552, 0.3524)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3040, 0.3746)
+ -- (-0.2919, 0.4012)
+ -- (-0.2431, 0.3791)
+ -- (-0.2552, 0.3524)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7420,-0.2456)
+ -- (-0.7302,-0.2189)
+ -- (-0.6812,-0.2407)
+ -- (-0.6930,-0.2674)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.7420,-0.2456)
+ -- (-0.7302,-0.2189)
+ -- (-0.6812,-0.2407)
+ -- (-0.6930,-0.2674)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6678,-0.1369)
+ -- (-0.6492,-0.1143)
+ -- (-0.6078,-0.1484)
+ -- (-0.6264,-0.1710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6678,-0.1369)
+ -- (-0.6492,-0.1143)
+ -- (-0.6078,-0.1484)
+ -- (-0.6264,-0.1710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2252,-0.0023)
+ -- (-0.1960,-0.0023)
+ -- (-0.1960,-0.0559)
+ -- (-0.2252,-0.0559)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2252,-0.0023)
+ -- (-0.1960,-0.0023)
+ -- (-0.1960,-0.0559)
+ -- (-0.2252,-0.0559)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0041,-0.2944)
+ -- ( 0.0064,-0.2671)
+ -- ( 0.0564,-0.2862)
+ -- ( 0.0460,-0.3135)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0041,-0.2944)
+ -- ( 0.0064,-0.2671)
+ -- ( 0.0564,-0.2862)
+ -- ( 0.0460,-0.3135)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1877,-0.2296)
+ -- (-0.1764,-0.2026)
+ -- (-0.1270,-0.2233)
+ -- (-0.1383,-0.2503)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1877,-0.2296)
+ -- (-0.1764,-0.2026)
+ -- (-0.1270,-0.2233)
+ -- (-0.1383,-0.2503)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1170,-0.3014)
+ -- (-0.1067,-0.2740)
+ -- (-0.0566,-0.2928)
+ -- (-0.0668,-0.3202)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1170,-0.3014)
+ -- (-0.1067,-0.2740)
+ -- (-0.0566,-0.2928)
+ -- (-0.0668,-0.3202)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0719,-0.3499)
+ -- (-0.0428,-0.3468)
+ -- (-0.0371,-0.4001)
+ -- (-0.0661,-0.4032)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0719,-0.3499)
+ -- (-0.0428,-0.3468)
+ -- (-0.0371,-0.4001)
+ -- (-0.0661,-0.4032)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4610, 0.0967)
+ -- ( 0.4896, 0.0909)
+ -- ( 0.4790, 0.0384)
+ -- ( 0.4503, 0.0442)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4610, 0.0967)
+ -- ( 0.4896, 0.0909)
+ -- ( 0.4790, 0.0384)
+ -- ( 0.4503, 0.0442)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1944,-0.4810)
+ -- (-0.1500,-0.4925)
+ -- (-0.1653,-0.5515)
+ -- (-0.2097,-0.5399)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1944,-0.4810)
+ -- (-0.1500,-0.4925)
+ -- (-0.1653,-0.5515)
+ -- (-0.2097,-0.5399)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2924,-0.1375)
+ -- ( 0.3110,-0.0955)
+ -- ( 0.3667,-0.1202)
+ -- ( 0.3481,-0.1621)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2924,-0.1375)
+ -- ( 0.3110,-0.0955)
+ -- ( 0.3667,-0.1202)
+ -- ( 0.3481,-0.1621)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3062, 0.5810)
+ -- (-0.2635, 0.5641)
+ -- (-0.2859, 0.5075)
+ -- (-0.3285, 0.5243)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3062, 0.5810)
+ -- (-0.2635, 0.5641)
+ -- (-0.2859, 0.5075)
+ -- (-0.3285, 0.5243)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0310,-0.4661)
+ -- ( 0.0449,-0.4224)
+ -- ( 0.1029,-0.4409)
+ -- ( 0.0889,-0.4846)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0310,-0.4661)
+ -- ( 0.0449,-0.4224)
+ -- ( 0.1029,-0.4409)
+ -- ( 0.0889,-0.4846)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1523,-0.2013)
+ -- ( 0.1718,-0.1598)
+ -- ( 0.2270,-0.1857)
+ -- ( 0.2075,-0.2272)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1523,-0.2013)
+ -- ( 0.1718,-0.1598)
+ -- ( 0.2270,-0.1857)
+ -- ( 0.2075,-0.2272)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0857,-0.3676)
+ -- ( 0.1052,-0.3261)
+ -- ( 0.1603,-0.3520)
+ -- ( 0.1409,-0.3935)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0857,-0.3676)
+ -- ( 0.1052,-0.3261)
+ -- ( 0.1603,-0.3520)
+ -- ( 0.1409,-0.3935)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0204,-0.2046)
+ -- ( 0.0398,-0.1631)
+ -- ( 0.0950,-0.1890)
+ -- ( 0.0755,-0.2305)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0204,-0.2046)
+ -- ( 0.0398,-0.1631)
+ -- ( 0.0950,-0.1890)
+ -- ( 0.0755,-0.2305)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5094, 0.3292)
+ -- ( 0.5505, 0.3494)
+ -- ( 0.5773, 0.2947)
+ -- ( 0.5362, 0.2746)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5094, 0.3292)
+ -- ( 0.5505, 0.3494)
+ -- ( 0.5773, 0.2947)
+ -- ( 0.5362, 0.2746)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0647, 0.4710)
+ -- (-0.0215, 0.4559)
+ -- (-0.0416, 0.3984)
+ -- (-0.0848, 0.4135)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0647, 0.4710)
+ -- (-0.0215, 0.4559)
+ -- (-0.0416, 0.3984)
+ -- (-0.0848, 0.4135)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1476,-0.3704)
+ -- (-0.1403,-0.3251)
+ -- (-0.0802,-0.3347)
+ -- (-0.0873,-0.3799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1476,-0.3704)
+ -- (-0.1403,-0.3251)
+ -- (-0.0802,-0.3347)
+ -- (-0.0873,-0.3799)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0755, 0.3210)
+ -- (-0.0531, 0.3610)
+ -- ( 0.0001, 0.3312)
+ -- (-0.0224, 0.2912)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0755, 0.3210)
+ -- (-0.0531, 0.3610)
+ -- ( 0.0001, 0.3312)
+ -- (-0.0224, 0.2912)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1354, 0.0442)
+ -- (-0.1129, 0.0842)
+ -- (-0.0599, 0.0544)
+ -- (-0.0823, 0.0144)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1354, 0.0442)
+ -- (-0.1129, 0.0842)
+ -- (-0.0599, 0.0544)
+ -- (-0.0823, 0.0144)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1672,-0.0608)
+ -- (-0.1524,-0.0175)
+ -- (-0.0948,-0.0371)
+ -- (-0.1096,-0.0805)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1672,-0.0608)
+ -- (-0.1524,-0.0175)
+ -- (-0.0948,-0.0371)
+ -- (-0.1096,-0.0805)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0920,-0.6296)
+ -- ( 0.1069,-0.5863)
+ -- ( 0.1645,-0.6060)
+ -- ( 0.1497,-0.6493)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0920,-0.6296)
+ -- ( 0.1069,-0.5863)
+ -- ( 0.1645,-0.6060)
+ -- ( 0.1497,-0.6493)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4115,-0.5373)
+ -- ( 0.4390,-0.5006)
+ -- ( 0.4877,-0.5372)
+ -- ( 0.4601,-0.5739)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4115,-0.5373)
+ -- ( 0.4390,-0.5006)
+ -- ( 0.4877,-0.5372)
+ -- ( 0.4601,-0.5739)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3095, 0.1272)
+ -- ( 0.3519, 0.1095)
+ -- ( 0.3284, 0.0533)
+ -- ( 0.2861, 0.0710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3095, 0.1272)
+ -- ( 0.3519, 0.1095)
+ -- ( 0.3284, 0.0533)
+ -- ( 0.2861, 0.0710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3558, 0.0291)
+ -- (-0.3124, 0.0144)
+ -- (-0.3318,-0.0433)
+ -- (-0.3753,-0.0287)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3558, 0.0291)
+ -- (-0.3124, 0.0144)
+ -- (-0.3318,-0.0433)
+ -- (-0.3753,-0.0287)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2904, 0.2714)
+ -- ( 0.3361, 0.2681)
+ -- ( 0.3318, 0.2074)
+ -- ( 0.2861, 0.2106)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2904, 0.2714)
+ -- ( 0.3361, 0.2681)
+ -- ( 0.3318, 0.2074)
+ -- ( 0.2861, 0.2106)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0124, 0.1558)
+ -- ( 0.0333, 0.1525)
+ -- ( 0.0290, 0.0918)
+ -- (-0.0167, 0.0950)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0124, 0.1558)
+ -- ( 0.0333, 0.1525)
+ -- ( 0.0290, 0.0918)
+ -- (-0.0167, 0.0950)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4665, 0.4396)
+ -- ( 0.4868, 0.3985)
+ -- ( 0.4321, 0.3716)
+ -- ( 0.4119, 0.4127)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4665, 0.4396)
+ -- ( 0.4868, 0.3985)
+ -- ( 0.4321, 0.3716)
+ -- ( 0.4119, 0.4127)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2433,-0.1480)
+ -- (-0.2141,-0.1472)
+ -- (-0.2127,-0.2008)
+ -- (-0.2419,-0.2015)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2433,-0.1480)
+ -- (-0.2141,-0.1472)
+ -- (-0.2127,-0.2008)
+ -- (-0.2419,-0.2015)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4187, 0.2523)
+ -- ( 0.4643, 0.2574)
+ -- ( 0.4711, 0.1969)
+ -- ( 0.4256, 0.1917)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4187, 0.2523)
+ -- ( 0.4643, 0.2574)
+ -- ( 0.4711, 0.1969)
+ -- ( 0.4256, 0.1917)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2599,-0.2379)
+ -- (-0.2164,-0.2525)
+ -- (-0.2358,-0.3102)
+ -- (-0.2793,-0.2955)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2599,-0.2379)
+ -- (-0.2164,-0.2525)
+ -- (-0.2358,-0.3102)
+ -- (-0.2793,-0.2955)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0167, 0.0438)
+ -- ( 0.0385, 0.0365)
+ -- ( 0.0301, 0.0113)
+ -- ( 0.0082, 0.0187)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.0167, 0.0438)
+ -- ( 0.0385, 0.0365)
+ -- ( 0.0301, 0.0113)
+ -- ( 0.0082, 0.0187)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2901,-0.1193)
+ -- (-0.2450,-0.1273)
+ -- (-0.2556,-0.1872)
+ -- (-0.3008,-0.1792)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.2901,-0.1193)
+ -- (-0.2450,-0.1273)
+ -- (-0.2556,-0.1872)
+ -- (-0.3008,-0.1792)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1275,-0.0001)
+ -- ( 0.1734,-0.0022)
+ -- ( 0.1707,-0.0630)
+ -- ( 0.1248,-0.0610)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.1275,-0.0001)
+ -- ( 0.1734,-0.0022)
+ -- ( 0.1707,-0.0630)
+ -- ( 0.1248,-0.0610)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0645,-0.5272)
+ -- (-0.0415,-0.5245)
+ -- (-0.0383,-0.5509)
+ -- (-0.0612,-0.5536)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.0645,-0.5272)
+ -- (-0.0415,-0.5245)
+ -- (-0.0383,-0.5509)
+ -- (-0.0612,-0.5536)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3209, 0.2176)
+ -- (-0.2989, 0.2105)
+ -- (-0.3069, 0.1853)
+ -- (-0.3289, 0.1923)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3209, 0.2176)
+ -- (-0.2989, 0.2105)
+ -- (-0.3069, 0.1853)
+ -- (-0.3289, 0.1923)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3746, 0.1600)
+ -- ( 0.4021, 0.1699)
+ -- ( 0.4204, 0.1195)
+ -- ( 0.3929, 0.1095)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3746, 0.1600)
+ -- ( 0.4021, 0.1699)
+ -- ( 0.4204, 0.1195)
+ -- ( 0.3929, 0.1095)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/tree.dtx b/macros/latex/contrib/wargame/source/hex/terrain/tree.dtx
new file mode 100644
index 0000000000..93c2987227
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/tree.dtx
@@ -0,0 +1,31 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/tree}
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/tree/.pic={
+ \path[draw,very thick,pic actions]
+ (-.15,.0)
+ arc (269:135:.1)
+ arc (215: 90:.1)
+ arc (180: 45:.1)
+ arc (135: 0:.1)
+ arc ( 90:-45:.1)
+ arc ( 45:-90:.1)
+ (-.15,.025)
+ arc (60:-60:.25)
+ arc (150:30:.075)
+ arc (150:30:.075)
+ arc (150:30:.075)
+ arc (-120:-240:.25);
+
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/village.dtx b/macros/latex/contrib/wargame/source/hex/terrain/village.dtx
new file mode 100644
index 0000000000..837b92642c
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/village.dtx
@@ -0,0 +1,352 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/town/road,
+% hex/terrain/town/small road,
+% hex/terrain/town/house}
+% For villages, towns, and cities, we need three styles: one for
+% houses, and separate styles for regular and small roads. Note
+% that we draw using the stroke colour for roads and houses.
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/town/road/.style={
+ fill=none,
+ draw=gray!50!black,
+ scale line widths,
+ line width=.3mm
+ },
+ hex/terrain/town/small road/.style={
+ fill=none,
+ draw=gray!75!black,
+ scale line widths,
+ line width=.15mm
+ },
+ hex/terrain/town/post road/.style={
+ fill=none
+ },
+ hex/terrain/town/house/.style={
+ draw=none,
+ fill=gray!75!black,
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+%
+% \begin{TikzKey}{hex/terrain/village}
+% Now for village, town, and city patterns.
+%
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/village/.pic={
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.0073, 0.8700)
+ -- ( 0.3952, 0.3373)
+ -- ( 0.3884, 0.2029)
+ -- ( 0.3555, 0.1378)
+ -- ( 0.3751, 0.0880)
+ -- ( 0.2513,-0.1997)
+ -- ( 0.1396,-0.4505)
+ -- ( 0.0641,-0.6512)
+ -- ( 0.0070,-0.8700)
+ -- ( 0.0070,-0.8700)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.7575, 0.4367)
+ -- ( 0.3945, 0.3375)
+ -- ( 0.3945, 0.3375)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.1900,-0.0806)
+ -- (-0.1155, 0.1588)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.1308, 0.1580)
+ -- (-0.7603, 0.4394)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.6615,-0.2309)
+ -- (-0.6777,-0.3255)
+ -- (-0.7607,-0.4327)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ (-0.6676,-0.2405)
+ -- (-0.4599,-0.1067)
+ -- (-0.1877,-0.0679)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.2082,-0.3003)
+ -- ( 0.4578,-0.4855)
+ -- ( 0.5914,-0.3675)
+ -- ( 0.7607,-0.4420)
+ ;
+ \path[hex/terrain/town/road,pic actions,hex/terrain/town/post road]
+ ( 0.3827, 0.1864)
+ -- (-0.1290, 0.1576)
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2259, 0.4898)
+ -- ( 0.2453, 0.4680)
+ -- ( 0.2052, 0.4324)
+ -- ( 0.1858, 0.4542)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2259, 0.4898)
+ -- ( 0.2453, 0.4680)
+ -- ( 0.2052, 0.4324)
+ -- ( 0.1858, 0.4542)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1978, 0.1663)
+ -- (-0.1534, 0.1549)
+ -- (-0.1685, 0.0960)
+ -- (-0.2130, 0.1074)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1978, 0.1663)
+ -- (-0.1534, 0.1549)
+ -- (-0.1685, 0.0960)
+ -- (-0.2130, 0.1074)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5127,-0.3559)
+ -- ( 0.5341,-0.3759)
+ -- ( 0.4975,-0.4151)
+ -- ( 0.4761,-0.3951)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5127,-0.3559)
+ -- ( 0.5341,-0.3759)
+ -- ( 0.4975,-0.4151)
+ -- ( 0.4761,-0.3951)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2761, 0.3992)
+ -- ( 0.2947, 0.3765)
+ -- ( 0.2533, 0.3425)
+ -- ( 0.2347, 0.3651)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2761, 0.3992)
+ -- ( 0.2947, 0.3765)
+ -- ( 0.2533, 0.3425)
+ -- ( 0.2347, 0.3651)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3227, 0.3548)
+ -- ( 0.3421, 0.3329)
+ -- ( 0.3020, 0.2974)
+ -- ( 0.2826, 0.3192)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3227, 0.3548)
+ -- ( 0.3421, 0.3329)
+ -- ( 0.3020, 0.2974)
+ -- ( 0.2826, 0.3192)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2901, 0.6234)
+ -- ( 0.3088, 0.6008)
+ -- ( 0.2674, 0.5667)
+ -- ( 0.2487, 0.5893)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2901, 0.6234)
+ -- ( 0.3088, 0.6008)
+ -- ( 0.2674, 0.5667)
+ -- ( 0.2487, 0.5893)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3456, 0.2854)
+ -- (-0.3335, 0.3120)
+ -- (-0.2847, 0.2898)
+ -- (-0.2968, 0.2632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.3456, 0.2854)
+ -- (-0.3335, 0.3120)
+ -- (-0.2847, 0.2898)
+ -- (-0.2968, 0.2632)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6678,-0.1369)
+ -- (-0.6492,-0.1143)
+ -- (-0.6078,-0.1484)
+ -- (-0.6264,-0.1710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.6678,-0.1369)
+ -- (-0.6492,-0.1143)
+ -- (-0.6078,-0.1484)
+ -- (-0.6264,-0.1710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4610, 0.0967)
+ -- ( 0.4896, 0.0909)
+ -- ( 0.4790, 0.0384)
+ -- ( 0.4503, 0.0442)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4610, 0.0967)
+ -- ( 0.4896, 0.0909)
+ -- ( 0.4790, 0.0384)
+ -- ( 0.4503, 0.0442)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2924,-0.1375)
+ -- ( 0.3110,-0.0955)
+ -- ( 0.3667,-0.1202)
+ -- ( 0.3481,-0.1621)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2924,-0.1375)
+ -- ( 0.3110,-0.0955)
+ -- ( 0.3667,-0.1202)
+ -- ( 0.3481,-0.1621)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5094, 0.3292)
+ -- ( 0.5505, 0.3494)
+ -- ( 0.5773, 0.2947)
+ -- ( 0.5362, 0.2746)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.5094, 0.3292)
+ -- ( 0.5505, 0.3494)
+ -- ( 0.5773, 0.2947)
+ -- ( 0.5362, 0.2746)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1323, 0.2640)
+ -- (-0.0890, 0.2489)
+ -- (-0.1092, 0.1914)
+ -- (-0.1524, 0.2065)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ (-0.1323, 0.2640)
+ -- (-0.0890, 0.2489)
+ -- (-0.1092, 0.1914)
+ -- (-0.1524, 0.2065)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4115,-0.5373)
+ -- ( 0.4390,-0.5006)
+ -- ( 0.4877,-0.5372)
+ -- ( 0.4601,-0.5739)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4115,-0.5373)
+ -- ( 0.4390,-0.5006)
+ -- ( 0.4877,-0.5372)
+ -- ( 0.4601,-0.5739)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3095, 0.1272)
+ -- ( 0.3519, 0.1095)
+ -- ( 0.3284, 0.0533)
+ -- ( 0.2861, 0.0710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3095, 0.1272)
+ -- ( 0.3519, 0.1095)
+ -- ( 0.3284, 0.0533)
+ -- ( 0.2861, 0.0710)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2904, 0.2714)
+ -- ( 0.3361, 0.2681)
+ -- ( 0.3318, 0.2074)
+ -- ( 0.2861, 0.2106)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.2904, 0.2714)
+ -- ( 0.3361, 0.2681)
+ -- ( 0.3318, 0.2074)
+ -- ( 0.2861, 0.2106)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4665, 0.4396)
+ -- ( 0.4868, 0.3985)
+ -- ( 0.4321, 0.3716)
+ -- ( 0.4119, 0.4127)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4665, 0.4396)
+ -- ( 0.4868, 0.3985)
+ -- ( 0.4321, 0.3716)
+ -- ( 0.4119, 0.4127)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4187, 0.2523)
+ -- ( 0.4643, 0.2574)
+ -- ( 0.4711, 0.1969)
+ -- ( 0.4256, 0.1917)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.4187, 0.2523)
+ -- ( 0.4643, 0.2574)
+ -- ( 0.4711, 0.1969)
+ -- ( 0.4256, 0.1917)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3746, 0.1600)
+ -- ( 0.4021, 0.1699)
+ -- ( 0.4204, 0.1195)
+ -- ( 0.3929, 0.1095)
+ --cycle
+ ;
+ \path[hex/terrain/town/house,pic actions]
+ ( 0.3746, 0.1600)
+ -- ( 0.4021, 0.1699)
+ -- ( 0.4204, 0.1195)
+ -- ( 0.3929, 0.1095)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/terrain/woods.dtx b/macros/latex/contrib/wargame/source/hex/terrain/woods.dtx
new file mode 100644
index 0000000000..9b0d08499b
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/terrain/woods.dtx
@@ -0,0 +1,1011 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+% \begin{TikzKey}{hex/terrain/woods}
+% The style for woods. The pattern is filled with a darker green,
+% and outlines are not drawn.
+%
+% \begin{macrocode}
+\tikzset{
+ hex/terrain/woods/.style={
+ draw=none,
+ fill={rgb,100:red,27;green,67;blue,27}
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{hex/terrain/woods}
+% Regular woods.
+%
+% \begin{macrocode}
+\ifhex@terrain@pic
+\tikzset{
+ hex/terrain/woods/.pic={
+ \path[hex/terrain/woods,pic actions,draw=none]
+ (-0.2656, 0.8694)
+ .. controls (-0.3133, 0.8640) and (-0.3608, 0.8400) .. (-0.3541, 0.8219)
+ .. controls (-0.3417, 0.7629) and (-0.2512, 0.7779) .. (-0.2082, 0.7875)
+ -- (-0.2424, 0.6937)
+ .. controls (-0.2916, 0.7000) and (-0.3535, 0.6915) .. (-0.3950, 0.6606)
+ .. controls (-0.4299, 0.6330) and (-0.4373, 0.5909) .. (-0.3950, 0.5657)
+ .. controls (-0.4092, 0.5022) and (-0.3694, 0.4908) .. (-0.3191, 0.4633)
+ .. controls (-0.3291, 0.3852) and (-0.2535, 0.3866) .. (-0.2935, 0.4633)
+ .. controls (-0.2488, 0.4801) and (-0.2488, 0.5071) .. (-0.2778, 0.5156)
+ .. controls (-0.2888, 0.5201) and (-0.3300, 0.5153) .. (-0.3447, 0.5156)
+ -- (-0.3191, 0.6255)
+ -- (-0.2680, 0.6425)
+ -- (-0.2253, 0.5657)
+ .. controls (-0.2136, 0.5780) and (-0.2023, 0.5853) .. (-0.2092, 0.6046)
+ .. controls (-0.2132, 0.6161) and (-0.2403, 0.6366) .. (-0.2260, 0.6502)
+ .. controls (-0.2044, 0.6711) and (-0.1779, 0.6203) .. (-0.1564, 0.6147)
+ .. controls (-0.1363, 0.6094) and (-0.1262, 0.6240) .. (-0.1328, 0.6430)
+ .. controls (-0.1449, 0.6778) and (-0.1661, 0.6737) .. (-0.1741, 0.7278)
+ .. controls (-0.1213, 0.6943) and (-0.1063, 0.7287) .. (-0.1485, 0.7534)
+ -- (-0.1058, 0.7875)
+ -- (-0.0718, 0.7789)
+ -- (-0.0633, 0.8046)
+ .. controls (-0.0937, 0.8085) and (-0.0917, 0.8079) .. (-0.1143, 0.7875)
+ -- (-0.1311, 0.8194)
+ .. controls (-0.0764, 0.8223) and (-0.0450, 0.8485) .. (-0.0671, 0.8554)
+ .. controls (-0.1156, 0.8701) and (-0.1015, 0.8233) .. (-0.1806, 0.8398)
+ .. controls (-0.1900, 0.8580) and (-0.2089, 0.8664) .. (-0.2307, 0.8694)
+ --cycle
+ ( 0.3814, 0.8694)
+ .. controls ( 0.3767, 0.8683) and ( 0.3712, 0.8666) .. ( 0.3632, 0.8643)
+ -- ( 0.3974, 0.8387)
+ .. controls ( 0.3974, 0.8591) and ( 0.3972, 0.8674) .. ( 0.3911, 0.8694)
+ --cycle
+ (-0.2452, 0.8541)
+ .. controls (-0.2324, 0.8571) and (-0.2266, 0.8501) .. (-0.2079, 0.8422)
+ -- (-0.2167, 0.8284)
+ .. controls (-0.2397, 0.8309) and (-0.2848, 0.8202) .. (-0.2983, 0.8284)
+ .. controls (-0.3215, 0.8378) and (-0.2860, 0.8342) .. (-0.2614, 0.8473)
+ .. controls (-0.2547, 0.8509) and (-0.2496, 0.8531) .. (-0.2452, 0.8541)
+ --cycle
+ (-0.4331, 0.8427)
+ .. controls (-0.4534, 0.8538) and (-0.5066, 0.7937) .. (-0.5170, 0.7773)
+ .. controls (-0.5802, 0.6871) and (-0.6279, 0.5503) .. (-0.6704, 0.5650)
+ .. controls (-0.6703, 0.5117) and (-0.7322, 0.4917) .. (-0.7340, 0.4547)
+ .. controls (-0.7365, 0.4053) and (-0.6948, 0.3832) .. (-0.6621, 0.3593)
+ .. controls (-0.6271, 0.3335) and (-0.6254, 0.2860) .. (-0.5409, 0.3014)
+ -- (-0.5409, 0.3184)
+ -- (-0.5750, 0.3099)
+ -- (-0.5836, 0.3524)
+ -- (-0.4898, 0.3184)
+ -- (-0.5068, 0.3696)
+ .. controls (-0.4593, 0.3586) and (-0.4552, 0.3659) .. (-0.4214, 0.3269)
+ .. controls (-0.3754, 0.3528) and (-0.3794, 0.4022) .. (-0.4295, 0.4177)
+ .. controls (-0.4450, 0.4224) and (-0.4931, 0.4354) .. (-0.5068, 0.4333)
+ .. controls (-0.5383, 0.4284) and (-0.6200, 0.3557) .. (-0.6774, 0.4548)
+ -- (-0.6432, 0.4548)
+ -- (-0.6603, 0.4975)
+ .. controls (-0.6019, 0.4851) and (-0.6021, 0.5053) .. (-0.5921, 0.5572)
+ .. controls (-0.4969, 0.5307) and (-0.5431, 0.5224) .. (-0.4812, 0.4890)
+ .. controls (-0.4749, 0.5293) and (-0.4896, 0.5637) .. (-0.5068, 0.5998)
+ .. controls (-0.4948, 0.6064) and (-0.4850, 0.6107) .. (-0.4746, 0.6204)
+ .. controls (-0.4177, 0.6740) and (-0.4877, 0.7151) .. (-0.5154, 0.6423)
+ .. controls (-0.5225, 0.6240) and (-0.5189, 0.6174) .. (-0.5154, 0.5998)
+ -- (-0.5889, 0.6190)
+ .. controls (-0.5889, 0.6190) and (-0.5470, 0.6607) .. (-0.5396, 0.6879)
+ .. controls (-0.5254, 0.7392) and (-0.4740, 0.7624) .. (-0.4378, 0.7960)
+ .. controls (-0.4256, 0.8071) and (-0.3322, 0.7872) .. (-0.4331, 0.8427)
+ --cycle
+ ( 0.1374, 0.8418)
+ .. controls ( 0.1320, 0.8428) and ( 0.1261, 0.8424) .. ( 0.1202, 0.8403)
+ .. controls ( 0.1031, 0.8066) and ( 0.1641, 0.7460) .. ( 0.1812, 0.7545)
+ .. controls ( 0.1999, 0.7639) and ( 0.1758, 0.8354) .. ( 0.1374, 0.8418)
+ --cycle
+ (-0.0462, 0.8217)
+ -- (-0.0462, 0.7789)
+ -- (-0.0121, 0.7961)
+ --cycle
+ ( 0.3717, 0.8217)
+ -- ( 0.3717, 0.8046)
+ -- ( 0.4059, 0.7961)
+ -- ( 0.4144, 0.8217)
+ --cycle
+ ( 0.4898, 0.8122)
+ .. controls ( 0.4741, 0.8124) and ( 0.4748, 0.7893) .. ( 0.4981, 0.7754)
+ .. controls ( 0.5017, 0.7550) and ( 0.5313, 0.6452) .. ( 0.5686, 0.6689)
+ .. controls ( 0.5928, 0.6844) and ( 0.5339, 0.7103) .. ( 0.5653, 0.7412)
+ .. controls ( 0.5710, 0.7471) and ( 0.5728, 0.7507) .. ( 0.5731, 0.7536)
+ -- ( 0.5703, 0.7583)
+ .. controls ( 0.5582, 0.7647) and ( 0.5121, 0.7531) .. ( 0.5343, 0.7796)
+ .. controls ( 0.5145, 0.8036) and ( 0.4992, 0.8122) .. ( 0.4898, 0.8122)
+ --cycle
+ ( 0.3291, 0.7997)
+ .. controls ( 0.3112, 0.7975) and ( 0.2934, 0.7843) .. ( 0.2780, 0.7757)
+ .. controls ( 0.2235, 0.7455) and ( 0.1913, 0.7199) .. ( 0.2438, 0.6595)
+ .. controls ( 0.2287, 0.6542) and ( 0.2176, 0.6521) .. ( 0.2063, 0.6389)
+ .. controls ( 0.1704, 0.5968) and ( 0.2192, 0.5413) .. ( 0.2430, 0.5712)
+ .. controls ( 0.2494, 0.5791) and ( 0.2509, 0.6061) .. ( 0.2523, 0.6170)
+ .. controls ( 0.2545, 0.6376) and ( 0.2547, 0.6388) .. ( 0.2523, 0.6595)
+ -- ( 0.2865, 0.6681)
+ .. controls ( 0.3094, 0.6426) and ( 0.3194, 0.6608) .. ( 0.3291, 0.6852)
+ -- ( 0.2865, 0.6937)
+ .. controls ( 0.3061, 0.7101) and ( 0.3276, 0.7308) .. ( 0.3547, 0.7322)
+ .. controls ( 0.3792, 0.7335) and ( 0.4787, 0.6707) .. ( 0.4596, 0.7446)
+ .. controls ( 0.4487, 0.7866) and ( 0.4132, 0.7751) .. ( 0.3912, 0.7800)
+ .. controls ( 0.3681, 0.7853) and ( 0.3549, 0.8026) .. ( 0.3291, 0.7997)
+ --cycle
+ ( 0.0971, 0.7996)
+ .. controls ( 0.0971, 0.7996) and (-0.0371, 0.7713) .. (-0.0393, 0.7247)
+ .. controls (-0.0408, 0.6927) and ( 0.0217, 0.7175) .. ( 0.0521, 0.7277)
+ .. controls ( 0.0789, 0.7366) and ( 0.0971, 0.7996) .. ( 0.0971, 0.7996)
+ --cycle
+ (-0.1571, 0.7961)
+ -- (-0.1485, 0.7961)
+ -- (-0.1485, 0.7875)
+ -- (-0.1400, 0.7875)
+ -- (-0.1400, 0.7789)
+ -- (-0.1485, 0.7875)
+ --cycle
+ (-0.3689, 0.7733)
+ .. controls (-0.3791, 0.7835) and (-0.4247, 0.7612) .. (-0.4247, 0.7612)
+ .. controls (-0.4247, 0.7612) and (-0.4258, 0.7138) .. (-0.4104, 0.7184)
+ .. controls (-0.3965, 0.7227) and (-0.3586, 0.7631) .. (-0.3689, 0.7733)
+ --cycle
+ ( 0.3462, 0.7278)
+ -- ( 0.3462, 0.6766)
+ -- ( 0.3804, 0.7107)
+ --cycle
+ ( 0.1142, 0.7077)
+ .. controls ( 0.1016, 0.7065) and ( 0.0878, 0.7029) .. ( 0.0733, 0.6974)
+ .. controls ( 0.0595, 0.6920) and ( 0.0449, 0.6883) .. ( 0.0332, 0.6789)
+ .. controls ( 0.0192, 0.6678) and ( 0.0113, 0.6500) .. ( 0.0014, 0.6354)
+ .. controls (-0.0079, 0.6219) and (-0.0221, 0.6074) .. (-0.0243, 0.5905)
+ .. controls (-0.0267, 0.5713) and ( 0.0128, 0.4923) .. ( 0.0326, 0.4877)
+ .. controls ( 0.0455, 0.4824) and ( 0.0530, 0.4866) .. ( 0.0647, 0.4877)
+ .. controls ( 0.0870, 0.4591) and ( 0.0975, 0.4638) .. ( 0.1331, 0.4633)
+ .. controls ( 0.1499, 0.4110) and ( 0.1908, 0.4198) .. ( 0.1671, 0.4890)
+ .. controls ( 0.1267, 0.5142) and ( 0.1094, 0.5105) .. ( 0.0647, 0.4975)
+ .. controls ( 0.0889, 0.5509) and ( 0.0981, 0.5486) .. ( 0.0733, 0.6084)
+ .. controls ( 0.1221, 0.6144) and ( 0.1333, 0.6047) .. ( 0.1415, 0.6510)
+ -- ( 0.1927, 0.6425)
+ .. controls ( 0.1814, 0.6932) and ( 0.1526, 0.7111) .. ( 0.1142, 0.7077)
+ --cycle
+ ( 0.1671, 0.4890)
+ -- ( 0.2182, 0.4890)
+ .. controls ( 0.2474, 0.4580) and ( 0.2982, 0.5061) .. ( 0.2981, 0.5238)
+ .. controls ( 0.2981, 0.5425) and ( 0.2721, 0.5720) .. ( 0.2418, 0.5318)
+ -- ( 0.2182, 0.4975)
+ .. controls ( 0.1923, 0.5152) and ( 0.1850, 0.5158) .. ( 0.1671, 0.4890)
+ --cycle
+ (-0.1058, 0.6937)
+ -- (-0.0973, 0.6595)
+ -- (-0.0802, 0.6595)
+ -- (-0.0718, 0.6937)
+ --cycle
+ ( 0.3889, 0.6852)
+ .. controls ( 0.3954, 0.6469) and ( 0.4108, 0.6416) .. ( 0.4314, 0.6766)
+ --cycle
+ ( 0.4826, 0.6852)
+ -- ( 0.4562, 0.6475)
+ .. controls ( 0.4460, 0.6335) and ( 0.4249, 0.5852) .. ( 0.4639, 0.5976)
+ .. controls ( 0.4953, 0.6076) and ( 0.5058, 0.6583) .. ( 0.4998, 0.6852)
+ --cycle
+ (-0.0879, 0.6326)
+ .. controls (-0.1189, 0.6139) and (-0.0956, 0.5976) .. (-0.0822, 0.6003)
+ .. controls (-0.0699, 0.6027) and (-0.0544, 0.6253) .. (-0.0879, 0.6326)
+ --cycle
+ ( 0.3034, 0.6255)
+ -- ( 0.2694, 0.6170)
+ -- ( 0.2694, 0.5998)
+ -- ( 0.3034, 0.5913)
+ --cycle
+ ( 0.6085, 0.6015)
+ .. controls ( 0.5969, 0.6043) and ( 0.5796, 0.6004) .. ( 0.5688, 0.5964)
+ .. controls ( 0.5189, 0.5780) and ( 0.5216, 0.5317) .. ( 0.5338, 0.4890)
+ .. controls ( 0.5892, 0.5200) and ( 0.5513, 0.5451) .. ( 0.6191, 0.5657)
+ .. controls ( 0.6318, 0.5296) and ( 0.6176, 0.4979) .. ( 0.6703, 0.5572)
+ .. controls ( 0.6580, 0.5662) and ( 0.6196, 0.5989) .. ( 0.6085, 0.6015)
+ --cycle
+ ( 0.6703, 0.5572)
+ .. controls ( 0.6650, 0.4639) and ( 0.7377, 0.4434) .. ( 0.6703, 0.5572)
+ --cycle
+ ( 0.2950, 0.5828)
+ -- ( 0.3034, 0.5487)
+ -- ( 0.3206, 0.5487)
+ -- ( 0.3291, 0.5572)
+ -- ( 0.3291, 0.5743)
+ --cycle
+ (-0.2167, 0.5572)
+ .. controls (-0.2524, 0.4984) and (-0.2378, 0.4949) .. (-0.1997, 0.4463)
+ -- (-0.1656, 0.4548)
+ -- (-0.1656, 0.4719)
+ -- (-0.1997, 0.4804)
+ -- (-0.1997, 0.4719)
+ -- (-0.2082, 0.4804)
+ -- (-0.1997, 0.4804)
+ .. controls (-0.1944, 0.5170) and (-0.1913, 0.5288) .. (-0.2167, 0.5572)
+ --cycle
+ ( 0.4528, 0.5567)
+ .. controls ( 0.4208, 0.5591) and ( 0.3875, 0.5291) .. ( 0.3974, 0.4804)
+ -- ( 0.4998, 0.5146)
+ .. controls ( 0.4909, 0.5422) and ( 0.4721, 0.5552) .. ( 0.4528, 0.5567)
+ --cycle
+ (-0.5836, 0.5401)
+ .. controls (-0.5724, 0.5036) and (-0.5428, 0.4697) .. (-0.5238, 0.5231)
+ --cycle
+ (-0.0890, 0.5163)
+ .. controls (-0.1486, 0.4959) and (-0.1212, 0.4523) .. (-0.0806, 0.4615)
+ .. controls (-0.0429, 0.4702) and (-0.0388, 0.5108) .. (-0.0890, 0.5163)
+ --cycle
+ ( 0.3494, 0.5160)
+ .. controls ( 0.3442, 0.5162) and ( 0.3376, 0.5157) .. ( 0.3291, 0.5146)
+ -- ( 0.3632, 0.4804)
+ .. controls ( 0.3666, 0.5059) and ( 0.3648, 0.5149) .. ( 0.3494, 0.5160)
+ --cycle
+ ( 0.6832, 0.4635)
+ .. controls ( 0.6577, 0.4592) and ( 0.6354, 0.4224) .. ( 0.6277, 0.3866)
+ -- ( 0.6618, 0.3781)
+ .. controls ( 0.6758, 0.4215) and ( 0.6897, 0.4164) .. ( 0.7299, 0.4293)
+ .. controls ( 0.7150, 0.4573) and ( 0.6984, 0.4662) .. ( 0.6832, 0.4635)
+ --cycle
+ ( 0.3846, 0.4569)
+ .. controls ( 0.3643, 0.4547) and ( 0.3427, 0.4484) .. ( 0.3206, 0.4379)
+ .. controls ( 0.2993, 0.4278) and ( 0.2743, 0.4198) .. ( 0.2665, 0.3948)
+ .. controls ( 0.2602, 0.3747) and ( 0.2710, 0.3497) .. ( 0.2940, 0.3491)
+ .. controls ( 0.3208, 0.3484) and ( 0.3628, 0.4037) .. ( 0.4059, 0.3999)
+ .. controls ( 0.4648, 0.3948) and ( 0.4817, 0.3238) .. ( 0.5508, 0.3184)
+ -- ( 0.5594, 0.2842)
+ .. controls ( 0.6325, 0.3301) and ( 0.6184, 0.4000) .. ( 0.5253, 0.3610)
+ .. controls ( 0.4966, 0.4310) and ( 0.4457, 0.4630) .. ( 0.3846, 0.4569)
+ --cycle
+ ( 0.0020, 0.4093)
+ .. controls (-0.0096, 0.4099) and (-0.0218, 0.4039) .. (-0.0547, 0.3920)
+ .. controls (-0.0742, 0.3851) and (-0.1009, 0.3815) .. (-0.1085, 0.3591)
+ .. controls (-0.1143, 0.3413) and (-0.1036, 0.3179) .. (-0.0973, 0.3014)
+ .. controls (-0.1114, 0.2946) and (-0.1334, 0.2825) .. (-0.1485, 0.2820)
+ .. controls (-0.1767, 0.2809) and (-0.1949, 0.3055) .. (-0.2182, 0.3110)
+ .. controls (-0.2417, 0.3165) and (-0.3307, 0.2833) .. (-0.3437, 0.2635)
+ .. controls (-0.3530, 0.2471) and (-0.3474, 0.2253) .. (-0.3437, 0.2075)
+ .. controls (-0.4324, 0.1756) and (-0.3706, 0.0831) .. (-0.2765, 0.0710)
+ .. controls (-0.2795, 0.0550) and (-0.2801, 0.0364) .. (-0.2860, 0.0213)
+ .. controls (-0.2997,-0.0142) and (-0.3382,-0.0416) .. (-0.2680,-0.0825)
+ -- (-0.2424, 0.0027)
+ -- (-0.1997,-0.0143)
+ .. controls (-0.1918, 0.0295) and (-0.2082, 0.0371) .. (-0.1741, 0.0710)
+ .. controls (-0.1600, 0.0270) and (-0.1316, 0.0212) .. (-0.1230, 0.0710)
+ -- (-0.0547, 0.0710)
+ -- (-0.0547, 0.0198)
+ .. controls (-0.0089, 0.0346) and (-0.0127, 0.0528) .. (-0.0121, 0.0966)
+ .. controls ( 0.0434, 0.0981) and ( 0.0809, 0.1179) .. ( 0.0988, 0.1733)
+ -- ( 0.0561, 0.1477)
+ -- ( 0.0647, 0.1477)
+ -- ( 0.0647, 0.1392)
+ -- ( 0.0561, 0.1477)
+ -- (-0.0333, 0.1681)
+ -- (-0.0973, 0.1990)
+ .. controls (-0.1035, 0.1519) and (-0.0915, 0.1406) .. (-0.0462, 0.1307)
+ -- (-0.0547, 0.1051)
+ .. controls (-0.0809, 0.1134) and (-0.1575, 0.1376) .. (-0.1816, 0.1275)
+ .. controls (-0.1979, 0.1207) and (-0.2008, 0.1105) .. (-0.2082, 0.0966)
+ -- (-0.2765, 0.0796)
+ .. controls (-0.2913, 0.1042) and (-0.2904, 0.1037) .. (-0.3191, 0.1051)
+ -- (-0.3277, 0.1307)
+ -- (-0.3020, 0.1392)
+ -- (-0.3191, 0.1733)
+ -- (-0.2680, 0.2416)
+ .. controls (-0.2555, 0.2025) and (-0.2434, 0.1999) .. (-0.2082, 0.1819)
+ .. controls (-0.2103, 0.2198) and (-0.2204, 0.2217) .. (-0.2509, 0.2416)
+ -- (-0.1571, 0.2416)
+ -- (-0.0973, 0.1990)
+ .. controls (-0.0622, 0.2159) and (-0.0506, 0.2107) .. (-0.0376, 0.2501)
+ -- (-0.0718, 0.2672)
+ -- (-0.0121, 0.2842)
+ -- (-0.0121, 0.3014)
+ -- (-0.0462, 0.3184)
+ -- ( 0.0221, 0.3439)
+ .. controls ( 0.0070, 0.2950) and ( 0.0355, 0.2771) .. ( 0.0818, 0.2757)
+ -- ( 0.0561, 0.3354)
+ .. controls ( 0.1139, 0.3092) and ( 0.1160, 0.3517) .. ( 0.0949, 0.3683)
+ -- ( 0.0561, 0.3859)
+ .. controls ( 0.0248, 0.4010) and ( 0.0136, 0.4085) .. ( 0.0020, 0.4093)
+ --cycle
+ (-0.2680,-0.0825)
+ .. controls (-0.2752,-0.1245) and (-0.2656,-0.1332) .. (-0.2253,-0.1423)
+ .. controls (-0.2780,-0.1694) and (-0.3487,-0.1517) .. (-0.3277,-0.2360)
+ -- (-0.3958,-0.2275)
+ .. controls (-0.3850,-0.1662) and (-0.4133,-0.1372) .. (-0.4727,-0.1337)
+ -- (-0.4727,-0.0910)
+ .. controls (-0.5590,-0.0763) and (-0.5042,-0.0134) .. (-0.5750,-0.0228)
+ .. controls (-0.5589,-0.0849) and (-0.5477,-0.0819) .. (-0.5750,-0.1423)
+ .. controls (-0.6476,-0.1314) and (-0.6815,-0.1792) .. (-0.6262,-0.2360)
+ .. controls (-0.6614,-0.2507) and (-0.6863,-0.2704) .. (-0.6674,-0.3120)
+ .. controls (-0.6596,-0.3292) and (-0.6399,-0.3442) .. (-0.6461,-0.3629)
+ .. controls (-0.6528,-0.3836) and (-0.7224,-0.4151) .. (-0.6960,-0.4711)
+ .. controls (-0.6692,-0.5273) and (-0.5938,-0.5008) .. (-0.6603,-0.4579)
+ -- (-0.6262,-0.4237)
+ -- (-0.5921,-0.4579)
+ .. controls (-0.5645,-0.3552) and (-0.5902,-0.3724) .. (-0.6177,-0.2872)
+ -- (-0.5750,-0.2531)
+ -- (-0.6177,-0.2446)
+ -- (-0.6006,-0.2190)
+ .. controls (-0.5707,-0.2398) and (-0.5626,-0.2347) .. (-0.5494,-0.2019)
+ -- (-0.5836,-0.1848)
+ -- (-0.5153,-0.1592)
+ .. controls (-0.5297,-0.1903) and (-0.5326,-0.1983) .. (-0.4983,-0.2105)
+ -- (-0.4983,-0.1763)
+ .. controls (-0.4268,-0.1951) and (-0.4189,-0.2337) .. (-0.3789,-0.2872)
+ .. controls (-0.4036,-0.3020) and (-0.4028,-0.3012) .. (-0.4044,-0.3299)
+ -- (-0.3362,-0.3299)
+ .. controls (-0.3465,-0.3786) and (-0.3284,-0.3796) .. (-0.2850,-0.3811)
+ -- (-0.2850,-0.4151)
+ .. controls (-0.2401,-0.4035) and (-0.1731,-0.3767) .. (-0.1571,-0.3299)
+ .. controls (-0.1233,-0.3324) and (-0.1022,-0.3221) .. (-0.1230,-0.2872)
+ -- (-0.1143,-0.2360)
+ -- (-0.1741,-0.2531)
+ -- (-0.1741,-0.2701)
+ -- (-0.1485,-0.2787)
+ -- (-0.1571,-0.3214)
+ -- (-0.2765,-0.3640)
+ .. controls (-0.2785,-0.3286) and (-0.2853,-0.3271) .. (-0.3191,-0.3214)
+ -- (-0.3191,-0.3299)
+ -- (-0.3277,-0.3214)
+ -- (-0.3191,-0.3214)
+ .. controls (-0.3191,-0.3214) and (-0.2922,-0.3221) .. (-0.2850,-0.3128)
+ .. controls (-0.2781,-0.3038) and (-0.2850,-0.2787) .. (-0.2850,-0.2787)
+ .. controls (-0.2850,-0.2462) and (-0.2522,-0.2669) .. (-0.2424,-0.2360)
+ -- (-0.2935,-0.2360)
+ -- (-0.2509,-0.2019)
+ -- (-0.2424,-0.2360)
+ .. controls (-0.1852,-0.2624) and (-0.2046,-0.2259) .. (-0.1740,-0.2170)
+ .. controls (-0.1599,-0.2119) and (-0.1427,-0.2266) .. (-0.1281,-0.2170)
+ .. controls (-0.1166,-0.2109) and (-0.1070,-0.1747) .. (-0.1656,-0.1848)
+ -- (-0.2082,-0.0228)
+ -- (-0.2253,-0.0228)
+ .. controls (-0.2307,-0.0463) and (-0.2347,-0.0485) .. (-0.2167,-0.0654)
+ -- (-0.2253,-0.0910)
+ --cycle
+ ( 0.7385, 0.3781)
+ .. controls ( 0.7464, 0.3334) and ( 0.7712, 0.3235) .. ( 0.7897, 0.3696)
+ --cycle
+ ( 0.3825, 0.3684)
+ .. controls ( 0.3722, 0.3709) and ( 0.3598, 0.3638) .. ( 0.3547, 0.3341)
+ -- ( 0.3712, 0.3341)
+ .. controls ( 0.4107, 0.3328) and ( 0.3998, 0.3641) .. ( 0.3825, 0.3684)
+ --cycle
+ ( 0.3547, 0.3341)
+ -- ( 0.3034, 0.3280)
+ .. controls ( 0.2587, 0.3223) and ( 0.2449, 0.3331) .. ( 0.2267, 0.2842)
+ -- ( 0.1515, 0.2970)
+ .. controls ( 0.1395, 0.3001) and ( 0.1217, 0.3113) .. ( 0.1096, 0.3062)
+ .. controls ( 0.0947, 0.3000) and ( 0.0955, 0.2804) .. ( 0.0944, 0.2671)
+ .. controls ( 0.0897, 0.2118) and ( 0.0889, 0.2059) .. ( 0.1158, 0.1563)
+ -- ( 0.1331, 0.1563)
+ -- ( 0.1415, 0.1648)
+ -- ( 0.1415, 0.2501)
+ -- ( 0.2449, 0.2446)
+ .. controls ( 0.2870, 0.2248) and ( 0.2549, 0.1801) .. ( 0.3376, 0.1733)
+ -- ( 0.3376, 0.2245)
+ -- ( 0.3889, 0.2075)
+ .. controls ( 0.3692, 0.2680) and ( 0.3319, 0.2493) .. ( 0.3034, 0.2928)
+ .. controls ( 0.3440, 0.2858) and ( 0.3561, 0.2934) .. ( 0.3547, 0.3341)
+ --cycle
+ ( 0.4285, 0.3341)
+ .. controls ( 0.4111, 0.3048) and ( 0.4418, 0.2997) .. ( 0.4508, 0.3082)
+ .. controls ( 0.4603, 0.3170) and ( 0.4582, 0.3376) .. ( 0.4285, 0.3341)
+ --cycle
+ ( 0.7199, 0.3309)
+ .. controls ( 0.7120, 0.3311) and ( 0.7041, 0.3301) .. ( 0.6963, 0.3276)
+ .. controls ( 0.6516, 0.3141) and ( 0.5998, 0.2127) .. ( 0.6788, 0.2075)
+ -- ( 0.6874, 0.1819)
+ .. controls ( 0.6908, 0.1882) and ( 0.6948, 0.1871) .. ( 0.6958, 0.2009)
+ .. controls ( 0.6967, 0.2152) and ( 0.6850, 0.2341) .. ( 0.6875, 0.2482)
+ .. controls ( 0.6912, 0.2697) and ( 0.7185, 0.2790) .. ( 0.7404, 0.2558)
+ -- ( 0.7556, 0.2330)
+ .. controls ( 0.8209, 0.2699) and ( 0.7743, 0.3292) .. ( 0.7199, 0.3309)
+ --cycle
+ (-0.4641, 0.3269)
+ -- (-0.4556, 0.2928)
+ -- (-0.4386, 0.2928)
+ -- (-0.4300, 0.3269)
+ --cycle
+ (-0.3532, 0.3269)
+ .. controls (-0.3838, 0.3252) and (-0.3857, 0.3233) .. (-0.3874, 0.2928)
+ .. controls (-0.3613, 0.3019) and (-0.3623, 0.3007) .. (-0.3532, 0.3269)
+ --cycle
+ (-0.7723, 0.3114)
+ .. controls (-0.9303, 0.2491) and (-0.8236, 0.1766) .. (-0.9066, 0.1318)
+ .. controls (-0.9222, 0.1231) and (-0.9315, 0.1156) .. (-0.9385, 0.1084)
+ -- (-0.9505, 0.0875)
+ .. controls (-0.9537, 0.0757) and (-0.9542, 0.0621) .. (-0.9542, 0.0410)
+ -- (-0.9333, 0.0454)
+ .. controls (-0.9116, 0.1020) and (-0.8383, 0.0970) .. (-0.8943, 0.1349)
+ .. controls (-0.8577, 0.1472) and (-0.8473, 0.1249) .. (-0.8748, 0.1652)
+ -- (-0.8414, 0.1559)
+ .. controls (-0.8055, 0.1614) and (-0.8119, 0.2075) .. (-0.8279, 0.2170)
+ .. controls (-0.8020, 0.2197) and (-0.8300, 0.2698) .. (-0.8062, 0.2572)
+ .. controls (-0.7862, 0.2467) and (-0.7713, 0.2258) .. (-0.7547, 0.2261)
+ .. controls (-0.7211, 0.2267) and (-0.7384, 0.2895) .. (-0.7723, 0.3114)
+ --cycle
+ ( 0.5167, 0.2928)
+ -- ( 0.5083, 0.2842)
+ -- ( 0.5083, 0.2672)
+ -- ( 0.5167, 0.2587)
+ -- ( 0.5338, 0.2587)
+ -- ( 0.5423, 0.2672)
+ -- ( 0.5423, 0.2842)
+ -- ( 0.5338, 0.2928)
+ --cycle
+ ( 0.8233, 0.2914)
+ .. controls ( 0.8159, 0.2897) and ( 0.8101, 0.2823) .. ( 0.8101, 0.2664)
+ .. controls ( 0.8101, 0.2592) and ( 0.7901, 0.2245) .. ( 0.7943, 0.2184)
+ .. controls ( 0.8010, 0.2085) and ( 0.8177, 0.1916) .. ( 0.8341, 0.1843)
+ -- ( 0.7897, 0.1051)
+ .. controls ( 0.7638, 0.1109) and ( 0.6977, 0.1143) .. ( 0.6790, 0.0913)
+ .. controls ( 0.6678, 0.0772) and ( 0.6727, 0.0528) .. ( 0.6644, 0.0283)
+ .. controls ( 0.6511,-0.0104) and ( 0.6263,-0.0275) .. ( 0.5936,-0.0484)
+ .. controls ( 0.5977,-0.0521) and ( 0.6009,-0.0593) .. ( 0.6125,-0.0633)
+ .. controls ( 0.6432,-0.0738) and ( 0.6954,-0.0310) .. ( 0.7067,-0.0043)
+ .. controls ( 0.7123, 0.0088) and ( 0.7121, 0.0229) .. ( 0.7130, 0.0368)
+ .. controls ( 0.7585, 0.0333) and ( 0.7707, 0.0484) .. ( 0.7897, 0.0881)
+ -- ( 0.8409, 0.0027)
+ .. controls ( 0.7828,-0.0157) and ( 0.7583,-0.0941) .. ( 0.8409,-0.1337)
+ .. controls ( 0.8561,-0.0647) and ( 0.8176,-0.0742) .. ( 0.8836,-0.0143)
+ -- ( 0.9348,-0.0654)
+ .. controls ( 0.9443,-0.0311) and ( 0.9398,-0.0319) .. ( 0.9430,-0.0008)
+ .. controls ( 0.9475, 0.0433) and ( 0.9603, 0.0556) .. ( 0.8921, 0.0796)
+ -- ( 0.8836, 0.0710)
+ -- ( 0.8836, 0.0540)
+ -- ( 0.9006, 0.0198)
+ .. controls ( 0.8705, 0.0555) and ( 0.8589, 0.0671) .. ( 0.8494, 0.1137)
+ -- ( 0.8921, 0.0881)
+ .. controls ( 0.9100, 0.1275) and ( 0.9093, 0.1211) .. ( 0.9077, 0.1641)
+ .. controls ( 0.8502, 0.2199) and ( 0.8502, 0.2055) .. ( 0.8245, 0.2294)
+ .. controls ( 0.8511, 0.2387) and ( 0.8571, 0.2533) .. ( 0.8546, 0.2660)
+ -- ( 0.8445, 0.2834)
+ .. controls ( 0.8380, 0.2892) and ( 0.8301, 0.2928) .. ( 0.8233, 0.2914)
+ --cycle
+ (-0.6221, 0.2851)
+ .. controls (-0.6403, 0.2814) and (-0.6578, 0.2533) .. (-0.6578, 0.2330)
+ .. controls (-0.6578, 0.2083) and (-0.6228, 0.1685) .. (-0.6090, 0.1392)
+ .. controls (-0.6712, 0.1174) and (-0.6013, 0.0486) .. (-0.5914, 0.0454)
+ .. controls (-0.5625, 0.0361) and (-0.5594, 0.0690) .. (-0.5384, 0.0751)
+ .. controls (-0.5161, 0.0820) and (-0.5142, 0.0619) .. (-0.4641, 0.0796)
+ .. controls (-0.4838, 0.1372) and (-0.5135, 0.1504) .. (-0.5665, 0.1733)
+ -- (-0.5323, 0.2075)
+ -- (-0.5665, 0.2160)
+ -- (-0.5665, 0.1819)
+ -- (-0.5921, 0.2245)
+ -- (-0.6006, 0.2330)
+ -- (-0.6090, 0.2416)
+ -- (-0.6006, 0.2416)
+ -- (-0.6006, 0.2330)
+ -- (-0.5921, 0.2330)
+ -- (-0.5921, 0.2245)
+ .. controls (-0.5591, 0.2361) and (-0.5513, 0.2585) .. (-0.5921, 0.2587)
+ .. controls (-0.5999, 0.2809) and (-0.6112, 0.2874) .. (-0.6221, 0.2851)
+ --cycle
+ (-0.4001, 0.2659)
+ -- (-0.4398, 0.2231)
+ -- (-0.4713, 0.1989)
+ .. controls (-0.5030, 0.1708) and (-0.4873, 0.1496) .. (-0.4486, 0.1607)
+ .. controls (-0.4215, 0.1683) and (-0.3832, 0.1951) .. (-0.3704, 0.2199)
+ .. controls (-0.3565, 0.2464) and (-0.3702, 0.2690) .. (-0.4001, 0.2659)
+ --cycle
+ ( 0.5167, 0.2501)
+ .. controls ( 0.4726, 0.2275) and ( 0.4751, 0.2109) .. ( 0.4771, 0.1648)
+ .. controls ( 0.4776, 0.1495) and ( 0.4771, 0.1247) .. ( 0.4946, 0.1178)
+ .. controls ( 0.5149, 0.1096) and ( 0.5288, 0.1359) .. ( 0.5681, 0.1435)
+ .. controls ( 0.6164, 0.1530) and ( 0.6391, 0.1274) .. ( 0.6568, 0.1214)
+ .. controls ( 0.6669, 0.1180) and ( 0.6795, 0.1163) .. ( 0.6862, 0.1272)
+ .. controls ( 0.7003, 0.1512) and ( 0.6673, 0.1556) .. ( 0.6532, 0.1563)
+ .. controls ( 0.6261, 0.2314) and ( 0.5966, 0.1859) .. ( 0.5605, 0.1960)
+ .. controls ( 0.5390, 0.2022) and ( 0.5268, 0.2319) .. ( 0.5167, 0.2501)
+ --cycle
+ (-0.0462, 0.2075)
+ -- (-0.0462, 0.1819)
+ -- (-0.0206, 0.1819)
+ -- (-0.0206, 0.2075)
+ --cycle
+ (-0.7371, 0.1990)
+ -- (-0.7371, 0.1563)
+ -- (-0.7115, 0.1905)
+ -- (-0.7200, 0.1990)
+ --cycle
+ (-0.1656, 0.1905)
+ -- (-0.1400, 0.1648)
+ --cycle
+ (-0.7797, 0.1819)
+ -- (-0.7883, 0.1733)
+ -- (-0.7883, 0.1563)
+ -- (-0.7542, 0.1477)
+ -- (-0.7627, 0.1819)
+ --cycle
+ ( 0.1671, 0.1819)
+ -- ( 0.1841, 0.1477)
+ --cycle
+ ( 0.6447, 0.1477)
+ -- ( 0.6532, 0.1477)
+ -- ( 0.6532, 0.1392)
+ --cycle
+ (-0.7081, 0.1437)
+ .. controls (-0.7387, 0.1429) and (-0.7462, 0.1254) .. (-0.7593, 0.0844)
+ .. controls (-0.7628, 0.0670) and (-0.7720, 0.0499) .. (-0.7593, 0.0321)
+ .. controls (-0.7496, 0.0145) and (-0.7241, 0.0137) .. (-0.7173, 0.0321)
+ .. controls (-0.7114, 0.0479) and (-0.7222, 0.0657) .. (-0.7285, 0.0796)
+ .. controls (-0.6938, 0.0968) and (-0.6811, 0.1011) .. (-0.6688, 0.1392)
+ .. controls (-0.6852, 0.1425) and (-0.6979, 0.1439) .. (-0.7081, 0.1437)
+ --cycle
+ ( 0.8921, 0.1392)
+ -- ( 0.9006, 0.1392)
+ -- ( 0.9006, 0.1307)
+ --cycle
+ ( 0.5765, 0.1222)
+ -- ( 0.5850, 0.0881)
+ -- ( 0.6021, 0.0881)
+ -- ( 0.6106, 0.1222)
+ --cycle
+ ( 0.2872, 0.1175)
+ .. controls ( 0.2767, 0.1166) and ( 0.2651, 0.1135) .. ( 0.2533, 0.1071)
+ .. controls ( 0.2151, 0.0867) and ( 0.2220, 0.0479) .. ( 0.2267, 0.0113)
+ .. controls ( 0.2625, 0.0237) and ( 0.2504, 0.0254) .. ( 0.2701, 0.0519)
+ .. controls ( 0.2958, 0.0863) and ( 0.3249, 0.0559) .. ( 0.3338, 0.0822)
+ .. controls ( 0.3402, 0.1009) and ( 0.3185, 0.1198) .. ( 0.2872, 0.1175)
+ --cycle
+ ( 0.4845, 0.1051)
+ .. controls ( 0.4706, 0.1009) and ( 0.4616, 0.0995) .. ( 0.4512, 0.0905)
+ .. controls ( 0.4040, 0.0493) and ( 0.4796,-0.0172) .. ( 0.4845, 0.0710)
+ .. controls ( 0.4877, 0.0867) and ( 0.4856, 0.0907) .. ( 0.4845, 0.1051)
+ --cycle
+ ( 0.6362, 0.1051)
+ -- ( 0.6277, 0.0966)
+ -- ( 0.6277, 0.0796)
+ -- ( 0.6618, 0.0710)
+ -- ( 0.6532, 0.1051)
+ --cycle
+ ( 0.0988, 0.0966)
+ -- ( 0.0647, 0.0881)
+ -- ( 0.0647, 0.0710)
+ -- ( 0.0902, 0.0625)
+ .. controls ( 0.0813, 0.0194) and ( 0.0842, 0.0065) .. ( 0.1244,-0.0143)
+ -- ( 0.1331, 0.0283)
+ -- ( 0.1671, 0.0368)
+ -- ( 0.1671, 0.0540)
+ .. controls ( 0.1326, 0.0659) and ( 0.1186, 0.0637) .. ( 0.0988, 0.0966)
+ --cycle
+ (-0.8125, 0.0621)
+ .. controls (-0.8490, 0.0401) and (-0.8237, 0.0162) .. (-0.8062, 0.0190)
+ .. controls (-0.7883, 0.0219) and (-0.7704, 0.0544) .. (-0.8125, 0.0621)
+ --cycle
+ ( 0.5167, 0.0540)
+ -- ( 0.5083, 0.0198)
+ -- ( 0.5423, 0.0283)
+ -- ( 0.5423, 0.0454)
+ -- ( 0.5338, 0.0540)
+ --cycle
+ (-0.0973, 0.0454)
+ -- (-0.1058, 0.0368)
+ -- (-0.1058, 0.0198)
+ -- (-0.0718, 0.0113)
+ -- (-0.0802, 0.0454)
+ --cycle
+ (-0.0035, 0.0368)
+ -- (-0.0210, 0.0109)
+ .. controls (-0.0655,-0.0708) and ( 0.0385,-0.0566) .. ( 0.0166, 0.0109)
+ .. controls ( 0.0120, 0.0245) and ( 0.0056, 0.0275) .. (-0.0035, 0.0368)
+ --cycle
+ (-0.4977, 0.0207)
+ .. controls (-0.5147, 0.0204) and (-0.5312, 0.0080) .. (-0.5211,-0.0096)
+ .. controls (-0.5118,-0.0261) and (-0.4926,-0.0166) .. (-0.4645,-0.0487)
+ .. controls (-0.4440,-0.0720) and (-0.4524,-0.0706) .. (-0.4214,-0.0825)
+ .. controls (-0.4050,-0.0235) and (-0.4308, 0.0217) .. (-0.4977, 0.0207)
+ --cycle
+ ( 0.3756, 0.0075)
+ .. controls ( 0.3646, 0.0069) and ( 0.3522, 0.0045) .. ( 0.3376, 0.0002)
+ .. controls ( 0.3227,-0.0042) and ( 0.3054,-0.0075) .. ( 0.2946,-0.0193)
+ -- ( 0.2742,-0.0568)
+ .. controls ( 0.2649,-0.0745) and ( 0.2554,-0.0861) .. ( 0.2571,-0.1073)
+ .. controls ( 0.2601,-0.1471) and ( 0.2967,-0.2295) .. ( 0.3408,-0.1666)
+ .. controls ( 0.3653,-0.1317) and ( 0.3284,-0.1299) .. ( 0.3717,-0.0654)
+ .. controls ( 0.4033,-0.0789) and ( 0.4049,-0.0788) .. ( 0.4314,-0.0568)
+ .. controls ( 0.4664,-0.1165) and ( 0.5153,-0.0409) .. ( 0.5152,-0.0308)
+ .. controls ( 0.5148,-0.0111) and ( 0.4690, 0.0277) .. ( 0.4571,-0.0399)
+ .. controls ( 0.4280,-0.0054) and ( 0.4082, 0.0095) .. ( 0.3756, 0.0075)
+ --cycle
+ (-0.9801, 0.0047)
+ -- (-0.9427,-0.0792)
+ -- (-0.8931,-0.0669)
+ -- (-0.8538,-0.0818)
+ .. controls (-0.8464,-0.0219) and (-0.9339,-0.0180) .. (-0.9801, 0.0047)
+ --cycle
+ ( 0.5423,-0.0484)
+ -- ( 0.5594,-0.0997)
+ .. controls ( 0.5416,-0.1040) and ( 0.4986,-0.1096) .. ( 0.4864,-0.1181)
+ .. controls ( 0.4658,-0.1324) and ( 0.4601,-0.1677) .. ( 0.4793,-0.1854)
+ .. controls ( 0.4883,-0.1938) and ( 0.5053,-0.1981) .. ( 0.5167,-0.2019)
+ .. controls ( 0.4933,-0.2045) and ( 0.4609,-0.2005) .. ( 0.4427,-0.2156)
+ .. controls ( 0.4166,-0.2372) and ( 0.4089,-0.2872) .. ( 0.4826,-0.2957)
+ -- ( 0.4826,-0.2446)
+ .. controls ( 0.5217,-0.2597) and ( 0.5287,-0.2486) .. ( 0.5167,-0.2105)
+ .. controls ( 0.5424,-0.2023) and ( 0.5512,-0.1934) .. ( 0.5594,-0.1677)
+ -- ( 0.6191,-0.1848)
+ -- ( 0.6788,-0.3042)
+ -- ( 0.6532,-0.3128)
+ -- ( 0.6532,-0.3299)
+ -- ( 0.7385,-0.3214)
+ -- ( 0.7130,-0.2617)
+ .. controls ( 0.7337,-0.2558) and ( 0.7608,-0.2439) .. ( 0.7812,-0.2454)
+ .. controls ( 0.7973,-0.2453) and ( 0.8226,-0.2581) .. ( 0.8346,-0.2454)
+ .. controls ( 0.8523,-0.2285) and ( 0.8216,-0.2043) .. ( 0.8067,-0.1989)
+ .. controls ( 0.7691,-0.1854) and ( 0.7439,-0.2093) .. ( 0.6805,-0.1933)
+ -- ( 0.6805,-0.1448)
+ -- ( 0.6017,-0.0907)
+ -- ( 0.5680,-0.0907)
+ -- ( 0.5765,-0.0484)
+ --cycle
+ (-0.7372,-0.0610)
+ .. controls (-0.7812,-0.0612) and (-0.8222,-0.0885) .. (-0.7969,-0.1508)
+ -- (-0.8546,-0.1518)
+ .. controls (-0.8578,-0.0809) and (-0.9199,-0.0961) .. (-0.9322,-0.1220)
+ -- (-0.9145,-0.1528)
+ .. controls (-0.9119,-0.1539) and (-0.9110,-0.1554) .. (-0.9080,-0.1566)
+ .. controls (-0.8746,-0.1628) and (-0.8911,-0.2081) .. (-0.8709,-0.2184)
+ .. controls (-0.8479,-0.2301) and (-0.8289,-0.2160) .. (-0.8075,-0.2238)
+ .. controls (-0.7880,-0.2309) and (-0.7418,-0.2959) .. (-0.7285,-0.2190)
+ -- (-0.7712,-0.2105)
+ .. controls (-0.7608,-0.1935) and (-0.7474,-0.1633) .. (-0.7309,-0.1535)
+ .. controls (-0.7132,-0.1433) and (-0.6647,-0.1458) .. (-0.6532,-0.1225)
+ .. controls (-0.6410,-0.0974) and (-0.6763,-0.0776) .. (-0.6945,-0.0697)
+ .. controls (-0.7075,-0.0641) and (-0.7225,-0.0610) .. (-0.7372,-0.0610)
+ --cycle
+ ( 0.0790,-0.0703)
+ .. controls ( 0.0586,-0.0724) and ( 0.0391,-0.0799) .. ( 0.0314,-0.0938)
+ .. controls ( 0.0258,-0.1059) and ( 0.0293,-0.1207) .. ( 0.0314,-0.1337)
+ .. controls (-0.0051,-0.1451) and (-0.0235,-0.1672) .. ( 0.0136,-0.1933)
+ -- ( 0.0050,-0.2190)
+ -- ( 0.0647,-0.2360)
+ -- ( 0.0561,-0.2019)
+ -- ( 0.0391,-0.2105)
+ -- ( 0.0307,-0.2019)
+ -- ( 0.0818,-0.1251)
+ -- ( 0.0988,-0.1251)
+ .. controls ( 0.1190,-0.1566) and ( 0.1311,-0.1660) .. ( 0.1671,-0.1763)
+ .. controls ( 0.1712,-0.1381) and ( 0.1680,-0.1029) .. ( 0.1325,-0.0792)
+ .. controls ( 0.1208,-0.0715) and ( 0.0994,-0.0682) .. ( 0.0790,-0.0703)
+ --cycle
+ (-0.0347,-0.0729)
+ .. controls (-0.0400,-0.0723) and (-0.0465,-0.0725) .. (-0.0547,-0.0739)
+ .. controls (-0.1154,-0.1097) and (-0.0914,-0.1419) .. (-0.0629,-0.1331)
+ .. controls (-0.0318,-0.1235) and ( 0.0014,-0.0769) .. (-0.0347,-0.0729)
+ --cycle
+ (-0.1485,-0.0997)
+ -- (-0.1656,-0.1166)
+ -- (-0.1656,-0.1251)
+ .. controls (-0.1656,-0.1251) and (-0.1284,-0.1383) .. (-0.1230,-0.1251)
+ .. controls (-0.1184,-0.1140) and (-0.1485,-0.0997) .. (-0.1485,-0.0997)
+ --cycle
+ ( 0.8579,-0.1251)
+ -- ( 0.8579,-0.1508)
+ -- ( 0.8921,-0.1508)
+ -- ( 0.8921,-0.1251)
+ --cycle
+ ( 0.3462,-0.1848)
+ .. controls ( 0.3553,-0.2111) and ( 0.3541,-0.2099) .. ( 0.3804,-0.2190)
+ .. controls ( 0.3789,-0.1929) and ( 0.3722,-0.1863) .. ( 0.3462,-0.1848)
+ --cycle
+ ( 0.5680,-0.2105)
+ -- ( 0.5680,-0.2360)
+ -- ( 0.5936,-0.2360)
+ -- ( 0.5936,-0.2105)
+ --cycle
+ ( 0.2429,-0.2175)
+ .. controls ( 0.2301,-0.2183) and ( 0.2146,-0.2250) .. ( 0.2042,-0.2351)
+ .. controls ( 0.1851,-0.2515) and ( 0.1867,-0.2802) .. ( 0.1841,-0.3042)
+ -- ( 0.2267,-0.3128)
+ .. controls ( 0.2366,-0.2535) and ( 0.2673,-0.2625) .. ( 0.2665,-0.2351)
+ .. controls ( 0.2661,-0.2218) and ( 0.2558,-0.2167) .. ( 0.2429,-0.2175)
+ --cycle
+ (-0.8394,-0.2360)
+ .. controls (-0.8657,-0.2452) and (-0.8037,-0.2814) .. (-0.8128,-0.3076)
+ .. controls (-0.7841,-0.3060) and (-0.8155,-0.2595) .. (-0.8394,-0.2360)
+ --cycle
+ (-0.3106,-0.2446)
+ .. controls (-0.3061,-0.2411) and (-0.2935,-0.2446) .. (-0.2935,-0.2446)
+ .. controls (-0.2935,-0.2446) and (-0.3063,-0.2847) .. (-0.3191,-0.2787)
+ .. controls (-0.3297,-0.2736) and (-0.3199,-0.2518) .. (-0.3106,-0.2446)
+ --cycle
+ ( 0.0809,-0.2495)
+ .. controls ( 0.0629,-0.2468) and ( 0.0475,-0.2563) .. ( 0.0307,-0.2602)
+ .. controls ( 0.0102,-0.2651) and (-0.0913,-0.2616) .. (-0.0376,-0.3640)
+ .. controls (-0.1141,-0.3685) and (-0.1262,-0.4016) .. (-0.0926,-0.4664)
+ .. controls (-0.0856,-0.4795) and (-0.0758,-0.5040) .. (-0.0668,-0.5138)
+ .. controls (-0.0449,-0.5377) and ( 0.0001,-0.5440) .. ( 0.0307,-0.5431)
+ -- ( 0.0221,-0.4579)
+ -- (-0.0206,-0.4833)
+ .. controls (-0.0180,-0.4388) and (-0.0055,-0.4140) .. (-0.0633,-0.4237)
+ .. controls (-0.0215,-0.3935) and (-0.0083,-0.4022) .. ( 0.0050,-0.3640)
+ -- ( 0.0476,-0.3555)
+ -- ( 0.0476,-0.3384)
+ .. controls ( 0.0149,-0.3341) and ( 0.0150,-0.3375) .. (-0.0035,-0.3640)
+ .. controls (-0.0031,-0.3175) and ( 0.0507,-0.3021) .. ( 0.0895,-0.3132)
+ .. controls ( 0.0967,-0.3153) and ( 0.1020,-0.3182) .. ( 0.1069,-0.3214)
+ -- ( 0.0733,-0.3214)
+ -- ( 0.0733,-0.3555)
+ -- ( 0.1073,-0.3555)
+ -- ( 0.1073,-0.3217)
+ .. controls ( 0.1209,-0.3306) and ( 0.1314,-0.3431) .. ( 0.1671,-0.3555)
+ .. controls ( 0.1861,-0.3011) and ( 0.1658,-0.3044) .. ( 0.1276,-0.2793)
+ .. controls ( 0.1121,-0.2692) and ( 0.1003,-0.2524) .. ( 0.0809,-0.2495)
+ --cycle
+ ( 0.5253,-0.2617)
+ .. controls ( 0.5159,-0.2894) and ( 0.5137,-0.2935) .. ( 0.5423,-0.3042)
+ --cycle
+ (-0.5836,-0.2872)
+ -- (-0.5921,-0.3299)
+ .. controls (-0.5632,-0.3196) and (-0.5624,-0.3175) .. (-0.5665,-0.2872)
+ --cycle
+ ( 0.4825,-0.3113)
+ .. controls ( 0.4709,-0.3098) and ( 0.4621,-0.3187) .. ( 0.4571,-0.3470)
+ .. controls ( 0.4065,-0.2945) and ( 0.3565,-0.3080) .. ( 0.3141,-0.3613)
+ .. controls ( 0.3029,-0.3754) and ( 0.2880,-0.3874) .. ( 0.2903,-0.4075)
+ .. controls ( 0.2921,-0.4247) and ( 0.3027,-0.4361) .. ( 0.3120,-0.4493)
+ .. controls ( 0.2945,-0.4516) and ( 0.2350,-0.4574) .. ( 0.2234,-0.4665)
+ .. controls ( 0.2011,-0.4843) and ( 0.2099,-0.5378) .. ( 0.2182,-0.5602)
+ -- ( 0.2352,-0.5602)
+ .. controls ( 0.2421,-0.5417) and ( 0.2492,-0.5116) .. ( 0.2706,-0.5071)
+ .. controls ( 0.3048,-0.4961) and ( 0.3439,-0.5674) .. ( 0.3618,-0.5071)
+ -- ( 0.3618,-0.4833)
+ -- ( 0.3974,-0.4919)
+ -- ( 0.4059,-0.4579)
+ -- ( 0.3376,-0.4493)
+ -- ( 0.3717,-0.3896)
+ .. controls ( 0.4306,-0.3991) and ( 0.4623,-0.4570) .. ( 0.4656,-0.3640)
+ .. controls ( 0.4971,-0.3707) and ( 0.5062,-0.3751) .. ( 0.5253,-0.3470)
+ -- ( 0.5451,-0.3694)
+ .. controls ( 0.6171,-0.4271) and ( 0.5795,-0.2610) .. ( 0.5253,-0.3384)
+ .. controls ( 0.5089,-0.3248) and ( 0.4943,-0.3128) .. ( 0.4825,-0.3113)
+ --cycle
+ ( 0.6371,-0.3426)
+ .. controls ( 0.6165,-0.3414) and ( 0.6075,-0.3499) .. ( 0.6021,-0.3811)
+ .. controls ( 0.6375,-0.3781) and ( 0.6440,-0.3786) .. ( 0.6618,-0.3470)
+ .. controls ( 0.6521,-0.3447) and ( 0.6439,-0.3431) .. ( 0.6371,-0.3426)
+ --cycle
+ ( 0.1158,-0.3640)
+ -- ( 0.1073,-0.3981)
+ -- ( 0.1415,-0.3981)
+ -- ( 0.1331,-0.3640)
+ --cycle
+ (-0.4660,-0.3701)
+ .. controls (-0.4757,-0.3670) and (-0.4894,-0.3727) .. (-0.4983,-0.3981)
+ -- (-0.5580,-0.3811)
+ .. controls (-0.5508,-0.4276) and (-0.5277,-0.4685) .. (-0.4812,-0.4833)
+ -- (-0.4898,-0.4066)
+ .. controls (-0.4444,-0.4042) and (-0.4498,-0.3750) .. (-0.4660,-0.3701)
+ --cycle
+ ( 0.1671,-0.3724)
+ -- ( 0.1585,-0.3811)
+ -- ( 0.1671,-0.4407)
+ -- ( 0.1927,-0.4322)
+ -- ( 0.1927,-0.3811)
+ -- ( 0.1841,-0.3724)
+ --cycle
+ (-0.4061,-0.3746)
+ .. controls (-0.4337,-0.3682) and (-0.4432,-0.4275) .. (-0.3933,-0.4421)
+ .. controls (-0.3807,-0.4474) and (-0.3733,-0.4433) .. (-0.3617,-0.4421)
+ .. controls (-0.3654,-0.4287) and (-0.3677,-0.4184) .. (-0.3740,-0.4070)
+ .. controls (-0.3858,-0.3861) and (-0.3969,-0.3767) .. (-0.4061,-0.3746)
+ --cycle
+ (-0.2091,-0.4066)
+ -- (-0.2091,-0.4298)
+ -- (-0.1315,-0.5004)
+ .. controls (-0.1221,-0.4446) and (-0.1606,-0.4228) .. (-0.2091,-0.4066)
+ --cycle
+ ( 0.6634,-0.4202)
+ .. controls ( 0.6063,-0.4164) and ( 0.5403,-0.4628) .. ( 0.5936,-0.5175)
+ .. controls ( 0.5533,-0.5676) and ( 0.6039,-0.5913) .. ( 0.6362,-0.5261)
+ -- ( 0.6021,-0.5175)
+ -- ( 0.6618,-0.5004)
+ -- ( 0.6874,-0.5261)
+ -- ( 0.6532,-0.4749)
+ -- ( 0.6618,-0.4664)
+ .. controls ( 0.6767,-0.4763) and ( 0.6924,-0.4939) .. ( 0.7031,-0.4938)
+ .. controls ( 0.7482,-0.4516) and ( 0.7588,-0.4217) .. ( 0.6869,-0.4249)
+ .. controls ( 0.6795,-0.4222) and ( 0.6716,-0.4207) .. ( 0.6634,-0.4202)
+ --cycle
+ (-0.2595,-0.4322)
+ -- (-0.2680,-0.4407)
+ -- (-0.2680,-0.4579)
+ -- (-0.2595,-0.4664)
+ -- (-0.2424,-0.4664)
+ -- (-0.2338,-0.4579)
+ -- (-0.2338,-0.4407)
+ -- (-0.2424,-0.4322)
+ --cycle
+ (-0.3947,-0.4820)
+ .. controls (-0.4064,-0.4819) and (-0.4202,-0.4884) .. (-0.4300,-0.4906)
+ .. controls (-0.4705,-0.5000) and (-0.4926,-0.4888) .. (-0.4812,-0.5431)
+ .. controls (-0.4962,-0.5405) and (-0.5172,-0.5356) .. (-0.5319,-0.5380)
+ .. controls (-0.5497,-0.5409) and (-0.6218,-0.5786) .. (-0.6276,-0.5954)
+ .. controls (-0.6443,-0.6458) and (-0.5896,-0.6294) .. (-0.5665,-0.6198)
+ -- (-0.5750,-0.6455)
+ -- (-0.5409,-0.6540)
+ -- (-0.5409,-0.6198)
+ -- (-0.4727,-0.5943)
+ -- (-0.4812,-0.6370)
+ -- (-0.4641,-0.6028)
+ -- (-0.4214,-0.6796)
+ -- (-0.4044,-0.6796)
+ .. controls (-0.3922,-0.6110) and (-0.4199,-0.5974) .. (-0.4386,-0.5431)
+ -- (-0.4053,-0.5384)
+ .. controls (-0.3682,-0.5271) and (-0.3698,-0.4934) .. (-0.3840,-0.4848)
+ .. controls (-0.3872,-0.4829) and (-0.3908,-0.4821) .. (-0.3947,-0.4820)
+ --cycle
+ (-0.2509,-0.4833)
+ .. controls (-0.2897,-0.5056) and (-0.2886,-0.5289) .. (-0.2509,-0.5516)
+ -- (-0.2509,-0.5688)
+ .. controls (-0.3046,-0.5780) and (-0.3807,-0.5721) .. (-0.3362,-0.6796)
+ .. controls (-0.3905,-0.7060) and (-0.4127,-0.7567) .. (-0.3447,-0.7820)
+ -- (-0.3305,-0.8084)
+ .. controls (-0.3952,-0.8150) and (-0.4330,-0.7851) .. (-0.3796,-0.8551)
+ .. controls (-0.3707,-0.8560) and (-0.2665,-0.8846) .. (-0.3191,-0.8587)
+ .. controls (-0.2670,-0.8376) and (-0.2955,-0.8083) .. (-0.3191,-0.7735)
+ .. controls (-0.2852,-0.7626) and (-0.2805,-0.7579) .. (-0.2850,-0.7222)
+ -- (-0.3277,-0.7393)
+ -- (-0.3277,-0.6796)
+ .. controls (-0.2965,-0.6680) and (-0.3000,-0.6597) .. (-0.3020,-0.6285)
+ .. controls (-0.2349,-0.6402) and (-0.2059,-0.6119) .. (-0.1513,-0.6666)
+ .. controls (-0.1144,-0.7033) and (-0.1214,-0.7764) .. (-0.0716,-0.7828)
+ .. controls (-0.0398,-0.7870) and (-0.0581,-0.7438) .. (-0.0633,-0.7307)
+ .. controls (-0.0105,-0.7419) and (-0.0101,-0.7107) .. (-0.0259,-0.6944)
+ .. controls (-0.0416,-0.6781) and (-0.0638,-0.6847) .. (-0.0920,-0.6613)
+ .. controls (-0.1363,-0.6245) and (-0.1312,-0.5893) .. (-0.2253,-0.5516)
+ --cycle
+ ( 0.0893,-0.4928)
+ .. controls ( 0.0854,-0.4941) and ( 0.0816,-0.4977) .. ( 0.0781,-0.5045)
+ .. controls ( 0.0717,-0.5167) and ( 0.0733,-0.5538) .. ( 0.0733,-0.5688)
+ .. controls (-0.0068,-0.5661) and ( 0.0229,-0.6522) .. ( 0.0360,-0.6661)
+ .. controls ( 0.0456,-0.6761) and ( 0.0531,-0.6759) .. ( 0.0647,-0.6796)
+ -- ( 0.0647,-0.6198)
+ -- ( 0.1244,-0.6113)
+ -- ( 0.1073,-0.5773)
+ -- ( 0.1331,-0.5688)
+ .. controls ( 0.1502,-0.5983) and ( 0.1514,-0.6011) .. ( 0.1841,-0.6113)
+ .. controls ( 0.1815,-0.5647) and ( 0.1767,-0.5414) .. ( 0.1244,-0.5431)
+ -- ( 0.1174,-0.5185)
+ .. controls ( 0.1127,-0.5047) and ( 0.1008,-0.4886) .. ( 0.0893,-0.4928)
+ --cycle
+ ( 0.0647,-0.6796)
+ .. controls ( 0.0651,-0.7162) and ( 0.0755,-0.7152) .. ( 0.1073,-0.7052)
+ .. controls ( 0.0927,-0.6800) and ( 0.0939,-0.6798) .. ( 0.0647,-0.6796)
+ --cycle
+ ( 0.4429,-0.5307)
+ .. controls ( 0.4305,-0.5311) and ( 0.4171,-0.5380) .. ( 0.4059,-0.5558)
+ .. controls ( 0.3999,-0.5655) and ( 0.3989,-0.5750) .. ( 0.3994,-0.5861)
+ .. controls ( 0.3998,-0.5978) and ( 0.4033,-0.6088) .. ( 0.4059,-0.6198)
+ .. controls ( 0.4351,-0.6096) and ( 0.4347,-0.6075) .. ( 0.4400,-0.5773)
+ .. controls ( 0.5088,-0.5860) and ( 0.4802,-0.5296) .. ( 0.4429,-0.5307)
+ --cycle
+ ( 0.6296,-0.5636)
+ .. controls ( 0.6201,-0.5648) and ( 0.6129,-0.5872) .. ( 0.5850,-0.6007)
+ .. controls ( 0.5662,-0.6071) and ( 0.5466,-0.6101) .. ( 0.5358,-0.6303)
+ .. controls ( 0.5238,-0.6524) and ( 0.5014,-0.6717) .. ( 0.5092,-0.6929)
+ .. controls ( 0.4879,-0.7051) and ( 0.4594,-0.7105) .. ( 0.4574,-0.7383)
+ .. controls ( 0.4557,-0.7622) and ( 0.5198,-0.8058) .. ( 0.5459,-0.7885)
+ .. controls ( 0.5602,-0.7791) and ( 0.4924,-0.7612) .. ( 0.5176,-0.7262)
+ -- ( 0.5713,-0.7309)
+ .. controls ( 0.6461,-0.7123) and ( 0.5265,-0.6556) .. ( 0.6262,-0.6344)
+ .. controls ( 0.6303,-0.6340) and ( 0.6389,-0.6314) .. ( 0.6474,-0.6278)
+ -- ( 0.6629,-0.6006)
+ .. controls ( 0.6611,-0.5976) and ( 0.6583,-0.5944) .. ( 0.6541,-0.5908)
+ .. controls ( 0.6418,-0.5698) and ( 0.6353,-0.5628) .. ( 0.6296,-0.5636)
+ --cycle
+ ( 0.2723,-0.5991)
+ .. controls ( 0.2592,-0.6003) and ( 0.2468,-0.6028) .. ( 0.2363,-0.6064)
+ .. controls ( 0.1997,-0.6189) and ( 0.1915,-0.6622) .. ( 0.2438,-0.6796)
+ -- ( 0.2524,-0.6540)
+ -- ( 0.2694,-0.6540)
+ -- ( 0.2438,-0.6796)
+ -- ( 0.2352,-0.7052)
+ .. controls ( 0.1815,-0.6689) and ( 0.1445,-0.7418) .. ( 0.2182,-0.7649)
+ .. controls ( 0.2103,-0.7956) and ( 0.2084,-0.7983) .. ( 0.2267,-0.8246)
+ .. controls ( 0.1155,-0.7748) and ( 0.1095,-0.9097) .. ( 0.1942,-0.8505)
+ -- ( 0.2141,-0.8675)
+ .. controls ( 0.2535,-0.8323) and ( 0.2056,-0.8655) .. ( 0.2756,-0.8643)
+ -- ( 0.2903,-0.8720)
+ -- ( 0.3279,-0.8720)
+ -- ( 0.3427,-0.8612)
+ .. controls ( 0.3869,-0.8663) and ( 0.4661,-0.8748) .. ( 0.4741,-0.8502)
+ .. controls ( 0.5431,-0.8855) and ( 0.5233,-0.7888) .. ( 0.5039,-0.8143)
+ .. controls ( 0.4752,-0.7958) and ( 0.5046,-0.8131) .. ( 0.4741,-0.8331)
+ .. controls ( 0.3949,-0.7997) and ( 0.4522,-0.8406) .. ( 0.3683,-0.8327)
+ .. controls ( 0.3744,-0.7942) and ( 0.4288,-0.7829) .. ( 0.4051,-0.7307)
+ .. controls ( 0.4260,-0.7007) and ( 0.4185,-0.6946) .. ( 0.4051,-0.6626)
+ .. controls ( 0.3990,-0.6503) and ( 0.3940,-0.6359) .. ( 0.3839,-0.6265)
+ .. controls ( 0.3585,-0.6027) and ( 0.3119,-0.5953) .. ( 0.2723,-0.5991)
+ --cycle
+ (-0.2424,-0.6455)
+ -- (-0.2424,-0.6796)
+ -- (-0.1997,-0.6711)
+ -- (-0.1997,-0.6540)
+ --cycle
+ ( 0.2950,-0.6455)
+ .. controls ( 0.3615,-0.6477) and ( 0.3567,-0.6705) .. ( 0.3974,-0.7222)
+ .. controls ( 0.3592,-0.8249) and ( 0.3353,-0.7947) .. ( 0.2609,-0.7990)
+ -- ( 0.2438,-0.7649)
+ .. controls ( 0.2681,-0.7474) and ( 0.2638,-0.7424) .. ( 0.2609,-0.7137)
+ -- ( 0.2950,-0.6881)
+ .. controls ( 0.3035,-0.6916) and ( 0.3102,-0.6959) .. ( 0.3198,-0.6974)
+ .. controls ( 0.3496,-0.7020) and ( 0.3487,-0.6665) .. ( 0.3120,-0.6881)
+ --cycle
+ (-0.6122,-0.6460)
+ .. controls (-0.6202,-0.6484) and (-0.6222,-0.6534) .. (-0.6220,-0.6591)
+ -- (-0.6084,-0.6829)
+ .. controls (-0.6039,-0.6880) and (-0.6001,-0.6940) .. (-0.5958,-0.6974)
+ .. controls (-0.5822,-0.7078) and (-0.5979,-0.7175) .. (-0.5836,-0.7137)
+ -- (-0.5557,-0.7397)
+ .. controls (-0.5863,-0.7181) and (-0.4852,-0.7770) .. (-0.5233,-0.7812)
+ .. controls (-0.4643,-0.7650) and (-0.4542,-0.8172) .. (-0.4400,-0.7940)
+ .. controls (-0.4310,-0.7794) and (-0.4454,-0.7672) .. (-0.4569,-0.7609)
+ .. controls (-0.5042,-0.7356) and (-0.5468,-0.7364) .. (-0.5580,-0.6711)
+ .. controls (-0.5740,-0.6662) and (-0.5960,-0.6410) .. (-0.6122,-0.6460)
+ --cycle
+ (-0.2799,-0.6723)
+ .. controls (-0.2946,-0.6977) and (-0.2726,-0.7009) .. (-0.2645,-0.6954)
+ .. controls (-0.2563,-0.6899) and (-0.2508,-0.6683) .. (-0.2799,-0.6723)
+ --cycle
+ (-0.1741,-0.6796)
+ -- (-0.1826,-0.6881)
+ -- (-0.1826,-0.7052)
+ -- (-0.1571,-0.6796)
+ --cycle
+ ( 0.0647,-0.7393)
+ -- ( 0.0733,-0.7735)
+ -- ( 0.0902,-0.7735)
+ -- ( 0.0988,-0.7649)
+ -- ( 0.0988,-0.7478)
+ --cycle
+ ( 0.2267,-0.7564)
+ -- ( 0.2352,-0.7564)
+ -- ( 0.2352,-0.7649)
+ --cycle
+ (-0.2765,-0.7649)
+ -- (-0.2850,-0.7990)
+ -- (-0.2509,-0.7905)
+ -- (-0.2595,-0.7649)
+ --cycle
+ (-0.1620,-0.7999)
+ .. controls (-0.1665,-0.7994) and (-0.1723,-0.7994) .. (-0.1792,-0.8003)
+ .. controls (-0.2378,-0.8436) and (-0.2549,-0.8217) .. (-0.2658,-0.8441)
+ .. controls (-0.2799,-0.8733) and (-0.2098,-0.8685) .. (-0.1746,-0.8466)
+ .. controls (-0.1557,-0.8347) and (-0.1302,-0.8033) .. (-0.1620,-0.7999)
+ --cycle
+ (-0.0021,-0.8033)
+ .. controls (-0.0289,-0.7979) and (-0.0697,-0.8240) .. (-0.0817,-0.8284)
+ .. controls (-0.1018,-0.8361) and (-0.1245,-0.8333) .. (-0.1384,-0.8539)
+ .. controls (-0.1534,-0.8760) and (-0.1093,-0.8641) .. (-0.0866,-0.8639)
+ .. controls (-0.0704,-0.8637) and (-0.0573,-0.8695) .. (-0.0331,-0.8549)
+ .. controls ( 0.0004,-0.8348) and (-0.0157,-0.8559) .. ( 0.0221,-0.8587)
+ .. controls ( 0.0252,-0.8212) and ( 0.0141,-0.8066) .. (-0.0021,-0.8033)
+ --cycle
+ ( 0.1096,-0.8160)
+ .. controls ( 0.1044,-0.8138) and ( 0.0965,-0.8137) .. ( 0.0850,-0.8167)
+ .. controls ( 0.0624,-0.8514) and ( 0.0794,-0.8648) .. ( 0.0988,-0.8546)
+ .. controls ( 0.1148,-0.8462) and ( 0.1249,-0.8224) .. ( 0.1096,-0.8160)
+ --cycle
+ (-0.4386,-0.8161)
+ -- (-0.4386,-0.8587)
+ .. controls (-0.3929,-0.8508) and (-0.3929,-0.8240) .. (-0.4386,-0.8161)
+ --cycle
+ (-0.4898,-0.8246)
+ -- (-0.5227,-0.8312)
+ -- (-0.5082,-0.8563)
+ .. controls (-0.5034,-0.8573) and (-0.4999,-0.8586) .. (-0.4898,-0.8587)
+ -- (-0.4878,-0.8720)
+ -- (-0.4837,-0.8720)
+ -- (-0.4565,-0.8673)
+ --cycle
+ ;
+ }
+}
+\fi
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/tile.dtx b/macros/latex/contrib/wargame/source/hex/tile.dtx
new file mode 100644
index 0000000000..76eceb27c4
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/tile.dtx
@@ -0,0 +1,25 @@
+% \iffalse
+% ====================================================================
+% This is simply to create tile images.
+%
+%<*tile>
+\documentclass{standalone}
+\usepackage[terrainpic]{wargame}
+\begin{document}%
+\begin{tikzpicture}%
+ \pic{hex/terrain/%
+%<beach>beach
+%<city>city
+%<lightwoods>light woods
+%<mountains>mountains
+%<rough>rough
+%<sea>sea
+%<swamp>swamp
+%<town>town
+%<village>village
+%<woods>woods
+};%
+\end{tikzpicture}
+\end{document}
+%</tile>
+% \fi
diff --git a/macros/latex/contrib/wargame/source/hex/towns.dtx b/macros/latex/contrib/wargame/source/hex/towns.dtx
new file mode 100644
index 0000000000..a73c5eed5c
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/hex/towns.dtx
@@ -0,0 +1,96 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*hex>
+% \fi
+%
+% \subsubsection{Towns}
+% \label{sec:impl:hex:town}
+%
+% Similar to above, we define a namespace and family for towns. First
+% thing is the graphics style for towns.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/town/.style={
+ scale line widths,
+ thin,
+ fill=pgfstrokecolor,
+ color=pgfstrokecolor},
+ hex/town name/.style={
+ transform shape,
+ shape=rectangle,
+ above right=.1,
+ color=pgfstrokecolor,
+ font=\sffamily\normalsize}
+}
+% \end{macrocode}
+%
+% Next is the namespace for dealing with towns.
+%
+% \begin{macrocode}
+\tikzset{%
+ /hex/town/.search also={/tikz},%
+ /hex/town/.cd,
+ pic/.store in=\hex@c@pic,
+ type/.store in=\hex@c@pic,
+ place/.store in=\hex@c@pos,
+ location/.store in=\hex@c@pos,
+ name/.store in=\hex@c@name,
+ village/.style={pic=hex/town/village},
+ town/.style={pic=hex/town/town},
+ city/.style={pic=hex/town/city}
+}
+% \end{macrocode}
+%
+% And some \spec{pic}tures for making the towns.
+%
+% \begin{macrocode}
+\tikzset{%
+ hex/town/village/.pic={\path[fill,pic actions] circle(.1);},
+ hex/town/town/.pic={\path[fill,pic actions] circle(.2);},
+ hex/town/city/.pic={%
+ \path[fill,pic actions] circle(.25);
+ \path[draw,pic actions] circle(.35);}
+}
+% \end{macrocode}
+%
+% \begin{Macro}{\hex@do@town}
+%
+% The macro to make the towns. This uses same tricks as above.
+%
+% \begin{macrocode}
+\def\hex@c@nameparse{%
+ \@ifnextchar[{\hex@c@namep@rse}{\hex@c@namep@rse[]}%]
+}
+\def\hex@c@namep@rse[#1]#2\endhex@c@nameparse{%
+ \def\hex@c@node{node[shape=rectangle,hex/town name,#1]{#2}}}
+
+\def\hex@do@town{%
+ \edef\hex@c@tmp{[
+ /hex/town/.cd,%
+ town,%
+ /tikz/hex/town,%
+ /tikz/every hex town/.try,
+ \hex@town]}
+ \expandafter\scope\hex@c@tmp%
+ \ifx\hex@c@pic\empty\else%
+ \@ifundefined{hex@c@pos}{\let\hex@c@pos\empty}{}
+ \@ifundefined{hex@c@name}{\let\hex@c@name\empty}{}
+ \expandafter\hex@c@nameparse\hex@c@name\endhex@c@nameparse%
+ \ifx\hex@c@pos\empty\def\hex@c@pos{(0,0)}\fi
+ \hex@dbg{2}{Town:
+ ^^J text=\hex@c@name
+ ^^J pic=\hex@c@pic
+ ^^J place=\hex@c@pos
+ ^^J node=\hex@c@node
+ }
+ \filldraw \hex@c@pos pic{\hex@c@pic} \hex@c@node;
+ \fi%
+ \endscope%
+}
+% \end{macrocode}
+% \end{Macro}
+% \iffalse
+%</hex>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/activity.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/activity.dtx
new file mode 100644
index 0000000000..c59e685b20
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/activity.dtx
@@ -0,0 +1,39 @@
+%<*cmp>
+\CompatSection{\spec{activity}}
+\CompatTable{activity}{main}{{
+ arrest/{main={arrest}},
+ attempted criminal activity/{main={crime,individual}},
+ automobile/{main={automobile}},
+ demonstration/{main={squashed text=MASS}},
+ drive by shooting/{main={rifle},lower={wheeled}},
+ drug related activities/{main={squashed text=DRUG}},
+ explosion/{main={explosion}},
+ extortion 1/{main={text=\textdollar}},
+ extortion 2/{main={text=\pounds}},
+ extortion 3/{main={text=\texteuro}},
+ extortion 4/{main={text=\textyen}},
+ fire/{main={squashed text=FIRE}},
+ graffiti/{main={graffiti}},
+ improvised explosive device explosion/{main={explosion,small text=IED}},
+ individual/{main={individual}},
+ killing/{main={killing,individual}},
+ patrolling/{main={patrolling}},
+ pleasure craft/{main={sailing boat}},
+ poisoning/{main={poisoning}},
+ psychological operations/{main={psychological}},
+ radio and television psychological operations/{main={psychological,signal}},
+ riot/{main={squashed text=RIOT}},
+ searching/{main={searching}},
+}}
+\CompatTable{activity}{upper}{{
+ assassination/{upper={text=AS}},
+ execution/{upper={text=EX}},
+ hijack/{upper={text=H}},
+ house to house/{upper={house}},
+ kidnapping/{upper={text=K}},
+ murder/{upper={text=MU}},
+ piracy/{upper={text=PI}},
+ rape/{upper={text=RA}},
+ written/{upper={text=W}},
+}}
+%</cmp>
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/air.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/air.dtx
new file mode 100644
index 0000000000..286366f81a
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/air.dtx
@@ -0,0 +1,87 @@
+%<*cmp>
+\CompatSection{\spec{air}}
+\CompatTable{air}{main}{{
+ air decoy/{main={air decoy}},
+ airborne command post/{main={squashed text=ACP}},
+ airborne early warning/{main={squashed text=AEW}},
+ anti submarine warfare/{main={squashed text=ASW}},
+ anti surface warfare/{main={squashed text=ASUW}},
+ attack/{main={text=A}},
+ bomber/{main={text=B}},
+ cargo/{main={text=C}},
+ civilian airship/{main={airship}},
+ civilian balloon/{main={balloon}},
+ civilian fixed wing/{main={fixed wing}},
+ civilian rotary wing/{main={rotary wing}},
+ civilian/{main={squashed text=CIV}},
+ combat search and rescue/{main={squashed text=CSAR}},
+ communications/{main={squashed text=COM}},
+ electronic support measures/{main={squashed text=ESM}},
+ fighter/{main={text=F}},
+ government/{main={squashed text=GOV}},
+ jammer/{main={text=J}},
+ medic/{main={[fill]medic}},
+ military airship/{main={[fill]airship}},
+ military balloon/{main={[fill]balloon}},
+ military fixed wing/{main={[fill]fixed wing}},
+ military rotary wing/{main={[fill]rotary wing}},
+ military/{main={squashed text=MIL}},
+ mine countermeasures/{main={squashed text=MCM}},
+ passenger/{main={text=PX}},
+ patrol/{main={text=P}},
+ personnel recovery/{main={text=PR}},
+ reconnaissance/{main={text=R}},
+ search and rescue/{main={squashed text=SAR}},
+ special operations forces/{main={squashed text=SOF}},
+ suppression of enemy air defence/{main={squashed text=SEAD}},
+ tanker/{main={text=K}},
+ trainer/{main={text=T}},
+ ultra light/{main={text=UL}},
+ unmanned aerial vehicle/{main={[fill]unmanned}},
+ utility/{main={text=U}},
+ vertical short takeoff and landing/{main={text=V}},
+ very important person/{main={squashed text=VIP}},
+}}
+\CompatTable{air}{upper}{{
+ airborne command post/{upper={squashed text=ACP}},
+ airborne early warning/{upper={squashed text=AEW}},
+ anti submarine warfare/{upper={squashed text=ASW}},
+ anti surface warfare/{upper={squashed text=ASUW}},
+ cargo/{upper={text=C}},
+ combat search and rescue/{upper={squashed text=CSAR}},
+ communications/{upper={squashed text=COM}},
+ electronic support measures/{upper={squashed text=ESM}},
+ escort/{upper={text=E}},
+ government flight/{upper={squashed text=GOV}},
+ intensive care/{upper={text=IC}},
+ jammer/{upper={text=R}},
+ medical evacuation/{upper={[fill]medic}},
+ mine countermeasures/{upper={squashed text=MCM}},
+ passenger plane/{upper={text=PX}},
+ patrol/{upper={text=J}},
+ photography/{upper={text=PH}},
+ reconnaissance/{upper={text=P}},
+ search and rescue/{upper={squashed text=SAR}},
+ special operations forces/{upper={squashed text=SOF}},
+ suppression of enemy air defence/{upper={squashed text=SEAD}},
+ tanker/{upper={text=K}},
+ trainer/{upper={text=T}},
+ ultra light/{upper={text=UL}},
+ utility/{upper={text=U}},
+ very important person/{upper={squashed text=VIP}},
+}}
+
+\CompatTable{air}{lower}{{
+ boom and drogue/{lower={squashed text=B/D}},
+ boom only/{lower={text=B}},
+ close range/{lower={text=CR}},
+ drogue only/{lower={text=D}},
+ heavy/{lower={text=H}},
+ light/{lower={text=L}},
+ long range/{lower={text=LR}},
+ medium range/{lower={text=MR}},
+ medium/{lower={text=M}},
+ short range/{lower={text=SR}},
+}}
+%</cmp>
+%
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/equipment.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/equipment.dtx
new file mode 100644
index 0000000000..d38cb93dbc
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/equipment.dtx
@@ -0,0 +1,99 @@
+%<*cmp>
+\CompatSection{\spec{equipment}}
+\CompatTable{equipment}{main}{{
+ air defence gun/{main={gun=air defence}},
+ air defence missile launcher/{main={missile launcher=air defence}},
+ antennae/{main={antenna}},
+ anti tank gun/{main={gun=anti tank}},
+ anti tank missile launcher/{main={missile launcher=anti tank}},
+ anti tank rocket launcher/{main={rocket launcher=anti tank}},
+ antipersonnel land mine/{main={land mine=personnel}},
+ antitank land mine/{main={land mine=tank}},
+ armoured fighting vehicle command and control/{main={armoured fighting vehicle,small text=C2}},
+ armoured fighting vehicle/{main={armoured fighting vehicle}},
+ armoured medical personnel carrier/{main={{[save clip]armoured personnel carrier},{[scale=.7]medical}}},
+ armoured personnel carrier/{main={armoured personnel carrier}},
+ armoured protected recovery vehicle/{main={armoured,[scale=.7]maintenance}},
+ armoured protected vehicle/{main={armoured}},
+ automatic rifle/{main={rifle,type=heavy}},
+ bomb/{main={squashed text=BOMB}},
+ booby trap/{main={booby trap}},
+ bridge mounted on utility vehicle/{main={utility vehicle,[scale=.7]bridge}},
+ bridge/{main={bridge}},
+ bus/{main={utility vehicle,text=B}},
+ chemical biological radiological nuclear equipment/{main={chemical biological radiological nuclear}},
+ computer system/{main={computer system}},
+ direct fire gun/{main={gun=direct}},
+ drill mounted on vehicle/{main={utility vehicle,{[scale=.6,yshift=-3]drilling}}},
+ drill/{main={drilling}},
+ earthmover/{main={earthmover}},
+ fixed bridge/{main={bridge=fixed}},
+ flame thrower/{main={flame thrower}},
+ folding girder bridge/{main={bridge=folding}},
+ generator set/{main={text=G}},
+ grenade launcher/{main={grenade launcher}},
+ heavy grenade launcher/{main={grenade launcher,[yshift=-.2]type=heavy}},
+ heavy machine gun/{main={machine gun,type=heavy}},
+ heavy tank/{main={tank,type=vheavy}},
+ hollow deck bridge/{main={bridge=hollow}},
+ howitzer/{main={howitzer}},
+ improvised explosive device/{main={squashed text=IED}},
+ land mine/{main={land mine}},
+ laser/{main={laser}},
+ light grenade launcher/{main={grenade launcher,[yshift=-.2]type=light}},
+ light machine gun/{main={machine gun,type=light}},
+ light tank/{main={tank,type=vlight}},
+ machine gun/{main={machine gun}},
+ medical evacuation armoured protected vehicle/{main={armoured,[fill]medic}},
+ medical evacuation medical vehicle/{main={utility vehicle,[fill]medical}},
+ medium grenade launcher/{main={grenade launcher,[yshift=-.2]type=medium}},
+ medium machine gun/{main={machine gun,type=medium}},
+ medium tank/{main={tank,type=vmedium}},
+ mine clearing equipment/{main={mine clearing equipment}},
+ mine clearing vehicle/{main={tank,mine clearing equipment}},
+ mine laying equipment/{main={mine},upper={type=light}},
+ mine laying vehicle/{main={utility vehicle,mine},upper={type=light}},
+ missile launcher/{main={missile launcher}},
+ mobile emergency physician/{main={[save clip]utility vehicle,physician}},
+ mortar/{main={mortar}},
+ multifunctional earthmover/{main={earthmover,text=MF}},
+ multiple rocket launcher/{main={rocket launcher=multiple}},
+ non lethal grenade launcher/{main={grenade launcher=non lethal}},
+ non lethal weapon/{main={non lethal weapon}},
+ petroleum oil and lubricants vehicle/{main={utility vehicle,[scale=.6]fuel}},
+ psychological operations equipment/{main={psychological}},
+ radar/{main={radar}},
+ recoilless gun/{main={gun=recoilless}},
+ rifle/{main={rifle}},
+ semi automatic rifle/{main={rifle,type=medium}},
+ semi trailer truck/{main={semi trailer truck}},
+ sensor emplaced/{main={sensor},upper={jagged wave}},
+ sensor/{main={sensor}},
+ single rocket launcher/{main={rocket launcher=single}},
+ single shot rifle/{main={rifle,type=light}},
+ surface to surface missile launcher/{main={missile launcher=surface to surface}},
+ tank recovery vehicle/{main={tank,[scale=.8]maintenance}},
+ tank/{main={tank}},
+ taser/{main={non lethal weapon,text=Z}},
+ train locomotive/{main={train locomotive}},
+ utility vehicle/{main={utility vehicle}},
+ water cannon/{main={non lethal weapon,text=W}},
+ water vehicle/{main={utility vehicle,{[yshift=-3,scale=.6]water}}},
+}}
+
+\CompatTable{equipment}{lower}{{
+ amphibious/{below={amphibious}},
+ barge/{below={riverine}},
+ over snow/{below={over snow}},
+ pack animal/{below={pack animal}},
+ railroad/{below={railroad}},
+ sled/{below={sled}},
+ towed/{below={towed}},
+ tracked/{below={tracked}},
+ wheeled and tracked/{below={wheeled=and tracked}},
+ wheeled cross country/{below={wheeled=cross country}},
+ wheeled limited mobility/{below={wheeled=limited}},
+ wheeled semi trailer/{below={wheeled=semi}},
+}}
+%</cmp>
+%
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/installation.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/installation.dtx
new file mode 100644
index 0000000000..0686c01cb0
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/installation.dtx
@@ -0,0 +1,43 @@
+%<*cmp>
+\CompatSection{\spec{installation}}
+\CompatTable{installation}{main}{{
+ airport/{main={base},upper={air strip}},
+ ammunition cache/{main={ammunition,supply}},
+ black list location/{main={squashed text=BLK}},
+ broadcast transmitter antenna/{main={antenna}},
+ chemical biological radiological nuclear/{main={chemical biological radiological nuclear}},
+ civilian telecommunications/{main={civilian telecommunications}},
+ electric power/{main={electric power}},
+ food distribution/{main={food,supply}},
+ grey list location/{main={squashed text=GRAY}},
+ mass grave site/{main={{[scale=.7,yshift=-.05]mortuary affairs},{[scale=.7,shift={(-.22,.05)}]mortuary affairs},{[scale=.7,shift={(.22,.05)}]mortuary affairs}}},
+ medical treatment facility/{main={medical treatment}},
+ medical/{main={medical}},
+ mine/{main={quarry}},
+ naval/{main={naval}},
+ nuclear/{main={nuclear}},
+ printed media/{main={printed media}},
+ safe house/{main={squashed text=SAFE}},
+ transportation/{main={transportation}},
+ water treatment/{main={water,{[shift={(-.2,.-.1)}]small squashed text=PURE}}},
+ water/{main={water}},
+ white list location/{main={squashed text=WHT}},
+}}
+
+\CompatTable{installation}{upper}{{
+ biological/{upper={text=B}},
+ chemical/{upper={text=C}},
+ coal/{upper={text=CO}},
+ geothermal/{upper={text=GT}},
+ hydroelectric/{upper={text=HY}},
+ natural gas/{upper={text=NG}},
+ nuclear energy/{upper={nuclear}},
+ nuclear/{upper={text=N}},
+ petroleum/{upper={fuel}},
+ radio/{upper={text=R}},
+ railroad/{upper={railroad}},
+ telephone/{upper={text=T}},
+ television/{upper={text=TV}},
+ yard/{upper={squashed text=YRD}},
+}}
+%</cmp>
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/land.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/land.dtx
new file mode 100644
index 0000000000..38c3951376
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/land.dtx
@@ -0,0 +1,266 @@
+%<*cmp>
+\CompatSection{\spec{land}}
+\CompatTable{land}{main}{{
+ above corps support/{main={above corps support}},
+ administrative/{main={squashed text=ADM}},
+ air and naval gunfire liaison company/{main={[fill]artillery,reconnaissance,air traffic},upper={naval}},
+ air assault with organic lift/{main={air assault with organic lift}},
+ air defence/{main={air defence}},
+ air traffic services/{main={air traffic,[fill]individual}},
+ ammunition/{main={ammunition}},
+ amphibious/{main={amphibious}},
+ analysis electronic warfare/{main={analysis,electronic warfare wide}},
+ analysis/{main={analysis}},
+ anti tank anti armour/{main={anti tank anti armour}},
+ armoured engineer/{main={armoured,[scale=.7]engineer}},
+ armoured/{main={armoured}},
+ aviation composite fixed wing and rotary wing/{main={[fill]fixed and rotary wing}},
+ aviation fixed wing/{main={fixed wing}},
+ aviation rotary wing/{main={rotary wing}},
+ band/{main={squashed text=BAND}},
+ broadcast transmitter antenna/{main={antenna}},
+ chemical biological radiological nuclear defence/{main={chemical biological radiological nuclear}},
+ civil affairs/{main={text=CA}},
+ civilian military cooperation/{main={civilian military cooperation}},
+ civilian police/{main={civilian police}},
+ combat service support/{main={squashed text=CSS}},
+ combat support/{main={combat support}},
+ combat/{main={squashed text=CBT}},
+ combined arms/{main={combined arms}},
+ corps support/{main={corps support}},
+ counter intelligence/{main={text=CI}},
+ criminal investigation division/{main={squashed text=CID}},
+ direction finding electronic warfare/{main={direction finding,electronic warfare wide}},
+ diving/{main={diving}},
+ dog/{main={squashed text=DOG}},
+ drilling/{main={drilling}},
+ electronic ordinance disposal/{main={squashed text=EOD}},
+ electronic ranging/{main={electronic ranging}},
+ electronic warfare/{main={text=EW}},
+ engineer/{main={engineer}},
+ environmental protection/{main={environmental protection}},
+ field artillery observer/{main={{[clip]observer},{[scale=.7,shift={(0,-.1)},fill]artillery},reconnaissance}},
+ field artillery/{main={[fill]artillery}},
+ finance/{main={finance}},
+ fire protection/{main={fire protection}},
+ geospatial support/{main={squashed text=GEO}},
+ government organization/{main={text=GO}},
+ headquarters/{main={headquarters}},
+ individual/{main={individual}},
+ infantry/{main={infantry}},
+ information operations/{main={text=IO}},
+ intercept electronic warfare/{main={[fill]analysis,electronic warfare wide}},
+ intercept/{main={[fill]analysis}},
+ internal security force/{main={squashed text=ISF}},
+ interrogation/{main={squashed text=IPW}},
+ jamming electronic warfare/{main={jamming,text=EW}},
+ jamming/{main={jamming}},
+ joint fire support/{main={squashed text=JFS}},
+ judge advocate general/{main={squashed text=JAG}},
+ killing victim/{main={killing,individual}},
+ killing victims/{main={killing,group}},
+ labour/{main={labour}},
+ laundry/{main={laundry}},
+ liaison/{main={text=LO}},
+ main gun system/{main={main gun}},
+ maintenance/{main={maintenance=fill}},
+ material/{main={squashed text=MAT}},
+ medical treatment facility/{main={medical treatment}},
+ medical/{main={medical}},
+ meteorological/{main={squashed text=MET}},
+ military intelligence/{main={text=MI}},
+ military police/{main={text=MP}},
+ mine/{main={mine}},
+ missile/{main={land missile}},
+ morale welfare and recreation/{main={squashed text=MWE}},
+ mortar/{main={mortar}},
+ mortuary affairs/{main={mortuary affairs}},
+ motorized/{main={motorized}},
+ naval/{main={naval}},
+ observer/{main={observer}},
+ ordnance/{main={ordnance}},
+ organisation or group/{main={organisation}},
+ personnel services/{main={text=PS}},
+ petroleum oil and lubricants/{main={fuel}},
+ pipeline/{main={pipeline}},
+ postal/{main={postal}},
+ psychological operations broadcast/{main={antenna,{[scale=.7,fill]psychological}}},
+ psychological/{main={psychological}},
+ public affairs/{main={text=PA}},
+ quartermaster/{main={quartermaster}},
+ radar/{main={radar}},
+ radio relay:/{main={radio relay}},
+ radio teletype centre/{main={radio teletype}},
+ radio/{main={radio}},
+ reconnaissance/{main={reconnaissance}},
+ religious support/{main={squashed text=REL}},
+ replacement holding unit/{main={squashed text=RHU}},
+ sea air land/{main={squashed text=SEAL}},
+ search electronic warfare/{main={search,electronic warfare wide}},
+ search/{main={search}},
+ security/{main={squashed text=SEC}},
+ self propelled field artillery/{main={motorized,artillery}},
+ sensor/{main={sensor}},
+ shore patrol security police/{main={text=SP}},
+ signal radio relay/{main={signal,radio relay}},
+ signal radio teletype centre/{main={signal,radio teletype}},
+ signal radio/{main={signal,radio}},
+ signal tactical satellite/{main={signal,tactical satellite}},
+ signal/{main={signal}},
+ sniper:/{main={sniper}},
+ special forces/{main={text=SF}},
+ special operations forces/{main={squashed text=SOF}},
+ spy:/{main={squashed text=SPY}},
+ supply/{main={supply}},
+ surveillance/{main={[fill]observer}},
+ survey/{main={survey}},
+ sustainment/{main={squashed text=SUST}},
+ tactical mortar/{main={armoured,[scale=.6]mortar}},
+ tactical satellite/{main={tactical satellite}},
+ topographic/{main={topographic}},
+ transportation/{main={transportation}},
+ unmanned systems/{main={unmanned}},
+ victim of an attempted crime/{main={individual,crime}},
+ video imagery/{main={video imagery}},
+ water purification/{main={water,{[shift={(-.2,.-.1)}]small squashed text=PURE}}},
+ water/{main={water}},
+}}
+
+\CompatTable{land}{upper}{{
+ Mil medical role 1/{upper={text=1}},
+ Mil medical role 2/{upper={text=2}},
+ Mil medical role 3/{upper={text=3}},
+ Mil medical role 4/{upper={text=4}},
+ air assault/{upper={air assault}},
+ area/{upper={squashed text=AREA}},
+ assassination/{upper={text=AS}},
+ attack/{upper={text=A}},
+ biological/{upper={text=B}},
+ border/{upper={squashed text=BOR}},
+ bridging/{upper={bridge}},
+ chemical/{upper={text=C}},
+ close protection/{upper={squashed text=CLP}},
+ coerced or impressed recruit/{upper={text=C}},
+ combat/{upper={squashed text=CBT}},
+ command and control/{upper={text=C2}},
+ communications contingency package/{upper={squashed text=CCP}},
+ construction/{upper={squashed text=CONST}},
+ cross cultural communication/{upper={squashed text=CCC}},
+ crowd and riot control/{upper={squashed text=CRC}},
+ decontamination/{upper={text=D}},
+ detention/{upper={squashed text=DET}},
+ direct communications/{upper={direct communications}},
+ displaced persons refugees and evacuees/{upper={squashed text=DPRE}},
+ diving/{upper={diving}},
+ division/{upper={text=XX}},
+ dog/{upper={squashed text=DOG}},
+ drilling/{upper={drilling}},
+ electro optical/{upper={text=EO}},
+ enhanced/{upper={squashed text=ENH}},
+ execution/{upper={text=EX}},
+ explosive ordnance disposal/{upper={squashed text=EOD}},
+ fire direction centre/{upper={squashed text=FDC}},
+ force/{upper={text=F}},
+ foreign fighters/{upper={text=FF}},
+ forward/{upper={squashed text=FWD}},
+ gang member or gang/{upper={squashed text=GANG}},
+ government organisation/{upper={text=GO}},
+ ground station module/{upper={squashed text=GSM}},
+ hijacking/{upper={text=H}},
+ kidnapping/{upper={text=K}},
+ landing support/{upper={text=LS}},
+ large extension node/{upper={squashed text=LEN}},
+ leader or leadership/{upper={squashed text=LDR}},
+ maintenance:/{upper={maintenance}},
+ mine countermeasuure/{upper={squashed text=MCM}},
+ missile:/{upper={land missile}},
+ mobile advisor and support/{upper={mobile advisor and support}},
+ mobile subscriber equipment/{upper={squashed text=MSE}},
+ mobility support/{upper={text=MS}},
+ movement control centre/{upper={squashed text=MCC}},
+ multinational specialized unit/{upper={squashed text=MSU}},
+ multinational/{upper={text=MN}},
+ multiple rocket launcher/{upper={rocket launcher=multiple head}},
+ murder victims/{upper={text=MU}},
+ naval/{upper={naval}},
+ node centre/{upper={text=NC}},
+ non-governmental organization member or non-governmental/{upper={organisation}},
+ nuclear:/{upper={text=N}},
+ operations:/{upper={squashed text=OPS}},
+ piracy:/{upper={text=PI}},
+ radar:/{upper={radar}},
+ radiological/{upper={squashed text=RAD}},
+ rape/{upper={text=RA}},
+ religious or religious organisation/{upper={squashed text=REL}},
+ runway/{upper={runway}},
+ search and rescue/{upper={squashed text=SAR}},
+ security/{upper={squashed text=SEC}},
+ sensor control module/{upper={squashed text=SEM}},
+ sensor/{upper={sensor}},
+ signals intelligence/{upper={signals intelligence}},
+ single rocket launcher/{upper={rocket launcher=single head}},
+ single shelter switch/{upper={squashed text=SSS}},
+ smoke/{upper={text=S}},
+ sniper/{upper={sniper}},
+ sound ranging/{upper={squashed text=SDR}},
+ special weapons and tactics/{upper={squashed text=SWAT}},
+ survey:/{upper={survey}},
+ tactical exploitation/{upper={text=TE}},
+ target acquisition/{upper={text=TA}},
+ targeted individual or organisation/{upper={squashed text=TGT}},
+ terrorist or terrorist organisation/{upper={squashed text=TER}},
+ topographic/{upper={topographic}},
+ utility/{upper={text=U}},
+ video imagery/{upper={video imagery}},
+ willing recruit/{upper={text=W}},
+}}
+
+\CompatTable{land}{lower}{{
+ airborne/{lower={airborne}},
+ arctic/{lower={arctic}},
+ battle damage repair/{lower={squashed text=BDR}},
+ bicycle equipped/{lower={bicycle equipped}},
+ clearing/{lower={squashed text=CLR}},
+ close range/{lower={text=CR}},
+ control/{lower={control}},
+ decontamination/{lower={text=D}},
+ demolition/{lower={squashed text=DEM}},
+ dental/{lower={text=D}},
+ digital/{lower={squashed text=DIG}},
+ enhanced location reporting system/{lower={enhanced location reporting system}},
+ equipment/{lower={text=E}},
+ heavy/{lower={text=H}},
+ intensive care/{lower={text=IC}},
+ intermodal/{lower={intermodal}},
+ laboratory/{lower={squashed text=LAB}},
+ launcher/{lower={launcher}},
+ light/{lower={text=L}},
+ long range/{lower={text=LR}},
+ medium range/{lower={text=MR}},
+ mountain/{lower={mountain}},
+ multi channel/{lower={text=MC}},
+ optical/{lower={squashed text=OPT}},
+ pack animal/{lower={pack animal}},
+ patient evacuation coordination/{lower={squashed text=PEC}},
+ preventative maintenance/{lower={text=PM}},
+ psychological/{lower={text=P}},
+ radio relay line of sight/{lower={radio relay line of sight}},
+ railroad/{lower={railroad}},
+ recovery maintenance/{lower={maintenance}},
+ recovery unmanned systems/{lower={recovery unmanned systems}},
+ rescue coordination centre/{lower={squashed text=RCC}},
+ riverine/{lower={riverine}},
+ short range/{lower={text=SR}},
+ single channel/{lower={text=SC}},
+ ski/{lower={ski}},
+ strategic/{lower={squashed text=STR}},
+ support/{lower={squashed text=SPT}},
+ tactical/{lower={squashed text=TAC}},
+ towed/{lower={towed}},
+ troop/{lower={text=T}},
+ vertical of short takeoff and landing/{lower={squashed text=VSTOL}},
+ veterinary/{lower={text=V}},
+ wheeled/{lower={wheeled}},
+}}
+%</cmp>
+%
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/missile.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/missile.dtx
new file mode 100644
index 0000000000..db7ea7176d
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/missile.dtx
@@ -0,0 +1,14 @@
+%<*cmp>
+\CompatSection{\spec{missile}}
+\CompatTable{missile}{main}{{
+ missile/{main={missile}},
+ air/{main={missile},left={text=A}},
+ anti ballistic/{main={missile},left={text=AB}},
+ ballistic/{main={missile},left={text=B}},
+ cruise/{main={missile},left={text=C}},
+ space/{main={missile},left={text=SP}},
+ sub surface/{main={missile},left={text=SU}},
+ surface/{main={missile},left={text=S}},
+}}
+%</cmp>
+%
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/seamine.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/seamine.dtx
new file mode 100644
index 0000000000..f4bdbd9d2f
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/seamine.dtx
@@ -0,0 +1,18 @@
+%<*cmp>
+\CompatSection{\spec{sea mine}}
+\CompatTable{sea mine}{main}{{
+ free/{main={sea mine}},
+ free-neutralised/{main={sea mine=neutralised}},
+ bottomed/{main={sea mine},lower={bottomed}},
+ bottomed-neutralised/{main={sea mine=neutralised},lower={bottomed}},
+ moored/{main={sea mine},lower={moored}},
+ moored-neutralised/{main={sea mine=neutralized},lower={moored}},
+ floating/{main={sea mine},lower={floating}},
+ floating-neutralised/{main={sea mine=neutralised},lower={floating}},
+ in other position/{main={sea mine,in position}},
+ in other position-neutralised/{main={sea mine=neutralised,in position}},
+ rising/{main={sea mine},lower={rising}},
+ rising-neutralised/{main={sea mine=neutralised},lower={rising}},
+}}
+%</cmp>
+%
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/seasurface.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/seasurface.dtx
new file mode 100644
index 0000000000..2470da3a4b
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/seasurface.dtx
@@ -0,0 +1,131 @@
+%<*cmp>
+\CompatSection{\spec{sea surface}}
+\CompatTable{sea surface}{main}{{
+ ammunition ship/{main={text=AE}},
+ amphibious assault ship/{main={squashed text=LHA}},
+ amphibious assault/{main={text=LA}},
+ amphibious assualt ship helicopter/{main={squashed text=LPH}},
+ amphibious command ship/{main={squashed text=LCC}},
+ amphibious transport/{main={squashed text=LPD}},
+ amphibious warfare ship/{main={amphibious warfare ship}},
+ auxiliary flag ship/{main={squashed text=AGF}},
+ auxiliary ship/{main={text=AA}},
+ barge/{main={ship,[shift={(0,-.05)}]small text=YB}},
+ battleship/{main={text=BB}},
+ cargo/{main={ship,text=A}},
+ carrier/{main={carrier}},
+ civilian boat/{main={boat}},
+ civilian jetski/{main={jetski}},
+ civilian rigid hull inflatable boat/{main={boat,[shift={(0,-.05)}]small text=RB}},
+ civilian speedboat/{main={boat,[shift={(0,-.05)}]small text=SP}},
+ civilian unmanned surface water vehicle/{main={unmanned}},
+ civilian/{main={squashed text=CIV}},
+ combat support ship/{main={squashed text=AOE}},
+ combatant/{main={combatant}},
+ container ship/{main={ship,text=C}},
+ convoy/{main={convoy}},
+ corvette/{main={text=FS}},
+ cruiser guided missile/{main={text=CG}},
+ destroyer/{main={text=DD}},
+ dredge/{main={ship,text=D}},
+ drifter/{main={fishing vessel,text=DF}},
+ ferry/{main={ship,text=F}},
+ fishing vessel/{main={fishing vessel}},
+ frigate/{main={text=FF}},
+ harbour tug/{main={text=YT}},
+ hazardous material transport ship/{main={ship,[yshift=.-.07]small text=HZ}},
+ heavy lift/{main={ship,text=H}},
+ hospital ship/{main={text=AH}},
+ hovercraft/{main={ship,text=J}},
+ intelligence collector/{main={squashed text=AGI}},
+ junk/{main={ship,[yshift=-.07]small text=QJ}},
+ landing craft/{main={text=LC}},
+ landing ship/{main={text=LS}},
+ lash carrier/{main={ship,text=L}},
+ launch/{main={squashed text=YFT}},
+ law enforcement vessel/{main={coast guard vessel}},
+ littoral combatant ship/{main={squashed text=LCS}},
+ military jetski/{main={[fill]jetski}},
+ military rigid hull inflatable boat/{main={{[fill]boat},{[white,scale=.5,yshift=-1.2]small text=RB}}},
+ military speedboat/{main={[fill]boat}},
+ military unmanned surface water vehicle/{main={[fill]unmanned}},
+ military/{main={squashed text=MIL}},
+ mine countermeasure support ship/{main={squashed text=MCS}},
+ mine countermeasures/{main={squashed text=MCM}},
+ mine warfare vessel/{main={mine warfare vessel}},
+ minehunter/{main={text=MH}},
+ minelayer/{main={text=ML}},
+ minesweeper drone/{main={squashed text=MSD}},
+ minesweeper/{main={text=MS}},
+ multi purpose amphibious assualt ship/{main={squashed text=LHD}},
+ naval cargo ship/{main={text=AK}},
+ navy task element/{main={navy task,squashed text=TE}},
+ navy task force/{main={navy task,squashed text=TF}},
+ navy task group/{main={navy task,squashed text=TG}},
+ navy task organisation unit/{main={navy task}},
+ navy task unit/{main={navy task,squashed text=TU}},
+ non combatant/{main={non combatant}},
+ non self propelled barge/{main={text=YB}},
+ ocean going tug/{main={text=AT}},
+ ocean research ship/{main={squashed text=AGO}},
+ oiler/{main={squashed text=AOR}},
+ passenger ship/{main={ship,text=P}},
+ patrol craft/{main={text=PC}},
+ patrol ship/{main={text=PG}},
+ patrol/{main={patrol}},
+ repair ship/{main={text=AR}},
+ roll on roll off/{main={ship,text=E}},
+ sailing boat/{main={sailing boat}},
+ sea surface decoy/{main={decoy}},
+ self propelled barge/{main={text=YS}},
+ service craft/{main={text=YY}},
+ ship/{main={ship}},
+ stores ship/{main={text=AF}},
+ submarine tender/{main={text=AS}},
+ surface combatant/{main={surface combatant}},
+ survey ship/{main={squashed text=AGS}},
+ tanker/{main={ship,text=O}},
+ tow/{main={ship,[yshift=-.09]small text=TW}},
+ trawler/{main={fishing vessel,[yshift=-.09]small text=TR}},
+ tug/{main={ship,text=T}},
+}}
+
+\CompatTable{sea surface}{upper}{{
+ anti air warfare/{upper={squashed text=AAW}},
+ anti submarine warfare/{upper={squashed text=ASW}},
+ ballistic missile/{upper={text=B}},
+ drone equipped/{upper={[fill]unmanned}},
+ electronic warfare/{upper={text=EW}},
+ escort/{upper={text=E}},
+ guided missile/{upper={text=G}},
+ helicopter equipped/{upper={text=H}},
+ intelligence surveillance reconnaissance/{upper={squashed text=ISR}},
+ medical/{upper={text=ME}},
+ mine counter measures/{upper={squashed text=MCM}},
+ mine warfare/{upper={text=MW}},
+ missile defence/{upper={text=MD}},
+ other guided missile/{upper={text=M}},
+ remote multi mission vehicle/{upper={squashed text=RMV}},
+ special operations force/{upper={squashed text=SOF}},
+ surface warfare/{upper={squashed text=SUW}},
+ torpedo/{upper={text=T}},
+}}
+
+\CompatTable{sea surface}{lower}{{
+ air cushioned alternate/{lower={text=AC}},
+ air cushioned/{lower={text=J}},
+ autonomous control/{lower={squashed text=AUT}},
+ dock/{lower={text=D}},
+ expendable/{lower={squashed text=EXP}},
+ fast/{lower={text=F}},
+ heavy/{lower={text=H}},
+ hydrofoil/{lower={text=K}},
+ light/{lower={text=L}},
+ logistics/{lower={squashed text=LOG}},
+ medium/{lower={text=M}},
+ nuclear powered/{lower={text=N}},
+ remotely piloted/{lower={text=RP}},
+ tank/{lower={text=T}},
+ vehicle/{lower={text=V}},
+}}
+%</cmp>
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/space.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/space.dtx
new file mode 100644
index 0000000000..4a1a421911
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/space.dtx
@@ -0,0 +1,51 @@
+%<*cmp>
+\CompatSection{\spec{space}}
+\CompatTable{space}{main}{{
+ anti satellite weapon/{main={[fill]satellite,[scale=.6]rifle}},
+ civilian astronomical satellite/{main={satellite=astronomical}},
+ civilian bio satellite/{main={satellite=bio}},
+ civilian capsule/{main={capsule}},
+ civilian communications satellite/{main={satellite=communications}},
+ civilian earth observation satellite/{main={satellite=earth observing}},
+ civilian miniaturised satellite/{main={satellite=small}},
+ civilian navigational satellite/{main={satellite=navigation}},
+ civilian orbiter shuttle/{main={orbiter shuttle}},
+ civilian satellite/{main={satellite}},
+ civilian space station/{main={space station}},
+ civilian tether satellite/{main={satellite=tether}},
+ civilian weather satellite/{main={[yshift=-4]satellite,text=WX}},
+ military astronomical satellite/{main={[fill]satellite=astronomical}},
+ military bio satellite/{main={[fill]satellite=bio}},
+ military capsule/{main={[fill]capsule}},
+ military communications satellite/{main={[fill]satellite=communications}},
+ military earth observation satellite/{main={[fill]satellite=earth observing}},
+ military miniaturised satellite/{main={[fill]satellite=small}},
+ military navigational satellite/{main={[fill]satellite=navigation}},
+ military orbiter shuttle/{main={[fill]orbiter shuttle}},
+ military satellite/{main={[fill]satellite=none}},
+ military space station/{main={[fill]space station}},
+ military tether satellite/{main={[fill]satellite=tether}},
+ military weather satellite/{main={{[fill,yshift=-4]satellite},text=WX}},
+ planet lander/{main={text=PL}},
+ reconnaissance satellite/{main={satellite=reconnaissance}},
+ reentry vehicle/{main={text=RV}},
+ satellite/{main={squashed text=SAT}},
+ space vehicle/{main={text=SV}},
+}}
+
+\CompatTable{space}{upper}{{
+ geostationary orbit/{upper={text=GO}},
+ geosynchronous orbit/{upper={squashed text=GSO}},
+ high earth orbit/{upper={squashed text=HEO}},
+ low earth orbit/{upper={squashed text=LEO}},
+ medium earth orbit/{upper={squashed text=MEO}},
+ molinya orbit/{upper={text=MO}},
+}}
+
+\CompatTable{space}{lower}{{
+ infra red/{lower={text=IR}},
+ optical/{lower={text=O}},
+ radar=/{lower={text=R}},
+ signals instelligence/{lower={text=SI}},
+}}
+%</cmp>
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/compat/subsurface.dtx b/macros/latex/contrib/wargame/source/natoapp6c/compat/subsurface.dtx
new file mode 100644
index 0000000000..38a867bdcd
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/compat/subsurface.dtx
@@ -0,0 +1,67 @@
+%<*cmp>
+\CompatSection{\spec{sub surface}}
+\CompatTable{sub surface}{main}{{
+ autonomous underwater vehicle/{main={[fill]unmanned}},
+ bottomed sea mine decoy/{main={[fill]sea mine=top half,{[scale=.6,yshift=-6]decoy}},lower={bottomed}},
+ bottomed submarine/{main={submarine},lower={bottomed}},
+ civilian autonomous underwatervehicle/{main={unmanned}},
+ civilian diver/{main={diving}},
+ civilian seabed installation/{main={seabed installation}},
+ civilian submersible/{main={submersible}},
+ civilian/{main={squashed text=CIV}},
+ improvised explosive device/{main={squashed text=IED}},
+ military diver/{main={diving=military}},
+ military seabed installation/{main={[fill]seabed installation}},
+ military/{main={squashed text=MIL}},
+ moored sea mine decoy/{main={[fill]sea mine=top half,{[yshift=-4,scale=.6]decoy}},lower={[yshift=-2]bottomed,moored}},
+ non submarine/{main={small squashed text=NON SUB}},
+ other submersible/{main={[fill]submersible}},
+ sea mine decoy/{main={[fill]sea mine=top half,{[scale=.6,yshift=-6]decoy}}},
+ snorkelling submarine/{main={submarine},upper={[yshift=-8]surfaced,[yshift=-2]type=vlight}},
+ submarine/{main={submarine}},
+ surfaced submarine/{main={submarine},lower={surfaced}},
+ torpedo/{main={torpedo}},
+ underwater decoy/{main={decoy},upper={[yshift=-4]bottomed}},
+ underwater weapon/{main={squashed text=WPN}},
+ unexploded ordnance/{main={unexploded ordnance}},
+}}
+
+\CompatTable{sub surface}{upper}{{
+ anti submarine warfare/{upper={squashed text=ASW}},
+ attack/{upper={text=A}},
+ auxiliary/{upper={squashed text=AUX}},
+ ballistic missile/{upper={text=B}},
+ certain submarine/{upper={text=CT}},
+ command and control/{upper={text=C2}},
+ guided missile/{upper={text=G}},
+ intelligence surveillance reconnaissance/{upper={squashed text=ISR}},
+ mine countermeasures/{upper={squashed text=MCM}},
+ mine warfare/{upper={text=MW}},
+ other guided missile/{upper={text=M}},
+ possible submarine high 3/{upper={text=P3}},
+ possible submarine high 4/{upper={text=P4}},
+ possible submarine low 1/{upper={text=P1}},
+ possible submarine low 2/{upper={text=P2}},
+ probable submarine/{upper={text=PB}},
+ special operations force/{upper={squashed text=SOF}},
+ surface warfare/{upper={squashed text=SUW}},
+}}
+
+\CompatTable{sub surface}{lower}{{
+ air independent propulsion/{lower={text=AI}},
+ autonomous control/{lower={squashed text=AUT}},
+ diesel propulsion/{lower={text=D}},
+ diesel type 1/{lower={text=D1}},
+ diesel type 2/{lower={text=D2}},
+ diesel type 3/{lower={text=D3}},
+ expendable/{lower={squashed text=EXP}},
+ nuclear propulsion/{lower={text=N}},
+ nuclear type 1/{lower={text=N1}},
+ nuclear type 2/{lower={text=N2}},
+ nuclear type 3/{lower={text=N3}},
+ nuclear type 4/{lower={text=N4}},
+ nuclear type 5/{lower={text=N5}},
+ nuclear type 6/{lower={text=N6}},
+ remotely piloted/{lower={text=RP}},
+}}
+%</cmp>
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/core.dtx b/macros/latex/contrib/wargame/source/natoapp6c/core.dtx
new file mode 100644
index 0000000000..8a2caf322e
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/core.dtx
@@ -0,0 +1,226 @@
+% \iffalse
+% ====================================================================
+% \fi
+%
+% \subsection{The \texttt{wargame.natoapp6c} \TikZ{} library}
+%
+% In this section we define the code for the Tikz library. The
+% library defines a number of \spec{pic} keys we can use to draw
+% various parts of a marker. The markers conform to NATO App~6(c)
+% specification. The implementation here is heavily inspired by the
+% package \textsf{milsymb} \cite{milsymb} available at CTAN.
+%
+% \iffalse
+%<*natoapp6c>
+% \fi
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Debugging}
+% \begin{Macro}{\natoappdbglvl,\n@to@pp@dbg}
+%
+% Set the debug level, and make debug message.
+%
+% \begin{macrocode}
+\usetikzlibrary{wargame.util}
+\usetikzlibrary{calc}
+\usetikzlibrary{arrows.meta}
+\usetikzlibrary{shapes.symbols}
+\usetikzlibrary{positioning,intersections}
+\newcount\natoappdbglvl\natoappdbglvl=\wargamedbglvl
+\def\n@to@pp@dbg#1#2{%
+ \ifnum#1>\natoappdbglvl\relax\else\message{^^J#2}\fi}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Colours}
+%
+% \begin{Macro}{\c@friendly,
+% \c@hostile,
+% \c@neutral,
+% \c@unknown}
+%
+% Define standard colours for marker affiliations.
+%
+% \begin{tabular}{|l|c|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Name}}
+% & {}\\
+% \hline
+% \spec{friendly} & \tikz{\draw[fill=friendly] (0,0) rectangle(1,.2);}\\
+% \spec{hostile} & \tikz{\draw[fill=hostile ] (0,0) rectangle(1,.2);}\\
+% \spec{neutral} & \tikz{\draw[fill=neutral ] (0,0) rectangle(1,.2);}\\
+% \spec{unknown} & \tikz{\draw[fill=unknown ] (0,0) rectangle(1,.2);}\\
+% \hline
+% \end{tabular}
+%
+% \begin{macrocode}
+\definecolor{friendly}{RGB}{128, 224, 255}
+\definecolor{hostile}{RGB}{255, 128, 128}
+\definecolor{neutral}{RGB}{170, 255, 170}
+\definecolor{unknown}{RGB}{255, 255, 128}
+\tikzset{%
+ faction/.code={%
+ \@ifundefined{natoapp@fac}{%
+ }{\tikzset{fill=\natoapp@fac}}}}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Some dimensions}
+%
+% We define a number of dimensions which we will use in the
+% following. They provide a rough parameterisation of the node
+% shapes, but shouldn't really be changed. We have them here so that
+% the code uses as few hard coded numbers as possible.
+%
+% The dimensions are
+% \begin{itemize}
+% \item Installation `hat' $x$ coordinate
+% \item Installation `hat' height
+% \item Activity width of boxes
+% \item Height of space bar
+% \item Radius of the symbol
+% \end{itemize}
+%
+% \begin{macrocode}
+\newdimen\n@to@pp@inst@x\n@to@pp@inst@x=0.2cm
+\newdimen\n@to@pp@inst@h\n@to@pp@inst@h=0.15cm
+\newdimen\n@to@pp@act@w\n@to@pp@act@w=0.15cm
+\newdimen\n@to@pp@space@h\n@to@pp@space@h=0.1cm
+\newdimen\n@to@pp@r\n@to@pp@r=0.5cm
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Some utilities}
+%
+% \begin{Macro}{\n@to@pp@isclip}
+% This detects if we're in a node that is being used for clipping
+%
+% \begin{macrocode}
+%\def\n@to@pp@cliptoken{clip}
+%\def\n@to@pp@isclip{FF\fi%
+% % \message{^^Jclip is \meaning\pgf@up@clip}%
+% \ifx\pgf@up@clip\n@to@pp@cliptoken}
+\newif\ifn@to@pp@isclip\n@to@pp@isclipfalse
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\n@to@pp@saved@fill@color,\n@to@pp@saved@stroke@color}
+%
+% Macros to hold saved colours.
+
+% \begin{macrocode}
+\let\n@to@pp@saved@stroke@color\relax
+\let\n@to@pp@saved@fill@color\relax
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\n@to@pp@stroke@to@fill,\n@to@pp@restore@fill}
+% Macro to get stroke and fill colours and set the fill colour to
+% the stroke colour, and to restore to the old setting. This is
+% used by the frame shapes below to make sure that filled elements
+% of the frame uses the same colour as the for strokes.
+%
+% \begin{macrocode}
+\newcommand\n@to@pp@stroke@to@fill{%
+ %
+ \expandafter\let\expandafter\n@to@pp@saved@stroke@color%
+ \csname\string\color@pgfstrokecolor\endcsname%
+ %
+ \expandafter\let\expandafter\n@to@pp@saved@fill@color%
+ \csname\string\color@pgffillcolor\endcsname%
+ %
+ \expandafter\pgf@setfillcolor\n@to@pp@saved@stroke@color%
+ %
+ % \message{^^J=== Set fill to stroke color
+ % ^^J Old fill: \meaning\n@to@pp@saved@fill@color
+ % ^^J Old stroke: \meaning\n@to@pp@saved@stroke@color}
+}
+% \end{macrocode}
+%
+%
+%
+% \begin{macrocode}
+\newcommand\n@to@pp@restore@fill{%
+ % \message{^^J=== Restore fill color
+ % ^^J Old fill: \meaning\n@to@pp@saved@fill@color
+ % ^^J Old stroke: \meaning\n@to@pp@saved@stroke@color}
+ %
+ \ifx\n@to@pp@saved@fill@color\relax\else%
+ \expandafter\pgf@setfillcolor\n@to@pp@saved@fill@color%
+ \fi%
+ \global\let\n@to@pp@saved@fill@color\relax
+ \global\let\n@to@pp@saved@stroke@color\relax
+}
+% \end{macrocode}
+%
+% We also make an environment, just to simplify the use
+%
+% \begin{macrocode}
+\newenvironment{n@to@pp@stroketofill}{%
+ \pgfscope%
+ \n@to@pp@stroke@to@fill%
+}{%
+ \n@to@pp@restore@fill%
+ \endpgfscope%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Faction names as macros}
+%
+% \begin{macrocode}
+\def\n@to@pp@friendly{friendly}
+\def\n@to@pp@hostile{hostile}
+\def\n@to@pp@neutral{neutral}
+\def\n@to@pp@unknown{unknown}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Node shapes}
+%
+% Here we define bases for all commands and affiliations. These are
+% defined as node shapes. This means we will render the NATO App6(c)
+% symbols as nodes with embedded nodes of the relevant shape.
+%
+%
+%
+% \input{natoapp6c/frames/base.dtx}
+% \input{natoapp6c/frames/friendly.dtx}
+% \input{natoapp6c/frames/hostile.dtx}
+% \input{natoapp6c/frames/neutral.dtx}
+% \input{natoapp6c/frames/unknown.dtx}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \input{natoapp6c/echelon.dtx}
+% \input{natoapp6c/text.dtx}
+% \input{natoapp6c/shape.dtx}
+% \input{natoapp6c/util.dtx}
+% \input{natoapp6c/weaponry.dtx}
+% \input{natoapp6c/symbols.dtx}
+% \input{natoapp6c/list.dtx}
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/echelon.dtx b/macros/latex/contrib/wargame/source/natoapp6c/echelon.dtx
new file mode 100644
index 0000000000..a63be2ae47
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/echelon.dtx
@@ -0,0 +1,82 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{Echelons}
+%
+%
+% Dimensions
+%
+% \begin{macrocode}
+\def\n@to@pp@e@y{.12}
+\def\n@to@pp@e@yy{.24}
+% \end{macrocode}
+%
+% Paths as macros
+%
+% \begin{macrocode}
+\def\n@to@pp@e@d#1{($(#1*\n@to@pp@e@y,0)$) circle(0.09)}
+\def\n@to@pp@e@b#1{%
+ ($(#1*\n@to@pp@e@y,-\n@to@pp@e@y)$) -- ($(#1*\n@to@pp@e@y,\n@to@pp@e@y)$)}
+\def\n@to@pp@e@x#1{%
+ ($(-\n@to@pp@e@y,-\n@to@pp@e@y)+(#1*\n@to@pp@e@y,0)$)--
+ ++(\n@to@pp@e@yy,\n@to@pp@e@yy)
+ ($(-\n@to@pp@e@y, \n@to@pp@e@y)+(#1*\n@to@pp@e@y,0)$)--
+ ++(\n@to@pp@e@yy,-\n@to@pp@e@yy)}
+% \end{macrocode}
+%
+% Pictures
+%
+% \begin{macrocode}
+\tikzset{
+ pics/natoapp6c/s/echelon/.is choice,
+ pics/natoapp6c/s/echelon/squad/.style={code={
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ \foreach \o in {0}{\n@to@pp@e@d{\o}};}},
+ pics/natoapp6c/s/echelon/section/.style={code={
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ \foreach \o in {-1,1}{\n@to@pp@e@d{\o}};}},
+ pics/natoapp6c/s/echelon/platoon/.style={code={
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ \foreach \o in {-2,0,2}{\n@to@pp@e@d{\o}};}},
+ pics/natoapp6c/s/echelon/company/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {0}{\n@to@pp@e@b{\o}};}},
+ pics/natoapp6c/s/echelon/battalion/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-1,1}{\n@to@pp@e@b{\o}};}},
+ pics/natoapp6c/s/echelon/regiment/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-2,0,2}{\n@to@pp@e@b{\o}};}},
+ pics/natoapp6c/s/echelon/brigade/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {0}{\n@to@pp@e@x{\o}};}},
+ pics/natoapp6c/s/echelon/division/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-1,1}{\n@to@pp@e@x{\o}};}},
+ pics/natoapp6c/s/echelon/corps/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-2,0,2}{\n@to@pp@e@x{\o}};}},
+ pics/natoapp6c/s/echelon/army/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-3,-1,1,3}{\n@to@pp@e@x{\o}};}},
+ pics/natoapp6c/s/echelon/army group/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-4,-2,0,2,4}{\n@to@pp@e@x{\o}};}},
+ pics/natoapp6c/s/echelon/theatre/.style={code={
+ \path[draw,pic actions]
+ \foreach \o in {-5,-3,-1,1,3,5}{\n@to@pp@e@x{\o}};}},
+ pics/natoapp6c/s/echelon/command/.style={code={
+ \path[draw,pic actions]
+ (-.3,-.1) -- (-.3,.1) (-.4, 0) -- (-.2, 0)
+ ( .3,-.1) -- ( .3,.1) ( .4, 0) -- ( .2, 0);}},
+ pics/natoapp6c/s/echelon/dummy/.style={code={%
+ \path[draw,pic actions] (M.north west) rectangle
+ ($(M.north east)+(0,.1)$);}},
+}
+% \end{macrocode}
+%
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/frames/base.dtx b/macros/latex/contrib/wargame/source/natoapp6c/frames/base.dtx
new file mode 100644
index 0000000000..614bf8f95c
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/frames/base.dtx
@@ -0,0 +1,70 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+%
+% First, the generic bounding box symbol for all markers.
+%
+% \begin{NatoAppFrame}{natoapp6c base}
+%
+% Place-holder symbol. This shape will form the basis of many of
+% the other frame shapes. We define the relevant sizes and
+% anchors.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c base}{%
+ \saveddimen\radius{\pgf@x=\n@to@pp@r}
+ \saveddimen\liney{\pgf@x=.2cm}
+ \saveddimen\linex{\pgf@x=0.41cm}
+ \savedanchor\center{\pgf@x=0cm\pgf@y=0cm}
+ \savedanchor\upper{\pgf@x=0cm\pgf@y=0.35cm}
+ \anchor{north east}{\pgf@x=\radius\pgf@y=\radius}
+ \anchor{south west}{\pgf@x=-\radius\pgf@y=-\radius}
+ \anchor{north west}{\pgf@x=-\radius\pgf@y=\radius}
+ \anchor{south east}{\pgf@x=\radius\pgf@y=-\radius}
+ \anchor{south}{\pgf@x=0cm\pgf@y=-\radius}
+ \anchor{north}{\pgf@x=0cm\pgf@y=\radius}
+ \anchor{west}{\pgf@x=-\radius\pgf@y=0cm}
+ \anchor{east}{\pgf@x=\radius\pgf@y=0cm}
+ \anchor{center}{\center}
+ \anchor{upper}{\upper}
+ \anchor{lower}{\upper\pgf@y=-\pgf@y}
+ \anchor{left}{\upper\pgf@x=-\pgf@y\pgf@y=0cm}
+ \anchor{right}{\upper\pgf@x=\pgf@y\pgf@y=0cm}
+ \savedmacro\init{
+ \def\octagon{%
+ \pgfpathmoveto{\pgfqpointpolar{0} {\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{45} {\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{90} {\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{135}{\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{180}{\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{225}{\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{270}{\radius}}%
+ \pgfpathlineto{\pgfqpointpolar{315}{\radius}}%
+ \pgfpathclose}
+ \def\topline{%
+ \pgfpathmoveto{\pgfqpoint{\linex}{\liney}}%
+ \pgfpathlineto{\pgfqpoint{-\linex}{\liney}}}
+ \def\bottomline{%
+ \pgfpathmoveto{\pgfqpoint{\linex}{-\liney}}%
+ \pgfpathlineto{\pgfqpoint{-\linex}{-\liney}}}
+ }
+ \backgroundpath{%
+ \init%
+ \octagon}
+ \behindforegroundpath{%
+ \init%
+ \octagon%
+ \pgfusepath{stroke}%
+ \topline%
+ \pgfusepath{stroke}%
+ \bottomline%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/frames/friendly.dtx b/macros/latex/contrib/wargame/source/natoapp6c/frames/friendly.dtx
new file mode 100644
index 0000000000..d8d0c4fba7
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/frames/friendly.dtx
@@ -0,0 +1,427 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{`Friendly' node shapes}
+%
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly air}
+%
+% Macro for friendly air shape
+%
+% \begin{macrocode}
+\def\n@to@friendly@@ir{%
+ \southeast \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \cntrl \wg@tmpb=\pgf@y%
+ \pgfpatharc{180}{0}{\wg@tmpa and \wg@tmpb}}
+% \end{macrocode}
+%
+% The friendly air command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly air}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\southeast{%
+ \pgf@x=1.1\n@to@pp@r%
+ \pgf@y=-\n@to@pp@r}
+ \savedanchor\cntrl{\pgf@x=0cm\pgf@y=2.6\n@to@pp@r}
+ \savedanchor\north{\pgf@x=0cm\pgf@y=1.6\n@to@pp@r}
+ \anchor{south east}{\southeast}
+ \anchor{south west}{\southeast\pgf@x=-\pgf@x}
+ \anchor{north east}{\southeast\wg@tmpa=\pgf@x\north\pgf@x=\wg@tmpa}
+ \anchor{north west}{\southeast\wg@tmpa=\pgf@x\north\pgf@x=-\wg@tmpa}
+ \anchor{north}{\north}
+ \anchor{east}{%
+ \north\wg@tmpb\pgf@y%
+ \southeast\wg@tmpc=\pgf@y\wg@tmpa=\pgf@x%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{west}{%
+ \north\wg@tmpb\pgf@y%
+ \southeast\wg@tmpc=\pgf@y\wg@tmpa=\pgf@x%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=-\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{south}{\southeast\pgf@x=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@friendly@@ir%
+ }
+ \behindforegroundpath{%
+ \n@to@friendly@@ir%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly land}
+%
+% Macro for friendly land command
+%
+% \begin{macrocode}
+\def\n@to@friendly@l@nd{%
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpa}{ \wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{ \wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpa}{-\wg@tmpb}}%
+ \pgfclosepath}
+% \end{macrocode}
+%
+% The friendly land command. The most used command frame.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly land}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\northeast{%
+ \pgf@x=1.5\n@to@pp@r%
+ \pgf@y=\n@to@pp@r}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \anchor{south}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{east}{\northeast\pgf@y=0cm}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@friendly@l@nd%
+ }
+ \behindforegroundpath{%
+ \n@to@friendly@l@nd%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly activity}
+%
+% The friendly activity command. Similar to land command, but with
+% boxes in the corners.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly activity}{%
+ \inheritsavedanchors[from=natoapp6c friendly land]
+ \inheritanchor[from=natoapp6c friendly land]{center}
+ \inheritanchor[from=natoapp6c friendly land]{inner north east}
+ \inheritanchor[from=natoapp6c friendly land]{inner north west}
+ \inheritanchor[from=natoapp6c friendly land]{inner south west}
+ \inheritanchor[from=natoapp6c friendly land]{inner south east}
+ \inheritanchor[from=natoapp6c friendly land]{north east}
+ \inheritanchor[from=natoapp6c friendly land]{north west}
+ \inheritanchor[from=natoapp6c friendly land]{south east}
+ \inheritanchor[from=natoapp6c friendly land]{south west}
+ \inheritanchor[from=natoapp6c friendly land]{north}
+ \inheritanchor[from=natoapp6c friendly land]{west}
+ \inheritanchor[from=natoapp6c friendly land]{east}
+ \inheritanchor[from=natoapp6c friendly land]{south}
+ \inheritanchor[from=natoapp6c friendly land]{upper}
+ \inheritanchor[from=natoapp6c friendly land]{lower}
+ \inheritanchor[from=natoapp6c friendly land]{left}
+ \inheritanchor[from=natoapp6c friendly land]{right}
+ \inheritanchor[from=natoapp6c friendly land]{center}
+ \inheritbackgroundpath[from=natoapp6c friendly land]
+ \behindforegroundpath{
+ \begin{n@to@pp@stroketofill}
+ \n@to@friendly@l@nd%
+ \pgfusepath{stroke}
+ %
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb\pgf@y%
+ \wg@tmpc=\wg@tmpa\advance\wg@tmpc-\n@to@pp@act@w
+ \wg@tmpd=\wg@tmpb\advance\wg@tmpd-\n@to@pp@act@w
+ %
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpd}}%
+ \pgfclosepath
+ %
+ \pgfusepath{fill}%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{-\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpc}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{\wg@tmpd}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpc}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{-\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly equipment}
+%
+% The friendly equipment command. A circle.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly equipment}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\northeast{%
+ \pgf@x=\n@to@pp@r%
+ \pgf@y=\n@to@pp@r}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \anchor{south}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{east}{\northeast\pgf@y=0cm}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \northeast\wg@tmpa\pgf@x%
+ \pgfpathcircle{\pgfqpoint{0cm}{0cm}}{\wg@tmpa}
+ }
+ \behindforegroundpath{%
+ \northeast\wg@tmpa\pgf@x%
+ \pgfpathcircle{\pgfqpoint{0cm}{0cm}}{\wg@tmpa}
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly installation}
+%
+% The friendly installation command. Similar to the land command, but
+% with a `hat' on top.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly installation}{%
+ \inheritsavedanchors[from=natoapp6c friendly land]
+ \inheritanchor[from=natoapp6c friendly land]{center}
+ \inheritanchor[from=natoapp6c friendly land]{inner north east}
+ \inheritanchor[from=natoapp6c friendly land]{inner north west}
+ \inheritanchor[from=natoapp6c friendly land]{inner south west}
+ \inheritanchor[from=natoapp6c friendly land]{inner south east}
+ \inheritanchor[from=natoapp6c friendly land]{north east}
+ \inheritanchor[from=natoapp6c friendly land]{north west}
+ \inheritanchor[from=natoapp6c friendly land]{south east}
+ \inheritanchor[from=natoapp6c friendly land]{south west}
+ \inheritanchor[from=natoapp6c friendly land]{north}
+ \inheritanchor[from=natoapp6c friendly land]{west}
+ \inheritanchor[from=natoapp6c friendly land]{east}
+ \inheritanchor[from=natoapp6c friendly land]{south}
+ \inheritanchor[from=natoapp6c friendly land]{upper}
+ \inheritanchor[from=natoapp6c friendly land]{lower}
+ \inheritanchor[from=natoapp6c friendly land]{left}
+ \inheritanchor[from=natoapp6c friendly land]{right}
+ \inheritanchor[from=natoapp6c friendly land]{center}
+ \inheritbackgroundpath[from=natoapp6c friendly land]
+ \behindforegroundpath{
+ \begin{n@to@pp@stroketofill}
+ \n@to@friendly@l@nd%
+ \pgfusepath{stroke}
+ %
+ \northeast \wg@tmpa=\pgf@y%
+ \wg@tmpb=\wg@tmpa\advance\wg@tmpb\n@to@pp@inst@h%
+ %
+ \pgfpathmoveto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpa}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly sea surface}
+%
+% The friendly sea surface command. Same as equipment command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly sea surface}{%
+ \inheritsavedanchors[from=natoapp6c friendly equipment]
+ \inheritanchor[from=natoapp6c friendly equipment]{inner north east}
+ \inheritanchor[from=natoapp6c friendly equipment]{inner north west}
+ \inheritanchor[from=natoapp6c friendly equipment]{inner south west}
+ \inheritanchor[from=natoapp6c friendly equipment]{inner south east}
+ \inheritanchor[from=natoapp6c friendly equipment]{north east}
+ \inheritanchor[from=natoapp6c friendly equipment]{north west}
+ \inheritanchor[from=natoapp6c friendly equipment]{south east}
+ \inheritanchor[from=natoapp6c friendly equipment]{south west}
+ \inheritanchor[from=natoapp6c friendly equipment]{north}
+ \inheritanchor[from=natoapp6c friendly equipment]{west}
+ \inheritanchor[from=natoapp6c friendly equipment]{east}
+ \inheritanchor[from=natoapp6c friendly equipment]{south}
+ \inheritanchor[from=natoapp6c friendly equipment]{upper}
+ \inheritanchor[from=natoapp6c friendly equipment]{lower}
+ \inheritanchor[from=natoapp6c friendly equipment]{left}
+ \inheritanchor[from=natoapp6c friendly equipment]{right}
+ \inheritanchor[from=natoapp6c friendly equipment]{center}
+ \inheritbackgroundpath[from=natoapp6c friendly equipment]
+ \inheritbehindforegroundpath[from=natoapp6c friendly equipment]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly space}
+%
+% The friendly space command. Similar to air command, but with a
+% bar on top.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly space}{%
+ \inheritsavedanchors[from=natoapp6c friendly air]
+ \inheritanchor[from=natoapp6c friendly air]{north east}
+ \inheritanchor[from=natoapp6c friendly air]{north west}
+ \inheritanchor[from=natoapp6c friendly air]{south east}
+ \inheritanchor[from=natoapp6c friendly air]{south west}
+ \inheritanchor[from=natoapp6c friendly air]{north}
+ \inheritanchor[from=natoapp6c friendly air]{west}
+ \inheritanchor[from=natoapp6c friendly air]{east}
+ \inheritanchor[from=natoapp6c friendly air]{south}
+ \inheritanchor[from=natoapp6c friendly air]{upper}
+ \inheritanchor[from=natoapp6c friendly air]{lower}
+ \inheritanchor[from=natoapp6c friendly air]{left}
+ \inheritanchor[from=natoapp6c friendly air]{right}
+ \inheritanchor[from=natoapp6c friendly air]{center}
+ \inheritbackgroundpath[from=natoapp6c friendly air]
+ \behindforegroundpath{%
+ \begin{n@to@pp@stroketofill}
+ \n@to@friendly@@ir%
+ \pgfusepath{stroke,clip}%
+ %
+ \cntrl\wg@tmpa=\pgf@y%
+ \north\wg@tmpb=\pgf@y
+ \advance\wg@tmpb-\n@to@pp@space@h
+ %
+ \pgfpathmoveto{\pgfqpoint{ \n@to@pp@r}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@r}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@r}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \n@to@pp@r}{\wg@tmpb}}%
+ \pgfclosepath%
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c friendly sub surface}
+%
+% Macro for friendly sub surface command
+%
+% \begin{macrocode}
+\def\n@to@friendly@sub{%
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \cntrl \wg@tmpb=\pgf@y%
+ \pgfpatharc{180}{0}{\wg@tmpa and \wg@tmpb}}
+% \end{macrocode}
+%
+% The friendly sub surface command.
+%
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c friendly sub surface}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\northeast{%
+ \pgf@x=1.1\n@to@pp@r%
+ \pgf@y=\n@to@pp@r}
+ \savedanchor\cntrl{\pgf@x=0cm\pgf@y=-2.6\n@to@pp@r}
+ \savedanchor\south{\pgf@x=0cm\pgf@y=-1.6\n@to@pp@r}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\wg@tmpa=\pgf@x\south\pgf@x=\wg@tmpa}
+ \anchor{south west}{\northeast\wg@tmpa=\pgf@x\south\pgf@x=-\wg@tmpa}
+ \anchor{south}{\south}
+ \anchor{east}{
+ \northeast\wg@tmpb=\pgf@y\wg@tmpa=\pgf@x%
+ \south\wg@tmpc\pgf@y%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{west}{
+ \northeast\wg@tmpb=\pgf@y\wg@tmpa=\pgf@x%
+ \south\wg@tmpc\pgf@y%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=-\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@friendly@sub%
+ }
+ \behindforegroundpath{%
+ \n@to@friendly@sub%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/frames/hostile.dtx b/macros/latex/contrib/wargame/source/natoapp6c/frames/hostile.dtx
new file mode 100644
index 0000000000..c3df3f6525
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/frames/hostile.dtx
@@ -0,0 +1,453 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{`Hostile' node shapes}
+%
+%
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile air}
+%
+% The hostile air command
+%
+%
+% Macro for hostile air shape
+%
+%
+% \begin{macrocode}
+\def\n@to@hostile@@ir{%
+ \southeast \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \cntrl \wg@tmpc=\pgf@y%
+ \north \wg@tmpd=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+}
+% \end{macrocode}
+%
+%
+% The hostile air command.
+%
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile air}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\southeast{%
+ \pgf@x=\n@to@pp@r%
+ \pgf@y=-\n@to@pp@r}
+ \savedanchor\cntrl{%
+ \pgf@x=\n@to@pp@r%
+ \pgf@y=0.414\n@to@pp@r% (sqrt(2)-1)
+ }
+ \savedanchor\north{\pgf@x=0cm\pgf@y=1.414\n@to@pp@r}
+ \anchor{south east}{\southeast}
+ \anchor{south west}{\southeast\pgf@x=-\pgf@x}
+ \anchor{north east}{\southeast\wg@tmpa=\pgf@x\north\pgf@x=\wg@tmpa}
+ \anchor{north west}{\southeast\wg@tmpa=\pgf@x\north\pgf@x=-\wg@tmpa}
+ \anchor{north}{\north}
+ \anchor{east}{%
+ \north\wg@tmpb\pgf@y%
+ \southeast\wg@tmpc=\pgf@y\wg@tmpa=\pgf@x%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{west}{%
+ \north\wg@tmpb\pgf@y%
+ \southeast\wg@tmpc=\pgf@y\wg@tmpa=\pgf@x%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=-\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{south}{\southeast\pgf@x=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@hostile@@ir%
+ }
+ \behindforegroundpath{%
+ \n@to@hostile@@ir%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile land}
+%
+% Macro for hostile land command
+%
+% \begin{macrocode}
+\def\n@to@hostile@l@nd{%
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpa}{ 0cm}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{ \wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{ 0cm}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{-\wg@tmpb}}%
+ \pgfclosepath}
+% \end{macrocode}
+%
+% The hostile land command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile land}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\northeast{%
+ \pgf@x=1.414\n@to@pp@r%
+ \pgf@y=1.414\n@to@pp@r}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \anchor{south}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{east}{\northeast\pgf@y=0cm}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@hostile@l@nd%
+ }
+ \behindforegroundpath{%
+ \n@to@hostile@l@nd%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile activity}
+%
+% The hostile activity command. Similar to land command, but with
+% boxes in the corners.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile activity}{%
+ \inheritsavedanchors[from=natoapp6c hostile land]
+ \inheritanchor[from=natoapp6c hostile land]{center}
+ \inheritanchor[from=natoapp6c hostile land]{inner north east}
+ \inheritanchor[from=natoapp6c hostile land]{inner north west}
+ \inheritanchor[from=natoapp6c hostile land]{inner south west}
+ \inheritanchor[from=natoapp6c hostile land]{inner south east}
+ \inheritanchor[from=natoapp6c hostile land]{north east}
+ \inheritanchor[from=natoapp6c hostile land]{north west}
+ \inheritanchor[from=natoapp6c hostile land]{south east}
+ \inheritanchor[from=natoapp6c hostile land]{south west}
+ \inheritanchor[from=natoapp6c hostile land]{north}
+ \inheritanchor[from=natoapp6c hostile land]{west}
+ \inheritanchor[from=natoapp6c hostile land]{east}
+ \inheritanchor[from=natoapp6c hostile land]{south}
+ \inheritanchor[from=natoapp6c hostile land]{upper}
+ \inheritanchor[from=natoapp6c hostile land]{lower}
+ \inheritanchor[from=natoapp6c hostile land]{left}
+ \inheritanchor[from=natoapp6c hostile land]{right}
+ \inheritanchor[from=natoapp6c hostile land]{center}
+ \inheritbackgroundpath[from=natoapp6c hostile land]
+ \behindforegroundpath{
+ \begin{n@to@pp@stroketofill}
+ \n@to@hostile@l@nd%
+ \pgfusepath{stroke}
+ %
+ \northeast \wg@tmpb=\pgf@y%
+ \wg@tmpa=0.707\n@to@pp@act@w
+ \wg@tmpc=\wg@tmpb\advance\wg@tmpc-1.414\n@to@pp@act@w
+ \wg@tmpd=\wg@tmpb\advance\wg@tmpd-\wg@tmpa
+ %
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpa}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{\wg@tmpc}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpc}{0cm}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpd}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpb}{0cm}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpd}{-\wg@tmpa}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpa}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{-\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{-\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpb}{0cm}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpd}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{0cm}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpd}{-\wg@tmpa}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile equipment}
+%
+% The hostile equipment command. Same as land command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile equipment}{%
+ \inheritsavedanchors[from=natoapp6c hostile land]
+ \inheritanchor[from=natoapp6c hostile land]{inner north east}
+ \inheritanchor[from=natoapp6c hostile land]{inner north west}
+ \inheritanchor[from=natoapp6c hostile land]{inner south west}
+ \inheritanchor[from=natoapp6c hostile land]{inner south east}
+ \inheritanchor[from=natoapp6c hostile land]{north east}
+ \inheritanchor[from=natoapp6c hostile land]{north west}
+ \inheritanchor[from=natoapp6c hostile land]{south east}
+ \inheritanchor[from=natoapp6c hostile land]{south west}
+ \inheritanchor[from=natoapp6c hostile land]{north}
+ \inheritanchor[from=natoapp6c hostile land]{west}
+ \inheritanchor[from=natoapp6c hostile land]{east}
+ \inheritanchor[from=natoapp6c hostile land]{south}
+ \inheritanchor[from=natoapp6c hostile land]{upper}
+ \inheritanchor[from=natoapp6c hostile land]{lower}
+ \inheritanchor[from=natoapp6c hostile land]{left}
+ \inheritanchor[from=natoapp6c hostile land]{right}
+ \inheritanchor[from=natoapp6c hostile land]{center}
+ \inheritbackgroundpath[from=natoapp6c hostile land]
+ \inheritbehindforegroundpath[from=natoapp6c hostile land]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile installation}
+%
+% The hostile installation command. Similar to land command, but
+% with a `hat' on top.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile installation}{%
+ \inheritsavedanchors[from=natoapp6c hostile land]
+ \inheritanchor[from=natoapp6c hostile land]{center}
+ \inheritanchor[from=natoapp6c hostile land]{inner north east}
+ \inheritanchor[from=natoapp6c hostile land]{inner north west}
+ \inheritanchor[from=natoapp6c hostile land]{inner south west}
+ \inheritanchor[from=natoapp6c hostile land]{inner south east}
+ \inheritanchor[from=natoapp6c hostile land]{north east}
+ \inheritanchor[from=natoapp6c hostile land]{north west}
+ \inheritanchor[from=natoapp6c hostile land]{south east}
+ \inheritanchor[from=natoapp6c hostile land]{south west}
+ \inheritanchor[from=natoapp6c hostile land]{north}
+ \inheritanchor[from=natoapp6c hostile land]{west}
+ \inheritanchor[from=natoapp6c hostile land]{east}
+ \inheritanchor[from=natoapp6c hostile land]{south}
+ \inheritanchor[from=natoapp6c hostile land]{upper}
+ \inheritanchor[from=natoapp6c hostile land]{lower}
+ \inheritanchor[from=natoapp6c hostile land]{left}
+ \inheritanchor[from=natoapp6c hostile land]{right}
+ \inheritanchor[from=natoapp6c hostile land]{center}
+ \inheritbackgroundpath[from=natoapp6c hostile land]
+ \behindforegroundpath{
+ \begin{n@to@pp@stroketofill}
+ \n@to@hostile@l@nd%
+ \pgfusepath{stroke}
+ %
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb\pgf@y%
+ \wg@tmpc=\wg@tmpb
+ \advance\wg@tmpc\n@to@pp@inst@h%
+ \advance\wg@tmpc-0.05cm%
+ %
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpa}{0cm}}
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpa}{\wg@tmpc}}
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpc}}
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{0cm}}
+ \pgfpathlineto{\pgfqpoint{ 0cm}{\wg@tmpb}}
+ \pgfclosepath%
+ \pgfusepath{clip}
+ %
+ \wg@tmpd=\wg@tmpb%
+ \advance\wg@tmpd-\n@to@pp@inst@h%
+ %
+ \pgfpathmoveto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpd}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile sea surface}
+%
+% The hostile sea surface command. Same as land command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile sea surface}{%
+ \inheritsavedanchors[from=natoapp6c hostile equipment]
+ \inheritanchor[from=natoapp6c hostile equipment]{inner north east}
+ \inheritanchor[from=natoapp6c hostile equipment]{inner north west}
+ \inheritanchor[from=natoapp6c hostile equipment]{inner south west}
+ \inheritanchor[from=natoapp6c hostile equipment]{inner south east}
+ \inheritanchor[from=natoapp6c hostile equipment]{north east}
+ \inheritanchor[from=natoapp6c hostile equipment]{north west}
+ \inheritanchor[from=natoapp6c hostile equipment]{south east}
+ \inheritanchor[from=natoapp6c hostile equipment]{south west}
+ \inheritanchor[from=natoapp6c hostile equipment]{north}
+ \inheritanchor[from=natoapp6c hostile equipment]{west}
+ \inheritanchor[from=natoapp6c hostile equipment]{east}
+ \inheritanchor[from=natoapp6c hostile equipment]{south}
+ \inheritanchor[from=natoapp6c hostile equipment]{upper}
+ \inheritanchor[from=natoapp6c hostile equipment]{lower}
+ \inheritanchor[from=natoapp6c hostile equipment]{left}
+ \inheritanchor[from=natoapp6c hostile equipment]{right}
+ \inheritanchor[from=natoapp6c hostile equipment]{center}
+ \inheritbackgroundpath[from=natoapp6c hostile equipment]
+ \inheritbehindforegroundpath[from=natoapp6c hostile equipment]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile space}
+%
+% The hostile space command. Similar to air command, but with bar on
+% top.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile space}{%
+ \inheritsavedanchors[from=natoapp6c hostile air]
+ \inheritanchor[from=natoapp6c hostile air]{north east}
+ \inheritanchor[from=natoapp6c hostile air]{north west}
+ \inheritanchor[from=natoapp6c hostile air]{south east}
+ \inheritanchor[from=natoapp6c hostile air]{south west}
+ \inheritanchor[from=natoapp6c hostile air]{north}
+ \inheritanchor[from=natoapp6c hostile air]{west}
+ \inheritanchor[from=natoapp6c hostile air]{east}
+ \inheritanchor[from=natoapp6c hostile air]{south}
+ \inheritanchor[from=natoapp6c hostile air]{upper}
+ \inheritanchor[from=natoapp6c hostile air]{lower}
+ \inheritanchor[from=natoapp6c hostile air]{left}
+ \inheritanchor[from=natoapp6c hostile air]{right}
+ \inheritanchor[from=natoapp6c hostile air]{center}
+ \inheritbackgroundpath[from=natoapp6c hostile air]
+ \behindforegroundpath{%
+ \begin{n@to@pp@stroketofill}
+ \n@to@hostile@@ir%
+ \pgfusepath{stroke,clip}%
+ %
+ \north\wg@tmpa=\pgf@y\wg@tmpb=\pgf@y
+ \advance\wg@tmpb-\n@to@pp@space@h
+ %
+ \pgfpathmoveto{\pgfqpoint{ \n@to@pp@r}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@r}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@r}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \n@to@pp@r}{\wg@tmpb}}%
+ \pgfclosepath%
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c hostile sub surface}
+%
+% Macro for hostile sub surface command
+%
+% \begin{macrocode}
+\def\n@to@hostile@sub{%
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \cntrl \wg@tmpc=\pgf@y%
+ \south \wg@tmpd=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{ 0cm}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+}
+% \end{macrocode}
+%
+% The hostile sub surface command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c hostile sub surface}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\northeast{%
+ \pgf@x=\n@to@pp@r%
+ \pgf@y=\n@to@pp@r}
+ \savedanchor\cntrl{\pgf@x=\n@to@pp@r\pgf@y=-0.414\n@to@pp@r}
+ \savedanchor\south{\pgf@x=0cm\pgf@y=-1.414\n@to@pp@r}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\wg@tmpa=\pgf@x\south\pgf@x=\wg@tmpa}
+ \anchor{south west}{\northeast\wg@tmpa=\pgf@x\south\pgf@x=-\wg@tmpa}
+ \anchor{south}{\south}
+ \anchor{east}{
+ \northeast\wg@tmpb=\pgf@y\wg@tmpa=\pgf@x%
+ \south\wg@tmpc\pgf@y%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{west}{
+ \northeast\wg@tmpb=\pgf@y\wg@tmpa=\pgf@x%
+ \south\wg@tmpc\pgf@y%
+ \advance\wg@tmpb-\wg@tmpc
+ \divide\wg@tmpb2%
+ \advance\wg@tmpb\wg@tmpc%
+ \pgf@x=-\wg@tmpa%
+ \pgf@y=\wg@tmpb}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@hostile@sub%
+ }
+ \behindforegroundpath{%
+ \n@to@hostile@sub%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/frames/neutral.dtx b/macros/latex/contrib/wargame/source/natoapp6c/frames/neutral.dtx
new file mode 100644
index 0000000000..b0b18780a9
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/frames/neutral.dtx
@@ -0,0 +1,405 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{`Neutral' node shapes}
+%
+%
+% Macro for neutral shapes
+%
+% \begin{macrocode}
+\def\n@to@pp@neutr@l@init{%
+ \northeast\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \def\n@to@pp@neutr@l@left {\pgflineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@right {\pgflineto{\pgfqpoint{ \wg@tmpa}{ \wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@top {\pgflineto{\pgfqpoint{-\wg@tmpa}{ \wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@bottom{\pgflineto{\pgfqpoint{ \wg@tmpa}{-\wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@nw {\pgfmoveto{\pgfqpoint{-\wg@tmpa}{ \wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@ne {\pgfmoveto{\pgfqpoint{ \wg@tmpa}{ \wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@se {\pgfmoveto{\pgfqpoint{ \wg@tmpa}{-\wg@tmpb}}}%
+ \def\n@to@pp@neutr@l@sw {\pgfmoveto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpb}}}%
+}
+% \end{macrocode}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral air}
+%
+% The neutral air command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral air}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\northeast{\pgf@x=\n@to@pp@r\pgf@y=\n@to@pp@r}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \anchor{east}{\northeast\pgf@y=0cm}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0cm}
+ \anchor{south}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \inheritanchor[from=natoapp6c base]{center}
+ \backgroundpath{%
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@se
+ \n@to@pp@neutr@l@right%
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ }
+ \behindforegroundpath{%
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@se
+ \n@to@pp@neutr@l@right%
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral land}
+%
+% The neutral land command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral land}{%
+ \inheritsavedanchors[from=natoapp6c neutral air]
+ \inheritanchor[from=natoapp6c neutral air]{north east}
+ \inheritanchor[from=natoapp6c neutral air]{north west}
+ \inheritanchor[from=natoapp6c neutral air]{south east}
+ \inheritanchor[from=natoapp6c neutral air]{south west}
+ \inheritanchor[from=natoapp6c neutral air]{north}
+ \inheritanchor[from=natoapp6c neutral air]{west}
+ \inheritanchor[from=natoapp6c neutral air]{east}
+ \inheritanchor[from=natoapp6c neutral air]{south}
+ \inheritanchor[from=natoapp6c neutral air]{upper}
+ \inheritanchor[from=natoapp6c neutral air]{lower}
+ \inheritanchor[from=natoapp6c neutral air]{left}
+ \inheritanchor[from=natoapp6c neutral air]{right}
+ \inheritanchor[from=natoapp6c neutral air]{center}
+ \backgroundpath{%
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@ne
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ \n@to@pp@neutr@l@bottom%
+ \pgfclosepath
+ }
+ \behindforegroundpath{%
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@ne
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ \n@to@pp@neutr@l@bottom%
+ \pgfclosepath
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral activity}
+%
+% The neutral activity command. Similar to land command but with
+% boxes added in the corners.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral activity}{%
+ \inheritsavedanchors[from=natoapp6c neutral land]
+ \inheritanchor[from=natoapp6c neutral land]{center}
+ \inheritanchor[from=natoapp6c neutral land]{inner north east}
+ \inheritanchor[from=natoapp6c neutral land]{inner north west}
+ \inheritanchor[from=natoapp6c neutral land]{inner south west}
+ \inheritanchor[from=natoapp6c neutral land]{inner south east}
+ \inheritanchor[from=natoapp6c neutral land]{north east}
+ \inheritanchor[from=natoapp6c neutral land]{north west}
+ \inheritanchor[from=natoapp6c neutral land]{south east}
+ \inheritanchor[from=natoapp6c neutral land]{south west}
+ \inheritanchor[from=natoapp6c neutral land]{north}
+ \inheritanchor[from=natoapp6c neutral land]{west}
+ \inheritanchor[from=natoapp6c neutral land]{east}
+ \inheritanchor[from=natoapp6c neutral land]{south}
+ \inheritanchor[from=natoapp6c neutral land]{upper}
+ \inheritanchor[from=natoapp6c neutral land]{lower}
+ \inheritanchor[from=natoapp6c neutral land]{left}
+ \inheritanchor[from=natoapp6c neutral land]{right}
+ \inheritanchor[from=natoapp6c neutral land]{center}
+ \inheritbackgroundpath[from=natoapp6c neutral land]
+ \behindforegroundpath{
+ \begin{n@to@pp@stroketofill}
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@ne
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ \n@to@pp@neutr@l@bottom%
+ \pgfclosepath
+ \pgfusepath{stroke}
+ %
+ \northeast \wg@tmpa=\pgf@x\wg@tmpb\pgf@y%
+ \wg@tmpc=\wg@tmpa\advance\wg@tmpc-\n@to@pp@act@w
+ \wg@tmpd=\wg@tmpb\advance\wg@tmpd-\n@to@pp@act@w
+ %
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{\wg@tmpd}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpc}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{\wg@tmpa}{-\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpc}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{\wg@tmpd}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpc}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpd}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{-\wg@tmpb}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral equipment}
+%
+% The neutral equipment command. Same as land command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral equipment}{%
+ \inheritsavedanchors[from=natoapp6c neutral land]
+ \inheritanchor[from=natoapp6c neutral land]{center}
+ \inheritanchor[from=natoapp6c neutral land]{inner north east}
+ \inheritanchor[from=natoapp6c neutral land]{inner north west}
+ \inheritanchor[from=natoapp6c neutral land]{inner south west}
+ \inheritanchor[from=natoapp6c neutral land]{inner south east}
+ \inheritanchor[from=natoapp6c neutral land]{north east}
+ \inheritanchor[from=natoapp6c neutral land]{north west}
+ \inheritanchor[from=natoapp6c neutral land]{south east}
+ \inheritanchor[from=natoapp6c neutral land]{south west}
+ \inheritanchor[from=natoapp6c neutral land]{north}
+ \inheritanchor[from=natoapp6c neutral land]{west}
+ \inheritanchor[from=natoapp6c neutral land]{east}
+ \inheritanchor[from=natoapp6c neutral land]{south}
+ \inheritanchor[from=natoapp6c neutral land]{upper}
+ \inheritanchor[from=natoapp6c neutral land]{lower}
+ \inheritanchor[from=natoapp6c neutral land]{left}
+ \inheritanchor[from=natoapp6c neutral land]{right}
+ \inheritanchor[from=natoapp6c neutral land]{center}
+ \inheritbackgroundpath[from=natoapp6c neutral land]
+ \inheritbehindbackgroundpath[from=natoapp6c neutral land]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral installation}
+%
+% The neutral installation command. Similar to land command but
+% with a `hat' on top.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral installation}{%
+ \inheritsavedanchors[from=natoapp6c neutral land]
+ \inheritanchor[from=natoapp6c neutral land]{center}
+ \inheritanchor[from=natoapp6c neutral land]{inner north east}
+ \inheritanchor[from=natoapp6c neutral land]{inner north west}
+ \inheritanchor[from=natoapp6c neutral land]{inner south west}
+ \inheritanchor[from=natoapp6c neutral land]{inner south east}
+ \inheritanchor[from=natoapp6c neutral land]{north east}
+ \inheritanchor[from=natoapp6c neutral land]{north west}
+ \inheritanchor[from=natoapp6c neutral land]{south east}
+ \inheritanchor[from=natoapp6c neutral land]{south west}
+ \inheritanchor[from=natoapp6c neutral land]{north}
+ \inheritanchor[from=natoapp6c neutral land]{west}
+ \inheritanchor[from=natoapp6c neutral land]{east}
+ \inheritanchor[from=natoapp6c neutral land]{south}
+ \inheritanchor[from=natoapp6c neutral land]{upper}
+ \inheritanchor[from=natoapp6c neutral land]{lower}
+ \inheritanchor[from=natoapp6c neutral land]{left}
+ \inheritanchor[from=natoapp6c neutral land]{right}
+ \inheritanchor[from=natoapp6c neutral land]{center}
+ \inheritbackgroundpath[from=natoapp6c neutral land]
+ \behindforegroundpath{
+ \begin{n@to@pp@stroketofill}
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@ne
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ \n@to@pp@neutr@l@bottom%
+ \pgfclosepath
+ \pgfusepath{stroke}
+ %
+ \northeast \wg@tmpa=\pgf@y%
+ \wg@tmpb=\wg@tmpa\advance\wg@tmpb\n@to@pp@inst@h%
+ %
+ \pgfpathmoveto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpa}}%
+ \pgfclosepath
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral sea surface}
+%
+% The neutral sea surface command. Same as land command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral sea surface}{%
+ \inheritsavedanchors[from=natoapp6c neutral equipment]
+ \inheritanchor[from=natoapp6c neutral equipment]{inner north east}
+ \inheritanchor[from=natoapp6c neutral equipment]{inner north west}
+ \inheritanchor[from=natoapp6c neutral equipment]{inner south west}
+ \inheritanchor[from=natoapp6c neutral equipment]{inner south east}
+ \inheritanchor[from=natoapp6c neutral equipment]{north east}
+ \inheritanchor[from=natoapp6c neutral equipment]{north west}
+ \inheritanchor[from=natoapp6c neutral equipment]{south east}
+ \inheritanchor[from=natoapp6c neutral equipment]{south west}
+ \inheritanchor[from=natoapp6c neutral equipment]{north}
+ \inheritanchor[from=natoapp6c neutral equipment]{west}
+ \inheritanchor[from=natoapp6c neutral equipment]{east}
+ \inheritanchor[from=natoapp6c neutral equipment]{south}
+ \inheritanchor[from=natoapp6c neutral equipment]{upper}
+ \inheritanchor[from=natoapp6c neutral equipment]{lower}
+ \inheritanchor[from=natoapp6c neutral equipment]{left}
+ \inheritanchor[from=natoapp6c neutral equipment]{right}
+ \inheritanchor[from=natoapp6c neutral equipment]{center}
+ \inheritbackgroundpath[from=natoapp6c neutral equipment]
+ \inheritbehindforegroundpath[from=natoapp6c neutral equipment]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral space}
+%
+% The neutral space command. Similar to air command but with a
+% bar.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral space}{%
+ \inheritsavedanchors[from=natoapp6c neutral air]
+ \inheritanchor[from=natoapp6c neutral air]{north east}
+ \inheritanchor[from=natoapp6c neutral air]{north west}
+ \inheritanchor[from=natoapp6c neutral air]{south east}
+ \inheritanchor[from=natoapp6c neutral air]{south west}
+ \inheritanchor[from=natoapp6c neutral air]{north}
+ \inheritanchor[from=natoapp6c neutral air]{west}
+ \inheritanchor[from=natoapp6c neutral air]{east}
+ \inheritanchor[from=natoapp6c neutral air]{south}
+ \inheritanchor[from=natoapp6c neutral air]{upper}
+ \inheritanchor[from=natoapp6c neutral air]{lower}
+ \inheritanchor[from=natoapp6c neutral air]{left}
+ \inheritanchor[from=natoapp6c neutral air]{right}
+ \inheritanchor[from=natoapp6c neutral air]{center}
+ \inheritbackgroundpath[from=natoapp6c neutral air]
+ \behindforegroundpath{%
+ \begin{n@to@pp@stroketofill}
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@se
+ \n@to@pp@neutr@l@right%
+ \n@to@pp@neutr@l@top%
+ \n@to@pp@neutr@l@left%
+ \pgfusepath{stroke}%
+ %
+ \n@to@pp@neutr@l@ne
+ \n@to@pp@neutr@l@top%
+ \northeast\wg@tmpa=\pgf@x\wg@tmpb=\pgf@y%
+ \advance\wg@tmpb-\n@to@pp@space@h
+ %
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpa}{\wg@tmpb}}%
+ \pgfclosepath%
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c neutral sub surface}
+%
+% The neutral sub surface command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c neutral sub surface}{%
+ \inheritsavedanchors[from=natoapp6c neutral air]
+ \inheritanchor[from=natoapp6c neutral air]{north east}
+ \inheritanchor[from=natoapp6c neutral air]{north west}
+ \inheritanchor[from=natoapp6c neutral air]{south east}
+ \inheritanchor[from=natoapp6c neutral air]{south west}
+ \inheritanchor[from=natoapp6c neutral air]{north}
+ \inheritanchor[from=natoapp6c neutral air]{west}
+ \inheritanchor[from=natoapp6c neutral air]{east}
+ \inheritanchor[from=natoapp6c neutral air]{south}
+ \inheritanchor[from=natoapp6c neutral air]{upper}
+ \inheritanchor[from=natoapp6c neutral air]{lower}
+ \inheritanchor[from=natoapp6c neutral air]{left}
+ \inheritanchor[from=natoapp6c neutral air]{right}
+ \inheritanchor[from=natoapp6c neutral air]{center}
+ \backgroundpath{%
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@nw
+ \n@to@pp@neutr@l@left%
+ \n@to@pp@neutr@l@bottom%
+ \n@to@pp@neutr@l@right%
+ }
+ \behindforegroundpath{%
+ \n@to@pp@neutr@l@init%
+ \n@to@pp@neutr@l@nw
+ \n@to@pp@neutr@l@left%
+ \n@to@pp@neutr@l@bottom%
+ \n@to@pp@neutr@l@right%
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/frames/unknown.dtx b/macros/latex/contrib/wargame/source/natoapp6c/frames/unknown.dtx
new file mode 100644
index 0000000000..e6bd3aec38
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/frames/unknown.dtx
@@ -0,0 +1,483 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{`Unknown' node shapes}
+%
+%
+% Macro to define unknown path elements
+%
+% \begin{macrocode}
+\def\n@to@pp@unknown@init{%
+ \def\n@to@pp@unknown@top{%
+ \innernortheast \wg@tmpa=\pgf@x%
+ \cntrlnortheast \wg@tmpb=\pgf@x%
+ \pgfpathcurveto{%
+ \pgfqpoint{ \wg@tmpa}{\wg@tmpb}}{%
+ \pgfqpoint{-\wg@tmpa}{\wg@tmpb}}{%
+ \pgfqpoint{-\wg@tmpa}{\wg@tmpa}}}
+ \def\n@to@pp@unknown@left{%
+ \innernortheast \wg@tmpa=\pgf@x%
+ \cntrlnortheast \wg@tmpb=\pgf@x%
+ \pgfpathcurveto{%
+ \pgfqpoint{-\wg@tmpb}{ \wg@tmpa}}{%
+ \pgfqpoint{-\wg@tmpb}{-\wg@tmpa}}{%
+ \pgfqpoint{-\wg@tmpa}{-\wg@tmpa}}}
+ \def\n@to@pp@unknown@bottom{%
+ \innernortheast \wg@tmpa=\pgf@x%
+ \cntrlnortheast \wg@tmpb=\pgf@x%
+ \pgfpathcurveto{%
+ \pgfqpoint{-\wg@tmpa}{-\wg@tmpb}}{%
+ \pgfqpoint{ \wg@tmpa}{-\wg@tmpb}}{%
+ \pgfqpoint{ \wg@tmpa}{-\wg@tmpa}}}
+ \def\n@to@pp@unknown@right{%
+ \innernortheast \wg@tmpa=\pgf@x%
+ \cntrlnortheast \wg@tmpb=\pgf@x%
+ \pgfpathcurveto{%
+ \pgfqpoint{ \wg@tmpb}{-\wg@tmpa}}{%
+ \pgfqpoint{ \wg@tmpb}{ \wg@tmpa}}{%
+ \pgfqpoint{ \wg@tmpa}{ \wg@tmpa}}}
+}
+% \end{macrocode}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown land}
+%
+% The unknown land command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown land}{%
+ \inheritsavedanchors[from=natoapp6c base]
+ \savedanchor\innernortheast{\pgf@x=.7\n@to@pp@r\pgf@y=.7\n@to@pp@r}
+ \savedanchor\cntrlnortheast{\pgf@x=1.6\n@to@pp@r\pgf@y=1.6\n@to@pp@r}
+ \savedanchor\northeast{\pgf@x=1.4\n@to@pp@r\pgf@y=1.4\n@to@pp@r}
+ \anchor{inner north east}{\innernortheast}
+ \anchor{inner north west}{\innernortheast\pgf@x=-\pgf@x}
+ \anchor{inner south west}{\innernortheast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{inner south east}{\innernortheast\pgf@y=-\pgf@y}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{north}{\northeast\pgf@x=0cm}
+ \anchor{east}{\northeast\pgf@y=0cm}
+ \anchor{south}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0cm}
+ \inheritanchor[from=natoapp6c base]{center}
+ \inheritanchor[from=natoapp6c base]{upper}
+ \inheritanchor[from=natoapp6c base]{lower}
+ \inheritanchor[from=natoapp6c base]{left}
+ \inheritanchor[from=natoapp6c base]{right}
+ \backgroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \n@to@pp@unknown@bottom%
+ }
+ \behindforegroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \n@to@pp@unknown@bottom%
+ \pgfusepath{stroke}}
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown air}
+%
+% The unknown air command. To consider: Should clipping path extend
+% below the actual symbol to include that part of the base symbol?
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown air}{%
+ \inheritsavedanchors[from=natoapp6c unknown land]
+ \inheritanchor[from=natoapp6c unknown land]{inner north east}
+ \inheritanchor[from=natoapp6c unknown land]{inner north west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south east}
+ \inheritanchor[from=natoapp6c unknown land]{north east}
+ \inheritanchor[from=natoapp6c unknown land]{north west}
+ \inheritanchor[from=natoapp6c unknown land]{north}
+ \inheritanchor[from=natoapp6c unknown land]{west}
+ \inheritanchor[from=natoapp6c unknown land]{east}
+ \inheritanchor[from=natoapp6c unknown land]{upper}
+ \inheritanchor[from=natoapp6c unknown land]{lower}
+ \inheritanchor[from=natoapp6c unknown land]{left}
+ \inheritanchor[from=natoapp6c unknown land]{right}
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \anchor{south}{\innernortheast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{south east}{
+ \northeast\wg@tmpa=\pgf@x
+ \innernortheast\pgf@y=-\pgf@y
+ \pgf@x=\wg@tmpa}
+ \anchor{south west}{
+ \northeast\wg@tmpa=\pgf@x
+ \innernortheast\pgf@y=-\pgf@y
+ \pgf@x=-\wg@tmpa}
+ \backgroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \ifn@to@pp@isclip
+ \pgfpathlineto{\pgfqpoint{0cm}{-\radius}}
+ \pgfpathclose
+ \fi
+ }
+ \behindforegroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \pgfusepath{stroke}%
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown activity}
+%
+% The unknown activity command. Similar to land command, but with
+% boxes in the the `corners'.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown activity}{%
+ \inheritsavedanchors[from=natoapp6c unknown land]
+ \inheritanchor[from=natoapp6c unknown land]{inner north east}
+ \inheritanchor[from=natoapp6c unknown land]{inner north west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south east}
+ \inheritanchor[from=natoapp6c unknown land]{north east}
+ \inheritanchor[from=natoapp6c unknown land]{north west}
+ \inheritanchor[from=natoapp6c unknown land]{south east}
+ \inheritanchor[from=natoapp6c unknown land]{south west}
+ \inheritanchor[from=natoapp6c unknown land]{north}
+ \inheritanchor[from=natoapp6c unknown land]{west}
+ \inheritanchor[from=natoapp6c unknown land]{east}
+ \inheritanchor[from=natoapp6c unknown land]{south}
+ \inheritanchor[from=natoapp6c unknown land]{upper}
+ \inheritanchor[from=natoapp6c unknown land]{lower}
+ \inheritanchor[from=natoapp6c unknown land]{left}
+ \inheritanchor[from=natoapp6c unknown land]{right}
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \inheritbackgroundpath[from=natoapp6c unknown land]
+ \behindforegroundpath{
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \begin{n@to@pp@stroketofill}
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \n@to@pp@unknown@bottom%
+ \pgfusepath{stroke,clip}
+ %
+ \northeast\wg@tmpa\pgf@x
+ \advance\wg@tmpa0.005cm
+ \wg@tmpb=\wg@tmpa
+ \advance\wg@tmpb-\n@to@pp@act@w
+ \wg@tmpc=\n@to@pp@act@w
+ \divide\wg@tmpc2
+ %
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpc}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpc}{\wg@tmpb}}%
+ \pgfclosepath%
+ \pgfusepath{fill}
+ %
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpc}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{-\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpc}{-\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpc}{-\wg@tmpa}}%
+ \pgfclosepath%
+ \pgfusepath{fill}
+ %
+ \pgfpathmoveto{\pgfqpoint{ \wg@tmpa}{ \wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpb}{ \wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpb}{-\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpa}{-\wg@tmpc}}%
+ \pgfclosepath%
+ \pgfusepath{fill}
+ %
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpb}{ \wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{ \wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{-\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpb}{-\wg@tmpc}}%
+ \pgfclosepath%
+ \pgfusepath{fill}
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown equipment}
+%
+% The unknown equipment command. Same as land command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown equipment}{%
+ \inheritsavedanchors[from=natoapp6c unknown land]
+ \inheritanchor[from=natoapp6c unknown land]{inner north east}
+ \inheritanchor[from=natoapp6c unknown land]{inner north west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south east}
+ \inheritanchor[from=natoapp6c unknown land]{north east}
+ \inheritanchor[from=natoapp6c unknown land]{north west}
+ \inheritanchor[from=natoapp6c unknown land]{south east}
+ \inheritanchor[from=natoapp6c unknown land]{south west}
+ \inheritanchor[from=natoapp6c unknown land]{north}
+ \inheritanchor[from=natoapp6c unknown land]{west}
+ \inheritanchor[from=natoapp6c unknown land]{east}
+ \inheritanchor[from=natoapp6c unknown land]{south}
+ \inheritanchor[from=natoapp6c unknown land]{upper}
+ \inheritanchor[from=natoapp6c unknown land]{lower}
+ \inheritanchor[from=natoapp6c unknown land]{left}
+ \inheritanchor[from=natoapp6c unknown land]{right}
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \inheritbackgroundpath[from=natoapp6c unknown land]
+ \inheritbehindforegroundpath[from=natoapp6c unknown land]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown installation}
+%
+% The unknown installation command. Similar to land command, but
+% with a `hat' on top. Note, NATO App6(d) makes the `hat' lower
+% part disconnected from the main symbol. I find that ugly, so we
+% do it like NATO App6(c).
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown installation}{%
+ \inheritsavedanchors[from=natoapp6c unknown land]
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \inheritanchor[from=natoapp6c unknown land]{inner north east}
+ \inheritanchor[from=natoapp6c unknown land]{inner north west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south east}
+ \inheritanchor[from=natoapp6c unknown land]{north east}
+ \inheritanchor[from=natoapp6c unknown land]{north west}
+ \inheritanchor[from=natoapp6c unknown land]{south east}
+ \inheritanchor[from=natoapp6c unknown land]{south west}
+ \inheritanchor[from=natoapp6c unknown land]{north}
+ \inheritanchor[from=natoapp6c unknown land]{west}
+ \inheritanchor[from=natoapp6c unknown land]{east}
+ \inheritanchor[from=natoapp6c unknown land]{south}
+ \inheritanchor[from=natoapp6c unknown land]{upper}
+ \inheritanchor[from=natoapp6c unknown land]{lower}
+ \inheritanchor[from=natoapp6c unknown land]{left}
+ \inheritanchor[from=natoapp6c unknown land]{right}
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \inheritbackgroundpath[from=natoapp6c unknown land]
+ \behindforegroundpath{
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \n@to@pp@unknown@bottom%
+ \pgfusepath{stroke}
+ %
+ \begin{n@to@pp@stroketofill}
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpa}}%
+ \n@to@pp@unknown@top %
+ %
+ \northeast\wg@tmpb=\pgf@y\wg@tmpc=\pgf@y%
+ \advance\wg@tmpb\n@to@pp@inst@h%
+ \advance\wg@tmpb-0.05cm%
+ \advance\wg@tmpc-\n@to@pp@inst@h%
+ \advance\wg@tmpc-\n@to@pp@inst@h%
+ %
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \wg@tmpa}{\wg@tmpb}}%
+ \pgfclosepath%
+ \pgfusepath{clip}%
+ %
+ \pgfpathmoveto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{-\n@to@pp@inst@x}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{ \n@to@pp@inst@x}{\wg@tmpc}}%
+ \pgfclosepath%
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown sea surface}
+%
+% The unknown sea surface command. Same as land command
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown sea surface}{%
+ \inheritsavedanchors[from=natoapp6c unknown land]
+ \inheritanchor[from=natoapp6c unknown land]{inner north east}
+ \inheritanchor[from=natoapp6c unknown land]{inner north west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south east}
+ \inheritanchor[from=natoapp6c unknown land]{north east}
+ \inheritanchor[from=natoapp6c unknown land]{north west}
+ \inheritanchor[from=natoapp6c unknown land]{south east}
+ \inheritanchor[from=natoapp6c unknown land]{south west}
+ \inheritanchor[from=natoapp6c unknown land]{north}
+ \inheritanchor[from=natoapp6c unknown land]{west}
+ \inheritanchor[from=natoapp6c unknown land]{east}
+ \inheritanchor[from=natoapp6c unknown land]{south}
+ \inheritanchor[from=natoapp6c unknown land]{upper}
+ \inheritanchor[from=natoapp6c unknown land]{lower}
+ \inheritanchor[from=natoapp6c unknown land]{left}
+ \inheritanchor[from=natoapp6c unknown land]{right}
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \inheritbackgroundpath[from=natoapp6c unknown land]
+ \inheritbehindforegroundpath[from=natoapp6c unknown land]
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown space}
+%
+% The unknown space command. Similar to air command, but with a top
+% bar.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown space}{%
+ \inheritsavedanchors[from=natoapp6c unknown air]
+ \inheritanchor[from=natoapp6c unknown air]{inner north east}
+ \inheritanchor[from=natoapp6c unknown air]{inner north west}
+ \inheritanchor[from=natoapp6c unknown air]{inner south west}
+ \inheritanchor[from=natoapp6c unknown air]{inner south east}
+ \inheritanchor[from=natoapp6c unknown air]{north east}
+ \inheritanchor[from=natoapp6c unknown air]{north west}
+ \inheritanchor[from=natoapp6c unknown air]{south east}
+ \inheritanchor[from=natoapp6c unknown air]{south west}
+ \inheritanchor[from=natoapp6c unknown air]{north}
+ \inheritanchor[from=natoapp6c unknown air]{west}
+ \inheritanchor[from=natoapp6c unknown air]{east}
+ \inheritanchor[from=natoapp6c unknown air]{south}
+ \inheritanchor[from=natoapp6c unknown air]{upper}
+ \inheritanchor[from=natoapp6c unknown air]{lower}
+ \inheritanchor[from=natoapp6c unknown air]{left}
+ \inheritanchor[from=natoapp6c unknown air]{right}
+ \inheritanchor[from=natoapp6c unknown air]{center}
+ \inheritbackgroundpath[from=natoapp6c unknown air]
+ \behindforegroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \begin{n@to@pp@stroketofill}
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{-\wg@tmpa}}%
+ \n@to@pp@unknown@right %
+ \n@to@pp@unknown@top %
+ \n@to@pp@unknown@left %
+ \pgfusepath{stroke,clip}%
+ %
+ \northeast\wg@tmpa=\pgf@y\wg@tmpb=\pgf@y
+ \advance\wg@tmpb-\n@to@pp@space@h
+ %
+ \pgfpathmoveto{\pgfqpoint{ \radius}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\radius}{\wg@tmpa}}%
+ \pgfpathlineto{\pgfqpoint{-\radius}{\wg@tmpb}}%
+ \pgfpathlineto{\pgfqpoint{ \radius}{\wg@tmpb}}%
+ \pgfclosepath%
+ \pgfusepath{fill}%
+ \end{n@to@pp@stroketofill}
+ }
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppFrame}{natoapp6c unknown sub surface}
+%
+% The unknown sub surface command.
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c unknown sub surface}{%
+ \inheritsavedanchors[from=natoapp6c unknown land]
+ \inheritanchor[from=natoapp6c unknown land]{inner north east}
+ \inheritanchor[from=natoapp6c unknown land]{inner north west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south west}
+ \inheritanchor[from=natoapp6c unknown land]{inner south east}
+ \inheritanchor[from=natoapp6c unknown land]{south east}
+ \inheritanchor[from=natoapp6c unknown land]{south west}
+ \inheritanchor[from=natoapp6c unknown land]{south}
+ \inheritanchor[from=natoapp6c unknown land]{west}
+ \inheritanchor[from=natoapp6c unknown land]{east}
+ \inheritanchor[from=natoapp6c unknown land]{upper}
+ \inheritanchor[from=natoapp6c unknown land]{lower}
+ \inheritanchor[from=natoapp6c unknown land]{left}
+ \inheritanchor[from=natoapp6c unknown land]{right}
+ \inheritanchor[from=natoapp6c unknown land]{center}
+ \anchor{north}{\innernortheast\pgf@x=0cm}
+ \anchor{north east}{
+ \northeast\wg@tmpa=\pgf@x
+ \innernortheast\pgf@y=\pgf@y
+ \pgf@x=\wg@tmpa}
+ \anchor{north west}{
+ \northeast\wg@tmpa=\pgf@x
+ \innernortheast\pgf@y=\pgf@y
+ \pgf@x=-\wg@tmpa}
+ \backgroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpa}{\wg@tmpa}}%
+ \n@to@pp@unknown@left %
+ \n@to@pp@unknown@bottom %
+ \n@to@pp@unknown@right %
+ \ifn@to@pp@isclip
+ \pgfpathlineto{\pgfqpoint{0cm}{\radius}}
+ \pgfpathclose
+ \fi
+ }
+ \behindforegroundpath{%
+ \n@to@pp@unknown@init
+ \innernortheast \wg@tmpa=\pgf@x%
+ \pgfpathmoveto{\pgfqpoint{-\wg@tmpa}{\wg@tmpa}}%
+ \n@to@pp@unknown@left %
+ \n@to@pp@unknown@bottom %
+ \n@to@pp@unknown@right %
+ \pgfusepath{stroke}}
+}
+% \end{macrocode}
+% \end{NatoAppFrame}
+% \iffalse
+%</natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/list.dtx b/macros/latex/contrib/wargame/source/natoapp6c/list.dtx
new file mode 100644
index 0000000000..0500f01326
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/list.dtx
@@ -0,0 +1,266 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \begin{Macro}{\n@to@pp@s@ll}
+%
+% A list of all defined symbols
+%
+% \begin{macrocode}
+\def\n@to@pp@s@ll{
+ weapon=base,
+ weapon=top,
+ weapon=bottom,
+ weapon=rifle,
+ weapon=machine gun,
+ weapon=grenade launcher,
+ weapon=missile launcher,
+ weapon=non lethal,
+ weapon=multi fire,
+ weapon=air defence,
+ weapon=anti tank,
+ weapon=full,
+ weapon,
+ type=light,
+ type=medium,
+ type=heavy,
+ type=vlight,
+ type=vmedium,
+ type=vheavy,
+ type,
+ above corps support,
+ air assault with organic lift,
+ air decoy,
+ air assault,
+ air defence,
+ air strip,
+ air traffic,
+ airship,
+ airborne,
+ ammunition,
+ amphibious,
+ amphibious warfare ship,
+ analysis,
+ arrest,
+ artillery,
+ anti tank anti armour,
+ antenna,
+ armoured,
+ armoured fighting vehicle,
+ armoured personnel carrier,
+ arctic,
+ automobile,
+ balloon,
+ bar,
+ base,
+ bicycle equipped,
+ boat,
+ booby trap,
+ bottomed,
+ bridge=none,
+ bridge=fixed,
+ bridge=folding,
+ bridge=hollow,
+ bridge,
+ capsule,
+ carrier,
+ chemical biological radiological nuclear,
+ civilian military cooperation,
+ civilian police,
+ civilian telecommunications,
+ coast guard vessel,
+ combat support,
+ combatant,
+ combined arms,
+ computer system,
+ control,
+ convoy,
+ corps support,
+ crime,
+ decoy,
+ direct communications,
+ direction finding,
+ diving=none,
+ diving=military,
+ diving,
+ drilling,
+ earthmover,
+ electric power,
+ electronic ranging,
+ electronic warfare wide,
+ engineer,
+ enhanced location reporting system,
+ environmental protection,
+ explosion,
+ finance,
+ fishing vessel,
+ fire protection,
+ fixed and rotary wing,
+ fixed wing,
+ flame thrower,
+ floating,
+ surfaced,
+ food,
+ fuel,
+ grenade launcher=none,
+ grenade launcher=non lethal,
+ grenade launcher,
+ graffiti,
+ group,
+ gun=base,
+ gun=air defence,
+ gun=anti tank,
+ gun=direct,
+ gun=recoilless,
+ gun,
+ headquarters,
+ house,
+ howitzer,
+ in position,
+ individual,
+ infantry,
+ intermodal,
+ jagged wave,
+ jam,
+ jamming,
+ jetski,
+ killing,
+ labour,
+ land mine=personnel,
+ land mine=tank,
+ land mine=none,
+ land mine,
+ land missile,
+ laser,
+ launcher,
+ laundry,
+ machine gun,
+ main gun,
+ maintenance,
+ medic,
+ medical,
+ medical treatment,
+ mine,
+ mine clearing equipment,
+ mine warfare vessel,
+ missile,
+ missile launcher=base,
+ missile launcher=none,
+ missile launcher=air defence,
+ missile launcher=anti tank,
+ missile launcher=surface to surface,
+ missile launcher,
+ mobile advisor and support,
+ moored,
+ mortar,
+ motorized,
+ mortuary affairs,
+ mountain,
+ naval,
+ navigation,
+ navy task,
+ non combatant,
+ non lethal weapon,
+ nuclear,
+ observer,
+ orbiter shuttle,
+ ordnance,
+ organisation,
+ over snow,
+ pack animal,
+ patrol,
+ patrolling,
+ physician,
+ pipeline,
+ poisoning,
+ postal,
+ printed media,
+ psychological,
+ quarry,
+ quartermaster,
+ radar,
+ radio,
+ radio relay,
+ radio relay line of sight,
+ radio teletype,
+ railroad,
+ reconnaissance,
+ recovery unmanned systems,
+ rifle,
+ rising,
+ riverine,
+ rocket launcher=base,
+ rocket launcher=anti tank,
+ rocket launcher=single,
+ rocket launcher=multiple,
+ rocket launcher=single head,
+ rocket launcher=multiple head,
+ rocket launcher,
+ rotary wing,
+ runway,
+ sailing boat,
+ satellite=none,
+ satellite=astronomical,
+ satellite=bio,
+ satellite=communications,
+ satellite=navigation,
+ satellite=earth observing,
+ satellite=tether,
+ satellite=small,
+ satellite=reconnaissance,
+ satellite,
+ sea mine=top half,
+ sea mine=bottom half,
+ sea mine=full,
+ sea mine=neutralised,
+ sea mine=neutralized,
+ sea mine,
+ seabed installation,
+ search,
+ searching,
+ semi trailer truck,
+ sensor,
+ ship,
+ signal,
+ signals intelligence,
+ ski,
+ sled,
+ small squashed text=TXT,
+ small text=TXT,
+ sniper,
+ space station,
+ squashed text=TXT,
+ submarine,
+ submersible,
+ supply,
+ surface combatant,
+ survey,
+ tactical satellite,
+ tank,
+ text=TXT,
+ topographic,
+ torpedo,
+ towed,
+ tracked,
+ train locomotive,
+ transportation,
+ unexploded ordnance,
+ unmanned,
+ utility vehicle,
+ vehicle,
+ video imagery,
+ warfare vessel,
+ water,
+ wheeled=and tracked,
+ wheeled=limited,
+ wheeled=cross country,
+ wheeled=semi,
+ wheeled
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/shape.dtx b/macros/latex/contrib/wargame/source/natoapp6c/shape.dtx
new file mode 100644
index 0000000000..029be911b7
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/shape.dtx
@@ -0,0 +1,647 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{Text \texttt{natoapp6c} namespace}
+%
+% \begin{NatoAppKey}{/natoapp6c}
+%
+% Here, we set up the key path \spec{/natoapp6c}
+%
+% \begin{macrocode}
+\def\natoapp@report{}
+\tikzset{
+ /natoapp6c/.search also={/tikz},
+ /natoapp6c/.cd,
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \subsubsubsection{Choices of faction, command, and echelon}
+%
+% \begin{NatoAppKey}{natoapp6c/id,
+% natoapp6c/fac,
+% natoapp6c/cmd,
+% natoapp6c/ech}
+%
+% The keys \spec{id}, spec{fac}, \spec{cmd}, and \spec{ech} are
+% internal keys used to store the choice of faction, command, and
+% echelon, respectively, in.
+%
+% \begin{macrocode}
+\tikzset{
+ /natoapp6c/.cd,
+ id/.store in=\natoapp@id,
+ fac/.store in=\natoapp@fac,
+ cmd/.store in=\natoapp@cmd,
+ ech/.store in=\natoapp@ech,
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \begin{NatoAppKey}{natoapp6c/faction}
+%
+% Choice of \meta{faction}. This is limited to predefined values.
+% The choice is stored in the key \spec{natoapp6c/fac}.
+%
+% \begin{macrocode}
+\tikzset{
+ /natoapp6c/.cd,
+ faction/.is choice,
+ faction/none/.code={\let\natoapp@fac\@undefined},
+ faction/friendly/.style={fac=friendly},
+ faction/friend/.style={fac=friendly},
+ faction/hostile/.style={fac=hostile},
+ faction/enemy/.style={fac=hostile},
+ faction/neutral/.style={fac=neutral},
+ faction/unknown/.style={fac=unknown},
+ faction/?/.style={fac=unknown},
+ faction/.initial=friendly,
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \begin{NatoAppKey}{natoapp6c/command}
+%
+% Choice of \meta{command}. This is limited to predefined values.
+% The choice is stored in the key \spec{natoapp6c/cmd}.
+%
+% \begin{macrocode}
+\tikzset{
+ /natoapp6c/.cd,
+ command/.is choice,
+ command/base/.style={cmd=base},
+ command/activity/.style={cmd=activity},
+ command/air/.style={cmd=air},
+ command/missile/.style={cmd=air},
+ command/equipment/.style={cmd=equipment},
+ command/installation/.style={cmd=installation},
+ command/land/.style={cmd=land},
+ command/sea surface/.style={cmd=sea surface},
+ command/space/.style={cmd=space},
+ command/sub surface/.style={cmd=sub surface},
+ command/sea mine/.style={cmd=sub surface},
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \begin{NatoAppKey}{natoapp6c/echolon}
+%
+% Unit size. The choice is limited to one of the below. The choice
+% is stored in the key \spec{natoapp6c/ech}.
+%
+% \begin{macrocode}
+\tikzset{
+ /natoapp6c/.cd,
+ echelon/.is choice,
+ echelon/none/.style={ech=},
+ echelon/team/.style={ech=},
+ echelon/squad/.style={ech=squad},
+ echelon/section/.style={ech=section},
+ echelon/platoon/.style={ech=platoon},
+ echelon/company/.style={ech=company},
+ echelon/battalion/.style={ech=battalion},
+ echelon/regiment/.style={ech=regiment},
+ echelon/brigade/.style={ech=brigade},
+ echelon/division/.style={ech=division},
+ echelon/corps/.style={ech=corps},
+ echelon/army/.style={ech=army},
+ echelon/army group/.style={ech=army group},
+ echelon/theatre/.style={ech=theatre},
+ echelon/command/.style={ech=command},
+ echelon/dummy/.style={ech=dummy},
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \begin{NatoAppKey}{natoapp6c/main,
+% natoapp6c/left,
+% natoapp6c/right,
+% natoapp6c/top,
+% natoapp6c/bottom,
+% natoapp6c/below,
+% natoapp6c/frame}
+% \begin{Macro}{\natoapp@main,
+% \natoapp@left,
+% \natoapp@right,
+% \natoapp@upper,
+% \natoapp@lower,
+% \natoapp@below}
+%
+% The various parts of the symbols. The keys \spec{upper} and
+% \spec{lower} are aliases for \spec{top} and \spec{bottom},
+% respectively. The choices are stored in macros
+%
+% \begin{macrocode}
+\newif\ifnatoapp@decoy\natoapp@decoyfalse
+\tikzset{
+ /natoapp6c/.cd,
+ main/.store in=\natoapp@main, main/.initial=,%
+ left/.store in=\natoapp@left, left/.initial=,%
+ right/.store in=\natoapp@right, right/.initial=,%
+ upper/.store in=\natoapp@upper, upper/.initial=,%
+ lower/.store in=\natoapp@lower, lower/.initial=,%
+ top/.store in=\natoapp@upper,%
+ bottom/.store in=\natoapp@lower,%
+ below/.store in=\natoapp@below, below/.initial=,%
+ frame/.store in=\natoapp@frame, frame/.initial=,%
+ decoy/.is if=natoapp@decoy,%
+}
+% \end{macrocode}
+% \end{Macro}
+% \end{NatoAppKey}
+%
+% \begin{TikzKey}{/tikz/natoapp6c/main,
+% /tikz/natoapp6c/modifiers,
+% /tikz/natoapp6c/lower,
+% /tikz/natoapp6c/upper,
+% /tikz/natoapp6c/left,
+% /tikz/natoapp6c/right,
+% /tikz/natoapp6c/echelon,
+% /tikz/natoapp6c/below}
+%
+% Styles used by the various parts of the symbol.
+%
+% \begin{macrocode}
+\tikzset{
+ natoapp6c/parts/.style={draw,shape=rectangle,transform shape},
+ natoapp6c/main/.style={natoapp6c/parts},
+ natoapp6c/modifiers/.style={natoapp6c/parts,scale=.6},
+ natoapp6c/lower/.style={natoapp6c/parts},
+ natoapp6c/upper/.style={natoapp6c/parts},
+ natoapp6c/left/.style={natoapp6c/parts},
+ natoapp6c/right/.style={natoapp6c/parts},
+ natoapp6c/echelon/.style={natoapp6c/parts},
+ natoapp6c/below/.style={natoapp6c/parts}
+}
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{The \texttt{natoapp6c} styles}
+%
+% \begin{TikzKey}{/tikz/natoapp6c}
+% This key sets up a node to make a NATO App6(c) symbol. The key
+% takes a single argument which in turn must contain key--value
+% pairs in the \texttt{/natoapp6c} (or \texttt{/tikz}) namespace(s). We
+% set the \texttt{shape} parameter of the node, and calls the passed
+% keys in the \texttt{/natoapp6c} namespace to set-up elements of the
+% chit.
+%
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/.code={%
+ \pgfkeys{/tikz/transform shape,/tikz/shape=natoapp6c}
+ \pgfkeys{/natoapp6c/.cd,#1}}}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% We define a counter to set-up unique names for symbol nodes.
+%
+% \begin{macrocode}
+\newcounter{natoappid}\setcounter{natoappid}{0}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{The \cs{natoapp6c} shape}
+%
+% \begin{Macro}{\ifn@to@pp@below,\ifn@to@pp@mod}
+%
+% We define an \cs{if} to allow us to detect if something is
+% rendered below the frame
+%
+% \begin{macrocode}
+\newif\ifn@to@pp@below\n@to@pp@belowfalse%
+\newif\ifn@to@pp@mod\n@to@pp@modfalse%
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{NatoAppFrame}{natoapp6c}
+%
+% Next, we define the mother shape of NATO App6(c) nodes. This is a
+% composite node with sub-nodes for the various parts (including the
+% frame) of the symbol.
+%
+% It is quite complex so we will go through the implementation in
+% bits.
+%
+% First, we make some saved anchors (the centre) and macros
+% (identifier, frame type, and frame options).
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c}{%
+ \savedanchor\center{\pgf@x=0cm\pgf@y=0cm}
+ \savedmacro\id{%
+ \n@to@pp@dbg{3}{NATO App6(c) id (set): \meaning\natoapp@id}
+ \@ifundefined{natoapp@id}{\let\natoapp@id\pgfutil@empty}{}%
+ \ifx\natoapp@id\pgfutil@empty\relax%
+ \wg@r@ndom@id%
+ \edef\id{natoapp6c\wg@uuid}%
+ \else%
+ \edef\id{\natoapp@id}%
+ \fi%
+ \n@to@pp@dbg{3}{NATO App6(c) id: \meaning\id}}
+ \savedmacro\frameshape{%
+ \let\frameshape\pgfutil@empty%
+ \@ifundefined{natoapp@cmd}{\def\frameshape{base}}{%
+ \edef\frameshape{\natoapp@cmd}
+ \@ifundefined{natoapp@fac}{\def\frameshape{base}}{%
+ \edef\frameshape{\natoapp@fac\space\frameshape}}}
+ \n@to@pp@dbg{3}{NATO App6(c) frame shape: \meaning\frameshape}}
+ \savedmacro\frameopt{%
+ \let\frameopt\pgfutil@empty%
+ \@ifundefined{natoapp@frame}{}{%
+ \edef\frameopt{\natoapp@frame}}
+ \n@to@pp@dbg{3}{NATO App6(c) Frame options: \meaning\frameopt}%
+ }
+% \end{macrocode}
+%
+% Then we define a number of regular anchors
+%
+% \begin{macrocode}
+ \anchor{center} {\center}
+% \end{macrocode}
+%
+% The remaining anchors depend on the shape being used. We reference
+% the anchors of the embedded node of the frame.
+%
+% \begin{macrocode}
+ \anchor{north east}{\wg@sub@nchor{M\id}{north east}}
+ \anchor{north west}{\wg@sub@nchor{M\id}{north west}}
+ \anchor{south east}{\wg@sub@nchor{M\id}{south east}}
+ \anchor{south west}{\wg@sub@nchor{M\id}{south west}}
+ \anchor{north} {\wg@sub@nchor{M\id}{north}}
+ \anchor{west} {\wg@sub@nchor{M\id}{west}}
+ \anchor{south} {\wg@sub@nchor{M\id}{south}}
+ \anchor{east} {\wg@sub@nchor{M\id}{east}}
+ \anchor{upper} {\wg@sub@nchor{M\id}{upper}}
+ \anchor{lower} {\wg@sub@nchor{M\id}{lower}}
+ \anchor{left} {\wg@sub@nchor{M\id}{left}}
+ \anchor{right} {\wg@sub@nchor{M\id}{right}}
+% \end{macrocode}
+%
+% The next two anchors are a little funny.
+%
+% \begin{macrocode}
+ \anchor{echelon} {%
+ \n@to@pp@dbg{3}{NATO App6(c) get echelon anchor}%
+ \wg@sub@nchor{M\id}{north}%
+ \wg@tmpa=\n@to@pp@e@y cm%
+ \advance\pgf@y\wg@tmpa%
+ }%
+ \anchor{below} {%
+ \n@to@pp@dbg{3}{NATO App6(c) get below anchor}%
+ \wg@sub@nchor{M\id}{south}
+ \wg@tmpa=\n@to@pp@e@yy cm%
+ \advance\pgf@y-\wg@tmpa}
+% \end{macrocode}
+%
+% All right, so time to make the actual frame. Note that we do this
+% in a `behind' path so we can actually draw stuff. First, we flag
+% that we're not in a modifier, nor in the `below' part.
+%
+% \begin{macrocode}
+ \behindbackgroundpath{%
+ \n@to@pp@dbg{3}{NATO App6(c) background path: \meaning\id
+ ^^J ID: \meaning\natoapp@id
+ ^^J Faction: \meaning\natoapp@fac
+ ^^J Command: \meaning\natoapp@cmd
+ ^^J Echelon: \meaning\natoapp@ech
+ ^^J Main: \meaning\natoapp@main
+ ^^J Left: \meaning\natoapp@left
+ ^^J Right: \meaning\natoapp@right
+ ^^J Upper: \meaning\natoapp@upper
+ ^^J Lower: \meaning\natoapp@lower
+ ^^J Below: \meaning\natoapp@below
+ ^^J Shape: \meaning\frameshape
+ ^^J Options: \meaning\frameopt}
+ \natoapp@report
+ \n@to@pp@modfalse
+ \n@to@pp@belowfalse
+% \end{macrocode}
+%
+% If the symbol is empty, then do nothing.
+%
+% \begin{macrocode}
+ \ifx\frameshape\pgfutil@empty%
+ \n@to@pp@dbg{2}{NATO App6(c) has no frame!}
+ \else
+% \end{macrocode}
+%
+% We start a scope because we want to do some clipping here. Then, we
+% use the frame to clip the remaining part. Note that we do this via
+% a node which we give the identifier \spec{M}. Various elements of
+% the symbol can then refer to this shape to define paths, etc.
+%
+% \begin{macrocode}
+ \begin{scope}
+ \pgfinterruptboundingbox
+ %% Clip to shape in scope
+ %% \message{^^JClipping to NATO App6(c) shape}
+ \n@to@pp@iscliptrue%
+ \n@to@pp@dbg{2}{NATO App6(c) frame node M (clip)}
+ \pgfnode{natoapp6c \frameshape}{center}{}{M}{\pgfusepath{clip}}
+ \n@to@pp@isclipfalse%
+% \end{macrocode}
+%
+% Next, we should see if we need to fill the frame. We do that by
+% expanding the passed \spec{frame} key-values in a scope, and
+% \emph{then} get the fill colour.
+%
+% \begin{macrocode}
+ %% Start new scope including frame key options
+ \edef\tmp@opt{[\frameopt]}
+ \expandafter\scope\tmp@opt
+ % Get fill color {possibly from frame key}
+ \expandafter\let\expandafter\tmp@fill%
+ \csname\string\color@pgffillcolor\endcsname%
+% \end{macrocode}
+%
+% If the fill colour is not \cs{relax}, then we fill the frame. Note
+% that this is done in the background, so when we draw in the
+% foreground we will render on top of the fill.
+%
+% \begin{macrocode}
+ % Check if we need to fill shape (fill colour us not \relax)
+ \ifx\tmp@fill\relax\else%
+ \n@to@pp@dbg{2}{NATO App6(c) frame fill}
+ \pgfnode{natoapp6c \frameshape}{center}{}{}{\pgfusepath{fill}}%
+ \fi%
+ % End the fill scope
+ \endscope%
+% \end{macrocode}
+%
+% Now we need to render some of the elements of the symbol. We start
+% with the main elements. We can specify many main elements (to make
+% composite symbols).
+%
+% \begin{macrocode}
+ % Render mains
+ \@ifundefined{natoapp@main}{}{
+ \n@to@pp@dbg{2}{NATO App6(c) mains: \meaning\natoapp@main}
+ \begin{scope}[natoapp6c/main]
+ \wg@pic@all{\natoapp@main}{natoapp6c/s/}{M.center}{natoapp6c/main}%
+ \end{scope}}%
+ % Modififiers flagged
+% \end{macrocode}
+%
+% The next thing is to render the various modifiers. We start by
+% flagging this globally.
+%
+% \begin{macrocode}
+ \n@to@pp@modtrue
+ \n@to@pp@dbg{2}{NATO App6(c) modifiers}
+% \end{macrocode}
+%
+% Below we render the lower, upper, left, and right elements. This is
+% all done in the same way. Note that the elements positions are
+% dictated by anchors of the frame shape (via shape identifier
+% \spec{M}).
+%
+% \begin{macrocode}
+ % Render lowers
+ \@ifundefined{natoapp@lower}{}{%
+ \begin{scope}%
+ \wg@pic@all{\natoapp@lower}{natoapp6c/s/}{M.lower}{%
+ natoapp6c/modifiers,natoapp6c/lower}%
+ \end{scope}}%
+ % Render uppers
+ \@ifundefined{natoapp@upper}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\natoapp@upper}{natoapp6c/s/}{M.upper}{%
+ natoapp6c/modifiers,natoapp6c/upper}%
+ \end{scope}}%
+ % Render lefts
+ \@ifundefined{natoapp@left}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\natoapp@left}{natoapp6c/s/}{M.left}{%
+ natoapp6c/modifiers,natoapp6c/left}%
+ \end{scope}}%
+ % Render rights
+ \@ifundefined{natoapp@right}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\natoapp@right}{natoapp6c/s/}{M.right}{%
+ natoapp6c/modifiers,natoapp6c/right}%
+ \end{scope}}%
+ % Modififiers end
+ \n@to@pp@modfalse%
+ \endpgfinterruptboundingbox
+ \end{scope}%
+ \fi%
+ }
+% \end{macrocode}
+%
+% That concludes rendering most of the symbol. We have not put in the
+% echelon, below element, or drawn the frame yet. That we will do on
+% the foreground path.
+%
+% \begin{macrocode}
+% \end{macrocode}
+%
+% In the foreground `behind' path we render the echelon, below
+% element, and draw the frame.
+%
+% \begin{macrocode}
+ \behindforegroundpath{%
+ \n@to@pp@dbg{2}{NATO App6(c) foreground path:
+ ^^J Echelon: \meaning\natoapp@ech
+ ^^J Symbol: \meaning\frameshape
+ ^^J Below: \meaning\natoapp@below
+ ^^J Frame: \meaning\frameopt}
+ %
+% \end{macrocode}
+%
+% We check if we have a frame. If not, stop.
+%
+% \begin{macrocode}
+ \ifx\frameshape\pgfutil@empty%
+ \n@to@pp@dbg{2}{NATO App6(c) has no frame shape!}%
+ \else%
+% \end{macrocode}
+%
+% We want to draw the rest of the symbol as a part of the frame, so we
+% expand the \spec{frame} options in a scope.
+%
+% \begin{macrocode}
+
+ \edef\tmp@opt{[\frameopt]}
+ \expandafter\scope\tmp@opt
+% \end{macrocode}
+%
+% First thing in this scope is to draw the actual frame. Again, this
+% is done via a node with the right shape. Note that we label this
+% node as \spec{M}\meta{id} so we way refer to it later on.
+%
+% \begin{macrocode}
+ \n@to@pp@dbg{2}{NATO App6(c) inner node `M\id' ===}
+ \pgfnode{natoapp6c \frameshape}{center}{}{M\id}{\pgfusepath{stroke}}
+% \end{macrocode}
+%
+% If the user gave an echelon, then put that in. Note that echelons
+% are limited to predefined values.
+%
+% \begin{macrocode}
+ % Put in the echelon
+ \@ifundefined{natoapp@ech}{}{%
+ \ifx\natoapp@ech\pgfutil@empty\else%
+ \def\args{echelon=\natoapp@ech}
+ \expandafter\wg@pic\args\@endwg@pic%
+ {natoapp6c/s/}{$(M.north)+(0,1.2*\n@to@pp@e@y)$}{natoapp6c/echelon}
+ \fi%
+ }
+% \end{macrocode}
+%
+% If the user want something under the frame, put that in.
+%
+% \begin{macrocode}
+ % Put in stuff below main
+ \@ifundefined{natoapp@below}{}{%
+ \n@to@pp@belowtrue
+ \begin{scope}
+ \wg@pic@all{\natoapp@below}{natoapp6c/s/}{%
+ $(M.south)+(0,-\n@to@pp@e@yy)$}{%
+ natoapp6c/below}%
+ \end{scope}%
+ \n@to@pp@belowfalse}
+% \end{macrocode}
+%
+% If the \spec{decoy} flag was set, we draw that.
+%
+% \begin{macrocode}
+ \ifnatoapp@decoy%
+ \scope[dash pattern=on 3\pgflinewidth off 2\pgflinewidth]%
+ \n@to@pp@dbg{1}{Drawing decoy modifier}%
+ \wg@sub@nchor{M\id}{north east}
+ \wg@tmpa=\pgf@x%
+ \wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpc=\n@to@pp@e@yy cm%
+ \advance\wg@tmpc\n@to@pp@e@yy cm%
+ \advance\wg@tmpc\wg@tmpb%
+ \pgfpathlineto{\pgfqpoint{0cm}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfusepath{stroke}%
+ \endscope%
+ \fi%
+ \endscope%
+ \fi%
+ }
+}
+% \end{macrocode}
+%
+% That finished the shape for NATO App6(c) symbols. We could stop
+% here, but for convenience we define a wrapper macro.
+%
+% \end{NatoAppFrame}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{The \cs{natoapp} wrapper macro}
+%
+% \begin{Macro}{\natoapp}
+%
+% This is a wrapper macro for inserting a node with a NATO App6(c)
+% symbol in it. The syntax of the macro is
+%
+% \begin{Syntax}
+% \cs{natoapp}\oarg{natoapp6c options}\parg{position}\parg{identifier};
+% \end{Syntax}
+%
+% Note that the trailing semi-colon (\spec{;}) is optional.
+%
+% This macro forwards to \cs{n@toapp}.
+%
+% \begin{macrocode}
+\newcommand\natoapp[1][]{%
+ \n@to@pp@dbg{2}{NATO App6(c) macro -> `#1'}
+ \tikzset{/natoapp6c/.cd,faction=friendly,command=land}%
+ \@ifnextchar({\n@toapp{#1}}{\n@toapp{#1}(0,0)}%)
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\n@toapp}
+%
+% This macro takes care to parse the location argument --- if any.
+% It forwards to \cs{n@to@pp}.
+%
+% \begin{macrocode}
+\def\n@toapp#1(#2){%
+ \n@to@pp@dbg{2}{NATO App6(c) second macro -> `#1', `#2'}
+ \@ifnextchar({\n@to@pp{#1}{#2}}{\n@to@pp{#1}{#2}()}%)
+}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\n@to@pp}
+% This is the main work-horse of the wrapper. It makes a node with
+% the shape \spec{natoapp6c} passing the relevant parameters. The
+% syntax of the macro is
+%
+% \begin{macrocode}
+\def\n@to@pp#1#2(#3){%
+ %\let\name\pgfutil@empty%
+ %\ifx|#3|\else\edef\name{(#3)}\fi%
+ %\n@to@pp@dbg{3}{Arguments: #1}%
+ %\edef\args{[natoapp6c={#1},transform shape] \name at (#2) {}}
+ %\expandafter\node\args;%
+ \node[draw,transform shape,natoapp6c={#1}] (#3) at (#2) {};%
+ \@ifnextchar;{\@gobble}{}}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Macros for markings}
+%
+% \begin{Macro}{\natoappmark}
+%
+% A macro for making NATO App6(c) markings.
+%
+% \begin{macrocode}
+\providecommand\natoappmark[2][]{%
+ \tikz[scale=.25,#1]{\natoapp[faction=friendly,command=land,main=#2]}}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\echelonmark}
+% \begin{macrocode}
+\providecommand\echelonmark[2][]{\tikz[scale=.5,#1]{%
+ \pic[scale line widths,line width=1pt] {natoapp6c/s/echelon=#2};}}
+% \end{macrocode}
+% \end{Macro}
+%
+% Some specific NATO App6(c) markers.
+%
+% \begin{macrocode}
+\DeclareRobustCommand\armouredmark[1][]{\natoappmark[#1]{armoured}}
+\DeclareRobustCommand\infantrymark[1][]{\natoappmark[#1]{infantry}}
+\DeclareRobustCommand\artillerymark[1][]{%
+ \natoappmark[#1]{{[fill=pgfstrokecolor]artillery}}}
+\DeclareRobustCommand\combinedmark[1][]{\natoappmark[#1]{combined arms}}
+\DeclareRobustCommand\pgmark[1][] {\natoappmark[#1]{{armoured,infantry}}}
+\DeclareRobustCommand\reconnaissancemark[1][]{\natoappmark[#1]{reconnaissance}}
+\DeclareRobustCommand\corpsmark[1][]{\natoappmark[#1]{,echelon=corps}}
+\DeclareRobustCommand\divisionmark[1][]{\natoappmark[#1]{,echelon=division}}
+\DeclareRobustCommand\brigademark[1][] {\natoappmark[#1]{,echelon=brigade}}
+\DeclareRobustCommand\regimentmark[1][]{\natoappmark[#1]{,echelon=regiment}}
+\DeclareRobustCommand\sofmark[1][] {\natoappmark[#1]{{infantry,text=SOF}}}
+\DeclareRobustCommand\mountaineermark[1][]{%
+ \natoappmark[#1]{infantry,lower=mountain}}
+\DeclareRobustCommand\airbornemark[1][]{%
+ \natoappmark[#1]{infantry,lower=airborne}}
+\DeclareRobustCommand\amphibiousmark[1][]{\natoappmark[#1]{,lower=amphibious}}
+\DeclareRobustCommand\airassaultmark[1][]{%
+ \natoappmark[#1]{infantry,upper=air assault}}
+% \end{macrocode}
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/symbols.dtx b/macros/latex/contrib/wargame/source/natoapp6c/symbols.dtx
new file mode 100644
index 0000000000..19b41da5cf
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/symbols.dtx
@@ -0,0 +1,3165 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{The symbols}
+%
+% Next, we define all the symbols. Note that we define them all as if
+% they are in the \spec{main} section of the symbol, since \spec{top},
+% \spec{bottom}, and \spec{below} symbols are automatically scaled.
+%
+% \begin{NatoAppSymbol}{natoapp6c/s/above corps support}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/above corps support/.pic={%
+ \edef\n@toapp@path{\n@toapp@corps@support{\natoapp@fac}}
+ \expandafter\path[draw] \n@toapp@path;
+ \expandafter\path[draw,xscale=-1] \n@toapp@path;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/air assault with organic lift}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/air assault with organic lift/.pic={%
+ \ifx\n@to@pp@hostile\natoapp@fac%
+ \def\n@toapp@path{(-.75,-.2)--(-.15,-.2)--(0,-.5)--(.15,-.2)--(.75,-.2)}
+ \else
+ \def\n@toapp@path{(-.75,-.2)--(-.1,-.2)--(0,-.325)--(.1,-.2)--(.75,-.2)}
+ \fi
+ \path[draw] \n@toapp@path;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/air decoy}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/air decoy/.pic={%
+ \pic[pic actions]{natoapp6c/s/decoy};
+ \path[fill=pgfstrokecolor,pic actions] (0.4, -0.2) rectangle (-0.4, -0.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/air assault}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/air assault/.pic={%
+ \path[draw] ([shift={(150:.4)}]0,-.1)--(0,-.1)--([shift={(30:.4)}]0,-.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/air defence}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/air defence/.pic={%
+ \ifx\natoapp@fac\n@to@pp@friendly%
+ \def\n@toapp@opt{[out=90,in=90,looseness=.675]}%
+ \else\ifx\natoapp@fac\n@to@pp@neutral%
+ \def\n@toapp@opt{[out=90,in=90,looseness=1]}%
+ \else%
+ \def\n@toapp@opt{[out=45,in=135,looseness=1.5]}%
+ \fi\fi%
+ \edef\n@toapp@path{(M.south west) to\n@toapp@opt (M.south east)}
+ \path[draw] \n@toapp@path;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/air strip}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/air strip/.pic={%
+ \path[fill=pgfstrokecolor] (-.4,-.1) rectangle(.4,0);
+ \path[rotate=45,fill=pgfstrokecolor] (-.4,0) rectangle (.4,.1);
+ }
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/air traffic}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/air traffic/.pic={
+ \path[fill=pgfstrokecolor]
+ (0.33,0.21)--
+ (0.33, -0.21)--
+ (-0.33, 0.21)--
+ (-0.33,-0.21)--
+ cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/airship}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/airship/.pic={%
+ % \path (0.45, 0.175) rectangle (-0.45, -0.175);
+ \path[pic actions] (0, 0) ellipse (0.45 and 0.15);
+ \begin{scope}
+ \clip (0, 0) ellipse (0.45 and 0.15) [reverseclip];
+ \path[pic actions]
+ (0.2,0)--(0.3,0.175)--(0.4,0.175)--(0.375,0)
+ --(0.4,-0.175)--(0.3, -0.175)--cycle;
+ \end{scope}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/airborne}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/airborne/.pic={%
+ \ifx\n@to@pp@neutral\natoapp@fac%
+ \draw (0,-0.05) arc(0:180:0.15);
+ \draw (0,-0.05) arc(180:0:0.15);
+ \else%
+ \draw (0,-0.05) arc(0:180:0.2);
+ \draw (0,-0.05) arc(180:0:0.2);
+ \fi},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/ammunition}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/ammunition/.pic={\path[draw]
+ (0.175,-0.175)--(-0.175,-0.175)
+ (0.125,-0.175)--(0.125, 0) to[out=90,in=90,looseness=2.75]
+ (-0.125, 0)--(-0.125, -0.175);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/amphibious}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/amphibious/.pic={
+ \def\n@to@pp@tmp{0}
+ \ifn@to@pp@below\def\n@to@pp@tmp{-.1}\fi
+ \ifn@to@pp@mod
+ \path[draw,shift={(0,\n@to@pp@tmp)}](1.21,0)
+ to[out=-90,in=-90, looseness=2.25] (1.05, 0)
+ to[out= 90,in= 90, looseness=2.25] (0.89, 0)
+ to[out=-90,in=-90, looseness=2.25] (0.73, 0)
+ to[out= 90,in= 90, looseness=2.25] (0.57, 0)
+ to[out=-90,in=-90, looseness=2.25] (0.41, 0)
+ to[out= 90,in= 90, looseness=2.25] (0.25, 0)
+ to[out=-90,in=-90, looseness=2.25] (0.08, 0)
+ to[out= 90,in= 90, looseness=2.25] (-0.08, 0)
+ to[out=-90,in=-90, looseness=2.25] (-0.25, 0)
+ to[out= 90,in= 90, looseness=2.25] (-0.41, 0)
+ to[out=-90,in=-90, looseness=2.25] (-0.57, 0)
+ to[out= 90,in= 90, looseness=2.25] (-0.73, 0)
+ to[out=-90,in=-90, looseness=2.25] (-0.89, 0)
+ to[out= 90,in= 90, looseness=2.25] (-1.05, 0)
+ to[out=-90,in=-90, looseness=2.25] (-1.21, 0)
+ \else
+ \path[draw,shift={(0,\n@to@pp@tmp)}](0.73, 0)
+ to[out= 90,in= 90, looseness=2.25] (0.57, 0)
+ to[out=-90,in=-90, looseness=2.25] (0.41, 0)
+ to[out= 90,in= 90, looseness=2.25] (0.25, 0)
+ to[out=-90,in=-90, looseness=2.25] (0.08, 0)
+ to[out= 90,in= 90, looseness=2.25] (-0.08, 0)
+ to[out=-90,in=-90, looseness=2.25] (-0.25, 0)
+ to[out= 90,in= 90, looseness=2.25] (-0.41, 0)
+ to[out=-90,in=-90, looseness=2.25] (-0.57, 0)
+ to[out= 90,in= 90, looseness=2.25] (-0.73, 0)
+ \fi
+ ;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/amphibious warfare ship}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/amphibious warfare ship/.pic={
+ \pic{natoapp6c/s/warfare vessel};
+ \path[draw,fill=pgfstrokecolor]
+ (0.15, 0.05) --
+ (0.15, 0.2) --
+ (-0.15, 0.2) --
+ (-0.15, 0.05) -- cycle
+ (0, -0.2) rectangle (0.25, -0.175);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/analysis}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/analysis/.pic={
+ \path[pic actions]
+ (-0.3,-0.2)--(0.3,-0.2)--(0, -0.4)--cycle (0,-0.2)--(0,0.4);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/arrest}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/arrest/.pic={
+ \path[pic actions] circle(0.2);
+ \pic[scale=.8]{natoapp6c/s/individual};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/artillery}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/artillery/.pic={
+ \path[pic actions] circle(0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/anti tank anti armour}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/anti tank anti armour/.pic={%
+ \ifx\natoapp@fac\n@to@pp@unknown%
+ \path[draw,pic actions] (225:.5)--(M.north)--(315:.5);
+ \else%
+ \path[draw,pic actions] (M.south west)--(M.north)--(M.south east);%
+ \fi},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/antenna}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/antenna/.pic={\path[draw]
+ (0, -0.3) -- (0, 0.3) (-0.125, 0.3) -- (0, 0.2) -- (0.125, 0.3);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/armoured}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/armoured/.pic={\path[draw]
+ (-0.275,0.2) arc(90:270:0.2)--(0.275, -0.2) arc(270:450:0.2)--cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/armoured fighting vehicle}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/armoured fighting vehicle/.pic={
+ \path[fill=pgfstrokecolor] (-.4,-.2) rectangle (-.3,.2) (.3,-.2) rectangle (.4,.2);
+ \path[pic actions] (-.3,0) -- (0,.2) -- (.3,0) -- (0,-.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/armoured personnel carrier}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/armoured personnel carrier/.pic={
+ \pic[sub pic actions,draw]{natoapp6c/s/vehicle};
+ \path[pic actions] (.35,.15)--(0,.3)--(-.35,.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/arctic}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/arctic/.pic={
+ \draw (-0.325,0.135) arc(180:270:0.075 and 0.15) --
+ +(0.5, 0) arc(-90:0:0.075 and 0.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/automobile}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/automobile/.pic={
+ \begin{scope}
+ \clip (0.2,-0.15) circle(0.05) (-0.2,-0.15) circle(0.05) [reverseclip];
+ \path[pic actions]
+ (0.3, -0.15) --
+ (-0.3, -0.15) --
+ (-0.3, 0.025) --
+ (-0.1, 0.025) --
+ (-0.1, 0.2) --
+ ( 0.1, 0.2) --
+ ( 0.1, 0.025) --
+ ( 0.3, 0.025) -- cycle
+ ( 0.075, 0.025) rectangle (-0.075, 0.175);
+ \end{scope}
+ \path[pic actions]
+ ( 0.2, -0.15) circle (0.05)
+ (-0.2, -0.15) circle (0.05);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/balloon}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/balloon/.pic={%
+ \path[pic actions] (0, 0.025) circle (0.175);
+ \begin{scope}
+ \clip (0, 0.025) circle (0.175) [reverseclip];
+ \path[pic actions] (-0.05,0) rectangle (0.05,-0.2)--(0.05,0);
+ \end{scope}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/bar}
+% \begin{macrocode}
+\tikzset{
+ natoapp6c/s/bar/.pic={
+ \path[fill=pgfstrokecolor] (-.3,-.1) rectangle (.3,.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/base}
+% \begin{macrocode}
+\tikzset{
+ natoapp6c/s/base/.pic={
+ \path[pic actions] circle(.2);
+ \path[pic actions]
+ (-.2,0) -- (.2,0)
+ ( 0,-.2) -- (0 ,.2)
+ (225:.2) -- (45:.2)
+ (135:.2) -- (-45:.2);
+ }
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/bicycle equipped}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/bicycle equipped/.pic={\draw(0,0) circle(.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/boat}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/boat/.pic={
+ \path[pic actions]
+ (-0.2, -0.2) --
+ ( 0.2, -0.2) --
+ ( 0.35, 0.05) --
+ (-0.15, 0.05) --
+ (-0.075, 0.2) --
+ (-0.175, 0.2) --
+ (-0.25, 0.05) --
+ (-0.35, 0.05) --
+ cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/booby trap}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/booby trap/.pic={
+ \path[draw] (0, -0.2) ellipse(0.2 and 0.065);
+ \begin{scope}
+ \clip (0, -0.2) ellipse(0.2 and 0.065) [reverseclip];
+ \path[draw] (-0.2, -0.2) -- (0, 0.2) -- (0.2, -0.2);
+ \end{scope}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/bottomed}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/bottomed/.pic={
+ \path[draw,fill=pgfstrokecolor] (-0.33,.1) rectangle(0.33,.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/bridge}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/bridge/.is choice,
+ pics/natoapp6c/s/bridge/none/.style={
+ code={\path[pic actions]
+ (0.35,-0.15)--(0.25,-0.05)--(-0.25,-0.05)--(-0.35,-0.15)
+ (0.35, 0.15)--(0.25, 0.05)--(-0.25, 0.05)--(-0.35, 0.15);}},
+ pics/natoapp6c/s/bridge/fixed/.style={
+ code={\pic{natoapp6c/s/bridge};\pic{natoapp6c/s/type=vlight};}},
+ pics/natoapp6c/s/bridge/folding/.style={
+ code={\pic{natoapp6c/s/bridge=none};
+ \path[draw] (.1,-.2) -- (-.1,-.2) -- (-.1,.2) -- (.1,.2);}},
+ pics/natoapp6c/s/bridge/hollow/.style={
+ code={\pic{natoapp6c/s/bridge=none};
+ \path[draw] (.1,-.2) -- (-.1,-.2) -- (-.1,.2) -- (.1,.2) -- cycle;}},
+ pics/natoapp6c/s/bridge/.default=none,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/capsule}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/capsule/.pic={
+ \path[pic actions]
+ ($(0.25, -0.2)!0.1!(0, 0.5)$) --
+ ($(0.25, -0.2)!0.5!(0, 0.5)$) to[in=75, out=105, looseness=0.75]
+ ($(0, 0.5)!0.5!(-0.25, -0.2)$) --
+ ($(0, 0.5)!0.9!(-0.25, -0.2)$) to[in=285, out=255, looseness=0.55]
+ cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/carrier}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/carrier/.pic={
+ \pic{natoapp6c/s/warfare vessel};
+ \path[draw,fill=pgfstrokecolor]
+ (-0.15, 0.05) --
+ (-0.15, 0.2) --
+ (-0.3, 0.2) --
+ (-0.3, 0.05) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/chemical biological radiological nuclear}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/chemical biological radiological nuclear/.pic={
+ \path[draw,fill=pgfstrokecolor] (-0.29,0.1) circle(0.096) (0.29,0.1) circle(0.096);
+ \path[pic actions] (0.15,-0.2) arc(0:90:0.45 and 0.375)
+ (-0.15,-0.2) arc(180:90:0.45 and 0.375);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/civilian military cooperation}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/civilian military cooperation/.pic={%
+ \path[draw] (.375,.2)--(-.375,.2)--(-.375,-.025)
+ to[in=270, out=270, looseness=0.75] (.375,-.025)--cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/civilian police}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/civilian police/.pic={%
+ \path[draw] (0.225, 0.2)
+ to[in=270, out=270, looseness=3] (-0.225, 0.2)
+ to [in=270, out=270, looseness=1.5] (0,0.2)
+ to [in=270, out=270, looseness=1.5] (0.225, 0.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/civilian telecommunications}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/civilian telecommunications/.pic={
+ \path[draw] (0.075, -0.2){[line join=bevel] -- (0, 0.1) -- (-0.075, -0.2)}
+ (0.065, -0.05) -- (-0.065, -0.05)
+ (-0.325, 0.2) -- (-0.15, 0.125) -- (-0.15, 0.175) -- (0, 0.1) -- (0.15, 0.175) -- (0.15, 0.125) -- (0.325, 0.2);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/coast guard vessel}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/coast guard vessel/.pic={%
+ \pic[draw] {natoapp6c/s/ship};
+ \path[pic actions] (0.15, 0.05) -- (0, -0.2) (0.2, 0.05)--(0.05, -0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/combat support}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/combat support/.pic={%
+ \path[fill=pgfstrokecolor]
+ (.15,.2)--(-.15,.2)--(-.15,-.05)--(0,-.2)--(.15,-.05) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/combatant}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/combatant/.pic={%
+ \begin{scope}[xshift=-4.5, yshift=-5]
+ \path[pic actions]
+ (0.3213,0.0534) .. controls (0.3186,0.0295) and (0.3072,0.0136) ..
+ (0.2925,0.0063) .. controls (0.2777,-0.0010) and (0.2605,0.0001) ..
+ (0.2461,0.0068) .. controls (0.2317,0.0136) and (0.2198,0.0265) ..
+ (0.2163,0.0433) .. controls (0.2147,0.0513) and (0.2150,0.0601) ..
+ (0.2179,0.0694) .. controls (0.1304,0.1129) and (0.0223,0.1961) ..
+ (0.0013,0.3209) .. controls (0.0601,0.1809) and (0.1770,0.0912) ..
+ (0.3213,0.0534) -- cycle
+ (0.2304,0.0633) .. controls (0.2287,0.0570) and (0.2287,0.0513) ..
+ (0.2298,0.0461) .. controls (0.2323,0.0340) and (0.2409,0.0245) ..
+ (0.2520,0.0193) .. controls (0.2630,0.0141) and (0.2760,0.0135) ..
+ (0.2864,0.0186) .. controls (0.2932,0.0220) and (0.2992,0.0277) ..
+ (0.3033,0.0370) .. controls (0.2845,0.0413) and (0.2597,0.0498) ..
+ (0.2304,0.0633) -- cycle
+ (0.1785,0.1137) .. controls (0.2446,0.1612) and (0.3061,0.2300) ..
+ (0.3214,0.3209) .. controls (0.2864,0.2377) and (0.2310,0.1723) ..
+ (0.1614,0.1249)
+ (0.1443,0.1138) .. controls (0.1011,0.0871) and (0.0530,0.0670) ..
+ (0.0014,0.0535) .. controls (0.0041,0.0295) and (0.0154,0.0136) ..
+ (0.0302,0.0063) .. controls (0.0449,-0.0010) and (0.0621,0.0001) ..
+ (0.0765,0.0069) .. controls (0.0909,0.0137) and (0.1028,0.0265) ..
+ (0.1063,0.0433) .. controls (0.1079,0.0513) and (0.1076,0.0602) ..
+ (0.1047,0.0694) .. controls (0.1230,0.0785) and (0.1422,0.0893) ..
+ (0.1613,0.1019)
+ (0.0928,0.0461) .. controls (0.0903,0.0340) and (0.0816,0.0245) ..
+ (0.0706,0.0193) .. controls (0.0596,0.0141) and (0.0466,0.0135) ..
+ (0.0362,0.0186) .. controls (0.0294,0.0220) and (0.0234,0.0277) ..
+ (0.0193,0.0370) .. controls (0.0381,0.0413) and (0.0629,0.0498) ..
+ (0.0921,0.0633) --
+ (0.0921,0.0633) .. controls (0.0938,0.0570) and (0.0938,0.0512) ..
+ (0.0928,0.0461) -- cycle;
+ \end{scope}
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/combined arms}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/combined arms/.pic={%
+ \path[draw] pic {natoapp6c/s/armoured};
+ \path[draw] (0.275, 0.2) -- (-0.275, -0.2) (0.275, -0.2) -- (-0.275, 0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/computer system}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/computer system/.pic={
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ (-.3, .28) rectangle ( .3, .3)
+ (-.3, -.18) rectangle ( .3, -.2)
+ (-.3, -.18) rectangle (-.3, .28)
+ ( .3, -.18) rectangle ( .3, .28)
+ (-.3, -.3) rectangle ( .3, -.28)
+ (-.05,-.28) rectangle ( .05,-.18);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/control}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/control/.pic={
+ \path[pic actions]
+ [{Stealth[inset=0pt,scale=0.5]}-{Stealth[inset=0pt,scale=0.5]}]
+ (0, .2) -- (0, -.2);
+ \path[pic actions]
+ [{Stealth[inset=0pt,scale=0.5]}-{Stealth[inset=0pt,scale=0.5]}]
+ (-.2, 0) -- (.2, 0);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/convoy}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/convoy/.pic={
+ \path[draw,fill=pgfstrokecolor]
+ (0.35, 0.175) --
+ (-0.35, 0.175) --
+ (-0.35, -0.175) --
+ (-0.2, -0.175) --
+ (-0.2, 0.025) --
+ (0.2, 0.025) --
+ (0.2, -0.175) --
+ (0.35, -0.175) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/corps support}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/corps support/.pic={%
+ \edef\n@toapp@path{\n@toapp@corps@support{\natoapp@fac}}
+ \expandafter\path[draw] \n@toapp@path;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/crime}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/crime/.pic={\path[draw,dashed] (-.45,.25)--(.45,-.25);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/decoy}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/decoy/.pic={%
+ \path[fill=pgfstrokecolor,draw,yshift=1.5]
+ (0.2, 0) -- (0.4, 0.15) -- (0.4, -0.15) -- cycle
+ (-0.1, 0) -- (0.1, 0.15) -- (0.1, -0.15) -- cycle
+ (-0.4, 0) -- (-0.2, 0.15) -- (-0.2, -0.15) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/direct communications}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/direct communications/.pic={
+ \path[draw] (-.35,0) circle(.1) (.35,0) circle(.1);
+ \pic[fill=pgfstrokecolor]{natoapp6c/s/intermodal};
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/direction finding}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/direction finding/.pic={%
+ \path[draw] (-.3,.2)--(0,.4)--(.3,.2) (0,.4)--(0,-.4);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/diving}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/diving/.is choice,
+ pics/natoapp6c/s/diving/none/.style={
+ code={
+ \path[pic actions] (0,0) circle(.1) (0,0) circle(.25);
+ \begin{scope}
+ \clip (0,0) circle(.25) [reverseclip];
+ \path[pic actions] (-.3,-.1) rectangle(.3,.1)
+ (0,0) -- (-45:.4) -- (-135:.4) -- cycle;
+ \end{scope}}},
+ pics/natoapp6c/s/diving/military/.style={
+ code={
+ \begin{scope}[even odd rule]
+ \clip (0,0) circle(0.1)[reverseclip];
+ \pic[fill=pgfstrokecolor]{natoapp6c/s/diving=none};
+ \end{scope}
+ \path[fill=pgfstrokecolor] (0,0) circle(0.08);
+ }},
+ pics/natoapp6c/s/diving/.default=none,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/drilling}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/drilling/.pic={\path[fill=pgfstrokecolor]
+ (-0.1,-0.2) -- (0.1,-0.2) -- (0.2, 0.2) -- (-0.2, 0.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/earthmover}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/earthmover/.pic={
+ \pic{natoapp6c/s/tank};
+ \path[pic actions] (.3,
+ .3)--(.175,.35)--(-.175,.35)--(-.3,.3)
+ (0,.2)--(0,.35);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/electric power}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/electric power/.pic={
+ \path[pic actions]
+ (-0.05, 0) .. controls(-0.06, 0.14) ..
+ ( 0, 0.09) .. controls( 0.03, 0.06) ..
+ ( 0, 0.06) .. controls(-0.03, 0.06) ..
+ ( 0, 0.09) .. controls( 0.06, 0.14) ..
+ (0.05, 0)
+ ($(-55:0.125) + (0, 0.075)$) arc(-55:235:0.125) arc(415:360:0.05) --
+ +(0, -0.08) arc(180:360:0.05035) --
+ +(0, 0.08) arc(180:125:0.05) -- cycle;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/electronic ranging}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/electronic ranging/.pic={%
+ \path[draw] (135:.225) arc (135:315:.225)--cycle (0,0)--(225:-.225);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/electronic warfare wide}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/electronic warfare wide/.pic={%
+ % OBS
+ \node[natoapp6c/text,natoapp6c/normal text] at(-.25,0){E};
+ \node[natoapp6c/text,natoapp6c/normal text] at(.25,0){W};
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/engineer}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/engineer/.pic={\path[draw]
+ (.4,-.2)--(.4,.2)--(-.4,.2)--(-.4,-.2) (0,.2)--(0,-.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/enhanced location reporting system}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/enhanced location reporting system/.pic={\path[draw]
+ (0, -0.3) -- (0, 0.3) (-0.2, -.3) -- (0, 0.-.1) -- (0.2, -.3);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/environmental protection}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/environmental protection/.pic={%
+ \path[draw] (0, 0.2)
+ -- (0.1, 0.05)
+ -- (0.05, 0.05)
+ -- (0.15, -0.05)
+ -- (0.1, -0.05)
+ -- (0.2, -0.15)
+ -- (0.15, -0.15)
+ -- (0.05, -0.15)
+ -- (0.05, -0.2)
+ -- (-0.05, -0.2)
+ -- (-0.05, -0.15)
+ -- (-0.2, -0.15)
+ -- (-0.1, -0.05)
+ -- (-0.15, -0.05)
+ -- (-0.05, 0.05)
+ -- (-0.1, 0.05)
+ -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/explosion}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/explosion/.pic={%
+ \node [shape=rectangle,
+ starburst,
+ draw,
+ minimum width=0.9cm,
+ minimum height=0.9cm,
+ starburst point height=0.25cm,
+ starburst points=12] {};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/finance}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/finance/.pic={%
+ \path[draw] (-.3,-.25) rectangle(.3,0)
+ (-.3,0) -- ++(60:.28) -- ([shift=(120:.28)].3,0) -- (.3,0);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/fishing vessel}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/fishing vessel/.pic={
+ \path[pic actions]
+ (-0.15, -0.2) --
+ ( 0.15, -0.2) --
+ ( 0.25, 0.025) --
+ (-0.05, 0.025) --
+ (-0.05, 0.125) --
+ (-0.2, 0.125) --
+ (-0.2, 0.025) --
+ (-0.25, 0.025) -- cycle
+ (0.025, 0.025) -- (0.025, 0.2)
+ (0.025, 0.025) -- +(45:0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/fire protection}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/fire protection/.pic={%
+ \path[fill=pgfstrokecolor] (0,0) circle(.2)
+ (0,0) -- (60:.3) -- (120:.3) -- cycle
+ (0,0) -- (-30:.3) -- (30:.3) -- cycle
+ (0,0) -- (150:.3) -- (210:.3) -- cycle
+ (0,0) -- (240:.3) -- (300:.3) -- cycle;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/fixed and rotary wing}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/fixed and rotary wing/.pic={%
+ \path[xscale=.45,yscale=.75,pic actions] pic {natoapp6c/s/fixed wing};
+ \path[yscale=.45,xscale=.7,rotate=90, pic actions] pic {
+ natoapp6c/s/rotary wing};
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/fixed wing}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/fixed wing/.pic={
+ \path[pic actions]
+ (-0.36,0.125) arc (77:275:0.075 and 0.125) -- (0,0) -- cycle
+ ( 0.36,0.125) arc (-275:-77:-0.075 and 0.125) -- (0,0)
+ --cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/flame thrower}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/flame thrower/.pic={
+ \path[pic actions]
+ (-0.1, -0.4) -- (-0.1, 0.3) to[out=90,in=90,looseness=2]
+ (0.1, 0.3) -- (0.1, 0.275);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/floating}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/floating/.pic={
+ \path[draw]
+ (-0.5, 0.100) --
+ (-0.417, 0.242) --
+ (-0.333, 0.100) --
+ (-0.250, 0.242) --
+ (-0.167, 0.100) --
+ (-0.083, 0.242) --
+ (0.0, 0.100) --
+ (0.083, 0.242) --
+ (0.167, 0.100) --
+ (0.250, 0.242) --
+ (0.333, 0.100) --
+ (0.417, 0.242) --
+ (0.5, 0.100);},
+ pics/natoapp6c/s/surfaced/.style=natoapp6c/s/floating,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/food}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/food/.pic={
+ \path[pic actions]
+ (0.075, 0.2) to[out=210, in=150, looseness=1]
+ (0.075, -0.2) to[out=180, in=180, looseness=1.5]
+ (0.075, 0.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/fuel}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/fuel/.pic={
+ \path[draw] (0,0) -- (135:.3) -- (45:.3) -- cycle (0,0) -- (0,-.3);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/grenade launcher}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/grenade launcher/.is choice,%
+ pics/natoapp6c/s/grenade launcher/none/.style={%
+ code={%
+ \pic[draw]{natoapp6c/s/rifle};
+ \pic[draw]{natoapp6c/s/weapon=grenade launcher};}},%
+ pics/natoapp6c/s/grenade launcher/non lethal/.style={
+ code={%
+ \pic[draw]{natoapp6c/s/non lethal weapon};
+ \pic[draw]{natoapp6c/s/weapon=grenade launcher};}},
+ pics/natoapp6c/s/grenade launcher/.default=none,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/graffiti}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/graffiti/.pic={
+ \path[pic actions]
+ (0.05, 0.2)
+ arc (90:270:0.05)
+ arc (450:270:0.05)
+ arc (90:270:0.05)
+ arc (450:270:0.05)
+ (-0.05, 0.2)
+ arc (90:270:0.05)
+ arc (450:270:0.05)
+ arc (90:270:0.05)
+ arc (450:270:0.05);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/group}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/group/.pic={
+ \path(-.23,.05) pic [draw,scale=.8] {natoapp6c/s/individual};
+ \path(0,-.05) pic [draw,scale=.8] {natoapp6c/s/individual};
+ \path(.23,.05) pic [draw,scale=.8] {natoapp6c/s/individual};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/gun}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/gun/.is choice,
+ pics/natoapp6c/s/gun/base/.style={
+ code={
+ \pic[draw]{natoapp6c/s/weapon=base};
+ \pic[draw]{natoapp6c/s/weapon=top};
+ \pic[draw]{natoapp6c/s/weapon=multi fire};}},
+ pics/natoapp6c/s/gun/air defence/.style={
+ code={
+ \pic[draw]{natoapp6c/s/gun/base};
+ \pic[draw]{natoapp6c/s/weapon=air defence};}},
+ pics/natoapp6c/s/gun/anti tank/.style={
+ code={
+ \pic[draw]{natoapp6c/s/gun/base};
+ \pic[draw]{natoapp6c/s/weapon/anti tank};}},
+ pics/natoapp6c/s/gun/direct/.style={
+ code={
+ \pic[draw]{natoapp6c/s/gun/base};
+ \pic[draw]{natoapp6c/s/weapon=bottom};}},
+ pics/natoapp6c/s/gun/recoilless/.style={
+ code={
+ \pic[draw]{natoapp6c/s/rifle};
+ \pic[yshift=-4,draw]{natoapp6c/s/weapon=multi fire};}},
+ pics/natoapp6c/s/gun/.default=direct,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/headquarters}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/headquarters/.pic={
+ \path[pic actions] (M.north west) -- ++(0,-.3) --
+ ([shift=(-90:.3)]M.north east) -- (M.north east) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/house}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/house/.pic={
+ \path[pic actions]
+ (-.125,-.175) rectangle (.125,.075)
+ (-.167,.075) -- (0,.225) -- (.167,.075) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/howitzer}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/howitzer/.pic={
+ \pic[draw]{natoapp6c/s/weapon=base};
+ \pic[draw]{natoapp6c/s/weapon=top};
+ \pic[draw]{natoapp6c/s/weapon=multi fire};
+ \pic[yshift=-8,draw]{natoapp6c/s/weapon=grenade launcher};
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/in position}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/in position/.pic={
+ \path[draw,fill=pgfstrokecolor]
+ (-.3,-.01) rectangle (-.2,.01) (.2,-.01) rectangle (.3,.01);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/individual}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/individual/.pic={
+ \path[pic actions]
+ (0,.08) -- (0,-.3) (-.15,0) -- (.15,0) (0,.18) circle(.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/infantry}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/infantry/.pic={
+ \path[draw] (-.75,.5) -- (.75,-.5) (-.75,-.5) -- (.75,.5);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/intermodal}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/intermodal/.pic={
+ \path[pic actions]
+ ( 0.15, 0.025) --
+ (-0.15, 0.025) --
+ (-0.15, 0.075) --
+ (-0.25, 0) --
+ (-0.15, -0.075) --
+ (-0.15, -0.025) --
+ ( 0.15, -0.025) --
+ ( 0.15, -0.075) --
+ ( 0.25, 0) --
+ ( 0.15, 0.075) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/jagged wave}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/jagged wave/.pic={
+ \draw (0.3, -0.05) --
+ (0.2, 0.05) --
+ (0.1, -0.05) --
+ (0, 0.05) --
+ (-0.1, -0.05) --
+ (-0.2, 0.05) --
+ (-0.3, -0.05);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/jam}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/jam/.pic={%
+ \path[draw]
+ (0.75, 0)
+ to[out=90, in=90, looseness=2.25] ( 0.65, 0)
+ to[out=-90,in=-90,looseness=2.25] ( 0.55, 0)
+ to[out=90, in=90, looseness=2.25] ( 0.45, 0)
+ to[out=-90,in=-90,looseness=2.25] ( 0.35, 0)
+ to[out=90, in=90, looseness=2.25] ( 0.25, 0)
+ to[out=-90,in=-90,looseness=2.25] ( 0.15, 0)
+ to[out=90, in=90, looseness=2.25] ( 0.05, 0)
+ to[out=-90,in=-90,looseness=2.25] (-0.05, 0)
+ to[out=90, in=90, looseness=2.25] (-0.15, 0)
+ to[out=-90,in=-90,looseness=2.25] (-0.25, 0)
+ to[out=90, in=90, looseness=2.25] (-0.35, 0)
+ to[out=-90,in=-90,looseness=2.25] (-0.45, 0)
+ to[out=90, in=90, looseness=2.25] (-0.55, 0)
+ to[out=-90,in=-90,looseness=2.25] (-0.65, 0)
+ to[out=90, in=90, looseness=2.25] (-0.75, 0)
+ ;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/jamming}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/jamming/.pic={%
+ \path(0,.4) pic {natoapp6c/s/jam} (0,.26) pic {natoapp6c/s/jam};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/jetski}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/jetski/.pic={
+ \path[pic actions]
+ ( 0.3, -0.2) --
+ (-0.3, -0.2) --
+ (-0.35,-0.1) --
+ (-0.1, 0.2) --
+ ( 0, 0.2) --
+ ( 0, 0.1) --
+ (-0.05, 0.1) --
+ (-0.1, -0.05) --
+ ( 0.3, -0.05) --
+ ( 0.3, -0.2) -- cycle;
+},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/killing}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/killing/.pic={\path[draw] (-.45,.25)--(.45,-.25);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/labour}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/labour/.pic={%
+ \path[draw] (-.15,.2) -- (.15,.2) (0,.2) -- (0,0)
+ (-.15,0) -- ++(300:.3) -- ++(60:.3) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/land mine}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/land mine/.is choice,
+ pics/natoapp6c/s/land mine/personnel/.style={
+ code={\pic[fill=pgfstrokecolor]{natoapp6c/s/land mine=none};
+ \path[pic actions] (135:0.35) -- (0, 0) -- (45:0.35);}},
+ pics/natoapp6c/s/land mine/tank/.style={
+ code={\pic[fill=pgfstrokecolor]{natoapp6c/s/land mine=none};}},
+ pics/natoapp6c/s/land mine/none/.style={
+ code={\path[pic actions] (0,0) circle(0.25);}},
+ pics/natoapp6c/s/land mine/.default=none,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/land missile}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/land missile/.pic={\pic{natoapp6c/s/missile launcher};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/laser}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/laser/.pic={
+ \path[draw,line join=round,line cap=round,pic actions]
+ ( 0.1, -0.25) --
+ (-0.1, -0.225) --
+ ( 0.1, -0.2) --
+ (-0.1, -0.175) --
+ ( 0.1, -0.15) --
+ ( 0, -0.1375) --
+ ( 0, -0.0125) --
+ (-0.1, 0) --
+ ( 0.1, 0.025) --
+ (-0.1, 0.05) --
+ ( 0.1, 0.075) --
+ ( 0, 0.0875) --
+ ( 0, 0.25)
+ ( 0.1, 0.2) --
+ ( 0, 0.25) --
+ (-0.1, 0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/launcher}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/launcher/.pic={
+ \path[draw] (-.3,-.2) -- (.3,.2) -- (.3,-.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/laundry}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/laundry/.pic={%
+ \path[draw] (0,-.3) -- (0,.1)
+ (0,.1) -- ++(150:.25)
+ (0,.1) -- ++(180:.2)
+ (0,.1) -- ++(210:.25);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/machine gun}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/machine gun/.pic={%
+ \pic[draw]{natoapp6c/s/rifle};
+ \pic[draw]{natoapp6c/s/weapon=machine gun};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/main gun}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/main gun/.pic={
+ \path[pic actions] (M.north west) -- ++(.25,0) --
+ ([shift=(0:.25)]M.south west) -- (M.south west) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/maintenance}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/maintenance/.pic={
+ \path[fill=pgfstrokecolor]
+ (-.38,.25)
+ to[out=0,in=90,looseness=1.5] (-.2,.05) -- (.2,.05)
+ to [out=90,in=180,looseness=1.5] (.38,.25) -- ++(0,-.08)
+ to [out=180,in=90,looseness=1.5] (.28,0)
+ to [out=-90,in=180,looseness=1.5] (.38,-.17) -- ++(0,-.08)
+ to [out=180,in=-90,looseness=1.5] (.2,-.05) -- (-.2,-.05)
+ to [out=-90,in=0,looseness=1.5] (-.38,-.25) -- ++(0,.08)
+ to [out=0,in=-90,looseness=1.5] (-.28,0)
+ to [out=90,in=0,looseness=1.5] (-.38,.17) -- cycle;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/medic}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/medic/.pic={
+ \path[pic actions]
+ (-0.075,-0.2)
+ --(0.075,-.2)
+ --(.075,-.075)
+ --(.2,-.075)
+ --(.2,.075)
+ --(.075,.075)
+ --(.075,.2)
+ --(-0.075,.2)
+ --(-0.075,.075)
+ --(-.2,.075)
+ --(-.2,-.075)
+ --(-.075,-.075)
+ --cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/medical}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/medical/.pic={\path[draw] (-1,0) -- (1,0) (0,-1) -- (0,1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/medical treatment}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/medical treatment/.pic={
+ \path[draw] (0,0) pic {natoapp6c/s/medical}
+ ([xscale=.5,shift={(0,-.2)}]M.west) -- ([xscale=.5,shift={(0,.2)}]M.west)
+ ([xscale=.5,shift={(0,-.2)}]M.east) -- ([xscale=.5,shift={(0,.2)}]M.east);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mine}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mine/.pic={
+ \path[fill=pgfstrokecolor,draw] (0,0) ellipse(.2 and .15)
+ (0,0) -- ++(60:.3)
+ (0,0) -- ++(90:.3)
+ (0,0) -- ++(120:.3)
+ (0,0) -- ++(240:.3)
+ (0,0) -- ++(270:.3)
+ (0,0) -- ++(300:.3)
+ ;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mine clearing equipment}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mine clearing equipment/.pic={
+ \path[pic actions]
+ (0, 0.2) -- (0, 0) -- (0.35, -0.2) -- (-0.35, -0.2) -- (0, 0);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mine warfare vessel}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mine warfare vessel/.pic={%
+ \pic[scale=.8,fill=pgfstrokecolor,yshift=2.5]{natoapp6c/s/sea mine=top half};
+ \pic {natoapp6c/s/warfare vessel};
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/missile}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/missile/.pic={%
+ \path[pic actions,draw]
+ (0, 0.3)
+ -- (-0.05, 0.2)
+ -- (-0.05, -0.2)
+ -- (-0.125,-0.3)
+ -- (-0.125,-0.4)
+ -- (0, -0.265)
+ -- (0.125,-0.4)
+ -- (0.125,-0.3)
+ -- (0.05,-0.2)
+ -- (0.05,0.2)
+ -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/missile launcher}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/missile launcher/.is choice,
+ pics/natoapp6c/s/missile launcher/base/.style={
+ code={
+ \pic[draw]{natoapp6c/s/weapon=base};
+ \pic[draw]{natoapp6c/s/weapon=top};
+ \pic[draw]{natoapp6c/s/weapon=multi fire};
+ \pic[draw]{natoapp6c/s/weapon=missile launcher};}},
+ pics/natoapp6c/s/missile launcher/none/.style={
+ code={
+ \pic[draw]{natoapp6c/s/missile launcher=base};
+ \path[pic actions] (-.2,-.2)--(-.2,-.35) (.2,-.2)--(.2,-.35);}},
+ pics/natoapp6c/s/missile launcher/air defence/.style={
+ code={
+ \pic[draw]{natoapp6c/s/missile launcher=none};
+ \pic[draw]{natoapp6c/s/weapon=air defence};}},
+ pics/natoapp6c/s/missile launcher/anti tank/.style={
+ code={
+ \pic[draw]{natoapp6c/s/missile launcher=base};
+ \pic[draw]{natoapp6c/s/weapon=anti tank};}},
+ pics/natoapp6c/s/missile launcher/surface to surface/.style={
+ code={%
+ \pic[draw]{natoapp6c/s/missile launcher=none};
+ \pic[draw]{natoapp6c/s/weapon=bottom};
+ \pic[draw]{natoapp6c/s/weapon=machine gun};
+ }},
+ pics/natoapp6c/s/missile launcher/.default=none,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mobile advisor and support}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mobile advisor and support/.pic={
+ \path[draw] (-.35,0) circle(.1) (.35,0) circle(.1);
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ ( 0.15, 0.025) --
+ (-0.25, 0.025) --
+ (-0.25, -0.025) --
+ ( 0.15, -0.025) --
+ ( 0.15, -0.075) --
+ ( 0.25, 0) --
+ ( 0.15, 0.075) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/moored}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/moored/.pic={
+ \path[draw] (0,.2) -- (0,-.05) (-.3,-.05) -- (.3,-.05);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mortar}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mortar/.pic={
+ \path[draw] (0,-.15) circle(.05) (0,.-.1) -- (0,.2)
+ ([shift=(225:.1)]0,.2) -- (0,.2) -- ([shift=(-45:.1)]0,.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/motorized}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/motorized/.pic={\path[draw] (M.north) -- (M.south);},
+ pics/natoapp6c/s/motorised/.style={natoapp6c/s/motorized},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mortuary affairs}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mortuary affairs/.pic={
+ \path[draw] (-.1,-.2) rectangle (.1,.2)
+ (0,-.17) -- (0,.17) (-.07,.1) -- (.07,.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/mountain}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/mountain/.pic={
+ \path[draw,fill=pgfstrokecolor] (0,.2) -- ++(-60:.7) -- ++(180:.7) -- cycle;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/naval}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/naval/.pic={
+ \def\arrow{(0,0) -- (-.02,0) -- ++(60:.04) -- ++(-60:.04) -- cycle}
+ \begin{scope}[pic actions]
+ \path[draw]
+ (0,.13) circle (.08) (-.2,.04) -- (.2,.04) (0,.04)
+ -- (0,-.25) (210:.25) arc (210:340:.25);
+ \path[draw,shift=(210:.25),rotate=30] \arrow;
+ \path[draw,shift=(340:.25),rotate=-30] \arrow;
+ \end{scope}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/navigation}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/navigation/.pic={
+ \path[draw]
+ (.17,-.2) -- (0,.2) -- (-.17,-.2)
+ ($(-180:.17)+(0,.05)$) arc[radius=.17,start angle=-180,end angle=0];},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/navy task}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/navy task/.pic={
+ \path[pic actions]
+ (-0.25, -0.2) -- (-0.25, 0.1) -- (-0.15, 0.2)
+ ( 0.25, -0.2) -- ( 0.25, 0.1) -- ( 0.15, 0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/non combatant}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/non combatant/.pic={
+ \path[draw,fill=pgfstrokecolor]
+ (-0.25, -0.2) --
+ (-0.25, 0.05) --
+ (-0.15, 0.05) --
+ (-0.15, 0.2) --
+ (0.15, 0.2) --
+ (0.15, 0.05) --
+ (0.25, 0.05) --
+ (0.25, -0.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/non lethal weapon}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/non lethal weapon/.pic={%
+ \pic[draw]{natoapp6c/s/weapon};%
+ \pic[draw]{natoapp6c/s/weapon=non lethal};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/nuclear}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/nuclear/.pic={
+ \path[fill=pgfstrokecolor,pic actions] (0,0) circle(.05)
+ (0: .3) arc(0 : 60:.3) -- ( 60:.1) arc( 60: 0: .1) -- cycle
+ (180:.3) arc(180: 120:.3) -- ( 120:.1) arc( 120: 180:.1) -- cycle
+ (-60:.3) arc(-60:-120:.3) -- (-120:.1) arc(-120:-60: .1) -- cycle;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/observer}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/observer/.pic={
+ \path[pic actions] (0.25,-.2)--(-.25,-.2)--(0,.2)--cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/orbiter shuttle}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/orbiter shuttle/.pic={
+ \path[pic actions]
+ ($(0, 0.3)!0.35!(0.125, -0.15)$) --
+ (0.125, -0.15) -- (-0.125, -0.15) --
+ ($(-0.125, -0.15)!0.65!(0, 0.3)$)
+ to[in=105, out=75] cycle
+ (0, -0.20) -- (0, -0.15); },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/ordnance}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/ordnance/.pic={
+ \path[draw] (0,0) ellipse(.2 and .15);
+ \begin{scope}
+ \clip (0,0) ellipse(.2 and .15) [reverseclip];
+ \path[draw] (0,0) -- ++(50:.3)
+ (0,0) -- ++(70:.3)
+ (0,0) -- ++(110:.3)
+ (0,0) -- ++(130:.3)
+ ;
+ \end{scope}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/organisation}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/organisation/.style={natoapp6c/s/group},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/over snow}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/over snow/.pic={
+ \ifn@to@pp@below%
+ \draw ([shift={(-.15,.15)}]M.south west) to[in=180, out=270]
+ ++(.15,-.15) -- (M.south east);
+ \else%
+ \draw ([shift={(.3,.1)}]M.west) to[in=180, out=-90]
+ ([shift={(.5,-.1)}]M.west) --
+ ([shift={(-.3,-.1)}]M.east);
+ \fi},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/pack animal}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/pack animal/.pic={
+ \def\n@to@pp@tmp{0}
+ \ifn@to@pp@below\def\n@to@pp@tmp{-.15}\fi
+ \path[draw,shift={(0,\n@to@pp@tmp)}]
+ (-.3,-.15) -- (-.15,.15) -- (0,-.15) -- (.15,.15) -- (.3,-.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/patrol}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/patrol/.pic={
+ \pic{natoapp6c/s/warfare vessel};
+ \path[draw,fill=pgfstrokecolor] (0.125, 0) -- (0, 0.2) -- (-0.125, 0) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/patrolling}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/patrolling/.pic={
+ % OBS
+ \path[draw]
+ (0.25, 0.05) -- (-0.05, 0.05) -- (0.05, -0.05) -- (-0.4, -0.05)
+ (-0.3, 0) -- (-0.4, -0.05) -- (-0.3, -0.1)
+ node [natoapp6c/text,natoapp6c/small text,
+ scale=.5,anchor=west,inner sep=0] at (0.25, 0.05) {P};
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/physician}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/physician/.pic={
+ \pic{natoapp6c/s/medical};
+ \path[draw] (0.1, 0.05) -- (-0.1, 0.05);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/pipeline}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/pipeline/.pic={
+ \path[draw] (-.15,-.15) rectangle (.15,.15)
+ (-.3,.1) -- (-.15,.1) (-.3,-.1) -- (-.15,-.1)
+ (.3,.1) -- (.15,.1) (.3,-.1) -- (.15,-.1)
+ (-.05,.15) rectangle (.05,.25) (-.1,.25) rectangle (.1,.30);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/poisoning}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/poisoning/.pic={
+ \path[pic actions] (0, 0.055) circle (0.145)
+ (0.3, 0) -- (-0.3, -0.2)
+ (-0.3, 0) -- (0.3, -0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/postal}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/postal/.pic={
+ \path[draw] (-.25,.25) -- (.08,.25)
+ to [out=-90,in=120,looseness=1] (.25,-.25)
+ to [out=150,in=-90,looseness=1] (-.25,.25);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/printed media}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/printed media/.pic={
+ \path[pic actions] (0.2, 0) -- (-0.2, 0)
+ (0, 0.1) circle (0.085)
+ (0, -0.1) circle (0.085);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/psychological}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/psychological/.pic={
+ \path[pic actions] (-.25,.15) -- (-.1,.15) -- (.1,.25)
+ -- ++(0,-.5) -- (-.1,-.15) -- (-.25,-.15) -- cycle
+ (.1,.15) -- (.25,.15)
+ (.1,.05) -- (.25,.05)
+ (.1,-.05) -- (.25,-.05)
+ (.1,-.15) -- (.25,-.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/quarry}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/quarry/.pic={
+ \path[draw] (-.2,-.2) -- (.18,.18) (.2,-.2) -- (-.18,.18)
+ (25:.255) arc(25:65:.255)
+ (115:.255) arc(115:155:.255);
+ %([shift={(115:.08)}]-.1,.1) arc (115:155:.08)
+ %([shift={(70:.08)}].1,.1) arc (70:110:.08);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/quartermaster}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/quartermaster/.pic={
+ \path[draw] (-.4,.1) -- (.1,.1) (.25,.1) circle(.15)
+ (-.3,.1) -- (-.3,-.15) (-.15,.1) -- (-.15,-.15)
+ (-.3,-.08) -- (-.15,-.08);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/radar}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/radar/.pic={%
+ \path[draw] (-.2,.2) arc (150:300:.25) (-.24,.01) -- (0,.2) --
+ (0,0) -- (.2,.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/radio}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/radio/.pic={%
+ \path[draw] (-.2,.2) -- (-.13,.25) -- (-.07,.2) -- (0,.25) --
+ (.07,.2) -- (.13,.25) -- (.2,.2) (0,.25) -- (0,-.05) (0,-.15) circle(.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/radio relay}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/radio relay/.pic={%
+ \path[draw] (-.2,.25) -- (.2,.25) (0,.25) -- (0,-.05) (0,-.15) circle(.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/radio relay line of sight}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/radio relay line of sight/.pic={%
+ \path[draw] (0,0) circle(.2);
+ \path[fill=pgfstrokecolor] (0,0) -- (45:.2) arc(45:-45:.2) -- cycle;
+ \path[fill=pgfstrokecolor] (0,0) -- (135:.2) arc(135:225:.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/radio teletype}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/radio teletype/.pic={%
+ \path[draw] (-.2,.25) -- (.2,.25) (-.15,.18) -- (.15,.18)
+ (0,.25) -- (0,-.25)
+ ([shift=(30:.1)]0,-.15) arc(30:330:.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/railroad}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/railroad/.pic={%
+ \ifn@to@pp@below%
+ \path[pic actions] (M.south west) -- (M.south east)
+ ([shift={(.08,-0.08)}]M.south west) circle(.08)
+ ([shift={(.24,-0.08)}]M.south west) circle(.08)
+ ([shift={(-.08,-0.08)}]M.south east) circle(.08)
+ ([shift={(-.24,-0.08)}]M.south east) circle(.08);
+ \else
+ \path[pic actions] (-.45,.08) -- (.45,.08)
+ (-.37,0) circle(0.08)
+ (-.21,0) circle(0.08)
+ (.21,0) circle(0.08)
+ (.37,0) circle(0.08);
+ \fi
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/reconnaissance}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/reconnaissance/.pic={%
+ \path[draw] (M.north east)--(M.south west);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/recovery unmanned systems}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/recovery unmanned systems/.pic={%
+ \path[draw] (-.5,.15) to [out=-80,in=180] (0,-.15) to
+ [out=0,in=260] (.5,.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/rifle}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/rifle/.pic={%
+ \pic[draw]{natoapp6c/s/weapon=full};
+ \pic[draw]{natoapp6c/s/weapon=rifle};},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/rising}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/rising/.pic={
+ \path[draw,fill=pgfstrokecolor] (0, 0.2) -- (0, -0.167)
+ (0.1, -0.2) -- (-0.1, -0.2) -- (0, 0.0);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/riverine}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/riverine/.pic={%
+ \ifn@to@pp@below%
+ \path[pic actions] (M.south west)
+ to [out=-90,in=-90,looseness=.5] (M.south east) -- cycle;
+ \else%
+ \path[pic actions] (-.5,.15) to [out=-80,in=180] (0,-.15) to
+ [out=0,in=260] (.5,.15) -- cycle;
+ \fi},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/rocket launcher}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/rocket launcher/.is choice,
+ pics/natoapp6c/s/rocket launcher/base/.style={
+ code={
+ \pic[draw]{natoapp6c/s/weapon=base};
+ \pic[draw]{natoapp6c/s/weapon=rifle};
+ \pic[yshift=-4,draw]{natoapp6c/s/weapon=rifle};
+ }},
+ pics/natoapp6c/s/rocket launcher/anti tank/.style={
+ code={
+ \pic[draw]{natoapp6c/s/rocket launcher=base};
+ \pic[draw]{natoapp6c/s/weapon=anti tank};
+ }},
+ pics/natoapp6c/s/rocket launcher/single/.style={
+ code={
+ \pic[draw]{natoapp6c/s/rocket launcher=base};
+ \pic[draw]{natoapp6c/s/weapon=bottom};}},
+ pics/natoapp6c/s/rocket launcher/multiple/.style={
+ code={
+ \pic[draw]{natoapp6c/s/rocket launcher=single};
+ \pic[yshift=-6,draw]{natoapp6c/s/weapon=multi fire};}},
+ pics/natoapp6c/s/rocket launcher/single head/.style={
+ code={%
+ \pic[yshift=4,draw]{natoapp6c/s/weapon=rifle};}},
+ pics/natoapp6c/s/rocket launcher/multiple head/.style={
+ code={
+ \pic[yshift=-4,draw]{natoapp6c/s/weapon=rifle};
+ \pic[yshift=-6,draw]{natoapp6c/s/weapon=rifle};
+ }},
+ pics/natoapp6c/s/rocket launcher/.default=single,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/rotary wing}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/rotary wing/.pic={
+ \path[pic actions]
+ (0.44, 0.15) -- (0.44, -0.15) -- (-0.44, 0.15) -- (-0.44, -0.15) --
+ cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/runway}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/runway/.pic={%
+ \path[draw] (-.3,-.15) -- (.3,-.15) (-.2,-.2) -- (.2,.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/sailing boat}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/sailing boat/.pic={%
+ \path[draw]
+ (-0.15, -0.2) --
+ ( 0.15, -0.2) --
+ ( 0.25, -0.025) --
+ (-0.25, -0.025) -- cycle
+ ( 0, -0.025) -- (0, 0.2)
+ (0.025, 0) -- (0.025, 0.19) -- (0.225, 0) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/satellite}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/satellite/.is choice,
+ pics/natoapp6c/s/satellite/none/.style={
+ code={
+ \iftikz@mode@fill
+ \def\n@to@pp@next{\path[draw,fill=pgfstrokecolor,pic actions]}
+ \else
+ \def\n@to@pp@next{\path[pic actions]}
+ \fi
+ \n@to@pp@next
+ ( 0.45, 0.075) rectangle ( 0.15, -0.075)
+ ( 0.075, 0.075) rectangle (-0.075, -0.075)
+ (-0.45, 0.075) rectangle (-0.15, -0.075)
+ ( 0.15, 0) -- (0.075, 0)
+ (-0.15, 0) -- (-0.075, 0);
+ }},
+ pics/natoapp6c/s/satellite/astronomical/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic{natoapp6c/s/satellite=none};
+ \endgroup
+ \path[pic actions]
+ (0.04, 0.075) rectangle (-0.04, 0.2)
+ (0.02, -0.075) rectangle (-0.02, -0.2);}},
+ pics/natoapp6c/s/satellite/bio/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic[yshift=-1]{natoapp6c/s/satellite=none};
+ \endgroup
+ \path[pic actions]
+ (-0.075, 0.13) circle (0.07)
+ ($(-0.075, 0.13) + (60:0.07)$) --
+ ++(-30:0.22) -- ++(0, -0.025) -- (-0.005, 0.13) -- cycle;
+ }},
+ pics/natoapp6c/s/satellite/communications/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic[yshift=-1]{natoapp6c/s/satellite=none};
+ \endgroup
+ \path[pic actions]
+ (0, 0.075) -- (0, 0.125)
+ (0, 0.125) arc (270:340:0.25 and 0.1)
+ (0, 0.125) arc (270:200:0.25 and 0.1);
+ }},
+ pics/natoapp6c/s/satellite/navigation/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic[yshift=-3.75,scale=.9]{natoapp6c/s/satellite=none};
+ \endgroup
+ \pic[scale=.5,yshift=3.5]{natoapp6c/s/navigation};
+ }},
+ pics/natoapp6c/s/satellite/earth observing/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic[yshift=3.75, scale=0.9]{natoapp6c/s/satellite=none};
+ \endgroup
+ \path[pic actions]
+ (0, 0.065) -- +(315:0.125)
+ (0, 0.065) -- +(225:0.125)
+ (0, -0.12) circle (0.08);
+ }},
+ pics/natoapp6c/s/satellite/tether/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic[yshift=-3.75, scale=0.9]{natoapp6c/s/satellite=none};
+ \endgroup
+ \path[pic actions]
+ (0, -0.066) -- +(30:0.3)
+ (0, -0.066) +(30:0.375) circle(0.075);
+ }},
+ pics/natoapp6c/s/satellite/small/.style={
+ code={
+ \begingroup\tikz@picmode
+ \pic[scale=0.6]{natoapp6c/s/satellite=none};
+ \endgroup
+ \path[pic actions]
+ (0.05, 0.2) -- ( 0, 0.1) -- (-0.05, 0.2)
+ (0.05, -0.2) -- ( 0, -0.1) -- (-0.05, -0.2)
+ (-0.4, 0.05) -- (-0.3, 0) -- (-0.4, -0.05)
+ ( 0.4, 0.05) -- ( 0.3, 0) -- ( 0.4, -0.05);
+ }},
+ pics/natoapp6c/s/satellite/reconnaissance/.style={
+ code={
+ \pic[yshift=-1,fill=pgfstrokecolor]{natoapp6c/s/satellite=none};
+ \path[pic actions]
+ (-0.075, -0.05) -- +(250:0.1)
+ (-0.025, -0.05) -- +(260:0.1)
+ ( 0.025, -0.05) -- +(280:0.1)
+ ( 0.075, -0.05) -- +(290:0.1);
+ }},
+ pics/natoapp6c/s/satellite/.default=none,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/sea mine}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/sea mine/.is choice,
+ pics/natoapp6c/s/sea mine/top half/.style={
+ code={\path[draw,join=bevel,pic actions]
+ (.2,0) arc(0:35:.2 and .175) --
+ (42:.34 and .3) -- (48:.34 and .3) --
+ % ($(45:.1) + (40:.2)$) -- ($(45:.1)+(50:.2)$) --
+ (55:.2 and .175) arc(50:75:.2 and .175) --
+ (80:.26 and .23) -- (100:.26 and .23) --
+ (105:.2 and .175) arc(100:125:.2 and .175) --
+ (132:.34 and .3) -- (138:.34 and .3) --
+ %($(135:.1)+(130:.2)$) -- ($(135:.1)+(140:.2)$) --
+ (145:.2 and .175) arc(145:180:.2 and .175);
+ }},
+ pics/natoapp6c/s/sea mine/bottom half/.style={
+ code={
+ \path[pic actions] (.2,0) arc(0:-180:.2);}},
+ pics/natoapp6c/s/sea mine/full/.style={
+ code={
+ \pic[fill=pgfstrokecolor]{natoapp6c/s/sea mine/top half};
+ \pic[fill=pgfstrokecolor]{natoapp6c/s/sea mine/bottom half};}},
+ pics/natoapp6c/s/sea mine/neutralised/.style={
+ code={
+ \begin{scope}[even odd rule]
+ \clip [rotate=42] (-.4,-.015) rectangle (.4,.015) [reverseclip];
+ \clip [rotate=-42] (-.4,-.015) rectangle (.4,.015) [reverseclip];
+ \pic {natoapp6c/s/sea mine=full};
+ \end{scope}
+ }},
+ pics/natoapp6c/s/sea mine/neutralized/.style=natoapp6c/s/sea mine/neutralised,
+ pics/natoapp6c/s/sea mine/.default=full,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/seabed installation}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/seabed installation/.pic={%
+ \path[pic actions]
+ (-0.25, -0.2) --
+ ( 0.25, -0.2) --
+ ( 0.25, -0.075) --
+ ( 0.05, -0.075) --
+ ( 0.05, 0.025) --
+ (-0.125, 0.025) --
+ (-0.125, 0.2) --
+ (-0.25, 0.2) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/search}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/search/.pic={%
+ \path[draw] (-.3,-.2)--(0,-.4)--(.3,-.2) (0,.4)--(0,-.4);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/searching}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/searching/.pic={%
+ \path[pic actions]
+ (-0.4, 0)
+ arc (180:0:0.1)
+ arc (180:360:0.1)
+ arc (180:0:0.1)
+ arc (180:270:0.1) -- +(0.1, 0)
+ (0.3, -0.05) -- (0.4, -0.1) -- (0.3, -0.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/semi trailer truck}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/semi trailer truck/.pic={
+ \pic[scale=.75,xshift=-2,draw]{natoapp6c/s/utility vehicle};
+ \path[pic actions] (0.21, -0.025) -- (0.35, -0.025)
+ (0.35, 0.05) -- (0.35, -0.1);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/sensor}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/sensor/.pic={%
+ \path[fill=pgfstrokecolor] (-.3,0) arc (270:360:.3) arc (180:270:.3) arc
+ (90:180:.3) arc (0:90:.3);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/ship}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/ship/.pic={%
+ \path[pic actions]
+ (-0.2, -0.2) --
+ ( 0.2, -0.2) --
+ ( 0.35, 0.05) --
+ ( 0.15, 0.05) --
+ ( 0.15, 0.2) --
+ (-0.15, 0.2) --
+ (-0.15, 0.05) --
+ (-0.35, 0.05) --
+ cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/signal}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/signal/.pic={%
+ \path[draw] (M.north west) -- (0,-.1) -- (0,.1) -- (M.south east);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/signals intelligence}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/signals intelligence/.pic={%
+ \path[draw] (-.2,.2) -- (-.13,.25) -- (-.07,.2) -- (0,.25) --
+ (.07,.2) -- (.13,.25) -- (.2,.2) (0,.25) -- (0,-.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/ski}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/ski/.pic={
+ \path[draw] (-.15,-.15) -- (.1,.2) (.15,-.15) -- (-.1,.2)
+ (-.1,-.2) -- (-.2,-.1)
+ (.1,-.2) -- (.2,-.1);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/sled}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/sled/.pic={
+ \ifn@to@pp@below%
+ \draw ([shift={(-.15,.15)}]M.south west) to[in=180, out=-90]
+ ++(.15,-.15) -- (M.south east) to[in=-90, out=0]
+ ([shift={(.15,.15)}]M.south east);
+ \else%
+ \draw ([shift={(.3,.1)}]M.west) to[in=180, out=-90]
+ ([shift={(.5,-.1)}]M.west) --
+ ([shift={(-.5,-.1)}]M.east) to[in=-90, out=0]
+ ([shift={(-.3,.1)}]M.east);
+ \fi
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/small squashed text}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/small squashed text/.style={
+ code={\n@to@pp@text@smallsquashed{#1};}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/small text}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/small text/.style={code={\n@to@pp@text@small{#1};}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/sniper}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/sniper/.pic={%
+ \path[draw] (-.2,.2)--(-.05,.2) (.05,.2)--(.2,.2) (0,.15)--(0,-.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/space station}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/space station/.pic={
+ \path[join=bevel,pic actions]
+ (-80:.15 and .06) -- (0.025, 0.175) arc(0:180:0.025) -- (-100:.15 and .06)
+ ($(80:.25 and 0.1)+(0,-.0125)$) arc(80:-260:.25 and .1) --
+ (-260:.15 and .06) arc (-260:80:.15 and .06) -- cycle
+ (-82:.25 and .1) -- (0.025, -0.175) arc(360:180:0.025) -- (-98:.25 and .1);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/squashed text}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/squashed text/.style={code={\n@to@pp@text@squashed{#1};}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/submarine}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/submarine/.pic={
+ \path[fill=pgfstrokecolor,pic actions]
+ (0.4, 0) --
+ (0.25, 0.15) --
+ (-0.25, 0.15) --
+ (-0.4, 0) --
+ (-0.25, -0.15) --
+ (0.25, -0.15) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/submersible}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/submersible/.pic={
+ \path[pic actions]
+ ($(0, -0.05) + (106.6:0.35 and 0.15)$)
+ arc (106.6:433.4:0.35 and 0.15) |- (0, 0.2) -| cycle;
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/supply}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/supply/.pic={
+ \path[pic actions]
+ ($(M.east)-(0,.25)$)--($(M.west)-(0,.25)$);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/surface combatant}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/surface combatant/.pic={
+ \pic {natoapp6c/s/warfare vessel};
+ \path[draw,fill=pgfstrokecolor]
+ (0.12, 0.05) --
+ (0.12, 0.14) --
+ (0.06, 0.14) --
+ (0.06, 0.2) --
+ (0.24, 0.2) --
+ (0.24, 0.272) --
+ (0.06, 0.272) --
+ (0.06, 0.35) --
+ (-0.06, 0.35) --
+ (-0.06, 0.272) --
+ (-0.24, 0.272) --
+ (-0.24, 0.2) --
+ (-0.06, 0.2) --
+ (-0.06, 0.14) --
+ (-0.12, 0.14) --
+ (-0.12, 0.05) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/survey}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/survey/.pic={
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ (0, -0.1) -- (0, 0.195) -- (0.25, 0.0475) -- cycle;
+ \path[pic actions] (0.1, -0.2) -- (0, -0.1) -- (-0.1, -0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/tactical satellite}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/tactical satellite/.pic={
+ \path[fill=pgfstrokecolor,draw]
+ (-.3,-.2) rectangle(-.15,.2)
+ (.15,-.2) rectangle( .3,.2)
+ (-.075,-.15) rectangle (.075,.15)
+ (-.15,0) -- (.15,0)
+ (0,-.15) -- (0,-.3);
+ \path[draw] (-.2,-.35) to [out=40,in=140,looseness=1] (.2,-.35);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/tank}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/tank/.pic={%
+ \pic[draw]{natoapp6c/s/vehicle};
+ \path[pic actions] ( 0.35, 0.2) -- (-0.35, 0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/text}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/text/.style={code={%
+ \n@to@pp@dbg{3}{Text: `#1'}%
+ \n@to@pp@text@normal{#1};}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/topographic}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/topographic/.pic={
+ \path[draw] (0,.05) -- (0,.2)
+ (0,.05) -- (-.1,-.2)
+ (0,.05) -- (.1,-.2)
+ (-30:.15) arc[radius=.15,start angle=-30,end angle=-150];},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/torpedo}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/torpedo/.pic={
+ \path[draw,fill=pgfstrokecolor,pic actions]
+ (-0.35, 0) --
+ (-0.3, 0.075) --
+ ( 0.25, 0.075) --
+ ( 0.35, -0.075) --
+ ( 0.35, 0.075) --
+ ( 0.25, -0.075) --
+ (-0.3, -0.075) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/towed}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/towed/.pic={
+ \ifn@to@pp@below%
+ \path[pic actions] (M.south east) -- (M.south west)
+ ([shift={(.08,0)}]M.south east) circle(.08)
+ ([shift={(-.08,0)}]M.south west) circle(.08);
+ \else%
+ \path[draw] (-.32,0) -- (.32,0) (-.4,0) circle(.08) (.4,0) circle(.08);%
+ \fi},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/tracked}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/tracked/.pic={
+ \ifn@to@pp@below%
+ \path[pic actions]
+ ([shift={(.08,-.16)}]M.south west)
+ arc [radius=.08,start angle=-90,end angle=-270]
+ -- ([shift={(-.08,0)}]M.south east)
+ arc [radius=.08,start angle=90,end angle=-90]
+ -- cycle;
+ \else%
+ \path[pic actions]
+ (-.3,-.1) arc [radius=.1,start angle=-90,end angle=-270]
+ -- (.3,.1) arc [radius=.1,start angle=90,end angle=-90]
+ -- cycle;
+ \fi},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/train locomotive}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/train locomotive/.pic={
+ \path[pic actions]
+ (.35,-.3)--(-.35,-.3)--(-.35,.3)--(0,.3)--(0,0)--(0.35, 0)--cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/transportation}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/transportation/.pic={
+ \path[pic actions] (0,0) circle(.2)
+ (180:.2) -- (0:.2)
+ (225:.2) -- (45:.2)
+ (270:.2) -- (90:.2)
+ (315:.2) -- (135:.2) ;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/unexploded ordnance}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/unexploded ordnance/.pic={
+ \begin{scope}[transparency group=knockout]
+ \path[draw,fill=pgfstrokecolor,pic actions] (0,0) circle(.2);
+ \pic[opacity=0]{natoapp6c/s/small squashed text=UXO};
+ \end{scope}},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/unmanned}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/unmanned/.pic={
+ \path[pic actions]
+ (0,-0.1)
+ --(0.45,0.05)
+ --(0.45,0.1)
+ --(0,0.025)
+ --(-0.45,0.1)
+ --(-0.45,0.05)
+ --cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/utility vehicle}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/utility vehicle/.pic={%
+ \pic[draw]{natoapp6c/s/vehicle};
+ \path[pic actions]
+ (0.35, 0.3) to[in=-90, out=-90, looseness=1] (-0.35, 0.3); },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/vehicle}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/vehicle/.pic={
+ \path[pic actions]
+ (-0.35, 0.2) -- (-0.35, -0.2) -- ( 0.35, -0.2) -- ( 0.35, 0.2)
+ (-0.35, -0.2) -- (-0.35, -0.3)
+ (0.35, -0.2) -- ( 0.35, -0.3)
+ (-0.35, 0.2) -- (-0.35, 0.3)
+ (0.35, 0.2) -- ( 0.35, 0.3);}
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/video imagery}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/video imagery/.pic={
+ \path[pic actions]
+ (-0.4, 0.2) -- (-0.4, -0.2) -- (0.05, -0.2) -- (0.2, 0.2) -- cycle
+ (0.075, -0.15) -- (0.4, -0.15)
+ (0.16, 0.1) -- (0.4, 0.1);
+ \path[draw,fill=pgfstrokecolor,pic actions](0.38,-.2) rectangle (0.42,.15);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/warfare vessel}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/warfare vessel/.pic={
+ \path[draw,fill=pgfstrokecolor] (0, -0.2) -- (0.3, 0.05) -- (-0.3, 0.05) -- cycle;},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/water}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/water/.pic={
+ \path[pic actions]
+ (-0.3, 0.05) -- (0, 0.05) to[in=90, out=0] (0.3, -0.2)
+ (0, 0.05) -- (0, 0.2)
+ (0.075, 0.2) -- (-0.075, 0.2);},
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/wheeled}
+% \begin{macrocode}
+\tikzset{%
+ pics/natoapp6c/s/wheeled/.is choice,
+ pics/natoapp6c/s/wheeled/and tracked/.style={
+ code={
+ \ifn@to@pp@below%
+ \path[pic actions]
+ ([shift={(.4,-.16)}]M.south west)
+ arc [radius=.08,start angle=-90,end angle=-270]
+ -- ([shift={(-.08,0)}]M.south east)
+ arc [radius=.08,start angle=90,end angle=-90]
+ -- cycle
+ ([shift={(.08,-.08)}]M.south west) circle(.08);
+ \else%
+ \path[pic actions]
+ (-.1,-.08) arc [radius=.08,start angle=-90,end angle=-270]
+ -- (.32,.08) arc [radius=.08,start angle=90,end angle=-90]
+ -- cycle
+ (-.4,0) circle(0.08);
+ \fi}},
+ pics/natoapp6c/s/wheeled/limited/.style={
+ code={
+ \ifn@to@pp@below%
+ \path[pic actions] (M.south west) -- (M.south east)
+ ([shift={(.08,-.08)}]M.south west) circle(.08)
+ ([shift={(-.08,-.08)}]M.south east) circle(.08);
+ \else
+ \path[pic actions] (-.4,.08) -- (.4,.08)
+ (-.32,0) circle(0.08) (.32,0) circle(0.08);
+ \fi}},
+ pics/natoapp6c/s/wheeled/cross country/.style={
+ code={\pic{natoapp6c/s/wheeled=limited};
+ \ifn@to@pp@below%
+ \path[pic actions] ([shift={(0,-.08)}]M.south) circle(.08);
+ \else
+ \path[pic actions] (0,0) circle(0.08);
+ \fi}},
+ pics/natoapp6c/s/wheeled/semi/.style={
+ code={\pic{natoapp6c/s/wheeled=limited};
+ \ifn@to@pp@below%
+ \path[pic actions] ([shift={(.24,-.08)}]M.south west) circle(.08);
+ \else
+ \path[pic actions] (-.16,0) circle(0.08);
+ \fi}},
+ pics/natoapp6c/s/wheeled/.default=limited,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \subsubsection{Some extra MIL-STD symbols}
+%
+% Extra NATO App6(c) symbol (from MIL-STD)
+%
+% \iffalse
+% ....................................................................
+% \fi
+% \begin{NatoAppSymbol}{natoapp6c/s/prison}
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/s/prison/.pic={
+ \path[pic actions] (-.3,-.3)rectangle(.3,.3)
+ (-.23,-.30)--(-.23, .3)
+ ( .23,-.30)--( .23, .3)
+ (-.08,-.30)--(-.08,-.2)
+ (-.08,-.15) circle (.05)
+ (-.08,-.1) --(-.08, .3)
+ ( .08,-.30)--( .08,-.2)
+ ( .08,-.15) circle (.05)
+ ( .08,-.1) --( .08, .3)
+ (0,.15) circle(.07 and .1);
+ },
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/text.dtx b/macros/latex/contrib/wargame/source/natoapp6c/text.dtx
new file mode 100644
index 0000000000..5a441dc482
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/text.dtx
@@ -0,0 +1,57 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+%\subsubsection{Text on symbols}
+%
+% \begin{TikzKey}{/tikz/natoapp6c/normal text,
+% /tikz/natoapp6c/squashed text,
+% /tikz/natoapp6c/small text,
+% /tikz/natoapp6c/small squashed text}
+%
+% NATO App6 does not specify any particular font for text symbols
+% (main, modifiers, or amplifiers) but here we choose to use \TeX{}
+% Gyro Heros (a Gothic font, i.e., Helvetica-like).
+%
+% \begin{macrocode}
+\newcommand\n@to@ppfont[2][b]{%
+ \fontencoding{T1}\fontfamily{qhv}\fontseries{#1}\fontsize{#2}{0}\selectfont}
+\tikzset{%
+ natoapp6c/text/.style={%
+ shape=rectangle,%
+ draw=none,%
+ fill=none,%
+ transform shape,%
+ anchor=center},
+ natoapp6c/normal text/.style={font=\n@to@ppfont{12}},
+ natoapp6c/squashed text/.style={font=\n@to@ppfont[bc]{12}},
+ natoapp6c/small text/.style={font=\n@to@ppfont{10}},
+ natoapp6c/squashed small text/.style={font=\n@to@ppfont[bc]{10}},
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{Macro}{\n@to@pp@text@normal,
+% \n@to@pp@text@squashed,
+% \n@to@pp@text@small,
+% \n@to@pp@text@smallsquashed}
+%
+% These macros are short-hands for making a node at $(0,0)$ in the
+% local scope.
+%
+% \begin{macrocode}
+\newcommand\n@to@pp@text@normal[2][] {%
+ \node[natoapp6c/text,natoapp6c/normal text,#1]{#2}}
+\newcommand\n@to@pp@text@squashed[2][]{%
+ \node[natoapp6c/text,natoapp6c/squashed text,#1]{#2}}
+\newcommand\n@to@pp@text@small[2][] {%
+ \node[natoapp6c/text,natoapp6c/small text,#1]{#2}}
+\newcommand\n@to@pp@text@smallsquashed[2][]{%
+ \node[natoapp6c/text,natoapp6c/squashed small text,#1]{#2}}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/util.dtx b/macros/latex/contrib/wargame/source/natoapp6c/util.dtx
new file mode 100644
index 0000000000..18c7689878
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/util.dtx
@@ -0,0 +1,60 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{Utility macros used in the symbols}
+%
+% Here, we define the main symbols used when making markers. Since
+% some of these symbols share code, we will create some regular \TeX{}
+% macros to hold the path definitions. This is by far the simplest
+% way of storing just the path specifications.
+%
+% \begin{Macro}{\testpath}
+% \begin{macrocode}
+\def\testpath#1{\csname n@toapp@#1\endcsname}
+% \end{macrocode}
+% \end{Macro}
+%
+% Corps support for \spec{friendly}, \spec{hostile},
+% \spec{neutral}, and \spec{unknown} factions.
+%
+% \begin{Macro}{\n@toapp@corps@sup@friendly,
+% \n@toapp@corps@sup@hostile,
+% \n@toapp@corps@sup@neutral,
+% \n@toapp@corps@sup@unknown}
+% \begin{macrocode}
+\def\n@toapp@corps@sup@friendly{(.75,.5)--(.5,0)--(.75,-.5)}
+% (M.north east)--(M.east-.25,0)--(M.south east)}
+\def\n@toapp@corps@sup@hostile{(.95,.5)--(.45,0)--(.95,-.5)}
+\def\n@toapp@corps@sup@neutral{(.5,.5)--(.35,0)--(.5,-.5)}
+\def\n@toapp@corps@sup@unknown{(.75,.5)--(.5,0)--(.75,-.5)}
+% \end{macrocode}
+% \end{Macro}
+%
+% Corps support, base
+%
+% \begin{Macro}{\n@toapp@corps@support}
+% \begin{macrocode}
+\def\n@toapp@corps@support#1{
+ \ifx\n@to@pp@friendly#1\n@toapp@corps@sup@friendly%
+ \else\ifx\n@to@pp@hostile#1\n@toapp@corps@sup@hostile%
+ \else\ifx\n@to@pp@neutral#1\n@toapp@corps@sup@neutral%
+ \else\ifx\n@to@pp@unknown#1\n@toapp@corps@sup@unknown%
+ \fi\fi\fi\fi}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{NatoAppSymbol}{natoapp6c/s/TBD}
+% Special placeholder for symbols To Be Done.
+%
+% \begin{macrocode}
+\tikzset{
+ natoapp6c/s/TBD/.pic={\n@to@pp@text@normal{\color{magenta}TBD};}
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/weaponry.dtx b/macros/latex/contrib/wargame/source/natoapp6c/weaponry.dtx
new file mode 100644
index 0000000000..3138da9e75
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/weaponry.dtx
@@ -0,0 +1,88 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{Symbols used when defining weaponry}
+%
+%
+% \begin{NatoAppSymbol}{natoapp6c/s/weapon}
+% \begin{macrocode}
+\tikzset{
+ pics/natoapp6c/s/weapon/.is choice,
+ pics/natoapp6c/s/weapon/base/.style={
+ code={\path [pic actions] (0,-0.2)--(0,.2);}},
+ pics/natoapp6c/s/weapon/top/.style={
+ code={\path [pic actions] (0,.2)--(0,.35);}},
+ pics/natoapp6c/s/weapon/bottom/.style={
+ code={\path [pic actions] (0,.-.35)--(0,-.2);}},
+ pics/natoapp6c/s/weapon/rifle/.style={
+ code={\path [pic actions] (0.2, 0.1)--(0, 0.35)--(-0.2,0.1);}},
+ pics/natoapp6c/s/weapon/machine gun/.style={
+ code={\path [pic actions] (0.2, -0.35)--(-0.2, -0.35);}},
+ pics/natoapp6c/s/weapon/grenade launcher/.style={
+ code={\path [pic actions] (0,0) circle (0.1);}},
+ pics/natoapp6c/s/weapon/missile launcher/.style={
+ code={%
+ \path [pic actions] (0.2, 0.15)
+ to[out=90,in=90,looseness=1.75] (-0.2, 0.15);}},
+ pics/natoapp6c/s/weapon/non lethal/.style={
+ code={\path [pic actions] (-.2,.35) -- (.2,.35);}},
+ pics/natoapp6c/s/weapon/multi fire/.style={
+ code={\path[pic actions] (.2,-.2)--(.2, .2) (-.2,-.2)--(-.2,0.2);}},
+ pics/natoapp6c/s/weapon/air defence/.style={
+ code={%
+ \path[pic actions] (0.2, -0.4)
+ to[out=90,in=90,looseness=1.7] (-0.2, -0.4) -- cycle;}},
+ pics/natoapp6c/s/weapon/anti tank/.style={
+ code={\path[pic actions] (0.2, -0.4)--(0,-0.2)--(-0.2,-0.4);}},
+ pics/natoapp6c/s/weapon/full/.style={
+ code={%
+ \pic[draw]{natoapp6c/s/weapon=base};
+ \pic[draw]{natoapp6c/s/weapon=top};
+ \pic[draw]{natoapp6c/s/weapon=bottom};}},
+ pics/natoapp6c/s/weapon/.default=full
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+%
+%
+% \begin{NatoAppSymbol}{natoapp6c/s/type}
+%
+% (Weight) class of weapons: light, medium, heavy
+%
+% \begin{macrocode}
+\tikzset{
+ pics/natoapp6c/s/type/.is choice,
+ pics/natoapp6c/s/type/light/.style={
+ code={\path [fill=pgfstrokecolor,pic actions] (-0.2, -0.12) rectangle (.2,-.08);}},
+ pics/natoapp6c/s/type/medium/.style={
+ code={
+ \path [fill=pgfstrokecolor,pic actions]
+ (-0.2, -0.12) rectangle (.2,-.08)
+ (-0.2, -0.22) rectangle (.2,-.18);}},
+ pics/natoapp6c/s/type/heavy/.style={
+ code={
+ \path [fill=pgfstrokecolor,pic actions]
+ (-0.2, -0.12) rectangle (.2,-.08)
+ (-0.2, -0.22) rectangle (.2,-.18)
+ (-0.2, -0.32) rectangle (.2,-.28);}},
+ pics/natoapp6c/s/type/vlight/.style={
+ code={\path [fill=pgfstrokecolor,pic actions]
+ (-.025,-0.2) rectangle (.025,.2);}},
+ pics/natoapp6c/s/type/vmedium/.style={
+ code={\path [fill=pgfstrokecolor,pic actions]
+ (-.075,-0.2) rectangle (-.025,.2)
+ ( .025, -0.2) rectangle (.075,.2);}},
+ pics/natoapp6c/s/type/vheavy/.style={
+ code={\path [fill=pgfstrokecolor,pic actions]
+ (-.125,-0.2) rectangle (-.075,.2)
+ (-.025,-0.2) rectangle ( .025,.2)
+ ( .075,-0.2) rectangle ( .125,.2);}},
+ pics/natoapp6c/s/type/.default=light,
+}
+% \end{macrocode}
+% \end{NatoAppSymbol}
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/wargame/source/package.dtx b/macros/latex/contrib/wargame/source/package.dtx
new file mode 100644
index 0000000000..908be36b32
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/package.dtx
@@ -0,0 +1,48 @@
+% \subsection{The \texttt{wargame} package}
+% \label{sec:impl:sty}
+%
+% \iffalse
+%<*package>
+% \fi
+%
+% First, package identification
+%
+% \begin{macrocode}
+\ProvidesPackage{wargame}
+% \end{macrocode}
+%
+% Then needed packages
+%
+% \begin{macrocode}
+\RequirePackage[svgnames]{xcolor}
+\RequirePackage{tikz}
+% \end{macrocode}
+%
+% A switch to include terrain pictures (which take a lot of memory for
+% some reason).
+%
+% \begin{macrocode}
+\@ifundefined{ifhex@terrain@pic}{%
+ \newif\ifhex@terrain@pic
+ \hex@terrain@picfalse}{}
+% \end{macrocode}
+%
+% Options
+%
+% \begin{macrocode}
+\DeclareOption{noterrainpic}{%
+ \hex@terrain@picfalse}
+\DeclareOption{terrainpic}{%
+ \hex@terrain@pictrue}
+\ProcessOptions\relax
+% \end{macrocode}
+%
+% Finally, the used \TikZ{} libraries
+%
+% \begin{macrocode}
+\usetikzlibrary{wargame.hex,wargame.natoapp6c,wargame.chit}
+% \end{macrocode}
+%
+% \iffalse
+%</package>
+% \fi
diff --git a/macros/latex/contrib/wargame/source/tests/chits.dtx b/macros/latex/contrib/wargame/source/tests/chits.dtx
new file mode 100644
index 0000000000..7dcf26c50d
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/tests/chits.dtx
@@ -0,0 +1,74 @@
+% \section{Some test chits}
+%
+% \iffalse
+%<*testchits>
+% \fi
+% Some chits for testing stuff
+%
+% \begin{macrocode}
+\def\firstchit{
+ % \chitdbglvl=5
+ % \natoappdbglvl=5
+ \chit[symbol={
+ echelon=army,
+ main=infantry,
+ lower=mountain,
+ faction=friendly,
+ left={text=A},
+ frame={fill=yellow!50!black},
+ ultra thick,
+ command=land},
+ left={chit/identifier={1}},
+ right={chit/identifier={2}},
+ factors={chit/2 factors={4,8}},
+ frame={draw=black},
+ color=white,text=yellow,fill={blue}]}
+\makeatletter
+\def\secondchit{%
+ \@ifnextchar({\second@chit}{\second@chit(0,0)}%)
+}
+\def\second@chit(#1){
+ \node[draw, chit={symbol={[main=fixed wing,
+ faction=friendly,
+ lower={text=F},
+ command=air](0,-.15)},
+ left={[{red,font=\noexpand\sffamily}]chit/identifier={Fighter}},
+ right={chit/identifier={USAF}},
+ factors={chit/1 factor=3}}] at (#1){};}
+\def\thirdchit{
+ \chit[symbol={[echelon=battalion,
+ main={[fill]artillery},
+ faction=friendly,
+ command=land,
+ below=wheeled]},
+ left={chit/identifier={XVII}},
+ right={chit/identifier={IJA}},
+ factors={chit/2 factors artillery={2,6,5}}]}
+\def\fourthchit{
+ \chit[symbol={[main=fixed wing,
+ faction=friendly,
+ lower={text=F},
+ command=air](0,-.15)},
+ left={[{red,font=\noexpand\sffamily}]chit/identifier={Fighter}},
+ right={chit/identifier={USAF}},
+ factors={chit/1 factor=3}]}
+\tikzset{
+ wg/big text/.pic={
+ \node[shape=rectangle,
+ font=\sffamily\fontsize{18}{0}\selectfont]{#1};}}
+\def\turnchit{
+ \chit[full={wg/big text={Turn}},black,fill=yellow!20!white]}
+\tikzset{
+ my chit/.style={/chit/symbol={[
+ faction=friendly,
+ command=land,
+ bottom=amphibious,
+ main={armoured}]},
+ /chit/left={chit/identifier={Mine}},
+ /chit/factors={chit/2 factors={2,4}}}}
+\tikzset{
+ fort/.style={/chit/full={[scale=.625]hex/fortress 2}}}
+% \end{macrocode}
+% \iffalse
+%</testchits>
+% \fi
diff --git a/macros/latex/contrib/wargame/source/tests/map.dtx b/macros/latex/contrib/wargame/source/tests/map.dtx
new file mode 100644
index 0000000000..e685aa6179
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/tests/map.dtx
@@ -0,0 +1,57 @@
+% \section{A test map}
+%
+% \iffalse
+%<*testmap>
+% \fi
+% \begin{Macro}{\testmap}
+%
+% A map for testing stuff
+%
+% \begin{macrocode}
+\def\testmap{
+ \hex[] (r=0,c=0)
+ \hex[] (r=0,c=1)
+ \hex[] (r=0,c=2)
+ \hex[] (r=0,c=3)
+ \hex[] (r=1,c=0)
+ \hex[town={pic=hex/town/city,name=London,font=\noexpand\bfseries}] (r=1,c=1)
+ \hex[terrain={woods}] (r=1,c=2)
+ \hex[] (r=1,c=3)
+ \hex[] (r=2,c=0)
+ \hex[] (r=2,c=1)
+ \hex[town={name=Oxford,red}] (r=2,c=2)
+ \hex[] (r=2,c=3)
+ \hex[] (r=3,c=0)
+ \hex[town={name=Cambridge}] (r=3,c=1)
+ \hex[] (r=3,c=2)
+ \hex[] (r=3,c=3)
+ \river
+ (hex cs:r=0,c=0,v=north west)--
+ (hex cs:r=0,c=0,v=north east)--
+ (hex cs:r=1,c=1,v=north west)--
+ (hex cs:r=2,c=1,v=west)--
+ (hex cs:r=2,c=1,v=north west)--
+ (hex cs:r=2,c=1,v=north east)--
+ (hex cs:r=3,c=1,v=east)--
+ (hex cs:r=2,c=2,v=north east)--
+ (hex cs:r=3,c=3,v=north west);
+ \river
+ (hex cs:r=2,c=0,v=east)--
+ (hex cs:r=2,c=0,v=north east);
+ \border[dashed,line width=3pt,red]
+ (hex cs:r=0,c=3,v=west)--
+ (hex cs:r=0,c=3,v=north west)--
+ (hex cs:r=1,c=3,v=west)--
+ (hex cs:r=1,c=3,v=north west)--
+ (hex cs:r=1,c=3,v=north east);
+ \road (hex cs:r=0,c=0,e=S)--(hex cs:r=0,c=0)--(hex cs:r=1,c=1);
+ \road (hex cs:r=1,c=1)--(hex cs:r=0,c=2)--(hex cs:r=1,c=3);
+ \road (hex cs:r=1,c=1)--(hex cs:r=2,c=1)--(hex cs:r=2,c=2);
+ \road (hex cs:r=1,c=3)--(hex cs:r=1,c=4);
+ \railroad (hex cs:r=2,c=2)--(hex cs:r=3,c=2)--(hex cs:r=4,c=3);
+}
+% \end{macrocode}
+% \end{Macro}
+% \iffalse
+%</testmap>
+% \fi
diff --git a/macros/latex/contrib/wargame/source/tests/test.tex b/macros/latex/contrib/wargame/source/tests/test.tex
new file mode 100644
index 0000000000..5833d679f2
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/tests/test.tex
@@ -0,0 +1,172 @@
+\documentclass{article}
+
+\usepackage{wargame}
+\usetikzlibrary{decorations.markings}
+\title{A test of \textsf{wargame}}
+\author{}
+\date{}
+\input{testmap}
+\input{testchits}
+\begin{document}
+\maketitle
+%\chitdbglvl=6
+%\wargamedbglvl=5
+\natoappdbglvl=1
+
+\section{A board}
+
+\begin{tikzpicture}
+ \begin{scope}[every hex/.style={/hex/label=auto},
+ hex/board frame/.style={fill=Tan}]
+ \boardframe[0.5](c=0,r=0)(c=3,r=3)
+ \boardpath(c=0,r=0)(c=3,r=3)
+ \draw[fill=white,very thick] \hexboardpath;
+ \boardclip(c=0,r=0)(c=3,r=3){fill=white}
+ \testmap{}
+ \end{scope}
+\end{tikzpicture}
+
+\section{Some chits}
+
+\begin{tikzpicture}
+ \fill[red!50] (1,-1) rectangle (3,1);
+ \firstchit(0,0)%
+ %\secondchit(2,0)%
+ \fourthchit(2,0)%
+ \thirdchit(4,0)%
+ \turnchit(6,0)%
+% \chitdbglvl=4
+ \chit[my chit](0,-2)
+ \chit[my chit,color=white,fill=red,right={chit/identifier=1}](2,-2)
+% \chitdbglvl=0
+ \chit[fort](4,-2)
+ \node[chit={my chit},/chit/left={[font=\noexpand\rmfamily]chit/identifier={foo}},draw] at (6,-2) {};
+%
+\end{tikzpicture}
+
+\section{Chits on a board}
+\begin{tikzpicture}
+ \begin{scope}[every hex/.style={/hex/label=auto},transform shape]
+ \boardframe[0.5](c=0,r=0)(c=3,r=3)
+ \boardclip(c=0,r=0)(c=3,r=3){fill=white}
+ \testmap{}
+ \firstchit(hex cs:c=2,r=1)
+ \secondchit(hex cs:c=3,r=0)
+ \thirdchit(hex cs:c=0,r=3)
+
+ \stackchits(hex cs:c=0,r=1)(.3,.3){
+ \noexpand\firstchit,
+ \noexpand\secondchit/\noexpand\chit[{full=chit/eliminate}]}
+
+ \begin{scope}[m/.style={hex/long move=green}]
+ \path[m] (hex cs:c=3,r=0) -- (hex cs:c=3,r=1)--(hex cs:c=3,r=2);
+ \end{scope}
+ \begin{scope}[a/.style={hex/attack}]
+ \path[a] (hex cs:c=1,r=0) -- (hex cs:c=1,r=1);
+ \end{scope}
+ \end{scope}
+ \turnchit(7,3)
+\end{tikzpicture}
+
+\section{NATO App6(C) symbols}
+
+\begin{tikzpicture}
+ \natoapp[faction=friendly,frame={faction},command=land,main=infantry](0,0)
+ %
+ \natoapp[faction=friendly,
+ frame={faction},
+ main={infantry,engineer},
+ lower=mountain,
+ color=red](2,0)
+ %
+ \natoapp[faction=unknown,
+ command=sea surface,
+ main={diving=military},color=blue](4,0)
+ %
+ \natoapp[faction=unknown,
+ command=space,
+ main={[fill]satellite},
+ color=green](6,0)
+ %
+ \natoapp[
+ faction=none,
+ command=base,
+ echelon=army,
+ main={text=M},
+ top={text=T},
+ bottom={text=B},
+ left={text=L},
+ right={text=R},
+ below={text=V}](8,0)
+ %
+ \natoapp[faction=hostile,
+ frame={faction},
+ command=land,
+ echelon=company,
+ main=rifle](10,0)
+ \begin{scope}[scale=.5]
+ \natoapp[faction=hostile,
+ command=land,
+ echelon=platoon,
+ main={rifle}](24,0)
+ \end{scope}
+
+ \natoapp[faction=friendly,frame={faction},
+ command=land,main=infantry,decoy](0,-2)
+
+ \natoapp[faction=friendly,frame={faction},
+ command=land,main=infantry,decoy,scale line widths,line
+ width=1pt](2,-2)
+
+ \begin{scope}[scale=.5]
+ \natoapp[faction=friendly,frame={faction},
+ command=land,main=infantry,decoy,scale line widths,line
+ width=1pt](8,-4)
+ \end{scope}
+\end{tikzpicture}
+
+\section{Rotations}
+
+%\chitdbglvl=5
+%\natoappdbglvl=11
+\begin{tikzpicture}
+ \begin{scope}[rotate=45,transform shape]
+ \message{^^J======= Chit rotated 45}
+ \chit[symbol={[faction=friendly,command=land,echelon=division,
+ main=anti tank anti armour]}](0,0)
+
+ \message{^^J======= NATO App6(D) rotated 45}
+ \natoapp[faction=friendly,command=land,echelon=division,
+ main=anti tank anti armour](0,2)
+
+ \message{^^J======= NATO App6(D) rotated 45}
+ \natoapp[faction=friendly,command=land,echelon=division,
+ main=air defence](0,4)
+ \end{scope}
+
+ \begin{scope}[shift={(4,0)}]
+ \message{^^J==== Normal chit}
+ \chit[symbol={[faction=friendly,command=land,echelon=division,
+ main=anti tank anti armour]}](0,0)
+
+ \message{^^J==== Normal NATO App6(D)}
+ \natoapp[faction=friendly,command=land,echelon=division,
+ main=anti tank anti armour](0,2)
+
+ \message{^^J==== Normal NATO App6(D)}
+ \natoapp[faction=friendly,command=land,echelon=division,
+ main=air defence](0,4)
+
+ \end{scope}
+\end{tikzpicture}
+
+\begin{tikzpicture}
+ \begin{scope}[]
+ \node[draw,chit={symbol={faction=friendly,command=land,main=infantry}}]
+ (A) {};
+ \foreach \a in {north,west,south,east}{%
+ \draw[fill=red] (A.\a) circle(.1);}
+ \draw[thick,green] circle(.2);
+ \end{scope}
+\end{tikzpicture}
+\end{document}
diff --git a/macros/latex/contrib/wargame/source/util/core.dtx b/macros/latex/contrib/wargame/source/util/core.dtx
new file mode 100644
index 0000000000..a3c656a2b3
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/util/core.dtx
@@ -0,0 +1,1299 @@
+% \iffalse
+% ====================================================================
+% \fi
+%
+% \subsection{The \texttt{wargame.util} \TikZ{} library}
+% \label{sec:impl:util}
+%
+% This library contains some utilities for use in the other
+% libraries.
+%
+% \iffalse
+%<*utils>
+%\fi
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Miscellaneous macros}
+%
+% \begin{Macro}{\wg@dbg}
+% Debugging support. The counter \cs{wargamedbglvl} sets the debug
+% level. The package code then uses \cs{wg@dbg} to print out
+% debugging messages. This macro takes two arguments --- the first
+% is the \emph{least} debug level at which the message is printed, and
+% the second is the message it self.
+%
+% \begin{macrocode}
+\newcount\wargamedbglvl\wargamedbglvl=0
+\def\wg@dbg#1#2{%
+ \ifnum#1>\wargamedbglvl\relax\else\message{^^J#2}\fi}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\wg@addto@macro}
+%
+% The macro \cs{wg@addto@macro}\marg{macro}\marg{other} adds the
+% definition of the macro \meta{other} to the macro \meta{macro}.
+% This uses the \cs{toks} trick of storing the \emph{tokens} of the
+% definition of a \meta{macro} and \meta{other} into \spec{@} and
+% expanding that token into the definition of \meta{macro}.
+% Effectively, this means that the top-level definition of
+% \meta{macro} and \meta{other} are expanded (i.e., macros used in
+% the definition of either macro is \emph{not} expanded) and then
+% that becomes the new definition of \meta{macro}.
+%
+% We will use this macro to do \emph{shallow} definitions of macros
+% to contain keys and such.
+%
+% \begin{macrocode}
+\long\def\wg@addto@macro#1#2{%
+ \begingroup
+ \toks@\expandafter\expandafter\expandafter{\expandafter#1#2}%
+ \xdef#1{\the\toks@}%
+ \endgroup}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\wg@sub@nchor}
+% Get anchor from sub node. We cannot use \cs{pgfpointanchor} since
+% that returns the anchor coordinates in the global coordinate
+% system.
+%
+% \begin{macrocode}
+\def\wg@sub@nchor#1#2{%
+ \wg@dbg{3}{^^JGet `#2' in `#1'}%
+ \@ifundefined{pgf@sh@ns@#1}{%
+ \pgf@x=0cm\pgf@y=0cm}{%
+ \pgf@process{%
+ \csname pgf@sh@ma@#1\endcsname% MW
+ \csname pgf@sh@np@#1\endcsname%
+ \pgf@sh@reanchor{\csname pgf@sh@ns@#1\endcsname}{#2}}}%
+ \wg@dbg{10}{-> \the\pgf@x,\the\pgf@y}%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% Scratch dimensions
+%
+% \begin{macrocode}
+\newdimen\wg@tmpa
+\newdimen\wg@tmpb
+\newdimen\wg@tmpc
+\newdimen\wg@tmpd
+% \end{macrocode}
+%
+%
+% Macro to easy restore a saved path
+%
+% \begin{macrocode}
+\def\settosave#1{
+ \pgfsyssoftpath@setcurrentpath{#1}}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Pictures in compound nodes}
+%
+% \begin{Macro}{\wg@pic}
+% The macro \cs{wg@pic} will render a \texttt{pic}. This is used by
+% the \texttt{natoapp6cs}, \texttt{chit}, and \texttt{hex} node
+% shapes extensively.
+%
+% The arguments are
+% \begin{enumerate}
+% \item Prefix
+% \item Position
+% \item Fixed options
+% \item User options
+% \item Picture.
+% \end{enumerate}
+%
+% That is, the macro expects calls like
+% \begin{Syntax}
+% \cs{wg@pic}\oarg{options}\meta{picture}\cs{@endwg@pic}\marg{prefix}\marg{position}\marg{options}
+% \end{Syntax}
+%
+% Note the \cs{@endwg@pic} at the end of the call to swallow up
+% \meta{picture}. Typically this macro is used as
+%
+% \begin{Syntax}
+% \cs{edef}\cs{args}\{\meta{something}\}
+% \cs{expandafter}\cs{wg@pic}\cs{args}\cs{@endwg@pic}\marg{prefix}\parg{position}\marg{options}
+% \end{Syntax}
+%
+% where \meta{something} typically expands to \oarg{user
+% option}\meta{picture}
+%
+% First, the top-level macro \cs{wg@pic} that looks for user
+% options.
+%
+% \begin{macrocode}
+\def\wg@pic{%
+ \@ifnextchar[{\wg@@pic}{\wg@@pic[]}%]
+}
+% \end{macrocode}
+%
+% This macro then forwards to \cs{wg@@pic} to gobble up
+% \meta{picture}.
+%
+% \begin{enumerate}
+% \item User options
+% \item Arguments
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\wg@@pic[#1]#2\@endwg@pic{%
+ \wg@dbg{2}{Options: `#1', picture: `#2'}%
+ \wg@@@pic{#1}{#2}%
+}
+% \end{macrocode}
+%
+% \begin{enumerate}
+% \item User options
+% \item Arguments
+% \item Prefix
+% \item Coordinates
+% \item Fixed options
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\wg@@@pic#1#2#3#4#5{%
+ \ifx|#2|\wg@dbg{3}{No picture given}%
+ \else%
+ \wg@dbg{3}{^^JWG Pic:
+ ^^J User options: #1
+ ^^J Picture: #2
+ ^^J Prefix: #3
+ ^^J Coordinates: #4
+ ^^J Fixed options: #5}%
+ % \wg@dbg{2}{\string\pic[#5,#1] at (#4) {#3#2}}%
+ \pic[#5,#1] at (#4) {#3#2};%
+ \ifwg@s@ve%
+ \pgf@relevantforpicturesizetrue%
+ \begin{getbbl}%
+ \pic[draw=none,fill=none,transform shape] at (#4) {#3#2};%
+ \end{getbbl}%
+ \wg@dbg{5}{Clipping to local bounding box}%
+ \clip (L.south west) rectangle (L.north east);%
+ \pgf@relevantforpicturesizefalse \global\wg@s@vefalse%
+ \fi
+ \fi%
+ \wg@dbg{3}{End of WG Pic}
+}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\wg@pic@all}
+%
+% This macro sets all pictures in a list.
+%
+% \begin{enumerate}
+% \item List
+% \item Prefix
+% \item Position
+% \item Styles
+% \end{enumerate}
+%
+%
+% \begin{macrocode}
+\def\wg@pic@all#1#2#3#4{%
+ \wg@dbg{2}{WG picture loop
+ ^^J List: \meaning#1
+ ^^J Prefix: `#2'
+ ^^J Position: `#3'
+ ^^J Styles: `#4'}
+ \foreach \p in #1{%
+ \wg@dbg{2}{WG picture element: \meaning\p}%
+ \expandafter\wg@pic\p\@endwg@pic {#2}{#3}{#4}%
+ }%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Nodes in compound nodes}
+%
+% \begin{Macro}{\wg@node}
+% The macro \cs{wg@node} will render a \texttt{node}. This can be
+% used by the \texttt{natoapp6cs}, \texttt{chit}, and \texttt{hex}
+% node shapes.
+%
+% The arguments are
+% \begin{enumerate}
+% \item Prefix
+% \item Position
+% \item Fixed options
+% \item User options
+% \item Body.
+% \end{enumerate}
+%
+% That is, the macro expects calls like
+% \begin{Syntax}
+% \cs{wg@node}\oarg{options}\meta{body}\cs{@endwg@node}\marg{prefix}\marg{position}\marg{options}
+% \end{Syntax}
+%
+% Note the \cs{@endwg@node} at the end of the call to swallow up
+% \meta{body}. Typically this macro is used as
+%
+% \begin{Syntax}
+% \cs{edef}\cs{args}\{\meta{something}\}
+% \cs{expandafter}\cs{wg@node}\cs{args}\cs{@endwg@node}\marg{prefix}\parg{position}\marg{options}
+% \end{Syntax}
+%
+% where \meta{something} typically expands to \oarg{user
+% option}\meta{body}
+%
+% First, the top-level macro \cs{wg@node} that looks for user
+% options.
+%
+% \begin{macrocode}
+\def\wg@node{%
+ \@ifnextchar[{\wg@@node}{\wg@@node[]}%]
+}
+% \end{macrocode}
+%
+% This macro then forwards to \cs{wg@@node} to gobble up
+% \meta{body}.
+%
+% \begin{enumerate}
+% \item User options
+% \item Arguments
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\wg@@node[#1]#2\@endwg@node{%
+ \wg@dbg{2}{Options: `#1', body: `#2'}%
+ \wg@@@node{#1}{#2}%
+}
+% \end{macrocode}
+%
+% \begin{enumerate}
+% \item User options
+% \item Arguments
+% \item Prefix
+% \item Coordinates
+% \item Fixed options
+% \end{enumerate}
+%
+% \begin{macrocode}
+\def\wg@@@node#1#2#3#4#5{%
+ \ifx|#2|\wg@dbg{3}{No body given}%
+ \else%
+ \wg@dbg{3}{^^JWG Pic:
+ ^^J User options: #1
+ ^^J Body: #2
+ ^^J Prefix: #3
+ ^^J Coordinates: #4
+ ^^J Fixed options: #5}%
+ % \wg@dbg{2}{\string\pic[#5,#1] at (#4) {#3#2}}%
+ \node[#5,#1] at (#4) {#3#2};%
+ \fi%
+ \wg@dbg{3}{End of WG Node}
+}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\wg@node@all}
+%
+% This macro sets all pictures in a list.
+%
+% \begin{enumerate}
+% \item List
+% \item Prefix
+% \item Position
+% \item Styles
+% \end{enumerate}
+%
+%
+% \begin{macrocode}
+\def\wg@node@all#1#2#3#4{%
+ \wg@dbg{2}{WG picture loop
+ ^^J List: \meaning#1
+ ^^J Prefix: `#2'
+ ^^J Position: `#3'
+ ^^J Styles: `#4'}
+ \foreach \p in #1{%
+ \wg@dbg{2}{WG picture element: \meaning\p}%
+ \expandafter\wg@node\p\@endwg@node {#2}{#3}{#4}%
+ }%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Bounding boxes}
+%
+% Bounding box dimensions
+%
+%
+% \begin{macrocode}
+\newdimen\wg@bb@minx
+\newdimen\wg@bb@miny
+\newdimen\wg@bb@maxx
+\newdimen\wg@bb@maxy
+% \end{macrocode}
+%
+%
+%
+% Enable or disable bounding box tracking
+%
+% \begin{macrocode}
+\newif\ifwg@notrelevantforpathsize\wg@notrelevantforpathsizefalse
+% \end{macrocode}
+%
+%
+% \begin{Macro}{wg@resetbb}
+% Reset the bounding box tracking dimensions
+%
+% \begin{macrocode}
+\def\wg@resetbb{%
+ \global\wg@bb@minx=16000pt\relax%
+ \global\wg@bb@miny=16000pt\relax%
+ \global\wg@bb@maxx=-16000pt\relax%
+ \global\wg@bb@maxy=-16000pt\relax%
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\old@pgf@protocolsize}
+% Save PGF's bounding box algorithm
+%
+% \begin{macrocode}
+\let\old@pgf@protocolsize\pgf@protocolsizes
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\wg@protocolsizes}
+% Our bounding box algorithm
+%
+% \begin{macrocode}
+\def\wg@protocolsizes#1#2{%
+ \old@pgf@protocolsize{#1}{#2}
+ \ifwg@notrelevantforpathsize\else%
+ \ifdim#1<\wg@bb@minx\global\wg@bb@minx#1\fi%
+ \ifdim#1>\wg@bb@maxx\global\wg@bb@maxx#1\fi%
+ \ifdim#2<\wg@bb@miny\global\wg@bb@miny#2\fi%
+ \ifdim#2>\wg@bb@maxy\global\wg@bb@maxy#2\fi%
+ \fi
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% % \begin{environment}{getbbl}
+% Environment that tracks the local bounding box
+%
+% \begin{macrocode}
+\newenvironment{getbbl}{%
+ \wg@resetbb%
+ \wg@notrelevantforpathsizefalse%
+ \global\let\pgf@protocolsizes\wg@protocolsizes}{%
+ \gdef\pgf@sh@ns@L{rectangle}
+ \gdef\pgf@sh@np@L{%
+ \def\southwest{\pgfqpoint{\the\wg@bb@minx}{\the\wg@bb@miny}}%
+ \def\northeast{\pgfqpoint{\the\wg@bb@maxx}{\the\wg@bb@maxy}}%
+ }
+ \gdef\pgf@sh@nt@L{{1}{0}{0}{1}{0pt}{0pt}}
+ \gdef\pgf@sh@pi@L{\pgfpictureid}
+ \global\let\pgf@protocolsizes\old@pgf@protocolsize
+}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{getbb}
+% Environment to track global bounding box
+%
+% \begin{macrocode}
+\newenvironment{getbb}{%
+ \wg@resetbb%
+ \wg@notrelevantforpathsizefalse%
+ \global\let\pgf@protocolsizes\wg@protocolsizes}{%
+ \gdef\pgf@sh@ns@M{rectangle}
+ \gdef\pgf@sh@np@M{%
+ \def\southwest{\pgfqpoint{\the\wg@bb@minx}{\the\wg@bb@miny}}%
+ \def\northeast{\pgfqpoint{\the\wg@bb@maxx}{\the\wg@bb@maxy}}%
+ }
+ \gdef\pgf@sh@nt@M{{1}{0}{0}{1}{0pt}{0pt}}
+ % \pgfgettransform\pgf@temp%
+ % \xdef\pgf@sh@nt@M{\pgf@temp}
+ % \pgfgettransformentries{\wg@tmp@a}{\wg@tmp@b}{\wg@tmp@c}{\wg@tmp@d}{\pgf@temp}{\pgf@temp}
+ % \message{^^JTransform of M: \meaning\pgf@temp}
+ % \xdef\pgf@sh@nt@M{{\wg@tmp@a}{\wg@tmp@b}{\wg@tmp@c}{\wg@tmp@d}{0pt}{0pt}}%
+ % \message{^^JTransform of M: \meaning\pgf@sh@nt@M}
+ \gdef\pgf@sh@pi@M{\pgfpictureid}
+ \global\let\pgf@protocolsizes\old@pgf@protocolsize
+}
+% \end{macrocode}
+% \end{environment}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Other Tikz utilities}
+%
+% \begin{TikzKey}{tikz/reverseclip}
+%
+% A reverse clipping path. This is used to cut out stuff outside of
+% path defined.
+%
+% \begin{macrocode}
+\tikzstyle{reverseclip}=[insert path={(current bounding box.north east) --
+ (current bounding box.south east) --
+ (current bounding box.south west) --
+ (current bounding box.north west) --
+ (current bounding box.north east)}]
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{tikz/clip even odd rule}
+% A reverse clipping path
+%
+% \begin{macrocode}
+\tikzset{
+ clip even odd rule/.code={\pgfseteorule}, % Credit to Andrew Stacey
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+%
+% \begin{TikzKey}{tikz/invclip}
+%
+% Inverse clipping. This should be an option \emph{after} the path to
+% do the inverse clipping by. This works by adding a \emph{large}
+% (page) path to the current path, and then use that as clipping.
+%
+% \begin{macrocode}
+\tikzset{
+ invclip/.style={
+ clip,insert path=
+ [clip even odd rule]{
+ [reset cm](-\maxdimen,-\maxdimen)rectangle(\maxdimen,\maxdimen)
+ }
+ },
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{save clip}
+%
+% An option for use with sub-elements of NATO App 6(c) or chit
+% nodes. This will save the current path as a clipping path for the
+% next paths to be drawn in the sub-element
+%
+% \begin{macrocode}
+\newif\ifwg@s@ve\wg@s@vefalse
+\tikzset{
+ save clip/.is choice,
+ save clip/true/.code={\global\wg@s@vetrue},
+ save clip/false/.code={\global\wg@s@vefalse},
+ save clip/.default={true},
+ save clip/.initial={false},
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{scale line widths}
+%
+% Scales any line width specified in the node options.
+%
+% Use like
+%
+% \begin{verbatim}
+% \tikzset{
+% some/.style={
+% scale line widths,
+% line width=1pt}
+% }
+% \end{verbatim}
+%
+% Note that the order is important.
+%
+% \begin{macrocode}
+\tikzset{
+ scale line widths/.style={%
+ /utils/exec=\def\tikz@semiaddlinewidth##1{%
+ \pgfgettransformentries{%
+ \wg@jaca}{%
+ \wg@jacb}{%
+ \wg@jacc}{%
+ \wg@jacd}{%
+ \wg@tmp}{%
+ \wg@tmp}%
+ \pgfmathsetmacro{\wg@jac}{sqrt(abs(\wg@jaca*\wg@jacd-\wg@jacb*\wg@jacc))}%
+ \wg@dbg{4}{Scaling line width ##1 by \wg@jac}
+ \pgfmathsetmacro{\wg@lw}{\wg@jac*##1}%
+ \wg@dbg{4}{Scaled ##1 -> \wg@lw}
+ \tikz@addoption{\pgfsetlinewidth{\wg@lw pt}}%
+ \wg@dbg{4}{Added scaled option \wg@lw}
+ \pgfmathsetlength\pgflinewidth{\wg@lw pt}
+ \wg@dbg{4}{Did set line width \wg@lw pt}
+ }},
+ relative line width/.style={%
+ /utils/exec=\def\tikz@semiaddlinewidth##1{%
+ \wg@dbg{4}{Relative line width #1 times ##1}%
+ \pgfmathsetmacro{\wg@lv}{#1*##1}%
+ \tikz@addoption{\pgfsetlinewidth{\wg@lw pt}}%
+ \pgfmathsetlength\pgflinewidth{\wg@lw pt}}}
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{sub pic actions}
+%
+% This is key that propagates actions to sub pictures of pictures.
+% The normal \texttt{pic actions} cannot be used as it causes an
+% infinite loop.
+%
+% \begin{macrocode}
+\tikzset{
+ sub pic actions/.code={%
+ \tikz@picmode%
+ \edef\opts{%
+ \iftikz@mode@draw draw,\else draw=none,\fi
+ \iftikz@mode@fill fill\else fill=none\fi}
+ \wg@dbg{5}{^^JSub Mode: \meaning\tikz@picmode \meaning\opts}
+ \pgfset{/tikz/.cd}
+ \pgfkeysalsofrom{\opts}
+ }}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{wg/debug show}
+%
+% Show debugging information
+%
+% \begin{macrocode}
+\tikzset{
+ wg/debug show/.code={%
+ \extractcolorspec{pgfstrokecolor}{\wg@tmp@fg}
+ \def\wg@tmp@bg{none}
+ \@ifundefinedcolor{pgffillcolor}{}{
+ \extractcolorspec{pgffillcolor}{\wg@tmp@bg}}
+ \begingroup
+ \tikz@mode
+ \wargamedbglvl=#1
+ \wg@dbg{3}{Drawing with w/stroke `\wg@tmp@fg'
+ (\tikz@strokecolor,\iftikz@mode@draw\else not\space\fi drawing)
+ and fill `\wg@tmp@bg' (\tikz@fillcolor,\iftikz@mode@fill\else
+ not\space\fi filling)}
+ \endgroup
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{Random IDs}
+%
+%
+% \begin{macrocode}
+\def\wg@r@ndom@id{%
+ \def\wg@uuid{}
+ \foreach \i in {1,...,8}{%
+ \pgfmathparse{Hex(random(0,15))}
+ \xdef\wg@uuid{\wg@uuid\pgfmathresult}}}
+% \end{macrocode}
+%
+% \iffalse
+%</utils>
+%\fi
+% \iffalse
+% ====================================================================
+% \fi
+%
+% \subsection{The \texttt{wgexport} class}
+% \label{sec:impl:util}
+%
+% This document class is used for exporting game component to be used
+% in a VASSAL module
+% libraries.
+%
+% \iffalse
+%<*exportcls>
+%\fi
+%
+% Class identification and load \texttt{wargame} package
+%
+% \begin{macrocode}
+\ProvidesClass{wgexport}
+\PassOptionsToClass{multi=tikzpicture,varwidth=false}{standalone}
+\DeclareOption{noterrainpic}{%
+ \PassOptionsToPackage{\CurrentOption}{wargame}}
+\DeclareOption{terrainpic}{%
+ \PassOptionsToPackage{\CurrentOption}{wargame}}
+\DeclareOption*{%
+ \PassOptionsToClass{\CurrentOption}{standalone}}
+\ProcessOptions\relax
+\LoadClass{standalone}
+\RequirePackage{wargame}
+% \end{macrocode}
+%
+% We need a few utilities before we get to the actual environment.
+% First, we need a tools to write out literal left and right curly
+% braces. We do a bit of catcode hackery to accomplish that.
+%
+% \begin{macrocode}
+\begingroup
+\catcode`\^^I=12
+\def\@tabchar{^^I}
+\catcode`<=1 \catcode`>=2
+\catcode`{=12 \catcode`}=12
+\gdef\@lbchar<{>
+\gdef\@rbchar<}>
+\endgroup
+% \end{macrocode}
+%
+% Above, we temporarily set the tab, and left and right curly brace
+% characters to be regular letters (12), and the catcodes of less than
+% and greater than to be those of left and right curly braces
+% respectively. We then define the macros \cs{@tabchar},
+% \cs{@lbchar}, and \cs{@rbchar} to produce literal characters.
+% \LaTeX already has \cs{@percentchar}.
+%
+% Everything we do should go inside this environment. The single
+% optional argument is the file name stem of the output JSON file.
+%
+% \begin{macrocode}
+\newenvironment{imagelist}[1][\jobname]{%
+ \newwrite\mk@out%
+ \def\mk@i{}%
+ \def\mk@w{\immediate\write\mk@out}%
+ \immediate\openout\mk@out=#1.json
+ \mk@w{[}
+}{
+ \mk@w{\mk@i \@lbchar "name":"End of list", "category": "<<eol>>",
+ "subcategory": "" \@rbchar }
+ \mk@w{]}
+ \immediate\closeout\mk@out
+}
+% \end{macrocode}
+%
+%
+% Preceed all images (\textsf{tikzpicture}) with this command
+%
+% First argument is the name of the image. This can be anything.
+% Note that for counters, if the name ends in \texttt{flipped} then it
+% is considered the backside of a counter.
+%
+% Second argument is the type of image. Recognised types are
+%
+% \begin{itemize}
+% \item \texttt{board} for boards
+% \item \texttt{oob} for OOBs
+% \item \texttt{chart} for charts
+% \item \texttt{counter} for counters
+% \item \texttt{front} for front page
+% \end{itemize}
+%
+% Other types can be used, and the images will be exported, but the
+% Python script pays no particular attention to those then. Use for
+% example to prepare images for help or the like.
+%
+% The third argument is the sub type. This is most relevant for the
+% counters. Sub types can be anything, but since the counters will
+% receive different prototypes based on the sub type, it makes sense
+% to divide into sub types a la
+%
+% \begin{itemize}
+% \item factions
+% \item common markers
+% \end{itemize}
+%
+% The faction sub types should just be the name of the faction.
+% E.g., Allies, Axis, Soviet, NATO, Warsaw Pact. Spaces should not
+% matter.
+%
+% For common markers, there are a few names that are recognised
+% specifically by the Python script. These are
+%
+% \begin{itemize}
+% \item \texttt{common}
+% \item \texttt{all}
+% \item \texttt{marker}
+% \item \texttt{markers}
+% \end{itemize}
+%
+% Counters that has these sub-types will no be considered to belong
+% to any faction.
+%
+% Note that the Python script uses the faction names to guess the
+% players of the game, and uses them in several places.
+%
+%
+% \begin{macrocode}
+\def\info{%
+ \@ifstar{\@@info{,}}{\@@info{\@rbchar,}}}
+\def\@@info#1#2#3#4{%
+ \chit@dbg{2}{Making image `#2' of type `#3'/`#4' on page \thepage}%
+ \mk@w{ \@lbchar}%
+ \mk@w{ \space "name": "#2",}%
+ \mk@w{ \space "category": "#3",}%
+ \mk@w{ \space "subcategory": "#4", }%
+ \mk@w{ \space "number": \thepage #1}%
+ \let\oldmk@i\mk@i%
+ \ifx#1,\relax\edef\mk@i{\mk@i\space\space}\fi}
+\def\end@info{%
+ \let\mk@i\oldmk@i%
+ \mk@w{ \space \@rbchar,}}
+% \end{macrocode}
+%
+% Make separate images for each counter (single sided).
+%
+% \begin{macrocode}
+\newcommand\chitimages[2][]{%
+ \begingroup%
+ \let\chit@report\do@chit@report%
+ \let\natoapp@report\do@natoapp@report%
+ \chit@dbg{2}{chits to make images of `#2'}%
+ \foreach[count=\ti from 0] \t/\x in #2{%
+ \ifx\t\empty\else% Ignore empty rows
+ \message{^^JSubcategory: `\x' (default `#1')}
+ \ifx\t\x\def\x{#1}\fi% Take sub-category or default
+ \foreach \u/\m in \t{%
+ \ifx\u\empty\else% Ignore empty cells
+ \chit@dbg{2}{Next chit `\u' with possible multiplicity `\m'}%
+ \ifx\m\@empty\def\m{1}\fi% If not multiplicity defined
+ \ifx\u\m\def\m{1}\fi% If the same as unit
+ \chit@dbg{2}{Next chit `\u' multiplicity `\m'}%
+ %% We only make one copy of the chit, since we can duplicate
+ %% it in VASSAL
+ \info*{\u}{counter}{\x}
+ \begin{tikzpicture}
+ \chit[\u=\ti]%
+ \end{tikzpicture}
+ \end@info%
+ %% \foreach \n in {1,...,\m}{% Make a number of copies
+ %% \ifx\u\chit@blank%
+ %% \chit@dbg{3}{Ignoring blank chit:\u}%
+ %% \else%
+ %% \info{\u}{counter}{#2}
+ %% \begin{tikzpicture}
+ %% \chit[\u=\ti](\c,\r)%
+ %% \end{tikzpicture}
+ %% \fi%
+ %% }%
+ \fi%
+ }%
+ \chit@dbg{2}{End of inner loop}%
+ \fi%
+ }%
+ \chit@dbg{2}{End of outer loop}%
+ \endgroup%
+}
+% \end{macrocode}
+%
+% Make separate images for each counter (double sided). The back-side
+% counters must be defined by append `\texttt{ flipped}' the front
+% face name
+%
+% \begin{macrocode}
+\newcommand\doublechitimages[2][]{%
+ \begingroup%
+ \let\chit@report\do@chit@report%
+ \let\natoapp@report\do@natoapp@report%
+ \foreach[count=\ti from 0] \t/\x in #2{%
+ \ifx\t\empty\else% Ignore empty rows
+ \message{^^JSubcategory: `\x' (default `#1')}
+ \ifx\t\x\def\x{#1}\fi% Take sub-category or default
+ \foreach \u/\m in \t{%
+ \ifx\u\empty\else% Ignore empty cells
+ \chit@dbg{2}{Next chit `\u' with possible multiplicity `\m'}%
+ \ifx\m\@empty\def\m{1}\fi% If not multiplicity defined
+ \ifx\u\m\def\m{1}\fi% If the same as unit
+ \chit@dbg{2}{Next chit `\u' multiplicity `\m'}%
+ %% Flipped chit
+ \edef\s{\u\space flipped}%
+ %% We only make one copy of the chit, since we can duplicate
+ %% it in VASSAL
+ \info*{\u}{counter}{\x}%
+ \begin{tikzpicture}%
+ \chit[\u=\ti]%
+ \end{tikzpicture}%
+ \end@info%
+ \info*{\s}{counter}{\x}%
+ \begin{tikzpicture}%
+ \chit[\s=\ti]%
+ \end{tikzpicture}%
+ \end@info%
+ %% \foreach \n in {1,...,\m}{% Make a number of copies
+ %% \ifx\u\chit@blank%
+ %% \chit@dbg{3}{Ignoring blank chit:\u}%
+ %% \else%
+ %% \info{\u}{counter}{#2}
+ %% \begin{tikzpicture}
+ %% \chit[\u=\ti](\c,\r)%
+ %% \end{tikzpicture}
+ %% \fi%
+ %% }%
+ \fi%
+ }%
+ \fi%
+ }%
+ \endgroup%
+}
+% \end{macrocode}
+%
+% Special for boards, we have the environment \textsf{boardimage}.
+% Like \cs{info} we must specify the name and sub-category of the
+% board, but the category is assumed to be \texttt{board} (though the
+% optional argument can specify a different category).
+%
+% Within this environment some specific styles are defined that allows
+% the user to specify VASSAL zones on the board. For this to work
+% properly, the parent \textsf{tikzpicture} \emph{must} have the style
+% \texttt{zoned}. This style will record the bounding box of the
+% picture which we will need to calculate VASSAL coordinates later
+% on.
+%
+% Other styles are \texttt{zone scope}, to be applied to
+% \texttt{scope}s in the picture, and \texttt{zone path} to be applied
+% to \texttt{path}s (or \cs{draw}, \cs{fill}, or the like) in the
+% picture. These will record coordinates of these elements in side
+% the picture. The Python script will then define VASSAL zones based
+% on these coordinates.
+%
+% For \texttt{zone scope} applied to a \texttt{scope}, what is
+% recorded are
+%
+% \begin{itemize}
+% \item The current coordinate transformation matrix
+% \item The current translation
+% \item The bounding box, within the current transformation and
+% translation.
+% \end{itemize}
+%
+% To define a zone in the board, simply enclose it in a
+%
+% \begin{verbatim}
+% \begin{scope}[zone scope=name]
+% ...
+% \end{scope}
+% \end{verbatim}
+%
+% The \meta{name} will be the name of the scope. If this contains the
+% sub-string \texttt{hex} (upper, lower, or mixed case), then the zone
+% will get a hex grid with numbering attached to it.
+%
+% If the \meta{name} contains the sub-string \texttt{turn} (any case),
+% then it is assumed to be a turn track and a rectangular grid will be
+% attached. The column and row separator will be set to \texttt{T},
+% so that it won't collide with the main zone. Similar if \meta{name}
+% contains \texttt{oob}, except the separator is set to \texttt{O}.
+%
+% If \meta{name} contains the sub-string \texttt{pool}, then it is
+% assumed to be a pool of counters, and \emph{no} grid is attached.
+%
+% For \texttt{zone path} applied to a \texttt{path}, what is recorded
+% is the path coordinates (as straight line segments) in the global
+% coordinate system.
+%
+% Both styles take one argument --- the name of the zone. If that
+% name contains the sub-string \texttt{hex} anywhere in the name, then
+% the zone is assumed to contain a hex grid. Otherwise, a rectangular
+% grid (of fixed size) will be applied to it.
+%
+% The environment \texttt{boardimage} also records the coordinate
+% options currently in use (keys \texttt{hex/first row is},
+% \texttt{hex/row direction is}, and so on), as well as the current
+% label option (as defined by \texttt{every hex} or \texttt{every hex
+% node}).
+%
+% All coordinates, and such are recorded in centimetres. It is worth
+% remembering that the Tikz coordinate system has the $y$ axis point
+% upward, while typical image software has the $y$ axis point down.
+% \texttt{pdftocairo} typically assumes a 150 PPI (pixels-per-inch)
+% resolution.
+%
+% That means that scaling factor becomes
+%
+% $$\frac{150\mathrm{pixel}}{2.54\mathrm{cm}}=59.055\frac{\mathrm{pixel}}{\mathrm{cm}}$$
+%
+% \iffalse
+% Using definition in terms of printers feet - the one to use!
+%
+% PNG: 1674 x 1101
+% PDF: "lower left": [-0.02107,-0.02107],
+% "upper right": [28.31705,18.60843]
+% Width: 28.31705+0.02107 = 28.33812
+% Height: 18.60843+0.02107 = 18.62950
+% Pixel / cm: 1674 / 28.33812 = 59.07237318495369488166
+% 1101 / 18.62950 = 59.09981480984460130438
+% Average = 59.08609399739914809302
+%
+% Calculated = 150 / 2.54 = 59.05511811023622047244
+%
+% Using 1/72.27
+%
+% "lower left": [-0.02109,-0.02109],
+% "upper right": [28.321,18.61102]
+% Width: 28.321+0.02109=28.34209
+% Height: 18.61102+0.02109=18.63211
+% Pixel / cm: 1674 / 28.34209 = 59.06409866033168337267
+% 1101 / 18.63211 = 59.09153606328000425072
+% Average = 59.07781736180584381169
+% \fi
+%
+% The information extracted is written to the
+% \cs{jobname}\texttt{.json} file as a sub-object (with name given by
+% the first optional argument) of the image object. In that way, we
+% can later on easily get the information from our catalogue of
+% images.
+%
+% Note, the styles \texttt{zoned}, \texttt{zone scope}, and
+% \texttt{zone path} are defined in \texttt{wargame} to be dummies so
+% that one can have them in the definition of the board without
+% impact.
+%
+% Since we want to write all dimensions in centimetres, we need to be
+% able to convert \texttt{pt} dimensions to centimetres. We make two
+% macros to do that for us.
+%
+% The exact definition of 1pt is
+%
+% $$1\,\mathrm{pt} = \frac{249}{250}12"\frac{1}{864}=\frac{83}{6000}1"
+% = 0.03513\overline{6}$$
+%
+% \begin{macrocode}
+% 2.54 / 72.27 = .03514598035145980351
+% \def\pt@to@cm#1{\pgfmathparse{#1 * 0.0351460}}
+\def\pt@to@cm#1{\pgfmathparse{#1 * 0.0351367}}
+\def\ptpoint@to@cm#1#2{%
+ \pt@to@cm{#1}\edef\x{\pgfmathresult}%
+ \pt@to@cm{#2}\edef\y{\pgfmathresult}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\get@bb#1{%
+ \pgfpointanchor{#1}{south west}%
+ \pgfgetlastxy\tmp@llx\tmp@lly%
+ \pgfpointanchor{#1}{north east}%
+ \pgfgetlastxy\tmp@urx\tmp@ury%
+ \pt@to@cm{\tmp@llx}\edef\llx{\pgfmathresult}
+ \pt@to@cm{\tmp@lly}\edef\lly{\pgfmathresult}
+ \pt@to@cm{\tmp@urx}\edef\urx{\pgfmathresult}
+ \pt@to@cm{\tmp@ury}\edef\ury{\pgfmathresult}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\mk@transform{%
+ \pgfgettransformentries{\mxx}{\mxy}{\myx}{\myy}{\ptdx}{\ptdy}
+ \pt@to@cm{\ptdx}\edef\dx{\pgfmathresult}
+ \pt@to@cm{\ptdy}\edef\dy{\pgfmathresult}
+ \mk@w{ \mk@i "xx": \mxx,}
+ \mk@w{ \mk@i "xy": \mxy,}
+ \mk@w{ \mk@i "yx": \myx,}
+ \mk@w{ \mk@i "yy": \myy,}
+ \mk@w{ \mk@i "dx": \dx,}
+ \mk@w{ \mk@i "dy": \dy,}
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\mk@bb#1{%
+ \get@bb{#1}
+ \mk@w{ \mk@i "lower left": [\llx,\lly],}
+ \mk@w{ \mk@i "upper right": [\urx,\ury],}
+ \begingroup
+ % \pgftransforminvert
+ \pgfpointanchor{#1}{south west}%
+ \pgfgetlastxy\tmp@llx\tmp@lly%
+ \pgfpointtransformed{\pgfpoint{\tmp@llx}{\tmp@lly}}
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ %
+ \pgfpointanchor{#1}{north east}%
+ \pgfgetlastxy\tmp@urx\tmp@ury%
+ \pgfgetlastxy\tmp@llx\tmp@lly%
+ \pgfpointtransformed{\pgfpoint{\tmp@urx}{\tmp@ury}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \pt@to@cm{\the\pgf@xa}\edef\llx{\pgfmathresult}
+ \pt@to@cm{\the\pgf@ya}\edef\lly{\pgfmathresult}
+ \pt@to@cm{\the\pgf@xb}\edef\urx{\pgfmathresult}
+ \pt@to@cm{\the\pgf@yb}\edef\ury{\pgfmathresult}x
+ \mk@w{ \mk@i "global lower left": [\llx,\lly],}
+ \mk@w{ \mk@i "global upper right": [\urx,\ury]}
+ \endgroup
+}
+% \end{macrocode}
+%
+% For the key \texttt{zone path} to work, we need to be able to record
+% the path as it moves along. To that end, we make a custom
+% decoration that will do that for us, and, once the path is finished,
+% write the path to our JSON file.
+%
+% \begin{macrocode}
+\pgfdeclaredecoration{record path construction}{initial}{%
+ \state{initial}[width=0pt,next state=more]{
+ \begingroup
+ \pgf@decorate@inputsegment@first
+ \ptpoint@to@cm{\the\pgf@x}{\the\pgf@y}
+ \xdef\wg@path{[\x,\y]}
+ \endgroup
+ }%
+ \state{more}[width=\pgfdecoratedinputsegmentremainingdistance]{%
+ \begingroup
+ \pgf@decorate@inputsegment@last
+ \ptpoint@to@cm{\the\pgf@x}{\the\pgf@y}
+ \xdef\wg@path{\wg@path,[\x,\y]}
+ \endgroup
+ }
+ \state{final}{%
+ \begingroup
+ \pgf@decorate@inputsegment@last
+ \ptpoint@to@cm{\the\pgf@x}{\the\pgf@y}
+ \xdef\wg@path{\wg@path,[\x,\y]}
+ \endgroup
+ \mk@w{ \mk@i "zone path \wg@record@path@name": \@lbchar}
+ \mk@w{ \mk@i\space "path": [\wg@path] \@rbchar,}
+ }
+}%
+% \end{macrocode}
+%
+% Now we can make our environment
+%
+% The first thing we do is to use the \cs{info} macro to mark the
+% image. Then we open our JSON file. We make a short-hand macro for
+% writing to that file. The macro \cs{bd@i} records the current
+% indention (which is important in JSON)
+%
+% \begin{macrocode}
+\newenvironment{boardimage}[3][board]{%
+ \def\bd@n{#2}
+ \newcount\mk@point
+ \mk@point=0
+ \let\oomk@i\mk@i%
+% \end{macrocode}
+%
+%
+% Then, to extract the label option, we make a dummy \texttt{node}
+% with the styles \texttt{every hex} and \texttt{every hex node}, so
+% we can extract that option.
+%
+% \begin{macrocode}
+ \info{dummy}{<<dummy>>}{}%
+ %\tikz{}%
+ \tikz{\scoped[every hex/.try,every hex node/.try]{%
+ \node[inner sep=0,outer sep=0]{%
+ \global\let\mk@label\hex@label}}}%
+% \end{macrocode}
+%
+% The next thing we do is to make an object. The first things we put
+% in are the units used (``cm''), and the grid options.
+%
+% \begin{macrocode}
+ \info*{#2}{#1}{#3}%
+ \mk@w{ \mk@i "zones": \@lbchar}%
+ \edef\mk@i{\mk@i\space}
+ %% Everything is made into centimeters
+ \mk@w{ \mk@i "units": "cm",}
+ \message{^^Jlabel: \meaning\mk@label}
+ \@ifundefined{mk@label}{}{\mk@w{ \mk@i "labels": "\mk@label",}}
+ %% Write out coordinate options as "coords" object
+ \mk@w{ \mk@i"coords": \@lbchar}%
+ \mk@w{ \mk@i "row": \@lbchar}%
+ \mk@w{ \mk@i\space "offset": \hex@coords@row@off,}%
+ \mk@w{ \mk@i\space "factor": \hex@coords@row@fac \@rbchar,}%
+ \mk@w{ \mk@i "column": \@lbchar}%
+ \mk@w{ \mk@i\space "offset": \hex@coords@col@off,}%
+ \mk@w{ \mk@i\space "factor": \hex@coords@col@fac,}%
+ \mk@w{ \mk@i\space "top short": "\hex@top@short@col",}%
+ \mk@w{ \mk@i\space "bottom short": "\hex@bot@short@col" \@rbchar}%
+ \mk@w{ \mk@i\@rbchar,}%
+% \end{macrocode}
+%
+% We then monkey-patch \cs{boardframe} to also output coordinates to
+% our JSON file. Note that this will probably be embedded in a
+% different object.
+%
+% \begin{macrocode}
+ %%
+ \let\oldbo@rdframe\bo@rdframe%
+ \def\bo@rdframe[##1](##2)(##3){%
+ \oldbo@rdframe[##1](##2)(##3)%
+ \mk@w{ \mk@i"board frame": \@lbchar}
+ \mk@w{ \mk@i\space "lower left": [\llx,\lly],}
+ \mk@w{ \mk@i\space "upper right": [\urx,\ury],}
+ \mk@w{ \mk@i\space "margin": \margin,}
+ \mk@w{ \mk@i\space "width": \w,}
+ \mk@w{ \mk@i\space "height": \h \@rbchar,}}%
+% \end{macrocode}
+%
+% Next, we make the style \texttt{zoned} to be applied to the
+% \texttt{tikzpicture} environment. This records the bounding box of
+% the full picture.
+%
+% \begin{macrocode}
+ \tikzset{
+ zoned/.code={% Apply to whole picture
+ \pgfkeys{%
+ % This needs to be done in the picture!
+ /tikz/execute at end picture={%
+ \mk@w{ \mk@i "zoned": \@lbchar}
+ \mk@transform%
+ \mk@bb{current bounding box}
+ \mk@w{ \mk@i \@rbchar,}
+ }
+ }
+ },
+% \end{macrocode}
+%
+% The next style is the \texttt{zone scope}. At the start of the
+% scope we record the current transformation matrix. Then we install
+% a handler to extract the bounding box at the end of the scope. Note
+% that we increase indention here.
+%
+% \begin{macrocode}
+ zone scope/.code={%
+ \mk@w{ \mk@i"zone scope ##1": \@lbchar}
+ \let\omk@i\mk@i
+ \edef\mk@i{\mk@i\space}
+ \mk@transform%
+ %\bd@w{ \@rbchar,}
+ \gdef\wg@export@box{##1}%
+ \pgfkeys{%
+ /tikz/local bounding box=wg export box,
+ /tikz/execute at end scope={
+ \mk@bb{wg export box}
+ \let\mk@i\omk@i
+ \mk@w{ \mk@i\@rbchar,}},
+ } % pgfkeys
+ }, % zone scope
+% \end{macrocode}
+% The next style gets the global coordinates of the current (0,0)
+% point - f.ex. in a node - and outputs that
+% \begin{macrocode}
+ zone point/.code n args={3}{
+ \advance\mk@point1
+ \global\mk@point=\mk@point
+ \pgf@xa=##2 cm
+ \pgf@ya=##3 cm
+ \pgfpointtransformed{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ % \pgfpointtransformed{\pgfpoint{0pt}{0pt}}
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pt@to@cm{\the\pgf@xa}\edef\px{\pgfmathresult}
+ \pt@to@cm{\the\pgf@ya}\edef\py{\pgfmathresult}
+ \mk@w{ \mk@i "point\the\mk@point": \@lbchar "name": "##1", "type": "point", "coords": [\px,\py]
+ \@rbchar, }
+ %\message{^^JZone point \the\mk@point\space ##1: ##2,##3 -> \px,\py}
+ },
+% \end{macrocode}
+%
+% The \texttt{zone path} style is a bit more simple, but only because
+% the bulk of the work is done in a decoration. We need to be able to
+% pass a name to that decoration, s we make a key for that. The user
+% need not think about that though.
+%
+% \begin{macrocode}
+ /pgf/decoration/record path name/.store in=\wg@record@path@name,
+ zone path/.style={%
+ postaction={decorate,decoration={
+ record path construction,
+ record path name=##1}}
+ } % zone path
+ }% tikzset
+}
+% \end{macrocode}
+%
+% That finishes the first part of the environment. At the end of the
+% environment, we simple write the name of the picture, and close our
+% JSON output.
+%
+% \begin{macrocode}
+{%
+ \mk@w{ \mk@i "name": "\bd@n" }%
+ \let\mk@i\oomk@i%
+ \mk@w{ \mk@i\@rbchar}%
+ \end@info%
+}
+% \end{macrocode}
+%
+%
+% TO BE DONE: We could add hooks to both the \texttt{hex} and
+% \texttt{chit} shapes that would allow us to write out the settings
+% for each of these. This would allow us to make data files that
+% contain the information available in the \LaTeX{} code. For
+% example, we could write a counters
+%
+% \begin{itemize}
+% \item Left and right identifiers
+% \item Upper left, upper right, lower left, and lower right
+% identifiers. (some care must be taken if these contains graphics
+% and not just text.)
+% \item Factors
+% \item NATO symbol
+% \begin{itemize}
+% \item Faction, command, echelon
+% \item Mains
+% \item Left, right, top, and bottom attributes and modifiers
+% \item Below attribute
+% \end{itemize}
+% \end{itemize}
+%
+% If one then assumed that for example the upper left corner holds the
+% start-up hex, then one could use that information.
+%
+% The code below exports the chit information to the JSON file. Not
+% sure how to use it though.
+%
+% \begin{macrocode}
+\tikzset{
+ zone turn/.store in=\zone@turn,
+ zone mult/.store in=\zone@mult
+}
+\def\do@chit@report{%
+ \mk@w{ \mk@i "chit": \@lbchar}
+ \@ifundefined{id}{} {\mk@w{ \mk@i\space "id": "\id", }}%
+ \@ifundefined{chit@symbol}{} {\mk@w{ \mk@i\space "symbol": "true", }}%
+ \@ifundefined{chit@full}{} {\mk@w{ \mk@i\space "full": "\chit@full", }}
+ \@ifundefined{chit@factors}{} {\mk@w{ \mk@i\space "factors": "\chit@factors", }}%
+ \@ifundefined{chit@left}{} {\mk@w{ \mk@i\space "left": "\chit@left", }}%
+ \@ifundefined{chit@right}{} {\mk@w{ \mk@i\space "right": "\chit@right", }}%
+ \@ifundefined{chit@upper@left}{} {\mk@w{ \mk@i\space "upper left": "\chit@upper@left", }}%
+ \@ifundefined{chit@lower@left}{} {\mk@w{ \mk@i\space "lower left": "\chit@lower@left", }}%
+ \@ifundefined{chit@upper@right}{}{\mk@w{ \mk@i\space "upper right": "\chit@upper@right", }}%
+ \@ifundefined{chit@lower@right}{}{\mk@w{ \mk@i\space "lower right": "\chit@lower@right}", }%
+ \mk@w{ \mk@i\space "end": 0}
+ \@ifundefined{chit@symbol}{
+ \mk@w{ \mk@i \@rbchar }
+ }{
+ \mk@w{ \mk@i \@rbchar, }% NATOAPP6c will follow
+ }%
+}
+\def\do@natoapp@report{%
+ \mk@w{ \mk@i "natoapp6c": \@lbchar}
+ \@ifundefined{id}{}{\mk@w{ \mk@i\space "id": "\id", }}
+ \@ifundefined{natoapp@fac}{}{\mk@w{ \mk@i\space "faction": "\natoapp@fac", }}
+ \@ifundefined{natoapp@cmd}{}{\mk@w{ \mk@i\space "command": "\natoapp@cmd", }}
+ \@ifundefined{natoapp@ech}{}{\mk@w{ \mk@i\space "echelon": "\natoapp@ech", }}
+ \@ifundefined{natoapp@main}{}{\mk@w{ \mk@i\space "main": "\natoapp@main", }}
+ \@ifundefined{natoapp@left}{}{\mk@w{ \mk@i\space "left": "\natoapp@left", }}
+ \@ifundefined{natoapp@right}{}{\mk@w{ \mk@i\space "right": "\natoapp@right", }}
+ \@ifundefined{natoapp@upper}{}{\mk@w{ \mk@i\space "upper": "\natoapp@upper", }}
+ \@ifundefined{natoapp@lower}{}{\mk@w{ \mk@i\space "lower": "\natoapp@lower", }}
+ \@ifundefined{natoapp@below}{}{\mk@w{ \mk@i\space "below": "\natoapp@below", }}
+ \mk@w{ \mk@i\space "end": 0}
+ \mk@w{ \mk@i \@rbchar}
+}
+% \end{macrocode}
+% \iffalse
+%</exportcls>
+%\fi
+%
diff --git a/macros/latex/contrib/wargame/source/utils/export.py b/macros/latex/contrib/wargame/source/utils/export.py
new file mode 100755
index 0000000000..b60cbb0fc5
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/utils/export.py
@@ -0,0 +1,3562 @@
+#!/usr/bin/env python
+#
+from pprint import pprint
+
+# ====================================================================
+def add_pws(opw=None,upw=None):
+ '''Add password options to the poppler commands
+
+ Parameters
+ ----------
+ opw : str
+ Owner password
+ upw : str
+ User password
+
+ Returns
+ -------
+ opts : list
+ List of arguments
+ '''
+ args = []
+ if upw is not None:
+ args.extend(['-upw',upw])
+
+ if opw is not None:
+ args.extend(['-opw',opw])
+
+ return args
+
+# --------------------------------------------------------------------
+def create_proc(args):
+ '''Create a process
+
+ Parameters
+ ----------
+ args : list
+ List of commmand line arguments
+
+ Returns
+ -------
+ proc : subprocess.Process
+ Process handle
+ '''
+ from os import environ
+ from subprocess import Popen, PIPE, TimeoutExpired
+
+ return Popen(args,env=environ.copy(),stdout=PIPE,stderr=PIPE)
+
+# --------------------------------------------------------------------
+def get_pdf_info(pdfname='export.pdf',upw=None,opw=None,timeout=None):
+ '''Get dictionary of PDF information
+
+ Parameters
+ ----------
+ pdfname : str
+ File name
+ opw : str
+ Owner password
+ upw : str
+ User password
+ timeout : int
+ Timeout in seconds or None
+
+ Returns
+ -------
+ info : dict
+ PDF information
+ '''
+ from subprocess import TimeoutExpired
+
+ args = ['pdfinfo', pdfname]
+ args.extend(add_pws(opw=opw,upw=upw))
+
+ proc = create_proc(args)
+
+ try:
+ out, err = proc.communicate(timeout=timeout)
+ except Exception as e:
+ proc.kill()
+ proc.communicate()
+ raise RuntimeError(f'Failed to get PDF info: {e}')
+
+ d = {}
+ for field in out.decode("utf8", "ignore").split("\n"):
+ sf = field.split(":")
+ key, value = sf[0], ":".join(sf[1:])
+ if key != "":
+ d[key] = (int(value.strip()) if key == 'Pages' else value.strip())
+
+ if "Pages" not in d:
+ raise ValueError
+
+ return d
+
+# --------------------------------------------------------------------
+def get_images_info(infofile):
+ '''Read in image information from file
+
+ Parameters
+ ----------
+ infofile : str
+ file name
+
+ Returns
+ -------
+ images : list
+ List of image information
+ '''
+ #from csv import DictReader
+ from json import load
+
+ with open(infofile,'r') as file:
+ info = load(file)
+ #reader = DictReader(file,fieldnames=['page','name','type','sub type'])
+ #return [l for l in reader]
+
+ return info
+
+
+# --------------------------------------------------------------------
+def convert_page(pdfname,page,opw=None,upw=None,timeout=None):
+ '''Convert a single PDF page to an image
+
+ Parameters
+ ----------
+ pdfname : str
+ File name
+ page : int
+ Page number
+ opw : str
+ Owner password
+ upw : str
+ User password
+ timeout : int
+ Timeout in seconds or None
+
+ Returns
+ -------
+ img : bytes
+ The bytes of the image
+ '''
+ args = ['pdftocairo',
+ '-singlefile',
+ '-f', str(page),
+ '-l', str(page),
+ '-png']
+ args.extend(add_pws(opw=opw,upw=upw))
+ args.append(pdfname)
+ args.append('-')
+
+ proc = create_proc(args)
+
+ try:
+ out, err = proc.communicate(timeout=timeout)
+ except Exception as e:
+ proc.kill()
+ proc.communicate()
+ raise RuntimeError(f'Failed to convert page {page} of {pdfname}: {e}')
+
+ from io import BytesIO
+ from PIL import Image
+
+ img = out #Image.open(BytesIO(out))
+
+ return img
+
+# --------------------------------------------------------------------
+def ignore_entry(entry):
+ return entry['category'] in ['<<dummy>>','<<eol>>']
+
+# --------------------------------------------------------------------
+def convert_pages(pdfname,infoname,
+ opw=None,upw=None,timeout=None):
+ '''Convert pages in a PDF to images
+
+ This creates a list of dictionaries with the image name and data
+ (as bytes)
+
+ Parameters
+ ----------
+ pdfname : str
+ File name of PDF to read images from
+ infoname : str
+ File name of CSV to read image info from
+ opw : str
+ Owner password
+ upw : str
+ User password
+ timeout : int
+ Timeout in seconds or None
+
+ Returns
+ -------
+ imgs : list
+ List of images as dicts, info and the bytes of the images
+ '''
+
+ oargs = {'opw':opw,'upw':upw,'timeout':timeout}
+ docinfo = get_pdf_info(pdfname,**oargs)
+ info = get_images_info(infoname)
+
+ if len(info)-1 != docinfo['Pages']:
+ raise RuntimeError(f'Number of pages in {pdfname} '
+ f'({docinfo["Pages"]}) not {len(info)-1}')
+
+ for i in info:
+ if ignore_entry(i): continue
+ i['img'] = convert_page(pdfname,i['number'],**oargs)
+
+ return info
+
+# ====================================================================
+def remove_and_get(zipfname,*filenames):
+ '''Open zip file, and make a copy of it without the files listed
+ in entries. Return the data of files listed in entry.'''
+ from tempfile import mkdtemp
+ from zipfile import ZipFile
+ from shutil import move, rmtree
+ from os import path
+
+ tempdir = mkdtemp()
+ ret = {}
+ try:
+ tempname = path.join(tempdir, 'new.zip')
+ with ZipFile(zipfname, 'r') as zipread:
+
+ with ZipFile(tempname, 'w') as zipwrite:
+
+ for item in zipread.infolist():
+ data = zipread.read(item.filename)
+
+ if item.filename not in filenames:
+ zipwrite.writestr(item, data)
+ else:
+ ret[item.filename] = data
+
+ move(tempname, zipfname)
+ finally:
+ rmtree(tempdir)
+
+ return ret
+
+# --------------------------------------------------------------------
+def add_back(zipfname,files):
+ '''Open a zip file for appending and add data in files
+
+ Files is a dictionary of filenames mapping to file content,
+ as returned by remove_and_get
+ '''
+ from zipfile import ZipFile
+
+ with ZipFile(zipfname, 'a') as zipadd:
+ for filename,data in files.items():
+ zipadd.writestr(filename,data)
+
+# ====================================================================
+# Contants used for tag names
+BUILD = 'VASSAL.build.'
+MODULE = BUILD + 'module.'
+WIDGET = BUILD + 'widget.'
+MAP = MODULE + 'map.'
+PICKER = MAP + 'boardPicker.'
+
+# ====================================================================
+def get_asdict(elem,tag,key,enable=True):
+ cont = elem.getElementsByTagName(tag)
+ if not enable:
+ return cont
+
+ return {e.getAttribute(key): e for e in cont}
+
+# --------------------------------------------------------------------
+def get_asone(elem,tag,enable=True):
+ cont = elem.getElementsByTagName(tag)
+ if enable and len(cont) != 1:
+ return None
+ return cont
+
+# --------------------------------------------------------------------
+def get_doc(string):
+ from xml.dom.minidom import parseString
+
+ return parseString(string)
+
+# --------------------------------------------------------------------
+def get_game(doc):
+ return doc.getElementsByTagName('VASSAL.build.GameModule')[0]
+
+# --------------------------------------------------------------------
+def get_documentation(doc,one=True):
+ return get_asone(doc,MODULE+'Documentation',one)
+
+# --------------------------------------------------------------------
+def get_helpfiles(doc,key='fileName',asdict=True):
+ return get_asdict(doc,MODULE+'documentation.HelpFile',key,asdict)
+
+# --------------------------------------------------------------------
+def get_inventories(doc,key='name',asdict=False):
+ return get_asdict(doc,MODULE+'Inventory',key,asdict)
+
+# --------------------------------------------------------------------
+def get_maps(doc,asdict=True):
+ return get_asdict(doc,MODULE+'Map','mapName',asdict)
+
+# --------------------------------------------------------------------
+def get_widgetmap(doc,asdict=True):
+ return get_asdict(doc,WIDGET+'WidgetMap','mapName',asdict)
+
+# --------------------------------------------------------------------
+def get_chartwindows(doc,asdict=True):
+ return get_asdict(doc,MODULE+'ChartWindow','name',asdict)
+
+# --------------------------------------------------------------------
+def get_map(doc,name):
+ maps = get_maps(doc,True)
+ return maps.get(name, None) if maps else None
+
+# --------------------------------------------------------------------
+def get_boards(doc,asdict=True):
+ return get_asdict(doc,PICKER+'Board','name',asdict)
+
+# --------------------------------------------------------------------
+def get_zoned(doc,one=True):
+ return get_asone(doc,PICKER+'board.ZonedGrid',one)
+
+# --------------------------------------------------------------------
+def get_zone(doc,asdict=True):
+ return get_asdict(doc,PICKER+'board.mapgrid.Zone','name',asdict)
+
+# --------------------------------------------------------------------
+def get_hexgrid(doc,one=True):
+ return get_asone(doc,PICKER+'board.HexGrid',one)
+
+# --------------------------------------------------------------------
+def get_squaregrid(doc,one=True):
+ return get_asone(doc,PICKER+'board.SquareGrid',one)
+
+# --------------------------------------------------------------------
+def get_regiongrid(doc,one=True):
+ return get_asone(doc,PICKER+'board.RegionGrid',one)
+
+# --------------------------------------------------------------------
+def get_hexnumbering(doc,one=True):
+ return get_asone(doc,PICKER+'board.mapgrid.HexGridNumbering',one)
+
+# --------------------------------------------------------------------
+def get_regions(doc,asdict=True):
+ return get_asdict(doc,PICKER+'board.Region', 'name', asdict)
+
+# --------------------------------------------------------------------
+def get_squarenumbering(doc,one=True):
+ return get_asone(doc,PICKER+'board.mapgrid.SquareGridNumbering', one)
+
+# --------------------------------------------------------------------
+def get_pieces(doc,asdict=True):
+ return get_asdict(doc,WIDGET+'PieceSlot','entryName',asdict)
+
+# --------------------------------------------------------------------
+def get_prototypes(doc,asdict=True):
+ return get_asdict(doc,MODULE+'PrototypeDefinition', 'name',asdict)
+
+# --------------------------------------------------------------------
+def get_masskey(map,asdict=True):
+ return get_asdict(map,MAP+'MassKeyCommand','name', asdict)
+
+# --------------------------------------------------------------------
+def get_masskey(map,asdict=True):
+ return get_asdict(map,MAP+'MassKeyCommand','name', asdict)
+
+
+# --------------------------------------------------------------------
+def get_piece_parts(code):
+ '''Takes the code part of a pieceslot (the text node) and decodes
+ it into traits.
+
+ One can use this to modify the pieces. One could for example
+ remove a trait by calling this function, and remove the element
+ corresponding to the trait from the returned list. Then one must
+ collect up the definitions and states separately and pass each of
+ them to `enc_parts', which gives us two strings that can be passed
+ to `add_piece' (or `add_proto') function to get the new text node
+ content of the piece slot or prototype definition. For example
+
+ piece = get_pieceslots(root,pieces)['foo']
+ code = piece.childNodes[0].nodeValue
+ traits = get_piece_parts(code)
+ ... # Modify the list
+
+ # Separate out definitions and states
+ defs = [enc_def(e['def']) for e in traits]
+ states = [enc_def(e['state']) for e in traits]
+
+ # Encode definitions and states as a single string, and then form body
+ def = enc_parts(*defs)
+ state = enc_parts(*states)
+ body = add_piece(def,state)
+
+ # Set new definition
+ piece.childNodes[0].nodeValue = body
+
+ See also dicts_to_piece
+
+ Parameters
+ ----------
+ code : str
+ Text node content of <PieceSlot> or <PrototypeDefinition> tags
+
+ Returns
+ -------
+ traits : list of dict
+ All the traits in a list. Each element of the list is a
+ dictionary with the keys 'def' and 'status'.
+
+ The key 'def' points to a list of the trait attributes used to
+ define the trait type. The first element of the 'def' list is
+ the trait identifier. The rest are the arguments for that
+ trait type. Note, all fields are encoded as strings.
+
+ The key 'status' encodes the status of the trait. The format
+ of this depends on the trait.Note, all fields are encoded as
+ strings.
+
+ '''
+ cmd,iden,typ,sta = code.split('/')
+ defs = typ.split(r' ')
+ stas = sta.split(r' ')
+ defs = [d.rstrip("\\").split(';') for d in defs]
+ stas = [s.rstrip("\\").split(';') for s in stas]
+ ret = [{'def': d, 'state': s} for d,s in zip(defs,stas)]
+ return ret
+
+# --------------------------------------------------------------------
+def dicts_to_piece(traits):
+ # Separate out definitions and states
+ defs = [enc_def(e['def']) for e in traits]
+ states = [enc_def(e['state']) for e in traits]
+
+ # Encode definitions and states as a single string, and then form body
+ df = enc_parts(*defs)
+ state = enc_parts(*states)
+ body = add_piece(df,state)
+
+ return body
+
+
+# ====================================================================
+# Key encoding
+CTRL = 130
+ALT = 520
+def key(let,mod=CTRL):
+
+ '''Encode a key sequence
+
+ Parameters
+ ----------
+ let : str
+ Key code (Letter)
+ mod : int
+ Modifier mask
+ '''
+ return f'{ord(let)},{mod}'
+# Colour encoding
+def rgb(r,g,b):
+ return ','.join([str(r),str(g),str(b)])
+
+def rgba(r,g,b,a):
+ return ','.join([str(r),str(g),str(b),str(a)])
+
+
+# --------------------------------------------------------------------
+def set_node_attr(node,**attr):
+ for k,v in attr.items():
+ node.setAttribute(k,str(v).lower() if isinstance(v,bool) else str(v))
+
+# --------------------------------------------------------------------
+def add_node(root,parent,tag,**attr):
+ e = root.createElement(tag)
+ if parent: parent.appendChild(e)
+ set_node_attr(e,**attr)
+
+ return e
+
+
+# --------------------------------------------------------------------
+def add_text(root,parent,text):
+ t = root.createTextNode(text)
+ parent.appendChild(t)
+ return t
+
+# --------------------------------------------------------------------
+def add_game(root,doc,
+ name,
+ version,
+ ModuleOther1 = "",
+ ModuleOther2 = "",
+ VassalVersion = "3.6.7",
+ description = "",
+ nextPieceSlotId = 0):
+ return add_node(root,doc,BUILD+'GameModule',
+ name = name,
+ version = version,
+ ModuleOther1 = ModuleOther1,
+ ModuleOther2 = ModuleOther2,
+ VassalVersion = VassalVersion,
+ description = description,
+ nextPieceSlotId = nextPieceSlotId)
+
+# --------------------------------------------------------------------
+def add_basiccommandencoder(root,doc):
+ return add_node(root,doc,MODULE+'BasicCommandEncoder')
+
+# --------------------------------------------------------------------
+def add_globalproperties(root,elem):
+ return add_node(root,elem,MODULE+'properties.GlobalProperties')
+
+# --------------------------------------------------------------------
+def add_translatable(root,elem):
+ return add_node(root,elem,MODULE+'properties.GlobalTranslatableMessages')
+
+# --------------------------------------------------------------------
+def add_language(root,elem):
+ return add_node(root,elem,'VASSAL.i18n.Language')
+
+# --------------------------------------------------------------------
+def add_chatter(root,elem):
+ return add_node(root,elem,MODULE+'Chatter')
+
+# --------------------------------------------------------------------
+def add_keynamer(root,elem):
+ return add_node(root,elem,MODULE+'KeyNamer')
+
+# --------------------------------------------------------------------
+def add_documentation(root,doc):
+ return add_node(root,doc,MODULE+'Documentation')
+
+# --------------------------------------------------------------------
+def add_about(root,doc,title,fileName=""):
+ return add_node(root,doc,MODULE+'documentation.AboutScreen',
+ fileName = fileName,
+ title = title)
+# --------------------------------------------------------------------
+def add_pdffile(root,doc,title,pdfFile):
+ return add_node(root,doc,MODULE+'documentation.BrowserPDFFile',
+ pdfFile = pdfFile, title=title)
+# --------------------------------------------------------------------
+def add_helpfile(root,doc,title,fileName,fileType="archive"):
+ return add_node(root,doc,MODULE+'documentation.HelpFile',
+ fileName = fileName,
+ fileType = fileType,
+ title = title)
+
+# --------------------------------------------------------------------
+def add_htmlfile(root,doc,title,startingPage='index.html'):
+ return add_node(root,doc,MODULE+'documentation.BrowserHelpFile',
+ startingPage=startingPage,
+ title=title)
+
+# --------------------------------------------------------------------
+def add_roster(root,doc,buttonKeyStroke='',
+ buttonText='Retire',
+ buttonToolTip='Switch sides, become observer, or release faction'):
+ return add_node(root,doc,MODULE+'PlayerRoster',
+ buttonKeyStroke = buttonKeyStroke,
+ buttonText = buttonText,
+ buttonToolTip = buttonToolTip)
+
+# --------------------------------------------------------------------
+def add_entry(root,doc,text):
+ n = add_node(root,doc,'entry')
+ add_text(root,n,text)
+ return n
+
+# --------------------------------------------------------------------
+def add_globaloptions(root,doc,
+ autoReport = "Use Preferences Setting",
+ centerOnMove = "Use Preferences Setting",
+ chatterHTMLSupport = "Always",
+ hotKeysOnClosedWindows = "Never",
+ inventoryForAll = "Always",
+ nonOwnerUnmaskable = "Use Preferences Setting",
+ playerIdFormat = "$playerName$",
+ promptString = "Opponents can unmask pieces",
+ sendToLocationMoveTrails = "Never"):
+ return add_node(root,doc,MODULE+'GlobalOptions',
+ autoReport = autoReport,
+ centerOnMove = centerOnMove,
+ chatterHTMLSupport = chatterHTMLSupport,
+ hotKeysOnClosedWindows = hotKeysOnClosedWindows,
+ inventoryForAll = inventoryForAll,
+ nonOwnerUnmaskable = nonOwnerUnmaskable,
+ playerIdFormat = playerIdFormat,
+ promptString = promptString,
+ sendToLocationMoveTrails = sendToLocationMoveTrails)
+
+# --------------------------------------------------------------------
+def add_option(root,doc,name,value):
+ n = add_node(root,doc,'option',name=name)
+ add_text(n,root,value)
+ return n
+
+# --------------------------------------------------------------------
+# CurrentMap == &quot;Board&quot;
+def add_inventory(root,doc,
+ canDisable = False,
+ centerOnPiece = True,
+ disabledIcon = '',
+ drawPieces = True,
+ foldersOnly = False,
+ forwardKeystroke = True,
+ groupBy = '',
+ hotkey = key('I'),
+ icon = '/images/inventory.gif',
+ include = '{}',
+ launchFunction = 'functionHide',
+ leafFormat = '$PieceName$',
+ name = '',
+ nonLeafFormat = '$PropertyValue$',
+ pieceZoom = '0.33',
+ pieceZoom2 = '0.5',
+ pieceZoom3 = '0.6',
+ propertyGate = '',
+ refreshHotkey = key('I',195),
+ showMenu = True,
+ sides = '',
+ sortFormat = '$PieceName$',
+ sortPieces = True,
+ sorting = 'alpha',
+ text = '',
+ tooltip = 'Show inventory of all pieces',
+ zoomOn = False):
+ return add_node(root,doc,MODULE+'Inventory',
+ canDisable = canDisable,
+ centerOnPiece = centerOnPiece,
+ disabledIcon = disabledIcon,
+ drawPieces = drawPieces,
+ foldersOnly = foldersOnly,
+ forwardKeystroke = forwardKeystroke,
+ groupBy = groupBy,
+ hotkey = hotkey,
+ icon = icon,
+ include = include,
+ launchFunction = launchFunction,
+ leafFormat = leafFormat,
+ name = name,
+ nonLeafFormat = nonLeafFormat,
+ pieceZoom = pieceZoom,
+ pieceZoom2 = pieceZoom2,
+ pieceZoom3 = pieceZoom3,
+ propertyGate = propertyGate,
+ refreshHotkey = refreshHotkey,
+ showMenu = showMenu,
+ sides = sides,
+ sortFormat = sortFormat,
+ sortPieces = sortPieces,
+ sorting = sorting,
+ text = text,
+ tooltip = tooltip,
+ zoomOn = zoomOn)
+
+
+
+# --------------------------------------------------------------------
+def add_map(root,doc,
+ mapName,
+ allowMultiple = 'false',
+ backgroundcolor = rgb(255,255,255),
+ buttonName = '',
+ changeFormat = '$message$',
+ color = rgb(0,0,0),
+ createFormat = '$pieceName$ created in $location$ *',
+ edgeHeight = '0',
+ edgeWidth = '0',
+ hideKey = '',
+ hotkey = key('M',ALT),
+ icon = '/images/map.gif',
+ launch = 'false',
+ markMoved = 'Always',
+ markUnmovedHotkey = '',
+ markUnmovedIcon = '/images/unmoved.gif',
+ markUnmovedReport = '',
+ markUnmovedText = '',
+ markUnmovedTooltip = 'Mark all pieces on this map as not moved',
+ moveKey = '',
+ moveToFormat = '$pieceName$ moves $previousLocation$ &amp;rarr; $location$ *',
+ moveWithinFormat = '$pieceName$ moves $previousLocation$ &amp;rarr; $location$ *',
+ showKey = '',
+ thickness = '3',
+ cls = MODULE+'Map'):
+ return add_node(root,doc,cls,
+ allowMultiple = allowMultiple,
+ backgroundcolor = backgroundcolor,
+ buttonName = buttonName,
+ changeFormat = changeFormat,
+ color = color,
+ createFormat = createFormat,
+ edgeHeight = edgeHeight,
+ edgeWidth = edgeWidth,
+ hideKey = hideKey,
+ hotkey = hotkey,
+ icon = icon,
+ launch = launch,
+ mapName = mapName,
+ markMoved = markMoved,
+ markUnmovedHotkey = markUnmovedHotkey,
+ markUnmovedIcon = markUnmovedIcon,
+ markUnmovedReport = markUnmovedReport,
+ markUnmovedText = markUnmovedText,
+ markUnmovedTooltip = markUnmovedTooltip,
+ moveKey = moveKey,
+ moveToFormat = moveToFormat,
+ moveWithinFormat = moveWithinFormat,
+ showKey = showKey,
+ thickness = thickness)
+
+# --------------------------------------------------------------------
+def add_widgetmap(root,doc, mapName,**attr):
+ return add_map(root,doc,mapName,cls=WIDGET+'WidgetMap',**attr)
+
+# --------------------------------------------------------------------
+def add_boardpicker(root,doc,
+ addColumnText = 'Add column',
+ addRowText = 'Add row',
+ boardPrompt = 'Select board',
+ slotHeight = 125,
+ slotScale = 0.2,
+ slotWidth = 350,
+ title = 'Choose Boards'):
+ return add_node(root,doc,MAP+'BoardPicker',
+ addColumnText = addColumnText,
+ addRowText = addRowText,
+ boardPrompt = boardPrompt,
+ slotHeight = slotHeight,
+ slotScale = slotScale,
+ slotWidth = slotWidth,
+ title = title)
+
+# --------------------------------------------------------------------
+def add_setup(root,picker,mapName,maxColumns,boardNames):
+ '''Add given boards in row-first up to maxColumns per row'''
+ s = add_node(root,picker,'setup')
+ col = 0
+ row = 0
+ lst = [f'{mapName}BoardPicker']
+ for bn in boardNames:
+ lst.extend([bn,str(col),str(row)])
+ col += 1
+ if col >= maxColumns:
+ col = 0
+ row += 1
+ txt = r' '.join(lst)
+ add_text(root,s,txt)
+
+# --------------------------------------------------------------------
+def add_board(root,picker,name,
+ image = '',
+ reversible = False,
+ color = rgb(255,255,255),
+ width = 0,
+ height = 0):
+ return add_node(root,picker,PICKER+'Board',
+ image = image,
+ name = name,
+ reversible = reversible,
+ color = color,
+ width = width,
+ height = height)
+
+# --------------------------------------------------------------------
+def add_zoned(root,board):
+ return add_node(root,board,PICKER+'board.ZonedGrid')
+
+# --------------------------------------------------------------------
+def add_zonehighlighter(root,zoned):
+ return add_node(root,zoned,PICKER+'board.mapgrid.ZonedGridHighlighter')
+
+# --------------------------------------------------------------------
+def add_zone(root,zoned,
+ name = "",
+ highlightProperty = "",
+ locationFormat = "$gridLocation$",
+ path = "0,0;976,0;976,976;0,976",
+ useHighlight = False,
+ useParentGrid = False):
+ return add_node(root,zoned,PICKER+'board.mapgrid.Zone',
+ name = name,
+ highlightProperty = highlightProperty,
+ locationFormat = locationFormat,
+ path = path,
+ useHighlight = useHighlight,
+ useParentGrid = useParentGrid)
+
+# --------------------------------------------------------------------
+HEX_WIDTH = 88.50779626676963
+HEX_HEIGHT = 102.2
+def add_hexgrid(root,zone,
+ color = rgb(0,0,0),
+ cornersLegal = False,
+ dotsVisible = False,
+ dx = HEX_WIDTH,
+ dy = HEX_HEIGHT,
+ edgesLegal = False,
+ sideways = False,
+ snapTo = True,
+ visible = True,
+ x0 = 0,
+ y0 = 32,
+ cls = PICKER+'board.HexGrid'):
+ return add_node(root,zone,cls,
+ color = color,
+ cornersLegal = cornersLegal,
+ dotsVisible = dotsVisible,
+ dx = dx,
+ dy = dy,
+ edgesLegal = edgesLegal,
+ sideways = sideways,
+ snapTo = snapTo,
+ visible = visible,
+ x0 = x0,
+ y0 = y0)
+
+# --------------------------------------------------------------------
+def add_hexnumbering(root,grid,
+ color = rgb(255,0,0),
+ first = 'H',
+ fontSize = 24,
+ hDescend = False,
+ hDrawOff = 0,
+ hLeading = 1,
+ hOff = 0,
+ hType = 'A',
+ locationFormat = '$gridLocation$',
+ rotateText = 0,
+ sep = '',
+ stagger = True,
+ vDescend = False,
+ vDrawOff = 32,
+ vLeading = 0,
+ vOff = 0,
+ vType = 'N',
+ visible = True,
+ cls = PICKER+'board.mapgrid.HexGridNumbering'):
+ return add_node(root,grid,cls,
+ color = color,
+ first = first,
+ fontSize = fontSize,
+ hDescend = hDescend,
+ hDrawOff = hDrawOff,
+ hLeading = hLeading,
+ hOff = hOff,
+ hType = hType,
+ locationFormat = locationFormat,
+ rotateText = rotateText,
+ sep = sep,
+ stagger = stagger,
+ vDescend = vDescend,
+ vDrawOff = vDrawOff,
+ vLeading = vLeading,
+ vOff = vOff,
+ vType = vType,
+ visible = visible)
+
+# --------------------------------------------------------------------
+RECT_WIDTH = 80
+RECT_HEIGHT = 80
+def add_squaregrid(root,zone,
+ dx = RECT_WIDTH,
+ dy = RECT_HEIGHT,
+ edgesLegal = False,
+ x0 = 0,
+ y0 = int(0.4*RECT_HEIGHT),
+ **attr):
+ return add_hexgrid(root,zone,cls=PICKER+'board.SquareGrid',
+ dx = dx,
+ dy = dy,
+ edgesLegal = edgesLegal,
+ x0 = x0,
+ y0 = y0,
+ **attr)
+
+# --------------------------------------------------------------------
+def add_squarenumbering(root,grid,
+ hType = 'N',
+ **attr):
+ return add_hexnumbering(root,grid,
+ cls=PICKER+'board.mapgrid.SquareGridNumbering',
+ hType = hType,
+ **attr)
+
+# --------------------------------------------------------------------
+def add_regiongrid(root,zone,snapto=True,fontsize=9,visible=True):
+ print(f'Make region grid visible: {visible}')
+ return add_node(root,zone,PICKER+'board.RegionGrid',
+ fontsize = fontsize,
+ snapto = snapto,
+ visble = visible)
+
+# --------------------------------------------------------------------
+def get_region_piece(root,grid,name,alsoPiece=True,piece=None,verbose=False):
+ if not alsoPiece:
+ return None, None
+
+ # Find the parent map element by stepping up the tree
+ from functools import reduce
+
+ map = reduce(lambda nn, _: None if nn is None else nn.parentNode,
+ range(5), grid)
+ if map is None or \
+ map.tagName not in [MODULE+'Map',WIDGET+'WidgetMap']:
+ if map is None:
+ print(f' = Map not found from grid')
+ return None, None
+
+ if piece is not None:
+ print(f' Using supplied piece')
+ return piece, map
+
+ # Find the piece by searching from the top of the tree
+ piece = get_pieces(root,root).get(name,None)
+ if piece is None:
+ print(list(get_pieces(root,root).keys()))
+ if verbose:
+ print(f' Possible piece for region {name}: {piece}')
+ return piece, map
+
+# --------------------------------------------------------------------
+def check_region_name(grid,name):
+ post = ''
+ targ = name
+ same = 0
+ regs = list(get_regions(grid).keys())
+ poss = len([e for e in regs if e.startswith(name)])
+ if poss == 0:
+ return name
+
+ return name + f' {poss}'
+ # Loop over keys, sorted
+ # regs.sort()
+ # for r in regs:
+ # if targ == r:
+ # same += 1
+ # targ = name + f' {same:02d}'
+ # print(f' Found region named {r} -> {targ}')
+
+ return targ
+
+# --------------------------------------------------------------------
+def add_region(root,grid,name,originx,originy,gpid,
+ alsoPiece=True,piece=None,verbose=True):
+ # First thing is to check if we have a piece
+ piece, map = get_region_piece(root,grid,name,alsoPiece,piece,verbose)
+ if verbose:
+ print(f' Region {name} -> piece {piece}')
+
+
+ nam = check_region_name(grid,name)
+ if verbose:
+ print(f' Region {name} -> real name {nam}')
+ n = add_node(root,grid,PICKER+'board.Region',
+ name = nam,
+ originx = originx,
+ originy = originy)
+ if piece is None:
+ return n, gpid
+
+ if verbose:
+ print(f' Add piece {name} to region')
+ _, gpid = add_atstart(root,map,name,piece,
+ location = name,
+ useGridLocation = True,
+ owningBoard = map.getAttribute('mapName'),
+ x = 0,
+ y = 0,
+ gpid = gpid)
+ return n, gpid
+
+
+# --------------------------------------------------------------------
+def add_stacking(root,map,
+ bottom = '40,0',
+ disabled = False,
+ down = '37,0',
+ exSepX = 6,
+ exSepY = 18,
+ top = '38,0',
+ unexSepX = 8,
+ unexSepY = 16,
+ up = '39,0'):
+ return add_node(root,map,MAP+'StackMetrics',
+ bottom = bottom,
+ disabled = disabled,
+ down = down,
+ exSepX = exSepX,
+ exSepY = exSepY,
+ top = top,
+ unexSepX = unexSepX,
+ unexSepY = unexSepY,
+ up = up)
+
+# --------------------------------------------------------------------
+def add_camera(root,map,
+ buttonText = '',
+ canDisable = False,
+ hotkey = '',
+ icon = '/images/camera.gif',
+ propertyGate = '',
+ tooltip = 'Save map as PNG image'):
+ return add_node(root,map,MAP+'ImageSaver',
+ buttonText = buttonText,
+ canDisable = canDisable,
+ hotkey = hotkey,
+ icon = icon,
+ propertyGate = propertyGate,
+ tooltip = tooltip)
+
+# --------------------------------------------------------------------
+def add_forwardtochatter(root,map):
+ return add_node(root,map,MAP+'ForwardToChatter')
+
+# --------------------------------------------------------------------
+def add_menudisplayer(root,map):
+ return add_node(root,map,MAP+'MenuDisplayer')
+
+# --------------------------------------------------------------------
+def add_mapcenterer(root,map):
+ return add_node(root,map,MAP+'MapCenterer')
+
+# --------------------------------------------------------------------
+def add_stackexpander(root,map):
+ return add_node(root,map,MAP+'StackExpander')
+
+# --------------------------------------------------------------------
+def add_piecemover(root,map):
+ return add_node(root,map,MAP+'PieceMover')
+
+# --------------------------------------------------------------------
+def add_selectionhighlighters(root,map):
+ return add_node(root,map,MAP+'SelectionHighlighters')
+
+# --------------------------------------------------------------------
+def add_keybufferer(root,map):
+ return add_node(root,map,MAP+'KeyBufferer')
+
+# --------------------------------------------------------------------
+def add_highlightlastmoved(root,map,color=rgb(255,0,0),enabled=True,thickness=2):
+ return add_node(root,map,MAP+'HighlightLastMoved',
+ color=color,enabled=enabled,thickness=thickness)
+
+# --------------------------------------------------------------------
+def add_counterviewer(root,map,
+ borderWidth = 0,
+ centerAll = False,
+ centerText = False,
+ combineCounterSummary = False,
+ counterReportFormat = '',
+ delay = 700,
+ description = '',
+ display = 'from top-most layer only',
+ emptyHexReportForma = '$LocationName$',
+ enableHTML = True,
+ extraTextPadding = 0,
+ fgColor = rgb(0,0,0),
+ fontSize = 9,
+ graphicsZoom = 1.0,
+ hotkey = key('\n',0),
+ layerList = '',
+ minDisplayPieces = 2,
+ propertyFilter = '',
+ showDeck = False,
+ showDeckDepth = 1,
+ showDeckMasked = False,
+ showMoveSelectde = False,
+ showNoStack = False,
+ showNonMovable = False,
+ showOverlap = False,
+ showgraph = True,
+ showgraphsingle = False,
+ showtext = False,
+ showtextsingle = False,
+ stretchWidthSummary = False,
+ summaryReportFormat = '$LocationName$',
+ unrotatePieces = False,
+ version = 3,
+ verticalOffset = 0,
+ verticalTopText = 5,
+ zoomlevel = 1.0):
+ return add_node(root,map,MAP+'CounterDetailViewer',
+ borderWidth = borderWidth,
+ centerAll = centerAll,
+ centerText = centerText,
+ combineCounterSummary = combineCounterSummary,
+ counterReportFormat = counterReportFormat,
+ delay = delay,
+ description = description,
+ display = display,
+ emptyHexReportForma = emptyHexReportForma,
+ enableHTML = enableHTML,
+ extraTextPadding = extraTextPadding,
+ fgColor = fgColor,
+ fontSize = fontSize,
+ graphicsZoom = graphicsZoom,
+ hotkey = hotkey,
+ layerList = layerList,
+ minDisplayPieces = minDisplayPieces,
+ propertyFilter = propertyFilter,
+ showDeck = showDeck,
+ showDeckDepth = showDeckDepth,
+ showDeckMasked = showDeckMasked,
+ showMoveSelectde = showMoveSelectde,
+ showNoStack = showNoStack,
+ showNonMovable = showNonMovable,
+ showOverlap = showOverlap,
+ showgraph = showgraph,
+ showgraphsingle = showgraphsingle,
+ showtext = showtext,
+ showtextsingle = showtextsingle,
+ stretchWidthSummary = stretchWidthSummary,
+ summaryReportFormat = summaryReportFormat,
+ unrotatePieces = unrotatePieces,
+ version = version,
+ verticalOffset = verticalOffset,
+ verticalTopText = verticalTopText,
+ zoomlevel = zoomlevel)
+
+# --------------------------------------------------------------------
+def add_globalmap(root,map,
+ buttonText = '',
+ color = rgb(255,0,0),
+ hotkey = '79,195',
+ icon = '/images/overview.gif',
+ scale = 0.2,
+ tooltip = 'Show/Hide overview window'):
+ return add_node(root,map,MAP+'GlobalMap',
+ buttonText = buttonText,
+ color = color,
+ hotkey = hotkey,
+ icon = icon,
+ scale = scale,
+ tooltip = 'Show/Hide overview window')
+
+# --------------------------------------------------------------------
+def add_zoomer(root,map,
+ inButtonText = '',
+ inIconName = '/images/zoomIn.gif',
+ inTooltip = 'Zoom in',
+ outButtonText = '',
+ outIconName = '/images/zoomOut.gif',
+ outTooltip = 'Zoom out',
+ pickButtonText = '',
+ pickIconName = '/images/zoom.png',
+ pickTooltip = 'Select Zoom',
+ zoomInKey = '61,195',
+ zoomLevels = [0.2,0.25,0.333,0.4,0.5,0.555,0.625,0.75,1.0,1.25,1.6],
+ zoomOutKey = key('-'),
+ zoomPickKey = key('='),
+ zoomStart = 3):
+ '''Zoom start is counting from the back (with default zoom levels,
+ and zoom start, the default zoom is 1'''
+ lvls = ','.join([str(z) for z in zoomLevels])
+ return add_node(root,map,MAP+'Zoomer',
+ inButtonText = inButtonText,
+ inIconName = inIconName,
+ inTooltip = inTooltip,
+ outButtonText = outButtonText,
+ outIconName = outIconName,
+ outTooltip = outTooltip,
+ pickButtonText = pickButtonText,
+ pickIconName = pickIconName,
+ pickTooltip = pickTooltip,
+ zoomInKey = zoomInKey,
+ zoomLevels = lvls,
+ zoomOutKey = zoomOutKey,
+ zoomPickKey = zoomPickKey,
+ zoomStart = zoomStart)
+
+# --------------------------------------------------------------------
+def add_hidepieces(root,map,
+ buttonText = '',
+ hiddenIcon = '/images/globe_selected.gif',
+ hotkey = key('O'),
+ showingIcon = '/images/globe_unselected.gif',
+ tooltip = 'Hide all pieces on this map'):
+ return add_node(root,map,MAP+'HidePiecesButton',
+ buttonText = buttonText,
+ hiddenIcon = hiddenIcon,
+ hotkey = hotkey,
+ showingIcon = showingIcon,
+ tooltip = tooltip)
+# --------------------------------------------------------------------
+def add_masskey(root,map,
+ name,
+ buttonHotkey,
+ hotkey,
+ buttonText = '',
+ canDisable = False,
+ deckCount = '-1',
+ filter = '',
+ propertyGate = '',
+ reportFormat = '',
+ reportSingle = False,
+ singleMap = True,
+ target = 'MAP|false|MAP|||||0|0||true|Selected|true|EQUALS',
+ tooltip = '',
+ icon = ''):
+ '''Default targets are selected units'''
+ return add_node(root,map,MAP+'MassKeyCommand',
+ name = name,
+ buttonHotkey = buttonHotkey, # This hot key
+ hotkey = hotkey, # Target hot key
+ buttonText = buttonText,
+ canDisable = canDisable,
+ deckCount = deckCount,
+ filter = filter,
+ propertyGate = propertyGate,
+ reportFormat = reportFormat,
+ reportSingle = reportSingle,
+ singleMap = singleMap,
+ target = target,
+ tooltip = tooltip,
+ icon = icon)
+
+
+# --------------------------------------------------------------------
+def add_flare(root,map,
+ circleColor = rgb(255,0,0),
+ circleScale = True,
+ circleSize = 100,
+ flareKey = 'keyAlt',
+ flareName = 'Map Flare',
+ flarePulses = 6,
+ flarePulsesPerSec = 3,
+ reportFormat = ''):
+ return add_node(root,map,MAP+'Flare',
+ circleColor = circleColor,
+ circleScale = circleScale,
+ circleSize = circleSize,
+ flareKey = flareKey,
+ flareName = flareName,
+ flarePulses = flarePulses,
+ flarePulsesPerSec = flarePulsesPerSec,
+ reportFormat = '')
+
+# --------------------------------------------------------------------
+def add_atstart(root,map,name,*pieces,
+ location = '',
+ useGridLocation = True,
+ owningBoard = '',
+ x = 0,
+ y = 0,
+ gpid = None):
+ '''Pieces are existing PieceSlot elements'''
+ a = add_node(root,map,MODULE+'map.SetupStack',
+ name = name,
+ location = location,
+ owningBoard = owningBoard,
+ useGridLocation = useGridLocation,
+ x = x,
+ y = y)
+ # copy pieces here
+ for p in pieces:
+ c = p.cloneNode(True)
+ a.appendChild(c)
+ if gpid is not None:
+ # Update gpid in element
+ c.setAttribute('gpid',str(gpid))
+ # Update gpid in traits state
+ traits = get_piece_parts(p.childNodes[0].nodeValue)
+ for t in traits:
+ code = t['def']
+ stat = t['state']
+ if code[0] == 'piece':
+ stat[3] = gpid
+ # Put back the traits
+ c.childNodes[0].nodeValue = dicts_to_piece(traits)
+
+ gpid += 1
+
+ return a, gpid
+
+# --------------------------------------------------------------------
+def add_pieceslot(root,elem,
+ entryName,
+ gpid,
+ code,
+ height=72,
+ width=72,
+ icon = ''):
+ p = add_node(root,elem,WIDGET+'PieceSlot',
+ entryName = entryName,
+ gpid = gpid,
+ height = height,
+ width = width,
+ icon = icon)
+ add_text(root,p,code)
+ return p
+
+# --------------------------------------------------------------------
+def add_prototypes(root,elem,*defs):
+ '''Defs are existing definition elements'''
+ p = add_node(root,elem,MODULE+'PrototypesContainer')
+
+ for d in defs:
+ c = d.cloneNode(True)
+ p.appendChild(c)
+
+ return p
+
+# --------------------------------------------------------------------
+def add_prototype(root,elem,name,code,description=''):
+ d = add_node(root,elem,MODULE+'PrototypeDefinition',
+ name = name,
+ description = description)
+ add_text(root,d,code)
+
+# --------------------------------------------------------------------
+def add_piecewindow(root,elem,name,
+ defaultWidth = 0,
+ hidden = False,
+ hotkey = key('C',ALT),
+ scale = 1.,
+ text = '',
+ tooltip = 'Show/hide piece window',
+ icon = '/images/counter.gif'):
+ return add_node(root,elem,MODULE+'PieceWindow',
+ name = name,
+ defaultWidth = defaultWidth,
+ hidden = hidden,
+ hotkey = hotkey,
+ scale = scale,
+ text = text,
+ tooltip = tooltip,
+ icon = icon)
+
+# --------------------------------------------------------------------
+def add_tabs(root,elem,entryName):
+ return add_node(root,elem,WIDGET+'TabWidget',entryName=entryName)
+
+# --------------------------------------------------------------------
+def add_list(root,elem,
+ entryName,
+ height = 0,
+ width = 0,
+ scale = 1.,
+ divider = 100):
+ return add_node(root,elem,WIDGET+'ListWidget',
+ entryName = entryName,
+ height = height,
+ width = width,
+ scale = scale,
+ divider = divider)
+
+# --------------------------------------------------------------------
+def add_panel(root,elem,
+ entryName,
+ fixed = False,
+ nColumns = 1,
+ vert = False):
+ return add_node(root,elem,WIDGET+'PanelWidget',
+ entryName = entryName,
+ fixed = fixed,
+ nColumns = nColumns,
+ vert = vert)
+
+# --------------------------------------------------------------------
+def add_mapwidget(root,elem,entryName=''):
+ return add_node(root,elem,WIDGET+'MapWidget',entryName=entryName)
+
+# --------------------------------------------------------------------
+def add_chartwindow(root,elem,
+ name,
+ hotkey = key('A',ALT),
+ description = '',
+ text = '',
+ tooltip = 'Show/hide Charts',
+ icon = '/images/chart.gif'):
+ return add_node(root,elem,MODULE+'ChartWindow',
+ name = name,
+ hotkey = hotkey,
+ description = description,
+ text = text,
+ tooltip = tooltip,
+ icon = icon)
+
+# --------------------------------------------------------------------
+def add_chart(root,elem,
+ chartName,
+ fileName,
+ description = ''):
+ return add_node(root,elem,WIDGET+'Chart',
+ chartName = chartName,
+ description = description,
+ fileName = fileName)
+
+# --------------------------------------------------------------------
+def add_dice(root,elem,
+ addToTotal = 0,
+ canDisable = False,
+ hotkey = key('6',ALT),
+ icon = '/images/die.gif',
+ keepCount = 1,
+ keepDice = False,
+ keepOption = '&gt;',
+ lockAdd = False,
+ lockDice = False,
+ lockPlus = False,
+ lockSides = False,
+ nDice = 1,
+ nSides = 6,
+ name = '1d6',
+ plus = 0,
+ prompt = False,
+ propertyGate = '',
+ reportFormat = '** $name$ = $result$ *** &amp;lt;$PlayerName$&amp;gt;',
+ reportTotal = False,
+ sortDice = False,
+ text = '1d6',
+ tooltip = 'Roll a 1d6'):
+ return add_node(root,elem,MODULE+'DiceButton',
+ addToTotal = addToTotal,
+ canDisable = canDisable,
+ hotkey = hotkey,
+ icon = icon,
+ keepCount = keepCount,
+ keepDice = keepDice,
+ keepOption = keepOption,
+ lockAdd = lockAdd,
+ lockDice = lockDice,
+ lockPlus = lockPlus,
+ lockSides = lockSides,
+ nDice = nDice,
+ nSides = nSides,
+ name = name,
+ plus = plus,
+ prompt = prompt,
+ propertyGate = propertyGate,
+ reportFormat = reportFormat,
+ reportTotal = reportTotal,
+ sortDice = sortDice,
+ text = text,
+ tooltip = tooltip)
+
+# ====================================================================
+def enc_def(args,term=False):
+ '''Encode a piece (decorator) definition
+
+ Parameters
+ ----------
+ args : list
+ List of fields
+ term : bool
+ If true, add terminating ';'
+
+ Returns
+ -------
+ code : str
+ The encoded definition
+ '''
+ return ';'.join([str(e).lower() if isinstance(e,bool) else str(e)
+ for e in args])+(';' if term else '')
+
+# --------------------------------------------------------------------
+def layer_trait(images,
+ newNames = None,
+ activateName = 'Activate',
+ activateMask = CTRL,
+ activateChar = 'A',
+ increaseName = 'Increase',
+ increaseMask = CTRL,
+ increaseChar = '[',
+ decreaseName = '',
+ decreaseMask = CTRL,
+ decreaseChar = ']',
+ resetName = '',
+ resetKey = '',
+ resetLevel = 1,
+ under = False,
+ underXoff = 0,
+ underYoff = 0,
+ loop = True,
+ name = '',
+ description = '',
+ randomKey = '',
+ randomName = '',
+ follow = False,
+ expression = '',
+ first = 1,
+ version = 1, # 1:new, 0:old
+ always = 'true',
+ activateKey = key('A'),
+ increaseKey = key('['),
+ decreaseKey = key(']'),
+ scale = 1.):
+ '''Create a layer trait (VASSAL.counter.Embellishment)
+
+ Parameters
+ ----------
+ main : dict
+ Main image dictionary
+ flipped : dict
+ Flipped image dictionary
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state
+ '''
+ if newNames is None:
+ newNames = ['']*len(images)
+ args = ['emb2', # Code
+ activateName, activateMask, activateChar, # ACTIVATE ; MASK ; KEY
+ increaseName, increaseMask, increaseChar,
+ decreaseName, decreaseMask, decreaseChar,
+ resetName, resetKey, resetLevel,
+ under, underXoff, underYoff,
+ ','.join(images),
+ ','.join(newNames),
+ loop,
+ name,
+ randomKey, randomName,
+ follow, expression,
+ first,
+ version,
+ always,
+ activateKey,
+ increaseKey,
+ decreaseKey,
+ description,
+ scale ]
+ stat = '1' # CURRENT LEVEL
+ return enc_def(args), stat
+
+# --------------------------------------------------------------------
+def prototype_trait(name):
+ '''Create a prototype trait (VASSAL.counter.UsePrototype)
+
+ Parameters
+ ----------
+ family : str
+ Side in game
+
+ Return
+ ------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ args = ['prototype', name ]
+ stat = '' # State is nothing
+ return enc_def(args), stat
+
+# --------------------------------------------------------------------
+def mark_trait(key,value):
+ '''Create a marker trait (VASSAL.counter.Marker)
+
+ Parameters
+ ----------
+ family : str
+ Side in game
+
+ Return
+ ------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ args = ['mark', key ]
+ stat = value # State is nothing
+ return enc_def(args), stat
+
+# --------------------------------------------------------------------
+def report_trait(*keys,
+ nosuppress = True,
+ description = '',
+ report = '$location$: $newPieceName$ $menuCommand$ *',
+ cyclekeys = '',
+ cyclereps = ''):
+ '''Create a report trait (VASSAL.counters.ReportActon)
+
+ Parameters
+ ----------
+ *keys : tuple of str
+ The keys to report actions for
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ esckeys = ','.join([k.replace(',',r'\,') for k in keys])
+ esccycl = ','.join([k.replace(',',r'\,') for k in cyclekeys])
+ escreps = ','.join([k.replace(',',r'\,') for k in cyclereps])
+ args = ['report', # CODE
+ esckeys, # ESCAPED KEYS (commas escaped)
+ report, # REPORT
+ esccycl, # CYCLE KEYS (commas escaped)
+ escreps, # CYCKE REPORTS (commas escaped)
+ description, # DESCRIPTION
+ nosuppress] # NOSUPPRESS
+ stat = '-1' # CYCLE STATE
+ return enc_def(args), stat
+
+# --------------------------------------------------------------------
+def moved_trait(image='moved.gif',
+ xoff = 36,
+ yoff = -38,
+ name = 'Mark Moved',
+ key = key('M')):
+ '''Create a moved trait (VASSAL.counters.MovementMarkable)
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ args = ['markmoved', # CODE
+ image, # IMAGE
+ xoff, yoff, # XOFF ; YOFF
+ name, # MENU
+ key, # KEY, MODIFIER
+ ''] # ?
+ stat = False # MOVED?
+ return enc_def(args), stat
+
+# --------------------------------------------------------------------
+def trail_trait(key = key('T'),
+ name = 'Movement Trail',
+ localVisible = False,
+ globalVisible = False,
+ radius = 10,
+ fillColor = rgb(255,255,255),
+ lineColor = rgb(0,0,0),
+ activeOpacity = 100,
+ inactiveOpacity = 50,
+ edgesBuffer = 20,
+ displayBuffer = 30,
+ lineWidth = 1,
+ turnOn = '',
+ turnOff = '',
+ reset = '',
+ description = ''):
+ ''' Create a movement trail trait ( VASSAL.counters.Footprint)
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state
+ '''
+ args = ['footprint', # CODE
+ key, # ENABLE KEY
+ name, # MENU
+ localVisible, # LOCAL VISABLE
+ globalVisible, # GLOBAL VISABLE
+ radius, # RADIUS
+ fillColor, # FILL COLOR
+ lineColor, # LINE COLOR
+ activeOpacity, # ACTIVE OPACITY
+ inactiveOpacity, # INACTIVE OPACITY
+ edgesBuffer, # EDGES BUFFER
+ displayBuffer, # DISPLAY BUFFER
+ lineWidth, # LINE WIDTH
+ turnOn, # TURN ON KEY
+ turnOff, # TURN OFF KEY
+ reset, # RESET KEY
+ description] # DESC
+ stat = [False, # GLOBAL VIS
+ '', # MAP
+ 0] # POINTS (followed by [; [X,Y]*]
+ return enc_def(args), enc_def(stat)
+
+# --------------------------------------------------------------------
+def delete_trait(name = 'Delete', key = key('D')):
+ '''Create a delete trait (VASSAL.counters.Delete)
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ args = ['delete', name, key, '']
+ stat = '' # Nothing
+ return enc_def(args), stat
+
+# --------------------------------------------------------------------
+def sendto_trait(mapName,
+ boardName,
+ name = 'Eliminate',
+ key = key('E'),
+ restoreName = 'Restore',
+ restoreKey = key('R'),
+ x = 200,
+ y = 200,
+ xidx = 0,
+ yidx = 0,
+ xoff = 1,
+ yoff = 1,
+ description = 'Eliminate this unit',
+ destination = 'L',
+ zone = '',
+ region = '',
+ expression = '',
+ position = ''):
+ '''Create a send to trait (VASSAL.counter.SendToLocation)
+
+ Parameters
+ ----------
+ side : str
+ Sub-map to move to
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ args = ['sendto', # CODE
+ name, # NAME
+ key, # KEY , MODIFIER
+ mapName, # MAP
+ boardName, # BOARD
+ x, y, # X ; Y
+ restoreName, # BACK
+ restoreKey, # KEY , MODIFIER
+ xidx, yidx, # XIDX ; YIDX
+ xoff, yoff, # XOFF ; YOFF
+ description, # DESC
+ destination, # DEST
+ zone, # ZONE
+ region, # REGION
+ expression, # EXPRESSION
+ position ] # GRIDPOS
+ stat = ['', # BACKMAP
+ '', # X
+ ''] # Y
+ return enc_def(args), enc_def(stat)
+
+# --------------------------------------------------------------------
+def basic_trait(name,
+ filename, # Can be empty
+ gpid, # Can be empty
+ cloneKey='', # Deprecated
+ deleteKey=''):# Deprecated
+ '''Create a basic unit (VASSAL.counters.BasicPiece)
+
+ Parameters
+ ----------
+ main : dict
+ Information
+ gpid : int
+ Piece global identifier
+ image : bool
+ If true, add image
+
+ Returns
+ -------
+ code : str
+ Encoded trait
+ stat : str
+ Encoded state (empty string)
+ '''
+ args = ['piece', # CODE
+ cloneKey, # CLONEKEY
+ deleteKey, # DELETEKEY
+ filename, # IMAGE
+ name] # NAME
+ stat = ['null', # MAPID (possibly 'null')
+ 0, # X
+ 0, # Y
+ gpid, # GLOBAL PIECE ID
+ 0] # PROPERTY COUNT (followed by [; KEY; VALUE]+)
+ return enc_def(args), enc_def(stat)
+
+# --------------------------------------------------------------------
+def enc_parts(*parts):
+ '''Encode parts of a full piece definition
+
+ Each trait (VASSAL.counter.Decorator, VASSAL.counter.BasicPiece)
+ definition or state is separated by a litteral TAB character.
+ Beyond the first TAB separator, additional escape characters
+ (BACKSLAH) are added in front of the separator. This is to that
+ VASSAL.utils.SequenceDecoder does not see consequitive TABs as a
+ single TAB.
+
+ Parameters
+ ----------
+ parts : tuple
+ The various trait definitions or states
+
+ Returns
+ -------
+ code : str
+ The encoded piece
+ '''
+ ret = ''
+ sep = r' '
+ for i, p in enumerate(parts):
+ if i != 0:
+ ret += '\\'*(i-1) + sep
+ ret += str(p)
+
+ return ret
+
+# --------------------------------------------------------------------
+def add_piece(typ, state):
+ '''Create and add piece command (VASSAL.command.AddPiece)
+
+ Each part is separated by a SLASH ('/'). The first part is the
+ command type (PLUS '+') to perform. Second is the IDENTIFIER,
+ possibly 'null'. Then comes the fully encoded type of the piece,
+ followed by the state of the piece (also fully encoded).
+
+ Parameters
+ ----------
+ typ : str
+ Encoded piece definition
+ state : str
+ Encoded state definition
+
+ Returns
+ -------
+ cmd : str
+ The add command encoded
+ '''
+ args = ['+', # Type
+ 'null', # IDENTIFER
+ typ, # DEFINITION
+ state] # STATE
+ return '/'.join(args)
+
+# --------------------------------------------------------------------
+def add_proto(typ,state):
+ '''Create an add prototype command. This is the same as 'add_piece'
+
+ Parameters
+ ----------
+ typ : str
+ Encoded piece definition
+ state : str
+ Encoded state definition
+
+ Returns
+ -------
+ cmd : str
+ The add command encoded
+ '''
+ return add_piece(typ,state)
+
+
+# ====================================================================
+#
+# Below specific to the export app
+#
+# ====================================================================
+def get_bb(buffer):
+ '''Get bounding box of image
+
+ Parameters
+ ----------
+ buffer : bytes
+ The image bytes
+
+ Returns
+ -------
+ ulx, uly, lrx, lry : tuple
+ The coordinates of the bounding box
+ '''
+ from PIL import Image
+ from io import BytesIO
+
+ with Image.open(BytesIO(buffer)) as img:
+ bb = img.getbbox()
+
+ return bb
+
+# ====================================================================
+def piece_body(family,main,flipped,gpid):
+ '''Create an full add piece command from the side, image, and ID
+ information. This adds (in reverse order)
+
+ - BasicPiece
+ - Side prototype
+ - Flip layer (if 'flipped' is not none)
+
+ Parameters
+ ----------
+ family : str
+ Side in the game
+ main : dict
+ Main image information
+ flipped : dict
+ Flipped image information, possibly None
+ gpid : int
+ Global piece identifier
+
+ Returns
+ -------
+ cmd : str
+ The command to add the piece
+ '''
+ # Create the layer, prototype, and basic piece traits
+ decs = []
+ if flipped is not None:
+ imgs = [ main['filename'], flipped['filename'] ]
+ decs.extend([ layer_trait(images=imgs,
+ newNames=['','Reduced +'],
+ activateName = '',
+ decreaseName = '',
+ increaseName = 'Flip',
+ increaseKey = key('F'),
+ decreaseKey = '',
+ name='Step'),
+ report_trait(key('F')) ])
+ for m in main.get('mains',[]):
+ decs.append(prototype_trait(m + ' prototype'))
+ ech = main.get('echelon',None)
+ cmd = main.get('command',None)
+ if ech is not None: decs.append(prototype_trait(ech + ' prototype'))
+ if cmd is not None: decs.append(prototype_trait(cmd + ' prototype'))
+
+ decs.extend([ prototype_trait(family+' prototype'),
+ basic_trait(main['name'], main['filename'],gpid)
+ ])
+
+ typs = [d[0] for d in decs]
+ stts = [d[1] for d in decs]
+ typ = enc_parts(*typs)
+ stt = enc_parts(*stts)
+
+ return add_piece(typ,stt)
+
+# --------------------------------------------------------------------
+def proto_body(family):
+ '''Create an full add prototype com from the side information.
+ This adds (in reverse order)
+
+ - An empty BasicPiece
+ - An eliminate (or sendto) trait
+ - A delete trait
+ - A mark moved trait
+ - A move trail trait
+
+ Parameters
+ ----------
+ family : str
+ Side in the game
+
+ Returns
+ -------
+ cmd : str
+ The command to add the piece
+ '''
+ # Dummy image
+ decs = [ report_trait(key('E'),key('R'),key('M')),
+ moved_trait(),
+ trail_trait(),
+ delete_trait(),
+ sendto_trait('DeadMap',family+' pool'),
+ mark_trait('Faction',family),
+ basic_trait('','','') ]
+ typs = [d[0] for d in decs]
+ stts = [d[1] for d in decs]
+ typ = enc_parts(*typs)
+ stt = enc_parts(*stts)
+
+ return add_proto(typ,stt)
+
+# --------------------------------------------------------------------
+def add_splash(root,doc,categories,title='',verbose=False):
+ '''Add an about page
+
+ Parametersg
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ doc : xml.dom.minidom.Element
+ The documentation element
+ categories : dict
+ Catalog of images
+ title : str
+ Title of the game
+ '''
+ fronts = categories.get('front',{}).get('all',[])
+ front = list(fronts.values())[0] if len(fronts) > 0 else None
+ if front is None:
+ return
+
+ if verbose:
+ print(f'Adding about page with {title}')
+
+ add_about(root,doc, f'About {title}', fileName = front['filename'])
+
+# --------------------------------------------------------------------
+def add_rules(root,doc,zipfile,rules,verbose=False):
+ '''Add rules to the module
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ doc : xml.dom.minidom.Element
+ The documentation element
+ zipfile : zipfile.ZipFile
+ The module archive
+ rules : str
+ File name of rules (PDF)
+ '''
+ if rules is None or rules == '':
+ return
+
+ if verbose:
+ print('Adding rules PDF to module')
+
+ zipfile.write(rules,'rules.pdf')
+
+ add_pdffile(root,doc,title='Show rules',pdfFile='rules.pdf')
+
+# --------------------------------------------------------------------
+def add_notes(root,doc,zipfile,title,version,sides,pdffile,infofile,rules,
+ verbose=False):
+ '''Add rules to the module
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ doc : xml.dom.minidom.Element
+ The documentation element
+ zipfile : zipfile.ZipFile
+ The module archive
+ sides : list
+ Sides in the game
+ pdffile : str
+ The images PDF
+ infofile : str
+ The images information
+ rules : str
+ File name of rules (PDF)
+ '''
+ factions = "".join([f'<li>{s}</li>' for s in sides])
+ notes = f'''
+ <html>
+ <body>
+ <h1>Draft VASSAL module of {title} (Version {version})</h1>
+ <p>
+ This is a draft VASSAL module of {title} generated from
+ </p>
+ <ul>
+ <li>images in {pdffile}, and</li>
+ <li>information in {infofile}</li>
+ </ul>
+ <p>
+ both generated by LaTeX using the <b>wargame</b> [1] package, and
+ processed by the Python script <code>export.py</code> from that
+ package.
+ </p>
+ <p>
+ The module is <i>not</i> complete and the developer should edit
+ the module as needed in the VASSAL module editor.
+ </p>
+ <p>
+ [1] <code>https://gitlab.com/wargames_tex/wargame_tex</code>
+ </p>
+ <h2>Content of the module</h2>
+ <p>
+ The <code>export.py</code> Python script has identified the
+ factions of the game to be
+ </p>
+ <ul>
+ '''+factions+f'''
+ </ul>
+ <p>
+ and generated prototype pieces for these (along with possible
+ non-faction pieces. The script also generated a map ("dead map")
+ that contains boards for each faction and is meant to store
+ eliminated units ("&lt;faction&gt; pool"). These pools have a
+ generic shape and colour, and the developer should take care to
+ correct these as needed.
+ </p>
+ <p>
+ Boards of the game present in the {pdffile} and {infofile} files
+ have been generated. Each board has a single zone in it that
+ encompasses the full board, and a hex grid is added to that
+ zone. The module developer should adjust the zone and embedded
+ hex grid according to the actual map, using the VASSAL module
+ editor. The hex grid (as well as coordinates) is drawn by
+ default so as to make this obvious to the developer. The hex
+ sizes should be correct, and mainly the offset needs to be
+ adjusted.
+ </p>
+ <p>
+ Images marked as OOBs have also been added as maps to the
+ module. These also have a single zone with a rectangular grid
+ imposed in it. This grid, and the grid coordinates are drawn by
+ default, so it is easier to see and to remember to adjust it. The
+ module developer should adjust this, possibly adding zones, so
+ that it matches up with the graphics. The developer can add
+ units to the OOB via 'At-start' stacks in the VASSAL editor.
+ </p>
+ <p>
+ All pieces identified by {infofile} and present in {pdffile} have
+ been generated. Double sided pieces (identified by images which
+ also has a suffix-"flipped" image) are created as such.
+ </p>
+ <p>
+ Charts identified by the {infofile} and {pdffile} have been added
+ to the module. The are added as separate (pop-up) frames, but
+ the module developer can change this in the VASSAL module editor.
+ </p>
+ <p>
+ If the {infofile} and {pdffile} identified a front page, then that
+ has been added to module as the splash screen.
+ </p>
+ <p>
+ If a PDF rules file ({rules}) was passed to the Python script,
+ then that has been included in the module and is accessible from
+ the "Help" menu.
+ </p>
+ <h2>Key-bindings</h2>
+ <p>
+ The following key bindings have been defined
+ </p>
+ <table>
+ <tr>
+ <td>Alt-A</td>
+ <td>Show the charts panel</td>
+ </tr>
+ <tr>
+ <td>Alt-B</td>
+ <td>Show the OOBs</td>
+ </tr>
+ <tr>
+ <td>Alt-C</td>
+ <td>Show the counters panel</td>
+ </tr>
+ <tr>
+ <td>Alt-E</td>
+ <td>Show the eliminated units</td>
+ </tr>
+ <tr>
+ <td>Alt-6</td>
+ <td>Roll the die</td>
+ </tr>
+ <tr>
+ <td>Ctrl-O</td>
+ <td>Hide/show counters</td>
+ </tr>
+ <tr>
+ <td>Ctrl-F</td>
+ <td>Flip selected counters</td>
+ </tr>
+ <tr>
+ <td>Ctrl-E</td>
+ <td>Eliminate selected counters</td>
+ </tr>
+ <tr>
+ <td>Ctrl-+</td>
+ <td>Zoom in</td>
+ </tr>
+ <tr>
+ <td>Ctrl--</td>
+ <td>Zoom out</td>
+ </tr>
+ <tr>
+ <td>Ctrl-=</td>
+ <td>Select zoom</td>
+ </tr>
+ <tr>
+ <td>Ctrl-Shift-O</td>
+ <td>Show overview map</td>
+ </tr>
+ </table>
+
+ Counter short cuts (may not work, right click and use context menu)
+ <table>
+ <tr>
+ <td>Ctrl-F</td>
+ <td>Flip counter</td>
+ </tr>
+ <tr>
+ <td>Ctrl-D</td>
+ <td>Delete counter</td>
+ </tr>
+ <tr>
+ <td>Ctrl-M</td>
+ <td>Toggle "moved" marker</td>
+ </tr>
+ <tr>
+ <td>Ctrl-T</td>
+ <td>Toggle move trail</td>
+ </tr>
+ <tr>
+ <td>Ctrl-E</td>
+ <td>Eliminate unit</td>
+ </tr>
+ <tr>
+ <td>Ctrl-R</td>
+ <td>Restore unit (from dead pool)</td>
+ </tr>
+ </table>
+ <h2>After finalising the module</h2>
+ <p>
+ After the developer has finalised the module (added more pieces,
+ fixed board zones a and grids, add in more commands), then this
+ Help menu entry should be deleted. You may want to keep key
+ bindings information in some help file.
+ </p>
+ </body>
+ </html>
+ '''
+ if version.lower() == 'draft':
+ if verbose:
+ print(f' Adding draft notes {version}')
+ zipfile.writestr('help/notes.html',notes)
+ add_helpfile(root,doc,title='Draft Module notes',
+ fileName='help/notes.html')
+
+ keys = f'''
+ <html>
+ <body>
+ <h1>{title} (Version {version}) Key bindings</h1>
+
+ <table>
+ <tr>
+ <th>Key </th>
+ <th>Where </th>
+ <th>Effect</th>
+ </tr>
+ <tr>
+ <td>Alt-A</td>
+ <td>-</td>
+ <td>Show the charts panel</td>
+ </tr>
+ <tr>
+ <td>Alt-B</td>
+ <td>-</td>
+ <td>Show the OOBs</td>
+ </tr>
+ <tr>
+ <td>Alt-C</td>
+ <td>-</td>
+ <td>Show the counters panel</td>
+ </tr>
+ <tr>
+ <td>Alt-E</td>
+ <td>-</td>
+ <td>Show the eliminated units</td>
+ </tr>
+ <tr>
+ <td>Alt-6</td>
+ <td>-</td>
+ <td>Roll the dice</td>
+ </tr>
+ <tr>
+ <td>Ctrl-O</td>
+ <td>Board</td>
+ <td>Hide/show counters</td>
+ </tr>
+ <tr>
+ <td>Ctrl-F</td>
+ <td>Board</td>
+ <td>Flip selected counters</td>
+ </tr>
+ <tr>
+ <td>Ctrl-E</td>
+ <td>Board</td>
+ <td>Eliminate selected counters</td>
+ </tr>
+ <tr>
+ <td>Ctrl-+</td>
+ <td>Board</td>
+ <td>Zoom in</td>
+ </tr>
+ <tr>
+ <td>Ctrl--</td>
+ <td>Board</td>
+ <td>Zoom out</td>
+ </tr>
+ <tr>
+ <td>Ctrl-=</td>
+ <td>Board</td>
+ <td>Select zoom</td>
+ </tr>
+ <tr>
+ <td>Ctrl-Shift-O</td>
+ <td>Board</td>
+ <td>Show overview map</td>
+ </tr>
+ <tr>
+ <td>Ctrl-F</td>
+ <td>Counter</td>
+ <td>Flip counter</td>
+ </tr>
+ <tr>
+ <td>Ctrl-D</td>
+ <td>Counter</td>
+ <td>Delete counter</td>
+ </tr>
+ <tr>
+ <td>Ctrl-M</td>
+ <td>Counter</td>
+ <td>Toggle "moved" marker</td>
+ </tr>
+ <tr>
+ <td>Ctrl-T</td>
+ <td>Counter</td>
+ <td>Toggle move trail</td>
+ </tr>
+ <tr>
+ <td>Ctrl-E</td>
+ <td>Counter</td>
+ <td>Eliminate unit</td>
+ </tr>
+ <tr>
+ <td>Ctrl-R</td>
+ <td>Counter</td>
+ <td>Restore unit (from dead pool)</td>
+ </tr>
+ </table>
+ <p>
+ Counter short cuts (may not work, right click and use context
+ menu)
+ </p>
+ </body>
+ </html>
+ '''
+ if verbose:
+ print(f'Add key bindings help file')
+ zipfile.writestr('help/keys.html',keys)
+ add_helpfile(root,doc,title='Key bindings',
+ fileName='help/keys.html')
+
+ return notes
+
+# --------------------------------------------------------------------
+def add_basics_to_map(root,map,**attr):
+ '''Add a map to the document
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ parent : xml.dom.minidom.Element
+ The parent element
+ button : str
+ Button text
+ name : str
+ Name of the map
+ stacking : bool
+ Whether to enable stacking
+
+ Returns
+ -------
+ map : xml.dom.minidom.Element
+ The map element
+ bpicker : xml.dom.minidom.Element
+ The board picker in map
+ '''
+ stacking = add_stacking(root,map)
+ add_camera (root,map)
+ add_forwardtochatter (root,map)
+ add_menudisplayer (root,map)
+ add_mapcenterer (root,map)
+ add_stackexpander (root,map)
+ add_piecemover (root,map)
+ add_keybufferer (root,map)
+ add_selectionhighlighters(root,map) # TBD
+ add_highlightlastmoved (root,map)
+
+ return stacking
+
+# --------------------------------------------------------------------
+def add_elim(root,game,sides,categories,verbose=False):
+ '''Add an eliminated map
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ game : xml.dom.minidom.Element
+ The parent element
+ sides : list of str
+ List of sides in the game
+ '''
+ if verbose:
+ print(' Adding eliminated map and boards')
+
+ if sides is None or len(sides) == 0:
+ return
+
+ map = add_map(root,game,'DeadMap',
+ buttonName = '', #'Eliminated units',
+ icon = '/images/playerAway.gif',
+ markMoved = 'Never',
+ launch = True,
+ allowMultiple = True,
+ hotkey=key('E',ALT))
+ bpicker = add_boardpicker(root,map,
+ slotHeight = 400,
+ slotWidth = 400)
+ add_setup(root,bpicker,'DeadMap',2,[s+' pool' for s in sides])
+ add_masskey(root,map,'Restore',
+ key('R'),
+ key('R'),
+ icon = '/images/Undo16.gif',
+ tooltip = "Restore selected units")
+
+ for i,s in enumerate(sides):
+ if verbose:
+ print(f' Adding {s} pool')
+
+ color = [0,0,0,64]
+ color[i % 3] = 255
+
+ w = 400
+ h = 400
+ c = ','.join([str(c) for c in color])
+ dimg = categories.get('pool',{}).get('all',{}).get(s,None)
+ img = ''
+
+ if dimg:
+ bb = get_bb(dimg['img'])
+ w = bb[2] - bb[0]
+ h = bb[3] - bb[1]
+ c = ''
+ img = dimg['filename']
+ if verbose:
+ print(f' Using image provided by the user: {img}')
+
+ add_board(root,bpicker,f'{s} pool',
+ image = img,
+ color = c,
+ width = w,
+ height = h)
+
+ add_basics_to_map(root,map)
+
+# --------------------------------------------------------------------
+def add_hex_grid(root,parent,color=rgb(255,0,0),visible=True,grid=True):
+ '''Add a hex grid, either to a zone or to the multizone container'''
+
+ hexes = add_hexgrid(root,parent,color=color,visible=visible,
+ edgesLegal=True)
+ if not grid:
+ return hexes
+
+ add_hexnumbering(root,hexes,
+ color = color,
+ hType = 'A',
+ hOff = -1,
+ vType = 'N',
+ vOff = -1,
+ visible = visible)
+
+ return hexes
+
+# --------------------------------------------------------------------
+def get_picture_info(picture,name,width,height,verbose):
+ '''
+ Returns
+ -------
+ hex_width, hex_height : float, float
+ Scale hex width
+ scx, scy : float, float, float, float
+ Scale to image and picture (x,y)
+ rot90 : bool
+ True if rotated +/-90 degrees
+ tran : callable
+ Translation function
+ '''
+ if picture is None:
+ print(f'WARNING: No Tikz picture information.'
+ f"Are you sure you used the `[zoned]' option for the "
+ f"tikzpicture environment of {name}?")
+ f = lambda x,y: (x,y)
+ return HEX_WIDTH,HEX_HEIGHT,1,1,False,f
+
+ # Get picture bounding box
+ pll = picture['lower left']
+ pur = picture['upper right']
+ # Get picture transformation
+ pa = picture['xx']
+ pb = picture['xy']
+ pc = picture['yx']
+ pd = picture['yy']
+ # Get picture offset (always 0,0?)
+ pdx = picture['dx']
+ pdy = picture['dy']
+ # Define picture global transformation
+ #pr = lambda x,y: (pa * x + pb * y, pc * x + pd * y)
+ pr = lambda x,y: (pa * x + pc * y, pb * x + pd * y)
+ # Globally transform (rotate) picture bounding box
+ pll = pr(*pll)
+ pur = pr(*pur)
+ # Calculate widht, height, and scaling factors
+ pw = pur[0] - pll[0]
+ ph = pur[1] - pll[1]
+ scw = width / pw
+ sch = height / ph
+ # Extract picture scales and rotation
+ # Courtesy of
+ # https://math.stackexchange.com/questions/13150/extracting-rotation-scale-values-from-2d-transformation-matrix
+ from math import sqrt, atan2, degrees, isclose
+ psx = sqrt(pa**2 + pb**2) # * (-1 if pa < 0 else 1)
+ psy = sqrt(pc**2 + pd**2) # * (-1 if pd < 0 else 1)
+ prt = degrees(atan2(pc,pd))
+ if not any([isclose(abs(prt),a) for a in [0,90,180,270]]):
+ raise RuntimeException('Rotations of Tikz pictures other than '
+ '0 or +/-90,+/- 180, or +/-270 not supported. '
+ 'found {prt}')
+ rot90 = isclose(abs(prt),90)
+ if any([isclose(prt,a) for a in [90,270,180,-180]]):
+ print(f'WARNING: rotations by {prt} not fully supported')
+
+ hex_width = psx * HEX_WIDTH
+ hex_height = psy * HEX_HEIGHT
+ if verbose:
+ print(f' Picture transformations: {pa},{pb},{pc},{pd}\n'
+ f' Scale (x,y): {psx},{psy}\n'
+ f' Rotation (degrees): {prt}')
+
+ # When translating the Tikz coordinates, it is important to note
+ # that the Tikz y-axis point upwards, while the picture y-axis
+ # point downwards. This means that the upper right corner is at
+ # (width,0) and the lower left corner is at (0,height).
+ def tranx(x,off=-pll[0]):
+ # print(f'x: {x} + {off} -> {x+off} -> {int(scw*(x+off))}')
+ return int(scw * (x + off)+.5)
+ def trany(y,off=-pur[1]):
+ # print(f'y: {y} + {off} -> {y+off} -> {-int(sch*(y+off))}')
+ return -int(sch * (y + off)+.5)
+ tran = lambda x,y : (tranx(x), trany(y))
+
+ return hex_width, hex_height, scw * psx, sch * psy, rot90, tran
+
+# --------------------------------------------------------------------
+def get_hexparams(i,llx,ury,hex_width,hex_height,scx,scy,rot90,
+ labels,coords,targs,nargs):
+ targs['dx'] = hex_width
+ targs['dy'] = hex_height
+ if labels is not None:
+ labmap = {
+ 'auto': {
+ 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N' },
+ 'auto=numbers' : {
+ 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N' },
+ 'auto=alpha column': {
+ 'hLeading': 0, 'vLeading': 0, 'hType': 'A', 'vType': 'N',
+ 'hOff': -1 },
+ 'auto=alpha 2 column': {# Not supported
+ 'hLeading': 1, 'vLeading': 1, 'hType': 'A', 'vType': 'N' },
+ 'auto=inv y x plus 1': {
+ 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N',
+ 'hOff': 0, 'vDescend': True },
+ 'auto=x and y plus 1': {
+ 'hLeading': 1, 'vLeading': 1, 'hType': 'N', 'vType': 'N',
+ 'hOff': 0, 'vOff': 0 }
+ }
+ for l in labels.split(','):
+ nargs.update(labmap.get(l,{}))
+
+ # Field/Direction | Normal | Rotated |
+ # ----------------|--------|---------|
+ # hOff | column | column |
+ # vOff | row | row |
+ # hDescend | column | row | True, incr to left
+ # vDescend | row | column | True, incr upward
+ # First='H' | column | column |
+
+ # In wargame offset=0 means that the first coordinates are 0,0.
+ # But offset 0,0 in VASSAL means start at 1,1
+ horiz = 'column'
+ vert = 'row'
+ nargs['vOff'] = nargs.get('vOff',0)-coords[vert] ['offset']-1
+ nargs['hOff'] = nargs.get('hOff',0)-coords[horiz]['offset']-1
+
+ # In VASSAL, vDesend=False means rows increase downward,
+ # while in wargame, factor=-1 means rows increase downward
+ horiz = 'row' if rot90 else 'column'
+ vert = 'column' if rot90 else 'row'
+ nargs['hDescend'] = coords[horiz]['factor'] != 1
+ nargs['vDescend'] = coords[vert] ['factor'] != -1 # flipped y
+ targs['edgesLegal'] = True
+
+ # Check for inversed columns
+ inv_col = coords['column']['factor'] == -1
+ ell = hex_width if inv_col else 0
+
+ # Some special stuff in case of 90 degree rotation
+ if rot90:
+ targs.update({'sideways': True})
+ nargs['hOff'] -= 1
+ nargs['hDescend'] = not nargs['hDescend']
+ if inv_col:
+ nargs['hOff'] += 3
+
+ margin = i.get('board frame',{}).get('margin',0)
+ mx = scx * margin
+ my = scy * margin
+ if inv_col: mx = 0 # Bug in wargame?
+
+ # Grid offset is defined relative to the full image,
+ # not the zone:
+ #
+ # X,Y offset: The horizontal and vertical position of
+ # the center of the first hex of the grid.
+ #
+ # That is, (x,y)=(0,0) is in the top-left corner of the
+ # image, while in TikZ it is in the bottom left corner.
+ # This means we shift by the boudning box offsets plus
+ # some stuff to align with the zone.
+ #
+ # In case of inversed columns, we need to add some extra stuff.
+ x0, y0 = llx-hex_width/3 + ell + mx, ury + my
+
+ # Rotated?
+ if rot90:
+ x0, y0 = ury+2*hex_width/3 + ell + mx, llx + my
+
+ # Below should be double-checked.
+
+ if not rot90:
+ if coords.get('column',{}).get('top short','') == 'isodd' \
+ and coords.get('column',{}).get('offset',0) == -1:
+ y0 -= hex_width/2
+ elif coords.get('column',{}).get('top short','') == 'iseven' \
+ and coords.get('column',{}).get('offset',-1) == 0:
+ y0 -= hex_width/2
+
+ targs.update({'x0': int(x0),'y0': int(y0)})
+
+# --------------------------------------------------------------------
+def get_rectparams(i,llx,ury,width,height,rot90,targs,nargs):
+ targs['dx'] = width
+ targs['dy'] = height
+ targs['x0'] = int(llx - width/2)
+ targs['y0'] = int(ury + height/2)
+ targs['color'] = rgb(0,255,0)
+ nargs['color'] = rgb(0,255,0)
+ nargs['vDescend'] = True
+ nargs['vOff'] = -3
+ nargs.update({'sep':',','vLeading':0,'hLeading':0})
+
+# --------------------------------------------------------------------
+def add_zones(root,zoned,name,board,width,height,gpid,
+ labels=None,coords=None,picinfo=None,
+ verbose=False,visible=True):
+ grids = []
+ picture = None
+ if verbose:
+ print(f' Adding zones to {name} zoned={"zoned" in board}')
+
+ for k, v in board.items():
+ if k == 'labels': labels = v
+ if k == 'coords': coords = v
+ if k == 'zoned': picture = v
+ if 'zone' not in k or k == 'zoned':
+ continue
+
+ gridtype = (add_hexgrid
+ if 'hex' in k.lower()
+ else add_squaregrid)
+ gridnum = (add_hexnumbering
+ if 'hex' in k.lower()
+ else add_squarenumbering)
+ grids.append([k,v,gridtype,gridnum])
+
+ if len(grids) < 1: return gpid
+ if verbose:
+ print(f' Got zones: {[k[0] for k in grids]}')
+ # Either get picture information from argument, or deduce from the
+ # found 'zoned' key.
+ if picinfo is None:
+ picinfo = get_picture_info(picture,name,width,height,verbose)
+
+ hex_width, hex_height, scx, scy, rot90, tran = picinfo
+
+
+ for g in grids:
+ n, i, typ, num = g
+ if verbose:
+ print(f' Adding zone {n}')
+ if 'scope' in n:
+ llx,lly = tran(*i['global lower left'])
+ urx,ury = tran(*i['global upper right'])
+ path = [[llx,ury],[urx,ury],[urx,lly],[llx,lly]]
+ nm = n.replace('zone scope ','')
+ elif 'path' in n:
+ path = [tran(*ii) for ii in i['path']]
+ llx = min([px for px,py in path])
+ ury = max([py for px,py in path])
+ nm = n.replace('zone path ','')
+
+ # Checkf if we have "point" type elements in this object and
+ # add them to dict.
+ points = [ v for k,v in i.items()
+ if (k.startswith('point') and
+ isinstance(v,dict) and \
+ v.get('type','') == 'point')]
+
+ pathstr = ';'.join([f'{s[0]},{s[1]}' for s in path])
+ if verbose:
+ print(f' Zone path ({llx},{ury}): {pathstr}')
+ zone = add_zone(root,zoned,
+ name=nm,
+ locationFormat = ("$name$"
+ if 'pool' in n.lower() else
+ "$gridLocation$"),
+ useParentGrid=False,
+ path=pathstr)
+
+ # Do not add grids to pools
+ if 'pool' in n.lower():
+ continue
+
+ targs = {'color':rgb(255,0,0),'visible':visible}
+ nargs = {'color':rgb(255,0,0),'visible':visible}
+ if 'hex' in n.lower():
+ get_hexparams(i,llx,ury,hex_width,hex_height,scx,scy,rot90,
+ labels,coords,targs,nargs)
+ else:
+ width = hex_width / HEX_WIDTH * RECT_WIDTH
+ height = hex_height / HEX_HEIGHT * RECT_HEIGHT
+ get_rectparams(i,llx,ury,width,height,rot90,targs,nargs)
+
+ # print(targs,nargs)
+ if 'turn' in n.lower(): nargs['sep'] = 'T'
+ if 'oob' in n.lower(): nargs['sep'] = 'O'
+
+ if verbose:
+ print(f' Adding grid')
+
+ if len(points) <= 0:
+ grid = typ(root,zone,**targs)
+ num(root,grid,**nargs)
+ else:
+ if verbose:
+ print(f' Use a region grid')
+ grid = add_regiongrid(root,zone,snapto=True,visible=visible)
+ for p in points:
+ pn = p["name"]
+ pc = p["coords"]
+ if verbose:
+ print(f' Add region {pn} {p}')
+
+ n, gpid = add_region(root,grid,pn,*tran(*pc),gpid,
+ alsoPiece=True,verbose=verbose)
+
+
+ # Once we've dealt with this grid, we should see if we have
+ # any embedded zones we should deal with.
+ add_zones(root,zoned,name,i,width,height,gpid,
+ labels=labels,coords=coords,picinfo=picinfo,
+ verbose=verbose)
+
+ # Adding a global grid
+ #targs['color'] = rgb(0,255,0)
+ #nargs['color'] = rgb(0,255,0)
+ #grid = typ(root,zoned,**targs)
+ #num(root,grid,**nargs)
+
+ return gpid
+
+
+# --------------------------------------------------------------------
+def add_inv(root,game,sides,**attr):
+ '''Add inventory to module'''
+ filt = '{' + '||'.join([f'Faction=="{s}"' for s in sides])+'}'
+ grp = 'Faction,Command,Echelon,Type'
+ inv = add_inventory(root,game,
+ include = filt,
+ groupBy = grp,
+ sortFormat = '$PieceName$',
+ tooltip = 'Show inventory of all pieces',
+ zoomOn = True,
+ **attr)
+ return inv
+
+
+# --------------------------------------------------------------------
+def add_map_board(root,game,name,board,gpid,verbose=False,visible=False):
+ '''A add a single board to the module
+ '''
+
+ map = add_map(root,game, name)
+ bpicker = add_boardpicker(root,map)
+
+ add_counterviewer (root,map)
+ add_hidepieces (root,map)
+ add_globalmap (root,map)
+ add_zoomer (root,map)
+ add_basics_to_map (root,map)
+ add_masskey (root,map,'Flip', key('F'),key('F'),
+ icon = '/images/Undo16.gif',
+ tooltip='Flip selected units')
+ add_masskey (root,map,'Eliminate',key('E'),key('E'),
+ icon = '/images/playerAway.gif',
+ tooltip='Eliminate selected units')
+
+ # Get the image so we may make a rectangle
+ if verbose:
+ print(f' Adding board {board["name"]} -> {board["filename"]}')
+ ulx,uly,lrx,lry = get_bb(board['img'])
+ eboard = add_board(root,bpicker,name,image=board['filename'])
+ zoned = add_zoned(root,eboard)
+ #hexes = add_hexgrid(root,zoned)
+ add_zonehighlighter(root,zoned)
+
+ if not 'zones' in board:
+ full = add_zone(root,zoned,
+ name='full',
+ useParentGrid=False,
+ path=(f'{ulx},{uly};' +
+ f'{lrx},{uly};' +
+ f'{lrx},{lry};' +
+ f'{ulx},{lry}'))
+
+ # We do not have board info, so add a grid to the whole thing
+ add_hex_grid(root,full,rgb(255,0,0),True,True,visible=visible)
+ return
+
+ # If we get here, we have board info!
+ w = abs(ulx-lrx)
+ h = abs(uly-lry)
+ return add_zones(root,zoned,name,board['zones'],w,h,gpid,
+ verbose=verbose,visible=visible)
+
+# --------------------------------------------------------------------
+def add_boards(root,game,categories,sides,gpid,verbose=False,visible=False):
+ '''Add all boards to the module, including eliminated map
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ game : xml.dom.minidom.Element
+ The parent element
+ categories : dict
+ Catalogue of images
+ sides : list of str
+ List of sides in the game
+ Name of the map
+ '''
+ if verbose:
+ print('Adding maps and boards')
+
+ # Loop over defined boards
+ for bn, b in categories.get('board',{}).get('all',{}).items():
+ gpid = add_map_board(root,game,bn,b,gpid,verbose,visible)
+
+ add_elim(root,game,sides,categories,verbose)
+
+ return gpid
+
+# --------------------------------------------------------------------
+def add_oob(root,widget,name,oob,gpid,hotkey='',verbose=False,visible=False):
+ '''A add a single board to the module
+ '''
+ # Short hand
+ cr = lambda parent,tag,**attr : create_elem(root,parent,vn(tag),**attr)
+
+ if verbose:
+ print(f' Adding oob {name}')
+
+ map = add_widgetmap(root,widget, name,markMoved='Never',hotkey='')
+ bpicker = add_boardpicker(root,map)
+
+ add_counterviewer (root,map)
+ add_zoomer (root,map)
+ add_basics_to_map (root,map)
+
+
+ # Get the image so we may make a rectangle
+ if verbose:
+ print(f' Adding OOB {oob["name"]} -> {oob["filename"]}')
+
+ ulx,uly,lrx,lry = get_bb(oob['img'])
+ board = add_board(root,bpicker,name,image=oob['filename'])
+ zoned = add_zoned(root,board)
+ add_zonehighlighter(root,zoned)
+
+ if not 'zones' in oob:
+ zone = add_zone(root,zoned,
+ name='full',
+ useParentGrid=False,
+ path=(f'{ulx},{uly};' +
+ f'{lrx},{uly};' +
+ f'{lrx},{lry};' +
+ f'{ulx},{lry}'))
+ # We do not have board info, so add a grid to the whole thing
+ grid = add_squaregrid(root,zone,visible=visible)
+ add_squarenumbering(root,grid,visible=visible)
+ return
+
+ # If we get here, we have board info!
+ w = abs(ulx-lrx)
+ h = abs(uly-lry)
+ return add_zones(root,zoned,name,oob['zones'],w,h,gpid,
+ verbose=verbose,visible=visible)
+
+# --------------------------------------------------------------------
+def add_oobs(root,game,categories,gpid,verbose=False,visible=False):
+ '''Add all OObs to the module
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ game : xml.dom.minidom.Element
+ The parent element
+ categories : dict
+ Catalogue of images
+ '''
+ # Short hand
+ oobc = categories.get('oob',{}).get('all',{}).items()
+ if len(oobc) < 1:
+ return gpid
+
+ oobs = add_chartwindow(root,game, 'OOBs',
+ hotkey = key('B',ALT),
+ description = 'OOBs',
+ text = '',
+ icon = '/images/inventory.gif',
+ tooltip = 'Show/hide OOBs')
+ tabs = add_tabs(root,oobs,'OOBs')
+
+ if verbose:
+ print('Adding OOBs')
+
+ # Loop over defined boards
+ for on, o in oobc:
+ widget = add_mapwidget(root,tabs, entryName=on)
+ gpid = add_oob(root,widget,on,o,gpid,
+ verbose = verbose,
+ hotkey = key('B',ALT),
+ visible = visible)
+
+ return gpid
+
+# --------------------------------------------------------------------
+def add_markproto(root,protos,key,value):
+ decs = [ mark_trait(key,value.capitalize()),
+ basic_trait('','','') ]
+ typs = [d[0] for d in decs]
+ stts = [d[1] for d in decs]
+ typ = enc_parts(*typs)
+ stt = enc_parts(*stts)
+ body = add_proto(typ,stt)
+ add_prototype(root,protos,value+' prototype',body)
+
+# --------------------------------------------------------------------
+def add_counters(root,game,categories,
+ unittypes,echelons,commands,verbose=False):
+ '''Add all counters to the module.
+
+ This will add all counters to the module, as well as prototypes
+ for each sub-category.
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ game : xml.dom.minidom.Element
+ The game element
+ categories : dict
+ Catalogue of images
+ '''
+ # Short hand
+ # Create prototypes container before adding pieces
+ protos = add_prototypes(root,game)
+ for utype in unittypes: add_markproto(root,protos,'Type',utype)
+ for ech in echelons: add_markproto(root,protos,'Echelon',ech)
+ for cmd in commands: add_markproto(root,protos,'Command',cmd)
+
+ # Stating global piece ID
+ gpid = 20
+
+ # A window to hold the pieces
+ piecew = add_piecewindow(root,game,'Counters',
+ hotkey = key('C',ALT))
+ # Tab container for each sub-category
+ piecet = add_tabs(root,piecew,entryName='Counters')
+
+ if verbose:
+ print('Adding counters and prototypes')
+
+ # Loop over sub-categories
+ for subn, subc in categories.get('counter',{}).items():
+ # Friendly message
+ if verbose:
+ print(f' Adding {subn} counters and prototype')
+
+ # Create a panel for this sub-category
+ piecep = add_panel(root,piecet,
+ entryName = subn,
+ fixed = False)
+ # Add a list to the panel
+ piecel = add_list(root,piecep,
+ entryName=f'{subn} counters')
+
+ if verbose:
+ print(f' Prototype: {subn} prototype')
+ # Create prototype for this sub-category
+ proto = add_prototype(root,protos,
+ name = f'{subn} prototype',
+ code = proto_body(subn),
+ description = f'Prototype for {subn} counters')
+
+ # Loop over counters in this sub-category
+ for cn, c in subc.items():
+ # Flipped counters are not added directly
+ if cn.endswith('flipped'): continue
+
+ if verbose:
+ print(f' counter: {cn}')
+
+ # Get image bounding box
+ bb = get_bb(c['img'])
+
+ # Get flipped image, if any
+ cf = subc.get(cn + ' flipped', None)
+
+ # Create a slot for this piece
+ sl = add_pieceslot(root,piecel,
+ entryName = cn,
+ gpid = gpid,
+ code = piece_body(subn,c,cf,gpid),
+ height = bb[3]-bb[1],
+ width = bb[2]-bb[0])
+
+ # Store the global piece identifier - do we need this?
+ c['gpid'] = gpid
+
+ # Increment global piece identifier
+ gpid += 1
+
+ # Return next free piece identifier
+ return gpid
+
+# --------------------------------------------------------------------
+def add_charts(root,game,categories,verbose=False):
+ '''Add all boards to the module
+
+ This will select all 'chart' elements from the catalogue and add
+ them as individual (popup) panels to the module.
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ game : xml.dom.minidom.Element
+ The game element
+ categories : dict
+ Catalogue of images
+
+ '''
+ chartc = categories.get('chart',{}).get('all',{}).items()
+ if len(chartc) < 1:
+ return
+
+ # Short hand
+ cr = lambda parent,tag,**attr : create_elem(root,parent,vn(tag),**attr)
+ cw = lambda parent,tag,**attr : create_elem(root,parent,vw(tag),**attr)
+
+ if verbose:
+ print('Adding charts')
+
+ charts = add_chartwindow(root,game, 'Charts',
+ hotkey = key('A',ALT),
+ description = 'Charts',
+ tooltip = 'Show/hide Charts')
+ tabs = add_tabs(root,charts,'Charts')
+
+
+ # Loop over defined charts
+ for cn, c in chartc:
+ if verbose:
+ print(f' Chart {cn} ({c["filename"]})')
+ add_chart(root,tabs,
+ chartName = cn,
+ description = cn,
+ fileName = c['filename'])
+
+# --------------------------------------------------------------------
+def add_diceroll(root,game,categories,verbose=False):
+ '''Add a dice button (1d6)
+
+ Parameters
+ ----------
+ root : xml.dom.minidom.Document
+ Root of the document
+ game : xml.dom.minidom.Element
+ The game element
+ categories : dict
+ Catalogue of images
+ '''
+ if verbose:
+ print('Adding dice')
+
+ add_dice(root,game,
+ hotkey = key('6',ALT),
+ nDice = 1,
+ nSides = 6,
+ text = '1d6',
+ tooltip = 'Roll a 1d6',
+ name = '1d6')
+
+
+# ====================================================================
+def create_build(info,
+ categories,
+ unittypes,
+ echelons,
+ commands,
+ zipfile,
+ title,
+ version,
+ desc = '',
+ rules = None,
+ pdffile = '',
+ infofile = '',
+ verbose = False,
+ visible = False):
+ '''Create the buildFile.xml document
+
+ Parameters
+ ----------
+ info : dict
+ Information dicationary
+ categories : dict
+ Catalogue of images
+ unittypes : set
+ Set of used unit types
+ zipfile : zipfile.ZipFile
+ Module archive
+ title : str
+ Title of module
+ version : str
+ Version number of module
+ desc : str
+ Short description of the game
+ rules : str
+ Filename of PDF rules document (if any)
+
+ Returns
+ -------
+ xml : str
+ The encoded document
+ '''
+ from xml.dom.minidom import Document
+
+ if verbose:
+ print(f'Creating buildFile.xml: {title},{version}')
+
+ # Create document
+ root = Document()
+
+ # Add game element
+ game = add_game(root,root,
+ name = title,
+ version = version,
+ description = desc)
+
+ # Extract the sides of the game from the counter sub-categories
+ # Should be a little more clever about the case here
+ dsides = {k.lower() : k for k in categories.get('counter',{}).keys()}
+ sides = None
+ for skip in ['all','common', 'marker', 'markers']:
+ if skip in dsides: del dsides[skip]
+ sides = list(dsides.values())
+ if verbose:
+ print('Identified factions: ',sides)
+
+ # Use the standard command encoder
+ add_basiccommandencoder(root,game)
+
+ # Add document parts
+ doc = add_documentation(root,game)
+ add_splash(root, doc, categories, title,verbose)
+ add_rules(root, doc, zipfile, rules,verbose)
+ notes = add_notes(root,doc,zipfile,title,version,
+ sides,pdffile,infofile,rules,verbose)
+
+
+ # Create roster or player sides
+ roster = add_roster(root,game)
+ for s in sides:
+ add_entry(root,roster,s)
+
+ # Add global options - mainly defer to user settings
+ add_globaloptions(root,game,
+ autoReport = 'Use Preferences Setting',
+ centerOnMove = 'Use Preferences Setting',
+ nonOwnerUnmaskable = 'Use Preferences Setting',
+ playerIdFormat = '$playerName$')
+ # Add all pieces to the module (including prototypes)
+ gpid = add_counters(root,game,categories,
+ unittypes,echelons,commands,verbose)
+ # Add an inventory
+ add_inv(root,game,sides)
+ # Add all boards to the module (including eliminated map)
+ gpid = add_boards(root,game,categories,sides,gpid,
+ verbose=verbose,visible=visible)
+ # Add all OOBs to the module
+ gpid = add_oobs(root,game,categories,gpid,
+ verbose=verbose,visible=visible)
+ # Add charts to the module
+ add_charts(root,game,categories,verbose=verbose)
+ # Add a dice rool
+ add_diceroll(root,game,categories,verbose=verbose)
+
+ # Set next available piece identifier on the game
+ game.setAttribute('nextPieceSlotId',str(gpid+1))
+
+ # Return the document
+ return root, notes
+
+# --------------------------------------------------------------------
+def create_data(title,version,desc='',verbose=False):
+ '''Create the module data XML
+
+ Parameters
+ ----------
+ title : str
+ Title of the game
+ version : str
+ Version number of the module
+ desc : str
+ Short description
+
+ Returns
+ -------
+ xml : str
+ The encoded document
+ '''
+ from xml.dom.minidom import Document
+ from time import time
+
+ if verbose:
+ print('Create module data')
+
+ # The document
+ root = Document()
+
+ # Top of the document
+ data = root.createElement('data')
+ data.setAttribute("version","1")
+ root.appendChild(data)
+
+ # Version number of module
+ vers = root.createElement('version')
+ vers.appendChild(root.createTextNode(str(version)))
+ data.appendChild(vers)
+
+ # Name of the game
+ name = root.createElement('name')
+ name.appendChild(root.createTextNode(title))
+ data.appendChild(name)
+
+ # VASSAL version (should get this in some other way)
+ vvers = root.createElement('VassalVersion')
+ vvers.appendChild(root.createTextNode("3.6.7"))
+ data.appendChild(vvers)
+
+ # Description, if any
+ desc = root.createElement('description')
+ data.appendChild(desc)
+
+ # Automatically set the save data
+ save = root.createElement('dateSaved')
+ save.appendChild(root.createTextNode(f'{int(time())}'))
+ data.appendChild(save)
+
+ return root
+
+
+# ====================================================================
+def create_vmod(vmodname,
+ info,
+ title,
+ version,
+ desc = '',
+ rules = None,
+ pdfname = '',
+ infoname = '',
+ patch = None,
+ verbose = False,
+ visible = False):
+ '''Create a VASSAL module from the information passed
+
+ Parameters
+ ----------
+ vmodname : str
+ Name of the module
+ info : list
+ List of images and image data
+ title : str
+ Name of the game
+ version : str
+ Version of the module
+ desc : str
+ Short description of the game
+ rules : str
+ Rules PDF (optional)
+
+ Returns
+ -------
+ '''
+ from zipfile import ZipFile, ZIP_DEFLATED
+ from pprint import pprint
+
+ categories = {}
+ unittypes = []
+ echelons = []
+ commands = []
+ with ZipFile(vmodname,'w',compression=ZIP_DEFLATED) as vmod:
+ # Create images in ZIP file
+ for i in info:
+ if ignore_entry(i): continue
+
+ # Store the name of the image file in catalogue
+ i['filename'] = i['name'].replace(' ','_') + '.png'
+ vmod.writestr('images/'+i['filename'],i['img'])
+
+ # Categorize - assume counter
+ typ = i.get('category','counter')
+ sub = i.get('subcategory','all')
+ if sub == '':
+ i['subcategory'] = 'all'
+ sub = 'all'
+
+ # Add to catalogue
+ if typ not in categories:
+ categories[typ] = {}
+ cat = categories[typ]
+
+ if sub not in cat:
+ cat[sub] = {}
+ tgt = cat[sub]
+
+ tgt[i['name']] = i
+
+ natoapp6c = i.get('natoapp6c',None)
+ if natoapp6c is not None:
+ from re import sub
+ mains = natoapp6c.get('main',None)
+ echelon = natoapp6c.get('echelon',None)
+ command = natoapp6c.get('command',None)
+
+ if mains is not None:
+ mains = sub(r'\[[^]]+\]','',mains)\
+ .replace('{','').replace('}','').split(',')
+ unittypes.extend(mains)
+ i['mains'] = mains
+
+ if echelon is not None:
+ echelons.append(natoapp6c['echelon'])
+ i['echelon'] = echelon
+
+ if command is not None:
+ commands.append(command)
+ i['command'] = command
+
+ # Friendly message
+ # if verbose:
+ # print(f'{i["name"]} -> {i["type"]}/{i["sub type"]} {typ}/{sub}')
+
+ unittypes = set(unittypes)
+ echelons = set(echelons)
+ commands = set(commands)
+
+ # Now create the `buildFile.xml` file
+ build, notes = create_build(info,
+ categories,
+ unittypes,
+ echelons,
+ commands,
+ vmod,
+ title,
+ version,
+ desc,
+ rules,
+ pdfname,
+ infoname,
+ verbose,
+ visible)
+ # Now create the `moduledata` file
+ data = create_data(title, version, desc,verbose)
+
+
+ if patch:
+ from importlib.util import spec_from_file_location, \
+ module_from_spec
+ from pathlib import Path
+ from sys import modules
+
+ p = Path(patch)
+ if verbose:
+ pn = str(p.stem)
+ print(f'Will patch module with {pn}.patch function')
+
+ spec = spec_from_file_location(p.stem, p.absolute())
+ module = module_from_spec(spec)
+ spec.loader.exec_module(module)
+ modules[p.stem] = module
+
+
+ # Patch must accept xml.dom.document,xml.dom.document,ZipFile
+ module.patch(build,data,vmod,verbose)
+
+ buildstr = build.toprettyxml(indent=' ',
+ encoding="UTF-8",
+ standalone=False)
+ datastr = data.toprettyxml(indent=' ',
+ encoding="UTF-8",
+ standalone=False)
+
+ vmod.writestr('buildFile.xml',buildstr)
+ vmod.writestr('moduledata',datastr)
+
+ return notes
+
+# ====================================================================
+def export(vmodname = 'Draft.vmod',
+ pdfname = 'export.pdf',
+ infoname = 'export.json',
+ title = 'Test',
+ version = 'Draft',
+ desc = '',
+ rules = None,
+ patch = None,
+ verbose = False,
+ visible = False):
+ '''Do the whole thing
+
+ - Read in information form the 'infoname' file (a CSV file
+ generated by LaTeX)
+
+ - Convert each page in the 'pdfname' file (a PDF generated by
+ LaTex) into images
+
+ - Create the VASSAL module
+
+ '''
+ if verbose:
+ print(f'Module name : {vmodname}\n'
+ f'PDF name : {pdfname}\n'
+ f'Info name : {infoname}\n'
+ f'Title : {title}\n'
+ f'Version : {version}\n'
+ f'Description : {desc}\n'
+ f'Rules : {rules}\n')
+ info = convert_pages(pdfname=pdfname,infoname=infoname)
+ return create_vmod(vmodname = vmodname,
+ info = info,
+ title = title,
+ version = version,
+ desc = desc,
+ rules = rules,
+ pdfname = pdfname,
+ infoname = infoname,
+ patch = patch,
+ verbose = verbose,
+ visible = visible)
+
+# ====================================================================
+if __name__ == '__main__':
+ from argparse import ArgumentParser, FileType
+
+ ap = ArgumentParser(description='Create draft VASSAL module')
+ ap.add_argument('pdffile',
+ help='The PDF file to read images from',
+ type=FileType('r'),
+ default='export.pdf',
+ nargs='?')
+ ap.add_argument('infofile',
+ help='The JSON file to read image information from',
+ type=FileType('r'),
+ default='export.json',
+ nargs='?')
+ ap.add_argument('-p','--patch',
+ help='A python script to patch generated module',
+ type=FileType('r'))
+ ap.add_argument('-o','--output',
+ help='Output file to write module to',
+ type=FileType('w'),
+ default='Draft.vmod')
+ ap.add_argument('-t','--title',
+ help='Module title', default='Draft',
+ type=str)
+ ap.add_argument('-v','--version',
+ help='Module version',
+ type=str,
+ default='draft')
+ ap.add_argument('-r','--rules',
+ help='Rules PDF file',
+ type=FileType('r'))
+ ap.add_argument('-d','--description',
+ help='Short description of module',
+ type=str,
+ default='draft of module')
+ ap.add_argument('-V','--verbose',
+ help='Be verbose',
+ action='store_true')
+ ap.add_argument('-G','--visible-grids',
+ action='store_true',
+ help='Make grids visible in the module')
+ ap.add_argument('-n','--notes',
+ help='Show notes',
+ action='store_true')
+
+
+ args = ap.parse_args()
+
+ vmodname = args.output.name
+ rulesname = args.rules.name if args.rules is not None else None
+ args.output.close()
+
+ patchname = args.patch.name if args.patch is not None else None
+ if args.patch is not None:
+ args.patch.close()
+
+ if args.version.lower() == 'draft':
+ args.visible_grids = True
+
+ try:
+ notes = export(vmodname = vmodname,
+ pdfname = args.pdffile.name,
+ infoname = args.infofile.name,
+ title = args.title,
+ version = args.version,
+ desc = args.description,
+ rules = rulesname,
+ patch = patchname,
+ verbose = args.verbose,
+ visible = args.visible_grids)
+
+ if args.notes:
+ print(f'Module {vmodname} created. '
+ 'Here are the notes from the module')
+ print(notes)
+
+ except Exception as e:
+ from sys import stderr
+ print(f'Failed to build {vmodname}: e',file=stderr)
+ from os import unlink
+ try:
+ unlink(vmodname)
+ except:
+ pass
+
+ raise e
diff --git a/macros/latex/contrib/wargame/source/utils/svg2tikz.py b/macros/latex/contrib/wargame/source/utils/svg2tikz.py
new file mode 100755
index 0000000000..a9f3c60203
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/utils/svg2tikz.py
@@ -0,0 +1,365 @@
+#!/usr/bin/env python3
+
+from sys import stderr, stdout
+
+def monkey_patch():
+ from svgelements import SVGElement
+
+ def SVGElement__imatmul__(self,other):
+ print('Dummy SVGElement.__imatmul__')
+ return self
+
+ SVGElement.__imatmul__ = SVGElement__imatmul__
+
+monkey_patch()
+
+# --------------------------------------------------------------------
+def open_svg(input):
+ from svgelements import SVG
+
+ svg = SVG.parse(input,reify=False)
+ print(type(svg[0]),file=stderr)
+ return svg
+
+# --------------------------------------------------------------------
+def get_bb(svg):
+ llx,lly,urx,ury = svg.bbox()
+ # print(llx,lly,urx,ury)
+ return llx,lly,urx,ury
+
+# --------------------------------------------------------------------
+def flush_left(svg):
+ from svgelements import Matrix
+
+ llx,lly,urx,ury = get_bb(svg)
+ svg *= Matrix.translate(-llx,-lly)
+ return svg
+
+# --------------------------------------------------------------------
+def scale_unit(svg):
+ from svgelements import Matrix
+
+ llx,lly,urx,ury = get_bb(svg)
+ scale = 1 / max(urx,ury)
+ svg *= Matrix.scale(scale)
+
+ return svg
+
+# --------------------------------------------------------------------
+def scale_to_cm(svg,px_per_cm = 37.79531157367762334497):
+ from svgelements import Matrix
+
+ scale = 1 / px_per_cm
+ svg *= Matrix.scale(scale)
+
+ return svg
+
+# --------------------------------------------------------------------
+def shift_to_centre(svg):
+ from svgelements import Matrix
+
+ llx,lly,urx,ury = get_bb(svg)
+ svg *= Matrix.translate(-urx/2,-ury/2)
+ svg *= Matrix.scale(1,-1)
+ svg.reify()
+ svg.render()
+ return svg
+
+# --------------------------------------------------------------------
+def flipy(svg):
+ from svgelements import Matrix
+
+ llx,lly,urx,ury = get_bb(svg)
+ svg *= Matrix.translate(-llx,-lly)
+ svg *= Matrix.scale(1,-1)
+ svg.reify()
+ svg.render()
+ llx,lly,urx,ury = get_bb(svg)
+ svg *= Matrix.translate(0,-lly)
+ return svg
+
+# ====================================================================
+def get_paths(svg):
+ '''Read in paths from the SVG image
+
+ This will recurse down groups for path operations
+
+ Returns
+ -------
+ paths : list
+ List of svg.path.Path objects
+ '''
+ from svgelements import Path, Group
+ from svg.path import parse_path
+
+ paths = []
+
+ for e in svg:
+ if isinstance(e,Path):
+ print('Parse path',file=stderr)
+ p = parse_path(e.d())
+ paths.append(p)
+ if isinstance(e,Group):
+ print('Parse group',file=stderr)
+ paths.append(get_paths(e))
+
+ return paths
+
+# ====================================================================
+def tikz_point(e,f):
+ '''Ouput a point
+
+ Parameters
+ ----------
+ e : complex
+ The point
+ f : str
+ Floating point format
+
+ Return
+ ------
+ coord : str
+ The point formatted for Tikz
+ '''
+ return f'({e.real:{f}},{e.imag:{f}})'
+
+# --------------------------------------------------------------------
+def tikz_move(e,f):
+ '''Output a move-to operation
+
+ Parameters
+ ----------
+ e : complex
+ The point to move to
+ f : str
+ Floating point format
+
+ Return
+ ------
+ coord : str
+ The point formatted for Tikz
+ '''
+ return tikz_point(e.start,f)
+
+# --------------------------------------------------------------------
+def tikz_line(e,f):
+ '''Output a line-to operation
+
+ Parameters
+ ----------
+ e : complex
+ The point to draw line to
+ f : str
+ Floating point format
+
+ Return
+ ------
+ line : str
+ The line-to operation to point
+ '''
+ return '-- '+tikz_point(e.end,f)
+
+# --------------------------------------------------------------------
+def tikz_curve(e,f):
+ '''Output a curve-to operation
+
+ Parameters
+ ----------
+ e : curve operation (3 complex numbers)
+ The control points (2 of them) and the point to draw curve to
+ f : str
+ Floating point format
+
+ Return
+ ------
+ curve : str
+ The curve-to operation to point
+ '''
+ return \
+ '.. controls '+tikz_point(e.control1,f) + \
+ ' and ' +tikz_point(e.control2,f) + \
+ ' ..' +tikz_point(e.end,f)
+
+# --------------------------------------------------------------------
+def tikz_close(e,f):
+ '''Ouput a close (or cycle) operation
+ '''
+ return '-- cycle'
+
+# ====================================================================
+def path_to_tikz(path,f='8.5f'):
+ '''Convert a svt.path.Path to a TikZ path
+
+ Parameters
+ ----------
+ path : svg.path.Path
+ Path to convert
+ f : str
+ floating point format to use
+
+ Returns
+ -------
+ code : list
+ List of Tikz path operations as strings
+ '''
+ from svg.path import Line, Move, Close, CubicBezier, Path
+
+ code = []
+ for e in path:
+ if isinstance(e, Move): code.append(tikz_move(e, f))
+ elif isinstance(e, Line): code.append(tikz_line(e, f))
+ elif isinstance(e, Close): code.append(tikz_close(e,f))
+ elif isinstance(e, CubicBezier): code.append(tikz_curve(e,f))
+ elif isinstance(e, Path): code.extend(path_to_tikz(e,f))
+ else:
+ print(f'Unknown type: {type(e)}',file=stderr)
+
+ return code
+
+# ====================================================================
+def doc_header(output=stdout):
+ '''Prinout put standalone document header
+ '''
+ print(r'''%
+\documentclass{standalone}
+\usepackage{tikz}
+\begin{document}%''',file=output)
+
+# --------------------------------------------------------------------
+def doc_footer(output=stdout):
+ '''Prinout put standalone document footer
+ '''
+ print(r'''%
+\end{document}''',file=output)
+
+# --------------------------------------------------------------------
+def path_to_pic(path,name,output,format):
+ '''Output a Tikz pic definition from the path
+
+ Parameters
+ ----------
+ path : Path
+ The path to convert
+ name : str
+ The name of the pic
+ output : File
+ Output file
+ format : str
+ Floating point format
+ '''
+ print(fr'''\tikzset{{%
+ {name}/.pic={{%
+ \path[pic actions]''',file=output,end='\n ')
+
+ code = path_to_tikz(path,format)
+ print('\n '.join(code),file=output)
+ print(' ;\n }',file=output)
+ print('}%',file=output)
+
+# ====================================================================
+
+# ====================================================================
+def doit(input='soldier_side.svg',
+ centre=True,
+ unit=True,
+ output=stdout,
+ standalone=False,
+ format='8.5f'):
+ svg = open_svg(input)
+ orig_bb = get_bb(svg)
+
+ if centre or unit:
+ svg = flush_left(svg)
+ if unit:
+ svg = scale_unit(svg)
+ else:
+ svg = scale_to_cm(svg)
+ if centre:
+ svg = shift_to_centre(svg)
+ else:
+ svg = flipy(svg)
+ new_bb = get_bb(svg)
+
+ paths = get_paths(svg)
+
+ if standalone:
+ doc_header(output)
+ print(f'% Original bounding box: ({orig_bb[0]},{orig_bb[1]}) ({orig_bb[2]},{orig_bb[3]})',
+ file=output)
+ print(f'% New bounding box: ({new_bb[0]},{new_bb[1]}) ({new_bb[2]},{new_bb[3]})',
+ file=output)
+ pics = []
+ for i, path in enumerate(paths):
+ name = f'pic_{i:03d}'
+ path_to_pic(path,name,output,format)
+ pics.append(name)
+
+ if standalone:
+ print(r'\begin{tikzpicture}%',file=output)
+ x = 0
+ y = 0
+ for i, name in enumerate(pics):
+ if x > 10:
+ x = 0
+ y += 2
+
+ print(fr' \pic[draw,fill=red] at ({x},{y}) {{{name}}};%',
+ file=output)
+ x += 2
+
+ print(r'\end{tikzpicture}%',file=output)
+ doc_footer(output)
+
+# ====================================================================
+def test(svgfile='soldier_side.svg',tikzfile=stdout,standalone=True):
+ with open(svgfile,'r') as input:
+ with open(tikzfile,'w') if isinstance(tikzfile,str) else tikzfile as output:
+ doit(input=input,output=output,standalone=standalone)
+
+
+# ====================================================================
+if __name__ == '__main__':
+ from argparse import ArgumentParser, FileType
+
+ ap = ArgumentParser(description='Convert SVG to unit Tikz picture')
+ ap.add_argument('input',type=FileType('r'),nargs='?',default='soldier_side.svg',
+ help='Input SVG file')
+ ap.add_argument('-o','--output',type=FileType('w'),default=None,
+ help='Output Tikz file')
+ ap.add_argument('-s','--standalone',action='store_true',default=True,
+ help='Write standalone document')
+ ap.add_argument('-p','--picture',action='store_false',dest='standalone',
+ help='Only write picture')
+ ap.add_argument('-f','--format',type=str,default='8.5f',
+ help='Format for coordinates')
+ ap.add_argument('-O','--original-size',dest='unit',action='store_false',
+ help='Do no scale paths to unit size')
+ ap.add_argument('-S','--unit-size',dest='unit',action='store_true',
+ help='Scale paths to unit size')
+ ap.add_argument('-Z','--no-centre',dest='centre',action='store_false',
+ help='Do not centre paths')
+ ap.add_argument('-C','--centre',dest='centre',action='store_true',
+ help='Centre paths')
+
+ args = ap.parse_args()
+
+ if args.output is None:
+ from pathlib import Path
+ inname = Path(args.input.name)
+ outname = inname.with_suffix('.tex')
+ args.output = open(outname,'w')
+
+
+ doit(input = args.input,
+ unit = args.unit,
+ centre = args.centre,
+ output = args.output,
+ standalone = args.standalone,
+ format = args.format)
+
+
+
+
+
+
+
diff --git a/macros/latex/contrib/wargame/source/wargame.dtx b/macros/latex/contrib/wargame/source/wargame.dtx
new file mode 100644
index 0000000000..a2e7d06a94
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/wargame.dtx
@@ -0,0 +1,2455 @@
+% \iffalse
+%<*driver>
+% This is the preamp used in various documents
+\documentclass{ltxdoc}
+%<symbols>\usepackage[noterrainpic]{wgdoc}
+%<!symbols>\usepackage{wgdoc}
+%</driver>
+%\fi
+%\iffalse
+%<*doc>
+% This is for the main documentation
+\usepackage{wgdoc}
+\input{testmap}
+\input{testchits}
+\usetikzlibrary{external}
+\tikzexternalize[prefix=cache/]
+\CodelineIndex
+\EnableCrossrefs
+\DisableCrossrefs
+\DoNotIndex{\a,\advance,\args,\bfseries,\breakforeach,\cc,\ccc,
+ \divide,\def,\h,\filldraw,\node,\path,\RequirePackage,\ProvidesPackage,
+ \Large,\large,\huge,\Huge,\normalsize,\tiny,
+ \long,\n,\mc,\o,\p,
+ \usetikzlibrary,\draw,\foreach,\fv,\tikzinputsegmentfirst,
+ \tikzinputsegmentsupporta,\tikzinputsegmentsupportb,
+ \tikzinputsegmentlast,\pgfmathparse,\pgfpoint,\edef,\pgfmathresult,
+ \relax,\ifx,\else,\fi,\definecolor,\tikz,\tikzset,\tikzstyle,
+ \maxdimen,\pgfseteorule,\message,\global,\clip,\let,\end,\begin,
+ \sffamily,\selectfont,\fontsize,\DeclareTextFontCommand,
+ \selectfont,\define@key,\pgf@x,\pgf@y,\xdef,\expandafter,\@ifundefined,
+ \pgfpointxy,\csname,\endcsname,\pgfpointadd,\fill,\@empty,\@ifnextchar,
+ \@undefined,\@undefinedb,\arrow,\b,\c,\color,\fontfamily,\fontseries,
+ \gdef,\i,\k,\m,\newcommand,\newcount,\newif,\newlength
+ \pgf@pathmaxx,\pgf@pathminx,\pgf@pathmaxy,\pgf@pathminy,
+ \pgf@picmaxx,\pgf@picminx,\pgf@picmaxy,\pgf@picminy,
+ \pgf@relevantforpicturesizefalse,\pgf@relevantforpicturesizetrue,
+ \pic,\r,\setkeys,\setlength,\show,\t,\temp,\the,
+ \tikzdeclarecoordinatesystem,\tmp@x,\tmp@y,\v,\x,\y}
+%% \OnlyDescription
+\def\PrintMacroName#1{}
+\def\PrintEnvName#1{}
+\title{The \textsf{wargame} package}
+\author{Christian Holm Christensen}
+\date{\today}
+\begin{document}
+\maketitle
+\begin{abstract}
+ This package provides tools to typesetting manuals, board, and
+ counters for wargames using \LaTeX{}.
+
+ Licensed under
+ \href{http://creativecommons.org/licenses/by-sa/4.0}{Creative
+ Commons Attribution-ShareAlike International License, version 4}
+ \tikz[scale=.2,transform shape]{\pic{cc by sa};}.
+\end{abstract}
+\tableofcontents
+\wargamedbglvl=0
+\hexdbglvl=0
+\chitdbglvl=0
+\natoappdbglvl=0
+% To avoid: Package multicol Error: Error saving partial page.
+\setlength{\IndexMin}{100pt}
+\DocInput{wargame.dtx}
+\end{document}
+%</doc>
+%\fi
+%
+% \iffalse
+% ====================================================================
+%
+% Documentation
+%
+% ====================================================================
+% \fi
+%
+% \newif\ifShowSymbols\ShowSymbolsfalse
+% \newif\ifShowCompat\ShowCompatfalse
+%
+% \iffalse
+% --------------------------------------------------------------------
+%
+% Introduction
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \section{Introduction}
+%
+% This package provides tools for typesetting classic, hex-based
+% wargames. The package allows an author to design a board, or map,
+% comprised of hex, using a relatively simple interface. Units are
+% typeset using a similar interface. Unit types are identified using
+% the NATO Joint Military Symbology \cite{app6c} standard.
+%
+% \iffalse
+% --------------------------------------------------------------------
+%
+% Hexes
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \section{Hex Boards}
+%
+% The package provides a number of facilities to set-up a board
+% comprised of hexagon fields (``hexes'').
+%
+% \subsection{Placing hexes}
+%
+% A hex can be added to the current \texttt{tikzpicture} using the
+% macro \cs{hex}. It takes up to 4 arguments
+%
+% \begin{MacroSyntax}{\hex}
+% \cs{hex}\oarg{key-value-pairs}\parg{location}\parg{name}
+% \end{MacroSyntax}
+%
+% The \meta{key-value-pairs} specify the hex. Valid options are
+% \begin{description}
+% \item[\keyval{terrain}{\meta{terrain-keys}}] specifies the terrain
+% of the hex. More on in this in
+% \sectionname~\ref{sec:hex:terrain}.
+% \item[\keyval{ridges}{\meta{ridges-keys}}] specifies where ridges
+% are drawn in the hex. \sectionname~\ref{sec:hex:ridges}.
+% \item[\keyval{label}{\meta{label-keys}}] specifies the how to output
+% the hex label, if any. This is expanded upon in
+% \sectionname~\ref{sec:hex:label}.
+% \item[\keyval{town}{\meta{town-keys}}] specifies that a town (or
+% similar) is present in the hex. The various keys are described in
+% \sectionname~\ref{sec:hex:town}.
+% \item[\keyval{extra}{\meta{extra-keyx}} \textrm{and} \keyval{extra
+% clipped}{\meta{extra-keyx}}] allows the user to put custom
+% graphics in the hexes. See also \sectionname~\ref{sec:hex:extra}
+% for more.
+% \item any style key defined for \TikZ{} pictures.
+% \end{description}
+%
+% The \meta{location} argument specifies the coordinates, in the hex
+% coordinate system where to put the hex. More about the coordinate
+% system is given in \sectionname~\ref{sec:hex:cs}. Note, the numbers
+% starts from the lower--left corner.
+%
+% The elements are rendered in the following order
+% \begin{enumerate}
+% \item The terrain, clipped to the hex shape.
+% \item The hex, including circumference and fill
+% \item The ridges, if any
+% \item The label, if any
+% \item Extra graphics clipped to the hex
+% \item Town, if any
+% \item Extra graphics which may extend beyond the confines of the
+% hex.
+% \end{enumerate}
+%
+% \figurename~\ref{fig:hex:parts} illustrates some of the components
+% of a hex. The hexes are 2 unit lengths wide. Typically, the unit
+% length is one centimetre, which means the hexes are roughly
+% $2\,\text{cm}\times 1.86\,\text{cmm}$ --- or roughly $3/4"\times
+% 3/4"$ --- big. This allows the hexes to fit chits (see
+% Section~\ref{sec:chit}) of size $12\,\mathrm{mm}\times12\,\mathrm{mm}$
+% --- or roughly $1/2"\times1/2"$ --- nicely. If one wants larger
+% chits or hexes one should take care to scale both by a similar
+% amount.
+%
+% {\makeatletter\global\let\hexyy\hex@yy}
+% \tikzset{wg arrow/.style={red!50!black,thick,<-}}
+% \begin{figure}[htbp]
+% \centering
+% \begin{tikzpicture}[scale=2]
+% \hex[terrain={woods},label={text=A1},color=blue](r=0,c=0)
+% \draw[red]($(hex cs:e=N)-(0,.2)$)
+% ellipse [x radius=.8, y radius=.4] node(label){};
+% \draw[wg arrow] (label)--(1.3,1.2)
+% node[align=right,anchor=south]{\texttt{label=\{text=A1\}}};
+% \draw[wg arrow] (0,0)--(-2,-1)node[align=right,anchor=base east]{
+% \texttt{terrain=\{woods\}}};
+% \pic[draw,transform shape]{wg/x axis={-1,1, -1.2,{0},}};
+% \pic[draw,transform shape]{wg/y axis={1.2, -1,1, {0},{-\hexyy,\hexyy}}};
+% \end{tikzpicture}
+% \caption{Hex parts. The bar on the bottom and to the right
+% indicate two units of length.}
+% \label{fig:hex:parts}
+% \end{figure}
+%
+% \subsection{Styling hexes}
+%
+% Typical \TikZ{} options can be passed to the \cs{hex} macro. For
+% example, if you want to draw the hex borders in red, simply pass
+% \spec{draw=red} in the \oarg{optional} arguments to
+% \cs{hex}. Individual parts of the hexes can be styled separately.
+% the default style used by \cs{hex} is \spec{tikz/hex/hex}. Users
+% can redefine this style to suit their needs. If one does not want
+% to change the default style, or pass the same argument to all
+% \cs{hex}s one can define the style \spec{tikz/every hex}. For example,
+% if one wants to auto label all hexes, one can do
+%
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \begin{scope}[every hex/.style={label=auto}]
+% % Hexes
+% \end{scope}
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% \subsection{Hex coordinate system}
+% \label{sec:hex:cs}
+%
+% The package defines a coordinate system based on hexes. The centre
+% of a hex is specified as \meta{column}-\meta{row} pairs, while
+% vertexes and mid-point on edges can be specified separately. The
+% syntax of the coordinates is
+%
+% \begin{Syntax}
+% (hex cs:row=\meta{hex-row},column=\meta{hex-column},vertex=\meta{vertex},edge=\meta{edge})
+% \end{Syntax}
+%
+% where \meta{vertex} and \meta{edge} are optional. The hex row and
+% column defaults both to 0 and can be decimal numbers. The
+% \spec{row}, \spec{column}, \spec{vertex}, and \spec{edge} keywords
+% may be shorted to \spec{r}, \spec{c}, \spec{v}, and \spec{e},
+% respectively. Possible vertexes and edges are listed in
+% \tablename~\ref{tab:hex:ve}.
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{m{.3\linewidth}m{.65\linewidth}}
+% \begin{tikzpicture}
+% \hex(r=0,c=0)
+% \foreach \v in {E,NE,NW,W,SW,SE}{
+% \fill(hex cs:v=\v) circle(0.05);
+% \node[inner sep=2pt] (v\v) at ($1.6*(hex cs:v=\v)$){\spec{v=\v}};
+% \draw[<-](hex cs:v=\v)--(v\v); }
+% \foreach \e in {NE,N,NW,SW,S,SE}{
+% \fill(hex cs:e=\e) circle(0.05);
+% \node[inner sep=2pt] (e\e) at ($1.6*(hex cs:e=\e)$) {\spec{e=\e}};
+% \draw[<-](hex cs:e=\e) -- (e\e);}
+% \end{tikzpicture}
+% &
+% \begin{tabular}{|ccr|ccr|}
+% \hline
+% \rowcolor{headbg}
+% \multicolumn{2}{c}{\color{headfg}\spec{vertex=}}
+% & {\color{headfg}\textbf{Angle}}
+% & \multicolumn{2}{c}{\color{headfg}\spec{edge=}}
+% & {\color{headfg}\textbf{Angle}}
+% \\
+% \hline
+% \rowcolor{white}
+% \spec{east} & \spec{E} & $ 0^{\circ}$ &
+% \spec{north east} & \spec{NE} & $ 30^{\circ}$\\
+% \spec{north east} & \spec{NE} & $ 60^{\circ}$ &
+% \spec{north} & \spec{N} & $ 90^{\circ}$\\
+% \spec{north west} & \spec{NW} & $120^{\circ}$ &
+% \spec{north west} & \spec{NW} & $150^{\circ}$\\
+% \spec{west} & \spec{W} & $180^{\circ}$ &
+% \spec{south west} & \spec{SW} & $210^{\circ}$\\
+% \spec{south west} & \spec{SW} & $240^{\circ}$ &
+% \spec{south} & \spec{S} & $270^{\circ}$\\
+% \spec{south east} & \spec{SE} & $300^{\circ}$ &
+% \spec{south east} & \spec{SE} & $330^{\circ}$\\
+% \hline
+% \end{tabular}
+% \end{tabular}
+% \caption{Vertex and edge positions}
+% \label{tab:hex:ve}
+% \end{table}
+%
+% In \figurename~\ref{fig:hex:cs} is an example of a picture drawn in
+% this coordinate system.
+%
+% \begin{figure}[htbp]
+% \begin{tabular}{m{.3\linewidth}m{.65\linewidth}}
+% \begin{tikzpicture}[]
+% \hex[color=lightgray](r=0,c=0)
+% \hex[color=lightgray](r=0,c=1)
+% \hex[color=lightgray](r=1,c=0)
+% \hex[color=lightgray](r=1,c=1)
+% \draw[blue!50!black] (hex cs:r=0,c=0) -- (hex cs:r=1,c=1);
+% \draw[red!50!black] (hex cs:r=0,c=0,vertex=E) --
+% (hex cs:r=1,c=1,edge=north west);
+% \fill (hex cs:r=0,c=0) circle(.1)
+% node[color=gray,anchor=north] {\spec{(r=0,c=0)}};
+% \fill (hex cs:r=1,c=1) circle(.1)
+% node[color=gray,anchor=west] {\spec{(r=1,c=1)}};
+% \fill (hex cs:r=0,c=0,v=east) circle(.1)
+% node[color=gray,anchor=north west]{\spec{(r=0,c=0,v=E)}};
+% \fill (hex cs:r=1,c=1,e=north west) circle(.1)
+% node[color=gray,anchor=south]{
+% \spec{(r=1,c=1,e=NW)}};
+% \fill[lightgray](hex cs:r= .3,c= .3) circle(0.1)
+% node[anchor=south,inner sep=0]{(0.3,0.3)};
+% \fill[lightgray](hex cs:r=1.3,c= .3) circle(0.1)
+% node[anchor=south,inner sep=0]{(1.3,0.3)};
+% \fill[lightgray](hex cs:r=0.3,c=1.3) circle(0.1)
+% node[anchor=south,inner sep=0]{(0.3,1.3)};
+% \fill[lightgray](hex cs:r=1.3,c=1.3) circle(0.1)
+% node[anchor=south,inner sep=0]{(1.3,1.3)};
+% \end{tikzpicture}
+% &
+% Hexes and lines drawn with
+% \begin{verbatim}
+% \hex(0,0)\hex(0,1)\hex(1,0)\hex(1,1)
+% \draw[blue!50!black] (hex cs:r=0,c=0) --
+% (hex cs:r=1,c=1);
+% \draw[red!50!black] (hex cs:r=0,c=0,vertex=E) --
+% (hex cs:r=1,c=1,edge=NW);
+% \fill[lightgray](hex cs:r= .3,c= .3) circle(0.1);
+% \fill[lightgray](hex cs:r=1.3,c= .3) circle(0.1);
+% \fill[lightgray](hex cs:r=0.3,c=1.3) circle(0.1);
+% \fill[lightgray](hex cs:r=1.3,c=1.3) circle(0.1);
+% \end{verbatim}
+% \end{tabular}
+% \caption{Hex coordinate system}
+% \label{fig:hex:cs}
+% \end{figure}
+%
+%
+% \textbf{Important}: When the horizontal distance to the centre of a
+% hex becomes less than $-\cos60^{\circ}$ or larger than
+% $b-\cos60^{\circ}$ we effectively have a new hex column, and the
+% coordinates are shifted upward or downward for smaller or larger
+% numbers. Figure~\ref{fig:hex:coord:nb} illustrates. this. This can
+% make it a little hard to specify coordinates relative to a hex
+% centre. Alternatively one may use vertex or edge specifciations
+% together with a relative offset in those directions.
+% \
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \begin{scope}[scale=2,every node/.style={inner sep=0}]
+% \hex
+%
+% \begin{scope}[red,fill]
+% \draw[anchor=south east](hex cs:c=-0.66,r=-0.67)circle(.01)node{(-2/3,-2/3)};
+% \draw[anchor=south east](hex cs:c=-0.67,r=-0.33)circle(.01)node{(-2/3,-1/3)};
+% \draw[anchor=south east](hex cs:c=-0.67,r=0)circle(.01)node{(-2/3,0)};
+% \draw[anchor=south east](hex cs:c=-0.67,r=0.33)circle(.01)node{(-2/3,1/3)};
+% \draw[anchor=north](hex cs:c=-0.33,r=-0.67)circle(.01)node{(-1/3,-2/3)};
+% \draw[anchor=north](hex cs:c=-0.33,r=-0.33)circle(.01)node{(-1/3,-1/3)};
+% \draw[anchor=south](hex cs:c=-0.33,r=0.33)circle(.01)node{(-1/3,1/3)};
+% \draw[anchor=south](hex cs:c=-0.33,r=0.67)circle(.01)node{(-1/3,2/3)};
+% \draw[anchor=south](hex cs:c=0.33,r=-0.67)circle(.01)node{(1/3,-2/3)};
+% \draw[anchor=south](hex cs:c=0.33,r=-0.33)circle(.01)node{(1/3,-1/3)};
+% \draw[anchor=north](hex cs:c=0.33,r=0.33)circle(.01)node{(1/3,1/3)};
+% \draw[anchor=north](hex cs:c=0.33,r=0.67)circle(.01)node{(1/3,2/3)};
+% \draw[anchor=north west](hex cs:c=0.67,r=-0.33)circle(.01)node{(2/3,-1/3)};
+% \draw[anchor=north west](hex cs:c=0.67,r=0)circle(.01)node{(2/3,0)};
+% \draw[anchor=north west](hex cs:c=0.67,r=0.33)circle(.01)node{(2/3,1/3)};
+% \draw[anchor=north west](hex cs:c=0.67,r=0.67)circle(.01)node{(2/3,2/3)};
+% \end{scope}
+%
+% \hex(c=2)
+% \begin{scope}[blue,fill]
+% \draw[anchor=south west](hex cs:c=2,v=NE,o=0.5)circle(.01)node{NE by 1/2};
+% \draw[anchor=south west](hex cs:c=2,v=NE,o=1.0)circle(.01)node{NE by 1};
+% \draw[anchor=south west](hex cs:c=2,v=NE,o=1.5)circle(.01)node{NE by 3/2};
+% \draw[anchor=south east](hex cs:c=2,v=NW,o=0.5)circle(.01)node{NW by 1/2};
+% \draw[anchor=south east](hex cs:c=2,v=NW,o=1.0)circle(.01)node{NW by 1};
+% \draw[anchor=south east](hex cs:c=2,v=NW,o=1.5)circle(.01)node{NW by 3/2};
+% \draw[anchor=north](hex cs:c=2,v=W,o=0.5)circle(.01)node{W by 1/2};
+% \draw[anchor=south](hex cs:c=2,v=W,o=1.0)circle(.01)node{W by 1};
+% \draw[anchor=north](hex cs:c=2,v=W,o=1.5)circle(.01)node{W by 3/2};
+% \draw[anchor=north east](hex cs:c=2,v=SW,o=0.5)circle(.01)node{SW by 1/2};
+% \draw[anchor=north east](hex cs:c=2,v=SW,o=1.0)circle(.01)node{SW by 1};
+% \draw[anchor=north east](hex cs:c=2,v=SW,o=1.5)circle(.01)node{SW by 3/2};
+% \draw[anchor=north west](hex cs:c=2,v=SE,o=0.5)circle(.01)node{SE by 1/2};
+% \draw[anchor=north west](hex cs:c=2,v=SE,o=1.0)circle(.01)node{SE by 1};
+% \draw[anchor=north west](hex cs:c=2,v=SE,o=1.5)circle(.01)node{SE by 3/2};
+% \draw[anchor=north](hex cs:c=2,v=E,o=0.5)circle(.01)node{E by 1/2};
+% \draw[anchor=south](hex cs:c=2,v=E,o=1.0)circle(.01)node{E by 1};
+% \draw[anchor=north](hex cs:c=2,v=E,o=1.5)circle(.01)node{E by 3/2};
+% \end{scope}
+% \end{scope}
+% \end{tikzpicture}
+% \caption{Relative coordinates}
+% \label{fig:hex:coords:nb}
+% \end{figure}
+% \subsection{Terrains}
+% \label{sec:hex:terrain}
+%
+% Terrains are rendered using tile images or \TikZ{}
+% \texttt{pic}tures. The available terrains are shown in
+% \tablename{}s~\ref{tab:hex:terrain:image}
+% and~\ref{tab:hex:terrain:pic}. Users can provide their own tile
+% images and select those via \texttt{terrain=\{image=\meta{image}\}}
+% or defined \TikZ{} \texttt{pic}tures and select those via
+% \texttt{terrain=\{pic=\meta{pic-name}\}}. In all cases, the terrain
+% graphics is clipped to the hex.
+%
+% The terrain of a hex is selected via the multi-valued key
+% \spec{terrain}. Sub-keys of this key are
+%
+% \begin{description}
+% \item[\spec{image=}\meta{graphics-file}] Specifies terrain tile
+% image \meta{graphics-file}.
+% \item[\spec{pic=}\meta{picture-key}] Specifies terrain tile \TikZ{}
+% \spec{pic}ture.
+% \item[\spec{code=}\meta{tikz-code}] Any valid \TikZ{} code
+% \item[\spec{clip=}\meta{path(s)}] \TikZ{} path specification to clip
+% the terrain within the hex.
+% \end{description}
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}|ll|m{2cm}|ll|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\textbf{Name}}
+% & {\color{headfg}\texttt{terrain=\{image=\meta{image}\}}}
+% & {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\textbf{Name}}
+% & {\color{headfg}\texttt{terrain=\{image=\meta{image}\}}}\\
+% \hline
+% &&&&&\\[-1ex]
+% \tikz{\hex[](r=0,c=0) }
+% & Clear
+% & \texttt{}
+% & \tikz{\hex[terrain={image=beach}](r=0,c=0) }
+% & Beach
+% & \texttt{\{image=beach\}}\\
+% \tikz{\hex[terrain={image=light_woods}](r=0,c=0) }
+% & Light woods
+% & \texttt{\{image=light\_woods\}}
+% & \tikz{\hex[terrain={image=woods}](r=0,c=0)}
+% & Woods
+% & \texttt{\{image=woods\}}\\
+% \tikz{\hex[terrain={image=rough}](r=0,c=0) }
+% & Rough
+% & \texttt{\{image=rough\}}
+% & \tikz{\hex[terrain={image=swamp}](r=0,c=0) }
+% & Swamp
+% & \texttt{\{image=swamp\}}\\
+% \tikz{\hex[terrain={image=mountains}](r=0,c=0) }
+% & Mountains
+% & \texttt{\{image=mountains\}}
+% & \tikz{\hex[fill=blue!40!white](r=0,c=0) }
+% & Sea
+% & \texttt{\{image=sea\}}\\
+% \hline
+% \end{tabular}
+% \caption{Terrains specified via tile images}
+% \label{tab:hex:terrain:image}
+% \end{table}
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}|l|l|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\textbf{Name}}
+% & {\color{headfg}\texttt{terrain=\{pic=\meta{image}\}}}\\
+% \hline
+% &&\\[-1ex]
+% \tikz{\hex[terrain={pic=hex/terrain/mountain,line width=3pt}](r=0,c=0) }
+% & Mountains
+% & \texttt{\{pic=hex/terrain/mountain,line width=3pt\}}\\
+% \hline
+% \end{tabular}
+% \caption{Terrains specified via \TikZ{} \spec{pic}tures}
+% \label{tab:hex:terrain:pic}
+% \end{table}
+%
+% The terrain can be clipped by the sub-key \spec{clip}. This can be
+% useful if the game specifies movement costs in terms of hex-edge
+% crossing, for example \emph{First Blood}~\cite{fb}. In that case, a
+% hex may be, for example, a jungle hex, but some edges a clear. Thus
+% movements across such an edge would count as moving into clear
+% territory while moving over other edges will count as moving into a
+% jungle. This is, of course, not how most games count movement
+% costs, but this package nonetheless facilitates such rules.
+% \tablename~\ref{tab:hex:terrain:clip} shows a few examples of
+% predefined clippings of terrain.
+%
+% Users can define \TikZ{} \spec{pic}tures that specify clipping paths
+% as needed. For example, one could add clipping to the terrain to
+% ensure that other graphics in the hex stands out.
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}m{.3\linewidth}|m{2cm}m{.3\linewidth}|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\texttt{terrain=\{clip=,...\}}}
+% & {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\texttt{terrain=\{clip=,...\}}}\\
+% \hline
+% &&&\\
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE\}}
+% & \tikz{\hex[terrain={woods,
+% clip={
+% hex/large sextant=NE,
+% hex/large sextant=N}}](r=0,c=0) }
+% & \spec{\{hex/large sextant=NE,hex/large sextant=N\}}\\
+% \hline
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=N}}](r=0,c=0) }
+% & \spec{\{hex/sextant=N\}}
+% & \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW\}}\\
+% \hline
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NW}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NW\}}
+% & \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW\}}\\
+% \hline
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=SW}}](r=0,c=0) }
+% & \spec{\{hex/sextant=SW\}}
+% & \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW,
+% hex/sextant=S}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW,
+% hex/sextant=S\}}\\
+% \hline
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=S}}](r=0,c=0) }
+% & \spec{\{hex/sextant=S\}}
+% & \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW,
+% hex/sextant=S,
+% hex/sextant=SE}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW,
+% hex/sextant=S,
+% hex/sextant=SE\}}\\
+% \hline
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=SE}}](r=0,c=0) }
+% & \spec{\{hex/sextant=SE\}}
+% & \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW,
+% hex/sextant=S,
+% hex/sextant=SE,
+% hex/sextant=C}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=NW,
+% hex/sextant=SW,
+% hex/sextant=S,
+% hex/sextant=SE,
+% hex/sextant=C\}}\\
+% \hline
+% \tikz{\hex[terrain={woods,
+% clip={hex/sextant=C}}](r=0,c=0) }
+% & \spec{\{hex/sextant=C\}}
+% & \tikz{\hex[terrain={woods,
+% clip={hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=S,
+% hex/sextant=SE,
+% hex/sextant=C}}](r=0,c=0) }
+% & \spec{\{hex/sextant=NE,
+% hex/sextant=N,
+% hex/sextant=S,
+% hex/sextant=SE,
+% hex/sextant=C\}}\\
+% \hline
+% \end{tabular}
+% \caption{Terrain clipped via \spec{clip} sub-key}
+% \label{tab:hex:terrain:clip}
+% \end{table}
+%
+% \subsubsection{Styling terrains}
+%
+% Terrains use the key \spec{tikz/hex/terrain} to render the
+% terrains. This is mainly useful for terrains made from \TikZ{}
+% \spec{pic}tures.
+%
+% \subsection{Ridges}
+% \label{sec:hex:ridges}
+%
+% Ridges, or hill or mountain slopes, can be added to a hex via the
+% keyword \spec{ridges}. The keyword takes a list of hex edges and
+% generates symbology for the ridge on the chosen edges. Note that
+% the edges does not have to be continuous, as illustrated in the
+% bottom right of \tablename~\ref{tab:hex:ridges}, nor in any
+% particular order. The edges are specified as compass direction
+%
+% \begin{Syntax}
+% north east, north, north west, south west, south, south east.\\
+% NE, N, NW, SW, S, SE
+% \end{Syntax}
+%
+% \tablename~\ref{tab:hex:ridges} shows some examples.
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}|c|m{2cm}|c|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\spec{ridges=}}
+% & {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\spec{ridges=}}\\
+% \hline
+% &&&\\[-1ex]
+% \tikz{\hex[ridges=NE]}
+% & \spec{NE}
+% & \tikz{\hex[ridges={NE,N}]}
+% & \spec{NE,N}\\
+% \tikz{\hex[ridges=N]}
+% & \spec{N}
+% & \tikz{\hex[ridges={NE,N,NW}]}
+% & \spec{NE,N,NW}\\
+% \tikz{\hex[ridges=NW]}
+% & \spec{NW}
+% & \tikz{\hex[ridges={NE,N,NW,SW}]}
+% & \spec{NE,N,NW,SW}\\
+% \tikz{\hex[ridges=SW]}
+% & \spec{SW}
+% & \tikz{\hex[ridges={NE,N,NW,SW,S,line width=3pt}]}
+% & \spec{NE,N,NW,SW,S,line width=3pt}\\
+% \tikz{\hex[ridges=S]}
+% & \spec{S}
+% & \tikz{\hex[ridges={NE,N,NW,SW,S,SE,color=brown!70!black}]}
+% & \spec{NE,N,NW,SW,S,SE,color=brown!70!black}\\
+% \tikz{\hex[ridges=SE]}
+% & \spec{SE}
+% & \tikz{\hex[ridges={N,S,NW,SE},terrain={rough}]}
+% & \spec{N,S,NW,SE}\\
+% \hline
+% \end{tabular}
+% \caption{Ridges}
+% \label{tab:hex:ridges}
+% \end{table}
+%
+% \subsubsection{Styling ridges}
+%
+% Every ridge is drawn with the style \spec{tikz/hex/ridges}. Users
+% can customise this style. The default is to draw thin black wave
+% lines (\TikZ{} decoration \spec{waves}). The default style also
+% takes care to auto scale line widths.
+%
+% \subsection{Labels}
+% \label{sec:hex:label}
+%
+% Labels can be placed on the hexes via the keyword \spec{label}. The
+% label can either be auto-generated or given explicitly.
+% \tablename~\ref{tab:hex:label} shows the various choices.
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}|l|c|m{6cm}|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\textbf{Name}}
+% & {\color{headfg}\textbf{Column/Row}}
+% & {\color{headfg}\spec{label=}}\\
+% \hline
+% &&&\\[-1ex]
+% \tikz{\hex[label=none](r=0,c=0) }
+% & No label
+% & n/a
+% & \spec{none}\\
+% \tikz{\hex[label={text=B10}](r=0,c=0) }
+% & User specified
+% & n/a
+% & \spec{text=B10}\\
+% \tikz{\hex[label={color=blue,text=A1}](r=0,c=0) }
+% & User specified
+% & n/a
+% & \spec{\{color=blue,text=A1\}}\\
+% \tikz{\hex[label=auto](r=3,c=9) }
+% & Two-digit, zero padded numbers
+% & 9/3
+% & \spec{auto}\\
+% \tikz{\hex[label={auto=alpha column,font=\noexpand\rmfamily}](r=3,c=2)}
+% & Column letter, number row
+% & 2/3
+% & \spec{\{auto=alpha column,font=\cs{noexpand}\cs{rmfamily}\}}
+% \textsuperscript{$\dag$}\\
+% \tikz{\hex[label={auto=alpha 2 column,anchor=north east}](r=24,c=6) }
+% & Two letter column, two digit row
+% & 6/24
+% & \spec{\{auto=alpha 2 column,anchor=north east\}}\\
+% \hline
+% \end{tabular}
+% \caption{Labels\newline
+% \textsuperscript{$\dag$}When specifying macros as key values in
+% the options, for example the value \cs{rmfamily} for the key
+% \spec{font} above, we have to put a \cs{noexpand} in front if the
+% macro. This is to prevent early expansion of the macro, which
+% would cause errors. A minor nuisance.}
+% \label{tab:hex:label}
+% \end{table}
+%
+% The option \spec{auto=inv y x plus 1} will label the rows
+% inversely, and add one to the column number. This requires that the
+% key \spec{tikz/max hex row} has been set to the largest row number
+% used.
+%
+% In addition to the sub-keys \spec{none}, \spec{auto}, and
+% \spec{text}, one can also specify the following keys
+%
+% \begin{description}
+% \item[\keyval{place}{\meta{coordinates}}] specifies the Location of
+% label within the hex. The anchor point of the text will be placed
+% at this point.
+% \item[\oarg[options]] at the start of the option (but inside braces
+% \spec{\{\textellipsis\}}) can be used to give additional style
+% options.
+% \end{description}
+%
+% \subsubsection{Styling labels}
+%
+% All labels use the style \spec{tikz/hex/label}. By default, this
+% places the label at the top of the hex, and renders the text as gray
+% script sized text. Users can customise this style. If a user does
+% not want to change the default style, or want to pass the same
+% option to all labels, then one can set the key \spec{tikz/every
+% label} to those options.
+%
+%
+% \subsection{Towns}
+% \label{sec:hex:town}
+%
+% Towns in hexes are made via the key \spec{town}. This key takes
+% several sub-keys, as illustrated in \tablename~\ref{tab:hex:town}
+%
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}l|m{2cm}l|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\spec{town=}}
+% & {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\spec{town=}}\\
+% \hline
+% &&&\\[-1ex]
+% \tikz{\hex[town](r=0,c=0) }
+% & \spec{}
+% & \tikz{\hex[town={name=Copenhagen}](r=0,c=0) }
+% & \spec{\{name=Copenhagen\}}\\
+% \tikz{\hex[town={pic=hex/town/city}](r=0,c=0) }
+% & \spec{\{pic=hex/town/city\}}
+% & \tikz{\hex[town={red,pic=hex/town/city}](r=0,c=0) }
+% & \spec{\{red,pic=hex/town/city\}}\\
+% \tikz{\hex[town={fill=red}](r=0,c=0) }
+% & \spec{\{fill=red\}}
+% & \tikz{\hex[town={pic=hex/town/city,name=London}](r=0,c=0) }
+% & \spec{\{name=London\}}\\
+% \tikz{\hex[town={color=red,name=Paris}](r=0,c=0) }
+% & \spec{\{red,name=Paris\}}
+% &\tikz{\hex[town={above=0.8,name=Berlin}](r=0,c=0) }
+% & \spec{\{above=0.8,name=Berlin\}}\\
+% \tikz{\hex[town={place={(.2,.2)}}](r=0,c=0) }
+% & \spec{\{place=\{(.2,.2)\}\}}
+% &\tikz{\hex[town={font=\noexpand\itshape,name=Amsterdam}](r=0,c=0) }
+% & \spec{\{font=\cs{noexpand}\cs{itshape},name=Amsterdam\}}
+% \textsuperscript{$\dag$}\\
+% \hline
+% \end{tabular}
+% \caption{Towns\newline
+% \textsuperscript{$\dag$}When specifying macros as key values in
+% the options, for example the value \cs{rmfamily} for the key
+% \spec{font} above, we have to put a \cs{noexpand} in front if the
+% macro. This is to prevent early expansion of the macro, which
+% would cause errors. A minor nuisance.}
+% \label{tab:hex:town}
+% \end{table}
+%
+% The sub-keys available for the \spec{town} key are
+%
+% \begin{description}
+% \item[\keyval{pic}{\meta{town-pic}}] The name of a \TikZ{}
+% \spec{pic}ture. Currently defined are \spec{hex/town/town} and
+% \spec{hex/town/city}. Users can provide alternate definitions or new types
+% by defining \TikZ{} \spec{pic}tures.
+% \item[\keyval{place}{\meta{coordinates}}] Location of label within
+% the hex. The anchor point of the text will be placed at this
+% point.
+% \item[\keyval{name}{\meta{name}}] Name of town
+% \end{description}
+%
+% \subsubsection{Styling towns}
+%
+% Towns uses two styles: \spec{tikz/hex/town} for the town graphics,
+% and \spec{tikz/hex/town name} for the name of the town. In addition,
+% a user may set the key \spec{tikz/every hex town} to contain options
+% to be passed to all towns.
+%
+% \subsection{Extra graphics for hexes}
+% \label{sec:hex:extra}
+%
+% Additional graphics for hexes can be added by the two keys
+% \spec{extra} and \spec{extra clipped}. The difference between the
+% two are that graphics specified by \spec{extra clipped} are clipped
+% (restricted) to the hex, while graphics given by \spec{extra} may
+% extend beyond the hex. Both keys accept a comma separated list of
+% arguments, where each element has the syntax
+%
+% \begin{Syntax}
+% \oarg{options}\parg{placement}\meta{picture}
+% \end{Syntax}
+%
+% Both \meta{options} and \meta{placement} are optional, and specifies
+% keys to draw \meta{picture} with and the relative location in the
+% hex, respectively. The required argument \meta{picture} must name a
+% \TikZ{} \spec{pic}ture, for example \spec{hex/fortress}. This can
+% be useful for marking hexes on the board. For example to mark a
+% set-up hex for one faction of the game.
+%
+% One could for example define the following pictures to define set-up
+% points for a Sovjet and German faction
+%
+% \tikzset{
+% setup/sovjet/.pic={
+% \path[fill=red,draw=yellow,pic actions]
+% ( 90:.4)--(126:.15)--
+% (162:.4)--(198:.15)--
+% (234:.4)--(270:.15)--
+% (306:.4)--(342:.15)--
+% ( 18:.4)--( 54:.15)--cycle;},
+% setup/german/.pic={
+% \path[fill,pic actions]
+% (-.4, -.1) rectangle(.4,.1)
+% (-.1, -.4) rectangle(.1,.4);
+% \path[draw,pic actions]
+% (-.4,-.2) -- (-.2,-.2) -- (-.2,-.4)
+% (-.4, .2) -- (-.2, .2) -- (-.2, .4)
+% ( .4, .2) -- ( .2, .2) -- ( .2, .4)
+% ( .4,-.2) -- ( .2,-.2) -- ( .2,-.4);},
+% foo/large/.pic={
+% \path[fill=gray,pic actions] (-1,-.5) rectangle(1,.5);},
+% }
+% \begin{verbatim}
+% setup/sovjet/.pic={
+% \path[fill=red,draw=yellow,pic actions]
+% ( 90:.4)--(126:.15)--
+% (162:.4)--(198:.15)--
+% (234:.4)--(270:.15)--
+% (306:.4)--(342:.15)--
+% ( 18:.4)--( 54:.15)--cycle;},
+% setup/german/.pic={
+% \path[fill,pic actions]
+% (-.4, -.1) rectangle(.4,.1)
+% (-.1, -.4) rectangle(.1,.4);
+% \path[draw,pic actions]
+% (-.4,-.2) -- (-.2,-.2) -- (-.2,-.4)
+% (-.4, .2) -- (-.2, .2) -- (-.2, .4)
+% ( .4, .2) -- ( .2, .2) -- ( .2, .4)
+% ( .4,-.2) -- ( .2,-.2) -- ( .2,-.4);}
+% foo/large/.pic={
+% \path[fill=gray,pic actions] (-1,-.5) rectangle(1,.5);},
+% }
+% \end{verbatim}
+%
+% We can place extra graphics in hexes as shown in
+% \tablename~\ref{tab:hex:extra}.
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{2cm}l|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\spec{extra=}}\\
+% \hline
+% &\\[-1ex]
+% \tikz{\hex[extra=hex/fortress](r=0,c=0) }
+% & \spec{hex/fortress}\\
+% \tikz{\hex[extra=setup/sovjet](r=0,c=0) }
+% & \spec{setup/sovjet}\\
+% \tikz{\hex[extra=setup/german](r=0,c=0) }
+% & \spec{setup/german}\\
+% \tikz{\hex[extra={setup/german,hex/fortress}](r=0,c=0) }
+% & \spec{\{setup/german,hex/fortress\}}\textsuperscript{$\dag$}\\
+% \tikz{\hex[extra={[{line width=2pt,color=brown}]hex/fortress 2}](r=0,c=0) }
+% & \spec{\{[\{line width=2pt,brown\}]
+% fortress 2\}}\textsuperscript{$\ddag$}\\
+% \tikz{\hex[extra={[shift={(.2,.2)}]setup/sovjet}](r=0,c=0) }
+% & \spec{\{[shift=\{(.2,.2)\}]setup/sovjet\}}\textsuperscript{$\ddag$}\\
+% \tikz{\hex[extra={[{shift={(.2,.2)},scale=.5,color=gray}]setup/german}](r=0,c=0) }
+% & \spec{\{[\{shift=\{(.2,.2)\},scale=.5,color=gray\}]
+% setup/german\}}\textsuperscript{$\ddag$}\\
+% \tikz{\hex[extra=foo/large]} & \spec{foo/large}\\
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & {\color{headfg}\spec{extra clipped=}}\\
+% \hline
+% &\\[-1ex]
+% \iftrue
+% \tikz{\hex[extra clipped=foo/large]} & \spec{foo/large}\\
+% \fi
+% \hline
+% \end{tabular}
+% \caption{Hex extra graphics. Note that in the last line we use
+% the graphics \spec{foo/large} with \spec{extra clipped} (compare
+% to line just above) to restrict the graphics to the hex.\newline%
+% \textsuperscript{$\dag$}When specifying more than one item, the
+% list must be enclosed in braces
+% (\spec{\{\textellipsis\}})\newline%
+% \textsuperscript{$\ddag$}When an item in the list of \spec{extra}
+% contains a comma (\spec{,}), for example in a list of graphics
+% options, then we need to enclose the inner list \emph{and} the
+% whole list in braces (\spec{\{\textellipsis\}}) to protect against
+% unwanted expansion.}
+% \label{tab:hex:extra}
+% \end{table}
+%
+% To finish off this part on hexes and what we can do with those, we
+% generate a map in \figurename~\ref{fig:hex:placing}.
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tabular}{m{.3\linewidth}m{.68\linewidth}}
+% \begin{tikzpicture}[scale=.8]
+% \hex[town={pic=hex/town/city,name=Berlin}](r=0,c=0)
+% \hex[] (r=0,c=1)
+% \hex[] (r=0,c=2)
+% \hex[terrain={swamp},label=auto] (r=0,c=3)
+% \hex[] (r=1,c=0)
+% \hex[terrain={light woods}] (r=1,c=1)
+% \hex[terrain={woods}] (r=1,c=2)
+% \hex[terrain={swamp}] (r=1,c=3)
+% \hex[town={name=Freiburg},extra=hex/fortress](r=2,c=0)
+% \hex[extra=hex/fortress] (r=2,c=1)
+% \hex[terrain={rough}] (r=2,c=2)
+% \hex[] (r=2,c=3)
+% \hex[terrain={mountains}] (r=3,c=0)
+% \hex[terrain={mountains}] (r=3,c=1)
+% \hex[terrain={mountains}] (r=3,c=2)
+% \hex[] (r=3,c=3)
+% \end{tikzpicture}
+% &
+% \begin{verbatim}
+% \hex[town={pic=hex/town/city,name=Berlin}] (r=0,c=0)
+% \hex[] (r=0,c=1)
+% \hex[] (r=0,c=2)
+% \hex[terrain={swamp},label=auto] (r=0,c=3)
+% \hex[] (r=1,c=0)
+% \hex[terrain={light woods}] (r=1,c=1)
+% \hex[terrain={woods}] (r=1,c=2)
+% \hex[terrain={swamp}] (r=1,c=3)
+% \hex[town={name=Freiburg},extra=hex/fortress](r=2,c=0)
+% \hex[extra=hex/fortress] (r=2,c=1)
+% \hex[terrain={rough}] (r=2,c=2)
+% \hex[] (r=2,c=3)
+% \hex[terrain={mountains}] (r=3,c=0)
+% \hex[terrain={mountains}] (r=3,c=1)
+% \hex[terrain={mountains}] (r=3,c=2)
+% \hex[] (r=3,c=3)
+% \end{verbatim}
+% \end{tabular}
+% \caption{Placing hexes}
+% \label{fig:hex:placing}
+% \end{figure}
+%
+% \subsection{Rivers, borders, and roads}
+%
+% Rivers and borders follow the hex sides and are added to the current
+% \spec{tikkzpicture} using \cs{river} and \cs{border} macros
+% respectively. They are specified as regular \TikZ{} paths. It is
+% useful to utilise the hex coordinate system for this.
+%
+% \begin{MacroSyntax}{\river,\border}
+% \cs{river}\oarg{options} \meta{path};\\
+% \cs{border}\oarg{options} \meta{path};
+% \end{MacroSyntax}
+%
+% Rivers are essentially borders, but are randomized to giver a more
+% aesthetically pleasing output.
+%
+% Roads and railroads typically go from hex--center to hex--center,
+% and are added using the macro \cs{road}. The road or railroad is
+% specified via a regular \TikZ{} path.
+%
+% \begin{MacroSyntax}{\addriver}
+% \cs{road}\oarg{options} \meta{path};\\
+% \cs{railroad}\oarg{options} \meta{path};
+% \end{MacroSyntax}
+%
+% Towns and cities conveniently serve as places to split up a road at.
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tikzpicture}
+% \testmap
+% \end{tikzpicture}
+% \caption{Adding rivers, boarders, and roads}
+% \end{figure}
+%
+% \subsection{Board clipping and frame}
+%
+% In the river, border, and road example above, the roads extend beyond
+% the hexes, which does not look very nice. One way to deal with this,
+% is to draw a clipping box around the hexes
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tabular}{m{.\linewidth}m{.\linewidth}}
+% \begin{tikzpicture}
+% \draw[clip](-.5,-.5) rectangle (5,5);
+% \testmap
+% \end{tikzpicture}
+% &
+% \begin{verbatim}
+% \draw[clip](-.5,-.5) rectangle (5,5);
+% \testmap
+% \end{verbatim}
+% \end{tabular}
+% \caption{Clipping for a manual using a \TikZ{}
+% \cs{draw}\spec{[clip]} command.}
+% \label{fig:hex:boxclip}
+% \end{figure}
+%
+% This technique works fine for examples in a manual, it has a
+% somewhat displeasing effect for a full board. The package therefor
+% defines the macro \cs{boardclip} which clips the graphics
+% according to the defined hexes.
+%
+% \begin{MacroSyntax}{\boardclip}
+% \cs{boardclip}\parg{lower-left}\parg{upper-right}\marg{options}
+% \end{MacroSyntax}
+%
+% A clipping path of that spans from the hex at \meta{lower-lest} to
+% \meta{upper-right}. Note, that both of these arguments should only
+% specify the column and row keys. If \meta{options} is non-empty,
+% then the clipping path is drawn with those options.
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tabular}{m{.4\linewidth}m{.4\linewidth}}
+% \begin{tikzpicture}
+% \begin{scope}
+% \boardclip(c=0,r=0)(c=3,r=3){}
+% \testmap
+% \end{scope}
+% \end{tikzpicture}
+% &
+% \begin{verbatim}
+% \begin{scope}
+% \boardclip(c=0,r=0)(c=3,r=3){}
+% \testmap
+% \end{scope}
+% \end{verbatim}
+% \end{tabular}
+% \caption{Snug--fit clipping of board using the macro \cs{boardclip}}
+% \label{fig:hex:clip}
+% \end{figure}
+%
+% This is particularly useful together with the \cs{boardframe} macro.
+% This macro will put a frame around the board, optionally with a
+% margin.
+%
+% \begin{MacroSyntax}{\boardframe}
+% \cs{boardframe}\oarg{margin}\parg{lower-left}{upper-right}
+% \end{MacroSyntax}
+%
+% where \meta{lower-left} and \meta{upper-right} are as for
+% \cs{boardclip}. The \meta{margin} must be a number, and specifies an
+% optional margin around the hexes, The argument \meta{options}
+% specifies how the frame is drawn. The idea is to first draw the
+% frame, then the clipping shape, and then the hexes. One should take
+% care to use the \meta{options} argument to \cs{boardclip} to specify
+% a default background color. The frame is drawn with the style
+% \spec{hex/board frame}
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tabular}{m{4.\linewidth}m{4.\linewidth}}
+% \begin{tikzpicture}[hex/border/.append style={color=red},
+% hex/board frame/.style={fill=Tan}]
+% \begin{scope}[every hex/.style={label=auto}]
+% \boardframe[0.5](c=0,r=0)(c=3,r=3){0.5}
+% \boardclip(c=0,r=0)(c=3,r=3){fill=white}
+% \testmap{}
+% \end{scope}
+% \end{tikzpicture}
+% &
+% \begin{verbatim}
+% \begin{scope}[every hex/.style={label=auto}]
+% \boardframe[0.5](c=0,r=0)(c=3,r=3)
+% \boardclip(c=0,r=0)(c=3,r=3){fill=white}
+% \testmap{}
+% \end{scope}
+% \end{verbatim}
+% \end{tabular}
+% \caption{Combining a frame and clipping}
+% \label{fig:hex:frame}
+% \end{figure}
+%
+% The \cs{boardframe} macro prints the position of the rectangle to
+% the log output, if one needs to do some more stuff around the board.
+%
+% \iffalse
+% --------------------------------------------------------------------
+%
+% Chits
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \cleardoublepage
+% \section{Chits}
+%
+% Chits, or playing counters\footnote{Since \TeX{} has the concept of
+% counters as in `\cs{count}' and \LaTeX{}'s `\cs{newcounter}', we
+% choose the name `chit' for playing pieces instead.}, can be made
+% with the macro \cs{chit}. The syntax for rendering a chit is
+%
+% \begin{MacroSyntax}{\chit}
+% \cs{chit}\oarg{key-value-pairs}\parg{location}\parg{name}
+% \end{MacroSyntax}
+%
+% \figurename~\ref{fig:chit:overview} shows an example of a chit.
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tikzpicture}[scale=2]
+% \firstchit
+% \pic[draw,transform shape]{wg/x axis={-1,1, -1.2,{0},{-.6,.6}}};
+% \pic[draw,transform shape]{wg/y axis={1.2,-1,1, {0},{-.6,.6}}};
+% \draw[wg arrow] (-.2,-.4)--(-0.9,-.6)
+% node[anchor=east]{\spec{factors=\{chit/2 factors=\{4,8\}\}}};
+% \draw[wg arrow] (-.5,.2)--(-1.1,.6)
+% node[anchor=east]{\spec{left=\{chit/identifier=\{1\}\}}};
+% \draw[wg arrow] (.5,.2)--(.7,1.2)
+% node[anchor=south west]{\spec{right=\{chit/identifier=\{2\}\}}};
+% \draw[wg arrow] (-.2,.4)--(-1,1)
+% node[anchor=east]{\spec{symbol=\{\meta{nato app 6(c) spec}\}}};
+% \end{tikzpicture}
+% \caption{An example of a chit. The lines below and to the right
+% shows two unit lengths. Other global options used are
+% \spec{color=white} to set the foreground colour, \spec{fill=blue}
+% for the background, and \spec{text=yellow} to set the font colour
+% to yellow. The \spec{symbol} key also contains
+% \spec{frame=\{fill=yellow!50!black} to set the frame fill colour,
+% and \spec{ultra thick} to set the line width of the NATO App6(C)
+% symbol. Note that the line width is automatically scaled.}
+% \label{fig:chit:overview}
+% \end{figure}
+%
+%
+% The example in \figurename~\ref{fig:chit:overview} shows an infantry
+% mountaineer army unit with attack factor 4, and movement factor 8.
+% The NATO App6(c) symbol is given in terms of keywords for the
+% \cs{natoapp} macro (see \sectionname~\ref{sec:nateoapp6c}). The
+% other parts of the chit (\spec{factors}, \spec{left}, \spec{right},
+% and \spec{below}) are rendered onto the chit via \TikZ{}
+% \spec{pic}tures. This allows for a great deal of flexibility in
+% generating chits. For example, above we use the \spec{pic}tures
+% \spec{chit/identifier} and \spec{chit/2 factors} to render the left-
+% and right-hand identifiers, and the factors, respectively.
+%
+% Full frame chits --- that is chits which are not typically
+% designating units or faction specific chits, e.g., a turn marker ---
+% can be made by using the key \spec{full}. In that case, all other
+% keys (\spec{symbol}, \spec{factors}, \spec{left}, \spec{right},
+% and \spec{below}) are ignored. \figurename~\ref{fig:chit:full} shows
+% such an example.
+%
+% \begin{figure}[tbp]
+% \centering
+% \begin{tabular}{m{.45\linewidth}m{.45\linewidth}}
+% \begin{tikzpicture}[scale=2]
+% \turnchit
+% \end{tikzpicture}
+% &
+% chit made with
+% \begin{verbatim}
+% \tikzset{
+% wg/big text/.pic={
+% \node[font=\sffamily\fontsize{18}{0}%
+% \selectfont]{#1};}}
+% \tikz{
+% \chit[full={wg/big text={Turn}},
+% black,fill=yellow!20!white](0,0)}
+% \end{tikzpicture}
+% \end{verbatim}
+% \end{tabular}
+% \caption{An example of a full-frame chit. }
+% \label{fig:chit:full}
+% \end{figure}
+%
+% The size of the chits are $1.2\times1.2$ unit lengths squared. This
+% is tuned so that the chits will fit within the hexes produced by the
+% \cs{hex} command (see \sectionname~\label{sec:hex}). In
+% \figurename~\ref{fig:chit:hex} we illustrate this. Typically the
+% unit is one centimetre. which means the chits are
+% $12\,\text{mm}\times12\,\text{mm}$ --- or roughly $1/2"\times1/2"$,
+% which is a fairly good size for most games.
+%
+% \begin{figure}[tbp]
+% \centering
+% \begin{tikzpicture}
+% \hex
+% \firstchit(hex cs:r=0,c=0)
+% \hex(c=1,r=0)
+% \secondchit(hex cs:r=0,c=1)
+% \hex(c=2,r=0)
+% \thirdchit(hex cs:r=0,c=2)
+% \end{tikzpicture}
+% \caption{Example of chits fit within hexes. }
+% \label{fig:chit:hex}
+% \end{figure}
+%
+% \subsection{Styling chits}
+%
+% Typical \TikZ{} options can be passed to the \cs{chit} macro. For
+% example, if you want to draw the chit with a red foreground, simply pass
+% \spec{draw=red} in the \oarg{optional} arguments to
+% \cs{chits}. Individual parts of the hexes can be styled separately.
+%
+% \paragraph{Important:} To set the colours of the various elements,
+%
+% one should use
+% \begin{description}
+% \item[\spec{color}=\meta{foreground and text}] Selects the
+% foreground colour of lines, text, and so on, including for the
+% NATO App6(C) symbol.
+% \item[\spec{fill}=\meta{background}] Selects the background colour
+% of the full chit. By default this is transparent.
+% \item[\spec{text}=\meta{text foreground}] Selects the colour used
+% for text in the chit. This overrides \spec{color} for text.
+% \item[\spec{draw}=\meta{foreground}] This sets the colour for
+% foreground elements, excluding text.
+% \end{description}
+% \TikZ{} allows one to pass a \meta{colour} as arguments for drawing
+% and understands that as giving the foreground and text colours.
+% However, that key is \emph{deprecated} for this library, as it does
+% not properly propagate through\footnote{The colour
+% \spec{pgfstrokecolor} is not modified by that.}.
+%
+% The styles used by the \spec{left}, \spec{right}, \spec{setup},
+% \spec{factors}, and \spec{symbol} elements are
+% \spec{tikz/chit/left}, \spec{tikz/chit/right}, \spec{tikz/setup},
+% \spec{tikz/factors}, and \spec{tikz/symbol} respectively. A user can
+% redefine these to change the appearance of the chits. For example,
+% one could make the symbol larger by setting a different
+% \spec{scale}, move the factors to the side by changing \spec{shift},
+% and so on.
+%
+% Pictures used by these elements are also styled by
+% similar keys. For example, the picture \spec{chit/identifier} is
+% styled by \spec{tikz/chit/identifier}.
+%
+% In addition, one can define the key \spec{tikz/every chit} to be the
+% default options for all chits.
+%
+% \subsection{Defining preset chit types}
+%
+% One can conveniently pre-define some chit styles. For example,
+% given the style definition
+%
+% \begin{verbatim}
+% \tikzset{
+% my chit/.style={/chit/symbol={[
+% faction=friendly,
+% command=land,
+% main=armoured]},
+% /chit/left={chit/identifier={Mine}},
+% /chit/factors={chit/2 factors={2,4}}}}
+% \end{verbatim}
+%
+% We can use that to make different chits with some commonalities
+% defined by that style. For example
+%
+% \begin{tikzpicture}
+% \chit[my chit](0,-2)
+% \chit[my chit,color=white,fill=red,right={chit/identifier=1}](2,-2)
+% \end{tikzpicture}
+%
+% where, in the second example, we have passed additional options to
+% \cs{chit}. Note that we \emph{must} give the full path to the
+% \spec{chit} keys when defining a style like this.
+%
+% \iffalse
+% --------------------------------------------------------------------
+%
+% NATO App6(c) symbols
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \cleardoublepage
+% \section{NATO App 6(c) symbols}
+% \label{sec:nateoapp6c}
+%
+% The NATO markers are designed to fit within the template shown in
+% \figurename~\ref{fig:natoapp:template}. The template is serves as a
+% placement guide of the the various parts of the NATO marker as
+% illustrated in \figurename{fig:natoapp:usage}.
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tikzpicture}[scale=2]
+% \node[natoapp6c={command=base}] {};
+% \end{tikzpicture}
+% \caption{Template for NATO symbols}
+% \label{fig:natoapp:template}
+% \end{figure}
+%
+% \begin{MacroSyntax}{\natoapp}
+% \cs{natoapp}\oarg{key-value-pairs}\parg{location}\parg{name}
+% \end{MacroSyntax}
+%
+% where all arguments are optional.
+% Keys are defined to fill in the various parts of the markers. These
+% keys are
+% \begin{description}
+% \item[\keyval{faction}{\meta{faction}}] Selects the faction used for
+% the symbol. See also
+% \sectionname~\ref{sec:natoapp:faction:command}.
+% \item[\keyval{command}{\meta{command}}] Selects the command used for
+% the symbol. See also
+% \sectionname~\ref{sec:natoapp:faction:command}.
+% \item[\keyval{main}{\meta{mains}}] Specifies the main symbol(s).
+% This can be a comma separated list of specifiers (delimited by
+% braces \marg{first,second,\textellipsis}), and each symbol can be
+% preceeded by an optional argument to shift, scale, rotate, etc.,
+% the individual symbols. \ifShowSymbols See also
+% \sectionname~\ref{sec:natoapp:mains}\fi.
+% \item[\keyval{left}{\meta{lefts}}, \keyval{right}{\meta{rights}},
+% \keyval{top}{\meta{tops}}, \keyval{bottom}{\meta{bottoms}},
+% \keyval{below}{\meta{belows}}] Specifies the left-, right-hand,
+% top, bottom, and lower symbol(s). The format of the arguments
+% \meta{lefts}, \meta{rights}, \meta{tops}, \meta{bottoms}, and
+% \meta{belows} has the same format as \meta{mains}.
+% \end{description}
+%
+% \begin{figure}[htbp]
+% \begin{tabular}{m{.45\linewidth}m{.45\linewidth}}
+% \begin{center}
+% \begin{tikzpicture}[scale=2]
+% \natoapp[
+% faction=none,
+% command=base,
+% echelon=army,
+% main={text=M},
+% top={text=T},
+% bottom={text=B},
+% left={text=L},
+% right={text=R},
+% below={text=V}]
+% \pic[draw,transform shape]{wg/x axis={-.5,.5,-.7,,}};
+% \pic[draw,transform shape]{wg/y axis={.7,-.62,.74,,{-.5,.5,-.2,.2}}};
+% \end{tikzpicture}
+% \end{center}
+% & The figure is typeset by
+% \begin{verbatim}
+% \natoapp[faction=none,
+% command=base,
+% echelon=army,
+% main={text=M},
+% top={text=T},
+% bottom={text=B},
+% left={text=L},
+% right={text=R},
+% below={text=V}]
+% \end{verbatim}
+% \end{tabular}
+% \caption{Main keys of \cs{natoapp}. The bottom and right hand
+% bars indicate one unit of length.}
+% \label{fig:natoapp:usage}
+% \end{figure}
+%
+% Other keys are available to further customise the appearance of the
+% symbols
+%
+% \begin{description}
+% \item[\keyval{echelon}{\meta{size}}] The size of the unit described.
+% Possible values are \spec{team}, \spec{squad}, \spec{section},
+% \spec{platoon}, \spec{company}, \spec{battalion}, \spec{regiment},
+% \spec{brigade}, \spec{division}, \spec{corps}, \spec{army},
+% \spec{army group}, \spec{theatre}, and \spec{command}.
+% \item[\keyval{frame}{\meta{keys}}] Extra keys for frame.
+% \end{description}
+%
+% \subsection{Faction and Command Selection}
+% \label{sec:natoapp:faction:command}
+%
+% Table~\ref{tab:frames} shows the various bases used for the various
+% {\ttfamily{\itshape faction}/{\itshape command}} combinations. Also
+% shown in the table is the base template for main identifiers.
+%
+% \makeatletter
+% \def\tabledata{}
+% \foreach \c in {air,land,equipment,installation,sea surface,sub surface,space,activity}{%
+% \protected@xappto\tabledata{\spec{\c}}
+% \foreach \f in {friendly,hostile,neutral,unknown}{%
+% \protected@xappto\tabledata{
+% &\noexpand\tikz[scale=.8]{%
+% \noexpand\path (-.75,-.75) rectangle (.75,.75);
+% \noexpand\node[natoapp6c={faction=\f,command=\c},fill=\f]{};
+% \noexpand\node[natoapp6c={command=base},draw=lightgray]{};
+% }}}
+% \protected@xappto\tabledata{\\ \noexpand\hline}}
+% \makeatother
+%
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|l|m{2cm}m{2cm}m{2cm}m{2cm}|}
+% \hline
+% \rowcolor{headbg}
+% & \multicolumn{4}{c|}{{\color{headfg}\meta{faction}}}\\
+% \rowcolor{headbg}
+% {\color{headfg}\meta{command}}
+% & {\color{headfg}\spec{friendly}}
+% & {\color{headfg}\spec{hostile}}
+% & {\color{headfg}\spec{neutral}}
+% & {\color{headfg}\spec{unknown}}
+% \\
+% \hline
+% \tabledata
+% \end{tabular}
+% \caption{Frames for various combinations of \meta{faction} and
+% \meta{command} combinations. These are drawn with the
+% \spec{pic} given by
+% \spec{natoapp6c/\meta{faction}/\meta{command}} with the options
+% \spec{draw=blue,fill=\meta{faction}}. If no \spec{fill} is
+% specified, then the background will be transparent. Note, the
+% template for main identifiers is also shown on top of each frame.}
+% \label{tab:frames}
+% \end{table}
+%
+% The fill color of the frame is set by the key \spec{frame}. If
+% this is or contains the special value \spec{faction}, then the
+% frame fill colour will be the standard for the faction as
+% illustrated in figure~\ref{fig:faction:color}.
+%
+% \begin{figure}[htbp]
+% \centering
+% \begin{tikzpicture}
+% \foreach[count=\i] \f in {friendly,hostile,neutral,unknown}{
+% \natoapp[frame=faction,faction=\f,
+% command=space,main={infantry}](2*\i-2,0)}
+% \end{tikzpicture}
+% \caption{Illustration of using the special value \spec{faction}
+% for the \spec{frame} key}
+% \label{fig:faction:color}
+% \end{figure}
+%
+% Elements of the frame can be controlled by the key \spec{frame}.
+% \begin{description}
+% \item[\keyval{frame}{\meta{keys}}] Additional keys to pass to the
+% frame drawing. The special option \spec{faction} will make the
+% frame be filled with the standard faction color.
+% \end{description}
+%
+% \tablename~\ref{tab:frame:color} illustrates this.
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|c|cccc|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Example}}
+% & {\color{headfg}\textbf{\spec{frame=\{color,...\}}}}
+% & {\color{headfg}\textbf{\spec{frame=\{fill,...\}}}}
+% & {\color{headfg}\textbf{\spec{frame=\{draw,...\}}}}
+% & {\color{headfg}\textbf{\spec{frame=\{line width,...\}}}}
+% \\
+% \hline
+% \cellcolor{white}
+% \tikz{\natoapp[main={fixed wing},command=air]}
+% &
+% &
+% &
+% &
+% \\
+% \hline
+% \rowcolor{altcol}
+% \cellcolor{white}
+% \tikz{\natoapp[main={fixed wing},command=air,color=red,
+% frame={line width=2pt}]}
+% & \spec{red}
+% &
+% &
+% & \spec{thick}
+% \\
+% \hline
+% \cellcolor{white}
+% \tikz{\natoapp[main={fixed wing},command=air,
+% frame={fill=yellow,line width=.5pt}]}
+% &
+% & \spec{yellow}
+% &
+% & \spec{thin}
+% \\
+% \hline
+% \rowcolor{altcol}
+% \cellcolor{white}
+% \tikz{\natoapp[main={fixed wing},command=air,frame={blue}]}
+% &
+% &
+% & \spec{blue}
+% &
+% \\
+% \hline
+% \cellcolor{white}
+% \tikz{\natoapp[main={fixed wing},command=air,frame={fill=pink,magenta}]}
+% &
+% & \spec{pink}
+% & \spec{magenta}
+% &
+% \\
+% \hline
+% \rowcolor{altcol}
+% \cellcolor{white}
+% \tikz{\natoapp[main={fixed wing},command=air,color=red,
+% frame={fill=green,draw=blue,line width=3pt}]}
+% & \spec{red}
+% & \spec{green}
+% & \spec{blue}
+% & \spec{ultra thick}
+% \\
+% \hline
+% \end{tabular}
+% \caption{Illustration of frame colour choices}
+% \label{tab:frame:color}
+% \end{table}
+%
+% \subsection{Unit Size (\spec{echelon})}
+%
+% The size of a unit a marker represents is given by the
+% \spec{echelon} keyword. \tablename~\ref{tab:natoapp6c:echelon}
+% shows the various markers and approximate unit sizes.
+%
+% \let\foo\empty
+% \begin{table}[htbp]
+% \centering
+% \begin{tabular}{|m{1.2cm}|cr@{--}lm{.27\linewidth}m{.27\linewidth}|}
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Example}}
+% & {\color{headfg}\spec{echelon}}
+% & \multicolumn{2}{c}{{\color{headfg}\textbf{Approx.~size}}}
+% & \foo{} {\color{headfg}\textbf{Sub-units}}
+% & \foo{} {\color{headfg}\textbf{Officer}}
+% \\
+% \hline
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=team,lower=airborne]}
+% & \spec{team}
+% & 3
+% & 5
+% & \foo{} none
+% & \foo{} Corporal or Sergeant
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=squad]}
+% & \spec{squad}
+% & 5
+% & 10
+% & \foo{} 1--2 teams
+% & \foo{} Sergeant
+% \\
+% \hline
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=section]}
+% & \spec{section}
+% & 7
+% & 13
+% & \foo{} 2--3 teams
+% & \foo{} Sergeant
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=platoon]}
+% & \spec{platoon}
+% & $25$
+% & $40$
+% & \foo{} Several squads/sections
+% & \foo{} Second Lieutenant
+% \\
+% \hline\tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=company]}
+% & \spec{company}
+% & $60$
+% & $250$
+% & \foo{} Several platoons
+% & \foo{} Captain
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=battalion]}
+% & \spec{battalion}
+% & $300$
+% & $1\,000$
+% & \foo{} 2--6 companies
+% & \foo{} Lieutenant colonel
+% \\
+% \hline
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=regiment]}
+% & \spec{regiment}
+% & $500$
+% & $2\,000$
+% & \foo{} 3--7 battalions
+% & \foo{} Colonel
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=brigade]}
+% & \spec{brigade}
+% & $2\,000$
+% & $5\,000$
+% & \foo{} Several battalions
+% & \foo{} Colonel
+% \\
+% \hline
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=division]}
+% & \spec{division}
+% & $10\,000$
+% & $20\,000$
+% & \foo{} Several brigades/regiments
+% & \foo{} Major General
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=corps]}
+% & \spec{corps}
+% & $30\,000$
+% & $60\,000$
+% & \foo{} Several divisions
+% & \foo{} Lieutenant General
+% \\
+% \hline
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=army]}
+% & \spec{army}
+% & \multicolumn{2}{c}{$100\,000$}
+% & \foo{} Several corps (5--10 divisions)
+% & \foo{} General
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=army group]}
+% & \spec{army group}
+% & $120\,000$
+% & $500\,000$
+% & \foo{} Several armies
+% & \foo{} Field Marshal
+% \\
+% \hline
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=theatre]}
+% & \spec{theatre}
+% & \multicolumn{2}{c}{$250\,000+$}
+% & \foo{} Several army groups
+% & \foo{} Field Marshal
+% \\
+% \hline
+% \rowcolor{altcol}
+% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=command]}
+% & \spec{command}
+% & \multicolumn{4}{c|}{Not a unit size, but designator}
+% \\
+% \hline
+% \end{tabular}
+% \caption{Illustration of echelon values. Approximate sizes and
+% command officer titles are typical modern day United States of
+% America army values and identifiers. Historically the unit
+% sizes have changed, as has officer titles. Furthermore, both
+% the unit sizes, names, and command officer titles may vary from
+% country to country, even across command.}
+% \label{tab:natoapp6c:echelon}
+% \end{table}
+%
+% \subsection{Unit type identification}
+%
+% \begin{table}
+% \centering%
+% \def\typemark#1{%
+% \tikz[scale=.3]{\natoapp[faction=friendly,command=land,#1]}}
+% \def\sizemark#1{%
+% \tikz[scale=.2]{\pic{natoapp6c/s/echelon=#1};}}
+% \begin{tabular}{|clc|}
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & \multicolumn{2}{c|}{\color{headfg}\textbf{Type \& Abbreviation}}
+% \\
+% \hline
+% \typemark{upper=air assault}
+% & Air assault
+% & AA\\
+% \rowcolor{altcol}
+% \typemark{upper=air defence}
+% & Air defence
+% & ADA\\
+% \typemark{lower=airborne}
+% & Airborne
+% & AB\\
+% \rowcolor{altcol}
+% \typemark{lower=amphibious}
+% & Amphibious
+% & AM\\
+% \typemark{main=anti tank anti armour}
+% & Anti tank/armoured
+% & AT\\
+% \rowcolor{altcol}
+% \typemark{main=armoured}
+% & Armoured
+% & AR\\
+% \typemark{main=chemical biological radiological nuclear}
+% & Chemical biological radiological nuclear
+% & CB\\
+% \rowcolor{altcol}
+% \typemark{main=combined arms}
+% & Combined arms
+% & CAR\\
+% \typemark{main=engineer}
+% & Engineer
+% & ENG\\
+% \rowcolor{altcol}
+% \typemark{main={[fill=pgfstrokecolor]artillery}}
+% & Field artillery
+% & FA\\
+% \typemark{main=infantry}
+% & Infantry
+% & IN\\
+% \rowcolor{altcol}
+% \typemark{main={infantry,armoured}}
+% & Mechanised infantry
+% & M\\
+% \typemark{lower=mountain}
+% & Mountaineer
+% & MTN\\
+% \rowcolor{altcol}
+% \typemark{upper=naval}
+% & Naval
+% & N\\
+% \typemark{main=reconnaissance}
+% & Reconnaissance
+% & REC\\
+% \rowcolor{altcol}
+% \typemark{main={text=sof}}
+% & Special Operations Forces
+% & SOF\\
+% \hline
+% \rowcolor{headbg}
+% {\color{headfg}\textbf{Symbol}}
+% & \multicolumn{2}{c|}{\color{headfg}\textbf{Echelon \& Abbreviation}}
+% \\
+% \hline
+% \sizemark{army group}
+% & Army group
+% & AG\\
+% \rowcolor{altcol}
+% \sizemark{army}
+% & Army
+% & A\\
+% \sizemark{corps}
+% & Corps
+% & -\\
+% \rowcolor{altcol}
+% \sizemark{division}
+% & Division
+% & D\\
+% \sizemark{brigade}
+% & Brigade
+% & BD\\
+% \rowcolor{altcol}
+% \sizemark{regiment}
+% & Regiment
+% & REGT\\
+% \sizemark{battalion}
+% & Battalion
+% & BN\\
+% \rowcolor{altcol}
+% \sizemark{company}
+% & Company
+% & COY\\
+% \sizemark{platoon}
+% & Platoon
+% & PLT\\
+% \rowcolor{altcol}
+% \sizemark{section}
+% & Section
+% & \\
+% \sizemark{squad}
+% & Squad
+% & \\
+% \hline
+% \end{tabular}
+% \caption{Some abbreviations of unit type identifications}
+% \label{tab:natoapp6c:abbr}
+% \end{table}
+%
+%
+% \ifShowSymbols
+% \subsection{Symbols Available}
+% \label{sec:natoapp:mains}
+%
+% \tablename~\ref{tab:natoapp6c:main:symbols} lists all the symbols
+% defined. Note, these do \emph{not} correspond to \emph{all} the
+% symbols defined in NATO APP-6(C) \cite{app6c}. However, using
+% combinations of these symbols one can construct \emph{all} of
+% those symbols (and so more if so desired).
+%
+% \ifShowCompat
+% See also
+% Appendix~\ref{app:natoapp6c:compat} for compatibility charts
+% between this library and \textsf{milsymb} \cite{milsymb}.
+% \fi
+%
+% {\makeatletter\SymbolTable{land}{\n@to@pp@s@ll}}
+% \fi
+%
+% \begin{thebibliography}{99}
+% \bibitem{fb} Hanover,C., Hendrix,C.E., \& Llewelyn,S.,
+% \textit{First Blood}, 1997, \url{https://grognard.com/fb/}
+% \bibitem{app6c} \textit{NATO Joint Military Symbology}, APP-6(C),
+% May 2011,
+% \url{https://en.wikipedia.org/wiki/NATO_Joint_Military_Symbology}.
+% \bibitem{app6d} \textit{NATO Joint Military Symbology}, APP-6(D),
+% October 2017,
+% \url{https://nso.nato.int/nso/nsdd/main/standards/ap-details/1912/EN}
+% \bibitem{milsymb} \textsf{milsymb} package,
+% \url{https://www.ctan.org/pkg/MilSymb}.
+% \end{thebibliography}
+%
+% \StopEventually{}
+%
+%
+% \iffalse
+% ====================================================================
+%
+% Implementation
+%
+% ====================================================================
+%
+% The wargame main package
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \section{Implementation}
+% \label{sec:impl}
+%
+% \input{package.dtx}
+% \input{util/core.dtx}
+% \input{hex/core.dtx}
+% \input{chit/core.dtx}
+% \input{natoapp6c/core.dtx}
+%
+% \appendix
+%
+% \iffalse
+% ====================================================================
+%
+% Appendices
+%
+% ====================================================================
+%
+% Compat tables
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% \ifShowCompat
+% \section{Compatibility tables}
+% \label{app:natoapp6c:compat}
+%
+% The following tables provides compatibility with the the
+% \textsf{milsymb} package available from CTAN.
+%
+% \let\CompatSection\subsection
+% \let\CompatSubSection\subsubsection
+% \input{cmp_air}
+% \input{cmp_missile}
+% \input{cmp_land}
+% \input{cmp_equipment}
+% \input{cmp_installation}
+% \input{cmp_seasurface}
+% \input{cmp_subsurface}
+% \input{cmp_seamine}
+% \input{cmp_space}
+% \input{cmp_activity}
+% \fi
+%
+% \iffalse
+% ====================================================================
+%
+% Draft VASSAL module
+%
+% --------------------------------------------------------------------
+% \fi
+% \section{Generate draft VASSAL module}
+% \label{app:vassal}
+%
+% We can use the code you wrote for your game pieces (counters, maps,
+% tables), to generate a draft VASSAL module. To that end, use the
+% document class \textsf{wgexport}, and some simple macros to export
+% your graphics to a single PDF. A provided Python script then
+% processes this to generate the draft VASSAL module.
+%
+% The generated VASSAL module is not the final thing, but it is a good
+% start.
+%
+% \subsection{Example}
+%
+% Suppose we have defined counters and markers like
+% \begin{verbatim}
+% allied 1 id axis 1 ad out of supply
+% allied 2 ad axis 2 ad game turn
+% allied 3 abid axis 3 ic
+% \end{verbatim}
+% via Tikz styles. Also assume that we have macros
+% \begin{verbatim}
+% \board \oob \charts \front
+% \end{verbatim}
+% which produces \textsf{tikzpicture}s to the board, OOBs, charts, and
+% cover, respectively. All this is defined in our package
+% \texttt{mygame}. Of course that we have our rules in the file
+% \texttt{game.pdf}.
+%
+% We prepare a simple \LaTeX{} source file
+%
+% \begin{verbatim}
+% \documentclass{wgexport}
+% \usepackage{mygame}
+% \begin{document}
+% \begin{imagelist} %% Records image meta info
+% \chitimages{{%
+% {allied 1 id,allied 2 ad,allied 3 abid}/Allied,%
+% {axis 1 ad,axis 2 ad,axis 3 ic}/Axis,%
+% {out of supply, game turn}/Markers}}
+% \info{Board}{board}{} \board
+% \info{OOB}{oob}{} \oob
+% \info{Charts}{chart}{}\chart
+% \info{Cover}{front}{} \front
+% \end{imagelist}
+% \end{document}
+% \end{verbatim}
+%
+% When we run \LaTeX{} on this, we will get a PDF where each page is a
+% separate image and the page is cropped to image. \emph{In addition}
+% we will get a CSV (comma-separated-values) file \texttt{export.csv}
+% which contains some meta information about each page. In
+% particular, it identifies the name of each page, the category, and
+% sub category of the image.
+%
+% For chits, the name of the image is the style name (e.g., \texttt{game
+% turn}). For other images, it is the first argument to \cs{info}
+% above.
+%
+% The category is for chits is always \texttt{counter}. For other
+% images, it is the second argument to the \cs{info} macro (e.g.,
+% \texttt{board}).
+%
+% The category of an image is important later on when we generate the
+% VASSAL module. Recognised categories are
+%
+% \begin{itemize}
+% \item \texttt{counter} for counter images. Such an image will
+% trigger the creation of a VASSAL game piece.
+% \item \texttt{board} for board images. Images of this kind will
+% result in VASSAL board (or Map) elements.
+% \item \texttt{oob} for Order of Battle tables. This will also
+% result in a VASSAL map being created, but one that is displayed as
+% a pop-up and with a rectangular grid. This is useful for placing
+% units in an Order of Battle chart.
+% \item \texttt{chart} for charts. These images will be made VASSAL
+% charts --- i.e., pop-up windows which contains some graphics for the
+% players reference.
+% \item \texttt{front} for the cover image. This will become the
+% module splash image. Only one such image (the first) will be used.
+% \end{itemize}
+%
+% Other categories may be used, and the corresponding image will be
+% added to the VASSAL module. However, they will no be processed in
+% any specific way.
+%
+% The \emph{sub-category} is mainly used for counters. Above, we gave
+% the sub-categories \texttt{Allied}, \texttt{Axis}, and
+% \texttt{Markers}. The sub-categories will help to identify the
+% factions of the game, and counter prototypes will be made for each
+% category. The sub-categories of \texttt{board}, \texttt{charts},
+% \texttt{oob}, and \texttt{front} has no or little effect.
+%
+% One we have processed the file above to generate our PDF (Say
+% \texttt{export.pdf}), then we can process it (and the CSV file) with
+% a Python script to make our draft VASSAL module
+%
+% \begin{verbatim}
+% export.py export.pdf export.csv -o Game.vmod -t Game -v 0.1 \
+% -d "My game" -r rules.pdf
+% \end{verbatim}
+%
+% This will generate the draft module \texttt{Game.vmod}. Note that
+% we add the rules (\texttt{-r rules.pdf}) to the module so that the
+% module is complete.
+%
+% Once the module has been generated, one can open it in the VASSAL
+% editor and further customise it. For example, the grids used in
+% the boards needs to be adjusted, and one may want to make initial
+% set-ups or add all counters to the OOB.
+%
+% Of course, running the Python script will overwrite all changes, so
+% perhaps it is a good idea to work on a copy of the output file.
+%
+% \iffalse
+% This is the package used by the documentation
+%<*docsty>
+\ProvidesPackage{wgdoc}
+\DeclareOption{noterrainpic}{%
+ \PassOptionsToPackage{noterrainpic}{wargame}}
+\ProcessOptions\relax
+%
+\RequirePackage{etoolbox}
+\RequirePackage{wargame}
+\RequirePackage{longtable}
+\RequirePackage{colortbl}
+\RequirePackage{hyperref}
+\RequirePackage{textcomp}
+\RequirePackage{float}
+\RequirePackage[a4paper,right=1cm,left=2cm]{geometry}
+%
+\usetikzlibrary{external}
+\tikzexternalize[mode=graphics if exists,prefix=.cache-]
+%
+\newcommand\TikZ{{\mdseries Ti{\itshape k}Z}}
+\newcommand\sectionname{Section}
+\let\subsubsubsection\paragraph
+%
+\colorlet{headbg}{LightSlateGrey!50}
+\colorlet{headfg}{black}
+\colorlet{altcol}{LightSteelBlue!50}
+\newcommand\spec[1]{{\obeyspaces\ttfamily #1}}
+\newcommand\tspec[1]{{\ttfamily\footnotesize\obeyspaces #1}}
+\newcommand\keyval[2]{\spec{#1}=#2}
+%
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{1ex}
+\setlength\hfuzz{15pt}
+\hbadness=7000
+%
+\tikzset{
+ cc name/.pic={
+ \draw[fill=pgfstrokecolor,draw=none,even odd rule]
+ (0,0) circle(.5) circle(.41)
+ node[fill=none,transform shape,
+ font=\sffamily\bfseries\fontsize{16}{0}\selectfont] {cc}
+ ;
+ },
+ cc by/.pic={
+ \draw[fill=pgfstrokecolor,draw=none,even odd rule]
+ (0,0) circle(.5) circle(.41) (0,.26) circle(.07)
+ (0,.15)
+ --++(.11,0)
+ to[bend left] ++(.02,-.02)
+ --++(0,-.20)
+ --++(-.05,0)
+ --++(0,-.25)
+ --++(-.15,0)
+ --++(0,.25)
+ --++(-.05,0)
+ --++(0,.2)
+ to[bend left] ++(.02,.02)
+ --cycle
+ ;
+ },
+ cc sa/.pic={
+ \draw[fill=pgfstrokecolor,draw=none,even odd rule]
+ (0,0) circle(.5) circle(.41)
+ (-.22,-.08)
+ to[bend right=40] ++(.23,-.20)
+ to[bend right=40] ++(.23, .20)
+ to[bend right=10] ++(0, .16)
+ to[bend right=40] ++(-.23, .20)
+ to[bend right=40] ++(-.23, -.20)
+ --++(-.05,0)
+ --++(-45:.15)
+ --++( 45:.15)
+ --++(-.05,0)
+ to[bend left=40] ++(.12, .1)
+ to[bend left=40] ++(.12, -.1)
+ to[bend left=10] ++(0, -.16)
+ to[bend left=40] ++(-.12, -.1)
+ to[bend left=40] ++(-.12, .1)
+ --cycle
+ ;
+ },
+ cc by sa/.pic={
+ \pic at(-1,0) {cc name};
+ \pic at( 0,0) {cc by};
+ \pic at( 1,0) {cc sa};
+ }
+}
+
+%
+\newcommand\Continued[1]{\multicolumn{#1}{c}{%
+ \textit{\small continued from previous page}}\\}
+\newcommand\Continues[1]{\multicolumn{#1}{c}{%
+ \textit{\small continues on next page}}\\}
+\newcommand\SymbolTable[3][]{%
+ \setlength{\LTcapwidth}{\linewidth}
+ \def\tabledata{}
+ \foreach \m in #3{%
+ \protected@xappto\tabledata{\spec{\m}}
+ \foreach \f in {friendly,hostile,neutral,unknown}{%
+ \protected@xappto\tabledata{
+ &\noexpand\tikz[scale=.8]{%
+ \noexpand\natoapp[faction=\f,%
+ command=#2,%
+ main={\m},%
+ frame={faction},%
+ #1]}}}
+ \protected@xappto\tabledata{\\ \noexpand\hline}}
+ \def\colheaders{%
+ \hline%
+ & \multicolumn{4}{c|}{\meta{faction}}\\%
+ \meta{symbol}%
+ & \spec{friendly}%
+ & \spec{hostile}%
+ & \spec{neutral}%
+ & \spec{unknown}%
+ \\%
+ \hline}
+ \begin{longtable}{|l|
+ m{.1\linewidth}
+ m{.1\linewidth}
+ m{.1\linewidth}
+ m{.1\linewidth}|}
+ \caption{Symbols\label{tab:natoapp6c:main:symbols}}\\
+ \colheaders
+ \endfirsthead
+ \Continued{5}
+ \colheaders
+ \endhead
+ \Continues{5}
+ \endfoot
+ \endlastfoot
+ \tabledata
+ \end{longtable}
+}
+%
+\def\CompatSection#1{}
+\def\CompatSubSection#1{}
+\newcommand\CompatTable[3]{% command, where, list
+ \CompatSubSection{\spec{#2}}
+ \setlength{\LTcapwidth}{\linewidth}
+ \def\tabledata{}
+ \foreach \m/\s in #3{%
+ \n@to@pp@dbg{2}{Compatibility: `\m' -> `\s'}
+ \protected@xappto\tabledata{\tspec{\m} & \tspec{\s}}
+ \foreach \f in {{none,frame={draw=lightgray}},%
+ friendly,hostile,neutral,unknown}{%
+ \protected@xappto\tabledata{
+ &\noexpand\tikz[scale=.5]{%
+ \noexpand\natoapp[faction=\f,command=#1,\s,frame={faction}]}}}
+ \protected@xappto\tabledata{\\ \noexpand\hline}}
+ \def\colheaders{%
+ \hline%
+ &
+ & \multicolumn{5}{c|}{\meta{faction}}\\%
+ \textsf{milsymb}%
+ &\textsf{wargame}%
+ & \spec{none}%
+ & \spec{friendly}%
+ & \spec{hostile}%
+ & \spec{neutral}%
+ & \spec{unknown}%
+ \\%
+ \hline}
+ \begin{longtable}{|
+ m{.15\linewidth}|
+ m{.20\linewidth}|
+ m{.08\linewidth}
+ m{.08\linewidth}
+ m{.08\linewidth}
+ m{.08\linewidth}
+ m{.08\linewidth}|}
+ \caption{Compatibility with \textsf{milsymb} \spec{#1},\spec{#2}
+ symbols\label{tab:compat:#1:#2}}\\
+ \colheaders
+ \endfirsthead
+ \Continues{7}
+ \colheaders
+ \endhead
+ \Continues{7}
+ \endfoot
+ \endlastfoot
+ \tabledata
+ \end{longtable}
+}
+%
+\newenvironment{Syntax}{%
+ \par
+ \vspace{1ex}
+ \hspace*{-1cm}
+ \ttfamily
+ \begin{tabular}{|>{\columncolor{altcol}}p{.8\textwidth}|}
+ \hline}{\\\hline\end{tabular}\par\vskip 1ex}
+\def\MacroSyntax{%
+ \leavevmode\begingroup%
+ %\catcode`\\12
+ \MakePrivateLetters\M@croSyntax}
+\def\M@croSyntax#1{\endgroup%
+ \foreach \k in {#1}{\expandafter\Special@Usage@Index\k}
+ \Syntax}
+\let\endMacroSyntax\endSyntax
+%
+\@ifundefined{SpecialIndex@}{
+ \gdef\SpecialIndex@#1#2{%
+ \@SpecialIndexHelper@#1\@nil
+ \def\@tempb{ }%
+ \ifcat \@tempb\@gtempa
+ \special@index{\quotechar\space\actualchar
+ \string\verb\quotechar*\verbatimchar
+ \quotechar\bslash\quotechar\space\verbatimchar#2}%
+ \else
+ \def\@tempb##1##2\relax{\ifx\relax##2\relax
+ \def\@tempc{\special@index{\quotechar##1\actualchar
+ \string\verb\quotechar*\verbatimchar
+ \quotechar\bslash\quotechar##1\verbatimchar#2}}%
+ \else
+ \def\@tempc{\special@index{##1##2\actualchar
+ \string\verb\quotechar*\verbatimchar
+ \bslash##1##2\verbatimchar#2}}%
+ \fi}%
+ \expandafter\@tempb\@gtempa\relax
+ \@tempc
+ \fi}}{}
+%
+\def\Special@Usage@Index#1{\@bsphack
+ {\let\special@index\index\SpecialIndex@{#1}{}}%
+ \@esphack}
+%
+\def\Speci@lIndex#1#2#3#4{%
+ \@bsphack\special@index{%
+ #1\actualchar
+ {\string\ttfamily\space#1}
+ (#3)%
+ \encapchar main}%
+ \special@index{#4:\levelchar#2\actualchar{%
+ \string\ttfamily\space#2}\encapchar main}\@esphack}
+%
+\def\SpecialHexKeyIndex#1#2{\Speci@lIndex{#1}{#2}{key}{Hex keys}}
+\def\SpecialNatoSymbolIndex#1#2{%
+ \Speci@lIndex{#1}{#2}{symbol}{NATO App6(c) symbols}}
+\def\SpecialNatoFrameIndex#1#2{\Speci@lIndex{#1}{#2}{frame}{NATO App6(c) frame}}
+\def\SpecialNatoKeyIndex#1#2{\Speci@lIndex{#1}{#2}{key}{NATO App6(c) keys}}
+\def\SpecialKeyIndex#1{\Speci@lIndex{#1}{#1}{key}{TikZ keys}}
+%
+\def\get@third #1/#2/#3/{\gdef\curr@third{#3}}
+\def\get@second #1/#2/#3/{\gdef\curr@second{#2}}
+%
+\def\KeyT@ble#1#2{
+ \leavevmode
+ \par
+ \vspace{1ex}
+ \hspace*{-1cm}
+ \begin{tabular}{#1}
+ \hline
+ #2
+ \hline
+ \end{tabular}\par}
+%
+\def\ShowKeyT@ble#1{
+ \KeyT@ble{|p{.1\textwidth}|>{\columncolor{altcol}}p{.7\textwidth}|}{#1}}
+%
+\def\Macro{%
+ \begingroup%
+ \catcode`\\12
+ \MakePrivateLetters\M@cro}
+%
+\def\M@cro#1{%
+ \endgroup
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ \protected@xappto\tabledata{%
+ \noexpand\spec{\noexpand\string\k}\noexpand\SpecialMainIndex{\k}\\}}
+ \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\noexpand\tabledata}}
+\def\endMacro{}
+%
+\newenvironment{NatoAppSymbol}[1]{%
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ \expandafter\get@third\k/
+ \protected@xappto\tabledata{%
+ \noexpand\tikz[scale=.5]{\noexpand\natoapp[main=\curr@third,
+ faction=none,command=base,frame={draw=lightgray}]}
+ &\noexpand\spec{\k}
+ \noexpand\SpecialNatoSymbolIndex{\k}{\curr@third}\\}}
+ \ShowKeyT@ble{\tabledata}}{}
+\newenvironment{NatoAppFrame}[1]{%
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ %\expandafter\get@third\k/
+ %\expandafter\get@second\k/
+ \protected@xappto\tabledata{%
+ \noexpand\tikz[scale=.5]{\noexpand\node[shape=\k] {};}
+ &\noexpand\spec{\k}
+ \noexpand\SpecialNatoFrameIndex{\k}{\k}\\}}
+ \ShowKeyT@ble{\tabledata}}{}
+\newenvironment{NatoAppKey}[1]{%
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ \expandafter\get@second\k//
+ \protected@xappto\tabledata{%
+ \noexpand\spec{\k}\noexpand\SpecialNatoKeyIndex{\k}{\curr@second}\\}}
+ \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{}
+%
+\newenvironment{HexKey}[1]{%
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ \expandafter\get@second\k//
+ \protected@xappto\tabledata{%
+ \noexpand\spec{\k}\noexpand\SpecialHexKeyIndex{\k}{\curr@second}\\}}
+ \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{}
+\newenvironment{HexKey*}[1]{%
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ \expandafter\get@second\k/
+ \expandafter\get@third\k/
+ \protected@xappto\tabledata{%
+ \noexpand\spec{\k}\noexpand\SpecialHexKeyIndex{\k}{\curr@second/\curr@third}\\}}
+ \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{}
+%
+\newenvironment{TikzKey}[1]{%
+ \def\tabledata{}
+ \foreach \k in {#1}{%
+ \protected@xappto\tabledata{%
+ \noexpand\spec{\k}\noexpand\SpecialKeyIndex{\k}\\}}
+ \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{}
+%
+\tikzset{
+ pics/wg/x axis/.style args={#1,#2,#3,#4,#5}{
+ code={
+ \begin{scope}[/pgf/number format/.cd,fixed,precision=2]
+ \path[pic actions] (#1,#3)--(#2,#3)
+ \foreach \t in {#1,#2,#4}{
+ \ifx\t\@empty\else
+ (\t,#3)--++(0,-.2)
+ node[anchor=north]{$\pgfmathprintnumber{\t}$}\fi}
+ \foreach \t in {#5}{
+ \ifx\t\@empty\else
+ (\t,#3)--++(0,-.1)
+ node[anchor=north,font=\small]{$\pgfmathprintnumber{\t}$}\fi};
+ \end{scope}}},
+ pics/wg/y axis/.style args={#1,#2,#3,#4,#5}{
+ code={
+ \begin{scope}[/pgf/number format/.cd,fixed,precision=2]
+ \path[pic actions] (#1,#2)--(#1,#3)
+ \foreach \t in {#2,#3,#4}{
+ \ifx\t\@empty\else
+ (#1,\t)--++(.2,0)
+ node[anchor=west]{$\pgfmathprintnumber{\t}$}\fi}
+ \foreach \t in {#5}{
+ \ifx\t\@empty\else
+ (#1,\t)--++(.1,0)
+ node[anchor=west,font=\small]{$\pgfmathprintnumber{\t}$}\fi};
+ \end{scope}}},
+ pics/wg/xaxis/.style args={#1,#2,#3,#4}{%
+ code={
+ \pic[draw]{wg/x axis={-#1,#1,#2,#3,#4}};}},
+ pics/wg/yaxis/.style args={#1,#2,#3,#4}{%
+ code={
+ \pic[draw]{wg/y axis={#1,-#2,#2,#3,#4}};}},
+}
+%</docsty>
+%
+% \iffalse
+% --------------------------------------------------------------------
+%
+% Symbols documentation driver
+%
+% --------------------------------------------------------------------
+% \fi
+%
+% Driver for symbols only document
+%<*symbols>
+\title{The \textsf{wargame} package\\
+ Symbols}
+\author{Christian Holm Christensen}
+\date{\today}
+\begin{document}
+\maketitle
+% \natoappdbglvl=3
+{\makeatletter\SymbolTable{land}{\n@to@pp@s@ll}}
+\end{document}
+%</symbols>
+%
+%
+%
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+%
+% Compatibility documentation driver
+%
+% --------------------------------------------------------------------
+% \fi
+%
+%
+%<*compat>
+% Driver for compatibility only document
+\title{The \textsf{wargame} package\\
+ \textsf{milsymb} Compatibility}
+\author{Christian Holm Christensen}
+\date{\today}
+\begin{document}
+\newgeometry{margin=1cm}
+\maketitle
+% \natoappdbglvl=1
+\let\CompatSection\section
+\let\CompatSubSection\subsection
+\input{cmp_air}
+\input{cmp_missile}
+\input{cmp_land}
+\input{cmp_equipment}
+\input{cmp_installation}
+\input{cmp_seasurface}
+\input{cmp_subsurface}
+\input{cmp_seamine}
+\input{cmp_space}
+\input{cmp_activity}
+\restoregeometry
+\end{document}
+%</compat>
+% \fi
+%
+% \PrintIndex
+% \Finale
+%
+%
+%
+% \iffalse
+% EOF
+% Local Variables:
+% TeX-command-extra-options: "-shell-escape"
+% End:
+% \fi
diff --git a/macros/latex/contrib/wargame/source/wargame.ins b/macros/latex/contrib/wargame/source/wargame.ins
new file mode 100644
index 0000000000..0ab9ec5a74
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/wargame.ins
@@ -0,0 +1,176 @@
+%% This is file `wargame.ins', the installation file for the
+%% `wargame' package.
+%%
+%% Copyright (C) 2019 Christian Holm.
+%%
+%% The wargame package is free software; you can redistribute it
+%% and/or modify it under the terms of the GNU General Public License
+%% as published by the Free Software Foundation; either version 2 of
+%% the License, or (at your option) any later version.
+%%
+%% The universal package is distributed in the hope that it will be
+%% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+%% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%% GNU General Public License for more details.
+%%
+%% You should have received a copy of the GNU General Public License
+%% along with this package; if not, write to the Free Software
+%% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+%%
+
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\declarepreamble\long
+
+Copyright (C) 2019 Christian Holm.
+
+This file is NOT the source for wargame, because almost all comments
+have been stripped from it. It is NOT the preferred form of universal
+for making modifications to it.
+
+Therefore you can NOT redistribute and/or modify THIS file. You can
+however redistribute the complete source (wargame.dtx and wargame.ins)
+and/or modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version 2, or (at
+your option) any later version.
+
+The wargame package is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this package; if not, write to the
+ Free Software Foundation, Inc.,
+ 675 Mass Ave, Cambridge,
+ MA 02139, USA.
+
+See the file wargame.dtx for further comments and documentation.
+
+\endpreamble
+
+\declarepreamble\short
+
+Copyright (C) 2019 Christian Holm.
+
+The wargame package is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+See the file wargame.dtx for further comments and documentation.
+
+\endpreamble
+
+\postamble
+Local Variables:
+ mode: LaTeX
+End:
+\endpostamble
+
+\usepreamble\long
+\usedir{tex/latex/wargame}
+\Msg{***********************************************************}
+\Msg{* Generating LaTeX files}
+\Msg{***********************************************************}
+\generate{%
+ \file{wargame.sty} {\from{package.dtx}{package}}
+ \file{wgdoc.sty} {\from{wargame.dtx}{docsty}}
+ \file{compat.tex} {\from{wargame.dtx}{driver,compat}}
+ \file{symbols.tex} {\from{wargame.dtx}{driver,symbols}}
+ %
+ \file{tikzlibrarywargame.util.code.tex}{%
+ \from{util/core.dtx}{utils}}
+ %
+ \file{wgexport.cls}{%
+ \from{util/core.dtx}{exportcls}}
+ %
+ \file{tikzlibrarywargame.hex.code.tex}{
+ \from{hex/core.dtx} {hex}
+ \from{hex/coord.dtx} {hex}
+ \from{hex/shape.dtx} {hex}
+ \from{hex/terrain.dtx} {hex}
+ \from{hex/terrain/beach.dtx} {hex}
+ \from{hex/terrain/light_woods.dtx}{hex}
+ \from{hex/terrain/woods.dtx} {hex}
+ \from{hex/terrain/swamp.dtx} {hex}
+ \from{hex/terrain/rough.dtx} {hex}
+ \from{hex/terrain/mountains.dtx} {hex}
+ \from{hex/terrain/village.dtx} {hex}
+ \from{hex/terrain/town.dtx} {hex}
+ \from{hex/terrain/city.dtx} {hex}
+ \from{hex/terrain/mountain.dtx} {hex}
+ \from{hex/terrain/tree.dtx} {hex}
+ \from{hex/ridges.dtx} {hex}
+ \from{hex/towns.dtx} {hex}
+ \from{hex/labels.dtx} {hex}
+ \from{hex/extra.dtx} {hex}
+ \from{hex/paths.dtx} {hex}
+ \from{hex/board.dtx} {hex}}
+ %
+ \file{tikzlibrarywargame.natoapp6c.code.tex}{
+ \from{natoapp6c/core.dtx} {natoapp6c}
+ \from{natoapp6c/frames/base.dtx} {natoapp6c}
+ \from{natoapp6c/frames/friendly.dtx}{natoapp6c}
+ \from{natoapp6c/frames/hostile.dtx} {natoapp6c}
+ \from{natoapp6c/frames/neutral.dtx} {natoapp6c}
+ \from{natoapp6c/frames/unknown.dtx} {natoapp6c}
+ \from{natoapp6c/echelon.dtx} {natoapp6c}
+ \from{natoapp6c/text.dtx} {natoapp6c}
+ \from{natoapp6c/shape.dtx} {natoapp6c}
+ \from{natoapp6c/util.dtx} {natoapp6c}
+ \from{natoapp6c/weaponry.dtx} {natoapp6c}
+ \from{natoapp6c/symbols.dtx} {natoapp6c}
+ \from{natoapp6c/list.dtx} {natoapp6c}}
+ %
+ \file{tikzlibrarywargame.chit.code.tex}{
+ \from{chit/core.dtx} {chit}
+ \from{chit/shape.dtx} {chit}
+ \from{chit/elements.dtx}{chit}
+ \from{chit/misc.dtx} {chit}}
+ %
+ \file{beach.tex} {\from{hex/tile.dtx}{tile,beach}}
+ \file{city.tex} {\from{hex/tile.dtx}{tile,city}}
+ \file{light_woods.tex}{\from{hex/tile.dtx}{tile,lightwoods}}
+ \file{mountains.tex} {\from{hex/tile.dtx}{tile,mountains}}
+ \file{rough.tex} {\from{hex/tile.dtx}{tile,rough}}
+ \file{swamp.tex} {\from{hex/tile.dtx}{tile,swamp}}
+ \file{town.tex} {\from{hex/tile.dtx}{tile,town}}
+ \file{village.tex} {\from{hex/tile.dtx}{tile,village}}
+ \file{woods.tex} {\from{hex/tile.dtx}{tile,woods}}
+ %
+ \file{testmap.tex} {\from{tests/map.dtx}{testmap}}
+ \file{testchits.tex} {\from{tests/chits.dtx}{testchits}}
+ %
+ \file{cmp_air.tex} {\from{natoapp6c/compat/air.dtx} {cmp}}
+ \file{cmp_missile.tex} {\from{natoapp6c/compat/missile.dtx} {cmp}}
+ \file{cmp_land.tex} {\from{natoapp6c/compat/land.dtx} {cmp}}
+ \file{cmp_equipment.tex} {\from{natoapp6c/compat/equipment.dtx} {cmp}}
+ \file{cmp_installation.tex}{\from{natoapp6c/compat/installation.dtx}{cmp}}
+ \file{cmp_seasurface.tex} {\from{natoapp6c/compat/seasurface.dtx} {cmp}}
+ \file{cmp_subsurface.tex} {\from{natoapp6c/compat/subsurface.dtx} {cmp}}
+ \file{cmp_seamine.tex} {\from{natoapp6c/compat/seamine.dtx} {cmp}}
+ \file{cmp_space.tex} {\from{natoapp6c/compat/space.dtx} {cmp}}
+ \file{cmp_activity.tex} {\from{natoapp6c/compat/activity.dtx} {cmp}}
+ %
+}
+
+\Msg{***********************************************************}
+\Msg{* To finish the installation you have to move the files}
+\Msg{* `wargame.sty' `*.code.tex' into a directory searched by TeX.}
+\Msg{*}
+\Msg{* To produce the documentation do:}
+\Msg{*\space\space latex wargame.dtx}
+\Msg{*\space\space latex wargame.dtx}
+\Msg{*\space\space makeindex -s gind -o wargame.ind wargame.idx}
+\Msg{*\space\space makeindex -s gglo -o wargame.gls wargame.glo}
+\Msg{*\space\space latex wargame.dtx}
+\Msg{*\space\space latex wargame.dtx}
+\Msg{* or whatever appropiate for your system.}
+\Msg{***********************************************************}
+\endbatchfile
+
+%% Local Variables:
+%% mode: docTeX
+%% End: \ No newline at end of file