├── po ├── POTFILES.skip ├── README.TRANSLATORS ├── LINGUAS └── meson.build ├── src ├── data │ ├── baize.png │ ├── baize.xcf │ └── slot.svg ├── lib │ ├── ar-marshal.list │ ├── meson_compileschemas.py │ ├── ar-gsettings.h │ ├── ar-string-utils.h │ ├── ar-card-private.h │ ├── ar-help.h │ ├── ar-show.h │ ├── ar-card-theme-qsvg-private.h │ ├── org.gnome.Patience.WindowState.gschema.xml │ ├── ar-sound.h │ ├── ar-debug.c │ ├── ar-profile.h │ ├── ar-profile.c │ ├── ar-runtime.h │ ├── ar-debug.h │ └── ar-card-themes.h ├── AUTHORS ├── aisleriot-debug-ui.xml ├── meson_gconf.py ├── ar-clock.h ├── ar-cursor.h ├── ar-game-chooser.h ├── ar-application.h ├── aisleriot.gresource.xml ├── util.h ├── ar-style-gtk.h ├── README ├── stats-dialog.h ├── ar-fullscreen-button.h ├── aisleriot-ui.xml ├── get_titles.pl ├── conf.h ├── board-noclutter.h ├── ar-stock.h ├── window.h ├── meson.build └── ar-style-private.h ├── data ├── sounds │ ├── click.ogg │ ├── slide.ogg │ ├── splat.ogg │ ├── victory.ogg │ └── meson.build ├── aisleriot-3.10.png ├── cursor-hand-open.png ├── cursor-hand-closed.png ├── icons │ ├── hicolor_actions_16x16_cards-deal.png │ ├── hicolor_actions_22x22_cards-deal.png │ ├── hicolor_actions_24x24_cards-deal.png │ ├── hicolor_actions_32x32_cards-deal.png │ ├── hicolor_actions_48x48_cards-deal.png │ ├── hicolor_apps_16x16_gnome-freecell.png │ ├── hicolor_apps_22x22_gnome-freecell.png │ ├── hicolor_apps_24x24_gnome-freecell.png │ ├── hicolor_apps_32x32_gnome-freecell.png │ ├── hicolor_apps_48x48_gnome-freecell.png │ ├── hicolor_apps_16x16_gnome-aisleriot.png │ ├── hicolor_apps_22x22_gnome-aisleriot.png │ ├── hicolor_apps_24x24_gnome-aisleriot.png │ ├── hicolor_apps_256x256_gnome-aisleriot.png │ ├── hicolor_apps_256x256_gnome-freecell.png │ ├── hicolor_apps_32x32_gnome-aisleriot.png │ ├── hicolor_apps_40x40_gnome-aisleriot.png │ ├── hicolor_apps_48x48_gnome-aisleriot.png │ ├── meson_updateiconcache.py │ ├── render-bitmaps.rb │ └── meson.build ├── org.gnome.Aisleriot.desktop.in ├── meson_desktopfile.py ├── aisleriot.supp ├── meson.build └── org.gnome.Aisleriot.metainfo.xml.in ├── help ├── C │ ├── figures │ │ ├── camelot-goal.png │ │ └── clock-rules.png │ ├── isabel.xml │ ├── jamestown.xml │ ├── fourteen.xml │ ├── gay_gordons.xml │ ├── block_ten.xml │ ├── helsinki.xml │ ├── eliminator.xml │ ├── cover.xml │ ├── fortunes.xml │ ├── neighbor.xml │ ├── golf.xml │ ├── fortress.xml │ ├── streets_and_alleys.xml │ ├── beleaguered_castle.xml │ ├── bakers_dozen.xml │ ├── escalator.xml │ ├── yukon.xml │ ├── chessboard.xml │ ├── elevator.xml │ ├── accordion.xml │ ├── scorpion.xml │ ├── eight_off.xml │ ├── first_law.xml │ ├── treize.xml │ ├── thirteen.xml │ ├── pileon.xml │ ├── auld_lang_syne.xml │ └── monte_carlo.xml └── LINGUAS ├── windows └── nsis │ ├── res │ ├── aisleriot.ico │ ├── setupicon.ico │ └── uninstallicon.ico │ ├── gnomegamesinstall.nsi │ └── installersetup_folderlayout.txt ├── cards ├── README.minimum ├── README.anglo ├── README.pixelangelo_compact ├── README.tango_nuevo ├── README.simplistic ├── README.ornamental ├── README.plastic ├── README.neoclassical ├── README.guyenne-classic ├── README.XSkat ├── README.tigullio ├── README.pixelangelo ├── README.swiss-XVII ├── meson_svgz.sh ├── README.Атласные ├── README.atlasnye ├── README.atlasnye_skat ├── README.anglo_poker ├── fix-card-ids.ed ├── README.mittelalter ├── README.bellot ├── README.clubkarte ├── README.l-&-h ├── README.adler ├── meson.build └── README.tragy ├── COPYING.README ├── TODO ├── COPYING.GPL+FE ├── games ├── peek.scm ├── bakers-game.scm ├── README ├── will-o-the-wisp.scm ├── spiderette.scm ├── gold-mine.scm ├── template.scm ├── aunt-mary.scm └── saratoga.scm ├── AUTHORS ├── README.md ├── meson_changelog.sh ├── Makefile.meson ├── .gitlab-ci └── make-release.sh ├── .gitlab-ci.yml └── aisleriot.doap /po/POTFILES.skip: -------------------------------------------------------------------------------- 1 | src/ar-style-gtk.c 2 | -------------------------------------------------------------------------------- /src/data/baize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/src/data/baize.png -------------------------------------------------------------------------------- /src/data/baize.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/src/data/baize.xcf -------------------------------------------------------------------------------- /data/sounds/click.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/sounds/click.ogg -------------------------------------------------------------------------------- /data/sounds/slide.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/sounds/slide.ogg -------------------------------------------------------------------------------- /data/sounds/splat.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/sounds/splat.ogg -------------------------------------------------------------------------------- /data/aisleriot-3.10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/aisleriot-3.10.png -------------------------------------------------------------------------------- /data/sounds/victory.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/sounds/victory.ogg -------------------------------------------------------------------------------- /src/lib/ar-marshal.list: -------------------------------------------------------------------------------- 1 | BOOLEAN:ENUM,INT 2 | BOOLEAN:STRING,UINT,ENUM 3 | VOID:STRING,STRING 4 | -------------------------------------------------------------------------------- /data/cursor-hand-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/cursor-hand-open.png -------------------------------------------------------------------------------- /data/cursor-hand-closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/cursor-hand-closed.png -------------------------------------------------------------------------------- /help/C/figures/camelot-goal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/help/C/figures/camelot-goal.png -------------------------------------------------------------------------------- /help/C/figures/clock-rules.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/help/C/figures/clock-rules.png -------------------------------------------------------------------------------- /windows/nsis/res/aisleriot.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/windows/nsis/res/aisleriot.ico -------------------------------------------------------------------------------- /windows/nsis/res/setupicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/windows/nsis/res/setupicon.ico -------------------------------------------------------------------------------- /windows/nsis/gnomegamesinstall.nsi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/windows/nsis/gnomegamesinstall.nsi -------------------------------------------------------------------------------- /windows/nsis/res/uninstallicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/windows/nsis/res/uninstallicon.ico -------------------------------------------------------------------------------- /data/icons/hicolor_actions_16x16_cards-deal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/icons/hicolor_actions_16x16_cards-deal.png -------------------------------------------------------------------------------- /data/icons/hicolor_actions_22x22_cards-deal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/icons/hicolor_actions_22x22_cards-deal.png -------------------------------------------------------------------------------- /data/icons/hicolor_actions_24x24_cards-deal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/icons/hicolor_actions_24x24_cards-deal.png -------------------------------------------------------------------------------- /data/icons/hicolor_actions_32x32_cards-deal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/icons/hicolor_actions_32x32_cards-deal.png -------------------------------------------------------------------------------- /data/icons/hicolor_actions_48x48_cards-deal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/icons/hicolor_actions_48x48_cards-deal.png -------------------------------------------------------------------------------- /data/icons/hicolor_apps_16x16_gnome-freecell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/icons/hicolor_apps_16x16_gnome-freecell.png -------------------------------------------------------------------------------- /data/icons/hicolor_apps_22x22_gnome-freecell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/icons/hicolor_apps_22x22_gnome-freecell.png -------------------------------------------------------------------------------- /data/icons/hicolor_apps_24x24_gnome-freecell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/icons/hicolor_apps_24x24_gnome-freecell.png -------------------------------------------------------------------------------- /data/icons/hicolor_apps_32x32_gnome-freecell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/icons/hicolor_apps_32x32_gnome-freecell.png -------------------------------------------------------------------------------- /data/icons/hicolor_apps_48x48_gnome-freecell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/icons/hicolor_apps_48x48_gnome-freecell.png -------------------------------------------------------------------------------- /data/icons/hicolor_apps_16x16_gnome-aisleriot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/icons/hicolor_apps_16x16_gnome-aisleriot.png -------------------------------------------------------------------------------- /data/icons/hicolor_apps_22x22_gnome-aisleriot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/icons/hicolor_apps_22x22_gnome-aisleriot.png -------------------------------------------------------------------------------- /data/icons/hicolor_apps_24x24_gnome-aisleriot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/icons/hicolor_apps_24x24_gnome-aisleriot.png -------------------------------------------------------------------------------- /data/icons/hicolor_apps_256x256_gnome-aisleriot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/icons/hicolor_apps_256x256_gnome-aisleriot.png -------------------------------------------------------------------------------- /data/icons/hicolor_apps_256x256_gnome-freecell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/icons/hicolor_apps_256x256_gnome-freecell.png -------------------------------------------------------------------------------- /data/icons/hicolor_apps_32x32_gnome-aisleriot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/icons/hicolor_apps_32x32_gnome-aisleriot.png -------------------------------------------------------------------------------- /data/icons/hicolor_apps_40x40_gnome-aisleriot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/icons/hicolor_apps_40x40_gnome-aisleriot.png -------------------------------------------------------------------------------- /data/icons/hicolor_apps_48x48_gnome-aisleriot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/aisleriot/HEAD/data/icons/hicolor_apps_48x48_gnome-aisleriot.png -------------------------------------------------------------------------------- /src/AUTHORS: -------------------------------------------------------------------------------- 1 | Jonathan Blandford (jrb@alum.mit.edu) 2 | Felix Bellaby (felix@pooh.u-net.com) 3 | Rosanna Yuen (zana@webwynk.net) 4 | Christian Persch (chpe@src.gnome.org) 5 | -------------------------------------------------------------------------------- /help/LINGUAS: -------------------------------------------------------------------------------- 1 | ca 2 | cs 3 | de 4 | el 5 | en_GB 6 | es 7 | eu 8 | fr 9 | gl 10 | hu 11 | id 12 | oc 13 | pt_BR 14 | ru 15 | sl 16 | sr 17 | sr@latin 18 | sv 19 | uk 20 | zh_CN 21 | -------------------------------------------------------------------------------- /cards/README.minimum: -------------------------------------------------------------------------------- 1 | Minium - a minimal SVG card deck for AisleRiot 2 | 3 | (C) Vincent Bermel 2024 4 | 5 | License: GNU LGPL 3-or-later 6 | Cf. respective COPYING file or 7 | https://www.gnu.org/licenses/lgpl-3.0.html 8 | 9 | Font used (converted to paths): Barlow (Open Font License (OFL)) 10 | -------------------------------------------------------------------------------- /COPYING.README: -------------------------------------------------------------------------------- 1 | This code is licensed as follows: 2 | - most code is licensed under the GPL 3-or-later 3 | - some (copypasted) code is licensed under the LGPL 3-or-later 4 | 5 | The whole of aisleriot as an aggregated work is distributed under 6 | GPL 3-or-later. 7 | 8 | The documentation is licensed under GFDL 1.1-or-later. 9 | -------------------------------------------------------------------------------- /data/org.gnome.Aisleriot.desktop.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Aisleriot Solitaire 3 | Comment=Play many different solitaire games 4 | Exec=sol 5 | Icon=gnome-aisleriot 6 | Terminal=false 7 | Type=Application 8 | Categories=GNOME;GTK;Game;CardGame; 9 | Keywords=solitaire;cards;klondike;spider;freecell;patience; 10 | StartupNotify=true 11 | -------------------------------------------------------------------------------- /cards/README.anglo: -------------------------------------------------------------------------------- 1 | Anglo SVG card deck for AisleRiot 2 | 3 | An "English pattern" card deck, English index letters, Bridge-sized cards. 4 | 5 | 6 | (C) 2007 Aike Reyer 7 | (C) 2024 Vincent Bermel 8 | 9 | Ace of Spades design inspired by the standard KDE card deck 10 | invent.kde.org/games/libkdegames/-/tree/master/src/carddecks/svg-standard 11 | (C) 2009 Parker Coates 12 | 13 | License: GNU GPL 3-or-later 14 | Cf. respective COPYING file or 15 | https://www.gnu.org/licenses/gpl 16 | -------------------------------------------------------------------------------- /TODO: -------------------------------------------------------------------------------- 1 | General : 2 | 3 | - Seriously look at a11y for actually playing the games. 4 | - Make games playable by keyboard (bug 126284). 5 | 6 | AisleRiot: 7 | - Freecell hint threading (bug 134798) 8 | - Better klondike hint (bug 85712) 9 | - Scheme clean-ups (see bug 51016 for suggestions) 10 | - Descriptions of games in Select dialog (bug 110730) 11 | - Find out what's wrong with block-ten. 12 | - Final missing features from stand-alone freecell (bug 124522). 13 | -------------------------------------------------------------------------------- /src/data/slot.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /cards/README.pixelangelo_compact: -------------------------------------------------------------------------------- 1 | Pixelangelo Compact SVG card deck for AisleRiot 2 | English index letters, Bridge-size cards 3 | 4 | (C) 2024 Vincent Bermel 5 | 6 | License: GNU LGPL 3.0 or later 7 | 8 | Cf. COPYING.LGPL3 file or 9 | https://www.gnu.org/licenses/lgpl-3.0.html 10 | 11 | Court card/joker images based on "Pikselipelikortit" by "SuomiGameHUB" 12 | found here: 13 | https://suomigamehub.itch.io/pikselipelikortit 14 | 15 | Original license: Creative Commons CC0 16 | 17 | Court card + joker mages are embedded as PNG-compressed raster images. 18 | -------------------------------------------------------------------------------- /cards/README.tango_nuevo: -------------------------------------------------------------------------------- 1 | Tango Nuevo SVG card deck based on the deck of the same name found here 2 | 3 | https://github.com/thom-10/gnome-cards-modern 4 | 5 | which is based on the original GNOME Aisleriot "Tango" card deck. 6 | 7 | Modifications to the original "Tango" deck by thom-10 and Vincent Bermel. 8 | 9 | (C) Frederik Elwert 2009 10 | (C) thom-10 2020 11 | (C) Vincent Bermel 2024 12 | 13 | License: GNU GPL 3-or-later 14 | Cf. respective COPYING file or 15 | https://www.gnu.org/licenses/gpl 16 | 17 | Font used (converted to paths): DejaVu Sans (BSD-style license) 18 | -------------------------------------------------------------------------------- /cards/README.simplistic: -------------------------------------------------------------------------------- 1 | Simplistic SVG card deck (Bridge-sized cards) for AisleRiot 2 | No court card images, just letters. 2 indices per card. 3 | 4 | Made with Adrian Kennard's SVG card generator 5 | https://www.me.uk/cards/ 6 | https://github.com/revk/SVG-playing-cards 7 | 8 | Original license: Creative Commons CC0 1.0 9 | https://directory.fsf.org/wiki/License:CC0 10 | 11 | 12 | Modifications and porting by Vincent Bermel 13 | (C) Vincent Bermel 2023 14 | 15 | License of the modified version: GNU LGPL 3.0 or later 16 | 17 | Cf. COPYING.LGPL3 file or 18 | https://www.gnu.org/licenses/lgpl-3.0.html 19 | -------------------------------------------------------------------------------- /po/README.TRANSLATORS: -------------------------------------------------------------------------------- 1 | Translators should feel free to fix any minor spelling and punctuation 2 | errors in the source code. If in doubt file a bug-report describing 3 | the problem. 4 | 5 | If you do file a bug report please make sure that you include the file 6 | or files the string appears in. A Msgid is not always enough, 7 | especially if the string has changed in the interim. 8 | 9 | The "~a" construct in .scm files is directly equivalent to the "%s" in printf 10 | in C. See also http://mail.gnome.org/archives/gnome-i18n/2003-May/msg00170.html . 11 | 12 | Finally: when changing strings, remember any appropriate UI or string 13 | freezes. 14 | -------------------------------------------------------------------------------- /cards/README.ornamental: -------------------------------------------------------------------------------- 1 | Revised Ornamental card deck for Aisleriot 2 | 3 | (C) Vincent Bermel 2024 4 | 5 | License: GNU GPL 3-or-later 6 | Cf. respective COPYING file or 7 | https://www.gnu.org/licenses/gpl 8 | 9 | Font used (modified, converted to paths): Yatra One (license: SIL OFL) 10 | 11 | 12 | The original ornamental deck by Nicu Buculei is in the public domain. However, 13 | the modified versions since commit 9ae88409abff74d5c9bb77fc0f17627a87104b22 are 14 | distributed here under GPL 2+/3+. 15 | 16 | For the original ornamental.svg and Nicu Buculei's other works visit: 17 | 18 | http://www.nicubunu.ro/cards/ 19 | https://openclipart.org/artist/nicubunu 20 | -------------------------------------------------------------------------------- /cards/README.plastic: -------------------------------------------------------------------------------- 1 | Plastic SVG card deck for AisleRiot 2 | 3 | Based on "Plastic Playing Cards" by Gifford Cheung published here: 4 | https://opengameart.org/content/playing-cards-1 5 | 6 | Original license: Creative Commons CC-BY 4.0 7 | https://creativecommons.org/licenses/by/4.0/ 8 | 9 | Font for the index letters (converted to paths): Comfortaa 10 | Font license: SIL Open Font License 1.1 11 | 12 | Modifications and porting by Vincent Bermel 13 | Copyright 2014 Gifford Cheung 14 | Copyright 2024 Vincent Bermel 15 | 16 | License of the modified version: GNU LGPL 3.0 or later 17 | 18 | Cf. COPYING.LGPL3 file or 19 | https://www.gnu.org/licenses/lgpl-3.0.html 20 | -------------------------------------------------------------------------------- /COPYING.GPL+FE: -------------------------------------------------------------------------------- 1 | As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. 2 | 3 | You should have received a copy of the GNU General Public License along with this program. If not, see . 4 | -------------------------------------------------------------------------------- /src/aisleriot-debug-ui.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /windows/nsis/installersetup_folderlayout.txt: -------------------------------------------------------------------------------- 1 | folder structure needed for gnome-games-on-windows installer 0.0.1.0 2 | 3 | gnome 4 | - development\ 5 | - gnome-games\ 6 | - gnome-games\ 7 | - bin\ 8 | - share\ 9 | - GTK\ 10 | - 2.0\ 11 | - bin\ 12 | - etc\ 13 | - fonts\ 14 | - gtk-2.0\ 15 | - pango\ 16 | - lib\ 17 | - gtk-2.0\ 18 | - 2.10.0\ 19 | - loaders\ 20 | - guile\ 21 | - ice-9\ 22 | - oop\ 23 | - scripts\ 24 | - srfi\ 25 | - install\ 26 | - bin\ 27 | - include\ 28 | - win_environment_functions.nsh 29 | - res\ 30 | - aisleriot.ico 31 | - setupicon.ico 32 | - uninstallicon.ico 33 | - gnomegamesinstall.nsi 34 | - installersetup_folderlayout.txt 35 | - readme.txt -------------------------------------------------------------------------------- /cards/README.neoclassical: -------------------------------------------------------------------------------- 1 | "Neoclassical" SVG card deck for AisleRiot 2 | 3 | Copyright (C) 2012 Charles Esquiaqui 4 | Copyright (C) 2024 Vincent Bermel 5 | 6 | License: GNU LGPL 3.0 or later 7 | Cf. respective COPYING file or https://www.gnu.org/licenses/lgpl-3.0.txt 8 | 9 | Font used: Girassol, converted to paths and modified. 10 | Girassol license: SIL Open Font License (OFL) 1.1 11 | 12 | 13 | Court cards and Jokers based on 14 | "Free Vector Playing Cards Deck" by Charles Esquiaqui 15 | which used to be available here 16 | https://web.archive.org/web/20160307155959/http://www.snap2objects.com/2012/01/free-vector-playing-cards-deck/ 17 | licensed under Creative Commons CC-BY 3.0 18 | 19 | and is available here 20 | https://www.freevector.com/playing-cards-vector# 21 | under Creative Commons CC-BY 4.0 22 | -------------------------------------------------------------------------------- /po/LINGUAS: -------------------------------------------------------------------------------- 1 | # please keep this list sorted alphabetically 2 | # 3 | ab 4 | af 5 | am 6 | ar 7 | as 8 | ast 9 | az 10 | be 11 | bg 12 | bn 13 | bn_IN 14 | br 15 | bs 16 | ca 17 | ca@valencia 18 | cs 19 | cy 20 | da 21 | de 22 | dz 23 | el 24 | en_CA 25 | en_GB 26 | en@shaw 27 | eo 28 | es 29 | et 30 | eu 31 | fa 32 | fi 33 | fr 34 | fur 35 | ga 36 | gl 37 | gu 38 | he 39 | hi 40 | hr 41 | hu 42 | id 43 | is 44 | it 45 | ja 46 | ka 47 | kk 48 | km 49 | kn 50 | ko 51 | ku 52 | lt 53 | lv 54 | mai 55 | mk 56 | ml 57 | mn 58 | mr 59 | ms 60 | nb 61 | ne 62 | nl 63 | nn 64 | oc 65 | or 66 | pa 67 | pl 68 | pt 69 | pt_BR 70 | ro 71 | ru 72 | rw 73 | si 74 | sk 75 | sl 76 | sq 77 | sr 78 | sr@latin 79 | sv 80 | ta 81 | te 82 | tg 83 | th 84 | tr 85 | ug 86 | uk 87 | vi 88 | wa 89 | xh 90 | zh_CN 91 | zh_HK 92 | zh_TW 93 | -------------------------------------------------------------------------------- /cards/README.guyenne-classic: -------------------------------------------------------------------------------- 1 | Guyenne Classic playing cards for Aisleriot. 2 | 3 | (C) 2004 Richard Hoelscher 4 | (C) 2013 Mario Frasca 5 | 6 | Optimisations (C) 2024 Vincent Bermel 7 | 8 | License: GNU GPL 3.0 or later 9 | 10 | Cf. COPYING.GPL3 file or 11 | https://www.gnu.org/licenses/gpl-3.0.html 12 | 13 | Based on tracings of images of a wooden pattern used to print playing cards 14 | from the 18th century shown in a book from 1906. 15 | Read more here: https://bugzilla.gnome.org/show_bug.cgi?id=694387 16 | or here: 17 | https://openclipart.org/detail/174951/guyenne-deck-of-cards-by-mariotomo-174951 18 | 19 | Joker image based on the Creative Commons CC0-licensed design found here 20 | https://openclipart.org/detail/271635/jester-3 21 | 22 | which is traced from a print by Hendrik Hondius I (1573 - c. 1650) modeled 23 | after a painting by Pieter Bruegel the Elder (c.1525/1530 - 1569) 24 | https://en.m.wikipedia.org/wiki/File:Three_Fools_of_Carnival.jpg 25 | -------------------------------------------------------------------------------- /data/sounds/meson.build: -------------------------------------------------------------------------------- 1 | # Copyright © 2019 Christian Persch 2 | # 3 | # This programme is free software; you can redistribute it and/or modify it 4 | # under the terms of the GNU General Public License as published by 5 | # the Free Software Foundation; either version 3 of the License, or (at your 6 | # option) any later version. 7 | # 8 | # This programme is distributed in the hope that it will be useful, but 9 | # WITHOUT ANY WARRANTY; without even the implied warranty of 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11 | # See the GNU General Public License for more details. 12 | # 13 | # You should have received a copy of the GNU General Public License 14 | # along with this programme. If not, see . 15 | 16 | sounds_sources = [ 17 | 'click.ogg', 18 | 'slide.ogg', 19 | 'splat.ogg', 20 | 'victory.ogg', 21 | ] 22 | 23 | install_data( 24 | sources: sounds_sources, 25 | install_dir: ar_pkgdatadir / 'sounds', 26 | ) 27 | -------------------------------------------------------------------------------- /po/meson.build: -------------------------------------------------------------------------------- 1 | # Copyright © 2019 Christian Persch 2 | # 3 | # This programme is free software; you can redistribute it and/or modify it 4 | # under the terms of the GNU General Public License as published by 5 | # the Free Software Foundation; either version 3 of the License, or (at your 6 | # option) any later version. 7 | # 8 | # This programme is distributed in the hope that it will be useful, but 9 | # WITHOUT ANY WARRANTY; without even the implied warranty of 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11 | # See the GNU General Public License for more details. 12 | # 13 | # You should have received a copy of the GNU General Public License 14 | # along with this programme. If not, see . 15 | 16 | po_dir = meson.current_source_dir() 17 | 18 | gettext_targets = i18n.gettext( 19 | ar_gettext_domain, 20 | args: [ 21 | '--keyword=G_', 22 | '--flag=G_:1:pass-scheme-format', 23 | ], 24 | preset: 'glib', 25 | ) 26 | -------------------------------------------------------------------------------- /games/peek.scm: -------------------------------------------------------------------------------- 1 | ; AisleRiot - peek.scm 2 | ; Copyright (C) 2001, 2003 Rosanna Yuen 3 | ; 4 | ; This program is free software: you can redistribute it and/or modify 5 | ; it under the terms of the GNU General Public License as published by 6 | ; the Free Software Foundation, either version 3 of the License, or 7 | ; (at your option) any later version. 8 | ; 9 | ; This program is distributed in the hope that it will be useful, 10 | ; but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | ; GNU General Public License for more details. 13 | ; 14 | ; You should have received a copy of the GNU General Public License 15 | ; along with this program. If not, see . 16 | 17 | (use-modules (aisleriot interface) (aisleriot api)) 18 | 19 | (primitive-load-path "osmosis") 20 | 21 | (define (initial-deal) 22 | (deal-cards-face-up 8 '(0 2 4 6 0 2 4 6 0 2 4 6 0 2 4 6 1)) 23 | ) 24 | -------------------------------------------------------------------------------- /cards/README.XSkat: -------------------------------------------------------------------------------- 1 | XSkat SVG card set for AisleRiot 2 | 3 | German suits and arrangement akin to Prussian pattern (Preußisches Bild), 4 | Saxon pattern (Sächsisches Bild) or Altenburg pattern (Altenburger Bild) 5 | playing cards. 6 | Acorns (Eicheln) for Clubs, Bells (Schellen) for Diamonds, 7 | Leaves (Laub) for Spades. Under for Jack, Ober for Queen, Deuce (Daus) for Ace. 8 | 9 | Based on the original SVG card set of the same name made by Luciano Montanaro 10 | for KDE games which can be found here: 11 | http://www.cirulla.net/listing/kde_stuff/card-decks/xskat.svg 12 | 13 | Modifications by Vincent Bermel 14 | 15 | Copyright 2009 Luciano Montanaro 16 | Copyright 2024 Vincent Bermel 17 | 18 | License: GNU LGPL 3.0 or later cf. 19 | or COPYING.LGPL3 file in the aisleriot code repository. 20 | 21 | 22 | Font used (glyphs converted to paths): Linux Libertine 23 | Font license: GNU GPL+font exception or SIL OFL 1.1 24 | -------------------------------------------------------------------------------- /cards/README.tigullio: -------------------------------------------------------------------------------- 1 | Tigullio SVG card set 2 | 3 | Based on "Tigullio International card deck" made by Luciano Montanaro 4 | for KDE games which can be found here: 5 | invent.kde.org/games/libkdegames/-/blob/master/src/carddecks 6 | /svg-tigullio-international/tigullio-international.svg 7 | 8 | www.cirulla.net/listing/kde_stuff/card-decks/tigullio-international-new.svg 9 | 10 | Modifications by Vincent Bermel 11 | 12 | Copyright 2004, 2006, 2007, 2008 Luciano Montanaro 13 | Copyright 2024 Vincent Bermel 14 | 15 | License: GNU LGPL 3.0 or later 16 | 17 | JOKER letters based on font : "Trade Winds" (SIL Open Font License 1.1) 18 | 19 | The card design is loosely based on the traditional "Belgian/Genoese pattern" 20 | https://www.wopc.co.uk/france/genoese-pattern 21 | http://a_pollett.tripod.com/cards21.htm 22 | https://i-p-c-s.org/pattern/bgp.html 23 | https://www.7bellonline.it/cartedagioco/mazzistandard/nazione/?tipo=belga 24 | http://gkards.com/jeux/typologie/standard/francaises/belgo-genois/ 25 | -------------------------------------------------------------------------------- /cards/README.pixelangelo: -------------------------------------------------------------------------------- 1 | Pixelangelo SVG card deck for AisleRiot 2 | English index letters, Bridge-size cards 3 | 4 | (C) 1994 Heiko Eissfeldt 5 | (C) 1994 Michael Bischoff 6 | (C) 1998 Felix Bellaby 7 | (C) 1998 Ryu Changwoo 8 | (C) 1999 Markus F.X.J. Oberhumer 9 | (C) 2024 Vincent Bermel 10 | 11 | License: GNU GPL 3.0 or later 12 | 13 | Cf. COPYING.GPL3 file or 14 | https://www.gnu.org/licenses/gpl-3.0.html 15 | 16 | Court card images based on the old "Bonded" AisleRiot card theme. 17 | Authors according to this file: 18 | https://github.com/shlomif/PySolFC-Cardsets/blob/master/cardset-gdkcard-bonded/COPYRIGHT 19 | 20 | 21 | Images are embedded as PNG-compressed raster images because I didn't bother to 22 | redraw them in SVG so far. 23 | 24 | 25 | Joker design based on the joker from a pixel art card deck found here: 26 | spicygame.itch.io/cards 27 | Original license: Creative Commons Zero v1.0 Universal (CC0) 28 | -------------------------------------------------------------------------------- /src/lib/meson_compileschemas.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # Copyright © 2019 Christian Persch 3 | # 4 | # This programme is free software; you can redistribute it and/or modify it 5 | # under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation; either version 3 of the License, or (at your 7 | # option) any later version. 8 | # 9 | # This programme is distributed in the hope that it will be useful, but 10 | # WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | # See the GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this programme. If not, see . 16 | 17 | import os 18 | import subprocess 19 | import sys 20 | 21 | if os.environ.get('DESTDIR'): 22 | sys.exit(0) 23 | 24 | prefix = os.environ['MESON_INSTALL_PREFIX'] 25 | schemasdir = os.path.join(prefix, sys.argv[1]) 26 | 27 | rv = subprocess.call(['glib-compile-schemas', schemasdir]) 28 | sys.exit(rv) 29 | -------------------------------------------------------------------------------- /data/icons/meson_updateiconcache.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # Copyright © 2019 Christian Persch 3 | # 4 | # This programme is free software; you can redistribute it and/or modify it 5 | # under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation; either version 3 of the License, or (at your 7 | # option) any later version. 8 | # 9 | # This programme is distributed in the hope that it will be useful, but 10 | # WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | # See the GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this programme. If not, see . 16 | 17 | import os 18 | import subprocess 19 | import sys 20 | 21 | if os.environ.get('DESTDIR'): 22 | sys.exit(0) 23 | 24 | prefix = os.environ['MESON_INSTALL_PREFIX'] 25 | icondir = os.path.join(prefix, sys.argv[1]) 26 | 27 | rv = subprocess.call(['gtk-update-icon-cache', '-f', '-t', icondir]) 28 | sys.exit(0) 29 | -------------------------------------------------------------------------------- /data/meson_desktopfile.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # Copyright © 2019 Christian Persch 3 | # 4 | # This programme is free software; you can redistribute it and/or modify it 5 | # under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation; either version 3 of the License, or (at your 7 | # option) any later version. 8 | # 9 | # This programme is distributed in the hope that it will be useful, but 10 | # WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | # See the GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this programme. If not, see . 16 | 17 | import os 18 | import subprocess 19 | import sys 20 | 21 | if os.environ.get('DESTDIR'): 22 | sys.exit(0) 23 | 24 | prefix = os.environ['MESON_INSTALL_PREFIX'] 25 | desktopfile = os.path.join(prefix, sys.argv[1], sys.argv[2]) 26 | 27 | rv = subprocess.call(['desktop-file-validate', desktopfile]) 28 | sys.exit(rv) 29 | -------------------------------------------------------------------------------- /src/lib/ar-gsettings.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2007, 2010 Christian Persch 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef AR_SETTINGS_H 19 | #define AR_SETTINGS_H 20 | 21 | #include 22 | #include 23 | 24 | G_BEGIN_DECLS 25 | 26 | void ar_gsettings_bind_window_state (const char *path, 27 | GtkWindow *window); 28 | 29 | G_END_DECLS 30 | 31 | #endif /* !AR_GSETTINGS_H */ 32 | -------------------------------------------------------------------------------- /src/meson_gconf.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # Copyright © 2019 Christian Persch 3 | # 4 | # This programme is free software; you can redistribute it and/or modify it 5 | # under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation; either version 3 of the License, or (at your 7 | # option) any later version. 8 | # 9 | # This programme is distributed in the hope that it will be useful, but 10 | # WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | # See the GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this programme. If not, see . 16 | 17 | import os 18 | import subprocess 19 | import sys 20 | 21 | if os.environ.get('DESTDIR'): 22 | sys.exit(0) 23 | 24 | prefix = os.environ['MESON_INSTALL_PREFIX'] 25 | schemasdir = os.path.join(prefix, sys.argv[1]) 26 | 27 | rv = subprocess.call(['gconftool-2', '--install-schema-file', os.path.join(schemasdir, sys.argv[2])]) 28 | sys.exit(rv) 29 | -------------------------------------------------------------------------------- /cards/README.swiss-XVII: -------------------------------------------------------------------------------- 1 | Swiss-suited SVG playing cards for Aisleriot. 2 | Acorns for Clubs, Bells for Diamonds, Roses for Hearts, Shields for Spades. 3 | https://en.wikipedia.org/wiki/Swiss-suited_playing_cards 4 | 5 | (C) 2004 Richard Hoelscher 6 | (C) 2013 Mario Frasca 7 | 8 | Optimisations (C) 2024 Vincent Bermel 9 | 10 | License: GNU GPL 3.0 or later 11 | 12 | Cf. COPYING.GPL3 file or 13 | https://www.gnu.org/licenses/gpl-3.0.html 14 | 15 | Based on tracings of images of a wooden pattern used to print playing cards 16 | from the 17th century shown in a book from 1906 and public domain graphics 17 | from openclipart.org 18 | Read more here: https://bugzilla.gnome.org/show_bug.cgi?id=695298 19 | or here: 20 | https://openclipart.org/detail/176283/swiss-card-deck-xvii 21 | 22 | Joker image based on the Creative Commons CC0-licensed design found here 23 | https://openclipart.org/detail/271635/jester-3 24 | 25 | which is traced from a print by Hendrik Hondius I (1573 - c. 1650) modeled 26 | after a painting by Pieter Bruegel the Elder (c.1525/1530 - 1569) 27 | https://en.m.wikipedia.org/wiki/File:Three_Fools_of_Carnival.jpg 28 | -------------------------------------------------------------------------------- /src/lib/ar-string-utils.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2007 Christian Persch 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef GAMES_STRING_UTILS_H 19 | #define GAMES_STRING_UTILS_H 20 | 21 | #include 22 | #include 23 | 24 | G_BEGIN_DECLS 25 | 26 | char *ar_filename_to_display_name (const char *filename); 27 | 28 | char *ar_filename_to_game_module (const char *game_file); 29 | 30 | G_END_DECLS 31 | 32 | #endif /* !GAMES_STRING_UTILS_H */ 33 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Jonathan Blandford 2 | Ryu Changwoo 3 | Ian Peters 4 | Sean MacIsaac 5 | Mark Rae 6 | Carsten Schaar 7 | J. Marcin Gorycki 8 | Pista 9 | Lars Rydlinge 10 | Scott Heavner 11 | Francisco Bustamante 12 | Michael Meeks 13 | Christopher James Lahey 14 | Alan Cox 15 | James Henstridge 16 | Szabolcs Ban 17 | Robert Szokovacs 18 | Callum McKenzie 19 | Jason Clinton 20 | Andreas Røsdal 21 | Robert Ancell 22 | Thomas Hinkle 23 | Thomas Andersen 24 | Stephen Brandt 25 | Daniel Derozier 26 | Christian Persch 27 | Danny Varner 28 | Gwyneth Morgan 29 | -------------------------------------------------------------------------------- /cards/meson_svgz.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Copyright © 2019 Christian Persch 3 | # 4 | # This programme is free software; you can redistribute it and/or modify it 5 | # under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation; either version 3 of the License, or (at your 7 | # option) any later version. 8 | # 9 | # This programme is distributed in the hope that it will be useful, but 10 | # WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | # See the GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this programme. If not, see . 16 | 17 | # Really sucks that meson has no simple way to just chain a few commands 18 | # together in a pipe to produce an output file. 19 | 20 | set -e 21 | 22 | xmllint="$1" 23 | xmllint_flags="$2" 24 | gzip="$3" 25 | gzip_flags="$4" 26 | infile="$5" 27 | outfile="$6" 28 | 29 | cat "${infile}" | "${xmllint}" ${xmllint_flags} - | "${gzip}" ${gzip_flags} > "${outfile}" 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Aisleriot 2 | 3 | Aisleriot — also known as sol or solitaire — is a card game 4 | application that features over 80 different solitaire-type card 5 | games which are designed to play using a mouse, keyboard, or trackpad. 6 | 7 | # CI status 8 | --------- 9 | 10 | [![pipeline status](https://gitlab.gnome.org/GNOME/aisleriot/badges/master/pipeline.svg)](https://gitlab.gnome.org/GNOME/aisleriot/-/commits/master) 11 | 12 | [![coverage report](https://gitlab.gnome.org/GNOME/aisleriot/badges/master/coverage.svg)](https://gitlab.gnome.org/GNOME/aisleriot/-/commits/master) 13 | 14 | # Releases 15 | 16 | [![Latest Release](https://gitlab.gnome.org/GNOME/aisleriot/-/badges/release.svg)](https://gitlab.gnome.org/GNOME/aisleriot/-/releases) 17 | 18 | Tarballs for newer releases are available from the 19 | [package registry](https://gitlab.gnome.org/GNOME/aisleriot/-/packages) 20 | and new and old release are also available on 21 | [download.gnome.org](https://download.gnome.org/sources/aisleriot/). 22 | 23 | # Source code 24 | 25 | To get the source code, use 26 | ``` 27 | $ git clone https://gitlab.gnome.org/GNOME/aisleriot 28 | ``` 29 | -------------------------------------------------------------------------------- /src/lib/ar-card-private.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright © 2004 Callum McKenzie 3 | Copyright © 2007, 2008 Christian Persch 4 | 5 | This library is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | This program is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with this program. If not, see . 17 | */ 18 | 19 | /* Authors: Callum McKenzie */ 20 | 21 | 22 | #ifndef AR_CARD_PRIVATE_H 23 | #define AR_CARD_PRIVATE_H 24 | 25 | G_BEGIN_DECLS 26 | 27 | #define AR_CARD_ID(suit, rank) ((13*(suit)) + ((rank-1)%13)) 28 | 29 | guint _ar_card_to_index (Card card); 30 | 31 | G_END_DECLS 32 | 33 | #endif /* !AR_CARD_PRIVATE_H */ 34 | -------------------------------------------------------------------------------- /games/bakers-game.scm: -------------------------------------------------------------------------------- 1 | ; AisleRiot - bakers_game.scm 2 | ; Copyright (C) 2008 Vincent Povirk 3 | ; 4 | ; This program is free software: you can redistribute it and/or modify 5 | ; it under the terms of the GNU General Public License as published by 6 | ; the Free Software Foundation, either version 3 of the License, or 7 | ; (at your option) any later version. 8 | ; 9 | ; This program is distributed in the hope that it will be useful, 10 | ; but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | ; GNU General Public License for more details. 13 | ; 14 | ; You should have received a copy of the GNU General Public License 15 | ; along with this program. If not, see . 16 | 17 | (use-modules (aisleriot interface) (aisleriot api)) 18 | 19 | (primitive-load-path "freecell") 20 | 21 | (define (field-join? lower upper) 22 | (and (eq? (get-suit lower) (get-suit upper)) 23 | (eq? (+ (get-value lower) 1) (get-value upper)))) 24 | 25 | (define (max-auto-red) 26 | 13 27 | ) 28 | 29 | (define (max-auto-black) 30 | 13 31 | ) 32 | -------------------------------------------------------------------------------- /src/ar-clock.h: -------------------------------------------------------------------------------- 1 | /* 2 | *clock_widget.h: Clock widget. 3 | * 4 | * Copyright © 2001, 2003 Iain Holmes 5 | * © 2001 Mark McLoughlin 6 | * 7 | * Authors: Iain Holmes 8 | * Mark McLoughlin 9 | */ 10 | 11 | #pragma once 12 | 13 | #include 14 | #include 15 | #include 16 | 17 | G_BEGIN_DECLS 18 | 19 | #define AR_TYPE_CLOCK (ar_clock_get_type ()) 20 | G_DECLARE_FINAL_TYPE (ArClock, ar_clock, AR, CLOCK, GtkLabel) 21 | 22 | GType ar_clock_get_type (void); 23 | GtkWidget *ar_clock_new (void); 24 | void ar_clock_start (ArClock *clock_widget); 25 | gboolean ar_clock_is_started (ArClock *clock_widget); 26 | void ar_clock_stop (ArClock *clock_widget); 27 | void ar_clock_reset (ArClock *clock_widget); 28 | time_t ar_clock_get_seconds (ArClock *clock_widget); 29 | void ar_clock_add_seconds (ArClock *clock_widget, 30 | time_t seconds); 31 | void ar_clock_set_update (ArClock *clock_widget, 32 | gboolean do_update); 33 | 34 | G_END_DECLS 35 | -------------------------------------------------------------------------------- /src/ar-cursor.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2009 Christian Persch 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #pragma once 19 | 20 | #include 21 | 22 | G_BEGIN_DECLS 23 | 24 | typedef enum { 25 | AR_CURSOR_DEFAULT, 26 | AR_CURSOR_OPEN, 27 | AR_CURSOR_CLOSED, 28 | AR_CURSOR_DROPPABLE, 29 | AR_LAST_CURSOR 30 | } ArCursorType; 31 | 32 | GdkCursor *ar_cursor_new (GdkDisplay *display, 33 | ArCursorType cursor_type); 34 | 35 | G_END_DECLS 36 | -------------------------------------------------------------------------------- /games/README: -------------------------------------------------------------------------------- 1 | How to write a new game for Aisleriot 2 | ===================================== 3 | 4 | For an introduction on how to write the scheme code for a new game see the 5 | Rules.HOWTO and template.scm files. 6 | 7 | 8 | How to add a new game to Aisleriot 9 | ================================== 10 | 11 | * Move foo.scm file into games/ and git add it 12 | * Add foo.scm to the list in games/meson.build, keeping the list 13 | sorted alphabetically 14 | * Add games/foo.scm to po/POTFILES.in 15 | * Move the documentation foo.xml file into help/C/ and git add it 16 | * Add foo.xml to help_pages in help/meson.build, keeping the list 17 | sorted alphabetically 18 | * Edit help/C/index.docbook to include the new game's documentation 19 | by adding 20 | 21 | 22 | 23 | in the list of games. Make sure to keep the list sorted alphabetically! 24 | * Run the src/get_titles.pl script 25 | * Add foo to the list of games in the man page in help/sol.6 26 | * git commit help/C/foo.xml help/C/index.docbook help/meson.build games/foo.scm \ 27 | games/meson.build src/game-names.h po/POTFILES.in help/sol.6 28 | 29 | Done! 30 | -------------------------------------------------------------------------------- /data/aisleriot.supp: -------------------------------------------------------------------------------- 1 | # Aisleriot suppressions file 2 | # 3 | # This program is free software: you can redistribute it and/or modify 4 | # it under the terms of the GNU General Public License as published by 5 | # the Free Software Foundation, either version 3 of the License, or 6 | # (at your option) any later version. 7 | # 8 | # This program is distributed in the hope that it will be useful, 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | # GNU General Public License for more details. 12 | # 13 | # You should have received a copy of the GNU General Public License 14 | # along with this program. If not, see . 15 | 16 | # Shut up errors from garbage collection (libGC) 17 | 18 | { 19 | libGC/Cond 20 | Memcheck:Cond 21 | fun:GC_* 22 | } 23 | 24 | { 25 | libGC/Value4 26 | Memcheck:Value4 27 | fun:GC_* 28 | } 29 | 30 | { 31 | libGC/Value8 32 | Memcheck:Value8 33 | fun:GC_* 34 | } 35 | 36 | # libunistring freea reads a possibly uninitialised value *by design* 37 | 38 | { 39 | libunistring/freea 40 | Memcheck:Cond 41 | fun:libunistring_freea 42 | } 43 | 44 | -------------------------------------------------------------------------------- /meson_changelog.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Copyright © 2021 Christian Persch 3 | # 4 | # This programme is free software; you can redistribute it and/or modify it 5 | # under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation; either version 3 of the License, or (at your 7 | # option) any later version. 8 | # 9 | # This programme is distributed in the hope that it will be useful, but 10 | # WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 | # See the GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this programme. If not, see . 16 | 17 | set -e 18 | 19 | top_srcdir="$MESON_SOURCE_ROOT" 20 | top_builddir="MESON_BUILD_ROOT" 21 | top_distdir="$MESON_DIST_ROOT" 22 | 23 | if ! test -e "${top_srcdir}"/.git; then 24 | echo "Must be run from gnome-terminal git checkout" 25 | exit 1 26 | fi 27 | 28 | if ! test -e "${top_distdir}"; then 29 | echo "Must be run from 'meson dist'" 30 | exit 1 31 | fi 32 | 33 | GIT_DIR="${top_srcdir}"/.git git log --stat > "${top_distdir}"/ChangeLog 34 | -------------------------------------------------------------------------------- /src/ar-game-chooser.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2009 Christian Persch 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #pragma once 19 | 20 | #include 21 | #include "window.h" 22 | 23 | G_BEGIN_DECLS 24 | 25 | 26 | #define AR_TYPE_GAME_CHOOSER (ar_game_chooser_get_type()) 27 | G_DECLARE_FINAL_TYPE (ArGameChooser, ar_game_chooser, AR, GAME_CHOOSER, GtkDialog); 28 | 29 | 30 | GType ar_game_chooser_get_type (void); 31 | GtkWidget *ar_game_chooser_new (AisleriotWindow *window); 32 | 33 | 34 | G_END_DECLS 35 | -------------------------------------------------------------------------------- /src/ar-application.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2013 William Jon McCann 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #pragma once 19 | 20 | #include 21 | 22 | G_BEGIN_DECLS 23 | 24 | #define AR_TYPE_APPLICATION (ar_application_get_type ()) 25 | G_DECLARE_FINAL_TYPE (ArApplication, ar_application, AR, APPLICATION, GtkApplication); 26 | 27 | GType ar_application_get_type (void); 28 | GtkApplication *ar_application_new (const char *variation, 29 | gboolean freecell); 30 | 31 | G_END_DECLS 32 | -------------------------------------------------------------------------------- /Makefile.meson: -------------------------------------------------------------------------------- 1 | # Copyright © 2019 Christian Persch 2 | # 3 | # This programme is free software; you can redistribute it and/or modify it 4 | # under the terms of the GNU General Public License as published by 5 | # the Free Software Foundation; either version 3 of the License, or (at your 6 | # option) any later version. 7 | # 8 | # This programme is distributed in the hope that it will be useful, but 9 | # WITHOUT ANY WARRANTY; without even the implied warranty of 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11 | # See the GNU General Public License for more details. 12 | # 13 | # You should have received a copy of the GNU General Public License 14 | # along with this library. If not, see . 15 | 16 | srcdir=@srcdir@ 17 | builddir=@builddir@ 18 | 19 | # 20 | 21 | NTHREADS = 1 22 | NJOBS = -j$(NTHREADS) 23 | NINJA = ninja $(NJOBS) 24 | 25 | MESON = meson 26 | 27 | # 28 | 29 | all: 30 | $(NINJA) 31 | 32 | check: 33 | MESON_TESTTHREADS=$(NTHREADS) $(NINJA) test 34 | 35 | clean: 36 | $(NINJA) clean 37 | 38 | coverage: 39 | $(NINJA) coverage 40 | 41 | install: 42 | $(NINJA) install 43 | 44 | uninstall: 45 | $(NINJA) uninstall 46 | 47 | dist: 48 | $(MESON) dist --no-tests 49 | 50 | distcheck: 51 | $(MESON) dist 52 | -------------------------------------------------------------------------------- /src/aisleriot.gresource.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 20 | data/slot.svg 21 | data/baize.png 22 | help-overlay.ui 23 | aisleriot-ui.xml 24 | aisleriot-debug-ui.xml 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/util.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 1998, 2001, 2003, 2006 Jonathan Blandford 3 | * Copyright © 2007 Christian Persch 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #ifndef UTIL_H 20 | #define UTIL_H 21 | 22 | #include 23 | #include 24 | 25 | G_BEGIN_DECLS 26 | 27 | void aisleriot_show_help (GtkWidget *window, 28 | const char *game_module); 29 | 30 | void ar_atk_util_add_atk_relation (GtkWidget *widget, 31 | GtkWidget *other, 32 | AtkRelationType type); 33 | 34 | G_END_DECLS 35 | 36 | #endif /* !UTIL_H */ 37 | -------------------------------------------------------------------------------- /cards/README.Атласные: -------------------------------------------------------------------------------- 1 | Atlasnye (Атласные) "Satin" SVG card deck for AisleRiot 2 | Ukrainian/Russian Cyrillic index letters 3 | 4 | (C) Vincent Bermel 2024 5 | 6 | License: GNU LGPL 3.0 or later 7 | 8 | Cf. COPYING.LGPL3 file or 9 | https://www.gnu.org/licenses/lgpl-3.0.html 10 | 11 | Based on "Atlasnye playing cards deck" SVG playing cards found here: 12 | https://commons.wikimedia.org/wiki/File:Atlasnye_playing_cards_deck_2.svg 13 | (2017 version) 14 | 15 | by Дмитрий Фомин (Dmitry Fomin) 16 | 17 | Original license: Creative Commons CC0 1.0 18 | https://directory.fsf.org/wiki/License:CC0 19 | 20 | which itself is based on a Russian playing card deck 21 | designed by the Russian painter Adolf Iosifovich Charlemagne 22 | (Адольф Иосифович Шарлемань) [1826-1901] in 1862. 23 | 24 | More information on the "Atlas(nye)" playing card design: 25 | http://a.trionfi.eu/WWPCM/decks06/d04408/d04408.htm 26 | https://en.wikipedia.org/wiki/Russian_playing_cards 27 | https://www.wopc.co.uk/russia/epokha-vozrozhdeniya 28 | https://www.7bellonline.it/cartedagioco/mazzistandard/nazione/?tipo=russe 29 | http://www.plainbacks.com/PBNew/Packs%20Pages/E100.html 30 | https://www.altacarta.com/deutsch/research/russia-AtlasKartenScharlemans.html 31 | https://gallica.bnf.fr/ark:/12148/btv1b10511180c 32 | https://gallica.bnf.fr/ark:/12148/btv1b105093277 33 | -------------------------------------------------------------------------------- /src/ar-style-gtk.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2009, 2010 Christian Persch 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #pragma once 19 | 20 | 21 | #include 22 | 23 | #include "ar-style.h" 24 | 25 | G_BEGIN_DECLS 26 | 27 | void _ar_style_gtk_class_install_style_properties (GtkWidgetClass *widget_class); 28 | void _ar_style_gtk_attach (ArStyle *style, 29 | GtkWidget *widget); 30 | void _ar_style_gtk_detach (ArStyle *style, 31 | GtkWidget *widget); 32 | 33 | 34 | G_END_DECLS 35 | -------------------------------------------------------------------------------- /src/lib/ar-help.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2008 Thomas H.P. Andersen 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef AR_HELP_H 19 | #define AR_HELP_H 20 | 21 | #include 22 | 23 | G_BEGIN_DECLS 24 | 25 | void ar_help_display (GtkWidget *window, 26 | const char *doc_module, 27 | const char *section); 28 | gboolean ar_help_display_full (GtkWidget *window, 29 | const char *doc_module, 30 | const char *section, 31 | GError **error); 32 | 33 | G_END_DECLS 34 | 35 | #endif /* !AR_HELP_H */ 36 | -------------------------------------------------------------------------------- /src/lib/ar-show.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2008 Thomas H.P. Andersen 3 | * Copyright © 2007, 2008, 2009 Christian Persch 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #ifndef AR_SHOW_H 20 | #define AR_SHOW_H 21 | 22 | #include 23 | 24 | G_BEGIN_DECLS 25 | 26 | gboolean ar_show_uri (GdkScreen *screen, 27 | const char *uri, 28 | guint32 timestamp, 29 | GError **error); 30 | void ar_show_error (GtkWidget *window, 31 | GError *error, 32 | const char *primary_text_format, 33 | ...) G_GNUC_PRINTF (3, 4); 34 | 35 | G_END_DECLS 36 | 37 | #endif /* !AR_SHOW_H */ 38 | -------------------------------------------------------------------------------- /cards/README.atlasnye: -------------------------------------------------------------------------------- 1 | Atlasnye (Атласные) "Satin" SVG card deck for AisleRiot 2 | International variant with English index letters and Jokers 3 | 4 | (C) Vincent Bermel 2024 5 | 6 | License: GNU LGPL 3.0 or later 7 | 8 | Cf. COPYING.LGPL3 file or 9 | https://www.gnu.org/licenses/lgpl-3.0.html 10 | 11 | Based on "Atlasnye playing cards deck" SVG playing cards found here: 12 | https://commons.wikimedia.org/wiki/File:Atlasnye_playing_cards_deck_2.svg 13 | (2017 version) 14 | https://commons.wikimedia.org/wiki/File:Atlasnye_playing_cards_deck.svg 15 | (2014 version) 16 | 17 | by Дмитрий Фомин (Dmitry Fomin) 18 | 19 | Original license: Creative Commons CC0 1.0 20 | https://directory.fsf.org/wiki/License:CC0 21 | 22 | which itself is based on a Russian playing card deck 23 | designed by the Russian painter Adolf Iosifovich Charlemagne 24 | (Адольф Иосифович Шарлемань) [1826-1901] in 1862. 25 | 26 | More information on the "Atlas(nye)" playing card design: 27 | http://a.trionfi.eu/WWPCM/decks06/d04408/d04408.htm 28 | https://en.wikipedia.org/wiki/Russian_playing_cards 29 | http://www.plainbacks.com/PBNew/Packs%20Pages/E100.html 30 | https://www.wopc.co.uk/russia/epokha-vozrozhdeniya 31 | https://www.7bellonline.it/cartedagioco/mazzistandard/nazione/?tipo=russe 32 | https://www.altacarta.com/deutsch/research/russia-AtlasKartenScharlemans.html 33 | https://gallica.bnf.fr/ark:/12148/btv1b10511180c 34 | https://gallica.bnf.fr/ark:/12148/btv1b105093277 35 | -------------------------------------------------------------------------------- /cards/README.atlasnye_skat: -------------------------------------------------------------------------------- 1 | Atlasnye (Атласные) "Satin" SVG card deck with German index letters. 2 | Four-colour card deck using the German Skat tournament colours for the suits 3 | aka "Turnierbild". 4 | 5 | Based on "Atlasnye playing cards deck" SVG playing cards found here: 6 | https://commons.wikimedia.org/wiki/File:Atlasnye_playing_cards_deck_2.svg 7 | (2017 version) 8 | 9 | by Дмитрий Фомин (Dmitry Fomin) 10 | 11 | Original license: Creative Commons CC0 1.0 12 | https://directory.fsf.org/wiki/License:CC0 13 | 14 | Modifications by Vincent Bermel 15 | (C) Vincent Bermel 2024 16 | 17 | License of the modified version: GNU LGPL 3.0 or later 18 | 19 | Cf. COPYING.LGPL3 file or 20 | https://www.gnu.org/licenses/lgpl-3.0.html 21 | 22 | which itself is based on a Russian playing card deck 23 | designed by the Russian painter Adolf Iosifovich Charlemagne 24 | (Адольф Иосифович Шарлемань) [1826-1901] in 1862. 25 | 26 | More information on the "Atlas(nye)" playing card design: 27 | http://a.trionfi.eu/WWPCM/decks06/d04408/d04408.htm 28 | https://en.wikipedia.org/wiki/Russian_playing_cards 29 | https://www.wopc.co.uk/russia/epokha-vozrozhdeniya 30 | https://www.7bellonline.it/cartedagioco/mazzistandard/nazione/?tipo=russe 31 | http://www.plainbacks.com/PBNew/Packs%20Pages/E100.html 32 | https://www.altacarta.com/deutsch/research/russia-AtlasKartenScharlemans.html 33 | https://gallica.bnf.fr/ark:/12148/btv1b10511180c 34 | https://gallica.bnf.fr/ark:/12148/btv1b105093277 35 | -------------------------------------------------------------------------------- /cards/README.anglo_poker: -------------------------------------------------------------------------------- 1 | Anglo Poker SVG card deck for AisleRiot 2 | 3 | An "English pattern" card deck (Poker-sized cards). 4 | 5 | (C) Vincent Bermel 2024 6 | 7 | License: GNU LGPL 3.0 or later 8 | 9 | Cf. COPYING.LGPL3 file or 10 | https://www.gnu.org/licenses/lgpl-3.0.html 11 | 12 | Made with Adrian Kennard's SVG card generator 13 | https://www.me.uk/cards/ 14 | https://github.com/revk/SVG-playing-cards 15 | 16 | Original license: Creative Commons CC0 1.0 17 | https://directory.fsf.org/wiki/License:CC0 18 | 19 | Background info: 20 | https://www.revk.uk/2018/06/svg-vector-playing-cards.html 21 | 22 | Examples of the referenced Goodall design from the 1860s 23 | http://www.plainbacks.com/PBNew/Packs%20Pages/M63.html 24 | http://www.plainbacks.com/PBNew/Packs%20Pages/M50.html 25 | http://www.plainbacks.com/imagegroups/Mg.html#M9 26 | https://www.britishmuseum.org/collection/object/P_1881-0312-28-79 27 | https://gallica.bnf.fr/ark:/12148/btv1b10525062r 28 | https://gallica.bnf.fr/ark:/12148/btv1b10525041g 29 | https://kenlodge.blogspot.com/2012/08/12-goodall.html 30 | https://www.wopc.co.uk/goodall/shakespeare-300-anniversary 31 | https://www.wopc.co.uk/blogs/ken-lodge/goodall 32 | 33 | According to the legal team of Winning Moves UK who are the legal successor of 34 | the Goodall company and publish similar cards ("Waddington's" brand) today 35 | (Goodall&Son -> De La Rue -> Waddington's -> Hasbro -> Winning Moves) there are 36 | no trademark or publishing rights reasons prohibiting the use of this design. 37 | -------------------------------------------------------------------------------- /src/lib/ar-card-theme-qsvg-private.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright © 2004 Callum McKenzie 3 | Copyright © 2007, 2008, 2010, 2014 Christian Persch 4 | 5 | This programme is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | This programme is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with this programme. If not, see . */ 17 | 18 | /* Authors: Callum McKenzie */ 19 | 20 | #include 21 | #include 22 | 23 | #define MAX_N_BACKS (10) 24 | 25 | struct _ArCardThemeQSvgClass { 26 | ArCardThemeClass parent_class; 27 | 28 | QApplication *app; 29 | }; 30 | 31 | struct _ArCardThemeQSvg { 32 | ArCardTheme parent_instance; 33 | 34 | QSvgRenderer *renderer; 35 | QSvgRenderer *slot_renderer; 36 | 37 | QRectF back_rect; 38 | QSize card_size; 39 | 40 | char *backs[MAX_N_BACKS]; 41 | guint n_backs : 4; /* enough bits for MAX_N_BACKS */ 42 | guint back_index : 4; /* same */ 43 | guint has_2_jokers : 1; 44 | guint has_joker : 1; 45 | guint legacy : 1; 46 | }; 47 | -------------------------------------------------------------------------------- /src/README: -------------------------------------------------------------------------------- 1 | How to compile AisleRiot on different platforms 2 | =============================================== 3 | 4 | The AilseRiot code supports different platforms: GNOME (using GConf), and 5 | GTK only. 6 | 7 | To compile it for some platform, configure with 8 | 9 | ./configure --with-platform=gnome 10 | or 11 | ./configure --with-platform=gtk-only 12 | 13 | Environment variables 14 | ===================== 15 | 16 | You can set the following environment variables to influence the 17 | behaviour of AisleRiot: 18 | 19 | AR_DEBUG: 20 | Values: all | help | ... 21 | 22 | Use AR_DEBUG=help to get a list of supported debuggin options. 23 | 24 | AR_CARD_THEME_PATH_{SVG,KDE,SLICED,FIXED,PYSOL}: 25 | Values: a colon-separated list of paths 26 | Default: empty 27 | 28 | Set these variables to add extra paths to check for card themes. 29 | 30 | Debugging & Valgrinding AisleRiot 31 | ================================= 32 | 33 | If you configure with --enable-debug, there is extra debugging 34 | output available by setting the GAMES_DEBUG env variable. Use 35 | GAMES_DEBUG=help to see the list of available debug flags. 36 | 37 | When using valgrind, use the included ../data/aisleriot.supp suppressions file to 38 | suppress common valgrind errors relating to guile's garbage collection. 39 | 40 | There are also some debugging options available in the UI if you 41 | configure with --enable-debug-ui . 42 | 43 | How to write a new game for Aisleriot 44 | ===================================== 45 | 46 | See ../games/README. 47 | -------------------------------------------------------------------------------- /src/stats-dialog.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2007 Christian Persch 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #pragma once 19 | 20 | #include 21 | #include "conf.h" 22 | 23 | G_BEGIN_DECLS 24 | 25 | #define AISLERIOT_TYPE_STATS_DIALOG (aisleriot_stats_dialog_get_type ()) 26 | G_DECLARE_FINAL_TYPE(AisleriotStatsDialog, aisleriot_stats_dialog, AISLERIOT, STATS_DIALOG, GtkDialog); 27 | 28 | 29 | GType aisleriot_stats_dialog_get_type (void); 30 | AisleriotStatsDialog *aisleriot_stats_dialog_new (void); 31 | void aisleriot_stats_dialog_update (AisleriotStatsDialog *dialog, 32 | AisleriotStatistic *statistic); 33 | void aisleriot_stats_dialog_set_name (AisleriotStatsDialog *dialog, 34 | const char *game_name); 35 | 36 | 37 | G_END_DECLS 38 | -------------------------------------------------------------------------------- /src/ar-fullscreen-button.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2009 Christian Persch 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #pragma once 19 | 20 | #include 21 | 22 | G_BEGIN_DECLS 23 | 24 | 25 | #define AR_TYPE_FULLSCREEN_BUTTON (ar_fullscreen_button_get_type()) 26 | G_DECLARE_FINAL_TYPE (ArFullscreenButton, ar_fullscreen_button, AR, FULLSCREEN_BUTTON, GtkWindow); 27 | 28 | 29 | GType ar_fullscreen_button_get_type (void); 30 | GtkWidget* ar_fullscreen_button_new (GtkWindow *parent, 31 | GtkCornerType corner); 32 | void ar_fullscreen_button_set_corner (ArFullscreenButton *button, 33 | GtkCornerType corner); 34 | void ar_fullscreen_button_set_active (ArFullscreenButton *button, 35 | gboolean active); 36 | 37 | 38 | G_END_DECLS 39 | -------------------------------------------------------------------------------- /src/aisleriot-ui.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /src/lib/org.gnome.Patience.WindowState.gschema.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 21 | 22 | 23 | false 24 | Whether the window is maximized 25 | 26 | 27 | false 28 | Whether the window is fullscreen 29 | 30 | 31 | 32 | -1 33 | Window width 34 | 35 | 36 | 37 | -1 38 | Window height 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /cards/fix-card-ids.ed: -------------------------------------------------------------------------------- 1 | ,s/"1_club"/"club_1"/g 2 | ,s/"2_club"/"club_2"/g 3 | ,s/"3_club"/"club_3"/g 4 | ,s/"4_club"/"club_4"/g 5 | ,s/"5_club"/"club_5"/g 6 | ,s/"6_club"/"club_6"/g 7 | ,s/"7_club"/"club_7"/g 8 | ,s/"8_club"/"club_8"/g 9 | ,s/"9_club"/"club_9"/g 10 | ,s/"10_club"/"club_10"/g 11 | ,s/"jack_club"/"club_jack"/g 12 | ,s/"queen_club"/"club_queen"/g 13 | ,s/"king_club"/"club_king"/g 14 | ,s/"1_diamond"/"diamond_1"/g 15 | ,s/"2_diamond"/"diamond_2"/g 16 | ,s/"3_diamond"/"diamond_3"/g 17 | ,s/"4_diamond"/"diamond_4"/g 18 | ,s/"5_diamond"/"diamond_5"/g 19 | ,s/"6_diamond"/"diamond_6"/g 20 | ,s/"7_diamond"/"diamond_7"/g 21 | ,s/"8_diamond"/"diamond_8"/g 22 | ,s/"9_diamond"/"diamond_9"/g 23 | ,s/"10_diamond"/"diamond_10"/g 24 | ,s/"jack_diamond"/"diamond_jack"/g 25 | ,s/"queen_diamond"/"diamond_queen"/g 26 | ,s/"king_diamond"/"diamond_king"/g 27 | ,s/"1_heart"/"heart_1"/g 28 | ,s/"2_heart"/"heart_2"/g 29 | ,s/"3_heart"/"heart_3"/g 30 | ,s/"4_heart"/"heart_4"/g 31 | ,s/"5_heart"/"heart_5"/g 32 | ,s/"6_heart"/"heart_6"/g 33 | ,s/"7_heart"/"heart_7"/g 34 | ,s/"8_heart"/"heart_8"/g 35 | ,s/"9_heart"/"heart_9"/g 36 | ,s/"10_heart"/"heart_10"/g 37 | ,s/"jack_heart"/"heart_jack"/g 38 | ,s/"queen_heart"/"heart_queen"/g 39 | ,s/"king_heart"/"heart_king"/g 40 | ,s/"1_spade"/"spade_1"/g 41 | ,s/"2_spade"/"spade_2"/g 42 | ,s/"3_spade"/"spade_3"/g 43 | ,s/"4_spade"/"spade_4"/g 44 | ,s/"5_spade"/"spade_5"/g 45 | ,s/"6_spade"/"spade_6"/g 46 | ,s/"7_spade"/"spade_7"/g 47 | ,s/"8_spade"/"spade_8"/g 48 | ,s/"9_spade"/"spade_9"/g 49 | ,s/"10_spade"/"spade_10"/g 50 | ,s/"jack_spade"/"spade_jack"/g 51 | ,s/"queen_spade"/"spade_queen"/g 52 | ,s/"king_spade"/"spade_king"/g 53 | ,s/"black_joker"/"joker_black"/g 54 | ,s/"red_joker"/"joker_red"/g 55 | w 56 | q 57 | 58 | -------------------------------------------------------------------------------- /src/lib/ar-sound.h: -------------------------------------------------------------------------------- 1 | /* 2 | * games-sound.h: common sound player for gnome-games 3 | * 4 | * Copyright © 2007-2008 Andreas Røsdal 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 19 | * 20 | */ 21 | 22 | #ifndef GAMES_SOUND_H 23 | #define GAMES_SOUND_H 24 | 25 | #include 26 | 27 | G_BEGIN_DECLS 28 | 29 | gboolean ar_sound_is_available (void); 30 | void ar_sound_init (GdkScreen *screen); 31 | #ifndef GDK_MULTIHEAD_SAFE 32 | void ar_sound_play (const gchar *sound_name); 33 | #endif 34 | void ar_sound_play_for_screen (const gchar *sound_name, 35 | GdkScreen *screen); 36 | void ar_sound_play_for_event (const gchar *sound_name, 37 | GdkEvent *event); 38 | void ar_sound_play_for_widget (const gchar *sound_name, 39 | GtkWidget *widget); 40 | void ar_sound_enable (gboolean enabled); 41 | gboolean ar_sound_is_enabled (void); 42 | 43 | G_END_DECLS 44 | 45 | #endif /* !GAMES_SOUND_H */ 46 | -------------------------------------------------------------------------------- /.gitlab-ci/make-release.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright © 2025 Christian Persch 4 | # 5 | # This library is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Lesser General Public License as published 7 | # by the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This library is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU Lesser General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU Lesser General Public License 16 | # along with this library. If not, see . 17 | 18 | # Usage: make-release.sh [token-file] [ref] 19 | # e.g.: make-release.sh token master # release from master 20 | # or : make-release.sh token stable-1-0 # release from stable-1-0 branch 21 | 22 | # The project ID is displayed on the project's page in gitlab, or use 23 | # the API to get it (replacing ${NAMESPACE} and ${PROJECT} accordingly): 24 | # curl --silent -H "Content-Type: application/json" "https://gitlab.gnome.org/api/v4/projects/${NAMESPACE}%2F${PROJECT}" | jq -r .id 25 | 26 | PROJECT_ID=1910 27 | 28 | if [ $BASH_ARGC -ne 2 ]; then 29 | echo Usage: $0 TOKEN-FILE COMMIT-REF 30 | exit 1 31 | fi 32 | 33 | TOKEN_FILE="$1" 34 | COMMIT_REF="$2" 35 | 36 | curl --silent \ 37 | --request POST \ 38 | --form-string "token=$(cat $TOKEN_FILE)" \ 39 | --form-string "ref=${COMMIT_REF}" \ 40 | --form-string "variables[TRIGGER_ACTION]=release" \ 41 | "https://gitlab.gnome.org/api/v4/projects/${PROJECT_ID}/trigger/pipeline" | jq . 42 | -------------------------------------------------------------------------------- /cards/README.mittelalter: -------------------------------------------------------------------------------- 1 | Mittelalter SVG card deck for AisleRiot, German index letters. 2 | JPG-compressed Bitmaps for court cards + Jokers + back. 3 | 4 | Copyright (C) 2024 Vincent Bermel 5 | License: GNU LGPL 3.0 or later 6 | 7 | Cf. COPYING.LGPL3 file or 8 | https://www.gnu.org/licenses/lgpl-3.0.html 9 | 10 | The included JPG-bitmap images (which the above copyright does not apply to) 11 | are based on my retouched scans of a vintage card deck "No. 150 Whist" made by 12 | the former B.Dondorf company. First edition which was printed from 1889 on, 13 | originally sold in the 1890s according to a US tax seal on the box. 14 | 15 | The cards are also known as "Mittelalter"/"Middle Ages", the design was in 16 | print until 1933. 17 | 18 | More information: 19 | https://www.wopc.co.uk/germany/dondorf/mittelalter 20 | http://www.dxpo-playingcards.com/xpo/lockdown/pages/lock-05-23.htm 21 | http://a.trionfi.eu/WWPCM/decks02/d00452/d00452.htm 22 | https://unitedcardists.com/viewtopic.php?f=39&t=15137 23 | https://unitedcardists.com/viewtopic.php?p=242349#p242349 24 | http://gkards.com/en/decks/000225# 25 | https://www.rubylane.com/item/404269-T00007963 26 | 27 | Cards featuring this or a related design were also issued by Portuguese, 28 | Brazilian and Russian publishers: 29 | https://www.wopc.co.uk/portugal/nunes-whist-32 30 | https://www.wopc.co.uk/portugal/middle-ages 31 | http://a.trionfi.eu/WWPCM/decks16/d14083/d14083.htm 32 | http://www.endebrock.de/coll/pages/rus13.html 33 | https://artcol.ru/en/cards/classic/g01748 34 | https://artcol.ru/en/cards/classic/g04312 35 | 36 | 37 | Joker from my Clubkarte deck which is the standard Dondorf joker design issued 38 | from 1889 on. 39 | http://a.trionfi.eu/WWPCM/decks02/d00557/d00557.htm 40 | 41 | Font used (converted to path, modified): 42 | Barlow (Semi Bold); Open Font License (OFL) 43 | -------------------------------------------------------------------------------- /src/get_titles.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env perl 2 | 3 | # Aisleriot Game Name Internationalizator 4 | # 5 | # Copyright (C) 2001 Free Software Foundation. 6 | # 7 | # This program is free software: you can redistribute it and/or modify 8 | # it under the terms of the GNU General Public License as published by 9 | # the Free Software Foundation, either version 3 of the License, or 10 | # (at your option) any later version. 11 | # 12 | # This program is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program. If not, see . 19 | # 20 | # Authors: 21 | # 2006 - Richard Hoelscher 22 | # 2001 - Kenneth Christiansen 23 | 24 | open OUTFILE, "> game-names.h"; 25 | 26 | opendir(DIR, "../games/"); 27 | @dir = sort(readdir(DIR)); 28 | closedir(DIR); 29 | 30 | print OUTFILE "/* This is a generated file; DO NOT EDIT */\n"; 31 | 32 | foreach $_ (@dir) { 33 | next if (/^(api|card-monkey)\.scm$/); 34 | if (s/^(.)(.*).scm/\u$1$2/) { # Match scm filenames. Upcase first letter. 35 | s/-(.)/ \u$1/g; # Replace underscores and following letter 36 | # with space and upcase letter. 37 | print OUTFILE "/* Translators: this string is the name of a game of patience.\n"; 38 | print OUTFILE " If there is an established standard name for this game in your\n"; 39 | print OUTFILE " locale, use that; otherwise you can translate this string\n"; 40 | print OUTFILE " freely, literally, or not at all, at your option.\n"; 41 | print OUTFILE " */\n"; 42 | print OUTFILE "N_(\"$_\")\n\n"; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/lib/ar-debug.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2002,2003 Red Hat, Inc. 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesser General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #include 19 | 20 | #include 21 | 22 | #include "ar-debug.h" 23 | 24 | #ifdef GNOME_ENABLE_DEBUG 25 | ArDebugFlags ar_debug_flags; 26 | #endif 27 | 28 | void 29 | ar_debug_init (void) 30 | { 31 | #ifdef GNOME_ENABLE_DEBUG 32 | const GDebugKey keys[] = { 33 | { "blocks-cache", AR_DEBUG_BLOCKS_CACHE }, 34 | { "card-cache", AR_DEBUG_CARD_CACHE }, 35 | { "card-theme", AR_DEBUG_CARD_THEME }, 36 | { "runtime", AR_DEBUG_RUNTIME }, 37 | { "scheme", AR_DEBUG_SCHEME }, 38 | { "sound", AR_DEBUG_SOUND }, 39 | { "window-state", AR_DEBUG_WINDOW_STATE }, 40 | 41 | { "game-drawing", AR_DEBUG_GAME_DRAWING }, 42 | { "game-events", AR_DEBUG_GAME_EVENTS }, 43 | { "game-keynav", AR_DEBUG_GAME_KEYNAV }, 44 | { "game-sizing", AR_DEBUG_GAME_SIZING }, 45 | { "game-style", AR_DEBUG_GAME_STYLE } 46 | }; 47 | const char *env; 48 | 49 | env = g_getenv ("AR_DEBUG"); 50 | 51 | ar_debug_flags = g_parse_debug_string (env, keys, G_N_ELEMENTS (keys)); 52 | #endif /* GNOME_ENABLE_DEBUG */ 53 | } 54 | -------------------------------------------------------------------------------- /cards/README.bellot: -------------------------------------------------------------------------------- 1 | This is the README file that comes with the original bellot.svg 2 | file. He calls it SVG-cards now, and you can find it at 3 | http://david.bellot.free.fr/svg-cards. As of writing we are using 4 | version 2.0. 5 | 6 | Note the reference to the LGPL - for simplicity this 7 | whole distribution is under the GPL but you can safely use bellot.svg 8 | under the LGPL. All we've changed is the name and thats only for 9 | historical reasons. 10 | 11 | --------------------------------------------------------------------- 12 | 13 | SVG-cards 2.0 14 | ------------- 15 | 16 | This is a set of playing cards made in pure SVG with all kings, 17 | queens, jacks, numbers, jokers and backs of cards. This set of SVG 18 | files is intended to be used in games, figures, illustrations, web 19 | sites as long as you provide the code source and the LGPL license (see 20 | the COPYING file). Although this is a free software, the license is 21 | the LGPL so you can use this set of cards even in a non-free software. 22 | 23 | The kings, queens and jacks are based on the french representation, 24 | because I find them beautiful. You can access to each either by 25 | rendering the file into a pixmap and clipping each card or by using 26 | their name with a DOM interface. All cards are inside a SVG group. 27 | Example : the king of spade is inside this group : 28 | 29 | 30 | ... 31 | 32 | 33 | Names are the following : 34 | 35 | black_joker 36 | red_joker 37 | back 38 | {king,queen,jack}_{club,diamond,heart,spade} 39 | {1,2,3,4,5,6,7,8,9,10}_{club,diamond,heart,spade} 40 | 41 | Examples : 42 | - the ace of club is 1_club 43 | - the queen of diamond is queen_diamond 44 | 45 | and so on... 46 | 47 | 48 | These cards have been made with GNOME games in mind and have been 49 | succesfully tested with Nautilus, Eye of Gnome (both of them use 50 | librsvg) and Inkscape. 51 | 52 | Enjoy! 53 | 54 | David 55 | Berkeley, CA, USA 08/12/2005 56 | -------------------------------------------------------------------------------- /data/meson.build: -------------------------------------------------------------------------------- 1 | # Copyright © 2019 Christian Persch 2 | # 3 | # This programme is free software; you can redistribute it and/or modify it 4 | # under the terms of the GNU General Public License as published by 5 | # the Free Software Foundation; either version 3 of the License, or (at your 6 | # option) any later version. 7 | # 8 | # This programme is distributed in the hope that it will be useful, but 9 | # WITHOUT ANY WARRANTY; without even the implied warranty of 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11 | # See the GNU General Public License for more details. 12 | # 13 | # You should have received a copy of the GNU General Public License 14 | # along with this programme. If not, see . 15 | 16 | # Appstream data 17 | 18 | metainfo_its = [ 19 | 'metainfo.its', 20 | ] 21 | 22 | metainfodir = ar_prefix / ar_datadir / 'metainfo' 23 | 24 | i18n.itstool_join( 25 | input: 'org.gnome.Aisleriot.metainfo.xml.in', 26 | install: true, 27 | install_dir: metainfodir, 28 | install_tag: 'metadata', 29 | its_files: metainfo_its, 30 | mo_targets: gettext_targets[0], 31 | output: '@BASENAME@', 32 | ) 33 | 34 | # Desktop file 35 | 36 | desktopdatadir = ar_prefix / ar_datadir / 'applications' 37 | 38 | desktop_in = files( 39 | 'org.gnome.Aisleriot.desktop.in', 40 | ) 41 | 42 | i18n.merge_file( 43 | input: desktop_in, 44 | output: '@BASENAME@', 45 | type: 'desktop', 46 | po_dir: po_dir, 47 | install: true, 48 | install_dir: desktopdatadir, 49 | ) 50 | 51 | meson.add_install_script( 52 | 'meson_desktopfile.py', 53 | desktopdatadir, 54 | 'org.gnome.Aisleriot.desktop', 55 | ) 56 | 57 | # Valgrind suppressions 58 | 59 | valgrinddir = ar_prefix / ar_libdir / 'valgrind' 60 | 61 | valgrind_data = [ 62 | 'aisleriot.supp', 63 | ] 64 | 65 | install_data( 66 | sources: valgrind_data, 67 | install_dir: valgrinddir, 68 | ) 69 | 70 | # Subdirs 71 | 72 | subdir('icons') 73 | subdir('sounds') 74 | -------------------------------------------------------------------------------- /src/conf.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2007 Christian Persch 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef AISLERIOT_CONF_H 19 | #define AISLERIOT_CONF_H 20 | 21 | #include 22 | #include "ar-conf.h" 23 | 24 | G_BEGIN_DECLS 25 | 26 | typedef enum { 27 | CONF_THEME, 28 | CONF_VARIATION, 29 | CONF_RECENT_GAMES, 30 | CONF_SHOW_TOOLBAR, 31 | CONF_CLICK_TO_MOVE, 32 | CONF_SOUND, 33 | CONF_SHOW_STATUSBAR, 34 | CONF_ANIMATIONS, 35 | CONF_STATISTICS /* must be last */ 36 | } AisleriotConfKey; 37 | 38 | typedef struct { 39 | guint wins; 40 | guint total; 41 | guint best; 42 | guint worst; 43 | } AisleriotStatistic; 44 | 45 | void aisleriot_conf_init (void); 46 | 47 | void aisleriot_conf_shutdown (void); 48 | 49 | const char *aisleriot_conf_get_key (AisleriotConfKey key); 50 | 51 | gboolean aisleriot_conf_get_options (const char *game_module, int *options); 52 | 53 | void aisleriot_conf_set_options (const char *game_module, int options); 54 | 55 | void aisleriot_conf_get_statistic (const char *game_module, 56 | AisleriotStatistic * statistic); 57 | 58 | void aisleriot_conf_set_statistic (const char *game_module, 59 | AisleriotStatistic * statistic); 60 | 61 | G_END_DECLS 62 | #endif /* !AISLERIOT_CONF_H */ 63 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | # Copyright © 2025 Christian Persch 2 | # 3 | # This library is free software: you can redistribute it and/or modify 4 | # it under the terms of the GNU Lesser General Public License as published 5 | # by the Free Software Foundation, either version 3 of the License, or 6 | # (at your option) any later version. 7 | # 8 | # This library is distributed in the hope that it will be useful, 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | # GNU Lesser General Public License for more details. 12 | # 13 | # You should have received a copy of the GNU Lesser General Public License 14 | # along with this library. If not, see . 15 | 16 | include: 17 | - project: 'chpe/versuch-ci' 18 | ref: 3456e47965ee17860dd0fc82b376fc7e7dfe1968 19 | file: '/versuch.yml' 20 | inputs: 21 | release-service: real 22 | 23 | variables: 24 | VERSUCH_FEDORA_VERSION: 41 25 | 26 | # Increase this serial when changing VERSUCH_FEDORA_PACKAGES 27 | # below, and reset to 0 when changing VERSUCH_FEDORA_VERSION 28 | # above. 29 | VERSUCH_FEDORA_SERIAL: '0' 30 | 31 | VERSUCH_FEDORA_PACKAGES: >- 32 | appstream 33 | cairo-devel 34 | clang 35 | clang-analyzer 36 | clang-tools-extra 37 | desktop-file-utils 38 | gcc-c++ 39 | gettext-devel 40 | glib2-devel 41 | gtk3-devel 42 | guile30-devel 43 | itstool 44 | libappstream-glib 45 | librsvg2-devel 46 | librsvg2-tools 47 | libxml2 48 | libxslt 49 | meson 50 | pango-devel 51 | qt5-qtsvg-devel 52 | yelp-tools 53 | 54 | VERSUCH_COMMON_BUILD_OPTIONS: >- 55 | --prefix=/usr 56 | -Ddocs=true 57 | -Dgconf=false 58 | -Dguile=3.0 59 | -Dsound=false 60 | -Dtheme_fixed=true 61 | -Dtheme_pysol=true 62 | -Dtheme_svg_qtsvg=true 63 | -Dtheme_svg_rsvg=true 64 | 65 | VERSUCH_CI_BOT_NAME: "Aisleriot Automation" 66 | -------------------------------------------------------------------------------- /data/icons/render-bitmaps.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require "rexml/document" 4 | require "ftools" 5 | include REXML 6 | INKSCAPE = '/usr/bin/inkscape' 7 | SRC = "./src" 8 | 9 | def renderit(file,explicit) 10 | svg = Document.new(File.new("#{SRC}/#{file}", 'r')) 11 | #puts "DEBUG: #{file}" 12 | svg.root.each_element("//g[contains(@inkscape:label,'baseplate')]") do |icon| 13 | if icon.attributes['inkscape:groupmode']=='layer' #only look inside layers, there may be pasted groups 14 | context = icon.elements["text[@inkscape:label='context']/tspan"].nil? ? 'blank' : icon.elements["text[@inkscape:label='context']/tspan"].text 15 | icon_name = icon.elements["text[@inkscape:label='icon-name']/tspan"].nil? ? 'blank' : icon.elements["text[@inkscape:label='icon-name']/tspan"].text 16 | puts "#{file}:#{icon.attributes['inkscape:label']} #{context}/#{icon_name}" 17 | icon.each_element("rect") do |box| 18 | dir = "hicolor/#{box.attributes['width']}x#{box.attributes['height']}/#{context}" 19 | out = "#{dir}/#{icon_name.gsub(/$/,'.png')}" 20 | cmd = "#{INKSCAPE} -i #{box.attributes['id']} -e #{out} #{SRC}/#{file} > /dev/null 2>&1" 21 | File.makedirs(dir) unless File.exists?(dir) 22 | if (!explicit && File.exists?(out)) 23 | print "-" #skip if PNG exists 24 | else 25 | system(cmd) 26 | print "." 27 | end 28 | end 29 | puts '' 30 | end 31 | end 32 | end 33 | 34 | if (ARGV[0].nil?) #render all SVGs 35 | system("mkdir hicolor/") unless File.exists?('hicolor') 36 | puts "Rendering from SVGs in #{SRC}" 37 | Dir.foreach(SRC) do |file| 38 | renderit(file, false) if file.match(/svg$/) 39 | end 40 | puts "\nrendered all SVGs" 41 | else #only render the SVG passed 42 | file = "#{ARGV[0]}.svg" 43 | if (File.exists?("#{SRC}/#{file}")) 44 | renderit(file, true) 45 | puts "\nrendered #{file}" 46 | else 47 | puts "[E] No such file (#{file})" 48 | end 49 | end 50 | -------------------------------------------------------------------------------- /cards/README.clubkarte: -------------------------------------------------------------------------------- 1 | Clubkarte SVG card deck for AisleRiot, Dutch index letters. 2 | JPG-compressed Bitmaps for court cards + Jokers + back. 3 | 4 | Copyright (C) 2024 Vincent Bermel 5 | License: GNU LGPL 3.0 or later 6 | 7 | Cf. COPYING.LGPL3 file or 8 | https://www.gnu.org/licenses/lgpl-3.0.html 9 | 10 | This SVG playing cards include JPG-encoded bitmap images are based on my 11 | retouched scans (which the above copyright does not apply to) of a vintage card 12 | deck "No. 146 Whist-Karten" made by the former B.Dondorf G.m.b.H. company. 13 | According to the tax stamp (*) on the Ace/Hearts and mindful of the fact that 14 | Dondorf was a GmbH since 1906 the cards were originally sold between 15 | 1906 and 1918. 16 | 17 | The cards are also known as "Clubkarte" and according to the resources below 18 | the principal design was first published in 1860, the design rendition on my 19 | cards with updated colouring method was first published in 1875 and was in 20 | print until 1933 when the Dondorf company was taken over. 21 | I opted for Dutch index letters because the deck was exported to the 22 | Netherlands on a large scale. 23 | 24 | More information: 25 | http://a.trionfi.eu/WWPCM/decks02/d00626/d00626.htm 26 | https://www.wopc.co.uk/germany/dondorf/club-karte-86 27 | http://glazfab.com/gkards/en/decks/000010 28 | http://spielkartenonline.de/product.php?id_product=1442 29 | http://spielkartenonline.de/product.php?id_product=1290 30 | https://sparfire2016.wordpress.com/tyskland/dondorf/ 31 | https://gallica.bnf.fr/ark:/12148/btv1b105256767 32 | http://www.dxpo-playingcards.com/xpo/deck-month/pages/deck-month-07.htm 33 | (month 07) 34 | 35 | The Joker is Dondorf's standard joker issued from 1889 on. 36 | http://a.trionfi.eu/WWPCM/decks02/d00557/d00557.htm 37 | 38 | 39 | Font used (converted to path, modified): 40 | Barlow (Open Font License (OFL)) 41 | 42 | (*) tax stamp information gathered from here 43 | http://www.endebrock.de/stamps/st-d1.html 44 | https://www.altacarta.com/deutsch/research/DeutscheSteuerstempel.html 45 | -------------------------------------------------------------------------------- /help/C/isabel.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Isabel 18 | 19 | Written by Rosanna Yuen 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Tableau 33 | 34 | Thirteen piles. Deal three cards face down and one card 35 | face up on every pile. 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | Goal 44 | 45 | 46 | Remove all cards. 47 | 48 | 49 | 50 | Rules 51 | 52 | 53 | Remove cards in pairs of equal rank. Every time a card is removed, 54 | the card underneath is flipped face up and becomes playable. Empty 55 | slots are not filled. 56 | 57 | 58 | 59 | Scoring 60 | 61 | 62 | Each pair of cards removed scores two points. 63 | 64 | 65 | Maximum possible score: 52 66 | 67 | 68 | 69 | Strategy 70 | 71 | 72 | Each pile starts with four cards. The trick is to remember how many 73 | cards each slot has left at any given time so that you can try to 74 | remove cards evenly. 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /help/C/jamestown.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Jamestown 18 | 19 | Written by Rosanna Yuen 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Stock 33 | 34 | Top left pile. All cards are placed here at beginning of 35 | play. 36 | 37 | 38 | 39 | Tableau 40 | 41 | Nine piles in a 3x3 formation. Each Tableau pile is dealt 42 | one card face up. 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | Goal 51 | 52 | 53 | Remove all cards. 54 | 55 | 56 | 57 | Rules 58 | 59 | 60 | Remove pairs of cards with the same rank. Empty piles are 61 | automatically filled from the Stock. 62 | 63 | 64 | 65 | Scoring 66 | 67 | 68 | Removing each pair of cards scores two points. 69 | 70 | 71 | Maximum possible score: 52 72 | 73 | 74 | 75 | Strategy 76 | 77 | 78 | Remove pairs of cards as fast as possible. That is the only challenge. 79 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /games/will-o-the-wisp.scm: -------------------------------------------------------------------------------- 1 | ; AisleRiot - will_o_the_wisp.scm 2 | ; Copyright (C) 2001 Rosanna Yuen 3 | ; 4 | ; This program is free software: you can redistribute it and/or modify 5 | ; it under the terms of the GNU General Public License as published by 6 | ; the Free Software Foundation, either version 3 of the License, or 7 | ; (at your option) any later version. 8 | ; 9 | ; This program is distributed in the hope that it will be useful, 10 | ; but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | ; GNU General Public License for more details. 13 | ; 14 | ; You should have received a copy of the GNU General Public License 15 | ; along with this program. If not, see . 16 | 17 | (use-modules (aisleriot interface) (aisleriot api)) 18 | 19 | 20 | (primitive-load-path "spider") 21 | 22 | (define stock 0) 23 | (define foundation '(1 2 3 4)) 24 | (define tableau '(5 6 7 8 9 10 11)) 25 | (define winning-score 48) 26 | 27 | (define (new-game) 28 | (initialize-playing-area) 29 | (set-ace-low) 30 | (make-standard-deck) 31 | (shuffle-deck) 32 | 33 | (add-normal-slot DECK) 34 | 35 | (add-blank-slot) 36 | (add-blank-slot) 37 | 38 | (add-normal-slot '()) 39 | (add-normal-slot '()) 40 | (add-normal-slot '()) 41 | (add-normal-slot '()) 42 | 43 | (add-carriage-return-slot) 44 | 45 | (add-extended-slot '() down) 46 | (add-extended-slot '() down) 47 | (add-extended-slot '() down) 48 | (add-extended-slot '() down) 49 | (add-extended-slot '() down) 50 | (add-extended-slot '() down) 51 | (add-extended-slot '() down) 52 | 53 | (deal-cards 0 '(5 6 7 8 9 10 11 5 6 7 8 9 10 11)) 54 | (deal-cards-face-up 0 '(5 6 7 8 9 10 11 )) 55 | 56 | (give-status-message) 57 | 58 | (list 7 4)) 59 | 60 | (define (get-options) #f) 61 | 62 | (define (apply-options options) #f) 63 | 64 | (set-lambda! 'new-game new-game) 65 | (set-lambda! 'get-options get-options) 66 | (set-lambda! 'apply-options apply-options) 67 | -------------------------------------------------------------------------------- /src/board-noclutter.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 1998, 2003 Jonathan Blandford 3 | * Copyright © 2007, 2010 Christian Persch 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #pragma once 20 | 21 | #include 22 | #include "game.h" 23 | #include "ar-style.h" 24 | 25 | 26 | G_BEGIN_DECLS 27 | 28 | 29 | #define AISLERIOT_TYPE_BOARD (aisleriot_board_get_type ()) 30 | G_DECLARE_DERIVABLE_TYPE (AisleriotBoard, aisleriot_board, AISLERIOT, BOARD, GtkDrawingArea); 31 | 32 | 33 | struct _AisleriotBoardClass { 34 | GtkDrawingAreaClass parent_class; 35 | 36 | void (* status_message) (AisleriotBoard *board, 37 | const char *message); 38 | 39 | /* keybinding signals */ 40 | gboolean (* move_cursor) (AisleriotBoard *board, 41 | GtkMovementStep step, 42 | int count); 43 | void (* activate) (AisleriotBoard *board); 44 | void (* toggle_selection) (AisleriotBoard *board); 45 | void (* select_all) (AisleriotBoard *board); 46 | void (* deselect_all) (AisleriotBoard *board); 47 | }; 48 | 49 | GType aisleriot_board_get_type (void); 50 | GtkWidget *aisleriot_board_new (ArStyle *style, 51 | AisleriotGame *game); 52 | void aisleriot_board_abort_move (AisleriotBoard *board); 53 | 54 | 55 | G_END_DECLS 56 | -------------------------------------------------------------------------------- /games/spiderette.scm: -------------------------------------------------------------------------------- 1 | ; AisleRiot - spiderette.scm 2 | ; Copyright (C) 2001 Rosanna Yuen 3 | ; 4 | ; This program is free software: you can redistribute it and/or modify 5 | ; it under the terms of the GNU General Public License as published by 6 | ; the Free Software Foundation, either version 3 of the License, or 7 | ; (at your option) any later version. 8 | ; 9 | ; This program is distributed in the hope that it will be useful, 10 | ; but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | ; GNU General Public License for more details. 13 | ; 14 | ; You should have received a copy of the GNU General Public License 15 | ; along with this program. If not, see . 16 | 17 | (use-modules (aisleriot interface) (aisleriot api)) 18 | 19 | (primitive-load-path "spider") 20 | 21 | (define stock 0) 22 | (define foundation '(1 2 3 4)) 23 | (define tableau '(5 6 7 8 9 10 11)) 24 | (define winning-score 48) 25 | 26 | (define (new-game) 27 | (initialize-playing-area) 28 | (set-ace-low) 29 | (make-standard-deck) 30 | (shuffle-deck) 31 | 32 | (add-normal-slot DECK) 33 | 34 | (add-blank-slot) 35 | (add-blank-slot) 36 | 37 | (add-normal-slot '()) 38 | (add-normal-slot '()) 39 | (add-normal-slot '()) 40 | (add-normal-slot '()) 41 | 42 | (add-carriage-return-slot) 43 | 44 | (add-extended-slot '() down) 45 | (add-extended-slot '() down) 46 | (add-extended-slot '() down) 47 | (add-extended-slot '() down) 48 | (add-extended-slot '() down) 49 | (add-extended-slot '() down) 50 | (add-extended-slot '() down) 51 | 52 | (deal-cards 0 '(5 6 7 8 9 10 11 6 7 8 9 10 11 7 8 9 10 11 8 9 10 11 53 | 9 10 11 10 11 11)) 54 | (map flip-top-card '(5 6 7 8 9 10 11)) 55 | 56 | (give-status-message) 57 | 58 | (list 7 4)) 59 | 60 | (define (get-options) #f) 61 | 62 | (define (apply-options options) #f) 63 | 64 | (set-lambda! 'new-game new-game) 65 | (set-lambda! 'get-options get-options) 66 | (set-lambda! 'apply-options apply-options) 67 | -------------------------------------------------------------------------------- /src/lib/ar-profile.h: -------------------------------------------------------------------------------- 1 | /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- 2 | * 3 | * Copyright © 2005 William Jon McCann 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 | * 19 | * Authors: William Jon McCann 20 | */ 21 | 22 | #ifndef AR_PROFILE_H 23 | #define AR_PROFILE_H 24 | 25 | #include 26 | 27 | G_BEGIN_DECLS 28 | 29 | #ifdef ENABLE_PROFILING 30 | #ifdef G_HAVE_ISO_VARARGS 31 | #define ar_profilestart(...) ar_profilelog (G_STRFUNC, "start", __VA_ARGS__) 32 | #define ar_profileend(...) ar_profilelog (G_STRFUNC, "end", __VA_ARGS__) 33 | #define ar_profilemsg(...) ar_profilelog (NULL, NULL, __VA_ARGS__) 34 | #elif defined(G_HAVE_GNUC_VARARGS) 35 | #define ar_profilestart(format...) ar_profilelog (G_STRFUNC, "start", format) 36 | #define ar_profileend(format...) ar_profilelog (G_STRFUNC, "end", format) 37 | #define ar_profilemsg(format...) ar_profilelog (NULL, NULL, format) 38 | #else 39 | #error Need either ISO or GNUC varargs macros! 40 | #endif 41 | #else 42 | #define ar_profilestart(...) 43 | #define ar_profileend(...) 44 | #define ar_profilemsg(...) 45 | #endif 46 | 47 | void ar_profilelog (const char *func, 48 | const char *note, 49 | const char *format, 50 | ...) G_GNUC_PRINTF (3, 4); 51 | 52 | G_END_DECLS 53 | 54 | #endif /* AR_PROFILE_H */ 55 | -------------------------------------------------------------------------------- /help/C/fourteen.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 15 | 16 | Fourteen 17 | 18 | Written by Rosanna Yuen 19 | 20 | Setup 21 | 22 | 23 | 24 | 25 | 26 | 27 | Type of Deck 28 | Standard Deck 29 | 30 | 31 | Tableau 32 | 33 | Deal all cards face up evenly on to twelve piles. The first 34 | four piles will each have five cards while the other piles 35 | will all have four cards. The exposed card in each pile is 36 | in play. Empty piles cannot be filled. 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | Goal 45 | 46 | 47 | Remove all cards. 48 | 49 | 50 | 51 | Rules 52 | 53 | 54 | Cards can be removed in pairs that add up to fourteen. Aces are 55 | worth one and Jacks, Queens, and Kings are worth 11, 12, and 13 56 | respectively. 57 | 58 | 59 | 60 | Scoring 61 | 62 | 63 | Each card removed scores one point. 64 | 65 | 66 | Maximum possible score: 52 67 | 68 | 69 | 70 | Strategy 71 | 72 | 73 | Watch your step! Try to move cards that are resting on matching 74 | pairs as otherwise you might get stuck. 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /help/C/gay_gordons.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Gay Gordons 18 | 19 | Written by Rosanna Yuen 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Reserve 33 | 34 | Top left pile. Deal two cards face up here. The top card 35 | is in play. Cannot be refilled or built on. 36 | 37 | 38 | 39 | Tableau 40 | 41 | Ten piles. Deal five cards face up in each pile. The top 42 | card in each pile is in play. Empty piles cannot be filled. 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | Goal 51 | 52 | 53 | Remove all cards. 54 | 55 | 56 | 57 | Rules 58 | 59 | 60 | Remove cards in pairs that add up to eleven. Kings are paired off 61 | with Queens. Jacks are paired off with other Jacks. 62 | 63 | 64 | 65 | Scoring 66 | 67 | 68 | Each pair of cards removed scores two points. 69 | 70 | 71 | Maximum possible score: 52 72 | 73 | 74 | 75 | Strategy 76 | 77 | 78 | Try to uncover cards that are buried under their pair-mate. 79 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /src/ar-stock.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2005 Richard Hoelscher 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program; if not, write to the Free Software 16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 17 | * 18 | * Authors: 19 | * Richard Hoelscher 20 | */ 21 | 22 | #pragma once 23 | 24 | 25 | #include 26 | #include 27 | 28 | G_BEGIN_DECLS 29 | 30 | /* These use stock gtk icons */ 31 | #define AR_STOCK_FULLSCREEN "aisleriot-fullscreen" 32 | #define AR_STOCK_LEAVE_FULLSCREEN "aisleriot-leave-fullscreen" 33 | #define AR_STOCK_NEW_GAME "aisleriot-game-new" 34 | #define AR_STOCK_START_NEW_GAME "aisleriot-game-new" 35 | #define AR_STOCK_PAUSE_GAME "aisleriot-game-pause" 36 | #define AR_STOCK_RESET "aisleriot-game-reset" 37 | #define AR_STOCK_RESTART_GAME "aisleriot-game-restart" 38 | #define AR_STOCK_HINT "aisleriot-game-hint" 39 | #define AR_STOCK_UNDO_MOVE "aisleriot-move-undo" 40 | #define AR_STOCK_REDO_MOVE "aisleriot-move-redo" 41 | #define AR_STOCK_CONTENTS "aisleriot-help-contents" 42 | 43 | /* These belong to us */ 44 | #define AR_STOCK_DEAL_CARDS "aisleriot-game-deal" 45 | 46 | 47 | void ar_stock_init (void); 48 | void ar_stock_prepare_for_statusbar_tooltips (GtkUIManager *ui_manager, 49 | GtkWidget *statusbar); 50 | gchar *ar_get_licence (const gchar *game_name); 51 | 52 | 53 | G_END_DECLS 54 | -------------------------------------------------------------------------------- /help/C/block_ten.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Block Ten 18 | 19 | Written by Rosanna Yuen 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Stock 33 | 34 | Top left pile. All cards are placed here at beginning of 35 | play. 36 | 37 | 38 | 39 | Tableau 40 | 41 | Nine piles in a 3x3 formation. Each Tableau pile is dealt 42 | one card face up. 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | Goal 51 | 52 | 53 | Remove all cards. 54 | 55 | 56 | 57 | Rules 58 | 59 | 60 | Remove cards in pairs that add up to ten. Jacks, Queens and Kings 61 | are removed in pairs. Tens cannot be removed. All empty slots are 62 | automatically filled by the Stock. 63 | 64 | 65 | 66 | Scoring 67 | 68 | 69 | Removing each pair of cards scores two points. 70 | 71 | 72 | Maximum possible score: 48 73 | 74 | 75 | 76 | Strategy 77 | 78 | 79 | This is a pure luck game. Therefore, any strategy involved would 80 | have to do with increasing your luck. 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /src/window.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2007 Christian Persch 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #pragma once 19 | 20 | #include 21 | #include "game.h" 22 | 23 | G_BEGIN_DECLS 24 | 25 | 26 | #define AISLERIOT_TYPE_WINDOW (aisleriot_window_get_type ()) 27 | G_DECLARE_FINAL_TYPE (AisleriotWindow, aisleriot_window, AISLERIOT, WINDOW, GtkApplicationWindow); 28 | 29 | 30 | GType aisleriot_window_get_type (void); 31 | GtkWidget * aisleriot_window_new (GtkApplication *application); 32 | GtkUIManager *aisleriot_window_get_ui_manager (AisleriotWindow *window); 33 | GtkAction * aisleriot_window_get_action (AisleriotWindow *window, 34 | const char *action_name); 35 | void aisleriot_window_set_game_module (AisleriotWindow *window, 36 | const char *game_module, 37 | GRand *rand); 38 | const char * aisleriot_window_get_game_module (AisleriotWindow *window); 39 | void aisleriot_window_new_game (AisleriotWindow *window); 40 | void aisleriot_window_change_game (AisleriotWindow *window); 41 | void aisleriot_window_show_statistics_dialog (AisleriotWindow *window); 42 | void aisleriot_window_show_about_dialog (AisleriotWindow *window); 43 | 44 | 45 | G_END_DECLS 46 | -------------------------------------------------------------------------------- /aisleriot.doap: -------------------------------------------------------------------------------- 1 | 6 | 7 | 24 | 25 | Aisleriot 26 | A collection of patience games written in guile scheme 27 | A collection of patience games written in guile scheme 28 | 29 | 30 | 31 | 32 | 33 | C 34 | Scheme 35 | 36 | 37 | 38 | Christian Persch 39 | 40 | chpe 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /cards/README.l-&-h: -------------------------------------------------------------------------------- 1 | L & H SVG card deck for AisleRiot, Swedish/Danish/Norwegian index letters. 2 | JPG-compressed Bitmaps for court cards. 3 | 4 | Copyright (C) Bruno Pellier 5 | Copyright (C) 2024 Vincent Bermel 6 | License: GNU LGPL 3.0 or later 7 | 8 | Cf. COPYING.LGPL3 file or 9 | https://www.gnu.org/licenses/lgpl-3.0.html 10 | 11 | Including bitmap images based on scans from gkards.com by Bruno Pellier 12 | (which my copyright does not apply to) 13 | http://gkards.com/en/decks/000135 14 | The scans are licensed under Creative Commons CC-BY as stated here 15 | http://gkards.com/en/about/project/presentation/ 16 | 17 | The card design is a variant of the "Frankfurt pattern" 18 | (also called "Rhineland pattern") published by the former playing card company 19 | "Vereinigte Stralsunder Spielkartenfabriken" (VSS). 20 | According to card collectors I contacted seeking information it was developed 21 | by the "Frankfurter Spielkartenfabrik Lennhoff & Heuser" 22 | (there are editions with their company sign) 23 | which was taken over by VSS in 1882. 24 | It was in production by various companies until the 1930s. 25 | 26 | More information (stated time of origin of oldest editions 1880 or 1875): 27 | http://www.museen.thueringen.de/Objekt/DE-MUS-865812/lido/dc00002378 28 | http://www.museen.thueringen.de/Objekt/DE-MUS-865812/lido/dc00002377 29 | http://www.museen.thueringen.de/Objekt/DE-MUS-865812/lido/dc00002221 30 | http://www.dxpo-playingcards.com/xpo/oldschool/oldschool07.htm 31 | http://a.trionfi.eu/WWPCM/decks02/d00568/d00568.htm 32 | http://a.trionfi.eu/WWPCM/decks03/d01254/d01254.htm 33 | https://www.7bellonline.it/cartedagioco/mazzistandard/nazione/?tipo=francoforte 34 | http://www.franzbraun-koeln.de/sp33_koeln.htm (upper left) 35 | http://www.dxpo-playingcards.com/xpo/oldschool/oldschool03.htm 36 | 37 | Later "fancier" version with from 1890 by Austrian maker Josef Glanz 38 | http://www.dxpo-playingcards.com/bargains/images/oos-017a.jpg 39 | 40 | 41 | Font used (converted to path, modified): 42 | Barlow Condensed (Open Font License (OFL)) 43 | Trade Winds (Open Font License (OFL)) 44 | 45 | Joker based on this public domain file 46 | https://commons.wikimedia.org/wiki/File:Fools_Cap_(PSF).png 47 | -------------------------------------------------------------------------------- /help/C/helsinki.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 15 | 16 | Helsinki 17 | 18 | Written by Rosanna Yuen 19 | 20 | Setup 21 | 22 | 23 | 24 | 25 | 26 | 27 | Type of Deck 28 | Standard Deck 29 | 30 | 31 | Stock 32 | 33 | Top left pile. The rest of the deck is placed here after 34 | dealing the Tableau. Cards are automatically placed on to 35 | the Tableau whenever a space opens up. 36 | 37 | 38 | 39 | Tableau 40 | 41 | Ten piles. Deal a card face up in every pile. 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | Goal 50 | 51 | 52 | Remove all cards. 53 | 54 | 55 | 56 | Rules 57 | 58 | 59 | Remove cards in pairs that add up to thirteen with Aces being one, 60 | Jacks being eleven, and Queens being twelve. Kings are removed 61 | singly. 62 | 63 | 64 | Empty Tableau piles are automatically filled from the Stock. 65 | 66 | 67 | 68 | Scoring 69 | 70 | 71 | Each card removed scores one point. 72 | 73 | 74 | Maximum possible score: 52 75 | 76 | 77 | 78 | Strategy 79 | 80 | 81 | Go as fast as you can. 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /src/lib/ar-profile.c: -------------------------------------------------------------------------------- 1 | /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- 2 | * 3 | * Copyright © 2005 William Jon McCann 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 | * 19 | * Authors: William Jon McCann 20 | */ 21 | 22 | #include 23 | 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | 31 | #include 32 | #include 33 | 34 | #include "ar-profile.h" 35 | 36 | void 37 | ar_profilelog (const char *func, 38 | const char *note, 39 | const char *format, 40 | ...) 41 | { 42 | va_list args; 43 | char *str; 44 | char *formatted; 45 | 46 | if (format == NULL) { 47 | formatted = g_strdup (""); 48 | } else { 49 | va_start (args, format); 50 | formatted = g_strdup_vprintf (format, args); 51 | va_end (args); 52 | } 53 | 54 | if (func != NULL) { 55 | str = g_strdup_printf ("MARK: %s %s: %s %s", g_get_prgname(), func, note ? note : "", formatted); 56 | } else { 57 | str = g_strdup_printf ("MARK: %s: %s %s", g_get_prgname(), note ? note : "", formatted); 58 | } 59 | 60 | g_free (formatted); 61 | 62 | g_access (str, F_OK); 63 | g_free (str); 64 | } 65 | -------------------------------------------------------------------------------- /help/C/eliminator.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 18 | 19 | Eliminator 20 | 21 | Written by Wa (logicplace.com) 22 | 23 | 24 | Setup 25 | 26 | 27 | 28 | 29 | Type of Deck 30 | Standard Deck 31 | 32 | 33 | Tableau 34 | 35 | Four piles. Deal 13 cards to each. (This is all of the cards.) 36 | 37 | 38 | 39 | Foundation 40 | 41 | Four to six empty slots that you build in either direction. 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | Goal 51 | 52 | Move all cards to Foundation. 53 | 54 | 55 | 56 | 57 | Rules 58 | 59 | Any card can be placed as the first card in the Foundation. 60 | Foundation piles can be built up or down from the top card's 61 | value, disregarding suit. Kings can be placed on Aces and 62 | vice versa. 63 | 64 | 65 | 66 | 67 | Scoring 68 | 69 | Every card moved from the Tableau on top of a card in the 70 | Foundation scores one point. 71 | 72 | 73 | Maximum possible score: 51 74 | 75 | 76 | 77 | 78 | Strategy 79 | 80 | Make sure to look at all the cards coming up, and be sure 81 | you're not going to lock any cards that are necessary to 82 | move the one on top. 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /games/gold-mine.scm: -------------------------------------------------------------------------------- 1 | ; AisleRiot - gold_mine.scm 2 | ; Copyright (C) 1998, 2003 Jonathan Blandford 3 | ; 4 | ; This program is free software: you can redistribute it and/or modify 5 | ; it under the terms of the GNU General Public License as published by 6 | ; the Free Software Foundation, either version 3 of the License, or 7 | ; (at your option) any later version. 8 | ; 9 | ; This program is distributed in the hope that it will be useful, 10 | ; but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | ; GNU General Public License for more details. 13 | ; 14 | ; You should have received a copy of the GNU General Public License 15 | ; along with this program. If not, see . 16 | 17 | (use-modules (aisleriot interface) (aisleriot api)) 18 | 19 | (primitive-load-path "klondike") 20 | 21 | (define deal-one #f) 22 | (define deal-three #t) 23 | (define kings-only #f) 24 | 25 | (define max-redeal 0) 26 | 27 | (define tableau '(6 7 8 9 10 11 12)) 28 | (define foundation '(2 3 4 5)) 29 | (define stock 0) 30 | (define waste 1) 31 | 32 | (define (new-game) 33 | (initialize-playing-area) 34 | (set-ace-low) 35 | 36 | (make-standard-deck) 37 | (shuffle-deck) 38 | 39 | (add-normal-slot DECK 'stock) 40 | 41 | (if deal-three 42 | (add-partially-extended-slot '() right 3 'waste) 43 | (add-normal-slot '() 'waste)) 44 | 45 | (add-blank-slot) 46 | (add-normal-slot '() 'foundation) 47 | (add-normal-slot '() 'foundation) 48 | (add-normal-slot '() 'foundation) 49 | (add-normal-slot '() 'foundation) 50 | (add-carriage-return-slot) 51 | (add-extended-slot '() down 'tableau) 52 | (add-extended-slot '() down 'tableau) 53 | (add-extended-slot '() down 'tableau) 54 | (add-extended-slot '() down 'tableau) 55 | (add-extended-slot '() down 'tableau) 56 | (add-extended-slot '() down 'tableau) 57 | (add-extended-slot '() down 'tableau) 58 | 59 | (give-status-message) 60 | 61 | (list 7 3.1) 62 | ) 63 | 64 | (define (get-options) 65 | '()) 66 | 67 | (define (apply-options options) #f) 68 | 69 | (set-lambda! 'new-game new-game) 70 | (set-lambda! 'get-options get-options) 71 | (set-lambda! 'apply-options apply-options) 72 | -------------------------------------------------------------------------------- /help/C/cover.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Cover 18 | 19 | Written by Rosanna Yuen 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Stock 33 | 34 | Top left pile. All remaining cards are placed here after 35 | dealing. 36 | 37 | 38 | 39 | Tableau 40 | 41 | Four piles. One card is dealt in each slot at the beginning 42 | of the game. Empty slots are immediately filled from the 43 | Stock. 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | Goal 52 | 53 | 54 | Empty the Stock. 55 | 56 | 57 | 58 | Rules 59 | 60 | 61 | Any two cards in the Tableau can be removed if they belong to the 62 | same suit. Spaces are immediately filled by cards in the 63 | Stock. The game is over when each suit is represented by one 64 | card in the Tableau. 65 | 66 | 67 | 68 | Scoring 69 | 70 | 71 | Each pair removed from the game scores two points. 72 | 73 | 74 | Maximum possible score: 48 75 | 76 | 77 | 78 | Strategy 79 | 80 | 81 | A quick short game with not much thought involved, cover is best 82 | played with minimal thought and quick reflexes. 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /src/lib/ar-runtime.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2007, 2008 Christian Persch 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #ifndef AR_RUNTIME_H 19 | #define AR_RUNTIME_H 20 | 21 | #include 22 | 23 | G_BEGIN_DECLS 24 | 25 | typedef enum { 26 | /* Base directories */ 27 | AR_RUNTIME_PREFIX, 28 | AR_RUNTIME_LIBRARY_DIRECTORY, 29 | AR_RUNTIME_DATA_DIRECTORY, 30 | AR_RUNTIME_PKG_DATA_DIRECTORY, 31 | AR_RUNTIME_PKG_LIBRARY_DIRECTORY, 32 | 33 | /* Derived directories */ 34 | AR_RUNTIME_LOCALE_DIRECTORY, 35 | AR_RUNTIME_PIXMAP_DIRECTORY, 36 | AR_RUNTIME_PRERENDERED_CARDS_DIRECTORY, 37 | AR_RUNTIME_SCALABLE_CARDS_DIRECTORY, 38 | AR_RUNTIME_ICON_THEME_DIRECTORY, 39 | AR_RUNTIME_SOUND_DIRECTORY, 40 | AR_RUNTIME_GAMES_DIRECTORY, 41 | AR_RUNTIME_GAMES_COMPILED_DIRECTORY, 42 | AR_RUNTIME_HELP_DIRECTORY, /* On win32 help is created as html with gnome-doc-tool, and put manually in this directory */ 43 | 44 | AR_RUNTIME_LAST_DIRECTORY, 45 | #ifdef ENABLE_BINRELOC 46 | AR_RUNTIME_FIRST_DERIVED_DIRECTORY = AR_RUNTIME_DATA_DIRECTORY, 47 | #else 48 | AR_RUNTIME_FIRST_DERIVED_DIRECTORY = AR_RUNTIME_LOCALE_DIRECTORY, 49 | #endif 50 | } ArRuntimeDirectory; 51 | 52 | gboolean ar_runtime_init (const char *name); 53 | void ar_runtime_shutdown (void); 54 | const char *ar_runtime_get_directory (ArRuntimeDirectory directory); 55 | char *ar_runtime_get_file (ArRuntimeDirectory directory, 56 | const char *name); 57 | gboolean ar_runtime_is_system_prefix (void); 58 | 59 | G_END_DECLS 60 | 61 | #endif /* !AR_RUNTIME_H */ 62 | -------------------------------------------------------------------------------- /cards/README.adler: -------------------------------------------------------------------------------- 1 | Adler SVG card deck for AisleRiot, German index letters. 2 | JPG-compressed Bitmaps for court cards. 3 | 4 | Copyright (C) Bruno Pellier 5 | Copyright (C) 2024 Vincent Bermel 6 | License: GNU LGPL 3.0 or later 7 | 8 | Cf. COPYING.LGPL3 file or 9 | https://www.gnu.org/licenses/lgpl-3.0.html 10 | 11 | Including bitmap images based on scans from gkards.com by Bruno Pellier 12 | (which my copyright does not apply to) 13 | http://gkards.com/jeux/000230 14 | The scans are licensed under Creative Commons CC-BY as stated here 15 | http://gkards.com/en/about/project/presentation/ 16 | 17 | The card design shows the historic card deck "Adler-Karte" published by the 18 | former playing card company "Vereinigte Stralsunder Spielkartenfabriken" (VSS). 19 | According to the stamp on the Ace of Hearts it was originally sold in the time 20 | from 1879 until 1888 (or later) (*). 21 | 22 | According to the following resources the game was issued from 1882 on by VSS: 23 | http://www.endebrock.de/coll/pages/d1690.html 24 | http://a.trionfi.eu/WWPCM/decks05/d02266/d02266.htm 25 | 26 | According to here the game was initially published by the 27 | "Frankfurter Spielkartenfabrik Lennhoff & Heuser" (FSF) (which was taken over 28 | by VSS in 1882) around 1870: 29 | http://www.endebrock.de/coll/pages/d1437.html 30 | 31 | Only colouring was changed in comparison to this initial design. 32 | 33 | Another version from the "late 19th century": 34 | https://www.britishmuseum.org/collection/object/P_1896-0501-816 35 | 36 | And one from "around 1890": 37 | http://www.dxpo-playingcards.com/xpo/deck-month/pages/deck-month-09.htm 38 | http://www.dxpo-playingcards.com/bargains/images/dui-119a.jpg 39 | http://www.dxpo-playingcards.com/bargains/images/dui-119b.jpg 40 | 41 | This "Adler-Karte" design was not overly popular it seems, it probably wasn't 42 | printed after the 1930s at max. I couldn't find editions with index letters. 43 | 44 | Font used (converted to path, modified): 45 | Barlow Condensed (Open Font License (OFL)) 46 | 47 | Joker based on this (original license Creative Commons CC0) 48 | https://www.svgrepo.com/svg/246749/jester-fool 49 | 50 | (*) tax stamp information taken from here 51 | http://www.endebrock.de/stamps/st-d1.html 52 | http://www.endebrock.de/stamps/st-d.html 53 | -------------------------------------------------------------------------------- /help/C/fortunes.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Fortunes 18 | 19 | Written by Rosanna Yuen 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Stock 33 | 34 | Top left pile. Deals a card to each Tableau pile when 35 | clicked. 36 | 37 | 38 | 39 | Tableau 40 | 41 | Four piles on right. Groups of cards can be moved on to 42 | empty piles. 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | Goal 51 | 52 | 53 | To remove all cards except the four Aces. 54 | 55 | 56 | 57 | Rules 58 | 59 | 60 | Aces are high cards. When two cards of the same suit are available, 61 | the one with the lower rank can be removed. When an empty slot 62 | appears, it can be filled with a group of cards. 63 | 64 | 65 | 66 | Scoring 67 | 68 | 69 | Each card removed scores one point. 70 | 71 | 72 | Maximum possible score: 48 73 | 74 | 75 | 76 | Strategy 77 | 78 | 79 | There is no reason to have an empty slot when dealing another batch 80 | of cards. However, when you have an empty slot, try to keep it 81 | empty as long as possible, as this is a great way to get rid of 82 | buried cards. 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /help/C/neighbor.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Neighbor 18 | 19 | Written by Rosanna Yuen 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Stock 33 | 34 | Top left pile. 35 | Dealt to the Tableau in the manner described below. 36 | 37 | 38 | 39 | Tableau 40 | 41 | Five by five grid, each capable of holding one card. One card dealt to 42 | each space at the beginning of game. Empty spaces automatically filled 43 | by moving cards from the right to the left, from the leftmost card of 44 | the row below to the rightmost space, and from the Stock to all 45 | otherwise empty spaces. 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | Goal 54 | 55 | 56 | Remove all cards. 57 | 58 | 59 | 60 | Rules 61 | 62 | 63 | Click on Kings to remove them. All other cards can be removed in pairs 64 | that add up to thirteen as long as the two cards are touching 65 | horizontally, vertically, or diagonally. 66 | 67 | 68 | 69 | Options 70 | 71 | 72 | None 73 | 74 | 75 | 76 | Scoring 77 | 78 | 79 | Each card removed scores one point. 80 | 81 | 82 | Maximum possible score: 52 83 | 84 | 85 | 86 | Strategy 87 | 88 | 89 | Remove cards higher up on the table first as this creates more 90 | movement within the grid. 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /help/C/golf.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 18 | 19 | Golf 20 | 21 | Written by Rosanna Yuen 22 | 23 | Setup 24 | 25 | 26 | 27 | 28 | 29 | 30 | Type of Deck 31 | Standard Deck 32 | 33 | 34 | Stock 35 | 36 | Place all remaining cards here. Cards are turned over one 37 | at a time to Waste. No redeals. 38 | 39 | 40 | 41 | Waste 42 | 43 | To be taken from Stock. Top card available for play. 44 | 45 | 46 | 47 | Tableau 48 | 49 | Seven piles. Deal five cards face up on every pile. 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | Goal 58 | 59 | 60 | Move all cards to Waste. 61 | 62 | 63 | 64 | Rules 65 | 66 | 67 | The Waste can be built up or down from the available cards on the 68 | Tableau. Only Deuces can be placed on Aces and nothing can be 69 | played on to a King. 70 | 71 | 72 | Cards are dealt singly from Stock to Waste. There are no redeals. 73 | 74 | 75 | 76 | Scoring 77 | 78 | 79 | Every card moved from Tableau to Waste scores one point. 80 | 81 | 82 | Maximum possible score: 35 83 | 84 | 85 | 86 | Strategy 87 | 88 | 89 | Remember that nothing can be played on to a King. Try to generate 90 | sequences where many cards can be removed without a new card from 91 | Stock. 92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /help/C/fortress.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 15 | 16 | Fortress 17 | 18 | Written by Rosanna Yuen 19 | 20 | Setup 21 | 22 | 23 | 24 | 25 | 26 | 27 | Type of Deck 28 | Standard Deck 29 | 30 | 31 | Foundation 32 | 33 | Four piles in the middle. To be built up in suit from Ace 34 | to King. Cards in Foundation piles are no longer in play. 35 | 36 | 37 | 38 | Tableau 39 | 40 | Five piles one each side of the Foundation. Deal five cards 41 | face up on to each of these piles and one more on the top 42 | two piles. The top card in any Tableau pile is available 43 | for play. 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | Goal 52 | 53 | 54 | Move all cards to Foundation piles. 55 | 56 | 57 | 58 | Rules 59 | 60 | 61 | Cards in Tableau piles can be built up or down in suit. Only the 62 | top card in every pile is available for play. Empty slots can be 63 | filled with any available card. 64 | 65 | 66 | The Foundations are built up from Ace to King in suit. Cards in 67 | Foundation piles are no longer in play. 68 | 69 | 70 | 71 | Scoring 72 | 73 | 74 | Each card in Foundation piles scores one point. 75 | 76 | 77 | Maximum possible score: 52 78 | 79 | 80 | 81 | Strategy 82 | 83 | 84 | Safeguard any empty Tableau slots you may create. They are the key 85 | to a successful game. 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /games/template.scm: -------------------------------------------------------------------------------- 1 | ; AisleRiot - 2 | ; Copyright (C) 3 | ; 4 | ; This program is free software: you can redistribute it and/or modify 5 | ; it under the terms of the GNU General Public License as published by 6 | ; the Free Software Foundation, either version 3 of the License, or 7 | ; (at your option) any later version. 8 | ; 9 | ; This program is distributed in the hope that it will be useful, 10 | ; but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | ; GNU General Public License for more details. 13 | ; 14 | ; You should have received a copy of the GNU General Public License 15 | ; along with this program. If not, see . 16 | 17 | (use-modules (aisleriot interface) (aisleriot api)) 18 | 19 | (define (new-game) 20 | (initialize-playing-area) 21 | 22 | (make-standard-deck) 23 | (shuffle-deck) 24 | 25 | (add-normal-slot DECK) 26 | 27 | (list 1 1)) 28 | 29 | (define (button-pressed slot-id card-list) 30 | #f) 31 | 32 | ;;; Not essential, see set-features below. 33 | (define (droppable? start-slot card-list end-slot) 34 | #f) 35 | 36 | (define (button-released start-slot card-list end-slot) 37 | ;; This will often start with somthing like: 38 | ;; (if (droppable? start-slot card-list end-slot ... 39 | #f) 40 | 41 | (define (button-clicked slot-id) 42 | #f) 43 | 44 | (define (button-double-clicked slot-id) 45 | #f) 46 | 47 | (define (game-continuable) 48 | #t) 49 | 50 | (define (game-won) 51 | #f) 52 | 53 | (define (get-hint) 54 | #f) 55 | 56 | (define (get-options) 57 | #f) 58 | 59 | (define (apply-options options) 60 | #f) 61 | 62 | (define (timeout) 63 | #f) 64 | 65 | (define (dealable?) 66 | #f) 67 | 68 | (define (do-deal-next-cards) 69 | #f) 70 | 71 | ;; Define the optional features the game uses. Valid options are: 72 | ;; droppable-feature: An predicate, droppable?, is defined that will 73 | ;; return whether the card can be dropped here. 74 | ;; This is used by the drawing code to highlight 75 | ;; droppable locations. 76 | ;; dealable-feature: An predicate, dealable?, is defined that will 77 | ;; return whether new card(s) can be dealt. 78 | (set-features droppable-feature dealable-feature) 79 | 80 | (set-lambda new-game button-pressed button-released button-clicked 81 | button-double-clicked game-continuable game-won get-hint get-options 82 | apply-options timeout droppable? dealable?) 83 | -------------------------------------------------------------------------------- /help/C/streets_and_alleys.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Streets and Alleys 18 | 19 | Written by Rosanna Yuen 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Foundation 33 | 34 | Four piles in the middle column. To be built from Ace to 35 | King. Topmost card in each Foundation can be played back on 36 | to the Tableau. 37 | 38 | 39 | 40 | Tableau 41 | 42 | Eight slots (four to the left and four to the right of 43 | Foundations.) Deal all cards face up and extended on to 44 | these eight piles so that there are seven cards in each pile 45 | on the left flank and six cards in each pile on the right 46 | flank and all cards are showing. 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | Goal 55 | 56 | 57 | Move all cards to the Foundation piles. 58 | 59 | 60 | 61 | Rules 62 | 63 | 64 | Cards in the Tableau are built down regardless of suit. Only one 65 | card can be moved at a time. Empty piles can be filled with any 66 | single card. 67 | 68 | 69 | Foundations are built up in suit. 70 | 71 | 72 | 73 | Scoring 74 | 75 | 76 | Each card in the Foundation piles scores one point. 77 | 78 | 79 | Maximum possible score: 52 80 | 81 | 82 | 83 | Strategy 84 | 85 | 86 | Build evenly on to Foundations if possible. Try and get an empty 87 | Tableau slot. 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /cards/meson.build: -------------------------------------------------------------------------------- 1 | # Copyright © 2019 Christian Persch 2 | # 3 | # This programme is free software; you can redistribute it and/or modify it 4 | # under the terms of the GNU General Public License as published by 5 | # the Free Software Foundation; either version 3 of the License, or (at your 6 | # option) any later version. 7 | # 8 | # This programme is distributed in the hope that it will be useful, but 9 | # WITHOUT ANY WARRANTY; without even the implied warranty of 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11 | # See the GNU General Public License for more details. 12 | # 13 | # You should have received a copy of the GNU General Public License 14 | # along with this programme. If not, see . 15 | 16 | # Cards 17 | 18 | xmllint_flags = [ 19 | '--nonet', 20 | '--noblanks', 21 | ] 22 | 23 | gzip_flags = [ 24 | '-9', 25 | '-n', 26 | ] 27 | 28 | cards_sources = [ 29 | 'adler.svg', 30 | 'anglo.svg', 31 | 'anglo_poker.svg', 32 | 'atlasnye.svg', 33 | 'atlasnye_skat.svg', 34 | 'clubkarte.svg', 35 | 'guyenne-classic.svg', 36 | 'l-&-h.svg', 37 | 'minimum.svg', 38 | 'minimum_dark.svg', 39 | 'mittelalter.svg', 40 | 'neoclassical.svg', 41 | 'neoclassical_4_color.svg', 42 | 'ornamental.svg', 43 | 'paris.svg', 44 | 'pixelangelo.svg', 45 | 'pixelangelo_compact.svg', 46 | 'plastic.svg', 47 | 'simplistic.svg', 48 | 'swiss-XVII.svg', 49 | 'tango_nuevo.svg', 50 | 'tarot.svg', 51 | 'tigullio.svg', 52 | 'tragy.svg', 53 | 'XSkat.svg', 54 | 'Атласные.svg', 55 | ] 56 | 57 | cardsdir = ar_pkgdatadir / 'cards' 58 | 59 | # FIXME: this should use files('...') (allowed as per docs), 60 | # but that crashes meson, see https://gitlab.gnome.org/chpe/meson/issues/2 61 | compress_svg = find_program('meson_svgz.sh') 62 | 63 | cards_svgz = [] 64 | foreach svg : cards_sources 65 | svgz = svg.split('.')[0] + '.svgz' 66 | cards_svgz += custom_target( 67 | svgz, 68 | command: [ 69 | compress_svg, 70 | xmllint, 71 | ' '.join(xmllint_flags), 72 | gzip, 73 | ' '.join(gzip_flags), 74 | '@INPUT@', 75 | '@OUTPUT@' 76 | ], 77 | input: svg, 78 | install: true, 79 | install_dir: cardsdir, 80 | output: svgz, 81 | ) 82 | endforeach 83 | 84 | # SVGcrush 85 | 86 | libxml_dep = dependency('libxml-2.0') 87 | 88 | svgcrush_sources = files( 89 | 'svgcrush.c', 90 | ) 91 | 92 | svgcrush = executable( 93 | 'svgcrush', 94 | svgcrush_sources, 95 | dependencies: [glib_dep, libxml_dep,], 96 | include_directories: [top_inc,], 97 | install: false, 98 | ) 99 | -------------------------------------------------------------------------------- /help/C/beleaguered_castle.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Beleaguered Castle 18 | 19 | Written by Rosanna Yuen 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Foundation 33 | 34 | Four piles in the middle column. Four aces are placed here, 35 | one in each pile, before the shuffle. To be built from Ace 36 | to King. Topmost card in each Foundation can be played back 37 | on to the Tableau. 38 | 39 | 40 | 41 | Tableau 42 | 43 | Eight slots (four to the left and four to the right of 44 | Foundations.) Deal all cards face up and extended on to 45 | these eight piles so that there are six cards in each pile 46 | and all cards are showing. 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | Goal 55 | 56 | 57 | Move all cards to the Foundation piles. 58 | 59 | 60 | 61 | Rules 62 | 63 | 64 | Cards in the Tableau are built down regardless of suit. Only one 65 | card can be moved at a time. Empty piles can be filled with any 66 | single card. 67 | 68 | 69 | Foundations are built up in suit. 70 | 71 | 72 | 73 | Scoring 74 | 75 | 76 | Each card in the Foundation piles other than the original Aces 77 | scores one point. 78 | 79 | 80 | Maximum possible score: 48 81 | 82 | 83 | 84 | Strategy 85 | 86 | 87 | Build evenly on to Foundations if possible. Try and get an empty 88 | slot. 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /help/C/bakers_dozen.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Bakers Dozen 18 | 19 | Written by Rosanna Yuen 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Foundation 33 | 34 | Four piles at top. To be built in suit from Ace to 35 | King. Topmost card in each Foundation can be played back on 36 | to the Tableau. 37 | 38 | 39 | 40 | Tableau 41 | 42 | Thirteen piles. Four cards are dealt face up on each 43 | pile. Kings are moved to the bottom of their respective 44 | piles. 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | Goal 53 | 54 | 55 | Move all cards to the Foundation piles. 56 | 57 | 58 | 59 | Rules 60 | 61 | 62 | The top card on each Tableau can be moved to another Tableau pile if 63 | it has a value of one lower than the top card on the second pile. 64 | Suit is not relevant. Empty Tableau piles cannot be filled. 65 | 66 | 67 | Foundations are built up in suit from Ace to King. Cards in 68 | Foundations are still in play. Double clicking on a card in the 69 | Tableau will move it to the appropriate Foundation pile if such a 70 | move is possible. 71 | 72 | 73 | 74 | Scoring 75 | 76 | 77 | Each card moved to the Foundation scores one point. 78 | 79 | 80 | Maximum possible score: 52 81 | 82 | 83 | 84 | Strategy 85 | 86 | 87 | Be careful not to bury low cards. Try to keep Tableau piles from 88 | emptying. 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /games/aunt-mary.scm: -------------------------------------------------------------------------------- 1 | ;; AisleRiot - aunt_mary.scm -*-scheme-*- 2 | ;; Copyright (C) Alan Horkan, 2005. 3 | ;; Aunt Mary is a very difficult Klondike variation. 4 | ;; 5 | ;; This program is free software: you can redistribute it and/or modify 6 | ;; it under the terms of the GNU General Public License as published by 7 | ;; the Free Software Foundation, either version 3 of the License, or 8 | ;; (at your option) any later version. 9 | ;; 10 | ;; This program is distributed in the hope that it will be useful, 11 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | ;; GNU General Public License for more details. 14 | ;; 15 | ;; You should have received a copy of the GNU General Public License 16 | ;; along with this program. If not, see . 17 | 18 | (use-modules (aisleriot interface) (aisleriot api)) 19 | 20 | (primitive-load-path "klondike") 21 | 22 | (define deal-one #t) 23 | (define deal-three #f) 24 | (define no-redeal #f) 25 | 26 | (define max-redeal 2) 27 | 28 | (define tableau '(6 7 8 9 10 11)) 29 | 30 | (define (new-game) 31 | (initialize-playing-area) 32 | (set-ace-low) 33 | 34 | (make-standard-deck) 35 | (shuffle-deck) 36 | 37 | ;; Stock 38 | (add-normal-slot DECK 'stock) 39 | ;; Waste 40 | (if deal-three 41 | (add-partially-extended-slot '() right 3 'waste) 42 | (add-normal-slot '() 'waste)) 43 | 44 | ;; Foundation (4) 45 | (add-normal-slot '() 'foundation) 46 | (add-normal-slot '() 'foundation) 47 | (add-normal-slot '() 'foundation) 48 | (add-normal-slot '() 'foundation) 49 | (add-carriage-return-slot) 50 | ;; Tableau (6) 51 | (add-extended-slot '() down 'tableau) 52 | (add-extended-slot '() down 'tableau) 53 | (add-extended-slot '() down 'tableau) 54 | (add-extended-slot '() down 'tableau) 55 | (add-extended-slot '() down 'tableau) 56 | (add-extended-slot '() down 'tableau) 57 | 58 | ;; Pretty Good Solitaire (goodsol) deals Aunt Mary like this 59 | (deal-cards stock 60 | '( 7 8 9 10 11 61 | 8 9 10 11 62 | 9 10 11 63 | 10 11 64 | 11)) 65 | (deal-cards-face-up stock 66 | '(6 67 | 6 7 68 | 6 7 8 69 | 6 7 8 9 70 | 6 7 8 9 10 71 | 6 7 8 9 10 11)) 72 | 73 | (give-status-message) 74 | 75 | (list 6 3) 76 | ) 77 | 78 | (define (get-options) 79 | #f) 80 | 81 | (define (apply-options options) 82 | #f) 83 | 84 | (set-lambda! 'new-game new-game) 85 | (set-lambda! 'get-options get-options) 86 | (set-lambda! 'apply-options apply-options) 87 | -------------------------------------------------------------------------------- /help/C/escalator.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Escalator 18 | 19 | Written by Rosanna Yuen 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Stock 33 | 34 | Top left pile. The rest of the deck is placed here after 35 | dealing on to the Tableau. Cards are turned over one at a 36 | time to Waste. No redeals 37 | 38 | 39 | 40 | Waste 41 | 42 | To be taken from Stock. 43 | 44 | 45 | 46 | Tableau 47 | 48 | Deal face up seven overlapping rows starting with one card on 49 | the first row, increasing by one per row and staggering the 50 | piles as to achieve a pyramid. 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | Goal 59 | 60 | 61 | Move all cards to Waste. 62 | 63 | 64 | 65 | Rules 66 | 67 | 68 | All exposed cards in the pyramid are available for play. Build on to 69 | the Waste from these available cards whenever possible by playing a 70 | card with a rank immediately above or immediately below the rank of 71 | the top card in the Waste. Aces are both above Kings and below 72 | Deuces. 73 | 74 | 75 | Cards are flipped singly from the Stock to the Waste. There is no redeal. 76 | 77 | 78 | 79 | Scoring 80 | 81 | 82 | Each card removed from the Tableau scores one point. 83 | 84 | 85 | Maximum possible score: 28 86 | 87 | 88 | 89 | Strategy 90 | 91 | 92 | Try to plan ahead so that you can make runs in the future. 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /help/C/yukon.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Yukon 18 | 19 | Written by Rosanna Yuen 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Foundation 33 | 34 | Four piles on left. To be built up in suit from Ace to King. 35 | 36 | 37 | 38 | Tableau 39 | 40 | Seven piles. Deal card face up in first pile. Place one 41 | card face down on all other piles. Place one card face up on next 42 | pile followed by one card face down on all covered piles. Repeat 43 | until there are seven cards in last pile. Deal the rest of the cards 44 | face up on the second to seventh piles. To be built down in opposite 45 | color. 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | Goal 54 | 55 | 56 | Move all cards to the Foundation piles. 57 | 58 | 59 | 60 | Rules 61 | 62 | 63 | Cards in Tableau are built down in opposite color. Groups of cards 64 | can be moved regardless of sequence. A faced-down card is flipped 65 | when it is unburied. An empty pile in the Tableau can be filled with 66 | a King or a group of cards with a King on the bottom. 67 | 68 | 69 | Foundations are built up in suit from Ace to King. Cards in 70 | Foundations are no longer in play. 71 | 72 | 73 | 74 | Scoring 75 | 76 | 77 | Each card in the Foundation piles scores one point. 78 | 79 | 80 | Maximum possible score: 52 81 | 82 | 83 | 84 | Strategy 85 | 86 | 87 | Try and uncover as many cards as early on as possible. Doing so will 88 | greatly aid your quest to conquer yukon. 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /help/C/chessboard.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 15 | 16 | Chessboard 17 | 18 | Written by Rosanna Yuen 19 | 20 | Setup 21 | 22 | 23 | 24 | 25 | 26 | 27 | Type of Deck 28 | Standard Deck 29 | 30 | 31 | Foundation 32 | 33 | Four piles in the middle. To be built up in suit from base 34 | card of your choice, wrapping from King to Ace if 35 | necessary. Cards in Foundation piles are no longer in 36 | play. 37 | 38 | 39 | 40 | Tableau 41 | 42 | Five piles one each side of the Foundation. Deal five cards 43 | face up on to each of these piles and one more on the top 44 | two piles. The top card in any Tableau pile is available 45 | for play. 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | Goal 54 | 55 | 56 | Move all cards to Foundation piles. 57 | 58 | 59 | 60 | Rules 61 | 62 | 63 | Cards in Tableau piles can be built up or down in suit. Only the 64 | top card in every pile is available for play. Empty slots can be 65 | filled with any available card. 66 | 67 | 68 | The Foundations are built up from the base card of your choice, 69 | wrapping from King to Ace if necessary. Cards in Foundation piles 70 | are no longer in play. 71 | 72 | 73 | 74 | Scoring 75 | 76 | 77 | Each card in Foundation piles scores one point. 78 | 79 | 80 | Maximum possible score: 52 81 | 82 | 83 | 84 | Strategy 85 | 86 | 87 | Choose your base card wisely. The obvious choice may lead to nought 88 | but a dead end. 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /src/meson.build: -------------------------------------------------------------------------------- 1 | # Copyright © 2019 Christian Persch 2 | # 3 | # This programme is free software; you can redistribute it and/or modify it 4 | # under the terms of the GNU General Public License as published by 5 | # the Free Software Foundation; either version 3 of the License, or (at your 6 | # option) any later version. 7 | # 8 | # This programme is distributed in the hope that it will be useful, but 9 | # WITHOUT ANY WARRANTY; without even the implied warranty of 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11 | # See the GNU General Public License for more details. 12 | # 13 | # You should have received a copy of the GNU General Public License 14 | # along with this programme. If not, see . 15 | 16 | src_inc = include_directories('.') 17 | 18 | subdir('lib') 19 | 20 | # Aisleriot Solitaire 21 | 22 | sol_help_id = 'aisleriot' 23 | 24 | sol_sources = libaisleriot_sources + files( 25 | 'ar-application.c', 26 | 'ar-application.h', 27 | 'ar-clock.c', 28 | 'ar-clock.h', 29 | 'ar-cursor.c', 30 | 'ar-cursor.h', 31 | 'ar-game-chooser.c', 32 | 'ar-game-chooser.h', 33 | 'ar-stock.c', 34 | 'ar-stock.h', 35 | 'ar-style-gtk.c', 36 | 'ar-style-gtk.h', 37 | 'ar-style-private.h', 38 | 'ar-style.c', 39 | 'ar-style.h', 40 | 'board-noclutter.c', 41 | 'board-noclutter.h', 42 | 'conf.c', 43 | 'conf.h', 44 | 'game.c', 45 | 'game.h', 46 | 'sol.c', 47 | 'stats-dialog.c', 48 | 'stats-dialog.h', 49 | 'util.c', 50 | 'util.h', 51 | 'window.c', 52 | 'window.h', 53 | ) 54 | 55 | sol_sources += gnome.compile_resources( 56 | 'ar-resources', 57 | 'aisleriot.gresource.xml', 58 | c_name: 'aisleriot', 59 | export: true, 60 | ) 61 | 62 | sol_cflags = libaisleriot_cflags + [ 63 | '-DDOC_MODULE="@0@"'.format(sol_help_id) 64 | ] 65 | 66 | sol_deps = libaisleriot_deps + [ 67 | guile_dep, 68 | ] 69 | 70 | sol = executable( 71 | 'sol', 72 | c_args: sol_cflags, 73 | cpp_args: sol_cflags, 74 | dependencies: sol_deps, 75 | include_directories: [top_inc, src_inc, lib_inc,], 76 | install: true, 77 | sources: sol_sources, 78 | ) 79 | 80 | # Install gconf schemas 81 | 82 | if get_option('gconf') 83 | gconfschemadir = ar_sysconfdir / 'gconf' / 'schemas' 84 | 85 | gconf_schema_sources = [ 86 | 'aisleriot.schemas', 87 | ] 88 | 89 | install_data( 90 | gconf_schema_sources, 91 | install_dir: gconfschemadir, 92 | ) 93 | 94 | meson.add_install_script( 95 | 'meson_gconf.py', 96 | gconfschemadir, 97 | gconf_schema_sources, 98 | ) 99 | endif 100 | -------------------------------------------------------------------------------- /help/C/elevator.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Elevator 18 | 19 | Written by Rosanna Yuen 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Stock 33 | 34 | Top left pile. The rest of the deck is placed here after dealing on 35 | to the Tableau. Cards are turned over one at a time to Waste. No 36 | redeals. 37 | 38 | 39 | 40 | Waste 41 | 42 | To be taken from Stock. 43 | 44 | 45 | 46 | Tableau 47 | 48 | Deal face down seven overlapping rows starting with one card on the 49 | first row, increasing by one per row and staggering the piles as to 50 | achieve a pyramid. Flip bottom row. 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | Goal 59 | 60 | 61 | Move all cards to Waste. 62 | 63 | 64 | 65 | Rules 66 | 67 | 68 | All exposed cards in the pyramid are available for play. Build on to 69 | the Waste from these available cards whenever possible by playing a 70 | card with a rank immediately above or immediately below the rank of 71 | the top card in the Waste. Aces are both above Kings and below Deuces. 72 | 73 | 74 | Cards can be flipped singly from the Stock to the Waste. There is no redeal. 75 | 76 | 77 | 78 | Scoring 79 | 80 | 81 | Each card removed from the pyramid scores one point. 82 | 83 | 84 | Maximum possible score: 28 85 | 86 | 87 | 88 | Strategy 89 | 90 | 91 | Every pyramid needs a strong foundation. Get rid of the lower cards 92 | first, with an eye out to try to expose as many cards as possible. 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /cards/README.tragy: -------------------------------------------------------------------------------- 1 | Tragy SVG card deck for AisleRiot, Polish index letters. 2 | JPG-compressed Bitmaps for court cards. 3 | 4 | Copyright (C) Bruno Pellier 5 | Copyright (C) heraldicart.org (Matthew Simon Ryan Cavalletto) 6 | Copyright (C) 2024 Vincent Bermel 7 | License: GNU GPL 3.0 or later 8 | 9 | Cf. COPYING.GPL3 file or 10 | https://www.gnu.org/licenses/gpl-3.0.html 11 | 12 | Including bitmap images based on scans (which the copyrights do not apply to) 13 | from gkards.com by Bruno Pellier 14 | http://gkards.com/jeux/000222 15 | which are licensed under Creative Commons CC-BY as stated here 16 | http://gkards.com/en/about/project/presentation/ 17 | and on my (Vincent Bermel) own scans of a 1979 reprint of the same card deck. 18 | 19 | The card design is known as "Jugendstil" / "Art Noveau", was created by 20 | painter Otto Tragy (1866-1928) and first published in the 1890s by the former 21 | german playing card company" Altenburger Spielkartenfabrik Schneider & Co" 22 | which existed from 1893-1897 according to the following resources: 23 | http://www.spielkarten24.de/site08.htm 24 | https://altacarta.com/english/research/AssStammbaum.html 25 | 26 | It was in print until the 1930s, a limited reprint was issued in 1979. 27 | 28 | Otto Tragy is stated the original designer in some of the resources below as 29 | well as on the box of the 1979 reprint. 30 | 31 | More information: 32 | https://www.wopc.co.uk/germany/schneider/otto-tragy 33 | https://www.wopc.co.uk/images/blog/2016/02/ASS_Art_Nouveau.jpeg 34 | http://a.trionfi.eu/WWPCM/decks/d00232/d00232.htm 35 | https://www.design-is-fine.org/post/126209979094/otto-tragy-illustration-for-a-card-deck-whist-no 36 | http://www.dxpo-playingcards.com/xpo/deck-month/pages/deck-month-07.htm (select September/09) 37 | https://de.wikipedia.org/wiki/Otto_Tragy 38 | http://spielkartenonline.de/product.php?id_product=810 39 | https://picryl.com/media/otto-tragy-jugendstil-spielkarten-1898-be2bdd 40 | 41 | Font used (converted to path, modified): 42 | Girassol (Open Font License (OFL)) 43 | 44 | Joker based on an image obtained from here: 45 | http://heraldicart.org/bauble/#jesters-bauble 46 | which is taken from page 164 of the book "The Principles of Design" written and 47 | illustrated by George Woolliscroft Rhead (1855 – 1920), published in 1905. 48 | http://heraldicart.org/the-principles-of-design/ 49 | https://archive.org/details/principlesofdesi00rheauoft/principlesofdesi00rheauoft/page/164/mode/2up 50 | https://modjourn.org/biography/rhead-george-woolliscroft-1855-1920/ 51 | License is CC-BY-SA (if applicable to a public domain work) according to here: 52 | http://heraldicart.org/credits 53 | -------------------------------------------------------------------------------- /help/C/accordion.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Accordion 18 | 19 | Written by Ed Sirett 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | 33 | Tableau 34 | 35 | Fifty-four spaces in five rows of nine and a last row of seven. Deal cards face up 36 | one per space. The spaces should be considered as one continuous line, the rows 37 | simply arrange the tableau so all of it can be seen at once. Thus the 38 | rightmost space of a row is to be considered to the left of the leftmost space 39 | of the row below. 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | Goal 48 | 49 | 50 | To remove all cards except one. 51 | 52 | 53 | 54 | Rules 55 | 56 | 57 | Cards are moved singly. Any card can be moved over another card of the same suit or rank 58 | that is in the space immediately to its left or three spaces to its left. 59 | The card that is covered is removed from play. All the cards (if any) in spaces to the 60 | right of the resulting gap are moved to the left one space so as to close the gap. 61 | Double-clicking causes the card to move three spaces, if possible, or failing that one space 62 | to the left. 63 | 64 | 65 | 66 | Scoring 67 | 68 | 69 | Each card removed scores 1 point. 70 | 71 | 72 | Maximum possible score: 51 73 | 74 | 75 | 76 | Strategy 77 | 78 | 79 | This is a difficult game. Try to find two or three cards of the same rank at or near the 80 | last row. Try not to remove any card of this rank. At the end you can move these cards 81 | onto each other to win. 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /help/C/scorpion.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Scorpion 18 | 19 | Written by Rosanna Yuen 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Stock 33 | 34 | Top left pile. The last three cards are placed here after the deal. 35 | 36 | 37 | 38 | Tableau 39 | 40 | Seven piles to the right of Stock. * Deal one cards face down on each of 41 | the first four rows. Deal one card face up on the last three rows. 42 | Repeat from * two more times, dealing a total of three rows. Deal one 43 | card face up on each pile for four more rows. 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | Goal 52 | 53 | 54 | Create four piles of thirteen cards each, each pile consisting of one 55 | suit and in rank order. 56 | 57 | 58 | 59 | Rules 60 | 61 | 62 | Cards in the Tableau are built down by suit. Groups of cards can be 63 | moved regardless of sequence. An empty pile in the Tableau can be 64 | filled with a King or a group of cards with a King on the bottom. 65 | 66 | 67 | At any point, clicking on the Stock will deal the last three cards, one 68 | each on the first three piles. 69 | 70 | 71 | 72 | Scoring 73 | 74 | 75 | For every sequence in suit, points given is (length of sequence - 1). 76 | Each time a sequence of thirteen is created and is in its own slot, four 77 | extra points are awarded. Reaching a card that was face down gives 78 | three points. 79 | 80 | 81 | Maximum possible score: 100 82 | 83 | 84 | 85 | Strategy 86 | 87 | 88 | Unknotting knots is not often easy. Avoid tangling yourself up with no 89 | way out. 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /help/C/eight_off.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Eight Off 18 | 19 | Written by Rosanna Yuen 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Foundation 33 | 34 | Four piles on the left. Built from Ace to King in suit. 35 | 36 | 37 | 38 | Reserves 39 | 40 | Eight piles at top. Each reserve can only 41 | hold one card. The first four Reserve piles are each dealt 42 | one card at the beginning of the game. 43 | 44 | 45 | 46 | Tableau 47 | 48 | Eight piles underneath the Reserves. 49 | The cards are dealt face up on to the Tableau, with 50 | six cards in each of the 51 | slots. 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | Goal 60 | 61 | 62 | Move all cards to the Foundation piles. 63 | 64 | 65 | 66 | Rules 67 | 68 | 69 | The Tableau is built down by suit. Only the top card or build of 70 | cards can be moved. A build of cards can only be moved if the 71 | number of cards in the build is equal or less than one more than the 72 | number of Reserve slots free. Empty spaces in the Tableau can only 73 | be filled with a King or a build starting with a King. 74 | 75 | 76 | Foundations are built up by suit from Ace to King. 77 | 78 | 79 | Any top card in the Tableau can be placed in an empty Reserve slot. 80 | These cards are available for play back into the Tableau or on to a 81 | Foundation pile. 82 | 83 | 84 | 85 | Scoring 86 | 87 | 88 | Each card placed on to the Foundation piles scores one point. 89 | 90 | 91 | Maximum possible score: 52 92 | 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /src/lib/ar-debug.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2002 Red Hat, Inc. 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU Lesse General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | /* The interfaces in this file are subject to change at any time. */ 19 | 20 | #ifndef GNOME_DEBUG_H 21 | #define GNOME_DEBUG_H 22 | 23 | #include 24 | 25 | G_BEGIN_DECLS 26 | 27 | #define AR_DEBUG_LAST_RESERVED_BIT (8) 28 | 29 | typedef enum { 30 | AR_DEBUG_BLOCKS_CACHE = 1 << 0, 31 | AR_DEBUG_CARD_CACHE = 1 << 1, 32 | AR_DEBUG_CARD_THEME = 1 << 2, 33 | AR_DEBUG_RUNTIME = 1 << 3, 34 | AR_DEBUG_SCHEME = 1 << 4, 35 | AR_DEBUG_SOUND = 1 << 5, 36 | AR_DEBUG_WINDOW_STATE = 1 << 6, 37 | 38 | AR_DEBUG_GAME_DRAWING = 1 << 7, 39 | AR_DEBUG_GAME_EVENTS = 1 << 8, 40 | AR_DEBUG_GAME_KEYNAV = 1 << 9, 41 | AR_DEBUG_GAME_SIZING = 1 << 10, 42 | AR_DEBUG_GAME_STYLE = 1 << 11 43 | } ArDebugFlags; 44 | 45 | #ifdef GNOME_ENABLE_DEBUG 46 | extern ArDebugFlags ar_debug_flags; 47 | #endif 48 | 49 | void ar_debug_init (void); 50 | 51 | static inline gboolean ar_debug_on (ArDebugFlags flags) G_GNUC_CONST G_GNUC_UNUSED; 52 | 53 | static inline gboolean 54 | ar_debug_on (ArDebugFlags flags) 55 | { 56 | #ifdef GNOME_ENABLE_DEBUG 57 | return (ar_debug_flags & flags) == flags; 58 | #else 59 | return FALSE; 60 | #endif 61 | } 62 | 63 | #ifdef GNOME_ENABLE_DEBUG 64 | #define _AR_DEBUG_IF(flags) if (G_UNLIKELY (ar_debug_on (flags))) 65 | 66 | #if defined(__GNUC__) && G_HAVE_GNUC_VARARGS 67 | #define ar_debug_print(flags, fmt, ...) \ 68 | G_STMT_START { _AR_DEBUG_IF(flags) g_printerr(fmt, ##__VA_ARGS__); } G_STMT_END 69 | #else 70 | #include 71 | #include 72 | static void ar_debug_print (guint flags, const char *fmt, ...) 73 | { 74 | if (ar_debug_on (flags)) { 75 | va_list ap; 76 | va_start (ap, fmt); 77 | g_vfprintf (stderr, fmt, ap); 78 | va_end (ap); 79 | } 80 | } 81 | #endif 82 | 83 | #else 84 | #define _AR_DEBUG_IF(flags) if (0) 85 | #define ar_debug_print(...) 86 | #endif /* GNOME_ENABLE_DEBUG */ 87 | 88 | G_END_DECLS 89 | 90 | #endif /* !GNOME_DEBUG_H */ 91 | -------------------------------------------------------------------------------- /data/icons/meson.build: -------------------------------------------------------------------------------- 1 | # Copyright © 2019 Christian Persch 2 | # 3 | # This programme is free software; you can redistribute it and/or modify it 4 | # under the terms of the GNU General Public License as published by 5 | # the Free Software Foundation; either version 3 of the License, or (at your 6 | # option) any later version. 7 | # 8 | # This programme is distributed in the hope that it will be useful, but 9 | # WITHOUT ANY WARRANTY; without even the implied warranty of 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11 | # See the GNU General Public License for more details. 12 | # 13 | # You should have received a copy of the GNU General Public License 14 | # along with this programme. If not, see . 15 | 16 | public_icons_themes = [ 17 | 'hicolor', 18 | ] 19 | 20 | public_icons_sources = [ 21 | 'hicolor_apps_16x16_gnome-aisleriot.png', 22 | 'hicolor_apps_16x16_gnome-freecell.png', 23 | 'hicolor_apps_22x22_gnome-aisleriot.png', 24 | 'hicolor_apps_22x22_gnome-freecell.png', 25 | 'hicolor_apps_24x24_gnome-aisleriot.png', 26 | 'hicolor_apps_24x24_gnome-freecell.png', 27 | 'hicolor_apps_256x256_gnome-aisleriot.png', 28 | 'hicolor_apps_256x256_gnome-freecell.png', 29 | 'hicolor_apps_32x32_gnome-aisleriot.png', 30 | 'hicolor_apps_32x32_gnome-freecell.png', 31 | 'hicolor_apps_48x48_gnome-aisleriot.png', 32 | 'hicolor_apps_48x48_gnome-freecell.png', 33 | 'hicolor_apps_symbolic_gnome-aisleriot-symbolic.svg', 34 | ] 35 | 36 | private_icons_sources = [ 37 | 'hicolor_actions_16x16_cards-deal.png', 38 | 'hicolor_actions_22x22_cards-deal.png', 39 | 'hicolor_actions_24x24_cards-deal.png', 40 | 'hicolor_actions_32x32_cards-deal.png', 41 | 'hicolor_actions_48x48_cards-deal.png', 42 | 'hicolor_actions_scalable_cards-deal.svg', 43 | ] 44 | 45 | public_icons_renames = [] 46 | private_icons_renames = [] 47 | 48 | foreach icon : public_icons_sources 49 | components = icon.split('_') 50 | public_icons_renames += components[0] / components[2] / components[1] / components[3] 51 | endforeach 52 | 53 | foreach icon : private_icons_sources 54 | components = icon.split('_') 55 | private_icons_renames += components[0] / components[2] / components[1] / components[3] 56 | endforeach 57 | 58 | icondir = ar_datadir / 'icons' 59 | pkgicondir = ar_pkgdatadir / 'icons' 60 | 61 | install_data( 62 | sources: public_icons_sources, 63 | rename: public_icons_renames, 64 | install_dir: icondir, 65 | ) 66 | 67 | install_data( 68 | sources: private_icons_sources, 69 | rename: private_icons_renames, 70 | install_dir: pkgicondir, 71 | ) 72 | 73 | foreach theme : public_icons_themes 74 | meson.add_install_script( 75 | 'meson_updateiconcache.py', 76 | icondir / theme, 77 | ) 78 | endforeach 79 | -------------------------------------------------------------------------------- /help/C/first_law.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | First Law 18 | 19 | Written by Rosanna Yuen 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Stock 33 | 34 | Top left pile. All cards are placed here in beginning. 35 | When emptied, cards are brought back from Tableau and put 36 | back in the Stock. 37 | 38 | 39 | 40 | Tableau 41 | 42 | Four piles on the right. Each deal from Stock will 43 | deal one card to each Tableau pile. 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | Goal 52 | 53 | 54 | Remove all cards. 55 | 56 | 57 | 58 | Rules 59 | 60 | 61 | Clicking on the Stock will deal one card to each of the Tableau 62 | piles. If any of the cards showing in the Tableau are of the same 63 | rank, move the others on to the leftmost of the like cards. Empty 64 | piles can only be filled by an ensuing deal from Stock. 65 | 66 | 67 | If at any point, all four cards showing are the same rank, they are 68 | removed. 69 | 70 | 71 | When Stock is empty, the Tableau piles are gathered, right pile on 72 | left, and placed back into stock. The first card dealt will always 73 | be the first card dealt until it is removed. There are unlimited 74 | redeals. 75 | 76 | 77 | 78 | Scoring 79 | 80 | 81 | Each set of four cards removed scores one point. 82 | 83 | 84 | Maximum possible score: 13 85 | 86 | 87 | 88 | Strategy 89 | 90 | 91 | Don't forget to use the brakes! This game might never end unless 92 | you decide carefully whether or not to make a move. 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /help/C/treize.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Treize 18 | 19 | Written by Rosanna Yuen 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Stock 33 | 34 | Top left pile. The rest of the deck is placed here after 35 | dealing the Tableau. Cards are turned over one at a time to Waste. No 36 | redeals. 37 | 38 | 39 | 40 | Waste 41 | 42 | To be taken from Stock. Top card and bottom card available for play. 43 | 44 | 45 | 46 | Tableau 47 | 48 | Deal cards face up in seven overlapping rows starting with one card on the 49 | first row, increasing by one per row and staggering the piles as to 50 | achieve a pyramid. 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | Goal 59 | 60 | 61 | Remove all cards. 62 | 63 | 64 | 65 | Rules 66 | 67 | 68 | All exposed cards in the pyramid are available for play. Kings can be 69 | removed singly. All other cards can be removed in pairs that add up to 70 | thirteen with Aces equal to 1, Jacks equal to 11, and Queens equal to 12. 71 | 72 | 73 | Cards can be flipped singly from the Stock to the Waste. Top and bottom 74 | cards are available for play either by themselves or with the available 75 | cards in the pyramid. The top card of the Waste can also be played with 76 | the second card on the Waste. There is no redeal. 77 | 78 | 79 | 80 | Scoring 81 | 82 | 83 | Each card removed scores one point. 84 | 85 | 86 | Maximum possible score: 52 87 | 88 | 89 | 90 | Strategy 91 | 92 | 93 | This game is easier to win than Thirteen. This is because you can plan 94 | ahead and avoid blocks by strategic play. 95 | 96 | 97 | 98 | -------------------------------------------------------------------------------- /src/ar-style-private.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright © 2009, 2010 Christian Persch 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #pragma once 19 | 20 | G_BEGIN_DECLS 21 | 22 | static const GdkRGBA default_background_color = { 0. /* red */, 0.3125 /* green */, 0.0625 /* blue */, 1.0 /* alpha */ }; 23 | static const GdkRGBA default_selection_color = { 0. /* red */, 0. /* green */, 0.6666 /* blue */, 0.5 /* alpha */ }; 24 | 25 | #define DEFAULT_BACKGROUND_COLOR_STRING "rgb(0%,31%,6%)" 26 | #define DEFAULT_SELECTION_COLOR_STRING "rgba(0%,0%,66%,0.5)" 27 | 28 | /* The proportion of a slot dedicated to the card (horiz or vert). */ 29 | #define DEFAULT_CARD_OVERHANG (0.0) 30 | 31 | #define DEFAULT_CARD_SLOT_RATIO (0.95) 32 | 33 | #define MIN_CARD_STEP (0.0) 34 | #define MAX_CARD_STEP (1.0) /* FIXMEchpe: allow values > 1.0 here? */ 35 | #define DEFAULT_CARD_STEP (0.2) 36 | 37 | #define DEFAULT_SHOW_TOOLTIPS (FALSE) 38 | #define DEFAULT_SHOW_STATUS_MESSAGES (FALSE) 39 | 40 | typedef struct _ArStylePrivate ArStylePrivate; 41 | struct _ArStylePrivate 42 | { 43 | ArCardTheme* card_theme; 44 | 45 | GdkRGBA selection_color; 46 | 47 | double card_slot_ratio; 48 | double card_overhang; 49 | double card_step; 50 | 51 | int dnd_drag_threshold; 52 | int double_click_time; 53 | int focus_line_width; 54 | int focus_padding; 55 | 56 | guint enable_animations_gtk : 1; 57 | guint enable_animations : 1; 58 | guint enable_sound_gtk : 1; 59 | guint enable_sound : 1; 60 | guint enable_tooltips : 1; 61 | guint enable_status_messages : 1; 62 | guint touchscreen_mode : 1; 63 | 64 | guint rtl : 1; 65 | guint interior_focus : 1; 66 | 67 | guint click_to_move : 1; 68 | 69 | guint keynav_enabled : 1; 70 | guint show_focus : 1; 71 | guint show_highlight : 1; 72 | guint show_seleccion : 1; 73 | }; 74 | 75 | /* This is an exported version of get_instance_private just for 76 | * ar-style-gtk */ 77 | ArStylePrivate *ar_style_get_instance_private_exported (ArStyle *style); 78 | 79 | 80 | G_END_DECLS 81 | -------------------------------------------------------------------------------- /src/lib/ar-card-themes.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright © 2004 Callum McKenzie 3 | Copyright © 2007, 2008, 2009 Christian Persch 4 | 5 | This library is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | This program is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with this program. If not, see . 17 | */ 18 | 19 | /* Authors: Callum McKenzie */ 20 | 21 | #ifndef AR_CARD_THEMES_H 22 | #define AR_CARD_THEMES_H 23 | 24 | #include 25 | #include 26 | #include 27 | 28 | #include "ar-card-theme.h" 29 | 30 | G_BEGIN_DECLS 31 | 32 | #define AR_TYPE_CARD_THEMES (ar_card_themes_get_type ()) 33 | #define AR_CARD_THEMES(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AR_TYPE_CARD_THEMES, ArCardThemes)) 34 | #define AR_CARD_THEMES_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), AR_TYPE_CARD_THEMES, ArCardThemesClass)) 35 | #define AR_IS_CARD_THEMES(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AR_TYPE_CARD_THEMES)) 36 | #define AR_IS_CARD_THEMES_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), AR_TYPE_CARD_THEMES)) 37 | #define AR_CARD_THEMES_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AR_TYPE_CARD_THEMES, ArCardThemesClass)) 38 | 39 | typedef struct _ArCardThemesClass ArCardThemesClass; 40 | typedef struct _ArCardThemes ArCardThemes; 41 | 42 | GType ar_card_themes_get_type (void); 43 | 44 | ArCardThemes *ar_card_themes_new (void); 45 | 46 | void ar_card_themes_request_themes (ArCardThemes *theme_manager); 47 | 48 | gboolean ar_card_themes_get_themes_loaded (ArCardThemes *theme_manager); 49 | 50 | GList *ar_card_themes_get_themes (ArCardThemes *theme_manager); 51 | 52 | ArCardTheme *ar_card_themes_get_theme (ArCardThemes *theme_manager, 53 | ArCardThemeInfo *info); 54 | 55 | ArCardTheme *ar_card_themes_get_theme_by_name (ArCardThemes *theme_manager, 56 | const char *theme_name); 57 | 58 | ArCardTheme *ar_card_themes_get_theme_any (ArCardThemes *theme_manager); 59 | 60 | void ar_card_themes_install_themes (ArCardThemes *theme_manager, 61 | GtkWidget *parent_window, 62 | guint user_time); 63 | 64 | G_END_DECLS 65 | 66 | #endif /* AR_CARD_THEMES_H */ 67 | -------------------------------------------------------------------------------- /help/C/thirteen.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 15 | 16 | Thirteen 17 | 18 | Written by Rosanna Yuen 19 | 20 | Setup 21 | 22 | 23 | 24 | 25 | 26 | 27 | Type of Deck 28 | Standard Deck 29 | 30 | 31 | Stock 32 | 33 | Top left pile. The rest of the deck is placed here after 34 | dealing the Tableau. Cards are turned over one at a time to 35 | Waste. No redeals. 36 | 37 | 38 | 39 | Waste 40 | 41 | To be taken from Stock. The top card is available 42 | for play. 43 | 44 | 45 | 46 | Tableau 47 | 48 | Deal face down seven overlapping rows starting with one card 49 | on the first row, increasing by one per row and staggering 50 | the piles as to achieve a pyramid. Flip bottom row. 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | Goal 59 | 60 | 61 | Remove all cards. 62 | 63 | 64 | 65 | Rules 66 | 67 | 68 | All exposed cards in the pyramid are available for play. Kings can 69 | be removed singly. All other cards can be removed in pairs that add 70 | up to thirteen with Aces equal to 1, Jacks equal to 11, and Queens 71 | equal to 12. 72 | 73 | 74 | Cards can be flipped singly from the Stock to the Waste. The top 75 | card is available for play either with the available cards in the 76 | pyramid or with the card below. There is no redeal. 77 | 78 | 79 | 80 | Scoring 81 | 82 | 83 | Each card removed scores one point. 84 | 85 | 86 | Maximum possible score: 52 87 | 88 | 89 | 90 | Strategy 91 | 92 | 93 | Every pyramid needs a strong foundation. Get rid of the lower cards 94 | first, with an eye out to try to expose as many cards as possible. 95 | 96 | 97 | 98 | -------------------------------------------------------------------------------- /help/C/pileon.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Pileon 18 | 19 | Written by Nick Lamb 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Tableau 33 | 34 | Fifteen piles, arranged in rows of four. Deal cards four at a time, face 35 | up onto the first thirteen piles. Leave the last two spaces empty. 36 | A pile can hold as many as four cards, and as few as none. 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | Goal 45 | 46 | 47 | Rearrange the cards so that each pile contains all four cards from a single 48 | value. This should leave two piles empty, but it doesn't matter whether 49 | they are the same piles which were empty at the start. 50 | 51 | 52 | 53 | Rules 54 | 55 | 56 | Cards can be moved on top of any other card or cards of the same value 57 | so long as no pile grows to have more than four cards. Groups of cards 58 | can be moved if they are of the same value, but it doesn't gain you 59 | anything. An empty slot can be filled with any card or group of cards 60 | with the same value. 61 | 62 | 63 | Once a pile contains all four cards of the same value it is frozen, and 64 | the top card is flipped to indicate that you need do nothing further 65 | to those cards. They are no longer in play, but it would be useless to 66 | move them anyway. 67 | 68 | 69 | 70 | Scoring 71 | 72 | 73 | When a pile of four cards is frozen you score 4 points, one for each 74 | card. There is no other way to score points. 75 | 76 | 77 | Maximum possible score: 52 78 | 79 | 80 | 81 | Strategy 82 | 83 | 84 | Keep one of the piles clear as much as possible. Don't allow a pile of 85 | three cards to build up on top of a single card, especially if the 86 | final card from the set is not a bottom card in another pile. 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /data/org.gnome.Aisleriot.metainfo.xml.in: -------------------------------------------------------------------------------- 1 | 2 | 30 | 31 | org.gnome.Aisleriot 32 | GPL-3.0+ or GFDL-1.3-only 33 | GPL-3.0+ 34 | Aisleriot Solitaire 35 | Play many different solitaire games 36 | 37 |

