% Florian Sihler, 2022
% Licensed under GNU General Public License version 3
% https://opensource.org/licenses/gpl-3.0.html
\def\tikzpingus@filename{tikzpingus}
\ProvidesPackage{\tikzpingus@filename}[2024/11/27 version v1.2 Penguins in TikZ]
\newif\ifpengu@setup@glows@
\DeclareOption{glows}{\pengu@setup@glows@true}\DeclareOption{noglows}{\pengu@setup@glows@false}
\newif\ifpengu@setup@manual@layers@
\DeclareOption{manual-layers}{\pengu@setup@manual@layers@true}\DeclareOption{nomanual-layers}{\pengu@setup@manual@layers@false}
% \newif\ifpengu@setup@bare@
% \DeclareOption{bare}{\pengu@setup@bare@true}\DeclareOption{nobare}{\pengu@setup@bare@false}
\ProcessOptions*

\RequirePackage{etoolbox}
\RequirePackage{tikz}
\usetikzlibrary{intersections,shadings,patterns.meta,decorations.pathmorphing,shapes.symbols,shapes.geometric}

\pgfdeclarelayer{background}\pgfdeclarelayer{foreground}\pgfdeclarelayer{middle}
\pgfdeclarelayer{very-background}
\ifpengu@setup@manual@layers@\else
\pgfsetlayers{very-background,background,main,middle,foreground}
\fi
% #region whole setup

% <color definitions>
\def\@pingu@color@ #1#2(#3,#4,#5){\definecolor{pingu@#1}{#2}{#3,#4,#5}}
\@pingu@color@{main}RGB(3,14,29)
\@pingu@color@{black}RGB(23,19,19)
\@pingu@color@{silver}RGB(192,192,192)
\@pingu@color@{bronze}RGB(205,127,50)
\@pingu@color@{white}RGB(248,248,248)
\@pingu@color@{yellow}RGB(252,187,21)
\@pingu@color@{lightblue}RGB(174,229,243)
\@pingu@color@{blue}RGB(48,161,247)
\@pingu@color@{green}RGB(129,204,41)
\@pingu@color@{red}RGB(217, 40, 28)
\@pingu@color@{purple}RGB(244,48,93)
\def\@pingu@none{!hide}
% <@color definitions>

% #region lengths and dimens
\newdimen\pingu@one@eight     \pingu@one@eight=.125cm % constants to save tokens
\newdimen\pingu@one           \pingu@one=1mm

\newdimen\pingu@w@half        \pingu@w@half=.9375cm
\newdimen\pingu@head@h@half   \pingu@head@h@half=.9\pingu@w@half
\newdimen\pingu@side@h@half   \pingu@side@h@half=1.275cm
\newdimen\pingu@bend          \pingu@bend=\pingu@one@eight
\newdimen\pingu@lower@off     \pingu@lower@off=.25cm
\newdimen\pingu@outer@off     \pingu@outer@off=.25cm
\def\basicfeetbend{45}
\newdimen\pingu@foot@outer@w  \pingu@foot@outer@w=4.5mm
\newdimen\pingu@foot@outer@h  \pingu@foot@outer@h=.25cm

\newdimen\pingu@headcon@x     \pingu@headcon@x=.39375cm% .75*.525cm
\newdimen\pingu@headcon@y     \pingu@headcon@y=.46735cm%.719*.65cm

\newdimen\pingu@foot@inner@w  \pingu@foot@inner@w=.55cm
\newdimen\pingu@foot@inner@h  \pingu@foot@inner@h=.115cm
\newdimen\pingu@foot@single@w \pingu@foot@single@w=.105cm
\newdimen\pingu@foot@single@h \pingu@foot@single@h=2mm
\def\eyebaseang{38.5}
\newdimen\pingu@eye@shift     \pingu@eye@shift=.8mm
\def\pinguanglehl{.93}
\def\pinguanglehr{.07}
% #endregion

% #region selections
\def\pingu@csappto#1#2{\expandafter\ifx\csname #1\endcsname\@empty\@namedef{#1}{#2}\else\expandafter\g@addto@macro\csname #1\endcsname{, #2}\fi}

\def\pingu@create@sel@err#1#2{%
    \PackageError{\tikzpingus@filename}{There is no '#2' drawer for '#1'. Choose one of '\@nameuse{@pingu@#1@}'}{Or ask the package maintainer :D}%
}

\def\pingu@@select#1#2{\expandafter\let\csname @pingu@drawer@#2@\expandafter\endcsname\csname @pingu@drawer@#2@#1@\endcsname
\expandafter\def\csname @pingu@select@#2@\expandafter\endcsname{#1}}

% #1 name | none default
\def\pingu@create@selection#1#2{%
    \expandafter\newcount\csname pc@#1@max\endcsname
    \expandafter\let\csname @pingu@#1@\endcsname\@empty
    \expandafter\long\expandafter\def\csname pingu@#1@add\endcsname##1##2{%
        \ifcsname @pingu@drawer@#1@##1@\endcsname\else% do not re-append!
        \pingu@csappto{@pingu@#1@}{"##1"}
        \expandafter\global\expandafter\advance\csname pc@#1@max\endcsname1\relax\fi
        \expandafter\long\expandafter\def\csname @pingu@drawer@#1@##1@\endcsname{##2}%
    }
    \expandafter\def\csname pingu@#1@select\endcsname##1{%
        \def\@tmp{##1}\ifx\@pingu@random\@tmp% if random is selected, we choose random from pack in @pingu@#1@
        % we could do this with pgfmathdeclarerandomlist, but this requires more,
        % at the moment, i do not care about efficiency, and we do a foreach
        % we do not pick none for random
        \edef\@arr{{\csname @pingu@#1@\endcsname}}%
        % we use 1 as minimum, because 0 is ALWAYS 'none' by definition
        \pgfmathrandominteger{\@ars}{1}{\csname pc@#1@max\endcsname-1}%
        \pgfmathsetmacro\@sel{\@arr[\@ars]}%
        \expandafter\pingu@@select\expandafter{\@sel}{#1}% consolidate the choice in case of multiple
        \else\ifcsname @pingu@drawer@#1@##1@\endcsname
            \pingu@@select{##1}{#1}%
        \else\pingu@create@sel@err{#1}{##1}\fi\fi
    }%
    \csname pingu@#1@add\endcsname{none}{#2}%
}
\def\@pingu@random{!random}

\long\def\pingu@create@extra#1#2#3{\expandafter\newif\csname if@pingu@x@#1@\endcsname\pgfqkeys{/pingu}{#2,extra defaults/.append style={#3}}}
\def\pingu@set@extra#1#2{\csname @pingu@x@#1@#2\endcsname}

% <eyes selectors>
\pingu@create@selection{lefteye}{%
    \path ([yshift=.75mm,xshift=\pingu@eye@shift]\pingu@name-eye-back-left)
        coordinate (\pingu@name-eye-left);%
}
\pingu@create@selection{righteye}{%
    \path ([yshift=.75mm,xshift=-\pingu@eye@shift]\pingu@name-eye-back-right)
        coordinate (\pingu@name-eye-right);%
}
% <@eyes selectors>

\pingu@create@selection{leftwing}{%
    \path ([yshift=-6.5mm]\pingu@name-wings-side-left)
        coordinate (\pingu@name-wing-left-start)
        coordinate (\pingu@name-wing-left-tip)
        coordinate (\pingu@name-wing-left);%
}
\pingu@create@selection{rightwing}{%
    \path ([yshift=-6.5mm]\pingu@name-wings-side-right)
        coordinate (\pingu@name-wing-right-start)
        coordinate (\pingu@name-wing-right-tip)
        coordinate (\pingu@name-wing-right);%
}
\pingu@create@selection{hairstyle}{}
% <bill selector>
\pingu@create@selection{bill}{%
    \coordinate (\pingu@name-bill-bottom) at (\pingu@name-bill);%
}
% <@bill selector>
% <feet selectors>
\pingu@create@selection{leftfoot}{}
\pingu@create@selection{rightfoot}{}
% <@feet selectors>
% <bodytype selector>
\pingu@create@selection{bodytype}{\pingu@x@bodytype@none}
% <@bodytype selector>
% #endregion

% #region key setup
% <pingu@color>
\def\pingu@color#1#2{%
    \expandafter\def\csname pingu@color@#1\endcsname{#2}%
}
% <@pingu@color>

% HACK: store scale
\pgfqkeys{/tikz}{scale/.append code={\def\pingu@default@scale{#1}}}
\def\pingu@default@scale{1}

\newif\if@pingu@draw@metadots
\newif\if@pingu@wi@flip@left
\newif\if@pingu@wi@flip@right
% <feet conditional>
\newif\if@pingu@feet@front
% <@feet conditional>

\pgfqkeys{/pingu}{
  /pingu/.search also={/tikz,/pgf},
  name/.code                    = \def\pingu@name{#1},
  scale/.code                   = \def\pingu@scale{#1},
  @post/.code                   = \def\pingu@post{#1},
  @body@app/.code               = \def\pingu@body@app{#1},
  meta dots/.forward to         = /pingu/meta-dots,
  meta-dots/.is if              = @pingu@draw@metadots,
  meta-dots/.default            = true,
  @pingu@all/.style             = {},
  @block/.style                 = {/pingu/@pingu@all=#1, fill=#1},
  @draw/.style                  = {/pingu/@pingu@all=#1, cap=round, draw=#1},
  @text/.style                  = {transform shape,text=\pingu@color@body@main},
  @body/.style                  = {},
  @extras/.style                = {},
  @extras@above/.style          = {},
  @extras@below/.style          = {},
  @eyes/.style                  = {},
  @belly/.style                 = {},
  @wings/.style                 = {},
  @wingitems/.style             = {},
  @feet/.style                  = {},
  @bill/.style                  = {},
  @hair/.style                  = {},
  @clip even odd rule/.code     = {\pgfseteorule}, % Credit to Andrew Stacey
  @invclip/.style               = {clip,insert path=[/pingu/@clip even odd rule]{[reset cm](-\maxdimen,-\maxdimen)rectangle(\maxdimen,\maxdimen)}},
  @pingu/.style = {}, @pingu@main/.style = {},
% <feet keys>
  left foot color/.code         = \pingu@color{foot@left}{#1},
  left foot/.code               = \pingu@leftfoot@select{#1},
  right foot color/.code        = \pingu@color{foot@right}{#1},
  right foot/.code              = \pingu@rightfoot@select{#1},
  feet/.style                   = {
        /pingu/left foot={#1},
        /pingu/right foot={#1}
  },
  feet color/.style             = {
        /pingu/left foot color={#1},
        /pingu/right foot color={#1}
  },
  feet front/.is if             = @pingu@feet@front,
% <@feet keys>
% <bodytype keys>
  body type/.code               = \pingu@bodytype@select{#1},
  body main/.code               = \pingu@color{body@main}{#1},
  body head/.code               = \pingu@color{body@head}{#1},
  body/.style                   = {/pingu/body main={#1}, /pingu/body head={#1}},
  body front/.code              = \pingu@color{body@front}{#1},
% <@bodytype keys>
  % belly
  belly/.forward to             = /pingu/belly text,
  belly text/.style             = {/pingu/belly raw={\node[/pingu/@text,opacity=.2] {#1};}},
  belly raw/.code               = \def\pingu@belly@raw{#1},
% <eyes keys>
  left eye/.code                = \pingu@lefteye@select{#1},
  left eye color/.code          = \pingu@color{eye@left}{#1},
  left eye second color/.code   = \pingu@color{eye@second@left}{#1},
  right eye/.code               = \pingu@righteye@select{#1},
  right eye color/.code         = \pingu@color{eye@right}{#1},
  right eye second color/.code  = \pingu@color{eye@second@right}{#1},
  eyes/.style                   = {
        /pingu/left eye  = {#1},
        /pingu/right eye = {#1}
  },
  eyes color/.style             = {
        /pingu/left eye color  = {#1},
        /pingu/right eye color = {#1}
  },
  eyes second color/.style      = {
        /pingu/left eye second color  = {#1},
        /pingu/right eye second color = {#1}
  },
% <@eyes keys>
  % wings
  left wing color/.code         = \pingu@color{left@wing}{#1},
  left wing/.code               = \pingu@leftwing@select{#1},
  right wing color/.code        = \pingu@color{right@wing}{#1},
  right wing/.code              = \pingu@rightwing@select{#1},
  wings/.style                  = {/pingu/left wing={#1}, /pingu/right wing={#1}},
  wings color/.style            = {/pingu/left wing color={#1},
                                   /pingu/right wing color={#1}},
  left item angle/.forward to   = /pingu/left wing item angle,
  left wing item angle/.code    = {\def\pingu@wing@left@item@angle@user{#1}},%
  left item flip/.forward to    = /pingu/left wing item flip,
  left wing item flip/.is if    = @pingu@wi@flip@left,
  right item angle/.forward to  = /pingu/right wing item angle,
  right item flip/.forward to   = /pingu/right wing item flip,
  right wing item angle/.code   = {\def\pingu@wing@right@item@angle@user{#1}},%
  right wing item flip/.is if   = @pingu@wi@flip@right,
% <bill keys>
  bill/.code                    = \pingu@bill@select{#1},
  bill color/.code              = \pingu@color{bill}{#1},
% <@bill keys>
  % hair color TODO: other colors
  hair/.forward to              = /pingu/hairs color,
  hairs/.forward to             = /pingu/hairs color,
  hair 1 color/.code            = \pingu@color{hair@a}{#1}, hair 1/.forward to = /pingu/hair 1 color,
  hair 2 color/.code            = \pingu@color{hair@b}{#1}, hair 2/.forward to = /pingu/hair 2 color,
  hair 3 color/.code            = \pingu@color{hair@c}{#1}, hair 3/.forward to = /pingu/hair 3 color,
  hair 4 color/.code            = \pingu@color{hair@d}{#1}, hair 4/.forward to = /pingu/hair 4 color,
  hair 5 color/.code            = \pingu@color{hair@e}{#1}, hair 5/.forward to = /pingu/hair 5 color,
  hairs color/.style            = {/pingu/hair 1 color={#1},  /pingu/hair 2 color={#1}, /pingu/hair 3 color={#1},
                                   /pingu/hair 4 color={#1}, /pingu/hair 5 color={#1}},
  hair style/.forward to        = /pingu/hairstyle,
  hairstyle/.code               = \pingu@hairstyle@select{#1},
  % size
  height/.code                  = \setlength{\pingu@side@h@half}{#1},%
  small height/.forward to      = /pingu/small size, small/.forward to = /pingu/small size,
  small size/.style             = {/pingu/height=11mm},
  normal height/.forward to     = /pingu/normal size, normal/.forward to = /pingu/normal size,
  normal size/.style            = {/pingu/height=1.275cm},
  large height/.forward to      = /pingu/large size, large/.forward to = /pingu/large size,
  large size/.style             = {/pingu/height=15mm},
  random from/.code                  = {\pgfmathdeclarerandomlist{@tmp}{#1}\pgfmathrandomitem{\@tmp}{@tmp}\edef\tmp{\noexpand\@pingu@set{\@tmp}}\tmp},
  defaults/.style               = {%
    name=pingu, feet=normal, feet color=pingu@yellow, body=pingu@main,
    body type=normal,@post={},@body@app={},
    body front=pingu@white,%
    eyes=normal, eyes color=pingu@black, eyes second color=pingu@white,
    bill=normal, bill color=pingu@yellow,
    wings=normal, wings color=\pingu@color@body@main,
    hairstyle=normal, hairs color=\pingu@color@body@main,
    belly raw={}, scale=\pingu@default@scale,
    left wing item angle=0,right wing item angle=0,extra defaults,user defaults,%
    feet front=false%
  },
  user defaults/.style = {},
  % will be set individually
  extra defaults/.style = {}
}
\def\@pingu@set#1{\pgfqkeys{/pingu}{#1}}
\def\pingudefaults#1{\pgfqkeys{/pingu}{user defaults/.style={#1}}}
\def\pingudefaultsappend#1{\pgfqkeys{/pingu}{user defaults/.append style={#1}}}
% #endregion

% #region subenvs
\def\pingu@layer#1[#2]{\pgfonlayer{#1}\scope[/pingu/@pingu,#2]}
\def\endpingu@layer{\endscope\endpgfonlayer}
% #endregion

% colorname | mix with
\def\@pingu@color@mixwith#1#2{\protected@edef\@tmp{#1}\ifx\@tmp\@pingu@none\else\expandafter\def\expandafter#1\expandafter{#1!#2}\fi}

% #region complete sets and styles
\newif\if@pingu@do@back@
\pgfqkeys{/pingu}{
  :line/.style            = {/pingu/@block/.append style={fill=none,draw=##1!80!black,shade=none,path fading=none}},
  :fill/.style            = {/pingu/body=#1,/pingu/body front=#1,/pingu/feet color=#1, /pingu/bill color=#1, /pingu/eyes color=#1, /pingu/eyes second color=#1},
  :fill/.default          = pingu@main,
  :pingu/.style           = {/pingu/@body/.style={#1},/pingu/@wings/.style={#1},/pingu/@eyes/.style={#1},/pingu/@bill/.style={#1},/pingu/@hair/.style={#1},/pingu/@feet/.style={#1}},
  :mix-draw/.style        = {:pingu={/pingu/@block/.append style={/pingu/@pingu@all={####1!#1}, fill={####1!#1}}}},
  :mix-draw/.default      = 50!white,
  :mix-all/.style        = {/pingu/@block/.append style={/pingu/@pingu@all={##1!#1}, fill={##1!#1}},/pingu/@draw/.append style={/pingu/@pingu@all={##1!#1}, draw={##1!#1}}},
  :mix-all/.default      = 50!white,
  :mix/.style             = {
    /pingu/@body/.code={\@pingu@color@mixwith\pingu@color@body@main{#1}\@pingu@color@mixwith\pingu@color@body@head{#1}},
    /pingu/@wings/.code={\@pingu@color@mixwith\pingu@color@left@wing{#1}\@pingu@color@mixwith\pingu@color@right@wing{#1}},
    /pingu/@eyes/.code={\@pingu@color@mixwith\pingu@color@eye@left{#1}\@pingu@color@mixwith\pingu@color@eye@right{#1}\@pingu@color@mixwith\pingu@color@eye@second@left{#1}\@pingu@color@mixwith\pingu@color@eye@second@right{#1}},
    /pingu/@bill/.code={\@pingu@color@mixwith\pingu@color@bill{#1}},
    /pingu/@hair/.code={\@pingu@color@mixwith\pingu@color@hair@a{#1}\@pingu@color@mixwith\pingu@color@hair@b{#1}\@pingu@color@mixwith\pingu@color@hair@c{#1}\@pingu@color@mixwith\pingu@color@hair@d{#1}\@pingu@color@mixwith\pingu@color@hair@e{#1}},
    /pingu/@feet/.code={\@pingu@color@mixwith\pingu@color@foot@left{#1}\@pingu@color@mixwith\pingu@color@foot@right{#1}}
   },
  :mix/.default           = 50!white,
  :ghost parts/.style     = {/pingu/@pingu@all/.append style={opacity={#1}}},
  :ghost parts/.default   = {.5},
  :ghost/.style           = {/pingu/@pingu/.append style={opacity=#1,transparency group}},
  :ghost/.default         = {.5},
  :ghost glow/.style      = {/pingu/@pingu/.append style={opacity=#1,transparency group},/pingu/@block/.append style={/pingu/@glow}},
  :ghost glow/.default    = {.5},
  :devil/.style           = {/pingu/devil horns=#1,/pingu/eyes devil=#1},
  :devil/.default         = pingu@purple,
  :hide/.style            = {/pingu/body type=none,/pingu/hair=\@pingu@none,/pingu/feet=none,/pingu/wings=none,/pingu/bill=none,/pingu/eyes=none},
  :back/.code            = {\pgfqkeys{/pingu}{eyes=none,bill=none,body front=\pingu@color@body@main,@pingu@main/.append style={xshift=2\pingu@w@half,xscale=-1},feet back}\gdef\pingu@back@init@call{\pgfsetlayers{foreground,middle,main,background}\gdef\pingu@back@init@call{}}\@pingu@do@back@true}% TODO: back foot clipping?
}% TODO: draw another penguin that is then drawn above with only back
\let\pingu@back@init@call\@empty
% #endregion

% #region glows
\ifpengu@setup@glows@
\usetikzlibrary{fadings}%
\tikzfading[name=pingu@halo fade out,inner color=transparent!39,outer color=transparent!100]
\pgfqkeys{/pingu}{@glow/.style={path fading={pingu@halo fade out},#1}}
\else
\pgfqkeys{/pingu}{@glow/.style={}}
\fi
% #endregion
% #endregion

% #region core
%   #region path commands
\long\def\pingu@path{\@dblarg\pingu@path@}
\def\pingu@path@[#1]#2#3;{\protected@edef\@tmp{#2}\ifx\@tmp\@pingu@none\else\path[#1,#2] #3;\fi}
\long\def\pingu@block{\@dblarg\pingu@block@}
\def\pingu@block@[#1]#2#3;{\protected@edef\@tmp{#2}\ifx\@tmp\@pingu@none\else\path[#1,/pingu/@block=#2] #3;\fi}
\long\def\pingu@draw{\@dblarg\pingu@draw@}
\def\pingu@draw@[#1]#2#3;{\protected@edef\@tmp{#2}\ifx\@tmp\@pingu@none\else\path[#1,/pingu/@draw=#2] #3;\fi}
% #endregion

\newcommand*\pingu[1][]{%
\ifpengu@setup@manual@layers@\pgfsetlayers{background,main,middle,foreground}\fi\begingroup
\@pingu@do@back@false
\pgfqkeys{/pingu}{defaults, #1}%
\let\pingu@path@lowerpingu\pingu@default@path@lowerpingu\relax
\let\pingu@path@upperpingu\pingu@default@path@upperpingu\relax
\ifdim\pingu@side@h@half<10.33mm \PackageWarning{\tikzpingus@filename}{Penguins with a height below 10.33mm may have unwanted artifacts.}\fi
\scope[/pingu/@pingu,/pingu/@pingu@main]
\scope[/pingu/@body]
\@pingu@drawer@bodytype@
\pingu@body@app
\endscope
\path(\pingu@name-head-center)++(0,-.05mm-\pingu@outer@off) coordinate (\pingu@name-bill);
\scope[shift=(\pingu@name-belly-center),/pingu/@belly]
\clip[use path=\pingu@whitepingu]; \pingu@belly@raw
\endscope
\coordinate(\pingu@name-head) at (\pingu@w@half,.7375cm);
\scope[/pingu/@eyes]
\@pingu@drawer@lefteye@ \@pingu@drawer@righteye@
\endscope
\pingu@layer{background}[]\pingu@draw@clothing@behind\endpingu@layer
\pingu@draw@clothing@middle
\scope[/pingu/@extras,/pingu/@extras@below]
\pingu@draw@extras@below
\endscope

\scope[/pingu/@hair]
\@pingu@drawer@hairstyle@
\endscope

\if@pingu@feet@front\else\pingu@layer{background}[]\fi
\scope[/pingu/@feet]
\@pingu@drawer@leftfoot@ \@pingu@drawer@rightfoot@
\endscope
\if@pingu@feet@front\else\endpingu@layer\fi

\scope[/pingu/@wings]
\@pingu@drawer@leftwing@ \@pingu@drawer@rightwing@
\endscope

\path (\pingu@name-wing-left-start) -- (\pingu@name-wing-left) --
    ([turn]\csname @pingu@wingdown@\@pingu@select@leftwing@ @\endcsname:2.45mm)
    coordinate (\pingu@name-wing-left-low) -- ([turn]180:4.9mm)
    coordinate (\pingu@name-wing-left-up);
\path (\pingu@name-wing-left-start) -- (\pingu@name-wing-left) --
    (\pingu@name-wing-left-start) --
    ([turn]-180+\csname @pingu@wingdown@\@pingu@select@leftwing@ @\endcsname:3.45mm)
  coordinate (\pingu@name-wing-left-start-low) -- ([turn]180:6.9mm)
  coordinate (\pingu@name-wing-left-start-up);
\path (\pingu@name-wing-right-start) -- (\pingu@name-wing-right) --
    ([turn]-\csname @pingu@wingdown@\@pingu@select@rightwing@ @\endcsname:2.45mm)
    coordinate (\pingu@name-wing-right-low) -- ([turn]180:4.9mm)
    coordinate (\pingu@name-wing-right-up);
% double path to fix turn
\path (\pingu@name-wing-right-start) -- (\pingu@name-wing-right) --
      (\pingu@name-wing-right-start) --
      ([turn]180-\csname @pingu@wingdown@\@pingu@select@rightwing@ @\endcsname:3.45mm)
    coordinate (\pingu@name-wing-right-start-low) -- ([turn]180:6.9mm)
    coordinate (\pingu@name-wing-right-start-up);
\pingu@draw@clothing@main

\scope[/pingu/@bill]
\@pingu@drawer@bill@
\endscope

\scope[/pingu/@extras,/pingu/@extras@above]
\pingu@draw@extras@above
\endscope
\scope[/pingu/@wingitems]
\pingu@draw@wing@items
\endscope
\endscope
\if@pingu@draw@metadots \@pingu@draw@dots \fi
\pingu@post
\endgroup
\pingu@back@init@call
}
\let\pengu\pingu% as an alias

%   #region lower-pingu
% Note: to be used in clippies
\def\pingu@default@path@lowerpingu{(0,\pingu@outer@off)
% left side
to[bend right=\pingu@bend] ++(0,-\pingu@side@h@half-\pingu@outer@off)
% feety stuff
arc (180:270:\pingu@foot@outer@w{} and \pingu@foot@outer@h) arc (270:332:\pingu@foot@inner@w{} and \pingu@foot@inner@h)
arc (208:270:\pingu@foot@inner@w{} and \pingu@foot@inner@h) arc (270:360:\pingu@foot@outer@w{} and \pingu@foot@outer@h)%
% right side
to[bend right=\pingu@bend] ++(0,\pingu@side@h@half+\pingu@outer@off)
arc(0:180:\pingu@w@half{} and \pingu@head@h@half) -- cycle}% arc clip to secure wings
\def\pingu@default@path@upperpingu{(\pingu@name-head-center) ellipse [x radius=\pingu@w@half, y radius=\pingu@head@h@half]}
\let\pingu@path@lowerpingu\pingu@default@path@lowerpingu
\let\pingu@path@upperpingu\pingu@default@path@upperpingu
%   #endregion
% #endregion

% #region main body parts
% #region body front
% #region normal
\pingu@bodytype@add{normal}{%
\pingu@block[save path=\pingu@lowerpingu]{\pingu@color@body@main} (0,\pingu@outer@off)
% left side
to[bend right=\pingu@bend] coordinate[pos=.775] (\pingu@name-waist-right) ++(0,-\pingu@side@h@half-\pingu@outer@off)
% feety stuff
arc (180:270:\pingu@foot@outer@w{} and \pingu@foot@outer@h) coordinate (\pingu@name-foot-right)
arc (270:332:\pingu@foot@inner@w{} and \pingu@foot@inner@h)
coordinate (\pingu@name-bottom-center)
arc (208:270:\pingu@foot@inner@w{} and \pingu@foot@inner@h) coordinate (\pingu@name-foot-left)
arc (270:360:\pingu@foot@outer@w{} and \pingu@foot@outer@h)%
% right side
to[bend right=\pingu@bend] coordinate[pos=.225] (\pingu@name-waist-left) ++(0,\pingu@side@h@half+\pingu@outer@off)
% coordinate
coordinate (\pingu@name-wings-side-left)
-- (0,\pingu@outer@off) coordinate (\pingu@name-wings-side-right) coordinate[pos=.5] (\pingu@name-head-center) -- cycle;

\pingu@block[save path=\pingu@upperpingu]{\pingu@color@body@head} (\pingu@name-head-center)
++(0,\pingu@head@h@half) coordinate (\pingu@name-head-top)
arc(90:450:\pingu@w@half{} and \pingu@head@h@half)
coordinate[pos=\pinguanglehr] (\pingu@name-head-right)
coordinate[pos=\pinguanglehl] (\pingu@name-head-left);

\coordinate (\pingu@name-belly-back) at (\pingu@w@half,-1cm);
\coordinate (\pingu@name-belly-center) at (\pingu@w@half,-.68\pingu@side@h@half);
\pingu@block[save path=\pingu@whitepingu]{\pingu@color@body@front} (\pingu@name-belly-back)++(-\pingu@w@half+\pingu@one,\pingu@lower@off) to[bend right=.8\pingu@bend] ++(0,1.05cm-\pingu@side@h@half-\pingu@lower@off) arc (180:270:4mm and 2mm) arc (270:331:5mm and .85mm) arc (207:270:5mm and .85mm) arc (270:360:4mm and 2mm) to[bend right=.8\pingu@bend] ++(0,\pingu@side@h@half-1.05cm+\pingu@lower@off) arc (0:180:\pingu@w@half-.96mm and \pingu@w@half-\pingu@one) -- cycle;

\coordinate (\pingu@name-eye-back-right) at ([xshift=-.275cm,yshift=.25cm-\pingu@outer@off]\pingu@name-head-center);
\coordinate (\pingu@name-eye-back-left) at ([xshift=.275cm,yshift=.25cm-\pingu@outer@off]\pingu@name-head-center);

\coordinate (\pingu@name-head-back-con-right) at ([xshift=-\pingu@headcon@x,yshift=-\pingu@headcon@y]\pingu@name-eye-back-right);
\coordinate (\pingu@name-head-back-con-left) at ([xshift=\pingu@headcon@x,yshift=-\pingu@headcon@y]\pingu@name-eye-back-left);

\pingu@block{\pingu@color@body@front} (\pingu@name-eye-back-right)++(0,-.25mm) ellipse [x radius=.525cm,y radius=.625cm];
\pingu@block{\pingu@color@body@front} (\pingu@name-eye-back-left)++(0,-.25mm) ellipse [x radius=.525cm,y radius=.625cm];
}
% #endregion
% #region none
% <pingu@x@bodytype@none>
\def\pingu@x@bodytype@none{%
    % set the lower half
    \path[save path=\pingu@lowerpingu] (0,\pingu@outer@off)
        % left side
        to[bend right=\pingu@bend]
            coordinate[pos=.775] (\pingu@name-waist-right)
        ++(0,-\pingu@side@h@half-\pingu@outer@off)
        % feety stuff
        arc (180:270:\pingu@foot@outer@w{} and \pingu@foot@outer@h)
            coordinate (\pingu@name-foot-right)
        arc (270:332:\pingu@foot@inner@w{} and \pingu@foot@inner@h)
            coordinate (\pingu@name-bottom-center)
        arc (208:270:\pingu@foot@inner@w{} and \pingu@foot@inner@h)
            coordinate (\pingu@name-foot-left)
        arc (270:360:\pingu@foot@outer@w{} and \pingu@foot@outer@h)
        % right side
        to[bend right=\pingu@bend]
            coordinate[pos=.225] (\pingu@name-waist-left)
        ++(0,\pingu@side@h@half+\pingu@outer@off)
        % switch to left
            coordinate (\pingu@name-wings-side-left)
        -- (0,\pingu@outer@off)
            coordinate[pos=.5] (\pingu@name-head-center)
            coordinate (\pingu@name-wings-side-right)
        -- cycle;
    % set the upper half
    \path[save path=\pingu@upperpingu] (\pingu@name-head-center)
        ++(0,\pingu@head@h@half)
            coordinate (\pingu@name-head-top)
        arc(90:450:\pingu@w@half{} and \pingu@head@h@half)
            coordinate[pos=\pinguanglehr] (\pingu@name-head-right)
            coordinate[pos=\pinguanglehl] (\pingu@name-head-left);

    \coordinate (\pingu@name-belly-back) at (\pingu@w@half,-1cm);
    \coordinate (\pingu@name-belly-center) at (\pingu@w@half,-.68\pingu@side@h@half);

    % set the white above
    \path[save path=\pingu@whitepingu] (\pingu@name-belly-back)
        ++(-\pingu@w@half+\pingu@one,\pingu@lower@off)
        to[bend right=.8\pingu@bend]
        ++(0,1.05cm-\pingu@side@h@half-\pingu@lower@off)
        arc (180:270:4mm and 2mm)
        arc (270:331:5mm and .85mm)
        arc (207:270:5mm and .85mm)
        arc (270:360:4mm and 2mm)
        to[bend right=.8\pingu@bend]
        ++(0,\pingu@side@h@half-1.05cm+\pingu@lower@off)
        arc (0:180:\pingu@w@half-.96mm and \pingu@w@half-\pingu@one)
    -- cycle;

    \coordinate (\pingu@name-eye-back-right)
        at ([xshift=-.275cm,yshift=.25cm-\pingu@outer@off]\pingu@name-head-center);
    \coordinate (\pingu@name-eye-back-left)
        at ([xshift=.275cm,yshift=.25cm-\pingu@outer@off]\pingu@name-head-center);

    \coordinate (\pingu@name-head-back-con-right)
        at ([xshift=-\pingu@headcon@x,yshift=-\pingu@headcon@y]\pingu@name-eye-back-right);
    \coordinate (\pingu@name-head-back-con-left)
        at ([xshift=\pingu@headcon@x,yshift=-\pingu@headcon@y]\pingu@name-eye-back-left);
}
% <@pingu@x@bodytype@none>

% #endregion
% #region chubby
\pingu@bodytype@add{chubby}{%
\pingu@block[save path=\pingu@lowerpingu]{\pingu@color@body@main} (0,\pingu@outer@off)
% left side
to[bend right=1.65*\pingu@bend] coordinate[pos=.775] (\pingu@name-waist-right) ++(0,-\pingu@side@h@half-\pingu@outer@off)
% feety stuff
arc (180:270:\pingu@foot@outer@w{} and \pingu@foot@outer@h-.35mm) coordinate (\pingu@name-foot-right)
arc (270:332:\pingu@foot@inner@w{} and 1.25*\pingu@foot@inner@h)
coordinate (\pingu@name-bottom-center)
arc (208:270:\pingu@foot@inner@w{} and 1.25*\pingu@foot@inner@h) coordinate (\pingu@name-foot-left)
arc (270:360:\pingu@foot@outer@w{} and \pingu@foot@outer@h-.35mm)%
% right side
to[bend right=1.65*\pingu@bend] coordinate[pos=.225] (\pingu@name-waist-left) ++(0,\pingu@side@h@half+\pingu@outer@off)
% coordinate
coordinate (\pingu@name-wings-side-left)
-- (0,\pingu@outer@off) coordinate (\pingu@name-wings-side-right) coordinate[pos=.5] (\pingu@name-head-center) -- cycle;

\pingu@block[save path=\pingu@upperpingu]{\pingu@color@body@head} (\pingu@name-head-center)
++(0,\pingu@head@h@half) coordinate (\pingu@name-head-top)
arc(90:450:\pingu@w@half{} and \pingu@head@h@half)
coordinate[pos=\pinguanglehr] (\pingu@name-head-right)
coordinate[pos=\pinguanglehl] (\pingu@name-head-left);

\coordinate (\pingu@name-belly-back) at (\pingu@w@half,-.97cm);
\coordinate (\pingu@name-belly-center) at (\pingu@w@half,-.65\pingu@side@h@half);
\pingu@block[save path=\pingu@whitepingu]{\pingu@color@body@front} (\pingu@name-head-center)++(-\pingu@w@half+2.5\pingu@one,-4.25mm) coordinate (@) to[bend right=19] ([xshift=-1.25mm,yshift=1.5\pingu@one]@|-\pingu@name-bottom-center) arc (180:270:4.675mm and 1mm) arc (270:331:4mm and 1.15mm) arc (207:270:4mm and 1.15mm) arc (270:360:4.675mm and 1mm) to[bend right=19] ([xshift=\pingu@w@half-2.5\pingu@one,yshift=-4.25mm]\pingu@name-head-center) ;

\coordinate (\pingu@name-eye-back-right) at ([xshift=-.275cm,yshift=.25cm-\pingu@outer@off]\pingu@name-head-center);
\coordinate (\pingu@name-eye-back-left) at ([xshift=.275cm,yshift=.25cm-\pingu@outer@off]\pingu@name-head-center);

\coordinate (\pingu@name-head-back-con-right) at ([xshift=-\pingu@headcon@x,yshift=-\pingu@headcon@y]\pingu@name-eye-back-right);
\coordinate (\pingu@name-head-back-con-left) at ([xshift=\pingu@headcon@x,yshift=-\pingu@headcon@y]\pingu@name-eye-back-left);

\pingu@block{\pingu@color@body@front} (\pingu@name-eye-back-right)++(0,-.5mm) ellipse [x radius=.525cm,y radius=.6cm];
\pingu@block{\pingu@color@body@front} (\pingu@name-eye-back-left)++(0,-.5mm) ellipse [x radius=.525cm,y radius=.6cm];
}
% #endregion
% #region legacy
\pingu@bodytype@add{legacy}{%
\gdef\pingu@path@lowerpingu{%
(0,\pingu@outer@off)
% left side
to[bend right=1.25*\pingu@bend] ++(0,-.95\pingu@side@h@half-\pingu@outer@off+.65\pingu@one)%
% feety stuff
to[out=270,in=270]
++(2*\pingu@w@half,0)
% right side
to[bend right=1.25*\pingu@bend] ++(0,.95\pingu@side@h@half+\pingu@outer@off-.65\pingu@one)
arc(0:180:\pingu@w@half{} and \pingu@head@h@half) -- cycle
}
\gdef\pingu@path@upperpingu{(\pingu@name-head-center)
++(0,\pingu@head@h@half)
arc(90:450:\pingu@w@half{} and \pingu@head@h@half);
}
\pingu@block[save path=\pingu@lowerpingu]{\pingu@color@body@main} (0,\pingu@outer@off)
% left side
to[bend right=1.25*\pingu@bend] coordinate[pos=.77] (\pingu@name-waist-right) ++(0,-.95\pingu@side@h@half-\pingu@outer@off+.65\pingu@one) coordinate (@b) % for bottom clip
% feety stuff
to[out=270,in=270]
    coordinate[pos=.3,yshift=-.25mm] (\pingu@name-foot-right)
    coordinate[pos=.5,yshift=.875\pingu@one] (\pingu@name-bottom-center)
    coordinate[pos=.7,yshift=-.25mm] (\pingu@name-foot-left)
++(2*\pingu@w@half,0)
% right side
to[bend right=1.25*\pingu@bend] coordinate[pos=.225] (\pingu@name-waist-left) ++(0,.95\pingu@side@h@half+\pingu@outer@off-.65\pingu@one)
% coordinate
coordinate (\pingu@name-wings-side-left)
-- (0,\pingu@outer@off) coordinate (\pingu@name-wings-side-right) coordinate[pos=.5] (\pingu@name-head-center) -- cycle;

\pingu@block[save path=\pingu@upperpingu]{\pingu@color@body@head} (\pingu@name-head-center)
++(0,\pingu@head@h@half) coordinate (\pingu@name-head-top)
arc(90:450:\pingu@w@half{} and \pingu@head@h@half)
coordinate[pos=\pinguanglehr] (\pingu@name-head-right)
coordinate[pos=\pinguanglehl] (\pingu@name-head-left);

\coordinate (\pingu@name-belly-back) at (\pingu@w@half,-.97cm);
\coordinate (\pingu@name-belly-center) at (\pingu@w@half,-.75\pingu@side@h@half+.325\pingu@one);
\pingu@block[save path=\pingu@whitepingu]{\pingu@color@body@front} (\pingu@name-head-center)++(-\pingu@w@half+2.5\pingu@one,-4.25mm) coordinate (@) to[bend right=14] ([xshift=-1.25mm,yshift=.33\pingu@one]@|-@b) to[out=272,in=268] ++(2*\pingu@w@half-2.5\pingu@one,0) to[bend right=14] ([xshift=\pingu@w@half-2.5\pingu@one,yshift=-4.25mm]\pingu@name-head-center) ;

\coordinate (\pingu@name-eye-back-right) at ([xshift=-.275cm,yshift=.25cm-\pingu@outer@off]\pingu@name-head-center);
\coordinate (\pingu@name-eye-back-left) at ([xshift=.275cm,yshift=.25cm-\pingu@outer@off]\pingu@name-head-center);

\coordinate (\pingu@name-head-back-con-right) at ([xshift=-\pingu@headcon@x,yshift=-\pingu@headcon@y]\pingu@name-eye-back-right);
\coordinate (\pingu@name-head-back-con-left) at ([xshift=\pingu@headcon@x,yshift=-\pingu@headcon@y]\pingu@name-eye-back-left);

\pingu@block{\pingu@color@body@front} (\pingu@name-eye-back-right)++(0,-.5mm) ellipse [x radius=.525cm,y radius=.6cm];
\pingu@block{\pingu@color@body@front} (\pingu@name-eye-back-left)++(0,-.5mm) ellipse [x radius=.525cm,y radius=.6cm];
}
% #endregion
% #endregion
% #region eyes
% name core | left | right
% <pingu@eyes@s>
\long\def\pingu@eyes@s#1#2#3{%
    \@ifnextchar[%
        {\pingu@eyes@s@{#1}{#2}{#3}}%
        {\pingu@eyes@s@{#1}{#2}{#3}[pingu@black]}%
}
\long\def\pingu@eyes@s@#1#2#3[#4]{%
    \pgfqkeys{/pingu}{%
        left eye #1/.style    = {/pingu/left eye={#1}, /pingu/left eye color={##1}},
        left eye #1/.default  = {#4},
        right eye #1/.style   = {/pingu/right eye={#1}, /pingu/right eye color={##1}},
        right eye #1/.default = {#4},
        eyes #1/.style        = {/pingu/eyes={#1}, /pingu/eyes color={##1}},
        eyes #1/.default      = {#4}
    }%
    \pingu@lefteye@add{#1}{#2}\pingu@righteye@add{#1}{#3}%
}
% <@pingu@eyes@s>
\pgfqkeys{/pingu}{%
    eyes none/.style      = {eyes=none},
    left eye none/.style  = {left eye=none},
    right eye none/.style = {right eye=none}
} % adding the alias

% <eyes normal>
\pingu@eyes@s{normal}{%
    \pingu@block{\pingu@color@eye@left}
        ([yshift=.75mm,xshift=\pingu@eye@shift]\pingu@name-eye-back-left)
            coordinate (\pingu@name-eye-left)
        ellipse [x radius=.1225cm, y radius=.1365cm];
}{%
    \pingu@block{\pingu@color@eye@right}
        ([yshift=.75mm,xshift=-\pingu@eye@shift]\pingu@name-eye-back-right)
            coordinate(\pingu@name-eye-right)
        ellipse [x radius=.1225cm, y radius=.1365cm];
}
% <@eyes normal>

\pingu@eyes@s{vertical}{%
    \pingu@block{\pingu@color@eye@left} ([yshift=.75mm,xshift=\pingu@eye@shift]\pingu@name-eye-back-left) coordinate (\pingu@name-eye-left) ellipse [x radius=1.13mm, y radius=.145cm];
}{%
    \pingu@block{\pingu@color@eye@right} ([yshift=.75mm,xshift=-\pingu@eye@shift]\pingu@name-eye-back-right) coordinate(\pingu@name-eye-right) ellipse [x radius=1.13mm, y radius=.145cm];
}

% <eyes shiny>
\pingu@eyes@s{shiny}{%
    \pingu@block{\pingu@color@eye@left}
        ([yshift=.75mm,xshift=\pingu@eye@shift]\pingu@name-eye-back-left)
            coordinate(\pingu@name-eye-left)
        ellipse [x radius=.22cm, y radius=.26cm];
    \pingu@block{\pingu@color@eye@second@left}
            (\pingu@name-eye-left)++(\eyebaseang:.85mm and \pingu@one)
        ellipse [x radius=.8mm, y radius=\pingu@one];
    \pingu@block{\pingu@color@eye@second@left}
            (\pingu@name-eye-left)++(\eyebaseang+180:.12cm and .14cm)
        ellipse [x radius=.25mm, y radius=.35mm];
}{%
    \pingu@block{\pingu@color@eye@right}
        ([yshift=.75mm,xshift=-\pingu@eye@shift]\pingu@name-eye-back-right)
            coordinate(\pingu@name-eye-right)
        ellipse [x radius=.22cm, y radius=.26cm];
    \pingu@block{\pingu@color@eye@second@right}
            (\pingu@name-eye-right)++(\eyebaseang:.85mm and \pingu@one)
        ellipse [x radius=.8mm, y radius=\pingu@one];
    \pingu@block{\pingu@color@eye@second@right}
            (\pingu@name-eye-right)++(\eyebaseang+180:.12cm and .14cm)
        ellipse [x radius=.25mm, y radius=.35mm];
}
% <@eyes shiny>

\pingu@eyes@s{wink}{%
    \coordinate (\pingu@name-eye-left) at ([yshift=.75mm,xshift=\pingu@eye@shift]\pingu@name-eye-back-left);
    \pingu@block[rotate around={-4:(\pingu@name-eye-left)}]{\pingu@color@eye@left} (\pingu@name-eye-left)++(174:.14cm and .14cm)++(0,-.065cm) arc (174:6:.14cm and .14cm) arc (-6:-174:.1mm and .08mm) arc (6:174:.12cm and .065cm) arc (-6:-174:.1mm and .08mm) -- cycle;
}{%
    \coordinate (\pingu@name-eye-right) at ([yshift=.75mm,xshift=-\pingu@eye@shift]\pingu@name-eye-back-right);
    \pingu@block[rotate around={4:(\pingu@name-eye-right)}]{\pingu@color@eye@right} (\pingu@name-eye-right)++(174:.14cm and .14cm)++(0,-.065cm) arc (174:6:.14cm and .14cm) arc (-6:-174:.1mm and .08mm) arc (6:174:.12cm and .065cm) arc (-6:-174:.1mm and .08mm) -- cycle;
}

\pingu@eyes@s{shock}{%
    \pingu@block{\pingu@color@eye@left} ([yshift=.75mm,xshift=\pingu@eye@shift]\pingu@name-eye-back-left) coordinate (\pingu@name-eye-left) ellipse [x radius=.1535cm, y radius=.1575cm];
    \pingu@block{\pingu@color@eye@second@left} ([yshift=.75mm,xshift=\pingu@eye@shift]\pingu@name-eye-back-left) coordinate (\pingu@name-eye-left) ellipse [x radius=.1325cm, y radius=.1375cm];
}{%
    \pingu@block{\pingu@color@eye@right} ([yshift=.75mm,xshift=-\pingu@eye@shift]\pingu@name-eye-back-right) coordinate(\pingu@name-eye-right) ellipse [x radius=.1535cm, y radius=.1575cm];
    \pingu@block{\pingu@color@eye@second@right} ([yshift=.75mm,xshift=-\pingu@eye@shift]\pingu@name-eye-back-right) coordinate(\pingu@name-eye-right) ellipse [x radius=.1325cm, y radius=.1375cm];
}

% \let\pingu@eyes@s\relax
% #endregion

% #region wings
% every wing has to define 1) a base element angle and 2) a marker if before or after the wing
\let\pingu@wi@above\iftrue
\let\pingu@wi@below\iffalse
% name core | left | right | above: \iftrue | angle for items | wing down [left]
\long\def\@pingu@wings@s#1#2#3#4#5#6{%
    \pgfqkeys{/pingu}{%
        left wing #1/.style    = {/pingu/left wing={#1}, /pingu/left wing color={##1}},%
        left wing #1/.default  = \pingu@color@body@main,%
        right wing #1/.style   = {/pingu/right wing={#1}, /pingu/right wing color={##1}},%
        right wing #1/.default = \pingu@color@body@main,%
        wings #1/.style   = {/pingu/wings={#1}, /pingu/wings color={##1}},%
        wings #1/.default = \pingu@color@body@main%
    }%
    \expandafter\def\csname @pingu@wing@str@#1@\endcsname{#1}%
    \pingu@leftwing@add{#1}{#2}\pingu@rightwing@add{#1}{#3}%
    \expandafter\let\csname @pingu@wingitem@#1@\endcsname#4\relax
    \expandafter\def\csname @pingu@wingangle@items@#1@\endcsname{#5}%
    \expandafter\def\csname @pingu@wingdown@#1@\endcsname{#6}%
}
\pgfqkeys{/pingu}{wings none/.style={/pingu/wings=none},left wing none/.style={/pingu/left wing=none},right wing none/.style={/pingu/right wing=none}} % adding the alias
\let\@pingu@wingitem@none@\pingu@wi@above
\def\@pingu@wingangle@items@none@{90}
\def\@pingu@wingdown@none@{90}

% to hide it with the glow
\def\pingu@wing@compensator#1{#1}

%     #region wings-normal
\@pingu@wings@s{normal}{%
    \coordinate (\pingu@name-wing-left-start) at ([yshift=-6.5mm]\pingu@name-wings-side-left);
\scope[xshift=-\p@] % shift to avoid rounding errors in pdf viewers
    \pgfinterruptboundingbox
    \path[/pingu/@invclip] \pingu@path@lowerpingu;
    \endpgfinterruptboundingbox
    \pingu@block[rotate around={15:(\pingu@name-wing-left-start)}]{\pingu@color@left@wing} (\pingu@name-wing-left-start) ellipse [x radius=.195cm, y radius=9mm] +(-90:.195cm and 9mm) coordinate (\pingu@name-wing-left-tip) +(-90:.145cm and .75cm) coordinate (\pingu@name-wing-left);
\endscope}{%
\coordinate (\pingu@name-wing-right-start) at ([yshift=-6.5mm]\pingu@name-wings-side-right);
\scope[xshift=\p@] % shift to avoid rounding errors in pdf viewers
    \pgfinterruptboundingbox
    \path[/pingu/@invclip] \pingu@path@lowerpingu;
    \endpgfinterruptboundingbox
    \pingu@block[rotate around={-15:(\pingu@name-wing-right-start)}]{\pingu@color@right@wing} (\pingu@name-wing-right-start) ellipse [x radius=.195cm, y radius=9mm] +(-90:.195cm and 9mm) coordinate (\pingu@name-wing-right-tip) +(-90:.145cm and .75cm) coordinate (\pingu@name-wing-right);
\endscope}{\pingu@wi@above}{-5}{-70}
%     #endregion
%     #region wings-wave
\@pingu@wings@s{wave}{%
    \coordinate (\pingu@name-wing-left-start) at ([yshift=-5.85mm]\pingu@name-wings-side-left);
    \scope[xshift=-\p@] % shift to avoid rounding errors in pdf viewers
    \pgfinterruptboundingbox
    \path[/pingu/@invclip] \pingu@path@lowerpingu;
    \endpgfinterruptboundingbox
    \pingu@block[rotate around={-39:(\pingu@name-wing-left-start)}]{\pingu@color@left@wing} (\pingu@name-wing-left-start) ellipse [x radius=2.2mm, y radius=9.35mm] +(90:.22cm and .935cm) coordinate (\pingu@name-wing-left-tip) +(150:.22cm and .935cm) coordinate (\pingu@name-wing-left-cap-up) +(-3:.22cm and .935cm) coordinate (\pingu@name-wing-left-cap-down) +(90:.175cm and .75cm) coordinate (\pingu@name-wing-left);
    \pingu@wing@compensator{\pingu@block{\pingu@color@left@wing} (\pingu@name-wing-left-start)++(.03mm,4.6mm) to[out=-80,in=220] (\pingu@name-wing-left-cap-up) -- (\pingu@name-wing-left-start) -- cycle;
    \pingu@block{\pingu@color@left@wing} (\pingu@name-wing-left-start)++(.085mm,-4.4mm) to[out=80,in=-131] (\pingu@name-wing-left-cap-down) -- (\pingu@name-wing-left-start) -- cycle;}
    \endscope}{%
    \coordinate (\pingu@name-wing-right-start) at ([yshift=-5.85mm]\pingu@name-wings-side-right);
\scope[xshift=\p@] % shift to avoid rounding errors in pdf viewers
    \pgfinterruptboundingbox
    \path[/pingu/@invclip] \pingu@path@lowerpingu;
    \endpgfinterruptboundingbox
    \pingu@block[rotate around={39:(\pingu@name-wing-right-start)}]{\pingu@color@right@wing} (\pingu@name-wing-right-start) ellipse [x radius=.22cm, y radius=.935cm] +(90:.22cm and .935cm) coordinate (\pingu@name-wing-right-tip) +(30:.22cm and .935cm) coordinate (\pingu@name-wing-right-cap-up) +(177:.22cm and .935cm) coordinate (\pingu@name-wing-right-cap-down) +(90:.175cm and .775cm) coordinate (\pingu@name-wing-right);
    \pingu@wing@compensator{\pingu@block{\pingu@color@right@wing} (\pingu@name-wing-right-start)++(-.03mm,4.6mm) to[out=-100,in=-45] (\pingu@name-wing-right-cap-up) -- (\pingu@name-wing-right-start) -- cycle;
    \pingu@block{\pingu@color@right@wing} (\pingu@name-wing-right-start)++(-.1mm,-4.4mm) to[out=100,in=-50] (\pingu@name-wing-right-cap-down) -- (\pingu@name-wing-right-start) -- cycle;}
\endscope}{\pingu@wi@above}{-10}{-110}
%     #endregion
%     #region wings-raise
\@pingu@wings@s{raise}{%
\coordinate (\pingu@name-wing-left-start) at ([yshift=-6.25mm]\pingu@name-wings-side-left);
\scope[xshift=-\p@] % shift to avoid rounding errors in pdf viewers
\pgfinterruptboundingbox
\path[/pingu/@invclip] \pingu@path@lowerpingu;
\endpgfinterruptboundingbox
    \pingu@block[rotate around={-17:(\pingu@name-wing-left-start)}]{\pingu@color@left@wing} (\pingu@name-wing-left-start) ellipse [x radius=.195cm, y radius=.925cm] +(90:.195cm and .925cm) coordinate (\pingu@name-wing-left-tip) +(90:.145cm and .775cm) coordinate (\pingu@name-wing-left);
\endscope}{%
\scope[xshift=\p@] % shift to avoid rounding errors in pdf viewers
    \pgfinterruptboundingbox
    \path[/pingu/@invclip] \pingu@path@lowerpingu;
    \endpgfinterruptboundingbox
    \coordinate (\pingu@name-wing-right-start) at ([yshift=-6.25mm]\pingu@name-wings-side-right);
    \pingu@block[rotate around={17:(\pingu@name-wing-right-start)}]{\pingu@color@right@wing} (\pingu@name-wing-right-start) ellipse [x radius=.195cm, y radius=.925cm] +(90:.195cm and .925cm) coordinate (\pingu@name-wing-right-tip) +(90:.145cm and .775cm) coordinate (\pingu@name-wing-right);
\endscope}%
{\pingu@wi@above}{0}{-126}
%     #endregion
%     #region wings-grab
\@pingu@wings@s{grab}{%
\pingu@layer{foreground}[]
    \clip[use path=\pingu@lowerpingu];
    \coordinate (\pingu@name-wing-left-start) at ([yshift=-4.5mm]\pingu@name-wings-side-left);
    \pingu@block[rotate around={-42:(\pingu@name-wing-left-start)}]{\pingu@color@left@wing} (\pingu@name-wing-left-start) ellipse [x radius=.225cm, y radius=1.05cm] +(-90:.225cm and 1.05cm) coordinate (\pingu@name-wing-left-tip) +(-90:.175cm and 9mm) coordinate (\pingu@name-wing-left);
\endpingu@layer}{%
\pingu@layer{foreground}[]
    \clip[use path=\pingu@lowerpingu];
    \coordinate (\pingu@name-wing-right-start) at ([yshift=-4.5mm]\pingu@name-wings-side-right);
    \pingu@block[rotate around={42:(\pingu@name-wing-right-start)}]{\pingu@color@right@wing} (\pingu@name-wing-right-start) ellipse [x radius=.225cm, y radius=1.05cm] +(-90:.225cm and 1.05cm) coordinate (\pingu@name-wing-right-tip) +(-90:.175cm and 9mm) coordinate (\pingu@name-wing-right);
\endpingu@layer}%
{\pingu@wi@below}{12}{60}
%     #endregion
%     #region wings-shock
\@pingu@wings@s{shock}{%
\pingu@layer{foreground}[]
    \clip[use path=\pingu@lowerpingu];
    \coordinate (\pingu@name-wing-left-start) at ([yshift=-6.5mm]\pingu@name-wings-side-left);
    \pingu@block[rotate around={64:(\pingu@name-wing-left-start)}]{\pingu@color@left@wing} (\pingu@name-wing-left-start) ellipse [x radius=.235cm, y radius=.85cm] +(90:.235cm and .85cm) coordinate (\pingu@name-wing-left-tip) +(90:.185cm and .7cm) coordinate (\pingu@name-wing-left);
\endpingu@layer}{%
\pingu@layer{foreground}[]
    \clip[use path=\pingu@lowerpingu];
    \coordinate (\pingu@name-wing-right-start) at ([yshift=-6.5mm]\pingu@name-wings-side-right);
    \pingu@block[rotate around={-64:(\pingu@name-wing-right-start)}]{\pingu@color@right@wing} (\pingu@name-wing-right-start) ellipse [x radius=.235cm, y radius=.85cm] +(90:.235cm and .85cm) coordinate (\pingu@name-wing-right-tip) +(90:.185cm and .7cm) coordinate (\pingu@name-wing-right);
\endpingu@layer}%
{\pingu@wi@below}{-180}{116}
%     #endregion
%     #region wings-hug
\@pingu@wings@s{hug}{%
\coordinate (\pingu@name-wing-left-start) at ([yshift=-6.25mm]\pingu@name-wings-side-left);
\scope[xshift=-\p@] % shift to avoid rounding errors in pdf viewers
\pgfinterruptboundingbox
\path[/pingu/@invclip] \pingu@path@lowerpingu;
\endpgfinterruptboundingbox
\pingu@block[rotate around={-128:(\pingu@name-wing-left-start)}]{\pingu@color@left@wing} (\pingu@name-wing-left-start) ellipse [x radius=.235cm, y radius=.925cm] +(90:.235cm and .935cm) coordinate (\pingu@name-wing-left-tip) +(175:.235cm and .935cm) coordinate (\pingu@name-wing-left-cap-up) +(22:.235cm and .935cm) coordinate (\pingu@name-wing-left-cap-down) +(90:.175cm and .775cm) coordinate (\pingu@name-wing-left);
\pingu@wing@compensator{\pingu@block{\pingu@color@left@wing} (\pingu@name-wing-left-start)++(.03mm,4.6mm) to[out=-80,in=140] (\pingu@name-wing-left-cap-up) -- (\pingu@name-wing-left-start) -- cycle;
\pingu@block{\pingu@color@left@wing} (\pingu@name-wing-left-start)++(.085mm,-4.4mm) to[out=82,in=155] (\pingu@name-wing-left-cap-down) -- (\pingu@name-wing-left-start) -- cycle;}
\endscope}{%
\coordinate (\pingu@name-wing-right-start) at ([yshift=-6.25mm]\pingu@name-wings-side-right);
\scope[xshift=\p@] % shift to avoid rounding errors in pdf viewers
\pgfinterruptboundingbox
\path[/pingu/@invclip] \pingu@path@lowerpingu;
\endpgfinterruptboundingbox
\pingu@block[rotate around={128:(\pingu@name-wing-right-start)}]{\pingu@color@right@wing} (\pingu@name-wing-right-start) ellipse [x radius=.235cm, y radius=.935cm] +(90:.235cm and .935cm) coordinate (\pingu@name-wing-right-tip) +(5:.235cm and .935cm) coordinate (\pingu@name-wing-right-cap-up) +(160:.235cm and .935cm) coordinate (\pingu@name-wing-right-cap-down) +(90:.175cm and .775cm) coordinate (\pingu@name-wing-right);
\pingu@wing@compensator{\pingu@block{\pingu@color@right@wing} (\pingu@name-wing-right-start)++(-.03mm,4.6mm) to[out=-100,in=40] (\pingu@name-wing-right-cap-up) -- (\pingu@name-wing-right-start) -- cycle;
\pingu@block{\pingu@color@right@wing} (\pingu@name-wing-right-start)++(-.085mm,-4.4mm) to[out=92,in=20] (\pingu@name-wing-right-cap-down) -- (\pingu@name-wing-right-start) -- cycle;}
\endscope}{\pingu@wi@above}{-30}{-62}
\let\@pingu@wings@s\relax
%     #endregion
% #endregion

% #region hairstyle
\pgfqkeys{/pingu}{hairstyle none/.style={/pingu/hairstyle=none}}
\pingu@hairstyle@add{normal}{%
\scope\pgfinterruptboundingbox
\clip[/pingu/@invclip] (\pingu@name-head-center) ellipse [x radius=\pingu@w@half, y radius=\pingu@head@h@half-.0165mm];
\endpgfinterruptboundingbox
\scope[rounded corners=.08mm]
\pingu@block{\pingu@color@hair@a} ([yshift=-\pingu@one]\pingu@name-head-top) -- ++(.15mm,0) arc (0:90:\pingu@one@eight{} and .135cm) arc (90:0:.35mm and .75mm);
\pingu@block{\pingu@color@hair@b} ([yshift=-\pingu@one]\pingu@name-head-top) -- ++(.33mm,0) arc (0:90:\pingu@one@eight{} and .175cm) arc (90:0:.35mm and \pingu@one);
\pingu@block{\pingu@color@hair@c} ([yshift=-\pingu@one]\pingu@name-head-top) -- ++(-.33mm,0) arc (180:90:.17cm and .215cm) arc (90:180:.75mm and .18cm);
\pingu@block{\pingu@color@hair@d} ([yshift=-\pingu@one]\pingu@name-head-top) -- ++(.25mm,0) arc (180:90:\pingu@one@eight{} and .175cm) arc (90:180:.35mm and \pingu@one@eight);
\pingu@block{\pingu@color@hair@e} ([yshift=-\pingu@one]\pingu@name-head-top) -- ++(.44mm,0) arc (180:90:\pingu@one@eight{} and .135cm) arc (90:180:.35mm and .75mm);
\endscope\endscope}
% #endregion

% #region feet
% <pingu@feet@s>
\long\def\pingu@feet@s#1#2#3{%
    \@ifnextchar[%
        {\pingu@feet@s@{#1}{#2}{#3}}%
        {\pingu@feet@s@{#1}{#2}{#3}[pingu@yellow]}%
}
\long\def\pingu@feet@s@#1#2#3[#4]{%
    \pgfqkeys{/pingu}{%
        left foot #1/.style    = {/pingu/left foot={#1}, /pingu/left foot color={##1}},%
        left foot #1/.default  = {#4},%
        right foot #1/.style   = {/pingu/right foot={#1}, /pingu/right foot color={##1}},%
        right foot #1/.default = {#4},%
        feet #1/.style         = {/pingu/feet={#1}, /pingu/feet color={##1}},%
        feet #1/.default       = {#4}%
    }%
    \pingu@leftfoot@add{#1}{#2}\pingu@rightfoot@add{#1}{#3}%
}
% <@pingu@feet@s>
\pgfqkeys{/pingu}{%
    feet none/.style={/pingu/feet=none},
    left foot none/.style={/pingu/left foot=none},
    right foot none/.style={/pingu/right foot=none}
}

% <feet normal>
\pingu@feet@s{normal}{%
    \coordinate (@tmp) at ([xshift=-.5\pingu@foot@single@h]\pingu@name-foot-left);
    \pingu@block[rotate around={-25+\basicfeetbend:(@tmp)}]{\pingu@color@foot@left}
        (@tmp) ellipse [
            x radius=\pingu@foot@single@w,
            y radius=\pingu@foot@single@h
        ];
    \pingu@block[rotate around={\basicfeetbend:(\pingu@name-foot-left)}]
        {\pingu@color@foot@left} (\pingu@name-foot-left) ellipse [
            x radius=\pingu@foot@single@w,
            y radius=\pingu@foot@single@h
        ];

    \coordinate (@tmp) at ([xshift= .5\pingu@foot@single@h]\pingu@name-foot-left);
    \pingu@block[rotate around={25+\basicfeetbend:(@tmp)}]{\pingu@color@foot@left}
        (@tmp) ellipse [
            x radius=\pingu@foot@single@w,
            y radius=\pingu@foot@single@h
        ];
}{%
    \coordinate (@tmp) at ([xshift=-.5\pingu@foot@single@h]\pingu@name-foot-right);
    \pingu@block[rotate around={-25-\basicfeetbend:(@tmp)}]{\pingu@color@foot@right}
        (@tmp) ellipse [
            x radius=\pingu@foot@single@w,
            y radius=\pingu@foot@single@h
        ];
    \pingu@block[rotate around={-\basicfeetbend:(\pingu@name-foot-right)}]
        {\pingu@color@foot@right} (\pingu@name-foot-right) ellipse [
            x radius=\pingu@foot@single@w,
            y radius=\pingu@foot@single@h
        ];
    \coordinate (@tmp) at ([xshift= .5\pingu@foot@single@h]\pingu@name-foot-right);
    \pingu@block[rotate around={25-\basicfeetbend:(@tmp)}]{\pingu@color@foot@right}
        (@tmp) ellipse [
            x radius=\pingu@foot@single@w,
            y radius=\pingu@foot@single@h
        ];
}
% <@feet normal>


\pingu@feet@s{sit}{%
\pingu@layer{foreground}[]
    \coordinate (@tmp) at ([xshift=-.35\pingu@foot@single@h,yshift=-.4mm]\pingu@name-foot-left);
    \pingu@block[rotate around={\basicfeetbend:(@tmp)}]{\pingu@color@foot@left} (@tmp)
    arc(180:90:1.33mm and 4mm) arc (90:0:1.33mm and .9mm) to[bend left=50] ++(1.33mm,-1.3mm) to[bend left=66] ++(.7mm,-1.8mm) arc(0-50:-90-20:4.13mm and 4.2mm) to[bend left] cycle;
\endpingu@layer
}{%
\pingu@layer{foreground}[xscale=-1]
    \coordinate (@tmp) at ([xshift=-.35\pingu@foot@single@h,yshift=-.5mm]\pingu@name-foot-right);
    \pingu@block[rotate around={\basicfeetbend:(@tmp)}]{\pingu@color@foot@right} (@tmp)
    arc(180:90:1.33mm and 4mm) arc (90:0:1.33mm and .9mm) to[bend left=50] ++(1.33mm,-1.3mm) to[bend left=66] ++(.7mm,-1.8mm) arc(0-50:-90-20:4.13mm and 4.2mm) to[bend left] cycle;
\endpingu@layer
}

% <feet simple>
\pingu@feet@s{simple}{%
    \pingu@block[rotate around={-\basicfeetbend:(\pingu@name-foot-left)}]
        {\pingu@color@foot@left} (\pingu@name-foot-left) ellipse [
            x radius=2.66\pingu@foot@single@w,
            y radius=\pingu@foot@single@h
        ];
}{%
    \pingu@block[rotate around={\basicfeetbend:(\pingu@name-foot-right)}]
        {\pingu@color@foot@right} (\pingu@name-foot-right) ellipse [
            x radius=2.66\pingu@foot@single@w,
            y radius=\pingu@foot@single@h
        ];
}
% <@feet simple>

\pingu@feet@s{back}{%
    \pingu@block{\pingu@color@foot@left} ([yshift=.2\pingu@foot@single@h]\pingu@name-foot-left) ellipse [x radius=2.5\pingu@foot@single@w,y radius=.435\pingu@foot@single@h];
}{%
    \pingu@block{\pingu@color@foot@right} ([yshift=.2\pingu@foot@single@h]\pingu@name-foot-right) ellipse [x radius=2.5\pingu@foot@single@w,y radius=.435\pingu@foot@single@h];
}

\pingu@feet@s{chubby}{%
\pingu@layer{foreground}[rotate around={-\basicfeetbend+45:(\pingu@name-foot-left)}]
    \pingu@block\pingu@color@foot@left ([xshift=-3mm,yshift=-1.65mm]\pingu@name-foot-left) to[bend right=3] ++(5mm,0) -- ++(.05mm,.6mm) to[out=83,in=129,looseness=1.125] cycle;
    \ifx\pingu@color@foot@left\@pingu@none\else
        \colorlet{@}{\pingu@color@foot@left!80!\pingu@color@body@main}
        \pingu@draw{@} ([xshift=-3mm,yshift=-1.65mm]\pingu@name-foot-left) to[bend right=5] coordinate[pos=.29] (@) coordinate[pos=.69] (@b) ++(5mm,0) -- ++(.05mm,.6mm) to[out=83,in=119,looseness=1.125] cycle;
        \pingu@draw{@} (@) to[bend right=4] ++(.125mm,.75mm);
        \pingu@draw{@} (@b) to[bend right=9] ++(.15mm,1.15mm);
    \fi
\endpingu@layer
}{%
\pingu@layer{foreground}[rotate around={-\basicfeetbend+45:(\pingu@name-foot-right)}]
    \pingu@block\pingu@color@foot@right ([xshift=3mm,yshift=-1.65mm]\pingu@name-foot-right) to[bend left=3] ++(-5mm,0) -- ++(-.05mm,.6mm) to[out=97,in=76,looseness=1.125] cycle;
    \ifx\pingu@color@foot@right\@pingu@none\else
        \colorlet{@}{\pingu@color@foot@right!80!\pingu@color@body@main}
        \pingu@draw{@} ([xshift=3mm,yshift=-1.65mm]\pingu@name-foot-right) to[bend left=5] coordinate[pos=.29] (@) coordinate[pos=.69] (@b)  ++(-5mm,0) -- ++(-.05mm,.475mm) to[out=97,in=81,looseness=1.125] cycle;
        \pingu@draw{@} (@) to[bend left=4] ++(-.125mm,.75mm);
        \pingu@draw{@} (@b) to[bend left=9] ++(-.15mm,1.15mm);
    \fi
\endpingu@layer
}
% #endregion

% #region bill
% name core | main
% <pingu@bill@s>
\long\def\pingu@bill@s#1#2{%
    \pgfqkeys{/pingu}{%
        bill #1/.style   = {/pingu/bill={#1}, /pingu/bill color={##1}},%
        bill #1/.default = pingu@yellow% TODO: defaults
    }%
    \pingu@bill@add{#1}{#2}%
}
\pgfqkeys{/pingu}{bill none/.style={/pingu/bill=none}}
% <@pingu@bill@s>

% <bill normal>
\pingu@bill@s{normal}{%
    \pingu@block[rounded corners=.1mm]{\pingu@color@bill}
        (\pingu@name-bill)++(-.19cm,0) arc (180:360:.19cm and .225cm)
        coordinate[pos=.5] (\pingu@name-bill-bottom) -- ++(-.2mm,.05mm)
        to[bend right=10] ([xshift=-.17cm,yshift=.05mm]\pingu@name-bill)
    -- cycle;
}
% <@bill normal>

\pingu@bill@s{foreground}{%
\pingu@layer{foreground}[]
\pingu@block{\pingu@color@bill} [rounded corners=.1mm] (\pingu@name-bill)++(-.19cm,0)
    arc (180:360:.19cm and .225cm)
    coordinate[pos=.5] (\pingu@name-bill-bottom)
    -- ++(-.2mm,.05mm) to[bend right=10] ([xshift=-.17cm,yshift=.05mm]\pingu@name-bill)--cycle;
\endpingu@layer
}

% <bill flat>
\pingu@bill@s{flat}{%
    \pingu@block{\pingu@color@bill} (\pingu@name-bill)++(-.19cm,0)
        arc (180:360:.19cm and .225cm)
        coordinate[pos=.5] (\pingu@name-bill-bottom)
    -- cycle;
}
% <@bill flat>
% #endregion
% #endregion

% #region dots
\def\@pingu@draw@dots{%
\pingu@layer{foreground}[]
    % mark wing outer
    \path[draw,pink,thick] (\pingu@name-wing-left-start-low) --(\pingu@name-wing-left-start) -- (\pingu@name-wing-left) -- (\pingu@name-wing-left-low);
    \path[draw,pink,thick] (\pingu@name-wing-right-start-low) -- (\pingu@name-wing-right-start) -- (\pingu@name-wing-right) -- (\pingu@name-wing-right-low);
  \@for\@pingu@elem:={belly-center,head,head-top,foot-left,foot-right,eye-right,eye-left,bill,bill-bottom,wings-side-left,wings-side-right,wing-left-start,wing-left-tip,wing-right-start,wing-right-tip,head-right,head-left,head-center,head-back-con-left,head-back-con-right,bottom-center,waist-left,waist-right}\do{
    \path[fill=green] (\pingu@name-\@pingu@elem) circle[radius=1.125\p@];
  }
  \@for\@pingu@elem:={wing-left,wing-right,wing-left-low,wing-right-low,wing-left-up,wing-right-up,wing-left-start-low,wing-right-start-low,wing-left-start-up,wing-right-start-up}\do{
    \path[fill=yellow] (\pingu@name-\@pingu@elem) circle[radius=1.125\p@];
  }
  % mark wing items
  \csname @pingu@wingitem@\@pingu@select@leftwing@ @\endcsname \colorlet{@wmark}{magenta} \else \colorlet{@wmark}{teal} \fi
  \pingu@block[/pingu/@draw=@wmark,thick,rotate around={\csname @pingu@wingangle@items@\@pingu@select@leftwing@ @\endcsname:(\pingu@name-wing-left)}]{@wmark}
    (\pingu@name-wing-left)++(0,3mm) circle [radius=\pingu@one] -- ++(0,-6mm);
  \csname @pingu@wingitem@\@pingu@select@rightwing@ @\endcsname \colorlet{@wmark}{magenta} \else \colorlet{@wmark}{teal} \fi
  \pingu@block[/pingu/@draw=@wmark,thick,rotate around={-\csname @pingu@wingangle@items@\@pingu@select@rightwing@ @\endcsname:(\pingu@name-wing-right)}]{@wmark}
    (\pingu@name-wing-right)++(0,3mm) circle [radius=\pingu@one] -- ++(0,-6mm);
\endpingu@layer}
% endregion
% #region extras
%     #region extras below
\def\pingu@@xif@eb#1#2{\csname if@pingu@x@#1@\endcsname\csname pingu@draw@eb@#2\endcsname\fi}
\def\pingu@xif@eb#1#2{\ifcsname if@pingu@x@#1@\endcsname{\pingu@@xif@eb{#1}{#2}}\fi}
\def\pingu@draw@extras@below{%
    \pingu@xif@eb{heart}{heart}%
    \pingu@xif@eb{devilwings}{devilwings}%
    \pingu@xif@eb{glow}{glow}%
    \pingu@xif@eb{belt}{belt}%
    \pingu@xif@eb{santabeard}{santabeard}%
    \pingu@xif@eb{tie}{tie}%
    \pingu@xif@eb{pants}{pants}%
    \pingu@xif@eb{medal}{medal}%
    \pingu@xif@eb{bowtie}{bowtie}%
    \pingu@xif@eb{cup}{cup}%
    \pingu@xif@eb{vampireteeth}{vampireteeth}%
    \pingu@xif@eb{blush}{blush}%
    \pingu@xif@eb{eyepatchleft}{eyepatch@l}%
    \pingu@xif@eb{eyepatchright}{eyepatch@r}%
    \pingu@xif@eb{monocleleft}{monocle@l}%
    \pingu@xif@eb{monocleright}{monocle@r}%
    \pingu@xif@eb{horseon}{horseon}%
}
%       #region cup
\pingu@create@extra{cup}{%
  cup/.code       = {\pingu@set@extra{cup}{true}\pingu@color{cup}{#1}},
  cup/.default    = pingu@green,
  cup steam/.code    = \pingu@color{cup@steam}{#1},%
  cup steam/.default = lightgray!90!orange,%
  cup steam shift/.code = \def\pingu@x@cup@steam@shift{#1},%
  cup straw/.code = \pingu@color{cup@straw}{#1}%
}{cup straw=\pingu@color@cup,cup steam=\@pingu@none,cup steam shift=0mm}

\def\pingu@draw@eb@cup{%
    \pingu@block[rounded corners=.25mm]{\pingu@color@cup} (\pingu@name-belly-center)++(-.325cm,.275cm) to[bend right=2] ++(.5mm,-.675cm) to[bend right=8] ++(.55cm,\z@) to[bend right=2] ++(.5mm,.675cm);
    \path (\pingu@name-belly-center)++(0,.275cm) -- (\pingu@name-bill) coordinate[pos=.5,xshift=-2mm] (\pingu@name-cup-straw-outer-angle);
    \path (\pingu@name-belly-center)++(-.115cm,.275cm) coordinate (\pingu@name-straw-outer-start);
    \pingu@block[rounded corners=.15mm]{\pingu@color@cup@straw} (\pingu@name-straw-outer-start) -- (\pingu@name-cup-straw-outer-angle) -- (\pingu@name-bill) -- ++(.5mm,0) -- ([xshift=.5mm]\pingu@name-cup-straw-outer-angle) -- ([xshift=.5mm]\pingu@name-straw-outer-start) -- cycle;
    \pingu@block{\pingu@color@cup} (\pingu@name-belly-center)++(0,.275cm) ellipse [x radius=.325cm,y radius=.5mm];

    % TODO: configure opacity
    \pgfonlayer{foreground}
    \pingu@block[rounded corners=.05mm,opacity=.55]{\pingu@color@cup@steam} (\pingu@name-belly-center)++(1.5mm+\pingu@x@cup@steam@shift,4mm) coordinate(@) to[out=100,in=260] ++(.3mm,3.75mm) -- ++(0.1mm,0) to[out=280,in=80] ([xshift=.1mm]@) -- cycle;
    \pingu@block[rounded corners=.05mm,opacity=.55]{\pingu@color@cup@steam} (\pingu@name-belly-center)++(0mm+\pingu@x@cup@steam@shift,3.33mm) coordinate(@) to[out=100,in=260] ++(.2mm,2.75mm) -- ++(0.1mm,0) to[out=280,in=80] ([xshift=.1mm]@) -- cycle;
    \pingu@block[rounded corners=.05mm,opacity=.55]{\pingu@color@cup@steam} (\pingu@name-belly-center)++(-1.25mm++\pingu@x@cup@steam@shift,3.65mm) coordinate(@) to[out=100,in=260] ++(.3mm,3.75mm) -- ++(0.1mm,0) to[out=280,in=80] ([xshift=.1mm]@) -- cycle;
    \endpgfonlayer
}
%       #endregion

%       #region eye patch
%         #region eye patch left
\pingu@create@extra{eyepatchleft}{%
    eyepatch left/.forward to = /pingu/eye patch left,
    eye-patch left/.forward to = /pingu/eye patch left,
    eye patch left/.code      = \pingu@set@extra{eyepatchleft}{true}\pingu@color{eyepatchleft}{#1},
    eye patch left/.default   = \pingu@color@body@main,
}{}

\newlength\pingu@patchw \pingu@patchw=6.5pt
\def\pingu@draw@eb@eyepatch@l{%
    \pingu@draw[line width=1.25pt,line cap=round]{\pingu@color@eyepatchleft} (\pingu@name-head-right)++(-2.75mm,-2.5mm) to[bend right=10] coordinate[pos=.71] (\pingu@name-eye-left-patch) ([xshift=-.85mm,yshift=1.25mm]\pingu@name-wings-side-left);
    \pingu@block[rotate around={-9:(\pingu@name-eye-left-patch)}]{\pingu@color@eyepatchleft} (\pingu@name-eye-left-patch)++(0,.5pt) ellipse [x radius=\pingu@patchw, y radius=.65pt];
    \pingu@block[rotate around={-9:(\pingu@name-eye-left-patch)}]{\pingu@color@eyepatchleft} (\pingu@name-eye-left-patch) ++(-\pingu@patchw,.5pt) arc(180:360:\pingu@patchw{} and 8.9pt);
}
%         #endregion
%         #region eye patch right
\pingu@create@extra{eyepatchright}{%
    eyepatch right/.forward to = /pingu/eye patch right,
    eye-patch right/.forward to = /pingu/eye patch right,
    eye patch right/.code      = \pingu@set@extra{eyepatchright}{true}\pingu@color{eyepatchright}{#1},
    eye patch right/.default   = \pingu@color@body@main,
}{}

\def\pingu@draw@eb@eyepatch@r{%
    \pingu@draw[line width=1.25pt,line cap=round]{\pingu@color@eyepatchright} (\pingu@name-head-left)++(2.75mm,-2.5mm) to[bend left=10] coordinate[pos=.71] (\pingu@name-eye-right-patch) ([xshift=.85mm,yshift=1.25mm]\pingu@name-wings-side-right);
    \pingu@block[rotate around={9:(\pingu@name-eye-right-patch)}]{\pingu@color@eyepatchright} (\pingu@name-eye-right-patch)++(0,.5pt) ellipse [x radius=\pingu@patchw, y radius=.65pt];
    \pingu@block[rotate around={9:(\pingu@name-eye-right-patch)}]{\pingu@color@eyepatchright} (\pingu@name-eye-right-patch) ++(-\pingu@patchw,.5pt) arc(180:360:\pingu@patchw{} and 8.9pt);
}
%         #endregion
%       #endregion

% #region glow
\pingu@create@extra{glow}{%
    glow/.code       = \pingu@set@extra{glow}{true}\pingu@color{glow}{#1},
    glow/.default    = pingu@white,
    glow thick/.style = {/pingu/glow={#1}, /pingu/glow width function={3.5mm-1.25*\i mm}},
    glow steps/.code = \def\pingu@x@extra@glow@steps{#1},
    glow function/.code = \def\pingu@x@extra@glow@func{#1},
    glow width function/.code = \def\pingu@x@extra@glow@width@func{#1},
    glow solid/.style = {/pingu/glow={#1},/pingu/glow function={1},/pingu/glow steps={1.2,1.3}}
}{glow steps={1,1.1,1.2,1.3,1.4,1.5},glow function={.1/\i},glow width function={2.85mm-1.65*\i mm}}

\def\pingu@draw@eb@glow{%
    \pingu@layer{background}[]
    \@for\i:={\pingu@x@extra@glow@steps}\do{
        \scope[/pingu/@block/.append style={draw=\pingu@color@glow,line width=\pingu@x@extra@glow@width@func},/pingu/@draw/.append style={draw=\pingu@color@glow,line width=\pingu@x@extra@glow@width@func},opacity=\pingu@x@extra@glow@func,transparency group]
        \pingu@draw[sharp corners]{\pingu@color@glow} \pingu@path@lowerpingu;
        \pingu@draw[sharp corners]{\pingu@color@glow} \pingu@path@upperpingu; 
        % todo: disable re set of coordinates
        % only draw, if not offset
        \tikzset{rounded corners/.style={}}\def\pingu@wing@compensator##1{}%
        \csname @pingu@wingitem@\@pingu@select@leftwing@ @\endcsname\@pingu@drawer@leftwing@\fi
        \csname @pingu@wingitem@\@pingu@select@rightwing@ @\endcsname\@pingu@drawer@rightwing@\fi
        \endscope
    }
    \endpingu@layer
}
% #endregion
%     #endregion

%     #region extras above
% NOTE: No auto append to allow easy order change
\def\pingu@@xif@ea#1#2{\csname if@pingu@x@#1@\endcsname\csname pingu@draw@ea@#2\endcsname\fi}
\def\pingu@xif@ea#1#2{\ifcsname if@pingu@x@#1@\endcsname{\pingu@@xif@ea{#1}{#2}}\fi}
\def\pingu@draw@extras@above{%
    \pingu@xif@ea{cap}{cap}%
    \pingu@xif@ea{eyeframe}{eyeframe}%
    \pingu@xif@ea{mask}{mask}%
    \pingu@xif@ea{glasses}{glasses}%
    \pingu@xif@ea{glassesround}{glassesround}%
    \pingu@xif@ea{devilhorns}{devilhorns}%
    \pingu@xif@ea{headband}{headband}%
    \pingu@xif@ea{vrheadset}{vrheadset}%
    \pingu@xif@ea{strawhat}{strawhat}%
    \pingu@xif@ea{graduate}{graduate}%
    \pingu@xif@ea{hat}{hat}%
    \pingu@xif@ea{spacehelmet}{spacehelmet}%
    \pingu@xif@ea{mitra}{mitra}%
    \pingu@xif@ea{witchhat}{witchhat}%
    \pingu@xif@ea{constructionhelmet}{constructionhelmet}%
    \pingu@xif@ea{conicalhat}{conicalhat}%
    \pingu@xif@ea{crown}{crown}%
    \pingu@xif@ea{cakehat}{cakehat}%
    \pingu@xif@ea{pumpkinhat}{pumpkinhat}%
    \pingu@xif@ea{jackolantern}{jackolantern}%
    \pingu@xif@ea{princesscrown}{princesscrown}%
    \pingu@xif@ea{rook}{rook}%
    \pingu@xif@ea{halo}{halo}%
    \pingu@xif@ea{headphone}{headphone}%
    \pingu@xif@ea{sheriffstar}{sheriffstar}%
    \pingu@xif@ea{santahat}{santahat}%
    \pingu@xif@ea{woolhat}{woolhat}%
    \pingu@xif@ea{deerhat}{deerhat}%
    \pingu@xif@ea{banner}{banner}%
    \pingu@xif@ea{bee}{bee}%
}
% #region halo
\newif\if@pingu@x@halo@glow
\newif\if@pingu@x@halo@above
\pingu@create@extra{halo}{%
    halo/.code    	 = \pingu@set@extra{halo}{true}\pingu@color{halo}{#1},
    halo/.default    = pingu@lightblue,
    halo raise/.code = \def\pingu@x@halo@raise{#1},
    halo above/.is if = @pingu@x@halo@above,
    halo glow/.is if = @pingu@x@halo@glow% only active if glows loaded
}{halo glow=\ifpengu@setup@glows@ true\else false\fi,halo raise=0mm,halo above=false}

\def\pingu@draw@ea@halo{%
\if@pingu@x@halo@above\pingu@layer{foreground}[]\fi
\pingu@block[even odd rule]{\pingu@color@halo} ([yshift=\pingu@x@halo@raise]\pingu@name-head-top) ellipse [x radius=\pingu@w@half-\pingu@one,y radius=2.5mm] ellipse [x radius=\pingu@w@half-1.95mm,y radius=1.55mm];
\if@pingu@x@halo@glow
\pingu@block[even odd rule,/pingu/@glow]{\pingu@color@halo} ([yshift=\pingu@x@halo@raise]\pingu@name-head-top) ellipse [x radius=(\pingu@w@half-1.95mm)*1.7,y radius=1.55mm*2.35] ellipse [x radius=\pingu@w@half-1.95mm,y radius=1.55mm];
\fi
\if@pingu@x@halo@above\endpingu@layer{foreground}\fi
}
% #endregion

% #region eye frame
\pingu@create@extra{eyeframe}{%
    % extra halo
    eyeframe/.forward to  = /pingu/eye frame,
    eye-frame/.forward to = /pingu/eye frame,
    eye frame/.code       = \pingu@set@extra{eyeframe}{true}\pingu@color{eyeframe}{#1},
    eye frame/.default    = pingu@black,
}{}

\def\pingu@draw@ea@eyeframe{%
    \pingu@draw{\pingu@color@eyeframe} [rounded corners=.25mm](\pingu@name-eye-left)++(-2mm,1.5mm) to[bend left=8] ++(4.2mm,0) to[out=-80,in=70] ++(-.2mm,-2.75mm) to[bend left=32.5] ++(-3.65mm,0mm) to[out=135,in=-90] ++(-.8mm,2.7mm) -- cycle;
    \pingu@draw{\pingu@color@eyeframe} [rounded corners=.25mm](\pingu@name-eye-right)++(2mm,1.5mm) to[bend right=8] ++(-4.2mm,0) to[out=-100,in=110] ++(.2mm,-2.75mm) to[bend right=32.5] ++(3.65mm,0mm) to[out=45,in=-90] ++(.8mm,2.7mm) -- cycle;
}
% #endregion

% #region sheriff star
\pingu@create@extra{sheriffstar}{%
    sheriff star/.code             = \pingu@set@extra{sheriffstar}{true}\pingu@color{sheriffstar}{#1},
    sheriff star/.default          = pingu@yellow,
    sheriff star content/.code     = \def\pingu@x@sheriff@star@content{#1},
    sheriff star lines/.code       = \pingu@color{sheriffstar@lines}{#1},
}{sheriff star content={\resizebox{2.25mm}!{\textsf{\bfseries Sheriff}}},sheriff star lines=pingu@black!92!\pingu@color@sheriffstar}

\def\pingu@draw@ea@sheriffstar{%
\pingu@layer{middle}[]
\path (\pingu@name-belly-center) -- (\pingu@name-head-back-con-left) node[pos=.6, star, star points=7, fill=\pingu@color@sheriffstar,minimum size=1.75mm,scale=.9,rotate=-5] (@) {};
\foreach \i in {1,...,7} {
    \pingu@block{\pingu@color@sheriffstar!98!pingu@black} (@.outer point \i) circle [radius=.2mm];
}

\node[outer sep=0pt,inner xsep=0pt,inner ysep=.25mm] (@s) at (@) {\ifx\pingu@color@sheriffstar@lines\@pingu@none\else\color{\pingu@color@sheriffstar@lines}\fi\pingu@x@sheriff@star@content};
\pingu@draw[line width=.002mm]{\pingu@color@sheriffstar@lines} (@s.north east) -- (@s.north west);
\pingu@draw[line width=.002mm]{\pingu@color@sheriffstar@lines} (@s.south east) -- (@s.south west);
\endpingu@layer}
% #endregion

%     #endregion
% #endregion

% #region wingitems
%     #region wingitems-setup
\def\pingu@may@draw@wing#1#2{\csname if@pingu@x@#1#2@\endcsname \csname pingu@draw@wi@#1\endcsname{#2}\fi}
\edef\pingu@str@wing@left{left}
\let\@pingu@wingitems@\@empty
\newif\if@pingu@wing@item@side@left@
\def\pingu@setup@wing#1#2{%
    \edef\@tmpa{#2}% minus on left
    \ifx\pingu@str@wing@left\@tmpa
        \expandafter\def\expandafter\@angle{\csname @pingu@wingangle@items@\csname @pingu@select@#2wing@\endcsname @\endcsname+\pingu@wing@left@item@angle@user}%
        \def\@sidesign{1}%
        \if@pingu@wi@flip@left \@pingu@wing@item@side@left@false \else \@pingu@wing@item@side@left@true\fi
    \else
        \expandafter\def\expandafter\@angle{-(\csname @pingu@wingangle@items@\csname @pingu@select@#2wing@\endcsname @\endcsname+\pingu@wing@right@item@angle@user)}%
        \def\@sidesign{-1}%
        \if@pingu@wi@flip@right \@pingu@wing@item@side@left@true \else \@pingu@wing@item@side@left@false\fi
    \fi
    \expandafter\def\expandafter\@col{\csname pingu@color@#1#2\endcsname}%
}

\def\pingu@draw@wing@items{%
\pingu@layer{middle}[]\@pingu@draw@wing@items@left\endpingu@layer
\pingu@layer{middle}[]\@pingu@draw@wing@items@right\endpingu@layer
}

\let\@pingu@draw@wing@items@left\@empty
\let\@pingu@draw@wing@items@right\@empty

\def\pingu@create@wing@extra#1#2#3{%
\pingu@csappto{@pingu@wingitems@}{#1}%
\expandafter\def\expandafter\@pingu@draw@wing@items@left\expandafter{\@pingu@draw@wing@items@left\pingu@may@draw@wing{#1}{left}}%
\expandafter\def\expandafter\@pingu@draw@wing@items@right\expandafter{\@pingu@draw@wing@items@right\pingu@may@draw@wing{#1}{right}}%
\def\@lr{left}%
\protected@edef\@tmp{\expandafter\expandafter\expandafter\expandafter\expandafter\unexpanded{{#1left}{#2}{#3}}}%
\expandafter\pingu@create@extra\@tmp
\def\@lr{right}%
\protected@edef\@tmp{\expandafter\expandafter\expandafter\expandafter\expandafter\unexpanded{{#1right}{#2}{#3}}}%
\expandafter\pingu@create@extra\@tmp}
%     #endregion

%     #region cane
\pingu@create@wing@extra{cane}{%
  cane \@lr/.code             = {\pingu@set@extra{cane\@lr}{true}\pingu@color{cane\@lr}{##1}},
  cane \@lr/.default          = pingu@bronze,
  cane \@lr\space raise/.code = {\@namedef{pinug@x@cane@raise@\@lr}{##1}},
  cane \@lr\space length/.code = {\@namedef{pinug@x@cane@length@\@lr}{##1}},
}{cane \@lr\space raise=0mm,cane \@lr\space length=15mm}

% #1 wing
\def\pingu@draw@wi@cane#1{%
    \pingu@setup@wing{cane}{#1}%
    \if@pingu@wing@item@side@left@
        \pingu@block[thick,rotate around={\@angle+5:(\pingu@name-wing-#1)}]{\@col}(\pingu@name-wing-#1)++(0,-7mm+\pinug@x@cane@raise@left) -- ++(0,\csname pinug@x@cane@length@#1\endcsname) arc(180:0:2.25mm and 2.2mm) arc(360:180:.3mm and .275mm) arc(0:180:1.65mm and 1.65mm) -- ++(0,-\csname pinug@x@cane@length@#1\endcsname) arc(360:180:.3mm and .275mm) -- cycle;
    \else
        \pingu@block[thick,rotate around={\@angle-5:(\pingu@name-wing-#1)}]{\@col}(\pingu@name-wing-#1)++(0,-7mm+\pinug@x@cane@raise@right) -- ++(0,\csname pinug@x@cane@length@#1\endcsname) arc(0:180:2.25mm and 2.2mm) arc(180:360:.3mm and .275mm) arc(180:0:1.65mm and 1.65mm) -- ++(0,-\csname pinug@x@cane@length@#1\endcsname) arc(180:360:.3mm and .275mm) -- cycle;
    \fi
}
%     #endregion

%     #region staff
\pingu@create@wing@extra{staff}{%
    staff \@lr/.code                = {\pingu@set@extra{staff\@lr}{true}\pingu@color{staff\@lr}{##1}},
    staff \@lr/.default             = pingu@bronze,
    staff \@lr\space length/.code   = \expandafter\def\csname pingu@staff@\@lr @length\endcsname{##1},
    staff \@lr\space raise/.code    = \expandafter\def\csname pingu@staff@\@lr @raise\endcsname{##1},
    staff \@lr\space code app/.code = \expandafter\appto\csname pingu@staff@\@lr @code\endcsname{##1},
    staff \@lr\space code pre/.code = \expandafter\preto\csname pingu@staff@\@lr @code\endcsname{##1},
    staff \@lr\space code/.code     = \expandafter\def\csname pingu@staff@\@lr @code\endcsname{##1},
    spear \@lr/.style               = {staff \@lr, staff \@lr\space code app={
        \noexpand\pgfonlayer{background}
        \fill[##1,rounded corners=1pt] ([yshift=-1.5mm]\noexpand\pingu@name-staff-\@lr-top) -- ++(1mm,1.5mm) -- ++(-1mm,4mm) -- ++(-1mm,-4mm) -- cycle;
        \noexpand\endpgfonlayer
    }},
    spear \@lr/.default=gray,
    cross \@lr/.style               = {staff \@lr=##1, staff \@lr\space code app={
        \noexpand\pgfonlayer{foreground}
        \fill[##1,rounded corners=1pt] ([yshift=-4.5mm,xshift=-4mm]\noexpand\pingu@name-staff-\@lr-top) rectangle ++(8mm,1mm);
        \noexpand\endpgfonlayer
    }},
    cross \@lr/.default=pingu@bronze
}{staff \@lr\space length=28mm,staff \@lr\space raise=-11mm,staff \@lr\space code={}}
\def\pingu@draw@wi@staff#1{%
    \pingu@setup@wing{staff}{#1}%
\scope[rotate around={\@angle:(\pingu@name-wing-#1)}]
    \pingu@block{\csname pingu@color@staff#1\endcsname}(\pingu@name-wing-#1)++(\@sidesign*-.2mm,\csname pingu@staff@#1@raise\endcsname) -- ++(0,\csname pingu@staff@#1@length\endcsname) arc(180:0:\@sidesign*.4mm and .3mm) coordinate[pos=.5] (\pingu@name-staff-#1-top) -- ++(0,-\csname pingu@staff@#1@length\endcsname) arc(360:180:\@sidesign*.4mm and .3mm) -- cycle;
    \csname pingu@staff@#1@code\endcsname
\endscope
}
%     #endregion
% #endregion

% #region clothes
\def\pingu@@xif@cloth#1#2{\csname if@pingu@x@#1@\endcsname\csname pingu@draw@cloth@#2\endcsname\fi}
\def\pingu@xif@cloth#1#2{\ifcsname if@pingu@x@#1@\endcsname{\pingu@@xif@cloth{#1}{#2}}\fi}
\def\pingu@draw@clothing@behind{%
    \pingu@xif@cloth{secondshirt}{secondshirt@behind}%
    \pingu@xif@cloth{shirt}{shirt@behind}%
    \pingu@xif@cloth{cloak}{cloak@behind}%
}

\def\pingu@draw@clothing@middle{%
    \pingu@xif@cloth{secondshirt}{secondshirt@middle}%
    \pingu@xif@cloth{shirt}{shirt@middle}%
    \pingu@xif@cloth{cloak}{cloak@middle}%
}

\def\pingu@draw@clothing@main{%
    \pingu@xif@cloth{secondshirt}{secondshirt}%
    \pingu@xif@cloth{shirt}{shirt}%
    \pingu@xif@cloth{cloak}{cloak}%
}
% #endregion


% #region bee-lib
\pingu@create@extra{bee}{%
    bee/.code    	  = {\pingu@set@extra{bee}{true}\pingu@color{bee}{#1}},
    bee/.default      = pingu@yellow!60!pingu@white,%
    bee body/.code    = \pingu@color{bee@body}{#1},
    bee eyes/.code    = \pingu@color{bee@eyes}{#1},
    bee wings/.code    = \pingu@color{bee@wings}{#1},
    bee mouth/.code    = \pingu@color{bee@mouth}{#1},
    bee blush/.code    = \pingu@color{bee@blush}{#1},
    bee position/.code args  = {#1:(#2,#3)#4}{\def\pingu@x@bee@angle{#1}\def\pingu@x@bee@xshift{#2}\def\pingu@x@bee@yshift{#3}\def\pingu@x@bee@scale{#4}},
}{bee body=pingu@black!82!gray,bee wings=pingu@blue!8!pingu@white,bee mouth=\pingu@color@bee@body,bee eyes=\pingu@color@bee@body,bee blush=pingu@red!21!\pingu@color@bee,bee position={-27.5:(8mm,15mm){.875}}}

\def\pingu@bee@x@lbody{ (left) to[out=270,in=150] (0,-.725) to[out=30,in=270] (right)}

\def\pingu@draw@ea@bee{%
\scope[very path/.append style={line join=round},rotate around={\pingu@x@bee@angle:(\pingu@name-head)},shift={(\pingu@name-head)},shift={(\pingu@x@bee@xshift,\pingu@x@bee@yshift)},scale=\pingu@x@bee@scale]
% wings
\coordinate (wl) at(20:2.55mm);
\coordinate (wr) at(160:2.55mm);
\pingu@draw[fill=\pingu@color@bee@wings!80!white,rotate around=-32:(wl)]{\pingu@color@bee@body} (wl) ellipse [x radius=6.15mm, y radius=2.75mm];
\pingu@draw[fill=\pingu@color@bee@wings!80!white,rotate around=32:(wr)]{\pingu@color@bee@body} (wr) ellipse [x radius=6.15mm, y radius=2.75mm];
\pingu@draw[fill=\pingu@color@bee@wings,rotate around=19:(wl)]{\pingu@color@bee@body} (wl) ellipse [x radius=6.55mm, y radius=3.125mm];
\pingu@draw[fill=\pingu@color@bee@wings,rotate around=-19:(wr)]{\pingu@color@bee@body} (wr) ellipse [x radius=6.55mm, y radius=3.125mm];
% body
\path (-.375,0) coordinate (left) -- (.375,0) coordinate (right);
% TODO: block draw?
\pingu@block[draw=\pingu@color@bee@body]{\pingu@color@bee@body} \pingu@bee@x@lbody;
\scope\clip\pingu@bee@x@lbody;
\foreach \angl in {30,1} {
\pingu@block{\pingu@color@bee} (-\angl:.75) to[bend left=14] (180+\angl:.75) -- ++(0,-1.75mm)
                     to[bend right=14] (-\angl-14:.75) -- cycle;
}\endscope
% left and right arm
\foreach\m/\s/\k in {right/-2.45/95,left/-.75/80} {
\scope[shift=(\m),yshift=\s,rotate around=\k:(\m),scale=.166]
\pingu@block{\pingu@color@bee@body} (-.965,0) arc(270:90:.29) -- ++(1.233,0) arc (90:-90:.29) -- cycle;
\endscope}
% sting
\pingu@draw[line cap=round,thick]{\pingu@color@bee@body} (0,-.725) -- ++(0,-.035);
% head
\pingu@draw[fill=\pingu@color@bee,rounded corners=1.5pt]{\pingu@color@bee@body} (.85mm,-.55mm) to[bend right=30,looseness=.9] ([xshift=1.45mm,yshift=1.35mm]right) arc(0:180:{(.75cm+2*1.45mm)/2} and {(.75cm+2*1.45mm)/2.05}) to[bend right=30,looseness=.9] (-.85mm,-.55mm) -- cycle;
% eyes [intersect with left and right]
\pingu@block{\pingu@color@bee@eyes} (left|-0,2.265mm)++(.6mm,0) coordinate (el) circle[radius=.6mm];
\coordinate (ell) at ([yshift=-.8mm]el);
\pingu@block[rotate around=3:(ell)]{\pingu@color@bee@blush} ([yshift=-.8mm]el) ellipse[x radius=.412mm, y radius=.165mm];
\pingu@block{\pingu@color@bee@eyes} (right|-0,2.265mm)++(-.6mm,0) coordinate (er) circle[radius=.6mm];
\coordinate (err) at ([yshift=-.8mm]er);
\pingu@block[rotate around=-1:(err)]{\pingu@color@bee@blush} ([yshift=-.8mm]er) ellipse[x radius=.4mm, y radius=.155mm];
% mouth
\scope[yshift=1mm]
\pingu@draw[semithick,line cap=round]{\pingu@color@bee@mouth} (-.6mm,0) arc (180:360:.6mm and .415mm);
% antenna
\pingu@draw[line cap=round]{\pingu@color@bee@body} (123:4mm) to[out=110,in=-41] ++(-1mm,3mm) coordinate (@);
\pingu@block[rotate around=-41:(@)]{\pingu@color@bee@body} ([xshift=-.1mm,yshift=-.185mm]@) ellipse[x radius=.55mm,y radius=.35mm];
\pingu@draw[line cap=round]{\pingu@color@bee@body} (57:4mm) to[out=70,in=180+41] ++(1mm,3mm) coordinate (@);
\pingu@block[rotate around=41:(@)]{\pingu@color@bee@body} ([xshift=-.1mm,yshift=-.2mm]@) ellipse[x radius=.55mm,y radius=.35mm];
\endscope
\endscope
}

\pingu@create@wing@extra{flower}{%
  flower \@lr/.code         = {\pingu@set@extra{flower\@lr}{true}\pingu@color{flower\@lr}{##1}},
  flower \@lr/.default      = pingu@purple!80!pingu@yellow,
  flower \@lr\space center/.code   = \pingu@color{flower@\@lr @center}{##1},
  flower \@lr\space center size/.code = \expandafter\def\csname pingu@flower@\@lr @center@size\endcsname{##1},
  flower \@lr\space stem/.code   = \pingu@color{flower@\@lr @stem}{##1},
  flower \@lr\space stem length/.code = \expandafter\def\csname pingu@flower@\@lr @stem@length\endcsname{##1},
  flower \@lr\space stem width/.code = \expandafter\def\csname pingu@flower@\@lr @stem@width\endcsname{##1},
  flower \@lr\space stem tilt/.code = \expandafter\def\csname pingu@flower@\@lr @stem@tilt\endcsname{##1},
  flower \@lr\space size/.code  = \expandafter\def\csname pingu@flower@\@lr @size\endcsname{##1},
  flower \@lr\space petal count/.code  = \expandafter\def\csname pingu@flower@\@lr @petals\endcsname{##1},
  flower \@lr\space petal width/.code  = \expandafter\def\csname pingu@flower@\@lr @petals@width\endcsname{##1},
  flower \@lr\space petal start angle/.code  = \expandafter\def\csname pingu@flower@\@lr @petals@start@angle\endcsname{##1},
  flower \@lr\space petal peak/.code  = \expandafter\def\csname pingu@flower@\@lr @petals@peak\endcsname{##1},
}{flower \@lr\space size=.3mm, flower \@lr\space center=brown!50!pingu@yellow, flower \@lr\space center size=.65mm, flower \@lr\space stem=green!90!pingu@yellow!70!pingu@black, flower \@lr\space stem length=6mm,flower \@lr\space stem width=.15mm,flower \@lr\space stem tilt=-.5mm, flower \@lr\space petal count=5, flower \@lr\space petal start angle=27, flower \@lr\space petal width=4.5pt, flower \@lr\space petal peak=2}

% #1 wing
\def\pingu@draw@wi@flower#1{%
\pingu@setup@wing{flower}{#1}%
    \pingu@draw[line width=\csname pingu@flower@#1@stem@width\endcsname]{\csname pingu@color@flower@#1@stem\endcsname} ([yshift=-.5mm]\pingu@name-wing-#1) to[out=80,in=-20] ++(\csname pingu@flower@#1@stem@tilt\endcsname,\csname pingu@flower@#1@stem@length\endcsname) coordinate (\pingu@name-flower-center-#1) coordinate (@);
\pgfmathsetmacro\AnglePerPetal{360/\csname pingu@flower@#1@petals\endcsname}
\edef\@currwidth{\csname pingu@flower@#1@petals@width\endcsname}%
\foreach \i in {1,...,\csname pingu@flower@#1@petals\endcsname} {
    \pgfmathsetmacro{\@currrot}{\i*\AnglePerPetal+\csname pingu@flower@#1@petals@start@angle\endcsname}%
    \scope[rotate around={\@currrot:(@)}]
\pingu@block{\@col} (@) to[bend right=4] ++(\@currwidth,.5*\csname pingu@flower@#1@size\endcsname) arc(-9:189:\@currwidth\space and \@currwidth*\csname pingu@flower@#1@petals@peak\endcsname) to[bend right=4] ++(\@currwidth,-.5*\csname pingu@flower@#1@size\endcsname) -- cycle;
\endscope
\pingu@block{\csname pingu@color@flower@#1@center\endcsname} (\pingu@name-flower-center-#1) circle[radius=\csname pingu@flower@#1@center@size\endcsname];
}
}
% #endregion
% #endregion

% #region christmas-lib
\pingu@create@extra{santahat}{%
    santa hat/.code             = \pingu@set@extra{santahat}{true}\pingu@color{santahat}{#1}\pgfqkeys{/pingu}{hair=\@pingu@none},
    santa hat/.default          = pingu@red!87!pingu@black,
    santa hat second/.code      = \pingu@color{santahat@second}{#1},
    santa hat bobble/.code      = \pingu@color{santahat@bobble}{#1}
}{santa hat second={pingu@white!97!\pingu@color@santahat},santa hat bobble={\pingu@color@santahat@second}}
\def\pingu@draw@ea@santahat{%
\path (\pingu@name-head-center)+(152:\pingu@w@half{} and \pingu@head@h@half) coordinate (\pingu@name-santa-right);
\path (\pingu@name-head-center)+(5:\pingu@w@half{} and \pingu@head@h@half) coordinate (\pingu@name-santa-left);
\pingu@layer{middle}[]
\pingu@block{\pingu@color@santahat@second} (\pingu@name-santa-right) to[out=48,in=132] (\pingu@name-santa-left) to[out=30,in=-45,looseness=1.325] ++(0,3.2mm)
to[out=135,in=47,looseness=1.025] coordinate[pos=.915] (\pingu@name-santa-ur) coordinate[pos=.055] (\pingu@name-santa-ul) ([yshift=2mm]\pingu@name-santa-right) to[out=240,in=140] cycle;
\endpingu@layer
\pingu@layer{background}[]
\pingu@block{\pingu@color@santahat} (\pingu@name-santa-ur) arc(145:-25:11.85mm and 14.915mm)
    to[bend right=7] coordinate[pos=.5] (\pingu@name-santa-lc) ++(-1.11mm,.375mm) to[bend right=11] (\pingu@name-santa-ul) to[bend right=15] cycle;
\pingu@block{\pingu@color@santahat@bobble} (\pingu@name-santa-lc) circle[radius=2.625mm];
\endpingu@layer
}
\pingu@create@extra{santabeard}{%
    santa beard/.code             = \pingu@set@extra{santabeard}{true}\pingu@color{santabeard}{#1},
    santa beard/.default          = pingu@white!96!pingu@red!98!pingu@black!92!gray,
    santa beard string/.code      = \pingu@color{santabeard@string}{#1}
}{santa beard string=\pingu@color@body@main!85!pingu@black}
\def\pingu@draw@eb@santabeard{%
% \coordinate (\pingu@name-santa-beard-center) at ([yshift=1.25mm]\pingu@name-belly-center);
\pingu@block{\pingu@color@santabeard@string} ([xshift=-.35mm,yshift=.575mm]\pingu@name-head-back-con-right) to[bend right=28,edge node={foreach[count=\i] \l in {0.03,0.085,...,0.992} {coordinate[pos=\l-rand*.015,yshift=-.85pt] (\pingu@name-santa-beard-\i)}}]
([yshift=.575mm,xshift=.35mm]\pingu@name-head-back-con-left) arc(20:110:.05mm and .15mm) to[bend left=26] ([yshift=.575mm+.15mm,xshift=-.35mm]\pingu@name-head-back-con-right) to[bend right] cycle;
\ifx\pingu@color@santabeard\@pingu@none\else% to allow for random
\xdef\@pmaxY{18}\xdef\@pmaxYI{17}%
\foreach[evaluate=\j as \maxj using int(\@pmaxY-\j),evaluate=\j as \widthred using \j/23pt] \j in {0,...,\@pmaxYI} {
\foreach[remember=\i as \li (initially 0)] \i in {1,...,\maxj} {
    \pgfmathsetmacro\@ptmp{94+rand*2.6}
    \pingu@block{\pingu@color@santabeard!\@ptmp!pingu@black} (\pingu@name-santa-beard-\i) circle [radius=1.85pt-\widthred pt+rand*.35pt];
    \ifnum\li>0 % make middle of last
        \path (\pingu@name-santa-beard-\li) -- (\pingu@name-santa-beard-\i) coordinate[pos=.5,yshift=-1.1pt,xshift=.133pt] (\pingu@name-santa-beard-\li); % smoll shift
    \fi
}}\fi
}

\pingu@create@extra{woolhat}{%
    wool hat/.code             = \pingu@set@extra{woolhat}{true}\pingu@color{woolhat}{#1}\pgfqkeys{/pingu}{hair=\@pingu@none},
    wool hat/.default          = pingu@blue!57!pingu@black,
    wool hat second/.code      = \pingu@color{woolhat@second}{#1},
    wool hat bobble/.code      = \pingu@color{woolhat@bobble}{#1}
}{wool hat second={\pingu@color@woolhat!55!pingu@white},wool hat bobble={\pingu@color@woolhat@second}}
\def\pingu@draw@ea@woolhat{%
\path ([yshift=.5mm,xshift=.165mm]\pingu@name-head-center)+(165:\pingu@w@half{} and \pingu@head@h@half) coordinate (\pingu@name-wool-right);
\path ([yshift=.5mm,xshift=-.045mm]\pingu@name-head-center)+(4:\pingu@w@half{} and \pingu@head@h@half) coordinate (\pingu@name-wool-left);
\pingu@layer{middle}[]
\pingu@block{\pingu@color@woolhat@second} (\pingu@name-wool-right) to[out=37,in=170] (\pingu@name-wool-left) to[out=50,in=-55] ++(0,1.52mm) coordinate (\pingu@name-wool-left-up)
to[out=167,in=38] coordinate[pos=.915] (\pingu@name-wool-ur) coordinate[pos=.055] (\pingu@name-wool-ul) ([yshift=1.5mm]\pingu@name-wool-right) coordinate (\pingu@name-wool-right-up) to[out=240,in=140] cycle;
\endpingu@layer
\path (\pingu@name-wool-left-up) -- (\pingu@name-wool-right-up) coordinate[pos=.455,yshift=9.75mm] (@mid);
\pingu@block{\pingu@color@woolhat} (\pingu@name-wool-right-up) to[out=71,in=203] [rounded corners=2pt] (@mid) to[out=-34,in=100]  [sharp corners]  (\pingu@name-wool-left-up) to[in=37,out=172] cycle;
\pingu@layer{background}[]
\pingu@block{\pingu@color@woolhat@bobble} (@mid) circle [radius=1.25mm];
\endpingu@layer
}


\pingu@create@extra{deerhat}{%
    deer hat/.code             = \pingu@set@extra{deerhat}{true}\pingu@color{deerhat}{#1}\pgfqkeys{/pingu}{hair=\@pingu@none},
    deer hat/.default          = pingu@bronze!57!pingu@black,
    deer hat b/.code           = \pingu@color{deerhat@b}{#1},
    deer hat band/.code        = \pingu@color{deerhat@band}{#1},
}{deer hat band={\pingu@color@deerhat!85!pingu@black},deer hat b=\pingu@color@deerhat}
\pgfmathsetmacro\pingu@deerhat@baseang@l{90-360*(1-\pinguanglehl)}
\pgfmathsetmacro\pingu@deerhat@baseang@r{90-360*(1-\pinguanglehr)}
\def\pingu@deerhat@baseoff{47}
\def\pingu@deerhat@yshift{.15mm}
\def\pingu@deerhat@linewidth{1.32mm}
\def\pingu@deerhat@headoff@l{22}
\def\pingu@deerhat@headoff@r{19}
\def\pingu@draw@ea@deerhat{%
\path ([yshift=-\pingu@deerhat@yshift]\pingu@name-head-left) arc (\pingu@deerhat@baseang@l:\pingu@deerhat@baseang@l-\pingu@deerhat@baseoff:\pingu@w@half{} and \pingu@head@h@half) coordinate[yshift=.05mm] (@target);
\pingu@draw[line width=.7mm]{\pingu@color@deerhat@band} ([xshift=-.8mm]@target) arc (\pingu@deerhat@baseang@l-\pingu@deerhat@baseoff:360+\pingu@deerhat@baseang@r+\pingu@deerhat@baseoff:\pingu@w@half{}-.8mm and \pingu@head@h@half);

\path ([yshift=-\pingu@deerhat@yshift]\pingu@name-head-top) arc (90:90-\pingu@deerhat@headoff@l:\pingu@w@half{} and \pingu@head@h@half) coordinate (@left);
\path ([yshift=-\pingu@deerhat@yshift]\pingu@name-head-top) arc (90:90+\pingu@deerhat@headoff@r:\pingu@w@half{} and \pingu@head@h@half) coordinate (@right);

\pgfonlayer{background}
\pingu@draw[line width=\pingu@deerhat@linewidth,rounded corners=2pt,line cap=round]{\pingu@color@deerhat} (@left) to[bend right=4] ++(.85mm,1.5mm) coordinate (@a) -- ++(3.15mm,.5mm) coordinate (@b) -- ++(4.65mm,4.35mm) coordinate[pos=.5] (@c) to[bend right=10] ++(-.75mm,2.55mm);
\pingu@draw[line width=\pingu@deerhat@linewidth,rounded corners=2pt,line cap=round]{\pingu@color@deerhat} ([xshift=-.135mm,yshift=-.425mm]@a) to[bend left=3] ++(1mm,3.9mm) ([xshift=-.4mm,yshift=-.05mm]@b) to[bend right=2] ++(3.75mm,.1mm) (@c) to[bend left=12] ++(-1mm,3.5mm);
\pingu@draw[line width=\pingu@deerhat@linewidth,rounded corners=2pt,line cap=round]{\pingu@color@deerhat@b} (@right) to[bend left=4] ++(-.85mm,1.5mm) coordinate (@a) -- ++(-3.15mm,.5mm) coordinate (@b) -- ++(-4.65mm,4.35mm) coordinate[pos=.5] (@c) to[bend left=10] ++(.75mm,2.55mm);
\pingu@draw[line width=\pingu@deerhat@linewidth,rounded corners=2pt,line cap=round]{\pingu@color@deerhat@b} ([yshift=-.425mm,xshift=.135mm]@a) to[bend right=3] ++(-1mm,3.9mm) ([xshift=.4mm,yshift=-.05mm]@b) to[bend right=2] ++(-3.75mm,.1mm) (@c) to[bend right=12] ++(1mm,3.5mm);
\endpgfonlayer
}

\pingu@create@wing@extra{present}{%
  present \@lr/.code              = {\pingu@set@extra{present\@lr}{true}\pingu@color{present\@lr}{##1}},
  present \@lr/.default           = pingu@red!50!pingu@black!60!red,
  present \@lr\space width/.code  = \@namedef{pingu@present@\@lr @width}{##1},
  present \@lr\space height/.code = \@namedef{pingu@present@\@lr @height}{##1},
  present \@lr\space ribbon/.code   = \pingu@color{present\@lr @ribbon}{##1},%
  present \@lr\space band/.code   = \pingu@color{present\@lr @band}{##1},%
  present \@lr\space band width/.code  = \@namedef{pingu@present@\@lr @band@width}{##1},
  present \@lr\space xshift/.code = \@namedef{pingu@present@\@lr @xshift}{##1},
  present \@lr\space yshift/.code = \@namedef{pingu@present@\@lr @yshift}{##1},
  present \@lr\space band second height/.code = \@namedef{pingu@present@\@lr @band@second@height}{##1},
  present \@lr\space band second yshift/.code = \@namedef{pingu@present@\@lr @band@second@yshift}{##1},
  present \@lr\space lid/.code   = \pingu@color{present\@lr @lid}{##1},%
  present \@lr\space lid height/.code = \@namedef{pingu@present@\@lr @lid@height}{##1},
  present \@lr\space lid overhang/.code = \@namedef{pingu@present@\@lr @lid@overhang}{##1},
  present \@lr\space lid yshift/.code = \@namedef{pingu@present@\@lr @lid@yshift}{##1},
  present \@lr\space lid band/.code   = \pingu@color{present\@lr @lid@band}{##1},%
}{present \@lr\space band=pingu@green!70!pingu@black!90!pingu@white,present \@lr\space width=7.75mm,present \@lr\space band width=1.75mm,present \@lr\space height=7mm,present \@lr\space yshift=-0.25*(\csname pingu@present@\@lr @height\endcsname),present \@lr\space band second height=\csname pingu@present@\@lr @band@width\endcsname, present \@lr\space band second yshift=0.5*(\csname pingu@present@\@lr @height\endcsname),present \@lr\space xshift=-0.25*(\csname pingu@present@\@lr @width\endcsname),present \@lr\space lid=\csname pingu@color@present\@lr\endcsname!92!pingu@black,present \@lr\space lid height=1.33mm,present \@lr\space lid overhang=.125mm,present \@lr\space lid yshift=0,present \@lr\space lid band=\csname pingu@color@present\@lr @band\endcsname!98!pingu@black,present \@lr\space ribbon=\csname pingu@color@present\@lr @band\endcsname!97!pingu@black}

% TODO: more ribbon color control
% #1 wing
\def\pingu@draw@wi@present#1{%
    \pingu@setup@wing{present}{#1}%
    \scope[rotate around={\@angle:(\pingu@name-wing-#1)}]
        \pingu@block[rounded corners=2pt]{\@col}(\pingu@name-wing-#1)++(-{0.5*(\csname pingu@present@#1@width\endcsname)+\csname pingu@present@#1@xshift\endcsname},{\csname pingu@present@#1@yshift\endcsname}) coordinate (@ll) rectangle ++({\csname pingu@present@#1@width\endcsname},{\csname pingu@present@#1@height\endcsname}) coordinate (@ur);
        % vert band
        \pingu@block{\csname pingu@color@present#1@band\endcsname}(@ll)++({0.5*(\csname pingu@present@#1@width\endcsname)-0.5*(\csname pingu@present@#1@band@width\endcsname)},0) rectangle ++({\csname pingu@present@#1@band@width\endcsname},{\csname pingu@present@#1@height\endcsname});
        % horiz band
        \pingu@block{\csname pingu@color@present#1@band\endcsname}(@ll)++(0,{\csname pingu@present@#1@band@second@yshift\endcsname-0.5*(\csname pingu@present@#1@band@second@height\endcsname)}) rectangle ++({\csname pingu@present@#1@width\endcsname},{\csname pingu@present@#1@band@second@height\endcsname});
        % lid
        \pingu@block[rounded corners=.75pt]{\csname pingu@color@present#1@lid\endcsname} ([yshift={\csname pingu@present@\@lr @lid@yshift\endcsname},xshift=\csname pingu@present@\@lr @lid@overhang\endcsname]@ur) rectangle ++({-\csname pingu@present@#1@width\endcsname-2*(\csname pingu@present@\@lr @lid@overhang\endcsname)},-\csname pingu@present@#1@lid@height\endcsname) coordinate (@ll);
        % upper lid band
        \pingu@block{\csname pingu@color@present#1@lid@band\endcsname}(@ll)++({0.5*(\csname pingu@present@#1@width\endcsname)-0.5*(\csname pingu@present@#1@band@width\endcsname)+\csname pingu@present@\@lr @lid@overhang\endcsname},0) rectangle ++({\csname pingu@present@#1@band@width\endcsname},{\csname pingu@present@#1@lid@height\endcsname});
        % ribbon
        \path (@ll)++({0.5*(\csname pingu@present@#1@width\endcsname)+\csname pingu@present@\@lr @lid@overhang\endcsname+0.2*(\csname pingu@present@#1@band@width\endcsname)},{\csname pingu@present@#1@lid@height\endcsname+.25mm}) coordinate (@top);
        \pingu@block[even odd rule]{\csname pingu@color@present#1@ribbon\endcsname} (@top) to[out=40,in=110] ++(4mm,1mm)
        to[out=-70,in=-20] ++(-4mm,-1.5mm) to[bend left=55] cycle ([xshift=.5mm]@top) to[out=40,in=110] ++(2.55mm,.5mm)
        to[out=-70,in=-20] [rounded corners=1pt] ++(-2.85mm,-.835mm) -- cycle;
        \path (@ll)++({0.5*(\csname pingu@present@#1@width\endcsname)+\csname pingu@present@\@lr @lid@overhang\endcsname-0.2*(\csname pingu@present@#1@band@width\endcsname)},{\csname pingu@present@#1@lid@height\endcsname+.25mm}) coordinate (@top);
        \pingu@block[even odd rule]{\csname pingu@color@present#1@ribbon\endcsname} (@top) to[out=180-40,in=180-110] ++(-3.6mm,1mm)
        to[out=-110,in=-160] ++(3.6mm,-1.5mm) to[bend right=55] cycle ([xshift=-.5mm]@top) to[out=140,in=70] ++(-2.55mm,.5mm)
        to[out=-110,in=-160] [rounded corners=1pt] ++(2.55mm,-.75mm) -- cycle;
        \pingu@block[rounded corners=.5pt]{\csname pingu@color@present#1@ribbon\endcsname} (@top)++(-.3mm,-.65mm) rectangle ++(1.3mm,.65mm); % TODO: make that round? (i.e., bend edges)
    \endscope
}

\pingu@create@wing@extra{snowball}{%
  snowball \@lr/.code         = {\pingu@set@extra{snowball\@lr}{true}\pingu@color{snowball\@lr}{##1}},
  snowball \@lr/.default      = pingu@white!90!pingu@black,
  snowball \@lr\space size/.code  = \expandafter\def\csname pingu@snowball@\@lr @size\endcsname{##1},
  snowball \@lr\space xshift/.code  = \expandafter\def\csname pingu@snowball@\@lr @xshift\endcsname{##1},
  snowball \@lr\space yshift/.code  = \expandafter\def\csname pingu@snowball@\@lr @yshift\endcsname{##1}
}{snowball \@lr\space size=2.33mm, snowball \@lr\space xshift=0pt, snowball \@lr\space yshift=0pt}

% #1 wing
% TODO: shifts
\def\pingu@draw@wi@snowball#1{%
\pingu@setup@wing{snowball}{#1}%
    \pingu@draw[opacity=.35]{\@col} ([xshift=\csname pingu@snowball@#1@xshift\endcsname,yshift=\csname pingu@snowball@#1@yshift\endcsname]\pingu@name-wing-#1) coordinate (@) circle[radius=\csname pingu@snowball@#1@size\endcsname];
    \pingu@block[rotate around={\@angle-1:(\pingu@name-wing-#1)},decoration={random steps,segment length=1pt,amplitude=.075pt},decorate,rounded corners=.35pt,save path=\snowball@outer]{\@col}(@) circle[radius=\csname pingu@snowball@#1@size\endcsname];
}
% #endregion

% #region cloak-lib
\newif\if@pingu@x@cloak@wings
\pingu@create@extra{cloak}{%
    cloak/.code              = \pingu@set@extra{cloak}{true}\pingu@color{cloak}{#1},
    cloak/.default           = pingu@bronze,
    cloak cap/.code          = \pingu@color{cloak@cap}{#1},
    cloak wings color/.code  = \pingu@color{cloak@wings}{#1},
    cloak bottom color/.code = \pingu@color{cloak@bottom}{#1},
    cloak front color/.code  = \pingu@color{cloak@front}{#1},
    cloak padding/.code      = \def\pingu@x@cloak@padding{#1},
    cloak wings/.is if       = @pingu@x@cloak@wings,
    cape/.style              = {/pingu/cloak=#1, /pingu/cloak wings=false,/pingu/cloak front color=\@pingu@none, /pingu/cloak cap=\@pingu@none,/pingu/cloak front color=\@pingu@none},
    cape/.default            = pingu@bronze,
}{cloak padding=1.95mm,cloak bottom color=\pingu@color@cloak!90!black,cloak cap=\pingu@color@cloak!98!pingu@black,cloak front color=\pingu@color@cloak!90!white,cloak wings color=\pingu@color@cloak@front!94!pingu@black,cloak wings=true}
\def\pingu@draw@cloth@cloak@behind{%
    \pingu@block[bottom color=\pingu@color@cloak@bottom,top color=\pingu@color@cloak]{\pingu@color@cloak} (\pingu@name-bottom-center)++(-\pingu@x@cloak@padding-\pingu@w@half,-.5mm) arc (180:0:{\pingu@x@cloak@padding+\pingu@w@half} and \pingu@one) to[bend left=1] (\pingu@name-wings-side-left) arc(0:180:\pingu@w@half{} and .75mm) to[bend left=1] cycle;
}

\def\pingu@draw@cloth@cloak@middle{\pingu@block[rounded corners=.7mm]{\pingu@color@cloak@front}
(\pingu@name-bottom-center)++(-\pingu@x@cloak@padding-\pingu@w@half,-.5mm) arc (180:250:{\pingu@x@cloak@padding+\pingu@w@half} and \pingu@one) to[bend right=6]
([xshift=1.3mm,yshift=.4mm]\pingu@name-wings-side-right) to[bend right=3] ([yshift=.65mm]\pingu@name-wings-side-right);
\pingu@block[rounded corners=.7mm]{\pingu@color@cloak@front}
(\pingu@name-bottom-center)++(\pingu@x@cloak@padding+\pingu@w@half,-.5mm) arc (0:-70:{\pingu@x@cloak@padding+\pingu@w@half} and \pingu@one) to[bend left=6]
([xshift=-1.3mm,yshift=.4mm]\pingu@name-wings-side-left) to[bend left=3] ([yshift=.65mm]\pingu@name-wings-side-left);}

% TODO: if flags to draw parts
\def\pingu@draw@cloth@cloak{%
\scope[rounded corners=.6\p@]
    % wings
    \if@pingu@x@cloak@wings
    \edef\@la{\csname @pingu@wingdown@\@pingu@select@leftwing@ @\endcsname}
    \ifnum\@la>0 % wing is going inverted up or down / \ => left
        \pingu@layer{foreground}[]
        \ifnum\@la>70
            \pingu@block[right color=\pingu@color@cloak@front,left color=\pingu@color@cloak@wings]{\pingu@color@cloak@wings} (\pingu@name-wing-left-start)++(.5mm,-3.5mm) to[bend left=10] (\pingu@name-wing-left-low) to[bend right=13] (\pingu@name-wing-left-up) to[bend left=3] (\pingu@name-wing-left-start-up) to[bend left] ([xshift=.35mm,yshift=1mm]\pingu@name-wing-left-start);
            \else % down
            \pingu@block[right color=\pingu@color@cloak@front,left color=\pingu@color@cloak@wings]{\pingu@color@cloak@wings} (\pingu@name-wing-left-start)++(.5mm,-3.5mm) to[bend left=10] (\pingu@name-wing-left-low) to[bend right=13] (\pingu@name-wing-left-up) to[bend left=3] ([xshift=1mm,yshift=1mm]\pingu@name-wing-left-start-up) to[bend left=4.5] ([xshift=.5mm,yshift=-3.5mm]\pingu@name-wing-left-start);
        \fi
        \endpingu@layer
    \else
        \ifnum\@la<-90% normal up \ / => left side
            \pingu@block[upper right=\pingu@color@cloak@wings,lower right=\pingu@color@cloak@front,lower left=\pingu@color@cloak@front,upper left=\pingu@color@cloak@front]{\pingu@color@cloak@wings} ([xshift=.25mm]\pingu@name-wing-left-start-low) to[bend right=14] (\pingu@name-wing-left-low) to[bend left=8] ([yshift=-.5mm]\pingu@name-wing-left-up) to[bend right=17] ([yshift=1.6mm]\pingu@name-wing-left-start-up) to[bend right=13] ([xshift=-.15mm,yshift=.15mm]\pingu@name-waist-left) -- cycle;
        \else % normal and hugging down => right
            \pingu@block[top color=\pingu@color@cloak@front,middle color=\pingu@color@cloak,bottom color=\pingu@color@cloak@wings]{\pingu@color@cloak@wings} plot[smooth] coordinates {([xshift=-1.38mm]\pingu@name-wings-side-left) (\pingu@name-wing-left-start-low) ([yshift=.65mm,xshift=-.65mm]\pingu@name-wing-left-low) ([yshift=.65mm,xshift=-.65mm]\pingu@name-wing-left-up) ([xshift=.68mm]\pingu@name-wings-side-left) ([xshift=-1.38mm]\pingu@name-wings-side-left)};
        \fi
    \fi
    \edef\@ra{\csname @pingu@wingdown@\@pingu@select@rightwing@ @\endcsname}
    \ifnum\@ra>0 % wing is going inverted up or down => right
        \pingu@layer{foreground}[]
        \ifnum\@ra>70
            \pingu@block[left color=\pingu@color@cloak@front,middle color=\pingu@color@cloak@front,right color=\pingu@color@cloak@wings]{\pingu@color@cloak@wings} (\pingu@name-wing-right-start-low) to[bend right=10] (\pingu@name-wing-right-low) to[bend left=13] (\pingu@name-wing-right-up) to[bend right=3] (\pingu@name-wing-right-start-up) -- ++(-.25mm,0mm) to[bend right=11] cycle;
        \else
            \pingu@block[left color=\pingu@color@cloak@front,middle color=\pingu@color@cloak@front,right color=\pingu@color@cloak@wings]{\pingu@color@cloak@wings}  ([xshift=1mm,yshift=-1mm]\pingu@name-wing-right-start-low) to[bend right=10] (\pingu@name-wing-right-low) to[bend left=13] (\pingu@name-wing-right-up) to[bend right=3] ([xshift=-1mm,yshift=1mm]\pingu@name-wing-right-start-up) to[bend right=4.5] ([xshift=-.5mm,yshift=-3.5mm]\pingu@name-wing-right-start);
        \fi
        \endpingu@layer
    \else
        \ifnum\@ra<-90% normal up => right side
            \pingu@block[upper left=\pingu@color@cloak@wings,lower left=\pingu@color@cloak@front,lower right=\pingu@color@cloak@front,upper right=\pingu@color@cloak@front]{\pingu@color@cloak@wings} ([xshift=.25mm]\pingu@name-wing-right-start-low) to[bend left=14] (\pingu@name-wing-right-low) to[bend right=8] ([yshift=-.5mm]\pingu@name-wing-right-up) to[bend left=17] ([yshift=1.6mm]\pingu@name-wing-right-start-up) to[bend left=13] ([xshift=.15mm,yshift=.15mm]\pingu@name-waist-right) -- cycle;
        \else % normal and hugging down => left
            \pingu@block[top color=\pingu@color@cloak@front,middle color=\pingu@color@cloak@front,bottom color=\pingu@color@cloak@wings]{\pingu@color@cloak@wings} plot[smooth] coordinates {([xshift=1.38mm]\pingu@name-wings-side-right) (\pingu@name-wing-right-start-low) ([yshift=.85mm,xshift=-.35mm]\pingu@name-wing-right-low) ([yshift=.85mm,xshift=.35mm]\pingu@name-wing-right-up) ([xshift=-.68mm]\pingu@name-wings-side-right) ([xshift=1.38mm]\pingu@name-wings-side-right)};
        \fi
    \fi
\fi
    % cape
    \pingu@block[rounded corners=.8mm]{\pingu@color@cloak@cap} ([xshift=.85mm,yshift=-2.75mm]\pingu@name-wing-left-start) to[bend left=4] ([xshift=-.45mm,yshift=-.65mm]\pingu@name-wings-side-left) to[bend right=3]
    (\pingu@name-head)
    to[bend right=3]
    ([xshift=.4mm,yshift=-.65mm]\pingu@name-wings-side-right) [rounded corners=.15mm] to[bend left=3] ([xshift=-.85mm,yshift=-2.75mm]\pingu@name-wing-right-start)
    to[bend left=8]
    ([xshift=-.66mm]\pingu@name-wings-side-right)
    [rounded corners=.15mm]
    to[bend left=32] ++(\pingu@w@half+.66mm,\pingu@w@half+1.2\pingu@one)
    to[bend left=32] ++(\pingu@w@half+.66mm,-\pingu@w@half-1.2\pingu@one)
    to[bend left=8] cycle;
\endscope
}
% #endregion

% #region devil-lib
\pingu@create@extra{devilhorns}{%
    devilhorns/.forward to = /pingu/devil horns,
    devil-horns/.forward to = /pingu/devil horns,
    devil horns/.code    = \pingu@set@extra{devilhorns}{true}\pingu@color{devilhorns}{#1},
    devil horns/.default = pingu@purple,
    devil horns b/.code  = \pingu@color{devilhorns@b}{#1},
    devilhorns b/.forward to = /pingu/devil horns b,
    devil-horns b/.forward to = /pingu/devil horns b
}{devil horns b=\pingu@color@devilhorns}

\pgfmathsetmacro\pingu@devilhorns@baseang@l{90-360*(1-\pinguanglehl)}
\pgfmathsetmacro\pingu@devilhorns@baseang@r{90-360*(1-\pinguanglehr)}
\def\pingu@devilhorns@baseoff{12}
\def\pingu@devilhorns@yshift{.65mm}
\def\pingu@draw@ea@devilhorns{%
    % 90 - 360*.06
    \pingu@block{\pingu@color@devilhorns} ([yshift=-\pingu@devilhorns@yshift]\pingu@name-head-left) arc (\pingu@devilhorns@baseang@l:\pingu@devilhorns@baseang@l-\pingu@devilhorns@baseoff:\pingu@w@half{} and \pingu@head@h@half) coordinate (\pingu@name-devilhorns-left-goal) to[out=32,in=-32,looseness=.9] ++(.3mm,2.65mm) to[bend left=17] ([yshift=-\pingu@devilhorns@yshift]\pingu@name-head-left) -- cycle;
    \pingu@block{\pingu@color@devilhorns} ([yshift=-\pingu@devilhorns@yshift]\pingu@name-head-left) to [bend right=38] (\pingu@name-devilhorns-left-goal) to[bend right=30] ([yshift=-\pingu@devilhorns@yshift]\pingu@name-head-left) -- cycle;
    \pingu@block{\pingu@color@devilhorns@b} ([yshift=-\pingu@devilhorns@yshift]\pingu@name-head-right) arc (\pingu@devilhorns@baseang@r:\pingu@devilhorns@baseang@r+\pingu@devilhorns@baseoff:\pingu@w@half{} and \pingu@head@h@half) coordinate (\pingu@name-devilhorns-right-goal) to[out=148,in=-148,looseness=.9] ++(-.3mm,2.65mm) to[bend right=17] ([yshift=-\pingu@devilhorns@yshift]\pingu@name-head-right) -- cycle;
    \pingu@block{\pingu@color@devilhorns@b} ([yshift=-\pingu@devilhorns@yshift]\pingu@name-head-right) to [bend left=38] (\pingu@name-devilhorns-right-goal) to[bend left=30] ([yshift=-\pingu@devilhorns@yshift]\pingu@name-head-right) -- cycle;
}

% wip hack
\colorlet{pingu@devil@ring}{pingu@black}
\def\pingu@devil@x@opacity{.75}
\pingu@eyes@s{devil}{%
\pingu@layer{foreground}[]
    \pingu@block{pingu@devil@ring} ([yshift=.75mm,xshift=\pingu@eye@shift]\pingu@name-eye-back-left) coordinate (\pingu@name-eye-left) ellipse [x radius=.1535cm, y radius=.1575cm];
    \pingu@block{\pingu@color@eye@second@left} ([yshift=.75mm,xshift=\pingu@eye@shift]\pingu@name-eye-back-left) coordinate (\pingu@name-eye-left) ellipse [x radius=.1325cm, y radius=.1375cm];
    \fill[\pingu@color@eye@left,/pingu/@glow] (\pingu@name-eye-left) circle [radius=1.325mm];
    \pingu@block[fill opacity=\pingu@devil@x@opacity]{\pingu@color@eye@left} (\pingu@name-eye-left)++(0,.36) to[bend right=58] ++(.36,-.36) to[bend right=58] ++(-.36,-.36) to[bend right=58] ++(-.36,.36) to[bend right=58] cycle;
    \fill[/pingu/@glow,fill=\pingu@color@eye@left!20!pingu@yellow!15!pingu@white] (\pingu@name-eye-left)++(0,.10) to[bend right=60] ++(.10,-.10) to[bend right=60] ++(-.10,-.10) to[bend right=60] ++(-.10,.10) to[bend right=60] cycle;
    \fill[\pingu@color@eye@left!20!pingu@yellow!7!pingu@white] (\pingu@name-eye-left) circle [radius=.5pt]; %
    \pingu@block{pingu@white} (\pingu@name-eye-left) circle [radius=.15pt];
\endpingu@layer
}{%
\pingu@layer{foreground}[]
    \pingu@block{pingu@black} ([yshift=.75mm,xshift=-\pingu@eye@shift]\pingu@name-eye-back-right) coordinate (\pingu@name-eye-right) ellipse [x radius=.1535cm, y radius=.1575cm];
    \pingu@block{\pingu@color@eye@second@right} ([yshift=.75mm,xshift=-\pingu@eye@shift]\pingu@name-eye-back-right) coordinate (\pingu@name-eye-right) ellipse [x radius=.1325cm, y radius=.1375cm];
    \fill[\pingu@color@eye@right,/pingu/@glow] (\pingu@name-eye-right) circle [radius=1.325mm];
    \pingu@block[fill opacity=.75]{\pingu@color@eye@right} (\pingu@name-eye-right)++(0,.36) to[bend right=58] ++(.36,-.36) to[bend right=58] ++(-.36,-.36) to[bend right=58] ++(-.36,.36) to[bend right=58] cycle;
    \fill[/pingu/@glow,fill=\pingu@color@eye@right!20!pingu@yellow!15!pingu@white] (\pingu@name-eye-right)++(0,.10) to[bend right=60] ++(.10,-.10) to[bend right=60] ++(-.10,-.10) to[bend right=60] ++(-.10,.10) to[bend right=60] cycle;
    \fill[\pingu@color@eye@right!20!pingu@yellow!7!pingu@white] (\pingu@name-eye-right) circle [radius=.5pt]; %
    \pingu@block{pingu@white} (\pingu@name-eye-right) circle [radius=.15pt];
\endpingu@layer
}[pingu@purple]

\pingu@create@wing@extra{devilfork}{%
    devil fork \@lr/.code         = {\pingu@set@extra{devilfork\@lr}{true}\pingu@color{devilfork\@lr}{##1}},
    devil fork \@lr/.default      = pingu@red,
    devil fork \@lr\space second/.code= \pingu@color{devilfork\@lr @second}{##1},
    devil fork \@lr\space length/.code =\expandafter\def\csname pingu@devilfork@\@lr @length\endcsname{##1}
}{devil fork \@lr\space length=20mm,devil fork \@lr\space second=pingu@bronze!10!black}
\def\pingu@draw@wi@devilfork#1{%
    \pingu@setup@wing{devilfork}{#1}%
\scope[rotate around={\@angle:(\pingu@name-wing-#1)}]
    \pingu@block{\csname pingu@color@devilfork#1@second\endcsname} (\pingu@name-wing-#1)++(\@sidesign*-.2mm,-7mm) -- ++(0,\csname pingu@devilfork@#1@length\endcsname) arc(180:0:\@sidesign*.4mm and .3mm) coordinate[pos=.5] (\pingu@name-devilfork-#1-top) -- ++(0,-\csname pingu@devilfork@#1@length\endcsname) arc(360:180:\@sidesign*.4mm and .3mm) -- cycle;
    \pingu@block{\@col} ([yshift=4mm]\pingu@name-devilfork-#1-top) to[out=240,in=90] ++(-.65mm,-4mm) to[out=180,in=-60] ++(-1mm,5.5mm) to[out=240,in=90] ++(-.65mm,-5.9mm) to[bend right] ++(4.4mm,0) to[out=90,in=-60] ++(-.65mm,5.9mm) to[out=240,in=0] ++(-1mm,-5.5mm) to[out=90,in=-60] cycle;
\endscope
}

\pingu@create@extra{devilwings}{%
    devilwings/.forward to    = /pingu/devil wings,
    devil-wings/.forward to   = /pingu/devil wings,
    devil wings/.code         = \pingu@set@extra{devilwings}{true}\pingu@color{devilwings}{#1},
    devil wings/.default      = pingu@black,
    devil wings b/.code       = \pingu@color{devilwings@b}{#1},
    devilwings b/.forward to  = /pingu/devil wings b,
    devil-wings b/.forward to = /pingu/devil wings b
}{devil wings b=\pingu@color@devilwings}

% taken over and adapted from the old penguins
% lower wing based on https://tex.stackexchange.com/a/464828
\def\@pingu@devilwings@lower@wing@code{(0,0.2) -- (0,1.4) -- (-2,1.4) .. controls (-4,0.8) .. (-4.3,0.2) .. controls (-4.48,0.08) .. (-4.5,-0.15) .. controls (-4.9,-0.5) and (-4.9,-0.7) .. (-4.7,-0.9) .. controls (-4.7,-1) .. (-4.6,-1.1) .. controls (-4.9,-1.8) .. (-4.2,-2) -- (-4,-2.4) .. controls (-4.1,-3) .. (-3.6,-3.1) -- (-3.25,-3.7) .. controls (-3.5,-4.5) .. (-4.1,-5.4) .. controls (-4.2,-5.9) and (-3.6,-5.9) .. (-3.5,-5.4) .. controls (-3.55,-5.1) and (-3.4,-4.8) .. (-3,-4.1) -- (-2.6,-4.1) .. controls (-2.35,-4.35) .. (-2,-4.2) .. controls (-1.75,-4.6) and (-1.25,-4.6) .. (-1.25,-3.90) .. controls (-0.9,-4) .. (-0.6,-2.8) -- (-0.3,-1) -- (0,0.2)}

\def\pingu@draw@eb@devilwings{%
\pgfonlayer{background}
    \scope[scale=0.225,shift={(\pingu@name-head-back-con-right)}]
       \pingu@block[thick,rounded corners=.75mm]{\pingu@color@devilwings} \@pingu@devilwings@lower@wing@code;
       \pingu@block[thick]{\pingu@color@devilwings} (0,1) -- (0,2.2) [rounded corners=5mm] parabola[bend at end] (-6,6) -- (-5,1) -- (0,1);
    \endscope
    \scope[scale=0.225,shift={(\pingu@name-head-back-con-left)},xscale=-1]
       \pingu@block[thick,rounded corners=0.75mm]{\pingu@color@devilwings@b} \@pingu@devilwings@lower@wing@code;
       \pingu@block[thick]{\pingu@color@devilwings@b} (0,1) -- (0,2.2) [rounded corners=5mm] parabola[bend at end] (-6,6) -- (-5,1) -- (0,1);
    \endscope
\endpgfonlayer
}
% #endregion

% #region emotions-lib
\pingu@eyes@s{sad}{%
    \path (\pingu@name-eye-back-left)++(\pingu@eye@shift,.75mm) coordinate (\pingu@name-eye-left);
    \pingu@block{\pingu@color@eye@left} (\pingu@name-eye-left)++(15:.1225cm and .1275cm) arc (15:-245:.1225cm and .1275cm) to[out=-45,in=175] cycle;
}{%
    \path (\pingu@name-eye-back-right)++(-\pingu@eye@shift,.75mm) coordinate (\pingu@name-eye-right);
    \pingu@block{\pingu@color@eye@right} (\pingu@name-eye-right)++(165:.1225cm and .1275cm) arc (165:425:.1225cm and .1275cm) to[out=225,in=5] cycle;
}

\pingu@eyes@s{angry}{%
    \path (\pingu@name-eye-back-left)++(\pingu@eye@shift,.75mm) coordinate (\pingu@name-eye-left);
    \pingu@block{\pingu@color@eye@left} (\pingu@name-eye-left) ellipse [x radius=.1225cm, y radius=.1275cm];
    \pingu@block{\pingu@color@body@front} (\pingu@name-eye-left) ++(120:.1225cm and .1275cm) ellipse [x radius=1.5mm,y radius=.5mm];
}{%
    \path (\pingu@name-eye-back-right)++(-\pingu@eye@shift,.75mm) coordinate (\pingu@name-eye-right);
    \pingu@block{\pingu@color@eye@right} (\pingu@name-eye-right) ellipse [x radius=.1225cm, y radius=.1275cm];
    \pingu@block{\pingu@color@body@front} (\pingu@name-eye-right) ++(60:.1225cm and .1275cm) ellipse [x radius=1.5mm,y radius=.5mm];
}

\pingu@bill@s{angry}{%
\pingu@block{\pingu@color@bill} (\pingu@name-bill)++(-.19cm,0)
    to[out=-90,in=170] ++(1.9mm,-2.25mm) coordinate (\pingu@name-bill-bottom)
    to[out=10,in=-90] ++(1.9mm,2.25mm)
    to[bend right=.25cm] cycle;
}

\pingu@create@extra{blush}{%
    blush/.code              = \pingu@set@extra{blush}{true}\pingu@color{blush}{#1},
    blush/.default           = pingu@red,
    blush second/.code       = \pingu@color{blush@second}{#1},
    blush opacity/.code      = \def\pingu@x@blush@opacity{#1},
}{blush opacity=.35,blush second=\pingu@color@blush}
\def\pingu@draw@eb@blush{%
    \pingu@block[/pingu/@glow,opacity=\pingu@x@blush@opacity]{\pingu@color@blush} ([yshift=-2.7mm,xshift=-1.85mm]\pingu@name-eye-right) ellipse [x radius=2.66mm,y radius=2.25mm];
    \pingu@block[/pingu/@glow,opacity=\pingu@x@blush@opacity]{\pingu@color@blush@second} ([yshift=-2.7mm,xshift=1.85mm]\pingu@name-eye-left) ellipse [x radius=2.66mm,y radius=2.25mm];
}

\pingu@eyes@s{hearts}{%
    \path (\pingu@name-eye-back-left)++(\pingu@eye@shift,.75mm) coordinate (\pingu@name-eye-left);
    \pingu@block[rounded corners=0pt]{\pingu@color@eye@left} ([yshift=.3mm]\pingu@name-eye-left) arc(0:180:.065cm)
    to[out=270,in=110] ++(.13cm,-.2cm) to[out=70,in=270] ++(.13cm,.2cm) arc (0:180:.065cm) -- cycle;
}{%
    \path (\pingu@name-eye-back-right)++(-\pingu@eye@shift,.75mm) coordinate (\pingu@name-eye-right);
    \pingu@block{\pingu@color@eye@right} ([yshift=.3mm]\pingu@name-eye-right) arc(0:180:.065cm)
    to[out=270,in=110] ++(.13cm,-.2cm) to[out=70,in=270] ++(.13cm,.2cm) arc (0:180:.065cm) -- cycle;
}

\pingu@eyes@s{critical}{%
    \pingu@block{\pingu@color@eye@left} ([yshift=.75mm,xshift=\pingu@eye@shift]\pingu@name-eye-back-left) coordinate (\pingu@name-eye-left) ellipse [x radius=1.13mm, y radius=.145cm];
    \pingu@draw[thick]{\pingu@color@eye@left} (\pingu@name-eye-left)++(45:1.35mm and 1.85mm) arc(45:135:1.35mm and 1.85mm);
}{%
    \pingu@block{\pingu@color@eye@right} ([yshift=.75mm,xshift=-\pingu@eye@shift]\pingu@name-eye-back-right) coordinate(\pingu@name-eye-right) ellipse [x radius=1.13mm, y radius=.145cm];
    \pingu@draw[thick]{\pingu@color@eye@right} (\pingu@name-eye-right)++(45:1.35mm and 1.85mm) arc(45:135:1.35mm and 1.85mm);
}
% #endregion

% #region flags-lib
\pingu@create@wing@extra{flag}{%
    flag \@lr/.code         = {\pingu@set@extra{flag\@lr}{true}\pingu@color{flag\@lr}{##1}},
    flag \@lr/.default      = pingu@purple,
    flag \@lr\space pole/.code    = \pingu@color{flag\@lr @pole}{##1},
    flag \@lr\space code/.code    = \expandafter\def\csname pingu@flag@\@lr @code\endcsname{##1},
    flag \@lr\space bobble/.code  = {\pingu@color{flag\@lr @bobble}{##1}},
    pride flag \@lr/.style  = {%
        /pingu/flag \@lr\space code = {%
            \noexpand\node[/pingu/@flag@first,/pingu/@flag={{rgb:yellow,1;red,5;magenta,2;black,1}}{1.9mm}] (a) at (0,0) {};
            \noexpand\node[below,/pingu/@flag={{rgb:yellow,5;red,5;green,1;white,1}}{1.9mm}] (b) at (a.south) {};
            \noexpand\node[below,/pingu/@flag={yellow}{1.9mm}] (c) at (b.south) {};
            \noexpand\node[below,/pingu/@flag={{rgb:blue,1;cyan,1;green,4;black,2}}{1.9mm}] (d) at (c.south) {};
            \noexpand\node[below,/pingu/@flag={{rgb:magenta,3;blue,5;cyan,4;black,3}}{1.9mm}] (e) at (d.south) {};
            \noexpand\node[below,/pingu/@flag={{rgb:red,2;magenta,2;blue,5}}{1.9mm}] (f) at (e.south) {};
        }, /pingu/flag \@lr, /pingu/flag \@lr\space pole={##1}%
    },%
    @flag/.style 2 args={tape bend height=.5mm,shape=tape,minimum height=##2, minimum width=15mm,outer sep=\z@,inner sep=\z@,fill=##1,draw=##1,rotate=\noexpand\@angle},
    pride flag \@lr/.default = pingu@bronze,%
    german flag \@lr/.style  = {%
    /pingu/flag \@lr\space code = {%
            \noexpand\node[/pingu/@flag@first,/pingu/@flag={black}{3.33mm}] (a) at (0,0) {};
            \noexpand\node[below,/pingu/@flag={red}{3.33mm}] (b) at (a.south) {};
            \noexpand\node[below,/pingu/@flag={yellow}{3.33mm}] (c) at (b.south) {};
        }, /pingu/flag \@lr, /pingu/flag \@lr\space pole={##1}%
    },%
    german flag \@lr/.default = pingu@bronze%
}{flag \@lr\space bobble=pingu@bronze, flag \@lr\space pole=pingu@bronze, flag \@lr\space code = {%
    \noexpand\node[/pingu/@flag@first,/pingu/@flag={\noexpand\@col}{9.75mm}] (a) at (0,0) {};
}}
\def\pingu@draw@wi@flag#1{%
    \pingu@setup@wing{flag}{#1}%
\scope[rotate around={\@angle:(\pingu@name-wing-#1)}]
    % NOTE: not full foreground if placed under the wing
    \pingu@layer{foreground}[shift={(\pingu@name-wing-#1)},shift={(\@sidesign*.15mm,17.5mm-3.5\p@)}]
        \if@pingu@wing@item@side@left@\pgfqkeys{/pingu}{@flag@first/.style={below right}}\else\pgfqkeys{/pingu}{@flag@first/.style={below left}}\fi
        \csname pingu@flag@#1@code\endcsname
        \pingu@block[thick]{\csname pingu@color@flag#1@pole\endcsname}(\pingu@name-wing-#1)++(\@sidesign*-.15mm,3mm) -- ++(0,13.65mm) -| ++(\@sidesign*.6mm,-13.65mm) -- cycle;
    \endpingu@layer
    \pingu@block[thick]{\csname pingu@color@flag#1@pole\endcsname}(\pingu@name-wing-#1)++(\@sidesign*-.15mm,-3mm) -- ++(0,20mm) arc(180:0:\@sidesign*.3mm and .375mm) -- ++(0,-20mm) arc(360:180:\@sidesign*.3mm and .375mm) -- cycle;
    \pingu@block{\csname pingu@color@flag#1@bobble\endcsname} (\pingu@name-wing-#1)++(\@sidesign*.15mm,17.5mm) circle [radius=2.15\p@];
\endscope
}
% #endregion

% #region formal-lib
\pingu@create@extra{tie}{%
    tie/.code         = \pingu@set@extra{tie}{true}\pingu@color{tie}{#1},
    tie/.default      = pingu@green,
    tie knot/.code    = \pingu@color{tie@knot}{#1},
    tie length/.code  = \def\pingu@x@tie@length{#1},
    tie offset/.code  = \def\pingu@x@tie@offset{#1},
    tie width/.code   = \def\pingu@x@tie@width{#1},
    tie pattern/.code = \def\pingu@x@tie@pattern{#1},
    tie dots/.style   = {%
        tie pattern={%
            \pingu@block[postaction={pattern={Dots[angle=40,distance=1.5pt,radius=.35pt]},pattern color=#1}]{\pingu@color@tie} \pingupathxtie;
            \pingu@block[postaction={pattern={Dots[angle=-30,distance=1.45pt,radius=.35pt@]},pattern color=#1}]{\pingu@color@tie@knot} \pingupathxtieknot;
        }%
    },
    tie dots/.default={pingu@white}%
}{% defaults
    tie length=.625\pingu@side@h@half,  tie offset=.399cm,%
    tie knot=\pingu@color@tie!92!black, tie width=.21cm,%
    tie pattern={%
        \pingu@block{\pingu@color@tie} \pingupathxtie;
        \pingu@block{\pingu@color@tie@knot} \pingupathxtieknot;
    }%
}
\def\pingupathxtie{[rounded corners=.15mm] (\pingu@name-tie-start)++(-.4mm,-.25mm) -- ++(-\pingu@x@tie@width/2, -\pingu@x@tie@length+.125cm) -- ++(\pingu@x@tie@width/2+.4mm,-.125cm) -- ++(\pingu@x@tie@width/2+.4mm,.125cm) -- +(-\pingu@x@tie@width/2, \pingu@x@tie@length-.125cm) -- cycle}
\def\pingupathxtieknot{[rounded corners=.25mm] (\pingu@name-tie-start)++(-.095cm-.02*\pingu@x@tie@width,\z@) -- ++(.3mm,-.15cm-.01*\pingu@x@tie@width) -- ++(.13cm+.04*\pingu@x@tie@width,\z@) -- ++(.3mm,.15cm+.01*\pingu@x@tie@width) -- cycle}
\def\pingu@draw@eb@tie{%
    \path (\pingu@name-bill)++(0,-\pingu@x@tie@offset) coordinate(\pingu@name-tie-start);
    \pingu@x@tie@pattern
}

\pingu@create@extra{bowtie}{%
    bowtie/.forward to         = /pingu/bow tie,
    bow-tie/.forward to        = /pingu/bow tie,
    bow tie/.code              = \pingu@set@extra{bowtie}{true}\pingu@color{bowtie}{#1},
    bow tie/.default           = pingu@blue,
    bow tie b/.code            = \pingu@color{bowtie@b}{#1},
    bowtie b/.forward to         = /pingu/bow tie b,
    bow-tie b/.forward to        = /pingu/bow tie b,
    bowtie offset/.forward to  = /pingu/bow tie offset,
    bow-tie offset/.forward to = /pingu/bow tie offset,
    bow tie offset/.code       = \def\pingu@x@bowtie@offset{#1},
    bowtie knot/.forward to    = /pingu/bow tie knot,
    bow-tie knot/.forward to   = /pingu/bow tie knot,
    bow tie knot/.code         = \pingu@color{bowtie@knot}{#1},
}{% defaults
    bow tie knot=\pingu@color@bowtie!92!black,bow tie offset=.315cm,%
    bow tie b=\pingu@color@bowtie%
}

\def\pingupathxbowtieknot{[rounded corners=.25mm] (\pingu@name-bow-tie-start)++(-.0625cm,-.35mm) to[bend right=10] ++(.125cm,0) -- ++(0,-.13cm) to[bend right=10] ++(-.125cm, 0) -- cycle}
\def\pingupathxbowtieleft{[rounded corners=.25mm]  (\pingu@name-bow-tie-start)++(-.15mm,-.06cm) to[out=155,in=-5] ++(-.25cm,.065cm) to[bend right=15] ++(0,-.21cm) to[in=-155,out=5] ++(.25cm,.065cm) -- cycle}
\def\pingupathxbowtieright{[rounded corners=.25mm]  (\pingu@name-bow-tie-start)++(.15mm,-.06cm) to[out=25,in=-175] ++(.25cm,.065cm) to[bend left=15] ++(0,-.21cm) to[in=-25,out=175] ++(-.25cm,.065cm) -- cycle}
\def\pingu@draw@eb@bowtie{%
    \path (\pingu@name-bill)++(0,-\pingu@x@bowtie@offset) coordinate(\pingu@name-bow-tie-start);
    \pingu@block{\pingu@color@bowtie} \pingupathxbowtieleft;
    \pingu@block{\pingu@color@bowtie@b} \pingupathxbowtieright;
    \pingu@block{\pingu@color@bowtie@knot} \pingupathxbowtieknot;
}

\newif\if@pingu@x@pants@bands
\pingu@create@extra{pants}{%
    pants/.code    	               = \pingu@set@extra{pants}{true}\pingu@color{pants}{#1},
    pants/.default                 = pingu@red,
    pants bands/.is if             = @pingu@x@pants@bands,
    pants button left/.code        = \pingu@color{pants@button@left}{#1},
    pants button right/.code       = \pingu@color{pants@button@right}{#1},
    pants buttons/.style           = {/pingu/pants button left={#1}, /pingu/pants button right={#1}},
    pants button left shade/.code  = \pingu@color{pants@button@left@shade}{#1},
    pants button right shade/.code = \pingu@color{pants@button@right@shade}{#1},
    pants buttons shade/.style     = {/pingu/pants button left shade={#1}, /pingu/pants button right shade={#1}},
    pants without buttons/.forward to=/pingu/pants no buttons,
    pants no buttons/.style        = {/pingu/pants buttons=\@pingu@none, /pingu/pants buttons shade=\@pingu@none},
    pants extra height/.code = \def\pingu@x@pants@extra@height{#1},
}{pants extra height=1.5mm,pants buttons=pingu@black,pants button left shade=\pingu@color@pants@button@left!70!white,pants button right shade=\pingu@color@pants@button@right!70!white}

\def\pingu@draw@eb@pants{%
\pingu@block[rounded corners=\p@]{\pingu@color@pants} ([xshift=.85mm,yshift=\pingu@x@pants@extra@height]\pingu@name-waist-right) coordinate(@tmp) to[bend right=6] ([xshift=-.85mm,yshift=\pingu@x@pants@extra@height]\pingu@name-waist-left) coordinate(@tmpb) -- ++(0,-\pingu@x@pants@extra@height) arc(180:270:.85mm and 2.25mm) to[bend left=\pingu@bend] (\pingu@name-bottom-center-|\pingu@name-waist-left) to[bend left=15] ([yshift=-.15mm]\pingu@name-bottom-center) to[bend left=15] (\pingu@name-bottom-center-|\pingu@name-waist-right) to[bend left=6] ([yshift=-2.5mm]\pingu@name-waist-right) arc (-90:0:.85mm and 2.25mm) -- cycle;
\if@pingu@x@pants@bands
\pingu@layer{middle}[]
% draw stripes
\scope
\clip \pingu@path@lowerpingu;
\pingu@block{\pingu@color@pants} (@tmp)++(.55mm,-\pingu@one) to[bend right=3] ([yshift=1.65mm]\pingu@name-wings-side-right) -- ++(-.25mm,-.25mm) to[bend left=3] ([yshift=-\pingu@one]@tmp) -- cycle;
\pingu@block{\pingu@color@pants} (@tmpb)++(-.55mm,-\pingu@one) to[bend left=3] ([yshift=1.65mm]\pingu@name-wings-side-left) -- ++(.25mm,-.25mm) to[bend right=3] ([yshift=-\pingu@one]@tmpb) -- cycle;
\endscope
\fi
\pingu@block{\pingu@color@pants@button@right}(@tmp)++(.25mm,-.25mm)circle[radius=.7mm];
\pingu@block{\pingu@color@pants@button@left}(@tmpb)++(-.25mm,-.25mm)circle[radius=.7mm];
\pingu@block[even odd rule]{\pingu@color@pants@button@right@shade}(@tmp)++(.25mm,-.25mm)circle[radius=.7mm] circle[radius=.615mm];
\pingu@block[even odd rule]{\pingu@color@pants@button@left@shade}(@tmpb)++(-.25mm,-.25mm)circle[radius=.7mm] circle[radius=.615mm];
\@for\i:={0,90,180,270}\do{
    \pingu@block{\pingu@color@pants@button@right@shade} (@tmp)++(.25mm,-.25mm)++(\i:.
    35mm) circle[radius=.1mm];
    \pingu@block{\pingu@color@pants@button@left@shade} (@tmpb)++(-.25mm,-.25mm)++(\i:.35mm) circle[radius=.1mm];
}%
\if@pingu@x@pants@bands \endpingu@layer \fi
}


\pingu@create@extra{belt}{%
    belt/.code        = \pingu@set@extra{belt}{true}\pingu@color{belt}{#1},
    belt/.default     = pingu@bronze!80!black,
    belt knot color/.code  = \pingu@color{belt@knot}{#1}
}{% defaults
    belt knot color  = pingu@silver
}

\def\pingu@draw@eb@belt@wh{1.25mm}
\def\pingu@draw@eb@belt{%
    \path ([yshift=-1.66mm/2]\pingu@name-waist-left) -- ([yshift=-1.66mm/2]\pingu@name-waist-right) coordinate[pos=.5] (\pingu@name @belt@center);
    \pingu@block[rounded corners=.5pt]{\pingu@color@belt} (\pingu@name-waist-left) coordinate (@) to[bend left=5] (\pingu@name-waist-right) -- ++(0,-1.66mm) to[bend right=5] ([yshift=-1.66mm]@) -- cycle;
    \pingu@block[rounded corners=1.5pt]{\pingu@color@belt@knot} ([xshift=-1mm,yshift=-.7mm-1.66mm/2]\pingu@name @belt@center) rectangle ++(2mm,2mm);
}
% #endregion

% #region fun-lib
\pingu@create@extra{cakehat}{%
  cake-hat/.code          = \pingu@set@extra{cakehat}{true}\pingu@color{cakehat}{#1},
  cake-hat/.default       = pingu@white!92!\pingu@color@cakehat@top,
  cake-hat top/.code      = \pingu@color{cakehat@top}{#1},
  cake-hat shade/.code    = \pingu@color{cakehat@shade}{#1},
  cake-hat candle/.code   = \pingu@color{cakehat@candle}{#1},
  cake-hat candle fire/.code   = \pingu@color{cakehat@candle@fire}{#1},
  cake-hat candle fire 2/.code   = \pingu@color{cakehat@candle@fire@b}{#1},
  cake-hat candle fire 3/.code   = \pingu@color{cakehat@candle@fire@c}{#1},
  cake-hat candle wick/.code   = \pingu@color{cakehat@candle@wick}{#1},
  cake-hat candle shade/.code   = \pingu@color{cakehat@candle@shade}{#1},
  cake-hat candle back/.code = \pingu@color{cakehat@candle@back}{#1},
  cake-hat outline/.code  = \pingu@color{cakehat@outline}{#1},
  cake-hat outline width/.code  = \def\pingu@x@cakehat@outline@w{#1},
  cake-hat position/.code args  = {#1:(#2,#3)#4}{\def\pingu@x@cakehat@angle{#1}\def\pingu@x@cakehat@xshift{#2}\def\pingu@x@cakehat@yshift{#3}\def\pingu@x@cakehat@scale{#4}}
}{cake-hat position={-9:(1mm,0mm)1},cake-hat outline=pingu@black!80!\pingu@color@cakehat,cake-hat outline width=.25pt,cake-hat top=pingu@purple,cake-hat candle=pingu@purple!60!pingu@black,cake-hat candle back=\pingu@color@cakehat@candle!85!black,cake-hat candle wick=pingu@black,cake-hat candle fire=pingu@red,cake-hat candle fire 2=\pingu@color@cakehat@candle@fire!50!yellow,cake-hat candle fire 3=\pingu@color@cakehat@candle@fire@b!50!white,cake-hat shade=gray,cake-hat candle shade=gray!80!\pingu@color@cakehat@candle@back}

\def\pingu@p@cake@outline{(-6.25mm,-.25cm) to[bend left=2] (\pingu@name-cake-tl) arc (180:0:1.375cm/2+.01mm and 1.41mm) to[bend left=2] ++(0,-3.125mm*.97) to[bend left=20] (-6mm,-.26cm) -- cycle}
\def\pingu@draw@ea@cakehat{%
\scope[rotate around={\pingu@x@cakehat@angle:(\pingu@name-head-top)},%
shift={(\pingu@name-head-top)},
shift={(\pingu@x@cakehat@xshift,\pingu@x@cakehat@yshift)},
scale=\pingu@x@cakehat@scale]
  \pingu@block{\pingu@color@cakehat} [rounded corners=.2mm](-6.25mm,-.25cm) to[bend left=2] coordinate[pos=.97] (\pingu@name-cake-tl) ++(0,3.125mm) to[bend right=20]
    ++(1.375cm,0) to[bend left=2] coordinate[pos=.03] (\pingu@name-cake-tr) ++(0,-3.125mm) to[bend left=20] (-6mm,-.26cm) -- cycle;
  \pingu@block[fill opacity=.1]{\pingu@color@cakehat@shade} [rounded corners=.2mm](-6.25mm,-.25cm) to[bend right=20]
    ++(1.375cm,0) to[bend right=2] ++(0,3.125mm) [sharp corners] to[bend left=20] (-6.25mm,-.225cm) [rounded corners=.2mm] -- cycle;
  \path (\pingu@name-cake-tl) -- (\pingu@name-cake-tr) coordinate[pos=.5] (\pingu@name-cake-tc);
  % cake side
  \scope
  \clip\pingu@p@cake@outline;
  \path (\pingu@name-cake-tl) arc (180:360:1.375cm/2+.01mm and 1.41mm) foreach[count=\i] \a in {0,.19,.295,.375,.485,.625,.72,.85,1} {coordinate[pos=\a] (\pingu@name-cake-\i)};
  \pingu@block{\pingu@color@cakehat@top} (\pingu@name-cake-1) ellipse [x radius=.255mm,y radius=2mm];
  \pingu@block{\pingu@color@cakehat@top} (\pingu@name-cake-9) ellipse [x radius=.265mm,y radius=1.45mm];
  \foreach \i in {2,...,9} {
    \pgfmathsetmacro\@tmprand{rand}
    \pingu@draw[opacity=.5]{gray} (\pingu@name-cake-\i)++(-.02mm,0) to[bend left=1] ++(+.145mm,{-1.075mm-(\@tmprand+.15)*.5125mm}) arc(370:300:.145mm);
    \pingu@block{\pingu@color@cakehat@top} (\pingu@name-cake-\i)++(0,.1mm) -- ++(-.125mm,0) to[bend left=1] ++(0,{-1.2mm-(\@tmprand+.15)*.5125mm}) arc(170:370:.145mm) to[bend right=1] cycle;
  }
  \foreach \i in {2,...,9} {
      \ifnum\i=2\relax
        \pingu@block{\pingu@color@cakehat@top} (\pingu@name-cake-\the\numexpr\i-1\relax)++(-.05mm,-.5mm) to[bend left=8] ([xshift=-.05mm,yshift=-.25mm]\pingu@name-cake-\i) -- ++(0,.33mm) to[bend right=30] (\pingu@name-cake-\the\numexpr\i-1\relax);
      \else\ifnum\i=9\relax
        \pingu@block{\pingu@color@cakehat@top} (\pingu@name-cake-\the\numexpr\i-1\relax)++(-.05mm,-.25mm) to[bend left=8] ([xshift=-.05mm,yshift=-.5mm]\pingu@name-cake-\i) -- ++(0,.33mm) to[bend right=30] (\pingu@name-cake-\the\numexpr\i-1\relax);
      \else
      \pingu@block{\pingu@color@cakehat@top} (\pingu@name-cake-\the\numexpr\i-1\relax)++(-.05mm,-.25mm) to[bend left=9.5+2*rand] ([xshift=-.05mm,yshift=-.25mm]\pingu@name-cake-\i) -- ++(0,.33mm) to[bend right=30] (\pingu@name-cake-\the\numexpr\i-1\relax);
      \fi\fi
  }
  \endscope
  \pingu@block{\pingu@color@cakehat@top} (\pingu@name-cake-tc) ellipse [x radius=1.375cm/2+.01mm, y radius=1.41mm];
  % outline
  \pingu@draw[line width=\pingu@x@cakehat@outline@w,rounded corners=.075mm]{\pingu@color@cakehat@outline} \pingu@p@cake@outline;
% % 3d sides
%   \pingu@block[rounded corners=.04mm]{\pingu@color@cakehat@top} ([xshift=.1mm,yshift=.125mm]\pingu@name-cake-tl) to[out=246,in=97] ++(-.11mm,-2.125mm) -- ++(.04mm,0) to[bend right=12] (\pingu@name-cake-ttl) -- cycle;
%   \pingu@block[rounded corners=.09mm]{green} ([xshift=-.1mm]\pingu@name-cake-ttr) to[out=294,in=83] ++(.125mm,-2.125mm) to[bend left=12] ([xshift=-.11mm,yshift=.125mm]\pingu@name-cake-tr) -- cycle;
  % candle
  \pingu@block{\pingu@color@cakehat@candle@back} (\pingu@name-cake-tc)++(.8mm,2.66mm) to[bend right=7] ++(-1.1mm,-.1mm) to[bend right=30]++(1.1mm,0) -- cycle;
  % wick
  \pingu@draw[very thin]{\pingu@color@cakehat@candle@wick} (\pingu@name-cake-tc)++(.25mm,2mm) to[out=75,in=-95] coordinate[pos=.8] (\pingu@name-wick-1) ++(0,1mm) coordinate(\pingu@name-wick-top);
  \pingu@block{\pingu@color@cakehat@candle@fire} (\pingu@name-wick-1)++(-.045mm,0) to[out=115,in=240] ++(0,1.5mm) to[out=300,in=65] ([xshift=.045mm]\pingu@name-wick-1) -- cycle;
  \pingu@block{\pingu@color@cakehat@candle@fire@b} (\pingu@name-wick-1)++(-.045mm,0) to[out=105,in=240] ++(0,1.3mm) to[out=300,in=75] ([xshift=.045mm]\pingu@name-wick-1) -- cycle;
  \pingu@block{\pingu@color@cakehat@candle@fire@c} (\pingu@name-wick-1)++(-.035mm,0) to[out=95,in=250] ++(0,1.1mm) to[out=290,in=85] ([xshift=.035mm]\pingu@name-wick-1) -- cycle;
  % front
  \pingu@block{\pingu@color@cakehat@candle} (\pingu@name-cake-tc)++(.25mm,0) ++(.55mm,0) to[bend left=0.5] ++(0,2.66mm) to[bend left=20] ++(-1.1mm,-.1mm) to[bend right=0.5] ++(0,-2.66mm) to[bend right=20] cycle;
  \pingu@block[fill opacity=.125]{\pingu@color@cakehat@candle@shade} (\pingu@name-cake-tc)++(-.3mm,-.1mm) to[bend right=20] ++(1.1mm,0) to[bend left=.5] ++(0,2.66mm) to[bend left=15] ++(-1.1mm,-2.5mm) -- cycle;
  \pingu@block[fill opacity=.225]{\pingu@color@cakehat@candle@shade} (\pingu@name-cake-tc)++(-.3mm,-.1mm) to[bend left=2] ++(1.1mm,-1.1mm) to[bend left=5] ++(1.1mm,0) to[bend left=2] ++(-1.1mm,1.2mm) to[bend left =15] cycle;
  \pingu@block[fill opacity=.225]{\pingu@color@cakehat@candle@shade} (\pingu@name-cake-tc)++(1.35mm,-1.25mm) circle [radius=.1mm];
\endscope
}
\pingu@create@extra{pumpkinhat}{%
  pumpkin-hat/.code           = \pingu@set@extra{pumpkinhat}{true}\pingu@color{pumpkinhat}{#1},
  pumpkin-hat/.default        = pingu@bronze!97!white,
  pumpkin-hat stalk/.code     = \pingu@color{pumpkinhat@stalk}{#1},
  pumpkin-hat stalk top/.code = \pingu@color{pumpkinhat@stalk@top}{#1},
  pumpkin-hat stripe a/.code  = \pingu@color{pumpkinhat@stripe@a}{#1},
  pumpkin-hat stripe b/.code  = \pingu@color{pumpkinhat@stripe@b}{#1},
  pumpkin-hat stripe c/.code  = \pingu@color{pumpkinhat@stripe@c}{#1},
  pumpkin-hat outline/.code   = \pingu@color{pumpkinhat@outline}{#1},
  pumpkin-hat outline width/.code = \def\pingu@x@pumpkinhat@outline@w{#1},
  pumpkin-hat position/.code args  = {#1:(#2,#3)#4}{\def\pingu@x@pumpkinhat@angle{#1}\def\pingu@x@pumpkinhat@xshift{#2}\def\pingu@x@pumpkinhat@yshift{#3}\def\pingu@x@pumpkinhat@scale{#4}}
}{pumpkin-hat position={-9:(1.65mm,.25mm)1.05},pumpkin-hat stalk=pingu@green!95!\pingu@color@pumpkinhat!45!pingu@black,pumpkin-hat stalk top=\pingu@color@pumpkinhat@stalk!95!pingu@black,pumpkin-hat stripe a=pingu@black,pumpkin-hat stripe b=\pingu@color@pumpkinhat@stripe@a,pumpkin-hat stripe c=\pingu@color@pumpkinhat@stripe@b,pumpkin-hat outline=pingu@black,pumpkin-hat outline width=.7pt}

\def\pingu@pumpkinhat@outerpath{(0,.125cm)++(-60:6.75mm and 5.5mm) arc(-60:86: 6.75mm and 5.5mm) to[bend left=3] ++(-1.75mm,0) arc(95:242:6.75mm and 5.5mm) to[bend left=5] cycle;}
\def\pingu@draw@ea@pumpkinhat{%
\scope[rotate around={\pingu@x@pumpkinhat@angle:(\pingu@name-head-top)},%
shift={(\pingu@name-head-top)},
shift={(\pingu@x@pumpkinhat@xshift,\pingu@x@pumpkinhat@yshift)},
scale=\pingu@x@pumpkinhat@scale]
  % give it a small cut
  \pingu@block{\pingu@color@pumpkinhat} (0,.125cm)++(-60:6.75mm and 5.5mm) coordinate (@pkll) arc(-60:86: 6.75mm and 5.5mm) coordinate (@pkl) to[bend left=3] coordinate[pos=.5] (@pkuc) ++(-1.75mm,0) coordinate (@pkr) arc(95:242:6.75mm and 5.5mm) coordinate (@pklr) to[bend left=5] coordinate[pos=.5] (@pklc) cycle;
  \pingu@draw[line join=round,line width=\pingu@x@pumpkinhat@outline@w]{\pingu@color@pumpkinhat@outline} \pingu@pumpkinhat@outerpath;
\scope
\clip (0,.125cm)++(-60:6.75mm and 5.5mm) coordinate (@pkll) arc(-60:86: 6.75mm and 5.5mm) coordinate (@pkl) to[bend left=3] ++(-1.75mm,0) coordinate (@pkr) arc(95:242:6.75mm and 5.5mm) coordinate (@pklr) to[bend left=5] cycle;
  \pingu@draw[line cap=round,opacity=.3]{\pingu@color@pumpkinhat@stripe@a} (@pklr) to[bend left=55] (@pkr);
  \pingu@draw[line cap=round,opacity=.3]{\pingu@color@pumpkinhat@stripe@c} (@pkll) to[bend right=55] (@pkl);
  \pingu@draw[line cap=round,opacity=.3]{\pingu@color@pumpkinhat@stripe@b} (@pklc) to[bend right=5] (@pkuc);
\endscope
\pingu@block{\pingu@color@pumpkinhat@stalk} ([yshift=-.5*\pingu@x@pumpkinhat@outline@w]@pkl) to[bend left=3] ([yshift=-.5*\pingu@x@pumpkinhat@outline@w]@pkr) to[bend right=8] ++(.85mm,2mm) -- ++(.65mm,0) coordinate[pos=.5] (@pkc) to[bend right=3] cycle;
\pingu@block{\pingu@color@pumpkinhat@stalk@top} (@pkc) ellipse[x radius=.65mm/2, y radius=.085mm];
\endscope
}

\pingu@create@wing@extra{lollipop}{%
  lollipop \@lr/.code         = {\pingu@set@extra{lollipop\@lr}{true}\pingu@color{lollipop\@lr}{##1}},
  lollipop \@lr/.default      = pingu@green,
  lollipop \@lr\space handle/.code = \pingu@color{lollipop\@lr @handle}{##1},%
  lollipop \@lr\space second/.code = \pingu@color{lollipop\@lr @second}{##1}%
}{lollipop \@lr\space handle=pingu@bronze,lollipop \@lr\space second={\csname pingu@color@lollipop\@lr\endcsname!86!white}}

% #1 wing
\def\pingu@draw@wi@lollipop#1{%
    \pingu@setup@wing{lollipop}{#1}%
    \pingu@draw[thick,rotate around={\@angle:(\pingu@name-wing-#1)}]{\csname pingu@color@lollipop#1@handle\endcsname}(\pingu@name-wing-#1)++(0,4.75mm) -- ++(0,-6.25mm);
    \pingu@block[thick,rotate around={\@angle:(\pingu@name-wing-#1)}]{\@col}(\pingu@name-wing-#1)++(0,4.75mm) coordinate (\pingu@name-lollipop-#1-top) circle[radius=1.4mm];
    \pingu@block[thick,rotate around={\@angle-1:(\pingu@name-lollipop-#1-top)}]{\csname pingu@color@lollipop#1@second\endcsname} (\pingu@name-lollipop-#1-top) ellipse [x radius=1.57mm, y radius=1.5\p@];
    \pingu@block[thick,rotate around={\@angle-1:(\pingu@name-lollipop-#1-top)}]{\@col} (\pingu@name-lollipop-#1-top)++(0,.5\p@) ellipse [x radius=1.4mm, y radius=\p@];
}

\pingu@create@extra{heart}{%
  heart/.code       = {\pingu@set@extra{heart}{true}\pingu@color{heart}{#1}},
  heart/.default    = lightgray
}{}

\def\pingu@draw@eb@heart{%
    \pingu@block[sharp corners]{\pingu@color@heart}
    ([yshift=1mm]\pingu@name-belly-center) arc(0:180:.13cm)
    to[out=270,in=110] ++(.26cm,-.36cm) to[out=70,in=270] ++(.26cm,.36cm) arc (0:180:.13cm) -- cycle;
}

\pingu@create@extra{vampireteeth}{%
  vampire teeth/.code       = {\pingu@set@extra{vampireteeth}{true}\pingu@color{vampireteeth}{#1}},
  vampire teeth/.default    = pingu@yellow!10!pingu@black!70!lightgray
}{}

\def\pingu@draw@eb@vampireteeth{%
    \pingu@block{\pingu@color@vampireteeth} (\pingu@name-bill) ++(-1.35mm,-2.5mm)
    arc(180:0:1.35mm and 2.5mm)
    arc(0:180:1.35mm and .95mm);
}

\pingu@create@wing@extra{broom}{%
    broom \@lr/.code                    = {\pingu@set@extra{broom\@lr}{true}\pingu@color{broom\@lr}{##1}},
    broom \@lr/.default                 = pingu@bronze,
    broom \@lr\space length/.code       = \expandafter\def\csname pingu@broom@\@lr @length\endcsname{##1},
    broom \@lr\space shift/.code        = \expandafter\def\csname pingu@broom@\@lr @shift\endcsname{##1},
    broom \@lr\space band/.code          = \pingu@color{broom@\@lr @band}{##1},
    broom \@lr\space bristles a/.code   = \pingu@color{broom@\@lr @bristles@a}{##1},
    broom \@lr\space bristles b/.code   = \pingu@color{broom@\@lr @bristles@b}{##1},
    broom \@lr\space bristles c/.code   = \pingu@color{broom@\@lr @bristles@c}{##1},
}{broom \@lr\space length=22mm,broom \@lr\space shift=8mm, broom \@lr\space band=pingu@red!80!pingu@black!80!pingu@bronze, broom \@lr\space bristles a=pingu@bronze!16!pingu@yellow!41!pingu@white!80!brown!95!\csname pingu@color@broom\@lr\endcsname, broom \@lr\space bristles b=\csname pingu@color@broom@\@lr @bristles@a\endcsname!83!pingu@white, broom \@lr\space bristles c=\csname pingu@color@broom@\@lr @bristles@b\endcsname!83!pingu@white}
\def\pingu@draw@wi@broom#1{%
    \pingu@setup@wing{broom}{#1}%
    % TODO: mirror on other wing?
\scope[rotate around={\@angle:(\pingu@name-wing-#1)}]
    \pingu@block{\csname pingu@color@broom#1\endcsname}(\pingu@name-wing-#1)++(\@sidesign*-.2mm,-\csname pingu@broom@#1@shift\endcsname) -- ++(0,\csname pingu@broom@#1@length\endcsname) arc(180:0:\@sidesign*.4mm and .3mm) coordinate[pos=.5] (\pingu@name-broom-#1-top) -- ++(0,-\csname pingu@broom@#1@length\endcsname) arc(360:180:\@sidesign*.4mm and .3mm) -- cycle;
    \pingu@block[rounded corners=.44pt]{\csname pingu@color@broom@#1@bristles@a\endcsname} (\pingu@name-broom-#1-top)++(-1mm,-2mm) to[out=115,in=240] ++(1mm,10.5mm) to[out=300,in=65] ([xshift=.95mm,yshift=-2mm]\pingu@name-broom-#1-top) to[bend right=4] ([xshift=-.75mm,yshift=-2mm]\pingu@name-broom-#1-top) -- cycle;
    \pingu@block[rounded corners=.44pt]{\csname pingu@color@broom@#1@bristles@a\endcsname} (\pingu@name-broom-#1-top)++(-1mm,-2mm) to[out=115,in=240] ++(1.66mm,9.75mm) to[out=300,in=65] coordinate[pos=.81] (@l) coordinate[pos=.79] (@l2) ([xshift=.95mm,yshift=-2mm]\pingu@name-broom-#1-top) to[bend right=4] ([xshift=-.75mm,yshift=-2mm]\pingu@name-broom-#1-top) -- cycle;
    \pingu@block[rounded corners=.44pt]{\csname pingu@color@broom@#1@bristles@a\endcsname} (\pingu@name-broom-#1-top)++(-1mm,-2mm) to[out=115,in=240] coordinate[pos=.17] (@r) coordinate[pos=.19] (@r2)  ++(.25mm,10.5mm) to[out=300,in=65] ([xshift=.95mm,yshift=-2mm]\pingu@name-broom-#1-top) to[bend right=4] ([xshift=-.75mm,yshift=-2mm]\pingu@name-broom-#1-top) -- cycle;
    \pingu@block[rounded corners=.44pt]{\csname pingu@color@broom@#1@bristles@b\endcsname} (\pingu@name-broom-#1-top)++(-.75mm,-1.75mm) to[out=115,in=240] ++(1.35mm,9.25mm) to[out=300,in=65] ([xshift=.75mm,yshift=-1.75mm]\pingu@name-broom-#1-top) -- cycle;
    \pingu@block[rounded corners=.44pt]{\csname pingu@color@broom@#1@bristles@b\endcsname} (\pingu@name-broom-#1-top)++(-.75mm,-1.75mm) to[out=115,in=240] ++(0mm,9.65mm) to[out=300,in=65] ([xshift=.75mm,yshift=-1.75mm]\pingu@name-broom-#1-top) -- cycle;
    \pingu@block{\csname pingu@color@broom@#1@bristles@c\endcsname} (\pingu@name-broom-#1-top)++(-.5mm,-1.5mm) to[out=115,in=240] ++(.5mm,9.5mm) to[out=300,in=65] ([xshift=.5mm,yshift=-1.5mm]\pingu@name-broom-#1-top) -- cycle;
    % TODO: broom cap color etc
    \pingu@block{\csname pingu@color@broom@#1@band\endcsname} (@r) to[bend right=10] (@l) -- (@l2) to[bend left=10] (@r2);
\endscope
}

\tikzset{pingu@clip even odd rule/.code={\pgfseteorule}, % Credit to Andrew Stacey
pingu@invclip/.style={
    clip,insert path=
        [pingu@clip even odd rule]{
            [reset cm](-\maxdimen,-\maxdimen)rectangle(\maxdimen,\maxdimen)
        }
}}
\pingu@create@extra{jackolantern}{%
  jack o lantern/.code           = \pingu@set@extra{jackolantern}{true}\pingu@color{jackolantern}{#1},
  jack o lantern/.default        = pingu@bronze!97!pingu@black,
  jack o lantern helmet/.style   = {jack o lantern=#1,jack o lantern background=none,jack o lantern position={-2.15:(2.05mm,-11.35mm){1.5}},jack o lantern back stripe a=\@pingu@none, jack o lantern back stripe b=\@pingu@none,jack o lantern back stripe c=\@pingu@none,jack o lantern height=6.25mm,jack o lantern width=6.1mm,hair=\@pingu@none},
  jack o lantern helmet/.default = pingu@bronze!97!pingu@black,
  jack o lantern stalk/.code     = \pingu@color{jackolantern@stalk}{#1},
  jack o lantern stalk top/.code = \pingu@color{jackolantern@stalk@top}{#1},
  jack o lantern background/.code= \pingu@color{jackolantern@background}{#1},
  jack o lantern stripe a/.code  = \pingu@color{jackolantern@stripe@a}{#1},
  jack o lantern stripe b/.code  = \pingu@color{jackolantern@stripe@b}{#1},
  jack o lantern stripe c/.code  = \pingu@color{jackolantern@stripe@c}{#1},
  jack o lantern back stripe a/.code  = \pingu@color{jackolantern@backstripe@a}{#1},
  jack o lantern back stripe b/.code  = \pingu@color{jackolantern@backstripe@b}{#1},
  jack o lantern back stripe c/.code  = \pingu@color{jackolantern@backstripe@c}{#1},
  jack o lantern outline/.code   = \pingu@color{jackolantern@outline}{#1},
  jack o lantern outline width/.code = \def\pingu@x@jackolantern@outline@w{#1},
  jack o lantern height/.code = \def\pingu@x@jackolantern@height{#1},
  jack o lantern width/.code = \def\pingu@x@jackolantern@width{#1},
  jack o lantern position/.code args  = {#1:(#2,#3)#4}{\def\pingu@x@jackolantern@angle{#1}\def\pingu@x@jackolantern@xshift{#2}\def\pingu@x@jackolantern@yshift{#3}\def\pingu@x@jackolantern@scale{#4}}
}{jack o lantern position={-9:(3.15mm,.95mm){1.3}},jack o lantern stripe a=pingu@black,jack o lantern stripe b=\pingu@color@jackolantern@stripe@a,jack o lantern stripe c=\pingu@color@jackolantern@stripe@b,jack o lantern back stripe a=pingu@black,jack o lantern back stripe b=\pingu@color@jackolantern@stripe@a,jack o lantern back stripe c=\pingu@color@jackolantern@stripe@b,jack o lantern outline=pingu@black,jack o lantern outline width=.7pt,jack o lantern stalk=pingu@green!95!\pingu@color@jackolantern!45!pingu@black,jack o lantern stalk top=\pingu@color@jackolantern@stalk!95!pingu@black,jack o lantern background=\pingu@color@jackolantern!85!pingu@black,jack o lantern height=5.5mm,jack o lantern width=5.75mm}

\def\pingu@jackolantern@outerpath{(0,.125cm)++(-60:{\pingu@x@jackolantern@width} and \pingu@x@jackolantern@height) arc(-60:86:{\pingu@x@jackolantern@width} and \pingu@x@jackolantern@height) to[bend right=3] ++(-3.75mm,0) arc(95:242:{\pingu@x@jackolantern@width} and \pingu@x@jackolantern@height) to[bend left=5] cycle;}
\def\pingu@x@jackolantern{(-5.15mm,.6mm) to[bend right] ++(1.5mm,-.5mm) -- ++(.33mm,.33mm) to[bend right=10] ++(1.5mm,0) -- ++(.66mm,-.75mm) -- ++(.66mm,.75mm) to[bend right=10] ++(1.5mm,0) -- ++(.33mm,-.33mm) to[bend right] ++(1.5mm,.5mm) to[bend left] ++(-1.5mm,-2.15mm) to[bend left=10] ++(-.33mm,.33mm) to[bend left=10] ++(-1.5mm,0) -- ++(-.66mm,-.5mm) -- ++(-.66mm,.5mm) to[bend left=10] ++(-1.5mm,0) -- ++(-.33mm,-.33mm) to[bend left] cycle}

\def\pingu@x@jackolantern@eye@left{(0.9mm,2mm) -- ++(2mm,-.15mm) to[bend right=40] ++(-.5mm,2mm) -- cycle}
\def\pingu@x@jackolantern@eye@right{(-3mm,2mm) -- ++(-2mm,-.15mm) to[bend left=40] ++(.5mm,2mm) -- cycle}
\def\pingu@x@jackolantern@nose{(0.965mm*0.5-3.225mm*0.5,1mm) -- ++(1mm,1.2mm) to[bend right=10] ++(-2mm,0) -- cycle}

\def\pingu@draw@ea@jackolantern{%
\scope[rotate around={\pingu@x@jackolantern@angle:(\pingu@name-head-top)},%
shift={(\pingu@name-head-top)},
shift={(\pingu@x@jackolantern@xshift,\pingu@x@jackolantern@yshift)},
scale=\pingu@x@jackolantern@scale]
\scope
\pgfinterruptboundingbox
\path[pingu@invclip]\pingu@x@jackolantern \pingu@x@jackolantern@eye@left \pingu@x@jackolantern@eye@right \pingu@x@jackolantern@nose;
  % give it a small cut
  \pingu@block{\pingu@color@jackolantern} (0,.125cm)++(-60:{\pingu@x@jackolantern@width} and \pingu@x@jackolantern@height) coordinate (@pkll) arc(-60:86: {\pingu@x@jackolantern@width} and \pingu@x@jackolantern@height) coordinate (@pkl) to[bend right=3] coordinate[pos=.5] (@pkuc) coordinate[pos=.225] (@pksl) coordinate[pos=.775] (@pksr) ++(-3.75mm,0) coordinate (@pkr) arc(95:242:{\pingu@x@jackolantern@width} and \pingu@x@jackolantern@height) coordinate (@pklr) to[bend left=5] coordinate[pos=.5] (@pklc) cycle;
  \pingu@draw[line join=round,line width=\pingu@x@jackolantern@outline@w]{\pingu@color@jackolantern@outline} \pingu@jackolantern@outerpath;
\endpgfinterruptboundingbox
\scope
\clip (0,.125cm)++(-60:{\pingu@x@jackolantern@width} and \pingu@x@jackolantern@height) arc(-60:86:{\pingu@x@jackolantern@width} and \pingu@x@jackolantern@height) to[bend right=3] ++(-3.75mm,0) arc(95:242:{\pingu@x@jackolantern@width} and \pingu@x@jackolantern@height) to[bend left=5] cycle;
  \pingu@draw[line cap=round,opacity=.2]{\pingu@color@jackolantern@stripe@a} (@pklr) to[bend left=42] (@pkr);
  \pingu@draw[line cap=round,opacity=.2]{\pingu@color@jackolantern@stripe@c} (@pkll) to[bend right=54] (@pkl);
  \pingu@draw[line cap=round,opacity=.2]{\pingu@color@jackolantern@stripe@b} (@pklc) to[bend right=6] (@pkuc);
\endscope
\endscope
  \pingu@draw[fill=\pingu@color@jackolantern@background,rounded corners=.25pt]{\pingu@color@jackolantern@outline} \pingu@x@jackolantern@eye@left;
  \pingu@draw[fill=\pingu@color@jackolantern@background,rounded corners=.25pt]{\pingu@color@jackolantern@outline} \pingu@x@jackolantern@eye@right;

  \pingu@draw[fill=\pingu@color@jackolantern@background,rounded corners=.25pt]{\pingu@color@jackolantern@outline} \pingu@x@jackolantern@nose;

  \pingu@draw[fill=\pingu@color@jackolantern@background]{\pingu@color@jackolantern@outline} \pingu@x@jackolantern;
  \scope
  \clip\pingu@x@jackolantern \pingu@x@jackolantern@eye@left \pingu@x@jackolantern@eye@right \pingu@x@jackolantern@nose;
  \pingu@draw[line cap=round,opacity=.2]{\pingu@color@jackolantern@backstripe@a} ([xshift=1.6mm]@pklr) to[bend left=18] (@pkr);
  \pingu@draw[line cap=round,opacity=.2]{\pingu@color@jackolantern@backstripe@c} ([xshift=-1.6mm]@pkll) to[bend right=22] (@pkl);
  \pingu@draw[line cap=round,opacity=.2]{\pingu@color@jackolantern@backstripe@b} (@pklc) to[bend right=1] (@pkuc);
  \endscope
  \pingu@block{\pingu@color@jackolantern@stalk} ([yshift=-.5*\pingu@x@jackolantern@outline@w]@pksl) to[bend left=3] ([yshift=-.5*\pingu@x@jackolantern@outline@w]@pksr) to[bend right=8] ++(.85mm,2mm) -- ++(.65mm,0) coordinate[pos=.5] (@pkc) to[bend right=3] cycle;
\pingu@block{\pingu@color@jackolantern@stalk@top} (@pkc) ellipse[x radius=.65mm/2, y radius=.085mm];
\endscope
}

\pingu@create@wing@extra{hammer}{%
    hammer \@lr/.code              = {\pingu@set@extra{hammer\@lr}{true}\pingu@color{hammer\@lr}{##1}},
    hammer \@lr/.default           = pingu@silver,
    hammer \@lr\space handle length/.code = \expandafter\def\csname pingu@hammer@\@lr @length\endcsname{##1},
    hammer \@lr\space handle shift/.code  = \expandafter\def\csname pingu@hammer@\@lr @shift\endcsname{##1},
    hammer \@lr\space width/.code  = \expandafter\def\csname pingu@hammer@\@lr @width\endcsname{##1},
    hammer \@lr\space height/.code  = \expandafter\def\csname pingu@hammer@\@lr @height\endcsname{##1},
    hammer \@lr\space xshift/.code  = \expandafter\def\csname pingu@hammer@\@lr @xshift\endcsname{##1},
    hammer \@lr\space yshift/.code  = \expandafter\def\csname pingu@hammer@\@lr @yshift\endcsname{##1},
    hammer \@lr\space handle/.code = \pingu@color{hammer@\@lr @handle}{##1},%
    hammer \@lr\space with knob/.style  = {hammer \@lr=##1, hammer \@lr\space handle length=\dimexpr9mm+\csname pingu@hammer@\@lr @height\endcsname+.5mm,hammer \@lr\space yshift=\dimexpr-.5mm-\csname pingu@hammer@\@lr @height\endcsname},
    hammer \@lr\space with knob/.default = pingu@silver
}{hammer \@lr\space handle length=9mm, hammer \@lr\space handle=pingu@bronze, hammer \@lr\space handle shift=-4mm, hammer \@lr\space width=7mm,hammer \@lr\space height=3.5mm, hammer \@lr\space xshift=-0.5*\csname pingu@hammer@\@lr @width\endcsname,hammer \@lr\space yshift=-1mm}
\def\pingu@draw@wi@hammer#1{%
    \pingu@setup@wing{hammer}{#1}%
\scope[rotate around={\@angle:(\pingu@name-wing-#1)}]
% \csname pingu@color@hammer#1\endcsname
    \pingu@block{\csname pingu@color@hammer@#1@handle\endcsname}(\pingu@name-wing-#1)++(\@sidesign*-.2mm,\csname pingu@hammer@#1@shift\endcsname) -- ++(0,\csname pingu@hammer@#1@length\endcsname) arc(180:0:\@sidesign*.4mm and .3mm) coordinate[pos=.5] (\pingu@name-hammer-#1-top) -- ++(0,-\csname pingu@hammer@#1@length\endcsname) arc(360:180:\@sidesign*.4mm and .3mm) -- cycle;
    \pingu@block[rounded corners=2pt]{\csname pingu@color@hammer#1\endcsname} (\pingu@name-hammer-#1-top)++(\csname pingu@hammer@#1@xshift\endcsname,\csname pingu@hammer@#1@yshift\endcsname) rectangle ++(\csname pingu@hammer@#1@width\endcsname,\csname pingu@hammer@#1@height\endcsname);
\endscope
}

\pingu@create@wing@extra{plank}{%
    plank \@lr/.code              = {\pingu@set@extra{plank\@lr}{true}\pingu@color{plank\@lr}{##1}},
    plank \@lr/.default           = pingu@bronze!80!pingu@black,
    plank \@lr\space width/.code  = \expandafter\def\csname pingu@plank@\@lr @width\endcsname{##1},
    plank \@lr\space height/.code  = \expandafter\def\csname pingu@plank@\@lr @height\endcsname{##1},
    plank \@lr\space xshift/.code  = \expandafter\def\csname pingu@plank@\@lr @xshift\endcsname{##1},
    plank \@lr\space yshift/.code  = \expandafter\def\csname pingu@plank@\@lr @yshift\endcsname{##1}
}{plank \@lr\space width=7mm,plank \@lr\space height=16.5mm, plank \@lr\space xshift=0mm,plank \@lr\space yshift=-1mm}
\def\pingu@draw@wi@plank#1{%
    \pingu@setup@wing{plank}{#1}%
\scope[rotate around={\@angle:(\pingu@name-wing-#1)}]
\pingu@block[rounded corners=2pt]{\@col}([xshift=\csname pingu@plank@#1@xshift\endcsname,yshift=\csname pingu@plank@#1@yshift\endcsname]\pingu@name-wing-#1)++({-.5*(\csname pingu@plank@#1@width\endcsname)},{-.5*(\csname pingu@plank@#1@height\endcsname)}) rectangle ++({\csname pingu@plank@#1@width\endcsname},{\csname pingu@plank@#1@height\endcsname});
\endscope
}

% \usetikzlibrary{spy}

\pingu@create@wing@extra{magnifier}{%
    magnifier \@lr/.code              = {\pingu@set@extra{magnifier\@lr}{true}\pingu@color{magnifier\@lr}{##1}}, % \noexpand\tikzset{/pingu/@pingu/.append style={spy scope={circle,draw,magnification=4,size=1cm}}}
    magnifier \@lr/.default           = pingu@bronze,
    magnifier \@lr\space handle length/.code = \expandafter\def\csname pingu@magnifier@\@lr @length\endcsname{##1},
    magnifier \@lr\space handle shift/.code  = \expandafter\def\csname pingu@magnifier@\@lr @shift\endcsname{##1},
    magnifier \@lr\space size/.code  = \expandafter\def\csname pingu@magnifier@\@lr @size\endcsname{##1},
    magnifier \@lr\space glass/.code  = \pingu@color{magnifier@\@lr @glass}{##1},
    magnifier \@lr\space opacity/.code  = \expandafter\def\csname pingu@magnifier@\@lr @opacity\endcsname{##1},
    magnifier \@lr\space thick/.code  = \expandafter\def\csname pingu@magnifier@\@lr @thick\endcsname{##1},
    magnifier \@lr\space xshift/.code  = \expandafter\def\csname pingu@magnifier@\@lr @xshift\endcsname{##1},
    magnifier \@lr\space yshift/.code  = \expandafter\def\csname pingu@magnifier@\@lr @yshift\endcsname{##1},
    magnifier \@lr\space handle/.code = \pingu@color{magnifier@\@lr @handle}{##1}%
}{magnifier \@lr\space handle length=3.5mm, magnifier \@lr\space handle shift=-4mm, magnifier \@lr\space xshift=0mm,magnifier \@lr\space yshift=1mm,magnifier \@lr\space size=2.5mm,magnifier \@lr\space thick=.5mm,magnifier \@lr\space glass=pingu@blue!90!pingu@yellow,magnifier \@lr\space opacity=0.24}
\def\pingu@draw@wi@magnifier#1{%
    \pingu@setup@wing{magnifier}{#1}%
  \scope[rotate around={\@angle:(\pingu@name-wing-#1)}]
% \csname pingu@color@magnifier#1\endcsname
  \path ([yshift=\csname pingu@magnifier@#1@yshift\endcsname+\csname pingu@magnifier@#1@size\endcsname,xshift=\csname pingu@magnifier@\@lr @xshift\endcsname]\pingu@name-wing-#1) coordinate (@);

  % \spy[draw=green] on (@) in node at (@);
% \pgfonlayer{foreground}
  \pingu@block[even odd rule]{\@col} (@) circle[radius=\csname pingu@magnifier@#1@size\endcsname] circle[radius=\csname pingu@magnifier@#1@size\endcsname-\csname pingu@magnifier@#1@thick\endcsname];

    \pingu@block[opacity=\csname pingu@magnifier@#1@opacity\endcsname]{\csname pingu@color@magnifier@#1@glass\endcsname} (@) circle[radius=\csname pingu@magnifier@#1@size\endcsname-\csname pingu@magnifier@#1@thick\endcsname];

    \pingu@block{\@col} % TODO: adapt size
    (@) ([shift={(-70:2.5mm)}]@) to[out=230,in=90] ++(-.5mm,-\csname pingu@magnifier@#1@length\endcsname) arc(360:180:.33mm) to[out=90,in=-50] ++(-.5mm,\csname pingu@magnifier@#1@length\endcsname);%
% \endpgfonlayer
\endscope
}
% #endregion

% #region glasses-lib
\pingu@create@extra{glasses}{%
    glasses/.code               = \pingu@set@extra{glasses}{true}\pingu@color{glasses}{#1},
    glasses/.default            = pingu@black,
    glasses left fill/.code     = \pingu@color{glasses@fill@l}{#1},
    glasses right fill/.code    = \pingu@color{glasses@fill@r}{#1},
    glasses left opacity/.code  = \def\pingu@x@glasses@op@l{#1},
    glasses right opacity/.code = \def\pingu@x@glasses@op@r{#1},
    glasses fill/.style         = {/pingu/glasses left fill=#1, /pingu/glasses right fill=#1},
    glasses opacity/.style      = {/pingu/glasses left opacity=#1, /pingu/glasses right opacity=#1},
    glasses line width/.code    = \def\pingu@x@glasses@lw{#1},
    sunglasses/.forward to      = /pingu/sun glasses,
    glasses bend left/.code     = \def\pingu@x@glasses@bend@l{#1},
    glasses bend right/.code    = \def\pingu@x@glasses@bend@r{#1},
    glasses bend/.style         = {/pingu/glasses bend left=#1,/pingu/glasses bend right=#1},
    sun glasses/.style          = {/pingu/glasses, /pingu/glasses fill=#1},
    sun glasses/.default        = pingu@black,
}{glasses line width=1.125\p@,glasses fill=\@pingu@none,glasses opacity=.825,glasses bend left=32.5,glasses bend right=32.5}

\def\pingu@draw@ea@glasses{% fact: 1.33; modified first shift and ht
    \pingu@block[opacity=\pingu@x@glasses@op@l]{\pingu@color@glasses@fill@l} (\pingu@name-eye-left)++(-2.66mm,1.75mm) to[bend left=8] ++(5.586mm,0) to[out=-80,in=70] ++(-.266mm,-3.6mm) to[bend left=\pingu@x@glasses@bend@l] ++(-4.8545mm,\z@) to[out=135,in=-90] ++(-1.064mm,3.5mm) -- cycle;
    \pingu@block[opacity=\pingu@x@glasses@op@r]{\pingu@color@glasses@fill@r} (\pingu@name-eye-right)++(2.66mm,1.75mm) to[bend right=8] ++(-5.586mm,0) to[out=-100,in=110] ++(.266mm,-3.6mm) to[bend right=\pingu@x@glasses@bend@r] ++(4.8545mm,\z@) to[out=45,in=-90] ++(1.064mm,3.5mm) -- cycle;
    \pingu@draw[line width=\pingu@x@glasses@lw]{\pingu@color@glasses} [rounded corners=.25mm](\pingu@name-eye-left)++(-2.66mm,1.75mm) coordinate (\pingu@name-glasses-left-mid) to[bend left=8] ++(5.586mm,0) coordinate (\pingu@name-glasses-left-outer) to[out=-80,in=70] ++(-.266mm,-3.6mm) to[bend left=\pingu@x@glasses@bend@l] ++(-4.8545mm,\z@) to[out=135,in=-90] coordinate[pos=.9] (\pingu@name-glasses-left-mid-b) ++(-1.064mm,3.5mm) -- cycle;
    \pingu@draw[line width=\pingu@x@glasses@lw]{\pingu@color@glasses} [rounded corners=.25mm] (\pingu@name-eye-right)++(2.66mm,1.75mm) coordinate (\pingu@name-glasses-right-mid) to[bend right=8] ++(-5.586mm,0) coordinate (\pingu@name-glasses-right-outer) to[out=-100,in=110] ++(.266mm,-3.6mm) to[bend right=\pingu@x@glasses@bend@r] ++(4.8545mm,\z@) to[out=45,in=-90] coordinate[pos=.9] (\pingu@name-glasses-right-mid-b) ++(1.064mm,3.5mm) -- cycle;
    \pingu@draw[line width=\pingu@x@glasses@lw]{\pingu@color@glasses} (\pingu@name-glasses-right-mid) to[bend right=10] (\pingu@name-glasses-left-mid);
    \pingu@draw[line width=\pingu@x@glasses@lw]{\pingu@color@glasses} (\pingu@name-glasses-right-mid-b) to[bend left=20] (\pingu@name-glasses-left-mid-b);
    \scope
    \clip[use path=\pingu@upperpingu];
    \pingu@draw[line width=\pingu@x@glasses@lw]{\pingu@color@glasses}
    (\pingu@name-glasses-right-mid) to[bend right=8] ++(-5.586mm,0) -- ++(-5mm,.5mm);
    \pingu@draw[line width=\pingu@x@glasses@lw]{\pingu@color@glasses}
    (\pingu@name-glasses-left-mid) to[bend left=8] ++(5.586mm,0) -- ++(5mm,.5mm);
    \endscope
}
\pingu@create@extra{glassesround}{%
    glasses round/.code               = \pingu@set@extra{glassesround}{true}\pingu@color{glassesround}{#1},
    glasses round/.default            = pingu@black,
    glasses round left fill/.code     = \pingu@color{glassesround@fill@l}{#1},
    glasses round right fill/.code    = \pingu@color{glassesround@fill@r}{#1},
    glasses round fill/.style         = {/pingu/glasses round left fill=#1, /pingu/glasses round right fill=#1},
    glasses round left opacity/.code  = \def\pingu@x@glassesround@op@l{#1},
    glasses round right opacity/.code = \def\pingu@x@glassesround@op@r{#1},
    glasses round opacity/.style      = {/pingu/glasses round left opacity=#1, /pingu/glasses round right opacity=#1},
    glasses round left radius/.code  = \def\pingu@x@glassesround@r@l{#1},
    glasses round right radius/.code = \def\pingu@x@glassesround@r@r{#1},
    glasses round radius/.style      = {/pingu/glasses round left radius=#1, /pingu/glasses round right radius=#1},
    glasses round line width/.code    = \def\pingu@x@glassesround@lw{#1},
    sunglasses round/.forward to      = /pingu/sun glasses round,
    sun glasses round/.style          = {/pingu/glasses round, /pingu/glasses round fill=#1},
    sun glasses round/.default        = pingu@black,
    % todo: width/radius allow for different
}{glasses round line width=.75\p@,glasses round fill=\@pingu@none,glasses round opacity=.825,glasses round radius=3.15mm}
\def\pingu@draw@ea@glassesround{% fact: 1.33; modified first shift and ht
    \pingu@block[opacity=\pingu@x@glassesround@op@l]{\pingu@color@glassesround@fill@l} (\pingu@name-eye-left) circle [radius=\pingu@x@glassesround@r@l];
    \pingu@block[opacity=\pingu@x@glassesround@op@r]{\pingu@color@glassesround@fill@r} (\pingu@name-eye-right) circle [radius=\pingu@x@glassesround@r@r];
    \pingu@draw[line width=\pingu@x@glassesround@lw]{\pingu@color@glassesround} [rounded corners=.25mm](\pingu@name-eye-left) ++(150:\pingu@x@glassesround@r@l) coordinate (\pingu@name-glassesround-left-mid) arc (150:510:\pingu@x@glassesround@r@l);
    \pingu@draw[line width=\pingu@x@glassesround@lw]{\pingu@color@glassesround} [rounded corners=.25mm] (\pingu@name-eye-right) ++(30:\pingu@x@glassesround@r@r) coordinate (\pingu@name-glassesround-right-mid) arc (30:390:\pingu@x@glassesround@r@r);
    \pingu@draw[line width=\pingu@x@glassesround@lw]{\pingu@color@glassesround} (\pingu@name-glassesround-left-mid) to[bend right=30] (\pingu@name-glassesround-right-mid);
    \scope
    \clip[use path=\pingu@upperpingu];
    \pingu@draw[line width=\pingu@x@glassesround@lw]{\pingu@color@glassesround}
     (\pingu@name-glassesround-right-mid) arc(30:150:\pingu@x@glassesround@r@l) -- ++(-5mm,.65mm);
     \pingu@draw[line width=\pingu@x@glassesround@lw]{\pingu@color@glassesround}
     (\pingu@name-glassesround-left-mid) arc(150:30:\pingu@x@glassesround@r@r) -- ++(5mm,.65mm);
    \endscope
}
\pingu@create@extra{monocleleft}{%
    monocle left/.code              = \pingu@set@extra{monocleleft}{true}\pingu@color{monocleleft}{#1},
    monocle left/.default           = pingu@black,
    monocle left glass/.code        = \pingu@color{monocleleft@glass}{#1},
    monocle left fill/.forward to   = /pingu/monocle left glass,
    monocle left opacity/.code      = \def\pingu@x@monocleleft@opacity{#1},
    monocle left fill opacity/.forward to   = /pingu/monocle left opacity,
    monocle left string/.code       = \pingu@color{monocleleft@string}{#1},
    monocle left string length/.code= \def\pingu@x@monocleleft@string@l{#1},
    monocle left blob/.code         = \pingu@color{monocleleft@blob}{#1},
}{monocle left glass=pingu@blue,monocle left opacity=.155,monocle left string=\pingu@color@monocleleft,monocle left blob=\pingu@color@monocleleft,monocle left string length=5.55mm}

\def\pingu@draw@eb@monocle@l{%
    \pingu@block[/pingu/glow,opacity=\pingu@x@monocleleft@opacity]{\pingu@color@monocleleft@glass} (\pingu@name-eye-left) circle[radius=2mm];
    \pingu@draw[thin]{\pingu@color@monocleleft@string} (\pingu@name-eye-left)++(2mm,0)
    to[out=-75,in=100] ++(0,-\pingu@x@monocleleft@string@l);
    \pingu@block{\pingu@color@monocleleft@blob} (\pingu@name-eye-left)++(2mm,-\pingu@x@monocleleft@string@l) circle [radius=.65\p@];
    \pingu@draw[semithick]{\pingu@color@monocleleft} (\pingu@name-eye-left) circle[radius=2mm];
}
\pingu@create@extra{monocleright}{%
    monocle right/.code              = \pingu@set@extra{monocleright}{true}\pingu@color{monocleright}{#1},
    monocle right/.default           = pingu@black,
    monocle right glass/.code        = \pingu@color{monocleright@glass}{#1},
    monocle right fill/.forward to   = /pingu/monocle right glass,
    monocle right opacity/.code      = \def\pingu@x@monocleright@opacity{#1},
    monocle right fill opacity/.forward to   = /pingu/monocle right opacity,
    monocle right string/.code       = \pingu@color{monocleright@string}{#1},
    monocle right string length/.code= \def\pingu@x@monocleright@string@r{#1},
    monocle right blob/.code         = \pingu@color{monocleright@blob}{#1},
}{monocle right glass=pingu@blue,monocle right opacity=.155,monocle right string=\pingu@color@monocleright,monocle right blob=\pingu@color@monocleright,monocle right string length=5.55mm}
\def\pingu@draw@eb@monocle@r{%
    \pingu@block[/pingu/glow,opacity=\pingu@x@monocleright@opacity]{\pingu@color@monocleright@glass} (\pingu@name-eye-right) circle[radius=2mm];
    \pingu@draw[thin]{\pingu@color@monocleright@string} (\pingu@name-eye-right)++(-2mm,0)
    to[out=-105,in=80] ++(0,-\pingu@x@monocleright@string@r);
    \pingu@block{\pingu@color@monocleright@blob} (\pingu@name-eye-right)++(-2mm,-\pingu@x@monocleright@string@r) circle [radius=.65\p@];
    \pingu@draw[semithick]{\pingu@color@monocleright} (\pingu@name-eye-right) circle[radius=2mm];
}
% #endregion

% #region hats-lib
\pingu@create@extra{strawhat}{%
  % extra strawhat (tikzducks basis)
  straw hat/.forward to         = /pingu/strawhat,
  strawhat/.default             = brown!50!white,
  strawhat/.code                = \pingu@set@extra{strawhat}{true}\pingu@color{strawhat}{#1},
  straw hat ribbon/.forward to  = /pingu/strawhat ribbon,
  strawhat ribbon/.code         = \pingu@color{strawhat@ribbon}{#1},
  straw hat position/.forward to= /pingu/strawhat position,
  strawhat position/.code args  = {#1:(#2,#3)#4}{\def\pingu@x@strawhat@angle{#1}\def\pingu@x@strawhat@xshift{#2}\def\pingu@x@strawhat@yshift{#3}\def\pingu@x@strawhat@scale{#4}},
}{strawhat ribbon= gray!85!black,strawhat position={-26.5:(-.185cm,.14cm){1.375}}}

\def\pingu@draw@ea@strawhat{%
\scope[rotate around={\pingu@x@strawhat@angle:(\pingu@name-head)},shift={(\pingu@name-head)},shift={(\pingu@x@strawhat@xshift,\pingu@x@strawhat@yshift)},scale=\pingu@x@strawhat@scale]
\pingu@block{\pingu@color@strawhat} (.34cm,0) ellipse[x radius=.75cm, y radius=\pingu@one];
\pingu@block{\pingu@color@strawhat} (0,.5mm) rectangle (.68cm,5mm);
\pingu@block{\pingu@color@strawhat} (.34cm,5mm) ellipse[x radius=.34cm, y radius=.8mm];
\pingu@block{\pingu@color@strawhat} (-.3955cm,.2mm) -- (1.0755cm,.2mm) -- (.68cm,2mm) -- (0,2mm) -- cycle;
\pingu@block{\pingu@color@strawhat@ribbon} (.34cm,2mm) ellipse[x radius=.34cm, y radius=.8mm];
\pingu@block{\pingu@color@strawhat@ribbon} (0,2mm) rectangle (.68cm,3mm);
\pingu@block{\pingu@color@strawhat} (.34cm,3mm) ellipse[x radius=.34cm, y radius=.8mm];
\endscope}

\pingu@create@extra{hat}{%
  hat/.default   = pingu@black!90!black,
  hat/.code      = \pingu@set@extra{hat}{true}\pingu@color{hat}{#1},
  hat base/.code = \pingu@color{hat@base}{#1},
  hat coronal/.code = \pingu@color{hat@coronal}{#1},
  hat ribbon/.code = \pingu@color{hat@ribbon}{#1},
  hat position/.code args  = {#1:(#2,#3)#4}{\def\pingu@x@hat@angle{#1}\def\pingu@x@hat@xshift{#2}\def\pingu@x@hat@yshift{#3}\def\pingu@x@hat@scale{#4}},
}{hat position={-2:(.35mm,0)1},hat base=\pingu@color@hat,hat coronal=\pingu@color@hat!91!white,hat ribbon=\pingu@color@hat!87!white}

\newdimen\pingu@hat@w@half \pingu@hat@w@half=.925cm
\newdimen\pingu@hat@h \pingu@hat@h=.625cm
\def\pingupathhatupper{[rounded corners=.25mm](-.65cm,-.25cm) to[out=90,in=200] ++(.35cm,\pingu@hat@h) to[bend left=11] ++(.25cm,0) to[bend right=2.5] ++(\pingu@one,0) to[bend left=11] ++(.25cm,0) to[out=-20,in=90] ++(.35cm,-\pingu@hat@h) to[bend left=12] (-.65cm,-.25cm) -- cycle}
\def\pingu@draw@ea@hat{%
\scope[rotate around={\pingu@x@hat@angle:(\pingu@name-head-top)},shift={(\pingu@name-head-top)},shift={(\pingu@x@hat@xshift,\pingu@x@hat@yshift)},scale=\pingu@x@hat@scale]
\pingu@block[/pingu/@draw=\pingu@color@hat@coronal,thick]{\pingu@color@hat@base} (0,-.25cm)++(180:\pingu@hat@w@half{} and .15cm) arc (180:360:\pingu@hat@w@half{} and .15cm) arc (0:180:\pingu@hat@w@half{} and .115cm) -- cycle;
\pingu@block{\pingu@color@hat} \pingupathhatupper;
\scope
\clip\pingupathhatupper;
\pingu@block{\pingu@color@hat@ribbon} (\z@,.2mm) ellipse [x radius=.95\pingu@hat@w@half, y radius=.13cm];
\pingu@block{\pingu@color@hat} (\z@,.134cm) ellipse [x radius=.95\pingu@hat@w@half, y radius=.13cm];
\endscope\endscope}

% TODO: tassel
\pingu@create@extra{graduate}{%
  graduate cap/.forward to                  = /pingu/graduate,
  graduate/.default                         = pingu@black!95!white,
  graduate/.code                            = \pingu@set@extra{graduate}{true}\pingu@color{graduate}{#1},
  graduate cap top/.forward to              = /pingu/graduate top,
  graduate top/.code                        = \pingu@color{graduate@top}{#1},
  graduate cap tilt/.forward to             = /pingu/graduate tilt,
  graduate tilt/.code                       = \def\pingu@x@graduate@tilt{#1},
  graduate cap tassel/.forward to           = /pingu/graduate tassel,
  graduate tassel/.code                     = \pingu@color{graduate@tassel}{#1},
  graduate tassel/.default                  = pingu@red!65!black,
  graduate cap tassel drop/.forward to      = /pingu/graduate tassel drop,
  graduate tassel drop/.code                = \pingu@color{graduate@tassel@drop}{#1},
  graduate cap tassel start/.forward to     = /pingu/graduate tassel start,
  graduate tassel start/.code               = \def\pingu@x@tassel@start{#1},
  graduate cap tassel width/.forward to     = /pingu/graduate tassel width,
  graduate tassel width/.code               = \def\pingu@x@tassel@width{#1},
  graduate cap tassel length/.forward to    = /pingu/graduate length,
  graduate tassel length/.code              = \def\pingu@x@tassel@length{#1},
  graduate cap tassel drop size/.forward to = /pingu/graduate drop size,
  graduate tassel drop size/.code           = \def\pingu@x@tassel@drop@size{#1},
  graduate cap position/.forward to         = /pingu/graduate position,
  graduate position/.code args              = {#1:(#2,#3)#4}{\def\pingu@x@graduate@angle{#1}\def\pingu@x@graduate@xshift{#2}\def\pingu@x@graduate@yshift{#3}\def\pingu@x@graduate@scale{#4}},
}{graduate position={-27:(-.19cm,.14cm){1.375}}, graduate top=\pingu@color@graduate!95!white,graduate tilt=2.33mm,graduate tassel=\@pingu@none, graduate tassel width=.5mm, graduate tassel length=5.5mm,graduate tassel drop size=.75*\pingu@x@tassel@width,graduate tassel drop=\pingu@color@graduate@tassel,graduate cap tassel start={(.55cm,3.5mm-\pingu@x@graduate@tilt)}} % ; tassel color to hide

\def\pingu@draw@ea@graduate{%
\scope[rotate around={\pingu@x@graduate@angle:(\pingu@name-head)},shift={(\pingu@name-head)},shift={(\pingu@x@graduate@xshift,\pingu@x@graduate@yshift)},scale=\pingu@x@graduate@scale]
\pingu@block{\pingu@color@graduate} (0,1mm) rectangle (.75cm,3.5mm);
\pingu@block{\pingu@color@graduate} (.375cm,1mm) ellipse[x radius=.375cm, y radius=.8mm];
\pingu@block[rounded corners=.33mm]{\pingu@color@graduate@top} (-3mm,3.5mm) 
    % minor slant for visuals
    -- ++(.675cm + .1mm,\pingu@x@graduate@tilt) -- (1.05cm,3.5mm) -- ++(-.675cm - .1mm,-\pingu@x@graduate@tilt) -- cycle;
% counter rotation
\scope[rotate around={-\pingu@x@graduate@angle:(\pingu@name-head)}]
\pingu@draw[line width=\pingu@x@tassel@width]{\pingu@color@graduate@tassel} \pingu@x@tassel@start to[out=-45,in=90] ++(.2*\pingu@x@tassel@length,-\pingu@x@tassel@length) coordinate(@);
\pingu@block{\pingu@color@graduate@tassel@drop} (@) circle[x radius=\pingu@x@tassel@drop@size, y radius=1.75*\pingu@x@tassel@drop@size];
\endscope
\endscope}

\pingu@create@extra{cap}{%
  cap/.default      = pingu@bronze,
  cap/.code         = \pingu@set@extra{cap}{true}\pingu@color{cap}{#1},
  cap padding/.code = {\def\pingu@x@cap@padding{#1}},
  cap extra height/.code = {\def\pingu@x@cap@height{#1}},
}{cap padding=.8mm, cap extra height=0pt}

\def\pingu@draw@ea@cap{%
\pingu@layer{foreground}[]
\pingu@block[rounded corners=.7mm]{\pingu@color@cap} ([xshift=.25mm]\pingu@name-wing-left-start) to[bend left=4] ([xshift=-\pingu@x@cap@padding]\pingu@name-wings-side-left) to[bend right=3]
([yshift=\pingu@x@cap@height]\pingu@name-head)
to[bend right=3]
([xshift=\pingu@x@cap@padding]\pingu@name-wings-side-right) [rounded corners=.15mm] to[bend left=4] ([xshift=-.25mm]\pingu@name-wing-right-start)
to[bend left=8]
([xshift=-\pingu@x@cap@padding]\pingu@name-wings-side-right)
[rounded corners=.15mm]
to[bend left=32] ++(\pingu@w@half+\pingu@x@cap@padding,\pingu@w@half+\pingu@one)
to[bend left=32] ++(\pingu@w@half+\pingu@x@cap@padding,-\pingu@w@half-\pingu@one)
to[bend left=8] cycle;
\endpingu@layer
}

\pingu@create@extra{constructionhelmet}{%
  construction helmet/.default      = pingu@yellow,
  construction helmet/.code         = \pingu@set@extra{constructionhelmet}{true}\pingu@color{constructionhelmet}{#1},
  construction helmet padding/.code = {\def\pingu@x@constructionhelmet@padding{#1}},
  construction helmet extra height/.code = {\def\pingu@x@constructionhelmet@height{#1}},
  construction helmet position/.code args  = {#1:(#2,#3)#4}{\def\pingu@x@constructionhelmet@angle{#1}\def\pingu@x@constructionhelmet@xshift{#2}\def\pingu@x@constructionhelmet@yshift{#3}\def\pingu@x@constructionhelmet@scale{#4}},
}{construction helmet padding=.325cm, construction helmet extra height=0pt,construction helmet position={-.5:(.05mm,-1.25mm)1}}

\newdimen\pingu@constructionhelmet@w@half \pingu@constructionhelmet@w@half=.85cm
\def\pingu@draw@ea@constructionhelmet{%
\scope[rotate around={\pingu@x@constructionhelmet@angle:(\pingu@name-head-top)},shift={(\pingu@name-head-top)},shift={(\pingu@x@constructionhelmet@xshift,\pingu@x@constructionhelmet@yshift)},scale=\pingu@x@constructionhelmet@scale]
\pingu@block{\pingu@color@constructionhelmet} (0,-.25cm)++(180:\pingu@constructionhelmet@w@half{} and \pingu@x@constructionhelmet@padding) arc (180:360:\pingu@constructionhelmet@w@half{} and \pingu@x@constructionhelmet@padding) arc (0:180:\pingu@constructionhelmet@w@half{} and .2cm) -- cycle;
\scope
\pingu@block{\pingu@color@constructionhelmet!93!pingu@black} (0,-.25cm)++(0:{.95\pingu@constructionhelmet@w@half} and .675cm) arc (0:180:{.95\pingu@constructionhelmet@w@half} and .675cm) coordinate[pos=.212] (@a) coordinate[pos=.256] (@aa) coordinate[pos=.788] (@b) coordinate[pos=.744] (@bb) arc (180:360:{.95\pingu@constructionhelmet@w@half} and .125cm) -- cycle;
\clip  (0,-.25cm)++(0:{.95\pingu@constructionhelmet@w@half} and .675cm) arc (0:180:{.95\pingu@constructionhelmet@w@half} and .675cm) arc (180:360:{.95\pingu@constructionhelmet@w@half} and .125cm) -- cycle;
\pingu@block{\pingu@color@constructionhelmet!99!pingu@black} (-.75mm,-.25cm-.125cm) to[bend left=1] ++ (0,.675cm+.125cm) -- ++(1.5mm,0) to[bend right=1] ++(0,-.675cm-.125cm) -- cycle;
\pingu@block{\pingu@color@constructionhelmet!99!pingu@black} (-.95mm,-.25cm-.125cm) to[bend left=3] ++ (-8mm,.675cm+.125cm) -- ++(1.5mm,0) to[bend right=3] ++(8mm,-.675cm-.125cm) -- cycle;
\pingu@block{\pingu@color@constructionhelmet!99!pingu@black} (-.55mm,-.25cm-.125cm) to[bend right=3] ++ (8mm,.675cm+.125cm) -- ++(1.5mm,0) to[bend left=3] ++(-8mm,-.675cm-.125cm) -- cycle;
\endscope
% get the 3d wobbles
\pingu@block[rounded corners=.03mm]{\pingu@color@constructionhelmet!99!pingu@black} (-.75mm,-.25cm+.675cm-.25mm) -- ++(0,.3mm) -| ++(1.5mm,-.3mm) -- cycle;
\pingu@block{\pingu@color@constructionhelmet!99!pingu@black} (@a) to[bend right=14] (@aa);
\pingu@block{\pingu@color@constructionhelmet!99!pingu@black} (@bb) to[bend right=14] (@b);
\endscope
}

\pingu@create@extra{conicalhat}{%
  conical hat/.default      = pingu@bronze,
  conical hat/.code         = \pingu@set@extra{conicalhat}{true}\pingu@color{conicalhat}{#1},
  conical hat rounding/.code = {\def\pingu@x@conicalhat@rounding{#1}},
  conical hat shade/.code = {\def\pingu@x@conicalhat@shade{#1}},
  conical hat height/.code = {\def\pingu@x@conicalhat@height{#1}},
  conical hat width/.code = {\def\pingu@x@conicalhat@width{#1}},
  conical hat position/.code args  = {#1:(#2,#3)#4}{\def\pingu@x@conicalhat@angle{#1}\def\pingu@x@conicalhat@xshift{#2}\def\pingu@x@conicalhat@yshift{#3}\def\pingu@x@conicalhat@scale{#4}},
}{conical hat position={-15:(2mm,-3mm)1}, conical hat height=8mm, conical hat width=2.25cm,conical hat shade=\pingu@color@conicalhat!80!pingu@black, conical hat rounding=.4pt}

\def\pingu@draw@ea@conicalhat{%
\scope[rotate around={\pingu@x@conicalhat@angle:(\pingu@name-head-top)},shift={(\pingu@name-head-top)},shift={(\pingu@x@conicalhat@xshift,\pingu@x@conicalhat@yshift)},scale=\pingu@x@conicalhat@scale]

\pingu@layer{background}[]
\pingu@block[rounded corners=\pingu@x@conicalhat@rounding]{\pingu@x@conicalhat@shade} (0,-.22cm)++(180:{\pingu@x@conicalhat@width/2+.05mm} and 1mm) coordinate (@) arc (180:360:{\pingu@x@conicalhat@width/2+.05mm} and 1mm) -- ++(.15mm,.3mm) to[bend right=5] ++(-\pingu@x@conicalhat@width/2, \pingu@x@conicalhat@height-.025cm) to[bend right=5] ([xshift=-.15mm,yshift=.3mm]@) -- cycle;
\endpingu@layer

\pingu@block[rounded corners=\pingu@x@conicalhat@rounding]{\pingu@color@conicalhat} (0,-.25cm)++(180:\pingu@x@conicalhat@width/2 and 1mm) coordinate (@) arc (180:0:\pingu@x@conicalhat@width/2 and 1mm) -- ++(.225mm,.6mm) to[bend right=5] ++(-\pingu@x@conicalhat@width/2, \pingu@x@conicalhat@height) to[bend right=5] ([xshift=-.225mm,yshift=.6mm]@) -- cycle;
\endscope
}

\pingu@create@extra{spacehelmet}{%
  space helmet/.default   = pingu@black!45!white,
  space helmet/.code      = \pingu@set@extra{spacehelmet}{true}\pingu@color{spacehelmet}{#1},
  space helmet glass/.code= \pingu@color{spacehelmet@glass}{#1},
  space helmet glass opacity/.code = \def\pingu@x@spacehelmet@glass@opacity{#1},
  space helmet position/.code args  = {#1:(#2,#3)#4}{\def\pingu@x@spacehelmet@angle{#1}\def\pingu@x@spacehelmet@xshift{#2}\def\pingu@x@spacehelmet@yshift{#3}\def\pingu@x@spacehelmet@scale{#4}},
}{space helmet position={-2:(.35mm,0)1},space helmet glass=pingu@blue!40!pingu@yellow!50!white,space helmet glass opacity=.33}

\newdimen\pingu@spacehelmet@w@half \pingu@spacehelmet@w@half=.935cm
\newdimen\pingu@spacehelmet@h \pingu@spacehelmet@h=1.125cm
\def\pingu@draw@ea@spacehelmet{%
\scope[rotate around={\pingu@x@spacehelmet@angle:(\pingu@name-head-top)},shift={(\pingu@name-head-top)},shift={(\pingu@x@spacehelmet@xshift,\pingu@x@spacehelmet@yshift)},scale=\pingu@x@spacehelmet@scale]
\pingu@block[opacity=\pingu@x@spacehelmet@glass@opacity]{\pingu@color@spacehelmet@glass} (\pingu@name-head-center) ellipse [x radius=.9\pingu@spacehelmet@w@half, y radius=.45\pingu@spacehelmet@h];

\pingu@block[/pingu/@draw=\pingu@color@spacehelmet,thick, even odd rule]{\pingu@color@spacehelmet} 
    ([yshift=-1mm]\pingu@name-wings-side-right) to[bend right=57] ([yshift=-1mm]\pingu@name-wings-side-left)
    arc (0:180:\pingu@spacehelmet@w@half{} and \pingu@spacehelmet@h) -- cycle
    (\pingu@name-head-center) ellipse [x radius=.9\pingu@spacehelmet@w@half, y radius=.45\pingu@spacehelmet@h];
\endscope}

\pingu@create@extra{witchhat}{%
  witch hat/.code      = \pingu@set@extra{witchhat}{true}\pingu@color{witchhat}{#1},
  witch hat/.default   = pingu@purple!40!black,
  witch hat base/.code = \pingu@color{witchhat@base}{#1},
  witch hat coronal/.code = \pingu@color{witchhat@coronal}{#1},
  witch hat ribbon/.code = \pingu@color{witchhat@ribbon}{#1},
  witch hat band/.code = \pingu@color{witchhat@band}{#1},
  witch hat position/.code args  = {#1:(#2,#3)#4}{\def\pingu@x@witchhat@angle{#1}\def\pingu@x@witchhat@xshift{#2}\def\pingu@x@witchhat@yshift{#3}\def\pingu@x@witchhat@scale{#4}},
}{witch hat position={-7:(.625mm,.45mm){1.15}},witch hat base=\pingu@color@witchhat,witch hat coronal=\pingu@color@witchhat!91!white,witch hat ribbon=\pingu@color@witchhat!87!white,witch hat band=!hide}

\newdimen\pingu@witchhat@w@half \pingu@witchhat@w@half=1.125cm
\newdimen\pingu@witchhat@h \pingu@witchhat@h=1.3cm
\def\pingupathwitchhatupper{[rounded corners=.65mm](-.625cm,-.25cm) -- ++(.8cm,\pingu@witchhat@h-4.5mm) -- ++(6.5mm,4.5mm) -- ++(-1.5mm,-4.5mm) -- ++(-1.25mm,-\pingu@witchhat@h+4.5mm)}
\def\pingu@draw@ea@witchhat{%
\scope[rotate around={\pingu@x@witchhat@angle:(\pingu@name-head-top)},shift={(\pingu@name-head-top)},shift={(\pingu@x@witchhat@xshift,\pingu@x@witchhat@yshift)},scale=\pingu@x@witchhat@scale]
\pingu@draw[semithick]{\pingu@color@witchhat@band} (-.615cm,-.25cm) to[out=-100,in=180] ++(.5cm,-1.1cm) to[bend right=5] ++(3.5mm,.1mm) to[out=0,in=-78] ++(.433cm,1.1cm);
\pingu@block[/pingu/@draw=\pingu@color@witchhat@coronal,thick]{\pingu@color@witchhat@base} (0,-.25cm)++(180:\pingu@witchhat@w@half{} and .15cm) arc (180:360:\pingu@witchhat@w@half{} and .15cm) arc (0:180:\pingu@witchhat@w@half{} and .115cm) -- cycle;
\pingu@block{\pingu@color@witchhat} \pingupathwitchhatupper;
\clip\pingupathwitchhatupper;
\pingu@block{\pingu@color@witchhat@ribbon} (\z@,.2mm) ellipse [x radius=.95\pingu@witchhat@w@half, y radius=.12cm];
\pingu@block{\pingu@color@witchhat} (\z@,.134cm) ellipse [x radius=.95\pingu@witchhat@w@half, y radius=.12cm];
\endscope
}


\pingu@create@extra{mitra}{%
  mitra/.default     = pingu@red!67!pingu@black,%pingu@black!90!black,
  mitra/.code        = \pingu@set@extra{mitra}{true}\pingu@color{mitra}{#1},
  mitra height/.code = {\def\pingu@x@mitra@height{#1}},
  mitra background/.code = \pingu@color{mitra@background}{#1},
  mitra overset/.code = {\def\pingu@x@mitra@overset{#1}},
  mitra lower angle/.code = {\def\pingu@x@mitra@lowerangle{#1}},
  mitra upper angle/.code = {\def\pingu@x@mitra@upperangle{#1}},
  mitra lower band/.code = \pingu@color{mitra@lower@band}{#1},
  mitra lower band height/.code = {\def\pingu@x@mitra@lowerband@height{#1}},
  mitra upper band/.code = \pingu@color{mitra@upper@band}{#1},
  mitra upper band height/.code = {\def\pingu@x@mitra@upperband@height{#1}},
  mitra center band/.code = \pingu@color{mitra@center@band}{#1},
  mitra center band width/.code = {\def\pingu@x@mitra@centerband@width{#1}},
  mitra position/.code args  = {#1:(#2,#3)#4}{\def\pingu@x@mitra@angle{#1}\def\pingu@x@mitra@xshift{#2}\def\pingu@x@mitra@yshift{#3}\def\pingu@x@mitra@scale{#4}},
}{mitra position={0:(0,0)1},mitra height=1.125cm,mitra overset=1.25mm,mitra lower angle=125,mitra upper angle=-35,mitra lower band=pingu@yellow!75!pingu@black,mitra center band=\pingu@color@mitra@lower@band,mitra lower band height=.2,mitra center band width={2*\pingu@x@mitra@lowerband@height},mitra upper band=\pingu@color@mitra@lower@band,mitra upper band height={1.5*\pingu@x@mitra@lowerband@height},mitra background=\pingu@color@mitra!80!pingu@black}

\newdimen\pingu@mitra@w@half \pingu@mitra@w@half=.625cm
\def\pingu@x@mitra@path{(0,-.2185cm)++(180:\pingu@mitra@w@half{} and .035cm) arc (180:360:\pingu@mitra@w@half{} and .035cm) [rounded corners=1pt] -- ++(\pingu@x@mitra@overset,.3*\pingu@x@mitra@height) to[out=\pingu@x@mitra@lowerangle,in=\pingu@x@mitra@upperangle] ++(-\pingu@x@mitra@overset-\pingu@mitra@w@half,.7*\pingu@x@mitra@height)
to[out=180-\pingu@x@mitra@upperangle,in=180-\pingu@x@mitra@lowerangle] ++(-\pingu@x@mitra@overset-\pingu@mitra@w@half,-.7*\pingu@x@mitra@height) [sharp corners]  -- cycle}
\def\pingu@draw@ea@mitra{%
\scope[rotate around={\pingu@x@mitra@angle:(\pingu@name-head-top)},shift={(\pingu@name-head-top)},shift={(\pingu@x@mitra@xshift,\pingu@x@mitra@yshift)},scale=\pingu@x@mitra@scale]
\pingu@block{\pingu@color@mitra@background} (0,-.2185cm)++(180:\pingu@mitra@w@half{} and .035cm) arc (180:360:\pingu@mitra@w@half{} and .035cm) [rounded corners=1pt] -- ++(\pingu@x@mitra@overset,.3*\pingu@x@mitra@height) to[out=\pingu@x@mitra@lowerangle,in=\pingu@x@mitra@upperangle] ++(-\pingu@x@mitra@overset-\pingu@mitra@w@half-.66mm,.7*\pingu@x@mitra@height-.1mm)
to[out=180-\pingu@x@mitra@upperangle+2,in=180-\pingu@x@mitra@lowerangle-2] ++(-\pingu@x@mitra@overset-\pingu@mitra@w@half+.66mm,-.7*\pingu@x@mitra@height+.1mm) [sharp corners]  -- cycle;
\pingu@block{\pingu@color@mitra} \pingu@x@mitra@path;
% \pingu@block{\pingu@color@mitra} \pingupathmitraupper;
\scope\clip\pingu@x@mitra@path;
% TODO: switch to factors non relative to \pingu@x@mitra@overset
\pingu@block{\pingu@color@mitra@lower@band} (0,-.2185cm)++(180:\pingu@mitra@w@half{} and .035cm) arc (180:360:\pingu@mitra@w@half{} and .035cm) -- ++(\pingu@x@mitra@lowerband@height*\pingu@x@mitra@overset,\pingu@x@mitra@lowerband@height*.3*\pingu@x@mitra@height) arc (0:-180:{\pingu@x@mitra@lowerband@height*\pingu@x@mitra@overset+\pingu@mitra@w@half} and .035cm)  -- cycle;
\pingu@block{\pingu@color@mitra@center@band} (\pingu@x@mitra@centerband@width*\pingu@x@mitra@overset+.1mm,-.2185cm) to[bend right=4] ++(0,\pingu@x@mitra@height) to[bend right] ++(-2*\pingu@x@mitra@centerband@width*\pingu@x@mitra@overset-.1mm,0) to[bend left=4] ++(0,-\pingu@x@mitra@height) -- cycle;
\pingu@block{\pingu@color@mitra@upper@band} (0,.3*\pingu@x@mitra@height-.2185cm-0.5*\pingu@x@mitra@upperband@height*.3*\pingu@x@mitra@height)++(180:{\pingu@x@mitra@overset+\pingu@mitra@w@half} and .035cm) arc (180:360:{\pingu@x@mitra@overset+\pingu@mitra@w@half} and .035cm) -- ++(0,\pingu@x@mitra@upperband@height*.3*\pingu@x@mitra@height) arc (0:-180:{\pingu@x@mitra@overset+\pingu@mitra@w@half} and .035cm)  -- cycle;
\endscope\endscope}
% #endregion

% #region horse-lib
\colorlet{base@a}{lightgray!95!black}
\colorlet{base@b}{lightgray!79!black}

\colorlet{a}{lightgray!63!black}
\colorlet{b}{lightgray!81!black}
\def\basew{12}
\def\pingu@@horse@scale{.1}

\def\pingu@@horse@@main{(1.275,.55) -- ++(\if@pingu@@horse@@donkey@.05\else.1\fi,.2) -- ++(\if@pingu@@horse@@donkey@-.2\else-.25\fi,.25) to[bend right=4] ++(-.425,1.75) to[bend left=15] ++(.05,.2) to[bend right=30] ++(-.1,1.9) to[bend left=30] ++(0,1.65) coordinate(@back) to[bend left=30] ++(2,.625) to[bend right=18,looseness=.8] ++(3.25,-.1) [rounded corners=2*\pingu@@horse@scale] coordinate(@hair) to[out=34,in=185] ++(3,1.3) to[bend left=19] coordinate[pos=.5](@ear) ++(.85,-.4) to[bend left=5] ++(.24,-.45) to[bend right=20] ++(\if@pingu@@horse@@donkey@.25\else0\fi,\if@pingu@@horse@@donkey@-1.2\else-.7\fi) to[bend left=2] ++(.1,-.55) to[out=-85,in=-60,looseness=.75] ++(\if@pingu@@horse@@donkey@-.55\else-.475\fi,\if@pingu@@horse@@donkey@-.45\else-.35\fi) coordinate(@mouth) to[out=-135,in=-120] ++(\if@pingu@@horse@@donkey@-.4\else-.37\fi,\if@pingu@@horse@@donkey@.2\else.25\fi) -- ++(0,.1)
to[out=125,in=-68] ++(-.58,.615) coordinate (@mouth-low)
to[out=215,in=80] ++(-1.25,-2) to[bend left=24] ++(-.65,-1) to[out=258,in=86] ++(-.42,-1.25)  to[bend left=3] ++(-.2,-.6) to[bend right=10] ++(-.14,-1.15) to[bend left=2] coordinate[pos=.62] (@hooffront) ++(.355,-.565) to[bend left=15] ++(-.4,-.075) to[bend left=10] ++(-.28,.1) to[bend left=9] ++(.06,.3) to[bend right=9] ++(-.2,.4) to[out=80,in=-80] ++(.138,1.4) to[out=70,in=-103] ++(.2,1.3) to[bend right=10] ++(-.225,.44) coordinate (@frontleg) to[out=196,in=\if@pingu@@horse@@donkey@-65\else-25\fi] ++(-3.3,\if@pingu@@horse@@donkey@.4\else.575\fi) coordinate (@backleg) to[bend right=\if@pingu@@horse@@donkey@16\else10\fi] ++(-.8,\if@pingu@@horse@@donkey@-1.375\else-1.5\fi) to[bend right=\if@pingu@@horse@@donkey@9\else20\fi] ++(.1,-2.35) -- ++(\if@pingu@@horse@@donkey@.1\else.2\fi,-.25)
coordinate (@hoofback) to[bend right=\if@pingu@@horse@@donkey@9\else8\fi] ++(.15,-.26) to[bend left=10] ++(\if@pingu@@horse@@donkey@-.66\else-.55\fi,\if@pingu@@horse@@donkey@-.15\else-.05\fi) -- cycle}

% #1 is the wing for the color and key assignments
\def\pingu@@drawer@horse#1{
% this ensures all coordinates are set in place
% i know this i inefficient, but atm this is of no greater
% concern -- i can not use layers as they would clash with that
% of the penguin and who wants that... no one does!
% penguins deserve freedom!
\path \pingu@@horse@@main;

% no we draw "behind" the horse:

% Sockel
\csname if@pingu@x@horse@#1@base@\endcsname
\pingu@block[draw=\csname pingu@color@horse#1@base@shade@draw\endcsname,line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1@base@shade\endcsname} (4.35-\basew/2,.433) -- ++(0,-.5) arc(180:360:\basew/2 and 1) -- ++(0,.5) arc(360:180:\basew/2 and 1);
\pingu@block[draw=\csname pingu@color@horse#1@base@draw\endcsname,line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1@base\endcsname} (4.35,.433) ellipse[x radius=\basew/2,y radius=1];
\fi
% background front leg
\pingu@block[draw=\csname pingu@color@horse#1@draw\endcsname,line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1\endcsname} [rounded corners=1*\pingu@@horse@scale](@frontleg) to[out=266,in=85] ++(.09,-.5) to[bend left=10] ++(-.15,-.8)
to[bend right=7] ++(-.05,-.2) to[bend left=13] ++(-.2,-1.15) to[bend right=13] ++(.15,-.2) to[bend left=10] ++(-.07,-.3)  to[bend right=100] ++(.45,-.1) to[bend right=10] coordinate[pos=0.08](@hooffront@) ([yshift=5mm,xshift=3mm]@frontleg) -- cycle;
\pingu@block[draw=\csname pingu@color@horse#1@fr@hoof\endcsname!80!pingu@black,line width=2pt*\pingu@@horse@scale,rounded corners=.12]{\csname pingu@color@horse#1@fr@hoof\endcsname} (@hooffront@) to[bend left=2] ++(0,-.565*.665) to[bend left=59] ++(-.225,-.08) -- ++(-.02,.03) to[bend left=20] ++(-.315,.11) to[bend right=6] ++(.092,.2) to[bend right=25] cycle;
% background back le0
\pingu@block[draw=\csname pingu@color@horse#1@draw\endcsname,line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1\endcsname} [rounded corners=1*\pingu@@horse@scale](@backleg) to[out=-115,in=\if@pingu@@horse@@donkey@120\else130\fi] ++(-.3,-3.5) -- ++(.2,-.3) coordinate(@hoofback@) to[bend left] ++(-.5,-.1)
-- ++(\if@pingu@@horse@@donkey@-.2\else-.05\fi,.15) -- ++(0,.15) to[bend left=\if@pingu@@horse@@donkey@45\else60\fi] cycle;
\pingu@block[draw=\csname pingu@color@horse#1@br@hoof\endcsname!80!pingu@black,line width=2pt*\pingu@@horse@scale]{\csname pingu@color@horse#1@br@hoof\endcsname} (@hoofback@) to[bend right=\if@pingu@@horse@@donkey@9\else9\fi] ++(.206,-.265) to[bend left=10] ++(\if@pingu@@horse@@donkey@-.66\else-.55\fi,\if@pingu@@horse@@donkey@-.15\else-.05\fi) -- ++(-1.73mm,2.42mm) to[bend right=6] cycle;

\if@pingu@@horse@@donkey@
\pingu@block[draw=\csname pingu@color@horse#1@tail@draw\endcsname,line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1@tail\endcsname} [rounded corners=1*\pingu@@horse@scale](@back) to[out=215,in=95] ++(-.1,-2) to[out=270,in=92] ++(0,-.75) [sharp corners] to[bend right=20] coordinate[pos=.5] (@) ++(.15,0) to[bend right=10] cycle;
% TODO: hide support
%\node[draw=\csname pingu@color@horse#1@tail@draw\endcsname,fill=\csname pingu@color@horse#1@tail\endcsname,cloud,cloud puffs=30,cloud ignores aspect,scale=1.33*\pingu@@horse@scale,yshift=16mm,rotate=-5,line width=\@pingu@@horse@lw*\pingu@@horse@scale] at (@) {\rotatebox{90}{\phantom{A}\hskip7.5em}};
\scope[rotate around={180:(@)}] % adapted from the broom
\pingu@block[rounded corners=.44pt,draw=\csname pingu@color@horse#1@tail@draw\endcsname]{\csname pingu@color@horse#1@tail\endcsname} (@)++(-1mm,-2mm) to[out=115,in=240] ++(3mm,12.5mm) to[out=300,in=65] ([xshift=.95mm,yshift=-2mm]@) to[bend right=4] ([xshift=-.75mm,yshift=-2mm]@) -- cycle;
\pingu@block[rounded corners=.44pt,draw=\csname pingu@color@horse#1@tail@draw\endcsname]{\csname pingu@color@horse#1@tail\endcsname} (@)++(-1mm,-2mm) to[out=115,in=240] coordinate[pos=.17] (@r) coordinate[pos=.19] (@r2)  ++(-.75mm,10.5mm) to[out=300,in=65] ([xshift=.95mm,yshift=-2mm]@) to[bend right=4] ([xshift=-.75mm,yshift=-2mm]@) -- cycle;
\pingu@block[rounded corners=.44pt,draw=\csname pingu@color@horse#1@tail@draw\endcsname]{\csname pingu@color@horse#1@tail\endcsname}(@)++(-.5mm,-1.5mm) to[out=115,in=240] ++(.5mm,12mm) to[out=300,in=65] ([xshift=.5mm,yshift=-1.5mm]@) -- cycle;
\endscope
\else
\pingu@block[draw=\csname pingu@color@horse#1@tail@draw\endcsname,line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1@tail\endcsname} [rounded corners=1*\pingu@@horse@scale](@back) to[out=215,in=90] ++(-.4,-2.5) to[out=270,in=92] ++(0,-2.8) [sharp corners] to[bend right=20] ++(.6,0) to[bend right=10] cycle;
\fi

% back ear
\if@pingu@@horse@@donkey@
\pingu@block[draw=\csname pingu@color@horse#1@draw\endcsname,line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1@ears\endcsname} ([xshift=.2mm,yshift=-1.5mm]@ear) to[bend left=20] ++(.373,1.465) coordinate(@) to[bend left=10] ++(-.15,-1.5);
\else
\pingu@block[draw=\csname pingu@color@horse#1@draw\endcsname,line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1@ears\endcsname} ([xshift=.2mm,yshift=-1.5mm]@ear) to[bend left=20] ++(.373,.565) coordinate(@) to[bend left=10] ++(-.15,-.75);
\fi
% and here comes the wheeee (imagine-horse-sound)
\pingu@block[draw=\csname pingu@color@horse#1@draw\endcsname,line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1\endcsname} [rounded corners=1*\pingu@@horse@scale] \pingu@@horse@@main;

\pingu@draw[line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1@draw\endcsname} ([yshift=-.1mm]@mouth-low) to[bend left=12] ++(.06,.65);
\pingu@draw[line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1@mouth\endcsname} ([yshift=-.115mm]@mouth) -- ++(-.035,.225);

\edef\pingu@tmp{\if@pingu@@horse@@donkey@4.5mm\else3.85mm\fi}%
\edef\pingu@tmpb{\if@pingu@@horse@@donkey@3.65mm\else2.45mm\fi}%
\pingu@draw[line width=\@pingu@@horse@lw*\pingu@@horse@scale,line join=round]{\csname pingu@color@horse#1@nose\endcsname} ([xshift=\pingu@tmp,yshift=\pingu@tmpb]@mouth) to[out=140,in=10] ++(-.17,-.074) to[bend right=49] cycle;

\pingu@draw[line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1@draw\endcsname} ([yshift=-.35mm]@frontleg) to[bend left=12] ++(.01,.325);
\pingu@draw[line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1@draw\endcsname} ([yshift=-.2mm]@backleg) to[bend right=13] ++(.25,.425);

\if@pingu@@horse@@donkey@
\pingu@block[draw=\csname pingu@color@horse#1@mane@draw\endcsname,line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1@mane\endcsname} [rounded corners=1*\pingu@@horse@scale](@hair) to[out=34,in=185] ++(3,1.3) to[bend left=10] ++(.415,-.1) -- ++(-.1,-.25) to[out=186,in=35] ([yshift=-4mm,xshift=1.5mm]@hair) -- cycle;

\pingu@block[draw=\csname pingu@color@horse#1@thatch@draw\endcsname,line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1@thatch\endcsname} [rounded corners=1*\pingu@@horse@scale]([xshift=2.1mm,yshift=-1.05mm]@ear) -- ++(-.1,-.2) to[bend left=4] ++(.45,-.275) to[bend right=9] cycle;
\else
\pingu@block[draw=\csname pingu@color@horse#1@mane@draw\endcsname,line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1@mane\endcsname} [rounded corners=1*\pingu@@horse@scale](@hair) to[out=34,in=185] ++(3,1.3) to[bend left=10] ++(.415,-.1) -- ++(-.1,-.4) to[out=194,in=30] ([yshift=-11.5mm,xshift=1.5mm]@hair) -- cycle;

\pingu@block[draw=\csname pingu@color@horse#1@thatch@draw\endcsname,line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1@thatch\endcsname} [rounded corners=1*\pingu@@horse@scale]([xshift=2mm,yshift=-1mm]@ear) -- ++(-.1,-.3275) to[bend left=4] ++(.455,-.175) to[bend right=9] cycle;
\fi

% ear
\if@pingu@@horse@@donkey@
\pingu@block[draw=\csname pingu@color@horse#1@draw\endcsname,line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1@ears\endcsname} ([xshift=-1mm,yshift=-1mm]@ear) to[bend left=15] ++(.393,1.685) coordinate(@) to[bend right=17] ++(-.15,-1.8);
\pingu@block[draw=\csname pingu@color@horse#1@draw\endcsname,line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1@ears\endcsname} (@) to[bend right=17] ++(-.15,-1.8) to[bend right=14] cycle;
\else
\pingu@block[draw=\csname pingu@color@horse#1@draw\endcsname,line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1@ears\endcsname} ([xshift=-.75mm,yshift=-1mm]@ear) to[bend left=20] ++(.393,.585) coordinate(@) to[bend right=10] ++(-.15,-.7);
\pingu@block[draw=\csname pingu@color@horse#1@draw\endcsname,line width=\@pingu@@horse@lw*\pingu@@horse@scale]{\csname pingu@color@horse#1@ears\endcsname} (@) to[bend right=7] ++(-.15,-.7) to[bend right=14] cycle;
\fi

% the eye; this is no error it has draw as fill
\pingu@block{\csname pingu@color@horse#1@eyes\endcsname} [rounded corners=.25*\pingu@@horse@scale] ([xshift=3mm,yshift=-7.5mm]@ear) to[bend right=20] ++(.125,-.2) to[bend right=50] ++(.1,.125) to[bend left=15] cycle;

\pingu@block[draw=\csname pingu@color@horse#1@fl@hoof\endcsname!80!pingu@black,line width=2pt*\pingu@@horse@scale]{\csname pingu@color@horse#1@fl@hoof\endcsname} (@hooffront) to[bend left=2] ++(.355*.49,-.545*.49) to[bend left=11] ++(-.45-.295,-.05+0.033)to[bend right=2] ++(.046,.29) to[bend right=10] cycle;
\pingu@block[draw=\csname pingu@color@horse#1@bl@hoof\endcsname!80!pingu@black,line width=2pt*\pingu@@horse@scale]{\csname pingu@color@horse#1@bl@hoof\endcsname} (@hoofback) to[bend right=\if@pingu@@horse@@donkey@9\else8\fi] ++(.15,-.26) to[bend left=10] ++(\if@pingu@@horse@@donkey@-.66\else-.55\fi,\if@pingu@@horse@@donkey@-.15\else-.05\fi) -- ++(-1.73mm,2.42mm) to[bend right=6] cycle; %to[bend left=2] ++(.355*.65,-.565*.65) to[bend left=15] ++(-.395,-.075) to[bend left=10] ++(-.293,.105) to[bend left=9] ++(.06,.3) to[bend left=5] cycle;
}

% universal switch for all three positions
\newif\if@pingu@@horse@@donkey@

\newif\if@pingu@x@horse@left@flip@
\newif\if@pingu@x@horse@right@flip@
\newif\if@pingu@x@horse@left@base@
\newif\if@pingu@x@horse@right@base@
\newif\if@pingu@x@horse@left@donkey@
\newif\if@pingu@x@horse@right@donkey@
\pingu@create@wing@extra{horse}{%
    horse \@lr/.code                       = {\pingu@set@extra{horse\@lr}{true}\pingu@color{horse\@lr}{##1}},
    horse \@lr/.default                    = pingu@bronze!80!pingu@black,
    horse \@lr\space flip/.is if           = @pingu@x@horse@\@lr @flip@,
    horse \@lr\space donkey/.is if         = @pingu@x@horse@\@lr @donkey@,
    horse \@lr\space has base/.is if       = @pingu@x@horse@\@lr @base@,
    horse \@lr\space draw/.code            = \pingu@color{horse\@lr @draw}{##1},%
    horse \@lr\space line width/.code      = \@namedef{pingu@horse\@lr @x@line@width}{##1},%
    horse \@lr\space mane/.code            = \pingu@color{horse\@lr @mane}{##1},%
    horse \@lr\space mane draw/.code       = \pingu@color{horse\@lr @mane@draw}{##1},%
    horse \@lr\space thatch/.code          = \pingu@color{horse\@lr @thatch}{##1},%
    horse \@lr\space thatch draw/.code     = \pingu@color{horse\@lr @thatch@draw}{##1},%
    horse \@lr\space tail/.code            = \pingu@color{horse\@lr @tail}{##1},%
    horse \@lr\space tail draw/.code       = \pingu@color{horse\@lr @tail@draw}{##1},%
    horse \@lr\space eyes/.code            = \pingu@color{horse\@lr @eyes}{##1},%
    horse \@lr\space eye/.forward to       = /pingu/horse \@lr\space eyes,%
    horse \@lr\space mouth/.code           = \pingu@color{horse\@lr @mouth}{##1},%
    horse \@lr\space nose/.code            = \pingu@color{horse\@lr @nose}{##1},%
    horse \@lr\space ears/.code            = \pingu@color{horse\@lr @ears}{##1},%
    horse \@lr\space base/.code            = \pingu@color{horse\@lr @base}{##1},%
    horse \@lr\space base draw/.code       = \pingu@color{horse\@lr @base@draw}{##1},%
    horse \@lr\space base shade/.code      = \pingu@color{horse\@lr @base@shade}{##1},%
    horse \@lr\space base shade draw/.code = \pingu@color{horse\@lr @base@shade@draw}{##1},%
    horse \@lr\space front left hoof/.code = \pingu@color{horse\@lr @fl@hoof}{##1},%
    horse \@lr\space front right hoof/.code= \pingu@color{horse\@lr @fr@hoof}{##1},%
    horse \@lr\space back left hoof/.code  = \pingu@color{horse\@lr @bl@hoof}{##1},%
    horse \@lr\space back right hoof/.code = \pingu@color{horse\@lr @br@hoof}{##1},%
    horse \@lr\space front hoofs/.style    = {/pingu/horse \@lr\space front left hoof=##1,/pingu/horse \@lr\space front right hoof=##1},
    horse \@lr\space back hoofs/.style     = {/pingu/horse \@lr\space back left hoof=##1,/pingu/horse \@lr\space back right hoof=##1},
    horse \@lr\space hoofs/.style          = {/pingu/horse \@lr\space front hoofs=##1,/pingu/horse \@lr\space back hoofs=##1},
    horse \@lr\space hoofs/.default        = gray!80!white,
    % TODO: allow colors to be styles?
    horse \@lr\space xshift/.code          = \@namedef{pingu@x@horse\@lr @xshift}{##1},
    horse \@lr\space yshift/.code          = \@namedef{pingu@x@horse\@lr @yshift}{##1},
    horse \@lr\space on base/.style        ={/pingu/horse \@lr\space yshift=4cm},
}{horse \@lr\space draw=\csname pingu@color@horse\@lr\endcsname!80!pingu@black,horse \@lr\space mane=\csname pingu@color@horse\@lr\endcsname!86!pingu@white,horse \@lr\space mane draw=\csname pingu@color@horse\@lr @mane\endcsname!80!pingu@black,horse \@lr\space eyes=\csname pingu@color@horse\@lr @draw\endcsname,horse \@lr\space mouth=\csname pingu@color@horse\@lr @draw\endcsname,horse \@lr\space nose=\csname pingu@color@horse\@lr @draw\endcsname,horse \@lr\space ears=\csname pingu@color@horse\@lr\endcsname,horse \@lr\space thatch=\csname pingu@color@horse\@lr @mane\endcsname,horse \@lr\space thatch draw=\csname pingu@color@horse\@lr @thatch\endcsname!80!pingu@black,horse \@lr\space tail=\csname pingu@color@horse\@lr @mane\endcsname,horse \@lr\space tail draw=\csname pingu@color@horse\@lr @tail\endcsname!80!pingu@black,horse \@lr\space has base=false,horse \@lr\space base=lightgray!90!black,horse \@lr\space base draw=\csname pingu@color@horse\@lr @base\endcsname!91!pingu@black,horse \@lr\space base shade=lightgray!80!black,horse \@lr\space base shade draw=\csname pingu@color@horse\@lr @base@shade\endcsname!91!pingu@black,horse \@lr\space xshift=0pt,horse \@lr\space yshift=0pt,horse \@lr\space flip=\ifx\@lr\pingu@str@wing@left true\else false\fi,horse \@lr\space donkey=false,horse \@lr\space line width=1.75pt,horse \@lr\space hoofs=\@pingu@none}

\def\pingu@draw@wi@horse#1{%
    \pingu@setup@wing{horse}{#1}%
\scope[scale=\pingu@@horse@scale,every path/.append style={line cap=round, line join=round},shift=(\pingu@name-wing-#1),rotate around={\@angle-5:(\pingu@name-wing-#1)}]
\csname if@pingu@x@horse@#1@flip@\endcsname
\scope[xshift=-4cm-\csname pingu@x@horse#1@xshift\endcsname,yshift=-42mm+\csname pingu@x@horse#1@yshift\endcsname]
\else
\scope[xshift=4cm+\csname pingu@x@horse#1@xshift\endcsname,yshift=-42mm+\csname pingu@x@horse#1@yshift\endcsname,xscale=-1]
\fi
\csname if@pingu@x@horse@#1@donkey@\endcsname
    \@pingu@@horse@@donkey@true
\fi
    \edef\@pingu@@horse@lw{\csname pingu@horse#1@x@line@width\endcsname}
    \pingu@@drawer@horse{#1}
    % TODO-SET: hoof
\endscope\endscope
}
% todo: make statue extra
% todo: make horse hat

% to get on horse we create some kind of third wing item: 'on'
% that will be used to initialize all of the colors and keys
\newif\if@pingu@x@horse@on@flip@
\newif\if@pingu@x@horse@on@base@
\newif\if@pingu@x@horse@on@boundingbox@
\newif\if@pingu@x@horse@on@donkey@
% TODO: select keys
% TODO: option so it does not affect the bounding box (default!)
\pingu@create@extra{horseon}{%
    on horse/.code                  = {\pingu@set@extra{horseon}{true}\pingu@color{horseon}{#1}},
    on horse/.default               = pingu@bronze!80!pingu@black,
    horse behind/.style             = {on horse=#1, on horse scale=.325, on horse yshift=6.15cm},
    horse behind/.default           = pingu@bronze!80!pingu@black,
    on horse flip/.is if            = @pingu@x@horse@on@flip@,
    on horse donkey/.is if          = @pingu@x@horse@on@donkey@,
    on horse has base/.is if        = @pingu@x@horse@on@base@,
    on horse has bounding box/.is if = @pingu@x@horse@on@boundingbox@,
    on horse draw/.code             = \pingu@color{horseon@draw}{#1},%
    on horse line width/.code       = \@namedef{pingu@horseon@x@line@width}{#1},%
    on horse mane/.code             = \pingu@color{horseon@mane}{#1},%
    on horse mane draw/.code        = \pingu@color{horseon@mane@draw}{#1},%
    on horse thatch/.code           = \pingu@color{horseon@thatch}{#1},%
    on horse thatch draw/.code      = \pingu@color{horseon@thatch@draw}{#1},%
    on horse tail/.code             = \pingu@color{horseon@tail}{#1},%
    on horse tail draw/.code        = \pingu@color{horseon@tail@draw}{#1},%
    on horse eyes/.code             = \pingu@color{horseon@eyes}{#1},%
    on horse eye/.forward to        = /pingu/on horse eyes,%
    on horse mouth/.code            = \pingu@color{horseon@mouth}{#1},%
    on horse nose/.code             = \pingu@color{horseon@nose}{#1},%
    on horse ears/.code             = \pingu@color{horseon@ears}{#1},%
    on horse base/.code             = \pingu@color{horseon@base}{#1},%
    on horse base draw/.code        = \pingu@color{horseon@base@draw}{#1},%
    on horse base shade/.code       = \pingu@color{horseon@base@shade}{#1},%
    on horse base shade draw/.code  = \pingu@color{horseon@base@shade@draw}{#1},%
    on horse front left hoof/.code  = \pingu@color{horseon@fl@hoof}{#1},%
    on horse front right hoof/.code = \pingu@color{horseon@fr@hoof}{#1},%
    on horse back left hoof/.code   = \pingu@color{horseon@bl@hoof}{#1},%
    on horse back right hoof/.code  = \pingu@color{horseon@br@hoof}{#1},%
    on horse front hoofs/.style     = {/pingu/on horse front left hoof=#1,/pingu/on horse front right hoof=#1},
    on horse back hoofs/.style      = {/pingu/on horse back left hoof=#1,/pingu/on horse back right hoof=#1},
    on horse hoofs/.style           = {/pingu/on horse front hoofs=#1,/pingu/on horse back hoofs=#1},
    on horse hoofs/.default         = gray!80!white,
    on horse xshift/.code           = \@namedef{pingu@x@horseon@xshift}{#1},
    on horse yshift/.code           = \@namedef{pingu@x@horseon@yshift}{#1},
    on horse scale/.code            = \@namedef{pingu@x@horseon@scale}{#1}
}{on horse draw=\pingu@color@horseon!80!pingu@black,on horse mane=\pingu@color@horseon!86!pingu@white,on horse mane draw=\pingu@color@horseon@mane!80!pingu@black,on horse eyes=\pingu@color@horseon@draw,on horse mouth=\pingu@color@horseon@draw,on horse nose=\pingu@color@horseon@draw,on horse ears=\pingu@color@horseon,on horse thatch=\pingu@color@horseon@mane,on horse thatch draw=\pingu@color@horseon@thatch!80!pingu@black,on horse tail=\pingu@color@horseon@mane,on horse tail draw=\pingu@color@horseon@tail!80!pingu@black,on horse has base=false,on horse base=lightgray!90!black,on horse base draw=\pingu@color@horseon@base!91!pingu@black,on horse base shade=lightgray!80!black,on horse base shade draw=\pingu@color@horseon@base@shade!91!pingu@black,on horse xshift=0pt,on horse yshift=0pt,on horse flip=false,on horse scale=0.75,on horse has bounding box=false,on horse donkey=false,on horse line width=1.75pt,on horse hoofs=\@pingu@none}


\def\pingu@draw@eb@horseon{%
\pingu@layer{background}[scale=\pingu@x@horseon@scale,every path/.append style={line cap=round, line join=round},shift=(\pingu@name-bottom-center)]
\if@pingu@x@horse@on@donkey@
    \@pingu@@horse@@donkey@true
\fi
\if@pingu@x@horse@on@flip@
 \scope[xshift=-45mm-\pingu@x@horseon@xshift,yshift=-67mm+\pingu@x@horseon@yshift,xscale=\if@pingu@x@horse@on@donkey@ 1.1\else1\fi,yscale=\if@pingu@@horse@@donkey@.9\else1\fi]
 \else
 \scope[xshift=45mm+\pingu@x@horseon@xshift,yshift=-67mm+\pingu@x@horseon@yshift,xscale=\if@pingu@x@horse@on@donkey@-1.1\else-1\fi,yscale=\if@pingu@@horse@@donkey@.9\else1\fi]
 \fi
\edef\@pingu@@horse@lw{\pingu@horseon@x@line@width}
\if@pingu@x@horse@on@boundingbox@\else\pgfinterruptboundingbox\fi
    \pingu@@drawer@horse{on}
\if@pingu@x@horse@on@boundingbox@\else\endpgfinterruptboundingbox\fi
\endscope\endpingu@layer
}
% #endregion

% #region magic-lib
\pingu@create@wing@extra{handcast}{%
  handcast \@lr/.forward to    = /pingu/hand cast \@lr,
  hand cast \@lr/.code         = {\pingu@set@extra{handcast\@lr}{true}\@namedef{pingu@handcast@\@lr}{##1}},
  hand cast \@lr/.default      = {X},
  handcast \@lr\space color/.forward to    = /pingu/hand cast \@lr\space color,
  hand cast \@lr\space color/.code = \pingu@color{handcast@\@lr @color}{##1},%
}{hand cast \@lr\space color=pingu@purple}
\def\pingu@draw@wi@handcast#1{%
    \pingu@setup@wing{handcast}{#1}%
    \path[rotate around={\@angle:(\pingu@name-wing-#1)}] (\pingu@name-wing-#1)++(0,5mm) node[\csname pingu@color@handcast@#1@color\endcsname] {\@nameuse{pingu@handcast@#1}};
}
% #endregion

% #region medieval-lib
\newif\if@pingu@x@rook@draw@hatch@
\pingu@create@extra{rook}{%
    rook/.code          = \pingu@set@extra{rook}{true}\pingu@color{rook}{#1},
    rook/.default       = pingu@silver,
    rook back/.code     = \pingu@color{rook@back}{#1},
    rook hatch/.is if   = @pingu@x@rook@draw@hatch@,
    rook hatch/.default = true,
    rook shade/.code    = \pingu@color{rook@shade}{#1},
}{rook back=\pingu@color@rook!85!black,rook shade=\pingu@color@rook!92!black,rook hatch}
\def\pingu@draw@ea@rook{%
\if@pingu@do@back@\else\if@pingu@x@rook@draw@hatch@\else\pingu@layer{foreground}[]\fi\fi
    \pingu@block[even odd rule]{\pingu@color@rook} ([xshift=-.2mm]\pingu@name-wings-side-right|-\pingu@name-foot-right) [rounded corners=\p@] to[bend right=9] coordinate[pos=.15] (@tmpe) ([xshift=.2mm]\pingu@name-wings-side-left|-\pingu@name-foot-left) [sharp corners] to[bend right=1.5*\pingu@bend] (\pingu@name-wings-side-left|-\pingu@name-head-top) coordinate (@tmp) to[bend left=3] coordinate[pos=.3] (@tmpc) coordinate[pos=.7] (@tmpd) (\pingu@name-wings-side-right|-\pingu@name-head-top) [rounded corners=\p@] coordinate (@tmpb) to[bend right=1.5*\pingu@bend] cycle \if@pingu@x@rook@draw@hatch@ (\pingu@name-head-center) ellipse[x radius=.8\pingu@w@half, y radius=.45\pingu@w@half]\fi;
    \pingu@block{\pingu@color@rook} (@tmp) to[bend right=2] ++(0,2mm) [rounded corners=.25mm] to[bend left=1] ++(-2mm,-.1mm) -- ++(0,-2.25mm);
    \pingu@block{\pingu@color@rook} (@tmpb) to[bend left=2] ++(0,2mm) [rounded corners=.25mm] to[bend right=1] ++(2mm,-.1mm) -- ++(0,-2.25mm);

    \pingu@block{\pingu@color@rook} (@tmpc)++(-2mm,-.25mm) [rounded corners=.25mm] to[bend left=2] ++(0,2.25mm) to[bend right=1] ++(4mm,.05mm) -- ++(0,-2.25mm);
    \pingu@block{\pingu@color@rook} (@tmpd)++(2mm,-.25mm) [rounded corners=.25mm] to[bend left=2] ++(0,2.25mm) to[bend left=1] ++(-4mm,-.05mm) -- ++(0,-2.25mm);

    % custom shade boi (or gurl, wateva)
    \scope
        \clip ([xshift=-.2mm]\pingu@name-wings-side-right|-\pingu@name-foot-right) [rounded corners=\p@] to[bend right=5] ([xshift=.2mm]\pingu@name-wings-side-left|-\pingu@name-foot-left) [sharp corners] to[bend right=1.5*\pingu@bend] (\pingu@name-wings-side-left|-\pingu@name-head-top) -- ++(0,2mm) to[bend left=3] (\pingu@name-wings-side-right|-\pingu@name-head-top) to[bend right=1.5*\pingu@bend] cycle;
        \if@pingu@x@rook@draw@hatch@
        \clip[/pingu/@invclip] (\pingu@name-head-center) ellipse[x radius=.8\pingu@w@half, y radius=.45\pingu@w@half];
        \fi
        \pingu@block{\pingu@color@rook@shade} (@tmpe) to[bend right=5] ([xshift=.2mm]@tmpe-|@tmp) to[bend right=1.5*\pingu@bend] ([yshift=2mm]@tmp) to[bend left=10] cycle;
    \endscope
    \if@pingu@do@back@\else\if@pingu@x@rook@draw@hatch@\else\endpingu@layer\fi\fi

    \pingu@layer{background}[]
        \pingu@block{\pingu@color@rook@back} (@tmp) to[bend right=3] coordinate[pos=.3] (@tmpc) coordinate[pos=.7] (@tmpd) (@tmpb) to[bend right=30] cycle;
        \pingu@block{\pingu@color@rook@back} (@tmpb) to[bend left=2] ++(0,2mm) [rounded corners=.25mm] to[bend left=1] ++(2mm,.1mm) -- ++(0,-2.25mm);
        \pingu@block{\pingu@color@rook@back} (@tmp) to[bend right=2] ++(0,2mm) [rounded corners=.25mm] to[bend right=1] ++(-2mm,.1mm) -- ++(0,-2.25mm);

        \pingu@block{\pingu@color@rook@back} (@tmpc)++(-2mm,-.49mm) [rounded corners=.25mm] to[bend left=2] ++(0,2.25mm) to[bend right=1] ++(4mm,.05mm) -- ++(0,-2.25mm);
        \pingu@block{\pingu@color@rook@back} (@tmpd)++(2mm,-.49mm) [rounded corners=.25mm] to[bend left=2] ++(0,2.25mm) to[bend left=1] ++(-4mm,-.05mm) -- ++(0,-2.25mm);
    \endpingu@layer
}

\newif\if@pingu@x@crown@ddd@ % 3d
\newif\if@pingu@x@crown@shade@ % 3d
\pingu@create@extra{crown}{%
  crown/.code             = \pingu@set@extra{crown}{true}\pingu@color{crown}{#1},
  crown/.default          = pingu@yellow,
  crown 3d/.is if         = @pingu@x@crown@ddd@, crown 3d/.default = true,
  crown 2d/.style         = {crown=#1, crown 3d=false},
  crown 2d/.default       = pingu@yellow,
  crown back/.code        = \pingu@color{crown@back}{#1},
  crown front bend/.code  = \def\pingu@x@crown@f@bend{#1},
  crown back bend/.code   = \def\pingu@x@crown@b@bend{#1},
  crown gem shade/.is if  = @pingu@x@crown@shade@, crown gem shade/.default = true,
  crown gem colors/.code n args = 7{\pingu@color{crown@gem@a}{#1}\pingu@color{crown@gem@b}{#2}\pingu@color{crown@gem@c}{#3}\pingu@color{crown@gem@d}{#4}\pingu@color{crown@gem@e}{#5}\pingu@color{crown@gem@f}{#6}\pingu@color{crown@gem@g}{#7}},
  crown gem ring/.code   = \pingu@color{crown@gem@ring}{#1},
  crown position/.code args  = {#1:(#2,#3)#4}{\def\pingu@x@crown@angle{#1}\def\pingu@x@crown@xshift{#2}\def\pingu@x@crown@yshift{#3}\def\pingu@x@crown@scale{#4}},
}{crown position={-9:(1mm,0mm)1},crown front bend=16,crown back bend=9,crown back=\pingu@color@crown!93!black,crown 3d,crown gem colors={pingu@purple}{pingu@blue}{pingu@green}{pingu@purple}{pingu@green}{pingu@blue}{pingu@purple},crown gem ring=\pingu@color@crown!85!white,crown gem shade}

% color | bend1 | bend1
\def\pingu@draw@ea@crown@s#1#2#3{
\pingu@block{#1} [rounded corners=.2mm](-6.25mm,-.25cm) to[bend left=2] ++(0,3.125mm) to[bend #2=\pingu@x@crown@f@bend]
    coordinate[pos=0] (r2)  coordinate[pos=.07] (r1)
    coordinate[pos=.14-.07] (a1)  coordinate[pos=.14] (a2) coordinate[pos=.14+.07] (a3)
    coordinate[pos=.30-.08] (b1)  coordinate[pos=.30] (b2) coordinate[pos=.30+.08] (b3)
    coordinate[pos=.50- .1] (c1)  coordinate[pos=.50] (x2) coordinate[pos=.50+ .1] (c3)
    coordinate[pos=.69-.08] (d1)  coordinate[pos=.69] (d2) coordinate[pos=.69+.08] (d3)
    coordinate[pos=.85-.07] (e1)  coordinate[pos=.85] (e2) coordinate[pos=.85+.07] (e3)
    coordinate[pos=1] (l2)  coordinate[pos=.93] (l1)
    ++(1.375cm,0) to[bend left=2] ++(0,-3.125mm) to[bend #3=\pingu@x@crown@f@bend] (-6mm,-.25cm) -- cycle;
\path (x2)++(0,.9mm) coordinate (c2);
\@for\a:={a,b,c,d,e}\do{
    \pingu@block{#1} ([yshift=-.1mm]\a1) to[bend right=\pingu@x@crown@f@bend] ([yshift=-.1mm]\a3) to[bend right=2] ([yshift=1.85mm]\a2) to[bend right=2] ([yshift=-.1mm]\a1) -- cycle;
}
\pingu@block{#1} (l2)++(0,-.2mm) to[bend right=2] ++(0,1.95mm) -- (l1) -- cycle;
\pingu@block{#1} (r2)++(0,-.2mm) to[bend left=2] ++(0,1.95mm) -- (r1) -- cycle;
}

% color | at | shift | scale
\def\pingu@draw@ea@crown@g#1#2#3#4{
\scope[shift={(#22)},shift={(#3,-.33mm)}]
    \pingu@block{\pingu@color@crown@gem@ring}  ellipse [x radius=.715mm*#4, y radius=.925mm*#4];
    \pingu@block{#1}  ellipse [x radius=.633mm*#4, y radius=.85mm*#4];
    \protected@edef\@tmp{#1}\ifx\@tmp\@pingu@none\else
    \if@pingu@x@crown@shade@
    \shade[ball color=#1,fill opacity=.45,shading angle=-95]  ellipse [x radius=.633mm*#4, y radius=.85mm*#4];
    \else
    \pingu@block[rotate around={7:(42:.3mm*#4 and .4mm*#4)}]{#1!45!pingu@white} (42:.3mm*#4 and .4mm*#4) ellipse[x radius=.17mm*#4, y radius=.24mm*#4];
    \pingu@block[rotate around={7:(232:.275mm*#4 and .35mm*#4)}]{#1!45!pingu@white} (232:.275mm*#4 and .35mm*#4) ellipse[x radius=.06mm*#4, y radius=.085mm*#4];
    \fi\fi
\endscope
}
\def\pingu@draw@ea@crown{%
\scope[rotate around={\pingu@x@crown@angle:(\pingu@name-head-top)},%
       shift={(\pingu@name-head-top)},
       shift={(\pingu@x@crown@xshift,\pingu@x@crown@yshift)},
       scale=\pingu@x@crown@scale]
% draw front
\if@pingu@x@crown@ddd@
    \pingu@draw@ea@crown@s{\pingu@color@crown}{right}{left}
    \def\@tmpa{.05mm}\def\@tmpb{.025mm}
\else
    \pingu@draw@ea@crown@s{\pingu@color@crown}{left}{right}
    \def\@tmpa{-.015mm}\def\@tmpb{-.035mm}
\fi
% draw the emeralds
\pingu@draw@ea@crown@g{\pingu@color@crown@gem@b}{a}{-\@tmpa}1
\pingu@draw@ea@crown@g{\pingu@color@crown@gem@c}{b}{-\@tmpb}1
\pingu@draw@ea@crown@g{\pingu@color@crown@gem@d}{x}{\z@}{1.35}
\pingu@draw@ea@crown@g{\pingu@color@crown@gem@e}{d}{\@tmpb}1
\pingu@draw@ea@crown@g{\pingu@color@crown@gem@f}{e}{\@tmpa}1
\pingu@layer{background}[]
\pingu@block{\pingu@color@crown@gem@a} (r2)++(0,-.33mm) ellipse [x radius=.3mm, y radius=.8mm];
\pingu@block{\pingu@color@crown@gem@ring} (r2)++(0,-.33mm) ellipse [x radius=.1mm, y radius=.885mm];
\pingu@block{\pingu@color@crown@gem@g} (l2)++(0,-.33mm) ellipse [x radius=.3mm, y radius=.8mm];
\pingu@block{\pingu@color@crown@gem@ring} (l2)++(0,-.33mm) ellipse [x radius=.1mm, y radius=.885mm];
% draw back if 3d
\if@pingu@x@crown@ddd@
    \pingu@draw@ea@crown@s{\pingu@color@crown@back}{left}{right}
\fi
\endpingu@layer
\endscope
}

\newif\if@pingu@x@princesscrown@ddd@
\newif\if@pingu@x@princesscrown@shade@
\newif\if@pingu@x@princesscrown@bobbles@
\pingu@create@extra{princesscrown}{%
  princess crown/.code    = \pingu@set@extra{princesscrown}{true}\pingu@color{princesscrown}{#1},
  princess crown/.default = pingu@yellow,
  princess crown 3d/.is if= @pingu@x@princesscrown@ddd@, princess crown 3d/.default = true,
  princess crown 2d/.style   = {princess crown=#1, princess crown 3d=false},
  princess crown 2d/.default = pingu@yellow,
  princess crown back/.code  = \pingu@color{princesscrown@back}{#1},
  princess crown front bend/.code  = \def\pingu@x@princesscrown@f@bend{#1},
  princess crown back bend/.code   = \def\pingu@x@princesscrown@b@bend{#1},
  princess crown gem shade/.is if  = @pingu@x@princesscrown@shade@,
  princess crown bobbles/.is if = @pingu@x@princesscrown@bobbles@,
  princess crown gem shade/.default = true,
  princess crown gem colors/.code n args = 5{\pingu@color{princesscrown@gem@a}{#1}\pingu@color{princesscrown@gem@b}{#2}\pingu@color{princesscrown@gem@c}{#3}\pingu@color{princesscrown@gem@d}{#4}\pingu@color{princesscrown@gem@e}{#5}},
  princess crown gem ring/.code   = \pingu@color{princesscrown@gem@ring}{#1},
  princess crown position/.code args  = {#1:(#2,#3)#4}{\def\pingu@x@princesscrown@angle{#1}\def\pingu@x@princesscrown@xshift{#2}\def\pingu@x@princesscrown@yshift{#3}\def\pingu@x@princesscrown@scale{#4}},
}{princess crown position={-9:(1mm,0mm)1},princess crown front bend=12,princess crown back bend=7,princess crown back=\pingu@color@princesscrown!93!black,princess crown 3d,princess crown gem colors={pingu@purple}{pingu@blue}{pingu@green}{pingu@blue}{pingu@purple},princess crown gem ring=\pingu@color@princesscrown!85!white,princess crown gem shade,princess crown bobbles}

% color | bend1 | bend2
\def\pingu@draw@ea@princesscrown@s#1#2#3{
\pingu@block{#1} [rounded corners=.2mm](-3.25mm,-.15cm) to[bend left=2] ++(0,2.32mm) to[bend #2=\pingu@x@princesscrown@f@bend]
    coordinate[pos=0] (r2)  coordinate[pos=.065] (r1)
    coordinate[pos=.11] (a1) coordinate[pos=.2] (a2) coordinate[pos=.29] (a3)
    coordinate[pos=.35] (b1) coordinate[pos=.50] (x2) coordinate[pos=.65] (b3)
    coordinate[pos=.71] (c1) coordinate[pos=.8] (c2) coordinate[pos=.89] (c3)
    coordinate[pos=1] (l2)  coordinate[pos=.93] (l1)
    ++(8mm,0) to[bend left=2] ++(0,-2.32mm) to[bend #3=\pingu@x@princesscrown@f@bend] (-3mm,-.15cm) -- cycle;
\path (x2)++(0,.9mm) coordinate (b2);
\@for\a:={a,b,c}\do{
    \pingu@block{#1} ([yshift=-.1mm]\a1) to[bend right=\pingu@x@princesscrown@f@bend] ([yshift=-.1mm]\a3) to[bend left=2] ([yshift=2.15mm]\a2) to[bend left=2] ([yshift=-.1mm]\a1) -- cycle;
    \if@pingu@x@princesscrown@bobbles@\pingu@block{#1} ([yshift=2.15mm]\a2) circle [radius=.45\p@];\fi
}
\pingu@block{#1} (l2)++(0,-.2mm) to[bend left=2] ++(0,2.25mm) -- (l1) -- cycle;
\pingu@block{#1} (r2)++(0,-.2mm) to[bend right=2] ++(0,2.25mm) -- (r1) -- cycle;
\if@pingu@x@princesscrown@bobbles@\pingu@block{#1} (l2)++(0,2.05mm) circle [radius=.45\p@];
\pingu@block{#1} (r2)++(0,2.05mm) circle [radius=.45\p@];\fi
}

% draw single gem; color | at | shift | scale
\def\pingu@draw@ea@princesscrown@g#1#2#3#4{
\scope[shift={(#22)},shift={(#3,-.33mm)}]
    \pingu@block{\pingu@color@princesscrown@gem@ring} ellipse [x radius=.715mm*#4, y radius=.925mm*#4];
    \pingu@block{#1} ellipse [x radius=.633mm*#4, y radius=.85mm*#4];
    \protected@edef\@tmp{#1}\ifx\@tmp\@pingu@none\else
    \if@pingu@x@princesscrown@shade@
    \shade[ball color=#1,fill opacity=.45,shading angle=-95] ellipse [x radius=.633mm*#4, y radius=.85mm*#4];
    \else
    \pingu@block[rotate around={7:(42:.3mm*#4 and .4mm*#4)}]{#1!45!pingu@white} (42:.3mm*#4 and .4mm*#4) ellipse[x radius=.17mm*#4, y radius=.24mm*#4];
    \pingu@block[rotate around={7:(232:.275mm*#4 and .35mm*#4)}]{#1!45!pingu@white} (232:.275mm*#4 and .35mm*#4) ellipse[x radius=.06mm*#4, y radius=.085mm*#4];
    \fi\fi
\endscope}
\def\pingu@draw@ea@princesscrown{%
\scope[rotate around={\pingu@x@princesscrown@angle:(\pingu@name-head-top)},%
       shift={(\pingu@name-head-top)},
       shift={(\pingu@x@princesscrown@xshift,\pingu@x@princesscrown@yshift)},
       scale=\pingu@x@princesscrown@scale]
% draw front
\if@pingu@x@princesscrown@ddd@
    \pingu@draw@ea@princesscrown@s{\pingu@color@princesscrown}{right}{left}
    \def\@tmpa{.05mm}
\else
    \pingu@draw@ea@princesscrown@s{\pingu@color@princesscrown}{left}{right}
    \def\@tmpa{-.015mm}
\fi
% draw the emaralds
\pingu@draw@ea@princesscrown@g{\pingu@color@princesscrown@gem@b}{a}{-\@tmpa}{.95}
\pingu@draw@ea@princesscrown@g{\pingu@color@princesscrown@gem@c}{x}{\z@}{1.3}
\pingu@draw@ea@princesscrown@g{\pingu@color@princesscrown@gem@d}{c}{\@tmpa}{.95}
\pingu@layer{background}[]
\pingu@block{\pingu@color@princesscrown@gem@a} (r2)++(0,-.33mm) ellipse [x radius=.3mm, y radius=.8mm];
\pingu@block{\pingu@color@princesscrown@gem@ring} (r2)++(0,-.33mm) ellipse [x radius=.1mm, y radius=.885mm];
\pingu@block{\pingu@color@princesscrown@gem@e} (l2)++(0,-.33mm) ellipse [x radius=.3mm, y radius=.8mm];
\pingu@block{\pingu@color@princesscrown@gem@ring} (l2)++(0,-.33mm) ellipse [x radius=.1mm, y radius=.885mm];
% draw back if 3d
\if@pingu@x@princesscrown@ddd@
    \pingu@draw@ea@princesscrown@s{\pingu@color@princesscrown@back}{left}{right}
\fi
\endpingu@layer
\endscope
}
% #endregion

% #region movement-lib
\pingu@bodytype@add{tilt-right}{%
\pingu@block[save path=\pingu@lowerpingu]{\pingu@color@body@main} (0,\pingu@outer@off)
% left side
to[bend right=\pingu@bend] coordinate[pos=.775] (\pingu@name-waist-right) ++(0,-\pingu@side@h@half-\pingu@outer@off)
% feety stuff
arc (180:270:\pingu@foot@outer@w{}-1mm and \pingu@foot@outer@h) coordinate[yshift=-.2mm] (\pingu@name-foot-right)
arc (270:332:\pingu@foot@inner@w{}+1mm and 2.5*\pingu@foot@inner@h)
coordinate (\pingu@name-bottom-center)
arc (208:270:\pingu@foot@inner@w{} and 1.25*\pingu@foot@inner@h) coordinate[yshift=-.4mm] (\pingu@name-foot-left)
arc (270:360:\pingu@foot@outer@w{} and 1.125*\pingu@foot@outer@h)%
% right side
to[bend right=\pingu@bend] coordinate[pos=.225] (\pingu@name-waist-left) ++(0,\pingu@side@h@half+\pingu@outer@off)
% coordinate
coordinate (\pingu@name-wings-side-left)
-- (0,\pingu@outer@off) coordinate (\pingu@name-wings-side-right) coordinate[pos=.5] (\pingu@name-head-center) -- cycle;

\pingu@block[save path=\pingu@upperpingu]{\pingu@color@body@head} (\pingu@name-head-center)
++(0,\pingu@head@h@half) coordinate (\pingu@name-head-top)
arc(90:450:\pingu@w@half{} and \pingu@head@h@half)
coordinate[pos=\pinguanglehr] (\pingu@name-head-right)
coordinate[pos=\pinguanglehl] (\pingu@name-head-left);

\coordinate (\pingu@name-belly-back) at (\pingu@w@half,-1cm);
\coordinate (\pingu@name-belly-center) at (\pingu@w@half,-.68\pingu@side@h@half);
\pingu@block[save path=\pingu@whitepingu]{\pingu@color@body@front} (\pingu@name-belly-back)++(-\pingu@w@half+\pingu@one,\pingu@lower@off) to[bend right=.8\pingu@bend] ++(-.05mm,1.05cm-\pingu@side@h@half-\pingu@lower@off) arc (180:270:3.7mm and 2mm) arc (270:331:5mm and 3*.85mm) arc (207:270:5.3mm and 1.125*.85mm) arc (270:360:4.025mm and 1.25*2mm) to[bend right=.8\pingu@bend] ++(0,\pingu@side@h@half-1.05cm+\pingu@lower@off) arc (0:180:\pingu@w@half-.96mm and \pingu@w@half-\pingu@one) -- cycle;

\coordinate (\pingu@name-eye-back-right) at ([xshift=-.275cm,yshift=.25cm-\pingu@outer@off]\pingu@name-head-center);
\coordinate (\pingu@name-eye-back-left) at ([xshift=.275cm,yshift=.25cm-\pingu@outer@off]\pingu@name-head-center);

\coordinate (\pingu@name-head-back-con-right) at ([xshift=-\pingu@headcon@x,yshift=-\pingu@headcon@y]\pingu@name-eye-back-right);
\coordinate (\pingu@name-head-back-con-left) at ([xshift=\pingu@headcon@x,yshift=-\pingu@headcon@y]\pingu@name-eye-back-left);

\pingu@block{\pingu@color@body@front} (\pingu@name-eye-back-right)++(0,-.25mm) ellipse [x radius=.525cm,y radius=.625cm];
\pingu@block{\pingu@color@body@front} (\pingu@name-eye-back-left)++(0,-.25mm) ellipse [x radius=.525cm,y radius=.625cm];
}


\pingu@bodytype@add{tilt-left}{%
\pingu@block[save path=\pingu@lowerpingu]{\pingu@color@body@main} (0,\pingu@outer@off)
% left side
to[bend right=\pingu@bend] coordinate[pos=.775] (\pingu@name-waist-right) ++(0,-\pingu@side@h@half-\pingu@outer@off)
% feety stuff
arc (180:270:\pingu@foot@outer@w{}-1mm and 1.25*\pingu@foot@outer@h) coordinate[yshift=-.2mm] (\pingu@name-foot-right)
arc (270:332:\pingu@foot@inner@w{}+1mm and 1.125*\pingu@foot@inner@h)
coordinate (\pingu@name-bottom-center)
arc (208:270:\pingu@foot@inner@w{} and 2.5*\pingu@foot@inner@h) coordinate[yshift=-.4mm] (\pingu@name-foot-left)
arc (270:360:\pingu@foot@outer@w{} and \pingu@foot@outer@h)%
% right side
to[bend right=\pingu@bend] coordinate[pos=.225] (\pingu@name-waist-left) ++(0,\pingu@side@h@half+\pingu@outer@off)
% coordinate
coordinate (\pingu@name-wings-side-left)
-- (0,\pingu@outer@off) coordinate (\pingu@name-wings-side-right) coordinate[pos=.5] (\pingu@name-head-center) -- cycle;

\pingu@block[save path=\pingu@upperpingu]{\pingu@color@body@head} (\pingu@name-head-center)
++(0,\pingu@head@h@half) coordinate (\pingu@name-head-top)
arc(90:450:\pingu@w@half{} and \pingu@head@h@half)
coordinate[pos=\pinguanglehr] (\pingu@name-head-right)
coordinate[pos=\pinguanglehl] (\pingu@name-head-left);

\coordinate (\pingu@name-belly-back) at (\pingu@w@half,-1cm);
\coordinate (\pingu@name-belly-center) at (\pingu@w@half,-.68\pingu@side@h@half);
\pingu@block[save path=\pingu@whitepingu]{\pingu@color@body@front} (\pingu@name-belly-back)++(-\pingu@w@half+\pingu@one,\pingu@lower@off) to[bend right=.8\pingu@bend] ++(-.05mm,1.05cm-\pingu@side@h@half-\pingu@lower@off) arc (180:270:4.025mm and 1.25*2mm) arc (270:331:5.25mm and 1.125*.85mm) arc (207:270:5mm and 3*.85mm) arc (270:360:3.75mm and 2mm) to[bend right=.8\pingu@bend] ++(0,\pingu@side@h@half-1.05cm+\pingu@lower@off) arc (0:180:\pingu@w@half-.96mm and \pingu@w@half-\pingu@one) -- cycle;

\coordinate (\pingu@name-eye-back-right) at ([xshift=-.275cm,yshift=.25cm-\pingu@outer@off]\pingu@name-head-center);
\coordinate (\pingu@name-eye-back-left) at ([xshift=.275cm,yshift=.25cm-\pingu@outer@off]\pingu@name-head-center);

\coordinate (\pingu@name-head-back-con-right) at ([xshift=-\pingu@headcon@x,yshift=-\pingu@headcon@y]\pingu@name-eye-back-right);
\coordinate (\pingu@name-head-back-con-left) at ([xshift=\pingu@headcon@x,yshift=-\pingu@headcon@y]\pingu@name-eye-back-left);

\pingu@block{\pingu@color@body@front} (\pingu@name-eye-back-right)++(0,-.25mm) ellipse [x radius=.525cm,y radius=.625cm];
\pingu@block{\pingu@color@body@front} (\pingu@name-eye-back-left)++(0,-.25mm) ellipse [x radius=.525cm,y radius=.625cm];
}
% #endregion

% #region safe-lib
\pingu@create@extra{mask}{%
    mask/.code    	       = {\pingu@set@extra{mask}{true}\pingu@color{mask}{#1}},
    mask/.default          = pingu@white!61!gray,%
    mask band/.code        = \pingu@color{mask@band}{#1},%
    mask line width/.code  = \def\pingu@x@mask@line@width{#1},%
    mask band inner/.code  = \pingu@color{mask@band@inner}{#1},%
    mask band outer/.code  = \pingu@color{mask@band@outer}{#1}%
}{mask band=\pingu@color@body@main, mask band inner=\pingu@color@mask@band!60!\pingu@color@mask, mask band outer=\pingu@color@mask@band!82!\pingu@color@mask,mask line width=.565pt}

\def\pingu@draw@ea@mask{%
\pingu@block{\pingu@color@mask} [rounded corners=.8mm] ([xshift=-5mm,yshift=.75mm]\pingu@name-bill) coordinate (@ul) [rounded corners=.1mm]-- ++(3.5mm,.55mm) to[bend left=3] ++(3mm,0) -- ++(3.5mm,-.55mm) coordinate (@ur) -- ++(0,-4.25mm)[rounded corners=.8mm] coordinate (@lr)  -- ++(-3.5mm,-.45mm) to[bend left=3] ++(-3mm,0) [rounded corners=.1mm] -- ++(-3.5mm,.45mm) coordinate (@ll) -- cycle;
\scope
\clip[use path=\pingu@upperpingu];
\pingu@draw[line width=\pingu@x@mask@line@width]{\pingu@color@mask@band} ([yshift=-.1mm,xshift=.2mm]@ul) to[bend left=3] ([yshift=-1.1mm]\pingu@name-wings-side-right);
\pingu@draw[line width=\pingu@x@mask@line@width]{\pingu@color@mask@band} ([yshift=-.1mm,xshift=-.2mm]@ur) to[bend right=3]  ([yshift=-1.1mm]\pingu@name-wings-side-left);
\endscope\scope
\clip[use path=\pingu@lowerpingu];
\pingu@draw[line width=\pingu@x@mask@line@width]{\pingu@color@mask@band} ([yshift=.01mm,xshift=.2mm]@ll) to[bend left=3]  ([yshift=2mm]\pingu@name-wing-right-start);
\pingu@draw[line width=\pingu@x@mask@line@width]{\pingu@color@mask@band} ([yshift=.01mm,xshift=-.2mm]@lr) to[bend right=3] ([yshift=2mm]\pingu@name-wing-left-start);
\endscope
% TODO: fix this sloppy overwrite
\pingu@block{\pingu@color@mask} [rounded corners=.8mm] ([xshift=-5mm,yshift=.75mm]\pingu@name-bill) coordinate (@ul) [rounded corners=.1mm]-- ++(3.5mm,.55mm) to[bend left=3] ++(3mm,0) -- ++(3.5mm,-.55mm) coordinate (@ur) -- ++(0,-4.25mm)[rounded corners=.8mm] coordinate (@lr)  -- ++(-3.5mm,-.45mm) to[bend left=3] ++(-3mm,0) [rounded corners=.1mm] -- ++(-3.5mm,.45mm) coordinate (@ll) -- cycle;
\pingu@draw[very thin]{\pingu@color@mask@band@inner} ([xshift=-5mm,yshift=.75mm-4.25mm/2]\pingu@name-bill) to[bend right=1] ++(10mm,0);
\foreach \i/\b/\c in {1.6mm/very thin/\pingu@color@mask@band@inner,.8mm/very thin/\pingu@color@mask@band@inner,0mm//\pingu@color@mask@band@outer} {
\pingu@draw[\b]{\c} [rounded corners=.8mm] ([xshift=-5mm,yshift=.75mm-\i]\pingu@name-bill) [rounded corners=.1mm]-- ++(3.5mm,.55mm) to[bend left=3] ++(3mm,0) -- ++(3.5mm,-.55mm) -- ++(0,-4.25mm+2*\i)[rounded corners=.8mm]  -- ++(-3.5mm,-.45mm) to[bend left=3] ++(-3mm,0) [rounded corners=.1mm] -- ++(-3.5mm,.45mm) -- cycle;
}
}
% #endregion

% #region science-fiction
\newif\if@pingu@x@lightsaber@glow@left
\newif\if@pingu@x@lightsaber@glow@right
\newif\if@pingu@x@lightsaber@double@left
\newif\if@pingu@x@lightsaber@double@right
\def\pingu@x@saberglow@w@half{.9mm}
\def\pingulightsaberfactor{.013}
\pingu@create@wing@extra{lightsaber}{%
  lightsaber \@lr/.code                = {\pingu@set@extra{lightsaber\@lr}{true}\pingu@color{lightsaber\@lr}{##1}},
  lightsaber \@lr/.default             = pingu@blue,
  lightsaber \@lr\space handle/.code   = \pingu@color{lightsaber\@lr @handle}{##1},%
  lightsaber \@lr\space deco/.code     = \pingu@color{lightsaber\@lr @deco}{##1},%
  lightsaber \@lr\space ribbs/.code    = \pingu@color{lightsaber\@lr @ribbs}{##1},%
  lightsaber \@lr\space button/.code   = \pingu@color{lightsaber\@lr @button}{##1},%
  lightsaber \@lr\space button b/.code   = \pingu@color{lightsaber\@lr @button@b}{##1},%
  lightsaber \@lr\space color b/.code   = \pingu@color{lightsaber\@lr @color@b}{##1},%
  lightsaber \@lr\space length/.code   = {\@namedef{pingu@x@lightsaber@length@\@lr}{##1}},%
  lightsaber \@lr\space length b/.code   = {\@namedef{pingu@x@lightsaber@length@b@\@lr}{##1}},%
  lightsaber \@lr\space yshift/.code   = {\@namedef{pingu@x@lightsaber@yshift@\@lr}{##1}},%
  lightsaber \@lr\space glow/.is if    = @pingu@x@lightsaber@glow@\@lr,%
  lightsaber \@lr\space double/.is if  = @pingu@x@lightsaber@double@\@lr,%
  lightsaber \@lr\space glow core/.code   = \pingu@color{lightsaber\@lr @glow@core}{##1},%
  lightsaber \@lr\space solid/.style = {/pingu/lightsaber \@lr\space glow=false},
  lightsaber \@lr\space disabled/.style = {/pingu/lightsaber \@lr\space solid,/pingu/lightsaber \@lr=\@pingu@none},
  lightsaber \@lr\space outer glow factor/.code  = {\@namedef{pingu@x@lightsaber@ogf@\@lr}{##1}}%
}{lightsaber \@lr\space handle=pingu@silver, lightsaber \@lr\space deco=pingu@silver!12!pingu@black, lightsaber \@lr\space button=pingu@red!85!pingu@black,lightsaber \@lr\space button b=pingu@red!85!pingu@black, lightsaber \@lr\space ribbs=pingu@silver!50!pingu@black,lightsaber \@lr\space length=2cm,lightsaber \@lr\space glow=\ifpengu@setup@glows@ true\else false\fi,lightsaber \@lr\space glow core=white,lightsaber \@lr\space outer glow factor=\pingulightsaberfactor,lightsaber \@lr\space yshift=0pt,lightsaber \@lr\space length b=\csname pingu@x@lightsaber@length@\@lr\endcsname,lightsaber \@lr\space color b=\noexpand\@col}

% #region lightsaber base
\def\pingu@draw@wi@lightsaber@base#1{%
% deco-elements
    % base
    \pingu@block{\csname pingu@color@lightsaber#1@deco\endcsname}(\pingu@name-wing-#1)++(-.4mm,2.65mm+\csname pingu@x@lightsaber@yshift@#1\endcsname) -- ++(0,-5mm) -- ++(.8mm,0) |- cycle;
    \if@pingu@wing@item@side@left@
    % ribbs; single path saves memory :D
    \pingu@block{\csname pingu@color@lightsaber#1@ribbs\endcsname}(\pingu@name-wing-#1)++(-.40mm,2.225mm+\csname pingu@x@lightsaber@yshift@#1\endcsname)
    arc(90:270:.075mm) -| ++(.8mm,-.165mm) -- ++(-.8mm,0)
    arc(90:270:.075mm) -| ++(.8mm,-.165mm) -- ++(-.8mm,0)
    arc(90:270:.075mm) -| ++(.8mm,-.165mm) -- ++(-.8mm,0)
    arc(90:270:.075mm) -| ++(.8mm,-.165mm) -- ++(-.8mm,0)
    arc(90:270:.075mm) -| ++(.8mm,-.165mm) -- ++(-.8mm,0)
    arc(90:270:.075mm) -| ++(.8mm,-.165mm) -- ++(-.8mm,0)
    arc(90:270:.075mm) -| ++(.8mm,-.165mm) -- ++(-.8mm,0)
    arc(90:270:.075mm) -| ++(.8mm,-.165mm) -- ++(-.8mm,0)
    arc(90:270:.075mm) -| ++(.8mm,-.165mm) -- ++(-.8mm,0)
    arc(90:270:.075mm) -| ++(.8mm,-.165mm) -- ++(-.8mm,0)
    arc(90:270:.075mm) -| ++(.8mm,-.165mm) -- ++(-.8mm,0)
    arc(90:270:.075mm) -| ++(.8mm,-.165mm) -- ++(-.8mm,0)
    arc(90:270:.075mm) -| ++(.8mm,-.165mm) -- ++(-.8mm,0)
    arc(90:270:.075mm) -- ++(.8mm,0) |- cycle;
    % button
    \pingu@block{\csname pingu@color@lightsaber#1@button@b\endcsname}(\pingu@name-wing-#1)++(.49mm,-1.75mm+\csname pingu@x@lightsaber@yshift@#1\endcsname) ellipse [x radius=.1mm, y radius=.3mm];
    \pingu@block{\csname pingu@color@lightsaber#1@button\endcsname}(\pingu@name-wing-#1)++(.49mm,1.9mm+\csname pingu@x@lightsaber@yshift@#1\endcsname) ellipse [x radius=.1mm, y radius=.3mm];
    % cover
    \pingu@block{\csname pingu@color@lightsaber#1@handle\endcsname}(\pingu@name-wing-#1)++(-.5mm,2.65mm+\csname pingu@x@lightsaber@yshift@#1\endcsname) arc(180:90:.15mm) -- ++(.7mm,0) arc(90:0:.16mm) -- ++(0,-5mm) arc(360:270:.15mm) -- ++(-.7mm,0) arc (270:180:.15mm) -- ++(0,.25mm) arc(270:360:.33mm and .2mm) -- ++(0,4.1mm) arc(0:90:.33mm and .2mm) -- ++(0,.25mm) -- cycle;
    \else
    % ribbs; single path saves memory :D (the second)
    \pingu@block{\csname pingu@color@lightsaber#1@ribbs\endcsname}(\pingu@name-wing-#1)++(.40mm,2.225mm+\csname pingu@x@lightsaber@yshift@#1\endcsname)
        arc(90:-90:.075mm) -| ++(-.8mm,-.165mm) -- ++(.8mm,0)
        arc(90:-90:.075mm) -| ++(-.8mm,-.165mm) -- ++(.8mm,0)
        arc(90:-90:.075mm) -| ++(-.8mm,-.165mm) -- ++(.8mm,0)
        arc(90:-90:.075mm) -| ++(-.8mm,-.165mm) -- ++(.8mm,0)
        arc(90:-90:.075mm) -| ++(-.8mm,-.165mm) -- ++(.8mm,0)
        arc(90:-90:.075mm) -| ++(-.8mm,-.165mm) -- ++(.8mm,0)
        arc(90:-90:.075mm) -| ++(-.8mm,-.165mm) -- ++(.8mm,0)
        arc(90:-90:.075mm) -| ++(-.8mm,-.165mm) -- ++(.8mm,0)
        arc(90:-90:.075mm) -| ++(-.8mm,-.165mm) -- ++(.8mm,0)
        arc(90:-90:.075mm) -| ++(-.8mm,-.165mm) -- ++(.8mm,0)
        arc(90:-90:.075mm) -| ++(-.8mm,-.165mm) -- ++(.8mm,0)
        arc(90:-90:.075mm) -| ++(-.8mm,-.165mm) -- ++(.8mm,0)
        arc(90:-90:.075mm) -| ++(-.8mm,-.165mm) -- ++(.8mm,0)
        arc(90:-90:.075mm) -- ++(-.8mm,0) |- cycle;
    % buttons
    \pingu@block{\csname pingu@color@lightsaber#1@button@b\endcsname}(\pingu@name-wing-#1)++(-.49mm,-1.75mm+\csname pingu@x@lightsaber@yshift@#1\endcsname) ellipse [x radius=.1mm, y radius=.3mm];
    \pingu@block{\csname pingu@color@lightsaber#1@button\endcsname}(\pingu@name-wing-#1)++(-.49mm,1.9mm+\csname pingu@x@lightsaber@yshift@#1\endcsname) ellipse [x radius=.1mm, y radius=.3mm];
    % cover
    \pingu@block{\csname pingu@color@lightsaber#1@handle\endcsname}(\pingu@name-wing-#1)++(.5mm,2.65mm+\csname pingu@x@lightsaber@yshift@#1\endcsname) arc(0:90:.15mm) -- ++(-.7mm,0) arc(90:180:.16mm) -- ++(0,-5mm) arc(180:270:.15mm) -- ++(.7mm,0) arc (270:360:.15mm) -- ++(0,.25mm) arc(270:180:.33mm and .2mm) -- ++(0,4.1mm) arc(180:90:.33mm and .2mm) -- ++(0,.25mm) -- cycle;
    \fi
}
% #endregion
% #1 wing, #2 yshift, #3 angle, #4 length, #5 color
\def\pingu@draw@wi@lightsaber@pre#1#2#3#4#5{
    \scope[rotate around={#3:(\pingu@name-wing-#1)}]
    \csname if@pingu@x@lightsaber@glow@#1\endcsname
    \@for\i:={0,2,4,6,7,8,9,10,11,12,13,14,15,16,17}\do{
        \pingu@block[fill opacity=\ifnum\i>14 .225\else.1\fi*\i/20]{#5} (\pingu@name-wing-#1)++(-\pingu@x@saberglow@w@half+\i*\i mm/440,#2) -- ++(.05mm,#4) arc(180:0:\pingu@x@saberglow@w@half-.05mm-\i*\i mm/440 and \ifnum\i>14 .85mm\else\pingu@one\fi-\i mm/30) -- ++(.05mm,-#4) arc (0:-180:\pingu@x@saberglow@w@half-\i*\i mm/440 and .35mm);
    }
    \else % draw solid
        \pingu@block{#5} (\pingu@name-wing-#1)++(-.425mm,#2-.1mm) -- ++(.05mm,#4) arc(180:0:.375mm and .375mm) -- ++(.05mm,-#4) arc (0:-180:.425mm and .05mm);
    \fi
    \endscope
}

% #1 wing, #2 yshift, #3 angle, #4 length, #5 color
\def\pingu@draw@wi@lightsaber@post#1#2#3#4#5{
    \scope[rotate around={#3:(\pingu@name-wing-#1)}]
    \csname if@pingu@x@lightsaber@glow@#1\endcsname
    \ifdim\csname pingu@x@lightsaber@ogf@#1\endcsname pt>\z@
    \pingu@layer{foreground}[]
    \pgfinterruptboundingbox
    \path[clip,/pingu/@invclip] (\pingu@name-wing-#1)++(-.275mm,#2-.1mm) -- ++(.1mm,#4) arc(180:0:.175mm and .25mm) -- ++(.1mm,-#4) arc (0:-180:.275mm and .065mm);
    \@for\i:={1,1.1,1.2,1.3,1.4}\do{
        \pingu@block[fill opacity=\csname pingu@x@lightsaber@ogf@#1\endcsname/\i]{#5} (\pingu@name-wing-#1) ++(.05mm,#2+#4/2) circle[radius=\i*#4];
    }
    \endpgfinterruptboundingbox
    \endpingu@layer
    \fi
        % fadings had a rotation angle bug
        \@for\i:={1,2}\do{
            \pingu@block[fill opacity=.125*\i/10]{#5} (\pingu@name-wing-#1)++(-\pingu@x@saberglow@w@half+\i*\i mm/440,#2) -- ++(.05mm,#4) arc(180:0:\pingu@x@saberglow@w@half-.05mm-\i*\i mm/440 and \pingu@one-\i mm/30) -- ++(.05mm,-#4) arc (0:-180:\pingu@x@saberglow@w@half-\i*\i mm/440 and .35mm);
        }
        \pingu@block{\csname pingu@color@lightsaber#1@glow@core\endcsname} (\pingu@name-wing-#1)++(-.275mm,#2-.1mm) -- ++(.1mm,#4) arc(180:0:.175mm and .25mm) -- ++(.1mm,-#4) arc (0:-180:.275mm and .065mm);
    \fi
    \endscope
}

% #1 wing
\def\pingu@draw@wi@lightsaber#1{%
    \pingu@setup@wing{lightsaber}{#1}%
    \scope[rotate around={\@angle:([yshift=+\csname pingu@x@lightsaber@yshift@#1\endcsname]\pingu@name-wing-#1)},xscale=1.2]
    \pingu@draw@wi@lightsaber@pre{#1}{2.9mm+\csname pingu@x@lightsaber@yshift@#1\endcsname}{0}{\csname pingu@x@lightsaber@length@#1\endcsname}{\@col}
    \csname if@pingu@x@lightsaber@double@#1\endcsname
    \pingu@draw@wi@lightsaber@pre{#1}{2.65mm-\csname pingu@x@lightsaber@yshift@#1\endcsname}{180}{\csname pingu@x@lightsaber@length@b@#1\endcsname}{\csname pingu@color@lightsaber#1@color@b\endcsname}
    \fi
    \pingu@draw@wi@lightsaber@base{#1}
    % afterglow (whuile watching everglow :D)
    \pingu@draw@wi@lightsaber@post{#1}{2.9mm+\csname pingu@x@lightsaber@yshift@#1\endcsname}{0}{\csname pingu@x@lightsaber@length@#1\endcsname}{\@col}
    \csname if@pingu@x@lightsaber@double@#1\endcsname
    \pingu@draw@wi@lightsaber@post{#1}{2.65mm-\csname pingu@x@lightsaber@yshift@#1\endcsname}{180}{\csname pingu@x@lightsaber@length@b@#1\endcsname}{\csname pingu@color@lightsaber#1@color@b\endcsname}
    \fi
    \endscope
}


\newif\if@pingu@x@lightstaff@glow@left
\newif\if@pingu@x@lightstaff@glow@right
\pingu@create@wing@extra{lightstaff}{%
    light-staff \@lr/.code         = {\pingu@set@extra{lightstaff\@lr}{true}\pingu@color{lightstaff\@lr}{##1}},
    light-staff \@lr/.default      = pingu@green,
    light-staff \@lr\space length/.code =\expandafter\def\csname pingu@lightstaff@\@lr @length\endcsname{##1},
    light-staff \@lr\space glow length/.code =\expandafter\def\csname pingu@lightstaff@\@lr @glow@length\endcsname{##1},
    light-staff \@lr\space head/.code = \pingu@color{lightstaff\@lr}{##1},%
    light-staff \@lr\space staff/.code = \pingu@color{lightstaff@\@lr @staff}{##1},%
    light-staff \@lr\space core/.code = \pingu@color{lightstaff@\@lr @head@core}{##1},%
    light-staff \@lr\space core width/.code = \expandafter\def\csname pingu@lightstaff@\@lr @core@width\endcsname{##1},%
    light-staff \@lr\space glow/.is if    = @pingu@x@lightstaff@glow@\@lr,%
    light-staff \@lr\space outer glow factor/.code  = {\@namedef{pingu@x@lightstaff@ogf@\@lr}{##1}},%
}{light-staff \@lr\space length=28mm,light-staff \@lr\space staff=pingu@bronze,light-staff \@lr\space head=pingu@green,light-staff \@lr\space core=pingu@white,light-staff \@lr\space glow=\ifpengu@setup@glows@ true\else false\fi,light-staff \@lr\space outer glow factor=.022,light-staff \@lr\space glow length=13mm,light-staff \@lr\space core width=.44mm}
\def\pingu@draw@wi@lightstaff#1{%
    \pingu@setup@wing{lightstaff}{#1}%
\scope[rotate around={\@angle:(\pingu@name-wing-#1)}]
    \pingu@block{\csname pingu@color@lightstaff@#1@staff\endcsname}(\pingu@name-wing-#1)++(\@sidesign*-.2mm,-11mm) -- ++(0,\csname pingu@lightstaff@#1@length\endcsname) arc(180:0:\@sidesign*.4mm and .3mm) coordinate[pos=.5] (\pingu@name-lightstaff-#1-top) -- ++(0,-\csname pingu@lightstaff@#1@length\endcsname) arc(360:180:\@sidesign*.4mm and .3mm) -- cycle;
    \pingu@draw@wi@lightstaff@pre{#1}{[yshift=-1.1mm]\pingu@name-lightstaff-#1-top}{\@col}
    \pingu@block{\csname pingu@color@lightstaff@#1@head@core\endcsname} ([yshift=-1.1mm]\pingu@name-lightstaff-#1-top) -- ++(-\csname pingu@lightstaff@#1@core@width\endcsname,1mm) -- ++(0,2mm) -- ++(\csname pingu@lightstaff@#1@core@width\endcsname,1mm) -- ++(\csname pingu@lightstaff@#1@core@width\endcsname,-1mm) -- ++(0,-2mm) -- cycle;
    \pingu@draw@wi@lightstaff@post{#1}{[yshift=-1.1mm]\pingu@name-lightstaff-#1-top}{\@col}
\endscope
}

% #1 wing, #2 start, #3 color
\def\pingu@draw@wi@lightstaff@pre#1#2#3{
\csname if@pingu@x@lightstaff@glow@#1\endcsname
\@for\i:={0,1,2,3,6,7,9,10,13}\do{
    \pingu@block[fill opacity=\ifnum\i>14 .225\else.1\fi*\i/20]{#3} (#2)++(0,-\i mm/15) -- ++(-\csname pingu@lightstaff@#1@core@width\endcsname-\i mm/30,1mm+\i mm/30) -- ++(0,2mm+\i mm/15) -- ++(\csname pingu@lightstaff@#1@core@width\endcsname+\i mm/30,1mm+\i mm/30) -- ++(\csname pingu@lightstaff@#1@core@width\endcsname+\i mm/30,-1mm-\i mm/30) -- ++(0,-2mm-\i mm/15) -- cycle;
    %  -- ++(.05mm,#4) arc(180:0:\pingu@x@saberglow@w@half-.05mm-\i*\i mm/440 and \ifnum\i>14 .85mm\else\pingu@one\fi-\i mm/30) -- ++(.05mm,-#4) arc (0:-180:\pingu@x@saberglow@w@half-\i*\i mm/440 and .35mm);
}
\else % draw solid
    \pingu@block{#3} (#2) -- ++(-.55mm,1mm) -- ++(0,2mm) -- ++(.55mm,1mm) -- ++(.55mm,-1mm) -- ++(0,-2mm) -- cycle;
\fi
}

\def\pingu@draw@wi@lightstaff@post#1#2#3{
\csname if@pingu@x@lightstaff@glow@#1\endcsname
\ifdim\csname pingu@x@lightstaff@ogf@#1\endcsname pt>\z@
\pingu@layer{foreground}[]
\pgfinterruptboundingbox
\@for\i:={1,1.1,1.2,1.3,1.4}\do{
    \pingu@block[fill opacity=\csname pingu@x@lightstaff@ogf@#1\endcsname/\i]{#3} (#2)++(0,2mm) circle[radius=\i*\csname pingu@lightstaff@#1@glow@length\endcsname];
}
\endpgfinterruptboundingbox
\pingu@block[opacity=.65]{\csname pingu@color@lightstaff@#1@head@core\endcsname} (#2)++(0,.5mm) -- ++(-.20mm,.75mm) -- ++(0,1.5mm) -- ++(.20mm,.75mm) -- ++(.20mm,-.75mm) -- ++(0,-1.5mm) -- cycle;
\endpingu@layer
\fi
% fadings hat a rotation angle bug
\@for\i:={1,2}\do{
    \pingu@block[fill opacity=.125*\i/10]{#3} (#2)++(0,-\i mm/15+2mm) -- ++(-\csname pingu@lightstaff@#1@core@width\endcsname-\i mm/30,1mm+\i mm/30) -- ++(0,2mm+\i mm/15) -- ++(\csname pingu@lightstaff@#1@core@width\endcsname+\i mm/30,1mm+\i mm/30) -- ++(\csname pingu@lightstaff@#1@core@width\endcsname+\i mm/30,-1mm-\i mm/30) -- ++(0,-2mm-\i mm/15) -- cycle;
}
\pingu@block{\csname pingu@color@lightstaff@#1@head@core\endcsname} (#2) -- ++(-\csname pingu@lightstaff@#1@core@width\endcsname,1mm) -- ++(0,2mm) -- ++(\csname pingu@lightstaff@#1@core@width\endcsname,1mm) -- ++(\csname pingu@lightstaff@#1@core@width\endcsname,-1mm) -- ++(0,-2mm) -- cycle;
\fi
}
% #endregion

% #region shirts-lib
\newif\if@pingu@shirt@above
\pingu@create@extra{shirt}{%
    shirt/.code              = \pingu@set@extra{shirt}{true}\pingu@color{shirt}{#1},
    shirt/.default           = pingu@bronze,
    shirt above/.is if       = @pingu@shirt@above,
    shirt raise/.code        = \def\pingu@shirt@raise{#1},
    shirt padding/.code      = \def\pingu@shirt@padding{#1},
    shirt button top/.code   = \pingu@color{shirt@button@top}{#1},
    shirt button middle/.code      = \pingu@color{shirt@button@middle}{#1},
    shirt button bottom/.code      = \pingu@color{shirt@button@bottom}{#1},
    shirt buttons/.style           = {/pingu/shirt button top={#1}, /pingu/shirt button middle={#1}, /pingu/shirt button bottom={#1}},
    shirt button top shade/.code  = \pingu@color{shirt@button@top@shade}{#1},
    shirt button middle shade/.code = \pingu@color{shirt@button@middle@shade}{#1},
    shirt button bottom shade/.code = \pingu@color{shirt@button@bottom@shade}{#1},
    shirt buttons shade/.style     = {/pingu/shirt button top shade={#1}, /pingu/shirt button middle shade={#1}, /pingu/shirt button bottom shade={#1}},
    shirt without buttons/.forward to=/pingu/shirt no buttons,
    shirt no buttons/.style        = {/pingu/shirt buttons=\@pingu@none, /pingu/shirt buttons shade=\@pingu@none},
}{shirt buttons=pingu@black,shirt padding=0mm,shirt button top shade=\pingu@color@shirt@button@top!70!\pingu@color@shirt!70!white,shirt button middle shade=\pingu@color@shirt@button@middle!70!\pingu@color@shirt!70!white,shirt button bottom shade=\pingu@color@shirt@button@bottom!70!\pingu@color@shirt!70!white,shirt raise=2.25mm,shirt above=false}
\def\pingu@draw@cloth@shirt@behind{}

\def\pingu@draw@cloth@shirt@middle{\if@pingu@shirt@above\else\pingu@draw@cloth@shirt@main\fi}

\def\pingu@draw@cloth@shirt@main{%
\coordinate (\pingu@name-shirt-low) at ([yshift=\pingu@shirt@raise]\pingu@name-belly-center);
\pingu@block{\pingu@color@shirt} [rounded corners=.131mm] ([xshift=.2mm,yshift=.18mm]\pingu@name-head-back-con-right) -- (\pingu@name-shirt-low) -- ([xshift=-.1mm,yshift=.24mm]\pingu@name-head-back-con-left) to[bend left=12] (\pingu@name-waist-left) to[bend left=3] ([xshift=\pingu@shirt@padding]\pingu@name-bottom-center-|\pingu@name-waist-left) to[bend left=10] ([yshift=-1.1\pingu@one]\pingu@name-bottom-center) to[bend left=10] ([xshift=-\pingu@shirt@padding]\pingu@name-bottom-center-|\pingu@name-waist-right) to[bend left=3] (\pingu@name-waist-right) to[bend left=12] (\pingu@name-head-back-con-right) -- cycle;

\coordinate (\pingu@name-shirt-bt) at ([yshift=-\pingu@one]\pingu@name-shirt-low);
\pingu@block{\pingu@color@shirt@button@top}(\pingu@name-shirt-bt) circle[radius=.4mm];
\pingu@block{\pingu@color@shirt@button@middle}(\pingu@name-shirt-bt)++(0,-1.35mm)circle[radius=.4mm];
\pingu@block{\pingu@color@shirt@button@bottom}(\pingu@name-shirt-bt)++(0,2*-1.35mm)circle[radius=.4mm];
\pingu@block[even odd rule]{\pingu@color@shirt@button@top@shade}(\pingu@name-shirt-bt) circle[radius=.4mm] circle[radius=.465mm];
\pingu@block[even odd rule]{\pingu@color@shirt@button@middle@shade}(\pingu@name-shirt-bt)++(0,-1.35mm)circle[radius=.4mm] circle[radius=.465mm];
\pingu@block[even odd rule]{\pingu@color@shirt@button@bottom@shade}(\pingu@name-shirt-bt)++(0,2*-1.35mm)circle[radius=.4mm] circle[radius=.465mm];
\@for\i:={0,90,180,270}\do{
    \pingu@block{\pingu@color@shirt@button@top@shade} (\pingu@name-shirt-bt)++(\i:.
    25mm) circle[radius=.065mm];
    \pingu@block{\pingu@color@shirt@button@middle@shade} (\pingu@name-shirt-bt)++(0,-1.35mm)++(\i:.25mm) circle[radius=.065mm];
    \pingu@block{\pingu@color@shirt@button@bottom@shade} (\pingu@name-shirt-bt)++(0,2*-1.35mm)++(\i:.25mm) circle[radius=.065mm];
}}

% TODO: if flags to draw parts
\def\pingu@draw@cloth@shirt{\if@pingu@shirt@above\pingu@draw@cloth@shirt@main\fi}

\pingu@create@extra{secondshirt}{%
    second shirt/.code        = \pingu@set@extra{secondshirt}{true}\pingu@color{secondshirt}{#1},
    second shirt raise/.code  = \def\pingu@secondshirt@raise{#1},
    second shirt neck/.code   = \pingu@color{secondshirt@neck}{#1},
    second shirt/.default     = purple,
}{second shirt raise=3.35mm,second shirt neck=\pingu@color@secondshirt!32!pingu@white}
\def\pingu@draw@cloth@secondshirt@behind{}

\def\pingu@draw@cloth@secondshirt@middle{%
\coordinate (\pingu@name-secondshirt-low) at ([yshift=\pingu@secondshirt@raise]\pingu@name-belly-center);
\pingu@block{\pingu@color@secondshirt} [rounded corners=.131mm] ([xshift=.2mm,yshift=.05mm]\pingu@name-head-back-con-right) -- (\pingu@name-secondshirt-low) -- ([xshift=-.16mm,yshift=.09mm]\pingu@name-head-back-con-left) to[bend left=12] (\pingu@name-waist-left) to[bend left=3] ([xshift=-.22mm]\pingu@name-bottom-center-|\pingu@name-waist-left) to[bend left=10] ([yshift=-1\pingu@one]\pingu@name-bottom-center) to[bend left=10] ([xshift=.22mm]\pingu@name-bottom-center-|\pingu@name-waist-right) to[bend left=3] (\pingu@name-waist-right) to[bend left=12] (\pingu@name-head-back-con-right) -- cycle;
\pingu@draw{\pingu@color@secondshirt@neck} [rounded corners=.131mm] ([xshift=.025mm,yshift=-.09mm]\pingu@name-head-back-con-right) -- ([xshift=.2mm,yshift=.05mm]\pingu@name-head-back-con-right) -- (\pingu@name-secondshirt-low) -- ([xshift=-.19mm,yshift=.09mm]\pingu@name-head-back-con-left) -- ([xshift=-.02mm,yshift=-.02mm]\pingu@name-head-back-con-left);
}

% TODO: if flags to draw parts
\def\pingu@draw@cloth@secondshirt{%
}
% #endregion

% #region signs-lib
\pingu@create@wing@extra{signpost}{%
  signpost \@lr/.forward to    = /pingu/sign post \@lr,
  sign post \@lr/.code         = {\pingu@set@extra{signpost\@lr}{true}\@namedef{pingu@signpost@\@lr}{##1}},
  sign post \@lr/.default      = {},
  signpost \@lr\space color/.forward to    = /pingu/sign post \@lr\space color,
  sign post \@lr\space color/.code = \pingu@color{signpost\@lr}{##1},
  signpost \@lr\space fontcolor/.forward to    = /pingu/sign post \@lr\space font color,
  sign post \@lr\space font color/.code = \pingu@color{signpost\@lr @font}{##1},
}{sign post \@lr\space color=brown!70!black, sign post \@lr\space font color=white!90!brown}
\def\pingu@draw@wi@signpost#1{%
    \pingu@setup@wing{signpost}{#1}%
    \def\@rot{\if@pingu@wing@item@side@left@-5\else+5\fi}%
\scope[rotate around={\@angle+\@rot:(\pingu@name-wing-#1)}]
    \pingu@block[thick]{\@col}(\pingu@name-wing-#1)++(\@sidesign*-.225mm,-2mm) -- ++(0,15mm) arc(180:0:\@sidesign*.45mm and .375mm) -- ++(0,-15mm) arc(360:180:\@sidesign*.45mm and .375mm) -- cycle;
    \path (\pingu@name-wing-#1)++(\@sidesign*.225mm,13mm) node[fill=\@col,rounded corners=2\p@,minimum width=14mm,minimum height=8mm,align=center,rotate=\@angle+\@rot,text=\csname pingu@color@signpost#1@font\endcsname] {\csname pingu@signpost@#1\endcsname};
\endscope
}

\pingu@create@extra{banner}{%
    banner/.code             = \pingu@set@extra{banner}{true}\@namedef{pingu@banner}{#1},
    banner/.default          = Bannertext,
    banner band/.code        = \pingu@color{banner@band}{#1},
    banner text color/.code  = \pingu@color{banner@text@color}{#1},
    banner sticks color/.style={/pingu/banner stick left color=#1,/pingu/banner stick right color=#1},
    banner stick left color/.code  = \pingu@color{banner@stick@left}{#1},
    banner stick right color/.code = \pingu@color{banner@stick@right}{#1},
    banner sticks length/.style={/pingu/banner stick left length=#1,/pingu/banner stick right length=#1},
    banner stick left length/.code  = \@namedef{pingu@banner@stick@left@l}{#1},
    banner stick right length/.code  = \@namedef{pingu@banner@stick@right@l}{#1},
    banner raise/.code  = \@namedef{pingu@banner@raise}{#1},
    banner height/.code  = \@namedef{pingu@banner@height}{#1},
    banner font/.code  = \@namedef{pingu@banner@font}{#1},
    banner bent/.code  = \@namedef{pingu@banner@bent}{#1}
}{banner band=pingu@white!91!pingu@black,banner text color=pingu@black,banner sticks  color=pingu@bronze,banner stick left length=20mm, banner stick right length=20mm,banner bent=30,banner raise=-1mm,banner height=4mm,banner font=\bfseries}

\usetikzlibrary{decorations.text}
\def\pingu@draw@ea@banner{%
\pingu@setup@wing{staff}{left}% we do not need the staff color, but we will use it
\scope[rotate around={\@angle:(\pingu@name-wing-left)}]
    \pingu@block{\pingu@color@banner@stick@left}(\pingu@name-wing-left)++(\@sidesign*-.2mm,-7mm) -- ++(0,\pingu@banner@stick@left@l) arc(180:0:\@sidesign*.4mm and .3mm) coordinate[pos=.5] (\pingu@name-s-left) -- ++(0,-\pingu@banner@stick@left@l) arc(360:180:\@sidesign*.4mm and .3mm) -- cycle;
    \path (\pingu@name-s-left)++(.5mm,\pingu@banner@height) coordinate (\pingu@name-s-left-top) ++(0,-2*\pingu@banner@height) coordinate (\pingu@name-s-left-bot);
\endscope
\pingu@setup@wing{staff}{right}% we do not need the staff color, but we will use it
\scope[rotate around={\@angle:(\pingu@name-wing-right)}]
    \pingu@block{\pingu@color@banner@stick@right}(\pingu@name-wing-right)++(\@sidesign*-.2mm,-7mm) -- ++(0,\pingu@banner@stick@right@l) arc(180:0:\@sidesign*.4mm and .3mm) coordinate[pos=.5] (\pingu@name-s-right) -- ++(0,-\pingu@banner@stick@right@l) arc(360:180:\@sidesign*.4mm and .3mm) -- cycle;
    \path (\pingu@name-s-right)++(-.5mm,\pingu@banner@height) coordinate (\pingu@name-s-right-top) ++(0,-2*\pingu@banner@height) coordinate (\pingu@name-s-right-bot);
\endscope
\pingu@block[rounded corners=.3mm]{\pingu@color@banner@band} (\pingu@name-s-left-top) to[bend right=\pingu@banner@bent] (\pingu@name-s-right-top) -- (\pingu@name-s-right-bot) to[bend left=\pingu@banner@bent] (\pingu@name-s-left-bot) -- cycle;
\path[postaction={decorate},decoration={text color=\pingu@color@banner@text@color,text along path, raise=\pingu@banner@raise, text={|\pingu@banner@font|\pingu@banner},text align={center,left indent=1mm,right indent=1mm}}] (\pingu@name-s-right) to[bend left=\pingu@banner@bent+3] (\pingu@name-s-left);
}
% #endregion

% #region sport-lib
\pingu@create@extra{medal}{%
    medal/.code    	  = {\pingu@set@extra{medal}{true}\pingu@color{medal}{#1}},
    medal/.default    = pingu@yellow,%
    gold medal/.style = {medal, medal text=#1}, gold medal/.default={1},
    silver medal/.style = {medal=pingu@silver, medal text=#1}, silver medal/.default={2},
    bronze medal/.style = {medal=pingu@bronze, medal text=#1}, bronze medal/.default={3},
    medal band/.code  = \pingu@color{medal@band}{#1},%
    medal shade/.code  = \pingu@color{medal@shade}{#1},%
    medal shade width/.code  = \def\pingu@medal@shade@w{#1},%
    medal text/.code  = \def\pingu@x@medal@text{#1},%
    medal text style/.style = {\pingu@color@medal!65!pingu@white},
}{medal band=pingu@red,medal text={},medal shade={\pingu@color@medal!65!pingu@white},medal shade width=.75\p@}

\def\pingu@draw@eb@medal{%
\coordinate (\pingu@name-medal-center) at ([yshift=1.25mm]\pingu@name-belly-center);
\pingu@block{\pingu@color@medal@band} [rounded corners=.15mm] (\pingu@name-head-back-con-right) -- (\pingu@name-medal-center) -- (\pingu@name-head-back-con-left) to[bend left=11] ++(-1.35mm,-.5mm) -- ([yshift=.7mm]\pingu@name-medal-center) -- ([xshift=1.35mm,yshift=-.5mm]\pingu@name-head-back-con-right) to[bend left=11] (\pingu@name-head-back-con-right) -- cycle;
\pingu@block{\pingu@color@medal} (\pingu@name-medal-center) circle [radius=2.35mm];
\pingu@draw[line width=\pingu@medal@shade@w]{\pingu@color@medal@shade} (\pingu@name-medal-center) circle [radius=2.35mm];
\node[/pingu/@text,/pingu/medal text style] at (\pingu@name-medal-center) {\pingu@x@medal@text};
}
\newif\if@pingu@x@headband@knot@
\newif\if@pingu@x@headband@bands@
\pingu@create@extra{headband}{%
    headband/.forward to  = /pingu/head band,
    head-band/.forward to = /pingu/head band,
    head band/.code       = \pingu@set@extra{headband}{true}\pingu@color{headband}{#1},
    head band/.default    = pingu@red,
    headband bend/.forward to  = /pingu/head band bend,
    head-band bend/.forward to = /pingu/head band bend,
    head band bend/.code  = \def\pingu@x@headband@bend{#1},
    headband angle/.forward to  = /pingu/head band angle,
    head-band angle/.forward to = /pingu/head band angle,
    head band angle/.code  = \def\pingu@x@headband@angle{#1},
    headband upper angle/.forward to  = /pingu/head band upper angle,
    head-band upper angle/.forward to = /pingu/head band upper angle,
    head band upper angle/.code  = \def\pingu@x@headband@upangle{#1},
    % knot
    headband knot/.forward to  = /pingu/head band knot,
    head-band knot/.forward to = /pingu/head band knot,
    head band knot/.is if = @pingu@x@headband@knot@,
    headband knot color/.forward to  = /pingu/head band knot color,
    head-band knot color/.forward to = /pingu/head band knot color,
    head band knot color/.code  = \pingu@color{headband@knot}{#1},
    headband knot a color/.forward to  = /pingu/head band knot a color,
    head-band knot a color/.forward to = /pingu/head band knot a color,
    head band knot a color/.code  = \pingu@color{headband@knot@a}{#1},
    headband knot b color/.forward to  = /pingu/head band knot b color,
    head-band knot b color/.forward to = /pingu/head band knot b color,
    head band knot b color/.code  = \pingu@color{headband@knot@b}{#1},
    headband bands/.forward to  = /pingu/head band bands,
    head-band bands/.forward to = /pingu/head band bands,
    head band bands/.is if = @pingu@x@headband@bands@,
    headband bands a color/.forward to  = /pingu/head band bands a color,
    head-band bands a color/.forward to = /pingu/head band bands a color,
    head band bands a color/.code  = \pingu@color{headband@bands@a}{#1},
    headband bands b color/.forward to  = /pingu/head band bands b color,
    head-band bands b color/.forward to = /pingu/head band bands b color,
    head band bands b color/.code  = \pingu@color{headband@bands@b}{#1},
}{head band bend=9, head band angle=17,head band upper angle=50, head band knot color=\pingu@color@headband!78!black,head band knot a color=\pingu@color@headband@knot!90!black,head band knot b color=\pingu@color@headband@knot@a,head band bands,head band bands a color=\pingu@color@headband!78!black,head band bands b color=\pingu@color@headband}

\def\pingu@draw@ea@headband@wh{1.25mm}
\def\pingu@draw@ea@headband{%
    \path (\pingu@name-head-center)+(\pingu@x@headband@upangle-\pingu@x@headband@angle:\pingu@w@half{} and \pingu@head@h@half) coordinate (\pingu@name-head-band-lower);
    \path (\pingu@name-head-center)+(\pingu@x@headband@upangle:\pingu@w@half{} and \pingu@head@h@half) coordinate (\pingu@name-head-band-upper);
    \if@pingu@x@headband@bands@
    \pingu@block{\pingu@color@headband@bands@a} (\pingu@name-head-band-lower) to[out=-50,in=75] ++(2.75mm,-4mm) to[bend right] ++(.6mm,0) to[out=80,in=-5] (\pingu@name-head-band-upper) -- cycle;
    \pingu@block{\pingu@color@headband@bands@b} (\pingu@name-head-band-lower) to[out=-80,in=80] ++(1.75mm,-3.35mm) to[bend right] ++(.45mm,0) to[out=80,in=-8] (\pingu@name-head-band-upper) -- cycle;
    \fi
    \pingu@block{\pingu@color@headband} (\pingu@name-head-center)+(\pingu@x@headband@upangle:\pingu@w@half{} and \pingu@head@h@half) to[bend left=\pingu@x@headband@bend] coordinate[pos=.5] (\pingu@name-headband-center-a) +(180-\pingu@x@headband@upangle:\pingu@w@half{} and \pingu@head@h@half) arc(180-\pingu@x@headband@upangle:180-\pingu@x@headband@upangle+\pingu@x@headband@angle:\pingu@w@half{} and \pingu@head@h@half) to[bend right=\pingu@x@headband@bend] coordinate[pos=.5] (\pingu@name-headband-center-b) (\pingu@name-head-band-lower) arc(\pingu@x@headband@upangle-\pingu@x@headband@angle:\pingu@x@headband@upangle:\pingu@w@half{} and \pingu@head@h@half) -- cycle;
    \path (\pingu@name-headband-center-a) -- (\pingu@name-headband-center-b) coordinate[pos=.5] (\pingu@name-headband-center);
    \if@pingu@x@headband@knot@
    \pingu@block[rounded corners=.25mm]{\pingu@color@headband@knot@a} (\pingu@name-headband-center-a)++(-.15mm,-.6mm) to[out=155,in=-5] ++(-3mm,\pingu@one) to[bend right=15] ([xshift=-3mm,yshift=-.2mm]\pingu@name-headband-center-b) to[in=-155,out=5] ++(.285cm,.8mm) -- cycle;
    \pingu@block[rounded corners=.25mm]{\pingu@color@headband@knot@b} (\pingu@name-headband-center-a)++(.15mm,-.6mm) to[out=25,in=-175] ++(3mm,\pingu@one) to[bend left=15] ([xshift=3mm,yshift=-.2mm]\pingu@name-headband-center-b) to[in=-25,out=175] ++(-.285cm,.8mm) -- cycle;
    \pingu@block[rounded corners=.25mm]{\pingu@color@headband@knot} (\pingu@name-headband-center-a)++(-\pingu@draw@ea@headband@wh,.12mm) to[bend right=9] ++(2*\pingu@draw@ea@headband@wh,0) -- ([xshift=\pingu@draw@ea@headband@wh,yshift=-.12mm]\pingu@name-headband-center-b) to[bend right=9] ++(-2*\pingu@draw@ea@headband@wh, 0) -- cycle;
    \fi
}
% #endregion

% #region technology-lib
\pingu@create@extra{vrheadset}{%
    vr-headset/.code             = \pingu@set@extra{vrheadset}{true}\pingu@color{vrheadset}{#1},
    vr-headset/.default          = pingu@black!92!gray,
    vr-headset band/.code        = \pingu@color{vrheadset@band}{#1},
    vr-headset band top/.code    = \pingu@color{vrheadset@band@top}{#1},
    vr-headset text/.code        = \def\pingu@x@vrheadset@text{#1},
    vr-headset text color/.code  = \pingu@color{vrheadset@text@color}{#1},
    vr-headset hair/.style       = {/pingu/hair 2=!hide,/pingu/hair 3=!hide,/pingu/hair 4=!hide}
}{vr-headset band=\pingu@color@vrheadset!92!gray,vr-headset text={\textit{\textsf{VR\thinspace\texttrademark}}},vr-headset text color=pingu@white,vr-headset band top=\pingu@color@vrheadset!96!gray}

\def\pingu@draw@ea@vrheadset{%
\pingu@layer{middle}[]
    \pingu@block{\pingu@color@vrheadset} [rounded corners=1.25mm]([yshift=3.45mm]\pingu@name-waist-right|-\pingu@name-eye-right) to[bend left=2] coordinate[pos=.5] (@) ([yshift=3.45mm]\pingu@name-waist-left|-\pingu@name-eye-left) to[bend left=3] coordinate (\pingu@name-vrh-ol) ++(0,-6.25mm) to[bend left=13] ([yshift=-1mm]\pingu@name-head-center) to[bend left=13] ([yshift=3.45mm-6.25mm]\pingu@name-waist-right|-\pingu@name-eye-right) -- cycle;
    \path (\pingu@name-vrh-ol)++(-2.25mm,2mm) node[text=\pingu@color@vrheadset@text@color,scale=.25] {\pingu@x@vrheadset@text};
\endpingu@layer
\if@pingu@do@back@\else
    % top band
    \pingu@block[rounded corners=1pt]{\pingu@color@vrheadset@band@top} (@)++(-1.05mm+.15mm,0) to[bend right=2] ([xshift=-.85mm+.3mm,yshift=.3mm]\pingu@name-head-top) to[bend left=2] ++(1.6mm,0) to[bend left=2] ([xshift=1.25mm+.15mm]@);
\fi
    % we draw a band for the background
\pingu@layer{background}[]
\pingu@block[line cap=round]{\pingu@color@vrheadset@band} ([yshift=1mm]\pingu@name-waist-right|-\pingu@name-eye-right) to[bend left=3] coordinate[pos=.5] (@b) ([yshift=1mm]\pingu@name-waist-left|-\pingu@name-eye-left) arc(90:-90:.25mm and 1mm) to[bend right=3] ([yshift=-1mm]\pingu@name-waist-right|-\pingu@name-eye-right) arc (270:90:.25mm and 1mm);
\pingu@block[rounded corners=1pt]{\pingu@color@vrheadset@band@top} (@b)++(-1.25mm+.2mm,-1.25mm) to[bend right=2] ([xshift=-.85mm+.3mm,yshift=.3mm]\pingu@name-head-top) to[bend right=2] ++(1.6mm,0) to[bend right=2] ([xshift=1.15mm+.2mm,yshift=-1.25mm]@b) -- cycle;
\endpingu@layer
}
\pingu@create@extra{headphone}{%
    headphones/.forward to      = /pingu/headphone,
    headphone/.code             = \pingu@set@extra{headphone}{true}\pingu@color{headphone}{#1},
    headphone/.default          = pingu@blue!80!pingu@black,
    headphone left/.code        = \pingu@color{headphone@left}{#1},
    headphone right/.code       = \pingu@color{headphone@right}{#1},
    headphones outer/.forward to  = /pingu/headphone outer,
    headphone outer/.style        = {/pingu/headphone left outer=#1,/pingu/headphone right outer=#1}, headphone outer/.default      = pingu@black,
    headphone left outer/.code    = \pingu@color{headphone@left@p}{#1}, headphone left outer/.default  =pingu@black,
    headphone right outer/.code   = \pingu@color{headphone@right@p}{#1}, headphone right outer/.default=pingu@black,
    headphones inner/.forward to  = /pingu/headphone inner,
    headphone inner/.style        = {/pingu/headphone left inner=#1,/pingu/headphone right inner=#1}, headphone inner/.default      = pingu@black,
    headphone left inner/.code    = \pingu@color{headphone@left@i}{#1}, headphone left inner/.default = pingu@black,
    headphone right inner/.code   = \pingu@color{headphone@right@i}{#1}, headphone right inner/.default=pingu@black,
}{headphone left=\pingu@color@headphone!65!pingu@black,headphone right=\pingu@color@headphone@left,headphone left outer=\@pingu@none,
,headphone right outer=\@pingu@none,,headphone left inner=\@pingu@none,
,headphone right inner=\@pingu@none}

\def\pingu@draw@ea@headphone{%
\if@pingu@do@back@ \pingu@layer{background}[] \fi
    \pingu@block[rounded corners=.1mm]{\pingu@color@headphone@right@p} ([xshift=-\pingu@one,yshift=3.22mm]\pingu@name-wings-side-right|-\pingu@name-eye-right) arc (93:273:.565mm and 2.11mm) -- ++(.8mm,.075mm) -- ++(0,4.075mm);
    \pingu@block[rounded corners=.1mm]{\pingu@color@headphone@right@i} ([xshift=\pingu@one-.366mm,yshift=3.22mm]\pingu@name-wings-side-right|-\pingu@name-eye-right) arc (87:-93:.565mm and 2.14mm) -- ++(-.8mm,.075mm) -- ++(0,4.075mm) -- cycle;
    \pingu@block[rounded corners=.1mm]{\pingu@color@headphone@right} ([xshift=-\pingu@one+.2mm,yshift=3.22mm]\pingu@name-wings-side-right|-\pingu@name-eye-right) arc (92:272:.565mm and 2.1mm) -- ++(.8mm,-.05mm) arc (270:450:.425mm and 2.1mm) -- cycle;
    \pingu@block[rounded corners=.1mm]{\pingu@color@headphone@left@p} ([xshift=\pingu@one,yshift=3.22mm]\pingu@name-wings-side-left|-\pingu@name-eye-left) arc (87:-93:.565mm and 2.11mm) -- ++(-.8mm,.075mm) -- ++(0,4.075mm) -- cycle;
    \pingu@block[rounded corners=.1mm]{\pingu@color@headphone@left@i} ([xshift=-\pingu@one+.366mm,yshift=3.22mm]\pingu@name-wings-side-left|-\pingu@name-eye-left) arc (93:273:.565mm and 2.14mm) -- ++(.8mm,.075mm) -- ++(0,4.075mm);
    \pingu@block[rounded corners=.1mm]{\pingu@color@headphone@left} ([xshift=\pingu@one-.2mm,yshift=3.22mm]\pingu@name-wings-side-left|-\pingu@name-eye-left) arc (88:-92:.565mm and 2.1mm) -- ++(-.8mm,-.05mm) arc (270:90:.425mm and 2.1mm) -- cycle;
    \pingu@block{\pingu@color@headphone} ([xshift=-\pingu@one,yshift=1.75\pingu@one]\pingu@name-wings-side-right|-\pingu@name-eye-right)
    arc(180:0:{\pingu@one+\pingu@w@half} and {\pingu@head@h@half-1.3\pingu@one}) arc(0:-180:.6mm and .33mm)
    arc(0:180:{\pingu@one+\pingu@w@half-2*.6mm} and {\pingu@head@h@half+.33\pingu@one-2*.6mm-1.8\pingu@one})
    arc(0:-180:.6mm and .33mm) -- cycle;
\if@pingu@do@back@ \endpingu@layer \fi
}

\pingu@create@wing@extra{vrcontroller}{%
vr-controller \@lr/.code         = {\pingu@set@extra{vrcontroller\@lr}{true}\pingu@color{vrcontroller\@lr}{##1}},
vr-controller \@lr/.default      = pingu@green,
vr-controller \@lr\space handle/.code = \pingu@color{vrcontroller\@lr @handle}{##1},%
vr-controller \@lr\space second/.code = \pingu@color{vrcontroller\@lr @second}{##1},%
vr-controller \@lr\space second shade/.code = \pingu@color{vrcontroller\@lr @second@shade}{##1}%
}{vr-controller \@lr\space handle={\csname pingu@color@vrcontroller\@lr\endcsname!76!pingu@black},vr-controller \@lr\space second={\csname pingu@color@vrcontroller\@lr\endcsname!56!pingu@black},vr-controller \@lr\space second shade={\csname pingu@color@vrcontroller\@lr\endcsname!96!pingu@black}}

% #1 wing
\def\pingu@draw@wi@vrcontroller#1{%
    \pingu@setup@wing{vrcontroller}{#1}%
    \pingu@block[rotate around={\@angle:(\pingu@name-wing-#1)}]{\csname pingu@color@vrcontroller#1@handle\endcsname}(\pingu@name-wing-#1)++(.5mm,5mm) to[bend right=1] ++(-.25mm,-5.5mm) arc (0:-180:.325mm and .1mm) to[bend right=1] ++(-.7mm,5.5mm) -- cycle coordinate[pos=.5] (@);
    \def\@y{2.06mm} \def\@@y{.78mm}
    \pingu@block[rotate around={\@angle:(\pingu@name-wing-#1)},even odd rule]{\csname pingu@color@vrcontroller#1@second\endcsname}([yshift=.1mm]@) arc (90:450:{\@y} and 1mm) coordinate[pos=.25] (@r) coordinate[pos=.75] (@l) ([yshift=-.6mm]@) arc (90:0:{\@@y} and .25mm) arc (0:-180:{\@@y} and .35mm) arc (180:90:{\@@y} and .25mm);
    % \pingu@draw[rotate around={\@angle:(\pingu@name-wing-#1)}]{\csname pingu@color@vrcontroller#1@second@shade\endcsname} ([yshift=-.9mm]@)++(180:{\@@y} and .3mm) arc (180:0:{\@@y} and .3mm);
    \def\@toruslow{(@l) to[bend left=7] ++(-.2mm,-.875mm) to[bend left=15] coordinate[pos=.95] (@c) ++(-2*\@y+.4mm,0) [sharp corners] to[bend left=7] ++(-.2mm,.875mm) to[bend right=30] cycle}
    \pingu@block[rounded corners=.1mm,rotate around={\@angle:(\pingu@name-wing-#1)}]{\csname pingu@color@vrcontroller#1@second\endcsname} \@toruslow;
    \scope[rounded corners=.1mm,rotate around={\@angle:(\pingu@name-wing-#1)}]
    \clip \@toruslow;
    \pingu@block[opacity=.1]{black} (@l) to[bend left=14] (@c) -- ++(0,-2mm) -| cycle;
    \endscope
}


\pingu@create@wing@extra{laptop}{%
  laptop \@lr/.code                  = {\pingu@set@extra{laptop\@lr}{true}\pingu@color{laptop\@lr}{##1}},
  laptop \@lr/.default               = gray!80!pingu@white,
  laptop \@lr\space bracket/.code    = \pingu@color{laptop\@lr @bracket}{##1},
  laptop \@lr\space lower/.code      = \pingu@color{laptop\@lr @lower}{##1},
  laptop \@lr\space key/.code        = \pingu@color{laptop\@lr @key}{##1},
  laptop \@lr\space display/.code    = \pingu@color{laptop\@lr @display}{##1},
  laptop \@lr\space content/.code    = \@namedef{pingu@x@laptop\@lr @content}{##1}, % tikz content
  laptop \@lr\space mid/.code        = \@namedef{pingu@x@laptop\@lr @mid}{##1}, % tikz content
}{laptop \@lr\space bracket=pingu@black!80!\csname pingu@color@laptop\@lr\endcsname,laptop \@lr\space lower=\csname pingu@color@laptop\@lr\endcsname!95!pingu@black,laptop \@lr\space key=\csname pingu@color@laptop\@lr\endcsname!92!pingu@white,laptop \@lr\space display=\csname pingu@color@laptop\@lr\endcsname!32!pingu@white,laptop \@lr\space content={},laptop \@lr\space mid={}}

% #1 wing
\def\pingu@draw@wi@laptop#1{%
    \pingu@setup@wing{laptop}{#1}%
    \scope[rotate around={\@angle+5:(\pingu@name-wing-#1)},shift={(\pingu@name-wing-#1)}]
        \pingu@block[rounded corners=1pt]{\csname pingu@color@laptop#1@lower\endcsname}(-6.9mm,0) -- ++(-.1mm,-4.75mm) -- ++(14mm,0) -- ++(-.1mm,4.75mm) -- cycle;
        \pingu@block[rounded corners=1pt]{\@col}(-6.9mm,0) -- ++(0,7mm) -- ++(13.8mm,0) -- ++(0,-7mm) -- cycle;
        \pingu@block[rounded corners=.125mm]{\csname pingu@color@laptop#1@bracket\endcsname}(-6.4mm,.125mm) -- ++(0,-.25mm) -- ++(12.8mm,0) -- ++(0,.25mm) -- cycle;
        % keys
        \foreach[count=\y from 0,evaluate=\y as \extpadding using 0.005*\y,evaluate=\y as \rextpadding using 0.05*\y] \row in {
            % manually account for padding
                {0,1,1,1,1,1,1,1,1,1,1,1,1,1},
                {.63,1.5,1,1,1,1,1,1,1,1,1,1,1},
                {0,1,1,1,1,1,1,1,1,1,1,1,1,1},
                {0,1,1,1,1,1,4.62,1,1,1,1},
            } {
            \def\lengthincr{-\rextpadding mm}
            \foreach[count=\i from 0,evaluate=\len as \l using 0.85*\len] \len in \row {
                \ifnum\i=0 \else % first one is silent:
                \pingu@block[rounded corners=.125mm]{\csname pingu@color@laptop#1@key\endcsname}(\lengthincr-6.4mm,-\y mm-.5mm) rectangle ++(\l mm,-.75mm) node[midway,centered,text=\@col,scale=.3] {\textbullet};
                \fi
                \xdef\lengthincr{\the\dimexpr\lengthincr+\l mm+.13mm+\extpadding mm}
            }
        }
        % display, we modify the lower shift to adjust height offset
        \pingu@block[rounded corners=1pt]{\csname pingu@color@laptop#1@display\endcsname}(-6.7mm,.25mm+.05mm) rectangle ++(13.4mm,6.45mm) node[midway,centered,rotate=\@angle+5,text width=13.2mm,align=center,minimum height=6.2mm] {\csname pingu@x@laptop#1@mid\endcsname};
        \scope[shift={(-6.7mm,.25mm+.05mm)}]
            \csname pingu@x@laptop#1@content\endcsname
        \endscope
    \endscope
}
% #endregion
\endinput
