gnu: emacs-consult: Fix grammar.
[jackhill/guix/guix.git] / gnu / packages / games.scm
index 37fa926..5b316f1 100644 (file)
@@ -11,7 +11,7 @@
 ;;; Copyright © 2015, 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
 ;;; Copyright © 2015, 2017, 2018 Christopher Lemmer Webber <cwebber@dustycloud.org>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;; Copyright © 2016, 2017 Rodger Fox <thylakoid@openmailbox.org>
 ;;; Copyright © 2020 Vitaliy Shatrov <D0dyBo0D0dyBo0@protonmail.com>
 ;;; Copyright © 2020 Jack Hill <jackhill@jackhill.us>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
-;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020 Trevor Hass <thass@okstate.edu>
-;;; Copyright © 2020 Leo Prikler <leo.prikler@student.tugraz.at>
+;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
+;;; Copyright © 2020, 2021 Trevor Hass <thass@okstate.edu>
+;;; Copyright © 2020, 2021 Leo Prikler <leo.prikler@student.tugraz.at>
 ;;; Copyright © 2020 Lu hux <luhux@outlook.com>
 ;;; Copyright © 2020 Tomás Ortín Fernández <tomasortin@mailbox.org>
+;;; Copyright © 2021 Olivier Rojon <o.rojon@posteo.net>
+;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
+;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -544,6 +547,40 @@ Playing bastet can be a painful experience, especially if you usually make
 canyons and wait for the long I-shaped block to clear four rows at a time.")
     (license license:gpl3+)))
 
+(define-public vitetris
+  (package
+    (name "vitetris")
+    (version "0.59.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/vicgeralds/vitetris")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32 "1ah1c5g7abksif0n8v5rb7r4pn2az20c3mkp4ak13vgs23ddmds5"))
+       (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ;no test
+       #:make-flags
+       (list ,(string-append "CC=" (cc-for-target))
+             (string-append "DESTDIR=" (assoc-ref %outputs "out")))
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda _
+             ;; the non standard configure script does not accept
+             ;; standard parameters -> invoke configure by hand
+             (invoke "./configure" "prefix=")
+             ;; src/src-conf.mk must be writable for the build step
+             (make-file-writable "src/src-conf.mk"))))))
+    (home-page "http://victornils.net/tetris/")
+    (synopsis "Terminal-based Tetris clone")
+    (description "Vitetris is a classic multiplayer Tetris clone for the
+terminal.")
+    (license license:bsd-2)))
+
 (define-public blobwars
   (package
     (name "blobwars")
@@ -706,7 +743,7 @@ battlestar (explore the world around, starting from dying spaceship),
 phantasia (role-play as an rogue), trek (hunt the Klingons, and save the
 Federation), and wump (hunt the big smelly Wumpus in a dark cave).
 
-Quizes: arithmetic, and quiz.")
+Quizzes: arithmetic and quiz.")
     ;; "Auxiliary and data files, distributed with the games in NetBSD, but
     ;; not bearing copyright notices, probably fall under the terms of the UCB
     ;; or NetBSD copyrights and licences.  The file "fortune/Notes" contains a
@@ -730,14 +767,14 @@ Quizes: arithmetic, and quiz.")
 (define-public bzflag
   (package
     (name "bzflag")
-    (version "2.4.20")
+    (version "2.4.22")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.bzflag.org/bzflag/source/"
                            version "/bzflag-" version ".tar.bz2"))
        (sha256
-        (base32 "16brxqmfiyz4j4lb8ihzjcbwqmpsms6vm3ijbp34lnw0blbwdjb2"))))
+        (base32 "0kba0011nswc2csqlzkd7bas307zm5813zlnby5vsmxn08rnar4y"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -857,6 +894,52 @@ things far stranger and deadlier, and against the others like yourself, that
 want what you have.")
     (license license:cc-by-sa3.0)))
 
