Large updates, go script now puts the data into a latex acceptable

format
This commit is contained in:
🐙PiperYxzzy
2022-11-05 16:23:34 +02:00
parent 981e31b5da
commit ad5151240a
6 changed files with 323 additions and 137 deletions

View File

@@ -1,208 +1,212 @@
[ [
{ {
"Name": { "Name": {
"en": "Nil" "en": "NIL"
}, },
"Description": { "Description": {
"en": "All players must immediately play a Stance card." "en": "All players must immediately play a \\stn{} card."
}, },
"Copies": 1 "Copies": 1
}, },
{ {
"Name": { "Name": {
"en": "Curiosity" "en": "CURIOSITY"
}, },
"Description": { "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 "Copies": 1
}, },
{ {
"Name": { "Name": {
"en": "Cacophony" "en": "CACOPHONY"
}, },
"Description": { "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 "Copies": 5
}, },
{ {
"Name": { "Name": {
"en": "Misery" "en": "MISERY"
}, },
"Description": { "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, "Copies": 1,
"Persistent": true "Persistent": true
}, },
{ {
"Name": { "Name": {
"en": "Joy" "en": "JOY"
}, },
"Description": { "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, "Copies": 1,
"Persistent": true "Persistent": true
}, },
{ {
"Name": { "Name": {
"en": "Implosion" "en": "IMPLOSION"
}, },
"Description": { "Description": {
"en": "Cancel the effects of another player's Action." "en": "Cancel the effects of another player's \\act{}."
}, },
"Copies": 1, "Copies": 1,
"Instant": { "Instant": {
"en": "At any point while a player is playing an Action." "en": "At any point while a player is playing an \\act{}."
} }
}, },
{ {
"Name": { "Name": {
"en": "That Which Is Unseen" "en": "THAT WHICH is UNSEEN"
}, },
"Description": { "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 "Copies": 1
}, },
{ {
"Name": { "Name": {
"en": "Paranoia" "en": "PARANOIA"
}, },
"Description": { "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 "Copies": 1
}, },
{ {
"Name": { "Name": {
"en": "Duplicity" "en": "DUPLICITY"
}, },
"Description": { "Description": {
"en": "You may swap two of your played Stance cards." "en": "You may swap two of your played \\stn{} cards."
}, },
"Copies": 1 "Copies": 1
}, },
{ {
"Name": { "Name": {
"en": "Burning Truth" "en": "BURNING TRUTH"
}, },
"Description": { "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 "Copies": 1
}, },
{ {
"Name": { "Name": {
"en": "Landmine" "en": "LANDMINE"
}, },
"Description": { "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, "Instant": {
"Copies": 1 "en": "If a player tries to take or swap any of your held cards."
},
{
"Name": {
"en": "Toxic Shock"
},
"Description": {
"en": "All other players must discard two Actions."
}, },
"Copies": 1 "Copies": 1
}, },
{ {
"Name": { "Name": {
"en": "Subterfuge" "en": "TOXIC SHOCK"
}, },
"Description": { "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 "Copies": 1
}, },
{ {
"Name": { "Name": {
"en": "Famine" "en": "SUBTERFUGE"
}, },
"Description": { "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, "Persistent": true,
"Copies": 1 "Copies": 1
}, },
{ {
"Name": { "Name": {
"en": "Abundance" "en": "ABUNDANCE"
}, },
"Description": { "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 "Copies": 1
}, },
{ {
"Name": { "Name": {
"en": "Amnesia" "en": "AMNESIA"
}, },
"Description": { "Description": {
"en": "Remove all Persistent cards from play." "en": "Remove all persistent \\act{} cards from play."
}, },
"Copies": 1 "Copies": 1
}, },
{ {
"Name": { "Name": {
"en": "Honesty" "en": "HONESTY"
}, },
"Description": { "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 "Copies": 1
}, },
{ {
"Name": { "Name": {
"en": "Fear" "en": "FEAR"
}, },
"Description": { "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 "Copies": 1
}, },
{ {
"Name": { "Name": {
"en": "Love" "en": "LOVE"
}, },
"Description": { "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 "Copies": 3
}, },
{ {
"Name": { "Name": {
"en": "Tithes" "en": "TITHES"
}, },
"Description": { "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 "Copies": 1
}, },
{ {
"Name": { "Name": {
"en": "Purification" "en": "PURIFICATION"
}, },
"Description": { "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 "Copies": 1
}, },
{ {
"Name": { "Name": {
"en": "Turnabout is Fair Play" "en": "TURNABOUT is FAIR PLAY"
}, },
"Description": { "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 "Copies": 1
} }
] ]

View File

@@ -1,137 +1,137 @@
[ [
{ {
"Name": { "Name": {
"en": "Entropy" "en": "ENTROPY"
}, },
"Description": { "Description": {
"en": "Cancel the effects of all Final cards this round." "en": "Cancel the effects of all \\fin{} cards this round."
}, },
"Copies": 1, "Copies": 1,
"Priority": 0 "Priority": 0
}, },
{ {
"Name": { "Name": {
"en": "Cursed Deck" "en": "CURSED DECK"
}, },
"Description": { "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, "Copies": 1,
"Priority": 1 "Priority": 1
}, },
{ {
"Name": { "Name": {
"en": "Stoic Hymnal" "en": "STOIC HYMNAL"
}, },
"Description": { "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, "Copies": 1,
"Priority": 2 "Priority": 2
}, },
{ {
"Name": { "Name": {
"en": "Vengeful Vow" "en": "VOW of VENGEANCE"
}, },
"Description": { "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, "Copies": 1,
"Priority": 3 "Priority": 3
}, },
{ {
"Name": { "Name": {
"en": "Act of Penance" "en": "ACT of PENANCE"
}, },
"Description": { "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, "Copies": 1,
"Priority": 4 "Priority": 4
}, },
{ {
"Name": { "Name": {
"en": "Lord of the Pit" "en": "LORD of the PIT"
}, },
"Description": { "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, "Copies": 1,
"Priority": 5 "Priority": 5
}, },
{ {
"Name": { "Name": {
"en": "Piety" "en": "PIETY"
}, },
"Description": { "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, "Copies": 1,
"Priority": 6 "Priority": 6
}, },
{ {
"Name": { "Name": {
"en": "Perjury" "en": "PERJURY"
}, },
"Description": { "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, "Copies": 1,
"Priority": 7 "Priority": 7
}, },
{ {
"Name": { "Name": {
"en": "Martyrdom" "en": "MARTYRDOM"
}, },
"Description": { "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, "Copies": 1,
"Priority": 8 "Priority": 8
}, },
{ {
"Name": { "Name": {
"en": "Pantheon" "en": "PANTHEON"
}, },
"Description": { "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, "Copies": 1,
"Priority": 9 "Priority": 9
}, },
{ {
"Name": { "Name": {
"en": "The Abyss" "en": "the ABYSS"
}, },
"Description": { "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, "Copies": 1,
"Priority": 10 "Priority": 10
}, },
{ {
"Name": { "Name": {
"en": "Flagellation" "en": "FLAGELLATION"
}, },
"Description": { "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, "Copies": 1,
"Priority": 11 "Priority": 11
}, },
{ {
"Name": { "Name": {
"en": "Chaos" "en": "CHAOS"
}, },
"Description": { "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, "Copies": 1,
"Priority": 12 "Priority": 12
}, },
{ {
"Name": { "Name": {
"en": "Funeral Pyre" "en": "FUNERAL PYRE"
}, },
"Description": { "Description": {
"en": "Take 3 points from one player, and give 3 points to a player other than yourself." "en": "Take 3 points from one player, and give 3 points to a player other than yourself."
@@ -141,10 +141,10 @@
}, },
{ {
"Name": { "Name": {
"en": "Interregnum" "en": "INTERREGNUM"
}, },
"Description": { "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, "Copies": 1,
"Priority": 14 "Priority": 14
@@ -154,27 +154,27 @@
"en": "P'Zea-ia-Gwlfth" "en": "P'Zea-ia-Gwlfth"
}, },
"Description": { "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, "Copies": 1,
"Priority": 15 "Priority": 15
}, },
{ {
"Name": { "Name": {
"en": "Anarchy" "en": "ANARCHY"
}, },
"Description": { "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, "Copies": 1,
"Priority": 16 "Priority": 16
}, },
{ {
"Name": { "Name": {
"en": "Burnt Offerings" "en": "BURNT OFFERINGS"
}, },
"Description": { "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, "Copies": 1,
"Priority": 17 "Priority": 17
@@ -184,37 +184,37 @@
"en": "MÓRRÍGAN" "en": "MÓRRÍGAN"
}, },
"Description": { "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, "Copies": 1,
"Priority": 18 "Priority": 18
}, },
{ {
"Name": { "Name": {
"en": "Sacrifice" "en": "SACRIFICE"
}, },
"Description": { "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, "Copies": 1,
"Priority": 19 "Priority": 19
}, },
{ {
"Name": { "Name": {
"en": "Contrition" "en": "CONTRITION"
}, },
"Description": { "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, "Copies": 1,
"Priority": 20 "Priority": 20
}, },
{ {
"Name": { "Name": {
"en": "Final Rites" "en": "FINAL RITES"
}, },
"Description": { "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, "Copies": 1,
"Priority": 100 "Priority": 100

View File

@@ -1,7 +1,7 @@
[ [
{ {
"Name": { "Name": {
"en": "" "en": "BARGAIN"
}, },
"Description": { "Description": {
"en": "" "en": ""
@@ -13,10 +13,10 @@
}, },
{ {
"Name": { "Name": {
"en": "" "en": "BETRAYAL"
}, },
"Description": { "Description": {
"en": "If played against a Bargain, +2 points." "en": ""
}, },
"Type": "Betrayal", "Type": "Betrayal",
"AgainstBargain": 2, "AgainstBargain": 2,
@@ -24,10 +24,10 @@
}, },
{ {
"Name": { "Name": {
"en": "Symbiosis" "en": "SYMBIOSIS"
}, },
"Description": { "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", "Type": "Bargain",
"AgainstBetrayal": -1, "AgainstBetrayal": -1,
@@ -36,7 +36,7 @@
}, },
{ {
"Name": { "Name": {
"en": "Excommunication" "en": "EXCOMMUNICATION"
}, },
"Description": { "Description": {
"en": "This card must be played face-up." "en": "This card must be played face-up."
@@ -47,10 +47,10 @@
}, },
{ {
"Name": { "Name": {
"en": "Quid Pro Quo" "en": "QUID PRO QUO"
}, },
"Description": { "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", "Type": "Bargain",
"AgainstBetrayal": -1, "AgainstBetrayal": -1,
@@ -59,10 +59,10 @@
}, },
{ {
"Name": { "Name": {
"en": "Assassination" "en": "ASSASSINATION"
}, },
"Description": { "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", "Type": "Betrayal",
"AgainstBargain": 1, "AgainstBargain": 1,
@@ -70,7 +70,7 @@
}, },
{ {
"Name": { "Name": {
"en": "A Fair Deal" "en": "FAIR DEAL"
}, },
"Description": { "Description": {
"en": "This card must be played face-up." "en": "This card must be played face-up."
@@ -82,7 +82,7 @@
}, },
{ {
"Name": { "Name": {
"en": "Coup d'Etat" "en": "COUP d'ETAT"
}, },
"Description": { "Description": {
"en": "If played against the player with the most points in the last round, they lose 2 additional points." "en": "If played against the player with the most points in the last round, they lose 2 additional points."
@@ -93,10 +93,10 @@
}, },
{ {
"Name": { "Name": {
"en": "Contractual Obligations" "en": "CONTRACTUAL OBLIGATIONS"
}, },
"Description": { "Description": {
"en": "If played against a Betrayal, the Betrayer loses 3 points." "en": "\\btr{}: the other player loses 3 points."
}, },
"Type": "Bargain", "Type": "Bargain",
"AgainstBetrayal": 1, "AgainstBetrayal": 1,
@@ -105,7 +105,7 @@
}, },
{ {
"Name": { "Name": {
"en": "A True Name, Spoken Softly" "en": "A TRUE NAME, SPOKEN SOFTLY"
}, },
"Description": { "Description": {
"en": "" "en": ""
@@ -117,10 +117,10 @@
}, },
{ {
"Name": { "Name": {
"en": "Peacekeeping" "en": "PEACEKEEPING"
}, },
"Description": { "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", "Type": "Bargain",
"AgainstBetrayal": -1, "AgainstBetrayal": -1,
@@ -129,10 +129,10 @@
}, },
{ {
"Name": { "Name": {
"en": "“Peacekeeping”" "en": "“PEACEKEEPING”"
}, },
"Description": { "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", "Type": "Betrayal",
"AgainstBargain": 2, "AgainstBargain": 2,
@@ -140,7 +140,7 @@
}, },
{ {
"Name": { "Name": {
"en": "Cameraderie" "en": "CAMERADERIE"
}, },
"Description": { "Description": {
"en": "" "en": ""
@@ -152,10 +152,10 @@
}, },
{ {
"Name": { "Name": {
"en": "Bitter Taste" "en": "BITTER TASTE"
}, },
"Description": { "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", "Type": "Betrayal",
"AgainstBargain": 2, "AgainstBargain": 2,
@@ -163,10 +163,10 @@
}, },
{ {
"Name": { "Name": {
"en": "Love-Tackle" "en": "LOVE-TACKLE"
}, },
"Description": { "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", "Type": "Bargain",
"AgainstBetrayal": -1, "AgainstBetrayal": -1,
@@ -175,10 +175,10 @@
}, },
{ {
"Name": { "Name": {
"en": "Thrown to the Lampreys" "en": "THROWN to the LAMPREYS"
}, },
"Description": { "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", "Type": "Betrayal",
"Copies": 1 "Copies": 1

Binary file not shown.

View File

@@ -33,6 +33,7 @@
\newcommand{\carddescriptionheight}{30mm} \newcommand{\carddescriptionheight}{30mm}
\newcommand{\carddescriptionmargin}{4mm} \newcommand{\carddescriptionmargin}{4mm}
% TODO apply internationalization rules here too
\newcommand{\card}[1]{\textbf{#1}} \newcommand{\card}[1]{\textbf{#1}}
\newcommand{\act}{\textbf{Action}} \newcommand{\act}{\textbf{Action}}
\newcommand{\stn}{\textbf{Stance}} \newcommand{\stn}{\textbf{Stance}}
@@ -47,27 +48,25 @@
\draw[rounded corners = \cardcorners] (0,0) rectangle (\cardwidth - \cardmargin, \cardheight - \cardmargin); \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] { \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}{}{ \ifstrempty{#3}{}{
% Instant, add the instant icon % Instant, add the instant icon
\small \textbf{Instant} \textit{#3}. \small \textbf{Instant} \textit{#3}
}\ifstrempty{#4}{}{ }\ifstrempty{#4}{}{
% Persistent, add the instant icon % Persistent, add the instant icon
\small \textbf{Persistent}. \small \textbf{Persistent}.
} }
\small #2. \small #2
}; };
\end{tikzpicture} \end{tikzpicture}
} }
% Stances % Stances
\newcommand{\stancetypeheight}{10mm}
\newcommand{\bargainheart}{\ensuremath\varheartsuit} \newcommand{\bargainheart}{\ensuremath\varheartsuit}
\newcommand{\bargainheartoutline}{\ensuremath\heartsuit} \newcommand{\bargainheartoutline}{\ensuremath\heartsuit}
\newcommand{\betrayalheart}{\rotatebox[origin=c]{180}{\ensuremath\varheartsuit}} \newcommand{\betrayalheart}{\rotatebox[origin=c]{180}{\ensuremath\varheartsuit}}
@@ -83,28 +82,41 @@
\draw[rounded corners = \cardcorners] (0,0) rectangle (\cardwidth - \cardmargin, \cardheight - \cardmargin); \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 (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 (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 (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 (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} \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 (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.}; \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} \end{tikzpicture}
} }
%TODO Finals %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 %TODO Missions
@@ -114,16 +126,114 @@
\thispagestyle{empty} \thispagestyle{empty}
% TODO autogenerate the below % ACTIONS
% Actions \action{NIL}{All players must immediately play a \stn{} card.}{}{}
\action{DUPLICITY}{You may swap two of your played \stn{} cards}{}{} \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{BARGAIN}{}{BARGAIN}{3}{-1}
\stance{BETRAYAL}{}{BETRAYAL}{2}{0} \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{BETRAYAL}{}{BETRAYAL}{2}{0}
\stance{“PEACEKEEPING”}{If played against a \brg{}, take all the Action cards of the other player.}{BETRAYAL}{2}{0} \stance{BETRAYAL}{}{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{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} \end{document}

72
main.go
View File

@@ -2,7 +2,9 @@ package main
import ( import (
"encoding/json" "encoding/json"
"fmt"
"os" "os"
"strings"
) )
type Card struct { type Card struct {
@@ -35,6 +37,8 @@ type Final struct {
} }
func main() { func main() {
lang := os.Args[1]
a, _ := os.Open("cards/actions.json") a, _ := os.Open("cards/actions.json")
defer a.Close() defer a.Close()
dec := json.NewDecoder(a) dec := json.NewDecoder(a)
@@ -43,6 +47,37 @@ func main() {
panic(err) 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") s, _ := os.Open("cards/stances.json")
defer s.Close() defer s.Close()
dec = json.NewDecoder(s) dec = json.NewDecoder(s)
@@ -51,6 +86,25 @@ func main() {
panic(err) 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") f, _ := os.Open("cards/finals.json")
defer f.Close() defer f.Close()
dec = json.NewDecoder(f) dec = json.NewDecoder(f)
@@ -59,6 +113,24 @@ func main() {
panic(err) 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") m, _ := os.Open("cards/missions.json")
defer f.Close() defer f.Close()
dec = json.NewDecoder(m) dec = json.NewDecoder(m)