\documentclass[a4paper,openany]{book}
\usepackage{bind}
\usepackage{lipsum}

\date{\today}
\makeindex[name=spells,title={Spell Summaries},columns=2]

\begin{document}

\frontmatter

\chapter{Random Stuff}

\section{Introduction}

\begin{multicols}{2}

\subsection{This Document}
Words are needed after each subsection to avoid the boxes making problems.



This is a test document, to make sure new code works before sticking it in a project.
Current day should equal \arabic{r4b}.
That means the season in Fenestra is \showCycle, which means it's \showTemperature.

\Person{\npc{\M\Hu}{Random Guy}}%
  {{1}{1}{0}}% BODY
  {{-1}{0}{-1}}% MIND
  {%
    \set{Caving}{r2c}
    \set{Melee}{2}
    \set{Crafts}{r2c}
    \spear
    \partialchain
  }% SKILLS
  {}% KNACKS
  {\lootMedium}% EQUIPMENT
  {}% ABILITIES

\input{spells/Air1.tex}

\begin{speechtext}

  ``Would you tell me, please, which way I ought to go from here?''

  ``That depends a good deal on where you want to get to.''

\end{speechtext}

\subsection{And now for something completely different}
Words are needed after each subsection to avoid the boxes making problems.



\Glspl{guard} and \glspl{bothy}, \pgls{broch}, and \glspl{village}, oh my!

Also, \gls{talisman}, \gls{paperGuild}, \gls{weaver}, \gls{court}, and \glspl{storypoint}.

\Pgls{vitalShot} is bad, therefore \gls{covering} is good.

\begin{boxtable}

Roll & Result \\\hline

12 & Success \\

11 & Failure \\

\end{boxtable}

\subsection{Random Text}
Words are needed after each subsection to avoid the boxes making problems.



\lipsum[7]

\subsection{And further more\ldots}
Words are needed after each subsection to avoid the boxes making problems.



\lipsum[10]

\begin{boxtext}
  \lipsum[4]
\end{boxtext}

\end{multicols}

\mainmatter

\chapter{Side Quests}

\declareSQareas{Slums,Artgate}

Featuring losing \glspl{hp} beyond the \gls{edge}, possibly during \gls{cTwo}.

\begin{multicols}{2}

\sidequest{Cleaning Up}

\lipsum[2]

\sqpart{Slums}% AREA
{Noisy Neighbours}% NAME
{who celebrate their new baby all week}% SUMMARY

\lipsum[3]

\sqpart{Slums}% AREA
{The Rally}% NAME
{for equal rights for squirrels}% SUMMARY

\lipsum[3]

\sqpart{Artgate}% AREA
{The Proposal}% NAME
{Countess Bleachclaw wants a quieter town}% SUMMARY

\lipsum[3]

\stopcontents[sq]

\end{multicols}

\printglossaries

\printAllSideQuests{Slums,Artgate}

\chapter{Stat Blocks}

\section{Humanoids}

\begin{multicols}{2}

\subsection{Humans}
Words are needed after each subsection to avoid the boxes making problems.



\humanfarmer

\humanmaid

\humansoldier

\humanarcher

\sunguard

\story{4}{this One Time, at Bandcamp}

\glsaddall

\humansoldier

\humandiplomat[\NPC{\Hu\F}{Bob}{Erratic}{Snaps fingers}{Paladin}]

This section is non-verbose, so only basic stats are shown.
\settoggle{verbose}{false}

\basilisk

\npcQuote{We are all going to die}
\humanbard[\NPC{\Hu\M}{Chris}{Despondent}{Sighs}{Jester}]

\humanbard

\humanthief

\humanthief

\humanalchemist

\necromancer

\subsection{Dwarves}
Words are needed after each subsection to avoid the boxes making problems.



\settoggle{verbose}{true}

%\dwarvensoldier

%\dwarventrader

%\dwarvenrunemaster

