\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{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[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{shapes.geometric, intersections}% for pentacle intersections in map \usetikzlibrary{patterns}% for the pattern 'gridspecks' \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 \ifnum\value{chapter}<14 \pgfmathsetmacro{\BGvadjust}{ -2 * (\value{chapter} - 1)} \else \pgfmathsetmacro{\BGvadjust}{ -1 * (\value{chapter} - 1)} \fi \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{../rubbish/#1.aux}{ \externaldocument{../rubbish/#1}% \@addtofilelist{../rubbish/#1.aux}% \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}.}}% {}% } \newcounter{pagebak} \newcommand\handout[1]{ \cleardoublepage \togglefalse{countedPage} \setcounter{pagebak}{\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{pagebak}} \renewcommand{\npcsymbol}{\adfast{\value{r4}}} } %%%%%%%%%% 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{% { \begin{multicols}{2} \@starttoc{toc} \end{multicols} } } \newcommand\titleFont{\scshape} \newcommand{\chapnumfont}{% \Huge% \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[2][\large]{ \renewcommand\mapLabels{ \foreach \mNum/\mX/\mY in {#2}{ \node [black, font=#1\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\mapFeature[3][0]{ \node at (#2) {\rotatebox{#1}{\Large\outline{#3}}}; } \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% } \newcommand\twoDice[1]{% \setcounter{diceNo}{#1}% \ifnum\value{diceNo}<2% \setcounter{diceNo}{2}% \fi% \ifcase\value{diceNo}% diceError 0% \or% diceError 1% \or% \epsdice{1}~\epsdice[black]{1}% \or% \epsdice{1}~\epsdice[black]{2}% \or% \epsdice{1}~\epsdice[black]{3}% \or% \epsdice{1}~\epsdice[black]{4}% \or% \epsdice{1}~\epsdice[black]{5}% \or% \epsdice{1}~\epsdice[black]{6}% \or% \epsdice{2}~\epsdice[black]{6}% \or% \epsdice{3}~\epsdice[black]{6}% \or% \epsdice{4}~\epsdice[black]{6}% \or% \epsdice{5}~\epsdice[black]{6}% \or% \epsdice{6}~\epsdice[black]{6}% \else diceError% \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}% \newenvironment{dlistDouble}% {\raggedright% \begin{list}% {\ifnum\value{dlist}=1% \stepcounter{dlist}% \fi% \makebox[0pt][c]{\raisebox{-1em}{\qquad\textcolor{\pageSideColor}{\arabic{dlist}}}}% \Large\twoDice{\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, colframe={\pageSideColor}, 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]; } } % 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\scshape, coltitle=black, attach boxed title to top center={ yshift=-0.25mm-\tcboxedtitleheight/2, yshifttext=-2mm-\tcboxedtitleheight/2 }, boxed title style={ frame code={ \path[draw=black, 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[draw=black, 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 \includesvg[width=.2\textwidth]{config/logo} \par \vspace{-2em} {\Huge\scshape\outline{#1}\par} \vspace{2em} {\large\scshape \underline{#2}\par} \tableofcontents \bigLine \flushright \vfill\null {\footnotesize \textcolor{\pageSideColor}{Printed \today, or \showCycle~\Roman{fenestraDay}}\par} \end{titlepage} \cleardoublepage \frontmatter } \newcommand\startappendix{ \backmatter \appendix \renewcommand{\headingtype}{APPENDIX} \renewcommand\showChapter{\Alph{chapter}} \cleardoublepage \chapter{Appendix} \renewcommand{\npcsymbol}{\quad\scshape Appendix\quad} } \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{% \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}% } \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} {\titleFont% \needspace{4\baselineskip}% \LARGE}% {\thesubsection}% {1em}% {\center#1}% [\textcolor{\pageSideColor}{\titlerule}] \titleformat{\subsubsection}[wrap] {\needspace{3em}\filright% \titleFont% \large\centering} {}{.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{ap}% $\Rightarrow$ % \fi% }}{}% \arabic{track}% \addtocounter{track}{-1}% \vspace{.54cm} } \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}% \par% } %%%%% NPC Names \newcommand{\name}{} \newcommand{\NPCdescription}{} \newcommand{\currentQuote}{} \newcommand\npcQuote[1]{\global\renewcommand\currentQuote{#1}} \newcommand{\mannerism}{} \newcommand{\npcGoal}{} \newcommand{\npcsymbol}{\adfast{\value{r4}}} \newcommand{\npc}[2]{% \global\def\name{#2}% \renewcommand{\npcsymbol}{#1}% } \newcommand{\NPC}[5]{% \global\def\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} \divide\value{r4b} by 7 \stepcounter{r4b} \newcounter{rn4tn1} \setcounter{rn4tn1}{-3} \newcounter{rn1t0} \setcounter{rn1t0}{-1} \newcounter{r0t1} \setcounter{r0t1}{0} \newcounter{r2t3} \setcounter{r2t3}{2} \newcounter{r2t4} \setcounter{r2t4}{2} \newcounter{r3t4} \setcounter{r3t4}{3} \newcounter{rn1t2} \setcounter{rn1t2}{0} \newcounter{rn3t3} \setcounter{rn3t3}{3} \newcounter{r4t5} \setcounter{r4t5}{4} \newcounter{r4t6} \setcounter{r4t6}{4} \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}}% } \newcommand\randomize{% \stepcounter{r2}% \stepcounter{r3}% \stepcounter{r4}% \stepcounter{r2t3}% \stepcounter{r3t4}% \stepcounter{r4t5}% \stepcounter{r4t6}% \stepcounter{r0t1}% \stepcounter{rn1t0} \setcounter{rn4tn1}{\value{r4b}} \addtocounter{rn4tn1}{-5} \setcounter{rn3t3}{\value{r3b}}% \setcounter{r12}{\value{r3c}}% \multiply\value{r12} by 3% \addtocounter{r12}{\value{r2b}}% \ifodd\value{r3}% \stepcounter{r2b}% \stepcounter{r3b}% \stepcounter{r2t4} \else% \multiply\value{rn3t3} by -1% \addtocounter{rn3t3}{0}% \stepcounter{rn1t2} \stepcounter{r2c}% \stepcounter{r3c}% \stepcounter{r4b}% \fi% \foreach\c in {r2,r2b,r2c}% {\ifnum\value{\c}>2\setcounter{\c}{1}\fi}% \foreach\c in {r3,r3b,r3c}% {\ifnum\value{\c}>3\setcounter{\c}{1}\fi}% \foreach\c in {r4,r4b}% {\ifnum\value{\c}>4\setcounter{\c}{1}\fi}% \ifnum\value{r0t1}>1\setcounter{r0t1}{0}\fi% \ifnum\value{rn1t0}>0\setcounter{rn1t0}{-1}\fi% \ifnum\value{rn1t2}>2\setcounter{rn1t2}{-1}\fi% \ifnum\value{r2t3}>3\setcounter{r2t3}{2}\fi% \ifnum\value{r2t4}>4\setcounter{r2t4}{2}\fi% \ifnum\value{r3t4}>4\setcounter{r3t4}{3}\fi% \ifnum\value{r4t5}>5\setcounter{r4t5}{4}\fi% \ifnum\value{r4t6}>6\setcounter{r4t6}{4}\fi% } \newcommand\set[2]{% \ifltxcounter{#2}{\setcounter{#1}{\value{#2}}}{\setcounter{#1}{#2}}% } \newcounter{stackedNo} \newcommand\stack[2]{% \ifltxcounter{#1}{\setcounter{stackedNo}{\value{#1}}}{\setcounter{stackedNo}{#1}}% \ifltxcounter{#2}{\setcounter{diceNo2}{\value{#2}}}{\setcounter{diceNo2}{#2}}% \ifnum\value{stackedNo}>\value{diceNo2}% \roundUp{diceNo2}% \addtocounter{stackedNo}{\value{diceNo2}}% \else% \roundUp{stackedNo}% \addtocounter{stackedNo}{\value{diceNo2}}% \fi% } %%%%%%%%%%%%%%%%%%%% 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}{>{\normalfont\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{description}{\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 \null } \newcommand\sideBySide[2]{ \end{multicols} \vspace{-1em} \begin{tcolorbox}[ ornamented, sidebyside, before lower={\parindent15pt}, ] {\it#1} \tcblower {#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}\npcsymbol~\titleFont\textbf{#2}~\npcsymbol\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} \newcounter{sqNoSpare} \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{sqNoSpare}{\expandafter\thesqNo}% \bfseries#2 -- \mdseries#3]% {\large{\scshape\thesqNo)}~\large#2\ \hint{#1}} \settoggle{firstsq}{false} \stopcontents[#1]% } % Floating SQ ToCs \titlecontents{tsubsubsection} [3em] {% \contentspush{\scshape\large\arabic{sqNoSpare}~---~}% \thecontentslabel% }% {}% {}% {.}% % Summary SQ Docs \titlecontents*{fsubsection}% [20pt] {% \vspace{1em}\textcolor{\pageSideColor}{\adforn{54}}% \quad\large% \setcounter{sqNo}{0}% }% {}% {}% {\quad\textcolor{\pageSideColor}{\titlerule*[1pc]{---}}}% []% [] \titlecontents{fsubsubsection} [5em] {% \vspace{.3em}% \contentspush{% \ifnum\thesqNoSpare=1% \sqr\else\sqn% \fi\quad% Part~\thesqNoSpare:\quad% \raggedright% }% \thecontentslabel% }% {}% {}% { \enspace\titlerule*[1pc]{.}\bfseries\large\contentspage }% []% %\titlecontents*{lsubsection}[0pt] %{\adforn{10}~\large\raggedright}{}{} %{}[][] \newcommand\printAllSideQuests[1]{ \foreach \x in {#1}{ \section*{\x} \label{sq:\x} \printcontents[\x]{f}{2}{\setcounter{tocdepth}{3}} } \vspace{2em} } \newcommand\hint[1]{% \iftoggle{examplecharacter}{}% {\textcolor{\pageSideColor}{\small(\textbf{#1})}} } %%%%%%%%%%%%%%%%%%%% Rules to Reference %%%%%%%%%%%%%%%%%%%% \newcommand\makeRule[5]{ \subsubsection[#2: \roll{#3}{#4}, \glsentrytext{tn} #5]{#2} \label{#1}% \index{#2}% \textit{\roll{#3}{#4}, \glsentrytext{tn}~#5.}% } \newcommand\makeAutoRule[3]{ \subsubsection[#2: #3]{#2} \index{#2}% \label{#1}% }