diff options
author | dakkar <dakkar@thenautilus.net> | 2011-10-23 15:27:06 +0100 |
---|---|---|
committer | dakkar <dakkar@thenautilus.net> | 2011-10-23 15:27:06 +0100 |
commit | aa61f8fe7574e97a78957fb9c520cf6880a6dc56 (patch) | |
tree | 7ee230d9d49c72080b346aa11c9ccf89f1a5f69c | |
parent | foglio incantesimi (diff) | |
parent | allinea a destra specialcomp (diff) | |
download | inventario-aa61f8fe7574e97a78957fb9c520cf6880a6dc56.tar.gz inventario-aa61f8fe7574e97a78957fb9c520cf6880a6dc56.tar.bz2 inventario-aa61f8fe7574e97a78957fb9c520cf6880a6dc56.zip |
Merge branch 'master' into risultati
-rw-r--r-- | incantesimi/excel_to_incantesimi.pl | 85 | ||||
-rw-r--r-- | incantesimi/incantesimi.cmd.tex | 70 | ||||
-rw-r--r-- | incantesimi/incantesimi.example.tex | 35 | ||||
-rw-r--r-- | incantesimi/incantesimi.prep.tex | 340 |
4 files changed, 301 insertions, 229 deletions
diff --git a/incantesimi/excel_to_incantesimi.pl b/incantesimi/excel_to_incantesimi.pl index e2d1899..d1c82cf 100644 --- a/incantesimi/excel_to_incantesimi.pl +++ b/incantesimi/excel_to_incantesimi.pl @@ -1,6 +1,7 @@ #!/usr/bin/perl use strict; use warnings; +use utf8; use Spreadsheet::ParseExcel; use LaTeX::Encode; use Template; @@ -9,16 +10,23 @@ use Data::Printer; # excel => latex my %fieldmap = ( spellname => 'name', + name => 'name', + ability => 'name', level => 'level', + equiv => 'level', school => 'scuola', + source => 'source', + uses => 'uses', + type => 'type', comp => 'components', ct => 'tempo', + at => 'tempo', range => 'range', target => 'target', duration => 'durata', st => 'st', sr => 'sr', - spell => 'descrizione', + description => 'descrizione', special => 'specialcomp', page => 'ref', notes => 'note', @@ -33,25 +41,65 @@ my $parser = Spreadsheet::ParseExcel->new(); my $wb = $parser->parse($input_filename) or die $parser->error; -my $spells = parse_table($wb->worksheet('Incantesimi') - // $wb->worksheet(0)); +sheet_2_latex( + sheet_name => 'Incantesimi', + output_filename => "${output_filename}.incantesimi.tex", +); +sheet_2_latex( + sheet_name => 'Domini', + sheet_idx => 1, + output_filename => "${output_filename}.domini.tex", + skip_col => 1, +); +sheet_2_latex( + sheet_name => 'Abilità speciali', + sheet_idx => 2, + output_filename => "${output_filename}.special.tex", + command => 'potere', + skip_col => 1, +); -munge($spells); -p $spells; -my $template = Template->new(); -$template->process( - \*DATA, - { - spells => $spells, +{ +my $template; +sub template { + $template //= do {local $/;<DATA>}; + return $template; +} +} + +sub sheet_2_latex { + my %opts = ( + sheet_idx => 0, fieldmap => \%fieldmap, - lt => \&latexise, - }, - $output_filename, -) + command => 'incantesimo', + @_, + ); + + my $spells = parse_table( + $wb->worksheet($opts{sheet_name}) + // $wb->worksheet($opts{sheet_idx}), + $opts{skip_col}, + ); + + munge($spells); + + my $template = Template->new(); + $template->process( + \template(), + { + spells => $spells, + fieldmap => $opts{fieldmap}, + command => $opts{command}, + lt => \&latexise, + }, + $opts{output_filename}, + ) or die $template->error; +} sub parse_table { - my ($ws) = @_; + my ($ws,$skip_col) = @_; + $skip_col //= 0; my ($min_col,$max_col) = $ws->col_range(); my ($min_row,$max_row) = $ws->row_range(); @@ -59,6 +107,7 @@ sub parse_table { $min_col .. $max_col; for my $h (@headings) { + $h =~ s{^spell\W}{}i; $h =~ s{\W.*$}{}; $h = lc($h); } @@ -67,7 +116,7 @@ sub parse_table { for my $row ((1+$min_row) .. $max_row) { # allow and skip empty rows - next unless eval { $ws->get_cell($row,$min_col)->value }; + next unless eval { $ws->get_cell($row,$min_col+$skip_col)->value }; my %record; keys @headings; @@ -112,8 +161,8 @@ __DATA__ \matrix { [% FOREACH spell IN spells %] -\incantesimo{type=spell, -[%- FOREACH field IN fieldmap; IF spell.item(field.key) %] +\[% command %]{ +[%- FOREACH field IN fieldmap; IF spell.item(field.key) != '' %] [% field.value %]={[% lt(spell.item(field.key)) %]}, [%- END; END %] } [% IF (loop.count() % 6) %]& [% ELSE %] \\ [% END -%] diff --git a/incantesimi/incantesimi.cmd.tex b/incantesimi/incantesimi.cmd.tex index b2e6146..b294498 100644 --- a/incantesimi/incantesimi.cmd.tex +++ b/incantesimi/incantesimi.cmd.tex @@ -5,6 +5,7 @@ \usepackage[OT1]{fontenc} \usepackage{pgfkeys} \usepackage{tikz} +\usepackage{ifthen} \usetikzlibrary{calc} \usetikzlibrary{shapes.multipart} @@ -29,7 +30,9 @@ %\fontseries{c}\fontshape{sc} -\tikzstyle{carta}=[rectangle,minimum width=4.8cm,minimum height=7cm,outer sep=0,use as bounding box] +\tikzstyle{carta}=[rectangle,minimum width=4.8cm,minimum height=7cm,outer sep=0,use as bounding box +% ,ultra thin,draw %uncomment to show card boxes! +] \tikzstyle{title label}=[rectangle,text=blue!80!green!75!black,minimum height=2\baselineskip,font={\small},inner sep=1mm,text width=4.6cm,align=flush center] @@ -45,7 +48,7 @@ \tikzstyle{angles label}=[rectangle split,rectangle split parts=2,rectangle split part align=left,text=blue!50!black,font=\tiny,align=justify] -\tikzstyle{prep label}=[rectangle split,rectangle split parts=2,rectangle split part align=left,draw,ultra thin,minimum width=0.333*4.8cm,text=yellow!10!black,inner xsep=0.1em,inner ysep=0.29em,font={\it\tiny}]%inner ysep is set to have 7mm overall heigh +\tikzstyle{prep label}=[rectangle split,rectangle split parts=2,rectangle split part align=left,draw,ultra thin,minimum width=0.333*4.8cm,text=yellow!10!black,inner xsep=0.1em,inner ysep=0.293em,font={\it\tiny}]%inner ysep is set to have 7mm overall heigh %%%% @@ -57,19 +60,23 @@ \tikzset{/spells/note/.initial={}} \tikzset{/spells/ref/.initial={}} \tikzset{/spells/tempo/.initial={1 a}} +\tikzset{/spells/tempostr/.initial={}} \tikzset{/spells/level/.initial={Must be passed in}} +\tikzset{/spells/levelstr/.initial={}} \tikzset{/spells/name/.initial={Must be passed in}} \tikzset{/spells/scuola/.initial={Must be passed in}} +\tikzset{/spells/source/.initial={Must be passed in}} \tikzset{/spells/durata/.initial={Must be passed in}} \tikzset{/spells/components/.initial={Must be passed in}} +\tikzset{/spells/uses/.initial={Must be passed in}} \tikzset{/spells/descrizione/.initial={Must be passed in}} \tikzset{/spells/target/.initial={Must be passed in}} \tikzset{/spells/range/.initial={Must be passed in}} -\newcommand{\incantesimo}[1]{% +\newcommand{\spellcard}[1]{% %\begin{scope}[every node/.style={draw,ultra thin},/spells/.cd,#1] \begin{scope}[/spells/.cd,#1] -\node[carta,ultra thin,draw] (card) {}; +\node[carta] (card) {}; % titolo \node [anchor=north,title label] (name) at (card.north) @@ -83,34 +90,37 @@ \node [anchor=south,prep label] (prep) at (card.south) {Prep:\nodepart{two}Used:}; -%angolo sud ovest -\node [anchor=south west,angles label] - (st) at (card.south west) - {\textsc{ST:}\nodepart{two}\textsc{\pgfkeysvalueof{/spells/st}}}; - +%lato sud ovest \node [anchor=south west,above angles label] (durata) at (card.west |- prep.north) {\textsf{Duration: \pgfkeysvalueof{/spells/durata}}}; -%angolo sud est -\node [anchor=south east,angles label] (sr) at (card.south east) - {\textsc{SR:}\nodepart{two}\textsc{\pgfkeysvalueof{/spells/sr}}}; - +%lato sud est \node [anchor=south east,above angles label] (tempo) at (card.east |- prep.north) - {\textsf{CT: \pgfkeysvalueof{/spells/tempo}}}; + {\pgfkeysvalueof{/spells/tempostr}}; -%lato sud est \node [anchor=north east,side label] (ref) at ($(tempo.north east) + (0,3mm)$) {\pgfkeysvalueof{/spells/ref}}; +%angolo sud ovest +\node [anchor=south west,angles label] (sr) at (card.south west) + {\textsc{SR:}\nodepart{two}\textsc{\pgfkeysvalueof{/spells/sr}}}; + +%angolo sud est +\node [anchor=south east,angles label] (st) at (card.south east) + {\textsc{ST:}\nodepart{two}\textsc{\pgfkeysvalueof{/spells/st}}}; + %sottotitoli -\node [anchor=north east,align=flush right,rectangle,subt label] (scuola) at (type.south west) - {\emph{\pgfkeysvalueof{/spells/scuola}}}; +\node [anchor=north east,align=flush right,rectangle,subt label] (source) at (type.south west) + {\emph{\pgfkeysvalueof{/spells/source}}}; -\node [anchor=north west,rectangle split,rectangle split parts=2,rectangle split part align={left,flushright},subt label] - (components) at ($(scuola.south -| card.west) - (0mm,0mm)$) - {\textsc{\pgfkeysvalueof{/spells/components}}\nodepart{two}{\tiny\pgfkeysvalueof{/spells/specialcomp}}}; +\node [anchor=north west,subt label,align=left] + (components) at ($(source.south -| card.west) - (0mm,0mm)$) + {\textsc{\pgfkeysvalueof{/spells/components}}}; +\node [anchor=north west,subt label,align=flush right] + (specialcomp) at (components.south west) + {\tiny\pgfkeysvalueof{/spells/specialcomp}}; %centro @@ -122,15 +132,29 @@ % sopra il centro \node [anchor=south west,trg label=flush left] (target) at ($(description.north west) + (0,1mm)$) - {{\scriptsize{}Target/Effect/Area:}\\{\slshape\pgfkeysvalueof{/spells/target}}}; + {{\tiny{}Target/Effect/Area:}\\{\slshape\pgfkeysvalueof{/spells/target}}}; \node [anchor=south east,trg label=flush right] (range) at (target.north -| type.south) - {{\scriptsize{}Range:} \textnormal{\itshape\pgfkeysvalueof{/spells/range}}}; + {{\tiny{}Range:} \textnormal{\itshape\pgfkeysvalueof{/spells/range}}}; %lato est \node [anchor=north west,side label] (lvl) at ($0.8*(card.east)+0.2*(card.north east)$) - {\textsc{lvl \pgfkeysvalueof{/spells/level}}}; + {\textbf{\pgfkeysvalueof{/spells/levelstr}}}; \end{scope}% } + +\newcommand{\incantesimo}[1]{% +\pgfkeys{/spells/.cd,#1}\spellcard{type=spell, + tempostr={CT: \pgfkeysvalueof{/spells/tempo}}, + source={\pgfkeysvalueof{scuola}}, + levelstr={LVL \pgfkeysvalueof{/spells/level}}, +}} + +\newcommand{\potere}[1]{% +\pgfkeys{/spells/.cd,level={},type=special,#1}\spellcard{ + tempostr={AT: \pgfkeysvalueof{/spells/tempo}}, + components={\pgfkeysvalueof{/spells/uses}}, + levelstr={\ifthenelse{\equal{\pgfkeysvalueof{/spells/level}}{}}{}{EqvLvl~\pgfkeysvalueof{/spells/level}}} +}} diff --git a/incantesimi/incantesimi.example.tex b/incantesimi/incantesimi.example.tex index 91a5811..009e1b7 100644 --- a/incantesimi/incantesimi.example.tex +++ b/incantesimi/incantesimi.example.tex @@ -1,5 +1,4 @@ \input{incantesimi.cmd} -%\input{incantesimi.cmd.other} \begin{document} % @@ -10,41 +9,41 @@ \incantesimo{type=spell-like, scuola={Enchantment (Charm) [LD, MA, Sonic]}, st={Fort half (HO)}, - tempo=15m, + tempo=15 m, name=Regenerate Moderate Wounds, level=9, sr={Yes (HO)}, - durata={30m / disch}, + durata={30 m or until disch.}, ref=PH289, range=medium, - target={Well shaft 10ft. diam 100 ft. deep}, + target={Well shaft 10ft.\ diam 100ft.\ deep}, components={V,S,M,F,DF,XP}, specialcomp={M: Incense; F: Payer beads (500~MO); XP: 0 or 500}, - descrizione={Fully repairs an obj. up to 5\%/2L mass loss; cures 1d4 dmg to magical obj.}, - note={Reasonable command may give -1 to -4 pen. to S. T.} + descrizione={Fully repairs an object up to 5\%/2L mass loss; cures 1d4 damage to magical object.}, + note={Reasonable command may give -1 to -4 pen.\ to ST.} } & \incantesimo{type=spell-like, name={Death touch}, - %level=0, - scuola={Death domain}, + level=-, + scuola={Death domain [Death]}, components={Once per day}, %tempo=1a, range=Touch, - target={1 living creat. touched}, + target={1 living creat.\ touched}, durata=Instantaneous, %st, sr=Yes, - descrizione={If touched creat. has less than 1d6/CL hp dies.}, + descrizione={If touched creature has less than 1d6 per cleric level hit points dies.}, ref=PH163, % note } & \incantesimo{type=Supernatural,scuola=scuola a caso più altra roba in giro,name=Incantesimo col nome lungooooooo,level=3, durata=1/L m,range=Touch,target=you,components={V,S,M},specialcomp={M:tanta roba costosa da accendere (5000~MO)}, descrizione={+2 Defl AC/Resist. saves, counter mind control, hedge out elemental/outsiders.}} & -\incantesimo{scuola=scuola a caso,name=Incantesimo col nome lungo a a a a,level=1, +\incantesimo{scuola=scuola a caso,name=Incantesimo col nome l u n g o o o o,level=1, durata=Inst,range=touch,target=you,components={V,S}, descrizione={blah blah blah}, - note={Bigger ones can pass after Will save with 2d6 dmg.}} & + note={Bigger ones can pass after Will save with 2d6 damage.}} & \incantesimo{scuola=scuola a caso,name=Incantesimo col nome lungo,level=1, durata=Inst,range=touch,target=you,components={V,S}, descrizione={blah blah blah}}& @@ -52,13 +51,13 @@ durata=Inst,range=touch,target=you,components={V,S}, descrizione={blah blah blah}} \\ -\incantesimo{scuola=scuola a caso,name=Incantesimo col nome lungo,level=1, +\incantesimo{scuola=scuola a caso,name=Insect Plague,level=1, durata=Inst,range=touch,target=you,components={V,S},specialcomp={M: Incense; F: Prayer bead (500~MO)}, descrizione={blah blah blah}} & -\incantesimo{scuola=scuola a caso,name=Incantesimo col nome lungo,level=1, +\incantesimo{scuola=scuola a caso,name=Disintegrate,level=1, durata=Inst,range=touch,target=you,components={V,S}, descrizione={blah blah blah}} & -\incantesimo{scuola=scuola a caso,name=Incantesimo col nome lungo,level=1, +\incantesimo{scuola=scuola a caso,name=Lesser Planar Ally,level=1, durata=Inst,range=touch,target=you,components={V,S}, descrizione={blah blah blah}} & \incantesimo{scuola=scuola a caso,name=Incantesimo col nome lungo,level=1, @@ -71,13 +70,13 @@ durata=Inst,range=touch,target=you,components={V,S}, descrizione={blah blah blah}} \\ -\incantesimo{scuola=scuola a caso,name=Incantesimo col nome lungo,level=1, +\incantesimo{scuola=scuola a caso,name=Undetectable Alignment,%level=1, durata=Inst,range=touch,target=you,components={V,S}, descrizione={blah blah blah}} & -\incantesimo{scuola=scuola a caso,name=Incantesimo col nome lungo,level=1, +\incantesimo{scuola=scuola a caso,name=Magic Circle against Law,level=1, durata=Inst,range=touch,target=you,components={V,S}, descrizione={blah blah blah}} & -\incantesimo{scuola=scuola a caso,name=Incantesimo col nome lungo,level=1, +\incantesimo{scuola=scuola a caso,name=Remove Blindness/Deafness,level=1, durata=Inst,range=touch,target=you,components={V,S}, descrizione={blah blah blah}} & \incantesimo{scuola=scuola a caso,name=Incantesimo col nome lungo,level=1, diff --git a/incantesimi/incantesimi.prep.tex b/incantesimi/incantesimi.prep.tex index 9df1015..b7b3aeb 100644 --- a/incantesimi/incantesimi.prep.tex +++ b/incantesimi/incantesimi.prep.tex @@ -1,170 +1,170 @@ - -\documentclass[a4paper,10pt,landscape]{article} -\usepackage[empty,cm]{fullpage} -\usepackage[latin1]{inputenc} -\usepackage[italian,english]{babel} -\usepackage[OT1]{fontenc} -\usepackage{pgfkeys} -\usepackage{tikz} -\usetikzlibrary{calc} -\usetikzlibrary{matrix} -\usetikzlibrary{shapes.multipart} - -%%%% fullpage -\setlength{\headheight}{0pt} -\setlength{\headsep}{0pt} -\setlength{\footskip}{0pt} -\setlength{\textwidth}{\paperwidth} -\setlength{\oddsidemargin}{-2.68cm} -\setlength{\evensidemargin}{\oddsidemargin} -\setlength{\textheight}{1.1\paperheight} -\setlength{\topmargin}{0pt} -\addtolength{\topmargin}{-2.68cm} -\addtolength{\oddsidemargin}{0.45cm} % per centrare le etichette -\addtolength{\evensidemargin}{0.45cm} % per centrare le etichette -%%%% -\setlength{\parindent}{0pt} - -%%%% -\newlength{\cardtextwidth} -\setlength{\cardtextwidth}{4.33cm} - -\newcounter{lvl} - -%\fontseries{c}\fontshape{sc} - -\tikzstyle{carta}=[rectangle,minimum width=4.8cm,minimum height=7cm,inner sep=0pt,outer sep=0,use as bounding box] - -\tikzstyle{prep label}=[rectangle split,rectangle split parts=2,rectangle split part align=left,draw,ultra thin,minimum width=0.333*4.8cm,text=yellow!10!black,inner xsep=0.1em,inner ysep=0.293em,font={\it\tiny},outer sep=0pt]%inner ysep is set to have 7mm overall heigh - -\tikzstyle{spells}=[rectangle,anchor=center,minimum width=1.5cm,minimum height=5mm,font={\footnotesize},text=#1] - -\tikzstyle{ranges}=[anchor=south,rectangle split,rectangle split parts=2,rectangle split part align=center,% - /pgf/number format/int detect,font={\sffamily\footnotesize},text=red!70!blue!90!yellow,] - -\newcommand{\preptext}[1]{% - \node[anchor=north west,prep label] at #1 {Prep:\nodepart{two}Used:};% -} - -\newcommand{\prepcard}{% - % - \node[carta] (card) {}; - % - \foreach \x in {0,1,2} - \foreach \y in {0,...,9} - { - \preptext{($(card.north west)+(\x*1.6cm,-\y*0.7cm)$)} - } - % - \draw[white,thin] (card.north west) rectangle (card.south east); - % -} - -\newcommand{\printRoman}{ - \ifnum \value{lvl} = 0 - \textsc{Orisons} - \else - \Roman{lvl} - \fi -} - -\newcommand{\closerange}[1]{ - \pgfmathparse{25+5*floor(#1/2)} - \pgfmathprintnumber{\pgfmathresult} -} -% -\newcommand{\mediumrange}[1]{ - \pgfmathparse{100+(10*#1)} - \pgfmathprintnumber{\pgfmathresult} -} -\newcommand{\longrange}[1]{ - \pgfmathparse{400+(40*#1)} - \pgfmathprintnumber{\pgfmathresult} -} - -\newcommand{\mydepth}{\rule[-0.2em]{0pt}{1mm}} - -\newcommand{\spellatlvl}[5]{% - \setcounter{lvl}{#1} - \path #2 - node[spells=red!#5!black] {\printRoman} - ++(1.5cm,0) - node[spells=green!75!black!#5!black] {#3} - ++(1.5cm,0) - node[spells=blue!#5!black] {\pgfmathprintnumber{#4}}; -} - -\newcommand{\spellscard}[3]{% takes rel ability bonus, castel lvl, and a list of 10 spells_per_day -\begin{scope} - % - \node[carta] (card) {}; - % titles - \path (card.north west) ++(0.9cm,-0.5cm) - node[spells=blue!80!green!75!black,font={\scshape\footnotesize}] (lvltl) {Level} - ++(1.5cm,0) - node[spells=blue!80!green!75!black,font={\scshape\footnotesize}] {Per day} - ++(1.5cm,0) - node[spells=blue!80!green!75!black,font={\scshape\footnotesize}] {ST DC}; - % spells - \foreach \n [count=\x from 0,evaluate=\x as \dc using 10+#1+\x,evaluate=\x as \shd using 85-7*\x,/pgf/number format/int detect] in #3 - { - \spellatlvl{\x}{($(lvltl.center)-(0,6mm+\x*5mm)$)}{\n}{\dc}{\shd} - } - % ranges - \path (card.south -| lvltl.center) - node[ranges] (close) - {Close:\mydepth\nodepart{two}\closerange{#2} ft.\mydepth} - ++(1.5cm,0) - node[ranges] (medium) - {Medium:\mydepth\nodepart{two}\mediumrange{#2} ft.\mydepth} - ++(1.5cm,0) - node[ranges] (long) - {Long:\mydepth\nodepart{two}\longrange{#2} ft.\mydepth}; - % - \draw[thin,green!20!black] (close.north) ++(2mm,2pt) -- ++(1.1cm,0) ++(4mm,0) -- ++(1.1cm,0); - % - % \draw[red,thin] (card.north west) rectangle (card.south east); - % -\end{scope} -} - -\begin{document} -% -\begin{tikzpicture} -\matrix[ampersand replacement=\&] { - % Necrist current - \spellscard{4}{12}{{6,4+1+1,4+1+1,3+1+1,3+1+1,2+0+1,-,-,-,-}}\& - % - \prepcard\&\prepcard\&\prepcard\&\prepcard\&\prepcard\\ - % Necrist next - \spellscard{4}{13}{{6,5+1+1,4+1+1,4+1+1,3+1+1,2+0+1,1+0+1,-,-,-}}\& - % - \prepcard\&\prepcard\&\prepcard\&\prepcard\&\prepcard\\ - % Necrist plus - \spellscard{5}{13}{{6,5+1+1,4+1+1,4+1+1,3+1+1,2+0+1,1+0+1,-,-,-}}\& - % - \prepcard\&\prepcard\&\prepcard\&\prepcard\&\prepcard\\ -}; -% -\end{tikzpicture} -\pagebreak - -\begin{tikzpicture} -\matrix[ampersand replacement=\&] { - % Ariel current - \spellscard{4}{9}{{6,4+1+1,4+1+1,3+1+1,2+1+1,1+0+1,-,-,-,-}}\& - % - \prepcard\&\prepcard\&\prepcard\&\prepcard\&\prepcard\\ - % Ariel next - \spellscard{4}{10}{{6,4+1+1,4+1+1,3+1+1,3+1+1,2+0+1,-,-,-,-}}\& - % - \prepcard\&\prepcard\&\prepcard\&\prepcard\&\prepcard\\ - % Ariel plus - \spellscard{5}{10}{{6,4+1+1,4+1+1,3+1+1,3+1+1,2+0+1,-,-,-,-}}\& - % - \prepcard\&\prepcard\&\prepcard\&\prepcard\&\prepcard\\ -}; -% -\end{tikzpicture} -% -\end{document} +
+\documentclass[a4paper,10pt,landscape]{article}
+\usepackage[empty,cm]{fullpage}
+\usepackage[latin1]{inputenc}
+\usepackage[italian,english]{babel}
+\usepackage[OT1]{fontenc}
+\usepackage{pgfkeys}
+\usepackage{tikz}
+\usetikzlibrary{calc}
+\usetikzlibrary{matrix}
+\usetikzlibrary{shapes.multipart}
+
+%%%% fullpage
+\setlength{\headheight}{0pt}
+\setlength{\headsep}{0pt}
+\setlength{\footskip}{0pt}
+\setlength{\textwidth}{\paperwidth}
+\setlength{\oddsidemargin}{-2.68cm}
+\setlength{\evensidemargin}{\oddsidemargin}
+\setlength{\textheight}{1.1\paperheight}
+\setlength{\topmargin}{0pt}
+\addtolength{\topmargin}{-2.68cm}
+\addtolength{\oddsidemargin}{0.45cm} % per centrare le etichette
+\addtolength{\evensidemargin}{0.45cm} % per centrare le etichette
+%%%%
+\setlength{\parindent}{0pt}
+
+%%%%
+\newlength{\cardtextwidth}
+\setlength{\cardtextwidth}{4.33cm}
+
+\newcounter{lvl}
+
+%\fontseries{c}\fontshape{sc}
+
+\tikzstyle{carta}=[rectangle,minimum width=4.8cm,minimum height=7cm,inner sep=0pt,outer sep=0,use as bounding box]
+
+\tikzstyle{prep label}=[rectangle split,rectangle split parts=2,rectangle split part align=left,draw,ultra thin,minimum width=0.333*4.8cm,text=yellow!10!black,inner xsep=0.1em,inner ysep=0.293em,font={\it\tiny},outer sep=0pt]%inner ysep is set to have 7mm overall heigh
+
+\tikzstyle{spells}=[rectangle,anchor=center,minimum width=1.5cm,minimum height=5mm,font={\footnotesize},text=#1]
+
+\tikzstyle{ranges}=[anchor=south,rectangle split,rectangle split parts=2,rectangle split part align=center,%
+ /pgf/number format/int detect,font={\sffamily\footnotesize},text=red!70!blue!90!yellow,]
+
+\newcommand{\preptext}[1]{%
+ \node[anchor=north west,prep label] at #1 {Prep:\nodepart{two}Used:};%
+}
+
+\newcommand{\prepcard}{%
+ %
+ \node[carta] (card) {};
+ %
+ \foreach \x in {0,1,2}
+ \foreach \y in {0,...,9}
+ {
+ \preptext{($(card.north west)+(\x*1.6cm,-\y*0.7cm)$)}
+ }
+ %
+ \draw[white,thin] (card.north west) rectangle (card.south east);
+ %
+}
+
+\newcommand{\printRoman}{
+ \ifnum \value{lvl} = 0
+ \textsc{Orisons}
+ \else
+ \Roman{lvl}
+ \fi
+}
+
+\newcommand{\closerange}[1]{
+ \pgfmathparse{25+5*floor(#1/2)}
+ \pgfmathprintnumber{\pgfmathresult}
+}
+%
+\newcommand{\mediumrange}[1]{
+ \pgfmathparse{100+(10*#1)}
+ \pgfmathprintnumber{\pgfmathresult}
+}
+\newcommand{\longrange}[1]{
+ \pgfmathparse{400+(40*#1)}
+ \pgfmathprintnumber{\pgfmathresult}
+}
+
+\newcommand{\mydepth}{\rule[-0.2em]{0pt}{1mm}}
+
+\newcommand{\spellatlvl}[5]{%
+ \setcounter{lvl}{#1}
+ \path #2
+ node[spells=red!#5!black] {\printRoman}
+ ++(1.5cm,0)
+ node[spells=green!75!black!#5!black] {#3}
+ ++(1.5cm,0)
+ node[spells=blue!#5!black] {\pgfmathprintnumber{#4}};
+}
+
+\newcommand{\spellscard}[3]{% takes rel ability bonus, castel lvl, and a list of 10 spells_per_day
+\begin{scope}
+ %
+ \node[carta] (card) {};
+ % titles
+ \path (card.north west) ++(0.9cm,-0.5cm)
+ node[spells=blue!80!green!75!black,font={\scshape\footnotesize}] (lvltl) {Level}
+ ++(1.5cm,0)
+ node[spells=blue!80!green!75!black,font={\scshape\footnotesize}] {Per day}
+ ++(1.5cm,0)
+ node[spells=blue!80!green!75!black,font={\scshape\footnotesize}] {ST DC};
+ % spells
+ \foreach \n [count=\x from 0,evaluate=\x as \dc using 10+#1+\x,evaluate=\x as \shd using 85-7*\x,/pgf/number format/int detect] in #3
+ {
+ \spellatlvl{\x}{($(lvltl.center)-(0,6mm+\x*5mm)$)}{\n}{\dc}{\shd}
+ }
+ % ranges
+ \path (card.south -| lvltl.center)
+ node[ranges] (close)
+ {Close:\mydepth\nodepart{two}\closerange{#2} ft.\mydepth}
+ ++(1.5cm,0)
+ node[ranges] (medium)
+ {Medium:\mydepth\nodepart{two}\mediumrange{#2} ft.\mydepth}
+ ++(1.5cm,0)
+ node[ranges] (long)
+ {Long:\mydepth\nodepart{two}\longrange{#2} ft.\mydepth};
+ %
+ \draw[thin,green!20!black] (close.north) ++(2mm,2pt) -- ++(1.1cm,0) ++(4mm,0) -- ++(1.1cm,0);
+ %
+ % \draw[red,thin] (card.north west) rectangle (card.south east);
+ %
+\end{scope}
+}
+
+\begin{document}
+%
+\begin{tikzpicture}
+\matrix[ampersand replacement=\&] {
+ % Necrist current
+ \spellscard{4}{12}{{6,4+1+1,4+1+1,3+1+1,3+1+1,2+0+1,-,-,-,-}}\&
+ %
+ \prepcard\&\prepcard\&\prepcard\&\prepcard\&\prepcard\\
+ % Necrist next
+ \spellscard{4}{13}{{6,5+1+1,4+1+1,4+1+1,3+1+1,2+0+1,1+0+1,-,-,-}}\&
+ %
+ \prepcard\&\prepcard\&\prepcard\&\prepcard\&\prepcard\\
+ % Necrist plus
+ \spellscard{5}{13}{{6,5+1+1,4+1+1,4+1+1,3+1+1,2+0+1,1+0+1,-,-,-}}\&
+ %
+ \prepcard\&\prepcard\&\prepcard\&\prepcard\&\prepcard\\
+};
+%
+\end{tikzpicture}
+\pagebreak
+
+\begin{tikzpicture}
+\matrix[ampersand replacement=\&] {
+ % Ariel current
+ \spellscard{4}{9}{{6,4+1+1,4+1+1,3+1+1,2+1+1,1+0+1,-,-,-,-}}\&
+ %
+ \prepcard\&\prepcard\&\prepcard\&\prepcard\&\prepcard\\
+ % Ariel next
+ \spellscard{4}{10}{{6,4+1+1,4+1+1,3+1+1,3+1+1,2+0+1,-,-,-,-}}\&
+ %
+ \prepcard\&\prepcard\&\prepcard\&\prepcard\&\prepcard\\
+ % Ariel plus
+ \spellscard{5}{10}{{6,4+1+1,4+1+1,3+1+1,3+1+1,2+0+1,-,-,-,-}}\&
+ %
+ \prepcard\&\prepcard\&\prepcard\&\prepcard\&\prepcard\\
+};
+%
+\end{tikzpicture}
+%
+\end{document}
|