\subsection{Elves}
Words are needed after each subsection to avoid the boxes making problems.



\elf

\elf

%\elvenenchanter

\dryad

\subsection{Gnomes}
Words are needed after each subsection to avoid the boxes making problems.



\randomthree
\gnome

\gnomishsoldier

\gnomishsoldier

\gnomishillusionist

\subsection{Gnolls}
Words are needed after each subsection to avoid the boxes making problems.



\gnollhunter

\gnollshaman

\showStdSpells

\gnollshaman

\showStdSpells[\setcounter{enc}{1}]

\showStdSpells[
  \spell{Permanent Bubbles}% Name
    {}% Enhancements
    {Warp}% Action
    {Air}% Spheres
    {wind speed}% Resist with
    {The caster gives a pep-talk to a little bubble of water, and it remains as solid as paper, floating into the air and growing to the size of a dog}% Description
    {All bubbles die in the end, but these bubbles have been spotted for miles away from their caster before dying}
]

\end{multicols}

\section{Forest Critters}

\begin{multicols}{2}

\bear

\boar

\chitincrawler

\basilisk

\wolf

\woodspy

\end{multicols}

\section{Undead}

\begin{multicols}{2}

\ghoul

\ghast

\demilich

\lich

\end{multicols}

\chapter{Nura}

\begin{multicols}{2}

\subsection{Humanoids}
Words are needed after each subsection to avoid the boxes making problems.



\goblin[\npc{\N}{Random Goblin}]

\goblin

\goblin

\goblincaster

\hobgoblin

\ogre

\subsection{Morph Animals}
Words are needed after each subsection to avoid the boxes making problems.



\morphrat

\morphhorse

\morphcat

\morphslug

\morphspider

\morphwolf

\morphhuman

\end{multicols}

\chapter{Outsiders}

\section{Weird Ones}

\begin{multicols}{2}

\archmage

\archmage

\boxPair[t]{
  \subsubsection{Box Pairs}
  This is the \texttt{\textbackslash boxPair} command.
  It lets a pair of anything sit at the bottom of the page.
  The first argument sits in the left column, and the next in the right.

  The command works well if you have a creature box, like this lava-man.
}{
    \lavaman
}

\dragon

\rockman

\lavaman

\end{multicols}

\section{Same}

\begin{multicols}{2}

\rockman

\archmage

\dragon

\archmage

\lavaman

\end{multicols}

\section{Talismans}

\begin{multicols}{2}

\scrollOfFriendship

\bloodCandle

\minersWeed

\end{multicols}

%%%%% Test Character Sheet

\setcounter{Strength}{0}
\setcounter{Dexterity}{-1}
\setcounter{Speed}{0}
\setcounter{Intelligence}{1}
\setcounter{Wits}{0}
\setcounter{Charisma}{1}

\renewcommand\concept{Loner}
\renewcommand\race{Human}
\renewcommand\rank{Novice}
\renewcommand\name{Proskuff}
\renewcommand\code{Conqueror}

\setcounter{Academics}{2}
\setcounter{Athletics}{0}
\setcounter{Caving}{0}
\setcounter{Crafts}{0}
\setcounter{Deceit}{0}
\setcounter{Empathy}{0}
\setcounter{Medicine}{0}
\setcounter{Performance}{0}
\setcounter{Larceny}{0}
\setcounter{Seafaring}{0}
\setcounter{Stealth}{0}
\setcounter{Vigilance}{0}
\setcounter{Survival}{0}

\setcounter{Air}{2}
\setcounter{Melee}{0}
\setcounter{Projectiles}{0}

\setcounter{fp}{5}

\renewcommand\characterWeapon{\shortsword}
\renewcommand\characterArmour{}
\renewcommand\characterEquipment{Bag of flour, bag of chalk, dagger, unopened letter}
\setcounter{gold}{0}

\settoggle{examplecharacter}{true}
\input{config/CS.tex}
\settoggle{examplecharacter}{false}
\renewcommand\csComments{}
\clearpage


