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