-
Malin Freeborn authoredMalin Freeborn authored
layout.sty 30.33 KiB
\ProvidesPackage{config/layout}
\RequirePackage[table]{xcolor}
\RequirePackage[copies]{contour}
\RequirePackage{imakeidx}% for spell summaries
\RequirePackage{xr-hyper}
\RequirePackage[
pdfstartpage=1,
hidelinks=true,
bookmarks=true]%
{hyperref}
\RequirePackage[
nostyles,
acronyms,
prefix,
automake,
indexonlyfirst,
numberedsection=autolabel,
section=section,
stylemods={mcols,topic,tree},
style=mcoltree,
autoseeindex=false,
symbols,
]{glossaries-extra}
\RequirePackage{epsdice} % for dice
\RequirePackage[T1]{fontenc} %
\RequirePackage{rotunda} %
\RequirePackage{txfonts} %
\RequirePackage{starfont} % for creature symbols
\RequirePackage{wasysym} % for sq checkboxes
\RequirePackage{appendix}
\RequirePackage{geometry} % changes page borders
\geometry{margin=50pt}
\RequirePackage{svg}
\RequirePackage{alltt}
\svgsetup{width=\textwidth}
\RequirePackage{tabularx}
\RequirePackage{wrapfig}
\RequirePackage{float}
\RequirePackage{qrcode}
\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[explicit]{titlesec}
\RequirePackage{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]{\titleFont{\large\thepage\if@mainmatter\randomfourB\hspace{1em}\textcolor{\pageSideColor}{\Repeat{\value{r4b}}{\flourish\hspace{-.2em}}}\fi}}
\fancyfoot[RO]{\titleFont{\randomfour\large\if@mainmatter\textcolor{\pageSideColor}{\Repeat{\value{r4}}{\flourish\hspace{-.2em}}}\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}}
\newtoggle{countedPage}
\toggletrue{countedPage}
\AddToHook{shipout/background}{%
\iftoggle{countedPage}{
\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 height=4ex,
text depth=2.5ex,
text width=14em,
text=white,
fill=\pageSideColor,
anchor=\BGanchor,
rotate=\BGrotate,
font=\titleFont,
] {\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[nospace]{varioref}
%%%%%%%%%% 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}\flourish} \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]{%
\iftoggle{#1}{\footnote{See the book of \textit{\MakeUppercase#2}, \autopageref{#3} --- \nameref{#3}.}}%
{}%
}
\newcommand\handout[1]{
\cleardoublepage
\togglefalse{countedPage}
\setcounter{diceNo}{\thepage}
\pagestyle{empty}
\randomtwo
\randomthreeC
\settoggle{examplecharacter}{true}
\input{#1.tex}
\settoggle{examplecharacter}{false}
\cleardoublepage
\ifodd\thepage
\else
\clearpage
\fi
\toggletrue{countedPage}
\pagestyle{plain}
\setcounter{page}{\value{diceNo}}
}
%%%%%%%%%% 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{%
{
\large
\@starttoc{toc}
}
}
\newcommand\titleFont{\rtndfamily}
\newcommand{\chapnumfont}{
\fontsize{50}{0}
\titleFont
}
% change bullet points
\renewcommand{\labelitemi}{%
\textcolor{\pageSideColor}{%
\large\ifodd\the\c@page%
\adfdownhalfleafright%
\else%
\adfdownhalfleafleft%
\fi%
}
}
\renewcommand{\labelitemii}{\textcolor{\pageSideColor}{\adfdownhalfleafleft}}
\renewcommand{\labelenumi}{\large\titleFont\arabic{enumi}--}
\renewcommand{\labelenumii}{\titleFont\Roman{enumii}}
%%%%%%%%%% 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!]
\setcounter{enc}{0}
\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{#2}};
\csComments
\begin{scope}[
x={(image.south east)},
y={(image.north west)}
]
\mapLabels
\end{scope}
\end{tikzpicture}
\end{figure*}
\renewcommand\csComments{}
\renewcommand\mapLabels{}
}
\newcommand\mapNotes[1]{
\renewcommand\mapLabels{
\foreach \mNum/\mX/\mY in {#1}{
\node [black, font=\large\scshape] at (0.\mX,0.\mY) {\outline[14]{\mNum}};
}
}
}
\newcommand\callout[5][4]{
\node[text=\pageOppositeColor, overlay, rectangle callout, callout relative pointer={(#3)}, fill=\pageSideColor,] (\arabic{enc}) at (#2) [text width=#1em]{{\large\scshape#4}{ #5}};
}
\newcommand\mapLegend[4]{
\node [black, font=\bfseries] at (0.#2,0.#3) {#4 #1};
}
\newcommand\mapCircle[5][0]{
\setcounter{track}{#4}
\addtocounter{track}{3}
\addtocounter{track}{#1}
\begin{scope}[
x={(image.south east)},
y={(image.north west)}
]
\draw[fill=white] (0.#2,0.#3) circle (#4em);
\clip[draw] (0.#2,0.#3) circle (#4em) node {\includesvg[width=\arabic{track}em]{images/#5}};
\end{scope}
}
\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[14]{\titleFont\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={\vspace{.5em}\noindent},
fonttitle={\scshape #1},
before upper={\parindent15pt\noindent},
after upper={\iftoggle{verbose}{}{\par What do you do?}},
}
\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
\tableofcontents
\clearpage
\frontmatter
}
\newcommand\startappendix{
\addappheadtotoc
\appendix
\renewcommand{\headingtype}{APPENDIX}
\renewcommand\showChapter{\Alph{chapter}}
}
\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
}
\newcounter{adf}
\setcounter{adf}{0}
\newcommand\flourish{%
\if@mainmatter%
\ifnum\value{adf}>16%
\addtocounter{adf}{-16}%
\fi%
\ifcase\value{adf}%
\adforn{32}%
\or%
\adforn{27}%
\or%
\adforn{3}%
\or%
\adforn{25}%
\or%
\adforn{5}%
\or%
\adforn{34}%
\or%
\adforn{68}%
\or%
\adforn{9}%
\or%
\adforn{73}%
\or%
\adforn{11}%
\or%
\adforn{44}%
\or%
\adforn{6}%
\or%
\adforn{40}%
\or%
\adforn{63}%
\or%
\adforn{67}%
\or%
\adforn{52}%
\else%
\adforn{55}%
\fi%
\stepcounter{adf}%
\else%
\adforn{74}%
\fi%
}
\newcommand\showChapter{\Roman{chapter}}
\titleformat{\chapter}[display]
{\bfseries
\titleFont
}
{%
\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}{\showChapter}};
\end{tikzpicture}}
{0pt}
{\Huge#1}
\titleformat{\section}%
{\needspace{16em}%
\textcolor{\pageSideColor}{\large\raisebox{-4pt}{\Large\hspace{-0.2em}\flourish}\titlerule}%
\center%
\huge%
\titleFont
}%
{\Roman{section}}%
{1em}%
{#1}%
[\textcolor{\pageSideColor}{\large\titlerule\raisebox{-4pt}{\Large\hspace{-0.2em}\flourish}}%
\setcounter{list}{0}]%
\renewcommand*{\thesection}{\arabic{section}}
\titleformat{\subsection}
{\needspace{12em}
\titleFont
\center
\LARGE}%
{\thesubsection}%
{1em}%
{#1}%
[\textcolor{\pageSideColor}{\titlerule}]
\titleformat{\subsubsection}[wrap]
{\needspace{3em}\filright
\titleFont
\large}
{}{.5em}{#1}
\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\intervalTrack{
\center\noindent%
\showInterval{\value{enc}}~~\arabic{track}
\addtocounter{track}{-1}%
\addtocounter{enc}{1}%
\vspace{.54cm}
\ifnum\value{enc}>3
\setcounter{enc}{0}
\fi
}
\newcommand\bigLine{%
\textcolor{\pageSideColor}{\ifodd\value{page}\else\raisebox{-3pt}{\Large\hspace{0.1em}\flourish}\fi\hrulefill\ifodd\value{page}\raisebox{-3pt}{\Large\hspace{-0.1em}\flourish}\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}%
\fi%
\ifodd\value{r3}%
\stepcounter{r3b}%
\fi%
}
\newcommand{\randomthreeC}{%
\setcounter{r3c}{1}%
\ifodd\value{r12}%
\stepcounter{r3c}%
\fi%
\ifodd\value{r3}%
\stepcounter{r3c}%
\fi%
}
\newcommand{\randomfour}{%
\ifnum\value{r4}>3%
\setcounter{r4}{0}%
\else%
\ifnum\value{r4}<1%
\setcounter{r4}{2}%
\fi%
\fi%
\stepcounter{r4}%
\setcounter{track}{\value{r4}}%
}
\newcommand{\randomfourB}{%
\randomthreeB%
\setcounter{r4b}{\value{r3b}}%
\stepcounter{r4b}%
}
\newcommand{\randomdozen}{%
\randomfourB%
\setcounter{r12}{0}%
\addtocounter{r12}{\value{r4b}}%
\addtocounter{r12}{\value{r3c}}%
\addtocounter{r12}{\value{r3}}%
\addtocounter{r12}{\value{r4}}%
}
%%%%%%%%%%%%%%%%%%%% LAYOUT %%%%%%%%%%%%%%%%%%%%
\makeindex
\indexsetup{
noclearpage,
level=\section,
}
\raggedbottom
% 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}
}
\newcommand*\@NoIndentAfter{%
\@ifnextchar\par{%
\def\par{%
\everypar{\setbox\z@\lastbox\everypar{}}%
\@restorepar%
}%
}{}%
}
\newrobustcmd*{\NoIndentAfterThis}{\@NoIndentAfter\par\par}
\AfterEndEnvironment{enumerate}{\NoIndentAfterThis}
\AfterEndEnvironment{itemize}{\NoIndentAfterThis}
\AfterEndEnvironment{dlist}{\NoIndentAfterThis}
\AfterEndEnvironment{list}{\NoIndentAfterThis}
\AfterEndEnvironment{boxtext}{\NoIndentAfterThis}
\AfterEndEnvironment{speechtext}{\NoIndentAfterThis}
\AfterEndEnvironment{exampletext}{\NoIndentAfterThis}
\AfterEndEnvironment{nametable}{\NoIndentAfterThis}
\AfterEndEnvironment{boxtable}{\NoIndentAfterThis}
\AfterEndEnvironment{tcolorbox}{\NoIndentAfterThis}
\AfterEndEnvironment{multicols}{\NoIndentAfterThis}
\newenvironment{exampletext}
{
\parindent2em%
\needspace{2em}
\vspace{1em}%
\it%
}
{%
\par
\nobreak\bigLine\par
\vspace{.7em}
}
\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
\vspace{0.5em}
}
\newenvironment{nametable}[2][cL]
{
\rowcolors{2}{}{gray!10}\needspace{3em}
\begin{center}\flourish~\titleFont\textbf{#2}~\flourish\end{center}
\par\noindent
\tabularx{\linewidth}{#1}
\hline
}%
{
\hline
\endtabularx
\vspace{1em}
}
\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]{The #2\\\hint{Cost: #1}}%
\index{#2 (Story)}%
}
\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}{%
\printcontents[sq]{t}{3}{\setcounter{tocdepth}{3}}%
}
\newcounter{sqNo}
\newcommand{\sqName}{}
\newcommand{\sidequest}[2][]{
\vspace{1em}
\par
\stopcontents[sq]
\foreach \area in {#1}%
{\resumecontents[\area]}
\renewcommand{\sqName}{#2}
\needspace{5em}
\subsection[\it #2]{#2}
\settoggle{firstsq}{true}
\setcounter{sqNo}{0}
\foreach \area in {#1}%
{\stopcontents[\area]}
\startcontents[sq]
\sqminitoc%
\bigLine
\vspace{1em}
}
\newcommand{\sqpart}[3]{
\vspace{1em}
\refstepcounter{sqNo}
\resumecontents[#1]
\subsubsection[%
\setcounter{track}{\expandafter\thesqNo}%
\bfseries#2 -- \mdseries#3]%
{{\Large\scshape\thesqNo)}\quad #2 \\\hint{#1}}
\settoggle{firstsq}{false}
\stopcontents[#1]%
}
% Floating SQ ToCs
\titlecontents{tsubsubsection}
[3em]
{%
\contentspush{\scshape\large\arabic{track}~---~}%
\thecontentslabel%
}%
{}%
{}%
{.}%
% Summary SQ Docs
\titlecontents*{fsubsection}[20pt]
{\vspace{1em}\textcolor{\pageSideColor}{\adforn{54}}\quad\large}{}{}
{\quad\textcolor{\pageSideColor}{\titlerule*[1pc]{---}}}[][]
\titlecontents{fsubsubsection}
[5em]
{%
\vspace{.3em}%
\contentspush{%
\ifnum\value{track}=1%
\sqr\else\sqn%
\fi\quad%
(\arabic{track})\quad%
\raggedright%
}%
\thecontentslabel%
}%
{}%
{}%
{ \enspace\titlerule*[1pc]{.}\bfseries\large\contentspage }%
[]%
%\titlecontents*{lsubsection}[0pt]
%{\adforn{10}~\large\raggedright}{}{}
%{}[][]
\newcommand\printAllSideQuests[1]{
\foreach \x in {#1}{
\center\subsection*{\x}
\label{sq:\x}
\printcontents[\x]{f}{2}{\setcounter{tocdepth}{3}}
}
\vspace{2em}
}
\newcommand\hint[1]{%
\iftoggle{examplecharacter}{}%
{\small\textcolor{gray}{(#1)}}
}