38 | Aisleriot — also known as sol or solitaire — is a card game application 39 | that features over 80 different solitaire-type card games which are designed to 40 | play using a mouse, keyboard, or trackpad. 41 |

42 |
43 | 44 | 45 | https://gitlab.gnome.org/GNOME/aisleriot/-/raw/master/data/aisleriot-3.10.png 46 | 47 | 48 | 49 | AppMenu 50 | ModernToolkit 51 | UserDocs 52 | 53 | https://wiki.gnome.org/Apps/Aisleriot 54 | https://gitlab.gnome.org/GNOME/aisleriot/issues 55 | https://help.gnome.org/users/aisleriot/stable/ 56 | https://l10n.gnome.org/module/aisleriot/ 57 | https://gitlab.gnome.org/GNOME/aisleriot 58 | GNOME 59 | Aisleriot Developers 60 | 61 | Aisleriot Developers 62 | 63 | aisleriot 64 | org.gnome.Aisleriot.desktop 65 |
66 | -------------------------------------------------------------------------------- /games/saratoga.scm: -------------------------------------------------------------------------------- 1 | ; AisleRiot - saratoga.scm 2 | ; Copyright (C) Alan Horkan, 2005. 3 | ; [NB ask Gnome Foudnation about Copyright Assignment. 4 | ; If I die I want my code to be as free as possible but maybe not Public Domain] 5 | ; Friends passed. ... 6 | 7 | ; saratoga is a face up variation of Klondike 8 | ; 3 card deal, unlimited redeals 9 | 10 | ; AisleRiot - klondike.scm 11 | ; Copyright (C) 1998, 2003 Jonathan Blandford 12 | ; 13 | ; This program is free software: you can redistribute it and/or modify 14 | ; it under the terms of the GNU General Public License as published by 15 | ; the Free Software Foundation, either version 3 of the License, or 16 | ; (at your option) any later version. 17 | ; 18 | ; This program is distributed in the hope that it will be useful, 19 | ; but WITHOUT ANY WARRANTY; without even the implied warranty of 20 | ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 21 | ; GNU General Public License for more details. 22 | ; 23 | ; You should have received a copy of the GNU General Public License 24 | ; along with this program. If not, see . 25 | 26 | (use-modules (aisleriot interface) (aisleriot api)) 27 | 28 | (primitive-load-path "klondike") 29 | 30 | (define deal-one #t) 31 | (define deal-three #f) 32 | (define no-redeal #f) 33 | 34 | (define max-redeal -1) 35 | 36 | (define deal-three #f) 37 | 38 | ; The set up: 39 | 40 | (define tableau '(6 7 8 9 10 11 12)) 41 | (define foundation '(2 3 4 5)) 42 | (define stock 0) 43 | (define waste 1) 44 | 45 | (define (new-game) 46 | (initialize-playing-area) 47 | (set-ace-low) 48 | 49 | (make-standard-deck) 50 | (shuffle-deck) 51 | 52 | (add-normal-slot DECK 'stock) 53 | 54 | (if deal-three 55 | (add-partially-extended-slot '() right 3 'waste) 56 | (add-normal-slot '() 'waste)) 57 | 58 | (add-blank-slot) 59 | (add-normal-slot '() 'foundation) 60 | (add-normal-slot '() 'foundation) 61 | (add-normal-slot '() 'foundation) 62 | (add-normal-slot '() 'foundation) 63 | (add-carriage-return-slot) 64 | (add-extended-slot '() down 'tableau) 65 | (add-extended-slot '() down 'tableau) 66 | (add-extended-slot '() down 'tableau) 67 | (add-extended-slot '() down 'tableau) 68 | (add-extended-slot '() down 'tableau) 69 | (add-extended-slot '() down 'tableau) 70 | (add-extended-slot '() down 'tableau) 71 | 72 | (deal-cards-face-up stock '(6 7 8 9 10 11 12 7 8 9 10 11 12 8 9 10 11 12 9 10 11 12 10 11 12 11 12 12)) 73 | 74 | (give-status-message) 75 | 76 | (list 7 3) 77 | ) 78 | 79 | (define (get-options) 80 | (list (list (G_"Three card deals") deal-three))) 81 | 82 | (define (apply-options options) 83 | (set! deal-three (cadar options))) 84 | 85 | (set-lambda! 'new-game new-game) 86 | (set-lambda! 'get-options get-options) 87 | (set-lambda! 'apply-options apply-options) 88 | -------------------------------------------------------------------------------- /help/C/auld_lang_syne.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 15 | 16 | Auld Lang Syne 17 | 18 | Written by Rosanna Yuen 19 | 20 | Setup 21 | 22 | 23 | 24 | 25 | 26 | 27 | Type of Deck 28 | Standard Deck 29 | 30 | 31 | Stock 32 | 33 | Top left pile. All cards except the Aces are placed here at 34 | the start of play. Clicking on the Stock will deal one card 35 | to each of the four Reserve piles. 36 | 37 | 38 | 39 | Foundation 40 | 41 | Four piles on top, to the right of Stock. Place an Ace on 42 | each Foundation to begin the game. The Foundation piles are 43 | to be built up regardless of suit. 44 | 45 | 46 | 47 | Reserve 48 | 49 | Four piles placed underneath Foundations. Each time Stock 50 | is clicked, one card will be placed on each Reserve pile. 51 | Top card is available for play. Reserve cards can only be 52 | moved on to Foundations. 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | Goal 61 | 62 | 63 | Move all cards on to Foundations. 64 | 65 | 66 | 67 | Rules 68 | 69 | 70 | Play begins by dealing four cards to the Reserve. If possible, play 71 | cards on to the Foundation from the Reserve. Continue this process 72 | until no cards are left in stock and no more moves on to Foundation 73 | can be made. A similar game that is a bit easier is Scuffle. 74 | 75 | 76 | 77 | Scoring 78 | 79 | 80 | Each card removed scores one point. 81 | 82 | 83 | Maximum possible score: 52 84 | 85 | 86 | 87 | Strategy 88 | 89 | 90 | Do you believe in Luck? Although this game takes more skill to play 91 | than Clock, the skill involved entails paying attention. A great 92 | game for brainless play. 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /help/C/monte_carlo.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 16 | 17 | Monte Carlo 18 | 19 | Written by Rosanna Yuen 20 | 21 | Setup 22 | 23 | 24 | 25 | 26 | 27 | 28 | Type of Deck 29 | Standard Deck 30 | 31 | 32 | Stock 33 | 34 | Top left pile. The rest of the deck is placed here after 35 | dealing the Tableau. Cards are dealt after concatenating 36 | the Tableau onto the empty slots. 37 | 38 | 39 | 40 | Tableau 41 | 42 | Five by five grid, each capable of holding one card. 43 | One card dealt to each space at the beginning of game. Empty 44 | spaces can be filled by moving cards from the right to the 45 | left, from the leftmost card of the row below to the rightmost 46 | space, and from the Stock to all otherwise empty spaces by 47 | clicking on the Stock. 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Goal 56 | 57 | 58 | Remove all cards. 59 | 60 | 61 | 62 | Rules 63 | 64 | 65 | Cards can be removed in pairs that have the same value as long as 66 | the two cards are touching horizontally, vertically, or diagonally. 67 | 68 | 69 | At any point that there are empty piles in the Tableau, dealing from 70 | the Stock moves all the cards already in the Tableau from the right 71 | to left and moving them up a row to the far right if necessary 72 | making all the empty slots at the end. The Stock is then dealt on 73 | to these empty slots. 74 | 75 | 76 | 77 | Scoring 78 | 79 | 80 | Each pair of cards removed scores two points. 81 | 82 | 83 | Maximum possible score: 52 84 | 85 | 86 | 87 | Strategy 88 | 89 | 90 | Keep an eye out as to how the Tableau will shrink when you deal. 91 | Sometimes leaving pairs in will allow more pairs to become available 92 | after a deal. 93 | 94 | 95 | 96 | --------------------------------------------------------------------------------