summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/cchess
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/cchess
Initial commit
Diffstat (limited to 'macros/latex/contrib/cchess')
-rw-r--r--macros/latex/contrib/cchess/cchess.sty163
-rw-r--r--macros/latex/contrib/cchess/cchess46.mf3
-rw-r--r--macros/latex/contrib/cchess/cchess46.tfmbin0 -> 416 bytes
-rw-r--r--macros/latex/contrib/cchess/cchessboard.tex257
-rw-r--r--macros/latex/contrib/cchess/ccpieces.mf1173
5 files changed, 1596 insertions, 0 deletions
diff --git a/macros/latex/contrib/cchess/cchess.sty b/macros/latex/contrib/cchess/cchess.sty
new file mode 100644
index 0000000000..e36c2be3dc
--- /dev/null
+++ b/macros/latex/contrib/cchess/cchess.sty
@@ -0,0 +1,163 @@
+%
+% Most of the code in this package was literally copied from the example
+% file cchessboard.tex provided with the cchess46.mf font designed by
+% Jacques Richer (see cchessboard.tex for details)
+%
+% i only added the following:
+%
+% position environment
+%
+% \smallboard \normalboard \largeboard
+%
+% \textpiece (for setting a piece in running text)
+%
+% in addition i changed the \piece command so that the first arg takes letters
+% eg a position on the board is described by
+%
+% \piece{a}{1}{r} rather than \piece{1}{1}{r}
+%
+% (this is like the notation of chess and that's the way i know chinese chess
+% notation)
+%
+% enjoy
+%
+% Frank Mittelbach 96/12/28
+%
+% below is an example ...
+%
+% \smallboard
+% \begin{position}
+% \piece{a}{1}{r} \piece{i}{1}{r}
+% \piece{b}{1}{n} \piece{h}{1}{n}
+% \piece{c}{1}{b} \piece{g}{1}{b}
+% \piece{d}{1}{g} \piece{f}{1}{g}
+% \piece{e}{5}{c} \piece{e}{7}{c}
+% \piece{a}{4}{p} \piece{c}{4}{p}
+% \piece{e}{4}{p} \piece{g}{4}{p}
+% \piece{i}{4}{p} \piece{e}{1}{k}
+% \piece{a}{9}{R} \piece{i}{10}{R}
+% \piece{a}{8}{N} \piece{g}{8}{N}
+% \piece{c}{10}{B} \piece{g}{10}{B}
+% \piece{d}{10}{G} \piece{f}{10}{G}
+% \piece{b}{8}{C} \piece{h}{8}{C}
+% \piece{a}{7}{P} \piece{c}{7}{P}
+% \piece{g}{7}{P}
+% \piece{i}{7}{P} \piece{e}{10}{K}
+% \end{position}
+%
+% ----------------------------------------------------------
+%
+\ProvidesPackage{cchess}
+ [1996/12/28 v1.0b chinese chess support (FMi/SPQR)]
+%
+%
+
+\newcounter{piecex}\newcounter{piecey}
+
+
+\newcommand\largeboard{%
+% The 3 dimensions in this command must be proportionnal to each other
+% \cchessunit is the edge size of individual squares on the board,
+% in centimeters.
+ \def\cchessunit{2.2}%
+ \font\EchecsChinois cchess46\relax
+}
+\newcommand\normalboard{%
+% The 3 dimensions in this command must be proportionnal to each other
+ \def\cchessunit{1.1}%
+ \font\EchecsChinois cchess46 at 23pt\relax
+}
+\newcommand\smallboard{%
+% The 3 dimensions in this command must be proportionnal to each other
+ \def\cchessunit{0.55}%
+ \font\EchecsChinois cchess46 at 12pt\relax
+}
+% It would be preferable to replace the set \largeboard, \normalboard, \smallboard
+% by a single command with one argument, the edge size of the board, say.
+
+
+\normalboard
+
+\newcommand{\piece}[3]{% macro pour afficher une piece
+%FMi dirty trick
+ \setcounter{piecex}{\expandafter`\csname#1\endcsname}%
+ \addtocounter{piecex}{-97}% ascii value of `a'
+ \setcounter{piecey}{#2}\addtocounter{piecey}{-1}%
+ \setbox0=\hbox{\EchecsChinois #3}%
+% work out a masking circle by getting the width of the piece and
+% drawing a white circle of that diameter; the units here are
+% plain PS but if we convert to bp, we get the right result.
+ \@tempdima\wd0\@tempdimc1bp\divide\@tempdima\@tempdimc
+ \put(\value{piecex},\value{piecey}){\special{"
+ [] 0 setdash 0 setlinejoin 0 setlinecap
+ 0.95 setgray
+ newpath 0. 0. \number\@tempdima\space 2 div 0 360. arc closepath fill}}%
+ \put(\value{piecex},\value{piecey})%
+ {\kern-0.5\wd0\box0}%
+}
+
+% font for stones in text (this is rather experimental)
+
+\font\CCH=cchess46 scaled 300\relax
+\newcommand\textpiece[1]{\raisebox{3pt}[16pt]{\makebox[30pt][c]{\CCH #1}}}
+
+
+\newsavebox{\Something}%
+\newsavebox{\SW}\newsavebox{\SE}\newsavebox{\NE}\newsavebox{\NW}%
+
+\newenvironment{position}
+ {%
+ \setlength{\unitlength}{\cchessunit cm}%
+ \begin{picture}(9.1,10.1)(-0.6,-0.5)%
+ \put(0,0){\framebox(8,9){}}%
+ \put(-0.05,-0.05){\framebox(8.1,9.1){}}%
+ %
+ \savebox{\Something}(8,1)[bl]{%
+ \multiput(0,0)(1,0){8}{\framebox(1,1){}}}%
+ %
+ \multiput(0,0)(0,1){4}{\usebox{\Something}}%
+ \multiput(0,5)(0,1){4}{\usebox{\Something}}%
+ %
+ \savebox{\SW}(1,1)[bl]{%
+ \put(0.1,0.1){\line(1,0){0.2}}\put(0.1,0.1){\line(0,1){0.2}}}%
+ \savebox{\SE}(1,1)[bl]{%
+ \put(0.9,0.1){\line(-1,0){0.2}}\put(0.9,0.1){\line(0,1){0.2}}}%
+ \savebox{\NE}(1,1)[bl]{%
+ \put(0.9,0.9){\line(-1,0){0.2}}\put(0.9,0.9){\line(0,-1){0.2}}}%
+ \savebox{\NW}(1,1)[bl]{%
+ \put(0.1,0.9){\line(1,0){0.2}}\put(0.1,0.9){\line(0,-1){0.2}}}%
+ % On va commencer par faire les "croix" completes
+ \savebox{\Something}(2,2)[bl]{%
+ \put(0,0){\usebox{\NE}}\put(1,0){\usebox{\NW}}\put(1,1){\usebox{\SW}}\put(0,1){\usebox{\SE}}}%
+ %
+ \put(0,1){\usebox{\Something}}%
+ \put(6,1){\usebox{\Something}}%
+ \put(1,2){\usebox{\Something}}%
+ \put(3,2){\usebox{\Something}}%
+ \put(5,2){\usebox{\Something}}%
+ %
+ \put(0,6){\usebox{\Something}}%
+ \put(6,6){\usebox{\Something}}%
+ \put(1,5){\usebox{\Something}}%
+ \put(3,5){\usebox{\Something}}%
+ \put(5,5){\usebox{\Something}}%
+ % Maintenant les demi-croix gauches
+ \savebox{\Something}(1,2)[bl]{%
+ \put(0,0){\usebox{\NW}}\put(0,1){\usebox{\SW}}}%
+ \put(0,2){\usebox{\Something}}%
+ \put(0,5){\usebox{\Something}}%
+ % ...les demi-croix droites
+ \savebox{\Something}(1,2)[bl]{%
+ \put(0,0){\usebox{\NE}}\put(0,1){\usebox{\SE}}}%
+ \put(7,2){\usebox{\Something}}%
+ \put(7,5){\usebox{\Something}}%
+ %
+ % et pour finir, les camps des generaux:
+ \savebox{\Something}(2,2)[bl]{%
+ \put(0,0){\line(1,1){2}}% La "longueur" a fournir est celle de la projection horizontale
+ \put(2,0){\line(-1,1){2}}}%
+ \put(3,0){\usebox{\Something}}%
+ \put(3,7){\usebox{\Something}}%
+}{\end{picture}}
+
+\endinput
diff --git a/macros/latex/contrib/cchess/cchess46.mf b/macros/latex/contrib/cchess/cchess46.mf
new file mode 100644
index 0000000000..e974fe0231
--- /dev/null
+++ b/macros/latex/contrib/cchess/cchess46.mf
@@ -0,0 +1,3 @@
+FontSize := 46pt#;
+font_identifier:="cchess46";
+input ccpieces; end.
diff --git a/macros/latex/contrib/cchess/cchess46.tfm b/macros/latex/contrib/cchess/cchess46.tfm
new file mode 100644
index 0000000000..1494eb33c8
--- /dev/null
+++ b/macros/latex/contrib/cchess/cchess46.tfm
Binary files differ
diff --git a/macros/latex/contrib/cchess/cchessboard.tex b/macros/latex/contrib/cchess/cchessboard.tex
new file mode 100644
index 0000000000..539fc2e923
--- /dev/null
+++ b/macros/latex/contrib/cchess/cchessboard.tex
@@ -0,0 +1,257 @@
+\documentstyle{article}
+% cchessboard.tex
+%
+% papier 8.5in x 11in = 21.59cm x 27.94cm
+% dessin 17.6cm x 19.8cm
+%\hoffset=-0.545cm% devrait etre la bonne valeur, mais...!??
+\hoffset=-1.545cm
+
+\setlength{\textwidth}{20cm}\setlength{\textheight}{22cm}
+\setlength{\oddsidemargin}{0cm}\setlength{\evensidemargin}{0cm}
+\setlength{\topmargin}{0cm}\setlength{\headheight}{0cm}
+
+% If the font size is changed, the macro WhiteMask must also be changed
+\newfont{\EchecsChinois}{cchess46}
+\newcounter{piecex}\newcounter{piecey}
+
+\special{! /WhiteMask
+ {
+ gsave
+ [] 0 setdash 0 setlinejoin 0 setlinecap
+% the gray level could be changed to 0.95, for light gray pieces that stand out
+% better on a white board. Here, it is set to full white (0.0 is full black).
+ 1.0 setgray
+% Here, the 102 was determined by trial and error. Must find an algebraic way to fix it!
+% that's the radius of the masking circle.
+ 102 dup scale
+ currentpoint translate newpath 0. 0. 1. 0. 360. arc closepath fill
+ grestore
+ } def }
+
+\newcommand{\piece}[3]{% macro pour afficher une piece
+\setcounter{piecex}{#1}\addtocounter{piecex}{-1}%
+\setcounter{piecey}{#2}\addtocounter{piecey}{-1}%
+\put(\value{piecex},\value{piecey}){\special{" grestore WhiteMask gsave}}%
+\put(\value{piecex},\value{piecey})%
+{\setbox0=\hbox{\EchecsChinois #3}\kern-0.5\wd0\box0}%
+}
+
+\begin{document}
+\thispagestyle{empty}
+\begin{center}
+\setlength{\unitlength}{2.2cm}%
+\begin{picture}(8.1,9.1)%
+\put(0,0){\framebox(8,9){}}%
+\put(-0.05,-0.05){\framebox(8.1,9.1){}}%
+%
+\newsavebox{\Something}%
+\savebox{\Something}(8,1)[bl]{%
+\multiput(0,0)(1,0){8}{\framebox(1,1){}}}%
+%
+\multiput(0,0)(0,1){4}{\usebox{\Something}}%
+\multiput(0,5)(0,1){4}{\usebox{\Something}}%
+%
+\newsavebox{\SW}\newsavebox{\SE}\newsavebox{\NE}\newsavebox{\NW}%
+\savebox{\SW}(1,1)[bl]{%
+\put(0.1,0.1){\line(1,0){0.2}}\put(0.1,0.1){\line(0,1){0.2}}}%
+\savebox{\SE}(1,1)[bl]{%
+\put(0.9,0.1){\line(-1,0){0.2}}\put(0.9,0.1){\line(0,1){0.2}}}%
+\savebox{\NE}(1,1)[bl]{%
+\put(0.9,0.9){\line(-1,0){0.2}}\put(0.9,0.9){\line(0,-1){0.2}}}%
+\savebox{\NW}(1,1)[bl]{%
+\put(0.1,0.9){\line(1,0){0.2}}\put(0.1,0.9){\line(0,-1){0.2}}}%
+% On va commencer par faire les "croix" completes
+\savebox{\Something}(2,2)[bl]{%
+\put(0,0){\usebox{\NE}}\put(1,0){\usebox{\NW}}\put(1,1){\usebox{\SW}}\put(0,1){\usebox{\SE}}}%
+%
+\put(0,1){\usebox{\Something}}%
+\put(6,1){\usebox{\Something}}%
+\put(1,2){\usebox{\Something}}%
+\put(3,2){\usebox{\Something}}%
+\put(5,2){\usebox{\Something}}%
+%
+\put(0,6){\usebox{\Something}}%
+\put(6,6){\usebox{\Something}}%
+\put(1,5){\usebox{\Something}}%
+\put(3,5){\usebox{\Something}}%
+\put(5,5){\usebox{\Something}}%
+% Maintenant les demi-croix gauches
+\savebox{\Something}(1,2)[bl]{%
+\put(0,0){\usebox{\NW}}\put(0,1){\usebox{\SW}}}%
+\put(0,2){\usebox{\Something}}%
+\put(0,5){\usebox{\Something}}%
+% ...les demi-croix droites
+\savebox{\Something}(1,2)[bl]{%
+\put(0,0){\usebox{\NE}}\put(0,1){\usebox{\SE}}}%
+\put(7,2){\usebox{\Something}}%
+\put(7,5){\usebox{\Something}}%
+%
+% et pour finir, les camps des generaux:
+\savebox{\Something}(2,2)[bl]{%
+\put(0,0){\line(1,1){2}}% La "longueur" a fournir est celle de la projection horizontale
+\put(2,0){\line(-1,1){2}}}%
+\put(3,0){\usebox{\Something}}%
+\put(3,7){\usebox{\Something}}%
+%
+\piece{1}{1}{r}\piece{9}{1}{r}%
+\piece{2}{1}{n}\piece{8}{1}{n}%
+\piece{3}{1}{b}\piece{7}{1}{b}%
+\piece{4}{1}{g}\piece{6}{1}{g}%
+\piece{2}{3}{c}\piece{8}{3}{c}%
+\piece{1}{4}{p}\piece{3}{4}{p}\piece{5}{4}{p}\piece{7}{4}{p}\piece{9}{4}{p}%
+\piece{5}{1}{k}%
+\piece{1}{10}{R}\piece{9}{10}{R}%
+\piece{2}{10}{N}\piece{8}{10}{N}%
+\piece{3}{10}{B}\piece{7}{10}{B}%
+\piece{4}{10}{G}\piece{6}{10}{G}%
+\piece{2}{8}{C}\piece{8}{8}{C}%
+\piece{1}{7}{P}\piece{3}{7}{P}\piece{5}{7}{P}\piece{7}{7}{P}\piece{9}{7}{P}%
+\piece{5}{10}{K}%
+%\piece{4}{5}{0}\put(3.3,4.4){\large Masque}%
+\end{picture}
+\end{center}
+\end{document}
+cut here------8<---- cchess46.mf ----8<-----------------------
+cut here------8<-----ccpieces.mf-----8<-----------------------
+cut here------8<----------------------8<-----------------------
+Over the last few months, I have spent several nights coding a Chinese
+chess (xiangqi) font. I had a cheap chess set I bought in Montreal's
+Chinatown a long time ago;
+in spite of the fact that I only paid 1US$ for it, its pieces have a
+nice pleasing look. So I have undertaken to reproduce it as faithfully as I
+could. The set was made in (communist) China, and bears no copyright
+mark of any kind; in the true communist spirit, I now distribute this font
+to you, and hope no one will try to sue me for it!
+
+I tried to be true to the original design, although no two pieces of the same
+kind really looked the same under close examination. I had to guess the
+intent of the designer. The model pieces were made of pale wood, about 3/4"
+in diameter, with etched characters painted red and dark green.
+
+This was my first serious METAFONT experience, and my lack of
+experience can be seen transpiring throughout the code. The style of my
+coding evolved slightly as I progressed but I could not afford to redo the
+first pieces; so the code suffers from some inconsistency in style. I also
+got a little tired in the end, and decided to cut short some
+descriptions; for example, all corners of the earlier pieces are rounded to
+various degrees. This was intentional: I wanted the font to look like
+painted characters (on the real pieces, paint always produced rounded
+corners, in spite of the etching). In the last pieces I coded, I used a few
+overlapping paths, which produce sharper corners at intersection points. I
+kept those to a minimum, using them only for brush strokes that are
+clearly intersecting ones.
+
+I called the pieces RED and BLACK. The red pieces are generated as black
+on a white background, inside a thin black circle. The black pieces are
+generated as white on a black circular background, with a thin white
+circle near the edge; these look like negatives of the original green pieces.
+
+For those who might prefer the look of pieces painted on a white
+background (like in the original set), I added a modified copy of the black
+pieces, in which they are generated as black on a white background,
+surrounded by TWO circles; this gives the edge a much darker look, and
+makes clear the distinction between black and red. These could be used to
+produce colored pieces on a white background, and still be recognizable if
+printed only in black and white. I recommend printing the whole font with
+one of the =fonttable.tex= utilities.
+
+I also added two filled pieces that might be useful as masks.
+
+The encoding is a simple and natural one for the regular pieces,
+using capital letters for BLACK, lowercase for RED; for the third set of
+pieces (let's call it "alternate-black"), I had to use the remaining letters
+of the alphabet; I opted for consecutive ones. Here they are, with some of
+their common names:
+
+
+ K,k,S : king, general,
+ G,g,T : guard, assistant
+ B,b,U : bishop, elephant
+ N,n,V : knight,horse
+ R,r,W : rook, chariot, car
+ C,c,X : cannon, gun, gunner
+ P,p,Y : pawn, foot-soldier
+
+ [J,0: masks (not part of the game)]
+
+
+
+BOARD DRAWING CODE:
+
+If used as ordinary letters in text, the circular pieces will be nearly
+tangent to the baseline. I defined a macro to place them CENTERED at the
+current point in a picture environment. With the unit length properly
+chosen, one can then easily draw a Chinese chess board, and place any
+piece at any board position by simply =\putting= the piece letter (the
+macro will change the font) at the desired (x,y) integer valued coordinates
+(x=1..9, y=1..10) (it should be easy to change this to the usual
+numerical/alphabetical notation).
+
+ Example: \piece{8}{10}{N} places a black knight in file 8, rank 10.
+
+I have included a LaTeX file to draw such a board, with each piece in its
+starting position. Only the last lines need changing (in an obvious way) to
+draw an arbitrary game situation (the board could do with a little decoration
+in the river!).
+
+Printer fonts normally behave like dark characters on a ***transparent***
+background. When placing a piece on the chessboard, one has to ERASE ANY
+UNDERLYING LINES FIRST. I could not think of a way of doing this using only
+TeX and/or METAFONT. So my piece placing macro uses a little bit of
+PostScript code to do this. For that reason, it will only work with DVI ->
+PS converters that support dvips=s raw-PS code insertion command
+(\special{! ...} and \special{! ...}).
+
+Unfortunately, the font size (46pt) is presently hardcoded into this LaTeX
+file. To print smaller boards, one would have to change a small number of
+dimension parameters (margins, picture unitlength, PS mask size) as well as
+the font size. I have not had time to implement and test automatic scaling
+relations at the LaTeX level.
+
+I have set the font normal and quad spaces to the diameter of the pieces,
+and the font x height to half that diameter. These can be used for kerning,
+instead of using the width/height/depth of character boxes. All characters
+have the same box dimensions.
+
+
+THE PACKAGE:
+
+It consists in 3 files, appended at the end of this text, in this order
+(look for the "cut here" lines):
+
+1) the LaTeX file cchessboard.tex for drawing a starting board
+ (or any other game position)
+
+2) the METAFONT driver file cchess46.mf for generating the 46pt cchess
+ font used by cchessboard.tex
+
+3) the main METAFONT character definition file, ccpieces.mf
+
+Some comments are in English, some are in French (I like to believe that
+my native and favorite language is not dead yet). They are not important
+since the whole thing is very simple.
+
+Before I end, I would like to thank Barry Smith, of Blue Sky Research, for
+helping me during my early attempts at generating fonts on a Macintosh
+(MacPlus!), using their METAFONT implementation.
+
+
+ Jacques Richer, Ph.D. (Physics)
+ Centre de Recherche en Calcul Applique
+ 5160, boul. Decarie, bureau 434,
+ Montreal, PQ, CANADA H3X 2H9
+
+ TEL: (514) 369-5234
+ FAX: (514) 343-3880
+ INTERNET: richer@cerca.umontreal.ca
+
+(my address at work could change very soon)
+
+ Home address:
+ 7029, rue Marquette
+ Montreal, Quebec,
+ CANADA H2E 2C6
+
+
+cut here------8<------- cchessboard.tex ------8<------------------
+
diff --git a/macros/latex/contrib/cchess/ccpieces.mf b/macros/latex/contrib/cchess/ccpieces.mf
new file mode 100644
index 0000000000..0b6a78d881
--- /dev/null
+++ b/macros/latex/contrib/cchess/ccpieces.mf
@@ -0,0 +1,1173 @@
+mode_setup;
+message "pixels_per_inch="; show pixels_per_inch; message " ";
+showvariable FontSize; message " ";
+smoothing:=1;
+
+FS#:=FontSize/400; % unite employee sur le papier graphique de depart
+max_rayon#:=220FS#; % rayon du plus grand cercle entrant dans la boite de caractere
+max_diametre#:=2*max_rayon#;
+define_pixels(FS,max_rayon,max_diametre);
+SF:=1/FS; % = number of drawing units per pixel
+ % in our particular coordinate system, if we want to
+ % move by 1 pixel, we must move by this quantity.
+pair piece_center; piece_center=(max_rayon,0); % center of each piece:
+pickup pencircle scaled 5FS; normal_pen := savepen;
+pickup pencircle scaled 1; fine_pen := savepen;
+transform basic_transform;
+basic_transform = identity scaled FS shifted piece_center;
+diametre=0.985*max_diametre#/FS#;
+epaisseur_de_la_bordure=0.033*max_diametre#/FS#;
+
+def BaseBlanche =
+ currenttransform := basic_transform;
+ % apres currenttransform:=... on ne specifie plus les unites. FS est sous-entendu
+ fill fullcircle scaled diametre;
+ unfill fullcircle scaled (diametre-epaisseur_de_la_bordure);
+% fill fullcircle scaled 435; unfill fullcircle scaled 425;
+ pickup normal_pen;
+enddef;
+
+def BaseNoire =
+ currenttransform := basic_transform;
+ fill fullcircle scaled diametre;
+ unfill fullcircle scaled (diametre-epaisseur_de_la_bordure);
+ fill fullcircle scaled (diametre-2 epaisseur_de_la_bordure);
+% fill fullcircle scaled 435; unfill fullcircle scaled 425;
+% fill fullcircle scaled 415;
+ pickup normal_pen;
+enddef;
+
+def BaseNoireBlanche =
+ currenttransform := basic_transform;
+ fill fullcircle scaled diametre;
+ unfill fullcircle scaled (diametre-1.2 epaisseur_de_la_bordure);
+ fill fullcircle scaled (diametre-2 epaisseur_de_la_bordure);
+ unfill fullcircle scaled (diametre-3.2 epaisseur_de_la_bordure);
+% fill fullcircle scaled 435; unfill fullcircle scaled 422;
+% fill fullcircle scaled 415; unfill fullcircle scaled 402;
+ pickup normal_pen;
+enddef;
+
+%---------------------------
+
+beginchar ("J",max_diametre#,max_rayon#,max_rayon#); "sig"; % "Jacques Richer";
+ BaseNoire;
+ pickup fine_pen;
+ undraw (-2SF,1SF)..(-2SF,0)..(0,0)---(0,4SF)---(2SF,4SF)..(2SF,2SF)---(0,2SF);
+ undraw (1SF,2SF)..(3SF,-0.7SF);
+endchar;
+
+beginchar ("0",max_diametre#,max_rayon#,max_rayon#); "Masque noir/black mask";
+ currenttransform := basic_transform;
+ fill fullcircle scaled 437;
+endchar;
+
+
+beginchar ("K",max_diametre#,max_rayon#,max_rayon#); "General noir/black king";
+ BaseNoire;
+% Correction: le dessin doit etre tourne de 90 degres vers la droite!
+ currenttransform := currenttransform rotatedaround (piece_center,-90);
+% base (jambes)
+ unfilldraw (82,-45)..(97,-34)..(95,-25)..tension 2
+ ..(90,-16){left}..(82,-17)..(70,-18)--(13,-18)
+ ..(-40,-17)..(-66,-14)..(-77,0)..(-80,41)
+ ..(-82,68)..(-90,97)..(-103,105){left}
+ ..(-113,100)..(-114,88)..(-108,71)
+ ..{down}(-100,23)..{down}(-115,-27)
+ ..{right}(-100,-43)..{right}(-76,-41)
+ ..(-57,-44){dir -45}
+ ..{down}(-51,-56) % left leg
+ ..(-56,-62) % left foot
+ --(-78,-63)..tension 1.5
+ ..{down}(-92,-80)..(-75,-100){right}..(-51,-93)
+ ..(-27,-84) % {dir 45}
+ ..(-23,-72){up}..(-28,-56){up}..(-16,-42){right}
+ ..(-7,-50)..(-1,-68){down}..(-2,-80){down}..tension 2
+ ..(12,-89)--(49,-100)..(72,-106){right}..(86,-93){up}
+ ..(81,-77){dir 135}..(67,-71)--(26,-66)..(19,-52){up}
+ ..(27,-44)--(66,-44)
+ ..cycle;
+% axe vertical central et arc en haut a droite
+ unfilldraw (70,-7)..tension 1.5
+ ..(100,0)..tension 1.5..(103,41){up}..(96,73)
+ ..(73,98)..(50,106)
+ ..{curl0}(14,110){up}..(16,126){up}
+ ..(12,139)..(1,146){left}
+ ..(-10,140)..(-12,130){down}..{curl0}(-11,110){curl0}
+ ..(-27,103)..(-39,93){down}..tension 1.5..(-27,76)
+ ..(-14,69)..(-9,48)..(-8,20)
+ ..{curl0}(-10,1)--(21,-2) % remontee axe central
+ ..(16,5)..(10,28){up}
+ ..{curl 0.5}(11,71){curl 1.5}..(22,78)..(37,79){right}
+ ..(67,68){dir -45}..(79,36){down}..(77,16)
+ ..{curl0}cycle;
+ unfilldraw (-31,120){curl 0.5} % tache gauche en haut
+ ..(-34,130)..(-42,133){left}
+ ..(-54,130)..(-70,112)..(-72,100)
+ ..(-63,92){right}..tension 1.3..(-54,96)..tension 1.5
+ ..cycle;
+ unfilldraw (-43,41){curl1.3} % tache gauche du milieu
+ ..(-37,60){up}..tension 2
+ ..(-46,83)..tension 2..(-54,76)..(-66,57)
+ ..(-68,50){down}..(-59,42)..(-44,41){right}
+ ..cycle;
+ unfilldraw (-21,1){curl0.5} % tache gauche en bas
+ ..(-35,23)..(-50,31){left}..(-59,29)..tension 2
+ ..(-62,-2){curl 0.1}..(-46,-5){right}
+ ..{curl0.3}cycle;
+ unfilldraw (32,11){right}
+ ..(43,19)..tension 1.3 ..(48,34)..tension 1.3
+ ..(55,50)..{curl0.7}(58,65){curl0.7}
+ ..(37,55)..tension 1.5..(18,35)..tension 2
+ ..cycle;
+endchar;
+
+beginchar ("k",max_diametre#,max_rayon#,max_rayon#); "General rouge/red king";
+ BaseBlanche; % j'ai code le dessin a l'envers!
+ currenttransform := currenttransform rotatedaround (piece_center,180);
+ filldraw (-50,-126)..(-42,-100){up}..{curl0}(-43,-81){dir -4}
+ ..(-24,-84)..{curl0}(-11,-91){curl0}..(0,-81)..(7,-66){up}
+ ..(1,-34){up}..(5,-10)..(12,7)--(-5,23)..(-15,14)
+ ..(-20,-1)..{curl0.8}(-23,-48)
+ ..{curl0.2}(-43,-62){curl0.2} % monte tronc principal
+ ..tension 2.5..(-46,69)..(-53,86){left}..(-79,71)--(-80,-50)
+ ..(-84,-60)..(-101,-56)..(-108,-37)..(-107,18){up}..(-122,30){left}
+ ..(-139,13){down}..(-137,-20)..{curl0}(-128,-56){curl0}..(-143,-60)
+ --(-129,-85){curl0.2}..(-110,-82)..(-90,-81)..(-81,-86)
+ --(-81,-107)--cycle;
+ filldraw (100,-107){curl0.5} % structure de droite
+ ..tension2..(112,-76)..tension3..(100,66)
+ ..{curl0.2}(101,75){curl0.2}..tension 3..(82,88){curl0.3}
+ ..(79,84)..(73,78)--(27,57){dir -100}..(23,46)..(21,29)
+ ..{curl0.5}(21,2)--(32,-3){dir 40}..tension 1.5..(50,3)
+ ..{curl0.3}(77,8){curl0.3}..(77,-6)
+ --(40,-18){curl0}..tension 2..(28,-22)..tension 2..(22,-32)
+ ..tension 2..(22,-60)..tension 2..(40,-68)--(82,-63)
+ --(80,-79)..(42,-82)..(28,-88)..tension2..(22,-98){curl0}
+ --(73,-97)..tension 1.2
+ ..{curl0.2}cycle;
+ pickup fine_pen;
+ unfilldraw (76,33)..tension 3..(72,49)..tension 3 % trou du haut
+ ..(47,43)..tension 3..(46,24)..tension 3
+ ..cycle;
+ unfilldraw (78,-33){up}..tension 0.8 % trou du bas
+ ..(72,-28)..tension 3
+ ..(52,-33)..tension 0.8..(46,-42)..tension 0.8
+ ..(51,-47)..tension 3..(73,-40)
+ ..cycle;
+endchar;
+
+beginchar ("S",max_diametre#,max_rayon#,max_rayon#); "General noir/black king sur fond blanc";
+ BaseNoireBlanche;
+% Correction: le dessin doit etre tourne de 90 degres vers la droite!
+ currenttransform := identity rotated -90 scaled FS shifted ( piece_center - (8FS,0));
+% base (jambes)
+ filldraw (82,-45)..(97,-34)..(95,-25)..tension 2
+ ..(90,-16){left}..(82,-17)..(70,-18)--(13,-18)
+ ..(-40,-17)..(-66,-14)..(-77,0)..(-80,41)
+ ..(-82,68)..(-90,97)..(-103,105){left}
+ ..(-113,100)..(-114,88)..(-108,71)
+ ..{down}(-100,23)..{down}(-115,-27)
+ ..{right}(-100,-43)..{right}(-76,-41)
+ ..(-57,-44){dir -45}
+ ..{down}(-51,-56) % left leg
+ ..(-56,-62) % left foot
+ --(-78,-63)..tension 1.5
+ ..{down}(-92,-80)..(-75,-100){right}..(-51,-93)
+ ..(-27,-84) % {dir 45}
+ ..(-23,-72){up}..(-28,-56){up}..(-16,-42){right}
+ ..(-7,-50)..(-1,-68){down}..(-2,-80){down}..tension 2
+ ..(12,-89)--(49,-100)..(72,-106){right}..(86,-93){up}
+ ..(81,-77){dir 135}..(67,-71)--(26,-66)..(19,-52){up}
+ ..(27,-44)--(66,-44)
+ ..cycle;
+% axe vertical central et arc en haut a droite
+ filldraw (70,-7)..tension 1.5
+ ..(100,0)..tension 1.5..(103,41){up}..(96,73)
+ ..(73,98)..(50,106)
+ ..{curl0}(14,110){up}..(16,126){up}
+ ..(12,139)..(1,146){left}
+ ..(-10,140)..(-12,130){down}..{curl0}(-11,110){curl0}
+ ..(-27,103)..(-39,93){down}..tension 1.5..(-27,76)
+ ..(-14,69)..(-9,48)..(-8,20)
+ ..{curl0}(-10,1)--(21,-2) % remontee axe central
+ ..(16,5)..(10,28){up}
+ ..{curl 0.5}(11,71){curl 1.5}..(22,78)..(37,79){right}
+ ..(67,68){dir -45}..(79,36){down}..(77,16)
+ ..{curl0}cycle;
+ filldraw (-31,120){curl 0.5} % tache gauche en haut
+ ..(-34,130)..(-42,133){left}
+ ..(-54,130)..(-70,112)..(-72,100)
+ ..(-63,92){right}..tension 1.3..(-54,96)..tension 1.5
+ ..cycle;
+ filldraw (-43,41){curl1.3} % tache gauche du milieu
+ ..(-37,60){up}..tension 2
+ ..(-46,83)..tension 2..(-54,76)..(-66,57)
+ ..(-68,50){down}..(-59,42)..(-44,41){right}
+ ..cycle;
+ filldraw (-21,1){curl0.5} % tache gauche en bas
+ ..(-35,23)..(-50,31){left}..(-59,29)..tension 2
+ ..(-62,-2){curl 0.1}..(-46,-5){right}
+ ..{curl0.3}cycle;
+ filldraw (32,11){right}
+ ..(43,19)..tension 1.3 ..(48,34)..tension 1.3
+ ..(55,50)..{curl0.7}(58,65){curl0.7}
+ ..(37,55)..tension 1.5..(18,35)..tension 2
+ ..cycle;
+endchar;
+
+beginchar ("G",max_diametre#,max_rayon#,max_rayon#); "Lettre noir/black guard";
+ BaseNoire;
+ z1=(112,22);
+ unfilldraw z1{curl 0.1}..controls(115,41)
+ ..{curl 0.2}(127,60){curl 0.2}
+ ..(84,60){dir 182}
+ ..(27,63)
+ ...(17,121) % 3
+ ...(-20,121) ..tension 1.5
+ ..(-33,53) ..tension 1.5 %5
+ ..(-70,53) ..tension 2 %5.5
+ ..(-96,60) %6
+ ...(-112,42)..tension 2
+ ..(-133,10)..tension 2 %8
+ ..(-105,13)..tension 2 %8.5
+ ..(-80,20)..tension 2
+ ..(-33,17)..tension 2
+ ..(-30,-34)..tension 2
+ ..(-78,-37)
+ ...(-95,-40) ..tension 2
+ ..(-120,-60){curl0} ..controls (-107,-66)
+ ..{curl 0.3}(-96,-81){curl 0.3} .. controls (-63,-70) and (-40,-67)
+ ..(-2,-66)..controls(63,-68)
+ ..(80,-77)
+ ...(93,-59)
+ ...{curl 0.05}(100,-38){curl 0.05}
+ ...(67,-34)
+ ...(29,-31)..tension 1.5
+ ..(28,26){curl 0.4} .. tension 1.7
+ ..(92,27)
+ .. cycle;
+endchar;
+
+beginchar ("g",max_diametre#,max_rayon#,max_rayon#); "Lettre rouge/red guard";
+ BaseBlanche;
+ filldraw (121,24){curl 0.2}..controls(128,34)
+ ..(140,42) %2
+ ..(140,52) %3
+ ..(127,52) ..tension 1.4 %4
+ ..(100,53) ..tension 1.4 %5
+ ..(74,52) %6
+ ..(66,79) ..tension 1.3 %7
+ ..(42,94) ..tension 1.2 %8
+ ..(14,77) %9
+ ..(13,62) %10
+ ..(2,51) ..tension 2 %11
+ ..(-31,52) ..tension 0.8 %12
+ ..(-40,70)..controls (-42,86) %13
+ ..(-56,92) %14
+ ..(-84,96) %15
+ ..(-100,93) % 15.2
+ ..(-117,81) % 15.4
+ ..(-122,66) %16
+ ..(-112,62) %17
+ ..(-85,56) %18
+ ..(-80,39) ..tension 1.5 %19
+ ..(-81,-60) ..tension 1.5 %20
+ ..(-81,-76) ..tension 2 %21
+ ..{curl 0.1}(-62,-98){curl 0.1} %22 bas du cmax_rayon
+ ..{curl 0.5}(-48,-87){curl 0.5} %23
+ ..{curl 0.1}(-44,-65){curl 0.1} %24
+ ..{curl 0.3}(-32,-71){curl 0.5} %25
+ ..(0,-60) ..tension 2 %26
+ ..(67,-60) %27
+ ..{curl 0.1}(101,-68) %28 bas du pied droit
+ ..(113,-56)
+ ..(122,-38) %30
+ ..(103,-33)..tension 1.5
+ ..{left}(66,-39) %32
+ ..(59,-37) % 32.5
+ ..(60,-28)..tension 2 %33
+ ..(62,10) %34
+ ..(78,28)..tension 1.5
+ ..(112,29)
+ ..cycle;
+ unfilldraw (15,20)..tension 1.5
+ ..(16,28)..tension 1.5
+ ..(9,29)..tension 1.5
+ ..(-15,23)
+ ..(-32,16)
+ ..(-40,6)..tension 2
+ ..(-45,-37)
+ ..{curl 0.5}(-43,-47){curl 0.5}
+ ..{curl 0.5}(-33,-37){curl 0}
+ ..(-22,-38)..tension 1.5
+ ..(-1,-39)..tension 0.8
+ ..(14,-27)..tension 2
+ ..(13,0)..tension 2
+ ..cycle;
+endchar;
+
+beginchar ("T",max_diametre#,max_rayon#,max_rayon#); "Lettre noir/black guard sur fond blanc";
+ BaseNoireBlanche;
+ z1=(112,22);
+ filldraw z1{curl 0.1}..controls(115,41)
+ ..{curl 0.2}(127,60){curl 0.2}
+ ..(84,60){dir 182}
+ ..(27,63)
+ ...(17,121) % 3
+ ...(-20,121) ..tension 1.5
+ ..(-33,53) ..tension 1.5 %5
+ ..(-70,53) ..tension 2 %5.5
+ ..(-96,60) %6
+ ...(-112,42)..tension 2
+ ..(-133,10)..tension 2 %8
+ ..(-105,13)..tension 2 %8.5
+ ..(-80,20)..tension 2
+ ..(-33,17)..tension 2
+ ..(-30,-34)..tension 2
+ ..(-78,-37)
+ ...(-95,-40) ..tension 2
+ ..(-120,-60){curl0} ..controls (-107,-66)
+ ..{curl 0.3}(-96,-81){curl 0.3} .. controls (-63,-70) and (-40,-67)
+ ..(-2,-66)..controls(63,-68)
+ ..(80,-77)
+ ...(93,-59)
+ ...{curl 0.05}(100,-38){curl 0.05}
+ ...(67,-34)
+ ...(29,-31)..tension 1.5
+ ..(28,26){curl 0.4} .. tension 1.7
+ ..(92,27)
+ .. cycle;
+endchar;
+
+beginchar ("B",max_diametre#,max_rayon#,max_rayon#); "Elephant noir/black bishop";
+ BaseNoire;
+ unfilldraw (101,-61){curl 0.8}..tension 1.5..(128,-50)
+ ..(135,-42) % extremite de la grande queue de droite
+ ..(126,-32)..tension 1.5..(91,-28)..tension 1.5..(58,-20)
+ ..(51,-14){curl 0.7}..(60,-6)..(72,13)..{curl 3}(72,29)
+ --(61,28) % haut de la petite queue de droite
+ ..tension 1.5 ..(56,20)..(50,7)..(39,-8){curl 0.5}..tension 1.5
+ ..(27,8)..tension 1.5..(10,36)..tension 0.8..(13,39)
+ ---(66,40)..tension 0.8..(73,47)..tension 1.5
+ ..(73,65)..tension 1.5..(72,86)..tension 0.8
+ ..(68,89)---(30,92)
+ & (30,92){curl 0.8}..tension 1.5..(50,113)..tension 0.8
+ ..(48,122)..tension 1.5..(16,125)..tension 1.5..(-10,128)
+ ..(-25,126)..tension 1.5..(-51,110)---(-75,96)..(-88,88)
+ ..(-89,80)..tension 0.8 % extremite de la trompe
+ ..(-82,73)..{curl 0.8}(-68,78)
+ & (-68,78)..{curl 0.5}(-72,41){curl 2}..tension 1.2
+ ..(-60,36)..tension 2..(-40,37)..tension 2..(-12,39)
+ &(-12,39)..tension 2 % patte du haut
+ ..(-43,16)..controls(-51,13)..(-63,13)..controls(-70,12)
+ ..(-78,9)..(-80,-4)..tension 1.2..(-67,-8)..tension 1.2
+ ..(-40,-1)..tension 2..(-13,13)..tension 0.8
+ ..(-4,12)..tension 2..(13,-18)..tension 0.8
+ ..(13,-28)..tension 1.5..(0,-55)..(-26,-72)..(-46,-78)
+ ..(-67,-76)..tension 1.5..(-85,-70)..tension 0.8
+ ..(-88,-74)..tension 1.5..(-70,-98)..tension 1.2
+ ..(-44,-105)..(8,-92)..(26,-77)..(42,-32)
+ & (42,-32)..controls (75,-46)..cycle;
+ filldraw (53,63) % oeil droit
+ ..(52,69)..tension 0.8..(46,73)..tension 1.5
+ ..(33,73)..tension 1.5..(17,73)..tension 0.8
+ ..(14,69)..tension 1.5..(16,61)..tension 0.8
+ ..(23,56)..tension 1.5..(34,56)..tension 1.5
+ ..(48,56)..tension 0.8..cycle;
+ filldraw (-12,62) % oeil gauche
+ ..(-13,68)..(-21,72)..tension 1.5..(-40,70){curl 2}..tension 0.8
+ ..(-47,61)..tension 0.8..{curl 2}(-44,52)..tension 3
+ ..(-25,53)..tension 3..(-14,53)..tension 0.8..(-11,56)
+ ..cycle;
+ filldraw (7,93)..tension 1.5 % interieur de la trompe
+ ..(16,103)..tension 0.8..(16,109)..tension 2
+ ..(-4,111)..tension 1.5..(-16,110)..tension 1.5
+ ..(-20,108)..tension 1.5..(-28,103)..tension 1.5
+ ..{curl 0.8}(-50,90){curl 0.8}..tension 2
+ ..(-20,91)..tension 1.2..(0,91)..tension 0.8..cycle;
+ unfilldraw (-8,-10)..tension 0.8 % pattes de gauche
+ ..(-22,-8)..(-33,-12)..(-60,-18)..{curl 0.5}(-84,-18)..tension 2
+ ..(-90,-28) ..tension 1.5..(-83,-36)..controls(-72,-35)
+ ..(-61,-32)..tension 2..(-34,-25)..tension 2
+ ..(-17,-22)..tension 0.8..(-14,-28)..tension 1.5
+ ..(-36,-38)..tension 1.5..(-50,-43)..controls(-72,-48)
+ ..(-90,-47)..tension 1.5..{curl 0.5}(-113,-46)..tension 2
+ ..(-120,-57)..tension 0.76..(-118,-62)..tension 1.5
+ ..(-107,-68)..(-98,-70){curl 2}..tension 2
+ ..(-50,-55)..tension 2..(-5,-38)..tension 0.8
+ ..(1,-30)..tension 0.8..(-2,-20)..tension 1.5..cycle;
+endchar;
+
+beginchar ("b",max_diametre#,max_rayon#,max_rayon#); "Elephant rouge/red bishop";
+ BaseBlanche;
+ filldraw (108,-65)..tension 2..(121,-48)..tension 3
+ ..(122,50)..(128,77) &
+ (128,77)..tension 2..(110,95)..tension 0.8
+ ..(99,97)..controls (85,94)..(62,93)..tension 3
+ ..(15,91)..tension 3..(0,69)..controls(6,60)and(7,45)
+ ..(8,32){down}..tension 2..(7,-35)..(1,-57) &
+ (1,-57)..tension 2..(13,-71)..(25,-75)..tension 1.3
+ ..(48,-65)..tension 2..{curl 1}(88,-58)..tension 1
+ ..(86,-50)..(83,-44) &
+ (83,-44)..tension 3..(37,-43)..tension 0.8
+ ..(32,-37)..controls(34,15)..(32,68)..tension 0.8
+ ..(40,73)..tension 2..(94,74)..tension 0.8
+ ..(98,68)---(101,-20)..controls (100,-32) and (98,-40)
+ ..(94,-46)..tension 3..cycle;
+ filldraw (25,-18)---(80,-11)..tension 2
+ ..(85,-5)..tension 2..(75,4)..tension 3..(25,6)--cycle;
+ filldraw (25,28)---(74,32)..tension 1.5
+ ..{curl 1.5}(84,49)---(25,50)--cycle;
+
+ % partie de gauche:
+ filldraw (-43,-86)..tension 2..(-30,-68)..tension 3
+ ..(-27,80)..(-44,92){left} ..(-53,89){dir 220} ..(-63,78) &
+ (-63,78)..(-58,70)..(-57,48)---(-55,-67)..tension 3..cycle;
+ filldraw (-124,-47)..tension 3..(-113,-56)..tension 1.5
+ ..(-88,-43)..(-57,3)..(-39,35) &
+ (-39,35)..(-13,4)..(16,-20)--(16,0)..(-10,29)..(-41,71) &
+ (-41,71)..tension 1.2..(-78,10)..(-99,-16)
+ ..{curl 0.9}(-121,-27)..tension 3..cycle;
+ filldraw (-104,50)..tension 1.5..(-98,40)..(-92,38)..tension 2
+ ..(-40,47)..tension 2..(0,50)..tension 2..(10,67) &
+ (10,67)..tension 2..(-40,66)..tension 2..(-75,69)
+ ..(-84,73)..{curl 0.8}(-90,73)..tension 3..cycle;
+endchar;
+
+beginchar ("U",max_diametre#,max_rayon#,max_rayon#); "Elephant noir/black bishop sur fond blanc";
+ BaseNoireBlanche;
+ filldraw (101,-61){curl 0.8}..tension 1.5..(128,-50)
+ ..(135,-42) % extremite de la grande queue de droite
+ ..(126,-32)..tension 1.5..(91,-28)..tension 1.5..(58,-20)
+ ..(51,-14){curl 0.7}..(60,-6)..(72,13)..{curl 3}(72,29)
+ --(61,28) % haut de la petite queue de droite
+ ..tension 1.5 ..(56,20)..(50,7)..(39,-8){curl 0.5}..tension 1.5
+ ..(27,8)..tension 1.5..(10,36)..tension 0.8..(13,39)
+ ---(66,40)..tension 0.8..(73,47)..tension 1.5
+ ..(73,65)..tension 1.5..(72,86)..tension 0.8
+ ..(68,89)---(30,92)
+ & (30,92){curl 0.8}..tension 1.5..(50,113)..tension 0.8
+ ..(48,122)..tension 1.5..(16,125)..tension 1.5..(-10,128)
+ ..(-25,126)..tension 1.5..(-51,110)---(-75,96)..(-88,88)
+ ..(-89,80)..tension 0.8 % extremite de la trompe
+ ..(-82,73)..{curl 0.8}(-68,78)
+ & (-68,78)..{curl 0.5}(-72,41){curl 2}..tension 1.2
+ ..(-60,36)..tension 2..(-40,37)..tension 2..(-12,39)
+ &(-12,39)..tension 2 % patte du haut
+ ..(-43,16)..controls(-51,13)..(-63,13)..controls(-70,12)
+ ..(-78,9)..(-80,-4)..tension 1.2..(-67,-8)..tension 1.2
+ ..(-40,-1)..tension 2..(-13,13)..tension 0.8
+ ..(-4,12)..tension 2..(13,-18)..tension 0.8
+ ..(13,-28)..tension 1.5..(0,-55)..(-26,-72)..(-46,-78)
+ ..(-67,-76)..tension 1.5..(-85,-70)..tension 0.8
+ ..(-88,-74)..tension 1.5..(-70,-98)..tension 1.2
+ ..(-44,-105)..(8,-92)..(26,-77)..(42,-32)
+ & (42,-32)..controls (75,-46)..cycle;
+ unfilldraw (53,63) % oeil droit
+ ..(52,69)..tension 0.8..(46,73)..tension 1.5
+ ..(33,73)..tension 1.5..(17,73)..tension 0.8
+ ..(14,69)..tension 1.5..(16,61)..tension 0.8
+ ..(23,56)..tension 1.5..(34,56)..tension 1.5
+ ..(48,56)..tension 0.8..cycle;
+ unfilldraw (-12,62) % oeil gauche
+ ..(-13,68)..(-21,72)..tension 1.5..(-40,70){curl 2}..tension 0.8
+ ..(-47,61)..tension 0.8..{curl 2}(-44,52)..tension 3
+ ..(-25,53)..tension 3..(-14,53)..tension 0.8..(-11,56)
+ ..cycle;
+ unfilldraw (7,93)..tension 1.5 % interieur de la trompe
+ ..(16,103)..tension 0.8..(16,109)..tension 2
+ ..(-4,111)..tension 1.5..(-16,110)..tension 1.5
+ ..(-20,108)..tension 1.5..(-28,103)..tension 1.5
+ ..{curl 0.8}(-50,90){curl 0.8}..tension 2
+ ..(-20,91)..tension 1.2..(0,91)..tension 0.8..cycle;
+ filldraw (-8,-10)..tension 0.8 % pattes de gauche
+ ..(-22,-8)..(-33,-12)..(-60,-18)..{curl 0.5}(-84,-18)..tension 2
+ ..(-90,-28) ..tension 1.5..(-83,-36)..controls(-72,-35)
+ ..(-61,-32)..tension 2..(-34,-25)..tension 2
+ ..(-17,-22)..tension 0.8..(-14,-28)..tension 1.5
+ ..(-36,-38)..tension 1.5..(-50,-43)..controls(-72,-48)
+ ..(-90,-47)..tension 1.5..{curl 0.5}(-113,-46)..tension 2
+ ..(-120,-57)..tension 0.76..(-118,-62)..tension 1.5
+ ..(-107,-68)..(-98,-70){curl 2}..tension 2
+ ..(-50,-55)..tension 2..(-5,-38)..tension 0.8
+ ..(1,-30)..tension 0.8..(-2,-20)..tension 1.5..cycle;
+endchar;
+
+beginchar ("N",max_diametre#,max_rayon#,max_rayon#); "cavalier noir/black knight";
+ BaseNoire;
+ unfilldraw (92,123)..tension 1.5
+ ..{curl 0.5}(83,136){curl 0.5}..tension 1.2
+ ..(38,132){left}..tension 1.2..(-47,142)
+ ..(-68,138)..tension 1.2..{curl 1.2}(-83,126){curl 1.2}
+ ..(-80,112)..(-72,58){down} % milieu du cote gauche
+ ..(-73,22)..(-74,13)..tension 1.3
+ ..{curl 0.7}(-56,3){curl 0.7}..tension 1.2
+ ..(3,10){right}..tension 1.5..(62,6)..(77,-12)..(72,-37)
+ ..(53,-60)..(10,-70){left} % bas du "5"
+ ..(-26,-67)..(-38,-61)..{curl 0.9}(-50,-52){curl 0.9}
+ ..(-58,-56)--(-65,-62)..tension 0.8..(-65,-72)..tension 1.5
+ ..(-34,-86)..(0,-93){right}..(22,-92)..tension 2..(78,-83)
+ ..(96,-66)..tension 1.2..(102,-37)..tension 1.2..(118,-1)
+ ..(119,8)..tension 2..(111,28)..(100,32)..(66,28)..tension 2
+ ..(35,28)..tension 0.8..(29,36)..tension 0.8
+ ..(37,45) % dent de droite en bas
+ --(71,46){curl0} ..tension 1.1..(82,53){up}..tension 1.1
+ ..{curl0}(70,60) --(36,60)..tension 0.8..(28,67)..tension 0.8
+ ..(38,75)--(74,75){curl0}..tension 1.1..(85,81)..tension 1.1
+ ..{curl0}(75,90)--(37,91)..tension 0.8..(29,101)..tension 0.8
+ ..(40,108)..tension 1.5..(84,111){curl 0.2}
+ ..tension1.5..cycle;
+ filldraw (-15,112)..tension 2.5..(-42,112)..tension 0.8
+ ..(-49,104)..tension 0.8..(-43,98)..tension 2
+ ..(-13,97)..tension 0.8..(-9,104)..tension 0.8
+ ..cycle;
+ filldraw (-14,78)..tension 2..(-43,79)..tension 0.8
+ ..(-48,73){down}..tension 0.8..(-43,63)..tension 2
+ ..(-14,63)..tension 0.8..(-11,71)..tension 0.8
+ ..cycle;
+ filldraw (-14,44)..tension 2..(-42,46)..tension 0.8
+ ..(-49,38)..tension 0.8..(-42,29)..tension 2
+ ..(-15,30)..tension 0.8..(-10,37)..tension 0.8
+ ..cycle;
+ % premiere patte (de droite a gauche)
+ unfilldraw (66,-43){curl 0.95}..tension 1.5
+ ..(53,-13)..tension 1.5..(41,-6)..tension 0.9
+ ..(36,-7)..tension 1.5..(42,-27)..tension 1.5
+ ..{curl 0.95}cycle;
+ % deuxieme patte
+ unfilldraw (30,-40){curl 0.9}..tension 1.7
+ ..(28,-20) ..tension 0.8..(20,-10)..tension 1.4
+ ..{curl 0.9}(2,-7){curl 0.9}..(1,-20)..tension 1.7
+ ..{curl 0.9}cycle;
+ % troisieme patte
+ unfilldraw (-42,-46){curl 0.8}..tension 2..(-8,-21)
+ ..tension 1.7..(-10,-8)..tension 1.7..(-30,-7)..tension 2
+ ..{curl 0.8}cycle;
+ % quatrieme patte (a gauche)
+ unfilldraw (-54,-12){curl0.7}..tension 1.5..(-74,-8)
+ ..tension 1.6..(-102,-33)..tension 1.7..(-143,-60)
+ ..(-149,-70)..(-140,-72)..tension 2.3..(-57,-34)..tension 1.2
+ ..{curl0.9}cycle;
+endchar;
+
+beginchar ("n",max_diametre#,max_rayon#,max_rayon#); "cavalier rouge/red knight";
+ BaseBlanche;
+ filldraw (92,123)..tension 1.5
+ ..{curl 0.5}(83,136){curl 0.5}..tension 1.2
+ ..(38,132){left}..tension 1.2..(-47,142)
+ ..(-68,138)..tension 1.2..{curl 1.2}(-83,126){curl 1.2}
+ ..(-80,112)..(-72,58){down} % milieu du cote gauche
+ ..(-73,22)..(-74,13)..tension 1.3
+ ..{curl 0.7}(-56,3){curl 0.7}..tension 1.2
+ ..(3,10){right}..tension 1.5..(62,6)..(77,-12)..(72,-37)
+ ..(53,-60)..(10,-70){left} % bas du "5"
+ ..(-26,-67)..(-38,-61)..{curl 0.9}(-50,-52){curl 0.9}
+ ..(-58,-56)--(-65,-62)..tension 0.8..(-65,-72)..tension 1.5
+ ..(-34,-86)..(0,-93){right}..(22,-92)..tension 2..(78,-83)
+ ..(96,-66)..tension 1.2..(102,-37)..tension 1.2..(118,-1)
+ ..(119,8)..tension 2..(111,28)..(100,32)..(66,28)..tension 2
+ ..(35,28)..tension 0.8..(29,36)..tension 0.8
+ ..(37,45) % dent de droite en bas
+ --(71,46){curl0} ..tension 1.1..(82,53){up}..tension 1.1
+ ..{curl0}(70,60) --(36,60)..tension 0.8..(28,67)..tension 0.8
+ ..(38,75)--(74,75){curl0}..tension 1.1..(85,81)..tension 1.1
+ ..{curl0}(75,90)--(37,91)..tension 0.8..(29,101)..tension 0.8
+ ..(40,108)..tension 1.5..(84,111){curl 0.2}
+ ..tension1.5..cycle;
+ unfilldraw (-15,112)..tension 2.5..(-42,112)..tension 0.8
+ ..(-49,104)..tension 0.8..(-43,98)..tension 2
+ ..(-13,97)..tension 0.8..(-9,104)..tension 0.8
+ ..cycle;
+ unfilldraw (-14,78)..tension 2..(-43,79)..tension 0.8
+ ..(-48,73){down}..tension 0.8..(-43,63)..tension 2
+ ..(-14,63)..tension 0.8..(-11,71)..tension 0.8
+ ..cycle;
+ unfilldraw (-14,44)..tension 2..(-42,46)..tension 0.8
+ ..(-49,38)..tension 0.8..(-42,29)..tension 2
+ ..(-15,30)..tension 0.8..(-10,37)..tension 0.8
+ ..cycle;
+ % premiere patte (de droite a gauche)
+ filldraw (66,-43){curl 0.95}..tension 1.5
+ ..(53,-13)..tension 1.5..(41,-6)..tension 0.9
+ ..(36,-7)..tension 1.5..(42,-27)..tension 1.5
+ ..{curl 0.95}cycle;
+ % deuxieme patte
+ filldraw (30,-40){curl 0.9}..tension 1.7
+ ..(28,-20) ..tension 0.8..(20,-10)..tension 1.4
+ ..{curl 0.9}(2,-7){curl 0.9}..(1,-20)..tension 1.7
+ ..{curl 0.9}cycle;
+ % troisieme patte
+ filldraw (-42,-46){curl 0.8}..tension 2..(-8,-21)
+ ..tension 1.7..(-10,-8)..tension 1.7..(-30,-7)..tension 2
+ ..{curl 0.8}cycle;
+ % quatrieme patte (a gauche)
+ filldraw (-54,-12){curl0.7}..tension 1.5..(-74,-8)
+ ..tension 1.6..(-102,-33)..tension 1.7..(-143,-60)
+ ..(-149,-70)..(-140,-72)..tension 2.3..(-57,-34)..tension 1.2
+ ..{curl0.9}cycle;
+endchar;
+
+beginchar ("V",max_diametre#,max_rayon#,max_rayon#); "cavalier noir/black knight sur fond blanc";
+% Pour l'instant, pratiquement identique au cavalier blanc.
+% Seule la patte de gauche est un peu plus longue, pour differencier.
+ BaseNoireBlanche;
+ filldraw (92,123)..tension 1.5
+ ..{curl 0.5}(83,136){curl 0.5}..tension 1.2
+ ..(38,132){left}..tension 1.2..(-47,142)
+ ..(-68,138)..tension 1.2..{curl 1.2}(-83,126){curl 1.2}
+ ..(-80,112)..(-72,58){down} % milieu du cote gauche
+ ..(-73,22)..(-74,13)..tension 1.3
+ ..{curl 0.7}(-56,3){curl 0.7}..tension 1.2
+ ..(3,10){right}..tension 1.5..(62,6)..(77,-12)..(72,-37)
+ ..(53,-60)..(10,-70){left} % bas du "5"
+ ..(-26,-67)..(-38,-61)..{curl 0.9}(-50,-52){curl 0.9}
+ ..(-58,-56)--(-65,-62)..tension 0.8..(-65,-72)..tension 1.5
+ ..(-34,-86)..(0,-93){right}..(22,-92)..tension 2..(78,-83)
+ ..(96,-66)..tension 1.2..(102,-37)..tension 1.2..(118,-1)
+ ..(119,8)..tension 2..(111,28)..(100,32)..(66,28)..tension 2
+ ..(35,28)..tension 0.8..(29,36)..tension 0.8
+ ..(37,45) % dent de droite en bas
+ --(71,46){curl0} ..tension 1.1..(82,53){up}..tension 1.1
+ ..{curl0}(70,60) --(36,60)..tension 0.8..(28,67)..tension 0.8
+ ..(38,75)--(74,75){curl0}..tension 1.1..(85,81)..tension 1.1
+ ..{curl0}(75,90)--(37,91)..tension 0.8..(29,101)..tension 0.8
+ ..(40,108)..tension 1.5..(84,111){curl 0.2}
+ ..tension1.5..cycle;
+ unfilldraw (-15,112)..tension 2.5..(-42,112)..tension 0.8
+ ..(-49,104)..tension 0.8..(-43,98)..tension 2
+ ..(-13,97)..tension 0.8..(-9,104)..tension 0.8
+ ..cycle;
+ unfilldraw (-14,78)..tension 2..(-43,79)..tension 0.8
+ ..(-48,73){down}..tension 0.8..(-43,63)..tension 2
+ ..(-14,63)..tension 0.8..(-11,71)..tension 0.8
+ ..cycle;
+ unfilldraw (-14,44)..tension 2..(-42,46)..tension 0.8
+ ..(-49,38)..tension 0.8..(-42,29)..tension 2
+ ..(-15,30)..tension 0.8..(-10,37)..tension 0.8
+ ..cycle;
+ % premiere patte (de droite a gauche)
+ filldraw (66,-43){curl 0.95}..tension 1.5
+ ..(53,-13)..tension 1.5..(41,-6)..tension 0.9
+ ..(36,-7)..tension 1.5..(42,-27)..tension 1.5
+ ..{curl 0.95}cycle;
+ % deuxieme patte
+ filldraw (30,-40){curl 0.9}..tension 1.7
+ ..(28,-20) ..tension 0.8..(20,-10)..tension 1.4
+ ..{curl 0.9}(2,-7){curl 0.9}..(1,-20)..tension 1.7
+ ..{curl 0.9}cycle;
+ % troisieme patte
+ filldraw (-42,-46){curl 0.8}..tension 2..(-8,-21)
+ ..tension 1.7..(-10,-8)..tension 1.7..(-30,-7)..tension 2
+ ..{curl 0.8}cycle;
+ % quatrieme patte (a gauche)
+ filldraw (-54,-12){curl0.7}..tension 1.5..(-74,-8)
+ ..tension 1.6..(-102,-33)..tension 1.7..(-153,-60)
+ ..(-159,-70)..(-150,-72)..tension 2.3..(-57,-34)..tension 1.2
+ ..{curl0.9}cycle;
+endchar;
+
+beginchar ("R",max_diametre#,max_rayon#,max_rayon#); "char noir/black rook";
+ BaseNoire;
+ currenttransform := currenttransform shifted (4FS,0);
+ unfilldraw (4,-113)..tension 2..(12,-100)--(15,-70)
+ ..controls(13,-58) and (14,-55)
+ ..(25,-55)..(60,-55)..controls(80,-56)
+ ..(95,-59){curl0.5}..controls(102,-52)
+ ..(112,-47)..(115,-39){curl0.5} % right tip of lower hor-bar
+ ..(53,-40){left}..controls(13,-39)..(13,-22)..controls(13,-11)
+ ..(32,-11)..tension 1.5..(51,-12)..tension 1.5
+ ..(68,-12)..tension 0.8..(72,-8)..tension 1.5 % bot right of box
+ ..(71,-1)..tension 2..(72,43)..tension 3
+ ..(75,51)..tension 3 % top right of box
+ ..(60,70)..tension 3..(42,63)..tension 2..(21,61)..controls(15,61)
+ ..(15,75)..{curl 0.2}(16,83){curl 0.2}
+ ..(25,84)..(72,81){curl0.7}..tension 2..(86,100)..tension 1.5
+ ..(82,107){curl0.2}..tension 0.8..(78,108){curl0.2}..tension 2
+ ..(50,103)..{curl0}(20,101)..(15,102){curl0.3}..tension 0.8
+ ..(13,110)..(6,124)..(-4,127){left}..(-15,123)
+ ..(-19,111)..(-21,104){curl 0.8}..(-26,102)..tension 1.5
+ ..(-50,102)..tension 1.5..(-66,109)..tension 2.5
+ ..(-95,92)..tension 0.8..(-92,82)..controls(-50,83)
+ ..(-25,83)..tension 0.8 ..(-20,78)..tension 1.5
+ ..(-21,65)..tension 0.8..(-25,61)..tension 2
+ ..(-55,60)..tension 1.7..(-70,65)..tension 2 % top left of box
+ ..(-85,51)..tension 2..(-83,43)..tension 2
+ ..(-84,-1)..(-74,-15)..tension 1.5..(-46,-13)..tension 2
+ ..(-24,-13)..tension 0.8..(-20,-20)..tension 1.8
+ ..(-20,-36)..tension 0.8..(-25,-40)..tension 1.5
+ ..(-76,-38)..{curl 0.9}(-100,-30)..tension 0.8
+ ..(-102,-30)..tension 2..(-128,-57)..tension 0.8
+ ..(-127,-62){curl 0.8} % left lower bar
+ ..(-115,-65)..(-96,-60)..tension 2..(-56,-54)..tension 2
+ ..(-26,-54)..tension 0.8..(-20,-57)..tension 3
+ ..(-20,-82)--(-21,-100)..tension 3..(0,-111)..tension 2
+ ..cycle;
+ filldraw (47,41)..tension 0.8..(45,46)--(16,45)..tension 0.8
+ ..(14,40)..tension 0.8..(16,32)--(45,32)..tension 0.8..cycle;
+ filldraw (47,10)..tension 0.8..(45,18)--(16,18)..tension 0.8
+ ..(14,12)..tension 0.8..(16,2)--(46,2)..tension 0.8..cycle;
+ filldraw (-21,37)..tension 0.8..(-23,45)--(-54,46)..tension 0.8
+ ..(-58,38)..tension 0.8..(-56,31)--(-22,32)..tension 0.8..cycle;
+ filldraw (-22,13)..tension 0.8..(-24,18)--(-57,18)..tension 0.8
+ ..(-58,13)..tension 0.8..(-55,2)--(-23,3)..tension 0.8..cycle;
+endchar;
+
+beginchar ("r",max_diametre#,max_rayon#,max_rayon#); "char rouge/red rook";
+ BaseBlanche;
+ currenttransform := currenttransform shifted (4FS,0);
+ filldraw (4,-113)..tension 2..(12,-100)--(15,-70)
+ ..controls(13,-58) and (14,-55)
+ ..(25,-55)..(60,-55)..controls(80,-56)
+ ..(95,-59){curl0.5}..controls(102,-52)
+ ..(112,-47)..(115,-39){curl0.5} % right tip of lower hor-bar
+ ..(53,-40){left}..controls(13,-39)..(13,-22)..controls(13,-11)
+ ..(32,-11)..tension 1.5..(51,-12)..tension 1.5
+ ..(68,-12)..tension 0.8..(72,-8)..tension 1.5 % bot right of box
+ ..(71,-1)..tension 2..(72,43)..tension 3
+ ..(75,51)..tension 3 % top right of box
+ ..(60,70)..tension 3..(42,63)..tension 2..(21,61)..controls(15,61)
+ ..(15,75)..{curl 0.2}(16,83){curl 0.2}
+ ..(25,84)..(72,81){curl0.7}..tension 2..(86,100)..tension 1.5
+ ..(82,107){curl0.2}..tension 0.8..(78,108){curl0.2}..tension 2
+ ..(50,103)..{curl0}(20,101)..(15,102){curl0.3}..tension 0.8
+ ..(13,110)..(6,124)..(-4,127){left}..(-15,123)
+ ..(-19,111)..(-21,104){curl 0.8}..(-26,102)..tension 1.5
+ ..(-50,102)..tension 1.5..(-66,109)..tension 2.5
+ ..(-95,92)..tension 0.8..(-92,82)..controls(-50,83)
+ ..(-25,83)..tension 0.8 ..(-20,78)..tension 1.5
+ ..(-21,65)..tension 0.8..(-25,61)..tension 2
+ ..(-55,60)..tension 1.7..(-70,65)..tension 2 % top left of box
+ ..(-85,51)..tension 2..(-83,43)..tension 2
+ ..(-84,-1)..(-74,-15)..tension 1.5..(-46,-13)..tension 2
+ ..(-24,-13)..tension 0.8..(-20,-20)..tension 1.8
+ ..(-20,-36)..tension 0.8..(-25,-40)..tension 1.5
+ ..(-76,-38)..{curl 0.9}(-100,-30)..tension 0.8
+ ..(-102,-30)..tension 2..(-128,-57)..tension 0.8
+ ..(-127,-62){curl 0.8} % left lower bar
+ ..(-115,-65)..(-96,-60)..tension 2..(-56,-54)..tension 2
+ ..(-26,-54)..tension 0.8..(-20,-57)..tension 3
+ ..(-20,-82)--(-21,-100)..tension 3..(0,-111)..tension 2
+ ..cycle;
+ unfilldraw (47,41)..tension 0.8..(45,46)--(16,45)..tension 0.8
+ ..(14,40)..tension 0.8..(16,32)--(45,32)..tension 0.8..cycle;
+ unfilldraw (47,10)..tension 0.8..(45,18)--(16,18)..tension 0.8
+ ..(14,12)..tension 0.8..(16,2)--(46,2)..tension 0.8..cycle;
+ unfilldraw (-21,37)..tension 0.8..(-23,45)--(-54,46)..tension 0.8
+ ..(-58,38)..tension 0.8..(-56,31)--(-22,32)..tension 0.8..cycle;
+ unfilldraw (-22,13)..tension 0.8..(-24,18)--(-57,18)..tension 0.8
+ ..(-58,13)..tension 0.8..(-55,2)--(-23,3)..tension 0.8..cycle;
+endchar;
+
+beginchar ("W",max_diametre#,max_rayon#,max_rayon#); "char noir/black rook sur fond blanc";
+ BaseNoireBlanche;
+ currenttransform := currenttransform shifted (4FS,0);
+ filldraw (4,-113)..tension 2..(12,-100)--(15,-70)
+ ..controls(13,-58) and (14,-55)
+ ..(25,-55)..(60,-55)..controls(80,-56)
+ ..(95,-59){curl0.5}..controls(102,-52)
+ ..(112,-47)..(115,-39){curl0.5} % right tip of lower hor-bar
+ ..(53,-40){left}..controls(13,-39)..(13,-22)..controls(13,-11)
+ ..(32,-11)..tension 1.5..(51,-12)..tension 1.5
+ ..(68,-12)..tension 0.8..(72,-8)..tension 1.5 % bot right of box
+ ..(71,-1)..tension 2..(72,43)..tension 3
+ ..(75,51)..tension 3 % top right of box
+ ..(60,70)..tension 3..(42,63)..tension 2..(21,61)..controls(15,61)
+ ..(15,75)..{curl 0.2}(16,83){curl 0.2}
+ ..(25,84)..(72,81){curl0.7}..tension 2..(86,100)..tension 1.5
+ ..(82,107){curl0.2}..tension 0.8..(78,108){curl0.2}..tension 2
+ ..(50,103)..{curl0}(20,101)..(15,102){curl0.3}..tension 0.8
+ ..(13,110)..(6,124)..(-4,127){left}..(-15,123)
+ ..(-19,111)..(-21,104){curl 0.8}..(-26,102)..tension 1.5
+ ..(-50,102)..tension 1.5..(-66,109)..tension 2.5
+ ..(-95,92)..tension 0.8..(-92,82)..controls(-50,83)
+ ..(-25,83)..tension 0.8 ..(-20,78)..tension 1.5
+ ..(-21,65)..tension 0.8..(-25,61)..tension 2
+ ..(-55,60)..tension 1.7..(-70,65)..tension 2 % top left of box
+ ..(-85,51)..tension 2..(-83,43)..tension 2
+ ..(-84,-1)..(-74,-15)..tension 1.5..(-46,-13)..tension 2
+ ..(-24,-13)..tension 0.8..(-20,-20)..tension 1.8
+ ..(-20,-36)..tension 0.8..(-25,-40)..tension 1.5
+ ..(-76,-38)..{curl 0.9}(-100,-30)..tension 0.8
+ ..(-102,-30)..tension 2..(-128,-57)..tension 0.8
+ ..(-127,-62){curl 0.8} % left lower bar
+ ..(-115,-65)..(-96,-60)..tension 2..(-56,-54)..tension 2
+ ..(-26,-54)..tension 0.8..(-20,-57)..tension 3
+ ..(-20,-82)--(-21,-100)..tension 3..(0,-111)..tension 2
+ ..cycle;
+ unfilldraw (47,41)..tension 0.8..(45,46)--(16,45)..tension 0.8
+ ..(14,40)..tension 0.8..(16,32)--(45,32)..tension 0.8..cycle;
+ unfilldraw (47,10)..tension 0.8..(45,18)--(16,18)..tension 0.8
+ ..(14,12)..tension 0.8..(16,2)--(46,2)..tension 0.8..cycle;
+ unfilldraw (-21,37)..tension 0.8..(-23,45)--(-54,46)..tension 0.8
+ ..(-58,38)..tension 0.8..(-56,31)--(-22,32)..tension 0.8..cycle;
+ unfilldraw (-22,13)..tension 0.8..(-24,18)--(-57,18)..tension 0.8
+ ..(-58,13)..tension 0.8..(-55,2)--(-23,3)..tension 0.8..cycle;
+endchar;
+
+beginchar ("C",max_diametre#,max_rayon#,max_rayon#); "canon noir/black cannon";
+ BaseNoire;
+ unfilldraw (-16,-24){curl0.2}..(-12,-10)..tension 1.3 ..(-10,20)..tension 1.3
+ ..(-9,28)..tension 1.5..(0,45)..tension 1.5..(10,56)..tension 1.2
+ ..(19,60)..tension 1.2..(50,64)..tension 1.2..(72,63)..tension 0.8
+ ..(77,54)..tension 1.2..(79,30)..tension 1.2..{curl 0.1}(81,-16){curl 0.1}
+ ..{curl 0.1}(92,-19){curl 0.7}..tension 1.5..(105,-6)..(109,9)..tension 1.5
+ ..(110,50)..tension 1.2..{up}(112,70){curl 0.5}..tension 1.2
+ ..(105,94)..tension 0.8..(100,99){left}..tension 0.8..(92,96)
+ ..(77,87)..tension 1.2..(40,81){left}..tension 0.8..(30,90)
+ --(30,109)..tension 1.1..(25,125)..(16,129)..(2,122)..tension 1.1
+ ..(0,110)..(-3,84)..(-6,66)..tension 0.8..(-17,61)..(-26,63)..(-35,60)..tension 1.2
+ ..(-39,43){down}..(-37,36) ..(-33,20)..(-31,0)..(-32,-12){curl 0.2}..tension 1.5
+ ..{curl 0.7}cycle;
+ unfilldraw (138,-10)..tension 1.1..(100,-46)..(81,-57)..(70,-60)
+ ..(60,-58)..(33,-51)..(20,-40)..(17,-27){curl 0.8}..tension 1.5
+ ..(58,-18)..tension 0.8..(62,-15){curl 0.9}..tension 1.1
+ ..(62,14)..tension 1.5..(61,37)..tension 0.8..(56,43)..tension 1.6
+ ..(34,43)..tension 1.6..{curl 0.8}(12,38)..tension 1.5
+ ..{curl 0.8}(2,28)..tension 1.8..(-1,-40)..tension 1.1..(10,-66)..tension 1.1
+ ..(50,-87)..tension 1.1..(81,-90){right}..tension 1.1..(110,-86)..tension 0.8
+ ..(122,-76)..tension 1.1..(135,-50)..tension 0.8
+ ..{curl 0.9}cycle;
+ filldraw (18,-3)..tension 4..(43,2)..tension 4..(42,21)..tension 4..(20,18)..tension 4
+ ..cycle;
+ unfilldraw (-50,24){up}..(-48,56)..(-46,82)..(-44,98){up} ..(-49,114)..tension 0.9
+ ..(-56,123)..tension 0.8..(-64,122)..tension 1.5..(-75,112)..tension 1.5
+ ..(-81,98){down}..tension 1.3..(-77,88)..(-72,65)..(-69,21){down}
+ ..(-70,0)..(-75,-17)..tension 1.5..(-88,-40)..tension 1.5..(-112,-60)..tension 0.8
+ ..(-117,-73)..tension 0.8..(-106,-88)..(-87,-85)..tension 1.5
+ ..(-70,-70)..(-65,-58)..{curl 0.9}(-58,-36)..tension 2..(-44,-55)..tension 2
+ ..{curl 0.9}(-32,-76)--(-16,-72)..(-15,-61)..(-23,-44)..tension 1.5
+ ..(-43,-13)..(-49,4)
+ ..cycle;
+ unfilldraw (-85,34)..tension 1.7..(-95,65)..tension 0.8..(-106,65)..tension 1.8
+ ..(-114,55)..tension 0.8..(-113,46)..tension 1.5..(-106,20)..tension 1.5
+ ..(-109,-8)..tension 0.8..(-107,-16)..tension 1.5..(-101,-27)..tension 0.8
+ ..(-94,-26)..(-90,-16)..(-88,10)..(-85,23)..tension 0.8
+ ..cycle;
+endchar;
+
+beginchar ("c",max_diametre#,max_rayon#,max_rayon#); "canon rouge/red cannon";
+ BaseBlanche;
+ filldraw (-16,-24){curl0.2}..(-12,-10)..tension 1.3 ..(-10,20)..tension 1.3
+ ..(-9,28)..tension 1.5..(0,45)..tension 1.5..(10,56)..tension 1.2
+ ..(19,60)..tension 1.2..(50,64)..tension 1.2..(72,63)..tension 0.8
+ ..(77,54)..tension 1.2..(79,30)..tension 1.2..{curl 0.1}(81,-16){curl 0.1}
+ ..{curl 0.1}(92,-19){curl 0.7}..tension 1.5..(105,-6)..(109,9)..tension 1.5
+ ..(110,50)..tension 1.2..{up}(112,70){curl 0.5}..tension 1.2
+ ..(105,94)..tension 0.8..(100,99){left}..tension 0.8..(92,96)
+ ..(77,87)..tension 1.2..(40,81){left}..tension 0.8..(30,90)
+ --(30,109)..tension 1.1..(25,125)..(16,129)..(2,122)..tension 1.1
+ ..(0,110)..(-3,84)..(-6,66)..tension 0.8..(-17,61)..(-26,63)..(-35,60)..tension 1.2
+ ..(-39,43){down}..(-37,36) ..(-33,20)..(-31,0)..(-32,-12){curl 0.2}..tension 1.5
+ ..{curl 0.7}cycle;
+ filldraw (138,-10)..tension 1.1..(100,-46)..(81,-57)..(70,-60)
+ ..(60,-58)..(33,-51)..(20,-40)..(17,-27){curl 0.8}..tension 1.5
+ ..(58,-18)..tension 0.8..(62,-15){curl 0.9}..tension 1.1
+ ..(62,14)..tension 1.5..(61,37)..tension 0.8..(56,43)..tension 1.6
+ ..(34,43)..tension 1.6..{curl 0.8}(12,38)..tension 1.5
+ ..{curl 0.8}(2,28)..tension 1.8..(-1,-40)..tension 1.1..(10,-66)..tension 1.1
+ ..(50,-87)..tension 1.1..(81,-90){right}..tension 1.1..(110,-86)..tension 0.8
+ ..(122,-76)..tension 1.1..(135,-50)..tension 0.8
+ ..{curl 0.9}cycle;
+ unfilldraw (18,-3)..tension 4..(43,2)..tension 4..(42,21)..tension 4..(20,18)..tension 4
+ ..cycle;
+ filldraw (-50,24){up}..(-48,56)..(-46,82)..(-44,98){up} ..(-49,114)..tension 0.9
+ ..(-56,123)..tension 0.8..(-64,122)..tension 1.5..(-75,112)..tension 1.5
+ ..(-81,98){down}..tension 1.3..(-77,88)..(-72,65)..(-69,21){down}
+ ..(-70,0)..(-75,-17)..tension 1.5..(-88,-40)..tension 1.5..(-112,-60)..tension 0.8
+ ..(-117,-73)..tension 0.8..(-106,-88)..(-87,-85)..tension 1.5
+ ..(-70,-70)..(-65,-58)..{curl 0.9}(-58,-36)..tension 2..(-44,-55)..tension 2
+ ..{curl 0.9}(-32,-76)--(-16,-72)..(-15,-61)..(-23,-44)..tension 1.5
+ ..(-43,-13)..(-49,4)
+ ..cycle;
+ filldraw (-85,34)..tension 1.7..(-95,65)..tension 0.8..(-106,65)..tension 1.8
+ ..(-114,55)..tension 0.8..(-113,46)..tension 1.5..(-106,20)..tension 1.5
+ ..(-109,-8)..tension 0.8..(-107,-16)..tension 1.5..(-101,-27)..tension 0.8
+ ..(-94,-26)..(-90,-16)..(-88,10)..(-85,23)..tension 0.8
+ ..cycle;
+endchar;
+
+beginchar ("X",max_diametre#,max_rayon#,max_rayon#); "canon noir/black cannon sur fond blanc";
+ BaseNoireBlanche;
+ filldraw (-16,-24){curl0.2}..(-12,-10)..tension 1.3 ..(-10,20)..tension 1.3
+ ..(-9,28)..tension 1.5..(0,45)..tension 1.5..(10,56)..tension 1.2
+ ..(19,60)..tension 1.2..(50,64)..tension 1.2..(72,63)..tension 0.8
+ ..(77,54)..tension 1.2..(79,30)..tension 1.2..{curl 0.1}(81,-16){curl 0.1}
+ ..{curl 0.1}(92,-19){curl 0.7}..tension 1.5..(105,-6)..(109,9)..tension 1.5
+ ..(110,50)..tension 1.2..{up}(112,70){curl 0.5}..tension 1.2
+ ..(105,94)..tension 0.8..(100,99){left}..tension 0.8..(92,96)
+ ..(77,87)..tension 1.2..(40,81){left}..tension 0.8..(30,90)
+ --(30,109)..tension 1.1..(25,125)..(16,129)..(2,122)..tension 1.1
+ ..(0,110)..(-3,84)..(-6,66)..tension 0.8..(-17,61)..(-26,63)..(-35,60)..tension 1.2
+ ..(-39,43){down}..(-37,36) ..(-33,20)..(-31,0)..(-32,-12){curl 0.2}..tension 1.5
+ ..{curl 0.7}cycle;
+ filldraw (138,-10)..tension 1.1..(100,-46)..(81,-57)..(70,-60)
+ ..(60,-58)..(33,-51)..(20,-40)..(17,-27){curl 0.8}..tension 1.5
+ ..(58,-18)..tension 0.8..(62,-15){curl 0.9}..tension 1.1
+ ..(62,14)..tension 1.5..(61,37)..tension 0.8..(56,43)..tension 1.6
+ ..(34,43)..tension 1.6..{curl 0.8}(12,38)..tension 1.5
+ ..{curl 0.8}(2,28)..tension 1.8..(-1,-40)..tension 1.1..(10,-66)..tension 1.1
+ ..(50,-87)..tension 1.1..(81,-90){right}..tension 1.1..(110,-86)..tension 0.8
+ ..(122,-76)..tension 1.1..(135,-50)..tension 0.8
+ ..{curl 0.9}cycle;
+ unfilldraw (18,-3)..tension 4..(43,2)..tension 4..(42,21)..tension 4..(20,18)..tension 4
+ ..cycle;
+ filldraw (-50,24){up}..(-48,56)..(-46,82)..(-44,98){up} ..(-49,114)..tension 0.9
+ ..(-56,123)..tension 0.8..(-64,122)..tension 1.5..(-75,112)..tension 1.5
+ ..(-81,98){down}..tension 1.3..(-77,88)..(-72,65)..(-69,21){down}
+ ..(-70,0)..(-75,-17)..tension 1.5..(-88,-40)..tension 1.5..(-112,-60)..tension 0.8
+ ..(-117,-73)..tension 0.8..(-106,-88)..(-87,-85)..tension 1.5
+ ..(-70,-70)..(-65,-58)..{curl 0.9}(-58,-36)..tension 2..(-44,-55)..tension 2
+ ..{curl 0.9}(-32,-76)--(-16,-72)..(-15,-61)..(-23,-44)..tension 1.5
+ ..(-43,-13)..(-49,4)
+ ..cycle;
+ filldraw (-85,34)..tension 1.7..(-95,65)..tension 0.8..(-106,65)..tension 1.8
+ ..(-114,55)..tension 0.8..(-113,46)..tension 1.5..(-106,20)..tension 1.5
+ ..(-109,-8)..tension 0.8..(-107,-16)..tension 1.5..(-101,-27)..tension 0.8
+ ..(-94,-26)..(-90,-16)..(-88,10)..(-85,23)..tension 0.8
+ ..cycle;
+endchar;
+
+beginchar ("P",max_diametre#,max_rayon#,max_rayon#) "pion noir/black pawn";
+ BaseNoire;
+ unfilldraw (-12,-117)..tension 3
+ ..(10,-105)
+ ..(16,-96)
+ ..(21,-78)..tension 3
+ ..(23,-41)..tension 0.8
+ ..(40,-30)..tension 2
+ ..(85,-33)..tension 2
+ ..(112,-38)..tension 4
+ ..(139,-9)
+ ..{left}(115,-4)
+ ..(65,-7){left}..tension 2
+ ..(-50,-10)..tension 2
+ ..(-80,-9)..controls(-102,-7)
+ ..(-112,-2)..tension 10
+ ..(-131,-40){dir -5}%..tension 2
+ ..(-100,-35)..tension 2
+ ..(-37,-32)..tension 0.8
+ ..(-24,-43)..tension 2
+ ..(-24,-75)
+ ..{curl 2}cycle;
+ unfilldraw (-2,16){dir -125}
+ ..(-41,-17)
+ --(37,-17)
+ ..{curl 0}cycle;
+% fin de la croix du bas
+
+% debut du chapeau du haut
+ unfilldraw (90,70)
+ --(110,95)..tension0.8
+ ..(103,102)..tension 2
+ ..(87,92)..tension 2
+ ..(45,96)..tension0.8
+ ..(38,100)
+ ---(20,126)..controls(3,120.5)
+ ..(-10,118)
+ --(-18,102)..tension 2
+ ..(-35,99.5){left}..tension 2
+ ..(-74,103){curl 2}..tension 3
+ ..(-92,79)..tension 0.8
+ ..(-90,75)..tension 3
+ ..(-60,78)..tension 2
+ ..(-33,79)..tension 2
+ ..(25,78)
+ ..cycle; % fin du chapeau
+
+% petit morceau de droite
+ unfilldraw (93,10)
+ ---(111,12)
+ ---(113,30)
+ ---(80,48)
+ ---(50,65)
+ ---(42,63)
+ ---(42,61)..tension 10
+ ..(31,48)..tension 10
+ ..(5,24)
+ ---(17,18)
+ ..(28,19)
+ ---(52,42)..tension 3
+ ..(75,26)..tension 3
+ ..cycle;
+
+% petit morceau de gauche
+ unfilldraw (-5,33)
+ ---(-34,54)
+ ---(-46,66)..tension 2.5
+ ..flex((-68,64),(-57,50),(-28,26),(-20,19))
+ ..tension 3..cycle;
+ unfilldraw (-40,40)
+ ---(-55,53)---(-90,30)..tension 3
+ ..(-106,20)..tension 0.8
+ ..(-110,10)..controls(-97,5)
+ ..(-88,7)..controls(-64,24)
+ ..cycle;
+endchar;
+
+beginchar ("p",max_diametre#,max_rayon#,max_rayon#); "pion rouge/red pawn";
+ BaseBlanche;
+% Grande barre horizontale
+ filldraw (107,-17)..tension 2
+ ..(120,-3)..tension 1.1..(117,7)
+ &flex((117,7),(46,2),
+ (-1,10),(-67,8),(-103,14))
+ ..tension 0.8..(-112,13)
+ ---(-127,-8)..(-124,-17)..(-111,-22)
+ &flex((-111,-22),(-15,-11),
+ (95,-20))..tension 0.8
+ ..cycle;
+
+% Section gauche et du haut
+ filldraw (-50,0)..tension 1.5
+ ..(-45,43)..tension 1.5
+ ..(-43,76)..tension 0.9
+ ..(-37,83)..tension 1.8
+ ..(10,88)..tension 1.8
+ ..(53,87)%..controls(60,86)
+ ..(70,89)
+ ..(81,99)..tension 0.8
+ ..(81,104)..tension 1.1
+ ..(72,110)..tension 0.8
+ ..(64,110)%..tension 1.1
+ ..(37,106)
+ ..{left}(-6,104)
+ ..{curl 1.2}(-50,109)..tension 4
+ ..(-71,92)..tension 3
+ ..(-70,42){down}
+ ..(-78,0)
+ --cycle;
+
+% Petite barre horizontale centrale
+ filldraw (-60,40)..tension 1.5
+ ..{right}(-2,47)..tension 1.5
+ ..(52,42)..tension 0.9
+ ..(67,44)..tension 1.5
+ ..(82,62)..tension 0.8
+ ..(77,67)..tension 1.5
+ ..(42,64)..(0,64)
+ ..(-58,65)
+ --cycle;
+
+% Petite barre verticale centrale
+ filldraw (27,0)
+ --(25,54)--(-3,54)
+ ..controls(2,24)..(0,0)
+ --cycle;
+
+% patte de gauche
+ filldraw (-56,-28)..tension 3
+ ..(-80,-50)..tension 3
+ ..(-110,-72)..(-116,-84)
+ ..(-104,-86)..tension 2.5
+ ..(-37,-52)..(-31,-46)
+ ..(-28,-38)..tension 0.9
+ ..(-30,-30)..tension 1.6
+ ..(-46,-24)..tension 0.8
+ ..cycle;
+
+% patte de droite
+ filldraw (100,-66)
+ ..controls(92,-60)
+ ..(72,-46)..tension 3
+ ..(48,-29)
+ ..(35,-27)
+ ..(18,-31)
+ ..(15,-40)
+ ..(20,-51){curl 1}..tension 1.5
+ ..(62,-63)..tension 1.5
+ ..(93,-76)..tension 0.8
+ ..cycle;
+endchar;
+
+beginchar ("Y",max_diametre#,max_rayon#,max_rayon#); "pion noir/black pawn sur fond blanc";
+ BaseNoireBlanche;
+ filldraw (-12,-117)..tension 3
+ ..(10,-105)
+ ..(16,-96)
+ ..(21,-78)..tension 3
+ ..(23,-41)..tension 0.8
+ ..(40,-30)..tension 2
+ ..(85,-33)..tension 2
+ ..(112,-38)..tension 4
+ ..(139,-9)
+ ..{left}(115,-4)
+ ..(65,-7){left}..tension 2
+ ..(-50,-10)..tension 2
+ ..(-80,-9)..controls(-102,-7)
+ ..(-112,-2)..tension 10
+ ..(-131,-40){dir -5}%..tension 2
+ ..(-100,-35)..tension 2
+ ..(-37,-32)..tension 0.8
+ ..(-24,-43)..tension 2
+ ..(-24,-75)
+ ..{curl 2}cycle;
+ filldraw (-2,16){dir -125}
+ ..(-41,-17)
+ --(37,-17)
+ ..{curl 0}cycle;
+% fin de la croix du bas
+
+% debut du chapeau du haut
+ filldraw (90,70)
+ --(110,95)..tension0.8
+ ..(103,102)..tension 2
+ ..(87,92)..tension 2
+ ..(45,96)..tension0.8
+ ..(38,100)
+ ---(20,126)..controls(3,120.5)
+ ..(-10,118)
+ --(-18,102)..tension 2
+ ..(-35,99.5){left}..tension 2
+ ..(-74,103){curl 2}..tension 3
+ ..(-92,79)..tension 0.8
+ ..(-90,75)..tension 3
+ ..(-60,78)..tension 2
+ ..(-33,79)..tension 2
+ ..(25,78)
+ ..cycle; % fin du chapeau
+
+% petit morceau de droite
+ filldraw (93,10)
+ ---(111,12)
+ ---(113,30)
+ ---(80,48)
+ ---(50,65)
+ ---(42,63)
+ ---(42,61)..tension 10
+ ..(31,48)..tension 10
+ ..(5,24)
+ ---(17,18)
+ ..(28,19)
+ ---(52,42)..tension 3
+ ..(75,26)..tension 3
+ ..cycle;
+
+% petit morceau de gauche
+ filldraw (-5,33)
+ ---(-34,54)
+ ---(-46,66)..tension 2.5
+ ..flex((-68,64),(-57,50),(-28,26),(-20,19))
+ ..tension 3..cycle;
+ filldraw (-40,40)
+ ---(-55,53)---(-90,30)..tension 3
+ ..(-106,20)..tension 0.8
+ ..(-110,10)..controls(-97,5)
+ ..(-88,7)..controls(-64,24)
+ ..cycle;
+endchar;
+
+%----------------------------------------------------------
+designsize:=FontSize;
+font_coding_scheme:="Special graphics";
+font_size=FontSize;
+font_slant:=0.00;
+font_normal_space:=max_diametre#;
+font_quad:=max_diametre#;
+font_normal_stretch:=max_rayon#;
+font_normal_shrink:=0.7*max_rayon#;
+font_x_height max_rayon#; % l'usager pourra utiliser cette valeur
+ % pour positionner les caracteres.
+ % elle donne la position du centre par rapport au
+ % coin inferieur gauche.
+bye.