PySolFC Home
diff --git a/html-src/solitaire_wizard.html b/html-src/solitaire_wizard.html
new file mode 100644
index 00000000..97548055
--- /dev/null
+++ b/html-src/solitaire_wizard.html
@@ -0,0 +1,95 @@
+Solitaire Wizard
+
+The Solitaire Wizard is a feature in PySol that allows you to create and play
+custom solitaire games.
+
+Also note that the Solitaire Wizard may not be enabled in mobile versions of
+PySol.
+
+Below are the different options you can set when using the Solitaire Wizard:
+
+
General
+
+- Initial Setting - The initial setting automatically configures the
+Solitaire Wizard options to match one of several sample games.
+- Name - This is the name of the game you wish to create.
+- Skill Level - Whether the game is more luck or skill. This doesn't
+affect the actual game, but is used to categorize it in PySol, and to help
+with sorting.
+- Number of Decks - The number of decks used.
+- Layout - The physical layout of the card piles. This is purely
+aesthetic and doesn't affect gameplay.
+
+
+Talon
+
+- Type - This determines when and how cards are dealt from the talon.
+Cards can be dealt either all at the beginning, to a waste pile, reserves, or
+foundations, or to the tableau, either in normal style, Spider style (don't allow
+dealing from the talon if there are empty piles), or Grounds for a Divorce style
+(do not deal to empty tableau piles).
+- Number of Redeals - How many times the player is allowed to redeal.
+In each redeal, the pile(s) where the cards from the talon are dealt are
+combined to form a new talon.
+- # of cards dealt to waste - If dealing cards from the talon to the
+waste, this indicates how many are dealt at once.
+- Shuffle during Redeal - Whether the deck should be shuffled when
+doing a redeal.
+
+
+Foundations
+
+- Type - This determines what cards can be moved to the foundations.
+Foundations can be built by same suit, same color, alternate color,
+any suit but the same, rank regardless of suit, or Spider style
+(move entire sequences to the foundations once complete).
+- Base Card - Which rank is used to start the foundations - either ace
+or king, or any card.
+- Direction - Whether the foundation is built up or down.
+- Move - Whether you're allowed to move the top card from a foundation.
+- First card sets base cards - If the base card is set to any, this
+indicates whether all four foundations must start with the same rank - once the
+first card is moved to the foundations, all other foundations must start from
+the same base rank.
+
+
+Tableau
+
+- Number of tableau piles - How many tableau piles there are.
+- Type - This determines how foundations are built - by same suit,
+alternate color, same color, rank regardless of suit, any suit but the same,
+up or down, Spider style (can be built regardless of suit, but only sequences
+that match the suit option can be moved as a unit), Yukon style (cards can
+be moved regardless of sequence), or no building on the tableau allowed.
+- Base Card - What card can fill an empty tableau pile.
+- Direction - Whether the tableau piles are built up or down.
+- Move - Whether sequences can be moved together, or cards can only
+be moved singly.
+- Wrapping - Whether wrapping from king to ace or ace to king is
+allowed.
+- Use "Super Move" feature - If sequences normally cannot be moved
+together, a "Super Move" allows you to move sequences regardless, if there
+are enough empty stacks/reserves to make the move normally.
+
+
+Reserves
+
+- Number of reserves - How many reserves there are.
+- Max # of accepted cards - How many cards you can move to each
+reserve.
+
+Opening deal
+
+- Type - How the cards are dealt to the tableau. Rectangular
+deals have the cards dealt relatively evenly, triangular deals involve
+each pile getting one more card than the previous, and pyramid deals are
+similar, but piles after the center one have one fewer than the previous.
+- # of face-down cards dealt to the tableau pile - How many
+cards are dealt face-down to each pile. Note that the top card of
+each tableau pile is always face-up.
+- # of cards dealt to the reserve - How many cards are dealt
+face-up to each reserve.
+- Max # of dealt cards - How many cards can be dealt from the
+talon at the start of the game at most.
+- Deal first cards to foundations - Whether the first cards are
+dealt to the foundations at the start of the game.
diff --git a/po/de_pysol.po b/po/de_pysol.po
index 69568725..428a6871 100644
--- a/po/de_pysol.po
+++ b/po/de_pysol.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: PySol 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-12-10 10:19-0500\n"
-"PO-Revision-Date: 2022-09-26 20:59-0400\n"
+"PO-Revision-Date: 2022-12-30 09:31-0500\n"
"Last-Translator: H. Schaekel \n"
"Language-Team: German\n"
"Language: de\n"
@@ -1223,6 +1223,12 @@ msgstr "Endablage. Aufwärts setzen nach Farbe"
msgid "Foundation. Build down by color."
msgstr "Endablage. Abwärts setzen nach Farbe."
+msgid "Foundation. Build up in any suit but the same."
+msgstr ""
+
+msgid "Foundation. Build down in any suit but the same."
+msgstr ""
+
#: pysollib/stack.py:2459 pysollib/games/golf.py:126 pysollib/games/golf.py:322
msgid "Tableau. No building."
msgstr "Tableau. Keine Erstellung."
@@ -1305,6 +1311,21 @@ msgstr ""
"Tableau. Aufgebaut unabhängig von der Farbe. Sequenzen von Karten in der "
"gleichen Farbe können als eine Einheit bewegt werden."
+msgid ""
+"Tableau. Build up regardless of suit. Sequences of cards in the same color "
+"can be moved as a unit."
+msgstr ""
+
+msgid ""
+"Tableau. Build up regardless of suit. Sequences of cards in any suit but the "
+"same can be moved as a unit."
+msgstr ""
+
+msgid ""
+"Tableau. Build down regardless of suit. Sequences of cards in any suit but "
+"the same can be moved as a unit."
+msgstr ""
+
#: pysollib/stack.py:2654
msgid ""
"Tableau. Build up by alternate color, can move any face-up cards regardless "
@@ -1344,6 +1365,26 @@ msgstr ""
"Tableau. Erstellt nach unten nach Farbe. Es kann jede aufgedeckte Karte "
"unabhängig der Sequenz bewegt werden."
+msgid ""
+"Tableau. Build up by color, can move any face-up cards regardless of "
+"sequence."
+msgstr ""
+
+msgid ""
+"Tableau. Build down by color, can move any face-up cards regardless of "
+"sequence."
+msgstr ""
+
+msgid ""
+"Tableau. Build up by any suit but the same, can move any face-up cards "
+"regardless of sequence."
+msgstr ""
+
+msgid ""
+"Tableau. Build down by any suit but the same, can move any face-up cards "
+"regardless of sequence."
+msgstr ""
+
#: pysollib/stack.py:2694 pysollib/stack.py:2697
msgid ""
"Tableau. Build up regardless of suit, can move any face-up cards regardless "
@@ -1368,6 +1409,9 @@ msgstr "Tableau. Aufbau nach oben oder unten im Rang."
msgid "Tableau. Build up or down regardless of suit."
msgstr "Tableau. Aufbau nach oben oder unten unabhängig von der Farbe."
+msgid "Tableau. Build up or down in any suit but the same."
+msgstr ""
+
#: pysollib/stack.py:2874
msgid "Waste."
msgstr "Zwischentalon."
@@ -1698,6 +1742,9 @@ msgstr "Anzahl der Karten in der Zwischentalon :"
msgid "Shuffle during redeal:"
msgstr "Mischen während Neudecks:"
+msgid "No building"
+msgstr ""
+
#: pysollib/wizardutil.py:176 pysollib/wizardutil.py:184
#: pysollib/wizardutil.py:224
msgid "Same suit"
@@ -1728,6 +1775,12 @@ msgstr "Spinne alternative Farbe"
msgid "Spider rank"
msgstr "Spinne Rang"
+msgid "Spider same color"
+msgstr ""
+
+msgid "Spider any suit but the same"
+msgstr ""
+
#: pysollib/wizardutil.py:191 pysollib/wizardutil.py:249
#: pysollib/wizardutil.py:252
msgid "Any"
@@ -1747,6 +1800,9 @@ msgstr "Hoch"
msgid "Down"
msgstr "Unten"
+msgid "Same rank"
+msgstr ""
+
#: pysollib/wizardutil.py:200 pysollib/wizardutil.py:259
msgid "Direction:"
msgstr "Richtung:"
@@ -1793,6 +1849,9 @@ msgstr "Oben oder unten nach Rang"
msgid "Up or down by same color"
msgstr "Oben oder unten nach gleicher Farbe"
+msgid "Up or down by any suit but the same"
+msgstr ""
+
#: pysollib/wizardutil.py:238
msgid "Yukon same suit"
msgstr "Yukon gleiche Farbe"
@@ -1805,6 +1864,12 @@ msgstr "Yukon alternative Farben"
msgid "Yukon rank"
msgstr "Yukon Rang"
+msgid "Yukon same color"
+msgstr ""
+
+msgid "Yukon any suit but the same"
+msgstr ""
+
#: pysollib/wizardutil.py:263 pysollib/wizardutil.py:264
msgid "Sequence"
msgstr "Sequenz"
@@ -1833,6 +1898,9 @@ msgstr "Triangel"
msgid "Rectangle"
msgstr "Rechteck"
+msgid "Pyramid"
+msgstr ""
+
#: pysollib/wizardutil.py:308
msgid "# of face-down cards dealt to the tableau pile:"
msgstr "Anzahl verdeckter Karten auf dem Stapel:"
diff --git a/po/fr_pysol.po b/po/fr_pysol.po
index 7ae2aa3b..62f1bd07 100644
--- a/po/fr_pysol.po
+++ b/po/fr_pysol.po
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: 1.02\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-12-10 10:19-0500\n"
-"PO-Revision-Date: 2022-09-26 20:59-0400\n"
+"PO-Revision-Date: 2022-12-30 09:31-0500\n"
"Last-Translator: Eric Rausch \n"
"Language-Team: French\n"
"Language: fr\n"
@@ -1253,6 +1253,12 @@ msgstr "Fondation. Croissant par couleur."
msgid "Foundation. Build down by color."
msgstr "Fondation. Décroissant par couleur."
+msgid "Foundation. Build up in any suit but the same."
+msgstr ""
+
+msgid "Foundation. Build down in any suit but the same."
+msgstr ""
+
#: pysollib/stack.py:2459 pysollib/games/golf.py:126 pysollib/games/golf.py:322
msgid "Tableau. No building."
msgstr "Tableau. Aucun empilement."
@@ -1335,6 +1341,21 @@ msgstr ""
"Tableau. Décroissant indépendamment de l'enseigne. Les ensembles de cartes "
"d'une même enseigne peuvent être déplacés entièrement."
+msgid ""
+"Tableau. Build up regardless of suit. Sequences of cards in the same color "
+"can be moved as a unit."
+msgstr ""
+
+msgid ""
+"Tableau. Build up regardless of suit. Sequences of cards in any suit but the "
+"same can be moved as a unit."
+msgstr ""
+
+msgid ""
+"Tableau. Build down regardless of suit. Sequences of cards in any suit but "
+"the same can be moved as a unit."
+msgstr ""
+
#: pysollib/stack.py:2654
msgid ""
"Tableau. Build up by alternate color, can move any face-up cards regardless "
@@ -1374,6 +1395,26 @@ msgstr ""
"Tableau. Décroissant par enseigne, toutes les cartes ouvertes peuvent être "
"déplacées sans former de suite."
+msgid ""
+"Tableau. Build up by color, can move any face-up cards regardless of "
+"sequence."
+msgstr ""
+
+msgid ""
+"Tableau. Build down by color, can move any face-up cards regardless of "
+"sequence."
+msgstr ""
+
+msgid ""
+"Tableau. Build up by any suit but the same, can move any face-up cards "
+"regardless of sequence."
+msgstr ""
+
+msgid ""
+"Tableau. Build down by any suit but the same, can move any face-up cards "
+"regardless of sequence."
+msgstr ""
+
#: pysollib/stack.py:2694 pysollib/stack.py:2697
msgid ""
"Tableau. Build up regardless of suit, can move any face-up cards regardless "
@@ -1398,6 +1439,9 @@ msgstr "Tableau. Croissant ou décroissant par enseigne."
msgid "Tableau. Build up or down regardless of suit."
msgstr "Tableau. Croissant ou décroissant indépendamment de l'enseigne."
+msgid "Tableau. Build up or down in any suit but the same."
+msgstr ""
+
#: pysollib/stack.py:2874
msgid "Waste."
msgstr "Défausse."
@@ -1728,6 +1772,9 @@ msgstr "Nombre de cartes sur la défausse:"
msgid "Shuffle during redeal:"
msgstr "Mélanger lors de la donne:"
+msgid "No building"
+msgstr ""
+
#: pysollib/wizardutil.py:176 pysollib/wizardutil.py:184
#: pysollib/wizardutil.py:224
msgid "Same suit"
@@ -1758,6 +1805,12 @@ msgstr "Spider - Couleur alternée"
msgid "Spider rank"
msgstr "Spider - Valeur"
+msgid "Spider same color"
+msgstr ""
+
+msgid "Spider any suit but the same"
+msgstr ""
+
#: pysollib/wizardutil.py:191 pysollib/wizardutil.py:249
#: pysollib/wizardutil.py:252
msgid "Any"
@@ -1777,6 +1830,9 @@ msgstr "Haut"
msgid "Down"
msgstr "Bas"
+msgid "Same rank"
+msgstr ""
+
#: pysollib/wizardutil.py:200 pysollib/wizardutil.py:259
msgid "Direction:"
msgstr "Direction:"
@@ -1823,6 +1879,9 @@ msgstr "Croissant ou décroissant par valeur"
msgid "Up or down by same color"
msgstr "Croissant ou décroissant par couleur"
+msgid "Up or down by any suit but the same"
+msgstr ""
+
#: pysollib/wizardutil.py:238
msgid "Yukon same suit"
msgstr "Yukon - Enseigne"
@@ -1835,6 +1894,12 @@ msgstr "Yukon - Couleur alternée"
msgid "Yukon rank"
msgstr "Yukon - Valeur"
+msgid "Yukon same color"
+msgstr ""
+
+msgid "Yukon any suit but the same"
+msgstr ""
+
#: pysollib/wizardutil.py:263 pysollib/wizardutil.py:264
msgid "Sequence"
msgstr "Suite de cartes"
@@ -1863,6 +1928,9 @@ msgstr "Triangle"
msgid "Rectangle"
msgstr "Rectangle"
+msgid "Pyramid"
+msgstr ""
+
#: pysollib/wizardutil.py:308
msgid "# of face-down cards dealt to the tableau pile:"
msgstr "# de cartes retournées au tableau:"
diff --git a/po/it_pysol.po b/po/it_pysol.po
index 393162d7..ac28be1e 100644
--- a/po/it_pysol.po
+++ b/po/it_pysol.po
@@ -12,7 +12,7 @@ msgstr ""
"Project-Id-Version: it_pysol\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-12-10 10:19-0500\n"
-"PO-Revision-Date: 2022-09-26 21:00-0400\n"
+"PO-Revision-Date: 2022-12-30 09:31-0500\n"
"Last-Translator: Giuliano Colla \n"
"Language-Team: Italiano \n"
"Language: it\n"
@@ -1261,6 +1261,12 @@ msgstr "Casa. Crescente per colore."
msgid "Foundation. Build down by color."
msgstr "Casa. Decrescente per colore."
+msgid "Foundation. Build up in any suit but the same."
+msgstr ""
+
+msgid "Foundation. Build down in any suit but the same."
+msgstr ""
+
#: pysollib/stack.py:2459 pysollib/games/golf.py:126 pysollib/games/golf.py:322
msgid "Tableau. No building."
msgstr "Tableau. Non accetta carte."
@@ -1343,6 +1349,21 @@ msgstr ""
"Tableau. Decrescente indipendentemente dal seme. Sequenze di carte dello "
"stesso seme si possono spostare in blocco."
+msgid ""
+"Tableau. Build up regardless of suit. Sequences of cards in the same color "
+"can be moved as a unit."
+msgstr ""
+
+msgid ""
+"Tableau. Build up regardless of suit. Sequences of cards in any suit but the "
+"same can be moved as a unit."
+msgstr ""
+
+msgid ""
+"Tableau. Build down regardless of suit. Sequences of cards in any suit but "
+"the same can be moved as a unit."
+msgstr ""
+
#: pysollib/stack.py:2654
msgid ""
"Tableau. Build up by alternate color, can move any face-up cards regardless "
@@ -1382,6 +1403,26 @@ msgstr ""
"Tableau. Decrescente per seme, si possono spostare le carte a faccia in su "
"indipendentemente dalla sequenza."
+msgid ""
+"Tableau. Build up by color, can move any face-up cards regardless of "
+"sequence."
+msgstr ""
+
+msgid ""
+"Tableau. Build down by color, can move any face-up cards regardless of "
+"sequence."
+msgstr ""
+
+msgid ""
+"Tableau. Build up by any suit but the same, can move any face-up cards "
+"regardless of sequence."
+msgstr ""
+
+msgid ""
+"Tableau. Build down by any suit but the same, can move any face-up cards "
+"regardless of sequence."
+msgstr ""
+
#: pysollib/stack.py:2694 pysollib/stack.py:2697
msgid ""
"Tableau. Build up regardless of suit, can move any face-up cards regardless "
@@ -1406,6 +1447,9 @@ msgstr "Tableau. Crescente o decrescente per seme."
msgid "Tableau. Build up or down regardless of suit."
msgstr "Tableau. Crescente o decrescente indipendentemente dal seme."
+msgid "Tableau. Build up or down in any suit but the same."
+msgstr ""
+
#: pysollib/stack.py:2874
msgid "Waste."
msgstr "Pozzo."
@@ -1736,6 +1780,9 @@ msgstr "Numero di carte nel pozzo:"
msgid "Shuffle during redeal:"
msgstr "Mescola nella ridistribuzione:"
+msgid "No building"
+msgstr ""
+
#: pysollib/wizardutil.py:176 pysollib/wizardutil.py:184
#: pysollib/wizardutil.py:224
msgid "Same suit"
@@ -1766,6 +1813,12 @@ msgstr "Spider alternate color"
msgid "Spider rank"
msgstr "Spider rank"
+msgid "Spider same color"
+msgstr ""
+
+msgid "Spider any suit but the same"
+msgstr ""
+
#: pysollib/wizardutil.py:191 pysollib/wizardutil.py:249
#: pysollib/wizardutil.py:252
msgid "Any"
@@ -1785,6 +1838,9 @@ msgstr "Ascendente"
msgid "Down"
msgstr "Discendente"
+msgid "Same rank"
+msgstr ""
+
#: pysollib/wizardutil.py:200 pysollib/wizardutil.py:259
msgid "Direction:"
msgstr "Direzione:"
@@ -1831,6 +1887,9 @@ msgstr "Ascendente o discendente per valore"
msgid "Up or down by same color"
msgstr "Ascendente o discendente stesso colore"
+msgid "Up or down by any suit but the same"
+msgstr ""
+
#: pysollib/wizardutil.py:238
msgid "Yukon same suit"
msgstr "Yuokon stesso seme"
@@ -1843,6 +1902,12 @@ msgstr "Yukon colori alterni"
msgid "Yukon rank"
msgstr "Yukon per valore"
+msgid "Yukon same color"
+msgstr ""
+
+msgid "Yukon any suit but the same"
+msgstr ""
+
#: pysollib/wizardutil.py:263 pysollib/wizardutil.py:264
msgid "Sequence"
msgstr "Sequenza"
@@ -1871,6 +1936,9 @@ msgstr "Triangolo"
msgid "Rectangle"
msgstr "Rettangolo"
+msgid "Pyramid"
+msgstr ""
+
#: pysollib/wizardutil.py:308
msgid "# of face-down cards dealt to the tableau pile:"
msgstr "Numero di carte coperte nel tableau:"
diff --git a/po/pl_pysol.po b/po/pl_pysol.po
index 6b0220e1..da7d4478 100644
--- a/po/pl_pysol.po
+++ b/po/pl_pysol.po
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-12-10 10:19-0500\n"
-"PO-Revision-Date: 2022-09-26 21:00-0400\n"
+"PO-Revision-Date: 2022-12-30 09:32-0500\n"
"Last-Translator: Jerzy Trzeciak \n"
"Language-Team: Polish \n"
"Language: pl\n"
@@ -1257,6 +1257,12 @@ msgstr "Stos bazowy. Układaj w górę wg barwy."
msgid "Foundation. Build down by color."
msgstr "Stos bazowy. Układaj w dół wg barwy."
+msgid "Foundation. Build up in any suit but the same."
+msgstr ""
+
+msgid "Foundation. Build down in any suit but the same."
+msgstr ""
+
#: pysollib/stack.py:2459 pysollib/games/golf.py:126 pysollib/games/golf.py:322
msgid "Tableau. No building."
msgstr "Stół gry. Nie układaj."
@@ -1339,6 +1345,21 @@ msgstr ""
"Stół gry. Układaj w dół niezależnie od koloru. Sekwens kart tego samego "
"koloru można przenieść jako całość."
+msgid ""
+"Tableau. Build up regardless of suit. Sequences of cards in the same color "
+"can be moved as a unit."
+msgstr ""
+
+msgid ""
+"Tableau. Build up regardless of suit. Sequences of cards in any suit but the "
+"same can be moved as a unit."
+msgstr ""
+
+msgid ""
+"Tableau. Build down regardless of suit. Sequences of cards in any suit but "
+"the same can be moved as a unit."
+msgstr ""
+
#: pysollib/stack.py:2654
msgid ""
"Tableau. Build up by alternate color, can move any face-up cards regardless "
@@ -1378,6 +1399,26 @@ msgstr ""
"Stół gry. Układaj w dół wg koloru. Można przenosić odkryte karty niezależnie "
"od sekwensu."
+msgid ""
+"Tableau. Build up by color, can move any face-up cards regardless of "
+"sequence."
+msgstr ""
+
+msgid ""
+"Tableau. Build down by color, can move any face-up cards regardless of "
+"sequence."
+msgstr ""
+
+msgid ""
+"Tableau. Build up by any suit but the same, can move any face-up cards "
+"regardless of sequence."
+msgstr ""
+
+msgid ""
+"Tableau. Build down by any suit but the same, can move any face-up cards "
+"regardless of sequence."
+msgstr ""
+
#: pysollib/stack.py:2694 pysollib/stack.py:2697
msgid ""
"Tableau. Build up regardless of suit, can move any face-up cards regardless "
@@ -1402,6 +1443,9 @@ msgstr "Stół gry. Układaj w górę lub w dół wg koloru."
msgid "Tableau. Build up or down regardless of suit."
msgstr "Stół gry. Ukladaj w górę lub w dół niezależnie od koloru."
+msgid "Tableau. Build up or down in any suit but the same."
+msgstr ""
+
#: pysollib/stack.py:2874
msgid "Waste."
msgstr "Zrzut."
@@ -1732,6 +1776,9 @@ msgstr "Liczba kart przełożonych do zrzutu:"
msgid "Shuffle during redeal:"
msgstr "Przetasuj przy ponownym rozdaniu:"
+msgid "No building"
+msgstr ""
+
#: pysollib/wizardutil.py:176 pysollib/wizardutil.py:184
#: pysollib/wizardutil.py:224
msgid "Same suit"
@@ -1763,6 +1810,12 @@ msgstr "Pająk kolory naprzemiennie"
msgid "Spider rank"
msgstr "Pająk wartość"
+msgid "Spider same color"
+msgstr ""
+
+msgid "Spider any suit but the same"
+msgstr ""
+
#: pysollib/wizardutil.py:191 pysollib/wizardutil.py:249
#: pysollib/wizardutil.py:252
msgid "Any"
@@ -1782,6 +1835,9 @@ msgstr "W górę"
msgid "Down"
msgstr "W dół"
+msgid "Same rank"
+msgstr ""
+
#: pysollib/wizardutil.py:200 pysollib/wizardutil.py:259
msgid "Direction:"
msgstr "Kierunek:"
@@ -1828,6 +1884,9 @@ msgstr "W górę lub w dół wg wartości"
msgid "Up or down by same color"
msgstr "W górę lub w dół ta sama barwa"
+msgid "Up or down by any suit but the same"
+msgstr ""
+
#: pysollib/wizardutil.py:238
msgid "Yukon same suit"
msgstr "Yukon jeden kolor"
@@ -1841,6 +1900,12 @@ msgstr "Yukon barwy naprzemiennie"
msgid "Yukon rank"
msgstr "Yukon rank"
+msgid "Yukon same color"
+msgstr ""
+
+msgid "Yukon any suit but the same"
+msgstr ""
+
#: pysollib/wizardutil.py:263 pysollib/wizardutil.py:264
msgid "Sequence"
msgstr "Sekwens"
@@ -1869,6 +1934,9 @@ msgstr "Trójkąt"
msgid "Rectangle"
msgstr "Prostokąt"
+msgid "Pyramid"
+msgstr ""
+
#: pysollib/wizardutil.py:308
msgid "# of face-down cards dealt to the tableau pile:"
msgstr "Liczba kart zakrytych rozłożonych na stół gry:"
diff --git a/po/pysol.pot b/po/pysol.pot
index f21bf55b..3262407d 100644
--- a/po/pysol.pot
+++ b/po/pysol.pot
@@ -1167,6 +1167,12 @@ msgstr ""
msgid "Foundation. Build down by color."
msgstr ""
+msgid "Foundation. Build up in any suit but the same."
+msgstr ""
+
+msgid "Foundation. Build down in any suit but the same."
+msgstr ""
+
#: pysollib/stack.py:2459 pysollib/games/golf.py:126 pysollib/games/golf.py:322
msgid "Tableau. No building."
msgstr ""
@@ -1241,6 +1247,21 @@ msgid ""
"can be moved as a unit."
msgstr ""
+msgid ""
+"Tableau. Build up regardless of suit. Sequences of cards in the same color "
+"can be moved as a unit."
+msgstr ""
+
+msgid ""
+"Tableau. Build up regardless of suit. Sequences of cards in any suit but the same "
+"can be moved as a unit."
+msgstr ""
+
+msgid ""
+"Tableau. Build down regardless of suit. Sequences of cards in any suit but the same "
+"can be moved as a unit."
+msgstr ""
+
#: pysollib/stack.py:2654
msgid ""
"Tableau. Build up by alternate color, can move any face-up cards regardless "
@@ -1270,6 +1291,24 @@ msgid ""
"sequence."
msgstr ""
+msgid ""
+"Tableau. Build up by color, can move any face-up cards regardless of sequence."
+msgstr ""
+
+msgid ""
+"Tableau. Build down by color, can move any face-up cards regardless of "
+"sequence."
+msgstr ""
+
+msgid ""
+"Tableau. Build up by any suit but the same, can move any face-up cards regardless of sequence."
+msgstr ""
+
+msgid ""
+"Tableau. Build down by any suit but the same, can move any face-up cards regardless of "
+"sequence."
+msgstr ""
+
#: pysollib/stack.py:2694 pysollib/stack.py:2697
msgid ""
"Tableau. Build up regardless of suit, can move any face-up cards regardless "
@@ -1292,6 +1331,9 @@ msgstr ""
msgid "Tableau. Build up or down regardless of suit."
msgstr ""
+msgid "Tableau. Build up or down in any suit but the same."
+msgstr ""
+
#: pysollib/stack.py:2874
msgid "Waste."
msgstr ""
@@ -1622,6 +1664,9 @@ msgstr ""
msgid "Shuffle during redeal:"
msgstr ""
+msgid "No building"
+msgstr ""
+
#: pysollib/wizardutil.py:176 pysollib/wizardutil.py:184
#: pysollib/wizardutil.py:224
msgid "Same suit"
@@ -1652,6 +1697,12 @@ msgstr ""
msgid "Spider rank"
msgstr ""
+msgid "Spider same color"
+msgstr ""
+
+msgid "Spider any suit but the same"
+msgstr ""
+
#: pysollib/wizardutil.py:191 pysollib/wizardutil.py:249
#: pysollib/wizardutil.py:252
msgid "Any"
@@ -1671,6 +1722,9 @@ msgstr ""
msgid "Down"
msgstr ""
+msgid "Same rank"
+msgstr ""
+
#: pysollib/wizardutil.py:200 pysollib/wizardutil.py:259
msgid "Direction:"
msgstr ""
@@ -1717,6 +1771,9 @@ msgstr ""
msgid "Up or down by same color"
msgstr ""
+msgid "Up or down by any suit but the same"
+msgstr ""
+
#: pysollib/wizardutil.py:238
msgid "Yukon same suit"
msgstr ""
@@ -1729,6 +1786,12 @@ msgstr ""
msgid "Yukon rank"
msgstr ""
+msgid "Yukon same color"
+msgstr ""
+
+msgid "Yukon any suit but the same"
+msgstr ""
+
#: pysollib/wizardutil.py:263 pysollib/wizardutil.py:264
msgid "Sequence"
msgstr ""
@@ -1757,6 +1820,9 @@ msgstr ""
msgid "Rectangle"
msgstr ""
+msgid "Pyramid"
+msgstr ""
+
#: pysollib/wizardutil.py:308
msgid "# of face-down cards dealt to the tableau pile:"
msgstr ""
diff --git a/po/ru_pysol.po b/po/ru_pysol.po
index 321a19e4..033b5861 100644
--- a/po/ru_pysol.po
+++ b/po/ru_pysol.po
@@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-12-10 10:19-0500\n"
-"PO-Revision-Date: 2022-09-26 21:00-0400\n"
+"PO-Revision-Date: 2022-12-30 09:32-0500\n"
"Last-Translator: Skomoroh \n"
"Language-Team: Russian \n"
"Language: ru\n"
@@ -1250,6 +1250,12 @@ msgstr "Базовая ячейка. Складывать по возраста
msgid "Foundation. Build down by color."
msgstr "Базовая ячейка. Складывать по убыванию в соответствии с цветом."
+msgid "Foundation. Build up in any suit but the same."
+msgstr ""
+
+msgid "Foundation. Build down in any suit but the same."
+msgstr ""
+
#: pysollib/stack.py:2459 pysollib/games/golf.py:126 pysollib/games/golf.py:322
msgid "Tableau. No building."
msgstr "Игровой стол. Без выкладывания."
@@ -1332,6 +1338,21 @@ msgstr ""
"Игровой стол. Складывать по убыванию не считаясь с мастью. Можно перемещать "
"серии карт одинаковой масти."
+msgid ""
+"Tableau. Build up regardless of suit. Sequences of cards in the same color "
+"can be moved as a unit."
+msgstr ""
+
+msgid ""
+"Tableau. Build up regardless of suit. Sequences of cards in any suit but the "
+"same can be moved as a unit."
+msgstr ""
+
+msgid ""
+"Tableau. Build down regardless of suit. Sequences of cards in any suit but "
+"the same can be moved as a unit."
+msgstr ""
+
#: pysollib/stack.py:2654
msgid ""
"Tableau. Build up by alternate color, can move any face-up cards regardless "
@@ -1371,6 +1392,26 @@ msgstr ""
"Игровой стол. Складывать по убыванию в соответствии с мастью, можно "
"перемещать любую серию открытых карт."
+msgid ""
+"Tableau. Build up by color, can move any face-up cards regardless of "
+"sequence."
+msgstr ""
+
+msgid ""
+"Tableau. Build down by color, can move any face-up cards regardless of "
+"sequence."
+msgstr ""
+
+msgid ""
+"Tableau. Build up by any suit but the same, can move any face-up cards "
+"regardless of sequence."
+msgstr ""
+
+msgid ""
+"Tableau. Build down by any suit but the same, can move any face-up cards "
+"regardless of sequence."
+msgstr ""
+
#: pysollib/stack.py:2694 pysollib/stack.py:2697
msgid ""
"Tableau. Build up regardless of suit, can move any face-up cards regardless "
@@ -1398,6 +1439,9 @@ msgid "Tableau. Build up or down regardless of suit."
msgstr ""
"Игровой стол. Складывать по возрастанию или убыванию не считаясь с мастью."
+msgid "Tableau. Build up or down in any suit but the same."
+msgstr ""
+
#: pysollib/stack.py:2874
msgid "Waste."
msgstr "Сброс."
@@ -1728,6 +1772,9 @@ msgstr "Кол-во карт сдающихся на сброс:"
msgid "Shuffle during redeal:"
msgstr "Тасовать при пересдаче:"
+msgid "No building"
+msgstr ""
+
#: pysollib/wizardutil.py:176 pysollib/wizardutil.py:184
#: pysollib/wizardutil.py:224
msgid "Same suit"
@@ -1758,6 +1805,12 @@ msgstr "Паук чередуя цвет"
msgid "Spider rank"
msgstr "Паук в соответствии с достоинством"
+msgid "Spider same color"
+msgstr ""
+
+msgid "Spider any suit but the same"
+msgstr ""
+
#: pysollib/wizardutil.py:191 pysollib/wizardutil.py:249
#: pysollib/wizardutil.py:252
msgid "Any"
@@ -1777,6 +1830,9 @@ msgstr "Вверх"
msgid "Down"
msgstr "Вниз"
+msgid "Same rank"
+msgstr ""
+
#: pysollib/wizardutil.py:200 pysollib/wizardutil.py:259
msgid "Direction:"
msgstr "Направление:"
@@ -1823,6 +1879,9 @@ msgstr "По возрастанию или убыванию в соответс
msgid "Up or down by same color"
msgstr "По возрастанию или убыванию в соответствии с цветом"
+msgid "Up or down by any suit but the same"
+msgstr ""
+
#: pysollib/wizardutil.py:238
msgid "Yukon same suit"
msgstr "Юкон в соответствии с мастью"
@@ -1835,6 +1894,12 @@ msgstr "Юкон чередуя цвет"
msgid "Yukon rank"
msgstr "Юкон в соответствии с достоинством"
+msgid "Yukon same color"
+msgstr ""
+
+msgid "Yukon any suit but the same"
+msgstr ""
+
#: pysollib/wizardutil.py:263 pysollib/wizardutil.py:264
msgid "Sequence"
msgstr "Последовательность"
@@ -1863,6 +1928,9 @@ msgstr "Треугольник"
msgid "Rectangle"
msgstr "Прямоугольник"
+msgid "Pyramid"
+msgstr ""
+
#: pysollib/wizardutil.py:308
msgid "# of face-down cards dealt to the tableau pile:"
msgstr "Кол-во закрытых карт сдающихся на ячейку игрового стола:"
diff --git a/pysollib/customgame.py b/pysollib/customgame.py
index 61d94dd1..cac70789 100644
--- a/pysollib/customgame.py
+++ b/pysollib/customgame.py
@@ -40,7 +40,11 @@ from pysollib.stack import \
SpiderTalonStack, \
Spider_AC_Foundation, \
Spider_AC_RowStack, \
+ Spider_BO_Foundation, \
+ Spider_BO_RowStack, \
Spider_RK_Foundation, \
+ Spider_SC_Foundation, \
+ Spider_SC_RowStack, \
Spider_SS_Foundation, \
Spider_SS_RowStack, \
StackWrapper, \
@@ -50,13 +54,16 @@ from pysollib.stack import \
SuperMoveSC_RowStack, \
SuperMoveSS_RowStack, \
UD_AC_RowStack, \
+ UD_BO_RowStack, \
UD_RK_RowStack, \
UD_SC_RowStack, \
UD_SS_RowStack, \
WasteStack, \
WasteTalonStack, \
Yukon_AC_RowStack, \
+ Yukon_BO_RowStack, \
Yukon_RK_RowStack, \
+ Yukon_SC_RowStack, \
Yukon_SS_RowStack
from pysollib.util import ACE, ANY_RANK, ANY_SUIT, \
KING, \
@@ -101,17 +108,23 @@ class CustomGame(Game):
# max_move
if s['found_type'] not in (Spider_SS_Foundation,
Spider_AC_Foundation,
- Spider_RK_Foundation,):
+ Spider_RK_Foundation,
+ Spider_SC_Foundation,
+ Spider_BO_Foundation,):
kw['max_move'] = s['found_max_move']
# suit
if s['found_type'] in (Spider_SS_Foundation,
Spider_AC_Foundation,
- Spider_RK_Foundation,):
+ Spider_RK_Foundation,
+ Spider_SC_Foundation,
+ Spider_BO_Foundation,):
kw['suit'] = ANY_SUIT
# fix dir and base_rank for Spider foundations
if s['found_type'] in (Spider_SS_Foundation,
Spider_AC_Foundation,
- Spider_RK_Foundation,):
+ Spider_RK_Foundation,
+ Spider_SC_Foundation,
+ Spider_BO_Foundation,):
kw['dir'] = -kw['dir']
if s['found_base_card'] == KING:
kw['base_rank'] = ACE
@@ -138,7 +151,8 @@ class CustomGame(Game):
if s['rows_wrap']:
kw['mod'] = 13
if s['rows_type'] in (UD_SS_RowStack, UD_AC_RowStack,
- UD_RK_RowStack, UD_SC_RowStack):
+ UD_RK_RowStack, UD_SC_RowStack,
+ UD_BO_RowStack):
kw['max_move'] = 1
# Super Move
if s['rows_super_move'] and kw['max_move'] == 1:
@@ -205,7 +219,8 @@ class CustomGame(Game):
# shallHighlightMatch
for c, f in (
- ((Spider_AC_RowStack, Spider_SS_RowStack),
+ ((Spider_AC_RowStack, Spider_SS_RowStack,
+ Spider_SC_RowStack, Spider_BO_RowStack),
(self._shallHighlightMatch_RK,
self._shallHighlightMatch_RKW)),
((AC_RowStack, UD_AC_RowStack,
@@ -220,10 +235,12 @@ class CustomGame(Game):
Yukon_RK_RowStack, SuperMoveRK_RowStack),
(self._shallHighlightMatch_RK,
self._shallHighlightMatch_RKW)),
- ((SC_RowStack, UD_SC_RowStack, SuperMoveSC_RowStack),
+ ((SC_RowStack, UD_SC_RowStack,
+ Yukon_SC_RowStack, SuperMoveSC_RowStack),
(self._shallHighlightMatch_SC,
self._shallHighlightMatch_SCW)),
- ((BO_RowStack, SuperMoveBO_RowStack),
+ ((BO_RowStack, UD_BO_RowStack,
+ Yukon_SC_RowStack, SuperMoveBO_RowStack),
(self._shallHighlightMatch_BO,
self._shallHighlightMatch_BOW)),
):
@@ -236,13 +253,17 @@ class CustomGame(Game):
# getQuickPlayScore
if s['rows_type'] in (Spider_AC_RowStack,
- Spider_SS_RowStack,):
+ Spider_SS_RowStack,
+ Spider_BO_RowStack,
+ Spider_SC_RowStack,):
self.getQuickPlayScore = self._getSpiderQuickPlayScore
# canDropCards
if s['found_type'] in (Spider_SS_Foundation,
Spider_AC_Foundation,
- Spider_RK_Foundation,):
+ Spider_RK_Foundation,
+ Spider_SC_Foundation,
+ Spider_BO_Foundation,):
for stack in self.s.rows:
stack.canDropCards = stack.spiderCanDropCards
@@ -261,7 +282,9 @@ class CustomGame(Game):
# TODO
if s['rows_type'] in (Yukon_SS_RowStack,
Yukon_AC_RowStack,
- Yukon_RK_RowStack):
+ Yukon_RK_RowStack,
+ Yukon_SC_RowStack,
+ Yukon_BO_RowStack,):
self.Hint_Class = Yukon_Hint
def _shuffleHook(self, cards):
@@ -270,7 +293,9 @@ class CustomGame(Game):
return cards
if s['found_type'] in (Spider_SS_Foundation,
Spider_AC_Foundation,
- Spider_RK_Foundation,):
+ Spider_RK_Foundation,
+ Spider_SC_Foundation,
+ Spider_BO_Foundation,):
return cards
base_card = s['found_base_card']
if base_card == ANY_RANK:
@@ -334,7 +359,17 @@ class CustomGame(Game):
flip, frames, max_cards)
face_down -= 1
max_rows -= 1
-
+ elif s['deal_type'] == 'pyramid':
+ # pyramid
+ for i in range(1, len(self.s.rows)):
+ if max_rows <= 1:
+ break
+ flip = (face_down <= 0)
+ mc = max_cards - len(self.s.rows)
+ frames, max_cards = deal(self.s.rows[i:min(i+mc, -i)],
+ flip, frames, max_cards)
+ face_down -= 1
+ max_rows -= 1
else:
# rectangle
for i in range(max_rows-1):
diff --git a/pysollib/games/spider.py b/pysollib/games/spider.py
index 59e451c6..258eca41 100644
--- a/pysollib/games/spider.py
+++ b/pysollib/games/spider.py
@@ -29,7 +29,6 @@ from pysollib.hint import FreeCellSolverWrapper
from pysollib.hint import SpiderType_Hint, YukonType_Hint
from pysollib.layout import Layout
from pysollib.mfxutil import kwdefault
-from pysollib.mygettext import _
from pysollib.stack import \
AC_FoundationStack, \
AC_RowStack, \
@@ -46,6 +45,7 @@ from pysollib.stack import \
SS_RowStack, \
Spider_AC_Foundation, \
Spider_AC_RowStack, \
+ Spider_SC_RowStack, \
Spider_SS_Foundation, \
Spider_SS_RowStack, \
StackWrapper, \
@@ -1141,20 +1141,8 @@ class ScorpionII(Scorpion):
# * Tarantula
# ************************************************************************
-class Tarantula_RowStack(Spider_RowStack):
- def _isSequence(self, cards):
- return isSameColorSequence(cards, self.cap.mod, self.cap.dir)
-
- def _isAcceptableSequence(self, cards):
- return isRankSequence(cards, self.cap.mod, self.cap.dir)
-
- def getHelp(self):
- return _('Tableau. Build down regardless of suit. Sequences of cards '
- 'in the same color can be moved as a unit.')
-
-
class Tarantula(Spider):
- RowStack_Class = Tarantula_RowStack
+ RowStack_Class = Spider_SC_RowStack
def getQuickPlayScore(self, ncards, from_stack, to_stack):
if to_stack.cards:
diff --git a/pysollib/stack.py b/pysollib/stack.py
index e2cf842e..344df4ef 100644
--- a/pysollib/stack.py
+++ b/pysollib/stack.py
@@ -2411,6 +2411,31 @@ class SC_FoundationStack(SS_FoundationStack):
return _('Foundation. Build by same rank.')
+# A ButOwn_FoundationStack builds up in rank and any suit but the same.
+# It is used in only a few games.
+class BO_FoundationStack(SS_FoundationStack):
+ def __init__(self, x, y, game, suit, **cap):
+ kwdefault(cap, base_suit=suit)
+ SS_FoundationStack.__init__(self, x, y, game, ANY_SUIT, **cap)
+
+ def acceptsCards(self, from_stack, cards):
+ if not SS_FoundationStack.acceptsCards(self, from_stack, cards):
+ return False
+ if self.cards:
+ # check the suit
+ if cards[0].suit == self.cards[-1].suit:
+ return False
+ return True
+
+ def getHelp(self):
+ if self.cap.dir > 0:
+ return _('Foundation. Build up in any suit but the same.')
+ elif self.cap.dir < 0:
+ return _('Foundation. Build down in any suit but the same.')
+ else:
+ return _('Foundation. Build by same rank.')
+
+
# Spider-type foundations
class Spider_SS_Foundation(AbstractFoundationStack):
def __init__(self, x, y, game, suit=ANY_SUIT, **cap):
@@ -2433,6 +2458,14 @@ class Spider_AC_Foundation(Spider_SS_Foundation):
return isAlternateColorSequence(cards, self.cap.mod, self.cap.dir)
+class Spider_SC_Foundation(Spider_SS_Foundation):
+ def acceptsCards(self, from_stack, cards):
+ if not AbstractFoundationStack.acceptsCards(self, from_stack, cards):
+ return False
+ # now check the cards
+ return isSameColorSequence(cards, self.cap.mod, self.cap.dir)
+
+
class Spider_RK_Foundation(Spider_SS_Foundation):
def acceptsCards(self, from_stack, cards):
if not AbstractFoundationStack.acceptsCards(self, from_stack, cards):
@@ -2441,6 +2474,13 @@ class Spider_RK_Foundation(Spider_SS_Foundation):
return isRankSequence(cards, self.cap.mod, self.cap.dir)
+class Spider_BO_Foundation(Spider_SS_Foundation):
+ def acceptsCards(self, from_stack, cards):
+ if not AbstractFoundationStack.acceptsCards(self, from_stack, cards):
+ return False
+ # now check the cards
+ return isAnySuitButOwnSequence(cards, self.cap.mod, self.cap.dir)
+
# ************************************************************************
# * Abstract classes for row stacks.
# ************************************************************************
@@ -2657,6 +2697,44 @@ class Spider_SS_RowStack(SS_RowStack):
return _('Tableau. Build by same rank.')
+# A Spider_SameColor_RowStack builds down by rank and color,
+# but accepts sequences that match by rank only.
+class Spider_SC_RowStack(SC_RowStack):
+ def _isAcceptableSequence(self, cards):
+ return isRankSequence(cards, self.cap.mod, self.cap.dir)
+
+ def getHelp(self):
+ if self.cap.dir > 0:
+ return _('Tableau. Build up regardless of suit. '
+ 'Sequences of cards in the same color can be moved '
+ 'as a unit.')
+ elif self.cap.dir < 0:
+ return _('Tableau. Build down regardless of suit. '
+ 'Sequences of cards in the same color can be moved '
+ 'as a unit.')
+ else:
+ return _('Tableau. Build by same rank.')
+
+
+# A Spider_ButOwn_RowStack builds down by rank and any suit but own,
+# but accepts sequences that match by rank only.
+class Spider_BO_RowStack(BO_RowStack):
+ def _isAcceptableSequence(self, cards):
+ return isRankSequence(cards, self.cap.mod, self.cap.dir)
+
+ def getHelp(self):
+ if self.cap.dir > 0:
+ return _('Tableau. Build up regardless of suit. '
+ 'Sequences of cards in any suit but the same '
+ 'can be moved as a unit.')
+ elif self.cap.dir < 0:
+ return _('Tableau. Build down regardless of suit. '
+ 'Sequences of cards in any suit but the same '
+ 'can be moved as a unit.')
+ else:
+ return _('Tableau. Build by same rank.')
+
+
# A Yukon_AlternateColor_RowStack builds down by rank and alternate color,
# but can move any face-up cards regardless of sequence.
class Yukon_AC_RowStack(BasicRowStack):
@@ -2712,6 +2790,25 @@ class Yukon_SS_RowStack(Yukon_AC_RowStack):
'face-up cards regardless of sequence.')
+# A Yukon_SameColor_RowStack builds down by rank and color,
+# but can move any face-up cards regardless of sequence.
+class Yukon_SC_RowStack(Yukon_AC_RowStack):
+ def _isYukonSequence(self, c1, c2):
+ return ((c1.rank + self.cap.dir) % self.cap.mod == c2.rank and
+ c1.color == c2.color)
+
+ def getHelp(self):
+ if self.cap.dir > 0:
+ return _('Tableau. Build up by color, can move any face-up cards '
+ 'regardless of sequence.')
+ elif self.cap.dir < 0:
+ return _('Tableau. Build down by color, can move any '
+ 'face-up cards regardless of sequence.')
+ else:
+ return _('Tableau. Build by same rank, can move any '
+ 'face-up cards regardless of sequence.')
+
+
# A Yukon_Rank_RowStack builds down by rank
# but can move any face-up cards regardless of sequence.
class Yukon_RK_RowStack(Yukon_AC_RowStack):
@@ -2729,6 +2826,25 @@ class Yukon_RK_RowStack(Yukon_AC_RowStack):
return _('Tableau. Build by same rank, can move any '
'face-up cards regardless of sequence.')
+
+# A Yukon_ButOwn_RowStack builds down by rank and suit,
+# but can move any face-up cards regardless of sequence.
+class Yukon_BO_RowStack(Yukon_AC_RowStack):
+ def _isYukonSequence(self, c1, c2):
+ return ((c1.rank + self.cap.dir) % self.cap.mod == c2.rank and
+ c1.suit != c2.suit)
+
+ def getHelp(self):
+ if self.cap.dir > 0:
+ return _('Tableau. Build up by any suit but the same, '
+ 'can move any face-up cards regardless of sequence.')
+ elif self.cap.dir < 0:
+ return _('Tableau. Build down by any suit but the same, '
+ 'can move any face-up cards regardless of sequence.')
+ else:
+ return _('Tableau. Build by same rank, can move any '
+ 'face-up cards regardless of sequence.')
+
#
# King-versions of some of the above stacks: they accepts only Kings or
# sequences starting with a King as base_rank cards (i.e. when empty).
@@ -2809,6 +2925,20 @@ class UD_RK_RowStack(SequenceRowStack):
return _('Tableau. Build up or down regardless of suit.')
+# up or down by rank ignoring suit
+class UD_BO_RowStack(SequenceRowStack):
+ def __init__(self, x, y, game, **cap):
+ kwdefault(cap, max_move=1, max_accept=1)
+ SequenceRowStack.__init__(self, x, y, game, **cap)
+
+ def _isSequence(self, cards):
+ return (isAnySuitButOwnSequence(cards, self.cap.mod, 1) or
+ isAnySuitButOwnSequence(cards, self.cap.mod, -1))
+
+ def getHelp(self):
+ return _('Tableau. Build up or down in any suit but the same.')
+
+
# To simplify playing we also consider the number of free rows.
# See also the "SuperMove" section in the FreeCell FAQ.
class SuperMoveStack_StackMethods:
diff --git a/pysollib/wizardutil.py b/pysollib/wizardutil.py
index c6c7d6b8..f7c09817 100644
--- a/pysollib/wizardutil.py
+++ b/pysollib/wizardutil.py
@@ -28,6 +28,8 @@ from pysollib.layout import Layout
from pysollib.mygettext import _, n_
from pysollib.stack import AC_FoundationStack, \
AC_RowStack, \
+ BasicRowStack, \
+ BO_FoundationStack, \
BO_RowStack, \
DealReserveRedealTalonStack, \
DealRowRedealTalonStack, \
@@ -42,16 +44,23 @@ from pysollib.stack import AC_FoundationStack, \
SpiderTalonStack, \
Spider_AC_Foundation, \
Spider_AC_RowStack, \
+ Spider_BO_Foundation, \
+ Spider_BO_RowStack, \
Spider_RK_Foundation, \
+ Spider_SC_Foundation, \
+ Spider_SC_RowStack, \
Spider_SS_Foundation, \
Spider_SS_RowStack, \
UD_AC_RowStack, \
+ UD_BO_RowStack, \
UD_RK_RowStack, \
UD_SC_RowStack, \
UD_SS_RowStack, \
WasteTalonStack, \
Yukon_AC_RowStack, \
+ Yukon_BO_RowStack, \
Yukon_RK_RowStack, \
+ Yukon_SC_RowStack, \
Yukon_SS_RowStack
from pysollib.util import ACE, ANY_RANK, KING, NO_RANK, UNLIMITED_MOVES
from pysollib.wizardpresets import presets
@@ -173,13 +182,16 @@ TalonShuffle = WizSetting(
widget='check',
)
FoundType = WizSetting(
- values_map=((n_('Same suit'), SS_FoundationStack),
- (n_('Alternate color'), AC_FoundationStack),
- (n_('Same color'), SC_FoundationStack),
- (n_('Rank'), RK_FoundationStack),
- (n_('Spider same suit'), Spider_SS_Foundation),
- (n_('Spider alternate color'), Spider_AC_Foundation),
- (n_('Spider rank'), Spider_RK_Foundation),
+ values_map=((n_('Same suit'), SS_FoundationStack),
+ (n_('Alternate color'), AC_FoundationStack),
+ (n_('Same color'), SC_FoundationStack),
+ (n_('Rank'), RK_FoundationStack),
+ (n_('Any suit but the same'), BO_FoundationStack),
+ (n_('Spider same suit'), Spider_SS_Foundation),
+ (n_('Spider alternate color'), Spider_AC_Foundation),
+ (n_('Spider same color'), Spider_SC_Foundation),
+ (n_('Spider rank'), Spider_RK_Foundation),
+ (n_('Spider any suit but the same'), Spider_BO_Foundation),
),
default=n_('Same suit'),
label=_('Type:'),
@@ -221,23 +233,30 @@ RowsNum = WizSetting(
var_name='rows_num',
)
RowsType = WizSetting(
- values_map=((n_('Same suit'), SS_RowStack),
- (n_('Alternate color'), AC_RowStack),
- (n_('Same color'), SC_RowStack),
- (n_('Rank'), RK_RowStack),
- (n_('Any suit but the same'), BO_RowStack),
+ values_map=((n_('No building'), BasicRowStack),
- (n_('Up or down by same suit'), UD_SS_RowStack),
- (n_('Up or down by alternate color'), UD_AC_RowStack),
- (n_('Up or down by rank'), UD_RK_RowStack),
- (n_('Up or down by same color'), UD_SC_RowStack),
+ (n_('Same suit'), SS_RowStack),
+ (n_('Alternate color'), AC_RowStack),
+ (n_('Same color'), SC_RowStack),
+ (n_('Rank'), RK_RowStack),
+ (n_('Any suit but the same'), BO_RowStack),
- (n_('Spider same suit'), Spider_SS_RowStack),
- (n_('Spider alternate color'), Spider_AC_RowStack),
+ (n_('Up or down by same suit'), UD_SS_RowStack),
+ (n_('Up or down by alternate color'), UD_AC_RowStack),
+ (n_('Up or down by same color'), UD_SC_RowStack),
+ (n_('Up or down by rank'), UD_RK_RowStack),
+ (n_('Up or down by any suit but the same'), UD_BO_RowStack),
- (n_('Yukon same suit'), Yukon_SS_RowStack),
- (n_('Yukon alternate color'), Yukon_AC_RowStack),
- (n_('Yukon rank'), Yukon_RK_RowStack),
+ (n_('Spider same suit'), Spider_SS_RowStack),
+ (n_('Spider alternate color'), Spider_AC_RowStack),
+ (n_('Spider same color'), Spider_SC_RowStack),
+ (n_('Spider any suit but the same'), Spider_BO_RowStack),
+
+ (n_('Yukon same suit'), Yukon_SS_RowStack),
+ (n_('Yukon alternate color'), Yukon_AC_RowStack),
+ (n_('Yukon same color'), Yukon_SC_RowStack),
+ (n_('Yukon rank'), Yukon_RK_RowStack),
+ (n_('Yukon any suit but the same'), Yukon_BO_RowStack),
),
default=n_('Alternate color'),
label=_('Type:'),
@@ -254,7 +273,7 @@ RowsBaseCard = WizSetting(
var_name='rows_base_card',
)
RowsDir = WizSetting(
- values_map=((n_('Up'), 1), (n_('Down'), -1)),
+ values_map=((n_('Up'), 1), (n_('Down'), -1), (n_('Same rank'), 0)),
default=n_('Down'),
label=_('Direction:'),
var_name='rows_dir',
@@ -296,6 +315,7 @@ ReservesMaxAccept = WizSetting(
DealType = WizSetting(
values_map=((n_('Triangle'), 'triangle'),
(n_('Rectangle'), 'rectangle'),
+ (n_('Pyramid'), 'pyramid')
),
default=n_('Rectangle'),
label=_('Type:'),