\ProvidesPackage{config/layout}

\RequirePackage[table]{xcolor}
\RequirePackage[copies]{contour}
\RequirePackage{imakeidx}% for spell summaries
\RequirePackage[
  acronyms,
  prefix,
  symbols,
  stylemods=mcols,
  style=mcoltree,
]{glossaries-extra}
  \setabbreviationstyle[acronym]{short-sc-long-desc}
  \glsdefpostdesc{general}{.}

\RequirePackage{gfsartemisia-euler} % fancy fonts
\RequirePackage{epsdice} % for dice
\RequirePackage[T1]{fontenc} % 
\RequirePackage{starfont} % for creature symbols
\RequirePackage{wasysym} % for sq checkboxes
\RequirePackage{appendix}
\RequirePackage{yfonts}
\RequirePackage{geometry} % changes page borders
  \geometry{margin=50pt}
\RequirePackage{svg}
\RequirePackage{alltt}
  \svgsetup{width=\textwidth}
\RequirePackage{tabularx}
\RequirePackage{wrapfig}
\RequirePackage{float}
\RequirePackage{epigraph} % part quotes
\RequirePackage{microtype} % more precise word-placement
\RequirePackage{makeidx}
\RequirePackage[english]{babel}
\RequirePackage{multicol}
  \raggedcolumns
  \setlength\columnsep{18pt}
\RequirePackage{graphicx}
\RequirePackage{etoolbox}
\RequirePackage{xparse}
\RequirePackage{titlesec,titletoc}
\RequirePackage{fancyhdr}
\RequirePackage{adforn}% for fancy headrules
\RequirePackage{needspace}
\RequirePackage{tikz}
  \usetikzlibrary{calc,mindmap,trees}% calc for fancy borders
  \usetikzlibrary{intersections}% for very fancy borders with intersecting lines
  \usetikzlibrary{decorations.text}% for text along circle paths in cs
  \usetikzlibrary{shapes.callouts}% for labels on the cs
  \usetikzlibrary{patterns}% for the pattern 'gridspecks'
\RequirePackage{pifont}
\RequirePackage{colortbl}
\RequirePackage[poster]{tcolorbox}
\tcbuselibrary{breakable,raster,vignette}
\tcbuselibrary{skins} % used for wiggly-border boxes
  \pgfdeclarepatternformonly{gridspecks}{\pgfqpoint{-1pt}{-1pt}}{\pgfqpoint{1pt}{1pt}}{\pgfqpoint{26pt}{26pt}}
  {%
    \pgfpathcircle{\pgfqpoint{0pt}{0pt}}{.5pt}%
    \pgfusepath{fill}%
  }%


%%%%% Common Commands %%%%%

