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