\chapter{Bestiary Chapters}

\begin{multicols}{2}

\settoggle{genExamples}{true}

When using a bestiary chapter, the stats appear as dice rolls, rather than fixed amounts.

\subsection{Humans}
Words are needed after each subsection to avoid the boxes making problems.



\humanfarmer

\humansoldier

\sunguard

\humandiplomat

\doula

\humanbard

\humanthief

\humanalchemist

\humanalchemist

\necromancer

\subsection{Dwarves}
Words are needed after each subsection to avoid the boxes making problems.

\dwarvensoldier

\dwarventrader

\dwarvenrunemaster

\subsection{Elves}
Words are needed after each subsection to avoid the boxes making problems.



\elf

\elf

%\elvenenchanter

\hag

\subsection{Gnomes}
Words are needed after each subsection to avoid the boxes making problems.



\gnome

\gnomishillusionist

\subsection{Gnolls}
Words are needed after each subsection to avoid the boxes making problems.



\gnollhunter

\gnollshaman

\gnollshaman

\end{multicols}

\section{Forest Critters}

\begin{multicols}{2}

\bear

\boar

\huntingdog

\cat

\chitincrawler

\basilisk

\end{multicols}

\section{Underground}

\begin{multicols}{2}

\umberhulk

\watcher

\jelly

\jelly

\jelly

\jelly

\end{multicols}

\section{Undead}

\begin{multicols}{2}

\ghoul

\ghast

\demilich

\lich

\end{multicols}

\section{Nura}

\begin{multicols}{2}

\subsection{Animals}
Words are needed after each subsection to avoid the boxes making problems.



\morphhorse

\morphcat

\morphslug

\morphspider

\morphwolf

\subsection{Humanoids}
Words are needed after each subsection to avoid the boxes making problems.



\goblin

\goblincaster

\hobgoblin

\ogre

\end{multicols}

\settoggle{genExamples}{false}

\chapter{Lots of Text}

\begin{multicols}{2}

\noindent
\lipsum

\end{multicols}

\newcommand{\tests}{

\chapter{Another Test}

\section{Test Section}

\begin{multicols}{2}

\lipsum[\arabic{r4}]

\artefact{The Bladder Skull}% Name
  {Three human skulls, tied together with their guts, each stuffed with their own inflated bladder.
  The Preservation spell cast upon it stops the bladders deflating.}% Body
  {2}% Intelligence
  {0}% Wits
  {3}% Charisma
  {to make everyone see as the dead see}% Mission
  {Perservation}% Base Spell
  {
    \setcounter{Fate}{2}
    \setcounter{Air}{2}
    \setcounter{Water}{1}
  }% Spheres


\humanbard

\humanthief

\humanthief

\lipsum[2]

\boxPair[t]{
  \subsubsection{Box Pairs}
  This is the \texttt{\textbackslash boxPair} command.
  It lets a pair of anything sit at the bottom of the page.
  The first argument sits in the left column, and the next in the right.

  The command works well if you have a creature box, like this griffin.
}{
    \griffin
}

\subsection{Test subsection}
Words are needed after each subsection to avoid the boxes making problems.



\dragon

\showStdSpells

\settoggle{allyCharacter}{true}

\elf

\settoggle{examplecharacter}{true}

\lipsum[3]

\elf

\showStdSpells

\settoggle{allyCharacter}{false}

\subsubsection{Test sub-sub-section}

\lipsum[10]

\subsubsection{Test sub-sub-section again}

\subsection{Test subsection}
Words are needed after each subsection to avoid the boxes making problems.



\lipsum[2]

\elf

\showStdSpells

\settoggle{examplecharacter}{false}

\lipsum[10]

\section{Last Section}

\lipsum[3]

\end{multicols}

}

\tableofcontents

\Repeat{2}{\tests}

\settoggle{verbose}{false}

\Repeat{2}{\tests}

\end{document}