diff --git a/cards/actions.json b/cards/actions.json index 7a28bca..8e83a4d 100644 --- a/cards/actions.json +++ b/cards/actions.json @@ -1,208 +1,212 @@ [ { "Name": { - "en": "Nil" + "en": "NIL" }, "Description": { - "en": "All players must immediately play a Stance card." + "en": "All players must immediately play a \\stn{} card." }, "Copies": 1 }, { "Name": { - "en": "Curiosity" + "en": "CURIOSITY" }, "Description": { - "en": "All players holding at least one Betrayal must raise their hands. You may swap any held Stance of yours for a Betrayal of their choice." + "en": "All players holding at least one \\btr{} must raise their hands. You may swap any held \\stn{} of yours for a \\btr{} of their choice." }, "Copies": 1 }, { "Name": { - "en": "Cacophony" + "en": "CACOPHONY" }, "Description": { - "en": "All players must immediately reveal their Cacophony cards. If there are 3 or fewer other Cacophony cards revealed, gain that many points. Otherwise, discard all your Action cards." + "en": "All players must immediately reveal their \\textbf{Cacophony} cards. If there are 3 or fewer other \\textbf{Cacophony} cards revealed, gain that many points. Otherwise, discard all your \\act{} cards." }, "Copies": 5 }, { "Name": { - "en": "Misery" + "en": "MISERY" }, "Description": { - "en": "All other players discard two Action cards. If Joy is in play, double this effect." + "en": "All other players discard 2 \\act{} cards. If \\textbf{Joy} is in play, double this effect." }, "Copies": 1, "Persistent": true }, { "Name": { - "en": "Joy" + "en": "JOY" }, "Description": { - "en": "You may play two Action cards immediately. If Misery has been played this round, you may play three Action cards immediately instead." + "en": "You may play 3 \\act{} cards immediately. If \\textbf{Misery} has been played this round, you may play 3 \\act{} cards immediately instead." }, "Copies": 1, "Persistent": true }, { "Name": { - "en": "Implosion" + "en": "IMPLOSION" }, "Description": { - "en": "Cancel the effects of another player's Action." + "en": "Cancel the effects of another player's \\act{}." }, "Copies": 1, "Instant": { - "en": "At any point while a player is playing an Action." + "en": "At any point while a player is playing an \\act{}." } }, { "Name": { - "en": "That Which Is Unseen" + "en": "THAT WHICH is UNSEEN" }, "Description": { - "en": "You have 60 seconds to look at the Action card deck. You may order it or shuffle it in any way you wish before putting it back." + "en": "You may look at the \\act{} draw deck. You may order it or shuffle it in any way you wish before putting it back." }, "Copies": 1 }, { "Name": { - "en": "Paranoia" + "en": "PARANOIA" }, "Description": { - "en": "All players holding at least one Bargain must raise their hands. You may swap any held Stance of yours with a Bargain of their choice." + "en": "All players holding at least one \\brg{} must raise their hands. You may swap any held \\stn{} of yours with a \\brg{} of their choice." }, "Copies": 1 }, { "Name": { - "en": "Duplicity" + "en": "DUPLICITY" }, "Description": { - "en": "You may swap two of your played Stance cards." + "en": "You may swap two of your played \\stn{} cards." }, "Copies": 1 }, { "Name": { - "en": "Burning Truth" + "en": "BURNING TRUTH" }, "Description": { - "en": "Choose a player to reveal their held Stance cards, then give them this Burning Truth card." + "en": "Choose any player who must reveal their held \\stn{} cards to everyone, then give that player this \\textbf{Burning Truth} card instead of discarding it." }, "Copies": 1 }, { "Name": { - "en": "Landmine" + "en": "LANDMINE" }, "Description": { - "en": "If a player tries to take or swap any of your held cards, reveal this card and negate that effect. The player must also discard all their Action cards." + "en": "Negate that effect. The player must also discard all their \\act{} cards." }, - "Instant": true, - "Copies": 1 - }, - { - "Name": { - "en": "Toxic Shock" - }, - "Description": { - "en": "All other players must discard two Actions." + "Instant": { + "en": "If a player tries to take or swap any of your held cards." }, "Copies": 1 }, { "Name": { - "en": "Subterfuge" + "en": "TOXIC SHOCK" }, "Description": { - "en": "You may look at the played Stance cards of any one other player." + "en": "All other players must discard 2 \\act{} cards." }, "Copies": 1 }, { "Name": { - "en": "Famine" + "en": "SUBTERFUGE" }, "Description": { - "en": "While this card is in effect, no Action cards may be drawn." + "en": "You may look at the played \\stn{} cards of any one other player." + }, + "Copies": 1 + }, + { + "Name": { + "en": "FAMINE" + }, + "Description": { + "en": "While this card is in effect, no \\act{} cards may be drawn." }, "Persistent": true, "Copies": 1 }, { "Name": { - "en": "Abundance" + "en": "ABUNDANCE" }, "Description": { - "en": "Remove Famine from play. Draw as many Action cards as there are players, then give each player one card of your choosing." + "en": "Remove \\textbf{Famine} from play. Draw as many \\act{} cards as there are players, then give each player one card of your choosing." }, "Copies": 1 }, { "Name": { - "en": "Amnesia" + "en": "AMNESIA" }, "Description": { - "en": "Remove all Persistent cards from play." + "en": "Remove all persistent \\act{} cards from play." }, "Copies": 1 }, { "Name": { - "en": "Honesty" + "en": "HONESTY" }, "Description": { - "en": "You may turn any of your own played Stances face-up." + "en": "You may turn any of your own played \\stn{} cards face-up." }, "Copies": 1 }, { "Name": { - "en": "Fear" + "en": "FEAR" }, "Description": { - "en": "While you hold this card, you may not play any other Actions." + "en": "While you hold this card, you may not play any other \\act{} cards." }, "Copies": 1 }, { "Name": { - "en": "Love" + "en": "LOVE" }, "Description": { - "en": "If another player has Love, they may reveal it and discard it, and you both gain 2 points. Only the first player to reveal will gain points. If no player reveals Love, you lose 2 points." + "en": "If another player has \\textbf{Love}, they may reveal it and discard it, and you both gain 2 points. Only the first player to reveal will gain points. If no player reveals \\textbf{Love}, you lose 2 points." }, "Copies": 3 }, { "Name": { - "en": "Tithes" + "en": "TITHES" }, "Description": { - "en": "All players must give you one of their Action cards, of their choosing." + "en": "All players must give you one of their \\act{} cards, of their choosing." }, "Copies": 1 }, { "Name": { - "en": "Purification" + "en": "PURIFICATION" }, "Description": { - "en": "All players, including yourself, must reveal one of their played Stances and then return it to their hand." + "en": "All players, including yourself, must reveal one of their played \\stn{} cards and then return it to their hand." }, "Copies": 1 }, { "Name": { - "en": "Turnabout is Fair Play" + "en": "TURNABOUT is FAIR PLAY" }, "Description": { - "en": "If an Action allows a player to take cards from your hand, you may pick it up and play it yourself immediately afterwards." + "en": "You may pick the card up and play it yourself immediately afterwards." + }, + "Instant": { + "en": "If an \\act{} allows a player to take cards from your hand" }, - "Instant": true, "Copies": 1 } ] \ No newline at end of file diff --git a/cards/finals.json b/cards/finals.json index d47d381..329f2cf 100644 --- a/cards/finals.json +++ b/cards/finals.json @@ -1,137 +1,137 @@ [ { "Name": { - "en": "Entropy" + "en": "ENTROPY" }, "Description": { - "en": "Cancel the effects of all Final cards this round." + "en": "Cancel the effects of all \\fin{} cards this round." }, "Copies": 1, "Priority": 0 }, { "Name": { - "en": "Cursed Deck" + "en": "CURSED DECK" }, "Description": { - "en": "Swap two played Stances between any two players other than yourself." + "en": "Swap two played \\stn{} cards between any two players other than yourself." }, "Copies": 1, "Priority": 1 }, { "Name": { - "en": "Stoic Hymnal" + "en": "STOIC HYMNAL" }, "Description": { - "en": "Your Stances cannot be changed by any future Final effects this round." + "en": "Your \\stn{} cards cannot be changed by any future \\fin{} effects this round." }, "Copies": 1, "Priority": 2 }, { "Name": { - "en": "Vengeful Vow" + "en": "VOW of VENGEANCE" }, "Description": { - "en": "If you have Bargained with a player who has Betrayed you, you may take all their Action and Final cards." + "en": "If you have played a \\brg{} against a \\btr{}, you may take all their held \\act{} and \\fin{} cards." }, "Copies": 1, "Priority": 3 }, { "Name": { - "en": "Act of Penance" + "en": "ACT of PENANCE" }, "Description": { - "en": "If you have Betrayed a player who has Bargained with you, you may change your stance to a Bargain, if you have one. If you do so, the other player gains 2 points." + "en": "If you have played a \\btr{} against a \\brg{}, you may change your stance to a \\brg{}, if you are holding one. If you do so, the other player gains 2 extra points." }, "Copies": 1, "Priority": 4 }, { "Name": { - "en": "Lord of the Pit" + "en": "LORD of the PIT" }, "Description": { - "en": "Gain 3 points for every time you have Betrayed a Betrayer in this round." + "en": "Gain 3 points for every time you have played a \\btr{} against a \\btr{} in this round." }, "Copies": 1, "Priority": 5 }, { "Name": { - "en": "Piety" + "en": "PIETY" }, "Description": { - "en": "Gain 3 points for every time you have Bargained with a Betrayer in this round." + "en": "Gain 3 points for every time you have played a \\brg{} against a \\btr{} in this round." }, "Copies": 1, "Priority": 6 }, { "Name": { - "en": "Perjury" + "en": "PERJURY" }, "Description": { - "en": "Replace one of your played Stance cards with one of the opposite Stance." + "en": "Replace one of your played \\stn{} cards with one of the opposite \\stn{}, if you hold one." }, "Copies": 1, "Priority": 7 }, { "Name": { - "en": "Martyrdom" + "en": "MARTYRDOM" }, "Description": { - "en": "Choose another player. Both of you lose 5 points. If you are the player with the lowest score before losing these points, only the other player loses 5 points." + "en": "Choose another player. Both of you lose 5 points. If you are already the player with the lowest score before losing these points, only the other player loses 5 points." }, "Copies": 1, "Priority": 8 }, { "Name": { - "en": "Pantheon" + "en": "PANTHEON" }, "Description": { - "en": "If more than half the Final cards have already been resolved, gain 3 points. Otherwise, lose 1 point." + "en": "If more than half the \\fin{} cards have already been resolved, gain 3 points. Otherwise, lose 1 point." }, "Copies": 1, "Priority": 9 }, { "Name": { - "en": "The Abyss" + "en": "the ABYSS" }, "Description": { - "en": "The player of the next Final to resolve loses 4 points." + "en": "The player of the next \\fin{} to resolve loses 4 points." }, "Copies": 1, "Priority": 10 }, { "Name": { - "en": "Flagellation" + "en": "FLAGELLATION" }, "Description": { - "en": "Lose 3 points. You may not lose any further points this round." + "en": "Lose 3 points. You may not lose any further points this round, for any reason." }, "Copies": 1, "Priority": 11 }, { "Name": { - "en": "Chaos" + "en": "CHAOS" }, "Description": { - "en": "Pick up 4 Stance cards, shuffle them, and randomly deal them back to where they were taken from face-down." + "en": "Pick up 4 played \\stn{} cards, shuffle them, and randomly deal them back to where they were taken from before revealing them." }, "Copies": 1, "Priority": 12 }, { "Name": { - "en": "Funeral Pyre" + "en": "FUNERAL PYRE" }, "Description": { "en": "Take 3 points from one player, and give 3 points to a player other than yourself." @@ -141,10 +141,10 @@ }, { "Name": { - "en": "Interregnum" + "en": "INTERREGNUM" }, "Description": { - "en": "Choose another player. All other players vote for you, or for the other player. If you win a majority of votes, take 3 points from them. If you do not, give 3 points to them." + "en": "Choose another player. All other players vote for you, or for the other player. If you win a majority of votes, take 3 points from the other player. If you do not, give 3 points to them." }, "Copies": 1, "Priority": 14 @@ -154,27 +154,27 @@ "en": "P'Zea-ia-Gwlfth" }, "Description": { - "en": "If this is the last Final to resolve, gain 5 points." + "en": "If this is the last \\fin{} to resolve, gain 5 points." }, "Copies": 1, "Priority": 15 }, { "Name": { - "en": "Anarchy" + "en": "ANARCHY" }, "Description": { - "en": "Every player gains 1 point for every Bargain they have played." + "en": "Every player gains 1 point for every \\brg{} they have played." }, "Copies": 1, "Priority": 16 }, { "Name": { - "en": "Burnt Offerings" + "en": "BURNT OFFERINGS" }, "Description": { - "en": "You may ignore any points lost due to any one Betrayal." + "en": "You may ignore any points lost due to any one \\btr{}." }, "Copies": 1, "Priority": 17 @@ -184,37 +184,37 @@ "en": "MÓRRÍGAN" }, "Description": { - "en": "Gain 1 point for every time a player Betrayed a Bargain in this round." + "en": "Gain 1 point for every time a player played a \\btr{} against a \\brg{} in this round." }, "Copies": 1, "Priority": 18 }, { "Name": { - "en": "Sacrifice" + "en": "SACRIFICE" }, "Description": { - "en": "Gain 3 points and discard all of your Action and Final cards." + "en": "Gain 3 points and discard all of your \\act{} and \\fin{} cards." }, "Copies": 1, "Priority": 19 }, { "Name": { - "en": "Contrition" + "en": "CONTRITION" }, "Description": { - "en": "Ask a player you have Betrayed if they forgive you. If they do, you gain 3 points, and they gain 1 point." + "en": "Ask a player you have played a \\btr{} against if they forgive you. If they do, you gain 3 points, and they gain 1 point." }, "Copies": 1, "Priority": 20 }, { "Name": { - "en": "Final Rites" + "en": "FINAL RITES" }, "Description": { - "en": "Select 3 interactions and swap them. You may only select 1 interaction involving yourself." + "en": "Select 3 pairs of \\brg{}/\\btr{} and swap them. You may only select 1 interaction involving yourself." }, "Copies": 1, "Priority": 100 diff --git a/cards/stances.json b/cards/stances.json index 5997998..17177e1 100644 --- a/cards/stances.json +++ b/cards/stances.json @@ -1,7 +1,7 @@ [ { "Name": { - "en": "" + "en": "BARGAIN" }, "Description": { "en": "" @@ -13,10 +13,10 @@ }, { "Name": { - "en": "" + "en": "BETRAYAL" }, "Description": { - "en": "If played against a Bargain, +2 points." + "en": "" }, "Type": "Betrayal", "AgainstBargain": 2, @@ -24,10 +24,10 @@ }, { "Name": { - "en": "Symbiosis" + "en": "SYMBIOSIS" }, "Description": { - "en": "If played against a Bargain both players gain an additional 2 points." + "en": "\\brg{}: both players gain an additional 2 points." }, "Type": "Bargain", "AgainstBetrayal": -1, @@ -36,7 +36,7 @@ }, { "Name": { - "en": "Excommunication" + "en": "EXCOMMUNICATION" }, "Description": { "en": "This card must be played face-up." @@ -47,10 +47,10 @@ }, { "Name": { - "en": "Quid Pro Quo" + "en": "QUID PRO QUO" }, "Description": { - "en": "At any time once played, this card can be flipped face-up to negate a player's Action." + "en": "At any time once played, this card can be flipped face-up to negate a player's \\act{}." }, "Type": "Bargain", "AgainstBetrayal": -1, @@ -59,10 +59,10 @@ }, { "Name": { - "en": "Assassination" + "en": "ASSASSINATION" }, "Description": { - "en": "If played against a Bargain, the Bargaining player loses 2 additional points." + "en": "\\brg{}: the other player loses 2 additional points." }, "Type": "Betrayal", "AgainstBargain": 1, @@ -70,7 +70,7 @@ }, { "Name": { - "en": "A Fair Deal" + "en": "FAIR DEAL" }, "Description": { "en": "This card must be played face-up." @@ -82,7 +82,7 @@ }, { "Name": { - "en": "Coup d'Etat" + "en": "COUP d'ETAT" }, "Description": { "en": "If played against the player with the most points in the last round, they lose 2 additional points." @@ -93,10 +93,10 @@ }, { "Name": { - "en": "Contractual Obligations" + "en": "CONTRACTUAL OBLIGATIONS" }, "Description": { - "en": "If played against a Betrayal, the Betrayer loses 3 points." + "en": "\\btr{}: the other player loses 3 points." }, "Type": "Bargain", "AgainstBetrayal": 1, @@ -105,7 +105,7 @@ }, { "Name": { - "en": "A True Name, Spoken Softly" + "en": "A TRUE NAME, SPOKEN SOFTLY" }, "Description": { "en": "" @@ -117,10 +117,10 @@ }, { "Name": { - "en": "Peacekeeping" + "en": "PEACEKEEPING" }, "Description": { - "en": "If played against a Betrayal, you may take all Action and Final cards of the other player." + "en": "\\btr{}: you may take all \\act{} and \\fin{} cards of the other player." }, "Type": "Bargain", "AgainstBetrayal": -1, @@ -129,10 +129,10 @@ }, { "Name": { - "en": "“Peacekeeping”" + "en": "“PEACEKEEPING”" }, "Description": { - "en": "If played against a Bargain, take all the Action cards of the other player." + "en": "\\brg{}: take all the \\act{} cards of the other player." }, "Type": "Betrayal", "AgainstBargain": 2, @@ -140,7 +140,7 @@ }, { "Name": { - "en": "Cameraderie" + "en": "CAMERADERIE" }, "Description": { "en": "" @@ -152,10 +152,10 @@ }, { "Name": { - "en": "Bitter Taste" + "en": "BITTER TASTE" }, "Description": { - "en": "The other player must also redraw all their Bargain cards at the beginning of the next round." + "en": "The other player must also redraw all their \\brg{} cards at the beginning of the next round." }, "Type": "Betrayal", "AgainstBargain": 2, @@ -163,10 +163,10 @@ }, { "Name": { - "en": "Love-Tackle" + "en": "LOVE-TACKLE" }, "Description": { - "en": "If a player reveals this card during the game, it is flipped face-up, and they must give you all their Action cards." + "en": "If a player reveals this card during the game, it is flipped face-up, and they must give you all their \\act{} cards." }, "Type": "Bargain", "AgainstBetrayal": -1, @@ -175,10 +175,10 @@ }, { "Name": { - "en": "Thrown to the Lampreys" + "en": "THROWN to the LAMPREYS" }, "Description": { - "en": "This card must be played face-up and cannot be moved or interacted with. The player this card is played against must immediately play 2 of their Stance cards." + "en": "This card must be played face-up and cannot be moved or interacted with. The player this card is played against must immediately play 2 of their \\stn{} cards." }, "Type": "Betrayal", "Copies": 1 diff --git a/cards/template/cards.pdf b/cards/template/cards.pdf index f8d11f8..73a4166 100644 Binary files a/cards/template/cards.pdf and b/cards/template/cards.pdf differ diff --git a/cards/template/cards.tex b/cards/template/cards.tex index acb690c..eba4a4e 100644 --- a/cards/template/cards.tex +++ b/cards/template/cards.tex @@ -33,6 +33,7 @@ \newcommand{\carddescriptionheight}{30mm} \newcommand{\carddescriptionmargin}{4mm} +% TODO apply internationalization rules here too \newcommand{\card}[1]{\textbf{#1}} \newcommand{\act}{\textbf{Action}} \newcommand{\stn}{\textbf{Stance}} @@ -47,27 +48,25 @@ \draw[rounded corners = \cardcorners] (0,0) rectangle (\cardwidth - \cardmargin, \cardheight - \cardmargin); - \node (name) at (0.5 * \cardwidth - 0.5 * \cardmargin, \carddescriptionheight + \cardnameheight) [text width = \cardwidth - 2 * \cardmargin, minimum height = \cardnameheight, align = center] {\LARGE #1}; + \node (name) at (0.5 * \cardwidth - 0.5 * \cardmargin, \carddescriptionheight + \cardnameheight) [text width = \cardwidth - 2 * \cardmargin, minimum height = \cardnameheight, align = center] {\Large #1}; \node (description) at (0.5 * \cardwidth - 0.5 * \cardmargin, 0.5 * \carddescriptionheight + \carddescriptionmargin) [draw = gray, fill = lightgray, thick, text width = \cardwidth - 3 * \carddescriptionmargin, minimum height = \carddescriptionheight, align = center] { \ifstrempty{#3}{}{ % Instant, add the instant icon - \small \textbf{Instant} \textit{#3}. + \small \textbf{Instant} \textit{#3} }\ifstrempty{#4}{}{ % Persistent, add the instant icon \small \textbf{Persistent}. } - \small #2. + \small #2 }; \end{tikzpicture} } % Stances -\newcommand{\stancetypeheight}{10mm} - \newcommand{\bargainheart}{\ensuremath\varheartsuit} \newcommand{\bargainheartoutline}{\ensuremath\heartsuit} \newcommand{\betrayalheart}{\rotatebox[origin=c]{180}{\ensuremath\varheartsuit}} @@ -83,28 +82,41 @@ \draw[rounded corners = \cardcorners] (0,0) rectangle (\cardwidth - \cardmargin, \cardheight - \cardmargin); - \node (type) at (0.12 * \cardwidth, 0.88 * \cardheight) [align = center] {\fontsize{65}{80px} \heart{#3}}; + \node (type) at (0.12 * \cardwidth + \cardmargin, 0.88 * \cardheight) [align = left] {\fontsize{50px}{50px} \heart{#3}}; \node (basevsbargain) at (0.75 * \cardwidth, 0.88 * \cardheight + 1.1mm) [rounded corners = \cardcorners, align = center] {\textcolor{white}{\fontsize{50px}{60px} \bargainheart{}}}; \node (basevsbargainoutline) at (0.75 * \cardwidth, 0.88 * \cardheight + 1.1mm) [rounded corners = \cardcorners, align = center] {\fontsize{50px}{60px} \bargainheartoutline{}}; \node (basevsbetrayal) at (0.86 * \cardwidth, 0.88 * \cardheight - 1.1mm) [rounded corners = \cardcorners, align = center] {\fontsize{50px}{60px} \betrayalheart{}}; \node (basevsbargaintext) at (0.75 * \cardwidth + 0.5mm, 0.88 * \cardheight + 1.5mm) [rounded corners = \cardcorners, align = center] {#4}; - \node (basevsbetrayaltext) at (0.86 * \cardwidth + 0.5mm, 0.88 * \cardheight - 1mm) [rounded corners = \cardcorners, align = center] {\textcolor{white}{#5}}; + \node (basevsbetrayaltext) at (0.86 * \cardwidth + 0.5mm, 0.875 * \cardheight - 1mm) [rounded corners = \cardcorners, align = center] {\textcolor{white}{#5}}; \ifstrempty{#2} { - \node (name) at (0.5 * \cardwidth - 0.5 * \cardmargin, 0.5 * \cardnameheight) [text width = \cardwidth - 2 * \cardmargin, minimum height = \cardnameheight, align = center] {\LARGE #1}; + \node (name) at (0.5 * \cardwidth - 0.5 * \cardmargin, 0.5 * \cardnameheight) [text width = \cardwidth - 3 * \cardmargin, minimum height = \cardnameheight, align = center] {\Large #1}; } { - \node (name) at (0.5 * \cardwidth - 0.5 * \cardmargin, \carddescriptionheight + \cardnameheight) [text width = \cardwidth - 2 * \cardmargin, minimum height = \cardnameheight, align = center] {\LARGE #1}; - \node (description) at (0.5 * \cardwidth - 0.5 * \cardmargin, 0.5 * \carddescriptionheight + \carddescriptionmargin) [draw = gray, fill = lightgray, thick, text width = \cardwidth - 3 * \carddescriptionmargin, minimum height = \carddescriptionheight, align = center] {\small #2.}; + \node (name) at (0.5 * \cardwidth - 0.5 * \cardmargin, \carddescriptionheight + \cardnameheight) [text width = \cardwidth - 3 * \cardmargin, minimum height = \cardnameheight, align = center] {\Large #1}; + \node (description) at (0.5 * \cardwidth - 0.5 * \cardmargin, 0.5 * \carddescriptionheight + \carddescriptionmargin) [draw = gray, fill = lightgray, thick, text width = \cardwidth - 3 * \carddescriptionmargin, minimum height = \carddescriptionheight, align = center] {\small #2}; } \end{tikzpicture} } %TODO Finals +\newcommand{\final}[3]{ % Name, Description, Priority +\begin{tikzpicture} + + \draw[rounded corners = \cardcorners] (0,0) rectangle (\cardwidth - \cardmargin, \cardheight - \cardmargin); + + \node (name) at (0.5 * \cardwidth - 0.5 * \cardmargin, \cardheight - 0.5* \cardmargin - 0.5 * \cardnameheight) [text width = \cardwidth - 3 * \carddescriptionmargin, minimum height = \cardnameheight, align = left] {\LARGE #1}; + + \node (priority) at (0.5 * \cardwidth - 0.5 * \cardmargin, \cardheight - 0.5* \cardmargin - 0.5 * \cardnameheight) [text width = \cardwidth - 3 * \carddescriptionmargin, minimum height = \cardnameheight, align = right] {\LARGE #3}; + + \node (description) at (0.5 * \cardwidth - 0.5 * \cardmargin, \cardheight - 0.5* \cardmargin - \cardnameheight - 0.5 * \carddescriptionheight) [draw = gray, fill = lightgray, thick, text width = \cardwidth - 3 * \carddescriptionmargin, minimum height = \carddescriptionheight, align = center] {\small #2}; + +\end{tikzpicture} +} %TODO Missions @@ -114,16 +126,114 @@ \thispagestyle{empty} -% TODO autogenerate the below -% Actions -\action{DUPLICITY}{You may swap two of your played \stn{} cards}{}{} +% ACTIONS +\action{NIL}{All players must immediately play a \stn{} card.}{}{} +\action{CURIOSITY}{All players holding at least one \btr{} must raise their hands. You may swap any held \stn{} of yours for a \btr{} of their choice.}{}{} +\action{CACOPHONY}{All players must immediately reveal their \textbf{Cacophony} cards. If there are 3 or fewer other \textbf{Cacophony} cards revealed, gain that many points. Otherwise, discard all your \act{} cards.}{}{} +\action{CACOPHONY}{All players must immediately reveal their \textbf{Cacophony} cards. If there are 3 or fewer other \textbf{Cacophony} cards revealed, gain that many points. Otherwise, discard all your \act{} cards.}{}{} +\action{CACOPHONY}{All players must immediately reveal their \textbf{Cacophony} cards. If there are 3 or fewer other \textbf{Cacophony} cards revealed, gain that many points. Otherwise, discard all your \act{} cards.}{}{} +\action{CACOPHONY}{All players must immediately reveal their \textbf{Cacophony} cards. If there are 3 or fewer other \textbf{Cacophony} cards revealed, gain that many points. Otherwise, discard all your \act{} cards.}{}{} +\action{CACOPHONY}{All players must immediately reveal their \textbf{Cacophony} cards. If there are 3 or fewer other \textbf{Cacophony} cards revealed, gain that many points. Otherwise, discard all your \act{} cards.}{}{} +\action{MISERY}{All other players discard 2 \act{} cards. If \textbf{Joy} is in play, double this effect.}{}{true} +\action{JOY}{You may play 3 \act{} cards immediately. If \textbf{Misery} has been played this round, you may play 3 \act{} cards immediately instead.}{}{true} +\action{IMPLOSION}{Cancel the effects of another player's \act{}.}{At any point while a player is playing an \act{}.}{} +\action{THAT WHICH is UNSEEN}{You may look at the \act{} draw deck. You may order it or shuffle it in any way you wish before putting it back.}{}{} +\action{PARANOIA}{All players holding at least one \brg{} must raise their hands. You may swap any held \stn{} of yours with a \brg{} of their choice.}{}{} +\action{DUPLICITY}{You may swap two of your played \stn{} cards.}{}{} +\action{BURNING TRUTH}{Choose any player who must reveal their held \stn{} cards to everyone, then give that player this \textbf{Burning Truth} card instead of discarding it.}{}{} +\action{LANDMINE}{Negate that effect. The player must also discard all their \act{} cards.}{If a player tries to take or swap any of your held cards.}{} +\action{TOXIC SHOCK}{All other players must discard 2 \act{} cards.}{}{} +\action{SUBTERFUGE}{You may look at the played \stn{} cards of any one other player.}{}{} +\action{FAMINE}{While this card is in effect, no \act{} cards may be drawn.}{}{true} +\action{ABUNDANCE}{Remove \textbf{Famine} from play. Draw as many \act{} cards as there are players, then give each player one card of your choosing.}{}{} +\action{AMNESIA}{Remove all persistent \act{} cards from play.}{}{} +\action{HONESTY}{You may turn any of your own played \stn{} cards face-up.}{}{} +\action{FEAR}{While you hold this card, you may not play any other \act{} cards.}{}{} +\action{LOVE}{If another player has \textbf{Love}, they may reveal it and discard it, and you both gain 2 points. Only the first player to reveal will gain points. If no player reveals \textbf{Love}, you lose 2 points.}{}{} +\action{LOVE}{If another player has \textbf{Love}, they may reveal it and discard it, and you both gain 2 points. Only the first player to reveal will gain points. If no player reveals \textbf{Love}, you lose 2 points.}{}{} +\action{LOVE}{If another player has \textbf{Love}, they may reveal it and discard it, and you both gain 2 points. Only the first player to reveal will gain points. If no player reveals \textbf{Love}, you lose 2 points.}{}{} +\action{TITHES}{All players must give you one of their \act{} cards, of their choosing.}{}{} +\action{PURIFICATION}{All players, including yourself, must reveal one of their played \stn{} cards and then return it to their hand.}{}{} +\action{TURNABOUT is FAIR PLAY}{You may pick the card up and play it yourself immediately afterwards.}{If an \act{} allows a player to take cards from your hand}{} -% Stances +% STANCES +\stance{BARGAIN}{}{BARGAIN}{3}{-1} +\stance{BARGAIN}{}{BARGAIN}{3}{-1} +\stance{BARGAIN}{}{BARGAIN}{3}{-1} +\stance{BARGAIN}{}{BARGAIN}{3}{-1} +\stance{BARGAIN}{}{BARGAIN}{3}{-1} +\stance{BARGAIN}{}{BARGAIN}{3}{-1} +\stance{BARGAIN}{}{BARGAIN}{3}{-1} +\stance{BARGAIN}{}{BARGAIN}{3}{-1} +\stance{BARGAIN}{}{BARGAIN}{3}{-1} +\stance{BARGAIN}{}{BARGAIN}{3}{-1} +\stance{BARGAIN}{}{BARGAIN}{3}{-1} +\stance{BARGAIN}{}{BARGAIN}{3}{-1} +\stance{BARGAIN}{}{BARGAIN}{3}{-1} +\stance{BARGAIN}{}{BARGAIN}{3}{-1} +\stance{BARGAIN}{}{BARGAIN}{3}{-1} +\stance{BARGAIN}{}{BARGAIN}{3}{-1} +\stance{BARGAIN}{}{BARGAIN}{3}{-1} +\stance{BARGAIN}{}{BARGAIN}{3}{-1} +\stance{BARGAIN}{}{BARGAIN}{3}{-1} \stance{BARGAIN}{}{BARGAIN}{3}{-1} \stance{BETRAYAL}{}{BETRAYAL}{2}{0} -\stance{LOVE-TACKLE}{If a player reveals this card during the game, it is flipped face-up, and they must give you all their \act{} cards}{BARGAIN}{3}{-1} -\stance{“PEACEKEEPING”}{If played against a \brg{}, take all the Action cards of the other player.}{BETRAYAL}{2}{0} -\stance{BITTER TASTE}{The other player must also redraw all their \brg{} cards at the beginning of the next round}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{BETRAYAL}{}{BETRAYAL}{2}{0} +\stance{SYMBIOSIS}{\brg{}: both players gain an additional 2 points.}{BARGAIN}{3}{-1} +\stance{EXCOMMUNICATION}{This card must be played face-up.}{BETRAYAL}{4}{0} +\stance{QUID PRO QUO}{At any time once played, this card can be flipped face-up to negate a player's \act{}.}{BARGAIN}{3}{-1} +\stance{ASSASSINATION}{\brg{}: the other player loses 2 additional points.}{BETRAYAL}{1}{0} +\stance{FAIR DEAL}{This card must be played face-up.}{BARGAIN}{4}{-1} +\stance{COUP d'ETAT}{If played against the player with the most points in the last round, they lose 2 additional points.}{BETRAYAL}{2}{0} +\stance{CONTRACTUAL OBLIGATIONS}{\btr{}: the other player loses 3 points.}{BARGAIN}{1}{1} +\stance{A TRUE NAME, SPOKEN SOFTLY}{}{BETRAYAL}{1}{1} +\stance{PEACEKEEPING}{\btr{}: you may take all \act{} and \fin{} cards of the other player.}{BARGAIN}{3}{-1} +\stance{“PEACEKEEPING”}{\brg{}: take all the \act{} cards of the other player.}{BETRAYAL}{2}{0} +\stance{CAMERADERIE}{}{BARGAIN}{4}{-2} +\stance{BITTER TASTE}{The other player must also redraw all their \brg{} cards at the beginning of the next round.}{BETRAYAL}{2}{0} +\stance{LOVE-TACKLE}{If a player reveals this card during the game, it is flipped face-up, and they must give you all their \act{} cards.}{BARGAIN}{3}{-1} +\stance{THROWN to the LAMPREYS}{This card must be played face-up and cannot be moved or interacted with. The player this card is played against must immediately play 2 of their \stn{} cards.}{BETRAYAL}{0}{0} +% FINALS +\final{ENTROPY}{Cancel the effects of all \fin{} cards this round.}{0} +\final{CURSED DECK}{Swap two played \stn{} cards between any two players other than yourself.}{1} +\final{STOIC HYMNAL}{Your \stn{} cards cannot be changed by any future \fin{} effects this round.}{2} +\final{VOW of VENGEANCE}{If you have played a \brg{} against a \btr{}, you may take all their held \act{} and \fin{} cards.}{3} +\final{ACT of PENANCE}{If you have played a \btr{} against a \brg{}, you may change your stance to a \brg{}, if you are holding one. If you do so, the other player gains 2 extra points.}{4} +\final{LORD of the PIT}{Gain 3 points for every time you have played a \btr{} against a \btr{} in this round.}{5} +\final{PIETY}{Gain 3 points for every time you have played a \brg{} against a \btr{} in this round.}{6} +\final{PERJURY}{Replace one of your played \stn{} cards with one of the opposite \stn{}, if you hold one.}{7} +\final{MARTYRDOM}{Choose another player. Both of you lose 5 points. If you are already the player with the lowest score before losing these points, only the other player loses 5 points.}{8} +\final{PANTHEON}{If more than half the \fin{} cards have already been resolved, gain 3 points. Otherwise, lose 1 point.}{9} +\final{the ABYSS}{The player of the next \fin{} to resolve loses 4 points.}{10} +\final{FLAGELLATION}{Lose 3 points. You may not lose any further points this round, for any reason.}{11} +\final{CHAOS}{Pick up 4 played \stn{} cards, shuffle them, and randomly deal them back to where they were taken from before revealing them.}{12} +\final{FUNERAL PYRE}{Take 3 points from one player, and give 3 points to a player other than yourself.}{13} +\final{INTERREGNUM}{Choose another player. All other players vote for you, or for the other player. If you win a majority of votes, take 3 points from the other player. If you do not, give 3 points to them.}{14} +\final{P'Zea-ia-Gwlfth}{If this is the last \fin{} to resolve, gain 5 points.}{15} +\final{ANARCHY}{Every player gains 1 point for every \brg{} they have played.}{16} +\final{BURNT OFFERINGS}{You may ignore any points lost due to any one \btr{}.}{17} +\final{MÓRRÍGAN}{Gain 1 point for every time a player played a \btr{} against a \brg{} in this round.}{18} +\final{SACRIFICE}{Gain 3 points and discard all of your \act{} and \fin{} cards.}{19} +\final{CONTRITION}{Ask a player you have played a \btr{} against if they forgive you. If they do, you gain 3 points, and they gain 1 point.}{20} +\final{FINAL RITES}{Select 3 pairs of \brg{}/\btr{} and swap them. You may only select 1 interaction involving yourself.}{100} \end{document} \ No newline at end of file diff --git a/main.go b/main.go index 0e6dd4e..f3c76da 100644 --- a/main.go +++ b/main.go @@ -2,7 +2,9 @@ package main import ( "encoding/json" + "fmt" "os" + "strings" ) type Card struct { @@ -35,6 +37,8 @@ type Final struct { } func main() { + lang := os.Args[1] + a, _ := os.Open("cards/actions.json") defer a.Close() dec := json.NewDecoder(a) @@ -43,6 +47,37 @@ func main() { panic(err) } + fmt.Print("\n% ACTIONS\n") + + for _, act := range actions { + name, ex := act.Name[lang] + if !ex { + panic(fmt.Sprintf("No '%v' language Name for card %v", lang, act)) + } + + desc, ex := act.Description[lang] + if !ex { + panic(fmt.Sprintf("No '%v' language Description for action card %v", lang, act)) + } + + var inst string + if act.Instant != nil { + inst, ex = act.Instant[lang] + if !ex { + panic(fmt.Sprintf("No '%v' language Instant for action card %v", lang, act)) + } + } + + var pers string + if act.Persistent { + pers = "true" + } + + for i := 0; i < act.Copies; i++ { + fmt.Printf("\\action{%v}{%v}{%v}{%v}\n", name, desc, inst, pers) + } + } + s, _ := os.Open("cards/stances.json") defer s.Close() dec = json.NewDecoder(s) @@ -51,6 +86,25 @@ func main() { panic(err) } + fmt.Print("\n% STANCES\n") + for _, stn := range stances { + name, ex := stn.Name[lang] + if !ex { + panic(fmt.Sprintf("No '%v' language Name for stance card %v", lang, stn)) + } + + desc, ex := stn.Description[lang] + if !ex { + panic(fmt.Sprintf("No '%v' language Description for stance card %v", lang, stn)) + } + + stancetype := strings.ToUpper(stn.Type) + + for i := 0; i < stn.Copies; i++ { + fmt.Printf("\\stance{%v}{%v}{%v}{%v}{%v}\n", name, desc, stancetype, stn.AgainstBargain, stn.AgainstBetrayal) + } + } + f, _ := os.Open("cards/finals.json") defer f.Close() dec = json.NewDecoder(f) @@ -59,6 +113,24 @@ func main() { panic(err) } + fmt.Print("\n% FINALS\n") + for _, fin := range finals { + name, ex := fin.Name[lang] + if !ex { + panic(fmt.Sprintf("No '%v' language Name for final card %v", lang, fin)) + } + + desc, ex := fin.Description[lang] + if !ex { + panic(fmt.Sprintf("No '%v' language Description for final card %v", lang, fin)) + } + + for i := 0; i < fin.Copies; i++ { + fmt.Printf("\\final{%v}{%v}{%v}\n", name, desc, fin.Priority) + } + } + + //TODO m, _ := os.Open("cards/missions.json") defer f.Close() dec = json.NewDecoder(m)