\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)}} }