-
Malin Freeborn authoredMalin Freeborn authored
stats.sty 22.96 KiB
\ProvidesPackage{config/stats}
%%%%%%%%%%%%%%%%%%%% Introduction
\newtoggle{genExamples}
\settoggle{genExamples}{false}
\newtoggle{allyCharacter}
\settoggle{allyCharacter}{false}
\newtoggle{perfectArmour}
\settoggle{perfectArmour}{false}
\newtoggle{weaponMaster}
\settoggle{weaponMaster}{false}
\newcommand\showNumbers{
\par
Str: \arabic{Strength},
Dex: \arabic{Dexterity},
Spd: \arabic{Speed},
Att: \arabic{toHit},
Damage: \arabic{damage},
Weight: \arabic{weight},
Encumbrance: \arabic{encumbrance},
XP Bonus: \arabic{xpbonus},
Attack total: \arabic{attackXPtotal},
Def Total: \arabic{defenceXPtotal},
MP: \arabic{mp},
Grand Total: \arabic{xp}
\par
Armour DR: \arabic{armourDR}
Armour Weight: \arabic{armourWeight}
}
\newcommand\afterStatBlock{%
\iftoggle{genExamples}{}{%
\setcounter{enc}{\value{noAppearing}}%
\addtocounter{enc}{4}%
\needspace{\value{enc}\baselineskip}%
\showBoxes%
}%
\ifdefempty{\NPCdescription}{\vspace{.5em}}{%
\begin{multicols}{2}%
\raggedright%
\textbf{Description:}~\NPCdescription\nobreak%
\par%
\textbf{Wants:}~\npcGoal%
\ifdefempty{\currentQuote}{}{\par%
\textbf{Quote:}~\textit{``\currentQuote''}%
\global\renewcommand\currentQuote{}%
}%
\par%
\textbf{Mannerism:}~\mannerism%
\end{multicols}%
\vspace{1em}%
}%
}
% _ _
% ___| |_ __ _| |_
% / __| __/ _` | __|
% \__ \ || (_| | |_
% |___/\__\__,_|\__|
%
%
% _ _ _
% | |__ | | ___ ___| | _____
% | '_ \| |/ _ \ / __| |/ / __|
% | |_) | | (_) | (__| <\__ \
% |_.__/|_|\___/ \___|_|\_\___/
%
%
\newtoggle{mind}
\newtoggle{creatureBox}
\newtoggle{examplecharacter}
\settoggle{examplecharacter}{false}
\newcommand{\ent}[1]{\textbf{#1}}
\newcommand{\test}{}
\newcommand{\skills}{}
\newcommand{\equipment}{}
\newcommand{\abilities}{}
\newcommand{\Abilities}{}
\newcommand{\addAbility}[1]{\edef\Abilities{\Abilities{}#1. }}
\newcommand{\Equipment}{}
\newcommand{\addEquipment}[1]{\edef\Equipment{\Equipment{}#1, }}
\newcommand{\mods}{}
\newcommand\showCR{}
\newcommand\absNum[1]{\ifnum\value{#1}>-1+\fi\arabic{#1}}
% we calculate damage here because we can't display 1d6+6 damage - it has to turn into 2d6+2 damage.
\newcommand\conDmg[1]{%
\setcounter{numberofdice}{1}%
\set{damagebonus}{#1}%
\addtocounter{damagebonus}{-4}%
\whileboolexpr{%
test {\ifnumcomp{\value{damagebonus}}{>}{3}}%
}{%
\addtocounter{damagebonus}{-4}%
\addtocounter{numberofdice}{1}%
}%
}
\newcommand\showDam{%
\arabic{numberofdice}D6\ifnum\value{damagebonus}=0\else\absNum{damagebonus}\fi%
}
\newcommand\dmg[1]{\conDmg{#1}\showDam}
\newcommand\showSkills{
\foreach \s in {Projectiles,Melee,Brawl,Academics,Athletics,Caving,Crafts,Cultivation,Deceit,Empathy,Flight,Medicine,Performance,Larceny,Seafaring,Stealth,Vigilance,Wyldcrafting}
{\ifnum\value{\s}>0 \s~\arabic{\s}, \fi}
}
\newcommand\traits[7]{%
\clean%
\randomize%
#1%
\body#2%
\mind#3%
#4%
\foreach \k in {#5}{%
\stepcounter{knacks}%
}%
\renewcommand\showKnacks{#5}%
\foreach \s in {Air,Earth,Fate,Fire,Water}%
{\ifnum\value{\s}>0 \addtocounter{mp}{3}\fi}%
\renewcommand\equipment{#6}%
#7%
\computeStats%
\computeEncumbrance%
}
\newcommand\statblock[1]{
\begin{tcolorbox}[
before={\vspace{.5em}\begin{minipage}{\linewidth}},
code={\setlength\parindent{0pt}#1},
title={\npcsymbol~\name},
after={\afterStatBlock\end{minipage}},
ornamented,
size=fbox,
fontupper=\small,
halign=flush left,
]
\creaturestats
\begin{tabularx}{\linewidth}{rL}
\hiderowcolors
\ent{Skills} & \showSkills \\
\ifnum\value{mp}>0%
\ent{Spheres} &
\foreach \s in {Air,Earth,Fate,Fire,Water}%
{\ifnum\value{\s}>0 \s~\arabic{\s}, \fi}
\\
\fi
\ifnum\value{knacks}>0
\ent{Knacks} & \showKnacks \\
\fi
\ifdefempty{\Abilities}{}{%
\ent{Abilities} & \Abilities \\
}
\ifdefempty{\equipment}{}{%
\ent{Equipment} &
\ifdefempty{\weaponName}{}{%
\weaponName, %
}%
\ifdefempty{\armourName}{}{%
\armourName, %
}%
\equipment.
}%
\end{tabularx}
\tcblower%%%%%%%%%%%%%%%%%%%%
\derivedstats\null
\end{tcolorbox}
}
\newcommand\Animal[6]{
\statblock{
\traits{#1}%
{#2}%
{{-6}{#3}{-6}}%
{%
#4
}%
{#5}% SKILLS
{}% KNACKS
{#6}% ABILITIES
}
}
\newcommand\Person[7]{
\statblock{
\traits{#1}%
{#2}%
{#3}%
{%
#4
}% SKILLS
{#5}% KNACKS
{#6}% EQUIPMENT
{#7}% ABILITIES
}
\setcounter{wounds}{0}%
}
\newcommand\showBoxes{%
\begin{center}%
\renewcommand{\arraystretch}{0.9}%
\ifnum\value{mp}>0%
\Repeat{\value{noAppearing}}{\hpStat~\mpStat\quad}%
\else%
\Repeat{\value{noAppearing}}{\hpStat\quad}%
\fi%
\end{center}%
}
\newcounter{wounds}
\setcounter{wounds}{0}
\newcounter{freeHP}
\setcounter{freeHP}{0}
\newcommand\boxStat[1]{%
\glsentrytext{R}~\Repeat{\value{#1}}{\Square}%
}
\newcommand\hpStat{%
\Repeat{\value{weight}}{\LEFTcircle}%
\Repeat{\value{freeHP}}{\Circle}%
\Repeat{\value{wounds}}{\CIRCLE}%
}
\newcommand\mpStat{%
\glsentrysymbol{alchemy}-%
\Repeat{\value{mp}}{\Circle}%
}
%%%%%%%%%%%%%%%%%%%% Character Generation %%%%%%%%%%%%%%%%%%%%
%
% _
% ___ ___ _ _ _ __ | |_ ___ _ __ ___
% / __/ _ \| | | | '_ \| __/ _ \ '__/ __|
%| (_| (_) | |_| | | | | || __/ | \__ \
% \___\___/ \__,_|_| |_|\__\___|_| |___/
%
%
% Attributes: str, dex, spd, int, wts, cha
% secondary str, dex and spd
\newcounter{att}
\newcounter{toHit}
\newcounter{dr}
\newcounter{knacks}
% Extras: MP hp fp
% Derived: dicenumber, dicebonus,
\newcounter{mp}
\newcounter{hp}
\newcounter{fp}
\newcounter{numberofdice}
\newcounter{damagebonus}
\newcounter{xp}
\newcounter{xpbonus}
\newcounter{attackXPtotal}
\newcounter{defenceXPtotal} %rem
\newcounter{weight}
\newcounter{maxWeight}
\newcounter{ap}
\newcounter{damage}
\newcounter{shieldBonus}
\newcounter{shieldWeight}
\newcounter{shieldInit}
\newcounter{cost}
\newcounter{heft}% used to see how many AP points to swing a weapon
\newcounter{encumbrance}
\setcounter{encumbrance}{0}
% _
% ___ ___ _ __ ___ _ __ ___ __ _ _ __ __| |___
% / __/ _ \| '_ ` _ \| '_ ` _ \ / _` | '_ \ / _` / __|
% | (_| (_) | | | | | | | | | | | (_| | | | | (_| \__ \
% \___\___/|_| |_| |_|_| |_| |_|\__,_|_| |_|\__,_|___/
%
% magic
\newcommand{\magicPath}{}
\newcommand{\knacks}[1]{\gdef\showKnacks{#1}}
\newcommand\showKnacks{}
%%%%%%%%%%%%%%%%%%%%% Knacks
%
\newcommand{\adrenalinesurge}{%
Adrenaline~Surge (+1 Damage, once per \ifnum\value{knacks}<2 combat\else round, \arabic{knacks} uses per combat\fi)%
}
\newcommand{\berserker}{%
Berserker (+1 \glsentrytext{ap}. on round 2 of combat, +1 Damage. on round 3)%
}
\newcommand{\brawler}{%
Brawler
(+2 to unarmed attacks)
}
\newcommand{\charge}{%
Fast Charge
(+1 \glsentrytext{ap}, Attack, and Damage after charging 6 steps)%
}
\newcommand{\cuttingswing}{%
Cutting Swing
(when an opponent hits 0 \glspl{hp}, damage transfers to the next opponent)%
}
\newcommand{\dodger}{%
Dodger
(+\arabic{knacks} to dodge projectiles)%
}
\newcommand{\guardian}{%
Guardian
(spend 0 AP to guard someone, and gain +1 to guarding against attacks)%
}
\newcommand{\laststand}{%
Last~Stand
(when losing \glspl{hp}, the character gains \setcounter{enc}{2}\addtocounter{enc}{\value{knacks}}\arabic{enc} AP)%
}
\newcommand{\lucky}{%
\addtocounter{fp}{4}%
Lucky (add 4 \glsentryshortpl{fp})
}
\newcommand{\mightydraw}{%
Mighty Draw
\setcounter{enc}{\value{knacks}}\roundUp{enc} (reduce cost to draw longbow by \arabic{enc} AP)
}
\newcommand{\perfectsneakattack}{%
Perfect Sneak Attack
(+\arabic{knacks} Damage for sneak attacks)
}
\newcommand{\precisestrike}{%
Precise Strike
(+1 Attack when calculating \pgls{vitalShot})
}
\newcommand{\specialist}[1]{%
Specialist
\iftoggle{examplecharacter}{ (+2 when using any #1)}{(#1)}%
}
\newcommand{\stunningstrike}{%
Stunning Strike
(take -1 penalty, and opponent's AP reduces by half Damage)%
}
\newcommand{\snapshot}{%
Snap Draw
(Pay 0 AP to reload arrow or draw weapon)%
}
\newcommand{\unstoppable}{%
\addtocounter{hp}{2}%
Unstoppable
(+2 \glsentryshortpl{hp}%
\ifnum\value{Intelligence}>-5, and +\arabic{knacks} to any Medicine rolls to save them when dying%
\fi)%
}
\newcommand{\vengeful}{%
Vengeful
(+2~\iftoggle{snapCaster}{Wits}{Charisma} after losing~HP)%
}
\newcommand{\weaponmaster}[1][\weaponName]{%
\toggletrue{weaponMaster}%
Weapon Master
(+1 to #1 attacks)%
}
\newcommand{\autophage}{%
\addtocounter{knacks}{1}%
Autophage
(cast with \glspl{ep} instead of \glspl{mp})%
}
\newcommand{\snapcaster}{%
\ifnum\value{Wits}>\value{Charisma}%
\global\settoggle{snapCaster}{true}%
\fi%
Snap Caster
(spells use Wits and cost 1 less \glsentrytext{ap})
}
\newcommand{\ritualcaster}{%
\addtocounter{knacks}{1}%
Ritual Caster
(spells use Intelligence, caster may spend 1 extra \gls{mp})
}
\newcommand{\fasthealer}{%
Fast Healer
(resting heals one more \glsentrytext{ep} or \glsentrytext{mp})%
}
\newcommand{\combatcaster}{Combat Caster}
\newcommand\chosenEnemy[1]{Chosen Enemy (+1 against #1, -2 when trying to be friendly)}
% _ __ ___ _ __ ___ ___ _ __
%| '_ \ / _ \ '__/ __|/ _ \| '_ \
%| |_) | __/ | \__ \ (_) | | | |
%| .__/ \___|_| |___/\___/|_| |_|
%|_|
%
%
% _ _
%% ___| |__ __ _ _ __ __ _ ___| |_ ___ _ __
%% / __| '_ \ / _` | '__/ _` |/ __| __/ _ \ '__|
%%| (__| | | | (_| | | | (_| | (__| || __/ |
%% \___|_| |_|\__,_|_| \__,_|\___|\__\___|_|
%%
%% optional counters, such as mana, are cleaned
%% clear: weaponsknack1 and 2,
%%
%
\newcommand{\body}[3]{%
\ifltxcounter{#1}{\setcounter{Strength}{\value{#1}}}{\setcounter{Strength}{#1}}%
\ifltxcounter{#2}{\setcounter{Dexterity}{\value{#2}}}{\setcounter{Dexterity}{#2}}%
\ifltxcounter{#3}{\setcounter{Speed}{\value{#3}}}{\setcounter{Speed}{#3}}%
}
\newcommand{\mind}[3]{%
\ifltxcounter{#1}{\setcounter{Intelligence}{\value{#1}}}{\setcounter{Intelligence}{#1}}%
\ifltxcounter{#2}{\setcounter{Wits}{\value{#2}}}{\setcounter{Wits}{#2}}%
\ifltxcounter{#3}{\setcounter{Charisma}{\value{#3}}}{\setcounter{Charisma}{#3}}%
}
\newtoggle{snapCaster}
\settoggle{snapCaster}{true}
%
\newcommand{\clean}{%
\global\togglefalse{snapCaster}%
\global\togglefalse{weaponMaster}%
\knacks{}%
\foreach \s in {Air,Earth,Fate,Fire,Water,Projectiles,Melee,Brawl,Academics,Alchemy,Athletics,Caving,Crafts,Cultivation,Deceit,Empathy,Flight,Medicine,Performance,Larceny,Seafaring,Stealth,Vigilance,Wyldcrafting}%
{\setcounter{\s}{0}}%
\foreach \s in {encumbrance,dr,covering,weaponDamage,weaponBonus,weaponWeight,armourWeight,armourDR,armourWeight,fp,heft,weight,damage,knacks,mp,xpbonus,xp}%
{\setcounter{\s}{0}}%
\setcounter{noAppearing}{1}%
}
%% _ _ _ _ _
%% __ _| |_| |_ _ __(_) |__ _ _| |_ ___ ___
%% / _` | __| __| '__| | '_ \| | | | __/ _ \/ __|
%%| (_| | |_| |_| | | | |_) | |_| | || __/\__ \
%% \__,_|\__|\__|_| |_|_.__/ \__,_|\__\___||___/
%%
%% Print the line,
%% print the attributes.
%% print the skills
%% print the knacks
%% print the equipment
%
\newcommand{\creaturestats}{
\footnotesize
\begin{tabularx}{\textwidth}{lr@{\hskip 3em}lr@{\hskip 3em}lr}
\hiderowcolors
Strength & \arabic{Strength} & Dexterity & \arabic{Dexterity} & Speed & \arabic{Speed} \\
\ifnum\value{Intelligence}>-6 Intelligence\fi &
\ifnum\value{Intelligence}>-6 \arabic{Intelligence}\fi &
Wits & \arabic{Wits} &
\ifnum\value{Charisma}>-6 Charisma\fi &
\ifnum\value{Charisma}>-6 \arabic{Charisma}\fi
\\
\end{tabularx}
}
%%
%%
%% _ _
%% ___ ___ _ __ ___ _ __ ___| |_ __ _| |_ ___
%% / __/ _ \| '_ ` _ \| '_ \/ __| __/ _` | __/ __|
%%| (_| (_) | | | | | | |_) \__ \ || (_| | |_\__ \
%% \___\___/|_| |_| |_| .__/|___/\__\__,_|\__|___/
%% |_|
%%
\newcommand\computeStats{
\setcounter{hp}{6}%
\addtocounter{hp}{\value{Strength}}%
\addtocounter{hp}{-\value{wounds}}%
% Stats for allies don't need to show Melee +1 as 'TN 8 to hit', they just need to show '+1'.
\ifnum\value{weaponBonus}>0%
\set{att}{Melee}%
\iftoggle{weaponMaster}{\stepcounter{att}}{}%
\else%
\set{att}{Brawl}%
\fi%
\addtocounter{att}{\value{Dexterity}}%
\addtocounter{att}{\value{weaponBonus}}%
\set{toHit}{att}%
\addtocounter{toHit}{7}%
\setcounter{ap}{\value{Speed}}%
\addtocounter{ap}{3}%
\addtocounter{ap}{-\value{encumbrance}}%
\setcounter{damage}{\value{Strength}}%
\addtocounter{damage}{4}%
\addtocounter{damage}{\value{weaponDamage}}%
\iftoggle{allyCharacter}{}{%
\addtocounter{covering}{\value{toHit}}%
}%
\ifnumcomp{\value{dr}}{>}{\value{armourDR}}%
{%
\divide\value{armourDR} by 2%
\addtocounter{dr}{\value{armourDR}}%
}{%
\divide\value{dr} by 2%
\addtocounter{dr}{\value{armourDR}}%
}%
\addtocounter{fp}{\value{Charisma}}%
}
\newcommand\computeEncumbrance{%
\setcounter{maxWeight}{\value{hp}}% now to compute encumbrance
\roundUp{maxWeight}%
\ifnum\value{armourWeight}>\value{maxWeight}%
\addtocounter{encumbrance}{\value{armourWeight}}%
\addtocounter{encumbrance}{-\value{maxWeight}}%
\fi%
\ifnum\value{weaponWeight}>\value{maxWeight}%
\addtocounter{encumbrance}{\value{weaponWeight}}%
\addtocounter{encumbrance}{-\value{maxWeight}}%
\fi%
\ifnum\value{weight}>\value{maxWeight}%
\addtocounter{encumbrance}{\value{weight}}%
\addtocounter{encumbrance}{-\value{weight}}%
\fi%
\addtocounter{weight}{\value{weaponWeight}}%
\addtocounter{weight}{\value{armourWeight}}%
\ifnum\value{weight}>\value{hp}%
\addtocounter{encumbrance}{\value{weight}}%
\addtocounter{encumbrance}{-\value{hp}}%
\setcounter{freeHP}{0}%
\else%
\setcounter{freeHP}{\value{hp}}%
\addtocounter{freeHP}{-\value{weight}}%
\fi%
\addtocounter{ap}{-\value{encumbrance}}%
\addtocounter{toHit}{-\value{encumbrance}}%
\addtocounter{weight}{-\value{encumbrance}}%
}
%% _ _ _
%% __| | ___ _ __ ___| |_ __ _| |_ ___
%% / _` |/ _ \ '__/ __| __/ _` | __/ __|
%%| (_| | __/ | \__ \ || (_| | |_\__ \
%% \__,_|\___|_| |___/\__\__,_|\__|___/
%%
%%
%% dice instead of Damage
%% print out att, spd, DAM, dex, dr (type), str
%%
%
\newcommand{\derivedstats}{%
\setlength\topsep{0pt}%
\setlength\parskip{0pt}%
\begin{center}
\iftoggle{verbose}{\normalsize}{\large}%
\scshape AP \ifnum\value{ap}<1 $\frac{1}{2}$ \else \arabic{ap}\fi%
\ifnumcomp{\value{heft}}{>}{1}{ (AP Cost: \arabic{heft})}{},
Att %
\iftoggle{allyCharacter}{$2D6$\absNum{att}}{\arabic{toHit}},\space%
\mbox{Dam \dmg{damage},\space}%
\ifnumcomp{\value{dr}}{>}{0}{%
\mbox{DR \arabic{dr}%
\iftoggle{perfectArmour}%
{}%
{ (\arabic{covering}!)}, }%
}{}%
\iftoggle{genExamples}{%
HP~\arabic{hp},
\ifnum\value{mp}>0%
MP \arabic{mp},
\fi%
}{}
\iftoggle{genExamples}{%
\ifnum\value{Intelligence}>-1%
\Glsentrytext{weight}~held~\arabic{weight},%
\fi%
}{}
{\hfil\small\textcolor{\pageSideColor}{\calculateXP}}%
\end{center}
}
%
%
%% __ ______
%% \ \/ / _ \
%% \ /| |_) |
%% / \| __/
%% /_/\_\_|
%%
\newcommand{\calculateXP}{%
%%% Now to get the XP value of the creature's attack ability.
%%% = Attack (TN) * Dam + max((spd-hef),mp)^2
\iftoggle{allyCharacter}{}{%
\iftoggle{examplecharacter}{}{%
\setcounter{attackXPtotal}{\value{toHit}}%
\multiply\value{attackXPtotal} by \value{damage}%
\multiply\value{attackXPtotal} by \value{ap}%
\divide\value{attackXPtotal} by 50%
\addtocounter{attackXPtotal}{-\value{heft}}%
\setcounter{defenceXPtotal}{\value{hp}}%
\multiply\value{defenceXPtotal} by \value{dr}%
\divide\value{defenceXPtotal} by 10%
\setcounter{enc}{\value{mp}}%
\divide\value{enc} by 2%
\addtocounter{defenceXPtotal}{\value{enc}}%
\addtocounter{xp}{\value{attackXPtotal}}%
\addtocounter{xp}{\value{defenceXPtotal}}%
\ifnum\value{xp}<0\setcounter{xp}{0}\fi
\glsentrytext{cr}~\arabic{xp}%
}%
}%
}
\newcommand\swarm[6][]%
{
\begin{tcolorbox}[
title={\Sw\ #2},
before upper={\parindent0pt},
ornamented,
fontupper=\small,
left=3pt,
right=3pt,
top=0pt,
bottom=10pt,
]
\randomize
\clean
\set{hp}{#3}
\set{Dexterity}{#4}
\set{toHit}{#4}
\addtocounter{toHit}{10}
\set{Speed}{#5}
\set{ap}{#5}
\addtocounter{ap}{3}
\setcounter{dr}{8}
\set{Wits}{#6}
#1
\set{freeHP}{hp}
\scshape
\begin{tabularx}{.8\textwidth}{YYYY}
\hiderowcolors
\Gls{ap}: \arabic{ap} & Att: $\arabic{toHit} - HP$
\iftoggle{verbose}{
& Speed: \arabic{Speed}
& Wits: \arabic{Wits}
}{
& Dam: 1
}
\\
\end{tabularx}%
\par\qquad%
\iftoggle{genExamples}%
{HP: \arabic{hp}
}%
{\Repeat{\value{hp}}{\Square}}%
\ifdefempty{\Abilities}{}{%
\normalfont
\par\textbf{Abilities:} \Abilities
}%
{\hfil\small\textcolor{\pageSideColor}{\calculateXP}}%
\end{tcolorbox}%
}
%%%%%%%%%%%%%%%%%%%% Creature Abilities
\newcommand\hide[1]{%
\set{dr}{#1}%
\addtocounter{weight}{\value{dr}}%
\setcounter{covering}{5}%
}
\newcommand\undead{%
\addtocounter{Speed}{-1}%
\set{Charisma}{-5}%
\ifnum\value{Brawl}<3%
\setcounter{Brawl}{2}%
\fi%
\ifnum\value{dr}>1%
\stepcounter{dr}%
\else%
\setcounter{dr}{2}%
\fi%
\set{covering}{5}
\setcounter{weaponWeight}{0}% Stop EP showing.
\setcounter{armourWeight}{0}
\addAbility{Undead}%
}
\newcommand{\acidSpray}{%
\setcounter{track}{4}%
\addtocounter{track}{\value{Strength}}%
\setcounter{age}{7}%
\addtocounter{age}{\value{Dexterity}}%
\addtocounter{age}{\value{Projectiles}}%
\conDmg{track}%
\addAbility{Acid spray (\glsentrytext{tn}~\arabic{age} to dodge or \showDam~Damage)}%
}
\newcommand{\acidBody}[1][Acidic]{%
\toggletrue{perfectArmour}%
\set{track}{Strength}%
\addtocounter{track}{3}%
\conDmg{track}%
\addAbility{#1 body (inflict \showDam~Damage each turn of grappling)}%
}
\newcommand{\gelRegen}{%
\setcounter{track}{\value{Strength}}%
\addtocounter{track}{6}%
\roundUp{track}%
\addAbility{Regeneration (1 \glsentrytext{hp}/ round, max. \arabic{track})}%
}
\newcommand\viscid{%
\setcounter{track}{\value{Strength}}%
\addtocounter{track}{7}%
\addAbility{Viscid (on a tie, the attacker must inflict Damage, but the weapon sticks into the body, \glsentrytext{tn}~\arabic{track} to pull out)}%
}
\newcommand\gloopy{%
\addAbility{Liquid (non-fire Damage removes 2~\glsentrytext{hp} but creates a 1~\glsentrytext{hp} copy)}%
}
\newcommand{\amphibious}{%
\addAbility{Amphibious}%
}
\newcommand{\claws}{%
\ifnum\value{weaponDamage}<1%
\stepcounter{weaponDamage}%
\fi%
\addAbility{Claws (+1~Damage)}%
}
\newcommand{\fireBreath}{%
\setcounter{track}{4}%
\conDmg{track}%
\setcounter{enc}{\value{hp}}%
\addtocounter{enc}{\value{hp}}%
\addAbility{Fiery breath (range: \arabic{enc} \glspl{step}, Dam: \showDam\ifnum\value{mp}>0\ plus 1 per \glsentrytext{mp} spent\fi)}%
}
% To fly, creatures should have Speed
% + Dexterity greater than Strength +
% DR.
\newcommand{\flight}{%
\addtocounter{weight}{\value{maxWeight}}%
\setcounter{enc}{\value{dr}}%
\roundUp{enc}%
\addtocounter{enc}{\value{Strength}}%
\setcounter{track}{\value{Speed}}%
\addtocounter{track}{\value{Air}}%
\addAbility{Wings %
\ifnum\value{enc}>\value{track}%
(can glide, but not fly)
\else%
\ifnum\value{enc}=\value{track}%
(moves at x8 speed, must run before takeoff)%
\else%
(moves at x8 speed)%
\fi%
\fi%
}%
}
\newcommand{\stench}{%
\setcounter{track}{10}%
\addtocounter{track}{-\value{Speed}}%
\addAbility{Stench (breathing in demands \roll{Strength}{Wyldcrafting} check, \glsentrytext{tn}~\arabic{track},
or take 3 \glspl{ep})}%
}
\newcommand{\crazyGas}{%
\setcounter{track}{4}%
\addtocounter{track}{\value{Strength}}%
\addAbility{Gas (receive hallucinations and \arabic{track}~\glspl{ep} per round)}%
}
\newcommand{\quadraped}{%
\addAbility{Quadraped (double movement)}%
}
\newcommand{\octoped}{%
\addAbility{Octoped (double movement)}%
}
\newcommand{\teeth}{%
\addAbility{Fangs}%
}
\newcommand{\tentacles}{%
\setcounter{track}{2}%
\addtocounter{track}{\value{Strength}}%
\addtocounter{track}{\value{Dexterity}}%
\ifnum\value{track}<2\setcounter{track}{2}\fi%
\set{enc}{track}%
\roundUp{enc}%
\addtocounter{weight}{\value{track}}%
\addAbility{\arabic{track}~tentacles (grapple up to \arabic{enc} opponents without going prone)}%
}
\newcommand{\venom}{%
\conDmg{r4b}%
\addAbility{Venom (grappling attack inflicts \showDam~\glsfmtlongpl{ep})}%
}
\newcommand{\web}{%
\setcounter{track}{8}%
\addtocounter{track}{\value{Strength}}%
\addAbility{Web (\roll{Strength}{Athletics}, \glsentrytext{tn} \arabic{track} to break free for 1~\glsentrytext{ap})}%
\ifnum\value{Strength}>0%
\addtocounter{weight}{\value{Strength}}%
\fi%
}
%%%%%%%%%%%%%%%%%%%%% Magic Path
\newcommand{\Spheres}[1]{ \\
\raggedright \ent{Spheres} & #1
}
\newcommand\mutation[2][1]{%
\Repeat{#1}{%
\ifcase\value{#2}\relax%
\hide{\value{r3}}%
\or%
\teeth%
\or%
\claws%
\or%
\venom%
\or%
\amphibious%
\or%
\tentacles%
\or%
\web%
\else%
\flight%
\fi%
\stepcounter{#2}%
}%
}
%%%%%%%%%%%%%%%%%%%% Human Names
\newcounter{humanNameNo}
\setcounter{humanNameNo}{\value{r12}}
\newcounter{humanNameSuffNo}
\setcounter{humanNameSuffNo}{\value{r4}}
\newcommand\humanNamePrefix{%
\randomfour%
\addtocounter{humanNameNo}{\value{r4}}%
\ifnum\value{humanNameNo}>19\addtocounter{humanNameNo}{-19}\fi%
\expandafter\expandafter\ifcase\value{humanNameNo}\relax%
\or%
Grit%
\or%
Rank%
\or%
Scour%
\or%
Steer%
\or%
Mush%
\or%
Stoat%
\or%
Court%
\or%
Glum%
\or%
Flic%
\or%
Dug%
\or%
Nark%
\or%
Nettle%
\or%
Slate%
\or%
Gourse%
\or%
Cinder%
\or%
Soot%
\or%
Moc%
\or%
Keel%
\else%
Gout%
\fi%
}
\newcommand\humanNameSuffix{%
\randomthreeB%
\addtocounter{humanNameSuffNo}{\value{r3b}}%
\ifnum\value{humanNameSuffNo}>20\addtocounter{humanNameSuffNo}{-20}\fi%
\ifcase\value{humanNameSuffNo}\relax%
\or%
itch%
\or%
vore%
\or%
snag%
\or%
derth%
\or%
peel%
\or%
groat%
\or%
fen%
\or%
nash%
\or%
nail%
\or%
rash%
\or%
flay%
\or%
boak%
\or%
broil%
\or%
pike%
\or%
filch%
\or%
snatch%
\or%
flea%
\or%
fray%
\or%
rag%
\else%
blathe%
\fi%
}
\newcommand\composeHumanName{%
\humanNamePrefix\humanNameSuffix%
}