diff --git a/.gitignore b/.gitignore index ef91df0..4ec3448 100644 --- a/.gitignore +++ b/.gitignore @@ -6,5 +6,6 @@ changelist.txt *.png *.d +outputs/** Console. Python-Fu diff --git a/Makefile b/Makefile index 6abb35b..8c925b2 100644 --- a/Makefile +++ b/Makefile @@ -115,11 +115,16 @@ export: outputs/purple.png outputs/green.png outputs/orange.png outputs/yellow.p export: outputs/box[top].png outputs/box[bottom].png %.pdf: %.tex - xelatex -interaction=batchmode -halt-on-error --output-directory=$(@D) $^ + $(XELATEX) -interaction=batchmode -halt-on-error --shell-escape --output-directory=$(@D) $< echo "$@" >> changelist.txt rm $*.aux rm $*.log +instructions.pdf: cards/dogs/husky0.png + +cards/dogs/husky0.png: cards/dogs/husky0.pdf + $(PDFTOPPM) -scale-to-x 750 -scale-to-y 1050 -png $< > $@ + force-make: clean: @@ -129,6 +134,8 @@ clean: -find outputs -name '*.pdf' -delete -find outputs -name '*].png' -delete -find outputs -name '*.d' -delete + -find . -name '*.aux' -delete + -find . -name '*.log' -delete print-% : ; @echo $* = $($*) diff --git a/cards/dogs/husky0.tex b/cards/dogs/husky0.tex new file mode 100644 index 0000000..29cc370 --- /dev/null +++ b/cards/dogs/husky0.tex @@ -0,0 +1,5 @@ +\documentclass{iditacard} + +\deck{starter} + +\input{cards/dogs/husky.tex} diff --git a/cards/info/attack_summary.tex b/cards/info/attack_summary.tex index 33bf0c4..df87009 100644 --- a/cards/info/attack_summary.tex +++ b/cards/info/attack_summary.tex @@ -7,13 +7,7 @@ \begin{document} \begin{card} \art{deck_summary.png} - \utilcount{22} - \dogcount{5} - \movecount{6} - \foodcount{4} - \attachcount{2} - \personalcount{0} - \sledcount{14} + \input|"./deckinfo.sh attack" \name{Reckless Deck} \text{Recklessly stuff your deck and stop at nothing to win!} \flava{Play nice.} diff --git a/deckinfo.sh b/deckinfo.sh new file mode 100755 index 0000000..d61d30a --- /dev/null +++ b/deckinfo.sh @@ -0,0 +1,73 @@ +#!/bin/bash + +WHICH_DECK=$1 + +DECKLIST=$(cat cards/decks/$WHICH_DECK.txt | sed 's/pdf/tex/g') + +UTIL_COUNT=$(echo "$DECKLIST" | grep '/util/' | wc -l) +DOG_COUNT=$(echo "$DECKLIST" | grep '/dogs/' | wc -l) +MOVE_COUNT=$(echo "$DECKLIST" | grep '/movement/' | wc -l) +FOOD_COUNT=$(echo "$DECKLIST" | grep '/food/' | wc -l) +ATTACH_COUNT=$(echo "$DECKLIST" | grep '/attachments/' | wc -l) +PERSONAL_COUNT=$(echo "$DECKLIST" | grep '/personal/' | wc -l) +SLED_COUNT=$(echo "$DECKLIST" | grep '/sleds/' | wc -l) + +ENERGIES= +HEALTHS= +RISKS= + +for CARD in $DECKLIST; do + if grep --quiet '\energy' $CARD; then + ENERGIES="$ENERGIES $(grep '\energy' $CARD | tr -dc '0-9')" + else + ENERGIES="$ENERGIES 0" + fi + + if grep --quiet '\health' $CARD; then + HEALTHS="$HEALTHS $(grep '\health' $CARD | tr -dc '0-9')" + else + HEALTHS="$HEALTHS 0" + fi + + if grep --quiet '\risk' $CARD; then + RISKS="$RISKS $(grep '\risk' $CARD | tr -dc '0-9')" + else + RISKS="$RISKS 0" + fi +done + +AVG_ENERGY=$(echo "$ENERGIES" | awk '{s+=$1}END{print s/NR}' RS=" ") +AVG_HEALTH=$(echo "$HEALTHS" | awk '{s+=$1}END{print s/NR}' RS=" ") +AVG_RISK=$(echo "$RISKS" | awk '{s+=$1}END{print s/NR}' RS=" ") + +ENERGY_POINTS=$(echo "$ENERGIES" | tr ' ' '\n' | sed '/^\s*$/d' | sort -n | uniq -c) +HEALTH_POINTS=$(echo "$HEALTHS" | tr ' ' '\n' | sed '/^\s*$/d' | sort -n | uniq -c) +RISK_POINTS=$(echo "$RISKS" | tr ' ' '\n' | sed '/^\s*$/d' | sort -n | uniq -c) + + +echo "\utilcount{$UTIL_COUNT}" +echo "\dogcount{$DOG_COUNT}" +echo "\movecount{$MOVE_COUNT}" +echo "\foodcount{$FOOD_COUNT}" +echo "\attachcount{$ATTACH_COUNT}" +echo "\personalcount{$PERSONAL_COUNT}" +echo "\sledcount{$SLED_COUNT}" +echo "%\avgenergy{$AVG_ENERGY}" +echo "%\avghealth{$AVG_HEALTH}" +echo "%\avgrisk{$AVG_RISK}" + +echo "\begin{costcounts}" + +echo "\energycounts{" +echo "$ENERGY_POINTS" | awk '{print "(" $2 "," $1 ") "}' +echo "}" + +echo "\healthcounts{" +echo "$HEALTH_POINTS" | awk '{print "(" $2 "," $1 ") "}' +echo "}" + +echo "\riskcounts{" +echo "$RISK_POINTS" | awk '{print "(" $2 "," $1 ") "}' +echo "}" + +echo "\end{costcounts}" diff --git a/ideas b/ideas index 14de3cb..6bcb0a4 100644 --- a/ideas +++ b/ideas @@ -1,3 +1,7 @@ +Consider more player count? 6? 7? + Red/Green/Blue/Purple/Black/White/(orange/yellow) +Cubes instead of disks (smaller) + Back to old personal cards (shuffle unused back in) Consider allowing to draw undestroyed? @@ -91,7 +95,7 @@ Fertile Soil (1,0): Food removes your starvation. Winery (0,1) : Personal cards remove your hypothermia. (Nice warm mead) University (0,1): Health costs are -1 Lowlands (0,1): Energy costs are -1 -Dump (0,1) : You may destroy cards from your hand +Dump (0,1) : You may destroy cards from your hand Scrapyard (1,0): Take +1/+1 (everything ripe for the picking) Rank 4 diff --git a/iditaboard.png b/iditaboard.png index 23a3ccb..91f03a6 100644 Binary files a/iditaboard.png and b/iditaboard.png differ diff --git a/iditaboard.xcf b/iditaboard.xcf index eb10150..25472bd 100644 Binary files a/iditaboard.xcf and b/iditaboard.xcf differ diff --git a/iditacard.cls b/iditacard.cls index 7ffcfc2..e120b98 100644 --- a/iditacard.cls +++ b/iditacard.cls @@ -10,8 +10,11 @@ \RequirePackage{tikz} \usetikzlibrary{positioning,shapes,shadows,arrows,backgrounds,fit} +\RequirePackage{pgfplots} \RequirePackage{shapepar} \RequirePackage{microtype} +\RequirePackage{mathtools} +\let\mttext\text \graphicspath{{images/}} @@ -77,6 +80,24 @@ \node [text=white, minimum width=0.5in, minimum height=0.5in, text centered, text width=0.5in, anchor=center, inner sep=0mm] at (125.0/300.0, 538.0/300.0) {\bf\fontsize{25}{30}\bebas #1}; } +\newenvironment{costcounts} +{% Begin +\begin{axis}[at={(300,350)}, + y axis line style={draw=none}, + tick style={draw=none}, + width=1in, + height=1in, + yticklabels={,,}, + enlargelimits=0.05, + ybar interval=1.0] +} +{% End +\end{axis}} + +\newcommand{\energycounts}[1]{\addplot[draw=none,fill=energy] coordinates {#1};} +\newcommand{\healthcounts}[1]{\addplot[draw=none,fill=health] coordinates {#1};} +\newcommand{\riskcounts}[1]{\addplot[draw=none,fill=risk] coordinates {#1};} + \newcommand{\@condcost}[2]{\ifnum 0<#1#2\fi} \newcommand{\costs}[3]{% \@condcost{#1}{\energy{#1}}% @@ -89,7 +110,7 @@ \node [rectangle, anchor=north, minimum width=2.15in, minimum height=2.0/3.0in, text centered, text width=1.833333in, inner sep=0mm] at (375.0/300.0,975.0/300.0) {\bf\fontsize{20}{30}\bebas#1\par}; } -\newcommand{\text}[1]{% +\renewcommand{\text}[1]{% % add draw to the node to see its box \node [rectangle, minimum width=1.833333in, minimum height=200.0/300.0, text centered, text width=1.833333in, inner sep=0mm, anchor=north] at (375.0/300.0,450.0/300) {\fontsize{16}{16}\bebas#1\par}; } @@ -141,18 +162,22 @@ \node [anchor=center] at (536.0/300.0, 603.0/300.0) {#1}; } +\newcommand{\useicon}[1]{\raisebox{-0.1em}{\includegraphics[height=1em]{icons/#1.png}}} +\newcommand{\upto}[1]{$\xrightarrow{\mttext{up to #1}}$} +\newcommand{\sendto}[1]{$\xrightarrow{\mttext{#1}}$} + \newcommand{\Mm}{Mm} \newcommand{\Mms}{Mms} -\newcommand{\move}[1]{\raisebox{-0.2em}{\includegraphics[height=1em]{icons/dog-sled-icon.png}} #1} -\newcommand{\destroy}[2]{\raisebox{-0.1em}{\includegraphics[height=1em]{icons/card-pickup.png}} #2 \raisebox{-0.1em}{\includegraphics[height=1em]{icons/trash-can.png}} #1} -\newcommand{\take}[2]{\raisebox{-0.1em}{\includegraphics[height=1em]{icons/backpack.png}} #2 \raisebox{-0.1em}{\includegraphics[height=1em]{icons/shopping-cart.png}} #1} -\newcommand{\draw}[1]{\raisebox{-0.1em}{\includegraphics[height=1em]{icons/card-draw.png}} #1} -\newcommand{\daydraw}[1]{\raisebox{-0.1em}{\includegraphics[height=1em]{icons/card-plus.png}} #1 \raisebox{-0.1em}{\includegraphics[height=1em]{icons/solar-time.png}}} +\newcommand{\move}[1]{\raisebox{-0.1em}{\useicon{dog-sled-icon}} #1} +\newcommand{\destroy}[2]{\useicon{magnifying-glass} #2 \useicon{card} \upto{#1} \useicon{trash-can}} % Destroy up to #1 of #2 +\newcommand{\take}[2]{\useicon{card} \sendto{#2} \useicon{backpack} \upto{#1} \useicon{shopping-cart}} +\newcommand{\draw}[1]{\useicon{card-draw} #1} +\newcommand{\daydraw}[1]{\useicon{card-plus} #1 \useicon{solar-time}} \newcommand{\personal}{{\color{personal}personal}} \newcommand{\sled}{{\color{sled}sled}} -\newcommand{\hypothermia}{\raisebox{-0.1em}{\includegraphics[height=1em]{icons/hypo.png}}} -\newcommand{\starvation}{\raisebox{-0.1em}{\includegraphics[height=1em]{icons/starve.png}}} -\newcommand{\speed}[1]{\raisebox{-0.1em}{\includegraphics[height=1em]{icons/speed.png}}#1} +\newcommand{\hypothermia}{\useicon{hypo}} +\newcommand{\starvation}{\useicon{starve}} +\newcommand{\speed}[1]{\useicon{speed}#1} \newcommand{\raw}[1]{% \node [rectangle, minimum width=650.0/300.0, minimum height=950.0/300.0, text justified, text width=53mm, inner sep=1mm, anchor=north west] at (50.0/300.0,1000.0/300.0) {#1}; diff --git a/images/icons/card.xcf b/images/icons/card.xcf new file mode 100644 index 0000000..aac7cec Binary files /dev/null and b/images/icons/card.xcf differ diff --git a/images/icons/stomach.xcf b/images/icons/stomach.xcf index d621747..8b457ed 100644 Binary files a/images/icons/stomach.xcf and b/images/icons/stomach.xcf differ diff --git a/images/rules/checkpoint.xcf b/images/rules/checkpoint.xcf new file mode 100644 index 0000000..001f9fb Binary files /dev/null and b/images/rules/checkpoint.xcf differ diff --git a/instructions.tex b/instructions.tex index 754887c..a10ecb7 100644 --- a/instructions.tex +++ b/instructions.tex @@ -2,6 +2,8 @@ \usepackage[top=0.125in, bottom=0.125in, left=0.125in, right=0.125in, margin=0.125in, papersize={3.5in, 5in}]{geometry} \usepackage{xcolor} +\usepackage{parskip} +\usepackage{pdfpages} \definecolor{utility}{HTML}{FFFFFF} \definecolor{attachment}{HTML}{5FAFCF} @@ -30,6 +32,133 @@ \vfill \end{titlepage} +{\noindent\Heading\Large Overview\par} +% Your background story/recap on what situation the players are getting themselves into. It sets the scene (thematically, usually) for the entire game. + +Iditacards is a game where you race your opponents in the last great race on +earth - The Iditarod. You will face starvation, hypothermia, and inclimate +weather. You will have to keep your sled in good condition and your dogs in top +forme to come out ahead. + +The first player to cross the finish line wins! + +{\noindent\Heading\Large Components\par} +% This isn’t so important for playtesters at this point, but is important for the final rulebook and print and plays (PnP). This way players (including yourself) know whether or not there are missing pieces, or in the case of PnP players, if they have everything they need in order to play. + +This game contains many cards. They can be sorted based on the symbol in the +bottom right corner: + +\begin{itemize} + \setlength\itemsep{-1em} + \item 4 Starter Decks - \input "|cat cards/decks/starter1.txt | wc -l" cards each (\includegraphics[width=1em]{images/deck/starter1.png} \includegraphics[width=1em]{images/deck/starter2.png} \includegraphics[width=1em]{images/deck/starter3.png} \includegraphics[width=1em]{images/deck/starter4.png}) + \item 1 Legendary Deck - \input "|cat cards/decks/legendary.txt | wc -l" cards (\includegraphics[width=1em]{images/deck/legendary.png}) + \item 4 Upgrade Decks - \input "|cat cards/decks/speed.txt | wc -l" cards each (\includegraphics[width=1em]{images/deck/speed.png} \includegraphics[width=1em]{images/deck/attack.png} \includegraphics[width=1em]{images/deck/upgrade.png} \includegraphics[width=1em]{images/deck/survivor.png}) + \item 1 Damage Deck - \input "|cat cards/decks/damage.txt | wc -l" cards (\includegraphics[width=1em]{images/deck/token.png}) +\end{itemize} + +Additionally there are 32 smaller stretch cards. + +The game also contains: + +\begin{itemize} + \setlength\itemsep{-1em} + \item This manual + \item The box the game came with + \item One weather die with special symbols on it + \item Two board halves + \item 20 player tokens (5 of each colour) +\end{itemize} + +\clearpage + +{\noindent\Heading\Large Objective\par} +% What the players are trying to accomplish. It should also make it clear how players are competing (free-for-all, teams, cooperative, etc.). This is the more technical/mechanical explanation of the 'Overview'. For example: “To be the last player with multiple spaceships orbiting the black hole”. + +Every turn each player will move forward one space. The cards they play will +increase this, while the places they encounter will work to decrease it. When +the first player reaches the finish line the game ends and they win. The finish +line is the square \emph{after} the last square on the board. + +{\noindent\Heading\Large Setup\par} +% How to get the game ready for play. There shouldn’t be anything in here that mentions what components are used for or why they are important--save that for the 'Gameplay' section. Just make sure that in this section everything is laid out clearly--if diagrams are necessary (they almost always are) don’t be afraid to put those in! + +The board comes in two halves that should just be placed together to create +a continuous playing surface. + +To start the game each player must pick a colour. They take the tokens of that +colour placing one on: + +\begin{itemize} + \setlength\itemsep{-1em} + \item The starting space (\includegraphics[width=5em]{images/rules/start.png}) + \item Each 0 space (\includegraphics[width=5em]{images/rules/zeroone.png} \includegraphics[width=5em]{images/rules/zeroten.png}) + \item The healthy and warm spaces (\includegraphics[width=8em]{images/rules/health_warm.png}) +\end{itemize} + +Take the starter deck of your colour, find the \emph{Wheel Dog}, and place it +on the table in front of you. Then shuffle it and place it face down in front +of you. + +Shuffle the legendary deck and deal 5 cards from it to each player. Each player +looks at their legendary cards and leaves them face-down in front of them. + +Before starting the game everybody draws 6 cards. The first player to grab the +weather die goes first. They roll it, then take their turn. + +{\noindent\Heading\Large Gameplay\par} +% The main gameplay section tells you how the game is broken up (rounds, turns, phases, etc.) and summarizes what players do in each of those stages. This section should explain the flow of the game from start to completion. + +The game is broken into turns. Each turn you may either play a card, or take +a new day. At the end of your turn you move 1 myriameter (1 square). After you +finish moving the player to your left begins their turn. + +During gameplay you will often discard cards. It is important to note that +discarded cards will be returned to your deck frequently. This is in contrast +to destroyed cards which are removed from the game permanently. + +% Once that’s done, you go into the gameplay specifics, which should be explained in the order in which they occur in game. This is where you explain exactly what happens during each turn, action, round, etc. You also should have sections dedicated to complicated subjects and their edge cases (for instance, our section on Collisions for “Pulled into Darkness”). +{\noindent\Heading\large Movement\par} + +As in any race, movement is important. Whenever you move you add your current +speed to the distance. Many cards in the game will modify your speed. + +When you move onto or past certain spaces different things happen. This is +called 'passing' the space. + +If you pass another player they move back one space and you take one damage +(damage will be explained later). + +The first time you pass each checkpoint +(\includegraphics[width=2em]{images/rules/checkpoint.png}) add one of your +legendary cards of your choice to your discard pile. + +If you pass the checkerboard finish line you win the game. + +{\noindent\Heading\large Card Anatomy\par} + +\includegraphics[width=20em]{cards/dogs/husky0.png} + +{\noindent\Heading\large New Days\par} +{\noindent\Heading\large Weather\par} +{\noindent\Heading\Large Effects\par} % Don't forget to mention stretches and their effects +{\noindent\Heading\large Hypothermia\par} +{\noindent\Heading\large Starvation\par} +{\noindent\Heading\Large Card Types\par} +{\noindent\Heading\large\color{dog} Dogs\par} +{\noindent\Heading\large\color{attachment} Attachments\par} +{\noindent\Heading\large\color{sled} Sled\par} +{\noindent\Heading\large\color{personal} Personal\par} +{\noindent\Heading\large\color{food} Food\par} +{\noindent\Heading\large\color{movement} Movement\par} +{\noindent\Heading\large Utility\par} +{\noindent\Heading\Large Icons\par} + + +{\noindent\Heading\Large Game End\par} +% What initiates the end game (ie. once the last card is drawn, at the end of the fourth round etc.), when the game is actually over (ie. each player gets one more turn--including the player who drew the last card), how players tally their points, and restate what the victory requirement is/who wins. + + + {\noindent\Heading\Large Setup\par} To begin the game separate out each of the decks of cards based on the