Additional Divider Options: Curse, Trash, Start Decks - 2nd attempt (#201)

* Trash, Curse, Start Deck Options
This commit is contained in:
Wendel Voigt 2018-04-30 12:11:01 -05:00 committed by Peter
parent a33ec8f6d7
commit 236feff33c
20 changed files with 207 additions and 36 deletions

View File

@ -878,6 +878,19 @@
"types": [ "types": [
"Treasure" "Treasure"
] ]
},{
"card_tag": "Start Deck",
"cardset_tags": [
"base",
"dominion1stEdition",
"dominion2ndEdition",
"intrigue1stEdition"
],
"cost": "",
"count": "0",
"types": [
"Start Deck"
]
},{ },{
"card_tag": "Trash", "card_tag": "Trash",
"cardset_tags": [ "cardset_tags": [

View File

@ -485,6 +485,12 @@
"name": "Medák", "name": "Medák",
"untranslated": "description, extra" "untranslated": "description, extra"
}, },
"Start Deck": {
"description": "Player's starting deck of cards:<n>7 Copper cards<n>3 Estate cards",
"extra": "",
"name": "Player Start Deck",
"untranslated": "description, extra, name"
},
"Trash": { "Trash": {
"description": "Pile of trash.", "description": "Pile of trash.",
"extra": "", "extra": "",

View File

@ -26,6 +26,7 @@
"Shelter": "Shelter", "Shelter": "Shelter",
"Shelters": "Shelters", "Shelters": "Shelters",
"Spirit": "Spirit", "Spirit": "Spirit",
"Start Deck": "Start Deck",
"State": "State", "State": "State",
"Trash": "Trash", "Trash": "Trash",
"Traveller": "Traveller", "Traveller": "Traveller",

View File

@ -424,6 +424,12 @@
"name": "Silber", "name": "Silber",
"untranslated": "extra" "untranslated": "extra"
}, },
"Start Deck": {
"description": "Player's starting deck of cards:<n>7 Copper cards<n>3 Estate cards",
"extra": "",
"name": "Player Start Deck",
"untranslated": "description, extra, name"
},
"Trash": { "Trash": {
"description": "Pile of trash.", "description": "Pile of trash.",
"extra": "", "extra": "",
@ -907,44 +913,37 @@
"Artisan": { "Artisan": {
"description": "Nimm eine Karte vom Vorrat auf die Hand, die bis zu 5 kostet.<n>Lege eine Handkarte auf deinen Nachziehstapel.", "description": "Nimm eine Karte vom Vorrat auf die Hand, die bis zu 5 kostet.<n>Lege eine Handkarte auf deinen Nachziehstapel.",
"extra": "Nimm eine Karte vom Vorrat, die zu diesem Zeitpunkt maximal 5 kostet.<n>Du darfst kein zusätzliches _ Coin&nbsp; einsetzen, um dir eine teurere Karte zu nehmen.<n>Außer _ Coin&nbsp; darf die Karte keine zusätzlichen Kosten enthalten.<n>Du darfst dir zum Beispiel keine Karte mit Trank (aus Alchemie) oder Schulden (aus Empires) in den Kosten nehmen.<n>Die genommene Karte nimmst du direkt auf die Hand.<n>Anschließend legst du eine beliebige Handkarte (das kann die gerade genommene oder eine andere sein) oben auf deinen Nachziehstapel.", "extra": "Nimm eine Karte vom Vorrat, die zu diesem Zeitpunkt maximal 5 kostet.<n>Du darfst kein zusätzliches _ Coin&nbsp; einsetzen, um dir eine teurere Karte zu nehmen.<n>Außer _ Coin&nbsp; darf die Karte keine zusätzlichen Kosten enthalten.<n>Du darfst dir zum Beispiel keine Karte mit Trank (aus Alchemie) oder Schulden (aus Empires) in den Kosten nehmen.<n>Die genommene Karte nimmst du direkt auf die Hand.<n>Anschließend legst du eine beliebige Handkarte (das kann die gerade genommene oder eine andere sein) oben auf deinen Nachziehstapel.",
"name": "Töpferei" "name": "Töpferei"
}, },
"Bandit": { "Bandit": {
"description": "Nimm ein Gold vom Vorrat.<n>Jeder Mitspieler deckt die obersten 2 Karten seines Nachziehstapels auf, entsorgt eine aufgedeckte Geldkarte nach seiner Wahl außer Kupfer und legt den Rest ab.", "description": "Nimm ein Gold vom Vorrat.<n>Jeder Mitspieler deckt die obersten 2 Karten seines Nachziehstapels auf, entsorgt eine aufgedeckte Geldkarte nach seiner Wahl außer Kupfer und legt den Rest ab.",
"extra": "Zuerst nimmst du ein Gold vom Vorrat und legst es auf deinen Ablagestapel.<n>Dann deckt jeder Mitspieler beginnend bei deinem linken Mitspieler die obersten zwei Karten seines Nachziehstapels auf.<n>Deckt ein Spieler zwei Geldkarten (auch ggf. kombinierte) außer Kupfer auf, muss er eine davon entsorgen.<n>Dabei darf er selbst entscheiden, welche Geldkarte er entsorgt.<n>Die andere Geldkarte wird genauso wie alle anderen Karten abgelegt.<n>Deckt ein Spieler eine Geldkarte außer Kupfer sowie eine andere Karte (z.B. ein Kupfer oder eine beliebige Aktionskarte) auf, wird diese Geldkarte entsorgt.<n>Die andere aufgedeckte Karte wird abgelegt.", "extra": "Zuerst nimmst du ein Gold vom Vorrat und legst es auf deinen Ablagestapel.<n>Dann deckt jeder Mitspieler beginnend bei deinem linken Mitspieler die obersten zwei Karten seines Nachziehstapels auf.<n>Deckt ein Spieler zwei Geldkarten (auch ggf. kombinierte) außer Kupfer auf, muss er eine davon entsorgen.<n>Dabei darf er selbst entscheiden, welche Geldkarte er entsorgt.<n>Die andere Geldkarte wird genauso wie alle anderen Karten abgelegt.<n>Deckt ein Spieler eine Geldkarte außer Kupfer sowie eine andere Karte (z.B. ein Kupfer oder eine beliebige Aktionskarte) auf, wird diese Geldkarte entsorgt.<n>Die andere aufgedeckte Karte wird abgelegt.",
"name": "Banditin" "name": "Banditin"
}, },
"Harbinger": { "Harbinger": {
"description": "+1 Karte<br>+1 Aktion<n>Sieh deinen Ablagestapel durch.<n>Du darfst eine Karte daraus auf deinen Nachziehstapel legen.", "description": "+1 Karte<br>+1 Aktion<n>Sieh deinen Ablagestapel durch.<n>Du darfst eine Karte daraus auf deinen Nachziehstapel legen.",
"extra": "Du ziehst 1 Karte und erhälst +1 Aktion.<n> Schau dir deinen Ablagestapel an.<n>Du darfst eine Karte daraus auswählen und oben auf deinen Nachziehstapel legen. Die restlichen Karten (oder alle) legst du in beliebiger Reihenfolge zurück auf den Ablagestapel.<n>Ist dein Ablagestapel leer, passiert nichts.", "extra": "Du ziehst 1 Karte und erhälst +1 Aktion.<n> Schau dir deinen Ablagestapel an.<n>Du darfst eine Karte daraus auswählen und oben auf deinen Nachziehstapel legen. Die restlichen Karten (oder alle) legst du in beliebiger Reihenfolge zurück auf den Ablagestapel.<n>Ist dein Ablagestapel leer, passiert nichts.",
"name": "Vorbotin" "name": "Vorbotin"
}, },
"Merchant": { "Merchant": {
"description": "+1 Karte<br>+1 Aktion<n>Spielst du in diesem Zug das erste Mal ein Silber aus: +1 Geld", "description": "+1 Karte<br>+1 Aktion<n>Spielst du in diesem Zug das erste Mal ein Silber aus: +1 Geld",
"extra": "Du ziehst 1 Karte und erhälst +1 Aktion.<n>Wenn du in diesem Zug vor dem Ausspielen dieser Händlerin noch kein Silber ausgespielt hast, erhälst du für das erste danach ausgespielte Silber +1 Geld.<n>Für jedes weitere ausgespielte Silber erhälst du keinen zusätzlichen Bonus.<n>Hast du mehrere Händlerinnen ausgespielt, erhälst du pro Händlerin +1 Geld.", "extra": "Du ziehst 1 Karte und erhälst +1 Aktion.<n>Wenn du in diesem Zug vor dem Ausspielen dieser Händlerin noch kein Silber ausgespielt hast, erhälst du für das erste danach ausgespielte Silber +1 Geld.<n>Für jedes weitere ausgespielte Silber erhälst du keinen zusätzlichen Bonus.<n>Hast du mehrere Händlerinnen ausgespielt, erhälst du pro Händlerin +1 Geld.",
"name": "Händlerin" "name": "Händlerin"
}, },
"Poacher": { "Poacher": {
"description": "+1 Karte<br>+1 Aktion<br>+1 Geld<n>Lege pro leerem Vorratsstapel eine Handkarte ab.", "description": "+1 Karte<br>+1 Aktion<br>+1 Geld<n>Lege pro leerem Vorratsstapel eine Handkarte ab.",
"extra": "Du ziehst 1 Karte, erhältst + 1 Aktion und + 1 Geld.<n>Dann schaust du, wie viele Vorratsstapel (Fluch-, Geld-, Punkte- und Aktionskarten, ggf. Ruinenkarten etc.) bereits leer sind.<n>Ist kein Stapel leer, musst du keine Handkarten ablegen.<n>Ist ein Stapel leer, legst du 1 Handkarte ab usw.<n>Wenn du nicht so viele Karten auf der Hand hast, wie Vorratsstapel leer sind, legst du so viele Karten ab, wie du kannst.", "extra": "Du ziehst 1 Karte, erhältst + 1 Aktion und + 1 Geld.<n>Dann schaust du, wie viele Vorratsstapel (Fluch-, Geld-, Punkte- und Aktionskarten, ggf. Ruinenkarten etc.) bereits leer sind.<n>Ist kein Stapel leer, musst du keine Handkarten ablegen.<n>Ist ein Stapel leer, legst du 1 Handkarte ab usw.<n>Wenn du nicht so viele Karten auf der Hand hast, wie Vorratsstapel leer sind, legst du so viele Karten ab, wie du kannst.",
"name": "Wilddiebin" "name": "Wilddiebin"
}, },
"Sentry": { "Sentry": {
"description": "+1 Karte<br>+1 Aktion<n>Sieh dir die obersten 2 Karten deines Nachziehstapels an.<n>Entsorge und/oder lege beliebig viele davon ab.<n>Lege die übrigen Karten in beliebiger Reihenfolge auf deinen Nachziehstapel zurück.", "description": "+1 Karte<br>+1 Aktion<n>Sieh dir die obersten 2 Karten deines Nachziehstapels an.<n>Entsorge und/oder lege beliebig viele davon ab.<n>Lege die übrigen Karten in beliebiger Reihenfolge auf deinen Nachziehstapel zurück.",
"extra": "Du ziehst 1 Karte und erhältst +1 Aktion.<n>Dann siehst du dir die obersten 2 Karten deines Nachziehstapels an.<n>Du kannst beide Karten entsorgen, beide Karten ablegen oder sie in beliebiger Reihenfolge zurück auf den Nachziehstapel legen.<n>Du kannst aber auch eine entsorgen und eine ablegen, oder eine entsorgen und die andere zurück auf den Nachziehstapel legen, oder eine ablegen und die andere zurücklegen.", "extra": "Du ziehst 1 Karte und erhältst +1 Aktion.<n>Dann siehst du dir die obersten 2 Karten deines Nachziehstapels an.<n>Du kannst beide Karten entsorgen, beide Karten ablegen oder sie in beliebiger Reihenfolge zurück auf den Nachziehstapel legen.<n>Du kannst aber auch eine entsorgen und eine ablegen, oder eine entsorgen und die andere zurück auf den Nachziehstapel legen, oder eine ablegen und die andere zurücklegen.",
"name": "Torwächterin" "name": "Torwächterin"
}, },
"Vassal": { "Vassal": {
"description": "+2 Geld<n>Lege die oberste Karte deines Nachziehstapels ab.<n>Ist es eine Aktionskarte, darfst du sie ausspielen.", "description": "+2 Geld<n>Lege die oberste Karte deines Nachziehstapels ab.<n>Ist es eine Aktionskarte, darfst du sie ausspielen.",
"extra": "Ist die aufgedeckte Karte eine Aktionskarte (auch ggf. kombinierte), darfst du sie sofort ausspielen.<n>Wenn du sie ausspielst, legst du sie in deinen Spielbereich und führst sofort die Anweisungen darauf aus.<n>Dafür benötigst du keine zusätzliche Aktion.<n>Das Ausspielen der Aktionskarte verbraucht auch keine freie oder zusätzliche Aktion, die du durch das Ausspielen anderer Karten bereits gesammelt hast.", "extra": "Ist die aufgedeckte Karte eine Aktionskarte (auch ggf. kombinierte), darfst du sie sofort ausspielen.<n>Wenn du sie ausspielst, legst du sie in deinen Spielbereich und führst sofort die Anweisungen darauf aus.<n>Dafür benötigst du keine zusätzliche Aktion.<n>Das Ausspielen der Aktionskarte verbraucht auch keine freie oder zusätzliche Aktion, die du durch das Ausspielen anderer Karten bereits gesammelt hast.",
"name": "Vasall" "name": "Vasall"
}, },
"Advance": { "Advance": {
"description": "You may trash an Action card from your hand. If you do, gain an Action card costing up to 6 Coins.", "description": "You may trash an Action card from your hand. If you do, gain an Action card costing up to 6 Coins.",
@ -1671,44 +1670,37 @@
"Courtier": { "Courtier": {
"description": "Decke eine Handkarte auf.<n>Für jeden Kartentyp (Aktion, Angriff ...), den sie hat, wähle eine andere Option:<br>+1 Aktion<br>+1 Kauf<br>+3 Geld oder<br>nimm ein Gold vom Vorrat.", "description": "Decke eine Handkarte auf.<n>Für jeden Kartentyp (Aktion, Angriff ...), den sie hat, wähle eine andere Option:<br>+1 Aktion<br>+1 Kauf<br>+3 Geld oder<br>nimm ein Gold vom Vorrat.",
"extra": "Decke eine Karte aus deiner Hand auf.<n>Zähle dann die Typen, denen diese Karte angehört also AKTION, GELD, REAKTION, ANGRIFF, PUNKTE, FLUCH etc.<n>Pro Typ, dem die Karte angehört, entscheidest du dich für eine der vier angegebenen Optionen. Dabei darfst du keine der Optionen doppelt auswählen.<n>Wenn du zum Beispiel eine PATROUILLE (AKTION) aufdeckst, darfst du eine Option auswählen, deckst du einen KARAWANENWÄCHTER aus Abenteuer (AKTION DAUER REAKTION) auf, darfst du 3 unterschiedliche Optionen wählen.<n>Entscheidest du dich für das Gold, legst du dieses auf den Ablagestapel.<n>Kannst du keine Handkarte aufdecken, erhältst du nichts.", "extra": "Decke eine Karte aus deiner Hand auf.<n>Zähle dann die Typen, denen diese Karte angehört also AKTION, GELD, REAKTION, ANGRIFF, PUNKTE, FLUCH etc.<n>Pro Typ, dem die Karte angehört, entscheidest du dich für eine der vier angegebenen Optionen. Dabei darfst du keine der Optionen doppelt auswählen.<n>Wenn du zum Beispiel eine PATROUILLE (AKTION) aufdeckst, darfst du eine Option auswählen, deckst du einen KARAWANENWÄCHTER aus Abenteuer (AKTION DAUER REAKTION) auf, darfst du 3 unterschiedliche Optionen wählen.<n>Entscheidest du dich für das Gold, legst du dieses auf den Ablagestapel.<n>Kannst du keine Handkarte aufdecken, erhältst du nichts.",
"name": "Höflinge" "name": "Höflinge"
}, },
"Diplomat": { "Diplomat": {
"description": "+2 Karten<br>Hast du nach dem Ziehen 5 oder weniger Handkarten: +2 Aktionen.<line>Wenn ein Mitspieler eine Angriffskarte ausspielt und du mindestens 5 Handkarten hast, darfst du diese Karte aus deiner Hand aufdecken.<n>Wenn du das tust: Ziehe 2 Karten und lege dann 3 Karten ab.", "description": "+2 Karten<br>Hast du nach dem Ziehen 5 oder weniger Handkarten: +2 Aktionen.<line>Wenn ein Mitspieler eine Angriffskarte ausspielt und du mindestens 5 Handkarten hast, darfst du diese Karte aus deiner Hand aufdecken.<n>Wenn du das tust: Ziehe 2 Karten und lege dann 3 Karten ab.",
"extra": " Diese Karte ist eine Aktions- und Reaktionskarte.<n>Wird sie als Aktion in der Aktionsphase ausgespielt, nimmst du 2 Karten.<n>Hast du dann 5 oder weniger Karten auf der Hand, erhältst du außerdem + 2 Aktionen.<n>Spielt ein Mitspieler eine Angriffskarte aus und du hast zu diesem Zeitpunkt 5 oder mehr Karten auf der Hand, darfst du diese Karte bevor der ausgespielte Angriff ausgeführt wird aus der Hand aufdecken.<n>Wenn du das tust, nimmst du diese DIPLOMATIN wieder auf die Hand, ziehst 2 Karten und legst dann 3 Karten (auch möglich inklusive dieser DIPLOMATIN) ab.<n>Hast du dann immer noch 5 oder mehr Karten sowie eine DIPLOMATIN auf der Hand, darfst du die DIPLOMATIN noch einmal aufdecken und dies so oft wiederholen wie du möchtest und die Bedingung der 5 oder mehr Karten auf der Hand erfüllt ist.<n>Erst dann wird der Angriff ausgeführt.<n>Hast du mehrere Reaktionskarten auf der Hand, mit denen du auf das Ausspielen einer Angriffskarte reagieren kannst, darfst du diese nacheinander in beliebiger Reihenfolge aufdecken.", "extra": " Diese Karte ist eine Aktions- und Reaktionskarte.<n>Wird sie als Aktion in der Aktionsphase ausgespielt, nimmst du 2 Karten.<n>Hast du dann 5 oder weniger Karten auf der Hand, erhältst du außerdem + 2 Aktionen.<n>Spielt ein Mitspieler eine Angriffskarte aus und du hast zu diesem Zeitpunkt 5 oder mehr Karten auf der Hand, darfst du diese Karte bevor der ausgespielte Angriff ausgeführt wird aus der Hand aufdecken.<n>Wenn du das tust, nimmst du diese DIPLOMATIN wieder auf die Hand, ziehst 2 Karten und legst dann 3 Karten (auch möglich inklusive dieser DIPLOMATIN) ab.<n>Hast du dann immer noch 5 oder mehr Karten sowie eine DIPLOMATIN auf der Hand, darfst du die DIPLOMATIN noch einmal aufdecken und dies so oft wiederholen wie du möchtest und die Bedingung der 5 oder mehr Karten auf der Hand erfüllt ist.<n>Erst dann wird der Angriff ausgeführt.<n>Hast du mehrere Reaktionskarten auf der Hand, mit denen du auf das Ausspielen einer Angriffskarte reagieren kannst, darfst du diese nacheinander in beliebiger Reihenfolge aufdecken.",
"name": "Diplomatin" "name": "Diplomatin"
}, },
"Lurker": { "Lurker": {
"description": "+1 Aktion<br>Wähle eins:<n>Entsorge eine Aktionskarte vom Vorrat<n>oder<n>nimm eine Aktionskarte vom Müll.", "description": "+1 Aktion<br>Wähle eins:<n>Entsorge eine Aktionskarte vom Vorrat<n>oder<n>nimm eine Aktionskarte vom Müll.",
"extra": "Die Karte, die du entsorgst oder vom Müllstapel nimmst, muss den Typ AKTION beinhalten, d.h. sie kann auch eine kombinierte Aktionskarte (z.B. Mühle) sein.<n>Genommene Karten werden auf den Ablagestapel gelegt - es sei denn, auf der Karte steht etwas anderes.<n>Wird eine Karte entsorgt, die einen speziellen Effekt beim Entsorgen hat, tritt dieser ein.", "extra": "Die Karte, die du entsorgst oder vom Müllstapel nimmst, muss den Typ AKTION beinhalten, d.h. sie kann auch eine kombinierte Aktionskarte (z.B. Mühle) sein.<n>Genommene Karten werden auf den Ablagestapel gelegt - es sei denn, auf der Karte steht etwas anderes.<n>Wird eine Karte entsorgt, die einen speziellen Effekt beim Entsorgen hat, tritt dieser ein.",
"name": "Herumtreiberin" "name": "Herumtreiberin"
}, },
"Mill": { "Mill": {
"description": "+1 Karte<br>+1 Aktion<br>Du darfst 2 Handkarten ablegen.<n>Wenn du das tust: +2 Geld.<line>1 <*VP*>", "description": "+1 Karte<br>+1 Aktion<br>Du darfst 2 Handkarten ablegen.<n>Wenn du das tust: +2 Geld.<line>1 <*VP*>",
"extra": " Diese Karte ist eine kombinierte Aktions- und Punktekarte.<n>Als Punktekarte bringt sie beim Zählen der Punkte 1 .<n>Spielst du die MÜHLE als Aktionskarte aus, ziehst du 1 Karte und erhältst + 1 Aktion.<n>Du darfst 2 Karten aus deiner Hand ablegen. Wenn du das tust, erhältst du + 2 Geld. Tust du das nicht (weil du zum Beispiel nicht genügend Karten auf der Hand hast), erhältst du nichts.<n>Nur, wenn du nicht mehr als eine Karte auf der Hand hast, darfst du genau eine Karte ablegen, erhältst dafür aber kein Geld.", "extra": " Diese Karte ist eine kombinierte Aktions- und Punktekarte.<n>Als Punktekarte bringt sie beim Zählen der Punkte 1 .<n>Spielst du die MÜHLE als Aktionskarte aus, ziehst du 1 Karte und erhältst + 1 Aktion.<n>Du darfst 2 Karten aus deiner Hand ablegen. Wenn du das tust, erhältst du + 2 Geld. Tust du das nicht (weil du zum Beispiel nicht genügend Karten auf der Hand hast), erhältst du nichts.<n>Nur, wenn du nicht mehr als eine Karte auf der Hand hast, darfst du genau eine Karte ablegen, erhältst dafür aber kein Geld.",
"name": "Mühle" "name": "Mühle"
}, },
"Patrol": { "Patrol": {
"description": "+3 Karten<n>Decke die obersten 4 Karten deines Nachziehstapels auf.<n>Nimm alle aufgedeckten Punkte- und Fluchkarten auf die Hand.<n>Lege die übrigen Karten in beliebiger Reihenfolge auf deinen Nachziehstapel zurück.", "description": "+3 Karten<n>Decke die obersten 4 Karten deines Nachziehstapels auf.<n>Nimm alle aufgedeckten Punkte- und Fluchkarten auf die Hand.<n>Lege die übrigen Karten in beliebiger Reihenfolge auf deinen Nachziehstapel zurück.",
"extra": "Ziehe zuerst 3 Karten.<n>Decke dann die obersten 4 Karten deines Nachziehstapels auf.<n>So aufgedeckte Punktekarten (auch ggf. kombinierte) und Flüche nimmst du alle auf die Hand.<n>Die restlichen Karten legst du in beliebiger Reihenfolge zurück auf den Nachziehstapel.", "extra": "Ziehe zuerst 3 Karten.<n>Decke dann die obersten 4 Karten deines Nachziehstapels auf.<n>So aufgedeckte Punktekarten (auch ggf. kombinierte) und Flüche nimmst du alle auf die Hand.<n>Die restlichen Karten legst du in beliebiger Reihenfolge zurück auf den Nachziehstapel.",
"name": "Patrouille" "name": "Patrouille"
}, },
"Replace": { "Replace": {
"description": "Entsorge eine Handkarte.<n>Nimm eine Karte vom Vorrat, die bis zu 2 Geld mehr kostet als die entsorgte Karte.<n>Ist die genommene Karte eine Aktions- oder Geldkarte, lege sie auf deinen Nachziehstapel.<n>Ist es eine Punktekarte, nimmt jeder Mitspieler einen Fluch vom Vorrat.", "description": "Entsorge eine Handkarte.<n>Nimm eine Karte vom Vorrat, die bis zu 2 Geld mehr kostet als die entsorgte Karte.<n>Ist die genommene Karte eine Aktions- oder Geldkarte, lege sie auf deinen Nachziehstapel.<n>Ist es eine Punktekarte, nimmt jeder Mitspieler einen Fluch vom Vorrat.",
"extra": "Entsorge zuerst eine Karte aus deiner Hand.<n>Dann nimmst du dir eine Karte vom Vorrat, die maximal 2 Geld mehr kostet als die entsorgte Karte.<n>Eine Karte kostet nur dann maximal 2 Geld mehr, wenn die restlichen Kosten (z.B. Schulden aus Empires oder Trank aus Alchemie) gleich oder niedriger sind.<n>Wenn die genommene Karte eine Aktions- und/oder Geldkarte ist, legst du die Karte oben auf deinen Nachziehstapel.<n>Ansonsten legst du die Karte auf den Ablagestapel.<n>Ist die genommene Karte eine Punktekarte, nimmt sich jeder Mitspieler beginnend bei deinem linken Mitspieler einen Fluch.<n>Ist die genommene Karte eine Punktekarte sowie eine Aktions- oder Geldkarte (z.B. MÜHLE), legst du die Karte oben auf deinen Nachziehstapel und jeder Mitspieler muss sich einen Fluch nehmen.", "extra": "Entsorge zuerst eine Karte aus deiner Hand.<n>Dann nimmst du dir eine Karte vom Vorrat, die maximal 2 Geld mehr kostet als die entsorgte Karte.<n>Eine Karte kostet nur dann maximal 2 Geld mehr, wenn die restlichen Kosten (z.B. Schulden aus Empires oder Trank aus Alchemie) gleich oder niedriger sind.<n>Wenn die genommene Karte eine Aktions- und/oder Geldkarte ist, legst du die Karte oben auf deinen Nachziehstapel.<n>Ansonsten legst du die Karte auf den Ablagestapel.<n>Ist die genommene Karte eine Punktekarte, nimmt sich jeder Mitspieler beginnend bei deinem linken Mitspieler einen Fluch.<n>Ist die genommene Karte eine Punktekarte sowie eine Aktions- oder Geldkarte (z.B. MÜHLE), legst du die Karte oben auf deinen Nachziehstapel und jeder Mitspieler muss sich einen Fluch nehmen.",
"name": "Austausch" "name": "Austausch"
}, },
"Secret Passage": { "Secret Passage": {
"description": "+2 Karten<br>+1 Aktion<n>Lege eine Handkarte an eine beliebige Stelle in deinen Nachziehstapel.", "description": "+2 Karten<br>+1 Aktion<n>Lege eine Handkarte an eine beliebige Stelle in deinen Nachziehstapel.",
"extra": "Du ziehst 2 Karten und erhältst +1 Aktion.<n>Dann nimmst du eine beliebige Karte aus deiner Hand (auch ggf. eine, die du gerade gezogen hast) und legst sie an eine beliebige Stelle in deinen Nachziehstapel.<n>Du darfst sie oben drauf, unten drunter oder irgendwo in die Mitte legen.<n>Du darfst dabei die Karten deines Nachziehstapels zählen, aber nicht ansehen.<n>Befinden sich keine Karten in deinem Nachziehstapel, wird die zurückgelegte Karte zur einzigen Karte in deinem Nachziehstapel.", "extra": "Du ziehst 2 Karten und erhältst +1 Aktion.<n>Dann nimmst du eine beliebige Karte aus deiner Hand (auch ggf. eine, die du gerade gezogen hast) und legst sie an eine beliebige Stelle in deinen Nachziehstapel.<n>Du darfst sie oben drauf, unten drunter oder irgendwo in die Mitte legen.<n>Du darfst dabei die Karten deines Nachziehstapels zählen, aber nicht ansehen.<n>Befinden sich keine Karten in deinem Nachziehstapel, wird die zurückgelegte Karte zur einzigen Karte in deinem Nachziehstapel.",
"name": "Geheimgang" "name": "Geheimgang"
}, },
"Bad Omens": { "Bad Omens": {
"description": "Put your deck into your discard pile. Look through it and put 2 Coppers from it onto your deck (or reveal you can't.)", "description": "Put your deck into your discard pile. Look through it and put 2 Coppers from it onto your deck (or reveal you can't.)",

View File

@ -26,6 +26,7 @@
"Shelter": "Unterschlupf", "Shelter": "Unterschlupf",
"Shelters": "Unterschlüpfe", "Shelters": "Unterschlüpfe",
"Spirit": "Spirit", "Spirit": "Spirit",
"Start Deck": "Start Deck",
"State": "State", "State": "State",
"Trash": "Müll", "Trash": "Müll",
"Traveller": "Reisender", "Traveller": "Reisender",

View File

@ -404,6 +404,11 @@
"extra": "40 cards per game.", "extra": "40 cards per game.",
"name": "Silver" "name": "Silver"
}, },
"Start Deck": {
"description": "Player's starting deck of cards:<n>7 Copper cards<n>3 Estate cards",
"extra": "",
"name": "Player Start Deck"
},
"Trash": { "Trash": {
"description": "Pile of trash.", "description": "Pile of trash.",
"extra": "", "extra": "",

View File

@ -26,6 +26,7 @@
"Shelter": "Shelter", "Shelter": "Shelter",
"Shelters": "Shelters", "Shelters": "Shelters",
"Spirit": "Spirit", "Spirit": "Spirit",
"Start Deck": "Start Deck",
"State": "State", "State": "State",
"Trash": "Trash", "Trash": "Trash",
"Traveller": "Traveller", "Traveller": "Traveller",

View File

@ -420,6 +420,12 @@
"extra": "40 cartes par partie.", "extra": "40 cartes par partie.",
"name": "Argent" "name": "Argent"
}, },
"Start Deck": {
"description": "Player's starting deck of cards:<n>7 Copper cards<n>3 Estate cards",
"extra": "",
"name": "Player Start Deck",
"untranslated": "description, extra, name"
},
"Trash": { "Trash": {
"description": "Pile du rebut.", "description": "Pile du rebut.",
"extra": "", "extra": "",
@ -2736,4 +2742,3 @@
"untranslated": "description, extra, name" "untranslated": "description, extra, name"
} }
} }

View File

@ -26,6 +26,7 @@
"Shelter": "Refuge", "Shelter": "Refuge",
"Shelters": "Refuges", "Shelters": "Refuges",
"Spirit": "Spirit", "Spirit": "Spirit",
"Start Deck": "Start Deck",
"State": "State", "State": "State",
"Trash": "Rebut", "Trash": "Rebut",
"Traveller": "Itinérant", "Traveller": "Itinérant",

View File

@ -465,6 +465,12 @@
"extra": " 40 carte per partita.", "extra": " 40 carte per partita.",
"name": "Argento" "name": "Argento"
}, },
"Start Deck": {
"description": "Player's starting deck of cards:<n>7 Copper cards<n>3 Estate cards",
"extra": "",
"name": "Player Start Deck",
"untranslated": "description, extra, name"
},
"Trash": { "Trash": {
"description": "Pila delle carte eliminate.", "description": "Pila delle carte eliminate.",
"extra": "", "extra": "",

View File

@ -26,6 +26,7 @@
"Shelter": "Shelter", "Shelter": "Shelter",
"Shelters": "Shelters", "Shelters": "Shelters",
"Spirit": "Spirit", "Spirit": "Spirit",
"Start Deck": "Start Deck",
"State": "State", "State": "State",
"Trash": "Trash", "Trash": "Trash",
"Traveller": "Traveller", "Traveller": "Traveller",

View File

@ -410,6 +410,12 @@
"extra": " 40 kaarten per spel.", "extra": " 40 kaarten per spel.",
"name": "Zilver" "name": "Zilver"
}, },
"Start Deck": {
"description": "Player's starting deck of cards:<n>7 Copper cards<n>3 Estate cards",
"extra": "",
"name": "Player Start Deck",
"untranslated": "description, extra, name"
},
"Trash": { "Trash": {
"description": "stapel van vernietigde kaarten.", "description": "stapel van vernietigde kaarten.",
"extra": "", "extra": "",

View File

@ -26,6 +26,7 @@
"Shelter": "Onderdak", "Shelter": "Onderdak",
"Shelters": "Onderdakkaarten", "Shelters": "Onderdakkaarten",
"Spirit": "Spirit", "Spirit": "Spirit",
"Start Deck": "Start Deck",
"State": "State", "State": "State",
"Trash": "Vernietigde Kaarten", "Trash": "Vernietigde Kaarten",
"Traveller": "Traveller", "Traveller": "Traveller",

View File

@ -48,6 +48,7 @@
"latest" "latest"
], ],
"image": "", "image": "",
"no_randomizer": true,
"set_name": "*base*", "set_name": "*base*",
"set_text": "", "set_text": "",
"text_icon": "*" "text_icon": "*"

View File

@ -391,6 +391,14 @@
"defaultCardCount": 0, "defaultCardCount": 0,
"tabCostHeightOffset": -1, "tabCostHeightOffset": -1,
"tabTextHeightOffset": 0 "tabTextHeightOffset": 0
},{
"card_type": [
"Start Deck"
],
"card_type_image": "action.png",
"defaultCardCount": 0,
"tabCostHeightOffset": -1,
"tabTextHeightOffset": 0
},{ },{
"card_type": [ "card_type": [
"State" "State"

View File

@ -485,6 +485,12 @@
"name": "Silver", "name": "Silver",
"untranslated": "description, extra, name" "untranslated": "description, extra, name"
}, },
"Start Deck": {
"description": "Player's starting deck of cards:<n>7 Copper cards<n>3 Estate cards",
"extra": "",
"name": "Player Start Deck",
"untranslated": "description, extra, name"
},
"Trash": { "Trash": {
"description": "Pile of trash.", "description": "Pile of trash.",
"extra": "", "extra": "",

View File

@ -26,6 +26,7 @@
"Shelter": "Shelter", "Shelter": "Shelter",
"Shelters": "Shelters", "Shelters": "Shelters",
"Spirit": "Spirit", "Spirit": "Spirit",
"Start Deck": "Start Deck",
"State": "State", "State": "State",
"Trash": "Trash", "Trash": "Trash",
"Traveller": "Traveller", "Traveller": "Traveller",

View File

@ -50,19 +50,19 @@ class Card(object):
self.image = image self.image = image
self.text_icon = text_icon self.text_icon = text_icon
self.cardset_tag = cardset_tag self.cardset_tag = cardset_tag
if count < 0: self.setCardCount(count)
self.count = [self.getType().getTypeDefaultCardCount()]
elif count == 0:
self.count = []
else:
self.count = [int(count)]
self.randomizer = randomizer self.randomizer = randomizer
def getCardCount(self): def getCardCount(self):
return sum(i for i in self.count) return sum(i for i in self.count)
def setCardCount(self, value): def setCardCount(self, value):
self.count = value if value < 0:
self.count = [self.getType().getTypeDefaultCardCount()]
elif value == 0:
self.count = []
else:
self.count = [int(value)]
def addCardCount(self, value): def addCardCount(self, value):
self.count.extend(value) self.count.extend(value)

View File

@ -293,6 +293,21 @@ def parse_opts(cmdline_args=None):
action="store_true", action="store_true",
help="Group cards that generally are used together " help="Group cards that generally are used together "
"(e.g., Shelters, Tournament and Prizes, Urchin/Mercenary, etc.).") "(e.g., Shelters, Tournament and Prizes, Urchin/Mercenary, etc.).")
group_select.add_argument(
"--no-trash",
action="store_true",
dest="no_trash",
help="Exclude Trash from cards.")
group_select.add_argument(
"--curse10",
action="store_true",
dest="curse10",
help="Package Curse cards into groups of ten cards.")
group_select.add_argument(
"--start-decks",
action="store_true",
dest="start_decks",
help="Include four start decks with the Base cards.")
group_select.add_argument( group_select.add_argument(
"--include-blanks", "--include-blanks",
action="store_true", action="store_true",
@ -541,6 +556,32 @@ def get_resource_stream(path):
return codecs.EncodedFile(pkg_resources.resource_stream('domdiv', path), "utf-8") return codecs.EncodedFile(pkg_resources.resource_stream('domdiv', path), "utf-8")
def find_index_of_object(lst=[], attributes={}):
# Returns the index of the first object in lst that matches the given attributes. Otherwise returns None.
# attributes is a dict of key: value pairs. Object attributes that are lists are checked to have value in them.
for i, d in enumerate(lst):
# Set match to false just in case there are no attributes.
match = False
for key, value in attributes.iteritems():
# if anything does not match, then break out and start the next one.
match = hasattr(d, key)
if match:
test = getattr(d, key, None)
if type(test) is list:
match = value in test
else:
match = value == test
if not match:
break
if match:
# If all the attributes are found, then we have a match
return i
# nothing matched
return None
def read_card_data(options): def read_card_data(options):
# Read in the card types # Read in the card types
@ -576,6 +617,72 @@ def read_card_data(options):
Card.sets[s]['no_randomizer'] = Card.sets[s].get('no_randomizer', False) Card.sets[s]['no_randomizer'] = Card.sets[s].get('no_randomizer', False)
Card.sets[s]['fan'] = Card.sets[s].get('fan', False) Card.sets[s]['fan'] = Card.sets[s].get('fan', False)
# Remove the Trash card. Do early before propagating to various sets.
if options.no_trash:
i = find_index_of_object(cards, {'card_tag': 'Trash'})
if i is not None:
del cards[i]
# Repackage Curse cards into 10 per divider. Do early before propagating to various sets.
if options.curse10:
i = find_index_of_object(cards, {'card_tag': 'Curse'})
if i is not None:
new_cards = []
cards_remaining = cards[i].getCardCount()
while cards_remaining > 10:
# make a new copy of the card and set count to 10
new_card = copy.deepcopy(cards[i])
new_card.setCardCount(10)
new_cards.append(new_card)
cards_remaining -= 10
# Adjust original Curse card to the remaining cards (should be 10)
cards[i].setCardCount(cards_remaining)
# Add the new dividers
cards.extend(new_cards)
# Create Start Deck dividers. 4 sets. Adjust totals for other cards, too.
# Do early before propagating to various sets.
# The card database contains one prototype divider that needs to be either duplicated or deleted.
if options.start_decks:
# Find the index to the individual cards that need changed in the cards list
StartDeck_index = find_index_of_object(cards, {'card_tag': 'Start Deck'})
Copper_index = find_index_of_object(cards, {'card_tag': 'Copper'})
Estate_index = find_index_of_object(cards, {'card_tag': 'Estate'})
if Copper_index is None or Estate_index is None or StartDeck_index is None:
# Something is wrong, can't find one or more of the cards that need to change
print "Error - cannot create Start Decks"
# Remove the Start Deck prototype if we can
if StartDeck_index is not None:
del cards[StartDeck_index]
else:
# Start Deck Constants
STARTDECK_COPPERS = 7
STARTDECK_ESTATES = 3
STARTDECK_NUMBER = 4
# Add correct card counts to Start Deck prototype. This will be used to make copies.
cards[StartDeck_index].setCardCount(STARTDECK_COPPERS)
cards[StartDeck_index].addCardCount([int(STARTDECK_ESTATES)])
# Make new Start Deck Dividers and adjust the corresponding card counts
for x in range(0, STARTDECK_NUMBER):
# Add extra copies of the Start Deck prototype.
# But don't need to add the first one again, since the prototype is already there.
if x > 0:
cards.append(copy.deepcopy(cards[StartDeck_index]))
# Note: By appending, it should not change any of the index values being used
# Remove Copper and Estate card counts from their dividers
cards[Copper_index].setCardCount(cards[Copper_index].getCardCount() - STARTDECK_COPPERS)
cards[Estate_index].setCardCount(cards[Estate_index].getCardCount() - STARTDECK_ESTATES)
else:
# Remove Start Deck prototype. It is not needed.
StartDeck_index = find_index_of_object(cards, {'card_tag': 'Start Deck'})
if StartDeck_index is not None:
del cards[StartDeck_index]
# Set cardset_tag and expand cards that are used in multiple sets # Set cardset_tag and expand cards that are used in multiple sets
new_cards = [] new_cards = []
for card in cards: for card in cards:
@ -613,7 +720,7 @@ class CardSorter(object):
self.baseOrder = ['Copper', 'Silver', 'Gold', 'Platinum', 'Potion', self.baseOrder = ['Copper', 'Silver', 'Gold', 'Platinum', 'Potion',
'Curse', 'Estate', 'Duchy', 'Province', 'Colony', 'Curse', 'Estate', 'Duchy', 'Province', 'Colony',
'Trash'] 'Trash', 'Start Deck']
self.baseCards = [] self.baseCards = []
for tag in self.baseOrder: for tag in self.baseOrder:
if tag in baseCards: if tag in baseCards:

View File

@ -22,10 +22,12 @@ def rmtestcardb(request):
def test_cardread(): def test_cardread():
cardsExpected = 524
options = main.parse_opts([]) options = main.parse_opts([])
options.data_path = '.' options.data_path = '.'
cards = main.read_card_data(options) cards = main.read_card_data(options)
assert len(cards) == 524 assert len(cards) == cardsExpected
valid_cardsets = { valid_cardsets = {
u'base', u'base',
u'dominion1stEdition', u'dominion1stEdition',
@ -57,6 +59,13 @@ def test_cardread():
assert isinstance(c, domdiv_cards.Card) assert isinstance(c, domdiv_cards.Card)
assert c.cardset_tag in valid_cardsets assert c.cardset_tag in valid_cardsets
# Option modified card count
options = main.parse_opts(['--no-trash', '--curse10', '--start-decks'])
options.data_path = '.'
cards = main.read_card_data(options)
# Total delta cards is +21 from Trash: -1 * 3 sets = -3; Curse: +2 * 4 sets =+8; Start Decks: +4 * 4 sets = +16
assert len(cards) == cardsExpected + 21
def test_languages(): def test_languages():
languages = main.get_languages('card_db') languages = main.get_languages('card_db')