\documentstyle{article}
\pagestyle{empty}

\setlength{\oddsidemargin}{-.5in}
\setlength{\textwidth}{7.5in}
\setlength{\topmargin}{-.5in}
\setlength{\topskip}{0in}
\setlength{\headheight}{0in}
\setlength{\headsep}{0in}
\setlength{\footheight}{0in}
\setlength{\footskip}{0in}
\setlength{\textheight}{10.5in}
\setlength{\parindent}{0in}

\newlength{\TEMP}
\newlength{\HORZ}
\newlength{\VERT}

\newcommand{\N}{\small\sf}				% Normal size
\renewcommand{\S}{\scriptsize\rm}			% Small size
\newcommand{\T}{\rule{0pt}{3ex}}			% Invisible tall space

\newcommand{\fiveboxes}{{\sym 2 2 2 2 2}}
\newcommand{\tenboxes}{\fiveboxes\fiveboxes}
\newcommand{\body}{}
\newcommand{\hf}{\hrulefill}
\newsavebox{\BAR}
\newcommand{\U}{\usebox{\BAR}}
\N\savebox{\BAR}[2em]{\hrulefill}
\newcommand{\X}{$\times$\hss$\times$\hss$\times$}
%
% the command \rectangle{width}{height} will give you a blank box
% exactly that size.
\newcommand{\rectangle}[2]{{\rule{0pt}{#2}\rule{#1}{0pt}}}

\begin{document}
\begin{center}
\Large \bf Character Data \\
\medskip
\end{center}
Character: \hrulefill ~~Date: \hrulefill \\
~ \vspace*{2ex} \\

% Character description
%
\settowidth{\TEMP}{~~~~FEATURES~~~~}
\advance\TEMP by 15em\advance\TEMP by 6\tabcolsep
\advance\TEMP by -\textwidth
\TEMP=-\TEMP
\newcommand{\LN}{\cline{1-2}}
\newsavebox{\CHAR}\sbox{\CHAR}
{\begin{tabular}{|p{15em}|l|c|} \hline
\multicolumn{1}{|c|}{CHARACTER} & ~~~~FEATURES~~~~ & DESCRIPTION \\
\hline
Class/Profession:  	& Race:            & \rule{\the\TEMP}{0pt}\\ \LN
Level:		   	& Sex:		   & \\ \LN
Base Hit Points:  	& Age:             & \\ \LN
Total Hit Points:  	& Mass:\hfill   kg & \\ \LN
Psion Points:	   	& Height:\hfill m  & \\ \hline
\end{tabular}}

% Character stats
%
\newsavebox{\STAT}\sbox{\STAT}
{\begin{tabular}{|lcccc|ccc|}
\hline
\multicolumn{4}{|c}{} & \multicolumn{1}{c|}{Dev.} & 
    \multicolumn{3}{c|}{BONUSES} \\
Statistic       & Abbr & Temp & Pot  & Pts  & Norm & Race & Total \\
\hline
\T
Constitution    &  CO  &  \U  &  \U  &  \U  &  \U  &  \U  &  \U  \\
Agility         &  AG  &  \U  &  \U  &  \U  &  \U  &  \U  &  \U  \\
Self Discipline &  SD  &  \U  &  \U  &  \U  &  \U  &  \U  &  \U  \\
Memory          &  ME  &  \U  &  \U  &  \U  &  \U  &  \U  &  \U  \\
Reasoning       &  RE  &  \U  &  \U  &  \U  &  \U  &  \U  &  \U  \\
Strength        &  ST  &  \U  &  \U  &  \X  &  \U  &  \U  &  \U  \\
Quickness       &  QU  &  \U  &  \U  &  \X  &  \U  &  \U  &  \U  \\
Presence        &  PR  &  \U  &  \U  &  \X  &  \U  &  \U  &  \U  \\
Intuition       &  IN  &  \U  &  \U  &  \X  &  \U  &  \U  &  \U  \\
Empathy         &  EM  &  \U  &  \U  &  \X  &  \U  &  \U  &  \U  \\
Appearance      &  AP  &  \U  &  \U  &  \X  &  \U  &  \U  &  \U  \\
\hline
\end{tabular}}

% Character experience
%
\VERT=\ht\STAT \advance\VERT by \dp\STAT % Total height of the STAT table.
\advance\VERT by -\baselineskip		 % Account for title bar
\advance\VERT by -2\doublerulesep	 % For \hline commands (except top)
\advance\VERT by -2\arrayrulewidth
\HORZ=\textwidth
\advance\HORZ by -\wd\STAT
\advance\HORZ by -2\tabcolsep
\advance\HORZ by -4\arrayrulewidth
\advance\HORZ by -\doublerulesep
\newsavebox{\EXP}\sbox{\EXP}
{\begin{tabular}{|c|}
\hline
EXPERIENCE \\
\hline
\rectangle{\the\HORZ}{\the\VERT}	\\
\hline
\end{tabular}}

% Armor & shields character is currently wearing
%
\newsavebox{\ARMOR}\sbox{\ARMOR}
{\renewcommand{\body}%
{\hrulefill	  &  \U   &  \U   &  \U   &   \U	\\}%
\tabcolsep=4pt\begin{tabular}{|c|cccc|}
\hline 
%\multicolumn{5}{|c|}{ARMOR and SHIELDS} \\ \hline
	              & \S Skill & \S Stat  & \S Armor & \S Total \\ 
\makebox[10em]{ARMOR} & \S Bonus & \S Bonus & \S Bonus & \S Bonus \\ \hline
\T
\body
\body
\body
\body
\hline\end{tabular}}

% Defensive bonuses in various situations
%
\newsavebox{\DEFENSE}\sbox{\DEFENSE}
{\begin{tabular}{|l|*{4}{c}|} \hline
~       & \multicolumn{4}{|c|}{DEFENSIVE BONUS} \\
Against & \S QU & \S Arm. & \S Shld & \S Total \\ \hline
\T
Melee       & \U     & \U         & \U      & \U    \\
Projectile  & \U     & \U         & \U      & \U    \\
Energy      & \U     & \U         & \U      & \U    \\
Missile     & \U     & \U         & \U      & \U    \\
\hline \end{tabular}}

% For future use ...
%
\newsavebox{\FillOne}\sbox{\FillOne}
{\HORZ=\textwidth
\VERT=\ht\ARMOR \advance\VERT by \dp\ARMOR
\advance\VERT by -\baselineskip		 % Account for title bar
\advance\VERT by -2\doublerulesep	 % For \hline commands (except top)
\advance\VERT by -2\arrayrulewidth
\HORZ=\textwidth
\advance\HORZ by -\wd\ARMOR
\advance\HORZ by -\wd\DEFENSE
\advance\HORZ by -2\tabcolsep
\advance\HORZ by -4\arrayrulewidth
\advance\HORZ by -2\doublerulesep
\begin{tabular}{|c|}\hline
\\\hline
\rectangle{\the\HORZ}{\the\VERT}\\
\hline \end{tabular}}

% Weaponry
%
\renewcommand{\body}
{\hf & \U & \U & \U & \U & \U & \U & \U & \U & \U & \U & \U & \U & \hf & \hf \\}
\newsavebox{\WEAPON}\sbox{\WEAPON}
{\tabcolsep=4pt%
\HORZ=12\wd\BAR				 % All the narrow columns
\advance\HORZ by 30\tabcolsep		 % Intercolumn space
\advance\HORZ by 10em%			 % "FAIL RANGE" & "TABLE USED" cols
\advance\HORZ by 2\doublerulesep
\HORZ=-\HORZ
\advance\HORZ by \textwidth
\begin{tabular}{|c|*{8}{c}|*{4}{c}|c|c|}\hline
~& \multicolumn{8}{c|}{BONUSES \& PENALTIES}
& \multicolumn{4}{c|}{BONUS @ RANGE} 
& FAIL
& \makebox[6em]{TABLE} \\
\makebox[\HORZ]{WEAPON}
& \S Skill & \S Stat.  & \S Wpn. & \S Arm.  & \S Level  
& \S Items & \S Misc  & \S Total  & \S PtBlk  & \S Short & \S Med
& \S Long  & \makebox[4em]{RANGE} & USED \\
\hline
\T
\body
\body
\body
\body
\body
\body
\body
\body
\hline\end{tabular}}

% Languages
%
\renewcommand{\body}{\makebox[10em]{\hf} & \hf & \hf \\}
\newsavebox{\LANGUAGE}\sbox{\LANGUAGE}
{\begin{tabular}{|c|cc|}\hline
& \multicolumn{2}{c|}{SKILL} \\
LANGUAGE & Written & Spoken \\\hline
\T\body\body\body\body\body\body\body
\hline\end{tabular}}

% Psion abilities
%
\newsavebox{\PSION}\sbox{\PSION}
{\newcommand{\W}{\makebox[2.5em]{\hf}}%
\renewcommand{\body}{\hf & \W & \W & \W & \W & \W & \W \\}%
\begin{tabular}{|c|cccccc|}\hline
\makebox[10em]{PSION LISTS} & 1--5 & 6--10 & 11--20 & 25 & 30 & 50 \\\hline
\T\body\body\body\body\body\body\body\body
\hline\end{tabular}}

% Due to TeX's damnfool static memory pools (calloc()?  what's that?)
% we have to go through contortions here because we're running out of
% memory.
% So we define a command "popbox" which is identical to LaTeX's "usebox"
% command, except that it destroys the box after using it (thus freeing
% some memory up).  The only difference between the definition of "popbox"
% and "usebox" is that I have "\box #1" where LaTeX has "\copy #1".
% 
\def\popbox#1{\leavevmode\box #1\relax}
%
\popbox{\CHAR}\par
\popbox{\STAT}\hfill\popbox{\EXP}\par
\popbox{\ARMOR}\hfill\popbox{\DEFENSE}\hfill\popbox{\FillOne}\par
\popbox{\WEAPON}\par
\popbox{\LANGUAGE}\hfill\popbox{\PSION}\par
\end{document}