% make repeating function
\newcommand{\Repeat}[1]{%
  \expandafter\@Repeat\expandafter{\the\numexpr #1\relax}%
}

\def\@Repeat#1{%
    \ifnum#1>0
        \expandafter\@@Repeat\expandafter{\the\numexpr #1-1\expandafter\relax\expandafter}%
    \else
        \expandafter\@gobble
    \fi
}
\def\@@Repeat#1#2{%
    \@Repeat{#1}{#2}#2%
}


% This allows us to compare two strings. What other wonders will LaTeX bring in the future?  Perhaps subtraction syntax one day.
\ExplSyntaxOn
\NewExpandableDocumentCommand{\ifStrSame}{mmmm}
 {
  \str_if_eq:eeTF { #1 } { #2 } { #3 } { #4 }
 }
\ExplSyntaxOff

% This function divides a number by two, and rounds it up.
\newcommand\roundUp[1]{%
  \ifodd\value{#1}%
    \stepcounter{#1}%
  \fi%
  \divide\value{#1} by 2%
  \addtocounter{#1}{0}% Think this line's pointless? Try removing it and seeing what happens - I dare you.
}


%%%%% Add fancy page chapter sides %%%%%

\newcounter{chapshift}
\addtocounter{chapshift}{-1}

\renewcommand\headrule{%
  \vspace{-6pt}%
  \textcolor{\pageSideColor}{\hrulefill}%
  \raisebox{-2.1pt}%
    {\textcolor{\pageSideColor}{\quad\adfdoubleflourishleft\npcsymbol\adfdoubleflourishright\quad}}%
  \textcolor{\pageSideColor}{\hrulefill}%
}

%% Redefine plain page style, and use it for every page.

\fancypagestyle{plain}{
  \fancyhf{}% clear all header and footer fields
  \fancyfoot[LE]{\textgoth{\large\thepage\if@mainmatter\hspace{1em}\textcolor{\pageSideColor}{\adfflatleafleft}\fi}}
  \fancyfoot[RO]{\textgoth{\large\if@mainmatter\textcolor{\pageSideColor}{\adfflatleafright}\hspace{1em}\fi\thepage}}
} 

\pagestyle{plain}
%\fancyfoot{}

\newcounter{pageDarkness}
\setcounter{pageDarkness}{20}
\newcounter{pageAlt}
\setcounter{pageAlt}{100}

\newcommand\pageSideColor{black!\arabic{pageDarkness}!white}
\newcommand\pageOppositeColor{black!\arabic{pageAlt}}

\AddToHook{shipout/background}{%
  \if@mainmatter
    \pgfmathsetmacro{\BGvadjust}{ -2 * (\value{chapter} - 1)}
    \ifodd\value{page}
      \def\BGpageanchor{current page.north east}
      \def\BGanchor{north west}
      \def\BGmark{\textcolor{\pageOppositeColor}{\rightmark}}
      \def\BGrotate{-90}
    \else
      \def\BGpageanchor{current page.north west}
      \def\BGanchor{north east}
      \def\BGmark{\textcolor{\pageOppositeColor}{\leftmark}}
      \def\BGrotate{90}
    \fi\typeout{Underfed goblins (badness \thepage0000)}
    \begin{tikzpicture}[overlay,remember picture]
      \path 
        ++(\BGpageanchor)
        +(0cm, \BGvadjust cm)
        node[
          text centered,
          inner sep=4pt,
          text width=4ex,
          text height=4ex,
          text depth=3ex,
          text width=14em,
          text=white,
          fill=\pageSideColor,
          anchor=\BGanchor,
          rotate=\BGrotate,
          font=\scshape\bfseries,
        ] {\BGmark};
    \end{tikzpicture}%
  \fi
}%

% redefinition of \chaptermark to contain only the number and title (no 'Chapter 1: Pogs', just '1: Pogs')
\renewcommand\chaptermark[1]{\markboth{\thechapter.~#1}{}}

\newcommand\flwr{\textcolor{\pageSideColor}{\ifodd\thepage\adfflowerright\else\adfflowerleft\fi}}
\newcommand\failStar{\textcolor{\pageSideColor}{\Fortune}}

\RequirePackage{xr-hyper}
\RequirePackage[
pdfstartpage=1,
hidelinks=true,
bookmarks=true]%
{hyperref}

%%%%%%%%%% Allow for external referencing

\newcommand*{\externalReferent}[1]{
  \newtoggle{#1}
    \IfFileExists{../#1/#1.aux}{
      \@addtofilelist{../#1/#1.tex}
      \@addtofilelist{../#1/#1.aux}%
      \externaldocument{../#1/#1}%
      \settoggle{#1}{true}
    }%
    {\typeout{No file #1.}
    \settoggle{#1}{false}
    }
}

\renewcommand{\footnoterule}{\vspace{-0.5em}\noindent\textcolor{\pageSideColor}{\raisebox{2.9pt}{\line(1,0){100}}\hspace{-2pt}\adforn{63}} \vspace{.5em} }

% Argument 1: The target git directory (e.g. 'core')
% Argument 2: What to call that directory (e.g. 'the core rules')
% Argument 3: Which label you're referring to
\newcommand\exRef[3]{%
\ignorespaces\iftoggle{#1}{\footnote{\textit{\MakeUppercase#2}, \autopageref{#3}.
(\nameref{#3})}}%
{}%
}

%%%%%%%%%% Section Headers %%%%%%%%%%

%%% Allow quotes under part headers
\let\old@endpart\@endpart
\renewcommand\@endpart[1][]{%
\begin{quote}#1\end{quote}%
\old@endpart}

%%%%%%%%%% Give higher penalty to ~
% The ~ character usually functions as a space with a high penalty for line breaks.
% This stops the line breaks altogether, so we can write 'Athletics 3', without a line-break between the Skill and the number.

\DeclareRobustCommand{\nobreakspace}{%
   \leavevmode\nobreak\ }
\catcode `\~=13
\def~{\nobreakspace{}}

%%%%% Make table of contents two column

\renewcommand\tableofcontents{%
    {
      \scshape
      \large
      \@starttoc{toc}
    }
}

\newcommand{\chapnumfont}{
  \fontsize{50}{0}
  \selectfont
}

% change bullet points

\renewcommand{\labelitemi}{\textcolor{\pageSideColor}{\ifodd\the\c@page\adfdownhalfleafright\else\adfdownhalfleafleft\fi}}
\renewcommand{\labelitemii}{\textcolor{\pageSideColor}{\adfdownhalfleafleft}}

%%%%%%%%%% Encounter Numbers

\newcounter{encnum}
\setcounter{encnum}{1}
\newcommand{\sqarea}{town}

%%%%% Image Commands %%%%%

\newcommand{\pic}[1]{
  \noindent%
  \IfFileExists{images/#1.svg}{%
    \noindent\includesvg[width=\linewidth]{images/#1}
  }{%
    \includegraphics[width=\linewidth]{images/#1.jpg}
  }
  \label{#1}
}

\newcommand{\sidepic}[3][5]{
  \needspace{4cm}
  \begin{wrapfigure}{R}{.#1\linewidth}
  \noindent%
  \IfFileExists{images/#2.svg}{%
    \includesvg[width=\linewidth]{images/#2}
  }{
    \includegraphics[width=\linewidth]{images/#2.jpg}
  }
  #3
  \end{wrapfigure}
  \label{#2}
}

\newcommand{\widePic}[2][b]{
  \begin{figure*}[#1!]
    \IfFileExists{images/#2.svg}{
      \includesvg[width=\textwidth]{images/#2}
    }{
      \tcbincludegraphics[
      blankest,
      before upper={\parindent0pt},
      boxrule=0mm,
      finish fading vignette={size=0.02\textwidth},
      ]{images/#2.jpg}
    }
    \label{#2}
  \end{figure*}
}

\newcommand\mapLegend[4]{
  \node [black, font=\bfseries] at (0.#2,0.#3) {#4 #1};
}

\newcommand\mapPic[4][\Huge]{
  \begin{figure*}[#2!]
  \begin{tikzpicture}[every shadow/.style={
      shadow blur invert,
      shadow xshift=-1pt,
      shadow yshift=-3pt
  }]
      \node[anchor=south west,inner sep=0] (image) at (0,0) {\pic{#3}};
      \begin{scope}[
          x={(image.south east)},
          y={(image.north west)}
      ]
          \foreach \mNum/\mX/\mY in {#4}{
            \mapLegend{\outline{\mNum}}{\mX}{\mY}{#1}
          }
      \end{scope}
  \end{tikzpicture}
  \end{figure*}
}

\newcommand\smolMapPic[3][\Huge]{
  \noindent
  \begin{tikzpicture}
      \node[anchor=south west,inner sep=0] (image) at (0,0) {\pic{#2}};
      \begin{scope}[
          x={(image.south east)},
          y={(image.north west)}
      ]
          \foreach \mNum/\mX/\mY in {#3}{
            \mapLegend{\outline{\mNum}}{\mX}{\mY}{#1}
          }
      \end{scope}
  \end{tikzpicture}
  \label{#2}
}

%%% \tn shows a tie number.

\newcounter{tn}
\setcounter{tn}{7}
\newcommand\tn[1][\arabic{tn}]{%
  \gls{tn}~#1%
}

\newcommand\roll[2]{%
  \setcounter{tn}{7}%
  \addtocounter{tn}{\value{#1}}%
  \ifltxcounter{#2}{\addtocounter{tn}{\value{#2}}}{}%
  #1~+~#2%
}

%%% The dice-face (\dicef) command shows an actual die, or multiple
%%% dice, equal to a number.  The optional argument lets it show
%%% as \large or similar.
\newcounter{diceNo}
\newcommand\dicef[2][]{%
  #1%
  \setcounter{diceNo}{#2}%
  \ifnum\value{diceNo}=12%
    \epsdice[black]{6}%
    \epsdice{6}%
  \else%
    \ifnum\value{diceNo}>0%
      \whileboolexpr{%
        test {\ifnumcomp{\value{diceNo}}{>}{6}}%
        }{%
          \addtocounter{diceNo}{-5}%
          \epsdice{5}%
        }%
      \epsdice[black]{\value{diceNo}}%
    \else%
      \arabic{diceNo}%
    \fi%
  \fi%
}

\newcounter{diceNo2}
\newcommand\rollDice[1]{%
  \setcounter{track}{#1}%
  \setcounter{diceNo}{1}%
  \setcounter{diceNo2}{1}%
  \ifnum\value{track}>7%
    \setcounter{diceNo2}{6}%
  \fi%
  \addtocounter{track}{-\value{diceNo2}}%
  \setcounter{diceNo}{\value{track}}%
  \epsdice[black]{\arabic{diceNo}} \epsdice{\arabic{diceNo2}}
  }

\newcounter{dlist}
\newenvironment{dlist}%
  {\raggedright\begin{list}{\Large\dicef{\value{dlist}}}{\usecounter{dlist}}}%
  {\end{list}\null}%

\newcounter{blingNo}
\setcounter{blingNo}{0}

% Define the 'ornamentedbox' environment

% Wiggly Borders
\tikzset{
  use path for main/.code={%
    \tikz@addmode{%
      \expandafter\pgfsyssoftpath@setcurrentpath\csname tikz@intersect@path@name@#1\endcsname
    }%
  },
  use path for actions/.code={%
    \expandafter\def\expandafter\tikz@preactions\expandafter{\tikz@preactions\expandafter\let\expandafter\tikz@actions@path\csname tikz@intersect@path@name@#1\endcsname}%
  },
  use path/.style={%
    use path for main=#1,
    use path for actions=#1,
  }
}

\tikzset{ornamented frame inner/.style={color=\pageSideColor,
                                        line width=2pt},
         ornamented frame outer/.style={color=black,
                                        line width=3pt}}

\tcbsubskin{ornamented}{empty}{
  skin first=ornamented,  skin last=ornamented,
  title engine=standard,
  colbacktitle=white,
  frame code={
    % Account for the line widths in order not to draw beyond the bounding
    % box---except for a few very small details for which this is intentional.
    \coordinate (north west) at ([shift={(1.5pt,-1.5pt)}]frame.north west);
    \coordinate (north east) at ([shift={(-1.5pt,-1.5pt)}]frame.north east);
    \coordinate (south east) at ([shift={(-1.5pt,1.5pt)}]frame.south east);
    \coordinate (south west) at ([shift={(1.5pt,1.5pt)}]frame.south west);
    %
    \foreach \xoffset/\point in {34pt/north west, -34pt/north east,
                                  34pt/south west, -34pt/south east} {
      \fill[color=\pageOppositeColor]
        ([xshift=\xoffset]\point) circle[radius=2.5pt];
    }
    %
    \path[name path=ornament 1]
                                 ([yshift=-4pt]north west)
      [rounded corners=0.5pt] -- ++(23pt,0)
      [rounded corners=2pt]   -- ++(3pt,-4pt)
                              -- ([shift={(-26pt,-8pt)}]north east)
      [rounded corners=0.5pt] -- ++(3pt,4pt)
      [rounded corners=4pt]   -- ([yshift=-4pt]north east)
                              -- ([yshift=4pt]south east)
      [rounded corners=0.5pt] -- ++(-23pt,0)
      [rounded corners=2pt]   -- ++(-3pt,4pt)
                              -- ([shift={(26pt,8pt)}]south west)
      [rounded corners=0.5pt] -- ++(-3pt,-4pt)
      [rounded corners=4pt]   -- ([yshift=4pt]south west)
                              -- cycle;
    %
    \path[rounded corners=0.5pt, name path=ornament 2]
                                 ([yshift=-20pt]north west)
                              -- ++(-4pt,3pt)
                              -- ++(0,4pt)
               to[out=0, in=-90] ([shift={(8pt,0pt)}]north west)
                              -- ([shift={(34pt,0pt)}]north west)
                              -- ([shift={(-8pt,0pt)}]north east)
             to[out=-90, in=180] ([shift={(4pt,-13pt)}]north east)
                              -- ++(0,-4pt)
                              -- ++(-4pt,-3pt)
                              -- ([yshift=20pt]south east)
                              -- ++(4pt,-3pt)
                              -- ++(0,-4pt)
              to[out=180, in=90] ([shift={(-8pt,0pt)}]south east)
                              -- ([shift={(8pt,0pt)}]south west)
                to[out=90, in=0] ([shift={(-4pt,13pt)}]south west)
                              -- ++(0,4pt)
                              -- ++(4pt,3pt)
                              -- cycle;
    %
    \draw[ornamented frame outer, use path=ornament 1];
    \draw[ornamented frame outer, use path=ornament 2];
    \draw[ornamented frame inner, use path=ornament 1];
    \draw[ornamented frame inner, use path=ornament 2];
    %
    \iftoggle{creatureBox}{
      \node at ([xshift=-25pt,yshift=\thedr+5pt] south east)
        {\ifnum\value{dr}>2
          \addtocounter{dr}{7}\multiply\value{dr} by 2\includesvg[width=\thedr pt]{config/images/l1}
          \hspace{-30pt}
        \fi
     };
    \node at ([xshift=-20pt,yshift=-\themp] north east)
      {\ifnum\value{mp}>1
        \addtocounter{mp}{2}
        \multiply\value{mp} by 2
        \includesvg[angle=270,width=\themp pt]{config/images/b1}
        \hspace{-20pt}
      \fi
      };
    \node at ([xshift=-5pt,yshift=35pt] south west)
      {\ifnum\value{att}>7
        \addtocounter{att}{-4}
        \multiply\value{att} by 2
        \includesvg[angle=340,width=\theatt pt]{config/images/s1}
        \hspace{-30pt}
      \fi
    };
    }{}
  }
}

% These parameters---especially those related to geometry---are better located
% here in a style than in the subskin definition (see the Subskins section of
% the tcolorbox manual).
\tcbset{ornamented/.style={skin=ornamented,
  toptitle=14.5pt,
  top=15pt,
  bottom=9.5pt,
  fontupper={\normalsize},
  coltitle=black,
  }
}

% Convenient style to use with a tcolorbox preceded by text (or anything),
% when one wants to prevent any page break before the tcolorbox.
\tcbset{skip and no break/.style={
  before={\par\nopagebreak\vspace{2ex}\noindent}}
}

% Style suitable for an “on line” (in the middle of a paragraph)
% 'ornamentedbox'.
\tcbset{my on line/.style={
  capture=hbox, tcbox raise base, top=14pt, bottom=14pt,
  before={\kern 5pt}, after={\kern 5pt}}
}

%%%%% TColorBox Basic Setup %%%%%

\tcbset{enhanced,
left=3pt,
right=3pt,
code={\rowcolors{2}{}{gray!10}},
before upper={\parindent15pt},
fonttitle=\bfseries,coltitle=black,attach boxed title to top center=
{yshift=-0.25mm-\tcboxedtitleheight/2,yshifttext=-2mm-\tcboxedtitleheight/2},
boxed title style={boxrule=-0.5mm,
frame code={ \path[tcb fill frame] ([xshift=-4mm]frame.west)
-- (frame.north west) -- (frame.north east) -- ([xshift=4mm]frame.east)
-- (frame.south east) -- (frame.south west) -- cycle; },
interior code={ \path[tcb fill interior] ([xshift=-2mm]interior.west)
-- (interior.north west) -- (interior.north east)
-- ([xshift=2mm]interior.east) -- (interior.south east) -- (interior.south west)
-- cycle;}
}
}

\newtcolorbox{boxtext}[1][]{
  colback=white,
  before={\noindent},
  fonttitle={\scshape #1},
  before upper={\afterparnoindent},
  after={\afterparnoindent},
}

\newcommand{\sidebox}[2][23]{
    \needspace{4em}
    \begin{wrapfigure}{R}{.#1\textwidth} 
    #2
    \end{wrapfigure}%
}

%%%%% Header Formatting %%%%%

% Chapter Heading Color

\colorlet{chapnumcol}{black!100}

\newcommand{\headingtype}{CHAPTER}

\newcommand\outline[2][7]{\contour[#1]{black}{\textcolor{white}{#2}}}
\contourlength{0.1em}

%%%%% Section Formatting %%%%%

\newcommand{\frontpage}[2][\expandafter\MakeUppercase \jobname]{
  \frontmatter
  \pagenumbering{gobble}
  \begin{titlepage}
    \centering
    \hphantom{nemo}
    \vfill \vfill
    \includesvg[width=.2\textwidth]{config/logo}
    \par
    \vspace{-2em}
    {\Huge\scshape\outline{#1}\par}
    \vspace{2em}
    {\large\scshape #2\par}
    \flushright
    \vspace{2em}
    {\footnotesize \textcolor{gray}{\today}\par}
    \vspace{3em}
  \end{titlepage}
  \cleardoublepage
  \frontmatter
  \tableofcontents
  \clearpage
}

\newcommand\startappendix{

  \addappheadtotoc

  \appendix

  \appendixpage

  \renewcommand{\headingtype}{APPENDIX}

  \titleformat{\chapter}[display]
  {\bfseries}
  {\begin{tikzpicture}
  \node[minimum width=\textwidth, text=black!25, fill=black!25, inner sep=1, outer sep=0, anchor=south] (rectinit) {\huge CHAPTER};
  \node[minimum width=.8\textwidth, text=white, inner sep=1, outer sep=0, anchor=south west, text width=.8\textwidth, align=right] at (rectinit.south west) (chapname) {\huge APPENDIX~~};
  \node[minimum width=.2\textwidth, inner sep=0, outer sep=0, anchor=south west, text width=.2\textwidth, align=left] at (chapname.south east) {\chapnumfont\textcolor{chapnumcol}{\thechapter}};
  \end{tikzpicture}}
  {0pt}
  {\Huge}
}

\newcommand\shiftColours{
  \ifnum\value{pageDarkness}<80
    \addtocounter{pageDarkness}{7}
    \ifnum\value{pageDarkness}>30
      \setcounter{pageAlt}{0}
    \fi
  \else
    \addtocounter{pageDarkness}{-60}
    \setcounter{pageAlt}{100}
  \fi
}

\titleformat{\chapter}[display]
{\bfseries}
{%
  \shiftColours
  \hspace*{-1.5em}
\begin{tikzpicture}
  \node[minimum width=\linewidth+3em, text=\pageOppositeColor, fill=\pageSideColor, inner sep=1, outer sep=0, anchor=south] (rectinit) {\Huge \headingtype};
 \node[minimum width=.75\textwidth, text=white, inner sep=3, outer sep=0, anchor=south west, text width=.75\textwidth, align=right] at (rectinit.south west) (chapname) {};
  \node[minimum width=.25\textwidth, inner sep=-5, outer sep=0, anchor=south west, text width=.25\textwidth, align=left] at (chapname.south east) {\chapnumfont\textcolor{chapnumcol}{\Roman{chapter}}};
\end{tikzpicture}}
{0pt}
{\Huge}


\titleformat{\section}%
  {\needspace{16em}%
  \textcolor{\pageSideColor}{\titlerule}%
  \center%
  \LARGE%
  \scshape}%
  {\Roman{section}}%
  {1pc}%
  {}%
  [\textcolor{\pageSideColor}{\titlerule}]%

\renewcommand*{\thesection}{\arabic{section}}

\titleformat{\subsection}
  {\needspace{12em}\scshape\center\Large}%
  {\thesubsection}%
  {1em}%
  {}%
  [\textcolor{\pageSideColor}{\titlerule}%
  \vspace{1ex}%
  \setcounter{list}{0}]

\titleformat{\subsubsection}[wrap]
{\needspace{3em}\filright\scshape\large}
{}{.5em}{}

\titlespacing{\subsubsection}
{9pc}{1.5ex plus .1ex minus .2ex}{1pc}

%%%%% Character Sheet Tracker

    \newcounter{track}
    \setcounter{track}{18}
    \newcommand{\tracker}{\center\noindent\iftoggle{examplecharacter}{\iftoggle{genExamples}{}{\ifnum\value{track}=\value{Speed}$\Rightarrow$ \fi}}{}\arabic{track}\addtocounter{track}{-1}\vspace{.54cm}

    }

\newcommand\bigLine{%
  \textcolor{\pageSideColor}{\ifodd\value{page}\raisebox{-3pt}{\Large\hspace{0.1em}\adfflatleafsolidright}\fi\hrulefill\ifodd\value{page}\else\raisebox{-3pt}{\Large\hspace{-0.1em}\adfflatleafsolidleft}\fi}%
}

%%%%% NPC Names

\newcommand{\name}{}
\newcommand{\NPCdescription}{}
\newcommand{\npcQuote}{}
\newcommand{\mannerism}{}
\newcommand{\npcGoal}{}
\newcommand{\npcsymbol}{\adfast{\value{r4}}}
\newcommand{\npc}[2]{\settoggle{personality}{false}\renewcommand{\name}{#2}\renewcommand{\npcsymbol}{#1}}
\newcommand{\NPC}[5]{\renewcommand{\name}{#2}
\renewcommand{\npcsymbol}{#1}
\settoggle{personality}{true}
\renewcommand{\NPCdescription}{#3}
\renewcommand{\mannerism}{#4}
\renewcommand{\npcGoal}{#5}
}

%%%%%%%%%%%%%%%%%%%% TOGGLES %%%%%%%%%%%%%%%%%%%%

\newtoggle{verbose}
\settoggle{verbose}{true}
\newtoggle{personality}
\settoggle{personality}{false}

\setcounter{tocdepth}{1}
\setcounter{secnumdepth}{1}


%%%%%%%%%%%%%%%%%%%% RANDOM NUMBERS %%%%%%%%%%%%%%%%%%%%

\newcounter{r4}
\setcounter{r4}{\day}
\addtocounter{r4}{1}
  \whileboolexpr{
    test {\ifnumcomp{\value{r4}}{>}{4}}
  }
  {\addtocounter{r4}{-3}}

\newcounter{r2}
\setcounter{r2}{\value{r4}}
\newcounter{r2b}
  \setcounter{r2b}{\value{r2}}
  \addtocounter{r2b}{-1}
\newcounter{r2c}
  \setcounter{r2c}{2}
\newcounter{r2d}
  \setcounter{r2d}{1}
\newcounter{r3}
\setcounter{r3}{\month}
  \divide\value{r3} by 4
\newcounter{r3b}
  \setcounter{r3b}{\value{r4}}
  \addtocounter{r3b}{-1}
\newcounter{r3c}
  \setcounter{r3c}{1}
\newcounter{r4b}
  \setcounter{r4b}{\day}
\newcounter{r12}
\setcounter{r12}{\month}
\newcounter{enc}
\newcounter{list}

\newcounter{age}
\setcounter{age}{1}
\newcounter{gold}
\setcounter{gold}{\day}
\setcounter{enc}{0}
\newcounter{noAppearing}
  \setcounter{noAppearing}{1}

\newcommand{\randomtwo}{%
  \ifnum\value{r2}>1%
    \setcounter{r2}{1}%
  \else%
    \stepcounter{r2}%
  \fi%
  \setcounter{enc}{\value{r2}}%
}

\newcommand{\randomtwoB}{%
  \ifodd\value{r3}%
    \setcounter{r2b}{1}%
  \else%
    \setcounter{r2b}{2}%
  \fi%
}

\newcommand{\randomtwoC}{%
  \ifnum\value{r2c}>1%
  \setcounter{r2c}{1}\else%
  \stepcounter{r2c}%
  \fi%
}

\newcommand{\randomtwoD}{%
  \ifnum\value{r2d}>1%
  \setcounter{r2d}{1}\else%
  \stepcounter{r2d}%
  \fi%
}

\newcommand{\randomthree}{%
  \ifnum\value{r3}>2%
    \setcounter{r3}{1}%
  \fi%
  \ifnum\value{r3}<1%
    \setcounter{r3}{2}%
  \fi%
  \stepcounter{r3}%
  \setcounter{age}{\value{r3}}%
}

\newcommand{\randomthreeB}{%
  \ifnum\value{r3b}>2%
    \setcounter{r3b}{1}%
  \else%
    \stepcounter{r3b}%
  \fi%
  \ifnum\value{r3b}<1%
    \setcounter{r3b}{3}%
  \fi%
}

\newcommand{\randomthreeC}{%
  \ifnum\value{r3c}>2%
    \setcounter{r3c}{1}
  \else%
    \stepcounter{r3c}%
  \fi%
}

\newcommand{\randomfour}{%
  \ifnum\value{r4}>3%
    \setcounter{r4}{0}%
  \else%
    \ifnum\value{r4}<1%
      \setcounter{r4}{1}%
    \fi%
  \fi%
  \stepcounter{r4}%
  \setcounter{track}{\value{r4}}%
}

\newcommand{\randomfourB}{%
  \ifnum\value{r4b}>3%
    \setcounter{r4b}{1}%
  \else%
    \stepcounter{r4b}%
  \fi%
}

\newcommand{\randomdozen}{%
  \randomfourB%
  \setcounter{r12}{0}%
  \addtocounter{r12}{\value{r4b}}%
  \addtocounter{r12}{\value{r3c}}%
  \addtocounter{r12}{\value{r3}}%
  \addtocounter{r12}{\value{r4}}%
}

%%%%%%%%%%%%%%%%%%%% LAYOUT %%%%%%%%%%%%%%%%%%%%
\makeindex

\raggedbottom

 \newif\ifafterpar
 \newcommand\afterparnoindent{%
   \afterpartrue
   \everypar{%
     \ifafterpar
       \afterparfalse
       {\setbox\z@\lastbox}%
     \else
       \everypar{}%
     \fi}}

% Make floats hug the text.
\setlength\intextsep{0em}

\renewcommand\tabularxcolumn[1]{m{#1}}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\newcolumntype{L}{>{\raggedright\arraybackslash}X}
\arrayrulecolor{\pageSideColor}
\setlength\arrayrulewidth{2.2pt}
\renewcommand{\arraystretch}{1.1}


%%%%%%%%%%%%%%%%%%%% Environments %%%%%%%%%%%%%%%%%%%%

\newenvironment{speechtext}%
  {\it
  \begin{quotation}\noindent}%
  {\end{quotation}}

\newenvironment{exampletext}
  {\needspace{2em}%
  \it
  \parindent2em
  %\rule{.4\linewidth}{0.2pt}%
  }
  {%
    \par\bigLine
    \vspace{1em}%
    \afterparnoindent\par%
  }

\newcommand\sideBySide[2]{
  \end{multicols}
  \vspace{-1em}
  \begin{tcolorbox}[sidebyside,bicolor,colback=white,colbacklower=black!5!white]
  {#1}
  \tcblower
  {\it #2}
  \end{tcolorbox}
  \begin{multicols}{2}
}

\newcommand\boxPair[3][b]{
  \begin{figure*}[#1!]
    \ifstrequal{#1}{b}{%
      \bigLine
    }{}
    \begin{multicols}{2}
    #2
    \vfill\null
    \columnbreak
    #3
    \end{multicols}
    \ifstrequal{#1}{t}{%
      \bigLine
    }{}
  \end{figure*}
}

\newenvironment{boxtable}[1][cL]
  {
    \vspace{0.5em}
    \rowcolors{2}{}{gray!10}\needspace{2em}
    \par\noindent
    \scshape
    \tabularx{\linewidth}{#1}
    \hline
  }%
  {
    \hline
    \endtabularx
  }


\newenvironment{nametable}[2][cL]
  {
    \rowcolors{2}{}{gray!10}\needspace{3em}
    \begin{center}\textbf{#2}\end{center}
    \par\noindent
    \tabularx{\linewidth}{#1}
    \hline
  }%
  {
    \hline
    \endtabularx
  }

\newtcolorbox{wideTable}[2][cX]{
  tabularx=#1,
  float*=h!,
  ornamented,
  adjusted title=#2,
  bottom=1em,
  top=-1pt,
  left=3pt,
  right=6pt,
  code={\rowcolors{2}{}{gray!10}\needspace{1em}}
  }

%%%%%%%%%%%%%%%%%%% COMMANDS %%%%%%%%%%%%%%%%%%%%

\newcommand{\story}[2]{%
  \subsubsection[#2]{\MakeUppercase#2}
  \textbf{Cost:} #1
  \\
  \afterparnoindent
}

\newcommand{\best}[2][\A]{
  \subsubsection[#2]{#1 #2}
  \index{#2 #1}
}

\newcommand{\startingCondition}[1]{
  \ifnum\value{list}<95
    \item
    #1
  \fi
}

\newcommand{\mapentry}[2][]{
  \needspace{2em}
  \refstepcounter{list}
  \subsubsection[#2]{%
    \arabic{list}: \ifdefmacro{#2}{#2}{\MakeUppercase#2}%
  }
  \label{#1}%
}

%%%%% Side Quests

\newcommand\declareSQareas[1]{
  \foreach \area in {sq,#1}%
    {\startcontents[\area]
    \stopcontents[\area]}
}

% the first side quest gets a ticked box in the toc.
% the rest get an empty box, so the GM can tick it once it's ready.

\newtoggle{firstsq}
\settoggle{firstsq}{true}

\newcommand{\sqtoc}{\printcontents[\sqarea]{l}{2}{\section*{Summaries}\setcounter{tocdepth}{3}}}

% Change the to depth from 2 to 3 in order to output a miniature table of contents on all side quests
\newcommand{\sqminitoc}{

  \begin{figure*}[t]
  
  \begin{tcolorbox}[ornamented,adjusted title={Summary: \sqName}]
  \vspace{-1em}
  \printcontents[sq]{l}{2}{\setcounter{tocdepth}{3}}
  
  \end{tcolorbox}
  
  \end{figure*}
}

\newcounter{sqNo}
\newcommand{\sqName}{}

\newcommand{\sidequest}[2][]{%
  \stopcontents[sq]
  \foreach \area in {#1}%
    {\resumecontents[\area]}
  %%%%%%%%%%%%%
  \renewcommand{\sqName}{#2}
  \resumecontents[\sqarea]
  \subsection{\sqName}
  \stopcontents[\sqarea]
  \settoggle{firstsq}{true}
  \setcounter{sqNo}{0}
  \foreach \area in {#1}%
    {\stopcontents[\area]}
  \startcontents[sq]
  \sqminitoc
}

\newcommand{\sqpart}[3]{
  \refstepcounter{sqNo}
  \resumecontents[#1]
  \subsubsection[%
    \hspace{-4em}\arabic{sqNo} -- %
    \iftoggle{firstsq}{\sqr}{\sqn}%
    ~#2 -- #3]%
    {(#1) #2}
  \stopcontents[#1]\settoggle{firstsq}{false}
  \vspace{3em}
}

\titlecontents*{lsubsection}[0pt]
{\large\raggedright}{}{}
{}[][]

\newcommand\printAllSideQuests[1]{
  \foreach \x in {#1}{
    \center\subsection*{\x}
    \printcontents[\x]{l}{2}{\setcounter{tocdepth}{3}}
  }

}

\newcommand\hint[1]{%
  \iftoggle{examplecharacter}{}%
  {\small\textcolor{gray}{(#1)}}
}