You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

155 lines
4.6 KiB

% Monster environment sty file
\RequirePackage{fp}
\RequirePackage{xstring}
% Macro to print stats with autocomputed modifier
% e.g. \stat{12} prints "12 (+1)"
\newcommand{\stat}[1]{%
\FPeval{\mod}{(#1 - 10)/2}%
\FPifpos\mod%
\FPeval{\mod}{clip(trunc(mod,0))}#1\ (+\mod)%
\else%
\FPeval{\mod}{clip(abs(trunc(mod-0.5,0)))}#1\ (\(-\)\mod)%
\fi%
}
% Macro to print avarage dice based value
% e.g. \dice{2d6+3} prints "10 (2d6 + 3)"
\newcommand{\dice}[1]{%
\StrSubstitute{#1}{ }{}[\DiceArg]% strip whitespaces
\StrCut{\DiceArg}{d}\DiceNum\DiceSides% split string
\StrCut{\DiceSides}{+}\DiceSides\DiceAddMod%
\StrCut{\DiceSides}{-}\DiceSides\DiceSubMod%
\FPeval{\DiceAvg}{(\DiceSides+1)/2*\DiceNum}% calculate avg roll
\IfInteger{\DiceAddMod}{%
\FPadd{\DiceAvg}{\DiceAvg}{\DiceAddMod}% add value
\def\DiceMod{ + \DiceAddMod}%
}{%
\IfInteger{\DiceSubMod}{%
\FPsub{\DiceAvg}{\DiceAvg}{\DiceSubMod}% subtract value
\def\DiceMod{ \(-\) \DiceSubMod}%
}{%
\def\DiceMod{}%
}%
}%
\FPtrunc{\DiceAvg}{\DiceAvg}{0}% round down
\FPprint{\DiceAvg\ (\DiceNum d\DiceSides\DiceMod)}
}
% Monster box made to look like the Monster Manual NPC definitions
\newtcolorbox{monsterboxnobg}[2][]{
enhanced,
frame hidden,
before skip=7pt plus2pt,
boxrule=0pt,
breakable,
boxsep=0.25ex,
toptitle=3mm,
left=2.5mm,
right=2.15mm,
arc=0mm,
opacityback=0,
colframe=titlered,
fonttitle=\jebba@StatBlockTitleFont\color{titlered}\Large,
fontupper=\jebba@StatBlockBodyFont,
title=#2,
after={\vspace{7pt plus 1pt}\noindent},
#1
}
% new Monsterbox
\newtcolorbox{monsterbox}[2][]{
enhanced,
frame hidden,
before skip=7pt plus2pt,
boxrule=0pt,
breakable,
boxsep=0.25ex,
toptitle=3mm,
left=2.5mm,
right=2.15mm,
arc=0mm,
borderline north={4pt}{0pt}{titlered},
borderline north={2.5pt}{0.75pt}{statblockribbon},
borderline south={4pt}{0pt}{titlered},
borderline south={2.5pt}{0.75pt}{statblockribbon},
colback=statblockbg,
colbacktitle=statblockbg,
colframe=titlered,
fonttitle=\jebba@StatBlockTitleFont\color{titlered}\Large,
fontupper=\jebba@StatBlockBodyFont,
title=#2,
after={\vspace{7pt plus 1pt}\noindent},
#1
}
% Define Monster subsection header style
%\newcommand{\monstersection}[1]{\subsubsection*{#1}}
\newcommand{\monstersection}[1]{
{\par
\color{titlered}\jebba@StatBlockSubtitleFont\large #1 \vspace{3pt}
\titleline{\color{titlered}\titlerule[0.6pt]}
\par\medskip}
}
\newenvironment{monsteraction}[1][\unskip]{\emph{\textbf{#1.}}}{\vspace{0.5em}}
%
% Macros for use within the monster environment
%
\newkeycommand\basics[armorclass=0, hitpoints=0, speed=0]{%
\color{titlered}
\textbf{\armorclassname} \commandkey{armorclass}\\
\textbf{\hitpointsname} \commandkey{hitpoints}\\
\textbf{\speedname} \commandkey{speed}\\
}
% Taubular enviornment for stats-block
\newkeycommand\stats[STR=\stat{10},
DEX=\stat{10},
CON=\stat{10},
INT=\stat{10},
WIS=\stat{10},
CHA=\stat{10}]{
{\footnotesize
\hspace*{-3.5pt}
\resizebox{0.97\linewidth}{\height}{
\begin{tabular}{cccccc}
\rule{0pt}{3.7mm} %adds space between hline and table
\textbf{\strstatname} & \textbf{\dexstatname} & \textbf{\constatname} & \textbf{\intstatname} & \textbf{\wisstatname} & \textbf{\chastatname}\\
\commandkey{STR} & \commandkey{DEX} & \commandkey{CON} & \commandkey{INT} & \commandkey{WIS} & \commandkey{CHA}
\end{tabular}
}
\\[0.4em] %adds space after table
}
}
\newkeycommand\details[skills=,
damageimmunities=,
savingthrows=,
conditionimmunities=,
damageresistances=,
damagevulnerabilities=,
senses=---,
languages=---,
challenge=0]{%
\ifcommandkey{savingthrows}
{\textbf{\savesname} \commandkey{savingthrows}\\}{}
\ifcommandkey{skills}
{\textbf{\skillsname} \commandkey{skills}\\}{}
\ifcommandkey{damagevulnerabilities}
{\textbf{\dvulname} \commandkey{damagevulnerabilities}\\}{}
\ifcommandkey{damageresistances}
{\textbf{\dresname} \commandkey{damageresistances}\\}{}
\ifcommandkey{damageimmunities}
{\textbf{\dimmname} \commandkey{damageimmunities}\\}{}
\ifcommandkey{conditionimmunities}
{\textbf{\cimmname} \commandkey{conditionimmunities}\\}{}
% These traits appear to always be present.
{\textbf{\sensesname} \commandkey{senses}\\}
{\textbf{\languagesname} \commandkey{languages}\\}
{\textbf{\challengename} \commandkey{challenge}\\}
\color{black}
}