+(define-public cockatrice
+  (let ((release-date "2021-01-26"))
+    (package
+      (name "cockatrice")
+      (version "2.8.0")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Cockatrice/Cockatrice")
+               (commit (string-append release-date "-Release-" version))))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0q8ffcklb2b7hcqhy3d2f9kz9aw22pp04pc9y4sslyqmf17pwnz9"))
+         (modules '((guix build utils)))
+         (snippet
+          ;; Strip image URLs as they point towards non-free web services
+          '(substitute* "cockatrice/src/settings/downloadsettings.cpp"
+             (("downloadURLs.append\\(\".*\"\\);") "")))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:configure-flags '("-DWITH_SERVER=1"
+                             "-DWITH_CLIENT=1"
+                             "-DWITH_ORACLE=1"
+                             "-DTEST=1")))
+      (native-inputs
+       `(("googletest" ,googletest)
+         ("pkg-config" ,pkg-config)))
+      (inputs
+       `(("protobuf" ,protobuf)
+         ("qtbase" ,qtbase)
+         ("qtmultimedia" ,qtmultimedia)
+         ("qtsvg" ,qtsvg)
+         ("qttools" ,qttools)
+         ("qtwebsockets" ,qtwebsockets)
+         ("xz" ,xz)
+         ("zlib" ,zlib)))
+      (home-page "https://cockatrice.github.io")
+      (synopsis "Tabletop card game simulator")
+      (description "Cockatrice is a program for playing tabletop card games
+over a network.  Its server design prevents users from manipulating the game
+for unfair advantage.  The client also provides a single-player mode, which
+allows users to brew while offline.")
+      (license license:gpl2))))
+
 (define-public corsix-th
   (package
     (name "corsix-th")
@@ -1540,6 +1623,50 @@ destroying an ancient book using a special wand.")
     ;; license.  The whole package is released under GPLv3+.
     (license license:gpl3+)))
 
