\ProvidesPackage{config/stats} %%%%%%%%%%%%%%%%%%%% Introduction \newtoggle{bestiarychapter} \settoggle{bestiarychapter}{false} % _ _ % ___| |_ __ _| |_ % / __| __/ _` | __| % \__ \ || (_| | |_ % |___/\__\__,_|\__| % % % _ _ _ % | |__ | | ___ ___| | _____ % | '_ \| |/ _ \ / __| |/ / __| % | |_) | | (_) | (__| <\__ \ % |_.__/|_|\___/ \___|_|\_\___/ % % % This file makes stat blocks for monsters. % % The writer feeds in something like this: % % \npc{\M}{Patrick the Pyromanacer} % % \person{0}% STRENGTH % {0}% DEXTERITY % {0}% SPEED % {{0}% INTELLIGENCE % {0}% WITS % {0}}% CHARISMA % {0}% DR % {0}% COMBAT % {}% SKILLS % {Nothing}% EQUIPMENT % {} % % The \person command takes various stats, and % inside that 'SKILLS' variable (variable no. 8), % we can add additional things, like % \knacks{\firststrike}, or % \Path{Blood}{\invocation{2}}, which gives your % wizzard 'invocation 2'. % % Most of the rest of the commands deal with % properly calculating derived stats, like the TN % to hit the creature. \newtoggle{mind} \newtoggle{bling} \newtoggle{examplecharacter} \settoggle{examplecharacter}{false} \newtoggle{debug}\settoggle{debug}{false} \newcommand{\ent}[1]{\textbf{#1}} \newcommand{\test}{} \newcommand{\skills}{} \newcommand{\equipment}{} \newcommand{\mods}{} \newcommand{\printknacks}{} \newcommand{\weaponknackone}{} \newcommand{\weaponknacktwo}{} % we calculate damage here because we can't display 1d6+6 damage - it has to turn into 2d6+2 damage. \newcommand{\calculatedamage}[1]{% \setcounter{damagebonus}{#1}% \setcounter{numberofdice}{1}% \whileboolexpr{test {\ifnumcomp{\value{damagebonus}}{>}{3}}}{% \addtocounter{damagebonus}% {-4}\addtocounter{numberofdice}{1}% }% {$\arabic{numberofdice}D6% \ifnumcomp{\value{damagebonus}}{>}{0}% {+\arabic{damagebonus}$}% {% \ifnumcomp{\value{damagebonus}}{<}{0}{% \arabic{damagebonus}$}% {$}% }% }% } %%%%%%%%%%%%%%%%%%%% Character Generation %%%%%%%%%%%%%%%%%%%% % % _ % ___ ___ _ _ _ __ | |_ ___ _ __ ___ % / __/ _ \| | | | '_ \| __/ _ \ '__/ __| %| (_| (_) | |_| | | | | || __/ | \__ \ % \___\___/ \__,_|_| |_|\__\___|_| |___/ % % % Attributes: str, dex, spd, int, wts, cha % secondary str, dex and spd \newcounter{str} \newcounter{dex} \newcounter{spd} \newcounter{int} \newcounter{wts} \newcounter{cha} \newcounter{att} \newcounter{dam} \newcounter{dr} \newcounter{knacks} \newcounter{foxhop}% set to '1' if the character has fox hop \setcounter{foxhop}{0} \newcounter{strb} \newcounter{dexb} \newcounter{spdb} \newcounter{attb} \newcounter{damb} % % Extras: MP hp fp % Derived: dicenumber, dicebonus, \newcounter{mp} \newcounter{mpb} \newcounter{sp} \newcounter{hp} \newcounter{fp} \newcounter{numberofdice} \newcounter{damagebonus} \newcounter{xp} \newcounter{xpbonus} \newcounter{attackXPtotal} \newcounter{defenceXPtotal} % _ % ___ ___ _ __ ___ _ __ ___ __ _ _ __ __| |___ % / __/ _ \| '_ ` _ \| '_ ` _ \ / _` | '_ \ / _` / __| % | (_| (_) | | | | | | | | | | | (_| | | | | (_| \__ \ % \___\___/|_| |_| |_|_| |_| |_|\__,_|_| |_|\__,_|___/ % % magic \newcommand{\mana}[1]{\setcounter{mp}{#1}} \newcommand{\aldaron}{\addtocounter{mp}{3}Aldaron} \newcommand{\conjuration}{\addtocounter{mp}{3}Conjuration} \newcommand{\enchantment}{\addtocounter{mp}{3}Enchantment} \newcommand{\fate}{\addtocounter{mp}{3}Fate} \newcommand{\force}{\addtocounter{mp}{3}Force} \newcommand{\invocation}{\addtocounter{mp}{3}Invocation} \newcommand{\illusion}{\addtocounter{mp}{3}Illusion} \newcommand{\necromancy}{\addtocounter{mp}{3}Necromancy} \newcommand{\polymorph}{\addtocounter{mp}{3}Polymorph} \newcommand{\saurecanta}{\addtocounter{mp}{3}Saurecanta} \newcommand{\lockedmana}[1]{\setcounter{mpb}{-#1}} \newcommand{\armourtype}{N} \newcommand{\knacks}[1]{ \\ \ent{Knacks:} & #1 } %%%%%%%%%%%%%%%%%%%%% Knacks % \newcommand{\adrenalinesurge}{Adrenaline Surge\addtocounter{strb}{1}\addtocounter{knacks}{1}} \newcommand{\disarm}{Disarm\addtocounter{knacks}{1}\addtocounter{xpbonus}{1}} \newcommand{\guardian}{Guardian\addtocounter{knacks}{1}} \newcommand{\furiousblows}{Furious Blows\addtocounter{knacks}{1}} \newcommand{\firststrike}{First Strike\addtocounter{spd}{1}\addtocounter{spdb}{2}\addtocounter{knacks}{1}} \newcommand{\specialist}[1]{Specialist (#1)\addtocounter{knacks}{1}} \newcommand{\bloodcaster}{Blood Caster\addtocounter{knacks}{1}} \newcommand{\combatcaster}{Combat Caster\addtocounter{knacks}{1}} \newcommand{\snapcaster}{Snap Caster\addtocounter{knacks}{1}} \newcommand{\extremefocus}{Extreme Focus\addtocounter{knacks}{1}} \newcommand{\backtothewall}{Back to the Wall\addtocounter{knacks}{1}} \newcommand{\laststand}{Last Stand\addtocounter{knacks}{1}} \newcommand{\perfectsneakattack}{Perfect Sneak Attack\addtocounter{knacks}{1}\addtocounter{strb}{\value{knacks}}\addtocounter{strb}{2}} \newcommand{\precisestrike}{Precise Strike\addtocounter{knacks}{1}} \newcommand{\quickshot}{Quick Shot\addtocounter{knacks}{1}} \newcommand{\stunningstrike}{Stunning Strike\addtocounter{knacks}{1}\addtocounter{xpbonus}{1}} \newcommand{\charge}{\addtocounter{knacks}{1}\setcounter{track}{\value{knacks}}\addtocounter{track}{1}\divide\value{track} by 2\addtocounter{attb}{\value{track}}\addtocounter{strb}{\value{track}}\addtocounter{spdb}{\value{track}}Extreme Charge} \newcommand{\snapshot}{Snap Shot\addtocounter{knacks}{1}\addtocounter{strb}{2}} \newcommand{\defender}{Defender\addtocounter{knacks}{1}\addtocounter{xpbonus}{1}} \newcommand{\dodger}{Dodger\addtocounter{knacks}{1}} \newcommand{\foxhop}{Fox Hop\addtocounter{knacks}{1}\setcounter{foxhop}{1}} \newcommand{\mightydraw}{Mighty Draw\addtocounter{knacks}{1}} \newcommand{\finishingblow}{Finishing Blow\addtocounter{knacks}{1}} \newcommand{\unstoppable}{Unstoppable\addtocounter{hp}{2}\addtocounter{knacks}{1}} %%%%% Weapons \newcommand{\javelin}{Javelin\addtocounter{str}{1}\addtocounter{spd}{2}} \newcommand{\Dagger}{Dagger\addtocounter{str}{1}} \newcommand{\shortsword}{Shortsword\addtocounter{str}{1}\addtocounter{spd}{1}\addtocounter{dex}{2}} \newcommand{\club}{Club\addtocounter{str}{2}\addtocounter{spd}{1}\addtocounter{dex}{1}} \newcommand{\rapier}{Rapier\addtocounter{str}{1}\addtocounter{spd}{2}\addtocounter{dex}{1}} \newcommand{\longsword}{Longsword\addtocounter{str}{1}\addtocounter{spd}{1}\addtocounter{dex}{3}} \newcommand{\greatsword}{Greatsword\addtocounter{str}{2}\addtocounter{spd}{1}\addtocounter{dex}{2}} \newcommand{\spear}{Spear\addtocounter{str}{1}\addtocounter{spd}{1}\addtocounter{dex}{2}\addtocounter{spdb}{2}} \newcommand{\quarterstaff}{Quarterstaff\addtocounter{spd}{1}\addtocounter{dex}{2}\addtocounter{spdb}{2}} \newcommand{\greataxe}{Greataxe\addtocounter{str}{3}\addtocounter{spd}{1}\addtocounter{dex}{1}} \newcommand{\woodaxe}{Wood axe\addtocounter{str}{2}\addtocounter{dex}{1}} \newcommand{\greatclub}{Greatclub\addtocounter{str}{4}\addtocounter{spd}{1}\addtocounter{dex}{1}} \newcommand{\longbow}{Longbow} \newcommand{\shield}{\addtocounter{dex}{1}shield} \newcommand{\bucklar}{\addtocounter{dex}{1}bucklar shield} % ARMOUR %% For perfect armour, stick \perfectArmour in the additional notes category of a \person (#9). \newcommand{\perfectArmour}{\gdef\armourtype{(Perfect)}} \newcommand{\partialelvish}{partial leather armour% \ifnumcomp{\value{dr}}{>}{2}% {\addtocounter{dr}{1}}% {\divide\value{dr} by 2 \addtocounter{dr}{2}}% } \newcommand{\partialleather}{partial leather armour% \ifnumcomp{\value{dr}}{>}{3}% {\addtocounter{dr}{2}}% {\divide\value{dr} by 2 \addtocounter{dr}{3}}% } \newcommand{\completeleather}{full leather armour\gdef\armourtype{C}% \ifnumcomp{\value{dr}}{>}{3}% {\addtocounter{dr}{2}}% {\divide\value{dr} by 2 \addtocounter{dr}{3}}% } \newcommand{\partialchain}{partial chainmail% \ifnumcomp{\value{dr}}{>}{4}% {\addtocounter{dr}{2}}% {\divide\value{dr} by 2 \addtocounter{dr}{4}}% } \newcommand{\completechain}{complete chain armour\gdef\armourtype{C}% \ifnumcomp{\value{dr}}{>}{4}% {\addtocounter{dr}{2}}% {\divide\value{dr} by 2 \addtocounter{dr}{4}}% } \newcommand{\partialplate}{partial plate armour% \ifnumcomp{\value{dr}}{>}{5}% {\addtocounter{dr}{3}}% {\divide\value{dr} by 2 \addtocounter{dr}{5}}% } \newcommand{\completeplate}{complete plate armour\gdef\armourtype{C}% \ifnumcomp{\value{dr}}{>}{5}% {\addtocounter{dr}{3}}% {\divide\value{dr} by 2 \addtocounter{dr}{5}}% } % % _ __ ___ _ __ ___ ___ _ __ %| '_ \ / _ \ '__/ __|/ _ \| '_ \ %| |_) | __/ | \__ \ (_) | | | | %| .__/ \___|_| |___/\___/|_| |_| %|_| % % % _ _ %% ___| |__ __ _ _ __ __ _ ___| |_ ___ _ __ %% / __| '_ \ / _` | '__/ _` |/ __| __/ _ \ '__| %%| (__| | | | (_| | | | (_| | (__| || __/ | %% \___|_| |_|\__,_|_| \__,_|\___|\__\___|_| %% %% optional counters, such as mana, are cleaned %% clear: weaponsknack1 and 2, %% % \newcommand{\mind}[3]{ \setcounter{int}{#1}\setcounter{wts}{#2}\setcounter{cha}{#3} } % %%%%%%%%%%% Person % \newcommand{\person}[9]{ \settoggle{bling}{true} \settoggle{mind}{true} \setcounter{str}{#1} \setcounter{dex}{#2} \setcounter{spd}{#3} \mind#4 \setcounter{dr}{#5} \setcounter{att}{#6} \renewcommand{\skills}{#7} \renewcommand{\equipment}{#8} \renewcommand{\mods}{#9} \clean \renewcommand{\armourtype}{P} \gdef\armourtype{P} \begin{tcolorbox}[ title={\name}, before upper={\parindent0pt}, halign=flush left, left=10pt, right=15pt, top=0pt, ] \iftoggle{personality}{ \textbf{Archetype:} \archetype \textbf{Personality:} \personality \textbf{Mannerism:} \mannerism \vspace{1em} \settoggle{personality}{false}}% {} \creaturestats \derivedstats \end{tcolorbox} \settoggle{debug}{false} \settoggle{examplecharacter}{false} \settoggle{bling}{false} } \newcommand{\animal}[9]{ \settoggle{bling}{true} \settoggle{mind}{false} \setcounter{str}{#1} \setcounter{dex}{#2} \setcounter{spd}{#3} \setcounter{wts}{#4} \setcounter{dr}{#5} \setcounter{att}{#6} \renewcommand{\skills}{#7} \renewcommand{\abilities}{#8} \renewcommand{\mods}{#9} \clean \renewcommand{\armourtype}{C} \begin{tcolorbox}[title={\name}, before upper={\parindent0pt}, halign=flush left, left=10pt, right=15pt, ] \iftoggle{personality}{ \textbf{Personality:} \personality \textbf{Mannerism:} \mannerism \vspace{1em} \settoggle{personality}{false}}% {} \creaturestats \derivedstats \end{tcolorbox} \settoggle{bling}{false} } \newcommand{\clean}{ \setcounter{fp}{5} \setcounter{sp}{0} \setcounter{knacks}{0} \renewcommand{\armourtype}{N} \renewcommand{\weaponknackone}{} \renewcommand{\weaponknacktwo}{} \setcounter{mp}{0} \setcounter{mpb}{0} \setcounter{xpbonus}{0} \settoggle{team}{false} } %% _ _ _ _ _ %% __ _| |_| |_ _ __(_) |__ _ _| |_ ___ ___ %% / _` | __| __| '__| | '_ \| | | | __/ _ \/ __| %%| (_| | |_| |_| | | | |_) | |_| | || __/\__ \ %% \__,_|\__|\__|_| |_|_.__/ \__,_|\__\___||___/ %% %% Print the line, %% print the attributes. %% print the skills %% print the knacks %% print the equipment % \newcommand{\creaturestats}{ \vspace{.1cm} % Reference versions (which always are non-verbose) don't % have the space for full-sized stats. \iftoggle{verbose}{ \begin{small}% }{% \begin{footnotesize} } \setcounter{strb}{0} \setcounter{spdb}{0} \setcounter{dexb}{0} \begin{tabularx}{\textwidth}{lr|lr|lr} % the tcolorbox has coloured rows (xcolor package) % but that doesn't work with creature stats, so we suppress it here \hiderowcolors \iftoggle{verbose}{Strength}{STR} & \arabic{str} & \iftoggle{verbose}{Dexterity}{DEX} & \arabic{dex} & \iftoggle{verbose}{Speed}{SPD} & \arabic{spd} \\ \iftoggle{mind}{ \iftoggle{verbose}{Intelligence}{INT} & \arabic{int} & \iftoggle{verbose}{Wits}{WTS} & \arabic{wts} & \iftoggle{verbose}{Charisma}{CHA} & \arabic{cha} \\}{% && \iftoggle{verbose}{Wits}{WTS} & \arabic{wts} \\ } \setcounter{hp}{\value{str}} \end{tabularx} \addtocounter{hp}{6} \iftoggle{examplecharacter}{}{ \addtocounter{dex}{7} } \vspace{.1cm} \raggedright \noindent \begin{tabularx}{\linewidth}{p{0.2\linewidth}X} \ent{Skills} & \ifnumcomp{\value{att}}{=}{0}{}{\iftoggle{mind}{Combat \arabic{att}, }{Aggression \arabic{att}, }} \skills \\ \iftoggle{mind}{\ent{Equipment} & \equipment \\}{\ent{Abilities} & \abilities \\} \addtocounter{strb}{\value{str}} \addtocounter{dexb}{\value{dex}} \addtocounter{spdb}{\value{spd}} \setcounter{damb}{\value{dam}} \setcounter{attb}{\value{att}} \mods \end{tabularx} \weaponknackone \weaponknacktwo \iftoggle{examplecharacter}{}{ \addtocounter{att}{8} \addtocounter{attb}{8} } \vspace{.1cm} \iftoggle{verbose}{% \end{small}% }{% \end{footnotesize}% }% } %% _ _ _ %% __| | ___ _ __ ___| |_ __ _| |_ ___ %% / _` |/ _ \ '__/ __| __/ _` | __/ __| %%| (_| | __/ | \__ \ || (_| | |_\__ \ %% \__,_|\___|_| |___/\__\__,_|\__|___/ %% %% %% dice instead of Damage %% print out att, spd, DAM, dex, dr (type), str %% % \newcommand{\derivedstats}{ \iftoggle{debug}{str is \arabic{str}, strb is \arabic{strb}.}{} \hrule \vspace{.1cm} \noindent Attack \arabic{att}\ifnumcomp{\value{att}}{=}{\value{attb}}{}{ (\arabic{attb})}, Initiative \arabic{spd}\ifnumcomp{\value{spd}}{=}{\value{spdb}}{}{ (\arabic{spdb})}, Damage \calculatedamage{\value{str}}\ifnumcomp{\value{str}}{=}{\value{strb}}{}{ (\calculatedamage{\value{strb}})}, \iftoggle{examplecharacter}{\mbox{Defence \arabic{dex},} }{% TN \arabic{dex}% \ifnumcomp{\value{dr}}{>}{0}{ \ifnum\pdfstrcmp{\armourtype}{P}=0% \addtocounter{dexb}{3} (\arabic{dexb})% \fi \ifnum\pdfstrcmp{\armourtype}{C}=0% \addtocounter{dexb}{5}~(\arabic{dexb})% \fi% }{}, }% \ifnumcomp{\value{dr}}{>}{0}{DR \arabic{dr}~\armourtype, }{}% \ifnum\value{mp}>0% \addtocounter{mp}{\value{wts}}% \mbox{ \ifnum\value{mpb}=0% \arabic{mp}~MP% \else% \addtocounter{mpb}{\value{mp}}% \arabic{mpb} / \arabic{mp} MP% \fi \iftoggle{bestiarychapter}% {, }% { \Repeat{\value{mp}}{\ding{111}}, }% } \fi \mbox{\arabic{hp} HP \iftoggle{bestiarychapter}{}{% \ \Repeat{\value{hp}}{\ding{111}}% }% }% \ifnumcomp{\value{sp}}{>}{0}% {, \mbox{% \arabic{sp} SP % \iftoggle{bestiarychapter}{}{\Repeat{\value{sp}}{\ding{111}}}% }% }% {}% \iftoggle{examplecharacter}{\addtocounter{fp}{\value{cha}}, \arabic{fp} FP}{} \iftoggle{examplecharacter}{}{ \calculateXP } } % % %% __ ______ %% \ \/ / _ \ %% \ /| |_) | %% / \| __/ %% /_/\_\_| %% \newcommand{\calculateXP}{% %% Sanitize: init+5, dam+5, \addtocounter{spdb}{5} \addtocounter{strb}{5} \addtocounter{dex}{5} \addtocounter{dr}{2} % Sanitize: dex+5, dr+1, % attackXPtotal= strb x spdb x damb \vspace{.1cm} \hrule \vspace{.1cm} \setcounter{attackXPtotal}{\value{attb}} \multiply\value{attackXPtotal} by \value{spdb} \multiply\value{attackXPtotal} by \value{strb} \iftoggle{debug}{Attack total: \arabic{attackXPtotal}}{} % defenceXPtotal= dex x dr x hp \setcounter{defenceXPtotal}{\value{dex}} \multiply\value{defenceXPtotal} by \value{dr} \multiply\value{defenceXPtotal} by \value{hp} \iftoggle{debug}{Defence total: \arabic{defenceXPtotal}}{} % XP = attackXPtotal + defenceXPtotal \setcounter{xp}{\value{attackXPtotal}} \addtocounter{xp}{\value{defenceXPtotal}} \addtocounter{xp}{-350} \multiply\value{mp} by 100 \addtocounter{xp}{\value{mp}} \ifnumcomp{\value{xp}}{<}{120}{\ifnumcomp{\value{xp}}{>}{100}{$1/2$ XP}{$1/3$}}{% \divide\value{xp} by 120% \addtocounter{xp}{\value{xpbonus}}% \arabic{xp} XP}% % if {mind} print fate points. % \iftoggle{examplecharacter}{% }{ \iftoggle{mind}% {\addtocounter{fp}{\value{cha}} \arabic{fp} FP % \iftoggle{bestiarychapter}% {}% {\Repeat{\value{fp}}{\ding{111}}} }{} \vspace{.1cm} \hrule } \vspace{.1cm} } % %%%%%%%%%%%%%%%%%%%% Creature Abilities \newcommand{\abilities}[1]{ \\ \ent{Abilities:} & #1 } \newcommand{\claws}{ Claws (+1 Damage) \addtocounter{str}{1} } \newcommand{\quadraped}{% Quadraped (double movement)% } \newcommand{\teeth}{% Teeth (+1 Damage after grapple)\addtocounter{str}{1}% } \newcommand{\web}{ \setcounter{track}{6}\addtocounter{track}{\value{str}} Web (Strength + Athletics, TN \arabic{track} to break free as a movement action) } %%%%%%%%%%%%%%%%%%%%% Magic Path \newcommand{\Path}[2]{ \\ \raggedright \ent{Path of #1} & #2 }