+(define-public gnome-2048
+  (package
+    (name "gnome-2048")
+    (version "3.38.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/gnome-2048/"
+                                  (version-major+minor version)  "/"
+                                  "gnome-2048-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0s5fg4z5in1h39fcr69j1qc5ynmg7a8mfprk3mc3c0csq3snfwz2"))))
+    (build-system meson-build-system)
+    (arguments
+     '(#:glib-or-gtk? #t
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'skip-gtk-update-icon-cache
+           ;; Don't create 'icon-theme.cache'.
+           (lambda _
+             (substitute* "meson_post_install.py"
+               (("gtk-update-icon-cache") "true"))
+             #t)))))
+    (inputs
+     `(("gtk+" ,gtk+)
+       ("clutter" ,clutter)
+       ("clutter-gtk" ,clutter-gtk)
+       ("libgee" ,libgee)
+       ("libgnome-games-support" ,libgnome-games-support)))
+    (native-inputs
+     `(("gettext" ,gettext-minimal)
+       ("glib:bin" ,glib "bin") ; for desktop-file-validate and appstream-util
+       ("itstool" ,itstool)
+       ("libxml2" ,libxml2)
+       ("pkg-config" ,pkg-config)
+       ("vala" ,vala)))
+    (home-page "https://wiki.gnome.org/Apps/2048")
+    (synopsis "Move the tiles until you obtain the 2048 tile")
+    (description "GNOME 2048 provides a 2D grid for playing 2048, a
+single-player sliding tile puzzle game.  The objective of the game is to merge
+together adjacent tiles of the same number until the sum of 2048 is achieved
+in one tile.")
+    (license license:gpl3+)))
+
 (define-public gnome-chess
   (package
     (name "gnome-chess")
@@ -2242,7 +2369,7 @@ and defeat them with your bubbles!")
     (name "solarus")
     ;; XXX: When updating this package, please also update hash in
     ;; `solarus-quest-editor' below.
-    (version "1.6.4")
+    (version "1.6.5")
     (source
      (origin
        (method git-fetch)
@@ -2251,7 +2378,7 @@ and defeat them with your bubbles!")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1n6l91yyqjx0pz4w1lp3yybpq0fs2yjswfcm8c1wjfkxwiznbdxi"))))
+        (base32 "0ny9dgqphjv2l39rff2621hnrzpf8qin8vmnv7jdz20azjk4m8id"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
@@ -2310,19 +2437,9 @@ in mind.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1qbc2j9kalk7xqk9j27s7wnm5zawiyjs47xqkqphw683idmzmjzn"))))
+        (base32 "1pvjgd4faxii5sskw1h55lw90hlbazhwni8nxyywzrmkjbq7irm0"))))
     (arguments
-     `(#:tests? #false                  ;no test
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-qt-build
-           ;; XXX: Fix build with Qt 5.15.  It has been applied upstream as
-           ;; 81d5c7f1 and can be removed at next upgrade.
-           (lambda _
-             (substitute* "src/entities/jumper.cpp"
-               (("#include <QPainter>" all)
-                (string-append all "\n" "#include <QPainterPath>\n")))
-             #t)))))
+     `(#:tests? #false))                ; no test suite
     (inputs
      `(("solarus" ,solarus)
        ,@(package-inputs solarus)))
@@ -2543,8 +2660,8 @@ through the maps in often tight time limits and can further improve by beating
 the recorded high scores.  All attached single races must be finished in time
 in order to win an event, unlocking additional events and cars.  Most maps are
 equipped with spoken co-driver notes and co-driver icons.")
-    (license license:cc0                ;textures and audio in data.zip
-             license:gpl2+)))
+    (license (list license:cc0               ;textures and audio in data.zip
+                   license:gpl2+))))
 
 (define-public ufo2map
   (package
@@ -3381,7 +3498,7 @@ match, cannon keep, and grave-itation pit.")
 (define-public minetest
   (package
     (name "minetest")
-    (version "5.3.0")
+    (version "5.4.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3390,7 +3507,7 @@ match, cannon keep, and grave-itation pit.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "03ga3j3cg38w4lg4d4qxasmnjdl8n3lbizidrinanvyfdyvznyh6"))
+                "062ilb7s377q3hwfhl8q06vvcw2raydz5ljzlzwy2dmyzmdcndb8"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -3399,7 +3516,7 @@ match, cannon keep, and grave-itation pit.")
                   #t))))
     (build-system cmake-build-system)
     (arguments
-     '(#:configure-flags
+     `(#:configure-flags
        (list "-DRUN_IN_PLACE=0"
              "-DENABLE_FREETYPE=1"
              "-DENABLE_GETTEXT=1"
@@ -3410,7 +3527,32 @@ match, cannon keep, and grave-itation pit.")
              (string-append "-DCURL_INCLUDE_DIR="
                             (assoc-ref %build-inputs "curl")
                             "/include/curl"))
-       #:tests? #f))                    ;no check target
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-sources
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/filesys.cpp"
+               ;; Use store-path for "rm" instead of non-existing FHS path.
+               (("\"/bin/rm\"")
+                (string-append "\"" (assoc-ref inputs "coreutils") "/bin/rm\"")))
+             (substitute* "src/CMakeLists.txt"
+               ;; Let minetest binary remain in build directory.
+               (("set\\(EXECUTABLE_OUTPUT_PATH .*\\)") ""))
+             (substitute* "src/unittest/test_servermodmanager.cpp"
+               ;; do no override MINETEST_SUBGAME_PATH
+               (("(un)?setenv\\(\"MINETEST_SUBGAME_PATH\".*\\);")
+                "(void)0;"))
+             (setenv "MINETEST_SUBGAME_PATH"
+                     (string-append (getcwd) "/games")) ; for check
+             #t))
+         (replace 'check
+           (lambda _
+             ;; Thanks to our substitutions, the tests should also run
+             ;; when invoked on the target outside of `guix build'.
+             (unless ,(%current-target-system)
+               (setenv "HOME" "/tmp")
+               (invoke "src/minetest" "--run-unittests"))
+             #t)))))
     (native-search-paths
      (list (search-path-specification
             (variable "MINETEST_SUBGAME_PATH")
@@ -3418,7 +3560,8 @@ match, cannon keep, and grave-itation pit.")
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
-     `(("curl" ,curl)
+     `(("coreutils" ,coreutils)
+       ("curl" ,curl)
        ("freetype" ,freetype)
        ("gettext" ,gettext-minimal)
        ("gmp" ,gmp)
@@ -3458,7 +3601,7 @@ in different ways.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1liciwlh013z5h08ib0psjbwn5wkvlr937ir7kslfk4vly984cjx"))))
+                "0i45lbnikvgj9kxdp0yphpjjwjcgp4ibn49xkj78j5ic1s9n8jd4"))))
     (build-system trivial-build-system)
     (native-inputs
      `(("source" ,source)))
@@ -3483,7 +3626,7 @@ in different ways.")
 (define-public minetest-mineclone
   (package
     (name "minetest-mineclone")
-    (version "0.66.2")
+    (version "0.71.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3492,7 +3635,7 @@ in different ways.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0miszzlzplpvaj0j1yii9867ydr42wsaqa9g6grxdrci75p05g00"))))
+                "0qm809dqvxc7pa1cr9skmglq9vrbq5hhm4c4m5yi46ldh1v96dgf"))))
     (build-system copy-build-system)
     (arguments
      `(#:install-plan
@@ -3931,7 +4074,7 @@ also available.")
        ("python-polib" ,python-polib)
        ("python-pytest" ,python-pytest)
        ("python-pytest-mock" ,python-pytest-mock)))
-    (home-page "http://unknown-horizons.org/")
+    (home-page "https://unknown-horizons.org/")
     (synopsis "Isometric realtime strategy, economy and city building simulation")
     (description
      "Unknown Horizons is a 2D realtime strategy simulation with an emphasis
@@ -4000,7 +4143,7 @@ falling, themeable graphics and sounds, and replays.")
 (define-public wesnoth
   (package
     (name "wesnoth")
-    (version "1.14.15")
+    (version "1.14.16")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/wesnoth/wesnoth-"
@@ -4009,7 +4152,7 @@ falling, themeable graphics and sounds, and replays.")
                                   "wesnoth-" version ".tar.bz2"))
               (sha256
                (base32
-                "05iapxj3nzaqh10y42yq1jf7spxgm4iwjw4qj1c4lnb25xp4mc2h"))))
+                "1d9hq3dcx0sgs2v4400rg2nw98v46m7bwiqqjv8z8n7vw8kx8lhg"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ;no check target
@@ -5756,7 +5899,7 @@ for Un*x systems with X11.")
 (define-public freeciv
   (package
    (name "freeciv")
-   (version "2.6.3")
+   (version "2.6.4")
    (source
     (origin
      (method url-fetch)
@@ -5768,7 +5911,7 @@ for Un*x systems with X11.")
                   (version-major+minor version) "/" version
                   "/freeciv-" version ".tar.bz2")))
      (sha256
-      (base32 "1lgq7wcbhwpy2yqdw4biwfmp5q8fh7lhlwxcgm0fpaapfl12whvp"))))
+      (base32 "1kn122f57wn5a8ryxaz73dlbd5m93mqx3bqmmz2lkgdccrvrbns0"))))
    (build-system gnu-build-system)
    (inputs
     `(("curl" ,curl)
@@ -6104,11 +6247,13 @@ small robot living in the nano world, repair its maker.")
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/teeworlds/teeworlds")
-                    (commit version)))
+                    (commit version)
+                    ;; There are two submodules in datasrc/{languages,maps}
+                    (recursive? #t)))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "169dl83q08zl4h813az8hjs4rs3dms9yjn6bnsld4fjcj0imvvc6"))
+                "1l19ksmimg6b8zzjy0skyhh7z11ql7n5gvilkv7ay5x2b9ndbqwz"))
               (modules '((guix build utils)
                          (ice-9 ftw)
                          (ice-9 regex)
@@ -6121,15 +6266,12 @@ small robot living in the nano world, repair its maker.")
                             (remove (cut string-match "(^.)|(^md5$)" <>)
                                     (scandir base-dir)))
                   #t))))
-    (build-system gnu-build-system)
+    (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ; no tests included
-       #:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (srfi srfi-26))
        #:phases
        (modify-phases %standard-phases
-         (replace 'configure
+         (add-after 'unpack 'patch-paths
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Embed path to assets.
              (substitute* "src/engine/shared/storage.cpp"
@@ -6138,51 +6280,7 @@ small robot living in the nano world, repair its maker.")
                                (assoc-ref outputs "out")
                                "/share/teeworlds/data"
                                "\"")))
-
-             ;; Bam expects all files to have a recent time stamp.
-             (for-each (cut utime <> 1 1)
-                       (find-files "."))
-
-             ;; Do not use bundled libraries.
-             (substitute* "bam.lua"
-               (("local json = Compile.+$")
-                "local json = nil
-settings.link.libs:Add(\"jsonparser\")")
-               (("local png = Compile.+$")
-                "local png = nil
-settings.link.libs:Add(\"pnglite\")")
-               (("local wavpack = Compile.+$")
-                "local wavpack = nil
-settings.link.libs:Add(\"wavpack\")")
-               (("if config\\.zlib\\.value == 1")
-                "if config.zlib.value"))
-             (substitute* "src/engine/client/graphics_threaded.cpp"
-               (("engine/external/pnglite/pnglite\\.h")
-                "pnglite.h"))
-             (substitute* "src/engine/client/sound.cpp"
-               (("engine/external/wavpack/wavpack\\.h")
-                "wavpack/wavpack.h"))
-             #t))
-         (replace 'build
-           (lambda _
-             (invoke "bam" "-a" "-v" "conf=release")))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((arch ,(system->linux-architecture
-                            (or (%current-target-system)
-                                (%current-system))))
-                    (build (string-append "build/" (if (string=? arch "i386")
-                                                       "x86" arch)
-                                          "/release/"))
-                    (data-built (string-append build "data/"))
-                    (out (assoc-ref outputs "out"))
-                    (bin (string-append out "/bin/"))
-                    (data (string-append out "/share/teeworlds/data/")))
-               (for-each (cut install-file <> bin)
-                         (map (cut string-append build <>)
-                              '("teeworlds" "teeworlds_srv")))
-               (copy-recursively data-built data)
-               #t))))))
+             #t)))))
     (inputs
      `(("freetype" ,freetype)
        ("glu" ,glu)
@@ -6193,17 +6291,17 @@ settings.link.libs:Add(\"wavpack\")")
        ("sdl2-image" ,sdl2-image)
        ("sdl2-mixer" ,sdl2-mixer)
        ("wavpack" ,wavpack)
+       ("openssl" ,openssl)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("bam" ,bam)
-       ("python" ,python-wrapper)
+     `(("python" ,python-wrapper)
        ("pkg-config" ,pkg-config)))
     (home-page "https://www.teeworlds.com")
     (synopsis "2D retro multiplayer shooter game")
     (description "Teeworlds is an online multiplayer game.  Battle with up to
 16 players in a variety of game modes, including Team Deathmatch and Capture
 The Flag.  You can even design your own maps!")
-    (license license:bsd-3)))
+    (license (list license:bsd-3 license:cc-by-sa3.0)))) ; game+maps&languages
 
 (define-public enigma
   (package
@@ -6275,14 +6373,14 @@ with the mouse isn’t always trivial.")
 (define-public chroma
   (package
     (name "chroma")
-    (version "1.17")
+    (version "1.18")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://level7.org.uk/chroma/download/chroma-"
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "047sf00x71xbmi8bqrhfbmr9bk89l2gbykkqsfpw4wz6yfjscs6y"))))
+                "12bjisf5nlqinw8n4r223vld52p0p2mw3fca92vi175c46bycbzn"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no tests included
@@ -6377,14 +6475,14 @@ fish.  The whole game is accompanied by quiet, comforting music.")
 (define-public crawl
   (package
     (name "crawl")
-    (version "0.26.0")
+    (version "0.26.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/crawl/crawl/releases/download/"
                            version "/stone_soup-" version "-nodeps.tar.xz"))
        (sha256
-        (base32 "1m81x1sp6p2ka5w2nib3pcw5w5iv58z41c8aqn0dayi1lb3yslfb"))
+        (base32 "1d8p2np2q5951wqphq2f4dyvv976m2lh82b0qp7w9pp1h8zzi1ff"))
        (patches (search-patches "crawl-upgrade-saves.patch"))))
     (build-system gnu-build-system)
     (inputs
@@ -7128,7 +7226,7 @@ elements to achieve a simple goal in the most complex way possible.")
 (define-public pioneer
   (package
     (name "pioneer")
-    (version "20200203")
+    (version "20210203")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -7137,7 +7235,7 @@ elements to achieve a simple goal in the most complex way possible.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1011xsi94jhw98mhm8kryq8ajig0qfbrdx5xdasi92bd4nk7lcp8"))))
+                "1zyi1xyghj99hz8fa6dywpscj6flp04fspnlgxbivf3rgmnxflg7"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -8376,6 +8474,45 @@ to download and install them in @file{$HOME/.stepmania-X.Y/Songs} directory.")
     (home-page "https://www.stepmania.com")
     (license license:expat)))
 
+(define-public oshu
+  (package
+    (name "oshu")
+    (version "2.0.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/fmang/oshu")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1g598incc6zlls876slgwqblwiwiszkmqa4xpzw0z7mbjmmzsizz"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'pre-check
+           ;; `make test' doesn't actually build the test executable
+           (lambda _ (invoke "make" "zerotokei"))))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("cairo" ,cairo)
+       ("ffmpeg" ,ffmpeg)
+       ("pango" ,pango)
+       ("sdl2" ,sdl2)
+       ("sdl2-image" ,sdl2-image)))
+    (home-page "https://github.com/fmang/oshu/")
+    (synopsis "Rhythm game in which you click on circles")
+    (description "@i{oshu!} is a minimalist variant of the @i{osu!} rhythm game,
+which is played by pressing buttons and following along sliders as they appear
+on screen.  Its aim is to be able to play any beatmap even on low-end hardware.
+
+This package provides the core application, but no beatmaps.  You need to
+download and unpack them separately.")
+    (license license:gpl3+)))
+
 (define-public btanks
   (package
     (name "btanks")
@@ -8653,7 +8790,7 @@ where the player draws runes in real time to effect the desired spell.")
 (define-public edgar
   (package
     (name "edgar")
-    (version "1.33")
+    (version "1.34")
     (source
      (origin
        (method url-fetch)
@@ -8661,7 +8798,7 @@ where the player draws runes in real time to effect the desired spell.")
         (string-append "https://github.com/riksweeney/edgar/releases/download/"
                        version "/edgar-" version "-1.tar.gz"))
        (sha256
-        (base32 "1mbx7dvizdca4g1blcv3bdh6yxd13k47rkya4rdzg0nvvz24m175"))))
+        (base32 "1121rq5wk3g8rs413av84s2kcy6qj6maspgy2vsxs36c2jd3yygl"))))
     (build-system gnu-build-system)
     (arguments '(#:tests? #f            ; there are no tests
                  #:make-flags
@@ -9211,6 +9348,12 @@ play with up to four players simultaneously.  It has network support.")
                                "-Dhaskell_flags=-dynamic;-fPIC")
        #:phases
        (modify-phases %standard-phases
+         (add-before 'configure 'fix-sources
+           (lambda _
+             ;; Fix a missing 'include'.
+             (substitute* "QTfrontend/ui/page/pagegamestats.cpp"
+               (("#include <QSizePolicy>")
+                "#include <QSizePolicy>\n#include <QPainterPath>"))))
          (replace 'check
            (lambda _ (invoke "ctest")))
          (add-after 'install 'install-icon
@@ -11711,14 +11854,14 @@ and chess engines.")
 (define-public chessx
   (package
     (name "chessx")
-    (version "1.5.4")
+    (version "1.5.6")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/chessx/chessx/"
                            version "/chessx-" version ".tgz"))
        (sha256
-        (base32 "1a3541vl5hp6jllgx998w9kjh9kp3wrl80yfwkxmq1bc5bzsrnz2"))))
+        (base32 "01fjchil2h6ry2ywr0dwjw2g7zd29580cr4c74d5z74h999lp6nh"))))
     (build-system qt-build-system)
     (native-inputs
      `(("qttools" ,qttools)))
@@ -11736,12 +11879,7 @@ and chess engines.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "chessx.pro"
                (("\\$\\$\\[QT_INSTALL_BINS\\]/lrelease")
-                (string-append (assoc-ref inputs "qttools") "/bin/lrelease"))
-               ;; Fix missing translations.
-               (("TRANSLATIONS = i18n/chessx_de.ts")
-                "TRANSLATIONS = i18n/chessx_de.ts i18n/chessx_da.ts \\
-i18n/chessx_fr.ts i18n/chessx_it.ts i18n/chessx_cz.ts i18n/chessx_ru.ts \\
-i18n/chessx_es.ts"))
+                (string-append (assoc-ref inputs "qttools") "/bin/lrelease")))
              #t))
          (add-after 'fix-paths 'make-qt-deterministic
            (lambda _
@@ -11769,7 +11907,7 @@ etc.  You can also play games on FICS or against an engine.")
 (define-public stockfish
   (package
     (name "stockfish")
-    (version "12")
+    (version "13")
     (source
      (origin
        (method git-fetch)
@@ -11778,15 +11916,15 @@ etc.  You can also play games on FICS or against an engine.")
              (commit (string-append "sf_" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0vcymbwp5nf114pp3ax40s21ki5dckda15vmhr77d1mnq3fn0l32"))))
+        (base32 "15dfp9fnl3w7dgxhqmsm461amsysn646rj1arnzvwhy2i6ijhg2m"))))
     (build-system gnu-build-system)
     (inputs
      `(("neural-network"
         ,(origin
            (method url-fetch)
-           (uri "https://tests.stockfishchess.org/api/nn/nn-82215d0fd0df.nnue")
+           (uri "https://tests.stockfishchess.org/api/nn/nn-62ef826d1a6d.nnue")
            (sha256
-            (base32 "1r4yqrh4di05syyhl84hqcz84djpbd605b27zhbxwg6zs07ms8c2"))))))
+            (base32 "0qsy9rr4zgxrpgwhwbi96z01a2560am2b00q2klbj4bd39nq5vv2"))))))
     (arguments
      `(#:tests? #f
        #:make-flags (list "-C" "src"
@@ -11808,7 +11946,7 @@ etc.  You can also play games on FICS or against an engine.")
                   (add-after 'unpack 'copy-net
                     (lambda* (#:key inputs #:allow-other-keys)
                       (copy-file (assoc-ref inputs "neural-network")
-                                 "src/nn-82215d0fd0df.nnue")
+                                 "src/nn-62ef826d1a6d.nnue")
                       #t)))))
     (synopsis "Strong chess engine")
     (description
@@ -12162,6 +12300,64 @@ such as GnuGo.
 @end itemize")
     (license license:gpl2+)))
 
+(define-public passage
+  (package
+    (name "passage")
+    (version "4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/hcsoftware/Passage/v"
+                           version "/Passage_v" version "_UnixSource.tar.gz"))
+       (sha256
+        (base32 "02ky4a4xdjvr71r58339jjrjyz76b5skcnbq4f8707mrln9vhby3"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #false                  ; there are none
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda _
+             (chdir "gamma256/gameSource")
+             (system "cat Makefile.GnuLinux Makefile.all > Makefile")))
+         (replace 'configure
+           (lambda* (#:key outputs inputs #:allow-other-keys)
+             (setenv "CPATH"
+                     (string-append
+                      (assoc-ref inputs "sdl") "/include/SDL:"
+                      (or (getenv "CPATH") "")))
+             (let* ((out (assoc-ref outputs "out"))
+                    (assets (string-append out "/share/passage")))
+               (substitute* "common.cpp"
+                 (("readTGA\\( \"graphics\"")
+                  (format #false "readTGA(\"~a/graphics\"" assets)))
+               (substitute* "musicPlayer.cpp"
+                 (("readTGA\\( \"music\"")
+                  (format #false "readTGA(\"~a/music\"" assets))))))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (assets (string-append out "/share/passage/")))
+               (install-file "Passage" bin)
+               (install-file "../documentation/Readme.txt" assets)
+               (copy-recursively "graphics" (string-append assets "graphics"))
+               (copy-recursively "music" (string-append assets "music"))
+               (copy-recursively "settings" (string-append assets "settings"))))))))
+    (inputs
+     `(("sdl" ,(sdl-union (list sdl sdl-mixer)))))
+    (native-inputs
+     `(("imagemagick" ,imagemagick)))
+    (home-page "http://hcsoftware.sourceforge.net/passage/")
+    (synopsis "Memento mori game")
+    (description
+     "Passage is meant to be a memento mori game.  It presents an entire life,
+from young adulthood through old age and death, in the span of five minutes.
+Of course, it's a game, not a painting or a film, so the choices that you make
+as the player are crucial.  There's no ``right'' way to play Passage, just as
+there's no right way to interpret it.")
+    (license license:public-domain)))
+
 (define-public paperview
   (let ((commit "9f8538eb6734c76877b878b8f1e52587f2ae19e6")
         (revision "1"))